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+cmVhZGRpcigpIHRvIGlub2RlX29wZXJhdGlvbnMgYW5kIHVzZSBhIHNlcGFyYXRlIG1ldGhvZCBmb3IgZGlyZWN0b3J5CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CmluZGV4IDU0ZjIxYTUuLmZhNGUxMjMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CkBAIC00NCw2ICs0NCw3IEBACiAJRkIJVGhlIGZyYW1lIGJ1ZmZlciBkZXZpY2UgaXMgZW5hYmxlZC4KIAlIVwlBcHByb3ByaWF0ZSBoYXJkd2FyZSBpcyBlbmFibGVkLgogCUlBLTY0CUlBLTY0IGFyY2hpdGVjdHVyZSBpcyBlbmFibGVkLgorCUlNQSAgICAgSW50ZWdyaXR5IG1lYXN1cmVtZW50IGFyY2hpdGVjdHVyZSBpcyBlbmFibGVkLgogCUlPU0NIRUQJTW9yZSB0aGFuIG9uZSBJL08gc2NoZWR1bGVyIGlzIGVuYWJsZWQuCiAJSVBfUE5QCUlQIERIQ1AsIEJPT1RQLCBvciBSQVJQIGlzIGVuYWJsZWQuCiAJSVNBUE5QCUlTQSBQblAgY29kZSBpcyBlbmFibGVkLgpAQCAtNDkyLDEwICs0OTMsMTIgQEAKIAkJCURlZmF1bHQ6IDY0CiAKIAlocGV0PQkJW1g4Ni0zMixIUEVUXSBvcHRpb24gdG8gY29udHJvbCBIUEVUIHVzYWdlCi0JCQlGb3JtYXQ6IHsgZW5hYmxlIChkZWZhdWx0KSB8IGRpc2FibGUgfCBmb3JjZSB9CisJCQlGb3JtYXQ6IHsgZW5hYmxlIChkZWZhdWx0KSB8IGRpc2FibGUgfCBmb3JjZSB8CisJCQkJdmVyYm9zZSB9CiAJCQlkaXNhYmxlOiBkaXNhYmxlIEhQRVQgYW5kIHVzZSBQSVQgaW5zdGVhZAogCQkJZm9yY2U6IGFsbG93IGZvcmNlIGVuYWJsZWQgb2YgdW5kb2N1bWVudGVkIGNoaXBzIChJQ0g0LAogCQkJVklBLCBuVmlkaWEpCisJCQl2ZXJib3NlOiBzaG93IGNvbnRlbnRzIG9mIEhQRVQgcmVnaXN0ZXJzIGR1cmluZyBzZXR1cAogCiAJY29tMjAwMjA9CVtIVyxORVRdIEFSQ25ldCAtIENPTTIwMDIwIGNoaXBzZXQKIAkJCUZvcm1hdDoKQEAgLTgyOSw2ICs4MzIsOSBAQAogCiAJaHZjX2l1Y3Y9CVtTMzkwXSBOdW1iZXIgb2Ygei9WTSBJVUNWIGh5cGVydmlzb3IgY29uc29sZSAoSFZDKQogCQkJICAgICAgIHRlcm1pbmFsIGRldmljZXMuIFZhbGlkIHZhbHVlczogMC4uOAorCWh2Y19pdWN2X2FsbG93PQlbUzM5MF0gQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2Ygei9WTSB1c2VyIElEcy4KKwkJCSAgICAgICBJZiBzcGVjaWZpZWQsIHovVk0gSVVDViBIVkMgYWNjZXB0cyBjb25uZWN0aW9ucworCQkJICAgICAgIGZyb20gbGlzdGVkIHovVk0gdXNlciBJRHMgb25seS4KIAogCWk4MDQyLmRlYnVnCVtIV10gVG9nZ2xlIGk4MDQyIGRlYnVnIG1vZGUKIAlpODA0Mi5kaXJlY3QJW0hXXSBQdXQga2V5Ym9hcmQgcG9ydCBpbnRvIG5vbi10cmFuc2xhdGVkIG1vZGUKQEAgLTkwMiw2ICs5MDgsMTUgQEAKIAlpaGFzaF9lbnRyaWVzPQlbS05MXQogCQkJU2V0IG51bWJlciBvZiBoYXNoIGJ1Y2tldHMgZm9yIGlub2RlIGNhY2hlLgogCisJaW1hX2F1ZGl0PQlbSU1BXQorCQkJRm9ybWF0OiB7ICIwIiB8ICIxIiB9CisJCQkwIC0tIGludGVncml0eSBhdWRpdGluZyBtZXNzYWdlcy4gKERlZmF1bHQpCisJCQkxIC0tIGVuYWJsZSBpbmZvcm1hdGlvbmFsIGludGVncml0eSBhdWRpdGluZyBtZXNzYWdlcy4KKworCWltYV9oYXNoPQlbSU1BXQorCQkJRm9ybXQ6IHsgInNoYTEiIHwgIm1kNSIgfQorCQkJZGVmYXVsdDogInNoYTEiCisKIAlpbjIwMDA9CQlbSFcsU0NTSV0KIAkJCVNlZSBoZWFkZXIgb2YgZHJpdmVycy9zY3NpL2luMjAwMC5jLgogCkBAIC0xODE2LDExICsxODMxLDYgQEAKIAkJCWF1dG9jb25maWd1cmF0aW9uLgogCQkJUmFuZ2VzIGFyZSBpbiBwYWlycyAobWVtb3J5IGJhc2UgYW5kIHNpemUpLgogCi0JZHluYW1pY19wcmludGsJRW5hYmxlcyBwcl9kZWJ1ZygpL2Rldl9kYmcoKSBjYWxscyBpZgotCQkJQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGhhcyBiZWVuIGVuYWJsZWQuCi0JCQlUaGVzZSBjYW4gYWxzbyBiZSBzd2l0Y2hlZCBvbi9vZmYgdmlhCi0JCQk8ZGVidWdmcz4vZHluYW1pY19wcmludGsvbW9kdWxlcwotCiAJcHJpbnQtZmF0YWwtc2lnbmFscz0KIAkJCVtLTkxdIGRlYnVnOiBwcmludCBmYXRhbCBzaWduYWxzCiAJCQlwcmludC1mYXRhbC1zaWduYWxzPTE6IHByaW50IHNlZ2ZhdWx0IGluZm8gdG8KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kY2NwLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kY2NwLnR4dAppbmRleCA3YTNiYjFhLi5iMTMyZTRhMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RjY3AudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kY2NwLnR4dApAQCAtMTQxLDcgKzE0MSw4IEBACiAJRGVmYXVsdCBDQ0lEIGZvciB0aGUgcmVjZWl2ZXItc2VuZGVyIGhhbGYtY29ubmVjdGlvbjsgc2VlIHR4X2NjaWQuCiAKIHNlcV93aW5kb3cgPSAxMDAKLQlUaGUgaW5pdGlhbCBzZXF1ZW5jZSB3aW5kb3cgKHNlYy4gNy41LjIpLgorCVRoZSBpbml0aWFsIHNlcXVlbmNlIHdpbmRvdyAoc2VjLiA3LjUuMikgb2YgdGhlIHNlbmRlci4gVGhpcyBpbmZsdWVuY2VzCisJdGhlIGxvY2FsIGFja25vIHZhbGlkaXR5IGFuZCB0aGUgcmVtb3RlIHNlcW5vIHZhbGlkaXR5IHdpbmRvd3MgKDcuNS4xKS4KIAogdHhfcWxlbiA9IDUKIAlUaGUgc2l6ZSBvZiB0aGUgdHJhbnNtaXQgYnVmZmVyIGluIHBhY2tldHMuIEEgdmFsdWUgb2YgMCBjb3JyZXNwb25kcwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnR4dAppbmRleCBjNzcxMjc4Li5lYzVkZTAyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnR4dApAQCAtMiw3ICsyLDcgQEAKIAogaXBfZm9yd2FyZCAtIEJPT0xFQU4KIAkwIC0gZGlzYWJsZWQgKGRlZmF1bHQpCi0Jbm90IDAgLSBlbmFibGVkIAorCW5vdCAwIC0gZW5hYmxlZAogCiAJRm9yd2FyZCBQYWNrZXRzIGJldHdlZW4gaW50ZXJmYWNlcy4KIApAQCAtMzYsNDkgKzM2LDQ5IEBACiBJUCBGcmFnbWVudGF0aW9uOgogCiBpcGZyYWdfaGlnaF90aHJlc2ggLSBJTlRFR0VSCi0JTWF4aW11bSBtZW1vcnkgdXNlZCB0byByZWFzc2VtYmxlIElQIGZyYWdtZW50cy4gV2hlbiAKKwlNYXhpbXVtIG1lbW9yeSB1c2VkIHRvIHJlYXNzZW1ibGUgSVAgZnJhZ21lbnRzLiBXaGVuCiAJaXBmcmFnX2hpZ2hfdGhyZXNoIGJ5dGVzIG9mIG1lbW9yeSBpcyBhbGxvY2F0ZWQgZm9yIHRoaXMgcHVycG9zZSwKIAl0aGUgZnJhZ21lbnQgaGFuZGxlciB3aWxsIHRvc3MgcGFja2V0cyB1bnRpbCBpcGZyYWdfbG93X3RocmVzaAogCWlzIHJlYWNoZWQuCi0JCisKIGlwZnJhZ19sb3dfdGhyZXNoIC0gSU5URUdFUgotCVNlZSBpcGZyYWdfaGlnaF90aHJlc2gJCisJU2VlIGlwZnJhZ19oaWdoX3RocmVzaAogCiBpcGZyYWdfdGltZSAtIElOVEVHRVIKLQlUaW1lIGluIHNlY29uZHMgdG8ga2VlcCBhbiBJUCBmcmFnbWVudCBpbiBtZW1vcnkuCQorCVRpbWUgaW4gc2Vjb25kcyB0byBrZWVwIGFuIElQIGZyYWdtZW50IGluIG1lbW9yeS4KIAogaXBmcmFnX3NlY3JldF9pbnRlcnZhbCAtIElOVEVHRVIKLQlSZWdlbmVyYXRpb24gaW50ZXJ2YWwgKGluIHNlY29uZHMpIG9mIHRoZSBoYXNoIHNlY3JldCAob3IgbGlmZXRpbWUgCisJUmVnZW5lcmF0aW9uIGludGVydmFsIChpbiBzZWNvbmRzKSBvZiB0aGUgaGFzaCBzZWNyZXQgKG9yIGxpZmV0aW1lCiAJZm9yIHRoZSBoYXNoIHNlY3JldCkgZm9yIElQIGZyYWdtZW50cy4KIAlEZWZhdWx0OiA2MDAKIAogaXBmcmFnX21heF9kaXN0IC0gSU5URUdFUgotCWlwZnJhZ19tYXhfZGlzdCBpcyBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyIHZhbHVlIHdoaWNoIGRlZmluZXMgdGhlIAotCW1heGltdW0gImRpc29yZGVyIiB3aGljaCBpcyBhbGxvd2VkIGFtb25nIGZyYWdtZW50cyB3aGljaCBzaGFyZSBhIAotCWNvbW1vbiBJUCBzb3VyY2UgYWRkcmVzcy4gTm90ZSB0aGF0IHJlb3JkZXJpbmcgb2YgcGFja2V0cyBpcyAKLQlub3QgdW51c3VhbCwgYnV0IGlmIGEgbGFyZ2UgbnVtYmVyIG9mIGZyYWdtZW50cyBhcnJpdmUgZnJvbSBhIHNvdXJjZSAKLQlJUCBhZGRyZXNzIHdoaWxlIGEgcGFydGljdWxhciBmcmFnbWVudCBxdWV1ZSByZW1haW5zIGluY29tcGxldGUsIGl0IAotCXByb2JhYmx5IGluZGljYXRlcyB0aGF0IG9uZSBvciBtb3JlIGZyYWdtZW50cyBiZWxvbmdpbmcgdG8gdGhhdCBxdWV1ZSAKLQloYXZlIGJlZW4gbG9zdC4gV2hlbiBpcGZyYWdfbWF4X2Rpc3QgaXMgcG9zaXRpdmUsIGFuIGFkZGl0aW9uYWwgY2hlY2sgCi0JaXMgZG9uZSBvbiBmcmFnbWVudHMgYmVmb3JlIHRoZXkgYXJlIGFkZGVkIHRvIGEgcmVhc3NlbWJseSBxdWV1ZSAtIGlmIAotCWlwZnJhZ19tYXhfZGlzdCAob3IgbW9yZSkgZnJhZ21lbnRzIGhhdmUgYXJyaXZlZCBmcm9tIGEgcGFydGljdWxhciBJUCAKLQlhZGRyZXNzIGJldHdlZW4gYWRkaXRpb25zIHRvIGFueSBJUCBmcmFnbWVudCBxdWV1ZSB1c2luZyB0aGF0IHNvdXJjZSAKLQlhZGRyZXNzLCBpdCdzIHByZXN1bWVkIHRoYXQgb25lIG9yIG1vcmUgZnJhZ21lbnRzIGluIHRoZSBxdWV1ZSBhcmUgCi0JbG9zdC4gVGhlIGV4aXN0aW5nIGZyYWdtZW50IHF1ZXVlIHdpbGwgYmUgZHJvcHBlZCwgYW5kIGEgbmV3IG9uZSAKKwlpcGZyYWdfbWF4X2Rpc3QgaXMgYSBub24tbmVnYXRpdmUgaW50ZWdlciB2YWx1ZSB3aGljaCBkZWZpbmVzIHRoZQorCW1heGltdW0gImRpc29yZGVyIiB3aGljaCBpcyBhbGxvd2VkIGFtb25nIGZyYWdtZW50cyB3aGljaCBzaGFyZSBhCisJY29tbW9uIElQIHNvdXJjZSBhZGRyZXNzLiBOb3RlIHRoYXQgcmVvcmRlcmluZyBvZiBwYWNrZXRzIGlzCisJbm90IHVudXN1YWwsIGJ1dCBpZiBhIGxhcmdlIG51bWJlciBvZiBmcmFnbWVudHMgYXJyaXZlIGZyb20gYSBzb3VyY2UKKwlJUCBhZGRyZXNzIHdoaWxlIGEgcGFydGljdWxhciBmcmFnbWVudCBxdWV1ZSByZW1haW5zIGluY29tcGxldGUsIGl0CisJcHJvYmFibHkgaW5kaWNhdGVzIHRoYXQgb25lIG9yIG1vcmUgZnJhZ21lbnRzIGJlbG9uZ2luZyB0byB0aGF0IHF1ZXVlCisJaGF2ZSBiZWVuIGxvc3QuIFdoZW4gaXBmcmFnX21heF9kaXN0IGlzIHBvc2l0aXZlLCBhbiBhZGRpdGlvbmFsIGNoZWNrCisJaXMgZG9uZSBvbiBmcmFnbWVudHMgYmVmb3JlIHRoZXkgYXJlIGFkZGVkIHRvIGEgcmVhc3NlbWJseSBxdWV1ZSAtIGlmCisJaXBmcmFnX21heF9kaXN0IChvciBtb3JlKSBmcmFnbWVudHMgaGF2ZSBhcnJpdmVkIGZyb20gYSBwYXJ0aWN1bGFyIElQCisJYWRkcmVzcyBiZXR3ZWVuIGFkZGl0aW9ucyB0byBhbnkgSVAgZnJhZ21lbnQgcXVldWUgdXNpbmcgdGhhdCBzb3VyY2UKKwlhZGRyZXNzLCBpdCdzIHByZXN1bWVkIHRoYXQgb25lIG9yIG1vcmUgZnJhZ21lbnRzIGluIHRoZSBxdWV1ZSBhcmUKKwlsb3N0LiBUaGUgZXhpc3RpbmcgZnJhZ21lbnQgcXVldWUgd2lsbCBiZSBkcm9wcGVkLCBhbmQgYSBuZXcgb25lCiAJc3RhcnRlZC4gQW4gaXBmcmFnX21heF9kaXN0IHZhbHVlIG9mIHplcm8gZGlzYWJsZXMgdGhpcyBjaGVjay4KIAogCVVzaW5nIGEgdmVyeSBzbWFsbCB2YWx1ZSwgZS5nLiAxIG9yIDIsIGZvciBpcGZyYWdfbWF4X2Rpc3QgY2FuCiAJcmVzdWx0IGluIHVubmVjZXNzYXJpbHkgZHJvcHBpbmcgZnJhZ21lbnQgcXVldWVzIHdoZW4gbm9ybWFsCi0JcmVvcmRlcmluZyBvZiBwYWNrZXRzIG9jY3Vycywgd2hpY2ggY291bGQgbGVhZCB0byBwb29yIGFwcGxpY2F0aW9uIAotCXBlcmZvcm1hbmNlLiBVc2luZyBhIHZlcnkgbGFyZ2UgdmFsdWUsIGUuZy4gNTAwMDAsIGluY3JlYXNlcyB0aGUgCi0JbGlrZWxpaG9vZCBvZiBpbmNvcnJlY3RseSByZWFzc2VtYmxpbmcgSVAgZnJhZ21lbnRzIHRoYXQgb3JpZ2luYXRlIAorCXJlb3JkZXJpbmcgb2YgcGFja2V0cyBvY2N1cnMsIHdoaWNoIGNvdWxkIGxlYWQgdG8gcG9vciBhcHBsaWNhdGlvbgorCXBlcmZvcm1hbmNlLiBVc2luZyBhIHZlcnkgbGFyZ2UgdmFsdWUsIGUuZy4gNTAwMDAsIGluY3JlYXNlcyB0aGUKKwlsaWtlbGlob29kIG9mIGluY29ycmVjdGx5IHJlYXNzZW1ibGluZyBJUCBmcmFnbWVudHMgdGhhdCBvcmlnaW5hdGUKIAlmcm9tIGRpZmZlcmVudCBJUCBkYXRhZ3JhbXMsIHdoaWNoIGNvdWxkIHJlc3VsdCBpbiBkYXRhIGNvcnJ1cHRpb24uCiAJRGVmYXVsdDogNjQKIAogSU5FVCBwZWVyIHN0b3JhZ2U6CiAKIGluZXRfcGVlcl90aHJlc2hvbGQgLSBJTlRFR0VSCi0JVGhlIGFwcHJveGltYXRlIHNpemUgb2YgdGhlIHN0b3JhZ2UuICBTdGFydGluZyBmcm9tIHRoaXMgdGhyZXNob2xkCQorCVRoZSBhcHByb3hpbWF0ZSBzaXplIG9mIHRoZSBzdG9yYWdlLiAgU3RhcnRpbmcgZnJvbSB0aGlzIHRocmVzaG9sZAogCWVudHJpZXMgd2lsbCBiZSB0aHJvd24gYWdncmVzc2l2ZWx5LiAgVGhpcyB0aHJlc2hvbGQgYWxzbyBkZXRlcm1pbmVzCiAJZW50cmllcycgdGltZS10by1saXZlIGFuZCB0aW1lIGludGVydmFscyBiZXR3ZWVuIGdhcmJhZ2UgY29sbGVjdGlvbgogCXBhc3Nlcy4gIE1vcmUgZW50cmllcywgbGVzcyB0aW1lLXRvLWxpdmUsIGxlc3MgR0MgaW50ZXJ2YWwuCkBAIC0xMDUsNyArMTA1LDcgQEAKIAlpbiBlZmZlY3QgdW5kZXIgbG93IChvciBhYnNlbnQpIG1lbW9yeSBwcmVzc3VyZSBvbiB0aGUgcG9vbC4KIAlNZWFzdXJlZCBpbiBzZWNvbmRzLgogCi1UQ1AgdmFyaWFibGVzOiAKK1RDUCB2YXJpYWJsZXM6CiAKIHNvbWF4Y29ubiAtIElOVEVHRVIKIAlMaW1pdCBvZiBzb2NrZXQgbGlzdGVuKCkgYmFja2xvZywga25vd24gaW4gdXNlcnNwYWNlIGFzIFNPTUFYQ09OTi4KQEAgLTMxMCw3ICszMTAsNyBAQAogCiB0Y3BfcmVvcmRlcmluZyAtIElOVEVHRVIKIAlNYXhpbWFsIHJlb3JkZXJpbmcgb2YgcGFja2V0cyBpbiBhIFRDUCBzdHJlYW0uCi0JRGVmYXVsdDogMwkKKwlEZWZhdWx0OiAzCiAKIHRjcF9yZXRyYW5zX2NvbGxhcHNlIC0gQk9PTEVBTgogCUJ1Zy10by1idWcgY29tcGF0aWJpbGl0eSB3aXRoIHNvbWUgYnJva2VuIHByaW50ZXJzLgpAQCAtNTIxLDcgKzUyMSw3IEBACiAKIGlwX2xvY2FsX3BvcnRfcmFuZ2UgLSAyIElOVEVHRVJTCiAJRGVmaW5lcyB0aGUgbG9jYWwgcG9ydCByYW5nZSB0aGF0IGlzIHVzZWQgYnkgVENQIGFuZCBVRFAgdG8KLQljaG9vc2UgdGhlIGxvY2FsIHBvcnQuIFRoZSBmaXJzdCBudW1iZXIgaXMgdGhlIGZpcnN0LCB0aGUgCisJY2hvb3NlIHRoZSBsb2NhbCBwb3J0LiBUaGUgZmlyc3QgbnVtYmVyIGlzIHRoZSBmaXJzdCwgdGhlCiAJc2Vjb25kIHRoZSBsYXN0IGxvY2FsIHBvcnQgbnVtYmVyLiBEZWZhdWx0IHZhbHVlIGRlcGVuZHMgb24KIAlhbW91bnQgb2YgbWVtb3J5IGF2YWlsYWJsZSBvbiB0aGUgc3lzdGVtOgogCT4gMTI4TWIgMzI3NjgtNjEwMDAKQEAgLTU5NCwxMiArNTk0LDEyIEBACiAKIAlJZiB6ZXJvLCBpY21wIGVycm9yIG1lc3NhZ2VzIGFyZSBzZW50IHdpdGggdGhlIHByaW1hcnkgYWRkcmVzcyBvZgogCXRoZSBleGl0aW5nIGludGVyZmFjZS4KLSAKKwogCUlmIG5vbi16ZXJvLCB0aGUgbWVzc2FnZSB3aWxsIGJlIHNlbnQgd2l0aCB0aGUgcHJpbWFyeSBhZGRyZXNzIG9mCiAJdGhlIGludGVyZmFjZSB0aGF0IHJlY2VpdmVkIHRoZSBwYWNrZXQgdGhhdCBjYXVzZWQgdGhlIGljbXAgZXJyb3IuCiAJVGhpcyBpcyB0aGUgYmVoYXZpb3VyIG5ldHdvcmsgbWFueSBhZG1pbmlzdHJhdG9ycyB3aWxsIGV4cGVjdCBmcm9tCiAJYSByb3V0ZXIuIEFuZCBpdCBjYW4gbWFrZSBkZWJ1Z2dpbmcgY29tcGxpY2F0ZWQgbmV0d29yayBsYXlvdXRzCi0JbXVjaCBlYXNpZXIuIAorCW11Y2ggZWFzaWVyLgogCiAJTm90ZSB0aGF0IGlmIG5vIHByaW1hcnkgYWRkcmVzcyBleGlzdHMgZm9yIHRoZSBpbnRlcmZhY2Ugc2VsZWN0ZWQsCiAJdGhlbiB0aGUgcHJpbWFyeSBhZGRyZXNzIG9mIHRoZSBmaXJzdCBub24tbG9vcGJhY2sgaW50ZXJmYWNlIHRoYXQKQEAgLTYxMSw3ICs2MTEsNyBAQAogCUNoYW5nZSB0aGUgbWF4aW11bSBudW1iZXIgb2YgbXVsdGljYXN0IGdyb3VwcyB3ZSBjYW4gc3Vic2NyaWJlIHRvLgogCURlZmF1bHQ6IDIwCiAKLWNvbmYvaW50ZXJmYWNlLyogIGNoYW5nZXMgc3BlY2lhbCBzZXR0aW5ncyBwZXIgaW50ZXJmYWNlICh3aGVyZSAiaW50ZXJmYWNlIiBpcyAKK2NvbmYvaW50ZXJmYWNlLyogIGNoYW5nZXMgc3BlY2lhbCBzZXR0aW5ncyBwZXIgaW50ZXJmYWNlICh3aGVyZSAiaW50ZXJmYWNlIiBpcwogCQkgIHRoZSBuYW1lIG9mIHlvdXIgbmV0d29yayBpbnRlcmZhY2UpCiBjb25mL2FsbC8qCSAgaXMgc3BlY2lhbCwgY2hhbmdlcyB0aGUgc2V0dGluZ3MgZm9yIGFsbCBpbnRlcmZhY2VzCiAKQEAgLTYyNSwxMSArNjI1LDExIEBACiBhY2NlcHRfcmVkaXJlY3RzIC0gQk9PTEVBTgogCUFjY2VwdCBJQ01QIHJlZGlyZWN0IG1lc3NhZ2VzLgogCWFjY2VwdF9yZWRpcmVjdHMgZm9yIHRoZSBpbnRlcmZhY2Ugd2lsbCBiZSBlbmFibGVkIGlmOgotCS0gYm90aCBjb25mL3thbGwsaW50ZXJmYWNlfS9hY2NlcHRfcmVkaXJlY3RzIGFyZSBUUlVFIGluIHRoZSBjYXNlIGZvcndhcmRpbmcKLQkgIGZvciB0aGUgaW50ZXJmYWNlIGlzIGVuYWJsZWQKKwktIGJvdGggY29uZi97YWxsLGludGVyZmFjZX0vYWNjZXB0X3JlZGlyZWN0cyBhcmUgVFJVRSBpbiB0aGUgY2FzZQorCSAgZm9yd2FyZGluZyBmb3IgdGhlIGludGVyZmFjZSBpcyBlbmFibGVkCiAJb3IKLQktIGF0IGxlYXN0IG9uZSBvZiBjb25mL3thbGwsaW50ZXJmYWNlfS9hY2NlcHRfcmVkaXJlY3RzIGlzIFRSVUUgaW4gdGhlIGNhc2UKLQkgIGZvcndhcmRpbmcgZm9yIHRoZSBpbnRlcmZhY2UgaXMgZGlzYWJsZWQKKwktIGF0IGxlYXN0IG9uZSBvZiBjb25mL3thbGwsaW50ZXJmYWNlfS9hY2NlcHRfcmVkaXJlY3RzIGlzIFRSVUUgaW4gdGhlCisJICBjYXNlIGZvcndhcmRpbmcgZm9yIHRoZSBpbnRlcmZhY2UgaXMgZGlzYWJsZWQKIAlhY2NlcHRfcmVkaXJlY3RzIGZvciB0aGUgaW50ZXJmYWNlIHdpbGwgYmUgZGlzYWJsZWQgb3RoZXJ3aXNlCiAJZGVmYXVsdCBUUlVFIChob3N0KQogCQlGQUxTRSAocm91dGVyKQpAQCAtNjQwLDggKzY0MCw4IEBACiBtY19mb3J3YXJkaW5nIC0gQk9PTEVBTgogCURvIG11bHRpY2FzdCByb3V0aW5nLiBUaGUga2VybmVsIG5lZWRzIHRvIGJlIGNvbXBpbGVkIHdpdGggQ09ORklHX01ST1VURQogCWFuZCBhIG11bHRpY2FzdCByb3V0aW5nIGRhZW1vbiBpcyByZXF1aXJlZC4KLQljb25mL2FsbC9tY19mb3J3YXJkaW5nIG11c3QgYWxzbyBiZSBzZXQgdG8gVFJVRSB0byBlbmFibGUgbXVsdGljYXN0IHJvdXRpbmcKLQlmb3IgdGhlIGludGVyZmFjZQorCWNvbmYvYWxsL21jX2ZvcndhcmRpbmcgbXVzdCBhbHNvIGJlIHNldCB0byBUUlVFIHRvIGVuYWJsZSBtdWx0aWNhc3QKKwlyb3V0aW5nCWZvciB0aGUgaW50ZXJmYWNlCiAKIG1lZGl1bV9pZCAtIElOVEVHRVIKIAlJbnRlZ2VyIHZhbHVlIHVzZWQgdG8gZGlmZmVyZW50aWF0ZSB0aGUgZGV2aWNlcyBieSB0aGUgbWVkaXVtIHRoZXkKQEAgLTY0OSw3ICs2NDksNyBAQAogCXRoZSBicm9hZGNhc3QgcGFja2V0cyBhcmUgcmVjZWl2ZWQgb25seSBvbiBvbmUgb2YgdGhlbS4KIAlUaGUgZGVmYXVsdCB2YWx1ZSAwIG1lYW5zIHRoYXQgdGhlIGRldmljZSBpcyB0aGUgb25seSBpbnRlcmZhY2UKIAl0byBpdHMgbWVkaXVtLCB2YWx1ZSBvZiAtMSBtZWFucyB0aGF0IG1lZGl1bSBpcyBub3Qga25vd24uCi0JCisKIAlDdXJyZW50bHksIGl0IGlzIHVzZWQgdG8gY2hhbmdlIHRoZSBwcm94eV9hcnAgYmVoYXZpb3I6CiAJdGhlIHByb3h5X2FycCBmZWF0dXJlIGlzIGVuYWJsZWQgZm9yIHBhY2tldHMgZm9yd2FyZGVkIGJldHdlZW4KIAl0d28gZGV2aWNlcyBhdHRhY2hlZCB0byBkaWZmZXJlbnQgbWVkaWEuCkBAIC02OTksMTYgKzY5OSwyMiBAQAogCWRlZmF1bHQgVFJVRSAocm91dGVyKQogCQlGQUxTRSAoaG9zdCkKIAotcnBfZmlsdGVyIC0gQk9PTEVBTgotCTEgLSBkbyBzb3VyY2UgdmFsaWRhdGlvbiBieSByZXZlcnNlZCBwYXRoLCBhcyBzcGVjaWZpZWQgaW4gUkZDMTgxMgotCSAgICBSZWNvbW1lbmRlZCBvcHRpb24gZm9yIHNpbmdsZSBob21lZCBob3N0cyBhbmQgc3R1YiBuZXR3b3JrCi0JICAgIHJvdXRlcnMuIENvdWxkIGNhdXNlIHRyb3VibGVzIGZvciBjb21wbGljYXRlZCAobm90IGxvb3AgZnJlZSkKLQkgICAgbmV0d29ya3MgcnVubmluZyBhIHNsb3cgdW5yZWxpYWJsZSBwcm90b2NvbCAoc29ydCBvZiBSSVApLAotCSAgICBvciB1c2luZyBzdGF0aWMgcm91dGVzLgotCitycF9maWx0ZXIgLSBJTlRFR0VSCiAJMCAtIE5vIHNvdXJjZSB2YWxpZGF0aW9uLgorCTEgLSBTdHJpY3QgbW9kZSBhcyBkZWZpbmVkIGluIFJGQzM3MDQgU3RyaWN0IFJldmVyc2UgUGF0aAorCSAgICBFYWNoIGluY29taW5nIHBhY2tldCBpcyB0ZXN0ZWQgYWdhaW5zdCB0aGUgRklCIGFuZCBpZiB0aGUgaW50ZXJmYWNlCisJICAgIGlzIG5vdCB0aGUgYmVzdCByZXZlcnNlIHBhdGggdGhlIHBhY2tldCBjaGVjayB3aWxsIGZhaWwuCisJICAgIEJ5IGRlZmF1bHQgZmFpbGVkIHBhY2tldHMgYXJlIGRpc2NhcmRlZC4KKwkyIC0gTG9vc2UgbW9kZSBhcyBkZWZpbmVkIGluIFJGQzM3MDQgTG9vc2UgUmV2ZXJzZSBQYXRoCisJICAgIEVhY2ggaW5jb21pbmcgcGFja2V0J3Mgc291cmNlIGFkZHJlc3MgaXMgYWxzbyB0ZXN0ZWQgYWdhaW5zdCB0aGUgRklCCisJICAgIGFuZCBpZiB0aGUgc291cmNlIGFkZHJlc3MgaXMgbm90IHJlYWNoYWJsZSB2aWEgYW55IGludGVyZmFjZQorCSAgICB0aGUgcGFja2V0IGNoZWNrIHdpbGwgZmFpbC4KIAotCWNvbmYvYWxsL3JwX2ZpbHRlciBtdXN0IGFsc28gYmUgc2V0IHRvIFRSVUUgdG8gZG8gc291cmNlIHZhbGlkYXRpb24KKwlDdXJyZW50IHJlY29tbWVuZGVkIHByYWN0aWNlIGluIFJGQzM3MDQgaXMgdG8gZW5hYmxlIHN0cmljdCBtb2RlCisJdG8gcHJldmVudCBJUCBzcG9vZmluZyBmcm9tIEREb3MgYXR0YWNrcy4gSWYgdXNpbmcgYXN5bW1ldHJpYyByb3V0aW5nCisJb3Igb3RoZXIgY29tcGxpY2F0ZWQgcm91dGluZywgdGhlbiBsb29zZSBtb2RlIGlzIHJlY29tbWVuZGVkLgorCisJY29uZi9hbGwvcnBfZmlsdGVyIG11c3QgYWxzbyBiZSBzZXQgdG8gbm9uLXplcm8gdG8gZG8gc291cmNlIHZhbGlkYXRpb24KIAlvbiB0aGUgaW50ZXJmYWNlCiAKIAlEZWZhdWx0IHZhbHVlIGlzIDAuIE5vdGUgdGhhdCBzb21lIGRpc3RyaWJ1dGlvbnMgZW5hYmxlIGl0CkBAIC03ODIsNiArNzg4LDEyIEBACiAJVGhlIG1heCB2YWx1ZSBmcm9tIGNvbmYve2FsbCxpbnRlcmZhY2V9L2FycF9pZ25vcmUgaXMgdXNlZAogCXdoZW4gQVJQIHJlcXVlc3QgaXMgcmVjZWl2ZWQgb24gdGhlIHtpbnRlcmZhY2V9CiAKK2FycF9ub3RpZnkgLSBCT09MRUFOCisJRGVmaW5lIG1vZGUgZm9yIG5vdGlmaWNhdGlvbiBvZiBhZGRyZXNzIGFuZCBkZXZpY2UgY2hhbmdlcy4KKwkwIC0gKGRlZmF1bHQpOiBkbyBub3RoaW5nCisJMSAtIEdlbmVyYXRlIGdyYXR1aXRvdXMgYXJwIHJlcGxpZXMgd2hlbiBkZXZpY2UgaXMgYnJvdWdodCB1cAorCSAgICBvciBoYXJkd2FyZSBhZGRyZXNzIGNoYW5nZXMuCisKIGFycF9hY2NlcHQgLSBCT09MRUFOCiAJRGVmaW5lIGJlaGF2aW9yIHdoZW4gZ3JhdHVpdG91cyBhcnAgcmVwbGllcyBhcmUgcmVjZWl2ZWQ6CiAJMCAtIGRyb3AgZ3JhdHVpdG91cyBhcnAgZnJhbWVzCkBAIC04MjMsNyArODM1LDcgQEAKIAogYmluZHY2b25seSAtIEJPT0xFQU4KIAlEZWZhdWx0IHZhbHVlIGZvciBJUFY2X1Y2T05MWSBzb2NrZXQgb3B0aW9uLAotCXdoaWNoIHJlc3RyaWN0cyB1c2Ugb2YgdGhlIElQdjYgc29ja2V0IHRvIElQdjYgY29tbXVuaWNhdGlvbiAKKwl3aGljaCByZXN0cmljdHMgdXNlIG9mIHRoZSBJUHY2IHNvY2tldCB0byBJUHY2IGNvbW11bmljYXRpb24KIAlvbmx5LgogCQlUUlVFOiBkaXNhYmxlIElQdjQtbWFwcGVkIGFkZHJlc3MgZmVhdHVyZQogCQlGQUxTRTogZW5hYmxlIElQdjQtbWFwcGVkIGFkZHJlc3MgZmVhdHVyZQpAQCAtODMzLDE5ICs4NDUsMTkgQEAKIElQdjYgRnJhZ21lbnRhdGlvbjoKIAogaXA2ZnJhZ19oaWdoX3RocmVzaCAtIElOVEVHRVIKLQlNYXhpbXVtIG1lbW9yeSB1c2VkIHRvIHJlYXNzZW1ibGUgSVB2NiBmcmFnbWVudHMuIFdoZW4gCisJTWF4aW11bSBtZW1vcnkgdXNlZCB0byByZWFzc2VtYmxlIElQdjYgZnJhZ21lbnRzLiBXaGVuCiAJaXA2ZnJhZ19oaWdoX3RocmVzaCBieXRlcyBvZiBtZW1vcnkgaXMgYWxsb2NhdGVkIGZvciB0aGlzIHB1cnBvc2UsCiAJdGhlIGZyYWdtZW50IGhhbmRsZXIgd2lsbCB0b3NzIHBhY2tldHMgdW50aWwgaXA2ZnJhZ19sb3dfdGhyZXNoCiAJaXMgcmVhY2hlZC4KLQkKKwogaXA2ZnJhZ19sb3dfdGhyZXNoIC0gSU5URUdFUgotCVNlZSBpcDZmcmFnX2hpZ2hfdGhyZXNoCQorCVNlZSBpcDZmcmFnX2hpZ2hfdGhyZXNoCiAKIGlwNmZyYWdfdGltZSAtIElOVEVHRVIKIAlUaW1lIGluIHNlY29uZHMgdG8ga2VlcCBhbiBJUHY2IGZyYWdtZW50IGluIG1lbW9yeS4KIAogaXA2ZnJhZ19zZWNyZXRfaW50ZXJ2YWwgLSBJTlRFR0VSCi0JUmVnZW5lcmF0aW9uIGludGVydmFsIChpbiBzZWNvbmRzKSBvZiB0aGUgaGFzaCBzZWNyZXQgKG9yIGxpZmV0aW1lIAorCVJlZ2VuZXJhdGlvbiBpbnRlcnZhbCAoaW4gc2Vjb25kcykgb2YgdGhlIGhhc2ggc2VjcmV0IChvciBsaWZldGltZQogCWZvciB0aGUgaGFzaCBzZWNyZXQpIGZvciBJUHY2IGZyYWdtZW50cy4KIAlEZWZhdWx0OiA2MDAKIApAQCAtODU0LDE3ICs4NjYsMTcgQEAKIAogCiBjb25mL2FsbC8qOgotCUNoYW5nZSBhbGwgdGhlIGludGVyZmFjZS1zcGVjaWZpYyBzZXR0aW5ncy4gIAorCUNoYW5nZSBhbGwgdGhlIGludGVyZmFjZS1zcGVjaWZpYyBzZXR0aW5ncy4KIAogCVtYWFg6ICBPdGhlciBzcGVjaWFsIGZlYXR1cmVzIHRoYW4gZm9yd2FyZGluZz9dCiAKIGNvbmYvYWxsL2ZvcndhcmRpbmcgLSBCT09MRUFOCi0JRW5hYmxlIGdsb2JhbCBJUHY2IGZvcndhcmRpbmcgYmV0d2VlbiBhbGwgaW50ZXJmYWNlcy4gIAorCUVuYWJsZSBnbG9iYWwgSVB2NiBmb3J3YXJkaW5nIGJldHdlZW4gYWxsIGludGVyZmFjZXMuCiAKLQlJUHY0IGFuZCBJUHY2IHdvcmsgZGlmZmVyZW50bHkgaGVyZTsgZS5nLiBuZXRmaWx0ZXIgbXVzdCBiZSB1c2VkIAorCUlQdjQgYW5kIElQdjYgd29yayBkaWZmZXJlbnRseSBoZXJlOyBlLmcuIG5ldGZpbHRlciBtdXN0IGJlIHVzZWQKIAl0byBjb250cm9sIHdoaWNoIGludGVyZmFjZXMgbWF5IGZvcndhcmQgcGFja2V0cyBhbmQgd2hpY2ggbm90LgogCi0JVGhpcyBhbHNvIHNldHMgYWxsIGludGVyZmFjZXMnIEhvc3QvUm91dGVyIHNldHRpbmcgCisJVGhpcyBhbHNvIHNldHMgYWxsIGludGVyZmFjZXMnIEhvc3QvUm91dGVyIHNldHRpbmcKIAknZm9yd2FyZGluZycgdG8gdGhlIHNwZWNpZmllZCB2YWx1ZS4gIFNlZSBiZWxvdyBmb3IgZGV0YWlscy4KIAogCVRoaXMgcmVmZXJyZWQgdG8gYXMgZ2xvYmFsIGZvcndhcmRpbmcuCkBAIC04NzUsMTIgKzg4NywxMiBAQAogY29uZi9pbnRlcmZhY2UvKjoKIAlDaGFuZ2Ugc3BlY2lhbCBzZXR0aW5ncyBwZXIgaW50ZXJmYWNlLgogCi0JVGhlIGZ1bmN0aW9uYWwgYmVoYXZpb3VyIGZvciBjZXJ0YWluIHNldHRpbmdzIGlzIGRpZmZlcmVudCAKKwlUaGUgZnVuY3Rpb25hbCBiZWhhdmlvdXIgZm9yIGNlcnRhaW4gc2V0dGluZ3MgaXMgZGlmZmVyZW50CiAJZGVwZW5kaW5nIG9uIHdoZXRoZXIgbG9jYWwgZm9yd2FyZGluZyBpcyBlbmFibGVkIG9yIG5vdC4KIAogYWNjZXB0X3JhIC0gQk9PTEVBTgogCUFjY2VwdCBSb3V0ZXIgQWR2ZXJ0aXNlbWVudHM7IGF1dG9jb25maWd1cmUgdXNpbmcgdGhlbS4KLQkKKwogCUZ1bmN0aW9uYWwgZGVmYXVsdDogZW5hYmxlZCBpZiBsb2NhbCBmb3J3YXJkaW5nIGlzIGRpc2FibGVkLgogCQkJICAgIGRpc2FibGVkIGlmIGxvY2FsIGZvcndhcmRpbmcgaXMgZW5hYmxlZC4KIApAQCAtOTI2LDcgKzkzOCw3IEBACiAJRGVmYXVsdDogMAogCiBhdXRvY29uZiAtIEJPT0xFQU4KLQlBdXRvY29uZmlndXJlIGFkZHJlc3NlcyB1c2luZyBQcmVmaXggSW5mb3JtYXRpb24gaW4gUm91dGVyIAorCUF1dG9jb25maWd1cmUgYWRkcmVzc2VzIHVzaW5nIFByZWZpeCBJbmZvcm1hdGlvbiBpbiBSb3V0ZXIKIAlBZHZlcnRpc2VtZW50cy4KIAogCUZ1bmN0aW9uYWwgZGVmYXVsdDogZW5hYmxlZCBpZiBhY2NlcHRfcmFfcGluZm8gaXMgZW5hYmxlZC4KQEAgLTkzNSwxMSArOTQ3LDExIEBACiBkYWRfdHJhbnNtaXRzIC0gSU5URUdFUgogCVRoZSBhbW91bnQgb2YgRHVwbGljYXRlIEFkZHJlc3MgRGV0ZWN0aW9uIHByb2JlcyB0byBzZW5kLgogCURlZmF1bHQ6IDEKLQkKLWZvcndhcmRpbmcgLSBCT09MRUFOCi0JQ29uZmlndXJlIGludGVyZmFjZS1zcGVjaWZpYyBIb3N0L1JvdXRlciBiZWhhdmlvdXIuICAKIAotCU5vdGU6IEl0IGlzIHJlY29tbWVuZGVkIHRvIGhhdmUgdGhlIHNhbWUgc2V0dGluZyBvbiBhbGwgCitmb3J3YXJkaW5nIC0gQk9PTEVBTgorCUNvbmZpZ3VyZSBpbnRlcmZhY2Utc3BlY2lmaWMgSG9zdC9Sb3V0ZXIgYmVoYXZpb3VyLgorCisJTm90ZTogSXQgaXMgcmVjb21tZW5kZWQgdG8gaGF2ZSB0aGUgc2FtZSBzZXR0aW5nIG9uIGFsbAogCWludGVyZmFjZXM7IG1peGVkIHJvdXRlci9ob3N0IHNjZW5hcmlvcyBhcmUgcmF0aGVyIHVuY29tbW9uLgogCiAJRkFMU0U6CkBAIC05NDgsMTMgKzk2MCwxMyBAQAogCiAJMS4gSXNSb3V0ZXIgZmxhZyBpcyBub3Qgc2V0IGluIE5laWdoYm91ciBBZHZlcnRpc2VtZW50cy4KIAkyLiBSb3V0ZXIgU29saWNpdGF0aW9ucyBhcmUgYmVpbmcgc2VudCB3aGVuIG5lY2Vzc2FyeS4KLQkzLiBJZiBhY2NlcHRfcmEgaXMgVFJVRSAoZGVmYXVsdCksIGFjY2VwdCBSb3V0ZXIgCisJMy4gSWYgYWNjZXB0X3JhIGlzIFRSVUUgKGRlZmF1bHQpLCBhY2NlcHQgUm91dGVyCiAJICAgQWR2ZXJ0aXNlbWVudHMgKGFuZCBkbyBhdXRvY29uZmlndXJhdGlvbikuCiAJNC4gSWYgYWNjZXB0X3JlZGlyZWN0cyBpcyBUUlVFIChkZWZhdWx0KSwgYWNjZXB0IFJlZGlyZWN0cy4KIAogCVRSVUU6CiAKLQlJZiBsb2NhbCBmb3J3YXJkaW5nIGlzIGVuYWJsZWQsIFJvdXRlciBiZWhhdmlvdXIgaXMgYXNzdW1lZC4gCisJSWYgbG9jYWwgZm9yd2FyZGluZyBpcyBlbmFibGVkLCBSb3V0ZXIgYmVoYXZpb3VyIGlzIGFzc3VtZWQuCiAJVGhpcyBtZWFucyBleGFjdGx5IHRoZSByZXZlcnNlIGZyb20gdGhlIGFib3ZlOgogCiAJMS4gSXNSb3V0ZXIgZmxhZyBpcyBzZXQgaW4gTmVpZ2hib3VyIEFkdmVydGlzZW1lbnRzLgpAQCAtOTg5LDcgKzEwMDEsNyBAQAogCURlZmF1bHQ6IDQKIAogcm91dGVyX3NvbGljaXRhdGlvbnMgLSBJTlRFR0VSCi0JTnVtYmVyIG9mIFJvdXRlciBTb2xpY2l0YXRpb25zIHRvIHNlbmQgdW50aWwgYXNzdW1pbmcgbm8gCisJTnVtYmVyIG9mIFJvdXRlciBTb2xpY2l0YXRpb25zIHRvIHNlbmQgdW50aWwgYXNzdW1pbmcgbm8KIAlyb3V0ZXJzIGFyZSBwcmVzZW50LgogCURlZmF1bHQ6IDMKIApAQCAtMTAxMywxMSArMTAyNSwxMSBAQAogCiBtYXhfZGVzeW5jX2ZhY3RvciAtIElOVEVHRVIKIAlNYXhpbXVtIHZhbHVlIGZvciBERVNZTkNfRkFDVE9SLCB3aGljaCBpcyBhIHJhbmRvbSB2YWx1ZQotCXRoYXQgZW5zdXJlcyB0aGF0IGNsaWVudHMgZG9uJ3Qgc3luY2hyb25pemUgd2l0aCBlYWNoIAorCXRoYXQgZW5zdXJlcyB0aGF0IGNsaWVudHMgZG9uJ3Qgc3luY2hyb25pemUgd2l0aCBlYWNoCiAJb3RoZXIgYW5kIGdlbmVyYXRlIG5ldyBhZGRyZXNzZXMgYXQgZXhhY3RseSB0aGUgc2FtZSB0aW1lLgogCXZhbHVlIGlzIGluIHNlY29uZHMuCiAJRGVmYXVsdDogNjAwCi0JCisKIHJlZ2VuX21heF9yZXRyeSAtIElOVEVHRVIKIAlOdW1iZXIgb2YgYXR0ZW1wdHMgYmVmb3JlIGdpdmUgdXAgYXR0ZW1wdGluZyB0byBnZW5lcmF0ZQogCXZhbGlkIHRlbXBvcmFyeSBhZGRyZXNzZXMuCkBAIC0xMDI1LDEzICsxMDM3LDE1IEBACiAKIG1heF9hZGRyZXNzZXMgLSBJTlRFR0VSCiAJTnVtYmVyIG9mIG1heGltdW0gYWRkcmVzc2VzIHBlciBpbnRlcmZhY2UuICAwIGRpc2FibGVzIGxpbWl0YXRpb24uCi0JSXQgaXMgcmVjb21tZW5kZWQgbm90IHNldCB0b28gbGFyZ2UgdmFsdWUgKG9yIDApIGJlY2F1c2UgaXQgd291bGQgCi0JYmUgdG9vIGVhc3kgd2F5IHRvIGNyYXNoIGtlcm5lbCB0byBhbGxvdyB0byBjcmVhdGUgdG9vIG11Y2ggb2YgCisJSXQgaXMgcmVjb21tZW5kZWQgbm90IHNldCB0b28gbGFyZ2UgdmFsdWUgKG9yIDApIGJlY2F1c2UgaXQgd291bGQKKwliZSB0b28gZWFzeSB3YXkgdG8gY3Jhc2gga2VybmVsIHRvIGFsbG93IHRvIGNyZWF0ZSB0b28gbXVjaCBvZgogCWF1dG9jb25maWd1cmVkIGFkZHJlc3Nlcy4KIAlEZWZhdWx0OiAxNgogCiBkaXNhYmxlX2lwdjYgLSBCT09MRUFOCi0JRGlzYWJsZSBJUHY2IG9wZXJhdGlvbi4KKwlEaXNhYmxlIElQdjYgb3BlcmF0aW9uLiAgSWYgYWNjZXB0X2RhZCBpcyBzZXQgdG8gMiwgdGhpcyB2YWx1ZQorCXdpbGwgYmUgZHluYW1pY2FsbHkgc2V0IHRvIFRSVUUgaWYgREFEIGZhaWxzIGZvciB0aGUgbGluay1sb2NhbAorCWFkZHJlc3MuCiAJRGVmYXVsdDogRkFMU0UgKGVuYWJsZSBJUHY2IG9wZXJhdGlvbikKIAogYWNjZXB0X2RhZCAtIElOVEVHRVIKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9peGdiZS50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXhnYmUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlYjY4NjgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXhnYmUudHh0CkBAIC0wLDAgKzEsMTk5IEBACitMaW51eCBCYXNlIERyaXZlciBmb3IgMTAgR2lnYWJpdCBQQ0kgRXhwcmVzcyBJbnRlbChSKSBOZXR3b3JrIENvbm5lY3Rpb24KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitNYXJjaCAxMCwgMjAwOQorCisKK0NvbnRlbnRzCis9PT09PT09PQorCistIEluIFRoaXMgUmVsZWFzZQorLSBJZGVudGlmeWluZyBZb3VyIEFkYXB0ZXIKKy0gQnVpbGRpbmcgYW5kIEluc3RhbGxhdGlvbgorLSBBZGRpdGlvbmFsIENvbmZpZ3VyYXRpb25zCistIFN1cHBvcnQKKworCisKK0luIFRoaXMgUmVsZWFzZQorPT09PT09PT09PT09PT09CisKK1RoaXMgZmlsZSBkZXNjcmliZXMgdGhlIGl4Z2JlIExpbnV4IEJhc2UgRHJpdmVyIGZvciB0aGUgMTAgR2lnYWJpdCBQQ0kKK0V4cHJlc3MgSW50ZWwoUikgTmV0d29yayBDb25uZWN0aW9uLiAgVGhpcyBkcml2ZXIgaW5jbHVkZXMgc3VwcG9ydCBmb3IKK0l0YW5pdW0oUikyLWJhc2VkIHN5c3RlbXMuCisKK0ZvciBxdWVzdGlvbnMgcmVsYXRlZCB0byBoYXJkd2FyZSByZXF1aXJlbWVudHMsIHJlZmVyIHRvIHRoZSBkb2N1bWVudGF0aW9uCitzdXBwbGllZCB3aXRoIHlvdXIgMTAgR2lnYWJpdCBhZGFwdGVyLiAgQWxsIGhhcmR3YXJlIHJlcXVpcmVtZW50cyBsaXN0ZWQgYXBwbHkKK3RvIHVzZSB3aXRoIExpbnV4LgorCitUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBhdmFpbGFibGUgaW4gdGhpcyBrZXJuZWw6CisgLSBOYXRpdmUgVkxBTnMKKyAtIENoYW5uZWwgQm9uZGluZyAodGVhbWluZykKKyAtIFNOTVAKKyAtIEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkCisgLSBEYXRhIENlbnRlciBCcmlkZ2luZworCitDaGFubmVsIEJvbmRpbmcgZG9jdW1lbnRhdGlvbiBjYW4gYmUgZm91bmQgaW4gdGhlIExpbnV4IGtlcm5lbCBzb3VyY2U6CisvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JvbmRpbmcudHh0CisKK0V0aHRvb2wsIGxzcGNpLCBhbmQgaWZjb25maWcgY2FuIGJlIHVzZWQgdG8gZGlzcGxheSBkZXZpY2UgYW5kIGRyaXZlcgorc3BlY2lmaWMgaW5mb3JtYXRpb24uCisKKworSWRlbnRpZnlpbmcgWW91ciBBZGFwdGVyCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBkcml2ZXIgc3VwcG9ydHMgZGV2aWNlcyBiYXNlZCBvbiB0aGUgODI1OTggY29udHJvbGxlciBhbmQgdGhlIDgyNTk5Citjb250cm9sbGVyLgorCitGb3Igc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gaWRlbnRpZnlpbmcgd2hpY2ggYWRhcHRlciB5b3UgaGF2ZSwgcGxlYXNlIHZpc2l0OgorCisgICAgaHR0cDovL3N1cHBvcnQuaW50ZWwuY29tL3N1cHBvcnQvbmV0d29yay9zYi9DUy0wMDg0NDEuaHRtCisKKworQnVpbGRpbmcgYW5kIEluc3RhbGxhdGlvbgorPT09PT09PT09PT09PT09PT09PT09PT09PQorCitzZWxlY3QgbSBmb3IgIkludGVsKFIpIDEwR2JFIFBDSSBFeHByZXNzIGFkYXB0ZXJzIHN1cHBvcnQiIGxvY2F0ZWQgYXQ6CisgICAgICBMb2NhdGlvbjoKKyAgICAgICAgLT4gRGV2aWNlIERyaXZlcnMKKyAgICAgICAgICAtPiBOZXR3b3JrIGRldmljZSBzdXBwb3J0IChORVRERVZJQ0VTIFs9eV0pCisgICAgICAgICAgICAtPiBFdGhlcm5ldCAoMTAwMDAgTWJpdCkgKE5FVERFVl8xMDAwMCBbPXldKQorCisxLiBtYWtlIG1vZHVsZXMgJiBtYWtlIG1vZHVsZXNfaW5zdGFsbAorCisyLiBMb2FkIHRoZSBtb2R1bGU6CisKKyMgbW9kcHJvYmUgaXhnYmUKKworICAgVGhlIGluc21vZCBjb21tYW5kIGNhbiBiZSB1c2VkIGlmIHRoZSBmdWxsCisgICBwYXRoIHRvIHRoZSBkcml2ZXIgbW9kdWxlIGlzIHNwZWNpZmllZC4gIEZvciBleGFtcGxlOgorCisgICAgIGluc21vZCAvbGliL21vZHVsZXMvPEtFUk5FTCBWRVJTSU9OPi9rZXJuZWwvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmUua28KKworICAgV2l0aCAyLjYgYmFzZWQga2VybmVscyBhbHNvIG1ha2Ugc3VyZSB0aGF0IG9sZGVyIGl4Z2JlIGRyaXZlcnMgYXJlCisgICByZW1vdmVkIGZyb20gdGhlIGtlcm5lbCwgYmVmb3JlIGxvYWRpbmcgdGhlIG5ldyBtb2R1bGU6CisKKyAgICAgcm1tb2QgaXhnYmU7IG1vZHByb2JlIGl4Z2JlCisKKzMuIEFzc2lnbiBhbiBJUCBhZGRyZXNzIHRvIHRoZSBpbnRlcmZhY2UgYnkgZW50ZXJpbmcgdGhlIGZvbGxvd2luZywgd2hlcmUKKyAgIHggaXMgdGhlIGludGVyZmFjZSBudW1iZXI6CisKKyAgICAgaWZjb25maWcgZXRoeCA8SVBfYWRkcmVzcz4KKworNC4gVmVyaWZ5IHRoYXQgdGhlIGludGVyZmFjZSB3b3Jrcy4gRW50ZXIgdGhlIGZvbGxvd2luZywgd2hlcmUgPElQX2FkZHJlc3M+CisgICBpcyB0aGUgSVAgYWRkcmVzcyBmb3IgYW5vdGhlciBtYWNoaW5lIG9uIHRoZSBzYW1lIHN1Ym5ldCBhcyB0aGUgaW50ZXJmYWNlCisgICB0aGF0IGlzIGJlaW5nIHRlc3RlZDoKKworICAgICBwaW5nICA8SVBfYWRkcmVzcz4KKworCitBZGRpdGlvbmFsIENvbmZpZ3VyYXRpb25zCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgVmlld2luZyBMaW5rIE1lc3NhZ2VzCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBMaW5rIG1lc3NhZ2VzIHdpbGwgbm90IGJlIGRpc3BsYXllZCB0byB0aGUgY29uc29sZSBpZiB0aGUgZGlzdHJpYnV0aW9uIGlzCisgIHJlc3RyaWN0aW5nIHN5c3RlbSBtZXNzYWdlcy4gSW4gb3JkZXIgdG8gc2VlIG5ldHdvcmsgZHJpdmVyIGxpbmsgbWVzc2FnZXMgb24KKyAgeW91ciBjb25zb2xlLCBzZXQgZG1lc2cgdG8gZWlnaHQgYnkgZW50ZXJpbmcgdGhlIGZvbGxvd2luZzoKKworICAgICAgIGRtZXNnIC1uIDgKKworICBOT1RFOiBUaGlzIHNldHRpbmcgaXMgbm90IHNhdmVkIGFjcm9zcyByZWJvb3RzLgorCisKKyAgSnVtYm8gRnJhbWVzCisgIC0tLS0tLS0tLS0tLQorICBUaGUgZHJpdmVyIHN1cHBvcnRzIEp1bWJvIEZyYW1lcyBmb3IgYWxsIGFkYXB0ZXJzLiBKdW1ibyBGcmFtZXMgc3VwcG9ydCBpcworICBlbmFibGVkIGJ5IGNoYW5naW5nIHRoZSBNVFUgdG8gYSB2YWx1ZSBsYXJnZXIgdGhhbiB0aGUgZGVmYXVsdCBvZiAxNTAwLgorICBUaGUgbWF4aW11bSB2YWx1ZSBmb3IgdGhlIE1UVSBpcyAxNjExMC4gIFVzZSB0aGUgaWZjb25maWcgY29tbWFuZCB0bworICBpbmNyZWFzZSB0aGUgTVRVIHNpemUuICBGb3IgZXhhbXBsZToKKworICAgICAgICBpZmNvbmZpZyBldGh4IG10dSA5MDAwIHVwCisKKyAgVGhlIG1heGltdW0gTVRVIHNldHRpbmcgZm9yIEp1bWJvIEZyYW1lcyBpcyAxNjExMC4gIFRoaXMgdmFsdWUgY29pbmNpZGVzCisgIHdpdGggdGhlIG1heGltdW0gSnVtYm8gRnJhbWVzIHNpemUgb2YgMTYxMjguCisKKyAgR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQsIGFrYSBHUk8KKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgVGhlIGRyaXZlciBzdXBwb3J0cyB0aGUgaW4ta2VybmVsIHNvZnR3YXJlIGltcGxlbWVudGF0aW9uIG9mIEdSTy4gIEdSTyBoYXMKKyAgc2hvd24gdGhhdCBieSBjb2FsZXNjaW5nIFJ4IHRyYWZmaWMgaW50byBsYXJnZXIgY2h1bmtzIG9mIGRhdGEsIENQVQorICB1dGlsaXphdGlvbiBjYW4gYmUgc2lnbmlmaWNhbnRseSByZWR1Y2VkIHdoZW4gdW5kZXIgbGFyZ2UgUnggbG9hZC4gIEdSTyBpcyBhbgorICBldm9sdXRpb24gb2YgdGhlIHByZXZpb3VzbHktdXNlZCBMUk8gaW50ZXJmYWNlLiAgR1JPIGlzIGFibGUgdG8gY29hbGVzY2UKKyAgb3RoZXIgcHJvdG9jb2xzIGJlc2lkZXMgVENQLiAgSXQncyBhbHNvIHNhZmUgdG8gdXNlIHdpdGggY29uZmlndXJhdGlvbnMgdGhhdAorICBhcmUgcHJvYmxlbWF0aWMgZm9yIExSTywgbmFtZWx5IGJyaWRnaW5nIGFuZCBpU0NTSS4KKworICBHUk8gaXMgZW5hYmxlZCBieSBkZWZhdWx0IGluIHRoZSBkcml2ZXIuICBGdXR1cmUgdmVyc2lvbnMgb2YgZXRodG9vbCB3aWxsCisgIHN1cHBvcnQgZGlzYWJsaW5nIGFuZCByZS1lbmFibGluZyBHUk8gb24gdGhlIGZseS4KKworCisgIERhdGEgQ2VudGVyIEJyaWRnaW5nLCBha2EgRENCCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgRENCIGlzIGEgY29uZmlndXJhdGlvbiBRdWFsaXR5IG9mIFNlcnZpY2UgaW1wbGVtZW50YXRpb24gaW4gaGFyZHdhcmUuCisgIEl0IHVzZXMgdGhlIFZMQU4gcHJpb3JpdHkgdGFnICg4MDIuMXApIHRvIGZpbHRlciB0cmFmZmljLiAgVGhhdCBtZWFucworICB0aGF0IHRoZXJlIGFyZSA4IGRpZmZlcmVudCBwcmlvcml0aWVzIHRoYXQgdHJhZmZpYyBjYW4gYmUgZmlsdGVyZWQgaW50by4KKyAgSXQgYWxzbyBlbmFibGVzIHByaW9yaXR5IGZsb3cgY29udHJvbCB3aGljaCBjYW4gbGltaXQgb3IgZWxpbWluYXRlIHRoZQorICBudW1iZXIgb2YgZHJvcHBlZCBwYWNrZXRzIGR1cmluZyBuZXR3b3JrIHN0cmVzcy4gIEJhbmR3aWR0aCBjYW4gYmUKKyAgYWxsb2NhdGVkIHRvIGVhY2ggb2YgdGhlc2UgcHJpb3JpdGllcywgd2hpY2ggaXMgZW5mb3JjZWQgYXQgdGhlIGhhcmR3YXJlCisgIGxldmVsLgorCisgIFRvIGVuYWJsZSBEQ0Igc3VwcG9ydCBpbiBpeGdiZSwgeW91IG11c3QgZW5hYmxlIHRoZSBEQ0IgbmV0bGluayBsYXllciB0bworICBhbGxvdyB0aGUgdXNlcnNwYWNlIHRvb2xzIChzZWUgYmVsb3cpIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIGRyaXZlci4KKyAgVGhpcyBjYW4gYmUgZm91bmQgaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGhlcmU6CisKKyAgICAgICAgLT4gTmV0d29ya2luZyBzdXBwb3J0CisgICAgICAgICAgLT4gTmV0d29ya2luZyBvcHRpb25zCisgICAgICAgICAgICAtPiBEYXRhIENlbnRlciBCcmlkZ2luZyBzdXBwb3J0CisKKyAgT25jZSB0aGlzIGlzIHNlbGVjdGVkLCBEQ0Igc3VwcG9ydCBtdXN0IGJlIHNlbGVjdGVkIGZvciBpeGdiZS4gIFRoaXMgY2FuCisgIGJlIGZvdW5kIGhlcmU6CisKKyAgICAgICAgLT4gRGV2aWNlIERyaXZlcnMKKyAgICAgICAgICAtPiBOZXR3b3JrIGRldmljZSBzdXBwb3J0IChORVRERVZJQ0VTIFs9eV0pCisgICAgICAgICAgICAtPiBFdGhlcm5ldCAoMTAwMDAgTWJpdCkgKE5FVERFVl8xMDAwMCBbPXldKQorICAgICAgICAgICAgICAtPiBJbnRlbChSKSAxMEdiRSBQQ0kgRXhwcmVzcyBhZGFwdGVycyBzdXBwb3J0CisgICAgICAgICAgICAgICAgLT4gRGF0YSBDZW50ZXIgQnJpZGdpbmcgKERDQikgU3VwcG9ydAorCisgIEFmdGVyIHRoZXNlIG9wdGlvbnMgYXJlIHNlbGVjdGVkLCB5b3UgbXVzdCByZWJ1aWxkIHlvdXIga2VybmVsIGFuZCB5b3VyCisgIG1vZHVsZXMuCisKKyAgSW4gb3JkZXIgdG8gdXNlIERDQiwgdXNlcnNwYWNlIHRvb2xzIG11c3QgYmUgZG93bmxvYWRlZCBhbmQgaW5zdGFsbGVkLgorICBUaGUgZGNiZCB0b29scyBjYW4gYmUgZm91bmQgYXQ6CisKKyAgICAgICAgaHR0cDovL2UxMDAwLnNmLm5ldAorCisKKyAgRXRodG9vbAorICAtLS0tLS0tCisgIFRoZSBkcml2ZXIgdXRpbGl6ZXMgdGhlIGV0aHRvb2wgaW50ZXJmYWNlIGZvciBkcml2ZXIgY29uZmlndXJhdGlvbiBhbmQKKyAgZGlhZ25vc3RpY3MsIGFzIHdlbGwgYXMgZGlzcGxheWluZyBzdGF0aXN0aWNhbCBpbmZvcm1hdGlvbi4gIEV0aHRvb2wKKyAgdmVyc2lvbiAzLjAgb3IgbGF0ZXIgaXMgcmVxdWlyZWQgZm9yIHRoaXMgZnVuY3Rpb25hbGl0eS4KKworICBUaGUgbGF0ZXN0IHJlbGVhc2Ugb2YgZXRodG9vbCBjYW4gYmUgZm91bmQgZnJvbQorICBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2drZXJuZWwuCisKKworICBOQVBJCisgIC0tLS0KKworICBOQVBJIChSeCBwb2xsaW5nIG1vZGUpIGlzIHN1cHBvcnRlZCBpbiB0aGUgaXhnYmUgZHJpdmVyLiAgTkFQSSBpcyBlbmFibGVkCisgIGJ5IGRlZmF1bHQgaW4gdGhlIGRyaXZlci4KKworICBTZWUgd3d3LmN5YmVydXMuY2EvfmhhZGkvdXNlbml4LXBhcGVyLnRneiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBOQVBJLgorCisKK1N1cHBvcnQKKz09PT09PT0KKworRm9yIGdlbmVyYWwgaW5mb3JtYXRpb24sIGdvIHRvIHRoZSBJbnRlbCBzdXBwb3J0IHdlYnNpdGUgYXQ6CisKKyAgICBodHRwOi8vc3VwcG9ydC5pbnRlbC5jb20KKworb3IgdGhlIEludGVsIFdpcmVkIE5ldHdvcmtpbmcgcHJvamVjdCBob3N0ZWQgYnkgU291cmNlZm9yZ2UgYXQ6CisKKyAgICBodHRwOi8vZTEwMDAuc291cmNlZm9yZ2UubmV0CisKK0lmIGFuIGlzc3VlIGlzIGlkZW50aWZpZWQgd2l0aCB0aGUgcmVsZWFzZWQgc291cmNlIGNvZGUgb24gdGhlIHN1cHBvcnRlZAora2VybmVsIHdpdGggYSBzdXBwb3J0ZWQgYWRhcHRlciwgZW1haWwgdGhlIHNwZWNpZmljIGluZm9ybWF0aW9uIHJlbGF0ZWQKK3RvIHRoZSBpc3N1ZSB0byBlMTAwMC1kZXZlbEBsaXN0cy5zZi5uZXQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9yZHMudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3Jkcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY3MDc3YwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9yZHMudHh0CkBAIC0wLDAgKzEsMzU2IEBACisKK092ZXJ2aWV3Cis9PT09PT09PQorCitUaGlzIHJlYWRtZSB0cmllcyB0byBwcm92aWRlIHNvbWUgYmFja2dyb3VuZCBvbiB0aGUgaG93cyBhbmQgd2h5cyBvZiBSRFMsCithbmQgd2lsbCBob3BlZnVsbHkgaGVscCB5b3UgZmluZCB5b3VyIHdheSBhcm91bmQgdGhlIGNvZGUuCisKK0luIGFkZGl0aW9uLCBwbGVhc2Ugc2VlIHRoaXMgZW1haWwgYWJvdXQgUkRTIG9yaWdpbnM6CitodHRwOi8vb3NzLm9yYWNsZS5jb20vcGlwZXJtYWlsL3Jkcy1kZXZlbC8yMDA3LU5vdmVtYmVyLzAwMDIyOC5odG1sCisKK1JEUyBBcmNoaXRlY3R1cmUKKz09PT09PT09PT09PT09PT0KKworUkRTIHByb3ZpZGVzIHJlbGlhYmxlLCBvcmRlcmVkIGRhdGFncmFtIGRlbGl2ZXJ5IGJ5IHVzaW5nIGEgc2luZ2xlCityZWxpYWJsZSBjb25uZWN0aW9uIGJldHdlZW4gYW55IHR3byBub2RlcyBpbiB0aGUgY2x1c3Rlci4gVGhpcyBhbGxvd3MKK2FwcGxpY2F0aW9ucyB0byB1c2UgYSBzaW5nbGUgc29ja2V0IHRvIHRhbGsgdG8gYW55IG90aGVyIHByb2Nlc3MgaW4gdGhlCitjbHVzdGVyIC0gc28gaW4gYSBjbHVzdGVyIHdpdGggTiBwcm9jZXNzZXMgeW91IG5lZWQgTiBzb2NrZXRzLCBpbiBjb250cmFzdAordG8gTipOIGlmIHlvdSB1c2UgYSBjb25uZWN0aW9uLW9yaWVudGVkIHNvY2tldCB0cmFuc3BvcnQgbGlrZSBUQ1AuCisKK1JEUyBpcyBub3QgSW5maW5pYmFuZC1zcGVjaWZpYzsgaXQgd2FzIGRlc2lnbmVkIHRvIHN1cHBvcnQgZGlmZmVyZW50Cit0cmFuc3BvcnRzLiAgVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gdXNlZCB0byBzdXBwb3J0IFJEUyBvdmVyIFRDUCBhcyB3ZWxsCithcyBJQi4gV29yayBpcyBpbiBwcm9ncmVzcyB0byBzdXBwb3J0IFJEUyBvdmVyIGlXQVJQLCBhbmQgdXNpbmcgRENFIHRvCitndWFyYW50ZWUgbm8gZHJvcHBlZCBwYWNrZXRzIG9uIEV0aGVybmV0LCBpdCBtYXkgYmUgcG9zc2libGUgdG8gdXNlIFJEUyBvdmVyCitVRFAgaW4gdGhlIGZ1dHVyZS4KKworVGhlIGhpZ2gtbGV2ZWwgc2VtYW50aWNzIG9mIFJEUyBmcm9tIHRoZSBhcHBsaWNhdGlvbidzIHBvaW50IG9mIHZpZXcgYXJlCisKKyAqCUFkZHJlc3NpbmcKKyAgICAgICAgUkRTIHVzZXMgSVB2NCBhZGRyZXNzZXMgYW5kIDE2Yml0IHBvcnQgbnVtYmVycyB0byBpZGVudGlmeQorICAgICAgICB0aGUgZW5kIHBvaW50IG9mIGEgY29ubmVjdGlvbi4gQWxsIHNvY2tldCBvcGVyYXRpb25zIHRoYXQgaW52b2x2ZQorICAgICAgICBwYXNzaW5nIGFkZHJlc3NlcyBiZXR3ZWVuIGtlcm5lbCBhbmQgdXNlciBzcGFjZSBnZW5lcmFsbHkKKyAgICAgICAgdXNlIGEgc3RydWN0IHNvY2thZGRyX2luLgorCisgICAgICAgIFRoZSBmYWN0IHRoYXQgSVB2NCBhZGRyZXNzZXMgYXJlIHVzZWQgZG9lcyBub3QgbWVhbiB0aGUgdW5kZXJseWluZworICAgICAgICB0cmFuc3BvcnQgaGFzIHRvIGJlIElQLWJhc2VkLiBJbiBmYWN0LCBSRFMgb3ZlciBJQiB1c2VzIGEKKyAgICAgICAgcmVsaWFibGUgSUIgY29ubmVjdGlvbjsgdGhlIElQIGFkZHJlc3MgaXMgdXNlZCBleGNsdXNpdmVseSB0bworICAgICAgICBsb2NhdGUgdGhlIHJlbW90ZSBub2RlJ3MgR0lEIChieSBBUlBpbmcgZm9yIHRoZSBnaXZlbiBJUCkuCisKKyAgICAgICAgVGhlIHBvcnQgc3BhY2UgaXMgZW50aXJlbHkgaW5kZXBlbmRlbnQgb2YgVURQLCBUQ1Agb3IgYW55IG90aGVyCisgICAgICAgIHByb3RvY29sLgorCisgKglTb2NrZXQgaW50ZXJmYWNlCisgICAgICAgIFJEUyBzb2NrZXRzIHdvcmsgKm1vc3RseSogYXMgeW91IHdvdWxkIGV4cGVjdCBmcm9tIGEgQlNECisgICAgICAgIHNvY2tldC4gVGhlIG5leHQgc2VjdGlvbiB3aWxsIGNvdmVyIHRoZSBkZXRhaWxzLiBBdCBhbnkgcmF0ZSwKKyAgICAgICAgYWxsIEkvTyBpcyBwZXJmb3JtZWQgdGhyb3VnaCB0aGUgc3RhbmRhcmQgQlNEIHNvY2tldCBBUEkuCisgICAgICAgIFNvbWUgYWRkaXRpb25zIGxpa2UgemVyb2NvcHkgc3VwcG9ydCBhcmUgaW1wbGVtZW50ZWQgdGhyb3VnaAorICAgICAgICBjb250cm9sIG1lc3NhZ2VzLCB3aGlsZSBvdGhlciBleHRlbnNpb25zIHVzZSB0aGUgZ2V0c29ja29wdC8KKyAgICAgICAgc2V0c29ja29wdCBjYWxscy4KKworICAgICAgICBTb2NrZXRzIG11c3QgYmUgYm91bmQgYmVmb3JlIHlvdSBjYW4gc2VuZCBvciByZWNlaXZlIGRhdGEuCisgICAgICAgIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2UgYmluZGluZyBhbHNvIHNlbGVjdHMgYSB0cmFuc3BvcnQgYW5kCisgICAgICAgIGF0dGFjaGVzIGl0IHRvIHRoZSBzb2NrZXQuIE9uY2UgYm91bmQsIHRoZSB0cmFuc3BvcnQgYXNzaWdubWVudAorICAgICAgICBkb2VzIG5vdCBjaGFuZ2UuIFJEUyB3aWxsIHRvbGVyYXRlIElQcyBtb3ZpbmcgYXJvdW5kIChlZyBpbgorICAgICAgICBhIGFjdGl2ZS1hY3RpdmUgSEEgc2NlbmFyaW8pLCBidXQgb25seSBhcyBsb25nIGFzIHRoZSBhZGRyZXNzCisgICAgICAgIGRvZXNuJ3QgbW92ZSB0byBhIGRpZmZlcmVudCB0cmFuc3BvcnQuCisKKyAqCXN5c2N0bHMKKyAgICAgICAgUkRTIHN1cHBvcnRzIGEgbnVtYmVyIG9mIHN5c2N0bHMgaW4gL3Byb2Mvc3lzL25ldC9yZHMKKworCitTb2NrZXQgSW50ZXJmYWNlCis9PT09PT09PT09PT09PT09CisKKyAgQUZfUkRTLCBQRl9SRFMsIFNPTF9SRFMKKyAgICAgICAgVGhlc2UgY29uc3RhbnRzIGhhdmVuJ3QgYmVlbiBhc3NpZ25lZCB5ZXQsIGJlY2F1c2UgUkRTIGlzbid0IGluCisgICAgICAgIG1haW5saW5lIHlldC4gQ3VycmVudGx5LCB0aGUga2VybmVsIG1vZHVsZSBhc3NpZ25zIHNvbWUgY29uc3RhbnQKKyAgICAgICAgYW5kIHB1Ymxpc2hlcyBpdCB0byB1c2VyIHNwYWNlIHRocm91Z2ggdHdvIHN5c2N0bCBmaWxlcworICAgICAgICAgICAgICAgIC9wcm9jL3N5cy9uZXQvcmRzL3BmX3JkcworICAgICAgICAgICAgICAgIC9wcm9jL3N5cy9uZXQvcmRzL3NvbF9yZHMKKworICBmZCA9IHNvY2tldChQRl9SRFMsIFNPQ0tfU0VRUEFDS0VULCAwKTsKKyAgICAgICAgVGhpcyBjcmVhdGVzIGEgbmV3LCB1bmJvdW5kIFJEUyBzb2NrZXQuCisKKyAgc2V0c29ja29wdChTT0xfU09DS0VUKTogc2VuZCBhbmQgcmVjZWl2ZSBidWZmZXIgc2l6ZQorICAgICAgICBSRFMgaG9ub3JzIHRoZSBzZW5kIGFuZCByZWNlaXZlIGJ1ZmZlciBzaXplIHNvY2tldCBvcHRpb25zLgorICAgICAgICBZb3UgYXJlIG5vdCBhbGxvd2VkIHRvIHF1ZXVlIG1vcmUgdGhhbiBTT19TTkRTSVpFIGJ5dGVzIHRvCisgICAgICAgIGEgc29ja2V0LiBBIG1lc3NhZ2UgaXMgcXVldWVkIHdoZW4gc2VuZG1zZyBpcyBjYWxsZWQsIGFuZAorICAgICAgICBpdCBsZWF2ZXMgdGhlIHF1ZXVlIHdoZW4gdGhlIHJlbW90ZSBzeXN0ZW0gYWNrbm93bGVkZ2VzCisgICAgICAgIGl0cyBhcnJpdmFsLgorCisgICAgICAgIFRoZSBTT19SQ1ZTSVpFIG9wdGlvbiBjb250cm9scyB0aGUgbWF4aW11bSByZWNlaXZlIHF1ZXVlIGxlbmd0aC4KKyAgICAgICAgVGhpcyBpcyBhIHNvZnQgbGltaXQgcmF0aGVyIHRoYW4gYSBoYXJkIGxpbWl0IC0gUkRTIHdpbGwKKyAgICAgICAgY29udGludWUgdG8gYWNjZXB0IGFuZCBxdWV1ZSBpbmNvbWluZyBtZXNzYWdlcywgZXZlbiBpZiB0aGF0CisgICAgICAgIHRha2VzIHRoZSBxdWV1ZSBsZW5ndGggb3ZlciB0aGUgbGltaXQuIEhvd2V2ZXIsIGl0IHdpbGwgYWxzbworICAgICAgICBtYXJrIHRoZSBwb3J0IGFzICJjb25nZXN0ZWQiIGFuZCBzZW5kIGEgY29uZ2VzdGlvbiB1cGRhdGUgdG8KKyAgICAgICAgdGhlIHNvdXJjZSBub2RlLiBUaGUgc291cmNlIG5vZGUgaXMgc3VwcG9zZWQgdG8gdGhyb3R0bGUgYW55CisgICAgICAgIHByb2Nlc3NlcyBzZW5kaW5nIHRvIHRoaXMgY29uZ2VzdGVkIHBvcnQuCisKKyAgYmluZChmZCwgJnNvY2thZGRyX2luLCAuLi4pCisgICAgICAgIFRoaXMgYmluZHMgdGhlIHNvY2tldCB0byBhIGxvY2FsIElQIGFkZHJlc3MgYW5kIHBvcnQsIGFuZCBhCisgICAgICAgIHRyYW5zcG9ydC4KKworICBzZW5kbXNnKGZkLCAuLi4pCisgICAgICAgIFNlbmRzIGEgbWVzc2FnZSB0byB0aGUgaW5kaWNhdGVkIHJlY2lwaWVudC4gVGhlIGtlcm5lbCB3aWxsCisgICAgICAgIHRyYW5zcGFyZW50bHkgZXN0YWJsaXNoIHRoZSB1bmRlcmx5aW5nIHJlbGlhYmxlIGNvbm5lY3Rpb24KKyAgICAgICAgaWYgaXQgaXNuJ3QgdXAgeWV0LgorCisgICAgICAgIEFuIGF0dGVtcHQgdG8gc2VuZCBhIG1lc3NhZ2UgdGhhdCBleGNlZWRzIFNPX1NORFNJWkUgd2lsbAorICAgICAgICByZXR1cm4gd2l0aCAtRU1TR1NJWkUKKworICAgICAgICBBbiBhdHRlbXB0IHRvIHNlbmQgYSBtZXNzYWdlIHRoYXQgd291bGQgdGFrZSB0aGUgdG90YWwgbnVtYmVyCisgICAgICAgIG9mIHF1ZXVlZCBieXRlcyBvdmVyIHRoZSBTT19TTkRTSVpFIHRocmVzaG9sZCB3aWxsIHJldHVybgorICAgICAgICBFQUdBSU4uCisKKyAgICAgICAgQW4gYXR0ZW1wdCB0byBzZW5kIGEgbWVzc2FnZSB0byBhIGRlc3RpbmF0aW9uIHRoYXQgaXMgbWFya2VkCisgICAgICAgIGFzICJjb25nZXN0ZWQiIHdpbGwgcmV0dXJuIEVOT0JVRlMuCisKKyAgcmVjdm1zZyhmZCwgLi4uKQorICAgICAgICBSZWNlaXZlcyBhIG1lc3NhZ2UgdGhhdCB3YXMgcXVldWVkIHRvIHRoaXMgc29ja2V0LiBUaGUgc29ja2V0cworICAgICAgICByZWN2IHF1ZXVlIGFjY291bnRpbmcgaXMgYWRqdXN0ZWQsIGFuZCBpZiB0aGUgcXVldWUgbGVuZ3RoCisgICAgICAgIGRyb3BzIGJlbG93IFNPX1NORFNJWkUsIHRoZSBwb3J0IGlzIG1hcmtlZCB1bmNvbmdlc3RlZCwgYW5kCisgICAgICAgIGEgY29uZ2VzdGlvbiB1cGRhdGUgaXMgc2VudCB0byBhbGwgcGVlcnMuCisKKyAgICAgICAgQXBwbGljYXRpb25zIGNhbiBhc2sgdGhlIFJEUyBrZXJuZWwgbW9kdWxlIHRvIHJlY2VpdmUKKyAgICAgICAgbm90aWZpY2F0aW9ucyB2aWEgY29udHJvbCBtZXNzYWdlcyAoZm9yIGluc3RhbmNlLCB0aGVyZSBpcyBhCisgICAgICAgIG5vdGlmaWNhdGlvbiB3aGVuIGEgY29uZ2VzdGlvbiB1cGRhdGUgYXJyaXZlZCwgb3Igd2hlbiBhIFJETUEKKyAgICAgICAgb3BlcmF0aW9uIGNvbXBsZXRlcykuIFRoZXNlIG5vdGlmaWNhdGlvbnMgYXJlIHJlY2VpdmVkIHRocm91Z2gKKyAgICAgICAgdGhlIG1zZy5tc2dfY29udHJvbCBidWZmZXIgb2Ygc3RydWN0IG1zZ2hkci4gVGhlIGZvcm1hdCBvZiB0aGUKKyAgICAgICAgbWVzc2FnZXMgaXMgZGVzY3JpYmVkIGluIG1hbnBhZ2VzLgorCisgIHBvbGwoZmQpCisgICAgICAgIFJEUyBzdXBwb3J0cyB0aGUgcG9sbCBpbnRlcmZhY2UgdG8gYWxsb3cgdGhlIGFwcGxpY2F0aW9uCisgICAgICAgIHRvIGltcGxlbWVudCBhc3luYyBJL08uCisKKyAgICAgICAgUE9MTElOIGhhbmRsaW5nIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIFdoZW4gdGhlcmUncyBhbgorICAgICAgICBpbmNvbWluZyBtZXNzYWdlIHF1ZXVlZCB0byB0aGUgc29ja2V0LCBvciBhIHBlbmRpbmcgbm90aWZpY2F0aW9uLAorICAgICAgICB3ZSBzaWduYWwgUE9MTElOLgorCisgICAgICAgIFBPTExPVVQgaXMgYSBsaXR0bGUgaGFyZGVyLiBTaW5jZSB5b3UgY2FuIGVzc2VudGlhbGx5IHNlbmQKKyAgICAgICAgdG8gYW55IGRlc3RpbmF0aW9uLCBSRFMgd2lsbCBhbHdheXMgc2lnbmFsIFBPTExPVVQgYXMgbG9uZyBhcworICAgICAgICB0aGVyZSdzIHJvb20gb24gdGhlIHNlbmQgcXVldWUgKGllIHRoZSBudW1iZXIgb2YgYnl0ZXMgcXVldWVkCisgICAgICAgIGlzIGxlc3MgdGhhbiB0aGUgc2VuZGJ1ZiBzaXplKS4KKworICAgICAgICBIb3dldmVyLCB0aGUga2VybmVsIHdpbGwgcmVmdXNlIHRvIGFjY2VwdCBtZXNzYWdlcyB0bworICAgICAgICBhIGRlc3RpbmF0aW9uIG1hcmtlZCBjb25nZXN0ZWQgLSBpbiB0aGlzIGNhc2UgeW91IHdpbGwgbG9vcAorICAgICAgICBmb3JldmVyIGlmIHlvdSByZWx5IG9uIHBvbGwgdG8gdGVsbCB5b3Ugd2hhdCB0byBkby4KKyAgICAgICAgVGhpcyBpc24ndCBhIHRyaXZpYWwgcHJvYmxlbSwgYnV0IGFwcGxpY2F0aW9ucyBjYW4gZGVhbCB3aXRoCisgICAgICAgIHRoaXMgLSBieSB1c2luZyBjb25nZXN0aW9uIG5vdGlmaWNhdGlvbnMsIGFuZCBieSBjaGVja2luZyBmb3IKKyAgICAgICAgRU5PQlVGUyBlcnJvcnMgcmV0dXJuZWQgYnkgc2VuZG1zZy4KKworICBzZXRzb2Nrb3B0KFNPTF9SRFMsIFJEU19DQU5DRUxfU0VOVF9UTywgJnNvY2thZGRyX2luKQorICAgICAgICBUaGlzIGFsbG93cyB0aGUgYXBwbGljYXRpb24gdG8gZGlzY2FyZCBhbGwgbWVzc2FnZXMgcXVldWVkIHRvIGEKKyAgICAgICAgc3BlY2lmaWMgZGVzdGluYXRpb24gb24gdGhpcyBwYXJ0aWN1bGFyIHNvY2tldC4KKworICAgICAgICBUaGlzIGFsbG93cyB0aGUgYXBwbGljYXRpb24gdG8gY2FuY2VsIG91dHN0YW5kaW5nIG1lc3NhZ2VzIGlmCisgICAgICAgIGl0IGRldGVjdHMgYSB0aW1lb3V0LiBGb3IgaW5zdGFuY2UsIGlmIGl0IHRyaWVkIHRvIHNlbmQgYSBtZXNzYWdlLAorICAgICAgICBhbmQgdGhlIHJlbW90ZSBob3N0IGlzIHVucmVhY2hhYmxlLCBSRFMgd2lsbCBrZWVwIHRyeWluZyBmb3JldmVyLgorICAgICAgICBUaGUgYXBwbGljYXRpb24gbWF5IGRlY2lkZSBpdCdzIG5vdCB3b3J0aCBpdCwgYW5kIGNhbmNlbCB0aGUKKyAgICAgICAgb3BlcmF0aW9uLiBJbiB0aGlzIGNhc2UsIGl0IHdvdWxkIHVzZSBSRFNfQ0FOQ0VMX1NFTlRfVE8gdG8KKyAgICAgICAgbnVrZSBhbnkgcGVuZGluZyBtZXNzYWdlcy4KKworCitSRE1BIGZvciBSRFMKKz09PT09PT09PT09PQorCisgIHNlZSByZHMtcmRtYSg3KSBtYW5wYWdlIChhdmFpbGFibGUgaW4gcmRzLXRvb2xzKQorCisKK0Nvbmdlc3Rpb24gTm90aWZpY2F0aW9ucworPT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgc2VlIHJkcyg3KSBtYW5wYWdlCisKKworUkRTIFByb3RvY29sCis9PT09PT09PT09PT0KKworICBNZXNzYWdlIGhlYWRlcgorCisgICAgVGhlIG1lc3NhZ2UgaGVhZGVyIGlzIGEgJ3N0cnVjdCByZHNfaGVhZGVyJyAoc2VlIHJkcy5oKToKKyAgICBGaWVsZHM6CisgICAgICBoX3NlcXVlbmNlOgorICAgICAgICAgIHBlci1wYWNrZXQgc2VxdWVuY2UgbnVtYmVyCisgICAgICBoX2FjazoKKyAgICAgICAgICBwaWdneWJhY2tlZCBhY2tub3dsZWRnbWVudCBvZiBsYXN0IHBhY2tldCByZWNlaXZlZAorICAgICAgaF9sZW46CisgICAgICAgICAgbGVuZ3RoIG9mIGRhdGEsIG5vdCBpbmNsdWRpbmcgaGVhZGVyCisgICAgICBoX3Nwb3J0OgorICAgICAgICAgIHNvdXJjZSBwb3J0CisgICAgICBoX2Rwb3J0OgorICAgICAgICAgIGRlc3RpbmF0aW9uIHBvcnQKKyAgICAgIGhfZmxhZ3M6CisgICAgICAgICAgQ09OR19CSVRNQVAgLSB0aGlzIGlzIGEgY29uZ2VzdGlvbiB1cGRhdGUgYml0bWFwCisgICAgICAgICAgQUNLX1JFUVVJUkVEIC0gcmVjZWl2ZXIgbXVzdCBhY2sgdGhpcyBwYWNrZXQKKyAgICAgICAgICBSRVRSQU5TTUlUVEVEIC0gcGFja2V0IGhhcyBwcmV2aW91c2x5IGJlZW4gc2VudAorICAgICAgaF9jcmVkaXQ6CisgICAgICAgICAgaW5kaWNhdGUgdG8gb3RoZXIgZW5kIG9mIGNvbm5lY3Rpb24gdGhhdAorICAgICAgICAgIGl0IGhhcyBtb3JlIGNyZWRpdHMgYXZhaWxhYmxlIChpLmUuIHRoZXJlIGlzCisgICAgICAgICAgbW9yZSBzZW5kIHJvb20pCisgICAgICBoX3BhZGRpbmdbNF06CisgICAgICAgICAgdW51c2VkLCBmb3IgZnV0dXJlIHVzZQorICAgICAgaF9jc3VtOgorICAgICAgICAgIGhlYWRlciBjaGVja3N1bQorICAgICAgaF9leHRoZHI6CisgICAgICAgICAgb3B0aW9uYWwgZGF0YSBjYW4gYmUgcGFzc2VkIGhlcmUuIFRoaXMgaXMgY3VycmVudGx5IHVzZWQgZm9yCisgICAgICAgICAgcGFzc2luZyBSRE1BLXJlbGF0ZWQgaW5mb3JtYXRpb24uCisKKyAgQUNLIGFuZCByZXRyYW5zbWl0IGhhbmRsaW5nCisKKyAgICAgIE9uZSBtaWdodCB0aGluayB0aGF0IHdpdGggcmVsaWFibGUgSUIgY29ubmVjdGlvbnMgeW91IHdvdWxkbid0IG5lZWQKKyAgICAgIHRvIGFjayBtZXNzYWdlcyB0aGF0IGhhdmUgYmVlbiByZWNlaXZlZC4gIFRoZSBwcm9ibGVtIGlzIHRoYXQgSUIKKyAgICAgIGhhcmR3YXJlIGdlbmVyYXRlcyBhbiBhY2sgbWVzc2FnZSBiZWZvcmUgaXQgaGFzIERNQWVkIHRoZSBtZXNzYWdlCisgICAgICBpbnRvIG1lbW9yeS4gIFRoaXMgY3JlYXRlcyBhIHBvdGVudGlhbCBtZXNzYWdlIGxvc3MgaWYgdGhlIEhDQSBpcworICAgICAgZGlzYWJsZWQgZm9yIGFueSByZWFzb24gYmV0d2VlbiB3aGVuIGl0IHNlbmRzIHRoZSBhY2sgYW5kIGJlZm9yZQorICAgICAgdGhlIG1lc3NhZ2UgaXMgRE1BZWQgYW5kIHByb2Nlc3NlZC4gIFRoaXMgaXMgb25seSBhIHBvdGVudGlhbCBpc3N1ZQorICAgICAgaWYgYW5vdGhlciBIQ0EgaXMgYXZhaWxhYmxlIGZvciBmYWlsLW92ZXIuCisKKyAgICAgIFNlbmRpbmcgYW4gYWNrIGltbWVkaWF0ZWx5IHdvdWxkIGFsbG93IHRoZSBzZW5kZXIgdG8gZnJlZSB0aGUgc2VudAorICAgICAgbWVzc2FnZSBmcm9tIHRoZWlyIHNlbmQgcXVldWUgcXVpY2tseSwgYnV0IGNvdWxkIGNhdXNlIGV4Y2Vzc2l2ZQorICAgICAgdHJhZmZpYyB0byBiZSB1c2VkIGZvciBhY2tzLiBSRFMgcGlnZ3liYWNrcyBhY2tzIG9uIHNlbnQgZGF0YQorICAgICAgcGFja2V0cy4gIEFjay1vbmx5IHBhY2tldHMgYXJlIHJlZHVjZWQgYnkgb25seSBhbGxvd2luZyBvbmUgdG8gYmUKKyAgICAgIGluIGZsaWdodCBhdCBhIHRpbWUsIGFuZCBieSB0aGUgc2VuZGVyIG9ubHkgYXNraW5nIGZvciBhY2tzIHdoZW4KKyAgICAgIGl0cyBzZW5kIGJ1ZmZlcnMgc3RhcnQgdG8gZmlsbCB1cC4gQWxsIHJldHJhbnNtaXNzaW9ucyBhcmUgYWxzbworICAgICAgYWNrZWQuCisKKyAgRmxvdyBDb250cm9sCisKKyAgICAgIFJEUydzIElCIHRyYW5zcG9ydCB1c2VzIGEgY3JlZGl0LWJhc2VkIG1lY2hhbmlzbSB0byB2ZXJpZnkgdGhhdAorICAgICAgdGhlcmUgaXMgc3BhY2UgaW4gdGhlIHBlZXIncyByZWNlaXZlIGJ1ZmZlcnMgZm9yIG1vcmUgZGF0YS4gVGhpcworICAgICAgZWxpbWluYXRlcyB0aGUgbmVlZCBmb3IgaGFyZHdhcmUgcmV0cmllcyBvbiB0aGUgY29ubmVjdGlvbi4KKworICBDb25nZXN0aW9uCisKKyAgICAgIE1lc3NhZ2VzIHdhaXRpbmcgaW4gdGhlIHJlY2VpdmUgcXVldWUgb24gdGhlIHJlY2VpdmluZyBzb2NrZXQKKyAgICAgIGFyZSBhY2NvdW50ZWQgYWdhaW5zdCB0aGUgc29ja2V0cyBTT19SQ1ZCVUYgb3B0aW9uIHZhbHVlLiAgT25seQorICAgICAgdGhlIHBheWxvYWQgYnl0ZXMgaW4gdGhlIG1lc3NhZ2UgYXJlIGFjY291bnRlZCBmb3IuICBJZiB0aGUKKyAgICAgIG51bWJlciBvZiBieXRlcyBxdWV1ZWQgZXF1YWxzIG9yIGV4Y2VlZHMgcmN2YnVmIHRoZW4gdGhlIHNvY2tldAorICAgICAgaXMgY29uZ2VzdGVkLiAgQWxsIHNlbmRzIGF0dGVtcHRlZCB0byB0aGlzIHNvY2tldCdzIGFkZHJlc3MKKyAgICAgIHNob3VsZCByZXR1cm4gYmxvY2sgb3IgcmV0dXJuIC1FV09VTERCTE9DSy4KKworICAgICAgQXBwbGljYXRpb25zIGFyZSBleHBlY3RlZCB0byBiZSByZWFzb25hYmx5IHR1bmVkIHN1Y2ggdGhhdCB0aGlzCisgICAgICBzaXR1YXRpb24gdmVyeSByYXJlbHkgb2NjdXJzLiAgQW4gYXBwbGljYXRpb24gZW5jb3VudGVyaW5nIHRoaXMKKyAgICAgICJiYWNrLXByZXNzdXJlIiBpcyBjb25zaWRlcmVkIGEgYnVnLgorCisgICAgICBUaGlzIGlzIGltcGxlbWVudGVkIGJ5IGhhdmluZyBlYWNoIG5vZGUgbWFpbnRhaW4gYml0bWFwcyB3aGljaAorICAgICAgaW5kaWNhdGUgd2hpY2ggcG9ydHMgb24gYm91bmQgYWRkcmVzc2VzIGFyZSBjb25nZXN0ZWQuICBBcyB0aGUKKyAgICAgIGJpdG1hcCBjaGFuZ2VzIGl0IGlzIHNlbnQgdGhyb3VnaCBhbGwgdGhlIGNvbm5lY3Rpb25zIHdoaWNoCisgICAgICB0ZXJtaW5hdGUgaW4gdGhlIGxvY2FsIGFkZHJlc3Mgb2YgdGhlIGJpdG1hcCB3aGljaCBjaGFuZ2VkLgorCisgICAgICBUaGUgYml0bWFwcyBhcmUgYWxsb2NhdGVkIGFzIGNvbm5lY3Rpb25zIGFyZSBicm91Z2h0IHVwLiAgVGhpcworICAgICAgYXZvaWRzIGFsbG9jYXRpb24gaW4gdGhlIGludGVycnVwdCBoYW5kbGluZyBwYXRoIHdoaWNoIHF1ZXVlcworICAgICAgc2FnZXMgb24gc29ja2V0cy4gIFRoZSBkZW5zZSBiaXRtYXBzIGxldCB0cmFuc3BvcnRzIHNlbmQgdGhlCisgICAgICBlbnRpcmUgYml0bWFwIG9uIGFueSBiaXRtYXAgY2hhbmdlIHJlYXNvbmFibHkgZWZmaWNpZW50bHkuICBUaGlzCisgICAgICBpcyBtdWNoIGVhc2llciB0byBpbXBsZW1lbnQgdGhhbiBzb21lIGZpbmVyLWdyYWluZWQKKyAgICAgIGNvbW11bmljYXRpb24gb2YgcGVyLXBvcnQgY29uZ2VzdGlvbi4gIFRoZSBzZW5kZXIgZG9lcyBhIHZlcnkKKyAgICAgIGluZXhwZW5zaXZlIGJpdCB0ZXN0IHRvIHRlc3QgaWYgdGhlIHBvcnQgaXQncyBhYm91dCB0byBzZW5kIHRvCisgICAgICBpcyBjb25nZXN0ZWQgb3Igbm90LgorCisKK1JEUyBUcmFuc3BvcnQgTGF5ZXIKKz09PT09PT09PT09PT09PT09PQorCisgIEFzIG1lbnRpb25lZCBhYm92ZSwgUkRTIGlzIG5vdCBJQi1zcGVjaWZpYy4gSXRzIGNvZGUgaXMgZGl2aWRlZAorICBpbnRvIGEgZ2VuZXJhbCBSRFMgbGF5ZXIgYW5kIGEgdHJhbnNwb3J0IGxheWVyLgorCisgIFRoZSBnZW5lcmFsIGxheWVyIGhhbmRsZXMgdGhlIHNvY2tldCBBUEksIGNvbmdlc3Rpb24gaGFuZGxpbmcsCisgIGxvb3BiYWNrLCBzdGF0cywgdXNlcm1lbSBwaW5uaW5nLCBhbmQgdGhlIGNvbm5lY3Rpb24gc3RhdGUgbWFjaGluZS4KKworICBUaGUgdHJhbnNwb3J0IGxheWVyIGhhbmRsZXMgdGhlIGRldGFpbHMgb2YgdGhlIHRyYW5zcG9ydC4gVGhlIElCCisgIHRyYW5zcG9ydCwgZm9yIGV4YW1wbGUsIGhhbmRsZXMgYWxsIHRoZSBxdWV1ZSBwYWlycywgd29yayByZXF1ZXN0cywKKyAgQ00gZXZlbnQgaGFuZGxlcnMsIGFuZCBvdGhlciBJbmZpbmliYW5kIGRldGFpbHMuCisKKworUkRTIEtlcm5lbCBTdHJ1Y3R1cmVzCis9PT09PT09PT09PT09PT09PT09PT0KKworICBzdHJ1Y3QgcmRzX21lc3NhZ2UKKyAgICBha2EgcG9zc2libHkgInJkc19vdXRnb2luZyIsIHRoZSBnZW5lcmljIFJEUyBsYXllciBjb3BpZXMgZGF0YSB0bworICAgIGJlIHNlbnQgYW5kIHNldHMgaGVhZGVyIGZpZWxkcyBhcyBuZWVkZWQsIGJhc2VkIG9uIHRoZSBzb2NrZXQgQVBJLgorICAgIFRoaXMgaXMgdGhlbiBxdWV1ZWQgZm9yIHRoZSBpbmRpdmlkdWFsIGNvbm5lY3Rpb24gYW5kIHNlbnQgYnkgdGhlCisgICAgY29ubmVjdGlvbidzIHRyYW5zcG9ydC4KKyAgc3RydWN0IHJkc19pbmNvbWluZworICAgIGEgZ2VuZXJpYyBzdHJ1Y3QgcmVmZXJyaW5nIHRvIGluY29taW5nIGRhdGEgdGhhdCBjYW4gYmUgaGFuZGVkIGZyb20KKyAgICB0aGUgdHJhbnNwb3J0IHRvIHRoZSBnZW5lcmFsIGNvZGUgYW5kIHF1ZXVlZCBieSB0aGUgZ2VuZXJhbCBjb2RlCisgICAgd2hpbGUgdGhlIHNvY2tldCBpcyBhd29rZW4uIEl0IGlzIHRoZW4gcGFzc2VkIGJhY2sgdG8gdGhlIHRyYW5zcG9ydAorICAgIGNvZGUgdG8gaGFuZGxlIHRoZSBhY3R1YWwgY29weS10by11c2VyLgorICBzdHJ1Y3QgcmRzX3NvY2tldAorICAgIHBlci1zb2NrZXQgaW5mb3JtYXRpb24KKyAgc3RydWN0IHJkc19jb25uZWN0aW9uCisgICAgcGVyLWNvbm5lY3Rpb24gaW5mb3JtYXRpb24KKyAgc3RydWN0IHJkc190cmFuc3BvcnQKKyAgICBwb2ludGVycyB0byB0cmFuc3BvcnQtc3BlY2lmaWMgZnVuY3Rpb25zCisgIHN0cnVjdCByZHNfc3RhdGlzdGljcworICAgIG5vbi10cmFuc3BvcnQtc3BlY2lmaWMgc3RhdGlzdGljcworICBzdHJ1Y3QgcmRzX2NvbmdfbWFwCisgICAgd3JhcHMgdGhlIHJhdyBjb25nZXN0aW9uIGJpdG1hcCwgY29udGFpbnMgcmJub2RlLCB3YWl0cSwgZXRjLgorCitDb25uZWN0aW9uIG1hbmFnZW1lbnQKKz09PT09PT09PT09PT09PT09PT09PQorCisgIENvbm5lY3Rpb25zIG1heSBiZSBpbiBVUCwgRE9XTiwgQ09OTkVDVElORywgRElTQ09OTkVDVElORywgYW5kCisgIEVSUk9SIHN0YXRlcy4KKworICBUaGUgZmlyc3QgdGltZSBhbiBhdHRlbXB0IGlzIG1hZGUgYnkgYW4gUkRTIHNvY2tldCB0byBzZW5kIGRhdGEgdG8KKyAgYSBub2RlLCBhIGNvbm5lY3Rpb24gaXMgYWxsb2NhdGVkIGFuZCBjb25uZWN0ZWQuIFRoYXQgY29ubmVjdGlvbiBpcworICB0aGVuIG1haW50YWluZWQgZm9yZXZlciAtLSBpZiB0aGVyZSBhcmUgdHJhbnNwb3J0IGVycm9ycywgdGhlCisgIGNvbm5lY3Rpb24gd2lsbCBiZSBkcm9wcGVkIGFuZCByZS1lc3RhYmxpc2hlZC4KKworICBEcm9wcGluZyBhIGNvbm5lY3Rpb24gd2hpbGUgcGFja2V0cyBhcmUgcXVldWVkIHdpbGwgY2F1c2UgcXVldWVkIG9yCisgIHBhcnRpYWxseS1zZW50IGRhdGFncmFtcyB0byBiZSByZXRyYW5zbWl0dGVkIHdoZW4gdGhlIGNvbm5lY3Rpb24gaXMKKyAgcmUtZXN0YWJsaXNoZWQuCisKKworVGhlIHNlbmQgcGF0aAorPT09PT09PT09PT09PQorCisgIHJkc19zZW5kbXNnKCkKKyAgICBzdHJ1Y3QgcmRzX21lc3NhZ2UgYnVpbHQgZnJvbSBpbmNvbWluZyBkYXRhCisgICAgQ01TR3MgcGFyc2VkIChlLmcuIFJETUEgb3BzKQorICAgIHRyYW5zcG9ydCBjb25uZWN0aW9uIGFsbG9jZWQgYW5kIGNvbm5lY3RlZCBpZiBub3QgYWxyZWFkeQorICAgIHJkc19tZXNzYWdlIHBsYWNlZCBvbiBzZW5kIHF1ZXVlCisgICAgc2VuZCB3b3JrZXIgYXdva2VuCisgIHJkc19zZW5kX3dvcmtlcigpCisgICAgY2FsbHMgcmRzX3NlbmRfeG1pdCgpIHVudGlsIHF1ZXVlIGlzIGVtcHR5CisgIHJkc19zZW5kX3htaXQoKQorICAgIHRyYW5zbWl0cyBjb25nZXN0aW9uIG1hcCBpZiBvbmUgaXMgcGVuZGluZworICAgIG1heSBzZXQgQUNLX1JFUVVJUkVECisgICAgY2FsbHMgdHJhbnNwb3J0IHRvIHNlbmQgZWl0aGVyIG5vbi1SRE1BIG9yIFJETUEgbWVzc2FnZQorICAgIChSRE1BIG9wcyBuZXZlciByZXRyYW5zbWl0dGVkKQorICByZHNfaWJfeG1pdCgpCisgICAgYWxsb2NzIHdvcmsgcmVxdWVzdHMgZnJvbSBzZW5kIHJpbmcKKyAgICBhZGRzIGFueSBuZXcgc2VuZCBjcmVkaXRzIGF2YWlsYWJsZSB0byBwZWVyIChoX2NyZWRpdHMpCisgICAgbWFwcyB0aGUgcmRzX21lc3NhZ2UncyBzZyBsaXN0CisgICAgcGlnZ3liYWNrcyBhY2sKKyAgICBwb3B1bGF0ZXMgd29yayByZXF1ZXN0cworICAgIHBvc3Qgc2VuZCB0byBjb25uZWN0aW9uJ3MgcXVldWUgcGFpcgorCitUaGUgcmVjdiBwYXRoCis9PT09PT09PT09PT09CisKKyAgcmRzX2liX3JlY3ZfY3FfY29tcF9oYW5kbGVyKCkKKyAgICBsb29rcyBhdCB3cml0ZSBjb21wbGV0aW9ucworICAgIHVubWFwcyByZWN2IGJ1ZmZlciBmcm9tIGRldmljZQorICAgIG5vIGVycm9ycywgY2FsbCByZHNfaWJfcHJvY2Vzc19yZWN2KCkKKyAgICByZWZpbGwgcmVjdiByaW5nCisgIHJkc19pYl9wcm9jZXNzX3JlY3YoKQorICAgIHZhbGlkYXRlIGhlYWRlciBjaGVja3N1bQorICAgIGNvcHkgaGVhZGVyIHRvIHJkc19pYl9pbmNvbWluZyBzdHJ1Y3QgaWYgc3RhcnQgb2YgYSBuZXcgZGF0YWdyYW0KKyAgICBhZGQgdG8gaWJpbmMncyBmcmFnbGlzdAorICAgIGlmIGNvbXBldGVkIGRhdGFncmFtOgorICAgICAgdXBkYXRlIGNvbmcgbWFwIGlmIGRhdGFncmFtIHdhcyBjb25nIHVwZGF0ZQorICAgICAgY2FsbCByZHNfcmVjdl9pbmNvbWluZygpIG90aGVyd2lzZQorICAgICAgbm90ZSBpZiBhY2sgaXMgcmVxdWlyZWQKKyAgcmRzX3JlY3ZfaW5jb21pbmcoKQorICAgIGRyb3AgZHVwbGljYXRlIHBhY2tldHMKKyAgICByZXNwb25kIHRvIHBpbmdzCisgICAgZmluZCB0aGUgc29jayBhc3NvY2lhdGVkIHdpdGggdGhpcyBkYXRhZ3JhbQorICAgIGFkZCB0byBzb2NrIHF1ZXVlCisgICAgd2FrZSB1cCBzb2NrCisgICAgZG8gc29tZSBjb25nZXN0aW9uIGNhbGN1bGF0aW9ucworICByZHNfcmVjdm1zZworICAgIGNvcHkgZGF0YSBpbnRvIHVzZXIgaW92ZWMKKyAgICBoYW5kbGUgQ01TR3MKKyAgICByZXR1cm4gdG8gYXBwbGljYXRpb24KKworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdGltZXN0YW1waW5nLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90aW1lc3RhbXBpbmcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlNThiNDUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdGltZXN0YW1waW5nLnR4dApAQCAtMCwwICsxLDE4MCBAQAorVGhlIGV4aXN0aW5nIGludGVyZmFjZXMgZm9yIGdldHRpbmcgbmV0d29yayBwYWNrYWdlcyB0aW1lIHN0YW1wZWQgYXJlOgorCisqIFNPX1RJTUVTVEFNUAorICBHZW5lcmF0ZSB0aW1lIHN0YW1wIGZvciBlYWNoIGluY29taW5nIHBhY2tldCB1c2luZyB0aGUgKG5vdCBuZWNlc3NhcmlseQorICBtb25vdG9ub3VzISkgc3lzdGVtIHRpbWUuIFJlc3VsdCBpcyByZXR1cm5lZCB2aWEgcmVjdl9tc2coKSBpbiBhCisgIGNvbnRyb2wgbWVzc2FnZSBhcyB0aW1ldmFsICh1c2VjIHJlc29sdXRpb24pLgorCisqIFNPX1RJTUVTVEFNUE5TCisgIFNhbWUgdGltZSBzdGFtcGluZyBtZWNoYW5pc20gYXMgU09fVElNRVNUQU1QLCBidXQgcmV0dXJucyByZXN1bHQgYXMKKyAgdGltZXNwZWMgKG5zZWMgcmVzb2x1dGlvbikuCisKKyogSVBfTVVMVElDQVNUX0xPT1AgKyBTT19USU1FU1RBTVBbTlNdCisgIE9ubHkgZm9yIG11bHRpY2FzdHM6IGFwcHJveGltYXRlIHNlbmQgdGltZSBzdGFtcCBieSByZWNlaXZpbmcgdGhlIGxvb3BlZAorICBwYWNrZXQgYW5kIHVzaW5nIGl0cyByZWNlaXZlIHRpbWUgc3RhbXAuCisKK1RoZSBmb2xsb3dpbmcgaW50ZXJmYWNlIGNvbXBsZW1lbnRzIHRoZSBleGlzdGluZyBvbmVzOiByZWNlaXZlIHRpbWUKK3N0YW1wcyBjYW4gYmUgZ2VuZXJhdGVkIGFuZCByZXR1cm5lZCBmb3IgYXJiaXRyYXJ5IHBhY2tldHMgYW5kIG11Y2gKK2Nsb3NlciB0byB0aGUgcG9pbnQgd2hlcmUgdGhlIHBhY2tldCBpcyByZWFsbHkgc2VudC4gVGltZSBzdGFtcHMgY2FuCitiZSBnZW5lcmF0ZWQgaW4gc29mdHdhcmUgKGFzIGJlZm9yZSkgb3IgaW4gaGFyZHdhcmUgKGlmIHRoZSBoYXJkd2FyZQoraGFzIHN1Y2ggYSBmZWF0dXJlKS4KKworU09fVElNRVNUQU1QSU5HOgorCitJbnN0cnVjdHMgdGhlIHNvY2tldCBsYXllciB3aGljaCBraW5kIG9mIGluZm9ybWF0aW9uIGlzIHdhbnRlZC4gVGhlCitwYXJhbWV0ZXIgaXMgYW4gaW50ZWdlciB3aXRoIHNvbWUgb2YgdGhlIGZvbGxvd2luZyBiaXRzIHNldC4gU2V0dGluZworb3RoZXIgYml0cyBpcyBhbiBlcnJvciBhbmQgZG9lc24ndCBjaGFuZ2UgdGhlIGN1cnJlbnQgc3RhdGUuCisKK1NPRl9USU1FU1RBTVBJTkdfVFhfSEFSRFdBUkU6ICB0cnkgdG8gb2J0YWluIHNlbmQgdGltZSBzdGFtcCBpbiBoYXJkd2FyZQorU09GX1RJTUVTVEFNUElOR19UWF9TT0ZUV0FSRTogIGlmIFNPRl9USU1FU1RBTVBJTkdfVFhfSEFSRFdBUkUgaXMgb2ZmIG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFpbHMsIHRoZW4gZG8gaXQgaW4gc29mdHdhcmUKK1NPRl9USU1FU1RBTVBJTkdfUlhfSEFSRFdBUkU6ICByZXR1cm4gdGhlIG9yaWdpbmFsLCB1bm1vZGlmaWVkIHRpbWUgc3RhbXAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcyBnZW5lcmF0ZWQgYnkgdGhlIGhhcmR3YXJlCitTT0ZfVElNRVNUQU1QSU5HX1JYX1NPRlRXQVJFOiAgaWYgU09GX1RJTUVTVEFNUElOR19SWF9IQVJEV0FSRSBpcyBvZmYgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWlscywgdGhlbiBkbyBpdCBpbiBzb2Z0d2FyZQorU09GX1RJTUVTVEFNUElOR19SQVdfSEFSRFdBUkU6IHJldHVybiBvcmlnaW5hbCByYXcgaGFyZHdhcmUgdGltZSBzdGFtcAorU09GX1RJTUVTVEFNUElOR19TWVNfSEFSRFdBUkU6IHJldHVybiBoYXJkd2FyZSB0aW1lIHN0YW1wIHRyYW5zZm9ybWVkIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHN5c3RlbSB0aW1lIGJhc2UKK1NPRl9USU1FU1RBTVBJTkdfU09GVFdBUkU6ICAgICByZXR1cm4gc3lzdGVtIHRpbWUgc3RhbXAgZ2VuZXJhdGVkIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29mdHdhcmUKKworU09GX1RJTUVTVEFNUElOR19UWC9SWCBkZXRlcm1pbmUgaG93IHRpbWUgc3RhbXBzIGFyZSBnZW5lcmF0ZWQuCitTT0ZfVElNRVNUQU1QSU5HX1JBVy9TWVMgZGV0ZXJtaW5lIGhvdyB0aGV5IGFyZSByZXBvcnRlZCBpbiB0aGUKK2ZvbGxvd2luZyBjb250cm9sIG1lc3NhZ2U6CisgICAgc3RydWN0IHNjbV90aW1lc3RhbXBpbmcgeworICAgICAgICAgICBzdHJ1Y3QgdGltZXNwZWMgc3lzdGltZTsKKyAgICAgICAgICAgc3RydWN0IHRpbWVzcGVjIGh3dGltZXRyYW5zOworICAgICAgICAgICBzdHJ1Y3QgdGltZXNwZWMgaHd0aW1lcmF3OworICAgIH07CisKK3JlY3Ztc2coKSBjYW4gYmUgdXNlZCB0byBnZXQgdGhpcyBjb250cm9sIG1lc3NhZ2UgZm9yIHJlZ3VsYXIgaW5jb21pbmcKK3BhY2tldHMuIEZvciBzZW5kIHRpbWUgc3RhbXBzIHRoZSBvdXRnb2luZyBwYWNrZXQgaXMgbG9vcGVkIGJhY2sgdG8KK3RoZSBzb2NrZXQncyBlcnJvciBxdWV1ZSB3aXRoIHRoZSBzZW5kIHRpbWUgc3RhbXAocykgYXR0YWNoZWQuIEl0IGNhbgorYmUgcmVjZWl2ZWQgd2l0aCByZWN2bXNnKGZsYWdzPU1TR19FUlJRVUVVRSkuIFRoZSBjYWxsIHJldHVybnMgdGhlCitvcmlnaW5hbCBvdXRnb2luZyBwYWNrZXQgZGF0YSBpbmNsdWRpbmcgYWxsIGhlYWRlcnMgcHJlcHJlbmRlZCBkb3duIHRvCithbmQgaW5jbHVkaW5nIHRoZSBsaW5rIGxheWVyLCB0aGUgc2NtX3RpbWVzdGFtcGluZyBjb250cm9sIG1lc3NhZ2UgYW5kCithIHNvY2tfZXh0ZW5kZWRfZXJyIGNvbnRyb2wgbWVzc2FnZSB3aXRoIGVlX2Vycm5vPT1FTk9NU0cgYW5kCitlZV9vcmlnaW49PVNPX0VFX09SSUdJTl9USU1FU1RBTVBJTkcuIEEgc29ja2V0IHdpdGggc3VjaCBhIHBlbmRpbmcKK2JvdW5jZWQgcGFja2V0IGlzIHJlYWR5IGZvciByZWFkaW5nIGFzIGZhciBhcyBzZWxlY3QoKSBpcyBjb25jZXJuZWQuCitJZiB0aGUgb3V0Z29pbmcgcGFja2V0IGhhcyB0byBiZSBmcmFnbWVudGVkLCB0aGVuIG9ubHkgdGhlIGZpcnN0CitmcmFnbWVudCBpcyB0aW1lIHN0YW1wZWQgYW5kIHJldHVybmVkIHRvIHRoZSBzZW5kaW5nIHNvY2tldC4KKworQWxsIHRocmVlIHZhbHVlcyBjb3JyZXNwb25kIHRvIHRoZSBzYW1lIGV2ZW50IGluIHRpbWUsIGJ1dCB3ZXJlCitnZW5lcmF0ZWQgaW4gZGlmZmVyZW50IHdheXMuIEVhY2ggb2YgdGhlc2UgdmFsdWVzIG1heSBiZSBlbXB0eSAoPSBhbGwKK3plcm8pLCBpbiB3aGljaCBjYXNlIG5vIHN1Y2ggdmFsdWUgd2FzIGF2YWlsYWJsZS4gSWYgdGhlIGFwcGxpY2F0aW9uCitpcyBub3QgaW50ZXJlc3RlZCBpbiBzb21lIG9mIHRoZXNlIHZhbHVlcywgdGhleSBjYW4gYmUgbGVmdCBibGFuayB0bworYXZvaWQgdGhlIHBvdGVudGlhbCBvdmVyaGVhZCBvZiBjYWxjdWxhdGluZyB0aGVtLgorCitzeXN0aW1lIGlzIHRoZSB2YWx1ZSBvZiB0aGUgc3lzdGVtIHRpbWUgYXQgdGhhdCBtb21lbnQuIFRoaXMKK2NvcnJlc3BvbmRzIHRvIHRoZSB2YWx1ZSBhbHNvIHJldHVybmVkIHZpYSBTT19USU1FU1RBTVBbTlNdLiBJZiB0aGUKK3RpbWUgc3RhbXAgd2FzIGdlbmVyYXRlZCBieSBoYXJkd2FyZSwgdGhlbiB0aGlzIGZpZWxkIGlzCitlbXB0eS4gT3RoZXJ3aXNlIGl0IGlzIGZpbGxlZCBpbiBpZiBTT0ZfVElNRVNUQU1QSU5HX1NPRlRXQVJFIGlzCitzZXQuCisKK2h3dGltZXJhdyBpcyB0aGUgb3JpZ2luYWwgaGFyZHdhcmUgdGltZSBzdGFtcC4gRmlsbGVkIGluIGlmCitTT0ZfVElNRVNUQU1QSU5HX1JBV19IQVJEV0FSRSBpcyBzZXQuIE5vIGFzc3VtcHRpb25zIGFib3V0IGl0cworcmVsYXRpb24gdG8gc3lzdGVtIHRpbWUgc2hvdWxkIGJlIG1hZGUuCisKK2h3dGltZXRyYW5zIGlzIHRoZSBoYXJkd2FyZSB0aW1lIHN0YW1wIHRyYW5zZm9ybWVkIHNvIHRoYXQgaXQKK2NvcnJlc3BvbmRzIGFzIGdvb2QgYXMgcG9zc2libGUgdG8gc3lzdGVtIHRpbWUuIFRoaXMgY29ycmVsYXRpb24gaXMKK25vdCBwZXJmZWN0OyBhcyBhIGNvbnNlcXVlbmNlLCBzb3J0aW5nIHBhY2tldHMgcmVjZWl2ZWQgdmlhIGRpZmZlcmVudAorTklDcyBieSB0aGVpciBod3RpbWV0cmFucyBtYXkgZGlmZmVyIGZyb20gdGhlIG9yZGVyIGluIHdoaWNoIHRoZXkgd2VyZQorcmVjZWl2ZWQuIGh3dGltZXRyYW5zIG1heSBiZSBub24tbW9ub3RvbmljIGV2ZW4gZm9yIHRoZSBzYW1lIE5JQy4KK0ZpbGxlZCBpbiBpZiBTT0ZfVElNRVNUQU1QSU5HX1NZU19IQVJEV0FSRSBpcyBzZXQuIFJlcXVpcmVzIHN1cHBvcnQKK2J5IHRoZSBuZXR3b3JrIGRldmljZSBhbmQgd2lsbCBiZSBlbXB0eSB3aXRob3V0IHRoYXQgc3VwcG9ydC4KKworCitTSU9DU0hXVFNUQU1QOgorCitIYXJkd2FyZSB0aW1lIHN0YW1waW5nIG11c3QgYWxzbyBiZSBpbml0aWFsaXplZCBmb3IgZWFjaCBkZXZpY2UgZHJpdmVyCit0aGF0IGlzIGV4cGVjdGVkIHRvIGRvIGhhcmR3YXJlIHRpbWUgc3RhbXBpbmcuIFRoZSBwYXJhbWV0ZXIgaXM6CisKK3N0cnVjdCBod3RzdGFtcF9jb25maWcgeworICAgIGludCBmbGFnczsgICAgICAgICAgIC8qIG5vIGZsYWdzIGRlZmluZWQgcmlnaHQgbm93LCBtdXN0IGJlIHplcm8gKi8KKyAgICBpbnQgdHhfdHlwZTsgICAgICAgICAvKiBIV1RTVEFNUF9UWF8qICovCisgICAgaW50IHJ4X2ZpbHRlcjsgICAgICAgLyogSFdUU1RBTVBfRklMVEVSXyogKi8KK307CisKK0Rlc2lyZWQgYmVoYXZpb3IgaXMgcGFzc2VkIGludG8gdGhlIGtlcm5lbCBhbmQgdG8gYSBzcGVjaWZpYyBkZXZpY2UgYnkKK2NhbGxpbmcgaW9jdGwoU0lPQ1NIV1RTVEFNUCkgd2l0aCBhIHBvaW50ZXIgdG8gYSBzdHJ1Y3QgaWZyZXEgd2hvc2UKK2lmcl9kYXRhIHBvaW50cyB0byBhIHN0cnVjdCBod3RzdGFtcF9jb25maWcuIFRoZSB0eF90eXBlIGFuZAorcnhfZmlsdGVyIGFyZSBoaW50cyB0byB0aGUgZHJpdmVyIHdoYXQgaXQgaXMgZXhwZWN0ZWQgdG8gZG8uIElmCit0aGUgcmVxdWVzdGVkIGZpbmUtZ3JhaW5lZCBmaWx0ZXJpbmcgZm9yIGluY29taW5nIHBhY2tldHMgaXMgbm90CitzdXBwb3J0ZWQsIHRoZSBkcml2ZXIgbWF5IHRpbWUgc3RhbXAgbW9yZSB0aGFuIGp1c3QgdGhlIHJlcXVlc3RlZCB0eXBlcworb2YgcGFja2V0cy4KKworQSBkcml2ZXIgd2hpY2ggc3VwcG9ydHMgaGFyZHdhcmUgdGltZSBzdGFtcGluZyBzaGFsbCB1cGRhdGUgdGhlIHN0cnVjdAord2l0aCB0aGUgYWN0dWFsLCBwb3NzaWJseSBtb3JlIHBlcm1pc3NpdmUgY29uZmlndXJhdGlvbi4gSWYgdGhlCityZXF1ZXN0ZWQgcGFja2V0cyBjYW5ub3QgYmUgdGltZSBzdGFtcGVkLCB0aGVuIG5vdGhpbmcgc2hvdWxkIGJlCitjaGFuZ2VkIGFuZCBFUkFOR0Ugc2hhbGwgYmUgcmV0dXJuZWQgKGluIGNvbnRyYXN0IHRvIEVJTlZBTCwgd2hpY2gKK2luZGljYXRlcyB0aGF0IFNJT0NTSFdUU1RBTVAgaXMgbm90IHN1cHBvcnRlZCBhdCBhbGwpLgorCitPbmx5IGEgcHJvY2Vzc2VzIHdpdGggYWRtaW4gcmlnaHRzIG1heSBjaGFuZ2UgdGhlIGNvbmZpZ3VyYXRpb24uIFVzZXIKK3NwYWNlIGlzIHJlc3BvbnNpYmxlIHRvIGVuc3VyZSB0aGF0IG11bHRpcGxlIHByb2Nlc3NlcyBkb24ndCBpbnRlcmZlcmUKK3dpdGggZWFjaCBvdGhlciBhbmQgdGhhdCB0aGUgc2V0dGluZ3MgYXJlIHJlc2V0LgorCisvKiBwb3NzaWJsZSB2YWx1ZXMgZm9yIGh3dHN0YW1wX2NvbmZpZy0+dHhfdHlwZSAqLworZW51bSB7CisJLyoKKwkgKiBubyBvdXRnb2luZyBwYWNrZXQgd2lsbCBuZWVkIGhhcmR3YXJlIHRpbWUgc3RhbXBpbmc7CisJICogc2hvdWxkIGEgcGFja2V0IGFycml2ZSB3aGljaCBhc2tzIGZvciBpdCwgbm8gaGFyZHdhcmUKKwkgKiB0aW1lIHN0YW1waW5nIHdpbGwgYmUgZG9uZQorCSAqLworCUhXVFNUQU1QX1RYX09GRiwKKworCS8qCisJICogZW5hYmxlcyBoYXJkd2FyZSB0aW1lIHN0YW1waW5nIGZvciBvdXRnb2luZyBwYWNrZXRzOworCSAqIHRoZSBzZW5kZXIgb2YgdGhlIHBhY2tldCBkZWNpZGVzIHdoaWNoIGFyZSB0byBiZQorCSAqIHRpbWUgc3RhbXBlZCBieSBzZXR0aW5nIFNPRl9USU1FU1RBTVBJTkdfVFhfU09GVFdBUkUKKwkgKiBiZWZvcmUgc2VuZGluZyB0aGUgcGFja2V0CisJICovCisJSFdUU1RBTVBfVFhfT04sCit9OworCisvKiBwb3NzaWJsZSB2YWx1ZXMgZm9yIGh3dHN0YW1wX2NvbmZpZy0+cnhfZmlsdGVyICovCitlbnVtIHsKKwkvKiB0aW1lIHN0YW1wIG5vIGluY29taW5nIHBhY2tldCBhdCBhbGwgKi8KKwlIV1RTVEFNUF9GSUxURVJfTk9ORSwKKworCS8qIHRpbWUgc3RhbXAgYW55IGluY29taW5nIHBhY2tldCAqLworCUhXVFNUQU1QX0ZJTFRFUl9BTEwsCisKKyAgICAgICAgLyogcmV0dXJuIHZhbHVlOiB0aW1lIHN0YW1wIGFsbCBwYWNrZXRzIHJlcXVlc3RlZCBwbHVzIHNvbWUgb3RoZXJzICovCisgICAgICAgIEhXVFNUQU1QX0ZJTFRFUl9TT01FLAorCisJLyogUFRQIHYxLCBVRFAsIGFueSBraW5kIG9mIGV2ZW50IHBhY2tldCAqLworCUhXVFNUQU1QX0ZJTFRFUl9QVFBfVjFfTDRfRVZFTlQsCisKKyAgICAgICAgLi4uCit9OworCisKK0RFVklDRSBJTVBMRU1FTlRBVElPTgorCitBIGRyaXZlciB3aGljaCBzdXBwb3J0cyBoYXJkd2FyZSB0aW1lIHN0YW1waW5nIG11c3Qgc3VwcG9ydCB0aGUKK1NJT0NTSFdUU1RBTVAgaW9jdGwuIFRpbWUgc3RhbXBzIGZvciByZWNlaXZlZCBwYWNrZXRzIG11c3QgYmUgc3RvcmVkCitpbiB0aGUgc2tiIHdpdGggc2tiX2h3dHN0YW1wX3NldCgpLgorCitUaW1lIHN0YW1wcyBmb3Igb3V0Z29pbmcgcGFja2V0cyBhcmUgdG8gYmUgZ2VuZXJhdGVkIGFzIGZvbGxvd3M6CistIEluIGhhcmRfc3RhcnRfeG1pdCgpLCBjaGVjayBpZiBza2JfaHd0c3RhbXBfY2hlY2tfdHhfaGFyZHdhcmUoKQorICByZXR1cm5zIG5vbi16ZXJvLiBJZiB5ZXMsIHRoZW4gdGhlIGRyaXZlciBpcyBleHBlY3RlZAorICB0byBkbyBoYXJkd2FyZSB0aW1lIHN0YW1waW5nLgorLSBJZiB0aGlzIGlzIHBvc3NpYmxlIGZvciB0aGUgc2tiIGFuZCByZXF1ZXN0ZWQsIHRoZW4gZGVjbGFyZQorICB0aGF0IHRoZSBkcml2ZXIgaXMgZG9pbmcgdGhlIHRpbWUgc3RhbXBpbmcgYnkgY2FsbGluZworICBza2JfaHd0c3RhbXBfdHhfaW5fcHJvZ3Jlc3MoKS4gQSBkcml2ZXIgbm90IHN1cHBvcnRpbmcKKyAgaGFyZHdhcmUgdGltZSBzdGFtcGluZyBkb2Vzbid0IGRvIHRoYXQuIEEgZHJpdmVyIG11c3QgbmV2ZXIKKyAgdG91Y2ggc2tfYnVmZjo6dHN0YW1wISBJdCBpcyB1c2VkIHRvIHN0b3JlIGhvdyB0aW1lIHN0YW1waW5nCisgIGZvciBhbiBvdXRnb2luZyBwYWNrZXRzIGlzIHRvIGJlIGRvbmUuCistIEFzIHNvb24gYXMgdGhlIGRyaXZlciBoYXMgc2VudCB0aGUgcGFja2V0IGFuZC9vciBvYnRhaW5lZCBhCisgIGhhcmR3YXJlIHRpbWUgc3RhbXAgZm9yIGl0LCBpdCBwYXNzZXMgdGhlIHRpbWUgc3RhbXAgYmFjayBieQorICBjYWxsaW5nIHNrYl9od3RzdGFtcF90eCgpIHdpdGggdGhlIG9yaWdpbmFsIHNrYiwgdGhlIHJhdworICBoYXJkd2FyZSB0aW1lIHN0YW1wIGFuZCBhIGhhbmRsZSB0byB0aGUgZGV2aWNlIChuZWNlc3NhcnkKKyAgdG8gY29udmVydCB0aGUgaGFyZHdhcmUgdGltZSBzdGFtcCB0byBzeXN0ZW0gdGltZSkuIElmIG9idGFpbmluZworICB0aGUgaGFyZHdhcmUgdGltZSBzdGFtcCBzb21laG93IGZhaWxzLCB0aGVuIHRoZSBkcml2ZXIgc2hvdWxkCisgIG5vdCBmYWxsIGJhY2sgdG8gc29mdHdhcmUgdGltZSBzdGFtcGluZy4gVGhlIHJhdGlvbmFsZSBpcyB0aGF0CisgIHRoaXMgd291bGQgb2NjdXIgYXQgYSBsYXRlciB0aW1lIGluIHRoZSBwcm9jZXNzaW5nIHBpcGVsaW5lCisgIHRoYW4gb3RoZXIgc29mdHdhcmUgdGltZSBzdGFtcGluZyBhbmQgdGhlcmVmb3JlIGNvdWxkIGxlYWQKKyAgdG8gdW5leHBlY3RlZCBkZWx0YXMgYmV0d2VlbiB0aW1lIHN0YW1wcy4KKy0gSWYgdGhlIGRyaXZlciBkaWQgbm90IGNhbGwgc2tiX2h3dHN0YW1wX3R4X2luX3Byb2dyZXNzKCksIHRoZW4KKyAgZGV2X2hhcmRfc3RhcnRfeG1pdCgpIGNoZWNrcyB3aGV0aGVyIHNvZnR3YXJlIHRpbWUgc3RhbXBpbmcKKyAgaXMgd2FudGVkIGFzIGZhbGxiYWNrIGFuZCBwb3RlbnRpYWxseSBnZW5lcmF0ZXMgdGhlIHRpbWUgc3RhbXAuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdGltZXN0YW1waW5nLy5naXRpZ25vcmUgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdGltZXN0YW1waW5nLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFlODFlYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90aW1lc3RhbXBpbmcvLmdpdGlnbm9yZQpAQCAtMCwwICsxIEBACit0aW1lc3RhbXBpbmcKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90aW1lc3RhbXBpbmcvTWFrZWZpbGUgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdGltZXN0YW1waW5nL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhMTQ4OWYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdGltZXN0YW1waW5nL01ha2VmaWxlCkBAIC0wLDAgKzEsNiBAQAorQ1BQRkxBR1MgPSAtSS4uLy4uLy4uL2luY2x1ZGUKKwordGltZXN0YW1waW5nOiB0aW1lc3RhbXBpbmcuYworCitjbGVhbjoKKwlybSAtZiB0aW1lc3RhbXBpbmcKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90aW1lc3RhbXBpbmcvdGltZXN0YW1waW5nLmMgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdGltZXN0YW1waW5nL3RpbWVzdGFtcGluZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzZDE0MzEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdGltZXN0YW1waW5nL3RpbWVzdGFtcGluZy5jCkBAIC0wLDAgKzEsNTMzIEBACisvKgorICogVGhpcyBwcm9ncmFtIGRlbW9uc3RyYXRlcyBob3cgdGhlIHZhcmlvdXMgdGltZSBzdGFtcGluZyBmZWF0dXJlcyBpbgorICogdGhlIExpbnV4IGtlcm5lbCB3b3JrLiBJdCBlbXVsYXRlcyB0aGUgYmVoYXZpb3Igb2YgYSBQVFAKKyAqIGltcGxlbWVudGF0aW9uIGluIHN0YW5kLWFsb25lIG1hc3RlciBtb2RlIGJ5IHNlbmRpbmcgUFRQdjEgU3luYworICogbXVsdGljYXN0cyBvbmNlIGV2ZXJ5IHNlY29uZC4gSXQgbG9va3MgZm9yIHNpbWlsYXIgcGFja2V0cywgYnV0CisgKiBiZXlvbmQgdGhhdCBkb2Vzbid0IGFjdHVhbGx5IGltcGxlbWVudCBQVFAuCisgKgorICogT3V0Z29pbmcgcGFja2V0cyBhcmUgdGltZSBzdGFtcGVkIHdpdGggU09fVElNRVNUQU1QSU5HIHdpdGggb3IKKyAqIHdpdGhvdXQgaGFyZHdhcmUgc3VwcG9ydC4KKyAqCisgKiBJbmNvbWluZyBwYWNrZXRzIGFyZSB0aW1lIHN0YW1wZWQgd2l0aCBTT19USU1FU1RBTVBJTkcgd2l0aCBvcgorICogd2l0aG91dCBoYXJkd2FyZSBzdXBwb3J0LCBTSU9DR1NUQU1QW05TXSAocGVyLXNvY2tldCB0aW1lIHN0YW1wKSBhbmQKKyAqIFNPX1RJTUVTVEFNUFtOU10uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEludGVsIENvcnBvcmF0aW9uLgorICogQXV0aG9yOiBQYXRyaWNrIE9obHkgPHBhdHJpY2sub2hseUBpbnRlbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICogU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNpbmNsdWRlIDxuZXQvaWYuaD4KKworI2luY2x1ZGUgImFzbS90eXBlcy5oIgorI2luY2x1ZGUgImxpbnV4L25ldF90c3RhbXAuaCIKKyNpbmNsdWRlICJsaW51eC9lcnJxdWV1ZS5oIgorCisjaWZuZGVmIFNPX1RJTUVTVEFNUElORworIyBkZWZpbmUgU09fVElNRVNUQU1QSU5HICAgICAgICAgMzcKKyMgZGVmaW5lIFNDTV9USU1FU1RBTVBJTkcgICAgICAgIFNPX1RJTUVTVEFNUElORworI2VuZGlmCisKKyNpZm5kZWYgU09fVElNRVNUQU1QTlMKKyMgZGVmaW5lIFNPX1RJTUVTVEFNUE5TIDM1CisjZW5kaWYKKworI2lmbmRlZiBTSU9DR1NUQU1QTlMKKyMgZGVmaW5lIFNJT0NHU1RBTVBOUyAweDg5MDcKKyNlbmRpZgorCisjaWZuZGVmIFNJT0NTSFdUU1RBTVAKKyMgZGVmaW5lIFNJT0NTSFdUU1RBTVAgMHg4OWIwCisjZW5kaWYKKworc3RhdGljIHZvaWQgdXNhZ2UoY29uc3QgY2hhciAqZXJyb3IpCit7CisJaWYgKGVycm9yKQorCQlwcmludGYoImludmFsaWQgb3B0aW9uOiAlc1xuIiwgZXJyb3IpOworCXByaW50ZigidGltZXN0YW1waW5nIGludGVyZmFjZSBvcHRpb24qXG5cbiIKKwkgICAgICAgIk9wdGlvbnM6XG4iCisJICAgICAgICIgIElQX01VTFRJQ0FTVF9MT09QIC0gbG9vcGluZyBvdXRnb2luZyBtdWx0aWNhc3RzXG4iCisJICAgICAgICIgIFNPX1RJTUVTVEFNUCAtIG5vcm1hbCBzb2Z0d2FyZSB0aW1lIHN0YW1waW5nLCBtcyByZXNvbHV0aW9uXG4iCisJICAgICAgICIgIFNPX1RJTUVTVEFNUE5TIC0gbW9yZSBhY2N1cmF0ZSBzb2Z0d2FyZSB0aW1lIHN0YW1waW5nXG4iCisJICAgICAgICIgIFNPRl9USU1FU1RBTVBJTkdfVFhfSEFSRFdBUkUgLSBoYXJkd2FyZSB0aW1lIHN0YW1waW5nIG9mIG91dGdvaW5nIHBhY2tldHNcbiIKKwkgICAgICAgIiAgU09GX1RJTUVTVEFNUElOR19UWF9TT0ZUV0FSRSAtIHNvZnR3YXJlIGZhbGxiYWNrIGZvciBvdXRnb2luZyBwYWNrZXRzXG4iCisJICAgICAgICIgIFNPRl9USU1FU1RBTVBJTkdfUlhfSEFSRFdBUkUgLSBoYXJkd2FyZSB0aW1lIHN0YW1waW5nIG9mIGluY29taW5nIHBhY2tldHNcbiIKKwkgICAgICAgIiAgU09GX1RJTUVTVEFNUElOR19SWF9TT0ZUV0FSRSAtIHNvZnR3YXJlIGZhbGxiYWNrIGZvciBpbmNvbWluZyBwYWNrZXRzXG4iCisJICAgICAgICIgIFNPRl9USU1FU1RBTVBJTkdfU09GVFdBUkUgLSByZXF1ZXN0IHJlcG9ydGluZyBvZiBzb2Z0d2FyZSB0aW1lIHN0YW1wc1xuIgorCSAgICAgICAiICBTT0ZfVElNRVNUQU1QSU5HX1NZU19IQVJEV0FSRSAtIHJlcXVlc3QgcmVwb3J0aW5nIG9mIHRyYW5zZm9ybWVkIEhXIHRpbWUgc3RhbXBzXG4iCisJICAgICAgICIgIFNPRl9USU1FU1RBTVBJTkdfUkFXX0hBUkRXQVJFIC0gcmVxdWVzdCByZXBvcnRpbmcgb2YgcmF3IEhXIHRpbWUgc3RhbXBzXG4iCisJICAgICAgICIgIFNJT0NHU1RBTVAgLSBjaGVjayBsYXN0IHNvY2tldCB0aW1lIHN0YW1wXG4iCisJICAgICAgICIgIFNJT0NHU1RBTVBOUyAtIG1vcmUgYWNjdXJhdGUgc29ja2V0IHRpbWUgc3RhbXBcbiIpOworCWV4aXQoMSk7Cit9CisKK3N0YXRpYyB2b2lkIGJhaWwoY29uc3QgY2hhciAqZXJyb3IpCit7CisJcHJpbnRmKCIlczogJXNcbiIsIGVycm9yLCBzdHJlcnJvcihlcnJubykpOworCWV4aXQoMSk7Cit9CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHN5bmNbXSA9IHsKKwkweDAwLCAweDAxLCAweDAwLCAweDAxLAorCTB4NWYsIDB4NDQsIDB4NDYsIDB4NGMsCisJMHg1NCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMSwgMHgwMSwKKworCS8qIGZha2UgdXVpZCAqLworCTB4MDAsIDB4MDEsCisJMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwKKworCTB4MDAsIDB4MDEsIDB4MDAsIDB4MzcsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4NDksIDB4MDUsIDB4Y2QsIDB4MDEsCisJMHgyOSwgMHhiMSwgMHg4ZCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDEsCisKKwkvKiBmYWtlIHV1aWQgKi8KKwkweDAwLCAweDAxLAorCTB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsCisKKwkweDAwLCAweDAwLCAweDAwLCAweDM3LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsCisJMHg0NCwgMHg0NiwgMHg0YywgMHg1NCwKKwkweDAwLCAweDAwLCAweGYwLCAweDYwLAorCTB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKwkweDAwLCAweDAwLCAweGYwLCAweDYwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwKKwkweDQ0LCAweDQ2LCAweDRjLCAweDU0LAorCTB4MDAsIDB4MDEsCisKKwkvKiBmYWtlIHV1aWQgKi8KKwkweDAwLCAweDAxLAorCTB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsCisKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwCit9OworCitzdGF0aWMgdm9pZCBzZW5kcGFja2V0KGludCBzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIHNvY2tsZW5fdCBhZGRyX2xlbikKK3sKKwlzdHJ1Y3QgdGltZXZhbCBub3c7CisJaW50IHJlczsKKworCXJlcyA9IHNlbmR0byhzb2NrLCBzeW5jLCBzaXplb2Yoc3luYyksIDAsCisJCWFkZHIsIGFkZHJfbGVuKTsKKwlnZXR0aW1lb2ZkYXkoJm5vdywgMCk7CisJaWYgKHJlcyA8IDApCisJCXByaW50ZigiJXM6ICVzXG4iLCAic2VuZCIsIHN0cmVycm9yKGVycm5vKSk7CisJZWxzZQorCQlwcmludGYoIiVsZC4lMDZsZDogc2VudCAlZCBieXRlc1xuIiwKKwkJICAgICAgIChsb25nKW5vdy50dl9zZWMsIChsb25nKW5vdy50dl91c2VjLAorCQkgICAgICAgcmVzKTsKK30KKworc3RhdGljIHZvaWQgcHJpbnRwYWNrZXQoc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgcmVzLAorCQkJY2hhciAqZGF0YSwKKwkJCWludCBzb2NrLCBpbnQgcmVjdm1zZ19mbGFncywKKwkJCWludCBzaW9jZ3N0YW1wLCBpbnQgc2lvY2dzdGFtcG5zKQoreworCXN0cnVjdCBzb2NrYWRkcl9pbiAqZnJvbV9hZGRyID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKW1zZy0+bXNnX25hbWU7CisJc3RydWN0IGNtc2doZHIgKmNtc2c7CisJc3RydWN0IHRpbWV2YWwgdHY7CisJc3RydWN0IHRpbWVzcGVjIHRzOworCXN0cnVjdCB0aW1ldmFsIG5vdzsKKworCWdldHRpbWVvZmRheSgmbm93LCAwKTsKKworCXByaW50ZigiJWxkLiUwNmxkOiByZWNlaXZlZCAlcyBkYXRhLCAlZCBieXRlcyBmcm9tICVzLCAlZCBieXRlcyBjb250cm9sIG1lc3NhZ2VzXG4iLAorCSAgICAgICAobG9uZylub3cudHZfc2VjLCAobG9uZylub3cudHZfdXNlYywKKwkgICAgICAgKHJlY3Ztc2dfZmxhZ3MgJiBNU0dfRVJSUVVFVUUpID8gImVycm9yIiA6ICJyZWd1bGFyIiwKKwkgICAgICAgcmVzLAorCSAgICAgICBpbmV0X250b2EoZnJvbV9hZGRyLT5zaW5fYWRkciksCisJICAgICAgIG1zZy0+bXNnX2NvbnRyb2xsZW4pOworCWZvciAoY21zZyA9IENNU0dfRklSU1RIRFIobXNnKTsKKwkgICAgIGNtc2c7CisJICAgICBjbXNnID0gQ01TR19OWFRIRFIobXNnLCBjbXNnKSkgeworCQlwcmludGYoIiAgIGNtc2cgbGVuICVkOiAiLCBjbXNnLT5jbXNnX2xlbik7CisJCXN3aXRjaCAoY21zZy0+Y21zZ19sZXZlbCkgeworCQljYXNlIFNPTF9TT0NLRVQ6CisJCQlwcmludGYoIlNPTF9TT0NLRVQgIik7CisJCQlzd2l0Y2ggKGNtc2ctPmNtc2dfdHlwZSkgeworCQkJY2FzZSBTT19USU1FU1RBTVA6IHsKKwkJCQlzdHJ1Y3QgdGltZXZhbCAqc3RhbXAgPQorCQkJCQkoc3RydWN0IHRpbWV2YWwgKilDTVNHX0RBVEEoY21zZyk7CisJCQkJcHJpbnRmKCJTT19USU1FU1RBTVAgJWxkLiUwNmxkIiwKKwkJCQkgICAgICAgKGxvbmcpc3RhbXAtPnR2X3NlYywKKwkJCQkgICAgICAgKGxvbmcpc3RhbXAtPnR2X3VzZWMpOworCQkJCWJyZWFrOworCQkJfQorCQkJY2FzZSBTT19USU1FU1RBTVBOUzogeworCQkJCXN0cnVjdCB0aW1lc3BlYyAqc3RhbXAgPQorCQkJCQkoc3RydWN0IHRpbWVzcGVjICopQ01TR19EQVRBKGNtc2cpOworCQkJCXByaW50ZigiU09fVElNRVNUQU1QTlMgJWxkLiUwOWxkIiwKKwkJCQkgICAgICAgKGxvbmcpc3RhbXAtPnR2X3NlYywKKwkJCQkgICAgICAgKGxvbmcpc3RhbXAtPnR2X25zZWMpOworCQkJCWJyZWFrOworCQkJfQorCQkJY2FzZSBTT19USU1FU1RBTVBJTkc6IHsKKwkJCQlzdHJ1Y3QgdGltZXNwZWMgKnN0YW1wID0KKwkJCQkJKHN0cnVjdCB0aW1lc3BlYyAqKUNNU0dfREFUQShjbXNnKTsKKwkJCQlwcmludGYoIlNPX1RJTUVTVEFNUElORyAiKTsKKwkJCQlwcmludGYoIlNXICVsZC4lMDlsZCAiLAorCQkJCSAgICAgICAobG9uZylzdGFtcC0+dHZfc2VjLAorCQkJCSAgICAgICAobG9uZylzdGFtcC0+dHZfbnNlYyk7CisJCQkJc3RhbXArKzsKKwkJCQlwcmludGYoIkhXIHRyYW5zZm9ybWVkICVsZC4lMDlsZCAiLAorCQkJCSAgICAgICAobG9uZylzdGFtcC0+dHZfc2VjLAorCQkJCSAgICAgICAobG9uZylzdGFtcC0+dHZfbnNlYyk7CisJCQkJc3RhbXArKzsKKwkJCQlwcmludGYoIkhXIHJhdyAlbGQuJTA5bGQiLAorCQkJCSAgICAgICAobG9uZylzdGFtcC0+dHZfc2VjLAorCQkJCSAgICAgICAobG9uZylzdGFtcC0+dHZfbnNlYyk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlkZWZhdWx0OgorCQkJCXByaW50ZigidHlwZSAlZCIsIGNtc2ctPmNtc2dfdHlwZSk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBJUFBST1RPX0lQOgorCQkJcHJpbnRmKCJJUFBST1RPX0lQICIpOworCQkJc3dpdGNoIChjbXNnLT5jbXNnX3R5cGUpIHsKKwkJCWNhc2UgSVBfUkVDVkVSUjogeworCQkJCXN0cnVjdCBzb2NrX2V4dGVuZGVkX2VyciAqZXJyID0KKwkJCQkJKHN0cnVjdCBzb2NrX2V4dGVuZGVkX2VyciAqKUNNU0dfREFUQShjbXNnKTsKKwkJCQlwcmludGYoIklQX1JFQ1ZFUlIgZWVfZXJybm8gJyVzJyBlZV9vcmlnaW4gJWQgPT4gJXMiLAorCQkJCQlzdHJlcnJvcihlcnItPmVlX2Vycm5vKSwKKwkJCQkJZXJyLT5lZV9vcmlnaW4sCisjaWZkZWYgU09fRUVfT1JJR0lOX1RJTUVTVEFNUElORworCQkJCQllcnItPmVlX29yaWdpbiA9PSBTT19FRV9PUklHSU5fVElNRVNUQU1QSU5HID8KKwkJCQkJImJvdW5jZWQgcGFja2V0IiA6ICJ1bmV4cGVjdGVkIG9yaWdpbiIKKyNlbHNlCisJCQkJCSJwcm9iYWJseSBTT19FRV9PUklHSU5fVElNRVNUQU1QSU5HIgorI2VuZGlmCisJCQkJCSk7CisJCQkJaWYgKHJlcyA8IHNpemVvZihzeW5jKSkKKwkJCQkJcHJpbnRmKCIgPT4gdHJ1bmNhdGVkIGRhdGE/ISIpOworCQkJCWVsc2UgaWYgKCFtZW1jbXAoc3luYywgZGF0YSArIHJlcyAtIHNpemVvZihzeW5jKSwKKwkJCQkJCQlzaXplb2Yoc3luYykpKQorCQkJCQlwcmludGYoIiA9PiBHT1QgT1VSIERBVEEgQkFDSyAoSFVSUkFZISkiKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWNhc2UgSVBfUEtUSU5GTzogeworCQkJCXN0cnVjdCBpbl9wa3RpbmZvICpwa3RpbmZvID0KKwkJCQkJKHN0cnVjdCBpbl9wa3RpbmZvICopQ01TR19EQVRBKGNtc2cpOworCQkJCXByaW50ZigiSVBfUEtUSU5GTyBpbnRlcmZhY2UgaW5kZXggJXUiLAorCQkJCQlwa3RpbmZvLT5pcGlfaWZpbmRleCk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlkZWZhdWx0OgorCQkJCXByaW50ZigidHlwZSAlZCIsIGNtc2ctPmNtc2dfdHlwZSk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByaW50ZigibGV2ZWwgJWQgdHlwZSAlZCIsCisJCQkJY21zZy0+Y21zZ19sZXZlbCwKKwkJCQljbXNnLT5jbXNnX3R5cGUpOworCQkJYnJlYWs7CisJCX0KKwkJcHJpbnRmKCJcbiIpOworCX0KKworCWlmIChzaW9jZ3N0YW1wKSB7CisJCWlmIChpb2N0bChzb2NrLCBTSU9DR1NUQU1QLCAmdHYpKQorCQkJcHJpbnRmKCIgICAlczogJXNcbiIsICJTSU9DR1NUQU1QIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZWxzZQorCQkJcHJpbnRmKCJTSU9DR1NUQU1QICVsZC4lMDZsZFxuIiwKKwkJCSAgICAgICAobG9uZyl0di50dl9zZWMsCisJCQkgICAgICAgKGxvbmcpdHYudHZfdXNlYyk7CisJfQorCWlmIChzaW9jZ3N0YW1wbnMpIHsKKwkJaWYgKGlvY3RsKHNvY2ssIFNJT0NHU1RBTVBOUywgJnRzKSkKKwkJCXByaW50ZigiICAgJXM6ICVzXG4iLCAiU0lPQ0dTVEFNUE5TIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZWxzZQorCQkJcHJpbnRmKCJTSU9DR1NUQU1QTlMgJWxkLiUwOWxkXG4iLAorCQkJICAgICAgIChsb25nKXRzLnR2X3NlYywKKwkJCSAgICAgICAobG9uZyl0cy50dl9uc2VjKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJlY3ZwYWNrZXQoaW50IHNvY2ssIGludCByZWN2bXNnX2ZsYWdzLAorCQkgICAgICAgaW50IHNpb2Nnc3RhbXAsIGludCBzaW9jZ3N0YW1wbnMpCit7CisJY2hhciBkYXRhWzI1Nl07CisJc3RydWN0IG1zZ2hkciBtc2c7CisJc3RydWN0IGlvdmVjIGVudHJ5OworCXN0cnVjdCBzb2NrYWRkcl9pbiBmcm9tX2FkZHI7CisJc3RydWN0IHsKKwkJc3RydWN0IGNtc2doZHIgY207CisJCWNoYXIgY29udHJvbFs1MTJdOworCX0gY29udHJvbDsKKwlpbnQgcmVzOworCisJbWVtc2V0KCZtc2csIDAsIHNpemVvZihtc2cpKTsKKwltc2cubXNnX2lvdiA9ICZlbnRyeTsKKwltc2cubXNnX2lvdmxlbiA9IDE7CisJZW50cnkuaW92X2Jhc2UgPSBkYXRhOworCWVudHJ5Lmlvdl9sZW4gPSBzaXplb2YoZGF0YSk7CisJbXNnLm1zZ19uYW1lID0gKGNhZGRyX3QpJmZyb21fYWRkcjsKKwltc2cubXNnX25hbWVsZW4gPSBzaXplb2YoZnJvbV9hZGRyKTsKKwltc2cubXNnX2NvbnRyb2wgPSAmY29udHJvbDsKKwltc2cubXNnX2NvbnRyb2xsZW4gPSBzaXplb2YoY29udHJvbCk7CisKKwlyZXMgPSByZWN2bXNnKHNvY2ssICZtc2csIHJlY3Ztc2dfZmxhZ3N8TVNHX0RPTlRXQUlUKTsKKwlpZiAocmVzIDwgMCkgeworCQlwcmludGYoIiVzICVzOiAlc1xuIiwKKwkJICAgICAgICJyZWN2bXNnIiwKKwkJICAgICAgIChyZWN2bXNnX2ZsYWdzICYgTVNHX0VSUlFVRVVFKSA/ICJlcnJvciIgOiAicmVndWxhciIsCisJCSAgICAgICBzdHJlcnJvcihlcnJubykpOworCX0gZWxzZSB7CisJCXByaW50cGFja2V0KCZtc2csIHJlcywgZGF0YSwKKwkJCSAgICBzb2NrLCByZWN2bXNnX2ZsYWdzLAorCQkJICAgIHNpb2Nnc3RhbXAsIHNpb2Nnc3RhbXBucyk7CisJfQorfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJaW50IHNvX3RpbWVzdGFtcGluZ19mbGFncyA9IDA7CisJaW50IHNvX3RpbWVzdGFtcCA9IDA7CisJaW50IHNvX3RpbWVzdGFtcG5zID0gMDsKKwlpbnQgc2lvY2dzdGFtcCA9IDA7CisJaW50IHNpb2Nnc3RhbXBucyA9IDA7CisJaW50IGlwX211bHRpY2FzdF9sb29wID0gMDsKKwljaGFyICppbnRlcmZhY2U7CisJaW50IGk7CisJaW50IGVuYWJsZWQgPSAxOworCWludCBzb2NrOworCXN0cnVjdCBpZnJlcSBkZXZpY2U7CisJc3RydWN0IGlmcmVxIGh3dHN0YW1wOworCXN0cnVjdCBod3RzdGFtcF9jb25maWcgaHdjb25maWcsIGh3Y29uZmlnX3JlcXVlc3RlZDsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkcjsKKwlzdHJ1Y3QgaXBfbXJlcSBpbXI7CisJc3RydWN0IGluX2FkZHIgaWFkZHI7CisJaW50IHZhbDsKKwlzb2NrbGVuX3QgbGVuOworCXN0cnVjdCB0aW1ldmFsIG5leHQ7CisKKwlpZiAoYXJnYyA8IDIpCisJCXVzYWdlKDApOworCWludGVyZmFjZSA9IGFyZ3ZbMV07CisKKwlmb3IgKGkgPSAyOyBpIDwgYXJnYzsgaSsrKSB7CisJCWlmICghc3RyY2FzZWNtcChhcmd2W2ldLCAiU09fVElNRVNUQU1QIikpCisJCQlzb190aW1lc3RhbXAgPSAxOworCQllbHNlIGlmICghc3RyY2FzZWNtcChhcmd2W2ldLCAiU09fVElNRVNUQU1QTlMiKSkKKwkJCXNvX3RpbWVzdGFtcG5zID0gMTsKKwkJZWxzZSBpZiAoIXN0cmNhc2VjbXAoYXJndltpXSwgIlNJT0NHU1RBTVAiKSkKKwkJCXNpb2Nnc3RhbXAgPSAxOworCQllbHNlIGlmICghc3RyY2FzZWNtcChhcmd2W2ldLCAiU0lPQ0dTVEFNUE5TIikpCisJCQlzaW9jZ3N0YW1wbnMgPSAxOworCQllbHNlIGlmICghc3RyY2FzZWNtcChhcmd2W2ldLCAiSVBfTVVMVElDQVNUX0xPT1AiKSkKKwkJCWlwX211bHRpY2FzdF9sb29wID0gMTsKKwkJZWxzZSBpZiAoIXN0cmNhc2VjbXAoYXJndltpXSwgIlNPRl9USU1FU1RBTVBJTkdfVFhfSEFSRFdBUkUiKSkKKwkJCXNvX3RpbWVzdGFtcGluZ19mbGFncyB8PSBTT0ZfVElNRVNUQU1QSU5HX1RYX0hBUkRXQVJFOworCQllbHNlIGlmICghc3RyY2FzZWNtcChhcmd2W2ldLCAiU09GX1RJTUVTVEFNUElOR19UWF9TT0ZUV0FSRSIpKQorCQkJc29fdGltZXN0YW1waW5nX2ZsYWdzIHw9IFNPRl9USU1FU1RBTVBJTkdfVFhfU09GVFdBUkU7CisJCWVsc2UgaWYgKCFzdHJjYXNlY21wKGFyZ3ZbaV0sICJTT0ZfVElNRVNUQU1QSU5HX1JYX0hBUkRXQVJFIikpCisJCQlzb190aW1lc3RhbXBpbmdfZmxhZ3MgfD0gU09GX1RJTUVTVEFNUElOR19SWF9IQVJEV0FSRTsKKwkJZWxzZSBpZiAoIXN0cmNhc2VjbXAoYXJndltpXSwgIlNPRl9USU1FU1RBTVBJTkdfUlhfU09GVFdBUkUiKSkKKwkJCXNvX3RpbWVzdGFtcGluZ19mbGFncyB8PSBTT0ZfVElNRVNUQU1QSU5HX1JYX1NPRlRXQVJFOworCQllbHNlIGlmICghc3RyY2FzZWNtcChhcmd2W2ldLCAiU09GX1RJTUVTVEFNUElOR19TT0ZUV0FSRSIpKQorCQkJc29fdGltZXN0YW1waW5nX2ZsYWdzIHw9IFNPRl9USU1FU1RBTVBJTkdfU09GVFdBUkU7CisJCWVsc2UgaWYgKCFzdHJjYXNlY21wKGFyZ3ZbaV0sICJTT0ZfVElNRVNUQU1QSU5HX1NZU19IQVJEV0FSRSIpKQorCQkJc29fdGltZXN0YW1waW5nX2ZsYWdzIHw9IFNPRl9USU1FU1RBTVBJTkdfU1lTX0hBUkRXQVJFOworCQllbHNlIGlmICghc3RyY2FzZWNtcChhcmd2W2ldLCAiU09GX1RJTUVTVEFNUElOR19SQVdfSEFSRFdBUkUiKSkKKwkJCXNvX3RpbWVzdGFtcGluZ19mbGFncyB8PSBTT0ZfVElNRVNUQU1QSU5HX1JBV19IQVJEV0FSRTsKKwkJZWxzZQorCQkJdXNhZ2UoYXJndltpXSk7CisJfQorCisJc29jayA9IHNvY2tldChQRl9JTkVULCBTT0NLX0RHUkFNLCBJUFBST1RPX1VEUCk7CisJaWYgKHNvY2tldCA8IDApCisJCWJhaWwoInNvY2tldCIpOworCisJbWVtc2V0KCZkZXZpY2UsIDAsIHNpemVvZihkZXZpY2UpKTsKKwlzdHJuY3B5KGRldmljZS5pZnJfbmFtZSwgaW50ZXJmYWNlLCBzaXplb2YoZGV2aWNlLmlmcl9uYW1lKSk7CisJaWYgKGlvY3RsKHNvY2ssIFNJT0NHSUZBRERSLCAmZGV2aWNlKSA8IDApCisJCWJhaWwoImdldHRpbmcgaW50ZXJmYWNlIElQIGFkZHJlc3MiKTsKKworCW1lbXNldCgmaHd0c3RhbXAsIDAsIHNpemVvZihod3RzdGFtcCkpOworCXN0cm5jcHkoaHd0c3RhbXAuaWZyX25hbWUsIGludGVyZmFjZSwgc2l6ZW9mKGh3dHN0YW1wLmlmcl9uYW1lKSk7CisJaHd0c3RhbXAuaWZyX2RhdGEgPSAodm9pZCAqKSZod2NvbmZpZzsKKwltZW1zZXQoJmh3Y29uZmlnLCAwLCBzaXplb2YoJmh3Y29uZmlnKSk7CisJaHdjb25maWcudHhfdHlwZSA9CisJCShzb190aW1lc3RhbXBpbmdfZmxhZ3MgJiBTT0ZfVElNRVNUQU1QSU5HX1RYX0hBUkRXQVJFKSA/CisJCUhXVFNUQU1QX1RYX09OIDogSFdUU1RBTVBfVFhfT0ZGOworCWh3Y29uZmlnLnJ4X2ZpbHRlciA9CisJCShzb190aW1lc3RhbXBpbmdfZmxhZ3MgJiBTT0ZfVElNRVNUQU1QSU5HX1JYX0hBUkRXQVJFKSA/CisJCUhXVFNUQU1QX0ZJTFRFUl9QVFBfVjFfTDRfU1lOQyA6IEhXVFNUQU1QX0ZJTFRFUl9OT05FOworCWh3Y29uZmlnX3JlcXVlc3RlZCA9IGh3Y29uZmlnOworCWlmIChpb2N0bChzb2NrLCBTSU9DU0hXVFNUQU1QLCAmaHd0c3RhbXApIDwgMCkgeworCQlpZiAoKGVycm5vID09IEVJTlZBTCB8fCBlcnJubyA9PSBFTk9UU1VQKSAmJgorCQkgICAgaHdjb25maWdfcmVxdWVzdGVkLnR4X3R5cGUgPT0gSFdUU1RBTVBfVFhfT0ZGICYmCisJCSAgICBod2NvbmZpZ19yZXF1ZXN0ZWQucnhfZmlsdGVyID09IEhXVFNUQU1QX0ZJTFRFUl9OT05FKQorCQkJcHJpbnRmKCJTSU9DU0hXVFNUQU1QOiBkaXNhYmxpbmcgaGFyZHdhcmUgdGltZSBzdGFtcGluZyBub3QgcG9zc2libGVcbiIpOworCQllbHNlCisJCQliYWlsKCJTSU9DU0hXVFNUQU1QIik7CisJfQorCXByaW50ZigiU0lPQ1NIV1RTVEFNUDogdHhfdHlwZSAlZCByZXF1ZXN0ZWQsIGdvdCAlZDsgcnhfZmlsdGVyICVkIHJlcXVlc3RlZCwgZ290ICVkXG4iLAorCSAgICAgICBod2NvbmZpZ19yZXF1ZXN0ZWQudHhfdHlwZSwgaHdjb25maWcudHhfdHlwZSwKKwkgICAgICAgaHdjb25maWdfcmVxdWVzdGVkLnJ4X2ZpbHRlciwgaHdjb25maWcucnhfZmlsdGVyKTsKKworCS8qIGJpbmQgdG8gUFRQIHBvcnQgKi8KKwlhZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworCWFkZHIuc2luX2FkZHIuc19hZGRyID0gaHRvbmwoSU5BRERSX0FOWSk7CisJYWRkci5zaW5fcG9ydCA9IGh0b25zKDMxOSAvKiBQVFAgZXZlbnQgcG9ydCAqLyk7CisJaWYgKGJpbmQoc29jaywKKwkJIChzdHJ1Y3Qgc29ja2FkZHIgKikmYWRkciwKKwkJIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSA8IDApCisJCWJhaWwoImJpbmQiKTsKKworCS8qIHNldCBtdWx0aWNhc3QgZ3JvdXAgZm9yIG91dGdvaW5nIHBhY2tldHMgKi8KKwlpbmV0X2F0b24oIjIyNC4wLjEuMTMwIiwgJmlhZGRyKTsgLyogYWx0ZXJuYXRlIFBUUCBkb21haW4gMSAqLworCWFkZHIuc2luX2FkZHIgPSBpYWRkcjsKKwlpbXIuaW1yX211bHRpYWRkci5zX2FkZHIgPSBpYWRkci5zX2FkZHI7CisJaW1yLmltcl9pbnRlcmZhY2Uuc19hZGRyID0KKwkJKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmZGV2aWNlLmlmcl9hZGRyKS0+c2luX2FkZHIuc19hZGRyOworCWlmIChzZXRzb2Nrb3B0KHNvY2ssIElQUFJPVE9fSVAsIElQX01VTFRJQ0FTVF9JRiwKKwkJICAgICAgICZpbXIuaW1yX2ludGVyZmFjZS5zX2FkZHIsIHNpemVvZihzdHJ1Y3QgaW5fYWRkcikpIDwgMCkKKwkJYmFpbCgic2V0IG11bHRpY2FzdCIpOworCisJLyogam9pbiBtdWx0aWNhc3QgZ3JvdXAsIGxvb3Agb3VyIG93biBwYWNrZXQgKi8KKwlpZiAoc2V0c29ja29wdChzb2NrLCBJUFBST1RPX0lQLCBJUF9BRERfTUVNQkVSU0hJUCwKKwkJICAgICAgICZpbXIsIHNpemVvZihzdHJ1Y3QgaXBfbXJlcSkpIDwgMCkKKwkJYmFpbCgiam9pbiBtdWx0aWNhc3QgZ3JvdXAiKTsKKworCWlmIChzZXRzb2Nrb3B0KHNvY2ssIElQUFJPVE9fSVAsIElQX01VTFRJQ0FTVF9MT09QLAorCQkgICAgICAgJmlwX211bHRpY2FzdF9sb29wLCBzaXplb2YoZW5hYmxlZCkpIDwgMCkgeworCQliYWlsKCJsb29wIG11bHRpY2FzdCIpOworCX0KKworCS8qIHNldCBzb2NrZXQgb3B0aW9ucyBmb3IgdGltZSBzdGFtcGluZyAqLworCWlmIChzb190aW1lc3RhbXAgJiYKKwkJc2V0c29ja29wdChzb2NrLCBTT0xfU09DS0VULCBTT19USU1FU1RBTVAsCisJCQkgICAmZW5hYmxlZCwgc2l6ZW9mKGVuYWJsZWQpKSA8IDApCisJCWJhaWwoInNldHNvY2tvcHQgU09fVElNRVNUQU1QIik7CisKKwlpZiAoc29fdGltZXN0YW1wbnMgJiYKKwkJc2V0c29ja29wdChzb2NrLCBTT0xfU09DS0VULCBTT19USU1FU1RBTVBOUywKKwkJCSAgICZlbmFibGVkLCBzaXplb2YoZW5hYmxlZCkpIDwgMCkKKwkJYmFpbCgic2V0c29ja29wdCBTT19USU1FU1RBTVBOUyIpOworCisJaWYgKHNvX3RpbWVzdGFtcGluZ19mbGFncyAmJgorCQlzZXRzb2Nrb3B0KHNvY2ssIFNPTF9TT0NLRVQsIFNPX1RJTUVTVEFNUElORywKKwkJCSAgICZzb190aW1lc3RhbXBpbmdfZmxhZ3MsCisJCQkgICBzaXplb2Yoc29fdGltZXN0YW1waW5nX2ZsYWdzKSkgPCAwKQorCQliYWlsKCJzZXRzb2Nrb3B0IFNPX1RJTUVTVEFNUElORyIpOworCisJLyogcmVxdWVzdCBJUF9QS1RJTkZPIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgKi8KKwlpZiAoc2V0c29ja29wdChzb2NrLCBTT0xfSVAsIElQX1BLVElORk8sCisJCSAgICAgICAmZW5hYmxlZCwgc2l6ZW9mKGVuYWJsZWQpKSA8IDApCisJCXByaW50ZigiJXM6ICVzXG4iLCAic2V0c29ja29wdCBJUF9QS1RJTkZPIiwgc3RyZXJyb3IoZXJybm8pKTsKKworCS8qIHZlcmlmeSBzb2NrZXQgb3B0aW9ucyAqLworCWxlbiA9IHNpemVvZih2YWwpOworCWlmIChnZXRzb2Nrb3B0KHNvY2ssIFNPTF9TT0NLRVQsIFNPX1RJTUVTVEFNUCwgJnZhbCwgJmxlbikgPCAwKQorCQlwcmludGYoIiVzOiAlc1xuIiwgImdldHNvY2tvcHQgU09fVElNRVNUQU1QIiwgc3RyZXJyb3IoZXJybm8pKTsKKwllbHNlCisJCXByaW50ZigiU09fVElNRVNUQU1QICVkXG4iLCB2YWwpOworCisJaWYgKGdldHNvY2tvcHQoc29jaywgU09MX1NPQ0tFVCwgU09fVElNRVNUQU1QTlMsICZ2YWwsICZsZW4pIDwgMCkKKwkJcHJpbnRmKCIlczogJXNcbiIsICJnZXRzb2Nrb3B0IFNPX1RJTUVTVEFNUE5TIiwKKwkJICAgICAgIHN0cmVycm9yKGVycm5vKSk7CisJZWxzZQorCQlwcmludGYoIlNPX1RJTUVTVEFNUE5TICVkXG4iLCB2YWwpOworCisJaWYgKGdldHNvY2tvcHQoc29jaywgU09MX1NPQ0tFVCwgU09fVElNRVNUQU1QSU5HLCAmdmFsLCAmbGVuKSA8IDApIHsKKwkJcHJpbnRmKCIlczogJXNcbiIsICJnZXRzb2Nrb3B0IFNPX1RJTUVTVEFNUElORyIsCisJCSAgICAgICBzdHJlcnJvcihlcnJubykpOworCX0gZWxzZSB7CisJCXByaW50ZigiU09fVElNRVNUQU1QSU5HICVkXG4iLCB2YWwpOworCQlpZiAodmFsICE9IHNvX3RpbWVzdGFtcGluZ19mbGFncykKKwkJCXByaW50ZigiICAgbm90IHRoZSBleHBlY3RlZCB2YWx1ZSAlZFxuIiwKKwkJCSAgICAgICBzb190aW1lc3RhbXBpbmdfZmxhZ3MpOworCX0KKworCS8qIHNlbmQgcGFja2V0cyBmb3JldmVyIGV2ZXJ5IGZpdmUgc2Vjb25kcyAqLworCWdldHRpbWVvZmRheSgmbmV4dCwgMCk7CisJbmV4dC50dl9zZWMgPSAobmV4dC50dl9zZWMgKyAxKSAvIDUgKiA1OworCW5leHQudHZfdXNlYyA9IDA7CisJd2hpbGUgKDEpIHsKKwkJc3RydWN0IHRpbWV2YWwgbm93OworCQlzdHJ1Y3QgdGltZXZhbCBkZWx0YTsKKwkJbG9uZyBkZWx0YV91czsKKwkJaW50IHJlczsKKwkJZmRfc2V0IHJlYWRmcywgZXJyb3JmczsKKworCQlnZXR0aW1lb2ZkYXkoJm5vdywgMCk7CisJCWRlbHRhX3VzID0gKGxvbmcpKG5leHQudHZfc2VjIC0gbm93LnR2X3NlYykgKiAxMDAwMDAwICsKKwkJCShsb25nKShuZXh0LnR2X3VzZWMgLSBub3cudHZfdXNlYyk7CisJCWlmIChkZWx0YV91cyA+IDApIHsKKwkJCS8qIGNvbnRpbnVlIHdhaXRpbmcgZm9yIHRpbWVvdXQgb3IgZGF0YSAqLworCQkJZGVsdGEudHZfc2VjID0gZGVsdGFfdXMgLyAxMDAwMDAwOworCQkJZGVsdGEudHZfdXNlYyA9IGRlbHRhX3VzICUgMTAwMDAwMDsKKworCQkJRkRfWkVSTygmcmVhZGZzKTsKKwkJCUZEX1pFUk8oJmVycm9yZnMpOworCQkJRkRfU0VUKHNvY2ssICZyZWFkZnMpOworCQkJRkRfU0VUKHNvY2ssICZlcnJvcmZzKTsKKwkJCXByaW50ZigiJWxkLiUwNmxkOiBzZWxlY3QgJWxkdXNcbiIsCisJCQkgICAgICAgKGxvbmcpbm93LnR2X3NlYywgKGxvbmcpbm93LnR2X3VzZWMsCisJCQkgICAgICAgZGVsdGFfdXMpOworCQkJcmVzID0gc2VsZWN0KHNvY2sgKyAxLCAmcmVhZGZzLCAwLCAmZXJyb3JmcywgJmRlbHRhKTsKKwkJCWdldHRpbWVvZmRheSgmbm93LCAwKTsKKwkJCXByaW50ZigiJWxkLiUwNmxkOiBzZWxlY3QgcmV0dXJuZWQ6ICVkLCAlc1xuIiwKKwkJCSAgICAgICAobG9uZylub3cudHZfc2VjLCAobG9uZylub3cudHZfdXNlYywKKwkJCSAgICAgICByZXMsCisJCQkgICAgICAgcmVzIDwgMCA/IHN0cmVycm9yKGVycm5vKSA6ICJzdWNjZXNzIik7CisJCQlpZiAocmVzID4gMCkgeworCQkJCWlmIChGRF9JU1NFVChzb2NrLCAmcmVhZGZzKSkKKwkJCQkJcHJpbnRmKCJyZWFkeSBmb3IgcmVhZGluZ1xuIik7CisJCQkJaWYgKEZEX0lTU0VUKHNvY2ssICZlcnJvcmZzKSkKKwkJCQkJcHJpbnRmKCJoYXMgZXJyb3JcbiIpOworCQkJCXJlY3ZwYWNrZXQoc29jaywgMCwKKwkJCQkJICAgc2lvY2dzdGFtcCwKKwkJCQkJICAgc2lvY2dzdGFtcG5zKTsKKwkJCQlyZWN2cGFja2V0KHNvY2ssIE1TR19FUlJRVUVVRSwKKwkJCQkJICAgc2lvY2dzdGFtcCwKKwkJCQkJICAgc2lvY2dzdGFtcG5zKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qIHdyaXRlIG9uZSBwYWNrZXQgKi8KKwkJCXNlbmRwYWNrZXQoc29jaywKKwkJCQkgICAoc3RydWN0IHNvY2thZGRyICopJmFkZHIsCisJCQkJICAgc2l6ZW9mKGFkZHIpKTsKKwkJCW5leHQudHZfc2VjICs9IDU7CisJCQljb250aW51ZTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvdHNlYy50eHQgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC90c2VjLnR4dAppbmRleCA3ZmE0YjI3Li5lZGI3YWUxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC90c2VjLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC90c2VjLnR4dApAQCAtNTYsNiArNTYsMTIgQEAKICAgICBoYXJkd2FyZS4KICAgLSBmc2wsbWFnaWMtcGFja2V0IDogSWYgcHJlc2VudCwgaW5kaWNhdGVzIHRoYXQgdGhlIGhhcmR3YXJlIHN1cHBvcnRzCiAgICAgd2FraW5nIHVwIHZpYSBtYWdpYyBwYWNrZXQuCisgIC0gYmQtc3Rhc2ggOiBJZiBwcmVzZW50LCBpbmRpY2F0ZXMgdGhhdCB0aGUgaGFyZHdhcmUgc3VwcG9ydHMgc3Rhc2hpbmcKKyAgICBidWZmZXIgZGVzY3JpcHRvcnMgaW4gdGhlIEwyLgorICAtIHJ4LXN0YXNoLWxlbiA6IERlbm90ZXMgdGhlIG51bWJlciBvZiBieXRlcyBvZiBhIHJlY2VpdmVkIGJ1ZmZlciB0byBzdGFzaAorICAgIGluIHRoZSBMMi4KKyAgLSByeC1zdGFzaC1pZHggOiBEZW5vdGVzIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgYnl0ZSBmcm9tIHRoZSByZWNlaXZlZAorICAgIGJ1ZmZlciB0byBzdGFzaCBpbiB0aGUgTDIuCiAKIEV4YW1wbGU6CiAJZXRoZXJuZXRAMjQwMDAgewpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY2hlZHVsZXIvMDAtSU5ERVggYi9Eb2N1bWVudGF0aW9uL3NjaGVkdWxlci8wMC1JTkRFWAppbmRleCBhYWJjYzNhLi4zYzAwYzljIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3NjaGVkdWxlci8wMC1JTkRFWAorKysgYi9Eb2N1bWVudGF0aW9uL3NjaGVkdWxlci8wMC1JTkRFWApAQCAtMiw4ICsyLDYgQEAKIAktIHRoaXMgZmlsZS4KIHNjaGVkLWFyY2gudHh0CiAJLSBDUFUgU2NoZWR1bGVyIGltcGxlbWVudGF0aW9uIGhpbnRzIGZvciBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgY29kZS4KLXNjaGVkLWNvZGluZy50eHQKLQktIHJlZmVyZW5jZSBmb3IgdmFyaW91cyBzY2hlZHVsZXItcmVsYXRlZCBtZXRob2RzIGluIHRoZSBPKDEpIHNjaGVkdWxlci4KIHNjaGVkLWRlc2lnbi1DRlMudHh0CiAJLSBnb2FscywgZGVzaWduIGFuZCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQ29tcGxldGUgRmFpciBTY2hlZHVsZXIuCiBzY2hlZC1kb21haW5zLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY2hlZHVsZXIvc2NoZWQtY29kaW5nLnR4dCBiL0RvY3VtZW50YXRpb24vc2NoZWR1bGVyL3NjaGVkLWNvZGluZy50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiZDhkYjcuLjAwMDAwMDAKLS0tIGEvRG9jdW1lbnRhdGlvbi9zY2hlZHVsZXIvc2NoZWQtY29kaW5nLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDEyNiArMCwwIEBACi0gICAgIFJlZmVyZW5jZSBmb3IgdmFyaW91cyBzY2hlZHVsZXItcmVsYXRlZCBtZXRob2RzIGluIHRoZSBPKDEpIHNjaGVkdWxlcgotCQlSb2JlcnQgTG92ZSA8cm1sQHRlY2g5Lm5ldD4sIE1vbnRhVmlzdGEgU29mdHdhcmUKLQotCi1Ob3RlIG1vc3Qgb2YgdGhlc2UgbWV0aG9kcyBhcmUgbG9jYWwgdG8ga2VybmVsL3NjaGVkLmMgLSB0aGlzIGlzIGJ5IGRlc2lnbi4KLVRoZSBzY2hlZHVsZXIgaXMgbWVhbnQgdG8gYmUgc2VsZi1jb250YWluZWQgYW5kIGFic3RyYWN0ZWQgYXdheS4gIFRoaXMgZG9jdW1lbnQKLWlzIHByaW1hcmlseSBmb3IgdW5kZXJzdGFuZGluZyB0aGUgc2NoZWR1bGVyLCBub3QgaW50ZXJmYWNpbmcgdG8gaXQuICBTb21lIG9mCi10aGUgZGlzY3Vzc2VkIGludGVyZmFjZXMsIGhvd2V2ZXIsIGFyZSBnZW5lcmFsIHByb2Nlc3Mvc2NoZWR1bGluZyBtZXRob2RzLgotVGhleSBhcmUgdHlwaWNhbGx5IGRlZmluZWQgaW4gaW5jbHVkZS9saW51eC9zY2hlZC5oLgotCi0KLU1haW4gU2NoZWR1bGluZyBNZXRob2RzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi12b2lkIGxvYWRfYmFsYW5jZShydW5xdWV1ZV90ICp0aGlzX3JxLCBpbnQgaWRsZSkKLQlBdHRlbXB0cyB0byBwdWxsIHRhc2tzIGZyb20gb25lIGNwdSB0byBhbm90aGVyIHRvIGJhbGFuY2UgY3B1IHVzYWdlLAotCWlmIG5lZWRlZC4gIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBleHBsaWNpdGx5IGlmIHRoZSBydW5xdWV1ZXMgYXJlCi0JaW1iYWxhbmNlZCBvciBwZXJpb2RpY2FsbHkgYnkgdGhlIHRpbWVyIHRpY2suICBQcmlvciB0byBjYWxsaW5nLAotCXRoZSBjdXJyZW50IHJ1bnF1ZXVlIG11c3QgYmUgbG9ja2VkIGFuZCBpbnRlcnJ1cHRzIGRpc2FibGVkLgotCi12b2lkIHNjaGVkdWxlKCkKLQlUaGUgbWFpbiBzY2hlZHVsaW5nIGZ1bmN0aW9uLiAgVXBvbiByZXR1cm4sIHRoZSBoaWdoZXN0IHByaW9yaXR5Ci0JcHJvY2VzcyB3aWxsIGJlIGFjdGl2ZS4KLQotCi1Mb2NraW5nCi0tLS0tLS0tCi0KLUVhY2ggcnVucXVldWUgaGFzIGl0cyBvd24gbG9jaywgcnEtPmxvY2suICBXaGVuIG11bHRpcGxlIHJ1bnF1ZXVlcyBuZWVkCi10byBiZSBsb2NrZWQsIGxvY2sgYWNxdWlyZXMgbXVzdCBiZSBvcmRlcmVkIGJ5IGFzY2VuZGluZyAmcnVucXVldWUgdmFsdWUuCi0KLUEgc3BlY2lmaWMgcnVucXVldWUgaXMgbG9ja2VkIHZpYQotCi0JdGFza19ycV9sb2NrKHRhc2tfdCBwaWQsIHVuc2lnbmVkIGxvbmcgKmZsYWdzKQotCi13aGljaCBkaXNhYmxlcyBwcmVlbXB0aW9uLCBkaXNhYmxlcyBpbnRlcnJ1cHRzLCBhbmQgbG9ja3MgdGhlIHJ1bnF1ZXVlIHBpZCBpcwotcnVubmluZyBvbi4gIExpa2V3aXNlLAotCi0JdGFza19ycV91bmxvY2sodGFza190IHBpZCwgdW5zaWduZWQgbG9uZyAqZmxhZ3MpCi0KLXVubG9ja3MgdGhlIHJ1bnF1ZXVlIHBpZCBpcyBydW5uaW5nIG9uLCByZXN0b3JlcyBpbnRlcnJ1cHRzIHRvIHRoZWlyIHByZXZpb3VzCi1zdGF0ZSwgYW5kIHJlZW5hYmxlcyBwcmVlbXB0aW9uLgotCi1UaGUgcm91dGluZXMKLQotCWRvdWJsZV9ycV9sb2NrKHJ1bnF1ZXVlX3QgKnJxMSwgcnVucXVldWVfdCAqcnEyKQotCi1hbmQKLQotCWRvdWJsZV9ycV91bmxvY2socnVucXVldWVfdCAqcnExLCBydW5xdWV1ZV90ICpycTIpCi0KLXNhZmVseSBsb2NrIGFuZCB1bmxvY2ssIHJlc3BlY3RpdmVseSwgdGhlIHR3byBzcGVjaWZpZWQgcnVucXVldWVzLiAgVGhleSBkbwotbm90LCBob3dldmVyLCBkaXNhYmxlIGFuZCByZXN0b3JlIGludGVycnVwdHMuICBVc2VycyBhcmUgcmVxdWlyZWQgdG8gZG8gc28KLW1hbnVhbGx5IGJlZm9yZSBhbmQgYWZ0ZXIgY2FsbHMuCi0KLQotVmFsdWVzCi0tLS0tLS0KLQotTUFYX1BSSU8KLQlUaGUgbWF4aW11bSBwcmlvcml0eSBvZiB0aGUgc3lzdGVtLCBzdG9yZWQgaW4gdGhlIHRhc2sgYXMgdGFzay0+cHJpby4KLQlMb3dlciBwcmlvcml0aWVzIGFyZSBoaWdoZXIuICBOb3JtYWwgKG5vbi1SVCkgcHJpb3JpdGllcyByYW5nZSBmcm9tCi0JTUFYX1JUX1BSSU8gdG8gKE1BWF9QUklPIC0gMSkuCi1NQVhfUlRfUFJJTwotCVRoZSBtYXhpbXVtIHJlYWwtdGltZSBwcmlvcml0eSBvZiB0aGUgc3lzdGVtLiAgVmFsaWQgUlQgcHJpb3JpdGllcwotCXJhbmdlIGZyb20gMCB0byAoTUFYX1JUX1BSSU8gLSAxKS4KLU1BWF9VU0VSX1JUX1BSSU8KLQlUaGUgbWF4aW11bSByZWFsLXRpbWUgcHJpb3JpdHkgdGhhdCBpcyBleHBvcnRlZCB0byB1c2VyLXNwYWNlLiAgU2hvdWxkCi0JYWx3YXlzIGJlIGVxdWFsIHRvIG9yIGxlc3MgdGhhbiBNQVhfUlRfUFJJTy4gIFNldHRpbmcgaXQgbGVzcyBhbGxvd3MKLQlrZXJuZWwgdGhyZWFkcyB0byBoYXZlIGhpZ2hlciBwcmlvcml0aWVzIHRoYW4gYW55IHVzZXItc3BhY2UgdGFzay4KLU1JTl9USU1FU0xJQ0UKLU1BWF9USU1FU0xJQ0UKLQlSZXNwZWN0aXZlbHksIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIHRpbWVzbGljZXMgKHF1YW50YSkgb2YgYSBwcm9jZXNzLgotCi1EYXRhCi0tLS0tCi0KLXN0cnVjdCBydW5xdWV1ZQotCVRoZSBtYWluIHBlci1DUFUgcnVucXVldWUgZGF0YSBzdHJ1Y3R1cmUuCi1zdHJ1Y3QgdGFza19zdHJ1Y3QKLQlUaGUgbWFpbiBwZXItcHJvY2VzcyBkYXRhIHN0cnVjdHVyZS4KLQotCi1HZW5lcmFsIE1ldGhvZHMKLS0tLS0tLS0tLS0tLS0tLQotCi1jcHVfcnEoY3B1KQotCVJldHVybnMgdGhlIHJ1bnF1ZXVlIG9mIHRoZSBzcGVjaWZpZWQgY3B1LgotdGhpc19ycSgpCi0JUmV0dXJucyB0aGUgcnVucXVldWUgb2YgdGhlIGN1cnJlbnQgY3B1LgotdGFza19ycShwaWQpCi0JUmV0dXJucyB0aGUgcnVucXVldWUgd2hpY2ggaG9sZHMgdGhlIHNwZWNpZmllZCBwaWQuCi1jcHVfY3VycihjcHUpCi0JUmV0dXJucyB0aGUgdGFzayBjdXJyZW50bHkgcnVubmluZyBvbiB0aGUgZ2l2ZW4gY3B1LgotcnRfdGFzayhwaWQpCi0JUmV0dXJucyB0cnVlIGlmIHBpZCBpcyByZWFsLXRpbWUsIGZhbHNlIGlmIG5vdC4KLQotCi1Qcm9jZXNzIENvbnRyb2wgTWV0aG9kcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotdm9pZCBzZXRfdXNlcl9uaWNlKHRhc2tfdCAqcCwgbG9uZyBuaWNlKQotCVNldHMgdGhlICJuaWNlIiB2YWx1ZSBvZiB0YXNrIHAgdG8gdGhlIGdpdmVuIHZhbHVlLgotaW50IHNldHNjaGVkdWxlcihwaWRfdCBwaWQsIGludCBwb2xpY3ksIHN0cnVjdCBzY2hlZF9wYXJhbSAqcGFyYW0pCi0JU2V0cyB0aGUgc2NoZWR1bGluZyBwb2xpY3kgYW5kIHBhcmFtZXRlcnMgZm9yIHRoZSBnaXZlbiBwaWQuCi1pbnQgc2V0X2NwdXNfYWxsb3dlZCh0YXNrX3QgKnAsIHVuc2lnbmVkIGxvbmcgbmV3X21hc2spCi0JU2V0cyBhIGdpdmVuIHRhc2sncyBDUFUgYWZmaW5pdHkgYW5kIG1pZ3JhdGVzIGl0IHRvIGEgcHJvcGVyIGNwdS4KLQlDYWxsZXJzIG11c3QgaGF2ZSBhIHZhbGlkIHJlZmVyZW5jZSB0byB0aGUgdGFzayBhbmQgYXNzdXJlIHRoZQotCXRhc2sgbm90IGV4aXQgcHJlbWF0dXJlbHkuICBObyBsb2NrcyBjYW4gYmUgaGVsZCBkdXJpbmcgdGhlIGNhbGwuCi1zZXRfdGFza19zdGF0ZSh0c2ssIHN0YXRlX3ZhbHVlKQotCVNldHMgdGhlIGdpdmVuIHRhc2sncyBzdGF0ZSB0byB0aGUgZ2l2ZW4gdmFsdWUuCi1zZXRfY3VycmVudF9zdGF0ZShzdGF0ZV92YWx1ZSkKLQlTZXRzIHRoZSBjdXJyZW50IHRhc2sncyBzdGF0ZSB0byB0aGUgZ2l2ZW4gdmFsdWUuCi12b2lkIHNldF90c2tfbmVlZF9yZXNjaGVkKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQotCVNldHMgbmVlZF9yZXNjaGVkIGluIHRoZSBnaXZlbiB0YXNrLgotdm9pZCBjbGVhcl90c2tfbmVlZF9yZXNjaGVkKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQotCUNsZWFycyBuZWVkX3Jlc2NoZWQgaW4gdGhlIGdpdmVuIHRhc2suCi12b2lkIHNldF9uZWVkX3Jlc2NoZWQoKQotCVNldHMgbmVlZF9yZXNjaGVkIGluIHRoZSBjdXJyZW50IHRhc2suCi12b2lkIGNsZWFyX25lZWRfcmVzY2hlZCgpCi0JQ2xlYXJzIG5lZWRfcmVzY2hlZCBpbiB0aGUgY3VycmVudCB0YXNrLgotaW50IG5lZWRfcmVzY2hlZCgpCi0JUmV0dXJucyB0cnVlIGlmIG5lZWRfcmVzY2hlZCBpcyBzZXQgaW4gdGhlIGN1cnJlbnQgdGFzaywgZmFsc2UKLQlvdGhlcndpc2UuCi15aWVsZCgpCi0JUGxhY2UgdGhlIGN1cnJlbnQgcHJvY2VzcyBhdCB0aGUgZW5kIG9mIHRoZSBydW5xdWV1ZSBhbmQgY2FsbCBzY2hlZHVsZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9BTFNBLUNvbmZpZ3VyYXRpb24udHh0IGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0FMU0EtQ29uZmlndXJhdGlvbi50eHQKaW5kZXggODQxYTkzNi4uMDEyODU4ZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0FMU0EtQ29uZmlndXJhdGlvbi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0FMU0EtQ29uZmlndXJhdGlvbi50eHQKQEAgLTM0Niw2ICszNDYsOSBAQAogICAgIHNiaXJxCS0gSVJRICMgZm9yIENNSTgzMzAgY2hpcCAoU0IxNikKICAgICBzYmRtYTgJLSA4Yml0IERNQSAjIGZvciBDTUk4MzMwIGNoaXAgKFNCMTYpCiAgICAgc2JkbWExNgktIDE2Yml0IERNQSAjIGZvciBDTUk4MzMwIGNoaXAgKFNCMTYpCisgICAgZm1wb3J0CS0gKG9wdGlvbmFsKSBPUEwzIEkvTyBwb3J0CisgICAgbXB1cG9ydAktIChvcHRpb25hbCkgTVBVNDAxIEkvTyBwb3J0CisgICAgbXB1aXJxCS0gKG9wdGlvbmFsKSBNUFU0MDEgaXJxICMKIAogICAgIFRoaXMgbW9kdWxlIHN1cHBvcnRzIG11bHRpcGxlIGNhcmRzIGFuZCBhdXRvcHJvYmUuCiAKQEAgLTM4OCwzNCArMzkxLDExIEBACiAKICAgICBUaGUgcG93ZXItbWFuYWdlbWVudCBpcyBzdXBwb3J0ZWQuCiAgICAgCi0gIE1vZHVsZSBzbmQtY3M0MjMyCi0gIC0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICBNb2R1bGUgZm9yIHNvdW5kIGNhcmRzIGJhc2VkIG9uIENTNDIzMi9DUzQyMzJBIElTQSBjaGlwcy4KLQotICAgIGlzYXBucAktIElTQSBQblAgZGV0ZWN0aW9uIC0gMCA9IGRpc2FibGUsIDEgPSBlbmFibGUgKGRlZmF1bHQpCi0KLSAgICB3aXRoIGlzYXBucD0wLCB0aGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIGF2YWlsYWJsZToKLQotICAgIHBvcnQJLSBwb3J0ICMgZm9yIENTNDIzMiBjaGlwIChQblAgc2V0dXAgLSAweDUzNCkKLSAgICBjcG9ydAktIGNvbnRyb2wgcG9ydCAjIGZvciBDUzQyMzIgY2hpcCAoUG5QIHNldHVwIC0gMHgxMjAsMHgyMTAsMHhmMDApCi0gICAgbXB1X3BvcnQJLSBwb3J0ICMgZm9yIE1QVS00MDEgVUFSVCAoUG5QIHNldHVwIC0gMHgzMDApLCAtMSA9IGRpc2FibGUKLSAgICBmbV9wb3J0CS0gRk0gcG9ydCAjIGZvciBDUzQyMzIgY2hpcCAoUG5QIHNldHVwIC0gMHgzODgpLCAtMSA9IGRpc2FibGUKLSAgICBpcnEJCS0gSVJRICMgZm9yIENTNDIzMiBjaGlwICg1LDcsOSwxMSwxMiwxNSkKLSAgICBtcHVfaXJxCS0gSVJRICMgZm9yIE1QVS00MDEgVUFSVCAoOSwxMSwxMiwxNSkKLSAgICBkbWExCS0gZmlyc3QgRE1BICMgZm9yIENTNDIzMiBjaGlwICgwLDEsMykKLSAgICBkbWEyCS0gc2Vjb25kIERNQSAjIGZvciBZYW1haGEgQ1M0MjMyIGNoaXAgKDAsMSwzKSwgLTEgPSBkaXNhYmxlCi0gICAgCi0gICAgVGhpcyBtb2R1bGUgc3VwcG9ydHMgbXVsdGlwbGUgY2FyZHMuIFRoaXMgbW9kdWxlIGRvZXMgbm90IHN1cHBvcnQgYXV0b3Byb2JlCi0gICAgKGlmIElTQSBQblAgaXMgbm90IHVzZWQpIHRodXMgbWFpbiBwb3J0IG11c3QgYmUgc3BlY2lmaWVkISEhIE90aGVyIHBvcnRzIGFyZQotICAgIG9wdGlvbmFsLgotCi0gICAgVGhlIHBvd2VyLW1hbmFnZW1lbnQgaXMgc3VwcG9ydGVkLgotICAgIAogICBNb2R1bGUgc25kLWNzNDIzNgogICAtLS0tLS0tLS0tLS0tLS0tLQogCi0gICAgTW9kdWxlIGZvciBzb3VuZCBjYXJkcyBiYXNlZCBvbiBDUzQyMzUvQ1M0MjM2L0NTNDIzNkIvQ1M0MjM3Qi8KKyAgICBNb2R1bGUgZm9yIHNvdW5kIGNhcmRzIGJhc2VkIG9uIENTNDIzMi9DUzQyMzJBLAorICAgIAkgICAgICAgCSAgICAgCSAgIAkgICBDUzQyMzUvQ1M0MjM2L0NTNDIzNkIvQ1M0MjM3Qi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1M0MjM4Qi9DUzQyMzkgSVNBIGNoaXBzLgogCiAgICAgaXNhcG5wCS0gSVNBIFBuUCBkZXRlY3Rpb24gLSAwID0gZGlzYWJsZSwgMSA9IGVuYWJsZSAoZGVmYXVsdCkKQEAgLTQzNyw2ICs0MTcsOSBAQAogCiAgICAgVGhlIHBvd2VyLW1hbmFnZW1lbnQgaXMgc3VwcG9ydGVkLgogCisgICAgVGhpcyBtb2R1bGUgaXMgYWxpYXNlZCBhcyBzbmQtY3M0MjMyIHNpbmNlIGl0IHByb3ZpZGVzIHRoZSBvbGQKKyAgICBzbmQtY3M0MjMyIGZ1bmN0aW9uYWxpdHksIHRvby4KKwogICBNb2R1bGUgc25kLWNzNDI4MQogICAtLS0tLS0tLS0tLS0tLS0tLQogCkBAIC02MDYsNiArNTg5LDcgQEAKICAgICBNb2R1bGUgZm9yIEVTUyBBdWRpb0RyaXZlIEVTLTE2ODggYW5kIEVTLTY4OCBzb3VuZCBjYXJkcy4KIAogICAgIHBvcnQJLSBwb3J0ICMgZm9yIEVTLTE2ODggY2hpcCAoMHgyMjAsMHgyNDAsMHgyNjApCisgICAgZm1fcG9ydAktIHBvcnQgIyBmb3IgT1BMMyAob3B0aW9uOyBzaGFyZSB0aGUgc2FtZSBwb3J0IGFzIGRlZmF1bHQpCiAgICAgbXB1X3BvcnQJLSBwb3J0ICMgZm9yIE1QVS00MDEgcG9ydCAoMHgzMDAsMHgzMTAsMHgzMjAsMHgzMzApLCAtMSA9IGRpc2FibGUgKGRlZmF1bHQpCiAgICAgaXJxCQktIElSUSAjIGZvciBFUy0xNjg4IGNoaXAgKDUsNyw5LDEwKQogICAgIG1wdV9pcnEJLSBJUlEgIyBmb3IgTVBVLTQwMSBwb3J0ICg1LDcsOSwxMCkKQEAgLTc1Nyw2ICs3NDEsOSBAQAogICAgIG1vZGVsCS0gZm9yY2UgdGhlIG1vZGVsIG5hbWUKICAgICBwb3NpdGlvbl9maXggLSBGaXggRE1BIHBvaW50ZXIgKDAgPSBhdXRvLCAxID0gdXNlIExQSUIsIDIgPSBQT1NCVUYpCiAgICAgcHJvYmVfbWFzayAgLSBCaXRtYXNrIHRvIHByb2JlIGNvZGVjcyAoZGVmYXVsdCA9IC0xLCBtZWFuaW5nIGFsbCBzbG90cykKKyAgICAJCSAgV2hlbiB0aGUgYml0IDggKDB4MTAwKSBpcyBzZXQsIHRoZSBsb3dlciA4IGJpdHMgYXJlIHVzZWQKKwkJICBhcyB0aGUgImZpeGVkIiBjb2RlYyBzbG90czsgaS5lLiB0aGUgZHJpdmVyIHByb2JlcyB0aGUKKwkJICBzbG90cyByZWdhcmRsZXNzIHdoYXQgaGFyZHdhcmUgcmVwb3J0cyBiYWNrCiAgICAgcHJvYmVfb25seQktIE9ubHkgcHJvYmluZyBhbmQgbm8gY29kZWMgaW5pdGlhbGl6YXRpb24gKGRlZmF1bHQ9b2ZmKTsKIAkJICBVc2VmdWwgdG8gY2hlY2sgdGhlIGluaXRpYWwgY29kZWMgc3RhdHVzIGZvciBkZWJ1Z2dpbmcKICAgICBiZGxfcG9zX2FkagktIFNwZWNpZmllcyB0aGUgRE1BIElSUSB0aW1pbmcgZGVsYXkgaW4gc2FtcGxlcy4KQEAgLTExODUsNiArMTE3Miw1NCBAQAogCiAgICAgVGhpcyBtb2R1bGUgc3VwcG9ydHMgbXVsdGlwbGUgZGV2aWNlcyBhbmQgUG5QLgogICAgIAorICBNb2R1bGUgc25kLW1zbmQtY2xhc3NpYworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBUdXJ0bGUgQmVhY2ggTXVsdGlTb3VuZCBDbGFzc2ljLCBUYWhpdGkgb3IgTW9udGVyZXkKKyAgICBzb3VuZGNhcmRzLgorCisgICAgaW8JCS0gUG9ydCAjIGZvciBtc25kLWNsYXNzaWMgY2FyZAorICAgIGlycQkJLSBJUlEgIyBmb3IgbXNuZC1jbGFzc2ljIGNhcmQKKyAgICBtZW0JCS0gTWVtb3J5IGFkZHJlc3MgKDB4YjAwMDAsIDB4YzgwMDAsIDB4ZDAwMDAsIDB4ZDgwMDAsCisJCSAgMHhlMDAwMCBvciAweGU4MDAwKQorICAgIHdyaXRlX25kZWxheSAtIGVuYWJsZSB3cml0ZSBuZGVsYXkgKGRlZmF1bHQgPSAxKQorICAgIGNhbGlicmF0ZV9zaWduYWwgLSBjYWxpYnJhdGUgc2lnbmFsIChkZWZhdWx0ID0gMCkKKyAgICBpc2FwbnAJLSBJU0EgUG5QIGRldGVjdGlvbiAtIDAgPSBkaXNhYmxlLCAxID0gZW5hYmxlIChkZWZhdWx0KQorICAgIGRpZ2l0YWwJLSBEaWdpdGFsIGRhdWdodGVyYm9hcmQgcHJlc2VudCAoZGVmYXVsdCA9IDApCisgICAgY2ZnCQktIENvbmZpZyBwb3J0ICgweDI1MCwgMHgyNjAgb3IgMHgyNzApIGRlZmF1bHQgPSBQblAKKyAgICByZXNldAktIFJlc2V0IGFsbCBkZXZpY2VzCisgICAgbXB1X2lvCS0gTVBVNDAxIEkvTyBwb3J0CisgICAgbXB1X2lycQktIE1QVTQwMSBpcnEjCisgICAgaWRlX2lvMAktIElERSBwb3J0ICMwCisgICAgaWRlX2lvMQktIElERSBwb3J0ICMxCisgICAgaWRlX2lycQktIElERSBpcnEjCisgICAgam95c3RpY2tfaW8JLSBKb3lzdGljayBJL08gcG9ydAorCisgICAgVGhlIGRyaXZlciByZXF1aXJlcyBmaXJtd2FyZSBmaWxlcyAidHVydGxlYmVhY2gvbXNuZGluaXQuYmluIiBhbmQKKyAgICAidHVydGxlYmVhY2gvbXNuZHBlcm0uYmluIiBpbiB0aGUgcHJvcGVyIGZpcm13YXJlIGRpcmVjdG9yeS4KKworICAgIFNlZSBEb2N1bWVudGF0aW9uL3NvdW5kL29zcy9NdWx0aVNvdW5kIGZvciBpbXBvcnRhbnQgaW5mb3JtYXRpb24KKyAgICBhYm91dCB0aGlzIGRyaXZlci4gIE5vdGUgdGhhdCBpdCBoYXMgYmVlbiBkaXNjb250aW51ZWQsIGJ1dCB0aGUgCisgICAgVm95ZXRyYSBUdXJ0bGUgQmVhY2gga25vd2xlZGdlIGJhc2UgZW50cnkgZm9yIGl0IGlzIHN0aWxsIGF2YWlsYWJsZQorICAgIGF0CisJaHR0cDovL3d3dy50dXJ0bGViZWFjaC5jb20vc2l0ZS9rYl9mdHAvNzkwLmFzcAorCisgIE1vZHVsZSBzbmQtbXNuZC1waW5uYWNsZQorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgVHVydGxlIEJlYWNoIE11bHRpU291bmQgUGlubmFjbGUvRmlqaSBzb3VuZGNhcmRzLgorCisgICAgaW8JCS0gUG9ydCAjIGZvciBwaW5uYWNsZS9maWppIGNhcmQKKyAgICBpcnEJCS0gSVJRICMgZm9yIHBpbm5hbGNlL2ZpamkgY2FyZAorICAgIG1lbQkJLSBNZW1vcnkgYWRkcmVzcyAoMHhiMDAwMCwgMHhjODAwMCwgMHhkMDAwMCwgMHhkODAwMCwKKwkJICAweGUwMDAwIG9yIDB4ZTgwMDApCisgICAgd3JpdGVfbmRlbGF5IC0gZW5hYmxlIHdyaXRlIG5kZWxheSAoZGVmYXVsdCA9IDEpCisgICAgY2FsaWJyYXRlX3NpZ25hbCAtIGNhbGlicmF0ZSBzaWduYWwgKGRlZmF1bHQgPSAwKQorICAgIGlzYXBucAktIElTQSBQblAgZGV0ZWN0aW9uIC0gMCA9IGRpc2FibGUsIDEgPSBlbmFibGUgKGRlZmF1bHQpCisKKyAgICBUaGUgZHJpdmVyIHJlcXVpcmVzIGZpcm13YXJlIGZpbGVzICJ0dXJ0bGViZWFjaC9wbmRzcGluaS5iaW4iIGFuZAorICAgICJ0dXJ0bGViZWFjaC9wbmRzcGVybS5iaW4iIGluIHRoZSBwcm9wZXIgZmlybXdhcmUgZGlyZWN0b3J5LgorCiAgIE1vZHVsZSBzbmQtbXRwYXYKICAgLS0tLS0tLS0tLS0tLS0tLQogCkBAIC0xODI0LDcgKzE4NTksNyBAQAogICAtLS0tLS0tLS0tLS0tLS0tLS0tCiAKICAgICBNb2R1bGUgZm9yIHNvdW5kIGNhcmRzIGJhc2VkIG9uIHRoZSBBc3VzIEFWMTAwL0FWMjAwIGNoaXBzLAotICAgIGkuZS4sIFhvbmFyIEQxLCBEWCwgRDIsIEQyWCBhbmQgSERBVjEuMyAoRGVsdXhlKS4KKyAgICBpLmUuLCBYb25hciBEMSwgRFgsIEQyLCBEMlgsIEhEQVYxLjMgKERlbHV4ZSksIGFuZCBFc3NlbmNlIFNUWC4KIAogICAgIFRoaXMgbW9kdWxlIHN1cHBvcnRzIGF1dG9wcm9iZSBhbmQgbXVsdGlwbGUgY2FyZHMuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9IRC1BdWRpby1Nb2RlbHMudHh0IGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0hELUF1ZGlvLU1vZGVscy50eHQKaW5kZXggMGY1ZDI2Yi4uOGVlYzA1YiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0hELUF1ZGlvLU1vZGVscy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0hELUF1ZGlvLU1vZGVscy50eHQKQEAgLTU2LDYgKzU2LDcgQEAKICAgc29ueS1hc3NhbWQJU29ueSBBU1NBTUQKICAgdG9zaGliYS1zMDYJVG9zaGliYSBTMDYKICAgdG9zaGliYS1yeDEJVG9zaGliYSBSWDEKKyAgdHlhbgkJVHlhbiBUaHVuZGVyIG42NjUwVyAoUzI5MTUtRSkKICAgdWx0cmEJCVNhbXN1bmcgUTEgVWx0cmEgVmlzdGEgbW9kZWwKICAgbGVub3ZvLTMwMDAJTGVub3ZvIDMwMDAgeTQxMAogICBuZWMJCU5FQyBWZXJzYSBTOTEwMApAQCAtMjYxLDYgKzI2Miw4IEBACiA9PT09PT09PT09PT09CiAgIGxhcHRvcAlCYXNpYyBMYXB0b3AgY29uZmlnIChkZWZhdWx0KQogICBocAkJSFAgU3BhcnRhbiBsYXB0b3AKKyAgaHAtZHY2NzM2CUhQIGR2NjczNgorICBsZW5vdm8teDIwMAlMZW5vdm8gWDIwMCBsYXB0b3AKIAogU1RBQzkyMDAKID09PT09PT09CkBAIC0yNzgsNiArMjgxLDcgQEAKICAgZ2F0ZXdheS1tNAlHYXRld2F5IGxhcHRvcHMgd2l0aCBFQVBEIGNvbnRyb2wKICAgZ2F0ZXdheS1tNC0yCUdhdGV3YXkgbGFwdG9wcyB3aXRoIEVBUEQgY29udHJvbAogICBwYW5hc29uaWMJUGFuYXNvbmljIENGLTc0CisgIGF1dG8JCUJJT1Mgc2V0dXAgKGRlZmF1bHQpCiAKIFNUQUM5MjA1LzkyNTQKID09PT09PT09PT09PT0KQEAgLTI4NSw2ICsyODksOCBAQAogICBkZWxsLW00MglEZWxsICh1bmtub3duKQogICBkZWxsLW00MwlEZWxsIFByZWNpc2lvbgogICBkZWxsLW00NAlEZWxsIEluc3Bpcm9uCisgIGVhcGQJCUtlZXAgRUFQRCBvbiAoZS5nLiBHYXRld2F5IFQxNjE2KQorICBhdXRvCQlCSU9TIHNldHVwIChkZWZhdWx0KQogCiBTVEFDOTIyMC85MjIxCiA9PT09PT09PT09PT09CkBAIC0zMDgsNiArMzE0LDcgQEAKICAgZGVsbC1kODIJRGVsbCAodW5rbm93bikKICAgZGVsbC1tODEJRGVsbCAodW5rbm93bikKICAgZGVsbC1tODIJRGVsbCBYUFMgTTEyMTAKKyAgYXV0bwkJQklPUyBzZXR1cCAoZGVmYXVsdCkKIAogU1RBQzkyMDIvOTI1MC85MjUxCiA9PT09PT09PT09PT09PT09PT0KQEAgLTMxOSw2ICszMjYsNyBAQAogICBtMwkJU29tZSBHYXRld2F5IE1YIHNlcmllcyBsYXB0b3BzCiAgIG01CQlTb21lIEdhdGV3YXkgTVggc2VyaWVzIGxhcHRvcHMgKE1QNjk1NCkKICAgbTYJCVNvbWUgR2F0ZXdheSBOWCBzZXJpZXMgbGFwdG9wcworICBhdXRvCQlCSU9TIHNldHVwIChkZWZhdWx0KQogCiBTVEFDOTIyNy85MjI4LzkyMjkvOTI3eAogPT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTMyOCw2ICszMzYsNyBAQAogICA1c3RhY2sJRDk2NSA1c3RhY2sgKyBTUERJRgogICBkZWxsLTNzdGFjawlEZWxsIERpbWVuc2lvbiBFNTIwCiAgIGRlbGwtYmlvcwlGaXhlcyB3aXRoIERlbGwgQklPUyBzZXR1cAorICBhdXRvCQlCSU9TIHNldHVwIChkZWZhdWx0KQogCiBTVEFDOTJIRDcxQioKID09PT09PT09PT09PQpAQCAtMzM1LDcgKzM0NCwxMCBAQAogICBkZWxsLW00LTEJRGVsbCBkZXNrdG9wcwogICBkZWxsLW00LTIJRGVsbCBkZXNrdG9wcwogICBkZWxsLW00LTMJRGVsbCBkZXNrdG9wcwotICBocC1tNAkJSFAgZHYgbGFwdG9wcworICBocC1tNAkJSFAgbWluaSAxMDAwCisgIGhwLWR2NQlIUCBkdiBzZXJpZXMKKyAgaHAtaGR4CUhQIEhEWCBzZXJpZXMKKyAgYXV0bwkJQklPUyBzZXR1cCAoZGVmYXVsdCkKIAogU1RBQzkySEQ3MyoKID09PT09PT09PT09CkBAIC0zNDUsMTMgKzM1NywxNiBAQAogICBkZWxsLW02LWRtaWMJRGVsbCBkZXNrdG9wcy9sYXB0b3BzIHdpdGggZGlnaXRhbCBtaWNzCiAgIGRlbGwtbTYJRGVsbCBkZXNrdG9wcy9sYXB0b3BzIHdpdGggYm90aCB0eXBlIG9mIG1pY3MKICAgZGVsbC1lcQlEZWxsIGRlc2t0b3BzL2xhcHRvcHMKKyAgYXV0bwkJQklPUyBzZXR1cCAoZGVmYXVsdCkKIAogU1RBQzkySEQ4MyoKID09PT09PT09PT09CiAgIHJlZgkJUmVmZXJlbmNlIGJvYXJkCiAgIG1pYy1yZWYJUmVmZXJlbmNlIGJvYXJkIHdpdGggcG93ZXIgbWFuYWdtZW50IGZvciBwb3J0cworICBkZWxsLXMxNAlEZWxsIGxhcHRvcAorICBhdXRvCQlCSU9TIHNldHVwIChkZWZhdWx0KQogCiBTVEFDOTg3MgogPT09PT09PT0KLSAgdmFpbwkJU2V0dXAgZm9yIFZBSU8gRkU1NTBHL1NaMTEwCi0gIHZhaW8tYXIgU2V0dXAgZm9yIFZBSU8gQVIKKyAgdmFpbwkJVkFJTyBsYXB0b3Agd2l0aG91dCBTUERJRgorICBhdXRvCQlCSU9TIHNldHVwIChkZWZhdWx0KQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0hELUF1ZGlvLnR4dCBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9IRC1BdWRpby50eHQKaW5kZXggOGQ2OGZmZi4uYzU5NDhmMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0hELUF1ZGlvLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvSEQtQXVkaW8udHh0CkBAIC0xMDksNiArMTA5LDEzIEBACiBTaW5jZSAyLjYuMjkga2VybmVsLCB0aGUgZHJpdmVyIGhhcyBhIG1vcmUgcm9idXN0IHByb2JpbmcgbWV0aG9kLCBzbwogdGhpcyBlcnJvciBtaWdodCBoYXBwZW4gcmFyZWx5LCB0aG91Z2guCiAKK09uIGEgbWFjaGluZSB3aXRoIGEgYnJva2VuIEJJT1MsIHNvbWV0aW1lcyB5b3UgbmVlZCB0byBmb3JjZSB0aGUKK2RyaXZlciB0byBwcm9iZSB0aGUgY29kZWMgc2xvdHMgdGhlIGhhcmR3YXJlIGRvZXNuJ3QgcmVwb3J0IGZvciB1c2UuCitJbiBzdWNoIGEgY2FzZSwgdHVybiB0aGUgYml0IDggKDB4MTAwKSBvZiBgcHJvYmVfbWFza2Agb3B0aW9uIG9uLgorVGhlbiB0aGUgcmVzdCA4IGJpdHMgYXJlIHBhc3NlZCBhcyB0aGUgY29kZWMgc2xvdHMgdG8gcHJvYmUKK3VuY29uZGl0aW9uYWxseS4gIEZvciBleGFtcGxlLCBgcHJvYmVfbWFzaz0weDEwM2Agd2lsbCBmb3JjZSB0byBwcm9iZQordGhlIGNvZGVjIHNsb3RzIDAgYW5kIDEgbm8gbWF0dGVyIHdoYXQgdGhlIGhhcmR3YXJlIHJlcG9ydHMuCisKIAogSW50ZXJydXB0IEhhbmRsaW5nCiB+fn5+fn5+fn5+fn5+fn5+fn4KQEAgLTM1OCwxMCArMzY1LDI2IEBACiAgIHRvIHRoaXMgZmlsZS4KIGluaXRfdmVyYnM6OgogICBUaGUgZXh0cmEgdmVyYnMgdG8gZXhlY3V0ZSBhdCBpbml0aWFsaXphdGlvbi4gIFlvdSBjYW4gYWRkIGEgdmVyYiBieQotICB3cml0aW5nIHRvIHRoaXMgZmlsZS4gIFBhc3MgdHJlZSBudW1iZXJzLCBuaWQsIHZlcmIgYW5kIHBhcmFtZXRlci4KKyAgd3JpdGluZyB0byB0aGlzIGZpbGUuICBQYXNzIHRocmVlIG51bWJlcnM6IG5pZCwgdmVyYiBhbmQgcGFyYW1ldGVyCisgIChzZXBhcmF0ZWQgd2l0aCBhIHNwYWNlKS4KIGhpbnRzOjoKLSAgU2hvd3MgaGludCBzdHJpbmdzIGZvciBjb2RlYyBwYXJzZXJzIGZvciBhbnkgdXNlLiAgUmlnaHQgbm93IGl0J3MKLSAgbm90IHVzZWQuCisgIFNob3dzIC8gc3RvcmVzIGhpbnQgc3RyaW5ncyBmb3IgY29kZWMgcGFyc2VycyBmb3IgYW55IHVzZS4KKyAgSXRzIGZvcm1hdCBpcyBga2V5ID0gdmFsdWVgLiAgRm9yIGV4YW1wbGUsIHBhc3NpbmcgYGhwX2RldGVjdCA9IHllc2AKKyAgdG8gSURUL1NUQUMgY29kZWMgcGFyc2VyIHdpbGwgcmVzdWx0IGluIHRoZSBkaXNhYmxlbWVudCBvZiB0aGUKKyAgaGVhZHBob25lIGRldGVjdGlvbi4KK2luaXRfcGluX2NvbmZpZ3M6OgorICBTaG93cyB0aGUgaW5pdGlhbCBwaW4gZGVmYXVsdCBjb25maWcgdmFsdWVzIHNldCBieSBCSU9TLgorZHJpdmVyX3Bpbl9jb25maWdzOjoKKyAgU2hvd3MgdGhlIHBpbiBkZWZhdWx0IHZhbHVlcyBzZXQgYnkgdGhlIGNvZGVjIHBhcnNlciBleHBsaWNpdGx5LgorICBUaGlzIGRvZXNuJ3Qgc2hvdyBhbGwgcGluIHZhbHVlcyBidXQgb25seSB0aGUgY2hhbmdlZCB2YWx1ZXMgYnkKKyAgdGhlIHBhcnNlci4gIFRoYXQgaXMsIGlmIHRoZSBwYXJzZXIgZG9lc24ndCBjaGFuZ2UgdGhlIHBpbiBkZWZhdWx0CisgIGNvbmZpZyB2YWx1ZXMgYnkgaXRzZWxmLCB0aGlzIHdpbGwgY29udGFpbiBub3RoaW5nLgordXNlcl9waW5fY29uZmlnczo6CisgIFNob3dzIHRoZSBwaW4gZGVmYXVsdCBjb25maWcgdmFsdWVzIHRvIG92ZXJyaWRlIHRoZSBCSU9TIHNldHVwLgorICBXcml0aW5nIHRoaXMgKHdpdGggdHdvIG51bWJlcnMsIE5JRCBhbmQgdmFsdWUpIGFwcGVuZHMgdGhlIG5ldworICB2YWx1ZS4gIFRoZSBnaXZlbiB3aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgaW5pdGlhbCBCSU9TIHZhbHVlIGF0CisgIHRoZSBuZXh0IHJlY29uZmlndXJhdGlvbiB0aW1lLiAgTm90ZSB0aGF0IHRoaXMgY29uZmlnIHdpbGwgb3ZlcnJpZGUKKyAgZXZlbiB0aGUgZHJpdmVyIHBpbiBjb25maWdzLCB0b28uCiByZWNvbmZpZzo6CiAgIFRyaWdnZXJzIHRoZSBjb2RlYyByZS1jb25maWd1cmF0aW9uLiAgV2hlbiBhbnkgdmFsdWUgaXMgd3JpdHRlbiB0bwogICB0aGlzIGZpbGUsIHRoZSBkcml2ZXIgcmUtaW5pdGlhbGl6ZSBhbmQgcGFyc2VzIHRoZSBjb2RlYyB0cmVlCkBAIC0zNzEsNiArMzk0LDE0IEBACiAgIFJlc2V0cyB0aGUgY29kZWMsIHJlbW92ZXMgdGhlIG1peGVyIGVsZW1lbnRzIGFuZCBQQ00gc3R1ZmYgb2YgdGhlCiAgIHNwZWNpZmllZCBjb2RlYywgYW5kIGNsZWFyIGFsbCBpbml0IHZlcmJzIGFuZCBoaW50cy4KIAorRm9yIGV4YW1wbGUsIHdoZW4geW91IHdhbnQgdG8gY2hhbmdlIHRoZSBwaW4gZGVmYXVsdCBjb25maWd1cmF0aW9uCit2YWx1ZSBvZiB0aGUgcGluIHdpZGdldCAweDE0IHRvIDB4OTk5MzAxM2YsIGFuZCBsZXQgdGhlIGRyaXZlcgorcmUtY29uZmlndXJlIGJhc2VkIG9uIHRoYXQgc3RhdGUsIHJ1biBsaWtlIGJlbG93OgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICMgZWNobyAweDE0IDB4OTk5MzAxM2YgPiAvc3lzL2NsYXNzL3NvdW5kL2h3QzBEMC91c2VyX3Bpbl9jb25maWdzCisgICMgZWNobyAxID4gL3N5cy9jbGFzcy9zb3VuZC9od0MwRDAvcmVjb25maWcgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKIAogUG93ZXItU2F2aW5nCiB+fn5+fn5+fn5+fn4KQEAgLTQ2MSw2ICs0OTIsMTYgQEAKIFRoZXJlIGFyZSBzb21lIG90aGVyIHVzZWZ1bCBvcHRpb25zLiAgU2VlIGAtLWhlbHBgIG9wdGlvbiBvdXRwdXQgZm9yCiBkZXRhaWxzLgogCitXaGVuIGEgcHJvYmUgZXJyb3Igb2NjdXJzIG9yIHdoZW4gdGhlIGRyaXZlciBvYnZpb3VzbHkgYXNzaWducyBhCittaXNtYXRjaGVkIG1vZGVsLCBpdCdkIGJlIGhlbHBmdWwgdG8gbG9hZCB0aGUgZHJpdmVyIHdpdGgKK2Bwcm9iZV9vbmx5PTFgIG9wdGlvbiAoYXQgYmVzdCBhZnRlciB0aGUgY29sZCByZWJvb3QpIGFuZCBydW4KK2Fsc2EtaW5mbyBhdCB0aGlzIHN0YXRlLiAgV2l0aCB0aGlzIG9wdGlvbiwgdGhlIGRyaXZlciB3b24ndCBjb25maWd1cmUKK3RoZSBtaXhlciBhbmQgUENNIGJ1dCBqdXN0IHRyaWVzIHRvIHByb2JlIHRoZSBjb2RlYyBzbG90LiAgQWZ0ZXIKK3Byb2JpbmcsIHRoZSBwcm9jIGZpbGUgaXMgYXZhaWxhYmxlLCBzbyB5b3UgY2FuIGdldCB0aGUgcmF3IGNvZGVjCitpbmZvcm1hdGlvbiBiZWZvcmUgbW9kaWZpZWQgYnkgdGhlIGRyaXZlci4gIE9mIGNvdXJzZSwgdGhlIGRyaXZlcgoraXNuJ3QgdXNhYmxlIHdpdGggYHByb2JlX29ubHk9MWAuICBCdXQgeW91IGNhbiBjb250aW51ZSB0aGUKK2NvbmZpZ3VyYXRpb24gdmlhIGh3ZGVwIHN5c2ZzIGZpbGUgaWYgaGRhLXJlY29uZmlnIG9wdGlvbiBpcyBlbmFibGVkLgorCiAKIGhkYS12ZXJiCiB+fn5+fn5+fgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL3NvYy9kYXBtLnR4dCBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9zb2MvZGFwbS50eHQKaW5kZXggNDZmOTY4NC4uOWU2NzYzMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL3NvYy9kYXBtLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2Evc29jL2RhcG0udHh0CkBAIC0xMTYsNiArMTE2LDkgQEAKIFNORF9TT0NfREFQTV9NSVhFUigiT3V0cHV0IE1peGVyIiwgV004NzMxX1BXUiwgNCwgMSwgd204NzMxX291dHB1dF9taXhlcl9jb250cm9scywKIAlBUlJBWV9TSVpFKHdtODczMV9vdXRwdXRfbWl4ZXJfY29udHJvbHMpKSwKIAorSWYgeW91IGRvbnQgd2FudCB0aGUgbWl4ZXIgZWxlbWVudHMgcHJlZml4ZWQgd2l0aCB0aGUgbmFtZSBvZiB0aGUgbWl4ZXIgd2lkZ2V0LAoreW91IGNhbiB1c2UgU05EX1NPQ19EQVBNX01JWEVSX05BTUVEX0NUTCBpbnN0ZWFkLiB0aGUgcGFyYW1ldGVycyBhcmUgdGhlIHNhbWUKK2FzIGZvciBTTkRfU09DX0RBUE1fTUlYRVIuCiAKIDIuMyBQbGF0Zm9ybS9NYWNoaW5lIGRvbWFpbiBXaWRnZXRzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvQ1M0MjMyIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvQ1M0MjMyCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZDZhZjdhLi4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vc291bmQvb3NzL0NTNDIzMgorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLVRvIGNvbmZpZ3VyZSB0aGUgQ3J5c3RhbCBDUzQyM3ggc291bmQgY2hpcCBhbmQgYWN0aXZhdGUgaXRzIERTUCBmdW5jdGlvbnMsCi1tb2R1bGVzIG1heSBiZSBsb2FkZWQgaW4gdGhpcyBvcmRlcjoKLSAgCi0JbW9kcHJvYmUgc291bmQKLQlpbnNtb2QgYWQxODQ4Ci0JaW5zbW9kIHVhcnQ0MDEKLQlpbnNtb2QgY3M0MjMyIGlvPSogaXJxPSogZG1hPSogZG1hMj0qCi0gIAotVGhpcyBpcyB0aGUgbWVhbmluZyBvZiB0aGUgcGFyYW1ldGVyczoKLSAgCi0JaW8tLUkvTyBhZGRyZXNzIG9mIHRoZSBXaW5kb3dzIFNvdW5kIFN5c3RlbSAobm9ybWFsbHkgMHg1MzQpCi0JaXJxLS1JUlEgb2YgdGhpcyBkZXZpY2UKLQlkbWEgYW5kIGRtYTItLURNQSBjaGFubmVscyAoRE1BMiBtYXkgYmUgMCkKLSAgCi1PbiBzb21lIGNhcmRzLCB0aGUgYm9hcmQgYXR0ZW1wdHMgdG8gZG8gbm9uLVBuUCBzZXR1cCwgYW5kIGZhaWxzLiAgSWYgeW91Ci1oYXZlIHByb2JsZW1zLCB1c2UgTGludXgnIFBuUCBmYWNpbGl0aWVzLiAKLSAgCi1UbyBnZXQgTUlESSBmYWNpbGl0aWVzIGFkZAotICAKLQlpbnNtb2Qgb3BsMyBpbz0qCi0gIAotd2hlcmUgImlvIiBpcyB0aGUgSS9PIGFkZHJlc3Mgb2YgdGhlIE9QTDMgc3ludGhlc2l6ZXIuIFRoaXMgd2lsbCBiZSBzaG93bgotaW4gL3Byb2Mvc3lzL3BucCBhbmQgaXMgbm9ybWFsbHkgMHgzODguCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9JbnRyb2R1Y3Rpb24gYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9JbnRyb2R1Y3Rpb24KaW5kZXggZjA0YmE2Yi4uNzVkOTY3ZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvSW50cm9kdWN0aW9uCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL0ludHJvZHVjdGlvbgpAQCAtODAsNyArODAsNyBAQAogICAgIGFkZGl0aW9uYWwgZmVhdHVyZXMuCiAKIDIuICBUaGUgY29tbWVyY2lhbCBPU1MgZHJpdmVyIG1heSBiZSBvYnRhaW5lZCBmcm9tIHRoZSBzaXRlOgotICAgIGh0dHA6Ly93d3cvb3BlbnNvdW5kLmNvbS4gIFRoaXMgbWF5IGJlIHVzZWQgZm9yIGNhcmRzIHRoYXQKKyAgICBodHRwOi8vd3d3Lm9wZW5zb3VuZC5jb20uICBUaGlzIG1heSBiZSB1c2VkIGZvciBjYXJkcyB0aGF0CiAgICAgYXJlIHVuc3VwcG9ydGVkIGJ5IHRoZSBrZXJuZWwgZHJpdmVyLCBvciBtYXkgYmUgdXNlZAogICAgIGJ5IG90aGVyIG9wZXJhdGluZyBzeXN0ZW1zLiAgCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdXNiL3VzYm1vbi50eHQgYi9Eb2N1bWVudGF0aW9uL3VzYi91c2Jtb24udHh0CmluZGV4IDI3MDQ4MTkuLjZjM2M2MjUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdXNiL3VzYm1vbi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi91c2IvdXNibW9uLnR4dApAQCAtMjI5LDE2ICsyMjksMjYgQEAKIAlpbnQgc3RhdHVzOwkJLyogMjg6ICovCiAJdW5zaWduZWQgaW50IGxlbmd0aDsJLyogMzI6IExlbmd0aCBvZiBkYXRhIChzdWJtaXR0ZWQgb3IgYWN0dWFsKSAqLwogCXVuc2lnbmVkIGludCBsZW5fY2FwOwkvKiAzNjogRGVsaXZlcmVkIGxlbmd0aCAqLwotCXVuc2lnbmVkIGNoYXIgc2V0dXBbOF07CS8qIDQwOiBPbmx5IGZvciBDb250cm9sICdTJyAqLwotfTsJCQkJLyogNDggYnl0ZXMgdG90YWwgKi8KKwl1bmlvbiB7CQkJLyogNDA6ICovCisJCXVuc2lnbmVkIGNoYXIgc2V0dXBbU0VUVVBfTEVOXTsJLyogT25seSBmb3IgQ29udHJvbCBTLXR5cGUgKi8KKwkJc3RydWN0IGlzb19yZWMgewkJLyogT25seSBmb3IgSVNPICovCisJCQlpbnQgZXJyb3JfY291bnQ7CisJCQlpbnQgbnVtZGVzYzsKKwkJfSBpc287CisJfSBzOworCWludCBpbnRlcnZhbDsJCS8qIDQ4OiBPbmx5IGZvciBJbnRlcnJ1cHQgYW5kIElTTyAqLworCWludCBzdGFydF9mcmFtZTsJLyogNTI6IEZvciBJU08gKi8KKwl1bnNpZ25lZCBpbnQgeGZlcl9mbGFnczsgLyogNTY6IGNvcHkgb2YgVVJCJ3MgdHJhbnNmZXJfZmxhZ3MgKi8KKwl1bnNpZ25lZCBpbnQgbmRlc2M7CS8qIDYwOiBBY3R1YWwgbnVtYmVyIG9mIElTTyBkZXNjcmlwdG9ycyAqLworfTsJCQkJLyogNjQgdG90YWwgbGVuZ3RoICovCiAKIFRoZXNlIGV2ZW50cyBjYW4gYmUgcmVjZWl2ZWQgZnJvbSBhIGNoYXJhY3RlciBkZXZpY2UgYnkgcmVhZGluZyB3aXRoIHJlYWQoMiksCi13aXRoIGFuIGlvY3RsKDIpLCBvciBieSBhY2Nlc3NpbmcgdGhlIGJ1ZmZlciB3aXRoIG1tYXAuCit3aXRoIGFuIGlvY3RsKDIpLCBvciBieSBhY2Nlc3NpbmcgdGhlIGJ1ZmZlciB3aXRoIG1tYXAuIEhvd2V2ZXIsIHJlYWQoMikKK29ubHkgcmV0dXJucyBmaXJzdCA0OCBieXRlcyBmb3IgY29tcGF0aWJpbGl0eSByZWFzb25zLgogCiBUaGUgY2hhcmFjdGVyIGRldmljZSBpcyB1c3VhbGx5IGNhbGxlZCAvZGV2L3VzYm1vbk4sIHdoZXJlIE4gaXMgdGhlIFVTQiBidXMKIG51bWJlci4gTnVtYmVyIHplcm8gKC9kZXYvdXNibW9uMCkgaXMgc3BlY2lhbCBhbmQgbWVhbnMgImFsbCBidXNlcyIuCi1Ib3dldmVyLCB0aGlzIGZlYXR1cmUgaXMgbm90IGltcGxlbWVudGVkIHlldC4gTm90ZSB0aGF0IHNwZWNpZmljIG5hbWluZwotcG9saWN5IGlzIHNldCBieSB5b3VyIExpbnV4IGRpc3RyaWJ1dGlvbi4KK05vdGUgdGhhdCBzcGVjaWZpYyBuYW1pbmcgcG9saWN5IGlzIHNldCBieSB5b3VyIExpbnV4IGRpc3RyaWJ1dGlvbi4KIAogSWYgeW91IGNyZWF0ZSAvZGV2L3VzYm1vbjAgYnkgaGFuZCwgbWFrZSBzdXJlIHRoYXQgaXQgaXMgb3duZWQgYnkgcm9vdAogYW5kIGhhcyBtb2RlIDA2MDAuIE90aGVyd2lzZSwgdW5wcml2aWxlZGdlZCB1c2VycyB3aWxsIGJlIGFibGUgdG8gc25vb3AKQEAgLTI3OSw5ICsyODksMTAgQEAKIFRoaXMgY2FsbCByZXR1cm5zIHRoZSBjdXJyZW50IHNpemUgb2YgdGhlIGJ1ZmZlciBpbiBieXRlcy4KIAogIE1PTl9JT0NYX0dFVCwgZGVmaW5lZCBhcyBfSU9XKE1PTl9JT0NfTUFHSUMsIDYsIHN0cnVjdCBtb25fZ2V0X2FyZykKKyBNT05fSU9DWF9HRVRYLCBkZWZpbmVkIGFzIF9JT1coTU9OX0lPQ19NQUdJQywgMTAsIHN0cnVjdCBtb25fZ2V0X2FyZykKIAotVGhpcyBjYWxsIHdhaXRzIGZvciBldmVudHMgdG8gYXJyaXZlIGlmIG5vbmUgd2VyZSBpbiB0aGUga2VybmVsIGJ1ZmZlciwKLXRoZW4gcmV0dXJucyB0aGUgZmlyc3QgZXZlbnQuIEl0cyBhcmd1bWVudCBpcyBhIHBvaW50ZXIgdG8gdGhlIGZvbGxvd2luZworVGhlc2UgY2FsbHMgd2FpdCBmb3IgZXZlbnRzIHRvIGFycml2ZSBpZiBub25lIHdlcmUgaW4gdGhlIGtlcm5lbCBidWZmZXIsCit0aGVuIHJldHVybiB0aGUgZmlyc3QgZXZlbnQuIFRoZSBhcmd1bWVudCBpcyBhIHBvaW50ZXIgdG8gdGhlIGZvbGxvd2luZwogc3RydWN0dXJlOgogCiBzdHJ1Y3QgbW9uX2dldF9hcmcgewpAQCAtMjk0LDYgKzMwNSw4IEBACiBwb2ludGVkIGJ5IGhkciBjb250YWlucyB0aGUgbmV4dCBldmVudCBzdHJ1Y3R1cmUsIGFuZCB0aGUgZGF0YSBidWZmZXIgY29udGFpbnMKIHRoZSBkYXRhLCBpZiBhbnkuIFRoZSBldmVudCBpcyByZW1vdmVkIGZyb20gdGhlIGtlcm5lbCBidWZmZXIuCiAKK1RoZSBNT05fSU9DWF9HRVQgY29waWVzIDQ4IGJ5dGVzLCBNT05fSU9DWF9HRVRYIGNvcGllcyA2NCBieXRlcy4KKwogIE1PTl9JT0NYX01GRVRDSCwgZGVmaW5lZCBhcyBfSU9XUihNT05fSU9DX01BR0lDLCA3LCBzdHJ1Y3QgbW9uX21mZXRjaF9hcmcpCiAKIFRoaXMgaW9jdGwgaXMgcHJpbWFyaWx5IHVzZWQgd2hlbiB0aGUgYXBwbGljYXRpb24gYWNjZXNzZXMgdGhlIGJ1ZmZlcgpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCA1ZDQ2MGM5Li5mYTdiZTA0IDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUworKysgYi9NQUlOVEFJTkVSUwpAQCAtMTAxMSw2ICsxMDExLDggQEAKIFM6CVN1cHBvcnRlZAogCiBCUk9BRENPTSBURzMgR0lHQUJJVCBFVEhFUk5FVCBEUklWRVIKK1A6CU1hdHQgQ2FybHNvbgorTToJbWNhcmxzb25AYnJvYWRjb20uY29tCiBQOglNaWNoYWVsIENoYW4KIE06CW1jaGFuQGJyb2FkY29tLmNvbQogTDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZwpAQCAtMTI2OSw2ICsxMjcxLDEyIEBACiBUOglnaXQga2VybmVsLm9yZzovcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2hlcmJlcnQvY3J5cHRvLTIuNi5naXQKIFM6CU1haW50YWluZWQKIAorQ1JZUFRPR1JBUEhJQyBSQU5ET00gTlVNQkVSIEdFTkVSQVRPUgorUDoJTmVpbCBIb3JtYW4KK006CW5ob3JtYW5AdHV4ZHJpdmVyLmNvbQorTDoJbGludXgtY3J5cHRvQHZnZXIua2VybmVsLm9yZworUzoJTWFpbnRhaW5lZAorCiBDUzU1MzUgQXVkaW8gQUxTQSBkcml2ZXIKIFA6CUpheWEgS3VtYXIKIE06CWpheWFrdW1hci5hbHNhQGdtYWlsLmNvbQpAQCAtMjIxNiw2ICsyMjI0LDExIEBACiBMOglsaW51eDEzOTQtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0CiBTOglNYWludGFpbmVkCiAKK0lOVEVHUklUWSBNRUFTVVJFTUVOVCBBUkNISVRFQ1RVUkUgKElNQSkKK1A6CU1pbWkgWm9oYXIKK006CXpvaGFyQHVzLmlibS5jb20KK1M6CVN1cHBvcnRlZAorCiBJTVMgVFdJTlRVUkJPIEZSQU1FQlVGRkVSIERSSVZFUgogTDoJbGludXgtZmJkZXYtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0IChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKIFM6CU9ycGhhbgpAQCAtMjgzMiw3ICsyODQ1LDcgQEAKIE06CXppcHBlbEBsaW51eC1tNjhrLm9yZwogTDoJbGludXgtbTY4a0BsaXN0cy5saW51eC1tNjhrLm9yZwogVzoJaHR0cDovL3d3dy5saW51eC1tNjhrLm9yZy8KLVc6CWh0dHA6Ly9saW51eC1tNjhrLWN2cy51YmIuY2EvCitUOglnaXQgZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2dlZXJ0L2xpbnV4LW02OGsuZ2l0CiBTOglNYWludGFpbmVkCiAKIE02OEsgT04gQVBQTEUgTUFDSU5UT1NICkBAIC0zNjM1LDYgKzM2NDgsMTIgQEAKIEw6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKIFM6CU1haW50YWluZWQKIAorUkRTIC0gUkVMSUFCTEUgREFUQUdSQU0gU09DS0VUUworUDoJQW5keSBHcm92ZXIKK006CWFuZHkuZ3JvdmVyQG9yYWNsZS5jb20KK0w6CXJkcy1kZXZlbEBvc3Mub3JhY2xlLmNvbQorUzoJU3VwcG9ydGVkCisKIFJFQUQtQ09QWSBVUERBVEUgKFJDVSkKIFA6CURpcGFua2FyIFNhcm1hCiBNOglkaXBhbmthckBpbi5pYm0uY29tCkBAIC0zNzI2LDYgKzM3NDUsMTUgQEAKIFc6CWh0dHA6Ly93d3cuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9saW51eC9saW51eDM5MC8KIFM6CVN1cHBvcnRlZAogCitTMzkwIFpDUllQVCBEUklWRVIKK1A6CUZlbGl4IEJlY2sKK006CWZlbGl4LmJlY2tAZGUuaWJtLmNvbQorUDoJUmFscGggV3VlcnRobmVyCitNOglyYWxwaC53dWVydGhuZXJAZGUuaWJtLmNvbQorTToJbGludXgzOTBAZGUuaWJtLmNvbQorTDoJbGludXgtczM5MEB2Z2VyLmtlcm5lbC5vcmcKK1M6CVN1cHBvcnRlZAorCiBTMzkwIFpGQ1AgRFJJVkVSCiBQOglDaHJpc3RvZiBTY2htaXR0CiBNOgljaHJpc3RvZi5zY2htaXR0QGRlLmlibS5jb20KQEAgLTM4NDQsNiArMzg3Miw3IEBACiBMOglsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnCiBMOglsaW51eC1zZWN1cml0eS1tb2R1bGVAdmdlci5rZXJuZWwub3JnIChzdWdnZXN0ZWQgQ2M6KQogVDoJZ2l0IGtlcm5lbC5vcmc6cHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2ptb3JyaXMvc2VjdXJpdHktdGVzdGluZy0yLjYuZ2l0CitXOglodHRwOi8vc2VjdXJpdHkud2lraS5rZXJuZWwub3JnLwogUzoJU3VwcG9ydGVkCiAKIFNFQ1VSSVRZIENPTlRBQ1QKQEAgLTQyODUsNiArNDMxNCwxOSBAQAogVzoJaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy90bGFuLwogUzoJTWFpbnRhaW5lZAogCitUT01PWU8gU0VDVVJJVFkgTU9EVUxFCitQOglLZW50YXJvIFRha2VkYQorTToJdGFrZWRha25AbnR0ZGF0YS5jby5qcAorUDoJVGV0c3VvIEhhbmRhCitNOglwZW5ndWluLWtlcm5lbEBJLWxvdmUuU0FLVVJBLm5lLmpwCitMOglsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnIChrZXJuZWwgaXNzdWVzKQorTDoJdG9tb3lvLXVzZXJzLWVuQGxpc3RzLnNvdXJjZWZvcmdlLmpwIChzdWJzY3JpYmVycy1vbmx5LCBmb3IgZGV2ZWxvcGVycyBhbmQgdXNlcnMgaW4gRW5nbGlzaCkKK0w6CXRvbW95by1kZXZAbGlzdHMuc291cmNlZm9yZ2UuanAgKHN1YnNjcmliZXJzLW9ubHksIGZvciBkZXZlbG9wZXJzIGluIEphcGFuZXNlKQorTDoJdG9tb3lvLXVzZXJzQGxpc3RzLnNvdXJjZWZvcmdlLmpwIChzdWJzY3JpYmVycy1vbmx5LCBmb3IgdXNlcnMgaW4gSmFwYW5lc2UpCitXOglodHRwOi8vdG9tb3lvLnNvdXJjZWZvcmdlLmpwLworVDoJcXVpbHQgaHR0cDovL3N2bi5zb3VyY2Vmb3JnZS5qcC9zdm5yb290L3RvbW95by90cnVuay8yLjIueC90b21veW8tbHNtL3BhdGNoZXMvCitTOglNYWludGFpbmVkCisKIFRPU0hJQkEgQUNQSSBFWFRSQVMgRFJJVkVSCiBQOglKb2huIEJlbG1vbnRlCiBNOgl0b3NoaWJhX2FjcGlAbWVtZWJlYW0ub3JnCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3NvY2tldC5oIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9zb2NrZXQuaAppbmRleCBhMTA1N2MyLi4zNjQxZWMxIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3NvY2tldC5oCisrKyBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vc29ja2V0LmgKQEAgLTYyLDYgKzYyLDkgQEAKIAogI2RlZmluZSBTT19NQVJLCQkJMzYKIAorI2RlZmluZSBTT19USU1FU1RBTVBJTkcJCTM3CisjZGVmaW5lIFNDTV9USU1FU1RBTVBJTkcJU09fVElNRVNUQU1QSU5HCisKIC8qIE9fTk9OQkxPQ0sgY2xhc2hlcyB3aXRoIHRoZSBiaXRzIHVzZWQgZm9yIHNvY2tldCB0eXBlcy4gIFRoZXJlZm9yZSB3ZQogICogaGF2ZSB0byBkZWZpbmUgU09DS19OT05CTE9DSyB0byBhIGRpZmZlcmVudCB2YWx1ZSBoZXJlLgogICovCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3N0YXRmcy5oIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9zdGF0ZnMuaAppbmRleCBkZTM1Y2Q0Li5jY2QyZTE4IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3N0YXRmcy5oCisrKyBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vc3RhdGZzLmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmIF9BTFBIQV9TVEFURlNfSAogI2RlZmluZSBfQUxQSEFfU1RBVEZTX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIC8qIEFscGhhIGlzIHRoZSBvbmx5IDY0LWJpdCBwbGF0Zm9ybSB3aXRoIDMyLWJpdCBzdGF0ZnMuIEFuZCBkb2Vzbid0CiAgICBldmVuIHNlZW0gdG8gaW1wbGVtZW50IHN0YXRmczY0ICovCiAjZGVmaW5lIF9fc3RhdGZzX3dvcmQgX191MzIKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vc3dhYi5oIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9zd2FiLmgKaW5kZXggNjhlNzA4OS4uNGQ2ODJiMSAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9zd2FiLmgKKysrIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9zd2FiLmgKQEAgLTEsNyArMSw3IEBACiAjaWZuZGVmIF9BTFBIQV9TV0FCX0gKICNkZWZpbmUgX0FMUEhBX1NXQUJfSAogCi0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGFzbS9jb21waWxlci5oPgogCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9pcnEuYyBiL2FyY2gvYWxwaGEva2VybmVsL2lycS5jCmluZGV4IDcwMzczMWEuLmQzODEyZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL2lycS5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL2lycS5jCkBAIC05MCw3ICs5MCw3IEBACiAJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxcyhpcnEpKTsKICNlbHNlCiAJCWZvcl9lYWNoX29ubGluZV9jcHUoaikKLQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfY3B1KGopLmlycXNbaXJxXSk7CisJCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXNfY3B1KGlycSwgaikpOwogI2VuZGlmCiAJCXNlcV9wcmludGYocCwgIiAlMTRzIiwgaXJxX2Rlc2NbaXJxXS5jaGlwLT50eXBlbmFtZSk7CiAJCXNlcV9wcmludGYocCwgIiAgJWMlcyIsCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9pcnFfYWxwaGEuYyBiL2FyY2gvYWxwaGEva2VybmVsL2lycV9hbHBoYS5jCmluZGV4IGUxNmFlYjYuLjY3YzE5ZjggMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL2lycV9hbHBoYS5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL2lycV9hbHBoYS5jCkBAIC02NCw3ICs2NCw3IEBACiAJCXNtcF9wZXJjcHVfdGltZXJfaW50ZXJydXB0KHJlZ3MpOwogCQljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJCWlmIChjcHUgIT0gYm9vdF9jcHVpZCkgewotCQkgICAgICAgIGtzdGF0X2NwdShjcHUpLmlycXNbUlRDX0lSUV0rKzsKKwkJICAgICAgICBrc3RhdF9pbmNyX2lycXNfdGhpc19jcHUoUlRDX0lSUSwgaXJxX3RvX2Rlc2MoUlRDX0lSUSkpOwogCQl9IGVsc2UgewogCQkJaGFuZGxlX2lycShSVENfSVJRKTsKIAkJfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYS5vdXQuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2Eub3V0LmgKaW5kZXggNzk0ODlmZC4uMDgzODk0YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYS5vdXQuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hLm91dC5oCkBAIC0yLDcgKzIsNyBAQAogI2RlZmluZSBfX0FSTV9BX09VVF9IX18KIAogI2luY2x1ZGUgPGxpbnV4L3BlcnNvbmFsaXR5Lmg+Ci0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogc3RydWN0IGV4ZWMKIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3NldHVwLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9zZXR1cC5oCmluZGV4IGYyY2QxOGEuLmVlMTMwNGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3NldHVwLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vc2V0dXAuaApAQCAtMTQsNyArMTQsNyBAQAogI2lmbmRlZiBfX0FTTUFSTV9TRVRVUF9ICiAjZGVmaW5lIF9fQVNNQVJNX1NFVFVQX0gKIAotI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKICNkZWZpbmUgQ09NTUFORF9MSU5FX1NJWkUgMTAyNAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9zb2NrZXQuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3NvY2tldC5oCmluZGV4IDY4MTdiZTkuLjUzN2RlNGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3NvY2tldC5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3NvY2tldC5oCkBAIC01NCw0ICs1NCw3IEBACiAKICNkZWZpbmUgU09fTUFSSwkJCTM2CiAKKyNkZWZpbmUgU09fVElNRVNUQU1QSU5HCQkzNworI2RlZmluZSBTQ01fVElNRVNUQU1QSU5HCVNPX1RJTUVTVEFNUElORworCiAjZW5kaWYgLyogX0FTTV9TT0NLRVRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vc3dhYi5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vc3dhYi5oCmluZGV4IDI3YTY4OWIuLmNhMmJmMmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3N3YWIuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9zd2FiLmgKQEAgLTE2LDcgKzE2LDcgQEAKICNkZWZpbmUgX19BU01fQVJNX1NXQUJfSAogCiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KLSNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAjaWYgIWRlZmluZWQoX19TVFJJQ1RfQU5TSV9fKSB8fCBkZWZpbmVkKF9fS0VSTkVMX18pCiAjICBkZWZpbmUgX19TV0FCXzY0X1RIUlVfMzJfXwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2lycS5jIGIvYXJjaC9hcm0va2VybmVsL2lycS5jCmluZGV4IDM2M2RiMTguLjcyOTZmMDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL2FybS9rZXJuZWwvaXJxLmMKQEAgLTc2LDcgKzc2LDcgQEAKIAogCQlzZXFfcHJpbnRmKHAsICIlM2Q6ICIsIGkpOwogCQlmb3JfZWFjaF9wcmVzZW50X2NwdShjcHUpCi0JCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2NwdShjcHUpLmlycXNbaV0pOworCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzX2NwdShpLCBjcHUpKTsKIAkJc2VxX3ByaW50ZihwLCAiICUxMHMiLCBpcnFfZGVzY1tpXS5jaGlwLT5uYW1lID8gOiAiLSIpOwogCQlzZXFfcHJpbnRmKHAsICIgICVzIiwgYWN0aW9uLT5uYW1lKTsKIAkJZm9yIChhY3Rpb24gPSBhY3Rpb24tPm5leHQ7IGFjdGlvbjsgYWN0aW9uID0gYWN0aW9uLT5uZXh0KQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9jb21tb24uYyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvY29tbW9uLmMKaW5kZXggYjM0MDRiNy4uMGQyMDc0ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9jb21tb24uYworKysgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2NvbW1vbi5jCkBAIC0yMzEsMTQgKzIzMSwxNyBAQAogCiB2b2lkIF9faW5pdCBraXJrd29vZF9nZTAwX3N3aXRjaF9pbml0KHN0cnVjdCBkc2FfcGxhdGZvcm1fZGF0YSAqZCwgaW50IGlycSkKIHsKKwlpbnQgaTsKKwogCWlmIChpcnEgIT0gTk9fSVJRKSB7CiAJCWtpcmt3b29kX3N3aXRjaF9yZXNvdXJjZXNbMF0uc3RhcnQgPSBpcnE7CiAJCWtpcmt3b29kX3N3aXRjaF9yZXNvdXJjZXNbMF0uZW5kID0gaXJxOwogCQlraXJrd29vZF9zd2l0Y2hfZGV2aWNlLm51bV9yZXNvdXJjZXMgPSAxOwogCX0KIAotCWQtPm1paV9idXMgPSAma2lya3dvb2RfZ2UwMF9zaGFyZWQuZGV2OwogCWQtPm5ldGRldiA9ICZraXJrd29vZF9nZTAwLmRldjsKKwlmb3IgKGkgPSAwOyBpIDwgZC0+bnJfY2hpcHM7IGkrKykKKwkJZC0+Y2hpcFtpXS5taWlfYnVzID0gJmtpcmt3b29kX2dlMDBfc2hhcmVkLmRldjsKIAlraXJrd29vZF9zd2l0Y2hfZGV2aWNlLmRldi5wbGF0Zm9ybV9kYXRhID0gZDsKIAogCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigma2lya3dvb2Rfc3dpdGNoX2RldmljZSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL3JkODhmNjI4MS1zZXR1cC5jIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9yZDg4ZjYyODEtc2V0dXAuYwppbmRleCA5YTBlOTA1Li5lMWMwNTE2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL3JkODhmNjI4MS1zZXR1cC5jCisrKyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvcmQ4OGY2MjgxLXNldHVwLmMKQEAgLTc1LDcgKzc1LDcgQEAKIAkuZHVwbGV4CQk9IERVUExFWF9GVUxMLAogfTsKIAotc3RhdGljIHN0cnVjdCBkc2FfcGxhdGZvcm1fZGF0YSByZDg4ZjYyODFfc3dpdGNoX2RhdGEgPSB7CitzdGF0aWMgc3RydWN0IGRzYV9jaGlwX2RhdGEgcmQ4OGY2MjgxX3N3aXRjaF9jaGlwX2RhdGEgPSB7CiAJLnBvcnRfbmFtZXNbMF0JPSAibGFuMSIsCiAJLnBvcnRfbmFtZXNbMV0JPSAibGFuMiIsCiAJLnBvcnRfbmFtZXNbMl0JPSAibGFuMyIsCkBAIC04Myw2ICs4MywxMSBAQAogCS5wb3J0X25hbWVzWzVdCT0gImNwdSIsCiB9OwogCitzdGF0aWMgc3RydWN0IGRzYV9wbGF0Zm9ybV9kYXRhIHJkODhmNjI4MV9zd2l0Y2hfcGxhdF9kYXRhID0geworCS5ucl9jaGlwcwk9IDEsCisJLmNoaXAJCT0gJnJkODhmNjI4MV9zd2l0Y2hfY2hpcF9kYXRhLAorfTsKKwogc3RhdGljIHN0cnVjdCBtdjY0M3h4X2V0aF9wbGF0Zm9ybV9kYXRhIHJkODhmNjI4MV9nZTAxX2RhdGEgPSB7CiAJLnBoeV9hZGRyCT0gTVY2NDNYWF9FVEhfUEhZX0FERFIoMTEpLAogfTsKQEAgLTEwNSwxMiArMTEwLDEyIEBACiAJa2lya3dvb2RfZ2UwMF9pbml0KCZyZDg4ZjYyODFfZ2UwMF9kYXRhKTsKIAlraXJrd29vZF9wY2llX2lkKCZkZXYsICZyZXYpOwogCWlmIChyZXYgPT0gTVY4OEY2MjgxX1JFVl9BMCkgewotCQlyZDg4ZjYyODFfc3dpdGNoX2RhdGEuc3dfYWRkciA9IDEwOworCQlyZDg4ZjYyODFfc3dpdGNoX2NoaXBfZGF0YS5zd19hZGRyID0gMTA7CiAJCWtpcmt3b29kX2dlMDFfaW5pdCgmcmQ4OGY2MjgxX2dlMDFfZGF0YSk7CiAJfSBlbHNlIHsKLQkJcmQ4OGY2MjgxX3N3aXRjaF9kYXRhLnBvcnRfbmFtZXNbNF0gPSAid2FuIjsKKwkJcmQ4OGY2MjgxX3N3aXRjaF9jaGlwX2RhdGEucG9ydF9uYW1lc1s0XSA9ICJ3YW4iOwogCX0KLQlraXJrd29vZF9nZTAwX3N3aXRjaF9pbml0KCZyZDg4ZjYyODFfc3dpdGNoX2RhdGEsIE5PX0lSUSk7CisJa2lya3dvb2RfZ2UwMF9zd2l0Y2hfaW5pdCgmcmQ4OGY2MjgxX3N3aXRjaF9wbGF0X2RhdGEsIE5PX0lSUSk7CiAKIAlraXJrd29vZF9ydGNfaW5pdCgpOwogCWtpcmt3b29kX3NhdGFfaW5pdCgmcmQ4OGY2MjgxX3NhdGFfZGF0YSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW5zOXh4eC9pcnEuYyBiL2FyY2gvYXJtL21hY2gtbnM5eHh4L2lycS5jCmluZGV4IDIyZTBlYjYuLmZlYjBlNTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbnM5eHh4L2lycS5jCisrKyBiL2FyY2gvYXJtL21hY2gtbnM5eHh4L2lycS5jCkBAIC02Myw3ICs2Myw2IEBACiAjZWxzZQogc3RhdGljIHZvaWQgaGFuZGxlX3ByaW9faXJxKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKIHsKLQl1bnNpZ25lZCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCXN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbjsKIAlpcnFyZXR1cm5fdCBhY3Rpb25fcmV0OwogCkBAIC03Miw3ICs3MSw3IEBACiAJQlVHX09OKGRlc2MtPnN0YXR1cyAmIElSUV9JTlBST0dSRVNTKTsKIAogCWRlc2MtPnN0YXR1cyAmPSB+KElSUV9SRVBMQVkgfCBJUlFfV0FJVElORyk7Ci0Ja3N0YXRfY3B1KGNwdSkuaXJxc1tpcnFdKys7CisJa3N0YXRfaW5jcl9pcnFzX3RoaXNfY3B1KGlycSwgZGVzYyk7CiAKIAlhY3Rpb24gPSBkZXNjLT5hY3Rpb247CiAJaWYgKHVubGlrZWx5KCFhY3Rpb24gfHwgKGRlc2MtPnN0YXR1cyAmIElSUV9ESVNBQkxFRCkpKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2NvbW1vbi5jIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2NvbW1vbi5jCmluZGV4IDhhMGU0OWQuLjY4Y2MzZWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9jb21tb24uYworKysgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvY29tbW9uLmMKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlIDxwbGF0L2VoY2ktb3Jpb24uaD4KICNpbmNsdWRlIDxwbGF0L212X3hvci5oPgogI2luY2x1ZGUgPHBsYXQvb3Jpb25fbmFuZC5oPgorI2luY2x1ZGUgPHBsYXQvb3Jpb241eF93ZHQuaD4KICNpbmNsdWRlIDxwbGF0L3RpbWUuaD4KICNpbmNsdWRlICJjb21tb24uaCIKIApAQCAtMjE5LDE0ICsyMjAsMTcgQEAKIAogdm9pZCBfX2luaXQgb3Jpb241eF9ldGhfc3dpdGNoX2luaXQoc3RydWN0IGRzYV9wbGF0Zm9ybV9kYXRhICpkLCBpbnQgaXJxKQogeworCWludCBpOworCiAJaWYgKGlycSAhPSBOT19JUlEpIHsKIAkJb3Jpb241eF9zd2l0Y2hfcmVzb3VyY2VzWzBdLnN0YXJ0ID0gaXJxOwogCQlvcmlvbjV4X3N3aXRjaF9yZXNvdXJjZXNbMF0uZW5kID0gaXJxOwogCQlvcmlvbjV4X3N3aXRjaF9kZXZpY2UubnVtX3Jlc291cmNlcyA9IDE7CiAJfQogCi0JZC0+bWlpX2J1cyA9ICZvcmlvbjV4X2V0aF9zaGFyZWQuZGV2OwogCWQtPm5ldGRldiA9ICZvcmlvbjV4X2V0aC5kZXY7CisJZm9yIChpID0gMDsgaSA8IGQtPm5yX2NoaXBzOyBpKyspCisJCWQtPmNoaXBbaV0ubWlpX2J1cyA9ICZvcmlvbjV4X2V0aF9zaGFyZWQuZGV2OwogCW9yaW9uNXhfc3dpdGNoX2RldmljZS5kZXYucGxhdGZvcm1fZGF0YSA9IGQ7CiAKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm9yaW9uNXhfc3dpdGNoX2RldmljZSk7CkBAIC01MzMsNiArNTM3LDI5IEBACiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBXYXRjaGRvZworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IG9yaW9uNXhfd2R0X3BsYXRmb3JtX2RhdGEgb3Jpb241eF93ZHRfZGF0YSA9IHsKKwkudGNsawkJCT0gMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG9yaW9uNXhfd2R0X2RldmljZSA9IHsKKwkubmFtZQkJPSAib3Jpb241eF93ZHQiLAorCS5pZAkJPSAtMSwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmb3Jpb241eF93ZHRfZGF0YSwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gMCwKK307CisKK3ZvaWQgX19pbml0IG9yaW9uNXhfd2R0X2luaXQodm9pZCkKK3sKKwlvcmlvbjV4X3dkdF9kYXRhLnRjbGsgPSBvcmlvbjV4X3RjbGs7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZvcmlvbjV4X3dkdF9kZXZpY2UpOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogVGltZSBoYW5kbGluZwogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBpbnQgb3Jpb241eF90Y2xrOwpAQCAtNjMxLDYgKzY1OCwxMSBAQAogCQlwcmludGsoS0VSTl9JTkZPICJPcmlvbjogQXBwbHlpbmcgNTI4MSBEMCBXRkkgd29ya2Fyb3VuZC5cbiIpOwogCQlkaXNhYmxlX2hsdCgpOwogCX0KKworCS8qCisJICogUmVnaXN0ZXIgd2F0Y2hkb2cgZHJpdmVyCisJICovCisJb3Jpb241eF93ZHRfaW5pdCgpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3JkODhmNTE4MWwtZnhvLXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvcmQ4OGY1MTgxbC1meG8tc2V0dXAuYwppbmRleCAxNWY1MzIzLi45YzFjYTQxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvcmQ4OGY1MTgxbC1meG8tc2V0dXAuYworKysgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvcmQ4OGY1MTgxbC1meG8tc2V0dXAuYwpAQCAtOTQsNyArOTQsNyBAQAogCS5kdXBsZXgJCT0gRFVQTEVYX0ZVTEwsCiB9OwogCi1zdGF0aWMgc3RydWN0IGRzYV9wbGF0Zm9ybV9kYXRhIHJkODhmNTE4MWxfZnhvX3N3aXRjaF9kYXRhID0geworc3RhdGljIHN0cnVjdCBkc2FfY2hpcF9kYXRhIHJkODhmNTE4MWxfZnhvX3N3aXRjaF9jaGlwX2RhdGEgPSB7CiAJLnBvcnRfbmFtZXNbMF0JPSAibGFuMiIsCiAJLnBvcnRfbmFtZXNbMV0JPSAibGFuMSIsCiAJLnBvcnRfbmFtZXNbMl0JPSAid2FuIiwKQEAgLTEwMyw2ICsxMDMsMTEgQEAKIAkucG9ydF9uYW1lc1s3XQk9ICJsYW4zIiwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgZHNhX3BsYXRmb3JtX2RhdGEgcmQ4OGY1MTgxbF9meG9fc3dpdGNoX3BsYXRfZGF0YSA9IHsKKwkubnJfY2hpcHMJPSAxLAorCS5jaGlwCQk9ICZyZDg4ZjUxODFsX2Z4b19zd2l0Y2hfY2hpcF9kYXRhLAorfTsKKwogc3RhdGljIHZvaWQgX19pbml0IHJkODhmNTE4MWxfZnhvX2luaXQodm9pZCkKIHsKIAkvKgpAQCAtMTE3LDcgKzEyMiw3IEBACiAJICovCiAJb3Jpb241eF9laGNpMF9pbml0KCk7CiAJb3Jpb241eF9ldGhfaW5pdCgmcmQ4OGY1MTgxbF9meG9fZXRoX2RhdGEpOwotCW9yaW9uNXhfZXRoX3N3aXRjaF9pbml0KCZyZDg4ZjUxODFsX2Z4b19zd2l0Y2hfZGF0YSwgTk9fSVJRKTsKKwlvcmlvbjV4X2V0aF9zd2l0Y2hfaW5pdCgmcmQ4OGY1MTgxbF9meG9fc3dpdGNoX3BsYXRfZGF0YSwgTk9fSVJRKTsKIAlvcmlvbjV4X3VhcnQwX2luaXQoKTsKIAogCW9yaW9uNXhfc2V0dXBfZGV2X2Jvb3Rfd2luKFJEODhGNTE4MUxfRlhPX05PUl9CT09UX0JBU0UsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvcmQ4OGY1MTgxbC1nZS1zZXR1cC5jIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3JkODhmNTE4MWwtZ2Utc2V0dXAuYwppbmRleCA4YWQzOTM0Li5lZTEzOTlmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvcmQ4OGY1MTgxbC1nZS1zZXR1cC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9yZDg4ZjUxODFsLWdlLXNldHVwLmMKQEAgLTk1LDcgKzk1LDcgQEAKIAkuZHVwbGV4CQk9IERVUExFWF9GVUxMLAogfTsKIAotc3RhdGljIHN0cnVjdCBkc2FfcGxhdGZvcm1fZGF0YSByZDg4ZjUxODFsX2dlX3N3aXRjaF9kYXRhID0geworc3RhdGljIHN0cnVjdCBkc2FfY2hpcF9kYXRhIHJkODhmNTE4MWxfZ2Vfc3dpdGNoX2NoaXBfZGF0YSA9IHsKIAkucG9ydF9uYW1lc1swXQk9ICJsYW4yIiwKIAkucG9ydF9uYW1lc1sxXQk9ICJsYW4xIiwKIAkucG9ydF9uYW1lc1syXQk9ICJ3YW4iLApAQCAtMTA0LDYgKzEwNCwxMSBAQAogCS5wb3J0X25hbWVzWzddCT0gImxhbjMiLAogfTsKIAorc3RhdGljIHN0cnVjdCBkc2FfcGxhdGZvcm1fZGF0YSByZDg4ZjUxODFsX2dlX3N3aXRjaF9wbGF0X2RhdGEgPSB7CisJLm5yX2NoaXBzCT0gMSwKKwkuY2hpcAkJPSAmcmQ4OGY1MTgxbF9nZV9zd2l0Y2hfY2hpcF9kYXRhLAorfTsKKwogc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIHJkODhmNTE4MWxfZ2VfaTJjX3J0YyA9IHsKIAlJMkNfQk9BUkRfSU5GTygiZHMxMzM4IiwgMHg2OCksCiB9OwpAQCAtMTIyLDcgKzEyNyw4IEBACiAJICovCiAJb3Jpb241eF9laGNpMF9pbml0KCk7CiAJb3Jpb241eF9ldGhfaW5pdCgmcmQ4OGY1MTgxbF9nZV9ldGhfZGF0YSk7Ci0Jb3Jpb241eF9ldGhfc3dpdGNoX2luaXQoJnJkODhmNTE4MWxfZ2Vfc3dpdGNoX2RhdGEsIGdwaW9fdG9faXJxKDgpKTsKKwlvcmlvbjV4X2V0aF9zd2l0Y2hfaW5pdCgmcmQ4OGY1MTgxbF9nZV9zd2l0Y2hfcGxhdF9kYXRhLAorCQkJCWdwaW9fdG9faXJxKDgpKTsKIAlvcmlvbjV4X2kyY19pbml0KCk7CiAJb3Jpb241eF91YXJ0MF9pbml0KCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9yZDg4ZjYxODNhcC1nZS1zZXR1cC5jIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3JkODhmNjE4M2FwLWdlLXNldHVwLmMKaW5kZXggMjYyZTI1ZS4uNzczN2NmOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3JkODhmNjE4M2FwLWdlLXNldHVwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3JkODhmNjE4M2FwLWdlLXNldHVwLmMKQEAgLTM1LDcgKzM1LDcgQEAKIAkuZHVwbGV4CQk9IERVUExFWF9GVUxMLAogfTsKIAotc3RhdGljIHN0cnVjdCBkc2FfcGxhdGZvcm1fZGF0YSByZDg4ZjYxODNhcF9nZV9zd2l0Y2hfZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3QgZHNhX2NoaXBfZGF0YSByZDg4ZjYxODNhcF9nZV9zd2l0Y2hfY2hpcF9kYXRhID0gewogCS5wb3J0X25hbWVzWzBdCT0gImxhbjEiLAogCS5wb3J0X25hbWVzWzFdCT0gImxhbjIiLAogCS5wb3J0X25hbWVzWzJdCT0gImxhbjMiLApAQCAtNDQsNiArNDQsMTEgQEAKIAkucG9ydF9uYW1lc1s1XQk9ICJjcHUiLAogfTsKIAorc3RhdGljIHN0cnVjdCBkc2FfcGxhdGZvcm1fZGF0YSByZDg4ZjYxODNhcF9nZV9zd2l0Y2hfcGxhdF9kYXRhID0geworCS5ucl9jaGlwcwk9IDEsCisJLmNoaXAJCT0gJnJkODhmNjE4M2FwX2dlX3N3aXRjaF9jaGlwX2RhdGEsCit9OworCiBzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gcmQ4OGY2MTgzYXBfZ2VfcGFydGl0aW9uc1tdID0gewogCXsKIAkJLm5hbWUJPSAia2VybmVsIiwKQEAgLTg5LDcgKzk0LDggQEAKIAkgKi8KIAlvcmlvbjV4X2VoY2kwX2luaXQoKTsKIAlvcmlvbjV4X2V0aF9pbml0KCZyZDg4ZjYxODNhcF9nZV9ldGhfZGF0YSk7Ci0Jb3Jpb241eF9ldGhfc3dpdGNoX2luaXQoJnJkODhmNjE4M2FwX2dlX3N3aXRjaF9kYXRhLCBncGlvX3RvX2lycSgzKSk7CisJb3Jpb241eF9ldGhfc3dpdGNoX2luaXQoJnJkODhmNjE4M2FwX2dlX3N3aXRjaF9wbGF0X2RhdGEsCisJCQkJZ3Bpb190b19pcnEoMykpOwogCXNwaV9yZWdpc3Rlcl9ib2FyZF9pbmZvKHJkODhmNjE4M2FwX2dlX3NwaV9zbGF2ZV9pbmZvLAogCQkJCUFSUkFZX1NJWkUocmQ4OGY2MTgzYXBfZ2Vfc3BpX3NsYXZlX2luZm8pKTsKIAlvcmlvbjV4X3NwaV9pbml0KCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvd3J0MzUwbi12Mi1zZXR1cC5jIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3dydDM1MG4tdjItc2V0dXAuYwppbmRleCBjYzhmODkyLi4xYjRhZDlkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvd3J0MzUwbi12Mi1zZXR1cC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC93cnQzNTBuLXYyLXNldHVwLmMKQEAgLTEwNiw3ICsxMDYsNyBAQAogCS5kdXBsZXgJCT0gRFVQTEVYX0ZVTEwsCiB9OwogCi1zdGF0aWMgc3RydWN0IGRzYV9wbGF0Zm9ybV9kYXRhIHdydDM1MG5fdjJfc3dpdGNoX2RhdGEgPSB7CitzdGF0aWMgc3RydWN0IGRzYV9jaGlwX2RhdGEgd3J0MzUwbl92Ml9zd2l0Y2hfY2hpcF9kYXRhID0gewogCS5wb3J0X25hbWVzWzBdCT0gImxhbjIiLAogCS5wb3J0X25hbWVzWzFdCT0gImxhbjEiLAogCS5wb3J0X25hbWVzWzJdCT0gIndhbiIsCkBAIC0xMTUsNiArMTE1LDExIEBACiAJLnBvcnRfbmFtZXNbN10JPSAibGFuNCIsCiB9OwogCitzdGF0aWMgc3RydWN0IGRzYV9wbGF0Zm9ybV9kYXRhIHdydDM1MG5fdjJfc3dpdGNoX3BsYXRfZGF0YSA9IHsKKwkubnJfY2hpcHMJPSAxLAorCS5jaGlwCQk9ICZ3cnQzNTBuX3YyX3N3aXRjaF9jaGlwX2RhdGEsCit9OworCiBzdGF0aWMgdm9pZCBfX2luaXQgd3J0MzUwbl92Ml9pbml0KHZvaWQpCiB7CiAJLyoKQEAgLTEyOSw3ICsxMzQsNyBAQAogCSAqLwogCW9yaW9uNXhfZWhjaTBfaW5pdCgpOwogCW9yaW9uNXhfZXRoX2luaXQoJndydDM1MG5fdjJfZXRoX2RhdGEpOwotCW9yaW9uNXhfZXRoX3N3aXRjaF9pbml0KCZ3cnQzNTBuX3YyX3N3aXRjaF9kYXRhLCBOT19JUlEpOworCW9yaW9uNXhfZXRoX3N3aXRjaF9pbml0KCZ3cnQzNTBuX3YyX3N3aXRjaF9wbGF0X2RhdGEsIE5PX0lSUSk7CiAJb3Jpb241eF91YXJ0MF9pbml0KCk7CiAKIAlvcmlvbjV4X3NldHVwX2Rldl9ib290X3dpbihXUlQzNTBOX1YyX05PUl9CT09UX0JBU0UsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9lNzQwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9lNzQwLmMKaW5kZXggNmQ0OGUwMC4uYTZmZmY3OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvZTc0MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2U3NDAuYwpAQCAtMTM1LDYgKzEzNSwxMSBAQAogCS8qIElyREEgKi8KIAlHUElPMzhfR1BJTyB8IE1GUF9MUE1fRFJJVkVfSElHSCwKIAorCS8qIEF1ZGlvIHBvd2VyIGNvbnRyb2wgKi8KKwlHUElPMTZfR1BJTywgIC8qIEFDOTcgY29kZWMgQVZERDIgc3VwcGx5IChhbmFsb2d1ZSBwb3dlcikgKi8KKwlHUElPNDBfR1BJTywgIC8qIE1pYyBhbXAgcG93ZXIgKi8KKwlHUElPNDFfR1BJTywgIC8qIEhlYWRwaG9uZSBhbXAgcG93ZXIgKi8KKwogCS8qIFBDIENhcmQgKi8KIAlHUElPOF9HUElPLCAgIC8qIENEMCAqLwogCUdQSU80NF9HUElPLCAgLyogQ0QxICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9lNzUwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9lNzUwLmMKaW5kZXggYmUxYWI4ZS4uNjY1MDY2ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvZTc1MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2U3NTAuYwpAQCAtMTMzLDYgKzEzMywxMSBAQAogCS8qIElyREEgKi8KIAlHUElPMzhfR1BJTyB8IE1GUF9MUE1fRFJJVkVfSElHSCwKIAorCS8qIEF1ZGlvIHBvd2VyIGNvbnRyb2wgKi8KKwlHUElPNF9HUElPLCAgLyogSGVhZHBob25lIGFtcCBwb3dlciAqLworCUdQSU83X0dQSU8sICAvKiBTcGVha2VyIGFtcCBwb3dlciAqLworCUdQSU8zN19HUElPLCAvKiBIZWFkcGhvbmUgZGV0ZWN0ICovCisKIAkvKiBQQyBDYXJkICovCiAJR1BJTzhfR1BJTywgICAvKiBDRDAgKi8KIAlHUElPNDRfR1BJTywgIC8qIENEMSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaDUwMDAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2g1MDAwLmMKaW5kZXggZGE2ZTQ0Mi4uMjk1ZWM0MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaDUwMDAuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9oNTAwMC5jCkBAIC0xNTMsNiArMTUzLDEzIEBACiAJR1BJTzIzX1NTUDFfU0NMSywKIAlHUElPMjVfU1NQMV9UWEQsCiAJR1BJTzI2X1NTUDFfUlhELAorCisJLyogSTJTICovCisJR1BJTzI4X0kyU19CSVRDTEtfT1VULAorCUdQSU8yOV9JMlNfU0RBVEFfSU4sCisJR1BJTzMwX0kyU19TREFUQV9PVVQsCisJR1BJTzMxX0kyU19TWU5DLAorCUdQSU8zMl9JMlNfU1lTQ0xLLAogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9lc2VyaWVzLWdwaW8uaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9lc2VyaWVzLWdwaW8uaAppbmRleCBlZmJkMmFhLi5mM2U1NTA5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvZXNlcmllcy1ncGlvLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2VzZXJpZXMtZ3Bpby5oCkBAIC00NSw2ICs0NSwyMSBAQAogLyogZTd4eCBJckRBIHBvd2VyIGNvbnRyb2wgKi8KICNkZWZpbmUgR1BJT19FN1hYX0lSX09GRiAgICAgICAgIDM4CiAKKy8qIGU3NDAgYXVkaW8gY29udHJvbCBHUElPcyAqLworI2RlZmluZSBHUElPX0U3NDBfV005NzA1X25BVkREMiAgMTYKKyNkZWZpbmUgR1BJT19FNzQwX01JQ19PTiAgICAgICAgIDQwCisjZGVmaW5lIEdQSU9fRTc0MF9BTVBfT04gICAgICAgICA0MQorCisvKiBlNzUwIGF1ZGlvIGNvbnRyb2wgR1BJT3MgKi8KKyNkZWZpbmUgR1BJT19FNzUwX0hQX0FNUF9PRkYgICAgICA0CisjZGVmaW5lIEdQSU9fRTc1MF9TUEtfQU1QX09GRiAgICAgNworI2RlZmluZSBHUElPX0U3NTBfSFBfREVURUNUICAgICAgMzcKKworLyogZTgwMCBhdWRpbyBjb250cm9sIEdQSU9zICovCisjZGVmaW5lIEdQSU9fRTgwMF9IUF9ERVRFQ1QgICAgICA4MQorI2RlZmluZSBHUElPX0U4MDBfSFBfQU1QX09GRiAgICAgODIKKyNkZWZpbmUgR1BJT19FODAwX1NQS19BTVBfT04gICAgIDgzCisKIC8qIEFTSUMgcmVsYXRlZCBHUElPcyAqLwogI2RlZmluZSBHUElPX0VTRVJJRVNfVE1JT19JUlEgICAgICAgIDUKICNkZWZpbmUgR1BJT19FU0VSSUVTX1RNSU9fUENMUiAgICAgIDE5CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcmVncy1zc3AuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9yZWdzLXNzcC5oCmluZGV4IGNmMzE5ODYuLjAxOGY2ZDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9yZWdzLXNzcC5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9yZWdzLXNzcC5oCkBAIC01MCw3ICs1MCw3IEBACiAjZGVmaW5lIFNTQ1IwX1RVTQkoMSA8PCAyMykJLyogVHJhbnNtaXQgRklGTyB1bmRlcnJ1biBpbnRlcnJ1cHQgbWFzayAqLwogI2RlZmluZSBTU0NSMF9GUkRDCSgweDA3MDAwMDAwKQkvKiBGcmFtZSByYXRlIGRpdmlkZXIgY29udHJvbCAobWFzaykgKi8KICNkZWZpbmUgU1NDUjBfU2xvdHNQZXJGcm0oeCkgKCgoeCkgLSAxKSA8PCAyNCkJLyogVGltZSBzbG90cyBwZXIgZnJhbWUgWzEuLjhdICovCi0jZGVmaW5lIFNTQ1IwX0FEQwkoMSA8PCAzMCkJLyogQXVkaW8gY2xvY2sgc2VsZWN0ICovCisjZGVmaW5lIFNTQ1IwX0FDUwkoMSA8PCAzMCkJLyogQXVkaW8gY2xvY2sgc2VsZWN0ICovCiAjZGVmaW5lIFNTQ1IwX01PRAkoMSA8PCAzMSkJLyogTW9kZSAobm9ybWFsIG9yIG5ldHdvcmspICovCiAjZW5kaWYKIApAQCAtMTA5LDYgKzEwOSwxMSBAQAogI2RlZmluZSBTU1NSX1RJTlQJCSgxIDw8IDE5KQkvKiBSZWNlaXZlciBUaW1lLW91dCBJbnRlcnJ1cHQgKi8KICNkZWZpbmUgU1NTUl9QSU5UCQkoMSA8PCAxOCkJLyogUGVyaXBoZXJhbCBUcmFpbGluZyBCeXRlIEludGVycnVwdCAqLwogCisjaWYgZGVmaW5lZChDT05GSUdfUFhBM3h4KQorI2RlZmluZSBTU1BTUF9FRE1ZU1RPUCh4KQkoKHgpIDw8IDI4KSAgICAgLyogRXh0ZW5kZWQgRHVtbXkgU3RvcCAqLworI2RlZmluZSBTU1BTUF9FRE1ZU1RSVCh4KQkoKHgpIDw8IDI2KSAgICAgLyogRXh0ZW5kZWQgRHVtbXkgU3RhcnQgKi8KKyNlbmRpZgorCiAjZGVmaW5lIFNTUFNQX0ZTUlQJCSgxIDw8IDI1KQkvKiBGcmFtZSBTeW5jIFJlbGF0aXZlIFRpbWluZyAqLwogI2RlZmluZSBTU1BTUF9ETVlTVE9QKHgpCSgoeCkgPDwgMjMpCS8qIER1bW15IFN0b3AgKi8KICNkZWZpbmUgU1NQU1BfU0ZSTVdEVEgoeCkJKCh4KSA8PCAxNikJLyogU2VyaWFsIEZyYW1lIFdpZHRoICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9zcGl0ei5jIGIvYXJjaC9hcm0vbWFjaC1weGEvc3BpdHouYwppbmRleCA2ZDQ0N2M5Li4wZDYyZDMxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9zcGl0ei5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3NwaXR6LmMKQEAgLTEwNSw2ICsxMDUsMTIgQEAKIAlHUElPNTdfbklPSVMxNiwKIAlHUElPMTA0X1BTS1RTRUwsCiAKKwkvKiBJMlMgKi8KKwlHUElPMjhfSTJTX0JJVENMS19PVVQsCisJR1BJTzI5X0kyU19TREFUQV9JTiwKKwlHUElPMzBfSTJTX1NEQVRBX09VVCwKKwlHUElPMzFfSTJTX1NZTkMsCisKIAkvKiBNTUMgKi8KIAlHUElPMzJfTU1DX0NMSywKIAlHUElPMTEyX01NQ19DTUQsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvZG1hLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvZG1hLmMKaW5kZXggNTUyYjRjNy4uNDQwYzAxNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2RtYS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9kbWEuYwpAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgPG1hY2gvcmVncy1tZW0uaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtbGNkLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLXNkaS5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvcmVncy1paXMuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3MtaWlzLmg+CiAjaW5jbHVkZSA8cGxhdC9yZWdzLXNwaS5oPgogCiBzdGF0aWMgc3RydWN0IHMzYzI0eHhfZG1hX21hcCBfX2luaXRkYXRhIHMzYzI0MTBfZG1hX21hcHBpbmdzW10gPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvdXNiLXNpbXRlYy5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3VzYi1zaW10ZWMuYwppbmRleCA2MDc4ZjA5Li44MzMxZThkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvdXNiLXNpbXRlYy5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC91c2Itc2ltdGVjLmMKQEAgLTI5LDEzICsyOSwxNCBAQAogCiAjaW5jbHVkZSA8bWFjaC9iYXN0LW1hcC5oPgogI2luY2x1ZGUgPG1hY2gvYmFzdC1pcnEuaD4KLSNpbmNsdWRlIDxtYWNoL3VzYi1jb250cm9sLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAKKyNpbmNsdWRlIDxwbGF0L3VzYi1jb250cm9sLmg+CiAjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CisKICNpbmNsdWRlICJ1c2Itc2ltdGVjLmgiCiAKIC8qIGNvbnRyb2wgcG93ZXIgYW5kIG1vbml0b3Igb3Zlci1jdXJyZW50IGV2ZW50cyBvbiB2YXJpb3VzIFNpbXRlYwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL2RtYS5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL2RtYS5jCmluZGV4IDkxOTg1NmMuLjllMzQ3ODUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMi9kbWEuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTIvZG1hLmMKQEAgLTI5LDggKzI5LDggQEAKICNpbmNsdWRlIDxtYWNoL3JlZ3MtbWVtLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWxjZC5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1zZGkuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3JlZ3MtczNjMjQxMi1paXMuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3JlZ3MtaWlzLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLXMzYzI0MTItaWlzLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLWlpcy5oPgogI2luY2x1ZGUgPHBsYXQvcmVncy1zcGkuaD4KIAogI2RlZmluZSBNQVAoeCkgeyAoeCl8IERNQV9DSF9WQUxJRCwgKHgpfCBETUFfQ0hfVkFMSUQsICh4KXwgRE1BX0NIX1ZBTElELCAoeCl8IERNQV9DSF9WQUxJRCB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvZG1hLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvZG1hLmMKaW5kZXggNWI1ZWUwYi4uNjliNmNmMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL2RtYS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9kbWEuYwpAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgPG1hY2gvcmVncy1tZW0uaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtbGNkLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLXNkaS5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvcmVncy1paXMuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3MtaWlzLmg+CiAjaW5jbHVkZSA8cGxhdC9yZWdzLXNwaS5oPgogCiBzdGF0aWMgc3RydWN0IHMzYzI0eHhfZG1hX21hcCBfX2luaXRkYXRhIHMzYzI0NDBfZG1hX21hcHBpbmdzW10gPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0NDMvZG1hLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDMvZG1hLmMKaW5kZXggMmE1OGE0ZC4uODQzMGU1ODIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQ0My9kbWEuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDMvZG1hLmMKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlIDxtYWNoL3JlZ3MtbWVtLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWxjZC5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1zZGkuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3JlZ3MtaWlzLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLWlpcy5oPgogI2luY2x1ZGUgPHBsYXQvcmVncy1zcGkuaD4KIAogI2RlZmluZSBNQVAoeCkgeyBcCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9yaW9uL2luY2x1ZGUvcGxhdC9vcmlvbjV4X3dkdC5oIGIvYXJjaC9hcm0vcGxhdC1vcmlvbi9pbmNsdWRlL3BsYXQvb3Jpb241eF93ZHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzljZjZhMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtb3Jpb24vaW5jbHVkZS9wbGF0L29yaW9uNXhfd2R0LmgKQEAgLTAsMCArMSwxOCBAQAorLyoKKyAqIGFyY2gvYXJtL3BsYXQtb3Jpb24vaW5jbHVkZS9wbGF0L29yaW9uNXhfd2R0LmgKKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKyNpZm5kZWYgX19QTEFUX09SSU9ONVhfV0RUX0gKKyNkZWZpbmUgX19QTEFUX09SSU9ONVhfV0RUX0gKKworc3RydWN0IG9yaW9uNXhfd2R0X3BsYXRmb3JtX2RhdGEgeworCXUzMgl0Y2xrOwkJLyogbm8gPGxpbnV4L2Nsay5oPiBzdXBwb3J0IHlldCAqLworfTsKKworCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9hdWRpby5oIGIvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L2F1ZGlvLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvYXVkaW8uaApyZW5hbWUgdG8gYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L2F1ZGlvLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9wbGF0LXMzYzI0eHgvcmVncy1zM2MyNDEyLWlpcy5oIGIvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L3JlZ3MtczNjMjQxMi1paXMuaApzaW1pbGFyaXR5IGluZGV4IDkzJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MyNHh4L3JlZ3MtczNjMjQxMi1paXMuaApyZW5hbWUgdG8gYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L3JlZ3MtczNjMjQxMi1paXMuaAppbmRleCAyNWQ0MDU4Li4wZmFkNzU3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MyNHh4L3JlZ3MtczNjMjQxMi1paXMuaAorKysgYi9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvcmVncy1zM2MyNDEyLWlpcy5oCkBAIC0zMyw2ICszMyw5IEBACiAjZGVmaW5lIFMzQzI0MTJfSUlTQ09OX1JYRE1BX0FDVElWRQkoMSA8PCAxKQogI2RlZmluZSBTM0MyNDEyX0lJU0NPTl9JSVNfQUNUSVZFCSgxIDw8IDApCiAKKyNkZWZpbmUgUzNDNjRYWF9JSVNNT0RfSU1TX1BDTEsJCSgwIDw8IDEwKQorI2RlZmluZSBTM0M2NFhYX0lJU01PRF9JTVNfU1lTTVVYCSgxIDw8IDEwKQorCiAjZGVmaW5lIFMzQzI0MTJfSUlTTU9EX01BU1RFUl9JTlRFUk5BTAkoMCA8PCAxMCkKICNkZWZpbmUgUzNDMjQxMl9JSVNNT0RfTUFTVEVSX0VYVEVSTkFMCSgxIDw8IDEwKQogI2RlZmluZSBTM0MyNDEyX0lJU01PRF9TTEFWRQkJKDIgPDwgMTApCkBAIC00NCw4ICs0Nyw4IEBACiAjZGVmaW5lIFMzQzI0MTJfSUlTTU9EX0xSX0xMT1cJCSgwIDw8IDcpCiAjZGVmaW5lIFMzQzI0MTJfSUlTTU9EX0xSX1JMT1cJCSgxIDw8IDcpCiAjZGVmaW5lIFMzQzI0MTJfSUlTTU9EX1NERl9JSVMJCSgwIDw8IDUpCi0jZGVmaW5lIFMzQzI0MTJfSUlTTU9EX1NERl9NU0IJCSgwIDw8IDUpCi0jZGVmaW5lIFMzQzI0MTJfSUlTTU9EX1NERl9MU0IJCSgwIDw8IDUpCisjZGVmaW5lIFMzQzI0MTJfSUlTTU9EX1NERl9NU0IJCSgxIDw8IDUpCisjZGVmaW5lIFMzQzI0MTJfSUlTTU9EX1NERl9MU0IJCSgyIDw8IDUpCiAjZGVmaW5lIFMzQzI0MTJfSUlTTU9EX1NERl9NQVNLCQkoMyA8PCA1KQogI2RlZmluZSBTM0MyNDEyX0lJU01PRF9SQ0xLXzI1NkZTCSgwIDw8IDMpCiAjZGVmaW5lIFMzQzI0MTJfSUlTTU9EX1JDTEtfNTEyRlMJKDEgPDwgMykKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvdXNiLWNvbnRyb2wuaCBiL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC91c2ItY29udHJvbC5oCnNpbWlsYXJpdHkgaW5kZXggODMlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvdXNiLWNvbnRyb2wuaApyZW5hbWUgdG8gYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L3VzYi1jb250cm9sLmgKaW5kZXggY2Q5MWQxNS4uODIyYzg3ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC91c2ItY29udHJvbC5oCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC91c2ItY29udHJvbC5oCkBAIC0xLDkgKzEsOSBAQAotLyogYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC91c2ItY29udHJvbC5oCisvKiBhcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvdXNiLWNvbnRyb2wuaAogICoKICAqIENvcHlyaWdodCAoYykgMjAwNCBTaW10ZWMgRWxlY3Ryb25pY3MKICAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KICAqCi0gKiBTM0MyNDEwIC0gdXNiIHBvcnQgaW5mb3JtYXRpb24KKyAqIFMzQyAtIFVTQiBob3N0IHBvcnQgaW5mb3JtYXRpb24KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKQEAgLTExLDcgKzExLDcgQEAKICovCiAKICNpZm5kZWYgX19BU01fQVJDSF9VU0JDT05UUk9MX0gKLSNkZWZpbmUgX19BU01fQVJDSF9VU0JDT05UUk9MX0ggImFyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvdXNiLWNvbnRyb2wuaCIKKyNkZWZpbmUgX19BU01fQVJDSF9VU0JDT05UUk9MX0gKIAogI2RlZmluZSBTM0NfSENERkxHX1VTRUQJKDEpCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9wbGF0LXMzYzI0eHgvcmVncy1paXMuaCBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvcmVncy1paXMuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjMjR4eC9yZWdzLWlpcy5oCnJlbmFtZSB0byBhcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L3JlZ3MtaWlzLmgKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvYm9hcmRzL2hhbW1lcmhlYWQvZmxhc2guYyBiL2FyY2gvYXZyMzIvYm9hcmRzL2hhbW1lcmhlYWQvZmxhc2guYwppbmRleCBhOThjNmRkLi41NTliYmNiMCAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9ib2FyZHMvaGFtbWVyaGVhZC9mbGFzaC5jCisrKyBiL2FyY2gvYXZyMzIvYm9hcmRzL2hhbW1lcmhlYWQvZmxhc2guYwpAQCAtMTUsNyArMTUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL2lzcDExNnguaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAKICNpbmNsdWRlIDxtYWNoL3BvcnRtdXguaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vc29ja2V0LmggYi9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL3NvY2tldC5oCmluZGV4IDM1ODYzZjIuLjA0Yzg2MDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vc29ja2V0LmgKKysrIGIvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9zb2NrZXQuaApAQCAtNTQsNCArNTQsNyBAQAogCiAjZGVmaW5lIFNPX01BUksJCQkzNgogCisjZGVmaW5lIFNPX1RJTUVTVEFNUElORwkJMzcKKyNkZWZpbmUgU0NNX1RJTUVTVEFNUElORwlTT19USU1FU1RBTVBJTkcKKwogI2VuZGlmIC8qIF9fQVNNX0FWUjMyX1NPQ0tFVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL3N3YWIuaCBiL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vc3dhYi5oCmluZGV4IGExNGFhNWIuLjE0Y2M3MzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vc3dhYi5oCisrKyBiL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vc3dhYi5oCkBAIC00LDcgKzQsNyBAQAogI2lmbmRlZiBfX0FTTV9BVlIzMl9TV0FCX0gKICNkZWZpbmUgX19BU01fQVZSMzJfU1dBQl9ICiAKLSNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAKICNkZWZpbmUgX19TV0FCXzY0X1RIUlVfMzJfXwpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS91YWNjZXNzLmggYi9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaAppbmRleCBlZDA5MjM5Li4yNDViMmVlMiAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS91YWNjZXNzLmgKKysrIGIvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS91YWNjZXNzLmgKQEAgLTIzMCwxMCArMjMwLDEwIEBACiAJYXNtIHZvbGF0aWxlKAkJCQkJCQlcCiAJCSIxOglsZC4iIHN1ZmZpeCAiCSUxLCAlMwkJCVxuIglcCiAJCSIyOgkJCQkJCVxuIglcCi0JCSIJLnNlY3Rpb24gLmZpeHVwLCBcImF4XCIJCQlcbiIJXAorCQkiCS5zdWJzZWN0aW9uIDEJCQkJXG4iCVwKIAkJIjM6CW1vdgklMCwgJTQJCQkJXG4iCVwKIAkJIglyam1wCTJiCQkJCVxuIglcCi0JCSIJLnByZXZpb3VzCQkJCVxuIglcCisJCSIJLnN1YnNlY3Rpb24gMAkJCQlcbiIJXAogCQkiCS5zZWN0aW9uIF9fZXhfdGFibGUsIFwiYVwiCQlcbiIJXAogCQkiCS5sb25nCTFiLCAzYgkJCQlcbiIJXAogCQkiCS5wcmV2aW91cwkJCQlcbiIJXApAQCAtMjk1LDEwICsyOTUsMTAgQEAKIAlhc20gdm9sYXRpbGUoCQkJCQkJCVwKIAkJIjE6CXN0LiIgc3VmZml4ICIJJTEsICUzCQkJXG4iCVwKIAkJIjI6CQkJCQkJXG4iCVwKLQkJIgkuc2VjdGlvbiAuZml4dXAsIFwiYXhcIgkJCVxuIglcCisJCSIJLnN1YnNlY3Rpb24gMQkJCQlcbiIJXAogCQkiMzoJbW92CSUwLCAlNAkJCQlcbiIJXAogCQkiCXJqbXAJMmIJCQkJXG4iCVwKLQkJIgkucHJldmlvdXMJCQkJXG4iCVwKKwkJIgkuc3Vic2VjdGlvbiAwCQkJCVxuIglcCiAJCSIJLnNlY3Rpb24gX19leF90YWJsZSwgXCJhXCIJCVxuIglcCiAJCSIJLmxvbmcJMWIsIDNiCQkJCVxuIglcCiAJCSIJLnByZXZpb3VzCQkJCVxuIglcCmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2tlcm5lbC9lbnRyeS1hdnIzMmIuUyBiL2FyY2gvYXZyMzIva2VybmVsL2VudHJ5LWF2cjMyYi5TCmluZGV4IDMzZDQ5MzcuLjAwOWE4MDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIva2VybmVsL2VudHJ5LWF2cjMyYi5TCisrKyBiL2FyY2gvYXZyMzIva2VybmVsL2VudHJ5LWF2cjMyYi5TCkBAIC0xNTAsMTAgKzE1MCwxMCBAQAogCXRsYm1pc3NfcmVzdG9yZQogCXN1YglzcCwgNAogCXN0bXRzCS0tc3AsIHIwLWxyCi0JcmNhbGwJc2F2ZV9mdWxsX2NvbnRleHRfZXgKKwljYWxsCXNhdmVfZnVsbF9jb250ZXh0X2V4CiAJbWZzcglyMTIsIFNZU1JFR19FQ1IKIAltb3YJcjExLCBzcAotCXJjYWxsCWRvX3BhZ2VfZmF1bHQKKwljYWxsCWRvX3BhZ2VfZmF1bHQKIAlyam1wCXJldF9mcm9tX2V4Y2VwdGlvbgogCiAJLmFsaWduCTIKQEAgLTI1MCw3ICsyNTAsNyBAQAogCiAJLmdsb2JhbCByZXRfZnJvbV9mb3JrCiByZXRfZnJvbV9mb3JrOgotCXJjYWxsICAgc2NoZWR1bGVfdGFpbAorCWNhbGwgICBzY2hlZHVsZV90YWlsCiAKIAkvKiBjaGVjayBmb3Igc3lzY2FsbCB0cmFjaW5nICovCiAJZ2V0X3RocmVhZF9pbmZvIHIwCkBAIC0yNjEsNyArMjYxLDcgQEAKIAogc3lzY2FsbF90cmFjZV9lbnRlcjoKIAlwdXNobQlyOC1yMTIKLQlyY2FsbAlzeXNjYWxsX3RyYWNlCisJY2FsbAlzeXNjYWxsX3RyYWNlCiAJcG9wbQlyOC1yMTIKIAlyam1wCXN5c2NhbGxfdHJhY2VfY29udAogCkBAIC0yNjksMTQgKzI2OSwxNCBAQAogCWJsZAlyMSwgVElGX1NZU0NBTExfVFJBQ0UKIAlicmNjCTFmCiAJdW5tYXNrX2ludGVycnVwdHMKLQlyY2FsbAlzeXNjYWxsX3RyYWNlCisJY2FsbAlzeXNjYWxsX3RyYWNlCiAJbWFza19pbnRlcnJ1cHRzCiAJbGQudwlyMSwgcjBbVElfZmxhZ3NdCiAKIDE6CWJsZAlyMSwgVElGX05FRURfUkVTQ0hFRAogCWJyY2MJMmYKIAl1bm1hc2tfaW50ZXJydXB0cwotCXJjYWxsCXNjaGVkdWxlCisJY2FsbAlzY2hlZHVsZQogCW1hc2tfaW50ZXJydXB0cwogCWxkLncJcjEsIHIwW1RJX2ZsYWdzXQogCXJqbXAJMWIKQEAgLTI4Nyw3ICsyODcsNyBAQAogCXVubWFza19pbnRlcnJ1cHRzCiAJbW92CXIxMiwgc3AKIAltb3YJcjExLCByMAotCXJjYWxsCWRvX25vdGlmeV9yZXN1bWUKKwljYWxsCWRvX25vdGlmeV9yZXN1bWUKIAltYXNrX2ludGVycnVwdHMKIAlsZC53CXIxLCByMFtUSV9mbGFnc10KIAlyam1wCTFiCkBAIC0zOTQsNyArMzk0LDcgQEAKIAogCW1mc3IJcjEyLCBTWVNSRUdfRUNSCiAJbW92CXIxMSwgc3AKLQlyY2FsbAlkb19jcml0aWNhbF9leGNlcHRpb24KKwljYWxsCWRvX2NyaXRpY2FsX2V4Y2VwdGlvbgogCiAJLyogV2Ugc2hvdWxkIG5ldmVyIGdldCBoZXJlLi4uICovCiBiYWRfcmV0dXJuOgpAQCAtNDA3LDE4ICs0MDcsMTggQEAKIGRvX2J1c19lcnJvcl93cml0ZToKIAlzdWIJc3AsIDQKIAlzdG10cwktLXNwLCByMC1scgotCXJjYWxsCXNhdmVfZnVsbF9jb250ZXh0X2V4CisJY2FsbAlzYXZlX2Z1bGxfY29udGV4dF9leAogCW1vdglyMTEsIDEKIAlyam1wCTFmCiAKIGRvX2J1c19lcnJvcl9yZWFkOgogCXN1YglzcCwgNAogCXN0bXRzCS0tc3AsIHIwLWxyCi0JcmNhbGwJc2F2ZV9mdWxsX2NvbnRleHRfZXgKKwljYWxsCXNhdmVfZnVsbF9jb250ZXh0X2V4CiAJbW92CXIxMSwgMAogMToJbWZzcglyMTIsIFNZU1JFR19CRUFSCiAJbW92CXIxMCwgc3AKLQlyY2FsbAlkb19idXNfZXJyb3IKKwljYWxsCWRvX2J1c19lcnJvcgogCXJqbXAJcmV0X2Zyb21fZXhjZXB0aW9uCiAKIAkuYWxpZ24JMQpAQCAtNDMzLDcgKzQzMyw3IEBACiAxOglwdXNobQlyOCwgcjkJLyogUEMgYW5kIFNSICovCiAJbWZzcglyMTIsIFNZU1JFR19FQ1IKIAltb3YJcjExLCBzcAotCXJjYWxsCWRvX25taQorCWNhbGwJZG9fbm1pCiAJcG9wbQlyOC1yOQogCW10c3IJU1lTUkVHX1JBUl9OTUksIHI4CiAJdHN0CXIwLCByMApAQCAtNDU3LDI5ICs0NTcsMjkgQEAKIGhhbmRsZV9hZGRyZXNzX2ZhdWx0OgogCXN1YglzcCwgNAogCXN0bXRzCS0tc3AsIHIwLWxyCi0JcmNhbGwJc2F2ZV9mdWxsX2NvbnRleHRfZXgKKwljYWxsCXNhdmVfZnVsbF9jb250ZXh0X2V4CiAJbWZzcglyMTIsIFNZU1JFR19FQ1IKIAltb3YJcjExLCBzcAotCXJjYWxsCWRvX2FkZHJlc3NfZXhjZXB0aW9uCisJY2FsbAlkb19hZGRyZXNzX2V4Y2VwdGlvbgogCXJqbXAJcmV0X2Zyb21fZXhjZXB0aW9uCiAKIGhhbmRsZV9wcm90ZWN0aW9uX2ZhdWx0OgogCXN1YglzcCwgNAogCXN0bXRzCS0tc3AsIHIwLWxyCi0JcmNhbGwJc2F2ZV9mdWxsX2NvbnRleHRfZXgKKwljYWxsCXNhdmVfZnVsbF9jb250ZXh0X2V4CiAJbWZzcglyMTIsIFNZU1JFR19FQ1IKIAltb3YJcjExLCBzcAotCXJjYWxsCWRvX3BhZ2VfZmF1bHQKKwljYWxsCWRvX3BhZ2VfZmF1bHQKIAlyam1wCXJldF9mcm9tX2V4Y2VwdGlvbgogCiAJLmFsaWduCTEKIGRvX2lsbGVnYWxfb3Bjb2RlX2xsOgogCXN1YglzcCwgNAogCXN0bXRzCS0tc3AsIHIwLWxyCi0JcmNhbGwJc2F2ZV9mdWxsX2NvbnRleHRfZXgKKwljYWxsCXNhdmVfZnVsbF9jb250ZXh0X2V4CiAJbWZzcglyMTIsIFNZU1JFR19FQ1IKIAltb3YJcjExLCBzcAotCXJjYWxsCWRvX2lsbGVnYWxfb3Bjb2RlCisJY2FsbAlkb19pbGxlZ2FsX29wY29kZQogCXJqbXAJcmV0X2Zyb21fZXhjZXB0aW9uCiAKIGRvX2R0bGJfbW9kaWZpZWQ6CkBAIC01MTMsMTEgKzUxMywxMSBAQAogZG9fZnBlX2xsOgogCXN1YglzcCwgNAogCXN0bXRzCS0tc3AsIHIwLWxyCi0JcmNhbGwJc2F2ZV9mdWxsX2NvbnRleHRfZXgKKwljYWxsCXNhdmVfZnVsbF9jb250ZXh0X2V4CiAJdW5tYXNrX2ludGVycnVwdHMKIAltb3YJcjEyLCAyNgogCW1vdglyMTEsIHNwCi0JcmNhbGwJZG9fZnBlCisJY2FsbAlkb19mcGUKIAlyam1wCXJldF9mcm9tX2V4Y2VwdGlvbgogCiByZXRfZnJvbV9leGNlcHRpb246CkBAIC01NTMsNyArNTUzLDcgQEAKIAlsZGRzcAlyNCwgc3BbUkVHX1NSXQogCWJsZAlyNCwgU1lTUkVHX0dNX09GRlNFVAogCWJyY3MJMWYKLQlyY2FsbAlwcmVlbXB0X3NjaGVkdWxlX2lycQorCWNhbGwJcHJlZW1wdF9zY2hlZHVsZV9pcnEKIDE6CiAjZW5kaWYKIApAQCAtNTgyLDcgKzU4Miw3IEBACiAJYmxkCXIxLCBUSUZfTkVFRF9SRVNDSEVECiAJYnJjYwkxZgogCXVubWFza19pbnRlcnJ1cHRzCi0JcmNhbGwJc2NoZWR1bGUKKwljYWxsCXNjaGVkdWxlCiAJbWFza19pbnRlcnJ1cHRzCiAJbGQudwlyMSwgcjBbVElfZmxhZ3NdCiAJcmptcAlmYXVsdF9leGl0X3dvcmsKQEAgLTU5Myw3ICs1OTMsNyBAQAogCXVubWFza19pbnRlcnJ1cHRzCiAJbW92CXIxMiwgc3AKIAltb3YJcjExLCByMAotCXJjYWxsCWRvX25vdGlmeV9yZXN1bWUKKwljYWxsCWRvX25vdGlmeV9yZXN1bWUKIAltYXNrX2ludGVycnVwdHMKIAlsZC53CXIxLCByMFtUSV9mbGFnc10KIAlyam1wCWZhdWx0X2V4aXRfd29yawpAQCAtNjE2LDEwICs2MTYsMTAgQEAKIAogLkxkZWJ1Z19maXh1cF9jb250OgogI2lmZGVmIENPTkZJR19UUkFDRV9JUlFGTEFHUwotCXJjYWxsCXRyYWNlX2hhcmRpcnFzX29mZgorCWNhbGwJdHJhY2VfaGFyZGlycXNfb2ZmCiAjZW5kaWYKIAltb3YJcjEyLCBzcAotCXJjYWxsCWRvX2RlYnVnCisJY2FsbAlkb19kZWJ1ZwogCW1vdglzcCwgcjEyCiAKIAlsZGRzcAlyMiwgc3BbUkVHX1NSXQpAQCAtNjQzLDcgKzY0Myw3IEBACiAJbXRzcglTWVNSRUdfUlNSX0RCRywgcjExCiAJbXRzcglTWVNSRUdfUkFSX0RCRywgcjEwCiAjaWZkZWYgQ09ORklHX1RSQUNFX0lSUUZMQUdTCi0JcmNhbGwJdHJhY2VfaGFyZGlycXNfb24KKwljYWxsCXRyYWNlX2hhcmRpcnFzX29uCiAxOgogI2VuZGlmCiAJbGRtdHMJc3ArKywgcjAtbHIKQEAgLTY3Niw3ICs2NzYsNyBAQAogI2lmZGVmIENPTkZJR19UUkFDRV9JUlFGTEFHUwogCWJsZAlyMTEsIFNZU1JFR19HTV9PRkZTRVQKIAlicmNjCTFmCi0JcmNhbGwJdHJhY2VfaGFyZGlycXNfb24KKwljYWxsCXRyYWNlX2hhcmRpcnFzX29uCiAxOgogI2VuZGlmCiAJbWZzcglyMiwgU1lTUkVHX1NSCkBAIC03NDcsNyArNzQ3LDcgQEAKIAltb3YJcjExLCBzcAogCW1vdglyMTIsIFxsZXZlbAogCi0JcmNhbGwJZG9fSVJRCisJY2FsbAlkb19JUlEKIAogCWxkZHNwCXI0LCBzcFtSRUdfU1JdCiAJYmZleHR1CXI0LCByNCwgU1lTUkVHX00wX09GRlNFVCwgMwpAQCAtNzY3LDcgKzc2Nyw3IEBACiAKIDE6CiAjaWZkZWYgQ09ORklHX1RSQUNFX0lSUUZMQUdTCi0JcmNhbGwJdHJhY2VfaGFyZGlycXNfb24KKwljYWxsCXRyYWNlX2hhcmRpcnFzX29uCiAjZW5kaWYKIAlwb3BtCXI4LXI5CiAJbXRzcglyYXJfaW50XGxldmVsLCByOApAQCAtODA3LDcgKzgwNyw3IEBACiAJbGRkc3AJcjQsIHNwW1JFR19TUl0KIAlibGQJcjQsIFNZU1JFR19HTV9PRkZTRVQKIAlicmNzCTFiCi0JcmNhbGwJcHJlZW1wdF9zY2hlZHVsZV9pcnEKKwljYWxsCXByZWVtcHRfc2NoZWR1bGVfaXJxCiAjZW5kaWYKIAlyam1wCTFiCiAJLmVuZG0KZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIva2VybmVsL2lycS5jIGIvYXJjaC9hdnIzMi9rZXJuZWwvaXJxLmMKaW5kZXggYThlNzY3ZC4uOWY1NzIyMiAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9hdnIzMi9rZXJuZWwvaXJxLmMKQEAgLTU4LDcgKzU4LDcgQEAKIAogCQlzZXFfcHJpbnRmKHAsICIlM2Q6ICIsIGkpOwogCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkKLQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfY3B1KGNwdSkuaXJxc1tpXSk7CisJCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXNfY3B1KGksIGNwdSkpOwogCQlzZXFfcHJpbnRmKHAsICIgJThzIiwgaXJxX2Rlc2NbaV0uY2hpcC0+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+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogc3RydWN0IGt2bV9yZWdzIHsKIAlfX3U2NCBwYzsKQEAgLTUyLDQgKzUyLDExIEBACiAJX191NjQgZnByWzMyXTsKIH07CiAKK3N0cnVjdCBrdm1fZGVidWdfZXhpdF9hcmNoIHsKK307CisKKy8qIGZvciBLVk1fU0VUX0dVRVNUX0RFQlVHICovCitzdHJ1Y3Qga3ZtX2d1ZXN0X2RlYnVnX2FyY2ggeworfTsKKwogI2VuZGlmIC8qIF9fTElOVVhfS1ZNX1BPV0VSUENfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV80NHguaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fNDR4LmgKaW5kZXggZjQ5MDMxYi4uZDIyZDM5OSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV80NHguaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtXzQ0eC5oCkBAIC0yOCw2ICsyOCwxMyBAQAogICogbmVlZCB0byBmaW5kIHNvbWUgd2F5IG9mIGFkdmVydGlzaW5nIGl0LiAqLwogI2RlZmluZSBLVk00NHhfR1VFU1RfVExCX1NJWkUgNjQKIAorc3RydWN0IGt2bXBwY180NHhfdGxiZSB7CisJdTMyIHRpZDsgLyogT25seSB0aGUgbG93IDggYml0cyBhcmUgdXNlZC4gKi8KKwl1MzIgd29yZDA7CisJdTMyIHdvcmQxOworCXUzMiB3b3JkMjsKK307CisKIHN0cnVjdCBrdm1wcGNfNDR4X3NoYWRvd19yZWYgewogCXN0cnVjdCBwYWdlICpwYWdlOwogCXUxNiBndGxiX2luZGV4OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9hc20uaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fYXNtLmgKaW5kZXggMjE5Nzc2NC4uNTZiZmFlNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9hc20uaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2FzbS5oCkBAIC00Miw3ICs0MiwxMiBAQAogI2RlZmluZSBCT09LRV9JTlRFUlJVUFRfRFRMQl9NSVNTIDEzCiAjZGVmaW5lIEJPT0tFX0lOVEVSUlVQVF9JVExCX01JU1MgMTQKICNkZWZpbmUgQk9PS0VfSU5URVJSVVBUX0RFQlVHIDE1Ci0jZGVmaW5lIEJPT0tFX01BWF9JTlRFUlJVUFQgMTUKKworLyogRTUwMCAqLworI2RlZmluZSBCT09LRV9JTlRFUlJVUFRfU1BFX1VOQVZBSUwgMzIKKyNkZWZpbmUgQk9PS0VfSU5URVJSVVBUX1NQRV9GUF9EQVRBIDMzCisjZGVmaW5lIEJPT0tFX0lOVEVSUlVQVF9TUEVfRlBfUk9VTkQgMzQKKyNkZWZpbmUgQk9PS0VfSU5URVJSVVBUX1BFUkZPUk1BTkNFX01PTklUT1IgMzUKIAogI2RlZmluZSBSRVNVTUVfRkxBR19OViAgICAgICAgICAoMTw8MCkgIC8qIFJlbG9hZCBndWVzdCBub252b2xhdGlsZSBzdGF0ZT8gKi8KICNkZWZpbmUgUkVTVU1FX0ZMQUdfSE9TVCAgICAgICAgKDE8PDEpICAvKiBSZXN1bWUgaG9zdD8gKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fZTUwMC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9lNTAwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ0OTdjZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fZTUwMC5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBBdXRob3I6IFl1IExpdSwgPHl1LmxpdUBmcmVlc2NhbGUuY29tPgorICoKKyAqIERlc2NyaXB0aW9uOgorICogVGhpcyBmaWxlIGlzIGRlcml2ZWQgZnJvbSBhcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtXzQ0eC5oLAorICogYnkgSG9sbGlzIEJsYW5jaGFyZCA8aG9sbGlzYkB1cy5pYm0uY29tPi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLCBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfX0FTTV9LVk1fRTUwMF9IX18KKyNkZWZpbmUgX19BU01fS1ZNX0U1MDBfSF9fCisKKyNpbmNsdWRlIDxsaW51eC9rdm1faG9zdC5oPgorCisjZGVmaW5lIEJPT0tFX0lOVEVSUlVQVF9TSVpFIDM2CisKKyNkZWZpbmUgRTUwMF9QSURfTlVNICAgMworI2RlZmluZSBFNTAwX1RMQl9OVU0gICAyCisKK3N0cnVjdCB0bGJleworCXUzMiBtYXMxOworCXUzMiBtYXMyOworCXUzMiBtYXMzOworCXUzMiBtYXM3OworfTsKKworc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgeworCS8qIFVubW9kaWZpZWQgY29weSBvZiB0aGUgZ3Vlc3QncyBUTEIuICovCisJc3RydWN0IHRsYmUgKmd1ZXN0X3RsYltFNTAwX1RMQl9OVU1dOworCS8qIFRMQiB0aGF0J3MgYWN0dWFsbHkgdXNlZCB3aGVuIHRoZSBndWVzdCBpcyBydW5uaW5nLiAqLworCXN0cnVjdCB0bGJlICpzaGFkb3dfdGxiW0U1MDBfVExCX05VTV07CisJLyogUGFnZXMgd2hpY2ggYXJlIHJlZmVyZW5jZWQgaW4gdGhlIHNoYWRvdyBUTEIuICovCisJc3RydWN0IHBhZ2UgKipzaGFkb3dfcGFnZXNbRTUwMF9UTEJfTlVNXTsKKworCXVuc2lnbmVkIGludCBndWVzdF90bGJfc2l6ZVtFNTAwX1RMQl9OVU1dOworCXVuc2lnbmVkIGludCBzaGFkb3dfdGxiX3NpemVbRTUwMF9UTEJfTlVNXTsKKwl1bnNpZ25lZCBpbnQgZ3Vlc3RfdGxiX252W0U1MDBfVExCX05VTV07CisKKwl1MzIgaG9zdF9waWRbRTUwMF9QSURfTlVNXTsKKwl1MzIgcGlkW0U1MDBfUElEX05VTV07CisKKwl1MzIgbWFzMDsKKwl1MzIgbWFzMTsKKwl1MzIgbWFzMjsKKwl1MzIgbWFzMzsKKwl1MzIgbWFzNDsKKwl1MzIgbWFzNTsKKwl1MzIgbWFzNjsKKwl1MzIgbWFzNzsKKwl1MzIgbDFjc3IxOworCXUzMiBoaWQwOworCXUzMiBoaWQxOworCisJc3RydWN0IGt2bV92Y3B1IHZjcHU7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp0b19lNTAwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHZjcHUsIHN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwLCB2Y3B1KTsKK30KKworI2VuZGlmIC8qIF9fQVNNX0tWTV9FNTAwX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAppbmRleCBjMWU0MzZmLi5kZmRmMTNjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2hvc3QuaApAQCAtNjQsMTMgKzY0LDYgQEAKIAl1MzIgaGFsdF93YWtldXA7CiB9OwogCi1zdHJ1Y3Qga3ZtcHBjXzQ0eF90bGJlIHsKLQl1MzIgdGlkOyAvKiBPbmx5IHRoZSBsb3cgOCBiaXRzIGFyZSB1c2VkLiAqLwotCXUzMiB3b3JkMDsKLQl1MzIgd29yZDE7Ci0JdTMyIHdvcmQyOwotfTsKLQogZW51bSBrdm1fZXhpdF90eXBlcyB7CiAJTU1JT19FWElUUywKIAlEQ1JfRVhJVFMsCkBAIC0xMTgsMTEgKzExMSw2IEBACiBzdHJ1Y3Qga3ZtX3ZjcHVfYXJjaCB7CiAJdTMyIGhvc3Rfc3RhY2s7CiAJdTMyIGhvc3RfcGlkOwotCXUzMiBob3N0X2RiY3IwOwotCXUzMiBob3N0X2RiY3IxOwotCXUzMiBob3N0X2RiY3IyOwotCXUzMiBob3N0X2lhY1s0XTsKLQl1MzIgaG9zdF9tc3I7CiAKIAl1NjQgZnByWzMyXTsKIAl1bG9uZyBncHJbMzJdOwpAQCAtMTU3LDcgKzE0NSw3IEBACiAJdTMyIHRidTsKIAl1MzIgdGNyOwogCXUzMiB0c3I7Ci0JdTMyIGl2b3JbMTZdOworCXUzMiBpdm9yWzY0XTsKIAl1bG9uZyBpdnByOwogCXUzMiBwaXI7CiAKQEAgLTE3MCw2ICsxNTgsNyBAQAogCXUzMiBjY3IxOwogCXUzMiBkYmNyMDsKIAl1MzIgZGJjcjE7CisJdTMyIGRic3I7CiAKICNpZmRlZiBDT05GSUdfS1ZNX0VYSVRfVElNSU5HCiAJc3RydWN0IGt2bXBwY19leGl0X3RpbWluZyB0aW1pbmdfZXhpdDsKQEAgLTIwMCwxMCArMTg5LDQgQEAKIAl1bnNpZ25lZCBsb25nIHBlbmRpbmdfZXhjZXB0aW9uczsKIH07CiAKLXN0cnVjdCBrdm1fZ3Vlc3RfZGVidWcgewotCWludCBlbmFibGVkOwotCXVuc2lnbmVkIGxvbmcgYnBbNF07Ci0JaW50IHNpbmdsZXN0ZXA7Ci19OwotCiAjZW5kaWYgLyogX19QT1dFUlBDX0tWTV9IT1NUX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9wcGMuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmgKaW5kZXggMzZkMmE1MC4uMmM2ZWUzNDkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9wcGMuaApAQCAtNTIsMTMgKzUyLDE5IEBACiBleHRlcm4gaW50IGt2bXBwY19lbXVsYXRlX21taW8oc3RydWN0IGt2bV9ydW4gKnJ1biwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIGV4dGVybiB2b2lkIGt2bXBwY19lbXVsYXRlX2RlYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCisvKiBDb3JlLXNwZWNpZmljIGhvb2tzICovCisKIGV4dGVybiB2b2lkIGt2bXBwY19tbXVfbWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGd2YWRkciwgZ3BhX3QgZ3BhZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdTY0IGFzaWQsIHUzMiBmbGFncywgdTMyIG1heF9ieXRlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBndGxiX2lkeCk7CiBleHRlcm4gdm9pZCBrdm1wcGNfbW11X3ByaXZfc3dpdGNoKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHVzZXJtb2RlKTsKIGV4dGVybiB2b2lkIGt2bXBwY19tbXVfc3dpdGNoX3BpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBwaWQpOwotCi0vKiBDb3JlLXNwZWNpZmljIGhvb2tzICovCitleHRlcm4gdm9pZCBrdm1wcGNfbW11X2Rlc3Ryb3koc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKK2V4dGVybiBpbnQga3ZtcHBjX21tdV9kdGxiX2luZGV4KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZWFkZHIpOworZXh0ZXJuIGludCBrdm1wcGNfbW11X2l0bGJfaW5kZXgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBlYWRkcik7CitleHRlcm4gZ3BhX3Qga3ZtcHBjX21tdV94bGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBndGxiX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3ZhX3QgZWFkZHIpOworZXh0ZXJuIHZvaWQga3ZtcHBjX21tdV9kdGxiX21pc3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKK2V4dGVybiB2b2lkIGt2bXBwY19tbXVfaXRsYl9taXNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiAKIGV4dGVybiBzdHJ1Y3Qga3ZtX3ZjcHUgKmt2bXBwY19jb3JlX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm0gKmt2bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBpZCk7CkBAIC03MSw5ICs3Nyw2IEBACiBleHRlcm4gdm9pZCBrdm1wcGNfY29yZV92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KTsKIGV4dGVybiB2b2lkIGt2bXBwY19jb3JlX3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiAKLWV4dGVybiB2b2lkIGt2bXBwY19jb3JlX2xvYWRfZ3Vlc3RfZGVidWdzdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwotZXh0ZXJuIHZvaWQga3ZtcHBjX2NvcmVfbG9hZF9ob3N0X2RlYnVnc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKLQogZXh0ZXJuIHZvaWQga3ZtcHBjX2NvcmVfZGVsaXZlcl9pbnRlcnJ1cHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiBleHRlcm4gaW50IGt2bXBwY19jb3JlX3BlbmRpbmdfZGVjKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiBleHRlcm4gdm9pZCBrdm1wcGNfY29yZV9xdWV1ZV9wcm9ncmFtKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11LWZzbC1ib29rZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdS1mc2wtYm9va2UuaAppbmRleCAzZjk0MWMwLi40Mjg1YjY0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11LWZzbC1ib29rZS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXUtZnNsLWJvb2tlLmgKQEAgLTc1LDYgKzc1LDggQEAKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAorZXh0ZXJuIHVuc2lnbmVkIGludCB0bGJjYW1faW5kZXg7CisKIHR5cGVkZWYgc3RydWN0IHsKIAl1bnNpZ25lZCBpbnQJaWQ7CiAJdW5zaWduZWQgaW50CWFjdGl2ZTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wczNmYi5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BzM2ZiLmgKaW5kZXggM2YxMjFmZS4uZTcyMzNhOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BzM2ZiLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BzM2ZiLmgKQEAgLTE5LDYgKzE5LDcgQEAKICNpZm5kZWYgX0FTTV9QT1dFUlBDX1BTM0ZCX0hfCiAjZGVmaW5lIF9BU01fUE9XRVJQQ19QUzNGQl9IXwogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgogCiAvKiBpb2N0bCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NvY2tldC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NvY2tldC5oCmluZGV4IGY1YTRlMTY4Li4xZTVjZmFkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc29ja2V0LmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NvY2tldC5oCkBAIC02MSw0ICs2MSw3IEBACiAKICNkZWZpbmUgU09fTUFSSwkJCTM2CiAKKyNkZWZpbmUgU09fVElNRVNUQU1QSU5HCQkzNworI2RlZmluZSBTQ01fVElNRVNUQU1QSU5HCVNPX1RJTUVTVEFNUElORworCiAjZW5kaWYJLyogX0FTTV9QT1dFUlBDX1NPQ0tFVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3B1X2luZm8uaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zcHVfaW5mby5oCmluZGV4IDM1NDVlZmIuLjEyODZjODIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zcHVfaW5mby5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zcHVfaW5mby5oCkBAIC0yMyw5ICsyMywxMCBAQAogI2lmbmRlZiBfU1BVX0lORk9fSAogI2RlZmluZSBfU1BVX0lORk9fSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogI2lmZGVmIF9fS0VSTkVMX18KICNpbmNsdWRlIDxhc20vc3B1Lmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNlbHNlCiBzdHJ1Y3QgbWZjX2NxX3NyIHsKIAlfX3U2NCBtZmNfY3FfZGF0YTBfUlc7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3dhYi5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N3YWIuaAppbmRleCBlZjgyNGFlLi5jNTgxZTNlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3dhYi5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zd2FiLmgKQEAgLTgsNyArOCw3IEBACiAgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKLSNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAKICNpZmRlZiBfX0dOVUNfXwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9hc20tb2Zmc2V0cy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9hc20tb2Zmc2V0cy5jCmluZGV4IDE5ZWU0OTEuLjQyZmU0ZGEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvYXNtLW9mZnNldHMuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2FzbS1vZmZzZXRzLmMKQEAgLTQ5LDcgKzQ5LDcgQEAKICNpbmNsdWRlIDxhc20vaXNlcmllcy9hbHBhY2EuaD4KICNlbmRpZgogI2lmZGVmIENPTkZJR19LVk0KLSNpbmNsdWRlIDxhc20va3ZtXzQ0eC5oPgorI2luY2x1ZGUgPGxpbnV4L2t2bV9ob3N0Lmg+CiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX0JPT0tFKSB8fCBkZWZpbmVkKENPTkZJR180MHgpCkBAIC0zNjEsOCArMzYxLDYgQEAKIAlERUZJTkUoUFRFX1NJWkUsIHNpemVvZihwdGVfdCkpOwogCiAjaWZkZWYgQ09ORklHX0tWTQotCURFRklORShUTEJFX0JZVEVTLCBzaXplb2Yoc3RydWN0IGt2bXBwY180NHhfdGxiZSkpOwotCiAJREVGSU5FKFZDUFVfSE9TVF9TVEFDSywgb2Zmc2V0b2Yoc3RydWN0IGt2bV92Y3B1LCBhcmNoLmhvc3Rfc3RhY2spKTsKIAlERUZJTkUoVkNQVV9IT1NUX1BJRCwgb2Zmc2V0b2Yoc3RydWN0IGt2bV92Y3B1LCBhcmNoLmhvc3RfcGlkKSk7CiAJREVGSU5FKFZDUFVfR1BSUywgb2Zmc2V0b2Yoc3RydWN0IGt2bV92Y3B1LCBhcmNoLmdwcikpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9pcnEuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaXJxLmMKaW5kZXggMjNiOGI1ZS4uMTdlZmI3MSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2lycS5jCkBAIC0xOTAsNyArMTkwLDcgQEAKIAkJc2VxX3ByaW50ZihwLCAiJTNkOiAiLCBpKTsKICNpZmRlZiBDT05GSUdfU01QCiAJCWZvcl9lYWNoX29ubGluZV9jcHUoaikKLQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfY3B1KGopLmlycXNbaV0pOworCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzX2NwdShpLCBqKSk7CiAjZWxzZQogCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXMoaSkpOwogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vNDR4LmMgYi9hcmNoL3Bvd2VycGMva3ZtLzQ0eC5jCmluZGV4IGE2NmJlYzUuLjBjZWY4MDkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vNDR4LmMKKysrIGIvYXJjaC9wb3dlcnBjL2t2bS80NHguYwpAQCAtMjgsNzIgKzI4LDYgQEAKIAogI2luY2x1ZGUgIjQ0eF90bGIuaCIKIAotLyogTm90ZTogY2xlYXJpbmcgTVNSW0RFXSBqdXN0IG1lYW5zIHRoYXQgdGhlIGRlYnVnIGludGVycnVwdCB3aWxsIG5vdCBiZQotICogZGVsaXZlcmVkICppbW1lZGlhdGVseSouIEluc3RlYWQsIGl0IHNpbXBseSBzZXRzIHRoZSBhcHByb3ByaWF0ZSBEQlNSIGJpdHMuCi0gKiBJZiB0aG9zZSBEQlNSIGJpdHMgYXJlIHN0aWxsIHNldCB3aGVuIE1TUltERV0gaXMgcmUtZW5hYmxlZCwgdGhlIGludGVycnVwdAotICogd2lsbCBiZSBkZWxpdmVyZWQgYXMgYW4gImltcHJlY2lzZSBkZWJ1ZyBldmVudCIgKHdoaWNoIGlzIGluZGljYXRlZCBieQotICogREJTUltJREVdLgotICovCi1zdGF0aWMgdm9pZCBrdm00NHhfZGlzYWJsZV9kZWJ1Z19pbnRlcnJ1cHRzKHZvaWQpCi17Ci0JbXRtc3IobWZtc3IoKSAmIH5NU1JfREUpOwotfQotCi12b2lkIGt2bXBwY19jb3JlX2xvYWRfaG9zdF9kZWJ1Z3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKLXsKLQlrdm00NHhfZGlzYWJsZV9kZWJ1Z19pbnRlcnJ1cHRzKCk7Ci0KLQltdHNwcihTUFJOX0lBQzEsIHZjcHUtPmFyY2guaG9zdF9pYWNbMF0pOwotCW10c3ByKFNQUk5fSUFDMiwgdmNwdS0+YXJjaC5ob3N0X2lhY1sxXSk7Ci0JbXRzcHIoU1BSTl9JQUMzLCB2Y3B1LT5hcmNoLmhvc3RfaWFjWzJdKTsKLQltdHNwcihTUFJOX0lBQzQsIHZjcHUtPmFyY2guaG9zdF9pYWNbM10pOwotCW10c3ByKFNQUk5fREJDUjEsIHZjcHUtPmFyY2guaG9zdF9kYmNyMSk7Ci0JbXRzcHIoU1BSTl9EQkNSMiwgdmNwdS0+YXJjaC5ob3N0X2RiY3IyKTsKLQltdHNwcihTUFJOX0RCQ1IwLCB2Y3B1LT5hcmNoLmhvc3RfZGJjcjApOwotCW10bXNyKHZjcHUtPmFyY2guaG9zdF9tc3IpOwotfQotCi12b2lkIGt2bXBwY19jb3JlX2xvYWRfZ3Vlc3RfZGVidWdzdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCi17Ci0Jc3RydWN0IGt2bV9ndWVzdF9kZWJ1ZyAqZGJnID0gJnZjcHUtPmd1ZXN0X2RlYnVnOwotCXUzMiBkYmNyMCA9IDA7Ci0KLQl2Y3B1LT5hcmNoLmhvc3RfbXNyID0gbWZtc3IoKTsKLQlrdm00NHhfZGlzYWJsZV9kZWJ1Z19pbnRlcnJ1cHRzKCk7Ci0KLQkvKiBTYXZlIGhvc3QgZGVidWcgcmVnaXN0ZXIgc3RhdGUuICovCi0JdmNwdS0+YXJjaC5ob3N0X2lhY1swXSA9IG1mc3ByKFNQUk5fSUFDMSk7Ci0JdmNwdS0+YXJjaC5ob3N0X2lhY1sxXSA9IG1mc3ByKFNQUk5fSUFDMik7Ci0JdmNwdS0+YXJjaC5ob3N0X2lhY1syXSA9IG1mc3ByKFNQUk5fSUFDMyk7Ci0JdmNwdS0+YXJjaC5ob3N0X2lhY1szXSA9IG1mc3ByKFNQUk5fSUFDNCk7Ci0JdmNwdS0+YXJjaC5ob3N0X2RiY3IwID0gbWZzcHIoU1BSTl9EQkNSMCk7Ci0JdmNwdS0+YXJjaC5ob3N0X2RiY3IxID0gbWZzcHIoU1BSTl9EQkNSMSk7Ci0JdmNwdS0+YXJjaC5ob3N0X2RiY3IyID0gbWZzcHIoU1BSTl9EQkNSMik7Ci0KLQkvKiBzZXQgcmVnaXN0ZXJzIHVwIGZvciBndWVzdCAqLwotCi0JaWYgKGRiZy0+YnBbMF0pIHsKLQkJbXRzcHIoU1BSTl9JQUMxLCBkYmctPmJwWzBdKTsKLQkJZGJjcjAgfD0gREJDUjBfSUFDMSB8IERCQ1IwX0lETTsKLQl9Ci0JaWYgKGRiZy0+YnBbMV0pIHsKLQkJbXRzcHIoU1BSTl9JQUMyLCBkYmctPmJwWzFdKTsKLQkJZGJjcjAgfD0gREJDUjBfSUFDMiB8IERCQ1IwX0lETTsKLQl9Ci0JaWYgKGRiZy0+YnBbMl0pIHsKLQkJbXRzcHIoU1BSTl9JQUMzLCBkYmctPmJwWzJdKTsKLQkJZGJjcjAgfD0gREJDUjBfSUFDMyB8IERCQ1IwX0lETTsKLQl9Ci0JaWYgKGRiZy0+YnBbM10pIHsKLQkJbXRzcHIoU1BSTl9JQUM0LCBkYmctPmJwWzNdKTsKLQkJZGJjcjAgfD0gREJDUjBfSUFDNCB8IERCQ1IwX0lETTsKLQl9Ci0KLQltdHNwcihTUFJOX0RCQ1IwLCBkYmNyMCk7Ci0JbXRzcHIoU1BSTl9EQkNSMSwgMCk7Ci0JbXRzcHIoU1BSTl9EQkNSMiwgMCk7Ci19Ci0KIHZvaWQga3ZtcHBjX2NvcmVfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSkKIHsKIAlrdm1wcGNfNDR4X3RsYl9sb2FkKHZjcHUpOwpAQCAtMTQ5LDggKzgzLDYgQEAKIGludCBrdm1wcGNfY29yZV92Y3B1X3RyYW5zbGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGt2bV90cmFuc2xhdGlvbiAqdHIpCiB7Ci0Jc3RydWN0IGt2bXBwY192Y3B1XzQ0eCAqdmNwdV80NHggPSB0b180NHgodmNwdSk7Ci0Jc3RydWN0IGt2bXBwY180NHhfdGxiZSAqZ3RsYmU7CiAJaW50IGluZGV4OwogCWd2YV90IGVhZGRyOwogCXU4IHBpZDsKQEAgLTE2Niw5ICs5OCw3IEBACiAJCXJldHVybiAwOwogCX0KIAotCWd0bGJlID0gJnZjcHVfNDR4LT5ndWVzdF90bGJbaW5kZXhdOwotCi0JdHItPnBoeXNpY2FsX2FkZHJlc3MgPSB0bGJfeGxhdGUoZ3RsYmUsIGVhZGRyKTsKKwl0ci0+cGh5c2ljYWxfYWRkcmVzcyA9IGt2bXBwY19tbXVfeGxhdGUodmNwdSwgaW5kZXgsIGVhZGRyKTsKIAkvKiBYWFggd2hhdCBkb2VzICJ3cml0ZWFibGUiIGFuZCAidXNlcm1vZGUiIGV2ZW4gbWVhbj8gKi8KIAl0ci0+dmFsaWQgPSAxOwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtLzQ0eF9lbXVsYXRlLmMgYi9hcmNoL3Bvd2VycGMva3ZtLzQ0eF9lbXVsYXRlLmMKaW5kZXggODI0ODlhNy4uNjFhZjU4ZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS80NHhfZW11bGF0ZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vNDR4X2VtdWxhdGUuYwpAQCAtMjcsMjUgKzI3LDEyIEBACiAjaW5jbHVkZSAiYm9va2UuaCIKICNpbmNsdWRlICI0NHhfdGxiLmgiCiAKLSNkZWZpbmUgT1BfUkZJICAgICAgMTkKLQotI2RlZmluZSBYT1BfUkZJICAgICA1MAotI2RlZmluZSBYT1BfTUZNU1IgICA4MwotI2RlZmluZSBYT1BfV1JURUUgICAxMzEKLSNkZWZpbmUgWE9QX01UTVNSICAgMTQ2Ci0jZGVmaW5lIFhPUF9XUlRFRUkgIDE2MwogI2RlZmluZSBYT1BfTUZEQ1IgICAzMjMKICNkZWZpbmUgWE9QX01URENSICAgNDUxCiAjZGVmaW5lIFhPUF9UTEJTWCAgIDkxNAogI2RlZmluZSBYT1BfSUNDQ0kgICA5NjYKICNkZWZpbmUgWE9QX1RMQldFICAgOTc4CiAKLXN0YXRpYyB2b2lkIGt2bXBwY19lbXVsX3JmaShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCi17Ci0JdmNwdS0+YXJjaC5wYyA9IHZjcHUtPmFyY2guc3JyMDsKLQlrdm1wcGNfc2V0X21zcih2Y3B1LCB2Y3B1LT5hcmNoLnNycjEpOwotfQotCiBpbnQga3ZtcHBjX2NvcmVfZW11bGF0ZV9vcChzdHJ1Y3Qga3ZtX3J1biAqcnVuLCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaW5zdCwgaW50ICphZHZhbmNlKQogewpAQCAtNTksNDggKzQ2LDkgQEAKIAlpbnQgd3M7CiAKIAlzd2l0Y2ggKGdldF9vcChpbnN0KSkgewotCWNhc2UgT1BfUkZJOgotCQlzd2l0Y2ggKGdldF94b3AoaW5zdCkpIHsKLQkJY2FzZSBYT1BfUkZJOgotCQkJa3ZtcHBjX2VtdWxfcmZpKHZjcHUpOwotCQkJa3ZtcHBjX3NldF9leGl0X3R5cGUodmNwdSwgRU1VTEFURURfUkZJX0VYSVRTKTsKLQkJCSphZHZhbmNlID0gMDsKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQllbXVsYXRlZCA9IEVNVUxBVEVfRkFJTDsKLQkJCWJyZWFrOwotCQl9Ci0JCWJyZWFrOwotCiAJY2FzZSAzMToKIAkJc3dpdGNoIChnZXRfeG9wKGluc3QpKSB7CiAKLQkJY2FzZSBYT1BfTUZNU1I6Ci0JCQlydCA9IGdldF9ydChpbnN0KTsKLQkJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2gubXNyOwotCQkJa3ZtcHBjX3NldF9leGl0X3R5cGUodmNwdSwgRU1VTEFURURfTUZNU1JfRVhJVFMpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBYT1BfTVRNU1I6Ci0JCQlycyA9IGdldF9ycyhpbnN0KTsKLQkJCWt2bXBwY19zZXRfZXhpdF90eXBlKHZjcHUsIEVNVUxBVEVEX01UTVNSX0VYSVRTKTsKLQkJCWt2bXBwY19zZXRfbXNyKHZjcHUsIHZjcHUtPmFyY2guZ3ByW3JzXSk7Ci0JCQlicmVhazsKLQotCQljYXNlIFhPUF9XUlRFRToKLQkJCXJzID0gZ2V0X3JzKGluc3QpOwotCQkJdmNwdS0+YXJjaC5tc3IgPSAodmNwdS0+YXJjaC5tc3IgJiB+TVNSX0VFKQotCQkJCQkJCSB8ICh2Y3B1LT5hcmNoLmdwcltyc10gJiBNU1JfRUUpOwotCQkJa3ZtcHBjX3NldF9leGl0X3R5cGUodmNwdSwgRU1VTEFURURfV1JURUVfRVhJVFMpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBYT1BfV1JURUVJOgotCQkJdmNwdS0+YXJjaC5tc3IgPSAodmNwdS0+YXJjaC5tc3IgJiB+TVNSX0VFKQotCQkJCQkJCSB8IChpbnN0ICYgTVNSX0VFKTsKLQkJCWt2bXBwY19zZXRfZXhpdF90eXBlKHZjcHUsIEVNVUxBVEVEX1dSVEVFX0VYSVRTKTsKLQkJCWJyZWFrOwotCiAJCWNhc2UgWE9QX01GRENSOgogCQkJZGNybiA9IGdldF9kY3JuKGluc3QpOwogCQkJcnQgPSBnZXRfcnQoaW5zdCk7CkBAIC0xODYsMTg2ICsxMzQsNTEgQEAKIAkJZW11bGF0ZWQgPSBFTVVMQVRFX0ZBSUw7CiAJfQogCisJaWYgKGVtdWxhdGVkID09IEVNVUxBVEVfRkFJTCkKKwkJZW11bGF0ZWQgPSBrdm1wcGNfYm9va2VfZW11bGF0ZV9vcChydW4sIHZjcHUsIGluc3QsIGFkdmFuY2UpOworCiAJcmV0dXJuIGVtdWxhdGVkOwogfQogCiBpbnQga3ZtcHBjX2NvcmVfZW11bGF0ZV9tdHNwcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBzcHJuLCBpbnQgcnMpCiB7CisJaW50IGVtdWxhdGVkID0gRU1VTEFURV9ET05FOworCiAJc3dpdGNoIChzcHJuKSB7Ci0JY2FzZSBTUFJOX01NVUNSOgotCQl2Y3B1LT5hcmNoLm1tdWNyID0gdmNwdS0+YXJjaC5ncHJbcnNdOyBicmVhazsKIAljYXNlIFNQUk5fUElEOgogCQlrdm1wcGNfc2V0X3BpZCh2Y3B1LCB2Y3B1LT5hcmNoLmdwcltyc10pOyBicmVhazsKKwljYXNlIFNQUk5fTU1VQ1I6CisJCXZjcHUtPmFyY2gubW11Y3IgPSB2Y3B1LT5hcmNoLmdwcltyc107IGJyZWFrOwogCWNhc2UgU1BSTl9DQ1IwOgogCQl2Y3B1LT5hcmNoLmNjcjAgPSB2Y3B1LT5hcmNoLmdwcltyc107IGJyZWFrOwogCWNhc2UgU1BSTl9DQ1IxOgogCQl2Y3B1LT5hcmNoLmNjcjEgPSB2Y3B1LT5hcmNoLmdwcltyc107IGJyZWFrOwotCWNhc2UgU1BSTl9ERUFSOgotCQl2Y3B1LT5hcmNoLmRlYXIgPSB2Y3B1LT5hcmNoLmdwcltyc107IGJyZWFrOwotCWNhc2UgU1BSTl9FU1I6Ci0JCXZjcHUtPmFyY2guZXNyID0gdmNwdS0+YXJjaC5ncHJbcnNdOyBicmVhazsKLQljYXNlIFNQUk5fREJDUjA6Ci0JCXZjcHUtPmFyY2guZGJjcjAgPSB2Y3B1LT5hcmNoLmdwcltyc107IGJyZWFrOwotCWNhc2UgU1BSTl9EQkNSMToKLQkJdmNwdS0+YXJjaC5kYmNyMSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7Ci0JY2FzZSBTUFJOX1RTUjoKLQkJdmNwdS0+YXJjaC50c3IgJj0gfnZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7Ci0JY2FzZSBTUFJOX1RDUjoKLQkJdmNwdS0+YXJjaC50Y3IgPSB2Y3B1LT5hcmNoLmdwcltyc107Ci0JCWt2bXBwY19lbXVsYXRlX2RlYyh2Y3B1KTsKLQkJYnJlYWs7Ci0KLQkvKiBOb3RlOiBTUFJHNC03IGFyZSB1c2VyLXJlYWRhYmxlLiBUaGVzZSB2YWx1ZXMgYXJlCi0JICogbG9hZGVkIGludG8gdGhlIHJlYWwgU1BSR3Mgd2hlbiByZXN1bWluZyB0aGUKLQkgKiBndWVzdC4gKi8KLQljYXNlIFNQUk5fU1BSRzQ6Ci0JCXZjcHUtPmFyY2guc3ByZzQgPSB2Y3B1LT5hcmNoLmdwcltyc107IGJyZWFrOwotCWNhc2UgU1BSTl9TUFJHNToKLQkJdmNwdS0+YXJjaC5zcHJnNSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7Ci0JY2FzZSBTUFJOX1NQUkc2OgotCQl2Y3B1LT5hcmNoLnNwcmc2ID0gdmNwdS0+YXJjaC5ncHJbcnNdOyBicmVhazsKLQljYXNlIFNQUk5fU1BSRzc6Ci0JCXZjcHUtPmFyY2guc3ByZzcgPSB2Y3B1LT5hcmNoLmdwcltyc107IGJyZWFrOwotCi0JY2FzZSBTUFJOX0lWUFI6Ci0JCXZjcHUtPmFyY2guaXZwciA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKLQkJYnJlYWs7Ci0JY2FzZSBTUFJOX0lWT1IwOgotCQl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19DUklUSUNBTF0gPSB2Y3B1LT5hcmNoLmdwcltyc107Ci0JCWJyZWFrOwotCWNhc2UgU1BSTl9JVk9SMToKLQkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fTUFDSElORV9DSEVDS10gPSB2Y3B1LT5hcmNoLmdwcltyc107Ci0JCWJyZWFrOwotCWNhc2UgU1BSTl9JVk9SMjoKLQkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fREFUQV9TVE9SQUdFXSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKLQkJYnJlYWs7Ci0JY2FzZSBTUFJOX0lWT1IzOgotCQl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19JTlNUX1NUT1JBR0VdID0gdmNwdS0+YXJjaC5ncHJbcnNdOwotCQlicmVhazsKLQljYXNlIFNQUk5fSVZPUjQ6Ci0JCXZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0VYVEVSTkFMXSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKLQkJYnJlYWs7Ci0JY2FzZSBTUFJOX0lWT1I1OgotCQl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19BTElHTk1FTlRdID0gdmNwdS0+YXJjaC5ncHJbcnNdOwotCQlicmVhazsKLQljYXNlIFNQUk5fSVZPUjY6Ci0JCXZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX1BST0dSQU1dID0gdmNwdS0+YXJjaC5ncHJbcnNdOwotCQlicmVhazsKLQljYXNlIFNQUk5fSVZPUjc6Ci0JCXZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0ZQX1VOQVZBSUxdID0gdmNwdS0+YXJjaC5ncHJbcnNdOwotCQlicmVhazsKLQljYXNlIFNQUk5fSVZPUjg6Ci0JCXZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX1NZU0NBTExdID0gdmNwdS0+YXJjaC5ncHJbcnNdOwotCQlicmVhazsKLQljYXNlIFNQUk5fSVZPUjk6Ci0JCXZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0FQX1VOQVZBSUxdID0gdmNwdS0+YXJjaC5ncHJbcnNdOwotCQlicmVhazsKLQljYXNlIFNQUk5fSVZPUjEwOgotCQl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19ERUNSRU1FTlRFUl0gPSB2Y3B1LT5hcmNoLmdwcltyc107Ci0JCWJyZWFrOwotCWNhc2UgU1BSTl9JVk9SMTE6Ci0JCXZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0ZJVF0gPSB2Y3B1LT5hcmNoLmdwcltyc107Ci0JCWJyZWFrOwotCWNhc2UgU1BSTl9JVk9SMTI6Ci0JCXZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX1dBVENIRE9HXSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKLQkJYnJlYWs7Ci0JY2FzZSBTUFJOX0lWT1IxMzoKLQkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fRFRMQl9NSVNTXSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKLQkJYnJlYWs7Ci0JY2FzZSBTUFJOX0lWT1IxNDoKLQkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fSVRMQl9NSVNTXSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKLQkJYnJlYWs7Ci0JY2FzZSBTUFJOX0lWT1IxNToKLQkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fREVCVUddID0gdmNwdS0+YXJjaC5ncHJbcnNdOwotCQlicmVhazsKLQogCWRlZmF1bHQ6Ci0JCXJldHVybiBFTVVMQVRFX0ZBSUw7CisJCWVtdWxhdGVkID0ga3ZtcHBjX2Jvb2tlX2VtdWxhdGVfbXRzcHIodmNwdSwgc3BybiwgcnMpOwogCX0KIAogCWt2bXBwY19zZXRfZXhpdF90eXBlKHZjcHUsIEVNVUxBVEVEX01UU1BSX0VYSVRTKTsKLQlyZXR1cm4gRU1VTEFURV9ET05FOworCXJldHVybiBlbXVsYXRlZDsKIH0KIAogaW50IGt2bXBwY19jb3JlX2VtdWxhdGVfbWZzcHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgc3BybiwgaW50IHJ0KQogeworCWludCBlbXVsYXRlZCA9IEVNVUxBVEVfRE9ORTsKKwogCXN3aXRjaCAoc3BybikgewotCS8qIDQ0MCAqLworCWNhc2UgU1BSTl9QSUQ6CisJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2gucGlkOyBicmVhazsKIAljYXNlIFNQUk5fTU1VQ1I6CiAJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2gubW11Y3I7IGJyZWFrOwogCWNhc2UgU1BSTl9DQ1IwOgogCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLmNjcjA7IGJyZWFrOwogCWNhc2UgU1BSTl9DQ1IxOgogCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLmNjcjE7IGJyZWFrOwotCi0JLyogQm9vayBFICovCi0JY2FzZSBTUFJOX1BJRDoKLQkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5waWQ7IGJyZWFrOwotCWNhc2UgU1BSTl9JVlBSOgotCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLml2cHI7IGJyZWFrOwotCWNhc2UgU1BSTl9ERUFSOgotCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLmRlYXI7IGJyZWFrOwotCWNhc2UgU1BSTl9FU1I6Ci0JCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guZXNyOyBicmVhazsKLQljYXNlIFNQUk5fREJDUjA6Ci0JCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guZGJjcjA7IGJyZWFrOwotCWNhc2UgU1BSTl9EQkNSMToKLQkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5kYmNyMTsgYnJlYWs7Ci0KLQljYXNlIFNQUk5fSVZPUjA6Ci0JCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0NSSVRJQ0FMXTsKLQkJYnJlYWs7Ci0JY2FzZSBTUFJOX0lWT1IxOgotCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19NQUNISU5FX0NIRUNLXTsKLQkJYnJlYWs7Ci0JY2FzZSBTUFJOX0lWT1IyOgotCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19EQVRBX1NUT1JBR0VdOwotCQlicmVhazsKLQljYXNlIFNQUk5fSVZPUjM6Ci0JCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0lOU1RfU1RPUkFHRV07Ci0JCWJyZWFrOwotCWNhc2UgU1BSTl9JVk9SNDoKLQkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fRVhURVJOQUxdOwotCQlicmVhazsKLQljYXNlIFNQUk5fSVZPUjU6Ci0JCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0FMSUdOTUVOVF07Ci0JCWJyZWFrOwotCWNhc2UgU1BSTl9JVk9SNjoKLQkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fUFJPR1JBTV07Ci0JCWJyZWFrOwotCWNhc2UgU1BSTl9JVk9SNzoKLQkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fRlBfVU5BVkFJTF07Ci0JCWJyZWFrOwotCWNhc2UgU1BSTl9JVk9SODoKLQkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fU1lTQ0FMTF07Ci0JCWJyZWFrOwotCWNhc2UgU1BSTl9JVk9SOToKLQkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fQVBfVU5BVkFJTF07Ci0JCWJyZWFrOwotCWNhc2UgU1BSTl9JVk9SMTA6Ci0JCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0RFQ1JFTUVOVEVSXTsKLQkJYnJlYWs7Ci0JY2FzZSBTUFJOX0lWT1IxMToKLQkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fRklUXTsKLQkJYnJlYWs7Ci0JY2FzZSBTUFJOX0lWT1IxMjoKLQkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fV0FUQ0hET0ddOwotCQlicmVhazsKLQljYXNlIFNQUk5fSVZPUjEzOgotCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19EVExCX01JU1NdOwotCQlicmVhazsKLQljYXNlIFNQUk5fSVZPUjE0OgotCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19JVExCX01JU1NdOwotCQlicmVhazsKLQljYXNlIFNQUk5fSVZPUjE1OgotCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19ERUJVR107Ci0JCWJyZWFrOwotCiAJZGVmYXVsdDoKLQkJcmV0dXJuIEVNVUxBVEVfRkFJTDsKKwkJZW11bGF0ZWQgPSBrdm1wcGNfYm9va2VfZW11bGF0ZV9tZnNwcih2Y3B1LCBzcHJuLCBydCk7CiAJfQogCiAJa3ZtcHBjX3NldF9leGl0X3R5cGUodmNwdSwgRU1VTEFURURfTUZTUFJfRVhJVFMpOwotCXJldHVybiBFTVVMQVRFX0RPTkU7CisJcmV0dXJuIGVtdWxhdGVkOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtLzQ0eF90bGIuYyBiL2FyY2gvcG93ZXJwYy9rdm0vNDR4X3RsYi5jCmluZGV4IDlhMzRiOGUuLjRhMTZmNDcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vNDR4X3RsYi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vNDR4X3RsYi5jCkBAIC0yMDgsMjAgKzIwOCwzOCBAQAogCXJldHVybiAtMTsKIH0KIAotaW50IGt2bXBwY180NHhfaXRsYl9pbmRleChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGVhZGRyKQorZ3BhX3Qga3ZtcHBjX21tdV94bGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBndGxiX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICBndmFfdCBlYWRkcikKK3sKKwlzdHJ1Y3Qga3ZtcHBjX3ZjcHVfNDR4ICp2Y3B1XzQ0eCA9IHRvXzQ0eCh2Y3B1KTsKKwlzdHJ1Y3Qga3ZtcHBjXzQ0eF90bGJlICpndGxiZSA9ICZ2Y3B1XzQ0eC0+Z3Vlc3RfdGxiW2d0bGJfaW5kZXhdOworCXVuc2lnbmVkIGludCBwZ21hc2sgPSBnZXRfdGxiX2J5dGVzKGd0bGJlKSAtIDE7CisKKwlyZXR1cm4gZ2V0X3RsYl9yYWRkcihndGxiZSkgfCAoZWFkZHIgJiBwZ21hc2spOworfQorCitpbnQga3ZtcHBjX21tdV9pdGxiX2luZGV4KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZWFkZHIpCiB7CiAJdW5zaWduZWQgaW50IGFzID0gISEodmNwdS0+YXJjaC5tc3IgJiBNU1JfSVMpOwogCiAJcmV0dXJuIGt2bXBwY180NHhfdGxiX2luZGV4KHZjcHUsIGVhZGRyLCB2Y3B1LT5hcmNoLnBpZCwgYXMpOwogfQogCi1pbnQga3ZtcHBjXzQ0eF9kdGxiX2luZGV4KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZWFkZHIpCitpbnQga3ZtcHBjX21tdV9kdGxiX2luZGV4KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZWFkZHIpCiB7CiAJdW5zaWduZWQgaW50IGFzID0gISEodmNwdS0+YXJjaC5tc3IgJiBNU1JfRFMpOwogCiAJcmV0dXJuIGt2bXBwY180NHhfdGxiX2luZGV4KHZjcHUsIGVhZGRyLCB2Y3B1LT5hcmNoLnBpZCwgYXMpOwogfQogCit2b2lkIGt2bXBwY19tbXVfaXRsYl9taXNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKK30KKwordm9pZCBrdm1wcGNfbW11X2R0bGJfbWlzcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7Cit9CisKIHN0YXRpYyB2b2lkIGt2bXBwY180NHhfc2hhZG93X3JlbGVhc2Uoc3RydWN0IGt2bXBwY192Y3B1XzQ0eCAqdmNwdV80NHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzdGxiX2luZGV4KQogewpAQCAtMjQ4LDcgKzI2Niw3IEBACiAJS1ZNVFJBQ0VfMUQoU1RMQl9JTlZBTCwgJnZjcHVfNDR4LT52Y3B1LCBzdGxiX2luZGV4LCBoYW5kbGVyKTsKIH0KIAotdm9pZCBrdm1wcGNfY29yZV9kZXN0cm95X21tdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit2b2lkIGt2bXBwY19tbXVfZGVzdHJveShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJc3RydWN0IGt2bXBwY192Y3B1XzQ0eCAqdmNwdV80NHggPSB0b180NHgodmNwdSk7CiAJaW50IGk7CkBAIC0yNjksMTUgKzI4NywxOSBAQAogICogQ2FsbGVyIG11c3QgZW5zdXJlIHRoYXQgdGhlIHNwZWNpZmllZCBndWVzdCBUTEIgZW50cnkgaXMgc2FmZSB0byBpbnNlcnQgaW50bwogICogdGhlIHNoYWRvdyBUTEIuCiAgKi8KLXZvaWQga3ZtcHBjX21tdV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZ3ZhZGRyLCBncGFfdCBncGFkZHIsIHU2NCBhc2lkLAotICAgICAgICAgICAgICAgICAgICB1MzIgZmxhZ3MsIHUzMiBtYXhfYnl0ZXMsIHVuc2lnbmVkIGludCBndGxiX2luZGV4KQordm9pZCBrdm1wcGNfbW11X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBndmFkZHIsIGdwYV90IGdwYWRkciwKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGd0bGJfaW5kZXgpCiB7CiAJc3RydWN0IGt2bXBwY180NHhfdGxiZSBzdGxiZTsKIAlzdHJ1Y3Qga3ZtcHBjX3ZjcHVfNDR4ICp2Y3B1XzQ0eCA9IHRvXzQ0eCh2Y3B1KTsKKwlzdHJ1Y3Qga3ZtcHBjXzQ0eF90bGJlICpndGxiZSA9ICZ2Y3B1XzQ0eC0+Z3Vlc3RfdGxiW2d0bGJfaW5kZXhdOwogCXN0cnVjdCBrdm1wcGNfNDR4X3NoYWRvd19yZWYgKnJlZjsKIAlzdHJ1Y3QgcGFnZSAqbmV3X3BhZ2U7CiAJaHBhX3QgaHBhZGRyOwogCWdmbl90IGdmbjsKKwl1MzIgYXNpZCA9IGd0bGJlLT50aWQ7CisJdTMyIGZsYWdzID0gZ3RsYmUtPndvcmQyOworCXUzMiBtYXhfYnl0ZXMgPSBnZXRfdGxiX2J5dGVzKGd0bGJlKTsKIAl1bnNpZ25lZCBpbnQgdmljdGltOwogCiAJLyogU2VsZWN0IFRMQiBlbnRyeSB0byBjbG9iYmVyLiBJbmRpcmVjdGx5IGd1YXJkIGFnYWluc3QgcmFjZXMgd2l0aCB0aGUgVExCCkBAIC00NDgsMTAgKzQ3MCw4IEBACiAJfQogCiAJaWYgKHRsYmVfaXNfaG9zdF9zYWZlKHZjcHUsIHRsYmUpKSB7Ci0JCXU2NCBhc2lkOwogCQlndmFfdCBlYWRkcjsKIAkJZ3BhX3QgZ3BhZGRyOwotCQl1MzIgZmxhZ3M7CiAJCXUzMiBieXRlczsKIAogCQllYWRkciA9IGdldF90bGJfZWFkZHIodGxiZSk7CkBAIC00NjIsMTAgKzQ4Miw3IEBACiAJCWVhZGRyICY9IH4oYnl0ZXMgLSAxKTsKIAkJZ3BhZGRyICY9IH4oYnl0ZXMgLSAxKTsKIAotCQlhc2lkID0gKHRsYmUtPndvcmQwICYgUFBDNDR4X1RMQl9UUykgfCB0bGJlLT50aWQ7Ci0JCWZsYWdzID0gdGxiZS0+d29yZDIgJiAweGZmZmY7Ci0KLQkJa3ZtcHBjX21tdV9tYXAodmNwdSwgZWFkZHIsIGdwYWRkciwgYXNpZCwgZmxhZ3MsIGJ5dGVzLCBndGxiX2luZGV4KTsKKwkJa3ZtcHBjX21tdV9tYXAodmNwdSwgZWFkZHIsIGdwYWRkciwgZ3RsYl9pbmRleCk7CiAJfQogCiAJS1ZNVFJBQ0VfNUQoR1RMQl9XUklURSwgdmNwdSwgZ3RsYl9pbmRleCwgdGxiZS0+dGlkLCB0bGJlLT53b3JkMCwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vNDR4X3RsYi5oIGIvYXJjaC9wb3dlcnBjL2t2bS80NHhfdGxiLmgKaW5kZXggNzcyMTkxZi4uYTlmZjgwZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS80NHhfdGxiLmgKKysrIGIvYXJjaC9wb3dlcnBjL2t2bS80NHhfdGxiLmgKQEAgLTI1LDggKzI1LDYgQEAKIAogZXh0ZXJuIGludCBrdm1wcGNfNDR4X3RsYl9pbmRleChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGVhZGRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcGlkLCB1bnNpZ25lZCBpbnQgYXMpOwotZXh0ZXJuIGludCBrdm1wcGNfNDR4X2R0bGJfaW5kZXgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBlYWRkcik7Ci1leHRlcm4gaW50IGt2bXBwY180NHhfaXRsYl9pbmRleChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGVhZGRyKTsKIAogZXh0ZXJuIGludCBrdm1wcGNfNDR4X2VtdWxfdGxic3goc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1OCBydCwgdTggcmEsIHU4IHJiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggcmMpOwpAQCAtODUsMTEgKzgzLDQgQEAKIAlyZXR1cm4gKHZjcHUtPmFyY2gubW11Y3IgPj4gMTYpICYgMHgxOwogfQogCi1zdGF0aWMgaW5saW5lIGdwYV90IHRsYl94bGF0ZShzdHJ1Y3Qga3ZtcHBjXzQ0eF90bGJlICp0bGJlLCBndmFfdCBlYWRkcikKLXsKLQl1bnNpZ25lZCBpbnQgcGdtYXNrID0gZ2V0X3RsYl9ieXRlcyh0bGJlKSAtIDE7Ci0KLQlyZXR1cm4gZ2V0X3RsYl9yYWRkcih0bGJlKSB8IChlYWRkciAmIHBnbWFzayk7Ci19Ci0KICNlbmRpZiAvKiBfX0tWTV9QT1dFUlBDX1RMQl9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZwppbmRleCA2ZGJkYzQ4Li41YTE1MmE1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtL0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnCkBAIC0yLDYgKzIsOSBAQAogIyBLVk0gY29uZmlndXJhdGlvbgogIwogCitjb25maWcgSEFWRV9LVk1fSVJRQ0hJUAorICAgICAgIGJvb2wKKwogbWVudWNvbmZpZyBWSVJUVUFMSVpBVElPTgogCWJvb2wgIlZpcnR1YWxpemF0aW9uIgogCS0tLWhlbHAtLS0KQEAgLTQzLDYgKzQ2LDE5IEBACiAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKK2NvbmZpZyBLVk1fRTUwMAorCWJvb2wgIktWTSBzdXBwb3J0IGZvciBQb3dlclBDIEU1MDAgcHJvY2Vzc29ycyIKKwlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTCAmJiBFNTAwCisJc2VsZWN0IEtWTQorCS0tLWhlbHAtLS0KKwkgIFN1cHBvcnQgcnVubmluZyB1bm1vZGlmaWVkIEU1MDAgZ3Vlc3Qga2VybmVscyBpbiB2aXJ0dWFsIG1hY2hpbmVzIG9uCisJICBFNTAwIGhvc3QgcHJvY2Vzc29ycy4KKworCSAgVGhpcyBtb2R1bGUgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBoYXJkd2FyZSBjYXBhYmlsaXRpZXMgdGhyb3VnaAorCSAgYSBjaGFyYWN0ZXIgZGV2aWNlIG5vZGUgbmFtZWQgL2Rldi9rdm0uCisKKwkgIElmIHVuc3VyZSwgc2F5IE4uCisKIGNvbmZpZyBLVk1fVFJBQ0UKIAlib29sICJLVk0gdHJhY2Ugc3VwcG9ydCIKIAlkZXBlbmRzIG9uIEtWTSAmJiBNQVJLRVJTICYmIFNZU0ZTCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL2t2bS9NYWtlZmlsZQppbmRleCBkZjdiYTU5Li40YjJkZjY2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtL01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vTWFrZWZpbGUKQEAgLTE2LDggKzE2LDE4IEBACiAKIGt2bS00NDAtb2JqcyA6PSBcCiAJYm9va2UubyBcCisJYm9va2VfZW11bGF0ZS5vIFwKIAlib29rZV9pbnRlcnJ1cHRzLm8gXAogCTQ0eC5vIFwKIAk0NHhfdGxiLm8gXAogCTQ0eF9lbXVsYXRlLm8KIG9iai0kKENPTkZJR19LVk1fNDQwKSArPSBrdm0tNDQwLm8KKwora3ZtLWU1MDAtb2JqcyA6PSBcCisJYm9va2UubyBcCisJYm9va2VfZW11bGF0ZS5vIFwKKwlib29rZV9pbnRlcnJ1cHRzLm8gXAorCWU1MDAubyBcCisJZTUwMF90bGIubyBcCisJZTUwMF9lbXVsYXRlLm8KK29iai0kKENPTkZJR19LVk1fRTUwMCkgKz0ga3ZtLWU1MDAubwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rZS5jIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rZS5jCmluZGV4IDM1NDg1ZGQuLjY0MmU0MjAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vYm9va2UuYworKysgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2tlLmMKQEAgLTMwLDEwICszMCw4IEBACiAjaW5jbHVkZSA8YXNtL2t2bV9wcGMuaD4KICNpbmNsdWRlICJ0aW1pbmcuaCIKICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgotI2luY2x1ZGUgPGFzbS9rdm1fNDR4Lmg+CiAKICNpbmNsdWRlICJib29rZS5oIgotI2luY2x1ZGUgIjQ0eF90bGIuaCIKIAogdW5zaWduZWQgbG9uZyBrdm1wcGNfYm9va2VfaGFuZGxlcnM7CiAKQEAgLTEyMCw2ICsxMTgsOSBAQAogCWNhc2UgQk9PS0VfSVJRUFJJT19EQVRBX1NUT1JBR0U6CiAJY2FzZSBCT09LRV9JUlFQUklPX0lOU1RfU1RPUkFHRToKIAljYXNlIEJPT0tFX0lSUVBSSU9fRlBfVU5BVkFJTDoKKwljYXNlIEJPT0tFX0lSUVBSSU9fU1BFX1VOQVZBSUw6CisJY2FzZSBCT09LRV9JUlFQUklPX1NQRV9GUF9EQVRBOgorCWNhc2UgQk9PS0VfSVJRUFJJT19TUEVfRlBfUk9VTkQ6CiAJY2FzZSBCT09LRV9JUlFQUklPX0FQX1VOQVZBSUw6CiAJY2FzZSBCT09LRV9JUlFQUklPX0FMSUdOTUVOVDoKIAkJYWxsb3dlZCA9IDE7CkBAIC0xNjUsNyArMTY2LDcgQEAKIAl1bnNpZ25lZCBpbnQgcHJpb3JpdHk7CiAKIAlwcmlvcml0eSA9IF9fZmZzKCpwZW5kaW5nKTsKLQl3aGlsZSAocHJpb3JpdHkgPD0gQk9PS0VfTUFYX0lOVEVSUlVQVCkgeworCXdoaWxlIChwcmlvcml0eSA8PSBCT09LRV9JUlFQUklPX01BWCkgewogCQlpZiAoa3ZtcHBjX2Jvb2tlX2lycXByaW9fZGVsaXZlcih2Y3B1LCBwcmlvcml0eSkpCiAJCQlicmVhazsKIApAQCAtMjYzLDYgKzI2NCwyMSBAQAogCQlyID0gUkVTVU1FX0dVRVNUOwogCQlicmVhazsKIAorCWNhc2UgQk9PS0VfSU5URVJSVVBUX1NQRV9VTkFWQUlMOgorCQlrdm1wcGNfYm9va2VfcXVldWVfaXJxcHJpbyh2Y3B1LCBCT09LRV9JUlFQUklPX1NQRV9VTkFWQUlMKTsKKwkJciA9IFJFU1VNRV9HVUVTVDsKKwkJYnJlYWs7CisKKwljYXNlIEJPT0tFX0lOVEVSUlVQVF9TUEVfRlBfREFUQToKKwkJa3ZtcHBjX2Jvb2tlX3F1ZXVlX2lycXByaW8odmNwdSwgQk9PS0VfSVJRUFJJT19TUEVfRlBfREFUQSk7CisJCXIgPSBSRVNVTUVfR1VFU1Q7CisJCWJyZWFrOworCisJY2FzZSBCT09LRV9JTlRFUlJVUFRfU1BFX0ZQX1JPVU5EOgorCQlrdm1wcGNfYm9va2VfcXVldWVfaXJxcHJpbyh2Y3B1LCBCT09LRV9JUlFQUklPX1NQRV9GUF9ST1VORCk7CisJCXIgPSBSRVNVTUVfR1VFU1Q7CisJCWJyZWFrOworCiAJY2FzZSBCT09LRV9JTlRFUlJVUFRfREFUQV9TVE9SQUdFOgogCQl2Y3B1LT5hcmNoLmRlYXIgPSB2Y3B1LT5hcmNoLmZhdWx0X2RlYXI7CiAJCXZjcHUtPmFyY2guZXNyID0gdmNwdS0+YXJjaC5mYXVsdF9lc3I7CkBAIC0yODQsMjkgKzMwMCwyNyBAQAogCQlyID0gUkVTVU1FX0dVRVNUOwogCQlicmVhazsKIAotCS8qIFhYWCBtb3ZlIHRvIGEgNDQwLXNwZWNpZmljIGZpbGUuICovCiAJY2FzZSBCT09LRV9JTlRFUlJVUFRfRFRMQl9NSVNTOiB7Ci0JCXN0cnVjdCBrdm1wcGNfdmNwdV80NHggKnZjcHVfNDR4ID0gdG9fNDR4KHZjcHUpOwotCQlzdHJ1Y3Qga3ZtcHBjXzQ0eF90bGJlICpndGxiZTsKIAkJdW5zaWduZWQgbG9uZyBlYWRkciA9IHZjcHUtPmFyY2guZmF1bHRfZGVhcjsKIAkJaW50IGd0bGJfaW5kZXg7CisJCWdwYV90IGdwYWRkcjsKIAkJZ2ZuX3QgZ2ZuOwogCiAJCS8qIENoZWNrIHRoZSBndWVzdCBUTEIuICovCi0JCWd0bGJfaW5kZXggPSBrdm1wcGNfNDR4X2R0bGJfaW5kZXgodmNwdSwgZWFkZHIpOworCQlndGxiX2luZGV4ID0ga3ZtcHBjX21tdV9kdGxiX2luZGV4KHZjcHUsIGVhZGRyKTsKIAkJaWYgKGd0bGJfaW5kZXggPCAwKSB7CiAJCQkvKiBUaGUgZ3Vlc3QgZGlkbid0IGhhdmUgYSBtYXBwaW5nIGZvciBpdC4gKi8KIAkJCWt2bXBwY19ib29rZV9xdWV1ZV9pcnFwcmlvKHZjcHUsIEJPT0tFX0lSUVBSSU9fRFRMQl9NSVNTKTsKIAkJCXZjcHUtPmFyY2guZGVhciA9IHZjcHUtPmFyY2guZmF1bHRfZGVhcjsKIAkJCXZjcHUtPmFyY2guZXNyID0gdmNwdS0+YXJjaC5mYXVsdF9lc3I7CisJCQlrdm1wcGNfbW11X2R0bGJfbWlzcyh2Y3B1KTsKIAkJCWt2bXBwY19hY2NvdW50X2V4aXQodmNwdSwgRFRMQl9SRUFMX01JU1NfRVhJVFMpOwogCQkJciA9IFJFU1VNRV9HVUVTVDsKIAkJCWJyZWFrOwogCQl9CiAKLQkJZ3RsYmUgPSAmdmNwdV80NHgtPmd1ZXN0X3RsYltndGxiX2luZGV4XTsKLQkJdmNwdS0+YXJjaC5wYWRkcl9hY2Nlc3NlZCA9IHRsYl94bGF0ZShndGxiZSwgZWFkZHIpOwotCQlnZm4gPSB2Y3B1LT5hcmNoLnBhZGRyX2FjY2Vzc2VkID4+IFBBR0VfU0hJRlQ7CisJCWdwYWRkciA9IGt2bXBwY19tbXVfeGxhdGUodmNwdSwgZ3RsYl9pbmRleCwgZWFkZHIpOworCQlnZm4gPSBncGFkZHIgPj4gUEFHRV9TSElGVDsKIAogCQlpZiAoa3ZtX2lzX3Zpc2libGVfZ2ZuKHZjcHUtPmt2bSwgZ2ZuKSkgewogCQkJLyogVGhlIGd1ZXN0IFRMQiBoYWQgYSBtYXBwaW5nLCBidXQgdGhlIHNoYWRvdyBUTEIKQEAgLTMxNSwxMyArMzI5LDEzIEBACiAJCQkgKiBiKSB0aGUgZ3Vlc3QgdXNlZCBhIGxhcmdlIG1hcHBpbmcgd2hpY2ggd2UncmUgZmFraW5nCiAJCQkgKiBFaXRoZXIgd2F5LCB3ZSBuZWVkIHRvIHNhdGlzZnkgdGhlIGZhdWx0IHdpdGhvdXQKIAkJCSAqIGludm9raW5nIHRoZSBndWVzdC4gKi8KLQkJCWt2bXBwY19tbXVfbWFwKHZjcHUsIGVhZGRyLCB2Y3B1LT5hcmNoLnBhZGRyX2FjY2Vzc2VkLCBndGxiZS0+dGlkLAotCQkJICAgICAgICAgICAgICAgZ3RsYmUtPndvcmQyLCBnZXRfdGxiX2J5dGVzKGd0bGJlKSwgZ3RsYl9pbmRleCk7CisJCQlrdm1wcGNfbW11X21hcCh2Y3B1LCBlYWRkciwgZ3BhZGRyLCBndGxiX2luZGV4KTsKIAkJCWt2bXBwY19hY2NvdW50X2V4aXQodmNwdSwgRFRMQl9WSVJUX01JU1NfRVhJVFMpOwogCQkJciA9IFJFU1VNRV9HVUVTVDsKIAkJfSBlbHNlIHsKIAkJCS8qIEd1ZXN0IGhhcyBtYXBwZWQgYW5kIGFjY2Vzc2VkIGEgcGFnZSB3aGljaCBpcyBub3QKIAkJCSAqIGFjdHVhbGx5IFJBTS4gKi8KKwkJCXZjcHUtPmFyY2gucGFkZHJfYWNjZXNzZWQgPSBncGFkZHI7CiAJCQlyID0ga3ZtcHBjX2VtdWxhdGVfbW1pbyhydW4sIHZjcHUpOwogCQkJa3ZtcHBjX2FjY291bnRfZXhpdCh2Y3B1LCBNTUlPX0VYSVRTKTsKIAkJfQpAQCAtMzI5LDEwICszNDMsNyBAQAogCQlicmVhazsKIAl9CiAKLQkvKiBYWFggbW92ZSB0byBhIDQ0MC1zcGVjaWZpYyBmaWxlLiAqLwogCWNhc2UgQk9PS0VfSU5URVJSVVBUX0lUTEJfTUlTUzogewotCQlzdHJ1Y3Qga3ZtcHBjX3ZjcHVfNDR4ICp2Y3B1XzQ0eCA9IHRvXzQ0eCh2Y3B1KTsKLQkJc3RydWN0IGt2bXBwY180NHhfdGxiZSAqZ3RsYmU7CiAJCXVuc2lnbmVkIGxvbmcgZWFkZHIgPSB2Y3B1LT5hcmNoLnBjOwogCQlncGFfdCBncGFkZHI7CiAJCWdmbl90IGdmbjsKQEAgLTM0MSwxOCArMzUyLDE4IEBACiAJCXIgPSBSRVNVTUVfR1VFU1Q7CiAKIAkJLyogQ2hlY2sgdGhlIGd1ZXN0IFRMQi4gKi8KLQkJZ3RsYl9pbmRleCA9IGt2bXBwY180NHhfaXRsYl9pbmRleCh2Y3B1LCBlYWRkcik7CisJCWd0bGJfaW5kZXggPSBrdm1wcGNfbW11X2l0bGJfaW5kZXgodmNwdSwgZWFkZHIpOwogCQlpZiAoZ3RsYl9pbmRleCA8IDApIHsKIAkJCS8qIFRoZSBndWVzdCBkaWRuJ3QgaGF2ZSBhIG1hcHBpbmcgZm9yIGl0LiAqLwogCQkJa3ZtcHBjX2Jvb2tlX3F1ZXVlX2lycXByaW8odmNwdSwgQk9PS0VfSVJRUFJJT19JVExCX01JU1MpOworCQkJa3ZtcHBjX21tdV9pdGxiX21pc3ModmNwdSk7CiAJCQlrdm1wcGNfYWNjb3VudF9leGl0KHZjcHUsIElUTEJfUkVBTF9NSVNTX0VYSVRTKTsKIAkJCWJyZWFrOwogCQl9CiAKIAkJa3ZtcHBjX2FjY291bnRfZXhpdCh2Y3B1LCBJVExCX1ZJUlRfTUlTU19FWElUUyk7CiAKLQkJZ3RsYmUgPSAmdmNwdV80NHgtPmd1ZXN0X3RsYltndGxiX2luZGV4XTsKLQkJZ3BhZGRyID0gdGxiX3hsYXRlKGd0bGJlLCBlYWRkcik7CisJCWdwYWRkciA9IGt2bXBwY19tbXVfeGxhdGUodmNwdSwgZ3RsYl9pbmRleCwgZWFkZHIpOwogCQlnZm4gPSBncGFkZHIgPj4gUEFHRV9TSElGVDsKIAogCQlpZiAoa3ZtX2lzX3Zpc2libGVfZ2ZuKHZjcHUtPmt2bSwgZ2ZuKSkgewpAQCAtMzYyLDggKzM3Myw3IEBACiAJCQkgKiBiKSB0aGUgZ3Vlc3QgdXNlZCBhIGxhcmdlIG1hcHBpbmcgd2hpY2ggd2UncmUgZmFraW5nCiAJCQkgKiBFaXRoZXIgd2F5LCB3ZSBuZWVkIHRvIHNhdGlzZnkgdGhlIGZhdWx0IHdpdGhvdXQKIAkJCSAqIGludm9raW5nIHRoZSBndWVzdC4gKi8KLQkJCWt2bXBwY19tbXVfbWFwKHZjcHUsIGVhZGRyLCBncGFkZHIsIGd0bGJlLT50aWQsCi0JCQkgICAgICAgICAgICAgICBndGxiZS0+d29yZDIsIGdldF90bGJfYnl0ZXMoZ3RsYmUpLCBndGxiX2luZGV4KTsKKwkJCWt2bXBwY19tbXVfbWFwKHZjcHUsIGVhZGRyLCBncGFkZHIsIGd0bGJfaW5kZXgpOwogCQl9IGVsc2UgewogCQkJLyogR3Vlc3QgbWFwcGVkIGFuZCBsZWFwZWQgYXQgbm9uLVJBTSEgKi8KIAkJCWt2bXBwY19ib29rZV9xdWV1ZV9pcnFwcmlvKHZjcHUsIEJPT0tFX0lSUVBSSU9fTUFDSElORV9DSEVDSyk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2tlLmggYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2tlLmgKaW5kZXggY2Y3Yzk0Yy4uZDU5YmNjYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rZS5oCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9va2UuaApAQCAtMjIsNiArMjIsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9rdm1faG9zdC5oPgorI2luY2x1ZGUgPGFzbS9rdm1fcHBjLmg+CiAjaW5jbHVkZSAidGltaW5nLmgiCiAKIC8qIGludGVycnVwdCBwcmlvcnRpdHkgb3JkZXJpbmcgKi8KQEAgLTMwLDE3ICszMSwyNCBAQAogI2RlZmluZSBCT09LRV9JUlFQUklPX0FMSUdOTUVOVCAyCiAjZGVmaW5lIEJPT0tFX0lSUVBSSU9fUFJPR1JBTSAzCiAjZGVmaW5lIEJPT0tFX0lSUVBSSU9fRlBfVU5BVkFJTCA0Ci0jZGVmaW5lIEJPT0tFX0lSUVBSSU9fU1lTQ0FMTCA1Ci0jZGVmaW5lIEJPT0tFX0lSUVBSSU9fQVBfVU5BVkFJTCA2Ci0jZGVmaW5lIEJPT0tFX0lSUVBSSU9fRFRMQl9NSVNTIDcKLSNkZWZpbmUgQk9PS0VfSVJRUFJJT19JVExCX01JU1MgOAotI2RlZmluZSBCT09LRV9JUlFQUklPX01BQ0hJTkVfQ0hFQ0sgOQotI2RlZmluZSBCT09LRV9JUlFQUklPX0RFQlVHIDEwCi0jZGVmaW5lIEJPT0tFX0lSUVBSSU9fQ1JJVElDQUwgMTEKLSNkZWZpbmUgQk9PS0VfSVJRUFJJT19XQVRDSERPRyAxMgotI2RlZmluZSBCT09LRV9JUlFQUklPX0VYVEVSTkFMIDEzCi0jZGVmaW5lIEJPT0tFX0lSUVBSSU9fRklUIDE0Ci0jZGVmaW5lIEJPT0tFX0lSUVBSSU9fREVDUkVNRU5URVIgMTUKKyNkZWZpbmUgQk9PS0VfSVJRUFJJT19TUEVfVU5BVkFJTCA1CisjZGVmaW5lIEJPT0tFX0lSUVBSSU9fU1BFX0ZQX0RBVEEgNgorI2RlZmluZSBCT09LRV9JUlFQUklPX1NQRV9GUF9ST1VORCA3CisjZGVmaW5lIEJPT0tFX0lSUVBSSU9fU1lTQ0FMTCA4CisjZGVmaW5lIEJPT0tFX0lSUVBSSU9fQVBfVU5BVkFJTCA5CisjZGVmaW5lIEJPT0tFX0lSUVBSSU9fRFRMQl9NSVNTIDEwCisjZGVmaW5lIEJPT0tFX0lSUVBSSU9fSVRMQl9NSVNTIDExCisjZGVmaW5lIEJPT0tFX0lSUVBSSU9fTUFDSElORV9DSEVDSyAxMgorI2RlZmluZSBCT09LRV9JUlFQUklPX0RFQlVHIDEzCisjZGVmaW5lIEJPT0tFX0lSUVBSSU9fQ1JJVElDQUwgMTQKKyNkZWZpbmUgQk9PS0VfSVJRUFJJT19XQVRDSERPRyAxNQorI2RlZmluZSBCT09LRV9JUlFQUklPX0VYVEVSTkFMIDE2CisjZGVmaW5lIEJPT0tFX0lSUVBSSU9fRklUIDE3CisjZGVmaW5lIEJPT0tFX0lSUVBSSU9fREVDUkVNRU5URVIgMTgKKyNkZWZpbmUgQk9PS0VfSVJRUFJJT19QRVJGT1JNQU5DRV9NT05JVE9SIDE5CisjZGVmaW5lIEJPT0tFX0lSUVBSSU9fTUFYIDE5CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIGt2bXBwY19ib29rZV9oYW5kbGVyczsKIAogLyogSGVscGVyIGZ1bmN0aW9uIGZvciAiZnVsbCIgTVNSIHdyaXRlcy4gTm8gbmVlZCB0byBjYWxsIHRoaXMgaWYgb25seSBFRSBpcwogICogY2hhbmdpbmcuICovCkBAIC01Nyw0ICs2NSw5IEBACiAJfTsKIH0KIAoraW50IGt2bXBwY19ib29rZV9lbXVsYXRlX29wKHN0cnVjdCBrdm1fcnVuICpydW4sIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaW5zdCwgaW50ICphZHZhbmNlKTsKK2ludCBrdm1wcGNfYm9va2VfZW11bGF0ZV9tZnNwcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBzcHJuLCBpbnQgcnQpOworaW50IGt2bXBwY19ib29rZV9lbXVsYXRlX210c3ByKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHNwcm4sIGludCBycyk7CisKICNlbmRpZiAvKiBfX0tWTV9CT09LRV9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vYm9va2VfZW11bGF0ZS5jIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rZV9lbXVsYXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWViYzY1ZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9va2VfZW11bGF0ZS5jCkBAIC0wLDAgKzEsMjY2IEBACisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiwgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxLCBVU0EuCisgKgorICogQ29weXJpZ2h0IElCTSBDb3JwLiAyMDA4CisgKgorICogQXV0aG9yczogSG9sbGlzIEJsYW5jaGFyZCA8aG9sbGlzYkB1cy5pYm0uY29tPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rdm1faG9zdC5oPgorI2luY2x1ZGUgPGFzbS9kaXNhc3NlbWJsZS5oPgorCisjaW5jbHVkZSAiYm9va2UuaCIKKworI2RlZmluZSBPUF8xOV9YT1BfUkZJICAgICA1MAorCisjZGVmaW5lIE9QXzMxX1hPUF9NRk1TUiAgIDgzCisjZGVmaW5lIE9QXzMxX1hPUF9XUlRFRSAgIDEzMQorI2RlZmluZSBPUF8zMV9YT1BfTVRNU1IgICAxNDYKKyNkZWZpbmUgT1BfMzFfWE9QX1dSVEVFSSAgMTYzCisKK3N0YXRpYyB2b2lkIGt2bXBwY19lbXVsX3JmaShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJdmNwdS0+YXJjaC5wYyA9IHZjcHUtPmFyY2guc3JyMDsKKwlrdm1wcGNfc2V0X21zcih2Y3B1LCB2Y3B1LT5hcmNoLnNycjEpOworfQorCitpbnQga3ZtcHBjX2Jvb2tlX2VtdWxhdGVfb3Aoc3RydWN0IGt2bV9ydW4gKnJ1biwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBpbnN0LCBpbnQgKmFkdmFuY2UpCit7CisJaW50IGVtdWxhdGVkID0gRU1VTEFURV9ET05FOworCWludCByczsKKwlpbnQgcnQ7CisKKwlzd2l0Y2ggKGdldF9vcChpbnN0KSkgeworCWNhc2UgMTk6CisJCXN3aXRjaCAoZ2V0X3hvcChpbnN0KSkgeworCQljYXNlIE9QXzE5X1hPUF9SRkk6CisJCQlrdm1wcGNfZW11bF9yZmkodmNwdSk7CisJCQlrdm1wcGNfc2V0X2V4aXRfdHlwZSh2Y3B1LCBFTVVMQVRFRF9SRklfRVhJVFMpOworCQkJKmFkdmFuY2UgPSAwOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWVtdWxhdGVkID0gRU1VTEFURV9GQUlMOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIDMxOgorCQlzd2l0Y2ggKGdldF94b3AoaW5zdCkpIHsKKworCQljYXNlIE9QXzMxX1hPUF9NRk1TUjoKKwkJCXJ0ID0gZ2V0X3J0KGluc3QpOworCQkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5tc3I7CisJCQlrdm1wcGNfc2V0X2V4aXRfdHlwZSh2Y3B1LCBFTVVMQVRFRF9NRk1TUl9FWElUUyk7CisJCQlicmVhazsKKworCQljYXNlIE9QXzMxX1hPUF9NVE1TUjoKKwkJCXJzID0gZ2V0X3JzKGluc3QpOworCQkJa3ZtcHBjX3NldF9leGl0X3R5cGUodmNwdSwgRU1VTEFURURfTVRNU1JfRVhJVFMpOworCQkJa3ZtcHBjX3NldF9tc3IodmNwdSwgdmNwdS0+YXJjaC5ncHJbcnNdKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT1BfMzFfWE9QX1dSVEVFOgorCQkJcnMgPSBnZXRfcnMoaW5zdCk7CisJCQl2Y3B1LT5hcmNoLm1zciA9ICh2Y3B1LT5hcmNoLm1zciAmIH5NU1JfRUUpCisJCQkJCQkJIHwgKHZjcHUtPmFyY2guZ3ByW3JzXSAmIE1TUl9FRSk7CisJCQlrdm1wcGNfc2V0X2V4aXRfdHlwZSh2Y3B1LCBFTVVMQVRFRF9XUlRFRV9FWElUUyk7CisJCQlicmVhazsKKworCQljYXNlIE9QXzMxX1hPUF9XUlRFRUk6CisJCQl2Y3B1LT5hcmNoLm1zciA9ICh2Y3B1LT5hcmNoLm1zciAmIH5NU1JfRUUpCisJCQkJCQkJIHwgKGluc3QgJiBNU1JfRUUpOworCQkJa3ZtcHBjX3NldF9leGl0X3R5cGUodmNwdSwgRU1VTEFURURfV1JURUVfRVhJVFMpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWVtdWxhdGVkID0gRU1VTEFURV9GQUlMOworCQl9CisKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQllbXVsYXRlZCA9IEVNVUxBVEVfRkFJTDsKKwl9CisKKwlyZXR1cm4gZW11bGF0ZWQ7Cit9CisKK2ludCBrdm1wcGNfYm9va2VfZW11bGF0ZV9tdHNwcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBzcHJuLCBpbnQgcnMpCit7CisJaW50IGVtdWxhdGVkID0gRU1VTEFURV9ET05FOworCisJc3dpdGNoIChzcHJuKSB7CisJY2FzZSBTUFJOX0RFQVI6CisJCXZjcHUtPmFyY2guZGVhciA9IHZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7CisJY2FzZSBTUFJOX0VTUjoKKwkJdmNwdS0+YXJjaC5lc3IgPSB2Y3B1LT5hcmNoLmdwcltyc107IGJyZWFrOworCWNhc2UgU1BSTl9EQkNSMDoKKwkJdmNwdS0+YXJjaC5kYmNyMCA9IHZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7CisJY2FzZSBTUFJOX0RCQ1IxOgorCQl2Y3B1LT5hcmNoLmRiY3IxID0gdmNwdS0+YXJjaC5ncHJbcnNdOyBicmVhazsKKwljYXNlIFNQUk5fREJTUjoKKwkJdmNwdS0+YXJjaC5kYnNyICY9IH52Y3B1LT5hcmNoLmdwcltyc107IGJyZWFrOworCWNhc2UgU1BSTl9UU1I6CisJCXZjcHUtPmFyY2gudHNyICY9IH52Y3B1LT5hcmNoLmdwcltyc107IGJyZWFrOworCWNhc2UgU1BSTl9UQ1I6CisJCXZjcHUtPmFyY2gudGNyID0gdmNwdS0+YXJjaC5ncHJbcnNdOworCQlrdm1wcGNfZW11bGF0ZV9kZWModmNwdSk7CisJCWJyZWFrOworCisJLyogTm90ZTogU1BSRzQtNyBhcmUgdXNlci1yZWFkYWJsZS4gVGhlc2UgdmFsdWVzIGFyZQorCSAqIGxvYWRlZCBpbnRvIHRoZSByZWFsIFNQUkdzIHdoZW4gcmVzdW1pbmcgdGhlCisJICogZ3Vlc3QuICovCisJY2FzZSBTUFJOX1NQUkc0OgorCQl2Y3B1LT5hcmNoLnNwcmc0ID0gdmNwdS0+YXJjaC5ncHJbcnNdOyBicmVhazsKKwljYXNlIFNQUk5fU1BSRzU6CisJCXZjcHUtPmFyY2guc3ByZzUgPSB2Y3B1LT5hcmNoLmdwcltyc107IGJyZWFrOworCWNhc2UgU1BSTl9TUFJHNjoKKwkJdmNwdS0+YXJjaC5zcHJnNiA9IHZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7CisJY2FzZSBTUFJOX1NQUkc3OgorCQl2Y3B1LT5hcmNoLnNwcmc3ID0gdmNwdS0+YXJjaC5ncHJbcnNdOyBicmVhazsKKworCWNhc2UgU1BSTl9JVlBSOgorCQl2Y3B1LT5hcmNoLml2cHIgPSB2Y3B1LT5hcmNoLmdwcltyc107CisJCWJyZWFrOworCWNhc2UgU1BSTl9JVk9SMDoKKwkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fQ1JJVElDQUxdID0gdmNwdS0+YXJjaC5ncHJbcnNdOworCQlicmVhazsKKwljYXNlIFNQUk5fSVZPUjE6CisJCXZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX01BQ0hJTkVfQ0hFQ0tdID0gdmNwdS0+YXJjaC5ncHJbcnNdOworCQlicmVhazsKKwljYXNlIFNQUk5fSVZPUjI6CisJCXZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0RBVEFfU1RPUkFHRV0gPSB2Y3B1LT5hcmNoLmdwcltyc107CisJCWJyZWFrOworCWNhc2UgU1BSTl9JVk9SMzoKKwkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fSU5TVF9TVE9SQUdFXSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0lWT1I0OgorCQl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19FWFRFUk5BTF0gPSB2Y3B1LT5hcmNoLmdwcltyc107CisJCWJyZWFrOworCWNhc2UgU1BSTl9JVk9SNToKKwkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fQUxJR05NRU5UXSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0lWT1I2OgorCQl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19QUk9HUkFNXSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0lWT1I3OgorCQl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19GUF9VTkFWQUlMXSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0lWT1I4OgorCQl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19TWVNDQUxMXSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0lWT1I5OgorCQl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19BUF9VTkFWQUlMXSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0lWT1IxMDoKKwkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fREVDUkVNRU5URVJdID0gdmNwdS0+YXJjaC5ncHJbcnNdOworCQlicmVhazsKKwljYXNlIFNQUk5fSVZPUjExOgorCQl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19GSVRdID0gdmNwdS0+YXJjaC5ncHJbcnNdOworCQlicmVhazsKKwljYXNlIFNQUk5fSVZPUjEyOgorCQl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19XQVRDSERPR10gPSB2Y3B1LT5hcmNoLmdwcltyc107CisJCWJyZWFrOworCWNhc2UgU1BSTl9JVk9SMTM6CisJCXZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0RUTEJfTUlTU10gPSB2Y3B1LT5hcmNoLmdwcltyc107CisJCWJyZWFrOworCWNhc2UgU1BSTl9JVk9SMTQ6CisJCXZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0lUTEJfTUlTU10gPSB2Y3B1LT5hcmNoLmdwcltyc107CisJCWJyZWFrOworCWNhc2UgU1BSTl9JVk9SMTU6CisJCXZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0RFQlVHXSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQllbXVsYXRlZCA9IEVNVUxBVEVfRkFJTDsKKwl9CisKKwlyZXR1cm4gZW11bGF0ZWQ7Cit9CisKK2ludCBrdm1wcGNfYm9va2VfZW11bGF0ZV9tZnNwcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBzcHJuLCBpbnQgcnQpCit7CisJaW50IGVtdWxhdGVkID0gRU1VTEFURV9ET05FOworCisJc3dpdGNoIChzcHJuKSB7CisJY2FzZSBTUFJOX0lWUFI6CisJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guaXZwcjsgYnJlYWs7CisJY2FzZSBTUFJOX0RFQVI6CisJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guZGVhcjsgYnJlYWs7CisJY2FzZSBTUFJOX0VTUjoKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5lc3I7IGJyZWFrOworCWNhc2UgU1BSTl9EQkNSMDoKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5kYmNyMDsgYnJlYWs7CisJY2FzZSBTUFJOX0RCQ1IxOgorCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLmRiY3IxOyBicmVhazsKKwljYXNlIFNQUk5fREJTUjoKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5kYnNyOyBicmVhazsKKworCWNhc2UgU1BSTl9JVk9SMDoKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fQ1JJVElDQUxdOworCQlicmVhazsKKwljYXNlIFNQUk5fSVZPUjE6CisJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX01BQ0hJTkVfQ0hFQ0tdOworCQlicmVhazsKKwljYXNlIFNQUk5fSVZPUjI6CisJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0RBVEFfU1RPUkFHRV07CisJCWJyZWFrOworCWNhc2UgU1BSTl9JVk9SMzoKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fSU5TVF9TVE9SQUdFXTsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0lWT1I0OgorCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19FWFRFUk5BTF07CisJCWJyZWFrOworCWNhc2UgU1BSTl9JVk9SNToKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fQUxJR05NRU5UXTsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0lWT1I2OgorCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19QUk9HUkFNXTsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0lWT1I3OgorCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19GUF9VTkFWQUlMXTsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0lWT1I4OgorCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19TWVNDQUxMXTsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0lWT1I5OgorCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19BUF9VTkFWQUlMXTsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0lWT1IxMDoKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fREVDUkVNRU5URVJdOworCQlicmVhazsKKwljYXNlIFNQUk5fSVZPUjExOgorCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19GSVRdOworCQlicmVhazsKKwljYXNlIFNQUk5fSVZPUjEyOgorCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19XQVRDSERPR107CisJCWJyZWFrOworCWNhc2UgU1BSTl9JVk9SMTM6CisJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0RUTEJfTUlTU107CisJCWJyZWFrOworCWNhc2UgU1BSTl9JVk9SMTQ6CisJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0lUTEJfTUlTU107CisJCWJyZWFrOworCWNhc2UgU1BSTl9JVk9SMTU6CisJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0RFQlVHXTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQllbXVsYXRlZCA9IEVNVUxBVEVfRkFJTDsKKwl9CisKKwlyZXR1cm4gZW11bGF0ZWQ7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2tlX2ludGVycnVwdHMuUyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9va2VfaW50ZXJydXB0cy5TCmluZGV4IDA4NGViY2QuLmQwYzZmODQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vYm9va2VfaW50ZXJydXB0cy5TCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9va2VfaW50ZXJydXB0cy5TCkBAIC04Niw2ICs4Niw5IEBACiBLVk1fSEFORExFUiBCT09LRV9JTlRFUlJVUFRfRFRMQl9NSVNTCiBLVk1fSEFORExFUiBCT09LRV9JTlRFUlJVUFRfSVRMQl9NSVNTCiBLVk1fSEFORExFUiBCT09LRV9JTlRFUlJVUFRfREVCVUcKK0tWTV9IQU5ETEVSIEJPT0tFX0lOVEVSUlVQVF9TUEVfVU5BVkFJTAorS1ZNX0hBTkRMRVIgQk9PS0VfSU5URVJSVVBUX1NQRV9GUF9EQVRBCitLVk1fSEFORExFUiBCT09LRV9JTlRFUlJVUFRfU1BFX0ZQX1JPVU5ECiAKIF9HTE9CQUwoa3ZtcHBjX2hhbmRsZXJfbGVuKQogCS5sb25nIGt2bXBwY19oYW5kbGVyXzEgLSBrdm1wcGNfaGFuZGxlcl8wCkBAIC0zNDcsNyArMzUwLDkgQEAKIAlsd3oJcjMsIFZDUFVfU0hBRE9XX1BJRChyNCkKIAltdHNwcglTUFJOX1BJRCwgcjMKIAorI2lmZGVmIENPTkZJR180NHgKIAlpY2NjaQkwLCAwIC8qIFhYWCBoYWNrICovCisjZW5kaWYKIAogCS8qIExvYWQgc29tZSBndWVzdCB2b2xhdGlsZXMuICovCiAJbHd6CXIwLCBWQ1BVX0dQUihyMCkocjQpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL2U1MDAuYyBiL2FyY2gvcG93ZXJwYy9rdm0vZTUwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4MDY3ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMva3ZtL2U1MDAuYwpAQCAtMCwwICsxLDE2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIEF1dGhvcjogWXUgTGl1LCA8eXUubGl1QGZyZWVzY2FsZS5jb20+CisgKgorICogRGVzY3JpcHRpb246CisgKiBUaGlzIGZpbGUgaXMgZGVyaXZlZCBmcm9tIGFyY2gvcG93ZXJwYy9rdm0vNDR4LmMsCisgKiBieSBIb2xsaXMgQmxhbmNoYXJkIDxob2xsaXNiQHVzLmlibS5jb20+LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIsIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva3ZtX2hvc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKworI2luY2x1ZGUgPGFzbS9yZWcuaD4KKyNpbmNsdWRlIDxhc20vY3B1dGFibGUuaD4KKyNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KKyNpbmNsdWRlIDxhc20va3ZtX2U1MDAuaD4KKyNpbmNsdWRlIDxhc20va3ZtX3BwYy5oPgorCisjaW5jbHVkZSAiYm9va2UuaCIKKyNpbmNsdWRlICJlNTAwX3RsYi5oIgorCit2b2lkIGt2bXBwY19jb3JlX2xvYWRfaG9zdF9kZWJ1Z3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKK30KKwordm9pZCBrdm1wcGNfY29yZV9sb2FkX2d1ZXN0X2RlYnVnc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworfQorCit2b2lkIGt2bXBwY19jb3JlX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpCit7CisJa3ZtcHBjX2U1MDBfdGxiX2xvYWQodmNwdSwgY3B1KTsKK30KKwordm9pZCBrdm1wcGNfY29yZV92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJa3ZtcHBjX2U1MDBfdGxiX3B1dCh2Y3B1KTsKK30KKworaW50IGt2bXBwY19jb3JlX2NoZWNrX3Byb2Nlc3Nvcl9jb21wYXQodm9pZCkKK3sKKwlpbnQgcjsKKworCWlmIChzdHJjbXAoY3VyX2NwdV9zcGVjLT5jcHVfbmFtZSwgImU1MDB2MiIpID09IDApCisJCXIgPSAwOworCWVsc2UKKwkJciA9IC1FTk9UU1VQUDsKKworCXJldHVybiByOworfQorCitpbnQga3ZtcHBjX2NvcmVfdmNwdV9zZXR1cChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKnZjcHVfZTUwMCA9IHRvX2U1MDAodmNwdSk7CisKKwlrdm1wcGNfZTUwMF90bGJfc2V0dXAodmNwdV9lNTAwKTsKKworCS8qIFVzZSB0aGUgc2FtZSBjb3JlIHZlcnRpb24gYXMgaG9zdCdzICovCisJdmNwdS0+YXJjaC5wdnIgPSBtZnNwcihTUFJOX1BWUik7CisKKwlyZXR1cm4gMDsKK30KKworLyogJ2xpbmVhcl9hZGRyZXNzJyBpcyBhY3R1YWxseSBhbiBlbmNvZGluZyBvZiBBU3xQSUR8RUFERFIgLiAqLworaW50IGt2bXBwY19jb3JlX3ZjcHVfdHJhbnNsYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qga3ZtX3RyYW5zbGF0aW9uICp0cikKK3sKKwlpbnQgaW5kZXg7CisJZ3ZhX3QgZWFkZHI7CisJdTggcGlkOworCXU4IGFzOworCisJZWFkZHIgPSB0ci0+bGluZWFyX2FkZHJlc3M7CisJcGlkID0gKHRyLT5saW5lYXJfYWRkcmVzcyA+PiAzMikgJiAweGZmOworCWFzID0gKHRyLT5saW5lYXJfYWRkcmVzcyA+PiA0MCkgJiAweDE7CisKKwlpbmRleCA9IGt2bXBwY19lNTAwX3RsYl9zZWFyY2godmNwdSwgZWFkZHIsIHBpZCwgYXMpOworCWlmIChpbmRleCA8IDApIHsKKwkJdHItPnZhbGlkID0gMDsKKwkJcmV0dXJuIDA7CisJfQorCisJdHItPnBoeXNpY2FsX2FkZHJlc3MgPSBrdm1wcGNfbW11X3hsYXRlKHZjcHUsIGluZGV4LCBlYWRkcik7CisJLyogWFhYIHdoYXQgZG9lcyAid3JpdGVhYmxlIiBhbmQgInVzZXJtb2RlIiBldmVuIG1lYW4/ICovCisJdHItPnZhbGlkID0gMTsKKworCXJldHVybiAwOworfQorCitzdHJ1Y3Qga3ZtX3ZjcHUgKmt2bXBwY19jb3JlX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGlkKQoreworCXN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp2Y3B1X2U1MDA7CisJc3RydWN0IGt2bV92Y3B1ICp2Y3B1OworCWludCBlcnI7CisKKwl2Y3B1X2U1MDAgPSBrbWVtX2NhY2hlX3phbGxvYyhrdm1fdmNwdV9jYWNoZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF2Y3B1X2U1MDApIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJdmNwdSA9ICZ2Y3B1X2U1MDAtPnZjcHU7CisJZXJyID0ga3ZtX3ZjcHVfaW5pdCh2Y3B1LCBrdm0sIGlkKTsKKwlpZiAoZXJyKQorCQlnb3RvIGZyZWVfdmNwdTsKKworCWVyciA9IGt2bXBwY19lNTAwX3RsYl9pbml0KHZjcHVfZTUwMCk7CisJaWYgKGVycikKKwkJZ290byB1bmluaXRfdmNwdTsKKworCXJldHVybiB2Y3B1OworCit1bmluaXRfdmNwdToKKwlrdm1fdmNwdV91bmluaXQodmNwdSk7CitmcmVlX3ZjcHU6CisJa21lbV9jYWNoZV9mcmVlKGt2bV92Y3B1X2NhY2hlLCB2Y3B1X2U1MDApOworb3V0OgorCXJldHVybiBFUlJfUFRSKGVycik7Cit9CisKK3ZvaWQga3ZtcHBjX2NvcmVfdmNwdV9mcmVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwID0gdG9fZTUwMCh2Y3B1KTsKKworCWt2bXBwY19lNTAwX3RsYl91bmluaXQodmNwdV9lNTAwKTsKKwlrdm1fdmNwdV91bmluaXQodmNwdSk7CisJa21lbV9jYWNoZV9mcmVlKGt2bV92Y3B1X2NhY2hlLCB2Y3B1X2U1MDApOworfQorCitzdGF0aWMgaW50IGt2bXBwY19lNTAwX2luaXQodm9pZCkKK3sKKwlpbnQgciwgaTsKKwl1bnNpZ25lZCBsb25nIGl2b3JbM107CisJdW5zaWduZWQgbG9uZyBtYXhfaXZvciA9IDA7CisKKwlyID0ga3ZtcHBjX2Jvb2tlX2luaXQoKTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisKKwkvKiBjb3B5IGV4dHJhIEU1MDAgZXhjZXB0aW9uIGhhbmRsZXJzICovCisJaXZvclswXSA9IG1mc3ByKFNQUk5fSVZPUjMyKTsKKwlpdm9yWzFdID0gbWZzcHIoU1BSTl9JVk9SMzMpOworCWl2b3JbMl0gPSBtZnNwcihTUFJOX0lWT1IzNCk7CisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQlpZiAoaXZvcltpXSA+IG1heF9pdm9yKQorCQkJbWF4X2l2b3IgPSBpdm9yW2ldOworCisJCW1lbWNweSgodm9pZCAqKWt2bXBwY19ib29rZV9oYW5kbGVycyArIGl2b3JbaV0sCisJCSAgICAgICBrdm1wcGNfaGFuZGxlcnNfc3RhcnQgKyAoaSArIDE2KSAqIGt2bXBwY19oYW5kbGVyX2xlbiwKKwkJICAgICAgIGt2bXBwY19oYW5kbGVyX2xlbik7CisJfQorCWZsdXNoX2ljYWNoZV9yYW5nZShrdm1wcGNfYm9va2VfaGFuZGxlcnMsCisJCQlrdm1wcGNfYm9va2VfaGFuZGxlcnMgKyBtYXhfaXZvciArIGt2bXBwY19oYW5kbGVyX2xlbik7CisKKwlyZXR1cm4ga3ZtX2luaXQoTlVMTCwgc2l6ZW9mKHN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwKSwgVEhJU19NT0RVTEUpOworfQorCitzdGF0aWMgdm9pZCBrdm1wcGNfZTUwMF9leGl0KHZvaWQpCit7CisJa3ZtcHBjX2Jvb2tlX2V4aXQoKTsKK30KKworbW9kdWxlX2luaXQoa3ZtcHBjX2U1MDBfaW5pdCk7Cittb2R1bGVfZXhpdChrdm1wcGNfZTUwMF9leGl0KTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vZTUwMF9lbXVsYXRlLmMgYi9hcmNoL3Bvd2VycGMva3ZtL2U1MDBfZW11bGF0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmNzYwNDEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMva3ZtL2U1MDBfZW11bGF0ZS5jCkBAIC0wLDAgKzEsMjAyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogQXV0aG9yOiBZdSBMaXUsIDx5dS5saXVAZnJlZXNjYWxlLmNvbT4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIFRoaXMgZmlsZSBpcyBkZXJpdmVkIGZyb20gYXJjaC9wb3dlcnBjL2t2bS80NHhfZW11bGF0ZS5jLAorICogYnkgSG9sbGlzIEJsYW5jaGFyZCA8aG9sbGlzYkB1cy5pYm0uY29tPi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLCBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGFzbS9rdm1fcHBjLmg+CisjaW5jbHVkZSA8YXNtL2Rpc2Fzc2VtYmxlLmg+CisjaW5jbHVkZSA8YXNtL2t2bV9lNTAwLmg+CisKKyNpbmNsdWRlICJib29rZS5oIgorI2luY2x1ZGUgImU1MDBfdGxiLmgiCisKKyNkZWZpbmUgWE9QX1RMQklWQVggNzg2CisjZGVmaW5lIFhPUF9UTEJTWCAgIDkxNAorI2RlZmluZSBYT1BfVExCUkUgICA5NDYKKyNkZWZpbmUgWE9QX1RMQldFICAgOTc4CisKK2ludCBrdm1wcGNfY29yZV9lbXVsYXRlX29wKHN0cnVjdCBrdm1fcnVuICpydW4sIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBpbnN0LCBpbnQgKmFkdmFuY2UpCit7CisJaW50IGVtdWxhdGVkID0gRU1VTEFURV9ET05FOworCWludCByYTsKKwlpbnQgcmI7CisKKwlzd2l0Y2ggKGdldF9vcChpbnN0KSkgeworCWNhc2UgMzE6CisJCXN3aXRjaCAoZ2V0X3hvcChpbnN0KSkgeworCisJCWNhc2UgWE9QX1RMQlJFOgorCQkJZW11bGF0ZWQgPSBrdm1wcGNfZTUwMF9lbXVsX3RsYnJlKHZjcHUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBYT1BfVExCV0U6CisJCQllbXVsYXRlZCA9IGt2bXBwY19lNTAwX2VtdWxfdGxid2UodmNwdSk7CisJCQlicmVhazsKKworCQljYXNlIFhPUF9UTEJTWDoKKwkJCXJiID0gZ2V0X3JiKGluc3QpOworCQkJZW11bGF0ZWQgPSBrdm1wcGNfZTUwMF9lbXVsX3RsYnN4KHZjcHUscmIpOworCQkJYnJlYWs7CisKKwkJY2FzZSBYT1BfVExCSVZBWDoKKwkJCXJhID0gZ2V0X3JhKGluc3QpOworCQkJcmIgPSBnZXRfcmIoaW5zdCk7CisJCQllbXVsYXRlZCA9IGt2bXBwY19lNTAwX2VtdWxfdGxiaXZheCh2Y3B1LCByYSwgcmIpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWVtdWxhdGVkID0gRU1VTEFURV9GQUlMOworCQl9CisKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQllbXVsYXRlZCA9IEVNVUxBVEVfRkFJTDsKKwl9CisKKwlpZiAoZW11bGF0ZWQgPT0gRU1VTEFURV9GQUlMKQorCQllbXVsYXRlZCA9IGt2bXBwY19ib29rZV9lbXVsYXRlX29wKHJ1biwgdmNwdSwgaW5zdCwgYWR2YW5jZSk7CisKKwlyZXR1cm4gZW11bGF0ZWQ7Cit9CisKK2ludCBrdm1wcGNfY29yZV9lbXVsYXRlX210c3ByKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHNwcm4sIGludCBycykKK3sKKwlzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwID0gdG9fZTUwMCh2Y3B1KTsKKwlpbnQgZW11bGF0ZWQgPSBFTVVMQVRFX0RPTkU7CisKKwlzd2l0Y2ggKHNwcm4pIHsKKwljYXNlIFNQUk5fUElEOgorCQl2Y3B1X2U1MDAtPnBpZFswXSA9IHZjcHUtPmFyY2guc2hhZG93X3BpZCA9CisJCQl2Y3B1LT5hcmNoLnBpZCA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX1BJRDE6CisJCXZjcHVfZTUwMC0+cGlkWzFdID0gdmNwdS0+YXJjaC5ncHJbcnNdOyBicmVhazsKKwljYXNlIFNQUk5fUElEMjoKKwkJdmNwdV9lNTAwLT5waWRbMl0gPSB2Y3B1LT5hcmNoLmdwcltyc107IGJyZWFrOworCWNhc2UgU1BSTl9NQVMwOgorCQl2Y3B1X2U1MDAtPm1hczAgPSB2Y3B1LT5hcmNoLmdwcltyc107IGJyZWFrOworCWNhc2UgU1BSTl9NQVMxOgorCQl2Y3B1X2U1MDAtPm1hczEgPSB2Y3B1LT5hcmNoLmdwcltyc107IGJyZWFrOworCWNhc2UgU1BSTl9NQVMyOgorCQl2Y3B1X2U1MDAtPm1hczIgPSB2Y3B1LT5hcmNoLmdwcltyc107IGJyZWFrOworCWNhc2UgU1BSTl9NQVMzOgorCQl2Y3B1X2U1MDAtPm1hczMgPSB2Y3B1LT5hcmNoLmdwcltyc107IGJyZWFrOworCWNhc2UgU1BSTl9NQVM0OgorCQl2Y3B1X2U1MDAtPm1hczQgPSB2Y3B1LT5hcmNoLmdwcltyc107IGJyZWFrOworCWNhc2UgU1BSTl9NQVM2OgorCQl2Y3B1X2U1MDAtPm1hczYgPSB2Y3B1LT5hcmNoLmdwcltyc107IGJyZWFrOworCWNhc2UgU1BSTl9NQVM3OgorCQl2Y3B1X2U1MDAtPm1hczcgPSB2Y3B1LT5hcmNoLmdwcltyc107IGJyZWFrOworCWNhc2UgU1BSTl9MMUNTUjE6CisJCXZjcHVfZTUwMC0+bDFjc3IxID0gdmNwdS0+YXJjaC5ncHJbcnNdOyBicmVhazsKKwljYXNlIFNQUk5fSElEMDoKKwkJdmNwdV9lNTAwLT5oaWQwID0gdmNwdS0+YXJjaC5ncHJbcnNdOyBicmVhazsKKwljYXNlIFNQUk5fSElEMToKKwkJdmNwdV9lNTAwLT5oaWQxID0gdmNwdS0+YXJjaC5ncHJbcnNdOyBicmVhazsKKworCWNhc2UgU1BSTl9NTVVDU1IwOgorCQllbXVsYXRlZCA9IGt2bXBwY19lNTAwX2VtdWxfbXRfbW11Y3NyMCh2Y3B1X2U1MDAsCisJCQkJdmNwdS0+YXJjaC5ncHJbcnNdKTsKKwkJYnJlYWs7CisKKwkvKiBleHRyYSBleGNlcHRpb25zICovCisJY2FzZSBTUFJOX0lWT1IzMjoKKwkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fU1BFX1VOQVZBSUxdID0gdmNwdS0+YXJjaC5ncHJbcnNdOworCQlicmVhazsKKwljYXNlIFNQUk5fSVZPUjMzOgorCQl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19TUEVfRlBfREFUQV0gPSB2Y3B1LT5hcmNoLmdwcltyc107CisJCWJyZWFrOworCWNhc2UgU1BSTl9JVk9SMzQ6CisJCXZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX1NQRV9GUF9ST1VORF0gPSB2Y3B1LT5hcmNoLmdwcltyc107CisJCWJyZWFrOworCWNhc2UgU1BSTl9JVk9SMzU6CisJCXZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX1BFUkZPUk1BTkNFX01PTklUT1JdID0gdmNwdS0+YXJjaC5ncHJbcnNdOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWVtdWxhdGVkID0ga3ZtcHBjX2Jvb2tlX2VtdWxhdGVfbXRzcHIodmNwdSwgc3BybiwgcnMpOworCX0KKworCXJldHVybiBlbXVsYXRlZDsKK30KKworaW50IGt2bXBwY19jb3JlX2VtdWxhdGVfbWZzcHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgc3BybiwgaW50IHJ0KQoreworCXN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp2Y3B1X2U1MDAgPSB0b19lNTAwKHZjcHUpOworCWludCBlbXVsYXRlZCA9IEVNVUxBVEVfRE9ORTsKKworCXN3aXRjaCAoc3BybikgeworCWNhc2UgU1BSTl9QSUQ6CisJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHVfZTUwMC0+cGlkWzBdOyBicmVhazsKKwljYXNlIFNQUk5fUElEMToKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdV9lNTAwLT5waWRbMV07IGJyZWFrOworCWNhc2UgU1BSTl9QSUQyOgorCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1X2U1MDAtPnBpZFsyXTsgYnJlYWs7CisJY2FzZSBTUFJOX01BUzA6CisJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHVfZTUwMC0+bWFzMDsgYnJlYWs7CisJY2FzZSBTUFJOX01BUzE6CisJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHVfZTUwMC0+bWFzMTsgYnJlYWs7CisJY2FzZSBTUFJOX01BUzI6CisJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHVfZTUwMC0+bWFzMjsgYnJlYWs7CisJY2FzZSBTUFJOX01BUzM6CisJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHVfZTUwMC0+bWFzMzsgYnJlYWs7CisJY2FzZSBTUFJOX01BUzQ6CisJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHVfZTUwMC0+bWFzNDsgYnJlYWs7CisJY2FzZSBTUFJOX01BUzY6CisJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHVfZTUwMC0+bWFzNjsgYnJlYWs7CisJY2FzZSBTUFJOX01BUzc6CisJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHVfZTUwMC0+bWFzNzsgYnJlYWs7CisKKwljYXNlIFNQUk5fVExCMENGRzoKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gbWZzcHIoU1BSTl9UTEIwQ0ZHKTsKKwkJdmNwdS0+YXJjaC5ncHJbcnRdICY9IH4weGZmZlVMOworCQl2Y3B1LT5hcmNoLmdwcltydF0gfD0gdmNwdV9lNTAwLT5ndWVzdF90bGJfc2l6ZVswXTsKKwkJYnJlYWs7CisKKwljYXNlIFNQUk5fVExCMUNGRzoKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gbWZzcHIoU1BSTl9UTEIxQ0ZHKTsKKwkJdmNwdS0+YXJjaC5ncHJbcnRdICY9IH4weGZmZlVMOworCQl2Y3B1LT5hcmNoLmdwcltydF0gfD0gdmNwdV9lNTAwLT5ndWVzdF90bGJfc2l6ZVsxXTsKKwkJYnJlYWs7CisKKwljYXNlIFNQUk5fTDFDU1IxOgorCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1X2U1MDAtPmwxY3NyMTsgYnJlYWs7CisJY2FzZSBTUFJOX0hJRDA6CisJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHVfZTUwMC0+aGlkMDsgYnJlYWs7CisJY2FzZSBTUFJOX0hJRDE6CisJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHVfZTUwMC0+aGlkMTsgYnJlYWs7CisKKwljYXNlIFNQUk5fTU1VQ1NSMDoKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gMDsgYnJlYWs7CisKKwkvKiBleHRyYSBleGNlcHRpb25zICovCisJY2FzZSBTUFJOX0lWT1IzMjoKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fU1BFX1VOQVZBSUxdOworCQlicmVhazsKKwljYXNlIFNQUk5fSVZPUjMzOgorCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19TUEVfRlBfREFUQV07CisJCWJyZWFrOworCWNhc2UgU1BSTl9JVk9SMzQ6CisJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX1NQRV9GUF9ST1VORF07CisJCWJyZWFrOworCWNhc2UgU1BSTl9JVk9SMzU6CisJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX1BFUkZPUk1BTkNFX01PTklUT1JdOworCQlicmVhazsKKwlkZWZhdWx0OgorCQllbXVsYXRlZCA9IGt2bXBwY19ib29rZV9lbXVsYXRlX21mc3ByKHZjcHUsIHNwcm4sIHJ0KTsKKwl9CisKKwlyZXR1cm4gZW11bGF0ZWQ7Cit9CisKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vZTUwMF90bGIuYyBiL2FyY2gvcG93ZXJwYy9rdm0vZTUwMF90bGIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTc3M2ZjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2t2bS9lNTAwX3RsYi5jCkBAIC0wLDAgKzEsNzU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogQXV0aG9yOiBZdSBMaXUsIHl1LmxpdUBmcmVlc2NhbGUuY29tCisgKgorICogRGVzY3JpcHRpb246CisgKiBUaGlzIGZpbGUgaXMgYmFzZWQgb24gYXJjaC9wb3dlcnBjL2t2bS80NHhfdGxiLmMsCisgKiBieSBIb2xsaXMgQmxhbmNoYXJkIDxob2xsaXNiQHVzLmlibS5jb20+LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIsIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9rdm0uaD4KKyNpbmNsdWRlIDxsaW51eC9rdm1faG9zdC5oPgorI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KKyNpbmNsdWRlIDxhc20va3ZtX3BwYy5oPgorI2luY2x1ZGUgPGFzbS9rdm1fZTUwMC5oPgorCisjaW5jbHVkZSAiLi4vbW0vbW11X2RlY2wuaCIKKyNpbmNsdWRlICJlNTAwX3RsYi5oIgorCisjZGVmaW5lIHRvX2h0bGIxX2VzZWwoZXNlbCkgKHRsYjFfZW50cnlfbnVtIC0gKGVzZWwpIC0gMSkKKworc3RhdGljIHVuc2lnbmVkIGludCB0bGIxX2VudHJ5X251bTsKKwordm9pZCBrdm1wcGNfZHVtcF90bGJzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwID0gdG9fZTUwMCh2Y3B1KTsKKwlzdHJ1Y3QgdGxiZSAqdGxiZTsKKwlpbnQgaSwgdGxic2VsOworCisJcHJpbnRrKCJ8ICU4cyB8ICU4cyB8ICU4cyB8ICU4cyB8ICU4cyB8XG4iLAorCQkJIm5yIiwgIm1hczEiLCAibWFzMiIsICJtYXMzIiwgIm1hczciKTsKKworCWZvciAodGxic2VsID0gMDsgdGxic2VsIDwgMjsgdGxic2VsKyspIHsKKwkJcHJpbnRrKCJHdWVzdCBUTEIlZDpcbiIsIHRsYnNlbCk7CisJCWZvciAoaSA9IDA7IGkgPCB2Y3B1X2U1MDAtPmd1ZXN0X3RsYl9zaXplW3RsYnNlbF07IGkrKykgeworCQkJdGxiZSA9ICZ2Y3B1X2U1MDAtPmd1ZXN0X3RsYlt0bGJzZWxdW2ldOworCQkJaWYgKHRsYmUtPm1hczEgJiBNQVMxX1ZBTElEKQorCQkJCXByaW50aygiIEdbJWRdWyUzZF0gfCAgJTA4WCB8ICUwOFggfCAlMDhYIHwgJTA4WCB8XG4iLAorCQkJCQl0bGJzZWwsIGksIHRsYmUtPm1hczEsIHRsYmUtPm1hczIsCisJCQkJCXRsYmUtPm1hczMsIHRsYmUtPm1hczcpOworCQl9CisJfQorCisJZm9yICh0bGJzZWwgPSAwOyB0bGJzZWwgPCAyOyB0bGJzZWwrKykgeworCQlwcmludGsoIlNoYWRvdyBUTEIlZDpcbiIsIHRsYnNlbCk7CisJCWZvciAoaSA9IDA7IGkgPCB2Y3B1X2U1MDAtPnNoYWRvd190bGJfc2l6ZVt0bGJzZWxdOyBpKyspIHsKKwkJCXRsYmUgPSAmdmNwdV9lNTAwLT5zaGFkb3dfdGxiW3RsYnNlbF1baV07CisJCQlpZiAodGxiZS0+bWFzMSAmIE1BUzFfVkFMSUQpCisJCQkJcHJpbnRrKCIgU1slZF1bJTNkXSB8ICAlMDhYIHwgJTA4WCB8ICUwOFggfCAlMDhYIHxcbiIsCisJCQkJCXRsYnNlbCwgaSwgdGxiZS0+bWFzMSwgdGxiZS0+bWFzMiwKKwkJCQkJdGxiZS0+bWFzMywgdGxiZS0+bWFzNyk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHRsYjBfZ2V0X25leHRfdmljdGltKAorCQlzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwKQoreworCXVuc2lnbmVkIGludCB2aWN0aW07CisKKwl2aWN0aW0gPSB2Y3B1X2U1MDAtPmd1ZXN0X3RsYl9udlswXSsrOworCWlmICh1bmxpa2VseSh2Y3B1X2U1MDAtPmd1ZXN0X3RsYl9udlswXSA+PSBLVk1fRTUwMF9UTEIwX1dBWV9OVU0pKQorCQl2Y3B1X2U1MDAtPmd1ZXN0X3RsYl9udlswXSA9IDA7CisKKwlyZXR1cm4gdmljdGltOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB0bGIxX21heF9zaGFkb3dfc2l6ZSh2b2lkKQoreworCXJldHVybiB0bGIxX2VudHJ5X251bSAtIHRsYmNhbV9pbmRleDsKK30KKworc3RhdGljIGlubGluZSBpbnQgdGxiZV9pc193cml0YWJsZShzdHJ1Y3QgdGxiZSAqdGxiZSkKK3sKKwlyZXR1cm4gdGxiZS0+bWFzMyAmIChNQVMzX1NXfE1BUzNfVVcpOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBlNTAwX3NoYWRvd19tYXMzX2F0dHJpYih1MzIgbWFzMywgaW50IHVzZXJtb2RlKQoreworCS8qIE1hc2sgb2ZmIHJlc2VydmVkIGJpdHMuICovCisJbWFzMyAmPSBNQVMzX0FUVFJJQl9NQVNLOworCisJaWYgKCF1c2VybW9kZSkgeworCQkvKiBHdWVzdCBpcyBpbiBzdXBlcnZpc29yIG1vZGUsCisJCSAqIHNvIHdlIG5lZWQgdG8gdHJhbnNsYXRlIGd1ZXN0CisJCSAqIHN1cGVydmlzb3IgcGVybWlzc2lvbnMgaW50byB1c2VyIHBlcm1pc3Npb25zLiAqLworCQltYXMzICY9IH5FNTAwX1RMQl9VU0VSX1BFUk1fTUFTSzsKKwkJbWFzMyB8PSAobWFzMyAmIEU1MDBfVExCX1NVUEVSX1BFUk1fTUFTSykgPDwgMTsKKwl9CisKKwlyZXR1cm4gbWFzMyB8IEU1MDBfVExCX1NVUEVSX1BFUk1fTUFTSzsKK30KKworc3RhdGljIGlubGluZSB1MzIgZTUwMF9zaGFkb3dfbWFzMl9hdHRyaWIodTMyIG1hczIsIGludCB1c2VybW9kZSkKK3sKKyNpZmRlZiBDT05GSUdfU01QCisJcmV0dXJuIChtYXMyICYgTUFTMl9BVFRSSUJfTUFTSykgfCBNQVMyX007CisjZWxzZQorCXJldHVybiBtYXMyICYgTUFTMl9BVFRSSUJfTUFTSzsKKyNlbmRpZgorfQorCisvKgorICogd3JpdGluZyBzaGFkb3cgdGxiIGVudHJ5IHRvIGhvc3QgVExCCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3dyaXRlX2hvc3RfdGxiZShzdHJ1Y3QgdGxiZSAqc3RsYmUpCit7CisJbXRzcHIoU1BSTl9NQVMxLCBzdGxiZS0+bWFzMSk7CisJbXRzcHIoU1BSTl9NQVMyLCBzdGxiZS0+bWFzMik7CisJbXRzcHIoU1BSTl9NQVMzLCBzdGxiZS0+bWFzMyk7CisJbXRzcHIoU1BSTl9NQVM3LCBzdGxiZS0+bWFzNyk7CisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJ0bGJ3ZVxuIiA6IDogKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHdyaXRlX2hvc3RfdGxiZShzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwLAorCQlpbnQgdGxic2VsLCBpbnQgZXNlbCkKK3sKKwlzdHJ1Y3QgdGxiZSAqc3RsYmUgPSAmdmNwdV9lNTAwLT5zaGFkb3dfdGxiW3RsYnNlbF1bZXNlbF07CisKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCWlmICh0bGJzZWwgPT0gMCkgeworCQlfX3dyaXRlX2hvc3RfdGxiZShzdGxiZSk7CisJfSBlbHNlIHsKKwkJdW5zaWduZWQgcmVnaXN0ZXIgbWFzMDsKKworCQltYXMwID0gbWZzcHIoU1BSTl9NQVMwKTsKKworCQltdHNwcihTUFJOX01BUzAsIE1BUzBfVExCU0VMKDEpIHwgTUFTMF9FU0VMKHRvX2h0bGIxX2VzZWwoZXNlbCkpKTsKKwkJX193cml0ZV9ob3N0X3RsYmUoc3RsYmUpOworCisJCW10c3ByKFNQUk5fTUFTMCwgbWFzMCk7CisJfQorCWxvY2FsX2lycV9lbmFibGUoKTsKK30KKwordm9pZCBrdm1wcGNfZTUwMF90bGJfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpCit7CisJc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKnZjcHVfZTUwMCA9IHRvX2U1MDAodmNwdSk7CisJaW50IGk7CisJdW5zaWduZWQgcmVnaXN0ZXIgbWFzMDsKKworCS8qIExvYWQgYWxsIHZhbGlkIFRMQjEgZW50cmllcyB0byByZWR1Y2UgZ3Vlc3QgdGxiIG1pc3MgZmF1bHQgKi8KKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCW1hczAgPSBtZnNwcihTUFJOX01BUzApOworCWZvciAoaSA9IDA7IGkgPCB0bGIxX21heF9zaGFkb3dfc2l6ZSgpOyBpKyspIHsKKwkJc3RydWN0IHRsYmUgKnN0bGJlID0gJnZjcHVfZTUwMC0+c2hhZG93X3RsYlsxXVtpXTsKKworCQlpZiAoZ2V0X3RsYl92KHN0bGJlKSkgeworCQkJbXRzcHIoU1BSTl9NQVMwLCBNQVMwX1RMQlNFTCgxKQorCQkJCQl8IE1BUzBfRVNFTCh0b19odGxiMV9lc2VsKGkpKSk7CisJCQlfX3dyaXRlX2hvc3RfdGxiZShzdGxiZSk7CisJCX0KKwl9CisJbXRzcHIoU1BSTl9NQVMwLCBtYXMwKTsKKwlsb2NhbF9pcnFfZW5hYmxlKCk7Cit9CisKK3ZvaWQga3ZtcHBjX2U1MDBfdGxiX3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJX3RsYmlsX2FsbCgpOworfQorCisvKiBTZWFyY2ggdGhlIGd1ZXN0IFRMQiBmb3IgYSBtYXRjaGluZyBlbnRyeS4gKi8KK3N0YXRpYyBpbnQga3ZtcHBjX2U1MDBfdGxiX2luZGV4KHN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp2Y3B1X2U1MDAsCisJCWd2YV90IGVhZGRyLCBpbnQgdGxic2VsLCB1bnNpZ25lZCBpbnQgcGlkLCBpbnQgYXMpCit7CisJaW50IGk7CisKKwkvKiBYWFggUmVwbGFjZSBsb29wIHdpdGggZmFuY3kgZGF0YSBzdHJ1Y3R1cmVzLiAqLworCWZvciAoaSA9IDA7IGkgPCB2Y3B1X2U1MDAtPmd1ZXN0X3RsYl9zaXplW3RsYnNlbF07IGkrKykgeworCQlzdHJ1Y3QgdGxiZSAqdGxiZSA9ICZ2Y3B1X2U1MDAtPmd1ZXN0X3RsYlt0bGJzZWxdW2ldOworCQl1bnNpZ25lZCBpbnQgdGlkOworCisJCWlmIChlYWRkciA8IGdldF90bGJfZWFkZHIodGxiZSkpCisJCQljb250aW51ZTsKKworCQlpZiAoZWFkZHIgPiBnZXRfdGxiX2VuZCh0bGJlKSkKKwkJCWNvbnRpbnVlOworCisJCXRpZCA9IGdldF90bGJfdGlkKHRsYmUpOworCQlpZiAodGlkICYmICh0aWQgIT0gcGlkKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICghZ2V0X3RsYl92KHRsYmUpKQorCQkJY29udGludWU7CisKKwkJaWYgKGdldF90bGJfdHModGxiZSkgIT0gYXMgJiYgYXMgIT0gLTEpCisJCQljb250aW51ZTsKKworCQlyZXR1cm4gaTsKKwl9CisKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyB2b2lkIGt2bXBwY19lNTAwX3NoYWRvd19yZWxlYXNlKHN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp2Y3B1X2U1MDAsCisJCWludCB0bGJzZWwsIGludCBlc2VsKQoreworCXN0cnVjdCB0bGJlICpzdGxiZSA9ICZ2Y3B1X2U1MDAtPnNoYWRvd190bGJbdGxic2VsXVtlc2VsXTsKKwlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHZjcHVfZTUwMC0+c2hhZG93X3BhZ2VzW3RsYnNlbF1bZXNlbF07CisKKwlpZiAocGFnZSkgeworCQl2Y3B1X2U1MDAtPnNoYWRvd19wYWdlc1t0bGJzZWxdW2VzZWxdID0gTlVMTDsKKworCQlpZiAoZ2V0X3RsYl92KHN0bGJlKSkgeworCQkJaWYgKHRsYmVfaXNfd3JpdGFibGUoc3RsYmUpKQorCQkJCWt2bV9yZWxlYXNlX3BhZ2VfZGlydHkocGFnZSk7CisJCQllbHNlCisJCQkJa3ZtX3JlbGVhc2VfcGFnZV9jbGVhbihwYWdlKTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQga3ZtcHBjX2U1MDBfc3RsYmVfaW52YWxpZGF0ZShzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwLAorCQlpbnQgdGxic2VsLCBpbnQgZXNlbCkKK3sKKwlzdHJ1Y3QgdGxiZSAqc3RsYmUgPSAmdmNwdV9lNTAwLT5zaGFkb3dfdGxiW3RsYnNlbF1bZXNlbF07CisKKwlrdm1wcGNfZTUwMF9zaGFkb3dfcmVsZWFzZSh2Y3B1X2U1MDAsIHRsYnNlbCwgZXNlbCk7CisJc3RsYmUtPm1hczEgPSAwOworCUtWTVRSQUNFXzVEKFNUTEJfSU5WQUwsICZ2Y3B1X2U1MDAtPnZjcHUsIGluZGV4X29mKHRsYnNlbCwgZXNlbCksCisJCQlzdGxiZS0+bWFzMSwgc3RsYmUtPm1hczIsIHN0bGJlLT5tYXMzLCBzdGxiZS0+bWFzNywKKwkJCWhhbmRsZXIpOworfQorCitzdGF0aWMgdm9pZCBrdm1wcGNfZTUwMF90bGIxX2ludmFsaWRhdGUoc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKnZjcHVfZTUwMCwKKwkJZ3ZhX3QgZWFkZHIsIGd2YV90IGVlbmQsIHUzMiB0aWQpCit7CisJdW5zaWduZWQgaW50IHBpZCA9IHRpZCAmIDB4ZmY7CisJdW5zaWduZWQgaW50IGk7CisKKwkvKiBYWFggUmVwbGFjZSBsb29wIHdpdGggZmFuY3kgZGF0YSBzdHJ1Y3R1cmVzLiAqLworCWZvciAoaSA9IDA7IGkgPCB2Y3B1X2U1MDAtPmd1ZXN0X3RsYl9zaXplWzFdOyBpKyspIHsKKwkJc3RydWN0IHRsYmUgKnN0bGJlID0gJnZjcHVfZTUwMC0+c2hhZG93X3RsYlsxXVtpXTsKKwkJdW5zaWduZWQgaW50IHRpZDsKKworCQlpZiAoIWdldF90bGJfdihzdGxiZSkpCisJCQljb250aW51ZTsKKworCQlpZiAoZWVuZCA8IGdldF90bGJfZWFkZHIoc3RsYmUpKQorCQkJY29udGludWU7CisKKwkJaWYgKGVhZGRyID4gZ2V0X3RsYl9lbmQoc3RsYmUpKQorCQkJY29udGludWU7CisKKwkJdGlkID0gZ2V0X3RsYl90aWQoc3RsYmUpOworCQlpZiAodGlkICYmICh0aWQgIT0gcGlkKSkKKwkJCWNvbnRpbnVlOworCisJCWt2bXBwY19lNTAwX3N0bGJlX2ludmFsaWRhdGUodmNwdV9lNTAwLCAxLCBpKTsKKwkJd3JpdGVfaG9zdF90bGJlKHZjcHVfZTUwMCwgMSwgaSk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQga3ZtcHBjX2U1MDBfZGVsaXZlcl90bGJfbWlzcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisJCXVuc2lnbmVkIGludCBlYWRkciwgaW50IGFzKQoreworCXN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp2Y3B1X2U1MDAgPSB0b19lNTAwKHZjcHUpOworCXVuc2lnbmVkIGludCB2aWN0aW0sIHBpZHNlbCwgdHNpemVkOworCWludCB0bGJzZWw7CisKKwkvKiBzaW5jZSB3ZSBvbmx5IGhhdmUgdHdvIFRMQnMsIG9ubHkgbG93ZXIgYml0IGlzIHVzZWQuICovCisJdGxic2VsID0gKHZjcHVfZTUwMC0+bWFzNCA+PiAyOCkgJiAweDE7CisJdmljdGltID0gKHRsYnNlbCA9PSAwKSA/IHRsYjBfZ2V0X25leHRfdmljdGltKHZjcHVfZTUwMCkgOiAwOworCXBpZHNlbCA9ICh2Y3B1X2U1MDAtPm1hczQgPj4gMTYpICYgMHhmOworCXRzaXplZCA9ICh2Y3B1X2U1MDAtPm1hczQgPj4gOCkgJiAweGY7CisKKwl2Y3B1X2U1MDAtPm1hczAgPSBNQVMwX1RMQlNFTCh0bGJzZWwpIHwgTUFTMF9FU0VMKHZpY3RpbSkKKwkJfCBNQVMwX05WKHZjcHVfZTUwMC0+Z3Vlc3RfdGxiX252W3RsYnNlbF0pOworCXZjcHVfZTUwMC0+bWFzMSA9IE1BUzFfVkFMSUQgfCAoYXMgPyBNQVMxX1RTIDogMCkKKwkJfCBNQVMxX1RJRCh2Y3B1X2U1MDAtPnBpZFtwaWRzZWxdKQorCQl8IE1BUzFfVFNJWkUodHNpemVkKTsKKwl2Y3B1X2U1MDAtPm1hczIgPSAoZWFkZHIgJiBNQVMyX0VQTikKKwkJfCAodmNwdV9lNTAwLT5tYXM0ICYgTUFTMl9BVFRSSUJfTUFTSyk7CisJdmNwdV9lNTAwLT5tYXMzICY9IE1BUzNfVTAgfCBNQVMzX1UxIHwgTUFTM19VMiB8IE1BUzNfVTM7CisJdmNwdV9lNTAwLT5tYXM2ID0gKHZjcHVfZTUwMC0+bWFzNiAmIE1BUzZfU1BJRDEpCisJCXwgKGdldF9jdXJfcGlkKHZjcHUpIDw8IDE2KQorCQl8IChhcyA/IE1BUzZfU0FTIDogMCk7CisJdmNwdV9lNTAwLT5tYXM3ID0gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGt2bXBwY19lNTAwX3NoYWRvd19tYXAoc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKnZjcHVfZTUwMCwKKwl1NjQgZ3ZhZGRyLCBnZm5fdCBnZm4sIHN0cnVjdCB0bGJlICpndGxiZSwgaW50IHRsYnNlbCwgaW50IGVzZWwpCit7CisJc3RydWN0IHBhZ2UgKm5ld19wYWdlOworCXN0cnVjdCB0bGJlICpzdGxiZTsKKwlocGFfdCBocGFkZHI7CisKKwlzdGxiZSA9ICZ2Y3B1X2U1MDAtPnNoYWRvd190bGJbdGxic2VsXVtlc2VsXTsKKworCS8qIEdldCByZWZlcmVuY2UgdG8gbmV3IHBhZ2UuICovCisJbmV3X3BhZ2UgPSBnZm5fdG9fcGFnZSh2Y3B1X2U1MDAtPnZjcHUua3ZtLCBnZm4pOworCWlmIChpc19lcnJvcl9wYWdlKG5ld19wYWdlKSkgeworCQlwcmludGsoS0VSTl9FUlIgIkNvdWxkbid0IGdldCBndWVzdCBwYWdlIGZvciBnZm4gJWx4IVxuIiwgZ2ZuKTsKKwkJa3ZtX3JlbGVhc2VfcGFnZV9jbGVhbihuZXdfcGFnZSk7CisJCXJldHVybjsKKwl9CisJaHBhZGRyID0gcGFnZV90b19waHlzKG5ld19wYWdlKTsKKworCS8qIERyb3AgcmVmZXJlbmNlIHRvIG9sZCBwYWdlLiAqLworCWt2bXBwY19lNTAwX3NoYWRvd19yZWxlYXNlKHZjcHVfZTUwMCwgdGxic2VsLCBlc2VsKTsKKworCXZjcHVfZTUwMC0+c2hhZG93X3BhZ2VzW3RsYnNlbF1bZXNlbF0gPSBuZXdfcGFnZTsKKworCS8qIEZvcmNlIFRTPTEgSVBST1Q9MCBUU0laRT00S0IgZm9yIGFsbCBndWVzdCBtYXBwaW5ncy4gKi8KKwlzdGxiZS0+bWFzMSA9IE1BUzFfVFNJWkUoQk9PS0VfUEFHRVNaXzRLKQorCQl8IE1BUzFfVElEKGdldF90bGJfdGlkKGd0bGJlKSkgfCBNQVMxX1RTIHwgTUFTMV9WQUxJRDsKKwlzdGxiZS0+bWFzMiA9IChndmFkZHIgJiBNQVMyX0VQTikKKwkJfCBlNTAwX3NoYWRvd19tYXMyX2F0dHJpYihndGxiZS0+bWFzMiwKKwkJCQl2Y3B1X2U1MDAtPnZjcHUuYXJjaC5tc3IgJiBNU1JfUFIpOworCXN0bGJlLT5tYXMzID0gKGhwYWRkciAmIE1BUzNfUlBOKQorCQl8IGU1MDBfc2hhZG93X21hczNfYXR0cmliKGd0bGJlLT5tYXMzLAorCQkJCXZjcHVfZTUwMC0+dmNwdS5hcmNoLm1zciAmIE1TUl9QUik7CisJc3RsYmUtPm1hczcgPSAoaHBhZGRyID4+IDMyKSAmIE1BUzdfUlBOOworCisJS1ZNVFJBQ0VfNUQoU1RMQl9XUklURSwgJnZjcHVfZTUwMC0+dmNwdSwgaW5kZXhfb2YodGxic2VsLCBlc2VsKSwKKwkJCXN0bGJlLT5tYXMxLCBzdGxiZS0+bWFzMiwgc3RsYmUtPm1hczMsIHN0bGJlLT5tYXM3LAorCQkJaGFuZGxlcik7Cit9CisKKy8qIFhYWCBvbmx5IG1hcCB0aGUgb25lLW9uZSBjYXNlLCBmb3Igbm93IHVzZSBUTEIwICovCitzdGF0aWMgaW50IGt2bXBwY19lNTAwX3N0bGJlX21hcChzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwLAorCQlpbnQgdGxic2VsLCBpbnQgZXNlbCkKK3sKKwlzdHJ1Y3QgdGxiZSAqZ3RsYmU7CisKKwlndGxiZSA9ICZ2Y3B1X2U1MDAtPmd1ZXN0X3RsYlt0bGJzZWxdW2VzZWxdOworCisJa3ZtcHBjX2U1MDBfc2hhZG93X21hcCh2Y3B1X2U1MDAsIGdldF90bGJfZWFkZHIoZ3RsYmUpLAorCQkJZ2V0X3RsYl9yYWRkcihndGxiZSkgPj4gUEFHRV9TSElGVCwKKwkJCWd0bGJlLCB0bGJzZWwsIGVzZWwpOworCisJcmV0dXJuIGVzZWw7Cit9CisKKy8qIENhbGxlciBtdXN0IGVuc3VyZSB0aGF0IHRoZSBzcGVjaWZpZWQgZ3Vlc3QgVExCIGVudHJ5IGlzIHNhZmUgdG8gaW5zZXJ0IGludG8KKyAqIHRoZSBzaGFkb3cgVExCLiAqLworLyogWFhYIGZvciBib3RoIG9uZS1vbmUgYW5kIG9uZS10by1tYW55ICwgZm9yIG5vdyB1c2UgVExCMSAqLworc3RhdGljIGludCBrdm1wcGNfZTUwMF90bGIxX21hcChzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwLAorCQl1NjQgZ3ZhZGRyLCBnZm5fdCBnZm4sIHN0cnVjdCB0bGJlICpndGxiZSkKK3sKKwl1bnNpZ25lZCBpbnQgdmljdGltOworCisJdmljdGltID0gdmNwdV9lNTAwLT5ndWVzdF90bGJfbnZbMV0rKzsKKworCWlmICh1bmxpa2VseSh2Y3B1X2U1MDAtPmd1ZXN0X3RsYl9udlsxXSA+PSB0bGIxX21heF9zaGFkb3dfc2l6ZSgpKSkKKwkJdmNwdV9lNTAwLT5ndWVzdF90bGJfbnZbMV0gPSAwOworCisJa3ZtcHBjX2U1MDBfc2hhZG93X21hcCh2Y3B1X2U1MDAsIGd2YWRkciwgZ2ZuLCBndGxiZSwgMSwgdmljdGltKTsKKworCXJldHVybiB2aWN0aW07Cit9CisKKy8qIEludmFsaWRhdGUgYWxsIGd1ZXN0IGtlcm5lbCBtYXBwaW5ncyB3aGVuIGVudGVyIHVzZXJtb2RlLAorICogc28gdGhhdCB3aGVuIHRoZXkgZmF1bHQgYmFjayBpbiB0aGV5IHdpbGwgZ2V0IHRoZQorICogcHJvcGVyIHBlcm1pc3Npb24gYml0cy4gKi8KK3ZvaWQga3ZtcHBjX21tdV9wcml2X3N3aXRjaChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCB1c2VybW9kZSkKK3sKKwlpZiAodXNlcm1vZGUpIHsKKwkJc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKnZjcHVfZTUwMCA9IHRvX2U1MDAodmNwdSk7CisJCWludCBpOworCisJCS8qIFhYWCBSZXBsYWNlIGxvb3Agd2l0aCBmYW5jeSBkYXRhIHN0cnVjdHVyZXMuICovCisJCWZvciAoaSA9IDA7IGkgPCB0bGIxX21heF9zaGFkb3dfc2l6ZSgpOyBpKyspCisJCQlrdm1wcGNfZTUwMF9zdGxiZV9pbnZhbGlkYXRlKHZjcHVfZTUwMCwgMSwgaSk7CisKKwkJX3RsYmlsX2FsbCgpOworCX0KK30KKworc3RhdGljIGludCBrdm1wcGNfZTUwMF9ndGxiZV9pbnZhbGlkYXRlKHN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp2Y3B1X2U1MDAsCisJCWludCB0bGJzZWwsIGludCBlc2VsKQoreworCXN0cnVjdCB0bGJlICpndGxiZSA9ICZ2Y3B1X2U1MDAtPmd1ZXN0X3RsYlt0bGJzZWxdW2VzZWxdOworCisJaWYgKHVubGlrZWx5KGdldF90bGJfaXByb3QoZ3RsYmUpKSkKKwkJcmV0dXJuIC0xOworCisJaWYgKHRsYnNlbCA9PSAxKSB7CisJCWt2bXBwY19lNTAwX3RsYjFfaW52YWxpZGF0ZSh2Y3B1X2U1MDAsIGdldF90bGJfZWFkZHIoZ3RsYmUpLAorCQkJCWdldF90bGJfZW5kKGd0bGJlKSwKKwkJCQlnZXRfdGxiX3RpZChndGxiZSkpOworCX0gZWxzZSB7CisJCWt2bXBwY19lNTAwX3N0bGJlX2ludmFsaWRhdGUodmNwdV9lNTAwLCB0bGJzZWwsIGVzZWwpOworCX0KKworCWd0bGJlLT5tYXMxID0gMDsKKworCXJldHVybiAwOworfQorCitpbnQga3ZtcHBjX2U1MDBfZW11bF9tdF9tbXVjc3IwKHN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp2Y3B1X2U1MDAsIHVsb25nIHZhbHVlKQoreworCWludCBlc2VsOworCisJaWYgKHZhbHVlICYgTU1VQ1NSMF9UTEIwRkkpCisJCWZvciAoZXNlbCA9IDA7IGVzZWwgPCB2Y3B1X2U1MDAtPmd1ZXN0X3RsYl9zaXplWzBdOyBlc2VsKyspCisJCQlrdm1wcGNfZTUwMF9ndGxiZV9pbnZhbGlkYXRlKHZjcHVfZTUwMCwgMCwgZXNlbCk7CisJaWYgKHZhbHVlICYgTU1VQ1NSMF9UTEIxRkkpCisJCWZvciAoZXNlbCA9IDA7IGVzZWwgPCB2Y3B1X2U1MDAtPmd1ZXN0X3RsYl9zaXplWzFdOyBlc2VsKyspCisJCQlrdm1wcGNfZTUwMF9ndGxiZV9pbnZhbGlkYXRlKHZjcHVfZTUwMCwgMSwgZXNlbCk7CisKKwlfdGxiaWxfYWxsKCk7CisKKwlyZXR1cm4gRU1VTEFURV9ET05FOworfQorCitpbnQga3ZtcHBjX2U1MDBfZW11bF90bGJpdmF4KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHJhLCBpbnQgcmIpCit7CisJc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKnZjcHVfZTUwMCA9IHRvX2U1MDAodmNwdSk7CisJdW5zaWduZWQgaW50IGlhOworCWludCBlc2VsLCB0bGJzZWw7CisJZ3ZhX3QgZWE7CisKKwllYSA9ICgocmEpID8gdmNwdS0+YXJjaC5ncHJbcmFdIDogMCkgKyB2Y3B1LT5hcmNoLmdwcltyYl07CisKKwlpYSA9IChlYSA+PiAyKSAmIDB4MTsKKworCS8qIHNpbmNlIHdlIG9ubHkgaGF2ZSB0d28gVExCcywgb25seSBsb3dlciBiaXQgaXMgdXNlZC4gKi8KKwl0bGJzZWwgPSAoZWEgPj4gMykgJiAweDE7CisKKwlpZiAoaWEpIHsKKwkJLyogaW52YWxpZGF0ZSBhbGwgZW50cmllcyAqLworCQlmb3IgKGVzZWwgPSAwOyBlc2VsIDwgdmNwdV9lNTAwLT5ndWVzdF90bGJfc2l6ZVt0bGJzZWxdOyBlc2VsKyspCisJCQlrdm1wcGNfZTUwMF9ndGxiZV9pbnZhbGlkYXRlKHZjcHVfZTUwMCwgdGxic2VsLCBlc2VsKTsKKwl9IGVsc2UgeworCQllYSAmPSAweGZmZmZmMDAwOworCQllc2VsID0ga3ZtcHBjX2U1MDBfdGxiX2luZGV4KHZjcHVfZTUwMCwgZWEsIHRsYnNlbCwKKwkJCQlnZXRfY3VyX3BpZCh2Y3B1KSwgLTEpOworCQlpZiAoZXNlbCA+PSAwKQorCQkJa3ZtcHBjX2U1MDBfZ3RsYmVfaW52YWxpZGF0ZSh2Y3B1X2U1MDAsIHRsYnNlbCwgZXNlbCk7CisJfQorCisJX3RsYmlsX2FsbCgpOworCisJcmV0dXJuIEVNVUxBVEVfRE9ORTsKK30KKworaW50IGt2bXBwY19lNTAwX2VtdWxfdGxicmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp2Y3B1X2U1MDAgPSB0b19lNTAwKHZjcHUpOworCWludCB0bGJzZWwsIGVzZWw7CisJc3RydWN0IHRsYmUgKmd0bGJlOworCisJdGxic2VsID0gZ2V0X3RsYl90bGJzZWwodmNwdV9lNTAwKTsKKwllc2VsID0gZ2V0X3RsYl9lc2VsKHZjcHVfZTUwMCwgdGxic2VsKTsKKworCWd0bGJlID0gJnZjcHVfZTUwMC0+Z3Vlc3RfdGxiW3RsYnNlbF1bZXNlbF07CisJdmNwdV9lNTAwLT5tYXMwICY9IH5NQVMwX05WKH4wKTsKKwl2Y3B1X2U1MDAtPm1hczAgfD0gTUFTMF9OVih2Y3B1X2U1MDAtPmd1ZXN0X3RsYl9udlt0bGJzZWxdKTsKKwl2Y3B1X2U1MDAtPm1hczEgPSBndGxiZS0+bWFzMTsKKwl2Y3B1X2U1MDAtPm1hczIgPSBndGxiZS0+bWFzMjsKKwl2Y3B1X2U1MDAtPm1hczMgPSBndGxiZS0+bWFzMzsKKwl2Y3B1X2U1MDAtPm1hczcgPSBndGxiZS0+bWFzNzsKKworCXJldHVybiBFTVVMQVRFX0RPTkU7Cit9CisKK2ludCBrdm1wcGNfZTUwMF9lbXVsX3RsYnN4KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHJiKQoreworCXN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp2Y3B1X2U1MDAgPSB0b19lNTAwKHZjcHUpOworCWludCBhcyA9ICEhZ2V0X2N1cl9zYXModmNwdV9lNTAwKTsKKwl1bnNpZ25lZCBpbnQgcGlkID0gZ2V0X2N1cl9zcGlkKHZjcHVfZTUwMCk7CisJaW50IGVzZWwsIHRsYnNlbDsKKwlzdHJ1Y3QgdGxiZSAqZ3RsYmUgPSBOVUxMOworCWd2YV90IGVhOworCisJZWEgPSB2Y3B1LT5hcmNoLmdwcltyYl07CisKKwlmb3IgKHRsYnNlbCA9IDA7IHRsYnNlbCA8IDI7IHRsYnNlbCsrKSB7CisJCWVzZWwgPSBrdm1wcGNfZTUwMF90bGJfaW5kZXgodmNwdV9lNTAwLCBlYSwgdGxic2VsLCBwaWQsIGFzKTsKKwkJaWYgKGVzZWwgPj0gMCkgeworCQkJZ3RsYmUgPSAmdmNwdV9lNTAwLT5ndWVzdF90bGJbdGxic2VsXVtlc2VsXTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKGd0bGJlKSB7CisJCXZjcHVfZTUwMC0+bWFzMCA9IE1BUzBfVExCU0VMKHRsYnNlbCkgfCBNQVMwX0VTRUwoZXNlbCkKKwkJCXwgTUFTMF9OVih2Y3B1X2U1MDAtPmd1ZXN0X3RsYl9udlt0bGJzZWxdKTsKKwkJdmNwdV9lNTAwLT5tYXMxID0gZ3RsYmUtPm1hczE7CisJCXZjcHVfZTUwMC0+bWFzMiA9IGd0bGJlLT5tYXMyOworCQl2Y3B1X2U1MDAtPm1hczMgPSBndGxiZS0+bWFzMzsKKwkJdmNwdV9lNTAwLT5tYXM3ID0gZ3RsYmUtPm1hczc7CisJfSBlbHNlIHsKKwkJaW50IHZpY3RpbTsKKworCQkvKiBzaW5jZSB3ZSBvbmx5IGhhdmUgdHdvIFRMQnMsIG9ubHkgbG93ZXIgYml0IGlzIHVzZWQuICovCisJCXRsYnNlbCA9IHZjcHVfZTUwMC0+bWFzNCA+PiAyOCAmIDB4MTsKKwkJdmljdGltID0gKHRsYnNlbCA9PSAwKSA/IHRsYjBfZ2V0X25leHRfdmljdGltKHZjcHVfZTUwMCkgOiAwOworCisJCXZjcHVfZTUwMC0+bWFzMCA9IE1BUzBfVExCU0VMKHRsYnNlbCkgfCBNQVMwX0VTRUwodmljdGltKQorCQkJfCBNQVMwX05WKHZjcHVfZTUwMC0+Z3Vlc3RfdGxiX252W3RsYnNlbF0pOworCQl2Y3B1X2U1MDAtPm1hczEgPSAodmNwdV9lNTAwLT5tYXM2ICYgTUFTNl9TUElEMCkKKwkJCXwgKHZjcHVfZTUwMC0+bWFzNiAmIChNQVM2X1NBUyA/IE1BUzFfVFMgOiAwKSkKKwkJCXwgKHZjcHVfZTUwMC0+bWFzNCAmIE1BUzRfVFNJWkVEKH4wKSk7CisJCXZjcHVfZTUwMC0+bWFzMiAmPSBNQVMyX0VQTjsKKwkJdmNwdV9lNTAwLT5tYXMyIHw9IHZjcHVfZTUwMC0+bWFzNCAmIE1BUzJfQVRUUklCX01BU0s7CisJCXZjcHVfZTUwMC0+bWFzMyAmPSBNQVMzX1UwIHwgTUFTM19VMSB8IE1BUzNfVTIgfCBNQVMzX1UzOworCQl2Y3B1X2U1MDAtPm1hczcgPSAwOworCX0KKworCXJldHVybiBFTVVMQVRFX0RPTkU7Cit9CisKK2ludCBrdm1wcGNfZTUwMF9lbXVsX3RsYndlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwID0gdG9fZTUwMCh2Y3B1KTsKKwl1NjQgZWFkZHI7CisJdTY0IHJhZGRyOworCXUzMiB0aWQ7CisJc3RydWN0IHRsYmUgKmd0bGJlOworCWludCB0bGJzZWwsIGVzZWwsIHN0bGJzZWwsIHNlc2VsOworCisJdGxic2VsID0gZ2V0X3RsYl90bGJzZWwodmNwdV9lNTAwKTsKKwllc2VsID0gZ2V0X3RsYl9lc2VsKHZjcHVfZTUwMCwgdGxic2VsKTsKKworCWd0bGJlID0gJnZjcHVfZTUwMC0+Z3Vlc3RfdGxiW3RsYnNlbF1bZXNlbF07CisKKwlpZiAoZ2V0X3RsYl92KGd0bGJlKSAmJiB0bGJzZWwgPT0gMSkgeworCQllYWRkciA9IGdldF90bGJfZWFkZHIoZ3RsYmUpOworCQl0aWQgPSBnZXRfdGxiX3RpZChndGxiZSk7CisJCWt2bXBwY19lNTAwX3RsYjFfaW52YWxpZGF0ZSh2Y3B1X2U1MDAsIGVhZGRyLAorCQkJCWdldF90bGJfZW5kKGd0bGJlKSwgdGlkKTsKKwl9CisKKwlndGxiZS0+bWFzMSA9IHZjcHVfZTUwMC0+bWFzMTsKKwlndGxiZS0+bWFzMiA9IHZjcHVfZTUwMC0+bWFzMjsKKwlndGxiZS0+bWFzMyA9IHZjcHVfZTUwMC0+bWFzMzsKKwlndGxiZS0+bWFzNyA9IHZjcHVfZTUwMC0+bWFzNzsKKworCUtWTVRSQUNFXzVEKEdUTEJfV1JJVEUsIHZjcHUsIHZjcHVfZTUwMC0+bWFzMCwKKwkJCWd0bGJlLT5tYXMxLCBndGxiZS0+bWFzMiwgZ3RsYmUtPm1hczMsIGd0bGJlLT5tYXM3LAorCQkJaGFuZGxlcik7CisKKwkvKiBJbnZhbGlkYXRlIHNoYWRvdyBtYXBwaW5ncyBmb3IgdGhlIGFib3V0LXRvLWJlLWNsb2JiZXJlZCBUTEJFLiAqLworCWlmICh0bGJlX2lzX2hvc3Rfc2FmZSh2Y3B1LCBndGxiZSkpIHsKKwkJc3dpdGNoICh0bGJzZWwpIHsKKwkJY2FzZSAwOgorCQkJLyogVExCMCAqLworCQkJZ3RsYmUtPm1hczEgJj0gfk1BUzFfVFNJWkUofjApOworCQkJZ3RsYmUtPm1hczEgfD0gTUFTMV9UU0laRShCT09LRV9QQUdFU1pfNEspOworCisJCQlzdGxic2VsID0gMDsKKwkJCXNlc2VsID0ga3ZtcHBjX2U1MDBfc3RsYmVfbWFwKHZjcHVfZTUwMCwgMCwgZXNlbCk7CisKKwkJCWJyZWFrOworCisJCWNhc2UgMToKKwkJCS8qIFRMQjEgKi8KKwkJCWVhZGRyID0gZ2V0X3RsYl9lYWRkcihndGxiZSk7CisJCQlyYWRkciA9IGdldF90bGJfcmFkZHIoZ3RsYmUpOworCisJCQkvKiBDcmVhdGUgYSA0S0IgbWFwcGluZyBvbiB0aGUgaG9zdC4KKwkJCSAqIElmIHRoZSBndWVzdCB3YW50ZWQgYSBsYXJnZSBwYWdlLAorCQkJICogb25seSB0aGUgZmlyc3QgNEtCIGlzIG1hcHBlZCBoZXJlIGFuZCB0aGUgcmVzdAorCQkJICogYXJlIG1hcHBlZCBvbiB0aGUgZmx5LiAqLworCQkJc3RsYnNlbCA9IDE7CisJCQlzZXNlbCA9IGt2bXBwY19lNTAwX3RsYjFfbWFwKHZjcHVfZTUwMCwgZWFkZHIsCisJCQkJCXJhZGRyID4+IFBBR0VfU0hJRlQsIGd0bGJlKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlCVUcoKTsKKwkJfQorCQl3cml0ZV9ob3N0X3RsYmUodmNwdV9lNTAwLCBzdGxic2VsLCBzZXNlbCk7CisJfQorCisJcmV0dXJuIEVNVUxBVEVfRE9ORTsKK30KKworaW50IGt2bXBwY19tbXVfaXRsYl9pbmRleChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGVhZGRyKQoreworCXVuc2lnbmVkIGludCBhcyA9ICEhKHZjcHUtPmFyY2gubXNyICYgTVNSX0lTKTsKKworCXJldHVybiBrdm1wcGNfZTUwMF90bGJfc2VhcmNoKHZjcHUsIGVhZGRyLCBnZXRfY3VyX3BpZCh2Y3B1KSwgYXMpOworfQorCitpbnQga3ZtcHBjX21tdV9kdGxiX2luZGV4KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZWFkZHIpCit7CisJdW5zaWduZWQgaW50IGFzID0gISEodmNwdS0+YXJjaC5tc3IgJiBNU1JfRFMpOworCisJcmV0dXJuIGt2bXBwY19lNTAwX3RsYl9zZWFyY2godmNwdSwgZWFkZHIsIGdldF9jdXJfcGlkKHZjcHUpLCBhcyk7Cit9CisKK3ZvaWQga3ZtcHBjX21tdV9pdGxiX21pc3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXVuc2lnbmVkIGludCBhcyA9ICEhKHZjcHUtPmFyY2gubXNyICYgTVNSX0lTKTsKKworCWt2bXBwY19lNTAwX2RlbGl2ZXJfdGxiX21pc3ModmNwdSwgdmNwdS0+YXJjaC5wYywgYXMpOworfQorCit2b2lkIGt2bXBwY19tbXVfZHRsYl9taXNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwl1bnNpZ25lZCBpbnQgYXMgPSAhISh2Y3B1LT5hcmNoLm1zciAmIE1TUl9EUyk7CisKKwlrdm1wcGNfZTUwMF9kZWxpdmVyX3RsYl9taXNzKHZjcHUsIHZjcHUtPmFyY2guZmF1bHRfZGVhciwgYXMpOworfQorCitncGFfdCBrdm1wcGNfbW11X3hsYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IGluZGV4LAorCQkJZ3ZhX3QgZWFkZHIpCit7CisJc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKnZjcHVfZTUwMCA9IHRvX2U1MDAodmNwdSk7CisJc3RydWN0IHRsYmUgKmd0bGJlID0KKwkJJnZjcHVfZTUwMC0+Z3Vlc3RfdGxiW3RsYnNlbF9vZihpbmRleCldW2VzZWxfb2YoaW5kZXgpXTsKKwl1NjQgcGdtYXNrID0gZ2V0X3RsYl9ieXRlcyhndGxiZSkgLSAxOworCisJcmV0dXJuIGdldF90bGJfcmFkZHIoZ3RsYmUpIHwgKGVhZGRyICYgcGdtYXNrKTsKK30KKwordm9pZCBrdm1wcGNfbW11X2Rlc3Ryb3koc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp2Y3B1X2U1MDAgPSB0b19lNTAwKHZjcHUpOworCWludCB0bGJzZWwsIGk7CisKKwlmb3IgKHRsYnNlbCA9IDA7IHRsYnNlbCA8IDI7IHRsYnNlbCsrKQorCQlmb3IgKGkgPSAwOyBpIDwgdmNwdV9lNTAwLT5ndWVzdF90bGJfc2l6ZVt0bGJzZWxdOyBpKyspCisJCQlrdm1wcGNfZTUwMF9zaGFkb3dfcmVsZWFzZSh2Y3B1X2U1MDAsIHRsYnNlbCwgaSk7CisKKwkvKiBkaXNjYXJkIGFsbCBndWVzdCBtYXBwaW5nICovCisJX3RsYmlsX2FsbCgpOworfQorCit2b2lkIGt2bXBwY19tbXVfbWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGVhZGRyLCBncGFfdCBncGFkZHIsCisJCQl1bnNpZ25lZCBpbnQgaW5kZXgpCit7CisJc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKnZjcHVfZTUwMCA9IHRvX2U1MDAodmNwdSk7CisJaW50IHRsYnNlbCA9IHRsYnNlbF9vZihpbmRleCk7CisJaW50IGVzZWwgPSBlc2VsX29mKGluZGV4KTsKKwlpbnQgc3RsYnNlbCwgc2VzZWw7CisKKwlzd2l0Y2ggKHRsYnNlbCkgeworCWNhc2UgMDoKKwkJc3RsYnNlbCA9IDA7CisJCXNlc2VsID0gZXNlbDsKKwkJYnJlYWs7CisKKwljYXNlIDE6IHsKKwkJZ2ZuX3QgZ2ZuID0gZ3BhZGRyID4+IFBBR0VfU0hJRlQ7CisJCXN0cnVjdCB0bGJlICpndGxiZQorCQkJPSAmdmNwdV9lNTAwLT5ndWVzdF90bGJbdGxic2VsXVtlc2VsXTsKKworCQlzdGxic2VsID0gMTsKKwkJc2VzZWwgPSBrdm1wcGNfZTUwMF90bGIxX21hcCh2Y3B1X2U1MDAsIGVhZGRyLCBnZm4sIGd0bGJlKTsKKwkJYnJlYWs7CisJfQorCisJZGVmYXVsdDoKKwkJQlVHKCk7CisJCWJyZWFrOworCX0KKwl3cml0ZV9ob3N0X3RsYmUodmNwdV9lNTAwLCBzdGxic2VsLCBzZXNlbCk7Cit9CisKK2ludCBrdm1wcGNfZTUwMF90bGJfc2VhcmNoKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKwkJCQlndmFfdCBlYWRkciwgdW5zaWduZWQgaW50IHBpZCwgaW50IGFzKQoreworCXN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp2Y3B1X2U1MDAgPSB0b19lNTAwKHZjcHUpOworCWludCBlc2VsLCB0bGJzZWw7CisKKwlmb3IgKHRsYnNlbCA9IDA7IHRsYnNlbCA8IDI7IHRsYnNlbCsrKSB7CisJCWVzZWwgPSBrdm1wcGNfZTUwMF90bGJfaW5kZXgodmNwdV9lNTAwLCBlYWRkciwgdGxic2VsLCBwaWQsIGFzKTsKKwkJaWYgKGVzZWwgPj0gMCkKKwkJCXJldHVybiBpbmRleF9vZih0bGJzZWwsIGVzZWwpOworCX0KKworCXJldHVybiAtMTsKK30KKwordm9pZCBrdm1wcGNfZTUwMF90bGJfc2V0dXAoc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKnZjcHVfZTUwMCkKK3sKKwlzdHJ1Y3QgdGxiZSAqdGxiZTsKKworCS8qIEluc2VydCBsYXJnZSBpbml0aWFsIG1hcHBpbmcgZm9yIGd1ZXN0LiAqLworCXRsYmUgPSAmdmNwdV9lNTAwLT5ndWVzdF90bGJbMV1bMF07CisJdGxiZS0+bWFzMSA9IE1BUzFfVkFMSUQgfCBNQVMxX1RTSVpFKEJPT0tFX1BBR0VTWl8yNTZNKTsKKwl0bGJlLT5tYXMyID0gMDsKKwl0bGJlLT5tYXMzID0gRTUwMF9UTEJfU1VQRVJfUEVSTV9NQVNLOworCXRsYmUtPm1hczcgPSAwOworCisJLyogNEsgbWFwIGZvciBzZXJpYWwgb3V0cHV0LiBVc2VkIGJ5IGtlcm5lbCB3cmFwcGVyLiAqLworCXRsYmUgPSAmdmNwdV9lNTAwLT5ndWVzdF90bGJbMV1bMV07CisJdGxiZS0+bWFzMSA9IE1BUzFfVkFMSUQgfCBNQVMxX1RTSVpFKEJPT0tFX1BBR0VTWl80Syk7CisJdGxiZS0+bWFzMiA9ICgweGUwMDA0NTAwICYgMHhGRkZGRjAwMCkgfCBNQVMyX0kgfCBNQVMyX0c7CisJdGxiZS0+bWFzMyA9ICgweGUwMDA0NTAwICYgMHhGRkZGRjAwMCkgfCBFNTAwX1RMQl9TVVBFUl9QRVJNX01BU0s7CisJdGxiZS0+bWFzNyA9IDA7Cit9CisKK2ludCBrdm1wcGNfZTUwMF90bGJfaW5pdChzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwKQoreworCXRsYjFfZW50cnlfbnVtID0gbWZzcHIoU1BSTl9UTEIxQ0ZHKSAmIDB4RkZGOworCisJdmNwdV9lNTAwLT5ndWVzdF90bGJfc2l6ZVswXSA9IEtWTV9FNTAwX1RMQjBfU0laRTsKKwl2Y3B1X2U1MDAtPmd1ZXN0X3RsYlswXSA9CisJCWt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB0bGJlKSAqIEtWTV9FNTAwX1RMQjBfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKHZjcHVfZTUwMC0+Z3Vlc3RfdGxiWzBdID09IE5VTEwpCisJCWdvdG8gZXJyX291dDsKKworCXZjcHVfZTUwMC0+c2hhZG93X3RsYl9zaXplWzBdID0gS1ZNX0U1MDBfVExCMF9TSVpFOworCXZjcHVfZTUwMC0+c2hhZG93X3RsYlswXSA9CisJCWt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB0bGJlKSAqIEtWTV9FNTAwX1RMQjBfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKHZjcHVfZTUwMC0+c2hhZG93X3RsYlswXSA9PSBOVUxMKQorCQlnb3RvIGVycl9vdXRfZ3Vlc3QwOworCisJdmNwdV9lNTAwLT5ndWVzdF90bGJfc2l6ZVsxXSA9IEtWTV9FNTAwX1RMQjFfU0laRTsKKwl2Y3B1X2U1MDAtPmd1ZXN0X3RsYlsxXSA9CisJCWt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB0bGJlKSAqIEtWTV9FNTAwX1RMQjFfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKHZjcHVfZTUwMC0+Z3Vlc3RfdGxiWzFdID09IE5VTEwpCisJCWdvdG8gZXJyX291dF9zaGFkb3cwOworCisJdmNwdV9lNTAwLT5zaGFkb3dfdGxiX3NpemVbMV0gPSB0bGIxX2VudHJ5X251bTsKKwl2Y3B1X2U1MDAtPnNoYWRvd190bGJbMV0gPQorCQlremFsbG9jKHNpemVvZihzdHJ1Y3QgdGxiZSkgKiB0bGIxX2VudHJ5X251bSwgR0ZQX0tFUk5FTCk7CisJaWYgKHZjcHVfZTUwMC0+c2hhZG93X3RsYlsxXSA9PSBOVUxMKQorCQlnb3RvIGVycl9vdXRfZ3Vlc3QxOworCisJdmNwdV9lNTAwLT5zaGFkb3dfcGFnZXNbMF0gPSAoc3RydWN0IHBhZ2UgKiopCisJCWt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwYWdlICopICogS1ZNX0U1MDBfVExCMF9TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAodmNwdV9lNTAwLT5zaGFkb3dfcGFnZXNbMF0gPT0gTlVMTCkKKwkJZ290byBlcnJfb3V0X3NoYWRvdzE7CisKKwl2Y3B1X2U1MDAtPnNoYWRvd19wYWdlc1sxXSA9IChzdHJ1Y3QgcGFnZSAqKikKKwkJa3phbGxvYyhzaXplb2Yoc3RydWN0IHBhZ2UgKikgKiB0bGIxX2VudHJ5X251bSwgR0ZQX0tFUk5FTCk7CisJaWYgKHZjcHVfZTUwMC0+c2hhZG93X3BhZ2VzWzFdID09IE5VTEwpCisJCWdvdG8gZXJyX291dF9wYWdlMDsKKworCXJldHVybiAwOworCitlcnJfb3V0X3BhZ2UwOgorCWtmcmVlKHZjcHVfZTUwMC0+c2hhZG93X3BhZ2VzWzBdKTsKK2Vycl9vdXRfc2hhZG93MToKKwlrZnJlZSh2Y3B1X2U1MDAtPnNoYWRvd190bGJbMV0pOworZXJyX291dF9ndWVzdDE6CisJa2ZyZWUodmNwdV9lNTAwLT5ndWVzdF90bGJbMV0pOworZXJyX291dF9zaGFkb3cwOgorCWtmcmVlKHZjcHVfZTUwMC0+c2hhZG93X3RsYlswXSk7CitlcnJfb3V0X2d1ZXN0MDoKKwlrZnJlZSh2Y3B1X2U1MDAtPmd1ZXN0X3RsYlswXSk7CitlcnJfb3V0OgorCXJldHVybiAtMTsKK30KKwordm9pZCBrdm1wcGNfZTUwMF90bGJfdW5pbml0KHN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp2Y3B1X2U1MDApCit7CisJa2ZyZWUodmNwdV9lNTAwLT5zaGFkb3dfcGFnZXNbMV0pOworCWtmcmVlKHZjcHVfZTUwMC0+c2hhZG93X3BhZ2VzWzBdKTsKKwlrZnJlZSh2Y3B1X2U1MDAtPnNoYWRvd190bGJbMV0pOworCWtmcmVlKHZjcHVfZTUwMC0+Z3Vlc3RfdGxiWzFdKTsKKwlrZnJlZSh2Y3B1X2U1MDAtPnNoYWRvd190bGJbMF0pOworCWtmcmVlKHZjcHVfZTUwMC0+Z3Vlc3RfdGxiWzBdKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vZTUwMF90bGIuaCBiL2FyY2gvcG93ZXJwYy9rdm0vZTUwMF90bGIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWIwNjRiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2t2bS9lNTAwX3RsYi5oCkBAIC0wLDAgKzEsMTg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogQXV0aG9yOiBZdSBMaXUsIHl1LmxpdUBmcmVlc2NhbGUuY29tCisgKgorICogRGVzY3JpcHRpb246CisgKiBUaGlzIGZpbGUgaXMgYmFzZWQgb24gYXJjaC9wb3dlcnBjL2t2bS80NHhfdGxiLmgsCisgKiBieSBIb2xsaXMgQmxhbmNoYXJkIDxob2xsaXNiQHVzLmlibS5jb20+LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIsIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9fS1ZNX0U1MDBfVExCX0hfXworI2RlZmluZSBfX0tWTV9FNTAwX1RMQl9IX18KKworI2luY2x1ZGUgPGxpbnV4L2t2bV9ob3N0Lmg+CisjaW5jbHVkZSA8YXNtL21tdS1mc2wtYm9va2UuaD4KKyNpbmNsdWRlIDxhc20vdGxiLmg+CisjaW5jbHVkZSA8YXNtL2t2bV9lNTAwLmg+CisKKyNkZWZpbmUgS1ZNX0U1MDBfVExCMF9XQVlfU0laRV9CSVQJNwkvKiBGaXhlZCAqLworI2RlZmluZSBLVk1fRTUwMF9UTEIwX1dBWV9TSVpFCQkoMVVMIDw8IEtWTV9FNTAwX1RMQjBfV0FZX1NJWkVfQklUKQorI2RlZmluZSBLVk1fRTUwMF9UTEIwX1dBWV9TSVpFX01BU0sJKEtWTV9FNTAwX1RMQjBfV0FZX1NJWkUgLSAxKQorCisjZGVmaW5lIEtWTV9FNTAwX1RMQjBfV0FZX05VTV9CSVQJMQkvKiBObyBncmVhdGVyIHRoYW4gNyAqLworI2RlZmluZSBLVk1fRTUwMF9UTEIwX1dBWV9OVU0JCSgxVUwgPDwgS1ZNX0U1MDBfVExCMF9XQVlfTlVNX0JJVCkKKyNkZWZpbmUgS1ZNX0U1MDBfVExCMF9XQVlfTlVNX01BU0sJKEtWTV9FNTAwX1RMQjBfV0FZX05VTSAtIDEpCisKKyNkZWZpbmUgS1ZNX0U1MDBfVExCMF9TSVpFICAoS1ZNX0U1MDBfVExCMF9XQVlfU0laRSAqIEtWTV9FNTAwX1RMQjBfV0FZX05VTSkKKyNkZWZpbmUgS1ZNX0U1MDBfVExCMV9TSVpFICAxNgorCisjZGVmaW5lIGluZGV4X29mKHRsYnNlbCwgZXNlbCkJKCgodGxic2VsKSA8PCAxNikgfCAoKGVzZWwpICYgMHhGRkZGKSkKKyNkZWZpbmUgdGxic2VsX29mKGluZGV4KQkoKGluZGV4KSA+PiAxNikKKyNkZWZpbmUgZXNlbF9vZihpbmRleCkJCSgoaW5kZXgpICYgMHhGRkZGKQorCisjZGVmaW5lIEU1MDBfVExCX1VTRVJfUEVSTV9NQVNLIChNQVMzX1VYfE1BUzNfVVJ8TUFTM19VVykKKyNkZWZpbmUgRTUwMF9UTEJfU1VQRVJfUEVSTV9NQVNLIChNQVMzX1NYfE1BUzNfU1J8TUFTM19TVykKKyNkZWZpbmUgTUFTMl9BVFRSSUJfTUFTSyBcCisJICAoTUFTMl9YMCB8IE1BUzJfWDEpCisjZGVmaW5lIE1BUzNfQVRUUklCX01BU0sgXAorCSAgKE1BUzNfVTAgfCBNQVMzX1UxIHwgTUFTM19VMiB8IE1BUzNfVTMgXAorCSAgIHwgRTUwMF9UTEJfVVNFUl9QRVJNX01BU0sgfCBFNTAwX1RMQl9TVVBFUl9QRVJNX01BU0spCisKK2V4dGVybiB2b2lkIGt2bXBwY19kdW1wX3RsYnMoc3RydWN0IGt2bV92Y3B1ICopOworZXh0ZXJuIGludCBrdm1wcGNfZTUwMF9lbXVsX210X21tdWNzcjAoc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKiwgdWxvbmcpOworZXh0ZXJuIGludCBrdm1wcGNfZTUwMF9lbXVsX3RsYndlKHN0cnVjdCBrdm1fdmNwdSAqKTsKK2V4dGVybiBpbnQga3ZtcHBjX2U1MDBfZW11bF90bGJyZShzdHJ1Y3Qga3ZtX3ZjcHUgKik7CitleHRlcm4gaW50IGt2bXBwY19lNTAwX2VtdWxfdGxiaXZheChzdHJ1Y3Qga3ZtX3ZjcHUgKiwgaW50LCBpbnQpOworZXh0ZXJuIGludCBrdm1wcGNfZTUwMF9lbXVsX3RsYnN4KHN0cnVjdCBrdm1fdmNwdSAqLCBpbnQpOworZXh0ZXJuIGludCBrdm1wcGNfZTUwMF90bGJfc2VhcmNoKHN0cnVjdCBrdm1fdmNwdSAqLCBndmFfdCwgdW5zaWduZWQgaW50LCBpbnQpOworZXh0ZXJuIHZvaWQga3ZtcHBjX2U1MDBfdGxiX3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKik7CitleHRlcm4gdm9pZCBrdm1wcGNfZTUwMF90bGJfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKiwgaW50KTsKK2V4dGVybiBpbnQga3ZtcHBjX2U1MDBfdGxiX2luaXQoc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKik7CitleHRlcm4gdm9pZCBrdm1wcGNfZTUwMF90bGJfdW5pbml0KHN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICopOworZXh0ZXJuIHZvaWQga3ZtcHBjX2U1MDBfdGxiX3NldHVwKHN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICopOworCisvKiBUTEIgaGVscGVyIGZ1bmN0aW9ucyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZ2V0X3RsYl9zaXplKGNvbnN0IHN0cnVjdCB0bGJlICp0bGJlKQoreworCXJldHVybiAodGxiZS0+bWFzMSA+PiA4KSAmIDB4ZjsKK30KKworc3RhdGljIGlubGluZSBndmFfdCBnZXRfdGxiX2VhZGRyKGNvbnN0IHN0cnVjdCB0bGJlICp0bGJlKQoreworCXJldHVybiB0bGJlLT5tYXMyICYgMHhmZmZmZjAwMDsKK30KKworc3RhdGljIGlubGluZSB1NjQgZ2V0X3RsYl9ieXRlcyhjb25zdCBzdHJ1Y3QgdGxiZSAqdGxiZSkKK3sKKwl1bnNpZ25lZCBpbnQgcGdzaXplID0gZ2V0X3RsYl9zaXplKHRsYmUpOworCXJldHVybiAxVUxMIDw8IDEwIDw8IChwZ3NpemUgPDwgMSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgZ3ZhX3QgZ2V0X3RsYl9lbmQoY29uc3Qgc3RydWN0IHRsYmUgKnRsYmUpCit7CisJdTY0IGJ5dGVzID0gZ2V0X3RsYl9ieXRlcyh0bGJlKTsKKwlyZXR1cm4gZ2V0X3RsYl9lYWRkcih0bGJlKSArIGJ5dGVzIC0gMTsKK30KKworc3RhdGljIGlubGluZSB1NjQgZ2V0X3RsYl9yYWRkcihjb25zdCBzdHJ1Y3QgdGxiZSAqdGxiZSkKK3sKKwl1NjQgcnBuID0gdGxiZS0+bWFzNzsKKwlyZXR1cm4gKHJwbiA8PCAzMikgfCAodGxiZS0+bWFzMyAmIDB4ZmZmZmYwMDApOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBnZXRfdGxiX3RpZChjb25zdCBzdHJ1Y3QgdGxiZSAqdGxiZSkKK3sKKwlyZXR1cm4gKHRsYmUtPm1hczEgPj4gMTYpICYgMHhmZjsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZ2V0X3RsYl90cyhjb25zdCBzdHJ1Y3QgdGxiZSAqdGxiZSkKK3sKKwlyZXR1cm4gKHRsYmUtPm1hczEgPj4gMTIpICYgMHgxOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBnZXRfdGxiX3YoY29uc3Qgc3RydWN0IHRsYmUgKnRsYmUpCit7CisJcmV0dXJuICh0bGJlLT5tYXMxID4+IDMxKSAmIDB4MTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZ2V0X3RsYl9pcHJvdChjb25zdCBzdHJ1Y3QgdGxiZSAqdGxiZSkKK3sKKwlyZXR1cm4gKHRsYmUtPm1hczEgPj4gMzApICYgMHgxOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBnZXRfY3VyX3BpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJcmV0dXJuIHZjcHUtPmFyY2gucGlkICYgMHhmZjsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZ2V0X2N1cl9zcGlkKAorCQljb25zdCBzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwKQoreworCXJldHVybiAodmNwdV9lNTAwLT5tYXM2ID4+IDE2KSAmIDB4ZmY7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdldF9jdXJfc2FzKAorCQljb25zdCBzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwKQoreworCXJldHVybiB2Y3B1X2U1MDAtPm1hczYgJiAweDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdldF90bGJfdGxic2VsKAorCQljb25zdCBzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwKQoreworCS8qCisJICogTWFudWFsIHNheXMgdGhhdCB0bGJzZWwgaGFzIDIgYml0cyB3aWRlLgorCSAqIFNpbmNlIHdlIG9ubHkgaGF2ZSB0d28gVExCcywgb25seSBsb3dlciBiaXQgaXMgdXNlZC4KKwkgKi8KKwlyZXR1cm4gKHZjcHVfZTUwMC0+bWFzMCA+PiAyOCkgJiAweDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdldF90bGJfbnZfYml0KAorCQljb25zdCBzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwKQoreworCXJldHVybiB2Y3B1X2U1MDAtPm1hczAgJiAweGZmZjsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZ2V0X3RsYl9lc2VsX2JpdCgKKwkJY29uc3Qgc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKnZjcHVfZTUwMCkKK3sKKwlyZXR1cm4gKHZjcHVfZTUwMC0+bWFzMCA+PiAxNikgJiAweGZmZjsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZ2V0X3RsYl9lc2VsKAorCQljb25zdCBzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwLAorCQlpbnQgdGxic2VsKQoreworCXVuc2lnbmVkIGludCBlc2VsID0gZ2V0X3RsYl9lc2VsX2JpdCh2Y3B1X2U1MDApOworCisJaWYgKHRsYnNlbCA9PSAwKSB7CisJCWVzZWwgJj0gS1ZNX0U1MDBfVExCMF9XQVlfTlVNX01BU0s7CisJCWVzZWwgfD0gKCh2Y3B1X2U1MDAtPm1hczIgPj4gMTIpICYgS1ZNX0U1MDBfVExCMF9XQVlfU0laRV9NQVNLKQorCQkJCTw8IEtWTV9FNTAwX1RMQjBfV0FZX05VTV9CSVQ7CisJfSBlbHNlIHsKKwkJZXNlbCAmPSBLVk1fRTUwMF9UTEIxX1NJWkUgLSAxOworCX0KKworCXJldHVybiBlc2VsOworfQorCitzdGF0aWMgaW5saW5lIGludCB0bGJlX2lzX2hvc3Rfc2FmZShjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisJCQljb25zdCBzdHJ1Y3QgdGxiZSAqdGxiZSkKK3sKKwlncGFfdCBncGE7CisKKwlpZiAoIWdldF90bGJfdih0bGJlKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBEb2VzIGl0IG1hdGNoIGN1cnJlbnQgZ3Vlc3QgQVM/ICovCisJLyogWFhYIHdoYXQgYWJvdXQgSVMgIT0gRFM/ICovCisJaWYgKGdldF90bGJfdHModGxiZSkgIT0gISEodmNwdS0+YXJjaC5tc3IgJiBNU1JfSVMpKQorCQlyZXR1cm4gMDsKKworCWdwYSA9IGdldF90bGJfcmFkZHIodGxiZSk7CisJaWYgKCFnZm5fdG9fbWVtc2xvdCh2Y3B1LT5rdm0sIGdwYSA+PiBQQUdFX1NISUZUKSkKKwkJLyogTWFwcGluZyBpcyBub3QgZm9yIFJBTS4gKi8KKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gMTsKK30KKworI2VuZGlmIC8qIF9fS1ZNX0U1MDBfVExCX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9lbXVsYXRlLmMgYi9hcmNoL3Bvd2VycGMva3ZtL2VtdWxhdGUuYwppbmRleCBkMWQzOGRhLi5hNTYxZDZlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtL2VtdWxhdGUuYworKysgYi9hcmNoL3Bvd2VycGMva3ZtL2VtdWxhdGUuYwpAQCAtMzAsNiArMzAsMzkgQEAKICNpbmNsdWRlIDxhc20vZGlzYXNzZW1ibGUuaD4KICNpbmNsdWRlICJ0aW1pbmcuaCIKIAorI2RlZmluZSBPUF9UUkFQIDMKKworI2RlZmluZSBPUF8zMV9YT1BfTFdaWCAgICAgIDIzCisjZGVmaW5lIE9QXzMxX1hPUF9MQlpYICAgICAgODcKKyNkZWZpbmUgT1BfMzFfWE9QX1NUV1ggICAgICAxNTEKKyNkZWZpbmUgT1BfMzFfWE9QX1NUQlggICAgICAyMTUKKyNkZWZpbmUgT1BfMzFfWE9QX1NUQlVYICAgICAyNDcKKyNkZWZpbmUgT1BfMzFfWE9QX0xIWlggICAgICAyNzkKKyNkZWZpbmUgT1BfMzFfWE9QX0xIWlVYICAgICAzMTEKKyNkZWZpbmUgT1BfMzFfWE9QX01GU1BSICAgICAzMzkKKyNkZWZpbmUgT1BfMzFfWE9QX1NUSFggICAgICA0MDcKKyNkZWZpbmUgT1BfMzFfWE9QX1NUSFVYICAgICA0MzkKKyNkZWZpbmUgT1BfMzFfWE9QX01UU1BSICAgICA0NjcKKyNkZWZpbmUgT1BfMzFfWE9QX0RDQkkgICAgICA0NzAKKyNkZWZpbmUgT1BfMzFfWE9QX0xXQlJYICAgICA1MzQKKyNkZWZpbmUgT1BfMzFfWE9QX1RMQlNZTkMgICA1NjYKKyNkZWZpbmUgT1BfMzFfWE9QX1NUV0JSWCAgICA2NjIKKyNkZWZpbmUgT1BfMzFfWE9QX0xIQlJYICAgICA3OTAKKyNkZWZpbmUgT1BfMzFfWE9QX1NUSEJSWCAgICA5MTgKKworI2RlZmluZSBPUF9MV1ogIDMyCisjZGVmaW5lIE9QX0xXWlUgMzMKKyNkZWZpbmUgT1BfTEJaICAzNAorI2RlZmluZSBPUF9MQlpVIDM1CisjZGVmaW5lIE9QX1NUVyAgMzYKKyNkZWZpbmUgT1BfU1RXVSAzNworI2RlZmluZSBPUF9TVEIgIDM4CisjZGVmaW5lIE9QX1NUQlUgMzkKKyNkZWZpbmUgT1BfTEhaICA0MAorI2RlZmluZSBPUF9MSFpVIDQxCisjZGVmaW5lIE9QX1NUSCAgNDQKKyNkZWZpbmUgT1BfU1RIVSA0NQorCiB2b2lkIGt2bXBwY19lbXVsYXRlX2RlYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJaWYgKHZjcHUtPmFyY2gudGNyICYgVENSX0RJRSkgewpAQCAtNzgsNyArMTExLDcgQEAKIAlrdm1wcGNfc2V0X2V4aXRfdHlwZSh2Y3B1LCBFTVVMQVRFRF9JTlNUX0VYSVRTKTsKIAogCXN3aXRjaCAoZ2V0X29wKGluc3QpKSB7Ci0JY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRyYXAgKi8KKwljYXNlIE9QX1RSQVA6CiAJCXZjcHUtPmFyY2guZXNyIHw9IEVTUl9QVFI7CiAJCWt2bXBwY19jb3JlX3F1ZXVlX3Byb2dyYW0odmNwdSk7CiAJCWFkdmFuY2UgPSAwOwpAQCAtODcsMzEgKzEyMCwzMSBAQAogCWNhc2UgMzE6CiAJCXN3aXRjaCAoZ2V0X3hvcChpbnN0KSkgewogCi0JCWNhc2UgMjM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGx3enggKi8KKwkJY2FzZSBPUF8zMV9YT1BfTFdaWDoKIAkJCXJ0ID0gZ2V0X3J0KGluc3QpOwogCQkJZW11bGF0ZWQgPSBrdm1wcGNfaGFuZGxlX2xvYWQocnVuLCB2Y3B1LCBydCwgNCwgMSk7CiAJCQlicmVhazsKIAotCQljYXNlIDg3OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsYnp4ICovCisJCWNhc2UgT1BfMzFfWE9QX0xCWlg6CiAJCQlydCA9IGdldF9ydChpbnN0KTsKIAkJCWVtdWxhdGVkID0ga3ZtcHBjX2hhbmRsZV9sb2FkKHJ1biwgdmNwdSwgcnQsIDEsIDEpOwogCQkJYnJlYWs7CiAKLQkJY2FzZSAxNTE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3R3eCAqLworCQljYXNlIE9QXzMxX1hPUF9TVFdYOgogCQkJcnMgPSBnZXRfcnMoaW5zdCk7CiAJCQllbXVsYXRlZCA9IGt2bXBwY19oYW5kbGVfc3RvcmUocnVuLCB2Y3B1LAogCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZjcHUtPmFyY2guZ3ByW3JzXSwKIAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0LCAxKTsKIAkJCWJyZWFrOwogCi0JCWNhc2UgMjE1OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHN0YnggKi8KKwkJY2FzZSBPUF8zMV9YT1BfU1RCWDoKIAkJCXJzID0gZ2V0X3JzKGluc3QpOwogCQkJZW11bGF0ZWQgPSBrdm1wcGNfaGFuZGxlX3N0b3JlKHJ1biwgdmNwdSwKIAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2Y3B1LT5hcmNoLmdwcltyc10sCiAJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgMSk7CiAJCQlicmVhazsKIAotCQljYXNlIDI0NzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzdGJ1eCAqLworCQljYXNlIE9QXzMxX1hPUF9TVEJVWDoKIAkJCXJzID0gZ2V0X3JzKGluc3QpOwogCQkJcmEgPSBnZXRfcmEoaW5zdCk7CiAJCQlyYiA9IGdldF9yYihpbnN0KTsKQEAgLTEyNiwxMiArMTU5LDEyIEBACiAJCQl2Y3B1LT5hcmNoLmdwcltyc10gPSBlYTsKIAkJCWJyZWFrOwogCi0JCWNhc2UgMjc5OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxoenggKi8KKwkJY2FzZSBPUF8zMV9YT1BfTEhaWDoKIAkJCXJ0ID0gZ2V0X3J0KGluc3QpOwogCQkJZW11bGF0ZWQgPSBrdm1wcGNfaGFuZGxlX2xvYWQocnVuLCB2Y3B1LCBydCwgMiwgMSk7CiAJCQlicmVhazsKIAotCQljYXNlIDMxMTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsaHp1eCAqLworCQljYXNlIE9QXzMxX1hPUF9MSFpVWDoKIAkJCXJ0ID0gZ2V0X3J0KGluc3QpOwogCQkJcmEgPSBnZXRfcmEoaW5zdCk7CiAJCQlyYiA9IGdldF9yYihpbnN0KTsKQEAgLTE0NCw3ICsxNzcsNyBAQAogCQkJdmNwdS0+YXJjaC5ncHJbcmFdID0gZWE7CiAJCQlicmVhazsKIAotCQljYXNlIDMzOTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBtZnNwciAqLworCQljYXNlIE9QXzMxX1hPUF9NRlNQUjoKIAkJCXNwcm4gPSBnZXRfc3BybihpbnN0KTsKIAkJCXJ0ID0gZ2V0X3J0KGluc3QpOwogCkBAIC0xODUsNyArMjE4LDcgQEAKIAkJCX0KIAkJCWJyZWFrOwogCi0JCWNhc2UgNDA3OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHN0aHggKi8KKwkJY2FzZSBPUF8zMV9YT1BfU1RIWDoKIAkJCXJzID0gZ2V0X3JzKGluc3QpOwogCQkJcmEgPSBnZXRfcmEoaW5zdCk7CiAJCQlyYiA9IGdldF9yYihpbnN0KTsKQEAgLTE5NSw3ICsyMjgsNyBAQAogCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIsIDEpOwogCQkJYnJlYWs7CiAKLQkJY2FzZSA0Mzk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3RodXggKi8KKwkJY2FzZSBPUF8zMV9YT1BfU1RIVVg6CiAJCQlycyA9IGdldF9ycyhpbnN0KTsKIAkJCXJhID0gZ2V0X3JhKGluc3QpOwogCQkJcmIgPSBnZXRfcmIoaW5zdCk7CkBAIC0yMTAsNyArMjQzLDcgQEAKIAkJCXZjcHUtPmFyY2guZ3ByW3JhXSA9IGVhOwogCQkJYnJlYWs7CiAKLQkJY2FzZSA0Njc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbXRzcHIgKi8KKwkJY2FzZSBPUF8zMV9YT1BfTVRTUFI6CiAJCQlzcHJuID0gZ2V0X3Nwcm4oaW5zdCk7CiAJCQlycyA9IGdldF9ycyhpbnN0KTsKIAkJCXN3aXRjaCAoc3BybikgewpAQCAtMjQ2LDcgKzI3OSw3IEBACiAJCQl9CiAJCQlicmVhazsKIAotCQljYXNlIDQ3MDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkY2JpICovCisJCWNhc2UgT1BfMzFfWE9QX0RDQkk6CiAJCQkvKiBEbyBub3RoaW5nLiBUaGUgZ3Vlc3QgaXMgcGVyZm9ybWluZyBkY2JpIGJlY2F1c2UKIAkJCSAqIGhhcmR3YXJlIERNQSBpcyBub3Qgc25vb3BlZCBieSB0aGUgZGNhY2hlLCBidXQKIAkJCSAqIGVtdWxhdGVkIERNQSBlaXRoZXIgZ29lcyB0aHJvdWdoIHRoZSBkY2FjaGUgYXMKQEAgLTI1NCwxNSArMjg3LDE1IEBACiAJCQkgKiBjb2hlcmVuY2UuICovCiAJCQlicmVhazsKIAotCQljYXNlIDUzNDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsd2JyeCAqLworCQljYXNlIE9QXzMxX1hPUF9MV0JSWDoKIAkJCXJ0ID0gZ2V0X3J0KGluc3QpOwogCQkJZW11bGF0ZWQgPSBrdm1wcGNfaGFuZGxlX2xvYWQocnVuLCB2Y3B1LCBydCwgNCwgMCk7CiAJCQlicmVhazsKIAotCQljYXNlIDU2NjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0bGJzeW5jICovCisJCWNhc2UgT1BfMzFfWE9QX1RMQlNZTkM6CiAJCQlicmVhazsKIAotCQljYXNlIDY2MjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzdHdicnggKi8KKwkJY2FzZSBPUF8zMV9YT1BfU1RXQlJYOgogCQkJcnMgPSBnZXRfcnMoaW5zdCk7CiAJCQlyYSA9IGdldF9yYShpbnN0KTsKIAkJCXJiID0gZ2V0X3JiKGluc3QpOwpAQCAtMjcyLDEyICszMDUsMTIgQEAKIAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0LCAwKTsKIAkJCWJyZWFrOwogCi0JCWNhc2UgNzkwOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxoYnJ4ICovCisJCWNhc2UgT1BfMzFfWE9QX0xIQlJYOgogCQkJcnQgPSBnZXRfcnQoaW5zdCk7CiAJCQllbXVsYXRlZCA9IGt2bXBwY19oYW5kbGVfbG9hZChydW4sIHZjcHUsIHJ0LCAyLCAwKTsKIAkJCWJyZWFrOwogCi0JCWNhc2UgOTE4OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHN0aGJyeCAqLworCQljYXNlIE9QXzMxX1hPUF9TVEhCUlg6CiAJCQlycyA9IGdldF9ycyhpbnN0KTsKIAkJCXJhID0gZ2V0X3JhKGluc3QpOwogCQkJcmIgPSBnZXRfcmIoaW5zdCk7CkBAIC0yOTMsMzcgKzMyNiwzNyBAQAogCQl9CiAJCWJyZWFrOwogCi0JY2FzZSAzMjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsd3ogKi8KKwljYXNlIE9QX0xXWjoKIAkJcnQgPSBnZXRfcnQoaW5zdCk7CiAJCWVtdWxhdGVkID0ga3ZtcHBjX2hhbmRsZV9sb2FkKHJ1biwgdmNwdSwgcnQsIDQsIDEpOwogCQlicmVhazsKIAotCWNhc2UgMzM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbHd6dSAqLworCWNhc2UgT1BfTFdaVToKIAkJcmEgPSBnZXRfcmEoaW5zdCk7CiAJCXJ0ID0gZ2V0X3J0KGluc3QpOwogCQllbXVsYXRlZCA9IGt2bXBwY19oYW5kbGVfbG9hZChydW4sIHZjcHUsIHJ0LCA0LCAxKTsKIAkJdmNwdS0+YXJjaC5ncHJbcmFdID0gdmNwdS0+YXJjaC5wYWRkcl9hY2Nlc3NlZDsKIAkJYnJlYWs7CiAKLQljYXNlIDM0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxieiAqLworCWNhc2UgT1BfTEJaOgogCQlydCA9IGdldF9ydChpbnN0KTsKIAkJZW11bGF0ZWQgPSBrdm1wcGNfaGFuZGxlX2xvYWQocnVuLCB2Y3B1LCBydCwgMSwgMSk7CiAJCWJyZWFrOwogCi0JY2FzZSAzNTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsYnp1ICovCisJY2FzZSBPUF9MQlpVOgogCQlyYSA9IGdldF9yYShpbnN0KTsKIAkJcnQgPSBnZXRfcnQoaW5zdCk7CiAJCWVtdWxhdGVkID0ga3ZtcHBjX2hhbmRsZV9sb2FkKHJ1biwgdmNwdSwgcnQsIDEsIDEpOwogCQl2Y3B1LT5hcmNoLmdwcltyYV0gPSB2Y3B1LT5hcmNoLnBhZGRyX2FjY2Vzc2VkOwogCQlicmVhazsKIAotCWNhc2UgMzY6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3R3ICovCisJY2FzZSBPUF9TVFc6CiAJCXJzID0gZ2V0X3JzKGluc3QpOwogCQllbXVsYXRlZCA9IGt2bXBwY19oYW5kbGVfc3RvcmUocnVuLCB2Y3B1LCB2Y3B1LT5hcmNoLmdwcltyc10sCiAJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0LCAxKTsKIAkJYnJlYWs7CiAKLQljYXNlIDM3OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHN0d3UgKi8KKwljYXNlIE9QX1NUV1U6CiAJCXJhID0gZ2V0X3JhKGluc3QpOwogCQlycyA9IGdldF9ycyhpbnN0KTsKIAkJZW11bGF0ZWQgPSBrdm1wcGNfaGFuZGxlX3N0b3JlKHJ1biwgdmNwdSwgdmNwdS0+YXJjaC5ncHJbcnNdLApAQCAtMzMxLDEzICszNjQsMTMgQEAKIAkJdmNwdS0+YXJjaC5ncHJbcmFdID0gdmNwdS0+YXJjaC5wYWRkcl9hY2Nlc3NlZDsKIAkJYnJlYWs7CiAKLQljYXNlIDM4OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHN0YiAqLworCWNhc2UgT1BfU1RCOgogCQlycyA9IGdldF9ycyhpbnN0KTsKIAkJZW11bGF0ZWQgPSBrdm1wcGNfaGFuZGxlX3N0b3JlKHJ1biwgdmNwdSwgdmNwdS0+YXJjaC5ncHJbcnNdLAogCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgMSk7CiAJCWJyZWFrOwogCi0JY2FzZSAzOTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzdGJ1ICovCisJY2FzZSBPUF9TVEJVOgogCQlyYSA9IGdldF9yYShpbnN0KTsKIAkJcnMgPSBnZXRfcnMoaW5zdCk7CiAJCWVtdWxhdGVkID0ga3ZtcHBjX2hhbmRsZV9zdG9yZShydW4sIHZjcHUsIHZjcHUtPmFyY2guZ3ByW3JzXSwKQEAgLTM0NSwyNSArMzc4LDI1IEBACiAJCXZjcHUtPmFyY2guZ3ByW3JhXSA9IHZjcHUtPmFyY2gucGFkZHJfYWNjZXNzZWQ7CiAJCWJyZWFrOwogCi0JY2FzZSA0MDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsaHogKi8KKwljYXNlIE9QX0xIWjoKIAkJcnQgPSBnZXRfcnQoaW5zdCk7CiAJCWVtdWxhdGVkID0ga3ZtcHBjX2hhbmRsZV9sb2FkKHJ1biwgdmNwdSwgcnQsIDIsIDEpOwogCQlicmVhazsKIAotCWNhc2UgNDE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbGh6dSAqLworCWNhc2UgT1BfTEhaVToKIAkJcmEgPSBnZXRfcmEoaW5zdCk7CiAJCXJ0ID0gZ2V0X3J0KGluc3QpOwogCQllbXVsYXRlZCA9IGt2bXBwY19oYW5kbGVfbG9hZChydW4sIHZjcHUsIHJ0LCAyLCAxKTsKIAkJdmNwdS0+YXJjaC5ncHJbcmFdID0gdmNwdS0+YXJjaC5wYWRkcl9hY2Nlc3NlZDsKIAkJYnJlYWs7CiAKLQljYXNlIDQ0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHN0aCAqLworCWNhc2UgT1BfU1RIOgogCQlycyA9IGdldF9ycyhpbnN0KTsKIAkJZW11bGF0ZWQgPSBrdm1wcGNfaGFuZGxlX3N0b3JlKHJ1biwgdmNwdSwgdmNwdS0+YXJjaC5ncHJbcnNdLAogCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiwgMSk7CiAJCWJyZWFrOwogCi0JY2FzZSA0NTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzdGh1ICovCisJY2FzZSBPUF9TVEhVOgogCQlyYSA9IGdldF9yYShpbnN0KTsKIAkJcnMgPSBnZXRfcnMoaW5zdCk7CiAJCWVtdWxhdGVkID0ga3ZtcHBjX2hhbmRsZV9zdG9yZShydW4sIHZjcHUsIHZjcHUtPmFyY2guZ3ByW3JzXSwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jIGIvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMKaW5kZXggNWY4MTI1Ni4uOTA1NzMzNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMKKysrIGIvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMKQEAgLTIxNiw0NiArMjE2LDIzIEBACiAKIHZvaWQga3ZtX2FyY2hfdmNwdV91bmluaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewotCWt2bXBwY19jb3JlX2Rlc3Ryb3lfbW11KHZjcHUpOworCWt2bXBwY19tbXVfZGVzdHJveSh2Y3B1KTsKIH0KIAogdm9pZCBrdm1fYXJjaF92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KQogewotCWlmICh2Y3B1LT5ndWVzdF9kZWJ1Zy5lbmFibGVkKQotCQlrdm1wcGNfY29yZV9sb2FkX2d1ZXN0X2RlYnVnc3RhdGUodmNwdSk7Ci0KIAlrdm1wcGNfY29yZV92Y3B1X2xvYWQodmNwdSwgY3B1KTsKIH0KIAogdm9pZCBrdm1fYXJjaF92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JaWYgKHZjcHUtPmd1ZXN0X2RlYnVnLmVuYWJsZWQpCi0JCWt2bXBwY19jb3JlX2xvYWRfaG9zdF9kZWJ1Z3N0YXRlKHZjcHUpOwotCi0JLyogRG9uJ3QgbGVhdmUgZ3Vlc3QgVExCIGVudHJpZXMgcmVzaWRlbnQgd2hlbiBiZWluZyBkZS1zY2hlZHVsZWQuICovCi0JLyogWFhYIEl0IHdvdWxkIGJlIG5pY2UgdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIGhlYXZ5d2VpZ2h0IGV4aXQgYW5kCi0JICogc2NoZWRfb3V0IGhlcmUsIHNpbmNlIHdlIGNvdWxkIGF2b2lkIHRoZSBUTEIgZmx1c2ggZm9yIGhlYXZ5d2VpZ2h0Ci0JICogZXhpdHMuICovCi0JX3RsYmlsX2FsbCgpOwogCWt2bXBwY19jb3JlX3ZjcHVfcHV0KHZjcHUpOwogfQogCi1pbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9kZWJ1Z19ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qga3ZtX2RlYnVnX2d1ZXN0ICpkYmcpCitpbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfZ3Vlc3RfZGVidWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBrdm1fZ3Vlc3RfZGVidWcgKmRiZykKIHsKLQlpbnQgaTsKLQotCXZjcHUtPmd1ZXN0X2RlYnVnLmVuYWJsZWQgPSBkYmctPmVuYWJsZWQ7Ci0JaWYgKHZjcHUtPmd1ZXN0X2RlYnVnLmVuYWJsZWQpIHsKLQkJZm9yIChpPTA7IGkgPCBBUlJBWV9TSVpFKHZjcHUtPmd1ZXN0X2RlYnVnLmJwKTsgaSsrKSB7Ci0JCQlpZiAoZGJnLT5icmVha3BvaW50c1tpXS5lbmFibGVkKQotCQkJCXZjcHUtPmd1ZXN0X2RlYnVnLmJwW2ldID0gZGJnLT5icmVha3BvaW50c1tpXS5hZGRyZXNzOwotCQkJZWxzZQotCQkJCXZjcHUtPmd1ZXN0X2RlYnVnLmJwW2ldID0gMDsKLQkJfQotCX0KLQotCXJldHVybiAwOworCXJldHVybiAtRUlOVkFMOwogfQogCiBzdGF0aWMgdm9pZCBrdm1wcGNfY29tcGxldGVfZGNyX2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2ludGVycnVwdC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2ludGVycnVwdC5jCmluZGV4IDI4YzA0ZGEuLjg4MmU0NzAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pbnRlcnJ1cHQuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvaW50ZXJydXB0LmMKQEAgLTIzNyw4ICsyMzcsNiBAQAogCiBzdGF0aWMgdm9pZCBoYW5kbGVfaWljX2lycSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCiB7Ci0JY29uc3QgdW5zaWduZWQgaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQogCXNwaW5fbG9jaygmZGVzYy0+bG9jayk7CiAKIAlkZXNjLT5zdGF0dXMgJj0gfihJUlFfUkVQTEFZIHwgSVJRX1dBSVRJTkcpOwpAQCAtMjU0LDcgKzI1Miw3IEBACiAJCWdvdG8gb3V0X2VvaTsKIAl9CiAKLQlrc3RhdF9jcHUoY3B1KS5pcnFzW2lycV0rKzsKKwlrc3RhdF9pbmNyX2lycXNfdGhpc19jcHUoaXJxLCBkZXNjKTsKIAogCS8qIE1hcmsgdGhlIElSUSBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MuKi8KIAlkZXNjLT5zdGF0dXMgfD0gSVJRX0lOUFJPR1JFU1M7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc2NoZWQuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zY2hlZC5jCmluZGV4IDZhMGFkMTkuLmYwODUzNjkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zY2hlZC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zY2hlZC5jCkBAIC01MDgsNyArNTA4LDcgQEAKIAkJbGlzdF9hZGRfdGFpbCgmY3R4LT5ycSwgJnNwdV9wcmlvLT5ydW5xW2N0eC0+cHJpb10pOwogCQlzZXRfYml0KGN0eC0+cHJpbywgc3B1X3ByaW8tPmJpdG1hcCk7CiAJCWlmICghc3B1X3ByaW8tPm5yX3dhaXRpbmcrKykKLQkJCV9fbW9kX3RpbWVyKCZzcHVzY2hlZF90aW1lciwgamlmZmllcyArIFNQVVNDSEVEX1RJQ0spOworCQkJbW9kX3RpbWVyKCZzcHVzY2hlZF90aW1lciwgamlmZmllcyArIFNQVVNDSEVEX1RJQ0spOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvc3lzdGVtLWJ1cy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvc3lzdGVtLWJ1cy5jCmluZGV4IDU4MzExYTguLmE3MDVmZmYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL3N5c3RlbS1idXMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9zeXN0ZW0tYnVzLmMKQEAgLTM3Niw3ICszNzYsNyBAQAogCXN0cnVjdCBwczNfc3lzdGVtX2J1c19kcml2ZXIgKmRydjsKIAogCUJVR19PTighZGV2KTsKLQlwcl9kZWJ1ZygiIC0+ICVzOiVkOiAlc1xuIiwgX19mdW5jX18sIF9fTElORV9fLCBfZGV2LT5idXNfaWQpOworCWRldl9kYmcoX2RldiwgIiVzOiVkXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOwogCiAJZHJ2ID0gcHMzX3N5c3RlbV9idXNfZGV2X3RvX3N5c3RlbV9idXNfZHJ2KGRldik7CiAJQlVHX09OKCFkcnYpOwpAQCAtMzk4LDcgKzM5OCw3IEBACiAJc3RydWN0IHBzM19zeXN0ZW1fYnVzX2RyaXZlciAqZHJ2OwogCiAJQlVHX09OKCFkZXYpOwotCXByX2RlYnVnKCIgLT4gJXM6JWQ6ICVzXG4iLCBfX2Z1bmNfXywgX19MSU5FX18sIF9kZXYtPmJ1c19pZCk7CisJZGV2X2RiZyhfZGV2LCAiJXM6JWRcbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CiAKIAlkcnYgPSBwczNfc3lzdGVtX2J1c19kZXZfdG9fc3lzdGVtX2J1c19kcnYoZGV2KTsKIAlCVUdfT04oIWRydik7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvS2NvbmZpZyBiL2FyY2gvczM5MC9LY29uZmlnCmluZGV4IDZiMGEzNTMuLjJhOGFmNWUgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9LY29uZmlnCisrKyBiL2FyY2gvczM5MC9LY29uZmlnCkBAIC0zNDMsMTMgKzM0Myw2IEBACiAKIGNvbW1lbnQgIkkvTyBzdWJzeXN0ZW0gY29uZmlndXJhdGlvbiIKIAotY29uZmlnIE1BQ0hDSEtfV0FSTklORwotCWJvb2wgIlByb2Nlc3Mgd2FybmluZyBtYWNoaW5lIGNoZWNrcyIKLQloZWxwCi0JICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdGhlIG1hY2hpbmUgY2hlY2sgaGFuZGxlciBvbiBJQk0gUy8zOTAgb3IKLQkgIHpTZXJpZXMgdG8gcHJvY2VzcyB3YXJuaW5nIG1hY2hpbmUgY2hlY2tzIChlLmcuIG9uIHBvd2VyIGZhaWx1cmVzKS4KLQkgIElmIHVuc3VyZSwgc2F5ICJZIi4KLQogY29uZmlnIFFESU8KIAl0cmlzdGF0ZSAiUURJTyBzdXBwb3J0IgogCS0tLWhlbHAtLS0KQEAgLTUyMSw3ICs1MTQsNyBAQAogCiBjb25maWcgQVBQTERBVEFfTkVUX1NVTQogCXRyaXN0YXRlICJNb25pdG9yIG92ZXJhbGwgbmV0d29yayBzdGF0aXN0aWNzIgotCWRlcGVuZHMgb24gQVBQTERBVEFfQkFTRQorCWRlcGVuZHMgb24gQVBQTERBVEFfQkFTRSAmJiBORVQKIAloZWxwCiAJICBUaGlzIHByb3ZpZGVzIG5ldHdvcmsgcmVsYXRlZCBkYXRhIHRvIHRoZSBMaW51eCAtIFZNIE1vbml0b3IgU3RyZWFtLAogCSAgY3VycmVudGx5IHRoZXJlIGlzIG9ubHkgYSB0b3RhbCBzdW0gb2YgbmV0d29yayBJL08gc3RhdGlzdGljcywgbm8KQEAgLTU1Miw3ICs1NDUsNyBAQAogCSAgYnV0IGlzIGluZGVwZW5kZW50IG9mIGhhcmR3YXJlL21pY3JvY29kZSBzdXBwb3J0LgogCiBjb25maWcgWkZDUERVTVAKLQl0cmlzdGF0ZSAiemZjcGR1bXAgc3VwcG9ydCIKKwlib29sICJ6ZmNwZHVtcCBzdXBwb3J0IgogCXNlbGVjdCBTTVAKIAlkZWZhdWx0IG4KIAloZWxwCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvY3J5cHRvL3BybmcuYyBiL2FyY2gvczM5MC9jcnlwdG8vcHJuZy5jCmluZGV4IGVjYTcyNGQuLmI0OWMwMGMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9jcnlwdG8vcHJuZy5jCisrKyBiL2FyY2gvczM5MC9jcnlwdG8vcHJuZy5jCkBAIC0yMDEsOCArMjAxLDcgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCBwcm5nX2V4aXQodm9pZCkKIHsKIAkvKiB3aXBlIG1lICovCi0JbWVtc2V0KHAtPmJ1ZiwgMCwgcHJuZ19jaHVua19zaXplKTsKLQlrZnJlZShwLT5idWYpOworCWt6ZnJlZShwLT5idWYpOwogCWtmcmVlKHApOwogCiAJbWlzY19kZXJlZ2lzdGVyKCZwcm5nX2Rldik7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvY3J5cHRvL3NoYS5oIGIvYXJjaC9zMzkwL2NyeXB0by9zaGEuaAppbmRleCAxY2VhZmE1Li5mNGU5ZGM3IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvY3J5cHRvL3NoYS5oCisrKyBiL2FyY2gvczM5MC9jcnlwdG8vc2hhLmgKQEAgLTI5LDcgKzI5LDkgQEAKIAlpbnQgZnVuYzsJCS8qIEtJTUQgZnVuY3Rpb24gdG8gdXNlICovCiB9OwogCi12b2lkIHMzOTBfc2hhX3VwZGF0ZShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCBjb25zdCB1OCAqZGF0YSwgdW5zaWduZWQgaW50IGxlbik7Ci12b2lkIHMzOTBfc2hhX2ZpbmFsKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIHU4ICpvdXQpOworc3RydWN0IHNoYXNoX2Rlc2M7CisKK2ludCBzMzkwX3NoYV91cGRhdGUoc3RydWN0IHNoYXNoX2Rlc2MgKmRlc2MsIGNvbnN0IHU4ICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKTsKK2ludCBzMzkwX3NoYV9maW5hbChzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYywgdTggKm91dCk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2NyeXB0by9zaGExX3MzOTAuYyBiL2FyY2gvczM5MC9jcnlwdG8vc2hhMV9zMzkwLmMKaW5kZXggYjNjYjVhOC4uZTg1YmEzNCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2NyeXB0by9zaGExX3MzOTAuYworKysgYi9hcmNoL3MzOTAvY3J5cHRvL3NoYTFfczM5MC5jCkBAIC0yMywxNyArMjMsMTcgQEAKICAqIGFueSBsYXRlciB2ZXJzaW9uLgogICoKICAqLworI2luY2x1ZGUgPGNyeXB0by9pbnRlcm5hbC9oYXNoLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgogI2luY2x1ZGUgPGNyeXB0by9zaGEuaD4KIAogI2luY2x1ZGUgImNyeXB0X3MzOTAuaCIKICNpbmNsdWRlICJzaGEuaCIKIAotc3RhdGljIHZvaWQgc2hhMV9pbml0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCitzdGF0aWMgaW50IHNoYTFfaW5pdChzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYykKIHsKLQlzdHJ1Y3QgczM5MF9zaGFfY3R4ICpzY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKKwlzdHJ1Y3QgczM5MF9zaGFfY3R4ICpzY3R4ID0gc2hhc2hfZGVzY19jdHgoZGVzYyk7CiAKIAlzY3R4LT5zdGF0ZVswXSA9IFNIQTFfSDA7CiAJc2N0eC0+c3RhdGVbMV0gPSBTSEExX0gxOwpAQCAtNDIsMzQgKzQyLDM2IEBACiAJc2N0eC0+c3RhdGVbNF0gPSBTSEExX0g0OwogCXNjdHgtPmNvdW50ID0gMDsKIAlzY3R4LT5mdW5jID0gS0lNRF9TSEFfMTsKKworCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGNyeXB0b19hbGcgYWxnID0gewotCS5jcmFfbmFtZQk9CSJzaGExIiwKLQkuY3JhX2RyaXZlcl9uYW1lPQkic2hhMS1zMzkwIiwKLQkuY3JhX3ByaW9yaXR5CT0JQ1JZUFRfUzM5MF9QUklPUklUWSwKLQkuY3JhX2ZsYWdzCT0JQ1JZUFRPX0FMR19UWVBFX0RJR0VTVCwKLQkuY3JhX2Jsb2Nrc2l6ZQk9CVNIQTFfQkxPQ0tfU0laRSwKLQkuY3JhX2N0eHNpemUJPQlzaXplb2Yoc3RydWN0IHMzOTBfc2hhX2N0eCksCi0JLmNyYV9tb2R1bGUJPQlUSElTX01PRFVMRSwKLQkuY3JhX2xpc3QJPQlMSVNUX0hFQURfSU5JVChhbGcuY3JhX2xpc3QpLAotCS5jcmFfdQkJPQl7IC5kaWdlc3QgPSB7Ci0JLmRpYV9kaWdlc3RzaXplCT0JU0hBMV9ESUdFU1RfU0laRSwKLQkuZGlhX2luaXQJPQlzaGExX2luaXQsCi0JLmRpYV91cGRhdGUJPQlzMzkwX3NoYV91cGRhdGUsCi0JLmRpYV9maW5hbAk9CXMzOTBfc2hhX2ZpbmFsIH0gfQorc3RhdGljIHN0cnVjdCBzaGFzaF9hbGcgYWxnID0geworCS5kaWdlc3RzaXplCT0JU0hBMV9ESUdFU1RfU0laRSwKKwkuaW5pdAkJPQlzaGExX2luaXQsCisJLnVwZGF0ZQkJPQlzMzkwX3NoYV91cGRhdGUsCisJLmZpbmFsCQk9CXMzOTBfc2hhX2ZpbmFsLAorCS5kZXNjc2l6ZQk9CXNpemVvZihzdHJ1Y3QgczM5MF9zaGFfY3R4KSwKKwkuYmFzZQkJPQl7CisJCS5jcmFfbmFtZQk9CSJzaGExIiwKKwkJLmNyYV9kcml2ZXJfbmFtZT0JInNoYTEtczM5MCIsCisJCS5jcmFfcHJpb3JpdHkJPQlDUllQVF9TMzkwX1BSSU9SSVRZLAorCQkuY3JhX2ZsYWdzCT0JQ1JZUFRPX0FMR19UWVBFX1NIQVNILAorCQkuY3JhX2Jsb2Nrc2l6ZQk9CVNIQTFfQkxPQ0tfU0laRSwKKwkJLmNyYV9tb2R1bGUJPQlUSElTX01PRFVMRSwKKwl9CiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBzaGExX3MzOTBfaW5pdCh2b2lkKQogewogCWlmICghY3J5cHRfczM5MF9mdW5jX2F2YWlsYWJsZShLSU1EX1NIQV8xKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCXJldHVybiBjcnlwdG9fcmVnaXN0ZXJfYWxnKCZhbGcpOworCXJldHVybiBjcnlwdG9fcmVnaXN0ZXJfc2hhc2goJmFsZyk7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBzaGExX3MzOTBfZmluaSh2b2lkKQogewotCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmYWxnKTsKKwljcnlwdG9fdW5yZWdpc3Rlcl9zaGFzaCgmYWxnKTsKIH0KIAogbW9kdWxlX2luaXQoc2hhMV9zMzkwX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2NyeXB0by9zaGEyNTZfczM5MC5jIGIvYXJjaC9zMzkwL2NyeXB0by9zaGEyNTZfczM5MC5jCmluZGV4IDE5YzAzZmIuLmY5ZmVmYzUgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9jcnlwdG8vc2hhMjU2X3MzOTAuYworKysgYi9hcmNoL3MzOTAvY3J5cHRvL3NoYTI1Nl9zMzkwLmMKQEAgLTE2LDE3ICsxNiwxNyBAQAogICogYW55IGxhdGVyIHZlcnNpb24uCiAgKgogICovCisjaW5jbHVkZSA8Y3J5cHRvL2ludGVybmFsL2hhc2guaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CiAjaW5jbHVkZSA8Y3J5cHRvL3NoYS5oPgogCiAjaW5jbHVkZSAiY3J5cHRfczM5MC5oIgogI2luY2x1ZGUgInNoYS5oIgogCi1zdGF0aWMgdm9pZCBzaGEyNTZfaW5pdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQorc3RhdGljIGludCBzaGEyNTZfaW5pdChzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYykKIHsKLQlzdHJ1Y3QgczM5MF9zaGFfY3R4ICpzY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKKwlzdHJ1Y3QgczM5MF9zaGFfY3R4ICpzY3R4ID0gc2hhc2hfZGVzY19jdHgoZGVzYyk7CiAKIAlzY3R4LT5zdGF0ZVswXSA9IFNIQTI1Nl9IMDsKIAlzY3R4LT5zdGF0ZVsxXSA9IFNIQTI1Nl9IMTsKQEAgLTM4LDIyICszOCwyNCBAQAogCXNjdHgtPnN0YXRlWzddID0gU0hBMjU2X0g3OwogCXNjdHgtPmNvdW50ID0gMDsKIAlzY3R4LT5mdW5jID0gS0lNRF9TSEFfMjU2OworCisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgY3J5cHRvX2FsZyBhbGcgPSB7Ci0JLmNyYV9uYW1lCT0JInNoYTI1NiIsCi0JLmNyYV9kcml2ZXJfbmFtZSA9CSJzaGEyNTYtczM5MCIsCi0JLmNyYV9wcmlvcml0eQk9CUNSWVBUX1MzOTBfUFJJT1JJVFksCi0JLmNyYV9mbGFncwk9CUNSWVBUT19BTEdfVFlQRV9ESUdFU1QsCi0JLmNyYV9ibG9ja3NpemUJPQlTSEEyNTZfQkxPQ0tfU0laRSwKLQkuY3JhX2N0eHNpemUJPQlzaXplb2Yoc3RydWN0IHMzOTBfc2hhX2N0eCksCi0JLmNyYV9tb2R1bGUJPQlUSElTX01PRFVMRSwKLQkuY3JhX2xpc3QJPQlMSVNUX0hFQURfSU5JVChhbGcuY3JhX2xpc3QpLAotCS5jcmFfdQkJPQl7IC5kaWdlc3QgPSB7Ci0JLmRpYV9kaWdlc3RzaXplCT0JU0hBMjU2X0RJR0VTVF9TSVpFLAotCS5kaWFfaW5pdAk9CXNoYTI1Nl9pbml0LAotCS5kaWFfdXBkYXRlCT0JczM5MF9zaGFfdXBkYXRlLAotCS5kaWFfZmluYWwJPQlzMzkwX3NoYV9maW5hbCB9IH0KK3N0YXRpYyBzdHJ1Y3Qgc2hhc2hfYWxnIGFsZyA9IHsKKwkuZGlnZXN0c2l6ZQk9CVNIQTI1Nl9ESUdFU1RfU0laRSwKKwkuaW5pdAkJPQlzaGEyNTZfaW5pdCwKKwkudXBkYXRlCQk9CXMzOTBfc2hhX3VwZGF0ZSwKKwkuZmluYWwJCT0JczM5MF9zaGFfZmluYWwsCisJLmRlc2NzaXplCT0Jc2l6ZW9mKHN0cnVjdCBzMzkwX3NoYV9jdHgpLAorCS5iYXNlCQk9CXsKKwkJLmNyYV9uYW1lCT0JInNoYTI1NiIsCisJCS5jcmFfZHJpdmVyX25hbWU9CSJzaGEyNTYtczM5MCIsCisJCS5jcmFfcHJpb3JpdHkJPQlDUllQVF9TMzkwX1BSSU9SSVRZLAorCQkuY3JhX2ZsYWdzCT0JQ1JZUFRPX0FMR19UWVBFX1NIQVNILAorCQkuY3JhX2Jsb2Nrc2l6ZQk9CVNIQTI1Nl9CTE9DS19TSVpFLAorCQkuY3JhX21vZHVsZQk9CVRISVNfTU9EVUxFLAorCX0KIH07CiAKIHN0YXRpYyBpbnQgc2hhMjU2X3MzOTBfaW5pdCh2b2lkKQpAQCAtNjEsMTIgKzYzLDEyIEBACiAJaWYgKCFjcnlwdF9zMzkwX2Z1bmNfYXZhaWxhYmxlKEtJTURfU0hBXzI1NikpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCXJldHVybiBjcnlwdG9fcmVnaXN0ZXJfYWxnKCZhbGcpOworCXJldHVybiBjcnlwdG9fcmVnaXN0ZXJfc2hhc2goJmFsZyk7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBzaGEyNTZfczM5MF9maW5pKHZvaWQpCiB7Ci0JY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZhbGcpOworCWNyeXB0b191bnJlZ2lzdGVyX3NoYXNoKCZhbGcpOwogfQogCiBtb2R1bGVfaW5pdChzaGEyNTZfczM5MF9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9jcnlwdG8vc2hhNTEyX3MzOTAuYyBiL2FyY2gvczM5MC9jcnlwdG8vc2hhNTEyX3MzOTAuYwppbmRleCAyM2M3ODYxLi44MzE5MmJmIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvY3J5cHRvL3NoYTUxMl9zMzkwLmMKKysrIGIvYXJjaC9zMzkwL2NyeXB0by9zaGE1MTJfczM5MC5jCkBAIC0xMiwxNiArMTIsMTYgQEAKICAqIGFueSBsYXRlciB2ZXJzaW9uLgogICoKICAqLworI2luY2x1ZGUgPGNyeXB0by9pbnRlcm5hbC9oYXNoLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgogCiAjaW5jbHVkZSAic2hhLmgiCiAjaW5jbHVkZSAiY3J5cHRfczM5MC5oIgogCi1zdGF0aWMgdm9pZCBzaGE1MTJfaW5pdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQorc3RhdGljIGludCBzaGE1MTJfaW5pdChzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYykKIHsKLQlzdHJ1Y3QgczM5MF9zaGFfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworCXN0cnVjdCBzMzkwX3NoYV9jdHggKmN0eCA9IHNoYXNoX2Rlc2NfY3R4KGRlc2MpOwogCiAJKihfX3U2NCAqKSZjdHgtPnN0YXRlWzBdID0gMHg2YTA5ZTY2N2YzYmNjOTA4VUxMOwogCSooX191NjQgKikmY3R4LT5zdGF0ZVsyXSA9IDB4YmI2N2FlODU4NGNhYTczYlVMTDsKQEAgLTMzLDI5ICszMywzMSBAQAogCSooX191NjQgKikmY3R4LT5zdGF0ZVsxNF0gPSAweDViZTBjZDE5MTM3ZTIxNzlVTEw7CiAJY3R4LT5jb3VudCA9IDA7CiAJY3R4LT5mdW5jID0gS0lNRF9TSEFfNTEyOworCisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgY3J5cHRvX2FsZyBzaGE1MTJfYWxnID0gewotCS5jcmFfbmFtZQk9CSJzaGE1MTIiLAotCS5jcmFfZHJpdmVyX25hbWUgPQkic2hhNTEyLXMzOTAiLAotCS5jcmFfcHJpb3JpdHkJPQlDUllQVF9TMzkwX1BSSU9SSVRZLAotCS5jcmFfZmxhZ3MJPQlDUllQVE9fQUxHX1RZUEVfRElHRVNULAotCS5jcmFfYmxvY2tzaXplCT0JU0hBNTEyX0JMT0NLX1NJWkUsCi0JLmNyYV9jdHhzaXplCT0Jc2l6ZW9mKHN0cnVjdCBzMzkwX3NoYV9jdHgpLAotCS5jcmFfbW9kdWxlCT0JVEhJU19NT0RVTEUsCi0JLmNyYV9saXN0CT0JTElTVF9IRUFEX0lOSVQoc2hhNTEyX2FsZy5jcmFfbGlzdCksCi0JLmNyYV91CQk9CXsgLmRpZ2VzdCA9IHsKLQkuZGlhX2RpZ2VzdHNpemUJPQlTSEE1MTJfRElHRVNUX1NJWkUsCi0JLmRpYV9pbml0CT0Jc2hhNTEyX2luaXQsCi0JLmRpYV91cGRhdGUJPQlzMzkwX3NoYV91cGRhdGUsCi0JLmRpYV9maW5hbAk9CXMzOTBfc2hhX2ZpbmFsIH0gfQorc3RhdGljIHN0cnVjdCBzaGFzaF9hbGcgc2hhNTEyX2FsZyA9IHsKKwkuZGlnZXN0c2l6ZQk9CVNIQTUxMl9ESUdFU1RfU0laRSwKKwkuaW5pdAkJPQlzaGE1MTJfaW5pdCwKKwkudXBkYXRlCQk9CXMzOTBfc2hhX3VwZGF0ZSwKKwkuZmluYWwJCT0JczM5MF9zaGFfZmluYWwsCisJLmRlc2NzaXplCT0Jc2l6ZW9mKHN0cnVjdCBzMzkwX3NoYV9jdHgpLAorCS5iYXNlCQk9CXsKKwkJLmNyYV9uYW1lCT0JInNoYTUxMiIsCisJCS5jcmFfZHJpdmVyX25hbWU9CSJzaGE1MTItczM5MCIsCisJCS5jcmFfcHJpb3JpdHkJPQlDUllQVF9TMzkwX1BSSU9SSVRZLAorCQkuY3JhX2ZsYWdzCT0JQ1JZUFRPX0FMR19UWVBFX1NIQVNILAorCQkuY3JhX2Jsb2Nrc2l6ZQk9CVNIQTUxMl9CTE9DS19TSVpFLAorCQkuY3JhX21vZHVsZQk9CVRISVNfTU9EVUxFLAorCX0KIH07CiAKIE1PRFVMRV9BTElBUygic2hhNTEyIik7CiAKLXN0YXRpYyB2b2lkIHNoYTM4NF9pbml0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCitzdGF0aWMgaW50IHNoYTM4NF9pbml0KHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjKQogewotCXN0cnVjdCBzMzkwX3NoYV9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CisJc3RydWN0IHMzOTBfc2hhX2N0eCAqY3R4ID0gc2hhc2hfZGVzY19jdHgoZGVzYyk7CiAKIAkqKF9fdTY0ICopJmN0eC0+c3RhdGVbMF0gPSAweGNiYmI5ZDVkYzEwNTllZDhVTEw7CiAJKihfX3U2NCAqKSZjdHgtPnN0YXRlWzJdID0gMHg2MjlhMjkyYTM2N2NkNTA3VUxMOwpAQCAtNjcsMjIgKzY5LDI1IEBACiAJKihfX3U2NCAqKSZjdHgtPnN0YXRlWzE0XSA9IDB4NDdiNTQ4MWRiZWZhNGZhNFVMTDsKIAljdHgtPmNvdW50ID0gMDsKIAljdHgtPmZ1bmMgPSBLSU1EX1NIQV81MTI7CisKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBjcnlwdG9fYWxnIHNoYTM4NF9hbGcgPSB7Ci0JLmNyYV9uYW1lCT0JInNoYTM4NCIsCi0JLmNyYV9kcml2ZXJfbmFtZSA9CSJzaGEzODQtczM5MCIsCi0JLmNyYV9wcmlvcml0eQk9CUNSWVBUX1MzOTBfUFJJT1JJVFksCi0JLmNyYV9mbGFncwk9CUNSWVBUT19BTEdfVFlQRV9ESUdFU1QsCi0JLmNyYV9ibG9ja3NpemUJPQlTSEEzODRfQkxPQ0tfU0laRSwKLQkuY3JhX2N0eHNpemUJPQlzaXplb2Yoc3RydWN0IHMzOTBfc2hhX2N0eCksCi0JLmNyYV9tb2R1bGUJPQlUSElTX01PRFVMRSwKLQkuY3JhX2xpc3QJPQlMSVNUX0hFQURfSU5JVChzaGEzODRfYWxnLmNyYV9saXN0KSwKLQkuY3JhX3UJCT0JeyAuZGlnZXN0ID0gewotCS5kaWFfZGlnZXN0c2l6ZQk9CVNIQTM4NF9ESUdFU1RfU0laRSwKLQkuZGlhX2luaXQJPQlzaGEzODRfaW5pdCwKLQkuZGlhX3VwZGF0ZQk9CXMzOTBfc2hhX3VwZGF0ZSwKLQkuZGlhX2ZpbmFsCT0JczM5MF9zaGFfZmluYWwgfSB9CitzdGF0aWMgc3RydWN0IHNoYXNoX2FsZyBzaGEzODRfYWxnID0geworCS5kaWdlc3RzaXplCT0JU0hBMzg0X0RJR0VTVF9TSVpFLAorCS5pbml0CQk9CXNoYTM4NF9pbml0LAorCS51cGRhdGUJCT0JczM5MF9zaGFfdXBkYXRlLAorCS5maW5hbAkJPQlzMzkwX3NoYV9maW5hbCwKKwkuZGVzY3NpemUJPQlzaXplb2Yoc3RydWN0IHMzOTBfc2hhX2N0eCksCisJLmJhc2UJCT0JeworCQkuY3JhX25hbWUJPQkic2hhMzg0IiwKKwkJLmNyYV9kcml2ZXJfbmFtZT0JInNoYTM4NC1zMzkwIiwKKwkJLmNyYV9wcmlvcml0eQk9CUNSWVBUX1MzOTBfUFJJT1JJVFksCisJCS5jcmFfZmxhZ3MJPQlDUllQVE9fQUxHX1RZUEVfU0hBU0gsCisJCS5jcmFfYmxvY2tzaXplCT0JU0hBMzg0X0JMT0NLX1NJWkUsCisJCS5jcmFfY3R4c2l6ZQk9CXNpemVvZihzdHJ1Y3QgczM5MF9zaGFfY3R4KSwKKwkJLmNyYV9tb2R1bGUJPQlUSElTX01PRFVMRSwKKwl9CiB9OwogCiBNT0RVTEVfQUxJQVMoInNoYTM4NCIpOwpAQCAtOTMsMTggKzk4LDE4IEBACiAKIAlpZiAoIWNyeXB0X3MzOTBfZnVuY19hdmFpbGFibGUoS0lNRF9TSEFfNTEyKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCWlmICgocmV0ID0gY3J5cHRvX3JlZ2lzdGVyX2FsZygmc2hhNTEyX2FsZykpIDwgMCkKKwlpZiAoKHJldCA9IGNyeXB0b19yZWdpc3Rlcl9zaGFzaCgmc2hhNTEyX2FsZykpIDwgMCkKIAkJZ290byBvdXQ7Ci0JaWYgKChyZXQgPSBjcnlwdG9fcmVnaXN0ZXJfYWxnKCZzaGEzODRfYWxnKSkgPCAwKQotCQljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJnNoYTUxMl9hbGcpOworCWlmICgocmV0ID0gY3J5cHRvX3JlZ2lzdGVyX3NoYXNoKCZzaGEzODRfYWxnKSkgPCAwKQorCQljcnlwdG9fdW5yZWdpc3Rlcl9zaGFzaCgmc2hhNTEyX2FsZyk7CiBvdXQ6CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGZpbmkodm9pZCkKIHsKLQljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJnNoYTUxMl9hbGcpOwotCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmc2hhMzg0X2FsZyk7CisJY3J5cHRvX3VucmVnaXN0ZXJfc2hhc2goJnNoYTUxMl9hbGcpOworCWNyeXB0b191bnJlZ2lzdGVyX3NoYXNoKCZzaGEzODRfYWxnKTsKIH0KIAogbW9kdWxlX2luaXQoaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvY3J5cHRvL3NoYV9jb21tb24uYyBiL2FyY2gvczM5MC9jcnlwdG8vc2hhX2NvbW1vbi5jCmluZGV4IDlkNmViOGMuLjc5MDNlYzQgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9jcnlwdG8vc2hhX2NvbW1vbi5jCisrKyBiL2FyY2gvczM5MC9jcnlwdG8vc2hhX2NvbW1vbi5jCkBAIC0xMywxNCArMTMsMTQgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgorI2luY2x1ZGUgPGNyeXB0by9pbnRlcm5hbC9oYXNoLmg+CiAjaW5jbHVkZSAic2hhLmgiCiAjaW5jbHVkZSAiY3J5cHRfczM5MC5oIgogCi12b2lkIHMzOTBfc2hhX3VwZGF0ZShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCBjb25zdCB1OCAqZGF0YSwgdW5zaWduZWQgaW50IGxlbikKK2ludCBzMzkwX3NoYV91cGRhdGUoc3RydWN0IHNoYXNoX2Rlc2MgKmRlc2MsIGNvbnN0IHU4ICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKQogewotCXN0cnVjdCBzMzkwX3NoYV9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7Ci0JdW5zaWduZWQgaW50IGJzaXplID0gY3J5cHRvX3RmbV9hbGdfYmxvY2tzaXplKHRmbSk7CisJc3RydWN0IHMzOTBfc2hhX2N0eCAqY3R4ID0gc2hhc2hfZGVzY19jdHgoZGVzYyk7CisJdW5zaWduZWQgaW50IGJzaXplID0gY3J5cHRvX3NoYXNoX2Jsb2Nrc2l6ZShkZXNjLT50Zm0pOwogCXVuc2lnbmVkIGludCBpbmRleDsKIAlpbnQgcmV0OwogCkBAIC01MSwxMyArNTEsMTUgQEAKIHN0b3JlOgogCWlmIChsZW4pCiAJCW1lbWNweShjdHgtPmJ1ZiArIGluZGV4ICwgZGF0YSwgbGVuKTsKKworCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoczM5MF9zaGFfdXBkYXRlKTsKIAotdm9pZCBzMzkwX3NoYV9maW5hbChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCB1OCAqb3V0KQoraW50IHMzOTBfc2hhX2ZpbmFsKHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjLCB1OCAqb3V0KQogewotCXN0cnVjdCBzMzkwX3NoYV9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7Ci0JdW5zaWduZWQgaW50IGJzaXplID0gY3J5cHRvX3RmbV9hbGdfYmxvY2tzaXplKHRmbSk7CisJc3RydWN0IHMzOTBfc2hhX2N0eCAqY3R4ID0gc2hhc2hfZGVzY19jdHgoZGVzYyk7CisJdW5zaWduZWQgaW50IGJzaXplID0gY3J5cHRvX3NoYXNoX2Jsb2Nrc2l6ZShkZXNjLT50Zm0pOwogCXU2NCBiaXRzOwogCXVuc2lnbmVkIGludCBpbmRleCwgZW5kLCBwbGVuOwogCWludCByZXQ7CkBAIC04Nyw5ICs4OSwxMSBAQAogCUJVR19PTihyZXQgIT0gZW5kKTsKIAogCS8qIGNvcHkgZGlnZXN0IHRvIG91dCAqLwotCW1lbWNweShvdXQsIGN0eC0+c3RhdGUsIGNyeXB0b19oYXNoX2RpZ2VzdHNpemUoY3J5cHRvX2hhc2hfY2FzdCh0Zm0pKSk7CisJbWVtY3B5KG91dCwgY3R4LT5zdGF0ZSwgY3J5cHRvX3NoYXNoX2RpZ2VzdHNpemUoZGVzYy0+dGZtKSk7CiAJLyogd2lwZSBjb250ZXh0ICovCiAJbWVtc2V0KGN0eCwgMCwgc2l6ZW9mICpjdHgpOworCisJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzMzkwX3NoYV9maW5hbCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9iaXRvcHMuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9iaXRvcHMuaAppbmRleCA4ZTkyNDNhLi5iMzA2MDZmIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vYml0b3BzLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2JpdG9wcy5oCkBAIC01Nyw3ICs1Nyw3IEBACiAgKiB3aXRoIG9wZXJhdGlvbiBvZiB0aGUgZm9ybSAic2V0X2JpdChiaXRuciwgZmxhZ3MpIi4KICAqLwogCi0vKiBiaXRtYXAgdGFibGVzIGZyb20gYXJjaC9TMzkwL2tlcm5lbC9iaXRtYXAuUyAqLworLyogYml0bWFwIHRhYmxlcyBmcm9tIGFyY2gvczM5MC9rZXJuZWwvYml0bWFwLmMgKi8KIGV4dGVybiBjb25zdCBjaGFyIF9vaV9iaXRtYXBbXTsKIGV4dGVybiBjb25zdCBjaGFyIF9uaV9iaXRtYXBbXTsKIGV4dGVybiBjb25zdCBjaGFyIF96Yl9maW5kbWFwW107CkBAIC01MjUsMTYgKzUyNSwxNiBAQAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fZmZ6X3dvcmQodW5zaWduZWQgbG9uZyBuciwgdW5zaWduZWQgbG9uZyB3b3JkKQogewogI2lmZGVmIF9fczM5MHhfXwotCWlmIChsaWtlbHkoKHdvcmQgJiAweGZmZmZmZmZmKSA9PSAweGZmZmZmZmZmKSkgeworCWlmICgod29yZCAmIDB4ZmZmZmZmZmYpID09IDB4ZmZmZmZmZmYpIHsKIAkJd29yZCA+Pj0gMzI7CiAJCW5yICs9IDMyOwogCX0KICNlbmRpZgotCWlmIChsaWtlbHkoKHdvcmQgJiAweGZmZmYpID09IDB4ZmZmZikpIHsKKwlpZiAoKHdvcmQgJiAweGZmZmYpID09IDB4ZmZmZikgewogCQl3b3JkID4+PSAxNjsKIAkJbnIgKz0gMTY7CiAJfQotCWlmIChsaWtlbHkoKHdvcmQgJiAweGZmKSA9PSAweGZmKSkgeworCWlmICgod29yZCAmIDB4ZmYpID09IDB4ZmYpIHsKIAkJd29yZCA+Pj0gODsKIAkJbnIgKz0gODsKIAl9CkBAIC01NDksMTYgKzU0OSwxNiBAQAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fZmZzX3dvcmQodW5zaWduZWQgbG9uZyBuciwgdW5zaWduZWQgbG9uZyB3b3JkKQogewogI2lmZGVmIF9fczM5MHhfXwotCWlmIChsaWtlbHkoKHdvcmQgJiAweGZmZmZmZmZmKSA9PSAwKSkgeworCWlmICgod29yZCAmIDB4ZmZmZmZmZmYpID09IDApIHsKIAkJd29yZCA+Pj0gMzI7CiAJCW5yICs9IDMyOwogCX0KICNlbmRpZgotCWlmIChsaWtlbHkoKHdvcmQgJiAweGZmZmYpID09IDApKSB7CisJaWYgKCh3b3JkICYgMHhmZmZmKSA9PSAwKSB7CiAJCXdvcmQgPj49IDE2OwogCQluciArPSAxNjsKIAl9Ci0JaWYgKGxpa2VseSgod29yZCAmIDB4ZmYpID09IDApKSB7CisJaWYgKCh3b3JkICYgMHhmZikgPT0gMCkgewogCQl3b3JkID4+PSA4OwogCQluciArPSA4OwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9jcncuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9jcncuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTg1YTZkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2Nydy5oCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiAgIERhdGEgZGVmaW5pdGlvbnMgZm9yIGNoYW5uZWwgcmVwb3J0IHByb2Nlc3NpbmcKKyAqICAgIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwMCwyMDA5CisgKiAgICBBdXRob3Iocyk6IEluZ28gQWRsdW5nIDxhZGx1bmdAZGUuaWJtLmNvbT4sCisgKgkJIE1hcnRpbiBTY2h3aWRlZnNreSA8c2Nod2lkZWZza3lAZGUuaWJtLmNvbT4sCisgKgkJIENvcm5lbGlhIEh1Y2sgPGNvcm5lbGlhLmh1Y2tAZGUuaWJtLmNvbT4sCisgKgkJIEhlaWtvIENhcnN0ZW5zIDxoZWlrby5jYXJzdGVuc0BkZS5pYm0uY29tPiwKKyAqLworCisjaWZuZGVmIF9BU01fUzM5MF9DUldfSAorI2RlZmluZSBfQVNNX1MzOTBfQ1JXX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qCisgKiBDaGFubmVsIFJlcG9ydCBXb3JkCisgKi8KK3N0cnVjdCBjcncgeworCV9fdTMyIHJlczEgOiAgMTsgICAvKiByZXNlcnZlZCB6ZXJvICovCisJX191MzIgc2xjdCA6ICAxOyAgIC8qIHNvbGljaXRlZCAqLworCV9fdTMyIG9mbHcgOiAgMTsgICAvKiBvdmVyZmxvdyAqLworCV9fdTMyIGNobiAgOiAgMTsgICAvKiBjaGFpbmVkICovCisJX191MzIgcnNjICA6ICA0OyAgIC8qIHJlcG9ydGluZyBzb3VyY2UgY29kZSAqLworCV9fdTMyIGFuYyAgOiAgMTsgICAvKiBhbmNpbGxhcnkgcmVwb3J0ICovCisJX191MzIgcmVzMiA6ICAxOyAgIC8qIHJlc2VydmVkIHplcm8gKi8KKwlfX3UzMiBlcmMgIDogIDY7ICAgLyogZXJyb3ItcmVjb3ZlcnkgY29kZSAqLworCV9fdTMyIHJzaWQgOiAxNjsgICAvKiByZXBvcnRpbmctc291cmNlIElEICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwordHlwZWRlZiB2b2lkICgqY3J3X2hhbmRsZXJfdCkoc3RydWN0IGNydyAqLCBzdHJ1Y3QgY3J3ICosIGludCk7CisKK2V4dGVybiBpbnQgY3J3X3JlZ2lzdGVyX2hhbmRsZXIoaW50IHJzYywgY3J3X2hhbmRsZXJfdCBoYW5kbGVyKTsKK2V4dGVybiB2b2lkIGNyd191bnJlZ2lzdGVyX2hhbmRsZXIoaW50IHJzYyk7CitleHRlcm4gdm9pZCBjcndfaGFuZGxlX2NoYW5uZWxfcmVwb3J0KHZvaWQpOworCisjZGVmaW5lIE5SX1JTQ1MgMTYKKworI2RlZmluZSBDUldfUlNDX01PTklUT1IgIDB4MiAgLyogbW9uaXRvcmluZyBmYWNpbGl0eSAqLworI2RlZmluZSBDUldfUlNDX1NDSAkgMHgzICAvKiBzdWJjaGFubmVsICovCisjZGVmaW5lIENSV19SU0NfQ1BBVEgJIDB4NCAgLyogY2hhbm5lbCBwYXRoICovCisjZGVmaW5lIENSV19SU0NfQ09ORklHCSAweDkgIC8qIGNvbmZpZ3VyYXRpb24tYWxlcnQgZmFjaWxpdHkgKi8KKyNkZWZpbmUgQ1JXX1JTQ19DU1MJIDB4QiAgLyogY2hhbm5lbCBzdWJzeXN0ZW0gKi8KKworI2RlZmluZSBDUldfRVJDX0VWRU5UCSAweDAwIC8qIGV2ZW50IGluZm9ybWF0aW9uIHBlbmRpbmcgKi8KKyNkZWZpbmUgQ1JXX0VSQ19BVkFJTAkgMHgwMSAvKiBhdmFpbGFibGUgKi8KKyNkZWZpbmUgQ1JXX0VSQ19JTklUCSAweDAyIC8qIGluaXRpYWxpemVkICovCisjZGVmaW5lIENSV19FUkNfVEVSUk9SCSAweDAzIC8qIHRlbXBvcmFyeSBlcnJvciAqLworI2RlZmluZSBDUldfRVJDX0lQQVJNCSAweDA0IC8qIGluc3RhbGxlZCBwYXJtIGluaXRpYWxpemVkICovCisjZGVmaW5lIENSV19FUkNfVEVSTQkgMHgwNSAvKiB0ZXJtaW5hbCAqLworI2RlZmluZSBDUldfRVJDX1BFUlJOCSAweDA2IC8qIHBlcm0uIGVycm9yLCBmYWMuIG5vdCBpbml0ICovCisjZGVmaW5lIENSV19FUkNfUEVSUkkJIDB4MDcgLyogcGVybS4gZXJyb3IsIGZhY2lsaXR5IGluaXQgKi8KKyNkZWZpbmUgQ1JXX0VSQ19QTU9ECSAweDA4IC8qIGluc3RhbGxlZCBwYXJhbWV0ZXJzIG1vZGlmaWVkICovCisKK3N0YXRpYyBpbmxpbmUgaW50IHN0Y3J3KHN0cnVjdCBjcncgKnBjcncpCit7CisJaW50IGNjb2RlOworCisJYXNtIHZvbGF0aWxlKAorCQkiCXN0Y3J3CTAoJTIpXG4iCisJCSIJaXBtCSUwXG4iCisJCSIJc3JsCSUwLDI4XG4iCisJCTogIj1kIiAoY2NvZGUpLCAiPW0iICgqcGNydykKKwkJOiAiYSIgKHBjcncpCisJCTogImNjIiApOworCXJldHVybiBjY29kZTsKK30KKworI2VuZGlmIC8qIF9BU01fUzM5MF9DUldfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2Rhc2QuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9kYXNkLmgKaW5kZXggZTJkYjZmMS4uMjE4YmNlOCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2Rhc2QuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vZGFzZC5oCkBAIC0xNjIsMTUgKzE2MiwxNSBAQAogICAgICAgICB1bnNpZ25lZCBpbnQgZGFzZF9pb19ucl9yZXFbMzJdOyAvKiBoaXN0b2dyYW0gb2YgIyBvZiByZXF1ZXN0cyBpbiBjaGFucSAqLwogfSBkYXNkX3Byb2ZpbGVfaW5mb190OwogCi0vKiAKKy8qCiAgKiBzdHJ1Y3QgZm9ybWF0X2RhdGFfdAogICogcmVwcmVzZW50cyBhbGwgZGF0YSBuZWNlc3NhcnkgdG8gZm9ybWF0IGEgZGFzZAogICovCiB0eXBlZGVmIHN0cnVjdCBmb3JtYXRfZGF0YV90IHsKLQlpbnQgc3RhcnRfdW5pdDsgLyogZnJvbSB0cmFjayAqLwotCWludCBzdG9wX3VuaXQ7ICAvKiB0byB0cmFjayAqLwotCWludCBibGtzaXplOyAgICAvKiBzZWN0b3JzaXplICovCi0gICAgICAgIGludCBpbnRlbnNpdHk7ICAKKwl1bnNpZ25lZCBpbnQgc3RhcnRfdW5pdDsgLyogZnJvbSB0cmFjayAqLworCXVuc2lnbmVkIGludCBzdG9wX3VuaXQ7ICAvKiB0byB0cmFjayAqLworCXVuc2lnbmVkIGludCBibGtzaXplOwkgLyogc2VjdG9yc2l6ZSAqLworCXVuc2lnbmVkIGludCBpbnRlbnNpdHk7CiB9IGZvcm1hdF9kYXRhX3Q7CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vaWRhbHMuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9pZGFscy5oCmluZGV4IGU4MmMxMGUuLmFhZTI3NmQgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9pZGFscy5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9pZGFscy5oCkBAIC00NCwyNCArNDQsMTggQEAKIC8qCiAgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBpZGFsIHdvcmRzIG5lZWRlZCBmb3IgYW4gYWRkcmVzcy9sZW5ndGggcGFpci4KICAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKLWlkYWxfbnJfd29yZHModm9pZCAqdmFkZHIsIHVuc2lnbmVkIGludCBsZW5ndGgpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpZGFsX25yX3dvcmRzKHZvaWQgKnZhZGRyLCB1bnNpZ25lZCBpbnQgbGVuZ3RoKQogewotI2lmZGVmIF9fczM5MHhfXwotCWlmIChpZGFsX2lzX25lZWRlZCh2YWRkciwgbGVuZ3RoKSkKLQkJcmV0dXJuICgoX19wYSh2YWRkcikgJiAoSURBX0JMT0NLX1NJWkUtMSkpICsgbGVuZ3RoICsgCi0JCQkoSURBX0JMT0NLX1NJWkUtMSkpID4+IElEQV9TSVpFX0xPRzsKLSNlbmRpZgotCXJldHVybiAwOworCXJldHVybiAoKF9fcGEodmFkZHIpICYgKElEQV9CTE9DS19TSVpFLTEpKSArIGxlbmd0aCArCisJCShJREFfQkxPQ0tfU0laRS0xKSkgPj4gSURBX1NJWkVfTE9HOwogfQogCiAvKgogICogQ3JlYXRlIHRoZSBsaXN0IG9mIGlkYWwgd29yZHMgZm9yIGFuIGFkZHJlc3MvbGVuZ3RoIHBhaXIuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyAqCi1pZGFsX2NyZWF0ZV93b3Jkcyh1bnNpZ25lZCBsb25nICppZGF3cywgdm9pZCAqdmFkZHIsIHVuc2lnbmVkIGludCBsZW5ndGgpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgKmlkYWxfY3JlYXRlX3dvcmRzKHVuc2lnbmVkIGxvbmcgKmlkYXdzLAorCQkJCQkgICAgICAgdm9pZCAqdmFkZHIsIHVuc2lnbmVkIGludCBsZW5ndGgpCiB7Ci0jaWZkZWYgX19zMzkweF9fCiAJdW5zaWduZWQgbG9uZyBwYWRkcjsKIAl1bnNpZ25lZCBpbnQgY2lkYXc7CiAKQEAgLTc0LDcgKzY4LDYgQEAKIAkJcGFkZHIgKz0gSURBX0JMT0NLX1NJWkU7CiAJCSppZGF3cysrID0gcGFkZHI7CiAJfQotI2VuZGlmCiAJcmV0dXJuIGlkYXdzOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtLmgKaW5kZXggZTFmNTQ2NS4uMGIyZjgyOSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bS5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm0uaApAQCAtNDIsNCArNDIsMTEgQEAKIAlfX3U2NCBmcHJzWzE2XTsKIH07CiAKK3N0cnVjdCBrdm1fZGVidWdfZXhpdF9hcmNoIHsKK307CisKKy8qIGZvciBLVk1fU0VUX0dVRVNUX0RFQlVHICovCitzdHJ1Y3Qga3ZtX2d1ZXN0X2RlYnVnX2FyY2ggeworfTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCmluZGV4IDNjNTVlNDEuLmM2ZTY3NGYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCkBAIC0yMSw5ICsyMSw2IEBACiAvKiBtZW1vcnkgc2xvdHMgdGhhdCBkb2VzIG5vdCBleHBvc2VkIHRvIHVzZXJzcGFjZSAqLwogI2RlZmluZSBLVk1fUFJJVkFURV9NRU1fU0xPVFMgNAogCi1zdHJ1Y3Qga3ZtX2d1ZXN0X2RlYnVnIHsKLX07Ci0KIHN0cnVjdCBzY2FfZW50cnkgewogCWF0b21pY190IHNjbjsKIAlfX3U2NAlyZXNlcnZlZDsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9sb3djb3JlLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbG93Y29yZS5oCmluZGV4IGYzNzIwZGUuLmIzNDlmMWMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9sb3djb3JlLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2xvd2NvcmUuaApAQCAtMTEsMTI5ICsxMSwxMTggQEAKICNpZm5kZWYgX0FTTV9TMzkwX0xPV0NPUkVfSAogI2RlZmluZSBfQVNNX1MzOTBfTE9XQ09SRV9ICiAKLSNpZm5kZWYgX19zMzkweF9fCi0jZGVmaW5lIF9fTENfRVhUX09MRF9QU1cgICAgICAgICAgICAgICAgMHgwMTgKLSNkZWZpbmUgX19MQ19TVkNfT0xEX1BTVyAgICAgICAgICAgICAgICAweDAyMAotI2RlZmluZSBfX0xDX1BHTV9PTERfUFNXICAgICAgICAgICAgICAgIDB4MDI4Ci0jZGVmaW5lIF9fTENfTUNLX09MRF9QU1cgICAgICAgICAgICAgICAgMHgwMzAKLSNkZWZpbmUgX19MQ19JT19PTERfUFNXICAgICAgICAgICAgICAgICAweDAzOAotI2RlZmluZSBfX0xDX0VYVF9ORVdfUFNXICAgICAgICAgICAgICAgIDB4MDU4Ci0jZGVmaW5lIF9fTENfU1ZDX05FV19QU1cgICAgICAgICAgICAgICAgMHgwNjAKLSNkZWZpbmUgX19MQ19QR01fTkVXX1BTVyAgICAgICAgICAgICAgICAweDA2OAotI2RlZmluZSBfX0xDX01DS19ORVdfUFNXICAgICAgICAgICAgICAgIDB4MDcwCi0jZGVmaW5lIF9fTENfSU9fTkVXX1BTVyAgICAgICAgICAgICAgICAgMHgwNzgKLSNlbHNlIC8qICFfX3MzOTB4X18gKi8KLSNkZWZpbmUgX19MQ19FWFRfT0xEX1BTVyAgICAgICAgICAgICAgICAweDAxMzAKLSNkZWZpbmUgX19MQ19TVkNfT0xEX1BTVyAgICAgICAgICAgICAgICAweDAxNDAKLSNkZWZpbmUgX19MQ19QR01fT0xEX1BTVyAgICAgICAgICAgICAgICAweDAxNTAKLSNkZWZpbmUgX19MQ19NQ0tfT0xEX1BTVyAgICAgICAgICAgICAgICAweDAxNjAKLSNkZWZpbmUgX19MQ19JT19PTERfUFNXICAgICAgICAgICAgICAgICAweDAxNzAKLSNkZWZpbmUgX19MQ19FWFRfTkVXX1BTVyAgICAgICAgICAgICAgICAweDAxYjAKLSNkZWZpbmUgX19MQ19TVkNfTkVXX1BTVyAgICAgICAgICAgICAgICAweDAxYzAKLSNkZWZpbmUgX19MQ19QR01fTkVXX1BTVyAgICAgICAgICAgICAgICAweDAxZDAKLSNkZWZpbmUgX19MQ19NQ0tfTkVXX1BTVyAgICAgICAgICAgICAgICAweDAxZTAKLSNkZWZpbmUgX19MQ19JT19ORVdfUFNXICAgICAgICAgICAgICAgICAweDAxZjAKLSNlbmRpZiAvKiAhX19zMzkweF9fICovCisjZGVmaW5lIF9fTENfSVBMX1BBUk1CTE9DS19QVFIJCTB4MDAxNAorI2RlZmluZSBfX0xDX0VYVF9QQVJBTVMJCQkweDAwODAKKyNkZWZpbmUgX19MQ19DUFVfQUREUkVTUwkJMHgwMDg0CisjZGVmaW5lIF9fTENfRVhUX0lOVF9DT0RFCQkweDAwODYKIAotI2RlZmluZSBfX0xDX0lQTF9QQVJNQkxPQ0tfUFRSCQkweDAxNAotI2RlZmluZSBfX0xDX0VYVF9QQVJBTVMgICAgICAgICAgICAgICAgIDB4MDgwCi0jZGVmaW5lIF9fTENfQ1BVX0FERFJFU1MgICAgICAgICAgICAgICAgMHgwODQKLSNkZWZpbmUgX19MQ19FWFRfSU5UX0NPREUgICAgICAgICAgICAgICAweDA4NgorI2RlZmluZSBfX0xDX1NWQ19JTEMJCQkweDAwODgKKyNkZWZpbmUgX19MQ19TVkNfSU5UX0NPREUJCTB4MDA4YQorI2RlZmluZSBfX0xDX1BHTV9JTEMJCQkweDAwOGMKKyNkZWZpbmUgX19MQ19QR01fSU5UX0NPREUJCTB4MDA4ZQogCi0jZGVmaW5lIF9fTENfU1ZDX0lMQyAgICAgICAgICAgICAgICAgICAgMHgwODgKLSNkZWZpbmUgX19MQ19TVkNfSU5UX0NPREUgICAgICAgICAgICAgICAweDA4QQotI2RlZmluZSBfX0xDX1BHTV9JTEMgICAgICAgICAgICAgICAgICAgIDB4MDhDCi0jZGVmaW5lIF9fTENfUEdNX0lOVF9DT0RFICAgICAgICAgICAgICAgMHgwOEUKKyNkZWZpbmUgX19MQ19QRVJfQVRNSUQJCQkweDAwOTYKKyNkZWZpbmUgX19MQ19QRVJfQUREUkVTUwkJMHgwMDk4CisjZGVmaW5lIF9fTENfUEVSX0FDQ0VTU19JRAkJMHgwMGExCisjZGVmaW5lIF9fTENfQVJfTU9ERV9JRAkJCTB4MDBhMwogCi0jZGVmaW5lIF9fTENfUEVSX0FUTUlECQkJMHgwOTYKLSNkZWZpbmUgX19MQ19QRVJfQUREUkVTUwkJMHgwOTgKLSNkZWZpbmUgX19MQ19QRVJfQUNDRVNTX0lECQkweDBBMQotI2RlZmluZSBfX0xDX0FSX01PREVfSUQJCQkweDBBMworI2RlZmluZSBfX0xDX1NVQkNIQU5ORUxfSUQJCTB4MDBiOAorI2RlZmluZSBfX0xDX1NVQkNIQU5ORUxfTlIJCTB4MDBiYQorI2RlZmluZSBfX0xDX0lPX0lOVF9QQVJNCQkweDAwYmMKKyNkZWZpbmUgX19MQ19JT19JTlRfV09SRAkJMHgwMGMwCisjZGVmaW5lIF9fTENfTUNDS19DT0RFCQkJMHgwMGU4CiAKLSNkZWZpbmUgX19MQ19TVUJDSEFOTkVMX0lEICAgICAgICAgICAgICAweDBCOAotI2RlZmluZSBfX0xDX1NVQkNIQU5ORUxfTlIgICAgICAgICAgICAgIDB4MEJBCi0jZGVmaW5lIF9fTENfSU9fSU5UX1BBUk0gICAgICAgICAgICAgICAgMHgwQkMKLSNkZWZpbmUgX19MQ19JT19JTlRfV09SRCAgICAgICAgICAgICAgICAweDBDMAotI2RlZmluZSBfX0xDX01DQ0tfQ09ERSAgICAgICAgICAgICAgICAgIDB4MEU4Ci0KLSNkZWZpbmUgX19MQ19MQVNUX0JSRUFLIAkJMHgxMTAKLQotI2RlZmluZSBfX0xDX1JFVFVSTl9QU1cgICAgICAgICAgICAgICAgIDB4MjAwCi0KLSNkZWZpbmUgX19MQ19TQVZFX0FSRUEgICAgICAgICAgICAgICAgICAweEMwMAorI2RlZmluZSBfX0xDX0RVTVBfUkVJUEwJCQkweDBlMDAKIAogI2lmbmRlZiBfX3MzOTB4X18KLSNkZWZpbmUgX19MQ19JUkIJCQkweDIwOAotI2RlZmluZSBfX0xDX1NZTkNfRU5URVJfVElNRVIJCTB4MjQ4Ci0jZGVmaW5lIF9fTENfQVNZTkNfRU5URVJfVElNRVIJCTB4MjUwCi0jZGVmaW5lIF9fTENfRVhJVF9USU1FUgkJCTB4MjU4Ci0jZGVmaW5lIF9fTENfVVNFUl9USU1FUgkJCTB4MjYwCi0jZGVmaW5lIF9fTENfU1lTVEVNX1RJTUVSCQkweDI2OAotI2RlZmluZSBfX0xDX1NURUFMX1RJTUVSCQkweDI3MAotI2RlZmluZSBfX0xDX0xBU1RfVVBEQVRFX1RJTUVSCQkweDI3OAotI2RlZmluZSBfX0xDX0xBU1RfVVBEQVRFX0NMT0NLCQkweDI4MAotI2RlZmluZSBfX0xDX1JFVFVSTl9NQ0NLX1BTVyAgICAgICAgICAgIDB4Mjg4Ci0jZGVmaW5lIF9fTENfS0VSTkVMX1NUQUNLICAgICAgICAgICAgICAgMHhDNDAKLSNkZWZpbmUgX19MQ19USFJFQURfSU5GTwkJMHhDNDQKLSNkZWZpbmUgX19MQ19BU1lOQ19TVEFDSyAgICAgICAgICAgICAgICAweEM0OAotI2RlZmluZSBfX0xDX0tFUk5FTF9BU0NFCQkweEM0QwotI2RlZmluZSBfX0xDX1VTRVJfQVNDRQkJCTB4QzUwCi0jZGVmaW5lIF9fTENfUEFOSUNfU1RBQ0sgICAgICAgICAgICAgICAgMHhDNTQKLSNkZWZpbmUgX19MQ19DUFVJRCAgICAgICAgICAgICAgICAgICAgICAweEM2MAotI2RlZmluZSBfX0xDX0NQVUFERFIgICAgICAgICAgICAgICAgICAgIDB4QzY4Ci0jZGVmaW5lIF9fTENfSVBMREVWICAgICAgICAgICAgICAgICAgICAgMHhDN0MKLSNkZWZpbmUgX19MQ19DVVJSRU5UCQkJMHhDOTAKLSNkZWZpbmUgX19MQ19JTlRfQ0xPQ0sJCQkweEM5OAorI2RlZmluZSBfX0xDX0VYVF9PTERfUFNXCQkweDAwMTgKKyNkZWZpbmUgX19MQ19TVkNfT0xEX1BTVwkJMHgwMDIwCisjZGVmaW5lIF9fTENfUEdNX09MRF9QU1cJCTB4MDAyOAorI2RlZmluZSBfX0xDX01DS19PTERfUFNXCQkweDAwMzAKKyNkZWZpbmUgX19MQ19JT19PTERfUFNXCQkJMHgwMDM4CisjZGVmaW5lIF9fTENfRVhUX05FV19QU1cJCTB4MDA1OAorI2RlZmluZSBfX0xDX1NWQ19ORVdfUFNXCQkweDAwNjAKKyNkZWZpbmUgX19MQ19QR01fTkVXX1BTVwkJMHgwMDY4CisjZGVmaW5lIF9fTENfTUNLX05FV19QU1cJCTB4MDA3MAorI2RlZmluZSBfX0xDX0lPX05FV19QU1cJCQkweDAwNzgKKyNkZWZpbmUgX19MQ19TQVZFX0FSRUEJCQkweDAyMDAKKyNkZWZpbmUgX19MQ19SRVRVUk5fUFNXCQkJMHgwMjQwCisjZGVmaW5lIF9fTENfUkVUVVJOX01DQ0tfUFNXCQkweDAyNDgKKyNkZWZpbmUgX19MQ19TWU5DX0VOVEVSX1RJTUVSCQkweDAyNTAKKyNkZWZpbmUgX19MQ19BU1lOQ19FTlRFUl9USU1FUgkJMHgwMjU4CisjZGVmaW5lIF9fTENfRVhJVF9USU1FUgkJCTB4MDI2MAorI2RlZmluZSBfX0xDX1VTRVJfVElNRVIJCQkweDAyNjgKKyNkZWZpbmUgX19MQ19TWVNURU1fVElNRVIJCTB4MDI3MAorI2RlZmluZSBfX0xDX1NURUFMX1RJTUVSCQkweDAyNzgKKyNkZWZpbmUgX19MQ19MQVNUX1VQREFURV9USU1FUgkJMHgwMjgwCisjZGVmaW5lIF9fTENfTEFTVF9VUERBVEVfQ0xPQ0sJCTB4MDI4OAorI2RlZmluZSBfX0xDX0NVUlJFTlQJCQkweDAyOTAKKyNkZWZpbmUgX19MQ19USFJFQURfSU5GTwkJMHgwMjk0CisjZGVmaW5lIF9fTENfS0VSTkVMX1NUQUNLCQkweDAyOTgKKyNkZWZpbmUgX19MQ19BU1lOQ19TVEFDSwkJMHgwMjljCisjZGVmaW5lIF9fTENfUEFOSUNfU1RBQ0sJCTB4MDJhMAorI2RlZmluZSBfX0xDX0tFUk5FTF9BU0NFCQkweDAyYTQKKyNkZWZpbmUgX19MQ19VU0VSX0FTQ0UJCQkweDAyYTgKKyNkZWZpbmUgX19MQ19VU0VSX0VYRUNfQVNDRQkJMHgwMmFjCisjZGVmaW5lIF9fTENfQ1BVSUQJCQkweDAyYjAKKyNkZWZpbmUgX19MQ19JTlRfQ0xPQ0sJCQkweDAyYzgKKyNkZWZpbmUgX19MQ19JUkIJCQkweDAzMDAKKyNkZWZpbmUgX19MQ19QRkFVTFRfSU5UUEFSTQkJMHgwMDgwCisjZGVmaW5lIF9fTENfQ1BVX1RJTUVSX1NBVkVfQVJFQQkweDAwZDgKKyNkZWZpbmUgX19MQ19DTE9DS19DT01QX1NBVkVfQVJFQQkweDAwZTAKKyNkZWZpbmUgX19MQ19QU1dfU0FWRV9BUkVBCQkweDAxMDAKKyNkZWZpbmUgX19MQ19QUkVGSVhfU0FWRV9BUkVBCQkweDAxMDgKKyNkZWZpbmUgX19MQ19BUkVHU19TQVZFX0FSRUEJCTB4MDEyMAorI2RlZmluZSBfX0xDX0ZQUkVHU19TQVZFX0FSRUEJCTB4MDE2MAorI2RlZmluZSBfX0xDX0dQUkVHU19TQVZFX0FSRUEJCTB4MDE4MAorI2RlZmluZSBfX0xDX0NSRUdTX1NBVkVfQVJFQQkJMHgwMWMwCiAjZWxzZSAvKiBfX3MzOTB4X18gKi8KLSNkZWZpbmUgX19MQ19JUkIJCQkweDIxMAotI2RlZmluZSBfX0xDX1NZTkNfRU5URVJfVElNRVIJCTB4MjUwCi0jZGVmaW5lIF9fTENfQVNZTkNfRU5URVJfVElNRVIJCTB4MjU4Ci0jZGVmaW5lIF9fTENfRVhJVF9USU1FUgkJCTB4MjYwCi0jZGVmaW5lIF9fTENfVVNFUl9USU1FUgkJCTB4MjY4Ci0jZGVmaW5lIF9fTENfU1lTVEVNX1RJTUVSCQkweDI3MAotI2RlZmluZSBfX0xDX1NURUFMX1RJTUVSCQkweDI3OAotI2RlZmluZSBfX0xDX0xBU1RfVVBEQVRFX1RJTUVSCQkweDI4MAotI2RlZmluZSBfX0xDX0xBU1RfVVBEQVRFX0NMT0NLCQkweDI4OAotI2RlZmluZSBfX0xDX1JFVFVSTl9NQ0NLX1BTVyAgICAgICAgICAgIDB4MjkwCi0jZGVmaW5lIF9fTENfS0VSTkVMX1NUQUNLICAgICAgICAgICAgICAgMHhENDAKLSNkZWZpbmUgX19MQ19USFJFQURfSU5GTwkJMHhENDgKLSNkZWZpbmUgX19MQ19BU1lOQ19TVEFDSyAgICAgICAgICAgICAgICAweEQ1MAotI2RlZmluZSBfX0xDX0tFUk5FTF9BU0NFCQkweEQ1OAotI2RlZmluZSBfX0xDX1VTRVJfQVNDRQkJCTB4RDYwCi0jZGVmaW5lIF9fTENfUEFOSUNfU1RBQ0sgICAgICAgICAgICAgICAgMHhENjgKLSNkZWZpbmUgX19MQ19DUFVJRAkJCTB4RDgwCi0jZGVmaW5lIF9fTENfQ1BVQUREUgkJCTB4RDg4Ci0jZGVmaW5lIF9fTENfSVBMREVWICAgICAgICAgICAgICAgICAgICAgMHhEQjgKLSNkZWZpbmUgX19MQ19DVVJSRU5UCQkJMHhERDgKLSNkZWZpbmUgX19MQ19JTlRfQ0xPQ0sJCQkweERFOAotI2RlZmluZSBfX0xDX1ZEU09fUEVSX0NQVQkJMHhFMzgKLSNlbmRpZiAvKiBfX3MzOTB4X18gKi8KLQotI2RlZmluZSBfX0xDX1BBU1RFCQkJMHhFNDAKLQotI2RlZmluZSBfX0xDX1BBTklDX01BR0lDCQkweEUwMAotI2lmbmRlZiBfX3MzOTB4X18KLSNkZWZpbmUgX19MQ19QRkFVTFRfSU5UUEFSTSAgICAgICAgICAgICAweDA4MAotI2RlZmluZSBfX0xDX0NQVV9USU1FUl9TQVZFX0FSRUEgICAgICAgIDB4MEQ4Ci0jZGVmaW5lIF9fTENfQ0xPQ0tfQ09NUF9TQVZFX0FSRUEJMHgwRTAKLSNkZWZpbmUgX19MQ19QU1dfU0FWRV9BUkVBCQkweDEwMAotI2RlZmluZSBfX0xDX1BSRUZJWF9TQVZFX0FSRUEJCTB4MTA4Ci0jZGVmaW5lIF9fTENfQVJFR1NfU0FWRV9BUkVBICAgICAgICAgICAgMHgxMjAKLSNkZWZpbmUgX19MQ19GUFJFR1NfU0FWRV9BUkVBCQkweDE2MAotI2RlZmluZSBfX0xDX0dQUkVHU19TQVZFX0FSRUEgICAgICAgICAgIDB4MTgwCi0jZGVmaW5lIF9fTENfQ1JFR1NfU0FWRV9BUkVBICAgICAgICAgICAgMHgxQzAKLSNlbHNlIC8qIF9fczM5MHhfXyAqLwotI2RlZmluZSBfX0xDX1BGQVVMVF9JTlRQQVJNICAgICAgICAgICAgIDB4MTFCOAorI2RlZmluZSBfX0xDX0xBU1RfQlJFQUsJCQkweDAxMTAKKyNkZWZpbmUgX19MQ19FWFRfT0xEX1BTVwkJMHgwMTMwCisjZGVmaW5lIF9fTENfU1ZDX09MRF9QU1cJCTB4MDE0MAorI2RlZmluZSBfX0xDX1BHTV9PTERfUFNXCQkweDAxNTAKKyNkZWZpbmUgX19MQ19NQ0tfT0xEX1BTVwkJMHgwMTYwCisjZGVmaW5lIF9fTENfSU9fT0xEX1BTVwkJCTB4MDE3MAorI2RlZmluZSBfX0xDX0VYVF9ORVdfUFNXCQkweDAxYjAKKyNkZWZpbmUgX19MQ19TVkNfTkVXX1BTVwkJMHgwMWMwCisjZGVmaW5lIF9fTENfUEdNX05FV19QU1cJCTB4MDFkMAorI2RlZmluZSBfX0xDX01DS19ORVdfUFNXCQkweDAxZTAKKyNkZWZpbmUgX19MQ19JT19ORVdfUFNXCQkJMHgwMWYwCisjZGVmaW5lIF9fTENfU0FWRV9BUkVBCQkJMHgwMjAwCisjZGVmaW5lIF9fTENfUkVUVVJOX1BTVwkJCTB4MDI4MAorI2RlZmluZSBfX0xDX1JFVFVSTl9NQ0NLX1BTVwkJMHgwMjkwCisjZGVmaW5lIF9fTENfU1lOQ19FTlRFUl9USU1FUgkJMHgwMmEwCisjZGVmaW5lIF9fTENfQVNZTkNfRU5URVJfVElNRVIJCTB4MDJhOAorI2RlZmluZSBfX0xDX0VYSVRfVElNRVIJCQkweDAyYjAKKyNkZWZpbmUgX19MQ19VU0VSX1RJTUVSCQkJMHgwMmI4CisjZGVmaW5lIF9fTENfU1lTVEVNX1RJTUVSCQkweDAyYzAKKyNkZWZpbmUgX19MQ19TVEVBTF9USU1FUgkJMHgwMmM4CisjZGVmaW5lIF9fTENfTEFTVF9VUERBVEVfVElNRVIJCTB4MDJkMAorI2RlZmluZSBfX0xDX0xBU1RfVVBEQVRFX0NMT0NLCQkweDAyZDgKKyNkZWZpbmUgX19MQ19DVVJSRU5UCQkJMHgwMmUwCisjZGVmaW5lIF9fTENfVEhSRUFEX0lORk8JCTB4MDJlOAorI2RlZmluZSBfX0xDX0tFUk5FTF9TVEFDSwkJMHgwMmYwCisjZGVmaW5lIF9fTENfQVNZTkNfU1RBQ0sJCTB4MDJmOAorI2RlZmluZSBfX0xDX1BBTklDX1NUQUNLCQkweDAzMDAKKyNkZWZpbmUgX19MQ19LRVJORUxfQVNDRQkJMHgwMzA4CisjZGVmaW5lIF9fTENfVVNFUl9BU0NFCQkJMHgwMzEwCisjZGVmaW5lIF9fTENfVVNFUl9FWEVDX0FTQ0UJCTB4MDMxOAorI2RlZmluZSBfX0xDX0NQVUlECQkJMHgwMzIwCisjZGVmaW5lIF9fTENfSU5UX0NMT0NLCQkJMHgwMzQwCisjZGVmaW5lIF9fTENfVkRTT19QRVJfQ1BVCQkweDAzNTAKKyNkZWZpbmUgX19MQ19JUkIJCQkweDAzODAKKyNkZWZpbmUgX19MQ19QQVNURQkJCTB4MDNjMAorI2RlZmluZSBfX0xDX1BGQVVMVF9JTlRQQVJNCQkweDExYjgKICNkZWZpbmUgX19MQ19GUFJFR1NfU0FWRV9BUkVBCQkweDEyMDAKLSNkZWZpbmUgX19MQ19HUFJFR1NfU0FWRV9BUkVBICAgICAgICAgICAweDEyODAKKyNkZWZpbmUgX19MQ19HUFJFR1NfU0FWRV9BUkVBCQkweDEyODAKICNkZWZpbmUgX19MQ19QU1dfU0FWRV9BUkVBCQkweDEzMDAKICNkZWZpbmUgX19MQ19QUkVGSVhfU0FWRV9BUkVBCQkweDEzMTgKLSNkZWZpbmUgX19MQ19GUF9DUkVHX1NBVkVfQVJFQQkJMHgxMzFDCisjZGVmaW5lIF9fTENfRlBfQ1JFR19TQVZFX0FSRUEJCTB4MTMxYwogI2RlZmluZSBfX0xDX1RPRFJFR19TQVZFX0FSRUEJCTB4MTMyNAotI2RlZmluZSBfX0xDX0NQVV9USU1FUl9TQVZFX0FSRUEgICAgICAgIDB4MTMyOAorI2RlZmluZSBfX0xDX0NQVV9USU1FUl9TQVZFX0FSRUEJMHgxMzI4CiAjZGVmaW5lIF9fTENfQ0xPQ0tfQ09NUF9TQVZFX0FSRUEJMHgxMzMxCi0jZGVmaW5lIF9fTENfQVJFR1NfU0FWRV9BUkVBICAgICAgICAgICAgMHgxMzQwCi0jZGVmaW5lIF9fTENfQ1JFR1NfU0FWRV9BUkVBICAgICAgICAgICAgMHgxMzgwCisjZGVmaW5lIF9fTENfQVJFR1NfU0FWRV9BUkVBCQkweDEzNDAKKyNkZWZpbmUgX19MQ19DUkVHU19TQVZFX0FSRUEJCTB4MTM4MAogI2VuZGlmIC8qIF9fczM5MHhfXyAqLwogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwpAQCAtMTk4LDIyMiArMTg3LDI0MCBAQAogc3RydWN0IF9sb3djb3JlCiB7CiAjaWZuZGVmIF9fczM5MHhfXwotICAgICAgICAvKiBwcmVmaXggYXJlYTogZGVmaW5lZCBieSBhcmNoaXRlY3R1cmUgKi8KLQlwc3dfdCAgICAgICAgcmVzdGFydF9wc3c7ICAgICAgICAgICAgICAvKiAweDAwMCAqLwotCV9fdTMyICAgICAgICBjY3cyWzRdOyAgICAgICAgICAgICAgICAgIC8qIDB4MDA4ICovCi0JcHN3X3QgICAgICAgIGV4dGVybmFsX29sZF9wc3c7ICAgICAgICAgLyogMHgwMTggKi8KLQlwc3dfdCAgICAgICAgc3ZjX29sZF9wc3c7ICAgICAgICAgICAgICAvKiAweDAyMCAqLwotCXBzd190ICAgICAgICBwcm9ncmFtX29sZF9wc3c7ICAgICAgICAgIC8qIDB4MDI4ICovCi0JcHN3X3QgICAgICAgIG1jY2tfb2xkX3BzdzsgICAgICAgICAgICAgLyogMHgwMzAgKi8KLQlwc3dfdCAgICAgICAgaW9fb2xkX3BzdzsgICAgICAgICAgICAgICAvKiAweDAzOCAqLwotCV9fdTggICAgICAgICBwYWQxWzB4NTgtMHg0MF07ICAgICAgICAgIC8qIDB4MDQwICovCi0JcHN3X3QgICAgICAgIGV4dGVybmFsX25ld19wc3c7ICAgICAgICAgLyogMHgwNTggKi8KLQlwc3dfdCAgICAgICAgc3ZjX25ld19wc3c7ICAgICAgICAgICAgICAvKiAweDA2MCAqLwotCXBzd190ICAgICAgICBwcm9ncmFtX25ld19wc3c7ICAgICAgICAgIC8qIDB4MDY4ICovCi0JcHN3X3QgICAgICAgIG1jY2tfbmV3X3BzdzsgICAgICAgICAgICAgLyogMHgwNzAgKi8KLQlwc3dfdCAgICAgICAgaW9fbmV3X3BzdzsgICAgICAgICAgICAgICAvKiAweDA3OCAqLwotCV9fdTMyICAgICAgICBleHRfcGFyYW1zOyAgICAgICAgICAgICAgIC8qIDB4MDgwICovCi0JX191MTYgICAgICAgIGNwdV9hZGRyOyAgICAgICAgICAgICAgICAgLyogMHgwODQgKi8KLQlfX3UxNiAgICAgICAgZXh0X2ludF9jb2RlOyAgICAgICAgICAgICAvKiAweDA4NiAqLwotICAgICAgICBfX3UxNiAgICAgICAgc3ZjX2lsYzsgICAgICAgICAgICAgICAgICAvKiAweDA4OCAqLwotICAgICAgICBfX3UxNiAgICAgICAgc3ZjX2NvZGU7ICAgICAgICAgICAgICAgICAvKiAweDA4YSAqLwotICAgICAgICBfX3UxNiAgICAgICAgcGdtX2lsYzsgICAgICAgICAgICAgICAgICAvKiAweDA4YyAqLwotICAgICAgICBfX3UxNiAgICAgICAgcGdtX2NvZGU7ICAgICAgICAgICAgICAgICAvKiAweDA4ZSAqLwotCV9fdTMyICAgICAgICB0cmFuc19leGNfY29kZTsgICAgICAgICAgIC8qIDB4MDkwICovCi0JX191MTYgICAgICAgIG1vbl9jbGFzc19udW07ICAgICAgICAgICAgLyogMHgwOTQgKi8KLQlfX3UxNiAgICAgICAgcGVyX3BlcmNfYXRtaWQ7ICAgICAgICAgICAvKiAweDA5NiAqLwotCV9fdTMyICAgICAgICBwZXJfYWRkcmVzczsgICAgICAgICAgICAgIC8qIDB4MDk4ICovCi0JX191MzIgICAgICAgIG1vbml0b3JfY29kZTsgICAgICAgICAgICAgLyogMHgwOWMgKi8KLQlfX3U4ICAgICAgICAgZXhjX2FjY2Vzc19pZDsgICAgICAgICAgICAvKiAweDBhMCAqLwotCV9fdTggICAgICAgICBwZXJfYWNjZXNzX2lkOyAgICAgICAgICAgIC8qIDB4MGExICovCi0JX191OCAgICAgICAgIHBhZDJbMHhCOC0weEEyXTsgICAgICAgICAgLyogMHgwYTIgKi8KLQlfX3UxNiAgICAgICAgc3ViY2hhbm5lbF9pZDsgICAgICAgICAgICAvKiAweDBiOCAqLwotCV9fdTE2ICAgICAgICBzdWJjaGFubmVsX25yOyAgICAgICAgICAgIC8qIDB4MGJhICovCi0JX191MzIgICAgICAgIGlvX2ludF9wYXJtOyAgICAgICAgICAgICAgLyogMHgwYmMgKi8KLQlfX3UzMiAgICAgICAgaW9faW50X3dvcmQ7ICAgICAgICAgICAgICAvKiAweDBjMCAqLwotCV9fdTgJICAgICBwYWQzWzB4YzgtMHhjNF07CSAgICAgICAvKiAweDBjNCAqLwotCV9fdTMyCSAgICAgc3RmbF9mYWNfbGlzdDsJICAgICAgIC8qIDB4MGM4ICovCi0JX191OAkgICAgIHBhZDRbMHhkNC0weGNjXTsJICAgICAgIC8qIDB4MGNjICovCi0JX191MzIgICAgICAgIGV4dGVuZGVkX3NhdmVfYXJlYV9hZGRyOyAgLyogMHgwZDQgKi8KLQlfX3UzMiAgICAgICAgY3B1X3RpbWVyX3NhdmVfYXJlYVsyXTsgICAvKiAweDBkOCAqLwotCV9fdTMyICAgICAgICBjbG9ja19jb21wX3NhdmVfYXJlYVsyXTsgIC8qIDB4MGUwICovCi0JX191MzIgICAgICAgIG1jY2tfaW50ZXJydXB0aW9uX2NvZGVbMl07IC8qIDB4MGU4ICovCi0JX191OAkgICAgIHBhZDVbMHhmNC0weGYwXTsJICAgICAgIC8qIDB4MGYwICovCi0JX191MzIgICAgICAgIGV4dGVybmFsX2RhbWFnZV9jb2RlOyAgICAgLyogMHgwZjQgKi8KLQlfX3UzMiAgICAgICAgZmFpbGluZ19zdG9yYWdlX2FkZHJlc3M7ICAvKiAweDBmOCAqLwotCV9fdTgJICAgICBwYWQ2WzB4MTAwLTB4ZmNdOwkgICAgICAgLyogMHgwZmMgKi8KLQlfX3UzMiAgICAgICAgc3Rfc3RhdHVzX2ZpeGVkX2xvZ291dFs0XTsvKiAweDEwMCAqLwotCV9fdTgJICAgICBwYWQ3WzB4MTIwLTB4MTEwXTsgICAgICAgIC8qIDB4MTEwICovCi0JX191MzIgICAgICAgIGFjY2Vzc19yZWdzX3NhdmVfYXJlYVsxNl07LyogMHgxMjAgKi8KLQlfX3UzMiAgICAgICAgZmxvYXRpbmdfcHRfc2F2ZV9hcmVhWzhdOyAvKiAweDE2MCAqLwotCV9fdTMyICAgICAgICBncHJlZ3Nfc2F2ZV9hcmVhWzE2XTsgICAgIC8qIDB4MTgwICovCi0JX191MzIgICAgICAgIGNyZWdzX3NhdmVfYXJlYVsxNl07ICAgICAgLyogMHgxYzAgKi8JCisJLyogMHgwMDAwIC0gMHgwMWZmOiBkZWZpbmVkIGJ5IGFyY2hpdGVjdHVyZSAqLworCXBzd190CXJlc3RhcnRfcHN3OwkJCS8qIDB4MDAwMCAqLworCV9fdTMyCWNjdzJbNF07CQkJLyogMHgwMDA4ICovCisJcHN3X3QJZXh0ZXJuYWxfb2xkX3BzdzsJCS8qIDB4MDAxOCAqLworCXBzd190CXN2Y19vbGRfcHN3OwkJCS8qIDB4MDAyMCAqLworCXBzd190CXByb2dyYW1fb2xkX3BzdzsJCS8qIDB4MDAyOCAqLworCXBzd190CW1jY2tfb2xkX3BzdzsJCQkvKiAweDAwMzAgKi8KKwlwc3dfdAlpb19vbGRfcHN3OwkJCS8qIDB4MDAzOCAqLworCV9fdTgJcGFkXzB4MDA0MFsweDAwNTgtMHgwMDQwXTsJLyogMHgwMDQwICovCisJcHN3X3QJZXh0ZXJuYWxfbmV3X3BzdzsJCS8qIDB4MDA1OCAqLworCXBzd190CXN2Y19uZXdfcHN3OwkJCS8qIDB4MDA2MCAqLworCXBzd190CXByb2dyYW1fbmV3X3BzdzsJCS8qIDB4MDA2OCAqLworCXBzd190CW1jY2tfbmV3X3BzdzsJCQkvKiAweDAwNzAgKi8KKwlwc3dfdAlpb19uZXdfcHN3OwkJCS8qIDB4MDA3OCAqLworCV9fdTMyCWV4dF9wYXJhbXM7CQkJLyogMHgwMDgwICovCisJX191MTYJY3B1X2FkZHI7CQkJLyogMHgwMDg0ICovCisJX191MTYJZXh0X2ludF9jb2RlOwkJCS8qIDB4MDA4NiAqLworCV9fdTE2CXN2Y19pbGM7CQkJLyogMHgwMDg4ICovCisJX191MTYJc3ZjX2NvZGU7CQkJLyogMHgwMDhhICovCisJX191MTYJcGdtX2lsYzsJCQkvKiAweDAwOGMgKi8KKwlfX3UxNglwZ21fY29kZTsJCQkvKiAweDAwOGUgKi8KKwlfX3UzMgl0cmFuc19leGNfY29kZTsJCQkvKiAweDAwOTAgKi8KKwlfX3UxNgltb25fY2xhc3NfbnVtOwkJCS8qIDB4MDA5NCAqLworCV9fdTE2CXBlcl9wZXJjX2F0bWlkOwkJCS8qIDB4MDA5NiAqLworCV9fdTMyCXBlcl9hZGRyZXNzOwkJCS8qIDB4MDA5OCAqLworCV9fdTMyCW1vbml0b3JfY29kZTsJCQkvKiAweDAwOWMgKi8KKwlfX3U4CWV4Y19hY2Nlc3NfaWQ7CQkJLyogMHgwMGEwICovCisJX191OAlwZXJfYWNjZXNzX2lkOwkJCS8qIDB4MDBhMSAqLworCV9fdTgJcGFkXzB4MDBhMlsweDAwYjgtMHgwMGEyXTsJLyogMHgwMGEyICovCisJX191MTYJc3ViY2hhbm5lbF9pZDsJCQkvKiAweDAwYjggKi8KKwlfX3UxNglzdWJjaGFubmVsX25yOwkJCS8qIDB4MDBiYSAqLworCV9fdTMyCWlvX2ludF9wYXJtOwkJCS8qIDB4MDBiYyAqLworCV9fdTMyCWlvX2ludF93b3JkOwkJCS8qIDB4MDBjMCAqLworCV9fdTgJcGFkXzB4MDBjNFsweDAwYzgtMHgwMGM0XTsJLyogMHgwMGM0ICovCisJX191MzIJc3RmbF9mYWNfbGlzdDsJCQkvKiAweDAwYzggKi8KKwlfX3U4CXBhZF8weDAwY2NbMHgwMGQ0LTB4MDBjY107CS8qIDB4MDBjYyAqLworCV9fdTMyCWV4dGVuZGVkX3NhdmVfYXJlYV9hZGRyOwkvKiAweDAwZDQgKi8KKwlfX3UzMgljcHVfdGltZXJfc2F2ZV9hcmVhWzJdOwkJLyogMHgwMGQ4ICovCisJX191MzIJY2xvY2tfY29tcF9zYXZlX2FyZWFbMl07CS8qIDB4MDBlMCAqLworCV9fdTMyCW1jY2tfaW50ZXJydXB0aW9uX2NvZGVbMl07CS8qIDB4MDBlOCAqLworCV9fdTgJcGFkXzB4MDBmMFsweDAwZjQtMHgwMGYwXTsJLyogMHgwMGYwICovCisJX191MzIJZXh0ZXJuYWxfZGFtYWdlX2NvZGU7CQkvKiAweDAwZjQgKi8KKwlfX3UzMglmYWlsaW5nX3N0b3JhZ2VfYWRkcmVzczsJLyogMHgwMGY4ICovCisJX191OAlwYWRfMHgwMGZjWzB4MDEwMC0weDAwZmNdOwkvKiAweDAwZmMgKi8KKwlfX3UzMglzdF9zdGF0dXNfZml4ZWRfbG9nb3V0WzRdOwkvKiAweDAxMDAgKi8KKwlfX3U4CXBhZF8weDAxMTBbMHgwMTIwLTB4MDExMF07CS8qIDB4MDExMCAqLwogCi0gICAgICAgIHBzd190ICAgICAgICByZXR1cm5fcHN3OyAgICAgICAgICAgICAgIC8qIDB4MjAwICovCi0JX191OAkgICAgIGlyYls2NF07CQkgICAgICAgLyogMHgyMDggKi8KLQlfX3U2NCAgICAgICAgc3luY19lbnRlcl90aW1lcjsgICAgICAgICAvKiAweDI0OCAqLwotCV9fdTY0ICAgICAgICBhc3luY19lbnRlcl90aW1lcjsgICAgICAgIC8qIDB4MjUwICovCi0JX191NjQgICAgICAgIGV4aXRfdGltZXI7ICAgICAgICAgICAgICAgLyogMHgyNTggKi8KLQlfX3U2NAkgICAgIHVzZXJfdGltZXI7CSAgICAgICAvKiAweDI2MCAqLwotCV9fdTY0CSAgICAgc3lzdGVtX3RpbWVyOwkgICAgICAgLyogMHgyNjggKi8KLQlfX3U2NAkgICAgIHN0ZWFsX3RpbWVyOwkgICAgICAgLyogMHgyNzAgKi8KLQlfX3U2NAkgICAgIGxhc3RfdXBkYXRlX3RpbWVyOyAgICAgICAgLyogMHgyNzggKi8KLQlfX3U2NAkgICAgIGxhc3RfdXBkYXRlX2Nsb2NrOyAgICAgICAgLyogMHgyODAgKi8KLSAgICAgICAgcHN3X3QgICAgICAgIHJldHVybl9tY2NrX3BzdzsgICAgICAgICAgLyogMHgyODggKi8KLQlfX3U4ICAgICAgICAgcGFkOFsweGMwMC0weDI5MF07ICAgICAgICAvKiAweDI5MCAqLworCS8qIENQVSByZWdpc3RlciBzYXZlIGFyZWE6IGRlZmluZWQgYnkgYXJjaGl0ZWN0dXJlICovCisJX191MzIJYWNjZXNzX3JlZ3Nfc2F2ZV9hcmVhWzE2XTsJLyogMHgwMTIwICovCisJX191MzIJZmxvYXRpbmdfcHRfc2F2ZV9hcmVhWzhdOwkvKiAweDAxNjAgKi8KKwlfX3UzMglncHJlZ3Nfc2F2ZV9hcmVhWzE2XTsJCS8qIDB4MDE4MCAqLworCV9fdTMyCWNyZWdzX3NhdmVfYXJlYVsxNl07CQkvKiAweDAxYzAgKi8KIAotICAgICAgICAvKiBTeXN0ZW0gaW5mbyBhcmVhICovCi0JX191MzIgICAgICAgIHNhdmVfYXJlYVsxNl07ICAgICAgICAgICAgLyogMHhjMDAgKi8KLQlfX3UzMiAgICAgICAga2VybmVsX3N0YWNrOyAgICAgICAgICAgICAvKiAweGM0MCAqLwotCV9fdTMyICAgICAgICB0aHJlYWRfaW5mbzsgICAgICAgICAgICAgIC8qIDB4YzQ0ICovCi0JX191MzIgICAgICAgIGFzeW5jX3N0YWNrOyAgICAgICAgICAgICAgLyogMHhjNDggKi8KLQlfX3UzMiAgICAgICAga2VybmVsX2FzY2U7ICAgICAgICAgICAgICAvKiAweGM0YyAqLwotCV9fdTMyICAgICAgICB1c2VyX2FzY2U7ICAgICAgICAgICAgICAgIC8qIDB4YzUwICovCi0JX191MzIgICAgICAgIHBhbmljX3N0YWNrOyAgICAgICAgICAgICAgLyogMHhjNTQgKi8KLQlfX3UzMgkgICAgIHVzZXJfZXhlY19hc2NlOwkgICAgICAgLyogMHhjNTggKi8KLQlfX3U4CSAgICAgcGFkMTBbMHhjNjAtMHhjNWNdOyAgICAgICAvKiAweGM1YyAqLwotCS8qIGVudHJ5LlMgc2Vuc2l0aXZlIGFyZWEgc3RhcnQgKi8KLQlzdHJ1Y3QgICAgICAgY3B1aW5mb19TMzkwIGNwdV9kYXRhOyAgICAvKiAweGM2MCAqLwotCV9fdTMyICAgICAgICBpcGxfZGV2aWNlOyAgICAgICAgICAgICAgIC8qIDB4YzdjICovCi0JLyogZW50cnkuUyBzZW5zaXRpdmUgYXJlYSBlbmQgKi8KKwkvKiBSZXR1cm4gcHN3cy4gKi8KKwlfX3UzMglzYXZlX2FyZWFbMTZdOwkJCS8qIDB4MDIwMCAqLworCXBzd190CXJldHVybl9wc3c7CQkJLyogMHgwMjQwICovCisJcHN3X3QJcmV0dXJuX21jY2tfcHN3OwkJLyogMHgwMjQ4ICovCiAKLSAgICAgICAgLyogU01QIGluZm8gYXJlYTogZGVmaW5lZCBieSBESkIgKi8KLQlfX3U2NAkgICAgIGNsb2NrX2NvbXBhcmF0b3I7CSAgICAgICAvKiAweGM4MCAqLwotCV9fdTMyICAgICAgICBleHRfY2FsbF9mYXN0OyAgICAgICAgICAgIC8qIDB4Yzg4ICovCi0JX191MzIgICAgICAgIHBlcmNwdV9vZmZzZXQ7ICAgICAgICAgICAgLyogMHhjOGMgKi8KLQlfX3UzMiAgICAgICAgY3VycmVudF90YXNrOwkgICAgICAgLyogMHhjOTAgKi8KLQlfX3UzMiAgICAgICAgc29mdGlycV9wZW5kaW5nOwkgICAgICAgLyogMHhjOTQgKi8KLQlfX3U2NCAgICAgICAgaW50X2Nsb2NrOyAgICAgICAgICAgICAgICAvKiAweGM5OCAqLwotICAgICAgICBfX3U4ICAgICAgICAgcGFkMTFbMHhlMDAtMHhjYTBdOyAgICAgICAvKiAweGNhMCAqLworCS8qIENQVSB0aW1lIGFjY291bnRpbmcgdmFsdWVzICovCisJX191NjQJc3luY19lbnRlcl90aW1lcjsJCS8qIDB4MDI1MCAqLworCV9fdTY0CWFzeW5jX2VudGVyX3RpbWVyOwkJLyogMHgwMjU4ICovCisJX191NjQJZXhpdF90aW1lcjsJCQkvKiAweDAyNjAgKi8KKwlfX3U2NAl1c2VyX3RpbWVyOwkJCS8qIDB4MDI2OCAqLworCV9fdTY0CXN5c3RlbV90aW1lcjsJCQkvKiAweDAyNzAgKi8KKwlfX3U2NAlzdGVhbF90aW1lcjsJCQkvKiAweDAyNzggKi8KKwlfX3U2NAlsYXN0X3VwZGF0ZV90aW1lcjsJCS8qIDB4MDI4MCAqLworCV9fdTY0CWxhc3RfdXBkYXRlX2Nsb2NrOwkJLyogMHgwMjg4ICovCiAKLSAgICAgICAgLyogMHhlMDAgaXMgdXNlZCBhcyBpbmRpY2F0b3IgZm9yIGR1bXAgdG9vbHMgKi8KLSAgICAgICAgLyogd2hldGhlciB0aGUga2VybmVsIGRpZWQgd2l0aCBwYW5pYygpIG9yIG5vdCAqLwotICAgICAgICBfX3UzMiAgICAgICAgcGFuaWNfbWFnaWM7ICAgICAgICAgICAgICAvKiAweGUwMCAqLworCS8qIEN1cnJlbnQgcHJvY2Vzcy4gKi8KKwlfX3UzMgljdXJyZW50X3Rhc2s7CQkJLyogMHgwMjkwICovCisJX191MzIJdGhyZWFkX2luZm87CQkJLyogMHgwMjk0ICovCisJX191MzIJa2VybmVsX3N0YWNrOwkJCS8qIDB4MDI5OCAqLwogCi0gICAgICAgIC8qIEFsaWduIHRvIHRoZSB0b3AgMWsgb2YgcHJlZml4IGFyZWEgKi8KLQlfX3U4ICAgICAgICAgcGFkMTJbMHgxMDAwLTB4ZTA0XTsgICAgICAvKiAweGUwNCAqLworCS8qIEludGVycnVwdCBhbmQgcGFuaWMgc3RhY2suICovCisJX191MzIJYXN5bmNfc3RhY2s7CQkJLyogMHgwMjljICovCisJX191MzIJcGFuaWNfc3RhY2s7CQkJLyogMHgwMmEwICovCisKKwkvKiBBZGRyZXNzIHNwYWNlIHBvaW50ZXIuICovCisJX191MzIJa2VybmVsX2FzY2U7CQkJLyogMHgwMmE0ICovCisJX191MzIJdXNlcl9hc2NlOwkJCS8qIDB4MDJhOCAqLworCV9fdTMyCXVzZXJfZXhlY19hc2NlOwkJCS8qIDB4MDJhYyAqLworCisJLyogU01QIGluZm8gYXJlYSAqLworCWNwdWlkX3QJY3B1X2lkOwkJCQkvKiAweDAyYjAgKi8KKwlfX3UzMgljcHVfbnI7CQkJCS8qIDB4MDJiOCAqLworCV9fdTMyCXNvZnRpcnFfcGVuZGluZzsJCS8qIDB4MDJiYyAqLworCV9fdTMyCXBlcmNwdV9vZmZzZXQ7CQkJLyogMHgwMmMwICovCisJX191MzIJZXh0X2NhbGxfZmFzdDsJCQkvKiAweDAyYzQgKi8KKwlfX3U2NAlpbnRfY2xvY2s7CQkJLyogMHgwMmM4ICovCisJX191NjQJY2xvY2tfY29tcGFyYXRvcjsJCS8qIDB4MDJkMCAqLworCV9fdTgJcGFkXzB4MDJkOFsweDAzMDAtMHgwMmQ4XTsJLyogMHgwMmQ4ICovCisKKwkvKiBJbnRlcnJ1cHQgcmVzcG9uc2UgYmxvY2sgKi8KKwlfX3U4CWlyYls2NF07CQkJLyogMHgwMzAwICovCisKKwlfX3U4CXBhZF8weDA0MDBbMHgwZTAwLTB4MDQwMF07CS8qIDB4MDQwMCAqLworCisJLyoKKwkgKiAweGUwMCBjb250YWlucyB0aGUgYWRkcmVzcyBvZiB0aGUgSVBMIFBhcmFtZXRlciBJbmZvcm1hdGlvbgorCSAqIGJsb2NrLiBEdW1wIHRvb2xzIG5lZWQgSVBJQiBmb3IgSVBMIGFmdGVyIGR1bXAuCisJICogTm90ZTogZG8gbm90IGNoYW5nZSB0aGUgcG9zaXRpb24gb2YgYW55IGZpZWxkcyBpbiAweDBlMDAtMHgwZjAwCisJICovCisJX191MzIJaXBpYjsJCQkJLyogMHgwZTAwICovCisJX191MzIJaXBpYl9jaGVja3N1bTsJCQkvKiAweDBlMDQgKi8KKworCS8qIEFsaWduIHRvIHRoZSB0b3AgMWsgb2YgcHJlZml4IGFyZWEgKi8KKwlfX3U4CXBhZF8weDBlMDhbMHgxMDAwLTB4MGUwOF07CS8qIDB4MGUwOCAqLwogI2Vsc2UgLyogIV9fczM5MHhfXyAqLwotICAgICAgICAvKiBwcmVmaXggYXJlYTogZGVmaW5lZCBieSBhcmNoaXRlY3R1cmUgKi8KLQlfX3UzMiAgICAgICAgY2N3MVsyXTsgICAgICAgICAgICAgICAgICAvKiAweDAwMCAqLwotCV9fdTMyICAgICAgICBjY3cyWzRdOyAgICAgICAgICAgICAgICAgIC8qIDB4MDA4ICovCi0JX191OCAgICAgICAgIHBhZDFbMHg4MC0weDE4XTsgICAgICAgICAgLyogMHgwMTggKi8KLQlfX3UzMiAgICAgICAgZXh0X3BhcmFtczsgICAgICAgICAgICAgICAvKiAweDA4MCAqLwotCV9fdTE2ICAgICAgICBjcHVfYWRkcjsgICAgICAgICAgICAgICAgIC8qIDB4MDg0ICovCi0JX191MTYgICAgICAgIGV4dF9pbnRfY29kZTsgICAgICAgICAgICAgLyogMHgwODYgKi8KLSAgICAgICAgX191MTYgICAgICAgIHN2Y19pbGM7ICAgICAgICAgICAgICAgICAgLyogMHgwODggKi8KLSAgICAgICAgX191MTYgICAgICAgIHN2Y19jb2RlOyAgICAgICAgICAgICAgICAgLyogMHgwOGEgKi8KLSAgICAgICAgX191MTYgICAgICAgIHBnbV9pbGM7ICAgICAgICAgICAgICAgICAgLyogMHgwOGMgKi8KLSAgICAgICAgX191MTYgICAgICAgIHBnbV9jb2RlOyAgICAgICAgICAgICAgICAgLyogMHgwOGUgKi8KLQlfX3UzMiAgICAgICAgZGF0YV9leGNfY29kZTsgICAgICAgICAgICAvKiAweDA5MCAqLwotCV9fdTE2ICAgICAgICBtb25fY2xhc3NfbnVtOyAgICAgICAgICAgIC8qIDB4MDk0ICovCi0JX191MTYgICAgICAgIHBlcl9wZXJjX2F0bWlkOyAgICAgICAgICAgLyogMHgwOTYgKi8KLQlhZGRyX3QgICAgICAgcGVyX2FkZHJlc3M7ICAgICAgICAgICAgICAvKiAweDA5OCAqLwotCV9fdTggICAgICAgICBleGNfYWNjZXNzX2lkOyAgICAgICAgICAgIC8qIDB4MGEwICovCi0JX191OCAgICAgICAgIHBlcl9hY2Nlc3NfaWQ7ICAgICAgICAgICAgLyogMHgwYTEgKi8KLQlfX3U4ICAgICAgICAgb3BfYWNjZXNzX2lkOyAgICAgICAgICAgICAvKiAweDBhMiAqLwotCV9fdTggICAgICAgICBhcl9hY2Nlc3NfaWQ7ICAgICAgICAgICAgIC8qIDB4MGEzICovCi0JX191OCAgICAgICAgIHBhZDJbMHhBOC0weEE0XTsgICAgICAgICAgLyogMHgwYTQgKi8KLQlhZGRyX3QgICAgICAgdHJhbnNfZXhjX2NvZGU7ICAgICAgICAgICAvKiAweDBBMCAqLwotCWFkZHJfdCAgICAgICBtb25pdG9yX2NvZGU7ICAgICAgICAgICAgIC8qIDB4MDljICovCi0JX191MTYgICAgICAgIHN1YmNoYW5uZWxfaWQ7ICAgICAgICAgICAgLyogMHgwYjggKi8KLQlfX3UxNiAgICAgICAgc3ViY2hhbm5lbF9ucjsgICAgICAgICAgICAvKiAweDBiYSAqLwotCV9fdTMyICAgICAgICBpb19pbnRfcGFybTsgICAgICAgICAgICAgIC8qIDB4MGJjICovCi0JX191MzIgICAgICAgIGlvX2ludF93b3JkOyAgICAgICAgICAgICAgLyogMHgwYzAgKi8KLQlfX3U4ICAgICAgICAgcGFkM1sweGM4LTB4YzRdOyAgICAgICAgICAvKiAweDBjNCAqLwotCV9fdTMyICAgICAgICBzdGZsX2ZhY19saXN0OyAgICAgICAgICAgIC8qIDB4MGM4ICovCi0JX191OCAgICAgICAgIHBhZDRbMHhlOC0weGNjXTsgICAgICAgICAgLyogMHgwY2MgKi8KLQlfX3UzMiAgICAgICAgbWNja19pbnRlcnJ1cHRpb25fY29kZVsyXTsgLyogMHgwZTggKi8KLQlfX3U4ICAgICAgICAgcGFkNVsweGY0LTB4ZjBdOyAgICAgICAgICAvKiAweDBmMCAqLwotCV9fdTMyICAgICAgICBleHRlcm5hbF9kYW1hZ2VfY29kZTsgICAgIC8qIDB4MGY0ICovCi0JYWRkcl90ICAgICAgIGZhaWxpbmdfc3RvcmFnZV9hZGRyZXNzOyAgLyogMHgwZjggKi8KLQlfX3U4ICAgICAgICAgcGFkNlsweDEyMC0weDEwMF07ICAgICAgICAvKiAweDEwMCAqLwotCXBzd190ICAgICAgICByZXN0YXJ0X29sZF9wc3c7ICAgICAgICAgIC8qIDB4MTIwICovCi0JcHN3X3QgICAgICAgIGV4dGVybmFsX29sZF9wc3c7ICAgICAgICAgLyogMHgxMzAgKi8KLQlwc3dfdCAgICAgICAgc3ZjX29sZF9wc3c7ICAgICAgICAgICAgICAvKiAweDE0MCAqLwotCXBzd190ICAgICAgICBwcm9ncmFtX29sZF9wc3c7ICAgICAgICAgIC8qIDB4MTUwICovCi0JcHN3X3QgICAgICAgIG1jY2tfb2xkX3BzdzsgICAgICAgICAgICAgLyogMHgxNjAgKi8KLQlwc3dfdCAgICAgICAgaW9fb2xkX3BzdzsgICAgICAgICAgICAgICAvKiAweDE3MCAqLwotCV9fdTggICAgICAgICBwYWQ3WzB4MWEwLTB4MTgwXTsgICAgICAgIC8qIDB4MTgwICovCi0JcHN3X3QgICAgICAgIHJlc3RhcnRfcHN3OyAgICAgICAgICAgICAgLyogMHgxYTAgKi8KLQlwc3dfdCAgICAgICAgZXh0ZXJuYWxfbmV3X3BzdzsgICAgICAgICAvKiAweDFiMCAqLwotCXBzd190ICAgICAgICBzdmNfbmV3X3BzdzsgICAgICAgICAgICAgIC8qIDB4MWMwICovCi0JcHN3X3QgICAgICAgIHByb2dyYW1fbmV3X3BzdzsgICAgICAgICAgLyogMHgxZDAgKi8KLQlwc3dfdCAgICAgICAgbWNja19uZXdfcHN3OyAgICAgICAgICAgICAvKiAweDFlMCAqLwotCXBzd190ICAgICAgICBpb19uZXdfcHN3OyAgICAgICAgICAgICAgIC8qIDB4MWYwICovCi0gICAgICAgIHBzd190ICAgICAgICByZXR1cm5fcHN3OyAgICAgICAgICAgICAgIC8qIDB4MjAwICovCi0JX191OAkgICAgIGlyYls2NF07CQkgICAgICAgLyogMHgyMTAgKi8KLQlfX3U2NCAgICAgICAgc3luY19lbnRlcl90aW1lcjsgICAgICAgICAvKiAweDI1MCAqLwotCV9fdTY0ICAgICAgICBhc3luY19lbnRlcl90aW1lcjsgICAgICAgIC8qIDB4MjU4ICovCi0JX191NjQgICAgICAgIGV4aXRfdGltZXI7ICAgICAgICAgICAgICAgLyogMHgyNjAgKi8KLQlfX3U2NAkgICAgIHVzZXJfdGltZXI7CSAgICAgICAvKiAweDI2OCAqLwotCV9fdTY0CSAgICAgc3lzdGVtX3RpbWVyOwkgICAgICAgLyogMHgyNzAgKi8KLQlfX3U2NAkgICAgIHN0ZWFsX3RpbWVyOwkgICAgICAgLyogMHgyNzggKi8KLQlfX3U2NAkgICAgIGxhc3RfdXBkYXRlX3RpbWVyOyAgICAgICAgLyogMHgyODAgKi8KLQlfX3U2NAkgICAgIGxhc3RfdXBkYXRlX2Nsb2NrOyAgICAgICAgLyogMHgyODggKi8KLSAgICAgICAgcHN3X3QgICAgICAgIHJldHVybl9tY2NrX3BzdzsgICAgICAgICAgLyogMHgyOTAgKi8KLSAgICAgICAgX191OCAgICAgICAgIHBhZDhbMHhjMDAtMHgyYTBdOyAgICAgICAgLyogMHgyYTAgKi8KLSAgICAgICAgLyogU3lzdGVtIGluZm8gYXJlYSAqLwotCV9fdTY0ICAgICAgICBzYXZlX2FyZWFbMTZdOyAgICAgICAgICAgIC8qIDB4YzAwICovCi0gICAgICAgIF9fdTggICAgICAgICBwYWQ5WzB4ZDQwLTB4YzgwXTsgICAgICAgIC8qIDB4YzgwICovCi0gCV9fdTY0ICAgICAgICBrZXJuZWxfc3RhY2s7ICAgICAgICAgICAgIC8qIDB4ZDQwICovCi0JX191NjQgICAgICAgIHRocmVhZF9pbmZvOyAgICAgICAgICAgICAgLyogMHhkNDggKi8KLQlfX3U2NCAgICAgICAgYXN5bmNfc3RhY2s7ICAgICAgICAgICAgICAvKiAweGQ1MCAqLwotCV9fdTY0ICAgICAgICBrZXJuZWxfYXNjZTsgICAgICAgICAgICAgIC8qIDB4ZDU4ICovCi0JX191NjQgICAgICAgIHVzZXJfYXNjZTsgICAgICAgICAgICAgICAgLyogMHhkNjAgKi8KLQlfX3U2NCAgICAgICAgcGFuaWNfc3RhY2s7ICAgICAgICAgICAgICAvKiAweGQ2OCAqLwotCV9fdTY0CSAgICAgdXNlcl9leGVjX2FzY2U7CSAgICAgICAvKiAweGQ3MCAqLwotCV9fdTgJICAgICBwYWQxMFsweGQ4MC0weGQ3OF07ICAgICAgIC8qIDB4ZDc4ICovCi0JLyogZW50cnkuUyBzZW5zaXRpdmUgYXJlYSBzdGFydCAqLwotCXN0cnVjdCAgICAgICBjcHVpbmZvX1MzOTAgY3B1X2RhdGE7ICAgIC8qIDB4ZDgwICovCi0JX191MzIgICAgICAgIGlwbF9kZXZpY2U7ICAgICAgICAgICAgICAgLyogMHhkYjggKi8KLQlfX3UzMiAgICAgICAgcGFkMTE7ICAgICAgICAgICAgICAgICAgICAvKiAweGRiYyAqLwotCS8qIGVudHJ5LlMgc2Vuc2l0aXZlIGFyZWEgZW5kICovCisJLyogMHgwMDAwIC0gMHgwMWZmOiBkZWZpbmVkIGJ5IGFyY2hpdGVjdHVyZSAqLworCV9fdTMyCWNjdzFbMl07CQkJLyogMHgwMDAwICovCisJX191MzIJY2N3Mls0XTsJCQkvKiAweDAwMDggKi8KKwlfX3U4CXBhZF8weDAwMThbMHgwMDgwLTB4MDAxOF07CS8qIDB4MDAxOCAqLworCV9fdTMyCWV4dF9wYXJhbXM7CQkJLyogMHgwMDgwICovCisJX191MTYJY3B1X2FkZHI7CQkJLyogMHgwMDg0ICovCisJX191MTYJZXh0X2ludF9jb2RlOwkJCS8qIDB4MDA4NiAqLworCV9fdTE2CXN2Y19pbGM7CQkJLyogMHgwMDg4ICovCisJX191MTYJc3ZjX2NvZGU7CQkJLyogMHgwMDhhICovCisJX191MTYJcGdtX2lsYzsJCQkvKiAweDAwOGMgKi8KKwlfX3UxNglwZ21fY29kZTsJCQkvKiAweDAwOGUgKi8KKwlfX3UzMglkYXRhX2V4Y19jb2RlOwkJCS8qIDB4MDA5MCAqLworCV9fdTE2CW1vbl9jbGFzc19udW07CQkJLyogMHgwMDk0ICovCisJX191MTYJcGVyX3BlcmNfYXRtaWQ7CQkJLyogMHgwMDk2ICovCisJYWRkcl90CXBlcl9hZGRyZXNzOwkJCS8qIDB4MDA5OCAqLworCV9fdTgJZXhjX2FjY2Vzc19pZDsJCQkvKiAweDAwYTAgKi8KKwlfX3U4CXBlcl9hY2Nlc3NfaWQ7CQkJLyogMHgwMGExICovCisJX191OAlvcF9hY2Nlc3NfaWQ7CQkJLyogMHgwMGEyICovCisJX191OAlhcl9hY2Nlc3NfaWQ7CQkJLyogMHgwMGEzICovCisJX191OAlwYWRfMHgwMGE0WzB4MDBhOC0weDAwYTRdOwkvKiAweDAwYTQgKi8KKwlhZGRyX3QJdHJhbnNfZXhjX2NvZGU7CQkJLyogMHgwMGE4ICovCisJYWRkcl90CW1vbml0b3JfY29kZTsJCQkvKiAweDAwYjAgKi8KKwlfX3UxNglzdWJjaGFubmVsX2lkOwkJCS8qIDB4MDBiOCAqLworCV9fdTE2CXN1YmNoYW5uZWxfbnI7CQkJLyogMHgwMGJhICovCisJX191MzIJaW9faW50X3Bhcm07CQkJLyogMHgwMGJjICovCisJX191MzIJaW9faW50X3dvcmQ7CQkJLyogMHgwMGMwICovCisJX191OAlwYWRfMHgwMGM0WzB4MDBjOC0weDAwYzRdOwkvKiAweDAwYzQgKi8KKwlfX3UzMglzdGZsX2ZhY19saXN0OwkJCS8qIDB4MDBjOCAqLworCV9fdTgJcGFkXzB4MDBjY1sweDAwZTgtMHgwMGNjXTsJLyogMHgwMGNjICovCisJX191MzIJbWNja19pbnRlcnJ1cHRpb25fY29kZVsyXTsJLyogMHgwMGU4ICovCisJX191OAlwYWRfMHgwMGYwWzB4MDBmNC0weDAwZjBdOwkvKiAweDAwZjAgKi8KKwlfX3UzMglleHRlcm5hbF9kYW1hZ2VfY29kZTsJCS8qIDB4MDBmNCAqLworCWFkZHJfdAlmYWlsaW5nX3N0b3JhZ2VfYWRkcmVzczsJLyogMHgwMGY4ICovCisJX191OAlwYWRfMHgwMTAwWzB4MDEyMC0weDAxMDBdOwkvKiAweDAxMDAgKi8KKwlwc3dfdAlyZXN0YXJ0X29sZF9wc3c7CQkvKiAweDAxMjAgKi8KKwlwc3dfdAlleHRlcm5hbF9vbGRfcHN3OwkJLyogMHgwMTMwICovCisJcHN3X3QJc3ZjX29sZF9wc3c7CQkJLyogMHgwMTQwICovCisJcHN3X3QJcHJvZ3JhbV9vbGRfcHN3OwkJLyogMHgwMTUwICovCisJcHN3X3QJbWNja19vbGRfcHN3OwkJCS8qIDB4MDE2MCAqLworCXBzd190CWlvX29sZF9wc3c7CQkJLyogMHgwMTcwICovCisJX191OAlwYWRfMHgwMTgwWzB4MDFhMC0weDAxODBdOwkvKiAweDAxODAgKi8KKwlwc3dfdAlyZXN0YXJ0X3BzdzsJCQkvKiAweDAxYTAgKi8KKwlwc3dfdAlleHRlcm5hbF9uZXdfcHN3OwkJLyogMHgwMWIwICovCisJcHN3X3QJc3ZjX25ld19wc3c7CQkJLyogMHgwMWMwICovCisJcHN3X3QJcHJvZ3JhbV9uZXdfcHN3OwkJLyogMHgwMWQwICovCisJcHN3X3QJbWNja19uZXdfcHN3OwkJCS8qIDB4MDFlMCAqLworCXBzd190CWlvX25ld19wc3c7CQkJLyogMHgwMWYwICovCiAKLSAgICAgICAgLyogU01QIGluZm8gYXJlYTogZGVmaW5lZCBieSBESkIgKi8KLQlfX3U2NAkgICAgIGNsb2NrX2NvbXBhcmF0b3I7CSAgICAgICAvKiAweGRjMCAqLwotCV9fdTY0ICAgICAgICBleHRfY2FsbF9mYXN0OyAgICAgICAgICAgIC8qIDB4ZGM4ICovCi0JX191NjQgICAgICAgIHBlcmNwdV9vZmZzZXQ7ICAgICAgICAgICAgLyogMHhkZDAgKi8KLQlfX3U2NCAgICAgICAgY3VycmVudF90YXNrOwkgICAgICAgLyogMHhkZDggKi8KLQlfX3UzMgkgICAgIHNvZnRpcnFfcGVuZGluZzsJICAgICAgIC8qIDB4ZGUwICovCi0JX191MzIJICAgICBwYWRfMHgwZGU0OwkgICAgICAgLyogMHhkZTQgKi8KLQlfX3U2NCAgICAgICAgaW50X2Nsb2NrOyAgICAgICAgICAgICAgICAvKiAweGRlOCAqLwotICAgICAgICBfX3U4ICAgICAgICAgcGFkMTJbMHhlMDAtMHhkZjBdOyAgICAgICAvKiAweGRmMCAqLworCS8qIEVudHJ5L2V4aXQgc2F2ZSBhcmVhICYgcmV0dXJuIHBzd3MuICovCisJX191NjQJc2F2ZV9hcmVhWzE2XTsJCQkvKiAweDAyMDAgKi8KKwlwc3dfdAlyZXR1cm5fcHN3OwkJCS8qIDB4MDI4MCAqLworCXBzd190CXJldHVybl9tY2NrX3BzdzsJCS8qIDB4MDI5MCAqLwogCi0gICAgICAgIC8qIDB4ZTAwIGlzIHVzZWQgYXMgaW5kaWNhdG9yIGZvciBkdW1wIHRvb2xzICovCi0gICAgICAgIC8qIHdoZXRoZXIgdGhlIGtlcm5lbCBkaWVkIHdpdGggcGFuaWMoKSBvciBub3QgKi8KLSAgICAgICAgX191MzIgICAgICAgIHBhbmljX21hZ2ljOyAgICAgICAgICAgICAgLyogMHhlMDAgKi8KKwkvKiBDUFUgYWNjb3VudGluZyBhbmQgdGltaW5nIHZhbHVlcy4gKi8KKwlfX3U2NAlzeW5jX2VudGVyX3RpbWVyOwkJLyogMHgwMmEwICovCisJX191NjQJYXN5bmNfZW50ZXJfdGltZXI7CQkvKiAweDAyYTggKi8KKwlfX3U2NAlleGl0X3RpbWVyOwkJCS8qIDB4MDJiMCAqLworCV9fdTY0CXVzZXJfdGltZXI7CQkJLyogMHgwMmI4ICovCisJX191NjQJc3lzdGVtX3RpbWVyOwkJCS8qIDB4MDJjMCAqLworCV9fdTY0CXN0ZWFsX3RpbWVyOwkJCS8qIDB4MDJjOCAqLworCV9fdTY0CWxhc3RfdXBkYXRlX3RpbWVyOwkJLyogMHgwMmQwICovCisJX191NjQJbGFzdF91cGRhdGVfY2xvY2s7CQkvKiAweDAyZDggKi8KKworCS8qIEN1cnJlbnQgcHJvY2Vzcy4gKi8KKwlfX3U2NAljdXJyZW50X3Rhc2s7CQkJLyogMHgwMmUwICovCisJX191NjQJdGhyZWFkX2luZm87CQkJLyogMHgwMmU4ICovCisJX191NjQJa2VybmVsX3N0YWNrOwkJCS8qIDB4MDJmMCAqLworCisJLyogSW50ZXJydXB0IGFuZCBwYW5pYyBzdGFjay4gKi8KKwlfX3U2NAlhc3luY19zdGFjazsJCQkvKiAweDAyZjggKi8KKwlfX3U2NAlwYW5pY19zdGFjazsJCQkvKiAweDAzMDAgKi8KKworCS8qIEFkZHJlc3Mgc3BhY2UgcG9pbnRlci4gKi8KKwlfX3U2NAlrZXJuZWxfYXNjZTsJCQkvKiAweDAzMDggKi8KKwlfX3U2NAl1c2VyX2FzY2U7CQkJLyogMHgwMzEwICovCisJX191NjQJdXNlcl9leGVjX2FzY2U7CQkJLyogMHgwMzE4ICovCisKKwkvKiBTTVAgaW5mbyBhcmVhICovCisJY3B1aWRfdAljcHVfaWQ7CQkJCS8qIDB4MDMyMCAqLworCV9fdTMyCWNwdV9ucjsJCQkJLyogMHgwMzI4ICovCisJX191MzIJc29mdGlycV9wZW5kaW5nOwkJLyogMHgwMzJjICovCisJX191NjQJcGVyY3B1X29mZnNldDsJCQkvKiAweDAzMzAgKi8KKwlfX3U2NAlleHRfY2FsbF9mYXN0OwkJCS8qIDB4MDMzOCAqLworCV9fdTY0CWludF9jbG9jazsJCQkvKiAweDAzNDAgKi8KKwlfX3U2NAljbG9ja19jb21wYXJhdG9yOwkJLyogMHgwMzQ4ICovCisJX191NjQJdmRzb19wZXJfY3B1X2RhdGE7CQkvKiAweDAzNTAgKi8KKwlfX3U4CXBhZF8weDAzNThbMHgwMzgwLTB4MDM1OF07CS8qIDB4MDM1OCAqLworCisJLyogSW50ZXJydXB0IHJlc3BvbnNlIGJsb2NrLiAqLworCV9fdTgJaXJiWzY0XTsJCQkvKiAweDAzODAgKi8KIAogCS8qIFBlciBjcHUgcHJpbWFyeSBzcGFjZSBhY2Nlc3MgbGlzdCAqLwotCV9fdTgJICAgICBwYWRfMHhlMDRbMHhlMzgtMHhlMDRdOyAgIC8qIDB4ZTA0ICovCi0JX191NjQJICAgICB2ZHNvX3Blcl9jcHVfZGF0YTsJICAgICAgIC8qIDB4ZTM4ICovCi0JX191MzIJICAgICBwYXN0ZVsxNl07CQkgICAgICAgLyogMHhlNDAgKi8KKwlfX3UzMglwYXN0ZVsxNl07CQkJLyogMHgwM2MwICovCiAKLQlfX3U4CSAgICAgcGFkMTNbMHgxMWI4LTB4ZTgwXTsgICAgICAvKiAweGU4MCAqLworCV9fdTgJcGFkXzB4MDQwMFsweDBlMDAtMHgwNDAwXTsJLyogMHgwNDAwICovCiAKLQkvKiA2NCBiaXQgZXh0cGFyYW0gdXNlZCBmb3IgcGZhdWx0LCBkaWFnIDI1MCBldGMgICovCi0JX191NjQgICAgICAgIGV4dF9wYXJhbXMyOyAgICAgICAgICAgICAgIC8qIDB4MTFCOCAqLworCS8qCisJICogMHhlMDAgY29udGFpbnMgdGhlIGFkZHJlc3Mgb2YgdGhlIElQTCBQYXJhbWV0ZXIgSW5mb3JtYXRpb24KKwkgKiBibG9jay4gRHVtcCB0b29scyBuZWVkIElQSUIgZm9yIElQTCBhZnRlciBkdW1wLgorCSAqIE5vdGU6IGRvIG5vdCBjaGFuZ2UgdGhlIHBvc2l0aW9uIG9mIGFueSBmaWVsZHMgaW4gMHgwZTAwLTB4MGYwMAorCSAqLworCV9fdTY0CWlwaWI7CQkJCS8qIDB4MGUwMCAqLworCV9fdTMyCWlwaWJfY2hlY2tzdW07CQkJLyogMHgwZTA4ICovCisJX191OAlwYWRfMHgwZTBjWzB4MTFiOC0weDBlMGNdOwkvKiAweDBlMGMgKi8KIAotCV9fdTggICAgICAgICBwYWQxNFsweDEyMDAtMHgxMUMwXTsgICAgICAvKiAweDExQzAgKi8KKwkvKiA2NCBiaXQgZXh0cGFyYW0gdXNlZCBmb3IgcGZhdWx0L2RpYWcgMjUwOiBkZWZpbmVkIGJ5IGFyY2hpdGVjdHVyZSAqLworCV9fdTY0CWV4dF9wYXJhbXMyOwkJCS8qIDB4MTFCOCAqLworCV9fdTgJcGFkXzB4MTFjMFsweDEyMDAtMHgxMUMwXTsJLyogMHgxMUMwICovCiAKLSAgICAgICAgLyogU3lzdGVtIGluZm8gYXJlYSAqLyAKLQotCV9fdTY0ICAgICAgICBmbG9hdGluZ19wdF9zYXZlX2FyZWFbMTZdOyAvKiAweDEyMDAgKi8KLQlfX3U2NCAgICAgICAgZ3ByZWdzX3NhdmVfYXJlYVsxNl07ICAgICAgLyogMHgxMjgwICovCi0JX191MzIgICAgICAgIHN0X3N0YXR1c19maXhlZF9sb2dvdXRbNF07IC8qIDB4MTMwMCAqLwotCV9fdTggICAgICAgICBwYWQxNVsweDEzMTgtMHgxMzEwXTsgICAgICAvKiAweDEzMTAgKi8KLQlfX3UzMiAgICAgICAgcHJlZml4cmVnX3NhdmVfYXJlYTsgICAgICAgLyogMHgxMzE4ICovCi0JX191MzIgICAgICAgIGZwdF9jcmVnX3NhdmVfYXJlYTsgICAgICAgIC8qIDB4MTMxYyAqLwotCV9fdTggICAgICAgICBwYWQxNlsweDEzMjQtMHgxMzIwXTsgICAgICAvKiAweDEzMjAgKi8KLQlfX3UzMiAgICAgICAgdG9kX3Byb2dyZWdfc2F2ZV9hcmVhOyAgICAgLyogMHgxMzI0ICovCi0JX191MzIgICAgICAgIGNwdV90aW1lcl9zYXZlX2FyZWFbMl07ICAgIC8qIDB4MTMyOCAqLwotCV9fdTMyICAgICAgICBjbG9ja19jb21wX3NhdmVfYXJlYVsyXTsgICAvKiAweDEzMzAgKi8KLQlfX3U4ICAgICAgICAgcGFkMTdbMHgxMzQwLTB4MTMzOF07ICAgICAgLyogMHgxMzM4ICovCi0JX191MzIgICAgICAgIGFjY2Vzc19yZWdzX3NhdmVfYXJlYVsxNl07IC8qIDB4MTM0MCAqLyAKLQlfX3U2NCAgICAgICAgY3JlZ3Nfc2F2ZV9hcmVhWzE2XTsgICAgICAgLyogMHgxMzgwICovCisJLyogQ1BVIHJlZ2lzdGVyIHNhdmUgYXJlYTogZGVmaW5lZCBieSBhcmNoaXRlY3R1cmUgKi8KKwlfX3U2NAlmbG9hdGluZ19wdF9zYXZlX2FyZWFbMTZdOwkvKiAweDEyMDAgKi8KKwlfX3U2NAlncHJlZ3Nfc2F2ZV9hcmVhWzE2XTsJCS8qIDB4MTI4MCAqLworCV9fdTMyCXN0X3N0YXR1c19maXhlZF9sb2dvdXRbNF07CS8qIDB4MTMwMCAqLworCV9fdTgJcGFkXzB4MTMxMFsweDEzMTgtMHgxMzEwXTsJLyogMHgxMzEwICovCisJX191MzIJcHJlZml4cmVnX3NhdmVfYXJlYTsJCS8qIDB4MTMxOCAqLworCV9fdTMyCWZwdF9jcmVnX3NhdmVfYXJlYTsJCS8qIDB4MTMxYyAqLworCV9fdTgJcGFkXzB4MTMyMFsweDEzMjQtMHgxMzIwXTsJLyogMHgxMzIwICovCisJX191MzIJdG9kX3Byb2dyZWdfc2F2ZV9hcmVhOwkJLyogMHgxMzI0ICovCisJX191MzIJY3B1X3RpbWVyX3NhdmVfYXJlYVsyXTsJCS8qIDB4MTMyOCAqLworCV9fdTMyCWNsb2NrX2NvbXBfc2F2ZV9hcmVhWzJdOwkvKiAweDEzMzAgKi8KKwlfX3U4CXBhZF8weDEzMzhbMHgxMzQwLTB4MTMzOF07CS8qIDB4MTMzOCAqLworCV9fdTMyCWFjY2Vzc19yZWdzX3NhdmVfYXJlYVsxNl07CS8qIDB4MTM0MCAqLworCV9fdTY0CWNyZWdzX3NhdmVfYXJlYVsxNl07CQkvKiAweDEzODAgKi8KIAogCS8qIGFsaWduIHRvIHRoZSB0b3Agb2YgdGhlIHByZWZpeCBhcmVhICovCi0KLQlfX3U4ICAgICAgICAgcGFkMThbMHgyMDAwLTB4MTQwMF07ICAgICAgLyogMHgxNDAwICovCisJX191OAlwYWRfMHgxNDAwWzB4MjAwMC0weDE0MDBdOwkvKiAweDE0MDAgKi8KICNlbmRpZiAvKiAhX19zMzkweF9fICovCiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOyAvKiBFbmQgc3RydWN0dXJlKi8KIApAQCAtNDMzLDggKzQ0MCw2IEBACiAJcmV0dXJuIGFkZHJlc3M7CiB9CiAKLSNkZWZpbmUgX19QQU5JQ19NQUdJQyAgICAgICAgICAgMHhERUFEQzBERQotCiAjZW5kaWYKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCmluZGV4IDI4ZWM4NzAuLmZjN2VkZDYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCkBAIC03NCw3ICs3NCw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgc3dpdGNoX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKnByZXYsIHN0cnVjdCBtbV9zdHJ1Y3QgKm5leHQsCiAJCQkgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQogewotCWNwdV9zZXQoc21wX3Byb2Nlc3Nvcl9pZCgpLCBuZXh0LT5jcHVfdm1fbWFzayk7CisJY3B1bWFza19zZXRfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSwgbW1fY3B1bWFzayhuZXh0KSk7CiAJdXBkYXRlX21tKG5leHQsIHRzayk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9ubWkuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9ubWkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGI2MDQ0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL25taS5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiAgIE1hY2hpbmUgY2hlY2sgaGFuZGxlciBkZWZpbml0aW9ucworICoKKyAqICAgIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwMCwyMDA5CisgKiAgICBBdXRob3Iocyk6IEluZ28gQWRsdW5nIDxhZGx1bmdAZGUuaWJtLmNvbT4sCisgKgkJIE1hcnRpbiBTY2h3aWRlZnNreSA8c2Nod2lkZWZza3lAZGUuaWJtLmNvbT4sCisgKgkJIENvcm5lbGlhIEh1Y2sgPGNvcm5lbGlhLmh1Y2tAZGUuaWJtLmNvbT4sCisgKgkJIEhlaWtvIENhcnN0ZW5zIDxoZWlrby5jYXJzdGVuc0BkZS5pYm0uY29tPiwKKyAqLworCisjaWZuZGVmIF9BU01fUzM5MF9OTUlfSAorI2RlZmluZSBfQVNNX1MzOTBfTk1JX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK3N0cnVjdCBtY2kgeworCV9fdTMyIHNkIDogIDE7IC8qIDAwIHN5c3RlbSBkYW1hZ2UgKi8KKwlfX3UzMiBwZCA6ICAxOyAvKiAwMSBpbnN0cnVjdGlvbi1wcm9jZXNzaW5nIGRhbWFnZSAqLworCV9fdTMyIHNyIDogIDE7IC8qIDAyIHN5c3RlbSByZWNvdmVyeSAqLworCV9fdTMyCSA6ICAxOyAvKiAwMyAqLworCV9fdTMyIGNkIDogIDE7IC8qIDA0IHRpbWluZy1mYWNpbGl0eSBkYW1hZ2UgKi8KKwlfX3UzMiBlZCA6ICAxOyAvKiAwNSBleHRlcm5hbCBkYW1hZ2UgKi8KKwlfX3UzMgkgOiAgMTsgLyogMDYgKi8KKwlfX3UzMiBkZyA6ICAxOyAvKiAwNyBkZWdyYWRhdGlvbiAqLworCV9fdTMyIHcgIDogIDE7IC8qIDA4IHdhcm5pbmcgcGVuZGluZyAqLworCV9fdTMyIGNwIDogIDE7IC8qIDA5IGNoYW5uZWwtcmVwb3J0IHBlbmRpbmcgKi8KKwlfX3UzMiBzcCA6ICAxOyAvKiAxMCBzZXJ2aWNlLXByb2Nlc3NvciBkYW1hZ2UgKi8KKwlfX3UzMiBjayA6ICAxOyAvKiAxMSBjaGFubmVsLXN1YnN5c3RlbSBkYW1hZ2UgKi8KKwlfX3UzMgkgOiAgMjsgLyogMTItMTMgKi8KKwlfX3UzMiBiICA6ICAxOyAvKiAxNCBiYWNrZWQgdXAgKi8KKwlfX3UzMgkgOiAgMTsgLyogMTUgKi8KKwlfX3UzMiBzZSA6ICAxOyAvKiAxNiBzdG9yYWdlIGVycm9yIHVuY29ycmVjdGVkICovCisJX191MzIgc2MgOiAgMTsgLyogMTcgc3RvcmFnZSBlcnJvciBjb3JyZWN0ZWQgKi8KKwlfX3UzMiBrZSA6ICAxOyAvKiAxOCBzdG9yYWdlLWtleSBlcnJvciB1bmNvcnJlY3RlZCAqLworCV9fdTMyIGRzIDogIDE7IC8qIDE5IHN0b3JhZ2UgZGVncmFkYXRpb24gKi8KKwlfX3UzMiB3cCA6ICAxOyAvKiAyMCBwc3cgbXdwIHZhbGlkaXR5ICovCisJX191MzIgbXMgOiAgMTsgLyogMjEgcHN3IG1hc2sgYW5kIGtleSB2YWxpZGl0eSAqLworCV9fdTMyIHBtIDogIDE7IC8qIDIyIHBzdyBwcm9ncmFtIG1hc2sgYW5kIGNjIHZhbGlkaXR5ICovCisJX191MzIgaWEgOiAgMTsgLyogMjMgcHN3IGluc3RydWN0aW9uIGFkZHJlc3MgdmFsaWRpdHkgKi8KKwlfX3UzMiBmYSA6ICAxOyAvKiAyNCBmYWlsaW5nIHN0b3JhZ2UgYWRkcmVzcyB2YWxpZGl0eSAqLworCV9fdTMyCSA6ICAxOyAvKiAyNSAqLworCV9fdTMyIGVjIDogIDE7IC8qIDI2IGV4dGVybmFsIGRhbWFnZSBjb2RlIHZhbGlkaXR5ICovCisJX191MzIgZnAgOiAgMTsgLyogMjcgZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXIgdmFsaWRpdHkgKi8KKwlfX3UzMiBnciA6ICAxOyAvKiAyOCBnZW5lcmFsIHJlZ2lzdGVyIHZhbGlkaXR5ICovCisJX191MzIgY3IgOiAgMTsgLyogMjkgY29udHJvbCByZWdpc3RlciB2YWxpZGl0eSAqLworCV9fdTMyCSA6ICAxOyAvKiAzMCAqLworCV9fdTMyIHN0IDogIDE7IC8qIDMxIHN0b3JhZ2UgbG9naWNhbCB2YWxpZGl0eSAqLworCV9fdTMyIGllIDogIDE7IC8qIDMyIGluZGlyZWN0IHN0b3JhZ2UgZXJyb3IgKi8KKwlfX3UzMiBhciA6ICAxOyAvKiAzMyBhY2Nlc3MgcmVnaXN0ZXIgdmFsaWRpdHkgKi8KKwlfX3UzMiBkYSA6ICAxOyAvKiAzNCBkZWxheWVkIGFjY2VzcyBleGNlcHRpb24gKi8KKwlfX3UzMgkgOiAgNzsgLyogMzUtNDEgKi8KKwlfX3UzMiBwciA6ICAxOyAvKiA0MiB0b2QgcHJvZ3JhbW1hYmxlIHJlZ2lzdGVyIHZhbGlkaXR5ICovCisJX191MzIgZmMgOiAgMTsgLyogNDMgZnAgY29udHJvbCByZWdpc3RlciB2YWxpZGl0eSAqLworCV9fdTMyIGFwIDogIDE7IC8qIDQ0IGFuY2lsbGFyeSByZXBvcnQgKi8KKwlfX3UzMgkgOiAgMTsgLyogNDUgKi8KKwlfX3UzMiBjdCA6ICAxOyAvKiA0NiBjcHUgdGltZXIgdmFsaWRpdHkgKi8KKwlfX3UzMiBjYyA6ICAxOyAvKiA0NyBjbG9jayBjb21wYXJhdG9yIHZhbGlkaXR5ICovCisJX191MzIJIDogMTY7IC8qIDQ3LTYzICovCit9OworCitzdHJ1Y3QgcHRfcmVnczsKKworZXh0ZXJuIHZvaWQgczM5MF9oYW5kbGVfbWNjayh2b2lkKTsKK2V4dGVybiB2b2lkIHMzOTBfZG9fbWFjaGluZV9jaGVjayhzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisKKyNlbmRpZiAvKiBfQVNNX1MzOTBfTk1JX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAppbmRleCBkYjQ1MjNmLi42MTg2MmIzIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCkBAIC00MiwyMiArNDIsOCBAQAogCWFzbSB2b2xhdGlsZSgic3RpZHAgMCglMSkiIDogIj1tIiAoKnB0cikgOiAiYSIgKHB0cikpOwogfQogCi1zdHJ1Y3QgY3B1aW5mb19TMzkwCi17Ci0gICAgICAgIGNwdWlkX3QgIGNwdV9pZDsKLSAgICAgICAgX191MTYgICAgY3B1X2FkZHI7Ci0gICAgICAgIF9fdTE2ICAgIGNwdV9ucjsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBsb29wc19wZXJfamlmZnk7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgKnBnZF9xdWljazsKLSNpZmRlZiBfX3MzOTB4X18KLSAgICAgICAgdW5zaWduZWQgbG9uZyAqcG1kX3F1aWNrOwotI2VuZGlmIC8qIF9fczM5MHhfXyAqLwotICAgICAgICB1bnNpZ25lZCBsb25nICpwdGVfcXVpY2s7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgcGd0YWJsZV9jYWNoZV9zejsKLX07Ci0KIGV4dGVybiB2b2lkIHMzOTBfYWRqdXN0X2ppZmZpZXModm9pZCk7Ci1leHRlcm4gdm9pZCBwcmludF9jcHVfaW5mbyhzdHJ1Y3QgY3B1aW5mb19TMzkwICopOworZXh0ZXJuIHZvaWQgcHJpbnRfY3B1X2luZm8odm9pZCk7CiBleHRlcm4gaW50IGdldF9jcHVfY2FwYWJpbGl0eSh1bnNpZ25lZCBpbnQgKik7CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcHRyYWNlLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcHRyYWNlLmgKaW5kZXggODkyMDAyNS4uZjFiMDUxNiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3B0cmFjZS5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wdHJhY2UuaApAQCAtMTcyLDYgKzE3Miw4IEBACiAjZGVmaW5lIE5VTV9DUlMJCTE2CiAjZGVmaW5lIE5VTV9BQ1JTCTE2CiAKKyNkZWZpbmUgTlVNX0NSX1dPUkRTCTMKKwogI2RlZmluZSBGUFJfU0laRQk4CiAjZGVmaW5lIEZQQ19TSVpFCTQKICNkZWZpbmUgRlBDX1BBRF9TSVpFCTQgLyogZ2NjIGluc2lzdHMgb24gYWxpZ25pbmcgdGhlIGZwcmVncyAqLwpAQCAtMzM0LDcgKzMzNiw3IEBACiAgKi8KIHR5cGVkZWYgc3RydWN0CiB7Ci0JdW5zaWduZWQgbG9uZyBjclszXTsKKwl1bnNpZ25lZCBsb25nIGNyW05VTV9DUl9XT1JEU107CiB9IHBlcl9jcl93b3JkczsKIAogI2RlZmluZSBQRVJfRU1fTUFTSyAweEU4MDAwMDAwVUwKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9xZGlvLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcWRpby5oCmluZGV4IDI3ZmMxNzQuLjQwMmQ2ZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9xZGlvLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3FkaW8uaApAQCAtMzE0LDYgKzMxNCw3IEBACiAJCQkgICAgaW50LCBpbnQsIHVuc2lnbmVkIGxvbmcpOwogCiAvKiBxZGlvIGVycm9ycyByZXBvcnRlZCB0byB0aGUgdXBwZXItbGF5ZXIgcHJvZ3JhbSAqLworI2RlZmluZSBRRElPX0VSUk9SX1NJR0FfVEFSR0VUCQkJMHgwMgogI2RlZmluZSBRRElPX0VSUk9SX1NJR0FfQUNDRVNTX0VYQ0VQVElPTgkweDEwCiAjZGVmaW5lIFFESU9fRVJST1JfU0lHQV9CVVNZCQkJMHgyMAogI2RlZmluZSBRRElPX0VSUk9SX0FDVElWQVRFX0NIRUNLX0NPTkRJVElPTgkweDQwCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc21wLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc21wLmgKaW5kZXggMDI0YjkxZS4uMjAwOTE1OCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NtcC5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zbXAuaApAQCAtNTAsMTIgKzUwLDcgQEAKICAKICNkZWZpbmUgUFJPQ19DSEFOR0VfUEVOQUxUWQkyMAkJLyogU2NoZWR1bGUgcGVuYWx0eSAqLwogCi0jZGVmaW5lIHJhd19zbXBfcHJvY2Vzc29yX2lkKCkJKFMzOTBfbG93Y29yZS5jcHVfZGF0YS5jcHVfbnIpCi0KLXN0YXRpYyBpbmxpbmUgX191MTYgaGFyZF9zbXBfcHJvY2Vzc29yX2lkKHZvaWQpCi17Ci0JcmV0dXJuIHN0YXAoKTsKLX0KKyNkZWZpbmUgcmF3X3NtcF9wcm9jZXNzb3JfaWQoKQkoUzM5MF9sb3djb3JlLmNwdV9ucikKIAogLyoKICAqIHJldHVybnMgMSBpZiBjcHUgaXMgaW4gc3RvcHBlZC9jaGVjayBzdG9wcGVkIHN0YXRlIG9yIG5vdCBvcGVyYXRpb25hbApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NvY2tldC5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NvY2tldC5oCmluZGV4IGM3ODZhYjYuLjAyMzMwYzUgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zb2NrZXQuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc29ja2V0LmgKQEAgLTYyLDQgKzYyLDcgQEAKIAogI2RlZmluZSBTT19NQVJLCQkJMzYKIAorI2RlZmluZSBTT19USU1FU1RBTVBJTkcJCTM3CisjZGVmaW5lIFNDTV9USU1FU1RBTVBJTkcJU09fVElNRVNUQU1QSU5HCisKICNlbmRpZiAvKiBfQVNNX1NPQ0tFVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3RyaW5nLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3RyaW5nLmgKaW5kZXggZDA3NDY3My4uY2QwMjQxZCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3N0cmluZy5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zdHJpbmcuaApAQCAtMTAwLDYgKzEwMCw3IEBACiAKIHN0YXRpYyBpbmxpbmUgY2hhciAqc3RyY3B5KGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjKQogeworI2lmIF9fR05VQ19fIDwgNAogCXJlZ2lzdGVyIGludCByMCBhc20oIjAiKSA9IDA7CiAJY2hhciAqcmV0ID0gZHN0OwogCkBAIC0xMDksMTAgKzExMCwxNCBAQAogCQk6ICIrJmEiIChkc3QpLCAiKyZhIiAoc3JjKSA6ICJkIiAocjApCiAJCTogImNjIiwgIm1lbW9yeSIpOwogCXJldHVybiByZXQ7CisjZWxzZQorCXJldHVybiBfX2J1aWx0aW5fc3RyY3B5KGRzdCwgc3JjKTsKKyNlbmRpZgogfQogCiBzdGF0aWMgaW5saW5lIHNpemVfdCBzdHJsZW4oY29uc3QgY2hhciAqcykKIHsKKyNpZiBfX0dOVUNfXyA8IDQKIAlyZWdpc3RlciB1bnNpZ25lZCBsb25nIHIwIGFzbSgiMCIpID0gMDsKIAljb25zdCBjaGFyICp0bXAgPSBzOwogCkBAIC0xMjEsNiArMTI2LDkgQEAKIAkJIglqbwkwYiIKIAkJOiAiK2QiIChyMCksICIrYSIgKHRtcCkgOiAgOiAiY2MiKTsKIAlyZXR1cm4gcjAgLSAodW5zaWduZWQgbG9uZykgczsKKyNlbHNlCisJcmV0dXJuIF9fYnVpbHRpbl9zdHJsZW4ocyk7CisjZW5kaWYKIH0KIAogc3RhdGljIGlubGluZSBzaXplX3Qgc3Rybmxlbihjb25zdCBjaGFyICogcywgc2l6ZV90IG4pCkBAIC0xMzUsNyArMTQzLDEzIEBACiAJCTogIithIiAoZW5kKSwgIithIiAodG1wKSA6ICJkIiAocjApICA6ICJjYyIpOwogCXJldHVybiBlbmQgLSBzOwogfQotCisjZWxzZSAvKiBJTl9BUkNIX1NUUklOR19DICovCit2b2lkICptZW1jaHIoY29uc3Qgdm9pZCAqIHMsIGludCBjLCBzaXplX3Qgbik7Cit2b2lkICptZW1zY2FuKHZvaWQgKnMsIGludCBjLCBzaXplX3Qgbik7CitjaGFyICpzdHJjYXQoY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMpOworY2hhciAqc3RyY3B5KGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjKTsKK3NpemVfdCBzdHJsZW4oY29uc3QgY2hhciAqcyk7CitzaXplX3Qgc3Rybmxlbihjb25zdCBjaGFyICogcywgc2l6ZV90IG4pOwogI2VuZGlmIC8qICFJTl9BUkNIX1NUUklOR19DICovCiAKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3lzaW5mby5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3N5c2luZm8uaAppbmRleCBhZDkzMjEyLi45ZDcwMDU3IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3lzaW5mby5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zeXNpbmZvLmgKQEAgLTEwMCw2ICsxMDAsNyBAQAogCQljaGFyIHJlc2VydmVkXzFbMjRdOwogCiAJfSB2bVs4XTsKKwljaGFyIHJlc2VydmVkXzU0NFszNTUyXTsKIH07CiAKIHN0YXRpYyBpbmxpbmUgaW50IHN0c2kodm9pZCAqc3lzaW5mbywgaW50IGZjLCBpbnQgc2VsMSwgaW50IHNlbDIpCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdGxiZmx1c2guaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS90bGJmbHVzaC5oCmluZGV4IGQ2MDM5NGIuLjMwNGNmZmEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS90bGJmbHVzaC5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS90bGJmbHVzaC5oCkBAIC01MSw3ICs1MSw3IEBACiAJICogSWYgdGhlIHByb2Nlc3Mgb25seSByYW4gb24gdGhlIGxvY2FsIGNwdSwgZG8gYSBsb2NhbCBmbHVzaC4KIAkgKi8KIAlsb2NhbF9jcHVtYXNrID0gY3B1bWFza19vZl9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQlpZiAoY3B1c19lcXVhbChtbS0+Y3B1X3ZtX21hc2ssIGxvY2FsX2NwdW1hc2spKQorCWlmIChjcHVtYXNrX2VxdWFsKG1tX2NwdW1hc2sobW0pLCAmbG9jYWxfY3B1bWFzaykpCiAJCV9fdGxiX2ZsdXNoX2xvY2FsKCk7CiAJZWxzZQogCQlfX3RsYl9mbHVzaF9nbG9iYWwoKTsKQEAgLTczLDcgKzczLDcgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIF9fdGxiX2ZsdXNoX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKiBtbSkKIHsKLQlpZiAodW5saWtlbHkoY3B1c19lbXB0eShtbS0+Y3B1X3ZtX21hc2spKSkKKwlpZiAodW5saWtlbHkoY3B1bWFza19lbXB0eShtbV9jcHVtYXNrKG1tKSkpKQogCQlyZXR1cm47CiAJLyoKIAkgKiBJZiB0aGUgbWFjaGluZSBoYXMgSURURSB3ZSBwcmVmZXIgdG8gZG8gYSBwZXIgbW0gZmx1c2gKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS90b3BvbG9neS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RvcG9sb2d5LmgKaW5kZXggYzk3OWMzYi4uNWUwYWQ2MSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RvcG9sb2d5LmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RvcG9sb2d5LmgKQEAgLTUsNyArNSw2IEBACiAKICNkZWZpbmUgbWNfY2FwYWJsZSgpCSgxKQogCi1jcHVtYXNrX3QgY3B1X2NvcmVncm91cF9tYXAodW5zaWduZWQgaW50IGNwdSk7CiBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1X2NvcmVncm91cF9tYXNrKHVuc2lnbmVkIGludCBjcHUpOwogCiBleHRlcm4gY3B1bWFza190IGNwdV9jb3JlX21hcFtOUl9DUFVTXTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS92dG9jLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdnRvYy5oCmluZGV4IDNhNTI2N2QuLjg0MDZhMmIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS92dG9jLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3Z0b2MuaApAQCAtMzksNyArMzksNyBAQAogCV9fdTE2IGRheTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi1zdHJ1Y3QgdnRvY192b2x1bWVfbGFiZWwKK3N0cnVjdCB2dG9jX3ZvbHVtZV9sYWJlbF9jZGwKIHsKIAljaGFyIHZvbGtleVs0XTsJCS8qIHZvbHVtZSBrZXkgPSB2b2x1bWUgbGFiZWwgKi8KIAljaGFyIHZvbGxibFs0XTsJCS8qIHZvbHVtZSBsYWJlbCAqLwpAQCAtNTYsNiArNTYsMTQgQEAKIAljaGFyIHJlczNbMjldOwkJLyogcmVzZXJ2ZWQgKi8KIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCitzdHJ1Y3QgdnRvY192b2x1bWVfbGFiZWxfbGRsIHsKKwljaGFyIHZvbGxibFs0XTsJCS8qIHZvbHVtZSBsYWJlbCAqLworCWNoYXIgdm9saWRbNl07CQkvKiB2b2x1bWUgaWRlbnRpZmllciAqLworCWNoYXIgcmVzM1s2OV07CQkvKiByZXNlcnZlZCAqLworCWNoYXIgbGRsX3ZlcnNpb247CS8qIHZlcnNpb24gbnVtYmVyLCB2YWxpZCBmb3IgbGRsIGZvcm1hdCAqLworCV9fdTY0IGZvcm1hdHRlZF9ibG9ja3M7IC8qIHZhbGlkIHdoZW4gbGRsX3ZlcnNpb24gPj0gZjIgICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwogc3RydWN0IHZ0b2NfZXh0ZW50CiB7CiAJX191OCB0eXBlaW5kOwkJCS8qIGV4dGVudCB0eXBlIGluZGljYXRvciAqLwpAQCAtMTQwLDcgKzE0OCwxMSBAQAogCWNoYXIgcmVzMlsxMF07CQkvKiByZXNlcnZlZCAqLwogCV9fdTggRFM0RUZMVkw7CQkvKiBleHRlbmRlZCBmcmVlLXNwYWNlIG1hbmFnZW1lbnQgbGV2ZWwgKi8KIAlzdHJ1Y3QgdnRvY19jY2hoYiBEUzRFRlBUUjsgLyogcG9pbnRlciB0byBleHRlbmRlZCBmcmVlLXNwYWNlIGluZm8gKi8KLQljaGFyIHJlczNbOV07CQkvKiByZXNlcnZlZCAqLworCWNoYXIgcmVzMzsJCS8qIHJlc2VydmVkICovCisJX191MzIgRFM0RENZTDsJCS8qIG51bWJlciBvZiBsb2dpY2FsIGN5bHMgKi8KKwljaGFyIHJlczRbMl07CQkvKiByZXNlcnZlZCAqLworCV9fdTggRFM0REVWRjI7CQkvKiBkZXZpY2UgZmxhZ3MgKi8KKwljaGFyIHJlczU7CQkvKiByZXNlcnZlZCAqLwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIHN0cnVjdCB2dG9jX2RzNWV4dApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvczM5MC9rZXJuZWwvTWFrZWZpbGUKaW5kZXggM2VkYzZjNi4uMjI4ZTMxMCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL3MzOTAva2VybmVsL01ha2VmaWxlCkBAIC0xNywxMCArMTcsMTIgQEAKICMKIENGTEFHU19wdHJhY2UubwkJKz0gLURVVFNfTUFDSElORT0nIiQoVVRTX01BQ0hJTkUpIicKIAorQ0ZMQUdTX3N5c2luZm8ubyArPSAtSWluY2x1ZGUvbWF0aC1lbXUgLUlhcmNoL3MzOTAvbWF0aC1lbXUgLXcKKwogb2JqLXkJOj0gIGJpdG1hcC5vIHRyYXBzLm8gdGltZS5vIHByb2Nlc3MubyBiYXNlLm8gZWFybHkubyBzZXR1cC5vIFwKIAkgICAgcHJvY2Vzc29yLm8gc3lzX3MzOTAubyBwdHJhY2UubyBzaWduYWwubyBjcGNtZC5vIGViY2RpYy5vIFwKIAkgICAgczM5MF9leHQubyBkZWJ1Zy5vIGlycS5vIGlwbC5vIGRpcy5vIGRpYWcubyBtZW1fZGV0ZWN0Lm8gXAotCSAgICB2ZHNvLm8gdnRpbWUubworCSAgICB2ZHNvLm8gdnRpbWUubyBzeXNpbmZvLm8gbm1pLm8KIAogb2JqLXkJKz0gJChpZiAkKENPTkZJR182NEJJVCksZW50cnk2NC5vLGVudHJ5Lm8pCiBvYmoteQkrPSAkKGlmICQoQ09ORklHXzY0QklUKSxyZWlwbDY0Lm8scmVpcGwubykKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvYml0bWFwLlMgYi9hcmNoL3MzOTAva2VybmVsL2JpdG1hcC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZmI0MWY5Li4wMDAwMDAwCi0tLSBhL2FyY2gvczM5MC9rZXJuZWwvYml0bWFwLlMKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKgotICogIGFyY2gvczM5MC9rZXJuZWwvYml0bWFwLlMKLSAqICAgIEJpdG1hcHMgZm9yIHNldF9iaXQsIGNsZWFyX2JpdCwgdGVzdF9hbmRfc2V0X2JpdCwgLi4uCi0gKiAgICBTZWUgaW5jbHVkZS9hc20tczM5MC97Yml0b3BzLmh8cG9zaXhfdHlwZXMuaH0gZm9yIGRldGFpbHMKLSAqCi0gKiAgUzM5MCB2ZXJzaW9uCi0gKiAgICBDb3B5cmlnaHQgKEMpIDE5OTkgSUJNIERldXRzY2hsYW5kIEVudHdpY2tsdW5nIEdtYkgsIElCTSBDb3Jwb3JhdGlvbgotICogICAgQXV0aG9yKHMpOiBNYXJ0aW4gU2Nod2lkZWZza3kgKHNjaHdpZGVmc2t5QGRlLmlibS5jb20pLAotICovCi0KLSAgICAgICAgIC5nbG9ibCBfb2lfYml0bWFwCi1fb2lfYml0bWFwOgotICAgICAgICAgLmJ5dGUgIDB4MDEsMHgwMiwweDA0LDB4MDgsMHgxMCwweDIwLDB4NDAsMHg4MAotCi0gICAgICAgICAuZ2xvYmwgX25pX2JpdG1hcAotX25pX2JpdG1hcDoKLSAgICAgICAgIC5ieXRlICAweEZFLDB4RkQsMHhGQiwweEY3LDB4RUYsMHhERiwweEJGLDB4N0YKLQotICAgICAgICAgLmdsb2JsIF96Yl9maW5kbWFwCi1femJfZmluZG1hcDoKLSAgICAgICAgIC5ieXRlICAwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw0Ci0gICAgICAgICAuYnl0ZSAgMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNQotICAgICAgICAgLmJ5dGUgIDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDQgCi0gICAgICAgICAuYnl0ZSAgMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNgotICAgICAgICAgLmJ5dGUgIDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDQKLSAgICAgICAgIC5ieXRlICAwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw1Ci0gICAgICAgICAuYnl0ZSAgMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNAotICAgICAgICAgLmJ5dGUgIDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDcKLSAgICAgICAgIC5ieXRlICAwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw0Ci0gICAgICAgICAuYnl0ZSAgMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNQotICAgICAgICAgLmJ5dGUgIDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDQKLSAgICAgICAgIC5ieXRlICAwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw2Ci0gICAgICAgICAuYnl0ZSAgMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNAotICAgICAgICAgLmJ5dGUgIDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDUKLSAgICAgICAgIC5ieXRlICAwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw0Ci0gICAgICAgICAuYnl0ZSAgMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsOAotCi0gICAgICAgICAuZ2xvYmwgX3NiX2ZpbmRtYXAKLV9zYl9maW5kbWFwOgotICAgICAgICAgLmJ5dGUgIDgsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAKLSAgICAgICAgIC5ieXRlICA0LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwCi0gICAgICAgICAuYnl0ZSAgNSwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMAotICAgICAgICAgLmJ5dGUgIDQsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAKLSAgICAgICAgIC5ieXRlICA2LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwCi0gICAgICAgICAuYnl0ZSAgNCwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMAotICAgICAgICAgLmJ5dGUgIDUsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAKLSAgICAgICAgIC5ieXRlICA0LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwCi0gICAgICAgICAuYnl0ZSAgNywwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMAotICAgICAgICAgLmJ5dGUgIDQsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAKLSAgICAgICAgIC5ieXRlICA1LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwCi0gICAgICAgICAuYnl0ZSAgNCwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMAotICAgICAgICAgLmJ5dGUgIDYsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAKLSAgICAgICAgIC5ieXRlICA0LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwCi0gICAgICAgICAuYnl0ZSAgNSwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMAotICAgICAgICAgLmJ5dGUgIDQsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAKLQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9iaXRtYXAuYyBiL2FyY2gvczM5MC9rZXJuZWwvYml0bWFwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FlNDc1NwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvYml0bWFwLmMKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqICAgIEJpdG1hcHMgZm9yIHNldF9iaXQsIGNsZWFyX2JpdCwgdGVzdF9hbmRfc2V0X2JpdCwgLi4uCisgKiAgICBTZWUgaW5jbHVkZS9hc20ve2JpdG9wcy5ofHBvc2l4X3R5cGVzLmh9IGZvciBkZXRhaWxzCisgKgorICogICAgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk5LDIwMDkKKyAqICAgIEF1dGhvcihzKTogTWFydGluIFNjaHdpZGVmc2t5IDxzY2h3aWRlZnNreUBkZS5pYm0uY29tPiwKKyAqLworCisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKK2NvbnN0IGNoYXIgX29pX2JpdG1hcFtdID0geyAweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwIH07CitFWFBPUlRfU1lNQk9MKF9vaV9iaXRtYXApOworCitjb25zdCBjaGFyIF9uaV9iaXRtYXBbXSA9IHsgMHhmZSwgMHhmZCwgMHhmYiwgMHhmNywgMHhlZiwgMHhkZiwgMHhiZiwgMHg3ZiB9OworRVhQT1JUX1NZTUJPTChfbmlfYml0bWFwKTsKKworY29uc3QgY2hhciBfemJfZmluZG1hcFtdID0geworCTAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDQsCisJMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNSwKKwkwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw0LAorCTAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDYsCisJMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNCwKKwkwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw1LAorCTAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDQsCisJMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNywKKwkwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw0LAorCTAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDUsCisJMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNCwKKwkwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw2LAorCTAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDQsCisJMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNSwKKwkwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw0LAorCTAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDggfTsKK0VYUE9SVF9TWU1CT0woX3piX2ZpbmRtYXApOworCitjb25zdCBjaGFyIF9zYl9maW5kbWFwW10gPSB7CisJOCwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCwKKwk0LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLAorCTUsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsCisJNCwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCwKKwk2LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLAorCTQsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsCisJNSwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCwKKwk0LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLAorCTcsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsCisJNCwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCwKKwk1LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLAorCTQsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsCisJNiwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCwKKwk0LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLAorCTUsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsCisJNCwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCB9OworRVhQT1JUX1NZTUJPTChfc2JfZmluZG1hcCk7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF9wdHJhY2UuaCBiL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X3B0cmFjZS5oCmluZGV4IGEyYmUzYTkuLjEyM2RkNjYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X3B0cmFjZS5oCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X3B0cmFjZS5oCkBAIC0xLDEwICsxLDExIEBACiAjaWZuZGVmIF9QVFJBQ0UzMl9ICiAjZGVmaW5lIF9QVFJBQ0UzMl9ICiAKKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+ICAgIC8qIG5lZWRlZCBmb3IgTlVNX0NSX1dPUkRTICovCiAjaW5jbHVkZSAiY29tcGF0X2xpbnV4LmgiICAvKiBuZWVkZWQgZm9yIHBzd19jb21wYXRfdCAqLwogCiB0eXBlZGVmIHN0cnVjdCB7Ci0JX191MzIgY3JbM107CisJX191MzIgY3JbTlVNX0NSX1dPUkRTXTsKIH0gcGVyX2NyX3dvcmRzMzI7CiAKIHR5cGVkZWYgc3RydWN0IHsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvZGVidWcuYyBiL2FyY2gvczM5MC9rZXJuZWwvZGVidWcuYwppbmRleCBiYTAzZmMwLi5iZThiY2VhIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2RlYnVnLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9kZWJ1Zy5jCkBAIC02MDMsNyArNjAzLDcgQEAKIHN0YXRpYyBpbnQKIGRlYnVnX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JaW50IGkgPSAwLCByYyA9IDA7CisJaW50IGksIHJjID0gMDsKIAlmaWxlX3ByaXZhdGVfaW5mb190ICpwX2luZm87CiAJZGVidWdfaW5mb190ICpkZWJ1Z19pbmZvLCAqZGVidWdfaW5mb19zbmFwc2hvdDsKIApAQCAtNjQyLDggKzY0Miw3IEBACiAJcF9pbmZvID0ga21hbGxvYyhzaXplb2YoZmlsZV9wcml2YXRlX2luZm9fdCksCiAJCQkJCQlHRlBfS0VSTkVMKTsKIAlpZighcF9pbmZvKXsKLQkJaWYoZGVidWdfaW5mb19zbmFwc2hvdCkKLQkJCWRlYnVnX2luZm9fZnJlZShkZWJ1Z19pbmZvX3NuYXBzaG90KTsKKwkJZGVidWdfaW5mb19mcmVlKGRlYnVnX2luZm9fc25hcHNob3QpOwogCQlyYyA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwogCX0KQEAgLTY5OCw4ICs2OTcsNyBAQAogCWlmICgodWlkICE9IDApIHx8IChnaWQgIT0gMCkpCiAJCXByX3dhcm5pbmcoIlJvb3QgYmVjb21lcyB0aGUgb3duZXIgb2YgYWxsIHMzOTBkYmYgZmlsZXMgIgogCQkJICAgImluIHN5c2ZzXG4iKTsKLQlpZiAoIWluaXRpYWxpemVkKQotCQlCVUcoKTsKKwlCVUdfT04oIWluaXRpYWxpemVkKTsKIAltdXRleF9sb2NrKCZkZWJ1Z19tdXRleCk7CiAKICAgICAgICAgLyogY3JlYXRlIG5ldyBkZWJ1Z19pbmZvICovCkBAIC0xMTU2LDcgKzExNTQsNiBAQAogCWVsc2UgewogCQlkZWJ1Z2ZzX3JlbW92ZShpZC0+ZGVidWdmc19lbnRyaWVzW2ldKTsKIAkJaWQtPnZpZXdzW2ldID0gTlVMTDsKLQkJcmMgPSAwOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZC0+bG9jaywgZmxhZ3MpOwogb3V0OgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9lYXJseS5jIGIvYXJjaC9zMzkwL2tlcm5lbC9lYXJseS5jCmluZGV4IDJhMmNhMjYuLjRkMjIxYzggMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvZWFybHkuYworKysgYi9hcmNoL3MzOTAva2VybmVsL2Vhcmx5LmMKQEAgLTYsNiArNiw3IEBACiAgKgkJIEhlaWtvIENhcnN0ZW5zIDxoZWlrby5jYXJzdGVuc0BkZS5pYm0uY29tPgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgpAQCAtMjAsNiArMjEsNyBAQAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vc3lzaW5mby5oPgogI2luY2x1ZGUgPGFzbS9jcGNtZC5oPgogI2luY2x1ZGUgPGFzbS9zY2xwLmg+CiAjaW5jbHVkZSAiZW50cnkuaCIKQEAgLTE3MywxOSArMTc1LDIxIEBACiAJCXBhZ2Vfc2V0X3N0b3JhZ2Vfa2V5KGluaXRfcGZuIDw8IFBBR0VfU0hJRlQsIFBBR0VfREVGQVVMVF9LRVkpOwogfQogCitzdGF0aWMgX19pbml0ZGF0YSBzdHJ1Y3Qgc3lzaW5mb18zXzJfMiB2bW1zIF9fYWxpZ25lZChQQUdFX1NJWkUpOworCiBzdGF0aWMgbm9pbmxpbmUgX19pbml0IHZvaWQgZGV0ZWN0X21hY2hpbmVfdHlwZSh2b2lkKQogewotCXN0cnVjdCBjcHVpbmZvX1MzOTAgKmNwdWluZm8gPSAmUzM5MF9sb3djb3JlLmNwdV9kYXRhOworCS8qIE5vIFZNIGluZm9ybWF0aW9uPyBMb29rcyBsaWtlIExQQVIgKi8KKwlpZiAoc3RzaSgmdm1tcywgMywgMiwgMikgPT0gLUVOT1NZUykKKwkJcmV0dXJuOworCWlmICghdm1tcy5jb3VudCkKKwkJcmV0dXJuOwogCi0JZ2V0X2NwdV9pZCgmUzM5MF9sb3djb3JlLmNwdV9kYXRhLmNwdV9pZCk7Ci0KLQkvKiBSdW5uaW5nIHVuZGVyIHovVk0gPyAqLwotCWlmIChjcHVpbmZvLT5jcHVfaWQudmVyc2lvbiA9PSAweGZmKQotCQltYWNoaW5lX2ZsYWdzIHw9IE1BQ0hJTkVfRkxBR19WTTsKLQotCS8qIFJ1bm5pbmcgdW5kZXIgS1ZNID8gKi8KLQlpZiAoY3B1aW5mby0+Y3B1X2lkLnZlcnNpb24gPT0gMHhmZSkKKwkvKiBSdW5uaW5nIHVuZGVyIEtWTT8gSWYgbm90IHdlIGFzc3VtZSB6L1ZNICovCisJaWYgKCFtZW1jbXAodm1tcy52bVswXS5jcGksICJceGQyXHhlNVx4ZDQiLCAzKSkKIAkJbWFjaGluZV9mbGFncyB8PSBNQUNISU5FX0ZMQUdfS1ZNOworCWVsc2UKKwkJbWFjaGluZV9mbGFncyB8PSBNQUNISU5FX0ZMQUdfVk07CiB9CiAKIHN0YXRpYyBfX2luaXQgdm9pZCBlYXJseV9wZ21fY2hlY2tfaGFuZGxlcih2b2lkKQpAQCAtMzQ4LDcgKzM1Miw2IEBACiAKIAkvKiBjb3B5IGFyY2ggY29tbWFuZCBsaW5lICovCiAJc3RybGNweShib290X2NvbW1hbmRfbGluZSwgQ09NTUFORF9MSU5FLCBBUkNIX0NPTU1BTkRfTElORV9TSVpFKTsKLQlib290X2NvbW1hbmRfbGluZVtBUkNIX0NPTU1BTkRfTElORV9TSVpFIC0gMV0gPSAwOwogCiAJLyogYXBwZW5kIElQTCBQQVJNIGRhdGEgdG8gdGhlIGJvb3QgY29tbWFuZCBsaW5lICovCiAJaWYgKE1BQ0hJTkVfSVNfVk0pIHsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvaGVhZC5TIGIvYXJjaC9zMzkwL2tlcm5lbC9oZWFkLlMKaW5kZXggZWM3ZTM1Zi4uMTA0NmMyYyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9oZWFkLlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9oZWFkLlMKQEAgLTQ2OSw2ICs0NjksOCBAQAogCS5vcmcJMHgxMDAwMAogc3RhcnR1cDpiYXNyCSVyMTMsMAkJCSMgZ2V0IGJhc2UKIC5MUEcwOgorCXhjCTB4MjAwKDI1NiksMHgyMDAJIyBwYXJ0aWFsbHkgY2xlYXIgbG93Y29yZQorCXhjCTB4MzAwKDI1NiksMHgzMDAKIAogI2lmbmRlZiBDT05GSUdfTUFSQ0hfRzUKIAkjIGNoZWNrIHByb2Nlc3NvciB2ZXJzaW9uIGFnYWluc3QgTUFSQ0hfe0c1LFo5MDAsWjk5MCxaOV8xMDksWjEwfQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9oZWFkMzEuUyBiL2FyY2gvczM5MC9rZXJuZWwvaGVhZDMxLlMKaW5kZXggZGI0NzZkMS4uMmNlZDg0NiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9oZWFkMzEuUworKysgYi9hcmNoL3MzOTAva2VybmVsL2hlYWQzMS5TCkBAIC0yMCw3ICsyMCw2IEBACiAJbGN0bAklYzAsJWMxNSwuTGN0bC0uTFBHMSglcjEzKSAjIGxvYWQgY29udHJvbCByZWdpc3RlcnMKIAlsCSVyMTIsLkxwYXJtYWRkci0uTFBHMSglcjEzKSAjIHBvaW50ZXIgdG8gcGFyYW1ldGVyIGFyZWEKIAkJCQkJIyBtb3ZlIElQTCBkZXZpY2UgdG8gbG93Y29yZQotCW12YwlfX0xDX0lQTERFVig0KSxJUExfREVWSUNFLVBBUk1BUkVBKCVyMTIpCiAjCiAjIFNldHVwIHN0YWNrCiAjCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2hlYWQ2NC5TIGIvYXJjaC9zMzkwL2tlcm5lbC9oZWFkNjQuUwppbmRleCBmOWY3MGFhLi42NTY2N2IyIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2hlYWQ2NC5TCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvaGVhZDY0LlMKQEAgLTg2LDcgKzg2LDYgQEAKIAlsY3RsZwklYzAsJWMxNSwuTGN0bC0uTFBHMSglcjEzKQkjIGxvYWQgY29udHJvbCByZWdpc3RlcnMKIAlsZwklcjEyLC5McGFybWFkZHItLkxQRzEoJXIxMykJIyBwb2ludGVyIHRvIHBhcmFtZXRlciBhcmVhCiAJCQkJCSMgbW92ZSBJUEwgZGV2aWNlIHRvIGxvd2NvcmUKLQltdmMJX19MQ19JUExERVYoNCksSVBMX0RFVklDRSs0LVBBUk1BUkVBKCVyMTIpCiAJbGdoaQklcjAsX19MQ19QQVNURQogCXN0ZwklcjAsX19MQ19WRFNPX1BFUl9DUFUKICMKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvaXBsLmMgYi9hcmNoL3MzOTAva2VybmVsL2lwbC5jCmluZGV4IDJkY2Y1OTBmLi42ZjM3MTFhIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2lwbC5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvaXBsLmMKQEAgLTIzLDcgKzIzLDcgQEAKICNpbmNsdWRlIDxhc20vZWJjZGljLmg+CiAjaW5jbHVkZSA8YXNtL3Jlc2V0Lmg+CiAjaW5jbHVkZSA8YXNtL3NjbHAuaD4KLSNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vY2hlY2tzdW0uaD4KIAogI2RlZmluZSBJUExfUEFSTV9CTE9DS19WRVJTSU9OIDAKIApAQCAtNTYsMTMgKzU2LDE0IEBACiB9OwogCiAvKgotICogRml2ZSBzaHV0ZG93biBhY3Rpb24gdHlwZXMgYXJlIHN1cHBvcnRlZDoKKyAqIFRoZSBmb2xsb3dpbmcgc2h1dGRvd24gYWN0aW9uIHR5cGVzIGFyZSBzdXBwb3J0ZWQ6CiAgKi8KICNkZWZpbmUgU0hVVERPV05fQUNUSU9OX0lQTF9TVFIJCSJpcGwiCiAjZGVmaW5lIFNIVVRET1dOX0FDVElPTl9SRUlQTF9TVFIJInJlaXBsIgogI2RlZmluZSBTSFVURE9XTl9BQ1RJT05fRFVNUF9TVFIJImR1bXAiCiAjZGVmaW5lIFNIVVRET1dOX0FDVElPTl9WTUNNRF9TVFIJInZtY21kIgogI2RlZmluZSBTSFVURE9XTl9BQ1RJT05fU1RPUF9TVFIJInN0b3AiCisjZGVmaW5lIFNIVVRET1dOX0FDVElPTl9EVU1QX1JFSVBMX1NUUgkiZHVtcF9yZWlwbCIKIAogc3RydWN0IHNodXRkb3duX2FjdGlvbiB7CiAJY2hhciAqbmFtZTsKQEAgLTE0Niw2ICsxNDcsNyBAQAogc3RhdGljIHN0cnVjdCBpcGxfcGFyYW1ldGVyX2Jsb2NrICpyZWlwbF9ibG9ja19mY3A7CiBzdGF0aWMgc3RydWN0IGlwbF9wYXJhbWV0ZXJfYmxvY2sgKnJlaXBsX2Jsb2NrX2NjdzsKIHN0YXRpYyBzdHJ1Y3QgaXBsX3BhcmFtZXRlcl9ibG9jayAqcmVpcGxfYmxvY2tfbnNzOworc3RhdGljIHN0cnVjdCBpcGxfcGFyYW1ldGVyX2Jsb2NrICpyZWlwbF9ibG9ja19hY3R1YWw7CiAKIHN0YXRpYyBpbnQgZHVtcF9jYXBhYmlsaXRpZXMgPSBEVU1QX1RZUEVfTk9ORTsKIHN0YXRpYyBlbnVtIGR1bXBfdHlwZSBkdW1wX3R5cGUgPSBEVU1QX1RZUEVfTk9ORTsKQEAgLTgzNSw2ICs4MzcsNyBAQAogCQkJcmVpcGxfbWV0aG9kID0gUkVJUExfTUVUSE9EX0NDV19WTTsKIAkJZWxzZQogCQkJcmVpcGxfbWV0aG9kID0gUkVJUExfTUVUSE9EX0NDV19DSU87CisJCXJlaXBsX2Jsb2NrX2FjdHVhbCA9IHJlaXBsX2Jsb2NrX2NjdzsKIAkJYnJlYWs7CiAJY2FzZSBJUExfVFlQRV9GQ1A6CiAJCWlmIChkaWFnMzA4X3NldF93b3JrcykKQEAgLTg0Myw2ICs4NDYsNyBAQAogCQkJcmVpcGxfbWV0aG9kID0gUkVJUExfTUVUSE9EX0ZDUF9ST19WTTsKIAkJZWxzZQogCQkJcmVpcGxfbWV0aG9kID0gUkVJUExfTUVUSE9EX0ZDUF9ST19ESUFHOworCQlyZWlwbF9ibG9ja19hY3R1YWwgPSByZWlwbF9ibG9ja19mY3A7CiAJCWJyZWFrOwogCWNhc2UgSVBMX1RZUEVfRkNQX0RVTVA6CiAJCXJlaXBsX21ldGhvZCA9IFJFSVBMX01FVEhPRF9GQ1BfRFVNUDsKQEAgLTg1Miw2ICs4NTYsNyBAQAogCQkJcmVpcGxfbWV0aG9kID0gUkVJUExfTUVUSE9EX05TU19ESUFHOwogCQllbHNlCiAJCQlyZWlwbF9tZXRob2QgPSBSRUlQTF9NRVRIT0RfTlNTOworCQlyZWlwbF9ibG9ja19hY3R1YWwgPSByZWlwbF9ibG9ja19uc3M7CiAJCWJyZWFrOwogCWNhc2UgSVBMX1RZUEVfVU5LTk9XTjoKIAkJcmVpcGxfbWV0aG9kID0gUkVJUExfTUVUSE9EX0RFRkFVTFQ7CkBAIC05NjAsNyArOTY1LDYgQEAKIAkJZGlhZzMwOChESUFHMzA4X0lQTCwgTlVMTCk7CiAJCWJyZWFrOwogCWNhc2UgUkVJUExfTUVUSE9EX0ZDUF9EVU1QOgotCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KIAlkaXNhYmxlZF93YWl0KCh1bnNpZ25lZCBsb25nKSBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwpAQCAtMTA2OSwxMCArMTA3MywxMiBAQAogewogCWludCByYzsKIAotCWlmICgoIWRpYWczMDhfc2V0X3dvcmtzKSAmJiAoaXBsX2luZm8udHlwZSAhPSBJUExfVFlQRV9GQ1ApKQotCQlyZXR1cm4gMDsKLQlpZiAoKCFkaWFnMzA4X3NldF93b3JrcykgJiYgKGlwbF9pbmZvLnR5cGUgPT0gSVBMX1RZUEVfRkNQKSkKLQkJbWFrZV9hdHRyc19ybyhyZWlwbF9mY3BfYXR0cnMpOworCWlmICghZGlhZzMwOF9zZXRfd29ya3MpIHsKKwkJaWYgKGlwbF9pbmZvLnR5cGUgPT0gSVBMX1RZUEVfRkNQKQorCQkJbWFrZV9hdHRyc19ybyhyZWlwbF9mY3BfYXR0cnMpOworCQllbHNlCisJCQlyZXR1cm4gMDsKKwl9CiAKIAlyZWlwbF9ibG9ja19mY3AgPSAodm9pZCAqKSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJaWYgKCFyZWlwbF9ibG9ja19mY3ApCkBAIC0xMjUzLDcgKzEyNTksNiBAQAogCQlkaWFnMzA4KERJQUczMDhfRFVNUCwgTlVMTCk7CiAJCWJyZWFrOwogCWNhc2UgRFVNUF9NRVRIT0RfTk9ORToKLQlkZWZhdWx0OgogCQlyZXR1cm47CiAJfQogCXByaW50ayhLRVJOX0VNRVJHICJEdW1wIGZhaWxlZCFcbiIpOwpAQCAtMTMzMiw2ICsxMzM3LDQ5IEBACiAJLmluaXQJPSBkdW1wX2luaXQsCiB9OwogCitzdGF0aWMgdm9pZCBkdW1wX3JlaXBsX3J1bihzdHJ1Y3Qgc2h1dGRvd25fdHJpZ2dlciAqdHJpZ2dlcikKK3sKKwlwcmVlbXB0X2Rpc2FibGUoKTsKKwkvKgorCSAqIEJ5cGFzcyBkeW5hbWljIGFkZHJlc3MgdHJhbnNsYXRpb24gKERBVCkgd2hlbiBzdG9yaW5nIElQTCBwYXJhbWV0ZXIKKwkgKiBpbmZvcm1hdGlvbiBibG9jayBhZGRyZXNzIGFuZCBjaGVja3N1bSBpbnRvIHRoZSBwcmVmaXggYXJlYQorCSAqIChjb3JyZXNwb25kaW5nIHRvIGFic29sdXRlIGFkZHJlc3NlcyAwLTgxOTEpLgorCSAqIFdoZW4gZW5oYW5jZWQgREFUIGFwcGxpZXMgYW5kIHRoZSBTVEUgZm9ybWF0IGNvbnRyb2wgaW4gb25lLAorCSAqIHRoZSBhYnNvbHV0ZSBhZGRyZXNzIGlzIGZvcm1lZCB3aXRob3V0IHByZWZpeGluZy4gSW4gdGhpcyBjYXNlIGEKKwkgKiBub3JtYWwgc3RvcmUgKHN0Zy9zdCkgaW50byB0aGUgcHJlZml4IGFyZWEgd291bGQgbm8gbW9yZSBtYXRjaCB0bworCSAqIGFic29sdXRlIGFkZHJlc3NlcyAwLTgxOTEuCisJICovCisjaWZkZWYgQ09ORklHXzY0QklUCisJYXNtIHZvbGF0aWxlKCJzdHVyZyAlMCwlMSIKKwkJOjogImEiICgodW5zaWduZWQgbG9uZykgcmVpcGxfYmxvY2tfYWN0dWFsKSwKKwkJImEiICgmbG93Y29yZV9wdHJbc21wX3Byb2Nlc3Nvcl9pZCgpXS0+aXBpYikpOworI2Vsc2UKKwlhc20gdm9sYXRpbGUoInN0dXJhICUwLCUxIgorCQk6OiAiYSIgKCh1bnNpZ25lZCBsb25nKSByZWlwbF9ibG9ja19hY3R1YWwpLAorCQkiYSIgKCZsb3djb3JlX3B0cltzbXBfcHJvY2Vzc29yX2lkKCldLT5pcGliKSk7CisjZW5kaWYKKwlhc20gdm9sYXRpbGUoInN0dXJhICUwLCUxIgorCQk6OiAiYSIgKGNzdW1fcGFydGlhbChyZWlwbF9ibG9ja19hY3R1YWwsCisJCQkJICAgICByZWlwbF9ibG9ja19hY3R1YWwtPmhkci5sZW4sIDApKSwKKwkJImEiICgmbG93Y29yZV9wdHJbc21wX3Byb2Nlc3Nvcl9pZCgpXS0+aXBpYl9jaGVja3N1bSkpOworCXByZWVtcHRfZW5hYmxlKCk7CisJZHVtcF9ydW4odHJpZ2dlcik7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGR1bXBfcmVpcGxfaW5pdCh2b2lkKQoreworCWlmICghZGlhZzMwOF9zZXRfd29ya3MpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwllbHNlCisJCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNodXRkb3duX2FjdGlvbiBfX3JlZmRhdGEgZHVtcF9yZWlwbF9hY3Rpb24gPSB7CisJLm5hbWUJPSBTSFVURE9XTl9BQ1RJT05fRFVNUF9SRUlQTF9TVFIsCisJLmZuCT0gZHVtcF9yZWlwbF9ydW4sCisJLmluaXQJPSBkdW1wX3JlaXBsX2luaXQsCit9OworCiAvKgogICogdm1jbWQgc2h1dGRvd24gYWN0aW9uOiBUcmlnZ2VyIHZtIGNvbW1hbmQgb24gc2h1dGRvd24uCiAgKi8KQEAgLTE0MjEsNyArMTQ2OSw4IEBACiAvKiBhY3Rpb24gbGlzdCAqLwogCiBzdGF0aWMgc3RydWN0IHNodXRkb3duX2FjdGlvbiAqc2h1dGRvd25fYWN0aW9uc19saXN0W10gPSB7Ci0JJmlwbF9hY3Rpb24sICZyZWlwbF9hY3Rpb24sICZkdW1wX2FjdGlvbiwgJnZtY21kX2FjdGlvbiwgJnN0b3BfYWN0aW9ufTsKKwkmaXBsX2FjdGlvbiwgJnJlaXBsX2FjdGlvbiwgJmR1bXBfcmVpcGxfYWN0aW9uLCAmZHVtcF9hY3Rpb24sCisJJnZtY21kX2FjdGlvbiwgJnN0b3BfYWN0aW9ufTsKICNkZWZpbmUgU0hVVERPV05fQUNUSU9OU19DT1VOVCAoc2l6ZW9mKHNodXRkb3duX2FjdGlvbnNfbGlzdCkgLyBzaXplb2Yodm9pZCAqKSkKIAogLyoKQEAgLTE0MzQsMTEgKzE0ODMsMTEgQEAKIAkJICAgICAgIHNpemVfdCBsZW4pCiB7CiAJaW50IGk7CisKIAlmb3IgKGkgPSAwOyBpIDwgU0hVVERPV05fQUNUSU9OU19DT1VOVDsgaSsrKSB7CiAJCWlmICghc2h1dGRvd25fYWN0aW9uc19saXN0W2ldKQogCQkJY29udGludWU7Ci0JCWlmIChzdHJuY21wKGJ1Ziwgc2h1dGRvd25fYWN0aW9uc19saXN0W2ldLT5uYW1lLAotCQkJICAgIHN0cmxlbihzaHV0ZG93bl9hY3Rpb25zX2xpc3RbaV0tPm5hbWUpKSA9PSAwKSB7CisJCWlmIChzeXNmc19zdHJlcShidWYsIHNodXRkb3duX2FjdGlvbnNfbGlzdFtpXS0+bmFtZSkpIHsKIAkJCXRyaWdnZXItPmFjdGlvbiA9IHNodXRkb3duX2FjdGlvbnNfbGlzdFtpXTsKIAkJCXJldHVybiBsZW47CiAJCX0KQEAgLTE2NzIsNyArMTcyMSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgb25fcGFuaWNfbmIgPSB7CiAJLm5vdGlmaWVyX2NhbGwgPSBvbl9wYW5pY19ub3RpZnksCi0JLnByaW9yaXR5ID0gMCwKKwkucHJpb3JpdHkgPSBJTlRfTUlOLAogfTsKIAogdm9pZCBfX2luaXQgc2V0dXBfaXBsKHZvaWQpCkBAIC0xNjk2LDcgKzE3NDUsNiBAQAogCQkJc2l6ZW9mKGlwbF9pbmZvLmRhdGEubnNzLm5hbWUpKTsKIAkJYnJlYWs7CiAJY2FzZSBJUExfVFlQRV9VTktOT1dOOgotCWRlZmF1bHQ6CiAJCS8qIFdlIGhhdmUgbm8gaW5mbyB0byBjb3B5ICovCiAJCWJyZWFrOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvbW9kdWxlLmMgYi9hcmNoL3MzOTAva2VybmVsL21vZHVsZS5jCmluZGV4IDU5YjRlNzkuLmVlZDRhMDAgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvbW9kdWxlLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9tb2R1bGUuYwpAQCAtMzEwLDE1ICszMTAsMjAgQEAKIAkJCWluZm8tPnBsdF9pbml0aWFsaXplZCA9IDE7CiAJCX0KIAkJaWYgKHJfdHlwZSA9PSBSXzM5MF9QTFRPRkYxNiB8fAotCQkgICAgcl90eXBlID09IFJfMzkwX1BMVE9GRjMyCi0JCSAgICB8fCByX3R5cGUgPT0gUl8zOTBfUExUT0ZGNjQKLQkJCSkKKwkJICAgIHJfdHlwZSA9PSBSXzM5MF9QTFRPRkYzMiB8fAorCQkgICAgcl90eXBlID09IFJfMzkwX1BMVE9GRjY0KQogCQkJdmFsID0gbWUtPmFyY2gucGx0X29mZnNldCAtIG1lLT5hcmNoLmdvdF9vZmZzZXQgKwogCQkJCWluZm8tPnBsdF9vZmZzZXQgKyByZWxhLT5yX2FkZGVuZDsKLQkJZWxzZQotCQkJdmFsID0gIChFbGZfQWRkcikgbWUtPm1vZHVsZV9jb3JlICsKLQkJCQltZS0+YXJjaC5wbHRfb2Zmc2V0ICsgaW5mby0+cGx0X29mZnNldCArIAotCQkJCXJlbGEtPnJfYWRkZW5kIC0gbG9jOworCQllbHNlIHsKKwkJCWlmICghKChyX3R5cGUgPT0gUl8zOTBfUExUMTZEQkwgJiYKKwkJCSAgICAgICB2YWwgLSBsb2MgKyAweGZmZmZVTCA8IDB4MWZmZmZlVUwpIHx8CisJCQkgICAgICAocl90eXBlID09IFJfMzkwX1BMVDMyREJMICYmCisJCQkgICAgICAgdmFsIC0gbG9jICsgMHhmZmZmZmZmZlVMTCA8IDB4MWZmZmZmZmZlVUxMKSkpCisJCQkJdmFsID0gKEVsZl9BZGRyKSBtZS0+bW9kdWxlX2NvcmUgKworCQkJCQltZS0+YXJjaC5wbHRfb2Zmc2V0ICsKKwkJCQkJaW5mby0+cGx0X29mZnNldDsKKwkJCXZhbCArPSByZWxhLT5yX2FkZGVuZCAtIGxvYzsKKwkJfQogCQlpZiAocl90eXBlID09IFJfMzkwX1BMVDE2REJMKQogCQkJKih1bnNpZ25lZCBzaG9ydCAqKSBsb2MgPSB2YWwgPj4gMTsKIAkJZWxzZSBpZiAocl90eXBlID09IFJfMzkwX1BMVE9GRjE2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3MzOTBtYWNoLmMgYi9hcmNoL3MzOTAva2VybmVsL25taS5jCnNpbWlsYXJpdHkgaW5kZXggNjIlCnJlbmFtZSBmcm9tIGRyaXZlcnMvczM5MC9zMzkwbWFjaC5jCnJlbmFtZSB0byBhcmNoL3MzOTAva2VybmVsL25taS5jCmluZGV4IDkyYjA0MTcuLjRiZmRjNDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zMzkwbWFjaC5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvbm1pLmMKQEAgLTEsMTM3ICsxLDIzIEBACiAvKgotICogIGRyaXZlcnMvczM5MC9zMzkwbWFjaC5jCi0gKiAgIFMvMzkwIG1hY2hpbmUgY2hlY2sgaGFuZGxlcgorICogICBNYWNoaW5lIGNoZWNrIGhhbmRsZXIKICAqCi0gKiAgICBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDAsMjAwOAotICogICAgQXV0aG9yKHMpOiBJbmdvIEFkbHVuZyAoYWRsdW5nQGRlLmlibS5jb20pCi0gKgkJIE1hcnRpbiBTY2h3aWRlZnNreSAoc2Nod2lkZWZza3lAZGUuaWJtLmNvbSkKLSAqCQkgQ29ybmVsaWEgSHVjayA8Y29ybmVsaWEuaHVja0BkZS5pYm0uY29tPgorICogICAgQ29weXJpZ2h0IElCTSBDb3JwLiAyMDAwLDIwMDkKKyAqICAgIEF1dGhvcihzKTogSW5nbyBBZGx1bmcgPGFkbHVuZ0BkZS5pYm0uY29tPiwKKyAqCQkgTWFydGluIFNjaHdpZGVmc2t5IDxzY2h3aWRlZnNreUBkZS5pYm0uY29tPiwKKyAqCQkgQ29ybmVsaWEgSHVjayA8Y29ybmVsaWEuaHVja0BkZS5pYm0uY29tPiwKKyAqCQkgSGVpa28gQ2Fyc3RlbnMgPGhlaWtvLmNhcnN0ZW5zQGRlLmlibS5jb20+LAogICovCiAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+Ci0jaW5jbHVkZSA8YXNtL2V0ci5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGFzbS9sb3djb3JlLmg+Ci0jaW5jbHVkZSA8YXNtL2Npby5oPgorI2luY2x1ZGUgPGFzbS9zbXAuaD4KKyNpbmNsdWRlIDxhc20vZXRyLmg+CiAjaW5jbHVkZSA8YXNtL2NwdS5oPgotI2luY2x1ZGUgInMzOTBtYWNoLmgiCi0KLXN0YXRpYyBzdHJ1Y3Qgc2VtYXBob3JlIG1fc2VtOwotCi1zdGF0aWMgTk9SRVRfVFlQRSB2b2lkCi1zMzkwX2hhbmRsZV9kYW1hZ2UoY2hhciAqbXNnKQotewotI2lmZGVmIENPTkZJR19TTVAKLQlzbXBfc2VuZF9zdG9wKCk7Ci0jZW5kaWYKLQlkaXNhYmxlZF93YWl0KCh1bnNpZ25lZCBsb25nKSBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwotCWZvcig7Oyk7Ci19Ci0KLXN0YXRpYyBjcndfaGFuZGxlcl90IGNyd19oYW5kbGVyc1tOUl9SU0NTXTsKLQotLyoqCi0gKiBzMzkwX3JlZ2lzdGVyX2Nyd19oYW5kbGVyKCkgLSByZWdpc3RlciBhIGNoYW5uZWwgcmVwb3J0IHdvcmQgaGFuZGxlcgotICogQHJzYzogcmVwb3J0aW5nIHNvdXJjZSBjb2RlIHRvIGhhbmRsZQotICogQGhhbmRsZXI6IGhhbmRsZXIgdG8gYmUgcmVnaXN0ZXJlZAotICoKLSAqIFJldHVybnMgJTAgb24gc3VjY2VzcyBhbmQgYSBuZWdhdGl2ZSBlcnJvciB2YWx1ZSBvdGhlcndpc2UuCi0gKi8KLWludCBzMzkwX3JlZ2lzdGVyX2Nyd19oYW5kbGVyKGludCByc2MsIGNyd19oYW5kbGVyX3QgaGFuZGxlcikKLXsKLQlpZiAoKHJzYyA8IDApIHx8IChyc2MgPj0gTlJfUlNDUykpCi0JCXJldHVybiAtRUlOVkFMOwotCWlmICghY21weGNoZygmY3J3X2hhbmRsZXJzW3JzY10sIE5VTEwsIGhhbmRsZXIpKQotCQlyZXR1cm4gMDsKLQlyZXR1cm4gLUVCVVNZOwotfQotCi0vKioKLSAqIHMzOTBfdW5yZWdpc3Rlcl9jcndfaGFuZGxlcigpIC0gdW5yZWdpc3RlciBhIGNoYW5uZWwgcmVwb3J0IHdvcmQgaGFuZGxlcgotICogQHJzYzogcmVwb3J0aW5nIHNvdXJjZSBjb2RlIHRvIGhhbmRsZQotICovCi12b2lkIHMzOTBfdW5yZWdpc3Rlcl9jcndfaGFuZGxlcihpbnQgcnNjKQotewotCWlmICgocnNjIDwgMCkgfHwgKHJzYyA+PSBOUl9SU0NTKSkKLQkJcmV0dXJuOwotCXhjaGcoJmNyd19oYW5kbGVyc1tyc2NdLCBOVUxMKTsKLQlzeW5jaHJvbml6ZV9zY2hlZCgpOwotfQotCi0vKgotICogUmV0cmlldmUgQ1JXcyBhbmQgY2FsbCBmdW5jdGlvbiB0byBoYW5kbGUgZXZlbnQuCi0gKi8KLXN0YXRpYyBpbnQgczM5MF9jb2xsZWN0X2Nyd19pbmZvKHZvaWQgKnBhcmFtKQotewotCXN0cnVjdCBjcncgY3J3WzJdOwotCWludCBjY29kZTsKLQlzdHJ1Y3Qgc2VtYXBob3JlICpzZW07Ci0JdW5zaWduZWQgaW50IGNoYWluOwotCWludCBpZ25vcmU7Ci0KLQlzZW0gPSAoc3RydWN0IHNlbWFwaG9yZSAqKXBhcmFtOwotcmVwZWF0OgotCWlnbm9yZSA9IGRvd25faW50ZXJydXB0aWJsZShzZW0pOwotCWNoYWluID0gMDsKLQl3aGlsZSAoMSkgewotCQlpZiAodW5saWtlbHkoY2hhaW4gPiAxKSkgewotCQkJc3RydWN0IGNydyB0bXBfY3J3OwotCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HIiVzOiBDb2RlIGRvZXMgbm90IHN1cHBvcnQgbW9yZSAiCi0JCQkgICAgICAgInRoYW4gdHdvIGNoYWluZWQgY3J3czsgcGxlYXNlIHJlcG9ydCB0byAiCi0JCQkgICAgICAgImxpbnV4MzkwQGRlLmlibS5jb20hXG4iLCBfX2Z1bmNfXyk7Ci0JCQljY29kZSA9IHN0Y3J3KCZ0bXBfY3J3KTsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkciJXM6IGNydyByZXBvcnRzIHNsY3Q9JWQsIG9mbHc9JWQsICIKLQkJCSAgICAgICAiY2huPSVkLCByc2M9JVgsIGFuYz0lZCwgZXJjPSVYLCByc2lkPSVYXG4iLAotCQkJICAgICAgIF9fZnVuY19fLCB0bXBfY3J3LnNsY3QsIHRtcF9jcncub2ZsdywKLQkJCSAgICAgICB0bXBfY3J3LmNobiwgdG1wX2Nydy5yc2MsIHRtcF9jcncuYW5jLAotCQkJICAgICAgIHRtcF9jcncuZXJjLCB0bXBfY3J3LnJzaWQpOwotCQkJcHJpbnRrKEtFUk5fV0FSTklORyIlczogVGhpcyB3YXMgY3J3IG51bWJlciAleCBpbiB0aGUgIgotCQkJICAgICAgICJjaGFpblxuIiwgX19mdW5jX18sIGNoYWluKTsKLQkJCWlmIChjY29kZSAhPSAwKQotCQkJCWJyZWFrOwotCQkJY2hhaW4gPSB0bXBfY3J3LmNobiA/IGNoYWluICsgMSA6IDA7Ci0JCQljb250aW51ZTsKLQkJfQotCQljY29kZSA9IHN0Y3J3KCZjcndbY2hhaW5dKTsKLQkJaWYgKGNjb2RlICE9IDApCi0JCQlicmVhazsKLQkJcHJpbnRrKEtFUk5fREVCVUcgImNyd19pbmZvIDogQ1JXIHJlcG9ydHMgc2xjdD0lZCwgb2Zsdz0lZCwgIgotCQkgICAgICAgImNobj0lZCwgcnNjPSVYLCBhbmM9JWQsIGVyYz0lWCwgcnNpZD0lWFxuIiwKLQkJICAgICAgIGNyd1tjaGFpbl0uc2xjdCwgY3J3W2NoYWluXS5vZmx3LCBjcndbY2hhaW5dLmNobiwKLQkJICAgICAgIGNyd1tjaGFpbl0ucnNjLCBjcndbY2hhaW5dLmFuYywgY3J3W2NoYWluXS5lcmMsCi0JCSAgICAgICBjcndbY2hhaW5dLnJzaWQpOwotCQkvKiBDaGVjayBmb3Igb3ZlcmZsb3dzLiAqLwotCQlpZiAoY3J3W2NoYWluXS5vZmx3KSB7Ci0JCQlpbnQgaTsKLQotCQkJcHJfZGVidWcoIiVzOiBjcncgb3ZlcmZsb3cgZGV0ZWN0ZWQhXG4iLCBfX2Z1bmNfXyk7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgTlJfUlNDUzsgaSsrKSB7Ci0JCQkJaWYgKGNyd19oYW5kbGVyc1tpXSkKLQkJCQkJY3J3X2hhbmRsZXJzW2ldKE5VTEwsIE5VTEwsIDEpOwotCQkJfQotCQkJY2hhaW4gPSAwOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKGNyd1swXS5jaG4gJiYgIWNoYWluKSB7Ci0JCQljaGFpbisrOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKGNyd19oYW5kbGVyc1tjcndbY2hhaW5dLnJzY10pCi0JCQljcndfaGFuZGxlcnNbY3J3W2NoYWluXS5yc2NdKCZjcndbMF0sCi0JCQkJCQkgICAgIGNoYWluID8gJmNyd1sxXSA6IE5VTEwsCi0JCQkJCQkgICAgIDApOwotCQkvKiBjaGFpbiBpcyBhbHdheXMgMCBvciAxIGhlcmUuICovCi0JCWNoYWluID0gY3J3W2NoYWluXS5jaG4gPyBjaGFpbiArIDEgOiAwOwotCX0KLQlnb3RvIHJlcGVhdDsKLQlyZXR1cm4gMDsKLX0KKyNpbmNsdWRlIDxhc20vbm1pLmg+CisjaW5jbHVkZSA8YXNtL2Nydy5oPgogCiBzdHJ1Y3QgbWNja19zdHJ1Y3QgewogCWludCBraWxsX3Rhc2s7CkBAIC0xNDIsMTIgKzI4LDE4IEBACiAKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgbWNja19zdHJ1Y3QsIGNwdV9tY2NrKTsKIAorc3RhdGljIE5PUkVUX1RZUEUgdm9pZCBzMzkwX2hhbmRsZV9kYW1hZ2UoY2hhciAqbXNnKQoreworCXNtcF9zZW5kX3N0b3AoKTsKKwlkaXNhYmxlZF93YWl0KCh1bnNpZ25lZCBsb25nKSBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOworCXdoaWxlICgxKTsKK30KKwogLyoKICAqIE1haW4gbWFjaGluZSBjaGVjayBoYW5kbGVyIGZ1bmN0aW9uLiBXaWxsIGJlIGNhbGxlZCB3aXRoIGludGVycnVwdHMgZW5hYmxlZAogICogb3IgZGlzYWJsZWQgYW5kIG1hY2hpbmUgY2hlY2tzIGVuYWJsZWQgb3IgZGlzYWJsZWQuCiAgKi8KLXZvaWQKLXMzOTBfaGFuZGxlX21jY2sodm9pZCkKK3ZvaWQgczM5MF9oYW5kbGVfbWNjayh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IG1jY2tfc3RydWN0IG1jY2s7CkBAIC0xNjYsMjkgKzU4LDI0IEBACiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCiAJaWYgKG1jY2suY2hhbm5lbF9yZXBvcnQpCi0JCXVwKCZtX3NlbSk7Ci0KLSNpZmRlZiBDT05GSUdfTUFDSENIS19XQVJOSU5HCi0vKgotICogVGhlIHdhcm5pbmcgbWF5IHJlbWFpbiBmb3IgYSBwcm9sb25nZWQgcGVyaW9kIG9uIHRoZSBiYXJlIGlyb24uCi0gKiAoYWN0dWFsbHkgdGlsbCB0aGUgbWFjaGluZSBpcyBwb3dlcmVkIG9mZiwgb3IgdW50aWwgdGhlIHByb2JsZW0gaXMgZ29uZSkKLSAqIFNvIHdlIGp1c3Qgc3RvcCBsaXN0ZW5pbmcgZm9yIHRoZSBXQVJOSU5HIE1DSCBhbmQgcHJldmVudCBjb250aW51b3VzbHkKLSAqIGJlaW5nIGludGVycnVwdGVkLiAgT25lIGNhdmVhdCBpcyBob3dldmVyLCB0aGF0IHdlIG11c3QgZG8gdGhpcyBwZXIKLSAqIHByb2Nlc3NvciBhbmQgY2Fubm90IHVzZSB0aGUgc21wIHZlcnNpb24gb2YgY3RsX2NsZWFyX2JpdCgpLgotICogT24gVk0gd2Ugb25seSBnZXQgb25lIGludGVycnVwdCBwZXIgdmlydGFsbHkgcHJlc2VudGVkIG1hY2hpbmVjaGVjay4KLSAqIFRob3VnaCBvbmUgc3VmZmljZXMsIHdlIG1heSBnZXQgb25lIGludGVycnVwdCBwZXIgKHZpcnR1YWwpIHByb2Nlc3Nvci4KLSAqLworCQljcndfaGFuZGxlX2NoYW5uZWxfcmVwb3J0KCk7CisJLyoKKwkgKiBBIHdhcm5pbmcgbWF5IHJlbWFpbiBmb3IgYSBwcm9sb25nZWQgcGVyaW9kIG9uIHRoZSBiYXJlIGlyb24uCisJICogKGFjdHVhbGx5IHVudGlsIHRoZSBtYWNoaW5lIGlzIHBvd2VyZWQgb2ZmLCBvciB0aGUgcHJvYmxlbSBpcyBnb25lKQorCSAqIFNvIHdlIGp1c3Qgc3RvcCBsaXN0ZW5pbmcgZm9yIHRoZSBXQVJOSU5HIE1DSCBhbmQgYXZvaWQgY29udGludW91c2x5CisJICogYmVpbmcgaW50ZXJydXB0ZWQuICBPbmUgY2F2ZWF0IGlzIGhvd2V2ZXIsIHRoYXQgd2UgbXVzdCBkbyB0aGlzIHBlcgorCSAqIHByb2Nlc3NvciBhbmQgY2Fubm90IHVzZSB0aGUgc21wIHZlcnNpb24gb2YgY3RsX2NsZWFyX2JpdCgpLgorCSAqIE9uIFZNIHdlIG9ubHkgZ2V0IG9uZSBpbnRlcnJ1cHQgcGVyIHZpcnRhbGx5IHByZXNlbnRlZCBtYWNoaW5lY2hlY2suCisJICogVGhvdWdoIG9uZSBzdWZmaWNlcywgd2UgbWF5IGdldCBvbmUgaW50ZXJydXB0IHBlciAodmlydHVhbCkgY3B1LgorCSAqLwogCWlmIChtY2NrLndhcm5pbmcpIHsJLyogV0FSTklORyBwZW5kaW5nID8gKi8KIAkJc3RhdGljIGludCBtY2hjaGtfd25nX3Bvc3RlZCA9IDA7Ci0JCS8qCi0JCSAqIFVzZSBzaW5nbGUgbWFjaGluZSBjbGVhciwgYXMgd2UgY2Fubm90IGhhbmRsZSBzbXAgcmlnaHQgbm93Ci0JCSAqLworCisJCS8qIFVzZSBzaW5nbGUgY3B1IGNsZWFyLCBhcyB3ZSBjYW5ub3QgaGFuZGxlIHNtcCBoZXJlLiAqLwogCQlfX2N0bF9jbGVhcl9iaXQoMTQsIDI0KTsJLyogRGlzYWJsZSBXQVJOSU5HIE1DSCAqLwogCQlpZiAoeGNoZygmbWNoY2hrX3duZ19wb3N0ZWQsIDEpID09IDApCiAJCQlraWxsX2NhZF9waWQoU0lHUFdSLCAxKTsKIAl9Ci0jZW5kaWYKLQogCWlmIChtY2NrLmtpbGxfdGFzaykgewogCQlsb2NhbF9pcnFfZW5hYmxlKCk7CiAJCXByaW50ayhLRVJOX0VNRVJHICJtY2NrOiBUZXJtaW5hdGluZyB0YXNrIGJlY2F1c2Ugb2YgbWFjaGluZSAiCkBAIC0yMDQsOCArOTEsNyBAQAogICogcmV0dXJucyAwIGlmIGFsbCByZWdpc3RlcnMgY291bGQgYmUgdmFsaWRhdGVkCiAgKiByZXR1cm5zIDEgb3RoZXJ3aXNlCiAgKi8KLXN0YXRpYyBpbnQKLXMzOTBfcmV2YWxpZGF0ZV9yZWdpc3RlcnMoc3RydWN0IG1jaSAqbWNpKQorc3RhdGljIGludCBub3RyYWNlIHMzOTBfcmV2YWxpZGF0ZV9yZWdpc3RlcnMoc3RydWN0IG1jaSAqbWNpKQogewogCWludCBraWxsX3Rhc2s7CiAJdTY0IHRtcGNsb2NrOwpAQCAtMjE0LDIyICsxMDAsMjEgQEAKIAogCWtpbGxfdGFzayA9IDA7CiAJemVybyA9IDA7Ci0JLyogR2VuZXJhbCBwdXJwb3NlIHJlZ2lzdGVycyAqLwotCWlmICghbWNpLT5ncikKKworCWlmICghbWNpLT5ncikgewogCQkvKgogCQkgKiBHZW5lcmFsIHB1cnBvc2UgcmVnaXN0ZXJzIGNvdWxkbid0IGJlIHJlc3RvcmVkIGFuZCBoYXZlCiAJCSAqIHVua25vd24gY29udGVudHMuIFByb2Nlc3MgbmVlZHMgdG8gYmUgdGVybWluYXRlZC4KIAkJICovCiAJCWtpbGxfdGFzayA9IDE7Ci0KLQkvKiBSZXZhbGlkYXRlIGZsb2F0aW5nIHBvaW50IHJlZ2lzdGVycyAqLwotCWlmICghbWNpLT5mcCkKKwl9CisJaWYgKCFtY2ktPmZwKSB7CiAJCS8qCiAJCSAqIEZsb2F0aW5nIHBvaW50IHJlZ2lzdGVycyBjYW4ndCBiZSByZXN0b3JlZCBhbmQKIAkJICogdGhlcmVmb3JlIHRoZSBwcm9jZXNzIG5lZWRzIHRvIGJlIHRlcm1pbmF0ZWQuCiAJCSAqLwogCQlraWxsX3Rhc2sgPSAxOwotCisJfQogI2lmbmRlZiBDT05GSUdfNjRCSVQKIAlhc20gdm9sYXRpbGUoCiAJCSIJbGQJMCwwKCUwKVxuIgpAQCAtMjQ1LDkgKzEzMCw4IEBACiAJCWZwdF9jcmVnX3NhdmVfYXJlYSA9ICZTMzkwX2xvd2NvcmUuZnB0X2NyZWdfc2F2ZV9hcmVhOwogI2Vsc2UKIAkJZnB0X3NhdmVfYXJlYSA9ICh2b2lkICopIFMzOTBfbG93Y29yZS5leHRlbmRlZF9zYXZlX2FyZWFfYWRkcjsKLQkJZnB0X2NyZWdfc2F2ZV9hcmVhID0gZnB0X3NhdmVfYXJlYSsxMjg7CisJCWZwdF9jcmVnX3NhdmVfYXJlYSA9IGZwdF9zYXZlX2FyZWEgKyAxMjg7CiAjZW5kaWYKLQkJLyogRmxvYXRpbmcgcG9pbnQgY29udHJvbCByZWdpc3RlciAqLwogCQlpZiAoIW1jaS0+ZmMpIHsKIAkJCS8qCiAJCQkgKiBGbG9hdGluZyBwb2ludCBjb250cm9sIHJlZ2lzdGVyIGNhbid0IGJlIHJlc3RvcmVkLgpAQCAtMjc4LDI2ICsxNjIsMjUgQEAKIAkJCSIJbGQJMTUsMTIwKCUwKVxuIgogCQkJOiA6ICJhIiAoZnB0X3NhdmVfYXJlYSkpOwogCX0KLQogCS8qIFJldmFsaWRhdGUgYWNjZXNzIHJlZ2lzdGVycyAqLwogCWFzbSB2b2xhdGlsZSgKIAkJIglsYW0JMCwxNSwwKCUwKSIKIAkJOiA6ICJhIiAoJlMzOTBfbG93Y29yZS5hY2Nlc3NfcmVnc19zYXZlX2FyZWEpKTsKLQlpZiAoIW1jaS0+YXIpCisJaWYgKCFtY2ktPmFyKSB7CiAJCS8qCiAJCSAqIEFjY2VzcyByZWdpc3RlcnMgaGF2ZSB1bmtub3duIGNvbnRlbnRzLgogCQkgKiBUZXJtaW5hdGluZyB0YXNrLgogCQkgKi8KIAkJa2lsbF90YXNrID0gMTsKLQorCX0KIAkvKiBSZXZhbGlkYXRlIGNvbnRyb2wgcmVnaXN0ZXJzICovCi0JaWYgKCFtY2ktPmNyKQorCWlmICghbWNpLT5jcikgewogCQkvKgogCQkgKiBDb250cm9sIHJlZ2lzdGVycyBoYXZlIHVua25vd24gY29udGVudHMuCiAJCSAqIENhbid0IHJlY292ZXIgYW5kIHRoZXJlZm9yZSBzdG9wcGluZyBtYWNoaW5lLgogCQkgKi8KIAkJczM5MF9oYW5kbGVfZGFtYWdlKCJpbnZhbGlkIGNvbnRyb2wgcmVnaXN0ZXJzLiIpOwotCWVsc2UKKwl9IGVsc2UgewogI2lmZGVmIENPTkZJR182NEJJVAogCQlhc20gdm9sYXRpbGUoCiAJCQkiCWxjdGxnCTAsMTUsMCglMCkiCkBAIC0zMDcsMTIgKzE5MCwxMSBAQAogCQkJIglsY3RsCTAsMTUsMCglMCkiCiAJCQk6IDogImEiICgmUzM5MF9sb3djb3JlLmNyZWdzX3NhdmVfYXJlYSkpOwogI2VuZGlmCi0KKwl9CiAJLyoKIAkgKiBXZSBkb24ndCBldmVuIHRyeSB0byByZXZhbGlkYXRlIHRoZSBUT0QgcmVnaXN0ZXIsIHNpbmNlIHdlIHNpbXBseQogCSAqIGNhbid0IHdyaXRlIHNvbWV0aGluZyBzZW5zaWJsZSBpbnRvIHRoYXQgcmVnaXN0ZXIuCiAJICovCi0KICNpZmRlZiBDT05GSUdfNjRCSVQKIAkvKgogCSAqIFNlZSBpZiB3ZSBjYW4gcmV2YWxpZGF0ZSB0aGUgVE9EIHByb2dyYW1tYWJsZSByZWdpc3RlciB3aXRoIGl0cwpAQCAtMzMwLDcgKzIxMiw2IEBACiAJCQk6IDogImEiICgmUzM5MF9sb3djb3JlLnRvZF9wcm9ncmVnX3NhdmVfYXJlYSkKIAkJCTogIjAiLCAiY2MiKTsKICNlbmRpZgotCiAJLyogUmV2YWxpZGF0ZSBjbG9jayBjb21wYXJhdG9yIHJlZ2lzdGVyICovCiAJYXNtIHZvbGF0aWxlKAogCQkiCXN0Y2sJMCglMSlcbiIKQEAgLTM1NCwzMiArMjM1LDM1IEBACiAjZGVmaW5lIE1BWF9JUERfQ09VTlQJMjkKICNkZWZpbmUgTUFYX0lQRF9USU1FCSg1ICogNjAgKiBVU0VDX1BFUl9TRUMpIC8qIDUgbWludXRlcyAqLwogCisjZGVmaW5lIEVEX1NUUF9JU0xBTkQJNgkvKiBFeHRlcm5hbCBkYW1hZ2UgU1RQIGlzbGFuZCBjaGVjayAqLworI2RlZmluZSBFRF9TVFBfU1lOQwk3CS8qIEV4dGVybmFsIGRhbWFnZSBTVFAgc3luYyBjaGVjayAqLworI2RlZmluZSBFRF9FVFJfU1lOQwkxMgkvKiBFeHRlcm5hbCBkYW1hZ2UgRVRSIHN5bmMgY2hlY2sgKi8KKyNkZWZpbmUgRURfRVRSX1NXSVRDSAkxMwkvKiBFeHRlcm5hbCBkYW1hZ2UgRVRSIHN3aXRjaCB0byBsb2NhbCAqLworCiAvKgogICogbWFjaGluZSBjaGVjayBoYW5kbGVyLgogICovCi12b2lkCi1zMzkwX2RvX21hY2hpbmVfY2hlY2soc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit2b2lkIG5vdHJhY2UgczM5MF9kb19tYWNoaW5lX2NoZWNrKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogeworCXN0YXRpYyBpbnQgaXBkX2NvdW50OwogCXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soaXBkX2xvY2spOwogCXN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgbGFzdF9pcGQ7Ci0Jc3RhdGljIGludCBpcGRfY291bnQ7CisJc3RydWN0IG1jY2tfc3RydWN0ICptY2NrOwogCXVuc2lnbmVkIGxvbmcgbG9uZyB0bXA7CiAJc3RydWN0IG1jaSAqbWNpOwotCXN0cnVjdCBtY2NrX3N0cnVjdCAqbWNjazsKIAlpbnQgdW1vZGU7CiAKIAlsb2NrZGVwX29mZigpOwotCiAJczM5MF9pZGxlX2NoZWNrKCk7CiAKIAltY2kgPSAoc3RydWN0IG1jaSAqKSAmUzM5MF9sb3djb3JlLm1jY2tfaW50ZXJydXB0aW9uX2NvZGU7CiAJbWNjayA9ICZfX2dldF9jcHVfdmFyKGNwdV9tY2NrKTsKIAl1bW9kZSA9IHVzZXJfbW9kZShyZWdzKTsKIAotCWlmIChtY2ktPnNkKQorCWlmIChtY2ktPnNkKSB7CiAJCS8qIFN5c3RlbSBkYW1hZ2UgLT4gc3RvcHBpbmcgbWFjaGluZSAqLwogCQlzMzkwX2hhbmRsZV9kYW1hZ2UoInJlY2VpdmVkIHN5c3RlbSBkYW1hZ2UgbWFjaGluZSBjaGVjay4iKTsKLQorCX0KIAlpZiAobWNpLT5wZCkgewogCQlpZiAobWNpLT5iKSB7CiAJCQkvKiBQcm9jZXNzaW5nIGJhY2t1cCAtPiB2ZXJpZnkgaWYgd2UgY2FuIHN1cnZpdmUgdGhpcyAqLwpAQCAtNDA5LDI0ICsyOTMsMTcgQEAKIAkJCSAqIE51bGxpZnlpbmcgZXhpZ2VudCBjb25kaXRpb24sIHRoZXJlZm9yZSB3ZSBtaWdodAogCQkJICogcmV0cnkgdGhpcyBpbnN0cnVjdGlvbi4KIAkJCSAqLwotCiAJCQlzcGluX2xvY2soJmlwZF9sb2NrKTsKLQogCQkJdG1wID0gZ2V0X2Nsb2NrKCk7Ci0KIAkJCWlmICgoKHRtcCAtIGxhc3RfaXBkKSA+PiAxMikgPCBNQVhfSVBEX1RJTUUpCiAJCQkJaXBkX2NvdW50Kys7CiAJCQllbHNlCiAJCQkJaXBkX2NvdW50ID0gMTsKLQogCQkJbGFzdF9pcGQgPSB0bXA7Ci0KIAkJCWlmIChpcGRfY291bnQgPT0gTUFYX0lQRF9DT1VOVCkKIAkJCQlzMzkwX2hhbmRsZV9kYW1hZ2UoInRvbyBtYW55IGlwZCByZXRyaWVzLiIpOwotCiAJCQlzcGluX3VubG9jaygmaXBkX2xvY2spOwotCQl9Ci0JCWVsc2UgeworCQl9IGVsc2UgewogCQkJLyogUHJvY2Vzc2luZyBkYW1hZ2UgLT4gc3RvcHBpbmcgbWFjaGluZSAqLwogCQkJczM5MF9oYW5kbGVfZGFtYWdlKCJyZWNlaXZlZCBpbnN0cnVjdGlvbiBwcm9jZXNzaW5nICIKIAkJCQkJICAgImRhbWFnZSBtYWNoaW5lIGNoZWNrLiIpOwpAQCAtNDQxLDIwICszMTgsMTggQEAKIAkJCW1jY2stPmtpbGxfdGFzayA9IDE7CiAJCQltY2NrLT5tY2NrX2NvZGUgPSAqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKSBtY2k7CiAJCQlzZXRfdGhyZWFkX2ZsYWcoVElGX01DQ0tfUEVORElORyk7Ci0JCX0KLQkJZWxzZQorCQl9IGVsc2UgewogCQkJLyoKIAkJCSAqIENvdWxkbid0IHJlc3RvcmUgYWxsIHJlZ2lzdGVyIGNvbnRlbnRzIHdoaWxlIGluCiAJCQkgKiBrZXJuZWwgbW9kZSAtPiBzdG9wcGluZyBtYWNoaW5lLgogCQkJICovCiAJCQlzMzkwX2hhbmRsZV9kYW1hZ2UoInVuYWJsZSB0byByZXZhbGlkYXRlIHJlZ2lzdGVycy4iKTsKKwkJfQogCX0KLQogCWlmIChtY2ktPmNkKSB7CiAJCS8qIFRpbWluZyBmYWNpbGl0eSBkYW1hZ2UgKi8KIAkJczM5MF9oYW5kbGVfZGFtYWdlKCJUT0QgY2xvY2sgZGFtYWdlZCIpOwogCX0KLQogCWlmIChtY2ktPmVkICYmIG1jaS0+ZWMpIHsKIAkJLyogRXh0ZXJuYWwgZGFtYWdlICovCiAJCWlmIChTMzkwX2xvd2NvcmUuZXh0ZXJuYWxfZGFtYWdlX2NvZGUgJiAoMVUgPDwgRURfRVRSX1NZTkMpKQpAQCAtNDY2LDI4ICszNDEsMjMgQEAKIAkJaWYgKFMzOTBfbG93Y29yZS5leHRlcm5hbF9kYW1hZ2VfY29kZSAmICgxVSA8PCBFRF9TVFBfSVNMQU5EKSkKIAkJCXN0cF9pc2xhbmRfY2hlY2soKTsKIAl9Ci0KIAlpZiAobWNpLT5zZSkKIAkJLyogU3RvcmFnZSBlcnJvciB1bmNvcnJlY3RlZCAqLwogCQlzMzkwX2hhbmRsZV9kYW1hZ2UoInJlY2VpdmVkIHN0b3JhZ2UgZXJyb3IgdW5jb3JyZWN0ZWQgIgogCQkJCSAgICJtYWNoaW5lIGNoZWNrLiIpOwotCiAJaWYgKG1jaS0+a2UpCiAJCS8qIFN0b3JhZ2Uga2V5LWVycm9yIHVuY29ycmVjdGVkICovCiAJCXMzOTBfaGFuZGxlX2RhbWFnZSgicmVjZWl2ZWQgc3RvcmFnZSBrZXktZXJyb3IgdW5jb3JyZWN0ZWQgIgogCQkJCSAgICJtYWNoaW5lIGNoZWNrLiIpOwotCiAJaWYgKG1jaS0+ZHMgJiYgbWNpLT5mYSkKIAkJLyogU3RvcmFnZSBkZWdyYWRhdGlvbiAqLwogCQlzMzkwX2hhbmRsZV9kYW1hZ2UoInJlY2VpdmVkIHN0b3JhZ2UgZGVncmFkYXRpb24gbWFjaGluZSAiCiAJCQkJICAgImNoZWNrLiIpOwotCiAJaWYgKG1jaS0+Y3ApIHsKIAkJLyogQ2hhbm5lbCByZXBvcnQgd29yZCBwZW5kaW5nICovCiAJCW1jY2stPmNoYW5uZWxfcmVwb3J0ID0gMTsKIAkJc2V0X3RocmVhZF9mbGFnKFRJRl9NQ0NLX1BFTkRJTkcpOwogCX0KLQogCWlmIChtY2ktPncpIHsKIAkJLyogV2FybmluZyBwZW5kaW5nICovCiAJCW1jY2stPndhcm5pbmcgPSAxOwpAQCAtNDk2LDQzICszNjYsMTEgQEAKIAlsb2NrZGVwX29uKCk7CiB9CiAKLS8qCi0gKiBzMzkwX2luaXRfbWFjaGluZV9jaGVjawotICoKLSAqIGluaXRpYWxpemUgbWFjaGluZSBjaGVjayBoYW5kbGluZwotICovCi1zdGF0aWMgaW50Ci1tYWNoaW5lX2NoZWNrX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IG1hY2hpbmVfY2hlY2tfaW5pdCh2b2lkKQogewotCWluaXRfTVVURVhfTE9DS0VEKCZtX3NlbSk7CiAJY3RsX3NldF9iaXQoMTQsIDI1KTsJLyogZW5hYmxlIGV4dGVybmFsIGRhbWFnZSBNQ0ggKi8KLQljdGxfc2V0X2JpdCgxNCwgMjcpOyAgICAvKiBlbmFibGUgc3lzdGVtIHJlY292ZXJ5IE1DSCAqLwotI2lmZGVmIENPTkZJR19NQUNIQ0hLX1dBUk5JTkcKKwljdGxfc2V0X2JpdCgxNCwgMjcpOwkvKiBlbmFibGUgc3lzdGVtIHJlY292ZXJ5IE1DSCAqLwogCWN0bF9zZXRfYml0KDE0LCAyNCk7CS8qIGVuYWJsZSB3YXJuaW5nIE1DSCAqLwotI2VuZGlmCiAJcmV0dXJuIDA7CiB9Ci0KLS8qCi0gKiBJbml0aWFsaXplIHRoZSBtYWNoaW5lIGNoZWNrIGhhbmRsZXIgcmVhbGx5IGVhcmx5IHRvIGJlIGFibGUgdG8KLSAqIGNhdGNoIGFsbCBtYWNoaW5lIGNoZWNrcyB0aGF0IGhhcHBlbiBkdXJpbmcgYm9vdAotICovCiBhcmNoX2luaXRjYWxsKG1hY2hpbmVfY2hlY2tfaW5pdCk7Ci0KLS8qCi0gKiBNYWNoaW5lIGNoZWNrcyBmb3IgdGhlIGNoYW5uZWwgc3Vic3lzdGVtIG11c3QgYmUgZW5hYmxlZAotICogYWZ0ZXIgdGhlIGNoYW5uZWwgc3Vic3lzdGVtIGlzIGluaXRpYWxpemVkCi0gKi8KLXN0YXRpYyBpbnQgX19pbml0Ci1tYWNoaW5lX2NoZWNrX2Nyd19pbml0ICh2b2lkKQotewotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKLQotCXRhc2sgPSBrdGhyZWFkX3J1bihzMzkwX2NvbGxlY3RfY3J3X2luZm8sICZtX3NlbSwgImttY2hlY2siKTsKLQlpZiAoSVNfRVJSKHRhc2spKQotCQlyZXR1cm4gUFRSX0VSUih0YXNrKTsKLQljdGxfc2V0X2JpdCgxNCwgMjgpOwkvKiBlbmFibGUgY2hhbm5lbCByZXBvcnQgTUNIICovCi0JcmV0dXJuIDA7Ci19Ci0KLWRldmljZV9pbml0Y2FsbCAobWFjaGluZV9jaGVja19jcndfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvczM5MC9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IDVjZDM4YTkuLmI0OGU5NjEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0xLDE4ICsxLDEwIEBACiAvKgotICogIGFyY2gvczM5MC9rZXJuZWwvcHJvY2Vzcy5jCisgKiBUaGlzIGZpbGUgaGFuZGxlcyB0aGUgYXJjaGl0ZWN0dXJlIGRlcGVuZGVudCBwYXJ0cyBvZiBwcm9jZXNzIGhhbmRsaW5nLgogICoKLSAqICBTMzkwIHZlcnNpb24KLSAqICAgIENvcHlyaWdodCAoQykgMTk5OSBJQk0gRGV1dHNjaGxhbmQgRW50d2lja2x1bmcgR21iSCwgSUJNIENvcnBvcmF0aW9uCi0gKiAgICBBdXRob3Iocyk6IE1hcnRpbiBTY2h3aWRlZnNreSAoc2Nod2lkZWZza3lAZGUuaWJtLmNvbSksCi0gKiAgICAgICAgICAgICAgIEhhcnRtdXQgUGVubmVyIChocEBkZS5pYm0uY29tKSwKLSAqICAgICAgICAgICAgICAgRGVuaXMgSm9zZXBoIEJhcnJvdyAoZGpiYXJyb3dAZGUuaWJtLmNvbSxiYXJyb3dfZGpAeWFob28uY29tKSwKLSAqCi0gKiAgRGVyaXZlZCBmcm9tICJhcmNoL2kzODYva2VybmVsL3Byb2Nlc3MuYyIKLSAqICAgIENvcHlyaWdodCAoQykgMTk5NSwgTGludXMgVG9ydmFsZHMKLSAqLwotCi0vKgotICogVGhpcyBmaWxlIGhhbmRsZXMgdGhlIGFyY2hpdGVjdHVyZS1kZXBlbmRlbnQgcGFydHMgb2YgcHJvY2VzcyBoYW5kbGluZy4uCisgKiAgICBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTksMjAwOQorICogICAgQXV0aG9yKHMpOiBNYXJ0aW4gU2Nod2lkZWZza3kgPHNjaHdpZGVmc2t5QGRlLmlibS5jb20+LAorICoJCSBIYXJ0bXV0IFBlbm5lciA8aHBAZGUuaWJtLmNvbT4sCisgKgkJIERlbmlzIEpvc2VwaCBCYXJyb3csCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CkBAIC00Nyw2ICszOSw3IEBACiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vdGltZXIuaD4KKyNpbmNsdWRlIDxhc20vbm1pLmg+CiAjaW5jbHVkZSAiZW50cnkuaCIKIAogYXNtbGlua2FnZSB2b2lkIHJldF9mcm9tX2Zvcmsodm9pZCkgYXNtICgicmV0X2Zyb21fZm9yayIpOwpAQCAtNzYsNyArNjksNiBAQAogCXJldHVybiBzZi0+Z3Byc1s4XTsKIH0KIAotZXh0ZXJuIHZvaWQgczM5MF9oYW5kbGVfbWNjayh2b2lkKTsKIC8qCiAgKiBUaGUgaWRsZSBsb29wIG9uIGEgUzM5MC4uLgogICovCkBAIC0xNDksNiArMTQxLDcgQEAKIAlyZXR1cm4gZG9fZm9yayhmbGFncyB8IENMT05FX1ZNIHwgQ0xPTkVfVU5UUkFDRUQsCiAJCSAgICAgICAwLCAmcmVncywgMCwgTlVMTCwgTlVMTCk7CiB9CitFWFBPUlRfU1lNQk9MKGtlcm5lbF90aHJlYWQpOwogCiAvKgogICogRnJlZSBjdXJyZW50IHRocmVhZCBkYXRhIHN0cnVjdHVyZXMgZXRjLi4KQEAgLTE2OCwzNCArMTYxLDM1IEBACiB9CiAKIGludCBjb3B5X3RocmVhZChpbnQgbnIsIHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsIHVuc2lnbmVkIGxvbmcgbmV3X3N0YWNrcCwKLQl1bnNpZ25lZCBsb25nIHVudXNlZCwKLSAgICAgICAgc3RydWN0IHRhc2tfc3RydWN0ICogcCwgc3RydWN0IHB0X3JlZ3MgKiByZWdzKQorCQl1bnNpZ25lZCBsb25nIHVudXNlZCwKKwkJc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLSAgICAgICAgc3RydWN0IGZha2VfZnJhbWUKLSAgICAgICAgICB7Ci0JICAgIHN0cnVjdCBzdGFja19mcmFtZSBzZjsKLSAgICAgICAgICAgIHN0cnVjdCBwdF9yZWdzIGNoaWxkcmVnczsKLSAgICAgICAgICB9ICpmcmFtZTsKKwlzdHJ1Y3QgdGhyZWFkX2luZm8gKnRpOworCXN0cnVjdCBmYWtlX2ZyYW1lCisJeworCQlzdHJ1Y3Qgc3RhY2tfZnJhbWUgc2Y7CisJCXN0cnVjdCBwdF9yZWdzIGNoaWxkcmVnczsKKwl9ICpmcmFtZTsKIAotICAgICAgICBmcmFtZSA9IGNvbnRhaW5lcl9vZih0YXNrX3B0X3JlZ3MocCksIHN0cnVjdCBmYWtlX2ZyYW1lLCBjaGlsZHJlZ3MpOwotICAgICAgICBwLT50aHJlYWQua3NwID0gKHVuc2lnbmVkIGxvbmcpIGZyYW1lOworCWZyYW1lID0gY29udGFpbmVyX29mKHRhc2tfcHRfcmVncyhwKSwgc3RydWN0IGZha2VfZnJhbWUsIGNoaWxkcmVncyk7CisJcC0+dGhyZWFkLmtzcCA9ICh1bnNpZ25lZCBsb25nKSBmcmFtZTsKIAkvKiBTdG9yZSBhY2Nlc3MgcmVnaXN0ZXJzIHRvIGtlcm5lbCBzdGFjayBvZiBuZXcgcHJvY2Vzcy4gKi8KLSAgICAgICAgZnJhbWUtPmNoaWxkcmVncyA9ICpyZWdzOworCWZyYW1lLT5jaGlsZHJlZ3MgPSAqcmVnczsKIAlmcmFtZS0+Y2hpbGRyZWdzLmdwcnNbMl0gPSAwOwkvKiBjaGlsZCByZXR1cm5zIDAgb24gZm9yay4gKi8KLSAgICAgICAgZnJhbWUtPmNoaWxkcmVncy5ncHJzWzE1XSA9IG5ld19zdGFja3A7Ci0gICAgICAgIGZyYW1lLT5zZi5iYWNrX2NoYWluID0gMDsKKwlmcmFtZS0+Y2hpbGRyZWdzLmdwcnNbMTVdID0gbmV3X3N0YWNrcDsKKwlmcmFtZS0+c2YuYmFja19jaGFpbiA9IDA7CiAKLSAgICAgICAgLyogbmV3IHJldHVybiBwb2ludCBpcyByZXRfZnJvbV9mb3JrICovCi0gICAgICAgIGZyYW1lLT5zZi5ncHJzWzhdID0gKHVuc2lnbmVkIGxvbmcpIHJldF9mcm9tX2Zvcms7CisJLyogbmV3IHJldHVybiBwb2ludCBpcyByZXRfZnJvbV9mb3JrICovCisJZnJhbWUtPnNmLmdwcnNbOF0gPSAodW5zaWduZWQgbG9uZykgcmV0X2Zyb21fZm9yazsKIAotICAgICAgICAvKiBmYWtlIHJldHVybiBzdGFjayBmb3IgcmVzdW1lKCksIGRvbid0IGdvIGJhY2sgdG8gc2NoZWR1bGUgKi8KLSAgICAgICAgZnJhbWUtPnNmLmdwcnNbOV0gPSAodW5zaWduZWQgbG9uZykgZnJhbWU7CisJLyogZmFrZSByZXR1cm4gc3RhY2sgZm9yIHJlc3VtZSgpLCBkb24ndCBnbyBiYWNrIHRvIHNjaGVkdWxlICovCisJZnJhbWUtPnNmLmdwcnNbOV0gPSAodW5zaWduZWQgbG9uZykgZnJhbWU7CiAKIAkvKiBTYXZlIGFjY2VzcyByZWdpc3RlcnMgdG8gbmV3IHRocmVhZCBzdHJ1Y3R1cmUuICovCiAJc2F2ZV9hY2Nlc3NfcmVncygmcC0+dGhyZWFkLmFjcnNbMF0pOwogCiAjaWZuZGVmIENPTkZJR182NEJJVAotICAgICAgICAvKgorCS8qCiAJICogc2F2ZSBmcHJzIHRvIGN1cnJlbnQtPnRocmVhZC5mcF9yZWdzIHRvIG1lcmdlIHRoZW0gd2l0aAogCSAqIHRoZSBlbXVsYXRlZCByZWdpc3RlcnMgYW5kIHRoZW4gY29weSB0aGUgcmVzdWx0IHRvIHRoZSBjaGlsZC4KIAkgKi8KQEAgLTIyMCwxMCArMjE0LDEzIEBACiAjZW5kaWYgLyogQ09ORklHXzY0QklUICovCiAJLyogc3RhcnQgbmV3IHByb2Nlc3Mgd2l0aCBhcjQgcG9pbnRpbmcgdG8gdGhlIGNvcnJlY3QgYWRkcmVzcyBzcGFjZSAqLwogCXAtPnRocmVhZC5tbV9zZWdtZW50ID0gZ2V0X2ZzKCk7Ci0gICAgICAgIC8qIERvbid0IGNvcHkgZGVidWcgcmVnaXN0ZXJzICovCi0gICAgICAgIG1lbXNldCgmcC0+dGhyZWFkLnBlcl9pbmZvLDAsc2l6ZW9mKHAtPnRocmVhZC5wZXJfaW5mbykpOwotCi0gICAgICAgIHJldHVybiAwOworCS8qIERvbid0IGNvcHkgZGVidWcgcmVnaXN0ZXJzICovCisJbWVtc2V0KCZwLT50aHJlYWQucGVyX2luZm8sIDAsIHNpemVvZihwLT50aHJlYWQucGVyX2luZm8pKTsKKwkvKiBJbml0aWFsaXplIHBlciB0aHJlYWQgdXNlciBhbmQgc3lzdGVtIHRpbWVyIHZhbHVlcyAqLworCXRpID0gdGFza190aHJlYWRfaW5mbyhwKTsKKwl0aS0+dXNlcl90aW1lciA9IDA7CisJdGktPnN5c3RlbV90aW1lciA9IDA7CisJcmV0dXJuIDA7CiB9CiAKIFNZU0NBTExfREVGSU5FMChmb3JrKQpAQCAtMzExLDcgKzMwOCw3IEBACiBpbnQgZHVtcF9mcHUgKHN0cnVjdCBwdF9yZWdzICogcmVncywgczM5MF9mcF9yZWdzICpmcHJlZ3MpCiB7CiAjaWZuZGVmIENPTkZJR182NEJJVAotICAgICAgICAvKgorCS8qCiAJICogc2F2ZSBmcHJzIHRvIGN1cnJlbnQtPnRocmVhZC5mcF9yZWdzIHRvIG1lcmdlIHRoZW0gd2l0aAogCSAqIHRoZSBlbXVsYXRlZCByZWdpc3RlcnMgYW5kIHRoZW4gY29weSB0aGUgcmVzdWx0IHRvIHRoZSBkdW1wLgogCSAqLwpAQCAtMzIyLDYgKzMxOSw3IEBACiAjZW5kaWYgLyogQ09ORklHXzY0QklUICovCiAJcmV0dXJuIDE7CiB9CitFWFBPUlRfU1lNQk9MKGR1bXBfZnB1KTsKIAogdW5zaWduZWQgbG9uZyBnZXRfd2NoYW4oc3RydWN0IHRhc2tfc3RydWN0ICpwKQogewpAQCAtMzQ2LDQgKzM0NCwzIEBACiAJfQogCXJldHVybiAwOwogfQotCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3Byb2Nlc3Nvci5jIGIvYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzb3IuYwppbmRleCA4MmMxODcyLi44MDJjOGFiIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3Byb2Nlc3Nvci5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvcHJvY2Vzc29yLmMKQEAgLTE4LDEwICsxOCwxMSBAQAogI2luY2x1ZGUgPGFzbS9sb3djb3JlLmg+CiAjaW5jbHVkZSA8YXNtL3BhcmFtLmg+CiAKLXZvaWQgX19jcHVpbml0IHByaW50X2NwdV9pbmZvKHN0cnVjdCBjcHVpbmZvX1MzOTAgKmNwdWluZm8pCit2b2lkIF9fY3B1aW5pdCBwcmludF9jcHVfaW5mbyh2b2lkKQogewogCXByX2luZm8oIlByb2Nlc3NvciAlZCBzdGFydGVkLCBhZGRyZXNzICVkLCBpZGVudGlmaWNhdGlvbiAlMDZYXG4iLAotCQljcHVpbmZvLT5jcHVfbnIsIGNwdWluZm8tPmNwdV9hZGRyLCBjcHVpbmZvLT5jcHVfaWQuaWRlbnQpOworCQlTMzkwX2xvd2NvcmUuY3B1X25yLCBTMzkwX2xvd2NvcmUuY3B1X2FkZHIsCisJCVMzOTBfbG93Y29yZS5jcHVfaWQuaWRlbnQpOwogfQogCiAvKgpAQCAtMzAsNDggKzMxLDQ2IEBACiAKIHN0YXRpYyBpbnQgc2hvd19jcHVpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKLQlzdGF0aWMgY29uc3QgY2hhciAqaHdjYXBfc3RyWzhdID0geworCXN0YXRpYyBjb25zdCBjaGFyICpod2NhcF9zdHJbOV0gPSB7CiAJCSJlc2FuMyIsICJ6YXJjaCIsICJzdGZsZSIsICJtc2EiLCAibGRpc3AiLCAiZWltbSIsICJkZnAiLAotCQkiZWRhdCIKKwkJImVkYXQiLCAiZXRmM2VoIgogCX07Ci0gICAgICAgc3RydWN0IGNwdWluZm9fUzM5MCAqY3B1aW5mbzsKLSAgICAgICB1bnNpZ25lZCBsb25nIG4gPSAodW5zaWduZWQgbG9uZykgdiAtIDE7Ci0gICAgICAgaW50IGk7CisJc3RydWN0IF9sb3djb3JlICpsYzsKKwl1bnNpZ25lZCBsb25nIG4gPSAodW5zaWduZWQgbG9uZykgdiAtIDE7CisJaW50IGk7CiAKLSAgICAgICBzMzkwX2FkanVzdF9qaWZmaWVzKCk7Ci0gICAgICAgcHJlZW1wdF9kaXNhYmxlKCk7Ci0gICAgICAgaWYgKCFuKSB7Ci0JICAgICAgIHNlcV9wcmludGYobSwgInZlbmRvcl9pZCAgICAgICA6IElCTS9TMzkwXG4iCi0JCQkgICIjIHByb2Nlc3NvcnMgICAgOiAlaVxuIgotCQkJICAiYm9nb21pcHMgcGVyIGNwdTogJWx1LiUwMmx1XG4iLAotCQkJICBudW1fb25saW5lX2NwdXMoKSwgbG9vcHNfcGVyX2ppZmZ5Lyg1MDAwMDAvSFopLAotCQkJICAobG9vcHNfcGVyX2ppZmZ5Lyg1MDAwL0haKSklMTAwKTsKLQkgICAgICAgc2VxX3B1dHMobSwgImZlYXR1cmVzXHQ6ICIpOwotCSAgICAgICBmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQotCQkgICAgICAgaWYgKGh3Y2FwX3N0cltpXSAmJiAoZWxmX2h3Y2FwICYgKDFVTCA8PCBpKSkpCi0JCQkgICAgICAgc2VxX3ByaW50ZihtLCAiJXMgIiwgaHdjYXBfc3RyW2ldKTsKLQkgICAgICAgc2VxX3B1dHMobSwgIlxuIik7Ci0gICAgICAgfQorCXMzOTBfYWRqdXN0X2ppZmZpZXMoKTsKKwlwcmVlbXB0X2Rpc2FibGUoKTsKKwlpZiAoIW4pIHsKKwkJc2VxX3ByaW50ZihtLCAidmVuZG9yX2lkICAgICAgIDogSUJNL1MzOTBcbiIKKwkJCSAgICIjIHByb2Nlc3NvcnMgICAgOiAlaVxuIgorCQkJICAgImJvZ29taXBzIHBlciBjcHU6ICVsdS4lMDJsdVxuIiwKKwkJCSAgIG51bV9vbmxpbmVfY3B1cygpLCBsb29wc19wZXJfamlmZnkvKDUwMDAwMC9IWiksCisJCQkgICAobG9vcHNfcGVyX2ppZmZ5Lyg1MDAwL0haKSklMTAwKTsKKwkJc2VxX3B1dHMobSwgImZlYXR1cmVzXHQ6ICIpOworCQlmb3IgKGkgPSAwOyBpIDwgOTsgaSsrKQorCQkJaWYgKGh3Y2FwX3N0cltpXSAmJiAoZWxmX2h3Y2FwICYgKDFVTCA8PCBpKSkpCisJCQkJc2VxX3ByaW50ZihtLCAiJXMgIiwgaHdjYXBfc3RyW2ldKTsKKwkJc2VxX3B1dHMobSwgIlxuIik7CisJfQogCi0gICAgICAgaWYgKGNwdV9vbmxpbmUobikpIHsKKwlpZiAoY3B1X29ubGluZShuKSkgewogI2lmZGVmIENPTkZJR19TTVAKLQkgICAgICAgaWYgKHNtcF9wcm9jZXNzb3JfaWQoKSA9PSBuKQotCQkgICAgICAgY3B1aW5mbyA9ICZTMzkwX2xvd2NvcmUuY3B1X2RhdGE7Ci0JICAgICAgIGVsc2UKLQkJICAgICAgIGNwdWluZm8gPSAmbG93Y29yZV9wdHJbbl0tPmNwdV9kYXRhOworCQlsYyA9IChzbXBfcHJvY2Vzc29yX2lkKCkgPT0gbikgPworCQkJJlMzOTBfbG93Y29yZSA6IGxvd2NvcmVfcHRyW25dOwogI2Vsc2UKLQkgICAgICAgY3B1aW5mbyA9ICZTMzkwX2xvd2NvcmUuY3B1X2RhdGE7CisJCWxjID0gJlMzOTBfbG93Y29yZTsKICNlbmRpZgotCSAgICAgICBzZXFfcHJpbnRmKG0sICJwcm9jZXNzb3IgJWxpOiAiCi0JCQkgICJ2ZXJzaW9uID0gJTAyWCwgICIKLQkJCSAgImlkZW50aWZpY2F0aW9uID0gJTA2WCwgICIKLQkJCSAgIm1hY2hpbmUgPSAlMDRYXG4iLAotCQkJICBuLCBjcHVpbmZvLT5jcHVfaWQudmVyc2lvbiwKLQkJCSAgY3B1aW5mby0+Y3B1X2lkLmlkZW50LAotCQkJICBjcHVpbmZvLT5jcHVfaWQubWFjaGluZSk7Ci0gICAgICAgfQotICAgICAgIHByZWVtcHRfZW5hYmxlKCk7Ci0gICAgICAgcmV0dXJuIDA7CisJCXNlcV9wcmludGYobSwgInByb2Nlc3NvciAlbGk6ICIKKwkJCSAgICJ2ZXJzaW9uID0gJTAyWCwgICIKKwkJCSAgICJpZGVudGlmaWNhdGlvbiA9ICUwNlgsICAiCisJCQkgICAibWFjaGluZSA9ICUwNFhcbiIsCisJCQkgICBuLCBsYy0+Y3B1X2lkLnZlcnNpb24sCisJCQkgICBsYy0+Y3B1X2lkLmlkZW50LAorCQkJICAgbGMtPmNwdV9pZC5tYWNoaW5lKTsKKwl9CisJcHJlZW1wdF9lbmFibGUoKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgKmNfc3RhcnQoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKnBvcykKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvcmVpcGw2NC5TIGIvYXJjaC9zMzkwL2tlcm5lbC9yZWlwbDY0LlMKaW5kZXggYzQxOTMwNC4uNzc0MTQ3OCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9yZWlwbDY0LlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9yZWlwbDY0LlMKQEAgLTEsMTAgKzEsNyBAQAogLyoKLSAqICBhcmNoL3MzOTAva2VybmVsL3JlaXBsLlMKLSAqCi0gKiAgUzM5MCB2ZXJzaW9uCi0gKiAgICBDb3B5cmlnaHQgKEMpIDIwMDAgSUJNIERldXRzY2hsYW5kIEVudHdpY2tsdW5nIEdtYkgsIElCTSBDb3Jwb3JhdGlvbgotICogICAgQXV0aG9yKHMpOiBIb2xnZXIgU21vbGluc2tpIChIb2xnZXIuU21vbGluc2tpQGRlLmlibS5jb20pCi0JCSBEZW5pcyBKb3NlcGggQmFycm93IChkamJhcnJvd0BkZS5pYm0uY29tLGJhcnJvd19kakB5YWhvby5jb20pCisgKiAgICBDb3B5cmlnaHQgSUJNIENvcnAgMjAwMCwyMDA5CisgKiAgICBBdXRob3Iocyk6IEhvbGdlciBTbW9saW5za2kgPEhvbGdlci5TbW9saW5za2lAZGUuaWJtLmNvbT4sCisgKgkJIERlbmlzIEpvc2VwaCBCYXJyb3csCiAgKi8KIAogI2luY2x1ZGUgPGFzbS9sb3djb3JlLmg+CkBAIC0zMCw3ICsyNyw3IEBACiAJCW12YwlfX0xDX1BSRUZJWF9TQVZFX0FSRUEtMHgxMDAwKDQsJXIxKSwwKCVyMTApCiAJCXN0ZnBjCV9fTENfRlBfQ1JFR19TQVZFX0FSRUEtMHgxMDAwKCVyMSkKIAkJc3Rja2MJLkxjbGtjbXAtLkxwZzAoJXIxMykKLQkJbXZjCV9fTENfQ0xPQ0tfQ09NUF9TQVZFX0FSRUEtMHgxMDAwKDgsJXIxKSwuTGNsa2NtcC0uTHBnMCglcjEzKQorCQltdmMJX19MQ19DTE9DS19DT01QX1NBVkVfQVJFQS0weDEwMDAoNywlcjEpLC5MY2xrY21wLS5McGcwKCVyMTMpCiAJCXN0cHQJX19MQ19DUFVfVElNRVJfU0FWRV9BUkVBLTB4MTAwMCglcjEpCiAJCXN0ZwklcjEzLCBfX0xDX1BTV19TQVZFX0FSRUEtMHgxMDAwKzgoJXIxKQogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3MzOTBfa3N5bXMuYyBiL2FyY2gvczM5MC9rZXJuZWwvczM5MF9rc3ltcy5jCmluZGV4IDQ2YjkwY2IuLjY1NmZjYmIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvczM5MF9rc3ltcy5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvczM5MF9rc3ltcy5jCkBAIC0xLDQ5ICsxLDUgQEAKLS8qCi0gKiAgYXJjaC9zMzkwL2tlcm5lbC9zMzkwX2tzeW1zLmMKLSAqCi0gKiAgUzM5MCB2ZXJzaW9uCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9oaWdodWlkLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9zbXAuaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGFzbS9jaGVja3N1bS5oPgotI2luY2x1ZGUgPGFzbS9jcGNtZC5oPgotI2luY2x1ZGUgPGFzbS9kZWxheS5oPgotI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+Ci0jaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL2Z0cmFjZS5oPgotI2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1QKLSNpbmNsdWRlIDxuZXQvYXJwLmg+Ci0jZW5kaWYKLQotLyoKLSAqIG1lbW9yeSBtYW5hZ2VtZW50Ci0gKi8KLUVYUE9SVF9TWU1CT0woX29pX2JpdG1hcCk7Ci1FWFBPUlRfU1lNQk9MKF9uaV9iaXRtYXApOwotRVhQT1JUX1NZTUJPTChfemJfZmluZG1hcCk7Ci1FWFBPUlRfU1lNQk9MKF9zYl9maW5kbWFwKTsKLQotLyoKLSAqIGJpbmZtdF9lbGYgbG9hZGVyIAotICovCi1leHRlcm4gaW50IGR1bXBfZnB1IChzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MsIHMzOTBfZnBfcmVncyAqZnByZWdzKTsKLUVYUE9SVF9TWU1CT0woZHVtcF9mcHUpOwotRVhQT1JUX1NZTUJPTChlbXB0eV96ZXJvX3BhZ2UpOwotCi0vKgotICogbWlzYy4KLSAqLwotRVhQT1JUX1NZTUJPTChtYWNoaW5lX2ZsYWdzKTsKLUVYUE9SVF9TWU1CT0woX191ZGVsYXkpOwotRVhQT1JUX1NZTUJPTChrZXJuZWxfdGhyZWFkKTsKLUVYUE9SVF9TWU1CT0woY3N1bV9mb2xkKTsKLUVYUE9SVF9TWU1CT0woY29uc29sZV9tb2RlKTsKLUVYUE9SVF9TWU1CT0woY29uc29sZV9kZXZubyk7Ci1FWFBPUlRfU1lNQk9MKGNvbnNvbGVfaXJxKTsKIAogI2lmZGVmIENPTkZJR19GVU5DVElPTl9UUkFDRVIKIEVYUE9SVF9TWU1CT0woX21jb3VudCk7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3NldHVwLmMgYi9hcmNoL3MzOTAva2VybmVsL3NldHVwLmMKaW5kZXggYzVjZmI2MS4uMDYyMDFiOSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvc2V0dXAuYwpAQCAtNzQsOSArNzQsMTcgQEAKICAqIE1hY2hpbmUgc2V0dXAuLgogICovCiB1bnNpZ25lZCBpbnQgY29uc29sZV9tb2RlID0gMDsKK0VYUE9SVF9TWU1CT0woY29uc29sZV9tb2RlKTsKKwogdW5zaWduZWQgaW50IGNvbnNvbGVfZGV2bm8gPSAtMTsKK0VYUE9SVF9TWU1CT0woY29uc29sZV9kZXZubyk7CisKIHVuc2lnbmVkIGludCBjb25zb2xlX2lycSA9IC0xOworRVhQT1JUX1NZTUJPTChjb25zb2xlX2lycSk7CisKIHVuc2lnbmVkIGxvbmcgbWFjaGluZV9mbGFnczsKK0VYUE9SVF9TWU1CT0wobWFjaGluZV9mbGFncyk7CisKIHVuc2lnbmVkIGxvbmcgZWxmX2h3Y2FwID0gMDsKIGNoYXIgZWxmX3BsYXRmb3JtW0VMRl9QTEFURk9STV9TSVpFXTsKIApAQCAtODYsNiArOTQsMTAgQEAKIGludCBfX2luaXRkYXRhIG1lbW9yeV9lbmRfc2V0OwogdW5zaWduZWQgbG9uZyBfX2luaXRkYXRhIG1lbW9yeV9lbmQ7CiAKKy8qIEFuIGFycmF5IHdpdGggYSBwb2ludGVyIHRvIHRoZSBsb3djb3JlIG9mIGV2ZXJ5IENQVS4gKi8KK3N0cnVjdCBfbG93Y29yZSAqbG93Y29yZV9wdHJbTlJfQ1BVU107CitFWFBPUlRfU1lNQk9MKGxvd2NvcmVfcHRyKTsKKwogLyoKICAqIFRoaXMgaXMgc2V0IHVwIGJ5IHRoZSBzZXR1cC1yb3V0aW5lIGF0IGJvb3QtdGltZQogICogZm9yIFMzOTAgbmVlZCB0byBmaW5kIG91dCwgd2hhdCB3ZSBoYXZlIHRvIHNldHVwCkBAIC0xMDksMTMgKzEyMSwxMCBAQAogICovCiB2b2lkIF9fY3B1aW5pdCBjcHVfaW5pdCh2b2lkKQogewotICAgICAgICBpbnQgYWRkciA9IGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpOwotCiAgICAgICAgIC8qCiAgICAgICAgICAqIFN0b3JlIHByb2Nlc3NvciBpZCBpbiBsb3djb3JlICh1c2VkIGUuZy4gaW4gdGltZXJfaW50ZXJydXB0KQogICAgICAgICAgKi8KLQlnZXRfY3B1X2lkKCZTMzkwX2xvd2NvcmUuY3B1X2RhdGEuY3B1X2lkKTsKLSAgICAgICAgUzM5MF9sb3djb3JlLmNwdV9kYXRhLmNwdV9hZGRyID0gYWRkcjsKKwlnZXRfY3B1X2lkKCZTMzkwX2xvd2NvcmUuY3B1X2lkKTsKIAogICAgICAgICAvKgogICAgICAgICAgKiBGb3JjZSBGUFUgaW5pdGlhbGl6YXRpb246CkBAIC0xMjUsOCArMTM0LDcgQEAKIAogCWF0b21pY19pbmMoJmluaXRfbW0ubW1fY291bnQpOwogCWN1cnJlbnQtPmFjdGl2ZV9tbSA9ICZpbml0X21tOwotICAgICAgICBpZiAoY3VycmVudC0+bW0pCi0gICAgICAgICAgICAgICAgQlVHKCk7CisJQlVHX09OKGN1cnJlbnQtPm1tKTsKICAgICAgICAgZW50ZXJfbGF6eV90bGIoJmluaXRfbW0sIGN1cnJlbnQpOwogfQogCkBAIC0yMTcsNyArMjI1LDcgQEAKIAl9CiB9CiAKLSNpZiBkZWZpbmVkKENPTkZJR19aRkNQRFVNUCkgfHwgZGVmaW5lZChDT05GSUdfWkZDUERVTVBfTU9EVUxFKQorI2lmZGVmIENPTkZJR19aRkNQRFVNUAogc3RhdGljIHZvaWQgX19pbml0IHNldHVwX3pmY3BkdW1wKHVuc2lnbmVkIGludCBjb25zb2xlX2Rldm5vKQogewogCXN0YXRpYyBjaGFyIHN0cls0MV07CkBAIC0yODksMTEgKzI5Nyw3IEBACiBlYXJseV9wYXJhbSgibWVtIiwgZWFybHlfcGFyc2VfbWVtKTsKIAogI2lmZGVmIENPTkZJR19TMzkwX1NXSVRDSF9BTU9ERQotI2lmZGVmIENPTkZJR19QR1NURQotdW5zaWduZWQgaW50IHN3aXRjaF9hbW9kZSA9IDE7Ci0jZWxzZQogdW5zaWduZWQgaW50IHN3aXRjaF9hbW9kZSA9IDA7Ci0jZW5kaWYKIEVYUE9SVF9TWU1CT0xfR1BMKHN3aXRjaF9hbW9kZSk7CiAKIHN0YXRpYyBpbnQgc2V0X2Ftb2RlX2FuZF91YWNjZXNzKHVuc2lnbmVkIGxvbmcgdXNlcl9hbW9kZSwKQEAgLTQxNCw3ICs0MTgsNiBAQAogCQlQU1dfQUREUl9BTU9ERSB8ICh1bnNpZ25lZCBsb25nKSBtY2NrX2ludF9oYW5kbGVyOwogCWxjLT5pb19uZXdfcHN3Lm1hc2sgPSBwc3dfa2VybmVsX2JpdHM7CiAJbGMtPmlvX25ld19wc3cuYWRkciA9IFBTV19BRERSX0FNT0RFIHwgKHVuc2lnbmVkIGxvbmcpIGlvX2ludF9oYW5kbGVyOwotCWxjLT5pcGxfZGV2aWNlID0gUzM5MF9sb3djb3JlLmlwbF9kZXZpY2U7CiAJbGMtPmNsb2NrX2NvbXBhcmF0b3IgPSAtMVVMTDsKIAlsYy0+a2VybmVsX3N0YWNrID0gKCh1bnNpZ25lZCBsb25nKSAmaW5pdF90aHJlYWRfdW5pb24pICsgVEhSRUFEX1NJWkU7CiAJbGMtPmFzeW5jX3N0YWNrID0gKHVuc2lnbmVkIGxvbmcpCkBAIC00MzQsNiArNDM3LDcgQEAKIAlsYy0+dmRzb19wZXJfY3B1X2RhdGEgPSAodW5zaWduZWQgbG9uZykgJmxjLT5wYXN0ZVswXTsKICNlbmRpZgogCXNldF9wcmVmaXgoKHUzMikodW5zaWduZWQgbG9uZykgbGMpOworCWxvd2NvcmVfcHRyWzBdID0gbGM7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdApAQCAtNTEwLDcgKzUxNCw3IEBACiAJdW5zaWduZWQgbG9uZyBtYXhfbWVtOwogCWludCBpOwogCi0jaWYgZGVmaW5lZChDT05GSUdfWkZDUERVTVApIHx8IGRlZmluZWQoQ09ORklHX1pGQ1BEVU1QX01PRFVMRSkKKyNpZmRlZiBDT05GSUdfWkZDUERVTVAKIAlpZiAoaXBsX2luZm8udHlwZSA9PSBJUExfVFlQRV9GQ1BfRFVNUCkgewogCQltZW1vcnlfZW5kID0gWkZDUERVTVBfSFNBX1NJWkU7CiAJCW1lbW9yeV9lbmRfc2V0ID0gMTsKQEAgLTY3Nyw3ICs2ODEsNiBAQAogc3RhdGljIHZvaWQgX19pbml0IHNldHVwX2h3Y2Fwcyh2b2lkKQogewogCXN0YXRpYyBjb25zdCBpbnQgc3RmbF9iaXRzWzZdID0geyAwLCAyLCA3LCAxNywgMTksIDIxIH07Ci0Jc3RydWN0IGNwdWluZm9fUzM5MCAqY3B1aW5mbyA9ICZTMzkwX2xvd2NvcmUuY3B1X2RhdGE7CiAJdW5zaWduZWQgbG9uZyBsb25nIGZhY2lsaXR5X2xpc3RfZXh0ZW5kZWQ7CiAJdW5zaWduZWQgaW50IGZhY2lsaXR5X2xpc3Q7CiAJaW50IGk7CkBAIC02OTMsMTUgKzY5NiwyMiBAQAogCSAqICAgQml0IDE3OiB0aGUgbWVzc2FnZS1zZWN1cml0eSBhc3Npc3QgaXMgaW5zdGFsbGVkCiAJICogICBCaXQgMTk6IHRoZSBsb25nLWRpc3BsYWNlbWVudCBmYWNpbGl0eSBpcyBpbnN0YWxsZWQKIAkgKiAgIEJpdCAyMTogdGhlIGV4dGVuZGVkLWltbWVkaWF0ZSBmYWNpbGl0eSBpcyBpbnN0YWxsZWQKKwkgKiAgIEJpdCAyMjogZXh0ZW5kZWQtdHJhbnNsYXRpb24gZmFjaWxpdHkgMyBpcyBpbnN0YWxsZWQKKwkgKiAgIEJpdCAzMDogZXh0ZW5kZWQtdHJhbnNsYXRpb24gZmFjaWxpdHkgMyBlbmhhbmNlbWVudCBmYWNpbGl0eQogCSAqIFRoZXNlIGdldCB0cmFuc2xhdGVkIHRvOgogCSAqICAgSFdDQVBfUzM5MF9FU0FOMyBiaXQgMCwgSFdDQVBfUzM5MF9aQVJDSCBiaXQgMSwKIAkgKiAgIEhXQ0FQX1MzOTBfU1RGTEUgYml0IDIsIEhXQ0FQX1MzOTBfTVNBIGJpdCAzLAotCSAqICAgSFdDQVBfUzM5MF9MRElTUCBiaXQgNCwgYW5kIEhXQ0FQX1MzOTBfRUlNTSBiaXQgNS4KKwkgKiAgIEhXQ0FQX1MzOTBfTERJU1AgYml0IDQsIEhXQ0FQX1MzOTBfRUlNTSBiaXQgNSBhbmQKKwkgKiAgIEhXQ0FQX1MzOTBfRVRGM0VIIGJpdCA4ICgyMiAmJiAzMCkuCiAJICovCiAJZm9yIChpID0gMDsgaSA8IDY7IGkrKykKIAkJaWYgKGZhY2lsaXR5X2xpc3QgJiAoMVVMIDw8ICgzMSAtIHN0ZmxfYml0c1tpXSkpKQogCQkJZWxmX2h3Y2FwIHw9IDFVTCA8PCBpOwogCisJaWYgKChmYWNpbGl0eV9saXN0ICYgKDFVTCA8PCAoMzEgLSAyMikpKQorCSAgICAmJiAoZmFjaWxpdHlfbGlzdCAmICgxVUwgPDwgKDMxIC0gMzApKSkpCisJCWVsZl9od2NhcCB8PSAxVUwgPDwgODsKKwogCS8qCiAJICogQ2hlY2sgZm9yIGFkZGl0aW9uYWwgZmFjaWxpdGllcyB3aXRoIHN0b3JlLWZhY2lsaXR5LWxpc3QtZXh0ZW5kZWQuCiAJICogc3RmbGUgc3RvcmVzIGRvdWJsZXdvcmRzICg4IGJ5dGUpIHdpdGggYml0IDFVTEw8PDYzIGFzIGJpdCAwCkBAIC03MTAsMjAgKzcyMCwyMiBAQAogCSAqIEhvdyBtYW55IGZhY2lsaXR5IHdvcmRzIGFyZSBzdG9yZWQgZGVwZW5kcyBvbiB0aGUgbnVtYmVyIG9mCiAJICogZG91Ymxld29yZHMgcGFzc2VkIHRvIHRoZSBpbnN0cnVjdGlvbi4gVGhlIGFkZGl0aW9uYWwgZmFjaWxpdGVzCiAJICogYXJlOgotCSAqICAgQml0IDQzOiBkZWNpbWFsIGZsb2F0aW5nIHBvaW50IGZhY2lsaXR5IGlzIGluc3RhbGxlZAorCSAqICAgQml0IDQyOiBkZWNpbWFsIGZsb2F0aW5nIHBvaW50IGZhY2lsaXR5IGlzIGluc3RhbGxlZAorCSAqICAgQml0IDQ0OiBwZXJmb3JtIGZsb2F0aW5nIHBvaW50IG9wZXJhdGlvbiBmYWNpbGl0eSBpcyBpbnN0YWxsZWQKIAkgKiB0cmFuc2xhdGVkIHRvOgotCSAqICAgSFdDQVBfUzM5MF9ERlAgYml0IDYuCisJICogICBIV0NBUF9TMzkwX0RGUCBiaXQgNiAoNDIgJiYgNDQpLgogCSAqLwogCWlmICgoZWxmX2h3Y2FwICYgKDFVTCA8PCAyKSkgJiYKIAkgICAgX19zdGZsZSgmZmFjaWxpdHlfbGlzdF9leHRlbmRlZCwgMSkgPiAwKSB7Ci0JCWlmIChmYWNpbGl0eV9saXN0X2V4dGVuZGVkICYgKDFVTEwgPDwgKDY0IC0gNDMpKSkKKwkJaWYgKChmYWNpbGl0eV9saXN0X2V4dGVuZGVkICYgKDFVTEwgPDwgKDYzIC0gNDIpKSkKKwkJICAgICYmIChmYWNpbGl0eV9saXN0X2V4dGVuZGVkICYgKDFVTEwgPDwgKDYzIC0gNDQpKSkpCiAJCQllbGZfaHdjYXAgfD0gMVVMIDw8IDY7CiAJfQogCiAJaWYgKE1BQ0hJTkVfSEFTX0hQQUdFKQogCQllbGZfaHdjYXAgfD0gMVVMIDw8IDc7CiAKLQlzd2l0Y2ggKGNwdWluZm8tPmNwdV9pZC5tYWNoaW5lKSB7CisJc3dpdGNoIChTMzkwX2xvd2NvcmUuY3B1X2lkLm1hY2hpbmUpIHsKIAljYXNlIDB4OTY3MjoKICNpZiAhZGVmaW5lZChDT05GSUdfNjRCSVQpCiAJZGVmYXVsdDoJLyogVXNlICJnNSIgYXMgZGVmYXVsdCBmb3IgMzEgYml0IGtlcm5lbHMuICovCkBAIC04MTYsNyArODI4LDcgQEAKIAlzZXR1cF9sb3djb3JlKCk7CiAKICAgICAgICAgY3B1X2luaXQoKTsKLSAgICAgICAgX19jcHVfbG9naWNhbF9tYXBbMF0gPSBTMzkwX2xvd2NvcmUuY3B1X2RhdGEuY3B1X2FkZHI7CisJX19jcHVfbG9naWNhbF9tYXBbMF0gPSBzdGFwKCk7CiAJczM5MF9pbml0X2NwdV90b3BvbG9neSgpOwogCiAJLyoKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvc21wLmMgYi9hcmNoL3MzOTAva2VybmVsL3NtcC5jCmluZGV4IDJkMzM3Y2IuLjAwNmVkNTAgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9zbXAuYwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnFmbGFncy5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+CiAjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgpAQCAtNTAsMTIgKzUxLDYgQEAKICNpbmNsdWRlIDxhc20vdmRzby5oPgogI2luY2x1ZGUgImVudHJ5LmgiCiAKLS8qCi0gKiBBbiBhcnJheSB3aXRoIGEgcG9pbnRlciB0aGUgbG93Y29yZSBvZiBldmVyeSBDUFUuCi0gKi8KLXN0cnVjdCBfbG93Y29yZSAqbG93Y29yZV9wdHJbTlJfQ1BVU107Ci1FWFBPUlRfU1lNQk9MKGxvd2NvcmVfcHRyKTsKLQogc3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VycmVudF9zZXRbTlJfQ1BVU107CiAKIHN0YXRpYyB1OCBzbXBfY3B1X3R5cGU7CkBAIC04MSw5ICs3Niw3IEBACiAKIAkvKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzL21hY2hpbmUgY2hlY2tzICovCiAJX19sb2FkX3Bzd19tYXNrKHBzd19rZXJuZWxfYml0cyAmIH5QU1dfTUFTS19NQ0hFQ0spOwotCi0JLyogd3JpdGUgbWFnaWMgbnVtYmVyIHRvIHplcm8gcGFnZSAoYWJzb2x1dGUgMCkgKi8KLQlsb3djb3JlX3B0cltzbXBfcHJvY2Vzc29yX2lkKCldLT5wYW5pY19tYWdpYyA9IF9fUEFOSUNfTUFHSUM7CisJdHJhY2VfaGFyZGlycXNfb2ZmKCk7CiAKIAkvKiBzdG9wIGFsbCBwcm9jZXNzb3JzICovCiAJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKQEAgLTIzMyw3ICsyMjYsNyBAQAogICovCiAjZGVmaW5lIENQVV9JTklUX05PCTEKIAotI2lmIGRlZmluZWQoQ09ORklHX1pGQ1BEVU1QKSB8fCBkZWZpbmVkKENPTkZJR19aRkNQRFVNUF9NT0RVTEUpCisjaWZkZWYgQ09ORklHX1pGQ1BEVU1QCiAKIC8qCiAgKiB6ZmNwZHVtcF9wcmVmaXhfYXJyYXkgaG9sZHMgcHJlZml4IHJlZ2lzdGVycyBmb3IgdGhlIGZvbGxvd2luZyBzY2VuYXJpbzoKQEAgLTI3NCw3ICsyNjcsNyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgc21wX2dldF9zYXZlX2FyZWEodW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgaW50IHBoeV9jcHUpIHsgfQogCi0jZW5kaWYgLyogQ09ORklHX1pGQ1BEVU1QIHx8IENPTkZJR19aRkNQRFVNUF9NT0RVTEUgKi8KKyNlbmRpZiAvKiBDT05GSUdfWkZDUERVTVAgKi8KIAogc3RhdGljIGludCBjcHVfc3RvcHBlZChpbnQgY3B1KQogewpAQCAtMzA0LDggKzI5Nyw4IEBACiB7CiAJaW50IGNwdV9pZCwgbG9naWNhbF9jcHU7CiAKLQlsb2dpY2FsX2NwdSA9IGZpcnN0X2NwdShhdmFpbCk7Ci0JaWYgKGxvZ2ljYWxfY3B1ID09IE5SX0NQVVMpCisJbG9naWNhbF9jcHUgPSBjcHVtYXNrX2ZpcnN0KCZhdmFpbCk7CisJaWYgKGxvZ2ljYWxfY3B1ID49IG5yX2NwdV9pZHMpCiAJCXJldHVybiAwOwogCWZvciAoY3B1X2lkID0gMDsgY3B1X2lkIDw9IDY1NTM1OyBjcHVfaWQrKykgewogCQlpZiAoY3B1X2tub3duKGNwdV9pZCkpCkBAIC0zMTYsOCArMzA5LDggQEAKIAkJCWNvbnRpbnVlOwogCQljcHVfc2V0KGxvZ2ljYWxfY3B1LCBjcHVfcHJlc2VudF9tYXApOwogCQlzbXBfY3B1X3N0YXRlW2xvZ2ljYWxfY3B1XSA9IENQVV9TVEFURV9DT05GSUdVUkVEOwotCQlsb2dpY2FsX2NwdSA9IG5leHRfY3B1KGxvZ2ljYWxfY3B1LCBhdmFpbCk7Ci0JCWlmIChsb2dpY2FsX2NwdSA9PSBOUl9DUFVTKQorCQlsb2dpY2FsX2NwdSA9IGNwdW1hc2tfbmV4dChsb2dpY2FsX2NwdSwgJmF2YWlsKTsKKwkJaWYgKGxvZ2ljYWxfY3B1ID49IG5yX2NwdV9pZHMpCiAJCQlicmVhazsKIAl9CiAJcmV0dXJuIDA7CkBAIC0zMjksOCArMzIyLDggQEAKIAlpbnQgY3B1X2lkLCBsb2dpY2FsX2NwdSwgY3B1OwogCWludCByYzsKIAotCWxvZ2ljYWxfY3B1ID0gZmlyc3RfY3B1KGF2YWlsKTsKLQlpZiAobG9naWNhbF9jcHUgPT0gTlJfQ1BVUykKKwlsb2dpY2FsX2NwdSA9IGNwdW1hc2tfZmlyc3QoJmF2YWlsKTsKKwlpZiAobG9naWNhbF9jcHUgPj0gbnJfY3B1X2lkcykKIAkJcmV0dXJuIDA7CiAJaW5mbyA9IGttYWxsb2Moc2l6ZW9mKCppbmZvKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFpbmZvKQpAQCAtMzUxLDggKzM0NCw4IEBACiAJCQlzbXBfY3B1X3N0YXRlW2xvZ2ljYWxfY3B1XSA9IENQVV9TVEFURV9TVEFOREJZOwogCQllbHNlCiAJCQlzbXBfY3B1X3N0YXRlW2xvZ2ljYWxfY3B1XSA9IENQVV9TVEFURV9DT05GSUdVUkVEOwotCQlsb2dpY2FsX2NwdSA9IG5leHRfY3B1KGxvZ2ljYWxfY3B1LCBhdmFpbCk7Ci0JCWlmIChsb2dpY2FsX2NwdSA9PSBOUl9DUFVTKQorCQlsb2dpY2FsX2NwdSA9IGNwdW1hc2tfbmV4dChsb2dpY2FsX2NwdSwgJmF2YWlsKTsKKwkJaWYgKGxvZ2ljYWxfY3B1ID49IG5yX2NwdV9pZHMpCiAJCQlicmVhazsKIAl9CiBvdXQ6CkBAIC0zNzksNyArMzcyLDcgQEAKIAogCWNfY3B1cyA9IDE7CiAJc19jcHVzID0gMDsKLQlib290X2NwdV9hZGRyID0gUzM5MF9sb3djb3JlLmNwdV9kYXRhLmNwdV9hZGRyOworCWJvb3RfY3B1X2FkZHIgPSBfX2NwdV9sb2dpY2FsX21hcFswXTsKIAlpbmZvID0ga21hbGxvYyhzaXplb2YoKmluZm8pLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWluZm8pCiAJCXBhbmljKCJzbXBfZGV0ZWN0X2NwdXMgZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeVxuIik7CkBAIC00NTMsNyArNDQ2LDcgQEAKIAkvKiBTd2l0Y2ggb24gaW50ZXJydXB0cyAqLwogCWxvY2FsX2lycV9lbmFibGUoKTsKIAkvKiBQcmludCBpbmZvIGFib3V0IHRoaXMgcHJvY2Vzc29yICovCi0JcHJpbnRfY3B1X2luZm8oJlMzOTBfbG93Y29yZS5jcHVfZGF0YSk7CisJcHJpbnRfY3B1X2luZm8oKTsKIAkvKiBjcHVfaWRsZSB3aWxsIGNhbGwgc2NoZWR1bGUgZm9yIHVzICovCiAJY3B1X2lkbGUoKTsKIAlyZXR1cm4gMDsKQEAgLTUxNSw3ICs1MDgsNiBAQAogCXJldHVybiAtRU5PTUVNOwogfQogCi0jaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCiBzdGF0aWMgdm9pZCBzbXBfZnJlZV9sb3djb3JlKGludCBjcHUpCiB7CiAJc3RydWN0IF9sb3djb3JlICpsb3djb3JlOwpAQCAtNTM0LDcgKzUyNiw2IEBACiAJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZykgbG93Y29yZSwgbGNfb3JkZXIpOwogCWxvd2NvcmVfcHRyW2NwdV0gPSBOVUxMOwogfQotI2VuZGlmIC8qIENPTkZJR19IT1RQTFVHX0NQVSAqLwogCiAvKiBVcHBpbmcgYW5kIGRvd25pbmcgb2YgQ1BVcyAqLwogaW50IF9fY3B1aW5pdCBfX2NwdV91cCh1bnNpZ25lZCBpbnQgY3B1KQpAQCAtNTQzLDE2ICs1MzQsMjMgQEAKIAlzdHJ1Y3QgX2xvd2NvcmUgKmNwdV9sb3djb3JlOwogCXN0cnVjdCBzdGFja19mcmFtZSAqc2Y7CiAJc2lncF9jY29kZSBjY29kZTsKKwl1MzIgbG93Y29yZTsKIAogCWlmIChzbXBfY3B1X3N0YXRlW2NwdV0gIT0gQ1BVX1NUQVRFX0NPTkZJR1VSRUQpCiAJCXJldHVybiAtRUlPOwogCWlmIChzbXBfYWxsb2NfbG93Y29yZShjcHUpKQogCQlyZXR1cm4gLUVOT01FTTsKKwlkbyB7CisJCWNjb2RlID0gc2lnbmFsX3Byb2Nlc3NvcihjcHUsIHNpZ3BfaW5pdGlhbF9jcHVfcmVzZXQpOworCQlpZiAoY2NvZGUgPT0gc2lncF9idXN5KQorCQkJdWRlbGF5KDEwKTsKKwkJaWYgKGNjb2RlID09IHNpZ3Bfbm90X29wZXJhdGlvbmFsKQorCQkJZ290byBlcnJfb3V0OworCX0gd2hpbGUgKGNjb2RlID09IHNpZ3BfYnVzeSk7CiAKLQljY29kZSA9IHNpZ25hbF9wcm9jZXNzb3JfcCgoX191MzIpKHVuc2lnbmVkIGxvbmcpKGxvd2NvcmVfcHRyW2NwdV0pLAotCQkJCSAgIGNwdSwgc2lncF9zZXRfcHJlZml4KTsKLQlpZiAoY2NvZGUpCi0JCXJldHVybiAtRUlPOworCWxvd2NvcmUgPSAodTMyKSh1bnNpZ25lZCBsb25nKWxvd2NvcmVfcHRyW2NwdV07CisJd2hpbGUgKHNpZ25hbF9wcm9jZXNzb3JfcChsb3djb3JlLCBjcHUsIHNpZ3Bfc2V0X3ByZWZpeCkgPT0gc2lncF9idXN5KQorCQl1ZGVsYXkoMTApOwogCiAJaWRsZSA9IGN1cnJlbnRfc2V0W2NwdV07CiAJY3B1X2xvd2NvcmUgPSBsb3djb3JlX3B0cltjcHVdOwpAQCAtNTcxLDkgKzU2OSw4IEBACiAJCTogOiAiYSIgKCZjcHVfbG93Y29yZS0+YWNjZXNzX3JlZ3Nfc2F2ZV9hcmVhKSA6ICJtZW1vcnkiKTsKIAljcHVfbG93Y29yZS0+cGVyY3B1X29mZnNldCA9IF9fcGVyX2NwdV9vZmZzZXRbY3B1XTsKIAljcHVfbG93Y29yZS0+Y3VycmVudF90YXNrID0gKHVuc2lnbmVkIGxvbmcpIGlkbGU7Ci0JY3B1X2xvd2NvcmUtPmNwdV9kYXRhLmNwdV9uciA9IGNwdTsKKwljcHVfbG93Y29yZS0+Y3B1X25yID0gY3B1OwogCWNwdV9sb3djb3JlLT5rZXJuZWxfYXNjZSA9IFMzOTBfbG93Y29yZS5rZXJuZWxfYXNjZTsKLQljcHVfbG93Y29yZS0+aXBsX2RldmljZSA9IFMzOTBfbG93Y29yZS5pcGxfZGV2aWNlOwogCWVpZWlvKCk7CiAKIAl3aGlsZSAoc2lnbmFsX3Byb2Nlc3NvcihjcHUsIHNpZ3BfcmVzdGFydCkgPT0gc2lncF9idXN5KQpAQCAtNTgyLDYgKzU3OSwxMCBAQAogCXdoaWxlICghY3B1X29ubGluZShjcHUpKQogCQljcHVfcmVsYXgoKTsKIAlyZXR1cm4gMDsKKworZXJyX291dDoKKwlzbXBfZnJlZV9sb3djb3JlKGNwdSk7CisJcmV0dXJuIC1FSU87CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IHNldHVwX3Bvc3NpYmxlX2NwdXMoY2hhciAqcykKQEAgLTU4OSw5ICs1OTAsOCBAQAogCWludCBwY3B1cywgY3B1OwogCiAJcGNwdXMgPSBzaW1wbGVfc3RydG91bChzLCBOVUxMLCAwKTsKLQljcHVfcG9zc2libGVfbWFwID0gY3B1bWFza19vZl9jcHUoMCk7Ci0JZm9yIChjcHUgPSAxOyBjcHUgPCBwY3B1cyAmJiBjcHUgPCBOUl9DUFVTOyBjcHUrKykKLQkJY3B1X3NldChjcHUsIGNwdV9wb3NzaWJsZV9tYXApOworCWZvciAoY3B1ID0gMDsgY3B1IDwgcGNwdXMgJiYgY3B1IDwgbnJfY3B1X2lkczsgY3B1KyspCisJCXNldF9jcHVfcG9zc2libGUoY3B1LCB0cnVlKTsKIAlyZXR1cm4gMDsKIH0KIGVhcmx5X3BhcmFtKCJwb3NzaWJsZV9jcHVzIiwgc2V0dXBfcG9zc2libGVfY3B1cyk7CkBAIC02NjMsNyArNjYzLDcgQEAKIAkvKiByZXF1ZXN0IHRoZSAweDEyMDEgZW1lcmdlbmN5IHNpZ25hbCBleHRlcm5hbCBpbnRlcnJ1cHQgKi8KIAlpZiAocmVnaXN0ZXJfZXh0ZXJuYWxfaW50ZXJydXB0KDB4MTIwMSwgZG9fZXh0X2NhbGxfaW50ZXJydXB0KSAhPSAwKQogCQlwYW5pYygiQ291bGRuJ3QgcmVxdWVzdCBleHRlcm5hbCBpbnRlcnJ1cHQgMHgxMjAxIik7Ci0JcHJpbnRfY3B1X2luZm8oJlMzOTBfbG93Y29yZS5jcHVfZGF0YSk7CisJcHJpbnRfY3B1X2luZm8oKTsKIAogCS8qIFJlYWxsb2NhdGUgY3VycmVudCBsb3djb3JlLCBidXQga2VlcCBpdHMgY29udGVudHMuICovCiAJbGNfb3JkZXIgPSBzaXplb2YobG9uZykgPT0gOCA/IDEgOiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3N5c2luZm8uYyBiL2FyY2gvczM5MC9rZXJuZWwvc3lzaW5mby5jCnNpbWlsYXJpdHkgaW5kZXggODclCnJlbmFtZSBmcm9tIGRyaXZlcnMvczM5MC9zeXNpbmZvLmMKcmVuYW1lIHRvIGFyY2gvczM5MC9rZXJuZWwvc3lzaW5mby5jCmluZGV4IDBlZWE5MDcuLmI1ZTc1ZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zeXNpbmZvLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9zeXNpbmZvLmMKQEAgLTEsOSArMSw3IEBACiAvKgotICogIGRyaXZlcnMvczM5MC9zeXNpbmZvLmMKLSAqCi0gKiAgQ29weXJpZ2h0IElCTSBDb3JwLiAyMDAxLCAyMDA4Ci0gKiAgQXV0aG9yKHMpOiBVbHJpY2ggV2VpZ2FuZCAoVWxyaWNoLldlaWdhbmRAZGUuaWJtLmNvbSkKLSAqCSAgICAgICBNYXJ0aW4gU2Nod2lkZWZza3kgPHNjaHdpZGVmc2t5QGRlLmlibS5jb20+CisgKiAgQ29weXJpZ2h0IElCTSBDb3JwLiAyMDAxLCAyMDA5CisgKiAgQXV0aG9yKHMpOiBVbHJpY2ggV2VpZ2FuZCA8VWxyaWNoLldlaWdhbmRAZGUuaWJtLmNvbT4sCisgKgkgICAgICAgTWFydGluIFNjaHdpZGVmc2t5IDxzY2h3aWRlZnNreUBkZS5pYm0uY29tPiwKICAqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0yNCw3ICsyMiw3IEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IHN0c2lfMCh2b2lkKQogewotCWludCByYyA9IHN0c2kgKE5VTEwsIDAsIDAsIDApOworCWludCByYyA9IHN0c2koTlVMTCwgMCwgMCwgMCk7CiAJcmV0dXJuIHJjID09IC1FTk9TWVMgPyByYyA6ICgoKHVuc2lnbmVkIGludCkgcmMpID4+IDI4KTsKIH0KIApAQCAtNzgsMjMgKzc2LDYgQEAKIAlyZXR1cm4gbGVuOwogfQogCi0jaWYgMCAvKiBDdXJyZW50bHkgdW51c2VkICovCi1zdGF0aWMgaW50IHN0c2lfMV8yXzEoc3RydWN0IHN5c2luZm9fMV8yXzEgKmluZm8sIGNoYXIgKnBhZ2UsIGludCBsZW4pCi17Ci0JaWYgKHN0c2koaW5mbywgMSwgMiwgMSkgPT0gLUVOT1NZUykKLQkJcmV0dXJuIGxlbjsKLQotCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJcbiIpOwotCUVCQ0FTQyhpbmZvLT5zZXF1ZW5jZSwgc2l6ZW9mKGluZm8tPnNlcXVlbmNlKSk7Ci0JRUJDQVNDKGluZm8tPnBsYW50LCBzaXplb2YoaW5mby0+cGxhbnQpKTsKLQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiU2VxdWVuY2UgQ29kZSBvZiBDUFU6ICUtMTYuMTZzXG4iLAotCQkgICAgICAgaW5mby0+c2VxdWVuY2UpOwotCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJQbGFudCBvZiBDUFU6ICAgICAgICAgJS0xNi4xNnNcbiIsCi0JCSAgICAgICBpbmZvLT5wbGFudCk7Ci0JcmV0dXJuIGxlbjsKLX0KLSNlbmRpZgotCiBzdGF0aWMgaW50IHN0c2lfMV8yXzIoc3RydWN0IHN5c2luZm9fMV8yXzIgKmluZm8sIGNoYXIgKnBhZ2UsIGludCBsZW4pCiB7CiAJc3RydWN0IHN5c2luZm9fMV8yXzJfZXh0ZW5zaW9uICpleHQ7CkBAIC0xNDUsMzMgKzEyNiwxNSBAQAogCWlmIChpbmZvLT5zZWNvbmRhcnlfY2FwYWJpbGl0eSAhPSAwKQogCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiU2Vjb25kYXJ5IENhcGFiaWxpdHk6ICVkXG4iLAogCQkJICAgICAgIGluZm8tPnNlY29uZGFyeV9jYXBhYmlsaXR5KTsKLQogCXJldHVybiBsZW47CiB9CiAKLSNpZiAwIC8qIEN1cnJlbnRseSB1bnVzZWQgKi8KLXN0YXRpYyBpbnQgc3RzaV8yXzJfMShzdHJ1Y3Qgc3lzaW5mb18yXzJfMSAqaW5mbywgY2hhciAqcGFnZSwgaW50IGxlbikKLXsKLQlpZiAoc3RzaShpbmZvLCAyLCAyLCAxKSA9PSAtRU5PU1lTKQotCQlyZXR1cm4gbGVuOwotCi0JbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIlxuIik7Ci0JRUJDQVNDIChpbmZvLT5zZXF1ZW5jZSwgc2l6ZW9mKGluZm8tPnNlcXVlbmNlKSk7Ci0JRUJDQVNDIChpbmZvLT5wbGFudCwgc2l6ZW9mKGluZm8tPnBsYW50KSk7Ci0JbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIlNlcXVlbmNlIENvZGUgb2YgbG9naWNhbCBDUFU6ICUtMTYuMTZzXG4iLAotCQkgICAgICAgaW5mby0+c2VxdWVuY2UpOwotCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJQbGFudCBvZiBsb2dpY2FsIENQVTogJS0xNi4xNnNcbiIsCi0JCSAgICAgICBpbmZvLT5wbGFudCk7Ci0JcmV0dXJuIGxlbjsKLX0KLSNlbmRpZgotCiBzdGF0aWMgaW50IHN0c2lfMl8yXzIoc3RydWN0IHN5c2luZm9fMl8yXzIgKmluZm8sIGNoYXIgKnBhZ2UsIGludCBsZW4pCiB7CiAJaWYgKHN0c2koaW5mbywgMiwgMiwgMikgPT0gLUVOT1NZUykKIAkJcmV0dXJuIGxlbjsKIAotCUVCQ0FTQyAoaW5mby0+bmFtZSwgc2l6ZW9mKGluZm8tPm5hbWUpKTsKKwlFQkNBU0MoaW5mby0+bmFtZSwgc2l6ZW9mKGluZm8tPm5hbWUpKTsKIAogCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJcbiIpOwogCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJMUEFSIE51bWJlcjogICAgICAgICAgJWRcbiIsCkBAIC0yMTQsOCArMTc3LDggQEAKIAlpZiAoc3RzaShpbmZvLCAzLCAyLCAyKSA9PSAtRU5PU1lTKQogCQlyZXR1cm4gbGVuOwogCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5jb3VudDsgaSsrKSB7Ci0JCUVCQ0FTQyAoaW5mby0+dm1baV0ubmFtZSwgc2l6ZW9mKGluZm8tPnZtW2ldLm5hbWUpKTsKLQkJRUJDQVNDIChpbmZvLT52bVtpXS5jcGksIHNpemVvZihpbmZvLT52bVtpXS5jcGkpKTsKKwkJRUJDQVNDKGluZm8tPnZtW2ldLm5hbWUsIHNpemVvZihpbmZvLT52bVtpXS5uYW1lKSk7CisJCUVCQ0FTQyhpbmZvLT52bVtpXS5jcGksIHNpemVvZihpbmZvLT52bVtpXS5jcGkpKTsKIAkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIlxuIik7CiAJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJWTSUwMmQgTmFtZTogICAgICAgICAgICAlLTguOHNcbiIsCiAJCQkgICAgICAgaSwgaW5mby0+dm1baV0ubmFtZSk7CkBAIC0yMzcsMTQgKzIwMCwxMyBAQAogCXJldHVybiBsZW47CiB9CiAKLQogc3RhdGljIGludCBwcm9jX3JlYWRfc3lzaW5mbyhjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZl90IG9mZiwgaW50IGNvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKKwkJCSAgICAgb2ZmX3Qgb2ZmLCBpbnQgY291bnQsCisJCQkgICAgIGludCAqZW9mLCB2b2lkICpkYXRhKQogewotCXVuc2lnbmVkIGxvbmcgaW5mbyA9IGdldF96ZXJvZWRfcGFnZSAoR0ZQX0tFUk5FTCk7CisJdW5zaWduZWQgbG9uZyBpbmZvID0gZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOwogCWludCBsZXZlbCwgbGVuOwotCQorCiAJaWYgKCFpbmZvKQogCQlyZXR1cm4gMDsKIApAQCAtMjYyLDggKzIyNCw4IEBACiAJaWYgKGxldmVsID49IDMpCiAJCWxlbiA9IHN0c2lfM18yXzIoKHN0cnVjdCBzeXNpbmZvXzNfMl8yICopIGluZm8sIHBhZ2UsIGxlbik7CiAKLQlmcmVlX3BhZ2UgKGluZm8pOwotICAgICAgICByZXR1cm4gbGVuOworCWZyZWVfcGFnZShpbmZvKTsKKwlyZXR1cm4gbGVuOwogfQogCiBzdGF0aWMgX19pbml0IGludCBjcmVhdGVfcHJvY19zeXNpbmZvKHZvaWQpCkBAIC0yNzIsOCArMjM0LDcgQEAKIAkJCSAgICAgICBwcm9jX3JlYWRfc3lzaW5mbywgTlVMTCk7CiAJcmV0dXJuIDA7CiB9Ci0KLV9faW5pdGNhbGwoY3JlYXRlX3Byb2Nfc3lzaW5mbyk7CitkZXZpY2VfaW5pdGNhbGwoY3JlYXRlX3Byb2Nfc3lzaW5mbyk7CiAKIC8qCiAgKiBTZXJ2aWNlIGxldmVscyBpbnRlcmZhY2UuCkBAIC0zODcsMTMgKzM0OCwxMSBAQAogCQlyZWdpc3Rlcl9zZXJ2aWNlX2xldmVsKCZzZXJ2aWNlX2xldmVsX3ZtKTsKIAlyZXR1cm4gMDsKIH0KLQogc3Vic3lzX2luaXRjYWxsKGNyZWF0ZV9wcm9jX3NlcnZpY2VfbGV2ZWwpOwogCiAvKgogICogQm9nb21pcHMgY2FsY3VsYXRpb24gYmFzZWQgb24gY3B1IGNhcGFiaWxpdHkuCiAgKi8KLQogaW50IGdldF9jcHVfY2FwYWJpbGl0eSh1bnNpZ25lZCBpbnQgKmNhcGFiaWxpdHkpCiB7CiAJc3RydWN0IHN5c2luZm9fMV8yXzIgKmluZm87CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3RpbWUuYyBiL2FyY2gvczM5MC9rZXJuZWwvdGltZS5jCmluZGV4IGZjNDY4Y2EuLmY3MmQ0MTAgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvdGltZS5jCkBAIC0zMzEsNiArMzMxLDcgQEAKIH0KIAogc3RhdGljIERFRklORV9QRVJfQ1BVKGF0b21pY190LCBjbG9ja19zeW5jX3dvcmQpOworc3RhdGljIERFRklORV9NVVRFWChjbG9ja19zeW5jX211dGV4KTsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGNsb2NrX3N5bmNfZmxhZ3M7CiAKICNkZWZpbmUgQ0xPQ0tfU1lOQ19IQVNfRVRSCTAKQEAgLTM5NCw2ICszOTUsMjAgQEAKIAlhdG9taWNfc2V0X21hc2soMHg4MDAwMDAwMCwgc3dfcHRyKTsKIH0KIAorLyoKKyAqIEZ1bmN0aW9uIHRvIGNoZWNrIGlmIHRoZSBjbG9jayBpcyBpbiBzeW5jLgorICovCitzdGF0aWMgaW5saW5lIGludCBjaGVja19zeW5jX2Nsb2NrKHZvaWQpCit7CisJYXRvbWljX3QgKnN3X3B0cjsKKwlpbnQgcmM7CisKKwlzd19wdHIgPSAmZ2V0X2NwdV92YXIoY2xvY2tfc3luY193b3JkKTsKKwlyYyA9IChhdG9taWNfcmVhZChzd19wdHIpICYgMHg4MDAwMDAwMFUpICE9IDA7CisJcHV0X2NwdV92YXIoY2xvY2tfc3luY19zeW5jKTsKKwlyZXR1cm4gcmM7Cit9CisKIC8qIFNpbmdsZSB0aHJlYWRlZCB3b3JrcXVldWUgdXNlZCBmb3IgZXRyIGFuZCBzdHAgc3luYyBldmVudHMgKi8KIHN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqdGltZV9zeW5jX3dxOwogCkBAIC00ODUsNiArNTAwLDggQEAKIAlpZiAoZXRyX3NldHIoJmV0cl9lYWNyKSA9PSAwKSB7CiAJCWV0cl90b2xlYyA9IGdldF9jbG9jaygpOwogCQlzZXRfYml0KENMT0NLX1NZTkNfSEFTX0VUUiwgJmNsb2NrX3N5bmNfZmxhZ3MpOworCQlpZiAoZXRyX3BvcnQwX29ubGluZSAmJiBldHJfcG9ydDFfb25saW5lKQorCQkJc2V0X2JpdChDTE9DS19TWU5DX0VUUiwgJmNsb2NrX3N5bmNfZmxhZ3MpOwogCX0gZWxzZSBpZiAoZXRyX3BvcnQwX29ubGluZSB8fCBldHJfcG9ydDFfb25saW5lKSB7CiAJCXByX3dhcm5pbmcoIlRoZSByZWFsIG9yIHZpcnR1YWwgaGFyZHdhcmUgc3lzdGVtIGRvZXMgIgogCQkJICAgIm5vdCBwcm92aWRlIGFuIEVUUiBpbnRlcmZhY2VcbiIpOwpAQCAtNTMzLDggKzU1MCw3IEBACiB7CiAJaWYgKCFldHJfZWFjci5zbCkKIAkJcmV0dXJuOwotCWlmICh0ZXN0X2JpdChDTE9DS19TWU5DX0VUUiwgJmNsb2NrX3N5bmNfZmxhZ3MpKQotCQlkaXNhYmxlX3N5bmNfY2xvY2soTlVMTCk7CisJZGlzYWJsZV9zeW5jX2Nsb2NrKE5VTEwpOwogCXNldF9iaXQoRVRSX0VWRU5UX1NXSVRDSF9MT0NBTCwgJmV0cl9ldmVudHMpOwogCXF1ZXVlX3dvcmsodGltZV9zeW5jX3dxLCAmZXRyX3dvcmspOwogfQpAQCAtNTQ5LDggKzU2NSw3IEBACiB7CiAJaWYgKCFldHJfZWFjci5lcykKIAkJcmV0dXJuOwotCWlmICh0ZXN0X2JpdChDTE9DS19TWU5DX0VUUiwgJmNsb2NrX3N5bmNfZmxhZ3MpKQotCQlkaXNhYmxlX3N5bmNfY2xvY2soTlVMTCk7CisJZGlzYWJsZV9zeW5jX2Nsb2NrKE5VTEwpOwogCXNldF9iaXQoRVRSX0VWRU5UX1NZTkNfQ0hFQ0ssICZldHJfZXZlbnRzKTsKIAlxdWV1ZV93b3JrKHRpbWVfc3luY193cSwgJmV0cl93b3JrKTsKIH0KQEAgLTkxNCw3ICs5MjksNyBAQAogCSAqIERvIG5vdCB0cnkgdG8gZ2V0IHRoZSBhbHRlcm5hdGUgcG9ydCBhaWIgaWYgdGhlIGNsb2NrCiAJICogaXMgbm90IGluIHN5bmMgeWV0LgogCSAqLwotCWlmICghdGVzdF9iaXQoQ0xPQ0tfU1lOQ19TVFAsICZjbG9ja19zeW5jX2ZsYWdzKSAmJiAhZWFjci5lcykKKwlpZiAoIWNoZWNrX3N5bmNfY2xvY2soKSkKIAkJcmV0dXJuIGVhY3I7CiAKIAkvKgpAQCAtOTk3LDcgKzEwMTIsNiBAQAogCQlvbl9lYWNoX2NwdShkaXNhYmxlX3N5bmNfY2xvY2ssIE5VTEwsIDEpOwogCQlkZWxfdGltZXJfc3luYygmZXRyX3RpbWVyKTsKIAkJZXRyX3VwZGF0ZV9lYWNyKGVhY3IpOwotCQljbGVhcl9iaXQoQ0xPQ0tfU1lOQ19FVFIsICZjbG9ja19zeW5jX2ZsYWdzKTsKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KIApAQCAtMTA3MSwxOCArMTA4NSwxMyBAQAogCQkvKiBCb3RoIHBvcnRzIG5vdCB1c2FibGUuICovCiAJCWVhY3IuZXMgPSBlYWNyLnNsID0gMDsKIAkJc3luY19wb3J0ID0gLTE7Ci0JCWNsZWFyX2JpdChDTE9DS19TWU5DX0VUUiwgJmNsb2NrX3N5bmNfZmxhZ3MpOwogCX0KIAotCWlmICghdGVzdF9iaXQoQ0xPQ0tfU1lOQ19FVFIsICZjbG9ja19zeW5jX2ZsYWdzKSkKLQkJZWFjci5lcyA9IDA7Ci0KIAkvKgogCSAqIElmIHRoZSBjbG9jayBpcyBpbiBzeW5jIGp1c3QgdXBkYXRlIHRoZSBlYWNyIGFuZCByZXR1cm4uCiAJICogSWYgdGhlcmUgaXMgbm8gdmFsaWQgc3luYyBwb3J0IHdhaXQgZm9yIGEgcG9ydCB1cGRhdGUuCiAJICovCi0JaWYgKHRlc3RfYml0KENMT0NLX1NZTkNfU1RQLCAmY2xvY2tfc3luY19mbGFncykgfHwKLQkgICAgZWFjci5lcyB8fCBzeW5jX3BvcnQgPCAwKSB7CisJaWYgKGNoZWNrX3N5bmNfY2xvY2soKSB8fCBzeW5jX3BvcnQgPCAwKSB7CiAJCWV0cl91cGRhdGVfZWFjcihlYWNyKTsKIAkJZXRyX3NldF90b2xlY190aW1lb3V0KG5vdyk7CiAJCWdvdG8gb3V0X3VubG9jazsKQEAgLTExMDMsMTMgKzExMTIsMTEgQEAKIAkgKiBhbmQgc2V0IHVwIGEgdGltZXIgdG8gdHJ5IGFnYWluIGFmdGVyIDAuNSBzZWNvbmRzCiAJICovCiAJZXRyX3VwZGF0ZV9lYWNyKGVhY3IpOwotCXNldF9iaXQoQ0xPQ0tfU1lOQ19FVFIsICZjbG9ja19zeW5jX2ZsYWdzKTsKIAlpZiAobm93IDwgZXRyX3RvbGVjICsgKDE2MDAwMDAgPDwgMTIpIHx8CiAJICAgIGV0cl9zeW5jX2Nsb2NrX3N0b3AoJmFpYiwgc3luY19wb3J0KSAhPSAwKSB7CiAJCS8qIFN5bmMgZmFpbGVkLiBUcnkgYWdhaW4gaW4gMS8yIHNlY29uZC4gKi8KIAkJZWFjci5lcyA9IDA7CiAJCWV0cl91cGRhdGVfZWFjcihlYWNyKTsKLQkJY2xlYXJfYml0KENMT0NLX1NZTkNfRVRSLCAmY2xvY2tfc3luY19mbGFncyk7CiAJCWV0cl9zZXRfc3luY190aW1lb3V0KCk7CiAJfSBlbHNlCiAJCWV0cl9zZXRfdG9sZWNfdGltZW91dChub3cpOwpAQCAtMTE5MSwxOSArMTE5OCwzMCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAoIXRlc3RfYml0KENMT0NLX1NZTkNfSEFTX0VUUiwgJmNsb2NrX3N5bmNfZmxhZ3MpKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJbXV0ZXhfbG9jaygmY2xvY2tfc3luY19tdXRleCk7CiAJaWYgKGRldiA9PSAmZXRyX3BvcnQwX2RldikgewogCQlpZiAoZXRyX3BvcnQwX29ubGluZSA9PSB2YWx1ZSkKLQkJCXJldHVybiBjb3VudDsJLyogTm90aGluZyB0byBkby4gKi8KKwkJCWdvdG8gb3V0OwkvKiBOb3RoaW5nIHRvIGRvLiAqLwogCQlldHJfcG9ydDBfb25saW5lID0gdmFsdWU7CisJCWlmIChldHJfcG9ydDBfb25saW5lICYmIGV0cl9wb3J0MV9vbmxpbmUpCisJCQlzZXRfYml0KENMT0NLX1NZTkNfRVRSLCAmY2xvY2tfc3luY19mbGFncyk7CisJCWVsc2UKKwkJCWNsZWFyX2JpdChDTE9DS19TWU5DX0VUUiwgJmNsb2NrX3N5bmNfZmxhZ3MpOwogCQlzZXRfYml0KEVUUl9FVkVOVF9QT1JUMF9DSEFOR0UsICZldHJfZXZlbnRzKTsKIAkJcXVldWVfd29yayh0aW1lX3N5bmNfd3EsICZldHJfd29yayk7CiAJfSBlbHNlIHsKIAkJaWYgKGV0cl9wb3J0MV9vbmxpbmUgPT0gdmFsdWUpCi0JCQlyZXR1cm4gY291bnQ7CS8qIE5vdGhpbmcgdG8gZG8uICovCisJCQlnb3RvIG91dDsJLyogTm90aGluZyB0byBkby4gKi8KIAkJZXRyX3BvcnQxX29ubGluZSA9IHZhbHVlOworCQlpZiAoZXRyX3BvcnQwX29ubGluZSAmJiBldHJfcG9ydDFfb25saW5lKQorCQkJc2V0X2JpdChDTE9DS19TWU5DX0VUUiwgJmNsb2NrX3N5bmNfZmxhZ3MpOworCQllbHNlCisJCQljbGVhcl9iaXQoQ0xPQ0tfU1lOQ19FVFIsICZjbG9ja19zeW5jX2ZsYWdzKTsKIAkJc2V0X2JpdChFVFJfRVZFTlRfUE9SVDFfQ0hBTkdFLCAmZXRyX2V2ZW50cyk7CiAJCXF1ZXVlX3dvcmsodGltZV9zeW5jX3dxLCAmZXRyX3dvcmspOwogCX0KK291dDoKKwltdXRleF91bmxvY2soJmNsb2NrX3N5bmNfbXV0ZXgpOwogCXJldHVybiBjb3VudDsKIH0KIApAQCAtMTQ3MSw4ICsxNDg5LDYgQEAKICAqLwogdm9pZCBzdHBfc3luY19jaGVjayh2b2lkKQogewotCWlmICghdGVzdF9iaXQoQ0xPQ0tfU1lOQ19TVFAsICZjbG9ja19zeW5jX2ZsYWdzKSkKLQkJcmV0dXJuOwogCWRpc2FibGVfc3luY19jbG9jayhOVUxMKTsKIAlxdWV1ZV93b3JrKHRpbWVfc3luY193cSwgJnN0cF93b3JrKTsKIH0KQEAgLTE0ODUsOCArMTUwMSw2IEBACiAgKi8KIHZvaWQgc3RwX2lzbGFuZF9jaGVjayh2b2lkKQogewotCWlmICghdGVzdF9iaXQoQ0xPQ0tfU1lOQ19TVFAsICZjbG9ja19zeW5jX2ZsYWdzKSkKLQkJcmV0dXJuOwogCWRpc2FibGVfc3luY19jbG9jayhOVUxMKTsKIAlxdWV1ZV93b3JrKHRpbWVfc3luY193cSwgJnN0cF93b3JrKTsKIH0KQEAgLTE1MTMsMTAgKzE1MjcsNiBAQAogCiAJZW5hYmxlX3N5bmNfY2xvY2soKTsKIAotCXNldF9iaXQoQ0xPQ0tfU1lOQ19TVFAsICZjbG9ja19zeW5jX2ZsYWdzKTsKLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KENMT0NLX1NZTkNfRVRSLCAmY2xvY2tfc3luY19mbGFncykpCi0JCXF1ZXVlX3dvcmsodGltZV9zeW5jX3dxLCAmZXRyX3dvcmspOwotCiAJcmMgPSAwOwogCWlmIChzdHBfaW5mby50b2RvZmZbMF0gfHwgc3RwX2luZm8udG9kb2ZmWzFdIHx8CiAJICAgIHN0cF9pbmZvLnRvZG9mZlsyXSB8fCBzdHBfaW5mby50b2RvZmZbM10gfHwKQEAgLTE1MzUsOSArMTU0NSw2IEBACiAJaWYgKHJjKSB7CiAJCWRpc2FibGVfc3luY19jbG9jayhOVUxMKTsKIAkJc3RwX3N5bmMtPmluX3N5bmMgPSAtRUFHQUlOOwotCQljbGVhcl9iaXQoQ0xPQ0tfU1lOQ19TVFAsICZjbG9ja19zeW5jX2ZsYWdzKTsKLQkJaWYgKGV0cl9wb3J0MF9vbmxpbmUgfHwgZXRyX3BvcnQxX29ubGluZSkKLQkJCXF1ZXVlX3dvcmsodGltZV9zeW5jX3dxLCAmZXRyX3dvcmspOwogCX0gZWxzZQogCQlzdHBfc3luYy0+aW5fc3luYyA9IDE7CiAJeGNoZygmZmlyc3QsIDApOwpAQCAtMTU2OSw2ICsxNTc2LDEwIEBACiAJaWYgKHJjIHx8IHN0cF9pbmZvLmMgPT0gMCkKIAkJZ290byBvdXRfdW5sb2NrOwogCisJLyogU2tpcCBzeW5jaHJvbml6YXRpb24gaWYgdGhlIGNsb2NrIGlzIGFscmVhZHkgaW4gc3luYy4gKi8KKwlpZiAoY2hlY2tfc3luY19jbG9jaygpKQorCQlnb3RvIG91dF91bmxvY2s7CisKIAltZW1zZXQoJnN0cF9zeW5jLCAwLCBzaXplb2Yoc3RwX3N5bmMpKTsKIAlnZXRfb25saW5lX2NwdXMoKTsKIAlhdG9taWNfc2V0KCZzdHBfc3luYy5jcHVzLCBudW1fb25saW5lX2NwdXMoKSAtIDEpOwpAQCAtMTY4NCw4ICsxNjk1LDE0IEBACiAJCXJldHVybiAtRUlOVkFMOwogCWlmICghdGVzdF9iaXQoQ0xPQ0tfU1lOQ19IQVNfU1RQLCAmY2xvY2tfc3luY19mbGFncykpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKKwltdXRleF9sb2NrKCZjbG9ja19zeW5jX211dGV4KTsKIAlzdHBfb25saW5lID0gdmFsdWU7CisJaWYgKHN0cF9vbmxpbmUpCisJCXNldF9iaXQoQ0xPQ0tfU1lOQ19TVFAsICZjbG9ja19zeW5jX2ZsYWdzKTsKKwllbHNlCisJCWNsZWFyX2JpdChDTE9DS19TWU5DX1NUUCwgJmNsb2NrX3N5bmNfZmxhZ3MpOwogCXF1ZXVlX3dvcmsodGltZV9zeW5jX3dxLCAmc3RwX3dvcmspOworCW11dGV4X3VubG9jaygmY2xvY2tfc3luY19tdXRleCk7CiAJcmV0dXJuIGNvdW50OwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3RvcG9sb2d5LmMgYi9hcmNoL3MzOTAva2VybmVsL3RvcG9sb2d5LmMKaW5kZXggY2MzNjJjOS4uM2M3MmM5YyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC90b3BvbG9neS5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvdG9wb2xvZ3kuYwpAQCAtNzQsNyArNzQsNyBAQAogCiBjcHVtYXNrX3QgY3B1X2NvcmVfbWFwW05SX0NQVVNdOwogCi1jcHVtYXNrX3QgY3B1X2NvcmVncm91cF9tYXAodW5zaWduZWQgaW50IGNwdSkKK3N0YXRpYyBjcHVtYXNrX3QgY3B1X2NvcmVncm91cF9tYXAodW5zaWduZWQgaW50IGNwdSkKIHsKIAlzdHJ1Y3QgY29yZV9pbmZvICpjb3JlID0gJmNvcmVfaW5mbzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC90cmFwcy5jIGIvYXJjaC9zMzkwL2tlcm5lbC90cmFwcy5jCmluZGV4IDQ1ODRkODEuLmMyZTQyY2MgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL3MzOTAva2VybmVsL3RyYXBzLmMKQEAgLTYxLDkgKzYxLDExIEBACiAjZGVmaW5lIHN0YWNrX3BvaW50ZXIgKHsgdm9pZCAqKnNwOyBhc20oImxhICUwLDAoMTUpIiA6ICI9JmQiIChzcCkpOyBzcDsgfSkKIAogI2lmbmRlZiBDT05GSUdfNjRCSVQKKyNkZWZpbmUgTE9ORyAiJTA4bHggIgogI2RlZmluZSBGT1VSTE9ORyAiJTA4bHggJTA4bHggJTA4bHggJTA4bHhcbiIKIHN0YXRpYyBpbnQga3N0YWNrX2RlcHRoX3RvX3ByaW50ID0gMTI7CiAjZWxzZSAvKiBDT05GSUdfNjRCSVQgKi8KKyNkZWZpbmUgTE9ORyAiJTAxNmx4ICIKICNkZWZpbmUgRk9VUkxPTkcgIiUwMTZseCAlMDE2bHggJTAxNmx4ICUwMTZseFxuIgogc3RhdGljIGludCBrc3RhY2tfZGVwdGhfdG9fcHJpbnQgPSAyMDsKICNlbmRpZiAvKiBDT05GSUdfNjRCSVQgKi8KQEAgLTE1NSw3ICsxNTcsNyBAQAogCQkJYnJlYWs7CiAJCWlmIChpICYmICgoaSAqIHNpemVvZiAobG9uZykgJSAzMikgPT0gMCkpCiAJCQlwcmludGsoIlxuICAgICAgICIpOwotCQlwcmludGsoIiVwICIsICh2b2lkICopKnN0YWNrKyspOworCQlwcmludGsoTE9ORywgKnN0YWNrKyspOwogCX0KIAlwcmludGsoIlxuIik7CiAJc2hvd190cmFjZSh0YXNrLCBzcCk7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3Zkc28uYyBiL2FyY2gvczM5MC9rZXJuZWwvdmRzby5jCmluZGV4IDY5MGUxNzguLjg5YjJlN2YgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvdmRzby5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvdmRzby5jCkBAIC0xNDQsNyArMTQ0LDYgQEAKIAlyZXR1cm4gLUVOT01FTTsKIH0KIAotI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQogdm9pZCB2ZHNvX2ZyZWVfcGVyX2NwdShpbnQgY3B1LCBzdHJ1Y3QgX2xvd2NvcmUgKmxvd2NvcmUpCiB7CiAJdW5zaWduZWQgbG9uZyBzZWdtZW50X3RhYmxlLCBwYWdlX3RhYmxlLCBwYWdlX2ZyYW1lOwpAQCAtMTYzLDcgKzE2Miw2IEBACiAJZnJlZV9wYWdlKHBhZ2VfdGFibGUpOwogCWZyZWVfcGFnZXMoc2VnbWVudF90YWJsZSwgU0VHTUVOVF9PUkRFUik7CiB9Ci0jZW5kaWYgLyogQ09ORklHX0hPVFBMVUdfQ1BVICovCiAKIHN0YXRpYyB2b2lkIF9fdmRzb19pbml0X2NyNSh2b2lkICpkdW1teSkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvczM5MC9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCBkNzk2ZDA1Li43YTIwNjNlIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC0xMDgsNiArMTA4LDggQEAKIAkJRVhJVF9URVhUCiAJfQogCisJLyogZWFybHkuYyB1c2VzIHN0c2ksIHdoaWNoIHJlcXVpcmVzIHBhZ2UgYWxpZ25lZCBkYXRhLiAqLworCS4gPSBBTElHTihQQUdFX1NJWkUpOwogCS5pbml0LmRhdGEgOiB7CiAJCUlOSVRfREFUQQogCX0KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vS2NvbmZpZyBiL2FyY2gvczM5MC9rdm0vS2NvbmZpZwppbmRleCBlMDUxY2FkLi4zZTI2MGI3IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL0tjb25maWcKKysrIGIvYXJjaC9zMzkwL2t2bS9LY29uZmlnCkBAIC00LDYgKzQsOSBAQAogY29uZmlnIEhBVkVfS1ZNCiAgICAgICAgYm9vbAogCitjb25maWcgSEFWRV9LVk1fSVJRQ0hJUAorICAgICAgIGJvb2wKKwogbWVudWNvbmZpZyBWSVJUVUFMSVpBVElPTgogCWJvb2wgIlZpcnR1YWxpemF0aW9uIgogCWRlZmF1bHQgeQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYyBiL2FyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmMKaW5kZXggNjEyMzYxMC4uOWQxOTgwMyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYworKysgYi9hcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jCkBAIC0xMDMsNyArMTAzLDcgQEAKIHN0YXRpYyBpbnRlcmNlcHRfaGFuZGxlcl90IGluc3RydWN0aW9uX2hhbmRsZXJzWzI1Nl0gPSB7CiAJWzB4ODNdID0ga3ZtX3MzOTBfaGFuZGxlX2RpYWcsCiAJWzB4YWVdID0ga3ZtX3MzOTBfaGFuZGxlX3NpZ3AsCi0JWzB4YjJdID0ga3ZtX3MzOTBfaGFuZGxlX3ByaXYsCisJWzB4YjJdID0ga3ZtX3MzOTBfaGFuZGxlX2IyLAogCVsweGI3XSA9IGhhbmRsZV9sY3RsLAogCVsweGViXSA9IGhhbmRsZV9sY3RsZywKIH07CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jIGIvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYwppbmRleCBmNGZlMjhhLi4wMTg5MzU2IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jCisrKyBiL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMKQEAgLTU1NSw5ICs1NTUsMTQgQEAKIAkJVkNQVV9FVkVOVCh2Y3B1LCAzLCAiaW5qZWN0OiBwcm9ncmFtIGNoZWNrICVkIChmcm9tIHVzZXIpIiwKIAkJCSAgIHMzOTBpbnQtPnBhcm0pOwogCQlicmVhazsKKwljYXNlIEtWTV9TMzkwX1NJR1BfU0VUX1BSRUZJWDoKKwkJaW50aS0+cHJlZml4LmFkZHJlc3MgPSBzMzkwaW50LT5wYXJtOworCQlpbnRpLT50eXBlID0gczM5MGludC0+dHlwZTsKKwkJVkNQVV9FVkVOVCh2Y3B1LCAzLCAiaW5qZWN0OiBzZXQgcHJlZml4IHRvICV4IChmcm9tIHVzZXIpIiwKKwkJCSAgIHMzOTBpbnQtPnBhcm0pOworCQlicmVhazsKIAljYXNlIEtWTV9TMzkwX1NJR1BfU1RPUDoKIAljYXNlIEtWTV9TMzkwX1JFU1RBUlQ6Ci0JY2FzZSBLVk1fUzM5MF9TSUdQX1NFVF9QUkVGSVg6CiAJY2FzZSBLVk1fUzM5MF9JTlRfRU1FUkdFTkNZOgogCQlWQ1BVX0VWRU5UKHZjcHUsIDMsICJpbmplY3Q6IHR5cGUgJXgiLCBzMzkwaW50LT50eXBlKTsKIAkJaW50aS0+dHlwZSA9IHMzOTBpbnQtPnR5cGU7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMKaW5kZXggMGQzMzg5My4uZjRkNTZlOSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jCisrKyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYwpAQCAtMjMsNyArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8YXNtL2xvd2NvcmUuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgotCisjaW5jbHVkZSA8YXNtL25taS5oPgogI2luY2x1ZGUgImt2bS1zMzkwLmgiCiAjaW5jbHVkZSAiZ2FjY2Vzcy5oIgogCkBAIC0yODYsNyArMjg2LDcgQEAKIAlzZXR1cF90aW1lcigmdmNwdS0+YXJjaC5ja2NfdGltZXIsIGt2bV9zMzkwX2lkbGVfd2FrZXVwLAogCQkgKHVuc2lnbmVkIGxvbmcpIHZjcHUpOwogCWdldF9jcHVfaWQoJnZjcHUtPmFyY2guY3B1X2lkKTsKLQl2Y3B1LT5hcmNoLmNwdV9pZC52ZXJzaW9uID0gMHhmZTsKKwl2Y3B1LT5hcmNoLmNwdV9pZC52ZXJzaW9uID0gMHhmZjsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDIyLDggKzQyMiw4IEBACiAJcmV0dXJuIC1FSU5WQUw7IC8qIG5vdCBpbXBsZW1lbnRlZCB5ZXQgKi8KIH0KIAotaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfZGVidWdfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAotCQkJCSAgICBzdHJ1Y3Qga3ZtX2RlYnVnX2d1ZXN0ICpkYmcpCitpbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfZ3Vlc3RfZGVidWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorCQkJCQlzdHJ1Y3Qga3ZtX2d1ZXN0X2RlYnVnICpkYmcpCiB7CiAJcmV0dXJuIC1FSU5WQUw7IC8qIG5vdCBpbXBsZW1lbnRlZCB5ZXQgKi8KIH0KQEAgLTQ0MCw4ICs0NDAsNiBAQAogCXJldHVybiAtRUlOVkFMOyAvKiBub3QgaW1wbGVtZW50ZWQgeWV0ICovCiB9CiAKLWV4dGVybiB2b2lkIHMzOTBfaGFuZGxlX21jY2sodm9pZCk7Ci0KIHN0YXRpYyB2b2lkIF9fdmNwdV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCW1lbWNweSgmdmNwdS0+YXJjaC5zaWVfYmxvY2stPmdnMTQsICZ2Y3B1LT5hcmNoLmd1ZXN0X2dwcnNbMTRdLCAxNik7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmggYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmgKaW5kZXggMzg5M2NmMS4uMDBiYmU2OSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oCisrKyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuaApAQCAtNTAsNyArNTAsNyBAQAogaW50IGt2bV9zMzkwX2luamVjdF9wcm9ncmFtX2ludChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiBjb2RlKTsKIAogLyogaW1wbGVtZW50ZWQgaW4gcHJpdi5jICovCi1pbnQga3ZtX3MzOTBfaGFuZGxlX3ByaXYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKK2ludCBrdm1fczM5MF9oYW5kbGVfYjIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAogLyogaW1wbGVtZW50ZWQgaW4gc2lncC5jICovCiBpbnQga3ZtX3MzOTBfaGFuZGxlX3NpZ3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vcHJpdi5jIGIvYXJjaC9zMzkwL2t2bS9wcml2LmMKaW5kZXggMzYwNWRmNDUuLjRiODg4MzQgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0vcHJpdi5jCisrKyBiL2FyY2gvczM5MC9rdm0vcHJpdi5jCkBAIC0zMDQsMTIgKzMwNCwyNCBAQAogCVsweGIxXSA9IGhhbmRsZV9zdGZsLAogfTsKIAotaW50IGt2bV9zMzkwX2hhbmRsZV9wcml2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK2ludCBrdm1fczM5MF9oYW5kbGVfYjIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCWludGVyY2VwdF9oYW5kbGVyX3QgaGFuZGxlcjsKIAorCS8qCisJICogYSBsb3Qgb2YgQjIgaW5zdHJ1Y3Rpb25zIGFyZSBwcml2aWxlZGdlZC4gV2UgZmlyc3QgY2hlY2sgZm9yCisJICogdGhlIHByaXZpbGVkZ2VzIG9uZXMsIHRoYXQgd2UgY2FuIGhhbmRsZSBpbiB0aGUga2VybmVsLiBJZiB0aGUKKwkgKiBrZXJuZWwgY2FuIGhhbmRsZSB0aGlzIGluc3RydWN0aW9uLCB3ZSBjaGVjayBmb3IgdGhlIHByb2JsZW0KKwkgKiBzdGF0ZSBiaXQgYW5kIChhKSBoYW5kbGUgdGhlIGluc3RydWN0aW9uIG9yIChiKSBzZW5kIGEgY29kZSAyCisJICogcHJvZ3JhbSBjaGVjay4KKwkgKiBBbnl0aGluZyBlbHNlIGdvZXMgdG8gdXNlcnNwYWNlLiovCiAJaGFuZGxlciA9IHByaXZfaGFuZGxlcnNbdmNwdS0+YXJjaC5zaWVfYmxvY2stPmlwYSAmIDB4MDBmZl07Ci0JaWYgKGhhbmRsZXIpCi0JCXJldHVybiBoYW5kbGVyKHZjcHUpOworCWlmIChoYW5kbGVyKSB7CisJCWlmICh2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Z3Bzdy5tYXNrICYgUFNXX01BU0tfUFNUQVRFKQorCQkJcmV0dXJuIGt2bV9zMzkwX2luamVjdF9wcm9ncmFtX2ludCh2Y3B1LAorCQkJCQkJICAgUEdNX1BSSVZJTEVHRURfT1BFUkFUSU9OKTsKKwkJZWxzZQorCQkJcmV0dXJuIGhhbmRsZXIodmNwdSk7CisJfQogCXJldHVybiAtRU5PVFNVUFA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL3NpZ3AuYyBiL2FyY2gvczM5MC9rdm0vc2lncC5jCmluZGV4IDJhMDFiOWUuLmYyN2RiZWQgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0vc2lncC5jCisrKyBiL2FyY2gvczM5MC9rdm0vc2lncC5jCkBAIC0xNTMsOCArMTUzLDYgQEAKIAogCXN3aXRjaCAocGFyYW1ldGVyICYgMHhmZikgewogCWNhc2UgMDoKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAia3ZtOiByZXF1ZXN0IHRvIHN3aXRjaCB0byBFU0EvMzkwIG1vZGUiCi0JCQkJCQkJIiBub3Qgc3VwcG9ydGVkIik7CiAJCXJjID0gMzsgLyogbm90IG9wZXJhdGlvbmFsICovCiAJCWJyZWFrOwogCWNhc2UgMToKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9saWIvZGVsYXkuYyBiL2FyY2gvczM5MC9saWIvZGVsYXkuYwppbmRleCA2Y2NiOWZhLi4zZjVmNjgwIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbGliL2RlbGF5LmMKKysrIGIvYXJjaC9zMzkwL2xpYi9kZWxheS5jCkBAIC05LDYgKzksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC90aW1leC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lycWZsYWdzLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAKQEAgLTkyLDYgKzkzLDcgQEAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJcHJlZW1wdF9lbmFibGUoKTsKIH0KK0VYUE9SVF9TWU1CT0woX191ZGVsYXkpOwogCiAvKgogICogU2ltcGxlIHVkZWxheSB2YXJpYW50LiBUbyBiZSB1c2VkIG9uIHN0YXJ0dXAgYW5kIHJlYm9vdApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2xpYi9zdHJpbmcuYyBiL2FyY2gvczM5MC9saWIvc3RyaW5nLmMKaW5kZXggYWU1Y2Y1ZC4uNDE0M2I3YyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2xpYi9zdHJpbmcuYworKysgYi9hcmNoL3MzOTAvbGliL3N0cmluZy5jCkBAIC00NCw3ICs0NCwxMSBAQAogICovCiBzaXplX3Qgc3RybGVuKGNvbnN0IGNoYXIgKnMpCiB7CisjaWYgX19HTlVDX18gPCA0CiAJcmV0dXJuIF9fc3RyZW5kKHMpIC0gczsKKyNlbHNlCisJcmV0dXJuIF9fYnVpbHRpbl9zdHJsZW4ocyk7CisjZW5kaWYKIH0KIEVYUE9SVF9TWU1CT0woc3RybGVuKTsKIApAQCAtNzAsNiArNzQsNyBAQAogICovCiBjaGFyICpzdHJjcHkoY2hhciAqZGVzdCwgY29uc3QgY2hhciAqc3JjKQogeworI2lmIF9fR05VQ19fIDwgNAogCXJlZ2lzdGVyIGludCByMCBhc20oIjAiKSA9IDA7CiAJY2hhciAqcmV0ID0gZGVzdDsKIApAQCAtNzgsNiArODMsOSBAQAogCQkgICAgICA6ICIrJmEiIChkZXN0KSwgIismYSIgKHNyYykgOiAiZCIgKHIwKQogCQkgICAgICA6ICJjYyIsICJtZW1vcnkiICk7CiAJcmV0dXJuIHJldDsKKyNlbHNlCisJcmV0dXJuIF9fYnVpbHRpbl9zdHJjcHkoZGVzdCwgc3JjKTsKKyNlbmRpZgogfQogRVhQT1JUX1NZTUJPTChzdHJjcHkpOwogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbW0vZmF1bHQuYyBiL2FyY2gvczM5MC9tbS9mYXVsdC5jCmluZGV4IDRkNTM3MjAuLjgzM2U4MzYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9tbS9mYXVsdC5jCisrKyBiL2FyY2gvczM5MC9tbS9mYXVsdC5jCkBAIC0yMDAsMjkgKzIwMCw2IEBACiAJZG9fbm9fY29udGV4dChyZWdzLCBlcnJvcl9jb2RlLCAwKTsKIH0KIAotLyoKLSAqIFdlIHJhbiBvdXQgb2YgbWVtb3J5LCBvciBzb21lIG90aGVyIHRoaW5nIGhhcHBlbmVkIHRvIHVzIHRoYXQgbWFkZQotICogdXMgdW5hYmxlIHRvIGhhbmRsZSB0aGUgcGFnZSBmYXVsdCBncmFjZWZ1bGx5LgotICovCi1zdGF0aWMgaW50IGRvX291dF9vZl9tZW1vcnkoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgZXJyb3JfY29kZSwKLQkJCSAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCi17Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwotCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdHNrLT5tbTsKLQotCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7Ci0JaWYgKGlzX2dsb2JhbF9pbml0KHRzaykpIHsKLQkJeWllbGQoKTsKLQkJZG93bl9yZWFkKCZtbS0+bW1hcF9zZW0pOwotCQlyZXR1cm4gMTsKLQl9Ci0JcHJpbnRrKCJWTToga2lsbGluZyBwcm9jZXNzICVzXG4iLCB0c2stPmNvbW0pOwotCWlmIChyZWdzLT5wc3cubWFzayAmIFBTV19NQVNLX1BTVEFURSkKLQkJZG9fZ3JvdXBfZXhpdChTSUdLSUxMKTsKLQlkb19ub19jb250ZXh0KHJlZ3MsIGVycm9yX2NvZGUsIGFkZHJlc3MpOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgdm9pZCBkb19zaWdidXMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgZXJyb3JfY29kZSwKIAkJICAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQogewpAQCAtMzY3LDcgKzM0NCw2IEBACiAJCQlnb3RvIGJhZF9hcmVhOwogCX0KIAotc3Vydml2ZToKIAlpZiAoaXNfdm1faHVnZXRsYl9wYWdlKHZtYSkpCiAJCWFkZHJlc3MgJj0gSFBBR0VfTUFTSzsKIAkvKgpAQCAtMzc4LDggKzM1NCw4IEBACiAJZmF1bHQgPSBoYW5kbGVfbW1fZmF1bHQobW0sIHZtYSwgYWRkcmVzcywgd3JpdGUpOwogCWlmICh1bmxpa2VseShmYXVsdCAmIFZNX0ZBVUxUX0VSUk9SKSkgewogCQlpZiAoZmF1bHQgJiBWTV9GQVVMVF9PT00pIHsKLQkJCWlmIChkb19vdXRfb2ZfbWVtb3J5KHJlZ3MsIGVycm9yX2NvZGUsIGFkZHJlc3MpKQotCQkJCWdvdG8gc3Vydml2ZTsKKwkJCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisJCQlwYWdlZmF1bHRfb3V0X29mX21lbW9yeSgpOwogCQkJcmV0dXJuOwogCQl9IGVsc2UgaWYgKGZhdWx0ICYgVk1fRkFVTFRfU0lHQlVTKSB7CiAJCQlkb19zaWdidXMocmVncywgZXJyb3JfY29kZSwgYWRkcmVzcyk7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbW0vaW5pdC5jIGIvYXJjaC9zMzkwL21tL2luaXQuYwppbmRleCBmMDI1OGNhLi5jNjM0ZGZiIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbW0vaW5pdC5jCisrKyBiL2FyY2gvczM5MC9tbS9pbml0LmMKQEAgLTQwLDcgKzQwLDkgQEAKIERFRklORV9QRVJfQ1BVKHN0cnVjdCBtbXVfZ2F0aGVyLCBtbXVfZ2F0aGVycyk7CiAKIHBnZF90IHN3YXBwZXJfcGdfZGlyW1BUUlNfUEVSX1BHRF0gX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oUEFHRV9TSVpFKSkpOworCiBjaGFyICBlbXB0eV96ZXJvX3BhZ2VbUEFHRV9TSVpFXSBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyhQQUdFX1NJWkUpKSk7CitFWFBPUlRfU1lNQk9MKGVtcHR5X3plcm9fcGFnZSk7CiAKIC8qCiAgKiBwYWdpbmdfaW5pdCgpIHNldHMgdXAgdGhlIHBhZ2UgdGFibGVzCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbW0vcGd0YWJsZS5jIGIvYXJjaC9zMzkwL21tL3BndGFibGUuYwppbmRleCA2YjZkZGM0Li5iZTZjMWNmIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbW0vcGd0YWJsZS5jCisrKyBiL2FyY2gvczM5MC9tbS9wZ3RhYmxlLmMKQEAgLTI1OCw2ICsyNTgsMTAgQEAKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7CiAJc3RydWN0IG1tX3N0cnVjdCAqbW0sICpvbGRfbW07CiAKKwkvKiBEbyB3ZSBoYXZlIHN3aXRjaGVkIGFtb2RlPyBJZiBubywgd2UgY2Fubm90IGRvIHNpZSAqLworCWlmICghc3dpdGNoX2Ftb2RlKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCS8qIERvIHdlIGhhdmUgcGdzdGVzPyBpZiB5ZXMsIHdlIGFyZSBkb25lICovCiAJaWYgKHRzay0+bW0tPmNvbnRleHQuaGFzX3Bnc3RlKQogCQlyZXR1cm4gMDsKQEAgLTI5Miw3ICsyOTYsNyBAQAogCXRzay0+bW0gPSB0c2stPmFjdGl2ZV9tbSA9IG1tOwogCXByZWVtcHRfZGlzYWJsZSgpOwogCXVwZGF0ZV9tbShtbSwgdHNrKTsKLQljcHVfc2V0KHNtcF9wcm9jZXNzb3JfaWQoKSwgbW0tPmNwdV92bV9tYXNrKTsKKwljcHVtYXNrX3NldF9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpLCBtbV9jcHVtYXNrKG1tKSk7CiAJcHJlZW1wdF9lbmFibGUoKTsKIAl0YXNrX3VubG9jayh0c2spOwogCW1tcHV0KG9sZF9tbSk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL0tjb25maWcgYi9hcmNoL3NoL0tjb25maWcKaW5kZXggZWJhYmU1MS4uOGQ1MGQ1MiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9LY29uZmlnCisrKyBiL2FyY2gvc2gvS2NvbmZpZwpAQCAtMTA3LDYgKzEwNyw5IEBACiBjb25maWcgU1lTX1NVUFBPUlRTX1BDSQogCWJvb2wKIAorY29uZmlnIFNZU19TVVBQT1JUU19DTVQKKwlib29sCisKIGNvbmZpZyBTVEFDS1RSQUNFX1NVUFBPUlQKIAlkZWZfYm9vbCB5CiAKQEAgLTE3Niw2ICsxNzksMTAgQEAKIGNvbmZpZyBDUFVfU0hYMwogCWJvb2wKIAorY29uZmlnIEFSQ0hfU0hNT0JJTEUKKwlib29sCisJc2VsZWN0IEFSQ0hfU1VTUEVORF9QT1NTSUJMRQorCiBjaG9pY2UKIAlwcm9tcHQgIlByb2Nlc3NvciBzdWItdHlwZSBzZWxlY3Rpb24iCiAKQEAgLTE4OCw2ICsxOTUsNyBAQAogY29uZmlnIENQVV9TVUJUWVBFX1NINzYxOQogCWJvb2wgIlN1cHBvcnQgU0g3NjE5IHByb2Nlc3NvciIKIAlzZWxlY3QgQ1BVX1NIMgorCXNlbGVjdCBTWVNfU1VQUE9SVFNfQ01UCiAKICMgU0gtMkEgUHJvY2Vzc29yIFN1cHBvcnQKIApAQCAtMjAwLDE1ICsyMDgsMTggQEAKIAlib29sICJTdXBwb3J0IFNINzIwMyBwcm9jZXNzb3IiCiAJc2VsZWN0IENQVV9TSDJBCiAJc2VsZWN0IENQVV9IQVNfRlBVCisJc2VsZWN0IFNZU19TVVBQT1JUU19DTVQKIAogY29uZmlnIENQVV9TVUJUWVBFX1NINzIwNgogCWJvb2wgIlN1cHBvcnQgU0g3MjA2IHByb2Nlc3NvciIKIAlzZWxlY3QgQ1BVX1NIMkEKKwlzZWxlY3QgU1lTX1NVUFBPUlRTX0NNVAogCiBjb25maWcgQ1BVX1NVQlRZUEVfU0g3MjYzCiAJYm9vbCAiU3VwcG9ydCBTSDcyNjMgcHJvY2Vzc29yIgogCXNlbGVjdCBDUFVfU0gyQQogCXNlbGVjdCBDUFVfSEFTX0ZQVQorCXNlbGVjdCBTWVNfU1VQUE9SVFNfQ01UCiAKIGNvbmZpZyBDUFVfU1VCVFlQRV9NWEcKIAlib29sICJTdXBwb3J0IE1YLUcgcHJvY2Vzc29yIgpAQCAtMzIzLDcgKzMzNCw5IEBACiAJYm9vbCAiU3VwcG9ydCBTSDc3MjMgcHJvY2Vzc29yIgogCXNlbGVjdCBDUFVfU0g0QQogCXNlbGVjdCBDUFVfU0hYMgorCXNlbGVjdCBBUkNIX1NITU9CSUxFCiAJc2VsZWN0IEFSQ0hfU1BBUlNFTUVNX0VOQUJMRQorCXNlbGVjdCBTWVNfU1VQUE9SVFNfQ01UCiAJaGVscAogCSAgU2VsZWN0IFNINzcyMyBpZiB5b3UgaGF2ZSBhbiBTSC1Nb2JpbGVSMiBDUFUuCiAKQEAgLTM0OCw2ICszNjEsMTQgQEAKIAlzZWxlY3QgQVJDSF9TUEFSU0VNRU1fRU5BQkxFCiAJc2VsZWN0IFNZU19TVVBQT1JUU19OVU1BCiAKK2NvbmZpZyBDUFVfU1VCVFlQRV9TSDc3ODYKKwlib29sICJTdXBwb3J0IFNINzc4NiBwcm9jZXNzb3IiCisJc2VsZWN0IENQVV9TSDRBCisJc2VsZWN0IENQVV9TSFgzCisJc2VsZWN0IENQVV9IQVNfUFRFQUVYCisJc2VsZWN0IEFSQ0hfU1BBUlNFTUVNX0VOQUJMRQorCXNlbGVjdCBTWVNfU1VQUE9SVFNfTlVNQQorCiBjb25maWcgQ1BVX1NVQlRZUEVfU0hYMwogCWJvb2wgIlN1cHBvcnQgU0gtWDMgcHJvY2Vzc29yIgogCXNlbGVjdCBDUFVfU0g0QQpAQCAtMzYyLDIwICszODMsMjYgQEAKIGNvbmZpZyBDUFVfU1VCVFlQRV9TSDczNDMKIAlib29sICJTdXBwb3J0IFNINzM0MyBwcm9jZXNzb3IiCiAJc2VsZWN0IENQVV9TSDRBTF9EU1AKKwlzZWxlY3QgQVJDSF9TSE1PQklMRQorCXNlbGVjdCBTWVNfU1VQUE9SVFNfQ01UCiAKIGNvbmZpZyBDUFVfU1VCVFlQRV9TSDc3MjIKIAlib29sICJTdXBwb3J0IFNINzcyMiBwcm9jZXNzb3IiCiAJc2VsZWN0IENQVV9TSDRBTF9EU1AKIAlzZWxlY3QgQ1BVX1NIWDIKKwlzZWxlY3QgQVJDSF9TSE1PQklMRQogCXNlbGVjdCBBUkNIX1NQQVJTRU1FTV9FTkFCTEUKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX05VTUEKKwlzZWxlY3QgU1lTX1NVUFBPUlRTX0NNVAogCiBjb25maWcgQ1BVX1NVQlRZUEVfU0g3MzY2CiAJYm9vbCAiU3VwcG9ydCBTSDczNjYgcHJvY2Vzc29yIgogCXNlbGVjdCBDUFVfU0g0QUxfRFNQCiAJc2VsZWN0IENQVV9TSFgyCisJc2VsZWN0IEFSQ0hfU0hNT0JJTEUKIAlzZWxlY3QgQVJDSF9TUEFSU0VNRU1fRU5BQkxFCiAJc2VsZWN0IFNZU19TVVBQT1JUU19OVU1BCisJc2VsZWN0IFNZU19TVVBQT1JUU19DTVQKIAogIyBTSC01IFByb2Nlc3NvciBTdXBwb3J0CiAKQEAgLTM5OCwyNSArNDI1LDM0IEBACiBtZW51ICJUaW1lciBhbmQgY2xvY2sgY29uZmlndXJhdGlvbiIKIAogY29uZmlnIFNIX1RNVQotCWRlZl9ib29sIHkKLQlwcm9tcHQgIlRNVSB0aW1lciBzdXBwb3J0IgorCWJvb2wgIlRNVSB0aW1lciBzdXBwb3J0IgogCWRlcGVuZHMgb24gQ1BVX1NIMyB8fCBDUFVfU0g0CisJZGVmYXVsdCB5CiAJc2VsZWN0IEdFTkVSSUNfVElNRQogCXNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTCiAJaGVscAogCSAgVGhpcyBlbmFibGVzIHRoZSB1c2Ugb2YgdGhlIFRNVSBhcyB0aGUgc3lzdGVtIHRpbWVyLgogCiBjb25maWcgU0hfQ01UCi0JZGVmX2Jvb2wgeQotCXByb21wdCAiQ01UIHRpbWVyIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBDUFVfU0gyICYmICFDUFVfU1VCVFlQRV9NWEcKKwlib29sICJDTVQgdGltZXIgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFNZU19TVVBQT1JUU19DTVQgJiYgQ1BVX1NIMgorCWRlZmF1bHQgeQogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyB0aGUgdXNlIG9mIHRoZSBDTVQgYXMgdGhlIHN5c3RlbSB0aW1lci4KIAorIworIyBTdXBwb3J0IGZvciB0aGUgbmV3LXN0eWxlIENNVCBkcml2ZXIuIFRoaXMgd2lsbCByZXBsYWNlIFNIX0NNVAorIyBvbmNlIGl0cyBvdGhlciBkZXBlbmRlbmNpZXMgYXJlIG1lcmdlZC4KKyMKK2NvbmZpZyBTSF9USU1FUl9DTVQKKwlib29sICJDTVQgY2xvY2tldmVudHMgZHJpdmVyIgorCWRlcGVuZHMgb24gU1lTX1NVUFBPUlRTX0NNVCAmJiAhU0hfQ01UCisJc2VsZWN0IEdFTkVSSUNfQ0xPQ0tFVkVOVFMKKwogY29uZmlnIFNIX01UVTIKLQlkZWZfYm9vbCBuCi0JcHJvbXB0ICJNVFUyIHRpbWVyIHN1cHBvcnQiCisJYm9vbCAiTVRVMiB0aW1lciBzdXBwb3J0IgogCWRlcGVuZHMgb24gQ1BVX1NIMkEKKwlkZWZhdWx0IHkKIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgdGhlIHVzZSBvZiB0aGUgTVRVMiBhcyB0aGUgc3lzdGVtIHRpbWVyLgogCkBAIC00MjYsNyArNDYyLDggQEAKIAkJCUNQVV9TVUJUWVBFX1NINzc2MwogCWRlZmF1bHQgIjg2IiBpZiBDUFVfU1VCVFlQRV9TSDc2MTkKIAlkZWZhdWx0ICIxNDAiIGlmIENQVV9TVUJUWVBFX1NINzIwNgotCWRlZmF1bHQgIjE0MiIgaWYgQ1BVX1NVQlRZUEVfU0g3MjAzCisJZGVmYXVsdCAiMTQyIiBpZiBDUFVfU1VCVFlQRV9TSDcyMDMgJiYgU0hfQ01UCisJZGVmYXVsdCAiMTUzIiBpZiBDUFVfU1VCVFlQRV9TSDcyMDMgJiYgU0hfTVRVMgogCWRlZmF1bHQgIjIzOCIgaWYgQ1BVX1NVQlRZUEVfTVhHCiAJZGVmYXVsdCAiMTYiCiAKQEAgLTQzOCw3ICs0NzUsOCBAQAogCWRlZmF1bHQgIjMzMzMzMzMzIiBpZiBDUFVfU1VCVFlQRV9TSDc3NzAgfHwgQ1BVX1NVQlRZUEVfU0g3NzIzIHx8IFwKIAkJCSAgICAgIENQVV9TVUJUWVBFX1NINzc2MCB8fCBDUFVfU1VCVFlQRV9TSDc3MDUgfHwgXAogCQkJICAgICAgQ1BVX1NVQlRZUEVfU0g3MjAzIHx8IENQVV9TVUJUWVBFX1NINzIwNiB8fCBcCi0JCQkgICAgICBDUFVfU1VCVFlQRV9TSDcyNjMgfHwgQ1BVX1NVQlRZUEVfTVhHCisJCQkgICAgICBDUFVfU1VCVFlQRV9TSDcyNjMgfHwgQ1BVX1NVQlRZUEVfTVhHICAgIHx8IFwKKwkJCSAgICAgIENQVV9TVUJUWVBFX1NINzc4NgogCWRlZmF1bHQgIjYwMDAwMDAwIiBpZiBDUFVfU1VCVFlQRV9TSDc3NTEgfHwgQ1BVX1NVQlRZUEVfU0g3NzUxUgogCWRlZmF1bHQgIjY2MDAwMDAwIiBpZiBDUFVfU1VCVFlQRV9TSDRfMjAyCiAJZGVmYXVsdCAiNTAwMDAwMDAiCkBAIC01MjEsNiArNTU5LDEzIEBACiAKIAkgIEZvciBtb3JlIGRldGFpbHMgc2VlIERvY3VtZW50YXRpb24va2R1bXAva2R1bXAudHh0CiAKK2NvbmZpZyBLRVhFQ19KVU1QCisJYm9vbCAia2V4ZWMganVtcCAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIFNVUEVSSDMyICYmIEtFWEVDICYmIEhJQkVSTkFUSU9OICYmIEVYUEVSSU1FTlRBTAorCWhlbHAKKwkgIEp1bXAgYmV0d2VlbiBvcmlnaW5hbCBrZXJuZWwgYW5kIGtleGVjZWQga2VybmVsIGFuZCBpbnZva2UKKwkgIGNvZGUgdmlhIEtFWEVDCisKIGNvbmZpZyBTRUNDT01QCiAJYm9vbCAiRW5hYmxlIHNlY2NvbXAgdG8gc2FmZWx5IGNvbXB1dGUgdW50cnVzdGVkIGJ5dGVjb2RlIgogCWRlcGVuZHMgb24gUFJPQ19GUwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9LY29uZmlnLmNwdSBiL2FyY2gvc2gvS2NvbmZpZy5jcHUKaW5kZXggMGUyN2ZlMy4uYzdkNzA0MyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9LY29uZmlnLmNwdQorKysgYi9hcmNoL3NoL0tjb25maWcuY3B1CkBAIC0xMDQsNiArMTA0LDkgQEAKIGNvbmZpZyBDUFVfSEFTX1BURUEKIAlib29sCiAKK2NvbmZpZyBDUFVfSEFTX1BURUFFWAorCWJvb2wKKwogY29uZmlnIENQVV9IQVNfRFNQCiAJYm9vbAogCmRpZmYgLS1naXQgYS9hcmNoL3NoL01ha2VmaWxlIGIvYXJjaC9zaC9NYWtlZmlsZQppbmRleCA0MDY3YjBkLi5iZWNlMWY3IDEwMDY0NAotLS0gYS9hcmNoL3NoL01ha2VmaWxlCisrKyBiL2FyY2gvc2gvTWFrZWZpbGUKQEAgLTgwLDYgKzgwLDcgQEAKIGRlZmF1bHRpbWFnZS0kKENPTkZJR19TVVBFUkgzMikJCQk6PSB6SW1hZ2UKIGRlZmF1bHRpbWFnZS0kKENPTkZJR19TSF9TSDc3ODVMQ1IpCQk6PSB1SW1hZ2UKIGRlZmF1bHRpbWFnZS0kKENPTkZJR19TSF9SU0spCQkJOj0gdUltYWdlCitkZWZhdWx0aW1hZ2UtJChDT05GSUdfU0hfVVJRVUVMTCkJCTo9IHVJbWFnZQogZGVmYXVsdGltYWdlLSQoQ09ORklHX1NIXzcyMDZfU09MVVRJT05fRU5HSU5FKQk6PSB2bWxpbnV4CiBkZWZhdWx0aW1hZ2UtJChDT05GSUdfU0hfNzYxOV9TT0xVVElPTl9FTkdJTkUpCTo9IHZtbGludXgKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvS2NvbmZpZyBiL2FyY2gvc2gvYm9hcmRzL0tjb25maWcKaW5kZXggODYxOTE0Ny4uZGNjMWFmOCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvS2NvbmZpZworKysgYi9hcmNoL3NoL2JvYXJkcy9LY29uZmlnCkBAIC0xNTUsMTcgKzE1NSwyMiBAQAogCiBjb25maWcgU0hfU0g3Nzg1TENSXzI5QklUX1BIWVNNQVBTCiAJYm9vbCAiU0g3Nzg1TENSIDI5Yml0IHBoeXNtYXBzIgotCWRlcGVuZHMgb24gU0hfU0g3Nzg1TENSCisJZGVwZW5kcyBvbiBTSF9TSDc3ODVMQ1IgJiYgMjlCSVQKIAlkZWZhdWx0IHkKIAloZWxwCiAJICBUaGlzIGJvYXJkIGhhcyAyIHBoeXNpY2FsIG1lbW9yeSBtYXBzLiBJdCBjYW4gYmUgY2hhbmdlZCB3aXRoCiAJICBESVAgc3dpdGNoKFMyLTUpLiBJZiB5b3Ugc2V0IHRoZSBESVAgc3dpdGNoIGZvciBTMi01ID0gT04sCiAJICB5b3UgY2FuIGFjY2VzcyBhbGwgb24tYm9hcmQgZGV2aWNlIGluIDI5Yml0IGFkZHJlc3MgbW9kZS4KIAorY29uZmlnIFNIX1VSUVVFTEwKKwlib29sICJVcnF1ZWxsIgorCWRlcGVuZHMgb24gQ1BVX1NVQlRZUEVfU0g3Nzg2CisJc2VsZWN0IEFSQ0hfUkVRVUlSRV9HUElPTElCCisKIGNvbmZpZyBTSF9NSUdPUgogCWJvb2wgIk1pZ28tUiIKIAlkZXBlbmRzIG9uIENQVV9TVUJUWVBFX1NINzcyMgotCXNlbGVjdCBHRU5FUklDX0dQSU8KKwlzZWxlY3QgQVJDSF9SRVFVSVJFX0dQSU9MSUIKIAloZWxwCiAJICBTZWxlY3QgTWlnby1SIGlmIGNvbmZpZ3VyaW5nIGZvciB0aGUgU0g3NzIyIE1pZ28tUiBwbGF0Zm9ybQogICAgICAgICAgIGJ5IFJlbmVzYXMgU3lzdGVtIFNvbHV0aW9ucyBBc2lhIFB0ZS4gTHRkLgpAQCAtMTczLDcgKzE3OCw3IEBACiBjb25maWcgU0hfQVAzMjVSWEEKIAlib29sICJBUC0zMjVSWEEiCiAJZGVwZW5kcyBvbiBDUFVfU1VCVFlQRV9TSDc3MjMKLQlzZWxlY3QgR0VORVJJQ19HUElPCisJc2VsZWN0IEFSQ0hfUkVRVUlSRV9HUElPTElCCiAJaGVscAogCSAgUmVuZXNhcyAiQVAtMzI1UlhBIiBzdXBwb3J0LgogCSAgQ29tcGF0aWJsZSB3aXRoIEFMR08gU1lTVEVNIENPLixMVEQuICJBUC0zMjBBIgpAQCAtMTg1LDYgKzE5MCwxMyBAQAogCSAgU2VsZWN0IFNINzc2M1JEUCBpZiBjb25maWd1cmluZyBmb3IgYSBSZW5lc2FzIFNINzc2MwogCSAgZXZhbHVhdGlvbiBib2FyZC4KIAorY29uZmlnIFNIX0VTUFQKKwlib29sICJFU1BUIgorCWRlcGVuZHMgb24gQ1BVX1NVQlRZUEVfU0g3NzYzCisJaGVscAorCSAgU2VsZWN0IEVTUFQgaWYgY29uZmlndXJpbmcgZm9yIGEgUmVuZXNhcyBTSDc3NjMKKwkgIHdpdGggZ2lnYWJpdCBldGhlciBldmFsdWF0aW9uIGJvYXJkLgorCiBjb25maWcgU0hfRURPU0s3NzA1CiAJYm9vbCAiRURPU0s3NzA1IgogCWRlcGVuZHMgb24gQ1BVX1NVQlRZUEVfU0g3NzA1CkBAIC0yNDAsNyArMjUyLDcgQEAKIGNvbmZpZyBTSF9NQUdJQ19QQU5FTF9SMgogCWJvb2wgIk1hZ2ljIFBhbmVsIFIyIgogCWRlcGVuZHMgb24gQ1BVX1NVQlRZUEVfU0g3NzIwCi0Jc2VsZWN0IEdFTkVSSUNfR1BJTworCXNlbGVjdCBBUkNIX1JFUVVJUkVfR1BJT0xJQgogCWhlbHAKIAkgIFNlbGVjdCBNYWdpYyBQYW5lbCBSMiBpZiBjb25maWd1cmluZyBmb3IgTWFnaWMgUGFuZWwgUjIuCiAKQEAgLTI0OSw2ICsyNjEsMTMgQEAKIAlkZXBlbmRzIG9uIENQVV9TVUJUWVBFX1NINV8xMDEgfHwgQ1BVX1NVQlRZUEVfU0g1XzEwMwogCXNlbGVjdCBTWVNfU1VQUE9SVFNfUENJCiAKK2NvbmZpZyBTSF9QT0xBUklTCisJYm9vbCAiU01TQyBQb2xhcmlzIgorCXNlbGVjdCBDUFVfSEFTX0lQUl9JUlEKKwlkZXBlbmRzIG9uIENQVV9TVUJUWVBFX1NINzcwOQorCWhlbHAKKwkgIFNlbGVjdCBpZiBjb25maWd1cmluZyBmb3IgYW4gU01TQyBQb2xhcmlzIGRldmVsb3BtZW50IGJvYXJkCisKIGVuZG1lbnUKIAogc291cmNlICJhcmNoL3NoL2JvYXJkcy9tYWNoLXIyZC9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvTWFrZWZpbGUgYi9hcmNoL3NoL2JvYXJkcy9NYWtlZmlsZQppbmRleCAyNjlhZTJiLi43YmFhMjEwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9NYWtlZmlsZQorKysgYi9hcmNoL3NoL2JvYXJkcy9NYWtlZmlsZQpAQCAtNCw1ICs0LDggQEAKIG9iai0kKENPTkZJR19TSF9BUDMyNVJYQSkJKz0gYm9hcmQtYXAzMjVyeGEubwogb2JqLSQoQ09ORklHX1NIX01BR0lDX1BBTkVMX1IyKQkrPSBib2FyZC1tYWdpY3BhbmVscjIubwogb2JqLSQoQ09ORklHX1NIX1NINzc4NUxDUikJKz0gYm9hcmQtc2g3Nzg1bGNyLm8KK29iai0kKENPTkZJR19TSF9VUlFVRUxMKQkrPSBib2FyZC11cnF1ZWxsLm8KIG9iai0kKENPTkZJR19TSF9TSE1JTikJCSs9IGJvYXJkLXNobWluLm8KIG9iai0kKENPTkZJR19TSF9FRE9TSzc3NjApCSs9IGJvYXJkLWVkb3NrNzc2MC5vCitvYmotJChDT05GSUdfU0hfRVNQVCkJCSs9IGJvYXJkLWVzcHQubworb2JqLSQoQ09ORklHX1NIX1BPTEFSSVMpCSs9IGJvYXJkLXBvbGFyaXMubwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtYXAzMjVyeGEuYyBiL2FyY2gvc2gvYm9hcmRzL2JvYXJkLWFwMzI1cnhhLmMKaW5kZXggMTViNmQ0NS4uYTY0ZTM4OCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtYXAzMjVyeGEuYworKysgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC1hcDMyNXJ4YS5jCkBAIC0xNjYsNiArMTY2LDE2IEBACiAJY3RybF9vdXR3KDB4MTAwLCBGUEdBX0JLTFJFRyk7CiB9CiAKK3N0YXRpYyB2b2lkIGFwMzIwX3d2Z2FfcG93ZXJfb2ZmKHZvaWQgKmJvYXJkX2RhdGEpCit7CisJLyogYmFja2xpZ2h0ICovCisJY3RybF9vdXR3KDAsIEZQR0FfQktMUkVHKTsKKwlncGlvX3NldF92YWx1ZShHUElPX1BUUzMsIDEpOworCisJLyogQVNEIEFQLTMyMC8zMjUgTENEIE9GRiAqLworCWN0cmxfb3V0dygwLCBGUEdBX0xDRFJFRyk7Cit9CisKIHN0YXRpYyBzdHJ1Y3Qgc2hfbW9iaWxlX2xjZGNfaW5mbyBsY2RjX2luZm8gPSB7CiAJLmNsb2NrX3NvdXJjZSA9IExDRENfQ0xLX0VYVEVSTkFMLAogCS5jaFswXSA9IHsKQEAgLTE5MSw2ICsyMDEsNyBAQAogCQl9LAogCQkuYm9hcmRfY2ZnID0gewogCQkJLmRpc3BsYXlfb24gPSBhcDMyMF93dmdhX3Bvd2VyX29uLAorCQkJLmRpc3BsYXlfb2ZmID0gYXAzMjBfd3ZnYV9wb3dlcl9vZmYsCiAJCX0sCiAJfQogfTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL2JvYXJkLWVzcHQuYyBiL2FyY2gvc2gvYm9hcmRzL2JvYXJkLWVzcHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWNlNWUxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9ib2FyZHMvYm9hcmQtZXNwdC5jCkBAIC0wLDAgKzEsMTAyIEBACisvKgorICogRGF0YSBUZWNobm9sb2d5IEluYy4gRVNQVC1HSUdBIGJvYXJkIHN1cG9ydAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBSZW5lc2FzIFNvbHV0aW9ucyBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IE5vYnVoaXJvIEl3YW1hdHN1IDxpd2FtYXRzdS5ub2J1aGlyb0ByZW5lc2FzLmNvbT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KKyNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KKyNpbmNsdWRlIDxhc20vc2hfZXRoLmg+CisKKy8qIE5PUiBGbGFzaCAqLworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGVzcHRfbm9yX2ZsYXNoX3BhcnRpdGlvbnNbXSA9IHsKKwl7CisJCS5uYW1lID0gIlUtQm9vdCIsCisJCS5vZmZzZXQgPSAwLAorCQkuc2l6ZSA9ICgyICogU1pfMTI4SyksCisJCS5tYXNrX2ZsYWdzID0gTVREX1dSSVRFQUJMRSwJLyogUmVhZC1vbmx5ICovCisJfSwgeworCQkubmFtZSA9ICJMaW51eC1LZXJuZWwiLAorCQkub2Zmc2V0ID0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZSA9ICgyMCAqIFNaXzEyOEspLAorCX0sIHsKKwkJLm5hbWUgPSAiUm9vdCBGaWxlc3lzdGVtIiwKKwkJLm9mZnNldCA9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUgPSBNVERQQVJUX1NJWl9GVUxMLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBlc3B0X25vcl9mbGFzaF9kYXRhID0geworCS53aWR0aCA9IDIsCisJLnBhcnRzID0gZXNwdF9ub3JfZmxhc2hfcGFydGl0aW9ucywKKwkubnJfcGFydHMgPSBBUlJBWV9TSVpFKGVzcHRfbm9yX2ZsYXNoX3BhcnRpdGlvbnMpLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBlc3B0X25vcl9mbGFzaF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5uYW1lID0gIk5PUiBGbGFzaCIsCisJCS5zdGFydCA9IDAsCisJCS5lbmQgPSBTWl84TSAtIDEsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBlc3B0X25vcl9mbGFzaF9kZXZpY2UgPSB7CisJLm5hbWUgPSAicGh5c21hcC1mbGFzaCIsCisJLnJlc291cmNlID0gZXNwdF9ub3JfZmxhc2hfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShlc3B0X25vcl9mbGFzaF9yZXNvdXJjZXMpLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJmVzcHRfbm9yX2ZsYXNoX2RhdGEsCisJfSwKK307CisKKy8qIFNILUV0aGVyICovCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHNoX2V0aF9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydCAgPSAweEZFRTAwODAwLCAgIC8qIHVzZSBldGgxICovCisJCS5lbmQgICAgPSAweEZFRTAwRjdDIC0gMSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sIHsKKwkJLnN0YXJ0ICA9IDU3LCAgIC8qIGlycSBudW1iZXIgKi8KKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHNoX2V0aF9wbGF0X2RhdGEgc2g3NzYzX2V0aF9wZGF0YSA9IHsKKwkucGh5ID0gMCwKKwkuZWRtYWNfZW5kaWFuID0gRURNQUNfTElUVExFX0VORElBTiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGVzcHRfZXRoX2RldmljZSA9IHsKKwkubmFtZSAgICAgICA9ICJzaC1ldGgiLAorCS5yZXNvdXJjZSAgID0gc2hfZXRoX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcyAgPSBBUlJBWV9TSVpFKHNoX2V0aF9yZXNvdXJjZXMpLAorCS5kZXYgICAgICAgID0geworCQkucGxhdGZvcm1fZGF0YSA9ICZzaDc3NjNfZXRoX3BkYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZXNwdF9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmZXNwdF9ub3JfZmxhc2hfZGV2aWNlLAorCSZlc3B0X2V0aF9kZXZpY2UsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBlc3B0X2RldmljZXNfc2V0dXAodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fYWRkX2RldmljZXMoZXNwdF9kZXZpY2VzLAorCQkJCSAgICBBUlJBWV9TSVpFKGVzcHRfZGV2aWNlcykpOworfQorZGV2aWNlX2luaXRjYWxsKGVzcHRfZGV2aWNlc19zZXR1cCk7CisKK3N0YXRpYyBzdHJ1Y3Qgc2hfbWFjaGluZV92ZWN0b3IgbXZfZXNwdCBfX2luaXRtdiA9IHsKKwkubXZfbmFtZSA9ICJFU1BULUdJR0EiLAorfTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL2JvYXJkLXBvbGFyaXMuYyBiL2FyY2gvc2gvYm9hcmRzL2JvYXJkLXBvbGFyaXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjYwN2ViCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9ib2FyZHMvYm9hcmQtcG9sYXJpcy5jCkBAIC0wLDAgKzEsMTQ5IEBACisvKgorICogSnVuZSAyMDA2IHN0ZXZlLmdsZW5kaW5uaW5nQHNtc2MuY29tCisgKgorICogUG9sYXJpcy1zcGVjaWZpYyByZXNvdXJjZSBkZWNsYXJhdGlvbgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3Ntc2M5MTF4Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KKyNpbmNsdWRlIDxhc20vaGVhcnRiZWF0Lmg+CisjaW5jbHVkZSA8Y3B1L2dwaW8uaD4KKyNpbmNsdWRlIDxtYWNoLXNlL21hY2gvc2UuaD4KKworI2RlZmluZSBCQ1IyCQkoMHhGRkZGRkY2MikKKyNkZWZpbmUgV0NSMgkJKDB4RkZGRkZGNjYpCisjZGVmaW5lIEFSRUE1X1dBSVRfQ1RSTAkoMHgxQzAwKQorI2RlZmluZSBXQUlUX1NUQVRFU18xMAkoMHg3KQorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHNtc2M5MTF4X3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLm5hbWUJCT0gInNtc2M5MTF4LW1lbW9yeSIsCisJCS5zdGFydAkJPSBQQV9FWFQ1LAorCQkuZW5kCQk9IFBBX0VYVDUgKyAweDFmZmYsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLm5hbWUJCT0gInNtc2M5MTF4LWlycSIsCisJCS5zdGFydAkJPSBJUlEwX0lSUSwKKwkJLmVuZAkJPSBJUlEwX0lSUSwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHNtc2M5MTF4X3BsYXRmb3JtX2NvbmZpZyBzbXNjOTExeF9jb25maWcgPSB7CisJLmlycV9wb2xhcml0eQk9IFNNU0M5MTFYX0lSUV9QT0xBUklUWV9BQ1RJVkVfTE9XLAorCS5pcnFfdHlwZQk9IFNNU0M5MTFYX0lSUV9UWVBFX09QRU5fRFJBSU4sCisJLmZsYWdzCQk9IFNNU0M5MTFYX1VTRV8zMkJJVCwKKwkucGh5X2ludGVyZmFjZQk9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUksCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzbXNjOTExeF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNtc2M5MTF4IiwKKwkuaWQJCT0gMCwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc21zYzkxMXhfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBzbXNjOTExeF9yZXNvdXJjZXMsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmc21zYzkxMXhfY29uZmlnLAorCX0sCit9OworCitzdGF0aWMgdW5zaWduZWQgY2hhciBoZWFydGJlYXRfYml0X3Bvc1tdID0geyAwLCAxLCAyLCAzIH07CisKK3N0YXRpYyBzdHJ1Y3QgaGVhcnRiZWF0X2RhdGEgaGVhcnRiZWF0X2RhdGEgPSB7CisJLmJpdF9wb3MJPSBoZWFydGJlYXRfYml0X3BvcywKKwkubnJfYml0cwk9IEFSUkFZX1NJWkUoaGVhcnRiZWF0X2JpdF9wb3MpLAorCS5yZWdzaXplCT0gOCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaGVhcnRiZWF0X3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gUE9SVF9QQ0RSLAorCQkuZW5kCT0gUE9SVF9QQ0RSLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaGVhcnRiZWF0X2RldmljZSA9IHsKKwkubmFtZQkJPSAiaGVhcnRiZWF0IiwKKwkuaWQJCT0gLTEsCisJLmRldgk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmaGVhcnRiZWF0X2RhdGEsCisJfSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoaGVhcnRiZWF0X3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gaGVhcnRiZWF0X3Jlc291cmNlcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwb2xhcmlzX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZzbXNjOTExeF9kZXZpY2UsCisJJmhlYXJ0YmVhdF9kZXZpY2UsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBwb2xhcmlzX2luaXRpYWxpc2Uodm9pZCkKK3sKKwl1MTYgd2NyLCBiY3JfbWFzazsKKworCXByaW50ayhLRVJOX0lORk8gIkNvbmZpZ3VyaW5nIFBvbGFyaXMgZXh0ZXJuYWwgYnVzXG4iKTsKKworCS8qIENvbmZpZ3VyZSBhcmVhIDUgd2l0aCAyIHdhaXQgc3RhdGVzICovCisJd2NyID0gY3RybF9pbncoV0NSMik7CisJd2NyICY9ICh+QVJFQTVfV0FJVF9DVFJMKTsKKwl3Y3IgfD0gKFdBSVRfU1RBVEVTXzEwIDw8IDEwKTsKKwljdHJsX291dHcod2NyLCBXQ1IyKTsKKworCS8qIENvbmZpZ3VyZSBhcmVhIDUgZm9yIDMyLWJpdCBhY2Nlc3MgKi8KKwliY3JfbWFzayA9IGN0cmxfaW53KEJDUjIpOworCWJjcl9tYXNrIHw9IDEgPDwgMTA7CisJY3RybF9vdXR3KGJjcl9tYXNrLCBCQ1IyKTsKKworCXJldHVybiBwbGF0Zm9ybV9hZGRfZGV2aWNlcyhwb2xhcmlzX2RldmljZXMsCisJCQkJICAgIEFSUkFZX1NJWkUocG9sYXJpc19kZXZpY2VzKSk7Cit9CithcmNoX2luaXRjYWxsKHBvbGFyaXNfaW5pdGlhbGlzZSk7CisKK3N0YXRpYyBzdHJ1Y3QgaXByX2RhdGEgaXByX2lycV90YWJsZVtdID0geworCS8qIEV4dGVybmFsIElSUXMgKi8KKwl7IElSUTBfSVJRLCAwLCAgMCwgIDEsIH0sCS8qIElSUTAgKi8KKwl7IElSUTFfSVJRLCAwLCAgNCwgIDEsIH0sCS8qIElSUTEgKi8KK307CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGlwcl9vZmZzZXRzW10gPSB7CisJSU5UQ19JUFJDCit9OworCitzdGF0aWMgc3RydWN0IGlwcl9kZXNjIGlwcl9pcnFfZGVzYyA9IHsKKwkuaXByX29mZnNldHMJPSBpcHJfb2Zmc2V0cywKKwkubnJfb2Zmc2V0cwk9IEFSUkFZX1NJWkUoaXByX29mZnNldHMpLAorCisJLmlwcl9kYXRhCT0gaXByX2lycV90YWJsZSwKKwkubnJfaXJxcwk9IEFSUkFZX1NJWkUoaXByX2lycV90YWJsZSksCisJLmNoaXAgPSB7CisJCS5uYW1lCT0gInNoNzcwOS1leHQiLAorCX0sCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgaW5pdF9wb2xhcmlzX2lycSh2b2lkKQoreworCS8qIERpc2FibGUgYWxsIGludGVycnVwdHMgKi8KKwljdHJsX291dHcoMCwgQkNSX0lMQ1JBKTsKKwljdHJsX291dHcoMCwgQkNSX0lMQ1JCKTsKKwljdHJsX291dHcoMCwgQkNSX0lMQ1JDKTsKKwljdHJsX291dHcoMCwgQkNSX0lMQ1JEKTsKKwljdHJsX291dHcoMCwgQkNSX0lMQ1JFKTsKKwljdHJsX291dHcoMCwgQkNSX0lMQ1JGKTsKKwljdHJsX291dHcoMCwgQkNSX0lMQ1JHKTsKKworCXJlZ2lzdGVyX2lwcl9jb250cm9sbGVyKCZpcHJfaXJxX2Rlc2MpOworfQorCitzdGF0aWMgc3RydWN0IHNoX21hY2hpbmVfdmVjdG9yIG12X3BvbGFyaXMgX19pbml0bXYgPSB7CisJLm12X25hbWUJCT0gIlBvbGFyaXMiLAorCS5tdl9ucl9pcnFzCQk9IDYxLAorCS5tdl9pbml0X2lycQkJPSBpbml0X3BvbGFyaXNfaXJxLAorfTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL2JvYXJkLXNoNzc4NWxjci5jIGIvYXJjaC9zaC9ib2FyZHMvYm9hcmQtc2g3Nzg1bGNyLmMKaW5kZXggMzhhNjQ5Ni4uOTRjMDI5NiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtc2g3Nzg1bGNyLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvYm9hcmQtc2g3Nzg1bGNyLmMKQEAgLTI3NSw3ICsyNzUsMTggQEAKIAogc3RhdGljIHZvaWQgc2g3Nzg1bGNyX3Bvd2VyX29mZih2b2lkKQogewotCWN0cmxfb3V0YigweDAxLCBQMlNFR0FERFIoUExEX1BPRkNSKSk7CisJdW5zaWduZWQgY2hhciAqcDsKKworCXAgPSBpb3JlbWFwKFBMRF9QT0ZDUiwgUExEX1BPRkNSICsgMSk7CisJaWYgKCFwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGlvcmVtYXAgZXJyb3IuXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisJKnAgPSAweDAxOworCWlvdW5tYXAocCk7CisJc2V0X2JsX2JpdCgpOworCXdoaWxlICgxKQorCQljcHVfcmVsYXgoKTsKIH0KIAogLyogSW5pdGlhbGl6ZSB0aGUgYm9hcmQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL2JvYXJkLXVycXVlbGwuYyBiL2FyY2gvc2gvYm9hcmRzL2JvYXJkLXVycXVlbGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzAzNmNlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9ib2FyZHMvYm9hcmQtdXJxdWVsbC5jCkBAIC0wLDAgKzEsMTYyIEBACisvKgorICogUmVuZXNhcyBUZWNobm9sb2d5IENvcnAuIFNINzc4NiBVcnF1ZWxsIFN1cHBvcnQuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4ICBLdW5pbm9yaSBNb3JpbW90byA8bW9yaW1vdG8ua3VuaW5vcmlAcmVuZXNhcy5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggIFlvc2hpaGlybyBTaGltb2RhCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZmIuaD4KKyNpbmNsdWRlIDxsaW51eC9zbWM5MXguaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPG1hY2gvdXJxdWVsbC5oPgorI2luY2x1ZGUgPGNwdS9zaDc3ODYuaD4KKyNpbmNsdWRlIDxhc20vaGVhcnRiZWF0Lmg+CisjaW5jbHVkZSA8YXNtL3NpemVzLmg+CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaGVhcnRiZWF0X3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gQk9BUkRSRUcoU0xFRFIpLAorCQkuZW5kCT0gQk9BUkRSRUcoU0xFRFIpLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBoZWFydGJlYXRfZGF0YSBoZWFydGJlYXRfZGF0YSA9IHsKKwkucmVnc2l6ZSA9IDE2LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaGVhcnRiZWF0X2RldmljZSA9IHsKKwkubmFtZQkJPSAiaGVhcnRiZWF0IiwKKwkuaWQJCT0gLTEsCisJLmRldgk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmaGVhcnRiZWF0X2RhdGEsCisJfSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoaGVhcnRiZWF0X3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gaGVhcnRiZWF0X3Jlc291cmNlcywKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc21jOTF4X3BsYXRkYXRhIHNtYzkxeF9pbmZvID0geworCS5mbGFncyA9IFNNQzkxWF9VU0VfMTZCSVQgfCBTTUM5MVhfTk9XQUlULAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzbWM5MXhfZXRoX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLm5hbWUgICA9ICJTTUM5MUMxMTEiICwKKwkJLnN0YXJ0ICA9IDB4MDU4MDAzMDAsCisJCS5lbmQgICAgPSAweDA1ODAwMzBmLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydCAgPSAxMSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzbWM5MXhfZXRoX2RldmljZSA9IHsKKwkubmFtZSAgICAgICAgICAgPSAic21jOTF4IiwKKwkubnVtX3Jlc291cmNlcyAgPSBBUlJBWV9TSVpFKHNtYzkxeF9ldGhfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UgICAgICAgPSBzbWM5MXhfZXRoX3Jlc291cmNlcywKKwkuZGV2CT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZzbWM5MXhfaW5mbywKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIG5vcl9mbGFzaF9wYXJ0aXRpb25zW10gPSB7CisJeworCQkubmFtZQkJPSAibG9hZGVyIiwKKwkJLm9mZnNldAkJPSAweDAwMDAwMDAwLAorCQkuc2l6ZQkJPSBTWl81MTJLLAorCQkubWFza19mbGFncwk9IE1URF9XUklURUFCTEUsCS8qIFJlYWQtb25seSAqLworCX0sCisJeworCQkubmFtZQkJPSAiYm9vdGVudiIsCisJCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZQkJPSBTWl81MTJLLAorCQkubWFza19mbGFncwk9IE1URF9XUklURUFCTEUsCS8qIFJlYWQtb25seSAqLworCX0sCisJeworCQkubmFtZQkJPSAia2VybmVsIiwKKwkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCisJCS5zaXplCQk9IFNaXzRNLAorCX0sCisJeworCQkubmFtZQkJPSAiZGF0YSIsCisJCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZQkJPSBNVERQQVJUX1NJWl9GVUxMLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBub3JfZmxhc2hfZGF0YSA9IHsKKwkud2lkdGgJCT0gMiwKKwkucGFydHMJCT0gbm9yX2ZsYXNoX3BhcnRpdGlvbnMsCisJLm5yX3BhcnRzCT0gQVJSQVlfU0laRShub3JfZmxhc2hfcGFydGl0aW9ucyksCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG5vcl9mbGFzaF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IE5PUl9GTEFTSF9BRERSLAorCQkuZW5kCT0gTk9SX0ZMQVNIX0FERFIgKyBOT1JfRkxBU0hfU0laRSAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG5vcl9mbGFzaF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInBoeXNtYXAtZmxhc2giLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZub3JfZmxhc2hfZGF0YSwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShub3JfZmxhc2hfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBub3JfZmxhc2hfcmVzb3VyY2VzLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnVycXVlbGxfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJmhlYXJ0YmVhdF9kZXZpY2UsCisJJnNtYzkxeF9ldGhfZGV2aWNlLAorCSZub3JfZmxhc2hfZGV2aWNlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgdXJxdWVsbF9kZXZpY2VzX3NldHVwKHZvaWQpCit7CisJLyogVVNCICovCisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fVVNCX09WQzAsICBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9VU0JfUEVOQzAsIE5VTEwpOworCisJcmV0dXJuIHBsYXRmb3JtX2FkZF9kZXZpY2VzKHVycXVlbGxfZGV2aWNlcywKKwkJCQkgICAgQVJSQVlfU0laRSh1cnF1ZWxsX2RldmljZXMpKTsKK30KK2RldmljZV9pbml0Y2FsbCh1cnF1ZWxsX2RldmljZXNfc2V0dXApOworCitzdGF0aWMgdm9pZCB1cnF1ZWxsX3Bvd2VyX29mZih2b2lkKQoreworCV9fcmF3X3dyaXRldygweGE1YTUsIFVCT0FSRFJFRyhTUlNUUikpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgdXJxdWVsbF9pbml0X2lycSh2b2lkKQoreworCXBsYXRfaXJxX3NldHVwX3BpbnMoSVJRX01PREVfSVJMMzIxMF9NQVNLKTsKK30KKworLyogSW5pdGlhbGl6ZSB0aGUgYm9hcmQgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCB1cnF1ZWxsX3NldHVwKGNoYXIgKipjbWRsaW5lX3ApCit7CisJcHJpbnRrKEtFUk5fSU5GTyAiUmVuZXNhcyBUZWNobm9sb2d5IENvcnAuIFVycXVlbGwgc3VwcG9ydC5cbiIpOworCisJcG1fcG93ZXJfb2ZmID0gdXJxdWVsbF9wb3dlcl9vZmY7Cit9CisKKy8qCisgKiBUaGUgTWFjaGluZSBWZWN0b3IKKyAqLworc3RhdGljIHN0cnVjdCBzaF9tYWNoaW5lX3ZlY3RvciBtdl91cnF1ZWxsIF9faW5pdG12ID0geworCS5tdl9uYW1lCT0gIlVycXVlbGwiLAorCS5tdl9zZXR1cAk9IHVycXVlbGxfc2V0dXAsCisJLm12X2luaXRfaXJxCT0gdXJxdWVsbF9pbml0X2lycSwKK307CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWhpZ2hsYW5kZXIvS2NvbmZpZyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9LY29uZmlnCmluZGV4IDA4MDU3ZjYuLmRlZjQ5Y2MgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9LY29uZmlnCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9LY29uZmlnCkBAIC0xOCw3ICsxOCw3IEBACiBjb25maWcgU0hfUjc3ODVSUAogCWJvb2wgIlI3Nzg1UlAgYm9hcmQgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIENQVV9TVUJUWVBFX1NINzc4NQotCXNlbGVjdCBHRU5FUklDX0dQSU8KKwlzZWxlY3QgQVJDSF9SRVFVSVJFX0dQSU9MSUIKIAogZW5kY2hvaWNlCiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtaHA2eHgvcG1fd2FrZXVwLlMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWhwNnh4L3BtX3dha2V1cC5TCmluZGV4IDQ0YjY0OGMuLjRmMThkNDQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtaHA2eHgvcG1fd2FrZXVwLlMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1ocDZ4eC9wbV93YWtldXAuUwpAQCAtMTAsNDcgKzEwLDMyIEBACiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGNwdS9tbXVfY29udGV4dC5oPgogCi0jZGVmaW5lIGswCXIwCi0jZGVmaW5lIGsxCXIxCi0jZGVmaW5lIGsyCXIyCi0jZGVmaW5lIGszCXIzCi0jZGVmaW5lIGs0CXI0Ci0KIC8qCiAgKiBLZXJuZWwgbW9kZSByZWdpc3RlciB1c2FnZToKICAqCWswCXNjcmF0Y2gKICAqCWsxCXNjcmF0Y2gKLSAqCWsyCXNjcmF0Y2ggKEV4Y2VwdGlvbiBjb2RlKQotICoJazMJc2NyYXRjaCAoUmV0dXJuIGFkZHJlc3MpCi0gKglrNAlzY3JhdGNoCi0gKglrNQlyZXNlcnZlZAotICoJazYJR2xvYmFsIEludGVycnVwdCBNYXNrICgwLS0xNSA8PCA0KQotICoJazcJQ1VSUkVOVF9USFJFQURfSU5GTyAocG9pbnRlciB0byBjdXJyZW50IHRocmVhZCBpbmZvKQorICogRm9yIG1vcmUgZGV0YWlscywgcGxlYXNlIGhhdmUgYSBsb29rIGF0IGVudHJ5LlMKICAqLwogCisjZGVmaW5lIGswCXIwCisjZGVmaW5lIGsxCXIxCisKIEVOVFJZKHdha2V1cF9zdGFydCkKICEgY2xlYXIgU1RCWSBiaXQKLQltb3YJIy0xMjYsIGsyCisJbW92CSMtMTI2LCBrMQogICAgCWFuZAkjMTI3LCBrMAotCW1vdi5iCWswLCBAazIKKwltb3YuYglrMCwgQGsxCiAhIGVuYWJsZSByZWZyZXNoCiAJbW92LmwJNWYsIGsxCiAJbW92LncJNmYsIGswCiAgIAltb3YudwlrMCwgQGsxCiAhIGp1bXAgdG8gaGFuZGxlcgotCW1vdi5sCTJmLCBrMgotCW1vdi5sCTNmLCBrMwotCW1vdi5sCUBrMiwgazIKLQogCW1vdi5sCTRmLCBrMQogCWptcAlAazEKLQlub3AKKwkgbm9wCiAKIAkuYWxpZ24JMgotMToJLmxvbmcJRVhQRVZUCi0yOgkubG9uZwlJTlRFVlQKLTM6CS5sb25nCXJldF9mcm9tX2lycQotNDoJLmxvbmcJaGFuZGxlX2V4Y2VwdGlvbgorNDoJLmxvbmcJaGFuZGxlX2ludGVycnVwdAogNToJLmxvbmcJMHhmZmZmZmY2OAogNjoJLndvcmQJMHgwNTI0CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtaHA2eHgvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtaHA2eHgvc2V0dXAuYwppbmRleCA3NDY3NDJiZC4uOGYzMDViMyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1ocDZ4eC9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtaHA2eHgvc2V0dXAuYwpAQCAtMTE1LDcgKzExNSw2IEBACiAJLm12X3NldHVwID0gaHA2eHhfc2V0dXAsCiAJLyogSVJRJ3MgOiBDUFUoNjQpICsgQ0NISVAoMTYpICsgRlJFRV9UT19VU0UoNikgKi8KIAkubXZfbnJfaXJxcyA9IEhENjQ0NjFfSVJRQkFTRSArIEhENjQ0NjFfSVJRX05VTSArIDYsCi0JLm12X2lycV9kZW11eCA9IGhkNjQ0NjFfaXJxX2RlbXV4LAogCS8qIEVuYWJsZSBJUlEwIC0+IElSUTMgaW4gSVJRX01PREUgKi8KIAkubXZfaW5pdF9pcnEgPSBocDZ4eF9pbml0X2lycSwKIH07CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLW1pZ29yL3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLW1pZ29yL3NldHVwLmMKaW5kZXggMjhlNTZjNS4uYmMzNWI0YyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1taWdvci9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtbWlnb3Ivc2V0dXAuYwpAQCAtNDUwLDYgKzQ1MCwxNCBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBtaWdvcl9kZXZpY2VzX3NldHVwKHZvaWQpCiB7CisKKyNpZmRlZiBDT05GSUdfUE0KKwkvKiBMZXQgRDExIExFRCBzaG93IFNUQVRVUzAgKi8KKwlncGlvX3JlcXVlc3QoR1BJT19GTl9TVEFUVVMwLCBOVUxMKTsKKworCS8qIExpdCBEMTIgTEVEIHNob3cgUERTVEFUVVMgKi8KKwlncGlvX3JlcXVlc3QoR1BJT19GTl9QRFNUQVRVUywgTlVMTCk7CisjZWxzZQogCS8qIExpdCBEMTEgTEVEICovCiAJZ3Bpb19yZXF1ZXN0KEdQSU9fUFRKNywgTlVMTCk7CiAJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUFRKNywgMSk7CkBAIC00NTksNiArNDY3LDcgQEAKIAlncGlvX3JlcXVlc3QoR1BJT19QVEo1LCBOVUxMKTsKIAlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19QVEo1LCAxKTsKIAlncGlvX2V4cG9ydChHUElPX1BUSjUsIDApOworI2VuZGlmCiAKIAkvKiBTTUM5MUMxMTEgLSBFbmFibGUgSVJRMCwgU2V0dXAgQ1M0IGZvciAxNi1iaXQgZmFzdCBhY2Nlc3MgKi8KIAlncGlvX3JlcXVlc3QoR1BJT19GTl9JUlEwLCBOVUxMKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtcnNrL0tjb25maWcgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXJzay9LY29uZmlnCmluZGV4IGJmZjA5NWQuLmFlZmYzYjAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtcnNrL0tjb25maWcKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1yc2svS2NvbmZpZwpAQCAtMTAsNyArMTAsNyBAQAogCiBjb25maWcgU0hfUlNLNzIwMwogCWJvb2wgIlJTSzcyMDMiCi0Jc2VsZWN0IEdFTkVSSUNfR1BJTworCXNlbGVjdCBBUkNIX1JFUVVJUkVfR1BJT0xJQgogCWRlcGVuZHMgb24gQ1BVX1NVQlRZUEVfU0g3MjAzCiAKIGVuZGNob2ljZQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zaDc3NjNyZHAvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2g3NzYzcmRwL3NldHVwLmMKaW5kZXggNmY5MjZmZC4uMzkwNTM0YSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zaDc3NjNyZHAvc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNoNzc2M3JkcC9zZXR1cC5jCkBAIC02MywxNSArNjMsMTkgQEAKIAl9LAogfTsKIAotLyogU0gtRXRoZXIgKi8KKy8qCisgKiBTSC1FdGhlcgorICoKKyAqIFNIIEV0aGVyIG9mIFNINzc2MyBoYXMgbXVsdGkgSVJRIGhhbmRsaW5nLgorICogKDU3LDU4LDU5IC0+IDU3KQorICovCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHNoX2V0aF9yZXNvdXJjZXNbXSA9IHsKIAl7CiAJCS5zdGFydCAgPSAweEZFRTAwODAwLCAgIC8qIHVzZSBldGgxICovCiAJCS5lbmQgICAgPSAweEZFRTAwRjdDIC0gMSwKIAkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAogCX0sIHsKLQkJLnN0YXJ0ICA9IDU4LCAgIC8qIGlycSBudW1iZXIgKi8KLQkJLmVuZCAgICA9IDU4LAorCQkuc3RhcnQgID0gNTcsICAgLyogaXJxIG51bWJlciAqLwogCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JUlEsCiAJfSwKIH07CmRpZmYgLS1naXQgYS9hcmNoL3NoL2Jvb3QvTWFrZWZpbGUgYi9hcmNoL3NoL2Jvb3QvTWFrZWZpbGUKaW5kZXggYzE2Y2NkNC4uOTU0ODNkMSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib290L01ha2VmaWxlCisrKyBiL2FyY2gvc2gvYm9vdC9NYWtlZmlsZQpAQCAtMzMsMjAgKzMzLDI0IEBACiAkKG9iaikvY29tcHJlc3NlZC92bWxpbnV4OiBGT1JDRQogCSQoUSkkKE1BS0UpICQoYnVpbGQpPSQob2JqKS9jb21wcmVzc2VkICRACiAKLWlmZXEgKCQoQ09ORklHXzMyQklUKSx5KQotS0VSTkVMX0xPQUQJOj0gJChzaGVsbCAvYmluL2Jhc2ggLWMgJ3ByaW50ZiAiMHglMDh4IiBcCi0JCSAgICAgJCRbJChDT05GSUdfUEFHRV9PRkZTRVQpICArIFwKLQkJCSQoQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQpXScpCi1lbHNlCi1LRVJORUxfTE9BRAk6PSAkKHNoZWxsIC9iaW4vYmFzaCAtYyAncHJpbnRmICIweCUwOHgiIFwKLQkJICAgICAkJFskKENPTkZJR19QQUdFX09GRlNFVCkgICsgXAotCQkJJChDT05GSUdfTUVNT1JZX1NUQVJUKSArIFwKLQkJCSQoQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQpXScpCitLRVJORUxfTUVNT1JZIDo9IDB4MDAwMDAwMDAKK2lmZXEgKCQoQ09ORklHX1BNQl9GSVhFRCkseSkKK0tFUk5FTF9NRU1PUlkgOj0gJChzaGVsbCAvYmluL2Jhc2ggLWMgJ3ByaW50ZiAiMHglMDh4IiBcCisJCSAgICAgJCRbJChDT05GSUdfTUVNT1JZX1NUQVJUKSAmIDB4MWZmZmZmZmZdJykKIGVuZGlmCitpZmVxICgkKENPTkZJR18yOUJJVCkseSkKK0tFUk5FTF9NRU1PUlkgOj0gJChzaGVsbCAvYmluL2Jhc2ggLWMgJ3ByaW50ZiAiMHglMDh4IiBcCisJCSAgICAgJCRbJChDT05GSUdfTUVNT1JZX1NUQVJUKV0nKQorZW5kaWYKKworS0VSTkVMX0xPQUQJOj0gJChzaGVsbCAvYmluL2Jhc2ggLWMgJ3ByaW50ZiAiMHglMDh4IiBcCisJCSAgICAgJCRbJChDT05GSUdfUEFHRV9PRkZTRVQpICArIFwKKwkJCSQoS0VSTkVMX01FTU9SWSkgKyBcCisJCQkkKENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUKV0nKQogCiBLRVJORUxfRU5UUlkJOj0gJChzaGVsbCAvYmluL2Jhc2ggLWMgJ3ByaW50ZiAiMHglMDh4IiBcCiAJCSAgICAgJCRbJChDT05GSUdfUEFHRV9PRkZTRVQpICArIFwKLQkJCSQoQ09ORklHX01FTU9SWV9TVEFSVCkgKyBcCisJCQkkKEtFUk5FTF9NRU1PUlkpICsgXAogCQkJJChDT05GSUdfWkVST19QQUdFX09GRlNFVCkgKyAkKENPTkZJR19FTlRSWV9PRkZTRVQpXScpCiAKIHF1aWV0X2NtZF91aW1hZ2UgPSBVSU1BR0UgICRACmRpZmYgLS1naXQgYS9hcmNoL3NoL2NjaGlwcy9oZDY0NDZ4L2hkNjQ0NjEuYyBiL2FyY2gvc2gvY2NoaXBzL2hkNjQ0NngvaGQ2NDQ2MS5jCmluZGV4IDI3Y2VlYjkuLjI1ZWY5MTAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY2NoaXBzL2hkNjQ0NngvaGQ2NDQ2MS5jCisrKyBiL2FyY2gvc2gvY2NoaXBzL2hkNjQ0NngvaGQ2NDQ2MS5jCkBAIC01MywyMSArNTMsMjIgQEAKIAkudW5tYXNrCQk9IGhkNjQ0NjFfdW5tYXNrX2lycSwKIH07CiAKLWludCBoZDY0NDYxX2lycV9kZW11eChpbnQgaXJxKQorc3RhdGljIHZvaWQgaGQ2NDQ2MV9pcnFfZGVtdXgodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQogewotCWlmIChpcnEgPT0gQ09ORklHX0hENjQ0NjFfSVJRKSB7Ci0JCXVuc2lnbmVkIHNob3J0IGJpdDsKLQkJdW5zaWduZWQgc2hvcnQgbmlyciA9IGludyhIRDY0NDYxX05JUlIpOwotCQl1bnNpZ25lZCBzaG9ydCBuaW1yID0gaW53KEhENjQ0NjFfTklNUik7Ci0JCWludCBpOworCXVuc2lnbmVkIHNob3J0IGludHYgPSBjdHJsX2ludyhIRDY0NDYxX05JUlIpOworCXN0cnVjdCBpcnFfZGVzYyAqZXh0X2Rlc2M7CisJdW5zaWduZWQgaW50IGV4dF9pcnEgPSBIRDY0NDYxX0lSUUJBU0U7CiAKLQkJbmlyciAmPSB+bmltcjsKLQkJZm9yIChiaXQgPSAxLCBpID0gMDsgaSA8IDE2OyBiaXQgPDw9IDEsIGkrKykKLQkJCWlmIChuaXJyICYgYml0KQotCQkJCWJyZWFrOwotCQlpcnEgPSBIRDY0NDYxX0lSUUJBU0UgKyBpOworCWludHYgJj0gKDEgPDwgSEQ2NDQ2MV9JUlFfTlVNKSAtIDE7CisKKwl3aGlsZSAoaW50dikgeworCQlpZiAoaW50diAmIDEpIHsKKwkJCWV4dF9kZXNjID0gaXJxX2Rlc2MgKyBleHRfaXJxOworCQkJaGFuZGxlX2xldmVsX2lycShleHRfaXJxLCBleHRfZGVzYyk7CisJCX0KKwkJaW50diA+Pj0gMTsKKwkJZXh0X2lycSsrOwogCX0KLQlyZXR1cm4gaXJxOwogfQogCiBpbnQgX19pbml0IHNldHVwX2hkNjQ0NjEodm9pZCkKQEAgLTkzLDYgKzk0LDkgQEAKIAkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKGksICZoZDY0NDYxX2lycV9jaGlwLAogCQkJCQkgaGFuZGxlX2xldmVsX2lycSk7CiAKKwlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihDT05GSUdfSEQ2NDQ2MV9JUlEsIGhkNjQ0NjFfaXJxX2RlbXV4KTsKKwlzZXRfaXJxX3R5cGUoQ09ORklHX0hENjQ0NjFfSVJRLCBJUlFfVFlQRV9MRVZFTF9MT1cpOworCiAjaWZkZWYgQ09ORklHX0hENjQ0NjFfRU5BQkxFUgogCXByaW50ayhLRVJOX0lORk8gIkhENjQ0NjE6IGVuYWJsaW5nIFBDTUNJQSBkZXZpY2VzXG4iKTsKIAlfX3Jhd193cml0ZWIoMHg0YywgSEQ2NDQ2MV9QQ0MxQ1NDSUVSKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9lc3B0X2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9lc3B0X2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzNlYzQyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9jb25maWdzL2VzcHRfZGVmY29uZmlnCkBAIC0wLDAgKzEsMTE5MCBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5LXJjNworIyBUdWUgTWFyIDE3IDEzOjI1OjU4IDIwMDkKKyMKK0NPTkZJR19TVVBFUkg9eQorQ09ORklHX1NVUEVSSDMyPXkKK0NPTkZJR19BUkNIX0RFRkNPTkZJRz0iYXJjaC9zaC9jb25maWdzL3NoeDNfZGVmY29uZmlnIgorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfQlVHPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKK0NPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CisjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CisjIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRSBpcyBub3Qgc2V0CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX0lLQ09ORklHPXkKK0NPTkZJR19JS0NPTkZJR19QUk9DPXkKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CitDT05GSUdfR1JPVVBfU0NIRUQ9eQorQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQorIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1VTRVJfU0NIRUQ9eQorIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorQ09ORklHX05BTUVTUEFDRVM9eQorQ09ORklHX1VUU19OUz15CitDT05GSUdfSVBDX05TPXkKKyMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAorIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NZU0NUTD15CitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1VJRDE2PXkKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0NPTVBBVF9CUks9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0FOT05fSU5PREVTPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19BSU89eQorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1NMVUIgaXMgbm90IHNldAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CitDT05GSUdfUFJPRklMSU5HPXkKK0NPTkZJR19UUkFDRVBPSU5UUz15CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19PUFJPRklMRT15CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfQ0xLPXkKK0NPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfVU5MT0FEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfQkxPQ0s9eQorIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKK0NPTkZJR19ERUZBVUxUX0FTPXkKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKKyMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAorCisjCisjIFN5c3RlbSB0eXBlCisjCitDT05GSUdfQ1BVX1NIND15CitDT05GSUdfQ1BVX1NINEE9eQorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NjE5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzIwMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzI2MyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9NWEcgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDcgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MTAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzA5MSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTBSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MVIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjM9eQorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NIWDMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzQzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDczNjYgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g1XzEwMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDVfMTAzIGlzIG5vdCBzZXQKKworIworIyBNZW1vcnkgbWFuYWdlbWVudCBvcHRpb25zCisjCitDT05GSUdfUVVJQ0tMSVNUPXkKK0NPTkZJR19NTVU9eQorQ09ORklHX1BBR0VfT0ZGU0VUPTB4ODAwMDAwMDAKK0NPTkZJR19NRU1PUllfU1RBUlQ9MHgwYzAwMDAwMAorQ09ORklHX01FTU9SWV9TSVpFPTB4MDQwMDAwMDAKK0NPTkZJR18yOUJJVD15CitDT05GSUdfVlNZU0NBTEw9eQorQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVD15CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTEKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CitDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfUEFHRV9TSVpFXzRLQj15CisjIENPTkZJR19QQUdFX1NJWkVfOEtCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfU0laRV8xNktCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKK0NPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorIyBDT05GSUdfRkxBVE1FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfU1BBUlNFTUVNX01BTlVBTD15CitDT05GSUdfU1BBUlNFTUVNPXkKK0NPTkZJR19IQVZFX01FTU9SWV9QUkVTRU5UPXkKK0NPTkZJR19TUEFSU0VNRU1fU1RBVElDPXkKKyMgQ09ORklHX01FTU9SWV9IT1RQTFVHIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKK0NPTkZJR19NSUdSQVRJT049eQorIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAorQ09ORklHX05SX1FVSUNLPTIKK0NPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQorCisjCisjIENhY2hlIGNvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX1NIX0RJUkVDVF9NQVBQRUQgaXMgbm90IHNldAorQ09ORklHX0NBQ0hFX1dSSVRFQkFDSz15CisjIENPTkZJR19DQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAorIyBDT05GSUdfQ0FDSEVfT0ZGIGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3IgZmVhdHVyZXMKKyMKK0NPTkZJR19DUFVfTElUVExFX0VORElBTj15CisjIENPTkZJR19DUFVfQklHX0VORElBTiBpcyBub3Qgc2V0CitDT05GSUdfU0hfRlBVPXkKKyMgQ09ORklHX1NIX1NUT1JFX1FVRVVFUyBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0hBU19JTlRFVlQ9eQorQ09ORklHX0NQVV9IQVNfU1JfUkI9eQorQ09ORklHX0NQVV9IQVNfRlBVPXkKKworIworIyBCb2FyZCBzdXBwb3J0CisjCisjIENPTkZJR19TSF9TSDc3NjNSRFAgaXMgbm90IHNldAorQ09ORklHX1NIX0VTUFQ9eQorCisjCisjIFRpbWVyIGFuZCBjbG9jayBjb25maWd1cmF0aW9uCisjCitDT05GSUdfU0hfVE1VPXkKK0NPTkZJR19TSF9USU1FUl9JUlE9MjgKK0NPTkZJR19TSF9QQ0xLX0ZSRVE9NjY2NjY2NjYKKyMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CisKKyMKKyMgQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nCisjCisjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0CisKKyMKKyMgRE1BIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NIX0RNQSBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcGFuaW9uIENoaXBzCisjCisKKyMKKyMgQWRkaXRpb25hbCBTdXBlckggRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0hFQVJUQkVBVCBpcyBub3Qgc2V0CisjIENPTkZJR19QVVNIX1NXSVRDSCBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGZlYXR1cmVzCisjCisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorQ09ORklHX0haXzI1MD15CisjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CitDT05GSUdfSFo9MjUwCisjIENPTkZJR19TQ0hFRF9IUlRJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CitDT05GSUdfU0VDQ09NUD15CitDT05GSUdfUFJFRU1QVF9OT05FPXkKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorQ09ORklHX0dVU0E9eQorCisjCisjIEJvb3Qgb3B0aW9ucworIworQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAorQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAorQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTQzAsMTE1MjAwIHJvb3Q9L2Rldi9uZnMgaXA9Ym9vdHAiCisKKyMKKyMgQnVzIG9wdGlvbnMKKyMKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisKKyMKKyMgRXhlY3V0YWJsZSBmaWxlIGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19QTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0CitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQorQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CitDT05GSUdfWEZSTT15CisjIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CisjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CitDT05GSUdfSVBfUE5QX0JPT1RQPXkKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19EQ0IgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorQ09ORklHX0ZXX0xPQURFUj15CitDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKK0NPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMS0RFVlM9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9eQorQ09ORklHX01URF9KRURFQ1BST0JFPXkKK0NPTkZJR19NVERfR0VOX1BST0JFPXkKK0NPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TPXkKK0NPTkZJR19NVERfQ0ZJX05PU1dBUD15CisjIENPTkZJR19NVERfQ0ZJX0JFX0JZVEVfU1dBUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0xFX0JZVEVfU1dBUCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9HRU9NRVRSWT15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMSBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JMT15CitDT05GSUdfTVREX0NGSV9JMj15CisjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAorIyBDT05GSUdfTVREX09UUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0FNRFNURD15CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTPXkKK0NPTkZJR19NVERfUEhZU01BUD15CisjIENPTkZJR19NVERfUEhZU01BUF9DT01QQVQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIworIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycworIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKKyMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTST15CitDT05GSUdfU0NTSV9ETUE9eQorIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD15CisjIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfU0cgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAorCisjCisjIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcworIworIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9XQUlUX1NDQU49bQorCisjCisjIFNDU0kgVHJhbnNwb3J0cworIworIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9MT1dMRVZFTD15CisjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAorIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKK0NPTkZJR19QSFlMSUI9eQorCisjCisjIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTkFUSU9OQUxfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NURTEwWFAgaXMgbm90IHNldAorIyBDT05GSUdfTFNJX0VUMTAxMUNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CitDT05GSUdfTURJT19CSVRCQU5HPXkKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST15CisjIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUTklDIGlzIG5vdCBzZXQKK0NPTkZJR19TSF9FVEg9eQorIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyBMQU4KKyMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKKworIworIyBVU0IgTmV0d29yayBBZGFwdGVycworIworIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CitDT05GSUdfREVWS01FTT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCisjIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9TSF9TQ0k9eQorQ09ORklHX1NFUklBTF9TSF9TQ0lfTlJfVUFSVFM9MworQ09ORklHX1NFUklBTF9TSF9TQ0lfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKKyMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAorQ09ORklHX0xFR0FDWV9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgorIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKK0NPTkZJR19IV19SQU5ET009eQorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAorIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRyaXZlcnMKKyMKKyMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAorQ09ORklHX0ZCPXkKKyMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JPT1RfVkVTQV9TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQorQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CitDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CisjIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0CitDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU49eQorQ09ORklHX0ZCX0JPVEhfRU5ESUFOPXkKKyMgQ09ORklHX0ZCX0JJR19FTkRJQU4gaXMgbm90IHNldAorIyBDT05GSUdfRkJfTElUVExFX0VORElBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKKworIworIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycworIworIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfRkJfU0hfTU9CSUxFX0xDREMgaXMgbm90IHNldAorQ09ORklHX0ZCX1NINzc2MD15CisjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQjg2MlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKK0NPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UUyBpcyBub3Qgc2V0CitDT05GSUdfRk9OVF84eDg9eQorQ09ORklHX0ZPTlRfOHgxNj15CitDT05GSUdfTE9HTz15CitDT05GSUdfTE9HT19MSU5VWF9NT05PPXkKK0NPTkZJR19MT0dPX0xJTlVYX1ZHQTE2PXkKK0NPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQ9eQorQ09ORklHX0xPR09fU1VQRVJIX01PTk89eQorQ09ORklHX0xPR09fU1VQRVJIX1ZHQTE2PXkKK0NPTkZJR19MT0dPX1NVUEVSSF9DTFVUMjI0PXkKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1VQUE9SVD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAorQ09ORklHX1VTQj15CisjIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCisjCisjIENPTkZJR19VU0JfREVWSUNFRlMgaXMgbm90IHNldAorQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1M9eQorIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTU9OPXkKKyMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAorCisjCisjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0hDRD15CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKKyMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heSBhbHNvIGJlIG5lZWRlZDsKKyMKKworIworIyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIworQ09ORklHX1VTQl9TVE9SQUdFPXkKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKKworIworIyBVU0IgcG9ydCBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCisjCisjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPXkKK0NPTkZJR19FWFQzX0ZTX1hBVFRSPXkKKyMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CitDT05GSUdfSkJEPXkKKyMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfRlNfTUJDQUNIRT15CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfRklMRV9MT0NLSU5HPXkKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKK0NPTkZJR19BVVRPRlNfRlM9eQorQ09ORklHX0FVVE9GUzRfRlM9eQorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19BQ0w9eQorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKK0NPTkZJR19UTVBGU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfSFVHRVRMQkZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19DUkFNRlM9eQorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ST01GU19GUz15CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPXkKKyMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAorQ09ORklHX1JPT1RfTkZTPXkKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorIyBDT05GSUdfU1VOUlBDX1JFR0lTVEVSX1Y0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CitDT05GSUdfTkxTPXkKK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQorQ09ORklHX05MU19DT0RFUEFHRV83Mzc9eQorQ09ORklHX05MU19DT0RFUEFHRV83NzU9eQorQ09ORklHX05MU19DT0RFUEFHRV84NTA9eQorQ09ORklHX05MU19DT0RFUEFHRV84NTI9eQorQ09ORklHX05MU19DT0RFUEFHRV84NTU9eQorQ09ORklHX05MU19DT0RFUEFHRV84NTc9eQorQ09ORklHX05MU19DT0RFUEFHRV84NjA9eQorQ09ORklHX05MU19DT0RFUEFHRV84NjE9eQorQ09ORklHX05MU19DT0RFUEFHRV84NjI9eQorQ09ORklHX05MU19DT0RFUEFHRV84NjM9eQorQ09ORklHX05MU19DT0RFUEFHRV84NjQ9eQorQ09ORklHX05MU19DT0RFUEFHRV84NjU9eQorQ09ORklHX05MU19DT0RFUEFHRV84NjY9eQorQ09ORklHX05MU19DT0RFUEFHRV84Njk9eQorQ09ORklHX05MU19DT0RFUEFHRV85MzY9eQorQ09ORklHX05MU19DT0RFUEFHRV85NTA9eQorQ09ORklHX05MU19DT0RFUEFHRV85MzI9eQorQ09ORklHX05MU19DT0RFUEFHRV85NDk9eQorQ09ORklHX05MU19DT0RFUEFHRV84NzQ9eQorQ09ORklHX05MU19JU084ODU5Xzg9eQorQ09ORklHX05MU19DT0RFUEFHRV8xMjUwPXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfMTI1MT15CitDT05GSUdfTkxTX0FTQ0lJPXkKK0NPTkZJR19OTFNfSVNPODg1OV8xPXkKK0NPTkZJR19OTFNfSVNPODg1OV8yPXkKK0NPTkZJR19OTFNfSVNPODg1OV8zPXkKK0NPTkZJR19OTFNfSVNPODg1OV80PXkKK0NPTkZJR19OTFNfSVNPODg1OV81PXkKK0NPTkZJR19OTFNfSVNPODg1OV82PXkKK0NPTkZJR19OTFNfSVNPODg1OV83PXkKK0NPTkZJR19OTFNfSVNPODg1OV85PXkKK0NPTkZJR19OTFNfSVNPODg1OV8xMz15CitDT05GSUdfTkxTX0lTTzg4NTlfMTQ9eQorQ09ORklHX05MU19JU084ODU5XzE1PXkKK0NPTkZJR19OTFNfS09JOF9SPXkKK0NPTkZJR19OTFNfS09JOF9VPXkKK0NPTkZJR19OTFNfVVRGOD15CisjIENPTkZJR19ETE0gaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CisjIENPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19GUz15CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CitDT05GSUdfU1RBQ0tUUkFDRT15CisjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CitDT05GSUdfTk9QX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQorQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX1JJTkdfQlVGRkVSPXkKK0NPTkZJR19UUkFDSU5HPXkKKworIworIyBUcmFjZXJzCisjCisjIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CisjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19NT1JFX0NPTVBJTEVfT1BUSU9OUyBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE89eQorCisjCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgorIworIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKKworIworIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKKyMKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorCisjCisjIEJsb2NrIG1vZGVzCisjCisjIENPTkZJR19DUllQVE9fQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisKKyMKKyMgSGFzaCBtb2RlcworIworIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorCisjCisjIERpZ2VzdAorIworIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKworIworIyBDaXBoZXJzCisjCisjIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorCisjCisjIENvbXByZXNzaW9uCisjCisjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKKworIworIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KKyMKKyMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fSFc9eQorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQorIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKK0NPTkZJR19DUkNfVDEwRElGPXkKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvcG9sYXJpc19kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvcG9sYXJpc19kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzIwZGVmMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvY29uZmlncy9wb2xhcmlzX2RlZmNvbmZpZwpAQCAtMCwwICsxLDk2OSBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5LXJjNAorIyBXZWQgRmViIDExIDE4OjQxOjU5IDIwMDkKKyMKK0NPTkZJR19TVVBFUkg9eQorQ09ORklHX1NVUEVSSDMyPXkKK0NPTkZJR19BUkNIX0RFRkNPTkZJRz0iYXJjaC9zaC9jb25maWdzL3NoeDNfZGVmY29uZmlnIgorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfQlVHPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKK0NPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CisjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CisjIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRSBpcyBub3Qgc2V0CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19MT0NLX0tFUk5FTD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCisjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0CisjIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CitDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzPXkKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CitDT05GSUdfQVVESVQ9eQorIyBDT05GSUdfQVVESVRTWVNDQUxMIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKK0NPTkZJR19HUk9VUF9TQ0hFRD15CitDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15CisjIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfVVNFUl9TQ0hFRD15CisjIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19VSUQxNj15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX0tBTExTWU1TPXkKK0NPTkZJR19LQUxMU1lNU19BTEw9eQorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfQUlPPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CitDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAorQ09ORklHX01PRFZFUlNJT05TPXkKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfQkxPQ0s9eQorIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorIyBDT05GSUdfSU9TQ0hFRF9BUyBpcyBub3Qgc2V0CisjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19JT1NDSEVEX0NGUT15CisjIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCisjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKKworIworIyBTeXN0ZW0gdHlwZQorIworQ09ORklHX0NQVV9TSDM9eQorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NjE5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzIwMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzI2MyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9NWEcgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDcgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA4IGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDk9eQorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcwOTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUwUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTFSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0hYMyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDczNDMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzM2NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDVfMTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINV8xMDMgaXMgbm90IHNldAorCisjCisjIE1lbW9yeSBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKK0NPTkZJR19RVUlDS0xJU1Q9eQorQ09ORklHX01NVT15CitDT05GSUdfUEFHRV9PRkZTRVQ9MHg4MDAwMDAwMAorQ09ORklHX01FTU9SWV9TVEFSVD0weDBDMDAwMDAwCitDT05GSUdfTUVNT1JZX1NJWkU9MHgwNDAwMDAwMAorQ09ORklHXzI5QklUPXkKK0NPTkZJR19WU1lTQ0FMTD15CitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9TUEFSU0VNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MQorQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKK0NPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX1BBR0VfU0laRV80S0I9eQorIyBDT05GSUdfUEFHRV9TSVpFXzhLQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1NJWkVfMTZLQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CitDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKK0NPTkZJR19TUEFSU0VNRU1fU1RBVElDPXkKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTAKK0NPTkZJR19OUl9RVUlDSz0yCitDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKKworIworIyBDYWNoZSBjb25maWd1cmF0aW9uCisjCisjIENPTkZJR19TSF9ESVJFQ1RfTUFQUEVEIGlzIG5vdCBzZXQKK0NPTkZJR19DQUNIRV9XUklURUJBQ0s9eQorIyBDT05GSUdfQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBQ0hFX09GRiBpcyBub3Qgc2V0CisKKyMKKyMgUHJvY2Vzc29yIGZlYXR1cmVzCisjCitDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfQ1BVX0JJR19FTkRJQU4gaXMgbm90IHNldAorQ09ORklHX1NIX0ZQVV9FTVU9eQorQ09ORklHX1NIX0FEQz15CitDT05GSUdfQ1BVX0hBU19JTlRFVlQ9eQorQ09ORklHX0NQVV9IQVNfSVBSX0lSUT15CitDT05GSUdfQ1BVX0hBU19TUl9SQj15CisKKyMKKyMgQm9hcmQgc3VwcG9ydAorIworIyBDT05GSUdfU0hfU09MVVRJT05fRU5HSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX0hQNlhYIGlzIG5vdCBzZXQKK0NPTkZJR19TSF9QT0xBUklTPXkKKworIworIyBUaW1lciBhbmQgY2xvY2sgY29uZmlndXJhdGlvbgorIworQ09ORklHX1NIX1RNVT15CitDT05GSUdfU0hfVElNRVJfSVJRPTE2CitDT05GSUdfU0hfUENMS19GUkVRPTMzMDAwMDAwCitDT05GSUdfVElDS19PTkVTSE9UPXkKK0NPTkZJR19OT19IWj15CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKKworIworIyBDUFUgRnJlcXVlbmN5IHNjYWxpbmcKKyMKKyMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKKworIworIyBETUEgc3VwcG9ydAorIworQ09ORklHX1NIX0RNQV9BUEk9eQorQ09ORklHX1NIX0RNQT15CitDT05GSUdfTlJfT05DSElQX0RNQV9DSEFOTkVMUz00CisjIENPTkZJR19OUl9ETUFfQ0hBTk5FTFNfQk9PTCBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcGFuaW9uIENoaXBzCisjCisKKyMKKyMgQWRkaXRpb25hbCBTdXBlckggRGV2aWNlIERyaXZlcnMKKyMKK0NPTkZJR19IRUFSVEJFQVQ9eQorIyBDT05GSUdfUFVTSF9TV0lUQ0ggaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBmZWF0dXJlcworIworQ09ORklHX0haXzEwMD15CisjIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAorQ09ORklHX0haPTEwMAorQ09ORklHX1NDSEVEX0hSVElDSz15CisjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9OT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKK0NPTkZJR19QUkVFTVBUPXkKK0NPTkZJR19HVVNBPXkKKyMgQ09ORklHX0dVU0FfUkIgaXMgbm90IHNldAorCisjCisjIEJvb3Qgb3B0aW9ucworIworQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAorQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAorQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTQzEsMTE1MjAwIHJvb3Q9L2Rldi9tdGRibG9jazIgcm9vdGZzdHlwZT1qZmZzMiBtZW09NjNNIG10ZHBhcnRzPXBoeXNtYXAtZmxhc2guMDoweDAwMTAwMDAwKGJvb3Rsb2FkZXIpcm8sMHgwMDUwMDAwMChLZXJuZWwpcm8sMHgwMEEwMDAwMChGaWxlc3lzdGVtKSIKKworIworIyBCdXMgb3B0aW9ucworIworIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMgKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CitDT05GSUdfUEFDS0VUPXkKK0NPTkZJR19QQUNLRVRfTU1BUD15CitDT05GSUdfVU5JWD15CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKK0NPTkZJR19JUF9NVUxUSUNBU1Q9eQorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CisjIENPTkZJR19JUF9QTlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19EQ0IgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorQ09ORklHX0ZXX0xPQURFUj15CisjIENPTkZJR19GSVJNV0FSRV9JTl9LRVJORUwgaXMgbm90IHNldAorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKKyMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTEtERVZTPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKK0NPTkZJR19NVERfQ0ZJPXkKKyMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfR0VOX1BST0JFPXkKK0NPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TPXkKK0NPTkZJR19NVERfQ0ZJX05PU1dBUD15CisjIENPTkZJR19NVERfQ0ZJX0JFX0JZVEVfU1dBUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0xFX0JZVEVfU1dBUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0dFT01FVFJZIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PVFAgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQorIyBDT05GSUdfTVREX0NGSV9BTURTVEQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX1VUSUw9eQorIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKKyMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEhZU01BUD15CitDT05GSUdfTVREX1BIWVNNQVBfQ09NUEFUPXkKK0NPTkZJR19NVERfUEhZU01BUF9TVEFSVD0weDAwMDAwMDAwCitDT05GSUdfTVREX1BIWVNNQVBfTEVOPTB4MDEwMDAwMDAKK0NPTkZJR19NVERfUEhZU01BUF9CQU5LV0lEVEg9MgorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIworIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycworIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9RSU5GT19QUk9CRSBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCisjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRUVQUk9NIHN1cHBvcnQKKyMKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKK0NPTkZJR19QSFlMSUI9eQorCisjCisjIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAorQ09ORklHX1NNU0NfUEhZPXkKKyMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BVElPTkFMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19TVEUxMFhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTSV9FVDEwMTFDX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST15CisjIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKK0NPTkZJR19TTVNDOTExWD15CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTgorIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIworIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCisjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORz15CitDT05GSUdfREVWS01FTT15CitDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEPXkKKyMgQ09ORklHX05fSERMQyBpcyBub3Qgc2V0CisjIENPTkZJR19SSVNDT004IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQRUNJQUxJWCBpcyBub3Qgc2V0CisjIENPTkZJR19SSU8gaXMgbm90IHNldAorIyBDT05GSUdfU1RBTERSViBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMX1NIX1NDST15CitDT05GSUdfU0VSSUFMX1NIX1NDSV9OUl9VQVJUUz0zCitDT05GSUdfU0VSSUFMX1NIX1NDSV9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CitDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkMgaXMgbm90IHNldAorIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkcml2ZXJzCisjCisjIENPTkZJR19EQUIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorQ09ORklHX1JUQ19IQ1RPU1lTPXkKK0NPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCisjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAorCisjCisjIFJUQyBpbnRlcmZhY2VzCisjCitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorQ09ORklHX1JUQ19JTlRGX1BST0M9eQorQ09ORklHX1JUQ19JTlRGX0RFVj15CisjIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKKworIworIyBTUEkgUlRDIGRyaXZlcnMKKyMKKworIworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKKworIworIyBvbi1DUFUgUlRDIGRyaXZlcnMKKyMKK0NPTkZJR19SVENfRFJWX1NIPXkKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworIyBDT05GSUdfRVhUMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOT1RJRlkgaXMgbm90IHNldAorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19LQ09SRT15CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJGUyBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQorIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfRlM9eQorQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKKyMgQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfWkxJQj15CisjIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1JUSU1FPXkKKyMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKKyMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CisjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorQ09ORklHX0RFQlVHX1NISVJRPXkKK0NPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CisjIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAorIyBDT05GSUdfU0NIRURfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1BSRUVNUFQ9eQorQ09ORklHX0RFQlVHX1JUX01VVEVYRVM9eQorQ09ORklHX0RFQlVHX1BJX0xJU1Q9eQorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19TUElOTE9DSz15CitDT05GSUdfREVCVUdfTVVURVhFUz15CitDT05GSUdfREVCVUdfTE9DS19BTExPQz15CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19MT0NLREVQPXkKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLREVQIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUD15CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorQ09ORklHX1NUQUNLVFJBQ0U9eQorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CitDT05GSUdfREVCVUdfSU5GTz15CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1NHPXkKKyMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CitDT05GSUdfRlJBTUVfUE9JTlRFUj15CisjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKK0NPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKKworIworIyBUcmFjZXJzCisjCisjIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CisjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAorQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRT15CitDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFX1BPUlQ9MHgwMDAwMDAwMAorQ09ORklHX0VBUkxZX1BSSU5USz15CisjIENPTkZJR19ERUJVR19CT09UTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAorIyBDT05GSUdfNEtTVEFDS1MgaXMgbm90IHNldAorIyBDT05GSUdfSVJRU1RBQ0tTIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1QX0NPREU9eQorIyBDT05GSUdfU0hfTk9fQlNTX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfTU9SRV9DT01QSUxFX09QVElPTlMgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQorIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfQVVESVRfR0VORVJJQz15CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9eQorQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3NoNzc4NWxjcl8zMmJpdF9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2g3Nzg1bGNyXzMyYml0X2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGUxZGVlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9jb25maWdzL3NoNzc4NWxjcl8zMmJpdF9kZWZjb25maWcKQEAgLTAsMCArMSwxNTUzIEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjktcmM0CisjIEZyaSBGZWIgMjAgMTg6MjU6MjkgMjAwOQorIworQ09ORklHX1NVUEVSSD15CitDT05GSUdfU1VQRVJIMzI9eQorQ09ORklHX0FSQ0hfREVGQ09ORklHPSJhcmNoL3NoL2NvbmZpZ3Mvc2h4M19kZWZjb25maWciCitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19CVUc9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQorQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKKyMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKKyMgQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfU1VQUE9SVFNfTlVNQT15CitDT05GSUdfU1lTX1NVUFBPUlRTX1BDST15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQorQ09ORklHX0lPX1RSQVBQRUQ9eQorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19MT0NLX0tFUk5FTD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKKyMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CitDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19JS0NPTkZJRz15CitDT05GSUdfSUtDT05GSUdfUFJPQz15CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorQ09ORklHX0dST1VQX1NDSEVEPXkKK0NPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKKyMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0VSX1NDSEVEPXkKKyMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19VSUQxNj15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0NPTVBBVF9CUks9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0FOT05fSU5PREVTPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19BSU89eQorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19QQ0lfUVVJUktTPXkKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1NMVUIgaXMgbm90IHNldAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CitDT05GSUdfUFJPRklMSU5HPXkKKyMgQ09ORklHX09QUk9GSUxFIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CitDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19CTE9DSz15CisjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0NGUT15CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CisKKyMKKyMgU3lzdGVtIHR5cGUKKyMKK0NPTkZJR19DUFVfU0g0PXkKK0NPTkZJR19DUFVfU0g0QT15CitDT05GSUdfQ1BVX1NIWDI9eQorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NjE5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzIwMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzI2MyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9NWEcgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDcgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MTAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzA5MSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTBSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MVIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODU9eQorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0hYMyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDczNDMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzM2NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDVfMTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINV8xMDMgaXMgbm90IHNldAorCisjCisjIE1lbW9yeSBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKK0NPTkZJR19RVUlDS0xJU1Q9eQorQ09ORklHX01NVT15CitDT05GSUdfUEFHRV9PRkZTRVQ9MHg4MDAwMDAwMAorQ09ORklHX01FTU9SWV9TVEFSVD0weDQwMDAwMDAwCitDT05GSUdfTUVNT1JZX1NJWkU9MHgyMDAwMDAwMAorIyBDT05GSUdfMjlCSVQgaXMgbm90IHNldAorQ09ORklHXzMyQklUPXkKK0NPTkZJR19QTUJfRU5BQkxFPXkKKyMgQ09ORklHX1BNQiBpcyBub3Qgc2V0CitDT05GSUdfUE1CX0ZJWEVEPXkKKyMgQ09ORklHX1gyVExCIGlzIG5vdCBzZXQKK0NPTkZJR19WU1lTQ0FMTD15CisjIENPTkZJR19OVU1BIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1NQQVJTRU1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQ9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0yCitDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQorQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX1BBR0VfU0laRV80S0I9eQorIyBDT05GSUdfUEFHRV9TSVpFXzhLQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1NJWkVfMTZLQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CitDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKKyMgQ09ORklHX0ZMQVRNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX1NQQVJTRU1FTV9NQU5VQUw9eQorQ09ORklHX1NQQVJTRU1FTT15CitDT05GSUdfSEFWRV9NRU1PUllfUFJFU0VOVD15CitDT05GSUdfU1BBUlNFTUVNX1NUQVRJQz15CisjIENPTkZJR19NRU1PUllfSE9UUExVRyBpcyBub3Qgc2V0CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CitDT05GSUdfTUlHUkFUSU9OPXkKKyMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTAKK0NPTkZJR19OUl9RVUlDSz0yCitDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKKworIworIyBDYWNoZSBjb25maWd1cmF0aW9uCisjCisjIENPTkZJR19TSF9ESVJFQ1RfTUFQUEVEIGlzIG5vdCBzZXQKK0NPTkZJR19DQUNIRV9XUklURUJBQ0s9eQorIyBDT05GSUdfQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBQ0hFX09GRiBpcyBub3Qgc2V0CisKKyMKKyMgUHJvY2Vzc29yIGZlYXR1cmVzCisjCitDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfQ1BVX0JJR19FTkRJQU4gaXMgbm90IHNldAorQ09ORklHX1NIX0ZQVT15CitDT05GSUdfU0hfU1RPUkVfUVVFVUVTPXkKK0NPTkZJR19DUFVfSEFTX0lOVEVWVD15CitDT05GSUdfQ1BVX0hBU19TUl9SQj15CitDT05GSUdfQ1BVX0hBU19QVEVBPXkKK0NPTkZJR19DUFVfSEFTX0ZQVT15CisKKyMKKyMgQm9hcmQgc3VwcG9ydAorIworIyBDT05GSUdfU0hfSElHSExBTkRFUiBpcyBub3Qgc2V0CitDT05GSUdfU0hfU0g3Nzg1TENSPXkKKworIworIyBUaW1lciBhbmQgY2xvY2sgY29uZmlndXJhdGlvbgorIworQ09ORklHX1NIX1RNVT15CitDT05GSUdfU0hfVElNRVJfSVJRPTI4CitDT05GSUdfU0hfUENMS19GUkVRPTUwMDAwMDAwCitDT05GSUdfVElDS19PTkVTSE9UPXkKKyMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorCisjCisjIENQVSBGcmVxdWVuY3kgc2NhbGluZworIworIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAorCisjCisjIERNQSBzdXBwb3J0CisjCisjIENPTkZJR19TSF9ETUEgaXMgbm90IHNldAorCisjCisjIENvbXBhbmlvbiBDaGlwcworIworCisjCisjIEFkZGl0aW9uYWwgU3VwZXJIIERldmljZSBEcml2ZXJzCisjCitDT05GSUdfSEVBUlRCRUFUPXkKKyMgQ09ORklHX1BVU0hfU1dJVENIIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgZmVhdHVyZXMKKyMKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMjUwPXkKKyMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0yNTAKK0NPTkZJR19TQ0hFRF9IUlRJQ0s9eQorQ09ORklHX0tFWEVDPXkKKyMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorIyBDT05GSUdfU0VDQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX05PTkUgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorQ09ORklHX1BSRUVNUFQ9eQorQ09ORklHX0dVU0E9eQorCisjCisjIEJvb3Qgb3B0aW9ucworIworQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAorQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAorIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKKworIworIyBCdXMgb3B0aW9ucworIworQ09ORklHX1BDST15CitDT05GSUdfU0hfUENJRE1BX05PTkNPSEVSRU5UPXkKK0NPTkZJR19QQ0lfQVVUTz15CitDT05GSUdfUENJX0FVVE9fVVBEQVRFX1JFU09VUkNFUz15CisjIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CitDT05GSUdfUENJX0xFR0FDWT15CisjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKKworIworIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMgKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CitDT05GSUdfUEFDS0VUPXkKKyMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKK0NPTkZJR19YRlJNPXkKKyMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CitDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSPXkKK0NPTkZJR19BU0tfSVBfRklCX0hBU0g9eQorIyBDT05GSUdfSVBfRklCX1RSSUUgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKKyMgQ09ORklHX0lQX01VTFRJUExFX1RBQkxFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEggaXMgbm90IHNldAorIyBDT05GSUdfSVBfUk9VVEVfVkVSQk9TRSBpcyBub3Qgc2V0CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CisjIENPTkZJR19JUF9QTlBfQk9PVFAgaXMgbm90IHNldAorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CisjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1M9eQorIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTX0VYVD15CitDT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTPXkKKyMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKKyMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NPTkNBVD15CitDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTEtERVZTPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKK0NPTkZJR19NVERfQ0ZJPXkKKyMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfR0VOX1BST0JFPXkKKyMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JMT15CitDT05GSUdfTVREX0NGSV9JMj15CisjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JTlRFTEVYVCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9BTURTVEQ9eQorIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX1VUSUw9eQorIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKKyMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEhZU01BUD15CisjIENPTkZJR19NVERfUEhZU01BUF9DT01QQVQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUUlORk9fUFJPQkUgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAorIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0k9eQorQ09ORklHX1NDU0lfRE1BPXkKKyMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9QUk9DX0ZTPXkKKworIworIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQorIworQ09ORklHX0JMS19ERVZfU0Q9eQorIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKKworIworIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKKyMKKyMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KKworIworIyBTQ1NJIFRyYW5zcG9ydHMKKyMKKyMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MT1dMRVZFTCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKK0NPTkZJR19BVEE9eQorIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19TQVRBX1BNUD15CisjIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1NGRj15CisjIENPTkZJR19TQVRBX1NWVyBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX01WIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfTlYgaXMgbm90IHNldAorIyBDT05GSUdfUERDX0FETUEgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9RU1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1BST01JU0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9TWDQgaXMgbm90IHNldAorQ09ORklHX1NBVEFfU0lMPXkKKyMgQ09ORklHX1NBVEFfU0lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfVUxJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfVklURVNTRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX0lOSUMxNjJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ1M1NTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ1M1NTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ1lQUkVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0VGQVIgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX0dFTkVSSUMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9IUFQzNjYgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9IUFQzN1ggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9IUFQzWDJOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUM1gzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSVQ4MjFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSVQ4MjEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSk1JQ1JPTiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1RSSUZMRVggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9NQVJWRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTVBJSVggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9PTERQSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTkVUQ0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05JTkpBMzIgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9OUzg3NDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTlM4NzQxNSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX09QVEkgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1BEQzIwMjdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0lMNjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfV0lOQk9ORCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0NIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CisKKyMKKyMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAorIworCisjCisjIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZworIworIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAorIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAorIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9FVEhFUk5FVCBpcyBub3Qgc2V0CitDT05GSUdfTUlJPXkKK0NPTkZJR19ORVRERVZfMTAwMD15CisjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAorIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAorIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lHQiBpcyBub3Qgc2V0CisjIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAorIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKK0NPTkZJR19SODE2OT15CisjIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0CisjIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CisjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAorIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CisjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDEgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldAorIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19UUiBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOCisjCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCisjCisKKyMKKyMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKKyMKKyMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0CisjIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRkMgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CitDT05GSUdfSU5QVVRfRkZfTUVNTEVTUz1tCisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorIyBDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVggaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKK0NPTkZJR19JTlBVVF9LRVlCT0FSRD15CisjIENPTkZJR19LRVlCT0FSRF9BVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NIX0tFWVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CitDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HPXkKK0NPTkZJR19ERVZLTUVNPXkKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisjIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCisjIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9TSF9TQ0k9eQorQ09ORklHX1NFUklBTF9TSF9TQ0lfTlJfVUFSVFM9NgorQ09ORklHX1NFUklBTF9TSF9TQ0lfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CitDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorQ09ORklHX0hXX1JBTkRPTT15CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorQ09ORklHX0RFVlBPUlQ9eQorQ09ORklHX0kyQz15CitDT05GSUdfSTJDX0JPQVJESU5GTz15CisjIENPTkZJR19JMkNfQ0hBUkRFViBpcyBub3Qgc2V0CitDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKK0NPTkZJR19JMkNfQUxHT1BDQT15CisKKyMKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CisjCisKKyMKKyMgUEMgU01CdXMgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0lTQ0ggaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAorCisjCisjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQorIworIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0hfTU9CSUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorCisjCisjIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIGFkYXB0ZXIgSTJDL0REQyBjaGFubmVsIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKKworIworIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKKyMKK0NPTkZJR19JMkNfUENBX1BMQVRGT1JNPXkKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAorIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorQ09ORklHX01GRF9TTTUwMT15CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworCisjCisjIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0CisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZHJpdmVycworIworIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19EUk0gaXMgbm90IHNldAorIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAorQ09ORklHX0ZCPXkKKyMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JPT1RfVkVTQV9TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQorQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CitDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CisjIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9TWVNfRklMTFJFQ1Q9bQorQ09ORklHX0ZCX1NZU19DT1BZQVJFQT1tCitDT05GSUdfRkJfU1lTX0lNQUdFQkxJVD1tCisjIENPTkZJR19GQl9GT1JFSUdOX0VORElBTiBpcyBub3Qgc2V0CitDT05GSUdfRkJfU1lTX0ZPUFM9bQorQ09ORklHX0ZCX0RFRkVSUkVEX0lPPXkKKyMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAorCisjCisjIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCisjCisjIENPTkZJR19GQl9DSVJSVVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUE0yIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0NZQkVSMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9BU0lMSUFOVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9JTVNUVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9OVklESUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUklWQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQVRST1ggaXMgbm90IHNldAorIyBDT05GSUdfRkJfUkFERU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0FUWTEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9BVFkgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUzMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU0FWQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NJUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WSUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTkVPTUFHSUMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfS1lSTyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl8zREZYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZPT0RPTzEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVlQ4NjIzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1RSSURFTlQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1BNMyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9DQVJNSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9TSF9NT0JJTEVfTENEQz1tCitDT05GSUdfRkJfU001MDE9eQorIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUI4NjJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCitDT05GSUdfRFVNTVlfQ09OU09MRT15CitDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX0RFVEVDVF9QUklNQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfRk9OVFMgaXMgbm90IHNldAorQ09ORklHX0ZPTlRfOHg4PXkKK0NPTkZJR19GT05UXzh4MTY9eQorQ09ORklHX0xPR089eQorIyBDT05GSUdfTE9HT19MSU5VWF9NT05PIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR09fTElOVVhfVkdBMTYgaXMgbm90IHNldAorQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyND15CisjIENPTkZJR19MT0dPX1NVUEVSSF9NT05PIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR09fU1VQRVJIX1ZHQTE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR09fU1VQRVJIX0NMVVQyMjQgaXMgbm90IHNldAorIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorQ09ORklHX0hJRF9TVVBQT1JUPXkKK0NPTkZJR19ISUQ9eQorIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIElucHV0IERldmljZXMKKyMKK0NPTkZJR19VU0JfSElEPXkKKyMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hJRERFViBpcyBub3Qgc2V0CisKKyMKKyMgU3BlY2lhbCBISUQgZHJpdmVycworIworQ09ORklHX0hJRF9DT01QQVQ9eQorQ09ORklHX0hJRF9BNFRFQ0g9eQorQ09ORklHX0hJRF9BUFBMRT15CitDT05GSUdfSElEX0JFTEtJTj15CitDT05GSUdfSElEX0NIRVJSWT15CitDT05GSUdfSElEX0NISUNPTlk9eQorQ09ORklHX0hJRF9DWVBSRVNTPXkKK0NPTkZJR19ISURfRVpLRVk9eQorQ09ORklHX0hJRF9HWVJBVElPTj15CitDT05GSUdfSElEX0xPR0lURUNIPXkKKyMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR0lSVU1CTEVQQUQyX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfTUlDUk9TT0ZUPXkKK0NPTkZJR19ISURfTU9OVEVSRVk9eQorIyBDT05GSUdfSElEX05UUklHIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfUEFOVEhFUkxPUkQ9eQorIyBDT05GSUdfUEFOVEhFUkxPUkRfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9QRVRBTFlOWD15CitDT05GSUdfSElEX1NBTVNVTkc9eQorQ09ORklHX0hJRF9TT05ZPXkKK0NPTkZJR19ISURfU1VOUExVUz15CisjIENPTkZJR19HUkVFTkFTSUFfRkYgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RPUFNFRUQgaXMgbm90IHNldAorQ09ORklHX1RIUlVTVE1BU1RFUl9GRj1tCitDT05GSUdfWkVST1BMVVNfRkY9bQorQ09ORklHX1VTQl9TVVBQT1JUPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQorQ09ORklHX1VTQj15CisjIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCisjCitDT05GSUdfVVNCX0RFVklDRUZTPXkKK0NPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKKyMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX01PTj15CisjIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKKworIworIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfRUhDSV9IQ0Q9bQorIyBDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9IQ0Q9bQorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15CisjIENPTkZJR19VU0JfVUhDSV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1I4QTY2NTk3X0hDRD15CisjIENPTkZJR19VU0JfV0hDSV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAorCisjCisjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycworIworIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkgYWxzbyBiZSBuZWVkZWQ7CisjCisKKyMKKyMgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyMKK0NPTkZJR19VU0JfU1RPUkFHRT15CisjIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW1hZ2luZyBkZXZpY2VzCisjCisjIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHBvcnQgZHJpdmVycworIworIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycworIworIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NJU1VTQlZHQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorQ09ORklHX1VTQl9URVNUPW0KKyMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQorIworIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorCisjCisjIEkyQyBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfRFJWX1JTNUMzNzI9eQorIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAorCisjCisjIFNQSSBSVEMgZHJpdmVycworIworCisjCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAorCisjCisjIG9uLUNQVSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9TSCBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlM9eQorQ09ORklHX0VYVDNfRlNfWEFUVFI9eQorIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KQkQ9eQorQ09ORklHX0ZTX01CQ0FDSEU9eQorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GU19QT1NJWF9BQ0w9eQorQ09ORklHX0ZJTEVfTE9DS0lORz15CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworQ09ORklHX0ZBVF9GUz15CitDT05GSUdfTVNET1NfRlM9eQorQ09ORklHX1ZGQVRfRlM9eQorQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNworQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgorQ09ORklHX05URlNfRlM9eQorIyBDT05GSUdfTlRGU19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTlRGU19SVz15CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19LQ09SRT15CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJGUyBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQorIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlOSVhfRlM9eQorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CitDT05GSUdfTkZTX1Y0PXkKK0NPTkZJR19ST09UX05GUz15CitDT05GSUdfTkZTRD15CitDT05GSUdfTkZTRF9WMz15CisjIENPTkZJR19ORlNEX1YzX0FDTCBpcyBub3Qgc2V0CitDT05GSUdfTkZTRF9WND15CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19FWFBPUlRGUz15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKK0NPTkZJR19TVU5SUENfR1NTPXkKKyMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0CitDT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKKyMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfQ09ERVBBR0VfOTMyPXkKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0lTTzg4NTlfMT15CisjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0CisjIENPTkZJR19ETE0gaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CisjIENPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKK0NPTkZJR19TQ0hFRF9ERUJVRz15CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfUFJFRU1QVD15CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRlJBTUVfUE9JTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKK0NPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKKworIworIyBUcmFjZXJzCisjCisjIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CisjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAorIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JPT1RNRU0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR180S1NUQUNLUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTVEFDS1MgaXMgbm90IHNldAorIyBDT05GSUdfRFVNUF9DT0RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX05PX0JTU19JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PUkVfQ09NUElMRV9PUFRJT05TIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUTz15CisKKyMKKyMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCisjCisjIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQorQ09ORklHX0NSWVBUT19BRUFEMj15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9eQorQ09ORklHX0NSWVBUT19IQVNIPXkKK0NPTkZJR19DUllQVE9fSEFTSDI9eQorQ09ORklHX0NSWVBUT19STkcyPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUj15CitDT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKKyMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKKworIworIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKKyMKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorCisjCisjIEJsb2NrIG1vZGVzCisjCitDT05GSUdfQ1JZUFRPX0NCQz15CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorCisjCisjIEhhc2ggbW9kZXMKKyMKK0NPTkZJR19DUllQVE9fSE1BQz15CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisKKyMKKyMgRGlnZXN0CisjCisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19NRDU9eQorIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKworIworIyBDaXBoZXJzCisjCisjIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fREVTPXkKKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKKworIworIyBDb21wcmVzc2lvbgorIworIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CisKKyMKKyMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCisjCisjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fSFcgaXMgbm90IHNldAorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQorIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvdXJxdWVsbF9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvdXJxdWVsbF9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU3MjZjNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvY29uZmlncy91cnF1ZWxsX2RlZmNvbmZpZwpAQCAtMCwwICsxLDEzMzIgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOS1yYzQKKyMgVGh1IE1hciAgNSAxNzoyODoxMyAyMDA5CisjCitDT05GSUdfU1VQRVJIPXkKK0NPTkZJR19TVVBFUkgzMj15CitDT05GSUdfQVJDSF9ERUZDT05GSUc9ImFyY2gvc2gvY29uZmlncy9zaHgzX2RlZmNvbmZpZyIKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CitDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0dFTkVSSUNfR1BJTz15CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKKyMgQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfU1VQUE9SVFNfTlVNQT15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19MT0NLX0tFUk5FTD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKKyMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CitDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19JS0NPTkZJRz15CitDT05GSUdfSUtDT05GSUdfUFJPQz15CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorQ09ORklHX0dST1VQX1NDSEVEPXkKK0NPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKKyMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0VSX1NDSEVEPXkKKyMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19VSUQxNj15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQ09NUEFUX0JSSz15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX0FJTz15CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9GSUxJTkc9eQorIyBDT05GSUdfT1BST0ZJTEUgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorQ09ORklHX0JBU0VfU01BTEw9MAorQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0JMT0NLPXkKKyMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CisjIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCisjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKKworIworIyBTeXN0ZW0gdHlwZQorIworQ09ORklHX0NQVV9TSDQ9eQorQ09ORklHX0NQVV9TSDRBPXkKK0NPTkZJR19DUFVfU0hYMz15CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc2MTkgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzIwMyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX01YRyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDggaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcxMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUwUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUxUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1IGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODY9eQorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0hYMyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDczNDMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzM2NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDVfMTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINV8xMDMgaXMgbm90IHNldAorCisjCisjIE1lbW9yeSBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKK0NPTkZJR19RVUlDS0xJU1Q9eQorQ09ORklHX01NVT15CitDT05GSUdfUEFHRV9PRkZTRVQ9MHg4MDAwMDAwMAorQ09ORklHX01FTU9SWV9TVEFSVD0weDA4MDAwMDAwCitDT05GSUdfTUVNT1JZX1NJWkU9MHgwODAwMDAwMAorQ09ORklHXzI5QklUPXkKKyMgQ09ORklHX1gyVExCIGlzIG5vdCBzZXQKK0NPTkZJR19WU1lTQ0FMTD15CisjIENPTkZJR19OVU1BIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1NQQVJTRU1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQ9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0xCitDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQorQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX1BBR0VfU0laRV80S0I9eQorIyBDT05GSUdfUEFHRV9TSVpFXzhLQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1NJWkVfMTZLQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CitDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKKyMgQ09ORklHX0ZMQVRNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX1NQQVJTRU1FTV9NQU5VQUw9eQorQ09ORklHX1NQQVJTRU1FTT15CitDT05GSUdfSEFWRV9NRU1PUllfUFJFU0VOVD15CitDT05GSUdfU1BBUlNFTUVNX1NUQVRJQz15CisjIENPTkZJR19NRU1PUllfSE9UUExVRyBpcyBub3Qgc2V0CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CitDT05GSUdfTUlHUkFUSU9OPXkKKyMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTAKK0NPTkZJR19OUl9RVUlDSz0yCitDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKKworIworIyBDYWNoZSBjb25maWd1cmF0aW9uCisjCisjIENPTkZJR19TSF9ESVJFQ1RfTUFQUEVEIGlzIG5vdCBzZXQKK0NPTkZJR19DQUNIRV9XUklURUJBQ0s9eQorIyBDT05GSUdfQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBQ0hFX09GRiBpcyBub3Qgc2V0CisKKyMKKyMgUHJvY2Vzc29yIGZlYXR1cmVzCisjCitDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfQ1BVX0JJR19FTkRJQU4gaXMgbm90IHNldAorQ09ORklHX1NIX0ZQVT15CitDT05GSUdfU0hfU1RPUkVfUVVFVUVTPXkKK0NPTkZJR19DUFVfSEFTX0lOVEVWVD15CitDT05GSUdfQ1BVX0hBU19TUl9SQj15CitDT05GSUdfQ1BVX0hBU19GUFU9eQorCisjCisjIEJvYXJkIHN1cHBvcnQKKyMKK0NPTkZJR19TSF9VUlFVRUxMPXkKKworIworIyBUaW1lciBhbmQgY2xvY2sgY29uZmlndXJhdGlvbgorIworQ09ORklHX1NIX1RNVT15CitDT05GSUdfU0hfVElNRVJfSVJRPTE2CitDT05GSUdfU0hfUENMS19GUkVRPTMzMzMzMzMzCitDT05GSUdfVElDS19PTkVTSE9UPXkKKyMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorCisjCisjIENQVSBGcmVxdWVuY3kgc2NhbGluZworIworIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAorCisjCisjIERNQSBzdXBwb3J0CisjCisjIENPTkZJR19TSF9ETUEgaXMgbm90IHNldAorCisjCisjIENvbXBhbmlvbiBDaGlwcworIworCisjCisjIEFkZGl0aW9uYWwgU3VwZXJIIERldmljZSBEcml2ZXJzCisjCitDT05GSUdfSEVBUlRCRUFUPXkKKyMgQ09ORklHX1BVU0hfU1dJVENIIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgZmVhdHVyZXMKKyMKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMjUwPXkKKyMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0yNTAKK0NPTkZJR19TQ0hFRF9IUlRJQ0s9eQorQ09ORklHX0tFWEVDPXkKKyMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorIyBDT05GSUdfU0VDQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX05PTkUgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorQ09ORklHX1BSRUVNUFQ9eQorQ09ORklHX0dVU0E9eQorCisjCisjIEJvb3Qgb3B0aW9ucworIworQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAorQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAorQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTQzEsIDM4NDAwIGVhcmx5cHJpbnRrPXNlcmlhbCBpcD1vbiBpZ25vcmVfbG9nbGV2ZWwgcm9vdD0vZGV2L25mcyBpcD1kaGNwIG1lbWNodW5rLnZwdT00bSIKKworIworIyBCdXMgb3B0aW9ucworIworIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMgKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CitDT05GSUdfUEFDS0VUPXkKKyMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKK0NPTkZJR19YRlJNPXkKKyMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CitDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSPXkKK0NPTkZJR19BU0tfSVBfRklCX0hBU0g9eQorIyBDT05GSUdfSVBfRklCX1RSSUUgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKKyMgQ09ORklHX0lQX01VTFRJUExFX1RBQkxFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEggaXMgbm90IHNldAorIyBDT05GSUdfSVBfUk9VVEVfVkVSQk9TRSBpcyBub3Qgc2V0CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CisjIENPTkZJR19JUF9QTlBfQk9PVFAgaXMgbm90IHNldAorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CisjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1M9eQorIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTX0VYVD15CitDT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTPXkKKyMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKKyMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorQ09ORklHX01URF9DT05DQVQ9eQorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxLREVWUz15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CisjIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0dFTl9QUk9CRT15CisjIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSU5URUxFWFQgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfQU1EU1REPXkKKyMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9VVElMPXkKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BIWVNNQVA9eQorIyBDT05GSUdfTVREX1BIWVNNQVBfQ09NUEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUUlORk9fUFJPQkUgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2CisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX0RNQT15CisjIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorQ09ORklHX1NDU0lfUFJPQ19GUz15CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPXkKKyMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CisKKyMKKyMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCisjCisjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCisKKyMKKyMgU0NTSSBUcmFuc3BvcnRzCisjCisjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9XTEVWRUwgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CitDT05GSUdfQVRBPXkKKyMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfU0FUQV9QTVA9eQorQ09ORklHX0FUQV9TRkY9eQorIyBDT05GSUdfU0FUQV9NViBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAorQ09ORklHX1BIWUxJQj15CisKKyMKKyMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQVRJT05BTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU1RFMTBYUCBpcyBub3Qgc2V0CisjIENPTkZJR19MU0lfRVQxMDExQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CisjIENPTkZJR19TVE5JQyBpcyBub3Qgc2V0CitDT05GSUdfU01DOTFYPXkKKyMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyBMQU4KKyMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKKworIworIyBVU0IgTmV0d29yayBBZGFwdGVycworIworIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKK0NPTkZJR19JTlBVVF9GRl9NRU1MRVNTPW0KKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKK0NPTkZJR19JTlBVVF9NT1VTRURFVj15CisjIENPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWCBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKKyMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TSF9LRVlTQyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORz15CitDT05GSUdfREVWS01FTT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCisjIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9TSF9TQ0k9eQorQ09ORklHX1NFUklBTF9TSF9TQ0lfTlJfVUFSVFM9NgorQ09ORklHX1NFUklBTF9TSF9TQ0lfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKKyMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAorQ09ORklHX0xFR0FDWV9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgorIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKK0NPTkZJR19IV19SQU5ET009eQorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19CT0FSRElORk89eQorIyBDT05GSUdfSTJDX0NIQVJERVYgaXMgbm90IHNldAorQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CitDT05GSUdfSTJDX0FMR09QQ0E9eQorCisjCisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAorIworCisjCisjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQorIworIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0hfTU9CSUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorCisjCisjIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAorCisjCisjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycworIworQ09ORklHX0kyQ19QQ0FfUExBVEZPUk09eQorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQorQ09ORklHX0dQSU9MSUI9eQorIyBDT05GSUdfR1BJT19TWVNGUyBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IG1hcHBlZCBHUElPIGV4cGFuZGVyczoKKyMKKworIworIyBJMkMgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19HUElPX01BWDczMlggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19QQ0E5NTNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fUENGODU3WCBpcyBub3Qgc2V0CisKKyMKKyMgUENJIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIFNQSSBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19NRkRfU001MDE9eQorIyBDT05GSUdfTUZEX1NNNTAxX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0CisjIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAorIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRyaXZlcnMKKyMKKyMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAorQ09ORklHX0ZCPXkKKyMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JPT1RfVkVTQV9TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQorQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CitDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CisjIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9TWVNfRklMTFJFQ1Q9bQorQ09ORklHX0ZCX1NZU19DT1BZQVJFQT1tCitDT05GSUdfRkJfU1lTX0lNQUdFQkxJVD1tCisjIENPTkZJR19GQl9GT1JFSUdOX0VORElBTiBpcyBub3Qgc2V0CitDT05GSUdfRkJfU1lTX0ZPUFM9bQorQ09ORklHX0ZCX0RFRkVSUkVEX0lPPXkKKyMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAorCisjCisjIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCisjCisjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CitDT05GSUdfRkJfU0hfTU9CSUxFX0xDREM9bQorQ09ORklHX0ZCX1NNNTAxPXkKKyMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ERVRFQ1RfUFJJTUFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRTIGlzIG5vdCBzZXQKK0NPTkZJR19GT05UXzh4OD15CitDT05GSUdfRk9OVF84eDE2PXkKK0NPTkZJR19MT0dPPXkKKyMgQ09ORklHX0xPR09fTElOVVhfTU9OTyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dPX0xJTlVYX1ZHQTE2IGlzIG5vdCBzZXQKK0NPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQ9eQorIyBDT05GSUdfTE9HT19TVVBFUkhfTU9OTyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dPX1NVUEVSSF9WR0ExNiBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dPX1NVUEVSSF9DTFVUMjI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfU1VQUE9SVD15CitDT05GSUdfSElEPXkKKyMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAorCisjCisjIFVTQiBJbnB1dCBEZXZpY2VzCisjCitDT05GSUdfVVNCX0hJRD15CisjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ISURERVYgaXMgbm90IHNldAorCisjCisjIFNwZWNpYWwgSElEIGRyaXZlcnMKKyMKK0NPTkZJR19ISURfQ09NUEFUPXkKK0NPTkZJR19ISURfQTRURUNIPXkKK0NPTkZJR19ISURfQVBQTEU9eQorQ09ORklHX0hJRF9CRUxLSU49eQorQ09ORklHX0hJRF9DSEVSUlk9eQorQ09ORklHX0hJRF9DSElDT05ZPXkKK0NPTkZJR19ISURfQ1lQUkVTUz15CitDT05GSUdfSElEX0VaS0VZPXkKK0NPTkZJR19ISURfR1lSQVRJT049eQorQ09ORklHX0hJRF9MT0dJVEVDSD15CisjIENPTkZJR19MT0dJVEVDSF9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dJUlVNQkxFUEFEMl9GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX01JQ1JPU09GVD15CitDT05GSUdfSElEX01PTlRFUkVZPXkKKyMgQ09ORklHX0hJRF9OVFJJRyBpcyBub3Qgc2V0CitDT05GSUdfSElEX1BBTlRIRVJMT1JEPXkKKyMgQ09ORklHX1BBTlRIRVJMT1JEX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfUEVUQUxZTlg9eQorQ09ORklHX0hJRF9TQU1TVU5HPXkKK0NPTkZJR19ISURfU09OWT15CitDT05GSUdfSElEX1NVTlBMVVM9eQorIyBDT05GSUdfR1JFRU5BU0lBX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9UT1BTRUVEIGlzIG5vdCBzZXQKK0NPTkZJR19USFJVU1RNQVNURVJfRkY9bQorQ09ORklHX1pFUk9QTFVTX0ZGPW0KK0NPTkZJR19VU0JfU1VQUE9SVD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CisjIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0CitDT05GSUdfVVNCPXkKKyMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTPXkKKworIworIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCisjCitDT05GSUdfVVNCX0RFVklDRUZTPXkKK0NPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKKyMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX01PTj15CisjIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKKworIworIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heSBhbHNvIGJlIG5lZWRlZDsKKyMKKworIworIyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIworQ09ORklHX1VTQl9TVE9SQUdFPXkKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKKworIworIyBVU0IgcG9ydCBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCisjCisjIENPTkZJR19VU0JfR1BJT19WQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlM9eQorQ09ORklHX0VYVDNfRlNfWEFUVFI9eQorIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KQkQ9eQorQ09ORklHX0ZTX01CQ0FDSEU9eQorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GU19QT1NJWF9BQ0w9eQorQ09ORklHX0ZJTEVfTE9DS0lORz15CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworQ09ORklHX0ZBVF9GUz15CitDT05GSUdfTVNET1NfRlM9eQorQ09ORklHX1ZGQVRfRlM9eQorQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNworQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgorQ09ORklHX05URlNfRlM9eQorIyBDT05GSUdfTlRGU19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTlRGU19SVz15CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19LQ09SRT15CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJGUyBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQorIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlOSVhfRlM9eQorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CitDT05GSUdfTkZTX1Y0PXkKK0NPTkZJR19ST09UX05GUz15CitDT05GSUdfTkZTRD15CitDT05GSUdfTkZTRF9WMz15CisjIENPTkZJR19ORlNEX1YzX0FDTCBpcyBub3Qgc2V0CitDT05GSUdfTkZTRF9WND15CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19FWFBPUlRGUz15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKK0NPTkZJR19TVU5SUENfR1NTPXkKKyMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0CitDT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKKyMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfQ09ERVBBR0VfOTMyPXkKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0lTTzg4NTlfMT15CisjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0CisjIENPTkZJR19ETE0gaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CisjIENPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQorQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorCisjCisjIFRyYWNlcnMKKyMKKyMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKKyMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAorIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PUkVfQ09NUElMRV9PUFRJT05TIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUTz15CisKKyMKKyMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCisjCisjIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQorQ09ORklHX0NSWVBUT19BRUFEMj15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9eQorQ09ORklHX0NSWVBUT19IQVNIPXkKK0NPTkZJR19DUllQVE9fSEFTSDI9eQorQ09ORklHX0NSWVBUT19STkcyPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUj15CitDT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKKyMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKKworIworIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKKyMKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorCisjCisjIEJsb2NrIG1vZGVzCisjCitDT05GSUdfQ1JZUFRPX0NCQz15CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorCisjCisjIEhhc2ggbW9kZXMKKyMKK0NPTkZJR19DUllQVE9fSE1BQz15CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisKKyMKKyMgRGlnZXN0CisjCisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19NRDU9eQorIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKworIworIyBDaXBoZXJzCisjCisjIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fREVTPXkKKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKKworIworIyBDb21wcmVzc2lvbgorIworIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CisKKyMKKyMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCisjCisjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fSFcgaXMgbm90IHNldAorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQorIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvZG1hL0tjb25maWcgYi9hcmNoL3NoL2RyaXZlcnMvZG1hL0tjb25maWcKaW5kZXggMDE5MzYzNi4uZjEzYTA1MiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL2RtYS9LY29uZmlnCisrKyBiL2FyY2gvc2gvZHJpdmVycy9kbWEvS2NvbmZpZwpAQCAtOSwxMyArOSwyMSBAQAogCXNlbGVjdCBTSF9ETUFfQVBJCiAJZGVmYXVsdCBuCiAKK2NvbmZpZyBTSF9ETUFfSVJRX01VTFRJCisJYm9vbAorCWRlcGVuZHMgb24gU0hfRE1BCisJZGVmYXVsdCB5IGlmIENQVV9TVUJUWVBFX1NINzc1MCB8fCBDUFVfU1VCVFlQRV9TSDc3NTEgfHwgXAorCQlDUFVfU1VCVFlQRV9TSDc3NTBTIHx8IENQVV9TVUJUWVBFX1NINzc1MFIgfHwgQ1BVX1NVQlRZUEVfU0g3NzUxUiB8fCBcCisJCUNQVV9TVUJUWVBFX1NINzA5MSB8fCBDUFVfU1VCVFlQRV9TSDc3NjMgfHwgQ1BVX1NVQlRZUEVfU0g3NzY0IHx8IFwKKwkJQ1BVX1NVQlRZUEVfU0g3NzgwIHx8IENQVV9TVUJUWVBFX1NINzc4NQorCiBjb25maWcgTlJfT05DSElQX0RNQV9DSEFOTkVMUwogCWludAogCWRlcGVuZHMgb24gU0hfRE1BCi0JZGVmYXVsdCAiNiIgaWYgQ1BVX1NVQlRZUEVfU0g3NzIwIHx8IENQVV9TVUJUWVBFX1NINzcyMQotCWRlZmF1bHQgIjgiIGlmIENQVV9TVUJUWVBFX1NINzc1MFIgfHwgQ1BVX1NVQlRZUEVfU0g3NzUxUgotCWRlZmF1bHQgIjEyIiBpZiBDUFVfU1VCVFlQRV9TSDc3ODAKLQlkZWZhdWx0ICI0IgorCWRlZmF1bHQgIjQiIGlmIENQVV9TVUJUWVBFX1NINzc1MCB8fCBDUFVfU1VCVFlQRV9TSDc3NTEgfHwgQ1BVX1NVQlRZUEVfU0g3NzUwUworCWRlZmF1bHQgIjgiIGlmIENQVV9TVUJUWVBFX1NINzc1MFIgfHwgQ1BVX1NVQlRZUEVfU0g3NzUxUiB8fCBDUFVfU1VCVFlQRV9TSDc3NjAKKwlkZWZhdWx0ICIxMiIgaWYgQ1BVX1NVQlRZUEVfU0g3NzIzIHx8IENQVV9TVUJUWVBFX1NINzc4MCB8fCBDUFVfU1VCVFlQRV9TSDc3ODUKKwlkZWZhdWx0ICI2IgogCWhlbHAKIAkgIFRoaXMgYWxsb3dzIHlvdSB0byBzcGVjaWZ5IHRoZSBudW1iZXIgb2YgY2hhbm5lbHMgdGhhdCB0aGUgb24tY2hpcAogCSAgRE1BQyBzdXBwb3J0cy4gVGhpcyB3aWxsIGJlIDQgZm9yIFNINzc1MC9TSDc3NTEgYW5kIDggZm9yIHRoZQpAQCAtNDYsNCArNTQsMjggQEAKIAkgIG9mIHRoZSBTSDc3NjAuCiAJICBTYXkgWSBpZiB5b3Ugd2FudCB0byB1c2UgQXVkaW8vVVNCIERNQSBvbiB5b3VyIFNINzc2MCBib2FyZC4KIAorY29uZmlnIFBWUjJfRE1BCisJdHJpc3RhdGUgIlBvd2VyVlIgMiBETUFDIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBTSF9EUkVBTUNBU1QgJiYgU0hfRE1BCisJaGVscAorCSAgU2VsZWN0aW5nIHRoaXMgd2lsbCBlbmFibGUgc3VwcG9ydCBmb3IgdGhlIFBWUjIgRE1BIGNvbnRyb2xsZXIuCisJICBBcyB0aGlzIGNoYWlucyBvZmYgb2YgdGhlIG9uLWNoaXAgRE1BQywgdGhhdCBtdXN0IGFsc28gYmUKKwkgIGVuYWJsZWQgYnkgZGVmYXVsdC4KKworCSAgVGhpcyBpcyBwcmltYXJpbHkgdXNlZCBieSB0aGUgcHZyMmZiIGZyYW1lYnVmZmVyIGRyaXZlciBmb3IKKwkgIGNlcnRhaW4gb3B0aW1pemF0aW9ucywgYnV0IGlzIG5vdCBuZWNlc3NhcnkgZm9yIGZ1bmN0aW9uYWxpdHkuCisKKwkgIElmIGluIGRvdWJ0LCBzYXkgTi4KKworY29uZmlnIEcyX0RNQQorCXRyaXN0YXRlICJHMiBCdXMgRE1BIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBTSF9EUkVBTUNBU1QKKwlzZWxlY3QgU0hfRE1BX0FQSQorCWhlbHAKKwkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgRE1BIGNvbnRyb2xsZXIgZm9yIHRoZSBEcmVhbWNhc3QncworCSAgRzIgYnVzLiBEcml2ZXJzIHRoYXQgd2FudCB0aGlzIHdpbGwgZ2VuZXJhbGx5IGVuYWJsZSB0aGlzIG9uCisJICB0aGVpciBvd24uCisKKwkgIElmIGluIGRvdWJ0LCBzYXkgTi4KKwogZW5kbWVudQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL2RtYS9NYWtlZmlsZSBiL2FyY2gvc2gvZHJpdmVycy9kbWEvTWFrZWZpbGUKaW5kZXggYWI5NTZhZC4uYzYwNjgxMyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL2RtYS9NYWtlZmlsZQorKysgYi9hcmNoL3NoL2RyaXZlcnMvZG1hL01ha2VmaWxlCkBAIC00LDUgKzQsNiBAQAogCiBvYmotJChDT05GSUdfU0hfRE1BX0FQSSkJKz0gZG1hLWFwaS5vIGRtYS1zeXNmcy5vCiBvYmotJChDT05GSUdfU0hfRE1BKQkJKz0gZG1hLXNoLm8KLW9iai0kKENPTkZJR19TSF9EUkVBTUNBU1QpCSs9IGRtYS1wdnIyLm8gZG1hLWcyLm8KK29iai0kKENPTkZJR19QVlIyX0RNQSkJCSs9IGRtYS1wdnIyLm8KK29iai0kKENPTkZJR19HMl9ETUEpCQkrPSBkbWEtZzIubwogb2JqLSQoQ09ORklHX1NIX0RNQUJSRykJCSs9IGRtYWJyZy5vCmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvZG1hL2RtYS1zaC5jIGIvYXJjaC9zaC9kcml2ZXJzL2RtYS9kbWEtc2guYwppbmRleCA1MDg4N2E1Li4zN2ZiNWI4IDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvZG1hL2RtYS1zaC5jCisrKyBiL2FyY2gvc2gvZHJpdmVycy9kbWEvZG1hLXNoLmMKQEAgLTE3LDI4ICsxNywxNiBAQAogI2luY2x1ZGUgPG1hY2gtZHJlYW1jYXN0L21hY2gvZG1hLmg+CiAjaW5jbHVkZSA8YXNtL2RtYS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgImRtYS1zaC5oIgorI2luY2x1ZGUgPGFzbS9kbWEtc2guaD4KIAotc3RhdGljIGludCBkbXRlX2lycV9tYXBbXSA9IHsKLQlETVRFMF9JUlEsCi0JRE1URTFfSVJRLAotCURNVEUyX0lSUSwKLQlETVRFM19JUlEsCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIwKSAgfHwJXAotICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMSkgIHx8CVwKLSAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTFSKSB8fAlcCi0gICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYwKSAgfHwJXAotICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOSkgIHx8CVwKLSAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODApCi0JRE1URTRfSVJRLAotCURNVEU1X0lSUSwKKyNpZiBkZWZpbmVkKERNQUUxX0lSUSkKKyNkZWZpbmUgTlJfRE1BRQkJMgorI2Vsc2UKKyNkZWZpbmUgTlJfRE1BRQkJMQogI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUxUikgfHwJXAotICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MCkgIHx8CVwKLSAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODApCi0JRE1URTZfSVJRLAotCURNVEU3X0lSUSwKLSNlbmRpZgorCitzdGF0aWMgY29uc3QgY2hhciAqZG1hZV9uYW1lW10gPSB7CisJIkRNQUMgQWRkcmVzcyBFcnJvcjAiLCAiRE1BQyBBZGRyZXNzIEVycm9yMSIKIH07CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdldF9kbXRlX2lycSh1bnNpZ25lZCBpbnQgY2hhbikKQEAgLTQ2LDcgKzM0LDE0IEBACiAJdW5zaWduZWQgaW50IGlycSA9IDA7CiAJaWYgKGNoYW4gPCBBUlJBWV9TSVpFKGRtdGVfaXJxX21hcCkpCiAJCWlycSA9IGRtdGVfaXJxX21hcFtjaGFuXTsKKworI2lmIGRlZmluZWQoQ09ORklHX1NIX0RNQV9JUlFfTVVMVEkpCisJaWYgKGlycSA+IERNVEU2X0lSUSkKKwkJcmV0dXJuIERNVEU2X0lSUTsKKwlyZXR1cm4gRE1URTBfSVJROworI2Vsc2UKIAlyZXR1cm4gaXJxOworI2VuZGlmCiB9CiAKIC8qCkBAIC01OSw3ICs1NCw3IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNhbGNfeG1pdF9zaGlmdChzdHJ1Y3QgZG1hX2NoYW5uZWwgKmNoYW4pCiB7Ci0JdTMyIGNoY3IgPSBjdHJsX2lubChDSENSW2NoYW4tPmNoYW5dKTsKKwl1MzIgY2hjciA9IGN0cmxfaW5sKGRtYV9iYXNlX2FkZHJbY2hhbi0+Y2hhbl0gKyBDSENSKTsKIAogCXJldHVybiB0c19zaGlmdFsoY2hjciAmIENIQ1JfVFNfTUFTSyk+PkNIQ1JfVFNfU0hJRlRdOwogfQpAQCAtNzUsMTMgKzcwLDEzIEBACiAJc3RydWN0IGRtYV9jaGFubmVsICpjaGFuID0gZGV2X2lkOwogCXUzMiBjaGNyOwogCi0JY2hjciA9IGN0cmxfaW5sKENIQ1JbY2hhbi0+Y2hhbl0pOworCWNoY3IgPSBjdHJsX2lubChkbWFfYmFzZV9hZGRyW2NoYW4tPmNoYW5dICsgQ0hDUik7CiAKIAlpZiAoIShjaGNyICYgQ0hDUl9URSkpCiAJCXJldHVybiBJUlFfTk9ORTsKIAogCWNoY3IgJj0gfihDSENSX0lFIHwgQ0hDUl9ERSk7Ci0JY3RybF9vdXRsKGNoY3IsIENIQ1JbY2hhbi0+Y2hhbl0pOworCWN0cmxfb3V0bChjaGNyLCAoZG1hX2Jhc2VfYWRkcltjaGFuLT5jaGFuXSArIENIQ1IpKTsKIAogCXdha2VfdXAoJmNoYW4tPndhaXRfcXVldWUpOwogCkBAIC05NCw3ICs4OSwxMiBAQAogCQlyZXR1cm4gMDsKIAogCXJldHVybiByZXF1ZXN0X2lycShnZXRfZG10ZV9pcnEoY2hhbi0+Y2hhbiksIGRtYV90ZWksCi0JCQkgICBJUlFGX0RJU0FCTEVELCBjaGFuLT5kZXZfaWQsIGNoYW4pOworI2lmIGRlZmluZWQoQ09ORklHX1NIX0RNQV9JUlFfTVVMVEkpCisJCQkJSVJRRl9TSEFSRUQsCisjZWxzZQorCQkJCUlSUUZfRElTQUJMRUQsCisjZW5kaWYKKwkJCQljaGFuLT5kZXZfaWQsIGNoYW4pOwogfQogCiBzdGF0aWMgdm9pZCBzaF9kbWFjX2ZyZWVfZG1hKHN0cnVjdCBkbWFfY2hhbm5lbCAqY2hhbikKQEAgLTExNSw3ICsxMTUsNyBAQAogCQljaGFuLT5mbGFncyAmPSB+RE1BX1RFSV9DQVBBQkxFOwogCX0KIAotCWN0cmxfb3V0bChjaGNyLCBDSENSW2NoYW4tPmNoYW5dKTsKKwljdHJsX291dGwoY2hjciwgKGRtYV9iYXNlX2FkZHJbY2hhbi0+Y2hhbl0gKyBDSENSKSk7CiAKIAljaGFuLT5mbGFncyB8PSBETUFfQ09ORklHVVJFRDsKIAlyZXR1cm4gMDsKQEAgLTEyNiwxMyArMTI2LDEzIEBACiAJaW50IGlycTsKIAl1MzIgY2hjcjsKIAotCWNoY3IgPSBjdHJsX2lubChDSENSW2NoYW4tPmNoYW5dKTsKKwljaGNyID0gY3RybF9pbmwoZG1hX2Jhc2VfYWRkcltjaGFuLT5jaGFuXSArIENIQ1IpOwogCWNoY3IgfD0gQ0hDUl9ERTsKIAogCWlmIChjaGFuLT5mbGFncyAmIERNQV9URUlfQ0FQQUJMRSkKIAkJY2hjciB8PSBDSENSX0lFOwogCi0JY3RybF9vdXRsKGNoY3IsIENIQ1JbY2hhbi0+Y2hhbl0pOworCWN0cmxfb3V0bChjaGNyLCAoZG1hX2Jhc2VfYWRkcltjaGFuLT5jaGFuXSArIENIQ1IpKTsKIAogCWlmIChjaGFuLT5mbGFncyAmIERNQV9URUlfQ0FQQUJMRSkgewogCQlpcnEgPSBnZXRfZG10ZV9pcnEoY2hhbi0+Y2hhbik7CkBAIC0xNTAsOSArMTUwLDkgQEAKIAkJZGlzYWJsZV9pcnEoaXJxKTsKIAl9CiAKLQljaGNyID0gY3RybF9pbmwoQ0hDUltjaGFuLT5jaGFuXSk7CisJY2hjciA9IGN0cmxfaW5sKGRtYV9iYXNlX2FkZHJbY2hhbi0+Y2hhbl0gKyBDSENSKTsKIAljaGNyICY9IH4oQ0hDUl9ERSB8IENIQ1JfVEUgfCBDSENSX0lFKTsKLQljdHJsX291dGwoY2hjciwgQ0hDUltjaGFuLT5jaGFuXSk7CisJY3RybF9vdXRsKGNoY3IsIChkbWFfYmFzZV9hZGRyW2NoYW4tPmNoYW5dICsgQ0hDUikpOwogfQogCiBzdGF0aWMgaW50IHNoX2RtYWNfeGZlcl9kbWEoc3RydWN0IGRtYV9jaGFubmVsICpjaGFuKQpAQCAtMTgzLDEyICsxODMsMTMgQEAKIAkgKi8KIAlpZiAoY2hhbi0+c2FyIHx8IChtYWNoX2lzX2RyZWFtY2FzdCgpICYmCiAJCQkgIGNoYW4tPmNoYW4gPT0gUFZSMl9DQVNDQURFX0NIQU4pKQotCQljdHJsX291dGwoY2hhbi0+c2FyLCBTQVJbY2hhbi0+Y2hhbl0pOworCQljdHJsX291dGwoY2hhbi0+c2FyLCAoZG1hX2Jhc2VfYWRkcltjaGFuLT5jaGFuXStTQVIpKTsKIAlpZiAoY2hhbi0+ZGFyIHx8IChtYWNoX2lzX2RyZWFtY2FzdCgpICYmCiAJCQkgIGNoYW4tPmNoYW4gPT0gUFZSMl9DQVNDQURFX0NIQU4pKQotCQljdHJsX291dGwoY2hhbi0+ZGFyLCBEQVJbY2hhbi0+Y2hhbl0pOworCQljdHJsX291dGwoY2hhbi0+ZGFyLCAoZG1hX2Jhc2VfYWRkcltjaGFuLT5jaGFuXSArIERBUikpOwogCi0JY3RybF9vdXRsKGNoYW4tPmNvdW50ID4+IGNhbGNfeG1pdF9zaGlmdChjaGFuKSwgRE1BVENSW2NoYW4tPmNoYW5dKTsKKwljdHJsX291dGwoY2hhbi0+Y291bnQgPj4gY2FsY194bWl0X3NoaWZ0KGNoYW4pLAorCQkoZG1hX2Jhc2VfYWRkcltjaGFuLT5jaGFuXSArIFRDUikpOwogCiAJc2hfZG1hY19lbmFibGVfZG1hKGNoYW4pOwogCkBAIC0xOTcsMzYgKzE5OCwyNiBAQAogCiBzdGF0aWMgaW50IHNoX2RtYWNfZ2V0X2RtYV9yZXNpZHVlKHN0cnVjdCBkbWFfY2hhbm5lbCAqY2hhbikKIHsKLQlpZiAoIShjdHJsX2lubChDSENSW2NoYW4tPmNoYW5dKSAmIENIQ1JfREUpKQorCWlmICghKGN0cmxfaW5sKGRtYV9iYXNlX2FkZHJbY2hhbi0+Y2hhbl0gKyBDSENSKSAmIENIQ1JfREUpKQogCQlyZXR1cm4gMDsKIAotCXJldHVybiBjdHJsX2lubChETUFUQ1JbY2hhbi0+Y2hhbl0pIDw8IGNhbGNfeG1pdF9zaGlmdChjaGFuKTsKKwlyZXR1cm4gY3RybF9pbmwoZG1hX2Jhc2VfYWRkcltjaGFuLT5jaGFuXSArIFRDUikKKwkJIDw8IGNhbGNfeG1pdF9zaGlmdChjaGFuKTsKIH0KIAotI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMCkgfHwgXAotICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMSkgfHwgXAotICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCkgfHwgXAotICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOSkKLSNkZWZpbmUgZG1hb3JfcmVhZF9yZWcoKQljdHJsX2ludyhETUFPUikKLSNkZWZpbmUgZG1hb3Jfd3JpdGVfcmVnKGRhdGEpCWN0cmxfb3V0dyhkYXRhLCBETUFPUikKLSNlbHNlCi0jZGVmaW5lIGRtYW9yX3JlYWRfcmVnKCkJY3RybF9pbmwoRE1BT1IpCi0jZGVmaW5lIGRtYW9yX3dyaXRlX3JlZyhkYXRhKQljdHJsX291dGwoZGF0YSwgRE1BT1IpCi0jZW5kaWYKLQotc3RhdGljIGlubGluZSBpbnQgZG1hb3JfcmVzZXQodm9pZCkKK3N0YXRpYyBpbmxpbmUgaW50IGRtYW9yX3Jlc2V0KGludCBubykKIHsKLQl1bnNpZ25lZCBsb25nIGRtYW9yID0gZG1hb3JfcmVhZF9yZWcoKTsKKwl1bnNpZ25lZCBsb25nIGRtYW9yID0gZG1hb3JfcmVhZF9yZWcobm8pOwogCiAJLyogVHJ5IHRvIGNsZWFyIHRoZSBlcnJvciBmbGFncyBmaXJzdCwgaW5jYXNlIHRoZXkgYXJlIHNldCAqLwogCWRtYW9yICY9IH4oRE1BT1JfTk1JRiB8IERNQU9SX0FFKTsKLQlkbWFvcl93cml0ZV9yZWcoZG1hb3IpOworCWRtYW9yX3dyaXRlX3JlZyhubywgZG1hb3IpOwogCiAJZG1hb3IgfD0gRE1BT1JfSU5JVDsKLQlkbWFvcl93cml0ZV9yZWcoZG1hb3IpOworCWRtYW9yX3dyaXRlX3JlZyhubywgZG1hb3IpOwogCiAJLyogU2VlIGlmIHdlIGdvdCBhbiBlcnJvciBhZ2FpbiAqLwotCWlmICgoZG1hb3JfcmVhZF9yZWcoKSAmIChETUFPUl9BRSB8IERNQU9SX05NSUYpKSkgeworCWlmICgoZG1hb3JfcmVhZF9yZWcobm8pICYgKERNQU9SX0FFIHwgRE1BT1JfTk1JRikpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiZG1hLXNoOiBDYW4ndCBpbml0aWFsaXplIERNQU9SLlxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTIzNywxMCArMjI4LDMzIEBACiAjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NINCkKIHN0YXRpYyBpcnFyZXR1cm5fdCBkbWFfZXJyKGludCBpcnEsIHZvaWQgKmR1bW15KQogewotCWRtYW9yX3Jlc2V0KCk7CisjaWYgZGVmaW5lZChDT05GSUdfU0hfRE1BX0lSUV9NVUxUSSkKKwlpbnQgY250ID0gMDsKKwlzd2l0Y2ggKGlycSkgeworI2lmIGRlZmluZWQoRE1URTZfSVJRKSAmJiBkZWZpbmVkKERNQUUxX0lSUSkKKwljYXNlIERNVEU2X0lSUToKKwkJY250Kys7CisjZW5kaWYKKwljYXNlIERNVEUwX0lSUToKKwkJaWYgKGRtYW9yX3JlYWRfcmVnKGNudCkgJiAoRE1BT1JfTk1JRiB8IERNQU9SX0FFKSkgeworCQkJZGlzYWJsZV9pcnEoaXJxKTsKKwkJCS8qIERNQSBtdWx0aSBhbmQgZXJyb3IgSVJRICovCisJCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJCX0KKwlkZWZhdWx0OgorCQlyZXR1cm4gSVJRX05PTkU7CisJfQorI2Vsc2UKKwlkbWFvcl9yZXNldCgwKTsKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMpCXx8IFwKKwkJZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwKQl8fCBcCisJCWRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSkKKwlkbWFvcl9yZXNldCgxKTsKKyNlbmRpZgogCWRpc2FibGVfaXJxKGlycSk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CisjZW5kaWYKIH0KICNlbmRpZgogCkBAIC0yNTksMjQgKzI3Myw1OSBAQAogCS5mbGFncwkJPSBETUFDX0NIQU5ORUxTX1RFSV9DQVBBQkxFLAogfTsKIAorI2lmZGVmIENPTkZJR19DUFVfU0g0CitzdGF0aWMgdW5zaWduZWQgaW50IGdldF9kbWFfZXJyb3JfaXJxKGludCBuKQoreworI2lmIGRlZmluZWQoQ09ORklHX1NIX0RNQV9JUlFfTVVMVEkpCisJcmV0dXJuIChuID09IDApID8gZ2V0X2RtdGVfaXJxKDApIDogZ2V0X2RtdGVfaXJxKDYpOworI2Vsc2UKKwlyZXR1cm4gKG4gPT0gMCkgPyBETUFFMF9JUlEgOgorI2lmIGRlZmluZWQoRE1BRTFfSVJRKQorCQkJCURNQUUxX0lSUTsKKyNlbHNlCisJCQkJLTE7CisjZW5kaWYKKyNlbmRpZgorfQorI2VuZGlmCisKIHN0YXRpYyBpbnQgX19pbml0IHNoX2RtYWNfaW5pdCh2b2lkKQogewogCXN0cnVjdCBkbWFfaW5mbyAqaW5mbyA9ICZzaF9kbWFjX2luZm87CiAJaW50IGk7CiAKICNpZmRlZiBDT05GSUdfQ1BVX1NINAotCWkgPSByZXF1ZXN0X2lycShETUFFX0lSUSwgZG1hX2VyciwgSVJRRl9ESVNBQkxFRCwgIkRNQUMgQWRkcmVzcyBFcnJvciIsIDApOwotCWlmICh1bmxpa2VseShpIDwgMCkpCi0JCXJldHVybiBpOworCWludCBuOworCisJZm9yIChuID0gMDsgbiA8IE5SX0RNQUU7IG4rKykgeworCQlpID0gcmVxdWVzdF9pcnEoZ2V0X2RtYV9lcnJvcl9pcnEobiksIGRtYV9lcnIsCisjaWYgZGVmaW5lZChDT05GSUdfU0hfRE1BX0lSUV9NVUxUSSkKKwkJCQlJUlFGX1NIQVJFRCwKKyNlbHNlCisJCQkJSVJRRl9ESVNBQkxFRCwKICNlbmRpZgorCQkJCWRtYWVfbmFtZVtuXSwgKHZvaWQgKilkbWFlX25hbWVbbl0pOworCQlpZiAodW5saWtlbHkoaSA8IDApKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzIHJlcXVlc3RfaXJxIGZhaWxcbiIsIGRtYWVfbmFtZVtuXSk7CisJCQlyZXR1cm4gaTsKKwkJfQorCX0KKyNlbmRpZiAvKiBDT05GSUdfQ1BVX1NINCAqLwogCiAJLyoKIAkgKiBJbml0aWFsaXplIERNQU9SLCBhbmQgY2xlYW4gdXAgYW55IGVycm9yIGZsYWdzIHRoYXQgbWF5IGhhdmUKIAkgKiBiZWVuIHNldC4KIAkgKi8KLQlpID0gZG1hb3JfcmVzZXQoKTsKKwlpID0gZG1hb3JfcmVzZXQoMCk7CiAJaWYgKHVubGlrZWx5KGkgIT0gMCkpCiAJCXJldHVybiBpOworI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMykJfHwgXAorCQlkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODApCXx8IFwKKwkJZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1KQorCWkgPSBkbWFvcl9yZXNldCgxKTsKKwlpZiAodW5saWtlbHkoaSAhPSAwKSkKKwkJcmV0dXJuIGk7CisjZW5kaWYKIAogCXJldHVybiByZWdpc3Rlcl9kbWFjKGluZm8pOwogfQpAQCAtMjg0LDggKzMzMywxMiBAQAogc3RhdGljIHZvaWQgX19leGl0IHNoX2RtYWNfZXhpdCh2b2lkKQogewogI2lmZGVmIENPTkZJR19DUFVfU0g0Ci0JZnJlZV9pcnEoRE1BRV9JUlEsIDApOwotI2VuZGlmCisJaW50IG47CisKKwlmb3IgKG4gPSAwOyBuIDwgTlJfRE1BRTsgbisrKSB7CisJCWZyZWVfaXJxKGdldF9kbWFfZXJyb3JfaXJxKG4pLCAodm9pZCAqKWRtYWVfbmFtZVtuXSk7CisJfQorI2VuZGlmIC8qIENPTkZJR19DUFVfU0g0ICovCiAJdW5yZWdpc3Rlcl9kbWFjKCZzaF9kbWFjX2luZm8pOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvZG1hL2RtYS1zaC5oIGIvYXJjaC9zaC9kcml2ZXJzL2RtYS9kbWEtc2guaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDVmZWNkNS4uMDAwMDAwMAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvZG1hL2RtYS1zaC5oCisrKyAvZGV2L251bGwKQEAgLTEsNzUgKzAsMCBAQAotLyoKLSAqIGFyY2gvc2gvZHJpdmVycy9kbWEvZG1hLXNoLmgKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgIFRha2FzaGkgWU9TSElJCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgIFBhdWwgTXVuZHQKLSAqCi0gKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQotICogZm9yIG1vcmUgZGV0YWlscy4KLSAqLwotI2lmbmRlZiBfX0RNQV9TSF9ICi0jZGVmaW5lIF9fRE1BX1NIX0gKLQotI2luY2x1ZGUgPGNwdS9kbWEuaD4KLQotLyogRGVmaW5pdGlvbnMgZm9yIHRoZSBTdXBlckggRE1BQyAqLwotI2RlZmluZSBSRVFfTAkweDAwMDAwMDAwCi0jZGVmaW5lIFJFUV9FCTB4MDAwODAwMDAKLSNkZWZpbmUgUkFDS19ICTB4MDAwMDAwMDAKLSNkZWZpbmUgUkFDS19MCTB4MDAwNDAwMDAKLSNkZWZpbmUgQUNLX1IJMHgwMDAwMDAwMAotI2RlZmluZSBBQ0tfVwkweDAwMDIwMDAwCi0jZGVmaW5lIEFDS19ICTB4MDAwMDAwMDAKLSNkZWZpbmUgQUNLX0wJMHgwMDAxMDAwMAotI2RlZmluZSBETV9JTkMJMHgwMDAwNDAwMAotI2RlZmluZSBETV9ERUMJMHgwMDAwODAwMAotI2RlZmluZSBTTV9JTkMJMHgwMDAwMTAwMAotI2RlZmluZSBTTV9ERUMJMHgwMDAwMjAwMAotI2RlZmluZSBSU19JTgkweDAwMDAwMjAwCi0jZGVmaW5lIFJTX09VVAkweDAwMDAwMzAwCi0jZGVmaW5lIFRTX0JMSwkweDAwMDAwMDQwCi0jZGVmaW5lIFRNX0JVUgkweDAwMDAwMDIwCi0jZGVmaW5lIENIQ1JfREUgMHgwMDAwMDAwMQotI2RlZmluZSBDSENSX1RFIDB4MDAwMDAwMDIKLSNkZWZpbmUgQ0hDUl9JRSAweDAwMDAwMDA0Ci0KLS8qIERNQU9SIGRlZmluaXRpb25zICovCi0jZGVmaW5lIERNQU9SX0FFCTB4MDAwMDAwMDQKLSNkZWZpbmUgRE1BT1JfTk1JRgkweDAwMDAwMDAyCi0jZGVmaW5lIERNQU9SX0RNRQkweDAwMDAwMDAxCi0KLS8qCi0gKiBEZWZpbmUgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmb3IgZHVhbCBhZGRyZXNzIG1lbW9yeS1tZW1vcnkgdHJhbnNmZXIuCi0gKiBUaGUgMHg0MDAgdmFsdWUgcmVwcmVzZW50cyBhdXRvLXJlcXVlc3QsIGV4dGVybmFsLT5leHRlcm5hbC4KLSAqLwotI2RlZmluZSBSU19EVUFMCShETV9JTkMgfCBTTV9JTkMgfCAweDQwMCB8IFRTXzMyKQotCi0jZGVmaW5lIE1BWF9ETUFDX0NIQU5ORUxTCShDT05GSUdfTlJfT05DSElQX0RNQV9DSEFOTkVMUykKLQotLyoKLSAqIFN1YnR5cGVzIHRoYXQgaGF2ZSBmZXdlciBjaGFubmVscyB0aGFuIHRoaXMgc2ltcGx5IG5lZWQgdG8gY2hhbmdlCi0gKiBDT05GSUdfTlJfT05DSElQX0RNQV9DSEFOTkVMUy4gTGlrZXdpc2UsIHN1YnR5cGVzIHdpdGggYSBsYXJnZXIgbnVtYmVyCi0gKiBvZiBjaGFubmVscyBzaG91bGQgZXhwYW5kIG9uIHRoaXMuCi0gKgotICogRm9yIG1vc3Qgc3VidHlwZXMgd2UgY2FuIGVhc2lseSBmaWd1cmUgdGhlc2UgdmFsdWVzIG91dCB3aXRoIHNvbWUKLSAqIGJhc2ljIGNhbGN1bGF0aW9uLCB1bmZvcnR1bmF0ZWx5IG9uIG90aGVyIHN1YnR5cGVzIHRoZXNlIGFyZSBtb3JlCi0gKiBzY2F0dGVyZWQsIHNvIHdlIGp1c3QgbGVhdmUgaXQgdW5yb2xsZWQgZm9yIHNpbXBsaWNpdHkuCi0gKi8KLSNkZWZpbmUgU0FSCSgodW5zaWduZWQgbG9uZ1tdKXtTSF9ETUFDX0JBU0UgKyAweDAwLCBTSF9ETUFDX0JBU0UgKyAweDEwLCBcCi0JCQkJICAgU0hfRE1BQ19CQVNFICsgMHgyMCwgU0hfRE1BQ19CQVNFICsgMHgzMCwgXAotCQkJCSAgIFNIX0RNQUNfQkFTRSArIDB4NTAsIFNIX0RNQUNfQkFTRSArIDB4NjB9KQotI2RlZmluZSBEQVIJKCh1bnNpZ25lZCBsb25nW10pe1NIX0RNQUNfQkFTRSArIDB4MDQsIFNIX0RNQUNfQkFTRSArIDB4MTQsIFwKLQkJCQkgICBTSF9ETUFDX0JBU0UgKyAweDI0LCBTSF9ETUFDX0JBU0UgKyAweDM0LCBcCi0JCQkJICAgU0hfRE1BQ19CQVNFICsgMHg1NCwgU0hfRE1BQ19CQVNFICsgMHg2NH0pCi0jZGVmaW5lIERNQVRDUgkoKHVuc2lnbmVkIGxvbmdbXSl7U0hfRE1BQ19CQVNFICsgMHgwOCwgU0hfRE1BQ19CQVNFICsgMHgxOCwgXAotCQkJCSAgIFNIX0RNQUNfQkFTRSArIDB4MjgsIFNIX0RNQUNfQkFTRSArIDB4MzgsIFwKLQkJCQkgICBTSF9ETUFDX0JBU0UgKyAweDU4LCBTSF9ETUFDX0JBU0UgKyAweDY4fSkKLSNkZWZpbmUgQ0hDUgkoKHVuc2lnbmVkIGxvbmdbXSl7U0hfRE1BQ19CQVNFICsgMHgwYywgU0hfRE1BQ19CQVNFICsgMHgxYywgXAotCQkJCSAgIFNIX0RNQUNfQkFTRSArIDB4MmMsIFNIX0RNQUNfQkFTRSArIDB4M2MsIFwKLQkJCQkgICBTSF9ETUFDX0JBU0UgKyAweDVjLCBTSF9ETUFDX0JBU0UgKyAweDZjfSkKLQotI2RlZmluZSBETUFPUgkoU0hfRE1BQ19CQVNFICsgMHg0MCkKLQotI2VuZGlmIC8qIF9fRE1BX1NIX0ggKi8KLQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2ktc2g3NzgwLmMgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS1zaDc3ODAuYwppbmRleCAwNzhkYzQ0Li43NzNkNTc1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS1zaDc3ODAuYworKysgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS1zaDc3ODAuYwpAQCAtMTI3LDggKzEyNyw4IEBACiAJcGNpX3dyaXRlX3JlZyh3b3JkLCBTSDRfUENJTFNSMCk7CiAJcGNpX3dyaXRlX3JlZygweDAwMDAwMDAxLCBTSDRfUENJTFNSMSk7CiAJLyogU2V0IHRoZSB2YWx1ZXMgb24gd2luZG93IDAgUENJIGNvbmZpZyByZWdpc3RlcnMgKi8KLQl3b3JkID0gKENPTkZJR19NRU1PUllfU0laRSA+IDB4MDgwMDAwMDApID8gMHgxMDAwMDAwMCA6IDB4MDgwMDAwMDA7Ci0JcGNpX3dyaXRlX3JlZyh3b3JkIHwgMHhhMDAwMDAwMCwgU0g0X1BDSUxBUjApOworCXdvcmQgPSBDT05GSUdfTUVNT1JZX1NUQVJUIHwgKENPTkZJR19NRU1PUllfU0laRSAtIDB4MDEwMDAwMDApOworCXBjaV93cml0ZV9yZWcod29yZCwgU0g0X1BDSUxBUjApOwogCXBjaV93cml0ZV9yZWcod29yZCwgU0g3NzgwX1BDSU1CQVIwKTsKIAkvKiBTZXQgdGhlIHZhbHVlcyBvbiB3aW5kb3cgMSBQQ0kgY29uZmlnIHJlZ2lzdGVycyAqLwogCXBjaV93cml0ZV9yZWcoMHgwMDAwMDAwMCwgU0g0X1BDSUxBUjEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9hZGRyc3BhY2UuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vYWRkcnNwYWNlLmgKaW5kZXggMzY3MzZjNy4uODBkNDA4MSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9hZGRyc3BhY2UuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2FkZHJzcGFjZS5oCkBAIC0zMSw3ICszMSw3IEBACiAvKiBSZXR1cm5zIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIGEgUG5TRUcgKG49MSwyKSBhZGRyZXNzICAgKi8KICNkZWZpbmUgUEhZU0FERFIoYSkJKCgodW5zaWduZWQgbG9uZykoYSkpICYgMHgxZmZmZmZmZikKIAotI2lmZGVmIENPTkZJR18yOUJJVAorI2lmIGRlZmluZWQoQ09ORklHXzI5QklUKSB8fCBkZWZpbmVkKENPTkZJR19QTUJfRklYRUQpCiAvKgogICogTWFwIGFuIGFkZHJlc3MgdG8gYSBjZXJ0YWluIHByaXZpbGVnZWQgc2VnbWVudAogICovCkBAIC00Myw3ICs0Myw3IEBACiAJKChfX3R5cGVvZl9fKGEpKSgoKHVuc2lnbmVkIGxvbmcpKGEpICYgMHgxZmZmZmZmZikgfCBQM1NFRykpCiAjZGVmaW5lIFA0U0VHQUREUihhKQlcCiAJKChfX3R5cGVvZl9fKGEpKSgoKHVuc2lnbmVkIGxvbmcpKGEpICYgMHgxZmZmZmZmZikgfCBQNFNFRykpCi0jZW5kaWYgLyogMjlCSVQgKi8KKyNlbmRpZiAvKiAyOUJJVCB8fCBQTUJfRklYRUQgKi8KICNlbmRpZiAvKiBQMVNFRyAqLwogCiAvKiBDaGVjayBpZiBhbiBhZGRyZXNzIGNhbiBiZSByZWFjaGVkIGluIDI5IGJpdHMgKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vYXRvbWljLWlycS5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9hdG9taWMtaXJxLmgKaW5kZXggNzRmNzk0My4uYTBiMzQ4MCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9hdG9taWMtaXJxLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9hdG9taWMtaXJxLmgKQEAgLTExLDcgKzExLDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCSoobG9uZyAqKXYgKz0gaTsKKwl2LT5jb3VudGVyICs9IGk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCkBAIC0yMCw3ICsyMCw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQkqKGxvbmcgKil2IC09IGk7CisJdi0+Y291bnRlciAtPSBpOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIApAQCAtMjksOSArMjksOSBAQAogCXVuc2lnbmVkIGxvbmcgdGVtcCwgZmxhZ3M7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JdGVtcCA9ICoobG9uZyAqKXY7CisJdGVtcCA9IHYtPmNvdW50ZXI7CiAJdGVtcCArPSBpOwotCSoobG9uZyAqKXYgPSB0ZW1wOworCXYtPmNvdW50ZXIgPSB0ZW1wOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAogCXJldHVybiB0ZW1wOwpAQCAtNDIsOSArNDIsOSBAQAogCXVuc2lnbmVkIGxvbmcgdGVtcCwgZmxhZ3M7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JdGVtcCA9ICoobG9uZyAqKXY7CisJdGVtcCA9IHYtPmNvdW50ZXI7CiAJdGVtcCAtPSBpOwotCSoobG9uZyAqKXYgPSB0ZW1wOworCXYtPmNvdW50ZXIgPSB0ZW1wOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAogCXJldHVybiB0ZW1wOwpAQCAtNTUsNyArNTUsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JKihsb25nICopdiAmPSB+bWFzazsKKwl2LT5jb3VudGVyICY9IH5tYXNrOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIApAQCAtNjQsNyArNjQsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JKihsb25nICopdiB8PSBtYXNrOworCXYtPmNvdW50ZXIgfD0gbWFzazsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vYml0b3BzLWxsc2MuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vYml0b3BzLWxsc2MuaAppbmRleCAxZDJmYzBiLi5kODMyOGJlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2JpdG9wcy1sbHNjLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9iaXRvcHMtbGxzYy5oCkBAIC0xLDcgKzEsNyBAQAogI2lmbmRlZiBfX0FTTV9TSF9CSVRPUFNfTExTQ19ICiAjZGVmaW5lIF9fQVNNX1NIX0JJVE9QU19MTFNDX0gKIAotc3RhdGljIGlubGluZSB2b2lkIHNldF9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcikKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqYWRkcikKIHsKIAlpbnQJbWFzazsKIAl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKmEgPSBhZGRyOwpAQCAtMTMsMTYgKzEzLDE2IEBACiAJX19hc21fXyBfX3ZvbGF0aWxlX18gKAogCQkiMToJCQkJCQlcblx0IgogCQkibW92bGkubAlAJTEsICUwCSEgc2V0X2JpdAkJXG5cdCIKLQkJIm9yCQklMywgJTAJCQkJXG5cdCIKKwkJIm9yCQklMiwgJTAJCQkJXG5cdCIKIAkJIm1vdmNvLmwJJTAsIEAlMQkJCQlcblx0IgogCQkiYmYJCTFiCQkJCVxuXHQiCi0JCTogIj0meiIgKHRtcCksICI9ciIgKGEpCi0JCTogIjEiIChhKSwgInIiIChtYXNrKQorCQk6ICI9JnoiICh0bXApCisJCTogInIiIChhKSwgInIiIChtYXNrKQogCQk6ICJ0IiwgIm1lbW9yeSIKIAkpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCitzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqYWRkcikKIHsKIAlpbnQJbWFzazsKIAl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKmEgPSBhZGRyOwpAQCAtMzQsMTYgKzM0LDE2IEBACiAJX19hc21fXyBfX3ZvbGF0aWxlX18gKAogCQkiMToJCQkJCQlcblx0IgogCQkibW92bGkubAlAJTEsICUwCSEgY2xlYXJfYml0CQlcblx0IgotCQkiYW5kCQklMywgJTAJCQkJXG5cdCIKKwkJImFuZAkJJTIsICUwCQkJCVxuXHQiCiAJCSJtb3Zjby5sCSUwLCBAJTEJCQkJXG5cdCIKIAkJImJmCQkxYgkJCQlcblx0IgotCQk6ICI9JnoiICh0bXApLCAiPXIiIChhKQotCQk6ICIxIiAoYSksICJyIiAofm1hc2spCisJCTogIj0meiIgKHRtcCkKKwkJOiAiciIgKGEpLCAiciIgKH5tYXNrKQogCQk6ICJ0IiwgIm1lbW9yeSIKIAkpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgY2hhbmdlX2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQorc3RhdGljIGlubGluZSB2b2lkIGNoYW5nZV9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICphZGRyKQogewogCWludAltYXNrOwogCXZvbGF0aWxlIHVuc2lnbmVkIGludCAqYSA9IGFkZHI7CkBAIC01NSw4NiArNTUsODYgQEAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCiAJCSIxOgkJCQkJCVxuXHQiCiAJCSJtb3ZsaS5sCUAlMSwgJTAJISBjaGFuZ2VfYml0CQlcblx0IgorCQkieG9yCQklMiwgJTAJCQkJXG5cdCIKKwkJIm1vdmNvLmwJJTAsIEAlMQkJCQlcblx0IgorCQkiYmYJCTFiCQkJCVxuXHQiCisJCTogIj0meiIgKHRtcCkKKwkJOiAiciIgKGEpLCAiciIgKG1hc2spCisJCTogInQiLCAibWVtb3J5IgorCSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHRlc3RfYW5kX3NldF9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICphZGRyKQoreworCWludAltYXNrLCByZXR2YWw7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50ICphID0gYWRkcjsKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCWEgKz0gbnIgPj4gNTsKKwltYXNrID0gMSA8PCAobnIgJiAweDFmKTsKKworCV9fYXNtX18gX192b2xhdGlsZV9fICgKKwkJIjE6CQkJCQkJXG5cdCIKKwkJIm1vdmxpLmwJQCUyLCAlMAkhIHRlc3RfYW5kX3NldF9iaXQJXG5cdCIKKwkJIm1vdgkJJTAsICUxCQkJCVxuXHQiCisJCSJvcgkJJTMsICUwCQkJCVxuXHQiCisJCSJtb3Zjby5sCSUwLCBAJTIJCQkJXG5cdCIKKwkJImJmCQkxYgkJCQlcblx0IgorCQkiYW5kCQklMywgJTEJCQkJXG5cdCIKKwkJOiAiPSZ6IiAodG1wKSwgIj0mciIgKHJldHZhbCkKKwkJOiAiciIgKGEpLCAiciIgKG1hc2spCisJCTogInQiLCAibWVtb3J5IgorCSk7CisKKwlyZXR1cm4gcmV0dmFsICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHRlc3RfYW5kX2NsZWFyX2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKmFkZHIpCit7CisJaW50CW1hc2ssIHJldHZhbDsKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKmEgPSBhZGRyOworCXVuc2lnbmVkIGxvbmcgdG1wOworCisJYSArPSBuciA+PiA1OworCW1hc2sgPSAxIDw8IChuciAmIDB4MWYpOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAorCQkiMToJCQkJCQlcblx0IgorCQkibW92bGkubAlAJTIsICUwCSEgdGVzdF9hbmRfY2xlYXJfYml0CVxuXHQiCisJCSJtb3YJCSUwLCAlMQkJCQlcblx0IgorCQkiYW5kCQklNCwgJTAJCQkJXG5cdCIKKwkJIm1vdmNvLmwJJTAsIEAlMgkJCQlcblx0IgorCQkiYmYJCTFiCQkJCVxuXHQiCisJCSJhbmQJCSUzLCAlMQkJCQlcblx0IgorCQkic3luY28JCQkJCQlcblx0IgorCQk6ICI9JnoiICh0bXApLCAiPSZyIiAocmV0dmFsKQorCQk6ICJyIiAoYSksICJyIiAobWFzayksICJyIiAofm1hc2spCisJCTogInQiLCAibWVtb3J5IgorCSk7CisKKwlyZXR1cm4gcmV0dmFsICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHRlc3RfYW5kX2NoYW5nZV9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICphZGRyKQoreworCWludAltYXNrLCByZXR2YWw7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50ICphID0gYWRkcjsKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCWEgKz0gbnIgPj4gNTsKKwltYXNrID0gMSA8PCAobnIgJiAweDFmKTsKKworCV9fYXNtX18gX192b2xhdGlsZV9fICgKKwkJIjE6CQkJCQkJXG5cdCIKKwkJIm1vdmxpLmwJQCUyLCAlMAkhIHRlc3RfYW5kX2NoYW5nZV9iaXQJXG5cdCIKKwkJIm1vdgkJJTAsICUxCQkJCVxuXHQiCiAJCSJ4b3IJCSUzLCAlMAkJCQlcblx0IgotCQkibW92Y28ubAklMCwgQCUxCQkJCVxuXHQiCisJCSJtb3Zjby5sCSUwLCBAJTIJCQkJXG5cdCIKIAkJImJmCQkxYgkJCQlcblx0IgotCQk6ICI9JnoiICh0bXApLCAiPXIiIChhKQotCQk6ICIxIiAoYSksICJyIiAobWFzaykKLQkJOiAidCIsICJtZW1vcnkiCi0JKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgdGVzdF9hbmRfc2V0X2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQotewotCWludAltYXNrLCByZXR2YWw7Ci0Jdm9sYXRpbGUgdW5zaWduZWQgaW50ICphID0gYWRkcjsKLQl1bnNpZ25lZCBsb25nIHRtcDsKLQotCWEgKz0gbnIgPj4gNTsKLQltYXNrID0gMSA8PCAobnIgJiAweDFmKTsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fICgKLQkJIjE6CQkJCQkJXG5cdCIKLQkJIm1vdmxpLmwJQCUxLCAlMAkhIHRlc3RfYW5kX3NldF9iaXQJXG5cdCIKLQkJIm1vdgkJJTAsICUyCQkJCVxuXHQiCi0JCSJvcgkJJTQsICUwCQkJCVxuXHQiCi0JCSJtb3Zjby5sCSUwLCBAJTEJCQkJXG5cdCIKLQkJImJmCQkxYgkJCQlcblx0IgotCQkiYW5kCQklNCwgJTIJCQkJXG5cdCIKLQkJOiAiPSZ6IiAodG1wKSwgIj1yIiAoYSksICI9JnIiIChyZXR2YWwpCi0JCTogIjEiIChhKSwgInIiIChtYXNrKQotCQk6ICJ0IiwgIm1lbW9yeSIKLQkpOwotCi0JcmV0dXJuIHJldHZhbCAhPSAwOwotfQotCi1zdGF0aWMgaW5saW5lIGludCB0ZXN0X2FuZF9jbGVhcl9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcikKLXsKLQlpbnQJbWFzaywgcmV0dmFsOwotCXZvbGF0aWxlIHVuc2lnbmVkIGludCAqYSA9IGFkZHI7Ci0JdW5zaWduZWQgbG9uZyB0bXA7Ci0KLQlhICs9IG5yID4+IDU7Ci0JbWFzayA9IDEgPDwgKG5yICYgMHgxZik7Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0JCSIxOgkJCQkJCVxuXHQiCi0JCSJtb3ZsaS5sCUAlMSwgJTAJISB0ZXN0X2FuZF9jbGVhcl9iaXQJXG5cdCIKLQkJIm1vdgkJJTAsICUyCQkJCVxuXHQiCi0JCSJhbmQJCSU1LCAlMAkJCQlcblx0IgotCQkibW92Y28ubAklMCwgQCUxCQkJCVxuXHQiCi0JCSJiZgkJMWIJCQkJXG5cdCIKLQkJImFuZAkJJTQsICUyCQkJCVxuXHQiCisJCSJhbmQJCSUzLCAlMQkJCQlcblx0IgogCQkic3luY28JCQkJCQlcblx0IgotCQk6ICI9JnoiICh0bXApLCAiPXIiIChhKSwgIj0mciIgKHJldHZhbCkKLQkJOiAiMSIgKGEpLCAiciIgKG1hc2spLCAiciIgKH5tYXNrKQotCQk6ICJ0IiwgIm1lbW9yeSIKLQkpOwotCi0JcmV0dXJuIHJldHZhbCAhPSAwOwotfQotCi1zdGF0aWMgaW5saW5lIGludCB0ZXN0X2FuZF9jaGFuZ2VfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCi17Ci0JaW50CW1hc2ssIHJldHZhbDsKLQl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKmEgPSBhZGRyOwotCXVuc2lnbmVkIGxvbmcgdG1wOwotCi0JYSArPSBuciA+PiA1OwotCW1hc2sgPSAxIDw8IChuciAmIDB4MWYpOwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKAotCQkiMToJCQkJCQlcblx0IgotCQkibW92bGkubAlAJTEsICUwCSEgdGVzdF9hbmRfY2hhbmdlX2JpdAlcblx0IgotCQkibW92CQklMCwgJTIJCQkJXG5cdCIKLQkJInhvcgkJJTQsICUwCQkJCVxuXHQiCi0JCSJtb3Zjby5sCSUwLCBAJTEJCQkJXG5cdCIKLQkJImJmCQkxYgkJCQlcblx0IgotCQkiYW5kCQklNCwgJTIJCQkJXG5cdCIKLQkJInN5bmNvCQkJCQkJXG5cdCIKLQkJOiAiPSZ6IiAodG1wKSwgIj1yIiAoYSksICI9JnIiIChyZXR2YWwpCi0JCTogIjEiIChhKSwgInIiIChtYXNrKQorCQk6ICI9JnoiICh0bXApLCAiPSZyIiAocmV0dmFsKQorCQk6ICJyIiAoYSksICJyIiAobWFzaykKIAkJOiAidCIsICJtZW1vcnkiCiAJKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9jbG9jay5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9jbG9jay5oCmluZGV4IGY5Yzg4NTguLjJmNmM5NjIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vY2xvY2suaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2Nsb2NrLmgKQEAgLTE1LDYgKzE1LDcgQEAKIAl2b2lkICgqZGlzYWJsZSkoc3RydWN0IGNsayAqY2xrKTsKIAl2b2lkICgqcmVjYWxjKShzdHJ1Y3QgY2xrICpjbGspOwogCWludCAoKnNldF9yYXRlKShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSwgaW50IGFsZ29faWQpOworCWludCAoKnNldF9wYXJlbnQpKHN0cnVjdCBjbGsgKmNsaywgc3RydWN0IGNsayAqcGFyZW50KTsKIAlsb25nICgqcm91bmRfcmF0ZSkoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpOwogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9jbXB4Y2hnLWxsc2MuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vY21weGNoZy1sbHNjLmgKaW5kZXggYWVlM2JmMi4uMGZhYzNkYSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9jbXB4Y2hnLWxsc2MuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2NtcHhjaGctbGxzYy5oCkBAIC04LDE0ICs4LDE0IEBACiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCiAJCSIxOgkJCQkJXG5cdCIKLQkJIm1vdmxpLmwJQCUxLCAlMAkhIHhjaGdfdTMyCVxuXHQiCi0JCSJtb3YJCSUwLCAlMgkJCVxuXHQiCi0JCSJtb3YJCSU0LCAlMAkJCVxuXHQiCi0JCSJtb3Zjby5sCSUwLCBAJTEJCQlcblx0IgorCQkibW92bGkubAlAJTIsICUwCSEgeGNoZ191MzIJXG5cdCIKKwkJIm1vdgkJJTAsICUxCQkJXG5cdCIKKwkJIm1vdgkJJTMsICUwCQkJXG5cdCIKKwkJIm1vdmNvLmwJJTAsIEAlMgkJCVxuXHQiCiAJCSJiZgkJMWIJCQlcblx0IgogCQkic3luY28JCQkJCVxuXHQiCi0JCTogIj0meiIodG1wKSwgIj1yIiAobSksICI9JnIiIChyZXR2YWwpCi0JCTogIjEiIChtKSwgInIiICh2YWwpCisJCTogIj0meiIodG1wKSwgIj0mciIgKHJldHZhbCkKKwkJOiAiciIgKG0pLCAiciIgKHZhbCkKIAkJOiAidCIsICJtZW1vcnkiCiAJKTsKIApAQCAtMjksMTQgKzI5LDE0IEBACiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCiAJCSIxOgkJCQkJXG5cdCIKLQkJIm1vdmxpLmwJQCUxLCAlMAkhIHhjaGdfdTgJXG5cdCIKLQkJIm1vdgkJJTAsICUyCQkJXG5cdCIKLQkJIm1vdgkJJTQsICUwCQkJXG5cdCIKLQkJIm1vdmNvLmwJJTAsIEAlMQkJCVxuXHQiCisJCSJtb3ZsaS5sCUAlMiwgJTAJISB4Y2hnX3U4CVxuXHQiCisJCSJtb3YJCSUwLCAlMQkJCVxuXHQiCisJCSJtb3YJCSUzLCAlMAkJCVxuXHQiCisJCSJtb3Zjby5sCSUwLCBAJTIJCQlcblx0IgogCQkiYmYJCTFiCQkJXG5cdCIKIAkJInN5bmNvCQkJCQlcblx0IgotCQk6ICI9JnoiKHRtcCksICI9ciIgKG0pLCAiPSZyIiAocmV0dmFsKQotCQk6ICIxIiAobSksICJyIiAodmFsICYgMHhmZikKKwkJOiAiPSZ6Iih0bXApLCAiPSZyIiAocmV0dmFsKQorCQk6ICJyIiAobSksICJyIiAodmFsICYgMHhmZikKIAkJOiAidCIsICJtZW1vcnkiCiAJKTsKIApAQCAtNTEsMTcgKzUxLDE3IEBACiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCiAJCSIxOgkJCQkJCVxuXHQiCi0JCSJtb3ZsaS5sCUAlMSwgJTAJISBfX2NtcHhjaGdfdTMyCQlcblx0IgotCQkibW92CQklMCwgJTIJCQkJXG5cdCIKLQkJImNtcC9lcQkJJTIsICU0CQkJCVxuXHQiCisJCSJtb3ZsaS5sCUAlMiwgJTAJISBfX2NtcHhjaGdfdTMyCQlcblx0IgorCQkibW92CQklMCwgJTEJCQkJXG5cdCIKKwkJImNtcC9lcQkJJTEsICUzCQkJCVxuXHQiCiAJCSJiZgkJMmYJCQkJXG5cdCIKLQkJIm1vdgkJJTUsICUwCQkJCVxuXHQiCisJCSJtb3YJCSUzLCAlMAkJCQlcblx0IgogCQkiMjoJCQkJCQlcblx0IgotCQkibW92Y28ubAklMCwgQCUxCQkJCVxuXHQiCisJCSJtb3Zjby5sCSUwLCBAJTIJCQkJXG5cdCIKIAkJImJmCQkxYgkJCQlcblx0IgogCQkic3luY28JCQkJCQlcblx0IgotCQk6ICI9JnoiICh0bXApLCAiPXIiIChtKSwgIj0mciIgKHJldHZhbCkKLQkJOiAiMSIgKG0pLCAiciIgKG9sZCksICJyIiAobmV3KQorCQk6ICI9JnoiICh0bXApLCAiPSZyIiAocmV0dmFsKQorCQk6ICJyIiAobSksICJyIiAob2xkKSwgInIiIChuZXcpCiAJCTogInQiLCAibWVtb3J5IgogCSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vY3B1LWZlYXR1cmVzLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2NwdS1mZWF0dXJlcy5oCmluZGV4IDg2MzA4YWEuLjY5NGFiZTQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vY3B1LWZlYXR1cmVzLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9jcHUtZmVhdHVyZXMuaApAQCAtMjEsNSArMjEsNiBAQAogI2RlZmluZSBDUFVfSEFTX0xMU0MJCTB4MDA0MAkvKiBtb3ZsaS5sL21vdmNvLmwgKi8KICNkZWZpbmUgQ1BVX0hBU19MMl9DQUNIRQkweDAwODAJLyogU2Vjb25kYXJ5IGNhY2hlIC8gVVJBTSAqLwogI2RlZmluZSBDUFVfSEFTX09QMzIJCTB4MDEwMAkvKiAzMi1iaXQgaW5zdHJ1Y3Rpb24gc3VwcG9ydCAqLworI2RlZmluZSBDUFVfSEFTX1BURUFFWAkJMHgwMjAwCS8qIFBURSBBU0lEIEV4dGVuc2lvbiBzdXBwb3J0ICovCiAKICNlbmRpZiAvKiBfX0FTTV9TSF9DUFVfRkVBVFVSRVNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9kbWEtc2guaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vZG1hLXNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM4ZjhlMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vZG1hLXNoLmgKQEAgLTAsMCArMSwxMTggQEAKKy8qCisgKiBhcmNoL3NoL2luY2x1ZGUvYXNtL2RtYS1zaC5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAwICBUYWthc2hpIFlPU0hJSQorICogQ29weXJpZ2h0IChDKSAyMDAzICBQYXVsIE11bmR0CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpZm5kZWYgX19ETUFfU0hfSAorI2RlZmluZSBfX0RNQV9TSF9ICisKKyNpbmNsdWRlIDxhc20vZG1hLmg+CisjaW5jbHVkZSA8Y3B1L2RtYS5oPgorCisvKiBETUFPUiBjb250b3JsOiBUaGUgRE1BT1IgYWNjZXNzIHNpemUgaXMgZGlmZmVyZW50IGJ5IENQVS4qLworI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMykJfHwgXAorICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCkJfHwgXAorICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSkKKyNkZWZpbmUgZG1hb3JfcmVhZF9yZWcobikgXAorICAgIChuID8gY3RybF9pbncoU0hfRE1BQ19CQVNFMSArIERNQU9SKSBcCisJOiBjdHJsX2ludyhTSF9ETUFDX0JBU0UwICsgRE1BT1IpKQorI2RlZmluZSBkbWFvcl93cml0ZV9yZWcobiwgZGF0YSkgXAorICAgIChuID8gY3RybF9vdXR3KGRhdGEsIFNIX0RNQUNfQkFTRTEgKyBETUFPUikgXAorICAgIDogY3RybF9vdXR3KGRhdGEsIFNIX0RNQUNfQkFTRTAgKyBETUFPUikpCisjZWxzZSAvKiBPdGhlciBDUFUgKi8KKyNkZWZpbmUgZG1hb3JfcmVhZF9yZWcobikgY3RybF9pbncoU0hfRE1BQ19CQVNFMCArIERNQU9SKQorI2RlZmluZSBkbWFvcl93cml0ZV9yZWcobiwgZGF0YSkgY3RybF9vdXR3KGRhdGEsIFNIX0RNQUNfQkFTRTAgKyBETUFPUikKKyNlbmRpZgorCitzdGF0aWMgaW50IGRtdGVfaXJxX21hcFtdIF9fbWF5YmVfdW51c2VkID0geworI2lmIChNQVhfRE1BX0NIQU5ORUxTID49IDQpCisgICAgRE1URTBfSVJRLAorICAgIERNVEUwX0lSUSArIDEsCisgICAgRE1URTBfSVJRICsgMiwKKyAgICBETVRFMF9JUlEgKyAzLAorI2VuZGlmCisjaWYgKE1BWF9ETUFfQ0hBTk5FTFMgPj0gNikKKyAgICBETVRFNF9JUlEsCisgICAgRE1URTRfSVJRICsgMSwKKyNlbmRpZgorI2lmIChNQVhfRE1BX0NIQU5ORUxTID49IDgpCisgICAgRE1URTZfSVJRLAorICAgIERNVEU2X0lSUSArIDEsCisjZW5kaWYKKyNpZiAoTUFYX0RNQV9DSEFOTkVMUyA+PSAxMikKKyAgICBETVRFOF9JUlEsCisgICAgRE1URTlfSVJRLAorICAgIERNVEUxMF9JUlEsCisgICAgRE1URTExX0lSUSwKKyNlbmRpZgorfTsKKworLyogRGVmaW5pdGlvbnMgZm9yIHRoZSBTdXBlckggRE1BQyAqLworI2RlZmluZSBSRVFfTAkweDAwMDAwMDAwCisjZGVmaW5lIFJFUV9FCTB4MDAwODAwMDAKKyNkZWZpbmUgUkFDS19ICTB4MDAwMDAwMDAKKyNkZWZpbmUgUkFDS19MCTB4MDAwNDAwMDAKKyNkZWZpbmUgQUNLX1IJMHgwMDAwMDAwMAorI2RlZmluZSBBQ0tfVwkweDAwMDIwMDAwCisjZGVmaW5lIEFDS19ICTB4MDAwMDAwMDAKKyNkZWZpbmUgQUNLX0wJMHgwMDAxMDAwMAorI2RlZmluZSBETV9JTkMJMHgwMDAwNDAwMAorI2RlZmluZSBETV9ERUMJMHgwMDAwODAwMAorI2RlZmluZSBTTV9JTkMJMHgwMDAwMTAwMAorI2RlZmluZSBTTV9ERUMJMHgwMDAwMjAwMAorI2RlZmluZSBSU19JTgkweDAwMDAwMjAwCisjZGVmaW5lIFJTX09VVAkweDAwMDAwMzAwCisjZGVmaW5lIFRTX0JMSwkweDAwMDAwMDQwCisjZGVmaW5lIFRNX0JVUgkweDAwMDAwMDIwCisjZGVmaW5lIENIQ1JfREUgMHgwMDAwMDAwMQorI2RlZmluZSBDSENSX1RFIDB4MDAwMDAwMDIKKyNkZWZpbmUgQ0hDUl9JRSAweDAwMDAwMDA0CisKKy8qIERNQU9SIGRlZmluaXRpb25zICovCisjZGVmaW5lIERNQU9SX0FFCTB4MDAwMDAwMDQKKyNkZWZpbmUgRE1BT1JfTk1JRgkweDAwMDAwMDAyCisjZGVmaW5lIERNQU9SX0RNRQkweDAwMDAwMDAxCisKKy8qCisgKiBEZWZpbmUgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmb3IgZHVhbCBhZGRyZXNzIG1lbW9yeS1tZW1vcnkgdHJhbnNmZXIuCisgKiBUaGUgMHg0MDAgdmFsdWUgcmVwcmVzZW50cyBhdXRvLXJlcXVlc3QsIGV4dGVybmFsLT5leHRlcm5hbC4KKyAqLworI2RlZmluZSBSU19EVUFMCShETV9JTkMgfCBTTV9JTkMgfCAweDQwMCB8IFRTXzMyKQorCisvKiBETUEgYmFzZSBhZGRyZXNzICovCitzdGF0aWMgdTMyIGRtYV9iYXNlX2FkZHJbXSBfX21heWJlX3VudXNlZCA9IHsKKyNpZiAoTUFYX0RNQV9DSEFOTkVMUyA+PSA0KQorCVNIX0RNQUNfQkFTRTAgKyAweDAwLAkvKiBjaGFubmVsIDAgKi8KKwlTSF9ETUFDX0JBU0UwICsgMHgxMCwKKwlTSF9ETUFDX0JBU0UwICsgMHgyMCwKKwlTSF9ETUFDX0JBU0UwICsgMHgzMCwKKyNlbmRpZgorI2lmIChNQVhfRE1BX0NIQU5ORUxTID49IDYpCisJU0hfRE1BQ19CQVNFMCArIDB4NTAsCisJU0hfRE1BQ19CQVNFMCArIDB4NjAsCisjZW5kaWYKKyNpZiAoTUFYX0RNQV9DSEFOTkVMUyA+PSA4KQorCVNIX0RNQUNfQkFTRTEgKyAweDAwLAorCVNIX0RNQUNfQkFTRTEgKyAweDEwLAorI2VuZGlmCisjaWYgKE1BWF9ETUFfQ0hBTk5FTFMgPj0gMTIpCisJU0hfRE1BQ19CQVNFMSArIDB4MjAsCisJU0hfRE1BQ19CQVNFMSArIDB4MzAsCisJU0hfRE1BQ19CQVNFMSArIDB4NTAsCisJU0hfRE1BQ19CQVNFMSArIDB4NjAsIC8qIGNoYW5uZWwgMTEgKi8KKyNlbmRpZgorfTsKKworLyogRE1BIHJlZ2lzdGVyICovCisjZGVmaW5lIFNBUiAgICAgMHgwMAorI2RlZmluZSBEQVIgICAgIDB4MDQKKyNkZWZpbmUgVENSICAgICAweDA4CisjZGVmaW5lIENIQ1IgICAgMHgwQworI2RlZmluZSBETUFPUgkweDQwCisKKyNlbmRpZiAvKiBfX0RNQV9TSF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2RtYS5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9kbWEuaAppbmRleCBiZWNhNzEyLi42YmQxNzg0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2RtYS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vZG1hLmgKQEAgLTI1LDkgKzI1LDkgQEAKICNkZWZpbmUgTUFYX0RNQV9BRERSRVNTCQkoUEFHRV9PRkZTRVQrMHgxMDAwMDAwMCkKIAogI2lmZGVmIENPTkZJR19OUl9ETUFfQ0hBTk5FTFMKLSMgIGRlZmluZSBNQVhfRE1BX0NIQU5ORUxTCShDT05GSUdfTlJfRE1BX0NIQU5ORUxTKQorIyAgZGVmaW5lIE1BWF9ETUFfQ0hBTk5FTFMgICAoQ09ORklHX05SX0RNQV9DSEFOTkVMUykKICNlbHNlCi0jICBkZWZpbmUgTUFYX0RNQV9DSEFOTkVMUwkoQ09ORklHX05SX09OQ0hJUF9ETUFfQ0hBTk5FTFMpCisjICBkZWZpbmUgTUFYX0RNQV9DSEFOTkVMUyAgIChDT05GSUdfTlJfT05DSElQX0RNQV9DSEFOTkVMUykKICNlbmRpZgogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9lbnRyeS1tYWNyb3MuUyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vZW50cnktbWFjcm9zLlMKaW5kZXggMmRhYjBiOC4uM2E0NzUyYSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9lbnRyeS1tYWNyb3MuUworKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2VudHJ5LW1hY3Jvcy5TCkBAIC0zMSwzICszMSw4IEBACiAjZW5kaWYJCiAJLmVuZG0KIAorI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TSDJBKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfU0g0KQorIyBkZWZpbmUgUFJFRih4KQlwcmVmCUB4CisjZWxzZQorIyBkZWZpbmUgUFJFRih4KQlub3AKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9ncGlvLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2dwaW8uaAppbmRleCA5MDY3MzY1Li42MWY5M2RhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2dwaW8uaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2dwaW8uaApAQCAtMTksOCArMTksNDIgQEAKICNpbmNsdWRlIDxjcHUvZ3Bpby5oPgogI2VuZGlmCiAKKyNkZWZpbmUgQVJDSF9OUl9HUElPUyA1MTIKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9ncGlvLmg+CisKKyNpZmRlZiBDT05GSUdfR1BJT0xJQgorCitzdGF0aWMgaW5saW5lIGludCBncGlvX2dldF92YWx1ZSh1bnNpZ25lZCBncGlvKQoreworCXJldHVybiBfX2dwaW9fZ2V0X3ZhbHVlKGdwaW8pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZ3Bpb19zZXRfdmFsdWUodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKQoreworCV9fZ3Bpb19zZXRfdmFsdWUoZ3BpbywgdmFsdWUpOworfQorCitzdGF0aWMgaW5saW5lIGludCBncGlvX2NhbnNsZWVwKHVuc2lnbmVkIGdwaW8pCit7CisJcmV0dXJuIF9fZ3Bpb19jYW5zbGVlcChncGlvKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZ3Bpb190b19pcnEodW5zaWduZWQgZ3BpbykKK3sKKwlXQVJOX09OKDEpOworCXJldHVybiAtRU5PU1lTOworfQorCitzdGF0aWMgaW5saW5lIGludCBpcnFfdG9fZ3Bpbyh1bnNpZ25lZCBpbnQgaXJxKQoreworCVdBUk5fT04oMSk7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfR1BJT0xJQiAqLworCiB0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHBpbm11eF9lbnVtX3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGNoYXIgcGlubXV4X2ZsYWdfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgcGlubXV4X2ZsYWdfdDsKIAogI2RlZmluZSBQSU5NVVhfVFlQRV9OT05FICAgICAgICAgICAgMAogI2RlZmluZSBQSU5NVVhfVFlQRV9GVU5DVElPTiAgICAgICAgMQpAQCAtMzQsNiArNjgsMTEgQEAKICNkZWZpbmUgUElOTVVYX0ZMQUdfV0FOVF9QVUxMVVAgICAgICgxIDw8IDMpCiAjZGVmaW5lIFBJTk1VWF9GTEFHX1dBTlRfUFVMTERPV04gICAoMSA8PCA0KQogCisjZGVmaW5lIFBJTk1VWF9GTEFHX0RCSVRfU0hJRlQgICAgICA1CisjZGVmaW5lIFBJTk1VWF9GTEFHX0RCSVQgICAgICAgICAgICAoMHgxZiA8PCBQSU5NVVhfRkxBR19EQklUX1NISUZUKQorI2RlZmluZSBQSU5NVVhfRkxBR19EUkVHX1NISUZUICAgICAgMTAKKyNkZWZpbmUgUElOTVVYX0ZMQUdfRFJFRyAgICAgICAgICAgICgweDNmIDw8IFBJTk1VWF9GTEFHX0RSRUdfU0hJRlQpCisKIHN0cnVjdCBwaW5tdXhfZ3BpbyB7CiAJcGlubXV4X2VudW1fdCBlbnVtX2lkOwogCXBpbm11eF9mbGFnX3QgZmxhZ3M7CkBAIC01NCw3ICs5Myw3IEBACiAJLmVudW1faWRzID0gKHBpbm11eF9lbnVtX3QgWyhyX3dpZHRoIC8gZl93aWR0aCkgKiAoMSA8PCBmX3dpZHRoKV0pIFwKIAogc3RydWN0IHBpbm11eF9kYXRhX3JlZyB7Ci0JdW5zaWduZWQgbG9uZyByZWcsIHJlZ193aWR0aDsKKwl1bnNpZ25lZCBsb25nIHJlZywgcmVnX3dpZHRoLCByZWdfc2hhZG93OwogCXBpbm11eF9lbnVtX3QgKmVudW1faWRzOwogfTsKIApAQCAtODksMzQgKzEyOCw5IEBACiAJdW5zaWduZWQgaW50IGdwaW9fZGF0YV9zaXplOwogCiAJdW5zaWduZWQgbG9uZyAqZ3Bpb19pbl91c2U7CisJc3RydWN0IGdwaW9fY2hpcCBjaGlwOwogfTsKIAogaW50IHJlZ2lzdGVyX3Bpbm11eChzdHJ1Y3QgcGlubXV4X2luZm8gKnBpcCk7CiAKLWludCBfX2dwaW9fcmVxdWVzdCh1bnNpZ25lZCBncGlvKTsKLXN0YXRpYyBpbmxpbmUgaW50IGdwaW9fcmVxdWVzdCh1bnNpZ25lZCBncGlvLCBjb25zdCBjaGFyICpsYWJlbCkKLXsKLQlyZXR1cm4gX19ncGlvX3JlcXVlc3QoZ3Bpbyk7Ci19Ci12b2lkIGdwaW9fZnJlZSh1bnNpZ25lZCBncGlvKTsKLWludCBncGlvX2RpcmVjdGlvbl9pbnB1dCh1bnNpZ25lZCBncGlvKTsKLWludCBncGlvX2RpcmVjdGlvbl9vdXRwdXQodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKTsKLWludCBncGlvX2dldF92YWx1ZSh1bnNpZ25lZCBncGlvKTsKLXZvaWQgZ3Bpb19zZXRfdmFsdWUodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKTsKLQotLyogSVJRIG1vZGVzIGFyZSB1bnNwcG9ydGVkICovCi1zdGF0aWMgaW5saW5lIGludCBncGlvX3RvX2lycSh1bnNpZ25lZCBncGlvKQotewotCVdBUk5fT04oMSk7Ci0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGlycV90b19ncGlvKHVuc2lnbmVkIGlycSkKLXsKLQlXQVJOX09OKDEpOwotCXJldHVybiAtRUlOVkFMOwotfQotCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvZ3Bpby5oPgotCiAjZW5kaWYgLyogX19BU01fU0hfR1BJT19IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2hkNjQ0NjEuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vaGQ2NDQ2MS5oCmluZGV4IDhjMTM1M2IuLjUyYjRiNjIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vaGQ2NDQ2MS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vaGQ2NDQ2MS5oCkBAIC0yNDIsNyArMjQyLDYgQEAKICNpbmNsdWRlIDxhc20vaW9fZ2VuZXJpYy5oPgogCiAvKiBhcmNoL3NoL2NjaGlwcy9oZDY0NDZ4L2hkNjQ0NjEvc2V0dXAuYyAqLwotaW50IGhkNjQ0NjFfaXJxX2RlbXV4KGludCBpcnEpOwogdm9pZCBoZDY0NDYxX3JlZ2lzdGVyX2lycV9kZW11eChpbnQgaXJxLAogCQkJCWludCAoKmRlbXV4KSAoaW50IGlycSwgdm9pZCAqZGV2KSwgdm9pZCAqZGV2KTsKIHZvaWQgaGQ2NDQ2MV91bnJlZ2lzdGVyX2lycV9kZW11eChpbnQgaXJxKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vaW8uaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vaW8uaAppbmRleCA2MWY2ZGFlLi4wNDU0ZjhkIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2lvLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9pby5oCkBAIC0yMzgsNyArMjM4LDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2lvbWVtICoKIF9faW9yZW1hcF9tb2RlKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7Ci0jaWZkZWYgQ09ORklHX1NVUEVSSDMyCisjaWYgZGVmaW5lZChDT05GSUdfU1VQRVJIMzIpICYmICFkZWZpbmVkKENPTkZJR19QTUJfRklYRUQpCiAJdW5zaWduZWQgbG9uZyBsYXN0X2FkZHIgPSBvZmZzZXQgKyBzaXplIC0gMTsKICNlbmRpZgogCXZvaWQgX19pb21lbSAqcmV0OwpAQCAtMjQ3LDcgKzI0Nyw3IEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotI2lmZGVmIENPTkZJR19TVVBFUkgzMgorI2lmIGRlZmluZWQoQ09ORklHX1NVUEVSSDMyKSAmJiAhZGVmaW5lZChDT05GSUdfUE1CX0ZJWEVEKQogCS8qCiAJICogRm9yIFAxIGFuZCBQMiBzcGFjZSB0aGlzIGlzIHRyaXZpYWwsIGFzIGV2ZXJ5dGhpbmcgaXMgYWxyZWFkeQogCSAqIG1hcHBlZC4gVW5jYWNoZWQgYWNjZXNzIGZvciBQMSBhZGRyZXNzZXMgYXJlIGRvbmUgdGhyb3VnaCBQMi4KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20va3Byb2Jlcy5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9rcHJvYmVzLmgKaW5kZXggNjA3OGQ4ZS4uNjEzNjQ0YSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9rcHJvYmVzLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9rcHJvYmVzLmgKQEAgLTE2LDcgKzE2LDcgQEAKIAk/IChNQVhfU1RBQ0tfU0laRSkgXAogCTogKCgodW5zaWduZWQgbG9uZyljdXJyZW50X3RocmVhZF9pbmZvKCkpICsgVEhSRUFEX1NJWkUgLSAoQUREUikpKQogCi0jZGVmaW5lIHJlZ3NfcmV0dXJuX3ZhbHVlKHJlZ3MpCQkoKHJlZ3MpLT5yZWdzWzBdKQorI2RlZmluZSByZWdzX3JldHVybl92YWx1ZShfcmVncykJCSgoX3JlZ3MpLT5yZWdzWzBdKQogI2RlZmluZSBmbHVzaF9pbnNuX3Nsb3QocCkJCWRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUga3JldHByb2JlX2JsYWNrbGlzdF9zaXplCTAKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCmluZGV4IDVkOTE1N2IuLjJhOWM1NWYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKQEAgLTE5LDEzICsxOSwxOCBAQAogICogICAgKGEpIFRMQiBjYWNoZSB2ZXJzaW9uIChvciByb3VuZCwgY3ljbGUgd2hhdGV2ZXIgZXhwcmVzc2lvbiB5b3UgbGlrZSkKICAqICAgIChiKSBBU0lEIChBZGRyZXNzIFNwYWNlIElEZW50aWZpZXIpCiAgKi8KKyNpZmRlZiBDT05GSUdfQ1BVX0hBU19QVEVBRVgKKyNkZWZpbmUgTU1VX0NPTlRFWFRfQVNJRF9NQVNLCQkweDAwMDBmZmZmCisjZWxzZQogI2RlZmluZSBNTVVfQ09OVEVYVF9BU0lEX01BU0sJCTB4MDAwMDAwZmYKLSNkZWZpbmUgTU1VX0NPTlRFWFRfVkVSU0lPTl9NQVNLCTB4ZmZmZmZmMDAKLSNkZWZpbmUgTU1VX0NPTlRFWFRfRklSU1RfVkVSU0lPTgkweDAwMDAwMTAwCi0jZGVmaW5lIE5PX0NPTlRFWFQJCQkwVUwKKyNlbmRpZgogCi0vKiBBU0lEIGlzIDgtYml0IHZhbHVlLCBzbyBpdCBjYW4ndCBiZSAweDEwMCAqLwotI2RlZmluZSBNTVVfTk9fQVNJRAkJCTB4MTAwCisjZGVmaW5lIE1NVV9DT05URVhUX1ZFUlNJT05fTUFTSwkofjBVTCAmIH5NTVVfQ09OVEVYVF9BU0lEX01BU0spCisjZGVmaW5lIE1NVV9DT05URVhUX0ZJUlNUX1ZFUlNJT04JKE1NVV9DT05URVhUX0FTSURfTUFTSyArIDEpCisKKy8qIEltcG9zc2libGUgQVNJRCB2YWx1ZSwgdG8gZGlmZmVyZW50aWF0ZSBmcm9tIE5PX0NPTlRFWFQuICovCisjZGVmaW5lIE1NVV9OT19BU0lECQkJTU1VX0NPTlRFWFRfRklSU1RfVkVSU0lPTgorI2RlZmluZSBOT19DT05URVhUCQkJMFVMCiAKICNkZWZpbmUgYXNpZF9jYWNoZShjcHUpCQkoY3B1X2RhdGFbY3B1XS5hc2lkX2NhY2hlKQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0XzMyLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0XzMyLmgKaW5kZXggZjRmOWFlYi4uOGVmODAwYyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9tbXVfY29udGV4dF8zMi5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vbW11X2NvbnRleHRfMzIuaApAQCAtMTAsNiArMTAsMTcgQEAKIAkvKiBEbyBub3RoaW5nICovCiB9CiAKKyNpZmRlZiBDT05GSUdfQ1BVX0hBU19QVEVBRVgKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfYXNpZCh1bnNpZ25lZCBsb25nIGFzaWQpCit7CisJX19yYXdfd3JpdGVsKGFzaWQsIE1NVV9QVEVBRVgpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0X2FzaWQodm9pZCkKK3sKKwlyZXR1cm4gX19yYXdfcmVhZGwoTU1VX1BURUFFWCkgJiBNTVVfQ09OVEVYVF9BU0lEX01BU0s7Cit9CisjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIHNldF9hc2lkKHVuc2lnbmVkIGxvbmcgYXNpZCkKIHsKIAl1bnNpZ25lZCBsb25nIF9fZHVtbXk7CkBAIC0zMyw2ICs0NCw3IEBACiAJYXNpZCAmPSBNTVVfQ09OVEVYVF9BU0lEX01BU0s7CiAJcmV0dXJuIGFzaWQ7CiB9CisjZW5kaWYgLyogQ09ORklHX0NQVV9IQVNfUFRFQUVYICovCiAKIC8qIE1NVV9UVEIgaXMgdXNlZCBmb3Igb3B0aW1pemluZyB0aGUgZmF1bHQgaGFuZGxpbmcuICovCiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X1RUQihwZ2RfdCAqcGdkKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wYWdlLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3BhZ2UuaAppbmRleCA1ODcxZDc4Li45YzZkMjFlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3BhZ2UuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3BhZ2UuaApAQCAtMTI5LDcgKzEyOSwxMiBAQAogICogaXMgbm90IHZpc2libGUgKGl0IGlzIHBhcnQgb2YgdGhlIFBNQiBtYXBwaW5nKSBhbmQgc28gbmVlZHMgdG8gYmUKICAqIGFkZGVkIG9yIHN1YnRyYWN0ZWQgYXMgcmVxdWlyZWQuCiAgKi8KLSNpZmRlZiBDT05GSUdfMzJCSVQKKyNpZiBkZWZpbmVkKENPTkZJR19QTUJfRklYRUQpCisvKiBwaHlzID0gdmlydCAtIFBBR0VfT0ZGU0VUIC0gKF9fTUVNT1JZX1NUQVJUICYgMHhlMDAwMDAwMCkgKi8KKyNkZWZpbmUgUE1CX09GRlNFVAkoUEFHRV9PRkZTRVQgLSBQWFNFRyhfX01FTU9SWV9TVEFSVCkpCisjZGVmaW5lIF9fcGEoeCkJKCh1bnNpZ25lZCBsb25nKSh4KSAtIFBNQl9PRkZTRVQpCisjZGVmaW5lIF9fdmEoeCkJKCh2b2lkICopKCh1bnNpZ25lZCBsb25nKSh4KSArIFBNQl9PRkZTRVQpKQorI2VsaWYgZGVmaW5lZChDT05GSUdfMzJCSVQpCiAjZGVmaW5lIF9fcGEoeCkJKCh1bnNpZ25lZCBsb25nKSh4KS1QQUdFX09GRlNFVCtfX01FTU9SWV9TVEFSVCkKICNkZWZpbmUgX192YSh4KQkoKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKHgpK1BBR0VfT0ZGU0VULV9fTUVNT1JZX1NUQVJUKSkKICNlbHNlCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAppbmRleCAxZWY0YjI0Li4xZmQ1OGI0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKQEAgLTMxLDcgKzMxLDcgQEAKIAlDUFVfU0g3NzYwLCBDUFVfU0g0XzIwMiwgQ1BVX1NINF81MDEsCiAKIAkvKiBTSC00QSB0eXBlcyAqLwotCUNQVV9TSDc3NjMsIENQVV9TSDc3NzAsIENQVV9TSDc3ODAsIENQVV9TSDc3ODEsIENQVV9TSDc3ODUsCisJQ1BVX1NINzc2MywgQ1BVX1NINzc3MCwgQ1BVX1NINzc4MCwgQ1BVX1NINzc4MSwgQ1BVX1NINzc4NSwgQ1BVX1NINzc4NiwKIAlDUFVfU0g3NzIzLCBDUFVfU0hYMywKIAogCS8qIFNINEFMLURTUCB0eXBlcyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3JfMzIuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yXzMyLmgKaW5kZXggZDc5MDYzYy4uZWZkZDc4YSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3JfMzIuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvcl8zMi5oCkBAIC0xMDgsMTIgKzEwOCwxMiBAQAogLyoKICAqIERvIG5lY2Vzc2FyeSBzZXR1cCB0byBzdGFydCB1cCBhIG5ld2x5IGV4ZWN1dGVkIHRocmVhZC4KICAqLwotI2RlZmluZSBzdGFydF90aHJlYWQocmVncywgbmV3X3BjLCBuZXdfc3ApCSBcCisjZGVmaW5lIHN0YXJ0X3RocmVhZChfcmVncywgbmV3X3BjLCBuZXdfc3ApCSBcCiAJc2V0X2ZzKFVTRVJfRFMpOwkJCSBcCi0JcmVncy0+cHIgPSAwOwkJCQkgXAotCXJlZ3MtPnNyID0gU1JfRkQ7CS8qIFVzZXIgbW9kZS4gKi8gXAotCXJlZ3MtPnBjID0gbmV3X3BjOwkJCSBcCi0JcmVncy0+cmVnc1sxNV0gPSBuZXdfc3AKKwlfcmVncy0+cHIgPSAwOwkJCQkgXAorCV9yZWdzLT5zciA9IFNSX0ZEOwkvKiBVc2VyIG1vZGUuICovIFwKKwlfcmVncy0+cGMgPSBuZXdfcGM7CQkJIFwKKwlfcmVncy0+cmVnc1sxNV0gPSBuZXdfc3AKIAogLyogRm9yd2FyZCBkZWNsYXJhdGlvbiwgYSBzdHJhbmdlIEMgdGhpbmcgKi8KIHN0cnVjdCB0YXNrX3N0cnVjdDsKQEAgLTE4OSwxMCArMTg5LDkgQEAKICNkZWZpbmUgS1NUS19FSVAodHNrKSAgKHRhc2tfcHRfcmVncyh0c2spLT5wYykKICNkZWZpbmUgS1NUS19FU1AodHNrKSAgKHRhc2tfcHRfcmVncyh0c2spLT5yZWdzWzE1XSkKIAotI2RlZmluZSB1c2VyX3N0YWNrX3BvaW50ZXIocmVncykJKChyZWdzKS0+cmVnc1sxNV0pCisjZGVmaW5lIHVzZXJfc3RhY2tfcG9pbnRlcihfcmVncykJKChfcmVncyktPnJlZ3NbMTVdKQogCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NIMkEpIHx8IGRlZmluZWQoQ09ORklHX0NQVV9TSDMpIHx8IFwKLSAgICBkZWZpbmVkKENPTkZJR19DUFVfU0g0KQorI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TSDJBKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfU0g0KQogI2RlZmluZSBQUkVGRVRDSF9TVFJJREUJCUwxX0NBQ0hFX0JZVEVTCiAjZGVmaW5lIEFSQ0hfSEFTX1BSRUZFVENICiAjZGVmaW5lIEFSQ0hfSEFTX1BSRUZFVENIVwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3JfNjQuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yXzY0LmgKaW5kZXggODAzMTc3Zi4uNTcyN2QzMSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3JfNjQuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvcl82NC5oCkBAIC0xNDUsMTMgKzE0NSwxMyBAQAogICovCiAjZGVmaW5lIFNSX1VTRVIgKFNSX01NVSB8IFNSX0ZEKQogCi0jZGVmaW5lIHN0YXJ0X3RocmVhZChyZWdzLCBuZXdfcGMsIG5ld19zcCkJCQlcCisjZGVmaW5lIHN0YXJ0X3RocmVhZChfcmVncywgbmV3X3BjLCBuZXdfc3ApCQkJXAogCXNldF9mcyhVU0VSX0RTKTsJCQkJCVwKLQlyZWdzLT5zciA9IFNSX1VTRVI7CS8qIFVzZXIgbW9kZS4gKi8JCVwKLQlyZWdzLT5wYyA9IG5ld19wYyAtIDQ7CS8qIENvbXBlbnNhdGUgc3lzY2FsbCBleGl0ICovCVwKLQlyZWdzLT5wYyB8PSAxOwkJLyogU2V0IFNIbWVkaWEgISAqLwkJXAotCXJlZ3MtPnJlZ3NbMThdID0gMDsJCQkJCVwKLQlyZWdzLT5yZWdzWzE1XSA9IG5ld19zcAorCV9yZWdzLT5zciA9IFNSX1VTRVI7CS8qIFVzZXIgbW9kZS4gKi8JCVwKKwlfcmVncy0+cGMgPSBuZXdfcGMgLSA0OwkvKiBDb21wZW5zYXRlIHN5c2NhbGwgZXhpdCAqLwlcCisJX3JlZ3MtPnBjIHw9IDE7CQkvKiBTZXQgU0htZWRpYSAhICovCQlcCisJX3JlZ3MtPnJlZ3NbMThdID0gMDsJCQkJCVwKKwlfcmVncy0+cmVnc1sxNV0gPSBuZXdfc3AKIAogLyogRm9yd2FyZCBkZWNsYXJhdGlvbiwgYSBzdHJhbmdlIEMgdGhpbmcgKi8KIHN0cnVjdCB0YXNrX3N0cnVjdDsKQEAgLTIyNiw3ICsyMjYsNyBAQAogI2RlZmluZSBLU1RLX0VJUCh0c2spICAoKHRzayktPnRocmVhZC5wYykKICNkZWZpbmUgS1NUS19FU1AodHNrKSAgKCh0c2spLT50aHJlYWQuc3ApCiAKLSNkZWZpbmUgdXNlcl9zdGFja19wb2ludGVyKHJlZ3MpCSgocmVncyktPnJlZ3NbMTVdKQorI2RlZmluZSB1c2VyX3N0YWNrX3BvaW50ZXIoX3JlZ3MpCSgoX3JlZ3MpLT5yZWdzWzE1XSkKIAogI2VuZGlmCS8qIF9fQVNTRU1CTFlfXyAqLwogI2VuZGlmIC8qIF9fQVNNX1NIX1BST0NFU1NPUl82NF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3B0cmFjZS5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wdHJhY2UuaAppbmRleCAxMjkxMmFiLi44MWM2NTY4IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3B0cmFjZS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcHRyYWNlLmgKQEAgLTEyMiwxNCArMTIyLDEyIEBACiAjaWZkZWYgQ09ORklHX1NIX0RTUAogI2RlZmluZSB0YXNrX3B0X3JlZ3ModGFzaykgXAogCSgoc3RydWN0IHB0X3JlZ3MgKikgKHRhc2tfc3RhY2tfcGFnZSh0YXNrKSArIFRIUkVBRF9TSVpFIFwKLQkJIC0gc2l6ZW9mKHN0cnVjdCBwdF9kc3ByZWdzKSAtIHNpemVvZih1bnNpZ25lZCBsb25nKSkgLSAxKQorCQkgLSBzaXplb2Yoc3RydWN0IHB0X2RzcHJlZ3MpKSAtIDEpCiAjZGVmaW5lIHRhc2tfcHRfZHNwcmVncyh0YXNrKSBcCi0JKChzdHJ1Y3QgcHRfZHNwcmVncyAqKSAodGFza19zdGFja19wYWdlKHRhc2spICsgVEhSRUFEX1NJWkUgXAotCQkgLSBzaXplb2YodW5zaWduZWQgbG9uZykpIC0gMSkKKwkoKHN0cnVjdCBwdF9kc3ByZWdzICopICh0YXNrX3N0YWNrX3BhZ2UodGFzaykgKyBUSFJFQURfU0laRSkgLSAxKQogI2Vsc2UKICNkZWZpbmUgdGFza19wdF9yZWdzKHRhc2spIFwKLQkoKHN0cnVjdCBwdF9yZWdzICopICh0YXNrX3N0YWNrX3BhZ2UodGFzaykgKyBUSFJFQURfU0laRSBcCi0JCSAtIHNpemVvZih1bnNpZ25lZCBsb25nKSkgLSAxKQorCSgoc3RydWN0IHB0X3JlZ3MgKikgKHRhc2tfc3RhY2tfcGFnZSh0YXNrKSArIFRIUkVBRF9TSVpFKSAtIDEpCiAjZW5kaWYKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHByb2ZpbGVfcGMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3NlY3Rpb25zLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3NlY3Rpb25zLmgKaW5kZXggOGY4ZjRhZC4uMDFhNDA3NmEzNyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zZWN0aW9ucy5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc2VjdGlvbnMuaApAQCAtMyw2ICszLDcgQEAKIAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3NlY3Rpb25zLmg+CiAKK2V4dGVybiB2b2lkIF9fbm9zYXZlX2JlZ2luLCBfX25vc2F2ZV9lbmQ7CiBleHRlcm4gbG9uZyBfX21hY2h2ZWNfc3RhcnQsIF9fbWFjaHZlY19lbmQ7CiBleHRlcm4gY2hhciBfX3VuY2FjaGVkX3N0YXJ0LCBfX3VuY2FjaGVkX2VuZDsKIGV4dGVybiBjaGFyIF9lYnNzW107CmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3NvY2tldC5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zb2NrZXQuaAppbmRleCA2ZDRiZjY1Li4zNDU2NTNiIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3NvY2tldC5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc29ja2V0LmgKQEAgLTU0LDQgKzU0LDcgQEAKIAogI2RlZmluZSBTT19NQVJLCQkJMzYKIAorI2RlZmluZSBTT19USU1FU1RBTVBJTkcJCTM3CisjZGVmaW5lIFNDTV9USU1FU1RBTVBJTkcJU09fVElNRVNUQU1QSU5HCisKICNlbmRpZiAvKiBfX0FTTV9TSF9TT0NLRVRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zdXNwZW5kLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3N1c3BlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWI5OTUzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zdXNwZW5kLmgKQEAgLTAsMCArMSwyMiBAQAorI2lmbmRlZiBfQVNNX1NIX1NVU1BFTkRfSAorI2RlZmluZSBfQVNNX1NIX1NVU1BFTkRfSAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworc3RhdGljIGlubGluZSBpbnQgYXJjaF9wcmVwYXJlX3N1c3BlbmQodm9pZCkgeyByZXR1cm4gMDsgfQorCisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorCitzdHJ1Y3Qgc3dzdXNwX2FyY2hfcmVncyB7CisJc3RydWN0IHB0X3JlZ3MgdXNlcl9yZWdzOworCXVuc2lnbmVkIGxvbmcgYmFuazFfcmVnc1s4XTsKK307CisjZW5kaWYKKworLyogZmxhZ3MgcGFzc2VkIHRvIGFzc2VtYmx5IHN1c3BlbmQgY29kZSAqLworI2RlZmluZSBTVVNQX1NIX1NMRUVQCQkoMSA8PCAwKSAvKiBSZWd1bGFyIHNsZWVwIG1vZGUgKi8KKyNkZWZpbmUgU1VTUF9TSF9TVEFOREJZCQkoMSA8PCAxKSAvKiBTSC1Nb2JpbGUgU29mdHdhcmUgc3RhbmRieSBtb2RlICovCisjZGVmaW5lIFNVU1BfU0hfUlNUQU5EQlkJKDEgPDwgMikgLyogU0gtTW9iaWxlIFItc3RhbmRieSBtb2RlICovCisjZGVmaW5lIFNVU1BfU0hfVVNUQU5EQlkJKDEgPDwgMykgLyogU0gtTW9iaWxlIFUtc3RhbmRieSBtb2RlICovCisjZGVmaW5lIFNVU1BfU0hfU0YJCSgxIDw8IDQpIC8qIEVuYWJsZSBzZWxmLXJlZnJlc2ggKi8KKworI2VuZGlmIC8qIF9BU01fU0hfU1VTUEVORF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3RpbWVyLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3RpbWVyLmgKaW5kZXggYTdjYTNhMS4uNGMzYjY2ZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vdGltZXIuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3RpbWVyLmgKQEAgLTksNyArOSw2IEBACiAJaW50ICgqaW5pdCkodm9pZCk7CiAJaW50ICgqc3RhcnQpKHZvaWQpOwogCWludCAoKnN0b3ApKHZvaWQpOwotCWN5Y2xlX3QgKCpyZWFkKSh2b2lkKTsKICNpZm5kZWYgQ09ORklHX0dFTkVSSUNfVElNRQogCXVuc2lnbmVkIGxvbmcgKCpnZXRfb2Zmc2V0KSh2b2lkKTsKICNlbmRpZgpAQCAtMzksNiArMzgsNyBAQAogCiAvKiBhcmNoL3NoL2tlcm5lbC90aW1lLmMgKi8KIHZvaWQgaGFuZGxlX3RpbWVyX3RpY2sodm9pZCk7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBzaF9ocHRfZnJlcXVlbmN5OworCitleHRlcm4gc3RydWN0IGNsb2Nrc291cmNlIGNsb2Nrc291cmNlX3NoOwogCiAjZW5kaWYgLyogX19BU01fU0hfVElNRVJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS90bGIuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vdGxiLmgKaW5kZXggODhmZjFhZS4uOWMxNmY3MyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS90bGIuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3RsYi5oCkBAIC02LDIyICs2LDEwNiBAQAogI2VuZGlmCiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCisjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogCi0jZGVmaW5lIHRsYl9zdGFydF92bWEodGxiLCB2bWEpIFwKLQlmbHVzaF9jYWNoZV9yYW5nZSh2bWEsIHZtYS0+dm1fc3RhcnQsIHZtYS0+dm1fZW5kKQotCi0jZGVmaW5lIHRsYl9lbmRfdm1hKHRsYiwgdm1hKQlcCi0JZmx1c2hfdGxiX3JhbmdlKHZtYSwgdm1hLT52bV9zdGFydCwgdm1hLT52bV9lbmQpCi0KLSNkZWZpbmUgX190bGJfcmVtb3ZlX3RsYl9lbnRyeSh0bGIsIHB0ZSwgYWRkcmVzcykJZG8geyB9IHdoaWxlICgwKQorI2lmZGVmIENPTkZJR19NTVUKKyNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgorI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogCiAvKgotICogRmx1c2ggd2hvbGUgVExCcyBmb3IgTU0KKyAqIFRMQiBoYW5kbGluZy4gIFRoaXMgYWxsb3dzIHVzIHRvIHJlbW92ZSBwYWdlcyBmcm9tIHRoZSBwYWdlCisgKiB0YWJsZXMsIGFuZCBlZmZpY2llbnRseSBoYW5kbGUgdGhlIFRMQiBpc3N1ZXMuCiAgKi8KLSNkZWZpbmUgdGxiX2ZsdXNoKHRsYikJCQkJZmx1c2hfdGxiX21tKCh0bGIpLT5tbSkKK3N0cnVjdCBtbXVfZ2F0aGVyIHsKKwlzdHJ1Y3QgbW1fc3RydWN0CSptbTsKKwl1bnNpZ25lZCBpbnQJCWZ1bGxtbTsKKwl1bnNpZ25lZCBsb25nCQlzdGFydCwgZW5kOworfTsKIAotI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KK0RFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgbW11X2dhdGhlciwgbW11X2dhdGhlcnMpOworCitzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF90bGJfZ2F0aGVyKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIpCit7CisJdGxiLT5zdGFydCA9IFRBU0tfU0laRTsKKwl0bGItPmVuZCA9IDA7CisKKwlpZiAodGxiLT5mdWxsbW0pIHsKKwkJdGxiLT5zdGFydCA9IDA7CisJCXRsYi0+ZW5kID0gVEFTS19TSVpFOworCX0KK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbW11X2dhdGhlciAqCit0bGJfZ2F0aGVyX21tdShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgaW50IGZ1bGxfbW1fZmx1c2gpCit7CisJc3RydWN0IG1tdV9nYXRoZXIgKnRsYiA9ICZnZXRfY3B1X3ZhcihtbXVfZ2F0aGVycyk7CisKKwl0bGItPm1tID0gbW07CisJdGxiLT5mdWxsbW0gPSBmdWxsX21tX2ZsdXNoOworCisJaW5pdF90bGJfZ2F0aGVyKHRsYik7CisKKwlyZXR1cm4gdGxiOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3RsYl9maW5pc2hfbW11KHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCWlmICh0bGItPmZ1bGxtbSkKKwkJZmx1c2hfdGxiX21tKHRsYi0+bW0pOworCisJLyoga2VlcCB0aGUgcGFnZSB0YWJsZSBjYWNoZSB3aXRoaW4gYm91bmRzICovCisJY2hlY2tfcGd0X2NhY2hlKCk7CisKKwlwdXRfY3B1X3ZhcihtbXVfZ2F0aGVycyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAordGxiX3JlbW92ZV90bGJfZW50cnkoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgcHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3sKKwlpZiAodGxiLT5zdGFydCA+IGFkZHJlc3MpCisJCXRsYi0+c3RhcnQgPSBhZGRyZXNzOworCWlmICh0bGItPmVuZCA8IGFkZHJlc3MgKyBQQUdFX1NJWkUpCisJCXRsYi0+ZW5kID0gYWRkcmVzcyArIFBBR0VfU0laRTsKK30KKworLyoKKyAqIEluIHRoZSBjYXNlIG9mIHRsYiB2bWEgaGFuZGxpbmcsIHdlIGNhbiBvcHRpbWlzZSB0aGVzZSBhd2F5IGluIHRoZQorICogY2FzZSB3aGVyZSB3ZSdyZSBkb2luZyBhIGZ1bGwgTU0gZmx1c2guICBXaGVuIHdlJ3JlIGRvaW5nIGEgbXVubWFwLAorICogdGhlIHZtYXMgYXJlIGFkanVzdGVkIHRvIG9ubHkgY292ZXIgdGhlIHJlZ2lvbiB0byBiZSB0b3JuIGRvd24uCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAordGxiX3N0YXJ0X3ZtYShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlpZiAoIXRsYi0+ZnVsbG1tKQorCQlmbHVzaF9jYWNoZV9yYW5nZSh2bWEsIHZtYS0+dm1fc3RhcnQsIHZtYS0+dm1fZW5kKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCit0bGJfZW5kX3ZtYShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlpZiAoIXRsYi0+ZnVsbG1tICYmIHRsYi0+ZW5kKSB7CisJCWZsdXNoX3RsYl9yYW5nZSh2bWEsIHRsYi0+c3RhcnQsIHRsYi0+ZW5kKTsKKwkJaW5pdF90bGJfZ2F0aGVyKHRsYik7CisJfQorfQorCisjZGVmaW5lIHRsYl9yZW1vdmVfcGFnZSh0bGIscGFnZSkJZnJlZV9wYWdlX2FuZF9zd2FwX2NhY2hlKHBhZ2UpCisjZGVmaW5lIHB0ZV9mcmVlX3RsYih0bGIsIHB0ZXApCQlwdGVfZnJlZSgodGxiKS0+bW0sIHB0ZXApCisjZGVmaW5lIHBtZF9mcmVlX3RsYih0bGIsIHBtZHApCQlwbWRfZnJlZSgodGxiKS0+bW0sIHBtZHApCisjZGVmaW5lIHB1ZF9mcmVlX3RsYih0bGIsIHB1ZHApCQlwdWRfZnJlZSgodGxiKS0+bW0sIHB1ZHApCisKKyNkZWZpbmUgdGxiX21pZ3JhdGVfZmluaXNoKG1tKQkJZG8geyB9IHdoaWxlICgwKQorCisjZWxzZSAvKiBDT05GSUdfTU1VICovCisKKyNkZWZpbmUgdGxiX3N0YXJ0X3ZtYSh0bGIsIHZtYSkJCQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSB0bGJfZW5kX3ZtYSh0bGIsIHZtYSkJCQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBfX3RsYl9yZW1vdmVfdGxiX2VudHJ5KHRsYiwgcHRlLCBhZGRyZXNzKQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHRsYl9mbHVzaCh0bGIpCQkJCQlkbyB7IH0gd2hpbGUgKDApCisKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy90bGIuaD4KIAorI2VuZGlmIC8qIENPTkZJR19NTVUgKi8KICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KICNlbmRpZiAvKiBfX0FTTV9TSF9UTEJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDMvY3B1L2RtYS5oIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDMvY3B1L2RtYS5oCmluZGV4IDY4MTNjMzIuLjBlYTE1ZjMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2gzL2NwdS9kbWEuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoMy9jcHUvZG1hLmgKQEAgLTEsMjIgKzEsMTcgQEAKICNpZm5kZWYgX19BU01fQ1BVX1NIM19ETUFfSAogI2RlZmluZSBfX0FTTV9DUFVfU0gzX0RNQV9ICiAKLQogI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMCkgfHwgXAotICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMSkKLSNkZWZpbmUgU0hfRE1BQ19CQVNFCTB4YTQwMTAwMjAKLSNlbHNlCi0jZGVmaW5lIFNIX0RNQUNfQkFTRQkweGE0MDAwMDIwCisgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIxKSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzEwKSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzEyKQorI2RlZmluZSBTSF9ETUFDX0JBU0UwCTB4YTQwMTAwMjAKKyNlbHNlIC8qIFNINzcwNS8wNi8wNy8wOSAqLworI2RlZmluZSBTSF9ETUFDX0JBU0UwCTB4YTQwMDAwMjAKICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIwKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDkpCiAjZGVmaW5lIERNVEUwX0lSUQk0OAotI2RlZmluZSBETVRFMV9JUlEJNDkKLSNkZWZpbmUgRE1URTJfSVJRCTUwCi0jZGVmaW5lIERNVEUzX0lSUQk1MQogI2RlZmluZSBETVRFNF9JUlEJNzYKLSNkZWZpbmUgRE1URTVfSVJRCTc3Ci0jZW5kaWYKIAogLyogRGVmaW5pdGlvbnMgZm9yIHRoZSBTdXBlckggRE1BQyAqLwogI2RlZmluZSBUTV9CVVJTVAkweDAwMDAwMDIwCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvZG1hLXNoNGEuaCBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9kbWEtc2g0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlZDUxNzgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvZG1hLXNoNGEuaApAQCAtMCwwICsxLDk0IEBACisjaWZuZGVmIF9fQVNNX1NIX0NQVV9TSDRfRE1BX1NINzc4MF9ICisjZGVmaW5lIF9fQVNNX1NIX0NQVV9TSDRfRE1BX1NINzc4MF9ICisKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDczNDMpIHx8IFwKKwlkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjIpIHx8IFwKKwlkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MzApCisjZGVmaW5lIERNVEUwX0lSUQk0OAorI2RlZmluZSBETVRFNF9JUlEJNzYKKyNkZWZpbmUgRE1BRTBfSVJRCTc4CS8qIERNQSBFcnJvciBJUlEqLworI2RlZmluZSBTSF9ETUFDX0JBU0UwCTB4RkUwMDgwMjAKKyNkZWZpbmUgU0hfRE1BUlNfQkFTRQkweEZFMDA5MDAwCisjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMpIHx8IFwKKwlkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjQpCisjZGVmaW5lIERNVEUwX0lSUQkzNAorI2RlZmluZSBETVRFNF9JUlEJNDQKKyNkZWZpbmUgRE1BRTBfSVJRCTM4CisjZGVmaW5lIFNIX0RNQUNfQkFTRTAJMHhGRjYwODAyMAorI2RlZmluZSBTSF9ETUFSU19CQVNFCTB4RkY2MDkwMDAKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMykKKyNkZWZpbmUgRE1URTBfSVJRCTQ4CS8qIERNQUMwQSovCisjZGVmaW5lIERNVEU0X0lSUQk0MAkvKiBETUFDMEIgKi8KKyNkZWZpbmUgRE1URTZfSVJRCTQyCisjZGVmaW5lIERNVEU4X0lSUQk3NgkvKiBETUFDMUEgKi8KKyNkZWZpbmUgRE1URTlfSVJRCTc3CisjZGVmaW5lIERNVEUxMF9JUlEJNzIJLyogRE1BQzFCICovCisjZGVmaW5lIERNVEUxMV9JUlEJNzMKKyNkZWZpbmUgRE1BRTBfSVJRCTc4CS8qIERNQSBFcnJvciBJUlEqLworI2RlZmluZSBETUFFMV9JUlEJNzQJLyogRE1BIEVycm9yIElSUSovCisjZGVmaW5lIFNIX0RNQUNfQkFTRTAJMHhGRTAwODAyMAorI2RlZmluZSBTSF9ETUFDX0JBU0UxCTB4RkRDMDgwMjAKKyNkZWZpbmUgU0hfRE1BUlNfQkFTRQkweEZEQzA5MDAwCisjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODApCisjZGVmaW5lIERNVEUwX0lSUQkzNAorI2RlZmluZSBETVRFNF9JUlEJNDQKKyNkZWZpbmUgRE1URTZfSVJRCTQ2CisjZGVmaW5lIERNVEU4X0lSUQk5MgorI2RlZmluZSBETVRFOV9JUlEJOTMKKyNkZWZpbmUgRE1URTEwX0lSUQk5NAorI2RlZmluZSBETVRFMTFfSVJRCTk1CisjZGVmaW5lIERNQUUwX0lSUQkzOAkvKiBETUEgRXJyb3IgSVJRICovCisjZGVmaW5lIFNIX0RNQUNfQkFTRTAJMHhGQzgwODAyMAorI2RlZmluZSBTSF9ETUFDX0JBU0UxCTB4RkM4MTgwMjAKKyNkZWZpbmUgU0hfRE1BUlNfQkFTRQkweEZDODA5MDAwCisjZWxzZSAvKiBTSDc3ODUgKi8KKyNkZWZpbmUgRE1URTBfSVJRCTMzCisjZGVmaW5lIERNVEU0X0lSUQkzNworI2RlZmluZSBETVRFNl9JUlEJNTIKKyNkZWZpbmUgRE1URThfSVJRCTU0CisjZGVmaW5lIERNVEU5X0lSUQk1NQorI2RlZmluZSBETVRFMTBfSVJRCTU2CisjZGVmaW5lIERNVEUxMV9JUlEJNTcKKyNkZWZpbmUgRE1BRTBfSVJRCTM5CS8qIERNQSBFcnJvciBJUlEwICovCisjZGVmaW5lIERNQUUxX0lSUQk1OAkvKiBETUEgRXJyb3IgSVJRMSAqLworI2RlZmluZSBTSF9ETUFDX0JBU0UwCTB4RkM4MDgwMjAKKyNkZWZpbmUgU0hfRE1BQ19CQVNFMQkweEZDQzA4MDIwCisjZGVmaW5lIFNIX0RNQVJTX0JBU0UJMHhGQzgwOTAwMAorI2VuZGlmCisKKyNkZWZpbmUgUkVRX0hFCTB4MDAwMDAwQzAKKyNkZWZpbmUgUkVRX0gJMHgwMDAwMDA4MAorI2RlZmluZSBSRVFfTEUJMHgwMDAwMDA0MAorI2RlZmluZSBUTV9CVVJTVCAweDAwMDAwMjAKKyNkZWZpbmUgVFNfOAkweDAwMDAwMDAwCisjZGVmaW5lIFRTXzE2CTB4MDAwMDAwMDgKKyNkZWZpbmUgVFNfMzIJMHgwMDAwMDAxMAorI2RlZmluZSBUU18xNkJMSwkweDAwMDAwMDE4CisjZGVmaW5lIFRTXzMyQkxLCTB4MDAxMDAwMDAKKworLyoKKyAqIFRoZSBTdXBlckggRE1BQyBzdXBwb3J0cyBhIG51bWJlciBvZiB0cmFuc21pdCBzaXplcywgd2UgbGlzdCB0aGVtIGhlcmUsCisgKiB3aXRoIHRoZWlyIHJlc3BlY3RpdmUgdmFsdWVzIGFzIHRoZXkgYXBwZWFyIGluIHRoZSBDSENSIHJlZ2lzdGVycy4KKyAqCisgKiBEZWZhdWx0cyB0byBhIDY0LWJpdCB0cmFuc2ZlciBzaXplLgorICovCitlbnVtIHsKKwlYTUlUX1NaXzhCSVQsCisJWE1JVF9TWl8xNkJJVCwKKwlYTUlUX1NaXzMyQklULAorCVhNSVRfU1pfMTI4QklULAorCVhNSVRfU1pfMjU2QklULAorfTsKKworLyoKKyAqIFRoZSBETUEgY291bnQgaXMgZGVmaW5lZCBhcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHRyYW5zZmVyLgorICovCitzdGF0aWMgdW5zaWduZWQgaW50IHRzX3NoaWZ0W10gX19tYXliZV91bnVzZWQgPSB7CisJW1hNSVRfU1pfOEJJVF0JCT0gMCwKKwlbWE1JVF9TWl8xNkJJVF0JCT0gMSwKKwlbWE1JVF9TWl8zMkJJVF0JCT0gMiwKKwlbWE1JVF9TWl8xMjhCSVRdCT0gNCwKKwlbWE1JVF9TWl8yNTZCSVRdCT0gNSwKK307CisKKyNlbmRpZiAvKiBfX0FTTV9TSF9DUFVfU0g0X0RNQV9TSDc3ODBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L2RtYS1zaDc3ODAuaCBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9kbWEtc2g3NzgwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxYjQyNmEuLjAwMDAwMDAKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L2RtYS1zaDc3ODAuaAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLSNpZm5kZWYgX19BU01fU0hfQ1BVX1NINF9ETUFfU0g3NzgwX0gKLSNkZWZpbmUgX19BU01fU0hfQ1BVX1NINF9ETUFfU0g3NzgwX0gKLQotI2RlZmluZSBSRVFfSEUJMHgwMDAwMDBDMAotI2RlZmluZSBSRVFfSAkweDAwMDAwMDgwCi0jZGVmaW5lIFJFUV9MRQkweDAwMDAwMDQwCi0jZGVmaW5lIFRNX0JVUlNUIDB4MDAwMDAyMAotI2RlZmluZSBUU184CTB4MDAwMDAwMDAKLSNkZWZpbmUgVFNfMTYJMHgwMDAwMDAwOAotI2RlZmluZSBUU18zMgkweDAwMDAwMDEwCi0jZGVmaW5lIFRTXzE2QkxLCTB4MDAwMDAwMTgKLSNkZWZpbmUgVFNfMzJCTEsJMHgwMDEwMDAwMAotCi0vKgotICogVGhlIFN1cGVySCBETUFDIHN1cHBvcnRzIGEgbnVtYmVyIG9mIHRyYW5zbWl0IHNpemVzLCB3ZSBsaXN0IHRoZW0gaGVyZSwKLSAqIHdpdGggdGhlaXIgcmVzcGVjdGl2ZSB2YWx1ZXMgYXMgdGhleSBhcHBlYXIgaW4gdGhlIENIQ1IgcmVnaXN0ZXJzLgotICoKLSAqIERlZmF1bHRzIHRvIGEgNjQtYml0IHRyYW5zZmVyIHNpemUuCi0gKi8KLWVudW0gewotCVhNSVRfU1pfOEJJVCwKLQlYTUlUX1NaXzE2QklULAotCVhNSVRfU1pfMzJCSVQsCi0JWE1JVF9TWl8xMjhCSVQsCi0JWE1JVF9TWl8yNTZCSVQsCi19OwotCi0vKgotICogVGhlIERNQSBjb3VudCBpcyBkZWZpbmVkIGFzIHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gdHJhbnNmZXIuCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgdHNfc2hpZnRbXSBfX21heWJlX3VudXNlZCA9IHsKLQlbWE1JVF9TWl84QklUXQkJPSAwLAotCVtYTUlUX1NaXzE2QklUXQkJPSAxLAotCVtYTUlUX1NaXzMyQklUXQkJPSAyLAotCVtYTUlUX1NaXzEyOEJJVF0JPSA0LAotCVtYTUlUX1NaXzI1NkJJVF0JPSA1LAotfTsKLQotI2VuZGlmIC8qIF9fQVNNX1NIX0NQVV9TSDRfRE1BX1NINzc4MF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvZG1hLmggYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvZG1hLmgKaW5kZXggMjM1YjdjZC4uYmNiMzAyNCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L2RtYS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9kbWEuaApAQCAtMSwzMSArMSwyOSBAQAogI2lmbmRlZiBfX0FTTV9DUFVfU0g0X0RNQV9ICiAjZGVmaW5lIF9fQVNNX0NQVV9TSDRfRE1BX0gKIAotI2RlZmluZSBETUFPUl9JTklUCSggMHg4MDAwIHwgRE1BT1JfRE1FICkKLQogLyogU0g3NzUxLzc3NjAvNzc4MCBETUEgSVJRIHNvdXJjZXMgKi8KLSNkZWZpbmUgRE1URTBfSVJRCTM0Ci0jZGVmaW5lIERNVEUxX0lSUQkzNQotI2RlZmluZSBETVRFMl9JUlEJMzYKLSNkZWZpbmUgRE1URTNfSVJRCTM3Ci0jZGVmaW5lIERNVEU0X0lSUQk0NAotI2RlZmluZSBETVRFNV9JUlEJNDUKLSNkZWZpbmUgRE1URTZfSVJRCTQ2Ci0jZGVmaW5lIERNVEU3X0lSUQk0NwotI2RlZmluZSBETUFFX0lSUQkzOAogCiAjaWZkZWYgQ09ORklHX0NQVV9TSDRBCi0jZGVmaW5lIFNIX0RNQUNfQkFTRQkweGZjODA4MDIwCiAKKyNkZWZpbmUgRE1BT1JfSU5JVAkoRE1BT1JfRE1FKQogI2RlZmluZSBDSENSX1RTX01BU0sJMHgxOAogI2RlZmluZSBDSENSX1RTX1NISUZUCTMKIAotI2luY2x1ZGUgPGNwdS9kbWEtc2g3NzgwLmg+Ci0jZWxzZQotI2RlZmluZSBTSF9ETUFDX0JBU0UJMHhmZmEwMDAwMAorI2luY2x1ZGUgPGNwdS9kbWEtc2g0YS5oPgorI2Vsc2UgLyogQ09ORklHX0NQVV9TSDRBICovCisvKgorICogU0g3NzUwL1NINzc1MS9TSDc3NjAKKyAqLworI2RlZmluZSBETVRFMF9JUlEJMzQKKyNkZWZpbmUgRE1URTRfSVJRCTQ0CisjZGVmaW5lIERNVEU2X0lSUQk0NgorI2RlZmluZSBETUFFMF9JUlEJMzgKIAorI2RlZmluZSBETUFPUl9JTklUCSgweDgwMDB8RE1BT1JfRE1FKQorI2RlZmluZSBTSF9ETUFDX0JBU0UwCTB4ZmZhMDAwMDAKKyNkZWZpbmUgU0hfRE1BQ19CQVNFMQkweGZmYTAwMDcwCiAvKiBEZWZpbml0aW9ucyBmb3IgdGhlIFN1cGVySCBETUFDICovCi0jZGVmaW5lIFRNX0JVUlNUCTB4MDAwMDA4MAorI2RlZmluZSBUTV9CVVJTVAkweDAwMDAwMDgwCiAjZGVmaW5lIFRTXzgJCTB4MDAwMDAwMTAKICNkZWZpbmUgVFNfMTYJCTB4MDAwMDAwMjAKICNkZWZpbmUgVFNfMzIJCTB4MDAwMDAwMzAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9mcmVxLmggYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvZnJlcS5oCmluZGV4IGMyM2FmODEuLjc0OWQxYzQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9mcmVxLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L2ZyZXEuaApAQCAtMjksNiArMjksMTAgQEAKICNkZWZpbmUgRlJRQ1IwCQkJMHhmZmM4MDAwMAogI2RlZmluZSBGUlFDUjEJCQkweGZmYzgwMDA0CiAjZGVmaW5lIEZSUU1SMQkJCTB4ZmZjODAwMTQKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NikKKyNkZWZpbmUgRlJRQ1IwCQkJMHhmZmM0MDAwMAorI2RlZmluZSBGUlFDUjEJCQkweGZmYzQwMDA0CisjZGVmaW5lIEZSUU1SMQkJCTB4ZmZjNDAwMTQKICNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NIWDMpCiAjZGVmaW5lIEZSUUNSCQkJMHhmZmMwMDAxNAogI2Vsc2UKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9tbXVfY29udGV4dC5oIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L21tdV9jb250ZXh0LmgKaW5kZXggOWVhOGViMi4uM2NlN2VmNiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L21tdV9jb250ZXh0LmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L21tdV9jb250ZXh0LmgKQEAgLTE0LDI4ICsxNCwzNSBAQAogI2RlZmluZSBNTVVfUFRFTAkweEZGMDAwMDA0CS8qIFBhZ2UgdGFibGUgZW50cnkgcmVnaXN0ZXIgTE9XICovCiAjZGVmaW5lIE1NVV9UVEIJCTB4RkYwMDAwMDgJLyogVHJhbnNsYXRpb24gdGFibGUgYmFzZSByZWdpc3RlciAqLwogI2RlZmluZSBNTVVfVEVBCQkweEZGMDAwMDBDCS8qIFRMQiBFeGNlcHRpb24gQWRkcmVzcyAqLwotI2RlZmluZSBNTVVfUFRFQQkweEZGMDAwMDM0CS8qIFBhZ2UgdGFibGUgZW50cnkgYXNzaXN0YW5jZSByZWdpc3RlciAqLworI2RlZmluZSBNTVVfUFRFQQkweEZGMDAwMDM0CS8qIFBURSBhc3Npc3RhbmNlIHJlZ2lzdGVyICovCisjZGVmaW5lIE1NVV9QVEVBRVgJMHhGRjAwMDA3QwkvKiBQVEUgQVNJRCBleHRlbnNpb24gcmVnaXN0ZXIgKi8KIAogI2RlZmluZSBNTVVDUgkJMHhGRjAwMDAxMAkvKiBNTVUgQ29udHJvbCBSZWdpc3RlciAqLwogCi0jZGVmaW5lIE1NVV9JVExCX0FERFJFU1NfQVJSQVkJMHhGMjAwMDAwMAogI2RlZmluZSBNTVVfVVRMQl9BRERSRVNTX0FSUkFZCTB4RjYwMDAwMDAKKyNkZWZpbmUgTU1VX1VUTEJfQUREUkVTU19BUlJBWTIJMHhGNjgwMDAwMAogI2RlZmluZSBNTVVfUEFHRV9BU1NPQ19CSVQJMHg4MAogCiAjZGVmaW5lIE1NVUNSX1RJCQkoMTw8MikKIAotI2lmZGVmIENPTkZJR19YMlRMQgotI2RlZmluZSBNTVVDUl9NRQkJKDEgPDwgNykKLSNlbHNlCi0jZGVmaW5lIE1NVUNSX01FCQkoMCkKLSNlbmRpZgotCiAjaWYgZGVmaW5lZChDT05GSUdfMzJCSVQpICYmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NUNDApCiAjZGVmaW5lIE1NVUNSX1NFCQkoMSA8PCA0KQogI2Vsc2UKICNkZWZpbmUgTU1VQ1JfU0UJCSgwKQogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfQ1BVX0hBU19QVEVBRVgKKyNkZWZpbmUgTU1VQ1JfQUVYCQkoMSA8PCA2KQorI2Vsc2UKKyNkZWZpbmUgTU1VQ1JfQUVYCQkoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1gyVExCCisjZGVmaW5lIE1NVUNSX01FCQkoMSA8PCA3KQorI2Vsc2UKKyNkZWZpbmUgTU1VQ1JfTUUJCSgwKQorI2VuZGlmCisKICNpZmRlZiBDT05GSUdfU0hfU1RPUkVfUVVFVUVTCiAjZGVmaW5lIE1NVUNSX1NRTUQJCSgxIDw8IDkpCiAjZWxzZQpAQCAtNDMsMTcgKzUwLDcgQEAKICNlbmRpZgogCiAjZGVmaW5lIE1NVV9OVExCX0VOVFJJRVMJNjQKLSNkZWZpbmUgTU1VX0NPTlRST0xfSU5JVAkoMHgwNXxNTVVDUl9TUU1EfE1NVUNSX01FfE1NVUNSX1NFKQotCi0jZGVmaW5lIE1NVV9JVExCX0RBVEFfQVJSQVkJMHhGMzAwMDAwMAotI2RlZmluZSBNTVVfVVRMQl9EQVRBX0FSUkFZCTB4RjcwMDAwMDAKLQotI2RlZmluZSBNTVVfVVRMQl9FTlRSSUVTCSAgIDY0Ci0jZGVmaW5lIE1NVV9VX0VOVFJZX1NISUZUCSAgICA4Ci0jZGVmaW5lIE1NVV9VVExCX1ZBTElECQkweDEwMAotI2RlZmluZSBNTVVfSVRMQl9FTlRSSUVTCSAgICA0Ci0jZGVmaW5lIE1NVV9JX0VOVFJZX1NISUZUCSAgICA4Ci0jZGVmaW5lIE1NVV9JVExCX1ZBTElECQkweDEwMAorI2RlZmluZSBNTVVfQ09OVFJPTF9JTklUCSgweDA1fE1NVUNSX1NRTUR8TU1VQ1JfTUV8TU1VQ1JfU0V8TU1VQ1JfQUVYKQogCiAjZGVmaW5lIFRSQQkweGZmMDAwMDIwCiAjZGVmaW5lIEVYUEVWVAkweGZmMDAwMDI0CmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvc2g3Nzg2LmggYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvc2g3Nzg2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDg2ODhhZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9zaDc3ODYuaApAQCAtMCwwICsxLDE5MiBAQAorLyoKKyAqIFNINzc4NiBQaW5tdXgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgIFJlbmVzYXMgU29sdXRpb25zIENvcnAuCisgKiBLdW5pbm9yaSBNb3JpbW90byA8bW9yaW1vdG8ua3VuaW5vcmlAcmVuZXNhcy5jb20+CisgKgorICogIEJhc2VkIG9uIHNoNzc4NS5oCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0NQVV9TSDc3ODZfSF9fCisjZGVmaW5lIF9fQ1BVX1NINzc4Nl9IX18KKworZW51bSB7CisJLyogUEEgKi8KKwlHUElPX1BBNywgR1BJT19QQTYsIEdQSU9fUEE1LCBHUElPX1BBNCwKKwlHUElPX1BBMywgR1BJT19QQTIsIEdQSU9fUEExLCBHUElPX1BBMCwKKworCS8qIFBCICovCisJR1BJT19QQjcsIEdQSU9fUEI2LCBHUElPX1BCNSwgR1BJT19QQjQsCisJR1BJT19QQjMsIEdQSU9fUEIyLCBHUElPX1BCMSwgR1BJT19QQjAsCisKKwkvKiBQQyAqLworCUdQSU9fUEM3LCBHUElPX1BDNiwgR1BJT19QQzUsIEdQSU9fUEM0LAorCUdQSU9fUEMzLCBHUElPX1BDMiwgR1BJT19QQzEsIEdQSU9fUEMwLAorCisJLyogUEQgKi8KKwlHUElPX1BENywgR1BJT19QRDYsIEdQSU9fUEQ1LCBHUElPX1BENCwKKwlHUElPX1BEMywgR1BJT19QRDIsIEdQSU9fUEQxLCBHUElPX1BEMCwKKworCS8qIFBFICovCisJR1BJT19QRTUsIEdQSU9fUEU0LCBHUElPX1BFMywgR1BJT19QRTIsCisJR1BJT19QRTEsIEdQSU9fUEUwLAorCisJLyogUEYgKi8KKwlHUElPX1BGNywgR1BJT19QRjYsIEdQSU9fUEY1LCBHUElPX1BGNCwKKwlHUElPX1BGMywgR1BJT19QRjIsIEdQSU9fUEYxLCBHUElPX1BGMCwKKworCS8qIFBHICovCisJR1BJT19QRzcsIEdQSU9fUEc2LCBHUElPX1BHNSwgR1BJT19QRzQsCisJR1BJT19QRzMsIEdQSU9fUEcyLCBHUElPX1BHMSwgR1BJT19QRzAsCisKKwkvKiBQSCAqLworCUdQSU9fUEg3LCBHUElPX1BINiwgR1BJT19QSDUsIEdQSU9fUEg0LAorCUdQSU9fUEgzLCBHUElPX1BIMiwgR1BJT19QSDEsIEdQSU9fUEgwLAorCisJLyogUEogKi8KKwlHUElPX1BKNywgR1BJT19QSjYsIEdQSU9fUEo1LCBHUElPX1BKNCwKKwlHUElPX1BKMywgR1BJT19QSjIsIEdQSU9fUEoxLCBHUElPX1BKMCwKKworCUdQSU9fRk5fQ0RFLAorCUdQSU9fRk5fRVRIX01BR0lDLAorCUdQSU9fRk5fRElTUCwKKwlHUElPX0ZOX0VUSF9MSU5LLAorCUdQSU9fRk5fRFI1LAorCUdQSU9fRk5fRVRIX1RYX0VSLAorCUdQSU9fRk5fRFI0LAorCUdQSU9fRk5fRVRIX1RYX0VOLAorCUdQSU9fRk5fRFIzLAorCUdQSU9fRk5fRVRIX1RYRDMsCisJR1BJT19GTl9EUjIsCisJR1BJT19GTl9FVEhfVFhEMiwKKwlHUElPX0ZOX0RSMSwKKwlHUElPX0ZOX0VUSF9UWEQxLAorCUdQSU9fRk5fRFIwLAorCUdQSU9fRk5fRVRIX1RYRDAsCisJR1BJT19GTl9WU1lOQywKKwlHUElPX0ZOX0hTUElfQ0xLLAorCUdQSU9fRk5fT0RERiwKKwlHUElPX0ZOX0hTUElfQ1MsCisJR1BJT19GTl9ERzUsCisJR1BJT19GTl9FVEhfTURJTywKKwlHUElPX0ZOX0RHNCwKKwlHUElPX0ZOX0VUSF9SWF9DTEssCisJR1BJT19GTl9ERzMsCisJR1BJT19GTl9FVEhfTURDLAorCUdQSU9fRk5fREcyLAorCUdQSU9fRk5fRVRIX0NPTCwKKwlHUElPX0ZOX0RHMSwKKwlHUElPX0ZOX0VUSF9UWF9DTEssCisJR1BJT19GTl9ERzAsCisJR1BJT19GTl9FVEhfQ1JTLAorCUdQSU9fRk5fRENMS0lOLAorCUdQSU9fRk5fSFNQSV9SWCwKKwlHUElPX0ZOX0hTWU5DLAorCUdQSU9fRk5fSFNQSV9UWCwKKwlHUElPX0ZOX0RCNSwKKwlHUElPX0ZOX0VUSF9SWEQzLAorCUdQSU9fRk5fREI0LAorCUdQSU9fRk5fRVRIX1JYRDIsCisJR1BJT19GTl9EQjMsCisJR1BJT19GTl9FVEhfUlhEMSwKKwlHUElPX0ZOX0RCMiwKKwlHUElPX0ZOX0VUSF9SWEQwLAorCUdQSU9fRk5fREIxLAorCUdQSU9fRk5fRVRIX1JYX0RWLAorCUdQSU9fRk5fREIwLAorCUdQSU9fRk5fRVRIX1JYX0VSLAorCUdQSU9fRk5fRENMS09VVCwKKwlHUElPX0ZOX1NDSUYxX1NMSywKKwlHUElPX0ZOX1NDSUYxX1JYRCwKKwlHUElPX0ZOX1NDSUYxX1RYRCwKKwlHUElPX0ZOX0RBQ0sxLAorCUdQSU9fRk5fQkFDSywKKwlHUElPX0ZOX0ZBTEUsCisJR1BJT19GTl9EQUNLMCwKKwlHUElPX0ZOX0ZDTEUsCisJR1BJT19GTl9EUkVRMSwKKwlHUElPX0ZOX0JSRVEsCisJR1BJT19GTl9VU0JfT1ZDMSwKKwlHUElPX0ZOX0RSRVEwLAorCUdQSU9fRk5fVVNCX09WQzAsCisJR1BJT19GTl9VU0JfUEVOQzEsCisJR1BJT19GTl9VU0JfUEVOQzAsCisJR1BJT19GTl9IQUMxX1NET1VULAorCUdQSU9fRk5fU1NJMV9TREFUQSwKKwlHUElPX0ZOX1NESUYxQ01ELAorCUdQSU9fRk5fSEFDMV9TRElOLAorCUdQSU9fRk5fU1NJMV9TQ0ssCisJR1BJT19GTl9TRElGMUNELAorCUdQSU9fRk5fSEFDMV9TWU5DLAorCUdQSU9fRk5fU1NJMV9XUywKKwlHUElPX0ZOX1NESUYxV1AsCisJR1BJT19GTl9IQUMxX0JJVENMSywKKwlHUElPX0ZOX1NTSTFfQ0xLLAorCUdQSU9fRk5fU0RJRjFDTEssCisJR1BJT19GTl9IQUMwX1NET1VULAorCUdQSU9fRk5fU1NJMF9TREFUQSwKKwlHUElPX0ZOX1NESUYxRDMsCisJR1BJT19GTl9IQUMwX1NESU4sCisJR1BJT19GTl9TU0kwX1NDSywKKwlHUElPX0ZOX1NESUYxRDIsCisJR1BJT19GTl9IQUMwX1NZTkMsCisJR1BJT19GTl9TU0kwX1dTLAorCUdQSU9fRk5fU0RJRjFEMSwKKwlHUElPX0ZOX0hBQzBfQklUQ0xLLAorCUdQSU9fRk5fU1NJMF9DTEssCisJR1BJT19GTl9TRElGMUQwLAorCUdQSU9fRk5fU0NJRjNfU0NLLAorCUdQSU9fRk5fU1NJMl9TREFUQSwKKwlHUElPX0ZOX1NDSUYzX1JYRCwKKwlHUElPX0ZOX1RDTEssCisJR1BJT19GTl9TU0kyX1NDSywKKwlHUElPX0ZOX1NDSUYzX1RYRCwKKwlHUElPX0ZOX0hBQ19SRVMsCisJR1BJT19GTl9TU0kyX1dTLAorCUdQSU9fRk5fREFDSzMsCisJR1BJT19GTl9TRElGMENNRCwKKwlHUElPX0ZOX0RBQ0syLAorCUdQSU9fRk5fU0RJRjBDRCwKKwlHUElPX0ZOX0RSRVEzLAorCUdQSU9fRk5fU0RJRjBXUCwKKwlHUElPX0ZOX1NDSUYwX0NUUywKKwlHUElPX0ZOX0RSRVEyLAorCUdQSU9fRk5fU0RJRjBDTEssCisJR1BJT19GTl9TQ0lGMF9SVFMsCisJR1BJT19GTl9JUkw3LAorCUdQSU9fRk5fU0RJRjBEMywKKwlHUElPX0ZOX1NDSUYwX1NDSywKKwlHUElPX0ZOX0lSTDYsCisJR1BJT19GTl9TRElGMEQyLAorCUdQSU9fRk5fU0NJRjBfUlhELAorCUdQSU9fRk5fSVJMNSwKKwlHUElPX0ZOX1NESUYwRDEsCisJR1BJT19GTl9TQ0lGMF9UWEQsCisJR1BJT19GTl9JUkw0LAorCUdQSU9fRk5fU0RJRjBEMCwKKwlHUElPX0ZOX1NDSUY1X1NDSywKKwlHUElPX0ZOX0ZSQiwKKwlHUElPX0ZOX1NDSUY1X1JYRCwKKwlHUElPX0ZOX0lPSVMxNiwKKwlHUElPX0ZOX1NDSUY1X1RYRCwKKwlHUElPX0ZOX0NFMkIsCisJR1BJT19GTl9EUkFLMywKKwlHUElPX0ZOX0NFMkEsCisJR1BJT19GTl9TQ0lGNF9TQ0ssCisJR1BJT19GTl9EUkFLMiwKKwlHUElPX0ZOX1NTSTNfV1MsCisJR1BJT19GTl9TQ0lGNF9SWEQsCisJR1BJT19GTl9EUkFLMSwKKwlHUElPX0ZOX1NTSTNfU0RBVEEsCisJR1BJT19GTl9GU1RBVFVTLAorCUdQSU9fRk5fU0NJRjRfVFhELAorCUdQSU9fRk5fRFJBSzAsCisJR1BJT19GTl9TU0kzX1NDSywKKwlHUElPX0ZOX0ZTRSwKK307CisKKyNlbmRpZiAvKiBfX0NQVV9TSDc3ODZfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvbWFjaC1jb21tb24vbWFjaC91cnF1ZWxsLmggYi9hcmNoL3NoL2luY2x1ZGUvbWFjaC1jb21tb24vbWFjaC91cnF1ZWxsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRiM2UxZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9tYWNoLWNvbW1vbi9tYWNoL3VycXVlbGwuaApAQCAtMCwwICsxLDY4IEBACisjaWZuZGVmIF9fTUFDSF9VUlFVRUxMX0gKKyNkZWZpbmUgX19NQUNIX1VSUVVFTExfSAorCisvKgorICogLS0tLS0tIDB4MDAwMDAwMDAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgQ1MwIHwgKFNXMSxTVzQ3KSAgICBFRVBST00sIFNSQU0sIE5PUiBGTEFTSAorICogLS0tLS0rIDB4MDQwMDAwMDAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgQ1MxIHwgKFNXNDcpICAgICAgICBTUkFNLCBTUkFNLUxBTi1QQ01DSUEsIE5PUiBGTEFTSAorICogLS0tLS0rIDB4MDgwMDAwMDAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgQ1MyIHwgICAgICAgICAgICAgICBERFIzCisgKiAgQ1MzIHwKKyAqIC0tLS0tKyAweDEwMDAwMDAwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIENTNCB8ICAgICAgICAgICAgICAgUENJZQorICogLS0tLS0rIDB4MTQwMDAwMDAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgQ1M1IHwgKFNXNDcpICAgICAgICBMUkFNL1VSQU0sIFNSQU0tTEFOLVBDTUNJQQorICogLS0tLS0rIDB4MTgwMDAwMDAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgQ1M2IHwgICAgICAgICAgICAgICBBVEEsIE5BTkQgRkxBU0gKKyAqIC0tLS0tKyAweDFjMDAwMDAwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIENTNyB8ICAgICAgICAgICAgICAgU0g3Nzg2IHJlZ2lzdGVyCisgKiAtLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjZGVmaW5lIE5PUl9GTEFTSF9BRERSCTB4MDAwMDAwMDAKKyNkZWZpbmUgTk9SX0ZMQVNIX1NJWkUJMHgwNDAwMDAwMAorCisjZGVmaW5lIENTMV9CQVNFCTB4MDUwMDAwMDAKKyNkZWZpbmUgQ1M1X0JBU0UJMHgxNTAwMDAwMAorI2RlZmluZSBGUEdBX0JBU0UJQ1MxX0JBU0UKKworI2RlZmluZSBCT0FSRFJFRyhvZnMpCShGUEdBX0JBU0UgKyBvZnMjI19PRlMpCisjZGVmaW5lIFVCT0FSRFJFRyhvZnMpCSgweGEwMDAwMDAwICsgRlBHQV9CQVNFICsgb2ZzIyNfT0ZTKQorCisjZGVmaW5lIFNSU1RSX09GUwkweDAwMDAgLyogU3lzdGVtIHJlc2V0IHJlZ2lzdGVyICovCisjZGVmaW5lIEJETVJfT0ZTCTB4MDAxMCAvKiBCb2FyZCBvcGVyYXRpbmcgbW9kZSByZXNpc3RlciAqLworI2RlZmluZSBJUkwwU1JfT0ZTCTB4MDAyMCAvKiBJUkwwIFN0YXR1cyByZWdpc3RlciAqLworI2RlZmluZSBJUkwwTVNLUl9PRlMJMHgwMDMwIC8qIElSTDAgTWFzayByZWdpc3RlciAqLworI2RlZmluZSBJUkwxU1JfT0ZTCTB4MDA0MCAvKiBJUkwxIFN0YXR1cyByZWdpc3RlciAqLworI2RlZmluZSBJUkwxTVNLUl9PRlMJMHgwMDUwIC8qIElSTDEgTWFzayByZWdpc3RlciAqLworI2RlZmluZSBJUkwyU1JfT0ZTCTB4MDA2MCAvKiBJUkwyIFN0YXR1cyByZWdpc3RlciAqLworI2RlZmluZSBJUkwyTVNLUl9PRlMJMHgwMDcwIC8qIElSTDIgTWFzayByZWdpc3RlciAqLworI2RlZmluZSBJUkwzU1JfT0ZTCTB4MDA4MCAvKiBJUkwzIFN0YXR1cyByZWdpc3RlciAqLworI2RlZmluZSBJUkwzTVNLUl9PRlMJMHgwMDkwIC8qIElSTDMgTWFzayByZWdpc3RlciAqLworI2RlZmluZSBTT0ZUSU5UUl9PRlMJMHgwMTIwIC8qIFNvZnR3ZWFyIEludGVycnVwdCByZWdpc3RlciAqLworI2RlZmluZSBTTEVEUl9PRlMJMHgwMTMwIC8qIExFRCBjb250cm9sIHJlc2lzdGVyICovCisjZGVmaW5lIE1BUFNDSUZTV1JfT0ZTCTB4MDE0MCAvKiBNYXAvU0NJRiBTd2l0Y2ggcmVnaXN0ZXIgKi8KKyNkZWZpbmUgRlBWRVJSX09GUwkweDAxNTAgLyogRlBHQSBWZXJzaW9uIHJlZ2lzdGVyICovCisjZGVmaW5lIEZQREFURVJfT0ZTCTB4MDE2MCAvKiBGUEdBIERhdGUgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgRlBZRUFSUl9PRlMJMHgwMTcwIC8qIEZQR0EgWWVhciByZWdpc3RlciAqLworI2RlZmluZSBUQ0xLQ1JfT0ZTCTB4MDE4MCAvKiBUQ0xLIENvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgRElQU1dNUl9PRlMJMHgxMDAwIC8qIERJUFNXIG1vbml0b3IgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgRlBPRFJfT0ZTCTB4MTAxMCAvKiBPdXRwdXQgcG9ydCBkYXRhIHJlZ2lzdGVyICovCisjZGVmaW5lIEFUQUNOUl9PRlMJMHgxMDIwIC8qIEFUQS1DTiBDb250cm9sL3N0YXR1cyByZWdpc3RlciAqLworI2RlZmluZSBGUElORFJfT0ZTCTB4MTAzMCAvKiBJbnB1dCBwb3J0IGRhdGEgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTURTV01SX09GUwkweDEwNDAgLyogTU9ERSBTVyBtb25pdG9yIHJlZ2lzdGVyICovCisjZGVmaW5lIEREUjNCVVBDUl9PRlMJMHgxMDUwIC8qIEREUjMgQmFja3VwIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1NJQ09ERUNDUl9PRlMJMHgxMDYwIC8qIFNTSS1DT0RFQyBjb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIFBDSUVTTE9UU1JfT0ZTCTB4MTA3MCAvKiBQQ0lleHByZXNzIFNsb3Qgc3RhdHVzIHJlZ2lzdGVyICovCisjZGVmaW5lIEVUSEVSUE9SVFNSX09GUwkweDEwODAgLyogRXRoZXJQaHkgUG9ydCBzdGF0dXMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTEFUQ0hDUl9PRlMJMHgzMDAwIC8qIExhdGNoIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTEFUQ1VBUl9PRlMJMHgzMDEwIC8qIExhdGNoIHVwcGVyIGFkZHJlc3MgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTEFUQ0xBUl9PRlMJMHgzMDEyIC8qIExhdGNoIGxvd2VyIGFkZHJlc3MgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTEFUQ0xVRFJfT0ZTCTB4MzAyNCAvKiBMYXRjaCBEMzEtMTYgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTEFUQ0xMRFJfT0ZTCTB4MzAyNiAvKiBMYXRjaCBEMTUtMCByZWdpc3RlciAqLworCisjZGVmaW5lIENIQVJMRURfT0ZTCTB4MjAwMCAvKiBDaGFyYWN0ZXIgTEVEICovCisKKyNlbmRpZiAgLyogX19NQUNIX1VSUVVFTExfSCAqLworCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9NYWtlZmlsZV8zMiBiL2FyY2gvc2gva2VybmVsL01ha2VmaWxlXzMyCmluZGV4IDJlMWI4NmUuLjgyYTNhMTUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL01ha2VmaWxlXzMyCisrKyBiL2FyY2gvc2gva2VybmVsL01ha2VmaWxlXzMyCkBAIC0zMCw1ICszMCw2IEBACiBvYmotJChDT05GSUdfR0VORVJJQ19HUElPKQkrPSBncGlvLm8KIG9iai0kKENPTkZJR19EWU5BTUlDX0ZUUkFDRSkJKz0gZnRyYWNlLm8KIG9iai0kKENPTkZJR19EVU1QX0NPREUpCQkrPSBkaXNhc3NlbWJsZS5vCitvYmotJChDT05GSUdfSElCRVJOQVRJT04pCSs9IHN3c3VzcC5vCiAKIEVYVFJBX0NGTEFHUyArPSAtV2Vycm9yCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9hc20tb2Zmc2V0cy5jIGIvYXJjaC9zaC9rZXJuZWwvYXNtLW9mZnNldHMuYwppbmRleCA1N2NmMGUwLi45OWFjZWIyOCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvYXNtLW9mZnNldHMuYworKysgYi9hcmNoL3NoL2tlcm5lbC9hc20tb2Zmc2V0cy5jCkBAIC0xMiw4ICsxMiwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9rYnVpbGQuaD4KKyNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CiAKICNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KKyNpbmNsdWRlIDxhc20vc3VzcGVuZC5oPgogCiBpbnQgbWFpbih2b2lkKQogewpAQCAtMjUsNSArMjcsMTEgQEAKIAlERUZJTkUoVElfUFJFX0NPVU5ULAlvZmZzZXRvZihzdHJ1Y3QgdGhyZWFkX2luZm8sIHByZWVtcHRfY291bnQpKTsKIAlERUZJTkUoVElfUkVTVEFSVF9CTE9DSyxvZmZzZXRvZihzdHJ1Y3QgdGhyZWFkX2luZm8sIHJlc3RhcnRfYmxvY2spKTsKIAorI2lmZGVmIENPTkZJR19ISUJFUk5BVElPTgorCURFRklORShQQkVfQUREUkVTUywgb2Zmc2V0b2Yoc3RydWN0IHBiZSwgYWRkcmVzcykpOworCURFRklORShQQkVfT1JJR19BRERSRVNTLCBvZmZzZXRvZihzdHJ1Y3QgcGJlLCBvcmlnX2FkZHJlc3MpKTsKKwlERUZJTkUoUEJFX05FWFQsIG9mZnNldG9mKHN0cnVjdCBwYmUsIG5leHQpKTsKKwlERUZJTkUoU1dTVVNQX0FSQ0hfUkVHU19TSVpFLCBzaXplb2Yoc3RydWN0IHN3c3VzcF9hcmNoX3JlZ3MpKTsKKyNlbmRpZgogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L01ha2VmaWxlIGIvYXJjaC9zaC9rZXJuZWwvY3B1L01ha2VmaWxlCmluZGV4IGY0NzFkMjQuLjI2MDA2NDEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9NYWtlZmlsZQorKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvTWFrZWZpbGUKQEAgLTExLDYgKzExLDcgQEAKICMgU3BlY2lhbCBjYXNlcyBmb3IgZmFtaWx5IGFuY2VzdHJ5LgogCiBvYmotJChDT05GSUdfQ1BVX1NINEEpCQkrPSBzaDRhLworb2JqLSQoQ09ORklHX0FSQ0hfU0hNT0JJTEUpCSs9IHNobW9iaWxlLwogCiAjIENvbW1vbiBpbnRlcmZhY2VzLgogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvY2xvY2suYyBiL2FyY2gvc2gva2VybmVsL2NwdS9jbG9jay5jCmluZGV4IDdiMTcxMzcuLjFkYzg5NjQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9jbG9jay5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9jbG9jay5jCkBAIC0yMCw2ICsyMCw4IEBACiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgva3JlZi5oPgorI2luY2x1ZGUgPGxpbnV4L2tvYmplY3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgpAQCAtMjM5LDYgKzI0MSwzNSBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoY2xrX3JlY2FsY19yYXRlKTsKIAoraW50IGNsa19zZXRfcGFyZW50KHN0cnVjdCBjbGsgKmNsaywgc3RydWN0IGNsayAqcGFyZW50KQoreworCWludCByZXQgPSAtRUlOVkFMOworCXN0cnVjdCBjbGsgKm9sZDsKKworCWlmICghcGFyZW50IHx8ICFjbGspCisJCXJldHVybiByZXQ7CisKKwlvbGQgPSBjbGstPnBhcmVudDsKKwlpZiAobGlrZWx5KGNsay0+b3BzICYmIGNsay0+b3BzLT5zZXRfcGFyZW50KSkgeworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tfbG9jaywgZmxhZ3MpOworCQlyZXQgPSBjbGstPm9wcy0+c2V0X3BhcmVudChjbGssIHBhcmVudCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2NrX2xvY2ssIGZsYWdzKTsKKwkJY2xrLT5wYXJlbnQgPSAocmV0ID8gb2xkIDogcGFyZW50KTsKKwl9CisKKwlpZiAodW5saWtlbHkoY2xrLT5mbGFncyAmIENMS19SQVRFX1BST1BBR0FURVMpKQorCQlwcm9wYWdhdGVfcmF0ZShjbGspOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChjbGtfc2V0X3BhcmVudCk7CisKK3N0cnVjdCBjbGsgKmNsa19nZXRfcGFyZW50KHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gY2xrLT5wYXJlbnQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChjbGtfZ2V0X3BhcmVudCk7CisKIGxvbmcgY2xrX3JvdW5kX3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCiB7CiAJaWYgKGxpa2VseShjbGstPm9wcyAmJiBjbGstPm9wcy0+cm91bmRfcmF0ZSkpIHsKQEAgLTMyOSw2ICszNjAsNzAgQEAKIAlyZXR1cm4gcCAtIGJ1ZjsKIH0KIAorI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBjbGtzX3N5c2Rldl9zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdGF0aWMgcG1fbWVzc2FnZV90IHByZXZfc3RhdGU7CisJc3RydWN0IGNsayAqY2xrcDsKKworCXN3aXRjaCAoc3RhdGUuZXZlbnQpIHsKKwljYXNlIFBNX0VWRU5UX09OOgorCQkvKiBSZXN1bWVpbmcgZnJvbSBoaWJlcm5hdGlvbiAqLworCQlpZiAocHJldl9zdGF0ZS5ldmVudCA9PSBQTV9FVkVOVF9GUkVFWkUpIHsKKwkJCWxpc3RfZm9yX2VhY2hfZW50cnkoY2xrcCwgJmNsb2NrX2xpc3QsIG5vZGUpCisJCQkJaWYgKGxpa2VseShjbGtwLT5vcHMpKSB7CisJCQkJCXVuc2lnbmVkIGxvbmcgcmF0ZSA9IGNsa3AtPnJhdGU7CisKKwkJCQkJaWYgKGxpa2VseShjbGtwLT5vcHMtPnNldF9wYXJlbnQpKQorCQkJCQkJY2xrcC0+b3BzLT5zZXRfcGFyZW50KGNsa3AsCisJCQkJCQkJY2xrcC0+cGFyZW50KTsKKwkJCQkJaWYgKGxpa2VseShjbGtwLT5vcHMtPnNldF9yYXRlKSkKKwkJCQkJCWNsa3AtPm9wcy0+c2V0X3JhdGUoY2xrcCwKKwkJCQkJCQlyYXRlLCBOT19DSEFOR0UpOworCQkJCQllbHNlIGlmIChsaWtlbHkoY2xrcC0+b3BzLT5yZWNhbGMpKQorCQkJCQkJY2xrcC0+b3BzLT5yZWNhbGMoY2xrcCk7CisJCQkJCX0KKwkJfQorCQlicmVhazsKKwljYXNlIFBNX0VWRU5UX0ZSRUVaRToKKwkJYnJlYWs7CisJY2FzZSBQTV9FVkVOVF9TVVNQRU5EOgorCQlicmVhazsKKwl9CisKKwlwcmV2X3N0YXRlID0gc3RhdGU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2xrc19zeXNkZXZfcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIGNsa3Nfc3lzZGV2X3N1c3BlbmQoZGV2LCBQTVNHX09OKTsKK30KKworc3RhdGljIHN0cnVjdCBzeXNkZXZfY2xhc3MgY2xrc19zeXNkZXZfY2xhc3MgPSB7CisJLm5hbWUgPSAiY2xrcyIsCit9OworCitzdGF0aWMgc3RydWN0IHN5c2Rldl9kcml2ZXIgY2xrc19zeXNkZXZfZHJpdmVyID0geworCS5zdXNwZW5kID0gY2xrc19zeXNkZXZfc3VzcGVuZCwKKwkucmVzdW1lID0gY2xrc19zeXNkZXZfcmVzdW1lLAorfTsKKworc3RhdGljIHN0cnVjdCBzeXNfZGV2aWNlIGNsa3Nfc3lzZGV2X2RldiA9IHsKKwkuY2xzID0gJmNsa3Nfc3lzZGV2X2NsYXNzLAorfTsKKworc3RhdGljIGludCBfX2luaXQgY2xrX3N5c2Rldl9pbml0KHZvaWQpCit7CisJc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZjbGtzX3N5c2Rldl9jbGFzcyk7CisJc3lzZGV2X2RyaXZlcl9yZWdpc3RlcigmY2xrc19zeXNkZXZfY2xhc3MsICZjbGtzX3N5c2Rldl9kcml2ZXIpOworCXN5c2Rldl9yZWdpc3RlcigmY2xrc19zeXNkZXZfZGV2KTsKKworCXJldHVybiAwOworfQorc3Vic3lzX2luaXRjYWxsKGNsa19zeXNkZXZfaW5pdCk7CisjZW5kaWYKKwogaW50IF9faW5pdCBjbGtfaW5pdCh2b2lkKQogewogCWludCBpLCByZXQgPSAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMi9zZXR1cC1zaDc2MTkuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDIvc2V0dXAtc2g3NjE5LmMKaW5kZXggNTZlNTg3OC4uMGUzMmQ4ZSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMi9zZXR1cC1zaDc2MTkuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyL3NldHVwLXNoNzYxOS5jCkBAIC0yLDYgKzIsNyBAQAogICogU0g3NjE5IFNldHVwCiAgKgogICogIENvcHlyaWdodCAoQykgMjAwNiAgWW9zaGlub3JpIFNhdG8KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgIFBhdWwgTXVuZHQKICAqCiAgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQpAQCAtMTgsMTUgKzE5LDEwIEBACiAJLyogaW50ZXJydXB0IHNvdXJjZXMgKi8KIAlJUlEwLCBJUlExLCBJUlEyLCBJUlEzLCBJUlE0LCBJUlE1LCBJUlE2LCBJUlE3LAogCVdEVCwgRURNQUMsIENNVDAsIENNVDEsCi0JU0NJRjBfRVJJLCBTQ0lGMF9SWEksIFNDSUYwX0JSSSwgU0NJRjBfVFhJLAotCVNDSUYxX0VSSSwgU0NJRjFfUlhJLCBTQ0lGMV9CUkksIFNDSUYxX1RYSSwKLQlTQ0lGMl9FUkksIFNDSUYyX1JYSSwgU0NJRjJfQlJJLCBTQ0lGMl9UWEksCisJU0NJRjAsIFNDSUYxLCBTQ0lGMiwKIAlISUZfSElGSSwgSElGX0hJRkJJLAogCURNQUMwLCBETUFDMSwgRE1BQzIsIERNQUMzLAogCVNJT0YsCi0KLQkvKiBpbnRlcnJ1cHQgZ3JvdXBzICovCi0JU0NJRjAsIFNDSUYxLCBTQ0lGMiwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaW50Y192ZWN0IHZlY3RvcnNbXSBfX2luaXRkYXRhID0gewpAQCAtMzYsMjQgKzMyLDE4IEBACiAJSU5UQ19JUlEoSVJRNiwgODIpLCBJTlRDX0lSUShJUlE3LCA4MyksCiAJSU5UQ19JUlEoV0RULCA4NCksIElOVENfSVJRKEVETUFDLCA4NSksCiAJSU5UQ19JUlEoQ01UMCwgODYpLCBJTlRDX0lSUShDTVQxLCA4NyksCi0JSU5UQ19JUlEoU0NJRjBfRVJJLCA4OCksIElOVENfSVJRKFNDSUYwX1JYSSwgODkpLAotCUlOVENfSVJRKFNDSUYwX0JSSSwgOTApLCBJTlRDX0lSUShTQ0lGMF9UWEksIDkxKSwKLQlJTlRDX0lSUShTQ0lGMV9FUkksIDkyKSwgSU5UQ19JUlEoU0NJRjFfUlhJLCA5MyksCi0JSU5UQ19JUlEoU0NJRjFfQlJJLCA5NCksIElOVENfSVJRKFNDSUYxX1RYSSwgOTUpLAotCUlOVENfSVJRKFNDSUYyX0VSSSwgOTYpLCBJTlRDX0lSUShTQ0lGMl9SWEksIDk3KSwKLQlJTlRDX0lSUShTQ0lGMl9CUkksIDk4KSwgSU5UQ19JUlEoU0NJRjJfVFhJLCA5OSksCisJSU5UQ19JUlEoU0NJRjAsIDg4KSwgSU5UQ19JUlEoU0NJRjAsIDg5KSwKKwlJTlRDX0lSUShTQ0lGMCwgOTApLCBJTlRDX0lSUShTQ0lGMCwgOTEpLAorCUlOVENfSVJRKFNDSUYxLCA5MiksIElOVENfSVJRKFNDSUYxLCA5MyksCisJSU5UQ19JUlEoU0NJRjEsIDk0KSwgSU5UQ19JUlEoU0NJRjEsIDk1KSwKKwlJTlRDX0lSUShTQ0lGMiwgOTYpLCBJTlRDX0lSUShTQ0lGMiwgOTcpLAorCUlOVENfSVJRKFNDSUYyLCA5OCksIElOVENfSVJRKFNDSUYyLCA5OSksCiAJSU5UQ19JUlEoSElGX0hJRkksIDEwMCksIElOVENfSVJRKEhJRl9ISUZCSSwgMTAxKSwKIAlJTlRDX0lSUShETUFDMCwgMTA0KSwgSU5UQ19JUlEoRE1BQzEsIDEwNSksCiAJSU5UQ19JUlEoRE1BQzIsIDEwNiksIElOVENfSVJRKERNQUMzLCAxMDcpLAogCUlOVENfSVJRKFNJT0YsIDEwOCksCiB9OwogCi1zdGF0aWMgc3RydWN0IGludGNfZ3JvdXAgZ3JvdXBzW10gX19pbml0ZGF0YSA9IHsKLQlJTlRDX0dST1VQKFNDSUYwLCBTQ0lGMF9FUkksIFNDSUYwX1JYSSwgU0NJRjBfQlJJLCBTQ0lGMF9UWEkpLAotCUlOVENfR1JPVVAoU0NJRjEsIFNDSUYxX0VSSSwgU0NJRjFfUlhJLCBTQ0lGMV9CUkksIFNDSUYxX1RYSSksCi0JSU5UQ19HUk9VUChTQ0lGMiwgU0NJRjJfRVJJLCBTQ0lGMl9SWEksIFNDSUYyX0JSSSwgU0NJRjJfVFhJKSwKLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgaW50Y19wcmlvX3JlZyBwcmlvX3JlZ2lzdGVyc1tdIF9faW5pdGRhdGEgPSB7CiAJeyAweGY4MTQwMDA2LCAwLCAxNiwgNCwgLyogSVBSQSAqLyB7IElSUTAsIElSUTEsIElSUTIsIElSUTMgfSB9LAogCXsgMHhmODE0MDAwOCwgMCwgMTYsIDQsIC8qIElQUkIgKi8geyBJUlE0LCBJUlE1LCBJUlE2LCBJUlE3IH0gfSwKQEAgLTY0LDcgKzU0LDcgQEAKIAl7IDB4ZjgwODAwMDgsIDAsIDE2LCA0LCAvKiBJUFJHICovIHsgU0lPRiB9IH0sCiB9OwogCi1zdGF0aWMgREVDTEFSRV9JTlRDX0RFU0MoaW50Y19kZXNjLCAic2g3NjE5IiwgdmVjdG9ycywgZ3JvdXBzLAorc3RhdGljIERFQ0xBUkVfSU5UQ19ERVNDKGludGNfZGVzYywgInNoNzYxOSIsIHZlY3RvcnMsIE5VTEwsCiAJCQkgTlVMTCwgcHJpb19yZWdpc3RlcnMsIE5VTEwpOwogCiBzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpX3BsYXRmb3JtX2RhdGFbXSA9IHsKQEAgLTcyLDE3ICs2MiwxNyBAQAogCQkubWFwYmFzZQk9IDB4Zjg0MDAwMDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSAgeyA4OCwgODksIDkxLCA5MH0sCisJCS5pcnFzCQk9IHsgODgsIDg4LCA4OCwgODggfSwKIAl9LCB7CiAJCS5tYXBiYXNlCT0gMHhmODQxMDAwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9ICB7IDkyLCA5MywgOTUsIDk0fSwKKwkJLmlycXMJCT0geyA5MiwgOTIsIDkyLCA5MiB9LAogCX0sIHsKIAkJLm1hcGJhc2UJPSAweGY4NDIwMDAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0gIHsgOTYsIDk3LCA5OSwgOTh9LAorCQkuaXJxcwkJPSB7IDk2LCA5NiwgOTYsIDk2IH0sCiAJfSwgewogCQkuZmxhZ3MgPSAwLAogCX0KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL3NldHVwLW14Zy5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvc2V0dXAtbXhnLmMKaW5kZXggZTYxMWQ3OS4uODQ0MjkzNyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvc2V0dXAtbXhnLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvc2V0dXAtbXhnLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogUmVuZXNhcyBNWC1HIChSOEEwMzAyMkJHKSBTZXR1cAogICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDggIFBhdWwgTXVuZHQKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgIFBhdWwgTXVuZHQKICAqCiAgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQpAQCAtMjAsMjMgKzIwLDE1IEBACiAJSVJROCwgSVJROSwgSVJRMTAsIElSUTExLCBJUlExMiwgSVJRMTMsIElSUTE0LCBJUlExNSwKIAogCVBJTlQwLCBQSU5UMSwgUElOVDIsIFBJTlQzLCBQSU5UNCwgUElOVDUsIFBJTlQ2LCBQSU5UNywKLQogCVNJTlQ4LCBTSU5UNywgU0lOVDYsIFNJTlQ1LCBTSU5UNCwgU0lOVDMsIFNJTlQyLCBTSU5UMSwKIAotCVNDSUYwX0JSSSwgU0NJRjBfRVJJLCBTQ0lGMF9SWEksIFNDSUYwX1RYSSwKLQlTQ0lGMV9CUkksIFNDSUYxX0VSSSwgU0NJRjFfUlhJLCBTQ0lGMV9UWEksCisJU0NJRjAsIFNDSUYxLAogCi0JTVRVMl9UR0kwQSwgTVRVMl9UR0kwQiwgTVRVMl9UR0kwQywgTVRVMl9UR0kwRCwKLQlNVFUyX1RDSTBWLCBNVFUyX1RHSTBFLCBNVFUyX1RHSTBGLAotCU1UVTJfVEdJMUEsIE1UVTJfVEdJMUIsIE1UVTJfVENJMVYsIE1UVTJfVENJMVUsCi0JTVRVMl9UR0kyQSwgTVRVMl9UR0kyQiwgTVRVMl9UQ0kyViwgTVRVMl9UQ0kyVSwKLQlNVFUyX1RHSTNBLCBNVFUyX1RHSTNCLCBNVFUyX1RHSTNDLCBNVFUyX1RHSTNELCBNVFUyX1RDSTNWLAotCU1UVTJfVEdJNEEsIE1UVTJfVEdJNEIsIE1UVTJfVEdJNEMsIE1UVTJfVEdJNEQsIE1UVTJfVENJNFYsCi0JTVRVMl9UR0k1VSwgTVRVMl9UR0k1ViwgTVRVMl9UR0k1VywKKwlNVFUyX0dST1VQMSwgTVRVMl9HUk9VUDIsIE1UVTJfR1JPVVAzLCBNVFUyX0dST1VQNCwgTVRVMl9HUk9VUDUKKwlNVFUyX1RHSTNCLCBNVFUyX1RHSTNDLAogCiAJLyogaW50ZXJydXB0IGdyb3VwcyAqLwotCVBJTlQsIFNDSUYwLCBTQ0lGMSwKLQlNVFUyX0dST1VQMSwgTVRVMl9HUk9VUDIsIE1UVTJfR1JPVVAzLCBNVFUyX0dST1VQNCwgTVRVMl9HUk9VUDUKKwlQSU5ULAogfTsKIAogc3RhdGljIHN0cnVjdCBpbnRjX3ZlY3QgdmVjdG9yc1tdIF9faW5pdGRhdGEgPSB7CkBAIC01OSw0NyArNTEsMzYgQEAKIAlJTlRDX0lSUShTSU5UNCwgOTgpLCBJTlRDX0lSUShTSU5UMywgOTkpLAogCUlOVENfSVJRKFNJTlQyLCAxMDApLCBJTlRDX0lSUShTSU5UMSwgMTAxKSwKIAotCUlOVENfSVJRKFNDSUYwX1JYSSwgMjIwKSwgSU5UQ19JUlEoU0NJRjBfVFhJLCAyMjEpLAotCUlOVENfSVJRKFNDSUYwX0JSSSwgMjIyKSwgSU5UQ19JUlEoU0NJRjBfRVJJLCAyMjMpLAotCUlOVENfSVJRKFNDSUYxX1JYSSwgMjI0KSwgSU5UQ19JUlEoU0NJRjFfVFhJLCAyMjUpLAotCUlOVENfSVJRKFNDSUYxX0JSSSwgMjI2KSwgSU5UQ19JUlEoU0NJRjFfRVJJLCAyMjcpLAorCUlOVENfSVJRKFNDSUYwLCAyMjApLCBJTlRDX0lSUShTQ0lGMCwgMjIxKSwKKwlJTlRDX0lSUShTQ0lGMCwgMjIyKSwgSU5UQ19JUlEoU0NJRjAsIDIyMyksCisJSU5UQ19JUlEoU0NJRjEsIDIyNCksIElOVENfSVJRKFNDSUYxLCAyMjUpLAorCUlOVENfSVJRKFNDSUYxLCAyMjYpLCBJTlRDX0lSUShTQ0lGMSwgMjI3KSwKIAotCUlOVENfSVJRKE1UVTJfVEdJMEEsIDIyOCksIElOVENfSVJRKE1UVTJfVEdJMEIsIDIyOSksCi0JSU5UQ19JUlEoTVRVMl9UR0kwQywgMjMwKSwgSU5UQ19JUlEoTVRVMl9UR0kwRCwgMjMxKSwKLQlJTlRDX0lSUShNVFUyX1RDSTBWLCAyMzIpLCBJTlRDX0lSUShNVFUyX1RHSTBFLCAyMzMpLAorCUlOVENfSVJRKE1UVTJfR1JPVVAxLCAyMjgpLCBJTlRDX0lSUShNVFUyX0dST1VQMSwgMjI5KSwKKwlJTlRDX0lSUShNVFUyX0dST1VQMSwgMjMwKSwgSU5UQ19JUlEoTVRVMl9HUk9VUDEsIDIzMSksCisJSU5UQ19JUlEoTVRVMl9HUk9VUDEsIDIzMiksIElOVENfSVJRKE1UVTJfR1JPVVAxLCAyMzMpLAogCi0JSU5UQ19JUlEoTVRVMl9UR0kwRiwgMjM0KSwgSU5UQ19JUlEoTVRVMl9UR0kxQSwgMjM1KSwKLQlJTlRDX0lSUShNVFUyX1RHSTFCLCAyMzYpLCBJTlRDX0lSUShNVFUyX1RDSTFWLCAyMzcpLAotCUlOVENfSVJRKE1UVTJfVENJMVUsIDIzOCksIElOVENfSVJRKE1UVTJfVEdJMkEsIDIzOSksCisJSU5UQ19JUlEoTVRVMl9HUk9VUDIsIDIzNCksIElOVENfSVJRKE1UVTJfR1JPVVAyLCAyMzUpLAorCUlOVENfSVJRKE1UVTJfR1JPVVAyLCAyMzYpLCBJTlRDX0lSUShNVFUyX0dST1VQMiwgMjM3KSwKKwlJTlRDX0lSUShNVFUyX0dST1VQMiwgMjM4KSwgSU5UQ19JUlEoTVRVMl9HUk9VUDIsIDIzOSksCiAKLQlJTlRDX0lSUShNVFUyX1RHSTJCLCAyNDApLCBJTlRDX0lSUShNVFUyX1RDSTJWLCAyNDEpLAotCUlOVENfSVJRKE1UVTJfVENJMlUsIDI0MiksIElOVENfSVJRKE1UVTJfVEdJM0EsIDI0MyksCisJSU5UQ19JUlEoTVRVMl9HUk9VUDMsIDI0MCksIElOVENfSVJRKE1UVTJfR1JPVVAzLCAyNDEpLAorCUlOVENfSVJRKE1UVTJfR1JPVVAzLCAyNDIpLCBJTlRDX0lSUShNVFUyX0dST1VQMywgMjQzKSwKIAogCUlOVENfSVJRKE1UVTJfVEdJM0IsIDI0NCksCiAJSU5UQ19JUlEoTVRVMl9UR0kzQywgMjQ1KSwKIAotCUlOVENfSVJRKE1UVTJfVEdJM0QsIDI0NiksIElOVENfSVJRKE1UVTJfVENJM1YsIDI0NyksCi0JSU5UQ19JUlEoTVRVMl9UR0k0QSwgMjQ4KSwgSU5UQ19JUlEoTVRVMl9UR0k0QiwgMjQ5KSwKLQlJTlRDX0lSUShNVFUyX1RHSTRDLCAyNTApLCBJTlRDX0lSUShNVFUyX1RHSTRELCAyNTEpLAorCUlOVENfSVJRKE1UVTJfR1JPVVA0LCAyNDYpLCBJTlRDX0lSUShNVFUyX0dST1VQNCwgMjQ3KSwKKwlJTlRDX0lSUShNVFUyX0dST1VQNCwgMjQ4KSwgSU5UQ19JUlEoTVRVMl9HUk9VUDQsIDI0OSksCisJSU5UQ19JUlEoTVRVMl9HUk9VUDQsIDI1MCksIElOVENfSVJRKE1UVTJfR1JPVVA0LCAyNTEpLAogCi0JSU5UQ19JUlEoTVRVMl9UQ0k0ViwgMjUyKSwgSU5UQ19JUlEoTVRVMl9UR0k1VSwgMjUzKSwKLQlJTlRDX0lSUShNVFUyX1RHSTVWLCAyNTQpLCBJTlRDX0lSUShNVFUyX1RHSTVXLCAyNTUpLAorCUlOVENfSVJRKE1UVTJfR1JPVVA1LCAyNTIpLCBJTlRDX0lSUShNVFUyX0dST1VQNSwgMjUzKSwKKwlJTlRDX0lSUShNVFUyX0dST1VQNSwgMjU0KSwgSU5UQ19JUlEoTVRVMl9HUk9VUDUsIDI1NSksCiB9OwogCiBzdGF0aWMgc3RydWN0IGludGNfZ3JvdXAgZ3JvdXBzW10gX19pbml0ZGF0YSA9IHsKIAlJTlRDX0dST1VQKFBJTlQsIFBJTlQwLCBQSU5UMSwgUElOVDIsIFBJTlQzLAogCQkgICBQSU5UNCwgUElOVDUsIFBJTlQ2LCBQSU5UNyksCi0JSU5UQ19HUk9VUChNVFUyX0dST1VQMSwgTVRVMl9UR0kwQSwgTVRVMl9UR0kwQiwgTVRVMl9UR0kwQywgTVRVMl9UR0kwRCwKLQkJICAgTVRVMl9UQ0kwViwgTVRVMl9UR0kwRSksCi0JSU5UQ19HUk9VUChNVFUyX0dST1VQMiwgTVRVMl9UR0kwRiwgTVRVMl9UR0kxQSwgTVRVMl9UR0kxQiwKLQkJICAgTVRVMl9UQ0kxViwgTVRVMl9UQ0kxVSwgTVRVMl9UR0kyQSksCi0JSU5UQ19HUk9VUChNVFUyX0dST1VQMywgTVRVMl9UR0kyQiwgTVRVMl9UQ0kyViwgTVRVMl9UQ0kyVSwKLQkJICAgTVRVMl9UR0kzQSksCi0JSU5UQ19HUk9VUChNVFUyX0dST1VQNCwgTVRVMl9UR0kzRCwgTVRVMl9UQ0kzViwgTVRVMl9UR0k0QSwKLQkJICAgTVRVMl9UR0k0QiwgTVRVMl9UR0k0QywgTVRVMl9UR0k0RCksCi0JSU5UQ19HUk9VUChNVFUyX0dST1VQNSwgTVRVMl9UQ0k0ViwgTVRVMl9UR0k1VSwgTVRVMl9UR0k1ViwgTVRVMl9UR0k1VyksCi0JSU5UQ19HUk9VUChTQ0lGMCwgU0NJRjBfQlJJLCBTQ0lGMF9FUkksIFNDSUYwX1JYSSwgU0NJRjBfVFhJKSwKLQlJTlRDX0dST1VQKFNDSUYxLCBTQ0lGMV9CUkksIFNDSUYxX0VSSSwgU0NJRjFfUlhJLCBTQ0lGMV9UWEkpLAogfTsKIAogc3RhdGljIHN0cnVjdCBpbnRjX3ByaW9fcmVnIHByaW9fcmVnaXN0ZXJzW10gX19pbml0ZGF0YSA9IHsKQEAgLTEzNyw3ICsxMTgsNyBAQAogCQkubWFwYmFzZQk9IDB4ZmY4MDQwMDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSB7IDIyMywgMjIwLCAyMjEsIDIyMiB9LAorCQkuaXJxcwkJPSB7IDIyMCwgMjIwLCAyMjAsIDIyMCB9LAogCX0sIHsKIAkJLmZsYWdzID0gMCwKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9zZXR1cC1zaDcyMDEuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL3NldHVwLXNoNzIwMS5jCmluZGV4IDA2MzFlNDIuLjAwZjQyZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL3NldHVwLXNoNzIwMS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL3NldHVwLXNoNzIwMS5jCkBAIC0yLDYgKzIsNyBAQAogICogIFNINzIwMSBzZXR1cAogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDggIFBldGVyIEdyaWZmaW4gcGdyaWZmaW5AbXBjLWRhdGEuY28udWsKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgIFBhdWwgTXVuZHQKICAqCiAgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQpAQCAtMTgsNTcgKzE5LDMyIEBACiAJLyogaW50ZXJydXB0IHNvdXJjZXMgKi8KIAlJUlEwLCBJUlExLCBJUlEyLCBJUlEzLCBJUlE0LCBJUlE1LCBJUlE2LCBJUlE3LAogCVBJTlQwLCBQSU5UMSwgUElOVDIsIFBJTlQzLCBQSU5UNCwgUElOVDUsIFBJTlQ2LCBQSU5UNywKKwogCUFEQ19BREksCi0JTVRVMl9UR0kwQSwgTVRVMl9UR0kwQiwgTVRVMl9UR0kwQywgTVRVMl9UR0kwRCwKLQlNVFUyX1RDSTBWLCBNVFUyX1RHSTBFLCBNVFUyX1RHSTBGLAotCU1UVTJfVEdJMUEsIE1UVTJfVEdJMUIsIE1UVTJfVENJMVYsIE1UVTJfVENJMVUsCi0JTVRVMl9UR0kyQSwgTVRVMl9UR0kyQiwgTVRVMl9UQ0kyViwgTVRVMl9UQ0kyVSwKLQlNVFUyX1RHSTNBLCBNVFUyX1RHSTNCLCBNVFUyX1RHSTNDLCBNVFUyX1RHSTNELCBNVFUyX1RDSTNWLAotCU1UVTJfVEdJNEEsIE1UVTJfVEdJNEIsIE1UVTJfVEdJNEMsIE1UVTJfVEdJNEQsIE1UVTJfVENJNFYsCi0JTVRVMl9UR0k1VSwgTVRVMl9UR0k1ViwgTVRVMl9UR0k1VywKLQlSVENfQVJNLCBSVENfUFJELCBSVENfQ1VQLAotCVdEVCwKLQlJSUMzMF9TVFBJLCBJSUMzMF9OQUtJLCBJSUMzMF9SWEksIElJQzMwX1RYSSwgSUlDMzBfVEVJLAotCUlJQzMxX1NUUEksIElJQzMxX05BS0ksIElJQzMxX1JYSSwgSUlDMzFfVFhJLCBJSUMzMV9URUksCi0JSUlDMzJfU1RQSSwgSUlDMzJfTkFLSSwgSUlDMzJfUlhJLCBJSUMzMl9UWEksIElJQzMyX1RFSSwKKworCU1UVTIwX0FCQ0QsIE1UVTIwX1ZFRiwgTVRVMjFfQUIsIE1UVTIxX1ZVLCBNVFUyMl9BQiwgTVRVMjJfVlUsCisJTVRVMjNfQUJDRCwgTVRVMjRfQUJDRCwgTVRVMjVfVVZXLCBNVFUyX1RDSTNWLCBNVFUyX1RDSTRWLAorCisJUlRDLCBXRFQsCisKKwlJSUMzMCwgSUlDMzEsIElJQzMyLAogCiAJRE1BQzBfRE1JTlQwLCBETUFDMV9ETUlOVDEsCiAJRE1BQzJfRE1JTlQyLCBETUFDM19ETUlOVDMsCiAKLQlTQ0lGMF9CUkksIFNDSUYwX0VSSSwgU0NJRjBfUlhJLCBTQ0lGMF9UWEksCi0JU0NJRjFfQlJJLCBTQ0lGMV9FUkksIFNDSUYxX1JYSSwgU0NJRjFfVFhJLAotCVNDSUYyX0JSSSwgU0NJRjJfRVJJLCBTQ0lGMl9SWEksIFNDSUYyX1RYSSwKLQlTQ0lGM19CUkksIFNDSUYzX0VSSSwgU0NJRjNfUlhJLCBTQ0lGM19UWEksCi0JU0NJRjRfQlJJLCBTQ0lGNF9FUkksIFNDSUY0X1JYSSwgU0NJRjRfVFhJLAotCVNDSUY1X0JSSSwgU0NJRjVfRVJJLCBTQ0lGNV9SWEksIFNDSUY1X1RYSSwKLQlTQ0lGNl9CUkksIFNDSUY2X0VSSSwgU0NJRjZfUlhJLCBTQ0lGNl9UWEksCi0JU0NJRjdfQlJJLCBTQ0lGN19FUkksIFNDSUY3X1JYSSwgU0NJRjdfVFhJLAorCVNDSUYwLCBTQ0lGMSwgU0NJRjIsIFNDSUYzLCBTQ0lGNCwgU0NJRjUsIFNDSUY2LCBTQ0lGNywKIAogCURNQUMwX0RNSU5UQSwgRE1BQzRfRE1JTlQ0LCBETUFDNV9ETUlOVDUsIERNQUM2X0RNSU5UNiwKIAlETUFDN19ETUlOVDcsCiAKLQlSQ0FOMF9FUlMsIFJDQU4wX09WUiwKLQlSQ0FOMF9TTEUsCi0JUkNBTjBfUk0wLCBSQ0FOMF9STTEsCi0KLQlSQ0FOMV9FUlMsIFJDQU4xX09WUiwKLQlSQ0FOMV9TTEUsCi0JUkNBTjFfUk0wLCBSQ0FOMV9STTEsCisJUkNBTjAsIFJDQU4xLAogCiAJU1NJMF9TU0lJLCBTU0kxX1NTSUksCiAKLQlUTVIwX0NNSUEwLCBUTVIwX0NNSUIwLCBUTVIwX09WSTAsCi0JVE1SMV9DTUlBMSwgVE1SMV9DTUlCMSwgVE1SMV9PVkkxLAorCVRNUjAsIFRNUjEsCiAKIAkvKiBpbnRlcnJ1cHQgZ3JvdXBzICovCi0KLQlJUlEsIFBJTlQsIEFEQywKLQlNVFUyMF9BQkNELCBNVFUyMF9WRUYsIE1UVTIxX0FCLCBNVFUyMV9WVSwgTVRVMjJfQUIsIE1UVTIyX1ZVLAotCU1UVTIzX0FCQ0QsIE1UVTI0X0FCQ0QsIE1UVTI1X1VWVywKLQlSVEMsIElJQzMwLCBJSUMzMSwgSUlDMzIsCi0JU0NJRjAsIFNDSUYxLCBTQ0lGMiwgU0NJRjMsIFNDSUY0LCBTQ0lGNSwgU0NJRjYsIFNDSUY3LAotCVJDQU4wLCBSQ0FOMSwgVE1SMCwgVE1SMQotCisJUElOVCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaW50Y192ZWN0IHZlY3RvcnNbXSBfX2luaXRkYXRhID0gewpAQCAtNzYsNiArNTIsNyBAQAogCUlOVENfSVJRKElSUTIsIDY2KSwgSU5UQ19JUlEoSVJRMywgNjcpLAogCUlOVENfSVJRKElSUTQsIDY4KSwgSU5UQ19JUlEoSVJRNSwgNjkpLAogCUlOVENfSVJRKElSUTYsIDcwKSwgSU5UQ19JUlEoSVJRNywgNzEpLAorCiAJSU5UQ19JUlEoUElOVDAsIDgwKSwgSU5UQ19JUlEoUElOVDEsIDgxKSwKIAlJTlRDX0lSUShQSU5UMiwgODIpLCBJTlRDX0lSUShQSU5UMywgODMpLAogCUlOVENfSVJRKFBJTlQ0LCA4NCksIElOVENfSVJRKFBJTlQ1LCA4NSksCkBAIC04MywxMjMgKzYwLDkyIEBACiAKIAlJTlRDX0lSUShBRENfQURJLCA5MiksCiAKLQlJTlRDX0lSUShNVFUyX1RHSTBBLCAxMDgpLCBJTlRDX0lSUShNVFUyX1RHSTBCLCAxMDkpLAotCUlOVENfSVJRKE1UVTJfVEdJMEMsIDExMCksIElOVENfSVJRKE1UVTJfVEdJMEQsIDExMSksCi0JSU5UQ19JUlEoTVRVMl9UQ0kwViwgMTEyKSwKLQlJTlRDX0lSUShNVFUyX1RHSTBFLCAxMTMpLCBJTlRDX0lSUShNVFUyX1RHSTBGLCAxMTQpLAorCUlOVENfSVJRKE1UVTIwX0FCQ0QsIDEwOCksIElOVENfSVJRKE1UVTIwX0FCQ0QsIDEwOSksCisJSU5UQ19JUlEoTVRVMjBfQUJDRCwgMTEwKSwgSU5UQ19JUlEoTVRVMjBfQUJDRCwgMTExKSwKIAotCUlOVENfSVJRKE1UVTJfVEdJMUEsIDExNiksIElOVENfSVJRKE1UVTJfVEdJMUIsIDExNyksCi0JSU5UQ19JUlEoTVRVMl9UQ0kxViwgMTIwKSwgSU5UQ19JUlEoTVRVMl9UQ0kxVSwgMTIxKSwKKwlJTlRDX0lSUShNVFUyMF9WRUYsIDExMiksIElOVENfSVJRKE1UVTIwX1ZFRiwgMTEzKSwKKwlJTlRDX0lSUShNVFUyMF9WRUYsIDExNCksCiAKLQlJTlRDX0lSUShNVFUyX1RHSTJBLCAxMjQpLCBJTlRDX0lSUShNVFUyX1RHSTJCLCAxMjUpLAotCUlOVENfSVJRKE1UVTJfVENJMlYsIDEyOCksIElOVENfSVJRKE1UVTJfVENJMlUsIDEyOSksCisJSU5UQ19JUlEoTVRVMjFfQUIsIDExNiksIElOVENfSVJRKE1UVTIxX0FCLCAxMTcpLAorCUlOVENfSVJRKE1UVTIxX1ZVLCAxMjApLCBJTlRDX0lSUShNVFUyMV9WVSwgMTIxKSwKIAotCUlOVENfSVJRKE1UVTJfVEdJM0EsIDEzMiksIElOVENfSVJRKE1UVTJfVEdJM0IsIDEzMyksCi0JSU5UQ19JUlEoTVRVMl9UR0kzQywgMTM0KSwgSU5UQ19JUlEoTVRVMl9UR0kzRCwgMTM1KSwKKwlJTlRDX0lSUShNVFUyMl9BQiwgMTI0KSwgSU5UQ19JUlEoTVRVMjJfQUIsIDEyNSksCisJSU5UQ19JUlEoTVRVMjJfVlUsIDEyOCksIElOVENfSVJRKE1UVTIyX1ZVLCAxMjkpLAorCisJSU5UQ19JUlEoTVRVMjNfQUJDRCwgMTMyKSwgSU5UQ19JUlEoTVRVMjNfQUJDRCwgMTMzKSwKKwlJTlRDX0lSUShNVFUyM19BQkNELCAxMzQpLCBJTlRDX0lSUShNVFUyM19BQkNELCAxMzUpLAorCiAJSU5UQ19JUlEoTVRVMl9UQ0kzViwgMTM2KSwKIAotCUlOVENfSVJRKE1UVTJfVEdJNEEsIDE0MCksIElOVENfSVJRKE1UVTJfVEdJNEIsIDE0MSksCi0JSU5UQ19JUlEoTVRVMl9UR0k0QywgMTQyKSwgSU5UQ19JUlEoTVRVMl9UR0k0RCwgMTQzKSwKKwlJTlRDX0lSUShNVFUyNF9BQkNELCAxNDApLCBJTlRDX0lSUShNVFUyNF9BQkNELCAxNDEpLAorCUlOVENfSVJRKE1UVTI0X0FCQ0QsIDE0MiksIElOVENfSVJRKE1UVTI0X0FCQ0QsIDE0MyksCisKIAlJTlRDX0lSUShNVFUyX1RDSTRWLCAxNDQpLAogCi0JSU5UQ19JUlEoTVRVMl9UR0k1VSwgMTQ4KSwgSU5UQ19JUlEoTVRVMl9UR0k1ViwgMTQ5KSwKLQlJTlRDX0lSUShNVFUyX1RHSTVXLCAxNTApLAorCUlOVENfSVJRKE1UVTI1X1VWVywgMTQ4KSwgSU5UQ19JUlEoTVRVMjVfVVZXLCAxNDkpLAorCUlOVENfSVJRKE1UVTI1X1VWVywgMTUwKSwKIAotCUlOVENfSVJRKFJUQ19BUk0sIDE1MiksIElOVENfSVJRKFJUQ19QUkQsIDE1MyksCi0JSU5UQ19JUlEoUlRDX0NVUCwgMTU0KSwgSU5UQ19JUlEoV0RULCAxNTYpLAorCUlOVENfSVJRKFJUQywgMTUyKSwgSU5UQ19JUlEoUlRDLCAxNTMpLAorCUlOVENfSVJRKFJUQywgMTU0KSwKIAotCUlOVENfSVJRKElJQzMwX1NUUEksIDE1NyksIElOVENfSVJRKElJQzMwX05BS0ksIDE1OCksCi0JSU5UQ19JUlEoSUlDMzBfUlhJLCAxNTkpLCBJTlRDX0lSUShJSUMzMF9UWEksIDE2MCksCi0JSU5UQ19JUlEoSUlDMzBfVEVJLCAxNjEpLAorCUlOVENfSVJRKFdEVCwgMTU2KSwKIAotCUlOVENfSVJRKElJQzMxX1NUUEksIDE2NCksIElOVENfSVJRKElJQzMxX05BS0ksIDE2NSksCi0JSU5UQ19JUlEoSUlDMzFfUlhJLCAxNjYpLCBJTlRDX0lSUShJSUMzMV9UWEksIDE2NyksCi0JSU5UQ19JUlEoSUlDMzFfVEVJLCAxNjgpLAorCUlOVENfSVJRKElJQzMwLCAxNTcpLCBJTlRDX0lSUShJSUMzMCwgMTU4KSwKKwlJTlRDX0lSUShJSUMzMCwgMTU5KSwgSU5UQ19JUlEoSUlDMzAsIDE2MCksCisJSU5UQ19JUlEoSUlDMzAsIDE2MSksCiAKLQlJTlRDX0lSUShJSUMzMl9TVFBJLCAxNzApLCBJTlRDX0lSUShJSUMzMl9OQUtJLCAxNzEpLAotCUlOVENfSVJRKElJQzMyX1JYSSwgMTcyKSwgSU5UQ19JUlEoSUlDMzJfVFhJLCAxNzMpLAotCUlOVENfSVJRKElJQzMyX1RFSSwgMTc0KSwKKwlJTlRDX0lSUShJSUMzMSwgMTY0KSwgSU5UQ19JUlEoSUlDMzEsIDE2NSksCisJSU5UQ19JUlEoSUlDMzEsIDE2NiksIElOVENfSVJRKElJQzMxLCAxNjcpLAorCUlOVENfSVJRKElJQzMxLCAxNjgpLAorCisJSU5UQ19JUlEoSUlDMzIsIDE3MCksIElOVENfSVJRKElJQzMyLCAxNzEpLAorCUlOVENfSVJRKElJQzMyLCAxNzIpLCBJTlRDX0lSUShJSUMzMiwgMTczKSwKKwlJTlRDX0lSUShJSUMzMiwgMTc0KSwKIAogCUlOVENfSVJRKERNQUMwX0RNSU5UMCwgMTc2KSwgSU5UQ19JUlEoRE1BQzFfRE1JTlQxLCAxNzcpLAogCUlOVENfSVJRKERNQUMyX0RNSU5UMiwgMTc4KSwgSU5UQ19JUlEoRE1BQzNfRE1JTlQzLCAxNzkpLAogCi0JSU5UQ19JUlEoU0NJRjBfQlJJLCAxODApLCBJTlRDX0lSUShTQ0lGMF9FUkksIDE4MSksCi0JSU5UQ19JUlEoU0NJRjBfUlhJLCAxODIpLCBJTlRDX0lSUShTQ0lGMF9UWEksIDE4MyksCi0JSU5UQ19JUlEoU0NJRjFfQlJJLCAxODQpLCBJTlRDX0lSUShTQ0lGMV9FUkksIDE4NSksCi0JSU5UQ19JUlEoU0NJRjFfUlhJLCAxODYpLCBJTlRDX0lSUShTQ0lGMV9UWEksIDE4NyksCi0JSU5UQ19JUlEoU0NJRjJfQlJJLCAxODgpLCBJTlRDX0lSUShTQ0lGMl9FUkksIDE4OSksCi0JSU5UQ19JUlEoU0NJRjJfUlhJLCAxOTApLCBJTlRDX0lSUShTQ0lGMl9UWEksIDE5MSksCi0JSU5UQ19JUlEoU0NJRjNfQlJJLCAxOTIpLCBJTlRDX0lSUShTQ0lGM19FUkksIDE5MyksCi0JSU5UQ19JUlEoU0NJRjNfUlhJLCAxOTQpLCBJTlRDX0lSUShTQ0lGM19UWEksIDE5NSksCi0JSU5UQ19JUlEoU0NJRjRfQlJJLCAxOTYpLCBJTlRDX0lSUShTQ0lGNF9FUkksIDE5NyksCi0JSU5UQ19JUlEoU0NJRjRfUlhJLCAxOTgpLCBJTlRDX0lSUShTQ0lGNF9UWEksIDE5OSksCi0JSU5UQ19JUlEoU0NJRjVfQlJJLCAyMDApLCBJTlRDX0lSUShTQ0lGNV9FUkksIDIwMSksCi0JSU5UQ19JUlEoU0NJRjVfUlhJLCAyMDIpLCBJTlRDX0lSUShTQ0lGNV9UWEksIDIwMyksCi0JSU5UQ19JUlEoU0NJRjZfQlJJLCAyMDQpLCBJTlRDX0lSUShTQ0lGNl9FUkksIDIwNSksCi0JSU5UQ19JUlEoU0NJRjZfUlhJLCAyMDYpLCBJTlRDX0lSUShTQ0lGNl9UWEksIDIwNyksCi0JSU5UQ19JUlEoU0NJRjdfQlJJLCAyMDgpLCBJTlRDX0lSUShTQ0lGN19FUkksIDIwOSksCi0JSU5UQ19JUlEoU0NJRjdfUlhJLCAyMTApLCBJTlRDX0lSUShTQ0lGN19UWEksIDIxMSksCisJSU5UQ19JUlEoU0NJRjAsIDE4MCksIElOVENfSVJRKFNDSUYwLCAxODEpLAorCUlOVENfSVJRKFNDSUYwLCAxODIpLCBJTlRDX0lSUShTQ0lGMCwgMTgzKSwKKwlJTlRDX0lSUShTQ0lGMSwgMTg0KSwgSU5UQ19JUlEoU0NJRjEsIDE4NSksCisJSU5UQ19JUlEoU0NJRjEsIDE4NiksIElOVENfSVJRKFNDSUYxLCAxODcpLAorCUlOVENfSVJRKFNDSUYyLCAxODgpLCBJTlRDX0lSUShTQ0lGMiwgMTg5KSwKKwlJTlRDX0lSUShTQ0lGMiwgMTkwKSwgSU5UQ19JUlEoU0NJRjIsIDE5MSksCisJSU5UQ19JUlEoU0NJRjMsIDE5MiksIElOVENfSVJRKFNDSUYzLCAxOTMpLAorCUlOVENfSVJRKFNDSUYzLCAxOTQpLCBJTlRDX0lSUShTQ0lGMywgMTk1KSwKKwlJTlRDX0lSUShTQ0lGNCwgMTk2KSwgSU5UQ19JUlEoU0NJRjQsIDE5NyksCisJSU5UQ19JUlEoU0NJRjQsIDE5OCksIElOVENfSVJRKFNDSUY0LCAxOTkpLAorCUlOVENfSVJRKFNDSUY1LCAyMDApLCBJTlRDX0lSUShTQ0lGNSwgMjAxKSwKKwlJTlRDX0lSUShTQ0lGNSwgMjAyKSwgSU5UQ19JUlEoU0NJRjUsIDIwMyksCisJSU5UQ19JUlEoU0NJRjYsIDIwNCksIElOVENfSVJRKFNDSUY2LCAyMDUpLAorCUlOVENfSVJRKFNDSUY2LCAyMDYpLCBJTlRDX0lSUShTQ0lGNiwgMjA3KSwKKwlJTlRDX0lSUShTQ0lGNywgMjA4KSwgSU5UQ19JUlEoU0NJRjcsIDIwOSksCisJSU5UQ19JUlEoU0NJRjcsIDIxMCksIElOVENfSVJRKFNDSUY3LCAyMTEpLAogCiAJSU5UQ19JUlEoRE1BQzBfRE1JTlRBLCAyMTIpLCBJTlRDX0lSUShETUFDNF9ETUlOVDQsIDIxNiksCiAJSU5UQ19JUlEoRE1BQzVfRE1JTlQ1LCAyMTcpLCBJTlRDX0lSUShETUFDNl9ETUlOVDYsIDIxOCksCiAJSU5UQ19JUlEoRE1BQzdfRE1JTlQ3LCAyMTkpLAogCi0JSU5UQ19JUlEoUkNBTjBfRVJTLCAyMjgpLCBJTlRDX0lSUShSQ0FOMF9PVlIsIDIyOSksCi0JSU5UQ19JUlEoUkNBTjBfU0xFLCAyMzApLAotCUlOVENfSVJRKFJDQU4wX1JNMCwgMjMxKSwgSU5UQ19JUlEoUkNBTjBfUk0xLCAyMzIpLAorCUlOVENfSVJRKFJDQU4wLCAyMjgpLCBJTlRDX0lSUShSQ0FOMCwgMjI5KSwKKwlJTlRDX0lSUShSQ0FOMCwgMjMwKSwKKwlJTlRDX0lSUShSQ0FOMCwgMjMxKSwgSU5UQ19JUlEoUkNBTjAsIDIzMiksCiAKLQlJTlRDX0lSUShSQ0FOMV9FUlMsIDIzNCksIElOVENfSVJRKFJDQU4xX09WUiwgMjM1KSwKLQlJTlRDX0lSUShSQ0FOMV9TTEUsIDIzNiksCi0JSU5UQ19JUlEoUkNBTjFfUk0wLCAyMzcpLCBJTlRDX0lSUShSQ0FOMV9STTEsIDIzOCksCisJSU5UQ19JUlEoUkNBTjEsIDIzNCksIElOVENfSVJRKFJDQU4xLCAyMzUpLAorCUlOVENfSVJRKFJDQU4xLCAyMzYpLAorCUlOVENfSVJRKFJDQU4xLCAyMzcpLCBJTlRDX0lSUShSQ0FOMSwgMjM4KSwKIAogCUlOVENfSVJRKFNTSTBfU1NJSSwgMjQ0KSwgSU5UQ19JUlEoU1NJMV9TU0lJLCAyNDUpLAogCi0JSU5UQ19JUlEoVE1SMF9DTUlBMCwgMjQ2KSwgSU5UQ19JUlEoVE1SMF9DTUlCMCwgMjQ3KSwKLQlJTlRDX0lSUShUTVIwX09WSTAsIDI0OCksCisJSU5UQ19JUlEoVE1SMCwgMjQ2KSwgSU5UQ19JUlEoVE1SMCwgMjQ3KSwKKwlJTlRDX0lSUShUTVIwLCAyNDgpLAogCi0JSU5UQ19JUlEoVE1SMV9DTUlBMSwgMjUyKSwgSU5UQ19JUlEoVE1SMV9DTUlCMSwgMjUzKSwKLQlJTlRDX0lSUShUTVIxX09WSTEsIDI1NCksCi0KKwlJTlRDX0lSUShUTVIxLCAyNTIpLCBJTlRDX0lSUShUTVIxLCAyNTMpLAorCUlOVENfSVJRKFRNUjEsIDI1NCksCiB9OwogCiBzdGF0aWMgc3RydWN0IGludGNfZ3JvdXAgZ3JvdXBzW10gX19pbml0ZGF0YSA9IHsKIAlJTlRDX0dST1VQKFBJTlQsIFBJTlQwLCBQSU5UMSwgUElOVDIsIFBJTlQzLAogCQkgICBQSU5UNCwgUElOVDUsIFBJTlQ2LCBQSU5UNyksCi0JSU5UQ19HUk9VUChNVFUyMF9BQkNELCBNVFUyX1RHSTBBLCBNVFUyX1RHSTBCLCBNVFUyX1RHSTBDLCBNVFUyX1RHSTBEKSwKLQlJTlRDX0dST1VQKE1UVTIwX1ZFRiwgTVRVMl9UQ0kwViwgTVRVMl9UR0kwRSwgTVRVMl9UR0kwRiksCi0KLQlJTlRDX0dST1VQKE1UVTIxX0FCLCBNVFUyX1RHSTFBLCBNVFUyX1RHSTFCKSwKLQlJTlRDX0dST1VQKE1UVTIxX1ZVLCBNVFUyX1RDSTFWLCBNVFUyX1RDSTFVKSwKLQlJTlRDX0dST1VQKE1UVTIyX0FCLCBNVFUyX1RHSTJBLCBNVFUyX1RHSTJCKSwKLQlJTlRDX0dST1VQKE1UVTIyX1ZVLCBNVFUyX1RDSTJWLCBNVFUyX1RDSTJVKSwKLQlJTlRDX0dST1VQKE1UVTIzX0FCQ0QsIE1UVTJfVEdJM0EsIE1UVTJfVEdJM0IsIE1UVTJfVEdJM0MsIE1UVTJfVEdJM0QpLAotCUlOVENfR1JPVVAoTVRVMjRfQUJDRCwgTVRVMl9UR0k0QSwgTVRVMl9UR0k0QiwgTVRVMl9UR0k0QywgTVRVMl9UR0k0RCksCi0JSU5UQ19HUk9VUChNVFUyNV9VVlcsIE1UVTJfVEdJNVUsIE1UVTJfVEdJNVYsIE1UVTJfVEdJNVcpLAotCUlOVENfR1JPVVAoUlRDLCBSVENfQVJNLCBSVENfUFJELCBSVENfQ1VQICksCi0KLQlJTlRDX0dST1VQKElJQzMwLCBJSUMzMF9TVFBJLCBJSUMzMF9OQUtJLCBJSUMzMF9SWEksIElJQzMwX1RYSSwKLQkJICAgSUlDMzBfVEVJKSwKLQlJTlRDX0dST1VQKElJQzMxLCBJSUMzMV9TVFBJLCBJSUMzMV9OQUtJLCBJSUMzMV9SWEksIElJQzMxX1RYSSwKLQkJICAgSUlDMzFfVEVJKSwKLQlJTlRDX0dST1VQKElJQzMyLCBJSUMzMl9TVFBJLCBJSUMzMl9OQUtJLCBJSUMzMl9SWEksIElJQzMyX1RYSSwKLQkJICAgSUlDMzJfVEVJKSwKLQotCUlOVENfR1JPVVAoU0NJRjAsIFNDSUYwX0JSSSwgU0NJRjBfRVJJLCBTQ0lGMF9SWEksIFNDSUYwX1RYSSksCi0JSU5UQ19HUk9VUChTQ0lGMSwgU0NJRjFfQlJJLCBTQ0lGMV9FUkksIFNDSUYxX1JYSSwgU0NJRjFfVFhJKSwKLQlJTlRDX0dST1VQKFNDSUYyLCBTQ0lGMl9CUkksIFNDSUYyX0VSSSwgU0NJRjJfUlhJLCBTQ0lGMl9UWEkpLAotCUlOVENfR1JPVVAoU0NJRjMsIFNDSUYzX0JSSSwgU0NJRjNfRVJJLCBTQ0lGM19SWEksIFNDSUYzX1RYSSksCi0JSU5UQ19HUk9VUChTQ0lGNCwgU0NJRjRfQlJJLCBTQ0lGNF9FUkksIFNDSUY0X1JYSSwgU0NJRjRfVFhJKSwKLQlJTlRDX0dST1VQKFNDSUY1LCBTQ0lGNV9CUkksIFNDSUY1X0VSSSwgU0NJRjVfUlhJLCBTQ0lGNV9UWEkpLAotCUlOVENfR1JPVVAoU0NJRjYsIFNDSUY2X0JSSSwgU0NJRjZfRVJJLCBTQ0lGNl9SWEksIFNDSUY2X1RYSSksCi0JSU5UQ19HUk9VUChTQ0lGNywgU0NJRjdfQlJJLCBTQ0lGN19FUkksIFNDSUY3X1JYSSwgU0NJRjdfVFhJKSwKLQotCUlOVENfR1JPVVAoUkNBTjAsIFJDQU4wX0VSUywgUkNBTjBfT1ZSLCBSQ0FOMF9STTAsIFJDQU4wX1JNMSwKLQkJICAgUkNBTjBfU0xFKSwKLQlJTlRDX0dST1VQKFJDQU4xLCBSQ0FOMV9FUlMsIFJDQU4xX09WUiwgUkNBTjFfUk0wLCBSQ0FOMV9STTEsCi0JCSAgIFJDQU4xX1NMRSksCi0KLQlJTlRDX0dST1VQKFRNUjAsIFRNUjBfQ01JQTAsIFRNUjBfQ01JQjAsIFRNUjBfT1ZJMCksCi0JSU5UQ19HUk9VUChUTVIxLCBUTVIxX0NNSUExLCBUTVIxX0NNSUIxLCBUTVIxX09WSTEpLAogfTsKIAogc3RhdGljIHN0cnVjdCBpbnRjX3ByaW9fcmVnIHByaW9fcmVnaXN0ZXJzW10gX19pbml0ZGF0YSA9IHsKQEAgLTIxMiw3ICsxNTgsNyBAQAogCiAJeyAweGZmZmU5ODA2LCAwLCAxNiwgNCwgLyogSVBSMDkgKi8geyBSVEMsIFdEVCwgSUlDMzAsIDAgfSB9LAogCXsgMHhmZmZlOTgwOCwgMCwgMTYsIDQsIC8qIElQUjEwICovIHsgSUlDMzEsIElJQzMyLCBETUFDMF9ETUlOVDAsIERNQUMxX0RNSU5UMSB9IH0sCi0JeyAweGZmZmU5ODBhLCAwLCAxNiwgNCwgLyogSVBSMTEgKi8geyBETUFDMl9ETUlOVDIsIERNQUMzX0RNSU5UMywgU0NJRjAgLCBTQ0lGMSB9IH0sCisJeyAweGZmZmU5ODBhLCAwLCAxNiwgNCwgLyogSVBSMTEgKi8geyBETUFDMl9ETUlOVDIsIERNQUMzX0RNSU5UMywgU0NJRjAsIFNDSUYxIH0gfSwKIAl7IDB4ZmZmZTk4MGMsIDAsIDE2LCA0LCAvKiBJUFIxMiAqLyB7IFNDSUYyLCBTQ0lGMywgU0NJRjQsIFNDSUY1IH0gfSwKIAl7IDB4ZmZmZTk4MGUsIDAsIDE2LCA0LCAvKiBJUFIxMyAqLyB7IFNDSUY2LCBTQ0lGNywgRE1BQzBfRE1JTlRBLCBETUFDNF9ETUlOVDQgIH0gfSwKIAl7IDB4ZmZmZTk4MTAsIDAsIDE2LCA0LCAvKiBJUFIxNCAqLyB7IERNQUM1X0RNSU5UNSwgRE1BQzZfRE1JTlQ2LCBETUFDN19ETUlOVDcsIDAgfSB9LApAQCAtMjM0LDQyICsxODAsNDIgQEAKIAkJLm1hcGJhc2UJPSAweGZmZmU4MDAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyAxODEsIDE4MiwgMTgzLCAxODB9CisJCS5pcnFzCQk9IHsgMTgwLCAxODAsIDE4MCwgMTgwIH0KIAl9LCB7CiAJCS5tYXBiYXNlCT0gMHhmZmZlODgwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9IHsgMTg1LCAxODYsIDE4NywgMTg0fQorCQkuaXJxcwkJPSB7IDE4NCwgMTg0LCAxODQsIDE4NCB9CiAJfSwgewogCQkubWFwYmFzZQk9IDB4ZmZmZTkwMDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSB7IDE4OSwgMTg2LCAxODcsIDE4OH0KKwkJLmlycXMJCT0geyAxODgsIDE4OCwgMTg4LCAxODggfQogCX0sIHsKIAkJLm1hcGJhc2UJPSAweGZmZmU5ODAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyAxOTMsIDE5NCwgMTk1LCAxOTJ9CisJCS5pcnFzCQk9IHsgMTkyLCAxOTIsIDE5MiwgMTkyIH0KIAl9LCB7CiAJCS5tYXBiYXNlCT0gMHhmZmZlYTAwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9IHsgMTk2LCAxOTgsIDE5OSwgMTk2fQorCQkuaXJxcwkJPSB7IDE5NiwgMTk2LCAxOTYsIDE5NiB9CiAJfSwgewogCQkubWFwYmFzZQk9IDB4ZmZmZWE4MDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSB7IDIwMSwgMjAyLCAyMDMsIDIwMH0KKwkJLmlycXMJCT0geyAyMDAsIDIwMCwgMjAwLCAyMDAgfQogCX0sIHsKIAkJLm1hcGJhc2UJPSAweGZmZmViMDAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyAyMDUsIDIwNiwgMjA3LCAyMDR9CisJCS5pcnFzCQk9IHsgMjA0LCAyMDQsIDIwNCwgMjA0IH0KIAl9LCB7CiAJCS5tYXBiYXNlCT0gMHhmZmZlYjgwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9IHsgMjA5LCAyMTAsIDIxMSwgMjA4fQorCQkuaXJxcwkJPSB7IDIwOCwgMjA4LCAyMDgsIDIwOCB9CiAJfSwgewogCQkuZmxhZ3MgPSAwLAogCX0KQEAgLTI5MCwxNyArMjM2LDcgQEAKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JTywKIAl9LAogCVsxXSA9IHsKLQkJLyogUGVyaW9kIElSUSAqLwotCQkuc3RhcnQJPSAxNTMsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JWzJdID0gewotCQkvKiBDYXJyeSBJUlEgKi8KLQkJLnN0YXJ0CT0gMTU0LAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotCVszXSA9IHsKLQkJLyogQWxhcm0gSVJRICovCisJCS8qIFNoYXJlZCBQZXJpb2QvQ2FycnkvQWxhcm0gSVJRICovCiAJCS5zdGFydAk9IDE1MiwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCiAJfSwKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL3NldHVwLXNoNzIwMy5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvc2V0dXAtc2g3MjAzLmMKaW5kZXggZTk4ZGM0NC4uODIwZGZiMiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvc2V0dXAtc2g3MjAzLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvc2V0dXAtc2g3MjAzLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogU0g3MjAzIGFuZCBTSDcyNjMgU2V0dXAKICAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA3ICBQYXVsIE11bmR0CisgKiAgQ29weXJpZ2h0IChDKSAyMDA3IC0gMjAwOSAgUGF1bCBNdW5kdAogICoKICAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCkBAIC0xOCw1MCArMTgsMjcgQEAKIAkvKiBpbnRlcnJ1cHQgc291cmNlcyAqLwogCUlSUTAsIElSUTEsIElSUTIsIElSUTMsIElSUTQsIElSUTUsIElSUTYsIElSUTcsCiAJUElOVDAsIFBJTlQxLCBQSU5UMiwgUElOVDMsIFBJTlQ0LCBQSU5UNSwgUElOVDYsIFBJTlQ3LAotCURNQUMwX0RFSSwgRE1BQzBfSEVJLCBETUFDMV9ERUksIERNQUMxX0hFSSwKLQlETUFDMl9ERUksIERNQUMyX0hFSSwgRE1BQzNfREVJLCBETUFDM19IRUksCi0JRE1BQzRfREVJLCBETUFDNF9IRUksIERNQUM1X0RFSSwgRE1BQzVfSEVJLAotCURNQUM2X0RFSSwgRE1BQzZfSEVJLCBETUFDN19ERUksIERNQUM3X0hFSSwKKwlETUFDMCwgRE1BQzEsIERNQUMyLCBETUFDMywgRE1BQzQsIERNQUM1LCBETUFDNiwgRE1BQzcsCiAJVVNCLCBMQ0RDLCBDTVQwLCBDTVQxLCBCU0MsIFdEVCwKLQlNVFUyX1RHSTBBLCBNVFUyX1RHSTBCLCBNVFUyX1RHSTBDLCBNVFUyX1RHSTBELAotCU1UVTJfVENJMFYsIE1UVTJfVEdJMEUsIE1UVTJfVEdJMEYsCi0JTVRVMl9UR0kxQSwgTVRVMl9UR0kxQiwgTVRVMl9UQ0kxViwgTVRVMl9UQ0kxVSwKLQlNVFUyX1RHSTJBLCBNVFUyX1RHSTJCLCBNVFUyX1RDSTJWLCBNVFUyX1RDSTJVLAotCU1UVTJfVEdJM0EsIE1UVTJfVEdJM0IsIE1UVTJfVEdJM0MsIE1UVTJfVEdJM0QsIE1UVTJfVENJM1YsCi0JTVRVMl9UR0k0QSwgTVRVMl9UR0k0QiwgTVRVMl9UR0k0QywgTVRVMl9UR0k0RCwgTVRVMl9UQ0k0ViwKKworCU1UVTBfQUJDRCwgTVRVMF9WRUYsIE1UVTFfQUIsIE1UVTFfVlUsIE1UVTJfQUIsIE1UVTJfVlUsCisJTVRVM19BQkNELCBNVFU0X0FCQ0QsIE1UVTJfVENJM1YsIE1UVTJfVENJNFYsCisKIAlBRENfQURJLAotCUlJQzMwX1NUUEksIElJQzMwX05BS0ksIElJQzMwX1JYSSwgSUlDMzBfVFhJLCBJSUMzMF9URUksCi0JSUlDMzFfU1RQSSwgSUlDMzFfTkFLSSwgSUlDMzFfUlhJLCBJSUMzMV9UWEksIElJQzMxX1RFSSwKLQlJSUMzMl9TVFBJLCBJSUMzMl9OQUtJLCBJSUMzMl9SWEksIElJQzMyX1RYSSwgSUlDMzJfVEVJLAotCUlJQzMzX1NUUEksIElJQzMzX05BS0ksIElJQzMzX1JYSSwgSUlDMzNfVFhJLCBJSUMzM19URUksCi0JU0NJRjBfQlJJLCBTQ0lGMF9FUkksIFNDSUYwX1JYSSwgU0NJRjBfVFhJLAotCVNDSUYxX0JSSSwgU0NJRjFfRVJJLCBTQ0lGMV9SWEksIFNDSUYxX1RYSSwKLQlTQ0lGMl9CUkksIFNDSUYyX0VSSSwgU0NJRjJfUlhJLCBTQ0lGMl9UWEksCi0JU0NJRjNfQlJJLCBTQ0lGM19FUkksIFNDSUYzX1JYSSwgU0NJRjNfVFhJLAotCVNTVTBfU1NFUkksIFNTVTBfU1NSWEksIFNTVTBfU1NUWEksCi0JU1NVMV9TU0VSSSwgU1NVMV9TU1JYSSwgU1NVMV9TU1RYSSwKKworCUlJQzMwLCBJSUMzMSwgSUlDMzIsIElJQzMzLAorCVNDSUYwLCBTQ0lGMSwgU0NJRjIsIFNDSUYzLAorCisJU1NVMCwgU1NVMSwKKwogCVNTSTBfU1NJSSwgU1NJMV9TU0lJLCBTU0kyX1NTSUksIFNTSTNfU1NJSSwKIAogCS8qIFJPTS1ERUMsIFNESEksIFNSQywgYW5kIElFQiBhcmUgU0g3MjYzIHNwZWNpZmljICovCi0JUk9NREVDX0lTWSwgUk9NREVDX0lFUlIsIFJPTURFQ19JQVJHLCBST01ERUNfSVNFQywgUk9NREVDX0lCVUYsCi0JUk9NREVDX0lSRUFEWSwKLQotCUZMQ1RMX0ZMU1RFSSwgRkxDVExfRkxURU5ESSwgRkxDVExfRkxUUkVRMEksIEZMQ1RMX0ZMVFJFUTFJLAotCi0JU0RISTMsIFNESEkwLCBTREhJMSwKLQotCVJUQ19BUk0sIFJUQ19QUkQsIFJUQ19DVVAsCi0JUkNBTjBfRVJTLCBSQ0FOMF9PVlIsIFJDQU4wX1JNMCwgUkNBTjBfUk0xLCBSQ0FOMF9TTEUsCi0JUkNBTjFfRVJTLCBSQ0FOMV9PVlIsIFJDQU4xX1JNMCwgUkNBTjFfUk0xLCBSQ0FOMV9TTEUsCi0KLQlTUkNfT1ZGLCBTUkNfT0RGSSwgU1JDX0lERUksIElFQkksCisJUk9NREVDLCBGTENUTCwgU0RISSwgUlRDLCBSQ0FOMCwgUkNBTjEsCisJU1JDLCBJRUJJLAogCiAJLyogaW50ZXJydXB0IGdyb3VwcyAqLwotCVBJTlQsIERNQUMwLCBETUFDMSwgRE1BQzIsIERNQUMzLCBETUFDNCwgRE1BQzUsIERNQUM2LCBETUFDNywKLQlNVFUwX0FCQ0QsIE1UVTBfVkVGLCBNVFUxX0FCLCBNVFUxX1ZVLCBNVFUyX0FCLCBNVFUyX1ZVLAotCU1UVTNfQUJDRCwgTVRVNF9BQkNELAotCUlJQzMwLCBJSUMzMSwgSUlDMzIsIElJQzMzLCBTQ0lGMCwgU0NJRjEsIFNDSUYyLCBTQ0lGMywKLQlTU1UwLCBTU1UxLCBST01ERUMsIFNESEksIEZMQ1RMLCBSVEMsIFJDQU4wLCBSQ0FOMSwgU1JDCisJUElOVCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaW50Y192ZWN0IHZlY3RvcnNbXSBfX2luaXRkYXRhID0gewpAQCAtNzMsNzkgKzUwLDgwIEBACiAJSU5UQ19JUlEoUElOVDIsIDgyKSwgSU5UQ19JUlEoUElOVDMsIDgzKSwKIAlJTlRDX0lSUShQSU5UNCwgODQpLCBJTlRDX0lSUShQSU5UNSwgODUpLAogCUlOVENfSVJRKFBJTlQ2LCA4NiksIElOVENfSVJRKFBJTlQ3LCA4NyksCi0JSU5UQ19JUlEoRE1BQzBfREVJLCAxMDgpLCBJTlRDX0lSUShETUFDMF9IRUksIDEwOSksCi0JSU5UQ19JUlEoRE1BQzFfREVJLCAxMTIpLCBJTlRDX0lSUShETUFDMV9IRUksIDExMyksCi0JSU5UQ19JUlEoRE1BQzJfREVJLCAxMTYpLCBJTlRDX0lSUShETUFDMl9IRUksIDExNyksCi0JSU5UQ19JUlEoRE1BQzNfREVJLCAxMjApLCBJTlRDX0lSUShETUFDM19IRUksIDEyMSksCi0JSU5UQ19JUlEoRE1BQzRfREVJLCAxMjQpLCBJTlRDX0lSUShETUFDNF9IRUksIDEyNSksCi0JSU5UQ19JUlEoRE1BQzVfREVJLCAxMjgpLCBJTlRDX0lSUShETUFDNV9IRUksIDEyOSksCi0JSU5UQ19JUlEoRE1BQzZfREVJLCAxMzIpLCBJTlRDX0lSUShETUFDNl9IRUksIDEzMyksCi0JSU5UQ19JUlEoRE1BQzdfREVJLCAxMzYpLCBJTlRDX0lSUShETUFDN19IRUksIDEzNyksCisJSU5UQ19JUlEoRE1BQzAsIDEwOCksIElOVENfSVJRKERNQUMwLCAxMDkpLAorCUlOVENfSVJRKERNQUMxLCAxMTIpLCBJTlRDX0lSUShETUFDMSwgMTEzKSwKKwlJTlRDX0lSUShETUFDMiwgMTE2KSwgSU5UQ19JUlEoRE1BQzIsIDExNyksCisJSU5UQ19JUlEoRE1BQzMsIDEyMCksIElOVENfSVJRKERNQUMzLCAxMjEpLAorCUlOVENfSVJRKERNQUM0LCAxMjQpLCBJTlRDX0lSUShETUFDNCwgMTI1KSwKKwlJTlRDX0lSUShETUFDNSwgMTI4KSwgSU5UQ19JUlEoRE1BQzUsIDEyOSksCisJSU5UQ19JUlEoRE1BQzYsIDEzMiksIElOVENfSVJRKERNQUM2LCAxMzMpLAorCUlOVENfSVJRKERNQUM3LCAxMzYpLCBJTlRDX0lSUShETUFDNywgMTM3KSwKIAlJTlRDX0lSUShVU0IsIDE0MCksIElOVENfSVJRKExDREMsIDE0MSksCiAJSU5UQ19JUlEoQ01UMCwgMTQyKSwgSU5UQ19JUlEoQ01UMSwgMTQzKSwKIAlJTlRDX0lSUShCU0MsIDE0NCksIElOVENfSVJRKFdEVCwgMTQ1KSwKLQlJTlRDX0lSUShNVFUyX1RHSTBBLCAxNDYpLCBJTlRDX0lSUShNVFUyX1RHSTBCLCAxNDcpLAotCUlOVENfSVJRKE1UVTJfVEdJMEMsIDE0OCksIElOVENfSVJRKE1UVTJfVEdJMEQsIDE0OSksCi0JSU5UQ19JUlEoTVRVMl9UQ0kwViwgMTUwKSwKLQlJTlRDX0lSUShNVFUyX1RHSTBFLCAxNTEpLCBJTlRDX0lSUShNVFUyX1RHSTBGLCAxNTIpLAotCUlOVENfSVJRKE1UVTJfVEdJMUEsIDE1MyksIElOVENfSVJRKE1UVTJfVEdJMUIsIDE1NCksCi0JSU5UQ19JUlEoTVRVMl9UQ0kxViwgMTU1KSwgSU5UQ19JUlEoTVRVMl9UQ0kxVSwgMTU2KSwKLQlJTlRDX0lSUShNVFUyX1RHSTJBLCAxNTcpLCBJTlRDX0lSUShNVFUyX1RHSTJCLCAxNTgpLAotCUlOVENfSVJRKE1UVTJfVENJMlYsIDE1OSksIElOVENfSVJRKE1UVTJfVENJMlUsIDE2MCksCi0JSU5UQ19JUlEoTVRVMl9UR0kzQSwgMTYxKSwgSU5UQ19JUlEoTVRVMl9UR0kzQiwgMTYyKSwKLQlJTlRDX0lSUShNVFUyX1RHSTNDLCAxNjMpLCBJTlRDX0lSUShNVFUyX1RHSTNELCAxNjQpLAorCUlOVENfSVJRKE1UVTBfQUJDRCwgMTQ2KSwgSU5UQ19JUlEoTVRVMF9BQkNELCAxNDcpLAorCUlOVENfSVJRKE1UVTBfQUJDRCwgMTQ4KSwgSU5UQ19JUlEoTVRVMF9BQkNELCAxNDkpLAorCUlOVENfSVJRKE1UVTBfVkVGLCAxNTApLAorCUlOVENfSVJRKE1UVTBfVkVGLCAxNTEpLCBJTlRDX0lSUShNVFUwX1ZFRiwgMTUyKSwKKwlJTlRDX0lSUShNVFUxX0FCLCAxNTMpLCBJTlRDX0lSUShNVFUxX0FCLCAxNTQpLAorCUlOVENfSVJRKE1UVTFfVlUsIDE1NSksIElOVENfSVJRKE1UVTFfVlUsIDE1NiksCisJSU5UQ19JUlEoTVRVMl9BQiwgMTU3KSwgSU5UQ19JUlEoTVRVMl9BQiwgMTU4KSwKKwlJTlRDX0lSUShNVFUyX1ZVLCAxNTkpLCBJTlRDX0lSUShNVFUyX1ZVLCAxNjApLAorCUlOVENfSVJRKE1UVTNfQUJDRCwgMTYxKSwgSU5UQ19JUlEoTVRVM19BQkNELCAxNjIpLAorCUlOVENfSVJRKE1UVTNfQUJDRCwgMTYzKSwgSU5UQ19JUlEoTVRVM19BQkNELCAxNjQpLAogCUlOVENfSVJRKE1UVTJfVENJM1YsIDE2NSksCi0JSU5UQ19JUlEoTVRVMl9UR0k0QSwgMTY2KSwgSU5UQ19JUlEoTVRVMl9UR0k0QiwgMTY3KSwKLQlJTlRDX0lSUShNVFUyX1RHSTRDLCAxNjgpLCBJTlRDX0lSUShNVFUyX1RHSTRELCAxNjkpLAorCUlOVENfSVJRKE1UVTRfQUJDRCwgMTY2KSwgSU5UQ19JUlEoTVRVNF9BQkNELCAxNjcpLAorCUlOVENfSVJRKE1UVTRfQUJDRCwgMTY4KSwgSU5UQ19JUlEoTVRVNF9BQkNELCAxNjkpLAogCUlOVENfSVJRKE1UVTJfVENJNFYsIDE3MCksCiAJSU5UQ19JUlEoQURDX0FESSwgMTcxKSwKLQlJTlRDX0lSUShJSUMzMF9TVFBJLCAxNzIpLCBJTlRDX0lSUShJSUMzMF9OQUtJLCAxNzMpLAotCUlOVENfSVJRKElJQzMwX1JYSSwgMTc0KSwgSU5UQ19JUlEoSUlDMzBfVFhJLCAxNzUpLAotCUlOVENfSVJRKElJQzMwX1RFSSwgMTc2KSwKLQlJTlRDX0lSUShJSUMzMV9TVFBJLCAxNzcpLCBJTlRDX0lSUShJSUMzMV9OQUtJLCAxNzgpLAotCUlOVENfSVJRKElJQzMxX1JYSSwgMTc5KSwgSU5UQ19JUlEoSUlDMzFfVFhJLCAxODApLAotCUlOVENfSVJRKElJQzMxX1RFSSwgMTgxKSwKLQlJTlRDX0lSUShJSUMzMl9TVFBJLCAxODIpLCBJTlRDX0lSUShJSUMzMl9OQUtJLCAxODMpLAotCUlOVENfSVJRKElJQzMyX1JYSSwgMTg0KSwgSU5UQ19JUlEoSUlDMzJfVFhJLCAxODUpLAotCUlOVENfSVJRKElJQzMyX1RFSSwgMTg2KSwKLQlJTlRDX0lSUShJSUMzM19TVFBJLCAxODcpLCBJTlRDX0lSUShJSUMzM19OQUtJLCAxODgpLAotCUlOVENfSVJRKElJQzMzX1JYSSwgMTg5KSwgSU5UQ19JUlEoSUlDMzNfVFhJLCAxOTApLAotCUlOVENfSVJRKElJQzMzX1RFSSwgMTkxKSwKLQlJTlRDX0lSUShTQ0lGMF9CUkksIDE5MiksIElOVENfSVJRKFNDSUYwX0VSSSwgMTkzKSwKLQlJTlRDX0lSUShTQ0lGMF9SWEksIDE5NCksIElOVENfSVJRKFNDSUYwX1RYSSwgMTk1KSwKLQlJTlRDX0lSUShTQ0lGMV9CUkksIDE5NiksIElOVENfSVJRKFNDSUYxX0VSSSwgMTk3KSwKLQlJTlRDX0lSUShTQ0lGMV9SWEksIDE5OCksIElOVENfSVJRKFNDSUYxX1RYSSwgMTk5KSwKLQlJTlRDX0lSUShTQ0lGMl9CUkksIDIwMCksIElOVENfSVJRKFNDSUYyX0VSSSwgMjAxKSwKLQlJTlRDX0lSUShTQ0lGMl9SWEksIDIwMiksIElOVENfSVJRKFNDSUYyX1RYSSwgMjAzKSwKLQlJTlRDX0lSUShTQ0lGM19CUkksIDIwNCksIElOVENfSVJRKFNDSUYzX0VSSSwgMjA1KSwKLQlJTlRDX0lSUShTQ0lGM19SWEksIDIwNiksIElOVENfSVJRKFNDSUYzX1RYSSwgMjA3KSwKLQlJTlRDX0lSUShTU1UwX1NTRVJJLCAyMDgpLCBJTlRDX0lSUShTU1UwX1NTUlhJLCAyMDkpLAotCUlOVENfSVJRKFNTVTBfU1NUWEksIDIxMCksCi0JSU5UQ19JUlEoU1NVMV9TU0VSSSwgMjExKSwgSU5UQ19JUlEoU1NVMV9TU1JYSSwgMjEyKSwKLQlJTlRDX0lSUShTU1UxX1NTVFhJLCAyMTMpLAorCUlOVENfSVJRKElJQzMwLCAxNzIpLCBJTlRDX0lSUShJSUMzMCwgMTczKSwKKwlJTlRDX0lSUShJSUMzMCwgMTc0KSwgSU5UQ19JUlEoSUlDMzAsIDE3NSksCisJSU5UQ19JUlEoSUlDMzAsIDE3NiksCisJSU5UQ19JUlEoSUlDMzEsIDE3NyksIElOVENfSVJRKElJQzMxLCAxNzgpLAorCUlOVENfSVJRKElJQzMxLCAxNzkpLCBJTlRDX0lSUShJSUMzMSwgMTgwKSwKKwlJTlRDX0lSUShJSUMzMSwgMTgxKSwKKwlJTlRDX0lSUShJSUMzMiwgMTgyKSwgSU5UQ19JUlEoSUlDMzIsIDE4MyksCisJSU5UQ19JUlEoSUlDMzIsIDE4NCksIElOVENfSVJRKElJQzMyLCAxODUpLAorCUlOVENfSVJRKElJQzMyLCAxODYpLAorCUlOVENfSVJRKElJQzMzLCAxODcpLCBJTlRDX0lSUShJSUMzMywgMTg4KSwKKwlJTlRDX0lSUShJSUMzMywgMTg5KSwgSU5UQ19JUlEoSUlDMzMsIDE5MCksCisJSU5UQ19JUlEoSUlDMzMsIDE5MSksCisJSU5UQ19JUlEoU0NJRjAsIDE5MiksIElOVENfSVJRKFNDSUYwLCAxOTMpLAorCUlOVENfSVJRKFNDSUYwLCAxOTQpLCBJTlRDX0lSUShTQ0lGMCwgMTk1KSwKKwlJTlRDX0lSUShTQ0lGMSwgMTk2KSwgSU5UQ19JUlEoU0NJRjEsIDE5NyksCisJSU5UQ19JUlEoU0NJRjEsIDE5OCksIElOVENfSVJRKFNDSUYxLCAxOTkpLAorCUlOVENfSVJRKFNDSUYyLCAyMDApLCBJTlRDX0lSUShTQ0lGMiwgMjAxKSwKKwlJTlRDX0lSUShTQ0lGMiwgMjAyKSwgSU5UQ19JUlEoU0NJRjIsIDIwMyksCisJSU5UQ19JUlEoU0NJRjMsIDIwNCksIElOVENfSVJRKFNDSUYzLCAyMDUpLAorCUlOVENfSVJRKFNDSUYzLCAyMDYpLCBJTlRDX0lSUShTQ0lGMywgMjA3KSwKKwlJTlRDX0lSUShTU1UwLCAyMDgpLCBJTlRDX0lSUShTU1UwLCAyMDkpLAorCUlOVENfSVJRKFNTVTAsIDIxMCksCisJSU5UQ19JUlEoU1NVMSwgMjExKSwgSU5UQ19JUlEoU1NVMSwgMjEyKSwKKwlJTlRDX0lSUShTU1UxLCAyMTMpLAogCUlOVENfSVJRKFNTSTBfU1NJSSwgMjE0KSwgSU5UQ19JUlEoU1NJMV9TU0lJLCAyMTUpLAogCUlOVENfSVJRKFNTSTJfU1NJSSwgMjE2KSwgSU5UQ19JUlEoU1NJM19TU0lJLCAyMTcpLAotCUlOVENfSVJRKEZMQ1RMX0ZMU1RFSSwgMjI0KSwgSU5UQ19JUlEoRkxDVExfRkxURU5ESSwgMjI1KSwKLQlJTlRDX0lSUShGTENUTF9GTFRSRVEwSSwgMjI2KSwgSU5UQ19JUlEoRkxDVExfRkxUUkVRMUksIDIyNyksCi0JSU5UQ19JUlEoUlRDX0FSTSwgMjMxKSwgSU5UQ19JUlEoUlRDX1BSRCwgMjMyKSwKLQlJTlRDX0lSUShSVENfQ1VQLCAyMzMpLAotCUlOVENfSVJRKFJDQU4wX0VSUywgMjM0KSwgSU5UQ19JUlEoUkNBTjBfT1ZSLCAyMzUpLAotCUlOVENfSVJRKFJDQU4wX1JNMCwgMjM2KSwgSU5UQ19JUlEoUkNBTjBfUk0xLCAyMzcpLAotCUlOVENfSVJRKFJDQU4wX1NMRSwgMjM4KSwKLQlJTlRDX0lSUShSQ0FOMV9FUlMsIDIzOSksIElOVENfSVJRKFJDQU4xX09WUiwgMjQwKSwKLQlJTlRDX0lSUShSQ0FOMV9STTAsIDI0MSksIElOVENfSVJRKFJDQU4xX1JNMSwgMjQyKSwKLQlJTlRDX0lSUShSQ0FOMV9TTEUsIDI0MyksCisJSU5UQ19JUlEoRkxDVEwsIDIyNCksIElOVENfSVJRKEZMQ1RMLCAyMjUpLAorCUlOVENfSVJRKEZMQ1RMLCAyMjYpLCBJTlRDX0lSUShGTENUTCwgMjI3KSwKKwlJTlRDX0lSUShSVEMsIDIzMSksIElOVENfSVJRKFJUQywgMjMyKSwKKwlJTlRDX0lSUShSVEMsIDIzMyksCisJSU5UQ19JUlEoUkNBTjAsIDIzNCksIElOVENfSVJRKFJDQU4wLCAyMzUpLAorCUlOVENfSVJRKFJDQU4wLCAyMzYpLCBJTlRDX0lSUShSQ0FOMCwgMjM3KSwKKwlJTlRDX0lSUShSQ0FOMCwgMjM4KSwKKwlJTlRDX0lSUShSQ0FOMSwgMjM5KSwgSU5UQ19JUlEoUkNBTjEsIDI0MCksCisJSU5UQ19JUlEoUkNBTjEsIDI0MSksIElOVENfSVJRKFJDQU4xLCAyNDIpLAorCUlOVENfSVJRKFJDQU4xLCAyNDMpLAogCiAJLyogU0g3MjYzLXNwZWNpZmljIHRyYXNoICovCiAjaWZkZWYgQ09ORklHX0NQVV9TVUJUWVBFX1NINzI2MwotCUlOVENfSVJRKFJPTURFQ19JU1ksIDIxOCksIElOVENfSVJRKFJPTURFQ19JRVJSLCAyMTkpLAotCUlOVENfSVJRKFJPTURFQ19JQVJHLCAyMjApLCBJTlRDX0lSUShST01ERUNfSVNFQywgMjIxKSwKLQlJTlRDX0lSUShST01ERUNfSUJVRiwgMjIyKSwgSU5UQ19JUlEoUk9NREVDX0lSRUFEWSwgMjIzKSwKKwlJTlRDX0lSUShST01ERUMsIDIxOCksIElOVENfSVJRKFJPTURFQywgMjE5KSwKKwlJTlRDX0lSUShST01ERUMsIDIyMCksIElOVENfSVJRKFJPTURFQywgMjIxKSwKKwlJTlRDX0lSUShST01ERUMsIDIyMiksIElOVENfSVJRKFJPTURFQywgMjIzKSwKIAotCUlOVENfSVJRKFNESEkzLCAyMjgpLCBJTlRDX0lSUShTREhJMCwgMjI5KSwgSU5UQ19JUlEoU0RISTEsIDIzMCksCisJSU5UQ19JUlEoU0RISSwgMjI4KSwgSU5UQ19JUlEoU0RISSwgMjI5KSwKKwlJTlRDX0lSUShTREhJLCAyMzApLAogCi0JSU5UQ19JUlEoU1JDX09WRiwgMjQ0KSwgSU5UQ19JUlEoU1JDX09ERkksIDI0NSksCi0JSU5UQ19JUlEoU1JDX0lERUksIDI0NiksCisJSU5UQ19JUlEoU1JDLCAyNDQpLCBJTlRDX0lSUShTUkMsIDI0NSksCisJSU5UQ19JUlEoU1JDLCAyNDYpLAogCiAJSU5UQ19JUlEoSUVCSSwgMjQ3KSwKICNlbmRpZgpAQCAtMTU0LDUwICsxMzIsNiBAQAogc3RhdGljIHN0cnVjdCBpbnRjX2dyb3VwIGdyb3Vwc1tdIF9faW5pdGRhdGEgPSB7CiAJSU5UQ19HUk9VUChQSU5ULCBQSU5UMCwgUElOVDEsIFBJTlQyLCBQSU5UMywKIAkJICAgUElOVDQsIFBJTlQ1LCBQSU5UNiwgUElOVDcpLAotCUlOVENfR1JPVVAoRE1BQzAsIERNQUMwX0RFSSwgRE1BQzBfSEVJKSwKLQlJTlRDX0dST1VQKERNQUMxLCBETUFDMV9ERUksIERNQUMxX0hFSSksCi0JSU5UQ19HUk9VUChETUFDMiwgRE1BQzJfREVJLCBETUFDMl9IRUkpLAotCUlOVENfR1JPVVAoRE1BQzMsIERNQUMzX0RFSSwgRE1BQzNfSEVJKSwKLQlJTlRDX0dST1VQKERNQUM0LCBETUFDNF9ERUksIERNQUM0X0hFSSksCi0JSU5UQ19HUk9VUChETUFDNSwgRE1BQzVfREVJLCBETUFDNV9IRUkpLAotCUlOVENfR1JPVVAoRE1BQzYsIERNQUM2X0RFSSwgRE1BQzZfSEVJKSwKLQlJTlRDX0dST1VQKERNQUM3LCBETUFDN19ERUksIERNQUM3X0hFSSksCi0JSU5UQ19HUk9VUChNVFUwX0FCQ0QsIE1UVTJfVEdJMEEsIE1UVTJfVEdJMEIsIE1UVTJfVEdJMEMsIE1UVTJfVEdJMEQpLAotCUlOVENfR1JPVVAoTVRVMF9WRUYsIE1UVTJfVENJMFYsIE1UVTJfVEdJMEUsIE1UVTJfVEdJMEYpLAotCUlOVENfR1JPVVAoTVRVMV9BQiwgTVRVMl9UR0kxQSwgTVRVMl9UR0kxQiksCi0JSU5UQ19HUk9VUChNVFUxX1ZVLCBNVFUyX1RDSTFWLCBNVFUyX1RDSTFVKSwKLQlJTlRDX0dST1VQKE1UVTJfQUIsIE1UVTJfVEdJMkEsIE1UVTJfVEdJMkIpLAotCUlOVENfR1JPVVAoTVRVMl9WVSwgTVRVMl9UQ0kyViwgTVRVMl9UQ0kyVSksCi0JSU5UQ19HUk9VUChNVFUzX0FCQ0QsIE1UVTJfVEdJM0EsIE1UVTJfVEdJM0IsIE1UVTJfVEdJM0MsIE1UVTJfVEdJM0QpLAotCUlOVENfR1JPVVAoTVRVNF9BQkNELCBNVFUyX1RHSTRBLCBNVFUyX1RHSTRCLCBNVFUyX1RHSTRDLCBNVFUyX1RHSTREKSwKLQlJTlRDX0dST1VQKElJQzMwLCBJSUMzMF9TVFBJLCBJSUMzMF9OQUtJLCBJSUMzMF9SWEksIElJQzMwX1RYSSwKLQkJICAgSUlDMzBfVEVJKSwKLQlJTlRDX0dST1VQKElJQzMxLCBJSUMzMV9TVFBJLCBJSUMzMV9OQUtJLCBJSUMzMV9SWEksIElJQzMxX1RYSSwKLQkJICAgSUlDMzFfVEVJKSwKLQlJTlRDX0dST1VQKElJQzMyLCBJSUMzMl9TVFBJLCBJSUMzMl9OQUtJLCBJSUMzMl9SWEksIElJQzMyX1RYSSwKLQkJICAgSUlDMzJfVEVJKSwKLQlJTlRDX0dST1VQKElJQzMzLCBJSUMzM19TVFBJLCBJSUMzM19OQUtJLCBJSUMzM19SWEksIElJQzMzX1RYSSwKLQkJICAgSUlDMzNfVEVJKSwKLQlJTlRDX0dST1VQKFNDSUYwLCBTQ0lGMF9CUkksIFNDSUYwX0VSSSwgU0NJRjBfUlhJLCBTQ0lGMF9UWEkpLAotCUlOVENfR1JPVVAoU0NJRjEsIFNDSUYxX0JSSSwgU0NJRjFfRVJJLCBTQ0lGMV9SWEksIFNDSUYxX1RYSSksCi0JSU5UQ19HUk9VUChTQ0lGMiwgU0NJRjJfQlJJLCBTQ0lGMl9FUkksIFNDSUYyX1JYSSwgU0NJRjJfVFhJKSwKLQlJTlRDX0dST1VQKFNDSUYzLCBTQ0lGM19CUkksIFNDSUYzX0VSSSwgU0NJRjNfUlhJLCBTQ0lGM19UWEkpLAotCUlOVENfR1JPVVAoU1NVMCwgU1NVMF9TU0VSSSwgU1NVMF9TU1JYSSwgU1NVMF9TU1RYSSksCi0JSU5UQ19HUk9VUChTU1UxLCBTU1UxX1NTRVJJLCBTU1UxX1NTUlhJLCBTU1UxX1NTVFhJKSwKLQlJTlRDX0dST1VQKEZMQ1RMLCBGTENUTF9GTFNURUksIEZMQ1RMX0ZMVEVOREksIEZMQ1RMX0ZMVFJFUTBJLAotCQkgICBGTENUTF9GTFRSRVExSSksCi0JSU5UQ19HUk9VUChSVEMsIFJUQ19BUk0sIFJUQ19QUkQsIFJUQ19DVVApLAotCUlOVENfR1JPVVAoUkNBTjAsIFJDQU4wX0VSUywgUkNBTjBfT1ZSLCBSQ0FOMF9STTAsIFJDQU4wX1JNMSwKLQkJICAgUkNBTjBfU0xFKSwKLQlJTlRDX0dST1VQKFJDQU4xLCBSQ0FOMV9FUlMsIFJDQU4xX09WUiwgUkNBTjFfUk0wLCBSQ0FOMV9STTEsCi0JCSAgIFJDQU4xX1NMRSksCi0KLSNpZmRlZiBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjYzCi0JSU5UQ19HUk9VUChST01ERUMsIFJPTURFQ19JU1ksIFJPTURFQ19JRVJSLCBST01ERUNfSUFSRywKLQkJICAgUk9NREVDX0lTRUMsIFJPTURFQ19JQlVGLCBST01ERUNfSVJFQURZKSwKLQlJTlRDX0dST1VQKFNESEksIFNESEkzLCBTREhJMCwgU0RISTEpLAotCUlOVENfR1JPVVAoU1JDLCBTUkNfT1ZGLCBTUkNfT0RGSSwgU1JDX0lERUkpLAotI2VuZGlmCiB9OwogCiBzdGF0aWMgc3RydWN0IGludGNfcHJpb19yZWcgcHJpb19yZWdpc3RlcnNbXSBfX2luaXRkYXRhID0gewpAQCAtMjQyLDIyICsxNzYsMjIgQEAKIAkJLm1hcGJhc2UJPSAweGZmZmU4MDAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0gIHsgMTkzLCAxOTQsIDE5NSwgMTkyIH0sCisJCS5pcnFzCQk9ICB7IDE5MiwgMTkyLCAxOTIsIDE5MiB9LAogCX0sIHsKIAkJLm1hcGJhc2UJPSAweGZmZmU4ODAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0gIHsgMTk3LCAxOTgsIDE5OSwgMTk2IH0sCisJCS5pcnFzCQk9ICB7IDE5NiwgMTk2LCAxOTYsIDE5NiB9LAogCX0sIHsKIAkJLm1hcGJhc2UJPSAweGZmZmU5MDAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0gIHsgMjAxLCAyMDIsIDIwMywgMjAwIH0sCisJCS5pcnFzCQk9ICB7IDIwMCwgMjAwLCAyMDAsIDIwMCB9LAogCX0sIHsKIAkJLm1hcGJhc2UJPSAweGZmZmU5ODAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0gIHsgMjA1LCAyMDYsIDIwNywgMjA0IH0sCisJCS5pcnFzCQk9ICB7IDIwNCwgMjA0LCAyMDQsIDIwNCB9LAogCX0sIHsKIAkJLmZsYWdzID0gMCwKIAl9CkBAIC0yNzgsMTcgKzIxMiw3IEBACiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfSU8sCiAJfSwKIAlbMV0gPSB7Ci0JCS8qIFBlcmlvZCBJUlEgKi8KLQkJLnN0YXJ0CT0gMjMyLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotCVsyXSA9IHsKLQkJLyogQ2FycnkgSVJRICovCi0JCS5zdGFydAk9IDIzMywKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLQlbM10gPSB7Ci0JCS8qIEFsYXJtIElSUSAqLworCQkvKiBTaGFyZWQgUGVyaW9kL0NhcnJ5L0FsYXJtIElSUSAqLwogCQkuc3RhcnQJPSAyMzEsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAogCX0sCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9zZXR1cC1zaDcyMDYuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL3NldHVwLXNoNzIwNi5jCmluZGV4IGU2ZDRlYzQuLmM0NmE4MzUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL3NldHVwLXNoNzIwNi5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL3NldHVwLXNoNzIwNi5jCkBAIC0yLDYgKzIsNyBAQAogICogU0g3MjA2IFNldHVwCiAgKgogICogIENvcHlyaWdodCAoQykgMjAwNiAgWW9zaGlub3JpIFNhdG8KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgIFBhdWwgTXVuZHQKICAqCiAgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQpAQCAtMTksMzQgKzIwLDIzIEBACiAJSVJRMCwgSVJRMSwgSVJRMiwgSVJRMywgSVJRNCwgSVJRNSwgSVJRNiwgSVJRNywKIAlQSU5UMCwgUElOVDEsIFBJTlQyLCBQSU5UMywgUElOVDQsIFBJTlQ1LCBQSU5UNiwgUElOVDcsCiAJQURDX0FESTAsIEFEQ19BREkxLAotCURNQUMwX0RFSSwgRE1BQzBfSEVJLCBETUFDMV9ERUksIERNQUMxX0hFSSwKLQlETUFDMl9ERUksIERNQUMyX0hFSSwgRE1BQzNfREVJLCBETUFDM19IRUksCi0JRE1BQzRfREVJLCBETUFDNF9IRUksIERNQUM1X0RFSSwgRE1BQzVfSEVJLAotCURNQUM2X0RFSSwgRE1BQzZfSEVJLCBETUFDN19ERUksIERNQUM3X0hFSSwKLQlDTVQwLCBDTVQxLCBCU0MsIFdEVCwKLQlNVFUyX1RHSTBBLCBNVFUyX1RHSTBCLCBNVFUyX1RHSTBDLCBNVFUyX1RHSTBELAotCU1UVTJfVENJMFYsIE1UVTJfVEdJMEUsIE1UVTJfVEdJMEYsCi0JTVRVMl9UR0kxQSwgTVRVMl9UR0kxQiwgTVRVMl9UQ0kxViwgTVRVMl9UQ0kxVSwKLQlNVFUyX1RHSTJBLCBNVFUyX1RHSTJCLCBNVFUyX1RDSTJWLCBNVFUyX1RDSTJVLAotCU1UVTJfVEdJM0EsIE1UVTJfVEdJM0IsIE1UVTJfVEdJM0MsIE1UVTJfVEdJM0QsIE1UVTJfVENJM1YsCi0JTVRVMl9UR0k0QSwgTVRVMl9UR0k0QiwgTVRVMl9UR0k0QywgTVRVMl9UR0k0RCwgTVRVMl9UQ0k0ViwKLQlNVFUyX1RHSTVVLCBNVFUyX1RHSTVWLCBNVFUyX1RHSTVXLAotCVBPRTJfT0VJMSwgUE9FMl9PRUkyLAotCU1UVTJTX1RHSTNBLCBNVFUyU19UR0kzQiwgTVRVMlNfVEdJM0MsIE1UVTJTX1RHSTNELCBNVFUyU19UQ0kzViwKLQlNVFUyU19UR0k0QSwgTVRVMlNfVEdJNEIsIE1UVTJTX1RHSTRDLCBNVFUyU19UR0k0RCwgTVRVMlNfVENJNFYsCi0JTVRVMlNfVEdJNVUsIE1UVTJTX1RHSTVWLCBNVFUyU19UR0k1VywKLQlQT0UyX09FSTMsCi0JSUlDM19TVFBJLCBJSUMzX05BS0ksIElJQzNfUlhJLCBJSUMzX1RYSSwgSUlDM19URUksCi0JU0NJRjBfQlJJLCBTQ0lGMF9FUkksIFNDSUYwX1JYSSwgU0NJRjBfVFhJLAotCVNDSUYxX0JSSSwgU0NJRjFfRVJJLCBTQ0lGMV9SWEksIFNDSUYxX1RYSSwKLQlTQ0lGMl9CUkksIFNDSUYyX0VSSSwgU0NJRjJfUlhJLCBTQ0lGMl9UWEksCi0JU0NJRjNfQlJJLCBTQ0lGM19FUkksIFNDSUYzX1JYSSwgU0NJRjNfVFhJLAogCi0JLyogaW50ZXJydXB0IGdyb3VwcyAqLwotCVBJTlQsIERNQUMwLCBETUFDMSwgRE1BQzIsIERNQUMzLCBETUFDNCwgRE1BQzUsIERNQUM2LCBETUFDNywKKwlETUFDMCwgRE1BQzEsIERNQUMyLCBETUFDMywgRE1BQzQsIERNQUM1LCBETUFDNiwgRE1BQzcsCisKIAlNVFUwX0FCQ0QsIE1UVTBfVkVGLCBNVFUxX0FCLCBNVFUxX1ZVLCBNVFUyX0FCLCBNVFUyX1ZVLAogCU1UVTNfQUJDRCwgTVRVNF9BQkNELCBNVFU1LCBQT0UyXzEyLCBNVFUzU19BQkNELCBNVFU0U19BQkNELCBNVFU1UywKLQlJSUMzLCBTQ0lGMCwgU0NJRjEsIFNDSUYyLCBTQ0lGMywKKwlJSUMzLAorCisJQ01UMCwgQ01UMSwgQlNDLCBXRFQsCisKKwlNVFUyX1RDSTNWLCBNVFUyX1RDSTRWLCBNVFUyU19UQ0kzViwgTVRVMlNfVENJNFYsCisKKwlQT0UyX09FSTMsCisKKwlTQ0lGMCwgU0NJRjEsIFNDSUYyLCBTQ0lGMywKKworCS8qIGludGVycnVwdCBncm91cHMgKi8KKwlQSU5ULAogfTsKIAogc3RhdGljIHN0cnVjdCBpbnRjX3ZlY3QgdmVjdG9yc1tdIF9faW5pdGRhdGEgPSB7CkBAIC01OSw4NiArNDksNTggQEAKIAlJTlRDX0lSUShQSU5UNCwgODQpLCBJTlRDX0lSUShQSU5UNSwgODUpLAogCUlOVENfSVJRKFBJTlQ2LCA4NiksIElOVENfSVJRKFBJTlQ3LCA4NyksCiAJSU5UQ19JUlEoQURDX0FESTAsIDkyKSwgSU5UQ19JUlEoQURDX0FESTEsIDk2KSwKLQlJTlRDX0lSUShETUFDMF9ERUksIDEwOCksIElOVENfSVJRKERNQUMwX0hFSSwgMTA5KSwKLQlJTlRDX0lSUShETUFDMV9ERUksIDExMiksIElOVENfSVJRKERNQUMxX0hFSSwgMTEzKSwKLQlJTlRDX0lSUShETUFDMl9ERUksIDExNiksIElOVENfSVJRKERNQUMyX0hFSSwgMTE3KSwKLQlJTlRDX0lSUShETUFDM19ERUksIDEyMCksIElOVENfSVJRKERNQUMzX0hFSSwgMTIxKSwKLQlJTlRDX0lSUShETUFDNF9ERUksIDEyNCksIElOVENfSVJRKERNQUM0X0hFSSwgMTI1KSwKLQlJTlRDX0lSUShETUFDNV9ERUksIDEyOCksIElOVENfSVJRKERNQUM1X0hFSSwgMTI5KSwKLQlJTlRDX0lSUShETUFDNl9ERUksIDEzMiksIElOVENfSVJRKERNQUM2X0hFSSwgMTMzKSwKLQlJTlRDX0lSUShETUFDN19ERUksIDEzNiksIElOVENfSVJRKERNQUM3X0hFSSwgMTM3KSwKKwlJTlRDX0lSUShETUFDMCwgMTA4KSwgSU5UQ19JUlEoRE1BQzAsIDEwOSksCisJSU5UQ19JUlEoRE1BQzEsIDExMiksIElOVENfSVJRKERNQUMxLCAxMTMpLAorCUlOVENfSVJRKERNQUMyLCAxMTYpLCBJTlRDX0lSUShETUFDMiwgMTE3KSwKKwlJTlRDX0lSUShETUFDMywgMTIwKSwgSU5UQ19JUlEoRE1BQzMsIDEyMSksCisJSU5UQ19JUlEoRE1BQzQsIDEyNCksIElOVENfSVJRKERNQUM0LCAxMjUpLAorCUlOVENfSVJRKERNQUM1LCAxMjgpLCBJTlRDX0lSUShETUFDNSwgMTI5KSwKKwlJTlRDX0lSUShETUFDNiwgMTMyKSwgSU5UQ19JUlEoRE1BQzYsIDEzMyksCisJSU5UQ19JUlEoRE1BQzcsIDEzNiksIElOVENfSVJRKERNQUM3LCAxMzcpLAogCUlOVENfSVJRKENNVDAsIDE0MCksIElOVENfSVJRKENNVDEsIDE0NCksCiAJSU5UQ19JUlEoQlNDLCAxNDgpLCBJTlRDX0lSUShXRFQsIDE1MiksCi0JSU5UQ19JUlEoTVRVMl9UR0kwQSwgMTU2KSwgSU5UQ19JUlEoTVRVMl9UR0kwQiwgMTU3KSwKLQlJTlRDX0lSUShNVFUyX1RHSTBDLCAxNTgpLCBJTlRDX0lSUShNVFUyX1RHSTBELCAxNTkpLAotCUlOVENfSVJRKE1UVTJfVENJMFYsIDE2MCksCi0JSU5UQ19JUlEoTVRVMl9UR0kwRSwgMTYxKSwgSU5UQ19JUlEoTVRVMl9UR0kwRiwgMTYyKSwKLQlJTlRDX0lSUShNVFUyX1RHSTFBLCAxNjQpLCBJTlRDX0lSUShNVFUyX1RHSTFCLCAxNjUpLAotCUlOVENfSVJRKE1UVTJfVENJMVYsIDE2OCksIElOVENfSVJRKE1UVTJfVENJMVUsIDE2OSksCi0JSU5UQ19JUlEoTVRVMl9UR0kyQSwgMTcyKSwgSU5UQ19JUlEoTVRVMl9UR0kyQiwgMTczKSwKLQlJTlRDX0lSUShNVFUyX1RDSTJWLCAxNzYpLCBJTlRDX0lSUShNVFUyX1RDSTJVLCAxNzcpLAotCUlOVENfSVJRKE1UVTJfVEdJM0EsIDE4MCksIElOVENfSVJRKE1UVTJfVEdJM0IsIDE4MSksCi0JSU5UQ19JUlEoTVRVMl9UR0kzQywgMTgyKSwgSU5UQ19JUlEoTVRVMl9UR0kzRCwgMTgzKSwKKwlJTlRDX0lSUShNVFUwX0FCQ0QsIDE1NiksIElOVENfSVJRKE1UVTBfQUJDRCwgMTU3KSwKKwlJTlRDX0lSUShNVFUwX0FCQ0QsIDE1OCksIElOVENfSVJRKE1UVTBfQUJDRCwgMTU5KSwKKwlJTlRDX0lSUShNVFUwX1ZFRiwgMTYwKSwgSU5UQ19JUlEoTVRVMF9WRUYsIDE2MSksCisJSU5UQ19JUlEoTVRVMF9WRUYsIDE2MiksCisJSU5UQ19JUlEoTVRVMV9BQiwgMTY0KSwgSU5UQ19JUlEoTVRVMV9BQiwgMTY1KSwKKwlJTlRDX0lSUShNVFUxX1ZVLCAxNjgpLCBJTlRDX0lSUShNVFUxX1ZVLCAxNjkpLAorCUlOVENfSVJRKE1UVTJfQUIsIDE3MiksIElOVENfSVJRKE1UVTJfQUIsIDE3MyksCisJSU5UQ19JUlEoTVRVMl9WVSwgMTc2KSwgSU5UQ19JUlEoTVRVMl9WVSwgMTc3KSwKKwlJTlRDX0lSUShNVFUzX0FCQ0QsIDE4MCksIElOVENfSVJRKE1UVTNfQUJDRCwgMTgxKSwKKwlJTlRDX0lSUShNVFUzX0FCQ0QsIDE4MiksIElOVENfSVJRKE1UVTNfQUJDRCwgMTgzKSwKIAlJTlRDX0lSUShNVFUyX1RDSTNWLCAxODQpLAotCUlOVENfSVJRKE1UVTJfVEdJNEEsIDE4OCksIElOVENfSVJRKE1UVTJfVEdJNEIsIDE4OSksCi0JSU5UQ19JUlEoTVRVMl9UR0k0QywgMTkwKSwgSU5UQ19JUlEoTVRVMl9UR0k0RCwgMTkxKSwKKwlJTlRDX0lSUShNVFU0X0FCQ0QsIDE4OCksIElOVENfSVJRKE1UVTRfQUJDRCwgMTg5KSwKKwlJTlRDX0lSUShNVFU0X0FCQ0QsIDE5MCksIElOVENfSVJRKE1UVTRfQUJDRCwgMTkxKSwKIAlJTlRDX0lSUShNVFUyX1RDSTRWLCAxOTIpLAotCUlOVENfSVJRKE1UVTJfVEdJNVUsIDE5NiksIElOVENfSVJRKE1UVTJfVEdJNVYsIDE5NyksCi0JSU5UQ19JUlEoTVRVMl9UR0k1VywgMTk4KSwKLQlJTlRDX0lSUShQT0UyX09FSTEsIDIwMCksIElOVENfSVJRKFBPRTJfT0VJMiwgMjAxKSwKLQlJTlRDX0lSUShNVFUyU19UR0kzQSwgMjA0KSwgSU5UQ19JUlEoTVRVMlNfVEdJM0IsIDIwNSksCi0JSU5UQ19JUlEoTVRVMlNfVEdJM0MsIDIwNiksIElOVENfSVJRKE1UVTJTX1RHSTNELCAyMDcpLAorCUlOVENfSVJRKE1UVTUsIDE5NiksIElOVENfSVJRKE1UVTUsIDE5NyksCisJSU5UQ19JUlEoTVRVNSwgMTk4KSwKKwlJTlRDX0lSUShQT0UyXzEyLCAyMDApLCBJTlRDX0lSUShQT0UyXzEyLCAyMDEpLAorCUlOVENfSVJRKE1UVTNTX0FCQ0QsIDIwNCksIElOVENfSVJRKE1UVTNTX0FCQ0QsIDIwNSksCisJSU5UQ19JUlEoTVRVM1NfQUJDRCwgMjA2KSwgSU5UQ19JUlEoTVRVM1NfQUJDRCwgMjA3KSwKIAlJTlRDX0lSUShNVFUyU19UQ0kzViwgMjA4KSwKLQlJTlRDX0lSUShNVFUyU19UR0k0QSwgMjEyKSwgSU5UQ19JUlEoTVRVMlNfVEdJNEIsIDIxMyksCi0JSU5UQ19JUlEoTVRVMlNfVEdJNEMsIDIxNCksIElOVENfSVJRKE1UVTJTX1RHSTRELCAyMTUpLAorCUlOVENfSVJRKE1UVTRTX0FCQ0QsIDIxMiksIElOVENfSVJRKE1UVTRTX0FCQ0QsIDIxMyksCisJSU5UQ19JUlEoTVRVNFNfQUJDRCwgMjE0KSwgSU5UQ19JUlEoTVRVNFNfQUJDRCwgMjE1KSwKIAlJTlRDX0lSUShNVFUyU19UQ0k0ViwgMjE2KSwKLQlJTlRDX0lSUShNVFUyU19UR0k1VSwgMjIwKSwgSU5UQ19JUlEoTVRVMlNfVEdJNVYsIDIyMSksCi0JSU5UQ19JUlEoTVRVMlNfVEdJNVcsIDIyMiksCisJSU5UQ19JUlEoTVRVNVMsIDIyMCksIElOVENfSVJRKE1UVTVTLCAyMjEpLAorCUlOVENfSVJRKE1UVTVTLCAyMjIpLAogCUlOVENfSVJRKFBPRTJfT0VJMywgMjI0KSwKLQlJTlRDX0lSUShJSUMzX1NUUEksIDIyOCksIElOVENfSVJRKElJQzNfTkFLSSwgMjI5KSwKLQlJTlRDX0lSUShJSUMzX1JYSSwgMjMwKSwgSU5UQ19JUlEoSUlDM19UWEksIDIzMSksCi0JSU5UQ19JUlEoSUlDM19URUksIDIzMiksCi0JSU5UQ19JUlEoU0NJRjBfQlJJLCAyNDApLCBJTlRDX0lSUShTQ0lGMF9FUkksIDI0MSksCi0JSU5UQ19JUlEoU0NJRjBfUlhJLCAyNDIpLCBJTlRDX0lSUShTQ0lGMF9UWEksIDI0MyksCi0JSU5UQ19JUlEoU0NJRjFfQlJJLCAyNDQpLCBJTlRDX0lSUShTQ0lGMV9FUkksIDI0NSksCi0JSU5UQ19JUlEoU0NJRjFfUlhJLCAyNDYpLCBJTlRDX0lSUShTQ0lGMV9UWEksIDI0NyksCi0JSU5UQ19JUlEoU0NJRjJfQlJJLCAyNDgpLCBJTlRDX0lSUShTQ0lGMl9FUkksIDI0OSksCi0JSU5UQ19JUlEoU0NJRjJfUlhJLCAyNTApLCBJTlRDX0lSUShTQ0lGMl9UWEksIDI1MSksCi0JSU5UQ19JUlEoU0NJRjNfQlJJLCAyNTIpLCBJTlRDX0lSUShTQ0lGM19FUkksIDI1MyksCi0JSU5UQ19JUlEoU0NJRjNfUlhJLCAyNTQpLCBJTlRDX0lSUShTQ0lGM19UWEksIDI1NSksCisJSU5UQ19JUlEoSUlDMywgMjI4KSwgSU5UQ19JUlEoSUlDMywgMjI5KSwKKwlJTlRDX0lSUShJSUMzLCAyMzApLCBJTlRDX0lSUShJSUMzLCAyMzEpLAorCUlOVENfSVJRKElJQzMsIDIzMiksCisJSU5UQ19JUlEoU0NJRjAsIDI0MCksIElOVENfSVJRKFNDSUYwLCAyNDEpLAorCUlOVENfSVJRKFNDSUYwLCAyNDIpLCBJTlRDX0lSUShTQ0lGMCwgMjQzKSwKKwlJTlRDX0lSUShTQ0lGMSwgMjQ0KSwgSU5UQ19JUlEoU0NJRjEsIDI0NSksCisJSU5UQ19JUlEoU0NJRjEsIDI0NiksIElOVENfSVJRKFNDSUYxLCAyNDcpLAorCUlOVENfSVJRKFNDSUYyLCAyNDgpLCBJTlRDX0lSUShTQ0lGMiwgMjQ5KSwKKwlJTlRDX0lSUShTQ0lGMiwgMjUwKSwgSU5UQ19JUlEoU0NJRjIsIDI1MSksCisJSU5UQ19JUlEoU0NJRjMsIDI1MiksIElOVENfSVJRKFNDSUYzLCAyNTMpLAorCUlOVENfSVJRKFNDSUYzLCAyNTQpLCBJTlRDX0lSUShTQ0lGMywgMjU1KSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaW50Y19ncm91cCBncm91cHNbXSBfX2luaXRkYXRhID0gewogCUlOVENfR1JPVVAoUElOVCwgUElOVDAsIFBJTlQxLCBQSU5UMiwgUElOVDMsCiAJCSAgIFBJTlQ0LCBQSU5UNSwgUElOVDYsIFBJTlQ3KSwKLQlJTlRDX0dST1VQKERNQUMwLCBETUFDMF9ERUksIERNQUMwX0hFSSksCi0JSU5UQ19HUk9VUChETUFDMSwgRE1BQzFfREVJLCBETUFDMV9IRUkpLAotCUlOVENfR1JPVVAoRE1BQzIsIERNQUMyX0RFSSwgRE1BQzJfSEVJKSwKLQlJTlRDX0dST1VQKERNQUMzLCBETUFDM19ERUksIERNQUMzX0hFSSksCi0JSU5UQ19HUk9VUChETUFDNCwgRE1BQzRfREVJLCBETUFDNF9IRUkpLAotCUlOVENfR1JPVVAoRE1BQzUsIERNQUM1X0RFSSwgRE1BQzVfSEVJKSwKLQlJTlRDX0dST1VQKERNQUM2LCBETUFDNl9ERUksIERNQUM2X0hFSSksCi0JSU5UQ19HUk9VUChETUFDNywgRE1BQzdfREVJLCBETUFDN19IRUkpLAotCUlOVENfR1JPVVAoTVRVMF9BQkNELCBNVFUyX1RHSTBBLCBNVFUyX1RHSTBCLCBNVFUyX1RHSTBDLCBNVFUyX1RHSTBEKSwKLQlJTlRDX0dST1VQKE1UVTBfVkVGLCBNVFUyX1RDSTBWLCBNVFUyX1RHSTBFLCBNVFUyX1RHSTBGKSwKLQlJTlRDX0dST1VQKE1UVTFfQUIsIE1UVTJfVEdJMUEsIE1UVTJfVEdJMUIpLAotCUlOVENfR1JPVVAoTVRVMV9WVSwgTVRVMl9UQ0kxViwgTVRVMl9UQ0kxVSksCi0JSU5UQ19HUk9VUChNVFUyX0FCLCBNVFUyX1RHSTJBLCBNVFUyX1RHSTJCKSwKLQlJTlRDX0dST1VQKE1UVTJfVlUsIE1UVTJfVENJMlYsIE1UVTJfVENJMlUpLAotCUlOVENfR1JPVVAoTVRVM19BQkNELCBNVFUyX1RHSTNBLCBNVFUyX1RHSTNCLCBNVFUyX1RHSTNDLCBNVFUyX1RHSTNEKSwKLQlJTlRDX0dST1VQKE1UVTRfQUJDRCwgTVRVMl9UR0k0QSwgTVRVMl9UR0k0QiwgTVRVMl9UR0k0QywgTVRVMl9UR0k0RCksCi0JSU5UQ19HUk9VUChNVFU1LCBNVFUyX1RHSTVVLCBNVFUyX1RHSTVWLCBNVFUyX1RHSTVXKSwKLQlJTlRDX0dST1VQKFBPRTJfMTIsIFBPRTJfT0VJMSwgUE9FMl9PRUkyKSwKLQlJTlRDX0dST1VQKE1UVTNTX0FCQ0QsIE1UVTJTX1RHSTNBLCBNVFUyU19UR0kzQiwKLQkJICAgTVRVMlNfVEdJM0MsIE1UVTJTX1RHSTNEKSwKLQlJTlRDX0dST1VQKE1UVTRTX0FCQ0QsIE1UVTJTX1RHSTRBLCBNVFUyU19UR0k0QiwKLQkJICAgTVRVMlNfVEdJNEMsIE1UVTJTX1RHSTREKSwKLQlJTlRDX0dST1VQKE1UVTVTLCBNVFUyU19UR0k1VSwgTVRVMlNfVEdJNVYsIE1UVTJTX1RHSTVXKSwKLQlJTlRDX0dST1VQKElJQzMsIElJQzNfU1RQSSwgSUlDM19OQUtJLCBJSUMzX1JYSSwgSUlDM19UWEksIElJQzNfVEVJKSwKLQlJTlRDX0dST1VQKFNDSUYwLCBTQ0lGMF9CUkksIFNDSUYwX0VSSSwgU0NJRjBfUlhJLCBTQ0lGMF9UWEkpLAotCUlOVENfR1JPVVAoU0NJRjEsIFNDSUYxX0JSSSwgU0NJRjFfRVJJLCBTQ0lGMV9SWEksIFNDSUYxX1RYSSksCi0JSU5UQ19HUk9VUChTQ0lGMiwgU0NJRjJfQlJJLCBTQ0lGMl9FUkksIFNDSUYyX1JYSSwgU0NJRjJfVFhJKSwKLQlJTlRDX0dST1VQKFNDSUYzLCBTQ0lGM19CUkksIFNDSUYzX0VSSSwgU0NJRjNfUlhJLCBTQ0lGM19UWEkpLAogfTsKIAogc3RhdGljIHN0cnVjdCBpbnRjX3ByaW9fcmVnIHByaW9fcmVnaXN0ZXJzW10gX19pbml0ZGF0YSA9IHsKQEAgLTE3NCwyMiArMTM2LDIyIEBACiAJCS5tYXBiYXNlCT0gMHhmZmZlODAwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9ICB7IDI0MSwgMjQyLCAyNDMsIDI0MCB9LAorCQkuaXJxcwkJPSB7IDI0MCwgMjQwLCAyNDAsIDI0MCB9LAogCX0sIHsKIAkJLm1hcGJhc2UJPSAweGZmZmU4ODAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0gIHsgMjQ1LCAyNDYsIDI0NywgMjQ0IH0sCisJCS5pcnFzCQk9IHsgMjQ0LCAyNDQsIDI0NCwgMjQ0IH0sCiAJfSwgewogCQkubWFwYmFzZQk9IDB4ZmZmZTkwMDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSAgeyAyNDksIDI1MCwgMjUxLCAyNDggfSwKKwkJLmlycXMJCT0geyAyNDgsIDI0OCwgMjQ4LCAyNDggfSwKIAl9LCB7CiAJCS5tYXBiYXNlCT0gMHhmZmZlOTgwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9ICB7IDI1MywgMjU0LCAyNTUsIDI1MiB9LAorCQkuaXJxcwkJPSB7IDI1MiwgMjUyLCAyNTIsIDI1MiB9LAogCX0sIHsKIAkJLmZsYWdzID0gMCwKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL01ha2VmaWxlIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9NYWtlZmlsZQppbmRleCBlMDdjNjllLi5lY2FiMjc0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL01ha2VmaWxlCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvTWFrZWZpbGUKQEAgLTQsNiArNCw4IEBACiAKIG9iai15CTo9IGV4Lm8gcHJvYmUubyBlbnRyeS5vIHNldHVwLXNoMy5vCiAKK29iai0kKENPTkZJR19ISUJFUk5BVElPTikJCSs9IHN3c3VzcC5vCisKICMgQ1BVIHN1YnR5cGUgc2V0dXAKIG9iai0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDUpCSs9IHNldHVwLXNoNzcwNS5vCiBvYmotJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA2KQkrPSBzZXR1cC1zaDc3MHgubwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9lbnRyeS5TIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9lbnRyeS5TCmluZGV4IGI0MTA2ZDAuLjU1ZGEwZmYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvZW50cnkuUworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2VudHJ5LlMKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAjaW5jbHVkZSA8Y3B1L21tdV9jb250ZXh0Lmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vY2FjaGUuaD4KIAogISBOT1RFOgogISBHTlUgYXMgKGFzIG9mIDIuOS4xKSBjaGFuZ2VzIGJmL3MgaW50byBidC9zIGFuZCBicmEsIHdoZW4gdGhlIGFkZHJlc3MKQEAgLTE4Nyw0NCArMTg4LDM1IEBACiAjaWYgZGVmaW5lZChDT05GSUdfU0hfU1RBTkRBUkRfQklPUykKIAkvKiBVbndpbmQgdGhlIHN0YWNrIGFuZCBqbXAgdG8gdGhlIGRlYnVnIGVudHJ5ICovCiBFTlRSWShzaF9iaW9zX2hhbmRsZXIpCi0JbW92LmwJQHIxNSssIHIwCi0JbW92LmwJQHIxNSssIHIxCi0JbW92LmwJQHIxNSssIHIyCi0JbW92LmwJQHIxNSssIHIzCi0JbW92LmwJQHIxNSssIHI0Ci0JbW92LmwJQHIxNSssIHI1Ci0JbW92LmwJQHIxNSssIHI2Ci0JbW92LmwJQHIxNSssIHI3Ci0Jc3RjCXNyLCByOAotCW1vdi5sCTFmLCByOQkJCSEgQkwgPTEsIFJCPTEsIElNQVNLPTB4MEYKLQlvcglyOSwgcjgKLQlsZGMJcjgsIHNyCQkJISBoZXJlLCBjaGFuZ2UgdGhlIHJlZ2lzdGVyIGJhbmsKLQltb3YubAlAcjE1KywgcjgKLQltb3YubAlAcjE1KywgcjkKLQltb3YubAlAcjE1KywgcjEwCi0JbW92LmwJQHIxNSssIHIxMQotCW1vdi5sCUByMTUrLCByMTIKLQltb3YubAlAcjE1KywgcjEzCi0JbW92LmwJQHIxNSssIHIxNAotCW1vdi5sCUByMTUrLCBrMAotCWxkYy5sCUByMTUrLCBzcGMKLQlsZHMubAlAcjE1KywgcHIKLQltb3YubAlAcjE1KywgazEKLQlsZGMubAlAcjE1KywgZ2JyCi0JbGRzLmwJQHIxNSssIG1hY2gKLQlsZHMubAlAcjE1KywgbWFjbAotCW1vdglrMCwgcjE1CisJbW92LmwJMWYsIHI4CisJYnNyCXJlc3RvcmVfcmVncworCSBub3AKKworCWxkcwlrMiwgcHIJCQkhIHJlc3RvcmUgcHIKKwltb3YJazQsIHIxNQogCSEKIAltb3YubAkyZiwgazAKIAltb3YubAlAazAsIGswCiAJam1wCUBrMAotCSBsZGMJazEsIHNzcgorCSBsZGMJazMsIHNzcgogCS5hbGlnbgkyCiAxOgkubG9uZwkweDMwMDAwMGYwCiAyOgkubG9uZwlnZGJfdmJyX3ZlY3RvcgogI2VuZGlmIC8qIENPTkZJR19TSF9TVEFOREFSRF9CSU9TICovCiAKLXJlc3RvcmVfYWxsOgorISByZXN0b3JlX3JlZ3MoKQorISAtIHJlc3RvcmUgcjAsIHIxLCByMiwgcjMsIHI0LCByNSwgcjYsIHI3IGZyb20gdGhlIHN0YWNrCishIC0gc3dpdGNoIGJhbmsKKyEgLSByZXN0b3JlIHI4LCByOSwgcjEwLCByMTEsIHIxMiwgcjEzLCByMTQsIHIxNSBmcm9tIHRoZSBzdGFjaworISAtIHJlc3RvcmUgc3BjLCBwciosIHNzciwgZ2JyLCBtYWNoLCBtYWNsLCBza2lwIGRlZmF1bHQgdHJhCishIGsyIHJldHVybnMgb3JpZ2luYWwgcHIKKyEgazMgcmV0dXJucyBvcmlnaW5hbCBzcgorISBrNCByZXR1cm5zIG9yaWdpbmFsIHN0YWNrIHBvaW50ZXIKKyEgcjggcGFzc2VzIFNSIGJpdG1hc2ssIG92ZXJ3cml0dGVuIHdpdGggcmVzdG9yZWQgZGF0YSBvbiByZXR1cm4KKyEgcjkgdHJhc2hlZAorISBCTD0wIG9uIGVudHJ5LCBvbiBleGl0IEJMPTEgKGRlcGVuZGluZyBvbiByOCkuCisKK0VOVFJZKHJlc3RvcmVfcmVncykKIAltb3YubAlAcjE1KywgcjAKIAltb3YubAlAcjE1KywgcjEKIAltb3YubAlAcjE1KywgcjIKQEAgLTIzNCwxMCArMjI2LDkgQEAKIAltb3YubAlAcjE1KywgcjYKIAltb3YubAlAcjE1KywgcjcKIAkhCi0Jc3RjCXNyLCByOAotCW1vdi5sCTdmLCByOQotCW9yCXI5LCByOAkJCSEgQkwgPTEsIFJCPTEKLQlsZGMJcjgsIHNyCQkJISBoZXJlLCBjaGFuZ2UgdGhlIHJlZ2lzdGVyIGJhbmsKKwlzdGMJc3IsIHI5CisJb3IJcjgsIHI5CisJbGRjCXI5LCBzcgogCSEKIAltb3YubAlAcjE1KywgcjgKIAltb3YubAlAcjE1KywgcjkKQEAgLTI0OCwxMiArMjM5LDIwIEBACiAJbW92LmwJQHIxNSssIHIxNAogCW1vdi5sCUByMTUrLCBrNAkJISBvcmlnaW5hbCBzdGFjayBwb2ludGVyCiAJbGRjLmwJQHIxNSssIHNwYwotCWxkcy5sCUByMTUrLCBwcgorCW1vdi5sCUByMTUrLCBrMgkJISBvcmlnaW5hbCBQUgogCW1vdi5sCUByMTUrLCBrMwkJISBvcmlnaW5hbCBTUgogCWxkYy5sCUByMTUrLCBnYnIKIAlsZHMubAlAcjE1KywgbWFjaAogCWxkcy5sCUByMTUrLCBtYWNsCi0JYWRkCSM0LCByMTUJCQkhIFNraXAgc3lzY2FsbCBudW1iZXIKKwlydHMKKwkgYWRkCSM0LCByMTUJCQkhIFNraXAgc3lzY2FsbCBudW1iZXIKKworcmVzdG9yZV9hbGw6CisJbW92LmwJN2YsIHI4CisJYnNyCXJlc3RvcmVfcmVncworCSBub3AKKworCWxkcwlrMiwgcHIJCQkhIHJlc3RvcmUgcHIKIAkhCiAjaWZkZWYgQ09ORklHX1NIX0RTUAogCW1vdi5sCUByMTUrLCBrMAkJISBEU1AgbW9kZSBtYXJrZXIKQEAgLTI5NCw3ICsyOTMsNyBAQAogCW1vdgkjMHhmMCwgazEKIAlleHR1LmIJazEsIGsxCiAJbm90CWsxLCBrMQotCWFuZAlrMSwgazIJCQkhIE1hc2sgb3JpZ25hbCBTUiB2YWx1ZQorCWFuZAlrMSwgazIJCQkhIE1hc2sgb3JpZ2luYWwgU1IgdmFsdWUKIAkhCiAJbW92CWszLCBrMAkJCSEgQ2FsY3VsYXRlIElNQVNLLWJpdHMKIAlzaGxyMglrMApAQCAtMzEzLDcgKzMxMiw2IEBACiAJbW92CSMwLCBrMQogCW1vdi5iCWsxLCBAazAKICNlbmRpZgotCW1vdi5sCUByMTUrLCBrMgkJISByZXN0b3JlIEVYUEVWVAogCW1vdglrNCwgcjE1CiAJcnRlCiAJIG5vcApAQCAtMzM2LDgxICszMzQsNTUgQEAKIEVOVFJZKHZicl9iYXNlKQogCS5sb25nCTAKICEKKyEgMHgxMDA6IEdlbmVyYWwgZXhjZXB0aW9uIHZlY3RvcgorIQogCS5iYWxpZ24gCTI1NiwwLDI1NgogZ2VuZXJhbF9leGNlcHRpb246Ci0JbW92LmwJMWYsIGsyCi0JbW92LmwJMmYsIGszCi0jaWZkZWYgQ09ORklHX0NQVV9TVUJUWVBFX1NIWDMKLQltb3YubAlAazIsIGsyCisjaWZuZGVmIENPTkZJR19DUFVfU1VCVFlQRV9TSFgzCisJYnJhCWhhbmRsZV9leGNlcHRpb24KKwkgc3RzCXByLCBrMwkJISBzYXZlIG9yaWdpbmFsIHByIHZhbHVlIGluIGszCisjZWxzZQorCW1vdi5sCTFmLCBrNAorCW1vdi5sCUBrNCwgazQKIAogCSEgSXMgRVhQRVZUIGxhcmdlciB0aGFuIDB4ODAwPwogCW1vdgkjMHg4LCBrMAogCXNobGw4CWswCi0JY21wL2hzCWswLCBrMgorCWNtcC9ocwlrMCwgazQKIAliZgkwZgogCiAJISB0aGVuIGFkZCAweDU4MCAoazIgaXMgMHhkODAgb3IgMHhkYTApCiAJbW92CSMweDU4LCBrMAogCXNobGwyCWswCiAJc2hsbDIJazAKLQlhZGQJazAsIGsyCisJYWRkCWswLCBrNAogMDoKLQlicmEJaGFuZGxlX2V4Y2VwdGlvbgorCSEgU2V0dXAgc3RhY2sgYW5kIHNhdmUgRFNQIGNvbnRleHQgKGswIGNvbnRhaW5zIG9yaWdpbmFsIHIxNSBvbiByZXR1cm4pCisJYnNyCXByZXBhcmVfc3RhY2tfc2F2ZV9kc3AKIAkgbm9wCi0jZWxzZQotCWJyYQloYW5kbGVfZXhjZXB0aW9uCi0JIG1vdi5sCUBrMiwgazIKKworCSEgU2F2ZSByZWdpc3RlcnMgLyBTd2l0Y2ggdG8gYmFuayAwCisJbW92CQlrNCwgazIJCSEga2VlcCB2ZWN0b3IgaW4gazIKKwltb3YubAkxZiwgazQJCSEgU1IgYml0cyB0byBjbGVhciBpbiBrNAorCWJzcglzYXZlX3JlZ3MJISBuZWVkcyBvcmlnaW5hbCBwciB2YWx1ZSBpbiBrMworCSBub3AKKworCWJyYQloYW5kbGVfZXhjZXB0aW9uX3NwZWNpYWwKKwkgbm9wCisKKwkuYWxpZ24JMgorMToJLmxvbmcJRVhQRVZUCiAjZW5kaWYKLQkuYWxpZ24JMgotMToJLmxvbmcJRVhQRVZUCi0yOgkubG9uZwlyZXRfZnJvbV9leGNlcHRpb24KLSEKLSEKIAotCS5iYWxpZ24gCTEwMjQsMCwxMDI0Ci10bGJfbWlzczoKLQltb3YubAkxZiwgazIKLQltb3YubAk0ZiwgazMKLQlicmEJaGFuZGxlX2V4Y2VwdGlvbgotCSBtb3YubAlAazIsIGsyCi0hCi0JLmJhbGlnbiAJNTEyLDAsNTEyCi1pbnRlcnJ1cHQ6Ci0JbW92LmwJM2YsIGszCi0jaWYgZGVmaW5lZChDT05GSUdfS0dEQikKLQltb3YubAkyZiwgazIKLQkhIERlYm91bmNlIChmaWx0ZXIgbmVzdGVkIE5NSSkKLQltb3YubAlAazIsIGswCi0JbW92LmwJNWYsIGsxCi0JY21wL2VxCWsxLCBrMAotCWJmCTBmCi0JbW92LmwJNmYsIGsxCi0JdGFzLmIJQGsxCi0JYnQJMGYKLQlydGUKLQkgbm9wCi0JLmFsaWduCTIKLTI6CS5sb25nCUlOVEVWVAotNToJLmxvbmcJTk1JX1ZFQwotNjoJLmxvbmcJaW5fbm1pCi0wOgotI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX0tHREIpICovCi0JYnJhCWhhbmRsZV9leGNlcHRpb24KLQkgbW92CSMtMSwgazIJCSEgaW50ZXJydXB0IGV4Y2VwdGlvbiBtYXJrZXIKKyEgcHJlcGFyZV9zdGFja19zYXZlX2RzcCgpCishIC0gcm9sbCBiYWNrIGdSQgorISAtIHN3aXRjaCB0byBrZXJuZWwgc3RhY2sKKyEgLSBzYXZlIERTUAorISBrMCByZXR1cm5zIG9yaWdpbmFsIHNwIChhZnRlciByb2xsIGJhY2spCishIGsxIHRyYXNoZWQKKyEgazIgdHJhc2hlZAogCi0JLmFsaWduCTIKLTE6CS5sb25nCUVYUEVWVAotMzoJLmxvbmcJcmV0X2Zyb21faXJxCi00OgkubG9uZwlyZXRfZnJvbV9leGNlcHRpb24KLQotIQotIQotCS5hbGlnbgkyCi1FTlRSWShoYW5kbGVfZXhjZXB0aW9uKQotCSEgVXNpbmcgazAsIGsxIGZvciBzY3JhdGNoIHJlZ2lzdGVycyAocjBfYmFuazEsIHIxX2JhbmspLAotCSEgc2F2ZSBhbGwgcmVnaXN0ZXJzIG9udG8gc3RhY2suCi0JIQotCitwcmVwYXJlX3N0YWNrX3NhdmVfZHNwOgogI2lmZGVmIENPTkZJR19HVVNBCiAJISBDaGVjayBmb3Igcm9sbCBiYWNrIGdSQiAoVXNlciBhbmQgS2VybmVsKQogCW1vdglyMTUsIGswCkBAIC00MzAsNyArNDAyLDcgQEAKIDI6CW1vdglrMSwgcjE1CQkhIFNQID0gcjEKIDE6CiAjZW5kaWYKLQorCSEgU3dpdGNoIHRvIGtlcm5lbCBzdGFjayBpZiBuZWVkZWQKIAlzdGMJc3NyLCBrMAkJISBJcyBpdCBmcm9tIGtlcm5lbCBzcGFjZT8KIAlzaGxsCWswCQkhIENoZWNrIE1EIGJpdCAoYml0MzApIGJ5IHNoaWZ0aW5nIGl0IGludG8uLi4KIAlzaGxsCWswCQkhICAgICAgIC4uLnRoZSBUIGJpdApAQCAtNDQzLDE4ICs0MTUsMTcgQEAKIAlhZGQJY3VycmVudCwgazEKIAltb3YJazEsIHIxNQkJISBjaGFuZ2UgdG8ga2VybmVsIHN0YWNrCiAJIQotMToJbW92LmwJMmYsIGsxCi0JIQorMToKICNpZmRlZiBDT05GSUdfU0hfRFNQCi0JbW92LmwJcjIsIEAtcjE1CQkhIFNhdmUgcjIsIHdlIG5lZWQgYW5vdGhlciByZWcKLQlzdGMJc3IsIGs0Ci0JbW92LmwJMWYsIHIyCi0JdHN0CXIyLCBrNAkJCSEgQ2hlY2sgaWYgaW4gRFNQIG1vZGUKLQltb3YubAlAcjE1KywgcjIJCSEgUmVzdG9yZSByMiBub3cKKwkhIFNhdmUgRFNQIGNvbnRleHQgaWYgbmVlZGVkCisJc3RjCXNyLCBrMQorCW1vdgkjMHgxMCwgazIKKwlzaGxsOCAgIGsyCQkJISBEU1A9MSAoMHgwMDAwMTAwMCkKKwl0c3QJazIsIGsxCQkJISBDaGVjayBpZiBpbiBEU1AgbW9kZSAocGFzc2VkIGluIGsyKQogCWJ0L3MJc2tpcF9zYXZlCi0JIG1vdgkjMCwgazQJCQkhIFNldCBtYXJrZXIgZm9yIG5vIHN0YWNrIGZyYW1lCisJIG1vdgkjMCwgazEJCQkhIFNldCBtYXJrZXIgZm9yIG5vIHN0YWNrIGZyYW1lCiAKLQltb3YJcjIsIGs0CQkJISBCYWNrdXAgcjIgKGluIGs0KSBmb3IgbGF0ZXIKKwltb3YJazIsIGsxCQkJISBTYXZlIGhhcy1mcmFtZSBtYXJrZXIKIAogCSEgU2F2ZSBEU1AgcmVnaXN0ZXJzIG9uIHN0YWNrCiAJc3RjLmwJbW9kLCBALXIxNQpAQCAtNDczLDM1ICs0NDQsNzQgQEAKIAkhIGFzIHdlJ3JlIG5vdCBhdCBhbGwgaW50ZXJlc3RlZCBpbiBzdXBwb3J0aW5nIGFuY2llbnQgdG9vbGNoYWlucyBhdAogCSEgdGhpcyBwb2ludC4gLS0gUEZNLgogCi0JbW92CXIxNSwgcjIKKwltb3YJcjE1LCBrMgogCS53b3JkCTB4ZjY1MwkJCSEgbW92cy5sCWExLCBALXIyCiAJLndvcmQJMHhmNmYzCQkJISBtb3ZzLmwJYTBnLCBALXIyCiAJLndvcmQJMHhmNmQzCQkJISBtb3ZzLmwJYTFnLCBALXIyCiAJLndvcmQJMHhmNmMzCQkJISBtb3ZzLmwJbTAsIEAtcjIKIAkud29yZAkweGY2ZTMJCQkhIG1vdnMubAltMSwgQC1yMgotCW1vdglyMiwgcjE1CisJbW92CWsyLCByMTUKIAotCW1vdglrNCwgcjIJCQkhIFJlc3RvcmUgcjIKLQltb3YubAkxZiwgazQJCQkhIEZvcmNlIERTUCBzdGFjayBmcmFtZQogc2tpcF9zYXZlOgotCW1vdi5sCWs0LCBALXIxNQkJISBQdXNoIERTUCBtb2RlIG1hcmtlciBvbnRvIHN0YWNrCisJbW92LmwJazEsIEAtcjE1CQkhIFB1c2ggRFNQIG1vZGUgbWFya2VyIG9udG8gc3RhY2sKICNlbmRpZgotCSEgU2F2ZSB0aGUgdXNlciByZWdpc3RlcnMgb24gdGhlIHN0YWNrLgotCW1vdi5sCWsyLCBALXIxNQkhIEVYUEVWVAorCXJ0cworCSBub3AKKyEKKyEgMHg0MDA6IEluc3RydWN0aW9uIGFuZCBEYXRhIFRMQiBtaXNzIGV4Y2VwdGlvbiB2ZWN0b3IKKyEKKwkuYmFsaWduIAkxMDI0LDAsMTAyNAordGxiX21pc3M6CisJc3RzCXByLCBrMwkJISBzYXZlIG9yaWdpbmFsIHByIHZhbHVlIGluIGszCiAKLQltb3YJIy0xLCBrNAotCW1vdi5sCWs0LCBALXIxNQkhIHNldCBUUkEgKGRlZmF1bHQ6IC0xKQotCSEKK2hhbmRsZV9leGNlcHRpb246CisJbW92YQlleGNlcHRpb25fZGF0YSwgazAKKworCSEgU2V0dXAgc3RhY2sgYW5kIHNhdmUgRFNQIGNvbnRleHQgKGswIGNvbnRhaW5zIG9yaWdpbmFsIHIxNSBvbiByZXR1cm4pCisJYnNyCXByZXBhcmVfc3RhY2tfc2F2ZV9kc3AKKwkgUFJFRihrMCkKKworCSEgU2F2ZSByZWdpc3RlcnMgLyBTd2l0Y2ggdG8gYmFuayAwCisJbW92LmwJNWYsIGsyCQkhIHZlY3RvciByZWdpc3RlciBhZGRyZXNzCisJbW92LmwJMWYsIGs0CQkhIFNSIGJpdHMgdG8gY2xlYXIgaW4gazQKKwlic3IJc2F2ZV9yZWdzCSEgbmVlZHMgb3JpZ2luYWwgcHIgdmFsdWUgaW4gazMKKwkgbW92LmwJQGsyLCBrMgkJISByZWFkIG91dCB2ZWN0b3IgYW5kIGtlZXAgaW4gazIKKworaGFuZGxlX2V4Y2VwdGlvbl9zcGVjaWFsOgorCSEgU2V0dXAgcmV0dXJuIGFkZHJlc3MgYW5kIGp1bXAgdG8gZXhjZXB0aW9uIGhhbmRsZXIKKwltb3YubAk3ZiwgcjkJCSEgZmV0Y2ggcmV0dXJuIGFkZHJlc3MKKwlzdGMJcjJfYmFuaywgcjAJISBrMiAodmVjdG9yKQorCW1vdi5sCTZmLCByMTAKKwlzaGxyMglyMAorCXNobHIJcjAKKwltb3YubAlAKHIwLCByMTApLCByMTAKKwlqbXAJQHIxMAorCSBsZHMJcjksIHByCQkhIHB1dCByZXR1cm4gYWRkcmVzcyBpbiBwcgorCisJLmFsaWduCUwxX0NBQ0hFX1NISUZUCisKKyEgc2F2ZV9yZWdzKCkKKyEgLSBzYXZlIGRlZmF1bHQgdHJhLCBtYWNsLCBtYWNoLCBnYnIsIHNzciwgcHIqIGFuZCBzcGMgb24gdGhlIHN0YWNrCishIC0gc2F2ZSByMTUqLCByMTQsIHIxMywgcjEyLCByMTEsIHIxMCwgcjksIHI4IG9uIHRoZSBzdGFjaworISAtIHN3aXRjaCBiYW5rCishIC0gc2F2ZSByNywgcjYsIHI1LCByNCwgcjMsIHIyLCByMSwgcjAgb24gdGhlIHN0YWNrCishIGswIGNvbnRhaW5zIG9yaWdpbmFsIHN0YWNrIHBvaW50ZXIqCishIGsxIHRyYXNoZWQKKyEgazMgcGFzc2VzIG9yaWdpbmFsIHByKgorISBrNCBwYXNzZXMgU1IgYml0bWFzaworISBCTD0xIG9uIGVudHJ5LCBvbiBleGl0IEJMPTAuCisKK0VOVFJZKHNhdmVfcmVncykKKwltb3YJIy0xLCByMQorCW1vdi5sCWsxLCBALXIxNQkhIHNldCBUUkEgKGRlZmF1bHQ6IC0xKQogCXN0cy5sCW1hY2wsIEAtcjE1CiAJc3RzLmwJbWFjaCwgQC1yMTUKIAlzdGMubAlnYnIsIEAtcjE1CiAJc3RjLmwJc3NyLCBALXIxNQotCXN0cy5sCXByLCBALXIxNQorCW1vdi5sCWszLCBALXIxNQkhIG9yaWdpbmFsIHByIGluIGszCiAJc3RjLmwJc3BjLCBALXIxNQotCSEKLQlsZHMJazMsIHByCQkhIFNldCB0aGUgcmV0dXJuIGFkZHJlc3MgdG8gcHIKLQkhCi0JbW92LmwJazAsIEAtcjE1CSEgc2F2ZSBvcmlnbmFsIHN0YWNrCisKKwltb3YubAlrMCwgQC1yMTUJISBvcmlnaW5hbCBzdGFjayBwb2ludGVyIGluIGswCiAJbW92LmwJcjE0LCBALXIxNQogCW1vdi5sCXIxMywgQC1yMTUKIAltb3YubAlyMTIsIEAtcjE1CkBAIC01MDksMTMgKzUxOSwyMyBAQAogCW1vdi5sCXIxMCwgQC1yMTUKIAltb3YubAlyOSwgQC1yMTUKIAltb3YubAlyOCwgQC1yMTUKLQkhCi0Jc3RjCXNyLCByOAkJISBCYWNrIHRvIG5vcm1hbCByZWdpc3RlciBiYW5rLCBhbmQKLQlvcglrMSwgcjgJCSEgQmxvY2sgYWxsIGludGVycnVwdHMKLQltb3YubAkzZiwgazEKLQlhbmQJazEsIHI4CQkhIC4uLgotCWxkYwlyOCwgc3IJCSEgLi4uY2hhbmdlZCBoZXJlLgotCSEKKworCW1vdi5sCTBmLCBrMwkJISBTUiBiaXRzIHRvIHNldCBpbiBrMworCisJISBmYWxsLXRocm91Z2gKKworISBzYXZlX2xvd19yZWdzKCkKKyEgLSBtb2RpZnkgU1IgZm9yIGJhbmsgc3dpdGNoCishIC0gc2F2ZSByNywgcjYsIHI1LCByNCwgcjMsIHIyLCByMSwgcjAgb24gdGhlIHN0YWNrCishIGszIHBhc3NlcyBiaXRzIHRvIHNldCBpbiBTUgorISBrNCBwYXNzZXMgYml0cyB0byBjbGVhciBpbiBTUgorCitFTlRSWShzYXZlX2xvd19yZWdzKQorCXN0YwlzciwgcjgKKwlvcglrMywgcjgKKwlhbmQJazQsIHI4CisJbGRjCXI4LCBzcgorCiAJbW92LmwJcjcsIEAtcjE1CiAJbW92LmwJcjYsIEAtcjE1CiAJbW92LmwJcjUsIEAtcjE1CkBAIC01MjMsNTIgKzU0Myw2MyBAQAogCW1vdi5sCXIzLCBALXIxNQogCW1vdi5sCXIyLCBALXIxNQogCW1vdi5sCXIxLCBALXIxNQotCW1vdi5sCXIwLCBALXIxNQotCi0JLyoKLQkgKiBUaGlzIGdldHMgYSBiaXQgdHJpY2t5Li4gaW4gdGhlIElOVEVWVCBjYXNlIHdlIGRvbid0IHdhbnQgdG8gdXNlCi0JICogdGhlIFZCUiBvZmZzZXQgYXMgYSBkZXN0aW5hdGlvbiBpbiB0aGUganVtcCBjYWxsIHRhYmxlLCBzaW5jZSBhbGwKLQkgKiBvZiB0aGUgZGVzdGluYXRpb25zIGFyZSB0aGUgc2FtZS4gSW4gdGhpcyBjYXNlLCAoaW50ZXJydXB0KSBzZXRzCi0JICogYSBtYXJrZXIgaW4gcjIgKG5vdyByMl9iYW5rIHNpbmNlIFNSLlJCIGNoYW5nZWQpLCB3aGljaCB3ZSBjaGVjawotCSAqIHRvIGRldGVybWluZSB0aGUgZXhjZXB0aW9uIHR5cGUuIEZvciBhbGwgb3RoZXIgZXhjZXB0aW9ucywgd2UKLQkgKiBmb3JjaWJseSByZWFkIEVYUEVWVCBmcm9tIG1lbW9yeSBhbmQgZml4IHVwIHRoZSBqdW1wIGFkZHJlc3MsIGluCi0JICogdGhlIGludGVycnVwdCBleGNlcHRpb24gY2FzZSB3ZSBqdW1wIHRvIGRvX0lSUSgpIGFuZCBkZWZlciB0aGUKLQkgKiBJTlRFVlQgcmVhZCB1bnRpbCB0aGVyZS4gQXMgYSBib251cywgd2UgY2FuIGFsc28gY2xlYW4gdXAgdGhlIFNSLlJCCi0JICogY2hlY2tzIHRoYXQgZG9fSVJRKCkgd2FzIGRvaW5nLi4KLQkgKi8KLQlzdGMJcjJfYmFuaywgcjgKLQljbXAvcHoJcjgKLQliZglpbnRlcnJ1cHRfZXhjZXB0aW9uCi0Jc2hscjIJcjgKLQlzaGxyCXI4Ci0JbW92LmwJNGYsIHI5Ci0JYWRkCXI4LCByOQotCW1vdi5sCUByOSwgcjkKLQlqbXAJQHI5Ci0JIG5vcAogCXJ0cworCSBtb3YubAlyMCwgQC1yMTUKKworIQorISAweDYwMDogSW50ZXJydXB0IC8gTk1JIHZlY3RvcgorIQorCS5iYWxpZ24gCTUxMiwwLDUxMgorRU5UUlkoaGFuZGxlX2ludGVycnVwdCkKKyNpZiBkZWZpbmVkKENPTkZJR19LR0RCKQorCW1vdi5sCTJmLCBrMgorCSEgRGVib3VuY2UgKGZpbHRlciBuZXN0ZWQgTk1JKQorCW1vdi5sCUBrMiwgazAKKwltb3YubAk5ZiwgazEKKwljbXAvZXEJazEsIGswCisJYmYJMTFmCisJbW92LmwJMTBmLCBrMQorCXRhcy5iCUBrMQorCWJ0CTExZgorCXJ0ZQogCSBub3AKLQogCS5hbGlnbgkyCi0xOgkubG9uZwkweDAwMDAxMDAwCSEgRFNQPTEKLTI6CS5sb25nCTB4MDAwMDgwZjAJISBGRD0xLCBJTUFTSz0xNQotMzoJLmxvbmcJMHhjZmZmZmZmZgkhIFJCPTAsIEJMPTAKLTQ6CS5sb25nCWV4Y2VwdGlvbl9oYW5kbGluZ190YWJsZQorOToJLmxvbmcJTk1JX1ZFQworMTA6CS5sb25nCWluX25taQorMTE6CisjZW5kaWYgLyogZGVmaW5lZChDT05GSUdfS0dEQikgKi8KKwlzdHMJcHIsIGszCQkhIHNhdmUgb3JpZ2luYWwgcHIgdmFsdWUgaW4gazMKKwltb3ZhCWV4Y2VwdGlvbl9kYXRhLCBrMAogCi1pbnRlcnJ1cHRfZXhjZXB0aW9uOgotCW1vdi5sCTFmLCByOQorCSEgU2V0dXAgc3RhY2sgYW5kIHNhdmUgRFNQIGNvbnRleHQgKGswIGNvbnRhaW5zIG9yaWdpbmFsIHIxNSBvbiByZXR1cm4pCisJYnNyCXByZXBhcmVfc3RhY2tfc2F2ZV9kc3AKKwkgUFJFRihrMCkKKworCSEgU2F2ZSByZWdpc3RlcnMgLyBTd2l0Y2ggdG8gYmFuayAwCisJbW92LmwJMWYsIGs0CQkhIFNSIGJpdHMgdG8gY2xlYXIgaW4gazQKKwlic3IJc2F2ZV9yZWdzCSEgbmVlZHMgb3JpZ2luYWwgcHIgdmFsdWUgaW4gazMKKwkgbW92CSMtMSwgazIJCSEgZGVmYXVsdCB2ZWN0b3Iga2VwdCBpbiBrMgorCisJISBTZXR1cCByZXR1cm4gYWRkcmVzcyBhbmQganVtcCB0byBkb19JUlEKKwltb3YubAk0ZiwgcjkJCSEgZmV0Y2ggcmV0dXJuIGFkZHJlc3MKKwlsZHMJcjksIHByCQkhIHB1dCByZXR1cm4gYWRkcmVzcyBpbiBwcgogCW1vdi5sCTJmLCByNAotCW1vdi5sCUByNCwgcjQKKwltb3YubAkzZiwgcjkKKwltb3YubAlAcjQsIHI0CQkhIHBhc3MgSU5URVZUIHZlY3RvciBhcyBhcmcwCiAJam1wCUByOQotCSBtb3YJcjE1LCByNQotCXJ0cwotCSBub3AKKwkgbW92CXIxNSwgcjUJCSEgcGFzcyBzYXZlZCByZWdpc3RlcnMgYXMgYXJnMQogCi0JLmFsaWduIDIKLTE6CS5sb25nCWRvX0lSUQotMjoJLmxvbmcJSU5URVZUCi0KLQkuYWxpZ24JMgogRU5UUlkoZXhjZXB0aW9uX25vbmUpCiAJcnRzCiAJIG5vcAorCisJLmFsaWduCUwxX0NBQ0hFX1NISUZUCitleGNlcHRpb25fZGF0YToKKzA6CS5sb25nCTB4MDAwMDgwZjAJISBGRD0xLCBJTUFTSz0xNQorMToJLmxvbmcJMHhjZmZmZmZmZgkhIFJCPTAsIEJMPTAKKzI6CS5sb25nCUlOVEVWVAorMzoJLmxvbmcJZG9fSVJRCis0OgkubG9uZwlyZXRfZnJvbV9pcnEKKzU6CS5sb25nCUVYUEVWVAorNjoJLmxvbmcJZXhjZXB0aW9uX2hhbmRsaW5nX3RhYmxlCis3OgkubG9uZwlyZXRfZnJvbV9leGNlcHRpb24KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc2V0dXAtc2g3NzA1LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3NldHVwLXNoNzcwNS5jCmluZGV4IDY0NjhhZTguLjYzYjY3YmEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc2V0dXAtc2g3NzA1LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zZXR1cC1zaDc3MDUuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBTSDc3MDUgU2V0dXAKICAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3ICBQYXVsIE11bmR0CisgKiAgQ29weXJpZ2h0IChDKSAyMDA2IC0gMjAwOSAgUGF1bCBNdW5kdAogICogIENvcHlyaWdodCAoQykgMjAwNyAgTm9idWhpcm8gSXdhbWF0c3UKICAqCiAgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwpAQCAtMjEsNTEgKzIxLDM2IEBACiAJLyogaW50ZXJydXB0IHNvdXJjZXMgKi8KIAlJUlEwLCBJUlExLCBJUlEyLCBJUlEzLCBJUlE0LCBJUlE1LAogCVBJTlQwNywgUElOVDgxNSwKLQlETUFDX0RFSTAsIERNQUNfREVJMSwgRE1BQ19ERUkyLCBETUFDX0RFSTMsCi0JU0NJRjBfRVJJLCBTQ0lGMF9SWEksIFNDSUYwX1RYSSwKLQlTQ0lGMl9FUkksIFNDSUYyX1JYSSwgU0NJRjJfVFhJLAotCUFEQ19BREksCi0JVVNCX1VTSTAsIFVTQl9VU0kxLAotCVRQVTAsIFRQVTEsIFRQVTIsIFRQVTMsCi0JVE1VMCwgVE1VMSwgVE1VMl9UVU5JLCBUTVUyX1RJQ1BJLAotCVJUQ19BVEksIFJUQ19QUkksIFJUQ19DVUksCi0JV0RULAotCVJFRl9SQ01JLAogCi0JLyogaW50ZXJydXB0IGdyb3VwcyAqLwotCVJUQywgVE1VMiwgRE1BQywgVVNCLCBTQ0lGMiwgU0NJRjAsCisJRE1BQywgU0NJRjAsIFNDSUYyLCBBRENfQURJLCBVU0IsCisKKwlUUFUwLCBUUFUxLCBUUFUyLCBUUFUzLAorCVRNVTAsIFRNVTEsIFRNVTIsCisKKwlSVEMsIFdEVCwgUkVGX1JDTUksCiB9OwogCiBzdGF0aWMgc3RydWN0IGludGNfdmVjdCB2ZWN0b3JzW10gX19pbml0ZGF0YSA9IHsKIAkvKiBJUlEwLT41IGFyZSBoYW5kbGVkIGluIHNldHVwLXNoMy5jICovCiAJSU5UQ19WRUNUKFBJTlQwNywgMHg3MDApLCBJTlRDX1ZFQ1QoUElOVDgxNSwgMHg3MjApLAotCUlOVENfVkVDVChETUFDX0RFSTAsIDB4ODAwKSwgSU5UQ19WRUNUKERNQUNfREVJMSwgMHg4MjApLAotCUlOVENfVkVDVChETUFDX0RFSTIsIDB4ODQwKSwgSU5UQ19WRUNUKERNQUNfREVJMywgMHg4NjApLAotCUlOVENfVkVDVChTQ0lGMF9FUkksIDB4ODgwKSwgSU5UQ19WRUNUKFNDSUYwX1JYSSwgMHg4YTApLAotCUlOVENfVkVDVChTQ0lGMF9UWEksIDB4OGUwKSwKLQlJTlRDX1ZFQ1QoU0NJRjJfRVJJLCAweDkwMCksIElOVENfVkVDVChTQ0lGMl9SWEksIDB4OTIwKSwKLQlJTlRDX1ZFQ1QoU0NJRjJfVFhJLCAweDk2MCksCisJSU5UQ19WRUNUKERNQUMsIDB4ODAwKSwgSU5UQ19WRUNUKERNQUMsIDB4ODIwKSwKKwlJTlRDX1ZFQ1QoRE1BQywgMHg4NDApLCBJTlRDX1ZFQ1QoRE1BQywgMHg4NjApLAorCUlOVENfVkVDVChTQ0lGMCwgMHg4ODApLCBJTlRDX1ZFQ1QoU0NJRjAsIDB4OGEwKSwKKwlJTlRDX1ZFQ1QoU0NJRjAsIDB4OGUwKSwKKwlJTlRDX1ZFQ1QoU0NJRjIsIDB4OTAwKSwgSU5UQ19WRUNUKFNDSUYyLCAweDkyMCksCisJSU5UQ19WRUNUKFNDSUYyLCAweDk2MCksCiAJSU5UQ19WRUNUKEFEQ19BREksIDB4OTgwKSwKLQlJTlRDX1ZFQ1QoVVNCX1VTSTAsIDB4YTIwKSwgSU5UQ19WRUNUKFVTQl9VU0kxLCAweGE0MCksCisJSU5UQ19WRUNUKFVTQiwgMHhhMjApLCBJTlRDX1ZFQ1QoVVNCLCAweGE0MCksCiAJSU5UQ19WRUNUKFRQVTAsIDB4YzAwKSwgSU5UQ19WRUNUKFRQVTEsIDB4YzIwKSwKIAlJTlRDX1ZFQ1QoVFBVMiwgMHhjODApLCBJTlRDX1ZFQ1QoVFBVMywgMHhjYTApLAogCUlOVENfVkVDVChUTVUwLCAweDQwMCksIElOVENfVkVDVChUTVUxLCAweDQyMCksCi0JSU5UQ19WRUNUKFRNVTJfVFVOSSwgMHg0NDApLCBJTlRDX1ZFQ1QoVE1VMl9USUNQSSwgMHg0NjApLAotCUlOVENfVkVDVChSVENfQVRJLCAweDQ4MCksIElOVENfVkVDVChSVENfUFJJLCAweDRhMCksCi0JSU5UQ19WRUNUKFJUQ19DVUksIDB4NGMwKSwKKwlJTlRDX1ZFQ1QoVE1VMiwgMHg0NDApLCBJTlRDX1ZFQ1QoVE1VMiwgMHg0NjApLAorCUlOVENfVkVDVChSVEMsIDB4NDgwKSwgSU5UQ19WRUNUKFJUQywgMHg0YTApLAorCUlOVENfVkVDVChSVEMsIDB4NGMwKSwKIAlJTlRDX1ZFQ1QoV0RULCAweDU2MCksCiAJSU5UQ19WRUNUKFJFRl9SQ01JLCAweDU4MCksCiB9OwogCi1zdGF0aWMgc3RydWN0IGludGNfZ3JvdXAgZ3JvdXBzW10gX19pbml0ZGF0YSA9IHsKLQlJTlRDX0dST1VQKFJUQywgUlRDX0FUSSwgUlRDX1BSSSwgUlRDX0NVSSksCi0JSU5UQ19HUk9VUChUTVUyLCBUTVUyX1RVTkksIFRNVTJfVElDUEkpLAotCUlOVENfR1JPVVAoRE1BQywgRE1BQ19ERUkwLCBETUFDX0RFSTEsIERNQUNfREVJMiwgRE1BQ19ERUkzKSwKLQlJTlRDX0dST1VQKFVTQiwgVVNCX1VTSTAsIFVTQl9VU0kxKSwKLQlJTlRDX0dST1VQKFNDSUYwLCBTQ0lGMF9FUkksIFNDSUYwX1JYSSwgU0NJRjBfVFhJKSwKLQlJTlRDX0dST1VQKFNDSUYyLCBTQ0lGMl9FUkksIFNDSUYyX1JYSSwgU0NJRjJfVFhJKSwKLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgaW50Y19wcmlvX3JlZyBwcmlvX3JlZ2lzdGVyc1tdIF9faW5pdGRhdGEgPSB7CiAJeyAweGZmZmZmZWUyLCAwLCAxNiwgNCwgLyogSVBSQSAqLyB7IFRNVTAsIFRNVTEsIFRNVTIsIFJUQyB9IH0sCiAJeyAweGZmZmZmZWU0LCAwLCAxNiwgNCwgLyogSVBSQiAqLyB7IFdEVCwgUkVGX1JDTUksIDAsIDAgfSB9LApAQCAtNzgsNyArNjMsNyBAQAogCiB9OwogCi1zdGF0aWMgREVDTEFSRV9JTlRDX0RFU0MoaW50Y19kZXNjLCAic2g3NzA1IiwgdmVjdG9ycywgZ3JvdXBzLAorc3RhdGljIERFQ0xBUkVfSU5UQ19ERVNDKGludGNfZGVzYywgInNoNzcwNSIsIHZlY3RvcnMsIE5VTEwsCiAJCQkgTlVMTCwgcHJpb19yZWdpc3RlcnMsIE5VTEwpOwogCiBzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpX3BsYXRmb3JtX2RhdGFbXSA9IHsKQEAgLTg2LDEyICs3MSwxMiBAQAogCQkubWFwYmFzZQk9IDB4YTQ0MTAwMDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSB7IDU2LCA1NywgNTkgfSwKKwkJLmlycXMJCT0geyA1NiwgNTYsIDU2IH0sCiAJfSwgewogCQkubWFwYmFzZQk9IDB4YTQ0MDAwMDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSB7IDUyLCA1MywgNTUgfSwKKwkJLmlycXMJCT0geyA1MiwgNTIsIDUyIH0sCiAJfSwgewogCQkuZmxhZ3MgPSAwLAogCX0KQEAgLTExNSwxNCArMTAwLDYgQEAKIAkJLnN0YXJ0ICA9IDIwLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKIAl9LAotCVsyXSA9CXsKLQkJLnN0YXJ0CT0gMjEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JWzNdID0JewotCQkuc3RhcnQJPSAyMiwKLQkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAotCX0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHNoX3J0Y19wbGF0Zm9ybV9pbmZvIHJ0Y19pbmZvID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zZXR1cC1zaDc3MHguYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc2V0dXAtc2g3NzB4LmMKaW5kZXggOTNjNTVlMi4uYTc0Zjk2MCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zZXR1cC1zaDc3MHguYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3NldHVwLXNoNzcweC5jCkBAIC0yLDYgKzIsNyBAQAogICogU0gzIFNldHVwIGNvZGUgZm9yIFNINzcwNiwgU0g3NzA3LCBTSDc3MDgsIFNINzcwOQogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgIE1hZ251cyBEYW1tCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5ICBQYXVsIE11bmR0CiAgKgogICogQmFzZWQgb24gc2V0dXAtc2g3NzA5LmMKICAqCkBAIC0yNCw0NiArMjUsMzcgQEAKIAkvKiBpbnRlcnJ1cHQgc291cmNlcyAqLwogCUlSUTAsIElSUTEsIElSUTIsIElSUTMsIElSUTQsIElSUTUsCiAJUElOVDA3LCBQSU5UODE1LAotCURNQUNfREVJMCwgRE1BQ19ERUkxLCBETUFDX0RFSTIsIERNQUNfREVJMywKLQlTQ0lGMF9FUkksIFNDSUYwX1JYSSwgU0NJRjBfQlJJLCBTQ0lGMF9UWEksCi0JU0NJRjJfRVJJLCBTQ0lGMl9SWEksIFNDSUYyX0JSSSwgU0NJRjJfVFhJLAotCVNDSV9FUkksIFNDSV9SWEksIFNDSV9UWEksIFNDSV9URUksCi0JQURDX0FESSwKKwlETUFDLCBTQ0lGMCwgU0NJRjIsIFNDSSwgQURDX0FESSwKIAlMQ0RDLCBQQ0MwLCBQQ0MxLAotCVRNVTAsIFRNVTEsIFRNVTJfVFVOSSwgVE1VMl9USUNQSSwKLQlSVENfQVRJLCBSVENfUFJJLCBSVENfQ1VJLAotCVdEVCwKLQlSRUZfUkNNSSwgUkVGX1JPVkksCi0KLQkvKiBpbnRlcnJ1cHQgZ3JvdXBzICovCi0JUlRDLCBSRUYsIFRNVTIsIERNQUMsIFNDSSwgU0NJRjIsIFNDSUYwLAorCVRNVTAsIFRNVTEsIFRNVTIsCisJUlRDLCBXRFQsIFJFRiwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaW50Y192ZWN0IHZlY3RvcnNbXSBfX2luaXRkYXRhID0gewogCUlOVENfVkVDVChUTVUwLCAweDQwMCksIElOVENfVkVDVChUTVUxLCAweDQyMCksCi0JSU5UQ19WRUNUKFRNVTJfVFVOSSwgMHg0NDApLCBJTlRDX1ZFQ1QoVE1VMl9USUNQSSwgMHg0NjApLAotCUlOVENfVkVDVChSVENfQVRJLCAweDQ4MCksIElOVENfVkVDVChSVENfUFJJLCAweDRhMCksCi0JSU5UQ19WRUNUKFJUQ19DVUksIDB4NGMwKSwKLQlJTlRDX1ZFQ1QoU0NJX0VSSSwgMHg0ZTApLCBJTlRDX1ZFQ1QoU0NJX1JYSSwgMHg1MDApLAotCUlOVENfVkVDVChTQ0lfVFhJLCAweDUyMCksIElOVENfVkVDVChTQ0lfVEVJLCAweDU0MCksCisJSU5UQ19WRUNUKFRNVTIsIDB4NDQwKSwgSU5UQ19WRUNUKFRNVTIsIDB4NDYwKSwKKwlJTlRDX1ZFQ1QoUlRDLCAweDQ4MCksIElOVENfVkVDVChSVEMsIDB4NGEwKSwKKwlJTlRDX1ZFQ1QoUlRDLCAweDRjMCksCisJSU5UQ19WRUNUKFNDSSwgMHg0ZTApLCBJTlRDX1ZFQ1QoU0NJLCAweDUwMCksCisJSU5UQ19WRUNUKFNDSSwgMHg1MjApLCBJTlRDX1ZFQ1QoU0NJLCAweDU0MCksCiAJSU5UQ19WRUNUKFdEVCwgMHg1NjApLAotCUlOVENfVkVDVChSRUZfUkNNSSwgMHg1ODApLAotCUlOVENfVkVDVChSRUZfUk9WSSwgMHg1YTApLAorCUlOVENfVkVDVChSRUYsIDB4NTgwKSwKKwlJTlRDX1ZFQ1QoUkVGLCAweDVhMCksCiAjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA2KSB8fCBcCiAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA3KSB8fCBcCiAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA5KQogCS8qIElSUTAtPjUgYXJlIGhhbmRsZWQgaW4gc2V0dXAtc2gzLmMgKi8KLQlJTlRDX1ZFQ1QoRE1BQ19ERUkwLCAweDgwMCksIElOVENfVkVDVChETUFDX0RFSTEsIDB4ODIwKSwKLQlJTlRDX1ZFQ1QoRE1BQ19ERUkyLCAweDg0MCksIElOVENfVkVDVChETUFDX0RFSTMsIDB4ODYwKSwKKwlJTlRDX1ZFQ1QoRE1BQywgMHg4MDApLCBJTlRDX1ZFQ1QoRE1BQywgMHg4MjApLAorCUlOVENfVkVDVChETUFDLCAweDg0MCksIElOVENfVkVDVChETUFDLCAweDg2MCksCiAJSU5UQ19WRUNUKEFEQ19BREksIDB4OTgwKSwKLQlJTlRDX1ZFQ1QoU0NJRjJfRVJJLCAweDkwMCksIElOVENfVkVDVChTQ0lGMl9SWEksIDB4OTIwKSwKLQlJTlRDX1ZFQ1QoU0NJRjJfQlJJLCAweDk0MCksIElOVENfVkVDVChTQ0lGMl9UWEksIDB4OTYwKSwKKwlJTlRDX1ZFQ1QoU0NJRjIsIDB4OTAwKSwgSU5UQ19WRUNUKFNDSUYyLCAweDkyMCksCisJSU5UQ19WRUNUKFNDSUYyLCAweDk0MCksIElOVENfVkVDVChTQ0lGMiwgMHg5NjApLAogI2VuZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA3KSB8fCBcCiAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA5KQogCUlOVENfVkVDVChQSU5UMDcsIDB4NzAwKSwgSU5UQ19WRUNUKFBJTlQ4MTUsIDB4NzIwKSwKLQlJTlRDX1ZFQ1QoU0NJRjBfRVJJLCAweDg4MCksIElOVENfVkVDVChTQ0lGMF9SWEksIDB4OGEwKSwKLQlJTlRDX1ZFQ1QoU0NJRjBfQlJJLCAweDhjMCksIElOVENfVkVDVChTQ0lGMF9UWEksIDB4OGUwKSwKKwlJTlRDX1ZFQ1QoU0NJRjAsIDB4ODgwKSwgSU5UQ19WRUNUKFNDSUYwLCAweDhhMCksCisJSU5UQ19WRUNUKFNDSUYwLCAweDhjMCksIElOVENfVkVDVChTQ0lGMCwgMHg4ZTApLAogI2VuZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA3KQogCUlOVENfVkVDVChMQ0RDLCAweDlhMCksCkBAIC03MSwxNiArNjMsNiBAQAogI2VuZGlmCiB9OwogCi1zdGF0aWMgc3RydWN0IGludGNfZ3JvdXAgZ3JvdXBzW10gX19pbml0ZGF0YSA9IHsKLQlJTlRDX0dST1VQKFJUQywgUlRDX0FUSSwgUlRDX1BSSSwgUlRDX0NVSSksCi0JSU5UQ19HUk9VUChUTVUyLCBUTVUyX1RVTkksIFRNVTJfVElDUEkpLAotCUlOVENfR1JPVVAoUkVGLCBSRUZfUkNNSSwgUkVGX1JPVkkpLAotCUlOVENfR1JPVVAoRE1BQywgRE1BQ19ERUkwLCBETUFDX0RFSTEsIERNQUNfREVJMiwgRE1BQ19ERUkzKSwKLQlJTlRDX0dST1VQKFNDSSwgU0NJX0VSSSwgU0NJX1JYSSwgU0NJX1RYSSwgU0NJX1RFSSksCi0JSU5UQ19HUk9VUChTQ0lGMCwgU0NJRjBfRVJJLCBTQ0lGMF9SWEksIFNDSUYwX0JSSSwgU0NJRjBfVFhJKSwKLQlJTlRDX0dST1VQKFNDSUYyLCBTQ0lGMl9FUkksIFNDSUYyX1JYSSwgU0NJRjJfQlJJLCBTQ0lGMl9UWEkpLAotfTsKLQogc3RhdGljIHN0cnVjdCBpbnRjX3ByaW9fcmVnIHByaW9fcmVnaXN0ZXJzW10gX19pbml0ZGF0YSA9IHsKIAl7IDB4ZmZmZmZlZTIsIDAsIDE2LCA0LCAvKiBJUFJBICovIHsgVE1VMCwgVE1VMSwgVE1VMiwgUlRDIH0gfSwKIAl7IDB4ZmZmZmZlZTQsIDAsIDE2LCA0LCAvKiBJUFJCICovIHsgV0RULCBSRUYsIFNDSSwgMCB9IH0sCkBAIC0xMDEsNyArODMsNyBAQAogI2VuZGlmCiB9OwogCi1zdGF0aWMgREVDTEFSRV9JTlRDX0RFU0MoaW50Y19kZXNjLCAic2g3NzB4IiwgdmVjdG9ycywgZ3JvdXBzLAorc3RhdGljIERFQ0xBUkVfSU5UQ19ERVNDKGludGNfZGVzYywgInNoNzcweCIsIHZlY3RvcnMsIE5VTEwsCiAJCQkgTlVMTCwgcHJpb19yZWdpc3RlcnMsIE5VTEwpOwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHJ0Y19yZXNvdXJjZXNbXSA9IHsKQEAgLTExMSwxNCArOTMsNiBAQAogCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JTywKIAl9LAogCVsxXSA9CXsKLQkJLnN0YXJ0ICA9IDIxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotCVsyXSA9CXsKLQkJLnN0YXJ0CT0gMjIsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JWzNdID0JewogCQkuc3RhcnQJPSAyMCwKIAkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAogCX0sCkBAIC0xMzYsNyArMTEwLDcgQEAKIAkJLm1hcGJhc2UJPSAweGZmZmZmZTgwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJLAotCQkuaXJxcwkJPSB7IDIzLCAyNCwgMjUsIDAgfSwKKwkJLmlycXMJCT0geyAyMywgMjMsIDIzLCAwIH0sCiAJfSwKICNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDYpIHx8IFwKICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDcpIHx8IFwKQEAgLTE0NSw3ICsxMTksNyBAQAogCQkubWFwYmFzZQk9IDB4YTQwMDAxNTAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSB7IDU2LCA1NywgNTksIDU4IH0sCisJCS5pcnFzCQk9IHsgNTYsIDU2LCA1NiwgNTYgfSwKIAl9LAogI2VuZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA3KSB8fCBcCkBAIC0xNTQsNyArMTI4LDcgQEAKIAkJLm1hcGJhc2UJPSAweGE0MDAwMTQwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfSVJEQSwKLQkJLmlycXMJCT0geyA1MiwgNTMsIDU1LCA1NCB9LAorCQkuaXJxcwkJPSB7IDUyLCA1MiwgNTIsIDUyIH0sCiAJfSwKICNlbmRpZgogCXsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc2V0dXAtc2g3NzEwLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3NldHVwLXNoNzcxMC5jCmluZGV4IDc3ZWVlNDguLjMzNTA5OGIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc2V0dXAtc2g3NzEwLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zZXR1cC1zaDc3MTAuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBTSDMgU2V0dXAgY29kZSBmb3IgU0g3NzEwLCBTSDc3MTIKICAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3ICBQYXVsIE11bmR0CisgKiAgQ29weXJpZ2h0IChDKSAyMDA2IC0gMjAwOSAgUGF1bCBNdW5kdAogICogIENvcHlyaWdodCAoQykgMjAwNyAgTm9idWhpcm8gSXdhbWF0c3UKICAqCiAgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwpAQCAtMjAsNTkgKzIwLDQwIEBACiAKIAkvKiBpbnRlcnJ1cHQgc291cmNlcyAqLwogCUlSUTAsIElSUTEsIElSUTIsIElSUTMsIElSUTQsIElSUTUsCi0JRE1BQ19ERUkwLCBETUFDX0RFSTEsIERNQUNfREVJMiwgRE1BQ19ERUkzLAotCVNDSUYwX0VSSSwgU0NJRjBfUlhJLCBTQ0lGMF9CUkksIFNDSUYwX1RYSSwKLQlTQ0lGMV9FUkksIFNDSUYxX1JYSSwgU0NJRjFfQlJJLCBTQ0lGMV9UWEksCi0JRE1BQ19ERUk0LCBETUFDX0RFSTUsCi0JSVBTRUMsCisJRE1BQzEsIFNDSUYwLCBTQ0lGMSwgRE1BQzIsIElQU0VDLAogCUVETUFDMCwgRURNQUMxLCBFRE1BQzIsCi0JU0lPRjBfRVJJLCBTSU9GMF9UWEksIFNJT0YwX1JYSSwgU0lPRjBfQ0NJLAotCVNJT0YxX0VSSSwgU0lPRjFfVFhJLCBTSU9GMV9SWEksIFNJT0YxX0NDSSwKLQlUTVUwLCBUTVUxLCBUTVUyLAotCVJUQ19BVEksIFJUQ19QUkksIFJUQ19DVUksCi0JV0RULAotCVJFRiwKKwlTSU9GMCwgU0lPRjEsCiAKLQkvKiBpbnRlcnJ1cHQgZ3JvdXBzICovCi0JUlRDLCBETUFDMSwgU0NJRjAsIFNDSUYxLCBETUFDMiwgU0lPRjAsIFNJT0YxLAorCVRNVTAsIFRNVTEsIFRNVTIsCisJUlRDLCBXRFQsIFJFRiwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaW50Y192ZWN0IHZlY3RvcnNbXSBfX2luaXRkYXRhID0gewogCS8qIElSUTAtPjUgYXJlIGhhbmRsZWQgaW4gc2V0dXAtc2gzLmMgKi8KLQlJTlRDX1ZFQ1QoRE1BQ19ERUkwLCAweDgwMCksIElOVENfVkVDVChETUFDX0RFSTEsIDB4ODIwKSwKLQlJTlRDX1ZFQ1QoRE1BQ19ERUkyLCAweDg0MCksIElOVENfVkVDVChETUFDX0RFSTMsIDB4ODYwKSwKLQlJTlRDX1ZFQ1QoU0NJRjBfRVJJLCAweDg4MCksIElOVENfVkVDVChTQ0lGMF9SWEksIDB4OGEwKSwKLQlJTlRDX1ZFQ1QoU0NJRjBfQlJJLCAweDhjMCksIElOVENfVkVDVChTQ0lGMF9UWEksIDB4OGUwKSwKLQlJTlRDX1ZFQ1QoU0NJRjFfRVJJLCAweDkwMCksIElOVENfVkVDVChTQ0lGMV9SWEksIDB4OTIwKSwKLQlJTlRDX1ZFQ1QoU0NJRjFfQlJJLCAweDk0MCksIElOVENfVkVDVChTQ0lGMV9UWEksIDB4OTYwKSwKLQlJTlRDX1ZFQ1QoRE1BQ19ERUk0LCAweGI4MCksIElOVENfVkVDVChETUFDX0RFSTUsIDB4YmEwKSwKKwlJTlRDX1ZFQ1QoRE1BQzEsIDB4ODAwKSwgSU5UQ19WRUNUKERNQUMxLCAweDgyMCksCisJSU5UQ19WRUNUKERNQUMxLCAweDg0MCksIElOVENfVkVDVChETUFDMSwgMHg4NjApLAorCUlOVENfVkVDVChTQ0lGMCwgMHg4ODApLCBJTlRDX1ZFQ1QoU0NJRjAsIDB4OGEwKSwKKwlJTlRDX1ZFQ1QoU0NJRjAsIDB4OGMwKSwgSU5UQ19WRUNUKFNDSUYwLCAweDhlMCksCisJSU5UQ19WRUNUKFNDSUYxLCAweDkwMCksIElOVENfVkVDVChTQ0lGMSwgMHg5MjApLAorCUlOVENfVkVDVChTQ0lGMSwgMHg5NDApLCBJTlRDX1ZFQ1QoU0NJRjEsIDB4OTYwKSwKKwlJTlRDX1ZFQ1QoRE1BQzIsIDB4YjgwKSwgSU5UQ19WRUNUKERNQUMyLCAweGJhMCksCiAjaWZkZWYgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcxMAogCUlOVENfVkVDVChJUFNFQywgMHhiZTApLAogI2VuZGlmCiAJSU5UQ19WRUNUKEVETUFDMCwgMHhjMDApLCBJTlRDX1ZFQ1QoRURNQUMxLCAweGMyMCksCiAJSU5UQ19WRUNUKEVETUFDMiwgMHhjNDApLAotCUlOVENfVkVDVChTSU9GMF9FUkksIDB4ZTAwKSwgSU5UQ19WRUNUKFNJT0YwX1RYSSwgMHhlMjApLAotCUlOVENfVkVDVChTSU9GMF9SWEksIDB4ZTQwKSwgSU5UQ19WRUNUKFNJT0YwX0NDSSwgMHhlNjApLAotCUlOVENfVkVDVChTSU9GMV9FUkksIDB4ZTgwKSwgSU5UQ19WRUNUKFNJT0YxX1RYSSwgMHhlYTApLAotCUlOVENfVkVDVChTSU9GMV9SWEksIDB4ZWMwKSwgSU5UQ19WRUNUKFNJT0YxX0NDSSwgMHhlZTApLAorCUlOVENfVkVDVChTSU9GMCwgMHhlMDApLCBJTlRDX1ZFQ1QoU0lPRjAsIDB4ZTIwKSwKKwlJTlRDX1ZFQ1QoU0lPRjAsIDB4ZTQwKSwgSU5UQ19WRUNUKFNJT0YwLCAweGU2MCksCisJSU5UQ19WRUNUKFNJT0YxLCAweGU4MCksIElOVENfVkVDVChTSU9GMSwgMHhlYTApLAorCUlOVENfVkVDVChTSU9GMSwgMHhlYzApLCBJTlRDX1ZFQ1QoU0lPRjEsIDB4ZWUwKSwKIAlJTlRDX1ZFQ1QoVE1VMCwgMHg0MDApLCBJTlRDX1ZFQ1QoVE1VMSwgMHg0MjApLAogCUlOVENfVkVDVChUTVUyLCAweDQ0MCksCi0JSU5UQ19WRUNUKFJUQ19BVEksIDB4NDgwKSwgSU5UQ19WRUNUKFJUQ19QUkksIDB4NGEwKSwKLQlJTlRDX1ZFQ1QoUlRDX0NVSSwgMHg0YzApLAorCUlOVENfVkVDVChSVEMsIDB4NDgwKSwgSU5UQ19WRUNUKFJUQywgMHg0YTApLAorCUlOVENfVkVDVChSVEMsIDB4NGMwKSwKIAlJTlRDX1ZFQ1QoV0RULCAweDU2MCksCiAJSU5UQ19WRUNUKFJFRiwgMHg1ODApLAogfTsKIAotc3RhdGljIHN0cnVjdCBpbnRjX2dyb3VwIGdyb3Vwc1tdIF9faW5pdGRhdGEgPSB7Ci0JSU5UQ19HUk9VUChSVEMsIFJUQ19BVEksIFJUQ19QUkksIFJUQ19DVUkpLAotCUlOVENfR1JPVVAoRE1BQzEsIERNQUNfREVJMCwgRE1BQ19ERUkxLCBETUFDX0RFSTIsIERNQUNfREVJMyksCi0JSU5UQ19HUk9VUChTQ0lGMCwgU0NJRjBfRVJJLCBTQ0lGMF9SWEksIFNDSUYwX0JSSSwgU0NJRjBfVFhJKSwKLQlJTlRDX0dST1VQKFNDSUYxLCBTQ0lGMV9FUkksIFNDSUYxX1JYSSwgU0NJRjFfQlJJLCBTQ0lGMV9UWEkpLAotCUlOVENfR1JPVVAoRE1BQzIsIERNQUNfREVJNCwgRE1BQ19ERUk1KSwKLQlJTlRDX0dST1VQKFNJT0YwLCBTSU9GMF9FUkksIFNJT0YwX1RYSSwgU0lPRjBfUlhJLCBTSU9GMF9DQ0kpLAotCUlOVENfR1JPVVAoU0lPRjEsIFNJT0YxX0VSSSwgU0lPRjFfVFhJLCBTSU9GMV9SWEksIFNJT0YxX0NDSSksCi19OwotCiBzdGF0aWMgc3RydWN0IGludGNfcHJpb19yZWcgcHJpb19yZWdpc3RlcnNbXSBfX2luaXRkYXRhID0gewogCXsgMHhmZmZmZmVlMiwgMCwgMTYsIDQsIC8qIElQUkEgKi8geyBUTVUwLCBUTVUxLCBUTVUyLCBSVEMgfSB9LAogCXsgMHhmZmZmZmVlNCwgMCwgMTYsIDQsIC8qIElQUkIgKi8geyBXRFQsIFJFRiwgMCwgMCB9IH0sCkBAIC04NSw3ICs2Niw3IEBACiAJeyAweGE0MDgwMDA2LCAwLCAxNiwgNCwgLyogSVBSSSAqLyB7IDAsIDAsIFNJT0YxIH0gfSwKIH07CiAKLXN0YXRpYyBERUNMQVJFX0lOVENfREVTQyhpbnRjX2Rlc2MsICJzaDc3MTAiLCB2ZWN0b3JzLCBncm91cHMsCitzdGF0aWMgREVDTEFSRV9JTlRDX0RFU0MoaW50Y19kZXNjLCAic2g3NzEwIiwgdmVjdG9ycywgTlVMTCwKIAkJCSBOVUxMLCBwcmlvX3JlZ2lzdGVycywgTlVMTCk7CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcnRjX3Jlc291cmNlc1tdID0gewpAQCAtOTgsMTQgKzc5LDYgQEAKIAkJLnN0YXJ0ICA9IDIwLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKIAl9LAotCVsyXSA9CXsKLQkJLnN0YXJ0CT0gMjEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JWzNdID0JewotCQkuc3RhcnQJPSAyMiwKLQkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAotCX0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHNoX3J0Y19wbGF0Zm9ybV9pbmZvIHJ0Y19pbmZvID0gewpAQCAtMTI3LDEyICsxMDAsMTIgQEAKIAkJLm1hcGJhc2UJPSAweGE0NDAwMDAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyA1MiwgNTMsIDU1LCA1NCB9LAorCQkuaXJxcwkJPSB7IDUyLCA1MiwgNTIsIDUyIH0sCiAJfSwgewogCQkubWFwYmFzZQk9IDB4YTQ0MTAwMDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcyAgICAgICAgICAgPSB7IDU2LCA1NywgNTksIDU4IH0sCisJCS5pcnFzICAgICAgICAgICA9IHsgNTYsIDU2LCA1NiwgNTYgfSwKIAl9LCB7CiAKIAkJLmZsYWdzID0gMCwKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc2V0dXAtc2g3NzIwLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3NldHVwLXNoNzcyMC5jCmluZGV4IGY4MDdhMjEuLjAwMzg3NGEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc2V0dXAtc2g3NzIwLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zZXR1cC1zaDc3MjAuYwpAQCAtMiw2ICsyLDcgQEAKICAqIFNINzcyMCBTZXR1cAogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgIE1hcmt1cyBCcnVubmVyLCBNYXJrIEpvbmFzCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5ICBQYXVsIE11bmR0CiAgKgogICogIEJhc2VkIG9uIGFyY2gvc2gva2VybmVsL2NwdS9zaDQvc2V0dXAtc2g3NzUwLmM6CiAgKgpAQCAtMjYsMTcgKzI3LDcgQEAKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JTywKIAl9LAogCVsxXSA9IHsKLQkJLyogUGVyaW9kIElSUSAqLwotCQkuc3RhcnQJPSAyMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLQlbMl0gPSB7Ci0JCS8qIENhcnJ5IElSUSAqLwotCQkuc3RhcnQJPSAyMiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLQlbM10gPSB7Ci0JCS8qIEFsYXJtIElSUSAqLworCQkvKiBTaGFyZWQgUGVyaW9kL0NhcnJ5L0FsYXJtIElSUSAqLwogCQkuc3RhcnQJPSAyMCwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCiAJfSwKQEAgLTE1MCw2MiArMTQxLDQ5IEBACiAJVU5VU0VEID0gMCwKIAogCS8qIGludGVycnVwdCBzb3VyY2VzICovCi0JVE1VMCwgVE1VMSwgVE1VMiwgUlRDX0FUSSwgUlRDX1BSSSwgUlRDX0NVSSwKLQlXRFQsIFJFRl9SQ01JLCBTSU1fRVJJLCBTSU1fUlhJLCBTSU1fVFhJLCBTSU1fVEVORCwKKwlUTVUwLCBUTVUxLCBUTVUyLCBSVEMsCisJV0RULCBSRUZfUkNNSSwgU0lNLAogCUlSUTAsIElSUTEsIElSUTIsIElSUTMsCiAJVVNCRl9TUEQsIFRNVV9TVU5JLCBJUlE1LCBJUlE0LAotCURNQUMxX0RFSTAsIERNQUMxX0RFSTEsIERNQUMxX0RFSTIsIERNQUMxX0RFSTMsIExDREMsIFNTTCwKLQlBREMsIERNQUMyX0RFSTQsIERNQUMyX0RFSTUsIFVTQkZJMCwgVVNCRkkxLCBDTVQsCisJRE1BQzEsIExDREMsIFNTTCwKKwlBREMsIERNQUMyLCBVU0JGSSwgQ01ULAogCVNDSUYwLCBTQ0lGMSwKLQlQSU5UMDcsIFBJTlQ4MTUsIFRQVTAsIFRQVTEsIFRQVTIsIFRQVTMsIElJQywKLQlTSU9GMCwgU0lPRjEsIE1NQ0kwLCBNTUNJMSwgTU1DSTIsIE1NQ0kzLCBQQ0MsCisJUElOVDA3LCBQSU5UODE1LCBUUFUsIElJQywKKwlTSU9GMCwgU0lPRjEsIE1NQywgUENDLAogCVVTQkhJLCBBRkVJRiwKIAlIX1VESSwKLQkvKiBpbnRlcnJ1cHQgZ3JvdXBzICovCi0JVE1VLCBSVEMsIFNJTSwgRE1BQzEsIFVTQkZJLCBETUFDMiwgVVNCLCBUUFUsIE1NQywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaW50Y192ZWN0IHZlY3RvcnNbXSBfX2luaXRkYXRhID0gewogCS8qIElSUTAtPjUgYXJlIGhhbmRsZWQgaW4gc2V0dXAtc2gzLmMgKi8KIAlJTlRDX1ZFQ1QoVE1VMCwgMHg0MDApLCAgICAgICBJTlRDX1ZFQ1QoVE1VMSwgMHg0MjApLAotCUlOVENfVkVDVChUTVUyLCAweDQ0MCksICAgICAgIElOVENfVkVDVChSVENfQVRJLCAweDQ4MCksCi0JSU5UQ19WRUNUKFJUQ19QUkksIDB4NGEwKSwgICAgSU5UQ19WRUNUKFJUQ19DVUksIDB4NGMwKSwKLQlJTlRDX1ZFQ1QoU0lNX0VSSSwgMHg0ZTApLCAgICBJTlRDX1ZFQ1QoU0lNX1JYSSwgMHg1MDApLAotCUlOVENfVkVDVChTSU1fVFhJLCAweDUyMCksICAgIElOVENfVkVDVChTSU1fVEVORCwgMHg1NDApLAorCUlOVENfVkVDVChUTVUyLCAweDQ0MCksICAgICAgIElOVENfVkVDVChSVEMsIDB4NDgwKSwKKwlJTlRDX1ZFQ1QoUlRDLCAweDRhMCksCSAgICAgIElOVENfVkVDVChSVEMsIDB4NGMwKSwKKwlJTlRDX1ZFQ1QoU0lNLCAweDRlMCksCSAgICAgIElOVENfVkVDVChTSU0sIDB4NTAwKSwKKwlJTlRDX1ZFQ1QoU0lNLCAweDUyMCksCSAgICAgIElOVENfVkVDVChTSU0sIDB4NTQwKSwKIAlJTlRDX1ZFQ1QoV0RULCAweDU2MCksICAgICAgICBJTlRDX1ZFQ1QoUkVGX1JDTUksIDB4NTgwKSwKIAkvKiBIX1VESSBjYW5ub3QgYmUgbWFza2VkICovICBJTlRDX1ZFQ1QoVE1VX1NVTkksIDB4NmMwKSwKLQlJTlRDX1ZFQ1QoVVNCRl9TUEQsIDB4NmUwKSwgICBJTlRDX1ZFQ1QoRE1BQzFfREVJMCwgMHg4MDApLAotCUlOVENfVkVDVChETUFDMV9ERUkxLCAweDgyMCksIElOVENfVkVDVChETUFDMV9ERUkyLCAweDg0MCksCi0JSU5UQ19WRUNUKERNQUMxX0RFSTMsIDB4ODYwKSwgSU5UQ19WRUNUKExDREMsIDB4OTAwKSwKKwlJTlRDX1ZFQ1QoVVNCRl9TUEQsIDB4NmUwKSwgICBJTlRDX1ZFQ1QoRE1BQzEsIDB4ODAwKSwKKwlJTlRDX1ZFQ1QoRE1BQzEsIDB4ODIwKSwgICAgICBJTlRDX1ZFQ1QoRE1BQzEsIDB4ODQwKSwKKwlJTlRDX1ZFQ1QoRE1BQzEsIDB4ODYwKSwgICAgICBJTlRDX1ZFQ1QoTENEQywgMHg5MDApLAogI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMCkKIAlJTlRDX1ZFQ1QoU1NMLCAweDk4MCksCiAjZW5kaWYKLQlJTlRDX1ZFQ1QoVVNCRkkwLCAweGEyMCksICAgICBJTlRDX1ZFQ1QoVVNCRkkxLCAweGE0MCksCisJSU5UQ19WRUNUKFVTQkZJLCAweGEyMCksICAgICAgSU5UQ19WRUNUKFVTQkZJLCAweGE0MCksCiAJSU5UQ19WRUNUKFVTQkhJLCAweGE2MCksCi0JSU5UQ19WRUNUKERNQUMyX0RFSTQsIDB4YjgwKSwgSU5UQ19WRUNUKERNQUMyX0RFSTUsIDB4YmEwKSwKKwlJTlRDX1ZFQ1QoRE1BQzIsIDB4YjgwKSwgICAgICBJTlRDX1ZFQ1QoRE1BQzIsIDB4YmEwKSwKIAlJTlRDX1ZFQ1QoQURDLCAweGJlMCksICAgICAgICBJTlRDX1ZFQ1QoU0NJRjAsIDB4YzAwKSwKIAlJTlRDX1ZFQ1QoU0NJRjEsIDB4YzIwKSwgICAgICBJTlRDX1ZFQ1QoUElOVDA3LCAweGM4MCksCiAJSU5UQ19WRUNUKFBJTlQ4MTUsIDB4Y2EwKSwgICAgSU5UQ19WRUNUKFNJT0YwLCAweGQwMCksCi0JSU5UQ19WRUNUKFNJT0YxLCAweGQyMCksICAgICAgSU5UQ19WRUNUKFRQVTAsIDB4ZDgwKSwKLQlJTlRDX1ZFQ1QoVFBVMSwgMHhkYTApLCAgICAgICBJTlRDX1ZFQ1QoVFBVMiwgMHhkYzApLAotCUlOVENfVkVDVChUUFUzLCAweGRlMCksICAgICAgIElOVENfVkVDVChJSUMsIDB4ZTAwKSwKLQlJTlRDX1ZFQ1QoTU1DSTAsIDB4ZTgwKSwgICAgICBJTlRDX1ZFQ1QoTU1DSTEsIDB4ZWEwKSwKLQlJTlRDX1ZFQ1QoTU1DSTIsIDB4ZWMwKSwgICAgICBJTlRDX1ZFQ1QoTU1DSTMsIDB4ZWUwKSwKKwlJTlRDX1ZFQ1QoU0lPRjEsIDB4ZDIwKSwgICAgICBJTlRDX1ZFQ1QoVFBVLCAweGQ4MCksCisJSU5UQ19WRUNUKFRQVSwgMHhkYTApLCAgICAgICAgSU5UQ19WRUNUKFRQVSwgMHhkYzApLAorCUlOVENfVkVDVChUUFUsIDB4ZGUwKSwgICAgICAgIElOVENfVkVDVChJSUMsIDB4ZTAwKSwKKwlJTlRDX1ZFQ1QoTU1DLCAweGU4MCksICAgICAgICBJTlRDX1ZFQ1QoTU1DLCAweGVhMCksCisJSU5UQ19WRUNUKE1NQywgMHhlYzApLCAgICAgICAgSU5UQ19WRUNUKE1NQywgMHhlZTApLAogCUlOVENfVkVDVChDTVQsIDB4ZjAwKSwgICAgICAgIElOVENfVkVDVChQQ0MsIDB4ZjYwKSwKIAlJTlRDX1ZFQ1QoQUZFSUYsIDB4ZmUwKSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaW50Y19ncm91cCBncm91cHNbXSBfX2luaXRkYXRhID0gewotCUlOVENfR1JPVVAoVE1VLCBUTVUwLCBUTVUxLCBUTVUyKSwKLQlJTlRDX0dST1VQKFJUQywgUlRDX0FUSSwgUlRDX1BSSSwgUlRDX0NVSSksCi0JSU5UQ19HUk9VUChTSU0sIFNJTV9FUkksIFNJTV9SWEksIFNJTV9UWEksIFNJTV9URU5EKSwKLQlJTlRDX0dST1VQKERNQUMxLCBETUFDMV9ERUkwLCBETUFDMV9ERUkxLCBETUFDMV9ERUkyLCBETUFDMV9ERUkzKSwKLQlJTlRDX0dST1VQKFVTQkZJLCBVU0JGSTAsIFVTQkZJMSksCi0JSU5UQ19HUk9VUChETUFDMiwgRE1BQzJfREVJNCwgRE1BQzJfREVJNSksCi0JSU5UQ19HUk9VUChUUFUsIFRQVTAsIFRQVTEsIFRQVTIsIFRQVTMpLAotCUlOVENfR1JPVVAoTU1DLCBNTUNJMCwgTU1DSTEsIE1NQ0kyLCBNTUNJMyksCi19OwotCiBzdGF0aWMgc3RydWN0IGludGNfcHJpb19yZWcgcHJpb19yZWdpc3RlcnNbXSBfX2luaXRkYXRhID0gewogCXsgMHhBNDE0RkVFMlVMLCAwLCAxNiwgNCwgLyogSVBSQSAqLyB7IFRNVTAsIFRNVTEsIFRNVTIsIFJUQyB9IH0sCiAJeyAweEE0MTRGRUU0VUwsIDAsIDE2LCA0LCAvKiBJUFJCICovIHsgV0RULCBSRUZfUkNNSSwgU0lNLCAwIH0gfSwKQEAgLTIxOSw3ICsxOTcsNyBAQAogCXsgMHhBNDA4MDAwOFVMLCAwLCAxNiwgNCwgLyogSVBSSiAqLyB7IDAsIFVTQkhJLCAwLCBBRkVJRiB9IH0sCiB9OwogCi1zdGF0aWMgREVDTEFSRV9JTlRDX0RFU0MoaW50Y19kZXNjLCAic2g3NzIwIiwgdmVjdG9ycywgZ3JvdXBzLAorc3RhdGljIERFQ0xBUkVfSU5UQ19ERVNDKGludGNfZGVzYywgInNoNzcyMCIsIHZlY3RvcnMsIE5VTEwsCiAJCU5VTEwsIHByaW9fcmVnaXN0ZXJzLCBOVUxMKTsKIAogdm9pZCBfX2luaXQgcGxhdF9pcnFfc2V0dXAodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc3dzdXNwLlMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3N3c3VzcC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxMTQ1NDIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3N3c3VzcC5TCkBAIC0wLDAgKzEsMTQ3IEBACisvKgorICogYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zd3N1c3AuUworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBNYWdudXMgRGFtbQorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8bGludXgvc3lzLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKworI2RlZmluZSBrMAlyMAorI2RlZmluZSBrMQlyMQorI2RlZmluZSBrMglyMgorI2RlZmluZSBrMwlyMworI2RlZmluZSBrNAlyNAorCishIHN3c3VzcF9hcmNoX3Jlc3VtZSgpCishIC0gY29weSByZXN0b3JlX3BibGlzdCBwYWdlcworISAtIHJlc3RvcmUgcmVnaXN0ZXJzIGZyb20gc3dzdXNwX2FyY2hfcmVnc19jcHUwCisKK0VOVFJZKHN3c3VzcF9hcmNoX3Jlc3VtZSkKKwltb3YubAkxZiwgcjE1CisJbW92LmwJMmYsIHI0CisJbW92LmwJQHI0LCByNAorCitzd3N1c3BfY29weV9sb29wOgorCW1vdglyNCwgcjAKKwljbXAvZXEJIzAsIHIwCisJYnQJc3dzdXNwX3Jlc3RvcmVfcmVncworCisJbW92LmwJQChQQkVfQUREUkVTUywgcjQpLCByMgorCW1vdi5sCUAoUEJFX09SSUdfQUREUkVTUywgcjQpLCByNQorCisJbW92CSMoUEFHRV9TSVpFID4+IDEwKSwgcjMKKwlzaGxsOAlyMworCXNobHIyCXIzIC8qIFBBR0VfU0laRSAvIDE2ICovCitzd3N1c3BfY29weV9wYWdlOgorCWR0CXIzCisJbW92LmwJQHIyKyxyMSAgIC8qICAxNm4rMCAqLworCW1vdi5sCXIxLEByNQorCWFkZAkjNCxyNQorCW1vdi5sCUByMisscjEJICAvKiAgMTZuKzQgKi8KKwltb3YubAlyMSxAcjUKKwlhZGQJIzQscjUKKwltb3YubAlAcjIrLHIxICAgLyogIDE2bis4ICovCisJbW92LmwJcjEsQHI1CisJYWRkCSM0LHI1CisJbW92LmwJQHIyKyxyMSAgIC8qICAxNm4rMTIgKi8KKwltb3YubAlyMSxAcjUKKwliZi9zCXN3c3VzcF9jb3B5X3BhZ2UKKwkgYWRkCSM0LHI1CisKKwlicmEJc3dzdXNwX2NvcHlfbG9vcAorCSBtb3YubAlAKFBCRV9ORVhULCByNCksIHI0CisKK3N3c3VzcF9yZXN0b3JlX3JlZ3M6CisJISBCTD0wOiBSNy0+UjAgaXMgYmFuazAKKwltb3YubAkzZiwgcjgKKwltb3YubAk0ZiwgcjUKKwlqc3IJQHI1CisJIG5vcAorCisJISBCTD0xOiBSNy0+UjAgaXMgYmFuazEKKwlsZHMJazIsIHByCisJbGRjCWszLCBzc3IKKworCW1vdi5sCUByMTUrLCByMAorCW1vdi5sCUByMTUrLCByMQorCW1vdi5sCUByMTUrLCByMgorCW1vdi5sCUByMTUrLCByMworCW1vdi5sCUByMTUrLCByNAorCW1vdi5sCUByMTUrLCByNQorCW1vdi5sCUByMTUrLCByNgorCW1vdi5sCUByMTUrLCByNworCisJcnRlCisJIG5vcAorCSEgQkw9MDogUjctPlIwIGlzIGJhbmswCisKKwkuYWxpZ24JMgorMToJLmxvbmcJc3dzdXNwX2FyY2hfcmVnc19jcHUwCisyOgkubG9uZwlyZXN0b3JlX3BibGlzdAorMzoJLmxvbmcJMHgyMDAwMDAwMCAhIFJCPTEKKzQ6CS5sb25nCXJlc3RvcmVfcmVncworCishIHN3c3VzcF9hcmNoX3N1c3BlbmQoKQorISAtIHByZXBhcmUgcGMgZm9yIHJlc3VtZSwgcmV0dXJuIGZyb20gZnVuY3Rpb24gd2l0aG91dCBzd3N1c3Bfc2F2ZSBvbiByZXN1bWUKKyEgLSBzYXZlIHJlZ2lzdGVycyBpbiBzd3N1c3BfYXJjaF9yZWdzX2NwdTAKKyEgLSBjYWxsIHN3c3VzcF9zYXZlIHdyaXRlIHN1c3BlbmQgaW1hZ2UKKworRU5UUlkoc3dzdXNwX2FyY2hfc3VzcGVuZCkKKwlzdHMJcHIsIHIwCQkhIHNhdmUgcHIgaW4gcjAKKwltb3YJcjE1LCByMgkJISBzYXZlIHNwIGluIHIyCisJbW92CXI4LCByNQkJISBzYXZlIHI4IGluIHI1CisJc3RjCXNyLCByMQorCWxkYwlyMSwgc3NyCQkhIHNhdmUgc3IgaW4gc3NyCisJbW92LmwJMWYsIHIxCisJbGRjCXIxLCBzcGMJCSEgc2V0dXAgcGMgdmFsdWUgZm9yIHJlc3VtaW5nCisJbW92LmwJNWYsIHIxNQkJISB1c2Ugc3dzdXNwX2FyY2hfcmVnc19jcHUwIGFzIHN0YWNrCisJbW92LmwJNmYsIHIzCisJYWRkCXIzLCByMTUJCSEgc2F2ZSBmcm9tIHRvcCBvZiBzdHJ1Y3R1cmUKKworCSEgQkw9MDogUjctPlIwIGlzIGJhbmswCisJbW92LmwJMmYsIHIzCQkhIGdldCBuZXcgU1IgdmFsdWUgZm9yIGJhbmsxCisJbW92CSMwLCByNAorCW1vdi5sCTdmLCByMQorCWpzcglAcjEJCSEgc3dpdGNoIHRvIGJhbmsxIGFuZCBzYXZlIGJhbmsxIHI3LT5yMAorCSBub3QJcjQsIHI0CisKKwkhIEJMPTE6IFI3LT5SMCBpcyBiYW5rMQorCXN0YwlyMl9iYW5rLCBrMAkhIGZldGNoIG9sZCBzcCBmcm9tIHIyX2JhbmswCisJbW92LmwJM2YsIGs0CQkhIFNSIGJpdHMgdG8gY2xlYXIgaW4gazQKKwltb3YubAk4ZiwgazEKKwlqc3IJQGsxCQkhIHN3aXRjaCB0byBiYW5rMCBhbmQgc2F2ZSBhbGwgcmVncworCSBzdGMJcjBfYmFuaywgazMJISBmZXRjaCBvbGQgcHIgZnJvbSByMF9iYW5rMAorCisJISBCTD0wOiBSNy0+UjAgaXMgYmFuazAKKwltb3YJcjIsIHIxNQkJISByZXN0b3JlIG9sZCBzcAorCW1vdglyNSwgcjgJCSEgcmVzdG9yZSBvbGQgcjgKKwlzdGMJc3NyLCByMQorCWxkYwlyMSwgc3IJCSEgcmVzdG9yZSBvbGQgc3IKKwlsZHMJcjAsIHByCQkhIHJlc3RvcmUgb2xkIHByCisJbW92LmwJNGYsIHIwCisJam1wCUByMAorCSBub3AKKworc3dzdXNwX2NhbGxfc2F2ZToKKwltb3YJcjIsIHIxNQkJISByZXN0b3JlIG9sZCBzcAorCW1vdglyNSwgcjgJCSEgcmVzdG9yZSBvbGQgcjgKKwlsZHMJcjAsIHByCQkhIHJlc3RvcmUgb2xkIHByCisJcnRzCisJIG1vdgkjMCwgcjAKKworCS5hbGlnbgkyCisxOgkubG9uZwlzd3N1c3BfY2FsbF9zYXZlCisyOgkubG9uZwkweDIwMDAwMDAwICEgUkI9MQorMzoJLmxvbmcJMHhkZmZmZmZmZiAhIFJCPTAKKzQ6CS5sb25nCXN3c3VzcF9zYXZlCis1OgkubG9uZwlzd3N1c3BfYXJjaF9yZWdzX2NwdTAKKzY6CS5sb25nCVNXU1VTUF9BUkNIX1JFR1NfU0laRQorNzoJLmxvbmcJc2F2ZV9sb3dfcmVncworODoJLmxvbmcJc2F2ZV9yZWdzCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L01ha2VmaWxlIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9NYWtlZmlsZQppbmRleCBkNjA4NTU3Li4yMDNiMTgzIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L01ha2VmaWxlCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvTWFrZWZpbGUKQEAgLTUsNiArNSw3IEBACiBvYmoteQk6PSBwcm9iZS5vIGNvbW1vbi5vCiBjb21tb24teQkrPSAkKGFkZHByZWZpeCAuLi9zaDMvLCBlbnRyeS5vIGV4Lm8pCiAKK29iai0kKENPTkZJR19ISUJFUk5BVElPTikJCSs9ICQoYWRkcHJlZml4IC4uL3NoMy8sIHN3c3VzcC5vKQogb2JqLSQoQ09ORklHX1NIX0ZQVSkJCQkrPSBmcHUubyBzb2Z0ZmxvYXQubwogb2JqLSQoQ09ORklHX1NIX1NUT1JFX1FVRVVFUykJCSs9IHNxLm8KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9wcm9iZS5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9wcm9iZS5jCmluZGV4IDJlNDI1NzIuLjNkM2EzYzQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvcHJvYmUuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3Byb2JlLmMKQEAgLTEyOSw2ICsxMjksMTMgQEAKIAkJYm9vdF9jcHVfZGF0YS5mbGFncyB8PSBDUFVfSEFTX0ZQVSB8IENQVV9IQVNfUEVSRl9DT1VOVEVSIHwKIAkJCQkJICBDUFVfSEFTX0xMU0M7CiAJCWJyZWFrOworCWNhc2UgMHg0MDA0OgorCQlib290X2NwdV9kYXRhLnR5cGUgPSBDUFVfU0g3Nzg2OworCQlib290X2NwdV9kYXRhLmljYWNoZS53YXlzID0gNDsKKwkJYm9vdF9jcHVfZGF0YS5kY2FjaGUud2F5cyA9IDQ7CisJCWJvb3RfY3B1X2RhdGEuZmxhZ3MgfD0gQ1BVX0hBU19GUFUgfCBDUFVfSEFTX1BFUkZfQ09VTlRFUiB8CisJCQlDUFVfSEFTX0xMU0MgfCBDUFVfSEFTX1BURUFFWDsKKwkJYnJlYWs7CiAJY2FzZSAweDMwMDg6CiAJCWJvb3RfY3B1X2RhdGEuaWNhY2hlLndheXMgPSA0OwogCQlib290X2NwdV9kYXRhLmRjYWNoZS53YXlzID0gNDsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc2V0dXAtc2g3NzUwLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNzc1MC5jCmluZGV4IGVjODg0MDMuLmExYzgwZDkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc2V0dXAtc2g3NzUwLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zZXR1cC1zaDc3NTAuYwpAQCAtMjEsMTcgKzIxLDcgQEAKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JTywKIAl9LAogCVsxXSA9IHsKLQkJLyogUGVyaW9kIElSUSAqLwotCQkuc3RhcnQJPSAyMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLQlbMl0gPSB7Ci0JCS8qIENhcnJ5IElSUSAqLwotCQkuc3RhcnQJPSAyMiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLQlbM10gPSB7Ci0JCS8qIEFsYXJtIElSUSAqLworCQkvKiBTaGFyZWQgUGVyaW9kL0NhcnJ5L0FsYXJtIElSUSAqLwogCQkuc3RhcnQJPSAyMCwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCiAJfSwKQEAgLTUwLDEzICs0MCwxMyBAQAogCQkubWFwYmFzZQk9IDB4ZmZlMDAwMDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0ksCi0JCS5pcnFzCQk9IHsgMjMsIDI0LCAyNSwgMCB9LAorCQkuaXJxcwkJPSB7IDIzLCAyMywgMjMsIDAgfSwKIAl9LCB7CiAjZW5kaWYKIAkJLm1hcGJhc2UJPSAweGZmZTgwMDAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyA0MCwgNDEsIDQzLCA0MiB9LAorCQkuaXJxcwkJPSB7IDQwLCA0MCwgNDAsIDQwIH0sCiAJfSwgewogCQkuZmxhZ3MgPSAwLAogCX0KQEAgLTg3LDQzICs3NywyNyBAQAogCiAJLyogaW50ZXJydXB0IHNvdXJjZXMgKi8KIAlJUkwwLCBJUkwxLCBJUkwyLCBJUkwzLCAvKiBvbmx5IElSTE0gbW9kZSBzdXBwb3J0ZWQgKi8KLQlIVURJLCBHUElPSSwKLQlETUFDX0RNVEUwLCBETUFDX0RNVEUxLCBETUFDX0RNVEUyLCBETUFDX0RNVEUzLAotCURNQUNfRE1URTQsIERNQUNfRE1URTUsIERNQUNfRE1URTYsIERNQUNfRE1URTcsCi0JRE1BQ19ETUFFLAorCUhVREksIEdQSU9JLCBETUFDLAogCVBDSUMwX1BDSVNFUlIsIFBDSUMxX1BDSUVSUiwgUENJQzFfUENJUFdEV04sIFBDSUMxX1BDSVBXT04sCiAJUENJQzFfUENJRE1BMCwgUENJQzFfUENJRE1BMSwgUENJQzFfUENJRE1BMiwgUENJQzFfUENJRE1BMywKLQlUTVUzLCBUTVU0LCBUTVUwLCBUTVUxLCBUTVUyX1RVTkksIFRNVTJfVElDUEksCi0JUlRDX0FUSSwgUlRDX1BSSSwgUlRDX0NVSSwKLQlTQ0kxX0VSSSwgU0NJMV9SWEksIFNDSTFfVFhJLCBTQ0kxX1RFSSwKLQlTQ0lGX0VSSSwgU0NJRl9SWEksIFNDSUZfQlJJLCBTQ0lGX1RYSSwKLQlXRFQsCi0JUkVGX1JDTUksIFJFRl9ST1ZJLAorCVRNVTMsIFRNVTQsIFRNVTAsIFRNVTEsIFRNVTIsIFJUQywgU0NJMSwgU0NJRiwgV0RULCBSRUYsCiAKIAkvKiBpbnRlcnJ1cHQgZ3JvdXBzICovCi0JRE1BQywgUENJQzEsIFRNVTIsIFJUQywgU0NJMSwgU0NJRiwgUkVGLAorCVBDSUMxLAogfTsKIAogc3RhdGljIHN0cnVjdCBpbnRjX3ZlY3QgdmVjdG9yc1tdIF9faW5pdGRhdGEgPSB7CiAJSU5UQ19WRUNUKEhVREksIDB4NjAwKSwgSU5UQ19WRUNUKEdQSU9JLCAweDYyMCksCiAJSU5UQ19WRUNUKFRNVTAsIDB4NDAwKSwgSU5UQ19WRUNUKFRNVTEsIDB4NDIwKSwKLQlJTlRDX1ZFQ1QoVE1VMl9UVU5JLCAweDQ0MCksIElOVENfVkVDVChUTVUyX1RJQ1BJLCAweDQ2MCksCi0JSU5UQ19WRUNUKFJUQ19BVEksIDB4NDgwKSwgSU5UQ19WRUNUKFJUQ19QUkksIDB4NGEwKSwKLQlJTlRDX1ZFQ1QoUlRDX0NVSSwgMHg0YzApLAotCUlOVENfVkVDVChTQ0kxX0VSSSwgMHg0ZTApLCBJTlRDX1ZFQ1QoU0NJMV9SWEksIDB4NTAwKSwKLQlJTlRDX1ZFQ1QoU0NJMV9UWEksIDB4NTIwKSwgSU5UQ19WRUNUKFNDSTFfVEVJLCAweDU0MCksCi0JSU5UQ19WRUNUKFNDSUZfRVJJLCAweDcwMCksIElOVENfVkVDVChTQ0lGX1JYSSwgMHg3MjApLAotCUlOVENfVkVDVChTQ0lGX0JSSSwgMHg3NDApLCBJTlRDX1ZFQ1QoU0NJRl9UWEksIDB4NzYwKSwKKwlJTlRDX1ZFQ1QoVE1VMiwgMHg0NDApLCBJTlRDX1ZFQ1QoVE1VMiwgMHg0NjApLAorCUlOVENfVkVDVChSVEMsIDB4NDgwKSwgSU5UQ19WRUNUKFJUQywgMHg0YTApLAorCUlOVENfVkVDVChSVEMsIDB4NGMwKSwKKwlJTlRDX1ZFQ1QoU0NJMSwgMHg0ZTApLCBJTlRDX1ZFQ1QoU0NJMSwgMHg1MDApLAorCUlOVENfVkVDVChTQ0kxLCAweDUyMCksIElOVENfVkVDVChTQ0kxLCAweDU0MCksCisJSU5UQ19WRUNUKFNDSUYsIDB4NzAwKSwgSU5UQ19WRUNUKFNDSUYsIDB4NzIwKSwKKwlJTlRDX1ZFQ1QoU0NJRiwgMHg3NDApLCBJTlRDX1ZFQ1QoU0NJRiwgMHg3NjApLAogCUlOVENfVkVDVChXRFQsIDB4NTYwKSwKLQlJTlRDX1ZFQ1QoUkVGX1JDTUksIDB4NTgwKSwgSU5UQ19WRUNUKFJFRl9ST1ZJLCAweDVhMCksCi19OwotCi1zdGF0aWMgc3RydWN0IGludGNfZ3JvdXAgZ3JvdXBzW10gX19pbml0ZGF0YSA9IHsKLQlJTlRDX0dST1VQKFRNVTIsIFRNVTJfVFVOSSwgVE1VMl9USUNQSSksCi0JSU5UQ19HUk9VUChSVEMsIFJUQ19BVEksIFJUQ19QUkksIFJUQ19DVUkpLAotCUlOVENfR1JPVVAoU0NJMSwgU0NJMV9FUkksIFNDSTFfUlhJLCBTQ0kxX1RYSSwgU0NJMV9URUkpLAotCUlOVENfR1JPVVAoU0NJRiwgU0NJRl9FUkksIFNDSUZfUlhJLCBTQ0lGX0JSSSwgU0NJRl9UWEkpLAotCUlOVENfR1JPVVAoUkVGLCBSRUZfUkNNSSwgUkVGX1JPVkkpLAorCUlOVENfVkVDVChSRUYsIDB4NTgwKSwgSU5UQ19WRUNUKFJFRiwgMHg1YTApLAogfTsKIAogc3RhdGljIHN0cnVjdCBpbnRjX3ByaW9fcmVnIHByaW9fcmVnaXN0ZXJzW10gX19pbml0ZGF0YSA9IHsKQEAgLTEzNiw3ICsxMTAsNyBAQAogCQkJCQkJIFBDSUMxLCBQQ0lDMF9QQ0lTRVJSIH0gfSwKIH07CiAKLXN0YXRpYyBERUNMQVJFX0lOVENfREVTQyhpbnRjX2Rlc2MsICJzaDc3NTAiLCB2ZWN0b3JzLCBncm91cHMsCitzdGF0aWMgREVDTEFSRV9JTlRDX0RFU0MoaW50Y19kZXNjLCAic2g3NzUwIiwgdmVjdG9ycywgTlVMTCwKIAkJCSBOVUxMLCBwcmlvX3JlZ2lzdGVycywgTlVMTCk7CiAKIC8qIFNINzc1MCwgU0g3NzUwUywgU0g3NzUxIGFuZCBTSDcwOTEgYWxsIGhhdmUgNC1jaGFubmVsIERNQSBjb250cm9sbGVycyAqLwpAQCAtMTQ1LDM5ICsxMTksMjggQEAKIAlkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTEpIHx8IFwKIAlkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDcwOTEpCiBzdGF0aWMgc3RydWN0IGludGNfdmVjdCB2ZWN0b3JzX2RtYTRbXSBfX2luaXRkYXRhID0gewotCUlOVENfVkVDVChETUFDX0RNVEUwLCAweDY0MCksIElOVENfVkVDVChETUFDX0RNVEUxLCAweDY2MCksCi0JSU5UQ19WRUNUKERNQUNfRE1URTIsIDB4NjgwKSwgSU5UQ19WRUNUKERNQUNfRE1URTMsIDB4NmEwKSwKLQlJTlRDX1ZFQ1QoRE1BQ19ETUFFLCAweDZjMCksCi19OwotCi1zdGF0aWMgc3RydWN0IGludGNfZ3JvdXAgZ3JvdXBzX2RtYTRbXSBfX2luaXRkYXRhID0gewotCUlOVENfR1JPVVAoRE1BQywgRE1BQ19ETVRFMCwgRE1BQ19ETVRFMSwgRE1BQ19ETVRFMiwKLQkJICAgRE1BQ19ETVRFMywgRE1BQ19ETUFFKSwKKwlJTlRDX1ZFQ1QoRE1BQywgMHg2NDApLCBJTlRDX1ZFQ1QoRE1BQywgMHg2NjApLAorCUlOVENfVkVDVChETUFDLCAweDY4MCksIElOVENfVkVDVChETUFDLCAweDZhMCksCisJSU5UQ19WRUNUKERNQUMsIDB4NmMwKSwKIH07CiAKIHN0YXRpYyBERUNMQVJFX0lOVENfREVTQyhpbnRjX2Rlc2NfZG1hNCwgInNoNzc1MF9kbWE0IiwKLQkJCSB2ZWN0b3JzX2RtYTQsIGdyb3Vwc19kbWE0LAorCQkJIHZlY3RvcnNfZG1hNCwgTlVMTCwKIAkJCSBOVUxMLCBwcmlvX3JlZ2lzdGVycywgTlVMTCk7CiAjZW5kaWYKIAogLyogU0g3NzUwUiBhbmQgU0g3NzUxUiBib3RoIGhhdmUgOC1jaGFubmVsIERNQSBjb250cm9sbGVycyAqLwogI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MFIpIHx8IGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MVIpCiBzdGF0aWMgc3RydWN0IGludGNfdmVjdCB2ZWN0b3JzX2RtYThbXSBfX2luaXRkYXRhID0gewotCUlOVENfVkVDVChETUFDX0RNVEUwLCAweDY0MCksIElOVENfVkVDVChETUFDX0RNVEUxLCAweDY2MCksCi0JSU5UQ19WRUNUKERNQUNfRE1URTIsIDB4NjgwKSwgSU5UQ19WRUNUKERNQUNfRE1URTMsIDB4NmEwKSwKLQlJTlRDX1ZFQ1QoRE1BQ19ETVRFNCwgMHg3ODApLCBJTlRDX1ZFQ1QoRE1BQ19ETVRFNSwgMHg3YTApLAotCUlOVENfVkVDVChETUFDX0RNVEU2LCAweDdjMCksIElOVENfVkVDVChETUFDX0RNVEU3LCAweDdlMCksCi0JSU5UQ19WRUNUKERNQUNfRE1BRSwgMHg2YzApLAotfTsKLQotc3RhdGljIHN0cnVjdCBpbnRjX2dyb3VwIGdyb3Vwc19kbWE4W10gX19pbml0ZGF0YSA9IHsKLQlJTlRDX0dST1VQKERNQUMsIERNQUNfRE1URTAsIERNQUNfRE1URTEsIERNQUNfRE1URTIsCi0JCSAgIERNQUNfRE1URTMsIERNQUNfRE1URTQsIERNQUNfRE1URTUsCi0JCSAgIERNQUNfRE1URTYsIERNQUNfRE1URTcsIERNQUNfRE1BRSksCisJSU5UQ19WRUNUKERNQUMsIDB4NjQwKSwgSU5UQ19WRUNUKERNQUMsIDB4NjYwKSwKKwlJTlRDX1ZFQ1QoRE1BQywgMHg2ODApLCBJTlRDX1ZFQ1QoRE1BQywgMHg2YTApLAorCUlOVENfVkVDVChETUFDLCAweDc4MCksIElOVENfVkVDVChETUFDLCAweDdhMCksCisJSU5UQ19WRUNUKERNQUMsIDB4N2MwKSwgSU5UQ19WRUNUKERNQUMsIDB4N2UwKSwKKwlJTlRDX1ZFQ1QoRE1BQywgMHg2YzApLAogfTsKIAogc3RhdGljIERFQ0xBUkVfSU5UQ19ERVNDKGludGNfZGVzY19kbWE4LCAic2g3NzUwX2RtYTgiLAotCQkJIHZlY3RvcnNfZG1hOCwgZ3JvdXBzX2RtYTgsCisJCQkgdmVjdG9yc19kbWE4LCBOVUxMLAogCQkJIE5VTEwsIHByaW9fcmVnaXN0ZXJzLCBOVUxMKTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9NYWtlZmlsZSBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL01ha2VmaWxlCmluZGV4IDhlMzQ0ZWMuLjFhOTIzNjEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL01ha2VmaWxlCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL01ha2VmaWxlCkBAIC03LDYgKzcsNyBAQAogb2JqLSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCkJKz0gc2V0dXAtc2g3NzcwLm8KIG9iai0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODApCSs9IHNldHVwLXNoNzc4MC5vCiBvYmotJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1KQkrPSBzZXR1cC1zaDc3ODUubworb2JqLSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NikJKz0gc2V0dXAtc2g3Nzg2Lm8KIG9iai0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDczNDMpCSs9IHNldHVwLXNoNzM0My5vCiBvYmotJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIyKQkrPSBzZXR1cC1zaDc3MjIubwogb2JqLSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMykJKz0gc2V0dXAtc2g3NzIzLm8KQEAgLTIxLDYgKzIyLDcgQEAKIGNsb2NrLSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCkJOj0gY2xvY2stc2g3NzcwLm8KIGNsb2NrLSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCkJOj0gY2xvY2stc2g3NzgwLm8KIGNsb2NrLSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSkJOj0gY2xvY2stc2g3Nzg1Lm8KK2Nsb2NrLSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NikJOj0gY2xvY2stc2g3Nzg2Lm8KIGNsb2NrLSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzM0MykJOj0gY2xvY2stc2g3NzIyLm8KIGNsb2NrLSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMikJOj0gY2xvY2stc2g3NzIyLm8KIGNsb2NrLSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMykJOj0gY2xvY2stc2g3NzIyLm8KQEAgLTMxLDYgKzMzLDcgQEAKIHBpbm11eC0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjIpCTo9IHBpbm11eC1zaDc3MjIubwogcGlubXV4LSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMykJOj0gcGlubXV4LXNoNzcyMy5vCiBwaW5tdXgtJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1KQk6PSBwaW5tdXgtc2g3Nzg1Lm8KK3Bpbm11eC0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYpCTo9IHBpbm11eC1zaDc3ODYubwogCiBvYmoteQkJCSs9ICQoY2xvY2steSkKIG9iai0kKENPTkZJR19TTVApCSs9ICQoc21wLXkpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3ODYuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc4Ni5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4NGE5YzEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3ODYuYwpAQCAtMCwwICsxLDE0OCBAQAorLyoKKyAqIGFyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc4Ni5jCisgKgorICogU0g3Nzg2IHN1cHBvcnQgZm9yIHRoZSBjbG9jayBmcmFtZXdvcmsKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgIFJlbmVzYXMgU29sdXRpb25zIENvcnAuCisgKiBLdW5pbm9yaSBNb3JpbW90byA8bW9yaW1vdG8ua3VuaW5vcmlAcmVuZXNhcy5jb20+CisgKgorICogQmFzZWQgb24gU0g3Nzg1CisgKiAgQ29weXJpZ2h0IChDKSAyMDA3ICBQYXVsIE11bmR0CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8YXNtL2Nsb2NrLmg+CisjaW5jbHVkZSA8YXNtL2ZyZXEuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworc3RhdGljIGludCBpZmNfZGl2aXNvcnNbXSA9IHsgMSwgMiwgNCwgMSB9Oworc3RhdGljIGludCBzZmNfZGl2aXNvcnNbXSA9IHsgMSwgMSwgNCwgMSB9Oworc3RhdGljIGludCBiZmNfZGl2aXNvcnNbXSA9IHsgMSwgMSwgMSwgMSwgMSwgMTIsIDE2LCAxLAorCQkJICAgICAyNCwgMzIsIDEsIDEsIDEsIDEsIDEsIDEgfTsKK3N0YXRpYyBpbnQgbWZjX2Rpdmlzb3JzW10gPSB7IDEsIDEsIDQsIDEgfTsKK3N0YXRpYyBpbnQgcGZjX2Rpdmlzb3JzW10gPSB7IDEsIDEsIDEsIDEsIDEsIDEsIDE2LCAxLAorCQkJICAgICAgMjQsIDMyLCAxLCA0OCwgMSwgMSwgMSwgMSB9OworCitzdGF0aWMgdm9pZCBtYXN0ZXJfY2xrX2luaXQoc3RydWN0IGNsayAqY2xrKQoreworCWNsay0+cmF0ZSAqPSBwZmNfZGl2aXNvcnNbY3RybF9pbmwoRlJRTVIxKSAmIDB4MDAwZl07Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaDc3ODZfbWFzdGVyX2Nsa19vcHMgPSB7CisJLmluaXQJCT0gbWFzdGVyX2Nsa19pbml0LAorfTsKKworc3RhdGljIHZvaWQgbW9kdWxlX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQoreworCWludCBpZHggPSAoY3RybF9pbmwoRlJRTVIxKSAmIDB4MDAwZik7CisJY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyBwZmNfZGl2aXNvcnNbaWR4XTsKK30KKworc3RhdGljIHN0cnVjdCBjbGtfb3BzIHNoNzc4Nl9tb2R1bGVfY2xrX29wcyA9IHsKKwkucmVjYWxjCQk9IG1vZHVsZV9jbGtfcmVjYWxjLAorfTsKKworc3RhdGljIHZvaWQgYnVzX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQoreworCWludCBpZHggPSAoKGN0cmxfaW5sKEZSUU1SMSkgPj4gMTYpICYgMHgwMDBmKTsKKwljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAvIGJmY19kaXZpc29yc1tpZHhdOworfQorCitzdGF0aWMgc3RydWN0IGNsa19vcHMgc2g3Nzg2X2J1c19jbGtfb3BzID0geworCS5yZWNhbGMJCT0gYnVzX2Nsa19yZWNhbGMsCit9OworCitzdGF0aWMgdm9pZCBjcHVfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCit7CisJaW50IGlkeCA9ICgoY3RybF9pbmwoRlJRTVIxKSA+PiAyOCkgJiAweDAwMDMpOworCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlIC8gaWZjX2Rpdmlzb3JzW2lkeF07Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaDc3ODZfY3B1X2Nsa19vcHMgPSB7CisJLnJlY2FsYwkJPSBjcHVfY2xrX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX29wcyAqc2g3Nzg2X2Nsa19vcHNbXSA9IHsKKwkmc2g3Nzg2X21hc3Rlcl9jbGtfb3BzLAorCSZzaDc3ODZfbW9kdWxlX2Nsa19vcHMsCisJJnNoNzc4Nl9idXNfY2xrX29wcywKKwkmc2g3Nzg2X2NwdV9jbGtfb3BzLAorfTsKKwordm9pZCBfX2luaXQgYXJjaF9pbml0X2Nsa19vcHMoc3RydWN0IGNsa19vcHMgKipvcHMsIGludCBpZHgpCit7CisJaWYgKGlkeCA8IEFSUkFZX1NJWkUoc2g3Nzg2X2Nsa19vcHMpKQorCQkqb3BzID0gc2g3Nzg2X2Nsa19vcHNbaWR4XTsKK30KKworc3RhdGljIHZvaWQgc2h5d2F5X2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQoreworCWludCBpZHggPSAoKGN0cmxfaW5sKEZSUU1SMSkgPj4gMjApICYgMHgwMDAzKTsKKwljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAvIHNmY19kaXZpc29yc1tpZHhdOworfQorCitzdGF0aWMgc3RydWN0IGNsa19vcHMgc2g3Nzg2X3NoeXdheV9jbGtfb3BzID0geworCS5yZWNhbGMJCT0gc2h5d2F5X2Nsa19yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBzaDc3ODZfc2h5d2F5X2NsayA9IHsKKwkubmFtZQkJPSAic2h5d2F5X2NsayIsCisJLmZsYWdzCQk9IENMS19BTFdBWVNfRU5BQkxFRCwKKwkub3BzCQk9ICZzaDc3ODZfc2h5d2F5X2Nsa19vcHMsCit9OworCitzdGF0aWMgdm9pZCBkZHJfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCit7CisJaW50IGlkeCA9ICgoY3RybF9pbmwoRlJRTVIxKSA+PiAxMikgJiAweDAwMDMpOworCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlIC8gbWZjX2Rpdmlzb3JzW2lkeF07Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaDc3ODZfZGRyX2Nsa19vcHMgPSB7CisJLnJlY2FsYwkJPSBkZHJfY2xrX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNoNzc4Nl9kZHJfY2xrID0geworCS5uYW1lCQk9ICJkZHJfY2xrIiwKKwkuZmxhZ3MJCT0gQ0xLX0FMV0FZU19FTkFCTEVELAorCS5vcHMJCT0gJnNoNzc4Nl9kZHJfY2xrX29wcywKK307CisKKy8qCisgKiBBZGRpdGlvbmFsIFNINzc4Ni1zcGVjaWZpYyBvbi1jaGlwIGNsb2NrcyB0aGF0IGFyZW4ndCBhbHJlYWR5IHBhcnQgb2YgdGhlCisgKiBjbG9jayBmcmFtZXdvcmsKKyAqLworc3RhdGljIHN0cnVjdCBjbGsgKnNoNzc4Nl9vbmNoaXBfY2xvY2tzW10gPSB7CisJJnNoNzc4Nl9zaHl3YXlfY2xrLAorCSZzaDc3ODZfZGRyX2NsaywKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNoNzc4Nl9jbGtfaW5pdCh2b2lkKQoreworCXN0cnVjdCBjbGsgKmNsayA9IGNsa19nZXQoTlVMTCwgIm1hc3Rlcl9jbGsiKTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNoNzc4Nl9vbmNoaXBfY2xvY2tzKTsgaSsrKSB7CisJCXN0cnVjdCBjbGsgKmNsa3AgPSBzaDc3ODZfb25jaGlwX2Nsb2Nrc1tpXTsKKworCQljbGtwLT5wYXJlbnQgPSBjbGs7CisJCWNsa19yZWdpc3RlcihjbGtwKTsKKwkJY2xrX2VuYWJsZShjbGtwKTsKKwl9CisKKwkvKgorCSAqIE5vdyB0aGF0IHdlIGhhdmUgdGhlIHJlc3Qgb2YgdGhlIGNsb2NrcyByZWdpc3RlcmVkLCB3ZSBuZWVkIHRvCisJICogZm9yY2UgdGhlIHBhcmVudCBjbG9jayB0byBwcm9wYWdhdGUgc28gdGhhdCB0aGVzZSBjbG9ja3Mgd2lsbAorCSAqIGF1dG9tYXRpY2FsbHkgZmlndXJlIG91dCB0aGVpciByYXRlLiBXZSBjaGVhdCBieSBoYW5kaW5nIHRoZQorCSAqIHBhcmVudCBjbG9jayBpdHMgY3VycmVudCByYXRlIGFuZCBmb3JjaW5nIGNoaWxkIHByb3BhZ2F0aW9uLgorCSAqLworCWNsa19zZXRfcmF0ZShjbGssIGNsa19nZXRfcmF0ZShjbGspKTsKKworCWNsa19wdXQoY2xrKTsKKworCXJldHVybiAwOworfQorYXJjaF9pbml0Y2FsbChzaDc3ODZfY2xrX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvcGlubXV4LXNoNzc4Ni5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvcGlubXV4LXNoNzc4Ni5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3M2IzNDQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9waW5tdXgtc2g3Nzg2LmMKQEAgLTAsMCArMSw5NTAgQEAKKy8qCisgKiBTSDc3ODYgUGlubXV4CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5ICBSZW5lc2FzIFNvbHV0aW9ucyBDb3JwLgorICogS3VuaW5vcmkgTW9yaW1vdG8gPG1vcmltb3RvLmt1bmlub3JpQHJlbmVzYXMuY29tPgorICoKKyAqICBCYXNlZCBvbiBTSDc3ODUgcGlubXV4CisgKgorICogIENvcHlyaWdodCAoQykgMjAwOCAgTWFnbnVzIERhbW0KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxjcHUvc2g3Nzg2Lmg+CisKK2VudW0geworCVBJTk1VWF9SRVNFUlZFRCA9IDAsCisKKwlQSU5NVVhfREFUQV9CRUdJTiwKKwlQQTdfREFUQSwgUEE2X0RBVEEsIFBBNV9EQVRBLCBQQTRfREFUQSwKKwlQQTNfREFUQSwgUEEyX0RBVEEsIFBBMV9EQVRBLCBQQTBfREFUQSwKKwlQQjdfREFUQSwgUEI2X0RBVEEsIFBCNV9EQVRBLCBQQjRfREFUQSwKKwlQQjNfREFUQSwgUEIyX0RBVEEsIFBCMV9EQVRBLCBQQjBfREFUQSwKKwlQQzdfREFUQSwgUEM2X0RBVEEsIFBDNV9EQVRBLCBQQzRfREFUQSwKKwlQQzNfREFUQSwgUEMyX0RBVEEsIFBDMV9EQVRBLCBQQzBfREFUQSwKKwlQRDdfREFUQSwgUEQ2X0RBVEEsIFBENV9EQVRBLCBQRDRfREFUQSwKKwlQRDNfREFUQSwgUEQyX0RBVEEsIFBEMV9EQVRBLCBQRDBfREFUQSwKKwlQRTdfREFUQSwgUEU2X0RBVEEsCisJUEY3X0RBVEEsIFBGNl9EQVRBLCBQRjVfREFUQSwgUEY0X0RBVEEsCisJUEYzX0RBVEEsIFBGMl9EQVRBLCBQRjFfREFUQSwgUEYwX0RBVEEsCisJUEc3X0RBVEEsIFBHNl9EQVRBLCBQRzVfREFUQSwKKwlQSDdfREFUQSwgUEg2X0RBVEEsIFBINV9EQVRBLCBQSDRfREFUQSwKKwlQSDNfREFUQSwgUEgyX0RBVEEsIFBIMV9EQVRBLCBQSDBfREFUQSwKKwlQSjdfREFUQSwgUEo2X0RBVEEsIFBKNV9EQVRBLCBQSjRfREFUQSwKKwlQSjNfREFUQSwgUEoyX0RBVEEsIFBKMV9EQVRBLAorCVBJTk1VWF9EQVRBX0VORCwKKworCVBJTk1VWF9JTlBVVF9CRUdJTiwKKwlQQTdfSU4sIFBBNl9JTiwgUEE1X0lOLCBQQTRfSU4sCisJUEEzX0lOLCBQQTJfSU4sIFBBMV9JTiwgUEEwX0lOLAorCVBCN19JTiwgUEI2X0lOLCBQQjVfSU4sIFBCNF9JTiwKKwlQQjNfSU4sIFBCMl9JTiwgUEIxX0lOLCBQQjBfSU4sCisJUEM3X0lOLCBQQzZfSU4sIFBDNV9JTiwgUEM0X0lOLAorCVBDM19JTiwgUEMyX0lOLCBQQzFfSU4sIFBDMF9JTiwKKwlQRDdfSU4sIFBENl9JTiwgUEQ1X0lOLCBQRDRfSU4sCisJUEQzX0lOLCBQRDJfSU4sIFBEMV9JTiwgUEQwX0lOLAorCVBFN19JTiwgUEU2X0lOLAorCVBGN19JTiwgUEY2X0lOLCBQRjVfSU4sIFBGNF9JTiwKKwlQRjNfSU4sIFBGMl9JTiwgUEYxX0lOLCBQRjBfSU4sCisJUEc3X0lOLCBQRzZfSU4sIFBHNV9JTiwKKwlQSDdfSU4sIFBINl9JTiwgUEg1X0lOLCBQSDRfSU4sCisJUEgzX0lOLCBQSDJfSU4sIFBIMV9JTiwgUEgwX0lOLAorCVBKN19JTiwgUEo2X0lOLCBQSjVfSU4sIFBKNF9JTiwKKwlQSjNfSU4sIFBKMl9JTiwgUEoxX0lOLAorCVBJTk1VWF9JTlBVVF9FTkQsCisKKwlQSU5NVVhfSU5QVVRfUFVMTFVQX0JFR0lOLAorCVBBN19JTl9QVSwgUEE2X0lOX1BVLCBQQTVfSU5fUFUsIFBBNF9JTl9QVSwKKwlQQTNfSU5fUFUsIFBBMl9JTl9QVSwgUEExX0lOX1BVLCBQQTBfSU5fUFUsCisJUEI3X0lOX1BVLCBQQjZfSU5fUFUsIFBCNV9JTl9QVSwgUEI0X0lOX1BVLAorCVBCM19JTl9QVSwgUEIyX0lOX1BVLCBQQjFfSU5fUFUsIFBCMF9JTl9QVSwKKwlQQzdfSU5fUFUsIFBDNl9JTl9QVSwgUEM1X0lOX1BVLCBQQzRfSU5fUFUsCisJUEMzX0lOX1BVLCBQQzJfSU5fUFUsIFBDMV9JTl9QVSwgUEMwX0lOX1BVLAorCVBEN19JTl9QVSwgUEQ2X0lOX1BVLCBQRDVfSU5fUFUsIFBENF9JTl9QVSwKKwlQRDNfSU5fUFUsIFBEMl9JTl9QVSwgUEQxX0lOX1BVLCBQRDBfSU5fUFUsCisJUEU3X0lOX1BVLCBQRTZfSU5fUFUsCisJUEY3X0lOX1BVLCBQRjZfSU5fUFUsIFBGNV9JTl9QVSwgUEY0X0lOX1BVLAorCVBGM19JTl9QVSwgUEYyX0lOX1BVLCBQRjFfSU5fUFUsIFBGMF9JTl9QVSwKKwlQRzdfSU5fUFUsIFBHNl9JTl9QVSwgUEc1X0lOX1BVLAorCVBIN19JTl9QVSwgUEg2X0lOX1BVLCBQSDVfSU5fUFUsIFBINF9JTl9QVSwKKwlQSDNfSU5fUFUsIFBIMl9JTl9QVSwgUEgxX0lOX1BVLCBQSDBfSU5fUFUsCisJUEo3X0lOX1BVLCBQSjZfSU5fUFUsIFBKNV9JTl9QVSwgUEo0X0lOX1BVLAorCVBKM19JTl9QVSwgUEoyX0lOX1BVLCBQSjFfSU5fUFUsCisJUElOTVVYX0lOUFVUX1BVTExVUF9FTkQsCisKKwlQSU5NVVhfT1VUUFVUX0JFR0lOLAorCVBBN19PVVQsIFBBNl9PVVQsIFBBNV9PVVQsIFBBNF9PVVQsCisJUEEzX09VVCwgUEEyX09VVCwgUEExX09VVCwgUEEwX09VVCwKKwlQQjdfT1VULCBQQjZfT1VULCBQQjVfT1VULCBQQjRfT1VULAorCVBCM19PVVQsIFBCMl9PVVQsIFBCMV9PVVQsIFBCMF9PVVQsCisJUEM3X09VVCwgUEM2X09VVCwgUEM1X09VVCwgUEM0X09VVCwKKwlQQzNfT1VULCBQQzJfT1VULCBQQzFfT1VULCBQQzBfT1VULAorCVBEN19PVVQsIFBENl9PVVQsIFBENV9PVVQsIFBENF9PVVQsCisJUEQzX09VVCwgUEQyX09VVCwgUEQxX09VVCwgUEQwX09VVCwKKwlQRTdfT1VULCBQRTZfT1VULAorCVBGN19PVVQsIFBGNl9PVVQsIFBGNV9PVVQsIFBGNF9PVVQsCisJUEYzX09VVCwgUEYyX09VVCwgUEYxX09VVCwgUEYwX09VVCwKKwlQRzdfT1VULCBQRzZfT1VULCBQRzVfT1VULAorCVBIN19PVVQsIFBINl9PVVQsIFBINV9PVVQsIFBINF9PVVQsCisJUEgzX09VVCwgUEgyX09VVCwgUEgxX09VVCwgUEgwX09VVCwKKwlQSjdfT1VULCBQSjZfT1VULCBQSjVfT1VULCBQSjRfT1VULAorCVBKM19PVVQsIFBKMl9PVVQsIFBKMV9PVVQsCisJUElOTVVYX09VVFBVVF9FTkQsCisKKwlQSU5NVVhfRlVOQ1RJT05fQkVHSU4sCisJUEE3X0ZOLCBQQTZfRk4sIFBBNV9GTiwgUEE0X0ZOLAorCVBBM19GTiwgUEEyX0ZOLCBQQTFfRk4sIFBBMF9GTiwKKwlQQjdfRk4sIFBCNl9GTiwgUEI1X0ZOLCBQQjRfRk4sCisJUEIzX0ZOLCBQQjJfRk4sIFBCMV9GTiwgUEIwX0ZOLAorCVBDN19GTiwgUEM2X0ZOLCBQQzVfRk4sIFBDNF9GTiwKKwlQQzNfRk4sIFBDMl9GTiwgUEMxX0ZOLCBQQzBfRk4sCisJUEQ3X0ZOLCBQRDZfRk4sIFBENV9GTiwgUEQ0X0ZOLAorCVBEM19GTiwgUEQyX0ZOLCBQRDFfRk4sIFBEMF9GTiwKKwlQRTdfRk4sIFBFNl9GTiwKKwlQRjdfRk4sIFBGNl9GTiwgUEY1X0ZOLCBQRjRfRk4sCisJUEYzX0ZOLCBQRjJfRk4sIFBGMV9GTiwgUEYwX0ZOLAorCVBHN19GTiwgUEc2X0ZOLCBQRzVfRk4sCisJUEg3X0ZOLCBQSDZfRk4sIFBINV9GTiwgUEg0X0ZOLAorCVBIM19GTiwgUEgyX0ZOLCBQSDFfRk4sIFBIMF9GTiwKKwlQSjdfRk4sIFBKNl9GTiwgUEo1X0ZOLCBQSjRfRk4sCisJUEozX0ZOLCBQSjJfRk4sIFBKMV9GTiwKKwlQMU1TRUwxNF8wLCBQMU1TRUwxNF8xLAorCVAxTVNFTDEzXzAsIFAxTVNFTDEzXzEsCisJUDFNU0VMMTJfMCwgUDFNU0VMMTJfMSwKKwlQMU1TRUwxMV8wLCBQMU1TRUwxMV8xLAorCVAxTVNFTDEwXzAsIFAxTVNFTDEwXzEsCisJUDFNU0VMOV8wLCBQMU1TRUw5XzEsCisJUDFNU0VMOF8wLCBQMU1TRUw4XzEsCisJUDFNU0VMN18wLCBQMU1TRUw3XzEsCisJUDFNU0VMNl8wLCBQMU1TRUw2XzEsCisJUDFNU0VMNV8wLCBQMU1TRUw1XzEsCisJUDFNU0VMNF8wLCBQMU1TRUw0XzEsCisJUDFNU0VMM18wLCBQMU1TRUwzXzEsCisJUDFNU0VMMl8wLCBQMU1TRUwyXzEsCisJUDFNU0VMMV8wLCBQMU1TRUwxXzEsCisJUDFNU0VMMF8wLCBQMU1TRUwwXzEsCisKKwlQMk1TRUwxNV8wLCBQMk1TRUwxNV8xLAorCVAyTVNFTDE0XzAsIFAyTVNFTDE0XzEsCisJUDJNU0VMMTNfMCwgUDJNU0VMMTNfMSwKKwlQMk1TRUwxMl8wLCBQMk1TRUwxMl8xLAorCVAyTVNFTDExXzAsIFAyTVNFTDExXzEsCisJUDJNU0VMMTBfMCwgUDJNU0VMMTBfMSwKKwlQMk1TRUw5XzAsIFAyTVNFTDlfMSwKKwlQMk1TRUw4XzAsIFAyTVNFTDhfMSwKKwlQMk1TRUw3XzAsIFAyTVNFTDdfMSwKKwlQMk1TRUw2XzAsIFAyTVNFTDZfMSwKKwlQMk1TRUw1XzAsIFAyTVNFTDVfMSwKKwlQMk1TRUw0XzAsIFAyTVNFTDRfMSwKKwlQMk1TRUwzXzAsIFAyTVNFTDNfMSwKKwlQMk1TRUwyXzAsIFAyTVNFTDJfMSwKKwlQMk1TRUwxXzAsIFAyTVNFTDFfMSwKKwlQMk1TRUwwXzAsIFAyTVNFTDBfMSwKKwlQSU5NVVhfRlVOQ1RJT05fRU5ELAorCisJUElOTVVYX01BUktfQkVHSU4sCisJQ0RFX01BUkssCisJRVRIX01BR0lDX01BUkssCisJRElTUF9NQVJLLAorCUVUSF9MSU5LX01BUkssCisJRFI1X01BUkssCisJRVRIX1RYX0VSX01BUkssCisJRFI0X01BUkssCisJRVRIX1RYX0VOX01BUkssCisJRFIzX01BUkssCisJRVRIX1RYRDNfTUFSSywKKwlEUjJfTUFSSywKKwlFVEhfVFhEMl9NQVJLLAorCURSMV9NQVJLLAorCUVUSF9UWEQxX01BUkssCisJRFIwX01BUkssCisJRVRIX1RYRDBfTUFSSywKKworCVZTWU5DX01BUkssCisJSFNQSV9DTEtfTUFSSywKKwlPRERGX01BUkssCisJSFNQSV9DU19NQVJLLAorCURHNV9NQVJLLAorCUVUSF9NRElPX01BUkssCisJREc0X01BUkssCisJRVRIX1JYX0NMS19NQVJLLAorCURHM19NQVJLLAorCUVUSF9NRENfTUFSSywKKwlERzJfTUFSSywKKwlFVEhfQ09MX01BUkssCisJREcxX01BUkssCisJRVRIX1RYX0NMS19NQVJLLAorCURHMF9NQVJLLAorCUVUSF9DUlNfTUFSSywKKworCURDTEtJTl9NQVJLLAorCUhTUElfUlhfTUFSSywKKwlIU1lOQ19NQVJLLAorCUhTUElfVFhfTUFSSywKKwlEQjVfTUFSSywKKwlFVEhfUlhEM19NQVJLLAorCURCNF9NQVJLLAorCUVUSF9SWEQyX01BUkssCisJREIzX01BUkssCisJRVRIX1JYRDFfTUFSSywKKwlEQjJfTUFSSywKKwlFVEhfUlhEMF9NQVJLLAorCURCMV9NQVJLLAorCUVUSF9SWF9EVl9NQVJLLAorCURCMF9NQVJLLAorCUVUSF9SWF9FUl9NQVJLLAorCisJRENMS09VVF9NQVJLLAorCVNDSUYxX1NMS19NQVJLLAorCVNDSUYxX1JYRF9NQVJLLAorCVNDSUYxX1RYRF9NQVJLLAorCURBQ0sxX01BUkssCisJQkFDS19NQVJLLAorCUZBTEVfTUFSSywKKwlEQUNLMF9NQVJLLAorCUZDTEVfTUFSSywKKwlEUkVRMV9NQVJLLAorCUJSRVFfTUFSSywKKwlVU0JfT1ZDMV9NQVJLLAorCURSRVEwX01BUkssCisJVVNCX09WQzBfTUFSSywKKworCVVTQl9QRU5DMV9NQVJLLAorCVVTQl9QRU5DMF9NQVJLLAorCisJSEFDMV9TRE9VVF9NQVJLLAorCVNTSTFfU0RBVEFfTUFSSywKKwlTRElGMUNNRF9NQVJLLAorCUhBQzFfU0RJTl9NQVJLLAorCVNTSTFfU0NLX01BUkssCisJU0RJRjFDRF9NQVJLLAorCUhBQzFfU1lOQ19NQVJLLAorCVNTSTFfV1NfTUFSSywKKwlTRElGMVdQX01BUkssCisJSEFDMV9CSVRDTEtfTUFSSywKKwlTU0kxX0NMS19NQVJLLAorCVNESUYxQ0xLX01BUkssCisJSEFDMF9TRE9VVF9NQVJLLAorCVNTSTBfU0RBVEFfTUFSSywKKwlTRElGMUQzX01BUkssCisJSEFDMF9TRElOX01BUkssCisJU1NJMF9TQ0tfTUFSSywKKwlTRElGMUQyX01BUkssCisJSEFDMF9TWU5DX01BUkssCisJU1NJMF9XU19NQVJLLAorCVNESUYxRDFfTUFSSywKKwlIQUMwX0JJVENMS19NQVJLLAorCVNTSTBfQ0xLX01BUkssCisJU0RJRjFEMF9NQVJLLAorCisJU0NJRjNfU0NLX01BUkssCisJU1NJMl9TREFUQV9NQVJLLAorCVNDSUYzX1JYRF9NQVJLLAorCVRDTEtfTUFSSywKKwlTU0kyX1NDS19NQVJLLAorCVNDSUYzX1RYRF9NQVJLLAorCUhBQ19SRVNfTUFSSywKKwlTU0kyX1dTX01BUkssCisKKwlEQUNLM19NQVJLLAorCVNESUYwQ01EX01BUkssCisJREFDSzJfTUFSSywKKwlTRElGMENEX01BUkssCisJRFJFUTNfTUFSSywKKwlTRElGMFdQX01BUkssCisJU0NJRjBfQ1RTX01BUkssCisJRFJFUTJfTUFSSywKKwlTRElGMENMS19NQVJLLAorCVNDSUYwX1JUU19NQVJLLAorCUlSTDdfTUFSSywKKwlTRElGMEQzX01BUkssCisJU0NJRjBfU0NLX01BUkssCisJSVJMNl9NQVJLLAorCVNESUYwRDJfTUFSSywKKwlTQ0lGMF9SWERfTUFSSywKKwlJUkw1X01BUkssCisJU0RJRjBEMV9NQVJLLAorCVNDSUYwX1RYRF9NQVJLLAorCUlSTDRfTUFSSywKKwlTRElGMEQwX01BUkssCisKKwlTQ0lGNV9TQ0tfTUFSSywKKwlGUkJfTUFSSywKKwlTQ0lGNV9SWERfTUFSSywKKwlJT0lTMTZfTUFSSywKKwlTQ0lGNV9UWERfTUFSSywKKwlDRTJCX01BUkssCisJRFJBSzNfTUFSSywKKwlDRTJBX01BUkssCisJU0NJRjRfU0NLX01BUkssCisJRFJBSzJfTUFSSywKKwlTU0kzX1dTX01BUkssCisJU0NJRjRfUlhEX01BUkssCisJRFJBSzFfTUFSSywKKwlTU0kzX1NEQVRBX01BUkssCisJRlNUQVRVU19NQVJLLAorCVNDSUY0X1RYRF9NQVJLLAorCURSQUswX01BUkssCisJU1NJM19TQ0tfTUFSSywKKwlGU0VfTUFSSywKKwlQSU5NVVhfTUFSS19FTkQsCit9OworCitzdGF0aWMgcGlubXV4X2VudW1fdCBwaW5tdXhfZGF0YVtdID0geworCisJLyogUEEgR1BJTyAqLworCVBJTk1VWF9EQVRBKFBBN19EQVRBLCBQQTdfSU4sIFBBN19PVVQsIFBBN19JTl9QVSksCisJUElOTVVYX0RBVEEoUEE2X0RBVEEsIFBBNl9JTiwgUEE2X09VVCwgUEE2X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQQTVfREFUQSwgUEE1X0lOLCBQQTVfT1VULCBQQTVfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBBNF9EQVRBLCBQQTRfSU4sIFBBNF9PVVQsIFBBNF9JTl9QVSksCisJUElOTVVYX0RBVEEoUEEzX0RBVEEsIFBBM19JTiwgUEEzX09VVCwgUEEzX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQQTJfREFUQSwgUEEyX0lOLCBQQTJfT1VULCBQQTJfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBBMV9EQVRBLCBQQTFfSU4sIFBBMV9PVVQsIFBBMV9JTl9QVSksCisJUElOTVVYX0RBVEEoUEEwX0RBVEEsIFBBMF9JTiwgUEEwX09VVCwgUEEwX0lOX1BVKSwKKworCS8qIFBCIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQQjdfREFUQSwgUEI3X0lOLCBQQjdfT1VULCBQQjdfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBCNl9EQVRBLCBQQjZfSU4sIFBCNl9PVVQsIFBCNl9JTl9QVSksCisJUElOTVVYX0RBVEEoUEI1X0RBVEEsIFBCNV9JTiwgUEI1X09VVCwgUEI1X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQQjRfREFUQSwgUEI0X0lOLCBQQjRfT1VULCBQQjRfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBCM19EQVRBLCBQQjNfSU4sIFBCM19PVVQsIFBCM19JTl9QVSksCisJUElOTVVYX0RBVEEoUEIyX0RBVEEsIFBCMl9JTiwgUEIyX09VVCwgUEIyX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQQjFfREFUQSwgUEIxX0lOLCBQQjFfT1VULCBQQjFfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBCMF9EQVRBLCBQQjBfSU4sIFBCMF9PVVQsIFBCMF9JTl9QVSksCisKKwkvKiBQQyBHUElPICovCisJUElOTVVYX0RBVEEoUEM3X0RBVEEsIFBDN19JTiwgUEM3X09VVCwgUEM3X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQQzZfREFUQSwgUEM2X0lOLCBQQzZfT1VULCBQQzZfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBDNV9EQVRBLCBQQzVfSU4sIFBDNV9PVVQsIFBDNV9JTl9QVSksCisJUElOTVVYX0RBVEEoUEM0X0RBVEEsIFBDNF9JTiwgUEM0X09VVCwgUEM0X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQQzNfREFUQSwgUEMzX0lOLCBQQzNfT1VULCBQQzNfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBDMl9EQVRBLCBQQzJfSU4sIFBDMl9PVVQsIFBDMl9JTl9QVSksCisJUElOTVVYX0RBVEEoUEMxX0RBVEEsIFBDMV9JTiwgUEMxX09VVCwgUEMxX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQQzBfREFUQSwgUEMwX0lOLCBQQzBfT1VULCBQQzBfSU5fUFUpLAorCisJLyogUEQgR1BJTyAqLworCVBJTk1VWF9EQVRBKFBEN19EQVRBLCBQRDdfSU4sIFBEN19PVVQsIFBEN19JTl9QVSksCisJUElOTVVYX0RBVEEoUEQ2X0RBVEEsIFBENl9JTiwgUEQ2X09VVCwgUEQ2X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQRDVfREFUQSwgUEQ1X0lOLCBQRDVfT1VULCBQRDVfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBENF9EQVRBLCBQRDRfSU4sIFBENF9PVVQsIFBENF9JTl9QVSksCisJUElOTVVYX0RBVEEoUEQzX0RBVEEsIFBEM19JTiwgUEQzX09VVCwgUEQzX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQRDJfREFUQSwgUEQyX0lOLCBQRDJfT1VULCBQRDJfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBEMV9EQVRBLCBQRDFfSU4sIFBEMV9PVVQsIFBEMV9JTl9QVSksCisJUElOTVVYX0RBVEEoUEQwX0RBVEEsIFBEMF9JTiwgUEQwX09VVCwgUEQwX0lOX1BVKSwKKworCS8qIFBFIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQRTdfREFUQSwgUEU3X0lOLCBQRTdfT1VULCBQRTdfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBFNl9EQVRBLCBQRTZfSU4sIFBFNl9PVVQsIFBFNl9JTl9QVSksCisKKwkvKiBQRiBHUElPICovCisJUElOTVVYX0RBVEEoUEY3X0RBVEEsIFBGN19JTiwgUEY3X09VVCwgUEY3X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQRjZfREFUQSwgUEY2X0lOLCBQRjZfT1VULCBQRjZfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBGNV9EQVRBLCBQRjVfSU4sIFBGNV9PVVQsIFBGNV9JTl9QVSksCisJUElOTVVYX0RBVEEoUEY0X0RBVEEsIFBGNF9JTiwgUEY0X09VVCwgUEY0X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQRjNfREFUQSwgUEYzX0lOLCBQRjNfT1VULCBQRjNfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBGMl9EQVRBLCBQRjJfSU4sIFBGMl9PVVQsIFBGMl9JTl9QVSksCisJUElOTVVYX0RBVEEoUEYxX0RBVEEsIFBGMV9JTiwgUEYxX09VVCwgUEYxX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQRjBfREFUQSwgUEYwX0lOLCBQRjBfT1VULCBQRjBfSU5fUFUpLAorCisJLyogUEcgR1BJTyAqLworCVBJTk1VWF9EQVRBKFBHN19EQVRBLCBQRzdfSU4sIFBHN19PVVQsIFBHN19JTl9QVSksCisJUElOTVVYX0RBVEEoUEc2X0RBVEEsIFBHNl9JTiwgUEc2X09VVCwgUEc2X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQRzVfREFUQSwgUEc1X0lOLCBQRzVfT1VULCBQRzVfSU5fUFUpLAorCisJLyogUEggR1BJTyAqLworCVBJTk1VWF9EQVRBKFBIN19EQVRBLCBQSDdfSU4sIFBIN19PVVQsIFBIN19JTl9QVSksCisJUElOTVVYX0RBVEEoUEg2X0RBVEEsIFBINl9JTiwgUEg2X09VVCwgUEg2X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQSDVfREFUQSwgUEg1X0lOLCBQSDVfT1VULCBQSDVfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBINF9EQVRBLCBQSDRfSU4sIFBINF9PVVQsIFBINF9JTl9QVSksCisJUElOTVVYX0RBVEEoUEgzX0RBVEEsIFBIM19JTiwgUEgzX09VVCwgUEgzX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQSDJfREFUQSwgUEgyX0lOLCBQSDJfT1VULCBQSDJfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBIMV9EQVRBLCBQSDFfSU4sIFBIMV9PVVQsIFBIMV9JTl9QVSksCisJUElOTVVYX0RBVEEoUEgwX0RBVEEsIFBIMF9JTiwgUEgwX09VVCwgUEgwX0lOX1BVKSwKKworCS8qIFBKIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQSjdfREFUQSwgUEo3X0lOLCBQSjdfT1VULCBQSjdfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBKNl9EQVRBLCBQSjZfSU4sIFBKNl9PVVQsIFBKNl9JTl9QVSksCisJUElOTVVYX0RBVEEoUEo1X0RBVEEsIFBKNV9JTiwgUEo1X09VVCwgUEo1X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQSjRfREFUQSwgUEo0X0lOLCBQSjRfT1VULCBQSjRfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBKM19EQVRBLCBQSjNfSU4sIFBKM19PVVQsIFBKM19JTl9QVSksCisJUElOTVVYX0RBVEEoUEoyX0RBVEEsIFBKMl9JTiwgUEoyX09VVCwgUEoyX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQSjFfREFUQSwgUEoxX0lOLCBQSjFfT1VULCBQSjFfSU5fUFUpLAorCisJLyogUEEgRk4gKi8KKwlQSU5NVVhfTUFSS19CRUdJTiwKKwlQSU5NVVhfREFUQShDREVfTUFSSywJCVAxTVNFTDJfMCwgUEE3X0ZOKSwKKwlQSU5NVVhfREFUQShESVNQX01BUkssCQlQMU1TRUwyXzAsIFBBNl9GTiksCisJUElOTVVYX0RBVEEoRFI1X01BUkssCQlQMU1TRUwyXzAsIFBBNV9GTiksCisJUElOTVVYX0RBVEEoRFI0X01BUkssCQlQMU1TRUwyXzAsIFBBNF9GTiksCisJUElOTVVYX0RBVEEoRFIzX01BUkssCQlQMU1TRUwyXzAsIFBBM19GTiksCisJUElOTVVYX0RBVEEoRFIyX01BUkssCQlQMU1TRUwyXzAsIFBBMl9GTiksCisJUElOTVVYX0RBVEEoRFIxX01BUkssCQlQMU1TRUwyXzAsIFBBMV9GTiksCisJUElOTVVYX0RBVEEoRFIwX01BUkssCQlQMU1TRUwyXzAsIFBBMF9GTiksCisJUElOTVVYX0RBVEEoRVRIX01BR0lDX01BUkssCVAxTVNFTDJfMSwgUEE3X0ZOKSwKKwlQSU5NVVhfREFUQShFVEhfTElOS19NQVJLLAlQMU1TRUwyXzEsIFBBNl9GTiksCisJUElOTVVYX0RBVEEoRVRIX1RYX0VSX01BUkssCVAxTVNFTDJfMSwgUEE1X0ZOKSwKKwlQSU5NVVhfREFUQShFVEhfVFhfRU5fTUFSSywJUDFNU0VMMl8xLCBQQTRfRk4pLAorCVBJTk1VWF9EQVRBKEVUSF9UWEQzX01BUkssCVAxTVNFTDJfMSwgUEEzX0ZOKSwKKwlQSU5NVVhfREFUQShFVEhfVFhEMl9NQVJLLAlQMU1TRUwyXzEsIFBBMl9GTiksCisJUElOTVVYX0RBVEEoRVRIX1RYRDFfTUFSSywJUDFNU0VMMl8xLCBQQTFfRk4pLAorCVBJTk1VWF9EQVRBKEVUSF9UWEQwX01BUkssCVAxTVNFTDJfMSwgUEEwX0ZOKSwKKworCS8qIFBCIEZOICovCisJUElOTVVYX0RBVEEoVlNZTkNfTUFSSywJCVAxTVNFTDNfMCwgUEI3X0ZOKSwKKwlQSU5NVVhfREFUQShPRERGX01BUkssCQlQMU1TRUwzXzAsIFBCNl9GTiksCisJUElOTVVYX0RBVEEoREc1X01BUkssCQlQMU1TRUwyXzAsIFBCNV9GTiksCisJUElOTVVYX0RBVEEoREc0X01BUkssCQlQMU1TRUwyXzAsIFBCNF9GTiksCisJUElOTVVYX0RBVEEoREczX01BUkssCQlQMU1TRUwyXzAsIFBCM19GTiksCisJUElOTVVYX0RBVEEoREcyX01BUkssCQlQMU1TRUwyXzAsIFBCMl9GTiksCisJUElOTVVYX0RBVEEoREcxX01BUkssCQlQMU1TRUwyXzAsIFBCMV9GTiksCisJUElOTVVYX0RBVEEoREcwX01BUkssCQlQMU1TRUwyXzAsIFBCMF9GTiksCisJUElOTVVYX0RBVEEoSFNQSV9DTEtfTUFSSywJUDFNU0VMM18xLCBQQjdfRk4pLAorCVBJTk1VWF9EQVRBKEhTUElfQ1NfTUFSSywJUDFNU0VMM18xLCBQQjZfRk4pLAorCVBJTk1VWF9EQVRBKEVUSF9NRElPX01BUkssCVAxTVNFTDJfMSwgUEI1X0ZOKSwKKwlQSU5NVVhfREFUQShFVEhfUlhfQ0xLX01BUkssCVAxTVNFTDJfMSwgUEI0X0ZOKSwKKwlQSU5NVVhfREFUQShFVEhfTURDX01BUkssCVAxTVNFTDJfMSwgUEIzX0ZOKSwKKwlQSU5NVVhfREFUQShFVEhfQ09MX01BUkssCVAxTVNFTDJfMSwgUEIyX0ZOKSwKKwlQSU5NVVhfREFUQShFVEhfVFhfQ0xLX01BUkssCVAxTVNFTDJfMSwgUEIxX0ZOKSwKKwlQSU5NVVhfREFUQShFVEhfQ1JTX01BUkssCVAxTVNFTDJfMSwgUEIwX0ZOKSwKKworCS8qIFBDIEZOICovCisJUElOTVVYX0RBVEEoRENMS0lOX01BUkssCVAxTVNFTDNfMCwgUEM3X0ZOKSwKKwlQSU5NVVhfREFUQShIU1lOQ19NQVJLLAkJUDFNU0VMM18wLCBQQzZfRk4pLAorCVBJTk1VWF9EQVRBKERCNV9NQVJLLAkJUDFNU0VMMl8wLCBQQzVfRk4pLAorCVBJTk1VWF9EQVRBKERCNF9NQVJLLAkJUDFNU0VMMl8wLCBQQzRfRk4pLAorCVBJTk1VWF9EQVRBKERCM19NQVJLLAkJUDFNU0VMMl8wLCBQQzNfRk4pLAorCVBJTk1VWF9EQVRBKERCMl9NQVJLLAkJUDFNU0VMMl8wLCBQQzJfRk4pLAorCVBJTk1VWF9EQVRBKERCMV9NQVJLLAkJUDFNU0VMMl8wLCBQQzFfRk4pLAorCVBJTk1VWF9EQVRBKERCMF9NQVJLLAkJUDFNU0VMMl8wLCBQQzBfRk4pLAorCisJUElOTVVYX0RBVEEoSFNQSV9SWF9NQVJLLAlQMU1TRUwzXzEsIFBDN19GTiksCisJUElOTVVYX0RBVEEoSFNQSV9UWF9NQVJLLAlQMU1TRUwzXzEsIFBDNl9GTiksCisJUElOTVVYX0RBVEEoRVRIX1JYRDNfTUFSSywJUDFNU0VMMl8xLCBQQzVfRk4pLAorCVBJTk1VWF9EQVRBKEVUSF9SWEQyX01BUkssCVAxTVNFTDJfMSwgUEM0X0ZOKSwKKwlQSU5NVVhfREFUQShFVEhfUlhEMV9NQVJLLAlQMU1TRUwyXzEsIFBDM19GTiksCisJUElOTVVYX0RBVEEoRVRIX1JYRDBfTUFSSywJUDFNU0VMMl8xLCBQQzJfRk4pLAorCVBJTk1VWF9EQVRBKEVUSF9SWF9EVl9NQVJLLAlQMU1TRUwyXzEsIFBDMV9GTiksCisJUElOTVVYX0RBVEEoRVRIX1JYX0VSX01BUkssCVAxTVNFTDJfMSwgUEMwX0ZOKSwKKworCS8qIFBEIEZOICovCisJUElOTVVYX0RBVEEoRENMS09VVF9NQVJLLAlQRDdfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUYxX1NMS19NQVJLLAlQRDZfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUYxX1JYRF9NQVJLLAlQRDVfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUYxX1RYRF9NQVJLLAlQRDRfRk4pLAorCVBJTk1VWF9EQVRBKERBQ0sxX01BUkssCQlQMU1TRUwxM18xLCBQMU1TRUwxMl8wLCBQRDNfRk4pLAorCVBJTk1VWF9EQVRBKEJBQ0tfTUFSSywJCVAxTVNFTDEzXzAsIFAxTVNFTDEyXzEsIFBEM19GTiksCisJUElOTVVYX0RBVEEoRkFMRV9NQVJLLAkJUDFNU0VMMTNfMCwgUDFNU0VMMTJfMCwgUEQzX0ZOKSwKKwlQSU5NVVhfREFUQShEQUNLMF9NQVJLLAkJUDFNU0VMMTRfMSwgUEQyX0ZOKSwKKwlQSU5NVVhfREFUQShGQ0xFX01BUkssCQlQMU1TRUwxNF8wLCBQRDJfRk4pLAorCVBJTk1VWF9EQVRBKERSRVExX01BUkssCQlQMU1TRUwxMF8wLCBQMU1TRUw5XzEsIFBEMV9GTiksCisJUElOTVVYX0RBVEEoQlJFUV9NQVJLLAkJUDFNU0VMMTBfMSwgUDFNU0VMOV8wLCBQRDFfRk4pLAorCVBJTk1VWF9EQVRBKFVTQl9PVkMxX01BUkssCVAxTVNFTDEwXzAsIFAxTVNFTDlfMCwgUEQxX0ZOKSwKKwlQSU5NVVhfREFUQShEUkVRMF9NQVJLLAkJUDFNU0VMMTFfMSwgUEQwX0ZOKSwKKwlQSU5NVVhfREFUQShVU0JfT1ZDMF9NQVJLLAlQMU1TRUwxMV8wLCBQRDBfRk4pLAorCisJLyogUEUgRk4gKi8KKwlQSU5NVVhfREFUQShVU0JfUEVOQzFfTUFSSywJUEU3X0ZOKSwKKwlQSU5NVVhfREFUQShVU0JfUEVOQzBfTUFSSywJUEU2X0ZOKSwKKworCS8qIFBGIEZOICovCisJUElOTVVYX0RBVEEoSEFDMV9TRE9VVF9NQVJLLAlQMk1TRUwxNV8wLCBQMk1TRUwxNF8wLCBQRjdfRk4pLAorCVBJTk1VWF9EQVRBKEhBQzFfU0RJTl9NQVJLLAlQMk1TRUwxNV8wLCBQMk1TRUwxNF8wLCBQRjZfRk4pLAorCVBJTk1VWF9EQVRBKEhBQzFfU1lOQ19NQVJLLAlQMk1TRUwxNV8wLCBQMk1TRUwxNF8wLCBQRjVfRk4pLAorCVBJTk1VWF9EQVRBKEhBQzFfQklUQ0xLX01BUkssCVAyTVNFTDE1XzAsIFAyTVNFTDE0XzAsIFBGNF9GTiksCisJUElOTVVYX0RBVEEoSEFDMF9TRE9VVF9NQVJLLAlQMk1TRUwxM18wLCBQMk1TRUwxMl8wLCBQRjNfRk4pLAorCVBJTk1VWF9EQVRBKEhBQzBfU0RJTl9NQVJLLAlQMk1TRUwxM18wLCBQMk1TRUwxMl8wLCBQRjJfRk4pLAorCVBJTk1VWF9EQVRBKEhBQzBfU1lOQ19NQVJLLAlQMk1TRUwxM18wLCBQMk1TRUwxMl8wLCBQRjFfRk4pLAorCVBJTk1VWF9EQVRBKEhBQzBfQklUQ0xLX01BUkssCVAyTVNFTDEzXzAsIFAyTVNFTDEyXzAsIFBGMF9GTiksCisJUElOTVVYX0RBVEEoU1NJMV9TREFUQV9NQVJLLAlQMk1TRUwxNV8wLCBQMk1TRUwxNF8xLCBQRjdfRk4pLAorCVBJTk1VWF9EQVRBKFNTSTFfU0NLX01BUkssCVAyTVNFTDE1XzAsIFAyTVNFTDE0XzEsIFBGNl9GTiksCisJUElOTVVYX0RBVEEoU1NJMV9XU19NQVJLLAlQMk1TRUwxNV8wLCBQMk1TRUwxNF8xLCBQRjVfRk4pLAorCVBJTk1VWF9EQVRBKFNTSTFfQ0xLX01BUkssCVAyTVNFTDE1XzAsIFAyTVNFTDE0XzEsIFBGNF9GTiksCisJUElOTVVYX0RBVEEoU1NJMF9TREFUQV9NQVJLLAlQMk1TRUwxM18wLCBQMk1TRUwxMl8xLCBQRjNfRk4pLAorCVBJTk1VWF9EQVRBKFNTSTBfU0NLX01BUkssCVAyTVNFTDEzXzAsIFAyTVNFTDEyXzEsIFBGMl9GTiksCisJUElOTVVYX0RBVEEoU1NJMF9XU19NQVJLLAlQMk1TRUwxM18wLCBQMk1TRUwxMl8xLCBQRjFfRk4pLAorCVBJTk1VWF9EQVRBKFNTSTBfQ0xLX01BUkssCVAyTVNFTDEzXzAsIFAyTVNFTDEyXzEsIFBGMF9GTiksCisJUElOTVVYX0RBVEEoU0RJRjFDTURfTUFSSywJUDJNU0VMMTVfMSwgUDJNU0VMMTRfMCwgUEY3X0ZOKSwKKwlQSU5NVVhfREFUQShTRElGMUNEX01BUkssCVAyTVNFTDE1XzEsIFAyTVNFTDE0XzAsIFBGNl9GTiksCisJUElOTVVYX0RBVEEoU0RJRjFXUF9NQVJLLAlQMk1TRUwxNV8xLCBQMk1TRUwxNF8wLCBQRjVfRk4pLAorCVBJTk1VWF9EQVRBKFNESUYxQ0xLX01BUkssCVAyTVNFTDE1XzEsIFAyTVNFTDE0XzAsIFBGNF9GTiksCisJUElOTVVYX0RBVEEoU0RJRjFEM19NQVJLLAlQMk1TRUwxM18xLCBQMk1TRUwxMl8wLCBQRjNfRk4pLAorCVBJTk1VWF9EQVRBKFNESUYxRDJfTUFSSywJUDJNU0VMMTNfMSwgUDJNU0VMMTJfMCwgUEYyX0ZOKSwKKwlQSU5NVVhfREFUQShTRElGMUQxX01BUkssCVAyTVNFTDEzXzEsIFAyTVNFTDEyXzAsIFBGMV9GTiksCisJUElOTVVYX0RBVEEoU0RJRjFEMF9NQVJLLAlQMk1TRUwxM18xLCBQMk1TRUwxMl8wLCBQRjBfRk4pLAorCisJLyogUEcgRk4gKi8KKwlQSU5NVVhfREFUQShTQ0lGM19TQ0tfTUFSSywJUDFNU0VMOF8wLCBQRzdfRk4pLAorCVBJTk1VWF9EQVRBKFNTSTJfU0RBVEFfTUFSSywJUDFNU0VMOF8xLCBQRzdfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUYzX1JYRF9NQVJLLAlQMU1TRUw3XzAsIFAxTVNFTDZfMCwgUEc2X0ZOKSwKKwlQSU5NVVhfREFUQShTU0kyX1NDS19NQVJLLAlQMU1TRUw3XzEsIFAxTVNFTDZfMCwgUEc2X0ZOKSwKKwlQSU5NVVhfREFUQShUQ0xLX01BUkssCQlQMU1TRUw3XzAsIFAxTVNFTDZfMSwgUEc2X0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGM19UWERfTUFSSywJUDFNU0VMNV8wLCBQMU1TRUw0XzAsIFBHNV9GTiksCisJUElOTVVYX0RBVEEoU1NJMl9XU19NQVJLLAlQMU1TRUw1XzEsIFAxTVNFTDRfMCwgUEc1X0ZOKSwKKwlQSU5NVVhfREFUQShIQUNfUkVTX01BUkssCVAxTVNFTDVfMCwgUDFNU0VMNF8xLCBQRzVfRk4pLAorCisJLyogUEggRk4gKi8KKwlQSU5NVVhfREFUQShEQUNLM19NQVJLLAkJUDJNU0VMNF8wLCBQSDdfRk4pLAorCVBJTk1VWF9EQVRBKFNESUYwQ01EX01BUkssCVAyTVNFTDRfMSwgUEg3X0ZOKSwKKwlQSU5NVVhfREFUQShEQUNLMl9NQVJLLAkJUDJNU0VMNF8wLCBQSDZfRk4pLAorCVBJTk1VWF9EQVRBKFNESUYwQ0RfTUFSSywJUDJNU0VMNF8xLCBQSDZfRk4pLAorCVBJTk1VWF9EQVRBKERSRVEzX01BUkssCQlQMk1TRUw0XzAsIFBINV9GTiksCisJUElOTVVYX0RBVEEoU0RJRjBXUF9NQVJLLAlQMk1TRUw0XzEsIFBINV9GTiksCisJUElOTVVYX0RBVEEoRFJFUTJfTUFSSywJCVAyTVNFTDNfMCwgUDJNU0VMMl8xLCBQSDRfRk4pLAorCVBJTk1VWF9EQVRBKFNESUYwQ0xLX01BUkssCVAyTVNFTDNfMSwgUDJNU0VMMl8wLCBQSDRfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUYwX0NUU19NQVJLLAlQMk1TRUwzXzAsIFAyTVNFTDJfMCwgUEg0X0ZOKSwKKwlQSU5NVVhfREFUQShTRElGMEQzX01BUkssCVAyTVNFTDFfMSwgUDJNU0VMMF8wLCBQSDNfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUYwX1JUU19NQVJLLAlQMk1TRUwxXzAsIFAyTVNFTDBfMCwgUEgzX0ZOKSwKKwlQSU5NVVhfREFUQShJUkw3X01BUkssCQlQMk1TRUwxXzAsIFAyTVNFTDBfMSwgUEgzX0ZOKSwKKwlQSU5NVVhfREFUQShTRElGMEQyX01BUkssCVAyTVNFTDFfMSwgUDJNU0VMMF8wLCBQSDJfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUYwX1NDS19NQVJLLAlQMk1TRUwxXzAsIFAyTVNFTDBfMCwgUEgyX0ZOKSwKKwlQSU5NVVhfREFUQShJUkw2X01BUkssCQlQMk1TRUwxXzAsIFAyTVNFTDBfMSwgUEgyX0ZOKSwKKwlQSU5NVVhfREFUQShTRElGMEQxX01BUkssCVAyTVNFTDFfMSwgUDJNU0VMMF8wLCBQSDFfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUYwX1JYRF9NQVJLLAlQMk1TRUwxXzAsIFAyTVNFTDBfMCwgUEgxX0ZOKSwKKwlQSU5NVVhfREFUQShJUkw1X01BUkssCQlQMk1TRUwxXzAsIFAyTVNFTDBfMSwgUEgxX0ZOKSwKKwlQSU5NVVhfREFUQShTRElGMEQwX01BUkssCVAyTVNFTDFfMSwgUDJNU0VMMF8wLCBQSDBfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUYwX1RYRF9NQVJLLAlQMk1TRUwxXzAsIFAyTVNFTDBfMCwgUEgwX0ZOKSwKKwlQSU5NVVhfREFUQShJUkw0X01BUkssCQlQMk1TRUwxXzAsIFAyTVNFTDBfMSwgUEgwX0ZOKSwKKworCS8qIFBKIEZOICovCisJUElOTVVYX0RBVEEoU0NJRjVfU0NLX01BUkssCVAyTVNFTDExXzEsIFBKN19GTiksCisJUElOTVVYX0RBVEEoRlJCX01BUkssCQlQMk1TRUwxMV8wLCBQSjdfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUY1X1JYRF9NQVJLLAlQMk1TRUwxMF8wLCBQSjZfRk4pLAorCVBJTk1VWF9EQVRBKElPSVMxNl9NQVJLLAlQMk1TRUwxMF8xLCBQSjZfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUY1X1RYRF9NQVJLLAlQMk1TRUwxMF8wLCBQSjVfRk4pLAorCVBJTk1VWF9EQVRBKENFMkJfTUFSSywJCVAyTVNFTDEwXzEsIFBKNV9GTiksCisJUElOTVVYX0RBVEEoRFJBSzNfTUFSSywJCVAyTVNFTDdfMCwgUEo0X0ZOKSwKKwlQSU5NVVhfREFUQShDRTJBX01BUkssCQlQMk1TRUw3XzEsIFBKNF9GTiksCisJUElOTVVYX0RBVEEoU0NJRjRfU0NLX01BUkssCVAyTVNFTDlfMCwgUDJNU0VMOF8wLCBQSjNfRk4pLAorCVBJTk1VWF9EQVRBKERSQUsyX01BUkssCQlQMk1TRUw5XzAsIFAyTVNFTDhfMSwgUEozX0ZOKSwKKwlQSU5NVVhfREFUQShTU0kzX1dTX01BUkssCVAyTVNFTDlfMSwgUDJNU0VMOF8wLCBQSjNfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUY0X1JYRF9NQVJLLAlQMk1TRUw2XzEsIFAyTVNFTDVfMCwgUEoyX0ZOKSwKKwlQSU5NVVhfREFUQShEUkFLMV9NQVJLLAkJUDJNU0VMNl8wLCBQMk1TRUw1XzEsIFBKMl9GTiksCisJUElOTVVYX0RBVEEoRlNUQVRVU19NQVJLLAlQMk1TRUw2XzAsIFAyTVNFTDVfMCwgUEoyX0ZOKSwKKwlQSU5NVVhfREFUQShTU0kzX1NEQVRBX01BUkssCVAyTVNFTDZfMSwgUDJNU0VMNV8xLCBQSjJfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUY0X1RYRF9NQVJLLAlQMk1TRUw2XzEsIFAyTVNFTDVfMCwgUEoxX0ZOKSwKKwlQSU5NVVhfREFUQShEUkFLMF9NQVJLLAkJUDJNU0VMNl8wLCBQMk1TRUw1XzEsIFBKMV9GTiksCisJUElOTVVYX0RBVEEoRlNFX01BUkssCQlQMk1TRUw2XzAsIFAyTVNFTDVfMCwgUEoxX0ZOKSwKKwlQSU5NVVhfREFUQShTU0kzX1NDS19NQVJLLAlQMk1TRUw2XzEsIFAyTVNFTDVfMSwgUEoxX0ZOKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGlubXV4X2dwaW8gcGlubXV4X2dwaW9zW10gPSB7CisJLyogUEEgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BBNywgUEE3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEE2LCBQQTZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQTUsIFBBNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BBNCwgUEE0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEEzLCBQQTNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQTIsIFBBMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BBMSwgUEExX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEEwLCBQQTBfREFUQSksCisKKwkvKiBQQiAqLworCVBJTk1VWF9HUElPKEdQSU9fUEI3LCBQQjdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQjYsIFBCNl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BCNSwgUEI1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEI0LCBQQjRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQjMsIFBCM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BCMiwgUEIyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEIxLCBQQjFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQjAsIFBCMF9EQVRBKSwKKworCS8qIFBDICovCisJUElOTVVYX0dQSU8oR1BJT19QQzcsIFBDN19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BDNiwgUEM2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEM1LCBQQzVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQzQsIFBDNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BDMywgUEMzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEMyLCBQQzJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQzEsIFBDMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BDMCwgUEMwX0RBVEEpLAorCisJLyogUEQgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BENywgUEQ3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEQ2LCBQRDZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRDUsIFBENV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BENCwgUEQ0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEQzLCBQRDNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRDIsIFBEMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BEMSwgUEQxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEQwLCBQRDBfREFUQSksCisKKwkvKiBQRSAqLworCVBJTk1VWF9HUElPKEdQSU9fUEU1LCBQRTdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRTQsIFBFNl9EQVRBKSwKKworCS8qIFBGICovCisJUElOTVVYX0dQSU8oR1BJT19QRjcsIFBGN19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BGNiwgUEY2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEY1LCBQRjVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRjQsIFBGNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BGMywgUEYzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEYyLCBQRjJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRjEsIFBGMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BGMCwgUEYwX0RBVEEpLAorCisJLyogUEcgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BHNywgUEc3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEc2LCBQRzZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRzUsIFBHNV9EQVRBKSwKKworCS8qIFBIICovCisJUElOTVVYX0dQSU8oR1BJT19QSDcsIFBIN19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BINiwgUEg2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEg1LCBQSDVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QSDQsIFBINF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BIMywgUEgzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEgyLCBQSDJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QSDEsIFBIMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BIMCwgUEgwX0RBVEEpLAorCisJLyogUEogKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BKNywgUEo3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEo2LCBQSjZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QSjUsIFBKNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BKNCwgUEo0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEozLCBQSjNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QSjIsIFBKMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BKMSwgUEoxX0RBVEEpLAorCisJLyogRk4gKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0NERSwJCUNERV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0VUSF9NQUdJQywJCUVUSF9NQUdJQ19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RJU1AsCQlESVNQX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRVRIX0xJTkssCQlFVEhfTElOS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RSNSwJCURSNV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0VUSF9UWF9FUiwJCUVUSF9UWF9FUl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RSNCwJCURSNF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0VUSF9UWF9FTiwJCUVUSF9UWF9FTl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RSMywJCURSM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0VUSF9UWEQzLAkJRVRIX1RYRDNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EUjIsCQlEUjJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9FVEhfVFhEMiwJCUVUSF9UWEQyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFIxLAkJRFIxX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRVRIX1RYRDEsCQlFVEhfVFhEMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RSMCwJCURSMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0VUSF9UWEQwLAkJRVRIX1RYRDBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9WU1lOQywJCVZTWU5DX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSFNQSV9DTEssCQlIU1BJX0NMS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX09EREYsCQlPRERGX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSFNQSV9DUywJCUhTUElfQ1NfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9ERzUsCQlERzVfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9FVEhfTURJTywJCUVUSF9NRElPX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fREc0LAkJREc0X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRVRIX1JYX0NMSywJCUVUSF9SWF9DTEtfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9ERzMsCQlERzNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9FVEhfTURDLAkJRVRIX01EQ19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RHMiwJCURHMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0VUSF9DT0wsCQlFVEhfQ09MX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fREcxLAkJREcxX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRVRIX1RYX0NMSywJCUVUSF9UWF9DTEtfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9ERzAsCQlERzBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9FVEhfQ1JTLAkJRVRIX0NSU19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RDTEtJTiwJCURDTEtJTl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hTUElfUlgsCQlIU1BJX1JYX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSFNZTkMsCQlIU1lOQ19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hTUElfVFgsCQlIU1BJX1RYX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fREI1LAkJREI1X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRVRIX1JYRDMsCQlFVEhfUlhEM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RCNCwJCURCNF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0VUSF9SWEQyLAkJRVRIX1JYRDJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EQjMsCQlEQjNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9FVEhfUlhEMSwJCUVUSF9SWEQxX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fREIyLAkJREIyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRVRIX1JYRDAsCQlFVEhfUlhEMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RCMSwJCURCMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0VUSF9SWF9EViwJCUVUSF9SWF9EVl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RCMCwJCURCMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0VUSF9SWF9FUiwJCUVUSF9SWF9FUl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RDTEtPVVQsCQlEQ0xLT1VUX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjFfU0xLLAkJU0NJRjFfU0xLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjFfUlhELAkJU0NJRjFfUlhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjFfVFhELAkJU0NJRjFfVFhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fREFDSzEsCQlEQUNLMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0JBQ0ssCQlCQUNLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRkFMRSwJCUZBTEVfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EQUNLMCwJCURBQ0swX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRkNMRSwJCUZDTEVfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EUkVRMSwJCURSRVExX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQlJFUSwJCUJSRVFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9VU0JfT1ZDMSwJCVVTQl9PVkMxX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFJFUTAsCQlEUkVRMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1VTQl9PVkMwLAkJVVNCX09WQzBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9VU0JfUEVOQzEsCQlVU0JfUEVOQzFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9VU0JfUEVOQzAsCQlVU0JfUEVOQzBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9IQUMxX1NET1VULAkJSEFDMV9TRE9VVF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NTSTFfU0RBVEEsCQlTU0kxX1NEQVRBX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RJRjFDTUQsCQlTRElGMUNNRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hBQzFfU0RJTiwJCUhBQzFfU0RJTl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NTSTFfU0NLLAkJU1NJMV9TQ0tfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TRElGMUNELAkJU0RJRjFDRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hBQzFfU1lOQywJCUhBQzFfU1lOQ19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NTSTFfV1MsCQlTU0kxX1dTX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RJRjFXUCwJCVNESUYxV1BfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9IQUMxX0JJVENMSywJSEFDMV9CSVRDTEtfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU0kxX0NMSywJCVNTSTFfQ0xLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RJRjFDTEssCQlTRElGMUNMS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hBQzBfU0RPVVQsCQlIQUMwX1NET1VUX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU1NJMF9TREFUQSwJCVNTSTBfU0RBVEFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TRElGMUQzLAkJU0RJRjFEM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hBQzBfU0RJTiwJCUhBQzBfU0RJTl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NTSTBfU0NLLAkJU1NJMF9TQ0tfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TRElGMUQyLAkJU0RJRjFEMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hBQzBfU1lOQywJCUhBQzBfU1lOQ19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NTSTBfV1MsCQlTU0kwX1dTX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RJRjFEMSwJCVNESUYxRDFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9IQUMwX0JJVENMSywJSEFDMF9CSVRDTEtfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU0kwX0NMSywJCVNTSTBfQ0xLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RJRjFEMCwJCVNESUYxRDBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGM19TQ0ssCQlTQ0lGM19TQ0tfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU0kyX1NEQVRBLAkJU1NJMl9TREFUQV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYzX1JYRCwJCVNDSUYzX1JYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RDTEssCQlUQ0xLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU1NJMl9TQ0ssCQlTU0kyX1NDS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYzX1RYRCwJCVNDSUYzX1RYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hBQ19SRVMsCQlIQUNfUkVTX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU1NJMl9XUywJCVNTSTJfV1NfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EQUNLMywJCURBQ0szX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RJRjBDTUQsCQlTRElGMENNRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RBQ0syLAkJREFDSzJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TRElGMENELAkJU0RJRjBDRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RSRVEzLAkJRFJFUTNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TRElGMFdQLAkJU0RJRjBXUF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYwX0NUUywJCVNDSUYwX0NUU19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RSRVEyLAkJRFJFUTJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TRElGMENMSywJCVNESUYwQ0xLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjBfUlRTLAkJU0NJRjBfUlRTX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJMNywJCUlSTDdfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TRElGMEQzLAkJU0RJRjBEM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYwX1NDSywJCVNDSUYwX1NDS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSTDYsCQlJUkw2X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RJRjBEMiwJCVNESUYwRDJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMF9SWEQsCQlTQ0lGMF9SWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUkw1LAkJSVJMNV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESUYwRDEsCQlTRElGMEQxX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjBfVFhELAkJU0NJRjBfVFhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJMNCwJCUlSTDRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TRElGMEQwLAkJU0RJRjBEMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUY1X1NDSywJCVNDSUY1X1NDS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0ZSQiwJCUZSQl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUY1X1JYRCwJCVNDSUY1X1JYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lPSVMxNiwJCUlPSVMxNl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUY1X1RYRCwJCVNDSUY1X1RYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0NFMkIsCQlDRTJCX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFJBSzMsCQlEUkFLM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0NFMkEsCQlDRTJBX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjRfU0NLLAkJU0NJRjRfU0NLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFJBSzIsCQlEUkFLMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NTSTNfV1MsCQlTU0kzX1dTX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjRfUlhELAkJU0NJRjRfUlhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFJBSzEsCQlEUkFLMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NTSTNfU0RBVEEsCQlTU0kzX1NEQVRBX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRlNUQVRVUywJCUZTVEFUVVNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGNF9UWEQsCQlTQ0lGNF9UWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EUkFLMCwJCURSQUswX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU1NJM19TQ0ssCQlTU0kzX1NDS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0ZTRSwJCUZTRV9NQVJLKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGlubXV4X2NmZ19yZWcgcGlubXV4X2NvbmZpZ19yZWdzW10gPSB7CisJeyBQSU5NVVhfQ0ZHX1JFRygiUEFDUiIsIDB4ZmZjYzAwMDAsIDE2LCAyKSB7CisJCVBBN19GTiwgUEE3X09VVCwgUEE3X0lOLCBQQTdfSU5fUFUsCisJCVBBNl9GTiwgUEE2X09VVCwgUEE2X0lOLCBQQTZfSU5fUFUsCisJCVBBNV9GTiwgUEE1X09VVCwgUEE1X0lOLCBQQTVfSU5fUFUsCisJCVBBNF9GTiwgUEE0X09VVCwgUEE0X0lOLCBQQTRfSU5fUFUsCisJCVBBM19GTiwgUEEzX09VVCwgUEEzX0lOLCBQQTNfSU5fUFUsCisJCVBBMl9GTiwgUEEyX09VVCwgUEEyX0lOLCBQQTJfSU5fUFUsCisJCVBBMV9GTiwgUEExX09VVCwgUEExX0lOLCBQQTFfSU5fUFUsCisJCVBBMF9GTiwgUEEwX09VVCwgUEEwX0lOLCBQQTBfSU5fUFUgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEJDUiIsIDB4ZmZjYzAwMDIsIDE2LCAyKSB7CisJCVBCN19GTiwgUEI3X09VVCwgUEI3X0lOLCBQQjdfSU5fUFUsCisJCVBCNl9GTiwgUEI2X09VVCwgUEI2X0lOLCBQQjZfSU5fUFUsCisJCVBCNV9GTiwgUEI1X09VVCwgUEI1X0lOLCBQQjVfSU5fUFUsCisJCVBCNF9GTiwgUEI0X09VVCwgUEI0X0lOLCBQQjRfSU5fUFUsCisJCVBCM19GTiwgUEIzX09VVCwgUEIzX0lOLCBQQjNfSU5fUFUsCisJCVBCMl9GTiwgUEIyX09VVCwgUEIyX0lOLCBQQjJfSU5fUFUsCisJCVBCMV9GTiwgUEIxX09VVCwgUEIxX0lOLCBQQjFfSU5fUFUsCisJCVBCMF9GTiwgUEIwX09VVCwgUEIwX0lOLCBQQjBfSU5fUFUgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUENDUiIsIDB4ZmZjYzAwMDQsIDE2LCAyKSB7CisJCVBDN19GTiwgUEM3X09VVCwgUEM3X0lOLCBQQzdfSU5fUFUsCisJCVBDNl9GTiwgUEM2X09VVCwgUEM2X0lOLCBQQzZfSU5fUFUsCisJCVBDNV9GTiwgUEM1X09VVCwgUEM1X0lOLCBQQzVfSU5fUFUsCisJCVBDNF9GTiwgUEM0X09VVCwgUEM0X0lOLCBQQzRfSU5fUFUsCisJCVBDM19GTiwgUEMzX09VVCwgUEMzX0lOLCBQQzNfSU5fUFUsCisJCVBDMl9GTiwgUEMyX09VVCwgUEMyX0lOLCBQQzJfSU5fUFUsCisJCVBDMV9GTiwgUEMxX09VVCwgUEMxX0lOLCBQQzFfSU5fUFUsCisJCVBDMF9GTiwgUEMwX09VVCwgUEMwX0lOLCBQQzBfSU5fUFUgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUERDUiIsIDB4ZmZjYzAwMDYsIDE2LCAyKSB7CisJCVBEN19GTiwgUEQ3X09VVCwgUEQ3X0lOLCBQRDdfSU5fUFUsCisJCVBENl9GTiwgUEQ2X09VVCwgUEQ2X0lOLCBQRDZfSU5fUFUsCisJCVBENV9GTiwgUEQ1X09VVCwgUEQ1X0lOLCBQRDVfSU5fUFUsCisJCVBENF9GTiwgUEQ0X09VVCwgUEQ0X0lOLCBQRDRfSU5fUFUsCisJCVBEM19GTiwgUEQzX09VVCwgUEQzX0lOLCBQRDNfSU5fUFUsCisJCVBEMl9GTiwgUEQyX09VVCwgUEQyX0lOLCBQRDJfSU5fUFUsCisJCVBEMV9GTiwgUEQxX09VVCwgUEQxX0lOLCBQRDFfSU5fUFUsCisJCVBEMF9GTiwgUEQwX09VVCwgUEQwX0lOLCBQRDBfSU5fUFUgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEVDUiIsIDB4ZmZjYzAwMDgsIDE2LCAyKSB7CisJCVBFN19GTiwgUEU3X09VVCwgUEU3X0lOLCBQRTdfSU5fUFUsCisJCVBFNl9GTiwgUEU2X09VVCwgUEU2X0lOLCBQRTZfSU5fUFUsCisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBGQ1IiLCAweGZmY2MwMDBhLCAxNiwgMikgeworCQlQRjdfRk4sIFBGN19PVVQsIFBGN19JTiwgUEY3X0lOX1BVLAorCQlQRjZfRk4sIFBGNl9PVVQsIFBGNl9JTiwgUEY2X0lOX1BVLAorCQlQRjVfRk4sIFBGNV9PVVQsIFBGNV9JTiwgUEY1X0lOX1BVLAorCQlQRjRfRk4sIFBGNF9PVVQsIFBGNF9JTiwgUEY0X0lOX1BVLAorCQlQRjNfRk4sIFBGM19PVVQsIFBGM19JTiwgUEYzX0lOX1BVLAorCQlQRjJfRk4sIFBGMl9PVVQsIFBGMl9JTiwgUEYyX0lOX1BVLAorCQlQRjFfRk4sIFBGMV9PVVQsIFBGMV9JTiwgUEYxX0lOX1BVLAorCQlQRjBfRk4sIFBGMF9PVVQsIFBGMF9JTiwgUEYwX0lOX1BVIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBHQ1IiLCAweGZmY2MwMDBjLCAxNiwgMikgeworCQlQRzdfRk4sIFBHN19PVVQsIFBHN19JTiwgUEc3X0lOX1BVLAorCQlQRzZfRk4sIFBHNl9PVVQsIFBHNl9JTiwgUEc2X0lOX1BVLAorCQlQRzVfRk4sIFBHNV9PVVQsIFBHNV9JTiwgUEc1X0lOX1BVLAorCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLCB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQSENSIiwgMHhmZmNjMDAwZSwgMTYsIDIpIHsKKwkJUEg3X0ZOLCBQSDdfT1VULCBQSDdfSU4sIFBIN19JTl9QVSwKKwkJUEg2X0ZOLCBQSDZfT1VULCBQSDZfSU4sIFBINl9JTl9QVSwKKwkJUEg1X0ZOLCBQSDVfT1VULCBQSDVfSU4sIFBINV9JTl9QVSwKKwkJUEg0X0ZOLCBQSDRfT1VULCBQSDRfSU4sIFBINF9JTl9QVSwKKwkJUEgzX0ZOLCBQSDNfT1VULCBQSDNfSU4sIFBIM19JTl9QVSwKKwkJUEgyX0ZOLCBQSDJfT1VULCBQSDJfSU4sIFBIMl9JTl9QVSwKKwkJUEgxX0ZOLCBQSDFfT1VULCBQSDFfSU4sIFBIMV9JTl9QVSwKKwkJUEgwX0ZOLCBQSDBfT1VULCBQSDBfSU4sIFBIMF9JTl9QVSB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQSkNSIiwgMHhmZmNjMDAxMCwgMTYsIDIpIHsKKwkJUEo3X0ZOLCBQSjdfT1VULCBQSjdfSU4sIFBKN19JTl9QVSwKKwkJUEo2X0ZOLCBQSjZfT1VULCBQSjZfSU4sIFBKNl9JTl9QVSwKKwkJUEo1X0ZOLCBQSjVfT1VULCBQSjVfSU4sIFBKNV9JTl9QVSwKKwkJUEo0X0ZOLCBQSjRfT1VULCBQSjRfSU4sIFBKNF9JTl9QVSwKKwkJUEozX0ZOLCBQSjNfT1VULCBQSjNfSU4sIFBKM19JTl9QVSwKKwkJUEoyX0ZOLCBQSjJfT1VULCBQSjJfSU4sIFBKMl9JTl9QVSwKKwkJUEoxX0ZOLCBQSjFfT1VULCBQSjFfSU4sIFBKMV9JTl9QVSwKKwkJMCwgMCwgMCwgMCwgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUDFNU0VMUiIsIDB4ZmZjYzAwODAsIDE2LCAxKSB7CisJCTAsIDAsCisJCVAxTVNFTDE0XzAsIFAxTVNFTDE0XzEsCisJCVAxTVNFTDEzXzAsIFAxTVNFTDEzXzEsCisJCVAxTVNFTDEyXzAsIFAxTVNFTDEyXzEsCisJCVAxTVNFTDExXzAsIFAxTVNFTDExXzEsCisJCVAxTVNFTDEwXzAsIFAxTVNFTDEwXzEsCisJCVAxTVNFTDlfMCwgIFAxTVNFTDlfMSwKKwkJUDFNU0VMOF8wLCAgUDFNU0VMOF8xLAorCQlQMU1TRUw3XzAsICBQMU1TRUw3XzEsCisJCVAxTVNFTDZfMCwgIFAxTVNFTDZfMSwKKwkJUDFNU0VMNV8wLCAgUDFNU0VMNV8xLAorCQlQMU1TRUw0XzAsICBQMU1TRUw0XzEsCisJCVAxTVNFTDNfMCwgIFAxTVNFTDNfMSwKKwkJUDFNU0VMMl8wLCAgUDFNU0VMMl8xLAorCQlQMU1TRUwxXzAsICBQMU1TRUwxXzEsCisJCVAxTVNFTDBfMCwgIFAxTVNFTDBfMSB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQMk1TRUxSIiwgMHhmZmNjMDA4MiwgMTYsIDEpIHsKKwkJUDJNU0VMMTVfMCwgUDJNU0VMMTVfMSwKKwkJUDJNU0VMMTRfMCwgUDJNU0VMMTRfMSwKKwkJUDJNU0VMMTNfMCwgUDJNU0VMMTNfMSwKKwkJUDJNU0VMMTJfMCwgUDJNU0VMMTJfMSwKKwkJUDJNU0VMMTFfMCwgUDJNU0VMMTFfMSwKKwkJUDJNU0VMMTBfMCwgUDJNU0VMMTBfMSwKKwkJUDJNU0VMOV8wLCAgUDJNU0VMOV8xLAorCQlQMk1TRUw4XzAsICBQMk1TRUw4XzEsCisJCVAyTVNFTDdfMCwgIFAyTVNFTDdfMSwKKwkJUDJNU0VMNl8wLCAgUDJNU0VMNl8xLAorCQlQMk1TRUw1XzAsICBQMk1TRUw1XzEsCisJCVAyTVNFTDRfMCwgIFAyTVNFTDRfMSwKKwkJUDJNU0VMM18wLCAgUDJNU0VMM18xLAorCQlQMk1TRUwyXzAsICBQMk1TRUwyXzEsCisJCVAyTVNFTDFfMCwgIFAyTVNFTDFfMSwKKwkJUDJNU0VMMF8wLCAgUDJNU0VMMF8xIH0KKwl9LAorCXt9Cit9OworCitzdGF0aWMgc3RydWN0IHBpbm11eF9kYXRhX3JlZyBwaW5tdXhfZGF0YV9yZWdzW10gPSB7CisJeyBQSU5NVVhfREFUQV9SRUcoIlBBRFIiLCAweGZmY2MwMDIwLCA4KSB7CisJCVBBN19EQVRBLCBQQTZfREFUQSwgUEE1X0RBVEEsIFBBNF9EQVRBLAorCQlQQTNfREFUQSwgUEEyX0RBVEEsIFBBMV9EQVRBLCBQQTBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUEJEUiIsIDB4ZmZjYzAwMjIsIDgpIHsKKwkJUEI3X0RBVEEsIFBCNl9EQVRBLCBQQjVfREFUQSwgUEI0X0RBVEEsCisJCVBCM19EQVRBLCBQQjJfREFUQSwgUEIxX0RBVEEsIFBCMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQQ0RSIiwgMHhmZmNjMDAyNCwgOCkgeworCQlQQzdfREFUQSwgUEM2X0RBVEEsIFBDNV9EQVRBLCBQQzRfREFUQSwKKwkJUEMzX0RBVEEsIFBDMl9EQVRBLCBQQzFfREFUQSwgUEMwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBERFIiLCAweGZmY2MwMDI2LCA4KSB7CisJCVBEN19EQVRBLCBQRDZfREFUQSwgUEQ1X0RBVEEsIFBENF9EQVRBLAorCQlQRDNfREFUQSwgUEQyX0RBVEEsIFBEMV9EQVRBLCBQRDBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUEVEUiIsIDB4ZmZjYzAwMjgsIDgpIHsKKwkJUEU3X0RBVEEsIFBFNl9EQVRBLAorCQkwLCAwLCAwLCAwLCAwLCAwIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQRkRSIiwgMHhmZmNjMDAyYSwgOCkgeworCQlQRjdfREFUQSwgUEY2X0RBVEEsIFBGNV9EQVRBLCBQRjRfREFUQSwKKwkJUEYzX0RBVEEsIFBGMl9EQVRBLCBQRjFfREFUQSwgUEYwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBHRFIiLCAweGZmY2MwMDJjLCA4KSB7CisJCVBHN19EQVRBLCBQRzZfREFUQSwgUEc1X0RBVEEsIDAsCisJCTAsIDAsIDAsIDAgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBIRFIiLCAweGZmY2MwMDJlLCA4KSB7CisJCVBIN19EQVRBLCBQSDZfREFUQSwgUEg1X0RBVEEsIFBINF9EQVRBLAorCQlQSDNfREFUQSwgUEgyX0RBVEEsIFBIMV9EQVRBLCBQSDBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUEpEUiIsIDB4ZmZjYzAwMzAsIDgpIHsKKwkJUEo3X0RBVEEsIFBKNl9EQVRBLCBQSjVfREFUQSwgUEo0X0RBVEEsCisJCVBKM19EQVRBLCBQSjJfREFUQSwgUEoxX0RBVEEsIDAgfQorCX0sCisJeyB9LAorfTsKKworc3RhdGljIHN0cnVjdCBwaW5tdXhfaW5mbyBzaDc3ODZfcGlubXV4X2luZm8gPSB7CisJLm5hbWUgPSAic2g3Nzg2X3BmYyIsCisJLnJlc2VydmVkX2lkID0gUElOTVVYX1JFU0VSVkVELAorCS5kYXRhID0geyBQSU5NVVhfREFUQV9CRUdJTiwgUElOTVVYX0RBVEFfRU5EIH0sCisJLmlucHV0ID0geyBQSU5NVVhfSU5QVVRfQkVHSU4sIFBJTk1VWF9JTlBVVF9FTkQgfSwKKwkuaW5wdXRfcHUgPSB7IFBJTk1VWF9JTlBVVF9QVUxMVVBfQkVHSU4sIFBJTk1VWF9JTlBVVF9QVUxMVVBfRU5EIH0sCisJLm91dHB1dCA9IHsgUElOTVVYX09VVFBVVF9CRUdJTiwgUElOTVVYX09VVFBVVF9FTkQgfSwKKwkubWFyayA9IHsgUElOTVVYX01BUktfQkVHSU4sIFBJTk1VWF9NQVJLX0VORCB9LAorCS5mdW5jdGlvbiA9IHsgUElOTVVYX0ZVTkNUSU9OX0JFR0lOLCBQSU5NVVhfRlVOQ1RJT05fRU5EIH0sCisKKwkuZmlyc3RfZ3BpbyA9IEdQSU9fUEE3LAorCS5sYXN0X2dwaW8gPSBHUElPX0ZOX0ZTRSwKKworCS5ncGlvcyA9IHBpbm11eF9ncGlvcywKKwkuY2ZnX3JlZ3MgPSBwaW5tdXhfY29uZmlnX3JlZ3MsCisJLmRhdGFfcmVncyA9IHBpbm11eF9kYXRhX3JlZ3MsCisKKwkuZ3Bpb19kYXRhID0gcGlubXV4X2RhdGEsCisJLmdwaW9fZGF0YV9zaXplID0gQVJSQVlfU0laRShwaW5tdXhfZGF0YSksCit9OworCitzdGF0aWMgaW50IF9faW5pdCBwbGF0X3Bpbm11eF9zZXR1cCh2b2lkKQoreworCXJldHVybiByZWdpc3Rlcl9waW5tdXgoJnNoNzc4Nl9waW5tdXhfaW5mbyk7Cit9CisKK2FyY2hfaW5pdGNhbGwocGxhdF9waW5tdXhfc2V0dXApOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3MzQzLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDczNDMuYwppbmRleCA0ZmY0ZGM2Li5jMTU0OTM4IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDczNDMuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDczNDMuYwpAQCAtMTIsNiArMTIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9zY2kuaD4KICNpbmNsdWRlIDxsaW51eC91aW9fZHJpdmVyLmg+CisjaW5jbHVkZSA8bGludXgvc2hfY210Lmg+CiAjaW5jbHVkZSA8YXNtL2Nsb2NrLmg+CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaWljMF9yZXNvdXJjZXNbXSA9IHsKQEAgLTE0MCw2ICsxNDEsMzggQEAKIAkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoanB1X3Jlc291cmNlcyksCiB9OwogCitzdGF0aWMgc3RydWN0IHNoX2NtdF9jb25maWcgY210X3BsYXRmb3JtX2RhdGEgPSB7CisJLm5hbWUgPSAiQ01UIiwKKwkuY2hhbm5lbF9vZmZzZXQgPSAweDYwLAorCS50aW1lcl9iaXQgPSA1LAorCS5jbGsgPSAiY210MCIsCisJLmNsb2NrZXZlbnRfcmF0aW5nID0gMTI1LAorCS5jbG9ja3NvdXJjZV9yYXRpbmcgPSAyMDAsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGNtdF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5uYW1lCT0gIkNNVCIsCisJCS5zdGFydAk9IDB4MDQ0YTAwNjAsCisJCS5lbmQJPSAweDA0NGEwMDZiLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gMTA0LAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY210X2RldmljZSA9IHsKKwkubmFtZQkJPSAic2hfY210IiwKKwkuaWQJCT0gMCwKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YQk9ICZjbXRfcGxhdGZvcm1fZGF0YSwKKwl9LAorCS5yZXNvdXJjZQk9IGNtdF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGNtdF9yZXNvdXJjZXMpLAorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaV9wbGF0Zm9ybV9kYXRhW10gPSB7CiAJewogCQkubWFwYmFzZQk9IDB4ZmZlMDAwMDAsCkBAIC0xNzUsNiArMjA4LDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzaDczNDNfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJmNtdF9kZXZpY2UsCiAJJmlpYzBfZGV2aWNlLAogCSZpaWMxX2RldmljZSwKIAkmc2NpX2RldmljZSwKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzM2Ni5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3MzY2LmMKaW5kZXggODM5YWU5Ny4uOTNlY2Y4ZSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3MzY2LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3MzY2LmMKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfc2NpLmg+CiAjaW5jbHVkZSA8bGludXgvdWlvX2RyaXZlci5oPgorI2luY2x1ZGUgPGxpbnV4L3NoX2NtdC5oPgogI2luY2x1ZGUgPGFzbS9jbG9jay5oPgogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGlpY19yZXNvdXJjZXNbXSA9IHsKQEAgLTE0Nyw2ICsxNDgsMzggQEAKIAkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodmV1MV9yZXNvdXJjZXMpLAogfTsKIAorc3RhdGljIHN0cnVjdCBzaF9jbXRfY29uZmlnIGNtdF9wbGF0Zm9ybV9kYXRhID0geworCS5uYW1lID0gIkNNVCIsCisJLmNoYW5uZWxfb2Zmc2V0ID0gMHg2MCwKKwkudGltZXJfYml0ID0gNSwKKwkuY2xrID0gImNtdDAiLAorCS5jbG9ja2V2ZW50X3JhdGluZyA9IDEyNSwKKwkuY2xvY2tzb3VyY2VfcmF0aW5nID0gMjAwLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBjbXRfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkubmFtZQk9ICJDTVQiLAorCQkuc3RhcnQJPSAweDA0NGEwMDYwLAorCQkuZW5kCT0gMHgwNDRhMDA2YiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IDEwNCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGNtdF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoX2NtdCIsCisJLmlkCQk9IDAsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmY210X3BsYXRmb3JtX2RhdGEsCisJfSwKKwkucmVzb3VyY2UJPSBjbXRfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShjbXRfcmVzb3VyY2VzKSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lfcGxhdGZvcm1fZGF0YVtdID0gewogCXsKIAkJLm1hcGJhc2UJPSAweGZmZTAwMDAwLApAQCAtMTY3LDYgKzIwMCw3IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc2g3MzY2X2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZjbXRfZGV2aWNlLAogCSZpaWNfZGV2aWNlLAogCSZzY2lfZGV2aWNlLAogCSZ1c2JfaG9zdF9kZXZpY2UsCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjIuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzcyMi5jCmluZGV4IDUxNDZhZmMuLjBlNWQyMDQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzcyMi5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzcyMi5jCkBAIC0xMyw2ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX3NjaS5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvdWlvX2RyaXZlci5oPgorI2luY2x1ZGUgPGxpbnV4L3NoX2NtdC5oPgogI2luY2x1ZGUgPGFzbS9jbG9jay5oPgogI2luY2x1ZGUgPGFzbS9tbXpvbmUuaD4KIApAQCAtMTc2LDYgKzE3NywzOCBAQAogCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShqcHVfcmVzb3VyY2VzKSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgc2hfY210X2NvbmZpZyBjbXRfcGxhdGZvcm1fZGF0YSA9IHsKKwkubmFtZSA9ICJDTVQiLAorCS5jaGFubmVsX29mZnNldCA9IDB4NjAsCisJLnRpbWVyX2JpdCA9IDUsCisJLmNsayA9ICJjbXQwIiwKKwkuY2xvY2tldmVudF9yYXRpbmcgPSAxMjUsCisJLmNsb2Nrc291cmNlX3JhdGluZyA9IDIwMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY210X3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLm5hbWUJPSAiQ01UIiwKKwkJLnN0YXJ0CT0gMHgwNDRhMDA2MCwKKwkJLmVuZAk9IDB4MDQ0YTAwNmIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSAxMDQsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjbXRfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaF9jbXQiLAorCS5pZAkJPSAwLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmNtdF9wbGF0Zm9ybV9kYXRhLAorCX0sCisJLnJlc291cmNlCT0gY210X3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoY210X3Jlc291cmNlcyksCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpX3BsYXRmb3JtX2RhdGFbXSA9IHsKIAl7CiAJCS5tYXBiYXNlCT0gMHhmZmUwMDAwMCwKQEAgLTIwOSw2ICsyNDIsNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNoNzcyMl9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmY210X2RldmljZSwKIAkmcnRjX2RldmljZSwKIAkmdXNiZl9kZXZpY2UsCiAJJmlpY19kZXZpY2UsCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjMuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzcyMy5jCmluZGV4IDg0OTc3MGQuLjUzMzhkYWMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzcyMy5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzcyMy5jCkBAIC0xMyw2ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfc2NpLmg+CiAjaW5jbHVkZSA8bGludXgvdWlvX2RyaXZlci5oPgorI2luY2x1ZGUgPGxpbnV4L3NoX2NtdC5oPgogI2luY2x1ZGUgPGFzbS9jbG9jay5oPgogI2luY2x1ZGUgPGFzbS9tbXpvbmUuaD4KIApAQCAtMTAwLDYgKzEwMSwzOCBAQAogCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh2ZXUxX3Jlc291cmNlcyksCiB9OwogCitzdGF0aWMgc3RydWN0IHNoX2NtdF9jb25maWcgY210X3BsYXRmb3JtX2RhdGEgPSB7CisJLm5hbWUgPSAiQ01UIiwKKwkuY2hhbm5lbF9vZmZzZXQgPSAweDYwLAorCS50aW1lcl9iaXQgPSA1LAorCS5jbGsgPSAiY210MCIsCisJLmNsb2NrZXZlbnRfcmF0aW5nID0gMTI1LAorCS5jbG9ja3NvdXJjZV9yYXRpbmcgPSAyMDAsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGNtdF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5uYW1lCT0gIkNNVCIsCisJCS5zdGFydAk9IDB4MDQ0YTAwNjAsCisJCS5lbmQJPSAweDA0NGEwMDZiLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gMTA0LAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY210X2RldmljZSA9IHsKKwkubmFtZQkJPSAic2hfY210IiwKKwkuaWQJCT0gMCwKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YQk9ICZjbXRfcGxhdGZvcm1fZGF0YSwKKwl9LAorCS5yZXNvdXJjZQk9IGNtdF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGNtdF9yZXNvdXJjZXMpLAorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaV9wbGF0Zm9ybV9kYXRhW10gPSB7CiAJewogCQkubWFwYmFzZSAgICAgICAgPSAweGZmZTAwMDAwLApAQCAtMjIxLDYgKzI1NCw3IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc2g3NzIzX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZjbXRfZGV2aWNlLAogCSZzY2lfZGV2aWNlLAogCSZydGNfZGV2aWNlLAogCSZpaWNfZGV2aWNlLApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzYzLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3NjMuYwppbmRleCAzYzViNjI5Li5iZGYwZjYxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3NjMuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3NjMuYwpAQCAtMyw3ICszLDcgQEAKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA2ICBQYXVsIE11bmR0CiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3ICBZb3NoaWhpcm8gU2hpbW9kYQotICogIENvcHlyaWdodCAoQykgMjAwOCAgTm9idWhpcm8gSXdhbWF0c3UKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgIE5vYnVoaXJvIEl3YW1hdHN1CiAgKgogICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKQEAgLTIyLDE4ICsyMiw4IEBACiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfSU8sCiAJfSwKIAlbMV0gPSB7Ci0JCS8qIFBlcmlvZCBJUlEgKi8KLQkJLnN0YXJ0CT0gMjEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JWzJdID0gewotCQkvKiBDYXJyeSBJUlEgKi8KLQkJLnN0YXJ0CT0gMjIsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JWzNdID0gewotCQkvKiBBbGFybSBJUlEgKi8KLQkJLnN0YXJ0CT0gMjAsCisJCS8qIFNoYXJlZCBQZXJpb2QvQ2FycnkvQWxhcm0gSVJRICovCisJCS5zdGFydCAgPSAyMCwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCiAJfSwKIH07CkBAIC01MCwxNyArNDAsMTcgQEAKIAkJLm1hcGJhc2UJPSAweGZmZTAwMDAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyA0MCwgNDEsIDQzLCA0MiB9LAorCQkuaXJxcwkJPSB7IDQwLCA0MCwgNDAsIDQwIH0sCiAJfSwgewogCQkubWFwYmFzZQk9IDB4ZmZlMDgwMDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSB7IDc2LCA3NywgNzksIDc4IH0sCisJCS5pcnFzCQk9IHsgNzYsIDc2LCA3NiwgNzYgfSwKIAl9LCB7CiAJCS5tYXBiYXNlCT0gMHhmZmUxMDAwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9IHsgMTA0LCAxMDUsIDEwNywgMTA2IH0sCisJCS5pcnFzCQk9IHsgMTA0LCAxMDQsIDEwNCwgMTA0IH0sCiAJfSwgewogCQkuZmxhZ3MgPSAwLAogCX0KQEAgLTE0OCw5MyArMTM4LDY1IEBACiAJSVJMX0hITEwsIElSTF9ISExILCBJUkxfSEhITCwKIAogCUlSUTAsIElSUTEsIElSUTIsIElSUTMsIElSUTQsIElSUTUsIElSUTYsIElSUTcsCi0JUlRDX0FUSSwgUlRDX1BSSSwgUlRDX0NVSSwKLQlXRFQsIFRNVTAsIFRNVTEsIFRNVTIsIFRNVTJfVElDUEksCi0JSFVESSwgTENEQywKLQlETUFDMF9ETUlOVDAsIERNQUMwX0RNSU5UMSwgRE1BQzBfRE1JTlQyLCBETUFDMF9ETUlOVDMsIERNQUMwX0RNQUUsCi0JU0NJRjBfRVJJLCBTQ0lGMF9SWEksIFNDSUYwX0JSSSwgU0NJRjBfVFhJLAotCURNQUMwX0RNSU5UNCwgRE1BQzBfRE1JTlQ1LAotCUlJQzAsIElJQzEsCi0JQ01ULAotCUdFSU5UMCwgR0VJTlQxLCBHRUlOVDIsCi0JSEFDLAotCVBDSVNFUlIsIFBDSUlOVEEsIFBDSUlOVEIsIFBDSUlOVEMsIFBDSUlOVEQsCi0JUENJRVJSLCBQQ0lQV0QzLCBQQ0lQV0QyLCBQQ0lQV0QxLCBQQ0lQV0QwLAotCVNUSUYwLCBTVElGMSwKLQlTQ0lGMV9FUkksIFNDSUYxX1JYSSwgU0NJRjFfQlJJLCBTQ0lGMV9UWEksCi0JU0lPRjAsIFNJT0YxLCBTSU9GMiwKLQlVU0JILCBVU0JGSTAsIFVTQkZJMSwKLQlUUFUsIFBDQywKLQlNTUNJRl9GU1RBVCwgTU1DSUZfVFJBTiwgTU1DSUZfRVJSLCBNTUNJRl9GUkRZLAotCVNJTV9FUkksIFNJTV9SWEksIFNJTV9UWEksIFNJTV9URU5ELAorCVJUQywgV0RULCBUTVUwLCBUTVUxLCBUTVUyLCBUTVUyX1RJQ1BJLAorCUhVREksIExDREMsIERNQUMsIFNDSUYwLCBJSUMwLCBJSUMxLCBDTVQsIEdFVEhFUiwgSEFDLAorCVBDSVNFUlIsIFBDSUlOVEEsIFBDSUlOVEIsIFBDSUlOVEMsIFBDSUlOVEQsIFBDSUM1LAorCVNUSUYwLCBTVElGMSwgU0NJRjEsIFNJT0YwLCBTSU9GMSwgU0lPRjIsCisJVVNCSCwgVVNCRiwgVFBVLCBQQ0MsIE1NQ0lGLCBTSU0sCiAJVE1VMywgVE1VNCwgVE1VNSwgQURDLCBTU0kwLCBTU0kxLCBTU0kyLCBTU0kzLAotCVNDSUYyX0VSSSwgU0NJRjJfUlhJLCBTQ0lGMl9CUkksIFNDSUYyX1RYSSwKLQlHUElPX0NIMCwgR1BJT19DSDEsIEdQSU9fQ0gyLCBHUElPX0NIMywKKwlTQ0lGMiwgR1BJTywKIAogCS8qIGludGVycnVwdCBncm91cHMgKi8KIAotCVRNVTAxMiwgVE1VMzQ1LCBSVEMsIERNQUMsIFNDSUYwLCBHRVRIRVIsIFBDSUM1LAotCVNDSUYxLCBVU0JGLCBNTUNJRiwgU0lNLCBTQ0lGMiwgR1BJTywKKwlUTVUwMTIsIFRNVTM0NSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaW50Y192ZWN0IHZlY3RvcnNbXSBfX2luaXRkYXRhID0gewotCUlOVENfVkVDVChSVENfQVRJLCAweDQ4MCksIElOVENfVkVDVChSVENfUFJJLCAweDRhMCksCi0JSU5UQ19WRUNUKFJUQ19DVUksIDB4NGMwKSwKKwlJTlRDX1ZFQ1QoUlRDLCAweDQ4MCksIElOVENfVkVDVChSVEMsIDB4NGEwKSwKKwlJTlRDX1ZFQ1QoUlRDLCAweDRjMCksCiAJSU5UQ19WRUNUKFdEVCwgMHg1NjApLCBJTlRDX1ZFQ1QoVE1VMCwgMHg1ODApLAogCUlOVENfVkVDVChUTVUxLCAweDVhMCksIElOVENfVkVDVChUTVUyLCAweDVjMCksCiAJSU5UQ19WRUNUKFRNVTJfVElDUEksIDB4NWUwKSwgSU5UQ19WRUNUKEhVREksIDB4NjAwKSwKIAlJTlRDX1ZFQ1QoTENEQywgMHg2MjApLAotCUlOVENfVkVDVChETUFDMF9ETUlOVDAsIDB4NjQwKSwgSU5UQ19WRUNUKERNQUMwX0RNSU5UMSwgMHg2NjApLAotCUlOVENfVkVDVChETUFDMF9ETUlOVDIsIDB4NjgwKSwgSU5UQ19WRUNUKERNQUMwX0RNSU5UMywgMHg2YTApLAotCUlOVENfVkVDVChETUFDMF9ETUFFLCAweDZjMCksCi0JSU5UQ19WRUNUKFNDSUYwX0VSSSwgMHg3MDApLCBJTlRDX1ZFQ1QoU0NJRjBfUlhJLCAweDcyMCksCi0JSU5UQ19WRUNUKFNDSUYwX0JSSSwgMHg3NDApLCBJTlRDX1ZFQ1QoU0NJRjBfVFhJLCAweDc2MCksCi0JSU5UQ19WRUNUKERNQUMwX0RNSU5UNCwgMHg3ODApLCBJTlRDX1ZFQ1QoRE1BQzBfRE1JTlQ1LCAweDdhMCksCisJSU5UQ19WRUNUKERNQUMsIDB4NjQwKSwgSU5UQ19WRUNUKERNQUMsIDB4NjYwKSwKKwlJTlRDX1ZFQ1QoRE1BQywgMHg2ODApLCBJTlRDX1ZFQ1QoRE1BQywgMHg2YTApLAorCUlOVENfVkVDVChETUFDLCAweDZjMCksCisJSU5UQ19WRUNUKFNDSUYwLCAweDcwMCksIElOVENfVkVDVChTQ0lGMCwgMHg3MjApLAorCUlOVENfVkVDVChTQ0lGMCwgMHg3NDApLCBJTlRDX1ZFQ1QoU0NJRjAsIDB4NzYwKSwKKwlJTlRDX1ZFQ1QoRE1BQywgMHg3ODApLCBJTlRDX1ZFQ1QoRE1BQywgMHg3YTApLAogCUlOVENfVkVDVChJSUMwLCAweDhBMCksIElOVENfVkVDVChJSUMxLCAweDhDMCksCi0JSU5UQ19WRUNUKENNVCwgMHg5MDApLCBJTlRDX1ZFQ1QoR0VJTlQwLCAweDkyMCksCi0JSU5UQ19WRUNUKEdFSU5UMSwgMHg5NDApLCBJTlRDX1ZFQ1QoR0VJTlQyLCAweDk2MCksCisJSU5UQ19WRUNUKENNVCwgMHg5MDApLCBJTlRDX1ZFQ1QoR0VUSEVSLCAweDkyMCksCisJSU5UQ19WRUNUKEdFVEhFUiwgMHg5NDApLCBJTlRDX1ZFQ1QoR0VUSEVSLCAweDk2MCksCiAJSU5UQ19WRUNUKEhBQywgMHg5ODApLAogCUlOVENfVkVDVChQQ0lTRVJSLCAweGEwMCksIElOVENfVkVDVChQQ0lJTlRBLCAweGEyMCksCiAJSU5UQ19WRUNUKFBDSUlOVEIsIDB4YTQwKSwgSU5UQ19WRUNUKFBDSUlOVEMsIDB4YTYwKSwKLQlJTlRDX1ZFQ1QoUENJSU5URCwgMHhhODApLCBJTlRDX1ZFQ1QoUENJRVJSLCAweGFhMCksCi0JSU5UQ19WRUNUKFBDSVBXRDMsIDB4YWMwKSwgSU5UQ19WRUNUKFBDSVBXRDIsIDB4YWUwKSwKLQlJTlRDX1ZFQ1QoUENJUFdEMSwgMHhiMDApLCBJTlRDX1ZFQ1QoUENJUFdEMCwgMHhiMjApLAorCUlOVENfVkVDVChQQ0lJTlRELCAweGE4MCksIElOVENfVkVDVChQQ0lDNSwgMHhhYTApLAorCUlOVENfVkVDVChQQ0lDNSwgMHhhYzApLCBJTlRDX1ZFQ1QoUENJQzUsIDB4YWUwKSwKKwlJTlRDX1ZFQ1QoUENJQzUsIDB4YjAwKSwgSU5UQ19WRUNUKFBDSUM1LCAweGIyMCksCiAJSU5UQ19WRUNUKFNUSUYwLCAweGI0MCksIElOVENfVkVDVChTVElGMSwgMHhiNjApLAotCUlOVENfVkVDVChTQ0lGMV9FUkksIDB4YjgwKSwgSU5UQ19WRUNUKFNDSUYxX1JYSSwgMHhiYTApLAotCUlOVENfVkVDVChTQ0lGMV9CUkksIDB4YmMwKSwgSU5UQ19WRUNUKFNDSUYxX1RYSSwgMHhiZTApLAorCUlOVENfVkVDVChTQ0lGMSwgMHhiODApLCBJTlRDX1ZFQ1QoU0NJRjEsIDB4YmEwKSwKKwlJTlRDX1ZFQ1QoU0NJRjEsIDB4YmMwKSwgSU5UQ19WRUNUKFNDSUYxLCAweGJlMCksCiAJSU5UQ19WRUNUKFNJT0YwLCAweGMwMCksIElOVENfVkVDVChTSU9GMSwgMHhjMjApLAotCUlOVENfVkVDVChVU0JILCAweGM2MCksIElOVENfVkVDVChVU0JGSTAsIDB4YzgwKSwKLQlJTlRDX1ZFQ1QoVVNCRkkxLCAweGNhMCksCisJSU5UQ19WRUNUKFVTQkgsIDB4YzYwKSwgSU5UQ19WRUNUKFVTQkYsIDB4YzgwKSwKKwlJTlRDX1ZFQ1QoVVNCRiwgMHhjYTApLAogCUlOVENfVkVDVChUUFUsIDB4Y2MwKSwgSU5UQ19WRUNUKFBDQywgMHhjZTApLAotCUlOVENfVkVDVChNTUNJRl9GU1RBVCwgMHhkMDApLCBJTlRDX1ZFQ1QoTU1DSUZfVFJBTiwgMHhkMjApLAotCUlOVENfVkVDVChNTUNJRl9FUlIsIDB4ZDQwKSwgSU5UQ19WRUNUKE1NQ0lGX0ZSRFksIDB4ZDYwKSwKLQlJTlRDX1ZFQ1QoU0lNX0VSSSwgMHhkODApLCBJTlRDX1ZFQ1QoU0lNX1JYSSwgMHhkYTApLAotCUlOVENfVkVDVChTSU1fVFhJLCAweGRjMCksIElOVENfVkVDVChTSU1fVEVORCwgMHhkZTApLAorCUlOVENfVkVDVChNTUNJRiwgMHhkMDApLCBJTlRDX1ZFQ1QoTU1DSUYsIDB4ZDIwKSwKKwlJTlRDX1ZFQ1QoTU1DSUYsIDB4ZDQwKSwgSU5UQ19WRUNUKE1NQ0lGLCAweGQ2MCksCisJSU5UQ19WRUNUKFNJTSwgMHhkODApLCBJTlRDX1ZFQ1QoU0lNLCAweGRhMCksCisJSU5UQ19WRUNUKFNJTSwgMHhkYzApLCBJTlRDX1ZFQ1QoU0lNLCAweGRlMCksCiAJSU5UQ19WRUNUKFRNVTMsIDB4ZTAwKSwgSU5UQ19WRUNUKFRNVTQsIDB4ZTIwKSwKIAlJTlRDX1ZFQ1QoVE1VNSwgMHhlNDApLCBJTlRDX1ZFQ1QoQURDLCAweGU2MCksCiAJSU5UQ19WRUNUKFNTSTAsIDB4ZTgwKSwgSU5UQ19WRUNUKFNTSTEsIDB4ZWEwKSwKIAlJTlRDX1ZFQ1QoU1NJMiwgMHhlYzApLCBJTlRDX1ZFQ1QoU1NJMywgMHhlZTApLAotCUlOVENfVkVDVChTQ0lGMl9FUkksIDB4ZjAwKSwgSU5UQ19WRUNUKFNDSUYyX1JYSSwgMHhmMjApLAotCUlOVENfVkVDVChTQ0lGMl9CUkksIDB4ZjQwKSwgSU5UQ19WRUNUKFNDSUYyX1RYSSwgMHhmNjApLAotCUlOVENfVkVDVChHUElPX0NIMCwgMHhmODApLCBJTlRDX1ZFQ1QoR1BJT19DSDEsIDB4ZmEwKSwKLQlJTlRDX1ZFQ1QoR1BJT19DSDIsIDB4ZmMwKSwgSU5UQ19WRUNUKEdQSU9fQ0gzLCAweGZlMCksCisJSU5UQ19WRUNUKFNDSUYyLCAweGYwMCksIElOVENfVkVDVChTQ0lGMiwgMHhmMjApLAorCUlOVENfVkVDVChTQ0lGMiwgMHhmNDApLCBJTlRDX1ZFQ1QoU0NJRjIsIDB4ZjYwKSwKKwlJTlRDX1ZFQ1QoR1BJTywgMHhmODApLCBJTlRDX1ZFQ1QoR1BJTywgMHhmYTApLAorCUlOVENfVkVDVChHUElPLCAweGZjMCksIElOVENfVkVDVChHUElPLCAweGZlMCksCiB9OwogCiBzdGF0aWMgc3RydWN0IGludGNfZ3JvdXAgZ3JvdXBzW10gX19pbml0ZGF0YSA9IHsKIAlJTlRDX0dST1VQKFRNVTAxMiwgVE1VMCwgVE1VMSwgVE1VMiwgVE1VMl9USUNQSSksCiAJSU5UQ19HUk9VUChUTVUzNDUsIFRNVTMsIFRNVTQsIFRNVTUpLAotCUlOVENfR1JPVVAoUlRDLCBSVENfQVRJLCBSVENfUFJJLCBSVENfQ1VJKSwKLQlJTlRDX0dST1VQKERNQUMsIERNQUMwX0RNSU5UMCwgRE1BQzBfRE1JTlQxLCBETUFDMF9ETUlOVDIsCi0JCSAgIERNQUMwX0RNSU5UMywgRE1BQzBfRE1JTlQ0LCBETUFDMF9ETUlOVDUsIERNQUMwX0RNQUUpLAotCUlOVENfR1JPVVAoU0NJRjAsIFNDSUYwX0VSSSwgU0NJRjBfUlhJLCBTQ0lGMF9CUkksIFNDSUYwX1RYSSksCi0JSU5UQ19HUk9VUChHRVRIRVIsIEdFSU5UMCwgR0VJTlQxLCBHRUlOVDIpLAotCUlOVENfR1JPVVAoUENJQzUsIFBDSUVSUiwgUENJUFdEMywgUENJUFdEMiwgUENJUFdEMSwgUENJUFdEMCksCi0JSU5UQ19HUk9VUChTQ0lGMSwgU0NJRjFfRVJJLCBTQ0lGMV9SWEksIFNDSUYxX0JSSSwgU0NJRjFfVFhJKSwKLQlJTlRDX0dST1VQKFVTQkYsIFVTQkZJMCwgVVNCRkkxKSwKLQlJTlRDX0dST1VQKE1NQ0lGLCBNTUNJRl9GU1RBVCwgTU1DSUZfVFJBTiwgTU1DSUZfRVJSLCBNTUNJRl9GUkRZKSwKLQlJTlRDX0dST1VQKFNJTSwgU0lNX0VSSSwgU0lNX1JYSSwgU0lNX1RYSSwgU0lNX1RFTkQpLAotCUlOVENfR1JPVVAoU0NJRjIsIFNDSUYyX0VSSSwgU0NJRjJfUlhJLCBTQ0lGMl9CUkksIFNDSUYyX1RYSSksCi0JSU5UQ19HUk9VUChHUElPLCBHUElPX0NIMCwgR1BJT19DSDEsIEdQSU9fQ0gyLCBHUElPX0NIMyksCiB9OwogCiBzdGF0aWMgc3RydWN0IGludGNfbWFza19yZWcgbWFza19yZWdpc3RlcnNbXSBfX2luaXRkYXRhID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzgwLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODAuYwppbmRleCBmYjgyMDBjLi42ZjcyMjdjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODAuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODAuYwpAQCAtMjAsMTcgKzIwLDcgQEAKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JTywKIAl9LAogCVsxXSA9IHsKLQkJLyogUGVyaW9kIElSUSAqLwotCQkuc3RhcnQJPSAyMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLQlbMl0gPSB7Ci0JCS8qIENhcnJ5IElSUSAqLwotCQkuc3RhcnQJPSAyMiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLQlbM10gPSB7Ci0JCS8qIEFsYXJtIElSUSAqLworCQkvKiBTaGFyZWQgUGVyaW9kL0NhcnJ5L0FsYXJtIElSUSAqLwogCQkuc3RhcnQJPSAyMCwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCiAJfSwKQEAgLTQ4LDEyICszOCwxMiBAQAogCQkubWFwYmFzZQk9IDB4ZmZlMDAwMDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSB7IDQwLCA0MSwgNDMsIDQyIH0sCisJCS5pcnFzCQk9IHsgNDAsIDQwLCA0MCwgNDAgfSwKIAl9LCB7CiAJCS5tYXBiYXNlCT0gMHhmZmUxMDAwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9IHsgNzYsIDc3LCA3OSwgNzggfSwKKwkJLmlycXMJCT0geyA3NiwgNzYsIDc2LCA3NiB9LAogCX0sIHsKIAkJLmZsYWdzID0gMCwKIAl9CkBAIC05MCw4MiArODAsNTUgQEAKIAlJUkxfSEhMTCwgSVJMX0hITEgsIElSTF9ISEhMLAogCiAJSVJRMCwgSVJRMSwgSVJRMiwgSVJRMywgSVJRNCwgSVJRNSwgSVJRNiwgSVJRNywKLQlSVENfQVRJLCBSVENfUFJJLCBSVENfQ1VJLAotCVdEVCwKLQlUTVUwLCBUTVUxLCBUTVUyLCBUTVUyX1RJQ1BJLAotCUhVREksCi0JRE1BQzBfRE1JTlQwLCBETUFDMF9ETUlOVDEsIERNQUMwX0RNSU5UMiwgRE1BQzBfRE1JTlQzLCBETUFDMF9ETUFFLAotCVNDSUYwX0VSSSwgU0NJRjBfUlhJLCBTQ0lGMF9CUkksIFNDSUYwX1RYSSwKLQlETUFDMF9ETUlOVDQsIERNQUMwX0RNSU5UNSwgRE1BQzFfRE1JTlQ2LCBETUFDMV9ETUlOVDcsCi0JQ01ULCBIQUMsCi0JUENJU0VSUiwgUENJSU5UQSwgUENJSU5UQiwgUENJSU5UQywgUENJSU5URCwKLQlQQ0lFUlIsIFBDSVBXRDMsIFBDSVBXRDIsIFBDSVBXRDEsIFBDSVBXRDAsCi0JU0NJRjFfRVJJLCBTQ0lGMV9SWEksIFNDSUYxX0JSSSwgU0NJRjFfVFhJLAotCVNJT0YsIEhTUEksCi0JTU1DSUZfRlNUQVQsIE1NQ0lGX1RSQU4sIE1NQ0lGX0VSUiwgTU1DSUZfRlJEWSwKLQlETUFDMV9ETUlOVDgsIERNQUMxX0RNSU5UOSwgRE1BQzFfRE1JTlQxMCwgRE1BQzFfRE1JTlQxMSwKLQlUTVUzLCBUTVU0LCBUTVU1LAotCVNTSSwKLQlGTENUTF9GTFNURSwgRkxDVExfRkxFTkQsIEZMQ1RMX0ZMVFJRMCwgRkxDVExfRkxUUlExLAotCUdQSU9JMCwgR1BJT0kxLCBHUElPSTIsIEdQSU9JMywKKwlSVEMsIFdEVCwgVE1VMCwgVE1VMSwgVE1VMiwgVE1VMl9USUNQSSwKKwlIVURJLCBETUFDMCwgU0NJRjAsIERNQUMxLCBDTVQsIEhBQywKKwlQQ0lTRVJSLCBQQ0lJTlRBLCBQQ0lJTlRCLCBQQ0lJTlRDLCBQQ0lJTlRELCBQQ0lDNSwKKwlTQ0lGMSwgU0lPRiwgSFNQSSwgTU1DSUYsIFRNVTMsIFRNVTQsIFRNVTUsIFNTSSwgRkxDVEwsCUdQSU8sCiAKIAkvKiBpbnRlcnJ1cHQgZ3JvdXBzICovCiAKLQlSVEMsIFRNVTAxMiwgRE1BQzAsIFNDSUYwLCBETUFDNDUsIERNQUMxLAotCVBDSUM1LCBTQ0lGMSwgTU1DSUYsIFRNVTM0NSwgRkxDVEwsIEdQSU8sCisJVE1VMDEyLAlUTVUzNDUsCiB9OwogCiBzdGF0aWMgc3RydWN0IGludGNfdmVjdCB2ZWN0b3JzW10gX19pbml0ZGF0YSA9IHsKLQlJTlRDX1ZFQ1QoUlRDX0FUSSwgMHg0ODApLCBJTlRDX1ZFQ1QoUlRDX1BSSSwgMHg0YTApLAotCUlOVENfVkVDVChSVENfQ1VJLCAweDRjMCksCisJSU5UQ19WRUNUKFJUQywgMHg0ODApLCBJTlRDX1ZFQ1QoUlRDLCAweDRhMCksCisJSU5UQ19WRUNUKFJUQywgMHg0YzApLAogCUlOVENfVkVDVChXRFQsIDB4NTYwKSwKIAlJTlRDX1ZFQ1QoVE1VMCwgMHg1ODApLCBJTlRDX1ZFQ1QoVE1VMSwgMHg1YTApLAogCUlOVENfVkVDVChUTVUyLCAweDVjMCksIElOVENfVkVDVChUTVUyX1RJQ1BJLCAweDVlMCksCiAJSU5UQ19WRUNUKEhVREksIDB4NjAwKSwKLQlJTlRDX1ZFQ1QoRE1BQzBfRE1JTlQwLCAweDY0MCksIElOVENfVkVDVChETUFDMF9ETUlOVDEsIDB4NjYwKSwKLQlJTlRDX1ZFQ1QoRE1BQzBfRE1JTlQyLCAweDY4MCksIElOVENfVkVDVChETUFDMF9ETUlOVDMsIDB4NmEwKSwKLQlJTlRDX1ZFQ1QoRE1BQzBfRE1BRSwgMHg2YzApLAotCUlOVENfVkVDVChTQ0lGMF9FUkksIDB4NzAwKSwgSU5UQ19WRUNUKFNDSUYwX1JYSSwgMHg3MjApLAotCUlOVENfVkVDVChTQ0lGMF9CUkksIDB4NzQwKSwgSU5UQ19WRUNUKFNDSUYwX1RYSSwgMHg3NjApLAotCUlOVENfVkVDVChETUFDMF9ETUlOVDQsIDB4NzgwKSwgSU5UQ19WRUNUKERNQUMwX0RNSU5UNSwgMHg3YTApLAotCUlOVENfVkVDVChETUFDMV9ETUlOVDYsIDB4N2MwKSwgSU5UQ19WRUNUKERNQUMxX0RNSU5UNywgMHg3ZTApLAorCUlOVENfVkVDVChETUFDMCwgMHg2NDApLCBJTlRDX1ZFQ1QoRE1BQzAsIDB4NjYwKSwKKwlJTlRDX1ZFQ1QoRE1BQzAsIDB4NjgwKSwgSU5UQ19WRUNUKERNQUMwLCAweDZhMCksCisJSU5UQ19WRUNUKERNQUMwLCAweDZjMCksCisJSU5UQ19WRUNUKFNDSUYwLCAweDcwMCksIElOVENfVkVDVChTQ0lGMCwgMHg3MjApLAorCUlOVENfVkVDVChTQ0lGMCwgMHg3NDApLCBJTlRDX1ZFQ1QoU0NJRjAsIDB4NzYwKSwKKwlJTlRDX1ZFQ1QoRE1BQzAsIDB4NzgwKSwgSU5UQ19WRUNUKERNQUMwLCAweDdhMCksCisJSU5UQ19WRUNUKERNQUMxLCAweDdjMCksIElOVENfVkVDVChETUFDMSwgMHg3ZTApLAogCUlOVENfVkVDVChDTVQsIDB4OTAwKSwgSU5UQ19WRUNUKEhBQywgMHg5ODApLAogCUlOVENfVkVDVChQQ0lTRVJSLCAweGEwMCksIElOVENfVkVDVChQQ0lJTlRBLCAweGEyMCksCiAJSU5UQ19WRUNUKFBDSUlOVEIsIDB4YTQwKSwgSU5UQ19WRUNUKFBDSUlOVEMsIDB4YTYwKSwKLQlJTlRDX1ZFQ1QoUENJSU5URCwgMHhhODApLCBJTlRDX1ZFQ1QoUENJRVJSLCAweGFhMCksCi0JSU5UQ19WRUNUKFBDSVBXRDMsIDB4YWMwKSwgSU5UQ19WRUNUKFBDSVBXRDIsIDB4YWUwKSwKLQlJTlRDX1ZFQ1QoUENJUFdEMSwgMHhiMDApLCBJTlRDX1ZFQ1QoUENJUFdEMCwgMHhiMjApLAotCUlOVENfVkVDVChTQ0lGMV9FUkksIDB4YjgwKSwgSU5UQ19WRUNUKFNDSUYxX1JYSSwgMHhiYTApLAotCUlOVENfVkVDVChTQ0lGMV9CUkksIDB4YmMwKSwgSU5UQ19WRUNUKFNDSUYxX1RYSSwgMHhiZTApLAorCUlOVENfVkVDVChQQ0lJTlRELCAweGE4MCksIElOVENfVkVDVChQQ0lDNSwgMHhhYTApLAorCUlOVENfVkVDVChQQ0lDNSwgMHhhYzApLCBJTlRDX1ZFQ1QoUENJQzUsIDB4YWUwKSwKKwlJTlRDX1ZFQ1QoUENJQzUsIDB4YjAwKSwgSU5UQ19WRUNUKFBDSUM1LCAweGIyMCksCisJSU5UQ19WRUNUKFNDSUYxLCAweGI4MCksIElOVENfVkVDVChTQ0lGMSwgMHhiYTApLAorCUlOVENfVkVDVChTQ0lGMSwgMHhiYzApLCBJTlRDX1ZFQ1QoU0NJRjEsIDB4YmUwKSwKIAlJTlRDX1ZFQ1QoU0lPRiwgMHhjMDApLCBJTlRDX1ZFQ1QoSFNQSSwgMHhjODApLAotCUlOVENfVkVDVChNTUNJRl9GU1RBVCwgMHhkMDApLCBJTlRDX1ZFQ1QoTU1DSUZfVFJBTiwgMHhkMjApLAotCUlOVENfVkVDVChNTUNJRl9FUlIsIDB4ZDQwKSwgSU5UQ19WRUNUKE1NQ0lGX0ZSRFksIDB4ZDYwKSwKLQlJTlRDX1ZFQ1QoRE1BQzFfRE1JTlQ4LCAweGQ4MCksIElOVENfVkVDVChETUFDMV9ETUlOVDksIDB4ZGEwKSwKLQlJTlRDX1ZFQ1QoRE1BQzFfRE1JTlQxMCwgMHhkYzApLCBJTlRDX1ZFQ1QoRE1BQzFfRE1JTlQxMSwgMHhkZTApLAorCUlOVENfVkVDVChNTUNJRiwgMHhkMDApLCBJTlRDX1ZFQ1QoTU1DSUYsIDB4ZDIwKSwKKwlJTlRDX1ZFQ1QoTU1DSUYsIDB4ZDQwKSwgSU5UQ19WRUNUKE1NQ0lGLCAweGQ2MCksCisJSU5UQ19WRUNUKERNQUMxLCAweGQ4MCksIElOVENfVkVDVChETUFDMSwgMHhkYTApLAorCUlOVENfVkVDVChETUFDMSwgMHhkYzApLCBJTlRDX1ZFQ1QoRE1BQzEsIDB4ZGUwKSwKIAlJTlRDX1ZFQ1QoVE1VMywgMHhlMDApLCBJTlRDX1ZFQ1QoVE1VNCwgMHhlMjApLAogCUlOVENfVkVDVChUTVU1LCAweGU0MCksCiAJSU5UQ19WRUNUKFNTSSwgMHhlODApLAotCUlOVENfVkVDVChGTENUTF9GTFNURSwgMHhmMDApLCBJTlRDX1ZFQ1QoRkxDVExfRkxFTkQsIDB4ZjIwKSwKLQlJTlRDX1ZFQ1QoRkxDVExfRkxUUlEwLCAweGY0MCksIElOVENfVkVDVChGTENUTF9GTFRSUTEsIDB4ZjYwKSwKLQlJTlRDX1ZFQ1QoR1BJT0kwLCAweGY4MCksIElOVENfVkVDVChHUElPSTEsIDB4ZmEwKSwKLQlJTlRDX1ZFQ1QoR1BJT0kyLCAweGZjMCksIElOVENfVkVDVChHUElPSTMsIDB4ZmUwKSwKKwlJTlRDX1ZFQ1QoRkxDVEwsIDB4ZjAwKSwgSU5UQ19WRUNUKEZMQ1RMLCAweGYyMCksCisJSU5UQ19WRUNUKEZMQ1RMLCAweGY0MCksIElOVENfVkVDVChGTENUTCwgMHhmNjApLAorCUlOVENfVkVDVChHUElPLCAweGY4MCksIElOVENfVkVDVChHUElPLCAweGZhMCksCisJSU5UQ19WRUNUKEdQSU8sIDB4ZmMwKSwgSU5UQ19WRUNUKEdQSU8sIDB4ZmUwKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaW50Y19ncm91cCBncm91cHNbXSBfX2luaXRkYXRhID0gewotCUlOVENfR1JPVVAoUlRDLCBSVENfQVRJLCBSVENfUFJJLCBSVENfQ1VJKSwKIAlJTlRDX0dST1VQKFRNVTAxMiwgVE1VMCwgVE1VMSwgVE1VMiwgVE1VMl9USUNQSSksCi0JSU5UQ19HUk9VUChETUFDMCwgRE1BQzBfRE1JTlQwLCBETUFDMF9ETUlOVDEsIERNQUMwX0RNSU5UMiwKLQkJICAgRE1BQzBfRE1JTlQzLCBETUFDMF9ETUlOVDQsIERNQUMwX0RNSU5UNSwgRE1BQzBfRE1BRSksCi0JSU5UQ19HUk9VUChTQ0lGMCwgU0NJRjBfRVJJLCBTQ0lGMF9SWEksIFNDSUYwX0JSSSwgU0NJRjBfVFhJKSwKLQlJTlRDX0dST1VQKERNQUMxLCBETUFDMV9ETUlOVDYsIERNQUMxX0RNSU5UNywgRE1BQzFfRE1JTlQ4LAotCQkgICBETUFDMV9ETUlOVDksIERNQUMxX0RNSU5UMTAsIERNQUMxX0RNSU5UMTEpLAotCUlOVENfR1JPVVAoUENJQzUsIFBDSUVSUiwgUENJUFdEMywgUENJUFdEMiwgUENJUFdEMSwgUENJUFdEMCksCi0JSU5UQ19HUk9VUChTQ0lGMSwgU0NJRjFfRVJJLCBTQ0lGMV9SWEksIFNDSUYxX0JSSSwgU0NJRjFfVFhJKSwKLQlJTlRDX0dST1VQKE1NQ0lGLCBNTUNJRl9GU1RBVCwgTU1DSUZfVFJBTiwgTU1DSUZfRVJSLCBNTUNJRl9GUkRZKSwKIAlJTlRDX0dST1VQKFRNVTM0NSwgVE1VMywgVE1VNCwgVE1VNSksCi0JSU5UQ19HUk9VUChGTENUTCwgRkxDVExfRkxTVEUsIEZMQ1RMX0ZMRU5ELAotCQkgICBGTENUTF9GTFRSUTAsIEZMQ1RMX0ZMVFJRMSksCi0JSU5UQ19HUk9VUChHUElPLCBHUElPSTAsIEdQSU9JMSwgR1BJT0kyLCBHUElPSTMpLAogfTsKIAogc3RhdGljIHN0cnVjdCBpbnRjX21hc2tfcmVnIG1hc2tfcmVnaXN0ZXJzW10gX19pbml0ZGF0YSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4NS5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3Nzg1LmMKaW5kZXggMzBiYWE2My4uZDgwODAyYSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3Nzg1LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3Nzg1LmMKQEAgLTIwLDE4ICsyMCwxMyBAQAogCQkubWFwYmFzZQk9IDB4ZmZlYTAwMDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSB7IDQwLCA0MSwgNDMsIDQyIH0sCisJCS5pcnFzCQk9IHsgNDAsIDQwLCA0MCwgNDAgfSwKIAl9LCB7CiAJCS5tYXBiYXNlCT0gMHhmZmViMDAwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9IHsgNDQsIDQ1LCA0NywgNDYgfSwKLQl9LAotCi0JLyoKLQkgKiBUaGUgcmVzdCBvZiB0aGVzZSBhbGwgaGF2ZSBtdWx0aXBsZXhlZCBJUlFzCi0JICovCi0JeworCQkuaXJxcwkJPSB7IDQ0LCA0NCwgNDQsIDQ0IH0sCisJfSwgewogCQkubWFwYmFzZQk9IDB4ZmZlYzAwMDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLApAQCAtOTEsMzMgKzg2LDE5IEBACiAJSVJMNF9ISExMLCBJUkw0X0hITEgsIElSTDRfSEhITCwKIAogCUlSUTAsIElSUTEsIElSUTIsIElSUTMsIElSUTQsIElSUTUsIElSUTYsIElSUTcsCi0JV0RULAotCVRNVTAsIFRNVTEsIFRNVTIsIFRNVTJfVElDUEksCi0JSFVESSwKLQlETUFDMF9ETUlOVDAsIERNQUMwX0RNSU5UMSwgRE1BQzBfRE1JTlQyLCBETUFDMF9ETUlOVDMsCi0JRE1BQzBfRE1JTlQ0LCBETUFDMF9ETUlOVDUsIERNQUMwX0RNQUUsCi0JU0NJRjBfRVJJLCBTQ0lGMF9SWEksIFNDSUYwX0JSSSwgU0NJRjBfVFhJLAotCVNDSUYxX0VSSSwgU0NJRjFfUlhJLCBTQ0lGMV9CUkksIFNDSUYxX1RYSSwKLQlETUFDMV9ETUlOVDYsIERNQUMxX0RNSU5UNywgRE1BQzFfRE1JTlQ4LCBETUFDMV9ETUlOVDksCi0JRE1BQzFfRE1JTlQxMCwgRE1BQzFfRE1JTlQxMSwgRE1BQzFfRE1BRSwKLQlIU1BJLAorCVdEVCwgVE1VMCwgVE1VMSwgVE1VMiwgVE1VMl9USUNQSSwKKwlIVURJLCBETUFDMCwgU0NJRjAsIFNDSUYxLCBETUFDMSwgSFNQSSwKIAlTQ0lGMiwgU0NJRjMsIFNDSUY0LCBTQ0lGNSwKLQlQQ0lTRVJSLCBQQ0lJTlRBLCBQQ0lJTlRCLCBQQ0lJTlRDLCBQQ0lJTlRELAotCVBDSUVSUiwgUENJUFdEMywgUENJUFdEMiwgUENJUFdEMSwgUENJUFdEMCwKLQlTSU9GLAotCU1NQ0lGX0ZTVEFULCBNTUNJRl9UUkFOLCBNTUNJRl9FUlIsIE1NQ0lGX0ZSRFksCi0JRFUsCi0JR0RUQV9HQUNMSSwgR0RUQV9HQU1DSSwgR0RUQV9HQUVSSSwKKwlQQ0lTRVJSLCBQQ0lJTlRBLCBQQ0lJTlRCLCBQQ0lJTlRDLCBQQ0lJTlRELCBQQ0lDNSwKKwlTSU9GLCBNTUNJRiwgRFUsIEdEVEEsCiAJVE1VMywgVE1VNCwgVE1VNSwKIAlTU0kwLCBTU0kxLAogCUhBQzAsIEhBQzEsCi0JRkxDVExfRkxTVEUsIEZMQ1RMX0ZMRU5ELCBGTENUTF9GTFRSUTAsIEZMQ1RMX0ZMVFJRMSwKLQlHUElPSTAsIEdQSU9JMSwgR1BJT0kyLCBHUElPSTMsCisJRkxDVEwsIEdQSU8sCiAKIAkvKiBpbnRlcnJ1cHQgZ3JvdXBzICovCiAKLQlUTVUwMTIsIERNQUMwLCBTQ0lGMCwgU0NJRjEsIERNQUMxLAotCVBDSUM1LCBNTUNJRiwgR0RUQSwgVE1VMzQ1LCBGTENUTCwgR1BJTworCVRNVTAxMiwJVE1VMzQ1CiB9OwogCiBzdGF0aWMgc3RydWN0IGludGNfdmVjdCB2ZWN0b3JzW10gX19pbml0ZGF0YSA9IHsKQEAgLTEyNSw1NyArMTA2LDQ1IEBACiAJSU5UQ19WRUNUKFRNVTAsIDB4NTgwKSwgSU5UQ19WRUNUKFRNVTEsIDB4NWEwKSwKIAlJTlRDX1ZFQ1QoVE1VMiwgMHg1YzApLCBJTlRDX1ZFQ1QoVE1VMl9USUNQSSwgMHg1ZTApLAogCUlOVENfVkVDVChIVURJLCAweDYwMCksCi0JSU5UQ19WRUNUKERNQUMwX0RNSU5UMCwgMHg2MjApLCBJTlRDX1ZFQ1QoRE1BQzBfRE1JTlQxLCAweDY0MCksCi0JSU5UQ19WRUNUKERNQUMwX0RNSU5UMiwgMHg2NjApLCBJTlRDX1ZFQ1QoRE1BQzBfRE1JTlQzLCAweDY4MCksCi0JSU5UQ19WRUNUKERNQUMwX0RNSU5UNCwgMHg2YTApLCBJTlRDX1ZFQ1QoRE1BQzBfRE1JTlQ1LCAweDZjMCksCi0JSU5UQ19WRUNUKERNQUMwX0RNQUUsIDB4NmUwKSwKLQlJTlRDX1ZFQ1QoU0NJRjBfRVJJLCAweDcwMCksIElOVENfVkVDVChTQ0lGMF9SWEksIDB4NzIwKSwKLQlJTlRDX1ZFQ1QoU0NJRjBfQlJJLCAweDc0MCksIElOVENfVkVDVChTQ0lGMF9UWEksIDB4NzYwKSwKLQlJTlRDX1ZFQ1QoU0NJRjFfRVJJLCAweDc4MCksIElOVENfVkVDVChTQ0lGMV9SWEksIDB4N2EwKSwKLQlJTlRDX1ZFQ1QoU0NJRjFfQlJJLCAweDdjMCksIElOVENfVkVDVChTQ0lGMV9UWEksIDB4N2UwKSwKLQlJTlRDX1ZFQ1QoRE1BQzFfRE1JTlQ2LCAweDg4MCksIElOVENfVkVDVChETUFDMV9ETUlOVDcsIDB4OGEwKSwKLQlJTlRDX1ZFQ1QoRE1BQzFfRE1JTlQ4LCAweDhjMCksIElOVENfVkVDVChETUFDMV9ETUlOVDksIDB4OGUwKSwKLQlJTlRDX1ZFQ1QoRE1BQzFfRE1JTlQxMCwgMHg5MDApLCBJTlRDX1ZFQ1QoRE1BQzFfRE1JTlQxMSwgMHg5MjApLAotCUlOVENfVkVDVChETUFDMV9ETUFFLCAweDk0MCksCisJSU5UQ19WRUNUKERNQUMwLCAweDYyMCksIElOVENfVkVDVChETUFDMCwgMHg2NDApLAorCUlOVENfVkVDVChETUFDMCwgMHg2NjApLCBJTlRDX1ZFQ1QoRE1BQzAsIDB4NjgwKSwKKwlJTlRDX1ZFQ1QoRE1BQzAsIDB4NmEwKSwgSU5UQ19WRUNUKERNQUMwLCAweDZjMCksCisJSU5UQ19WRUNUKERNQUMwLCAweDZlMCksCisJSU5UQ19WRUNUKFNDSUYwLCAweDcwMCksIElOVENfVkVDVChTQ0lGMCwgMHg3MjApLAorCUlOVENfVkVDVChTQ0lGMCwgMHg3NDApLCBJTlRDX1ZFQ1QoU0NJRjAsIDB4NzYwKSwKKwlJTlRDX1ZFQ1QoU0NJRjEsIDB4NzgwKSwgSU5UQ19WRUNUKFNDSUYxLCAweDdhMCksCisJSU5UQ19WRUNUKFNDSUYxLCAweDdjMCksIElOVENfVkVDVChTQ0lGMSwgMHg3ZTApLAorCUlOVENfVkVDVChETUFDMSwgMHg4ODApLCBJTlRDX1ZFQ1QoRE1BQzEsIDB4OGEwKSwKKwlJTlRDX1ZFQ1QoRE1BQzEsIDB4OGMwKSwgSU5UQ19WRUNUKERNQUMxLCAweDhlMCksCisJSU5UQ19WRUNUKERNQUMxLCAweDkwMCksIElOVENfVkVDVChETUFDMSwgMHg5MjApLAorCUlOVENfVkVDVChETUFDMSwgMHg5NDApLAogCUlOVENfVkVDVChIU1BJLCAweDk2MCksCiAJSU5UQ19WRUNUKFNDSUYyLCAweDk4MCksIElOVENfVkVDVChTQ0lGMywgMHg5YTApLAogCUlOVENfVkVDVChTQ0lGNCwgMHg5YzApLCBJTlRDX1ZFQ1QoU0NJRjUsIDB4OWUwKSwKIAlJTlRDX1ZFQ1QoUENJU0VSUiwgMHhhMDApLCBJTlRDX1ZFQ1QoUENJSU5UQSwgMHhhMjApLAogCUlOVENfVkVDVChQQ0lJTlRCLCAweGE0MCksIElOVENfVkVDVChQQ0lJTlRDLCAweGE2MCksCi0JSU5UQ19WRUNUKFBDSUlOVEQsIDB4YTgwKSwgSU5UQ19WRUNUKFBDSUVSUiwgMHhhYTApLAotCUlOVENfVkVDVChQQ0lQV0QzLCAweGFjMCksIElOVENfVkVDVChQQ0lQV0QyLCAweGFlMCksCi0JSU5UQ19WRUNUKFBDSVBXRDEsIDB4YjAwKSwgSU5UQ19WRUNUKFBDSVBXRDAsIDB4YjIwKSwKKwlJTlRDX1ZFQ1QoUENJSU5URCwgMHhhODApLCBJTlRDX1ZFQ1QoUENJQzUsIDB4YWEwKSwKKwlJTlRDX1ZFQ1QoUENJQzUsIDB4YWMwKSwgSU5UQ19WRUNUKFBDSUM1LCAweGFlMCksCisJSU5UQ19WRUNUKFBDSUM1LCAweGIwMCksIElOVENfVkVDVChQQ0lDNSwgMHhiMjApLAogCUlOVENfVkVDVChTSU9GLCAweGMwMCksCi0JSU5UQ19WRUNUKE1NQ0lGX0ZTVEFULCAweGQwMCksIElOVENfVkVDVChNTUNJRl9UUkFOLCAweGQyMCksCi0JSU5UQ19WRUNUKE1NQ0lGX0VSUiwgMHhkNDApLCBJTlRDX1ZFQ1QoTU1DSUZfRlJEWSwgMHhkNjApLAorCUlOVENfVkVDVChNTUNJRiwgMHhkMDApLCBJTlRDX1ZFQ1QoTU1DSUYsIDB4ZDIwKSwKKwlJTlRDX1ZFQ1QoTU1DSUYsIDB4ZDQwKSwgSU5UQ19WRUNUKE1NQ0lGLCAweGQ2MCksCiAJSU5UQ19WRUNUKERVLCAweGQ4MCksCi0JSU5UQ19WRUNUKEdEVEFfR0FDTEksIDB4ZGEwKSwgSU5UQ19WRUNUKEdEVEFfR0FNQ0ksIDB4ZGMwKSwKLQlJTlRDX1ZFQ1QoR0RUQV9HQUVSSSwgMHhkZTApLAorCUlOVENfVkVDVChHRFRBLCAweGRhMCksIElOVENfVkVDVChHRFRBLCAweGRjMCksCisJSU5UQ19WRUNUKEdEVEEsIDB4ZGUwKSwKIAlJTlRDX1ZFQ1QoVE1VMywgMHhlMDApLCBJTlRDX1ZFQ1QoVE1VNCwgMHhlMjApLAogCUlOVENfVkVDVChUTVU1LCAweGU0MCksCiAJSU5UQ19WRUNUKFNTSTAsIDB4ZTgwKSwgSU5UQ19WRUNUKFNTSTEsIDB4ZWEwKSwKIAlJTlRDX1ZFQ1QoSEFDMCwgMHhlYzApLCBJTlRDX1ZFQ1QoSEFDMSwgMHhlZTApLAotCUlOVENfVkVDVChGTENUTF9GTFNURSwgMHhmMDApLCBJTlRDX1ZFQ1QoRkxDVExfRkxFTkQsIDB4ZjIwKSwKLQlJTlRDX1ZFQ1QoRkxDVExfRkxUUlEwLCAweGY0MCksIElOVENfVkVDVChGTENUTF9GTFRSUTEsIDB4ZjYwKSwKLQlJTlRDX1ZFQ1QoR1BJT0kwLCAweGY4MCksIElOVENfVkVDVChHUElPSTEsIDB4ZmEwKSwKLQlJTlRDX1ZFQ1QoR1BJT0kyLCAweGZjMCksIElOVENfVkVDVChHUElPSTMsIDB4ZmUwKSwKKwlJTlRDX1ZFQ1QoRkxDVEwsIDB4ZjAwKSwgSU5UQ19WRUNUKEZMQ1RMLCAweGYyMCksCisJSU5UQ19WRUNUKEZMQ1RMLCAweGY0MCksIElOVENfVkVDVChGTENUTCwgMHhmNjApLAorCUlOVENfVkVDVChHUElPLCAweGY4MCksIElOVENfVkVDVChHUElPLCAweGZhMCksCisJSU5UQ19WRUNUKEdQSU8sIDB4ZmMwKSwgSU5UQ19WRUNUKEdQSU8sIDB4ZmUwKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaW50Y19ncm91cCBncm91cHNbXSBfX2luaXRkYXRhID0gewogCUlOVENfR1JPVVAoVE1VMDEyLCBUTVUwLCBUTVUxLCBUTVUyLCBUTVUyX1RJQ1BJKSwKLQlJTlRDX0dST1VQKERNQUMwLCBETUFDMF9ETUlOVDAsIERNQUMwX0RNSU5UMSwgRE1BQzBfRE1JTlQyLAotCQkgICBETUFDMF9ETUlOVDMsIERNQUMwX0RNSU5UNCwgRE1BQzBfRE1JTlQ1LCBETUFDMF9ETUFFKSwKLQlJTlRDX0dST1VQKFNDSUYwLCBTQ0lGMF9FUkksIFNDSUYwX1JYSSwgU0NJRjBfQlJJLCBTQ0lGMF9UWEkpLAotCUlOVENfR1JPVVAoU0NJRjEsIFNDSUYxX0VSSSwgU0NJRjFfUlhJLCBTQ0lGMV9CUkksIFNDSUYxX1RYSSksCi0JSU5UQ19HUk9VUChETUFDMSwgRE1BQzFfRE1JTlQ2LCBETUFDMV9ETUlOVDcsIERNQUMxX0RNSU5UOCwKLQkJICAgRE1BQzFfRE1JTlQ5LCBETUFDMV9ETUlOVDEwLCBETUFDMV9ETUlOVDExLCBETUFDMV9ETUFFKSwKLQlJTlRDX0dST1VQKFBDSUM1LCBQQ0lFUlIsIFBDSVBXRDMsIFBDSVBXRDIsIFBDSVBXRDEsIFBDSVBXRDApLAotCUlOVENfR1JPVVAoTU1DSUYsIE1NQ0lGX0ZTVEFULCBNTUNJRl9UUkFOLCBNTUNJRl9FUlIsIE1NQ0lGX0ZSRFkpLAotCUlOVENfR1JPVVAoR0RUQSwgR0RUQV9HQUNMSSwgR0RUQV9HQU1DSSwgR0RUQV9HQUVSSSksCiAJSU5UQ19HUk9VUChUTVUzNDUsIFRNVTMsIFRNVTQsIFRNVTUpLAotCUlOVENfR1JPVVAoRkxDVEwsIEZMQ1RMX0ZMU1RFLCBGTENUTF9GTEVORCwKLQkJICAgRkxDVExfRkxUUlEwLCBGTENUTF9GTFRSUTEpLAotCUlOVENfR1JPVVAoR1BJTywgR1BJT0kwLCBHUElPSTEsIEdQSU9JMiwgR1BJT0kzKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaW50Y19tYXNrX3JlZyBtYXNrX3JlZ2lzdGVyc1tdIF9faW5pdGRhdGEgPSB7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODYuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4Ni5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhNDdlMWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODYuYwpAQCAtMCwwICsxLDQ5MCBAQAorLyoKKyAqIFNINzc4NiBTZXR1cAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSAgUmVuZXNhcyBTb2x1dGlvbnMgQ29ycC4KKyAqIEt1bmlub3JpIE1vcmltb3RvIDxtb3JpbW90by5rdW5pbm9yaUByZW5lc2FzLmNvbT4KKyAqCisgKiBCYXNlZCBvbiBTSDc3ODUgU2V0dXAKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA3ICBQYXVsIE11bmR0CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX3NjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGFzbS9tbXpvbmUuaD4KKworc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaV9wbGF0Zm9ybV9kYXRhW10gPSB7CisJeworCQkubWFwYmFzZQk9IDB4ZmZlYTAwMDAsCisJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKKwkJLnR5cGUJCT0gUE9SVF9TQ0lGLAorCQkuaXJxcwkJPSB7IDQwLCA0MSwgNDMsIDQyIH0sCisJfSwKKwkvKgorCSAqIFRoZSByZXN0IG9mIHRoZXNlIGFsbCBoYXZlIG11bHRpcGxleGVkIElSUXMKKwkgKi8KKwl7CisJCS5tYXBiYXNlCT0gMHhmZmViMDAwMCwKKwkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAorCQkudHlwZQkJPSBQT1JUX1NDSUYsCisJCS5pcnFzCQk9IHsgNDQsIDQ0LCA0NCwgNDQgfSwKKwl9LCB7CisJCS5tYXBiYXNlCT0gMHhmZmVjMDAwMCwKKwkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAorCQkudHlwZQkJPSBQT1JUX1NDSUYsCisJCS5pcnFzCQk9IHsgNTAsIDUwLCA1MCwgNTAgfSwKKwl9LCB7CisJCS5tYXBiYXNlCT0gMHhmZmVkMDAwMCwKKwkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAorCQkudHlwZQkJPSBQT1JUX1NDSUYsCisJCS5pcnFzCQk9IHsgNTEsIDUxLCA1MSwgNTEgfSwKKwl9LCB7CisJCS5tYXBiYXNlCT0gMHhmZmVlMDAwMCwKKwkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAorCQkudHlwZQkJPSBQT1JUX1NDSUYsCisJCS5pcnFzCQk9IHsgNTIsIDUyLCA1MiwgNTIgfSwKKwl9LCB7CisJCS5tYXBiYXNlCT0gMHhmZmVmMDAwMCwKKwkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAorCQkudHlwZQkJPSBQT1JUX1NDSUYsCisJCS5pcnFzCQk9IHsgNTMsIDUzLCA1MywgNTMgfSwKKwl9LCB7CisJCS5mbGFncyA9IDAsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NpX2RldmljZSA9IHsKKwkubmFtZQkJPSAic2gtc2NpIiwKKwkuaWQJCT0gLTEsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gc2NpX3BsYXRmb3JtX2RhdGEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdXNiX29oY2lfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSAweGZmZTcwNDAwLAorCQkuZW5kCT0gMHhmZmU3MDRmZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IDc3LAorCQkuZW5kCT0gNzcsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgdTY0IHVzYl9vaGNpX2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHVzYl9vaGNpX2RldmljZSA9IHsKKwkubmFtZQkJPSAic2hfb2hjaSIsCisJLmlkCQk9IC0xLAorCS5kZXYgPSB7CisJCS5kbWFfbWFzawkJPSAmdXNiX29oY2lfZG1hX21hc2ssCisJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCisJfSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodXNiX29oY2lfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSB1c2Jfb2hjaV9yZXNvdXJjZXMsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc2g3Nzg2X2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZzY2lfZGV2aWNlLAorCSZ1c2Jfb2hjaV9kZXZpY2UsCit9OworCisKKy8qCisgKiBQbGVhc2UgY2FsbCB0aGlzIGZ1bmN0aW9uIGlmIHlvdXIgcGxhdGZvcm0gYm9hcmQKKyAqIHVzZSBleHRlcm5hbCBjbG9jayBmb3IgVVNCCisgKiAqLworI2RlZmluZSBVU0JDVEwwCQkweGZmZTcwODU4CisjZGVmaW5lIENMT0NLX01PREVfTUFTSyAweGZmZmZmZjdmCisjZGVmaW5lIEVYVF9DTE9DS19NT0RFICAweDAwMDAwMDgwCit2b2lkIF9faW5pdCBzaDc3ODZfdXNiX3VzZV9leGNsb2NrKHZvaWQpCit7CisJdTMyIHZhbCA9IF9fcmF3X3JlYWRsKFVTQkNUTDApICYgQ0xPQ0tfTU9ERV9NQVNLOworCV9fcmF3X3dyaXRlbCh2YWwgfCBFWFRfQ0xPQ0tfTU9ERSwgVVNCQ1RMMCk7Cit9CisKKyNkZWZpbmUgVVNCSU5JVFJFRzEJMHhmZmU3MDA5NAorI2RlZmluZSBVU0JJTklUUkVHMgkweGZmZTcwMDljCisjZGVmaW5lIFVTQklOSVRWQUwxCTB4MDBmZjAwNDAKKyNkZWZpbmUgVVNCSU5JVFZBTDIJMHgwMDAwMDAwMQorCisjZGVmaW5lIFVTQlBDVEwxCTB4ZmZlNzA4MDQKKyNkZWZpbmUgVVNCU1QJCTB4ZmZlNzA4MDgKKyNkZWZpbmUgUEhZX0VOQgkJMHgwMDAwMDAwMQorI2RlZmluZSBQTExfRU5CCQkweDAwMDAwMDAyCisjZGVmaW5lIFBIWV9SU1QJCTB4MDAwMDAwMDQKKyNkZWZpbmUgQUNUX1BMTF9TVEFUVVMJMHhjMDAwMDAwMAorc3RhdGljIHZvaWQgX19pbml0IHNoNzc4Nl91c2Jfc2V0dXAodm9pZCkKK3sKKwlpbnQgaSA9IDEwMDAwMDA7CisKKwkvKgorCSAqIFVTQiBpbml0aWFsIHNldHRpbmdzCisJICoKKwkgKiBUaGUgZm9sbG93aW5nIHNldHRpbmdzIGFyZSBuZWNlc3NhcnkKKwkgKiBmb3IgdXNpbmcgdGhlIFVTQiBtb2R1bGVzLgorCSAqCisJICogc2VlICJVU0IgSW5pdGFsIFNldHRpbmdzIiBmb3IgZGV0YWlsCisJICovCisJX19yYXdfd3JpdGVsKFVTQklOSVRWQUwxLCBVU0JJTklUUkVHMSk7CisJX19yYXdfd3JpdGVsKFVTQklOSVRWQUwyLCBVU0JJTklUUkVHMik7CisKKwkvKgorCSAqIFNldCB0aGUgUEhZIGFuZCBQTEwgZW5hYmxlIGJpdAorCSAqLworCV9fcmF3X3dyaXRlbChQSFlfRU5CIHwgUExMX0VOQiwgVVNCUENUTDEpOworCXdoaWxlIChpLS0gJiYKKwkgICAgICAgKChfX3Jhd19yZWFkbChVU0JTVCkgJiBBQ1RfUExMX1NUQVRVUykgIT0gQUNUX1BMTF9TVEFUVVMpKQorCQljcHVfcmVsYXgoKTsKKworCWlmIChpKSB7CisJCS8qIFNldCB0aGUgUEhZIFJTVCBiaXQgKi8KKwkJX19yYXdfd3JpdGVsKFBIWV9FTkIgfCBQTExfRU5CIHwgUEhZX1JTVCwgVVNCUENUTDEpOworCQlwcmludGsoS0VSTl9JTkZPICJzaDc3ODYgdXNiIHNldHVwIGRvbmVcbiIpOworCX0KK30KKworc3RhdGljIGludCBfX2luaXQgc2g3Nzg2X2RldmljZXNfc2V0dXAodm9pZCkKK3sKKwlzaDc3ODZfdXNiX3NldHVwKCk7CisJcmV0dXJuIHBsYXRmb3JtX2FkZF9kZXZpY2VzKHNoNzc4Nl9kZXZpY2VzLAorCQkJCSAgICBBUlJBWV9TSVpFKHNoNzc4Nl9kZXZpY2VzKSk7Cit9CitkZXZpY2VfaW5pdGNhbGwoc2g3Nzg2X2RldmljZXNfc2V0dXApOworCitlbnVtIHsKKwlVTlVTRUQgPSAwLAorCisJLyogaW50ZXJydXB0IHNvdXJjZXMgKi8KKworCUlSTDBfTExMTCwgSVJMMF9MTExILCBJUkwwX0xMSEwsIElSTDBfTExISCwKKwlJUkwwX0xITEwsIElSTDBfTEhMSCwgSVJMMF9MSEhMLCBJUkwwX0xISEgsCisJSVJMMF9ITExMLCBJUkwwX0hMTEgsIElSTDBfSExITCwgSVJMMF9ITEhILAorCUlSTDBfSEhMTCwgSVJMMF9ISExILCBJUkwwX0hISEwsCisKKwlJUkw0X0xMTEwsIElSTDRfTExMSCwgSVJMNF9MTEhMLCBJUkw0X0xMSEgsCisJSVJMNF9MSExMLCBJUkw0X0xITEgsIElSTDRfTEhITCwgSVJMNF9MSEhILAorCUlSTDRfSExMTCwgSVJMNF9ITExILCBJUkw0X0hMSEwsIElSTDRfSExISCwKKwlJUkw0X0hITEwsIElSTDRfSEhMSCwgSVJMNF9ISEhMLAorCisJSVJRMCwgSVJRMSwgSVJRMiwgSVJRMywgSVJRNCwgSVJRNSwgSVJRNiwgSVJRNywKKwlXRFQsCisJVE1VMF8wLCBUTVUwXzEsIFRNVTBfMiwgVE1VMF8zLAorCVRNVTFfMCwgVE1VMV8xLCBUTVUxXzIsCisJRE1BQzBfMCwgRE1BQzBfMSwgRE1BQzBfMiwgRE1BQzBfMywgRE1BQzBfNCwgRE1BQzBfNSwgRE1BQzBfNiwKKwlIVURJMSwgSFVESTAsCisJRE1BQzFfMCwgRE1BQzFfMSwgRE1BQzFfMiwgRE1BQzFfMywKKwlIUEJfMCwgSFBCXzEsIEhQQl8yLAorCVNDSUYwXzAsIFNDSUYwXzEsIFNDSUYwXzIsIFNDSUYwXzMsCisJU0NJRjEsCisJVE1VMiwgVE1VMywKKwlTQ0lGMiwgU0NJRjMsIFNDSUY0LCBTQ0lGNSwKKwlFdGhfMCwgRXRoXzEsCisJUENJZUMwXzAsIFBDSWVDMF8xLCBQQ0llQzBfMiwKKwlQQ0llQzFfMCwgUENJZUMxXzEsIFBDSWVDMV8yLAorCVVTQiwKKwlJMkMwLCBJMkMxLAorCURVLAorCVNTSTAsIFNTSTEsIFNTSTIsIFNTSTMsCisJUENJZUMyXzAsIFBDSWVDMl8xLCBQQ0llQzJfMiwKKwlIQUMwLCBIQUMxLAorCUZMQ1RMLAorCUhTUEksCisJR1BJTzAsIEdQSU8xLAorCVRoZXJtYWwsCisJSU5UQzAsIElOVEMxLCBJTlRDMiwgSU5UQzMsIElOVEM0LCBJTlRDNSwgSU5UQzYsIElOVEM3LAorCisJLyogaW50ZXJydXB0IGdyb3VwcyAqLworfTsKKworc3RhdGljIHN0cnVjdCBpbnRjX3ZlY3QgdmVjdG9yc1tdIF9faW5pdGRhdGEgPSB7CisJSU5UQ19WRUNUKFdEVCwgMHgzZTApLAorCUlOVENfVkVDVChUTVUwXzAsIDB4NDAwKSwgSU5UQ19WRUNUKFRNVTBfMSwgMHg0MjApLAorCUlOVENfVkVDVChUTVUwXzIsIDB4NDQwKSwgSU5UQ19WRUNUKFRNVTBfMywgMHg0NjApLAorCUlOVENfVkVDVChUTVUxXzAsIDB4NDgwKSwgSU5UQ19WRUNUKFRNVTFfMSwgMHg0YTApLAorCUlOVENfVkVDVChUTVUxXzIsIDB4NGMwKSwKKwlJTlRDX1ZFQ1QoRE1BQzBfMCwgMHg1MDApLCBJTlRDX1ZFQ1QoRE1BQzBfMSwgMHg1MjApLAorCUlOVENfVkVDVChETUFDMF8yLCAweDU0MCksIElOVENfVkVDVChETUFDMF8zLCAweDU2MCksCisJSU5UQ19WRUNUKERNQUMwXzQsIDB4NTgwKSwgSU5UQ19WRUNUKERNQUMwXzUsIDB4NWEwKSwKKwlJTlRDX1ZFQ1QoRE1BQzBfNiwgMHg1YzApLAorCUlOVENfVkVDVChIVURJMSwgMHg1ZTApLCBJTlRDX1ZFQ1QoSFVESTAsIDB4NjAwKSwKKwlJTlRDX1ZFQ1QoRE1BQzFfMCwgMHg2MjApLCBJTlRDX1ZFQ1QoRE1BQzFfMSwgMHg2NDApLAorCUlOVENfVkVDVChETUFDMV8yLCAweDY2MCksIElOVENfVkVDVChETUFDMV8zLCAweDY4MCksCisJSU5UQ19WRUNUKEhQQl8wLCAweDZhMCksIElOVENfVkVDVChIUEJfMSwgMHg2YzApLAorCUlOVENfVkVDVChIUEJfMiwgMHg2ZTApLAorCUlOVENfVkVDVChTQ0lGMF8wLCAweDcwMCksIElOVENfVkVDVChTQ0lGMF8xLCAweDcyMCksCisJSU5UQ19WRUNUKFNDSUYwXzIsIDB4NzQwKSwgSU5UQ19WRUNUKFNDSUYwXzMsIDB4NzYwKSwKKwlJTlRDX1ZFQ1QoU0NJRjEsIDB4NzgwKSwKKwlJTlRDX1ZFQ1QoVE1VMiwgMHg3YTApLCBJTlRDX1ZFQ1QoVE1VMywgMHg3YzApLAorCUlOVENfVkVDVChTQ0lGMiwgMHg4NDApLCBJTlRDX1ZFQ1QoU0NJRjMsIDB4ODYwKSwKKwlJTlRDX1ZFQ1QoU0NJRjQsIDB4ODgwKSwgSU5UQ19WRUNUKFNDSUY1LCAweDhhMCksCisJSU5UQ19WRUNUKEV0aF8wLCAweDhjMCksIElOVENfVkVDVChFdGhfMSwgMHg4ZTApLAorCUlOVENfVkVDVChQQ0llQzBfMCwgMHhhZTApLCBJTlRDX1ZFQ1QoUENJZUMwXzEsIDB4YjAwKSwKKwlJTlRDX1ZFQ1QoUENJZUMwXzIsIDB4YjIwKSwKKwlJTlRDX1ZFQ1QoUENJZUMxXzAsIDB4YjQwKSwgSU5UQ19WRUNUKFBDSWVDMV8xLCAweGI2MCksCisJSU5UQ19WRUNUKFBDSWVDMV8yLCAweGI4MCksCisJSU5UQ19WRUNUKFVTQiwgMHhiYTApLAorCUlOVENfVkVDVChJMkMwLCAweGNjMCksIElOVENfVkVDVChJMkMxLCAweGNlMCksCisJSU5UQ19WRUNUKERVLCAweGQwMCksCisJSU5UQ19WRUNUKFNTSTAsIDB4ZDIwKSwgSU5UQ19WRUNUKFNTSTEsIDB4ZDQwKSwKKwlJTlRDX1ZFQ1QoU1NJMiwgMHhkNjApLCBJTlRDX1ZFQ1QoU1NJMywgMHhkODApLAorCUlOVENfVkVDVChQQ0llQzJfMCwgMHhkYTApLCBJTlRDX1ZFQ1QoUENJZUMyXzEsIDB4ZGMwKSwKKwlJTlRDX1ZFQ1QoUENJZUMyXzIsIDB4ZGUwKSwKKwlJTlRDX1ZFQ1QoSEFDMCwgMHhlMDApLCBJTlRDX1ZFQ1QoSEFDMSwgMHhlMjApLAorCUlOVENfVkVDVChGTENUTCwgMHhlNDApLAorCUlOVENfVkVDVChIU1BJLCAweGU4MCksCisJSU5UQ19WRUNUKEdQSU8wLCAweGVhMCksIElOVENfVkVDVChHUElPMSwgMHhlYzApLAorCUlOVENfVkVDVChUaGVybWFsLCAweGVlMCksCit9OworCisvKiBGSVhNRTogTWFpbiBDUFUgc3VwcG9ydCBvbmx5IG5vdyAqLworI2lmIDEgLyogTWFpbiBDUFUgKi8KKyNkZWZpbmUgQ25JTlRNU0swCTB4ZmU0MTAwMzAKKyNkZWZpbmUgQ25JTlRNU0sxCTB4ZmU0MTAwNDAKKyNkZWZpbmUgQ25JTlRNU0tDTFIwCTB4ZmU0MTAwNTAKKyNkZWZpbmUgQ25JTlRNU0tDTFIxCTB4ZmU0MTAwNjAKKyNkZWZpbmUgQ25JTlQyTVNLUjAJMHhmZTQxMGEyMAorI2RlZmluZSBDbklOVDJNU0tSMQkweGZlNDEwYTI0CisjZGVmaW5lIENuSU5UMk1TS1IyCTB4ZmU0MTBhMjgKKyNkZWZpbmUgQ25JTlQyTVNLUjMJMHhmZTQxMGEyYworI2RlZmluZSBDbklOVDJNU0tDUjAJMHhmZTQxMGEzMAorI2RlZmluZSBDbklOVDJNU0tDUjEJMHhmZTQxMGEzNAorI2RlZmluZSBDbklOVDJNU0tDUjIJMHhmZTQxMGEzOAorI2RlZmluZSBDbklOVDJNU0tDUjMJMHhmZTQxMGEzYworI2Vsc2UgLyogU3ViIENQVSAqLworI2RlZmluZSBDbklOVE1TSzAJMHhmZTQxMDAzNAorI2RlZmluZSBDbklOVE1TSzEJMHhmZTQxMDA0NAorI2RlZmluZSBDbklOVE1TS0NMUjAJMHhmZTQxMDA1NAorI2RlZmluZSBDbklOVE1TS0NMUjEJMHhmZTQxMDA2NAorI2RlZmluZSBDbklOVDJNU0tSMAkweGZlNDEwYjIwCisjZGVmaW5lIENuSU5UMk1TS1IxCTB4ZmU0MTBiMjQKKyNkZWZpbmUgQ25JTlQyTVNLUjIJMHhmZTQxMGIyOAorI2RlZmluZSBDbklOVDJNU0tSMwkweGZlNDEwYjJjCisjZGVmaW5lIENuSU5UMk1TS0NSMAkweGZlNDEwYjMwCisjZGVmaW5lIENuSU5UMk1TS0NSMQkweGZlNDEwYjM0CisjZGVmaW5lIENuSU5UMk1TS0NSMgkweGZlNDEwYjM4CisjZGVmaW5lIENuSU5UMk1TS0NSMwkweGZlNDEwYjNjCisjZW5kaWYKKworI2RlZmluZSBJTlRNU0syCQkweGZlNDEwMDY4CisjZGVmaW5lIElOVE1TS0NMUjIJMHhmZTQxMDA2YworCitzdGF0aWMgc3RydWN0IGludGNfbWFza19yZWcgbWFza19yZWdpc3RlcnNbXSBfX2luaXRkYXRhID0geworCXsgQ25JTlRNU0swLCBDbklOVE1TS0NMUjAsIDMyLAorCSAgeyBJUlEwLCBJUlExLCBJUlEyLCBJUlEzLCBJUlE0LCBJUlE1LCBJUlE2LCBJUlE3IH0gfSwKKwl7IElOVE1TSzIsIElOVE1TS0NMUjIsIDMyLAorCSAgeyBJUkwwX0xMTEwsIElSTDBfTExMSCwgSVJMMF9MTEhMLCBJUkwwX0xMSEgsCisJICAgIElSTDBfTEhMTCwgSVJMMF9MSExILCBJUkwwX0xISEwsIElSTDBfTEhISCwKKwkgICAgSVJMMF9ITExMLCBJUkwwX0hMTEgsIElSTDBfSExITCwgSVJMMF9ITEhILAorCSAgICBJUkwwX0hITEwsIElSTDBfSEhMSCwgSVJMMF9ISEhMLCAwLAorCSAgICBJUkw0X0xMTEwsIElSTDRfTExMSCwgSVJMNF9MTEhMLCBJUkw0X0xMSEgsCisJICAgIElSTDRfTEhMTCwgSVJMNF9MSExILCBJUkw0X0xISEwsIElSTDRfTEhISCwKKwkgICAgSVJMNF9ITExMLCBJUkw0X0hMTEgsIElSTDRfSExITCwgSVJMNF9ITEhILAorCSAgICBJUkw0X0hITEwsIElSTDRfSEhMSCwgSVJMNF9ISEhMLCAwLCB9IH0sCisJeyBDbklOVDJNU0tSMCwgQ25JTlQyTVNLQ1IwICwgMzIsCisJICB7IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIFdEVCB9IH0sCisJeyBDbklOVDJNU0tSMSwgQ25JTlQyTVNLQ1IxLCAzMiwKKwkgIHsgVE1VMF8wLCBUTVUwXzEsIFRNVTBfMiwgVE1VMF8zLCBUTVUxXzAsIFRNVTFfMSwgVE1VMV8yLCAwLAorCSAgICBETUFDMF8wLCBETUFDMF8xLCBETUFDMF8yLCBETUFDMF8zLCBETUFDMF80LCBETUFDMF81LCBETUFDMF82LAorCSAgICBIVURJMSwgSFVESTAsCisJICAgIERNQUMxXzAsIERNQUMxXzEsIERNQUMxXzIsIERNQUMxXzMsCisJICAgIEhQQl8wLCBIUEJfMSwgSFBCXzIsCisJICAgIFNDSUYwXzAsIFNDSUYwXzEsIFNDSUYwXzIsIFNDSUYwXzMsCisJICAgIFNDSUYxLAorCSAgICBUTVUyLCBUTVUzLCAwLCB9IH0sCisJeyBDbklOVDJNU0tSMiwgQ25JTlQyTVNLQ1IyLCAzMiwKKwkgIHsgMCwgMCwgU0NJRjIsIFNDSUYzLCBTQ0lGNCwgU0NJRjUsCisJICAgIEV0aF8wLCBFdGhfMSwKKwkgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKwkgICAgUENJZUMwXzAsIFBDSWVDMF8xLCBQQ0llQzBfMiwKKwkgICAgUENJZUMxXzAsIFBDSWVDMV8xLCBQQ0llQzFfMiwKKwkgICAgVVNCLCAwLCAwIH0gfSwKKwl7IENuSU5UMk1TS1IzLCBDbklOVDJNU0tDUjMsIDMyLAorCSAgeyAwLCAwLCAwLCAwLCAwLCAwLAorCSAgICBJMkMwLCBJMkMxLAorCSAgICBEVSwgU1NJMCwgU1NJMSwgU1NJMiwgU1NJMywKKwkgICAgUENJZUMyXzAsIFBDSWVDMl8xLCBQQ0llQzJfMiwKKwkgICAgSEFDMCwgSEFDMSwKKwkgICAgRkxDVEwsIDAsCisJICAgIEhTUEksIEdQSU8wLCBHUElPMSwgVGhlcm1hbCwKKwkgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9IH0sCit9OworCitzdGF0aWMgc3RydWN0IGludGNfcHJpb19yZWcgcHJpb19yZWdpc3RlcnNbXSBfX2luaXRkYXRhID0geworCXsgMHhmZTQxMDAxMCwgMCwgMzIsIDQsIC8qIElOVFBSSSAqLyAgIHsgSVJRMCwgSVJRMSwgSVJRMiwgSVJRMywKKwkJCQkJCSBJUlE0LCBJUlE1LCBJUlE2LCBJUlE3IH0gfSwKKwl7IDB4ZmU0MTA4MDAsIDAsIDMyLCA4LCAvKiBJTlQyUFJJMCAqLyB7IDAsIDAsIDAsIFdEVCB9IH0sCisJeyAweGZlNDEwODA0LCAwLCAzMiwgOCwgLyogSU5UMlBSSTEgKi8geyBUTVUwXzAsIFRNVTBfMSwKKwkJCQkJCSBUTVUwXzIsIFRNVTBfMyB9IH0sCisJeyAweGZlNDEwODA4LCAwLCAzMiwgOCwgLyogSU5UMlBSSTIgKi8geyBUTVUxXzAsIFRNVTFfMSwKKwkJCQkJCSBUTVUxXzIsIDAgfSB9LAorCXsgMHhmZTQxMDgwYywgMCwgMzIsIDgsIC8qIElOVDJQUkkzICovIHsgRE1BQzBfMCwgRE1BQzBfMSwKKwkJCQkJCSBETUFDMF8yLCBETUFDMF8zIH0gfSwKKwl7IDB4ZmU0MTA4MTAsIDAsIDMyLCA4LCAvKiBJTlQyUFJJNCAqLyB7IERNQUMwXzQsIERNQUMwXzUsCisJCQkJCQkgRE1BQzBfNiwgSFVESTEgfSB9LAorCXsgMHhmZTQxMDgxNCwgMCwgMzIsIDgsIC8qIElOVDJQUkk1ICovIHsgSFVESTAsIERNQUMxXzAsCisJCQkJCQkgRE1BQzFfMSwgRE1BQzFfMiB9IH0sCisJeyAweGZlNDEwODE4LCAwLCAzMiwgOCwgLyogSU5UMlBSSTYgKi8geyBETUFDMV8zLCBIUEJfMCwKKwkJCQkJCSBIUEJfMSwgSFBCXzIgfSB9LAorCXsgMHhmZTQxMDgxYywgMCwgMzIsIDgsIC8qIElOVDJQUkk3ICovIHsgU0NJRjBfMCwgU0NJRjBfMSwKKwkJCQkJCSBTQ0lGMF8yLCBTQ0lGMF8zIH0gfSwKKwl7IDB4ZmU0MTA4MjAsIDAsIDMyLCA4LCAvKiBJTlQyUFJJOCAqLyB7IFNDSUYxLCBUTVUyLCBUTVUzLCAwIH0gfSwKKwl7IDB4ZmU0MTA4MjQsIDAsIDMyLCA4LCAvKiBJTlQyUFJJOSAqLyB7IDAsIDAsIFNDSUYyLCBTQ0lGMyB9IH0sCisJeyAweGZlNDEwODI4LCAwLCAzMiwgOCwgLyogSU5UMlBSSTEwICovIHsgU0NJRjQsIFNDSUY1LAorCQkJCQkJICBFdGhfMCwgRXRoXzEgfSB9LAorCXsgMHhmZTQxMDgyYywgMCwgMzIsIDgsIC8qIElOVDJQUkkxMSAqLyB7IDAsIDAsIDAsIDAgfSB9LAorCXsgMHhmZTQxMDgzMCwgMCwgMzIsIDgsIC8qIElOVDJQUkkxMiAqLyB7IDAsIDAsIDAsIDAgfSB9LAorCXsgMHhmZTQxMDgzNCwgMCwgMzIsIDgsIC8qIElOVDJQUkkxMyAqLyB7IDAsIDAsIDAsIDAgfSB9LAorCXsgMHhmZTQxMDgzOCwgMCwgMzIsIDgsIC8qIElOVDJQUkkxNCAqLyB7IDAsIDAsIDAsIFBDSWVDMF8wIH0gfSwKKwl7IDB4ZmU0MTA4M2MsIDAsIDMyLCA4LCAvKiBJTlQyUFJJMTUgKi8geyBQQ0llQzBfMSwgUENJZUMwXzIsCisJCQkJCQkgIFBDSWVDMV8wLCBQQ0llQzFfMSB9IH0sCisJeyAweGZlNDEwODQwLCAwLCAzMiwgOCwgLyogSU5UMlBSSTE2ICovIHsgUENJZUMxXzIsIFVTQiwgMCwgMCB9IH0sCisJeyAweGZlNDEwODQ0LCAwLCAzMiwgOCwgLyogSU5UMlBSSTE3ICovIHsgMCwgMCwgMCwgMCB9IH0sCisJeyAweGZlNDEwODQ4LCAwLCAzMiwgOCwgLyogSU5UMlBSSTE4ICovIHsgMCwgMCwgSTJDMCwgSTJDMSB9IH0sCisJeyAweGZlNDEwODRjLCAwLCAzMiwgOCwgLyogSU5UMlBSSTE5ICovIHsgRFUsIFNTSTAsIFNTSTEsIFNTSTIgfSB9LAorCXsgMHhmZTQxMDg1MCwgMCwgMzIsIDgsIC8qIElOVDJQUkkyMCAqLyB7IFNTSTMsIFBDSWVDMl8wLAorCQkJCQkJICBQQ0llQzJfMSwgUENJZUMyXzIgfSB9LAorCXsgMHhmZTQxMDg1NCwgMCwgMzIsIDgsIC8qIElOVDJQUkkyMSAqLyB7IEhBQzAsIEhBQzEsIEZMQ1RMLCAwIH0gfSwKKwl7IDB4ZmU0MTA4NTgsIDAsIDMyLCA4LCAvKiBJTlQyUFJJMjIgKi8geyBIU1BJLCBHUElPMCwKKwkJCQkJCSAgR1BJTzEsIFRoZXJtYWwgfSB9LAorCXsgMHhmZTQxMDg1YywgMCwgMzIsIDgsIC8qIElOVDJQUkkyMyAqLyB7IDAsIDAsIDAsIDAgfSB9LAorCXsgMHhmZTQxMDg2MCwgMCwgMzIsIDgsIC8qIElOVDJQUkkyNCAqLyB7IDAsIDAsIDAsIDAgfSB9LAorfTsKKworc3RhdGljIERFQ0xBUkVfSU5UQ19ERVNDKGludGNfZGVzYywgInNoNzc4NiIsIHZlY3RvcnMsIE5VTEwsCisJCQkgbWFza19yZWdpc3RlcnMsIHByaW9fcmVnaXN0ZXJzLCBOVUxMKTsKKworLyogU3VwcG9ydCBmb3IgZXh0ZXJuYWwgaW50ZXJydXB0IHBpbnMgaW4gSVJRIG1vZGUgKi8KKworc3RhdGljIHN0cnVjdCBpbnRjX3ZlY3QgdmVjdG9yc19pcnEwMTIzW10gX19pbml0ZGF0YSA9IHsKKwlJTlRDX1ZFQ1QoSVJRMCwgMHgyMDApLCBJTlRDX1ZFQ1QoSVJRMSwgMHgyNDApLAorCUlOVENfVkVDVChJUlEyLCAweDI4MCksIElOVENfVkVDVChJUlEzLCAweDJjMCksCit9OworCitzdGF0aWMgc3RydWN0IGludGNfdmVjdCB2ZWN0b3JzX2lycTQ1NjdbXSBfX2luaXRkYXRhID0geworCUlOVENfVkVDVChJUlE0LCAweDMwMCksIElOVENfVkVDVChJUlE1LCAweDM0MCksCisJSU5UQ19WRUNUKElSUTYsIDB4MzgwKSwgSU5UQ19WRUNUKElSUTcsIDB4M2MwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaW50Y19zZW5zZV9yZWcgc2Vuc2VfcmVnaXN0ZXJzW10gX19pbml0ZGF0YSA9IHsKKwl7IDB4ZmU0MTAwMWMsIDMyLCAyLCAvKiBJQ1IxICovICAgeyBJUlEwLCBJUlExLCBJUlEyLCBJUlEzLAorCQkJCQkgICAgSVJRNCwgSVJRNSwgSVJRNiwgSVJRNyB9IH0sCit9OworCitzdGF0aWMgc3RydWN0IGludGNfbWFza19yZWcgYWNrX3JlZ2lzdGVyc1tdIF9faW5pdGRhdGEgPSB7CisJeyAweGZlNDEwMDI0LCAwLCAzMiwgLyogSU5UUkVRICovCisJICB7IElSUTAsIElSUTEsIElSUTIsIElSUTMsIElSUTQsIElSUTUsIElSUTYsIElSUTcgfSB9LAorfTsKKworc3RhdGljIERFQ0xBUkVfSU5UQ19ERVNDX0FDSyhpbnRjX2Rlc2NfaXJxMDEyMywgInNoNzc4Ni1pcnEwMTIzIiwKKwkJCSAgICAgdmVjdG9yc19pcnEwMTIzLCBOVUxMLCBtYXNrX3JlZ2lzdGVycywKKwkJCSAgICAgcHJpb19yZWdpc3RlcnMsIHNlbnNlX3JlZ2lzdGVycywgYWNrX3JlZ2lzdGVycyk7CisKK3N0YXRpYyBERUNMQVJFX0lOVENfREVTQ19BQ0soaW50Y19kZXNjX2lycTQ1NjcsICJzaDc3ODYtaXJxNDU2NyIsCisJCQkgICAgIHZlY3RvcnNfaXJxNDU2NywgTlVMTCwgbWFza19yZWdpc3RlcnMsCisJCQkgICAgIHByaW9fcmVnaXN0ZXJzLCBzZW5zZV9yZWdpc3RlcnMsIGFja19yZWdpc3RlcnMpOworCisvKiBFeHRlcm5hbCBpbnRlcnJ1cHQgcGlucyBpbiBJUkwgbW9kZSAqLworCitzdGF0aWMgc3RydWN0IGludGNfdmVjdCB2ZWN0b3JzX2lybDAxMjNbXSBfX2luaXRkYXRhID0geworCUlOVENfVkVDVChJUkwwX0xMTEwsIDB4MjAwKSwgSU5UQ19WRUNUKElSTDBfTExMSCwgMHgyMjApLAorCUlOVENfVkVDVChJUkwwX0xMSEwsIDB4MjQwKSwgSU5UQ19WRUNUKElSTDBfTExISCwgMHgyNjApLAorCUlOVENfVkVDVChJUkwwX0xITEwsIDB4MjgwKSwgSU5UQ19WRUNUKElSTDBfTEhMSCwgMHgyYTApLAorCUlOVENfVkVDVChJUkwwX0xISEwsIDB4MmMwKSwgSU5UQ19WRUNUKElSTDBfTEhISCwgMHgyZTApLAorCUlOVENfVkVDVChJUkwwX0hMTEwsIDB4MzAwKSwgSU5UQ19WRUNUKElSTDBfSExMSCwgMHgzMjApLAorCUlOVENfVkVDVChJUkwwX0hMSEwsIDB4MzQwKSwgSU5UQ19WRUNUKElSTDBfSExISCwgMHgzNjApLAorCUlOVENfVkVDVChJUkwwX0hITEwsIDB4MzgwKSwgSU5UQ19WRUNUKElSTDBfSEhMSCwgMHgzYTApLAorCUlOVENfVkVDVChJUkwwX0hISEwsIDB4M2MwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaW50Y192ZWN0IHZlY3RvcnNfaXJsNDU2N1tdIF9faW5pdGRhdGEgPSB7CisJSU5UQ19WRUNUKElSTDRfTExMTCwgMHg5MDApLCBJTlRDX1ZFQ1QoSVJMNF9MTExILCAweDkyMCksCisJSU5UQ19WRUNUKElSTDRfTExITCwgMHg5NDApLCBJTlRDX1ZFQ1QoSVJMNF9MTEhILCAweDk2MCksCisJSU5UQ19WRUNUKElSTDRfTEhMTCwgMHg5ODApLCBJTlRDX1ZFQ1QoSVJMNF9MSExILCAweDlhMCksCisJSU5UQ19WRUNUKElSTDRfTEhITCwgMHg5YzApLCBJTlRDX1ZFQ1QoSVJMNF9MSEhILCAweDllMCksCisJSU5UQ19WRUNUKElSTDRfSExMTCwgMHhhMDApLCBJTlRDX1ZFQ1QoSVJMNF9ITExILCAweGEyMCksCisJSU5UQ19WRUNUKElSTDRfSExITCwgMHhhNDApLCBJTlRDX1ZFQ1QoSVJMNF9ITEhILCAweGE2MCksCisJSU5UQ19WRUNUKElSTDRfSEhMTCwgMHhhODApLCBJTlRDX1ZFQ1QoSVJMNF9ISExILCAweGFhMCksCisJSU5UQ19WRUNUKElSTDRfSEhITCwgMHhhYzApLAorfTsKKworc3RhdGljIERFQ0xBUkVfSU5UQ19ERVNDKGludGNfZGVzY19pcmwwMTIzLCAic2g3Nzg2LWlybDAxMjMiLCB2ZWN0b3JzX2lybDAxMjMsCisJCQkgTlVMTCwgbWFza19yZWdpc3RlcnMsIE5VTEwsIE5VTEwpOworCitzdGF0aWMgREVDTEFSRV9JTlRDX0RFU0MoaW50Y19kZXNjX2lybDQ1NjcsICJzaDc3ODYtaXJsNDU2NyIsIHZlY3RvcnNfaXJsNDU2NywKKwkJCSBOVUxMLCBtYXNrX3JlZ2lzdGVycywgTlVMTCwgTlVMTCk7CisKKyNkZWZpbmUgSU5UQ19JQ1IwCTB4ZmU0MTAwMDAKKyNkZWZpbmUgSU5UQ19JTlRNU0swCUNuSU5UTVNLMAorI2RlZmluZSBJTlRDX0lOVE1TSzEJQ25JTlRNU0sxCisjZGVmaW5lIElOVENfSU5UTVNLMglJTlRNU0syCisjZGVmaW5lIElOVENfSU5UTVNLQ0xSMQlDbklOVE1TS0NMUjEKKyNkZWZpbmUgSU5UQ19JTlRNU0tDTFIyCUlOVE1TS0NMUjIKKwordm9pZCBfX2luaXQgcGxhdF9pcnFfc2V0dXAodm9pZCkKK3sKKwkvKiBkaXNhYmxlIElSUTMtMCArIElSUTctNCAqLworCWN0cmxfb3V0bCgweGZmMDAwMDAwLCBJTlRDX0lOVE1TSzApOworCisJLyogZGlzYWJsZSBJUkwzLTAgKyBJUkw3LTQgKi8KKwljdHJsX291dGwoMHhjMDAwMDAwMCwgSU5UQ19JTlRNU0sxKTsKKwljdHJsX291dGwoMHhmZmZlZmZmZSwgSU5UQ19JTlRNU0syKTsKKworCS8qIHNlbGVjdCBJUkwgbW9kZSBmb3IgSVJMMy0wICsgSVJMNy00ICovCisJY3RybF9vdXRsKGN0cmxfaW5sKElOVENfSUNSMCkgJiB+MHgwMGMwMDAwMCwgSU5UQ19JQ1IwKTsKKworCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y19kZXNjKTsKK30KKwordm9pZCBfX2luaXQgcGxhdF9pcnFfc2V0dXBfcGlucyhpbnQgbW9kZSkKK3sKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIElSUV9NT0RFX0lSUTc2NTQ6CisJCS8qIHNlbGVjdCBJUlEgbW9kZSBmb3IgSVJMNy00ICovCisJCWN0cmxfb3V0bChjdHJsX2lubChJTlRDX0lDUjApIHwgMHgwMDQwMDAwMCwgSU5UQ19JQ1IwKTsKKwkJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjX2Rlc2NfaXJxNDU2Nyk7CisJCWJyZWFrOworCWNhc2UgSVJRX01PREVfSVJRMzIxMDoKKwkJLyogc2VsZWN0IElSUSBtb2RlIGZvciBJUkwzLTAgKi8KKwkJY3RybF9vdXRsKGN0cmxfaW5sKElOVENfSUNSMCkgfCAweDAwODAwMDAwLCBJTlRDX0lDUjApOworCQlyZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoJmludGNfZGVzY19pcnEwMTIzKTsKKwkJYnJlYWs7CisJY2FzZSBJUlFfTU9ERV9JUkw3NjU0OgorCQkvKiBlbmFibGUgSVJMNy00IGJ1dCBkb24ndCBwcm92aWRlIGFueSBtYXNraW5nICovCisJCWN0cmxfb3V0bCgweDQwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOworCQljdHJsX291dGwoMHgwMDAwZmZmZSwgSU5UQ19JTlRNU0tDTFIyKTsKKwkJYnJlYWs7CisJY2FzZSBJUlFfTU9ERV9JUkwzMjEwOgorCQkvKiBlbmFibGUgSVJMMC0zIGJ1dCBkb24ndCBwcm92aWRlIGFueSBtYXNraW5nICovCisJCWN0cmxfb3V0bCgweDgwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOworCQljdHJsX291dGwoMHhmZmZlMDAwMCwgSU5UQ19JTlRNU0tDTFIyKTsKKwkJYnJlYWs7CisJY2FzZSBJUlFfTU9ERV9JUkw3NjU0X01BU0s6CisJCS8qIGVuYWJsZSBJUkw3LTQgYW5kIG1hc2sgdXNpbmcgY3B1IGludGMgY29udHJvbGxlciAqLworCQljdHJsX291dGwoMHg0MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKKwkJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjX2Rlc2NfaXJsNDU2Nyk7CisJCWJyZWFrOworCWNhc2UgSVJRX01PREVfSVJMMzIxMF9NQVNLOgorCQkvKiBlbmFibGUgSVJMMC0zIGFuZCBtYXNrIHVzaW5nIGNwdSBpbnRjIGNvbnRyb2xsZXIgKi8KKwkJY3RybF9vdXRsKDB4ODAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7CisJCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y19kZXNjX2lybDAxMjMpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwl9Cit9CisKK3ZvaWQgX19pbml0IHBsYXRfbWVtX3NldHVwKHZvaWQpCit7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2htb2JpbGUvTWFrZWZpbGUgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2htb2JpbGUvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhiZmE3YwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaG1vYmlsZS9NYWtlZmlsZQpAQCAtMCwwICsxLDYgQEAKKyMKKyMgTWFrZWZpbGUgZm9yIHRoZSBMaW51eC9TdXBlckggU0gtTW9iaWxlIGJhY2tlbmRzLgorIworCisjIFBvd2VyIE1hbmFnZW1lbnQgJiBTbGVlcCBtb2RlCitvYmotJChDT05GSUdfUE0pCSs9IHBtLm8gc2xlZXAubwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NobW9iaWxlL3BtLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2htb2JpbGUvcG0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzA2N2FkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NobW9iaWxlL3BtLmMKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIGFyY2gvc2gva2VybmVsL2NwdS9zaDRhL3BtLXNoX21vYmlsZS5jCisgKgorICogUG93ZXIgbWFuYWdlbWVudCBzdXBwb3J0IGNvZGUgZm9yIFN1cGVySCBNb2JpbGUKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IE1hZ251cyBEYW1tCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CisjaW5jbHVkZSA8YXNtL3N1c3BlbmQuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorCisvKgorICogU2xlZXAgbW9kZXMgYXZhaWxhYmxlIG9uIFN1cGVySCBNb2JpbGU6CisgKgorICogU2xlZXAgbW9kZSBpcyBqdXN0IHBsYWluICJzbGVlcCIgaW5zdHJ1Y3Rpb24KKyAqIFNsZWVwIFNlbGYtUmVmcmVzaCBtb2RlIGlzIGFib3ZlIHBsdXMgUkFNIHB1dCBpbiBTZWxmLVJlZnJlc2gKKyAqIFN0YW5kYnkgU2VsZi1SZWZyZXNoIG1vZGUgaXMgYWJvdmUgcGx1cyBzdG9wcGVkIGNsb2NrcworICovCisjZGVmaW5lIFNVU1BfTU9ERV9TTEVFUAkJKFNVU1BfU0hfU0xFRVApCisjZGVmaW5lIFNVU1BfTU9ERV9TTEVFUF9TRgkoU1VTUF9TSF9TTEVFUCB8IFNVU1BfU0hfU0YpCisjZGVmaW5lIFNVU1BfTU9ERV9TVEFOREJZX1NGCShTVVNQX1NIX1NUQU5EQlkgfCBTVVNQX1NIX1NGKQorCisvKgorICogVGhlIGZvbGxvd2luZyBtb2RlcyBhcmUgbm90IHRoZXJlIHlldDoKKyAqCisgKiBSLXN0YW5kYnkgbW9kZSBpcyB1bnN1cHBvcnRlZCwgYnV0IHdpbGwgYmUgYWRkZWQgaW4gdGhlIGZ1dHVyZQorICogVS1zdGFuZGJ5IG1vZGUgaXMgbG93IHByaW9yaXR5IHNpbmNlIGl0IG5lZWRzIGJvb3Rsb2FkZXIgaGFja3MKKyAqCisgKiBBbGwgbW9kZXMgc2hvdWxkIGJlIHRpZWQgaW4gd2l0aCBjcHVpZGxlLiBCdXQgYmVmb3JlIHRoYXQgY2FuCisgKiBoYXBwZW4gd2UgbmVlZCB0byBrZWVwIHRyYWNrIG9mIGVuYWJsZWQgaGFyZHdhcmUgYmxvY2tzIHNvIHdlCisgKiBjYW4gYXZvaWQgZW50ZXJpbmcgc2xlZXAgbW9kZXMgdGhhdCBzdG9wIGNsb2NrcyB0byBoYXJkd2FyZQorICogYmxvY2tzIHRoYXQgYXJlIGluIHVzZSBldmVuIHRob3VnaCB0aGUgY3B1IGNvcmUgaXMgaWRsZS4KKyAqLworCitleHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBzaF9tb2JpbGVfc3RhbmRieVtdOworZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGludCBzaF9tb2JpbGVfc3RhbmRieV9zaXplOworCitzdGF0aWMgdm9pZCBzaF9tb2JpbGVfY2FsbF9zdGFuZGJ5KHVuc2lnbmVkIGxvbmcgbW9kZSkKK3sKKwlleHRlcm4gdm9pZCAqdmJyX2Jhc2U7CisJdm9pZCAqb25jaGlwX21lbSA9ICh2b2lkICopMHhlNTIwMDAwMDsgLyogSUxSQU0gKi8KKwl2b2lkICgqc3RhbmRieV9vbmNoaXBfbWVtKSh1bnNpZ25lZCBsb25nKSA9IG9uY2hpcF9tZW07CisKKwkvKiBOb3RlOiBXYWtlIHVwIGZyb20gc2xlZXAgbWF5IGdlbmVyYXRlIGV4Y2VwdGlvbnMhCisJICogU2V0dXAgVkJSIHRvIHBvaW50IHRvIG9uLWNoaXAgcmFtIGlmIHNlbGYtcmVmcmVzaCBpcworCSAqIGdvaW5nIHRvIGJlIHVzZWQuCisJICovCisJaWYgKG1vZGUgJiBTVVNQX1NIX1NGKQorCQlhc20gdm9sYXRpbGUoImxkYyAlMCwgdmJyIiA6IDogInIiIChvbmNoaXBfbWVtKSA6ICJtZW1vcnkiKTsKKworCS8qIENvcHkgdGhlIGFzc2VtYmx5IHNuaXBwZXQgdG8gdGhlIG90aGVyd2lzZSB1bnVuc2VkIElMUkFNICovCisJbWVtY3B5KG9uY2hpcF9tZW0sIHNoX21vYmlsZV9zdGFuZGJ5LCBzaF9tb2JpbGVfc3RhbmRieV9zaXplKTsKKwl3bWIoKTsKKwljdHJsX2JhcnJpZXIoKTsKKworCS8qIExldCBhc3NlbWJseSBzbmlwcGV0IGluIG9uLWNoaXAgbWVtb3J5IGhhbmRsZSB0aGUgcmVzdCAqLworCXN0YW5kYnlfb25jaGlwX21lbShtb2RlKTsKKworCS8qIFB1dCBWQlIgYmFjayBpbiBTeXN0ZW0gUkFNIGFnYWluICovCisJaWYgKG1vZGUgJiBTVVNQX1NIX1NGKQorCQlhc20gdm9sYXRpbGUoImxkYyAlMCwgdmJyIiA6IDogInIiICgmdmJyX2Jhc2UpIDogIm1lbW9yeSIpOworfQorCitzdGF0aWMgaW50IHNoX3BtX2VudGVyKHN1c3BlbmRfc3RhdGVfdCBzdGF0ZSkKK3sKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCXNldF9ibF9iaXQoKTsKKwlzaF9tb2JpbGVfY2FsbF9zdGFuZGJ5KFNVU1BfTU9ERV9TVEFOREJZX1NGKTsKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCWNsZWFyX2JsX2JpdCgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX3N1c3BlbmRfb3BzIHNoX3BtX29wcyA9IHsKKwkuZW50ZXIgICAgICAgICAgPSBzaF9wbV9lbnRlciwKKwkudmFsaWQgICAgICAgICAgPSBzdXNwZW5kX3ZhbGlkX29ubHlfbWVtLAorfTsKKworc3RhdGljIGludCBfX2luaXQgc2hfcG1faW5pdCh2b2lkKQoreworCXN1c3BlbmRfc2V0X29wcygmc2hfcG1fb3BzKTsKKwlyZXR1cm4gMDsKK30KKworbGF0ZV9pbml0Y2FsbChzaF9wbV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaG1vYmlsZS9zbGVlcC5TIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NobW9iaWxlL3NsZWVwLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ4ODhlZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaG1vYmlsZS9zbGVlcC5TCkBAIC0wLDAgKzEsMTI1IEBACisvKgorICogYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2xlZXAtc2hfbW9iaWxlLlMKKyAqCisgKiBTbGVlcCBtb2RlIGFuZCBTdGFuZGJ5IG1vZGVzIHN1cHBvcnQgZm9yIFN1cGVySCBNb2JpbGUKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IE1hZ251cyBEYW1tCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3N5cy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgorI2luY2x1ZGUgPGFzbS9zdXNwZW5kLmg+CisKKy8qIG1hbmFnZSBzZWxmLXJlZnJlc2ggYW5kIGVudGVyIHN0YW5kYnkgbW9kZS4KKyAqIHRoaXMgY29kZSB3aWxsIGJlIGNvcGllZCB0byBvbi1jaGlwIG1lbW9yeSBhbmQgZXhlY3V0ZWQgZnJvbSB0aGVyZS4KKyAqLworCisJLmJhbGlnbiAJNDA5NiwwLDQwOTYKK0VOVFJZKHNoX21vYmlsZV9zdGFuZGJ5KQorCW1vdglyNCwgcjAKKworCXRzdAkjU1VTUF9TSF9TRiwgcjAKKwlidAlza2lwX3NldF9zZgorCisJLyogU0RSQU06IGRpc2FibGUgcG93ZXIgZG93biBhbmQgcHV0IGluIHNlbGYtcmVmcmVzaCBtb2RlICovCisJbW92LmwJMWYsIHI0CisJbW92LmwJMmYsIHIxCisJbW92LmwJQHI0LCByMgorCW9yCXIxLCByMgorCW1vdi5sICAgM2YsIHIzCisJYW5kCXIzLCByMgorCW1vdi5sCXIyLCBAcjQKKworc2tpcF9zZXRfc2Y6CisJdHN0CSNTVVNQX1NIX1NMRUVQLCByMAorCWJ0CXRlc3Rfc3RhbmRieQorCisJLyogc2V0IG1vZGUgdG8gInNsZWVwIG1vZGUiICovCisJYnJhCWRvX3NsZWVwCisJIG1vdgkjMHgwMCwgcjEKKwordGVzdF9zdGFuZGJ5OgorCXRzdAkjU1VTUF9TSF9TVEFOREJZLCByMAorCWJ0CXRlc3RfcnN0YW5kYnkKKworCS8qIHNldCBtb2RlIHRvICJzb2Z0d2FyZSBzdGFuZGJ5IG1vZGUiICovCisJYnJhCWRvX3NsZWVwCisJIG1vdgkjMHg4MCwgcjEKKwordGVzdF9yc3RhbmRieToKKwl0c3QJI1NVU1BfU0hfUlNUQU5EQlksIHIwCisJYnQJdGVzdF91c3RhbmRieQorCisJLyogc2V0IG1vZGUgdG8gInItc3RhbmRieSBtb2RlIiAqLworCWJyYQlkb19zbGVlcAorCSBtb3YJIzB4MjAsIHIxCisKK3Rlc3RfdXN0YW5kYnk6CisJdHN0CSNTVVNQX1NIX1VTVEFOREJZLCByMAorCWJ0CWRvbmVfc2xlZXAKKworCS8qIHNldCBtb2RlIHRvICJ1LXN0YW5kYnkgbW9kZSIgKi8KKwltb3YJIzB4MTAsIHIxCisKKwkvKiBmYWxsLXRocm91Z2ggKi8KKworZG9fc2xlZXA6CisJLyogc2V0dXAgYW5kIGVudGVyIHNlbGVjdGVkIHN0YW5kYnkgbW9kZSAqLworCW1vdi5sCTVmLCByNAorCW1vdi5sCXIxLCBAcjQKKwlzbGVlcAorCitkb25lX3NsZWVwOgorCS8qIHJlc2V0IHN0YW5kYnkgbW9kZSB0byBzbGVlcCBtb2RlICovCisJbW92LmwJNWYsIHI0CisJbW92CSMweDAwLCByMQorCW1vdi5sCXIxLCBAcjQKKworCXRzdAkjU1VTUF9TSF9TRiwgcjAKKwlidAlza2lwX3Jlc3RvcmVfc2YKKworCS8qIFNEUkFNOiBzZXQgYXV0by1yZWZyZXNoIG1vZGUgKi8KKwltb3YubAkxZiwgcjQKKwltb3YubAlAcjQsIHIyCisJbW92LmwgICA0ZiwgcjMKKwlhbmQJcjMsIHIyCisJbW92LmwJcjIsIEByNAorCW1vdi5sCTZmLCByNAorCW1vdi5sCTdmLCByMQorCW1vdi5sCThmLCByMgorCW1vdi5sCUByNCwgcjMKKwltb3YJIy0xLCByNAorCWFkZAlyNCwgcjMKKwlvcglyMiwgcjMKKwltb3YubAlyMywgQHIxCitza2lwX3Jlc3RvcmVfc2Y6CisJcnRzCisJIG5vcAorCisJLmJhbGlnbiA0CisxOgkubG9uZwkweGZlNDAwMDA4IC8qIFNEQ1IwICovCisyOgkubG9uZwkweDAwMDAwNDAwCiszOgkubG9uZwkweGZmZmY3ZmZmCis0OgkubG9uZwkweGZmZmZmYmZmCis1OgkubG9uZwkweGE0MTUwMDIwIC8qIFNUQkNSICovCis2OgkubG9uZyAgIDB4ZmU0MDAwMWMgLyogUlRDT1IgKi8KKzc6CS5sb25nICAgMHhmZTQwMDAxOCAvKiBSVENOVCAqLworODoJLmxvbmcgICAweGE1NWEwMDAwCisKKy8qIGludGVycnVwdCB2ZWN0b3IgQCAweDYwMCAqLworCS5iYWxpZ24gCTB4NDAwLDAsMHg0MDAKKwkubG9uZwkweGRlYWRiZWVmCisJLmJhbGlnbiAJMHgyMDAsMCwweDIwMAorCS8qIHNoNzcyMiB3aWxsIGVuZCB1cCBoZXJlIGluIHNsZWVwIG1vZGUgKi8KKwlydGUKKwkgbm9wCitzaF9tb2JpbGVfc3RhbmRieV9lbmQ6CisKK0VOVFJZKHNoX21vYmlsZV9zdGFuZGJ5X3NpemUpCisJLmxvbmcgc2hfbW9iaWxlX3N0YW5kYnlfZW5kIC0gc2hfbW9iaWxlX3N0YW5kYnkKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2dwaW8uYyBiL2FyY2gvc2gva2VybmVsL2dwaW8uYwppbmRleCBkMzcxNjUzLi5kMjJlNWFmIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9ncGlvLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvZ3Bpby5jCkBAIC0xOSwyMiArMTksNiBAQAogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KIAotc3RhdGljIHN0cnVjdCBwaW5tdXhfaW5mbyAqcmVnaXN0ZXJlZF9ncGlvOwotCi1zdGF0aWMgc3RydWN0IHBpbm11eF9pbmZvICpncGlvX2NvbnRyb2xsZXIodW5zaWduZWQgZ3BpbykKLXsKLQlpZiAoIXJlZ2lzdGVyZWRfZ3BpbykKLQkJcmV0dXJuIE5VTEw7Ci0KLQlpZiAoZ3BpbyA8IHJlZ2lzdGVyZWRfZ3Bpby0+Zmlyc3RfZ3BpbykKLQkJcmV0dXJuIE5VTEw7Ci0KLQlpZiAoZ3BpbyA+IHJlZ2lzdGVyZWRfZ3Bpby0+bGFzdF9ncGlvKQotCQlyZXR1cm4gTlVMTDsKLQotCXJldHVybiByZWdpc3RlcmVkX2dwaW87Ci19Ci0KIHN0YXRpYyBpbnQgZW51bV9pbl9yYW5nZShwaW5tdXhfZW51bV90IGVudW1faWQsIHN0cnVjdCBwaW5tdXhfcmFuZ2UgKnIpCiB7CiAJaWYgKGVudW1faWQgPCByLT5iZWdpbikKQEAgLTQ2LDkgKzMwLDY0IEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBpbnQgcmVhZF93cml0ZV9yZWcodW5zaWduZWQgbG9uZyByZWcsIHVuc2lnbmVkIGxvbmcgcmVnX3dpZHRoLAotCQkJICB1bnNpZ25lZCBsb25nIGZpZWxkX3dpZHRoLCB1bnNpZ25lZCBsb25nIGluX3BvcywKLQkJCSAgdW5zaWduZWQgbG9uZyB2YWx1ZSwgaW50IGRvX3dyaXRlKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgZ3Bpb19yZWFkX3Jhd19yZWcodW5zaWduZWQgbG9uZyByZWcsCisJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgcmVnX3dpZHRoKQoreworCXN3aXRjaCAocmVnX3dpZHRoKSB7CisJY2FzZSA4OgorCQlyZXR1cm4gY3RybF9pbmIocmVnKTsKKwljYXNlIDE2OgorCQlyZXR1cm4gY3RybF9pbncocmVnKTsKKwljYXNlIDMyOgorCQlyZXR1cm4gY3RybF9pbmwocmVnKTsKKwl9CisKKwlCVUcoKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZ3Bpb193cml0ZV9yYXdfcmVnKHVuc2lnbmVkIGxvbmcgcmVnLAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgcmVnX3dpZHRoLAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzd2l0Y2ggKHJlZ193aWR0aCkgeworCWNhc2UgODoKKwkJY3RybF9vdXRiKGRhdGEsIHJlZyk7CisJCXJldHVybjsKKwljYXNlIDE2OgorCQljdHJsX291dHcoZGF0YSwgcmVnKTsKKwkJcmV0dXJuOworCWNhc2UgMzI6CisJCWN0cmxfb3V0bChkYXRhLCByZWcpOworCQlyZXR1cm47CisJfQorCisJQlVHKCk7Cit9CisKK3N0YXRpYyB2b2lkIGdwaW9fd3JpdGVfYml0KHN0cnVjdCBwaW5tdXhfZGF0YV9yZWcgKmRyLAorCQkJICAgdW5zaWduZWQgbG9uZyBpbl9wb3MsIHVuc2lnbmVkIGxvbmcgdmFsdWUpCit7CisJdW5zaWduZWQgbG9uZyBwb3M7CisKKwlwb3MgPSBkci0+cmVnX3dpZHRoIC0gKGluX3BvcyArIDEpOworCisjaWZkZWYgREVCVUcKKwlwcl9pbmZvKCJ3cml0ZV9iaXQgYWRkciA9ICVseCwgdmFsdWUgPSAlbGQsIHBvcyA9ICVsZCwgIgorCQkicl93aWR0aCA9ICVsZFxuIiwKKwkJZHItPnJlZywgISF2YWx1ZSwgcG9zLCBkci0+cmVnX3dpZHRoKTsKKyNlbmRpZgorCisJaWYgKHZhbHVlKQorCQlzZXRfYml0KHBvcywgJmRyLT5yZWdfc2hhZG93KTsKKwllbHNlCisJCWNsZWFyX2JpdChwb3MsICZkci0+cmVnX3NoYWRvdyk7CisKKwlncGlvX3dyaXRlX3Jhd19yZWcoZHItPnJlZywgZHItPnJlZ193aWR0aCwgZHItPnJlZ19zaGFkb3cpOworfQorCitzdGF0aWMgaW50IGdwaW9fcmVhZF9yZWcodW5zaWduZWQgbG9uZyByZWcsIHVuc2lnbmVkIGxvbmcgcmVnX3dpZHRoLAorCQkJIHVuc2lnbmVkIGxvbmcgZmllbGRfd2lkdGgsIHVuc2lnbmVkIGxvbmcgaW5fcG9zKQogewogCXVuc2lnbmVkIGxvbmcgZGF0YSwgbWFzaywgcG9zOwogCkBAIC01Nyw1MiArOTYsNTMgQEAKIAlwb3MgPSByZWdfd2lkdGggLSAoKGluX3BvcyArIDEpICogZmllbGRfd2lkdGgpOwogCiAjaWZkZWYgREVCVUcKLQlwcl9pbmZvKCIlcywgYWRkciA9ICVseCwgdmFsdWUgPSAlbGQsIHBvcyA9ICVsZCwgIgorCXByX2luZm8oInJlYWRfcmVnOiBhZGRyID0gJWx4LCBwb3MgPSAlbGQsICIKIAkJInJfd2lkdGggPSAlbGQsIGZfd2lkdGggPSAlbGRcbiIsCi0JCWRvX3dyaXRlID8gIndyaXRlIiA6ICJyZWFkIiwgcmVnLCB2YWx1ZSwgcG9zLAotCQlyZWdfd2lkdGgsIGZpZWxkX3dpZHRoKTsKKwkJcmVnLCBwb3MsIHJlZ193aWR0aCwgZmllbGRfd2lkdGgpOwogI2VuZGlmCiAKLQlzd2l0Y2ggKHJlZ193aWR0aCkgewotCWNhc2UgODoKLQkJZGF0YSA9IGN0cmxfaW5iKHJlZyk7Ci0JCWJyZWFrOwotCWNhc2UgMTY6Ci0JCWRhdGEgPSBjdHJsX2ludyhyZWcpOwotCQlicmVhazsKLQljYXNlIDMyOgotCQlkYXRhID0gY3RybF9pbmwocmVnKTsKLQkJYnJlYWs7Ci0JfQotCi0JaWYgKCFkb193cml0ZSkKLQkJcmV0dXJuIChkYXRhID4+IHBvcykgJiBtYXNrOwotCi0JZGF0YSAmPSB+KG1hc2sgPDwgcG9zKTsKLQlkYXRhIHw9IHZhbHVlIDw8IHBvczsKLQotCXN3aXRjaCAocmVnX3dpZHRoKSB7Ci0JY2FzZSA4OgotCQljdHJsX291dGIoZGF0YSwgcmVnKTsKLQkJYnJlYWs7Ci0JY2FzZSAxNjoKLQkJY3RybF9vdXR3KGRhdGEsIHJlZyk7Ci0JCWJyZWFrOwotCWNhc2UgMzI6Ci0JCWN0cmxfb3V0bChkYXRhLCByZWcpOwotCQlicmVhazsKLQl9Ci0JcmV0dXJuIDA7CisJZGF0YSA9IGdwaW9fcmVhZF9yYXdfcmVnKHJlZywgcmVnX3dpZHRoKTsKKwlyZXR1cm4gKGRhdGEgPj4gcG9zKSAmIG1hc2s7CiB9CiAKLXN0YXRpYyBpbnQgZ2V0X2RhdGFfcmVnKHN0cnVjdCBwaW5tdXhfaW5mbyAqZ3Bpb2MsIHVuc2lnbmVkIGdwaW8sCi0JCQlzdHJ1Y3QgcGlubXV4X2RhdGFfcmVnICoqZHJwLCBpbnQgKmJpdHApCitzdGF0aWMgdm9pZCBncGlvX3dyaXRlX3JlZyh1bnNpZ25lZCBsb25nIHJlZywgdW5zaWduZWQgbG9uZyByZWdfd2lkdGgsCisJCQkgICB1bnNpZ25lZCBsb25nIGZpZWxkX3dpZHRoLCB1bnNpZ25lZCBsb25nIGluX3BvcywKKwkJCSAgIHVuc2lnbmVkIGxvbmcgdmFsdWUpCiB7Ci0JcGlubXV4X2VudW1fdCBlbnVtX2lkID0gZ3Bpb2MtPmdwaW9zW2dwaW9dLmVudW1faWQ7CisJdW5zaWduZWQgbG9uZyBtYXNrLCBwb3M7CisKKwltYXNrID0gKDEgPDwgZmllbGRfd2lkdGgpIC0gMTsKKwlwb3MgPSByZWdfd2lkdGggLSAoKGluX3BvcyArIDEpICogZmllbGRfd2lkdGgpOworCisjaWZkZWYgREVCVUcKKwlwcl9pbmZvKCJ3cml0ZV9yZWcgYWRkciA9ICVseCwgdmFsdWUgPSAlbGQsIHBvcyA9ICVsZCwgIgorCQkicl93aWR0aCA9ICVsZCwgZl93aWR0aCA9ICVsZFxuIiwKKwkJcmVnLCB2YWx1ZSwgcG9zLCByZWdfd2lkdGgsIGZpZWxkX3dpZHRoKTsKKyNlbmRpZgorCisJbWFzayA9IH4obWFzayA8PCBwb3MpOworCXZhbHVlID0gdmFsdWUgPDwgcG9zOworCisJc3dpdGNoIChyZWdfd2lkdGgpIHsKKwljYXNlIDg6CisJCWN0cmxfb3V0YigoY3RybF9pbmIocmVnKSAmIG1hc2spIHwgdmFsdWUsIHJlZyk7CisJCWJyZWFrOworCWNhc2UgMTY6CisJCWN0cmxfb3V0dygoY3RybF9pbncocmVnKSAmIG1hc2spIHwgdmFsdWUsIHJlZyk7CisJCWJyZWFrOworCWNhc2UgMzI6CisJCWN0cmxfb3V0bCgoY3RybF9pbmwocmVnKSAmIG1hc2spIHwgdmFsdWUsIHJlZyk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIGludCBzZXR1cF9kYXRhX3JlZyhzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9jLCB1bnNpZ25lZCBncGlvKQoreworCXN0cnVjdCBwaW5tdXhfZ3BpbyAqZ3Bpb3AgPSAmZ3Bpb2MtPmdwaW9zW2dwaW9dOwogCXN0cnVjdCBwaW5tdXhfZGF0YV9yZWcgKmRhdGFfcmVnOwogCWludCBrLCBuOwogCi0JaWYgKCFlbnVtX2luX3JhbmdlKGVudW1faWQsICZncGlvYy0+ZGF0YSkpCisJaWYgKCFlbnVtX2luX3JhbmdlKGdwaW9wLT5lbnVtX2lkLCAmZ3Bpb2MtPmRhdGEpKQogCQlyZXR1cm4gLTE7CiAKIAlrID0gMDsKQEAgLTExMywxOSArMTUzLDU4IEBACiAJCQlicmVhazsKIAogCQlmb3IgKG4gPSAwOyBuIDwgZGF0YV9yZWctPnJlZ193aWR0aDsgbisrKSB7Ci0JCQlpZiAoZGF0YV9yZWctPmVudW1faWRzW25dID09IGVudW1faWQpIHsKLQkJCQkqZHJwID0gZGF0YV9yZWc7Ci0JCQkJKmJpdHAgPSBuOworCQkJaWYgKGRhdGFfcmVnLT5lbnVtX2lkc1tuXSA9PSBncGlvcC0+ZW51bV9pZCkgeworCQkJCWdwaW9wLT5mbGFncyAmPSB+UElOTVVYX0ZMQUdfRFJFRzsKKwkJCQlncGlvcC0+ZmxhZ3MgfD0gKGsgPDwgUElOTVVYX0ZMQUdfRFJFR19TSElGVCk7CisJCQkJZ3Bpb3AtPmZsYWdzICY9IH5QSU5NVVhfRkxBR19EQklUOworCQkJCWdwaW9wLT5mbGFncyB8PSAobiA8PCBQSU5NVVhfRkxBR19EQklUX1NISUZUKTsKIAkJCQlyZXR1cm4gMDsKLQogCQkJfQogCQl9CiAJCWsrKzsKIAl9CiAKKwlCVUcoKTsKKwogCXJldHVybiAtMTsKIH0KIAorc3RhdGljIHZvaWQgc2V0dXBfZGF0YV9yZWdzKHN0cnVjdCBwaW5tdXhfaW5mbyAqZ3Bpb2MpCit7CisJc3RydWN0IHBpbm11eF9kYXRhX3JlZyAqZHJwOworCWludCBrOworCisJZm9yIChrID0gZ3Bpb2MtPmZpcnN0X2dwaW87IGsgPD0gZ3Bpb2MtPmxhc3RfZ3BpbzsgaysrKQorCQlzZXR1cF9kYXRhX3JlZyhncGlvYywgayk7CisKKwlrID0gMDsKKwl3aGlsZSAoMSkgeworCQlkcnAgPSBncGlvYy0+ZGF0YV9yZWdzICsgazsKKworCQlpZiAoIWRycC0+cmVnX3dpZHRoKQorCQkJYnJlYWs7CisKKwkJZHJwLT5yZWdfc2hhZG93ID0gZ3Bpb19yZWFkX3Jhd19yZWcoZHJwLT5yZWcsIGRycC0+cmVnX3dpZHRoKTsKKwkJaysrOworCX0KK30KKworc3RhdGljIGludCBnZXRfZGF0YV9yZWcoc3RydWN0IHBpbm11eF9pbmZvICpncGlvYywgdW5zaWduZWQgZ3BpbywKKwkJCXN0cnVjdCBwaW5tdXhfZGF0YV9yZWcgKipkcnAsIGludCAqYml0cCkKK3sKKwlzdHJ1Y3QgcGlubXV4X2dwaW8gKmdwaW9wID0gJmdwaW9jLT5ncGlvc1tncGlvXTsKKwlpbnQgaywgbjsKKworCWlmICghZW51bV9pbl9yYW5nZShncGlvcC0+ZW51bV9pZCwgJmdwaW9jLT5kYXRhKSkKKwkJcmV0dXJuIC0xOworCisJayA9IChncGlvcC0+ZmxhZ3MgJiBQSU5NVVhfRkxBR19EUkVHKSA+PiBQSU5NVVhfRkxBR19EUkVHX1NISUZUOworCW4gPSAoZ3Bpb3AtPmZsYWdzICYgUElOTVVYX0ZMQUdfREJJVCkgPj4gUElOTVVYX0ZMQUdfREJJVF9TSElGVDsKKwkqZHJwID0gZ3Bpb2MtPmRhdGFfcmVncyArIGs7CisJKmJpdHAgPSBuOworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGdldF9jb25maWdfcmVnKHN0cnVjdCBwaW5tdXhfaW5mbyAqZ3Bpb2MsIHBpbm11eF9lbnVtX3QgZW51bV9pZCwKIAkJCSAgc3RydWN0IHBpbm11eF9jZmdfcmVnICoqY3JwLCBpbnQgKmluZGV4cCwKIAkJCSAgdW5zaWduZWQgbG9uZyAqKmNudHApCkBAIC0xODcsOSArMjY2LDkgQEAKIAlyZXR1cm4gLTE7CiB9CiAKLXN0YXRpYyBpbnQgd3JpdGVfY29uZmlnX3JlZyhzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9jLAotCQkJICAgIHN0cnVjdCBwaW5tdXhfY2ZnX3JlZyAqY3JwLAotCQkJICAgIGludCBpbmRleCkKK3N0YXRpYyB2b2lkIHdyaXRlX2NvbmZpZ19yZWcoc3RydWN0IHBpbm11eF9pbmZvICpncGlvYywKKwkJCSAgICAgc3RydWN0IHBpbm11eF9jZmdfcmVnICpjcnAsCisJCQkgICAgIGludCBpbmRleCkKIHsKIAl1bnNpZ25lZCBsb25nIG5jb21iLCBwb3MsIHZhbHVlOwogCkBAIC0xOTcsOCArMjc2LDcgQEAKIAlwb3MgPSBpbmRleCAvIG5jb21iOwogCXZhbHVlID0gaW5kZXggJSBuY29tYjsKIAotCXJldHVybiByZWFkX3dyaXRlX3JlZyhjcnAtPnJlZywgY3JwLT5yZWdfd2lkdGgsCi0JCQkgICAgICBjcnAtPmZpZWxkX3dpZHRoLCBwb3MsIHZhbHVlLCAxKTsKKwlncGlvX3dyaXRlX3JlZyhjcnAtPnJlZywgY3JwLT5yZWdfd2lkdGgsIGNycC0+ZmllbGRfd2lkdGgsIHBvcywgdmFsdWUpOwogfQogCiBzdGF0aWMgaW50IGNoZWNrX2NvbmZpZ19yZWcoc3RydWN0IHBpbm11eF9pbmZvICpncGlvYywKQEAgLTIxMSw4ICsyODksOCBAQAogCXBvcyA9IGluZGV4IC8gbmNvbWI7CiAJdmFsdWUgPSBpbmRleCAlIG5jb21iOwogCi0JaWYgKHJlYWRfd3JpdGVfcmVnKGNycC0+cmVnLCBjcnAtPnJlZ193aWR0aCwKLQkJCSAgIGNycC0+ZmllbGRfd2lkdGgsIHBvcywgMCwgMCkgPT0gdmFsdWUpCisJaWYgKGdwaW9fcmVhZF9yZWcoY3JwLT5yZWcsIGNycC0+cmVnX3dpZHRoLAorCQkJICBjcnAtPmZpZWxkX3dpZHRoLCBwb3MpID09IHZhbHVlKQogCQlyZXR1cm4gMDsKIAogCXJldHVybiAtMTsKQEAgLTIyMCw4ICsyOTgsOCBAQAogCiBlbnVtIHsgR1BJT19DRkdfRFJZUlVOLCBHUElPX0NGR19SRVEsIEdQSU9fQ0ZHX0ZSRUUgfTsKIAotaW50IHBpbm11eF9jb25maWdfZ3BpbyhzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9jLCB1bnNpZ25lZCBncGlvLAotCQkgICAgICAgaW50IHBpbm11eF90eXBlLCBpbnQgY2ZnX21vZGUpCitzdGF0aWMgaW50IHBpbm11eF9jb25maWdfZ3BpbyhzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9jLCB1bnNpZ25lZCBncGlvLAorCQkJICAgICAgaW50IHBpbm11eF90eXBlLCBpbnQgY2ZnX21vZGUpCiB7CiAJc3RydWN0IHBpbm11eF9jZmdfcmVnICpjciA9IE5VTEw7CiAJcGlubXV4X2VudW1fdCBlbnVtX2lkOwpAQCAtMjg3LDggKzM2NSw3IEBACiAJCQlicmVhazsKIAogCQljYXNlIEdQSU9fQ0ZHX1JFUToKLQkJCWlmICh3cml0ZV9jb25maWdfcmVnKGdwaW9jLCBjciwgaW5kZXgpICE9IDApCi0JCQkJZ290byBvdXRfZXJyOworCQkJd3JpdGVfY29uZmlnX3JlZyhncGlvYywgY3IsIGluZGV4KTsKIAkJCSpjbnRwID0gKmNudHAgKyAxOwogCQkJYnJlYWs7CiAKQEAgLTMwNSw5ICszODIsMTQgQEAKIAogc3RhdGljIERFRklORV9TUElOTE9DSyhncGlvX2xvY2spOwogCi1pbnQgX19ncGlvX3JlcXVlc3QodW5zaWduZWQgZ3BpbykKK3N0YXRpYyBzdHJ1Y3QgcGlubXV4X2luZm8gKmNoaXBfdG9fcGlubXV4KHN0cnVjdCBncGlvX2NoaXAgKmNoaXApCiB7Ci0Jc3RydWN0IHBpbm11eF9pbmZvICpncGlvYyA9IGdwaW9fY29udHJvbGxlcihncGlvKTsKKwlyZXR1cm4gY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBwaW5tdXhfaW5mbywgY2hpcCk7Cit9CisKK3N0YXRpYyBpbnQgc2hfZ3Bpb19yZXF1ZXN0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKK3sKKwlzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9jID0gY2hpcF90b19waW5tdXgoY2hpcCk7CiAJc3RydWN0IHBpbm11eF9kYXRhX3JlZyAqZHVtbXk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgaSwgcmV0LCBwaW5tdXhfdHlwZTsKQEAgLTMxOSwyOSArNDAxLDMwIEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZ3Bpb19sb2NrLCBmbGFncyk7CiAKLQlpZiAoKGdwaW9jLT5ncGlvc1tncGlvXS5mbGFncyAmIFBJTk1VWF9GTEFHX1RZUEUpICE9IFBJTk1VWF9UWVBFX05PTkUpCisJaWYgKChncGlvYy0+Z3Bpb3Nbb2Zmc2V0XS5mbGFncyAmIFBJTk1VWF9GTEFHX1RZUEUpICE9IFBJTk1VWF9UWVBFX05PTkUpCiAJCWdvdG8gZXJyX3VubG9jazsKIAogCS8qIHNldHVwIHBpbiBmdW5jdGlvbiBoZXJlIGlmIG5vIGRhdGEgaXMgYXNzb2NpYXRlZCB3aXRoIHBpbiAqLwogCi0JaWYgKGdldF9kYXRhX3JlZyhncGlvYywgZ3BpbywgJmR1bW15LCAmaSkgIT0gMCkKKwlpZiAoZ2V0X2RhdGFfcmVnKGdwaW9jLCBvZmZzZXQsICZkdW1teSwgJmkpICE9IDApCiAJCXBpbm11eF90eXBlID0gUElOTVVYX1RZUEVfRlVOQ1RJT047CiAJZWxzZQogCQlwaW5tdXhfdHlwZSA9IFBJTk1VWF9UWVBFX0dQSU87CiAKIAlpZiAocGlubXV4X3R5cGUgPT0gUElOTVVYX1RZUEVfRlVOQ1RJT04pIHsKLQkJaWYgKHBpbm11eF9jb25maWdfZ3BpbyhncGlvYywgZ3BpbywKKwkJaWYgKHBpbm11eF9jb25maWdfZ3BpbyhncGlvYywgb2Zmc2V0LAogCQkJCSAgICAgICBwaW5tdXhfdHlwZSwKIAkJCQkgICAgICAgR1BJT19DRkdfRFJZUlVOKSAhPSAwKQogCQkJZ290byBlcnJfdW5sb2NrOwogCi0JCWlmIChwaW5tdXhfY29uZmlnX2dwaW8oZ3Bpb2MsIGdwaW8sCisJCWlmIChwaW5tdXhfY29uZmlnX2dwaW8oZ3Bpb2MsIG9mZnNldCwKIAkJCQkgICAgICAgcGlubXV4X3R5cGUsCiAJCQkJICAgICAgIEdQSU9fQ0ZHX1JFUSkgIT0gMCkKIAkJCUJVRygpOwogCX0KIAotCWdwaW9jLT5ncGlvc1tncGlvXS5mbGFncyA9IHBpbm11eF90eXBlOworCWdwaW9jLT5ncGlvc1tvZmZzZXRdLmZsYWdzICY9IH5QSU5NVVhfRkxBR19UWVBFOworCWdwaW9jLT5ncGlvc1tvZmZzZXRdLmZsYWdzIHw9IHBpbm11eF90eXBlOwogCiAJcmV0ID0gMDsKICBlcnJfdW5sb2NrOgpAQCAtMzQ5LDExICs0MzIsMTAgQEAKICBlcnJfb3V0OgogCXJldHVybiByZXQ7CiB9Ci1FWFBPUlRfU1lNQk9MKF9fZ3Bpb19yZXF1ZXN0KTsKIAotdm9pZCBncGlvX2ZyZWUodW5zaWduZWQgZ3BpbykKK3N0YXRpYyB2b2lkIHNoX2dwaW9fZnJlZShzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCiB7Ci0Jc3RydWN0IHBpbm11eF9pbmZvICpncGlvYyA9IGdwaW9fY29udHJvbGxlcihncGlvKTsKKwlzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9jID0gY2hpcF90b19waW5tdXgoY2hpcCk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcGlubXV4X3R5cGU7CiAKQEAgLTM2MiwyMCArNDQ0LDIzIEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZ3Bpb19sb2NrLCBmbGFncyk7CiAKLQlwaW5tdXhfdHlwZSA9IGdwaW9jLT5ncGlvc1tncGlvXS5mbGFncyAmIFBJTk1VWF9GTEFHX1RZUEU7Ci0JcGlubXV4X2NvbmZpZ19ncGlvKGdwaW9jLCBncGlvLCBwaW5tdXhfdHlwZSwgR1BJT19DRkdfRlJFRSk7Ci0JZ3Bpb2MtPmdwaW9zW2dwaW9dLmZsYWdzID0gUElOTVVYX1RZUEVfTk9ORTsKKwlwaW5tdXhfdHlwZSA9IGdwaW9jLT5ncGlvc1tvZmZzZXRdLmZsYWdzICYgUElOTVVYX0ZMQUdfVFlQRTsKKwlwaW5tdXhfY29uZmlnX2dwaW8oZ3Bpb2MsIG9mZnNldCwgcGlubXV4X3R5cGUsIEdQSU9fQ0ZHX0ZSRUUpOworCWdwaW9jLT5ncGlvc1tvZmZzZXRdLmZsYWdzICY9IH5QSU5NVVhfRkxBR19UWVBFOworCWdwaW9jLT5ncGlvc1tvZmZzZXRdLmZsYWdzIHw9IFBJTk1VWF9UWVBFX05PTkU7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncGlvX2xvY2ssIGZsYWdzKTsKIH0KLUVYUE9SVF9TWU1CT0woZ3Bpb19mcmVlKTsKIAogc3RhdGljIGludCBwaW5tdXhfZGlyZWN0aW9uKHN0cnVjdCBwaW5tdXhfaW5mbyAqZ3Bpb2MsCiAJCQkgICAgdW5zaWduZWQgZ3BpbywgaW50IG5ld19waW5tdXhfdHlwZSkKIHsKLQlpbnQgcmV0LCBwaW5tdXhfdHlwZTsKKwlpbnQgcGlubXV4X3R5cGU7CisJaW50IHJldCA9IC1FSU5WQUw7CiAKLQlyZXQgPSAtRUlOVkFMOworCWlmICghZ3Bpb2MpCisJCWdvdG8gZXJyX291dDsKKwogCXBpbm11eF90eXBlID0gZ3Bpb2MtPmdwaW9zW2dwaW9dLmZsYWdzICYgUElOTVVYX0ZMQUdfVFlQRTsKIAogCXN3aXRjaCAocGlubXV4X3R5cGUpIHsKQEAgLTQwMSwxMDIgKzQ4Niw5OSBAQAogCQkJICAgICAgIEdQSU9fQ0ZHX1JFUSkgIT0gMCkKIAkJQlVHKCk7CiAKLQlncGlvYy0+Z3Bpb3NbZ3Bpb10uZmxhZ3MgPSBuZXdfcGlubXV4X3R5cGU7CisJZ3Bpb2MtPmdwaW9zW2dwaW9dLmZsYWdzICY9IH5QSU5NVVhfRkxBR19UWVBFOworCWdwaW9jLT5ncGlvc1tncGlvXS5mbGFncyB8PSBuZXdfcGlubXV4X3R5cGU7CiAKIAlyZXQgPSAwOwogIGVycl9vdXQ6CiAJcmV0dXJuIHJldDsKIH0KIAotaW50IGdwaW9fZGlyZWN0aW9uX2lucHV0KHVuc2lnbmVkIGdwaW8pCitzdGF0aWMgaW50IHNoX2dwaW9fZGlyZWN0aW9uX2lucHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKIHsKLQlzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9jID0gZ3Bpb19jb250cm9sbGVyKGdwaW8pOworCXN0cnVjdCBwaW5tdXhfaW5mbyAqZ3Bpb2MgPSBjaGlwX3RvX3Bpbm11eChjaGlwKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByZXQgPSAtRUlOVkFMOwotCi0JaWYgKCFncGlvYykKLQkJZ290byBlcnJfb3V0OworCWludCByZXQ7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZ3Bpb19sb2NrLCBmbGFncyk7Ci0JcmV0ID0gcGlubXV4X2RpcmVjdGlvbihncGlvYywgZ3BpbywgUElOTVVYX1RZUEVfSU5QVVQpOworCXJldCA9IHBpbm11eF9kaXJlY3Rpb24oZ3Bpb2MsIG9mZnNldCwgUElOTVVYX1RZUEVfSU5QVVQpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwaW9fbG9jaywgZmxhZ3MpOwotIGVycl9vdXQ6CisKIAlyZXR1cm4gcmV0OwogfQotRVhQT1JUX1NZTUJPTChncGlvX2RpcmVjdGlvbl9pbnB1dCk7CiAKLXN0YXRpYyBpbnQgX19ncGlvX2dldF9zZXRfdmFsdWUoc3RydWN0IHBpbm11eF9pbmZvICpncGlvYywKLQkJCQl1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUsCi0JCQkJaW50IGRvX3dyaXRlKQorc3RhdGljIHZvaWQgc2hfZ3Bpb19zZXRfdmFsdWUoc3RydWN0IHBpbm11eF9pbmZvICpncGlvYywKKwkJCSAgICAgdW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKQogewogCXN0cnVjdCBwaW5tdXhfZGF0YV9yZWcgKmRyID0gTlVMTDsKIAlpbnQgYml0ID0gMDsKIAotCWlmIChnZXRfZGF0YV9yZWcoZ3Bpb2MsIGdwaW8sICZkciwgJmJpdCkgIT0gMCkKKwlpZiAoIWdwaW9jIHx8IGdldF9kYXRhX3JlZyhncGlvYywgZ3BpbywgJmRyLCAmYml0KSAhPSAwKQogCQlCVUcoKTsKIAllbHNlCi0JCXZhbHVlID0gcmVhZF93cml0ZV9yZWcoZHItPnJlZywgZHItPnJlZ193aWR0aCwKLQkJCQkgICAgICAgMSwgYml0LCAhIXZhbHVlLCBkb193cml0ZSk7Ci0KLQlyZXR1cm4gdmFsdWU7CisJCWdwaW9fd3JpdGVfYml0KGRyLCBiaXQsIHZhbHVlKTsKIH0KIAotaW50IGdwaW9fZGlyZWN0aW9uX291dHB1dCh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpCitzdGF0aWMgaW50IHNoX2dwaW9fZGlyZWN0aW9uX291dHB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQsCisJCQkJICAgIGludCB2YWx1ZSkKIHsKLQlzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9jID0gZ3Bpb19jb250cm9sbGVyKGdwaW8pOworCXN0cnVjdCBwaW5tdXhfaW5mbyAqZ3Bpb2MgPSBjaGlwX3RvX3Bpbm11eChjaGlwKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByZXQgPSAtRUlOVkFMOworCWludCByZXQ7CiAKLQlpZiAoIWdwaW9jKQotCQlnb3RvIGVycl9vdXQ7Ci0KKwlzaF9ncGlvX3NldF92YWx1ZShncGlvYywgb2Zmc2V0LCB2YWx1ZSk7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmdwaW9fbG9jaywgZmxhZ3MpOwotCV9fZ3Bpb19nZXRfc2V0X3ZhbHVlKGdwaW9jLCBncGlvLCB2YWx1ZSwgMSk7Ci0JcmV0ID0gcGlubXV4X2RpcmVjdGlvbihncGlvYywgZ3BpbywgUElOTVVYX1RZUEVfT1VUUFVUKTsKKwlyZXQgPSBwaW5tdXhfZGlyZWN0aW9uKGdwaW9jLCBvZmZzZXQsIFBJTk1VWF9UWVBFX09VVFBVVCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Bpb19sb2NrLCBmbGFncyk7Ci0gZXJyX291dDoKKwogCXJldHVybiByZXQ7CiB9Ci1FWFBPUlRfU1lNQk9MKGdwaW9fZGlyZWN0aW9uX291dHB1dCk7CiAKLWludCBncGlvX2dldF92YWx1ZSh1bnNpZ25lZCBncGlvKQorc3RhdGljIGludCBzaF9ncGlvX2dldF92YWx1ZShzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9jLCB1bnNpZ25lZCBncGlvKQogewotCXN0cnVjdCBwaW5tdXhfaW5mbyAqZ3Bpb2MgPSBncGlvX2NvbnRyb2xsZXIoZ3Bpbyk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgdmFsdWUgPSAwOworCXN0cnVjdCBwaW5tdXhfZGF0YV9yZWcgKmRyID0gTlVMTDsKKwlpbnQgYml0ID0gMDsKIAotCWlmICghZ3Bpb2MpCisJaWYgKCFncGlvYyB8fCBnZXRfZGF0YV9yZWcoZ3Bpb2MsIGdwaW8sICZkciwgJmJpdCkgIT0gMCkgewogCQlCVUcoKTsKLQllbHNlIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmdwaW9fbG9jaywgZmxhZ3MpOwotCQl2YWx1ZSA9IF9fZ3Bpb19nZXRfc2V0X3ZhbHVlKGdwaW9jLCBncGlvLCAwLCAwKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Bpb19sb2NrLCBmbGFncyk7CisJCXJldHVybiAwOwogCX0KIAotCXJldHVybiB2YWx1ZTsKKwlyZXR1cm4gZ3Bpb19yZWFkX3JlZyhkci0+cmVnLCBkci0+cmVnX3dpZHRoLCAxLCBiaXQpOwogfQotRVhQT1JUX1NZTUJPTChncGlvX2dldF92YWx1ZSk7CiAKLXZvaWQgZ3Bpb19zZXRfdmFsdWUodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKQorc3RhdGljIGludCBzaF9ncGlvX2dldChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCiB7Ci0Jc3RydWN0IHBpbm11eF9pbmZvICpncGlvYyA9IGdwaW9fY29udHJvbGxlcihncGlvKTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKCFncGlvYykKLQkJQlVHKCk7Ci0JZWxzZSB7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZncGlvX2xvY2ssIGZsYWdzKTsKLQkJX19ncGlvX2dldF9zZXRfdmFsdWUoZ3Bpb2MsIGdwaW8sIHZhbHVlLCAxKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Bpb19sb2NrLCBmbGFncyk7Ci0JfQorCXJldHVybiBzaF9ncGlvX2dldF92YWx1ZShjaGlwX3RvX3Bpbm11eChjaGlwKSwgb2Zmc2V0KTsKIH0KLUVYUE9SVF9TWU1CT0woZ3Bpb19zZXRfdmFsdWUpOworCitzdGF0aWMgdm9pZCBzaF9ncGlvX3NldChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQsIGludCB2YWx1ZSkKK3sKKwlzaF9ncGlvX3NldF92YWx1ZShjaGlwX3RvX3Bpbm11eChjaGlwKSwgb2Zmc2V0LCB2YWx1ZSk7Cit9CiAKIGludCByZWdpc3Rlcl9waW5tdXgoc3RydWN0IHBpbm11eF9pbmZvICpwaXApCiB7Ci0JcmVnaXN0ZXJlZF9ncGlvID0gcGlwOwotCXByX2luZm8oInBpbm11eDogJXMgaGFuZGxpbmcgZ3BpbyAlZCAtPiAlZFxuIiwKKwlzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwID0gJnBpcC0+Y2hpcDsKKworCXByX2luZm8oInNoIHBpbm11eDogJXMgaGFuZGxpbmcgZ3BpbyAlZCAtPiAlZFxuIiwKIAkJcGlwLT5uYW1lLCBwaXAtPmZpcnN0X2dwaW8sIHBpcC0+bGFzdF9ncGlvKTsKIAotCXJldHVybiAwOworCXNldHVwX2RhdGFfcmVncyhwaXApOworCisJY2hpcC0+cmVxdWVzdCA9IHNoX2dwaW9fcmVxdWVzdDsKKwljaGlwLT5mcmVlID0gc2hfZ3Bpb19mcmVlOworCWNoaXAtPmRpcmVjdGlvbl9pbnB1dCA9IHNoX2dwaW9fZGlyZWN0aW9uX2lucHV0OworCWNoaXAtPmdldCA9IHNoX2dwaW9fZ2V0OworCWNoaXAtPmRpcmVjdGlvbl9vdXRwdXQgPSBzaF9ncGlvX2RpcmVjdGlvbl9vdXRwdXQ7CisJY2hpcC0+c2V0ID0gc2hfZ3Bpb19zZXQ7CisKKwlXQVJOX09OKHBpcC0+Zmlyc3RfZ3BpbyAhPSAwKTsgLyogbmVlZHMgdGVzdGluZyAqLworCisJY2hpcC0+bGFiZWwgPSBwaXAtPm5hbWU7CisJY2hpcC0+b3duZXIgPSBUSElTX01PRFVMRTsKKwljaGlwLT5iYXNlID0gcGlwLT5maXJzdF9ncGlvOworCWNoaXAtPm5ncGlvID0gKHBpcC0+bGFzdF9ncGlvIC0gcGlwLT5maXJzdF9ncGlvKSArIDE7CisKKwlyZXR1cm4gZ3Bpb2NoaXBfYWRkKGNoaXApOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvaXJxLmMgYi9hcmNoL3NoL2tlcm5lbC9pcnEuYwppbmRleCA2NGI3NjkwLi4zZjEzNzJlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL3NoL2tlcm5lbC9pcnEuYwpAQCAtNTEsNyArNTEsNyBAQAogCQkJZ290byB1bmxvY2s7CiAJCXNlcV9wcmludGYocCwgIiUzZDogIixpKTsKIAkJZm9yX2VhY2hfb25saW5lX2NwdShqKQotCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9jcHUoaikuaXJxc1tpXSk7CisJCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXNfY3B1KGksIGopKTsKIAkJc2VxX3ByaW50ZihwLCAiICUxNHMiLCBpcnFfZGVzY1tpXS5jaGlwLT5uYW1lKTsKIAkJc2VxX3ByaW50ZihwLCAiLSUtOHMiLCBpcnFfZGVzY1tpXS5uYW1lKTsKIAkJc2VxX3ByaW50ZihwLCAiICAlcyIsIGFjdGlvbi0+bmFtZSk7CkBAIC0xMDYsNyArMTA2LDcgQEAKIAl9CiAjZW5kaWYKIAotCWlycSA9IGlycV9kZW11eChldnQyaXJxKGlycSkpOworCWlycSA9IGlycV9kZW11eChpbnRjX2V2dDJpcnEoaXJxKSk7CiAKICNpZmRlZiBDT05GSUdfSVJRU1RBQ0tTCiAJY3VyY3R4ID0gKHVuaW9uIGlycV9jdHggKiljdXJyZW50X3RocmVhZF9pbmZvKCk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9tYWNoaW5lX2tleGVjLmMgYi9hcmNoL3NoL2tlcm5lbC9tYWNoaW5lX2tleGVjLmMKaW5kZXggOTRkZjU2Yi4uN2VhMjcwNCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvbWFjaGluZV9rZXhlYy5jCisrKyBiL2FyY2gvc2gva2VybmVsL21hY2hpbmVfa2V4ZWMuYwpAQCAtMTQsMjEgKzE0LDIyIEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KICNpbmNsdWRlIDxsaW51eC9udW1hLmg+CisjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogCi10eXBlZGVmIE5PUkVUX1RZUEUgdm9pZCAoKnJlbG9jYXRlX25ld19rZXJuZWxfdCkoCi0JCQkJdW5zaWduZWQgbG9uZyBpbmRpcmVjdGlvbl9wYWdlLAotCQkJCXVuc2lnbmVkIGxvbmcgcmVib290X2NvZGVfYnVmZmVyLAotCQkJCXVuc2lnbmVkIGxvbmcgc3RhcnRfYWRkcmVzcywKLQkJCQl1bnNpZ25lZCBsb25nIHZicl9yZWcpIEFUVFJJQl9OT1JFVDsKK3R5cGVkZWYgdm9pZCAoKnJlbG9jYXRlX25ld19rZXJuZWxfdCkodW5zaWduZWQgbG9uZyBpbmRpcmVjdGlvbl9wYWdlLAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgcmVib290X2NvZGVfYnVmZmVyLAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnRfYWRkcmVzcyk7CiAKIGV4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIHJlbG9jYXRlX25ld19rZXJuZWxbXTsKIGV4dGVybiBjb25zdCB1bnNpZ25lZCBpbnQgcmVsb2NhdGVfbmV3X2tlcm5lbF9zaXplOwogZXh0ZXJuIHZvaWQgKmdkYl92YnJfdmVjdG9yOworZXh0ZXJuIHZvaWQgKnZicl9iYXNlOwogCiB2b2lkIG1hY2hpbmVfc2h1dGRvd24odm9pZCkKIHsKQEAgLTQ1LDYgKzQ2LDEyIEBACiAgKi8KIGludCBtYWNoaW5lX2tleGVjX3ByZXBhcmUoc3RydWN0IGtpbWFnZSAqaW1hZ2UpCiB7CisJLyogb2xkZXIgdmVyc2lvbnMgb2Yga2V4ZWMtdG9vbHMgYXJlIHBhc3NpbmcKKwkgKiB0aGUgekltYWdlIGVudHJ5IHBvaW50IGFzIGEgdmlydHVhbCBhZGRyZXNzLgorCSAqLworCWlmIChpbWFnZS0+c3RhcnQgIT0gUEhZU0FERFIoaW1hZ2UtPnN0YXJ0KSkKKwkJcmV0dXJuIC1FSU5WQUw7IC8qIHVwZ3JhZGUgeW91ciBrZXhlYy10b29scyAqLworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTczLDE3ICs4MCwzMyBAQAogICovCiB2b2lkIG1hY2hpbmVfa2V4ZWMoc3RydWN0IGtpbWFnZSAqaW1hZ2UpCiB7Ci0KIAl1bnNpZ25lZCBsb25nIHBhZ2VfbGlzdDsKIAl1bnNpZ25lZCBsb25nIHJlYm9vdF9jb2RlX2J1ZmZlcjsKLQl1bnNpZ25lZCBsb25nIHZicl9yZWc7CiAJcmVsb2NhdGVfbmV3X2tlcm5lbF90IHJuazsKKwl1bnNpZ25lZCBsb25nIGVudHJ5OworCXVuc2lnbmVkIGxvbmcgKnB0cjsKKwlpbnQgc2F2ZV9mdHJhY2VfZW5hYmxlZDsKIAotI2lmIGRlZmluZWQoQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MpCi0JdmJyX3JlZyA9ICgodW5zaWduZWQgbG9uZyApZ2RiX3Zicl92ZWN0b3IpIC0gMHgxMDA7Ci0jZWxzZQotCXZicl9yZWcgPSAweDgwMDAwMDAwOyAgLy8gZHVtbXkKKwkvKgorCSAqIE5pY2tlZCBmcm9tIHRoZSBtaXBzIHZlcnNpb24gb2YgbWFjaGluZV9rZXhlYygpOgorCSAqIFRoZSBnZW5lcmljIGtleGVjIGNvZGUgYnVpbGRzIGEgcGFnZSBsaXN0IHdpdGggcGh5c2ljYWwKKwkgKiBhZGRyZXNzZXMuIFVzZSBwaHlzX3RvX3ZpcnQoKSB0byBjb252ZXJ0IHRoZW0gdG8gdmlydHVhbC4KKwkgKi8KKwlmb3IgKHB0ciA9ICZpbWFnZS0+aGVhZDsgKGVudHJ5ID0gKnB0cikgJiYgIShlbnRyeSAmIElORF9ET05FKTsKKwkgICAgIHB0ciA9IChlbnRyeSAmIElORF9JTkRJUkVDVElPTikgPworCSAgICAgICBwaHlzX3RvX3ZpcnQoZW50cnkgJiBQQUdFX01BU0spIDogcHRyICsgMSkgeworCQlpZiAoKnB0ciAmIElORF9TT1VSQ0UgfHwgKnB0ciAmIElORF9JTkRJUkVDVElPTiB8fAorCQkgICAgKnB0ciAmIElORF9ERVNUSU5BVElPTikKKwkJCSpwdHIgPSAodW5zaWduZWQgbG9uZykgcGh5c190b192aXJ0KCpwdHIpOworCX0KKworI2lmZGVmIENPTkZJR19LRVhFQ19KVU1QCisJaWYgKGltYWdlLT5wcmVzZXJ2ZV9jb250ZXh0KQorCQlzYXZlX3Byb2Nlc3Nvcl9zdGF0ZSgpOwogI2VuZGlmCisKKwlzYXZlX2Z0cmFjZV9lbmFibGVkID0gX19mdHJhY2VfZW5hYmxlZF9zYXZlKCk7CisKIAkvKiBJbnRlcnJ1cHRzIGFyZW4ndCBhY2NlcHRhYmxlIHdoaWxlIHdlIHJlYm9vdCAqLwogCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAKQEAgLTk3LDEyICsxMjAsMzcgQEAKIAltZW1jcHkoKHZvaWQgKilyZWJvb3RfY29kZV9idWZmZXIsIHJlbG9jYXRlX25ld19rZXJuZWwsCiAJCQkJCQlyZWxvY2F0ZV9uZXdfa2VybmVsX3NpemUpOwogCi0gICAgICAgIGtleGVjX2luZm8oaW1hZ2UpOworCWtleGVjX2luZm8oaW1hZ2UpOwogCWZsdXNoX2NhY2hlX2FsbCgpOwogCisjaWYgZGVmaW5lZChDT05GSUdfU0hfU1RBTkRBUkRfQklPUykKKwlhc20gdm9sYXRpbGUoImxkYyAlMCwgdmJyIiA6CisJCSAgICAgOiAiciIgKCgodW5zaWduZWQgbG9uZykgZ2RiX3Zicl92ZWN0b3IpIC0gMHgxMDApCisJCSAgICAgOiAibWVtb3J5Iik7CisjZW5kaWYKKwogCS8qIG5vdyBjYWxsIGl0ICovCiAJcm5rID0gKHJlbG9jYXRlX25ld19rZXJuZWxfdCkgcmVib290X2NvZGVfYnVmZmVyOwotCSgqcm5rKShwYWdlX2xpc3QsIHJlYm9vdF9jb2RlX2J1ZmZlciwgUDJTRUdBRERSKGltYWdlLT5zdGFydCksIHZicl9yZWcpOworCSgqcm5rKShwYWdlX2xpc3QsIHJlYm9vdF9jb2RlX2J1ZmZlciwKKwkgICAgICAgKHVuc2lnbmVkIGxvbmcpcGh5c190b192aXJ0KGltYWdlLT5zdGFydCkpOworCisjaWZkZWYgQ09ORklHX0tFWEVDX0pVTVAKKwlhc20gdm9sYXRpbGUoImxkYyAlMCwgdmJyIiA6IDogInIiICgmdmJyX2Jhc2UpIDogIm1lbW9yeSIpOworCisJaWYgKGltYWdlLT5wcmVzZXJ2ZV9jb250ZXh0KQorCQlyZXN0b3JlX3Byb2Nlc3Nvcl9zdGF0ZSgpOworCisJLyogQ29udmVydCBwYWdlIGxpc3QgYmFjayB0byBwaHlzaWNhbCBhZGRyZXNzZXMsIHdoYXQgYSBtZXNzLiAqLworCWZvciAocHRyID0gJmltYWdlLT5oZWFkOyAoZW50cnkgPSAqcHRyKSAmJiAhKGVudHJ5ICYgSU5EX0RPTkUpOworCSAgICAgcHRyID0gKCpwdHIgJiBJTkRfSU5ESVJFQ1RJT04pID8KKwkgICAgICAgcGh5c190b192aXJ0KCpwdHIgJiBQQUdFX01BU0spIDogcHRyICsgMSkgeworCQlpZiAoKnB0ciAmIElORF9TT1VSQ0UgfHwgKnB0ciAmIElORF9JTkRJUkVDVElPTiB8fAorCQkgICAgKnB0ciAmIElORF9ERVNUSU5BVElPTikKKwkJCSpwdHIgPSB2aXJ0X3RvX3BoeXMoKnB0cik7CisJfQorI2VuZGlmCisKKwlfX2Z0cmFjZV9lbmFibGVkX3Jlc3RvcmUoc2F2ZV9mdHJhY2VfZW5hYmxlZCk7CiB9CiAKIHZvaWQgYXJjaF9jcmFzaF9zYXZlX3ZtY29yZWluZm8odm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3JlbG9jYXRlX2tlcm5lbC5TIGIvYXJjaC9zaC9rZXJuZWwvcmVsb2NhdGVfa2VybmVsLlMKaW5kZXggYzY2Y2IzMi4uZmNjOTkzNCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvcmVsb2NhdGVfa2VybmVsLlMKKysrIGIvYXJjaC9zaC9rZXJuZWwvcmVsb2NhdGVfa2VybmVsLlMKQEAgLTQsNiArNCw4IEBACiAgKgogICogTEFORElTSy9zaDQgaXMgc3VwcG9ydGVkLiBNYXliZSwgU0ggYXJjaHRlY3R1cmUgd29ya3Mgd2VsbC4KICAqCisgKiAyMDA5LTAzLTE4IE1hZ251cyBEYW1tIC0gQWRkZWQgS2V4ZWMgSnVtcCBzdXBwb3J0CisgKgogICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCiAgKiBWZXJzaW9uIDIuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBmb3IgbW9yZSBkZXRhaWxzLgogICovCkBAIC0xNiwyMyArMTgsMTQxIEBACiAJLyogcjQgPSBpbmRpcmVjdGlvbl9wYWdlICAgKi8KIAkvKiByNSA9IHJlYm9vdF9jb2RlX2J1ZmZlciAqLwogCS8qIHI2ID0gc3RhcnRfYWRkcmVzcyAgICAgICovCi0JLyogcjcgPSB2YnJfcmVnICAgICAgICAgICAgKi8KIAotCW1vdi5sCTEwZixyOAkgIC8qIFBBR0VfU0laRSAqLwotCW1vdi5sCTExZixyOSAgICAvKiBQMlNFRyAqLworCW1vdi5sCTEwZiwgcjAJCS8qIFBBR0VfU0laRSAqLworCWFkZAlyNSwgcjAJCS8qIHNldHVwIG5ldyBzdGFjayBhdCBlbmQgb2YgY29udHJvbCBwYWdlICovCiAKLQkvKiAgc3RhY2sgc2V0dGluZyAqLwotCWFkZAlyOCxyNQotCW1vdglyNSxyMTUKKwkvKiBzYXZlIHIxNS0+cjggdG8gbmV3IHN0YWNrICovCisJbW92LmwJcjE1LCBALXIwCisJbW92CXIwLCByMTUKKwltb3YubAlyMTQsIEAtcjE1CisJbW92LmwJcjEzLCBALXIxNQorCW1vdi5sCXIxMiwgQC1yMTUKKwltb3YubAlyMTEsIEAtcjE1CisJbW92LmwJcjEwLCBALXIxNQorCW1vdi5sCXI5LCBALXIxNQorCW1vdi5sCXI4LCBALXIxNQogCisJLyogc2F2ZSBvdGhlciByYW5kb20gcmVnaXN0ZXJzICovCisJc3RzLmwJbWFjbCwgQC1yMTUKKwlzdHMubAltYWNoLCBALXIxNQorCXN0Yy5sCWdiciwgQC1yMTUKKwlzdGMubAlzc3IsIEAtcjE1CisJc3RjLmwJc3IsIEAtcjE1CisJc3RzLmwJcHIsIEAtcjE1CisJc3RjLmwJc3BjLCBALXIxNQorCisJLyogc3dpdGNoIHRvIGJhbmsxIGFuZCBzYXZlIHI3LT5yMCAqLworCW1vdi5sCTEyZiwgcjkKKwlzdGMJc3IsIHI4CisJb3IJcjksIHI4CisJbGRjCXI4LCBzcgorCW1vdi5sCXI3LCBALXIxNQorCW1vdi5sCXI2LCBALXIxNQorCW1vdi5sCXI1LCBALXIxNQorCW1vdi5sCXI0LCBALXIxNQorCW1vdi5sCXIzLCBALXIxNQorCW1vdi5sCXIyLCBALXIxNQorCW1vdi5sCXIxLCBALXIxNQorCW1vdi5sCXIwLCBALXIxNQorCisJLyogc3dpdGNoIHRvIGJhbmswIGFuZCBzYXZlIHI3LT5yMCAqLworCW1vdi5sCTEyZiwgcjkKKwlub3QJcjksIHI5CisJc3RjCXNyLCByOAorCWFuZAlyOSwgcjgKKwlsZGMJcjgsIHNyCisJbW92LmwJcjcsIEAtcjE1CisJbW92LmwJcjYsIEAtcjE1CisJbW92LmwJcjUsIEAtcjE1CisJbW92LmwJcjQsIEAtcjE1CisJbW92LmwJcjMsIEAtcjE1CisJbW92LmwJcjIsIEAtcjE1CisJbW92LmwJcjEsIEAtcjE1CisJbW92LmwJcjAsIEAtcjE1CisKKwltb3YubAlyNCwgQC1yMTUJLyogc2F2ZSBpbmRpcmVjdGlvbiBwYWdlIGFnYWluICovCisKKwlic3IJc3dhcF9wYWdlcwkvKiBzd2FwIHBhZ2VzIGJlZm9yZSBqdW1waW5nIHRvIG5ldyBrZXJuZWwgKi8KKwkgbm9wCisKKwltb3ZhCTExZiwgcjAKKwltb3YubAlyMTUsIEByMAkvKiBzYXZlIHBvaW50ZXIgdG8gc3RhY2sgKi8KKworCWpzcglAcjYJCS8qIGhhbmQgb3ZlciBjb250cm9sIHRvIG5ldyBrZXJuZWwgKi8KKwkgbm9wCisKKwltb3YubAkxMWYsIHIxNQkvKiBnZXQgcG9pbnRlciB0byBzdGFjayAqLworCW1vdi5sCUByMTUrLCByNAkvKiByZXN0b3JlIHI0IHRvIGdldCBpbmRpcmVjdGlvbiBwYWdlICovCisKKwlic3IJc3dhcF9wYWdlcwkvKiBzd2FwIHBhZ2VzIGJhY2sgdG8gcHJldmlvdXMgc3RhdGUgKi8KKwkgbm9wCisKKwkvKiBtYWtlIHN1cmUgYmFuazAgaXMgYWN0aXZlIGFuZCByZXN0b3JlIHIwLT5yNyAqLworCW1vdi5sCTEyZiwgcjkKKwlub3QJcjksIHI5CisJc3RjCXNyLCByOAorCWFuZAlyOSwgcjgKKwlsZGMJcjgsIHNyCisJbW92LmwJQHIxNSssIHIwCisJbW92LmwJQHIxNSssIHIxCisJbW92LmwJQHIxNSssIHIyCisJbW92LmwJQHIxNSssIHIzCisJbW92LmwJQHIxNSssIHI0CisJbW92LmwJQHIxNSssIHI1CisJbW92LmwJQHIxNSssIHI2CisJbW92LmwJQHIxNSssIHI3CisKKwkvKiBzd2l0Y2ggdG8gYmFuazEgYW5kIHJlc3RvcmUgcjAtPnI3ICovCisJbW92LmwJMTJmLCByOQorCXN0YwlzciwgcjgKKwlvcglyOSwgcjgKKwlsZGMJcjgsIHNyCisJbW92LmwJQHIxNSssIHIwCisJbW92LmwJQHIxNSssIHIxCisJbW92LmwJQHIxNSssIHIyCisJbW92LmwJQHIxNSssIHIzCisJbW92LmwJQHIxNSssIHI0CisJbW92LmwJQHIxNSssIHI1CisJbW92LmwJQHIxNSssIHI2CisJbW92LmwJQHIxNSssIHI3CisKKwkvKiBzd2l0Y2ggYmFjayB0byBiYW5rMCAqLworCW1vdi5sCTEyZiwgcjkKKwlub3QJcjksIHI5CisJc3RjCXNyLCByOAorCWFuZAlyOSwgcjgKKwlsZGMJcjgsIHNyCisKKwkvKiByZXN0b3JlIG90aGVyIHJhbmRvbSByZWdpc3RlcnMgKi8KKwlsZGMubAlAcjE1Kywgc3BjCisJbGRzLmwJQHIxNSssIHByCisJbGRjLmwJQHIxNSssIHNyCisJbGRjLmwJQHIxNSssIHNzcgorCWxkYy5sCUByMTUrLCBnYnIKKwlsZHMubAlAcjE1KywgbWFjaAorCWxkcy5sCUByMTUrLCBtYWNsCisKKwkvKiByZXN0b3JlIHI4LT5yMTUgKi8KKwltb3YubAlAcjE1KywgcjgKKwltb3YubAlAcjE1KywgcjkKKwltb3YubAlAcjE1KywgcjEwCisJbW92LmwJQHIxNSssIHIxMQorCW1vdi5sCUByMTUrLCByMTIKKwltb3YubAlAcjE1KywgcjEzCisJbW92LmwJQHIxNSssIHIxNAorCW1vdi5sCUByMTUrLCByMTUKKwlydHMKKwkgbm9wCisKK3N3YXBfcGFnZXM6CiAJYnJhCTFmCi0JbW92CXI0LHIwCSAgLyogY21kID0gaW5kaXJlY3Rpb25fcGFnZSAqLworCSBtb3YJcjQscjAJICAvKiBjbWQgPSBpbmRpcmVjdGlvbl9wYWdlICovCiAwOgogCW1vdi5sCUByNCsscjAJICAvKiBjbWQgPSAqaW5kKysgKi8KIAotMToJLyogYWRkciA9IChjbWQgfCBQMlNFRykgJiAweGZmZmZmZmYwICovCisxOgkvKiBhZGRyID0gY21kICYgMHhmZmZmZmZmMCAqLwogCW1vdglyMCxyMgotCW9yCXI5LHIyCiAJbW92CSMtMTYscjEKIAlhbmQJcjEscjIKIApAQCAtNDAsNTcgKzE2MCw3MCBAQAogCXRzdAkjMSxyMAogCWJ0CTJmCiAJYnJhCTBiCi0JbW92CXIyLHI1CisJIG1vdglyMixyNQogCiAyOgkvKiBlbHNlIGlmKGNtZCAmIElORF9JTkRJUkVDVElPTikgaW5kID0gYWRkciAgKi8KIAl0c3QJIzIscjAKIAlidAkzZgogCWJyYQkwYgotCW1vdglyMixyNAorCSBtb3YJcjIscjQKIAotMzoJLyogZWxzZSBpZihjbWQgJiBJTkRfRE9ORSkgZ290byA2ICAqLworMzoJLyogZWxzZSBpZihjbWQgJiBJTkRfRE9ORSkgcmV0dXJuICovCiAJdHN0CSM0LHIwCiAJYnQJNGYKLQlicmEJNmYKLQlub3AKKwlydHMKKwkgbm9wCiAKIDQ6CS8qIGVsc2UgaWYoY21kICYgSU5EX1NPVVJDRSkgbWVtY3B5KGRzdCxhZGRyLFBBR0VfU0laRSkgKi8KIAl0c3QJIzgscjAKIAlidAkwYgogCi0JbW92CXI4LHIzCisJbW92LmwJMTBmLHIzCSAgLyogUEFHRV9TSVpFICovCiAJc2hscjIJcjMKIAlzaGxyMglyMwogNToKIAlkdAlyMwotCW1vdi5sCUByMisscjEgICAvKiAgMTZuKzAgKi8KLQltb3YubAlyMSxAcjUKLQlhZGQJIzQscjUKLQltb3YubAlAcjIrLHIxCSAgLyogIDE2bis0ICovCi0JbW92LmwJcjEsQHI1Ci0JYWRkCSM0LHI1Ci0JbW92LmwJQHIyKyxyMSAgIC8qICAxNm4rOCAqLwotCW1vdi5sCXIxLEByNQotCWFkZAkjNCxyNQotCW1vdi5sCUByMisscjEgICAvKiAgMTZuKzEyICovCi0JbW92LmwJcjEsQHI1Ci0JYWRkCSM0LHI1CisKKwkvKiByZWd1bGFyIGtleGVjIGp1c3Qgb3ZlcndyaXRlcyB0aGUgZGVzdGluYXRpb24gcGFnZQorCSAqIHdpdGggdGhlIGNvbnRlbnRzIG9mIHRoZSBzb3VyY2UgcGFnZS4KKwkgKiBmb3IgdGhlIGtleGVjIGp1bXAgY2FzZSB3ZSBuZWVkIHRvIHN3YXAgdGhlIGNvbnRlbnRzCisJICogb2YgdGhlIHBhZ2VzLgorCSAqIHRvIGtlZXAgaXQgc2ltcGxlIHN3YXAgdGhlIGNvbnRlbnRzIGZvciBib3RoIGNhc2VzLgorCSAqLworCW1vdi5sCUAoMCwgcjIpLCByOAorCW1vdi5sCUAoMCwgcjUpLCByMQorCW1vdi5sCXI4LCBAKDAsIHI1KQorCW1vdi5sCXIxLCBAKDAsIHIyKQorCisJbW92LmwJQCg0LCByMiksIHI4CisJbW92LmwJQCg0LCByNSksIHIxCisJbW92LmwJcjgsIEAoNCwgcjUpCisJbW92LmwJcjEsIEAoNCwgcjIpCisKKwltb3YubAlAKDgsIHIyKSwgcjgKKwltb3YubAlAKDgsIHI1KSwgcjEKKwltb3YubAlyOCwgQCg4LCByNSkKKwltb3YubAlyMSwgQCg4LCByMikKKworCW1vdi5sCUAoMTIsIHIyKSwgcjgKKwltb3YubAlAKDEyLCByNSksIHIxCisJbW92LmwJcjgsIEAoMTIsIHI1KQorCW1vdi5sCXIxLCBAKDEyLCByMikKKworCWFkZAkjMTYscjUKKwlhZGQJIzE2LHIyCiAJYmYJNWIKIAogCWJyYQkwYgotCW5vcAotNjoKLSNpZmRlZiBDT05GSUdfU0hfU1RBTkRBUkRfQklPUwotCWxkYyAgIHI3LCB2YnIKLSNlbmRpZgotCWptcCBAcjYKLQlub3AKKwkgbm9wCiAKIAkuYWxpZ24gMgogMTA6CiAJLmxvbmcJUEFHRV9TSVpFCiAxMToKLQkubG9uZwlQMlNFRworCS5sb25nCTAKKzEyOgorCS5sb25nCTB4MjAwMDAwMDAgISBSQj0xCiAKIHJlbG9jYXRlX25ld19rZXJuZWxfZW5kOgogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9zaC9rZXJuZWwvc2V0dXAuYwppbmRleCAzNzBkMmNmLi4yNGM2MDI1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvc2gva2VybmVsL3NldHVwLmMKQEAgLTQzMiw2ICs0MzIsNyBAQAogCVtDUFVfU0g3NzYzXQk9ICJTSDc3NjMiLAlbQ1BVX1NINzc3MF0JPSAiU0g3NzcwIiwKIAlbQ1BVX1NINzc4MF0JPSAiU0g3NzgwIiwJW0NQVV9TSDc3ODFdCT0gIlNINzc4MSIsCiAJW0NQVV9TSDczNDNdCT0gIlNINzM0MyIsCVtDUFVfU0g3Nzg1XQk9ICJTSDc3ODUiLAorCVtDUFVfU0g3Nzg2XQk9ICJTSDc3ODYiLAogCVtDUFVfU0g3NzIyXQk9ICJTSDc3MjIiLAlbQ1BVX1NIWDNdCT0gIlNILVgzIiwKIAlbQ1BVX1NINV8xMDFdCT0gIlNINS0xMDEiLAlbQ1BVX1NINV8xMDNdCT0gIlNINS0xMDMiLAogCVtDUFVfTVhHXQk9ICJNWC1HIiwJW0NQVV9TSDc3MjNdCT0gIlNINzcyMyIsCkBAIC00NDgsNyArNDQ5LDcgQEAKIC8qIFN5bWJvbGljIENQVSBmbGFncywga2VlcCBpbiBzeW5jIHdpdGggYXNtL2NwdS1mZWF0dXJlcy5oICovCiBzdGF0aWMgY29uc3QgY2hhciAqY3B1X2ZsYWdzW10gPSB7CiAJIm5vbmUiLCAiZnB1IiwgInAyZmx1c2giLCAibW11YXNzb2MiLCAiZHNwIiwgInBlcmZjdHIiLAotCSJwdGVhIiwgImxsc2MiLCAibDIiLCAib3AzMiIsIE5VTEwKKwkicHRlYSIsICJsbHNjIiwgImwyIiwgIm9wMzIiLCAicHRlYWV4IiwgTlVMTAogfTsKIAogc3RhdGljIHZvaWQgc2hvd19jcHVmbGFncyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBzaF9jcHVpbmZvICpjKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvc3dzdXNwLmMgYi9hcmNoL3NoL2tlcm5lbC9zd3N1c3AuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmI2NGEwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9rZXJuZWwvc3dzdXNwLmMKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIHN3c3VzcC5jIC0gU3VwZXJIIGhpYmVybmF0aW9uIHN1cHBvcnQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTWFnbnVzIERhbW0KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KKyNpbmNsdWRlIDxhc20vc3VzcGVuZC5oPgorI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgorI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL2ZwdS5oPgorCitzdHJ1Y3Qgc3dzdXNwX2FyY2hfcmVncyBzd3N1c3BfYXJjaF9yZWdzX2NwdTA7CisKK2ludCBwZm5faXNfbm9zYXZlKHVuc2lnbmVkIGxvbmcgcGZuKQoreworCXVuc2lnbmVkIGxvbmcgYmVnaW5fcGZuID0gX19wYSgmX19ub3NhdmVfYmVnaW4pID4+IFBBR0VfU0hJRlQ7CisJdW5zaWduZWQgbG9uZyBlbmRfcGZuID0gUEFHRV9BTElHTihfX3BhKCZfX25vc2F2ZV9lbmQpKSA+PiBQQUdFX1NISUZUOworCisJcmV0dXJuIChwZm4gPj0gYmVnaW5fcGZuKSAmJiAocGZuIDwgZW5kX3Bmbik7Cit9CisKK3ZvaWQgc2F2ZV9wcm9jZXNzb3Jfc3RhdGUodm9pZCkKK3sKKwlpbml0X2ZwdShjdXJyZW50KTsKK30KKwordm9pZCByZXN0b3JlX3Byb2Nlc3Nvcl9zdGF0ZSh2b2lkKQoreworCWxvY2FsX2ZsdXNoX3RsYl9hbGwoKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3RpbWVfMzIuYyBiL2FyY2gvc2gva2VybmVsL3RpbWVfMzIuYwppbmRleCA4NDU3ZjgzLi5jMzRlMWUwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC90aW1lXzMyLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvdGltZV8zMi5jCkBAIC00MSwxNCArNDEsNiBAQAogCXJldHVybiAwOwogfQogCi0vKgotICogTnVsbCBoaWdoIHByZWNpc2lvbiB0aW1lciBmdW5jdGlvbnMgZm9yIHN5c3RlbXMgbGFja2luZyBvbmUuCi0gKi8KLXN0YXRpYyBjeWNsZV90IG51bGxfaHB0X3JlYWQodm9pZCkKLXsKLQlyZXR1cm4gMDsKLX0KLQogdm9pZCAoKnJ0Y19zaF9nZXRfdGltZSkoc3RydWN0IHRpbWVzcGVjICopID0gbnVsbF9ydGNfZ2V0X3RpbWU7CiBpbnQgKCpydGNfc2hfc2V0X3RpbWUpKGNvbnN0IHRpbWVfdCkgPSBudWxsX3J0Y19zZXRfdGltZTsKIApAQCAtMTEyLDcgKzEwNCw2IEBACiBFWFBPUlRfU1lNQk9MKGRvX3NldHRpbWVvZmRheSk7CiAjZW5kaWYgLyogIUNPTkZJR19HRU5FUklDX1RJTUUgKi8KIAotI2lmbmRlZiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUwogLyogbGFzdCB0aW1lIHRoZSBSVEMgY2xvY2sgZ290IHVwZGF0ZWQgKi8KIHN0YXRpYyBsb25nIGxhc3RfcnRjX3VwZGF0ZTsKIApAQCAtMTU2LDcgKzE0Nyw2IEBACiAJdXBkYXRlX3Byb2Nlc3NfdGltZXModXNlcl9tb2RlKGdldF9pcnFfcmVncygpKSk7CiAjZW5kaWYKIH0KLSNlbmRpZiAvKiAhQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFMgKi8KIAogI2lmZGVmIENPTkZJR19QTQogaW50IHRpbWVyX3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQpAQCAtMTg5LDcgKzE3OSwxMiBAQAogCiBzdGF0aWMgaW50IF9faW5pdCB0aW1lcl9pbml0X3N5c2ZzKHZvaWQpCiB7Ci0JaW50IHJldCA9IHN5c2Rldl9jbGFzc19yZWdpc3RlcigmdGltZXJfc3lzY2xhc3MpOworCWludCByZXQ7CisKKwlpZiAoIXN5c190aW1lcikKKwkJcmV0dXJuIDA7CisKKwlyZXQgPSBzeXNkZXZfY2xhc3NfcmVnaXN0ZXIoJnRpbWVyX3N5c2NsYXNzKTsKIAlpZiAocmV0ICE9IDApCiAJCXJldHVybiByZXQ7CiAKQEAgLTIwMCw0MiArMTk1LDIxIEBACiAKIHZvaWQgKCpib2FyZF90aW1lX2luaXQpKHZvaWQpOwogCi0vKgotICogU2hhbWVsZXNzbHkgYmFzZWQgb24gdGhlIE1JUFMgYW5kIFNwYXJjNjQgd29yay4KLSAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcgdGltZXJfdGlja3NfcGVyX25zZWNfcXVvdGllbnQgX19yZWFkX21vc3RseTsKLXVuc2lnbmVkIGxvbmcgc2hfaHB0X2ZyZXF1ZW5jeSA9IDA7Ci0KLSNkZWZpbmUgTlNFQ19QRVJfQ1lDX1NISUZUCTEwCi0KLXN0YXRpYyBzdHJ1Y3QgY2xvY2tzb3VyY2UgY2xvY2tzb3VyY2Vfc2ggPSB7CitzdHJ1Y3QgY2xvY2tzb3VyY2UgY2xvY2tzb3VyY2Vfc2ggPSB7CiAJLm5hbWUJCT0gIlN1cGVySCIsCi0JLnJhdGluZwkJPSAyMDAsCi0JLm1hc2sJCT0gQ0xPQ0tTT1VSQ0VfTUFTSygzMiksCi0JLnJlYWQJCT0gbnVsbF9ocHRfcmVhZCwKLQkuc2hpZnQJCT0gMTYsCi0JLmZsYWdzCQk9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTLAogfTsKIAotc3RhdGljIHZvaWQgX19pbml0IGluaXRfc2hfY2xvY2tzb3VyY2Uodm9pZCkKLXsKLQlpZiAoIXNoX2hwdF9mcmVxdWVuY3kgfHwgY2xvY2tzb3VyY2Vfc2gucmVhZCA9PSBudWxsX2hwdF9yZWFkKQotCQlyZXR1cm47Ci0KLQljbG9ja3NvdXJjZV9zaC5tdWx0ID0gY2xvY2tzb3VyY2VfaHoybXVsdChzaF9ocHRfZnJlcXVlbmN5LAotCQkJCQkJICBjbG9ja3NvdXJjZV9zaC5zaGlmdCk7Ci0KLQl0aW1lcl90aWNrc19wZXJfbnNlY19xdW90aWVudCA9Ci0JCWNsb2Nrc291cmNlX2h6Mm11bHQoc2hfaHB0X2ZyZXF1ZW5jeSwgTlNFQ19QRVJfQ1lDX1NISUZUKTsKLQotCWNsb2Nrc291cmNlX3JlZ2lzdGVyKCZjbG9ja3NvdXJjZV9zaCk7Ci19Ci0KICNpZmRlZiBDT05GSUdfR0VORVJJQ19USU1FCiB1bnNpZ25lZCBsb25nIGxvbmcgc2NoZWRfY2xvY2sodm9pZCkKIHsKLQl1bnNpZ25lZCBsb25nIGxvbmcgdGlja3MgPSBjbG9ja3NvdXJjZV9zaC5yZWFkKCk7Ci0JcmV0dXJuICh0aWNrcyAqIHRpbWVyX3RpY2tzX3Blcl9uc2VjX3F1b3RpZW50KSA+PiBOU0VDX1BFUl9DWUNfU0hJRlQ7CisJdW5zaWduZWQgbG9uZyBsb25nIGN5Y2xlczsKKworCS8qIGppZmZpZXMgYmFzZWQgc2NoZWRfY2xvY2sgaWYgbm8gY2xvY2tzb3VyY2UgaXMgaW5zdGFsbGVkICovCisJaWYgKCFjbG9ja3NvdXJjZV9zaC5yYXRpbmcpCisJCXJldHVybiAodW5zaWduZWQgbG9uZyBsb25nKWppZmZpZXMgKiAoTlNFQ19QRVJfU0VDIC8gSFopOworCisJY3ljbGVzID0gY2xvY2tzb3VyY2Vfc2gucmVhZCgpOworCXJldHVybiBjeWMybnMoJmNsb2Nrc291cmNlX3NoLCBjeWNsZXMpOwogfQogI2VuZGlmCiAKQEAgLTI1OSwxNyArMjMzLDggQEAKIAkgKiBpbml0aWFsaXplZCBmb3IgdXMuCiAJICovCiAJc3lzX3RpbWVyID0gZ2V0X3N5c190aW1lcigpOworCWlmICh1bmxpa2VseSghc3lzX3RpbWVyKSkKKwkJcGFuaWMoIlN5c3RlbSB0aW1lciBtaXNzaW5nLlxuIik7CisKIAlwcmludGsoS0VSTl9JTkZPICJVc2luZyAlcyBmb3Igc3lzdGVtIHRpbWVyXG4iLCBzeXNfdGltZXItPm5hbWUpOwotCi0KLQlpZiAoc3lzX3RpbWVyLT5vcHMtPnJlYWQpCi0JCWNsb2Nrc291cmNlX3NoLnJlYWQgPSBzeXNfdGltZXItPm9wcy0+cmVhZDsKLQotCWluaXRfc2hfY2xvY2tzb3VyY2UoKTsKLQotCWlmIChzaF9ocHRfZnJlcXVlbmN5KQotCQlwcmludGsoIlVzaW5nICVsdS4lMDNsdSBNSHogaGlnaCBwcmVjaXNpb24gdGltZXIuXG4iLAotCQkgICAgICAgKChzaF9ocHRfZnJlcXVlbmN5ICsgNTAwKSAvIDEwMDApIC8gMTAwMCwKLQkJICAgICAgICgoc2hfaHB0X2ZyZXF1ZW5jeSArIDUwMCkgLyAxMDAwKSAlIDEwMDApOwotCiB9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC90aW1lcnMvdGltZXItbXR1Mi5jIGIvYXJjaC9zaC9rZXJuZWwvdGltZXJzL3RpbWVyLW10dTIuYwppbmRleCBjM2QyMzdlLi45YTc3YWU4IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC90aW1lcnMvdGltZXItbXR1Mi5jCisrKyBiL2FyY2gvc2gva2VybmVsL3RpbWVycy90aW1lci1tdHUyLmMKQEAgLTM1LDcgKzM1LDggQEAKICNkZWZpbmUgTVRVMl9UU1JfMQkweGZmZmU0Mzg1CiAjZGVmaW5lIE1UVTJfVENOVF8xCTB4ZmZmZTQzODYJLyogMTYtYml0IGNvdW50ZXIgKi8KIAotI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzIwMSkKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDEpIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDMpCiAjZGVmaW5lIE1UVTJfVEdSQV8xCTB4ZmZmZTQzODgKICNlbHNlCiAjZGVmaW5lIE1UVTJfVEdSQV8xCTB4ZmZmZTQzOGEKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3RpbWVycy90aW1lci10bXUuYyBiL2FyY2gvc2gva2VybmVsL3RpbWVycy90aW1lci10bXUuYwppbmRleCAwZGIzZjk1Li4xMGI1YTZmIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC90aW1lcnMvdGltZXItdG11LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvdGltZXJzL3RpbWVyLXRtdS5jCkBAIC0xNDYsNyArMTQ2LDE0IEBACiAJX3RtdV9jbGVhcl9zdGF0dXMoVE1VMCk7CiAJX3RtdV9zZXRfaXJxKFRNVTAsdG11MF9jbG9ja2V2ZW50Lm1vZGUgIT0gQ0xPQ0tfRVZUX01PREVfT05FU0hPVCk7CiAKLQlldnQtPmV2ZW50X2hhbmRsZXIoZXZ0KTsKKwlzd2l0Y2ggKHRtdTBfY2xvY2tldmVudC5tb2RlKSB7CisJY2FzZSBDTE9DS19FVlRfTU9ERV9PTkVTSE9UOgorCWNhc2UgQ0xPQ0tfRVZUX01PREVfUEVSSU9ESUM6CisJCWV2dC0+ZXZlbnRfaGFuZGxlcihldnQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CkBAIC0yMzcsNiArMjQ0LDcgQEAKICAgICAhZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIxKSAmJiBcCiAgICAgIWRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MCkgJiYgXAogICAgICFkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUpICYmIFwKKyAgICAhZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg2KSAmJiBcCiAgICAgIWRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NIWDMpCiAJY3RybF9vdXRiKFRNVV9UT0NSX0lOSVQsIFRNVV9UT0NSKTsKICNlbmRpZgpAQCAtMjU0LDcgKzI2MiwxNCBAQAogCiAJX3RtdV9zdGFydChUTVUxKTsKIAotCXNoX2hwdF9mcmVxdWVuY3kgPSBjbGtfZ2V0X3JhdGUoJnRtdTFfY2xrKTsKKwljbG9ja3NvdXJjZV9zaC5yYXRpbmcgPSAyMDA7CisJY2xvY2tzb3VyY2Vfc2gubWFzayA9IENMT0NLU09VUkNFX01BU0soMzIpOworCWNsb2Nrc291cmNlX3NoLnJlYWQgPSB0bXVfdGltZXJfcmVhZDsKKwljbG9ja3NvdXJjZV9zaC5zaGlmdCA9IDEwOworCWNsb2Nrc291cmNlX3NoLm11bHQgPSBjbG9ja3NvdXJjZV9oejJtdWx0KGNsa19nZXRfcmF0ZSgmdG11MV9jbGspLAorCQkJCQkJICBjbG9ja3NvdXJjZV9zaC5zaGlmdCk7CisJY2xvY2tzb3VyY2Vfc2guZmxhZ3MgPSBDTE9DS19TT1VSQ0VfSVNfQ09OVElOVU9VUzsKKwljbG9ja3NvdXJjZV9yZWdpc3RlcigmY2xvY2tzb3VyY2Vfc2gpOwogCiAJdG11MF9jbG9ja2V2ZW50Lm11bHQgPSBkaXZfc2MoZnJlcXVlbmN5LCBOU0VDX1BFUl9TRUMsCiAJCQkJICAgICAgdG11MF9jbG9ja2V2ZW50LnNoaWZ0KTsKQEAgLTI2NCw2ICsyNzksNyBAQAogCQkJY2xvY2tldmVudF9kZWx0YTJucygxLCAmdG11MF9jbG9ja2V2ZW50KTsKIAogCXRtdTBfY2xvY2tldmVudC5jcHVtYXNrID0gY3B1bWFza19vZigwKTsKKwl0bXUwX2Nsb2NrZXZlbnQucmF0aW5nID0gMTAwOwogCiAJY2xvY2tldmVudHNfcmVnaXN0ZXJfZGV2aWNlKCZ0bXUwX2Nsb2NrZXZlbnQpOwogCkBAIC0yNzQsNyArMjkwLDYgQEAKIAkuaW5pdAkJPSB0bXVfdGltZXJfaW5pdCwKIAkuc3RhcnQJCT0gdG11X3RpbWVyX3N0YXJ0LAogCS5zdG9wCQk9IHRtdV90aW1lcl9zdG9wLAotCS5yZWFkCQk9IHRtdV90aW1lcl9yZWFkLAogfTsKIAogc3RydWN0IHN5c190aW1lciB0bXVfdGltZXIgPSB7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC92bWxpbnV4XzMyLmxkcy5TIGIvYXJjaC9zaC9rZXJuZWwvdm1saW51eF8zMi5sZHMuUwppbmRleCA3YjRiODJiZC4uZDBiMmE3MSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvdm1saW51eF8zMi5sZHMuUworKysgYi9hcmNoL3NoL2tlcm5lbC92bWxpbnV4XzMyLmxkcy5TCkBAIC0xNSw3ICsxNSwxMCBAQAogRU5UUlkoX3N0YXJ0KQogU0VDVElPTlMKIHsKLSNpZmRlZiBDT05GSUdfMzJCSVQKKyNpZmRlZiBDT05GSUdfUE1CX0ZJWEVECisJLiA9IENPTkZJR19QQUdFX09GRlNFVCArIChDT05GSUdfTUVNT1JZX1NUQVJUICYgMHgxZmZmZmZmZikgKworCSAgICBDT05GSUdfWkVST19QQUdFX09GRlNFVDsKKyNlbGlmIGRlZmluZWQoQ09ORklHXzMyQklUKQogCS4gPSBDT05GSUdfUEFHRV9PRkZTRVQgKyBDT05GSUdfWkVST19QQUdFX09GRlNFVDsKICNlbHNlCiAJLiA9IENPTkZJR19QQUdFX09GRlNFVCArIENPTkZJR19NRU1PUllfU1RBUlQgKyBDT05GSUdfWkVST19QQUdFX09GRlNFVDsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vS2NvbmZpZyBiL2FyY2gvc2gvbW0vS2NvbmZpZwppbmRleCA1NTVlYzk3Li4xMGMyNDM1IDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL0tjb25maWcKKysrIGIvYXJjaC9zaC9tbS9LY29uZmlnCkBAIC01Nyw3ICs1Nyw3IEBACiAJYm9vbAogCWRlZmF1bHQgeSBpZiBDUFVfU0g1CiAKLWNvbmZpZyBQTUIKK2NvbmZpZyBQTUJfRU5BQkxFCiAJYm9vbCAiU3VwcG9ydCAzMi1iaXQgcGh5c2ljYWwgYWRkcmVzc2luZyB0aHJvdWdoIFBNQiIKIAlkZXBlbmRzIG9uIE1NVSAmJiBFWFBFUklNRU5UQUwgJiYgKENQVV9TVUJUWVBFX1NINzc4MCB8fCBDUFVfU1VCVFlQRV9TSDc3ODUpCiAJc2VsZWN0IDMyQklUCkBAIC02Nyw2ICs2NywzMyBAQAogCSAgMzItYml0cyB0aHJvdWdoIHRoZSBTSC00QSBQTUIuIElmIHRoaXMgaXMgbm90IHNldCwgbGVnYWN5CiAJICAyOS1iaXQgcGh5c2ljYWwgYWRkcmVzc2luZyB3aWxsIGJlIHVzZWQuCiAKK2Nob2ljZQorCXByb21wdCAiUE1CIGhhbmRsaW5nIHR5cGUiCisJZGVwZW5kcyBvbiBQTUJfRU5BQkxFCisJZGVmYXVsdCBQTUJfRklYRUQKKworY29uZmlnIFBNQgorCWJvb2wgIlBNQiIKKwlkZXBlbmRzIG9uIE1NVSAmJiBFWFBFUklNRU5UQUwgJiYgKENQVV9TVUJUWVBFX1NINzc4MCB8fCBDUFVfU1VCVFlQRV9TSDc3ODUpCisJc2VsZWN0IDMyQklUCisJaGVscAorCSAgSWYgeW91IHNheSBZIGhlcmUsIHBoeXNpY2FsIGFkZHJlc3Npbmcgd2lsbCBiZSBleHRlbmRlZCB0bworCSAgMzItYml0cyB0aHJvdWdoIHRoZSBTSC00QSBQTUIuIElmIHRoaXMgaXMgbm90IHNldCwgbGVnYWN5CisJICAyOS1iaXQgcGh5c2ljYWwgYWRkcmVzc2luZyB3aWxsIGJlIHVzZWQuCisKK2NvbmZpZyBQTUJfRklYRUQKKwlib29sICJmaXhlZCBQTUIiCisJZGVwZW5kcyBvbiBNTVUgJiYgRVhQRVJJTUVOVEFMICYmIChDUFVfU1VCVFlQRV9TSDc3ODAgfHwgXAorCQkJCQkgICBDUFVfU1VCVFlQRV9TSDc3ODUpCisJc2VsZWN0IDMyQklUCisJaGVscAorCSAgSWYgdGhpcyBvcHRpb24gaXMgZW5hYmxlZCwgZml4ZWQgUE1CIG1hcHBpbmdzIGFyZSBpbmhlcml0ZWQKKwkgIGZyb20gdGhlIGJvb3QgbG9hZGVyLCBhbmQgdGhlIGtlcm5lbCBkb2VzIG5vdCBhdHRlbXB0IGR5bmFtaWMKKwkgIG1hbmFnZW1lbnQuIFRoaXMgaXMgdGhlIGNsb3Nlc3QgdG8gbGVnYWN5IDI5LWJpdCBwaHlzaWNhbCBtb2RlLAorCSAgYW5kIGFsbG93cyBzeXN0ZW1zIHRvIHN1cHBvcnQgdXAgdG8gNTEyTWlCIG9mIHN5c3RlbSBtZW1vcnkuCisKK2VuZGNob2ljZQorCiBjb25maWcgWDJUTEIKIAlib29sICJFbmFibGUgZXh0ZW5kZWQgVExCIG1vZGUiCiAJZGVwZW5kcyBvbiAoQ1BVX1NIWDIgfHwgQ1BVX1NIWDMpICYmIE1NVSAmJiBFWFBFUklNRU5UQUwKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vTWFrZWZpbGVfMzIgYi9hcmNoL3NoL21tL01ha2VmaWxlXzMyCmluZGV4IGNiMmYzZjIuLjk4NmExZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vTWFrZWZpbGVfMzIKKysrIGIvYXJjaC9zaC9tbS9NYWtlZmlsZV8zMgpAQCAtMjUsOCArMjUsMTAgQEAKIGVuZGlmCiAKIGlmZGVmIENPTkZJR19NTVUKLW9iai0kKENPTkZJR19DUFVfU0gzKQkrPSB0bGItc2gzLm8KLW9iai0kKENPTkZJR19DUFVfU0g0KQkrPSB0bGItc2g0Lm8KK3RsYi0kKENPTkZJR19DUFVfU0gzKQkJOj0gdGxiLXNoMy5vCit0bGItJChDT05GSUdfQ1BVX1NINCkJCTo9IHRsYi1zaDQubwordGxiLSQoQ09ORklHX0NQVV9IQVNfUFRFQUVYKQk6PSB0bGItcHRlYWV4Lm8KK29iai15CQkJCSs9ICQodGxiLXkpCiBpZm5kZWYgQ09ORklHX0NBQ0hFX09GRgogb2JqLSQoQ09ORklHX0NQVV9TSDQpCQkrPSBwZy1zaDQubwogb2JqLSQoQ09ORklHX1NINzcwNV9DQUNIRV8zMktCKQkrPSBwZy1zaDc3MDUubwpAQCAtMzUsNiArMzcsNyBAQAogCiBvYmotJChDT05GSUdfSFVHRVRMQl9QQUdFKQkrPSBodWdldGxicGFnZS5vCiBvYmotJChDT05GSUdfUE1CKQkJKz0gcG1iLm8KK29iai0kKENPTkZJR19QTUJfRklYRUQpCQkrPSBwbWItZml4ZWQubwogb2JqLSQoQ09ORklHX05VTUEpCQkrPSBudW1hLm8KIAogRVhUUkFfQ0ZMQUdTICs9IC1XZXJyb3IKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vYXNpZHMtZGVidWdmcy5jIGIvYXJjaC9zaC9tbS9hc2lkcy1kZWJ1Z2ZzLmMKaW5kZXggOGU5MTJhMS4uY2Q4YzNiZjMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vYXNpZHMtZGVidWdmcy5jCisrKyBiL2FyY2gvc2gvbW0vYXNpZHMtZGVidWdmcy5jCkBAIC0zNywxMCArMzcsOCBAQAogCQkJY29udGludWU7CiAKIAkJaWYgKHAtPm1tKQotCQkJc2VxX3ByaW50ZihmaWxlLCAiJTVkIDogJTAybHhcbiIsIHBpZCwKKwkJCXNlcV9wcmludGYoZmlsZSwgIiU1ZCA6ICUwNGx4XG4iLCBwaWQsCiAJCQkJICAgY3B1X2FzaWQoc21wX3Byb2Nlc3Nvcl9pZCgpLCBwLT5tbSkpOwotCQllbHNlCi0JCQlzZXFfcHJpbnRmKGZpbGUsICIlNWQgOiAobm9uZSlcbiIsIHBpZCk7CiAJfQogCiAJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9pb3JlbWFwXzMyLmMgYi9hcmNoL3NoL21tL2lvcmVtYXBfMzIuYwppbmRleCAzMjk0NmZiLi42MGNjNDg2IDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL2lvcmVtYXBfMzIuYworKysgYi9hcmNoL3NoL21tL2lvcmVtYXBfMzIuYwpAQCAtNTksMTEgKzU5LDEzIEBACiAJaWYgKGlzX3BjaV9tZW1hZGRyKHBoeXNfYWRkcikgJiYgaXNfcGNpX21lbWFkZHIobGFzdF9hZGRyKSkKIAkJcmV0dXJuICh2b2lkIF9faW9tZW0gKilwaHlzX2FkZHI7CiAKKyNpZiAhZGVmaW5lZChDT05GSUdfUE1CX0ZJWEVEKQogCS8qCiAJICogRG9uJ3QgYWxsb3cgYW55Ym9keSB0byByZW1hcCBub3JtYWwgUkFNIHRoYXQgd2UncmUgdXNpbmcuLgogCSAqLwogCWlmIChwaHlzX2FkZHIgPCB2aXJ0X3RvX3BoeXMoaGlnaF9tZW1vcnkpKQogCQlyZXR1cm4gTlVMTDsKKyNlbmRpZgogCiAJLyoKIAkgKiBNYXBwaW5ncyBoYXZlIHRvIGJlIHBhZ2UtYWxpZ25lZApAQCAtODEsNyArODMsNyBAQAogCWFyZWEtPnBoeXNfYWRkciA9IHBoeXNfYWRkcjsKIAlvcmlnX2FkZHIgPSBhZGRyID0gKHVuc2lnbmVkIGxvbmcpYXJlYS0+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+ZmxhZ3MgfD0gQVRBX0ZMQUdfU0xBVkVfUE9TUzsKIAogCWFwLT5pb2FkZHIuY21kX2FkZHIgPSBjbWRfYWRkcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfbmV0Y2VsbC5jIGIvZHJpdmVycy9hdGEvcGF0YV9uZXRjZWxsLmMKaW5kZXggOWRjMDVlMS4uYmRiMjM2OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9uZXRjZWxsLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9uZXRjZWxsLmMKQEAgLTUxLDggKzUxLDggQEAKIAkJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCiAJCS8qIEFjdHVhbGx5IHdlIGRvbid0IHJlYWxseSBjYXJlIGFib3V0IHRoZXNlIGFzIHRoZQogCQkgICBmaXJtd2FyZSBkZWFscyB3aXRoIGl0ICovCi0JCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDcsIC8qIG13ZG1hMC0yICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sgCT0gQVRBX1VETUE1LCAvKiBVRE1BIDEzMyAqLwogCQkucG9ydF9vcHMJPSAmbmV0Y2VsbF9vcHMsCiAJfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfbmluamEzMi5jIGIvZHJpdmVycy9hdGEvcGF0YV9uaW5qYTMyLmMKaW5kZXggNGRkOWEzYi4uMGZiNmIxYjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfbmluamEzMi5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfbmluamEzMi5jCkBAIC0xMzYsNyArMTM2LDcgQEAKIAlpZiAoIWJhc2UpCiAJCXJldHVybiAtRU5PTUVNOwogCWFwLT5vcHMgPSAmbmluamEzMl9wb3J0X29wczsKLQlhcC0+cGlvX21hc2sgPSAweDFGOworCWFwLT5waW9fbWFzayA9IEFUQV9QSU80OwogCWFwLT5mbGFncyB8PSBBVEFfRkxBR19TTEFWRV9QT1NTOwogCiAJYXAtPmlvYWRkci5jbWRfYWRkciA9IGJhc2UgKyAweDEwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9uczg3NDEwLmMgYi9kcml2ZXJzL2F0YS9wYXRhX25zODc0MTAuYwppbmRleCA0MGQ0MTFjLi5jYTUzZmFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX25zODc0MTAuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX25zODc0MTAuYwpAQCAtMTQ0LDcgKzE0NCw3IEBACiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm8gPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MEYsCisJCS5waW9fbWFzayA9IEFUQV9QSU8zLAogCQkucG9ydF9vcHMgPSAmbnM4NzQxMF9wb3J0X29wcwogCX07CiAJY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBwaVtdID0geyAmaW5mbywgTlVMTCB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9uczg3NDE1LmMgYi9kcml2ZXJzL2F0YS9wYXRhX25zODc0MTUuYwppbmRleCA4OWJmNWY4Li43NzNiMTU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX25zODc0MTUuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX25zODc0MTUuYwpAQCAtMzQ2LDggKzM0Niw4IEBACiAJc3RhdGljIGludCBwcmludGVkX3ZlcnNpb247CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm8gPSB7CiAJCS5mbGFncwkJPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA3LCAvKiBtd2RtYTAtMiAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkucG9ydF9vcHMJPSAmbnM4NzQxNV9wYXRhX29wcywKIAl9OwogCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwcGlbXSA9IHsgJmluZm8sIE5VTEwgfTsKQEAgLTM1NSw4ICszNTUsOCBAQAogI2lmIGRlZmluZWQoQ09ORklHX1NVUEVSSU8pCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm84NzU2MCA9IHsKIAkJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDcsIC8qIG13ZG1hMC0yICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS5wb3J0X29wcwk9ICZuczg3NTYwX3BhdGFfb3BzLAogCX07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfb2N0ZW9uX2NmLmMgYi9kcml2ZXJzL2F0YS9wYXRhX29jdGVvbl9jZi5jCmluZGV4IDBmZTRlZjMuLmVmZTJjMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfb2N0ZW9uX2NmLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9vY3Rlb25fY2YuYwpAQCAtODcxLDcgKzg3MSw3IEBACiAJYXAtPnByaXZhdGVfZGF0YSA9IGNmX3BvcnQ7CiAJY2ZfcG9ydC0+YXAgPSBhcDsKIAlhcC0+b3BzID0gJm9jdGVvbl9jZl9vcHM7Ci0JYXAtPnBpb19tYXNrID0gMHg3ZjsgLyogU3VwcG9ydCBQSU8gMC02ICovCisJYXAtPnBpb19tYXNrID0gQVRBX1BJTzY7CiAJYXAtPmZsYWdzIHw9IEFUQV9GTEFHX01NSU8gfCBBVEFfRkxBR19OT19MRUdBQ1kKIAkJICB8IEFUQV9GTEFHX05PX0FUQVBJIHwgQVRBX0ZMQUdfUElPX1BPTExJTkc7CiAKQEAgLTkwMCw3ICs5MDAsNyBAQAogCQlhcC0+aW9hZGRyLmN0bF9hZGRyCT0gY3MxICsgKDYgPDwgMSkgKyAxOwogCQlvY3Rlb25fY2Zfb3BzLnNmZl9kYXRhX3hmZXIgPSBvY3Rlb25fY2ZfZGF0YV94ZmVyMTY7CiAKLQkJYXAtPm13ZG1hX21hc2sJPSAweDFmOyAvKiBTdXBwb3J0IE1XRE1BIDAtNCAqLworCQlhcC0+bXdkbWFfbWFzawk9IEFUQV9NV0RNQTQ7CiAJCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CiAJCWlycV9oYW5kbGVyID0gb2N0ZW9uX2NmX2ludGVycnVwdDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9vbGRwaWl4LmMgYi9kcml2ZXJzL2F0YS9wYXRhX29sZHBpaXguYwppbmRleCAyYzFhOTFjLi44NGFjNTAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX29sZHBpaXguYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX29sZHBpaXguYwpAQCAtMjM4LDggKzIzOCw4IEBACiAJc3RhdGljIGludCBwcmludGVkX3ZlcnNpb247CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm8gPSB7CiAJCS5mbGFncwkJPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA3LCAvKiBtd2RtYTEtMiAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkucG9ydF9vcHMJPSAmb2xkcGlpeF9wYXRhX29wcywKIAl9OwogCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwcGlbXSA9IHsgJmluZm8sIE5VTEwgfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfb3B0aS5jIGIvZHJpdmVycy9hdGEvcGF0YV9vcHRpLmMKaW5kZXggZTRmYTRkNS4uOTllZGRkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9vcHRpLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9vcHRpLmMKQEAgLTE2Myw3ICsxNjMsNyBAQAogewogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sgPSAweDFmLAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKIAkJLnBvcnRfb3BzID0gJm9wdGlfcG9ydF9vcHMKIAl9OwogCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwcGlbXSA9IHsgJmluZm8sIE5VTEwgfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfb3B0aWRtYS5jIGIvZHJpdmVycy9hdGEvcGF0YV9vcHRpZG1hLmMKaW5kZXggOTNiYjZlOS4uODY4ODVhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9vcHRpZG1hLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9vcHRpZG1hLmMKQEAgLTM5OSwxNSArMzk5LDE1IEBACiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9fODJjNzAwID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sgPSAweDFmLAotCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCS5wb3J0X29wcyA9ICZvcHRpZG1hX3BvcnRfb3BzCiAJfTsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb184MmM3MDBfdWRtYSA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKLQkJLm13ZG1hX21hc2sgPSAweDA3LAotCQkudWRtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKKwkJLnVkbWFfbWFzayA9IEFUQV9VRE1BMiwKIAkJLnBvcnRfb3BzID0gJm9wdGlwbHVzX3BvcnRfb3BzCiAJfTsKIAljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7ICZpbmZvXzgyYzcwMCwgTlVMTCB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9wY21jaWEuYyBiL2RyaXZlcnMvYXRhL3BhdGFfcGNtY2lhLmMKaW5kZXggNjRiMmUyMi4uZjRkMDA5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9wY21jaWEuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3BjbWNpYS5jCkBAIC00Miw3ICs0Miw3IEBACiAKIAogI2RlZmluZSBEUlZfTkFNRSAicGF0YV9wY21jaWEiCi0jZGVmaW5lIERSVl9WRVJTSU9OICIwLjMuMyIKKyNkZWZpbmUgRFJWX1ZFUlNJT04gIjAuMy41IgogCiAvKgogICoJUHJpdmF0ZSBkYXRhIHN0cnVjdHVyZSB0byBnbHVlIHN0dWZmIHRvZ2V0aGVyCkBAIC0xMjYsNiArMTI2LDM3IEBACiAJcmV0dXJuIGJ1ZmxlbjsKIH0KIAorLyoqCisgKglwY21jaWFfOGJpdF9kcmFpbl9maWZvIC0gU3RvY2sgRklGTyBkcmFpbiBsb2dpYyBmb3IgU0ZGIGNvbnRyb2xsZXJzCisgKglAcWM6IGNvbW1hbmQKKyAqCisgKglEcmFpbiB0aGUgRklGTyBhbmQgZGV2aWNlIG9mIGFueSBzdHVjayBkYXRhIGZvbGxvd2luZyBhIGNvbW1hbmQKKyAqCWZhaWxpbmcgdG8gY29tcGxldGUuIEluIHNvbWUgY2FzZXMgdGhpcyBpcyBuZWNjZXNzYXJ5IGJlZm9yZSBhCisgKglyZXNldCB3aWxsIHJlY292ZXIgdGhlIGRldmljZS4KKyAqCisgKi8KKyAKK3ZvaWQgcGNtY2lhXzhiaXRfZHJhaW5fZmlmbyhzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQoreworCWludCBjb3VudDsKKwlzdHJ1Y3QgYXRhX3BvcnQgKmFwOworCisJLyogV2Ugb25seSBuZWVkIHRvIGZsdXNoIGluY29taW5nIGRhdGEgd2hlbiBhIGNvbW1hbmQgd2FzIHJ1bm5pbmcgKi8KKwlpZiAocWMgPT0gTlVMTCB8fCBxYy0+ZG1hX2RpciA9PSBETUFfVE9fREVWSUNFKQorCQlyZXR1cm47CisKKwlhcCA9IHFjLT5hcDsKKworCS8qIERyYWluIHVwIHRvIDY0SyBvZiBkYXRhIGJlZm9yZSB3ZSBnaXZlIHVwIHRoaXMgcmVjb3ZlcnkgbWV0aG9kICovCisJZm9yIChjb3VudCA9IDA7IChhcC0+b3BzLT5zZmZfY2hlY2tfc3RhdHVzKGFwKSAmIEFUQV9EUlEpCisJCQkJCQkJJiYgY291bnQrKyA8IDY1NTM2OykKKwkJaW9yZWFkOChhcC0+aW9hZGRyLmRhdGFfYWRkcik7CisKKwlpZiAoY291bnQpCisJCWF0YV9wb3J0X3ByaW50ayhhcCwgS0VSTl9XQVJOSU5HLCAiZHJhaW5lZCAlZCBieXRlcyB0byBjbGVhciBEUlEuXG4iLAorCQkJCQkJCQljb3VudCk7CisKK30KIAogc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgcGNtY2lhX3NodCA9IHsKIAlBVEFfUElPX1NIVChEUlZfTkFNRSksCkBAIC0xNDMsNiArMTc0LDcgQEAKIAkuc2ZmX2RhdGFfeGZlcgk9IGF0YV9kYXRhX3hmZXJfOGJpdCwKIAkuY2FibGVfZGV0ZWN0CT0gYXRhX2NhYmxlXzQwd2lyZSwKIAkuc2V0X21vZGUJPSBwY21jaWFfc2V0X21vZGVfOGJpdCwKKwkuZHJhaW5fZmlmbwk9IHBjbWNpYV84Yml0X2RyYWluX2ZpZm8sCiB9OwogCiAjZGVmaW5lIENTX0NIRUNLKGZuLCByZXQpIFwKQEAgLTI5OSw3ICszMzEsNyBAQAogCQlhcCA9IGhvc3QtPnBvcnRzW3BdOwogCiAJCWFwLT5vcHMgPSBvcHM7Ci0JCWFwLT5waW9fbWFzayA9IDE7CQkvKiBJU0Egc28gUElPIDAgY3ljbGVzICovCisJCWFwLT5waW9fbWFzayA9IEFUQV9QSU8wOwkvKiBJU0Egc28gUElPIDAgY3ljbGVzICovCiAJCWFwLT5mbGFncyB8PSBBVEFfRkxBR19TTEFWRV9QT1NTOwogCQlhcC0+aW9hZGRyLmNtZF9hZGRyID0gaW9fYWRkciArIDB4MTAgKiBwOwogCQlhcC0+aW9hZGRyLmFsdHN0YXR1c19hZGRyID0gY3RsX2FkZHIgKyAweDEwICogcDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfcGRjMjAyN3guYyBiL2RyaXZlcnMvYXRhL3BhdGFfcGRjMjAyN3guYwppbmRleCBlOTRlZmNjLi5jYTVjYWQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX3BkYzIwMjd4LmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9wZGMyMDI3eC5jCkBAIC0xNTIsMTggKzE1MiwxOCBAQAogCXsKIAkJLmZsYWdzCQk9IEFUQV9GTEFHX05PX0xFR0FDWSB8IEFUQV9GTEFHX1NMQVZFX1BPU1MgfAogCQkgICAgICAgICAgICAgICAgICBBVEFfRkxBR19NTUlPLAotCQkucGlvX21hc2sJPSAweDFmLCAvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA3LCAvKiBtd2RtYTAtMiAqLwotCQkudWRtYV9tYXNrCT0gQVRBX1VETUE1LCAvKiB1ZG1hMC01ICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCisJCS51ZG1hX21hc2sJPSBBVEFfVURNQTUsCiAJCS5wb3J0X29wcwk9ICZwZGMyMDI3eF9wYXRhMTAwX29wcywKIAl9LAogCS8qIFBEQ19VRE1BXzEzMyAqLwogCXsKIAkJLmZsYWdzCQk9IEFUQV9GTEFHX05PX0xFR0FDWSB8IEFUQV9GTEFHX1NMQVZFX1BPU1MgfAogICAgICAgICAgICAgICAgICAgICAgICAgCSAgQVRBX0ZMQUdfTU1JTywKLQkJLnBpb19tYXNrCT0gMHgxZiwgLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWEwLTIgKi8KLQkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwgLyogdWRtYTAtNiAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAorCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmcGRjMjAyN3hfcGF0YTEzM19vcHMsCiAJfSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX3BkYzIwMnh4X29sZC5jIGIvZHJpdmVycy9hdGEvcGF0YV9wZGMyMDJ4eF9vbGQuYwppbmRleCA3OTlhNmEwLi41ZmVkYjNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX3BkYzIwMnh4X29sZC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfcGRjMjAyeHhfb2xkLmMKQEAgLTI5MSwyMiArMjkxLDIyIEBACiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9bM10gPSB7CiAJCXsKIAkJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCQkucGlvX21hc2sgPSAweDFmLAotCQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCQkudWRtYV9tYXNrID0gQVRBX1VETUEyLAogCQkJLnBvcnRfb3BzID0gJnBkYzIwMjR4X3BvcnRfb3BzCiAJCX0sCiAJCXsKIAkJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCQkucGlvX21hc2sgPSAweDFmLAotCQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCQkudWRtYV9tYXNrID0gQVRBX1VETUE0LAogCQkJLnBvcnRfb3BzID0gJnBkYzIwMjZ4X3BvcnRfb3BzCiAJCX0sCiAJCXsKIAkJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCQkucGlvX21hc2sgPSAweDFmLAotCQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCQkudWRtYV9tYXNrID0gQVRBX1VETUE1LAogCQkJLnBvcnRfb3BzID0gJnBkYzIwMjZ4X3BvcnRfb3BzCiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfcWRpLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3FkaS5jCmluZGV4IGYxYjI2ZjcuLjQ1ODc5ZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfcWRpLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9xZGkuYwpAQCAtMjEyLDExICsyMTIsMTEgQEAKIAogCWlmICh0eXBlID09IDY1ODApIHsKIAkJYXAtPm9wcyA9ICZxZGk2NTgwX3BvcnRfb3BzOwotCQlhcC0+cGlvX21hc2sgPSAweDFGOworCQlhcC0+cGlvX21hc2sgPSBBVEFfUElPNDsKIAkJYXAtPmZsYWdzIHw9IEFUQV9GTEFHX1NMQVZFX1BPU1M7CiAJfSBlbHNlIHsKIAkJYXAtPm9wcyA9ICZxZGk2NTAwX3BvcnRfb3BzOwotCQlhcC0+cGlvX21hc2sgPSAweDA3OwkvKiBBY3R1YWxseSBQSU8zICFJT1JEWSBpcyBwb3NzaWJsZSAqLworCQlhcC0+cGlvX21hc2sgPSBBVEFfUElPMjsgLyogQWN0dWFsbHkgUElPMyAhSU9SRFkgaXMgcG9zc2libGUgKi8KIAkJYXAtPmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUyB8IEFUQV9GTEFHX05PX0lPUkRZOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9yYWRpc3lzLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3JhZGlzeXMuYwppbmRleCA2OTVkNDRhLi40NDAxYjMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX3JhZGlzeXMuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3JhZGlzeXMuYwpAQCAtMjE2LDkgKzIxNiw5IEBACiAJc3RhdGljIGludCBwcmludGVkX3ZlcnNpb247CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm8gPSB7CiAJCS5mbGFncwkJPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA3LCAvKiBtd2RtYTEtMiAqLwotCQkudWRtYV9tYXNrCT0gMHgxNCwgLyogVURNQTMzLzY2IG9ubHkgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMTJfT05MWSwKKwkJLnVkbWFfbWFzawk9IEFUQV9VRE1BMjRfT05MWSwKIAkJLnBvcnRfb3BzCT0gJnJhZGlzeXNfcGF0YV9vcHMsCiAJfTsKIAljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7ICZpbmZvLCBOVUxMIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX3JiNTMyX2NmLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3JiNTMyX2NmLmMKaW5kZXggZWJmY2RhMi4uOGUzY2RlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9yYjUzMl9jZi5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfcmI1MzJfY2YuYwpAQCAtNDgsNjMgKzQ4LDExIEBACiBzdHJ1Y3QgcmI1MzJfY2ZfaW5mbyB7CiAJdm9pZCBfX2lvbWVtCSppb2Jhc2U7CiAJdW5zaWduZWQgaW50CWdwaW9fbGluZTsKLQlpbnQJCWZyb3plbjsKIAl1bnNpZ25lZCBpbnQJaXJxOwogfTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCByYjUzMl9wYXRhX2ZpbmlzaF9pbyhzdHJ1Y3QgYXRhX3BvcnQgKmFwKQotewotCXN0cnVjdCBhdGFfaG9zdCAqYWggPSBhcC0+aG9zdDsKLQlzdHJ1Y3QgcmI1MzJfY2ZfaW5mbyAqaW5mbyA9IGFoLT5wcml2YXRlX2RhdGE7Ci0KLQkvKiBGSVhNRTogS2VlcCBwcmV2aW91cyBkZWxheS4gSWYgdGhpcyBpcyBtZXJlbHkgYSBmZW5jZSB0aGVuCi0JICAgYXRhX3NmZl9zeW5jIG1pZ2h0IGJlIHN1ZmZpY2llbnQuICovCi0JYXRhX3NmZl9kbWFfcGF1c2UoYXApOwotCW5kZWxheShSQjUwMF9DRl9JT19ERUxBWSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJiNTMyX3BhdGFfZXhlY19jb21tYW5kKHN0cnVjdCBhdGFfcG9ydCAqYXAsCi0JCQkJY29uc3Qgc3RydWN0IGF0YV90YXNrZmlsZSAqdGYpCi17Ci0Jd3JpdGViKHRmLT5jb21tYW5kLCBhcC0+aW9hZGRyLmNvbW1hbmRfYWRkcik7Ci0JcmI1MzJfcGF0YV9maW5pc2hfaW8oYXApOwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IHJiNTMyX3BhdGFfZGF0YV94ZmVyKHN0cnVjdCBhdGFfZGV2aWNlICphZGV2LCB1bnNpZ25lZCBjaGFyICpidWYsCi0JCQkJdW5zaWduZWQgaW50IGJ1ZmxlbiwgaW50IHdyaXRlX2RhdGEpCi17Ci0Jc3RydWN0IGF0YV9wb3J0ICphcCA9IGFkZXYtPmxpbmstPmFwOwotCXZvaWQgX19pb21lbSAqaW9hZGRyID0gYXAtPmlvYWRkci5kYXRhX2FkZHI7Ci0JaW50IHJldGxlbiA9IGJ1ZmxlbjsKLQotCWlmICh3cml0ZV9kYXRhKSB7Ci0JCWZvciAoOyBidWZsZW4gPiAwOyBidWZsZW4tLSwgYnVmKyspCi0JCQl3cml0ZWIoKmJ1ZiwgaW9hZGRyKTsKLQl9IGVsc2UgewotCQlmb3IgKDsgYnVmbGVuID4gMDsgYnVmbGVuLS0sIGJ1ZisrKQotCQkJKmJ1ZiA9IHJlYWRiKGlvYWRkcik7Ci0JfQotCi0JcmI1MzJfcGF0YV9maW5pc2hfaW8oYWRldi0+bGluay0+YXApOwotCXJldHVybiByZXRsZW47Ci19Ci0KLXN0YXRpYyB2b2lkIHJiNTMyX3BhdGFfZnJlZXplKHN0cnVjdCBhdGFfcG9ydCAqYXApCi17Ci0Jc3RydWN0IHJiNTMyX2NmX2luZm8gKmluZm8gPSBhcC0+aG9zdC0+cHJpdmF0ZV9kYXRhOwotCi0JaW5mby0+ZnJvemVuID0gMTsKLX0KLQotc3RhdGljIHZvaWQgcmI1MzJfcGF0YV90aGF3KHN0cnVjdCBhdGFfcG9ydCAqYXApCi17Ci0Jc3RydWN0IHJiNTMyX2NmX2luZm8gKmluZm8gPSBhcC0+aG9zdC0+cHJpdmF0ZV9kYXRhOwotCi0JaW5mby0+ZnJvemVuID0gMDsKLX0KLQogc3RhdGljIGlycXJldHVybl90IHJiNTMyX3BhdGFfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKQogewogCXN0cnVjdCBhdGFfaG9zdCAqYWggPSBkZXZfaW5zdGFuY2U7CkBAIC0xMTIsOCArNjAsNyBAQAogCiAJaWYgKGdwaW9fZ2V0X3ZhbHVlKGluZm8tPmdwaW9fbGluZSkpIHsKIAkJc2V0X2lycV90eXBlKGluZm8tPmlycSwgSVJRX1RZUEVfTEVWRUxfTE9XKTsKLQkJaWYgKCFpbmZvLT5mcm96ZW4pCi0JCQlhdGFfc2ZmX2ludGVycnVwdChpbmZvLT5pcnEsIGRldl9pbnN0YW5jZSk7CisJCWF0YV9zZmZfaW50ZXJydXB0KGluZm8tPmlycSwgZGV2X2luc3RhbmNlKTsKIAl9IGVsc2UgewogCQlzZXRfaXJxX3R5cGUoaW5mby0+aXJxLCBJUlFfVFlQRV9MRVZFTF9ISUdIKTsKIAl9CkBAIC0xMjMsMTAgKzcwLDcgQEAKIAogc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIHJiNTMyX3BhdGFfcG9ydF9vcHMgPSB7CiAJLmluaGVyaXRzCQk9ICZhdGFfc2ZmX3BvcnRfb3BzLAotCS5zZmZfZXhlY19jb21tYW5kCT0gcmI1MzJfcGF0YV9leGVjX2NvbW1hbmQsCi0JLnNmZl9kYXRhX3hmZXIJCT0gcmI1MzJfcGF0YV9kYXRhX3hmZXIsCi0JLmZyZWV6ZQkJCT0gcmI1MzJfcGF0YV9mcmVlemUsCi0JLnRoYXcJCQk9IHJiNTMyX3BhdGFfdGhhdywKKwkuc2ZmX2RhdGFfeGZlcgkJPSBhdGFfc2ZmX2RhdGFfeGZlcjMyLAogfTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0xNDUsNyArODksNyBAQAogCWFwID0gYWgtPnBvcnRzWzBdOwogCiAJYXAtPm9wcwkJPSAmcmI1MzJfcGF0YV9wb3J0X29wczsKLQlhcC0+cGlvX21hc2sJPSAweDFmOyAvKiBQSU80ICovCisJYXAtPnBpb19tYXNrCT0gQVRBX1BJTzQ7CiAJYXAtPmZsYWdzCT0gQVRBX0ZMQUdfTk9fTEVHQUNZIHwgQVRBX0ZMQUdfTU1JTzsKIAogCWFwLT5pb2FkZHIuY21kX2FkZHIJPSBpbmZvLT5pb2Jhc2UgKyBSQjUwMF9DRl9SRUdfQkFTRTsKQEAgLTE2MCw3ICsxMDQsNyBAQAogCiBzdGF0aWMgX19kZXZpbml0IGludCByYjUzMl9wYXRhX2RyaXZlcl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXVuc2lnbmVkIGludCBpcnE7CisJaW50IGlycTsKIAlpbnQgZ3BpbzsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAlzdHJ1Y3QgYXRhX2hvc3QgKmFoOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9yejEwMDAuYyBiL2RyaXZlcnMvYXRhL3BhdGFfcnoxMDAwLmMKaW5kZXggNDZkNmJjMS4uMGM1NzRjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9yejEwMDAuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3J6MTAwMC5jCkBAIC04OCw3ICs4OCw3IEBACiAJc3RhdGljIGludCBwcmludGVkX3ZlcnNpb247CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm8gPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAogCQkucG9ydF9vcHMgPSAmcnoxMDAwX3BvcnRfb3BzCiAJfTsKIAljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7ICZpbmZvLCBOVUxMIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX3NjMTIwMC5jIGIvZHJpdmVycy9hdGEvcGF0YV9zYzEyMDAuYwppbmRleCA5YTRiZGNhLi5mNDk4MTRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX3NjMTIwMC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfc2MxMjAwLmMKQEAgLTIsNyArMiw2IEBACiAgKiBOZXcgQVRBIGxheWVyIFNDMTIwMCBkcml2ZXIJCUFsYW4gQ294IDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+CiAgKgogICogVE9ETzogTW9kZSBzZWxlY3Rpb24gZmlsdGVyaW5nCi0gKiBUT0RPOiBDYW4ndCBlbmFibGUgc2Vjb25kIGNoYW5uZWwgdW50aWwgQVRBIGNvcmUgaGFzIHNlcmlhbGl6ZQogICogVE9ETzogTmVlZHMgY3VzdG9tIERNQSBjbGVhbnVwIGNvZGUKICAqCiAgKiBCYXNlZCB2ZXJ5IGhlYXZpbHkgb24KQEAgLTE3OCw2ICsxNzcsMzEgQEAKIAlyZXR1cm4gYXRhX3NmZl9xY19pc3N1ZShxYyk7CiB9CiAKKy8qKgorICoJc2MxMjAwX3FjX2RlZmVyCS0JaW1wbGVtZW50IHNlcmlhbGl6YXRpb24KKyAqCUBxYzogY29tbWFuZAorICoKKyAqCVNlcmlhbGl6ZSBjb21tYW5kIGlzc3VlIG9uIHRoaXMgY29udHJvbGxlci4KKyAqLworCitzdGF0aWMgaW50IHNjMTIwMF9xY19kZWZlcihzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQoreworCXN0cnVjdCBhdGFfaG9zdCAqaG9zdCA9IHFjLT5hcC0+aG9zdDsKKwlzdHJ1Y3QgYXRhX3BvcnQgKmFsdCA9IGhvc3QtPnBvcnRzWzEgXiBxYy0+YXAtPnBvcnRfbm9dOworCWludCByYzsKKworCS8qIEZpcnN0IGFwcGx5IHRoZSB1c3VhbCBydWxlcyAqLworCXJjID0gYXRhX3N0ZF9xY19kZWZlcihxYyk7CisJaWYgKHJjICE9IDApCisJCXJldHVybiByYzsKKworCS8qIE5vdyBhcHBseSBzZXJpYWxpemF0aW9uIHJ1bGVzLiBPbmx5IGFsbG93IGEgY29tbWFuZCBpZiB0aGUKKwkgICBvdGhlciBjaGFubmVsIHN0YXRlIG1hY2hpbmUgaXMgaWRsZSAqLworCWlmIChhbHQgJiYgYWx0LT5xY19hY3RpdmUpCisJCXJldHVybglBVEFfREVGRVJfUE9SVDsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgc2MxMjAwX3NodCA9IHsKIAlBVEFfQk1ETUFfU0hUKERSVl9OQU1FKSwKIAkuc2dfdGFibGVzaXplCT0gTElCQVRBX0RVTUJfTUFYX1BSRCwKQEAgLTE4Nyw2ICsyMTEsNyBAQAogCS5pbmhlcml0cwk9ICZhdGFfYm1kbWFfcG9ydF9vcHMsCiAJLnFjX3ByZXAgCT0gYXRhX3NmZl9kdW1iX3FjX3ByZXAsCiAJLnFjX2lzc3VlCT0gc2MxMjAwX3FjX2lzc3VlLAorCS5xY19kZWZlcgk9IHNjMTIwMF9xY19kZWZlciwKIAkuY2FibGVfZGV0ZWN0CT0gYXRhX2NhYmxlXzQwd2lyZSwKIAkuc2V0X3Bpb21vZGUJPSBzYzEyMDBfc2V0X3Bpb21vZGUsCiAJLnNldF9kbWFtb2RlCT0gc2MxMjAwX3NldF9kbWFtb2RlLApAQCAtMjA1LDEzICsyMzAsMTMgQEAKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mbyA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKLQkJLm13ZG1hX21hc2sgPSAweDA3LAotCQkudWRtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKKwkJLnVkbWFfbWFzayA9IEFUQV9VRE1BMiwKIAkJLnBvcnRfb3BzID0gJnNjMTIwMF9wb3J0X29wcwogCX07CiAJLyogQ2FuJ3QgZW5hYmxlIHBvcnQgMiB5ZXQsIHNlZSB0b3AgY29tbWVudHMgKi8KLQljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7ICZpbmZvLCAmYXRhX2R1bW15X3BvcnRfaW5mbyB9OworCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwcGlbXSA9IHsgJmluZm8sIH07CiAKIAlyZXR1cm4gYXRhX3BjaV9zZmZfaW5pdF9vbmUoZGV2LCBwcGksICZzYzEyMDBfc2h0LCBOVUxMKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfc2NjLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3NjYy5jCmluZGV4IGQ0NDdmMWMuLjQyNTdkNmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfc2NjLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9zY2MuYwpAQCAtMTAwMSw4ICsxMDAxLDggQEAKIHN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBzY2NfcG9ydF9pbmZvW10gPSB7CiAJewogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUyB8IEFUQV9GTEFHX01NSU8gfCBBVEFfRkxBR19OT19MRUdBQ1ksCi0JCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDAsCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkvKiBObyBNV0RNQSAqLwogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmc2NjX3BhdGFfb3BzLAogCX0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX3NjaC5jIGIvZHJpdmVycy9hdGEvcGF0YV9zY2guYwppbmRleCA2YWVlZWViLi45OWNjZWI0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9zY2guYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3NjaC5jCkBAIC04NCw5ICs4NCw5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBzY2hfcG9ydF9pbmZvID0gewogCS5mbGFncwkJPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCS5waW9fbWFzawk9IEFUQV9QSU80LCAgIC8qIHBpbzAtNCAqLwotCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwgLyogbXdkbWEwLTIgKi8KLQkudWRtYV9tYXNrCT0gQVRBX1VETUE1LCAgLyogdWRtYTAtNSAqLworCS5waW9fbWFzawk9IEFUQV9QSU80LAorCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKKwkudWRtYV9tYXNrCT0gQVRBX1VETUE1LAogCS5wb3J0X29wcwk9ICZzY2hfcGF0YV9vcHMsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX3NlcnZlcndvcmtzLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3NlcnZlcndvcmtzLmMKaW5kZXggOGQyZmQ5ZC4uYmVhZWQxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9zZXJ2ZXJ3b3Jrcy5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfc2VydmVyd29ya3MuYwpAQCAtMzk4LDI2ICszOTgsMjYgQEAKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb1s0XSA9IHsKIAkJeyAvKiBPU0I0ICovCiAJCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkJLnBpb19tYXNrID0gMHgxZiwKLQkJCS5td2RtYV9tYXNrID0gMHgwNywKLQkJCS51ZG1hX21hc2sgPSAweDA3LAorCQkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCisJCQkudWRtYV9tYXNrID0gQVRBX1VETUEyLAogCQkJLnBvcnRfb3BzID0gJnNlcnZlcndvcmtzX29zYjRfcG9ydF9vcHMKIAkJfSwgeyAvKiBPU0I0IG5vIFVETUEgKi8KIAkJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCQkucGlvX21hc2sgPSAweDFmLAotCQkJLm13ZG1hX21hc2sgPSAweDA3LAotCQkJLnVkbWFfbWFzayA9IDB4MDAsCisJCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKKwkJCS8qIE5vIFVETUEgKi8KIAkJCS5wb3J0X29wcyA9ICZzZXJ2ZXJ3b3Jrc19vc2I0X3BvcnRfb3BzCiAJCX0sIHsgLyogQ1NCNSAqLwogCQkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJCS5waW9fbWFzayA9IDB4MWYsCi0JCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJCS51ZG1hX21hc2sgPSBBVEFfVURNQTQsCiAJCQkucG9ydF9vcHMgPSAmc2VydmVyd29ya3NfY3NiX3BvcnRfb3BzCiAJCX0sIHsgLyogQ1NCNSAtIGxhdGVyIHJldmlzaW9ucyovCiAJCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkJLnBpb19tYXNrID0gMHgxZiwKLQkJCS5td2RtYV9tYXNrID0gMHgwNywKKwkJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNSwKIAkJCS5wb3J0X29wcyA9ICZzZXJ2ZXJ3b3Jrc19jc2JfcG9ydF9vcHMKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9zaWw2ODAuYyBiL2RyaXZlcnMvYXRhL3BhdGFfc2lsNjgwLmMKaW5kZXggOWU3NjRlNS4uNGNiNjQ5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9zaWw2ODAuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3NpbDY4MC5jCkBAIC0yODIsMTUgKzI4MiwxNSBAQAogewogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sgPSAweDFmLAotCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sgPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcyA9ICZzaWw2ODBfcG9ydF9vcHMKIAl9OwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvX3Nsb3cgPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNSwKIAkJLnBvcnRfb3BzID0gJnNpbDY4MF9wb3J0X29wcwogCX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX3Npcy5jIGIvZHJpdmVycy9hdGEvcGF0YV9zaXMuYwppbmRleCAyN2NlYjQyLi40ODhlNzdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX3Npcy5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfc2lzLmMKQEAgLTU1Miw1MSArNTUyLDU3IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBzaXNfaW5mbyA9IHsKIAkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KLQkubXdkbWFfbWFzawk9IDB4MDcsCi0JLnVkbWFfbWFzawk9IDAsCisJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAorCS8qIE5vIFVETUEgKi8KIAkucG9ydF9vcHMJPSAmc2lzX29sZF9vcHMsCiB9Owogc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIHNpc19pbmZvMzMgPSB7CiAJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCi0JLm13ZG1hX21hc2sJPSAweDA3LAotCS51ZG1hX21hc2sJPSBBVEFfVURNQTIsCS8qIFVETUEgMzMgKi8KKwkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCisJLnVkbWFfbWFzawk9IEFUQV9VRE1BMiwKIAkucG9ydF9vcHMJPSAmc2lzX29sZF9vcHMsCiB9Owogc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIHNpc19pbmZvNjYgPSB7CiAJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCi0JLnVkbWFfbWFzawk9IEFUQV9VRE1BNCwJLyogVURNQSA2NiAqLworCS5waW9fbWFzawk9IEFUQV9QSU80LAorCS8qIE5vIE1XRE1BICovCisJLnVkbWFfbWFzawk9IEFUQV9VRE1BNCwKIAkucG9ydF9vcHMJPSAmc2lzXzY2X29wcywKIH07CiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gc2lzX2luZm8xMDAgPSB7CiAJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCisJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJLyogTm8gTVdETUEgKi8KIAkudWRtYV9tYXNrCT0gQVRBX1VETUE1LAogCS5wb3J0X29wcwk9ICZzaXNfMTAwX29wcywKIH07CiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gc2lzX2luZm8xMDBfZWFybHkgPSB7CiAJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCisJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJLyogTm8gTVdETUEgKi8KIAkudWRtYV9tYXNrCT0gQVRBX1VETUE1LAotCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwogCS5wb3J0X29wcwk9ICZzaXNfNjZfb3BzLAogfTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBzaXNfaW5mbzEzMyA9IHsKIAkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KKwkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkvKiBObyBNV0RNQSAqLwogCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJLnBvcnRfb3BzCT0gJnNpc18xMzNfb3BzLAogfTsKIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIHNpc19pbmZvMTMzX2Zvcl9zYXRhID0gewogCS5mbGFncwkJPSBBVEFfRkxBR19TTEFWRV9QT1NTIHwgQVRBX0ZMQUdfU1JTVCwKLQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KKwkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkvKiBObyBNV0RNQSAqLwogCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJLnBvcnRfb3BzCT0gJnNpc18xMzNfZm9yX3NhdGFfb3BzLAogfTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBzaXNfaW5mbzEzM19lYXJseSA9IHsKIAkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KKwkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkvKiBObyBNV0RNQSAqLwogCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJLnBvcnRfb3BzCT0gJnNpc18xMzNfZWFybHlfb3BzLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfc2w4MmMxMDUuYyBiL2RyaXZlcnMvYXRhL3BhdGFfc2w4MmMxMDUuYwppbmRleCAxYjBlN2I2Li4yOWY3MzNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX3NsODJjMTA1LmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9zbDgyYzEwNS5jCkBAIC0yODMsMTMgKzI4MywxMyBAQAogewogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvX2RtYSA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKLQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkucG9ydF9vcHMgPSAmc2w4MmMxMDVfcG9ydF9vcHMKIAl9OwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvX2Vhcmx5ID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sgPSAweDFmLAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKIAkJLnBvcnRfb3BzID0gJnNsODJjMTA1X3BvcnRfb3BzCiAJfTsKIAkvKiBmb3Igbm93IHVzZSBvbmx5IHRoZSBmaXJzdCBwb3J0ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX3RyaWZsZXguYyBiL2RyaXZlcnMvYXRhL3BhdGFfdHJpZmxleC5jCmluZGV4IGVmOTU5NzUuLmYxZjEzZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfdHJpZmxleC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfdHJpZmxleC5jCkBAIC0xOTEsOCArMTkxLDggQEAKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mbyA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKLQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkucG9ydF9vcHMgPSAmdHJpZmxleF9wb3J0X29wcwogCX07CiAJY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBwaVtdID0geyAmaW5mbywgTlVMTCB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV92aWEuYyBiL2RyaXZlcnMvYXRhL3BhdGFfdmlhLmMKaW5kZXggYmE1NTZkMy4uYjA4ZTZlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV92aWEuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3ZpYS5jCkBAIC00MjIsNDYgKzQyMiw0NiBAQAogCS8qIEVhcmx5IFZJQSB3aXRob3V0IFVETUEgc3VwcG9ydCAqLwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyB2aWFfbXdkbWFfaW5mbyA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKLQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkucG9ydF9vcHMgPSAmdmlhX3BvcnRfb3BzCiAJfTsKIAkvKiBEaXR0byB3aXRoIElSUSBtYXNraW5nIHJlcXVpcmVkICovCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIHZpYV9td2RtYV9pbmZvX2JvcmtlZCA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKLQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkucG9ydF9vcHMgPSAmdmlhX3BvcnRfb3BzX25vaXJxLAogCX07CiAJLyogVklBIFVETUEgMzMgZGV2aWNlcyAoYW5kIGJvcmtlZCA2NikgKi8KIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gdmlhX3VkbWEzM19pbmZvID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sgPSAweDFmLAotCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sgPSBBVEFfVURNQTIsCiAJCS5wb3J0X29wcyA9ICZ2aWFfcG9ydF9vcHMKIAl9OwogCS8qIFZJQSBVRE1BIDY2IGRldmljZXMgKi8KIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gdmlhX3VkbWE2Nl9pbmZvID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sgPSAweDFmLAotCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sgPSBBVEFfVURNQTQsCiAJCS5wb3J0X29wcyA9ICZ2aWFfcG9ydF9vcHMKIAl9OwogCS8qIFZJQSBVRE1BIDEwMCBkZXZpY2VzICovCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIHZpYV91ZG1hMTAwX2luZm8gPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNSwKIAkJLnBvcnRfb3BzID0gJnZpYV9wb3J0X29wcwogCX07CiAJLyogVURNQTEzMyB3aXRoIGJhZCBBU1QgKEFsbCBjdXJyZW50IDEzMykgKi8KIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gdmlhX3VkbWExMzNfaW5mbyA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKLQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrID0gQVRBX1VETUE2LAkvKiBGSVhNRTogc2hvdWxkIGNoZWNrIG5vcnRoIGJyaWRnZSAqLwogCQkucG9ydF9vcHMgPSAmdmlhX3BvcnRfb3BzCiAJfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfd2luYm9uZC5jIGIvZHJpdmVycy9hdGEvcGF0YV93aW5ib25kLmMKaW5kZXggMzE5ZTE2NC4uNmQ4NjE5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV93aW5ib25kLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV93aW5ib25kLmMKQEAgLTE5Myw3ICsxOTMsNyBAQAogCQlhdGFfcG9ydF9kZXNjKGFwLCAiY21kIDB4JWx4IGN0bCAweCVseCIsIGNtZF9wb3J0LCBjdGxfcG9ydCk7CiAKIAkJYXAtPm9wcyA9ICZ3aW5ib25kX3BvcnRfb3BzOwotCQlhcC0+cGlvX21hc2sgPSAweDFGOworCQlhcC0+cGlvX21hc2sgPSBBVEFfUElPNDsKIAkJYXAtPmZsYWdzIHw9IEFUQV9GTEFHX1NMQVZFX1BPU1M7CiAJCWFwLT5pb2FkZHIuY21kX2FkZHIgPSBjbWRfYWRkcjsKIAkJYXAtPmlvYWRkci5hbHRzdGF0dXNfYWRkciA9IGN0bF9hZGRyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGRjX2FkbWEuYyBiL2RyaXZlcnMvYXRhL3BkY19hZG1hLmMKaW5kZXggYmU1MzU0NS4uMzk1ODgxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGRjX2FkbWEuYworKysgYi9kcml2ZXJzL2F0YS9wZGNfYWRtYS5jCkBAIC0xNDgsNiArMTQ4LDggQEAKIHN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBhZG1hX2F0YV9vcHMgPSB7CiAJLmluaGVyaXRzCQk9ICZhdGFfc2ZmX3BvcnRfb3BzLAogCisJLmxvc3RfaW50ZXJydXB0CQk9IEFUQV9PUF9OVUxMLAorCiAJLmNoZWNrX2F0YXBpX2RtYQk9IGFkbWFfY2hlY2tfYXRhcGlfZG1hLAogCS5xY19wcmVwCQk9IGFkbWFfcWNfcHJlcCwKIAkucWNfaXNzdWUJCT0gYWRtYV9xY19pc3N1ZSwKQEAgLTE2Niw3ICsxNjgsNyBAQAogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUyB8CiAJCQkJICBBVEFfRkxBR19OT19MRUdBQ1kgfCBBVEFfRkxBR19NTUlPIHwKIAkJCQkgIEFUQV9GTEFHX1BJT19QT0xMSU5HLAotCQkucGlvX21hc2sJPSAweDEwLCAvKiBwaW80ICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80X09OTFksCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTQsCiAJCS5wb3J0X29wcwk9ICZhZG1hX2F0YV9vcHMsCiAJfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfZnNsLmMgYi9kcml2ZXJzL2F0YS9zYXRhX2ZzbC5jCmluZGV4IDU1YmM4OGMuLmMyZTkwZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3NhdGFfZnNsLmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV9mc2wuYwpAQCAtMTI3OSw4ICsxMjc5LDggQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBzYXRhX2ZzbF9wb3J0X2luZm9bXSA9IHsKIAl7CiAJIC5mbGFncyA9IFNBVEFfRlNMX0hPU1RfRkxBR1MsCi0JIC5waW9fbWFzayA9IDB4MWYsCS8qIHBpbyAwLTQgKi8KLQkgLnVkbWFfbWFzayA9IDB4N2YsCS8qIHVkbWEgMC02ICovCisJIC5waW9fbWFzayA9IEFUQV9QSU80LAorCSAudWRtYV9tYXNrID0gQVRBX1VETUE2LAogCSAucG9ydF9vcHMgPSAmc2F0YV9mc2xfb3BzLAogCSB9LAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfaW5pYzE2MnguYyBiL2RyaXZlcnMvYXRhL3NhdGFfaW5pYzE2MnguYwppbmRleCBmYmJkODdjLi4zMDVhNGY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9zYXRhX2luaWMxNjJ4LmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV9pbmljMTYyeC5jCkBAIC03NDQsOCArNzQ0LDggQEAKIAogc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluaWNfcG9ydF9pbmZvID0gewogCS5mbGFncwkJCT0gQVRBX0ZMQUdfU0FUQSB8IEFUQV9GTEFHX1BJT19ETUEsCi0JLnBpb19tYXNrCQk9IDB4MWYsCS8qIHBpbzAtNCAqLwotCS5td2RtYV9tYXNrCQk9IDB4MDcsIC8qIG13ZG1hMC0yICovCisJLnBpb19tYXNrCQk9IEFUQV9QSU80LAorCS5td2RtYV9tYXNrCQk9IEFUQV9NV0RNQTIsCiAJLnVkbWFfbWFzawkJPSBBVEFfVURNQTYsCiAJLnBvcnRfb3BzCQk9ICZpbmljX3BvcnRfb3BzCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV9tdi5jIGIvZHJpdmVycy9hdGEvc2F0YV9tdi5jCmluZGV4IDc0YjEwODAuLmEzNzcyMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3NhdGFfbXYuYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX212LmMKQEAgLTEsMTAgKzEsMTMgQEAKIC8qCiAgKiBzYXRhX212LmMgLSBNYXJ2ZWxsIFNBVEEgc3VwcG9ydAogICoKLSAqIENvcHlyaWdodCAyMDA4OiBNYXJ2ZWxsIENvcnBvcmF0aW9uLCBhbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IDIwMDgtMjAwOTogTWFydmVsbCBDb3Jwb3JhdGlvbiwgYWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAyMDA1OiBFTUMgQ29ycG9yYXRpb24sIGFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgMjAwNSBSZWQgSGF0LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKKyAqIE9yaWdpbmFsbHkgd3JpdHRlbiBieSBCcmV0dCBSdXNzLgorICogRXh0ZW5zaXZlIG92ZXJoYXVsIGFuZCBlbmhhbmNlbWVudCBieSBNYXJrIExvcmQgPG1sb3JkQHBvYm94LmNvbT4uCisgKgogICogUGxlYXNlIEFMV0FZUyBjb3B5IGxpbnV4LWlkZUB2Z2VyLmtlcm5lbC5vcmcgb24gZW1haWxzLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC0yNSwyMCArMjgsMTMgQEAKIC8qCiAgKiBzYXRhX212IFRPRE8gbGlzdDoKICAqCi0gKiAtLT4gRXJyYXRhIHdvcmthcm91bmQgZm9yIE5DUSBkZXZpY2UgZXJyb3JzLgotICoKICAqIC0tPiBNb3JlIGVycmF0YSB3b3JrYXJvdW5kcyBmb3IgUENJLVguCiAgKgogICogLS0+IENvbXBsZXRlIGEgZnVsbCBlcnJhdGEgYXVkaXQgZm9yIGFsbCBjaGlwc2V0cyB0byBpZGVudGlmeSBvdGhlcnMuCiAgKgotICogLS0+IEFUQVBJIHN1cHBvcnQgKE1hcnZlbGwgY2xhaW1zIHRoZSA2MHh4LzcweHggY2hpcHMgY2FuIGRvIGl0KS4KLSAqCiAgKiAtLT4gRGV2ZWxvcCBhIGxvdy1wb3dlci1jb25zdW1wdGlvbiBzdHJhdGVneSwgYW5kIGltcGxlbWVudCBpdC4KICAqCi0gKiAtLT4gW0V4cGVyaW1lbnQsIGxvdyBwcmlvcml0eV0gSW52ZXN0aWdhdGUgaW50ZXJydXB0IGNvYWxlc2NpbmcuCi0gKiAgICAgICBRdWl0ZSBvZnRlbiwgZXNwZWNpYWxseSB3aXRoIFBDSSBNZXNzYWdlIFNpZ25hbGxlZCBJbnRlcnJ1cHRzIChNU0kpLAotICogICAgICAgdGhlIG92ZXJoZWFkIHJlZHVjZWQgYnkgaW50ZXJydXB0IG1pdGlnYXRpb24gaXMgcXVpdGUgb2Z0ZW4gbm90Ci0gKiAgICAgICB3b3J0aCB0aGUgbGF0ZW5jeSBjb3N0LgorICogLS0+IEFkZCBzeXNmcyBhdHRyaWJ1dGVzIGZvciBwZXItY2hpcCAvIHBlci1IQyBJUlEgY29hbGVzY2luZyB0aHJlc2hvbGRzLgogICoKICAqIC0tPiBbRXhwZXJpbWVudCwgTWFydmVsbCB2YWx1ZSBhZGRlZF0gSXMgaXQgcG9zc2libGUgdG8gdXNlIHRhcmdldAogICogICAgICAgbW9kZSB0byBjcm9zcy1jb25uZWN0IHR3byBMaW51eCBib3hlcyB3aXRoIE1hcnZlbGwgY2FyZHM/ICBJZiBzbywKQEAgLTY4LDcgKzY0LDI3IEBACiAjaW5jbHVkZSA8bGludXgvbGliYXRhLmg+CiAKICNkZWZpbmUgRFJWX05BTUUJInNhdGFfbXYiCi0jZGVmaW5lIERSVl9WRVJTSU9OCSIxLjI1IgorI2RlZmluZSBEUlZfVkVSU0lPTgkiMS4yNyIKKworLyoKKyAqIG1vZHVsZSBvcHRpb25zCisgKi8KKworc3RhdGljIGludCBtc2k7CisjaWZkZWYgQ09ORklHX1BDSQorbW9kdWxlX3BhcmFtKG1zaSwgaW50LCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MobXNpLCAiRW5hYmxlIHVzZSBvZiBQQ0kgTVNJICgwPW9mZiwgMT1vbikiKTsKKyNlbmRpZgorCitzdGF0aWMgaW50IGlycV9jb2FsZXNjaW5nX2lvX2NvdW50OworbW9kdWxlX3BhcmFtKGlycV9jb2FsZXNjaW5nX2lvX2NvdW50LCBpbnQsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhpcnFfY29hbGVzY2luZ19pb19jb3VudCwKKwkJICJJUlEgY29hbGVzY2luZyBJL08gY291bnQgdGhyZXNob2xkICgwLi4yNTUpIik7CisKK3N0YXRpYyBpbnQgaXJxX2NvYWxlc2NpbmdfdXNlY3M7Cittb2R1bGVfcGFyYW0oaXJxX2NvYWxlc2NpbmdfdXNlY3MsIGludCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKGlycV9jb2FsZXNjaW5nX3VzZWNzLAorCQkgIklSUSBjb2FsZXNjaW5nIHRpbWUgdGhyZXNob2xkIGluIHVzZWNzIik7CiAKIGVudW0gewogCS8qIEJBUidzIGFyZSBlbnVtZXJhdGVkIGluIHRlcm1zIG9mIHBjaV9yZXNvdXJjZV9zdGFydCgpIHRlcm1zICovCkBAIC03OSwxMyArOTUsMzIgQEAKIAlNVl9NQUpPUl9SRUdfQVJFQV9TWgk9IDB4MTAwMDAsCS8qIDY0S0IgKi8KIAlNVl9NSU5PUl9SRUdfQVJFQV9TWgk9IDB4MjAwMCwJLyogOEtCICovCiAKKwkvKiBGb3IgdXNlIHdpdGggYm90aCBJUlEgY29hbGVzY2luZyBtZXRob2RzICgiYWxsIHBvcnRzIiBvciAicGVyLUhDIiAqLworCUNPQUxfQ0xPQ0tTX1BFUl9VU0VDCT0gMTUwLAkJLyogZm9yIGNhbGN1bGF0aW5nIENPQUxfVElNRXMgKi8KKwlNQVhfQ09BTF9USU1FX1RIUkVTSE9MRAk9ICgoMSA8PCAyNCkgLSAxKSwgLyogaW50ZXJuYWwgY2xvY2tzIGNvdW50ICovCisJTUFYX0NPQUxfSU9fQ09VTlQJPSAyNTUsCQkvKiBjb21wbGV0ZWQgSS9PIGNvdW50ICovCisKIAlNVl9QQ0lfUkVHX0JBU0UJCT0gMCwKLQlNVl9JUlFfQ09BTF9SRUdfQkFTRQk9IDB4MTgwMDAsCS8qIDZ4eHggcGFydCBvbmx5ICovCi0JTVZfSVJRX0NPQUxfQ0FVU0UJCT0gKE1WX0lSUV9DT0FMX1JFR19CQVNFICsgMHgwOCksCi0JTVZfSVJRX0NPQUxfQ0FVU0VfTE8JCT0gKE1WX0lSUV9DT0FMX1JFR19CQVNFICsgMHg4OCksCi0JTVZfSVJRX0NPQUxfQ0FVU0VfSEkJCT0gKE1WX0lSUV9DT0FMX1JFR19CQVNFICsgMHg4YyksCi0JTVZfSVJRX0NPQUxfVEhSRVNIT0xECQk9IChNVl9JUlFfQ09BTF9SRUdfQkFTRSArIDB4Y2MpLAotCU1WX0lSUV9DT0FMX1RJTUVfVEhSRVNIT0xECT0gKE1WX0lSUV9DT0FMX1JFR19CQVNFICsgMHhkMCksCisKKwkvKgorCSAqIFBlci1jaGlwICgiYWxsIHBvcnRzIikgaW50ZXJydXB0IGNvYWxlc2NpbmcgZmVhdHVyZS4KKwkgKiBUaGlzIGlzIG9ubHkgZm9yIEdFTl9JSSAvIEdFTl9JSUUgaGFyZHdhcmUuCisJICoKKwkgKiBDb2FsZXNjaW5nIGRlZmVycyB0aGUgaW50ZXJydXB0IHVudGlsIGVpdGhlciB0aGUgSU9fVEhSRVNIT0xECisJICogKGNvdW50IG9mIGNvbXBsZXRlZCBJL09zKSBpcyBtZXQsIG9yIHRoZSBUSU1FX1RIUkVTSE9MRCBpcyBtZXQuCisJICovCisJTVZfQ09BTF9SRUdfQkFTRQk9IDB4MTgwMDAsCisJTVZfSVJRX0NPQUxfQ0FVU0UJPSAoTVZfQ09BTF9SRUdfQkFTRSArIDB4MDgpLAorCUFMTF9QT1JUU19DT0FMX0lSUQk9ICgxIDw8IDQpLAkvKiBhbGwgcG9ydHMgaXJxIGV2ZW50ICovCisKKwlNVl9JUlFfQ09BTF9JT19USFJFU0hPTEQgICA9IChNVl9DT0FMX1JFR19CQVNFICsgMHhjYyksCisJTVZfSVJRX0NPQUxfVElNRV9USFJFU0hPTEQgPSAoTVZfQ09BTF9SRUdfQkFTRSArIDB4ZDApLAorCisJLyoKKwkgKiBSZWdpc3RlcnMgZm9yIHRoZSAodW51c2VkIGhlcmUpIHRyYW5zYWN0aW9uIGNvYWxlc2NpbmcgZmVhdHVyZToKKwkgKi8KKwlNVl9UUkFOX0NPQUxfQ0FVU0VfTE8JPSAoTVZfQ09BTF9SRUdfQkFTRSArIDB4ODgpLAorCU1WX1RSQU5fQ09BTF9DQVVTRV9ISQk9IChNVl9DT0FMX1JFR19CQVNFICsgMHg4YyksCiAKIAlNVl9TQVRBSEMwX1JFR19CQVNFCT0gMHgyMDAwMCwKIAlNVl9GTEFTSF9DVExfT0ZTCT0gMHgxMDQ2YywKQEAgLTExNywxNyArMTUyLDE2IEBACiAKIAkvKiBIb3N0IEZsYWdzICovCiAJTVZfRkxBR19EVUFMX0hDCQk9ICgxIDw8IDMwKSwgIC8qIHR3byBTQVRBIEhvc3QgQ29udHJvbGxlcnMgKi8KLQlNVl9GTEFHX0lSUV9DT0FMRVNDRQk9ICgxIDw8IDI5KSwgIC8qIElSUSBjb2FsZXNjaW5nIGNhcGFiaWxpdHkgKi8KIAogCU1WX0NPTU1PTl9GTEFHUwkJPSBBVEFfRkxBR19TQVRBIHwgQVRBX0ZMQUdfTk9fTEVHQUNZIHwKLQkJCQkgIEFUQV9GTEFHX01NSU8gfCBBVEFfRkxBR19OT19BVEFQSSB8Ci0JCQkJICBBVEFfRkxBR19QSU9fUE9MTElORywKKwkJCQkgIEFUQV9GTEFHX01NSU8gfCBBVEFfRkxBR19QSU9fUE9MTElORywKIAotCU1WXzZYWFhfRkxBR1MJCT0gTVZfRkxBR19JUlFfQ09BTEVTQ0UsCisJTVZfR0VOX0lfRkxBR1MJCT0gTVZfQ09NTU9OX0ZMQUdTIHwgQVRBX0ZMQUdfTk9fQVRBUEksCiAKLQlNVl9HRU5JSUVfRkxBR1MJCT0gTVZfQ09NTU9OX0ZMQUdTIHwgTVZfNlhYWF9GTEFHUyB8Ci0JCQkJICBBVEFfRkxBR19QTVAgfCBBVEFfRkxBR19BQ1BJX1NBVEEgfAotCQkJCSAgQVRBX0ZMQUdfTkNRIHwgQVRBX0ZMQUdfQU4sCisJTVZfR0VOX0lJX0ZMQUdTCQk9IE1WX0NPTU1PTl9GTEFHUyB8IEFUQV9GTEFHX05DUSB8CisJCQkJICBBVEFfRkxBR19QTVAgfCBBVEFfRkxBR19BQ1BJX1NBVEEsCisKKwlNVl9HRU5fSUlFX0ZMQUdTCT0gTVZfR0VOX0lJX0ZMQUdTIHwgQVRBX0ZMQUdfQU4sCiAKIAlDUlFCX0ZMQUdfUkVBRAkJPSAoMSA8PCAwKSwKIAlDUlFCX1RBR19TSElGVAkJPSAxLApAQCAtMTgwLDE2ICsyMTQsMTggQEAKIAlQQ0lfSENfTUFJTl9JUlFfTUFTS19PRlMgID0gMHgxZDY0LAogCVNPQ19IQ19NQUlOX0lSUV9DQVVTRV9PRlMgPSAweDIwMDIwLAogCVNPQ19IQ19NQUlOX0lSUV9NQVNLX09GUyAgPSAweDIwMDI0LAotCUVSUl9JUlEJCQk9ICgxIDw8IDApLAkvKiBzaGlmdCBieSBwb3J0ICMgKi8KLQlET05FX0lSUQkJPSAoMSA8PCAxKSwJLyogc2hpZnQgYnkgcG9ydCAjICovCisJRVJSX0lSUQkJCT0gKDEgPDwgMCksCS8qIHNoaWZ0IGJ5ICgyICogcG9ydCAjKSAqLworCURPTkVfSVJRCQk9ICgxIDw8IDEpLAkvKiBzaGlmdCBieSAoMiAqIHBvcnQgIykgKi8KIAlIQzBfSVJRX1BFTkQJCT0gMHgxZmYsCS8qIGJpdHMgMC04ID0gSEMwJ3MgcG9ydHMgKi8KIAlIQ19TSElGVAkJPSA5LAkJLyogYml0cyA5LTE3ID0gSEMxJ3MgcG9ydHMgKi8KKwlET05FX0lSUV8wXzMJCT0gMHgwMDAwMDBhYSwJLyogRE9ORV9JUlEgcG9ydHMgMCwxLDIsMyAqLworCURPTkVfSVJRXzRfNwkJPSAoRE9ORV9JUlFfMF8zIDw8IEhDX1NISUZUKSwgIC8qIDQsNSw2LDcgKi8KIAlQQ0lfRVJSCQkJPSAoMSA8PCAxOCksCi0JVFJBTl9MT19ET05FCQk9ICgxIDw8IDE5KSwJLyogNnh4eDogSVJRIGNvYWxlc2NpbmcgKi8KLQlUUkFOX0hJX0RPTkUJCT0gKDEgPDwgMjApLAkvKiA2eHh4OiBJUlEgY29hbGVzY2luZyAqLwotCVBPUlRTXzBfM19DT0FMX0RPTkUJPSAoMSA8PCA4KSwKLQlQT1JUU180XzdfQ09BTF9ET05FCT0gKDEgPDwgMTcpLAotCVBPUlRTXzBfN19DT0FMX0RPTkUJPSAoMSA8PCAyMSksCS8qIDZ4eHg6IElSUSBjb2FsZXNjaW5nICovCisJVFJBTl9DT0FMX0xPX0RPTkUJPSAoMSA8PCAxOSksCS8qIHRyYW5zYWN0aW9uIGNvYWxlc2NpbmcgKi8KKwlUUkFOX0NPQUxfSElfRE9ORQk9ICgxIDw8IDIwKSwJLyogdHJhbnNhY3Rpb24gY29hbGVzY2luZyAqLworCVBPUlRTXzBfM19DT0FMX0RPTkUJPSAoMSA8PCA4KSwJLyogSEMwIElSUSBjb2FsZXNjaW5nICovCisJUE9SVFNfNF83X0NPQUxfRE9ORQk9ICgxIDw8IDE3KSwJLyogSEMxIElSUSBjb2FsZXNjaW5nICovCisJQUxMX1BPUlRTX0NPQUxfRE9ORQk9ICgxIDw8IDIxKSwJLyogR0VOX0lJKEUpIElSUSBjb2FsZXNjaW5nICovCiAJR1BJT19JTlQJCT0gKDEgPDwgMjIpLAogCVNFTEZfSU5UCQk9ICgxIDw8IDIzKSwKIAlUV1NJX0lOVAkJPSAoMSA8PCAyNCksCkBAIC0yMDUsNiArMjQxLDIxIEBACiAJSENfQ09BTF9JUlEJCT0gKDEgPDwgNCksCS8qIElSUSBjb2FsZXNjaW5nICovCiAJREVWX0lSUQkJCT0gKDEgPDwgOCksCS8qIHNoaWZ0IGJ5IHBvcnQgIyAqLwogCisJLyoKKwkgKiBQZXItSEMgKEhvc3QtQ29udHJvbGxlcikgaW50ZXJydXB0IGNvYWxlc2NpbmcgZmVhdHVyZS4KKwkgKiBUaGlzIGlzIHByZXNlbnQgb24gYWxsIGNoaXAgZ2VuZXJhdGlvbnMuCisJICoKKwkgKiBDb2FsZXNjaW5nIGRlZmVycyB0aGUgaW50ZXJydXB0IHVudGlsIGVpdGhlciB0aGUgSU9fVEhSRVNIT0xECisJICogKGNvdW50IG9mIGNvbXBsZXRlZCBJL09zKSBpcyBtZXQsIG9yIHRoZSBUSU1FX1RIUkVTSE9MRCBpcyBtZXQuCisJICovCisJSENfSVJRX0NPQUxfSU9fVEhSRVNIT0xEX09GUwk9IDB4MDAwYywKKwlIQ19JUlFfQ09BTF9USU1FX1RIUkVTSE9MRF9PRlMJPSAweDAwMTAsCisKKwlTT0NfTEVEX0NUUkxfT0ZTCT0gMHgyYywKKwlTT0NfTEVEX0NUUkxfQkxJTksJPSAoMSA8PCAwKSwJLyogQWN0aXZlIExFRCBibGluayAqLworCVNPQ19MRURfQ1RSTF9BQ1RfUFJFU0VOQ0UgPSAoMSA8PCAyKSwJLyogTXVsdGlwbGV4IGRldiBwcmVzZW5jZSAqLworCQkJCQkJLyogIHdpdGggZGV2IGFjdGl2aXR5IExFRCAqLworCiAJLyogU2hhZG93IGJsb2NrIHJlZ2lzdGVycyAqLwogCVNIRF9CTEtfT0ZTCQk9IDB4MTAwLAogCVNIRF9DVExfQVNUX09GUwkJPSAweDIwLAkJLyogb2ZzIGZyb20gU0hEX0JMS19PRlMgKi8KQEAgLTM0Niw2ICszOTcsMTIgQEAKIAlFRE1BX0FSQl9DRkdfT0ZTCT0gMHgzOCwKIAogCUVETUFfSEFMVENPTkRfT0ZTCT0gMHg2MCwJCS8qIEdlbklJZSBoYWx0IGNvbmRpdGlvbnMgKi8KKwlFRE1BX1VOS05PV05fUlNWRF9PRlMJPSAweDZDLAkJLyogR2VuSUllIHVua25vd24vcmVzZXJ2ZWQgKi8KKworCUJNRE1BX0NNRF9PRlMJCT0gMHgyMjQsCS8qIGJtZG1hIGNvbW1hbmQgcmVnaXN0ZXIgKi8KKwlCTURNQV9TVEFUVVNfT0ZTCT0gMHgyMjgsCS8qIGJtZG1hIHN0YXR1cyByZWdpc3RlciAqLworCUJNRE1BX1BSRF9MT1dfT0ZTCT0gMHgyMmMsCS8qIGJtZG1hIFBSRCBhZGRyIDMxOjAgKi8KKwlCTURNQV9QUkRfSElHSF9PRlMJPSAweDIzMCwJLyogYm1kbWEgUFJEIGFkZHIgNjM6MzIgKi8KIAogCS8qIEhvc3QgcHJpdmF0ZSBmbGFncyAoaHBfZmxhZ3MpICovCiAJTVZfSFBfRkxBR19NU0kJCT0gKDEgPDwgMCksCkBAIC0zNTksMTIgKzQxNiwxNCBAQAogCU1WX0hQX1BDSUUJCT0gKDEgPDwgOSksCS8qIFBDSWUgYnVzL3JlZ3M6IDcwNDIgKi8KIAlNVl9IUF9DVVRfVEhST1VHSAk9ICgxIDw8IDEwKSwJLyogY2FuIHVzZSBFRE1BIGN1dC10aHJvdWdoICovCiAJTVZfSFBfRkxBR19TT0MJCT0gKDEgPDwgMTEpLAkvKiBTeXN0ZW1PbkNoaXAsIG5vIFBDSSAqLworCU1WX0hQX1FVSVJLX0xFRF9CTElOS19FTiA9ICgxIDw8IDEyKSwJLyogaXMgbGVkIGJsaW5raW5nIGVuYWJsZWQ/ICovCiAKIAkvKiBQb3J0IHByaXZhdGUgZmxhZ3MgKHBwX2ZsYWdzKSAqLwogCU1WX1BQX0ZMQUdfRURNQV9FTgk9ICgxIDw8IDApLAkvKiBpcyBFRE1BIGVuZ2luZSBlbmFibGVkPyAqLwogCU1WX1BQX0ZMQUdfTkNRX0VOCT0gKDEgPDwgMSksCS8qIGlzIEVETUEgc2V0IHVwIGZvciBOQ1E/ICovCiAJTVZfUFBfRkxBR19GQlNfRU4JPSAoMSA8PCAyKSwJLyogaXMgRURNQSBzZXQgdXAgZm9yIEZCUz8gKi8KIAlNVl9QUF9GTEFHX0RFTEFZRURfRUgJPSAoMSA8PCAzKSwJLyogZGVsYXllZCBkZXYgZXJyIGhhbmRsaW5nICovCisJTVZfUFBfRkxBR19GQUtFX0FUQV9CVVNZID0gKDEgPDwgNCksCS8qIGlnbm9yZSBpbml0aWFsIEFUQV9EUkRZICovCiB9OwogCiAjZGVmaW5lIElTX0dFTl9JKGhwcml2KSAoKGhwcml2KS0+aHBfZmxhZ3MgJiBNVl9IUF9HRU5fSSkKQEAgLTQzMyw2ICs0OTIsMTggQEAKIAlfX2xlMzIJCQlyZXNlcnZlZDsKIH07CiAKKy8qCisgKiBXZSBrZWVwIGEgbG9jYWwgY2FjaGUgb2YgYSBmZXcgZnJlcXVlbnRseSBhY2Nlc3NlZCBwb3J0CisgKiByZWdpc3RlcnMgaGVyZSwgdG8gYXZvaWQgaGF2aW5nIHRvIHJlYWQgdGhlbSAodmVyeSBzbG93KQorICogd2hlbiBzd2l0Y2hpbmcgYmV0d2VlbiBFRE1BIGFuZCBub24tRURNQSBtb2Rlcy4KKyAqLworc3RydWN0IG12X2NhY2hlZF9yZWdzIHsKKwl1MzIJCQlmaXNjZmc7CisJdTMyCQkJbHRtb2RlOworCXUzMgkJCWhhbHRjb25kOworCXUzMgkJCXVua25vd25fcnN2ZDsKK307CisKIHN0cnVjdCBtdl9wb3J0X3ByaXYgewogCXN0cnVjdCBtdl9jcnFiCQkqY3JxYjsKIAlkbWFfYWRkcl90CQljcnFiX2RtYTsKQEAgLTQ0NSw2ICs1MTYsNyBAQAogCXVuc2lnbmVkIGludAkJcmVzcF9pZHg7CiAKIAl1MzIJCQlwcF9mbGFnczsKKwlzdHJ1Y3QgbXZfY2FjaGVkX3JlZ3MJY2FjaGVkOwogCXVuc2lnbmVkIGludAkJZGVsYXllZF9laF9wbXBfbWFwOwogfTsKIApAQCAtNTM1LDcgKzYwNyw3IEBACiAJCQkgICAgIHVuc2lnbmVkIGludCBwb3J0X25vKTsKIHN0YXRpYyBpbnQgbXZfc3RvcF9lZG1hKHN0cnVjdCBhdGFfcG9ydCAqYXApOwogc3RhdGljIGludCBtdl9zdG9wX2VkbWFfZW5naW5lKHZvaWQgX19pb21lbSAqcG9ydF9tbWlvKTsKLXN0YXRpYyB2b2lkIG12X2VkbWFfY2ZnKHN0cnVjdCBhdGFfcG9ydCAqYXAsIGludCB3YW50X25jcSk7CitzdGF0aWMgdm9pZCBtdl9lZG1hX2NmZyhzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBpbnQgd2FudF9uY3EsIGludCB3YW50X2VkbWEpOwogCiBzdGF0aWMgdm9pZCBtdl9wbXBfc2VsZWN0KHN0cnVjdCBhdGFfcG9ydCAqYXAsIGludCBwbXApOwogc3RhdGljIGludCBtdl9wbXBfaGFyZHJlc2V0KHN0cnVjdCBhdGFfbGluayAqbGluaywgdW5zaWduZWQgaW50ICpjbGFzcywKQEAgLTU0Niw2ICs2MTgsMTQgQEAKIHN0YXRpYyB2b2lkIG12X3Byb2Nlc3NfY3JwYl9lbnRyaWVzKHN0cnVjdCBhdGFfcG9ydCAqYXAsCiAJCQkJCXN0cnVjdCBtdl9wb3J0X3ByaXYgKnBwKTsKIAorc3RhdGljIHZvaWQgbXZfc2ZmX2lycV9jbGVhcihzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKK3N0YXRpYyBpbnQgbXZfY2hlY2tfYXRhcGlfZG1hKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOworc3RhdGljIHZvaWQgbXZfYm1kbWFfc2V0dXAoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CitzdGF0aWMgdm9pZCBtdl9ibWRtYV9zdGFydChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKK3N0YXRpYyB2b2lkIG12X2JtZG1hX3N0b3Aoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CitzdGF0aWMgdTggICBtdl9ibWRtYV9zdGF0dXMoc3RydWN0IGF0YV9wb3J0ICphcCk7CitzdGF0aWMgdTggbXZfc2ZmX2NoZWNrX3N0YXR1cyhzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKKwogLyogLnNnX3RhYmxlc2l6ZSBpcyAoTVZfTUFYX1NHX0NUIC8gMikgaW4gdGhlIHN0cnVjdHVyZXMgYmVsb3cKICAqIGJlY2F1c2Ugd2UgaGF2ZSB0byBhbGxvdyByb29tIGZvciB3b3JzdCBjYXNlIHNwbGl0dGluZyBvZgogICogUFJEcyBmb3IgNjRLIGJvdW5kYXJpZXMgaW4gbXZfZmlsbF9zZygpLgpAQCAtNTY2LDYgKzY0Niw4IEBACiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgbXY1X29wcyA9IHsKIAkuaW5oZXJpdHMJCT0gJmF0YV9zZmZfcG9ydF9vcHMsCiAKKwkubG9zdF9pbnRlcnJ1cHQJCT0gQVRBX09QX05VTEwsCisKIAkucWNfZGVmZXIJCT0gbXZfcWNfZGVmZXIsCiAJLnFjX3ByZXAJCT0gbXZfcWNfcHJlcCwKIAkucWNfaXNzdWUJCT0gbXZfcWNfaXNzdWUsCkBAIC01OTMsNiArNjc1LDE0IEBACiAJLnBtcF9zb2Z0cmVzZXQJCT0gbXZfc29mdHJlc2V0LAogCS5zb2Z0cmVzZXQJCT0gbXZfc29mdHJlc2V0LAogCS5lcnJvcl9oYW5kbGVyCQk9IG12X3BtcF9lcnJvcl9oYW5kbGVyLAorCisJLnNmZl9jaGVja19zdGF0dXMJPSBtdl9zZmZfY2hlY2tfc3RhdHVzLAorCS5zZmZfaXJxX2NsZWFyCQk9IG12X3NmZl9pcnFfY2xlYXIsCisJLmNoZWNrX2F0YXBpX2RtYQk9IG12X2NoZWNrX2F0YXBpX2RtYSwKKwkuYm1kbWFfc2V0dXAJCT0gbXZfYm1kbWFfc2V0dXAsCisJLmJtZG1hX3N0YXJ0CQk9IG12X2JtZG1hX3N0YXJ0LAorCS5ibWRtYV9zdG9wCQk9IG12X2JtZG1hX3N0b3AsCisJLmJtZG1hX3N0YXR1cwkJPSBtdl9ibWRtYV9zdGF0dXMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgbXZfaWllX29wcyA9IHsKQEAgLTYwMyw1MyArNjkzLDQ5IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBtdl9wb3J0X2luZm9bXSA9IHsKIAl7ICAvKiBjaGlwXzUwNHggKi8KLQkJLmZsYWdzCQk9IE1WX0NPTU1PTl9GTEFHUywKKwkJLmZsYWdzCQk9IE1WX0dFTl9JX0ZMQUdTLAogCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJm12NV9vcHMsCiAJfSwKIAl7ICAvKiBjaGlwXzUwOHggKi8KLQkJLmZsYWdzCQk9IE1WX0NPTU1PTl9GTEFHUyB8IE1WX0ZMQUdfRFVBTF9IQywKKwkJLmZsYWdzCQk9IE1WX0dFTl9JX0ZMQUdTIHwgTVZfRkxBR19EVUFMX0hDLAogCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJm12NV9vcHMsCiAJfSwKIAl7ICAvKiBjaGlwXzUwODAgKi8KLQkJLmZsYWdzCQk9IE1WX0NPTU1PTl9GTEFHUyB8IE1WX0ZMQUdfRFVBTF9IQywKKwkJLmZsYWdzCQk9IE1WX0dFTl9JX0ZMQUdTIHwgTVZfRkxBR19EVUFMX0hDLAogCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJm12NV9vcHMsCiAJfSwKIAl7ICAvKiBjaGlwXzYwNHggKi8KLQkJLmZsYWdzCQk9IE1WX0NPTU1PTl9GTEFHUyB8IE1WXzZYWFhfRkxBR1MgfAotCQkJCSAgQVRBX0ZMQUdfUE1QIHwgQVRBX0ZMQUdfQUNQSV9TQVRBIHwKLQkJCQkgIEFUQV9GTEFHX05DUSwKKwkJLmZsYWdzCQk9IE1WX0dFTl9JSV9GTEFHUywKIAkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZtdjZfb3BzLAogCX0sCiAJeyAgLyogY2hpcF82MDh4ICovCi0JCS5mbGFncwkJPSBNVl9DT01NT05fRkxBR1MgfCBNVl82WFhYX0ZMQUdTIHwKLQkJCQkgIEFUQV9GTEFHX1BNUCB8IEFUQV9GTEFHX0FDUElfU0FUQSB8Ci0JCQkJICBBVEFfRkxBR19OQ1EgfCBNVl9GTEFHX0RVQUxfSEMsCisJCS5mbGFncwkJPSBNVl9HRU5fSUlfRkxBR1MgfCBNVl9GTEFHX0RVQUxfSEMsCiAJCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmbXY2X29wcywKIAl9LAogCXsgIC8qIGNoaXBfNjA0MiAqLwotCQkuZmxhZ3MJCT0gTVZfR0VOSUlFX0ZMQUdTLAorCQkuZmxhZ3MJCT0gTVZfR0VOX0lJRV9GTEFHUywKIAkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZtdl9paWVfb3BzLAogCX0sCiAJeyAgLyogY2hpcF83MDQyICovCi0JCS5mbGFncwkJPSBNVl9HRU5JSUVfRkxBR1MsCisJCS5mbGFncwkJPSBNVl9HRU5fSUlFX0ZMQUdTLAogCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJm12X2lpZV9vcHMsCiAJfSwKIAl7ICAvKiBjaGlwX3NvYyAqLwotCQkuZmxhZ3MJCT0gTVZfR0VOSUlFX0ZMQUdTLAorCQkuZmxhZ3MJCT0gTVZfR0VOX0lJRV9GTEFHUywKIAkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZtdl9paWVfb3BzLApAQCAtNzk0LDYgKzg4MCw0NCBAQAogCXJldHVybiAoKHBvcnRfZmxhZ3MgJiBNVl9GTEFHX0RVQUxfSEMpID8gMiA6IDEpOwogfQogCisvKioKKyAqICAgICAgbXZfc2F2ZV9jYWNoZWRfcmVncyAtIChyZS0paW5pdGlhbGl6ZSBjYWNoZWQgcG9ydCByZWdpc3RlcnMKKyAqICAgICAgQGFwOiB0aGUgcG9ydCB3aG9zZSByZWdpc3RlcnMgd2UgYXJlIGNhY2hpbmcKKyAqCisgKglJbml0aWFsaXplIHRoZSBsb2NhbCBjYWNoZSBvZiBwb3J0IHJlZ2lzdGVycywKKyAqCXNvIHRoYXQgcmVhZGluZyB0aGVtIG92ZXIgYW5kIG92ZXIgYWdhaW4gY2FuCisgKgliZSBhdm9pZGVkIG9uIHRoZSBob3R0ZXIgcGF0aHMgb2YgdGhpcyBkcml2ZXIuCisgKglUaGlzIHNhdmVzIGEgZmV3IG1pY3Jvc2Vjb25kcyBlYWNoIHRpbWUgd2Ugc3dpdGNoCisgKgl0by9mcm9tIEVETUEgbW9kZSB0byBwZXJmb3JtIChlZy4pIGEgZHJpdmUgY2FjaGUgZmx1c2guCisgKi8KK3N0YXRpYyB2b2lkIG12X3NhdmVfY2FjaGVkX3JlZ3Moc3RydWN0IGF0YV9wb3J0ICphcCkKK3sKKwl2b2lkIF9faW9tZW0gKnBvcnRfbW1pbyA9IG12X2FwX2Jhc2UoYXApOworCXN0cnVjdCBtdl9wb3J0X3ByaXYgKnBwID0gYXAtPnByaXZhdGVfZGF0YTsKKworCXBwLT5jYWNoZWQuZmlzY2ZnID0gcmVhZGwocG9ydF9tbWlvICsgRklTQ0ZHX09GUyk7CisJcHAtPmNhY2hlZC5sdG1vZGUgPSByZWFkbChwb3J0X21taW8gKyBMVE1PREVfT0ZTKTsKKwlwcC0+Y2FjaGVkLmhhbHRjb25kID0gcmVhZGwocG9ydF9tbWlvICsgRURNQV9IQUxUQ09ORF9PRlMpOworCXBwLT5jYWNoZWQudW5rbm93bl9yc3ZkID0gcmVhZGwocG9ydF9tbWlvICsgRURNQV9VTktOT1dOX1JTVkRfT0ZTKTsKK30KKworLyoqCisgKiAgICAgIG12X3dyaXRlX2NhY2hlZF9yZWcgLSB3cml0ZSB0byBhIGNhY2hlZCBwb3J0IHJlZ2lzdGVyCisgKiAgICAgIEBhZGRyOiBoYXJkd2FyZSBhZGRyZXNzIG9mIHRoZSByZWdpc3RlcgorICogICAgICBAb2xkOiBwb2ludGVyIHRvIGNhY2hlZCB2YWx1ZSBvZiB0aGUgcmVnaXN0ZXIKKyAqICAgICAgQG5ldzogbmV3IHZhbHVlIGZvciB0aGUgcmVnaXN0ZXIKKyAqCisgKglXcml0ZSBhIG5ldyB2YWx1ZSB0byBhIGNhY2hlZCByZWdpc3RlciwKKyAqCWJ1dCBvbmx5IGlmIHRoZSB2YWx1ZSBpcyBkaWZmZXJlbnQgZnJvbSBiZWZvcmUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBtdl93cml0ZV9jYWNoZWRfcmVnKHZvaWQgX19pb21lbSAqYWRkciwgdTMyICpvbGQsIHUzMiBuZXcpCit7CisJaWYgKG5ldyAhPSAqb2xkKSB7CisJCSpvbGQgPSBuZXc7CisJCXdyaXRlbChuZXcsIGFkZHIpOworCX0KK30KKwogc3RhdGljIHZvaWQgbXZfc2V0X2VkbWFfcHRycyh2b2lkIF9faW9tZW0gKnBvcnRfbW1pbywKIAkJCSAgICAgc3RydWN0IG12X2hvc3RfcHJpdiAqaHByaXYsCiAJCQkgICAgIHN0cnVjdCBtdl9wb3J0X3ByaXYgKnBwKQpAQCAtODI1LDYgKzk0OSwyMyBAQAogCQkgcG9ydF9tbWlvICsgRURNQV9SU1BfUV9PVVRfUFRSX09GUyk7CiB9CiAKK3N0YXRpYyB2b2lkIG12X3dyaXRlX21haW5faXJxX21hc2sodTMyIG1hc2ssIHN0cnVjdCBtdl9ob3N0X3ByaXYgKmhwcml2KQoreworCS8qCisJICogV2hlbiB3cml0aW5nIHRvIHRoZSBtYWluX2lycV9tYXNrIGluIGhhcmR3YXJlLAorCSAqIHdlIG11c3QgZW5zdXJlIGV4Y2x1c2l2aXR5IGJldHdlZW4gdGhlIGludGVycnVwdCBjb2FsZXNjaW5nIGJpdHMKKwkgKiBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgaW5kaXZpZHVhbCBwb3J0IERPTkVfSVJRIGJpdHMuCisJICoKKwkgKiBOb3RlIHRoYXQgdGhpcyByZWdpc3RlciBpcyByZWFsbHkgYW4gIklSUSBlbmFibGUiIHJlZ2lzdGVyLAorCSAqIG5vdCBhbiAiSVJRIG1hc2siIHJlZ2lzdGVyIGFzIE1hcnZlbGwncyBuYW1pbmcgbWlnaHQgc3VnZ2VzdC4KKwkgKi8KKwlpZiAobWFzayAmIChBTExfUE9SVFNfQ09BTF9ET05FIHwgUE9SVFNfMF8zX0NPQUxfRE9ORSkpCisJCW1hc2sgJj0gfkRPTkVfSVJRXzBfMzsKKwlpZiAobWFzayAmIChBTExfUE9SVFNfQ09BTF9ET05FIHwgUE9SVFNfNF83X0NPQUxfRE9ORSkpCisJCW1hc2sgJj0gfkRPTkVfSVJRXzRfNzsKKwl3cml0ZWxmbChtYXNrLCBocHJpdi0+bWFpbl9pcnFfbWFza19hZGRyKTsKK30KKwogc3RhdGljIHZvaWQgbXZfc2V0X21haW5faXJxX21hc2soc3RydWN0IGF0YV9ob3N0ICpob3N0LAogCQkJCSB1MzIgZGlzYWJsZV9iaXRzLCB1MzIgZW5hYmxlX2JpdHMpCiB7CkBAIC04MzUsNyArOTc2LDcgQEAKIAluZXdfbWFzayA9IChvbGRfbWFzayAmIH5kaXNhYmxlX2JpdHMpIHwgZW5hYmxlX2JpdHM7CiAJaWYgKG5ld19tYXNrICE9IG9sZF9tYXNrKSB7CiAJCWhwcml2LT5tYWluX2lycV9tYXNrID0gbmV3X21hc2s7Ci0JCXdyaXRlbGZsKG5ld19tYXNrLCBocHJpdi0+bWFpbl9pcnFfbWFza19hZGRyKTsKKwkJbXZfd3JpdGVfbWFpbl9pcnFfbWFzayhuZXdfbWFzaywgaHByaXYpOwogCX0KIH0KIApAQCAtODUyLDggKzk5Myw5NCBAQAogCW12X3NldF9tYWluX2lycV9tYXNrKGFwLT5ob3N0LCBkaXNhYmxlX2JpdHMsIGVuYWJsZV9iaXRzKTsKIH0KIAorc3RhdGljIHZvaWQgbXZfY2xlYXJfYW5kX2VuYWJsZV9wb3J0X2lycXMoc3RydWN0IGF0YV9wb3J0ICphcCwKKwkJCQkJICB2b2lkIF9faW9tZW0gKnBvcnRfbW1pbywKKwkJCQkJICB1bnNpZ25lZCBpbnQgcG9ydF9pcnFzKQoreworCXN0cnVjdCBtdl9ob3N0X3ByaXYgKmhwcml2ID0gYXAtPmhvc3QtPnByaXZhdGVfZGF0YTsKKwlpbnQgaGFyZHBvcnQgPSBtdl9oYXJkcG9ydF9mcm9tX3BvcnQoYXAtPnBvcnRfbm8pOworCXZvaWQgX19pb21lbSAqaGNfbW1pbyA9IG12X2hjX2Jhc2VfZnJvbV9wb3J0KAorCQkJCW12X2hvc3RfYmFzZShhcC0+aG9zdCksIGFwLT5wb3J0X25vKTsKKwl1MzIgaGNfaXJxX2NhdXNlOworCisJLyogY2xlYXIgRURNQSBldmVudCBpbmRpY2F0b3JzLCBpZiBhbnkgKi8KKwl3cml0ZWxmbCgwLCBwb3J0X21taW8gKyBFRE1BX0VSUl9JUlFfQ0FVU0VfT0ZTKTsKKworCS8qIGNsZWFyIHBlbmRpbmcgaXJxIGV2ZW50cyAqLworCWhjX2lycV9jYXVzZSA9IH4oKERFVl9JUlEgfCBETUFfSVJRKSA8PCBoYXJkcG9ydCk7CisJd3JpdGVsZmwoaGNfaXJxX2NhdXNlLCBoY19tbWlvICsgSENfSVJRX0NBVVNFX09GUyk7CisKKwkvKiBjbGVhciBGSVMgSVJRIENhdXNlICovCisJaWYgKElTX0dFTl9JSUUoaHByaXYpKQorCQl3cml0ZWxmbCgwLCBwb3J0X21taW8gKyBTQVRBX0ZJU19JUlFfQ0FVU0VfT0ZTKTsKKworCW12X2VuYWJsZV9wb3J0X2lycXMoYXAsIHBvcnRfaXJxcyk7Cit9CisKK3N0YXRpYyB2b2lkIG12X3NldF9pcnFfY29hbGVzY2luZyhzdHJ1Y3QgYXRhX2hvc3QgKmhvc3QsCisJCQkJICB1bnNpZ25lZCBpbnQgY291bnQsIHVuc2lnbmVkIGludCB1c2VjcykKK3sKKwlzdHJ1Y3QgbXZfaG9zdF9wcml2ICpocHJpdiA9IGhvc3QtPnByaXZhdGVfZGF0YTsKKwl2b2lkIF9faW9tZW0gKm1taW8gPSBocHJpdi0+YmFzZSwgKmhjX21taW87CisJdTMyIGNvYWxfZW5hYmxlID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCBjbGtzLCBpc19kdWFsX2hjID0gaHByaXYtPm5fcG9ydHMgPiBNVl9QT1JUU19QRVJfSEM7CisJY29uc3QgdTMyIGNvYWxfZGlzYWJsZSA9IFBPUlRTXzBfM19DT0FMX0RPTkUgfCBQT1JUU180XzdfQ09BTF9ET05FIHwKKwkJCQkJCQlBTExfUE9SVFNfQ09BTF9ET05FOworCisJLyogRGlzYWJsZSBJUlEgY29hbGVzY2luZyBpZiBlaXRoZXIgdGhyZXNob2xkIGlzIHplcm8gKi8KKwlpZiAoIXVzZWNzIHx8ICFjb3VudCkgeworCQljbGtzID0gY291bnQgPSAwOworCX0gZWxzZSB7CisJCS8qIFJlc3BlY3QgbWF4aW11bSBsaW1pdHMgb2YgdGhlIGhhcmR3YXJlICovCisJCWNsa3MgPSB1c2VjcyAqIENPQUxfQ0xPQ0tTX1BFUl9VU0VDOworCQlpZiAoY2xrcyA+IE1BWF9DT0FMX1RJTUVfVEhSRVNIT0xEKQorCQkJY2xrcyA9IE1BWF9DT0FMX1RJTUVfVEhSRVNIT0xEOworCQlpZiAoY291bnQgPiBNQVhfQ09BTF9JT19DT1VOVCkKKwkJCWNvdW50ID0gTUFYX0NPQUxfSU9fQ09VTlQ7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKKwltdl9zZXRfbWFpbl9pcnFfbWFzayhob3N0LCBjb2FsX2Rpc2FibGUsIDApOworCisJaWYgKGlzX2R1YWxfaGMgJiYgIUlTX0dFTl9JKGhwcml2KSkgeworCQkvKgorCQkgKiBHRU5fSUkvR0VOX0lJRSB3aXRoIGR1YWwgaG9zdCBjb250cm9sbGVyczoKKwkJICogb25lIHNldCBvZiBnbG9iYWwgdGhyZXNob2xkcyBmb3IgdGhlIGVudGlyZSBjaGlwLgorCQkgKi8KKwkJd3JpdGVsKGNsa3MsICBtbWlvICsgTVZfSVJRX0NPQUxfVElNRV9USFJFU0hPTEQpOworCQl3cml0ZWwoY291bnQsIG1taW8gKyBNVl9JUlFfQ09BTF9JT19USFJFU0hPTEQpOworCQkvKiBjbGVhciBsZWZ0b3ZlciBjb2FsIElSUSBiaXQgKi8KKwkJd3JpdGVsKH5BTExfUE9SVFNfQ09BTF9JUlEsIG1taW8gKyBNVl9JUlFfQ09BTF9DQVVTRSk7CisJCWlmIChjb3VudCkKKwkJCWNvYWxfZW5hYmxlID0gQUxMX1BPUlRTX0NPQUxfRE9ORTsKKwkJY2xrcyA9IGNvdW50ID0gMDsgLyogZm9yY2UgY2xlYXJpbmcgb2YgcmVndWxhciByZWdzIGJlbG93ICovCisJfQorCisJLyoKKwkgKiBBbGwgY2hpcHM6IGluZGVwZW5kZW50IHRocmVzaG9sZHMgZm9yIGVhY2ggSEMgb24gdGhlIGNoaXAuCisJICovCisJaGNfbW1pbyA9IG12X2hjX2Jhc2VfZnJvbV9wb3J0KG1taW8sIDApOworCXdyaXRlbChjbGtzLCAgaGNfbW1pbyArIEhDX0lSUV9DT0FMX1RJTUVfVEhSRVNIT0xEX09GUyk7CisJd3JpdGVsKGNvdW50LCBoY19tbWlvICsgSENfSVJRX0NPQUxfSU9fVEhSRVNIT0xEX09GUyk7CisJd3JpdGVsKH5IQ19DT0FMX0lSUSwgaGNfbW1pbyArIEhDX0lSUV9DQVVTRV9PRlMpOworCWlmIChjb3VudCkKKwkJY29hbF9lbmFibGUgfD0gUE9SVFNfMF8zX0NPQUxfRE9ORTsKKwlpZiAoaXNfZHVhbF9oYykgeworCQloY19tbWlvID0gbXZfaGNfYmFzZV9mcm9tX3BvcnQobW1pbywgTVZfUE9SVFNfUEVSX0hDKTsKKwkJd3JpdGVsKGNsa3MsICBoY19tbWlvICsgSENfSVJRX0NPQUxfVElNRV9USFJFU0hPTERfT0ZTKTsKKwkJd3JpdGVsKGNvdW50LCBoY19tbWlvICsgSENfSVJRX0NPQUxfSU9fVEhSRVNIT0xEX09GUyk7CisJCXdyaXRlbCh+SENfQ09BTF9JUlEsIGhjX21taW8gKyBIQ19JUlFfQ0FVU0VfT0ZTKTsKKwkJaWYgKGNvdW50KQorCQkJY29hbF9lbmFibGUgfD0gUE9SVFNfNF83X0NPQUxfRE9ORTsKKwl9CisKKwltdl9zZXRfbWFpbl9pcnFfbWFzayhob3N0LCAwLCBjb2FsX2VuYWJsZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdC0+bG9jaywgZmxhZ3MpOworfQorCiAvKioKLSAqICAgICAgbXZfc3RhcnRfZG1hIC0gRW5hYmxlIGVETUEgZW5naW5lCisgKiAgICAgIG12X3N0YXJ0X2VkbWEgLSBFbmFibGUgZURNQSBlbmdpbmUKICAqICAgICAgQGJhc2U6IHBvcnQgYmFzZSBhZGRyZXNzCiAgKiAgICAgIEBwcDogcG9ydCBwcml2YXRlIGRhdGEKICAqCkBAIC04NjMsNyArMTA5MCw3IEBACiAgKiAgICAgIExPQ0tJTkc6CiAgKiAgICAgIEluaGVyaXRlZCBmcm9tIGNhbGxlci4KICAqLwotc3RhdGljIHZvaWQgbXZfc3RhcnRfZG1hKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHZvaWQgX19pb21lbSAqcG9ydF9tbWlvLAorc3RhdGljIHZvaWQgbXZfc3RhcnRfZWRtYShzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB2b2lkIF9faW9tZW0gKnBvcnRfbW1pbywKIAkJCSBzdHJ1Y3QgbXZfcG9ydF9wcml2ICpwcCwgdTggcHJvdG9jb2wpCiB7CiAJaW50IHdhbnRfbmNxID0gKHByb3RvY29sID09IEFUQV9QUk9UX05DUSk7CkBAIC04NzUsMjYgKzExMDIsMTEgQEAKIAl9CiAJaWYgKCEocHAtPnBwX2ZsYWdzICYgTVZfUFBfRkxBR19FRE1BX0VOKSkgewogCQlzdHJ1Y3QgbXZfaG9zdF9wcml2ICpocHJpdiA9IGFwLT5ob3N0LT5wcml2YXRlX2RhdGE7Ci0JCWludCBoYXJkcG9ydCA9IG12X2hhcmRwb3J0X2Zyb21fcG9ydChhcC0+cG9ydF9ubyk7Ci0JCXZvaWQgX19pb21lbSAqaGNfbW1pbyA9IG12X2hjX2Jhc2VfZnJvbV9wb3J0KAotCQkJCQltdl9ob3N0X2Jhc2UoYXAtPmhvc3QpLCBhcC0+cG9ydF9ubyk7Ci0JCXUzMiBoY19pcnFfY2F1c2U7CiAKLQkJLyogY2xlYXIgRURNQSBldmVudCBpbmRpY2F0b3JzLCBpZiBhbnkgKi8KLQkJd3JpdGVsZmwoMCwgcG9ydF9tbWlvICsgRURNQV9FUlJfSVJRX0NBVVNFX09GUyk7Ci0KLQkJLyogY2xlYXIgcGVuZGluZyBpcnEgZXZlbnRzICovCi0JCWhjX2lycV9jYXVzZSA9IH4oKERFVl9JUlEgfCBETUFfSVJRKSA8PCBoYXJkcG9ydCk7Ci0JCXdyaXRlbGZsKGhjX2lycV9jYXVzZSwgaGNfbW1pbyArIEhDX0lSUV9DQVVTRV9PRlMpOwotCi0JCW12X2VkbWFfY2ZnKGFwLCB3YW50X25jcSk7Ci0KLQkJLyogY2xlYXIgRklTIElSUSBDYXVzZSAqLwotCQlpZiAoSVNfR0VOX0lJRShocHJpdikpCi0JCQl3cml0ZWxmbCgwLCBwb3J0X21taW8gKyBTQVRBX0ZJU19JUlFfQ0FVU0VfT0ZTKTsKKwkJbXZfZWRtYV9jZmcoYXAsIHdhbnRfbmNxLCAxKTsKIAogCQltdl9zZXRfZWRtYV9wdHJzKHBvcnRfbW1pbywgaHByaXYsIHBwKTsKLQkJbXZfZW5hYmxlX3BvcnRfaXJxcyhhcCwgRE9ORV9JUlF8RVJSX0lSUSk7CisJCW12X2NsZWFyX2FuZF9lbmFibGVfcG9ydF9pcnFzKGFwLCBwb3J0X21taW8sIERPTkVfSVJRfEVSUl9JUlEpOwogCiAJCXdyaXRlbGZsKEVETUFfRU4sIHBvcnRfbW1pbyArIEVETUFfQ01EX09GUyk7CiAJCXBwLT5wcF9mbGFncyB8PSBNVl9QUF9GTEFHX0VETUFfRU47CkBAIC05NTIsNiArMTE2NCw3IEBACiB7CiAJdm9pZCBfX2lvbWVtICpwb3J0X21taW8gPSBtdl9hcF9iYXNlKGFwKTsKIAlzdHJ1Y3QgbXZfcG9ydF9wcml2ICpwcCA9IGFwLT5wcml2YXRlX2RhdGE7CisJaW50IGVyciA9IDA7CiAKIAlpZiAoIShwcC0+cHBfZmxhZ3MgJiBNVl9QUF9GTEFHX0VETUFfRU4pKQogCQlyZXR1cm4gMDsKQEAgLTk1OSw5ICsxMTcyLDEwIEBACiAJbXZfd2FpdF9mb3JfZWRtYV9lbXB0eV9pZGxlKGFwKTsKIAlpZiAobXZfc3RvcF9lZG1hX2VuZ2luZShwb3J0X21taW8pKSB7CiAJCWF0YV9wb3J0X3ByaW50ayhhcCwgS0VSTl9FUlIsICJVbmFibGUgdG8gc3RvcCBlRE1BXG4iKTsKLQkJcmV0dXJuIC1FSU87CisJCWVyciA9IC1FSU87CiAJfQotCXJldHVybiAwOworCW12X2VkbWFfY2ZnKGFwLCAwLCAwKTsKKwlyZXR1cm4gZXJyOwogfQogCiAjaWZkZWYgQVRBX0RFQlVHCkBAIC0xMTMwLDM1ICsxMzQ0LDMzIEBACiAJcmV0dXJuIEFUQV9ERUZFUl9QT1JUOwogfQogCi1zdGF0aWMgdm9pZCBtdl9jb25maWdfZmJzKHZvaWQgX19pb21lbSAqcG9ydF9tbWlvLCBpbnQgd2FudF9uY3EsIGludCB3YW50X2ZicykKK3N0YXRpYyB2b2lkIG12X2NvbmZpZ19mYnMoc3RydWN0IGF0YV9wb3J0ICphcCwgaW50IHdhbnRfbmNxLCBpbnQgd2FudF9mYnMpCiB7Ci0JdTMyIG5ld19maXNjZmcsIG9sZF9maXNjZmc7Ci0JdTMyIG5ld19sdG1vZGUsIG9sZF9sdG1vZGU7Ci0JdTMyIG5ld19oYWx0Y29uZCwgb2xkX2hhbHRjb25kOworCXN0cnVjdCBtdl9wb3J0X3ByaXYgKnBwID0gYXAtPnByaXZhdGVfZGF0YTsKKwl2b2lkIF9faW9tZW0gKnBvcnRfbW1pbzsKIAotCW9sZF9maXNjZmcgICA9IHJlYWRsKHBvcnRfbW1pbyArIEZJU0NGR19PRlMpOwotCW9sZF9sdG1vZGUgICA9IHJlYWRsKHBvcnRfbW1pbyArIExUTU9ERV9PRlMpOwotCW9sZF9oYWx0Y29uZCA9IHJlYWRsKHBvcnRfbW1pbyArIEVETUFfSEFMVENPTkRfT0ZTKTsKKwl1MzIgZmlzY2ZnLCAgICpvbGRfZmlzY2ZnICAgPSAmcHAtPmNhY2hlZC5maXNjZmc7CisJdTMyIGx0bW9kZSwgICAqb2xkX2x0bW9kZSAgID0gJnBwLT5jYWNoZWQubHRtb2RlOworCXUzMiBoYWx0Y29uZCwgKm9sZF9oYWx0Y29uZCA9ICZwcC0+Y2FjaGVkLmhhbHRjb25kOwogCi0JbmV3X2Zpc2NmZyAgID0gb2xkX2Zpc2NmZyAmIH4oRklTQ0ZHX1NJTkdMRV9TWU5DIHwgRklTQ0ZHX1dBSVRfREVWX0VSUik7Ci0JbmV3X2x0bW9kZSAgID0gb2xkX2x0bW9kZSAmIH5MVE1PREVfQklUODsKLQluZXdfaGFsdGNvbmQgPSBvbGRfaGFsdGNvbmQgfCBFRE1BX0VSUl9ERVY7CisJbHRtb2RlICAgPSAqb2xkX2x0bW9kZSAmIH5MVE1PREVfQklUODsKKwloYWx0Y29uZCA9ICpvbGRfaGFsdGNvbmQgfCBFRE1BX0VSUl9ERVY7CiAKIAlpZiAod2FudF9mYnMpIHsKLQkJbmV3X2Zpc2NmZyA9IG9sZF9maXNjZmcgfCBGSVNDRkdfU0lOR0xFX1NZTkM7Ci0JCW5ld19sdG1vZGUgPSBvbGRfbHRtb2RlIHwgTFRNT0RFX0JJVDg7CisJCWZpc2NmZyA9ICpvbGRfZmlzY2ZnIHwgRklTQ0ZHX1NJTkdMRV9TWU5DOworCQlsdG1vZGUgPSAqb2xkX2x0bW9kZSB8IExUTU9ERV9CSVQ4OwogCQlpZiAod2FudF9uY3EpCi0JCQluZXdfaGFsdGNvbmQgJj0gfkVETUFfRVJSX0RFVjsKKwkJCWhhbHRjb25kICY9IH5FRE1BX0VSUl9ERVY7CiAJCWVsc2UKLQkJCW5ld19maXNjZmcgfD0gIEZJU0NGR19XQUlUX0RFVl9FUlI7CisJCQlmaXNjZmcgfD0gIEZJU0NGR19XQUlUX0RFVl9FUlI7CisJfSBlbHNlIHsKKwkJZmlzY2ZnID0gKm9sZF9maXNjZmcgJiB+KEZJU0NGR19TSU5HTEVfU1lOQyB8IEZJU0NGR19XQUlUX0RFVl9FUlIpOwogCX0KIAotCWlmIChuZXdfZmlzY2ZnICE9IG9sZF9maXNjZmcpCi0JCXdyaXRlbGZsKG5ld19maXNjZmcsIHBvcnRfbW1pbyArIEZJU0NGR19PRlMpOwotCWlmIChuZXdfbHRtb2RlICE9IG9sZF9sdG1vZGUpCi0JCXdyaXRlbGZsKG5ld19sdG1vZGUsIHBvcnRfbW1pbyArIExUTU9ERV9PRlMpOwotCWlmIChuZXdfaGFsdGNvbmQgIT0gb2xkX2hhbHRjb25kKQotCQl3cml0ZWxmbChuZXdfaGFsdGNvbmQsIHBvcnRfbW1pbyArIEVETUFfSEFMVENPTkRfT0ZTKTsKKwlwb3J0X21taW8gPSBtdl9hcF9iYXNlKGFwKTsKKwltdl93cml0ZV9jYWNoZWRfcmVnKHBvcnRfbW1pbyArIEZJU0NGR19PRlMsIG9sZF9maXNjZmcsIGZpc2NmZyk7CisJbXZfd3JpdGVfY2FjaGVkX3JlZyhwb3J0X21taW8gKyBMVE1PREVfT0ZTLCBvbGRfbHRtb2RlLCBsdG1vZGUpOworCW12X3dyaXRlX2NhY2hlZF9yZWcocG9ydF9tbWlvICsgRURNQV9IQUxUQ09ORF9PRlMsIG9sZF9oYWx0Y29uZCwgaGFsdGNvbmQpOwogfQogCiBzdGF0aWMgdm9pZCBtdl82MHgxX2VycmF0YV9zYXRhMjUoc3RydWN0IGF0YV9wb3J0ICphcCwgaW50IHdhbnRfbmNxKQpAQCAtMTE3Niw3ICsxMzg4LDg2IEBACiAJCXdyaXRlbChuZXcsIGhwcml2LT5iYXNlICsgTVZfR1BJT19QT1JUX0NUTF9PRlMpOwogfQogCi1zdGF0aWMgdm9pZCBtdl9lZG1hX2NmZyhzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBpbnQgd2FudF9uY3EpCisvKioKKyAqCW12X2JtZG1hX2VuYWJsZSAtIHNldCBhIG1hZ2ljIGJpdCBvbiBHRU5fSUlFIHRvIGFsbG93IGJtZG1hCisgKglAYXA6IFBvcnQgYmVpbmcgaW5pdGlhbGl6ZWQKKyAqCisgKglUaGVyZSBhcmUgdHdvIERNQSBtb2RlcyBvbiB0aGVzZSBjaGlwczogIGJhc2ljIERNQSwgYW5kIEVETUEuCisgKgorICoJQml0LTAgb2YgdGhlICJFRE1BIFJFU0VSVkVEIiByZWdpc3RlciBlbmFibGVzL2Rpc2FibGVzIHVzZQorICoJb2YgYmFzaWMgRE1BIG9uIHRoZSBHRU5fSUlFIHZlcnNpb25zIG9mIHRoZSBjaGlwcy4KKyAqCisgKglUaGlzIGJpdCBzdXJ2aXZlcyBFRE1BIHJlc2V0cywgYW5kIG11c3QgYmUgc2V0IGZvciBiYXNpYyBETUEKKyAqCXRvIGZ1bmN0aW9uLCBhbmQgc2hvdWxkIGJlIGNsZWFyZWQgd2hlbiBFRE1BIGlzIGFjdGl2ZS4KKyAqLworc3RhdGljIHZvaWQgbXZfYm1kbWFfZW5hYmxlX2lpZShzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBpbnQgZW5hYmxlX2JtZG1hKQoreworCXN0cnVjdCBtdl9wb3J0X3ByaXYgKnBwID0gYXAtPnByaXZhdGVfZGF0YTsKKwl1MzIgbmV3LCAqb2xkID0gJnBwLT5jYWNoZWQudW5rbm93bl9yc3ZkOworCisJaWYgKGVuYWJsZV9ibWRtYSkKKwkJbmV3ID0gKm9sZCB8IDE7CisJZWxzZQorCQluZXcgPSAqb2xkICYgfjE7CisJbXZfd3JpdGVfY2FjaGVkX3JlZyhtdl9hcF9iYXNlKGFwKSArIEVETUFfVU5LTk9XTl9SU1ZEX09GUywgb2xkLCBuZXcpOworfQorCisvKgorICogU09DIGNoaXBzIGhhdmUgYW4gaXNzdWUgd2hlcmVieSB0aGUgSEREIExFRHMgZG9uJ3QgYWx3YXlzIGJsaW5rCisgKiBkdXJpbmcgSS9PIHdoZW4gTkNRIGlzIGVuYWJsZWQuIEVuYWJsaW5nIGEgc3BlY2lhbCAiTEVEIGJsaW5rIiBtb2RlCisgKiBvZiB0aGUgU09DIHRha2VzIGNhcmUgb2YgaXQsIGdlbmVyYXRpbmcgYSBzdGVhZHkgYmxpbmsgcmF0ZSB3aGVuCisgKiBhbnkgZHJpdmUgb24gdGhlIGNoaXAgaXMgYWN0aXZlLgorICoKKyAqIFVuZm9ydHVuYXRlbHksIHRoZSBibGluayBtb2RlIGlzIGEgZ2xvYmFsIGhhcmR3YXJlIHNldHRpbmcgZm9yIHRoZSBTT0MsCisgKiBzbyB3ZSBtdXN0IHVzZSBpdCB3aGVuZXZlciBhdCBsZWFzdCBvbmUgcG9ydCBvbiB0aGUgU09DIGhhcyBOQ1EgZW5hYmxlZC4KKyAqCisgKiBXZSB0dXJuICJMRUQgYmxpbmsiIG9mZiB3aGVuIE5DUSBpcyBub3QgaW4gdXNlIGFueXdoZXJlLCBiZWNhdXNlIHRoZSBub3JtYWwKKyAqIExFRCBvcGVyYXRpb24gd29ya3MgdGhlbiwgYW5kIHByb3ZpZGVzIGJldHRlciAobW9yZSBhY2N1cmF0ZSkgZmVlZGJhY2suCisgKgorICogTm90ZSB0aGF0IHRoaXMgY29kZSBhc3N1bWVzIHRoYXQgYW4gU09DIG5ldmVyIGhhcyBtb3JlIHRoYW4gb25lIEhDIG9uYm9hcmQuCisgKi8KK3N0YXRpYyB2b2lkIG12X3NvY19sZWRfYmxpbmtfZW5hYmxlKHN0cnVjdCBhdGFfcG9ydCAqYXApCit7CisJc3RydWN0IGF0YV9ob3N0ICpob3N0ID0gYXAtPmhvc3Q7CisJc3RydWN0IG12X2hvc3RfcHJpdiAqaHByaXYgPSBob3N0LT5wcml2YXRlX2RhdGE7CisJdm9pZCBfX2lvbWVtICpoY19tbWlvOworCXUzMiBsZWRfY3RybDsKKworCWlmIChocHJpdi0+aHBfZmxhZ3MgJiBNVl9IUF9RVUlSS19MRURfQkxJTktfRU4pCisJCXJldHVybjsKKwlocHJpdi0+aHBfZmxhZ3MgfD0gTVZfSFBfUVVJUktfTEVEX0JMSU5LX0VOOworCWhjX21taW8gPSBtdl9oY19iYXNlX2Zyb21fcG9ydChtdl9ob3N0X2Jhc2UoaG9zdCksIGFwLT5wb3J0X25vKTsKKwlsZWRfY3RybCA9IHJlYWRsKGhjX21taW8gKyBTT0NfTEVEX0NUUkxfT0ZTKTsKKwl3cml0ZWwobGVkX2N0cmwgfCBTT0NfTEVEX0NUUkxfQkxJTkssIGhjX21taW8gKyBTT0NfTEVEX0NUUkxfT0ZTKTsKK30KKworc3RhdGljIHZvaWQgbXZfc29jX2xlZF9ibGlua19kaXNhYmxlKHN0cnVjdCBhdGFfcG9ydCAqYXApCit7CisJc3RydWN0IGF0YV9ob3N0ICpob3N0ID0gYXAtPmhvc3Q7CisJc3RydWN0IG12X2hvc3RfcHJpdiAqaHByaXYgPSBob3N0LT5wcml2YXRlX2RhdGE7CisJdm9pZCBfX2lvbWVtICpoY19tbWlvOworCXUzMiBsZWRfY3RybDsKKwl1bnNpZ25lZCBpbnQgcG9ydDsKKworCWlmICghKGhwcml2LT5ocF9mbGFncyAmIE1WX0hQX1FVSVJLX0xFRF9CTElOS19FTikpCisJCXJldHVybjsKKworCS8qIGRpc2FibGUgbGVkLWJsaW5rIG9ubHkgaWYgbm8gcG9ydHMgYXJlIHVzaW5nIE5DUSAqLworCWZvciAocG9ydCA9IDA7IHBvcnQgPCBocHJpdi0+bl9wb3J0czsgcG9ydCsrKSB7CisJCXN0cnVjdCBhdGFfcG9ydCAqdGhpc19hcCA9IGhvc3QtPnBvcnRzW3BvcnRdOworCQlzdHJ1Y3QgbXZfcG9ydF9wcml2ICpwcCA9IHRoaXNfYXAtPnByaXZhdGVfZGF0YTsKKworCQlpZiAocHAtPnBwX2ZsYWdzICYgTVZfUFBfRkxBR19OQ1FfRU4pCisJCQlyZXR1cm47CisJfQorCisJaHByaXYtPmhwX2ZsYWdzICY9IH5NVl9IUF9RVUlSS19MRURfQkxJTktfRU47CisJaGNfbW1pbyA9IG12X2hjX2Jhc2VfZnJvbV9wb3J0KG12X2hvc3RfYmFzZShob3N0KSwgYXAtPnBvcnRfbm8pOworCWxlZF9jdHJsID0gcmVhZGwoaGNfbW1pbyArIFNPQ19MRURfQ1RSTF9PRlMpOworCXdyaXRlbChsZWRfY3RybCAmIH5TT0NfTEVEX0NUUkxfQkxJTkssIGhjX21taW8gKyBTT0NfTEVEX0NUUkxfT0ZTKTsKK30KKworc3RhdGljIHZvaWQgbXZfZWRtYV9jZmcoc3RydWN0IGF0YV9wb3J0ICphcCwgaW50IHdhbnRfbmNxLCBpbnQgd2FudF9lZG1hKQogewogCXUzMiBjZmc7CiAJc3RydWN0IG12X3BvcnRfcHJpdiAqcHAgICAgPSBhcC0+cHJpdmF0ZV9kYXRhOwpAQCAtMTE4NSw3ICsxNDc2LDggQEAKIAogCS8qIHNldCB1cCBub24tTkNRIEVETUEgY29uZmlndXJhdGlvbiAqLwogCWNmZyA9IEVETUFfQ0ZHX1FfREVQVEg7CQkvKiBhbHdheXMgMHgxZiBmb3IgKmFsbCogY2hpcHMgKi8KLQlwcC0+cHBfZmxhZ3MgJj0gfk1WX1BQX0ZMQUdfRkJTX0VOOworCXBwLT5wcF9mbGFncyAmPQorCSAgfihNVl9QUF9GTEFHX0ZCU19FTiB8IE1WX1BQX0ZMQUdfTkNRX0VOIHwgTVZfUFBfRkxBR19GQUtFX0FUQV9CVVNZKTsKIAogCWlmIChJU19HRU5fSShocHJpdikpCiAJCWNmZyB8PSAoMSA8PCA4KTsJLyogZW5hYiBjb25maWcgYnVyc3Qgc2l6ZSBtYXNrICovCkBAIC0xMjA2LDcgKzE0OTgsNyBAQAogCQkgKi8KIAkJd2FudF9mYnMgJj0gd2FudF9uY3E7CiAKLQkJbXZfY29uZmlnX2Zicyhwb3J0X21taW8sIHdhbnRfbmNxLCB3YW50X2Zicyk7CisJCW12X2NvbmZpZ19mYnMoYXAsIHdhbnRfbmNxLCB3YW50X2Zicyk7CiAKIAkJaWYgKHdhbnRfZmJzKSB7CiAJCQlwcC0+cHBfZmxhZ3MgfD0gTVZfUFBfRkxBR19GQlNfRU47CkBAIC0xMjE0LDE4ICsxNTA2LDI3IEBACiAJCX0KIAogCQljZmcgfD0gKDEgPDwgMjMpOwkvKiBkbyBub3QgbWFzayBQTSBmaWVsZCBpbiByeCdkIEZJUyAqLwotCQljZmcgfD0gKDEgPDwgMjIpOwkvKiBlbmFiIDQtZW50cnkgaG9zdCBxdWV1ZSBjYWNoZSAqLwotCQlpZiAoIUlTX1NPQyhocHJpdikpCi0JCQljZmcgfD0gKDEgPDwgMTgpOwkvKiBlbmFiIGVhcmx5IGNvbXBsZXRpb24gKi8KKwkJaWYgKHdhbnRfZWRtYSkgeworCQkJY2ZnIHw9ICgxIDw8IDIyKTsgLyogZW5hYiA0LWVudHJ5IGhvc3QgcXVldWUgY2FjaGUgKi8KKwkJCWlmICghSVNfU09DKGhwcml2KSkKKwkJCQljZmcgfD0gKDEgPDwgMTgpOyAvKiBlbmFiIGVhcmx5IGNvbXBsZXRpb24gKi8KKwkJfQogCQlpZiAoaHByaXYtPmhwX2ZsYWdzICYgTVZfSFBfQ1VUX1RIUk9VR0gpCiAJCQljZmcgfD0gKDEgPDwgMTcpOyAvKiBlbmFiIGN1dC10aHJ1IChkaXMgc3RvciZmb3J3cmQpICovCisJCW12X2JtZG1hX2VuYWJsZV9paWUoYXAsICF3YW50X2VkbWEpOworCisJCWlmIChJU19TT0MoaHByaXYpKSB7CisJCQlpZiAod2FudF9uY3EpCisJCQkJbXZfc29jX2xlZF9ibGlua19lbmFibGUoYXApOworCQkJZWxzZQorCQkJCW12X3NvY19sZWRfYmxpbmtfZGlzYWJsZShhcCk7CisJCX0KIAl9CiAKIAlpZiAod2FudF9uY3EpIHsKIAkJY2ZnIHw9IEVETUFfQ0ZHX05DUTsKIAkJcHAtPnBwX2ZsYWdzIHw9ICBNVl9QUF9GTEFHX05DUV9FTjsKLQl9IGVsc2UKLQkJcHAtPnBwX2ZsYWdzICY9IH5NVl9QUF9GTEFHX05DUV9FTjsKKwl9CiAKIAl3cml0ZWxmbChjZmcsIHBvcnRfbW1pbyArIEVETUFfQ0ZHX09GUyk7CiB9CkBAIC0xMzA5LDYgKzE2MTAsOCBAQAogCQkJcHAtPnNnX3RibF9kbWFbdGFnXSA9IHBwLT5zZ190YmxfZG1hWzBdOwogCQl9CiAJfQorCW12X3NhdmVfY2FjaGVkX3JlZ3MoYXApOworCW12X2VkbWFfY2ZnKGFwLCAwLCAwKTsKIAlyZXR1cm4gMDsKIAogb3V0X3BvcnRfZnJlZV9kbWFfbWVtOgpAQCAtMTM1NywxMiArMTY2MCwxMyBAQAogCQkJdTMyIG9mZnNldCA9IGFkZHIgJiAweGZmZmY7CiAJCQl1MzIgbGVuID0gc2dfbGVuOwogCi0JCQlpZiAoKG9mZnNldCArIHNnX2xlbiA+IDB4MTAwMDApKQorCQkJaWYgKG9mZnNldCArIGxlbiA+IDB4MTAwMDApCiAJCQkJbGVuID0gMHgxMDAwMCAtIG9mZnNldDsKIAogCQkJbXZfc2ctPmFkZHIgPSBjcHVfdG9fbGUzMihhZGRyICYgMHhmZmZmZmZmZik7CiAJCQltdl9zZy0+YWRkcl9oaSA9IGNwdV90b19sZTMyKChhZGRyID4+IDE2KSA+PiAxNik7CiAJCQltdl9zZy0+ZmxhZ3Nfc2l6ZSA9IGNwdV90b19sZTMyKGxlbiAmIDB4ZmZmZik7CisJCQltdl9zZy0+cmVzZXJ2ZWQgPSAwOwogCiAJCQlzZ19sZW4gLT0gbGVuOwogCQkJYWRkciArPSBsZW47CkBAIC0xMzc0LDYgKzE2NzgsNyBAQAogCiAJaWYgKGxpa2VseShsYXN0X3NnKSkKIAkJbGFzdF9zZy0+ZmxhZ3Nfc2l6ZSB8PSBjcHVfdG9fbGUzMihFUFJEX0ZMQUdfRU5EX09GX1RCTCk7CisJbWIoKTsgLyogZW5zdXJlIGRhdGEgc3RydWN0dXJlIGlzIHZpc2libGUgdG8gdGhlIGNoaXBzZXQgKi8KIH0KIAogc3RhdGljIHZvaWQgbXZfY3JxYl9wYWNrX2NtZChfX2xlMTYgKmNtZHcsIHU4IGRhdGEsIHU4IGFkZHIsIHVuc2lnbmVkIGxhc3QpCkBAIC0xMzg0LDYgKzE2ODksMTQ3IEBACiB9CiAKIC8qKgorICoJbXZfc2ZmX2lycV9jbGVhciAtIENsZWFyIGhhcmR3YXJlIGludGVycnVwdCBhZnRlciBETUEuCisgKglAYXA6IFBvcnQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgQVRBIHRyYW5zYWN0aW9uLgorICoKKyAqCVdlIG5lZWQgdGhpcyBvbmx5IGZvciBBVEFQSSBibWRtYSB0cmFuc2FjdGlvbnMsCisgKglhcyBvdGhlcndpc2Ugd2UgZXhwZXJpZW5jZSBzcHVyaW91cyBpbnRlcnJ1cHRzCisgKglhZnRlciBsaWJhdGEtc2ZmIGhhbmRsZXMgdGhlIGJtZG1hIGludGVycnVwdHMuCisgKi8KK3N0YXRpYyB2b2lkIG12X3NmZl9pcnFfY2xlYXIoc3RydWN0IGF0YV9wb3J0ICphcCkKK3sKKwltdl9jbGVhcl9hbmRfZW5hYmxlX3BvcnRfaXJxcyhhcCwgbXZfYXBfYmFzZShhcCksIEVSUl9JUlEpOworfQorCisvKioKKyAqCW12X2NoZWNrX2F0YXBpX2RtYSAtIEZpbHRlciBBVEFQSSBjbWRzIHdoaWNoIGFyZSB1bnN1aXRhYmxlIGZvciBETUEuCisgKglAcWM6IHF1ZXVlZCBjb21tYW5kIHRvIGNoZWNrIGZvciBjaGlwc2V0L0RNQSBjb21wYXRpYmlsaXR5LgorICoKKyAqCVRoZSBibWRtYSBlbmdpbmVzIGNhbm5vdCBoYW5kbGUgc3BlY3VsYXRpdmUgZGF0YSBzaXplcworICoJKGJ5dGVjb3VudCB1bmRlci9vdmVyIGZsb3cpLiAgU28gb25seSBhbGxvdyBETUEgZm9yCisgKglkYXRhIHRyYW5zZmVyIGNvbW1hbmRzIHdpdGgga25vd24gZGF0YSBzaXplcy4KKyAqCisgKglMT0NLSU5HOgorICoJSW5oZXJpdGVkIGZyb20gY2FsbGVyLgorICovCitzdGF0aWMgaW50IG12X2NoZWNrX2F0YXBpX2RtYShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQoreworCXN0cnVjdCBzY3NpX2NtbmQgKnNjbWQgPSBxYy0+c2NzaWNtZDsKKworCWlmIChzY21kKSB7CisJCXN3aXRjaCAoc2NtZC0+Y21uZFswXSkgeworCQljYXNlIFJFQURfNjoKKwkJY2FzZSBSRUFEXzEwOgorCQljYXNlIFJFQURfMTI6CisJCWNhc2UgV1JJVEVfNjoKKwkJY2FzZSBXUklURV8xMDoKKwkJY2FzZSBXUklURV8xMjoKKwkJY2FzZSBHUENNRF9SRUFEX0NEOgorCQljYXNlIEdQQ01EX1NFTkRfRFZEX1NUUlVDVFVSRToKKwkJY2FzZSBHUENNRF9TRU5EX0NVRV9TSEVFVDoKKwkJCXJldHVybiAwOyAvKiBETUEgaXMgc2FmZSAqLworCQl9CisJfQorCXJldHVybiAtRU9QTk9UU1VQUDsgLyogdXNlIFBJTyBpbnN0ZWFkICovCit9CisKKy8qKgorICoJbXZfYm1kbWFfc2V0dXAgLSBTZXQgdXAgQk1ETUEgdHJhbnNhY3Rpb24KKyAqCUBxYzogcXVldWVkIGNvbW1hbmQgdG8gcHJlcGFyZSBETUEgZm9yLgorICoKKyAqCUxPQ0tJTkc6CisgKglJbmhlcml0ZWQgZnJvbSBjYWxsZXIuCisgKi8KK3N0YXRpYyB2b2lkIG12X2JtZG1hX3NldHVwKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCit7CisJc3RydWN0IGF0YV9wb3J0ICphcCA9IHFjLT5hcDsKKwl2b2lkIF9faW9tZW0gKnBvcnRfbW1pbyA9IG12X2FwX2Jhc2UoYXApOworCXN0cnVjdCBtdl9wb3J0X3ByaXYgKnBwID0gYXAtPnByaXZhdGVfZGF0YTsKKworCW12X2ZpbGxfc2cocWMpOworCisJLyogY2xlYXIgYWxsIERNQSBjbWQgYml0cyAqLworCXdyaXRlbCgwLCBwb3J0X21taW8gKyBCTURNQV9DTURfT0ZTKTsKKworCS8qIGxvYWQgUFJEIHRhYmxlIGFkZHIuICovCisJd3JpdGVsKChwcC0+c2dfdGJsX2RtYVtxYy0+dGFnXSA+PiAxNikgPj4gMTYsCisJCXBvcnRfbW1pbyArIEJNRE1BX1BSRF9ISUdIX09GUyk7CisJd3JpdGVsZmwocHAtPnNnX3RibF9kbWFbcWMtPnRhZ10sCisJCXBvcnRfbW1pbyArIEJNRE1BX1BSRF9MT1dfT0ZTKTsKKworCS8qIGlzc3VlIHIvdyBjb21tYW5kICovCisJYXAtPm9wcy0+c2ZmX2V4ZWNfY29tbWFuZChhcCwgJnFjLT50Zik7Cit9CisKKy8qKgorICoJbXZfYm1kbWFfc3RhcnQgLSBTdGFydCBhIEJNRE1BIHRyYW5zYWN0aW9uCisgKglAcWM6IHF1ZXVlZCBjb21tYW5kIHRvIHN0YXJ0IERNQSBvbi4KKyAqCisgKglMT0NLSU5HOgorICoJSW5oZXJpdGVkIGZyb20gY2FsbGVyLgorICovCitzdGF0aWMgdm9pZCBtdl9ibWRtYV9zdGFydChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQoreworCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBxYy0+YXA7CisJdm9pZCBfX2lvbWVtICpwb3J0X21taW8gPSBtdl9hcF9iYXNlKGFwKTsKKwl1bnNpZ25lZCBpbnQgcncgPSAocWMtPnRmLmZsYWdzICYgQVRBX1RGTEFHX1dSSVRFKTsKKwl1MzIgY21kID0gKHJ3ID8gMCA6IEFUQV9ETUFfV1IpIHwgQVRBX0RNQV9TVEFSVDsKKworCS8qIHN0YXJ0IGhvc3QgRE1BIHRyYW5zYWN0aW9uICovCisJd3JpdGVsZmwoY21kLCBwb3J0X21taW8gKyBCTURNQV9DTURfT0ZTKTsKK30KKworLyoqCisgKgltdl9ibWRtYV9zdG9wIC0gU3RvcCBCTURNQSB0cmFuc2ZlcgorICoJQHFjOiBxdWV1ZWQgY29tbWFuZCB0byBzdG9wIERNQSBvbi4KKyAqCisgKglDbGVhcnMgdGhlIEFUQV9ETUFfU1RBUlQgZmxhZyBpbiB0aGUgYm1kbWEgY29udHJvbCByZWdpc3RlcgorICoKKyAqCUxPQ0tJTkc6CisgKglJbmhlcml0ZWQgZnJvbSBjYWxsZXIuCisgKi8KK3N0YXRpYyB2b2lkIG12X2JtZG1hX3N0b3Aoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKK3sKKwlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gcWMtPmFwOworCXZvaWQgX19pb21lbSAqcG9ydF9tbWlvID0gbXZfYXBfYmFzZShhcCk7CisJdTMyIGNtZDsKKworCS8qIGNsZWFyIHN0YXJ0L3N0b3AgYml0ICovCisJY21kID0gcmVhZGwocG9ydF9tbWlvICsgQk1ETUFfQ01EX09GUyk7CisJY21kICY9IH5BVEFfRE1BX1NUQVJUOworCXdyaXRlbGZsKGNtZCwgcG9ydF9tbWlvICsgQk1ETUFfQ01EX09GUyk7CisKKwkvKiBvbmUtUElPLWN5Y2xlIGd1YXJhbnRlZWQgd2FpdCwgcGVyIHNwZWMsIGZvciBIRE1BMTowIHRyYW5zaXRpb24gKi8KKwlhdGFfc2ZmX2RtYV9wYXVzZShhcCk7Cit9CisKKy8qKgorICoJbXZfYm1kbWFfc3RhdHVzIC0gUmVhZCBCTURNQSBzdGF0dXMKKyAqCUBhcDogcG9ydCBmb3Igd2hpY2ggdG8gcmV0cmlldmUgRE1BIHN0YXR1cy4KKyAqCisgKglSZWFkIGFuZCByZXR1cm4gZXF1aXZhbGVudCBvZiB0aGUgc2ZmIEJNRE1BIHN0YXR1cyByZWdpc3Rlci4KKyAqCisgKglMT0NLSU5HOgorICoJSW5oZXJpdGVkIGZyb20gY2FsbGVyLgorICovCitzdGF0aWMgdTggbXZfYm1kbWFfc3RhdHVzKHN0cnVjdCBhdGFfcG9ydCAqYXApCit7CisJdm9pZCBfX2lvbWVtICpwb3J0X21taW8gPSBtdl9hcF9iYXNlKGFwKTsKKwl1MzIgcmVnLCBzdGF0dXM7CisKKwkvKgorCSAqIE90aGVyIGJpdHMgYXJlIHZhbGlkIG9ubHkgaWYgQVRBX0RNQV9BQ1RJVkU9PTAsCisJICogYW5kIHRoZSBBVEFfRE1BX0lOVFIgYml0IGRvZXNuJ3QgZXhpc3QuCisJICovCisJcmVnID0gcmVhZGwocG9ydF9tbWlvICsgQk1ETUFfU1RBVFVTX09GUyk7CisJaWYgKHJlZyAmIEFUQV9ETUFfQUNUSVZFKQorCQlzdGF0dXMgPSBBVEFfRE1BX0FDVElWRTsKKwllbHNlCisJCXN0YXR1cyA9IChyZWcgJiBBVEFfRE1BX0VSUikgfCBBVEFfRE1BX0lOVFI7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCiAgKiAgICAgIG12X3FjX3ByZXAgLSBIb3N0IHNwZWNpZmljIGNvbW1hbmQgcHJlcGFyYXRpb24uCiAgKiAgICAgIEBxYzogcXVldWVkIGNvbW1hbmQgdG8gcHJlcGFyZQogICoKQEAgLTE1NDUsNiArMTk5MSwxMzIgQEAKIH0KIAogLyoqCisgKgltdl9zZmZfY2hlY2tfc3RhdHVzIC0gZmV0Y2ggZGV2aWNlIHN0YXR1cywgaWYgdmFsaWQKKyAqCUBhcDogQVRBIHBvcnQgdG8gZmV0Y2ggc3RhdHVzIGZyb20KKyAqCisgKglXaGVuIHVzaW5nIGNvbW1hbmQgaXNzdWUgdmlhIG12X3FjX2lzc3VlX2ZpcygpLAorICoJdGhlIGluaXRpYWwgQVRBX0JVU1kgc3RhdGUgZG9lcyBub3Qgc2hvdyB1cCBpbiB0aGUKKyAqCUFUQSBzdGF0dXMgKHNoYWRvdykgcmVnaXN0ZXIuICBUaGlzIGNhbiBjb25mdXNlIGxpYmF0YSEKKyAqCisgKglTbyB3ZSBoYXZlIGEgaG9vayBoZXJlIHRvIGZha2UgQVRBX0JVU1kgZm9yIHRoYXQgc2l0dWF0aW9uLAorICoJdW50aWwgdGhlIGZpcnN0IHRpbWUgYSBCVVNZLCBEUlEsIG9yIEVSUiBiaXQgaXMgc2Vlbi4KKyAqCisgKglUaGUgcmVzdCBvZiB0aGUgdGltZSwgaXQgc2ltcGx5IHJldHVybnMgdGhlIEFUQSBzdGF0dXMgcmVnaXN0ZXIuCisgKi8KK3N0YXRpYyB1OCBtdl9zZmZfY2hlY2tfc3RhdHVzKHN0cnVjdCBhdGFfcG9ydCAqYXApCit7CisJdTggc3RhdCA9IGlvcmVhZDgoYXAtPmlvYWRkci5zdGF0dXNfYWRkcik7CisJc3RydWN0IG12X3BvcnRfcHJpdiAqcHAgPSBhcC0+cHJpdmF0ZV9kYXRhOworCisJaWYgKHBwLT5wcF9mbGFncyAmIE1WX1BQX0ZMQUdfRkFLRV9BVEFfQlVTWSkgeworCQlpZiAoc3RhdCAmIChBVEFfQlVTWSB8IEFUQV9EUlEgfCBBVEFfRVJSKSkKKwkJCXBwLT5wcF9mbGFncyAmPSB+TVZfUFBfRkxBR19GQUtFX0FUQV9CVVNZOworCQllbHNlCisJCQlzdGF0ID0gQVRBX0JVU1k7CisJfQorCXJldHVybiBzdGF0OworfQorCisvKioKKyAqCW12X3NlbmRfZmlzIC0gU2VuZCBhIEZJUywgdXNpbmcgdGhlICJWZW5kb3ItVW5pcXVlIEZJUyIgcmVnaXN0ZXIKKyAqCUBmaXM6IGZpcyB0byBiZSBzZW50CisgKglAbndvcmRzOiBudW1iZXIgb2YgMzItYml0IHdvcmRzIGluIHRoZSBmaXMKKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBtdl9zZW5kX2ZpcyhzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1MzIgKmZpcywgaW50IG53b3JkcykKK3sKKwl2b2lkIF9faW9tZW0gKnBvcnRfbW1pbyA9IG12X2FwX2Jhc2UoYXApOworCXUzMiBpZmN0bCwgb2xkX2lmY3RsLCBpZnN0YXQ7CisJaW50IGksIHRpbWVvdXQgPSAyMDAsIGZpbmFsX3dvcmQgPSBud29yZHMgLSAxOworCisJLyogSW5pdGlhdGUgRklTIHRyYW5zbWlzc2lvbiBtb2RlICovCisJb2xkX2lmY3RsID0gcmVhZGwocG9ydF9tbWlvICsgU0FUQV9JRkNUTF9PRlMpOworCWlmY3RsID0gMHgxMDAgfCAob2xkX2lmY3RsICYgMHhmKTsKKwl3cml0ZWxmbChpZmN0bCwgcG9ydF9tbWlvICsgU0FUQV9JRkNUTF9PRlMpOworCisJLyogU2VuZCBhbGwgd29yZHMgb2YgdGhlIEZJUyBleGNlcHQgZm9yIHRoZSBmaW5hbCB3b3JkICovCisJZm9yIChpID0gMDsgaSA8IGZpbmFsX3dvcmQ7ICsraSkKKwkJd3JpdGVsKGZpc1tpXSwgcG9ydF9tbWlvICsgVkVORE9SX1VOSVFVRV9GSVNfT0ZTKTsKKworCS8qIEZsYWcgZW5kLW9mLXRyYW5zbWlzc2lvbiwgYW5kIHRoZW4gc2VuZCB0aGUgZmluYWwgd29yZCAqLworCXdyaXRlbGZsKGlmY3RsIHwgMHgyMDAsIHBvcnRfbW1pbyArIFNBVEFfSUZDVExfT0ZTKTsKKwl3cml0ZWxmbChmaXNbZmluYWxfd29yZF0sIHBvcnRfbW1pbyArIFZFTkRPUl9VTklRVUVfRklTX09GUyk7CisKKwkvKgorCSAqIFdhaXQgZm9yIEZJUyB0cmFuc21pc3Npb24gdG8gY29tcGxldGUuCisJICogVGhpcyB0eXBpY2FsbHkgdGFrZXMganVzdCBhIHNpbmdsZSBpdGVyYXRpb24uCisJICovCisJZG8geworCQlpZnN0YXQgPSByZWFkbChwb3J0X21taW8gKyBTQVRBX0lGU1RBVF9PRlMpOworCX0gd2hpbGUgKCEoaWZzdGF0ICYgMHgxMDAwKSAmJiAtLXRpbWVvdXQpOworCisJLyogUmVzdG9yZSBvcmlnaW5hbCBwb3J0IGNvbmZpZ3VyYXRpb24gKi8KKwl3cml0ZWxmbChvbGRfaWZjdGwsIHBvcnRfbW1pbyArIFNBVEFfSUZDVExfT0ZTKTsKKworCS8qIFNlZSBpZiBpdCB3b3JrZWQgKi8KKwlpZiAoKGlmc3RhdCAmIDB4MzAwMCkgIT0gMHgxMDAwKSB7CisJCWF0YV9wb3J0X3ByaW50ayhhcCwgS0VSTl9XQVJOSU5HLAorCQkJCSIlcyB0cmFuc21pc3Npb24gZXJyb3IsIGlmc3RhdD0lMDh4XG4iLAorCQkJCV9fZnVuY19fLCBpZnN0YXQpOworCQlyZXR1cm4gQUNfRVJSX09USEVSOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoqCisgKgltdl9xY19pc3N1ZV9maXMgLSBJc3N1ZSBhIGNvbW1hbmQgZGlyZWN0bHkgYXMgYSBGSVMKKyAqCUBxYzogcXVldWVkIGNvbW1hbmQgdG8gc3RhcnQKKyAqCisgKglOb3RlIHRoYXQgdGhlIEFUQSBzaGFkb3cgcmVnaXN0ZXJzIGFyZSBub3QgdXBkYXRlZAorICoJYWZ0ZXIgY29tbWFuZCBpc3N1ZSwgc28gdGhlIGRldmljZSB3aWxsIGFwcGVhciAiUkVBRFkiCisgKglpZiBwb2xsZWQsIGV2ZW4gd2hpbGUgaXQgaXMgQlVTWSBwcm9jZXNzaW5nIHRoZSBjb21tYW5kLgorICoKKyAqCVNvIHdlIHVzZSBhIHN0YXR1cyBob29rIHRvIGZha2UgQVRBX0JVU1kgdW50aWwgdGhlIGRyaXZlIGNoYW5nZXMgc3RhdGUuCisgKgorICoJTm90ZTogd2UgZG9uJ3QgZ2V0IHVwZGF0ZWQgc2hhZG93IHJlZ3Mgb24gKmNvbXBsZXRpb24qCisgKglvZiBub24tZGF0YSBjb21tYW5kcy4gU28gYXZvaWQgc2VuZGluZyB0aGVtIHZpYSB0aGlzIGZ1bmN0aW9uLAorICoJYXMgdGhleSB3aWxsIGFwcGVhciB0byBoYXZlIGNvbXBsZXRlZCBpbW1lZGlhdGVseS4KKyAqCisgKglHRU5fSUlFIGhhcyBzcGVjaWFsIHJlZ2lzdGVycyB0aGF0IHdlIGNvdWxkIGdldCB0aGUgcmVzdWx0IHRmIGZyb20sCisgKglidXQgZWFybGllciBjaGlwc2V0cyBkbyBub3QuICBGb3Igbm93LCB3ZSBpZ25vcmUgdGhvc2UgcmVnaXN0ZXJzLgorICovCitzdGF0aWMgdW5zaWduZWQgaW50IG12X3FjX2lzc3VlX2ZpcyhzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQoreworCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBxYy0+YXA7CisJc3RydWN0IG12X3BvcnRfcHJpdiAqcHAgPSBhcC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBhdGFfbGluayAqbGluayA9IHFjLT5kZXYtPmxpbms7CisJdTMyIGZpc1s1XTsKKwlpbnQgZXJyID0gMDsKKworCWF0YV90Zl90b19maXMoJnFjLT50ZiwgbGluay0+cG1wLCAxLCAodm9pZCAqKWZpcyk7CisJZXJyID0gbXZfc2VuZF9maXMoYXAsIGZpcywgc2l6ZW9mKGZpcykgLyBzaXplb2YoZmlzWzBdKSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXN3aXRjaCAocWMtPnRmLnByb3RvY29sKSB7CisJY2FzZSBBVEFQSV9QUk9UX1BJTzoKKwkJcHAtPnBwX2ZsYWdzIHw9IE1WX1BQX0ZMQUdfRkFLRV9BVEFfQlVTWTsKKwkJLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBBVEFQSV9QUk9UX05PREFUQToKKwkJYXAtPmhzbV90YXNrX3N0YXRlID0gSFNNX1NUX0ZJUlNUOworCQlicmVhazsKKwljYXNlIEFUQV9QUk9UX1BJTzoKKwkJcHAtPnBwX2ZsYWdzIHw9IE1WX1BQX0ZMQUdfRkFLRV9BVEFfQlVTWTsKKwkJaWYgKHFjLT50Zi5mbGFncyAmIEFUQV9URkxBR19XUklURSkKKwkJCWFwLT5oc21fdGFza19zdGF0ZSA9IEhTTV9TVF9GSVJTVDsKKwkJZWxzZQorCQkJYXAtPmhzbV90YXNrX3N0YXRlID0gSFNNX1NUOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlhcC0+aHNtX3Rhc2tfc3RhdGUgPSBIU01fU1RfTEFTVDsKKwkJYnJlYWs7CisJfQorCisJaWYgKHFjLT50Zi5mbGFncyAmIEFUQV9URkxBR19QT0xMSU5HKQorCQlhdGFfcGlvX3F1ZXVlX3Rhc2soYXAsIHFjLCAwKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCiAgKiAgICAgIG12X3FjX2lzc3VlIC0gSW5pdGlhdGUgYSBjb21tYW5kIHRvIHRoZSBob3N0CiAgKiAgICAgIEBxYzogcXVldWVkIGNvbW1hbmQgdG8gc3RhcnQKICAqCkBAIC0xNTU4LDE0ICsyMTMwLDI4IEBACiAgKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgbXZfcWNfaXNzdWUoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKIHsKKwlzdGF0aWMgaW50IGxpbWl0X3dhcm5pbmdzID0gMTA7CiAJc3RydWN0IGF0YV9wb3J0ICphcCA9IHFjLT5hcDsKIAl2b2lkIF9faW9tZW0gKnBvcnRfbW1pbyA9IG12X2FwX2Jhc2UoYXApOwogCXN0cnVjdCBtdl9wb3J0X3ByaXYgKnBwID0gYXAtPnByaXZhdGVfZGF0YTsKIAl1MzIgaW5faW5kZXg7CisJdW5zaWduZWQgaW50IHBvcnRfaXJxczsKIAotCWlmICgocWMtPnRmLnByb3RvY29sICE9IEFUQV9QUk9UX0RNQSkgJiYKLQkgICAgKHFjLT50Zi5wcm90b2NvbCAhPSBBVEFfUFJPVF9OQ1EpKSB7Ci0JCXN0YXRpYyBpbnQgbGltaXRfd2FybmluZ3MgPSAxMDsKKwlwcC0+cHBfZmxhZ3MgJj0gfk1WX1BQX0ZMQUdfRkFLRV9BVEFfQlVTWTsgLyogcGFyYW5vaWEgKi8KKworCXN3aXRjaCAocWMtPnRmLnByb3RvY29sKSB7CisJY2FzZSBBVEFfUFJPVF9ETUE6CisJY2FzZSBBVEFfUFJPVF9OQ1E6CisJCW12X3N0YXJ0X2VkbWEoYXAsIHBvcnRfbW1pbywgcHAsIHFjLT50Zi5wcm90b2NvbCk7CisJCXBwLT5yZXFfaWR4ID0gKHBwLT5yZXFfaWR4ICsgMSkgJiBNVl9NQVhfUV9ERVBUSF9NQVNLOworCQlpbl9pbmRleCA9IHBwLT5yZXFfaWR4IDw8IEVETUFfUkVRX1FfUFRSX1NISUZUOworCisJCS8qIFdyaXRlIHRoZSByZXF1ZXN0IGluIHBvaW50ZXIgdG8ga2ljayB0aGUgRURNQSB0byBsaWZlICovCisJCXdyaXRlbGZsKChwcC0+Y3JxYl9kbWEgJiBFRE1BX1JFUV9RX0JBU0VfTE9fTUFTSykgfCBpbl9pbmRleCwKKwkJCQkJcG9ydF9tbWlvICsgRURNQV9SRVFfUV9JTl9QVFJfT0ZTKTsKKwkJcmV0dXJuIDA7CisKKwljYXNlIEFUQV9QUk9UX1BJTzoKIAkJLyoKIAkJICogRXJyYXRhIFNBVEEjMTYsIFNBVEEjMjQ6IHdhcm4gaWYgbXVsdGlwbGUgRFJRcyBleHBlY3RlZC4KIAkJICoKQEAgLTE1ODMsMjcgKzIxNjksNDYgQEAKIAkJCQkJIjogYXR0ZW1wdGluZyBQSU8gdy9tdWx0aXBsZSBEUlE6ICIKIAkJCQkJInRoaXMgbWF5IGZhaWwgZHVlIHRvIGgvdyBlcnJhdGFcbiIpOwogCQl9Ci0JCS8qCi0JCSAqIFdlJ3JlIGFib3V0IHRvIHNlbmQgYSBub24tRURNQSBjYXBhYmxlIGNvbW1hbmQgdG8gdGhlCi0JCSAqIHBvcnQuICBUdXJuIG9mZiBFRE1BIHNvIHRoZXJlIHdvbid0IGJlIHByb2JsZW1zIGFjY2Vzc2luZwotCQkgKiBzaGFkb3cgYmxvY2ssIGV0YyByZWdpc3RlcnMuCi0JCSAqLwotCQltdl9zdG9wX2VkbWEoYXApOwotCQltdl9lbmFibGVfcG9ydF9pcnFzKGFwLCBFUlJfSVJRKTsKLQkJbXZfcG1wX3NlbGVjdChhcCwgcWMtPmRldi0+bGluay0+cG1wKTsKLQkJcmV0dXJuIGF0YV9zZmZfcWNfaXNzdWUocWMpOworCQkvKiBkcm9wIHRocm91Z2ggKi8KKwljYXNlIEFUQV9QUk9UX05PREFUQToKKwljYXNlIEFUQVBJX1BST1RfUElPOgorCWNhc2UgQVRBUElfUFJPVF9OT0RBVEE6CisJCWlmIChhcC0+ZmxhZ3MgJiBBVEFfRkxBR19QSU9fUE9MTElORykKKwkJCXFjLT50Zi5mbGFncyB8PSBBVEFfVEZMQUdfUE9MTElORzsKKwkJYnJlYWs7CiAJfQogCi0JbXZfc3RhcnRfZG1hKGFwLCBwb3J0X21taW8sIHBwLCBxYy0+dGYucHJvdG9jb2wpOworCWlmIChxYy0+dGYuZmxhZ3MgJiBBVEFfVEZMQUdfUE9MTElORykKKwkJcG9ydF9pcnFzID0gRVJSX0lSUTsJLyogbWFzayBkZXZpY2UgaW50ZXJydXB0IHdoZW4gcG9sbGluZyAqLworCWVsc2UKKwkJcG9ydF9pcnFzID0gRVJSX0lSUSB8IERPTkVfSVJROwkvKiB1bm1hc2sgYWxsIGludGVycnVwdHMgKi8KIAotCXBwLT5yZXFfaWR4ID0gKHBwLT5yZXFfaWR4ICsgMSkgJiBNVl9NQVhfUV9ERVBUSF9NQVNLOwotCWluX2luZGV4ID0gcHAtPnJlcV9pZHggPDwgRURNQV9SRVFfUV9QVFJfU0hJRlQ7CisJLyoKKwkgKiBXZSdyZSBhYm91dCB0byBzZW5kIGEgbm9uLUVETUEgY2FwYWJsZSBjb21tYW5kIHRvIHRoZQorCSAqIHBvcnQuICBUdXJuIG9mZiBFRE1BIHNvIHRoZXJlIHdvbid0IGJlIHByb2JsZW1zIGFjY2Vzc2luZworCSAqIHNoYWRvdyBibG9jaywgZXRjIHJlZ2lzdGVycy4KKwkgKi8KKwltdl9zdG9wX2VkbWEoYXApOworCW12X2NsZWFyX2FuZF9lbmFibGVfcG9ydF9pcnFzKGFwLCBtdl9hcF9iYXNlKGFwKSwgcG9ydF9pcnFzKTsKKwltdl9wbXBfc2VsZWN0KGFwLCBxYy0+ZGV2LT5saW5rLT5wbXApOwogCi0JLyogYW5kIHdyaXRlIHRoZSByZXF1ZXN0IGluIHBvaW50ZXIgdG8ga2ljayB0aGUgRURNQSB0byBsaWZlICovCi0Jd3JpdGVsZmwoKHBwLT5jcnFiX2RtYSAmIEVETUFfUkVRX1FfQkFTRV9MT19NQVNLKSB8IGluX2luZGV4LAotCQkgcG9ydF9tbWlvICsgRURNQV9SRVFfUV9JTl9QVFJfT0ZTKTsKLQotCXJldHVybiAwOworCWlmIChxYy0+dGYuY29tbWFuZCA9PSBBVEFfQ01EX1JFQURfTE9HX0VYVCkgeworCQlzdHJ1Y3QgbXZfaG9zdF9wcml2ICpocHJpdiA9IGFwLT5ob3N0LT5wcml2YXRlX2RhdGE7CisJCS8qCisJCSAqIFdvcmthcm91bmQgZm9yIDg4U1g2MHgxIEZFciBTQVRBIzI1IChwYXJ0IDIpLgorCQkgKgorCQkgKiBBZnRlciBhbnkgTkNRIGVycm9yLCB0aGUgUkVBRF9MT0dfRVhUIGNvbW1hbmQKKwkJICogZnJvbSBsaWJhdGEtZWggKm11c3QqIHVzZSBtdl9xY19pc3N1ZV9maXMoKS4KKwkJICogT3RoZXJ3aXNlIGl0IG1pZ2h0IGZhaWwsIGR1ZSB0byBjaGlwIGVycmF0YS4KKwkJICoKKwkJICogUmF0aGVyIHRoYW4gc3BlY2lhbC1jYXNlIGl0LCB3ZSdsbCBqdXN0ICphbHdheXMqCisJCSAqIHVzZSB0aGlzIG1ldGhvZCBoZXJlIGZvciBSRUFEX0xPR19FWFQsIG1ha2luZyBmb3IKKwkJICogZWFzaWVyIHRlc3RpbmcuCisJCSAqLworCQlpZiAoSVNfR0VOX0lJKGhwcml2KSkKKwkJCXJldHVybiBtdl9xY19pc3N1ZV9maXMocWMpOworCX0KKwlyZXR1cm4gYXRhX3NmZl9xY19pc3N1ZShxYyk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKm12X2dldF9hY3RpdmVfcWMoc3RydWN0IGF0YV9wb3J0ICphcCkKQEAgLTE2MTQsOCArMjIxOSwxMiBAQAogCWlmIChwcC0+cHBfZmxhZ3MgJiBNVl9QUF9GTEFHX05DUV9FTikKIAkJcmV0dXJuIE5VTEw7CiAJcWMgPSBhdGFfcWNfZnJvbV90YWcoYXAsIGFwLT5saW5rLmFjdGl2ZV90YWcpOwotCWlmIChxYyAmJiAocWMtPnRmLmZsYWdzICYgQVRBX1RGTEFHX1BPTExJTkcpKQotCQlxYyA9IE5VTEw7CisJaWYgKHFjKSB7CisJCWlmIChxYy0+dGYuZmxhZ3MgJiBBVEFfVEZMQUdfUE9MTElORykKKwkJCXFjID0gTlVMTDsKKwkJZWxzZSBpZiAoIShxYy0+ZmxhZ3MgJiBBVEFfUUNGTEFHX0FDVElWRSkpCisJCQlxYyA9IE5VTEw7CisJfQogCXJldHVybiBxYzsKIH0KIApAQCAtMjA4NCw2ICsyNjkzLDEwIEBACiAJdm9pZCBfX2lvbWVtICptbWlvID0gaHByaXYtPmJhc2UsICpoY19tbWlvOwogCXVuc2lnbmVkIGludCBoYW5kbGVkID0gMCwgcG9ydDsKIAorCS8qIElmIGFzc2VydGVkLCBjbGVhciB0aGUgImFsbCBwb3J0cyIgSVJRIGNvYWxlc2NpbmcgYml0ICovCisJaWYgKG1haW5faXJxX2NhdXNlICYgQUxMX1BPUlRTX0NPQUxfRE9ORSkKKwkJd3JpdGVsKH5BTExfUE9SVFNfQ09BTF9JUlEsIG1taW8gKyBNVl9JUlFfQ09BTF9DQVVTRSk7CisKIAlmb3IgKHBvcnQgPSAwOyBwb3J0IDwgaHByaXYtPm5fcG9ydHM7IHBvcnQrKykgewogCQlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gaG9zdC0+cG9ydHNbcG9ydF07CiAJCXVuc2lnbmVkIGludCBwLCBzaGlmdCwgaGFyZHBvcnQsIHBvcnRfY2F1c2U7CkBAIC0yMTE2LDYgKzI3MjksOCBAQAogCQkJICogdG8gYWNrIChvbmx5KSB0aG9zZSBwb3J0cyB2aWEgaGNfaXJxX2NhdXNlLgogCQkJICovCiAJCQlhY2tfaXJxcyA9IDA7CisJCQlpZiAoaGNfY2F1c2UgJiBQT1JUU18wXzNfQ09BTF9ET05FKQorCQkJCWFja19pcnFzID0gSENfQ09BTF9JUlE7CiAJCQlmb3IgKHAgPSAwOyBwIDwgTVZfUE9SVFNfUEVSX0hDOyArK3ApIHsKIAkJCQlpZiAoKHBvcnQgKyBwKSA+PSBocHJpdi0+bl9wb3J0cykKIAkJCQkJYnJlYWs7CkBAIC0yMjA0LDcgKzI4MTksNyBAQAogCiAJLyogZm9yIE1TSTogIGJsb2NrIG5ldyBpbnRlcnJ1cHRzIHdoaWxlIGluIGhlcmUgKi8KIAlpZiAodXNpbmdfbXNpKQotCQl3cml0ZWwoMCwgaHByaXYtPm1haW5faXJxX21hc2tfYWRkcik7CisJCW12X3dyaXRlX21haW5faXJxX21hc2soMCwgaHByaXYpOwogCiAJbWFpbl9pcnFfY2F1c2UgPSByZWFkbChocHJpdi0+bWFpbl9pcnFfY2F1c2VfYWRkcik7CiAJcGVuZGluZ19pcnFzICAgPSBtYWluX2lycV9jYXVzZSAmIGhwcml2LT5tYWluX2lycV9tYXNrOwpAQCAtMjIyMSw3ICsyODM2LDcgQEAKIAogCS8qIGZvciBNU0k6IHVubWFzazsgaW50ZXJydXB0IGNhdXNlIGJpdHMgd2lsbCByZXRyaWdnZXIgbm93ICovCiAJaWYgKHVzaW5nX21zaSkKLQkJd3JpdGVsKGhwcml2LT5tYWluX2lycV9tYXNrLCBocHJpdi0+bWFpbl9pcnFfbWFza19hZGRyKTsKKwkJbXZfd3JpdGVfbWFpbl9pcnFfbWFzayhocHJpdi0+bWFpbl9pcnFfbWFzaywgaHByaXYpOwogCiAJc3Bpbl91bmxvY2soJmhvc3QtPmxvY2spOwogCkBAIC0yNzc0LDYgKzMzODksOCBAQAogCiAJbXZfcmVzZXRfY2hhbm5lbChocHJpdiwgbW1pbywgYXAtPnBvcnRfbm8pOwogCXBwLT5wcF9mbGFncyAmPSB+TVZfUFBfRkxBR19FRE1BX0VOOworCXBwLT5wcF9mbGFncyAmPQorCSAgfihNVl9QUF9GTEFHX0ZCU19FTiB8IE1WX1BQX0ZMQUdfTkNRX0VOIHwgTVZfUFBfRkxBR19GQUtFX0FUQV9CVVNZKTsKIAogCS8qIFdvcmthcm91bmQgZm9yIGVycmF0YSBGRXIgU0FUQSMxMCAocGFydCAyKSAqLwogCWRvIHsKQEAgLTI3OTMsNiArMzQxMCw4IEBACiAJCQkJZXh0cmEgPSBIWjsgLyogb25seSBleHRlbmQgaXQgb25jZSwgbWF4ICovCiAJCX0KIAl9IHdoaWxlIChzc3RhdHVzICE9IDB4MCAmJiBzc3RhdHVzICE9IDB4MTEzICYmIHNzdGF0dXMgIT0gMHgxMjMpOworCW12X3NhdmVfY2FjaGVkX3JlZ3MoYXApOworCW12X2VkbWFfY2ZnKGFwLCAwLCAwKTsKIAogCXJldHVybiByYzsKIH0KQEAgLTMxMjYsNiArMzc0NSw4IEBACiAJICogVGhlIHBlci1wb3J0IGludGVycnVwdHMgZ2V0IGRvbmUgbGF0ZXIgYXMgcG9ydHMgYXJlIHNldCB1cC4KIAkgKi8KIAltdl9zZXRfbWFpbl9pcnFfbWFzayhob3N0LCAwLCBQQ0lfRVJSKTsKKwltdl9zZXRfaXJxX2NvYWxlc2NpbmcoaG9zdCwgaXJxX2NvYWxlc2NpbmdfaW9fY291bnQsCisJCQkJICAgIGlycV9jb2FsZXNjaW5nX3VzZWNzKTsKIGRvbmU6CiAJcmV0dXJuIHJjOwogfQpAQCAtMzI4NywxMiArMzkwOCw2IEBACiAJLnJlbW92ZQkJCT0gYXRhX3BjaV9yZW1vdmVfb25lLAogfTsKIAotLyoKLSAqIG1vZHVsZSBvcHRpb25zCi0gKi8KLXN0YXRpYyBpbnQgbXNpOwkgICAgICAvKiBVc2UgUENJIG1zaTsgZWl0aGVyIHplcm8gKG9mZiwgZGVmYXVsdCkgb3Igbm9uLXplcm8gKi8KLQotCiAvKiBtb3ZlIHRvIFBDSSBsYXllciBvciBsaWJhdGEgY29yZT8gKi8KIHN0YXRpYyBpbnQgcGNpX2dvXzY0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewpAQCAtMzQ3NCwxMCArNDA4OSw1IEBACiBNT0RVTEVfVkVSU0lPTihEUlZfVkVSU0lPTik7CiBNT0RVTEVfQUxJQVMoInBsYXRmb3JtOiIgRFJWX05BTUUpOwogCi0jaWZkZWYgQ09ORklHX1BDSQotbW9kdWxlX3BhcmFtKG1zaSwgaW50LCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MobXNpLCAiRW5hYmxlIHVzZSBvZiBQQ0kgTVNJICgwPW9mZiwgMT1vbikiKTsKLSNlbmRpZgotCiBtb2R1bGVfaW5pdChtdl9pbml0KTsKIG1vZHVsZV9leGl0KG12X2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV9udi5jIGIvZHJpdmVycy9hdGEvc2F0YV9udi5jCmluZGV4IGY2NWI1MzcuLjZjZGExMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3NhdGFfbnYuYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX252LmMKQEAgLTU3LDkgKzU3LDkgQEAKIAlOVl9NTUlPX0JBUgkJCT0gNSwKIAogCU5WX1BPUlRTCQkJPSAyLAotCU5WX1BJT19NQVNLCQkJPSAweDFmLAotCU5WX01XRE1BX01BU0sJCQk9IDB4MDcsCi0JTlZfVURNQV9NQVNLCQkJPSAweDdmLAorCU5WX1BJT19NQVNLCQkJPSBBVEFfUElPNCwKKwlOVl9NV0RNQV9NQVNLCQkJPSBBVEFfTVdETUEyLAorCU5WX1VETUFfTUFTSwkJCT0gQVRBX1VETUE2LAogCU5WX1BPUlQwX1NDUl9SRUdfT0ZGU0VUCQk9IDB4MDAsCiAJTlZfUE9SVDFfU0NSX1JFR19PRkZTRVQJCT0gMHg0MCwKIApAQCAtNDA4LDYgKzQwOCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBudl9jb21tb25fb3BzID0gewogCS5pbmhlcml0cwkJPSAmYXRhX2JtZG1hX3BvcnRfb3BzLAorCS5sb3N0X2ludGVycnVwdAkJPSBBVEFfT1BfTlVMTCwKIAkuc2NyX3JlYWQJCT0gbnZfc2NyX3JlYWQsCiAJLnNjcl93cml0ZQkJPSBudl9zY3Jfd3JpdGUsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV9wcm9taXNlLmMgYi9kcml2ZXJzL2F0YS9zYXRhX3Byb21pc2UuYwppbmRleCBiYTlhMjU3Li5iMWZkN2Q2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9zYXRhX3Byb21pc2UuYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX3Byb21pc2UuYwpAQCAtMTc2LDcgKzE3Niw5IEBACiAJLmNoZWNrX2F0YXBpX2RtYQk9IHBkY19jaGVja19hdGFwaV9kbWEsCiAJLnFjX3ByZXAJCT0gcGRjX3FjX3ByZXAsCiAJLnFjX2lzc3VlCQk9IHBkY19xY19pc3N1ZSwKKwogCS5zZmZfaXJxX2NsZWFyCQk9IHBkY19pcnFfY2xlYXIsCisJLmxvc3RfaW50ZXJydXB0CQk9IEFUQV9PUF9OVUxMLAogCiAJLnBvc3RfaW50ZXJuYWxfY21kCT0gcGRjX3Bvc3RfaW50ZXJuYWxfY21kLAogCS5lcnJvcl9oYW5kbGVyCQk9IHBkY19lcnJvcl9oYW5kbGVyLApAQCAtMjEzLDggKzIxNSw4IEBACiAJewogCQkuZmxhZ3MJCT0gUERDX0NPTU1PTl9GTEFHUyB8IEFUQV9GTEFHX1NBVEEgfAogCQkJCSAgUERDX0ZMQUdfU0FUQV9QQVRBLAotCQkucGlvX21hc2sJPSAweDFmLCAvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA3LCAvKiBtd2RtYTAtMiAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmcGRjX29sZF9zYXRhX29wcywKIAl9LApAQCAtMjIyLDggKzIyNCw4IEBACiAJW2JvYXJkXzIwMzd4X3BhdGFdID0KIAl7CiAJCS5mbGFncwkJPSBQRENfQ09NTU9OX0ZMQUdTIHwgQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrCT0gMHgxZiwgLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWEwLTIgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJnBkY19wYXRhX29wcywKIAl9LApAQCAtMjMyLDggKzIzNCw4IEBACiAJewogCQkuZmxhZ3MJCT0gUERDX0NPTU1PTl9GTEFHUyB8IEFUQV9GTEFHX1NBVEEgfAogCQkJCSAgUERDX0ZMQUdfNF9QT1JUUywKLQkJLnBpb19tYXNrCT0gMHgxZiwgLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWEwLTIgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJnBkY19vbGRfc2F0YV9vcHMsCiAJfSwKQEAgLTI0Miw4ICsyNDQsOCBAQAogCXsKIAkJLmZsYWdzCQk9IFBEQ19DT01NT05fRkxBR1MgfCBBVEFfRkxBR19TTEFWRV9QT1NTIHwKIAkJCQkgIFBEQ19GTEFHXzRfUE9SVFMsCi0JCS5waW9fbWFzawk9IDB4MWYsIC8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDcsIC8qIG13ZG1hMC0yICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZwZGNfcGF0YV9vcHMsCiAJfSwKQEAgLTI1Miw4ICsyNTQsOCBAQAogCXsKIAkJLmZsYWdzCQk9IFBEQ19DT01NT05fRkxBR1MgfCBBVEFfRkxBR19TQVRBIHwKIAkJCQkgIFBEQ19GTEFHX0dFTl9JSSB8IFBEQ19GTEFHX1NBVEFfUEFUQSwKLQkJLnBpb19tYXNrCT0gMHgxZiwgLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWEwLTIgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJnBkY19zYXRhX29wcywKIAl9LApAQCAtMjYyLDggKzI2NCw4IEBACiAJewogCQkuZmxhZ3MJCT0gUERDX0NPTU1PTl9GTEFHUyB8IEFUQV9GTEFHX1NMQVZFX1BPU1MgfAogCQkJCSAgUERDX0ZMQUdfR0VOX0lJLAotCQkucGlvX21hc2sJPSAweDFmLCAvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA3LCAvKiBtd2RtYTAtMiAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmcGRjX3BhdGFfb3BzLAogCX0sCkBAIC0yNzIsOCArMjc0LDggQEAKIAl7CiAJCS5mbGFncwkJPSBQRENfQ09NTU9OX0ZMQUdTIHwgQVRBX0ZMQUdfU0FUQSB8CiAJCQkJICBQRENfRkxBR19HRU5fSUkgfCBQRENfRkxBR180X1BPUlRTLAotCQkucGlvX21hc2sJPSAweDFmLCAvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA3LCAvKiBtd2RtYTAtMiAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmcGRjX3NhdGFfb3BzLAogCX0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9zYXRhX3FzdG9yLmMgYi9kcml2ZXJzL2F0YS9zYXRhX3FzdG9yLmMKaW5kZXggYTAwMGM4Ni4uYzM5MzZkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvc2F0YV9xc3Rvci5jCisrKyBiL2RyaXZlcnMvYXRhL3NhdGFfcXN0b3IuYwpAQCAtMTQ3LDYgKzE0Nyw3IEBACiAJLnNvZnRyZXNldAkJPSBBVEFfT1BfTlVMTCwKIAkuZXJyb3JfaGFuZGxlcgkJPSBxc19lcnJvcl9oYW5kbGVyLAogCS5wb3N0X2ludGVybmFsX2NtZAk9IEFUQV9PUF9OVUxMLAorCS5sb3N0X2ludGVycnVwdAkJPSBBVEFfT1BfTlVMTCwKIAogCS5zY3JfcmVhZAkJPSBxc19zY3JfcmVhZCwKIAkuc2NyX3dyaXRlCQk9IHFzX3Njcl93cml0ZSwKQEAgLTE2MCw3ICsxNjEsNyBAQAogCXsKIAkJLmZsYWdzCQk9IEFUQV9GTEFHX1NBVEEgfCBBVEFfRkxBR19OT19MRUdBQ1kgfAogCQkJCSAgQVRBX0ZMQUdfTU1JTyB8IEFUQV9GTEFHX1BJT19QT0xMSU5HLAotCQkucGlvX21hc2sJPSAweDEwLCAvKiBwaW80ICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80X09OTFksCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZxc19hdGFfb3BzLAogCX0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9zYXRhX3NpbC5jIGIvZHJpdmVycy9hdGEvc2F0YV9zaWwuYwppbmRleCBkMDA5MTYwLi5lNjdjZThlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9zYXRhX3NpbC5jCisrKyBiL2RyaXZlcnMvYXRhL3NhdGFfc2lsLmMKQEAgLTIwMCw4ICsyMDAsOCBAQAogCS8qIHNpbF8zMTEyICovCiAJewogCQkuZmxhZ3MJCT0gU0lMX0RGTF9QT1JUX0ZMQUdTIHwgU0lMX0ZMQUdfTU9EMTVXUklURSwKLQkJLnBpb19tYXNrCT0gMHgxZiwJCQkvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA3LAkJCS8qIG13ZG1hMC0yICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTUsCiAJCS5wb3J0X29wcwk9ICZzaWxfb3BzLAogCX0sCkBAIC0yMDksMjQgKzIwOSwyNCBAQAogCXsKIAkJLmZsYWdzCQk9IFNJTF9ERkxfUE9SVF9GTEFHUyB8IFNJTF9GTEFHX01PRDE1V1JJVEUgfAogCQkJCSAgU0lMX0ZMQUdfTk9fU0FUQV9JUlEsCi0JCS5waW9fbWFzawk9IDB4MWYsCQkJLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywJCQkvKiBtd2RtYTAtMiAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE1LAogCQkucG9ydF9vcHMJPSAmc2lsX29wcywKIAl9LAogCS8qIHNpbF8zNTEyICovCiAJewogCQkuZmxhZ3MJCT0gU0lMX0RGTF9QT1JUX0ZMQUdTIHwgU0lMX0ZMQUdfUkVSUl9PTl9ETUFfQUNULAotCQkucGlvX21hc2sJPSAweDFmLAkJCS8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDcsCQkJLyogbXdkbWEwLTIgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwKIAkJLnBvcnRfb3BzCT0gJnNpbF9vcHMsCiAJfSwKIAkvKiBzaWxfMzExNCAqLwogCXsKIAkJLmZsYWdzCQk9IFNJTF9ERkxfUE9SVF9GTEFHUyB8IFNJTF9GTEFHX1JFUlJfT05fRE1BX0FDVCwKLQkJLnBpb19tYXNrCT0gMHgxZiwJCQkvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA3LAkJCS8qIG13ZG1hMC0yICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTUsCiAJCS5wb3J0X29wcwk9ICZzaWxfb3BzLAogCX0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9zYXRhX3NpbDI0LmMgYi9kcml2ZXJzL2F0YS9zYXRhX3NpbDI0LmMKaW5kZXggMjU5MGMyMi4uMGQ4OTkwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvc2F0YV9zaWwyNC5jCisrKyBiL2RyaXZlcnMvYXRhL3NhdGFfc2lsMjQuYwpAQCAtNDI5LDI1ICs0MjksMjUgQEAKIAl7CiAJCS5mbGFncwkJPSBTSUwyNF9DT01NT05fRkxBR1MgfCBTSUwyNF9OUE9SVFMyRkxBRyg0KSB8CiAJCQkJICBTSUwyNF9GTEFHX1BDSVhfSVJRX1dPQywKLQkJLnBpb19tYXNrCT0gMHgxZiwJCQkvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA3LAkJCS8qIG13ZG1hMC0yICovCi0JCS51ZG1hX21hc2sJPSBBVEFfVURNQTUsCQkvKiB1ZG1hMC01ICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCisJCS51ZG1hX21hc2sJPSBBVEFfVURNQTUsCiAJCS5wb3J0X29wcwk9ICZzaWwyNF9vcHMsCiAJfSwKIAkvKiBzaWxfMzEzMiAqLwogCXsKIAkJLmZsYWdzCQk9IFNJTDI0X0NPTU1PTl9GTEFHUyB8IFNJTDI0X05QT1JUUzJGTEFHKDIpLAotCQkucGlvX21hc2sJPSAweDFmLAkJCS8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDcsCQkJLyogbXdkbWEwLTIgKi8KLQkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwJCS8qIHVkbWEwLTUgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKKwkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwKIAkJLnBvcnRfb3BzCT0gJnNpbDI0X29wcywKIAl9LAogCS8qIHNpbF8zMTMxL3NpbF8zNTMxICovCiAJewogCQkuZmxhZ3MJCT0gU0lMMjRfQ09NTU9OX0ZMQUdTIHwgU0lMMjRfTlBPUlRTMkZMQUcoMSksCi0JCS5waW9fbWFzawk9IDB4MWYsCQkJLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywJCQkvKiBtd2RtYTAtMiAqLwotCQkudWRtYV9tYXNrCT0gQVRBX1VETUE1LAkJLyogdWRtYTAtNSAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAorCQkudWRtYV9tYXNrCT0gQVRBX1VETUE1LAogCQkucG9ydF9vcHMJPSAmc2lsMjRfb3BzLAogCX0sCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV9zaXMuYyBiL2RyaXZlcnMvYXRhL3NhdGFfc2lzLmMKaW5kZXggOWM0M2I0ZS4uOGY5ODMzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvc2F0YV9zaXMuYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX3Npcy5jCkBAIC05Nyw4ICs5Nyw4IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBzaXNfcG9ydF9pbmZvID0gewogCS5mbGFncwkJPSBBVEFfRkxBR19TQVRBIHwgQVRBX0ZMQUdfTk9fTEVHQUNZLAotCS5waW9fbWFzawk9IDB4MWYsCi0JLm13ZG1hX21hc2sJPSAweDcsCisJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJLnBvcnRfb3BzCT0gJnNpc19vcHMsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV9zdncuYyBiL2RyaXZlcnMvYXRhL3NhdGFfc3Z3LmMKaW5kZXggNjA5ZDE0Ny4uNzI1N2YyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvc2F0YV9zdncuYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX3N2dy5jCkBAIC0zNjEsOCArMzYxLDggQEAKIAl7CiAJCS5mbGFncwkJPSBBVEFfRkxBR19TQVRBIHwgQVRBX0ZMQUdfTk9fTEVHQUNZIHwKIAkJCQkgIEFUQV9GTEFHX01NSU8gfCBLMl9GTEFHX05PX0FUQVBJX0RNQSwKLQkJLnBpb19tYXNrCT0gMHgxZiwKLQkJLm13ZG1hX21hc2sJPSAweDA3LAorCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmazJfc2F0YV9vcHMsCiAJfSwKQEAgLTM3MSw4ICszNzEsOCBAQAogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0FUQSB8IEFUQV9GTEFHX05PX0xFR0FDWSB8CiAJCQkJICBBVEFfRkxBR19NTUlPIHwgSzJfRkxBR19OT19BVEFQSV9ETUEgfAogCQkJCSAgSzJfRkxBR19TQVRBXzhfUE9SVFMsCi0JCS5waW9fbWFzawk9IDB4MWYsCi0JCS5td2RtYV9tYXNrCT0gMHgwNywKKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJmsyX3NhdGFfb3BzLAogCX0sCkBAIC0zODAsOCArMzgwLDggQEAKIAl7CiAJCS5mbGFncwkJPSBBVEFfRkxBR19TQVRBIHwgQVRBX0ZMQUdfTk9fTEVHQUNZIHwKIAkJCQkgIEFUQV9GTEFHX01NSU8gfCBLMl9GTEFHX0JBUl9QT1NfMywKLQkJLnBpb19tYXNrCT0gMHgxZiwKLQkJLm13ZG1hX21hc2sJPSAweDA3LAorCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmazJfc2F0YV9vcHMsCiAJfSwKQEAgLTM4OSw4ICszODksOCBAQAogCXsKIAkJLmZsYWdzCQk9IEFUQV9GTEFHX1NBVEEgfCBBVEFfRkxBR19OT19MRUdBQ1kgfAogCQkJCSAgQVRBX0ZMQUdfTU1JTywKLQkJLnBpb19tYXNrCT0gMHgxZiwKLQkJLm13ZG1hX21hc2sJPSAweDA3LAorCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmazJfc2F0YV9vcHMsCiAJfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfc3g0LmMgYi9kcml2ZXJzL2F0YS9zYXRhX3N4NC5jCmluZGV4IGVjMDRiOGQuLmRjZTNkY2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3NhdGFfc3g0LmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV9zeDQuYwpAQCAtMjY1LDggKzI2NSw4IEBACiAJCS5mbGFncwkJPSBBVEFfRkxBR19TQVRBIHwgQVRBX0ZMQUdfTk9fTEVHQUNZIHwKIAkJCQkgIEFUQV9GTEFHX1NSU1QgfCBBVEFfRkxBR19NTUlPIHwKIAkJCQkgIEFUQV9GTEFHX05PX0FUQVBJIHwgQVRBX0ZMQUdfUElPX1BPTExJTkcsCi0JCS5waW9fbWFzawk9IDB4MWYsIC8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDcsIC8qIG13ZG1hMC0yICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZwZGNfMjA2MjFfb3BzLAogCX0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9zYXRhX3VsaS5jIGIvZHJpdmVycy9hdGEvc2F0YV91bGkuYwppbmRleCAwMTk1NzViLi5lNWJmZjQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9zYXRhX3VsaS5jCisrKyBiL2RyaXZlcnMvYXRhL3NhdGFfdWxpLmMKQEAgLTg5LDcgKzg5LDcgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyB1bGlfcG9ydF9pbmZvID0gewogCS5mbGFncwkJPSBBVEFfRkxBR19TQVRBIHwgQVRBX0ZMQUdfTk9fTEVHQUNZIHwKIAkJCSAgQVRBX0ZMQUdfSUdOX1NJTVBMRVgsCi0JLnBpb19tYXNrICAgICAgID0gMHgxZiwJCS8qIHBpbzAtNCAqLworCS5waW9fbWFzayAgICAgICA9IEFUQV9QSU80LAogCS51ZG1hX21hc2sgICAgICA9IEFUQV9VRE1BNiwKIAkucG9ydF9vcHMgICAgICAgPSAmdWxpX29wcywKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9zYXRhX3ZpYS5jIGIvZHJpdmVycy9hdGEvc2F0YV92aWEuYwppbmRleCA1YzYyZGE5Li45OGU4YzUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9zYXRhX3ZpYS5jCisrKyBiL2RyaXZlcnMvYXRhL3NhdGFfdmlhLmMKQEAgLTE0NiwyNCArMTQ2LDI0IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyB2dDY0MjBfcG9ydF9pbmZvID0gewogCS5mbGFncwkJPSBBVEFfRkxBR19TQVRBIHwgQVRBX0ZMQUdfTk9fTEVHQUNZLAotCS5waW9fbWFzawk9IDB4MWYsCi0JLm13ZG1hX21hc2sJPSAweDA3LAorCS5waW9fbWFzawk9IEFUQV9QSU80LAorCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCS5wb3J0X29wcwk9ICZ2dDY0MjBfc2F0YV9vcHMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X2luZm8gdnQ2NDIxX3Nwb3J0X2luZm8gPSB7CiAJLmZsYWdzCQk9IEFUQV9GTEFHX1NBVEEgfCBBVEFfRkxBR19OT19MRUdBQ1ksCi0JLnBpb19tYXNrCT0gMHgxZiwKLQkubXdkbWFfbWFzawk9IDB4MDcsCisJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJLnBvcnRfb3BzCT0gJnZ0NjQyMV9zYXRhX29wcywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyB2dDY0MjFfcHBvcnRfaW5mbyA9IHsKIAkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUyB8IEFUQV9GTEFHX05PX0xFR0FDWSwKLQkucGlvX21hc2sJPSAweDFmLAotCS5td2RtYV9tYXNrCT0gMCwKKwkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkvKiBObyBNV0RNQSAqLwogCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJLnBvcnRfb3BzCT0gJnZ0NjQyMV9wYXRhX29wcywKIH07CkBAIC0xNzEsOCArMTcxLDggQEAKIHN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyB2dDgyNTFfcG9ydF9pbmZvID0gewogCS5mbGFncwkJPSBBVEFfRkxBR19TQVRBIHwgQVRBX0ZMQUdfU0xBVkVfUE9TUyB8CiAJCQkgIEFUQV9GTEFHX05PX0xFR0FDWSwKLQkucGlvX21hc2sJPSAweDFmLAotCS5td2RtYV9tYXNrCT0gMHgwNywKKwkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkucG9ydF9vcHMJPSAmdnQ4MjUxX29wcywKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9zYXRhX3ZzYy5jIGIvZHJpdmVycy9hdGEvc2F0YV92c2MuYwppbmRleCBjNTdjZGZmLi5lZDcwYmQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9zYXRhX3ZzYy5jCisrKyBiL2RyaXZlcnMvYXRhL3NhdGFfdnNjLmMKQEAgLTMwOCw2ICszMDgsOSBAQAogCiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgdnNjX3NhdGFfb3BzID0gewogCS5pbmhlcml0cwkJPSAmYXRhX2JtZG1hX3BvcnRfb3BzLAorCS8qIFRoZSBJUlEgaGFuZGxpbmcgaXMgbm90IHF1aXRlIHN0YW5kYXJkIFNGRiBiZWhhdmlvdXIgc28gd2UKKwkgICBjYW5ub3QgdXNlIHRoZSBkZWZhdWx0IGxvc3QgaW50ZXJydXB0IGhhbmRsZXIgKi8KKwkubG9zdF9pbnRlcnJ1cHQJCT0gQVRBX09QX05VTEwsCiAJLnNmZl90Zl9sb2FkCQk9IHZzY19zYXRhX3RmX2xvYWQsCiAJLnNmZl90Zl9yZWFkCQk9IHZzY19zYXRhX3RmX3JlYWQsCiAJLmZyZWV6ZQkJCT0gdnNjX2ZyZWV6ZSwKQEAgLTM0NSw4ICszNDgsOCBAQAogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBwaSA9IHsKIAkJLmZsYWdzCQk9IEFUQV9GTEFHX1NBVEEgfCBBVEFfRkxBR19OT19MRUdBQ1kgfAogCQkJCSAgQVRBX0ZMQUdfTU1JTywKLQkJLnBpb19tYXNrCT0gMHgxZiwKLQkJLm13ZG1hX21hc2sJPSAweDA3LAorCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmdnNjX3NhdGFfb3BzLAogCX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0bS9maXJlc3RyZWFtLmMgYi9kcml2ZXJzL2F0bS9maXJlc3RyZWFtLmMKaW5kZXggOTgwOTlmNS4uYjExOTY0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdG0vZmlyZXN0cmVhbS5jCisrKyBiL2RyaXZlcnMvYXRtL2ZpcmVzdHJlYW0uYwpAQCAtMTY5MCwxNyArMTY5MCwxNyBAQAogCQkgIHwgKDAgKiBTQVJNT0RFMF9TSEFERU4pIC8qIFdlIGRvbid0IHVzZSBzaGFkb3cgcmVnaXN0ZXJzLiAqLwogCQkgIHwgKDEgKiBTQVJNT0RFMF9JTlRNT0RFX1JFQURDTEVBUikKIAkJICB8ICgxICogU0FSTU9ERTBfQ1dSRSkKLQkJICB8IElTX0ZTNTAoZGV2KT9TQVJNT0RFMF9QUlBXVF9GUzUwXzU6IAotCQkgICAgICAgICAgICAgICAgIFNBUk1PREUwX1BSUFdUX0ZTMTU1XzMKKwkJICB8IChJU19GUzUwKGRldikgPyBTQVJNT0RFMF9QUlBXVF9GUzUwXzU6CisJCQkgIFNBUk1PREUwX1BSUFdUX0ZTMTU1XzMpCiAJCSAgfCAoMSAqIFNBUk1PREUwX0NBTFNVUF8xKQotCQkgIHwgSVNfRlM1MCAoZGV2KT8oMAorCQkgIHwgKElTX0ZTNTAoZGV2KSA/ICgwCiAJCQkJICAgfCBTQVJNT0RFMF9SWFZDU18zMgogCQkJCSAgIHwgU0FSTU9ERTBfQUJSVkNTXzMyIAogCQkJCSAgIHwgU0FSTU9ERTBfVFhWQ1NfMzIpOgogCQkgICAgICAgICAgICAgICAgICAoMAogCQkJCSAgIHwgU0FSTU9ERTBfUlhWQ1NfMWsKIAkJCQkgICB8IFNBUk1PREUwX0FCUlZDU18xayAKLQkJCQkgICB8IFNBUk1PREUwX1RYVkNTXzFrKSk7CisJCQkJICAgfCBTQVJNT0RFMF9UWFZDU18xaykpKTsKIAogCS8qIDEwbXMgKiAxMDAgaXMgMSBzZWNvbmQuIFRoYXQgc2hvdWxkIGJlIGVub3VnaCwgYXMgQU4zOjkgc2F5cyBpdCB0YWtlcwogCSAgIDFtcy4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRtL2lwaGFzZS5jIGIvZHJpdmVycy9hdG0vaXBoYXNlLmMKaW5kZXggZTFjNzYxMS4uNzhjOTczNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdG0vaXBoYXNlLmMKKysrIGIvZHJpdmVycy9hdG0vaXBoYXNlLmMKQEAgLTk3Nyw5ICs5NzcsNyBAQAogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHBCdWYgKz0gc3ByaW50ZiggcEJ1ZiwgIi4iICk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICBzcHJpbnRmKCBwQnVmLCAiXG4iICk7Ci0gICAgICAgIC8vIFNQcmludChwcm50QnVmKTsKLSAgICAgICAgcHJpbnRrKHBybnRCdWYpOworICAgICAgICBwcmludGsoIiVzXG4iLCBwcm50QnVmKTsKICAgICAgICAgY291bnQgKz0gY29sOwogICAgICAgICBwQnVmID0gcHJudEJ1ZjsKICAgICB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0bS9zb2xvcy1hdHRybGlzdC5jIGIvZHJpdmVycy9hdG0vc29sb3MtYXR0cmxpc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmEyODA4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9hdG0vc29sb3MtYXR0cmxpc3QuYwpAQCAtMCwwICsxLDcwIEBACitTT0xPU19BVFRSX1JPKERyaXZlclZlcnNpb24pCitTT0xPU19BVFRSX1JPKEFQSVZlcnNpb24pCitTT0xPU19BVFRSX1JPKEZpcm13YXJlVmVyc2lvbikKKy8vIFNPTE9TX0FUVFJfUk8oRHNwVmVyc2lvbikKKy8vIFNPTE9TX0FUVFJfUk8oQ29tbW9uSGFuZHNoYWtlKQorU09MT1NfQVRUUl9STyhDb25uZWN0ZWQpCitTT0xPU19BVFRSX1JPKE9wZXJhdGlvbmFsTW9kZSkKK1NPTE9TX0FUVFJfUk8oU3RhdGUpCitTT0xPU19BVFRSX1JPKFdhdGNoZG9nKQorU09MT1NfQVRUUl9STyhPcGVyYXRpb25Qcm9ncmVzcykKK1NPTE9TX0FUVFJfUk8oTGFzdEZhaWxlZCkKK1NPTE9TX0FUVFJfUk8oVHhCaXRSYXRlKQorU09MT1NfQVRUUl9STyhSeEJpdFJhdGUpCisvLyBTT0xPU19BVFRSX1JPKERlbHRBQ1RBVFBkcykKKy8vIFNPTE9TX0FUVFJfUk8oRGVsdEFDVEFUUHVzKQorU09MT1NfQVRUUl9STyhUeEFUVE5EUikKK1NPTE9TX0FUVFJfUk8oUnhBVFRORFIpCitTT0xPU19BVFRSX1JPKEFubmV4VHlwZSkKK1NPTE9TX0FUVFJfUk8oR2VuZXJhbEZhaWx1cmUpCitTT0xPU19BVFRSX1JPKEludGVybGVhdmVEcERuKQorU09MT1NfQVRUUl9STyhJbnRlcmxlYXZlRHBVcCkKK1NPTE9TX0FUVFJfUk8oUlNDb3JyZWN0ZWRFcnJvcnNEbikKK1NPTE9TX0FUVFJfUk8oUlNVbkNvcnJlY3RlZEVycm9yc0RuKQorU09MT1NfQVRUUl9STyhSU0NvcnJlY3RlZEVycm9yc1VwKQorU09MT1NfQVRUUl9STyhSU1VuQ29ycmVjdGVkRXJyb3JzVXApCitTT0xPU19BVFRSX1JPKEludGVybGVhdmVSRG4pCitTT0xPU19BVFRSX1JPKEludGVybGVhdmVSVXApCitTT0xPU19BVFRSX1JPKFNob3d0aW1lU3RhcnQpCitTT0xPU19BVFRSX1JPKEFUVVJWZW5kb3IpCitTT0xPU19BVFRSX1JPKEFUVUNDb3VudHJ5KQorU09MT1NfQVRUUl9STyhBVFVSQU5TSVJldikKK1NPTE9TX0FUVFJfUk8oQVRVUkFOU0lTVEQpCitTT0xPU19BVFRSX1JPKEFUVUNBTlNJUmV2KQorU09MT1NfQVRUUl9STyhBVFVDQU5TSUlkKQorU09MT1NfQVRUUl9STyhBVFVDQU5TSVNURCkKK1NPTE9TX0FUVFJfUk8oRGF0YUJvb3N0KQorU09MT1NfQVRUUl9STyhMb2NhbElUVUNvdW50cnlDb2RlKQorU09MT1NfQVRUUl9STyhMb2NhbFNFRikKK1NPTE9TX0FUVFJfUk8oTG9jYWxFbmRMT1MpCitTT0xPU19BVFRSX1JPKExvY2FsU05STWFyZ2luKQorU09MT1NfQVRUUl9STyhMb2NhbExpbmVBdHRuKQorU09MT1NfQVRUUl9STyhSYXdBdHRuKQorU09MT1NfQVRUUl9STyhMb2NhbFR4UG93ZXIpCitTT0xPU19BVFRSX1JPKFJlbW90ZVR4UG93ZXIpCitTT0xPU19BVFRSX1JPKFJlbW90ZVNFRikKK1NPTE9TX0FUVFJfUk8oUmVtb3RlTE9TKQorU09MT1NfQVRUUl9STyhSZW1vdGVMaW5lQXR0bikKK1NPTE9TX0FUVFJfUk8oUmVtb3RlU05STWFyZ2luKQorU09MT1NfQVRUUl9STyhMaW5lVXBDb3VudCkKK1NPTE9TX0FUVFJfUk8oU1JBQ250KQorU09MT1NfQVRUUl9STyhTUkFDbnRVcCkKK1NPTE9TX0FUVFJfUk8oUHJvZmlsZVN0YXR1cykKK1NPTE9TX0FUVFJfUlcoQWN0aW9uKQorU09MT1NfQVRUUl9SVyhBY3RpdmF0ZUxpbmUpCitTT0xPU19BVFRSX1JPKExpbmVTdGF0dXMpCitTT0xPU19BVFRSX1JXKEhvc3RDb250cm9sKQorU09MT1NfQVRUUl9SVyhBdXRvU3RhcnQpCitTT0xPU19BVFRSX1JXKEZhaWxzYWZlKQorU09MT1NfQVRUUl9SVyhTaG93dGltZUxlZCkKK1NPTE9TX0FUVFJfUlcoUmV0cmFpbikKK1NPTE9TX0FUVFJfUlcoRGVmYXVsdHMpCitTT0xPU19BVFRSX1JXKExpbmVNb2RlKQorU09MT1NfQVRUUl9SVyhQcm9maWxlKQorU09MT1NfQVRUUl9SVyhEZXRlY3ROb2lzZSkKK1NPTE9TX0FUVFJfUk8oU3VwcG9ydGVkQW5uZXhlcykKK1NPTE9TX0FUVFJfUk8oU3RhdHVzKQorU09MT1NfQVRUUl9STyhUb3RhbFN0YXJ0KQorU09MT1NfQVRUUl9STyhSZWNlbnRTaG93dGltZVN0YXJ0KQorU09MT1NfQVRUUl9STyhUb3RhbFJ4QmxvY2tzKQorU09MT1NfQVRUUl9STyhUb3RhbFR4QmxvY2tzKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vc29sb3MtcGNpLmMgYi9kcml2ZXJzL2F0bS9zb2xvcy1wY2kuYwppbmRleCA4OWQ3YTZlLi5iZTIwNDMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0bS9zb2xvcy1wY2kuYworKysgYi9kcml2ZXJzL2F0bS9zb2xvcy1wY2kuYwpAQCAtOSw2ICs5LDcgQEAKICAqCiAgKiBBdXRob3JzOiBOYXRoYW4gV2lsbGlhbXMgPG5hdGhhbkB0cmF2ZXJzZS5jb20uYXU+CiAgKiAgICAgICAgICBEYXZpZCBXb29kaG91c2UgPGR3bXcyQGluZnJhZGVhZC5vcmc+CisgKiAgICAgICAgICBUcmVrZXIgQ2hlbiA8dHJla2VyQHhyaW8uY29tPgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCkBAIC0zNiw4ICszNywxMSBAQAogI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgva29iamVjdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zd2FiLmg+CiAKLSNkZWZpbmUgVkVSU0lPTiAiMC4wNCIKKyNkZWZpbmUgVkVSU0lPTiAiMC4wNyIKICNkZWZpbmUgUFRBRyAic29sb3MtcGNpIgogCiAjZGVmaW5lIENPTkZJR19SQU1fU0laRQkxMjgKQEAgLTQ1LDE2ICs0OSwzMSBAQAogI2RlZmluZSBJUlFfRU5fQUREUgkweDc4CiAjZGVmaW5lIEZQR0FfVkVSCTB4NzQKICNkZWZpbmUgSVJRX0NMRUFSCTB4NzAKLSNkZWZpbmUgQlVHX0ZMQUcJMHg2QworI2RlZmluZSBXUklURV9GTEFTSAkweDZDCisjZGVmaW5lIFBPUlRTCQkweDY4CisjZGVmaW5lIEZMQVNIX0JMT0NLCTB4NjQKKyNkZWZpbmUgRkxBU0hfQlVTWQkweDYwCisjZGVmaW5lIEZQR0FfTU9ERQkweDVDCisjZGVmaW5lIEZMQVNIX01PREUJMHg1OAorI2RlZmluZSBUWF9ETUFfQUREUihwb3J0KQkoMHg0MCArICg0ICogKHBvcnQpKSkKKyNkZWZpbmUgUlhfRE1BX0FERFIocG9ydCkJKDB4MzAgKyAoNCAqIChwb3J0KSkpCiAKICNkZWZpbmUgREFUQV9SQU1fU0laRQkzMjc2OAogI2RlZmluZSBCVUZfU0laRQk0MDk2CisjZGVmaW5lIEZQR0FfUEFHRQk1MjggLyogRlBHQSBmbGFzaCBwYWdlIHNpemUqLworI2RlZmluZSBTT0xPU19QQUdFCTUxMiAvKiBTb2xvcyBmbGFzaCBwYWdlIHNpemUqLworI2RlZmluZSBGUEdBX0JMT0NLCShGUEdBX1BBR0UgKiA4KSAvKiBGUEdBIGZsYXNoIGJsb2NrIHNpemUqLworI2RlZmluZSBTT0xPU19CTE9DSwkoU09MT1NfUEFHRSAqIDgpIC8qIFNvbG9zIGZsYXNoIGJsb2NrIHNpemUqLwogCiAjZGVmaW5lIFJYX0JVRihjYXJkLCBucikgKChjYXJkLT5idWZmZXJzKSArIChucikqQlVGX1NJWkUqMikKICNkZWZpbmUgVFhfQlVGKGNhcmQsIG5yKSAoKGNhcmQtPmJ1ZmZlcnMpICsgKG5yKSpCVUZfU0laRSoyICsgQlVGX1NJWkUpCiAKLXN0YXRpYyBpbnQgZGVidWcgPSAwOworI2RlZmluZSBSWF9ETUFfU0laRQkyMDQ4CisKK3N0YXRpYyBpbnQgcmVzZXQgPSAwOwogc3RhdGljIGludCBhdG1kZWJ1ZyA9IDA7CitzdGF0aWMgaW50IGZpcm13YXJlX3VwZ3JhZGUgPSAwOworc3RhdGljIGludCBmcGdhX3VwZ3JhZGUgPSAwOwogCiBzdHJ1Y3QgcGt0X2hkciB7CiAJX19sZTE2IHNpemU7CkBAIC02MywyMyArODIsNDggQEAKIAlfX2xlMTYgdHlwZTsKIH07CiAKK3N0cnVjdCBzb2xvc19za2JfY2IgeworCXN0cnVjdCBhdG1fdmNjICp2Y2M7CisJdWludDMyX3QgZG1hX2FkZHI7Cit9OworCisKKyNkZWZpbmUgU0tCX0NCKHNrYikJCSgoc3RydWN0IHNvbG9zX3NrYl9jYiAqKXNrYi0+Y2IpCisKICNkZWZpbmUgUEtUX0RBVEEJMAogI2RlZmluZSBQS1RfQ09NTUFORAkxCiAjZGVmaW5lIFBLVF9QT1BFTgkzCiAjZGVmaW5lIFBLVF9QQ0xPU0UJNAorI2RlZmluZSBQS1RfU1RBVFVTCTUKIAogc3RydWN0IHNvbG9zX2NhcmQgewogCXZvaWQgX19pb21lbSAqY29uZmlnX3JlZ3M7CiAJdm9pZCBfX2lvbWVtICpidWZmZXJzOwogCWludCBucl9wb3J0czsKKwlpbnQgdHhfbWFzazsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2OwogCXN0cnVjdCBhdG1fZGV2ICphdG1kZXZbNF07CiAJc3RydWN0IHRhc2tsZXRfc3RydWN0IHRsZXQ7CiAJc3BpbmxvY2tfdCB0eF9sb2NrOwogCXNwaW5sb2NrX3QgdHhfcXVldWVfbG9jazsKIAlzcGlubG9ja190IGNsaV9xdWV1ZV9sb2NrOworCXNwaW5sb2NrX3QgcGFyYW1fcXVldWVfbG9jazsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHBhcmFtX3F1ZXVlOwogCXN0cnVjdCBza19idWZmX2hlYWQgdHhfcXVldWVbNF07CiAJc3RydWN0IHNrX2J1ZmZfaGVhZCBjbGlfcXVldWVbNF07CisJc3RydWN0IHNrX2J1ZmYgKnR4X3NrYls0XTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqcnhfc2tiWzRdOworCXdhaXRfcXVldWVfaGVhZF90IHBhcmFtX3dxOworCXdhaXRfcXVldWVfaGVhZF90IGZ3X3dxOworCWludCB1c2luZ19kbWE7Cit9OworCisKK3N0cnVjdCBzb2xvc19wYXJhbSB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXBpZF90IHBpZDsKKwlpbnQgcG9ydDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqcmVzcG9uc2U7CiB9OwogCiAjZGVmaW5lIFNPTE9TX0NIQU4oYXRtZGV2KSAoKGludCkodW5zaWduZWQgbG9uZykoYXRtZGV2KS0+cGh5X2RhdGEpCkBAIC04OCwxOSArMTMyLDIyIEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIlNvbG9zIFBDSSBkcml2ZXIiKTsKIE1PRFVMRV9WRVJTSU9OKFZFUlNJT04pOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkVuYWJsZSBMb29wYmFjayIpOworTU9EVUxFX1BBUk1fREVTQyhyZXNldCwgIlJlc2V0IFNvbG9zIGNoaXBzIG9uIHN0YXJ0dXAiKTsKIE1PRFVMRV9QQVJNX0RFU0MoYXRtZGVidWcsICJQcmludCBBVE0gZGF0YSIpOwotbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA0NDQpOwotbW9kdWxlX3BhcmFtKGF0bWRlYnVnLCBpbnQsIDA0NDQpOwotCi1zdGF0aWMgaW50IG9wZW5zOworTU9EVUxFX1BBUk1fREVTQyhmaXJtd2FyZV91cGdyYWRlLCAiSW5pdGlhdGUgU29sb3MgZmlybXdhcmUgdXBncmFkZSIpOworTU9EVUxFX1BBUk1fREVTQyhmcGdhX3VwZ3JhZGUsICJJbml0aWF0ZSBGUEdBIHVwZ3JhZGUiKTsKK21vZHVsZV9wYXJhbShyZXNldCwgaW50LCAwNDQ0KTsKK21vZHVsZV9wYXJhbShhdG1kZWJ1ZywgaW50LCAwNjQ0KTsKK21vZHVsZV9wYXJhbShmaXJtd2FyZV91cGdyYWRlLCBpbnQsIDA0NDQpOworbW9kdWxlX3BhcmFtKGZwZ2FfdXBncmFkZSwgaW50LCAwNDQ0KTsKIAogc3RhdGljIHZvaWQgZnBnYV9xdWV1ZShzdHJ1Y3Qgc29sb3NfY2FyZCAqY2FyZCwgaW50IHBvcnQsIHN0cnVjdCBza19idWZmICpza2IsCiAJCSAgICAgICBzdHJ1Y3QgYXRtX3ZjYyAqdmNjKTsKLXN0YXRpYyBpbnQgZnBnYV90eChzdHJ1Y3Qgc29sb3NfY2FyZCAqKTsKK3N0YXRpYyB1aW50MzJfdCBmcGdhX3R4KHN0cnVjdCBzb2xvc19jYXJkICopOwogc3RhdGljIGlycXJldHVybl90IHNvbG9zX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwogc3RhdGljIHN0cnVjdCBhdG1fdmNjKiBmaW5kX3ZjYyhzdHJ1Y3QgYXRtX2RldiAqZGV2LCBzaG9ydCB2cGksIGludCB2Y2kpOwogc3RhdGljIGludCBsaXN0X3ZjY3MoaW50IHZjaSk7CitzdGF0aWMgdm9pZCByZWxlYXNlX3ZjY3Moc3RydWN0IGF0bV9kZXYgKmRldik7CiBzdGF0aWMgaW50IGF0bV9pbml0KHN0cnVjdCBzb2xvc19jYXJkICopOwogc3RhdGljIHZvaWQgYXRtX3JlbW92ZShzdHJ1Y3Qgc29sb3NfY2FyZCAqKTsKIHN0YXRpYyBpbnQgc2VuZF9jb21tYW5kKHN0cnVjdCBzb2xvc19jYXJkICpjYXJkLCBpbnQgZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBzaXplKTsKQEAgLTExNSw2ICsxNjIsMjY0IEBACiAgICAgICAgICAgICAgICAgZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIH0KIAorc3RhdGljIHNzaXplX3Qgc29sb3NfcGFyYW1fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCWNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgYXRtX2RldiAqYXRtZGV2ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IGF0bV9kZXYsIGNsYXNzX2Rldik7CisJc3RydWN0IHNvbG9zX2NhcmQgKmNhcmQgPSBhdG1kZXYtPmRldl9kYXRhOworCXN0cnVjdCBzb2xvc19wYXJhbSBwcm07CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgcGt0X2hkciAqaGVhZGVyOworCWludCBidWZsZW47CisKKwlidWZsZW4gPSBzdHJsZW4oYXR0ci0+YXR0ci5uYW1lKSArIDEwOworCisJc2tiID0gYWxsb2Nfc2tiKHNpemVvZigqaGVhZGVyKSArIGJ1ZmxlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFza2IpIHsKKwkJZGV2X3dhcm4oJmNhcmQtPmRldi0+ZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIHNrX2J1ZmYgaW4gc29sb3NfcGFyYW1fc2hvdygpXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJaGVhZGVyID0gKHZvaWQgKilza2JfcHV0KHNrYiwgc2l6ZW9mKCpoZWFkZXIpKTsKKworCWJ1ZmxlbiA9IHNucHJpbnRmKCh2b2lkICopJmhlYWRlclsxXSwgYnVmbGVuIC0gMSwKKwkJCSAgIkwlMDVkXG4lc1xuIiwgY3VycmVudC0+cGlkLCBhdHRyLT5hdHRyLm5hbWUpOworCXNrYl9wdXQoc2tiLCBidWZsZW4pOworCisJaGVhZGVyLT5zaXplID0gY3B1X3RvX2xlMTYoYnVmbGVuKTsKKwloZWFkZXItPnZwaSA9IGNwdV90b19sZTE2KDApOworCWhlYWRlci0+dmNpID0gY3B1X3RvX2xlMTYoMCk7CisJaGVhZGVyLT50eXBlID0gY3B1X3RvX2xlMTYoUEtUX0NPTU1BTkQpOworCisJcHJtLnBpZCA9IGN1cnJlbnQtPnBpZDsKKwlwcm0ucmVzcG9uc2UgPSBOVUxMOworCXBybS5wb3J0ID0gU09MT1NfQ0hBTihhdG1kZXYpOworCisJc3Bpbl9sb2NrX2lycSgmY2FyZC0+cGFyYW1fcXVldWVfbG9jayk7CisJbGlzdF9hZGQoJnBybS5saXN0LCAmY2FyZC0+cGFyYW1fcXVldWUpOworCXNwaW5fdW5sb2NrX2lycSgmY2FyZC0+cGFyYW1fcXVldWVfbG9jayk7CisKKwlmcGdhX3F1ZXVlKGNhcmQsIHBybS5wb3J0LCBza2IsIE5VTEwpOworCisJd2FpdF9ldmVudF90aW1lb3V0KGNhcmQtPnBhcmFtX3dxLCBwcm0ucmVzcG9uc2UsIDUgKiBIWik7CisKKwlzcGluX2xvY2tfaXJxKCZjYXJkLT5wYXJhbV9xdWV1ZV9sb2NrKTsKKwlsaXN0X2RlbCgmcHJtLmxpc3QpOworCXNwaW5fdW5sb2NrX2lycSgmY2FyZC0+cGFyYW1fcXVldWVfbG9jayk7CisKKwlpZiAoIXBybS5yZXNwb25zZSkKKwkJcmV0dXJuIC1FSU87CisKKwlidWZsZW4gPSBwcm0ucmVzcG9uc2UtPmxlbjsKKwltZW1jcHkoYnVmLCBwcm0ucmVzcG9uc2UtPmRhdGEsIGJ1Zmxlbik7CisJa2ZyZWVfc2tiKHBybS5yZXNwb25zZSk7CisKKwlyZXR1cm4gYnVmbGVuOworfQorCitzdGF0aWMgc3NpemVfdCBzb2xvc19wYXJhbV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCSBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgYXRtX2RldiAqYXRtZGV2ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IGF0bV9kZXYsIGNsYXNzX2Rldik7CisJc3RydWN0IHNvbG9zX2NhcmQgKmNhcmQgPSBhdG1kZXYtPmRldl9kYXRhOworCXN0cnVjdCBzb2xvc19wYXJhbSBwcm07CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgcGt0X2hkciAqaGVhZGVyOworCWludCBidWZsZW47CisJc3NpemVfdCByZXQ7CisKKwlidWZsZW4gPSBzdHJsZW4oYXR0ci0+YXR0ci5uYW1lKSArIDExICsgY291bnQ7CisKKwlza2IgPSBhbGxvY19za2Ioc2l6ZW9mKCpoZWFkZXIpICsgYnVmbGVuLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNrYikgeworCQlkZXZfd2FybigmY2FyZC0+ZGV2LT5kZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgc2tfYnVmZiBpbiBzb2xvc19wYXJhbV9zdG9yZSgpXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJaGVhZGVyID0gKHZvaWQgKilza2JfcHV0KHNrYiwgc2l6ZW9mKCpoZWFkZXIpKTsKKworCWJ1ZmxlbiA9IHNucHJpbnRmKCh2b2lkICopJmhlYWRlclsxXSwgYnVmbGVuIC0gMSwKKwkJCSAgIkwlMDVkXG4lc1xuJXNcbiIsIGN1cnJlbnQtPnBpZCwgYXR0ci0+YXR0ci5uYW1lLCBidWYpOworCisJc2tiX3B1dChza2IsIGJ1Zmxlbik7CisJaGVhZGVyLT5zaXplID0gY3B1X3RvX2xlMTYoYnVmbGVuKTsKKwloZWFkZXItPnZwaSA9IGNwdV90b19sZTE2KDApOworCWhlYWRlci0+dmNpID0gY3B1X3RvX2xlMTYoMCk7CisJaGVhZGVyLT50eXBlID0gY3B1X3RvX2xlMTYoUEtUX0NPTU1BTkQpOworCisJcHJtLnBpZCA9IGN1cnJlbnQtPnBpZDsKKwlwcm0ucmVzcG9uc2UgPSBOVUxMOworCXBybS5wb3J0ID0gU09MT1NfQ0hBTihhdG1kZXYpOworCisJc3Bpbl9sb2NrX2lycSgmY2FyZC0+cGFyYW1fcXVldWVfbG9jayk7CisJbGlzdF9hZGQoJnBybS5saXN0LCAmY2FyZC0+cGFyYW1fcXVldWUpOworCXNwaW5fdW5sb2NrX2lycSgmY2FyZC0+cGFyYW1fcXVldWVfbG9jayk7CisKKwlmcGdhX3F1ZXVlKGNhcmQsIHBybS5wb3J0LCBza2IsIE5VTEwpOworCisJd2FpdF9ldmVudF90aW1lb3V0KGNhcmQtPnBhcmFtX3dxLCBwcm0ucmVzcG9uc2UsIDUgKiBIWik7CisKKwlzcGluX2xvY2tfaXJxKCZjYXJkLT5wYXJhbV9xdWV1ZV9sb2NrKTsKKwlsaXN0X2RlbCgmcHJtLmxpc3QpOworCXNwaW5fdW5sb2NrX2lycSgmY2FyZC0+cGFyYW1fcXVldWVfbG9jayk7CisKKwlza2IgPSBwcm0ucmVzcG9uc2U7CisKKwlpZiAoIXNrYikKKwkJcmV0dXJuIC1FSU87CisKKwlidWZsZW4gPSBza2ItPmxlbjsKKworCS8qIFNvbWV0aW1lcyBpdCBoYXMgYSBuZXdsaW5lLCBzb21ldGltZXMgaXQgZG9lc24ndC4gKi8KKwlpZiAoc2tiLT5kYXRhW2J1ZmxlbiAtIDFdID09ICdcbicpCisJCWJ1Zmxlbi0tOworCisJaWYgKGJ1ZmxlbiA9PSAyICYmICFzdHJuY21wKHNrYi0+ZGF0YSwgIk9LIiwgMikpCisJCXJldCA9IGNvdW50OworCWVsc2UgaWYgKGJ1ZmxlbiA9PSA1ICYmICFzdHJuY21wKHNrYi0+ZGF0YSwgIkVSUk9SIiwgNSkpCisJCXJldCA9IC1FSU87CisJZWxzZSB7CisJCS8qIFdlIGtub3cgd2UgaGF2ZSBlbm91Z2ggc3BhY2UgYWxsb2NhdGVkIGZvciB0aGlzOyB3ZSBhbGxvY2F0ZWQgCisJCSAgIGl0IG91cnNlbHZlcyAqLworCQlza2ItPmRhdGFbYnVmbGVuXSA9IDA7CisJCisJCWRldl93YXJuKCZjYXJkLT5kZXYtPmRldiwgIlVuZXhwZWN0ZWQgcGFyYW1ldGVyIHJlc3BvbnNlOiAnJXMnXG4iLAorCQkJIHNrYi0+ZGF0YSk7CisJCXJldCA9IC1FSU87CisJfQorCWtmcmVlX3NrYihza2IpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNoYXIgKm5leHRfc3RyaW5nKHN0cnVjdCBza19idWZmICpza2IpCit7CisJaW50IGkgPSAwOworCWNoYXIgKnRoaXMgPSBza2ItPmRhdGE7CisJCisJZm9yIChpID0gMDsgaSA8IHNrYi0+bGVuOyBpKyspIHsKKwkJaWYgKHRoaXNbaV0gPT0gJ1xuJykgeworCQkJdGhpc1tpXSA9IDA7CisJCQlza2JfcHVsbChza2IsIGkgKyAxKTsKKwkJCXJldHVybiB0aGlzOworCQl9CisJCWlmICghaXNwcmludCh0aGlzW2ldKSkKKwkJCXJldHVybiBOVUxMOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIFN0YXR1cyBwYWNrZXQgaGFzIGZpZWxkcyBzZXBhcmF0ZWQgYnkgXG4sIHN0YXJ0aW5nIHdpdGggYSB2ZXJzaW9uIG51bWJlcgorICogZm9yIHRoZSBpbmZvcm1hdGlvbiB0aGVyZWluLiBGaWVsZHMgYXJlLi4uLgorICoKKyAqICAgICBwYWNrZXQgdmVyc2lvbgorICogICAgIFJ4Qml0UmF0ZQkodmVyc2lvbiA+PSAxKQorICogICAgIFR4Qml0UmF0ZQkodmVyc2lvbiA+PSAxKQorICogICAgIFN0YXRlCQkodmVyc2lvbiA+PSAxKQorICogICAgIExvY2FsU05STWFyZ2luCSh2ZXJzaW9uID49IDEpCisgKiAgICAgTG9jYWxMaW5lQXR0bgkodmVyc2lvbiA+PSAxKQorICovICAgICAgIAorc3RhdGljIGludCBwcm9jZXNzX3N0YXR1cyhzdHJ1Y3Qgc29sb3NfY2FyZCAqY2FyZCwgaW50IHBvcnQsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJY2hhciAqc3RyLCAqZW5kLCAqc3RhdGVfc3RyLCAqc25yLCAqYXR0bjsKKwlpbnQgdmVyLCByYXRlX3VwLCByYXRlX2Rvd247CisKKwlpZiAoIWNhcmQtPmF0bWRldltwb3J0XSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlzdHIgPSBuZXh0X3N0cmluZyhza2IpOworCWlmICghc3RyKQorCQlyZXR1cm4gLUVJTzsKKworCXZlciA9IHNpbXBsZV9zdHJ0b2woc3RyLCBOVUxMLCAxMCk7CisJaWYgKHZlciA8IDEpIHsKKwkJZGV2X3dhcm4oJmNhcmQtPmRldi0+ZGV2LCAiVW5leHBlY3RlZCBzdGF0dXMgaW50ZXJydXB0IHZlcnNpb24gJWRcbiIsCisJCQkgdmVyKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJc3RyID0gbmV4dF9zdHJpbmcoc2tiKTsKKwlpZiAoIXN0cikKKwkJcmV0dXJuIC1FSU87CisJaWYgKCFzdHJjbXAoc3RyLCAiRVJST1IiKSkgeworCQlkZXZfZGJnKCZjYXJkLT5kZXYtPmRldiwgIlN0YXR1cyBwYWNrZXQgaW5kaWNhdGVkIFNvbG9zIGVycm9yIG9uIHBvcnQgJWQgKHN0YXJ0aW5nIHVwPylcbiIsCisJCQkgcG9ydCk7CisJCXJldHVybiAwOworCX0KKworCXJhdGVfZG93biA9IHNpbXBsZV9zdHJ0b2woc3RyLCAmZW5kLCAxMCk7CisJaWYgKCplbmQpCisJCXJldHVybiAtRUlPOworCisJc3RyID0gbmV4dF9zdHJpbmcoc2tiKTsKKwlpZiAoIXN0cikKKwkJcmV0dXJuIC1FSU87CisJcmF0ZV91cCA9IHNpbXBsZV9zdHJ0b2woc3RyLCAmZW5kLCAxMCk7CisJaWYgKCplbmQpCisJCXJldHVybiAtRUlPOworCisJc3RhdGVfc3RyID0gbmV4dF9zdHJpbmcoc2tiKTsKKwlpZiAoIXN0YXRlX3N0cikKKwkJcmV0dXJuIC1FSU87CisKKwkvKiBBbnl0aGluZyBidXQgJ1Nob3d0aW1lJyBpcyBkb3duICovCisJaWYgKHN0cmNtcChzdGF0ZV9zdHIsICJTaG93dGltZSIpKSB7CisJCWNhcmQtPmF0bWRldltwb3J0XS0+c2lnbmFsID0gQVRNX1BIWV9TSUdfTE9TVDsKKwkJcmVsZWFzZV92Y2NzKGNhcmQtPmF0bWRldltwb3J0XSk7CisJCWRldl9pbmZvKCZjYXJkLT5kZXYtPmRldiwgIlBvcnQgJWQ6ICVzXG4iLCBwb3J0LCBzdGF0ZV9zdHIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlzbnIgPSBuZXh0X3N0cmluZyhza2IpOworCWlmICghc3RyKQorCQlyZXR1cm4gLUVJTzsKKwlhdHRuID0gbmV4dF9zdHJpbmcoc2tiKTsKKwlpZiAoIWF0dG4pCisJCXJldHVybiAtRUlPOworCisJZGV2X2luZm8oJmNhcmQtPmRldi0+ZGV2LCAiUG9ydCAlZDogJXMgQCVkLyVkIGtiL3MlcyVzJXMlc1xuIiwKKwkJIHBvcnQsIHN0YXRlX3N0ciwgcmF0ZV9kb3duLzEwMDAsIHJhdGVfdXAvMTAwMCwKKwkJIHNuclswXT8iLCBTTlIgIjoiIiwgc25yLCBhdHRuWzBdPyIsIEF0dG4gIjoiIiwgYXR0bik7CisJCisJY2FyZC0+YXRtZGV2W3BvcnRdLT5saW5rX3JhdGUgPSByYXRlX2Rvd24gLyA0MjQ7CisJY2FyZC0+YXRtZGV2W3BvcnRdLT5zaWduYWwgPSBBVE1fUEhZX1NJR19GT1VORDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHByb2Nlc3NfY29tbWFuZChzdHJ1Y3Qgc29sb3NfY2FyZCAqY2FyZCwgaW50IHBvcnQsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IHNvbG9zX3BhcmFtICpwcm07CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgY21kcGlkOworCWludCBmb3VuZCA9IDA7CisKKwlpZiAoc2tiLT5sZW4gPCA3KQorCQlyZXR1cm4gMDsKKworCWlmIChza2ItPmRhdGFbMF0gIT0gJ0wnICAgIHx8ICFpc2RpZ2l0KHNrYi0+ZGF0YVsxXSkgfHwKKwkgICAgIWlzZGlnaXQoc2tiLT5kYXRhWzJdKSB8fCAhaXNkaWdpdChza2ItPmRhdGFbM10pIHx8CisJICAgICFpc2RpZ2l0KHNrYi0+ZGF0YVs0XSkgfHwgIWlzZGlnaXQoc2tiLT5kYXRhWzVdKSB8fAorCSAgICBza2ItPmRhdGFbNl0gIT0gJ1xuJykKKwkJcmV0dXJuIDA7CisKKwljbWRwaWQgPSBzaW1wbGVfc3RydG9sKCZza2ItPmRhdGFbMV0sIE5VTEwsIDEwKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5wYXJhbV9xdWV1ZV9sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwcm0sICZjYXJkLT5wYXJhbV9xdWV1ZSwgbGlzdCkgeworCQlpZiAocHJtLT5wb3J0ID09IHBvcnQgJiYgcHJtLT5waWQgPT0gY21kcGlkKSB7CisJCQlwcm0tPnJlc3BvbnNlID0gc2tiOworCQkJc2tiX3B1bGwoc2tiLCA3KTsKKwkJCXdha2VfdXAoJmNhcmQtPnBhcmFtX3dxKTsKKwkJCWZvdW5kID0gMTsKKwkJCWJyZWFrOworCQl9CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPnBhcmFtX3F1ZXVlX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gZm91bmQ7Cit9CisKIHN0YXRpYyBzc2l6ZV90IGNvbnNvbGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJICAgIGNoYXIgKmJ1ZikKIHsKQEAgLTE0MCw4ICs0NDUsNiBAQAogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IHBrdF9oZHIgKmhlYWRlcjsKIAotLy8JZGV2X2RiZygmY2FyZC0+ZGV2LT5kZXYsICJzaXplOiAlZFxuIiwgc2l6ZSk7Ci0KIAlpZiAoc2l6ZSA+IChCVUZfU0laRSAtIHNpemVvZigqaGVhZGVyKSkpIHsKIAkJZGV2X2RiZygmY2FyZC0+ZGV2LT5kZXYsICJDb21tYW5kIGlzIHRvbyBiaWcuICBEcm9wcGluZyByZXF1ZXN0XG4iKTsKIAkJcmV0dXJuIDA7CkBAIC0xODAsODIgKzQ4MywxODEgQEAKIAogc3RhdGljIERFVklDRV9BVFRSKGNvbnNvbGUsIDA2NDQsIGNvbnNvbGVfc2hvdywgY29uc29sZV9zdG9yZSk7CiAKKworI2RlZmluZSBTT0xPU19BVFRSX1JPKHgpIHN0YXRpYyBERVZJQ0VfQVRUUih4LCAwNDQ0LCBzb2xvc19wYXJhbV9zaG93LCBOVUxMKTsKKyNkZWZpbmUgU09MT1NfQVRUUl9SVyh4KSBzdGF0aWMgREVWSUNFX0FUVFIoeCwgMDY0NCwgc29sb3NfcGFyYW1fc2hvdywgc29sb3NfcGFyYW1fc3RvcmUpOworCisjaW5jbHVkZSAic29sb3MtYXR0cmxpc3QuYyIKKworI3VuZGVmIFNPTE9TX0FUVFJfUk8KKyN1bmRlZiBTT0xPU19BVFRSX1JXCisKKyNkZWZpbmUgU09MT1NfQVRUUl9STyh4KSAmZGV2X2F0dHJfIyN4LmF0dHIsCisjZGVmaW5lIFNPTE9TX0FUVFJfUlcoeCkgJmRldl9hdHRyXyMjeC5hdHRyLAorCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqc29sb3NfYXR0cnNbXSA9IHsKKyNpbmNsdWRlICJzb2xvcy1hdHRybGlzdC5jIgorCU5VTEwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHNvbG9zX2F0dHJfZ3JvdXAgPSB7CisJLmF0dHJzID0gc29sb3NfYXR0cnMsCisJLm5hbWUgPSAicGFyYW1ldGVycyIsCit9OworCitzdGF0aWMgaW50IGZsYXNoX3VwZ3JhZGUoc3RydWN0IHNvbG9zX2NhcmQgKmNhcmQsIGludCBjaGlwKQoreworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CisJY29uc3QgY2hhciAqZndfbmFtZTsKKwl1aW50MzJfdCBkYXRhMzIgPSAwOworCWludCBibG9ja3NpemUgPSAwOworCWludCBudW1ibG9ja3MgPSAwOworCWludCBvZmZzZXQ7CisKKwlpZiAoY2hpcCA9PSAwKSB7CisJCWZ3X25hbWUgPSAic29sb3MtRlBHQS5iaW4iOworCQlibG9ja3NpemUgPSBGUEdBX0JMT0NLOworCX0gZWxzZSB7CisJCWZ3X25hbWUgPSAic29sb3MtRmlybXdhcmUuYmluIjsKKwkJYmxvY2tzaXplID0gU09MT1NfQkxPQ0s7CisJfQorCisJaWYgKHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBmd19uYW1lLCAmY2FyZC0+ZGV2LT5kZXYpKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCWRldl9pbmZvKCZjYXJkLT5kZXYtPmRldiwgIkZsYXNoIHVwZ3JhZGUgc3RhcnRpbmdcbiIpOworCisJbnVtYmxvY2tzID0gZnctPnNpemUgLyBibG9ja3NpemU7CisJZGV2X2luZm8oJmNhcmQtPmRldi0+ZGV2LCAiRmlybXdhcmUgc2l6ZTogJXpkXG4iLCBmdy0+c2l6ZSk7CisJZGV2X2luZm8oJmNhcmQtPmRldi0+ZGV2LCAiTnVtYmVyIG9mIGJsb2NrczogJWRcbiIsIG51bWJsb2Nrcyk7CisJCisJZGV2X2luZm8oJmNhcmQtPmRldi0+ZGV2LCAiQ2hhbmdpbmcgRlBHQSB0byBVcGRhdGUgbW9kZVxuIik7CisJaW93cml0ZTMyKDEsIGNhcmQtPmNvbmZpZ19yZWdzICsgRlBHQV9NT0RFKTsKKwlkYXRhMzIgPSBpb3JlYWQzMihjYXJkLT5jb25maWdfcmVncyArIEZQR0FfTU9ERSk7IAorCisJLyogU2V0IG1vZGUgdG8gQ2hpcCBFcmFzZSAqLworCWRldl9pbmZvKCZjYXJkLT5kZXYtPmRldiwgIlNldCBGUEdBIEZsYXNoIG1vZGUgdG8gJXMgQ2hpcCBFcmFzZVxuIiwKKwkJIGNoaXA/IlNvbG9zIjoiRlBHQSIpOworCWlvd3JpdGUzMigoY2hpcCAqIDIpLCBjYXJkLT5jb25maWdfcmVncyArIEZMQVNIX01PREUpOworCisKKwlpb3dyaXRlMzIoMSwgY2FyZC0+Y29uZmlnX3JlZ3MgKyBXUklURV9GTEFTSCk7CisJd2FpdF9ldmVudChjYXJkLT5md193cSwgIWlvcmVhZDMyKGNhcmQtPmNvbmZpZ19yZWdzICsgRkxBU0hfQlVTWSkpOworCisJZm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgPCBmdy0+c2l6ZTsgb2Zmc2V0ICs9IGJsb2Nrc2l6ZSkgeworCQlpbnQgaTsKKworCQkvKiBDbGVhciB3cml0ZSBmbGFnICovCisJCWlvd3JpdGUzMigwLCBjYXJkLT5jb25maWdfcmVncyArIFdSSVRFX0ZMQVNIKTsKKworCQkvKiBTZXQgbW9kZSB0byBCbG9jayBXcml0ZSAqLworCQkvKiBkZXZfaW5mbygmY2FyZC0+ZGV2LT5kZXYsICJTZXQgRlBHQSBGbGFzaCBtb2RlIHRvIEJsb2NrIFdyaXRlXG4iKTsgKi8KKwkJaW93cml0ZTMyKCgoY2hpcCAqIDIpICsgMSksIGNhcmQtPmNvbmZpZ19yZWdzICsgRkxBU0hfTU9ERSk7CisKKwkJLyogQ29weSBibG9jayB0byBidWZmZXIsIHN3YXBwaW5nIGVhY2ggMTYgYml0cyAqLworCQlmb3IoaSA9IDA7IGkgPCBibG9ja3NpemU7IGkgKz0gNCkgeworCQkJdWludDMyX3Qgd29yZCA9IHN3YWhiMzJwKCh1aW50MzJfdCAqKShmdy0+ZGF0YSArIG9mZnNldCArIGkpKTsKKwkJCWlvd3JpdGUzMih3b3JkLCBSWF9CVUYoY2FyZCwgMykgKyBpKTsKKwkJfQorCisJCS8qIFNwZWNpZnkgYmxvY2sgbnVtYmVyIGFuZCB0aGVuIHRyaWdnZXIgZmxhc2ggd3JpdGUgKi8KKwkJaW93cml0ZTMyKG9mZnNldCAvIGJsb2Nrc2l6ZSwgY2FyZC0+Y29uZmlnX3JlZ3MgKyBGTEFTSF9CTE9DSyk7CisJCWlvd3JpdGUzMigxLCBjYXJkLT5jb25maWdfcmVncyArIFdSSVRFX0ZMQVNIKTsKKwkJd2FpdF9ldmVudChjYXJkLT5md193cSwgIWlvcmVhZDMyKGNhcmQtPmNvbmZpZ19yZWdzICsgRkxBU0hfQlVTWSkpOworCX0KKworCXJlbGVhc2VfZmlybXdhcmUoZncpOworCWlvd3JpdGUzMigwLCBjYXJkLT5jb25maWdfcmVncyArIFdSSVRFX0ZMQVNIKTsKKwlpb3dyaXRlMzIoMCwgY2FyZC0+Y29uZmlnX3JlZ3MgKyBGUEdBX01PREUpOworCWlvd3JpdGUzMigwLCBjYXJkLT5jb25maWdfcmVncyArIEZMQVNIX01PREUpOworCWRldl9pbmZvKCZjYXJkLT5kZXYtPmRldiwgIlJldHVybmluZyBGUEdBIHRvIERhdGEgbW9kZVxuIik7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpcnFyZXR1cm5fdCBzb2xvc19pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewogCXN0cnVjdCBzb2xvc19jYXJkICpjYXJkID0gZGV2X2lkOwogCWludCBoYW5kbGVkID0gMTsKIAotCS8vQUNLIElSUQogCWlvd3JpdGUzMigwLCBjYXJkLT5jb25maWdfcmVncyArIElSUV9DTEVBUik7Ci0JLy9EaXNhYmxlIElSUXMgZnJvbSBGUEdBCi0JaW93cml0ZTMyKDAsIGNhcmQtPmNvbmZpZ19yZWdzICsgSVJRX0VOX0FERFIpOwogCi0JLyogSWYgd2Ugb25seSBkbyBpdCB3aGVuIHRoZSBkZXZpY2UgaXMgb3Blbiwgd2UgbG9zZSBjb25zb2xlCi0JICAgbWVzc2FnZXMgKi8KLQlpZiAoMSB8fCBvcGVucykKKwkvKiBJZiB3ZSdyZSB1cCBhbmQgcnVubmluZywganVzdCBraWNrIHRoZSB0YXNrbGV0IHRvIHByb2Nlc3MgVFgvUlggKi8KKwlpZiAoY2FyZC0+YXRtZGV2WzBdKQogCQl0YXNrbGV0X3NjaGVkdWxlKCZjYXJkLT50bGV0KTsKKwllbHNlCisJCXdha2VfdXAoJmNhcmQtPmZ3X3dxKTsKIAotCS8vRW5hYmxlIElSUXMgZnJvbSBGUEdBCi0JaW93cml0ZTMyKDEsIGNhcmQtPmNvbmZpZ19yZWdzICsgSVJRX0VOX0FERFIpOwogCXJldHVybiBJUlFfUkVUVkFMKGhhbmRsZWQpOwogfQogCiB2b2lkIHNvbG9zX2JoKHVuc2lnbmVkIGxvbmcgY2FyZF9hcmcpCiB7CiAJc3RydWN0IHNvbG9zX2NhcmQgKmNhcmQgPSAodm9pZCAqKWNhcmRfYXJnOwotCWludCBwb3J0OwogCXVpbnQzMl90IGNhcmRfZmxhZ3M7Ci0JdWludDMyX3QgdHhfbWFzazsKIAl1aW50MzJfdCByeF9kb25lID0gMDsKKwlpbnQgcG9ydDsKIAotCWNhcmRfZmxhZ3MgPSBpb3JlYWQzMihjYXJkLT5jb25maWdfcmVncyArIEZMQUdTX0FERFIpOwotCi0JLyogVGhlIFRYIGJpdHMgYXJlIHNldCBpZiB0aGUgY2hhbm5lbCBpcyBidXN5OyBjbGVhciBpZiBub3QuIFdlIHdhbnQgdG8KLQkgICBpbnZva2UgZnBnYV90eCgpIHVubGVzcyBfYWxsXyB0aGUgYml0cyBmb3IgYWN0aXZlIGNoYW5uZWxzIGFyZSBzZXQgKi8KLQl0eF9tYXNrID0gKDEgPDwgY2FyZC0+bnJfcG9ydHMpIC0gMTsKLQlpZiAoKGNhcmRfZmxhZ3MgJiB0eF9tYXNrKSAhPSB0eF9tYXNrKQotCQlmcGdhX3R4KGNhcmQpOworCS8qCisJICogU2luY2UgZnBnYV90eCgpIGlzIGdvaW5nIHRvIG5lZWQgdG8gcmVhZCB0aGUgZmxhZ3MgdW5kZXIgaXRzIGxvY2ssCisJICogaXQgY2FuIHJldHVybiB0aGVtIHRvIHVzIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBoaXQgUENJIE1NSU8KKwkgKiBhZ2FpbiBmb3IgdGhlIHNhbWUgaW5mb3JtYXRpb24KKwkgKi8KKwljYXJkX2ZsYWdzID0gZnBnYV90eChjYXJkKTsKIAogCWZvciAocG9ydCA9IDA7IHBvcnQgPCBjYXJkLT5ucl9wb3J0czsgcG9ydCsrKSB7CiAJCWlmIChjYXJkX2ZsYWdzICYgKDB4MTAgPDwgcG9ydCkpIHsKLQkJCXN0cnVjdCBwa3RfaGRyIGhlYWRlcjsKKwkJCXN0cnVjdCBwa3RfaGRyIF9oZHIsICpoZWFkZXI7CiAJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCQkJc3RydWN0IGF0bV92Y2MgKnZjYzsKIAkJCWludCBzaXplOwogCi0JCQlyeF9kb25lIHw9IDB4MTAgPDwgcG9ydDsKKwkJCWlmIChjYXJkLT51c2luZ19kbWEpIHsKKwkJCQlza2IgPSBjYXJkLT5yeF9za2JbcG9ydF07CisJCQkJY2FyZC0+cnhfc2tiW3BvcnRdID0gTlVMTDsKIAotCQkJbWVtY3B5X2Zyb21pbygmaGVhZGVyLCBSWF9CVUYoY2FyZCwgcG9ydCksIHNpemVvZihoZWFkZXIpKTsKKwkJCQlwY2lfdW5tYXBfc2luZ2xlKGNhcmQtPmRldiwgU0tCX0NCKHNrYiktPmRtYV9hZGRyLAorCQkJCQkJIFJYX0RNQV9TSVpFLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCi0JCQlzaXplID0gbGUxNl90b19jcHUoaGVhZGVyLnNpemUpOworCQkJCWhlYWRlciA9ICh2b2lkICopc2tiLT5kYXRhOworCQkJCXNpemUgPSBsZTE2X3RvX2NwdShoZWFkZXItPnNpemUpOworCQkJCXNrYl9wdXQoc2tiLCBzaXplICsgc2l6ZW9mKCpoZWFkZXIpKTsKKwkJCQlza2JfcHVsbChza2IsIHNpemVvZigqaGVhZGVyKSk7CisJCQl9IGVsc2UgeworCQkJCWhlYWRlciA9ICZfaGRyOwogCi0JCQlza2IgPSBhbGxvY19za2Ioc2l6ZSwgR0ZQX0FUT01JQyk7Ci0JCQlpZiAoIXNrYikgewotCQkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCQkJCWRldl93YXJuKCZjYXJkLT5kZXYtPmRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBza19idWZmIGZvciBSWFxuIik7Ci0JCQkJY29udGludWU7CisJCQkJcnhfZG9uZSB8PSAweDEwIDw8IHBvcnQ7CisKKwkJCQltZW1jcHlfZnJvbWlvKGhlYWRlciwgUlhfQlVGKGNhcmQsIHBvcnQpLCBzaXplb2YoKmhlYWRlcikpOworCisJCQkJc2l6ZSA9IGxlMTZfdG9fY3B1KGhlYWRlci0+c2l6ZSk7CisKKwkJCQlza2IgPSBhbGxvY19za2Ioc2l6ZSArIDEsIEdGUF9BVE9NSUMpOworCQkJCWlmICghc2tiKSB7CisJCQkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQkJCQlkZXZfd2FybigmY2FyZC0+ZGV2LT5kZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgc2tfYnVmZiBmb3IgUlhcbiIpOworCQkJCQljb250aW51ZTsKKwkJCQl9CisKKwkJCQltZW1jcHlfZnJvbWlvKHNrYl9wdXQoc2tiLCBzaXplKSwKKwkJCQkJICAgICAgUlhfQlVGKGNhcmQsIHBvcnQpICsgc2l6ZW9mKCpoZWFkZXIpLAorCQkJCQkgICAgICBzaXplKTsKIAkJCX0KLQotCQkJbWVtY3B5X2Zyb21pbyhza2JfcHV0KHNrYiwgc2l6ZSksCi0JCQkJICAgICAgUlhfQlVGKGNhcmQsIHBvcnQpICsgc2l6ZW9mKGhlYWRlciksCi0JCQkJICAgICAgc2l6ZSk7Ci0KIAkJCWlmIChhdG1kZWJ1ZykgewogCQkJCWRldl9pbmZvKCZjYXJkLT5kZXYtPmRldiwgIlJlY2VpdmVkOiBkZXZpY2UgJWRcbiIsIHBvcnQpOwogCQkJCWRldl9pbmZvKCZjYXJkLT5kZXYtPmRldiwgInNpemU6ICVkIFZQSTogJWQgVkNJOiAlZFxuIiwKLQkJCQkJIHNpemUsIGxlMTZfdG9fY3B1KGhlYWRlci52cGkpLAotCQkJCQkgbGUxNl90b19jcHUoaGVhZGVyLnZjaSkpOworCQkJCQkgc2l6ZSwgbGUxNl90b19jcHUoaGVhZGVyLT52cGkpLAorCQkJCQkgbGUxNl90b19jcHUoaGVhZGVyLT52Y2kpKTsKIAkJCQlwcmludF9idWZmZXIoc2tiKTsKIAkJCX0KIAotCQkJc3dpdGNoIChsZTE2X3RvX2NwdShoZWFkZXIudHlwZSkpIHsKKwkJCXN3aXRjaCAobGUxNl90b19jcHUoaGVhZGVyLT50eXBlKSkgewogCQkJY2FzZSBQS1RfREFUQToKLQkJCQl2Y2MgPSBmaW5kX3ZjYyhjYXJkLT5hdG1kZXZbcG9ydF0sIGxlMTZfdG9fY3B1KGhlYWRlci52cGkpLAotCQkJCQkgICAgICAgbGUxNl90b19jcHUoaGVhZGVyLnZjaSkpOworCQkJCXZjYyA9IGZpbmRfdmNjKGNhcmQtPmF0bWRldltwb3J0XSwgbGUxNl90b19jcHUoaGVhZGVyLT52cGkpLAorCQkJCQkgICAgICAgbGUxNl90b19jcHUoaGVhZGVyLT52Y2kpKTsKIAkJCQlpZiAoIXZjYykgewogCQkJCQlpZiAobmV0X3JhdGVsaW1pdCgpKQogCQkJCQkJZGV2X3dhcm4oJmNhcmQtPmRldi0+ZGV2LCAiUmVjZWl2ZWQgcGFja2V0IGZvciB1bmtub3duIFZDSS5WUEkgJWQuJWQgb24gcG9ydCAlZFxuIiwKLQkJCQkJCQkgbGUxNl90b19jcHUoaGVhZGVyLnZjaSksIGxlMTZfdG9fY3B1KGhlYWRlci52cGkpLAorCQkJCQkJCSBsZTE2X3RvX2NwdShoZWFkZXItPnZjaSksIGxlMTZfdG9fY3B1KGhlYWRlci0+dnBpKSwKIAkJCQkJCQkgcG9ydCk7CiAJCQkJCWNvbnRpbnVlOwogCQkJCX0KQEAgLTI2NCwxOSArNjY2LDUwIEBACiAJCQkJYXRvbWljX2luYygmdmNjLT5zdGF0cy0+cngpOwogCQkJCWJyZWFrOwogCisJCQljYXNlIFBLVF9TVEFUVVM6CisJCQkJaWYgKHByb2Nlc3Nfc3RhdHVzKGNhcmQsIHBvcnQsIHNrYikgJiYKKwkJCQkgICAgbmV0X3JhdGVsaW1pdCgpKSB7CisJCQkJCWRldl93YXJuKCZjYXJkLT5kZXYtPmRldiwgIkJhZCBzdGF0dXMgcGFja2V0IG9mICVkIGJ5dGVzIG9uIHBvcnQgJWQ6XG4iLCBza2ItPmxlbiwgcG9ydCk7CisJCQkJCXByaW50X2J1ZmZlcihza2IpOworCQkJCX0KKwkJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCQkJCWJyZWFrOworCiAJCQljYXNlIFBLVF9DT01NQU5EOgogCQkJZGVmYXVsdDogLyogRklYTUU6IE5vdCByZWFsbHksIHN1cmVseT8gKi8KKwkJCQlpZiAocHJvY2Vzc19jb21tYW5kKGNhcmQsIHBvcnQsIHNrYikpCisJCQkJCWJyZWFrOwogCQkJCXNwaW5fbG9jaygmY2FyZC0+Y2xpX3F1ZXVlX2xvY2spOwogCQkJCWlmIChza2JfcXVldWVfbGVuKCZjYXJkLT5jbGlfcXVldWVbcG9ydF0pID4gMTApIHsKIAkJCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKIAkJCQkJCWRldl93YXJuKCZjYXJkLT5kZXYtPmRldiwgIkRyb3BwaW5nIGNvbnNvbGUgcmVzcG9uc2Ugb24gcG9ydCAlZFxuIiwKIAkJCQkJCQkgcG9ydCk7CisJCQkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCQkJfSBlbHNlCiAJCQkJCXNrYl9xdWV1ZV90YWlsKCZjYXJkLT5jbGlfcXVldWVbcG9ydF0sIHNrYik7CiAJCQkJc3Bpbl91bmxvY2soJmNhcmQtPmNsaV9xdWV1ZV9sb2NrKTsKIAkJCQlicmVhazsKIAkJCX0KIAkJfQorCQkvKiBBbGxvY2F0ZSBSWCBza2JzIGZvciBhbnkgcG9ydHMgd2hpY2ggbmVlZCB0aGVtICovCisJCWlmIChjYXJkLT51c2luZ19kbWEgJiYgY2FyZC0+YXRtZGV2W3BvcnRdICYmCisJCSAgICAhY2FyZC0+cnhfc2tiW3BvcnRdKSB7CisJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gYWxsb2Nfc2tiKFJYX0RNQV9TSVpFLCBHRlBfQVRPTUlDKTsKKwkJCWlmIChza2IpIHsKKwkJCQlTS0JfQ0Ioc2tiKS0+ZG1hX2FkZHIgPQorCQkJCQlwY2lfbWFwX3NpbmdsZShjYXJkLT5kZXYsIHNrYi0+ZGF0YSwKKwkJCQkJCSAgICAgICBSWF9ETUFfU0laRSwgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCQlpb3dyaXRlMzIoU0tCX0NCKHNrYiktPmRtYV9hZGRyLAorCQkJCQkgIGNhcmQtPmNvbmZpZ19yZWdzICsgUlhfRE1BX0FERFIocG9ydCkpOworCQkJCWNhcmQtPnJ4X3NrYltwb3J0XSA9IHNrYjsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCQkJZGV2X3dhcm4oJmNhcmQtPmRldi0+ZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIFJYIHNrYiIpOworCisJCQkJLyogV2UnbGwgaGF2ZSB0byB0cnkgYWdhaW4gbGF0ZXIgKi8KKwkJCQl0YXNrbGV0X3NjaGVkdWxlKCZjYXJkLT50bGV0KTsKKwkJCX0KKwkJfQogCX0KIAlpZiAocnhfZG9uZSkKIAkJaW93cml0ZTMyKHJ4X2RvbmUsIGNhcmQtPmNvbmZpZ19yZWdzICsgRkxBR1NfQUREUik7CkBAIC0zMjYsNyArNzU5LDcgQEAKIAkJCSAgICAgICB2Y2MtPnZjaSk7CiAJCX0KIAl9IGVsc2UgewotCQlmb3IoaT0wOyBpPDMyOyBpKyspeworCQlmb3IoaSA9IDA7IGkgPCBWQ0NfSFRBQkxFX1NJWkU7IGkrKyl7CiAJCQloZWFkID0gJnZjY19oYXNoW2ldOwogCQkJc2tfZm9yX2VhY2gocywgbm9kZSwgaGVhZCkgewogCQkJCW51bV9mb3VuZCArKzsKQEAgLTM0Miw2ICs3NzUsMjggQEAKIAlyZXR1cm4gbnVtX2ZvdW5kOwogfQogCitzdGF0aWMgdm9pZCByZWxlYXNlX3ZjY3Moc3RydWN0IGF0bV9kZXYgKmRldikKK3sKKyAgICAgICAgaW50IGk7CisKKyAgICAgICAgd3JpdGVfbG9ja19pcnEoJnZjY19za2xpc3RfbG9jayk7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBWQ0NfSFRBQkxFX1NJWkU7IGkrKykgeworICAgICAgICAgICAgICAgIHN0cnVjdCBobGlzdF9oZWFkICpoZWFkID0gJnZjY19oYXNoW2ldOworICAgICAgICAgICAgICAgIHN0cnVjdCBobGlzdF9ub2RlICpub2RlLCAqdG1wOworICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrICpzOworICAgICAgICAgICAgICAgIHN0cnVjdCBhdG1fdmNjICp2Y2M7CisKKyAgICAgICAgICAgICAgICBza19mb3JfZWFjaF9zYWZlKHMsIG5vZGUsIHRtcCwgaGVhZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdmNjID0gYXRtX3NrKHMpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZjYy0+ZGV2ID09IGRldikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2Y2NfcmVsZWFzZV9hc3luYyh2Y2MsIC1FUElQRSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrX2RlbF9ub2RlX2luaXQocyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHdyaXRlX3VubG9ja19pcnEoJnZjY19za2xpc3RfbG9jayk7Cit9CisKIAogc3RhdGljIGludCBwb3BlbihzdHJ1Y3QgYXRtX3ZjYyAqdmNjKQogewpAQCAtMzQ5LDYgKzgwNCwxMiBAQAogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IHBrdF9oZHIgKmhlYWRlcjsKIAorCWlmICh2Y2MtPnFvcy5hYWwgIT0gQVRNX0FBTDUpIHsKKwkJZGV2X3dhcm4oJmNhcmQtPmRldi0+ZGV2LCAiVW5zdXBwb3J0ZWQgQVRNIHR5cGUgJWRcbiIsCisJCQkgdmNjLT5xb3MuYWFsKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCiAJc2tiID0gYWxsb2Nfc2tiKHNpemVvZigqaGVhZGVyKSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFza2IgJiYgbmV0X3JhdGVsaW1pdCgpKSB7CiAJCWRldl93YXJuKCZjYXJkLT5kZXYtPmRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBza19idWZmIGluIHBvcGVuKClcbiIpOwpAQCAtMzU2LDIyICs4MTcsMTcgQEAKIAl9CiAJaGVhZGVyID0gKHZvaWQgKilza2JfcHV0KHNrYiwgc2l6ZW9mKCpoZWFkZXIpKTsKIAotCWhlYWRlci0+c2l6ZSA9IGNwdV90b19sZTE2KHNpemVvZigqaGVhZGVyKSk7CisJaGVhZGVyLT5zaXplID0gY3B1X3RvX2xlMTYoMCk7CiAJaGVhZGVyLT52cGkgPSBjcHVfdG9fbGUxNih2Y2MtPnZwaSk7CiAJaGVhZGVyLT52Y2kgPSBjcHVfdG9fbGUxNih2Y2MtPnZjaSk7CiAJaGVhZGVyLT50eXBlID0gY3B1X3RvX2xlMTYoUEtUX1BPUEVOKTsKIAogCWZwZ2FfcXVldWUoY2FyZCwgU09MT1NfQ0hBTih2Y2MtPmRldiksIHNrYiwgTlVMTCk7CiAKLS8vCWRldl9kYmcoJmNhcmQtPmRldi0+ZGV2LCAiT3BlbiBmb3IgdnBpICVkIGFuZCB2Y2kgJWQgb24gaW50ZXJmYWNlICVkXG4iLCB2Y2MtPnZwaSwgdmNjLT52Y2ksIFNPTE9TX0NIQU4odmNjLT5kZXYpKTsKLQlzZXRfYml0KEFUTV9WRl9BRERSLCAmdmNjLT5mbGFncyk7IC8vIGFjY2VwdCB0aGUgdnBpIC8gdmNpCisJc2V0X2JpdChBVE1fVkZfQUREUiwgJnZjYy0+ZmxhZ3MpOwogCXNldF9iaXQoQVRNX1ZGX1JFQURZLCAmdmNjLT5mbGFncyk7CiAJbGlzdF92Y2NzKDApOwogCi0JaWYgKCFvcGVucykKLQkJaW93cml0ZTMyKDEsIGNhcmQtPmNvbmZpZ19yZWdzICsgSVJRX0VOX0FERFIpOwotCi0Jb3BlbnMrKzsgLy9jb3VudCBvcGVuIFBWQ3MKIAogCXJldHVybiAwOwogfQpAQCAtMzg5LDE3ICs4NDUsMTMgQEAKIAl9CiAJaGVhZGVyID0gKHZvaWQgKilza2JfcHV0KHNrYiwgc2l6ZW9mKCpoZWFkZXIpKTsKIAotCWhlYWRlci0+c2l6ZSA9IGNwdV90b19sZTE2KHNpemVvZigqaGVhZGVyKSk7CisJaGVhZGVyLT5zaXplID0gY3B1X3RvX2xlMTYoMCk7CiAJaGVhZGVyLT52cGkgPSBjcHVfdG9fbGUxNih2Y2MtPnZwaSk7CiAJaGVhZGVyLT52Y2kgPSBjcHVfdG9fbGUxNih2Y2MtPnZjaSk7CiAJaGVhZGVyLT50eXBlID0gY3B1X3RvX2xlMTYoUEtUX1BDTE9TRSk7CiAKIAlmcGdhX3F1ZXVlKGNhcmQsIFNPTE9TX0NIQU4odmNjLT5kZXYpLCBza2IsIE5VTEwpOwogCi0vLwlkZXZfZGJnKCZjYXJkLT5kZXYtPmRldiwgIkNsb3NlIGZvciB2cGkgJWQgYW5kIHZjaSAlZCBvbiBpbnRlcmZhY2UgJWRcbiIsIHZjYy0+dnBpLCB2Y2MtPnZjaSwgU09MT1NfQ0hBTih2Y2MtPmRldikpOwotCWlmICghLS1vcGVucykKLQkJaW93cml0ZTMyKDAsIGNhcmQtPmNvbmZpZ19yZWdzICsgSVJRX0VOX0FERFIpOwotCiAJY2xlYXJfYml0KEFUTV9WRl9BRERSLCAmdmNjLT5mbGFncyk7CiAJY2xlYXJfYml0KEFUTV9WRl9SRUFEWSwgJnZjYy0+ZmxhZ3MpOwogCkBAIC00MzksMjIgKzg5MSwyNiBAQAogCQkgICAgICAgc3RydWN0IGF0bV92Y2MgKnZjYykKIHsKIAlpbnQgb2xkX2xlbjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JKih2b2lkICoqKXNrYi0+Y2IgPSB2Y2M7CisJU0tCX0NCKHNrYiktPnZjYyA9IHZjYzsKIAotCXNwaW5fbG9jaygmY2FyZC0+dHhfcXVldWVfbG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPnR4X3F1ZXVlX2xvY2ssIGZsYWdzKTsKIAlvbGRfbGVuID0gc2tiX3F1ZXVlX2xlbigmY2FyZC0+dHhfcXVldWVbcG9ydF0pOwogCXNrYl9xdWV1ZV90YWlsKCZjYXJkLT50eF9xdWV1ZVtwb3J0XSwgc2tiKTsKLQlzcGluX3VubG9jaygmY2FyZC0+dHhfcXVldWVfbG9jayk7CisJaWYgKCFvbGRfbGVuKQorCQljYXJkLT50eF9tYXNrIHw9ICgxIDw8IHBvcnQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPnR4X3F1ZXVlX2xvY2ssIGZsYWdzKTsKIAotCS8qIElmIFRYIG1pZ2h0IG5lZWQgdG8gYmUgc3RhcnRlZCwgZG8gc28gKi8KKwkvKiBUaGVvcmV0aWNhbGx5IHdlIGNvdWxkIGp1c3Qgc2NoZWR1bGUgdGhlIHRhc2tsZXQgaGVyZSwgYnV0CisJICAgdGhhdCBpbnRyb2R1Y2VzIGxhdGVuY3kgd2UgZG9uJ3Qgd2FudCAtLSBpdCdzIG5vdGljZWFibGUgKi8KIAlpZiAoIW9sZF9sZW4pCiAJCWZwZ2FfdHgoY2FyZCk7CiB9CiAKLXN0YXRpYyBpbnQgZnBnYV90eChzdHJ1Y3Qgc29sb3NfY2FyZCAqY2FyZCkKK3N0YXRpYyB1aW50MzJfdCBmcGdhX3R4KHN0cnVjdCBzb2xvc19jYXJkICpjYXJkKQogewotCXVpbnQzMl90IHR4X3BlbmRpbmc7CisJdWludDMyX3QgdHhfcGVuZGluZywgY2FyZF9mbGFnczsKIAl1aW50MzJfdCB0eF9zdGFydGVkID0gMDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBhdG1fdmNjICp2Y2M7CkBAIC00NjIsNjkgKzkxOCw3NyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+dHhfbG9jaywgZmxhZ3MpOworCQorCWNhcmRfZmxhZ3MgPSBpb3JlYWQzMihjYXJkLT5jb25maWdfcmVncyArIEZMQUdTX0FERFIpOworCS8qCisJICogVGhlIHF1ZXVlIGxvY2sgaXMgcmVxdWlyZWQgZm9yIF93cml0aW5nXyB0byB0eF9tYXNrLCBidXQgd2UncmUKKwkgKiBPSyB0byByZWFkIGl0IGhlcmUgd2l0aG91dCBsb2NraW5nLiBUaGUgb25seSBwb3RlbnRpYWwgdXBkYXRlCisJICogdGhhdCB3ZSBjb3VsZCByYWNlIHdpdGggaXMgaW4gZnBnYV9xdWV1ZSgpIHdoZXJlIGl0IHNldHMgYSBiaXQKKwkgKiBmb3IgYSBuZXcgcG9ydC4uLiBidXQgaXQncyBnb2luZyB0byBjYWxsIHRoaXMgZnVuY3Rpb24gYWdhaW4gaWYKKwkgKiBpdCdzIGRvaW5nIHRoYXQsIGFueXdheS4KKwkgKi8KKwl0eF9wZW5kaW5nID0gY2FyZC0+dHhfbWFzayAmIH5jYXJkX2ZsYWdzOwogCi0JdHhfcGVuZGluZyA9IGlvcmVhZDMyKGNhcmQtPmNvbmZpZ19yZWdzICsgRkxBR1NfQUREUik7Ci0KLQlkZXZfdmRiZygmY2FyZC0+ZGV2LT5kZXYsICJUWCBGbGFncyBhcmUgJVhcbiIsIHR4X3BlbmRpbmcpOwotCi0JZm9yIChwb3J0ID0gMDsgcG9ydCA8IGNhcmQtPm5yX3BvcnRzOyBwb3J0KyspIHsKLQkJaWYgKCEodHhfcGVuZGluZyAmICgxIDw8IHBvcnQpKSkgeworCWZvciAocG9ydCA9IDA7IHR4X3BlbmRpbmc7IHR4X3BlbmRpbmcgPj49IDEsIHBvcnQrKykgeworCQlpZiAodHhfcGVuZGluZyAmIDEpIHsKKwkJCXN0cnVjdCBza19idWZmICpvbGRza2IgPSBjYXJkLT50eF9za2JbcG9ydF07CisJCQlpZiAob2xkc2tiKQorCQkJCXBjaV91bm1hcF9zaW5nbGUoY2FyZC0+ZGV2LCBTS0JfQ0Iob2xkc2tiKS0+ZG1hX2FkZHIsCisJCQkJCQkgb2xkc2tiLT5sZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOwogCiAJCQlzcGluX2xvY2soJmNhcmQtPnR4X3F1ZXVlX2xvY2spOwogCQkJc2tiID0gc2tiX2RlcXVldWUoJmNhcmQtPnR4X3F1ZXVlW3BvcnRdKTsKKwkJCWlmICghc2tiKQorCQkJCWNhcmQtPnR4X21hc2sgJj0gfigxIDw8IHBvcnQpOwogCQkJc3Bpbl91bmxvY2soJmNhcmQtPnR4X3F1ZXVlX2xvY2spOwogCi0JCQlpZiAoIXNrYikKKwkJCWlmIChza2IgJiYgIWNhcmQtPnVzaW5nX2RtYSkgeworCQkJCW1lbWNweV90b2lvKFRYX0JVRihjYXJkLCBwb3J0KSwgc2tiLT5kYXRhLCBza2ItPmxlbik7CisJCQkJdHhfc3RhcnRlZCB8PSAxIDw8IHBvcnQ7CisJCQkJb2xkc2tiID0gc2tiOyAvKiBXZSdyZSBkb25lIHdpdGggdGhpcyBza2IgYWxyZWFkeSAqLworCQkJfSBlbHNlIGlmIChza2IgJiYgY2FyZC0+dXNpbmdfZG1hKSB7CisJCQkJU0tCX0NCKHNrYiktPmRtYV9hZGRyID0gcGNpX21hcF9zaW5nbGUoY2FyZC0+ZGV2LCBza2ItPmRhdGEsCisJCQkJCQkJCSAgICAgICBza2ItPmxlbiwgUENJX0RNQV9UT0RFVklDRSk7CisJCQkJaW93cml0ZTMyKFNLQl9DQihza2IpLT5kbWFfYWRkciwKKwkJCQkJICBjYXJkLT5jb25maWdfcmVncyArIFRYX0RNQV9BRERSKHBvcnQpKTsKKwkJCX0KKworCQkJaWYgKCFvbGRza2IpCiAJCQkJY29udGludWU7CiAKKwkJCS8qIENsZWFuIHVwIGFuZCBmcmVlIG9sZHNrYiBub3cgaXQncyBnb25lICovCiAJCQlpZiAoYXRtZGVidWcpIHsKIAkJCQlkZXZfaW5mbygmY2FyZC0+ZGV2LT5kZXYsICJUcmFuc21pdHRlZDogcG9ydCAlZFxuIiwKIAkJCQkJIHBvcnQpOwotCQkJCXByaW50X2J1ZmZlcihza2IpOworCQkJCXByaW50X2J1ZmZlcihvbGRza2IpOwogCQkJfQotCQkJbWVtY3B5X3RvaW8oVFhfQlVGKGNhcmQsIHBvcnQpLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKIAotCQkJdmNjID0gKih2b2lkICoqKXNrYi0+Y2I7CisJCQl2Y2MgPSBTS0JfQ0Iob2xkc2tiKS0+dmNjOwogCiAJCQlpZiAodmNjKSB7CiAJCQkJYXRvbWljX2luYygmdmNjLT5zdGF0cy0+dHgpOwotCQkJCXNvbG9zX3BvcCh2Y2MsIHNrYik7CisJCQkJc29sb3NfcG9wKHZjYywgb2xkc2tiKTsKIAkJCX0gZWxzZQotCQkJCWRldl9rZnJlZV9za2JfaXJxKHNrYik7CisJCQkJZGV2X2tmcmVlX3NrYl9pcnEob2xkc2tiKTsKIAotCQkJdHhfc3RhcnRlZCB8PSAxIDw8IHBvcnQ7IC8vU2V0IFRYIGZ1bGwgZmxhZwogCQl9CiAJfQorCS8qIEZvciBub24tRE1BIFRYLCB3cml0ZSB0aGUgJ1RYIHN0YXJ0JyBiaXQgZm9yIGFsbCBmb3VyIHBvcnRzIHNpbXVsdGFuZW91c2x5ICovCiAJaWYgKHR4X3N0YXJ0ZWQpCiAJCWlvd3JpdGUzMih0eF9zdGFydGVkLCBjYXJkLT5jb25maWdfcmVncyArIEZMQUdTX0FERFIpOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+dHhfbG9jaywgZmxhZ3MpOwotCXJldHVybiAwOworCXJldHVybiBjYXJkX2ZsYWdzOwogfQogCiBzdGF0aWMgaW50IHBzZW5kKHN0cnVjdCBhdG1fdmNjICp2Y2MsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IHNvbG9zX2NhcmQgKmNhcmQgPSB2Y2MtPmRldi0+ZGV2X2RhdGE7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjIgPSBOVUxMOwogCXN0cnVjdCBwa3RfaGRyICpoZWFkZXI7CisJaW50IHBrdGxlbjsKIAotCS8vZGV2X2RiZygmY2FyZC0+ZGV2LT5kZXYsICJwc2VuZCBjYWxsZWQuXG4iKTsKLQkvL2Rldl9kYmcoJmNhcmQtPmRldi0+ZGV2LCAiZGV2LHZwaSx2Y2kgPSAlZCwlZCwlZFxuIixTT0xPU19DSEFOKHZjYy0+ZGV2KSx2Y2MtPnZwaSx2Y2MtPnZjaSk7Ci0KLQlpZiAoZGVidWcpIHsKLQkJc2tiMiA9IGF0bV9hbGxvY19jaGFyZ2UodmNjLCBza2ItPmxlbiwgR0ZQX0FUT01JQyk7Ci0JCWlmIChza2IyKSB7Ci0JCQltZW1jcHkoc2tiMi0+ZGF0YSwgc2tiLT5kYXRhLCBza2ItPmxlbik7Ci0JCQlza2JfcHV0KHNrYjIsIHNrYi0+bGVuKTsKLQkJCXZjYy0+cHVzaCh2Y2MsIHNrYjIpOwotCQkJYXRvbWljX2luYygmdmNjLT5zdGF0cy0+cngpOwotCQl9Ci0JCWF0b21pY19pbmMoJnZjYy0+c3RhdHMtPnR4KTsKLQkJc29sb3NfcG9wKHZjYywgc2tiKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYgKHNrYi0+bGVuID4gKEJVRl9TSVpFIC0gc2l6ZW9mKCpoZWFkZXIpKSkgeworCXBrdGxlbiA9IHNrYi0+bGVuOworCWlmIChwa3RsZW4gPiAoQlVGX1NJWkUgLSBzaXplb2YoKmhlYWRlcikpKSB7CiAJCWRldl93YXJuKCZjYXJkLT5kZXYtPmRldiwgIkxlbmd0aCBvZiBQRFUgaXMgdG9vIGxhcmdlLiBEcm9wcGluZyBQRFUuXG4iKTsKIAkJc29sb3NfcG9wKHZjYywgc2tiKTsKIAkJcmV0dXJuIDA7CkBAIC01MzksNiArMTAwMyw3IEBACiAKIAkJcmV0ID0gcHNrYl9leHBhbmRfaGVhZChza2IsIGV4cGFuZF9ieSwgMCwgR0ZQX0FUT01JQyk7CiAJCWlmIChyZXQpIHsKKwkJCWRldl93YXJuKCZjYXJkLT5kZXYtPmRldiwgInBza2JfZXhwYW5kX2hlYWQgZmFpbGVkLlxuIik7CiAJCQlzb2xvc19wb3AodmNjLCBza2IpOwogCQkJcmV0dXJuIHJldDsKIAkJfQpAQCAtNTQ2LDcgKzEwMTEsOCBAQAogCiAJaGVhZGVyID0gKHZvaWQgKilza2JfcHVzaChza2IsIHNpemVvZigqaGVhZGVyKSk7CiAKLQloZWFkZXItPnNpemUgPSBjcHVfdG9fbGUxNihza2ItPmxlbik7CisJLyogVGhpcyBkb2VzIF9ub3RfIGluY2x1ZGUgdGhlIHNpemUgb2YgdGhlIGhlYWRlciAqLworCWhlYWRlci0+c2l6ZSA9IGNwdV90b19sZTE2KHBrdGxlbik7CiAJaGVhZGVyLT52cGkgPSBjcHVfdG9fbGUxNih2Y2MtPnZwaSk7CiAJaGVhZGVyLT52Y2kgPSBjcHVfdG9fbGUxNih2Y2MtPnZjaSk7CiAJaGVhZGVyLT50eXBlID0gY3B1X3RvX2xlMTYoUEtUX0RBVEEpOwpAQCAtNTczLDIwICsxMDM5LDE5IEBACiAKIHN0YXRpYyBpbnQgZnBnYV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCiB7Ci0JaW50IGVyciwgaTsKKwlpbnQgZXJyOwogCXVpbnQxNl90IGZwZ2FfdmVyOwogCXVpbnQ4X3QgbWFqb3JfdmVyLCBtaW5vcl92ZXI7CiAJdWludDMyX3QgZGF0YTMyOwogCXN0cnVjdCBzb2xvc19jYXJkICpjYXJkOwogCi0JaWYgKGRlYnVnKQotCQlyZXR1cm4gMDsKLQogCWNhcmQgPSBremFsbG9jKHNpemVvZigqY2FyZCksIEdGUF9LRVJORUwpOwogCWlmICghY2FyZCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAljYXJkLT5kZXYgPSBkZXY7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmY2FyZC0+Zndfd3EpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNhcmQtPnBhcmFtX3dxKTsKIAogCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKGRldik7CiAJaWYgKGVycikgewpAQCAtNTk0LDYgKzEwNTksMTIgQEAKIAkJZ290byBvdXQ7CiAJfQogCisJZXJyID0gcGNpX3NldF9kbWFfbWFzayhkZXYsIERNQV8zMkJJVF9NQVNLKTsKKwlpZiAoZXJyKSB7CisJCWRldl93YXJuKCZkZXYtPmRldiwgIkZhaWxlZCB0byBzZXQgMzItYml0IERNQSBtYXNrXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCiAJZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhkZXYsICJzb2xvcyIpOwogCWlmIChlcnIpIHsKIAkJZGV2X3dhcm4oJmRldi0+ZGV2LCAiRmFpbGVkIHRvIHJlcXVlc3QgcmVnaW9uc1xuIik7CkBAIC02MTEsMTcgKzEwODIsMTMgQEAKIAkJZ290byBvdXRfdW5tYXBfY29uZmlnOwogCX0KIAotLy8JZm9yKGk9MDtpPDY0IDtpKz00KXsKLS8vCQlkYXRhMzI9aW9yZWFkMzIoY2FyZC0+YnVmZmVycyArIGkpOwotLy8JCWRldl9kYmcoJmNhcmQtPmRldi0+ZGV2LCAiJTA4bFhcbiIsKHVuc2lnbmVkIGxvbmcpZGF0YTMyKTsKLS8vCX0KKwlpZiAocmVzZXQpIHsKKwkJaW93cml0ZTMyKDEsIGNhcmQtPmNvbmZpZ19yZWdzICsgRlBHQV9NT0RFKTsKKwkJZGF0YTMyID0gaW9yZWFkMzIoY2FyZC0+Y29uZmlnX3JlZ3MgKyBGUEdBX01PREUpOyAKIAotCS8vRmlsbCBDb25maWcgTWVtIHdpdGggemVyb3MKLQlmb3IoaSA9IDA7IGkgPCAxMjg7IGkgKz0gNCkKLQkJaW93cml0ZTMyKDAsIGNhcmQtPmNvbmZpZ19yZWdzICsgaSk7Ci0KLQkvL1NldCBSWCBlbXB0eSBmbGFncwotCWlvd3JpdGUzMigweEYwLCBjYXJkLT5jb25maWdfcmVncyArIEZMQUdTX0FERFIpOworCQlpb3dyaXRlMzIoMCwgY2FyZC0+Y29uZmlnX3JlZ3MgKyBGUEdBX01PREUpOworCQlkYXRhMzIgPSBpb3JlYWQzMihjYXJkLT5jb25maWdfcmVncyArIEZQR0FfTU9ERSk7IAorCX0KIAogCWRhdGEzMiA9IGlvcmVhZDMyKGNhcmQtPmNvbmZpZ19yZWdzICsgRlBHQV9WRVIpOwogCWZwZ2FfdmVyID0gKGRhdGEzMiAmIDB4MDAwMEZGRkYpOwpAQCAtNjMwLDU1ICsxMDk3LDUzIEBACiAJZGV2X2luZm8oJmRldi0+ZGV2LCAiU29sb3MgRlBHQSBWZXJzaW9uICVkLiUwMmQgc3ZuLSVkXG4iLAogCQkgbWFqb3JfdmVyLCBtaW5vcl92ZXIsIGZwZ2FfdmVyKTsKIAotCWNhcmQtPm5yX3BvcnRzID0gMjsgLyogRklYTUU6IERldGVjdCBkYXVnaHRlcmJvYXJkICovCisJaWYgKDAgJiYgZnBnYV92ZXIgPiAyNykKKwkJY2FyZC0+dXNpbmdfZG1hID0gMTsKKwllbHNlIHsKKwkJLyogU2V0IFJYIGVtcHR5IGZsYWcgZm9yIGFsbCBwb3J0cyAqLworCQlpb3dyaXRlMzIoMHhGMCwgY2FyZC0+Y29uZmlnX3JlZ3MgKyBGTEFHU19BRERSKTsKKwl9CiAKLQllcnIgPSBhdG1faW5pdChjYXJkKTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dF91bm1hcF9ib3RoOworCWRhdGEzMiA9IGlvcmVhZDMyKGNhcmQtPmNvbmZpZ19yZWdzICsgUE9SVFMpOworCWNhcmQtPm5yX3BvcnRzID0gKGRhdGEzMiAmIDB4MDAwMDAwRkYpOwogCiAJcGNpX3NldF9kcnZkYXRhKGRldiwgY2FyZCk7CisKIAl0YXNrbGV0X2luaXQoJmNhcmQtPnRsZXQsIHNvbG9zX2JoLCAodW5zaWduZWQgbG9uZyljYXJkKTsKIAlzcGluX2xvY2tfaW5pdCgmY2FyZC0+dHhfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJmNhcmQtPnR4X3F1ZXVlX2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZjYXJkLT5jbGlfcXVldWVfbG9jayk7Ci0vKgotCS8vIFNldCBMb29wYmFjayBtb2RlCi0JZGF0YTMyID0gMHgwMDAxMDAwMDsKLQlpb3dyaXRlMzIoZGF0YTMyLGNhcmQtPmNvbmZpZ19yZWdzICsgRkxBR1NfQUREUik7Ci0qLwotLyoKLQkvLyBGaWxsIEJ1ZmZlcnMgd2l0aCB6ZXJvcwotCWZvciAoaSA9IDA7IGkgPCBCVUZfU0laRSAqIDg7IGkgKz0gNCkKLQkJaW93cml0ZTMyKDAsIGNhcmQtPmJ1ZmZlcnMgKyBpKTsKLSovCi0vKgotCWZvcihpID0gMDsgaSA8IChCVUZfU0laRSAqIDEpOyBpICs9IDQpCi0JCWlvd3JpdGUzMigweDEyMzQ1Njc4LCBjYXJkLT5idWZmZXJzICsgaSArICgwKkJVRl9TSVpFKSk7Ci0JZm9yKGkgPSAwOyBpIDwgKEJVRl9TSVpFICogMSk7IGkgKz0gNCkKLQkJaW93cml0ZTMyKDB4YWJjZGVmOTgsIGNhcmQtPmJ1ZmZlcnMgKyBpICsgKDEqQlVGX1NJWkUpKTsKKwlzcGluX2xvY2tfaW5pdCgmY2FyZC0+cGFyYW1fcXVldWVfbG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJmNhcmQtPnBhcmFtX3F1ZXVlKTsKIAotCS8vIFJlYWQgQ29uZmlnIE1lbW9yeQotCXByaW50ayhLRVJOX0RFQlVHICJSZWFkaW5nIENvbmZpZyBNRU1cbiIpOwotCWkgPSAwOwotCWZvcihpID0gMDsgaSA8IDE2OyBpKyspIHsKLQkJZGF0YTMyPWlvcmVhZDMyKGNhcmQtPmJ1ZmZlcnMgKyBpKihCVUZfU0laRS8yKSk7Ci0JCXByaW50ayhLRVJOX0FMRVJUICJBZGRyOiAlbFggRGF0YTogJTA4bFhcbiIsCi0JCSAgICAgICAodW5zaWduZWQgbG9uZykoYWRkcl9zdGFydCArIGkqKEJVRl9TSVpFLzIpKSwKLQkJICAgICAgICh1bnNpZ25lZCBsb25nKWRhdGEzMik7Ci0JfQotKi8KLQkvL2Rldl9kYmcoJmNhcmQtPmRldi0+ZGV2LCAiUmVxdWVzdGluZyBJUlE6ICVkXG4iLGRldi0+aXJxKTsKLQllcnIgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgc29sb3NfaXJxLCBJUlFGX0RJU0FCTEVEfElSUUZfU0hBUkVELAorCWVyciA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCBzb2xvc19pcnEsIElSUUZfU0hBUkVELAogCQkJICAic29sb3MtcGNpIiwgY2FyZCk7Ci0JaWYgKGVycikKKwlpZiAoZXJyKSB7CiAJCWRldl9kYmcoJmNhcmQtPmRldi0+ZGV2LCAiRmFpbGVkIHRvIHJlcXVlc3QgaW50ZXJydXB0IElSUTogJWRcbiIsIGRldi0+aXJxKTsKKwkJZ290byBvdXRfdW5tYXBfYm90aDsKKwl9CiAKLQkvLyBFbmFibGUgSVJRcwogCWlvd3JpdGUzMigxLCBjYXJkLT5jb25maWdfcmVncyArIElSUV9FTl9BRERSKTsKIAorCWlmIChmcGdhX3VwZ3JhZGUpCisJCWZsYXNoX3VwZ3JhZGUoY2FyZCwgMCk7CisKKwlpZiAoZmlybXdhcmVfdXBncmFkZSkKKwkJZmxhc2hfdXBncmFkZShjYXJkLCAxKTsKKworCWVyciA9IGF0bV9pbml0KGNhcmQpOworCWlmIChlcnIpCisJCWdvdG8gb3V0X2ZyZWVfaXJxOworCiAJcmV0dXJuIDA7CiAKKyBvdXRfZnJlZV9pcnE6CisJaW93cml0ZTMyKDAsIGNhcmQtPmNvbmZpZ19yZWdzICsgSVJRX0VOX0FERFIpOworCWZyZWVfaXJxKGRldi0+aXJxLCBjYXJkKTsKKwl0YXNrbGV0X2tpbGwoJmNhcmQtPnRsZXQpOworCQogIG91dF91bm1hcF9ib3RoOgorCXBjaV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOwogCXBjaV9pb3VubWFwKGRldiwgY2FyZC0+Y29uZmlnX3JlZ3MpOwogIG91dF91bm1hcF9jb25maWc6CiAJcGNpX2lvdW5tYXAoZGV2LCBjYXJkLT5idWZmZXJzKTsKQEAgLTY5Myw5ICsxMTU4LDEwIEBACiB7CiAJaW50IGk7CiAKLQlvcGVucyA9IDA7Ci0KIAlmb3IgKGkgPSAwOyBpIDwgY2FyZC0+bnJfcG9ydHM7IGkrKykgeworCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCQlzdHJ1Y3QgcGt0X2hkciAqaGVhZGVyOworCiAJCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmNhcmQtPnR4X3F1ZXVlW2ldKTsKIAkJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmY2FyZC0+Y2xpX3F1ZXVlW2ldKTsKIApAQCAtNzA3LDYgKzExNzMsOCBAQAogCQl9CiAJCWlmIChkZXZpY2VfY3JlYXRlX2ZpbGUoJmNhcmQtPmF0bWRldltpXS0+Y2xhc3NfZGV2LCAmZGV2X2F0dHJfY29uc29sZSkpCiAJCQlkZXZfZXJyKCZjYXJkLT5kZXYtPmRldiwgIkNvdWxkIG5vdCByZWdpc3RlciBjb25zb2xlIGZvciBBVE0gZGV2aWNlICVkXG4iLCBpKTsKKwkJaWYgKHN5c2ZzX2NyZWF0ZV9ncm91cCgmY2FyZC0+YXRtZGV2W2ldLT5jbGFzc19kZXYua29iaiwgJnNvbG9zX2F0dHJfZ3JvdXApKQorCQkJZGV2X2VycigmY2FyZC0+ZGV2LT5kZXYsICJDb3VsZCBub3QgcmVnaXN0ZXIgcGFyYW1ldGVyIGdyb3VwIGZvciBBVE0gZGV2aWNlICVkXG4iLCBpKTsKIAogCQlkZXZfaW5mbygmY2FyZC0+ZGV2LT5kZXYsICJSZWdpc3RlcmVkIEFUTSBkZXZpY2UgJWRcbiIsIGNhcmQtPmF0bWRldltpXS0+bnVtYmVyKTsKIApAQCAtNzE0LDYgKzExODIsMjIgQEAKIAkJY2FyZC0+YXRtZGV2W2ldLT5jaV9yYW5nZS52Y2lfYml0cyA9IDE2OwogCQljYXJkLT5hdG1kZXZbaV0tPmRldl9kYXRhID0gY2FyZDsKIAkJY2FyZC0+YXRtZGV2W2ldLT5waHlfZGF0YSA9ICh2b2lkICopKHVuc2lnbmVkIGxvbmcpaTsKKwkJY2FyZC0+YXRtZGV2W2ldLT5zaWduYWwgPSBBVE1fUEhZX1NJR19VTktOT1dOOworCisJCXNrYiA9IGFsbG9jX3NrYihzaXplb2YoKmhlYWRlciksIEdGUF9BVE9NSUMpOworCQlpZiAoIXNrYikgeworCQkJZGV2X3dhcm4oJmNhcmQtPmRldi0+ZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIHNrX2J1ZmYgaW4gYXRtX2luaXQoKVxuIik7CisJCQljb250aW51ZTsKKwkJfQorCisJCWhlYWRlciA9ICh2b2lkICopc2tiX3B1dChza2IsIHNpemVvZigqaGVhZGVyKSk7CisKKwkJaGVhZGVyLT5zaXplID0gY3B1X3RvX2xlMTYoMCk7CisJCWhlYWRlci0+dnBpID0gY3B1X3RvX2xlMTYoMCk7CisJCWhlYWRlci0+dmNpID0gY3B1X3RvX2xlMTYoMCk7CisJCWhlYWRlci0+dHlwZSA9IGNwdV90b19sZTE2KFBLVF9TVEFUVVMpOworCisJCWZwZ2FfcXVldWUoY2FyZCwgaSwgc2tiLCBOVUxMKTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC03MjQsOCArMTIwOCwyOCBAQAogCiAJZm9yIChpID0gMDsgaSA8IGNhcmQtPm5yX3BvcnRzOyBpKyspIHsKIAkJaWYgKGNhcmQtPmF0bWRldltpXSkgeworCQkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwogCQkJZGV2X2luZm8oJmNhcmQtPmRldi0+ZGV2LCAiVW5yZWdpc3RlcmluZyBBVE0gZGV2aWNlICVkXG4iLCBjYXJkLT5hdG1kZXZbaV0tPm51bWJlcik7CisKKwkJCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2FyZC0+YXRtZGV2W2ldLT5jbGFzc19kZXYua29iaiwgJnNvbG9zX2F0dHJfZ3JvdXApOwogCQkJYXRtX2Rldl9kZXJlZ2lzdGVyKGNhcmQtPmF0bWRldltpXSk7CisKKwkJCXNrYiA9IGNhcmQtPnJ4X3NrYltpXTsKKwkJCWlmIChza2IpIHsKKwkJCQlwY2lfdW5tYXBfc2luZ2xlKGNhcmQtPmRldiwgU0tCX0NCKHNrYiktPmRtYV9hZGRyLAorCQkJCQkJIFJYX0RNQV9TSVpFLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJCX0KKwkJCXNrYiA9IGNhcmQtPnR4X3NrYltpXTsKKwkJCWlmIChza2IpIHsKKwkJCQlwY2lfdW5tYXBfc2luZ2xlKGNhcmQtPmRldiwgU0tCX0NCKHNrYiktPmRtYV9hZGRyLAorCQkJCQkJIHNrYi0+bGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCQl9CisJCQl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZjYXJkLT50eF9xdWV1ZVtpXSkpKQorCQkJCWRldl9rZnJlZV9za2Ioc2tiKTsKKyAKIAkJfQogCX0KIH0KQEAgLTczMywzMSArMTIzNywzMSBAQAogc3RhdGljIHZvaWQgZnBnYV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAlzdHJ1Y3Qgc29sb3NfY2FyZCAqY2FyZCA9IHBjaV9nZXRfZHJ2ZGF0YShkZXYpOworCQorCS8qIERpc2FibGUgSVJRcyAqLworCWlvd3JpdGUzMigwLCBjYXJkLT5jb25maWdfcmVncyArIElSUV9FTl9BRERSKTsKIAotCWlmIChkZWJ1ZykKLQkJcmV0dXJuOworCS8qIFJlc2V0IEZQR0EgKi8KKwlpb3dyaXRlMzIoMSwgY2FyZC0+Y29uZmlnX3JlZ3MgKyBGUEdBX01PREUpOworCSh2b2lkKWlvcmVhZDMyKGNhcmQtPmNvbmZpZ19yZWdzICsgRlBHQV9NT0RFKTsgCiAKIAlhdG1fcmVtb3ZlKGNhcmQpOwogCi0JZGV2X3ZkYmcoJmRldi0+ZGV2LCAiRnJlZWluZyBJUlFcbiIpOwotCS8vIERpc2FibGUgSVJRcyBmcm9tIEZQR0EKLQlpb3dyaXRlMzIoMCwgY2FyZC0+Y29uZmlnX3JlZ3MgKyBJUlFfRU5fQUREUik7CiAJZnJlZV9pcnEoZGV2LT5pcnEsIGNhcmQpOwogCXRhc2tsZXRfa2lsbCgmY2FyZC0+dGxldCk7CiAKLQkvLwlpb3dyaXRlMzIoMHgwMSxwY2lyZWdzKTsKLQlkZXZfdmRiZygmZGV2LT5kZXYsICJVbm1hcHBpbmcgUENJIHJlc291cmNlXG4iKTsKKwkvKiBSZWxlYXNlIGRldmljZSBmcm9tIHJlc2V0ICovCisJaW93cml0ZTMyKDAsIGNhcmQtPmNvbmZpZ19yZWdzICsgRlBHQV9NT0RFKTsKKwkodm9pZClpb3JlYWQzMihjYXJkLT5jb25maWdfcmVncyArIEZQR0FfTU9ERSk7IAorCiAJcGNpX2lvdW5tYXAoZGV2LCBjYXJkLT5idWZmZXJzKTsKIAlwY2lfaW91bm1hcChkZXYsIGNhcmQtPmNvbmZpZ19yZWdzKTsKIAotCWRldl92ZGJnKCZkZXYtPmRldiwgIlJlbGVhc2luZyBQQ0kgUmVnaW9uXG4iKTsKIAlwY2lfcmVsZWFzZV9yZWdpb25zKGRldik7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKGRldik7CiAKIAlwY2lfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKIAlrZnJlZShjYXJkKTsKLS8vCWRldl9kYmcoJmNhcmQtPmRldi0+ZGV2LCAiZnBnYV9yZW1vdmVcbiIpOwotCXJldHVybjsKIH0KIAogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGZwZ2FfcGNpX3RibFtdIF9fZGV2aW5pdGRhdGEgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvYmFzZS5oIGIvZHJpdmVycy9iYXNlL2Jhc2UuaAppbmRleCA5ZjUwZjFiLi5kZGM5NzQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvYmFzZS5oCisrKyBiL2RyaXZlcnMvYmFzZS9iYXNlLmgKQEAgLTYzLDYgKzYzLDMyIEBACiAjZGVmaW5lIHRvX2NsYXNzKG9iaikJXAogCWNvbnRhaW5lcl9vZihvYmosIHN0cnVjdCBjbGFzc19wcml2YXRlLCBjbGFzc19zdWJzeXMua29iaikKIAorLyoqCisgKiBzdHJ1Y3QgZGV2aWNlX3ByaXZhdGUgLSBzdHJ1Y3R1cmUgdG8gaG9sZCB0aGUgcHJpdmF0ZSB0byB0aGUgZHJpdmVyIGNvcmUgcG9ydGlvbnMgb2YgdGhlIGRldmljZSBzdHJ1Y3R1cmUuCisgKgorICogQGtsaXN0X2NoaWxkcmVuIC0ga2xpc3QgY29udGFpbmluZyBhbGwgY2hpbGRyZW4gb2YgdGhpcyBkZXZpY2UKKyAqIEBrbm9kZV9wYXJlbnQgLSBub2RlIGluIHNpYmxpbmcgbGlzdAorICogQGtub2RlX2RyaXZlciAtIG5vZGUgaW4gZHJpdmVyIGxpc3QKKyAqIEBrbm9kZV9idXMgLSBub2RlIGluIGJ1cyBsaXN0CisgKiBAZGV2aWNlIC0gcG9pbnRlciBiYWNrIHRvIHRoZSBzdHJ1Y3QgY2xhc3MgdGhhdCB0aGlzIHN0cnVjdHVyZSBpcworICogYXNzb2NpYXRlZCB3aXRoLgorICoKKyAqIE5vdGhpbmcgb3V0c2lkZSBvZiB0aGUgZHJpdmVyIGNvcmUgc2hvdWxkIGV2ZXIgdG91Y2ggdGhlc2UgZmllbGRzLgorICovCitzdHJ1Y3QgZGV2aWNlX3ByaXZhdGUgeworCXN0cnVjdCBrbGlzdCBrbGlzdF9jaGlsZHJlbjsKKwlzdHJ1Y3Qga2xpc3Rfbm9kZSBrbm9kZV9wYXJlbnQ7CisJc3RydWN0IGtsaXN0X25vZGUga25vZGVfZHJpdmVyOworCXN0cnVjdCBrbGlzdF9ub2RlIGtub2RlX2J1czsKKwlzdHJ1Y3QgZGV2aWNlICpkZXZpY2U7Cit9OworI2RlZmluZSB0b19kZXZpY2VfcHJpdmF0ZV9wYXJlbnQob2JqKQlcCisJY29udGFpbmVyX29mKG9iaiwgc3RydWN0IGRldmljZV9wcml2YXRlLCBrbm9kZV9wYXJlbnQpCisjZGVmaW5lIHRvX2RldmljZV9wcml2YXRlX2RyaXZlcihvYmopCVwKKwljb250YWluZXJfb2Yob2JqLCBzdHJ1Y3QgZGV2aWNlX3ByaXZhdGUsIGtub2RlX2RyaXZlcikKKyNkZWZpbmUgdG9fZGV2aWNlX3ByaXZhdGVfYnVzKG9iaikJXAorCWNvbnRhaW5lcl9vZihvYmosIHN0cnVjdCBkZXZpY2VfcHJpdmF0ZSwga25vZGVfYnVzKQorCiAvKiBpbml0aWFsaXNhdGlvbiBmdW5jdGlvbnMgKi8KIGV4dGVybiBpbnQgZGV2aWNlc19pbml0KHZvaWQpOwogZXh0ZXJuIGludCBidXNlc19pbml0KHZvaWQpOwpAQCAtODYsNiArMTEyLDExIEBACiAKIGV4dGVybiB2b2lkIGRyaXZlcl9kZXRhY2goc3RydWN0IGRldmljZV9kcml2ZXIgKmRydik7CiBleHRlcm4gaW50IGRyaXZlcl9wcm9iZV9kZXZpY2Uoc3RydWN0IGRldmljZV9kcml2ZXIgKmRydiwgc3RydWN0IGRldmljZSAqZGV2KTsKK3N0YXRpYyBpbmxpbmUgaW50IGRyaXZlcl9tYXRjaF9kZXZpY2Uoc3RydWN0IGRldmljZV9kcml2ZXIgKmRydiwKKwkJCQkgICAgICBzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIGRydi0+YnVzLT5tYXRjaCAmJiBkcnYtPmJ1cy0+bWF0Y2goZGV2LCBkcnYpOworfQogCiBleHRlcm4gdm9pZCBzeXNkZXZfc2h1dGRvd24odm9pZCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9idXMuYyBiL2RyaXZlcnMvYmFzZS9idXMuYwppbmRleCA4M2YzMmI4Li5kYzAzMGYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvYnVzLmMKKysrIGIvZHJpdmVycy9iYXNlL2J1cy5jCkBAIC0xOTgsNyArMTk4LDcgQEAKIAlpbnQgZXJyID0gLUVOT0RFVjsKIAogCWRldiA9IGJ1c19maW5kX2RldmljZV9ieV9uYW1lKGJ1cywgTlVMTCwgYnVmKTsKLQlpZiAoZGV2ICYmIGRldi0+ZHJpdmVyID09IE5VTEwpIHsKKwlpZiAoZGV2ICYmIGRldi0+ZHJpdmVyID09IE5VTEwgJiYgZHJpdmVyX21hdGNoX2RldmljZShkcnYsIGRldikpIHsKIAkJaWYgKGRldi0+cGFyZW50KQkvKiBOZWVkZWQgZm9yIFVTQiAqLwogCQkJZG93bigmZGV2LT5wYXJlbnQtPnNlbSk7CiAJCWRvd24oJmRldi0+c2VtKTsKQEAgLTI1Myw3ICsyNTMsMTQgQEAKIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlICpuZXh0X2RldmljZShzdHJ1Y3Qga2xpc3RfaXRlciAqaSkKIHsKIAlzdHJ1Y3Qga2xpc3Rfbm9kZSAqbiA9IGtsaXN0X25leHQoaSk7Ci0JcmV0dXJuIG4gPyBjb250YWluZXJfb2Yobiwgc3RydWN0IGRldmljZSwga25vZGVfYnVzKSA6IE5VTEw7CisJc3RydWN0IGRldmljZSAqZGV2ID0gTlVMTDsKKwlzdHJ1Y3QgZGV2aWNlX3ByaXZhdGUgKmRldl9wcnY7CisKKwlpZiAobikgeworCQlkZXZfcHJ2ID0gdG9fZGV2aWNlX3ByaXZhdGVfYnVzKG4pOworCQlkZXYgPSBkZXZfcHJ2LT5kZXZpY2U7CisJfQorCXJldHVybiBkZXY7CiB9CiAKIC8qKgpAQCAtMjg2LDcgKzI5Myw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJa2xpc3RfaXRlcl9pbml0X25vZGUoJmJ1cy0+cC0+a2xpc3RfZGV2aWNlcywgJmksCi0JCQkgICAgIChzdGFydCA/ICZzdGFydC0+a25vZGVfYnVzIDogTlVMTCkpOworCQkJICAgICAoc3RhcnQgPyAmc3RhcnQtPnAtPmtub2RlX2J1cyA6IE5VTEwpKTsKIAl3aGlsZSAoKGRldiA9IG5leHRfZGV2aWNlKCZpKSkgJiYgIWVycm9yKQogCQllcnJvciA9IGZuKGRldiwgZGF0YSk7CiAJa2xpc3RfaXRlcl9leGl0KCZpKTsKQEAgLTMyMCw3ICszMjcsNyBAQAogCQlyZXR1cm4gTlVMTDsKIAogCWtsaXN0X2l0ZXJfaW5pdF9ub2RlKCZidXMtPnAtPmtsaXN0X2RldmljZXMsICZpLAotCQkJICAgICAoc3RhcnQgPyAmc3RhcnQtPmtub2RlX2J1cyA6IE5VTEwpKTsKKwkJCSAgICAgKHN0YXJ0ID8gJnN0YXJ0LT5wLT5rbm9kZV9idXMgOiBOVUxMKSk7CiAJd2hpbGUgKChkZXYgPSBuZXh0X2RldmljZSgmaSkpKQogCQlpZiAobWF0Y2goZGV2LCBkYXRhKSAmJiBnZXRfZGV2aWNlKGRldikpCiAJCQlicmVhazsKQEAgLTUwNyw3ICs1MTQsOCBAQAogCQkJcmV0ID0gZGV2aWNlX2F0dGFjaChkZXYpOwogCQlXQVJOX09OKHJldCA8IDApOwogCQlpZiAocmV0ID49IDApCi0JCQlrbGlzdF9hZGRfdGFpbCgmZGV2LT5rbm9kZV9idXMsICZidXMtPnAtPmtsaXN0X2RldmljZXMpOworCQkJa2xpc3RfYWRkX3RhaWwoJmRldi0+cC0+a25vZGVfYnVzLAorCQkJCSAgICAgICAmYnVzLT5wLT5rbGlzdF9kZXZpY2VzKTsKIAl9CiB9CiAKQEAgLTUyOCw4ICs1MzYsOCBAQAogCQlzeXNmc19yZW1vdmVfbGluaygmZGV2LT5idXMtPnAtPmRldmljZXNfa3NldC0+a29iaiwKIAkJCQkgIGRldl9uYW1lKGRldikpOwogCQlkZXZpY2VfcmVtb3ZlX2F0dHJzKGRldi0+YnVzLCBkZXYpOwotCQlpZiAoa2xpc3Rfbm9kZV9hdHRhY2hlZCgmZGV2LT5rbm9kZV9idXMpKQotCQkJa2xpc3RfZGVsKCZkZXYtPmtub2RlX2J1cyk7CisJCWlmIChrbGlzdF9ub2RlX2F0dGFjaGVkKCZkZXYtPnAtPmtub2RlX2J1cykpCisJCQlrbGlzdF9kZWwoJmRldi0+cC0+a25vZGVfYnVzKTsKIAogCQlwcl9kZWJ1ZygiYnVzOiAnJXMnOiByZW1vdmUgZGV2aWNlICVzXG4iLAogCQkJIGRldi0+YnVzLT5uYW1lLCBkZXZfbmFtZShkZXYpKTsKQEAgLTgzMSwxNCArODM5LDE2IEBACiAKIHN0YXRpYyB2b2lkIGtsaXN0X2RldmljZXNfZ2V0KHN0cnVjdCBrbGlzdF9ub2RlICpuKQogewotCXN0cnVjdCBkZXZpY2UgKmRldiA9IGNvbnRhaW5lcl9vZihuLCBzdHJ1Y3QgZGV2aWNlLCBrbm9kZV9idXMpOworCXN0cnVjdCBkZXZpY2VfcHJpdmF0ZSAqZGV2X3BydiA9IHRvX2RldmljZV9wcml2YXRlX2J1cyhuKTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkZXZfcHJ2LT5kZXZpY2U7CiAKIAlnZXRfZGV2aWNlKGRldik7CiB9CiAKIHN0YXRpYyB2b2lkIGtsaXN0X2RldmljZXNfcHV0KHN0cnVjdCBrbGlzdF9ub2RlICpuKQogewotCXN0cnVjdCBkZXZpY2UgKmRldiA9IGNvbnRhaW5lcl9vZihuLCBzdHJ1Y3QgZGV2aWNlLCBrbm9kZV9idXMpOworCXN0cnVjdCBkZXZpY2VfcHJpdmF0ZSAqZGV2X3BydiA9IHRvX2RldmljZV9wcml2YXRlX2J1cyhuKTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkZXZfcHJ2LT5kZXZpY2U7CiAKIAlwdXRfZGV2aWNlKGRldik7CiB9CkBAIC05MzIsNiArOTQyLDcgQEAKIAlrc2V0X3VucmVnaXN0ZXIoJmJ1cy0+cC0+c3Vic3lzKTsKIAlrZnJlZShidXMtPnApOwogb3V0OgorCWJ1cy0+cCA9IE5VTEw7CiAJcmV0dXJuIHJldHZhbDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGJ1c19yZWdpc3Rlcik7CkBAIC05NTMsNiArOTY0LDcgQEAKIAlidXNfcmVtb3ZlX2ZpbGUoYnVzLCAmYnVzX2F0dHJfdWV2ZW50KTsKIAlrc2V0X3VucmVnaXN0ZXIoJmJ1cy0+cC0+c3Vic3lzKTsKIAlrZnJlZShidXMtPnApOworCWJ1cy0+cCA9IE5VTEw7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChidXNfdW5yZWdpc3Rlcik7CiAKQEAgLTk5MywxOCArMTAwNSwyMCBAQAogewogCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKIAlzdHJ1Y3Qga2xpc3Rfbm9kZSAqbjsKKwlzdHJ1Y3QgZGV2aWNlX3ByaXZhdGUgKmRldl9wcnY7CiAJc3RydWN0IGRldmljZSAqYjsKIAogCWxpc3RfZm9yX2VhY2gocG9zLCBsaXN0KSB7CiAJCW4gPSBjb250YWluZXJfb2YocG9zLCBzdHJ1Y3Qga2xpc3Rfbm9kZSwgbl9ub2RlKTsKLQkJYiA9IGNvbnRhaW5lcl9vZihuLCBzdHJ1Y3QgZGV2aWNlLCBrbm9kZV9idXMpOworCQlkZXZfcHJ2ID0gdG9fZGV2aWNlX3ByaXZhdGVfYnVzKG4pOworCQliID0gZGV2X3Bydi0+ZGV2aWNlOwogCQlpZiAoY29tcGFyZShhLCBiKSA8PSAwKSB7Ci0JCQlsaXN0X21vdmVfdGFpbCgmYS0+a25vZGVfYnVzLm5fbm9kZSwKLQkJCQkgICAgICAgJmItPmtub2RlX2J1cy5uX25vZGUpOworCQkJbGlzdF9tb3ZlX3RhaWwoJmEtPnAtPmtub2RlX2J1cy5uX25vZGUsCisJCQkJICAgICAgICZiLT5wLT5rbm9kZV9idXMubl9ub2RlKTsKIAkJCXJldHVybjsKIAkJfQogCX0KLQlsaXN0X21vdmVfdGFpbCgmYS0+a25vZGVfYnVzLm5fbm9kZSwgbGlzdCk7CisJbGlzdF9tb3ZlX3RhaWwoJmEtPnAtPmtub2RlX2J1cy5uX25vZGUsIGxpc3QpOwogfQogCiB2b2lkIGJ1c19zb3J0X2JyZWFkdGhmaXJzdChzdHJ1Y3QgYnVzX3R5cGUgKmJ1cywKQEAgLTEwMTQsNiArMTAyOCw3IEBACiAJTElTVF9IRUFEKHNvcnRlZF9kZXZpY2VzKTsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpwb3MsICp0bXA7CiAJc3RydWN0IGtsaXN0X25vZGUgKm47CisJc3RydWN0IGRldmljZV9wcml2YXRlICpkZXZfcHJ2OwogCXN0cnVjdCBkZXZpY2UgKmRldjsKIAlzdHJ1Y3Qga2xpc3QgKmRldmljZV9rbGlzdDsKIApAQCAtMTAyMiw3ICsxMDM3LDggQEAKIAlzcGluX2xvY2soJmRldmljZV9rbGlzdC0+a19sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCB0bXAsICZkZXZpY2Vfa2xpc3QtPmtfbGlzdCkgewogCQluID0gY29udGFpbmVyX29mKHBvcywgc3RydWN0IGtsaXN0X25vZGUsIG5fbm9kZSk7Ci0JCWRldiA9IGNvbnRhaW5lcl9vZihuLCBzdHJ1Y3QgZGV2aWNlLCBrbm9kZV9idXMpOworCQlkZXZfcHJ2ID0gdG9fZGV2aWNlX3ByaXZhdGVfYnVzKG4pOworCQlkZXYgPSBkZXZfcHJ2LT5kZXZpY2U7CiAJCWRldmljZV9pbnNlcnRpb25fc29ydF9rbGlzdChkZXYsICZzb3J0ZWRfZGV2aWNlcywgY29tcGFyZSk7CiAJfQogCWxpc3Rfc3BsaWNlKCZzb3J0ZWRfZGV2aWNlcywgJmRldmljZV9rbGlzdC0+a19saXN0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9jb3JlLmMgYi9kcml2ZXJzL2Jhc2UvY29yZS5jCmluZGV4IGYzZWFlNjMuLmU3M2M5MmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9jb3JlLmMKKysrIGIvZHJpdmVycy9iYXNlL2NvcmUuYwpAQCAtMTA5LDYgKzEwOSw3IEBACiBzdGF0aWMgdm9pZCBkZXZpY2VfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iaikKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXYoa29iaik7CisJc3RydWN0IGRldmljZV9wcml2YXRlICpwID0gZGV2LT5wOwogCiAJaWYgKGRldi0+cmVsZWFzZSkKIAkJZGV2LT5yZWxlYXNlKGRldik7CkBAIC0xMjAsNiArMTIxLDcgQEAKIAkJV0FSTigxLCBLRVJOX0VSUiAiRGV2aWNlICclcycgZG9lcyBub3QgaGF2ZSBhIHJlbGVhc2UoKSAiCiAJCQkiZnVuY3Rpb24sIGl0IGlzIGJyb2tlbiBhbmQgbXVzdCBiZSBmaXhlZC5cbiIsCiAJCQlkZXZfbmFtZShkZXYpKTsKKwlrZnJlZShwKTsKIH0KIAogc3RhdGljIHN0cnVjdCBrb2JqX3R5cGUgZGV2aWNlX2t0eXBlID0gewpAQCAtMTM0LDggKzEzNiw2IEBACiAKIAlpZiAoa3R5cGUgPT0gJmRldmljZV9rdHlwZSkgewogCQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXYoa29iaik7Ci0JCWlmIChkZXYtPnVldmVudF9zdXBwcmVzcykKLQkJCXJldHVybiAwOwogCQlpZiAoZGV2LT5idXMpCiAJCQlyZXR1cm4gMTsKIAkJaWYgKGRldi0+Y2xhc3MpCkBAIC01MDcsMTQgKzUwNywxNiBAQAogCiBzdGF0aWMgdm9pZCBrbGlzdF9jaGlsZHJlbl9nZXQoc3RydWN0IGtsaXN0X25vZGUgKm4pCiB7Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gY29udGFpbmVyX29mKG4sIHN0cnVjdCBkZXZpY2UsIGtub2RlX3BhcmVudCk7CisJc3RydWN0IGRldmljZV9wcml2YXRlICpwID0gdG9fZGV2aWNlX3ByaXZhdGVfcGFyZW50KG4pOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHAtPmRldmljZTsKIAogCWdldF9kZXZpY2UoZGV2KTsKIH0KIAogc3RhdGljIHZvaWQga2xpc3RfY2hpbGRyZW5fcHV0KHN0cnVjdCBrbGlzdF9ub2RlICpuKQogewotCXN0cnVjdCBkZXZpY2UgKmRldiA9IGNvbnRhaW5lcl9vZihuLCBzdHJ1Y3QgZGV2aWNlLCBrbm9kZV9wYXJlbnQpOworCXN0cnVjdCBkZXZpY2VfcHJpdmF0ZSAqcCA9IHRvX2RldmljZV9wcml2YXRlX3BhcmVudChuKTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBwLT5kZXZpY2U7CiAKIAlwdXRfZGV2aWNlKGRldik7CiB9CkBAIC01MzgsOCArNTQwLDYgQEAKIHsKIAlkZXYtPmtvYmoua3NldCA9IGRldmljZXNfa3NldDsKIAlrb2JqZWN0X2luaXQoJmRldi0+a29iaiwgJmRldmljZV9rdHlwZSk7Ci0Ja2xpc3RfaW5pdCgmZGV2LT5rbGlzdF9jaGlsZHJlbiwga2xpc3RfY2hpbGRyZW5fZ2V0LAotCQkgICBrbGlzdF9jaGlsZHJlbl9wdXQpOwogCUlOSVRfTElTVF9IRUFEKCZkZXYtPmRtYV9wb29scyk7CiAJaW5pdF9NVVRFWCgmZGV2LT5zZW0pOwogCXNwaW5fbG9ja19pbml0KCZkZXYtPmRldnJlc19sb2NrKTsKQEAgLTc3NywxNyArNzc3LDEyIEBACiBpbnQgZGV2X3NldF9uYW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqZm10LCAuLi4pCiB7CiAJdmFfbGlzdCB2YXJnczsKLQljaGFyICpzOworCWludCBlcnI7CiAKIAl2YV9zdGFydCh2YXJncywgZm10KTsKLQl2c25wcmludGYoZGV2LT5idXNfaWQsIHNpemVvZihkZXYtPmJ1c19pZCksIGZtdCwgdmFyZ3MpOworCWVyciA9IGtvYmplY3Rfc2V0X25hbWVfdmFyZ3MoJmRldi0+a29iaiwgZm10LCB2YXJncyk7CiAJdmFfZW5kKHZhcmdzKTsKLQotCS8qIGV3d3cuLi4gc29tZSBvZiB0aGVzZSBidWdnZXJzIGhhdmUgLyBpbiB0aGUgbmFtZS4uLiAqLwotCXdoaWxlICgocyA9IHN0cmNocihkZXYtPmJ1c19pZCwgJy8nKSkpCi0JCSpzID0gJyEnOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIGVycjsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGRldl9zZXRfbmFtZSk7CiAKQEAgLTg2NCwxMiArODU5LDI2IEBACiAJaWYgKCFkZXYpCiAJCWdvdG8gZG9uZTsKIAotCS8qIFRlbXBvcmFyaWx5IHN1cHBvcnQgaW5pdF9uYW1lIGlmIGl0IGlzIHNldC4KLQkgKiBJdCB3aWxsIG92ZXJyaWRlIGJ1c19pZCBmb3Igbm93ICovCi0JaWYgKGRldi0+aW5pdF9uYW1lKQotCQlkZXZfc2V0X25hbWUoZGV2LCAiJXMiLCBkZXYtPmluaXRfbmFtZSk7CisJZGV2LT5wID0ga3phbGxvYyhzaXplb2YoKmRldi0+cCksIEdGUF9LRVJORUwpOworCWlmICghZGV2LT5wKSB7CisJCWVycm9yID0gLUVOT01FTTsKKwkJZ290byBkb25lOworCX0KKwlkZXYtPnAtPmRldmljZSA9IGRldjsKKwlrbGlzdF9pbml0KCZkZXYtPnAtPmtsaXN0X2NoaWxkcmVuLCBrbGlzdF9jaGlsZHJlbl9nZXQsCisJCSAgIGtsaXN0X2NoaWxkcmVuX3B1dCk7CiAKLQlpZiAoIXN0cmxlbihkZXYtPmJ1c19pZCkpCisJLyoKKwkgKiBmb3Igc3RhdGljYWxseSBhbGxvY2F0ZWQgZGV2aWNlcywgd2hpY2ggc2hvdWxkIGFsbCBiZSBjb252ZXJ0ZWQKKwkgKiBzb21lIGRheSwgd2UgbmVlZCB0byBpbml0aWFsaXplIHRoZSBuYW1lLiBXZSBwcmV2ZW50IHJlYWRpbmcgYmFjaworCSAqIHRoZSBuYW1lLCBhbmQgZm9yY2UgdGhlIHVzZSBvZiBkZXZfbmFtZSgpCisJICovCisJaWYgKGRldi0+aW5pdF9uYW1lKSB7CisJCWRldl9zZXRfbmFtZShkZXYsIGRldi0+aW5pdF9uYW1lKTsKKwkJZGV2LT5pbml0X25hbWUgPSBOVUxMOworCX0KKworCWlmICghZGV2X25hbWUoZGV2KSkKIAkJZ290byBkb25lOwogCiAJcHJfZGVidWcoImRldmljZTogJyVzJzogJXNcbiIsIGRldl9uYW1lKGRldiksIF9fZnVuY19fKTsKQEAgLTkyOCw3ICs5MzcsOCBAQAogCWtvYmplY3RfdWV2ZW50KCZkZXYtPmtvYmosIEtPQkpfQUREKTsKIAlidXNfYXR0YWNoX2RldmljZShkZXYpOwogCWlmIChwYXJlbnQpCi0JCWtsaXN0X2FkZF90YWlsKCZkZXYtPmtub2RlX3BhcmVudCwgJnBhcmVudC0+a2xpc3RfY2hpbGRyZW4pOworCQlrbGlzdF9hZGRfdGFpbCgmZGV2LT5wLT5rbm9kZV9wYXJlbnQsCisJCQkgICAgICAgJnBhcmVudC0+cC0+a2xpc3RfY2hpbGRyZW4pOwogCiAJaWYgKGRldi0+Y2xhc3MpIHsKIAkJbXV0ZXhfbG9jaygmZGV2LT5jbGFzcy0+cC0+Y2xhc3NfbXV0ZXgpOwpAQCAtMTA0Miw3ICsxMDUyLDcgQEAKIAlkZXZpY2VfcG1fcmVtb3ZlKGRldik7CiAJZHBtX3N5c2ZzX3JlbW92ZShkZXYpOwogCWlmIChwYXJlbnQpCi0JCWtsaXN0X2RlbCgmZGV2LT5rbm9kZV9wYXJlbnQpOworCQlrbGlzdF9kZWwoJmRldi0+cC0+a25vZGVfcGFyZW50KTsKIAlpZiAoTUFKT1IoZGV2LT5kZXZ0KSkgewogCQlkZXZpY2VfcmVtb3ZlX3N5c19kZXZfZW50cnkoZGV2KTsKIAkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldnRfYXR0cik7CkBAIC0xMTAzLDcgKzExMTMsMTQgQEAKIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlICpuZXh0X2RldmljZShzdHJ1Y3Qga2xpc3RfaXRlciAqaSkKIHsKIAlzdHJ1Y3Qga2xpc3Rfbm9kZSAqbiA9IGtsaXN0X25leHQoaSk7Ci0JcmV0dXJuIG4gPyBjb250YWluZXJfb2Yobiwgc3RydWN0IGRldmljZSwga25vZGVfcGFyZW50KSA6IE5VTEw7CisJc3RydWN0IGRldmljZSAqZGV2ID0gTlVMTDsKKwlzdHJ1Y3QgZGV2aWNlX3ByaXZhdGUgKnA7CisKKwlpZiAobikgeworCQlwID0gdG9fZGV2aWNlX3ByaXZhdGVfcGFyZW50KG4pOworCQlkZXYgPSBwLT5kZXZpY2U7CisJfQorCXJldHVybiBkZXY7CiB9CiAKIC8qKgpAQCAtMTEyNSw3ICsxMTQyLDcgQEAKIAlzdHJ1Y3QgZGV2aWNlICpjaGlsZDsKIAlpbnQgZXJyb3IgPSAwOwogCi0Ja2xpc3RfaXRlcl9pbml0KCZwYXJlbnQtPmtsaXN0X2NoaWxkcmVuLCAmaSk7CisJa2xpc3RfaXRlcl9pbml0KCZwYXJlbnQtPnAtPmtsaXN0X2NoaWxkcmVuLCAmaSk7CiAJd2hpbGUgKChjaGlsZCA9IG5leHRfZGV2aWNlKCZpKSkgJiYgIWVycm9yKQogCQllcnJvciA9IGZuKGNoaWxkLCBkYXRhKTsKIAlrbGlzdF9pdGVyX2V4aXQoJmkpOwpAQCAtMTE1Niw3ICsxMTczLDcgQEAKIAlpZiAoIXBhcmVudCkKIAkJcmV0dXJuIE5VTEw7CiAKLQlrbGlzdF9pdGVyX2luaXQoJnBhcmVudC0+a2xpc3RfY2hpbGRyZW4sICZpKTsKKwlrbGlzdF9pdGVyX2luaXQoJnBhcmVudC0+cC0+a2xpc3RfY2hpbGRyZW4sICZpKTsKIAl3aGlsZSAoKGNoaWxkID0gbmV4dF9kZXZpY2UoJmkpKSkKIAkJaWYgKG1hdGNoKGNoaWxkLCBkYXRhKSAmJiBnZXRfZGV2aWNlKGNoaWxkKSkKIAkJCWJyZWFrOwpAQCAtMTM0OCw3ICsxMzY1LDEwIEBACiAJZGV2LT5yZWxlYXNlID0gZGV2aWNlX2NyZWF0ZV9yZWxlYXNlOwogCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGRydmRhdGEpOwogCi0JdnNucHJpbnRmKGRldi0+YnVzX2lkLCBCVVNfSURfU0laRSwgZm10LCBhcmdzKTsKKwlyZXR2YWwgPSBrb2JqZWN0X3NldF9uYW1lX3ZhcmdzKCZkZXYtPmtvYmosIGZtdCwgYXJncyk7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJvcjsKKwogCXJldHZhbCA9IGRldmljZV9yZWdpc3RlcihkZXYpOwogCWlmIChyZXR2YWwpCiAJCWdvdG8gZXJyb3I7CkBAIC0xNDUyLDE5ICsxNDcyLDE1IEBACiAJCW9sZF9jbGFzc19uYW1lID0gbWFrZV9jbGFzc19uYW1lKGRldi0+Y2xhc3MtPm5hbWUsICZkZXYtPmtvYmopOwogI2VuZGlmCiAKLQlvbGRfZGV2aWNlX25hbWUgPSBrbWFsbG9jKEJVU19JRF9TSVpFLCBHRlBfS0VSTkVMKTsKKwlvbGRfZGV2aWNlX25hbWUgPSBrc3RyZHVwKGRldl9uYW1lKGRldiksIEdGUF9LRVJORUwpOwogCWlmICghb2xkX2RldmljZV9uYW1lKSB7CiAJCWVycm9yID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CiAJfQotCXN0cmxjcHkob2xkX2RldmljZV9uYW1lLCBkZXYtPmJ1c19pZCwgQlVTX0lEX1NJWkUpOwotCXN0cmxjcHkoZGV2LT5idXNfaWQsIG5ld19uYW1lLCBCVVNfSURfU0laRSk7CiAKIAllcnJvciA9IGtvYmplY3RfcmVuYW1lKCZkZXYtPmtvYmosIG5ld19uYW1lKTsKLQlpZiAoZXJyb3IpIHsKLQkJc3RybGNweShkZXYtPmJ1c19pZCwgb2xkX2RldmljZV9uYW1lLCBCVVNfSURfU0laRSk7CisJaWYgKGVycm9yKQogCQlnb3RvIG91dDsKLQl9CiAKICNpZmRlZiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRAogCWlmIChvbGRfY2xhc3NfbmFtZSkgewpAQCAtMTU0NSw4ICsxNTYxLDEwIEBACiAgKiBkZXZpY2VfbW92ZSAtIG1vdmVzIGEgZGV2aWNlIHRvIGEgbmV3IHBhcmVudAogICogQGRldjogdGhlIHBvaW50ZXIgdG8gdGhlIHN0cnVjdCBkZXZpY2UgdG8gYmUgbW92ZWQKICAqIEBuZXdfcGFyZW50OiB0aGUgbmV3IHBhcmVudCBvZiB0aGUgZGV2aWNlIChjYW4gYnkgTlVMTCkKKyAqIEBkcG1fb3JkZXI6IGhvdyB0byByZW9yZGVyIHRoZSBkcG1fbGlzdAogICovCi1pbnQgZGV2aWNlX21vdmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICpuZXdfcGFyZW50KQoraW50IGRldmljZV9tb3ZlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbmV3X3BhcmVudCwKKwkJZW51bSBkcG1fb3JkZXIgZHBtX29yZGVyKQogewogCWludCBlcnJvcjsKIAlzdHJ1Y3QgZGV2aWNlICpvbGRfcGFyZW50OwpAQCAtMTU1Niw2ICsxNTc0LDcgQEAKIAlpZiAoIWRldikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwlkZXZpY2VfcG1fbG9jaygpOwogCW5ld19wYXJlbnQgPSBnZXRfZGV2aWNlKG5ld19wYXJlbnQpOwogCW5ld19wYXJlbnRfa29iaiA9IGdldF9kZXZpY2VfcGFyZW50KGRldiwgbmV3X3BhcmVudCk7CiAKQEAgLTE1NzAsOSArMTU4OSwxMCBAQAogCW9sZF9wYXJlbnQgPSBkZXYtPnBhcmVudDsKIAlkZXYtPnBhcmVudCA9IG5ld19wYXJlbnQ7CiAJaWYgKG9sZF9wYXJlbnQpCi0JCWtsaXN0X3JlbW92ZSgmZGV2LT5rbm9kZV9wYXJlbnQpOworCQlrbGlzdF9yZW1vdmUoJmRldi0+cC0+a25vZGVfcGFyZW50KTsKIAlpZiAobmV3X3BhcmVudCkgewotCQlrbGlzdF9hZGRfdGFpbCgmZGV2LT5rbm9kZV9wYXJlbnQsICZuZXdfcGFyZW50LT5rbGlzdF9jaGlsZHJlbik7CisJCWtsaXN0X2FkZF90YWlsKCZkZXYtPnAtPmtub2RlX3BhcmVudCwKKwkJCSAgICAgICAmbmV3X3BhcmVudC0+cC0+a2xpc3RfY2hpbGRyZW4pOwogCQlzZXRfZGV2X25vZGUoZGV2LCBkZXZfdG9fbm9kZShuZXdfcGFyZW50KSk7CiAJfQogCkBAIC0xNTg0LDExICsxNjA0LDExIEBACiAJCWRldmljZV9tb3ZlX2NsYXNzX2xpbmtzKGRldiwgbmV3X3BhcmVudCwgb2xkX3BhcmVudCk7CiAJCWlmICgha29iamVjdF9tb3ZlKCZkZXYtPmtvYmosICZvbGRfcGFyZW50LT5rb2JqKSkgewogCQkJaWYgKG5ld19wYXJlbnQpCi0JCQkJa2xpc3RfcmVtb3ZlKCZkZXYtPmtub2RlX3BhcmVudCk7CisJCQkJa2xpc3RfcmVtb3ZlKCZkZXYtPnAtPmtub2RlX3BhcmVudCk7CiAJCQlkZXYtPnBhcmVudCA9IG9sZF9wYXJlbnQ7CiAJCQlpZiAob2xkX3BhcmVudCkgewotCQkJCWtsaXN0X2FkZF90YWlsKCZkZXYtPmtub2RlX3BhcmVudCwKLQkJCQkJICAgICAgICZvbGRfcGFyZW50LT5rbGlzdF9jaGlsZHJlbik7CisJCQkJa2xpc3RfYWRkX3RhaWwoJmRldi0+cC0+a25vZGVfcGFyZW50LAorCQkJCQkgICAgICAgJm9sZF9wYXJlbnQtPnAtPmtsaXN0X2NoaWxkcmVuKTsKIAkJCQlzZXRfZGV2X25vZGUoZGV2LCBkZXZfdG9fbm9kZShvbGRfcGFyZW50KSk7CiAJCQl9CiAJCX0KQEAgLTE1OTYsOSArMTYxNiwyMyBAQAogCQlwdXRfZGV2aWNlKG5ld19wYXJlbnQpOwogCQlnb3RvIG91dDsKIAl9CisJc3dpdGNoIChkcG1fb3JkZXIpIHsKKwljYXNlIERQTV9PUkRFUl9OT05FOgorCQlicmVhazsKKwljYXNlIERQTV9PUkRFUl9ERVZfQUZURVJfUEFSRU5UOgorCQlkZXZpY2VfcG1fbW92ZV9hZnRlcihkZXYsIG5ld19wYXJlbnQpOworCQlicmVhazsKKwljYXNlIERQTV9PUkRFUl9QQVJFTlRfQkVGT1JFX0RFVjoKKwkJZGV2aWNlX3BtX21vdmVfYmVmb3JlKG5ld19wYXJlbnQsIGRldik7CisJCWJyZWFrOworCWNhc2UgRFBNX09SREVSX0RFVl9MQVNUOgorCQlkZXZpY2VfcG1fbW92ZV9sYXN0KGRldik7CisJCWJyZWFrOworCX0KIG91dF9wdXQ6CiAJcHV0X2RldmljZShvbGRfcGFyZW50KTsKIG91dDoKKwlkZXZpY2VfcG1fdW5sb2NrKCk7CiAJcHV0X2RldmljZShkZXYpOwogCXJldHVybiBlcnJvcjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9kZC5jIGIvZHJpdmVycy9iYXNlL2RkLmMKaW5kZXggMTM1MjMxMi4uZjE3YzMyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2RkLmMKKysrIGIvZHJpdmVycy9iYXNlL2RkLmMKQEAgLTMwLDcgKzMwLDcgQEAKIAogc3RhdGljIHZvaWQgZHJpdmVyX2JvdW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlpZiAoa2xpc3Rfbm9kZV9hdHRhY2hlZCgmZGV2LT5rbm9kZV9kcml2ZXIpKSB7CisJaWYgKGtsaXN0X25vZGVfYXR0YWNoZWQoJmRldi0+cC0+a25vZGVfZHJpdmVyKSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZGV2aWNlICVzIGFscmVhZHkgYm91bmRcbiIsCiAJCQlfX2Z1bmNfXywga29iamVjdF9uYW1lKCZkZXYtPmtvYmopKTsKIAkJcmV0dXJuOwpAQCAtNDMsNyArNDMsNyBAQAogCQlibG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluKCZkZXYtPmJ1cy0+cC0+YnVzX25vdGlmaWVyLAogCQkJCQkgICAgIEJVU19OT1RJRllfQk9VTkRfRFJJVkVSLCBkZXYpOwogCi0Ja2xpc3RfYWRkX3RhaWwoJmRldi0+a25vZGVfZHJpdmVyLCAmZGV2LT5kcml2ZXItPnAtPmtsaXN0X2RldmljZXMpOworCWtsaXN0X2FkZF90YWlsKCZkZXYtPnAtPmtub2RlX2RyaXZlciwgJmRldi0+ZHJpdmVyLT5wLT5rbGlzdF9kZXZpY2VzKTsKIH0KIAogc3RhdGljIGludCBkcml2ZXJfc3lzZnNfYWRkKHN0cnVjdCBkZXZpY2UgKmRldikKQEAgLTE3MiwxNiArMTcyLDEyIEBACiAvKioKICAqIHdhaXRfZm9yX2RldmljZV9wcm9iZQogICogV2FpdCBmb3IgZGV2aWNlIHByb2JpbmcgdG8gYmUgY29tcGxldGVkLgotICoKLSAqIE5vdGU6IHRoaXMgZnVuY3Rpb24gcG9sbHMgYXQgMTAwIG1zZWMgaW50ZXJ2YWxzLgogICovCi1pbnQgd2FpdF9mb3JfZGV2aWNlX3Byb2JlKHZvaWQpCit2b2lkIHdhaXRfZm9yX2RldmljZV9wcm9iZSh2b2lkKQogewogCS8qIHdhaXQgZm9yIHRoZSBrbm93biBkZXZpY2VzIHRvIGNvbXBsZXRlIHRoZWlyIHByb2JpbmcgKi8KLQl3aGlsZSAoZHJpdmVyX3Byb2JlX2RvbmUoKSAhPSAwKQotCQltc2xlZXAoMTAwKTsKKwl3YWl0X2V2ZW50KHByb2JlX3dhaXRxdWV1ZSwgYXRvbWljX3JlYWQoJnByb2JlX2NvdW50KSA9PSAwKTsKIAlhc3luY19zeW5jaHJvbml6ZV9mdWxsKCk7Ci0JcmV0dXJuIDA7CiB9CiAKIC8qKgpAQCAtMTg5LDE0ICsxODUsOCBAQAogICogQGRydjogZHJpdmVyIHRvIGJpbmQgYSBkZXZpY2UgdG8KICAqIEBkZXY6IGRldmljZSB0byB0cnkgdG8gYmluZCB0byB0aGUgZHJpdmVyCiAgKgotICogRmlyc3QsIHdlIGNhbGwgdGhlIGJ1cydzIG1hdGNoIGZ1bmN0aW9uLCBpZiBvbmUgcHJlc2VudCwgd2hpY2ggc2hvdWxkCi0gKiBjb21wYXJlIHRoZSBkZXZpY2UgSURzIHRoZSBkcml2ZXIgc3VwcG9ydHMgd2l0aCB0aGUgZGV2aWNlIElEcyBvZiB0aGUKLSAqIGRldmljZS4gTm90ZSB3ZSBkb24ndCBkbyB0aGlzIG91cnNlbHZlcyBiZWNhdXNlIHdlIGRvbid0IGtub3cgdGhlCi0gKiBmb3JtYXQgb2YgdGhlIElEIHN0cnVjdHVyZXMsIG5vciB3aGF0IGlzIHRvIGJlIGNvbnNpZGVyZWQgYSBtYXRjaCBhbmQKLSAqIHdoYXQgaXMgbm90LgotICoKLSAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAxIGlmIGEgbWF0Y2ggaXMgZm91bmQsIC1FTk9ERVYgaWYgdGhlIGRldmljZSBpcwotICogbm90IHJlZ2lzdGVyZWQsIGFuZCAwIG90aGVyd2lzZS4KKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAtRU5PREVWIGlmIHRoZSBkZXZpY2UgaXMgbm90IHJlZ2lzdGVyZWQsCisgKiAxIGlmIHRoZSBkZXZpY2UgaXMgYm91bmQgc3VjZXNzZnVsbHkgYW5kIDAgb3RoZXJ3aXNlLgogICoKICAqIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgd2l0aCBAZGV2LT5zZW0gaGVsZC4gIFdoZW4gY2FsbGVkIGZvciBhCiAgKiBVU0IgaW50ZXJmYWNlLCBAZGV2LT5wYXJlbnQtPnNlbSBtdXN0IGJlIGhlbGQgYXMgd2VsbC4KQEAgLTIwNywyMSArMTk3LDIyIEBACiAKIAlpZiAoIWRldmljZV9pc19yZWdpc3RlcmVkKGRldikpCiAJCXJldHVybiAtRU5PREVWOwotCWlmIChkcnYtPmJ1cy0+bWF0Y2ggJiYgIWRydi0+YnVzLT5tYXRjaChkZXYsIGRydikpCi0JCWdvdG8gZG9uZTsKIAogCXByX2RlYnVnKCJidXM6ICclcyc6ICVzOiBtYXRjaGVkIGRldmljZSAlcyB3aXRoIGRyaXZlciAlc1xuIiwKIAkJIGRydi0+YnVzLT5uYW1lLCBfX2Z1bmNfXywgZGV2X25hbWUoZGV2KSwgZHJ2LT5uYW1lKTsKIAogCXJldCA9IHJlYWxseV9wcm9iZShkZXYsIGRydik7CiAKLWRvbmU6CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBfX2RldmljZV9hdHRhY2goc3RydWN0IGRldmljZV9kcml2ZXIgKmRydiwgdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkYXRhOworCisJaWYgKCFkcml2ZXJfbWF0Y2hfZGV2aWNlKGRydiwgZGV2KSkKKwkJcmV0dXJuIDA7CisKIAlyZXR1cm4gZHJpdmVyX3Byb2JlX2RldmljZShkcnYsIGRldik7CiB9CiAKQEAgLTI3NCw3ICsyNjUsNyBAQAogCSAqIGlzIGFuIGVycm9yLgogCSAqLwogCi0JaWYgKGRydi0+YnVzLT5tYXRjaCAmJiAhZHJ2LT5idXMtPm1hdGNoKGRldiwgZHJ2KSkKKwlpZiAoIWRyaXZlcl9tYXRjaF9kZXZpY2UoZHJ2LCBkZXYpKQogCQlyZXR1cm4gMDsKIAogCWlmIChkZXYtPnBhcmVudCkJLyogTmVlZGVkIGZvciBVU0IgKi8KQEAgLTMyNyw3ICszMTgsNyBAQAogCQkJZHJ2LT5yZW1vdmUoZGV2KTsKIAkJZGV2cmVzX3JlbGVhc2VfYWxsKGRldik7CiAJCWRldi0+ZHJpdmVyID0gTlVMTDsKLQkJa2xpc3RfcmVtb3ZlKCZkZXYtPmtub2RlX2RyaXZlcik7CisJCWtsaXN0X3JlbW92ZSgmZGV2LT5wLT5rbm9kZV9kcml2ZXIpOwogCX0KIH0KIApAQCAtMzU3LDYgKzM0OCw3IEBACiAgKi8KIHZvaWQgZHJpdmVyX2RldGFjaChzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2KQogeworCXN0cnVjdCBkZXZpY2VfcHJpdmF0ZSAqZGV2X3BydjsKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAKIAlmb3IgKDs7KSB7CkBAIC0zNjUsOCArMzU3LDEwIEBACiAJCQlzcGluX3VubG9jaygmZHJ2LT5wLT5rbGlzdF9kZXZpY2VzLmtfbG9jayk7CiAJCQlicmVhazsKIAkJfQotCQlkZXYgPSBsaXN0X2VudHJ5KGRydi0+cC0+a2xpc3RfZGV2aWNlcy5rX2xpc3QucHJldiwKLQkJCQlzdHJ1Y3QgZGV2aWNlLCBrbm9kZV9kcml2ZXIubl9ub2RlKTsKKwkJZGV2X3BydiA9IGxpc3RfZW50cnkoZHJ2LT5wLT5rbGlzdF9kZXZpY2VzLmtfbGlzdC5wcmV2LAorCQkJCSAgICAgc3RydWN0IGRldmljZV9wcml2YXRlLAorCQkJCSAgICAga25vZGVfZHJpdmVyLm5fbm9kZSk7CisJCWRldiA9IGRldl9wcnYtPmRldmljZTsKIAkJZ2V0X2RldmljZShkZXYpOwogCQlzcGluX3VubG9jaygmZHJ2LT5wLT5rbGlzdF9kZXZpY2VzLmtfbG9jayk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9kcml2ZXIuYyBiL2RyaXZlcnMvYmFzZS9kcml2ZXIuYwppbmRleCAxZTJiZGE3Li5jNTFmMTFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvZHJpdmVyLmMKKysrIGIvZHJpdmVycy9iYXNlL2RyaXZlci5jCkBAIC0xOSw3ICsxOSwxNCBAQAogc3RhdGljIHN0cnVjdCBkZXZpY2UgKm5leHRfZGV2aWNlKHN0cnVjdCBrbGlzdF9pdGVyICppKQogewogCXN0cnVjdCBrbGlzdF9ub2RlICpuID0ga2xpc3RfbmV4dChpKTsKLQlyZXR1cm4gbiA/IGNvbnRhaW5lcl9vZihuLCBzdHJ1Y3QgZGV2aWNlLCBrbm9kZV9kcml2ZXIpIDogTlVMTDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBOVUxMOworCXN0cnVjdCBkZXZpY2VfcHJpdmF0ZSAqZGV2X3BydjsKKworCWlmIChuKSB7CisJCWRldl9wcnYgPSB0b19kZXZpY2VfcHJpdmF0ZV9kcml2ZXIobik7CisJCWRldiA9IGRldl9wcnYtPmRldmljZTsKKwl9CisJcmV0dXJuIGRldjsKIH0KIAogLyoqCkBAIC00Miw3ICs0OSw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJa2xpc3RfaXRlcl9pbml0X25vZGUoJmRydi0+cC0+a2xpc3RfZGV2aWNlcywgJmksCi0JCQkgICAgIHN0YXJ0ID8gJnN0YXJ0LT5rbm9kZV9kcml2ZXIgOiBOVUxMKTsKKwkJCSAgICAgc3RhcnQgPyAmc3RhcnQtPnAtPmtub2RlX2RyaXZlciA6IE5VTEwpOwogCXdoaWxlICgoZGV2ID0gbmV4dF9kZXZpY2UoJmkpKSAmJiAhZXJyb3IpCiAJCWVycm9yID0gZm4oZGV2LCBkYXRhKTsKIAlrbGlzdF9pdGVyX2V4aXQoJmkpOwpAQCAtNzYsNyArODMsNyBAQAogCQlyZXR1cm4gTlVMTDsKIAogCWtsaXN0X2l0ZXJfaW5pdF9ub2RlKCZkcnYtPnAtPmtsaXN0X2RldmljZXMsICZpLAotCQkJICAgICAoc3RhcnQgPyAmc3RhcnQtPmtub2RlX2RyaXZlciA6IE5VTEwpKTsKKwkJCSAgICAgKHN0YXJ0ID8gJnN0YXJ0LT5wLT5rbm9kZV9kcml2ZXIgOiBOVUxMKSk7CiAJd2hpbGUgKChkZXYgPSBuZXh0X2RldmljZSgmaSkpKQogCQlpZiAobWF0Y2goZGV2LCBkYXRhKSAmJiBnZXRfZGV2aWNlKGRldikpCiAJCQlicmVhazsKQEAgLTIxNiw2ICsyMjMsOCBAQAogCWludCByZXQ7CiAJc3RydWN0IGRldmljZV9kcml2ZXIgKm90aGVyOwogCisJQlVHX09OKCFkcnYtPmJ1cy0+cCk7CisKIAlpZiAoKGRydi0+YnVzLT5wcm9iZSAmJiBkcnYtPnByb2JlKSB8fAogCSAgICAoZHJ2LT5idXMtPnJlbW92ZSAmJiBkcnYtPnJlbW92ZSkgfHwKIAkgICAgKGRydi0+YnVzLT5zaHV0ZG93biAmJiBkcnYtPnNodXRkb3duKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9maXJtd2FyZV9jbGFzcy5jIGIvZHJpdmVycy9iYXNlL2Zpcm13YXJlX2NsYXNzLmMKaW5kZXggNDQ2OTlkOS4uZDNhNTljNjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9maXJtd2FyZV9jbGFzcy5jCisrKyBiL2RyaXZlcnMvYmFzZS9maXJtd2FyZV9jbGFzcy5jCkBAIC0zMTksNyArMzE5LDcgQEAKIAlmX2Rldi0+cGFyZW50ID0gZGV2aWNlOwogCWZfZGV2LT5jbGFzcyA9ICZmaXJtd2FyZV9jbGFzczsKIAlkZXZfc2V0X2RydmRhdGEoZl9kZXYsIGZ3X3ByaXYpOwotCWZfZGV2LT51ZXZlbnRfc3VwcHJlc3MgPSAxOworCWRldl9zZXRfdWV2ZW50X3N1cHByZXNzKGZfZGV2LCAxKTsKIAlyZXR2YWwgPSBkZXZpY2VfcmVnaXN0ZXIoZl9kZXYpOwogCWlmIChyZXR2YWwpIHsKIAkJZGV2X2VycihkZXZpY2UsICIlczogZGV2aWNlX3JlZ2lzdGVyIGZhaWxlZFxuIiwgX19mdW5jX18pOwpAQCAtMzY2LDcgKzM2Niw3IEBACiAJfQogCiAJaWYgKHVldmVudCkKLQkJZl9kZXYtPnVldmVudF9zdXBwcmVzcyA9IDA7CisJCWRldl9zZXRfdWV2ZW50X3N1cHByZXNzKGZfZGV2LCAwKTsKIAkqZGV2X3AgPSBmX2RldjsKIAlnb3RvIG91dDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3BsYXRmb3JtLmMgYi9kcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYwppbmRleCAzNDlhMTAxLi5kMjE5OGY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYworKysgYi9kcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYwpAQCAtMjE3LDYgKzIxNyw3IEBACiAJaWYgKGQpIHsKIAkJbWVtY3B5KGQsIGRhdGEsIHNpemUpOwogCQlwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSA9IGQ7CisJCXBkZXYtPnBsYXRmb3JtX2RhdGEgPSBkOwogCX0KIAlyZXR1cm4gZCA/IDAgOiAtRU5PTUVNOwogfQpAQCAtMjQ2LDYgKzI0NywyMSBAQAogCWVsc2UKIAkJZGV2X3NldF9uYW1lKCZwZGV2LT5kZXYsIHBkZXYtPm5hbWUpOwogCisJLyogV2Ugd2lsbCByZW1vdmUgcGxhdGZvcm1fZGF0YSBmaWVsZCBmcm9tIHN0cnVjdCBkZXZpY2UKKwkqIGlmIGFsbCBwbGF0Zm9ybSBkZXZpY2VzIHBhc3MgaXRzIHBsYXRmb3JtIHNwZWNpZmljIGRhdGEKKwkqIGZyb20gcGxhdGZvcm1fZGV2aWNlLiBUaGUgY29udmVyc2lvbiBpcyBnb2luZyB0byBiZSBhCisJKiBsb25nIHRpbWUsIHNvIHdlIGFsbG93IHRoZSB0d28gY2FzZXMgY29leGlzdCB0byBtYWtlCisJKiB0aGlzIGtpbmQgb2YgZml4IG1vcmUgZWFzaWx5Ki8KKwlpZiAocGRldi0+cGxhdGZvcm1fZGF0YSAmJiBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiJXM6IHVzZSB3aGljaCBwbGF0Zm9ybV9kYXRhP1xuIiwKKwkJCSAgICAgICBkZXZfbmFtZSgmcGRldi0+ZGV2KSk7CisJfSBlbHNlIGlmIChwZGV2LT5wbGF0Zm9ybV9kYXRhKSB7CisJCXBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhID0gcGRldi0+cGxhdGZvcm1fZGF0YTsKKwl9IGVsc2UgaWYgKHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhKSB7CisJCXBkZXYtPnBsYXRmb3JtX2RhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwl9CisKIAlmb3IgKGkgPSAwOyBpIDwgcGRldi0+bnVtX3Jlc291cmNlczsgaSsrKSB7CiAJCXN0cnVjdCByZXNvdXJjZSAqcCwgKnIgPSAmcGRldi0+cmVzb3VyY2VbaV07CiAKQEAgLTU4NCwxMCArNjAwLDI1IEBACiB7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZQkqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCi0JYWRkX3VldmVudF92YXIoZW52LCAiTU9EQUxJQVM9cGxhdGZvcm06JXMiLCBwZGV2LT5uYW1lKTsKKwlhZGRfdWV2ZW50X3ZhcihlbnYsICJNT0RBTElBUz0lcyVzIiwgUExBVEZPUk1fTU9EVUxFX1BSRUZJWCwKKwkJKHBkZXYtPmlkX2VudHJ5KSA/IHBkZXYtPmlkX2VudHJ5LT5uYW1lIDogcGRldi0+bmFtZSk7CiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlX2lkICpwbGF0Zm9ybV9tYXRjaF9pZCgKKwkJCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaWQgKmlkLAorCQkJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwl3aGlsZSAoaWQtPm5hbWVbMF0pIHsKKwkJaWYgKHN0cmNtcChwZGV2LT5uYW1lLCBpZC0+bmFtZSkgPT0gMCkgeworCQkJcGRldi0+aWRfZW50cnkgPSBpZDsKKwkJCXJldHVybiBpZDsKKwkJfQorCQlpZCsrOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKwogLyoqCiAgKiBwbGF0Zm9ybV9tYXRjaCAtIGJpbmQgcGxhdGZvcm0gZGV2aWNlIHRvIHBsYXRmb3JtIGRyaXZlci4KICAqIEBkZXY6IGRldmljZS4KQEAgLTYwMyw5ICs2MzQsMTQgQEAKICAqLwogc3RhdGljIGludCBwbGF0Zm9ybV9tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IHBsYXRmb3JtX2RyaXZlciAqcGRydiA9IHRvX3BsYXRmb3JtX2RyaXZlcihkcnYpOwogCi0JcGRldiA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UsIGRldik7CisJLyogbWF0Y2ggYWdhaW5zdCB0aGUgaWQgdGFibGUgZmlyc3QgKi8KKwlpZiAocGRydi0+aWRfdGFibGUpCisJCXJldHVybiBwbGF0Zm9ybV9tYXRjaF9pZChwZHJ2LT5pZF90YWJsZSwgcGRldikgIT0gTlVMTDsKKworCS8qIGZhbGwtYmFjayB0byBkcml2ZXIgbmFtZSBtYXRjaCAqLwogCXJldHVybiAoc3RyY21wKHBkZXYtPm5hbWUsIGRydi0+bmFtZSkgPT0gMCk7CiB9CiAKQEAgLTYyMywyNiArNjU5LDI0IEBACiAKIHN0YXRpYyBpbnQgcGxhdGZvcm1fbGVnYWN5X3N1c3BlbmRfbGF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBtZXNnKQogewotCXN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgKmRydiA9IHRvX3BsYXRmb3JtX2RyaXZlcihkZXYtPmRyaXZlcik7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKwlzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyICpwZHJ2ID0gdG9fcGxhdGZvcm1fZHJpdmVyKGRldi0+ZHJpdmVyKTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJaW50IHJldCA9IDA7CiAKLQlwZGV2ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHBsYXRmb3JtX2RldmljZSwgZGV2KTsKLQlpZiAoZGV2LT5kcml2ZXIgJiYgZHJ2LT5zdXNwZW5kX2xhdGUpCi0JCXJldCA9IGRydi0+c3VzcGVuZF9sYXRlKHBkZXYsIG1lc2cpOworCWlmIChkZXYtPmRyaXZlciAmJiBwZHJ2LT5zdXNwZW5kX2xhdGUpCisJCXJldCA9IHBkcnYtPnN1c3BlbmRfbGF0ZShwZGV2LCBtZXNnKTsKIAogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgcGxhdGZvcm1fbGVnYWN5X3Jlc3VtZV9lYXJseShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RyaXZlciAqZHJ2ID0gdG9fcGxhdGZvcm1fZHJpdmVyKGRldi0+ZHJpdmVyKTsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCXN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgKnBkcnYgPSB0b19wbGF0Zm9ybV9kcml2ZXIoZGV2LT5kcml2ZXIpOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlpbnQgcmV0ID0gMDsKIAotCXBkZXYgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlLCBkZXYpOwotCWlmIChkZXYtPmRyaXZlciAmJiBkcnYtPnJlc3VtZV9lYXJseSkKLQkJcmV0ID0gZHJ2LT5yZXN1bWVfZWFybHkocGRldik7CisJaWYgKGRldi0+ZHJpdmVyICYmIHBkcnYtPnJlc3VtZV9lYXJseSkKKwkJcmV0ID0gcGRydi0+cmVzdW1lX2Vhcmx5KHBkZXYpOwogCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9wb3dlci9tYWluLmMgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvbWFpbi5jCmluZGV4IDJkMTRmNGEuLmUyNTUzNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9wb3dlci9tYWluLmMKKysrIGIvZHJpdmVycy9iYXNlL3Bvd2VyL21haW4uYwpAQCAtMTA3LDYgKzEwNyw1MCBAQAogfQogCiAvKioKKyAqCWRldmljZV9wbV9tb3ZlX2JlZm9yZSAtIG1vdmUgZGV2aWNlIGluIGRwbV9saXN0CisgKglAZGV2YTogIERldmljZSB0byBtb3ZlIGluIGRwbV9saXN0CisgKglAZGV2YjogIERldmljZSBAZGV2YSBzaG91bGQgY29tZSBiZWZvcmUKKyAqLwordm9pZCBkZXZpY2VfcG1fbW92ZV9iZWZvcmUoc3RydWN0IGRldmljZSAqZGV2YSwgc3RydWN0IGRldmljZSAqZGV2YikKK3sKKwlwcl9kZWJ1ZygiUE06IE1vdmluZyAlczolcyBiZWZvcmUgJXM6JXNcbiIsCisJCSBkZXZhLT5idXMgPyBkZXZhLT5idXMtPm5hbWUgOiAiTm8gQnVzIiwKKwkJIGtvYmplY3RfbmFtZSgmZGV2YS0+a29iaiksCisJCSBkZXZiLT5idXMgPyBkZXZiLT5idXMtPm5hbWUgOiAiTm8gQnVzIiwKKwkJIGtvYmplY3RfbmFtZSgmZGV2Yi0+a29iaikpOworCS8qIERlbGV0ZSBkZXZhIGZyb20gZHBtX2xpc3QgYW5kIHJlaW5zZXJ0IGJlZm9yZSBkZXZiLiAqLworCWxpc3RfbW92ZV90YWlsKCZkZXZhLT5wb3dlci5lbnRyeSwgJmRldmItPnBvd2VyLmVudHJ5KTsKK30KKworLyoqCisgKglkZXZpY2VfcG1fbW92ZV9hZnRlciAtIG1vdmUgZGV2aWNlIGluIGRwbV9saXN0CisgKglAZGV2YTogIERldmljZSB0byBtb3ZlIGluIGRwbV9saXN0CisgKglAZGV2YjogIERldmljZSBAZGV2YSBzaG91bGQgY29tZSBhZnRlcgorICovCit2b2lkIGRldmljZV9wbV9tb3ZlX2FmdGVyKHN0cnVjdCBkZXZpY2UgKmRldmEsIHN0cnVjdCBkZXZpY2UgKmRldmIpCit7CisJcHJfZGVidWcoIlBNOiBNb3ZpbmcgJXM6JXMgYWZ0ZXIgJXM6JXNcbiIsCisJCSBkZXZhLT5idXMgPyBkZXZhLT5idXMtPm5hbWUgOiAiTm8gQnVzIiwKKwkJIGtvYmplY3RfbmFtZSgmZGV2YS0+a29iaiksCisJCSBkZXZiLT5idXMgPyBkZXZiLT5idXMtPm5hbWUgOiAiTm8gQnVzIiwKKwkJIGtvYmplY3RfbmFtZSgmZGV2Yi0+a29iaikpOworCS8qIERlbGV0ZSBkZXZhIGZyb20gZHBtX2xpc3QgYW5kIHJlaW5zZXJ0IGFmdGVyIGRldmIuICovCisJbGlzdF9tb3ZlKCZkZXZhLT5wb3dlci5lbnRyeSwgJmRldmItPnBvd2VyLmVudHJ5KTsKK30KKworLyoqCisgKiAJZGV2aWNlX3BtX21vdmVfbGFzdCAtIG1vdmUgZGV2aWNlIHRvIGVuZCBvZiBkcG1fbGlzdAorICogCUBkZXY6ICAgRGV2aWNlIHRvIG1vdmUgaW4gZHBtX2xpc3QKKyAqLwordm9pZCBkZXZpY2VfcG1fbW92ZV9sYXN0KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlwcl9kZWJ1ZygiUE06IE1vdmluZyAlczolcyB0byBlbmQgb2YgbGlzdFxuIiwKKwkJIGRldi0+YnVzID8gZGV2LT5idXMtPm5hbWUgOiAiTm8gQnVzIiwKKwkJIGtvYmplY3RfbmFtZSgmZGV2LT5rb2JqKSk7CisJbGlzdF9tb3ZlX3RhaWwoJmRldi0+cG93ZXIuZW50cnksICZkcG1fbGlzdCk7Cit9CisKKy8qKgogICoJcG1fb3AgLSBleGVjdXRlIHRoZSBQTSBvcGVyYXRpb24gYXBwcm9waWF0ZSBmb3IgZ2l2ZW4gUE0gZXZlbnQKICAqCUBkZXY6CURldmljZS4KICAqCUBvcHM6CVBNIG9wZXJhdGlvbnMgdG8gY2hvb3NlIGZyb20uCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcG93ZXIvcG93ZXIuaCBiL2RyaXZlcnMvYmFzZS9wb3dlci9wb3dlci5oCmluZGV4IDQxZjUxZmEuLmM3Y2I0ZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9wb3dlci9wb3dlci5oCisrKyBiL2RyaXZlcnMvYmFzZS9wb3dlci9wb3dlci5oCkBAIC0xOCwxMSArMTgsMTkgQEAKIAogZXh0ZXJuIHZvaWQgZGV2aWNlX3BtX2FkZChzdHJ1Y3QgZGV2aWNlICopOwogZXh0ZXJuIHZvaWQgZGV2aWNlX3BtX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICopOworZXh0ZXJuIHZvaWQgZGV2aWNlX3BtX21vdmVfYmVmb3JlKHN0cnVjdCBkZXZpY2UgKiwgc3RydWN0IGRldmljZSAqKTsKK2V4dGVybiB2b2lkIGRldmljZV9wbV9tb3ZlX2FmdGVyKHN0cnVjdCBkZXZpY2UgKiwgc3RydWN0IGRldmljZSAqKTsKK2V4dGVybiB2b2lkIGRldmljZV9wbV9tb3ZlX2xhc3Qoc3RydWN0IGRldmljZSAqKTsKIAogI2Vsc2UgLyogQ09ORklHX1BNX1NMRUVQICovCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkZXZpY2VfcG1fYWRkKHN0cnVjdCBkZXZpY2UgKmRldikge30KIHN0YXRpYyBpbmxpbmUgdm9pZCBkZXZpY2VfcG1fcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBkZXZpY2VfcG1fbW92ZV9iZWZvcmUoc3RydWN0IGRldmljZSAqZGV2YSwKKwkJCQkJIHN0cnVjdCBkZXZpY2UgKmRldmIpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgZGV2aWNlX3BtX21vdmVfYWZ0ZXIoc3RydWN0IGRldmljZSAqZGV2YSwKKwkJCQkJc3RydWN0IGRldmljZSAqZGV2Yikge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBkZXZpY2VfcG1fbW92ZV9sYXN0KHN0cnVjdCBkZXZpY2UgKmRldikge30KIAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9zeXMuYyBiL2RyaXZlcnMvYmFzZS9zeXMuYwppbmRleCBiNDI4YzhjLi5jYmQzNmNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2Uvc3lzLmMKKysrIGIvZHJpdmVycy9iYXNlL3N5cy5jCkBAIC0zMCwxMCArMzAsMTAgQEAKIAogCiBzdGF0aWMgc3NpemVfdAotc3lzZGV2X3Nob3coc3RydWN0IGtvYmplY3QgKiBrb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICogYXR0ciwgY2hhciAqIGJ1ZmZlcikKK3N5c2Rldl9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLCBjaGFyICpidWZmZXIpCiB7Ci0Jc3RydWN0IHN5c19kZXZpY2UgKiBzeXNkZXYgPSB0b19zeXNkZXYoa29iaik7Ci0Jc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKiBzeXNkZXZfYXR0ciA9IHRvX3N5c2Rldl9hdHRyKGF0dHIpOworCXN0cnVjdCBzeXNfZGV2aWNlICpzeXNkZXYgPSB0b19zeXNkZXYoa29iaik7CisJc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKnN5c2Rldl9hdHRyID0gdG9fc3lzZGV2X2F0dHIoYXR0cik7CiAKIAlpZiAoc3lzZGV2X2F0dHItPnNob3cpCiAJCXJldHVybiBzeXNkZXZfYXR0ci0+c2hvdyhzeXNkZXYsIHN5c2Rldl9hdHRyLCBidWZmZXIpOwpAQCAtNDIsMTEgKzQyLDExIEBACiAKIAogc3RhdGljIHNzaXplX3QKLXN5c2Rldl9zdG9yZShzdHJ1Y3Qga29iamVjdCAqIGtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKiBhdHRyLAotCSAgICAgY29uc3QgY2hhciAqIGJ1ZmZlciwgc2l6ZV90IGNvdW50KQorc3lzZGV2X3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLAorCSAgICAgY29uc3QgY2hhciAqYnVmZmVyLCBzaXplX3QgY291bnQpCiB7Ci0Jc3RydWN0IHN5c19kZXZpY2UgKiBzeXNkZXYgPSB0b19zeXNkZXYoa29iaik7Ci0Jc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKiBzeXNkZXZfYXR0ciA9IHRvX3N5c2Rldl9hdHRyKGF0dHIpOworCXN0cnVjdCBzeXNfZGV2aWNlICpzeXNkZXYgPSB0b19zeXNkZXYoa29iaik7CisJc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKnN5c2Rldl9hdHRyID0gdG9fc3lzZGV2X2F0dHIoYXR0cik7CiAKIAlpZiAoc3lzZGV2X2F0dHItPnN0b3JlKQogCQlyZXR1cm4gc3lzZGV2X2F0dHItPnN0b3JlKHN5c2Rldiwgc3lzZGV2X2F0dHIsIGJ1ZmZlciwgY291bnQpOwpAQCAtNjMsMTMgKzYzLDEzIEBACiB9OwogCiAKLWludCBzeXNkZXZfY3JlYXRlX2ZpbGUoc3RydWN0IHN5c19kZXZpY2UgKiBzLCBzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqIGEpCitpbnQgc3lzZGV2X2NyZWF0ZV9maWxlKHN0cnVjdCBzeXNfZGV2aWNlICpzLCBzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqYSkKIHsKIAlyZXR1cm4gc3lzZnNfY3JlYXRlX2ZpbGUoJnMtPmtvYmosICZhLT5hdHRyKTsKIH0KIAogCi12b2lkIHN5c2Rldl9yZW1vdmVfZmlsZShzdHJ1Y3Qgc3lzX2RldmljZSAqIHMsIHN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICogYSkKK3ZvaWQgc3lzZGV2X3JlbW92ZV9maWxlKHN0cnVjdCBzeXNfZGV2aWNlICpzLCBzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqYSkKIHsKIAlzeXNmc19yZW1vdmVfZmlsZSgmcy0+a29iaiwgJmEtPmF0dHIpOwogfQpAQCAtODQsNyArODQsNyBAQAogc3RhdGljIHNzaXplX3Qgc3lzZGV2X2NsYXNzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsCiAJCQkJIGNoYXIgKmJ1ZmZlcikKIHsKLQlzdHJ1Y3Qgc3lzZGV2X2NsYXNzICogY2xhc3MgPSB0b19zeXNkZXZfY2xhc3Moa29iaik7CisJc3RydWN0IHN5c2Rldl9jbGFzcyAqY2xhc3MgPSB0b19zeXNkZXZfY2xhc3Moa29iaik7CiAJc3RydWN0IHN5c2Rldl9jbGFzc19hdHRyaWJ1dGUgKmNsYXNzX2F0dHIgPSB0b19zeXNkZXZfY2xhc3NfYXR0cihhdHRyKTsKIAogCWlmIChjbGFzc19hdHRyLT5zaG93KQpAQCAtOTUsOCArOTUsOCBAQAogc3RhdGljIHNzaXplX3Qgc3lzZGV2X2NsYXNzX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLAogCQkJCSAgY29uc3QgY2hhciAqYnVmZmVyLCBzaXplX3QgY291bnQpCiB7Ci0Jc3RydWN0IHN5c2Rldl9jbGFzcyAqIGNsYXNzID0gdG9fc3lzZGV2X2NsYXNzKGtvYmopOwotCXN0cnVjdCBzeXNkZXZfY2xhc3NfYXR0cmlidXRlICogY2xhc3NfYXR0ciA9IHRvX3N5c2Rldl9jbGFzc19hdHRyKGF0dHIpOworCXN0cnVjdCBzeXNkZXZfY2xhc3MgKmNsYXNzID0gdG9fc3lzZGV2X2NsYXNzKGtvYmopOworCXN0cnVjdCBzeXNkZXZfY2xhc3NfYXR0cmlidXRlICpjbGFzc19hdHRyID0gdG9fc3lzZGV2X2NsYXNzX2F0dHIoYXR0cik7CiAKIAlpZiAoY2xhc3NfYXR0ci0+c3RvcmUpCiAJCXJldHVybiBjbGFzc19hdHRyLT5zdG9yZShjbGFzcywgYnVmZmVyLCBjb3VudCk7CkBAIC0xMjgsNyArMTI4LDcgQEAKIAogc3RhdGljIHN0cnVjdCBrc2V0ICpzeXN0ZW1fa3NldDsKIAotaW50IHN5c2Rldl9jbGFzc19yZWdpc3RlcihzdHJ1Y3Qgc3lzZGV2X2NsYXNzICogY2xzKQoraW50IHN5c2Rldl9jbGFzc19yZWdpc3RlcihzdHJ1Y3Qgc3lzZGV2X2NsYXNzICpjbHMpCiB7CiAJcHJfZGVidWcoIlJlZ2lzdGVyaW5nIHN5c2RldiBjbGFzcyAnJXMnXG4iLCBjbHMtPm5hbWUpOwogCkBAIC0xNDEsNyArMTQxLDcgQEAKIAlyZXR1cm4ga3NldF9yZWdpc3RlcigmY2xzLT5rc2V0KTsKIH0KIAotdm9pZCBzeXNkZXZfY2xhc3NfdW5yZWdpc3RlcihzdHJ1Y3Qgc3lzZGV2X2NsYXNzICogY2xzKQordm9pZCBzeXNkZXZfY2xhc3NfdW5yZWdpc3RlcihzdHJ1Y3Qgc3lzZGV2X2NsYXNzICpjbHMpCiB7CiAJcHJfZGVidWcoIlVucmVnaXN0ZXJpbmcgc3lzZGV2IGNsYXNzICclcydcbiIsCiAJCSBrb2JqZWN0X25hbWUoJmNscy0+a3NldC5rb2JqKSk7CkBAIC0yMDMsOCArMjAzLDggQEAKICAqCUBjbHM6CUNsYXNzIGRyaXZlciBiZWxvbmdzIHRvLgogICoJQGRydjoJRHJpdmVyLgogICovCi12b2lkIHN5c2Rldl9kcml2ZXJfdW5yZWdpc3RlcihzdHJ1Y3Qgc3lzZGV2X2NsYXNzICogY2xzLAotCQkJICAgICAgc3RydWN0IHN5c2Rldl9kcml2ZXIgKiBkcnYpCit2b2lkIHN5c2Rldl9kcml2ZXJfdW5yZWdpc3RlcihzdHJ1Y3Qgc3lzZGV2X2NsYXNzICpjbHMsCisJCQkgICAgICBzdHJ1Y3Qgc3lzZGV2X2RyaXZlciAqZHJ2KQogewogCW11dGV4X2xvY2soJnN5c2Rldl9kcml2ZXJzX2xvY2spOwogCWxpc3RfZGVsX2luaXQoJmRydi0+ZW50cnkpOwpAQCAtMjI5LDEwICsyMjksMTAgQEAKICAqCUBzeXNkZXY6CWRldmljZSBpbiBxdWVzdGlvbgogICoKICAqLwotaW50IHN5c2Rldl9yZWdpc3RlcihzdHJ1Y3Qgc3lzX2RldmljZSAqIHN5c2RldikKK2ludCBzeXNkZXZfcmVnaXN0ZXIoc3RydWN0IHN5c19kZXZpY2UgKnN5c2RldikKIHsKIAlpbnQgZXJyb3I7Ci0Jc3RydWN0IHN5c2Rldl9jbGFzcyAqIGNscyA9IHN5c2Rldi0+Y2xzOworCXN0cnVjdCBzeXNkZXZfY2xhc3MgKmNscyA9IHN5c2Rldi0+Y2xzOwogCiAJaWYgKCFjbHMpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMjUyLDcgKzI1Miw3IEBACiAJCQkJICAgICBzeXNkZXYtPmlkKTsKIAogCWlmICghZXJyb3IpIHsKLQkJc3RydWN0IHN5c2Rldl9kcml2ZXIgKiBkcnY7CisJCXN0cnVjdCBzeXNkZXZfZHJpdmVyICpkcnY7CiAKIAkJcHJfZGVidWcoIlJlZ2lzdGVyaW5nIHN5cyBkZXZpY2UgJyVzJ1xuIiwKIAkJCSBrb2JqZWN0X25hbWUoJnN5c2Rldi0+a29iaikpOwpAQCAtMjc0LDkgKzI3NCw5IEBACiAJcmV0dXJuIGVycm9yOwogfQogCi12b2lkIHN5c2Rldl91bnJlZ2lzdGVyKHN0cnVjdCBzeXNfZGV2aWNlICogc3lzZGV2KQordm9pZCBzeXNkZXZfdW5yZWdpc3RlcihzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzZGV2KQogewotCXN0cnVjdCBzeXNkZXZfZHJpdmVyICogZHJ2OworCXN0cnVjdCBzeXNkZXZfZHJpdmVyICpkcnY7CiAKIAltdXRleF9sb2NrKCZzeXNkZXZfZHJpdmVyc19sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRydiwgJnN5c2Rldi0+Y2xzLT5kcml2ZXJzLCBlbnRyeSkgewpAQCAtMzA1LDE5ICszMDUsMTkgQEAKICAqLwogdm9pZCBzeXNkZXZfc2h1dGRvd24odm9pZCkKIHsKLQlzdHJ1Y3Qgc3lzZGV2X2NsYXNzICogY2xzOworCXN0cnVjdCBzeXNkZXZfY2xhc3MgKmNsczsKIAogCXByX2RlYnVnKCJTaHV0dGluZyBEb3duIFN5c3RlbSBEZXZpY2VzXG4iKTsKIAogCW11dGV4X2xvY2soJnN5c2Rldl9kcml2ZXJzX2xvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShjbHMsICZzeXN0ZW1fa3NldC0+bGlzdCwga3NldC5rb2JqLmVudHJ5KSB7Ci0JCXN0cnVjdCBzeXNfZGV2aWNlICogc3lzZGV2OworCQlzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzZGV2OwogCiAJCXByX2RlYnVnKCJTaHV0dGluZyBkb3duIHR5cGUgJyVzJzpcbiIsCiAJCQkga29iamVjdF9uYW1lKCZjbHMtPmtzZXQua29iaikpOwogCiAJCWxpc3RfZm9yX2VhY2hfZW50cnkoc3lzZGV2LCAmY2xzLT5rc2V0Lmxpc3QsIGtvYmouZW50cnkpIHsKLQkJCXN0cnVjdCBzeXNkZXZfZHJpdmVyICogZHJ2OworCQkJc3RydWN0IHN5c2Rldl9kcml2ZXIgKmRydjsKIAkJCXByX2RlYnVnKCIgJXNcbiIsIGtvYmplY3RfbmFtZSgmc3lzZGV2LT5rb2JqKSk7CiAKIAkJCS8qIENhbGwgYXV4aWxsYXJ5IGRyaXZlcnMgZmlyc3QgKi8KQEAgLTM2NCw3ICszNjQsNyBAQAogICovCiBpbnQgc3lzZGV2X3N1c3BlbmQocG1fbWVzc2FnZV90IHN0YXRlKQogewotCXN0cnVjdCBzeXNkZXZfY2xhc3MgKiBjbHM7CisJc3RydWN0IHN5c2Rldl9jbGFzcyAqY2xzOwogCXN0cnVjdCBzeXNfZGV2aWNlICpzeXNkZXYsICplcnJfZGV2OwogCXN0cnVjdCBzeXNkZXZfZHJpdmVyICpkcnYsICplcnJfZHJ2OwogCWludCByZXQ7CkBAIC00NDIsMTIgKzQ0MiwxMiBAQAogICovCiBpbnQgc3lzZGV2X3Jlc3VtZSh2b2lkKQogewotCXN0cnVjdCBzeXNkZXZfY2xhc3MgKiBjbHM7CisJc3RydWN0IHN5c2Rldl9jbGFzcyAqY2xzOwogCiAJcHJfZGVidWcoIlJlc3VtaW5nIFN5c3RlbSBEZXZpY2VzXG4iKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoY2xzLCAmc3lzdGVtX2tzZXQtPmxpc3QsIGtzZXQua29iai5lbnRyeSkgewotCQlzdHJ1Y3Qgc3lzX2RldmljZSAqIHN5c2RldjsKKwkJc3RydWN0IHN5c19kZXZpY2UgKnN5c2RldjsKIAogCQlwcl9kZWJ1ZygiUmVzdW1pbmcgdHlwZSAnJXMnOlxuIiwKIAkJCSBrb2JqZWN0X25hbWUoJmNscy0+a3NldC5rb2JqKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL0tjb25maWcgYi9kcml2ZXJzL2Jsb2NrL0tjb25maWcKaW5kZXggMDM0NGE4YS4uZTdiOGFhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9LY29uZmlnCisrKyBiL2RyaXZlcnMvYmxvY2svS2NvbmZpZwpAQCAtNDUsNiArNDUsMTMgQEAKIAkgIElmIHlvdSBoYXZlIGEgU1dJTS0zIChTdXBlciBXb3ogSW50ZWdyYXRlZCBNYWNoaW5lIDM7IGZyb20gQXBwbGUpCiAJICBmbG9wcHkgY29udHJvbGxlciwgc2F5IFkgaGVyZS4gTW9zdCBjb21tb25seSBmb3VuZCBpbiBQb3dlck1hY3MuCiAKK2NvbmZpZyBCTEtfREVWX1NXSU0KKwl0cmlzdGF0ZSAiU3VwcG9ydCBmb3IgU1dJTSBNYWNpbnRvc2ggZmxvcHB5IgorCWRlcGVuZHMgb24gTTY4SyAmJiBNQUMKKwloZWxwCisJICBZb3Ugc2hvdWxkIHNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCBmbG9wcHkgc3VwcG9ydAorCSAgYW5kIHlvdSBkb24ndCBoYXZlIGEgSUksIElJZngsIFE5MDAsIFE5NTAgb3IgQVYgc2VyaWVzLgorCiBjb25maWcgQU1JR0FfWjJSQU0KIAl0cmlzdGF0ZSAiQW1pZ2EgWm9ycm8gSUkgcmFtZGlzayBzdXBwb3J0IgogCWRlcGVuZHMgb24gWk9SUk8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svTWFrZWZpbGUgYi9kcml2ZXJzL2Jsb2NrL01ha2VmaWxlCmluZGV4IDg3ZTEyMGUuLjMxNDUxNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ibG9jay9NYWtlZmlsZQpAQCAtNiw2ICs2LDcgQEAKICMgCiAKIG9iai0kKENPTkZJR19NQUNfRkxPUFBZKQkrPSBzd2ltMy5vCitvYmotJChDT05GSUdfQkxLX0RFVl9TV0lNKQkrPSBzd2ltX21vZC5vCiBvYmotJChDT05GSUdfQkxLX0RFVl9GRCkJKz0gZmxvcHB5Lm8KIG9iai0kKENPTkZJR19BTUlHQV9GTE9QUFkpCSs9IGFtaWZsb3Aubwogb2JqLSQoQ09ORklHX1BTM19ESVNLKQkJKz0gcHMzZGlzay5vCkBAIC0zMywzICszNCw1IEBACiBvYmotJChDT05GSUdfQkxLX0RFVl9IRCkJKz0gaGQubwogCiBvYmotJChDT05GSUdfWEVOX0JMS0RFVl9GUk9OVEVORCkJKz0geGVuLWJsa2Zyb250Lm8KKworc3dpbV9tb2Qtb2Jqcwk6PSBzd2ltLm8gc3dpbV9hc20ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9hb2UvYW9lbmV0LmMgYi9kcml2ZXJzL2Jsb2NrL2FvZS9hb2VuZXQuYwppbmRleCBjNjA5OWJhLi5jZTBkNjJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2FvZS9hb2VuZXQuYworKysgYi9kcml2ZXJzL2Jsb2NrL2FvZS9hb2VuZXQuYwpAQCAtMTUxLDcgKzE1MSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgYW9lX3B0ID0geworc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBhb2VfcHQgX19yZWFkX21vc3RseSA9IHsKIAkudHlwZSA9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfQU9FKSwKIAkuZnVuYyA9IGFvZW5ldF9yY3YsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9jY2lzcy5jIGIvZHJpdmVycy9ibG9jay9jY2lzcy5jCmluZGV4IDRmOWI2ZDcuLjVkMGUxMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svY2Npc3MuYworKysgYi9kcml2ZXJzL2Jsb2NrL2NjaXNzLmMKQEAgLTM4OTgsNiArMzg5OCwxMyBAQAogICovCiBzdGF0aWMgaW50IF9faW5pdCBjY2lzc19pbml0KHZvaWQpCiB7CisJLyoKKwkgKiBUaGUgaGFyZHdhcmUgcmVxdWlyZXMgdGhhdCBjb21tYW5kcyBhcmUgYWxpZ25lZCBvbiBhIDY0LWJpdAorCSAqIGJvdW5kYXJ5LiBHaXZlbiB0aGF0IHdlIHVzZSBwY2lfYWxsb2NfY29uc2lzdGVudCgpIHRvIGFsbG9jYXRlIGFuCisJICogYXJyYXkgb2YgdGhlbSwgdGhlIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDggYnl0ZXMuCisJICovCisJQlVJTERfQlVHX09OKHNpemVvZihDb21tYW5kTGlzdF9zdHJ1Y3QpICUgOCk7CisKIAlwcmludGsoS0VSTl9JTkZPIERSSVZFUl9OQU1FICJcbiIpOwogCiAJLyogUmVnaXN0ZXIgZm9yIG91ciBQQ0kgZGV2aWNlcyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9jcHFhcnJheS5jIGIvZHJpdmVycy9ibG9jay9jcHFhcnJheS5jCmluZGV4IDVkMzlkZjEuLmNhMjY4Y2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svY3BxYXJyYXkuYworKysgYi9kcml2ZXJzL2Jsb2NrL2NwcWFycmF5LmMKQEAgLTYxNyw2ICs2MTcsNyBAQAogCWludCBpOwogCiAJYy0+cGNpX2RldiA9IHBkZXY7CisJcGNpX3NldF9tYXN0ZXIocGRldik7CiAJaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiY3BxYXJyYXk6IFVuYWJsZSB0byBFbmFibGUgUENJIGRldmljZVxuIik7CiAJCXJldHVybiAtMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svZmxvcHB5LmMgYi9kcml2ZXJzL2Jsb2NrL2Zsb3BweS5jCmluZGV4IDgzZDhlZDMuLmMyYzk1ZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svZmxvcHB5LmMKKysrIGIvZHJpdmVycy9ibG9jay9mbG9wcHkuYwpAQCAtNDEzNSwxMCArNDEzNSw5IEBACiBzdGF0aWMgc3NpemVfdCBmbG9wcHlfY21vc19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnA7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcCA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCWludCBkcml2ZTsKIAotCXAgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlLGRldik7CiAJZHJpdmUgPSBwLT5pZDsKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlWFxuIiwgVURQLT5jbW9zKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbG9vcC5jIGIvZHJpdmVycy9ibG9jay9sb29wLmMKaW5kZXggYmYwMzQ1NS4uMjYyMWVkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9sb29wLmMKKysrIGIvZHJpdmVycy9ibG9jay9sb29wLmMKQEAgLTQ3NCwxMCArNDc0LDM1IEBACiAJaW50IHJldDsKIAogCXBvcyA9ICgobG9mZl90KSBiaW8tPmJpX3NlY3RvciA8PCA5KSArIGxvLT5sb19vZmZzZXQ7Ci0JaWYgKGJpb19ydyhiaW8pID09IFdSSVRFKQorCisJaWYgKGJpb19ydyhiaW8pID09IFdSSVRFKSB7CisJCWludCBiYXJyaWVyID0gYmlvX2JhcnJpZXIoYmlvKTsKKwkJc3RydWN0IGZpbGUgKmZpbGUgPSBsby0+bG9fYmFja2luZ19maWxlOworCisJCWlmIChiYXJyaWVyKSB7CisJCQlpZiAodW5saWtlbHkoIWZpbGUtPmZfb3AtPmZzeW5jKSkgeworCQkJCXJldCA9IC1FT1BOT1RTVVBQOworCQkJCWdvdG8gb3V0OworCQkJfQorCisJCQlyZXQgPSB2ZnNfZnN5bmMoZmlsZSwgZmlsZS0+Zl9wYXRoLmRlbnRyeSwgMCk7CisJCQlpZiAodW5saWtlbHkocmV0KSkgeworCQkJCXJldCA9IC1FSU87CisJCQkJZ290byBvdXQ7CisJCQl9CisJCX0KKwogCQlyZXQgPSBsb19zZW5kKGxvLCBiaW8sIHBvcyk7Ci0JZWxzZQorCisJCWlmIChiYXJyaWVyICYmICFyZXQpIHsKKwkJCXJldCA9IHZmc19mc3luYyhmaWxlLCBmaWxlLT5mX3BhdGguZGVudHJ5LCAwKTsKKwkJCWlmICh1bmxpa2VseShyZXQpKQorCQkJCXJldCA9IC1FSU87CisJCX0KKwl9IGVsc2UKIAkJcmV0ID0gbG9fcmVjZWl2ZShsbywgYmlvLCBsby0+bG9fYmxvY2tzaXplLCBwb3MpOworCitvdXQ6CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtODI2LDYgKzg1MSw5IEBACiAJbG8tPmxvX3F1ZXVlLT5xdWV1ZWRhdGEgPSBsbzsKIAlsby0+bG9fcXVldWUtPnVucGx1Z19mbiA9IGxvb3BfdW5wbHVnOwogCisJaWYgKCEobG9fZmxhZ3MgJiBMT19GTEFHU19SRUFEX09OTFkpICYmIGZpbGUtPmZfb3AtPmZzeW5jKQorCQlibGtfcXVldWVfb3JkZXJlZChsby0+bG9fcXVldWUsIFFVRVVFX09SREVSRURfRFJBSU4sIE5VTEwpOworCiAJc2V0X2NhcGFjaXR5KGxvLT5sb19kaXNrLCBzaXplKTsKIAliZF9zZXRfc2l6ZShiZGV2LCBzaXplIDw8IDkpOwogCkBAIC05NDEsMTEgKzk2OSwxOCBAQAogCQliZF9zZXRfc2l6ZShiZGV2LCAwKTsKIAltYXBwaW5nX3NldF9nZnBfbWFzayhmaWxwLT5mX21hcHBpbmcsIGdmcCk7CiAJbG8tPmxvX3N0YXRlID0gTG9fdW5ib3VuZDsKLQlmcHV0KGZpbHApOwogCS8qIFRoaXMgaXMgc2FmZTogb3BlbigpIGlzIHN0aWxsIGhvbGRpbmcgYSByZWZlcmVuY2UuICovCiAJbW9kdWxlX3B1dChUSElTX01PRFVMRSk7CiAJaWYgKG1heF9wYXJ0ID4gMCkKIAkJaW9jdGxfYnlfYmRldihiZGV2LCBCTEtSUlBBUlQsIDApOworCW11dGV4X3VubG9jaygmbG8tPmxvX2N0bF9tdXRleCk7CisJLyoKKwkgKiBOZWVkIG5vdCBob2xkIGxvX2N0bF9tdXRleCB0byBmcHV0IGJhY2tpbmcgZmlsZS4KKwkgKiBDYWxsaW5nIGZwdXQgaG9sZGluZyBsb19jdGxfbXV0ZXggdHJpZ2dlcnMgYSBjaXJjdWxhcgorCSAqIGxvY2sgZGVwZW5kZW5jeSBwb3NzaWJpbGl0eSB3YXJuaW5nIGFzIGZwdXQgY2FuIHRha2UKKwkgKiBiZF9tdXRleCB3aGljaCBpcyB1c3VhbGx5IHRha2VuIGJlZm9yZSBsb19jdGxfbXV0ZXguCisJICovCisJZnB1dChmaWxwKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTE2Myw3ICsxMTk4LDcgQEAKIAlzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvID0gYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOwogCWludCBlcnI7CiAKLQltdXRleF9sb2NrKCZsby0+bG9fY3RsX211dGV4KTsKKwltdXRleF9sb2NrX25lc3RlZCgmbG8tPmxvX2N0bF9tdXRleCwgMSk7CiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIExPT1BfU0VUX0ZEOgogCQllcnIgPSBsb29wX3NldF9mZChsbywgbW9kZSwgYmRldiwgYXJnKTsKQEAgLTExNzIsNyArMTIwNywxMCBAQAogCQllcnIgPSBsb29wX2NoYW5nZV9mZChsbywgYmRldiwgYXJnKTsKIAkJYnJlYWs7CiAJY2FzZSBMT09QX0NMUl9GRDoKKwkJLyogbG9vcF9jbHJfZmQgd291bGQgaGF2ZSB1bmxvY2tlZCBsb19jdGxfbXV0ZXggb24gc3VjY2VzcyAqLwogCQllcnIgPSBsb29wX2Nscl9mZChsbywgYmRldik7CisJCWlmICghZXJyKQorCQkJZ290byBvdXRfdW5sb2NrZWQ7CiAJCWJyZWFrOwogCWNhc2UgTE9PUF9TRVRfU1RBVFVTOgogCQllcnIgPSBsb29wX3NldF9zdGF0dXNfb2xkKGxvLCAoc3RydWN0IGxvb3BfaW5mbyBfX3VzZXIgKikgYXJnKTsKQEAgLTExOTAsNiArMTIyOCw4IEBACiAJCWVyciA9IGxvLT5pb2N0bCA/IGxvLT5pb2N0bChsbywgY21kLCBhcmcpIDogLUVJTlZBTDsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZsby0+bG9fY3RsX211dGV4KTsKKworb3V0X3VubG9ja2VkOgogCXJldHVybiBlcnI7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svc3dpbS5jIGIvZHJpdmVycy9ibG9jay9zd2ltLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDIyY2MzOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvYmxvY2svc3dpbS5jCkBAIC0wLDAgKzEsOTk1IEBACisvKgorICogRHJpdmVyIGZvciBTV0lNIChTYW5kZXIgV296IEludGVncmF0ZWQgTWFjaGluZSkgZmxvcHB5IGNvbnRyb2xsZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsMjAwOCBMYXVyZW50IFZpdmllciA8TGF1cmVudEBsdml2aWVyLmluZm8+CisgKgorICogYmFzZWQgb24gQWxhc3RhaXIgQnJpZGdld2F0ZXIgU1dJTSBhbmFseXNpcywgMjAwMQorICogYmFzZWQgb24gU1dJTTMgZHJpdmVyIChjKSBQYXVsIE1hY2tlcnJhcywgMTk5NgorICogYmFzZWQgb24gbmV0QlNEIElXTSBkcml2ZXIgKGMpIDE5OTcsIDE5OTggSGF1a2UgRmF0aC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIDIwMDQtMDgtMjEgKGx2KSAtIEluaXRpYWwgaW1wbGVtZW50YXRpb24KKyAqIDIwMDgtMTAtMzAgKGx2KSAtIFBvcnQgdG8gMi42CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZkLmg+CisjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvaGRyZWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2ludG9zaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNfdmlhLmg+CisKKyNkZWZpbmUgQ0FSRE5BTUUgInN3aW0iCisKK3N0cnVjdCBzZWN0b3JfaGVhZGVyIHsKKwl1bnNpZ25lZCBjaGFyIHNpZGU7CisJdW5zaWduZWQgY2hhciB0cmFjazsKKwl1bnNpZ25lZCBjaGFyIHNlY3RvcjsKKwl1bnNpZ25lZCBjaGFyIHNpemU7CisJdW5zaWduZWQgY2hhciBjcmMwOworCXVuc2lnbmVkIGNoYXIgY3JjMTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gIlZlcnNpb24gMC4yICgyMDA4LTEwLTMwKSIKKworI2RlZmluZSBSRUcoeCkJdW5zaWduZWQgY2hhciB4LCB4ICMjIF9wYWRbMHgyMDAgLSAxXTsKKworc3RydWN0IHN3aW0geworCVJFRyh3cml0ZV9kYXRhKQorCVJFRyh3cml0ZV9tYXJrKQorCVJFRyh3cml0ZV9DUkMpCisJUkVHKHdyaXRlX3BhcmFtZXRlcikKKwlSRUcod3JpdGVfcGhhc2UpCisJUkVHKHdyaXRlX3NldHVwKQorCVJFRyh3cml0ZV9tb2RlMCkKKwlSRUcod3JpdGVfbW9kZTEpCisKKwlSRUcocmVhZF9kYXRhKQorCVJFRyhyZWFkX21hcmspCisJUkVHKHJlYWRfZXJyb3IpCisJUkVHKHJlYWRfcGFyYW1ldGVyKQorCVJFRyhyZWFkX3BoYXNlKQorCVJFRyhyZWFkX3NldHVwKQorCVJFRyhyZWFkX3N0YXR1cykKKwlSRUcocmVhZF9oYW5kc2hha2UpCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZGVmaW5lIHN3aW1fd3JpdGUoYmFzZSwgcmVnLCB2KSAJb3V0XzgoJihiYXNlKS0+d3JpdGVfIyNyZWcsICh2KSkKKyNkZWZpbmUgc3dpbV9yZWFkKGJhc2UsIHJlZykJCWluXzgoJihiYXNlKS0+cmVhZF8jI3JlZykKKworLyogSVdNIHJlZ2lzdGVycyAqLworCitzdHJ1Y3QgaXdtIHsKKwlSRUcocGgwTCkKKwlSRUcocGgwSCkKKwlSRUcocGgxTCkKKwlSRUcocGgxSCkKKwlSRUcocGgyTCkKKwlSRUcocGgySCkKKwlSRUcocGgzTCkKKwlSRUcocGgzSCkKKwlSRUcobXRyT2ZmKQorCVJFRyhtdHJPbikKKwlSRUcoaW50RHJpdmUpCisJUkVHKGV4dERyaXZlKQorCVJFRyhxNkwpCisJUkVHKHE2SCkKKwlSRUcocTdMKQorCVJFRyhxN0gpCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZGVmaW5lIGl3bV93cml0ZShiYXNlLCByZWcsIHYpIAlvdXRfOCgmKGJhc2UpLT5yZWcsICh2KSkKKyNkZWZpbmUgaXdtX3JlYWQoYmFzZSwgcmVnKQkJaW5fOCgmKGJhc2UpLT5yZWcpCisKKy8qIGJpdHMgaW4gcGhhc2UgcmVnaXN0ZXIgKi8KKworI2RlZmluZSBTRUVLX1BPU0lUSVZFCTB4MDcwCisjZGVmaW5lIFNFRUtfTkVHQVRJVkUJMHgwNzQKKyNkZWZpbmUgU1RFUAkJMHgwNzEKKyNkZWZpbmUgTU9UT1JfT04JMHgwNzIKKyNkZWZpbmUgTU9UT1JfT0ZGCTB4MDc2CisjZGVmaW5lIElOREVYCQkweDA3MworI2RlZmluZSBFSkVDVAkJMHgwNzcKKyNkZWZpbmUgU0VUTUZNCQkweDE3MQorI2RlZmluZSBTRVRHQ1IJCTB4MTc1CisKKyNkZWZpbmUgUkVMQVgJCTB4MDMzCisjZGVmaW5lIExTVFJCCQkweDAwOAorCisjZGVmaW5lIENBX01BU0sJCTB4MDc3CisKKy8qIFNlbGVjdCB2YWx1ZXMgZm9yIHN3aW1fc2VsZWN0IGFuZCBzd2ltX3JlYWRiaXQgKi8KKworI2RlZmluZSBSRUFEX0RBVEFfMAkweDA3NAorI2RlZmluZSBUV09NRUdfRFJJVkUJMHgwNzUKKyNkZWZpbmUgU0lOR0xFX1NJREVECTB4MDc2CisjZGVmaW5lIERSSVZFX1BSRVNFTlQJMHgwNzcKKyNkZWZpbmUgRElTS19JTgkJMHgxNzAKKyNkZWZpbmUgV1JJVEVfUFJPVAkweDE3MQorI2RlZmluZSBUUkFDS19aRVJPCTB4MTcyCisjZGVmaW5lIFRBQ0hPCQkweDE3MworI2RlZmluZSBSRUFEX0RBVEFfMQkweDE3NAorI2RlZmluZSBNRk1fTU9ERQkweDE3NQorI2RlZmluZSBTRUVLX0NPTVBMRVRFCTB4MTc2CisjZGVmaW5lIE9ORU1FR19NRURJQQkweDE3NworCisvKiBCaXRzIGluIGhhbmRzaGFrZSByZWdpc3RlciAqLworCisjZGVmaW5lIE1BUktfQllURQkweDAxCisjZGVmaW5lIENSQ19aRVJPCTB4MDIKKyNkZWZpbmUgUkREQVRBCQkweDA0CisjZGVmaW5lIFNFTlNFCQkweDA4CisjZGVmaW5lIE1PVEVOCQkweDEwCisjZGVmaW5lIEVSUk9SCQkweDIwCisjZGVmaW5lIERBVDJCWVRFCTB4NDAKKyNkZWZpbmUgREFUMUJZVEUJMHg4MAorCisvKiBiaXRzIGluIHNldHVwIHJlZ2lzdGVyICovCisKKyNkZWZpbmUgU19JTlZfV0RBVEEJMHgwMQorI2RlZmluZSBTXzNfNV9TRUxFQ1QJMHgwMgorI2RlZmluZSBTX0dDUgkJMHgwNAorI2RlZmluZSBTX0ZDTEtfRElWMgkweDA4CisjZGVmaW5lIFNfRVJST1JfQ09SUgkweDEwCisjZGVmaW5lIFNfSUJNX0RSSVZFCTB4MjAKKyNkZWZpbmUgU19HQ1JfV1JJVEUJMHg0MAorI2RlZmluZSBTX1RJTUVPVVQJMHg4MAorCisvKiBiaXRzIGluIG1vZGUgcmVnaXN0ZXIgKi8KKworI2RlZmluZSBDTEZJRk8JCTB4MDEKKyNkZWZpbmUgRU5CTDEJCTB4MDIKKyNkZWZpbmUgRU5CTDIJCTB4MDQKKyNkZWZpbmUgQUNUSU9OCQkweDA4CisjZGVmaW5lIFdSSVRFX01PREUJMHgxMAorI2RlZmluZSBIRURTRUwJCTB4MjAKKyNkZWZpbmUgTU9UT04JCTB4ODAKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworZW51bSBkcml2ZV9sb2NhdGlvbiB7CisJSU5URVJOQUxfRFJJVkUgPSAweDAyLAorCUVYVEVSTkFMX0RSSVZFID0gMHgwNCwKK307CisKK2VudW0gbWVkaWFfdHlwZSB7CisJRERfTUVESUEsCisJSERfTUVESUEsCit9OworCitzdHJ1Y3QgZmxvcHB5X3N0YXRlIHsKKworCS8qIHBoeXNpY2FsIHByb3BlcnRpZXMgKi8KKworCWVudW0gZHJpdmVfbG9jYXRpb24gbG9jYXRpb247CS8qIGludGVybmFsIG9yIGV4dGVybmFsIGRyaXZlICovCisJaW50CQkgaGVhZF9udW1iZXI7CS8qIHNpbmdsZS0gb3IgZG91YmxlLXNpZGVkIGRyaXZlICovCisKKwkvKiBtZWRpYSAqLworCisJaW50CQkgZGlza19pbjsKKwlpbnQJCSBlamVjdGVkOworCWVudW0gbWVkaWFfdHlwZQkgdHlwZTsKKwlpbnQJCSB3cml0ZV9wcm90ZWN0ZWQ7CisKKwlpbnQJCSB0b3RhbF9zZWNzOworCWludAkJIHNlY3BlcmN5bDsKKwlpbnQJCSBzZWNwZXJ0cmFjazsKKworCS8qIGluLXVzZSBpbmZvcm1hdGlvbiAqLworCisJaW50CQl0cmFjazsKKwlpbnQJCXJlZl9jb3VudDsKKworCXN0cnVjdCBnZW5kaXNrICpkaXNrOworCisJLyogcGFyZW50IGNvbnRyb2xsZXIgKi8KKworCXN0cnVjdCBzd2ltX3ByaXYgKnN3ZDsKK307CisKK2VudW0gbW90b3JfYWN0aW9uIHsKKwlPRkYsCisJT04sCit9OworCitlbnVtIGhlYWQgeworCUxPV0VSX0hFQUQgPSAwLAorCVVQUEVSX0hFQUQgPSAxLAorfTsKKworI2RlZmluZSBGRF9NQVhfVU5JVAkyCisKK3N0cnVjdCBzd2ltX3ByaXYgeworCXN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2U7CisJc3BpbmxvY2tfdCBsb2NrOworCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxdWV1ZTsKKwlpbnQgZmxvcHB5X2NvdW50OworCXN0cnVjdCBmbG9wcHlfc3RhdGUgdW5pdFtGRF9NQVhfVU5JVF07Cit9OworCitleHRlcm4gaW50IHN3aW1fcmVhZF9zZWN0b3JfaGVhZGVyKHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UsCisJCQkJICAgc3RydWN0IHNlY3Rvcl9oZWFkZXIgKmhlYWRlcik7CitleHRlcm4gaW50IHN3aW1fcmVhZF9zZWN0b3JfZGF0YShzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlLAorCQkJCSB1bnNpZ25lZCBjaGFyICpkYXRhKTsKKworc3RhdGljIGlubGluZSB2b2lkIHNldF9zd2ltX21vZGUoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSwgaW50IGVuYWJsZSkKK3sKKwlzdHJ1Y3QgaXdtIF9faW9tZW0gKml3bV9iYXNlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIWVuYWJsZSkgeworCQlzd2ltX3dyaXRlKGJhc2UsIG1vZGUwLCAweGY4KTsKKwkJcmV0dXJuOworCX0KKworCWl3bV9iYXNlID0gKHN0cnVjdCBpd20gX19pb21lbSAqKWJhc2U7CisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJaXdtX3JlYWQoaXdtX2Jhc2UsIHE3TCk7CisJaXdtX3JlYWQoaXdtX2Jhc2UsIG10ck9mZik7CisJaXdtX3JlYWQoaXdtX2Jhc2UsIHE2SCk7CisKKwlpd21fd3JpdGUoaXdtX2Jhc2UsIHE3SCwgMHg1Nyk7CisJaXdtX3dyaXRlKGl3bV9iYXNlLCBxN0gsIDB4MTcpOworCWl3bV93cml0ZShpd21fYmFzZSwgcTdILCAweDU3KTsKKwlpd21fd3JpdGUoaXdtX2Jhc2UsIHE3SCwgMHg1Nyk7CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGdldF9zd2ltX21vZGUoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJc3dpbV93cml0ZShiYXNlLCBwaGFzZSwgMHhmNSk7CisJaWYgKHN3aW1fcmVhZChiYXNlLCBwaGFzZSkgIT0gMHhmNSkKKwkJZ290byBpc19pd207CisJc3dpbV93cml0ZShiYXNlLCBwaGFzZSwgMHhmNik7CisJaWYgKHN3aW1fcmVhZChiYXNlLCBwaGFzZSkgIT0gMHhmNikKKwkJZ290byBpc19pd207CisJc3dpbV93cml0ZShiYXNlLCBwaGFzZSwgMHhmNyk7CisJaWYgKHN3aW1fcmVhZChiYXNlLCBwaGFzZSkgIT0gMHhmNykKKwkJZ290byBpc19pd207CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCXJldHVybiAxOworaXNfaXdtOgorCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHN3aW1fc2VsZWN0KHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UsIGludCBzZWwpCit7CisJc3dpbV93cml0ZShiYXNlLCBwaGFzZSwgUkVMQVgpOworCisJdmlhMV9zZXRfaGVhZChzZWwgJiAweDEwMCk7CisKKwlzd2ltX3dyaXRlKGJhc2UsIHBoYXNlLCBzZWwgJiBDQV9NQVNLKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHN3aW1fYWN0aW9uKHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UsIGludCBhY3Rpb24pCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCXN3aW1fc2VsZWN0KGJhc2UsIGFjdGlvbik7CisJdWRlbGF5KDEpOworCXN3aW1fd3JpdGUoYmFzZSwgcGhhc2UsIChMU1RSQjw8NCkgfCBMU1RSQik7CisJdWRlbGF5KDEpOworCXN3aW1fd3JpdGUoYmFzZSwgcGhhc2UsIChMU1RSQjw8NCkgfCAoKH5MU1RSQikgJiAweDBGKSk7CisJdWRlbGF5KDEpOworCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCitzdGF0aWMgaW5saW5lIGludCBzd2ltX3JlYWRiaXQoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSwgaW50IGJpdCkKK3sKKwlpbnQgc3RhdDsKKworCXN3aW1fc2VsZWN0KGJhc2UsIGJpdCk7CisKKwl1ZGVsYXkoMTApOworCisJc3RhdCA9IHN3aW1fcmVhZChiYXNlLCBoYW5kc2hha2UpOworCisJcmV0dXJuIChzdGF0ICYgU0VOU0UpID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzd2ltX2RyaXZlKHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UsCisJCQkgICAgICBlbnVtIGRyaXZlX2xvY2F0aW9uIGxvY2F0aW9uKQoreworCWlmIChsb2NhdGlvbiA9PSBJTlRFUk5BTF9EUklWRSkgeworCQlzd2ltX3dyaXRlKGJhc2UsIG1vZGUwLCBFWFRFUk5BTF9EUklWRSk7IC8qIGNsZWFyIGRyaXZlIDEgYml0ICovCisJCXN3aW1fd3JpdGUoYmFzZSwgbW9kZTEsIElOVEVSTkFMX0RSSVZFKTsgLyogc2V0IGRyaXZlIDAgYml0ICovCisJfSBlbHNlIGlmIChsb2NhdGlvbiA9PSBFWFRFUk5BTF9EUklWRSkgeworCQlzd2ltX3dyaXRlKGJhc2UsIG1vZGUwLCBJTlRFUk5BTF9EUklWRSk7IC8qIGNsZWFyIGRyaXZlIDAgYml0ICovCisJCXN3aW1fd3JpdGUoYmFzZSwgbW9kZTEsIEVYVEVSTkFMX0RSSVZFKTsgLyogc2V0IGRyaXZlIDEgYml0ICovCisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3dpbV9tb3RvcihzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlLAorCQkJICAgICAgZW51bSBtb3Rvcl9hY3Rpb24gYWN0aW9uKQoreworCWlmIChhY3Rpb24gPT0gT04pIHsKKwkJaW50IGk7CisKKwkJc3dpbV9hY3Rpb24oYmFzZSwgTU9UT1JfT04pOworCisJCWZvciAoaSA9IDA7IGkgPCAyKkhaOyBpKyspIHsKKwkJCXN3aW1fc2VsZWN0KGJhc2UsIFJFTEFYKTsKKwkJCWlmIChzd2ltX3JlYWRiaXQoYmFzZSwgTU9UT1JfT04pKQorCQkJCWJyZWFrOworCQkJY3VycmVudC0+c3RhdGUgPSBUQVNLX0lOVEVSUlVQVElCTEU7CisJCQlzY2hlZHVsZV90aW1lb3V0KDEpOworCQl9CisJfSBlbHNlIGlmIChhY3Rpb24gPT0gT0ZGKSB7CisJCXN3aW1fYWN0aW9uKGJhc2UsIE1PVE9SX09GRik7CisJCXN3aW1fc2VsZWN0KGJhc2UsIFJFTEFYKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzd2ltX2VqZWN0KHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UpCit7CisJaW50IGk7CisKKwlzd2ltX2FjdGlvbihiYXNlLCBFSkVDVCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMipIWjsgaSsrKSB7CisJCXN3aW1fc2VsZWN0KGJhc2UsIFJFTEFYKTsKKwkJaWYgKCFzd2ltX3JlYWRiaXQoYmFzZSwgRElTS19JTikpCisJCQlicmVhazsKKwkJY3VycmVudC0+c3RhdGUgPSBUQVNLX0lOVEVSUlVQVElCTEU7CisJCXNjaGVkdWxlX3RpbWVvdXQoMSk7CisJfQorCXN3aW1fc2VsZWN0KGJhc2UsIFJFTEFYKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHN3aW1faGVhZChzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlLCBlbnVtIGhlYWQgaGVhZCkKK3sKKwkvKiB3YWl0IGRyaXZlIGlzIHJlYWR5ICovCisKKwlpZiAoaGVhZCA9PSBVUFBFUl9IRUFEKQorCQlzd2ltX3NlbGVjdChiYXNlLCBSRUFEX0RBVEFfMSk7CisJZWxzZSBpZiAoaGVhZCA9PSBMT1dFUl9IRUFEKQorCQlzd2ltX3NlbGVjdChiYXNlLCBSRUFEX0RBVEFfMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHN3aW1fc3RlcChzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlKQoreworCWludCB3YWl0OworCisJc3dpbV9hY3Rpb24oYmFzZSwgU1RFUCk7CisKKwlmb3IgKHdhaXQgPSAwOyB3YWl0IDwgSFo7IHdhaXQrKykgeworCisJCWN1cnJlbnQtPnN0YXRlID0gVEFTS19JTlRFUlJVUFRJQkxFOworCQlzY2hlZHVsZV90aW1lb3V0KDEpOworCisJCXN3aW1fc2VsZWN0KGJhc2UsIFJFTEFYKTsKKwkJaWYgKCFzd2ltX3JlYWRiaXQoYmFzZSwgU1RFUCkpCisJCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW5saW5lIGludCBzd2ltX3RyYWNrMDAoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSkKK3sKKwlpbnQgdHJ5OworCisJc3dpbV9hY3Rpb24oYmFzZSwgU0VFS19ORUdBVElWRSk7CisKKwlmb3IgKHRyeSA9IDA7IHRyeSA8IDEwMDsgdHJ5KyspIHsKKworCQlzd2ltX3NlbGVjdChiYXNlLCBSRUxBWCk7CisJCWlmIChzd2ltX3JlYWRiaXQoYmFzZSwgVFJBQ0tfWkVSTykpCisJCQlicmVhazsKKworCQlpZiAoc3dpbV9zdGVwKGJhc2UpKQorCQkJcmV0dXJuIC0xOworCX0KKworCWlmIChzd2ltX3JlYWRiaXQoYmFzZSwgVFJBQ0tfWkVSTykpCisJCXJldHVybiAwOworCisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW5saW5lIGludCBzd2ltX3NlZWsoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSwgaW50IHN0ZXApCit7CisJaWYgKHN0ZXAgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoc3RlcCA8IDApIHsKKwkJc3dpbV9hY3Rpb24oYmFzZSwgU0VFS19ORUdBVElWRSk7CisJCXN0ZXAgPSAtc3RlcDsKKwl9IGVsc2UKKwkJc3dpbV9hY3Rpb24oYmFzZSwgU0VFS19QT1NJVElWRSk7CisKKwlmb3IgKCA7IHN0ZXAgPiAwOyBzdGVwLS0pIHsKKwkJaWYgKHN3aW1fc3RlcChiYXNlKSkKKwkJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgc3dpbV90cmFjayhzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcywgIGludCB0cmFjaykKK3sKKwlzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlID0gZnMtPnN3ZC0+YmFzZTsKKwlpbnQgcmV0OworCisJcmV0ID0gc3dpbV9zZWVrKGJhc2UsIHRyYWNrIC0gZnMtPnRyYWNrKTsKKworCWlmIChyZXQgPT0gMCkKKwkJZnMtPnRyYWNrID0gdHJhY2s7CisJZWxzZSB7CisJCXN3aW1fdHJhY2swMChiYXNlKTsKKwkJZnMtPnRyYWNrID0gMDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGZsb3BweV9lamVjdChzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcykKK3sKKwlzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlID0gZnMtPnN3ZC0+YmFzZTsKKworCXN3aW1fZHJpdmUoYmFzZSwgZnMtPmxvY2F0aW9uKTsKKwlzd2ltX21vdG9yKGJhc2UsIE9GRik7CisJc3dpbV9lamVjdChiYXNlKTsKKworCWZzLT5kaXNrX2luID0gMDsKKwlmcy0+ZWplY3RlZCA9IDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgc3dpbV9yZWFkX3NlY3RvcihzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcywKKwkJCQkgICBpbnQgc2lkZSwgaW50IHRyYWNrLAorCQkJCSAgIGludCBzZWN0b3IsIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlcikKK3sKKwlzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlID0gZnMtPnN3ZC0+YmFzZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBzZWN0b3JfaGVhZGVyIGhlYWRlcjsKKwlpbnQgcmV0ID0gLTE7CisJc2hvcnQgaTsKKworCXN3aW1fdHJhY2soZnMsIHRyYWNrKTsKKworCXN3aW1fd3JpdGUoYmFzZSwgbW9kZTEsIE1PVE9OKTsKKwlzd2ltX2hlYWQoYmFzZSwgc2lkZSk7CisJc3dpbV93cml0ZShiYXNlLCBtb2RlMCwgc2lkZSk7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJZm9yIChpID0gMDsgaSA8IDM2OyBpKyspIHsKKwkJcmV0ID0gc3dpbV9yZWFkX3NlY3Rvcl9oZWFkZXIoYmFzZSwgJmhlYWRlcik7CisJCWlmICghcmV0ICYmIChoZWFkZXIuc2VjdG9yID09IHNlY3RvcikpIHsKKwkJCS8qIGZvdW5kICovCisKKwkJCXJldCA9IHN3aW1fcmVhZF9zZWN0b3JfZGF0YShiYXNlLCBidWZmZXIpOworCQkJYnJlYWs7CisJCX0KKwl9CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJc3dpbV93cml0ZShiYXNlLCBtb2RlMCwgTU9UT04pOworCisJaWYgKChoZWFkZXIuc2lkZSAhPSBzaWRlKSAgfHwgKGhlYWRlci50cmFjayAhPSB0cmFjaykgfHwKKwkgICAgIChoZWFkZXIuc2VjdG9yICE9IHNlY3RvcikpCisJCXJldHVybiAwOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBmbG9wcHlfcmVhZF9zZWN0b3JzKHN0cnVjdCBmbG9wcHlfc3RhdGUgKmZzLAorCQkJICAgICAgIGludCByZXFfc2VjdG9yLCBpbnQgc2VjdG9yc19uYiwKKwkJCSAgICAgICB1bnNpZ25lZCBjaGFyICpidWZmZXIpCit7CisJc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSA9IGZzLT5zd2QtPmJhc2U7CisJaW50IHJldDsKKwlpbnQgc2lkZSwgdHJhY2ssIHNlY3RvcjsKKwlpbnQgaSwgdHJ5OworCisKKwlzd2ltX2RyaXZlKGJhc2UsIGZzLT5sb2NhdGlvbik7CisJZm9yIChpID0gcmVxX3NlY3RvcjsgaSA8IHJlcV9zZWN0b3IgKyBzZWN0b3JzX25iOyBpKyspIHsKKwkJaW50IHg7CisJCXRyYWNrID0gaSAvIGZzLT5zZWNwZXJjeWw7CisJCXggPSBpICUgZnMtPnNlY3BlcmN5bDsKKwkJc2lkZSA9IHggLyBmcy0+c2VjcGVydHJhY2s7CisJCXNlY3RvciA9IHggJSBmcy0+c2VjcGVydHJhY2sgKyAxOworCisJCXRyeSA9IDU7CisJCWRvIHsKKwkJCXJldCA9IHN3aW1fcmVhZF9zZWN0b3IoZnMsIHNpZGUsIHRyYWNrLCBzZWN0b3IsCisJCQkJCQlidWZmZXIpOworCQkJaWYgKHRyeS0tID09IDApCisJCQkJcmV0dXJuIC0xOworCQl9IHdoaWxlIChyZXQgIT0gNTEyKTsKKworCQlidWZmZXIgKz0gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCByZWRvX2ZkX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCit7CisJc3RydWN0IHJlcXVlc3QgKnJlcTsKKwlzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmczsKKworCXdoaWxlICgocmVxID0gZWx2X25leHRfcmVxdWVzdChxKSkpIHsKKworCQlmcyA9IHJlcS0+cnFfZGlzay0+cHJpdmF0ZV9kYXRhOworCQlpZiAocmVxLT5zZWN0b3IgPCAwIHx8IHJlcS0+c2VjdG9yID49IGZzLT50b3RhbF9zZWNzKSB7CisJCQllbmRfcmVxdWVzdChyZXEsIDApOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKHJlcS0+Y3VycmVudF9ucl9zZWN0b3JzID09IDApIHsKKwkJCWVuZF9yZXF1ZXN0KHJlcSwgMSk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIWZzLT5kaXNrX2luKSB7CisJCQllbmRfcmVxdWVzdChyZXEsIDApOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKHJxX2RhdGFfZGlyKHJlcSkgPT0gV1JJVEUpIHsKKwkJCWlmIChmcy0+d3JpdGVfcHJvdGVjdGVkKSB7CisJCQkJZW5kX3JlcXVlc3QocmVxLCAwKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQorCQlzd2l0Y2ggKHJxX2RhdGFfZGlyKHJlcSkpIHsKKwkJY2FzZSBXUklURToKKwkJCS8qIE5PVCBJTVBMRU1FTlRFRCAqLworCQkJZW5kX3JlcXVlc3QocmVxLCAwKTsKKwkJCWJyZWFrOworCQljYXNlIFJFQUQ6CisJCQlpZiAoZmxvcHB5X3JlYWRfc2VjdG9ycyhmcywgcmVxLT5zZWN0b3IsCisJCQkJCQlyZXEtPmN1cnJlbnRfbnJfc2VjdG9ycywKKwkJCQkJCXJlcS0+YnVmZmVyKSkgeworCQkJCWVuZF9yZXF1ZXN0KHJlcSwgMCk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlyZXEtPm5yX3NlY3RvcnMgLT0gcmVxLT5jdXJyZW50X25yX3NlY3RvcnM7CisJCQlyZXEtPnNlY3RvciArPSByZXEtPmN1cnJlbnRfbnJfc2VjdG9yczsKKwkJCXJlcS0+YnVmZmVyICs9IHJlcS0+Y3VycmVudF9ucl9zZWN0b3JzICogNTEyOworCQkJZW5kX3JlcXVlc3QocmVxLCAxKTsKKwkJCWJyZWFrOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBkb19mZF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKQoreworCXJlZG9fZmRfcmVxdWVzdChxKTsKK30KKworc3RhdGljIHN0cnVjdCBmbG9wcHlfc3RydWN0IGZsb3BweV90eXBlWzRdID0geworCXsgICAgMCwgIDAsIDAsICAwLCAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCBOVUxMIH0sIC8qIG5vIHRlc3RpbmcgICAqLworCXsgIDcyMCwgIDksIDEsIDgwLCAwLCAweDJBLCAweDAyLCAweERGLCAweDUwLCBOVUxMIH0sIC8qIDM2MEtCIFNTIDMuNSIqLworCXsgMTQ0MCwgIDksIDIsIDgwLCAwLCAweDJBLCAweDAyLCAweERGLCAweDUwLCBOVUxMIH0sIC8qIDcyMEtCIDMuNSIgICAqLworCXsgMjg4MCwgMTgsIDIsIDgwLCAwLCAweDFCLCAweDAwLCAweENGLCAweDZDLCBOVUxMIH0sIC8qIDEuNDRNQiAzLjUiICAqLworfTsKKworc3RhdGljIGludCBnZXRfZmxvcHB5X2dlb21ldHJ5KHN0cnVjdCBmbG9wcHlfc3RhdGUgKmZzLCBpbnQgdHlwZSwKKwkJCSAgICAgICBzdHJ1Y3QgZmxvcHB5X3N0cnVjdCAqKmcpCit7CisJaWYgKHR5cGUgPj0gQVJSQVlfU0laRShmbG9wcHlfdHlwZSkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHR5cGUpCisJCSpnID0gJmZsb3BweV90eXBlW3R5cGVdOworCWVsc2UgaWYgKGZzLT50eXBlID09IEhEX01FRElBKSAvKiBIaWdoLURlbnNpdHkgbWVkaWEgKi8KKwkJKmcgPSAmZmxvcHB5X3R5cGVbM107CisJZWxzZSBpZiAoZnMtPmhlYWRfbnVtYmVyID09IDIpIC8qIGRvdWJsZS1zaWRlZCAqLworCQkqZyA9ICZmbG9wcHlfdHlwZVsyXTsKKwllbHNlCisJCSpnID0gJmZsb3BweV90eXBlWzFdOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNldHVwX21lZGl1bShzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcykKK3sKKwlzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlID0gZnMtPnN3ZC0+YmFzZTsKKworCWlmIChzd2ltX3JlYWRiaXQoYmFzZSwgRElTS19JTikpIHsKKwkJc3RydWN0IGZsb3BweV9zdHJ1Y3QgKmc7CisJCWZzLT5kaXNrX2luID0gMTsKKwkJZnMtPndyaXRlX3Byb3RlY3RlZCA9IHN3aW1fcmVhZGJpdChiYXNlLCBXUklURV9QUk9UKTsKKwkJZnMtPnR5cGUgPSBzd2ltX3JlYWRiaXQoYmFzZSwgT05FTUVHX01FRElBKTsKKworCQlpZiAoc3dpbV90cmFjazAwKGJhc2UpKQorCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJIlNXSU06IGNhbm5vdCBtb3ZlIGZsb3BweSBoZWFkIHRvIHRyYWNrIDBcbiIpOworCisJCXN3aW1fdHJhY2swMChiYXNlKTsKKworCQlnZXRfZmxvcHB5X2dlb21ldHJ5KGZzLCAwLCAmZyk7CisJCWZzLT50b3RhbF9zZWNzID0gZy0+c2l6ZTsKKwkJZnMtPnNlY3BlcmN5bCA9IGctPmhlYWQgKiBnLT5zZWN0OworCQlmcy0+c2VjcGVydHJhY2sgPSBnLT5zZWN0OworCQlmcy0+dHJhY2sgPSAwOworCX0gZWxzZSB7CisJCWZzLT5kaXNrX2luID0gMDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZmxvcHB5X29wZW4oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlKQoreworCXN0cnVjdCBmbG9wcHlfc3RhdGUgKmZzID0gYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UgPSBmcy0+c3dkLT5iYXNlOworCWludCBlcnI7CisKKwlpZiAoZnMtPnJlZl9jb3VudCA9PSAtMSB8fCAoZnMtPnJlZl9jb3VudCAmJiBtb2RlICYgRk1PREVfRVhDTCkpCisJCXJldHVybiAtRUJVU1k7CisKKwlpZiAobW9kZSAmIEZNT0RFX0VYQ0wpCisJCWZzLT5yZWZfY291bnQgPSAtMTsKKwllbHNlCisJCWZzLT5yZWZfY291bnQrKzsKKworCXN3aW1fd3JpdGUoYmFzZSwgc2V0dXAsIFNfSUJNX0RSSVZFICB8IFNfRkNMS19ESVYyKTsKKwl1ZGVsYXkoMTApOworCXN3aW1fZHJpdmUoYmFzZSwgSU5URVJOQUxfRFJJVkUpOworCXN3aW1fbW90b3IoYmFzZSwgT04pOworCXN3aW1fYWN0aW9uKGJhc2UsIFNFVE1GTSk7CisJaWYgKGZzLT5lamVjdGVkKQorCQlzZXR1cF9tZWRpdW0oZnMpOworCWlmICghZnMtPmRpc2tfaW4pIHsKKwkJZXJyID0gLUVOWElPOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAobW9kZSAmIEZNT0RFX05ERUxBWSkKKwkJcmV0dXJuIDA7CisKKwlpZiAobW9kZSAmIChGTU9ERV9SRUFEfEZNT0RFX1dSSVRFKSkgeworCQljaGVja19kaXNrX2NoYW5nZShiZGV2KTsKKwkJaWYgKChtb2RlICYgRk1PREVfV1JJVEUpICYmIGZzLT53cml0ZV9wcm90ZWN0ZWQpIHsKKwkJCWVyciA9IC1FUk9GUzsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCXJldHVybiAwOworb3V0OgorCWlmIChmcy0+cmVmX2NvdW50IDwgMCkKKwkJZnMtPnJlZl9jb3VudCA9IDA7CisJZWxzZSBpZiAoZnMtPnJlZl9jb3VudCA+IDApCisJCS0tZnMtPnJlZl9jb3VudDsKKworCWlmIChmcy0+cmVmX2NvdW50ID09IDApCisJCXN3aW1fbW90b3IoYmFzZSwgT0ZGKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGZsb3BweV9yZWxlYXNlKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBmbW9kZV90IG1vZGUpCit7CisJc3RydWN0IGZsb3BweV9zdGF0ZSAqZnMgPSBkaXNrLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSA9IGZzLT5zd2QtPmJhc2U7CisKKwlpZiAoZnMtPnJlZl9jb3VudCA8IDApCisJCWZzLT5yZWZfY291bnQgPSAwOworCWVsc2UgaWYgKGZzLT5yZWZfY291bnQgPiAwKQorCQktLWZzLT5yZWZfY291bnQ7CisKKwlpZiAoZnMtPnJlZl9jb3VudCA9PSAwKQorCQlzd2ltX21vdG9yKGJhc2UsIE9GRik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBmbG9wcHlfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlLAorCQkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBwYXJhbSkKK3sKKwlzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcyA9IGJkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKKwlpbnQgZXJyOworCisJaWYgKChjbWQgJiAweDgwKSAmJiAhY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKKwkJCXJldHVybiAtRVBFUk07CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgRkRFSkVDVDoKKwkJaWYgKGZzLT5yZWZfY291bnQgIT0gMSkKKwkJCXJldHVybiAtRUJVU1k7CisJCWVyciA9IGZsb3BweV9lamVjdChmcyk7CisJCXJldHVybiBlcnI7CisKKwljYXNlIEZER0VUUFJNOgorCQlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKSBwYXJhbSwgKHZvaWQgKikgJmZsb3BweV90eXBlLAorCQkJCSBzaXplb2Yoc3RydWN0IGZsb3BweV9zdHJ1Y3QpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0RFQlVHICJTV0lNIGZsb3BweV9pb2N0bDogdW5rbm93biBjbWQgJWRcbiIsCisJCSAgICAgICBjbWQpOworCQlyZXR1cm4gLUVOT1NZUzsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZmxvcHB5X2dldGdlbyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzdHJ1Y3QgaGRfZ2VvbWV0cnkgKmdlbykKK3sKKwlzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcyA9IGJkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgZmxvcHB5X3N0cnVjdCAqZzsKKwlpbnQgcmV0OworCisJcmV0ID0gZ2V0X2Zsb3BweV9nZW9tZXRyeShmcywgMCwgJmcpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlnZW8tPmhlYWRzID0gZy0+aGVhZDsKKwlnZW8tPnNlY3RvcnMgPSBnLT5zZWN0OworCWdlby0+Y3lsaW5kZXJzID0gZy0+dHJhY2s7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBmbG9wcHlfY2hlY2tfY2hhbmdlKHN0cnVjdCBnZW5kaXNrICpkaXNrKQoreworCXN0cnVjdCBmbG9wcHlfc3RhdGUgKmZzID0gZGlzay0+cHJpdmF0ZV9kYXRhOworCisJcmV0dXJuIGZzLT5lamVjdGVkOworfQorCitzdGF0aWMgaW50IGZsb3BweV9yZXZhbGlkYXRlKHN0cnVjdCBnZW5kaXNrICpkaXNrKQoreworCXN0cnVjdCBmbG9wcHlfc3RhdGUgKmZzID0gZGlzay0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UgPSBmcy0+c3dkLT5iYXNlOworCisJc3dpbV9kcml2ZShiYXNlLCBmcy0+bG9jYXRpb24pOworCisJaWYgKGZzLT5lamVjdGVkKQorCQlzZXR1cF9tZWRpdW0oZnMpOworCisJaWYgKCFmcy0+ZGlza19pbikKKwkJc3dpbV9tb3RvcihiYXNlLCBPRkYpOworCWVsc2UKKwkJZnMtPmVqZWN0ZWQgPSAwOworCisJcmV0dXJuICFmcy0+ZGlza19pbjsKK30KKworc3RhdGljIHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBmbG9wcHlfZm9wcyA9IHsKKwkub3duZXIJCSA9IFRISVNfTU9EVUxFLAorCS5vcGVuCQkgPSBmbG9wcHlfb3BlbiwKKwkucmVsZWFzZQkgPSBmbG9wcHlfcmVsZWFzZSwKKwkubG9ja2VkX2lvY3RsCSA9IGZsb3BweV9pb2N0bCwKKwkuZ2V0Z2VvCQkgPSBmbG9wcHlfZ2V0Z2VvLAorCS5tZWRpYV9jaGFuZ2VkCSA9IGZsb3BweV9jaGVja19jaGFuZ2UsCisJLnJldmFsaWRhdGVfZGlzayA9IGZsb3BweV9yZXZhbGlkYXRlLAorfTsKKworc3RhdGljIHN0cnVjdCBrb2JqZWN0ICpmbG9wcHlfZmluZChkZXZfdCBkZXYsIGludCAqcGFydCwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3Qgc3dpbV9wcml2ICpzd2QgPSBkYXRhOworCWludCBkcml2ZSA9ICgqcGFydCAmIDMpOworCisJaWYgKGRyaXZlID4gc3dkLT5mbG9wcHlfY291bnQpCisJCXJldHVybiBOVUxMOworCisJKnBhcnQgPSAwOworCXJldHVybiBnZXRfZGlzayhzd2QtPnVuaXRbZHJpdmVdLmRpc2spOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzd2ltX2FkZF9mbG9wcHkoc3RydWN0IHN3aW1fcHJpdiAqc3dkLAorCQkJCSAgICAgZW51bSBkcml2ZV9sb2NhdGlvbiBsb2NhdGlvbikKK3sKKwlzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcyA9ICZzd2QtPnVuaXRbc3dkLT5mbG9wcHlfY291bnRdOworCXN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UgPSBzd2QtPmJhc2U7CisKKwlmcy0+bG9jYXRpb24gPSBsb2NhdGlvbjsKKworCXN3aW1fZHJpdmUoYmFzZSwgbG9jYXRpb24pOworCisJc3dpbV9tb3RvcihiYXNlLCBPRkYpOworCisJaWYgKHN3aW1fcmVhZGJpdChiYXNlLCBTSU5HTEVfU0lERUQpKQorCQlmcy0+aGVhZF9udW1iZXIgPSAxOworCWVsc2UKKwkJZnMtPmhlYWRfbnVtYmVyID0gMjsKKwlmcy0+cmVmX2NvdW50ID0gMDsKKwlmcy0+ZWplY3RlZCA9IDE7CisKKwlzd2QtPmZsb3BweV9jb3VudCsrOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHN3aW1fZmxvcHB5X2luaXQoc3RydWN0IHN3aW1fcHJpdiAqc3dkKQoreworCWludCBlcnI7CisJaW50IGRyaXZlOworCXN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UgPSBzd2QtPmJhc2U7CisKKwkvKiBzY2FuIGZsb3BweSBkcml2ZXMgKi8KKworCXN3aW1fZHJpdmUoYmFzZSwgSU5URVJOQUxfRFJJVkUpOworCWlmIChzd2ltX3JlYWRiaXQoYmFzZSwgRFJJVkVfUFJFU0VOVCkpCisJCXN3aW1fYWRkX2Zsb3BweShzd2QsIElOVEVSTkFMX0RSSVZFKTsKKwlzd2ltX2RyaXZlKGJhc2UsIEVYVEVSTkFMX0RSSVZFKTsKKwlpZiAoc3dpbV9yZWFkYml0KGJhc2UsIERSSVZFX1BSRVNFTlQpKQorCQlzd2ltX2FkZF9mbG9wcHkoc3dkLCBFWFRFUk5BTF9EUklWRSk7CisKKwkvKiByZWdpc3RlciBmbG9wcHkgZHJpdmVzICovCisKKwllcnIgPSByZWdpc3Rlcl9ibGtkZXYoRkxPUFBZX01BSk9SLCAiZmQiKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIGdldCBtYWpvciAlZCBmb3IgU1dJTSBmbG9wcHlcbiIsCisJCSAgICAgICBGTE9QUFlfTUFKT1IpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCWZvciAoZHJpdmUgPSAwOyBkcml2ZSA8IHN3ZC0+ZmxvcHB5X2NvdW50OyBkcml2ZSsrKSB7CisJCXN3ZC0+dW5pdFtkcml2ZV0uZGlzayA9IGFsbG9jX2Rpc2soMSk7CisJCWlmIChzd2QtPnVuaXRbZHJpdmVdLmRpc2sgPT0gTlVMTCkgeworCQkJZXJyID0gLUVOT01FTTsKKwkJCWdvdG8gZXhpdF9wdXRfZGlza3M7CisJCX0KKwkJc3dkLT51bml0W2RyaXZlXS5zd2QgPSBzd2Q7CisJfQorCisJc3dkLT5xdWV1ZSA9IGJsa19pbml0X3F1ZXVlKGRvX2ZkX3JlcXVlc3QsICZzd2QtPmxvY2spOworCWlmICghc3dkLT5xdWV1ZSkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGV4aXRfcHV0X2Rpc2tzOworCX0KKworCWZvciAoZHJpdmUgPSAwOyBkcml2ZSA8IHN3ZC0+ZmxvcHB5X2NvdW50OyBkcml2ZSsrKSB7CisJCXN3ZC0+dW5pdFtkcml2ZV0uZGlzay0+ZmxhZ3MgPSBHRU5IRF9GTF9SRU1PVkFCTEU7CisJCXN3ZC0+dW5pdFtkcml2ZV0uZGlzay0+bWFqb3IgPSBGTE9QUFlfTUFKT1I7CisJCXN3ZC0+dW5pdFtkcml2ZV0uZGlzay0+Zmlyc3RfbWlub3IgPSBkcml2ZTsKKwkJc3ByaW50Zihzd2QtPnVuaXRbZHJpdmVdLmRpc2stPmRpc2tfbmFtZSwgImZkJWQiLCBkcml2ZSk7CisJCXN3ZC0+dW5pdFtkcml2ZV0uZGlzay0+Zm9wcyA9ICZmbG9wcHlfZm9wczsKKwkJc3dkLT51bml0W2RyaXZlXS5kaXNrLT5wcml2YXRlX2RhdGEgPSAmc3dkLT51bml0W2RyaXZlXTsKKwkJc3dkLT51bml0W2RyaXZlXS5kaXNrLT5xdWV1ZSA9IHN3ZC0+cXVldWU7CisJCXNldF9jYXBhY2l0eShzd2QtPnVuaXRbZHJpdmVdLmRpc2ssIDI4ODApOworCQlhZGRfZGlzayhzd2QtPnVuaXRbZHJpdmVdLmRpc2spOworCX0KKworCWJsa19yZWdpc3Rlcl9yZWdpb24oTUtERVYoRkxPUFBZX01BSk9SLCAwKSwgMjU2LCBUSElTX01PRFVMRSwKKwkJCSAgICBmbG9wcHlfZmluZCwgTlVMTCwgc3dkKTsKKworCXJldHVybiAwOworCitleGl0X3B1dF9kaXNrczoKKwl1bnJlZ2lzdGVyX2Jsa2RldihGTE9QUFlfTUFKT1IsICJmZCIpOworCXdoaWxlIChkcml2ZS0tKQorCQlwdXRfZGlzayhzd2QtPnVuaXRbZHJpdmVdLmRpc2spOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHN3aW1fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXN0cnVjdCBzd2ltIF9faW9tZW0gKnN3aW1fYmFzZTsKKwlzdHJ1Y3Qgc3dpbV9wcml2ICpzd2Q7CisJaW50IHJldDsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUoZGV2LCBJT1JFU09VUkNFX01FTSwgInN3aW0tcmVncyIpOworCWlmICghcmVzKSB7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0OworCX0KKworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSwgQ0FSRE5BTUUpKSB7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBvdXQ7CisJfQorCisJc3dpbV9iYXNlID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCWlmICghc3dpbV9iYXNlKSB7CisJCXJldHVybiAtRU5PTUVNOworCQlnb3RvIG91dF9yZWxlYXNlX2lvOworCX0KKworCS8qIHByb2JlIGRldmljZSAqLworCisJc2V0X3N3aW1fbW9kZShzd2ltX2Jhc2UsIDEpOworCWlmICghZ2V0X3N3aW1fbW9kZShzd2ltX2Jhc2UpKSB7CisJCXByaW50ayhLRVJOX0lORk8gIlNXSU0gZGV2aWNlIG5vdCBmb3VuZCAhXG4iKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBvdXRfaW91bm1hcDsKKwl9CisKKwkvKiBzZXQgcGxhdGZvcm0gZHJpdmVyIGRhdGEgKi8KKworCXN3ZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzd2ltX3ByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXN3ZCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dF9pb3VubWFwOworCX0KKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIHN3ZCk7CisKKwlzd2QtPmJhc2UgPSBzd2ltX2Jhc2U7CisKKwlyZXQgPSBzd2ltX2Zsb3BweV9pbml0KHN3ZCk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfa2ZyZWU7CisKKwlyZXR1cm4gMDsKKworb3V0X2tmcmVlOgorCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CisJa2ZyZWUoc3dkKTsKK291dF9pb3VubWFwOgorCWlvdW5tYXAoc3dpbV9iYXNlKTsKK291dF9yZWxlYXNlX2lvOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHN3aW1fcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc3dpbV9wcml2ICpzd2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCWludCBkcml2ZTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKworCWJsa191bnJlZ2lzdGVyX3JlZ2lvbihNS0RFVihGTE9QUFlfTUFKT1IsIDApLCAyNTYpOworCisJZm9yIChkcml2ZSA9IDA7IGRyaXZlIDwgc3dkLT5mbG9wcHlfY291bnQ7IGRyaXZlKyspIHsKKwkJZGVsX2dlbmRpc2soc3dkLT51bml0W2RyaXZlXS5kaXNrKTsKKwkJcHV0X2Rpc2soc3dkLT51bml0W2RyaXZlXS5kaXNrKTsKKwl9CisKKwl1bnJlZ2lzdGVyX2Jsa2RldihGTE9QUFlfTUFKT1IsICJmZCIpOworCisJYmxrX2NsZWFudXBfcXVldWUoc3dkLT5xdWV1ZSk7CisKKwkvKiBlamVjdCBmbG9wcGllcyAqLworCisJZm9yIChkcml2ZSA9IDA7IGRyaXZlIDwgc3dkLT5mbG9wcHlfY291bnQ7IGRyaXZlKyspCisJCWZsb3BweV9lamVjdCgmc3dkLT51bml0W2RyaXZlXSk7CisKKwlpb3VubWFwKHN3ZC0+YmFzZSk7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKGRldiwgSU9SRVNPVVJDRV9NRU0sICJzd2ltLXJlZ3MiKTsKKwlpZiAocmVzKQorCQlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CisJa2ZyZWUoc3dkKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzd2ltX2RyaXZlciA9IHsKKwkucHJvYmUgID0gc3dpbV9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3Aoc3dpbV9yZW1vdmUpLAorCS5kcml2ZXIgICA9IHsKKwkJLm5hbWUJPSBDQVJETkFNRSwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHN3aW1faW5pdCh2b2lkKQoreworCXByaW50ayhLRVJOX0lORk8gIlNXSU0gZmxvcHB5IGRyaXZlciAlc1xuIiwgRFJJVkVSX1ZFUlNJT04pOworCisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmc3dpbV9kcml2ZXIpOworfQorbW9kdWxlX2luaXQoc3dpbV9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHN3aW1fZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzd2ltX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChzd2ltX2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgU1dJTSBmbG9wcHkgY29udHJvbGxlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiTGF1cmVudCBWaXZpZXIgPGxhdXJlbnRAbHZpdmllci5pbmZvPiIpOworTU9EVUxFX0FMSUFTX0JMT0NLREVWX01BSk9SKEZMT1BQWV9NQUpPUik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3N3aW1fYXNtLlMgYi9kcml2ZXJzL2Jsb2NrL3N3aW1fYXNtLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk2NjgyMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvYmxvY2svc3dpbV9hc20uUwpAQCAtMCwwICsxLDI0NyBAQAorLyoKKyAqIGxvdy1sZXZlbCBmdW5jdGlvbnMgZm9yIHRoZSBTV0lNIGZsb3BweSBjb250cm9sbGVyCisgKgorICogbmVlZHMgYXNzZW1ibHkgbGFuZ3VhZ2UgYmVjYXVzZSBpcyB2ZXJ5IHRpbWluZyBkZXBlbmRlbnQKKyAqIHRoaXMgY29udHJvbGxlciBleGlzdHMgb25seSBvbiBtYWNpbnRvc2ggNjgweDAgYmFzZWQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsMjAwOCBMYXVyZW50IFZpdmllciA8TGF1cmVudEBsdml2aWVyLmluZm8+CisgKgorICogYmFzZWQgb24gQWxhc3RhaXIgQnJpZGdld2F0ZXIgU1dJTSBhbmFseXNpcywgMjAwMQorICogYmFzZWQgb24gbmV0QlNEIElXTSBkcml2ZXIgKGMpIDE5OTcsIDE5OTggSGF1a2UgRmF0aC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIDIwMDQtMDgtMjEgKGx2KSAtIEluaXRpYWwgaW1wbGVtZW50YXRpb24KKyAqIDIwMDgtMTEtMDUgKGx2KSAtIGFkZCBnZXRfc3dpbV9tb2RlCisgKi8KKworCS5lcXUJd3JpdGVfZGF0YSwJMHgwMDAwCisJLmVxdQl3cml0ZV9tYXJrLAkweDAyMDAKKwkuZXF1CXdyaXRlX0NSQywJMHgwNDAwCisJLmVxdQl3cml0ZV9wYXJhbWV0ZXIsMHgwNjAwCisJLmVxdQl3cml0ZV9waGFzZSwJMHgwODAwCisJLmVxdQl3cml0ZV9zZXR1cCwJMHgwYTAwCisJLmVxdQl3cml0ZV9tb2RlMCwJMHgwYzAwCisJLmVxdQl3cml0ZV9tb2RlMSwJMHgwZTAwCisJLmVxdQlyZWFkX2RhdGEsCTB4MTAwMAorCS5lcXUJcmVhZF9tYXJrLAkweDEyMDAKKwkuZXF1CXJlYWRfZXJyb3IsCTB4MTQwMAorCS5lcXUJcmVhZF9wYXJhbWV0ZXIsCTB4MTYwMAorCS5lcXUJcmVhZF9waGFzZSwJMHgxODAwCisJLmVxdQlyZWFkX3NldHVwLAkweDFhMDAKKwkuZXF1CXJlYWRfc3RhdHVzLAkweDFjMDAKKwkuZXF1CXJlYWRfaGFuZHNoYWtlLAkweDFlMDAKKworCS5lcXUJb19zaWRlLCAwCisJLmVxdQlvX3RyYWNrLCAxCisJLmVxdQlvX3NlY3RvciwgMgorCS5lcXUJb19zaXplLCAzCisJLmVxdQlvX2NyYzAsIDQKKwkuZXF1CW9fY3JjMSwgNQorCisJLmVxdQlzZWVrX3RpbWUsIDMwMDAwCisJLmVxdQltYXhfcmV0cnksIDQwCisJLmVxdQlzZWN0b3Jfc2l6ZSwgNTEyCisKKwkuZ2xvYmFsIHN3aW1fcmVhZF9zZWN0b3JfaGVhZGVyCitzd2ltX3JlYWRfc2VjdG9yX2hlYWRlcjoKKwlsaW5rCSVhNiwgIzAKKwltb3ZlbWwJJWQxLSVkNS8lYTAtJWE0LCVzcEAtCisJbW92ZWwJJWE2QCgweDBjKSwgJWE0CisJYnNyCW1mbV9yZWFkX2FkZHJtYXJrCisJbW92ZW1sCSVzcEArLCAlZDEtJWQ1LyVhMC0lYTQKKwl1bmxrCSVhNgorCXJ0cworCitzZWN0b3JfYWRkcmVzc19tYXJrOgorCS5ieXRlCTB4YTEsIDB4YTEsIDB4YTEsIDB4ZmUKK3NlY3Rvcl9kYXRhX21hcms6CisJLmJ5dGUJMHhhMSwgMHhhMSwgMHhhMSwgMHhmYgorCittZm1fcmVhZF9hZGRybWFyazoKKwltb3ZlbAklYTZAKDB4MDgpLCAlYTMKKwlsZWEJJWEzQChyZWFkX2hhbmRzaGFrZSksICVhMgorCWxlYQklYTNAKHJlYWRfbWFyayksICVhMworCW1vdmVxCSMtMSwgJWQwCisJbW92ZXcJI3NlZWtfdGltZSwgJWQyCisKK3dhaXRfaGVhZGVyX2luaXQ6CisJdHN0YgklYTNAKHJlYWRfZXJyb3IgLSByZWFkX21hcmspCisJbW92ZWIJIzB4MTgsICVhM0Aod3JpdGVfbW9kZTAgLSByZWFkX21hcmspCisJbW92ZWIJIzB4MDEsICVhM0Aod3JpdGVfbW9kZTEgLSByZWFkX21hcmspCisJbW92ZWIJIzB4MDEsICVhM0Aod3JpdGVfbW9kZTAgLSByZWFkX21hcmspCisJdHN0YgklYTNAKHJlYWRfZXJyb3IgLSByZWFkX21hcmspCisJbW92ZWIJIzB4MDgsICVhM0Aod3JpdGVfbW9kZTEgLSByZWFkX21hcmspCisKKwlsZWEJc2VjdG9yX2FkZHJlc3NfbWFyaywgJWEwCisJbW92ZXEJIzMsICVkMQorCit3YWl0X2FkZHJfbWFya19ieXRlOgorCisJdHN0YgklYTJACisJZGJtaQklZDIsIHdhaXRfYWRkcl9tYXJrX2J5dGUKKwlicGwJaGVhZGVyX2V4aXQKKworCW1vdmViCSVhM0AsICVkMworCWNtcGIJJWEwQCssICVkMworCWRibmUJJWQxLCB3YWl0X2FkZHJfbWFya19ieXRlCisJYm5lCXdhaXRfaGVhZGVyX2luaXQKKworCW1vdmVxCSNtYXhfcmV0cnksICVkMgorCithbWFyazA6CXRzdGIJJWEyQAorCWRibWkJJWQyLCBhbWFyazAKKwlicGwJc2lnbmFsX25vbnliCisKKwltb3ZlYgklYTNALCAlYTRAKG9fdHJhY2spCisKKwltb3ZlcQkjbWF4X3JldHJ5LCAlZDIKKworYW1hcmsxOgl0c3RiCSVhMkAKKwlkYm1pCSVkMiwgYW1hcmsxCisJYnBsCXNpZ25hbF9ub255YgorCisJbW92ZWIJJWEzQCwgJWE0QChvX3NpZGUpCisKKwltb3ZlcQkjbWF4X3JldHJ5LCAlZDIKKworYW1hcmsyOgl0c3RiCSVhMkAKKwlkYm1pCSVkMiwgYW1hcmsyCisJYnBsCXNpZ25hbF9ub255YgorCisJbW92ZWIJJWEzQCwgJWE0QChvX3NlY3RvcikKKworCW1vdmVxCSNtYXhfcmV0cnksICVkMgorCithbWFyazM6CXRzdGIJJWEyQAorCWRibWkJJWQyLCBhbWFyazMKKwlicGwJc2lnbmFsX25vbnliCisKKwltb3ZlYgklYTNALCAlYTRAKG9fc2l6ZSkKKworCW1vdmVxCSNtYXhfcmV0cnksICVkMgorCitjcmMwOgl0c3RiCSVhMkAKKwlkYm1pCSVkMiwgY3JjMAorCWJwbAlzaWduYWxfbm9ueWIKKworCW1vdmViCSVhM0AsICVhNEAob19jcmMwKQorCisJbW92ZXEJI21heF9yZXRyeSwgJWQyCisKK2NyYzE6CXRzdGIJJWEyQAorCWRibWkJJWQyLCBjcmMxCisJYnBsCXNpZ25hbF9ub255YgorCisJbW92ZWIJJWEzQCwgJWE0QChvX2NyYzEpCisKKwl0c3RiCSVhM0AocmVhZF9lcnJvciAtIHJlYWRfbWFyaykKKworaGVhZGVyX2V4aXQ6CisJbW92ZXEJIzAsICVkMAorCW1vdmViCSMweDE4LCAlYTNAKHdyaXRlX21vZGUwIC0gcmVhZF9tYXJrKQorCXJ0cworc2lnbmFsX25vbnliOgorCW1vdmVxCSMtMSwgJWQwCisJbW92ZWIJIzB4MTgsICVhM0Aod3JpdGVfbW9kZTAgLSByZWFkX21hcmspCisJcnRzCisKKwkuZ2xvYmFsIHN3aW1fcmVhZF9zZWN0b3JfZGF0YQorc3dpbV9yZWFkX3NlY3Rvcl9kYXRhOgorCWxpbmsJJWE2LCAjMAorCW1vdmVtbAklZDEtJWQ1LyVhMC0lYTUsJXNwQC0KKwltb3ZlbAklYTZAKDB4MGMpLCAlYTQKKwlic3IJbWZtX3JlYWRfZGF0YQorCW1vdmVtbAklc3BAKywgJWQxLSVkNS8lYTAtJWE1CisJdW5sawklYTYKKwlydHMKKworbWZtX3JlYWRfZGF0YToKKwltb3ZlbAklYTZAKDB4MDgpLCAlYTMKKwlsZWEJJWEzQChyZWFkX2hhbmRzaGFrZSksICVhMgorCWxlYQklYTNAKHJlYWRfZGF0YSksICVhNQorCWxlYQklYTNAKHJlYWRfbWFyayksICVhMworCW1vdmV3CSNzZWVrX3RpbWUsICVkMgorCit3YWl0X2RhdGFfaW5pdDoKKwl0c3RiCSVhM0AocmVhZF9lcnJvciAtIHJlYWRfbWFyaykKKwltb3ZlYgkjMHgxOCwgJWEzQCh3cml0ZV9tb2RlMCAtIHJlYWRfbWFyaykKKwltb3ZlYgkjMHgwMSwgJWEzQCh3cml0ZV9tb2RlMSAtIHJlYWRfbWFyaykKKwltb3ZlYgkjMHgwMSwgJWEzQCh3cml0ZV9tb2RlMCAtIHJlYWRfbWFyaykKKwl0c3RiCSVhM0AocmVhZF9lcnJvciAtIHJlYWRfbWFyaykKKwltb3ZlYgkjMHgwOCwgJWEzQCh3cml0ZV9tb2RlMSAtIHJlYWRfbWFyaykKKworCWxlYQlzZWN0b3JfZGF0YV9tYXJrLCAlYTAKKwltb3ZlcQkjMywgJWQxCisKKwkvKiB3YWl0IGRhdGEgYWRkcmVzcyBtYXJrICovCisKK3dhaXRfZGF0YV9tYXJrX2J5dGU6CisKKwl0c3RiCSVhMkAKKwlkYm1pCSVkMiwgd2FpdF9kYXRhX21hcmtfYnl0ZQorCWJwbAlkYXRhX2V4aXQKKworCW1vdmViCSVhM0AsICVkMworCWNtcGIJJWEwQCssICVkMworCWRibmUJJWQxLCB3YWl0X2RhdGFfbWFya19ieXRlCisJYm5lCXdhaXRfZGF0YV9pbml0CisKKwkvKiByZWFkIGRhdGEgKi8KKworCXRzdGIJJWEzQChyZWFkX2Vycm9yIC0gcmVhZF9tYXJrKQorCisJbW92ZWwJI3NlY3Rvcl9zaXplLTEsICVkNAkJLyogc2VjdG9yIHNpemUgKi8KK3JlYWRfbmV3X2RhdGE6CisJbW92ZXcJI21heF9yZXRyeSwgJWQyCityZWFkX2RhdGFfbG9vcDoKKwltb3ZlYgklYTJALCAlZDUKKwlhbmRiCSMweGMwLCAlZDUKKwlkYm5lCSVkMiwgcmVhZF9kYXRhX2xvb3AKKwliZXEJZGF0YV9leGl0CisJbW92ZWIJJWE1QCwgJWE0QCsKKwlhbmRiCSMweDQwLCAlZDUKKwlkYm5lCSVkNCwgcmVhZF9uZXdfZGF0YQorCWJlcQlleGl0X2xvb3AKKwltb3ZlYgklYTVALCAlYTRAKworCWRicmEJJWQ0LCByZWFkX25ld19kYXRhCitleGl0X2xvb3A6CisKKwkvKiByZWFkIENSQyAqLworCisJbW92ZXcJI21heF9yZXRyeSwgJWQyCitkYXRhX2NyYzA6CisKKwl0c3RiCSVhMkAKKwlkYm1pCSVkMiwgZGF0YV9jcmMwCisJYnBsCWRhdGFfZXhpdAorCisJbW92ZWIJJWEzQCwgJWQ1CisKKwltb3ZlcQkjbWF4X3JldHJ5LCAlZDIKKworZGF0YV9jcmMxOgorCisJdHN0YgklYTJACisJZGJtaQklZDIsIGRhdGFfY3JjMQorCWJwbAlkYXRhX2V4aXQKKworCW1vdmViCSVhM0AsICVkNQorCisJdHN0YgklYTNAKHJlYWRfZXJyb3IgLSByZWFkX21hcmspCisKKwltb3ZlYgkjMHgxOCwgJWEzQCh3cml0ZV9tb2RlMCAtIHJlYWRfbWFyaykKKworCS8qIHJldHVybiBudW1iZXIgb2YgYnl0ZXMgcmVhZCAqLworCisJbW92ZWwJI3NlY3Rvcl9zaXplLCAlZDAKKwlhZGR3CSMxLCAlZDQKKwlzdWJsCSVkNCwgJWQwCisJcnRzCitkYXRhX2V4aXQ6CisJbW92ZWIJIzB4MTgsICVhM0Aod3JpdGVfbW9kZTAgLSByZWFkX21hcmspCisJbW92ZXEJIy0xLCAlZDAKKwlydHMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svdWIuYyBiL2RyaXZlcnMvYmxvY2svdWIuYwppbmRleCAxMmZiODE2Li42OWI3ZjhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3ViLmMKKysrIGIvZHJpdmVycy9ibG9jay91Yi5jCkBAIC0zOTEsNyArMzkxLDcgQEAKICAqLwogI2lmZGVmIENPTkZJR19VU0JfTElCVVNVQUwKIAotI2RlZmluZSB1Yl91c2JfaWRzICBzdG9yYWdlX3VzYl9pZHMKKyNkZWZpbmUgdWJfdXNiX2lkcyAgdXNiX3N0b3JhZ2VfdXNiX2lkcwogI2Vsc2UKIAogc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHViX3VzYl9pZHNbXSA9IHsKQEAgLTIxNDYsMTAgKzIxNDYsOSBAQAogCQllcCA9ICZhbHRzZXR0aW5nLT5lbmRwb2ludFtpXS5kZXNjOwogCiAJCS8qIElzIGl0IGEgQlVMSyBlbmRwb2ludD8gKi8KLQkJaWYgKChlcC0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spCi0JCQkJPT0gVVNCX0VORFBPSU5UX1hGRVJfQlVMSykgeworCQlpZiAodXNiX2VuZHBvaW50X3hmZXJfYnVsayhlcCkpIHsKIAkJCS8qIEJVTEsgaW4gb3Igb3V0PyAqLwotCQkJaWYgKGVwLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0RJUl9JTikgeworCQkJaWYgKHVzYl9lbmRwb2ludF9kaXJfaW4oZXApKSB7CiAJCQkJaWYgKGVwX2luID09IE5VTEwpCiAJCQkJCWVwX2luID0gZXA7CiAJCQl9IGVsc2UgewpAQCAtMjE2OCw5ICsyMTY3LDkgQEAKIAlzYy0+c2VuZF9jdHJsX3BpcGUgPSB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKTsKIAlzYy0+cmVjdl9jdHJsX3BpcGUgPSB1c2JfcmN2Y3RybHBpcGUoZGV2LCAwKTsKIAlzYy0+c2VuZF9idWxrX3BpcGUgPSB1c2Jfc25kYnVsa3BpcGUoZGV2LAotCQllcF9vdXQtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfTlVNQkVSX01BU0spOworCQl1c2JfZW5kcG9pbnRfbnVtKGVwX291dCkpOwogCXNjLT5yZWN2X2J1bGtfcGlwZSA9IHVzYl9yY3ZidWxrcGlwZShkZXYsIAotCQllcF9pbi0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9FTkRQT0lOVF9OVU1CRVJfTUFTSyk7CisJCXVzYl9lbmRwb2ludF9udW0oZXBfaW4pKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvYmZ1c2IuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2JmdXNiLmMKaW5kZXggZDNmMTRiZS4uMmEwMDcwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvYmZ1c2IuYworKysgYi9kcml2ZXJzL2JsdWV0b290aC9iZnVzYi5jCkBAIC0yNTcsOCArMjU3LDcgQEAKIAogCWlmIChoZHIgJiAweDEwKSB7CiAJCUJUX0VSUigiJXMgZXJyb3IgaW4gYmxvY2siLCBkYXRhLT5oZGV2LT5uYW1lKTsKLQkJaWYgKGRhdGEtPnJlYXNzZW1ibHkpCi0JCQlrZnJlZV9za2IoZGF0YS0+cmVhc3NlbWJseSk7CisJCWtmcmVlX3NrYihkYXRhLT5yZWFzc2VtYmx5KTsKIAkJZGF0YS0+cmVhc3NlbWJseSA9IE5VTEw7CiAJCXJldHVybiAtRUlPOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0M2NfY3MuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0M2NfY3MuYwppbmRleCBmZjE5NWMyLi5kNThlMjJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9idDNjX2NzLmMKKysrIGIvZHJpdmVycy9ibHVldG9vdGgvYnQzY19jcy5jCkBAIC0zNTksOSArMzU5LDkgQEAKIAkJCUJUX0VSUigiVmVyeSBzdHJhbmdlIChzdGF0PTB4JTA0eCkiLCBzdGF0KTsKIAkJfSBlbHNlIGlmICgoc3RhdCAmIDB4ZmYpICE9IDB4ZmYpIHsKIAkJCWlmIChzdGF0ICYgMHgwMDIwKSB7Ci0JCQkJaW50IHN0YXQgPSBidDNjX3JlYWQoaW9iYXNlLCAweDcwMDIpICYgMHgxMDsKKwkJCQlpbnQgc3RhdHVzID0gYnQzY19yZWFkKGlvYmFzZSwgMHg3MDAyKSAmIDB4MTA7CiAJCQkJQlRfSU5GTygiJXM6IEFudGVubmEgJXMiLCBpbmZvLT5oZGV2LT5uYW1lLAotCQkJCQkJCXN0YXQgPyAib3V0IiA6ICJpbiIpOworCQkJCQkJCXN0YXR1cyA/ICJvdXQiIDogImluIik7CiAJCQl9CiAJCQlpZiAoc3RhdCAmIDB4MDAwMSkKIAkJCQlidDNjX3JlY2VpdmUoaW5mbyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9idHVzYi5jIGIvZHJpdmVycy9ibHVldG9vdGgvYnR1c2IuYwppbmRleCBiNWZiZGE2Li5lNzBjNTdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9idHVzYi5jCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0dXNiLmMKQEAgLTM1LDcgKzM1LDcgQEAKICNpbmNsdWRlIDxuZXQvYmx1ZXRvb3RoL2JsdWV0b290aC5oPgogI2luY2x1ZGUgPG5ldC9ibHVldG9vdGgvaGNpX2NvcmUuaD4KIAotI2RlZmluZSBWRVJTSU9OICIwLjQiCisjZGVmaW5lIFZFUlNJT04gIjAuNSIKIAogc3RhdGljIGludCBpZ25vcmVfZGdhOwogc3RhdGljIGludCBpZ25vcmVfY3NyOwpAQCAtMTcxLDYgKzE3MSw3IEBACiAKIAlfX3U4IGNtZHJlcV90eXBlOwogCisJdW5zaWduZWQgaW50IHNjb19udW07CiAJaW50IGlzb2NfYWx0c2V0dGluZzsKIAlpbnQgc3VzcGVuZF9jb3VudDsKIH07CkBAIC00OTYsMTEgKzQ5NywyMyBAQAogCQlyZXR1cm4gMDsKIAogCWVyciA9IGJ0dXNiX3N1Ym1pdF9pbnRyX3VyYihoZGV2LCBHRlBfS0VSTkVMKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBmYWlsZWQ7CisKKwllcnIgPSBidHVzYl9zdWJtaXRfYnVsa191cmIoaGRldiwgR0ZQX0tFUk5FTCk7CiAJaWYgKGVyciA8IDApIHsKLQkJY2xlYXJfYml0KEJUVVNCX0lOVFJfUlVOTklORywgJmRhdGEtPmZsYWdzKTsKLQkJY2xlYXJfYml0KEhDSV9SVU5OSU5HLCAmaGRldi0+ZmxhZ3MpOworCQl1c2Jfa2lsbF9hbmNob3JlZF91cmJzKCZkYXRhLT5pbnRyX2FuY2hvcik7CisJCWdvdG8gZmFpbGVkOwogCX0KIAorCXNldF9iaXQoQlRVU0JfQlVMS19SVU5OSU5HLCAmZGF0YS0+ZmxhZ3MpOworCWJ0dXNiX3N1Ym1pdF9idWxrX3VyYihoZGV2LCBHRlBfS0VSTkVMKTsKKworCXJldHVybiAwOworCitmYWlsZWQ6CisJY2xlYXJfYml0KEJUVVNCX0lOVFJfUlVOTklORywgJmRhdGEtPmZsYWdzKTsKKwljbGVhcl9iaXQoSENJX1JVTk5JTkcsICZoZGV2LT5mbGFncyk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtNjU1LDE5ICs2NjgsMTAgQEAKIAogCUJUX0RCRygiJXMgZXZ0ICVkIiwgaGRldi0+bmFtZSwgZXZ0KTsKIAotCWlmIChoZGV2LT5jb25uX2hhc2guYWNsX251bSA+IDApIHsKLQkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KEJUVVNCX0JVTEtfUlVOTklORywgJmRhdGEtPmZsYWdzKSkgewotCQkJaWYgKGJ0dXNiX3N1Ym1pdF9idWxrX3VyYihoZGV2LCBHRlBfQVRPTUlDKSA8IDApCi0JCQkJY2xlYXJfYml0KEJUVVNCX0JVTEtfUlVOTklORywgJmRhdGEtPmZsYWdzKTsKLQkJCWVsc2UKLQkJCQlidHVzYl9zdWJtaXRfYnVsa191cmIoaGRldiwgR0ZQX0FUT01JQyk7Ci0JCX0KLQl9IGVsc2UgewotCQljbGVhcl9iaXQoQlRVU0JfQlVMS19SVU5OSU5HLCAmZGF0YS0+ZmxhZ3MpOwotCQl1c2JfdW5saW5rX2FuY2hvcmVkX3VyYnMoJmRhdGEtPmJ1bGtfYW5jaG9yKTsKKwlpZiAoaGRldi0+Y29ubl9oYXNoLnNjb19udW0gIT0gZGF0YS0+c2NvX251bSkgeworCQlkYXRhLT5zY29fbnVtID0gaGRldi0+Y29ubl9oYXNoLnNjb19udW07CisJCXNjaGVkdWxlX3dvcmsoJmRhdGEtPndvcmspOwogCX0KLQotCXNjaGVkdWxlX3dvcmsoJmRhdGEtPndvcmspOwogfQogCiBzdGF0aWMgaW50IGlubGluZSBfX3NldF9pc29jX2ludGVyZmFjZShzdHJ1Y3QgaGNpX2RldiAqaGRldiwgaW50IGFsdHNldHRpbmcpCkBAIC05ODIsOSArOTg2LDExIEBACiAJfQogCiAJaWYgKHRlc3RfYml0KEJUVVNCX0JVTEtfUlVOTklORywgJmRhdGEtPmZsYWdzKSkgewotCQlpZiAoYnR1c2Jfc3VibWl0X2J1bGtfdXJiKGhkZXYsIEdGUF9OT0lPKSA8IDApCisJCWVyciA9IGJ0dXNiX3N1Ym1pdF9idWxrX3VyYihoZGV2LCBHRlBfTk9JTyk7CisJCWlmIChlcnIgPCAwKSB7CiAJCQljbGVhcl9iaXQoQlRVU0JfQlVMS19SVU5OSU5HLCAmZGF0YS0+ZmxhZ3MpOwotCQllbHNlCisJCQlyZXR1cm4gZXJyOworCQl9IGVsc2UKIAkJCWJ0dXNiX3N1Ym1pdF9idWxrX3VyYihoZGV2LCBHRlBfTk9JTyk7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9oY2lfaDQuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV9oNC5jCmluZGV4IGIwZmFmYjAuLmMwY2U4MTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV9oNC5jCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV9oNC5jCkBAIC0xMDIsOCArMTAyLDcgQEAKIAogCXNrYl9xdWV1ZV9wdXJnZSgmaDQtPnR4cSk7CiAKLQlpZiAoaDQtPnJ4X3NrYikKLQkJa2ZyZWVfc2tiKGg0LT5yeF9za2IpOworCWtmcmVlX3NrYihoNC0+cnhfc2tiKTsKIAogCWh1LT5wcml2ID0gTlVMTDsKIAlrZnJlZShoNCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9oY2lfbGwuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV9sbC5jCmluZGV4IGI5MWQ0NWEuLjVjNjUwMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV9sbC5jCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV9sbC5jCkBAIC0xNjMsOCArMTYzLDcgQEAKIAlza2JfcXVldWVfcHVyZ2UoJmxsLT50eF93YWl0X3EpOwogCXNrYl9xdWV1ZV9wdXJnZSgmbGwtPnR4cSk7CiAKLQlpZiAobGwtPnJ4X3NrYikKLQkJa2ZyZWVfc2tiKGxsLT5yeF9za2IpOworCWtmcmVlX3NrYihsbC0+cnhfc2tiKTsKIAogCWh1LT5wcml2ID0gTlVMTDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h2Y19pdWN2LmMgYi9kcml2ZXJzL2NoYXIvaHZjX2l1Y3YuYwppbmRleCBhNTM0OTY4Li41NDQ4MWE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHZjX2l1Y3YuYworKysgYi9kcml2ZXJzL2NoYXIvaHZjX2l1Y3YuYwpAQCAtMTMsMTAgKzEzLDExIEBACiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9lYmNkaWMuaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21lbXBvb2wuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxuZXQvaXVjdi9pdWN2Lmg+CkBAIC05NSw2ICs5NiwxMiBAQAogLyogQXJyYXkgb2YgYWxsb2NhdGVkIGh2YyBpdWN2IHR0eSBsaW5lcy4uLiAqLwogc3RhdGljIHN0cnVjdCBodmNfaXVjdl9wcml2YXRlICpodmNfaXVjdl90YWJsZVtNQVhfSFZDX0lVQ1ZfTElORVNdOwogI2RlZmluZSBJVUNWX0hWQ19DT05fSURYCSgwKQorLyogTGlzdCBvZiB6L1ZNIHVzZXIgSUQgZmlsdGVyIGVudHJpZXMgKHN0cnVjdCBpdWN2X3ZtaWRfZmlsdGVyKSAqLworI2RlZmluZSBNQVhfVk1JRF9GSUxURVIJCSg1MDApCitzdGF0aWMgc2l6ZV90IGh2Y19pdWN2X2ZpbHRlcl9zaXplOworc3RhdGljIHZvaWQgKmh2Y19pdWN2X2ZpbHRlcjsKK3N0YXRpYyBjb25zdCBjaGFyICpodmNfaXVjdl9maWx0ZXJfc3RyaW5nOworc3RhdGljIERFRklORV9SV0xPQ0soaHZjX2l1Y3ZfZmlsdGVyX2xvY2spOwogCiAvKiBLbWVtIGNhY2hlIGFuZCBtZW1wb29sIGZvciBpdWN2X3R0eV9idWZmZXIgZWxlbWVudHMgKi8KIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqaHZjX2l1Y3ZfYnVmZmVyX2NhY2hlOwpAQCAtNjE4LDYgKzYyNSwyNyBAQAogfQogCiAvKioKKyAqIGh2Y19pdWN2X2ZpbHRlcl9jb25ucmVxKCkgLSBGaWx0ZXIgY29ubmVjdGlvbiByZXF1ZXN0IGJhc2VkIG9uIHovVk0gdXNlciBJRAorICogQGlwdm1pZDoJT3JpZ2luYXRpbmcgei9WTSB1c2VyIElEIChyaWdodCBwYWRkZWQgd2l0aCBibGFua3MpCisgKgorICogUmV0dXJucyAwIGlmIHRoZSB6L1ZNIHVzZXIgSUQgQGlwdm1pZCBpcyBhbGxvd2VkIHRvIGNvbm5lY3Rpb24sIG90aGVyd2lzZQorICogbm9uLXplcm8uCisgKi8KK3N0YXRpYyBpbnQgaHZjX2l1Y3ZfZmlsdGVyX2Nvbm5yZXEodTggaXB2bWlkWzhdKQoreworCXNpemVfdCBpOworCisJLyogTm90ZTogZGVmYXVsdCBwb2xpY3kgaXMgQUNDRVBUIGlmIG5vIGZpbHRlciBpcyBzZXQgKi8KKwlpZiAoIWh2Y19pdWN2X2ZpbHRlcl9zaXplKQorCQlyZXR1cm4gMDsKKworCWZvciAoaSA9IDA7IGkgPCBodmNfaXVjdl9maWx0ZXJfc2l6ZTsgaSsrKQorCQlpZiAoMCA9PSBtZW1jbXAoaXB2bWlkLCBodmNfaXVjdl9maWx0ZXIgKyAoOCAqIGkpLCA4KSkKKwkJCXJldHVybiAwOworCXJldHVybiAxOworfQorCisvKioKICAqIGh2Y19pdWN2X3BhdGhfcGVuZGluZygpIC0gSVVDViBoYW5kbGVyIHRvIHByb2Nlc3MgYSBjb25uZWN0aW9uIHJlcXVlc3QuCiAgKiBAcGF0aDoJUGVuZGluZyBwYXRoIChzdHJ1Y3QgaXVjdl9wYXRoKQogICogQGlwdm1pZDoJei9WTSBzeXN0ZW0gaWRlbnRpZmllciBvZiBvcmlnaW5hdG9yCkBAIC02NDEsNiArNjY5LDcgQEAKIHsKIAlzdHJ1Y3QgaHZjX2l1Y3ZfcHJpdmF0ZSAqcHJpdjsKIAl1OCBudXNlcl9kYXRhWzE2XTsKKwl1OCB2bV91c2VyX2lkWzldOwogCWludCBpLCByYzsKIAogCXByaXYgPSBOVUxMOwpAQCAtNjUzLDYgKzY4MiwyMCBAQAogCWlmICghcHJpdikKIAkJcmV0dXJuIC1FTk9ERVY7CiAKKwkvKiBFbmZvcmNlIHRoYXQgaXB2bWlkIGlzIGFsbG93ZWQgdG8gY29ubmVjdCB0byB1cyAqLworCXJlYWRfbG9jaygmaHZjX2l1Y3ZfZmlsdGVyX2xvY2spOworCXJjID0gaHZjX2l1Y3ZfZmlsdGVyX2Nvbm5yZXEoaXB2bWlkKTsKKwlyZWFkX3VubG9jaygmaHZjX2l1Y3ZfZmlsdGVyX2xvY2spOworCWlmIChyYykgeworCQlpdWN2X3BhdGhfc2V2ZXIocGF0aCwgaXB1c2VyKTsKKwkJaXVjdl9wYXRoX2ZyZWUocGF0aCk7CisJCW1lbWNweSh2bV91c2VyX2lkLCBpcHZtaWQsIDgpOworCQl2bV91c2VyX2lkWzhdID0gMDsKKwkJcHJfaW5mbygiQSBjb25uZWN0aW9uIHJlcXVlc3QgZnJvbSB6L1ZNIHVzZXIgSUQgJXMgIgorCQkJIndhcyByZWZ1c2VkXG4iLCB2bV91c2VyX2lkKTsKKwkJcmV0dXJuIDA7CisJfQorCiAJc3Bpbl9sb2NrKCZwcml2LT5sb2NrKTsKIAogCS8qIElmIHRoZSB0ZXJtaW5hbCBpcyBhbHJlYWR5IGNvbm5lY3RlZCBvciBiZWluZyBzZXZlcmVkLCB0aGVuIHNldmVyCkBAIC04NzcsNiArOTIwLDE3MSBAQAogfQogCiAvKioKKyAqIGh2Y19pdWN2X3BhcnNlX2ZpbHRlcigpIC0gUGFyc2UgZmlsdGVyIGZvciBhIHNpbmdsZSB6L1ZNIHVzZXIgSUQKKyAqIEBmaWx0ZXI6CVN0cmluZyBjb250YWluaW5nIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2Ygei9WTSB1c2VyIElEcworICovCitzdGF0aWMgY29uc3QgY2hhciAqaHZjX2l1Y3ZfcGFyc2VfZmlsdGVyKGNvbnN0IGNoYXIgKmZpbHRlciwgY2hhciAqZGVzdCkKK3sKKwljb25zdCBjaGFyICpuZXh0ZGVsaW0sICpyZXNpZHVhbDsKKwlzaXplX3QgbGVuOworCisJbmV4dGRlbGltID0gc3RyY2hyKGZpbHRlciwgJywnKTsKKwlpZiAobmV4dGRlbGltKSB7CisJCWxlbiA9IG5leHRkZWxpbSAtIGZpbHRlcjsKKwkJcmVzaWR1YWwgPSBuZXh0ZGVsaW0gKyAxOworCX0gZWxzZSB7CisJCWxlbiA9IHN0cmxlbihmaWx0ZXIpOworCQlyZXNpZHVhbCA9IGZpbHRlciArIGxlbjsKKwl9CisKKwlpZiAobGVuID09IDApCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCisJLyogY2hlY2sgZm9yICdcbicgKGlmIGNhbGxlZCBmcm9tIHN5c2ZzKSAqLworCWlmIChmaWx0ZXJbbGVuIC0gMV0gPT0gJ1xuJykKKwkJbGVuLS07CisKKwlpZiAobGVuID4gOCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisKKwkvKiBwYWQgd2l0aCBibGFua3MgYW5kIHNhdmUgdXBwZXIgY2FzZSB2ZXJzaW9uIG9mIHVzZXIgSUQgKi8KKwltZW1zZXQoZGVzdCwgJyAnLCA4KTsKKwl3aGlsZSAobGVuLS0pCisJCWRlc3RbbGVuXSA9IHRvdXBwZXIoZmlsdGVyW2xlbl0pOworCXJldHVybiByZXNpZHVhbDsKK30KKworLyoqCisgKiBodmNfaXVjdl9zZXR1cF9maWx0ZXIoKSAtIFNldCB1cCB6L1ZNIHVzZXIgSUQgZmlsdGVyCisgKiBAZmlsdGVyOglTdHJpbmcgY29uc2lzdGluZyBvZiBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHovVk0gdXNlciBJRHMKKyAqCisgKiBUaGUgZnVuY3Rpb24gcGFyc2VzIHRoZSBAZmlsdGVyIHN0cmluZyBhbmQgY3JlYXRlcyBhbiBhcnJheSBjb250YWluaW5nCisgKiB0aGUgbGlzdCBvZiB6L1ZNIHVzZXIgSUQgZmlsdGVyIGVudHJpZXMuCisgKiBSZXR1cm4gY29kZSAwIG1lYW5zIHN1Y2Nlc3MsIC1FSU5WQUwgaWYgdGhlIGZpbHRlciBpcyBzeW50YWN0aWNhbGx5CisgKiBpbmNvcnJlY3QsIC1FTk9NRU0gaWYgdGhlcmUgd2FzIG5vdCBlbm91Z2ggbWVtb3J5IHRvIGFsbG9jYXRlIHRoZQorICogZmlsdGVyIGxpc3QgYXJyYXksIG9yIC1FTk9TUEMgaWYgdG9vIG1hbnkgei9WTSB1c2VyIElEcyBoYXZlIGJlZW4gc3BlY2lmaWVkLgorICovCitzdGF0aWMgaW50IGh2Y19pdWN2X3NldHVwX2ZpbHRlcihjb25zdCBjaGFyICp2YWwpCit7CisJY29uc3QgY2hhciAqcmVzaWR1YWw7CisJaW50IGVycjsKKwlzaXplX3Qgc2l6ZSwgY291bnQ7CisJdm9pZCAqYXJyYXksICpvbGRfZmlsdGVyOworCisJY291bnQgPSBzdHJsZW4odmFsKTsKKwlpZiAoY291bnQgPT0gMCB8fCAoY291bnQgPT0gMSAmJiB2YWxbMF0gPT0gJ1xuJykpIHsKKwkJc2l6ZSAgPSAwOworCQlhcnJheSA9IE5VTEw7CisJCWdvdG8gb3V0X3JlcGxhY2VfZmlsdGVyOwkvKiBjbGVhciBmaWx0ZXIgKi8KKwl9CisKKwkvKiBjb3VudCB1c2VyIElEcyBpbiBvcmRlciB0byBhbGxvY2F0ZSBzdWZmaWNpZW50IG1lbW9yeSAqLworCXNpemUgPSAxOworCXJlc2lkdWFsID0gdmFsOworCXdoaWxlICgocmVzaWR1YWwgPSBzdHJjaHIocmVzaWR1YWwsICcsJykpICE9IE5VTEwpIHsKKwkJcmVzaWR1YWwrKzsKKwkJc2l6ZSsrOworCX0KKworCS8qIGNoZWNrIGlmIHRoZSBzcGVjaWZpZWQgbGlzdCBleGNlZWRzIHRoZSBmaWx0ZXIgbGltaXQgKi8KKwlpZiAoc2l6ZSA+IE1BWF9WTUlEX0ZJTFRFUikKKwkJcmV0dXJuIC1FTk9TUEM7CisKKwlhcnJheSA9IGt6YWxsb2Moc2l6ZSAqIDgsIEdGUF9LRVJORUwpOworCWlmICghYXJyYXkpCisJCXJldHVybiAtRU5PTUVNOworCisJY291bnQgPSBzaXplOworCXJlc2lkdWFsID0gdmFsOworCXdoaWxlICgqcmVzaWR1YWwgJiYgY291bnQpIHsKKwkJcmVzaWR1YWwgPSBodmNfaXVjdl9wYXJzZV9maWx0ZXIocmVzaWR1YWwsCisJCQkJCQkgYXJyYXkgKyAoKHNpemUgLSBjb3VudCkgKiA4KSk7CisJCWlmIChJU19FUlIocmVzaWR1YWwpKSB7CisJCQllcnIgPSBQVFJfRVJSKHJlc2lkdWFsKTsKKwkJCWtmcmVlKGFycmF5KTsKKwkJCWdvdG8gb3V0X2VycjsKKwkJfQorCQljb3VudC0tOworCX0KKworb3V0X3JlcGxhY2VfZmlsdGVyOgorCXdyaXRlX2xvY2tfYmgoJmh2Y19pdWN2X2ZpbHRlcl9sb2NrKTsKKwlvbGRfZmlsdGVyID0gaHZjX2l1Y3ZfZmlsdGVyOworCWh2Y19pdWN2X2ZpbHRlcl9zaXplID0gc2l6ZTsKKwlodmNfaXVjdl9maWx0ZXIgPSBhcnJheTsKKwl3cml0ZV91bmxvY2tfYmgoJmh2Y19pdWN2X2ZpbHRlcl9sb2NrKTsKKwlrZnJlZShvbGRfZmlsdGVyKTsKKworCWVyciA9IDA7CitvdXRfZXJyOgorCXJldHVybiBlcnI7Cit9CisKKy8qKgorICogcGFyYW1fc2V0X3ZtaWRmaWx0ZXIoKSAtIFNldCB6L1ZNIHVzZXIgSUQgZmlsdGVyIHBhcmFtZXRlcgorICogQHZhbDoJU3RyaW5nIGNvbnNpc3Rpbmcgb2YgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiB6L1ZNIHVzZXIgSURzCisgKiBAa3A6CQlLZXJuZWwgcGFyYW1ldGVyIHBvaW50aW5nIHRvIGh2Y19pdWN2X2ZpbHRlciBhcnJheQorICoKKyAqIFRoZSBmdW5jdGlvbiBzZXRzIHVwIHRoZSB6L1ZNIHVzZXIgSUQgZmlsdGVyIHNwZWNpZmllZCBhcyBjb21tYS1zZXBhcmF0ZWQKKyAqIGxpc3Qgb2YgdXNlciBJRHMgaW4gQHZhbC4KKyAqIE5vdGU6IElmIGl0IGlzIGNhbGxlZCBlYXJseSBpbiB0aGUgYm9vdCBwcm9jZXNzLCBAdmFsIGlzIHN0b3JlZCBhbmQKKyAqCSBwYXJzZWQgbGF0ZXIgaW4gaHZjX2l1Y3ZfaW5pdCgpLgorICovCitzdGF0aWMgaW50IHBhcmFtX3NldF92bWlkZmlsdGVyKGNvbnN0IGNoYXIgKnZhbCwgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApCit7CisJaW50IHJjOworCisJaWYgKCFNQUNISU5FX0lTX1ZNIHx8ICFodmNfaXVjdl9kZXZpY2VzKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmICghdmFsKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJjID0gMDsKKwlpZiAoc2xhYl9pc19hdmFpbGFibGUoKSkKKwkJcmMgPSBodmNfaXVjdl9zZXR1cF9maWx0ZXIodmFsKTsKKwllbHNlCisJCWh2Y19pdWN2X2ZpbHRlcl9zdHJpbmcgPSB2YWw7CS8qIGRlZmVyLi4uICovCisJcmV0dXJuIHJjOworfQorCisvKioKKyAqIHBhcmFtX2dldF92bWlkZmlsdGVyKCkgLSBHZXQgei9WTSB1c2VyIElEIGZpbHRlcgorICogQGJ1ZmZlcjoJQnVmZmVyIHRvIHN0b3JlIHovVk0gdXNlciBJRCBmaWx0ZXIsCisgKgkJKGJ1ZmZlciBzaXplIGFzc3VtcHRpb24gUEFHRV9TSVpFKQorICogQGtwOgkJS2VybmVsIHBhcmFtZXRlciBwb2ludGluZyB0byB0aGUgaHZjX2l1Y3ZfZmlsdGVyIGFycmF5CisgKgorICogVGhlIGZ1bmN0aW9uIHN0b3JlcyB0aGUgZmlsdGVyIGFzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2Ygei9WTSB1c2VyIElEcworICogaW4gQGJ1ZmZlci4gVHlwaWNhbGx5LCBzeXNmcyByb3V0aW5lcyBjYWxsIHRoaXMgZnVuY3Rpb24gZm9yIGF0dHIgc2hvdy4KKyAqLworc3RhdGljIGludCBwYXJhbV9nZXRfdm1pZGZpbHRlcihjaGFyICpidWZmZXIsIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKQoreworCWludCByYzsKKwlzaXplX3QgaW5kZXgsIGxlbjsKKwl2b2lkICpzdGFydCwgKmVuZDsKKworCWlmICghTUFDSElORV9JU19WTSB8fCAhaHZjX2l1Y3ZfZGV2aWNlcykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyYyA9IDA7CisJcmVhZF9sb2NrX2JoKCZodmNfaXVjdl9maWx0ZXJfbG9jayk7CisJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgaHZjX2l1Y3ZfZmlsdGVyX3NpemU7IGluZGV4KyspIHsKKwkJc3RhcnQgPSBodmNfaXVjdl9maWx0ZXIgKyAoOCAqIGluZGV4KTsKKwkJZW5kICAgPSBtZW1jaHIoc3RhcnQsICcgJywgOCk7CisJCWxlbiAgID0gKGVuZCkgPyBlbmQgLSBzdGFydCA6IDg7CisJCW1lbWNweShidWZmZXIgKyByYywgc3RhcnQsIGxlbik7CisJCXJjICs9IGxlbjsKKwkJYnVmZmVyW3JjKytdID0gJywnOworCX0KKwlyZWFkX3VubG9ja19iaCgmaHZjX2l1Y3ZfZmlsdGVyX2xvY2spOworCWlmIChyYykKKwkJYnVmZmVyWy0tcmNdID0gJ1wwJzsJLyogcmVwbGFjZSBsYXN0IGNvbW1hIGFuZCB1cGRhdGUgcmMgKi8KKwlyZXR1cm4gcmM7Cit9CisKKyNkZWZpbmUgcGFyYW1fY2hlY2tfdm1pZGZpbHRlcihuYW1lLCBwKSBfX3BhcmFtX2NoZWNrKG5hbWUsIHAsIHZvaWQpCisKKy8qKgogICogaHZjX2l1Y3ZfaW5pdCgpIC0gei9WTSBJVUNWIEhWQyBkZXZpY2UgZHJpdmVyIGluaXRpYWxpemF0aW9uCiAgKi8KIHN0YXRpYyBpbnQgX19pbml0IGh2Y19pdWN2X2luaXQodm9pZCkKQEAgLTg4NCwyNCArMTA5Miw1MyBAQAogCWludCByYzsKIAl1bnNpZ25lZCBpbnQgaTsKIAotCWlmICghTUFDSElORV9JU19WTSkgewotCQlwcl9pbmZvKCJUaGUgei9WTSBJVUNWIEhWQyBkZXZpY2UgZHJpdmVyIGNhbm5vdCAiCi0JCQkgICAiYmUgdXNlZCB3aXRob3V0IHovVk1cbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KIAlpZiAoIWh2Y19pdWN2X2RldmljZXMpCiAJCXJldHVybiAtRU5PREVWOwogCi0JaWYgKGh2Y19pdWN2X2RldmljZXMgPiBNQVhfSFZDX0lVQ1ZfTElORVMpCi0JCXJldHVybiAtRUlOVkFMOworCWlmICghTUFDSElORV9JU19WTSkgeworCQlwcl9ub3RpY2UoIlRoZSB6L1ZNIElVQ1YgSFZDIGRldmljZSBkcml2ZXIgY2Fubm90ICIKKwkJCSAgICJiZSB1c2VkIHdpdGhvdXQgei9WTVxuIik7CisJCXJjID0gLUVOT0RFVjsKKwkJZ290byBvdXRfZXJyb3I7CisJfQorCisJaWYgKGh2Y19pdWN2X2RldmljZXMgPiBNQVhfSFZDX0lVQ1ZfTElORVMpIHsKKwkJcHJfZXJyKCIlbHUgaXMgbm90IGEgdmFsaWQgdmFsdWUgZm9yIHRoZSBodmNfaXVjdj0gIgorCQkJImtlcm5lbCBwYXJhbWV0ZXJcbiIsIGh2Y19pdWN2X2RldmljZXMpOworCQlyYyA9IC1FSU5WQUw7CisJCWdvdG8gb3V0X2Vycm9yOworCX0KKworCS8qIHBhcnNlIGh2Y19pdWN2X2FsbG93IHN0cmluZyBhbmQgY3JlYXRlIHovVk0gdXNlciBJRCBmaWx0ZXIgbGlzdCAqLworCWlmIChodmNfaXVjdl9maWx0ZXJfc3RyaW5nKSB7CisJCXJjID0gaHZjX2l1Y3Zfc2V0dXBfZmlsdGVyKGh2Y19pdWN2X2ZpbHRlcl9zdHJpbmcpOworCQlzd2l0Y2ggKHJjKSB7CisJCWNhc2UgMDoKKwkJCWJyZWFrOworCQljYXNlIC1FTk9NRU06CisJCQlwcl9lcnIoIkFsbG9jYXRpbmcgbWVtb3J5IGZhaWxlZCB3aXRoICIKKwkJCQkicmVhc29uIGNvZGU9JWRcbiIsIDMpOworCQkJZ290byBvdXRfZXJyb3I7CisJCWNhc2UgLUVJTlZBTDoKKwkJCXByX2VycigiaHZjX2l1Y3ZfYWxsb3c9IGRvZXMgbm90IHNwZWNpZnkgYSB2YWxpZCAiCisJCQkJInovVk0gdXNlciBJRCBsaXN0XG4iKTsKKwkJCWdvdG8gb3V0X2Vycm9yOworCQljYXNlIC1FTk9TUEM6CisJCQlwcl9lcnIoImh2Y19pdWN2X2FsbG93PSBzcGVjaWZpZXMgdG9vIG1hbnkgIgorCQkJCSJ6L1ZNIHVzZXIgSURzXG4iKTsKKwkJCWdvdG8gb3V0X2Vycm9yOworCQlkZWZhdWx0OgorCQkJZ290byBvdXRfZXJyb3I7CisJCX0KKwl9CiAKIAlodmNfaXVjdl9idWZmZXJfY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZShLTVNHX0NPTVBPTkVOVCwKIAkJCQkJICAgc2l6ZW9mKHN0cnVjdCBpdWN2X3R0eV9idWZmZXIpLAogCQkJCQkgICAwLCAwLCBOVUxMKTsKIAlpZiAoIWh2Y19pdWN2X2J1ZmZlcl9jYWNoZSkgewogCQlwcl9lcnIoIkFsbG9jYXRpbmcgbWVtb3J5IGZhaWxlZCB3aXRoIHJlYXNvbiBjb2RlPSVkXG4iLCAxKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBvdXRfZXJyb3I7CiAJfQogCiAJaHZjX2l1Y3ZfbWVtcG9vbCA9IG1lbXBvb2xfY3JlYXRlX3NsYWJfcG9vbChNRU1QT09MX01JTl9OUiwKQEAgLTkwOSw3ICsxMTQ2LDggQEAKIAlpZiAoIWh2Y19pdWN2X21lbXBvb2wpIHsKIAkJcHJfZXJyKCJBbGxvY2F0aW5nIG1lbW9yeSBmYWlsZWQgd2l0aCByZWFzb24gY29kZT0lZFxuIiwgMik7CiAJCWttZW1fY2FjaGVfZGVzdHJveShodmNfaXVjdl9idWZmZXJfY2FjaGUpOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIG91dF9lcnJvcjsKIAl9CiAKIAkvKiByZWdpc3RlciB0aGUgZmlyc3QgdGVybWluYWwgZGV2aWNlIGFzIGNvbnNvbGUKQEAgLTk1Myw2ICsxMTkxLDggQEAKIG91dF9lcnJvcl9tZW1vcnk6CiAJbWVtcG9vbF9kZXN0cm95KGh2Y19pdWN2X21lbXBvb2wpOwogCWttZW1fY2FjaGVfZGVzdHJveShodmNfaXVjdl9idWZmZXJfY2FjaGUpOworb3V0X2Vycm9yOgorCWh2Y19pdWN2X2RldmljZXMgPSAwOyAvKiBlbnN1cmUgdGhhdCB3ZSBkbyBub3QgcHJvdmlkZSBhbnkgZGV2aWNlICovCiAJcmV0dXJuIHJjOwogfQogCkBAIC05NjgsMyArMTIwOCw0IEBACiAKIGRldmljZV9pbml0Y2FsbChodmNfaXVjdl9pbml0KTsKIF9fc2V0dXAoImh2Y19pdWN2PSIsIGh2Y19pdWN2X2NvbmZpZyk7Citjb3JlX3BhcmFtKGh2Y19pdWN2X2FsbG93LCBodmNfaXVjdl9maWx0ZXIsIHZtaWRmaWx0ZXIsIDA2NDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9LY29uZmlnIGIvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9LY29uZmlnCmluZGV4IDg4MjJlY2EuLjVmYWI2NDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9od19yYW5kb20vS2NvbmZpZworKysgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL0tjb25maWcKQEAgLTIwLDYgKzIwLDIwIEBACiAKIAkgIElmIHVuc3VyZSwgc2F5IFkuCiAKK2NvbmZpZyBIV19SQU5ET01fVElNRVJJT01FTQorCXRyaXN0YXRlICJUaW1lciBJT01FTSBIVyBSYW5kb20gTnVtYmVyIEdlbmVyYXRvciBzdXBwb3J0IgorCWRlcGVuZHMgb24gSFdfUkFORE9NICYmIEhBU19JT01FTQorCS0tLWhlbHAtLS0KKwkgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIGtlcm5lbC1zaWRlIHN1cHBvcnQgZm9yIGEgZ2VuZXJpYyBSYW5kb20KKwkgIE51bWJlciBHZW5lcmF0b3IgdXNlZCBieSByZWFkaW5nIGEgJ2R1bWInIGlvbWVtIGFkZHJlc3MgdGhhdAorCSAgaXMgdG8gYmUgcmVhZCBubyBmYXN0ZXIgdGhhbiwgZm9yIGV4YW1wbGUsIG9uY2UgYSBzZWNvbmQ7CisJICB0aGUgZGVmYXVsdCBGUEdBIGJpdHN0cmVhbSBvbiB0aGUgVFMtNzgwMCBoYXMgc3VjaCBmdW5jdGlvbmFsaXR5LgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB0aW1lcmlvbWVtLXJuZy4KKworCSAgSWYgdW5zdXJlLCBzYXkgWS4KKwogY29uZmlnIEhXX1JBTkRPTV9JTlRFTAogCXRyaXN0YXRlICJJbnRlbCBIVyBSYW5kb20gTnVtYmVyIEdlbmVyYXRvciBzdXBwb3J0IgogCWRlcGVuZHMgb24gSFdfUkFORE9NICYmIChYODYgfHwgSUE2NCkgJiYgUENJCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL01ha2VmaWxlIGIvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9NYWtlZmlsZQppbmRleCBiNmVmZmI3Li5lODFkMjFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvY2hhci9od19yYW5kb20vTWFrZWZpbGUKQEAgLTQsNiArNCw3IEBACiAKIG9iai0kKENPTkZJR19IV19SQU5ET00pICs9IHJuZy1jb3JlLm8KIHJuZy1jb3JlLXkgOj0gY29yZS5vCitvYmotJChDT05GSUdfSFdfUkFORE9NX1RJTUVSSU9NRU0pICs9IHRpbWVyaW9tZW0tcm5nLm8KIG9iai0kKENPTkZJR19IV19SQU5ET01fSU5URUwpICs9IGludGVsLXJuZy5vCiBvYmotJChDT05GSUdfSFdfUkFORE9NX0FNRCkgKz0gYW1kLXJuZy5vCiBvYmotJChDT05GSUdfSFdfUkFORE9NX0dFT0RFKSArPSBnZW9kZS1ybmcubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS90aW1lcmlvbWVtLXJuZy5jIGIvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS90aW1lcmlvbWVtLXJuZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwYWQ0MWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL3RpbWVyaW9tZW0tcm5nLmMKQEAgLTAsMCArMSwxNTEgQEAKKy8qCisgKiBkcml2ZXJzL2NoYXIvaHdfcmFuZG9tL3RpbWVyaW9tZW0tcm5nLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQWxleGFuZGVyIENsb3V0ZXIgPGFsZXhAZGlncml6Lm9yZy51az4KKyAqCisgKiBEZXJpdmVkIGZyb20gZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9vbWFwLXJuZy5jCisgKiAgIENvcHlyaWdodCAyMDA1IChjKSBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCisgKiAgIEF1dGhvcjogRGVlcGFrIFNheGVuYSA8ZHNheGVuYUBwbGV4aXR5Lm5ldD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIE92ZXJ2aWV3OgorICogICBUaGlzIGRyaXZlciBpcyB1c2VmdWwgZm9yIHBsYXRmb3JtcyB0aGF0IGhhdmUgYW4gSU8gcmFuZ2UgdGhhdCBwcm92aWRlcworICogICBwZXJpb2RpYyByYW5kb20gZGF0YSBmcm9tIGEgc2luZ2xlIElPIG1lbW9yeSBhZGRyZXNzLiAgQWxsIHRoZSBwbGF0Zm9ybQorICogICBoYXMgdG8gZG8gaXMgcHJvdmlkZSB0aGUgYWRkcmVzcyBhbmQgJ3dhaXQgdGltZScgdGhhdCBuZXcgZGF0YSBiZWNvbWVzCisgKiAgIGF2YWlsYWJsZS4KKyAqCisgKiBUT0RPOiBhZGQgc3VwcG9ydCBmb3IgcmVhZGluZyBzaXplcyBvdGhlciB0aGFuIDMyYml0cyBhbmQgbWFza2luZworICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9od19yYW5kb20uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyaW9tZW0tcm5nLmg+CisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CisKK3N0YXRpYyBzdHJ1Y3QgdGltZXJpb21lbV9ybmdfZGF0YSAqdGltZXJpb21lbV9ybmdfZGF0YTsKKworc3RhdGljIHZvaWQgdGltZXJpb21lbV9ybmdfdHJpZ2dlcih1bnNpZ25lZCBsb25nKTsKK3N0YXRpYyBERUZJTkVfVElNRVIodGltZXJpb21lbV9ybmdfdGltZXIsIHRpbWVyaW9tZW1fcm5nX3RyaWdnZXIsIDAsIDApOworCisvKgorICogaGF2ZSBkYXRhIHJldHVybiAxLCBob3dldmVyIHJldHVybiAwIGlmIHdlIGhhdmUgbm90aGluZworICovCitzdGF0aWMgaW50IHRpbWVyaW9tZW1fcm5nX2RhdGFfcHJlc2VudChzdHJ1Y3QgaHdybmcgKnJuZywgaW50IHdhaXQpCit7CisJaWYgKHJuZy0+cHJpdiA9PSAwKQorCQlyZXR1cm4gMTsKKworCWlmICghd2FpdCB8fCB0aW1lcmlvbWVtX3JuZ19kYXRhLT5wcmVzZW50KQorCQlyZXR1cm4gdGltZXJpb21lbV9ybmdfZGF0YS0+cHJlc2VudDsKKworCXdhaXRfZm9yX2NvbXBsZXRpb24oJnRpbWVyaW9tZW1fcm5nX2RhdGEtPmNvbXBsZXRpb24pOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgdGltZXJpb21lbV9ybmdfZGF0YV9yZWFkKHN0cnVjdCBod3JuZyAqcm5nLCB1MzIgKmRhdGEpCit7CisJdW5zaWduZWQgbG9uZyBjdXI7CisJczMyIGRlbGF5OworCisJKmRhdGEgPSByZWFkbCh0aW1lcmlvbWVtX3JuZ19kYXRhLT5hZGRyZXNzKTsKKworCWlmIChybmctPnByaXYgIT0gMCkgeworCQljdXIgPSBqaWZmaWVzOworCisJCWRlbGF5ID0gY3VyIC0gdGltZXJpb21lbV9ybmdfdGltZXIuZXhwaXJlczsKKwkJZGVsYXkgPSBybmctPnByaXYgLSAoZGVsYXkgJSBybmctPnByaXYpOworCisJCXRpbWVyaW9tZW1fcm5nX3RpbWVyLmV4cGlyZXMgPSBjdXIgKyBkZWxheTsKKwkJdGltZXJpb21lbV9ybmdfZGF0YS0+cHJlc2VudCA9IDA7CisKKwkJaW5pdF9jb21wbGV0aW9uKCZ0aW1lcmlvbWVtX3JuZ19kYXRhLT5jb21wbGV0aW9uKTsKKwkJYWRkX3RpbWVyKCZ0aW1lcmlvbWVtX3JuZ190aW1lcik7CisJfQorCisJcmV0dXJuIDQ7Cit9CisKK3N0YXRpYyB2b2lkIHRpbWVyaW9tZW1fcm5nX3RyaWdnZXIodW5zaWduZWQgbG9uZyBkdW1teSkKK3sKKwl0aW1lcmlvbWVtX3JuZ19kYXRhLT5wcmVzZW50ID0gMTsKKwljb21wbGV0ZSgmdGltZXJpb21lbV9ybmdfZGF0YS0+Y29tcGxldGlvbik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaHdybmcgdGltZXJpb21lbV9ybmdfb3BzID0geworCS5uYW1lCQk9ICJ0aW1lcmlvbWVtIiwKKwkuZGF0YV9wcmVzZW50CT0gdGltZXJpb21lbV9ybmdfZGF0YV9wcmVzZW50LAorCS5kYXRhX3JlYWQJPSB0aW1lcmlvbWVtX3JuZ19kYXRhX3JlYWQsCisJLnByaXYJCT0gMCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHRpbWVyaW9tZW1fcm5nX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaW50IHJldDsKKworCXRpbWVyaW9tZW1fcm5nX2RhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKworCWlmICh0aW1lcmlvbWVtX3JuZ19kYXRhLT5wZXJpb2QgIT0gMAorCQkmJiB1c2Vjc190b19qaWZmaWVzKHRpbWVyaW9tZW1fcm5nX2RhdGEtPnBlcmlvZCkgPiAwKSB7CisJCXRpbWVyaW9tZW1fcm5nX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzOworCisJCXRpbWVyaW9tZW1fcm5nX29wcy5wcml2ID0gdXNlY3NfdG9famlmZmllcygKKwkJCQkJCXRpbWVyaW9tZW1fcm5nX2RhdGEtPnBlcmlvZCk7CisJfQorCXRpbWVyaW9tZW1fcm5nX2RhdGEtPnByZXNlbnQgPSAxOworCisJcmV0ID0gaHdybmdfcmVnaXN0ZXIoJnRpbWVyaW9tZW1fcm5nX29wcyk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJwcm9ibGVtIHJlZ2lzdGVyaW5nXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiMzJiaXRzIGZyb20gMHglcCBAICVkdXNcbiIsCisJCQl0aW1lcmlvbWVtX3JuZ19kYXRhLT5hZGRyZXNzLAorCQkJdGltZXJpb21lbV9ybmdfZGF0YS0+cGVyaW9kKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCB0aW1lcmlvbWVtX3JuZ19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlkZWxfdGltZXJfc3luYygmdGltZXJpb21lbV9ybmdfdGltZXIpOworCWh3cm5nX3VucmVnaXN0ZXIoJnRpbWVyaW9tZW1fcm5nX29wcyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdGltZXJpb21lbV9ybmdfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCQk9ICJ0aW1lcmlvbWVtX3JuZyIsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZQkJPSB0aW1lcmlvbWVtX3JuZ19wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHRpbWVyaW9tZW1fcm5nX3JlbW92ZSksCit9OworCitzdGF0aWMgaW50IF9faW5pdCB0aW1lcmlvbWVtX3JuZ19pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmdGltZXJpb21lbV9ybmdfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHRpbWVyaW9tZW1fcm5nX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdGltZXJpb21lbV9ybmdfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQodGltZXJpb21lbV9ybmdfaW5pdCk7Cittb2R1bGVfZXhpdCh0aW1lcmlvbWVtX3JuZ19leGl0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiQWxleGFuZGVyIENsb3V0ZXIgPGFsZXhAZGlncml6Lm9yZy51az4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiVGltZXIgSU9NRU0gSC9XIFJORyBkcml2ZXIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9wY21jaWEvc3luY2xpbmtfY3MuYyBiL2RyaXZlcnMvY2hhci9wY21jaWEvc3luY2xpbmtfY3MuYwppbmRleCBkYzA3M2UxLi41NjA4YTFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcGNtY2lhL3N5bmNsaW5rX2NzLmMKKysrIGIvZHJpdmVycy9jaGFyL3BjbWNpYS9zeW5jbGlua19jcy5jCkBAIC00MzExLDEwICs0MzExLDE3IEBACiAJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBzaXplOwogCiAJbmV0aWZfcngoc2tiKTsKLQotCWRldi0+bGFzdF9yeCA9IGppZmZpZXM7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaGRsY2Rldl9vcHMgPSB7CisJLm5kb19vcGVuICAgICAgID0gaGRsY2Rldl9vcGVuLAorCS5uZG9fc3RvcCAgICAgICA9IGhkbGNkZXZfY2xvc2UsCisJLm5kb19jaGFuZ2VfbXR1ID0gaGRsY19jaGFuZ2VfbXR1LAorCS5uZG9fc3RhcnRfeG1pdCA9IGhkbGNfc3RhcnRfeG1pdCwKKwkubmRvX2RvX2lvY3RsICAgPSBoZGxjZGV2X2lvY3RsLAorCS5uZG9fdHhfdGltZW91dCA9IGhkbGNkZXZfdHhfdGltZW91dCwKK307CisKIC8qKgogICogY2FsbGVkIGJ5IGRldmljZSBkcml2ZXIgd2hlbiBhZGRpbmcgZGV2aWNlIGluc3RhbmNlCiAgKiBkbyBnZW5lcmljIEhETEMgaW5pdGlhbGl6YXRpb24KQEAgLTQzNDEsMTEgKzQzNDgsOCBAQAogCWRldi0+aXJxICAgICAgID0gaW5mby0+aXJxX2xldmVsOwogCiAJLyogbmV0d29yayBsYXllciBjYWxsYmFja3MgYW5kIHNldHRpbmdzICovCi0JZGV2LT5kb19pb2N0bCAgICAgICA9IGhkbGNkZXZfaW9jdGw7Ci0JZGV2LT5vcGVuICAgICAgICAgICA9IGhkbGNkZXZfb3BlbjsKLQlkZXYtPnN0b3AgICAgICAgICAgID0gaGRsY2Rldl9jbG9zZTsKLQlkZXYtPnR4X3RpbWVvdXQgICAgID0gaGRsY2Rldl90eF90aW1lb3V0OwotCWRldi0+d2F0Y2hkb2dfdGltZW8gPSAxMCpIWjsKKwlkZXYtPm5ldGRldl9vcHMJICAgID0gJmhkbGNkZXZfb3BzOworCWRldi0+d2F0Y2hkb2dfdGltZW8gPSAxMCAqIEhaOwogCWRldi0+dHhfcXVldWVfbGVuICAgPSA1MDsKIAogCS8qIGdlbmVyaWMgSERMQyBsYXllciBjYWxsYmFja3MgYW5kIHNldHRpbmdzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmFuZG9tLmMgYi9kcml2ZXJzL2NoYXIvcmFuZG9tLmMKaW5kZXggN2MxMzU4MS4uN2M0M2FlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3JhbmRvbS5jCisrKyBiL2RyaXZlcnMvY2hhci9yYW5kb20uYwpAQCAtMjQxLDYgKzI0MSwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgogI2luY2x1ZGUgPGxpbnV4L2NyeXB0b2hhc2guaD4KIAorI2lmZGVmIENPTkZJR19HRU5FUklDX0hBUkRJUlFTCisjIGluY2x1ZGUgPGxpbnV4L2lycS5oPgorI2VuZGlmCisKICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CkBAIC01NTgsNyArNTYyLDcgQEAKIAl1bnNpZ25lZCBkb250X2NvdW50X2VudHJvcHk6MTsKIH07CiAKLSNpZm5kZWYgQ09ORklHX1NQQVJTRV9JUlEKKyNpZm5kZWYgQ09ORklHX0dFTkVSSUNfSEFSRElSUVMKIAogc3RhdGljIHN0cnVjdCB0aW1lcl9yYW5kX3N0YXRlICppcnFfdGltZXJfc3RhdGVbTlJfSVJRU107CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9zb255cGkuYyBiL2RyaXZlcnMvY2hhci9zb255cGkuYwppbmRleCBmNDM3NDQzLi5mZDNkY2VkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvc29ueXBpLmMKKysrIGIvZHJpdmVycy9jaGFyL3NvbnlwaS5jCkBAIC04ODgsMTIgKzg4OCw3IEBACiAKIHN0YXRpYyBpbnQgc29ueXBpX21pc2NfZmFzeW5jKGludCBmZCwgc3RydWN0IGZpbGUgKmZpbHAsIGludCBvbikKIHsKLQlpbnQgcmV0dmFsOwotCi0JcmV0dmFsID0gZmFzeW5jX2hlbHBlcihmZCwgZmlscCwgb24sICZzb255cGlfZGV2aWNlLmZpZm9fYXN5bmMpOwotCWlmIChyZXR2YWwgPCAwKQotCQlyZXR1cm4gcmV0dmFsOwotCXJldHVybiAwOworCXJldHVybiBmYXN5bmNfaGVscGVyKGZkLCBmaWxwLCBvbiwgJnNvbnlwaV9kZXZpY2UuZmlmb19hc3luYyk7CiB9CiAKIHN0YXRpYyBpbnQgc29ueXBpX21pc2NfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9zeW5jbGluay5jIGIvZHJpdmVycy9jaGFyL3N5bmNsaW5rLmMKaW5kZXggYjgwNjNkNC4uMDA1N2E4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3N5bmNsaW5rLmMKKysrIGIvZHJpdmVycy9jaGFyL3N5bmNsaW5rLmMKQEAgLTgwMDcsMTAgKzgwMDcsMTcgQEAKIAlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNpemU7CiAKIAluZXRpZl9yeChza2IpOwotCi0JZGV2LT5sYXN0X3J4ID0gamlmZmllczsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBoZGxjZGV2X29wcyA9IHsKKwkubmRvX29wZW4gICAgICAgPSBoZGxjZGV2X29wZW4sCisJLm5kb19zdG9wICAgICAgID0gaGRsY2Rldl9jbG9zZSwKKwkubmRvX2NoYW5nZV9tdHUgPSBoZGxjX2NoYW5nZV9tdHUsCisJLm5kb19zdGFydF94bWl0ID0gaGRsY19zdGFydF94bWl0LAorCS5uZG9fZG9faW9jdGwgICA9IGhkbGNkZXZfaW9jdGwsCisJLm5kb190eF90aW1lb3V0ID0gaGRsY2Rldl90eF90aW1lb3V0LAorfTsKKwogLyoqCiAgKiBjYWxsZWQgYnkgZGV2aWNlIGRyaXZlciB3aGVuIGFkZGluZyBkZXZpY2UgaW5zdGFuY2UKICAqIGRvIGdlbmVyaWMgSERMQyBpbml0aWFsaXphdGlvbgpAQCAtODAzOCwxMSArODA0NSw4IEBACiAJZGV2LT5kbWEgICAgICAgPSBpbmZvLT5kbWFfbGV2ZWw7CiAKIAkvKiBuZXR3b3JrIGxheWVyIGNhbGxiYWNrcyBhbmQgc2V0dGluZ3MgKi8KLQlkZXYtPmRvX2lvY3RsICAgICAgID0gaGRsY2Rldl9pb2N0bDsKLQlkZXYtPm9wZW4gICAgICAgICAgID0gaGRsY2Rldl9vcGVuOwotCWRldi0+c3RvcCAgICAgICAgICAgPSBoZGxjZGV2X2Nsb3NlOwotCWRldi0+dHhfdGltZW91dCAgICAgPSBoZGxjZGV2X3R4X3RpbWVvdXQ7Ci0JZGV2LT53YXRjaGRvZ190aW1lbyA9IDEwKkhaOworCWRldi0+bmV0ZGV2X29wcyAgICAgPSAmaGRsY2Rldl9vcHM7CisJZGV2LT53YXRjaGRvZ190aW1lbyA9IDEwICogSFo7CiAJZGV2LT50eF9xdWV1ZV9sZW4gICA9IDUwOwogCiAJLyogZ2VuZXJpYyBIRExDIGxheWVyIGNhbGxiYWNrcyBhbmQgc2V0dGluZ3MgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9zeW5jbGlua19ndC5jIGIvZHJpdmVycy9jaGFyL3N5bmNsaW5rX2d0LmMKaW5kZXggZjMyOWY0NS4uZWZiM2RjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3N5bmNsaW5rX2d0LmMKKysrIGIvZHJpdmVycy9jaGFyL3N5bmNsaW5rX2d0LmMKQEAgLTE3NjMsMTAgKzE3NjMsMTcgQEAKIAlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNpemU7CiAKIAluZXRpZl9yeChza2IpOwotCi0JZGV2LT5sYXN0X3J4ID0gamlmZmllczsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBoZGxjZGV2X29wcyA9IHsKKwkubmRvX29wZW4gICAgICAgPSBoZGxjZGV2X29wZW4sCisJLm5kb19zdG9wICAgICAgID0gaGRsY2Rldl9jbG9zZSwKKwkubmRvX2NoYW5nZV9tdHUgPSBoZGxjX2NoYW5nZV9tdHUsCisJLm5kb19zdGFydF94bWl0ID0gaGRsY19zdGFydF94bWl0LAorCS5uZG9fZG9faW9jdGwgICA9IGhkbGNkZXZfaW9jdGwsCisJLm5kb190eF90aW1lb3V0ID0gaGRsY2Rldl90eF90aW1lb3V0LAorfTsKKwogLyoqCiAgKiBjYWxsZWQgYnkgZGV2aWNlIGRyaXZlciB3aGVuIGFkZGluZyBkZXZpY2UgaW5zdGFuY2UKICAqIGRvIGdlbmVyaWMgSERMQyBpbml0aWFsaXphdGlvbgpAQCAtMTc5NCwxMSArMTgwMSw4IEBACiAJZGV2LT5pcnEgICAgICAgPSBpbmZvLT5pcnFfbGV2ZWw7CiAKIAkvKiBuZXR3b3JrIGxheWVyIGNhbGxiYWNrcyBhbmQgc2V0dGluZ3MgKi8KLQlkZXYtPmRvX2lvY3RsICAgICAgID0gaGRsY2Rldl9pb2N0bDsKLQlkZXYtPm9wZW4gICAgICAgICAgID0gaGRsY2Rldl9vcGVuOwotCWRldi0+c3RvcCAgICAgICAgICAgPSBoZGxjZGV2X2Nsb3NlOwotCWRldi0+dHhfdGltZW91dCAgICAgPSBoZGxjZGV2X3R4X3RpbWVvdXQ7Ci0JZGV2LT53YXRjaGRvZ190aW1lbyA9IDEwKkhaOworCWRldi0+bmV0ZGV2X29wcwkgICAgPSAmaGRsY2Rldl9vcHM7CisJZGV2LT53YXRjaGRvZ190aW1lbyA9IDEwICogSFo7CiAJZGV2LT50eF9xdWV1ZV9sZW4gICA9IDUwOwogCiAJLyogZ2VuZXJpYyBIRExDIGxheWVyIGNhbGxiYWNrcyBhbmQgc2V0dGluZ3MgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9zeW5jbGlua21wLmMgYi9kcml2ZXJzL2NoYXIvc3luY2xpbmttcC5jCmluZGV4IDdiMGM1YjIuLjhlYjZjODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zeW5jbGlua21wLmMKKysrIGIvZHJpdmVycy9jaGFyL3N5bmNsaW5rbXAuYwpAQCAtMTkwNywxMCArMTkwNywxNyBAQAogCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gc2l6ZTsKIAogCW5ldGlmX3J4KHNrYik7Ci0KLQlkZXYtPmxhc3RfcnggPSBqaWZmaWVzOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGhkbGNkZXZfb3BzID0geworCS5uZG9fb3BlbiAgICAgICA9IGhkbGNkZXZfb3BlbiwKKwkubmRvX3N0b3AgICAgICAgPSBoZGxjZGV2X2Nsb3NlLAorCS5uZG9fY2hhbmdlX210dSA9IGhkbGNfY2hhbmdlX210dSwKKwkubmRvX3N0YXJ0X3htaXQgPSBoZGxjX3N0YXJ0X3htaXQsCisJLm5kb19kb19pb2N0bCAgID0gaGRsY2Rldl9pb2N0bCwKKwkubmRvX3R4X3RpbWVvdXQgPSBoZGxjZGV2X3R4X3RpbWVvdXQsCit9OworCiAvKioKICAqIGNhbGxlZCBieSBkZXZpY2UgZHJpdmVyIHdoZW4gYWRkaW5nIGRldmljZSBpbnN0YW5jZQogICogZG8gZ2VuZXJpYyBIRExDIGluaXRpYWxpemF0aW9uCkBAIC0xOTM4LDExICsxOTQ1LDggQEAKIAlkZXYtPmlycSAgICAgICA9IGluZm8tPmlycV9sZXZlbDsKIAogCS8qIG5ldHdvcmsgbGF5ZXIgY2FsbGJhY2tzIGFuZCBzZXR0aW5ncyAqLwotCWRldi0+ZG9faW9jdGwgICAgICAgPSBoZGxjZGV2X2lvY3RsOwotCWRldi0+b3BlbiAgICAgICAgICAgPSBoZGxjZGV2X29wZW47Ci0JZGV2LT5zdG9wICAgICAgICAgICA9IGhkbGNkZXZfY2xvc2U7Ci0JZGV2LT50eF90aW1lb3V0ICAgICA9IGhkbGNkZXZfdHhfdGltZW91dDsKLQlkZXYtPndhdGNoZG9nX3RpbWVvID0gMTAqSFo7CisJZGV2LT5uZXRkZXZfb3BzCSAgICA9ICZoZGxjZGV2X29wczsKKwlkZXYtPndhdGNoZG9nX3RpbWVvID0gMTAgKiBIWjsKIAlkZXYtPnR4X3F1ZXVlX2xlbiAgID0gNTA7CiAKIAkvKiBnZW5lcmljIEhETEMgbGF5ZXIgY2FsbGJhY2tzIGFuZCBzZXR0aW5ncyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3RwbS90cG0uYyBiL2RyaXZlcnMvY2hhci90cG0vdHBtLmMKaW5kZXggOWM0N2RjNC4uY2NkZDgyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3RwbS90cG0uYworKysgYi9kcml2ZXJzL2NoYXIvdHBtL3RwbS5jCkBAIC00MjksMTM0ICs0MjksMTQ4IEBACiAjZGVmaW5lIFRQTV9ESUdFU1RfU0laRSAyMAogI2RlZmluZSBUUE1fRVJST1JfU0laRSAxMAogI2RlZmluZSBUUE1fUkVUX0NPREVfSURYIDYKLSNkZWZpbmUgVFBNX0dFVF9DQVBfUkVUX1NJWkVfSURYIDEwCi0jZGVmaW5lIFRQTV9HRVRfQ0FQX1JFVF9VSU5UMzJfMV9JRFggMTQKLSNkZWZpbmUgVFBNX0dFVF9DQVBfUkVUX1VJTlQzMl8yX0lEWCAxOAotI2RlZmluZSBUUE1fR0VUX0NBUF9SRVRfVUlOVDMyXzNfSURYIDIyCi0jZGVmaW5lIFRQTV9HRVRfQ0FQX1JFVF9VSU5UMzJfNF9JRFggMjYKLSNkZWZpbmUgVFBNX0dFVF9DQVBfUEVSTV9ESVNBQkxFX0lEWCAxNgotI2RlZmluZSBUUE1fR0VUX0NBUF9QRVJNX0lOQUNUSVZFX0lEWCAxOAotI2RlZmluZSBUUE1fR0VUX0NBUF9SRVRfQk9PTF8xX0lEWCAxNAotI2RlZmluZSBUUE1fR0VUX0NBUF9URU1QX0lOQUNUSVZFX0lEWCAxNgotCi0jZGVmaW5lIFRQTV9DQVBfSURYIDEzCi0jZGVmaW5lIFRQTV9DQVBfU1VCQ0FQX0lEWCAyMQogCiBlbnVtIHRwbV9jYXBhYmlsaXRpZXMgewotCVRQTV9DQVBfRkxBRyA9IDQsCi0JVFBNX0NBUF9QUk9QID0gNSwKKwlUUE1fQ0FQX0ZMQUcgPSBjcHVfdG9fYmUzMig0KSwKKwlUUE1fQ0FQX1BST1AgPSBjcHVfdG9fYmUzMig1KSwKKwlDQVBfVkVSU0lPTl8xXzEgPSBjcHVfdG9fYmUzMigweDA2KSwKKwlDQVBfVkVSU0lPTl8xXzIgPSBjcHVfdG9fYmUzMigweDFBKQogfTsKIAogZW51bSB0cG1fc3ViX2NhcGFiaWxpdGllcyB7Ci0JVFBNX0NBUF9QUk9QX1BDUiA9IDB4MSwKLQlUUE1fQ0FQX1BST1BfTUFOVUZBQ1RVUkVSID0gMHgzLAotCVRQTV9DQVBfRkxBR19QRVJNID0gMHg4LAotCVRQTV9DQVBfRkxBR19WT0wgPSAweDksCi0JVFBNX0NBUF9QUk9QX09XTkVSID0gMHgxMSwKLQlUUE1fQ0FQX1BST1BfVElTX1RJTUVPVVQgPSAweDE1LAotCVRQTV9DQVBfUFJPUF9USVNfRFVSQVRJT04gPSAweDIwLAorCVRQTV9DQVBfUFJPUF9QQ1IgPSBjcHVfdG9fYmUzMigweDEwMSksCisJVFBNX0NBUF9QUk9QX01BTlVGQUNUVVJFUiA9IGNwdV90b19iZTMyKDB4MTAzKSwKKwlUUE1fQ0FQX0ZMQUdfUEVSTSA9IGNwdV90b19iZTMyKDB4MTA4KSwKKwlUUE1fQ0FQX0ZMQUdfVk9MID0gY3B1X3RvX2JlMzIoMHgxMDkpLAorCVRQTV9DQVBfUFJPUF9PV05FUiA9IGNwdV90b19iZTMyKDB4MTExKSwKKwlUUE1fQ0FQX1BST1BfVElTX1RJTUVPVVQgPSBjcHVfdG9fYmUzMigweDExNSksCisJVFBNX0NBUF9QUk9QX1RJU19EVVJBVElPTiA9IGNwdV90b19iZTMyKDB4MTIwKSwKKwogfTsKIAotLyoKLSAqIFRoaXMgaXMgYSBzZW1pIGdlbmVyaWMgR2V0Q2FwYWJpbGl0eSBjb21tYW5kIGZvciB1c2UKLSAqIHdpdGggdGhlIGNhcGFiaWxpdHkgdHlwZSBUUE1fQ0FQX1BST1Agb3IgVFBNX0NBUF9GTEFHCi0gKiBhbmQgdGhlaXIgYXNzb2NpYXRlZCBzdWJfY2FwYWJpbGl0aWVzLgotICovCi0KLXN0YXRpYyBjb25zdCB1OCB0cG1fY2FwW10gPSB7Ci0JMCwgMTkzLAkJCS8qIFRQTV9UQUdfUlFVX0NPTU1BTkQgKi8KLQkwLCAwLCAwLCAyMiwJCS8qIGxlbmd0aCAqLwotCTAsIDAsIDAsIDEwMSwJCS8qIFRQTV9PUkRfR2V0Q2FwYWJpbGl0eSAqLwotCTAsIDAsIDAsIDAsCQkvKiBUUE1fQ0FQXzxUWVBFPiAqLwotCTAsIDAsIDAsIDQsCQkvKiBUUE1fQ0FQX1NVQl88VFlQRT4gc2l6ZSAqLwotCTAsIDAsIDEsIDAJCS8qIFRQTV9DQVBfU1VCXzxUWVBFPiAqLwotfTsKLQotc3RhdGljIHNzaXplX3QgdHJhbnNtaXRfY21kKHN0cnVjdCB0cG1fY2hpcCAqY2hpcCwgdTggKmRhdGEsIGludCBsZW4sCi0JCQkgICAgY2hhciAqZGVzYykKK3N0YXRpYyBzc2l6ZV90IHRyYW5zbWl0X2NtZChzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAsIHN0cnVjdCB0cG1fY21kX3QgKmNtZCwKKwkJCSAgICBpbnQgbGVuLCBjb25zdCBjaGFyICpkZXNjKQogewogCWludCBlcnI7CiAKLQlsZW4gPSB0cG1fdHJhbnNtaXQoY2hpcCwgZGF0YSwgbGVuKTsKKwlsZW4gPSB0cG1fdHJhbnNtaXQoY2hpcCwodTggKikgY21kLCBsZW4pOwogCWlmIChsZW4gPCAgMCkKIAkJcmV0dXJuIGxlbjsKIAlpZiAobGVuID09IFRQTV9FUlJPUl9TSVpFKSB7Ci0JCWVyciA9IGJlMzJfdG9fY3B1KCooKF9fYmUzMiAqKSAoZGF0YSArIFRQTV9SRVRfQ09ERV9JRFgpKSk7CisJCWVyciA9IGJlMzJfdG9fY3B1KGNtZC0+aGVhZGVyLm91dC5yZXR1cm5fY29kZSk7CiAJCWRldl9kYmcoY2hpcC0+ZGV2LCAiQSBUUE0gZXJyb3IgKCVkKSBvY2N1cnJlZCAlc1xuIiwgZXJyLCBkZXNjKTsKIAkJcmV0dXJuIGVycjsKIAl9CiAJcmV0dXJuIDA7CiB9CiAKKyNkZWZpbmUgVFBNX0lOVEVSTkFMX1JFU1VMVF9TSVpFIDIwMAorI2RlZmluZSBUUE1fVEFHX1JRVV9DT01NQU5EIGNwdV90b19iZTE2KDE5MykKKyNkZWZpbmUgVFBNX09SRF9HRVRfQ0FQIGNwdV90b19iZTMyKDEwMSkKKworc3RhdGljIGNvbnN0IHN0cnVjdCB0cG1faW5wdXRfaGVhZGVyIHRwbV9nZXRjYXBfaGVhZGVyID0geworCS50YWcgPSBUUE1fVEFHX1JRVV9DT01NQU5ELAorCS5sZW5ndGggPSBjcHVfdG9fYmUzMigyMiksCisJLm9yZGluYWwgPSBUUE1fT1JEX0dFVF9DQVAKK307CisKK3NzaXplX3QgdHBtX2dldGNhcChzdHJ1Y3QgZGV2aWNlICpkZXYsIF9fYmUzMiBzdWJjYXBfaWQsIGNhcF90ICpjYXAsCisJCSAgIGNvbnN0IGNoYXIgKmRlc2MpCit7CisJc3RydWN0IHRwbV9jbWRfdCB0cG1fY21kOworCWludCByYzsKKwlzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCXRwbV9jbWQuaGVhZGVyLmluID0gdHBtX2dldGNhcF9oZWFkZXI7CisJaWYgKHN1YmNhcF9pZCA9PSBDQVBfVkVSU0lPTl8xXzEgfHwgc3ViY2FwX2lkID09IENBUF9WRVJTSU9OXzFfMikgeworCQl0cG1fY21kLnBhcmFtcy5nZXRjYXBfaW4uY2FwID0gc3ViY2FwX2lkOworCQkvKnN1YmNhcCBmaWVsZCBub3QgbmVjZXNzYXJ5ICovCisJCXRwbV9jbWQucGFyYW1zLmdldGNhcF9pbi5zdWJjYXBfc2l6ZSA9IGNwdV90b19iZTMyKDApOworCQl0cG1fY21kLmhlYWRlci5pbi5sZW5ndGggLT0gY3B1X3RvX2JlMzIoc2l6ZW9mKF9fYmUzMikpOworCX0gZWxzZSB7CisJCWlmIChzdWJjYXBfaWQgPT0gVFBNX0NBUF9GTEFHX1BFUk0gfHwKKwkJICAgIHN1YmNhcF9pZCA9PSBUUE1fQ0FQX0ZMQUdfVk9MKQorCQkJdHBtX2NtZC5wYXJhbXMuZ2V0Y2FwX2luLmNhcCA9IFRQTV9DQVBfRkxBRzsKKwkJZWxzZQorCQkJdHBtX2NtZC5wYXJhbXMuZ2V0Y2FwX2luLmNhcCA9IFRQTV9DQVBfUFJPUDsKKwkJdHBtX2NtZC5wYXJhbXMuZ2V0Y2FwX2luLnN1YmNhcF9zaXplID0gY3B1X3RvX2JlMzIoNCk7CisJCXRwbV9jbWQucGFyYW1zLmdldGNhcF9pbi5zdWJjYXAgPSBzdWJjYXBfaWQ7CisJfQorCXJjID0gdHJhbnNtaXRfY21kKGNoaXAsICZ0cG1fY21kLCBUUE1fSU5URVJOQUxfUkVTVUxUX1NJWkUsIGRlc2MpOworCWlmICghcmMpCisJCSpjYXAgPSB0cG1fY21kLnBhcmFtcy5nZXRjYXBfb3V0LmNhcDsKKwlyZXR1cm4gcmM7Cit9CisKIHZvaWQgdHBtX2dlbl9pbnRlcnJ1cHQoc3RydWN0IHRwbV9jaGlwICpjaGlwKQogewotCXU4IGRhdGFbbWF4X3QoaW50LCBBUlJBWV9TSVpFKHRwbV9jYXApLCAzMCldOworCXN0cnVjdAl0cG1fY21kX3QgdHBtX2NtZDsKIAlzc2l6ZV90IHJjOwogCi0JbWVtY3B5KGRhdGEsIHRwbV9jYXAsIHNpemVvZih0cG1fY2FwKSk7Ci0JZGF0YVtUUE1fQ0FQX0lEWF0gPSBUUE1fQ0FQX1BST1A7Ci0JZGF0YVtUUE1fQ0FQX1NVQkNBUF9JRFhdID0gVFBNX0NBUF9QUk9QX1RJU19USU1FT1VUOworCXRwbV9jbWQuaGVhZGVyLmluID0gdHBtX2dldGNhcF9oZWFkZXI7CisJdHBtX2NtZC5wYXJhbXMuZ2V0Y2FwX2luLmNhcCA9IFRQTV9DQVBfUFJPUDsKKwl0cG1fY21kLnBhcmFtcy5nZXRjYXBfaW4uc3ViY2FwX3NpemUgPSBjcHVfdG9fYmUzMig0KTsKKwl0cG1fY21kLnBhcmFtcy5nZXRjYXBfaW4uc3ViY2FwID0gVFBNX0NBUF9QUk9QX1RJU19USU1FT1VUOwogCi0JcmMgPSB0cmFuc21pdF9jbWQoY2hpcCwgZGF0YSwgc2l6ZW9mKGRhdGEpLAorCXJjID0gdHJhbnNtaXRfY21kKGNoaXAsICZ0cG1fY21kLCBUUE1fSU5URVJOQUxfUkVTVUxUX1NJWkUsCiAJCQkiYXR0ZW1wdGluZyB0byBkZXRlcm1pbmUgdGhlIHRpbWVvdXRzIik7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh0cG1fZ2VuX2ludGVycnVwdCk7CiAKIHZvaWQgdHBtX2dldF90aW1lb3V0cyhzdHJ1Y3QgdHBtX2NoaXAgKmNoaXApCiB7Ci0JdTggZGF0YVttYXhfdChpbnQsIEFSUkFZX1NJWkUodHBtX2NhcCksIDMwKV07CisJc3RydWN0IHRwbV9jbWRfdCB0cG1fY21kOworCXN0cnVjdCB0aW1lb3V0X3QgKnRpbWVvdXRfY2FwOworCXN0cnVjdCBkdXJhdGlvbl90ICpkdXJhdGlvbl9jYXA7CiAJc3NpemVfdCByYzsKIAl1MzIgdGltZW91dDsKIAotCW1lbWNweShkYXRhLCB0cG1fY2FwLCBzaXplb2YodHBtX2NhcCkpOwotCWRhdGFbVFBNX0NBUF9JRFhdID0gVFBNX0NBUF9QUk9QOwotCWRhdGFbVFBNX0NBUF9TVUJDQVBfSURYXSA9IFRQTV9DQVBfUFJPUF9USVNfVElNRU9VVDsKKwl0cG1fY21kLmhlYWRlci5pbiA9IHRwbV9nZXRjYXBfaGVhZGVyOworCXRwbV9jbWQucGFyYW1zLmdldGNhcF9pbi5jYXAgPSBUUE1fQ0FQX1BST1A7CisJdHBtX2NtZC5wYXJhbXMuZ2V0Y2FwX2luLnN1YmNhcF9zaXplID0gY3B1X3RvX2JlMzIoNCk7CisJdHBtX2NtZC5wYXJhbXMuZ2V0Y2FwX2luLnN1YmNhcCA9IFRQTV9DQVBfUFJPUF9USVNfVElNRU9VVDsKIAotCXJjID0gdHJhbnNtaXRfY21kKGNoaXAsIGRhdGEsIHNpemVvZihkYXRhKSwKKwlyYyA9IHRyYW5zbWl0X2NtZChjaGlwLCAmdHBtX2NtZCwgVFBNX0lOVEVSTkFMX1JFU1VMVF9TSVpFLAogCQkJImF0dGVtcHRpbmcgdG8gZGV0ZXJtaW5lIHRoZSB0aW1lb3V0cyIpOwogCWlmIChyYykKIAkJZ290byBkdXJhdGlvbjsKIAotCWlmIChiZTMyX3RvX2NwdSgqKChfX2JlMzIgKikgKGRhdGEgKyBUUE1fR0VUX0NBUF9SRVRfU0laRV9JRFgpKSkKKwlpZiAoYmUzMl90b19jcHUodHBtX2NtZC5oZWFkZXIub3V0Lmxlbmd0aCkKIAkgICAgIT0gNCAqIHNpemVvZih1MzIpKQogCQlnb3RvIGR1cmF0aW9uOwogCisJdGltZW91dF9jYXAgPSAmdHBtX2NtZC5wYXJhbXMuZ2V0Y2FwX291dC5jYXAudGltZW91dDsKIAkvKiBEb24ndCBvdmVyd3JpdGUgZGVmYXVsdCBpZiB2YWx1ZSBpcyAwICovCi0JdGltZW91dCA9Ci0JICAgIGJlMzJfdG9fY3B1KCooKF9fYmUzMiAqKSAoZGF0YSArIFRQTV9HRVRfQ0FQX1JFVF9VSU5UMzJfMV9JRFgpKSk7CisJdGltZW91dCA9IGJlMzJfdG9fY3B1KHRpbWVvdXRfY2FwLT5hKTsKIAlpZiAodGltZW91dCkKIAkJY2hpcC0+dmVuZG9yLnRpbWVvdXRfYSA9IHVzZWNzX3RvX2ppZmZpZXModGltZW91dCk7Ci0JdGltZW91dCA9Ci0JICAgIGJlMzJfdG9fY3B1KCooKF9fYmUzMiAqKSAoZGF0YSArIFRQTV9HRVRfQ0FQX1JFVF9VSU5UMzJfMl9JRFgpKSk7CisJdGltZW91dCA9IGJlMzJfdG9fY3B1KHRpbWVvdXRfY2FwLT5iKTsKIAlpZiAodGltZW91dCkKIAkJY2hpcC0+dmVuZG9yLnRpbWVvdXRfYiA9IHVzZWNzX3RvX2ppZmZpZXModGltZW91dCk7Ci0JdGltZW91dCA9Ci0JICAgIGJlMzJfdG9fY3B1KCooKF9fYmUzMiAqKSAoZGF0YSArIFRQTV9HRVRfQ0FQX1JFVF9VSU5UMzJfM19JRFgpKSk7CisJdGltZW91dCA9IGJlMzJfdG9fY3B1KHRpbWVvdXRfY2FwLT5jKTsKIAlpZiAodGltZW91dCkKIAkJY2hpcC0+dmVuZG9yLnRpbWVvdXRfYyA9IHVzZWNzX3RvX2ppZmZpZXModGltZW91dCk7Ci0JdGltZW91dCA9Ci0JICAgIGJlMzJfdG9fY3B1KCooKF9fYmUzMiAqKSAoZGF0YSArIFRQTV9HRVRfQ0FQX1JFVF9VSU5UMzJfNF9JRFgpKSk7CisJdGltZW91dCA9IGJlMzJfdG9fY3B1KHRpbWVvdXRfY2FwLT5kKTsKIAlpZiAodGltZW91dCkKIAkJY2hpcC0+dmVuZG9yLnRpbWVvdXRfZCA9IHVzZWNzX3RvX2ppZmZpZXModGltZW91dCk7CiAKIGR1cmF0aW9uOgotCW1lbWNweShkYXRhLCB0cG1fY2FwLCBzaXplb2YodHBtX2NhcCkpOwotCWRhdGFbVFBNX0NBUF9JRFhdID0gVFBNX0NBUF9QUk9QOwotCWRhdGFbVFBNX0NBUF9TVUJDQVBfSURYXSA9IFRQTV9DQVBfUFJPUF9USVNfRFVSQVRJT047CisJdHBtX2NtZC5oZWFkZXIuaW4gPSB0cG1fZ2V0Y2FwX2hlYWRlcjsKKwl0cG1fY21kLnBhcmFtcy5nZXRjYXBfaW4uY2FwID0gVFBNX0NBUF9QUk9QOworCXRwbV9jbWQucGFyYW1zLmdldGNhcF9pbi5zdWJjYXBfc2l6ZSA9IGNwdV90b19iZTMyKDQpOworCXRwbV9jbWQucGFyYW1zLmdldGNhcF9pbi5zdWJjYXAgPSBUUE1fQ0FQX1BST1BfVElTX0RVUkFUSU9OOwogCi0JcmMgPSB0cmFuc21pdF9jbWQoY2hpcCwgZGF0YSwgc2l6ZW9mKGRhdGEpLAorCXJjID0gdHJhbnNtaXRfY21kKGNoaXAsICZ0cG1fY21kLCBUUE1fSU5URVJOQUxfUkVTVUxUX1NJWkUsCiAJCQkiYXR0ZW1wdGluZyB0byBkZXRlcm1pbmUgdGhlIGR1cmF0aW9ucyIpOwogCWlmIChyYykKIAkJcmV0dXJuOwogCi0JaWYgKGJlMzJfdG9fY3B1KCooKF9fYmUzMiAqKSAoZGF0YSArIFRQTV9HRVRfQ0FQX1JFVF9TSVpFX0lEWCkpKQorCWlmIChiZTMyX3RvX2NwdSh0cG1fY21kLmhlYWRlci5vdXQucmV0dXJuX2NvZGUpCiAJICAgICE9IDMgKiBzaXplb2YodTMyKSkKIAkJcmV0dXJuOwotCisJZHVyYXRpb25fY2FwID0gJnRwbV9jbWQucGFyYW1zLmdldGNhcF9vdXQuY2FwLmR1cmF0aW9uOwogCWNoaXAtPnZlbmRvci5kdXJhdGlvbltUUE1fU0hPUlRdID0KLQkgICAgdXNlY3NfdG9famlmZmllcyhiZTMyX3RvX2NwdQotCQkJICAgICAoKigoX19iZTMyICopIChkYXRhICsKLQkJCQkJICAgIFRQTV9HRVRfQ0FQX1JFVF9VSU5UMzJfMV9JRFgpKSkpOworCSAgICB1c2Vjc190b19qaWZmaWVzKGJlMzJfdG9fY3B1KGR1cmF0aW9uX2NhcC0+dHBtX3Nob3J0KSk7CiAJLyogVGhlIEJyb2FkY29tIEJDTTAxMDIgY2hpcHNldCBpbiBhIERlbGwgTGF0aXR1ZGUgRDgyMCBnZXRzIHRoZSBhYm92ZQogCSAqIHZhbHVlIHdyb25nIGFuZCBhcHBhcmVudGx5IHJlcG9ydHMgbXNlY3MgcmF0aGVyIHRoYW4gdXNlY3MuIFNvIHdlCiAJICogZml4IHVwIHRoZSByZXN1bHRpbmcgdG9vLXNtYWxsIFRQTV9TSE9SVCB2YWx1ZSB0byBtYWtlIHRoaW5ncyB3b3JrLgpAQCAtNTY1LDEzICs1NzksOSBAQAogCQljaGlwLT52ZW5kb3IuZHVyYXRpb25bVFBNX1NIT1JUXSA9IEhaOwogCiAJY2hpcC0+dmVuZG9yLmR1cmF0aW9uW1RQTV9NRURJVU1dID0KLQkgICAgdXNlY3NfdG9famlmZmllcyhiZTMyX3RvX2NwdQotCQkJICAgICAoKigoX19iZTMyICopIChkYXRhICsKLQkJCQkJICAgIFRQTV9HRVRfQ0FQX1JFVF9VSU5UMzJfMl9JRFgpKSkpOworCSAgICB1c2Vjc190b19qaWZmaWVzKGJlMzJfdG9fY3B1KGR1cmF0aW9uX2NhcC0+dHBtX21lZGl1bSkpOwogCWNoaXAtPnZlbmRvci5kdXJhdGlvbltUUE1fTE9OR10gPQotCSAgICB1c2Vjc190b19qaWZmaWVzKGJlMzJfdG9fY3B1Ci0JCQkgICAgICgqKChfX2JlMzIgKikgKGRhdGEgKwotCQkJCQkgICAgVFBNX0dFVF9DQVBfUkVUX1VJTlQzMl8zX0lEWCkpKSk7CisJICAgIHVzZWNzX3RvX2ppZmZpZXMoYmUzMl90b19jcHUoZHVyYXRpb25fY2FwLT50cG1fbG9uZykpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodHBtX2dldF90aW1lb3V0cyk7CiAKQEAgLTU4NywzNiArNTk3LDE4IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh0cG1fY29udGludWVfc2VsZnRlc3QpOwogCi0jZGVmaW5lICBUUE1fSU5URVJOQUxfUkVTVUxUX1NJWkUgMjAwCi0KIHNzaXplX3QgdHBtX3Nob3dfZW5hYmxlZChzdHJ1Y3QgZGV2aWNlICogZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqIGF0dHIsCiAJCQljaGFyICpidWYpCiB7Ci0JdTggKmRhdGE7CisJY2FwX3QgY2FwOwogCXNzaXplX3QgcmM7CiAKLQlzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlpZiAoY2hpcCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWRhdGEgPSBremFsbG9jKFRQTV9JTlRFUk5BTF9SRVNVTFRfU0laRSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkYXRhKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCW1lbWNweShkYXRhLCB0cG1fY2FwLCBzaXplb2YodHBtX2NhcCkpOwotCWRhdGFbVFBNX0NBUF9JRFhdID0gVFBNX0NBUF9GTEFHOwotCWRhdGFbVFBNX0NBUF9TVUJDQVBfSURYXSA9IFRQTV9DQVBfRkxBR19QRVJNOwotCi0JcmMgPSB0cmFuc21pdF9jbWQoY2hpcCwgZGF0YSwgVFBNX0lOVEVSTkFMX1JFU1VMVF9TSVpFLAotCQkJImF0dGVtdHBpbmcgdG8gZGV0ZXJtaW5lIHRoZSBwZXJtYW5lbnQgZW5hYmxlZCBzdGF0ZSIpOwotCWlmIChyYykgewotCQlrZnJlZShkYXRhKTsKKwlyYyA9IHRwbV9nZXRjYXAoZGV2LCBUUE1fQ0FQX0ZMQUdfUEVSTSwgJmNhcCwKKwkJCSAiYXR0ZW1wdGluZyB0byBkZXRlcm1pbmUgdGhlIHBlcm1hbmVudCBlbmFibGVkIHN0YXRlIik7CisJaWYgKHJjKQogCQlyZXR1cm4gMDsKLQl9CiAKLQlyYyA9IHNwcmludGYoYnVmLCAiJWRcbiIsICFkYXRhW1RQTV9HRVRfQ0FQX1BFUk1fRElTQUJMRV9JRFhdKTsKLQotCWtmcmVlKGRhdGEpOworCXJjID0gc3ByaW50ZihidWYsICIlZFxuIiwgIWNhcC5wZXJtX2ZsYWdzLmRpc2FibGUpOwogCXJldHVybiByYzsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHRwbV9zaG93X2VuYWJsZWQpOwpAQCAtNjI0LDMxICs2MTYsMTUgQEAKIHNzaXplX3QgdHBtX3Nob3dfYWN0aXZlKHN0cnVjdCBkZXZpY2UgKiBkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICogYXR0ciwKIAkJCWNoYXIgKmJ1ZikKIHsKLQl1OCAqZGF0YTsKKwljYXBfdCBjYXA7CiAJc3NpemVfdCByYzsKIAotCXN0cnVjdCB0cG1fY2hpcCAqY2hpcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCWlmIChjaGlwID09IE5VTEwpCi0JCXJldHVybiAtRU5PREVWOwotCi0JZGF0YSA9IGt6YWxsb2MoVFBNX0lOVEVSTkFMX1JFU1VMVF9TSVpFLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWRhdGEpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JbWVtY3B5KGRhdGEsIHRwbV9jYXAsIHNpemVvZih0cG1fY2FwKSk7Ci0JZGF0YVtUUE1fQ0FQX0lEWF0gPSBUUE1fQ0FQX0ZMQUc7Ci0JZGF0YVtUUE1fQ0FQX1NVQkNBUF9JRFhdID0gVFBNX0NBUF9GTEFHX1BFUk07Ci0KLQlyYyA9IHRyYW5zbWl0X2NtZChjaGlwLCBkYXRhLCBUUE1fSU5URVJOQUxfUkVTVUxUX1NJWkUsCi0JCQkiYXR0ZW10cGluZyB0byBkZXRlcm1pbmUgdGhlIHBlcm1hbmVudCBhY3RpdmUgc3RhdGUiKTsKLQlpZiAocmMpIHsKLQkJa2ZyZWUoZGF0YSk7CisJcmMgPSB0cG1fZ2V0Y2FwKGRldiwgVFBNX0NBUF9GTEFHX1BFUk0sICZjYXAsCisJCQkgImF0dGVtcHRpbmcgdG8gZGV0ZXJtaW5lIHRoZSBwZXJtYW5lbnQgYWN0aXZlIHN0YXRlIik7CisJaWYgKHJjKQogCQlyZXR1cm4gMDsKLQl9CiAKLQlyYyA9IHNwcmludGYoYnVmLCAiJWRcbiIsICFkYXRhW1RQTV9HRVRfQ0FQX1BFUk1fSU5BQ1RJVkVfSURYXSk7Ci0KLQlrZnJlZShkYXRhKTsKKwlyYyA9IHNwcmludGYoYnVmLCAiJWRcbiIsICFjYXAucGVybV9mbGFncy5kZWFjdGl2YXRlZCk7CiAJcmV0dXJuIHJjOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodHBtX3Nob3dfYWN0aXZlKTsKQEAgLTY1NiwzMSArNjMyLDE1IEBACiBzc2l6ZV90IHRwbV9zaG93X293bmVkKHN0cnVjdCBkZXZpY2UgKiBkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICogYXR0ciwKIAkJCWNoYXIgKmJ1ZikKIHsKLQl1OCAqZGF0YTsKKwljYXBfdCBjYXA7CiAJc3NpemVfdCByYzsKIAotCXN0cnVjdCB0cG1fY2hpcCAqY2hpcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCWlmIChjaGlwID09IE5VTEwpCi0JCXJldHVybiAtRU5PREVWOwotCi0JZGF0YSA9IGt6YWxsb2MoVFBNX0lOVEVSTkFMX1JFU1VMVF9TSVpFLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWRhdGEpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JbWVtY3B5KGRhdGEsIHRwbV9jYXAsIHNpemVvZih0cG1fY2FwKSk7Ci0JZGF0YVtUUE1fQ0FQX0lEWF0gPSBUUE1fQ0FQX1BST1A7Ci0JZGF0YVtUUE1fQ0FQX1NVQkNBUF9JRFhdID0gVFBNX0NBUF9QUk9QX09XTkVSOwotCi0JcmMgPSB0cmFuc21pdF9jbWQoY2hpcCwgZGF0YSwgVFBNX0lOVEVSTkFMX1JFU1VMVF9TSVpFLAotCQkJImF0dGVtcHRpbmcgdG8gZGV0ZXJtaW5lIHRoZSBvd25lciBzdGF0ZSIpOwotCWlmIChyYykgewotCQlrZnJlZShkYXRhKTsKKwlyYyA9IHRwbV9nZXRjYXAoZGV2LCBUUE1fQ0FQX1BST1BfT1dORVIsICZjYXAsCisJCQkgImF0dGVtcHRpbmcgdG8gZGV0ZXJtaW5lIHRoZSBvd25lciBzdGF0ZSIpOworCWlmIChyYykKIAkJcmV0dXJuIDA7Ci0JfQogCi0JcmMgPSBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBkYXRhW1RQTV9HRVRfQ0FQX1JFVF9CT09MXzFfSURYXSk7Ci0KLQlrZnJlZShkYXRhKTsKKwlyYyA9IHNwcmludGYoYnVmLCAiJWRcbiIsIGNhcC5vd25lZCk7CiAJcmV0dXJuIHJjOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodHBtX3Nob3dfb3duZWQpOwpAQCAtNjg4LDExNiArNjQ4LDE4MCBAQAogc3NpemVfdCB0cG1fc2hvd190ZW1wX2RlYWN0aXZhdGVkKHN0cnVjdCBkZXZpY2UgKiBkZXYsCiAJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKiBhdHRyLCBjaGFyICpidWYpCiB7Ci0JdTggKmRhdGE7CisJY2FwX3QgY2FwOwogCXNzaXplX3QgcmM7CiAKLQlzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlpZiAoY2hpcCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWRhdGEgPSBremFsbG9jKFRQTV9JTlRFUk5BTF9SRVNVTFRfU0laRSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkYXRhKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCW1lbWNweShkYXRhLCB0cG1fY2FwLCBzaXplb2YodHBtX2NhcCkpOwotCWRhdGFbVFBNX0NBUF9JRFhdID0gVFBNX0NBUF9GTEFHOwotCWRhdGFbVFBNX0NBUF9TVUJDQVBfSURYXSA9IFRQTV9DQVBfRkxBR19WT0w7Ci0KLQlyYyA9IHRyYW5zbWl0X2NtZChjaGlwLCBkYXRhLCBUUE1fSU5URVJOQUxfUkVTVUxUX1NJWkUsCi0JCQkiYXR0ZW1wdGluZyB0byBkZXRlcm1pbmUgdGhlIHRlbXBvcmFyeSBzdGF0ZSIpOwotCWlmIChyYykgewotCQlrZnJlZShkYXRhKTsKKwlyYyA9IHRwbV9nZXRjYXAoZGV2LCBUUE1fQ0FQX0ZMQUdfVk9MLCAmY2FwLAorCQkJICJhdHRlbXB0aW5nIHRvIGRldGVybWluZSB0aGUgdGVtcG9yYXJ5IHN0YXRlIik7CisJaWYgKHJjKQogCQlyZXR1cm4gMDsKLQl9CiAKLQlyYyA9IHNwcmludGYoYnVmLCAiJWRcbiIsIGRhdGFbVFBNX0dFVF9DQVBfVEVNUF9JTkFDVElWRV9JRFhdKTsKLQotCWtmcmVlKGRhdGEpOworCXJjID0gc3ByaW50ZihidWYsICIlZFxuIiwgY2FwLnN0Y2xlYXJfZmxhZ3MuZGVhY3RpdmF0ZWQpOwogCXJldHVybiByYzsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHRwbV9zaG93X3RlbXBfZGVhY3RpdmF0ZWQpOwogCi1zdGF0aWMgY29uc3QgdTggcGNycmVhZFtdID0gewotCTAsIDE5MywJCQkvKiBUUE1fVEFHX1JRVV9DT01NQU5EICovCi0JMCwgMCwgMCwgMTQsCQkvKiBsZW5ndGggKi8KLQkwLCAwLCAwLCAyMSwJCS8qIFRQTV9PUkRfUGNyUmVhZCAqLwotCTAsIDAsIDAsIDAJCS8qIFBDUiBpbmRleCAqLworLyoKKyAqIHRwbV9jaGlwX2ZpbmRfZ2V0IC0gcmV0dXJuIHRwbV9jaGlwIGZvciBnaXZlbiBjaGlwIG51bWJlcgorICovCitzdGF0aWMgc3RydWN0IHRwbV9jaGlwICp0cG1fY2hpcF9maW5kX2dldChpbnQgY2hpcF9udW0pCit7CisJc3RydWN0IHRwbV9jaGlwICpwb3MsICpjaGlwID0gTlVMTDsKKworCXJjdV9yZWFkX2xvY2soKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwb3MsICZ0cG1fY2hpcF9saXN0LCBsaXN0KSB7CisJCWlmIChjaGlwX251bSAhPSBUUE1fQU5ZX05VTSAmJiBjaGlwX251bSAhPSBwb3MtPmRldl9udW0pCisJCQljb250aW51ZTsKKworCQlpZiAodHJ5X21vZHVsZV9nZXQocG9zLT5kZXYtPmRyaXZlci0+b3duZXIpKSB7CisJCQljaGlwID0gcG9zOworCQkJYnJlYWs7CisJCX0KKwl9CisJcmN1X3JlYWRfdW5sb2NrKCk7CisJcmV0dXJuIGNoaXA7Cit9CisKKyNkZWZpbmUgVFBNX09SRElOQUxfUENSUkVBRCBjcHVfdG9fYmUzMigyMSkKKyNkZWZpbmUgUkVBRF9QQ1JfUkVTVUxUX1NJWkUgMzAKK3N0YXRpYyBzdHJ1Y3QgdHBtX2lucHV0X2hlYWRlciBwY3JyZWFkX2hlYWRlciA9IHsKKwkudGFnID0gVFBNX1RBR19SUVVfQ09NTUFORCwKKwkubGVuZ3RoID0gY3B1X3RvX2JlMzIoMTQpLAorCS5vcmRpbmFsID0gVFBNX09SRElOQUxfUENSUkVBRAogfTsKIAoraW50IF9fdHBtX3Bjcl9yZWFkKHN0cnVjdCB0cG1fY2hpcCAqY2hpcCwgaW50IHBjcl9pZHgsIHU4ICpyZXNfYnVmKQoreworCWludCByYzsKKwlzdHJ1Y3QgdHBtX2NtZF90IGNtZDsKKworCWNtZC5oZWFkZXIuaW4gPSBwY3JyZWFkX2hlYWRlcjsKKwljbWQucGFyYW1zLnBjcnJlYWRfaW4ucGNyX2lkeCA9IGNwdV90b19iZTMyKHBjcl9pZHgpOworCUJVSUxEX0JVR19PTihjbWQuaGVhZGVyLmluLmxlbmd0aCA+IFJFQURfUENSX1JFU1VMVF9TSVpFKTsKKwlyYyA9IHRyYW5zbWl0X2NtZChjaGlwLCAmY21kLCBjbWQuaGVhZGVyLmluLmxlbmd0aCwKKwkJCSAgImF0dGVtcHRpbmcgdG8gcmVhZCBhIHBjciB2YWx1ZSIpOworCisJaWYgKHJjID09IDApCisJCW1lbWNweShyZXNfYnVmLCBjbWQucGFyYW1zLnBjcnJlYWRfb3V0LnBjcl9yZXN1bHQsCisJCSAgICAgICBUUE1fRElHRVNUX1NJWkUpOworCXJldHVybiByYzsKK30KKworLyoqCisgKiB0cG1fcGNyX3JlYWQgLSByZWFkIGEgcGNyIHZhbHVlCisgKiBAY2hpcF9udW06IAl0cG0gaWR4ICMgb3IgQU5ZCisgKiBAcGNyX2lkeDoJcGNyIGlkeCB0byByZXRyaWV2ZQorICogQHJlc19idWY6IAlUUE1fUENSIHZhbHVlCisgKiAJCXNpemUgb2YgcmVzX2J1ZiBpcyAyMCBieXRlcyAob3IgTlVMTCBpZiB5b3UgZG9uJ3QgY2FyZSkKKyAqCisgKiBUaGUgVFBNIGRyaXZlciBzaG91bGQgYmUgYnVpbHQtaW4sIGJ1dCBmb3Igd2hhdGV2ZXIgcmVhc29uIGl0CisgKiBpc24ndCwgcHJvdGVjdCBhZ2FpbnN0IHRoZSBjaGlwIGRpc2FwcGVhcmluZywgYnkgaW5jcmVtZW50aW5nCisgKiB0aGUgbW9kdWxlIHVzYWdlIGNvdW50LgorICovCitpbnQgdHBtX3Bjcl9yZWFkKHUzMiBjaGlwX251bSwgaW50IHBjcl9pZHgsIHU4ICpyZXNfYnVmKQoreworCXN0cnVjdCB0cG1fY2hpcCAqY2hpcDsKKwlpbnQgcmM7CisKKwljaGlwID0gdHBtX2NoaXBfZmluZF9nZXQoY2hpcF9udW0pOworCWlmIChjaGlwID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCXJjID0gX190cG1fcGNyX3JlYWQoY2hpcCwgcGNyX2lkeCwgcmVzX2J1Zik7CisJbW9kdWxlX3B1dChjaGlwLT5kZXYtPmRyaXZlci0+b3duZXIpOworCXJldHVybiByYzsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHRwbV9wY3JfcmVhZCk7CisKKy8qKgorICogdHBtX3Bjcl9leHRlbmQgLSBleHRlbmQgcGNyIHZhbHVlIHdpdGggaGFzaAorICogQGNoaXBfbnVtOiAJdHBtIGlkeCAjIG9yIEFOJgorICogQHBjcl9pZHg6CXBjciBpZHggdG8gZXh0ZW5kCisgKiBAaGFzaDogCWhhc2ggdmFsdWUgdXNlZCB0byBleHRlbmQgcGNyIHZhbHVlCisgKgorICogVGhlIFRQTSBkcml2ZXIgc2hvdWxkIGJlIGJ1aWx0LWluLCBidXQgZm9yIHdoYXRldmVyIHJlYXNvbiBpdAorICogaXNuJ3QsIHByb3RlY3QgYWdhaW5zdCB0aGUgY2hpcCBkaXNhcHBlYXJpbmcsIGJ5IGluY3JlbWVudGluZworICogdGhlIG1vZHVsZSB1c2FnZSBjb3VudC4KKyAqLworI2RlZmluZSBUUE1fT1JEX1BDUl9FWFRFTkQgY3B1X3RvX2JlMzIoMjApCisjZGVmaW5lIEVYVEVORF9QQ1JfU0laRSAzNAorc3RhdGljIHN0cnVjdCB0cG1faW5wdXRfaGVhZGVyIHBjcmV4dGVuZF9oZWFkZXIgPSB7CisJLnRhZyA9IFRQTV9UQUdfUlFVX0NPTU1BTkQsCisJLmxlbmd0aCA9IGNwdV90b19iZTMyKDM0KSwKKwkub3JkaW5hbCA9IFRQTV9PUkRfUENSX0VYVEVORAorfTsKKworaW50IHRwbV9wY3JfZXh0ZW5kKHUzMiBjaGlwX251bSwgaW50IHBjcl9pZHgsIGNvbnN0IHU4ICpoYXNoKQoreworCXN0cnVjdCB0cG1fY21kX3QgY21kOworCWludCByYzsKKwlzdHJ1Y3QgdHBtX2NoaXAgKmNoaXA7CisKKwljaGlwID0gdHBtX2NoaXBfZmluZF9nZXQoY2hpcF9udW0pOworCWlmIChjaGlwID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCisJY21kLmhlYWRlci5pbiA9IHBjcmV4dGVuZF9oZWFkZXI7CisJQlVJTERfQlVHX09OKGJlMzJfdG9fY3B1KGNtZC5oZWFkZXIuaW4ubGVuZ3RoKSA+IEVYVEVORF9QQ1JfU0laRSk7CisJY21kLnBhcmFtcy5wY3JleHRlbmRfaW4ucGNyX2lkeCA9IGNwdV90b19iZTMyKHBjcl9pZHgpOworCW1lbWNweShjbWQucGFyYW1zLnBjcmV4dGVuZF9pbi5oYXNoLCBoYXNoLCBUUE1fRElHRVNUX1NJWkUpOworCXJjID0gdHJhbnNtaXRfY21kKGNoaXAsICZjbWQsIGNtZC5oZWFkZXIuaW4ubGVuZ3RoLAorCQkJICAiYXR0ZW1wdGluZyBleHRlbmQgYSBQQ1IgdmFsdWUiKTsKKworCW1vZHVsZV9wdXQoY2hpcC0+ZGV2LT5kcml2ZXItPm93bmVyKTsKKwlyZXR1cm4gcmM7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh0cG1fcGNyX2V4dGVuZCk7CisKIHNzaXplX3QgdHBtX3Nob3dfcGNycyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkgICAgICBjaGFyICpidWYpCiB7Ci0JdTggKmRhdGE7CisJY2FwX3QgY2FwOworCXU4IGRpZ2VzdFtUUE1fRElHRVNUX1NJWkVdOwogCXNzaXplX3QgcmM7CiAJaW50IGksIGosIG51bV9wY3JzOwotCV9fYmUzMiBpbmRleDsKIAljaGFyICpzdHIgPSBidWY7Ci0KIAlzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlpZiAoY2hpcCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT0RFVjsKIAotCWRhdGEgPSBremFsbG9jKFRQTV9JTlRFUk5BTF9SRVNVTFRfU0laRSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkYXRhKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCW1lbWNweShkYXRhLCB0cG1fY2FwLCBzaXplb2YodHBtX2NhcCkpOwotCWRhdGFbVFBNX0NBUF9JRFhdID0gVFBNX0NBUF9QUk9QOwotCWRhdGFbVFBNX0NBUF9TVUJDQVBfSURYXSA9IFRQTV9DQVBfUFJPUF9QQ1I7Ci0KLQlyYyA9IHRyYW5zbWl0X2NtZChjaGlwLCBkYXRhLCBUUE1fSU5URVJOQUxfUkVTVUxUX1NJWkUsCisJcmMgPSB0cG1fZ2V0Y2FwKGRldiwgVFBNX0NBUF9QUk9QX1BDUiwgJmNhcCwKIAkJCSJhdHRlbXB0aW5nIHRvIGRldGVybWluZSB0aGUgbnVtYmVyIG9mIFBDUlMiKTsKLQlpZiAocmMpIHsKLQkJa2ZyZWUoZGF0YSk7CisJaWYgKHJjKQogCQlyZXR1cm4gMDsKLQl9CiAKLQludW1fcGNycyA9IGJlMzJfdG9fY3B1KCooKF9fYmUzMiAqKSAoZGF0YSArIDE0KSkpOworCW51bV9wY3JzID0gYmUzMl90b19jcHUoY2FwLm51bV9wY3JzKTsKIAlmb3IgKGkgPSAwOyBpIDwgbnVtX3BjcnM7IGkrKykgewotCQltZW1jcHkoZGF0YSwgcGNycmVhZCwgc2l6ZW9mKHBjcnJlYWQpKTsKLQkJaW5kZXggPSBjcHVfdG9fYmUzMihpKTsKLQkJbWVtY3B5KGRhdGEgKyAxMCwgJmluZGV4LCA0KTsKLQkJcmMgPSB0cmFuc21pdF9jbWQoY2hpcCwgZGF0YSwgVFBNX0lOVEVSTkFMX1JFU1VMVF9TSVpFLAotCQkJCSJhdHRlbXB0aW5nIHRvIHJlYWQgYSBQQ1IiKTsKKwkJcmMgPSBfX3RwbV9wY3JfcmVhZChjaGlwLCBpLCBkaWdlc3QpOwogCQlpZiAocmMpCi0JCQlnb3RvIG91dDsKKwkJCWJyZWFrOwogCQlzdHIgKz0gc3ByaW50ZihzdHIsICJQQ1ItJTAyZDogIiwgaSk7CiAJCWZvciAoaiA9IDA7IGogPCBUUE1fRElHRVNUX1NJWkU7IGorKykKLQkJCXN0ciArPSBzcHJpbnRmKHN0ciwgIiUwMlggIiwgKihkYXRhICsgMTAgKyBqKSk7CisJCQlzdHIgKz0gc3ByaW50ZihzdHIsICIlMDJYICIsIGRpZ2VzdFtqXSk7CiAJCXN0ciArPSBzcHJpbnRmKHN0ciwgIlxuIik7CiAJfQotb3V0OgotCWtmcmVlKGRhdGEpOwogCXJldHVybiBzdHIgLSBidWY7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh0cG1fc2hvd19wY3JzKTsKIAogI2RlZmluZSAgUkVBRF9QVUJFS19SRVNVTFRfU0laRSAzMTQKLXN0YXRpYyBjb25zdCB1OCByZWFkcHViZWtbXSA9IHsKLQkwLCAxOTMsCQkJLyogVFBNX1RBR19SUVVfQ09NTUFORCAqLwotCTAsIDAsIDAsIDMwLAkJLyogbGVuZ3RoICovCi0JMCwgMCwgMCwgMTI0LAkJLyogVFBNX09SRF9SZWFkUHViZWsgKi8KKyNkZWZpbmUgVFBNX09SRF9SRUFEUFVCRUsgY3B1X3RvX2JlMzIoMTI0KQorc3RydWN0IHRwbV9pbnB1dF9oZWFkZXIgdHBtX3JlYWRwdWJla19oZWFkZXIgPSB7CisJLnRhZyA9IFRQTV9UQUdfUlFVX0NPTU1BTkQsCisJLmxlbmd0aCA9IGNwdV90b19iZTMyKDMwKSwKKwkub3JkaW5hbCA9IFRQTV9PUkRfUkVBRFBVQkVLCiB9OwogCiBzc2l6ZV90IHRwbV9zaG93X3B1YmVrKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCSAgICAgICBjaGFyICpidWYpCiB7CiAJdTggKmRhdGE7CisJc3RydWN0IHRwbV9jbWRfdCB0cG1fY21kOwogCXNzaXplX3QgZXJyOwogCWludCBpLCByYzsKIAljaGFyICpzdHIgPSBidWY7CiAKIAlzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlpZiAoY2hpcCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT0RFVjsKIAotCWRhdGEgPSBremFsbG9jKFJFQURfUFVCRUtfUkVTVUxUX1NJWkUsIEdGUF9LRVJORUwpOwotCWlmICghZGF0YSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQltZW1jcHkoZGF0YSwgcmVhZHB1YmVrLCBzaXplb2YocmVhZHB1YmVrKSk7Ci0KLQllcnIgPSB0cmFuc21pdF9jbWQoY2hpcCwgZGF0YSwgUkVBRF9QVUJFS19SRVNVTFRfU0laRSwKKwl0cG1fY21kLmhlYWRlci5pbiA9IHRwbV9yZWFkcHViZWtfaGVhZGVyOworCWVyciA9IHRyYW5zbWl0X2NtZChjaGlwLCAmdHBtX2NtZCwgUkVBRF9QVUJFS19SRVNVTFRfU0laRSwKIAkJCSJhdHRlbXB0aW5nIHRvIHJlYWQgdGhlIFBVQkVLIik7CiAJaWYgKGVycikKIAkJZ290byBvdXQ7CkBAIC04MTIsNyArODM2LDcgQEAKIAkgICAyNTYgYnl0ZSBtb2R1bHVzCiAJICAgaWdub3JlIGNoZWNrc3VtIDIwIGJ5dGVzCiAJICovCi0KKwlkYXRhID0gdHBtX2NtZC5wYXJhbXMucmVhZHB1YmVrX291dF9idWZmZXI7CiAJc3RyICs9CiAJICAgIHNwcmludGYoc3RyLAogCQkgICAgIkFsZ29yaXRobTogJTAyWCAlMDJYICUwMlggJTAyWFxuRW5jc2NoZW1lOiAlMDJYICUwMlhcbiIKQEAgLTgzMiw2NSArODU2LDMzIEBACiAJfQogb3V0OgogCXJjID0gc3RyIC0gYnVmOwotCWtmcmVlKGRhdGEpOwogCXJldHVybiByYzsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHRwbV9zaG93X3B1YmVrKTsKIAotI2RlZmluZSBDQVBfVkVSU0lPTl8xXzEgNgotI2RlZmluZSBDQVBfVkVSU0lPTl8xXzIgMHgxQQotI2RlZmluZSBDQVBfVkVSU0lPTl9JRFggMTMKLXN0YXRpYyBjb25zdCB1OCBjYXBfdmVyc2lvbltdID0gewotCTAsIDE5MywJCQkvKiBUUE1fVEFHX1JRVV9DT01NQU5EICovCi0JMCwgMCwgMCwgMTgsCQkvKiBsZW5ndGggKi8KLQkwLCAwLCAwLCAxMDEsCQkvKiBUUE1fT1JEX0dldENhcGFiaWxpdHkgKi8KLQkwLCAwLCAwLCAwLAotCTAsIDAsIDAsIDAKLX07CiAKIHNzaXplX3QgdHBtX3Nob3dfY2FwcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkgICAgICBjaGFyICpidWYpCiB7Ci0JdTggKmRhdGE7CisJY2FwX3QgY2FwOwogCXNzaXplX3QgcmM7CiAJY2hhciAqc3RyID0gYnVmOwogCi0Jc3RydWN0IHRwbV9jaGlwICpjaGlwID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0JaWYgKGNoaXAgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlkYXRhID0ga3phbGxvYyhUUE1fSU5URVJOQUxfUkVTVUxUX1NJWkUsIEdGUF9LRVJORUwpOwotCWlmICghZGF0YSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQltZW1jcHkoZGF0YSwgdHBtX2NhcCwgc2l6ZW9mKHRwbV9jYXApKTsKLQlkYXRhW1RQTV9DQVBfSURYXSA9IFRQTV9DQVBfUFJPUDsKLQlkYXRhW1RQTV9DQVBfU1VCQ0FQX0lEWF0gPSBUUE1fQ0FQX1BST1BfTUFOVUZBQ1RVUkVSOwotCi0JcmMgPSB0cmFuc21pdF9jbWQoY2hpcCwgZGF0YSwgVFBNX0lOVEVSTkFMX1JFU1VMVF9TSVpFLAorCXJjID0gdHBtX2dldGNhcChkZXYsIFRQTV9DQVBfUFJPUF9NQU5VRkFDVFVSRVIsICZjYXAsCiAJCQkiYXR0ZW1wdGluZyB0byBkZXRlcm1pbmUgdGhlIG1hbnVmYWN0dXJlciIpOwotCWlmIChyYykgewotCQlrZnJlZShkYXRhKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0Jc3RyICs9IHNwcmludGYoc3RyLCAiTWFudWZhY3R1cmVyOiAweCV4XG4iLAotCQkgICAgICAgYmUzMl90b19jcHUoKigoX19iZTMyICopIChkYXRhICsgVFBNX0dFVF9DQVBfUkVUX1VJTlQzMl8xX0lEWCkpKSk7Ci0KLQltZW1jcHkoZGF0YSwgY2FwX3ZlcnNpb24sIHNpemVvZihjYXBfdmVyc2lvbikpOwotCWRhdGFbQ0FQX1ZFUlNJT05fSURYXSA9IENBUF9WRVJTSU9OXzFfMTsKLQlyYyA9IHRyYW5zbWl0X2NtZChjaGlwLCBkYXRhLCBUUE1fSU5URVJOQUxfUkVTVUxUX1NJWkUsCi0JCQkiYXR0ZW1wdGluZyB0byBkZXRlcm1pbmUgdGhlIDEuMSB2ZXJzaW9uIik7CiAJaWYgKHJjKQotCQlnb3RvIG91dDsKKwkJcmV0dXJuIDA7CisJc3RyICs9IHNwcmludGYoc3RyLCAiTWFudWZhY3R1cmVyOiAweCV4XG4iLAorCQkgICAgICAgYmUzMl90b19jcHUoY2FwLm1hbnVmYWN0dXJlcl9pZCkpOwogCisJcmMgPSB0cG1fZ2V0Y2FwKGRldiwgQ0FQX1ZFUlNJT05fMV8xLCAmY2FwLAorCQkgICAgICAgICJhdHRlbXB0aW5nIHRvIGRldGVybWluZSB0aGUgMS4xIHZlcnNpb24iKTsKKwlpZiAocmMpCisJCXJldHVybiAwOwogCXN0ciArPSBzcHJpbnRmKHN0ciwKIAkJICAgICAgICJUQ0cgdmVyc2lvbjogJWQuJWRcbkZpcm13YXJlIHZlcnNpb246ICVkLiVkXG4iLAotCQkgICAgICAgKGludCkgZGF0YVsxNF0sIChpbnQpIGRhdGFbMTVdLCAoaW50KSBkYXRhWzE2XSwKLQkJICAgICAgIChpbnQpIGRhdGFbMTddKTsKLQotb3V0OgotCWtmcmVlKGRhdGEpOworCQkgICAgICAgY2FwLnRwbV92ZXJzaW9uLk1ham9yLCBjYXAudHBtX3ZlcnNpb24uTWlub3IsCisJCSAgICAgICBjYXAudHBtX3ZlcnNpb24ucmV2TWFqb3IsIGNhcC50cG1fdmVyc2lvbi5yZXZNaW5vcik7CiAJcmV0dXJuIHN0ciAtIGJ1ZjsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHRwbV9zaG93X2NhcHMpOwpAQCAtODk4LDUxICs4OTAsMjUgQEAKIHNzaXplX3QgdHBtX3Nob3dfY2Fwc18xXzIoc3RydWN0IGRldmljZSAqIGRldiwKIAkJCSAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKiBhdHRyLCBjaGFyICpidWYpCiB7Ci0JdTggKmRhdGE7Ci0Jc3NpemVfdCBsZW47CisJY2FwX3QgY2FwOworCXNzaXplX3QgcmM7CiAJY2hhciAqc3RyID0gYnVmOwogCi0Jc3RydWN0IHRwbV9jaGlwICpjaGlwID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0JaWYgKGNoaXAgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlkYXRhID0ga3phbGxvYyhUUE1fSU5URVJOQUxfUkVTVUxUX1NJWkUsIEdGUF9LRVJORUwpOwotCWlmICghZGF0YSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQltZW1jcHkoZGF0YSwgdHBtX2NhcCwgc2l6ZW9mKHRwbV9jYXApKTsKLQlkYXRhW1RQTV9DQVBfSURYXSA9IFRQTV9DQVBfUFJPUDsKLQlkYXRhW1RQTV9DQVBfU1VCQ0FQX0lEWF0gPSBUUE1fQ0FQX1BST1BfTUFOVUZBQ1RVUkVSOwotCi0JbGVuID0gdHBtX3RyYW5zbWl0KGNoaXAsIGRhdGEsIFRQTV9JTlRFUk5BTF9SRVNVTFRfU0laRSk7Ci0JaWYgKGxlbiA8PSBUUE1fRVJST1JfU0laRSkgewotCQlkZXZfZGJnKGNoaXAtPmRldiwgIkEgVFBNIGVycm9yICglZCkgb2NjdXJyZWQgIgotCQkJImF0dGVtcHRpbmcgdG8gZGV0ZXJtaW5lIHRoZSBtYW51ZmFjdHVyZXJcbiIsCi0JCQliZTMyX3RvX2NwdSgqKChfX2JlMzIgKikgKGRhdGEgKyBUUE1fUkVUX0NPREVfSURYKSkpKTsKLQkJa2ZyZWUoZGF0YSk7CisJcmMgPSB0cG1fZ2V0Y2FwKGRldiwgVFBNX0NBUF9QUk9QX01BTlVGQUNUVVJFUiwgJmNhcCwKKwkJCSJhdHRlbXB0aW5nIHRvIGRldGVybWluZSB0aGUgbWFudWZhY3R1cmVyIik7CisJaWYgKHJjKQogCQlyZXR1cm4gMDsKLQl9Ci0KIAlzdHIgKz0gc3ByaW50ZihzdHIsICJNYW51ZmFjdHVyZXI6IDB4JXhcbiIsCi0JCSAgICAgICBiZTMyX3RvX2NwdSgqKChfX2JlMzIgKikgKGRhdGEgKyBUUE1fR0VUX0NBUF9SRVRfVUlOVDMyXzFfSURYKSkpKTsKLQotCW1lbWNweShkYXRhLCBjYXBfdmVyc2lvbiwgc2l6ZW9mKGNhcF92ZXJzaW9uKSk7Ci0JZGF0YVtDQVBfVkVSU0lPTl9JRFhdID0gQ0FQX1ZFUlNJT05fMV8yOwotCi0JbGVuID0gdHBtX3RyYW5zbWl0KGNoaXAsIGRhdGEsIFRQTV9JTlRFUk5BTF9SRVNVTFRfU0laRSk7Ci0JaWYgKGxlbiA8PSBUUE1fRVJST1JfU0laRSkgewotCQlkZXZfZXJyKGNoaXAtPmRldiwgIkEgVFBNIGVycm9yICglZCkgb2NjdXJyZWQgIgotCQkJImF0dGVtcHRpbmcgdG8gZGV0ZXJtaW5lIHRoZSAxLjIgdmVyc2lvblxuIiwKLQkJCWJlMzJfdG9fY3B1KCooKF9fYmUzMiAqKSAoZGF0YSArIFRQTV9SRVRfQ09ERV9JRFgpKSkpOwotCQlnb3RvIG91dDsKLQl9CisJCSAgICAgICBiZTMyX3RvX2NwdShjYXAubWFudWZhY3R1cmVyX2lkKSk7CisJcmMgPSB0cG1fZ2V0Y2FwKGRldiwgQ0FQX1ZFUlNJT05fMV8yLCAmY2FwLAorCQkJICJhdHRlbXB0aW5nIHRvIGRldGVybWluZSB0aGUgMS4yIHZlcnNpb24iKTsKKwlpZiAocmMpCisJCXJldHVybiAwOwogCXN0ciArPSBzcHJpbnRmKHN0ciwKIAkJICAgICAgICJUQ0cgdmVyc2lvbjogJWQuJWRcbkZpcm13YXJlIHZlcnNpb246ICVkLiVkXG4iLAotCQkgICAgICAgKGludCkgZGF0YVsxNl0sIChpbnQpIGRhdGFbMTddLCAoaW50KSBkYXRhWzE4XSwKLQkJICAgICAgIChpbnQpIGRhdGFbMTldKTsKLQotb3V0OgotCWtmcmVlKGRhdGEpOworCQkgICAgICAgY2FwLnRwbV92ZXJzaW9uXzFfMi5NYWpvciwgY2FwLnRwbV92ZXJzaW9uXzFfMi5NaW5vciwKKwkJICAgICAgIGNhcC50cG1fdmVyc2lvbl8xXzIucmV2TWFqb3IsCisJCSAgICAgICBjYXAudHBtX3ZlcnNpb25fMV8yLnJldk1pbm9yKTsKIAlyZXR1cm4gc3RyIC0gYnVmOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodHBtX3Nob3dfY2Fwc18xXzIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3RwbS90cG0uaCBiL2RyaXZlcnMvY2hhci90cG0vdHBtLmgKaW5kZXggOGUzMGRmNC4uOGUwMGI0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3RwbS90cG0uaAorKysgYi9kcml2ZXJzL2NoYXIvdHBtL3RwbS5oCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvdHBtLmg+CiAKIGVudW0gdHBtX3RpbWVvdXQgewogCVRQTV9USU1FT1VUID0gNSwJLyogbXNlY3MgKi8KQEAgLTEyMyw2ICsxMjQsMTQ3IEBACiAJb3V0YihpbmRleCwgYmFzZSk7CiAJb3V0Yih2YWx1ZSAmIDB4RkYsIGJhc2UrMSk7CiB9CitzdHJ1Y3QgdHBtX2lucHV0X2hlYWRlciB7CisJX19iZTE2CXRhZzsKKwlfX2JlMzIJbGVuZ3RoOworCV9fYmUzMglvcmRpbmFsOworfV9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgdHBtX291dHB1dF9oZWFkZXIgeworCV9fYmUxNgl0YWc7CisJX19iZTMyCWxlbmd0aDsKKwlfX2JlMzIJcmV0dXJuX2NvZGU7Cit9X19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdAlzdGNsZWFyX2ZsYWdzX3QgeworCV9fYmUxNgl0YWc7CisJdTgJZGVhY3RpdmF0ZWQ7CisJdTgJZGlzYWJsZUZvcmNlQ2xlYXI7CisJdTgJcGh5c2ljYWxQcmVzZW5jZTsKKwl1OAlwaHlzaWNhbFByZXNlbmNlTG9jazsKKwl1OAliR2xvYmFsTG9jazsKK31fX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0CXRwbV92ZXJzaW9uX3QgeworCXU4CU1ham9yOworCXU4CU1pbm9yOworCXU4CXJldk1ham9yOworCXU4CXJldk1pbm9yOworfV9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QJdHBtX3ZlcnNpb25fMV8yX3QgeworCV9fYmUxNgl0YWc7CisJdTgJTWFqb3I7CisJdTgJTWlub3I7CisJdTgJcmV2TWFqb3I7CisJdTgJcmV2TWlub3I7Cit9X19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdAl0aW1lb3V0X3QgeworCV9fYmUzMglhOworCV9fYmUzMgliOworCV9fYmUzMgljOworCV9fYmUzMglkOworfV9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgZHVyYXRpb25fdCB7CisJX19iZTMyCXRwbV9zaG9ydDsKKwlfX2JlMzIJdHBtX21lZGl1bTsKKwlfX2JlMzIJdHBtX2xvbmc7Cit9X19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBwZXJtYW5lbnRfZmxhZ3NfdCB7CisJX19iZTE2CXRhZzsKKwl1OAlkaXNhYmxlOworCXU4CW93bmVyc2hpcDsKKwl1OAlkZWFjdGl2YXRlZDsKKwl1OAlyZWFkUHViZWs7CisJdTgJZGlzYWJsZU93bmVyQ2xlYXI7CisJdTgJYWxsb3dNYWludGVuYW5jZTsKKwl1OAlwaHlzaWNhbFByZXNlbmNlTGlmZXRpbWVMb2NrOworCXU4CXBoeXNpY2FsUHJlc2VuY2VIV0VuYWJsZTsKKwl1OAlwaHlzaWNhbFByZXNlbmNlQ01ERW5hYmxlOworCXU4CUNFS1BVc2VkOworCXU4CVRQTXBvc3Q7CisJdTgJVFBNcG9zdExvY2s7CisJdTgJRklQUzsKKwl1OAlvcGVyYXRvcjsKKwl1OAllbmFibGVSZXZva2VFSzsKKwl1OAludkxvY2tlZDsKKwl1OAlyZWFkU1JLUHViOworCXU4CXRwbUVzdGFibGlzaGVkOworCXU4CW1haW50ZW5hbmNlRG9uZTsKKwl1OAlkaXNhYmxlRnVsbERBTG9naWNJbmZvOworfV9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCit0eXBlZGVmIHVuaW9uIHsKKwlzdHJ1Y3QJcGVybWFuZW50X2ZsYWdzX3QgcGVybV9mbGFnczsKKwlzdHJ1Y3QJc3RjbGVhcl9mbGFnc190CXN0Y2xlYXJfZmxhZ3M7CisJYm9vbAlvd25lZDsKKwlfX2JlMzIJbnVtX3BjcnM7CisJc3RydWN0CXRwbV92ZXJzaW9uX3QJdHBtX3ZlcnNpb247CisJc3RydWN0CXRwbV92ZXJzaW9uXzFfMl90IHRwbV92ZXJzaW9uXzFfMjsKKwlfX2JlMzIJbWFudWZhY3R1cmVyX2lkOworCXN0cnVjdCB0aW1lb3V0X3QgIHRpbWVvdXQ7CisJc3RydWN0IGR1cmF0aW9uX3QgZHVyYXRpb247Cit9IGNhcF90OworCitzdHJ1Y3QJdHBtX2dldGNhcF9wYXJhbXNfaW4geworCV9fYmUzMgljYXA7CisJX19iZTMyCXN1YmNhcF9zaXplOworCV9fYmUzMglzdWJjYXA7Cit9X19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdAl0cG1fZ2V0Y2FwX3BhcmFtc19vdXQgeworCV9fYmUzMgljYXBfc2l6ZTsKKwljYXBfdAljYXA7Cit9X19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdAl0cG1fcmVhZHB1YmVrX3BhcmFtc19vdXQgeworCXU4CWFsZ29yaXRobVs0XTsKKwl1OAllbmNzY2hlbWVbMl07CisJdTgJc2lnc2NoZW1lWzJdOworCXU4CXBhcmFtZXRlcnNbMTJdOyAvKmFzc3VtaW5nIFJTQSovCisJX19iZTMyCWtleXNpemU7CisJdTgJbW9kdWx1c1syNTZdOworCXU4CWNoZWNrc3VtWzIwXTsKK31fX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwordHlwZWRlZiB1bmlvbiB7CisJc3RydWN0CXRwbV9pbnB1dF9oZWFkZXIgaW47CisJc3RydWN0CXRwbV9vdXRwdXRfaGVhZGVyIG91dDsKK30gdHBtX2NtZF9oZWFkZXI7CisKKyNkZWZpbmUgVFBNX0RJR0VTVF9TSVpFIDIwCitzdHJ1Y3QgdHBtX3BjcnJlYWRfb3V0IHsKKwl1OAlwY3JfcmVzdWx0W1RQTV9ESUdFU1RfU0laRV07Cit9X19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCB0cG1fcGNycmVhZF9pbiB7CisJX19iZTMyCXBjcl9pZHg7Cit9X19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCB0cG1fcGNyZXh0ZW5kX2luIHsKKwlfX2JlMzIJcGNyX2lkeDsKKwl1OAloYXNoW1RQTV9ESUdFU1RfU0laRV07Cit9X19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3R5cGVkZWYgdW5pb24geworCXN0cnVjdAl0cG1fZ2V0Y2FwX3BhcmFtc19vdXQgZ2V0Y2FwX291dDsKKwlzdHJ1Y3QJdHBtX3JlYWRwdWJla19wYXJhbXNfb3V0IHJlYWRwdWJla19vdXQ7CisJdTgJcmVhZHB1YmVrX291dF9idWZmZXJbc2l6ZW9mKHN0cnVjdCB0cG1fcmVhZHB1YmVrX3BhcmFtc19vdXQpXTsKKwlzdHJ1Y3QJdHBtX2dldGNhcF9wYXJhbXNfaW4gZ2V0Y2FwX2luOworCXN0cnVjdAl0cG1fcGNycmVhZF9pbglwY3JyZWFkX2luOworCXN0cnVjdAl0cG1fcGNycmVhZF9vdXQJcGNycmVhZF9vdXQ7CisJc3RydWN0CXRwbV9wY3JleHRlbmRfaW4gcGNyZXh0ZW5kX2luOworfSB0cG1fY21kX3BhcmFtczsKKworc3RydWN0IHRwbV9jbWRfdCB7CisJdHBtX2NtZF9oZWFkZXIJaGVhZGVyOworCXRwbV9jbWRfcGFyYW1zCXBhcmFtczsKK31fX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3NpemVfdAl0cG1fZ2V0Y2FwKHN0cnVjdCBkZXZpY2UgKiwgX19iZTMyLCBjYXBfdCAqLCBjb25zdCBjaGFyICopOwogCiBleHRlcm4gdm9pZCB0cG1fZ2V0X3RpbWVvdXRzKHN0cnVjdCB0cG1fY2hpcCAqKTsKIGV4dGVybiB2b2lkIHRwbV9nZW5faW50ZXJydXB0KHN0cnVjdCB0cG1fY2hpcCAqKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci90cG0vdHBtX2F0bWVsLmMgYi9kcml2ZXJzL2NoYXIvdHBtL3RwbV9hdG1lbC5jCmluZGV4IGQwZTc5MjYuLmM2NGExYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci90cG0vdHBtX2F0bWVsLmMKKysrIGIvZHJpdmVycy9jaGFyL3RwbS90cG1fYXRtZWwuYwpAQCAtMTY4LDEyICsxNjgsMjIgQEAKIAl9CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBhdG1sX2RydiA9IHsKLQkubmFtZSA9ICJ0cG1fYXRtZWwiLAotCS5idXMgPSAmcGxhdGZvcm1fYnVzX3R5cGUsCi0JLm93bmVyID0gVEhJU19NT0RVTEUsCi0JLnN1c3BlbmQgPSB0cG1fcG1fc3VzcGVuZCwKLQkucmVzdW1lID0gdHBtX3BtX3Jlc3VtZSwKK3N0YXRpYyBpbnQgdHBtX2F0bWxfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBtc2cpCit7CisJcmV0dXJuIHRwbV9wbV9zdXNwZW5kKCZkZXYtPmRldiwgbXNnKTsKK30KKworc3RhdGljIGludCB0cG1fYXRtbF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXJldHVybiB0cG1fcG1fcmVzdW1lKCZkZXYtPmRldik7Cit9CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhdG1sX2RydiA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJ0cG1fYXRtZWwiLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJfSwKKwkuc3VzcGVuZCA9IHRwbV9hdG1sX3N1c3BlbmQsCisJLnJlc3VtZSA9IHRwbV9hdG1sX3Jlc3VtZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGluaXRfYXRtZWwodm9pZCkKQEAgLTE4NCw3ICsxOTQsNyBAQAogCXVuc2lnbmVkIGxvbmcgYmFzZTsKIAlzdHJ1Y3QgIHRwbV9jaGlwICpjaGlwOwogCi0JcmMgPSBkcml2ZXJfcmVnaXN0ZXIoJmF0bWxfZHJ2KTsKKwlyYyA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmYXRtbF9kcnYpOwogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCkBAIC0yMjMsMTMgKzIzMywxMyBAQAogCQlhdG1lbF9yZWxlYXNlX3JlZ2lvbihiYXNlLAogCQkJCSAgICAgcmVnaW9uX3NpemUpOwogZXJyX3VucmVnX2RydjoKLQlkcml2ZXJfdW5yZWdpc3RlcigmYXRtbF9kcnYpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZhdG1sX2Rydik7CiAJcmV0dXJuIHJjOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgY2xlYW51cF9hdG1lbCh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZhdG1sX2Rydik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmF0bWxfZHJ2KTsKIAlhdG1sX3BsYXRfcmVtb3ZlKCk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci90cG0vdHBtX3Rpcy5jIGIvZHJpdmVycy9jaGFyL3RwbS90cG1fdGlzLmMKaW5kZXggNzE3YWY3YS4uYWVjMTkzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3RwbS90cG1fdGlzLmMKKysrIGIvZHJpdmVycy9jaGFyL3RwbS90cG1fdGlzLmMKQEAgLTY1NCwxMiArNjU0LDIyIEBACiAJCSAgICBzaXplb2YodHBtX3BucF90YmxbVElTX0hJRF9VU1JfSURYXS5pZCksIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhoaWQsICJTZXQgYWRkaXRpb25hbCBzcGVjaWZpYyBISUQgZm9yIHRoaXMgZHJpdmVyIHRvIHByb2JlIik7CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciB0aXNfZHJ2ID0gewotCS5uYW1lID0gInRwbV90aXMiLAotCS5idXMgPSAmcGxhdGZvcm1fYnVzX3R5cGUsCi0JLm93bmVyID0gVEhJU19NT0RVTEUsCi0JLnN1c3BlbmQgPSB0cG1fcG1fc3VzcGVuZCwKLQkucmVzdW1lID0gdHBtX3BtX3Jlc3VtZSwKK3N0YXRpYyBpbnQgdHBtX3Rpc19zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IG1zZykKK3sKKwlyZXR1cm4gdHBtX3BtX3N1c3BlbmQoJmRldi0+ZGV2LCBtc2cpOworfQorCitzdGF0aWMgaW50IHRwbV90aXNfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gdHBtX3BtX3Jlc3VtZSgmZGV2LT5kZXYpOworfQorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdGlzX2RydiA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJ0cG1fdGlzIiwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCX0sCisJLnN1c3BlbmQgPSB0cG1fdGlzX3N1c3BlbmQsCisJLnJlc3VtZSA9IHRwbV90aXNfcmVzdW1lLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CkBAIC02NzIsMTQgKzY4MiwxNCBAQAogCWludCByYzsKIAogCWlmIChmb3JjZSkgewotCQlyYyA9IGRyaXZlcl9yZWdpc3RlcigmdGlzX2Rydik7CisJCXJjID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ0aXNfZHJ2KTsKIAkJaWYgKHJjIDwgMCkKIAkJCXJldHVybiByYzsKIAkJaWYgKElTX0VSUihwZGV2PXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoInRwbV90aXMiLCAtMSwgTlVMTCwgMCkpKQogCQkJcmV0dXJuIFBUUl9FUlIocGRldik7CiAJCWlmKChyYz10cG1fdGlzX2luaXQoJnBkZXYtPmRldiwgVElTX01FTV9CQVNFLCBUSVNfTUVNX0xFTiwgMCkpICE9IDApIHsKIAkJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHBkZXYpOwotCQkJZHJpdmVyX3VucmVnaXN0ZXIoJnRpc19kcnYpOworCQkJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnRpc19kcnYpOwogCQl9CiAJCXJldHVybiByYzsKIAl9CkBAIC03MTEsNyArNzIxLDcgQEAKIAogCWlmIChmb3JjZSkgewogCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihwZGV2KTsKLQkJZHJpdmVyX3VucmVnaXN0ZXIoJnRpc19kcnYpOworCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdGlzX2Rydik7CiAJfSBlbHNlCiAJCXBucF91bnJlZ2lzdGVyX2RyaXZlcigmdGlzX3BucF9kcml2ZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3R0eV9pby5jIGIvZHJpdmVycy9jaGFyL3R0eV9pby5jCmluZGV4IGJjODRlMTIuLjIyNGYyNzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci90dHlfaW8uYworKysgYi9kcml2ZXJzL2NoYXIvdHR5X2lvLmMKQEAgLTIxNjIsMTMgKzIxNjIsMTIgQEAKIAlpZiAoZ2V0X3VzZXIobm9uYmxvY2ssIHApKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCS8qIGZpbGUtPmZfZmxhZ3MgaXMgc3RpbGwgQktMIHByb3RlY3RlZCBpbiB0aGUgZnMgbGF5ZXIgLSB2b21pdCAqLwotCWxvY2tfa2VybmVsKCk7CisJc3Bpbl9sb2NrKCZmaWxlLT5mX2xvY2spOwogCWlmIChub25ibG9jaykKIAkJZmlsZS0+Zl9mbGFncyB8PSBPX05PTkJMT0NLOwogCWVsc2UKIAkJZmlsZS0+Zl9mbGFncyAmPSB+T19OT05CTE9DSzsKLQl1bmxvY2tfa2VybmVsKCk7CisJc3Bpbl91bmxvY2soJmZpbGUtPmZfbG9jayk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci92Y19zY3JlZW4uYyBiL2RyaXZlcnMvY2hhci92Y19zY3JlZW4uYwppbmRleCA0ZjNiM2Y5Li5kOTRkMjVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdmNfc2NyZWVuLmMKKysrIGIvZHJpdmVycy9jaGFyL3ZjX3NjcmVlbi5jCkBAIC00NzksMTggKzQ3OSwxOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsYXNzICp2Y19jbGFzczsKIAotdm9pZCB2Y3NfbWFrZV9zeXNmcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQordm9pZCB2Y3NfbWFrZV9zeXNmcyhpbnQgaW5kZXgpCiB7Ci0JZGV2aWNlX2NyZWF0ZSh2Y19jbGFzcywgTlVMTCwgTUtERVYoVkNTX01BSk9SLCB0dHktPmluZGV4ICsgMSksIE5VTEwsCi0JCSAgICAgICJ2Y3MldSIsIHR0eS0+aW5kZXggKyAxKTsKLQlkZXZpY2VfY3JlYXRlKHZjX2NsYXNzLCBOVUxMLCBNS0RFVihWQ1NfTUFKT1IsIHR0eS0+aW5kZXggKyAxMjkpLCBOVUxMLAotCQkgICAgICAidmNzYSV1IiwgdHR5LT5pbmRleCArIDEpOworCWRldmljZV9jcmVhdGUodmNfY2xhc3MsIE5VTEwsIE1LREVWKFZDU19NQUpPUiwgaW5kZXggKyAxKSwgTlVMTCwKKwkJICAgICAgInZjcyV1IiwgaW5kZXggKyAxKTsKKwlkZXZpY2VfY3JlYXRlKHZjX2NsYXNzLCBOVUxMLCBNS0RFVihWQ1NfTUFKT1IsIGluZGV4ICsgMTI5KSwgTlVMTCwKKwkJICAgICAgInZjc2EldSIsIGluZGV4ICsgMSk7CiB9CiAKLXZvaWQgdmNzX3JlbW92ZV9zeXNmcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQordm9pZCB2Y3NfcmVtb3ZlX3N5c2ZzKGludCBpbmRleCkKIHsKLQlkZXZpY2VfZGVzdHJveSh2Y19jbGFzcywgTUtERVYoVkNTX01BSk9SLCB0dHktPmluZGV4ICsgMSkpOwotCWRldmljZV9kZXN0cm95KHZjX2NsYXNzLCBNS0RFVihWQ1NfTUFKT1IsIHR0eS0+aW5kZXggKyAxMjkpKTsKKwlkZXZpY2VfZGVzdHJveSh2Y19jbGFzcywgTUtERVYoVkNTX01BSk9SLCBpbmRleCArIDEpKTsKKwlkZXZpY2VfZGVzdHJveSh2Y19jbGFzcywgTUtERVYoVkNTX01BSk9SLCBpbmRleCArIDEyOSkpOwogfQogCiBpbnQgX19pbml0IHZjc19pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdnQuYyBiL2RyaXZlcnMvY2hhci92dC5jCmluZGV4IDc5MDBiZDYuLjJjMWQxMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci92dC5jCisrKyBiL2RyaXZlcnMvY2hhci92dC5jCkBAIC03NzgsNiArNzc4LDcgQEAKIAkgICAgfQogCSAgICB2Yy0+dmNfa21hbGxvY2VkID0gMTsKIAkgICAgdmNfaW5pdCh2YywgdmMtPnZjX3Jvd3MsIHZjLT52Y19jb2xzLCAxKTsKKwkgICAgdmNzX21ha2Vfc3lzZnMoY3VycmNvbnMpOwogCSAgICBhdG9taWNfbm90aWZpZXJfY2FsbF9jaGFpbigmdnRfbm90aWZpZXJfbGlzdCwgVlRfQUxMT0NBVEUsICZwYXJhbSk7CiAJfQogCXJldHVybiAwOwpAQCAtOTg3LDcgKzk4OCw5IEBACiAJaWYgKHZjX2NvbnNfYWxsb2NhdGVkKGN1cnJjb25zKSkgewogCQlzdHJ1Y3QgdmNfZGF0YSAqdmMgPSB2Y19jb25zW2N1cnJjb25zXS5kOwogCQlzdHJ1Y3QgdnRfbm90aWZpZXJfcGFyYW0gcGFyYW0gPSB7IC52YyA9IHZjIH07CisKIAkJYXRvbWljX25vdGlmaWVyX2NhbGxfY2hhaW4oJnZ0X25vdGlmaWVyX2xpc3QsIFZUX0RFQUxMT0NBVEUsICZwYXJhbSk7CisJCXZjc19yZW1vdmVfc3lzZnMoY3VycmNvbnMpOwogCQl2Yy0+dmNfc3ctPmNvbl9kZWluaXQodmMpOwogCQlwdXRfcGlkKHZjLT52dF9waWQpOwogCQltb2R1bGVfcHV0KHZjLT52Y19zdy0+b3duZXIpOwpAQCAtMjc3NSw3ICsyNzc4LDYgQEAKIAkJCQl0dHktPnRlcm1pb3MtPmNfaWZsYWcgfD0gSVVURjg7CiAJCQllbHNlCiAJCQkJdHR5LT50ZXJtaW9zLT5jX2lmbGFnICY9IH5JVVRGODsKLQkJCXZjc19tYWtlX3N5c2ZzKHR0eSk7CiAJCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CiAJCQlyZXR1cm4gcmV0OwogCQl9CkBAIC0yNzk1LDcgKzI3OTcsNiBAQAogCUJVR19PTih2YyA9PSBOVUxMKTsKIAlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CiAJdmMtPnZjX3R0eSA9IE5VTEw7Ci0JdmNzX3JlbW92ZV9zeXNmcyh0dHkpOwogCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKIAl0dHlfc2h1dGRvd24odHR5KTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xvY2tzb3VyY2UvTWFrZWZpbGUgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL01ha2VmaWxlCmluZGV4IDE1MjU4ODIuLjFlZmIyODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xvY2tzb3VyY2UvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9jbG9ja3NvdXJjZS9NYWtlZmlsZQpAQCAtMiwzICsyLDQgQEAKIG9iai0kKENPTkZJR19YODZfQ1lDTE9ORV9USU1FUikJKz0gY3ljbG9uZS5vCiBvYmotJChDT05GSUdfWDg2X1BNX1RJTUVSKQkrPSBhY3BpX3BtLm8KIG9iai0kKENPTkZJR19TQ3gyMDBIUl9USU1FUikJKz0gc2N4MjAwX2hydC5vCitvYmotJChDT05GSUdfU0hfVElNRVJfQ01UKQkrPSBzaF9jbXQubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbG9ja3NvdXJjZS9zaF9jbXQuYyBiL2RyaXZlcnMvY2xvY2tzb3VyY2Uvc2hfY210LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc4M2I0MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY2xvY2tzb3VyY2Uvc2hfY210LmMKQEAgLTAsMCArMSw2MTUgQEAKKy8qCisgKiBTdXBlckggVGltZXIgU3VwcG9ydCAtIENNVAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggTWFnbnVzIERhbW0KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9jbG9ja3NvdXJjZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsb2NrY2hpcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9zaF9jbXQuaD4KKworc3RydWN0IHNoX2NtdF9wcml2IHsKKwl2b2lkIF9faW9tZW0gKm1hcGJhc2U7CisJc3RydWN0IGNsayAqY2xrOworCXVuc2lnbmVkIGxvbmcgd2lkdGg7IC8qIDE2IG9yIDMyIGJpdCB2ZXJzaW9uIG9mIGhhcmR3YXJlIGJsb2NrICovCisJdW5zaWduZWQgbG9uZyBvdmVyZmxvd19iaXQ7CisJdW5zaWduZWQgbG9uZyBjbGVhcl9iaXRzOworCXN0cnVjdCBpcnFhY3Rpb24gaXJxYWN0aW9uOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgbWF0Y2hfdmFsdWU7CisJdW5zaWduZWQgbG9uZyBuZXh0X21hdGNoX3ZhbHVlOworCXVuc2lnbmVkIGxvbmcgbWF4X21hdGNoX3ZhbHVlOworCXVuc2lnbmVkIGxvbmcgcmF0ZTsKKwlzcGlubG9ja190IGxvY2s7CisJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSBjZWQ7CisJdW5zaWduZWQgbG9uZyB0b3RhbF9jeWNsZXM7Cit9OworCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHNoX2NtdF9sb2NrKTsKKworI2RlZmluZSBDTVNUUiAtMSAvKiBzaGFyZWQgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ01DU1IgMCAvKiBjaGFubmVsIHJlZ2lzdGVyICovCisjZGVmaW5lIENNQ05UIDEgLyogY2hhbm5lbCByZWdpc3RlciAqLworI2RlZmluZSBDTUNPUiAyIC8qIGNoYW5uZWwgcmVnaXN0ZXIgKi8KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHNoX2NtdF9yZWFkKHN0cnVjdCBzaF9jbXRfcHJpdiAqcCwgaW50IHJlZ19ucikKK3sKKwlzdHJ1Y3Qgc2hfY210X2NvbmZpZyAqY2ZnID0gcC0+cGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gcC0+bWFwYmFzZTsKKwl1bnNpZ25lZCBsb25nIG9mZnM7CisKKwlpZiAocmVnX25yID09IENNU1RSKSB7CisJCW9mZnMgPSAwOworCQliYXNlIC09IGNmZy0+Y2hhbm5lbF9vZmZzZXQ7CisJfSBlbHNlCisJCW9mZnMgPSByZWdfbnI7CisKKwlpZiAocC0+d2lkdGggPT0gMTYpCisJCW9mZnMgPDw9IDE7CisJZWxzZSB7CisJCW9mZnMgPDw9IDI7CisJCWlmICgocmVnX25yID09IENNQ05UKSB8fCAocmVnX25yID09IENNQ09SKSkKKwkJCXJldHVybiBpb3JlYWQzMihiYXNlICsgb2Zmcyk7CisJfQorCisJcmV0dXJuIGlvcmVhZDE2KGJhc2UgKyBvZmZzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNoX2NtdF93cml0ZShzdHJ1Y3Qgc2hfY210X3ByaXYgKnAsIGludCByZWdfbnIsCisJCQkJdW5zaWduZWQgbG9uZyB2YWx1ZSkKK3sKKwlzdHJ1Y3Qgc2hfY210X2NvbmZpZyAqY2ZnID0gcC0+cGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gcC0+bWFwYmFzZTsKKwl1bnNpZ25lZCBsb25nIG9mZnM7CisKKwlpZiAocmVnX25yID09IENNU1RSKSB7CisJCW9mZnMgPSAwOworCQliYXNlIC09IGNmZy0+Y2hhbm5lbF9vZmZzZXQ7CisJfSBlbHNlCisJCW9mZnMgPSByZWdfbnI7CisKKwlpZiAocC0+d2lkdGggPT0gMTYpCisJCW9mZnMgPDw9IDE7CisJZWxzZSB7CisJCW9mZnMgPDw9IDI7CisJCWlmICgocmVnX25yID09IENNQ05UKSB8fCAocmVnX25yID09IENNQ09SKSkgeworCQkJaW93cml0ZTMyKHZhbHVlLCBiYXNlICsgb2Zmcyk7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwlpb3dyaXRlMTYodmFsdWUsIGJhc2UgKyBvZmZzKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgc2hfY210X2dldF9jb3VudGVyKHN0cnVjdCBzaF9jbXRfcHJpdiAqcCwKKwkJCQkJaW50ICpoYXNfd3JhcHBlZCkKK3sKKwl1bnNpZ25lZCBsb25nIHYxLCB2MiwgdjM7CisKKwkvKiBNYWtlIHN1cmUgdGhlIHRpbWVyIHZhbHVlIGlzIHN0YWJsZS4gU3RvbGVuIGZyb20gYWNwaV9wbS5jICovCisJZG8geworCQl2MSA9IHNoX2NtdF9yZWFkKHAsIENNQ05UKTsKKwkJdjIgPSBzaF9jbXRfcmVhZChwLCBDTUNOVCk7CisJCXYzID0gc2hfY210X3JlYWQocCwgQ01DTlQpOworCX0gd2hpbGUgKHVubGlrZWx5KCh2MSA+IHYyICYmIHYxIDwgdjMpIHx8ICh2MiA+IHYzICYmIHYyIDwgdjEpCisJCQkgIHx8ICh2MyA+IHYxICYmIHYzIDwgdjIpKSk7CisKKwkqaGFzX3dyYXBwZWQgPSBzaF9jbXRfcmVhZChwLCBDTUNTUikgJiBwLT5vdmVyZmxvd19iaXQ7CisJcmV0dXJuIHYyOworfQorCisKK3N0YXRpYyB2b2lkIHNoX2NtdF9zdGFydF9zdG9wX2NoKHN0cnVjdCBzaF9jbXRfcHJpdiAqcCwgaW50IHN0YXJ0KQoreworCXN0cnVjdCBzaF9jbXRfY29uZmlnICpjZmcgPSBwLT5wZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzLCB2YWx1ZTsKKworCS8qIHN0YXJ0IHN0b3AgcmVnaXN0ZXIgc2hhcmVkIGJ5IG11bHRpcGxlIHRpbWVyIGNoYW5uZWxzICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNoX2NtdF9sb2NrLCBmbGFncyk7CisJdmFsdWUgPSBzaF9jbXRfcmVhZChwLCBDTVNUUik7CisKKwlpZiAoc3RhcnQpCisJCXZhbHVlIHw9IDEgPDwgY2ZnLT50aW1lcl9iaXQ7CisJZWxzZQorCQl2YWx1ZSAmPSB+KDEgPDwgY2ZnLT50aW1lcl9iaXQpOworCisJc2hfY210X3dyaXRlKHAsIENNU1RSLCB2YWx1ZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2hfY210X2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGludCBzaF9jbXRfZW5hYmxlKHN0cnVjdCBzaF9jbXRfcHJpdiAqcCwgdW5zaWduZWQgbG9uZyAqcmF0ZSkKK3sKKwlzdHJ1Y3Qgc2hfY210X2NvbmZpZyAqY2ZnID0gcC0+cGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJaW50IHJldDsKKworCS8qIGVuYWJsZSBjbG9jayAqLworCXJldCA9IGNsa19lbmFibGUocC0+Y2xrKTsKKwlpZiAocmV0KSB7CisJCXByX2Vycigic2hfY210OiBjYW5ub3QgZW5hYmxlIGNsb2NrIFwiJXNcIlxuIiwgY2ZnLT5jbGspOworCQlyZXR1cm4gcmV0OworCX0KKwkqcmF0ZSA9IGNsa19nZXRfcmF0ZShwLT5jbGspIC8gODsKKworCS8qIG1ha2Ugc3VyZSBjaGFubmVsIGlzIGRpc2FibGVkICovCisJc2hfY210X3N0YXJ0X3N0b3BfY2gocCwgMCk7CisKKwkvKiBjb25maWd1cmUgY2hhbm5lbCwgcGVyaW9kaWMgbW9kZSBhbmQgbWF4aW11bSB0aW1lb3V0ICovCisJaWYgKHAtPndpZHRoID09IDE2KQorCQlzaF9jbXRfd3JpdGUocCwgQ01DU1IsIDApOworCWVsc2UKKwkJc2hfY210X3dyaXRlKHAsIENNQ1NSLCAweDAxYTQpOworCisJc2hfY210X3dyaXRlKHAsIENNQ09SLCAweGZmZmZmZmZmKTsKKwlzaF9jbXRfd3JpdGUocCwgQ01DTlQsIDApOworCisJLyogZW5hYmxlIGNoYW5uZWwgKi8KKwlzaF9jbXRfc3RhcnRfc3RvcF9jaChwLCAxKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2hfY210X2Rpc2FibGUoc3RydWN0IHNoX2NtdF9wcml2ICpwKQoreworCS8qIGRpc2FibGUgY2hhbm5lbCAqLworCXNoX2NtdF9zdGFydF9zdG9wX2NoKHAsIDApOworCisJLyogc3RvcCBjbG9jayAqLworCWNsa19kaXNhYmxlKHAtPmNsayk7Cit9CisKKy8qIHByaXZhdGUgZmxhZ3MgKi8KKyNkZWZpbmUgRkxBR19DTE9DS0VWRU5UICgxIDw8IDApCisjZGVmaW5lIEZMQUdfQ0xPQ0tTT1VSQ0UgKDEgPDwgMSkKKyNkZWZpbmUgRkxBR19SRVBST0dSQU0gKDEgPDwgMikKKyNkZWZpbmUgRkxBR19TS0lQRVZFTlQgKDEgPDwgMykKKyNkZWZpbmUgRkxBR19JUlFDT05URVhUICgxIDw8IDQpCisKK3N0YXRpYyB2b2lkIHNoX2NtdF9jbG9ja19ldmVudF9wcm9ncmFtX3ZlcmlmeShzdHJ1Y3Qgc2hfY210X3ByaXYgKnAsCisJCQkJCSAgICAgIGludCBhYnNvbHV0ZSkKK3sKKwl1bnNpZ25lZCBsb25nIG5ld19tYXRjaDsKKwl1bnNpZ25lZCBsb25nIHZhbHVlID0gcC0+bmV4dF9tYXRjaF92YWx1ZTsKKwl1bnNpZ25lZCBsb25nIGRlbGF5ID0gMDsKKwl1bnNpZ25lZCBsb25nIG5vdyA9IDA7CisJaW50IGhhc193cmFwcGVkOworCisJbm93ID0gc2hfY210X2dldF9jb3VudGVyKHAsICZoYXNfd3JhcHBlZCk7CisJcC0+ZmxhZ3MgfD0gRkxBR19SRVBST0dSQU07IC8qIGZvcmNlIHJlcHJvZ3JhbSAqLworCisJaWYgKGhhc193cmFwcGVkKSB7CisJCS8qIHdlJ3JlIGNvbXBldGluZyB3aXRoIHRoZSBpbnRlcnJ1cHQgaGFuZGxlci4KKwkJICogIC0+IGxldCB0aGUgaW50ZXJydXB0IGhhbmRsZXIgcmVwcm9ncmFtIHRoZSB0aW1lci4KKwkJICogIC0+IGludGVycnVwdCBudW1iZXIgdHdvIGhhbmRsZXMgdGhlIGV2ZW50LgorCQkgKi8KKwkJcC0+ZmxhZ3MgfD0gRkxBR19TS0lQRVZFTlQ7CisJCXJldHVybjsKKwl9CisKKwlpZiAoYWJzb2x1dGUpCisJCW5vdyA9IDA7CisKKwlkbyB7CisJCS8qIHJlcHJvZ3JhbSB0aGUgdGltZXIgaGFyZHdhcmUsCisJCSAqIGJ1dCBkb24ndCBzYXZlIHRoZSBuZXcgbWF0Y2ggdmFsdWUgeWV0LgorCQkgKi8KKwkJbmV3X21hdGNoID0gbm93ICsgdmFsdWUgKyBkZWxheTsKKwkJaWYgKG5ld19tYXRjaCA+IHAtPm1heF9tYXRjaF92YWx1ZSkKKwkJCW5ld19tYXRjaCA9IHAtPm1heF9tYXRjaF92YWx1ZTsKKworCQlzaF9jbXRfd3JpdGUocCwgQ01DT1IsIG5ld19tYXRjaCk7CisKKwkJbm93ID0gc2hfY210X2dldF9jb3VudGVyKHAsICZoYXNfd3JhcHBlZCk7CisJCWlmIChoYXNfd3JhcHBlZCAmJiAobmV3X21hdGNoID4gcC0+bWF0Y2hfdmFsdWUpKSB7CisJCQkvKiB3ZSBhcmUgY2hhbmdpbmcgdG8gYSBncmVhdGVyIG1hdGNoIHZhbHVlLAorCQkJICogc28gdGhpcyB3cmFwIG11c3QgYmUgY2F1c2VkIGJ5IHRoZSBjb3VudGVyCisJCQkgKiBtYXRjaGluZyB0aGUgb2xkIHZhbHVlLgorCQkJICogLT4gZmlyc3QgaW50ZXJydXB0IHJlcHJvZ3JhbXMgdGhlIHRpbWVyLgorCQkJICogLT4gaW50ZXJydXB0IG51bWJlciB0d28gaGFuZGxlcyB0aGUgZXZlbnQuCisJCQkgKi8KKwkJCXAtPmZsYWdzIHw9IEZMQUdfU0tJUEVWRU5UOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoaGFzX3dyYXBwZWQpIHsKKwkJCS8qIHdlIGFyZSBjaGFuZ2luZyB0byBhIHNtYWxsZXIgbWF0Y2ggdmFsdWUsCisJCQkgKiBzbyB0aGUgd3JhcCBtdXN0IGJlIGNhdXNlZCBieSB0aGUgY291bnRlcgorCQkJICogbWF0Y2hpbmcgdGhlIG5ldyB2YWx1ZS4KKwkJCSAqIC0+IHNhdmUgcHJvZ3JhbW1lZCBtYXRjaCB2YWx1ZS4KKwkJCSAqIC0+IGxldCBpc3IgaGFuZGxlIHRoZSBldmVudC4KKwkJCSAqLworCQkJcC0+bWF0Y2hfdmFsdWUgPSBuZXdfbWF0Y2g7CisJCQlicmVhazsKKwkJfQorCisJCS8qIGJlIHNhZmU6IHZlcmlmeSBoYXJkd2FyZSBzZXR0aW5ncyAqLworCQlpZiAobm93IDwgbmV3X21hdGNoKSB7CisJCQkvKiB0aW1lciB2YWx1ZSBpcyBiZWxvdyBtYXRjaCB2YWx1ZSwgYWxsIGdvb2QuCisJCQkgKiB0aGlzIG1ha2VzIHN1cmUgd2Ugd29uJ3QgbWlzcyBhbnkgbWF0Y2ggZXZlbnRzLgorCQkJICogLT4gc2F2ZSBwcm9ncmFtbWVkIG1hdGNoIHZhbHVlLgorCQkJICogLT4gbGV0IGlzciBoYW5kbGUgdGhlIGV2ZW50LgorCQkJICovCisJCQlwLT5tYXRjaF92YWx1ZSA9IG5ld19tYXRjaDsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogdGhlIGNvdW50ZXIgaGFzIHJlYWNoZWQgYSB2YWx1ZSBncmVhdGVyCisJCSAqIHRoYW4gb3VyIG5ldyBtYXRjaCB2YWx1ZS4gYW5kIHNpbmNlIHRoZQorCQkgKiBoYXNfd3JhcHBlZCBmbGFnIGlzbid0IHNldCB3ZSBtdXN0IGhhdmUKKwkJICogcHJvZ3JhbW1lZCBhIHRvbyBjbG9zZSBldmVudC4KKwkJICogLT4gaW5jcmVhc2UgZGVsYXkgYW5kIHJldHJ5LgorCQkgKi8KKwkJaWYgKGRlbGF5KQorCQkJZGVsYXkgPDw9IDE7CisJCWVsc2UKKwkJCWRlbGF5ID0gMTsKKworCQlpZiAoIWRlbGF5KQorCQkJcHJfd2FybmluZygic2hfY210OiB0b28gbG9uZyBkZWxheVxuIik7CisKKwl9IHdoaWxlIChkZWxheSk7Cit9CisKK3N0YXRpYyB2b2lkIHNoX2NtdF9zZXRfbmV4dChzdHJ1Y3Qgc2hfY210X3ByaXYgKnAsIHVuc2lnbmVkIGxvbmcgZGVsdGEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChkZWx0YSA+IHAtPm1heF9tYXRjaF92YWx1ZSkKKwkJcHJfd2FybmluZygic2hfY210OiBkZWx0YSBvdXQgb2YgcmFuZ2VcbiIpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnAtPmxvY2ssIGZsYWdzKTsKKwlwLT5uZXh0X21hdGNoX3ZhbHVlID0gZGVsdGE7CisJc2hfY210X2Nsb2NrX2V2ZW50X3Byb2dyYW1fdmVyaWZ5KHAsIDApOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnAtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGlycXJldHVybl90IHNoX2NtdF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBzaF9jbXRfcHJpdiAqcCA9IGRldl9pZDsKKworCS8qIGNsZWFyIGZsYWdzICovCisJc2hfY210X3dyaXRlKHAsIENNQ1NSLCBzaF9jbXRfcmVhZChwLCBDTUNTUikgJiBwLT5jbGVhcl9iaXRzKTsKKworCS8qIHVwZGF0ZSBjbG9jayBzb3VyY2UgY291bnRlciB0byBiZWdpbiB3aXRoIGlmIGVuYWJsZWQKKwkgKiB0aGUgd3JhcCBmbGFnIHNob3VsZCBiZSBjbGVhcmVkIGJ5IHRoZSB0aW1lciBzcGVjaWZpYworCSAqIGlzciBiZWZvcmUgd2UgZW5kIHVwIGhlcmUuCisJICovCisJaWYgKHAtPmZsYWdzICYgRkxBR19DTE9DS1NPVVJDRSkKKwkJcC0+dG90YWxfY3ljbGVzICs9IHAtPm1hdGNoX3ZhbHVlOworCisJaWYgKCEocC0+ZmxhZ3MgJiBGTEFHX1JFUFJPR1JBTSkpCisJCXAtPm5leHRfbWF0Y2hfdmFsdWUgPSBwLT5tYXhfbWF0Y2hfdmFsdWU7CisKKwlwLT5mbGFncyB8PSBGTEFHX0lSUUNPTlRFWFQ7CisKKwlpZiAocC0+ZmxhZ3MgJiBGTEFHX0NMT0NLRVZFTlQpIHsKKwkJaWYgKCEocC0+ZmxhZ3MgJiBGTEFHX1NLSVBFVkVOVCkpIHsKKwkJCWlmIChwLT5jZWQubW9kZSA9PSBDTE9DS19FVlRfTU9ERV9PTkVTSE9UKSB7CisJCQkJcC0+bmV4dF9tYXRjaF92YWx1ZSA9IHAtPm1heF9tYXRjaF92YWx1ZTsKKwkJCQlwLT5mbGFncyB8PSBGTEFHX1JFUFJPR1JBTTsKKwkJCX0KKworCQkJcC0+Y2VkLmV2ZW50X2hhbmRsZXIoJnAtPmNlZCk7CisJCX0KKwl9CisKKwlwLT5mbGFncyAmPSB+RkxBR19TS0lQRVZFTlQ7CisKKwlpZiAocC0+ZmxhZ3MgJiBGTEFHX1JFUFJPR1JBTSkgeworCQlwLT5mbGFncyAmPSB+RkxBR19SRVBST0dSQU07CisJCXNoX2NtdF9jbG9ja19ldmVudF9wcm9ncmFtX3ZlcmlmeShwLCAxKTsKKworCQlpZiAocC0+ZmxhZ3MgJiBGTEFHX0NMT0NLRVZFTlQpCisJCQlpZiAoKHAtPmNlZC5tb2RlID09IENMT0NLX0VWVF9NT0RFX1NIVVRET1dOKQorCQkJICAgIHx8IChwLT5tYXRjaF92YWx1ZSA9PSBwLT5uZXh0X21hdGNoX3ZhbHVlKSkKKwkJCQlwLT5mbGFncyAmPSB+RkxBR19SRVBST0dSQU07CisJfQorCisJcC0+ZmxhZ3MgJj0gfkZMQUdfSVJRQ09OVEVYVDsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCBzaF9jbXRfc3RhcnQoc3RydWN0IHNoX2NtdF9wcml2ICpwLCB1bnNpZ25lZCBsb25nIGZsYWcpCit7CisJaW50IHJldCA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwLT5sb2NrLCBmbGFncyk7CisKKwlpZiAoIShwLT5mbGFncyAmIChGTEFHX0NMT0NLRVZFTlQgfCBGTEFHX0NMT0NLU09VUkNFKSkpCisJCXJldCA9IHNoX2NtdF9lbmFibGUocCwgJnAtPnJhdGUpOworCisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisJcC0+ZmxhZ3MgfD0gZmxhZzsKKworCS8qIHNldHVwIHRpbWVvdXQgaWYgbm8gY2xvY2tldmVudCAqLworCWlmICgoZmxhZyA9PSBGTEFHX0NMT0NLU09VUkNFKSAmJiAoIShwLT5mbGFncyAmIEZMQUdfQ0xPQ0tFVkVOVCkpKQorCQlzaF9jbXRfc2V0X25leHQocCwgcC0+bWF4X21hdGNoX3ZhbHVlKTsKKyBvdXQ6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcC0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgc2hfY210X3N0b3Aoc3RydWN0IHNoX2NtdF9wcml2ICpwLCB1bnNpZ25lZCBsb25nIGZsYWcpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBsb25nIGY7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcC0+bG9jaywgZmxhZ3MpOworCisJZiA9IHAtPmZsYWdzICYgKEZMQUdfQ0xPQ0tFVkVOVCB8IEZMQUdfQ0xPQ0tTT1VSQ0UpOworCXAtPmZsYWdzICY9IH5mbGFnOworCisJaWYgKGYgJiYgIShwLT5mbGFncyAmIChGTEFHX0NMT0NLRVZFTlQgfCBGTEFHX0NMT0NLU09VUkNFKSkpCisJCXNoX2NtdF9kaXNhYmxlKHApOworCisJLyogYWRqdXN0IHRoZSB0aW1lb3V0IHRvIG1heGltdW0gaWYgb25seSBjbG9ja3NvdXJjZSBsZWZ0ICovCisJaWYgKChmbGFnID09IEZMQUdfQ0xPQ0tFVkVOVCkgJiYgKHAtPmZsYWdzICYgRkxBR19DTE9DS1NPVVJDRSkpCisJCXNoX2NtdF9zZXRfbmV4dChwLCBwLT5tYXhfbWF0Y2hfdmFsdWUpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcC0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgc3RydWN0IHNoX2NtdF9wcml2ICpjZWRfdG9fc2hfY210KHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmNlZCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGNlZCwgc3RydWN0IHNoX2NtdF9wcml2LCBjZWQpOworfQorCitzdGF0aWMgdm9pZCBzaF9jbXRfY2xvY2tfZXZlbnRfc3RhcnQoc3RydWN0IHNoX2NtdF9wcml2ICpwLCBpbnQgcGVyaW9kaWMpCit7CisJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqY2VkID0gJnAtPmNlZDsKKworCXNoX2NtdF9zdGFydChwLCBGTEFHX0NMT0NLRVZFTlQpOworCisJLyogVE9ETzogY2FsY3VsYXRlIGdvb2Qgc2hpZnQgZnJvbSByYXRlIGFuZCBjb3VudGVyIGJpdCB3aWR0aCAqLworCisJY2VkLT5zaGlmdCA9IDMyOworCWNlZC0+bXVsdCA9IGRpdl9zYyhwLT5yYXRlLCBOU0VDX1BFUl9TRUMsIGNlZC0+c2hpZnQpOworCWNlZC0+bWF4X2RlbHRhX25zID0gY2xvY2tldmVudF9kZWx0YTJucyhwLT5tYXhfbWF0Y2hfdmFsdWUsIGNlZCk7CisJY2VkLT5taW5fZGVsdGFfbnMgPSBjbG9ja2V2ZW50X2RlbHRhMm5zKDB4MWYsIGNlZCk7CisKKwlpZiAocGVyaW9kaWMpCisJCXNoX2NtdF9zZXRfbmV4dChwLCAocC0+cmF0ZSArIEhaLzIpIC8gSFopOworCWVsc2UKKwkJc2hfY210X3NldF9uZXh0KHAsIHAtPm1heF9tYXRjaF92YWx1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHNoX2NtdF9jbG9ja19ldmVudF9tb2RlKGVudW0gY2xvY2tfZXZlbnRfbW9kZSBtb2RlLAorCQkJCSAgICBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpjZWQpCit7CisJc3RydWN0IHNoX2NtdF9wcml2ICpwID0gY2VkX3RvX3NoX2NtdChjZWQpOworCisJLyogZGVhbCB3aXRoIG9sZCBzZXR0aW5nIGZpcnN0ICovCisJc3dpdGNoIChjZWQtPm1vZGUpIHsKKwljYXNlIENMT0NLX0VWVF9NT0RFX1BFUklPRElDOgorCWNhc2UgQ0xPQ0tfRVZUX01PREVfT05FU0hPVDoKKwkJc2hfY210X3N0b3AocCwgRkxBR19DTE9DS0VWRU5UKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSBDTE9DS19FVlRfTU9ERV9QRVJJT0RJQzoKKwkJcHJfaW5mbygic2hfY210OiAlcyB1c2VkIGZvciBwZXJpb2RpYyBjbG9jayBldmVudHNcbiIsCisJCQljZWQtPm5hbWUpOworCQlzaF9jbXRfY2xvY2tfZXZlbnRfc3RhcnQocCwgMSk7CisJCWJyZWFrOworCWNhc2UgQ0xPQ0tfRVZUX01PREVfT05FU0hPVDoKKwkJcHJfaW5mbygic2hfY210OiAlcyB1c2VkIGZvciBvbmVzaG90IGNsb2NrIGV2ZW50c1xuIiwKKwkJCWNlZC0+bmFtZSk7CisJCXNoX2NtdF9jbG9ja19ldmVudF9zdGFydChwLCAwKTsKKwkJYnJlYWs7CisJY2FzZSBDTE9DS19FVlRfTU9ERV9TSFVURE9XTjoKKwljYXNlIENMT0NLX0VWVF9NT0RFX1VOVVNFRDoKKwkJc2hfY210X3N0b3AocCwgRkxBR19DTE9DS0VWRU5UKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW50IHNoX2NtdF9jbG9ja19ldmVudF9uZXh0KHVuc2lnbmVkIGxvbmcgZGVsdGEsCisJCQkJICAgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqY2VkKQoreworCXN0cnVjdCBzaF9jbXRfcHJpdiAqcCA9IGNlZF90b19zaF9jbXQoY2VkKTsKKworCUJVR19PTihjZWQtPm1vZGUgIT0gQ0xPQ0tfRVZUX01PREVfT05FU0hPVCk7CisJaWYgKGxpa2VseShwLT5mbGFncyAmIEZMQUdfSVJRQ09OVEVYVCkpCisJCXAtPm5leHRfbWF0Y2hfdmFsdWUgPSBkZWx0YTsKKwllbHNlCisJCXNoX2NtdF9zZXRfbmV4dChwLCBkZWx0YSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2hfY210X3JlZ2lzdGVyX2Nsb2NrZXZlbnQoc3RydWN0IHNoX2NtdF9wcml2ICpwLAorCQkJCSAgICAgICBjaGFyICpuYW1lLCB1bnNpZ25lZCBsb25nIHJhdGluZykKK3sKKwlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpjZWQgPSAmcC0+Y2VkOworCisJbWVtc2V0KGNlZCwgMCwgc2l6ZW9mKCpjZWQpKTsKKworCWNlZC0+bmFtZSA9IG5hbWU7CisJY2VkLT5mZWF0dXJlcyA9IENMT0NLX0VWVF9GRUFUX1BFUklPRElDOworCWNlZC0+ZmVhdHVyZXMgfD0gQ0xPQ0tfRVZUX0ZFQVRfT05FU0hPVDsKKwljZWQtPnJhdGluZyA9IHJhdGluZzsKKwljZWQtPmNwdW1hc2sgPSBjcHVtYXNrX29mKDApOworCWNlZC0+c2V0X25leHRfZXZlbnQgPSBzaF9jbXRfY2xvY2tfZXZlbnRfbmV4dDsKKwljZWQtPnNldF9tb2RlID0gc2hfY210X2Nsb2NrX2V2ZW50X21vZGU7CisKKwlwcl9pbmZvKCJzaF9jbXQ6ICVzIHVzZWQgZm9yIGNsb2NrIGV2ZW50c1xuIiwgY2VkLT5uYW1lKTsKKwljZWQtPm11bHQgPSAxOyAvKiB3b3JrIGFyb3VuZCBtaXNwbGFjZWQgV0FSTl9PTigpIGluIGNsb2NrZXZlbnRzLmMgKi8KKwljbG9ja2V2ZW50c19yZWdpc3Rlcl9kZXZpY2UoY2VkKTsKK30KKworaW50IHNoX2NtdF9yZWdpc3RlcihzdHJ1Y3Qgc2hfY210X3ByaXYgKnAsIGNoYXIgKm5hbWUsCisJCSAgICB1bnNpZ25lZCBsb25nIGNsb2NrZXZlbnRfcmF0aW5nLAorCQkgICAgdW5zaWduZWQgbG9uZyBjbG9ja3NvdXJjZV9yYXRpbmcpCit7CisJaWYgKHAtPndpZHRoID09IChzaXplb2YocC0+bWF4X21hdGNoX3ZhbHVlKSAqIDgpKQorCQlwLT5tYXhfbWF0Y2hfdmFsdWUgPSB+MDsKKwllbHNlCisJCXAtPm1heF9tYXRjaF92YWx1ZSA9ICgxIDw8IHAtPndpZHRoKSAtIDE7CisKKwlwLT5tYXRjaF92YWx1ZSA9IHAtPm1heF9tYXRjaF92YWx1ZTsKKwlzcGluX2xvY2tfaW5pdCgmcC0+bG9jayk7CisKKwlpZiAoY2xvY2tldmVudF9yYXRpbmcpCisJCXNoX2NtdF9yZWdpc3Rlcl9jbG9ja2V2ZW50KHAsIG5hbWUsIGNsb2NrZXZlbnRfcmF0aW5nKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNoX2NtdF9zZXR1cChzdHJ1Y3Qgc2hfY210X3ByaXYgKnAsIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNoX2NtdF9jb25maWcgKmNmZyA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWludCBpcnEsIHJldDsKKwlyZXQgPSAtRU5YSU87CisKKwltZW1zZXQocCwgMCwgc2l6ZW9mKCpwKSk7CisJcC0+cGRldiA9IHBkZXY7CisKKwlpZiAoIWNmZykgeworCQlkZXZfZXJyKCZwLT5wZGV2LT5kZXYsICJtaXNzaW5nIHBsYXRmb3JtIGRhdGFcbiIpOworCQlnb3RvIGVycjA7CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcCk7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocC0+cGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcmVzKSB7CisJCWRldl9lcnIoJnAtPnBkZXYtPmRldiwgImZhaWxlZCB0byBnZXQgSS9PIG1lbW9yeVxuIik7CisJCWdvdG8gZXJyMDsKKwl9CisKKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHAtPnBkZXYsIDApOworCWlmIChpcnEgPCAwKSB7CisJCWRldl9lcnIoJnAtPnBkZXYtPmRldiwgImZhaWxlZCB0byBnZXQgaXJxXG4iKTsKKwkJZ290byBlcnIwOworCX0KKworCS8qIG1hcCBtZW1vcnksIGxldCBtYXBiYXNlIHBvaW50IHRvIG91ciBjaGFubmVsICovCisJcC0+bWFwYmFzZSA9IGlvcmVtYXBfbm9jYWNoZShyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCWlmIChwLT5tYXBiYXNlID09IE5VTEwpIHsKKwkJcHJfZXJyKCJzaF9jbXQ6IGZhaWxlZCB0byByZW1hcCBJL08gbWVtb3J5XG4iKTsKKwkJZ290byBlcnIwOworCX0KKworCS8qIHJlcXVlc3QgaXJxIHVzaW5nIHNldHVwX2lycSgpICh0b28gZWFybHkgZm9yIHJlcXVlc3RfaXJxKCkpICovCisJcC0+aXJxYWN0aW9uLm5hbWUgPSBjZmctPm5hbWU7CisJcC0+aXJxYWN0aW9uLmhhbmRsZXIgPSBzaF9jbXRfaW50ZXJydXB0OworCXAtPmlycWFjdGlvbi5kZXZfaWQgPSBwOworCXAtPmlycWFjdGlvbi5mbGFncyA9IElSUUZfRElTQUJMRUQgfCBJUlFGX1RJTUVSIHwgSVJRRl9JUlFQT0xMOworCXAtPmlycWFjdGlvbi5tYXNrID0gQ1BVX01BU0tfTk9ORTsKKwlyZXQgPSBzZXR1cF9pcnEoaXJxLCAmcC0+aXJxYWN0aW9uKTsKKwlpZiAocmV0KSB7CisJCXByX2Vycigic2hfY210OiBmYWlsZWQgdG8gcmVxdWVzdCBpcnEgJWRcbiIsIGlycSk7CisJCWdvdG8gZXJyMTsKKwl9CisKKwkvKiBnZXQgaG9sZCBvZiBjbG9jayAqLworCXAtPmNsayA9IGNsa19nZXQoJnAtPnBkZXYtPmRldiwgY2ZnLT5jbGspOworCWlmIChJU19FUlIocC0+Y2xrKSkgeworCQlwcl9lcnIoInNoX2NtdDogY2Fubm90IGdldCBjbG9jayBcIiVzXCJcbiIsIGNmZy0+Y2xrKTsKKwkJcmV0ID0gUFRSX0VSUihwLT5jbGspOworCQlnb3RvIGVycjI7CisJfQorCisJaWYgKHJlc291cmNlX3NpemUocmVzKSA9PSA2KSB7CisJCXAtPndpZHRoID0gMTY7CisJCXAtPm92ZXJmbG93X2JpdCA9IDB4ODA7CisJCXAtPmNsZWFyX2JpdHMgPSB+MHhjMDsKKwl9IGVsc2UgeworCQlwLT53aWR0aCA9IDMyOworCQlwLT5vdmVyZmxvd19iaXQgPSAweDgwMDA7CisJCXAtPmNsZWFyX2JpdHMgPSB+MHhjMDAwOworCX0KKworCXJldHVybiBzaF9jbXRfcmVnaXN0ZXIocCwgY2ZnLT5uYW1lLAorCQkJICAgICAgIGNmZy0+Y2xvY2tldmVudF9yYXRpbmcsCisJCQkgICAgICAgY2ZnLT5jbG9ja3NvdXJjZV9yYXRpbmcpOworIGVycjI6CisJZnJlZV9pcnEoaXJxLCBwKTsKKyBlcnIxOgorCWlvdW5tYXAocC0+bWFwYmFzZSk7CisgZXJyMDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzaF9jbXRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc2hfY210X3ByaXYgKnAgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlpbnQgcmV0OworCisJcCA9IGttYWxsb2Moc2l6ZW9mKCpwKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHAgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gYWxsb2NhdGUgZHJpdmVyIGRhdGFcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlyZXQgPSBzaF9jbXRfc2V0dXAocCwgcGRldik7CisJaWYgKHJldCkgeworCQlrZnJlZShwKTsKKworCQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgc2hfY210X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXJldHVybiAtRUJVU1k7IC8qIGNhbm5vdCB1bnJlZ2lzdGVyIGNsb2NrZXZlbnQgYW5kIGNsb2Nrc291cmNlICovCit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNoX2NtdF9kZXZpY2VfZHJpdmVyID0geworCS5wcm9iZQkJPSBzaF9jbXRfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChzaF9jbXRfcmVtb3ZlKSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAic2hfY210IiwKKwl9Cit9OworCitzdGF0aWMgaW50IF9faW5pdCBzaF9jbXRfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnNoX2NtdF9kZXZpY2VfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHNoX2NtdF9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNoX2NtdF9kZXZpY2VfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoc2hfY210X2luaXQpOworbW9kdWxlX2V4aXQoc2hfY210X2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJNYWdudXMgRGFtbSIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTdXBlckggQ01UIFRpbWVyIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jb25uZWN0b3IvY25fcXVldWUuYyBiL2RyaXZlcnMvY29ubmVjdG9yL2NuX3F1ZXVlLmMKaW5kZXggYjZmZTdlNy4uYzc2OWVmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jb25uZWN0b3IvY25fcXVldWUuYworKysgYi9kcml2ZXJzL2Nvbm5lY3Rvci9jbl9xdWV1ZS5jCkBAIC0xLDkgKzEsOSBAQAogLyoKICAqIAljbl9xdWV1ZS5jCi0gKiAKKyAqCiAgKiAyMDA0LTIwMDUgQ29weXJpZ2h0IChjKSBFdmdlbml5IFBvbHlha292IDxqb2hucG9sQDJrYS5taXB0LnJ1PgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAorICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKQEAgLTMxLDYgKzMxLDQ4IEBACiAjaW5jbHVkZSA8bGludXgvY29ubmVjdG9yLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KIAorCisvKgorICogVGhpcyBqb2IgaXMgc2VudCB0byB0aGUga2V2ZW50IHdvcmtxdWV1ZS4KKyAqIFdoaWxlIG5vIGV2ZW50IGlzIG9uY2Ugc2VudCB0byBhbnkgY2FsbGJhY2ssIHRoZSBjb25uZWN0b3Igd29ya3F1ZXVlCisgKiBpcyBub3QgY3JlYXRlZCB0byBhdm9pZCBhIHVzZWxlc3Mgd2FpdGluZyBrZXJuZWwgdGFzay4KKyAqIE9uY2UgdGhlIGZpcnN0IGV2ZW50IGlzIHJlY2VpdmVkLCB3ZSBjcmVhdGUgdGhpcyBkZWRpY2F0ZWQgd29ya3F1ZXVlIHdoaWNoCisgKiBpcyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgZmxvdyBvZiBkYXRhIGNhbiBiZSBoaWdoIGFuZCB3ZSBkb24ndCB3YW50CisgKiB0byBlbmN1bWJlciBrZXZlbnRkIHdpdGggdGhhdC4KKyAqLworc3RhdGljIHZvaWQgY25fcXVldWVfY3JlYXRlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgY25fcXVldWVfZGV2ICpkZXY7CisKKwlkZXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGNuX3F1ZXVlX2Rldiwgd3FfY3JlYXRpb24pOworCisJZGV2LT5jbl9xdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKGRldi0+bmFtZSk7CisJLyogSWYgd2UgZmFpbCwgd2Ugd2lsbCB1c2Uga2V2ZW50ZCBmb3IgYWxsIGZvbGxvd2luZyBjb25uZWN0b3Igam9icyAqLworCVdBUk5fT04oIWRldi0+Y25fcXVldWUpOworfQorCisvKgorICogUXVldWUgYSBkYXRhIHNlbnQgdG8gYSBjYWxsYmFjay4KKyAqIElmIHRoZSBjb25uZWN0b3Igd29ya3F1ZXVlIGlzIGFscmVhZHkgY3JlYXRlZCwgd2UgcXVldWUgdGhlIGpvYiBvbiBpdC4KKyAqIE90aGVyd2lzZSwgd2UgcXVldWUgdGhlIGpvYiB0byBrZXZlbnQgYW5kIHF1ZXVlIHRoZSBjb25uZWN0b3Igd29ya3F1ZXVlCisgKiBjcmVhdGlvbiB0b28uCisgKi8KK2ludCBxdWV1ZV9jbl93b3JrKHN0cnVjdCBjbl9jYWxsYmFja19lbnRyeSAqY2JxLCBzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGNuX3F1ZXVlX2RldiAqcGRldiA9IGNicS0+cGRldjsKKworCWlmIChsaWtlbHkocGRldi0+Y25fcXVldWUpKQorCQlyZXR1cm4gcXVldWVfd29yayhwZGV2LT5jbl9xdWV1ZSwgd29yayk7CisKKwkvKiBEb24ndCBjcmVhdGUgdGhlIGNvbm5lY3RvciB3b3JrcXVldWUgdHdpY2UgKi8KKwlpZiAoYXRvbWljX2luY19yZXR1cm4oJnBkZXYtPndxX3JlcXVlc3RlZCkgPT0gMSkKKwkJc2NoZWR1bGVfd29yaygmcGRldi0+d3FfY3JlYXRpb24pOworCWVsc2UKKwkJYXRvbWljX2RlYygmcGRldi0+d3FfcmVxdWVzdGVkKTsKKworCXJldHVybiBzY2hlZHVsZV93b3JrKHdvcmspOworfQorCiB2b2lkIGNuX3F1ZXVlX3dyYXBwZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBjbl9jYWxsYmFja19lbnRyeSAqY2JxID0KQEAgLTU4LDE0ICsxMDAsMTcgQEAKIAlzbnByaW50ZihjYnEtPmlkLm5hbWUsIHNpemVvZihjYnEtPmlkLm5hbWUpLCAiJXMiLCBuYW1lKTsKIAltZW1jcHkoJmNicS0+aWQuaWQsIGlkLCBzaXplb2Yoc3RydWN0IGNiX2lkKSk7CiAJY2JxLT5kYXRhLmNhbGxiYWNrID0gY2FsbGJhY2s7Ci0JCisKIAlJTklUX1dPUksoJmNicS0+d29yaywgJmNuX3F1ZXVlX3dyYXBwZXIpOwogCXJldHVybiBjYnE7CiB9CiAKIHN0YXRpYyB2b2lkIGNuX3F1ZXVlX2ZyZWVfY2FsbGJhY2soc3RydWN0IGNuX2NhbGxiYWNrX2VudHJ5ICpjYnEpCiB7Ci0JZmx1c2hfd29ya3F1ZXVlKGNicS0+cGRldi0+Y25fcXVldWUpOworCS8qIFRoZSBmaXJzdCBqb2JzIGhhdmUgYmVlbiBzZW50IHRvIGtldmVudCwgZmx1c2ggdGhlbSB0b28gKi8KKwlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCWlmIChjYnEtPnBkZXYtPmNuX3F1ZXVlKQorCQlmbHVzaF93b3JrcXVldWUoY2JxLT5wZGV2LT5jbl9xdWV1ZSk7CiAKIAlrZnJlZShjYnEpOwogfQpAQCAtMTQzLDE0ICsxODgsMTEgQEAKIAlhdG9taWNfc2V0KCZkZXYtPnJlZmNudCwgMCk7CiAJSU5JVF9MSVNUX0hFQUQoJmRldi0+cXVldWVfbGlzdCk7CiAJc3Bpbl9sb2NrX2luaXQoJmRldi0+cXVldWVfbG9jayk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmZGV2LT53cV9jcmVhdGVkKTsKIAogCWRldi0+bmxzID0gbmxzOwogCi0JZGV2LT5jbl9xdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKGRldi0+bmFtZSk7Ci0JaWYgKCFkZXYtPmNuX3F1ZXVlKSB7Ci0JCWtmcmVlKGRldik7Ci0JCXJldHVybiBOVUxMOwotCX0KKwlJTklUX1dPUksoJmRldi0+d3FfY3JlYXRpb24sIGNuX3F1ZXVlX2NyZWF0ZSk7CiAKIAlyZXR1cm4gZGV2OwogfQpAQCAtMTU4LDkgKzIwMCwyNSBAQAogdm9pZCBjbl9xdWV1ZV9mcmVlX2RldihzdHJ1Y3QgY25fcXVldWVfZGV2ICpkZXYpCiB7CiAJc3RydWN0IGNuX2NhbGxiYWNrX2VudHJ5ICpjYnEsICpuOworCWxvbmcgdGltZW91dDsKKwlERUZJTkVfV0FJVCh3YWl0KTsKIAotCWZsdXNoX3dvcmtxdWV1ZShkZXYtPmNuX3F1ZXVlKTsKLQlkZXN0cm95X3dvcmtxdWV1ZShkZXYtPmNuX3F1ZXVlKTsKKwkvKiBGbHVzaCB0aGUgZmlyc3QgcGVuZGluZyBqb2JzIHF1ZXVlZCBvbiBrZXZlbnQgKi8KKwlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCisJLyogSWYgdGhlIGNvbm5lY3RvciB3b3JrcXVldWUgY3JlYXRpb24gaXMgc3RpbGwgcGVuZGluZywgd2FpdCBmb3IgaXQgKi8KKwlwcmVwYXJlX3RvX3dhaXQoJmRldi0+d3FfY3JlYXRlZCwgJndhaXQsIFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKKwlpZiAoYXRvbWljX3JlYWQoJmRldi0+d3FfcmVxdWVzdGVkKSAmJiAhZGV2LT5jbl9xdWV1ZSkgeworCQl0aW1lb3V0ID0gc2NoZWR1bGVfdGltZW91dChIWiAqIDIpOworCQlpZiAoIXRpbWVvdXQgJiYgIWRldi0+Y25fcXVldWUpCisJCQlXQVJOX09OKDEpOworCX0KKwlmaW5pc2hfd2FpdCgmZGV2LT53cV9jcmVhdGVkLCAmd2FpdCk7CisKKwlpZiAoZGV2LT5jbl9xdWV1ZSkgeworCQlmbHVzaF93b3JrcXVldWUoZGV2LT5jbl9xdWV1ZSk7CisJCWRlc3Ryb3lfd29ya3F1ZXVlKGRldi0+Y25fcXVldWUpOworCX0KIAogCXNwaW5fbG9ja19iaCgmZGV2LT5xdWV1ZV9sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY2JxLCBuLCAmZGV2LT5xdWV1ZV9saXN0LCBjYWxsYmFja19lbnRyeSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY29ubmVjdG9yL2Nvbm5lY3Rvci5jIGIvZHJpdmVycy9jb25uZWN0b3IvY29ubmVjdG9yLmMKaW5kZXggYmY0ODMwMC4uZmQzMzZjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jb25uZWN0b3IvY29ubmVjdG9yLmMKKysrIGIvZHJpdmVycy9jb25uZWN0b3IvY29ubmVjdG9yLmMKQEAgLTEsOSArMSw5IEBACiAvKgogICogCWNvbm5lY3Rvci5jCi0gKiAKKyAqCiAgKiAyMDA0LTIwMDUgQ29weXJpZ2h0IChjKSBFdmdlbml5IFBvbHlha292IDxqb2hucG9sQDJrYS5taXB0LnJ1PgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAorICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKQEAgLTE0NSwxNCArMTQ1LDEzIEBACiAJCQkJX19jYnEtPmRhdGEuZGRhdGEgPSBkYXRhOwogCQkJCV9fY2JxLT5kYXRhLmRlc3RydWN0X2RhdGEgPSBkZXN0cnVjdF9kYXRhOwogCi0JCQkJaWYgKHF1ZXVlX3dvcmsoZGV2LT5jYmRldi0+Y25fcXVldWUsCi0JCQkJCQkJJl9fY2JxLT53b3JrKSkKKwkJCQlpZiAocXVldWVfY25fd29yayhfX2NicSwgJl9fY2JxLT53b3JrKSkKIAkJCQkJZXJyID0gMDsKIAkJCQllbHNlCiAJCQkJCWVyciA9IC1FSU5WQUw7CiAJCQl9IGVsc2UgewogCQkJCXN0cnVjdCBjbl9jYWxsYmFja19kYXRhICpkOwotCQkJCQorCiAJCQkJZXJyID0gLUVOT01FTTsKIAkJCQlfX25ld19jYnEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY25fY2FsbGJhY2tfZW50cnkpLCBHRlBfQVRPTUlDKTsKIAkJCQlpZiAoX19uZXdfY2JxKSB7CkBAIC0xNjMsMTAgKzE2MiwxMiBAQAogCQkJCQlkLT5kZXN0cnVjdF9kYXRhID0gZGVzdHJ1Y3RfZGF0YTsKIAkJCQkJZC0+ZnJlZSA9IF9fbmV3X2NicTsKIAorCQkJCQlfX25ld19jYnEtPnBkZXYgPSBfX2NicS0+cGRldjsKKwogCQkJCQlJTklUX1dPUksoJl9fbmV3X2NicS0+d29yaywKIAkJCQkJCQkmY25fcXVldWVfd3JhcHBlcik7CiAKLQkJCQkJaWYgKHF1ZXVlX3dvcmsoZGV2LT5jYmRldi0+Y25fcXVldWUsCisJCQkJCWlmIChxdWV1ZV9jbl93b3JrKF9fbmV3X2NicSwKIAkJCQkJCSAgICAmX19uZXdfY2JxLT53b3JrKSkKIAkJCQkJCWVyciA9IDA7CiAJCQkJCWVsc2UgewpAQCAtMjM3LDcgKzIzOCw3IEBACiAKIAkJcmVxID0gKHN0cnVjdCBjbl9ub3RpZnlfcmVxICopY3RsLT5kYXRhOwogCQlmb3IgKGkgPSAwOyBpIDwgY3RsLT5pZHhfbm90aWZ5X251bTsgKytpLCArK3JlcSkgewotCQkJaWYgKGlkLT5pZHggPj0gcmVxLT5maXJzdCAmJiAKKwkJCWlmIChpZC0+aWR4ID49IHJlcS0+Zmlyc3QgJiYKIAkJCQkJaWQtPmlkeCA8IHJlcS0+Zmlyc3QgKyByZXEtPnJhbmdlKSB7CiAJCQkJaWR4X2ZvdW5kID0gMTsKIAkJCQlicmVhazsKQEAgLTI0NSw3ICsyNDYsNyBAQAogCQl9CiAKIAkJZm9yIChpID0gMDsgaSA8IGN0bC0+dmFsX25vdGlmeV9udW07ICsraSwgKytyZXEpIHsKLQkJCWlmIChpZC0+dmFsID49IHJlcS0+Zmlyc3QgJiYgCisJCQlpZiAoaWQtPnZhbCA+PSByZXEtPmZpcnN0ICYmCiAJCQkJCWlkLT52YWwgPCByZXEtPmZpcnN0ICsgcmVxLT5yYW5nZSkgewogCQkJCXZhbF9mb3VuZCA9IDE7CiAJCQkJYnJlYWs7CkBAIC00NTksNyArNDYwLDcgQEAKIAkJbmV0bGlua19rZXJuZWxfcmVsZWFzZShkZXYtPm5scyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQkKKwogCWNuX2FscmVhZHlfaW5pdGlhbGl6ZWQgPSAxOwogCiAJZXJyID0gY25fYWRkX2NhbGxiYWNrKCZkZXYtPmlkLCAiY29ubmVjdG9yIiwgJmNuX2NhbGxiYWNrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxLmMgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcS5jCmluZGV4IGQ2ZGFmM2MuLmQyNzBlOGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxLmMKKysrIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEuYwpAQCAtMTA0LDcgKzEwNCw4IEBACiAKIAogLyogaW50ZXJuYWwgcHJvdG90eXBlcyAqLwotc3RhdGljIGludCBfX2NwdWZyZXFfZ292ZXJub3Ioc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksIHVuc2lnbmVkIGludCBldmVudCk7CitzdGF0aWMgaW50IF9fY3B1ZnJlcV9nb3Zlcm5vcihzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwKKwkJdW5zaWduZWQgaW50IGV2ZW50KTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgX19jcHVmcmVxX2dldCh1bnNpZ25lZCBpbnQgY3B1KTsKIHN0YXRpYyB2b2lkIGhhbmRsZV91cGRhdGUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIApAQCAtMTI4LDcgKzEyOSw3IEBACiBwdXJlX2luaXRjYWxsKGluaXRfY3B1ZnJlcV90cmFuc2l0aW9uX25vdGlmaWVyX2xpc3QpOwogCiBzdGF0aWMgTElTVF9IRUFEKGNwdWZyZXFfZ292ZXJub3JfbGlzdCk7Ci1zdGF0aWMgREVGSU5FX01VVEVYIChjcHVmcmVxX2dvdmVybm9yX211dGV4KTsKK3N0YXRpYyBERUZJTkVfTVVURVgoY3B1ZnJlcV9nb3Zlcm5vcl9tdXRleCk7CiAKIHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqY3B1ZnJlcV9jcHVfZ2V0KHVuc2lnbmVkIGludCBjcHUpCiB7CkBAIC0zNzEsNyArMzcyLDcgQEAKIAlzdHJ1Y3QgY3B1ZnJlcV9nb3Zlcm5vciAqdDsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkodCwgJmNwdWZyZXFfZ292ZXJub3JfbGlzdCwgZ292ZXJub3JfbGlzdCkKLQkJaWYgKCFzdHJuaWNtcChzdHJfZ292ZXJub3IsdC0+bmFtZSxDUFVGUkVRX05BTUVfTEVOKSkKKwkJaWYgKCFzdHJuaWNtcChzdHJfZ292ZXJub3IsIHQtPm5hbWUsIENQVUZSRVFfTkFNRV9MRU4pKQogCQkJcmV0dXJuIHQ7CiAKIAlyZXR1cm4gTlVMTDsKQEAgLTQyOSwxNSArNDMwLDExIEBACiAKIAkJbXV0ZXhfdW5sb2NrKCZjcHVmcmVxX2dvdmVybm9yX211dGV4KTsKIAl9Ci0gIG91dDoKK291dDoKIAlyZXR1cm4gZXJyOwogfQogCiAKLS8qIGRyaXZlcnMvYmFzZS9jcHUuYyAqLwotZXh0ZXJuIHN0cnVjdCBzeXNkZXZfY2xhc3MgY3B1X3N5c2Rldl9jbGFzczsKLQotCiAvKioKICAqIGNwdWZyZXFfcGVyX2NwdV9hdHRyX3JlYWQoKSAvIHNob3dfIyNmaWxlX25hbWUoKSAtCiAgKiBwcmludCBvdXQgY3B1ZnJlcSBpbmZvcm1hdGlvbgpAQCAtNDUwLDExICs0NDcsMTIgQEAKIHN0YXRpYyBzc2l6ZV90IHNob3dfIyNmaWxlX25hbWUJCQkJXAogKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LCBjaGFyICpidWYpCQlcCiB7CQkJCQkJCVwKLQlyZXR1cm4gc3ByaW50ZiAoYnVmLCAiJXVcbiIsIHBvbGljeS0+b2JqZWN0KTsJXAorCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBwb2xpY3ktPm9iamVjdCk7CVwKIH0KIAogc2hvd19vbmUoY3B1aW5mb19taW5fZnJlcSwgY3B1aW5mby5taW5fZnJlcSk7CiBzaG93X29uZShjcHVpbmZvX21heF9mcmVxLCBjcHVpbmZvLm1heF9mcmVxKTsKK3Nob3dfb25lKGNwdWluZm9fdHJhbnNpdGlvbl9sYXRlbmN5LCBjcHVpbmZvLnRyYW5zaXRpb25fbGF0ZW5jeSk7CiBzaG93X29uZShzY2FsaW5nX21pbl9mcmVxLCBtaW4pOwogc2hvd19vbmUoc2NhbGluZ19tYXhfZnJlcSwgbWF4KTsKIHNob3dfb25lKHNjYWxpbmdfY3VyX2ZyZXEsIGN1cik7CkBAIC00NzYsNyArNDc0LDcgQEAKIAlpZiAocmV0KQkJCQkJCQlcCiAJCXJldHVybiAtRUlOVkFMOwkJCQkJCVwKIAkJCQkJCQkJCVwKLQlyZXQgPSBzc2NhbmYgKGJ1ZiwgIiV1IiwgJm5ld19wb2xpY3kub2JqZWN0KTsJCQlcCisJcmV0ID0gc3NjYW5mKGJ1ZiwgIiV1IiwgJm5ld19wb2xpY3kub2JqZWN0KTsJCQlcCiAJaWYgKHJldCAhPSAxKQkJCQkJCQlcCiAJCXJldHVybiAtRUlOVkFMOwkJCQkJCVwKIAkJCQkJCQkJCVwKQEAgLTQ4Niw4ICs0ODQsOCBAQAogCXJldHVybiByZXQgPyByZXQgOiBjb3VudDsJCQkJCVwKIH0KIAotc3RvcmVfb25lKHNjYWxpbmdfbWluX2ZyZXEsbWluKTsKLXN0b3JlX29uZShzY2FsaW5nX21heF9mcmVxLG1heCk7CitzdG9yZV9vbmUoc2NhbGluZ19taW5fZnJlcSwgbWluKTsKK3N0b3JlX29uZShzY2FsaW5nX21heF9mcmVxLCBtYXgpOwogCiAvKioKICAqIHNob3dfY3B1aW5mb19jdXJfZnJlcSAtIGN1cnJlbnQgQ1BVIGZyZXF1ZW5jeSBhcyBkZXRlY3RlZCBieSBoYXJkd2FyZQpAQCAtNTA3LDEyICs1MDUsMTMgQEAKICAqLwogc3RhdGljIHNzaXplX3Qgc2hvd19zY2FsaW5nX2dvdmVybm9yKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LCBjaGFyICpidWYpCiB7Ci0JaWYocG9saWN5LT5wb2xpY3kgPT0gQ1BVRlJFUV9QT0xJQ1lfUE9XRVJTQVZFKQorCWlmIChwb2xpY3ktPnBvbGljeSA9PSBDUFVGUkVRX1BPTElDWV9QT1dFUlNBVkUpCiAJCXJldHVybiBzcHJpbnRmKGJ1ZiwgInBvd2Vyc2F2ZVxuIik7CiAJZWxzZSBpZiAocG9saWN5LT5wb2xpY3kgPT0gQ1BVRlJFUV9QT0xJQ1lfUEVSRk9STUFOQ0UpCiAJCXJldHVybiBzcHJpbnRmKGJ1ZiwgInBlcmZvcm1hbmNlXG4iKTsKIAllbHNlIGlmIChwb2xpY3ktPmdvdmVybm9yKQotCQlyZXR1cm4gc2NucHJpbnRmKGJ1ZiwgQ1BVRlJFUV9OQU1FX0xFTiwgIiVzXG4iLCBwb2xpY3ktPmdvdmVybm9yLT5uYW1lKTsKKwkJcmV0dXJuIHNjbnByaW50ZihidWYsIENQVUZSRVFfTkFNRV9MRU4sICIlc1xuIiwKKwkJCQlwb2xpY3ktPmdvdmVybm9yLT5uYW1lKTsKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIApAQCAtNTMxLDcgKzUzMCw3IEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCXJldCA9IHNzY2FuZiAoYnVmLCAiJTE1cyIsIHN0cl9nb3Zlcm5vcik7CisJcmV0ID0gc3NjYW5mKGJ1ZiwgIiUxNXMiLCBzdHJfZ292ZXJub3IpOwogCWlmIChyZXQgIT0gMSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTU3NSw3ICs1NzQsOCBAQAogCX0KIAogCWxpc3RfZm9yX2VhY2hfZW50cnkodCwgJmNwdWZyZXFfZ292ZXJub3JfbGlzdCwgZ292ZXJub3JfbGlzdCkgewotCQlpZiAoaSA+PSAoc3NpemVfdCkgKChQQUdFX1NJWkUgLyBzaXplb2YoY2hhcikpIC0gKENQVUZSRVFfTkFNRV9MRU4gKyAyKSkpCisJCWlmIChpID49IChzc2l6ZV90KSAoKFBBR0VfU0laRSAvIHNpemVvZihjaGFyKSkKKwkJICAgIC0gKENQVUZSRVFfTkFNRV9MRU4gKyAyKSkpCiAJCQlnb3RvIG91dDsKIAkJaSArPSBzY25wcmludGYoJmJ1ZltpXSwgQ1BVRlJFUV9OQU1FX0xFTiwgIiVzICIsIHQtPm5hbWUpOwogCX0KQEAgLTU5NCw3ICs1OTQsNyBAQAogCQkJaSArPSBzY25wcmludGYoJmJ1ZltpXSwgKFBBR0VfU0laRSAtIGkgLSAyKSwgIiAiKTsKIAkJaSArPSBzY25wcmludGYoJmJ1ZltpXSwgKFBBR0VfU0laRSAtIGkgLSAyKSwgIiV1IiwgY3B1KTsKIAkJaWYgKGkgPj0gKFBBR0VfU0laRSAtIDUpKQotCQkgICAgYnJlYWs7CisJCQlicmVhazsKIAl9CiAJaSArPSBzcHJpbnRmKCZidWZbaV0sICJcbiIpOwogCXJldHVybiBpOwpAQCAtNjYwLDYgKzY2MCw3IEBACiBkZWZpbmVfb25lX3JvMDQwMChjcHVpbmZvX2N1cl9mcmVxKTsKIGRlZmluZV9vbmVfcm8oY3B1aW5mb19taW5fZnJlcSk7CiBkZWZpbmVfb25lX3JvKGNwdWluZm9fbWF4X2ZyZXEpOworZGVmaW5lX29uZV9ybyhjcHVpbmZvX3RyYW5zaXRpb25fbGF0ZW5jeSk7CiBkZWZpbmVfb25lX3JvKHNjYWxpbmdfYXZhaWxhYmxlX2dvdmVybm9ycyk7CiBkZWZpbmVfb25lX3JvKHNjYWxpbmdfZHJpdmVyKTsKIGRlZmluZV9vbmVfcm8oc2NhbGluZ19jdXJfZnJlcSk7CkBAIC02NzMsNiArNjc0LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkZWZhdWx0X2F0dHJzW10gPSB7CiAJJmNwdWluZm9fbWluX2ZyZXEuYXR0ciwKIAkmY3B1aW5mb19tYXhfZnJlcS5hdHRyLAorCSZjcHVpbmZvX3RyYW5zaXRpb25fbGF0ZW5jeS5hdHRyLAogCSZzY2FsaW5nX21pbl9mcmVxLmF0dHIsCiAJJnNjYWxpbmdfbWF4X2ZyZXEuYXR0ciwKIAkmYWZmZWN0ZWRfY3B1cy5hdHRyLApAQCAtNjg0LDEwICs2ODYsMTAgQEAKIAlOVUxMCiB9OwogCi0jZGVmaW5lIHRvX3BvbGljeShrKSBjb250YWluZXJfb2YoayxzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3ksa29iaikKLSNkZWZpbmUgdG9fYXR0cihhKSBjb250YWluZXJfb2YoYSxzdHJ1Y3QgZnJlcV9hdHRyLGF0dHIpCisjZGVmaW5lIHRvX3BvbGljeShrKSBjb250YWluZXJfb2Yoaywgc3RydWN0IGNwdWZyZXFfcG9saWN5LCBrb2JqKQorI2RlZmluZSB0b19hdHRyKGEpIGNvbnRhaW5lcl9vZihhLCBzdHJ1Y3QgZnJlcV9hdHRyLCBhdHRyKQogCi1zdGF0aWMgc3NpemVfdCBzaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyICxjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBzaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kgPSB0b19wb2xpY3koa29iaik7CiAJc3RydWN0IGZyZXFfYXR0ciAqZmF0dHIgPSB0b19hdHRyKGF0dHIpOwpAQCAtODUzLDEwICs4NTUsMTAgQEAKIAkJaWYgKGNwdSA9PSBqKQogCQkJY29udGludWU7CiAKLQkJLyogY2hlY2sgZm9yIGV4aXN0aW5nIGFmZmVjdGVkIENQVXMuICBUaGV5IG1heSBub3QgYmUgYXdhcmUKLQkJICogb2YgaXQgZHVlIHRvIENQVSBIb3RwbHVnLgorCQkvKiBDaGVjayBmb3IgZXhpc3RpbmcgYWZmZWN0ZWQgQ1BVcy4KKwkJICogVGhleSBtYXkgbm90IGJlIGF3YXJlIG9mIGl0IGR1ZSB0byBDUFUgSG90cGx1Zy4KIAkJICovCi0JCW1hbmFnZWRfcG9saWN5ID0gY3B1ZnJlcV9jcHVfZ2V0KGopOwkJLy8gRklYTUU6IFdoZXJlIGlzIHRoaXMgcmVsZWFzZWQ/ICBXaGF0IGFib3V0IGVycm9yIHBhdGhzPworCQltYW5hZ2VkX3BvbGljeSA9IGNwdWZyZXFfY3B1X2dldChqKTsJCS8qIEZJWE1FOiBXaGVyZSBpcyB0aGlzIHJlbGVhc2VkPyAgV2hhdCBhYm91dCBlcnJvciBwYXRocz8gKi8KIAkJaWYgKHVubGlrZWx5KG1hbmFnZWRfcG9saWN5KSkgewogCiAJCQkvKiBTZXQgcHJvcGVyIHBvbGljeV9jcHUgKi8KQEAgLTExMjcsOCArMTEyOSw4IEBACiAgKglAb2xkX2ZyZXE6IENQVSBmcmVxdWVuY3kgdGhlIGtlcm5lbCB0aGlua3MgdGhlIENQVSBydW5zIGF0CiAgKglAbmV3X2ZyZXE6IENQVSBmcmVxdWVuY3kgdGhlIENQVSBhY3R1YWxseSBydW5zIGF0CiAgKgotICoJV2UgYWRqdXN0IHRvIGN1cnJlbnQgZnJlcXVlbmN5IGZpcnN0LCBhbmQgbmVlZCB0byBjbGVhbiB1cCBsYXRlci4gU28gZWl0aGVyIGNhbGwKLSAqCXRvIGNwdWZyZXFfdXBkYXRlX3BvbGljeSgpIG9yIHNjaGVkdWxlIGhhbmRsZV91cGRhdGUoKSkuCisgKglXZSBhZGp1c3QgdG8gY3VycmVudCBmcmVxdWVuY3kgZmlyc3QsIGFuZCBuZWVkIHRvIGNsZWFuIHVwIGxhdGVyLgorICoJU28gZWl0aGVyIGNhbGwgdG8gY3B1ZnJlcV91cGRhdGVfcG9saWN5KCkgb3Igc2NoZWR1bGUgaGFuZGxlX3VwZGF0ZSgpKS4KICAqLwogc3RhdGljIHZvaWQgY3B1ZnJlcV9vdXRfb2Zfc3luYyh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBpbnQgb2xkX2ZyZXEsCiAJCQkJdW5zaWduZWQgaW50IG5ld19mcmVxKQpAQCAtMTYxMCw3ICsxNjEyLDggQEAKIAogLyoqCiAgKiBjcHVmcmVxX2dldF9wb2xpY3kgLSBnZXQgdGhlIGN1cnJlbnQgY3B1ZnJlcV9wb2xpY3kKLSAqIEBwb2xpY3k6IHN0cnVjdCBjcHVmcmVxX3BvbGljeSBpbnRvIHdoaWNoIHRoZSBjdXJyZW50IGNwdWZyZXFfcG9saWN5IGlzIHdyaXR0ZW4KKyAqIEBwb2xpY3k6IHN0cnVjdCBjcHVmcmVxX3BvbGljeSBpbnRvIHdoaWNoIHRoZSBjdXJyZW50IGNwdWZyZXFfcG9saWN5CisgKglpcyB3cml0dGVuCiAgKgogICogUmVhZHMgdGhlIGN1cnJlbnQgY3B1ZnJlcSBwb2xpY3kuCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX2NvbnNlcnZhdGl2ZS5jIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfY29uc2VydmF0aXZlLmMKaW5kZXggMDMyMDk2Mi4uMmVjZDk1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfY29uc2VydmF0aXZlLmMKKysrIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfY29uc2VydmF0aXZlLmMKQEAgLTQsNyArNCw3IEBACiAgKiAgQ29weXJpZ2h0IChDKSAgMjAwMSBSdXNzZWxsIEtpbmcKICAqICAgICAgICAgICAgKEMpICAyMDAzIFZlbmthdGVzaCBQYWxsaXBhZGkgPHZlbmthdGVzaC5wYWxsaXBhZGlAaW50ZWwuY29tPi4KICAqICAgICAgICAgICAgICAgICAgICAgIEp1biBOYWthamltYSA8anVuLm5ha2FqaW1hQGludGVsLmNvbT4KLSAqICAgICAgICAgICAgKEMpICAyMDA0IEFsZXhhbmRlciBDbG91dGVyIDxhbGV4LWtlcm5lbEBkaWdyaXoub3JnLnVrPgorICogICAgICAgICAgICAoQykgIDIwMDkgQWxleGFuZGVyIENsb3V0ZXIgPGFsZXhAZGlncml6Lm9yZy51az4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKQEAgLTEzLDIyICsxMywxNyBAQAogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1ZnJlcS5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgotI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KLSNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KLSNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L2hydGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90aWNrLmg+CisjaW5jbHVkZSA8bGludXgva3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorCiAvKgogICogZGJzIGlzIHVzZWQgaW4gdGhpcyBmaWxlIGFzIGEgc2hvcnRmb3JtIGZvciBkZW1hbmRiYXNlZCBzd2l0Y2hpbmcKICAqIEl0IGhlbHBzIHRvIGtlZXAgdmFyaWFibGUgbmFtZXMgc21hbGxlciwgc2ltcGxlcgpAQCAtNDMsMTkgKzM4LDMxIEBACiAgKiBsYXRlbmN5IG9mIHRoZSBwcm9jZXNzb3IuIFRoZSBnb3Zlcm5vciB3aWxsIHdvcmsgb24gYW55IHByb2Nlc3NvciB3aXRoCiAgKiB0cmFuc2l0aW9uIGxhdGVuY3kgPD0gMTBtUywgdXNpbmcgYXBwcm9wcmlhdGUgc2FtcGxpbmcKICAqIHJhdGUuCi0gKiBGb3IgQ1BVcyB3aXRoIHRyYW5zaXRpb24gbGF0ZW5jeSA+IDEwbVMgKG1vc3RseSBkcml2ZXJzCi0gKiB3aXRoIENQVUZSRVFfRVRFUk5BTCksIHRoaXMgZ292ZXJub3Igd2lsbCBub3Qgd29yay4KKyAqIEZvciBDUFVzIHdpdGggdHJhbnNpdGlvbiBsYXRlbmN5ID4gMTBtUyAobW9zdGx5IGRyaXZlcnMgd2l0aCBDUFVGUkVRX0VURVJOQUwpCisgKiB0aGlzIGdvdmVybm9yIHdpbGwgbm90IHdvcmsuCiAgKiBBbGwgdGltZXMgaGVyZSBhcmUgaW4gdVMuCiAgKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGVmX3NhbXBsaW5nX3JhdGU7CiAjZGVmaW5lIE1JTl9TQU1QTElOR19SQVRFX1JBVElPCQkJKDIpCiAvKiBmb3IgY29ycmVjdCBzdGF0aXN0aWNzLCB3ZSBuZWVkIGF0IGxlYXN0IDEwIHRpY2tzIGJldHdlZW4gZWFjaCBtZWFzdXJlICovCi0jZGVmaW5lIE1JTl9TVEFUX1NBTVBMSU5HX1JBVEUJCQlcCisjZGVmaW5lIE1JTl9TVEFUX1NBTVBMSU5HX1JBVEUgCQkJXAogCQkJKE1JTl9TQU1QTElOR19SQVRFX1JBVElPICogamlmZmllc190b191c2VjcygxMCkpCiAjZGVmaW5lIE1JTl9TQU1QTElOR19SQVRFCQkJXAogCQkJKGRlZl9zYW1wbGluZ19yYXRlIC8gTUlOX1NBTVBMSU5HX1JBVEVfUkFUSU8pCisvKiBBYm92ZSBNSU5fU0FNUExJTkdfUkFURSB3aWxsIHZhbmlzaCB3aXRoIGl0cyBzeXNmcyBmaWxlIHNvb24KKyAqIERlZmluZSB0aGUgbWluaW1hbCBzZXR0YWJsZSBzYW1wbGluZyByYXRlIHRvIHRoZSBncmVhdGVyIG9mOgorICogICAtICJIVyB0cmFuc2l0aW9uIGxhdGVuY3kiICogMTAwIChzYW1lIGFzIGRlZmF1bHQgc2FtcGxpbmcgLyAxMCkKKyAqICAgLSBNSU5fU1RBVF9TQU1QTElOR19SQVRFCisgKiBUbyBhdm9pZCB0aGF0IHVzZXJzcGFjZSBzaG9vdHMgaXRzZWxmLgorKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgbWluaW11bV9zYW1wbGluZ19yYXRlKHZvaWQpCit7CisJcmV0dXJuIG1heChkZWZfc2FtcGxpbmdfcmF0ZSAvIDEwLCBNSU5fU1RBVF9TQU1QTElOR19SQVRFKTsKK30KKworLyogVGhpcyB3aWxsIGFsc28gdmFuaXNoIHNvb24gd2l0aCByZW1vdmluZyBzYW1wbGluZ19yYXRlX21heCAqLwogI2RlZmluZSBNQVhfU0FNUExJTkdfUkFURQkJCSg1MDAgKiBkZWZfc2FtcGxpbmdfcmF0ZSkKLSNkZWZpbmUgREVGX1NBTVBMSU5HX1JBVEVfTEFURU5DWV9NVUxUSVBMSUVSCSgxMDAwKQorI2RlZmluZSBMQVRFTkNZX01VTFRJUExJRVIJCQkoMTAwMCkKICNkZWZpbmUgREVGX1NBTVBMSU5HX0RPV05fRkFDVE9SCQkoMSkKICNkZWZpbmUgTUFYX1NBTVBMSU5HX0RPV05fRkFDVE9SCQkoMTApCiAjZGVmaW5lIFRSQU5TSVRJT05fTEFURU5DWV9MSU1JVAkJKDEwICogMTAwMCAqIDEwMDApCkBAIC02MywxMiArNzAsMTUgQEAKIHN0YXRpYyB2b2lkIGRvX2Ric190aW1lcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogCiBzdHJ1Y3QgY3B1X2Ric19pbmZvX3MgeworCWNwdXRpbWU2NF90IHByZXZfY3B1X2lkbGU7CisJY3B1dGltZTY0X3QgcHJldl9jcHVfd2FsbDsKKwljcHV0aW1lNjRfdCBwcmV2X2NwdV9uaWNlOwogCXN0cnVjdCBjcHVmcmVxX3BvbGljeSAqY3VyX3BvbGljeTsKLQl1bnNpZ25lZCBpbnQgcHJldl9jcHVfaWRsZV91cDsKLQl1bnNpZ25lZCBpbnQgcHJldl9jcHVfaWRsZV9kb3duOwotCXVuc2lnbmVkIGludCBlbmFibGU7CisJc3RydWN0IGRlbGF5ZWRfd29yayB3b3JrOwogCXVuc2lnbmVkIGludCBkb3duX3NraXA7CiAJdW5zaWduZWQgaW50IHJlcXVlc3RlZF9mcmVxOworCWludCBjcHU7CisJdW5zaWduZWQgaW50IGVuYWJsZToxOwogfTsKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgY3B1X2Ric19pbmZvX3MsIGNwdV9kYnNfaW5mbyk7CiAKQEAgLTgyLDE5ICs5MiwxOCBAQAogICogY3B1X2hvdHBsdWcgbG9jayBzaG91bGQgYmUgdGFrZW4gYmVmb3JlIHRoYXQuIE5vdGUgdGhhdCBjcHVfaG90cGx1ZyBsb2NrCiAgKiBpcyByZWN1cnNpdmUgZm9yIHRoZSBzYW1lIHByb2Nlc3MuIC1WZW5raQogICovCi1zdGF0aWMgREVGSU5FX01VVEVYIChkYnNfbXV0ZXgpOwotc3RhdGljIERFQ0xBUkVfREVMQVlFRF9XT1JLKGRic193b3JrLCBkb19kYnNfdGltZXIpOworc3RhdGljIERFRklORV9NVVRFWChkYnNfbXV0ZXgpOwogCi1zdHJ1Y3QgZGJzX3R1bmVycyB7CitzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QJKmtjb25zZXJ2YXRpdmVfd3E7CisKK3N0YXRpYyBzdHJ1Y3QgZGJzX3R1bmVycyB7CiAJdW5zaWduZWQgaW50IHNhbXBsaW5nX3JhdGU7CiAJdW5zaWduZWQgaW50IHNhbXBsaW5nX2Rvd25fZmFjdG9yOwogCXVuc2lnbmVkIGludCB1cF90aHJlc2hvbGQ7CiAJdW5zaWduZWQgaW50IGRvd25fdGhyZXNob2xkOwogCXVuc2lnbmVkIGludCBpZ25vcmVfbmljZTsKIAl1bnNpZ25lZCBpbnQgZnJlcV9zdGVwOwotfTsKLQotc3RhdGljIHN0cnVjdCBkYnNfdHVuZXJzIGRic190dW5lcnNfaW5zID0geworfSBkYnNfdHVuZXJzX2lucyA9IHsKIAkudXBfdGhyZXNob2xkID0gREVGX0ZSRVFVRU5DWV9VUF9USFJFU0hPTEQsCiAJLmRvd25fdGhyZXNob2xkID0gREVGX0ZSRVFVRU5DWV9ET1dOX1RIUkVTSE9MRCwKIAkuc2FtcGxpbmdfZG93bl9mYWN0b3IgPSBERUZfU0FNUExJTkdfRE9XTl9GQUNUT1IsCkBAIC0xMDIsMTggKzExMSwzNyBAQAogCS5mcmVxX3N0ZXAgPSA1LAogfTsKIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZ2V0X2NwdV9pZGxlX3RpbWUodW5zaWduZWQgaW50IGNwdSkKK3N0YXRpYyBpbmxpbmUgY3B1dGltZTY0X3QgZ2V0X2NwdV9pZGxlX3RpbWVfamlmZnkodW5zaWduZWQgaW50IGNwdSwKKwkJCQkJCQljcHV0aW1lNjRfdCAqd2FsbCkKIHsKLQl1bnNpZ25lZCBpbnQgYWRkX25pY2UgPSAwLCByZXQ7CisJY3B1dGltZTY0X3QgaWRsZV90aW1lOworCWNwdXRpbWU2NF90IGN1cl93YWxsX3RpbWU7CisJY3B1dGltZTY0X3QgYnVzeV90aW1lOwogCi0JaWYgKGRic190dW5lcnNfaW5zLmlnbm9yZV9uaWNlKQotCQlhZGRfbmljZSA9IGtzdGF0X2NwdShjcHUpLmNwdXN0YXQubmljZTsKKwljdXJfd2FsbF90aW1lID0gamlmZmllczY0X3RvX2NwdXRpbWU2NChnZXRfamlmZmllc182NCgpKTsKKwlidXN5X3RpbWUgPSBjcHV0aW1lNjRfYWRkKGtzdGF0X2NwdShjcHUpLmNwdXN0YXQudXNlciwKKwkJCWtzdGF0X2NwdShjcHUpLmNwdXN0YXQuc3lzdGVtKTsKIAotCXJldCA9IGtzdGF0X2NwdShjcHUpLmNwdXN0YXQuaWRsZSArCi0JCWtzdGF0X2NwdShjcHUpLmNwdXN0YXQuaW93YWl0ICsKLQkJYWRkX25pY2U7CisJYnVzeV90aW1lID0gY3B1dGltZTY0X2FkZChidXN5X3RpbWUsIGtzdGF0X2NwdShjcHUpLmNwdXN0YXQuaXJxKTsKKwlidXN5X3RpbWUgPSBjcHV0aW1lNjRfYWRkKGJ1c3lfdGltZSwga3N0YXRfY3B1KGNwdSkuY3B1c3RhdC5zb2Z0aXJxKTsKKwlidXN5X3RpbWUgPSBjcHV0aW1lNjRfYWRkKGJ1c3lfdGltZSwga3N0YXRfY3B1KGNwdSkuY3B1c3RhdC5zdGVhbCk7CisJYnVzeV90aW1lID0gY3B1dGltZTY0X2FkZChidXN5X3RpbWUsIGtzdGF0X2NwdShjcHUpLmNwdXN0YXQubmljZSk7CiAKLQlyZXR1cm4gcmV0OworCWlkbGVfdGltZSA9IGNwdXRpbWU2NF9zdWIoY3VyX3dhbGxfdGltZSwgYnVzeV90aW1lKTsKKwlpZiAod2FsbCkKKwkJKndhbGwgPSBjdXJfd2FsbF90aW1lOworCisJcmV0dXJuIGlkbGVfdGltZTsKK30KKworc3RhdGljIGlubGluZSBjcHV0aW1lNjRfdCBnZXRfY3B1X2lkbGVfdGltZSh1bnNpZ25lZCBpbnQgY3B1LCBjcHV0aW1lNjRfdCAqd2FsbCkKK3sKKwl1NjQgaWRsZV90aW1lID0gZ2V0X2NwdV9pZGxlX3RpbWVfdXMoY3B1LCB3YWxsKTsKKworCWlmIChpZGxlX3RpbWUgPT0gLTFVTEwpCisJCXJldHVybiBnZXRfY3B1X2lkbGVfdGltZV9qaWZmeShjcHUsIHdhbGwpOworCisJcmV0dXJuIGlkbGVfdGltZTsKIH0KIAogLyoga2VlcCB0cmFjayBvZiBmcmVxdWVuY3kgdHJhbnNpdGlvbnMgKi8KQEAgLTEyNSwxMCArMTUzLDIxIEBACiAJc3RydWN0IGNwdV9kYnNfaW5mb19zICp0aGlzX2Ric19pbmZvID0gJnBlcl9jcHUoY3B1X2Ric19pbmZvLAogCQkJCQkJCWZyZXEtPmNwdSk7CiAKKwlzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeTsKKwogCWlmICghdGhpc19kYnNfaW5mby0+ZW5hYmxlKQogCQlyZXR1cm4gMDsKIAotCXRoaXNfZGJzX2luZm8tPnJlcXVlc3RlZF9mcmVxID0gZnJlcS0+bmV3OworCXBvbGljeSA9IHRoaXNfZGJzX2luZm8tPmN1cl9wb2xpY3k7CisKKwkvKgorCSAqIHdlIG9ubHkgY2FyZSBpZiBvdXIgaW50ZXJuYWxseSB0cmFja2VkIGZyZXEgbW92ZXMgb3V0c2lkZQorCSAqIHRoZSAndmFsaWQnIHJhbmdlcyBvZiBmcmVxZW5jeSBhdmFpbGFibGUgdG8gdXMgb3RoZXJ3aXNlCisJICogd2UgZG8gbm90IGNoYW5nZSBpdAorCSovCisJaWYgKHRoaXNfZGJzX2luZm8tPnJlcXVlc3RlZF9mcmVxID4gcG9saWN5LT5tYXgKKwkJCXx8IHRoaXNfZGJzX2luZm8tPnJlcXVlc3RlZF9mcmVxIDwgcG9saWN5LT5taW4pCisJCXRoaXNfZGJzX2luZm8tPnJlcXVlc3RlZF9mcmVxID0gZnJlcS0+bmV3OwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNDAsMTYgKzE3OSwzMSBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqIHN5c2ZzIGludGVyZmFjZSAqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgc3NpemVfdCBzaG93X3NhbXBsaW5nX3JhdGVfbWF4KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LCBjaGFyICpidWYpCiB7Ci0JcmV0dXJuIHNwcmludGYgKGJ1ZiwgIiV1XG4iLCBNQVhfU0FNUExJTkdfUkFURSk7CisJc3RhdGljIGludCBwcmludF9vbmNlOworCisJaWYgKCFwcmludF9vbmNlKSB7CisJCXByaW50ayhLRVJOX0lORk8gIkNQVUZSRVE6IGNvbnNlcnZhdGl2ZSBzYW1wbGluZ19yYXRlX21heCAiCisJCSAgICAgICAic3lzZnMgZmlsZSBpcyBkZXByZWNhdGVkIC0gdXNlZCBieTogJXNcbiIsCisJCSAgICAgICBjdXJyZW50LT5jb21tKTsKKwkJcHJpbnRfb25jZSA9IDE7CisJfQorCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBNQVhfU0FNUExJTkdfUkFURSk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IHNob3dfc2FtcGxpbmdfcmF0ZV9taW4oc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksIGNoYXIgKmJ1ZikKIHsKLQlyZXR1cm4gc3ByaW50ZiAoYnVmLCAiJXVcbiIsIE1JTl9TQU1QTElOR19SQVRFKTsKKwlzdGF0aWMgaW50IHByaW50X29uY2U7CisKKwlpZiAoIXByaW50X29uY2UpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiQ1BVRlJFUTogY29uc2VydmF0aXZlIHNhbXBsaW5nX3JhdGVfbWF4ICIKKwkJICAgICAgICJzeXNmcyBmaWxlIGlzIGRlcHJlY2F0ZWQgLSB1c2VkIGJ5OiAlc1xuIiwgY3VycmVudC0+Y29tbSk7CisJCXByaW50X29uY2UgPSAxOworCX0KKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgTUlOX1NBTVBMSU5HX1JBVEUpOwogfQogCi0jZGVmaW5lIGRlZmluZV9vbmVfcm8oX25hbWUpCQkJCVwKLXN0YXRpYyBzdHJ1Y3QgZnJlcV9hdHRyIF9uYW1lID0JCQkJXAorI2RlZmluZSBkZWZpbmVfb25lX3JvKF9uYW1lKQkJXAorc3RhdGljIHN0cnVjdCBmcmVxX2F0dHIgX25hbWUgPQkJXAogX19BVFRSKF9uYW1lLCAwNDQ0LCBzaG93XyMjX25hbWUsIE5VTEwpCiAKIGRlZmluZV9vbmVfcm8oc2FtcGxpbmdfcmF0ZV9tYXgpOwpAQCAtMTc0LDcgKzIyOCw4IEBACiB7CiAJdW5zaWduZWQgaW50IGlucHV0OwogCWludCByZXQ7Ci0JcmV0ID0gc3NjYW5mIChidWYsICIldSIsICZpbnB1dCk7CisJcmV0ID0gc3NjYW5mKGJ1ZiwgIiV1IiwgJmlucHV0KTsKKwogCWlmIChyZXQgIT0gMSB8fCBpbnB1dCA+IE1BWF9TQU1QTElOR19ET1dOX0ZBQ1RPUiB8fCBpbnB1dCA8IDEpCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC0xOTAsMTUgKzI0NSwxMyBAQAogewogCXVuc2lnbmVkIGludCBpbnB1dDsKIAlpbnQgcmV0OwotCXJldCA9IHNzY2FuZiAoYnVmLCAiJXUiLCAmaW5wdXQpOworCXJldCA9IHNzY2FuZihidWYsICIldSIsICZpbnB1dCk7CisKKwlpZiAocmV0ICE9IDEpCisJCXJldHVybiAtRUlOVkFMOwogCiAJbXV0ZXhfbG9jaygmZGJzX211dGV4KTsKLQlpZiAocmV0ICE9IDEgfHwgaW5wdXQgPiBNQVhfU0FNUExJTkdfUkFURSB8fCBpbnB1dCA8IE1JTl9TQU1QTElOR19SQVRFKSB7Ci0JCW11dGV4X3VubG9jaygmZGJzX211dGV4KTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JZGJzX3R1bmVyc19pbnMuc2FtcGxpbmdfcmF0ZSA9IGlucHV0OworCWRic190dW5lcnNfaW5zLnNhbXBsaW5nX3JhdGUgPSBtYXgoaW5wdXQsIG1pbmltdW1fc2FtcGxpbmdfcmF0ZSgpKTsKIAltdXRleF91bmxvY2soJmRic19tdXRleCk7CiAKIAlyZXR1cm4gY291bnQ7CkBAIC0yMDksMTAgKzI2MiwxMSBAQAogewogCXVuc2lnbmVkIGludCBpbnB1dDsKIAlpbnQgcmV0OwotCXJldCA9IHNzY2FuZiAoYnVmLCAiJXUiLCAmaW5wdXQpOworCXJldCA9IHNzY2FuZihidWYsICIldSIsICZpbnB1dCk7CiAKIAltdXRleF9sb2NrKCZkYnNfbXV0ZXgpOwotCWlmIChyZXQgIT0gMSB8fCBpbnB1dCA+IDEwMCB8fCBpbnB1dCA8PSBkYnNfdHVuZXJzX2lucy5kb3duX3RocmVzaG9sZCkgeworCWlmIChyZXQgIT0gMSB8fCBpbnB1dCA+IDEwMCB8fAorCQkJaW5wdXQgPD0gZGJzX3R1bmVyc19pbnMuZG93bl90aHJlc2hvbGQpIHsKIAkJbXV0ZXhfdW5sb2NrKCZkYnNfbXV0ZXgpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC0yMjgsMTAgKzI4MiwxMiBAQAogewogCXVuc2lnbmVkIGludCBpbnB1dDsKIAlpbnQgcmV0OwotCXJldCA9IHNzY2FuZiAoYnVmLCAiJXUiLCAmaW5wdXQpOworCXJldCA9IHNzY2FuZihidWYsICIldSIsICZpbnB1dCk7CiAKIAltdXRleF9sb2NrKCZkYnNfbXV0ZXgpOwotCWlmIChyZXQgIT0gMSB8fCBpbnB1dCA+IDEwMCB8fCBpbnB1dCA+PSBkYnNfdHVuZXJzX2lucy51cF90aHJlc2hvbGQpIHsKKwkvKiBjYW5ub3QgYmUgbG93ZXIgdGhhbiAxMSBvdGhlcndpc2UgZnJlcSB3aWxsIG5vdCBmYWxsICovCisJaWYgKHJldCAhPSAxIHx8IGlucHV0IDwgMTEgfHwgaW5wdXQgPiAxMDAgfHwKKwkJCWlucHV0ID49IGRic190dW5lcnNfaW5zLnVwX3RocmVzaG9sZCkgewogCQltdXRleF91bmxvY2soJmRic19tdXRleCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTI2NCwxMiArMzIwLDE0IEBACiAJfQogCWRic190dW5lcnNfaW5zLmlnbm9yZV9uaWNlID0gaW5wdXQ7CiAKLQkvKiB3ZSBuZWVkIHRvIHJlLWV2YWx1YXRlIHByZXZfY3B1X2lkbGVfdXAgYW5kIHByZXZfY3B1X2lkbGVfZG93biAqLworCS8qIHdlIG5lZWQgdG8gcmUtZXZhbHVhdGUgcHJldl9jcHVfaWRsZSAqLwogCWZvcl9lYWNoX29ubGluZV9jcHUoaikgewotCQlzdHJ1Y3QgY3B1X2Ric19pbmZvX3MgKmpfZGJzX2luZm87Ci0JCWpfZGJzX2luZm8gPSAmcGVyX2NwdShjcHVfZGJzX2luZm8sIGopOwotCQlqX2Ric19pbmZvLT5wcmV2X2NwdV9pZGxlX3VwID0gZ2V0X2NwdV9pZGxlX3RpbWUoaik7Ci0JCWpfZGJzX2luZm8tPnByZXZfY3B1X2lkbGVfZG93biA9IGpfZGJzX2luZm8tPnByZXZfY3B1X2lkbGVfdXA7CisJCXN0cnVjdCBjcHVfZGJzX2luZm9fcyAqZGJzX2luZm87CisJCWRic19pbmZvID0gJnBlcl9jcHUoY3B1X2Ric19pbmZvLCBqKTsKKwkJZGJzX2luZm8tPnByZXZfY3B1X2lkbGUgPSBnZXRfY3B1X2lkbGVfdGltZShqLAorCQkJCQkJJmRic19pbmZvLT5wcmV2X2NwdV93YWxsKTsKKwkJaWYgKGRic190dW5lcnNfaW5zLmlnbm9yZV9uaWNlKQorCQkJZGJzX2luZm8tPnByZXZfY3B1X25pY2UgPSBrc3RhdF9jcHUoaikuY3B1c3RhdC5uaWNlOwogCX0KIAltdXRleF91bmxvY2soJmRic19tdXRleCk7CiAKQEAgLTI4MSw3ICszMzksNiBAQAogewogCXVuc2lnbmVkIGludCBpbnB1dDsKIAlpbnQgcmV0OwotCiAJcmV0ID0gc3NjYW5mKGJ1ZiwgIiV1IiwgJmlucHV0KTsKIAogCWlmIChyZXQgIT0gMSkKQEAgLTMxMCw3ICszNjcsNyBAQAogZGVmaW5lX29uZV9ydyhpZ25vcmVfbmljZV9sb2FkKTsKIGRlZmluZV9vbmVfcncoZnJlcV9zdGVwKTsKIAotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKiBkYnNfYXR0cmlidXRlc1tdID0geworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRic19hdHRyaWJ1dGVzW10gPSB7CiAJJnNhbXBsaW5nX3JhdGVfbWF4LmF0dHIsCiAJJnNhbXBsaW5nX3JhdGVfbWluLmF0dHIsCiAJJnNhbXBsaW5nX3JhdGUuYXR0ciwKQEAgLTMyOSw1NSArMzg2LDc4IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiBzeXNmcyBlbmQgKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgdm9pZCBkYnNfY2hlY2tfY3B1KGludCBjcHUpCitzdGF0aWMgdm9pZCBkYnNfY2hlY2tfY3B1KHN0cnVjdCBjcHVfZGJzX2luZm9fcyAqdGhpc19kYnNfaW5mbykKIHsKLQl1bnNpZ25lZCBpbnQgaWRsZV90aWNrcywgdXBfaWRsZV90aWNrcywgZG93bl9pZGxlX3RpY2tzOwotCXVuc2lnbmVkIGludCB0bXBfaWRsZV90aWNrcywgdG90YWxfaWRsZV90aWNrczsKKwl1bnNpZ25lZCBpbnQgbG9hZCA9IDA7CiAJdW5zaWduZWQgaW50IGZyZXFfdGFyZ2V0OwotCXVuc2lnbmVkIGludCBmcmVxX2Rvd25fc2FtcGxpbmdfcmF0ZTsKLQlzdHJ1Y3QgY3B1X2Ric19pbmZvX3MgKnRoaXNfZGJzX2luZm8gPSAmcGVyX2NwdShjcHVfZGJzX2luZm8sIGNwdSk7Ci0Jc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3k7CiAKLQlpZiAoIXRoaXNfZGJzX2luZm8tPmVuYWJsZSkKLQkJcmV0dXJuOworCXN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5OworCXVuc2lnbmVkIGludCBqOwogCiAJcG9saWN5ID0gdGhpc19kYnNfaW5mby0+Y3VyX3BvbGljeTsKIAogCS8qCi0JICogVGhlIGRlZmF1bHQgc2FmZSByYW5nZSBpcyAyMCUgdG8gODAlCi0JICogRXZlcnkgc2FtcGxpbmdfcmF0ZSwgd2UgY2hlY2sKLQkgKgktIElmIGN1cnJlbnQgaWRsZSB0aW1lIGlzIGxlc3MgdGhhbiAyMCUsIHRoZW4gd2UgdHJ5IHRvCi0JICoJICBpbmNyZWFzZSBmcmVxdWVuY3kKLQkgKiBFdmVyeSBzYW1wbGluZ19yYXRlKnNhbXBsaW5nX2Rvd25fZmFjdG9yLCB3ZSBjaGVjawotCSAqCS0gSWYgY3VycmVudCBpZGxlIHRpbWUgaXMgbW9yZSB0aGFuIDgwJSwgdGhlbiB3ZSB0cnkgdG8KLQkgKgkgIGRlY3JlYXNlIGZyZXF1ZW5jeQorCSAqIEV2ZXJ5IHNhbXBsaW5nX3JhdGUsIHdlIGNoZWNrLCBpZiBjdXJyZW50IGlkbGUgdGltZSBpcyBsZXNzCisJICogdGhhbiAyMCUgKGRlZmF1bHQpLCB0aGVuIHdlIHRyeSB0byBpbmNyZWFzZSBmcmVxdWVuY3kKKwkgKiBFdmVyeSBzYW1wbGluZ19yYXRlKnNhbXBsaW5nX2Rvd25fZmFjdG9yLCB3ZSBjaGVjaywgaWYgY3VycmVudAorCSAqIGlkbGUgdGltZSBpcyBtb3JlIHRoYW4gODAlLCB0aGVuIHdlIHRyeSB0byBkZWNyZWFzZSBmcmVxdWVuY3kKIAkgKgogCSAqIEFueSBmcmVxdWVuY3kgaW5jcmVhc2UgdGFrZXMgaXQgdG8gdGhlIG1heGltdW0gZnJlcXVlbmN5LgogCSAqIEZyZXF1ZW5jeSByZWR1Y3Rpb24gaGFwcGVucyBhdCBtaW5pbXVtIHN0ZXBzIG9mCi0JICogNSUgKGRlZmF1bHQpIG9mIG1heF9mcmVxdWVuY3kKKwkgKiA1JSAoZGVmYXVsdCkgb2YgbWF4aW11bSBmcmVxdWVuY3kKIAkgKi8KIAotCS8qIENoZWNrIGZvciBmcmVxdWVuY3kgaW5jcmVhc2UgKi8KLQlpZGxlX3RpY2tzID0gVUlOVF9NQVg7CisJLyogR2V0IEFic29sdXRlIExvYWQgKi8KKwlmb3JfZWFjaF9jcHUoaiwgcG9saWN5LT5jcHVzKSB7CisJCXN0cnVjdCBjcHVfZGJzX2luZm9fcyAqal9kYnNfaW5mbzsKKwkJY3B1dGltZTY0X3QgY3VyX3dhbGxfdGltZSwgY3VyX2lkbGVfdGltZTsKKwkJdW5zaWduZWQgaW50IGlkbGVfdGltZSwgd2FsbF90aW1lOworCisJCWpfZGJzX2luZm8gPSAmcGVyX2NwdShjcHVfZGJzX2luZm8sIGopOworCisJCWN1cl9pZGxlX3RpbWUgPSBnZXRfY3B1X2lkbGVfdGltZShqLCAmY3VyX3dhbGxfdGltZSk7CisKKwkJd2FsbF90aW1lID0gKHVuc2lnbmVkIGludCkgY3B1dGltZTY0X3N1YihjdXJfd2FsbF90aW1lLAorCQkJCWpfZGJzX2luZm8tPnByZXZfY3B1X3dhbGwpOworCQlqX2Ric19pbmZvLT5wcmV2X2NwdV93YWxsID0gY3VyX3dhbGxfdGltZTsKKworCQlpZGxlX3RpbWUgPSAodW5zaWduZWQgaW50KSBjcHV0aW1lNjRfc3ViKGN1cl9pZGxlX3RpbWUsCisJCQkJal9kYnNfaW5mby0+cHJldl9jcHVfaWRsZSk7CisJCWpfZGJzX2luZm8tPnByZXZfY3B1X2lkbGUgPSBjdXJfaWRsZV90aW1lOworCisJCWlmIChkYnNfdHVuZXJzX2lucy5pZ25vcmVfbmljZSkgeworCQkJY3B1dGltZTY0X3QgY3VyX25pY2U7CisJCQl1bnNpZ25lZCBsb25nIGN1cl9uaWNlX2ppZmZpZXM7CisKKwkJCWN1cl9uaWNlID0gY3B1dGltZTY0X3N1Yihrc3RhdF9jcHUoaikuY3B1c3RhdC5uaWNlLAorCQkJCQkgal9kYnNfaW5mby0+cHJldl9jcHVfbmljZSk7CisJCQkvKgorCQkJICogQXNzdW1wdGlvbjogbmljZSB0aW1lIGJldHdlZW4gc2FtcGxpbmcgcGVyaW9kcyB3aWxsCisJCQkgKiBiZSBsZXNzIHRoYW4gMl4zMiBqaWZmaWVzIGZvciAzMiBiaXQgc3lzCisJCQkgKi8KKwkJCWN1cl9uaWNlX2ppZmZpZXMgPSAodW5zaWduZWQgbG9uZykKKwkJCQkJY3B1dGltZTY0X3RvX2ppZmZpZXM2NChjdXJfbmljZSk7CisKKwkJCWpfZGJzX2luZm8tPnByZXZfY3B1X25pY2UgPSBrc3RhdF9jcHUoaikuY3B1c3RhdC5uaWNlOworCQkJaWRsZV90aW1lICs9IGppZmZpZXNfdG9fdXNlY3MoY3VyX25pY2VfamlmZmllcyk7CisJCX0KKworCQlpZiAodW5saWtlbHkoIXdhbGxfdGltZSB8fCB3YWxsX3RpbWUgPCBpZGxlX3RpbWUpKQorCQkJY29udGludWU7CisKKwkJbG9hZCA9IDEwMCAqICh3YWxsX3RpbWUgLSBpZGxlX3RpbWUpIC8gd2FsbF90aW1lOworCX0KKworCS8qCisJICogYnJlYWsgb3V0IGlmIHdlICdjYW5ub3QnIHJlZHVjZSB0aGUgc3BlZWQgYXMgdGhlIHVzZXIgbWlnaHQKKwkgKiB3YW50IGZyZXFfc3RlcCB0byBiZSB6ZXJvCisJICovCisJaWYgKGRic190dW5lcnNfaW5zLmZyZXFfc3RlcCA9PSAwKQorCQlyZXR1cm47CiAKIAkvKiBDaGVjayBmb3IgZnJlcXVlbmN5IGluY3JlYXNlICovCi0JdG90YWxfaWRsZV90aWNrcyA9IGdldF9jcHVfaWRsZV90aW1lKGNwdSk7Ci0JdG1wX2lkbGVfdGlja3MgPSB0b3RhbF9pZGxlX3RpY2tzIC0KLQkJdGhpc19kYnNfaW5mby0+cHJldl9jcHVfaWRsZV91cDsKLQl0aGlzX2Ric19pbmZvLT5wcmV2X2NwdV9pZGxlX3VwID0gdG90YWxfaWRsZV90aWNrczsKLQotCWlmICh0bXBfaWRsZV90aWNrcyA8IGlkbGVfdGlja3MpCi0JCWlkbGVfdGlja3MgPSB0bXBfaWRsZV90aWNrczsKLQotCS8qIFNjYWxlIGlkbGUgdGlja3MgYnkgMTAwIGFuZCBjb21wYXJlIHdpdGggdXAgYW5kIGRvd24gdGlja3MgKi8KLQlpZGxlX3RpY2tzICo9IDEwMDsKLQl1cF9pZGxlX3RpY2tzID0gKDEwMCAtIGRic190dW5lcnNfaW5zLnVwX3RocmVzaG9sZCkgKgotCQkJdXNlY3NfdG9famlmZmllcyhkYnNfdHVuZXJzX2lucy5zYW1wbGluZ19yYXRlKTsKLQotCWlmIChpZGxlX3RpY2tzIDwgdXBfaWRsZV90aWNrcykgeworCWlmIChsb2FkID4gZGJzX3R1bmVyc19pbnMudXBfdGhyZXNob2xkKSB7CiAJCXRoaXNfZGJzX2luZm8tPmRvd25fc2tpcCA9IDA7Ci0JCXRoaXNfZGJzX2luZm8tPnByZXZfY3B1X2lkbGVfZG93biA9Ci0JCQl0aGlzX2Ric19pbmZvLT5wcmV2X2NwdV9pZGxlX3VwOwogCiAJCS8qIGlmIHdlIGFyZSBhbHJlYWR5IGF0IGZ1bGwgc3BlZWQgdGhlbiBicmVhayBvdXQgZWFybHkgKi8KIAkJaWYgKHRoaXNfZGJzX2luZm8tPnJlcXVlc3RlZF9mcmVxID09IHBvbGljeS0+bWF4KQpAQCAtMzk4LDQ5ICs0NzgsMjQgQEAKIAkJcmV0dXJuOwogCX0KIAotCS8qIENoZWNrIGZvciBmcmVxdWVuY3kgZGVjcmVhc2UgKi8KLQl0aGlzX2Ric19pbmZvLT5kb3duX3NraXArKzsKLQlpZiAodGhpc19kYnNfaW5mby0+ZG93bl9za2lwIDwgZGJzX3R1bmVyc19pbnMuc2FtcGxpbmdfZG93bl9mYWN0b3IpCi0JCXJldHVybjsKLQotCS8qIENoZWNrIGZvciBmcmVxdWVuY3kgZGVjcmVhc2UgKi8KLQl0b3RhbF9pZGxlX3RpY2tzID0gdGhpc19kYnNfaW5mby0+cHJldl9jcHVfaWRsZV91cDsKLQl0bXBfaWRsZV90aWNrcyA9IHRvdGFsX2lkbGVfdGlja3MgLQotCQl0aGlzX2Ric19pbmZvLT5wcmV2X2NwdV9pZGxlX2Rvd247Ci0JdGhpc19kYnNfaW5mby0+cHJldl9jcHVfaWRsZV9kb3duID0gdG90YWxfaWRsZV90aWNrczsKLQotCWlmICh0bXBfaWRsZV90aWNrcyA8IGlkbGVfdGlja3MpCi0JCWlkbGVfdGlja3MgPSB0bXBfaWRsZV90aWNrczsKLQotCS8qIFNjYWxlIGlkbGUgdGlja3MgYnkgMTAwIGFuZCBjb21wYXJlIHdpdGggdXAgYW5kIGRvd24gdGlja3MgKi8KLQlpZGxlX3RpY2tzICo9IDEwMDsKLQl0aGlzX2Ric19pbmZvLT5kb3duX3NraXAgPSAwOwotCi0JZnJlcV9kb3duX3NhbXBsaW5nX3JhdGUgPSBkYnNfdHVuZXJzX2lucy5zYW1wbGluZ19yYXRlICoKLQkJZGJzX3R1bmVyc19pbnMuc2FtcGxpbmdfZG93bl9mYWN0b3I7Ci0JZG93bl9pZGxlX3RpY2tzID0gKDEwMCAtIGRic190dW5lcnNfaW5zLmRvd25fdGhyZXNob2xkKSAqCi0JCXVzZWNzX3RvX2ppZmZpZXMoZnJlcV9kb3duX3NhbXBsaW5nX3JhdGUpOwotCi0JaWYgKGlkbGVfdGlja3MgPiBkb3duX2lkbGVfdGlja3MpIHsKLQkJLyoKLQkJICogaWYgd2UgYXJlIGFscmVhZHkgYXQgdGhlIGxvd2VzdCBzcGVlZCB0aGVuIGJyZWFrIG91dCBlYXJseQotCQkgKiBvciBpZiB3ZSAnY2Fubm90JyByZWR1Y2UgdGhlIHNwZWVkIGFzIHRoZSB1c2VyIG1pZ2h0IHdhbnQKLQkJICogZnJlcV90YXJnZXQgdG8gYmUgemVybwotCQkgKi8KLQkJaWYgKHRoaXNfZGJzX2luZm8tPnJlcXVlc3RlZF9mcmVxID09IHBvbGljeS0+bWluCi0JCQkJfHwgZGJzX3R1bmVyc19pbnMuZnJlcV9zdGVwID09IDApCi0JCQlyZXR1cm47Ci0KKwkvKgorCSAqIFRoZSBvcHRpbWFsIGZyZXF1ZW5jeSBpcyB0aGUgZnJlcXVlbmN5IHRoYXQgaXMgdGhlIGxvd2VzdCB0aGF0CisJICogY2FuIHN1cHBvcnQgdGhlIGN1cnJlbnQgQ1BVIHVzYWdlIHdpdGhvdXQgdHJpZ2dlcmluZyB0aGUgdXAKKwkgKiBwb2xpY3kuIFRvIGJlIHNhZmUsIHdlIGZvY3VzIDEwIHBvaW50cyB1bmRlciB0aGUgdGhyZXNob2xkLgorCSAqLworCWlmIChsb2FkIDwgKGRic190dW5lcnNfaW5zLmRvd25fdGhyZXNob2xkIC0gMTApKSB7CiAJCWZyZXFfdGFyZ2V0ID0gKGRic190dW5lcnNfaW5zLmZyZXFfc3RlcCAqIHBvbGljeS0+bWF4KSAvIDEwMDsKIAotCQkvKiBtYXggZnJlcSBjYW5ub3QgYmUgbGVzcyB0aGFuIDEwMC4gQnV0IHdobyBrbm93cy4uLi4gKi8KLQkJaWYgKHVubGlrZWx5KGZyZXFfdGFyZ2V0ID09IDApKQotCQkJZnJlcV90YXJnZXQgPSA1OwotCiAJCXRoaXNfZGJzX2luZm8tPnJlcXVlc3RlZF9mcmVxIC09IGZyZXFfdGFyZ2V0OwogCQlpZiAodGhpc19kYnNfaW5mby0+cmVxdWVzdGVkX2ZyZXEgPCBwb2xpY3ktPm1pbikKIAkJCXRoaXNfZGJzX2luZm8tPnJlcXVlc3RlZF9mcmVxID0gcG9saWN5LT5taW47CiAKKwkJLyoKKwkJICogaWYgd2UgY2Fubm90IHJlZHVjZSB0aGUgZnJlcXVlbmN5IGFueW1vcmUsIGJyZWFrIG91dCBlYXJseQorCQkgKi8KKwkJaWYgKHBvbGljeS0+Y3VyID09IHBvbGljeS0+bWluKQorCQkJcmV0dXJuOworCiAJCV9fY3B1ZnJlcV9kcml2ZXJfdGFyZ2V0KHBvbGljeSwgdGhpc19kYnNfaW5mby0+cmVxdWVzdGVkX2ZyZXEsCiAJCQkJQ1BVRlJFUV9SRUxBVElPTl9IKTsKIAkJcmV0dXJuOwpAQCAtNDQ5LDI3ICs1MDQsNDUgQEAKIAogc3RhdGljIHZvaWQgZG9fZGJzX3RpbWVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQlpbnQgaTsKLQltdXRleF9sb2NrKCZkYnNfbXV0ZXgpOwotCWZvcl9lYWNoX29ubGluZV9jcHUoaSkKLQkJZGJzX2NoZWNrX2NwdShpKTsKLQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmRic193b3JrLAotCQkJdXNlY3NfdG9famlmZmllcyhkYnNfdHVuZXJzX2lucy5zYW1wbGluZ19yYXRlKSk7Ci0JbXV0ZXhfdW5sb2NrKCZkYnNfbXV0ZXgpOworCXN0cnVjdCBjcHVfZGJzX2luZm9fcyAqZGJzX2luZm8gPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGNwdV9kYnNfaW5mb19zLCB3b3JrLndvcmspOworCXVuc2lnbmVkIGludCBjcHUgPSBkYnNfaW5mby0+Y3B1OworCisJLyogV2Ugd2FudCBhbGwgQ1BVcyB0byBkbyBzYW1wbGluZyBuZWFybHkgb24gc2FtZSBqaWZmeSAqLworCWludCBkZWxheSA9IHVzZWNzX3RvX2ppZmZpZXMoZGJzX3R1bmVyc19pbnMuc2FtcGxpbmdfcmF0ZSk7CisKKwlkZWxheSAtPSBqaWZmaWVzICUgZGVsYXk7CisKKwlpZiAobG9ja19wb2xpY3lfcndzZW1fd3JpdGUoY3B1KSA8IDApCisJCXJldHVybjsKKworCWlmICghZGJzX2luZm8tPmVuYWJsZSkgeworCQl1bmxvY2tfcG9saWN5X3J3c2VtX3dyaXRlKGNwdSk7CisJCXJldHVybjsKKwl9CisKKwlkYnNfY2hlY2tfY3B1KGRic19pbmZvKTsKKworCXF1ZXVlX2RlbGF5ZWRfd29ya19vbihjcHUsIGtjb25zZXJ2YXRpdmVfd3EsICZkYnNfaW5mby0+d29yaywgZGVsYXkpOworCXVubG9ja19wb2xpY3lfcndzZW1fd3JpdGUoY3B1KTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGRic190aW1lcl9pbml0KHZvaWQpCitzdGF0aWMgaW5saW5lIHZvaWQgZGJzX3RpbWVyX2luaXQoc3RydWN0IGNwdV9kYnNfaW5mb19zICpkYnNfaW5mbykKIHsKLQlpbml0X3RpbWVyX2RlZmVycmFibGUoJmRic193b3JrLnRpbWVyKTsKLQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmRic193b3JrLAotCQkJdXNlY3NfdG9famlmZmllcyhkYnNfdHVuZXJzX2lucy5zYW1wbGluZ19yYXRlKSk7Ci0JcmV0dXJuOworCS8qIFdlIHdhbnQgYWxsIENQVXMgdG8gZG8gc2FtcGxpbmcgbmVhcmx5IG9uIHNhbWUgamlmZnkgKi8KKwlpbnQgZGVsYXkgPSB1c2Vjc190b19qaWZmaWVzKGRic190dW5lcnNfaW5zLnNhbXBsaW5nX3JhdGUpOworCWRlbGF5IC09IGppZmZpZXMgJSBkZWxheTsKKworCWRic19pbmZvLT5lbmFibGUgPSAxOworCUlOSVRfREVMQVlFRF9XT1JLX0RFRkVSUkFCTEUoJmRic19pbmZvLT53b3JrLCBkb19kYnNfdGltZXIpOworCXF1ZXVlX2RlbGF5ZWRfd29ya19vbihkYnNfaW5mby0+Y3B1LCBrY29uc2VydmF0aXZlX3dxLCAmZGJzX2luZm8tPndvcmssCisJCQkJZGVsYXkpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZGJzX3RpbWVyX2V4aXQodm9pZCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBkYnNfdGltZXJfZXhpdChzdHJ1Y3QgY3B1X2Ric19pbmZvX3MgKmRic19pbmZvKQogewotCWNhbmNlbF9kZWxheWVkX3dvcmsoJmRic193b3JrKTsKLQlyZXR1cm47CisJZGJzX2luZm8tPmVuYWJsZSA9IDA7CisJY2FuY2VsX2RlbGF5ZWRfd29yaygmZGJzX2luZm8tPndvcmspOwogfQogCiBzdGF0aWMgaW50IGNwdWZyZXFfZ292ZXJub3JfZGJzKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LApAQCAtNTAzLDExICs1NzYsMTMgQEAKIAkJCWpfZGJzX2luZm8gPSAmcGVyX2NwdShjcHVfZGJzX2luZm8sIGopOwogCQkJal9kYnNfaW5mby0+Y3VyX3BvbGljeSA9IHBvbGljeTsKIAotCQkJal9kYnNfaW5mby0+cHJldl9jcHVfaWRsZV91cCA9IGdldF9jcHVfaWRsZV90aW1lKGNwdSk7Ci0JCQlqX2Ric19pbmZvLT5wcmV2X2NwdV9pZGxlX2Rvd24KLQkJCQk9IGpfZGJzX2luZm8tPnByZXZfY3B1X2lkbGVfdXA7CisJCQlqX2Ric19pbmZvLT5wcmV2X2NwdV9pZGxlID0gZ2V0X2NwdV9pZGxlX3RpbWUoaiwKKwkJCQkJCSZqX2Ric19pbmZvLT5wcmV2X2NwdV93YWxsKTsKKwkJCWlmIChkYnNfdHVuZXJzX2lucy5pZ25vcmVfbmljZSkgeworCQkJCWpfZGJzX2luZm8tPnByZXZfY3B1X25pY2UgPQorCQkJCQkJa3N0YXRfY3B1KGopLmNwdXN0YXQubmljZTsKKwkJCX0KIAkJfQotCQl0aGlzX2Ric19pbmZvLT5lbmFibGUgPSAxOwogCQl0aGlzX2Ric19pbmZvLT5kb3duX3NraXAgPSAwOwogCQl0aGlzX2Ric19pbmZvLT5yZXF1ZXN0ZWRfZnJlcSA9IHBvbGljeS0+Y3VyOwogCkBAIC01MjMsMzggKzU5OCwzNiBAQAogCQkJaWYgKGxhdGVuY3kgPT0gMCkKIAkJCQlsYXRlbmN5ID0gMTsKIAotCQkJZGVmX3NhbXBsaW5nX3JhdGUgPSAxMCAqIGxhdGVuY3kgKgotCQkJCQlERUZfU0FNUExJTkdfUkFURV9MQVRFTkNZX01VTFRJUExJRVI7Ci0KLQkJCWlmIChkZWZfc2FtcGxpbmdfcmF0ZSA8IE1JTl9TVEFUX1NBTVBMSU5HX1JBVEUpCi0JCQkJZGVmX3NhbXBsaW5nX3JhdGUgPSBNSU5fU1RBVF9TQU1QTElOR19SQVRFOworCQkJZGVmX3NhbXBsaW5nX3JhdGUgPQorCQkJCW1heChsYXRlbmN5ICogTEFURU5DWV9NVUxUSVBMSUVSLAorCQkJCSAgICBNSU5fU1RBVF9TQU1QTElOR19SQVRFKTsKIAogCQkJZGJzX3R1bmVyc19pbnMuc2FtcGxpbmdfcmF0ZSA9IGRlZl9zYW1wbGluZ19yYXRlOwogCi0JCQlkYnNfdGltZXJfaW5pdCgpOwogCQkJY3B1ZnJlcV9yZWdpc3Rlcl9ub3RpZmllcigKIAkJCQkJJmRic19jcHVmcmVxX25vdGlmaWVyX2Jsb2NrLAogCQkJCQlDUFVGUkVRX1RSQU5TSVRJT05fTk9USUZJRVIpOwogCQl9CisJCWRic190aW1lcl9pbml0KHRoaXNfZGJzX2luZm8pOwogCiAJCW11dGV4X3VubG9jaygmZGJzX211dGV4KTsKKwogCQlicmVhazsKIAogCWNhc2UgQ1BVRlJFUV9HT1ZfU1RPUDoKIAkJbXV0ZXhfbG9jaygmZGJzX211dGV4KTsKLQkJdGhpc19kYnNfaW5mby0+ZW5hYmxlID0gMDsKKwkJZGJzX3RpbWVyX2V4aXQodGhpc19kYnNfaW5mbyk7CiAJCXN5c2ZzX3JlbW92ZV9ncm91cCgmcG9saWN5LT5rb2JqLCAmZGJzX2F0dHJfZ3JvdXApOwogCQlkYnNfZW5hYmxlLS07CisKIAkJLyoKIAkJICogU3RvcCB0aGUgdGltZXJzY2hlZHVsZSB3b3JrLCB3aGVuIHRoaXMgZ292ZXJub3IKIAkJICogaXMgdXNlZCBmb3IgZmlyc3QgdGltZQogCQkgKi8KLQkJaWYgKGRic19lbmFibGUgPT0gMCkgewotCQkJZGJzX3RpbWVyX2V4aXQoKTsKKwkJaWYgKGRic19lbmFibGUgPT0gMCkKIAkJCWNwdWZyZXFfdW5yZWdpc3Rlcl9ub3RpZmllcigKIAkJCQkJJmRic19jcHVmcmVxX25vdGlmaWVyX2Jsb2NrLAogCQkJCQlDUFVGUkVRX1RSQU5TSVRJT05fTk9USUZJRVIpOwotCQl9CiAKIAkJbXV0ZXhfdW5sb2NrKCZkYnNfbXV0ZXgpOwogCkBAIC01NzEsNiArNjQ0LDcgQEAKIAkJCQkJdGhpc19kYnNfaW5mby0+Y3VyX3BvbGljeSwKIAkJCQkJcG9saWN5LT5taW4sIENQVUZSRVFfUkVMQVRJT05fTCk7CiAJCW11dGV4X3VubG9jaygmZGJzX211dGV4KTsKKwogCQlicmVhazsKIAl9CiAJcmV0dXJuIDA7CkBAIC01ODgsMjMgKzY2MiwzMyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBjcHVmcmVxX2dvdl9kYnNfaW5pdCh2b2lkKQogewotCXJldHVybiBjcHVmcmVxX3JlZ2lzdGVyX2dvdmVybm9yKCZjcHVmcmVxX2dvdl9jb25zZXJ2YXRpdmUpOworCWludCBlcnI7CisKKwlrY29uc2VydmF0aXZlX3dxID0gY3JlYXRlX3dvcmtxdWV1ZSgia2NvbnNlcnZhdGl2ZSIpOworCWlmICgha2NvbnNlcnZhdGl2ZV93cSkgeworCQlwcmludGsoS0VSTl9FUlIgIkNyZWF0aW9uIG9mIGtjb25zZXJ2YXRpdmUgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJZXJyID0gY3B1ZnJlcV9yZWdpc3Rlcl9nb3Zlcm5vcigmY3B1ZnJlcV9nb3ZfY29uc2VydmF0aXZlKTsKKwlpZiAoZXJyKQorCQlkZXN0cm95X3dvcmtxdWV1ZShrY29uc2VydmF0aXZlX3dxKTsKKworCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBjcHVmcmVxX2dvdl9kYnNfZXhpdCh2b2lkKQogewotCS8qIE1ha2Ugc3VyZSB0aGF0IHRoZSBzY2hlZHVsZWQgd29yayBpcyBpbmRlZWQgbm90IHJ1bm5pbmcgKi8KLQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwotCiAJY3B1ZnJlcV91bnJlZ2lzdGVyX2dvdmVybm9yKCZjcHVmcmVxX2dvdl9jb25zZXJ2YXRpdmUpOworCWRlc3Ryb3lfd29ya3F1ZXVlKGtjb25zZXJ2YXRpdmVfd3EpOwogfQogCiAKLU1PRFVMRV9BVVRIT1IgKCJBbGV4YW5kZXIgQ2xvdXRlciA8YWxleC1rZXJuZWxAZGlncml6Lm9yZy51az4iKTsKLU1PRFVMRV9ERVNDUklQVElPTiAoIidjcHVmcmVxX2NvbnNlcnZhdGl2ZScgLSBBIGR5bmFtaWMgY3B1ZnJlcSBnb3Zlcm5vciBmb3IgIgorTU9EVUxFX0FVVEhPUigiQWxleGFuZGVyIENsb3V0ZXIgPGFsZXhAZGlncml6Lm9yZy51az4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiJ2NwdWZyZXFfY29uc2VydmF0aXZlJyAtIEEgZHluYW1pYyBjcHVmcmVxIGdvdmVybm9yIGZvciAiCiAJCSJMb3cgTGF0ZW5jeSBGcmVxdWVuY3kgVHJhbnNpdGlvbiBjYXBhYmxlIHByb2Nlc3NvcnMgIgogCQkib3B0aW1pc2VkIGZvciB1c2UgaW4gYSBiYXR0ZXJ5IGVudmlyb25tZW50Iik7Ci1NT0RVTEVfTElDRU5TRSAoIkdQTCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiAjaWZkZWYgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX0NPTlNFUlZBVElWRQogZnNfaW5pdGNhbGwoY3B1ZnJlcV9nb3ZfZGJzX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfb25kZW1hbmQuYyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX29uZGVtYW5kLmMKaW5kZXggNmY0NWIxNi4uMzM4ZjQyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfb25kZW1hbmQuYworKysgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9vbmRlbWFuZC5jCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSA8bGludXgvaHJ0aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L3RpY2suaD4KICNpbmNsdWRlIDxsaW51eC9rdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKIC8qCiAgKiBkYnMgaXMgdXNlZCBpbiB0aGlzIGZpbGUgYXMgYSBzaG9ydGZvcm0gZm9yIGRlbWFuZGJhc2VkIHN3aXRjaGluZwpAQCAtNTEsOCArNTIsMjAgQEAKIAkJCShNSU5fU0FNUExJTkdfUkFURV9SQVRJTyAqIGppZmZpZXNfdG9fdXNlY3MoMTApKQogI2RlZmluZSBNSU5fU0FNUExJTkdfUkFURQkJCVwKIAkJCShkZWZfc2FtcGxpbmdfcmF0ZSAvIE1JTl9TQU1QTElOR19SQVRFX1JBVElPKQorLyogQWJvdmUgTUlOX1NBTVBMSU5HX1JBVEUgd2lsbCB2YW5pc2ggd2l0aCBpdHMgc3lzZnMgZmlsZSBzb29uCisgKiBEZWZpbmUgdGhlIG1pbmltYWwgc2V0dGFibGUgc2FtcGxpbmcgcmF0ZSB0byB0aGUgZ3JlYXRlciBvZjoKKyAqICAgLSAiSFcgdHJhbnNpdGlvbiBsYXRlbmN5IiAqIDEwMCAoc2FtZSBhcyBkZWZhdWx0IHNhbXBsaW5nIC8gMTApCisgKiAgIC0gTUlOX1NUQVRfU0FNUExJTkdfUkFURQorICogVG8gYXZvaWQgdGhhdCB1c2Vyc3BhY2Ugc2hvb3RzIGl0c2VsZi4KKyovCitzdGF0aWMgdW5zaWduZWQgaW50IG1pbmltdW1fc2FtcGxpbmdfcmF0ZSh2b2lkKQoreworCXJldHVybiBtYXgoZGVmX3NhbXBsaW5nX3JhdGUgLyAxMCwgTUlOX1NUQVRfU0FNUExJTkdfUkFURSk7Cit9CisKKy8qIFRoaXMgd2lsbCBhbHNvIHZhbmlzaCBzb29uIHdpdGggcmVtb3Zpbmcgc2FtcGxpbmdfcmF0ZV9tYXggKi8KICNkZWZpbmUgTUFYX1NBTVBMSU5HX1JBVEUJCQkoNTAwICogZGVmX3NhbXBsaW5nX3JhdGUpCi0jZGVmaW5lIERFRl9TQU1QTElOR19SQVRFX0xBVEVOQ1lfTVVMVElQTElFUgkoMTAwMCkKKyNkZWZpbmUgTEFURU5DWV9NVUxUSVBMSUVSCQkJKDEwMDApCiAjZGVmaW5lIFRSQU5TSVRJT05fTEFURU5DWV9MSU1JVAkJKDEwICogMTAwMCAqIDEwMDApCiAKIHN0YXRpYyB2b2lkIGRvX2Ric190aW1lcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwpAQCAtNjUsMTQgKzc4LDE0IEBACiAJY3B1dGltZTY0X3QgcHJldl9jcHVfd2FsbDsKIAljcHV0aW1lNjRfdCBwcmV2X2NwdV9uaWNlOwogCXN0cnVjdCBjcHVmcmVxX3BvbGljeSAqY3VyX3BvbGljeTsKLSAJc3RydWN0IGRlbGF5ZWRfd29yayB3b3JrOworCXN0cnVjdCBkZWxheWVkX3dvcmsgd29yazsKIAlzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgKmZyZXFfdGFibGU7CiAJdW5zaWduZWQgaW50IGZyZXFfbG87CiAJdW5zaWduZWQgaW50IGZyZXFfbG9famlmZmllczsKIAl1bnNpZ25lZCBpbnQgZnJlcV9oaV9qaWZmaWVzOwogCWludCBjcHU7CiAJdW5zaWduZWQgaW50IGVuYWJsZToxLAotCSAgICAgICAgICAgICBzYW1wbGVfdHlwZToxOworCQlzYW1wbGVfdHlwZToxOwogfTsKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgY3B1X2Ric19pbmZvX3MsIGNwdV9kYnNfaW5mbyk7CiAKQEAgLTIwMywxMiArMjE2LDI4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKiogc3lzZnMgaW50ZXJmYWNlICoqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyBzc2l6ZV90IHNob3dfc2FtcGxpbmdfcmF0ZV9tYXgoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksIGNoYXIgKmJ1ZikKIHsKLQlyZXR1cm4gc3ByaW50ZiAoYnVmLCAiJXVcbiIsIE1BWF9TQU1QTElOR19SQVRFKTsKKwlzdGF0aWMgaW50IHByaW50X29uY2U7CisKKwlpZiAoIXByaW50X29uY2UpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiQ1BVRlJFUTogb25kZW1hbmQgc2FtcGxpbmdfcmF0ZV9tYXggIgorCQkgICAgICAgInN5c2ZzIGZpbGUgaXMgZGVwcmVjYXRlZCAtIHVzZWQgYnk6ICVzXG4iLAorCQkgICAgICAgY3VycmVudC0+Y29tbSk7CisJCXByaW50X29uY2UgPSAxOworCX0KKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgTUFYX1NBTVBMSU5HX1JBVEUpOwogfQogCiBzdGF0aWMgc3NpemVfdCBzaG93X3NhbXBsaW5nX3JhdGVfbWluKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LCBjaGFyICpidWYpCiB7Ci0JcmV0dXJuIHNwcmludGYgKGJ1ZiwgIiV1XG4iLCBNSU5fU0FNUExJTkdfUkFURSk7CisJc3RhdGljIGludCBwcmludF9vbmNlOworCisJaWYgKCFwcmludF9vbmNlKSB7CisJCXByaW50ayhLRVJOX0lORk8gIkNQVUZSRVE6IG9uZGVtYW5kIHNhbXBsaW5nX3JhdGVfbWluICIKKwkJICAgICAgICJzeXNmcyBmaWxlIGlzIGRlcHJlY2F0ZWQgLSB1c2VkIGJ5OiAlc1xuIiwKKwkJICAgICAgIGN1cnJlbnQtPmNvbW0pOworCQlwcmludF9vbmNlID0gMTsKKwl9CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIE1JTl9TQU1QTElOR19SQVRFKTsKIH0KIAogI2RlZmluZSBkZWZpbmVfb25lX3JvKF9uYW1lKQkJXApAQCAtMjM4LDEzICsyNjcsMTEgQEAKIAlyZXQgPSBzc2NhbmYoYnVmLCAiJXUiLCAmaW5wdXQpOwogCiAJbXV0ZXhfbG9jaygmZGJzX211dGV4KTsKLQlpZiAocmV0ICE9IDEgfHwgaW5wdXQgPiBNQVhfU0FNUExJTkdfUkFURQotCQkgICAgIHx8IGlucHV0IDwgTUlOX1NBTVBMSU5HX1JBVEUpIHsKKwlpZiAocmV0ICE9IDEpIHsKIAkJbXV0ZXhfdW5sb2NrKCZkYnNfbXV0ZXgpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0KLQlkYnNfdHVuZXJzX2lucy5zYW1wbGluZ19yYXRlID0gaW5wdXQ7CisJZGJzX3R1bmVyc19pbnMuc2FtcGxpbmdfcmF0ZSA9IG1heChpbnB1dCwgbWluaW11bV9zYW1wbGluZ19yYXRlKCkpOwogCW11dGV4X3VubG9jaygmZGJzX211dGV4KTsKIAogCXJldHVybiBjb3VudDsKQEAgLTI3OSwxNCArMzA2LDE0IEBACiAJdW5zaWduZWQgaW50IGo7CiAKIAlyZXQgPSBzc2NhbmYoYnVmLCAiJXUiLCAmaW5wdXQpOwotCWlmICggcmV0ICE9IDEgKQorCWlmIChyZXQgIT0gMSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoIGlucHV0ID4gMSApCisJaWYgKGlucHV0ID4gMSkKIAkJaW5wdXQgPSAxOwogCiAJbXV0ZXhfbG9jaygmZGJzX211dGV4KTsKLQlpZiAoIGlucHV0ID09IGRic190dW5lcnNfaW5zLmlnbm9yZV9uaWNlICkgeyAvKiBub3RoaW5nIHRvIGRvICovCisJaWYgKGlucHV0ID09IGRic190dW5lcnNfaW5zLmlnbm9yZV9uaWNlKSB7IC8qIG5vdGhpbmcgdG8gZG8gKi8KIAkJbXV0ZXhfdW5sb2NrKCZkYnNfbXV0ZXgpOwogCQlyZXR1cm4gY291bnQ7CiAJfQpAQCAtMzM3LDcgKzM2NCw3IEBACiBkZWZpbmVfb25lX3J3KGlnbm9yZV9uaWNlX2xvYWQpOwogZGVmaW5lX29uZV9ydyhwb3dlcnNhdmVfYmlhcyk7CiAKLXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICogZGJzX2F0dHJpYnV0ZXNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkYnNfYXR0cmlidXRlc1tdID0gewogCSZzYW1wbGluZ19yYXRlX21heC5hdHRyLAogCSZzYW1wbGluZ19yYXRlX21pbi5hdHRyLAogCSZzYW1wbGluZ19yYXRlLmF0dHIsCkBAIC01MTIsOCArNTM5LDcgQEAKIAkJfQogCX0gZWxzZSB7CiAJCV9fY3B1ZnJlcV9kcml2ZXJfdGFyZ2V0KGRic19pbmZvLT5jdXJfcG9saWN5LAotCSAgICAgICAgICAgICAgICAgICAgICAgIAlkYnNfaW5mby0+ZnJlcV9sbywKLQkgICAgICAgICAgICAgICAgICAgICAgICAJQ1BVRlJFUV9SRUxBVElPTl9IKTsKKwkJCWRic19pbmZvLT5mcmVxX2xvLCBDUFVGUkVRX1JFTEFUSU9OX0gpOwogCX0KIAlxdWV1ZV9kZWxheWVkX3dvcmtfb24oY3B1LCBrb25kZW1hbmRfd3EsICZkYnNfaW5mby0+d29yaywgZGVsYXkpOwogCXVubG9ja19wb2xpY3lfcndzZW1fd3JpdGUoY3B1KTsKQEAgLTUzMCw3ICs1NTYsNyBAQAogCWRic19pbmZvLT5zYW1wbGVfdHlwZSA9IERCU19OT1JNQUxfU0FNUExFOwogCUlOSVRfREVMQVlFRF9XT1JLX0RFRkVSUkFCTEUoJmRic19pbmZvLT53b3JrLCBkb19kYnNfdGltZXIpOwogCXF1ZXVlX2RlbGF5ZWRfd29ya19vbihkYnNfaW5mby0+Y3B1LCBrb25kZW1hbmRfd3EsICZkYnNfaW5mby0+d29yaywKLQkgICAgICAgICAgICAgICAgICAgICAgZGVsYXkpOworCQlkZWxheSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkYnNfdGltZXJfZXhpdChzdHJ1Y3QgY3B1X2Ric19pbmZvX3MgKmRic19pbmZvKQpAQCAtNTkxLDExICs2MTcsOSBAQAogCQkJaWYgKGxhdGVuY3kgPT0gMCkKIAkJCQlsYXRlbmN5ID0gMTsKIAotCQkJZGVmX3NhbXBsaW5nX3JhdGUgPSBsYXRlbmN5ICoKLQkJCQkJREVGX1NBTVBMSU5HX1JBVEVfTEFURU5DWV9NVUxUSVBMSUVSOwotCi0JCQlpZiAoZGVmX3NhbXBsaW5nX3JhdGUgPCBNSU5fU1RBVF9TQU1QTElOR19SQVRFKQotCQkJCWRlZl9zYW1wbGluZ19yYXRlID0gTUlOX1NUQVRfU0FNUExJTkdfUkFURTsKKwkJCWRlZl9zYW1wbGluZ19yYXRlID0KKwkJCQltYXgobGF0ZW5jeSAqIExBVEVOQ1lfTVVMVElQTElFUiwKKwkJCQkgICAgTUlOX1NUQVRfU0FNUExJTkdfUkFURSk7CiAKIAkJCWRic190dW5lcnNfaW5zLnNhbXBsaW5nX3JhdGUgPSBkZWZfc2FtcGxpbmdfcmF0ZTsKIAkJfQpAQCAtNjE3LDEyICs2NDEsMTAgQEAKIAkJbXV0ZXhfbG9jaygmZGJzX211dGV4KTsKIAkJaWYgKHBvbGljeS0+bWF4IDwgdGhpc19kYnNfaW5mby0+Y3VyX3BvbGljeS0+Y3VyKQogCQkJX19jcHVmcmVxX2RyaXZlcl90YXJnZXQodGhpc19kYnNfaW5mby0+Y3VyX3BvbGljeSwKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgIHBvbGljeS0+bWF4LAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgQ1BVRlJFUV9SRUxBVElPTl9IKTsKKwkJCQlwb2xpY3ktPm1heCwgQ1BVRlJFUV9SRUxBVElPTl9IKTsKIAkJZWxzZSBpZiAocG9saWN5LT5taW4gPiB0aGlzX2Ric19pbmZvLT5jdXJfcG9saWN5LT5jdXIpCiAJCQlfX2NwdWZyZXFfZHJpdmVyX3RhcmdldCh0aGlzX2Ric19pbmZvLT5jdXJfcG9saWN5LAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgcG9saWN5LT5taW4sCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICBDUFVGUkVRX1JFTEFUSU9OX0wpOworCQkJCXBvbGljeS0+bWluLCBDUFVGUkVRX1JFTEFUSU9OX0wpOwogCQltdXRleF91bmxvY2soJmRic19tdXRleCk7CiAJCWJyZWFrOwogCX0KQEAgLTY3Nyw3ICs2OTksNyBAQAogTU9EVUxFX0FVVEhPUigiVmVua2F0ZXNoIFBhbGxpcGFkaSA8dmVua2F0ZXNoLnBhbGxpcGFkaUBpbnRlbC5jb20+Iik7CiBNT0RVTEVfQVVUSE9SKCJBbGV4ZXkgU3Rhcmlrb3Zza2l5IDxhbGV4ZXkueS5zdGFyaWtvdnNraXlAaW50ZWwuY29tPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCInY3B1ZnJlcV9vbmRlbWFuZCcgLSBBIGR5bmFtaWMgY3B1ZnJlcSBnb3Zlcm5vciBmb3IgIgotICAgICAgICAgICAgICAgICAgICJMb3cgTGF0ZW5jeSBGcmVxdWVuY3kgVHJhbnNpdGlvbiBjYXBhYmxlIHByb2Nlc3NvcnMiKTsKKwkiTG93IExhdGVuY3kgRnJlcXVlbmN5IFRyYW5zaXRpb24gY2FwYWJsZSBwcm9jZXNzb3JzIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKICNpZmRlZiBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfT05ERU1BTkQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX3N0YXRzLmMgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9zdGF0cy5jCmluZGV4IGMwZmY5N2QuLjVhNjJkNjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX3N0YXRzLmMKKysrIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfc3RhdHMuYwpAQCAtMiw3ICsyLDcgQEAKICAqICBkcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9zdGF0cy5jCiAgKgogICogIENvcHlyaWdodCAoQykgMjAwMy0yMDA0IFZlbmthdGVzaCBQYWxsaXBhZGkgPHZlbmthdGVzaC5wYWxsaXBhZGlAaW50ZWwuY29tPi4KLSAqCSAgICAgIChDKSAyMDA0IFpvdSBOYW4gaGFpIDxuYW5oYWkuem91QGludGVsLmNvbT4uCisgKiAgKEMpIDIwMDQgWm91IE5hbiBoYWkgPG5hbmhhaS56b3VAaW50ZWwuY29tPi4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKQEAgLTIzLDcgKzIzLDcgQEAKIAogc3RhdGljIHNwaW5sb2NrX3QgY3B1ZnJlcV9zdGF0c19sb2NrOwogCi0jZGVmaW5lIENQVUZSRVFfU1RBVERFVklDRV9BVFRSKF9uYW1lLF9tb2RlLF9zaG93KSBcCisjZGVmaW5lIENQVUZSRVFfU1RBVERFVklDRV9BVFRSKF9uYW1lLCBfbW9kZSwgX3Nob3cpIFwKIHN0YXRpYyBzdHJ1Y3QgZnJlcV9hdHRyIF9hdHRyXyMjX25hbWUgPSB7XAogCS5hdHRyID0gey5uYW1lID0gX19zdHJpbmdpZnkoX25hbWUpLCAubW9kZSA9IF9tb2RlLCB9LCBcCiAJLnNob3cgPSBfc2hvdyxcCkBAIC01MCw4ICs1MCw3IEBACiAJc3NpemVfdCgqc2hvdykgKHN0cnVjdCBjcHVmcmVxX3N0YXRzICosIGNoYXIgKik7CiB9OwogCi1zdGF0aWMgaW50Ci1jcHVmcmVxX3N0YXRzX3VwZGF0ZSAodW5zaWduZWQgaW50IGNwdSkKK3N0YXRpYyBpbnQgY3B1ZnJlcV9zdGF0c191cGRhdGUodW5zaWduZWQgaW50IGNwdSkKIHsKIAlzdHJ1Y3QgY3B1ZnJlcV9zdGF0cyAqc3RhdDsKIAl1bnNpZ25lZCBsb25nIGxvbmcgY3VyX3RpbWU7CkBAIC02OCw4ICs2Nyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzc2l6ZV90Ci1zaG93X3RvdGFsX3RyYW5zKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBzaG93X3RvdGFsX3RyYW5zKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LCBjaGFyICpidWYpCiB7CiAJc3RydWN0IGNwdWZyZXFfc3RhdHMgKnN0YXQgPSBwZXJfY3B1KGNwdWZyZXFfc3RhdHNfdGFibGUsIHBvbGljeS0+Y3B1KTsKIAlpZiAoIXN0YXQpCkBAIC03OCw4ICs3Niw3IEBACiAJCQlwZXJfY3B1KGNwdWZyZXFfc3RhdHNfdGFibGUsIHN0YXQtPmNwdSktPnRvdGFsX3RyYW5zKTsKIH0KIAotc3RhdGljIHNzaXplX3QKLXNob3dfdGltZV9pbl9zdGF0ZShzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3Qgc2hvd190aW1lX2luX3N0YXRlKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LCBjaGFyICpidWYpCiB7CiAJc3NpemVfdCBsZW4gPSAwOwogCWludCBpOwpAQCAtODksMTQgKzg2LDE0IEBACiAJY3B1ZnJlcV9zdGF0c191cGRhdGUoc3RhdC0+Y3B1KTsKIAlmb3IgKGkgPSAwOyBpIDwgc3RhdC0+c3RhdGVfbnVtOyBpKyspIHsKIAkJbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAiJXUgJWxsdVxuIiwgc3RhdC0+ZnJlcV90YWJsZVtpXSwKLQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpY3B1dGltZTY0X3RvX2Nsb2NrX3Qoc3RhdC0+dGltZV9pbl9zdGF0ZVtpXSkpOworCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykKKwkJCWNwdXRpbWU2NF90b19jbG9ja190KHN0YXQtPnRpbWVfaW5fc3RhdGVbaV0pKTsKIAl9CiAJcmV0dXJuIGxlbjsKIH0KIAogI2lmZGVmIENPTkZJR19DUFVfRlJFUV9TVEFUX0RFVEFJTFMKLXN0YXRpYyBzc2l6ZV90Ci1zaG93X3RyYW5zX3RhYmxlKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBzaG93X3RyYW5zX3RhYmxlKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LCBjaGFyICpidWYpCiB7CiAJc3NpemVfdCBsZW4gPSAwOwogCWludCBpLCBqOwpAQCAtMTM5LDExICsxMzYsMTEgQEAKIAkJcmV0dXJuIFBBR0VfU0laRTsKIAlyZXR1cm4gbGVuOwogfQotQ1BVRlJFUV9TVEFUREVWSUNFX0FUVFIodHJhbnNfdGFibGUsMDQ0NCxzaG93X3RyYW5zX3RhYmxlKTsKK0NQVUZSRVFfU1RBVERFVklDRV9BVFRSKHRyYW5zX3RhYmxlLCAwNDQ0LCBzaG93X3RyYW5zX3RhYmxlKTsKICNlbmRpZgogCi1DUFVGUkVRX1NUQVRERVZJQ0VfQVRUUih0b3RhbF90cmFucywwNDQ0LHNob3dfdG90YWxfdHJhbnMpOwotQ1BVRlJFUV9TVEFUREVWSUNFX0FUVFIodGltZV9pbl9zdGF0ZSwwNDQ0LHNob3dfdGltZV9pbl9zdGF0ZSk7CitDUFVGUkVRX1NUQVRERVZJQ0VfQVRUUih0b3RhbF90cmFucywgMDQ0NCwgc2hvd190b3RhbF90cmFucyk7CitDUFVGUkVRX1NUQVRERVZJQ0VfQVRUUih0aW1lX2luX3N0YXRlLCAwNDQ0LCBzaG93X3RpbWVfaW5fc3RhdGUpOwogCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZGVmYXVsdF9hdHRyc1tdID0gewogCSZfYXR0cl90b3RhbF90cmFucy5hdHRyLApAQCAtMTU4LDggKzE1NSw3IEBACiAJLm5hbWUgPSAic3RhdHMiCiB9OwogCi1zdGF0aWMgaW50Ci1mcmVxX3RhYmxlX2dldF9pbmRleChzdHJ1Y3QgY3B1ZnJlcV9zdGF0cyAqc3RhdCwgdW5zaWduZWQgaW50IGZyZXEpCitzdGF0aWMgaW50IGZyZXFfdGFibGVfZ2V0X2luZGV4KHN0cnVjdCBjcHVmcmVxX3N0YXRzICpzdGF0LCB1bnNpZ25lZCBpbnQgZnJlcSkKIHsKIAlpbnQgaW5kZXg7CiAJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgc3RhdC0+bWF4X3N0YXRlOyBpbmRleCsrKQpAQCAtMTgzLDggKzE3OSw3IEBACiAJCWNwdWZyZXFfY3B1X3B1dChwb2xpY3kpOwogfQogCi1zdGF0aWMgaW50Ci1jcHVmcmVxX3N0YXRzX2NyZWF0ZV90YWJsZSAoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksCitzdGF0aWMgaW50IGNwdWZyZXFfc3RhdHNfY3JlYXRlX3RhYmxlKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LAogCQlzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgKnRhYmxlKQogewogCXVuc2lnbmVkIGludCBpLCBqLCBjb3VudCA9IDAsIHJldCA9IDA7CkBAIC0xOTQsNyArMTg5LDggQEAKIAl1bnNpZ25lZCBpbnQgY3B1ID0gcG9saWN5LT5jcHU7CiAJaWYgKHBlcl9jcHUoY3B1ZnJlcV9zdGF0c190YWJsZSwgY3B1KSkKIAkJcmV0dXJuIC1FQlVTWTsKLQlpZiAoKHN0YXQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY3B1ZnJlcV9zdGF0cyksIEdGUF9LRVJORUwpKSA9PSBOVUxMKQorCXN0YXQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY3B1ZnJlcV9zdGF0cyksIEdGUF9LRVJORUwpOworCWlmICgoc3RhdCkgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlkYXRhID0gY3B1ZnJlcV9jcHVfZ2V0KGNwdSk7CkBAIC0yMDMsMTMgKzE5OSwxNCBAQAogCQlnb3RvIGVycm9yX2dldF9mYWlsOwogCX0KIAotCWlmICgocmV0ID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZkYXRhLT5rb2JqLCAmc3RhdHNfYXR0cl9ncm91cCkpKQorCXJldCA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmZGF0YS0+a29iaiwgJnN0YXRzX2F0dHJfZ3JvdXApOworCWlmIChyZXQpCiAJCWdvdG8gZXJyb3Jfb3V0OwogCiAJc3RhdC0+Y3B1ID0gY3B1OwogCXBlcl9jcHUoY3B1ZnJlcV9zdGF0c190YWJsZSwgY3B1KSA9IHN0YXQ7CiAKLQlmb3IgKGk9MDsgdGFibGVbaV0uZnJlcXVlbmN5ICE9IENQVUZSRVFfVEFCTEVfRU5EOyBpKyspIHsKKwlmb3IgKGkgPSAwOyB0YWJsZVtpXS5mcmVxdWVuY3kgIT0gQ1BVRlJFUV9UQUJMRV9FTkQ7IGkrKykgewogCQl1bnNpZ25lZCBpbnQgZnJlcSA9IHRhYmxlW2ldLmZyZXF1ZW5jeTsKIAkJaWYgKGZyZXEgPT0gQ1BVRlJFUV9FTlRSWV9JTlZBTElEKQogCQkJY29udGludWU7CkBAIC0yNTUsOSArMjUyLDggQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50Ci1jcHVmcmVxX3N0YXRfbm90aWZpZXJfcG9saWN5IChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIHZhbCwKLQkJdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgY3B1ZnJlcV9zdGF0X25vdGlmaWVyX3BvbGljeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLAorCQl1bnNpZ25lZCBsb25nIHZhbCwgdm9pZCAqZGF0YSkKIHsKIAlpbnQgcmV0OwogCXN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5ID0gZGF0YTsKQEAgLTI2OCwxNCArMjY0LDE0IEBACiAJdGFibGUgPSBjcHVmcmVxX2ZyZXF1ZW5jeV9nZXRfdGFibGUoY3B1KTsKIAlpZiAoIXRhYmxlKQogCQlyZXR1cm4gMDsKLQlpZiAoKHJldCA9IGNwdWZyZXFfc3RhdHNfY3JlYXRlX3RhYmxlKHBvbGljeSwgdGFibGUpKSkKKwlyZXQgPSBjcHVmcmVxX3N0YXRzX2NyZWF0ZV90YWJsZShwb2xpY3ksIHRhYmxlKTsKKwlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50Ci1jcHVmcmVxX3N0YXRfbm90aWZpZXJfdHJhbnMgKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgdmFsLAotCQl2b2lkICpkYXRhKQorc3RhdGljIGludCBjcHVmcmVxX3N0YXRfbm90aWZpZXJfdHJhbnMoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwKKwkJdW5zaWduZWQgbG9uZyB2YWwsIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IGNwdWZyZXFfZnJlcXMgKmZyZXEgPSBkYXRhOwogCXN0cnVjdCBjcHVmcmVxX3N0YXRzICpzdGF0OwpAQCAtMzQwLDE5ICszMzYsMjAgQEAKIAkubm90aWZpZXJfY2FsbCA9IGNwdWZyZXFfc3RhdF9ub3RpZmllcl90cmFucwogfTsKIAotc3RhdGljIGludAotX19pbml0IGNwdWZyZXFfc3RhdHNfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgY3B1ZnJlcV9zdGF0c19pbml0KHZvaWQpCiB7CiAJaW50IHJldDsKIAl1bnNpZ25lZCBpbnQgY3B1OwogCiAJc3Bpbl9sb2NrX2luaXQoJmNwdWZyZXFfc3RhdHNfbG9jayk7Ci0JaWYgKChyZXQgPSBjcHVmcmVxX3JlZ2lzdGVyX25vdGlmaWVyKCZub3RpZmllcl9wb2xpY3lfYmxvY2ssCi0JCQkJQ1BVRlJFUV9QT0xJQ1lfTk9USUZJRVIpKSkKKwlyZXQgPSBjcHVmcmVxX3JlZ2lzdGVyX25vdGlmaWVyKCZub3RpZmllcl9wb2xpY3lfYmxvY2ssCisJCQkJQ1BVRlJFUV9QT0xJQ1lfTk9USUZJRVIpOworCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlpZiAoKHJldCA9IGNwdWZyZXFfcmVnaXN0ZXJfbm90aWZpZXIoJm5vdGlmaWVyX3RyYW5zX2Jsb2NrLAotCQkJCUNQVUZSRVFfVFJBTlNJVElPTl9OT1RJRklFUikpKSB7CisJcmV0ID0gY3B1ZnJlcV9yZWdpc3Rlcl9ub3RpZmllcigmbm90aWZpZXJfdHJhbnNfYmxvY2ssCisJCQkJQ1BVRlJFUV9UUkFOU0lUSU9OX05PVElGSUVSKTsKKwlpZiAocmV0KSB7CiAJCWNwdWZyZXFfdW5yZWdpc3Rlcl9ub3RpZmllcigmbm90aWZpZXJfcG9saWN5X2Jsb2NrLAogCQkJCUNQVUZSRVFfUE9MSUNZX05PVElGSUVSKTsKIAkJcmV0dXJuIHJldDsKQEAgLTM2NCw4ICszNjEsNyBAQAogCX0KIAlyZXR1cm4gMDsKIH0KLXN0YXRpYyB2b2lkCi1fX2V4aXQgY3B1ZnJlcV9zdGF0c19leGl0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgY3B1ZnJlcV9zdGF0c19leGl0KHZvaWQpCiB7CiAJdW5zaWduZWQgaW50IGNwdTsKIApAQCAtMzc5LDEwICszNzUsMTAgQEAKIAl9CiB9CiAKLU1PRFVMRV9BVVRIT1IgKCJab3UgTmFuIGhhaSA8bmFuaGFpLnpvdUBpbnRlbC5jb20+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04gKCInY3B1ZnJlcV9zdGF0cycgLSBBIGRyaXZlciB0byBleHBvcnQgY3B1ZnJlcSBzdGF0cyAiCitNT0RVTEVfQVVUSE9SKCJab3UgTmFuIGhhaSA8bmFuaGFpLnpvdUBpbnRlbC5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIidjcHVmcmVxX3N0YXRzJyAtIEEgZHJpdmVyIHRvIGV4cG9ydCBjcHVmcmVxIHN0YXRzICIKIAkJCQkidGhyb3VnaCBzeXNmcyBmaWxlc3lzdGVtIik7Ci1NT0RVTEVfTElDRU5TRSAoIkdQTCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiBtb2R1bGVfaW5pdChjcHVmcmVxX3N0YXRzX2luaXQpOwogbW9kdWxlX2V4aXQoY3B1ZnJlcV9zdGF0c19leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX3VzZXJzcGFjZS5jIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfdXNlcnNwYWNlLmMKaW5kZXggMTQ0MmJiYS4uNjZkMmQxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfdXNlcnNwYWNlLmMKKysrIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfdXNlcnNwYWNlLmMKQEAgLTI0LDkgKzI0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotCi0KIC8qKgogICogQSBmZXcgdmFsdWVzIG5lZWRlZCBieSB0aGUgdXNlcnNwYWNlIGdvdmVybm9yCiAgKi8KQEAgLTM3LDcgKzM0LDcgQEAKIAkJCQkJCQl1c2Vyc3BhY2UgKi8KIHN0YXRpYyBERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBpbnQsIGNwdV9pc19tYW5hZ2VkKTsKIAotc3RhdGljIERFRklORV9NVVRFWAkodXNlcnNwYWNlX211dGV4KTsKK3N0YXRpYyBERUZJTkVfTVVURVgodXNlcnNwYWNlX211dGV4KTsKIHN0YXRpYyBpbnQgY3B1c191c2luZ191c2Vyc3BhY2VfZ292ZXJub3I7CiAKICNkZWZpbmUgZHByaW50ayhtc2cuLi4pIFwKQEAgLTQ2LDkgKzQzLDkgQEAKIC8qIGtlZXAgdHJhY2sgb2YgZnJlcXVlbmN5IHRyYW5zaXRpb25zICovCiBzdGF0aWMgaW50CiB1c2Vyc3BhY2VfY3B1ZnJlcV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIHZhbCwKLSAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZGF0YSkKKwl2b2lkICpkYXRhKQogewotICAgICAgICBzdHJ1Y3QgY3B1ZnJlcV9mcmVxcyAqZnJlcSA9IGRhdGE7CisJc3RydWN0IGNwdWZyZXFfZnJlcXMgKmZyZXEgPSBkYXRhOwogCiAJaWYgKCFwZXJfY3B1KGNwdV9pc19tYW5hZ2VkLCBmcmVxLT5jcHUpKQogCQlyZXR1cm4gMDsKQEAgLTU3LDExICs1NCwxMSBAQAogCQkJZnJlcS0+Y3B1LCBmcmVxLT5uZXcpOwogCXBlcl9jcHUoY3B1X2N1cl9mcmVxLCBmcmVxLT5jcHUpID0gZnJlcS0+bmV3OwogCi0gICAgICAgIHJldHVybiAwOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHVzZXJzcGFjZV9jcHVmcmVxX25vdGlmaWVyX2Jsb2NrID0gewotICAgICAgICAubm90aWZpZXJfY2FsbCAgPSB1c2Vyc3BhY2VfY3B1ZnJlcV9ub3RpZmllcgorCS5ub3RpZmllcl9jYWxsICA9IHVzZXJzcGFjZV9jcHVmcmVxX25vdGlmaWVyCiB9OwogCiAKQEAgLTkzLDggKzkwLDExIEBACiAJICogV2UncmUgc2FmZSBmcm9tIGNvbmN1cnJlbnQgY2FsbHMgdG8gLT50YXJnZXQoKSBoZXJlCiAJICogYXMgd2UgaG9sZCB0aGUgdXNlcnNwYWNlX211dGV4IGxvY2suIElmIHdlIHdlcmUgY2FsbGluZwogCSAqIGNwdWZyZXFfZHJpdmVyX3RhcmdldCwgYSBkZWFkbG9jayBzaXR1YXRpb24gbWlnaHQgb2NjdXI6Ci0JICogQTogY3B1ZnJlcV9zZXQgKGxvY2sgdXNlcnNwYWNlX211dGV4KSAtPiBjcHVmcmVxX2RyaXZlcl90YXJnZXQobG9jayBwb2xpY3ktPmxvY2spCi0JICogQjogY3B1ZnJlcV9zZXRfcG9saWN5KGxvY2sgcG9saWN5LT5sb2NrKSAtPiBfX2NwdWZyZXFfZ292ZXJub3IgLT4gY3B1ZnJlcV9nb3Zlcm5vcl91c2Vyc3BhY2UgKGxvY2sgdXNlcnNwYWNlX211dGV4KQorCSAqIEE6IGNwdWZyZXFfc2V0IChsb2NrIHVzZXJzcGFjZV9tdXRleCkgLT4KKwkgKiAgICAgIGNwdWZyZXFfZHJpdmVyX3RhcmdldChsb2NrIHBvbGljeS0+bG9jaykKKwkgKiBCOiBjcHVmcmVxX3NldF9wb2xpY3kobG9jayBwb2xpY3ktPmxvY2spIC0+CisJICogICAgICBfX2NwdWZyZXFfZ292ZXJub3IgLT4KKwkgKiAgICAgICAgIGNwdWZyZXFfZ292ZXJub3JfdXNlcnNwYWNlIChsb2NrIHVzZXJzcGFjZV9tdXRleCkKIAkgKi8KIAlyZXQgPSBfX2NwdWZyZXFfZHJpdmVyX3RhcmdldChwb2xpY3ksIGZyZXEsIENQVUZSRVFfUkVMQVRJT05fTCk7CiAKQEAgLTIxMCw5ICsyMTAsMTAgQEAKIH0KIAogCi1NT0RVTEVfQVVUSE9SICgiRG9taW5payBCcm9kb3dza2kgPGxpbnV4QGJyb2RvLmRlPiwgUnVzc2VsbCBLaW5nIDxybWtAYXJtLmxpbnV4Lm9yZy51az4iKTsKLU1PRFVMRV9ERVNDUklQVElPTiAoIkNQVWZyZXEgcG9saWN5IGdvdmVybm9yICd1c2Vyc3BhY2UnIik7Ci1NT0RVTEVfTElDRU5TRSAoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiRG9taW5payBCcm9kb3dza2kgPGxpbnV4QGJyb2RvLmRlPiwgIgorCQkiUnVzc2VsbCBLaW5nIDxybWtAYXJtLmxpbnV4Lm9yZy51az4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ1BVZnJlcSBwb2xpY3kgZ292ZXJub3IgJ3VzZXJzcGFjZSciKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogI2lmZGVmIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9VU0VSU1BBQ0UKIGZzX2luaXRjYWxsKGNwdWZyZXFfZ292X3VzZXJzcGFjZV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1ZnJlcS9mcmVxX3RhYmxlLmMgYi9kcml2ZXJzL2NwdWZyZXEvZnJlcV90YWJsZS5jCmluZGV4IDkwNzFkODAuLmE5YmQzYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3B1ZnJlcS9mcmVxX3RhYmxlLmMKKysrIGIvZHJpdmVycy9jcHVmcmVxL2ZyZXFfdGFibGUuYwpAQCAtMjgsNyArMjgsNyBAQAogCXVuc2lnbmVkIGludCBtYXhfZnJlcSA9IDA7CiAJdW5zaWduZWQgaW50IGk7CiAKLQlmb3IgKGk9MDsgKHRhYmxlW2ldLmZyZXF1ZW5jeSAhPSBDUFVGUkVRX1RBQkxFX0VORCk7IGkrKykgeworCWZvciAoaSA9IDA7ICh0YWJsZVtpXS5mcmVxdWVuY3kgIT0gQ1BVRlJFUV9UQUJMRV9FTkQpOyBpKyspIHsKIAkJdW5zaWduZWQgaW50IGZyZXEgPSB0YWJsZVtpXS5mcmVxdWVuY3k7CiAJCWlmIChmcmVxID09IENQVUZSRVFfRU5UUllfSU5WQUxJRCkgewogCQkJZHByaW50aygidGFibGUgZW50cnkgJXUgaXMgaW52YWxpZCwgc2tpcHBpbmdcbiIsIGkpOwpAQCAtNzAsNyArNzAsNyBAQAogCWNwdWZyZXFfdmVyaWZ5X3dpdGhpbl9saW1pdHMocG9saWN5LCBwb2xpY3ktPmNwdWluZm8ubWluX2ZyZXEsCiAJCQkJICAgICBwb2xpY3ktPmNwdWluZm8ubWF4X2ZyZXEpOwogCi0JZm9yIChpPTA7ICh0YWJsZVtpXS5mcmVxdWVuY3kgIT0gQ1BVRlJFUV9UQUJMRV9FTkQpOyBpKyspIHsKKwlmb3IgKGkgPSAwOyAodGFibGVbaV0uZnJlcXVlbmN5ICE9IENQVUZSRVFfVEFCTEVfRU5EKTsgaSsrKSB7CiAJCXVuc2lnbmVkIGludCBmcmVxID0gdGFibGVbaV0uZnJlcXVlbmN5OwogCQlpZiAoZnJlcSA9PSBDUFVGUkVRX0VOVFJZX0lOVkFMSUQpCiAJCQljb250aW51ZTsKQEAgLTEyNSwxMyArMTI1LDEzIEBACiAJaWYgKCFjcHVfb25saW5lKHBvbGljeS0+Y3B1KSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlmb3IgKGk9MDsgKHRhYmxlW2ldLmZyZXF1ZW5jeSAhPSBDUFVGUkVRX1RBQkxFX0VORCk7IGkrKykgeworCWZvciAoaSA9IDA7ICh0YWJsZVtpXS5mcmVxdWVuY3kgIT0gQ1BVRlJFUV9UQUJMRV9FTkQpOyBpKyspIHsKIAkJdW5zaWduZWQgaW50IGZyZXEgPSB0YWJsZVtpXS5mcmVxdWVuY3k7CiAJCWlmIChmcmVxID09IENQVUZSRVFfRU5UUllfSU5WQUxJRCkKIAkJCWNvbnRpbnVlOwogCQlpZiAoKGZyZXEgPCBwb2xpY3ktPm1pbikgfHwgKGZyZXEgPiBwb2xpY3ktPm1heCkpCiAJCQljb250aW51ZTsKLQkJc3dpdGNoKHJlbGF0aW9uKSB7CisJCXN3aXRjaCAocmVsYXRpb24pIHsKIAkJY2FzZSBDUFVGUkVRX1JFTEFUSU9OX0g6CiAJCQlpZiAoZnJlcSA8PSB0YXJnZXRfZnJlcSkgewogCQkJCWlmIChmcmVxID49IG9wdGltYWwuZnJlcXVlbmN5KSB7CkBAIC0xNzgsNyArMTc4LDcgQEAKIC8qKgogICogc2hvd19hdmFpbGFibGVfZnJlcXMgLSBzaG93IGF2YWlsYWJsZSBmcmVxdWVuY2llcyBmb3IgdGhlIHNwZWNpZmllZCBDUFUKICAqLwotc3RhdGljIHNzaXplX3Qgc2hvd19hdmFpbGFibGVfZnJlcXMgKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBzaG93X2F2YWlsYWJsZV9mcmVxcyhzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwgY2hhciAqYnVmKQogewogCXVuc2lnbmVkIGludCBpID0gMDsKIAl1bnNpZ25lZCBpbnQgY3B1ID0gcG9saWN5LT5jcHU7CkBAIC0xOTAsNyArMTkwLDcgQEAKIAogCXRhYmxlID0gcGVyX2NwdShzaG93X3RhYmxlLCBjcHUpOwogCi0JZm9yIChpPTA7ICh0YWJsZVtpXS5mcmVxdWVuY3kgIT0gQ1BVRlJFUV9UQUJMRV9FTkQpOyBpKyspIHsKKwlmb3IgKGkgPSAwOyAodGFibGVbaV0uZnJlcXVlbmN5ICE9IENQVUZSRVFfVEFCTEVfRU5EKTsgaSsrKSB7CiAJCWlmICh0YWJsZVtpXS5mcmVxdWVuY3kgPT0gQ1BVRlJFUV9FTlRSWV9JTlZBTElEKQogCQkJY29udGludWU7CiAJCWNvdW50ICs9IHNwcmludGYoJmJ1Zltjb3VudF0sICIlZCAiLCB0YWJsZVtpXS5mcmVxdWVuY3kpOwpAQCAtMjM0LDYgKzIzNCw2IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChjcHVmcmVxX2ZyZXF1ZW5jeV9nZXRfdGFibGUpOwogCi1NT0RVTEVfQVVUSE9SICgiRG9taW5payBCcm9kb3dza2kgPGxpbnV4QGJyb2RvLmRlPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OICgiQ1BVZnJlcSBmcmVxdWVuY3kgdGFibGUgaGVscGVycyIpOwotTU9EVUxFX0xJQ0VOU0UgKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkRvbWluaWsgQnJvZG93c2tpIDxsaW51eEBicm9kby5kZT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ1BVZnJlcSBmcmVxdWVuY3kgdGFibGUgaGVscGVycyIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vS2NvbmZpZyBiL2RyaXZlcnMvY3J5cHRvL0tjb25maWcKaW5kZXggZTUyMjE0NC4uMDFhZmQ3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcnlwdG8vS2NvbmZpZworKysgYi9kcml2ZXJzL2NyeXB0by9LY29uZmlnCkBAIC04Niw3ICs4Niw3IEBACiBjb25maWcgQ1JZUFRPX1NIQTFfUzM5MAogCXRyaXN0YXRlICJTSEExIGRpZ2VzdCBhbGdvcml0aG0iCiAJZGVwZW5kcyBvbiBTMzkwCi0Jc2VsZWN0IENSWVBUT19BTEdBUEkKKwlzZWxlY3QgQ1JZUFRPX0hBU0gKIAloZWxwCiAJICBUaGlzIGlzIHRoZSBzMzkwIGhhcmR3YXJlIGFjY2VsZXJhdGVkIGltcGxlbWVudGF0aW9uIG9mIHRoZQogCSAgU0hBLTEgc2VjdXJlIGhhc2ggc3RhbmRhcmQgKEZJUFMgMTgwLTEvREZJUFMgMTgwLTIpLgpAQCAtOTQsNyArOTQsNyBAQAogY29uZmlnIENSWVBUT19TSEEyNTZfUzM5MAogCXRyaXN0YXRlICJTSEEyNTYgZGlnZXN0IGFsZ29yaXRobSIKIAlkZXBlbmRzIG9uIFMzOTAKLQlzZWxlY3QgQ1JZUFRPX0FMR0FQSQorCXNlbGVjdCBDUllQVE9fSEFTSAogCWhlbHAKIAkgIFRoaXMgaXMgdGhlIHMzOTAgaGFyZHdhcmUgYWNjZWxlcmF0ZWQgaW1wbGVtZW50YXRpb24gb2YgdGhlCiAJICBTSEEyNTYgc2VjdXJlIGhhc2ggc3RhbmRhcmQgKERGSVBTIDE4MC0yKS4KQEAgLTEwNSw3ICsxMDUsNyBAQAogY29uZmlnIENSWVBUT19TSEE1MTJfUzM5MAogCXRyaXN0YXRlICJTSEEzODQgYW5kIFNIQTUxMiBkaWdlc3QgYWxnb3JpdGhtIgogCWRlcGVuZHMgb24gUzM5MAotCXNlbGVjdCBDUllQVE9fQUxHQVBJCisJc2VsZWN0IENSWVBUT19IQVNICiAJaGVscAogCSAgVGhpcyBpcyB0aGUgczM5MCBoYXJkd2FyZSBhY2NlbGVyYXRlZCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUKIAkgIFNIQTUxMiBzZWN1cmUgaGFzaCBzdGFuZGFyZC4KQEAgLTIwMCw0ICsyMDAsMTMgQEAKIAloZWxwCiAJICBEcml2ZXIgZm9yIHRoZSBJWFA0eHggTlBFIGNyeXB0byBlbmdpbmUuCiAKK2NvbmZpZyBDUllQVE9fREVWX1BQQzRYWAorCXRyaXN0YXRlICJEcml2ZXIgQU1DQyBQUEM0eHggY3J5cHRvIGFjY2VsZXJhdG9yIgorCWRlcGVuZHMgb24gUFBDICYmIDR4eAorCXNlbGVjdCBDUllQVE9fSEFTSAorCXNlbGVjdCBDUllQVE9fQUxHQVBJCisJc2VsZWN0IENSWVBUT19CTEtDSVBIRVIKKwloZWxwCisJICBUaGlzIG9wdGlvbiBhbGxvd3MgeW91IHRvIGhhdmUgc3VwcG9ydCBmb3IgQU1DQyBjcnlwdG8gYWNjZWxlcmF0aW9uLgorCiBlbmRpZiAjIENSWVBUT19IVwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vTWFrZWZpbGUgYi9kcml2ZXJzL2NyeXB0by9NYWtlZmlsZQppbmRleCA3MzU1N2IyLi45YmY0YTJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NyeXB0by9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2NyeXB0by9NYWtlZmlsZQpAQCAtNCwzICs0LDQgQEAKIG9iai0kKENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WCkgKz0gaGlmbl83OTV4Lm8KIG9iai0kKENPTkZJR19DUllQVE9fREVWX1RBTElUT1MpICs9IHRhbGl0b3Mubwogb2JqLSQoQ09ORklHX0NSWVBUT19ERVZfSVhQNFhYKSArPSBpeHA0eHhfY3J5cHRvLm8KK29iai0kKENPTkZJR19DUllQVE9fREVWX1BQQzRYWCkgKz0gYW1jYy8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3J5cHRvL2FtY2MvTWFrZWZpbGUgYi9kcml2ZXJzL2NyeXB0by9hbWNjL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhMzc2ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2NyeXB0by9hbWNjL01ha2VmaWxlCkBAIC0wLDAgKzEsMiBAQAorb2JqLSQoQ09ORklHX0NSWVBUT19ERVZfUFBDNFhYKSArPSBjcnlwdG80eHgubworY3J5cHRvNHh4LW9ianMgOj0gIGNyeXB0bzR4eF9jb3JlLm8gY3J5cHRvNHh4X2FsZy5vIGNyeXB0bzR4eF9zYS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9hbWNjL2NyeXB0bzR4eF9hbGcuYyBiL2RyaXZlcnMvY3J5cHRvL2FtY2MvY3J5cHRvNHh4X2FsZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxYjZlMWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2NyeXB0by9hbWNjL2NyeXB0bzR4eF9hbGcuYwpAQCAtMCwwICsxLDI5MyBAQAorLyoqCisgKiBBTUNDIFNvQyBQUEM0eHggQ3J5cHRvIERyaXZlcgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBBcHBsaWVkIE1pY3JvIENpcmN1aXRzIENvcnBvcmF0aW9uLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gSmFtZXMgSHNpYW8gPGpoc2lhb0BhbWNjLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIExpbnV4IGNyeXB0byBhbGdvcml0aG1zLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9ja190eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CisjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CisjaW5jbHVkZSA8bGludXgvaGFzaC5oPgorI2luY2x1ZGUgPGNyeXB0by9pbnRlcm5hbC9oYXNoLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxjcnlwdG8vYWxnYXBpLmg+CisjaW5jbHVkZSA8Y3J5cHRvL2Flcy5oPgorI2luY2x1ZGUgPGNyeXB0by9zaGEuaD4KKyNpbmNsdWRlICJjcnlwdG80eHhfcmVnX2RlZi5oIgorI2luY2x1ZGUgImNyeXB0bzR4eF9zYS5oIgorI2luY2x1ZGUgImNyeXB0bzR4eF9jb3JlLmgiCisKK3ZvaWQgc2V0X2R5bmFtaWNfc2FfY29tbWFuZF8wKHN0cnVjdCBkeW5hbWljX3NhX2N0bCAqc2EsIHUzMiBzYXZlX2gsCisJCQkgICAgICB1MzIgc2F2ZV9pdiwgdTMyIGxkX2gsIHUzMiBsZF9pdiwgdTMyIGhkcl9wcm9jLAorCQkJICAgICAgdTMyIGgsIHUzMiBjLCB1MzIgcGFkX3R5cGUsIHUzMiBvcF9ncnAsIHUzMiBvcCwKKwkJCSAgICAgIHUzMiBkaXIpCit7CisJc2EtPnNhX2NvbW1hbmRfMC53ID0gMDsKKwlzYS0+c2FfY29tbWFuZF8wLmJmLnNhdmVfaGFzaF9zdGF0ZSA9IHNhdmVfaDsKKwlzYS0+c2FfY29tbWFuZF8wLmJmLnNhdmVfaXYgPSBzYXZlX2l2OworCXNhLT5zYV9jb21tYW5kXzAuYmYubG9hZF9oYXNoX3N0YXRlID0gbGRfaDsKKwlzYS0+c2FfY29tbWFuZF8wLmJmLmxvYWRfaXYgPSBsZF9pdjsKKwlzYS0+c2FfY29tbWFuZF8wLmJmLmhkcl9wcm9jID0gaGRyX3Byb2M7CisJc2EtPnNhX2NvbW1hbmRfMC5iZi5oYXNoX2FsZyA9IGg7CisJc2EtPnNhX2NvbW1hbmRfMC5iZi5jaXBoZXJfYWxnID0gYzsKKwlzYS0+c2FfY29tbWFuZF8wLmJmLnBhZF90eXBlID0gcGFkX3R5cGUgJiAzOworCXNhLT5zYV9jb21tYW5kXzAuYmYuZXh0ZW5kX3BhZCA9IHBhZF90eXBlID4+IDI7CisJc2EtPnNhX2NvbW1hbmRfMC5iZi5vcF9ncm91cCA9IG9wX2dycDsKKwlzYS0+c2FfY29tbWFuZF8wLmJmLm9wY29kZSA9IG9wOworCXNhLT5zYV9jb21tYW5kXzAuYmYuZGlyID0gZGlyOworfQorCit2b2lkIHNldF9keW5hbWljX3NhX2NvbW1hbmRfMShzdHJ1Y3QgZHluYW1pY19zYV9jdGwgKnNhLCB1MzIgY20sIHUzMiBobWFjX21jLAorCQkJICAgICAgdTMyIGNmYiwgdTMyIGVzbiwgdTMyIHNuX21hc2ssIHUzMiBtdXRlLAorCQkJICAgICAgdTMyIGNwX3BhZCwgdTMyIGNwX3BheSwgdTMyIGNwX2hkcikKK3sKKwlzYS0+c2FfY29tbWFuZF8xLncgPSAwOworCXNhLT5zYV9jb21tYW5kXzEuYmYuY3J5cHRvX21vZGUzMSA9IChjbSAmIDQpID4+IDI7CisJc2EtPnNhX2NvbW1hbmRfMS5iZi5jcnlwdG9fbW9kZTlfOCA9IGNtICYgMzsKKwlzYS0+c2FfY29tbWFuZF8xLmJmLmZlZWRiYWNrX21vZGUgPSBjZmIsCisJc2EtPnNhX2NvbW1hbmRfMS5iZi5zYV9yZXYgPSAxOworCXNhLT5zYV9jb21tYW5kXzEuYmYuZXh0ZW5kZWRfc2VxX251bSA9IGVzbjsKKwlzYS0+c2FfY29tbWFuZF8xLmJmLnNlcV9udW1fbWFzayA9IHNuX21hc2s7CisJc2EtPnNhX2NvbW1hbmRfMS5iZi5tdXRhYmxlX2JpdF9wcm9jID0gbXV0ZTsKKwlzYS0+c2FfY29tbWFuZF8xLmJmLmNvcHlfcGFkID0gY3BfcGFkOworCXNhLT5zYV9jb21tYW5kXzEuYmYuY29weV9wYXlsb2FkID0gY3BfcGF5OworCXNhLT5zYV9jb21tYW5kXzEuYmYuY29weV9oZHIgPSBjcF9oZHI7Cit9CisKK2ludCBjcnlwdG80eHhfZW5jcnlwdChzdHJ1Y3QgYWJsa2NpcGhlcl9yZXF1ZXN0ICpyZXEpCit7CisJc3RydWN0IGNyeXB0bzR4eF9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHJlcS0+YmFzZS50Zm0pOworCisJY3R4LT5kaXJlY3Rpb24gPSBESVJfT1VUQk9VTkQ7CisJY3R4LT5oYXNoX2ZpbmFsID0gMDsKKwljdHgtPmlzX2hhc2ggPSAwOworCWN0eC0+cGRfY3RsID0gMHgxOworCisJcmV0dXJuIGNyeXB0bzR4eF9idWlsZF9wZCgmcmVxLT5iYXNlLCBjdHgsIHJlcS0+c3JjLCByZXEtPmRzdCwKKwkJCQkgIHJlcS0+bmJ5dGVzLCByZXEtPmluZm8sCisJCQkJICBnZXRfZHluYW1pY19zYV9pdl9zaXplKGN0eCkpOworfQorCitpbnQgY3J5cHRvNHh4X2RlY3J5cHQoc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqcmVxKQoreworCXN0cnVjdCBjcnlwdG80eHhfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eChyZXEtPmJhc2UudGZtKTsKKworCWN0eC0+ZGlyZWN0aW9uID0gRElSX0lOQk9VTkQ7CisJY3R4LT5oYXNoX2ZpbmFsID0gMDsKKwljdHgtPmlzX2hhc2ggPSAwOworCWN0eC0+cGRfY3RsID0gMTsKKworCXJldHVybiBjcnlwdG80eHhfYnVpbGRfcGQoJnJlcS0+YmFzZSwgY3R4LCByZXEtPnNyYywgcmVxLT5kc3QsCisJCQkJICByZXEtPm5ieXRlcywgcmVxLT5pbmZvLAorCQkJCSAgZ2V0X2R5bmFtaWNfc2FfaXZfc2l6ZShjdHgpKTsKK30KKworLyoqCisgKiBBRVMgRnVuY3Rpb25zCisgKi8KK3N0YXRpYyBpbnQgY3J5cHRvNHh4X3NldGtleV9hZXMoc3RydWN0IGNyeXB0b19hYmxrY2lwaGVyICpjaXBoZXIsCisJCQkJY29uc3QgdTggKmtleSwKKwkJCQl1bnNpZ25lZCBpbnQga2V5bGVuLAorCQkJCXVuc2lnbmVkIGNoYXIgY20sCisJCQkJdTggZmIpCit7CisJc3RydWN0IGNyeXB0b190Zm0gKnRmbSA9IGNyeXB0b19hYmxrY2lwaGVyX3RmbShjaXBoZXIpOworCXN0cnVjdCBjcnlwdG80eHhfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworCXN0cnVjdCBkeW5hbWljX3NhX2N0bCAqc2E7CisJaW50ICAgIHJjOworCisJaWYgKGtleWxlbiAhPSBBRVNfS0VZU0laRV8yNTYgJiYKKwkJa2V5bGVuICE9IEFFU19LRVlTSVpFXzE5MiAmJiBrZXlsZW4gIT0gQUVTX0tFWVNJWkVfMTI4KSB7CisJCWNyeXB0b19hYmxrY2lwaGVyX3NldF9mbGFncyhjaXBoZXIsCisJCQkJQ1JZUFRPX1RGTV9SRVNfQkFEX0tFWV9MRU4pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBDcmVhdGUgU0EgKi8KKwlpZiAoY3R4LT5zYV9pbl9kbWFfYWRkciB8fCBjdHgtPnNhX291dF9kbWFfYWRkcikKKwkJY3J5cHRvNHh4X2ZyZWVfc2EoY3R4KTsKKworCXJjID0gY3J5cHRvNHh4X2FsbG9jX3NhKGN0eCwgU0FfQUVTMTI4X0xFTiArIChrZXlsZW4tMTYpIC8gNCk7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisKKwlpZiAoY3R4LT5zdGF0ZV9yZWNvcmRfZG1hX2FkZHIgPT0gMCkgeworCQlyYyA9IGNyeXB0bzR4eF9hbGxvY19zdGF0ZV9yZWNvcmQoY3R4KTsKKwkJaWYgKHJjKSB7CisJCQljcnlwdG80eHhfZnJlZV9zYShjdHgpOworCQkJcmV0dXJuIHJjOworCQl9CisJfQorCS8qIFNldHVwIFNBICovCisJc2EgPSAoc3RydWN0IGR5bmFtaWNfc2FfY3RsICopIGN0eC0+c2FfaW47CisJY3R4LT5oYXNoX2ZpbmFsID0gMDsKKworCXNldF9keW5hbWljX3NhX2NvbW1hbmRfMChzYSwgU0FfTk9UX1NBVkVfSEFTSCwgU0FfTk9UX1NBVkVfSVYsCisJCQkJIFNBX0xPQURfSEFTSF9GUk9NX1NBLCBTQV9MT0FEX0lWX0ZST01fU1RBVEUsCisJCQkJIFNBX05PX0hFQURFUl9QUk9DLCBTQV9IQVNIX0FMR19OVUxMLAorCQkJCSBTQV9DSVBIRVJfQUxHX0FFUywgU0FfUEFEX1RZUEVfWkVSTywKKwkJCQkgU0FfT1BfR1JPVVBfQkFTSUMsIFNBX09QQ09ERV9ERUNSWVBULAorCQkJCSBESVJfSU5CT1VORCk7CisKKwlzZXRfZHluYW1pY19zYV9jb21tYW5kXzEoc2EsIGNtLCBTQV9IQVNIX01PREVfSEFTSCwKKwkJCQkgZmIsIFNBX0VYVEVOREVEX1NOX09GRiwKKwkJCQkgU0FfU0VRX01BU0tfT0ZGLCBTQV9NQ19FTkFCTEUsCisJCQkJIFNBX05PVF9DT1BZX1BBRCwgU0FfTk9UX0NPUFlfUEFZTE9BRCwKKwkJCQkgU0FfTk9UX0NPUFlfSERSKTsKKwljcnlwdG80eHhfbWVtY3B5X2xlKGN0eC0+c2FfaW4gKyBnZXRfZHluYW1pY19zYV9vZmZzZXRfa2V5X2ZpZWxkKGN0eCksCisJCQkgICAga2V5LCBrZXlsZW4pOworCXNhLT5zYV9jb250ZW50cyA9IFNBX0FFU19DT05URU5UUyB8IChrZXlsZW4gPDwgMik7CisJc2EtPnNhX2NvbW1hbmRfMS5iZi5rZXlfbGVuID0ga2V5bGVuID4+IDM7CisJY3R4LT5pc19oYXNoID0gMDsKKwljdHgtPmRpcmVjdGlvbiA9IERJUl9JTkJPVU5EOworCW1lbWNweShjdHgtPnNhX2luICsgZ2V0X2R5bmFtaWNfc2Ffb2Zmc2V0X3N0YXRlX3B0cl9maWVsZChjdHgpLAorCQkJKHZvaWQgKikmY3R4LT5zdGF0ZV9yZWNvcmRfZG1hX2FkZHIsIDQpOworCWN0eC0+b2Zmc2V0X3RvX3NyX3B0ciA9IGdldF9keW5hbWljX3NhX29mZnNldF9zdGF0ZV9wdHJfZmllbGQoY3R4KTsKKworCW1lbWNweShjdHgtPnNhX291dCwgY3R4LT5zYV9pbiwgY3R4LT5zYV9sZW4gKiA0KTsKKwlzYSA9IChzdHJ1Y3QgZHluYW1pY19zYV9jdGwgKikgY3R4LT5zYV9vdXQ7CisJc2EtPnNhX2NvbW1hbmRfMC5iZi5kaXIgPSBESVJfT1VUQk9VTkQ7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGNyeXB0bzR4eF9zZXRrZXlfYWVzX2NiYyhzdHJ1Y3QgY3J5cHRvX2FibGtjaXBoZXIgKmNpcGhlciwKKwkJCSAgICAgY29uc3QgdTggKmtleSwgdW5zaWduZWQgaW50IGtleWxlbikKK3sKKwlyZXR1cm4gY3J5cHRvNHh4X3NldGtleV9hZXMoY2lwaGVyLCBrZXksIGtleWxlbiwgQ1JZUFRPX01PREVfQ0JDLAorCQkJCSAgICBDUllQVE9fRkVFREJBQ0tfTU9ERV9OT19GQik7Cit9CisKKy8qKgorICogSEFTSCBTSEExIEZ1bmN0aW9ucworICovCitzdGF0aWMgaW50IGNyeXB0bzR4eF9oYXNoX2FsZ19pbml0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sCisJCQkJICAgdW5zaWduZWQgaW50IHNhX2xlbiwKKwkJCQkgICB1bnNpZ25lZCBjaGFyIGhhLAorCQkJCSAgIHVuc2lnbmVkIGNoYXIgaG0pCit7CisJc3RydWN0IGNyeXB0b19hbGcgKmFsZyA9IHRmbS0+X19jcnRfYWxnOworCXN0cnVjdCBjcnlwdG80eHhfYWxnICpteV9hbGcgPSBjcnlwdG9fYWxnX3RvX2NyeXB0bzR4eF9hbGcoYWxnKTsKKwlzdHJ1Y3QgY3J5cHRvNHh4X2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKKwlzdHJ1Y3QgZHluYW1pY19zYV9jdGwgKnNhOworCXN0cnVjdCBkeW5hbWljX3NhX2hhc2gxNjAgKnNhX2luOworCWludCByYzsKKworCWN0eC0+ZGV2ICAgPSBteV9hbGctPmRldjsKKwljdHgtPmlzX2hhc2ggPSAxOworCWN0eC0+aGFzaF9maW5hbCA9IDA7CisKKwkvKiBDcmVhdGUgU0EgKi8KKwlpZiAoY3R4LT5zYV9pbl9kbWFfYWRkciB8fCBjdHgtPnNhX291dF9kbWFfYWRkcikKKwkJY3J5cHRvNHh4X2ZyZWVfc2EoY3R4KTsKKworCXJjID0gY3J5cHRvNHh4X2FsbG9jX3NhKGN0eCwgc2FfbGVuKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCWlmIChjdHgtPnN0YXRlX3JlY29yZF9kbWFfYWRkciA9PSAwKSB7CisJCWNyeXB0bzR4eF9hbGxvY19zdGF0ZV9yZWNvcmQoY3R4KTsKKwkJaWYgKCFjdHgtPnN0YXRlX3JlY29yZF9kbWFfYWRkcikgeworCQkJY3J5cHRvNHh4X2ZyZWVfc2EoY3R4KTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJfQorCisJdGZtLT5jcnRfYWhhc2gucmVxc2l6ZSA9IHNpemVvZihzdHJ1Y3QgY3J5cHRvNHh4X2N0eCk7CisJc2EgPSAoc3RydWN0IGR5bmFtaWNfc2FfY3RsICopIGN0eC0+c2FfaW47CisJc2V0X2R5bmFtaWNfc2FfY29tbWFuZF8wKHNhLCBTQV9TQVZFX0hBU0gsIFNBX05PVF9TQVZFX0lWLAorCQkJCSBTQV9OT1RfTE9BRF9IQVNILCBTQV9MT0FEX0lWX0ZST01fU0EsCisJCQkJIFNBX05PX0hFQURFUl9QUk9DLCBoYSwgU0FfQ0lQSEVSX0FMR19OVUxMLAorCQkJCSBTQV9QQURfVFlQRV9aRVJPLCBTQV9PUF9HUk9VUF9CQVNJQywKKwkJCQkgU0FfT1BDT0RFX0hBU0gsIERJUl9JTkJPVU5EKTsKKwlzZXRfZHluYW1pY19zYV9jb21tYW5kXzEoc2EsIDAsIFNBX0hBU0hfTU9ERV9IQVNILAorCQkJCSBDUllQVE9fRkVFREJBQ0tfTU9ERV9OT19GQiwgU0FfRVhURU5ERURfU05fT0ZGLAorCQkJCSBTQV9TRVFfTUFTS19PRkYsIFNBX01DX0VOQUJMRSwKKwkJCQkgU0FfTk9UX0NPUFlfUEFELCBTQV9OT1RfQ09QWV9QQVlMT0FELAorCQkJCSBTQV9OT1RfQ09QWV9IRFIpOworCWN0eC0+ZGlyZWN0aW9uID0gRElSX0lOQk9VTkQ7CisJc2EtPnNhX2NvbnRlbnRzID0gU0FfSEFTSDE2MF9DT05URU5UUzsKKwlzYV9pbiA9IChzdHJ1Y3QgZHluYW1pY19zYV9oYXNoMTYwICopIGN0eC0+c2FfaW47CisJLyogTmVlZCB0byB6ZXJvIGhhc2ggZGlnZXN0IGluIFNBICovCisJbWVtc2V0KHNhX2luLT5pbm5lcl9kaWdlc3QsIDAsIHNpemVvZihzYV9pbi0+aW5uZXJfZGlnZXN0KSk7CisJbWVtc2V0KHNhX2luLT5vdXRlcl9kaWdlc3QsIDAsIHNpemVvZihzYV9pbi0+b3V0ZXJfZGlnZXN0KSk7CisJc2FfaW4tPnN0YXRlX3B0ciA9IGN0eC0+c3RhdGVfcmVjb3JkX2RtYV9hZGRyOworCWN0eC0+b2Zmc2V0X3RvX3NyX3B0ciA9IGdldF9keW5hbWljX3NhX29mZnNldF9zdGF0ZV9wdHJfZmllbGQoY3R4KTsKKworCXJldHVybiAwOworfQorCitpbnQgY3J5cHRvNHh4X2hhc2hfaW5pdChzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAqcmVxKQoreworCXN0cnVjdCBjcnlwdG80eHhfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eChyZXEtPmJhc2UudGZtKTsKKwlpbnQgZHM7CisJc3RydWN0IGR5bmFtaWNfc2FfY3RsICpzYTsKKworCXNhID0gKHN0cnVjdCBkeW5hbWljX3NhX2N0bCAqKSBjdHgtPnNhX2luOworCWRzID0gY3J5cHRvX2FoYXNoX2RpZ2VzdHNpemUoCisJCQlfX2NyeXB0b19haGFzaF9jYXN0KHJlcS0+YmFzZS50Zm0pKTsKKwlzYS0+c2FfY29tbWFuZF8wLmJmLmRpZ2VzdF9sZW4gPSBkcyA+PiAyOworCXNhLT5zYV9jb21tYW5kXzAuYmYubG9hZF9oYXNoX3N0YXRlID0gU0FfTE9BRF9IQVNIX0ZST01fU0E7CisJY3R4LT5pc19oYXNoID0gMTsKKwljdHgtPmRpcmVjdGlvbiA9IERJUl9JTkJPVU5EOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBjcnlwdG80eHhfaGFzaF91cGRhdGUoc3RydWN0IGFoYXNoX3JlcXVlc3QgKnJlcSkKK3sKKwlzdHJ1Y3QgY3J5cHRvNHh4X2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgocmVxLT5iYXNlLnRmbSk7CisKKwljdHgtPmlzX2hhc2ggPSAxOworCWN0eC0+aGFzaF9maW5hbCA9IDA7CisJY3R4LT5wZF9jdGwgPSAweDExOworCWN0eC0+ZGlyZWN0aW9uID0gRElSX0lOQk9VTkQ7CisKKwlyZXR1cm4gY3J5cHRvNHh4X2J1aWxkX3BkKCZyZXEtPmJhc2UsIGN0eCwgcmVxLT5zcmMsCisJCQkJICAoc3RydWN0IHNjYXR0ZXJsaXN0ICopIHJlcS0+cmVzdWx0LAorCQkJCSAgcmVxLT5uYnl0ZXMsIE5VTEwsIDApOworfQorCitpbnQgY3J5cHRvNHh4X2hhc2hfZmluYWwoc3RydWN0IGFoYXNoX3JlcXVlc3QgKnJlcSkKK3sKKwlyZXR1cm4gMDsKK30KKworaW50IGNyeXB0bzR4eF9oYXNoX2RpZ2VzdChzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAqcmVxKQoreworCXN0cnVjdCBjcnlwdG80eHhfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eChyZXEtPmJhc2UudGZtKTsKKworCWN0eC0+aGFzaF9maW5hbCA9IDE7CisJY3R4LT5wZF9jdGwgPSAweDExOworCWN0eC0+ZGlyZWN0aW9uID0gRElSX0lOQk9VTkQ7CisKKwlyZXR1cm4gY3J5cHRvNHh4X2J1aWxkX3BkKCZyZXEtPmJhc2UsIGN0eCwgcmVxLT5zcmMsCisJCQkJICAoc3RydWN0IHNjYXR0ZXJsaXN0ICopIHJlcS0+cmVzdWx0LAorCQkJCSAgcmVxLT5uYnl0ZXMsIE5VTEwsIDApOworfQorCisvKioKKyAqIFNIQTEgQWxnb3JpdGhtCisgKi8KK2ludCBjcnlwdG80eHhfc2hhMV9hbGdfaW5pdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQoreworCXJldHVybiBjcnlwdG80eHhfaGFzaF9hbGdfaW5pdCh0Zm0sIFNBX0hBU0gxNjBfTEVOLCBTQV9IQVNIX0FMR19TSEExLAorCQkJCSAgICAgICBTQV9IQVNIX01PREVfSEFTSCk7Cit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vYW1jYy9jcnlwdG80eHhfY29yZS5jIGIvZHJpdmVycy9jcnlwdG8vYW1jYy9jcnlwdG80eHhfY29yZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjMGRmYjIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2NyeXB0by9hbWNjL2NyeXB0bzR4eF9jb3JlLmMKQEAgLTAsMCArMSwxMzEwIEBACisvKioKKyAqIEFNQ0MgU29DIFBQQzR4eCBDcnlwdG8gRHJpdmVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IEFwcGxpZWQgTWljcm8gQ2lyY3VpdHMgQ29ycG9yYXRpb24uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBKYW1lcyBIc2lhbyA8amhzaWFvQGFtY2MuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBUaGlzIGZpbGUgaW1wbGVtZW50cyBBTUNDIGNyeXB0byBvZmZsb2FkIExpbnV4IGRldmljZSBkcml2ZXIgZm9yIHVzZSB3aXRoCisgKiBMaW51eCBDcnlwdG9BUEkuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrX3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CisjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGFzbS9kY3IuaD4KKyNpbmNsdWRlIDxhc20vZGNyLXJlZ3MuaD4KKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGNyeXB0by9pbnRlcm5hbC9oYXNoLmg+CisjaW5jbHVkZSA8Y3J5cHRvL2FsZ2FwaS5oPgorI2luY2x1ZGUgPGNyeXB0by9hZXMuaD4KKyNpbmNsdWRlIDxjcnlwdG8vc2hhLmg+CisjaW5jbHVkZSAiY3J5cHRvNHh4X3JlZ19kZWYuaCIKKyNpbmNsdWRlICJjcnlwdG80eHhfY29yZS5oIgorI2luY2x1ZGUgImNyeXB0bzR4eF9zYS5oIgorCisjZGVmaW5lIFBQQzRYWF9TRUNfVkVSU0lPTl9TVFIJCQkiMC41IgorCisvKioKKyAqIFBQQzR4eCBDcnlwdG8gRW5naW5lIEluaXRpYWxpemF0aW9uIFJvdXRpbmUKKyAqLworc3RhdGljIHZvaWQgY3J5cHRvNHh4X2h3X2luaXQoc3RydWN0IGNyeXB0bzR4eF9kZXZpY2UgKmRldikKK3sKKwl1bmlvbiBjZV9yaW5nX3NpemUgcmluZ19zaXplOworCXVuaW9uIGNlX3JpbmdfY29udG9sIHJpbmdfY3RybDsKKwl1bmlvbiBjZV9wYXJ0X3Jpbmdfc2l6ZSBwYXJ0X3Jpbmdfc2l6ZTsKKwl1bmlvbiBjZV9pb190aHJlc2hvbGQgaW9fdGhyZXNob2xkOworCXUzMiByYW5kX251bTsKKwl1bmlvbiBjZV9wZV9kbWFfY2ZnIHBlX2RtYV9jZmc7CisKKwl3cml0ZWwoUFBDNFhYX0JZVEVfT1JERVIsIGRldi0+Y2VfYmFzZSArIENSWVBUTzRYWF9CWVRFX09SREVSX0NGRyk7CisJLyogc2V0dXAgcGUgZG1hLCBpbmNsdWRlIHJlc2V0IHNnLCBwZHIgYW5kIHBlLCB0aGVuIHJlbGVhc2UgcmVzZXQgKi8KKwlwZV9kbWFfY2ZnLncgPSAwOworCXBlX2RtYV9jZmcuYmYuYm9fc2dwZF9lbiA9IDE7CisJcGVfZG1hX2NmZy5iZi5ib19kYXRhX2VuID0gMDsKKwlwZV9kbWFfY2ZnLmJmLmJvX3NhX2VuID0gMTsKKwlwZV9kbWFfY2ZnLmJmLmJvX3BkX2VuID0gMTsKKwlwZV9kbWFfY2ZnLmJmLmR5bmFtaWNfc2FfZW4gPSAxOworCXBlX2RtYV9jZmcuYmYucmVzZXRfc2cgPSAxOworCXBlX2RtYV9jZmcuYmYucmVzZXRfcGRyID0gMTsKKwlwZV9kbWFfY2ZnLmJmLnJlc2V0X3BlID0gMTsKKwl3cml0ZWwocGVfZG1hX2NmZy53LCBkZXYtPmNlX2Jhc2UgKyBDUllQVE80WFhfUEVfRE1BX0NGRyk7CisJLyogdW4gcmVzZXQgcGUsc2cgYW5kIHBkciAqLworCXBlX2RtYV9jZmcuYmYucGVfbW9kZSA9IDA7CisJcGVfZG1hX2NmZy5iZi5yZXNldF9zZyA9IDA7CisJcGVfZG1hX2NmZy5iZi5yZXNldF9wZHIgPSAwOworCXBlX2RtYV9jZmcuYmYucmVzZXRfcGUgPSAwOworCXBlX2RtYV9jZmcuYmYuYm9fdGRfZW4gPSAwOworCXdyaXRlbChwZV9kbWFfY2ZnLncsIGRldi0+Y2VfYmFzZSArIENSWVBUTzRYWF9QRV9ETUFfQ0ZHKTsKKwl3cml0ZWwoZGV2LT5wZHJfcGEsIGRldi0+Y2VfYmFzZSArIENSWVBUTzRYWF9QRFJfQkFTRSk7CisJd3JpdGVsKGRldi0+cGRyX3BhLCBkZXYtPmNlX2Jhc2UgKyBDUllQVE80WFhfUkRSX0JBU0UpOworCXdyaXRlbChQUEM0WFhfUFJOR19DVFJMX0FVVE9fRU4sIGRldi0+Y2VfYmFzZSArIENSWVBUTzRYWF9QUk5HX0NUUkwpOworCWdldF9yYW5kb21fYnl0ZXMoJnJhbmRfbnVtLCBzaXplb2YocmFuZF9udW0pKTsKKwl3cml0ZWwocmFuZF9udW0sIGRldi0+Y2VfYmFzZSArIENSWVBUTzRYWF9QUk5HX1NFRURfTCk7CisJZ2V0X3JhbmRvbV9ieXRlcygmcmFuZF9udW0sIHNpemVvZihyYW5kX251bSkpOworCXdyaXRlbChyYW5kX251bSwgZGV2LT5jZV9iYXNlICsgQ1JZUFRPNFhYX1BSTkdfU0VFRF9IKTsKKwlyaW5nX3NpemUudyA9IDA7CisJcmluZ19zaXplLmJmLnJpbmdfb2Zmc2V0ID0gUFBDNFhYX1BEX1NJWkU7CisJcmluZ19zaXplLmJmLnJpbmdfc2l6ZSAgID0gUFBDNFhYX05VTV9QRDsKKwl3cml0ZWwocmluZ19zaXplLncsIGRldi0+Y2VfYmFzZSArIENSWVBUTzRYWF9SSU5HX1NJWkUpOworCXJpbmdfY3RybC53ID0gMDsKKwl3cml0ZWwocmluZ19jdHJsLncsIGRldi0+Y2VfYmFzZSArIENSWVBUTzRYWF9SSU5HX0NUUkwpOworCXdyaXRlbChQUEM0WFhfRENfM0RFU19FTiwgZGV2LT5jZV9iYXNlICsgQ1JZUFRPNFhYX0RFVklDRV9DVFJMKTsKKwl3cml0ZWwoZGV2LT5nZHJfcGEsIGRldi0+Y2VfYmFzZSArIENSWVBUTzRYWF9HQVRIX1JJTkdfQkFTRSk7CisJd3JpdGVsKGRldi0+c2RyX3BhLCBkZXYtPmNlX2Jhc2UgKyBDUllQVE80WFhfU0NBVF9SSU5HX0JBU0UpOworCXBhcnRfcmluZ19zaXplLncgPSAwOworCXBhcnRfcmluZ19zaXplLmJmLnNkcl9zaXplID0gUFBDNFhYX1NEUl9TSVpFOworCXBhcnRfcmluZ19zaXplLmJmLmdkcl9zaXplID0gUFBDNFhYX0dEUl9TSVpFOworCXdyaXRlbChwYXJ0X3Jpbmdfc2l6ZS53LCBkZXYtPmNlX2Jhc2UgKyBDUllQVE80WFhfUEFSVF9SSU5HX1NJWkUpOworCXdyaXRlbChQUEM0WFhfU0RfQlVGRkVSX1NJWkUsIGRldi0+Y2VfYmFzZSArIENSWVBUTzRYWF9QQVJUX1JJTkdfQ0ZHKTsKKwlpb190aHJlc2hvbGQudyA9IDA7CisJaW9fdGhyZXNob2xkLmJmLm91dHB1dF90aHJlc2hvbGQgPSBQUEM0WFhfT1VUUFVUX1RIUkVTSE9MRDsKKwlpb190aHJlc2hvbGQuYmYuaW5wdXRfdGhyZXNob2xkICA9IFBQQzRYWF9JTlBVVF9USFJFU0hPTEQ7CisJd3JpdGVsKGlvX3RocmVzaG9sZC53LCBkZXYtPmNlX2Jhc2UgKyBDUllQVE80WFhfSU9fVEhSRVNIT0xEKTsKKwl3cml0ZWwoMCwgZGV2LT5jZV9iYXNlICsgQ1JZUFRPNFhYX1BEUl9CQVNFX1VBRERSKTsKKwl3cml0ZWwoMCwgZGV2LT5jZV9iYXNlICsgQ1JZUFRPNFhYX1JEUl9CQVNFX1VBRERSKTsKKwl3cml0ZWwoMCwgZGV2LT5jZV9iYXNlICsgQ1JZUFRPNFhYX1BLVF9TUkNfVUFERFIpOworCXdyaXRlbCgwLCBkZXYtPmNlX2Jhc2UgKyBDUllQVE80WFhfUEtUX0RFU1RfVUFERFIpOworCXdyaXRlbCgwLCBkZXYtPmNlX2Jhc2UgKyBDUllQVE80WFhfU0FfVUFERFIpOworCXdyaXRlbCgwLCBkZXYtPmNlX2Jhc2UgKyBDUllQVE80WFhfR0FUSF9SSU5HX0JBU0VfVUFERFIpOworCXdyaXRlbCgwLCBkZXYtPmNlX2Jhc2UgKyBDUllQVE80WFhfU0NBVF9SSU5HX0JBU0VfVUFERFIpOworCS8qIHVuIHJlc2V0IHBlLHNnIGFuZCBwZHIgKi8KKwlwZV9kbWFfY2ZnLmJmLnBlX21vZGUgPSAxOworCXBlX2RtYV9jZmcuYmYucmVzZXRfc2cgPSAwOworCXBlX2RtYV9jZmcuYmYucmVzZXRfcGRyID0gMDsKKwlwZV9kbWFfY2ZnLmJmLnJlc2V0X3BlID0gMDsKKwlwZV9kbWFfY2ZnLmJmLmJvX3RkX2VuID0gMDsKKwl3cml0ZWwocGVfZG1hX2NmZy53LCBkZXYtPmNlX2Jhc2UgKyBDUllQVE80WFhfUEVfRE1BX0NGRyk7CisJLypjbGVhciBhbGwgcGVuZGluZyBpbnRlcnJ1cHQqLworCXdyaXRlbChQUEM0WFhfSU5URVJSVVBUX0NMUiwgZGV2LT5jZV9iYXNlICsgQ1JZUFRPNFhYX0lOVF9DTFIpOworCXdyaXRlbChQUEM0WFhfSU5UX0RFU0NSX0NOVCwgZGV2LT5jZV9iYXNlICsgQ1JZUFRPNFhYX0lOVF9ERVNDUl9DTlQpOworCXdyaXRlbChQUEM0WFhfSU5UX0RFU0NSX0NOVCwgZGV2LT5jZV9iYXNlICsgQ1JZUFRPNFhYX0lOVF9ERVNDUl9DTlQpOworCXdyaXRlbChQUEM0WFhfSU5UX0NGRywgZGV2LT5jZV9iYXNlICsgQ1JZUFRPNFhYX0lOVF9DRkcpOworCXdyaXRlbChQUEM0WFhfUERfRE9ORV9JTlQsIGRldi0+Y2VfYmFzZSArIENSWVBUTzRYWF9JTlRfRU4pOworfQorCitpbnQgY3J5cHRvNHh4X2FsbG9jX3NhKHN0cnVjdCBjcnlwdG80eHhfY3R4ICpjdHgsIHUzMiBzaXplKQoreworCWN0eC0+c2FfaW4gPSBkbWFfYWxsb2NfY29oZXJlbnQoY3R4LT5kZXYtPmNvcmVfZGV2LT5kZXZpY2UsIHNpemUgKiA0LAorCQkJCQkmY3R4LT5zYV9pbl9kbWFfYWRkciwgR0ZQX0FUT01JQyk7CisJaWYgKGN0eC0+c2FfaW4gPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljdHgtPnNhX291dCA9IGRtYV9hbGxvY19jb2hlcmVudChjdHgtPmRldi0+Y29yZV9kZXYtPmRldmljZSwgc2l6ZSAqIDQsCisJCQkJCSAmY3R4LT5zYV9vdXRfZG1hX2FkZHIsIEdGUF9BVE9NSUMpOworCWlmIChjdHgtPnNhX291dCA9PSBOVUxMKSB7CisJCWRtYV9mcmVlX2NvaGVyZW50KGN0eC0+ZGV2LT5jb3JlX2Rldi0+ZGV2aWNlLAorCQkJCSAgY3R4LT5zYV9sZW4gKiA0LAorCQkJCSAgY3R4LT5zYV9pbiwgY3R4LT5zYV9pbl9kbWFfYWRkcik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCW1lbXNldChjdHgtPnNhX2luLCAwLCBzaXplICogNCk7CisJbWVtc2V0KGN0eC0+c2Ffb3V0LCAwLCBzaXplICogNCk7CisJY3R4LT5zYV9sZW4gPSBzaXplOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgY3J5cHRvNHh4X2ZyZWVfc2Eoc3RydWN0IGNyeXB0bzR4eF9jdHggKmN0eCkKK3sKKwlpZiAoY3R4LT5zYV9pbiAhPSBOVUxMKQorCQlkbWFfZnJlZV9jb2hlcmVudChjdHgtPmRldi0+Y29yZV9kZXYtPmRldmljZSwgY3R4LT5zYV9sZW4gKiA0LAorCQkJCSAgY3R4LT5zYV9pbiwgY3R4LT5zYV9pbl9kbWFfYWRkcik7CisJaWYgKGN0eC0+c2Ffb3V0ICE9IE5VTEwpCisJCWRtYV9mcmVlX2NvaGVyZW50KGN0eC0+ZGV2LT5jb3JlX2Rldi0+ZGV2aWNlLCBjdHgtPnNhX2xlbiAqIDQsCisJCQkJICBjdHgtPnNhX291dCwgY3R4LT5zYV9vdXRfZG1hX2FkZHIpOworCisJY3R4LT5zYV9pbl9kbWFfYWRkciA9IDA7CisJY3R4LT5zYV9vdXRfZG1hX2FkZHIgPSAwOworCWN0eC0+c2FfbGVuID0gMDsKK30KKwordTMyIGNyeXB0bzR4eF9hbGxvY19zdGF0ZV9yZWNvcmQoc3RydWN0IGNyeXB0bzR4eF9jdHggKmN0eCkKK3sKKwljdHgtPnN0YXRlX3JlY29yZCA9IGRtYV9hbGxvY19jb2hlcmVudChjdHgtPmRldi0+Y29yZV9kZXYtPmRldmljZSwKKwkJCQlzaXplb2Yoc3RydWN0IHNhX3N0YXRlX3JlY29yZCksCisJCQkJJmN0eC0+c3RhdGVfcmVjb3JkX2RtYV9hZGRyLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWN0eC0+c3RhdGVfcmVjb3JkX2RtYV9hZGRyKQorCQlyZXR1cm4gLUVOT01FTTsKKwltZW1zZXQoY3R4LT5zdGF0ZV9yZWNvcmQsIDAsIHNpemVvZihzdHJ1Y3Qgc2Ffc3RhdGVfcmVjb3JkKSk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBjcnlwdG80eHhfZnJlZV9zdGF0ZV9yZWNvcmQoc3RydWN0IGNyeXB0bzR4eF9jdHggKmN0eCkKK3sKKwlpZiAoY3R4LT5zdGF0ZV9yZWNvcmQgIT0gTlVMTCkKKwkJZG1hX2ZyZWVfY29oZXJlbnQoY3R4LT5kZXYtPmNvcmVfZGV2LT5kZXZpY2UsCisJCQkJICBzaXplb2Yoc3RydWN0IHNhX3N0YXRlX3JlY29yZCksCisJCQkJICBjdHgtPnN0YXRlX3JlY29yZCwKKwkJCQkgIGN0eC0+c3RhdGVfcmVjb3JkX2RtYV9hZGRyKTsKKwljdHgtPnN0YXRlX3JlY29yZF9kbWFfYWRkciA9IDA7Cit9CisKKy8qKgorICogYWxsb2MgbWVtb3J5IGZvciB0aGUgZ2F0aGVyIHJpbmcKKyAqIG5vIG5lZWQgdG8gYWxsb2MgYnVmIGZvciB0aGUgcmluZworICogZ2RyX3RhaWwsIGdkcl9oZWFkIGFuZCBnZHJfY291bnQgYXJlIGluaXRpYWxpemVkIGJ5IHRoaXMgZnVuY3Rpb24KKyAqLworc3RhdGljIHUzMiBjcnlwdG80eHhfYnVpbGRfcGRyKHN0cnVjdCBjcnlwdG80eHhfZGV2aWNlICpkZXYpCit7CisJaW50IGk7CisJc3RydWN0IHBkX3VpbmZvICpwZF91aW5mbzsKKwlkZXYtPnBkciA9IGRtYV9hbGxvY19jb2hlcmVudChkZXYtPmNvcmVfZGV2LT5kZXZpY2UsCisJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBjZV9wZCkgKiBQUEM0WFhfTlVNX1BELAorCQkJCSAgICAgICZkZXYtPnBkcl9wYSwgR0ZQX0FUT01JQyk7CisJaWYgKCFkZXYtPnBkcikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkZXYtPnBkcl91aW5mbyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwZF91aW5mbykgKiBQUEM0WFhfTlVNX1BELAorCQkJCUdGUF9LRVJORUwpOworCWlmICghZGV2LT5wZHJfdWluZm8pIHsKKwkJZG1hX2ZyZWVfY29oZXJlbnQoZGV2LT5jb3JlX2Rldi0+ZGV2aWNlLAorCQkJCSAgc2l6ZW9mKHN0cnVjdCBjZV9wZCkgKiBQUEM0WFhfTlVNX1BELAorCQkJCSAgZGV2LT5wZHIsCisJCQkJICBkZXYtPnBkcl9wYSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwltZW1zZXQoZGV2LT5wZHIsIDAsICBzaXplb2Yoc3RydWN0IGNlX3BkKSAqIFBQQzRYWF9OVU1fUEQpOworCWRldi0+c2hhZG93X3NhX3Bvb2wgPSBkbWFfYWxsb2NfY29oZXJlbnQoZGV2LT5jb3JlX2Rldi0+ZGV2aWNlLAorCQkJCSAgIDI1NiAqIFBQQzRYWF9OVU1fUEQsCisJCQkJICAgJmRldi0+c2hhZG93X3NhX3Bvb2xfcGEsCisJCQkJICAgR0ZQX0FUT01JQyk7CisJaWYgKCFkZXYtPnNoYWRvd19zYV9wb29sKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRldi0+c2hhZG93X3NyX3Bvb2wgPSBkbWFfYWxsb2NfY29oZXJlbnQoZGV2LT5jb3JlX2Rldi0+ZGV2aWNlLAorCQkJIHNpemVvZihzdHJ1Y3Qgc2Ffc3RhdGVfcmVjb3JkKSAqIFBQQzRYWF9OVU1fUEQsCisJCQkgJmRldi0+c2hhZG93X3NyX3Bvb2xfcGEsIEdGUF9BVE9NSUMpOworCWlmICghZGV2LT5zaGFkb3dfc3JfcG9vbCkKKwkJcmV0dXJuIC1FTk9NRU07CisJZm9yIChpID0gMDsgaSA8IFBQQzRYWF9OVU1fUEQ7IGkrKykgeworCQlwZF91aW5mbyA9IChzdHJ1Y3QgcGRfdWluZm8gKikgKGRldi0+cGRyX3VpbmZvICsKKwkJCQkJCXNpemVvZihzdHJ1Y3QgcGRfdWluZm8pICogaSk7CisKKwkJLyogYWxsb2MgMjU2IGJ5dGVzIHdoaWNoIGlzIGVub3VnaCBmb3IgYW55IGtpbmQgb2YgZHluYW1pYyBzYSAqLworCQlwZF91aW5mby0+c2FfdmEgPSBkZXYtPnNoYWRvd19zYV9wb29sICsgMjU2ICogaTsKKwkJcGRfdWluZm8tPnNhX3BhID0gZGV2LT5zaGFkb3dfc2FfcG9vbF9wYSArIDI1NiAqIGk7CisKKwkJLyogYWxsb2Mgc3RhdGUgcmVjb3JkICovCisJCXBkX3VpbmZvLT5zcl92YSA9IGRldi0+c2hhZG93X3NyX3Bvb2wgKworCQkgICAgc2l6ZW9mKHN0cnVjdCBzYV9zdGF0ZV9yZWNvcmQpICogaTsKKwkJcGRfdWluZm8tPnNyX3BhID0gZGV2LT5zaGFkb3dfc3JfcG9vbF9wYSArCisJCSAgICBzaXplb2Yoc3RydWN0IHNhX3N0YXRlX3JlY29yZCkgKiBpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjcnlwdG80eHhfZGVzdHJveV9wZHIoc3RydWN0IGNyeXB0bzR4eF9kZXZpY2UgKmRldikKK3sKKwlpZiAoZGV2LT5wZHIgIT0gTlVMTCkKKwkJZG1hX2ZyZWVfY29oZXJlbnQoZGV2LT5jb3JlX2Rldi0+ZGV2aWNlLAorCQkJCSAgc2l6ZW9mKHN0cnVjdCBjZV9wZCkgKiBQUEM0WFhfTlVNX1BELAorCQkJCSAgZGV2LT5wZHIsIGRldi0+cGRyX3BhKTsKKwlpZiAoZGV2LT5zaGFkb3dfc2FfcG9vbCkKKwkJZG1hX2ZyZWVfY29oZXJlbnQoZGV2LT5jb3JlX2Rldi0+ZGV2aWNlLCAyNTYgKiBQUEM0WFhfTlVNX1BELAorCQkJCSAgZGV2LT5zaGFkb3dfc2FfcG9vbCwgZGV2LT5zaGFkb3dfc2FfcG9vbF9wYSk7CisJaWYgKGRldi0+c2hhZG93X3NyX3Bvb2wpCisJCWRtYV9mcmVlX2NvaGVyZW50KGRldi0+Y29yZV9kZXYtPmRldmljZSwKKwkJCXNpemVvZihzdHJ1Y3Qgc2Ffc3RhdGVfcmVjb3JkKSAqIFBQQzRYWF9OVU1fUEQsCisJCQlkZXYtPnNoYWRvd19zcl9wb29sLCBkZXYtPnNoYWRvd19zcl9wb29sX3BhKTsKKworCWtmcmVlKGRldi0+cGRyX3VpbmZvKTsKK30KKworc3RhdGljIHUzMiBjcnlwdG80eHhfZ2V0X3BkX2Zyb21fcGRyX25vbG9jayhzdHJ1Y3QgY3J5cHRvNHh4X2RldmljZSAqZGV2KQoreworCXUzMiByZXR2YWw7CisJdTMyIHRtcDsKKworCXJldHZhbCA9IGRldi0+cGRyX2hlYWQ7CisJdG1wID0gKGRldi0+cGRyX2hlYWQgKyAxKSAlIFBQQzRYWF9OVU1fUEQ7CisKKwlpZiAodG1wID09IGRldi0+cGRyX3RhaWwpCisJCXJldHVybiBFUklOR19XQVNfRlVMTDsKKworCWRldi0+cGRyX2hlYWQgPSB0bXA7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdTMyIGNyeXB0bzR4eF9wdXRfcGRfdG9fcGRyKHN0cnVjdCBjcnlwdG80eHhfZGV2aWNlICpkZXYsIHUzMiBpZHgpCit7CisJc3RydWN0IHBkX3VpbmZvICpwZF91aW5mbzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJcGRfdWluZm8gPSAoc3RydWN0IHBkX3VpbmZvICopKGRldi0+cGRyX3VpbmZvICsKKwkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBwZF91aW5mbykgKiBpZHgpOworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmNvcmVfZGV2LT5sb2NrLCBmbGFncyk7CisJaWYgKGRldi0+cGRyX3RhaWwgIT0gUFBDNFhYX0xBU1RfUEQpCisJCWRldi0+cGRyX3RhaWwrKzsKKwllbHNlCisJCWRldi0+cGRyX3RhaWwgPSAwOworCXBkX3VpbmZvLT5zdGF0ZSA9IFBEX0VOVFJZX0ZSRUU7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5jb3JlX2Rldi0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2VfcGQgKmNyeXB0bzR4eF9nZXRfcGRwKHN0cnVjdCBjcnlwdG80eHhfZGV2aWNlICpkZXYsCisJCQkJICAgICAgIGRtYV9hZGRyX3QgKnBkX2RtYSwgdTMyIGlkeCkKK3sKKwkqcGRfZG1hID0gZGV2LT5wZHJfcGEgKyBzaXplb2Yoc3RydWN0IGNlX3BkKSAqIGlkeDsKKworCXJldHVybiBkZXYtPnBkciArIHNpemVvZihzdHJ1Y3QgY2VfcGQpICogaWR4OworfQorCisvKioKKyAqIGFsbG9jIG1lbW9yeSBmb3IgdGhlIGdhdGhlciByaW5nCisgKiBubyBuZWVkIHRvIGFsbG9jIGJ1ZiBmb3IgdGhlIHJpbmcKKyAqIGdkcl90YWlsLCBnZHJfaGVhZCBhbmQgZ2RyX2NvdW50IGFyZSBpbml0aWFsaXplZCBieSB0aGlzIGZ1bmN0aW9uCisgKi8KK3N0YXRpYyB1MzIgY3J5cHRvNHh4X2J1aWxkX2dkcihzdHJ1Y3QgY3J5cHRvNHh4X2RldmljZSAqZGV2KQoreworCWRldi0+Z2RyID0gZG1hX2FsbG9jX2NvaGVyZW50KGRldi0+Y29yZV9kZXYtPmRldmljZSwKKwkJCQkgICAgICBzaXplb2Yoc3RydWN0IGNlX2dkKSAqIFBQQzRYWF9OVU1fR0QsCisJCQkJICAgICAgJmRldi0+Z2RyX3BhLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWRldi0+Z2RyKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1lbXNldChkZXYtPmdkciwgMCwgc2l6ZW9mKHN0cnVjdCBjZV9nZCkgKiBQUEM0WFhfTlVNX0dEKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY3J5cHRvNHh4X2Rlc3Ryb3lfZ2RyKHN0cnVjdCBjcnlwdG80eHhfZGV2aWNlICpkZXYpCit7CisJZG1hX2ZyZWVfY29oZXJlbnQoZGV2LT5jb3JlX2Rldi0+ZGV2aWNlLAorCQkJICBzaXplb2Yoc3RydWN0IGNlX2dkKSAqIFBQQzRYWF9OVU1fR0QsCisJCQkgIGRldi0+Z2RyLCBkZXYtPmdkcl9wYSk7Cit9CisKKy8qCisgKiB3aGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLgorICogcHJlZW1wdGlvbiBvciBpbnRlcnJ1cHQgbXVzdCBiZSBkaXNhYmxlZAorICovCit1MzIgY3J5cHRvNHh4X2dldF9uX2dkKHN0cnVjdCBjcnlwdG80eHhfZGV2aWNlICpkZXYsIGludCBuKQoreworCXUzMiByZXR2YWw7CisJdTMyIHRtcDsKKwlpZiAobiA+PSBQUEM0WFhfTlVNX0dEKQorCQlyZXR1cm4gRVJJTkdfV0FTX0ZVTEw7CisKKwlyZXR2YWwgPSBkZXYtPmdkcl9oZWFkOworCXRtcCA9IChkZXYtPmdkcl9oZWFkICsgbikgJSBQUEM0WFhfTlVNX0dEOworCWlmIChkZXYtPmdkcl9oZWFkID4gZGV2LT5nZHJfdGFpbCkgeworCQlpZiAodG1wIDwgZGV2LT5nZHJfaGVhZCAmJiB0bXAgPj0gZGV2LT5nZHJfdGFpbCkKKwkJCXJldHVybiBFUklOR19XQVNfRlVMTDsKKwl9IGVsc2UgaWYgKGRldi0+Z2RyX2hlYWQgPCBkZXYtPmdkcl90YWlsKSB7CisJCWlmICh0bXAgPCBkZXYtPmdkcl9oZWFkIHx8IHRtcCA+PSBkZXYtPmdkcl90YWlsKQorCQkJcmV0dXJuIEVSSU5HX1dBU19GVUxMOworCX0KKwlkZXYtPmdkcl9oZWFkID0gdG1wOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHUzMiBjcnlwdG80eHhfcHV0X2dkX3RvX2dkcihzdHJ1Y3QgY3J5cHRvNHh4X2RldmljZSAqZGV2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5jb3JlX2Rldi0+bG9jaywgZmxhZ3MpOworCWlmIChkZXYtPmdkcl90YWlsID09IGRldi0+Z2RyX2hlYWQpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5jb3JlX2Rldi0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoZGV2LT5nZHJfdGFpbCAhPSBQUEM0WFhfTEFTVF9HRCkKKwkJZGV2LT5nZHJfdGFpbCsrOworCWVsc2UKKwkJZGV2LT5nZHJfdGFpbCA9IDA7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmNvcmVfZGV2LT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgY2VfZ2QgKmNyeXB0bzR4eF9nZXRfZ2RwKHN0cnVjdCBjcnlwdG80eHhfZGV2aWNlICpkZXYsCisJCQkJCSAgICAgIGRtYV9hZGRyX3QgKmdkX2RtYSwgdTMyIGlkeCkKK3sKKwkqZ2RfZG1hID0gZGV2LT5nZHJfcGEgKyBzaXplb2Yoc3RydWN0IGNlX2dkKSAqIGlkeDsKKworCXJldHVybiAoc3RydWN0IGNlX2dkICopIChkZXYtPmdkciArIHNpemVvZihzdHJ1Y3QgY2VfZ2QpICogaWR4KTsKK30KKworLyoqCisgKiBhbGxvYyBtZW1vcnkgZm9yIHRoZSBzY2F0dGVyIHJpbmcKKyAqIG5lZWQgdG8gYWxsb2MgYnVmIGZvciB0aGUgcmluZworICogc2RyX3RhaWwsIHNkcl9oZWFkIGFuZCBzZHJfY291bnQgYXJlIGluaXRpYWxpemVkIGJ5IHRoaXMgZnVuY3Rpb24KKyAqLworc3RhdGljIHUzMiBjcnlwdG80eHhfYnVpbGRfc2RyKHN0cnVjdCBjcnlwdG80eHhfZGV2aWNlICpkZXYpCit7CisJaW50IGk7CisJc3RydWN0IGNlX3NkICpzZF9hcnJheTsKKworCS8qIGFsbG9jIG1lbW9yeSBmb3Igc2NhdHRlciBkZXNjcmlwdG9yIHJpbmcgKi8KKwlkZXYtPnNkciA9IGRtYV9hbGxvY19jb2hlcmVudChkZXYtPmNvcmVfZGV2LT5kZXZpY2UsCisJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBjZV9zZCkgKiBQUEM0WFhfTlVNX1NELAorCQkJCSAgICAgICZkZXYtPnNkcl9wYSwgR0ZQX0FUT01JQyk7CisJaWYgKCFkZXYtPnNkcikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkZXYtPnNjYXR0ZXJfYnVmZmVyX3NpemUgPSBQUEM0WFhfU0RfQlVGRkVSX1NJWkU7CisJZGV2LT5zY2F0dGVyX2J1ZmZlcl92YSA9CisJCWRtYV9hbGxvY19jb2hlcmVudChkZXYtPmNvcmVfZGV2LT5kZXZpY2UsCisJCQlkZXYtPnNjYXR0ZXJfYnVmZmVyX3NpemUgKiBQUEM0WFhfTlVNX1NELAorCQkJJmRldi0+c2NhdHRlcl9idWZmZXJfcGEsIEdGUF9BVE9NSUMpOworCWlmICghZGV2LT5zY2F0dGVyX2J1ZmZlcl92YSkgeworCQlkbWFfZnJlZV9jb2hlcmVudChkZXYtPmNvcmVfZGV2LT5kZXZpY2UsCisJCQkJICBzaXplb2Yoc3RydWN0IGNlX3NkKSAqIFBQQzRYWF9OVU1fU0QsCisJCQkJICBkZXYtPnNkciwgZGV2LT5zZHJfcGEpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlzZF9hcnJheSA9IGRldi0+c2RyOworCisJZm9yIChpID0gMDsgaSA8IFBQQzRYWF9OVU1fU0Q7IGkrKykgeworCQlzZF9hcnJheVtpXS5wdHIgPSBkZXYtPnNjYXR0ZXJfYnVmZmVyX3BhICsKKwkJCQkgIGRldi0+c2NhdHRlcl9idWZmZXJfc2l6ZSAqIGk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNyeXB0bzR4eF9kZXN0cm95X3NkcihzdHJ1Y3QgY3J5cHRvNHh4X2RldmljZSAqZGV2KQoreworCWlmIChkZXYtPnNkciAhPSBOVUxMKQorCQlkbWFfZnJlZV9jb2hlcmVudChkZXYtPmNvcmVfZGV2LT5kZXZpY2UsCisJCQkJICBzaXplb2Yoc3RydWN0IGNlX3NkKSAqIFBQQzRYWF9OVU1fU0QsCisJCQkJICBkZXYtPnNkciwgZGV2LT5zZHJfcGEpOworCisJaWYgKGRldi0+c2NhdHRlcl9idWZmZXJfdmEgIT0gTlVMTCkKKwkJZG1hX2ZyZWVfY29oZXJlbnQoZGV2LT5jb3JlX2Rldi0+ZGV2aWNlLAorCQkJCSAgZGV2LT5zY2F0dGVyX2J1ZmZlcl9zaXplICogUFBDNFhYX05VTV9TRCwKKwkJCQkgIGRldi0+c2NhdHRlcl9idWZmZXJfdmEsCisJCQkJICBkZXYtPnNjYXR0ZXJfYnVmZmVyX3BhKTsKK30KKworLyoKKyAqIHdoZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuCisgKiBwcmVlbXB0aW9uIG9yIGludGVycnVwdCBtdXN0IGJlIGRpc2FibGVkCisgKi8KK3N0YXRpYyB1MzIgY3J5cHRvNHh4X2dldF9uX3NkKHN0cnVjdCBjcnlwdG80eHhfZGV2aWNlICpkZXYsIGludCBuKQoreworCXUzMiByZXR2YWw7CisJdTMyIHRtcDsKKworCWlmIChuID49IFBQQzRYWF9OVU1fU0QpCisJCXJldHVybiBFUklOR19XQVNfRlVMTDsKKworCXJldHZhbCA9IGRldi0+c2RyX2hlYWQ7CisJdG1wID0gKGRldi0+c2RyX2hlYWQgKyBuKSAlIFBQQzRYWF9OVU1fU0Q7CisJaWYgKGRldi0+c2RyX2hlYWQgPiBkZXYtPmdkcl90YWlsKSB7CisJCWlmICh0bXAgPCBkZXYtPnNkcl9oZWFkICYmIHRtcCA+PSBkZXYtPnNkcl90YWlsKQorCQkJcmV0dXJuIEVSSU5HX1dBU19GVUxMOworCX0gZWxzZSBpZiAoZGV2LT5zZHJfaGVhZCA8IGRldi0+c2RyX3RhaWwpIHsKKwkJaWYgKHRtcCA8IGRldi0+c2RyX2hlYWQgfHwgdG1wID49IGRldi0+c2RyX3RhaWwpCisJCQlyZXR1cm4gRVJJTkdfV0FTX0ZVTEw7CisJfSAvKiB0aGUgaGVhZCA9IHRhaWwsIG9yIGVtcHR5IGNhc2UgaXMgYWxyZWFkeSB0YWtlIGNhcmVkICovCisJZGV2LT5zZHJfaGVhZCA9IHRtcDsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB1MzIgY3J5cHRvNHh4X3B1dF9zZF90b19zZHIoc3RydWN0IGNyeXB0bzR4eF9kZXZpY2UgKmRldikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+Y29yZV9kZXYtPmxvY2ssIGZsYWdzKTsKKwlpZiAoZGV2LT5zZHJfdGFpbCA9PSBkZXYtPnNkcl9oZWFkKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+Y29yZV9kZXYtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmIChkZXYtPnNkcl90YWlsICE9IFBQQzRYWF9MQVNUX1NEKQorCQlkZXYtPnNkcl90YWlsKys7CisJZWxzZQorCQlkZXYtPnNkcl90YWlsID0gMDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmNvcmVfZGV2LT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgY2Vfc2QgKmNyeXB0bzR4eF9nZXRfc2RwKHN0cnVjdCBjcnlwdG80eHhfZGV2aWNlICpkZXYsCisJCQkJCSAgICAgIGRtYV9hZGRyX3QgKnNkX2RtYSwgdTMyIGlkeCkKK3sKKwkqc2RfZG1hID0gZGV2LT5zZHJfcGEgKyBzaXplb2Yoc3RydWN0IGNlX3NkKSAqIGlkeDsKKworCXJldHVybiAgKHN0cnVjdCBjZV9zZCAqKShkZXYtPnNkciArIHNpemVvZihzdHJ1Y3QgY2Vfc2QpICogaWR4KTsKK30KKworc3RhdGljIHUzMiBjcnlwdG80eHhfZmlsbF9vbmVfcGFnZShzdHJ1Y3QgY3J5cHRvNHh4X2RldmljZSAqZGV2LAorCQkJCSAgIGRtYV9hZGRyX3QgKmFkZHIsIHUzMiAqbGVuZ3RoLAorCQkJCSAgIHUzMiAqaWR4LCB1MzIgKm9mZnNldCwgdTMyICpuYnl0ZXMpCit7CisJdTMyIGxlbjsKKworCWlmICgqbGVuZ3RoID4gZGV2LT5zY2F0dGVyX2J1ZmZlcl9zaXplKSB7CisJCW1lbWNweShwaHlzX3RvX3ZpcnQoKmFkZHIpLAorCQkJZGV2LT5zY2F0dGVyX2J1ZmZlcl92YSArCisJCQkqaWR4ICogZGV2LT5zY2F0dGVyX2J1ZmZlcl9zaXplICsgKm9mZnNldCwKKwkJCWRldi0+c2NhdHRlcl9idWZmZXJfc2l6ZSk7CisJCSpvZmZzZXQgPSAwOworCQkqbGVuZ3RoIC09IGRldi0+c2NhdHRlcl9idWZmZXJfc2l6ZTsKKwkJKm5ieXRlcyAtPSBkZXYtPnNjYXR0ZXJfYnVmZmVyX3NpemU7CisJCWlmICgqaWR4ID09IFBQQzRYWF9MQVNUX1NEKQorCQkJKmlkeCA9IDA7CisJCWVsc2UKKwkJCSgqaWR4KSsrOworCQkqYWRkciA9ICphZGRyICsgIGRldi0+c2NhdHRlcl9idWZmZXJfc2l6ZTsKKwkJcmV0dXJuIDE7CisJfSBlbHNlIGlmICgqbGVuZ3RoIDwgZGV2LT5zY2F0dGVyX2J1ZmZlcl9zaXplKSB7CisJCW1lbWNweShwaHlzX3RvX3ZpcnQoKmFkZHIpLAorCQkJZGV2LT5zY2F0dGVyX2J1ZmZlcl92YSArCisJCQkqaWR4ICogZGV2LT5zY2F0dGVyX2J1ZmZlcl9zaXplICsgKm9mZnNldCwgKmxlbmd0aCk7CisJCWlmICgoKm9mZnNldCArICpsZW5ndGgpID09IGRldi0+c2NhdHRlcl9idWZmZXJfc2l6ZSkgeworCQkJaWYgKCppZHggPT0gUFBDNFhYX0xBU1RfU0QpCisJCQkJKmlkeCA9IDA7CisJCQllbHNlCisJCQkJKCppZHgpKys7CisJCQkqbmJ5dGVzIC09ICpsZW5ndGg7CisJCQkqb2Zmc2V0ID0gMDsKKwkJfSBlbHNlIHsKKwkJCSpuYnl0ZXMgLT0gKmxlbmd0aDsKKwkJCSpvZmZzZXQgKz0gKmxlbmd0aDsKKwkJfQorCisJCXJldHVybiAwOworCX0gZWxzZSB7CisJCWxlbiA9ICgqbmJ5dGVzIDw9IGRldi0+c2NhdHRlcl9idWZmZXJfc2l6ZSkgPworCQkJCSgqbmJ5dGVzKSA6IGRldi0+c2NhdHRlcl9idWZmZXJfc2l6ZTsKKwkJbWVtY3B5KHBoeXNfdG9fdmlydCgqYWRkciksCisJCQlkZXYtPnNjYXR0ZXJfYnVmZmVyX3ZhICsKKwkJCSppZHggKiBkZXYtPnNjYXR0ZXJfYnVmZmVyX3NpemUgKyAqb2Zmc2V0LAorCQkJbGVuKTsKKwkJKm9mZnNldCA9IDA7CisJCSpuYnl0ZXMgLT0gbGVuOworCisJCWlmICgqaWR4ID09IFBQQzRYWF9MQVNUX1NEKQorCQkJKmlkeCA9IDA7CisJCWVsc2UKKwkJCSgqaWR4KSsrOworCisJCXJldHVybiAwOworICAgIH0KK30KKworc3RhdGljIHZvaWQgY3J5cHRvNHh4X2NvcHlfcGt0X3RvX2RzdChzdHJ1Y3QgY3J5cHRvNHh4X2RldmljZSAqZGV2LAorCQkJCSAgICAgIHN0cnVjdCBjZV9wZCAqcGQsCisJCQkJICAgICAgc3RydWN0IHBkX3VpbmZvICpwZF91aW5mbywKKwkJCQkgICAgICB1MzIgbmJ5dGVzLAorCQkJCSAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqZHN0KQoreworCWRtYV9hZGRyX3QgYWRkcjsKKwl1MzIgdGhpc19zZDsKKwl1MzIgb2Zmc2V0OworCXUzMiBsZW47CisJdTMyIGk7CisJdTMyIHNnX2xlbjsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOworCisJdGhpc19zZCA9IHBkX3VpbmZvLT5maXJzdF9zZDsKKwlvZmZzZXQgPSAwOworCWkgPSAwOworCisJd2hpbGUgKG5ieXRlcykgeworCQlzZyA9ICZkc3RbaV07CisJCXNnX2xlbiA9IHNnLT5sZW5ndGg7CisJCWFkZHIgPSBkbWFfbWFwX3BhZ2UoZGV2LT5jb3JlX2Rldi0+ZGV2aWNlLCBzZ19wYWdlKHNnKSwKKwkJCQlzZy0+b2Zmc2V0LCBzZy0+bGVuZ3RoLCBETUFfVE9fREVWSUNFKTsKKworCQlpZiAob2Zmc2V0ID09IDApIHsKKwkJCWxlbiA9IChuYnl0ZXMgPD0gc2ctPmxlbmd0aCkgPyBuYnl0ZXMgOiBzZy0+bGVuZ3RoOworCQkJd2hpbGUgKGNyeXB0bzR4eF9maWxsX29uZV9wYWdlKGRldiwgJmFkZHIsICZsZW4sCisJCQkJJnRoaXNfc2QsICZvZmZzZXQsICZuYnl0ZXMpKQorCQkJCTsKKwkJCWlmICghbmJ5dGVzKQorCQkJCXJldHVybjsKKwkJCWkrKzsKKwkJfSBlbHNlIHsKKwkJCWxlbiA9IChuYnl0ZXMgPD0gKGRldi0+c2NhdHRlcl9idWZmZXJfc2l6ZSAtIG9mZnNldCkpID8KKwkJCQluYnl0ZXMgOiAoZGV2LT5zY2F0dGVyX2J1ZmZlcl9zaXplIC0gb2Zmc2V0KTsKKwkJCWxlbiA9IChzZy0+bGVuZ3RoIDwgbGVuKSA/IHNnLT5sZW5ndGggOiBsZW47CisJCQl3aGlsZSAoY3J5cHRvNHh4X2ZpbGxfb25lX3BhZ2UoZGV2LCAmYWRkciwgJmxlbiwKKwkJCQkJICAgICAgICZ0aGlzX3NkLCAmb2Zmc2V0LCAmbmJ5dGVzKSkKKwkJCQk7CisJCQlpZiAoIW5ieXRlcykKKwkJCQlyZXR1cm47CisJCQlzZ19sZW4gLT0gbGVuOworCQkJaWYgKHNnX2xlbikgeworCQkJCWFkZHIgKz0gbGVuOworCQkJCXdoaWxlIChjcnlwdG80eHhfZmlsbF9vbmVfcGFnZShkZXYsICZhZGRyLAorCQkJCQkmc2dfbGVuLCAmdGhpc19zZCwgJm9mZnNldCwgJm5ieXRlcykpCisJCQkJCTsKKwkJCX0KKwkJCWkrKzsKKwkJfQorCX0KK30KKworc3RhdGljIHUzMiBjcnlwdG80eHhfY29weV9kaWdlc3RfdG9fZHN0KHN0cnVjdCBwZF91aW5mbyAqcGRfdWluZm8sCisJCQkJCXN0cnVjdCBjcnlwdG80eHhfY3R4ICpjdHgpCit7CisJc3RydWN0IGR5bmFtaWNfc2FfY3RsICpzYSA9IChzdHJ1Y3QgZHluYW1pY19zYV9jdGwgKikgY3R4LT5zYV9pbjsKKwlzdHJ1Y3Qgc2Ffc3RhdGVfcmVjb3JkICpzdGF0ZV9yZWNvcmQgPQorCQkJCShzdHJ1Y3Qgc2Ffc3RhdGVfcmVjb3JkICopIHBkX3VpbmZvLT5zcl92YTsKKworCWlmIChzYS0+c2FfY29tbWFuZF8wLmJmLmhhc2hfYWxnID09IFNBX0hBU0hfQUxHX1NIQTEpIHsKKwkJbWVtY3B5KCh2b2lkICopIHBkX3VpbmZvLT5kZXN0X3ZhLCBzdGF0ZV9yZWNvcmQtPnNhdmVfZGlnZXN0LAorCQkgICAgICAgU0FfSEFTSF9BTEdfU0hBMV9ESUdFU1RfU0laRSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNyeXB0bzR4eF9yZXRfc2dfZGVzYyhzdHJ1Y3QgY3J5cHRvNHh4X2RldmljZSAqZGV2LAorCQkJCSAgc3RydWN0IHBkX3VpbmZvICpwZF91aW5mbykKK3sKKwlpbnQgaTsKKwlpZiAocGRfdWluZm8tPm51bV9nZCkgeworCQlmb3IgKGkgPSAwOyBpIDwgcGRfdWluZm8tPm51bV9nZDsgaSsrKQorCQkJY3J5cHRvNHh4X3B1dF9nZF90b19nZHIoZGV2KTsKKwkJcGRfdWluZm8tPmZpcnN0X2dkID0gMHhmZmZmZmZmZjsKKwkJcGRfdWluZm8tPm51bV9nZCA9IDA7CisJfQorCWlmIChwZF91aW5mby0+bnVtX3NkKSB7CisJCWZvciAoaSA9IDA7IGkgPCBwZF91aW5mby0+bnVtX3NkOyBpKyspCisJCQljcnlwdG80eHhfcHV0X3NkX3RvX3NkcihkZXYpOworCisJCXBkX3VpbmZvLT5maXJzdF9zZCA9IDB4ZmZmZmZmZmY7CisJCXBkX3VpbmZvLT5udW1fc2QgPSAwOworCX0KK30KKworc3RhdGljIHUzMiBjcnlwdG80eHhfYWJsa2NpcGhlcl9kb25lKHN0cnVjdCBjcnlwdG80eHhfZGV2aWNlICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgcGRfdWluZm8gKnBkX3VpbmZvLAorCQkJCSAgICAgc3RydWN0IGNlX3BkICpwZCkKK3sKKwlzdHJ1Y3QgY3J5cHRvNHh4X2N0eCAqY3R4OworCXN0cnVjdCBhYmxrY2lwaGVyX3JlcXVlc3QgKmFibGtfcmVxOworCXN0cnVjdCBzY2F0dGVybGlzdCAqZHN0OworCWRtYV9hZGRyX3QgYWRkcjsKKworCWFibGtfcmVxID0gYWJsa2NpcGhlcl9yZXF1ZXN0X2Nhc3QocGRfdWluZm8tPmFzeW5jX3JlcSk7CisJY3R4ICA9IGNyeXB0b190Zm1fY3R4KGFibGtfcmVxLT5iYXNlLnRmbSk7CisKKwlpZiAocGRfdWluZm8tPnVzaW5nX3NkKSB7CisJCWNyeXB0bzR4eF9jb3B5X3BrdF90b19kc3QoZGV2LCBwZCwgcGRfdWluZm8sIGFibGtfcmVxLT5uYnl0ZXMsCisJCQkJCSAgYWJsa19yZXEtPmRzdCk7CisJfSBlbHNlIHsKKwkJZHN0ID0gcGRfdWluZm8tPmRlc3RfdmE7CisJCWFkZHIgPSBkbWFfbWFwX3BhZ2UoZGV2LT5jb3JlX2Rldi0+ZGV2aWNlLCBzZ19wYWdlKGRzdCksCisJCQkJICAgIGRzdC0+b2Zmc2V0LCBkc3QtPmxlbmd0aCwgRE1BX0ZST01fREVWSUNFKTsKKwl9CisJY3J5cHRvNHh4X3JldF9zZ19kZXNjKGRldiwgcGRfdWluZm8pOworCWlmIChhYmxrX3JlcS0+YmFzZS5jb21wbGV0ZSAhPSBOVUxMKQorCQlhYmxrX3JlcS0+YmFzZS5jb21wbGV0ZSgmYWJsa19yZXEtPmJhc2UsIDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1MzIgY3J5cHRvNHh4X2FoYXNoX2RvbmUoc3RydWN0IGNyeXB0bzR4eF9kZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgcGRfdWluZm8gKnBkX3VpbmZvKQoreworCXN0cnVjdCBjcnlwdG80eHhfY3R4ICpjdHg7CisJc3RydWN0IGFoYXNoX3JlcXVlc3QgKmFoYXNoX3JlcTsKKworCWFoYXNoX3JlcSA9IGFoYXNoX3JlcXVlc3RfY2FzdChwZF91aW5mby0+YXN5bmNfcmVxKTsKKwljdHggID0gY3J5cHRvX3RmbV9jdHgoYWhhc2hfcmVxLT5iYXNlLnRmbSk7CisKKwljcnlwdG80eHhfY29weV9kaWdlc3RfdG9fZHN0KHBkX3VpbmZvLAorCQkJCSAgICAgY3J5cHRvX3RmbV9jdHgoYWhhc2hfcmVxLT5iYXNlLnRmbSkpOworCWNyeXB0bzR4eF9yZXRfc2dfZGVzYyhkZXYsIHBkX3VpbmZvKTsKKwkvKiBjYWxsIHVzZXIgcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb24geCAqLworCWlmIChhaGFzaF9yZXEtPmJhc2UuY29tcGxldGUgIT0gTlVMTCkKKwkJYWhhc2hfcmVxLT5iYXNlLmNvbXBsZXRlKCZhaGFzaF9yZXEtPmJhc2UsIDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1MzIgY3J5cHRvNHh4X3BkX2RvbmUoc3RydWN0IGNyeXB0bzR4eF9kZXZpY2UgKmRldiwgdTMyIGlkeCkKK3sKKwlzdHJ1Y3QgY2VfcGQgKnBkOworCXN0cnVjdCBwZF91aW5mbyAqcGRfdWluZm87CisKKwlwZCA9ICBkZXYtPnBkciArIHNpemVvZihzdHJ1Y3QgY2VfcGQpKmlkeDsKKwlwZF91aW5mbyA9IGRldi0+cGRyX3VpbmZvICsgc2l6ZW9mKHN0cnVjdCBwZF91aW5mbykqaWR4OworCWlmIChjcnlwdG9fdGZtX2FsZ190eXBlKHBkX3VpbmZvLT5hc3luY19yZXEtPnRmbSkgPT0KKwkJCUNSWVBUT19BTEdfVFlQRV9BQkxLQ0lQSEVSKQorCQlyZXR1cm4gY3J5cHRvNHh4X2FibGtjaXBoZXJfZG9uZShkZXYsIHBkX3VpbmZvLCBwZCk7CisJZWxzZQorCQlyZXR1cm4gY3J5cHRvNHh4X2FoYXNoX2RvbmUoZGV2LCBwZF91aW5mbyk7Cit9CisKKy8qKgorICogTm90ZTogT25seSB1c2UgdGhpcyBmdW5jdGlvbiB0byBjb3B5IGl0ZW1zIHRoYXQgaXMgd29yZCBhbGlnbmVkLgorICovCit2b2lkIGNyeXB0bzR4eF9tZW1jcHlfbGUodW5zaWduZWQgaW50ICpkc3QsCisJCQkgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAorCQkJIGludCBsZW4pCit7CisJdTggKnRtcDsKKwlmb3IgKDsgbGVuID49IDQ7IGJ1ZiArPSA0LCBsZW4gLT0gNCkKKwkJKmRzdCsrID0gY3B1X3RvX2xlMzIoKih1bnNpZ25lZCBpbnQgKikgYnVmKTsKKworCXRtcCA9ICh1OCAqKWRzdDsKKwlzd2l0Y2ggKGxlbikgeworCWNhc2UgMzoKKwkJKnRtcCsrID0gMDsKKwkJKnRtcCsrID0gKihidWYrMik7CisJCSp0bXArKyA9ICooYnVmKzEpOworCQkqdG1wKysgPSAqYnVmOworCQlicmVhazsKKwljYXNlIDI6CisJCSp0bXArKyA9IDA7CisJCSp0bXArKyA9IDA7CisJCSp0bXArKyA9ICooYnVmKzEpOworCQkqdG1wKysgPSAqYnVmOworCQlicmVhazsKKwljYXNlIDE6CisJCSp0bXArKyA9IDA7CisJCSp0bXArKyA9IDA7CisJCSp0bXArKyA9IDA7CisJCSp0bXArKyA9ICpidWY7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgY3J5cHRvNHh4X3N0b3BfYWxsKHN0cnVjdCBjcnlwdG80eHhfY29yZV9kZXZpY2UgKmNvcmVfZGV2KQoreworCWNyeXB0bzR4eF9kZXN0cm95X3Bkcihjb3JlX2Rldi0+ZGV2KTsKKwljcnlwdG80eHhfZGVzdHJveV9nZHIoY29yZV9kZXYtPmRldik7CisJY3J5cHRvNHh4X2Rlc3Ryb3lfc2RyKGNvcmVfZGV2LT5kZXYpOworCWRldl9zZXRfZHJ2ZGF0YShjb3JlX2Rldi0+ZGV2aWNlLCBOVUxMKTsKKwlpb3VubWFwKGNvcmVfZGV2LT5kZXYtPmNlX2Jhc2UpOworCWtmcmVlKGNvcmVfZGV2LT5kZXYpOworCWtmcmVlKGNvcmVfZGV2KTsKK30KKwordm9pZCBjcnlwdG80eHhfcmV0dXJuX3BkKHN0cnVjdCBjcnlwdG80eHhfZGV2aWNlICpkZXYsCisJCQkgdTMyIHBkX2VudHJ5LCBzdHJ1Y3QgY2VfcGQgKnBkLAorCQkJIHN0cnVjdCBwZF91aW5mbyAqcGRfdWluZm8pCit7CisJLyogaXJxIHNob3VsZCBiZSBhbHJlYWR5IGRpc2FibGVkICovCisJZGV2LT5wZHJfaGVhZCA9IHBkX2VudHJ5OworCXBkLT5wZF9jdGwudyA9IDA7CisJcGQtPnBkX2N0bF9sZW4udyA9IDA7CisJcGRfdWluZm8tPnN0YXRlID0gUERfRU5UUllfRlJFRTsKK30KKworLyoKKyAqIGRlcml2ZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gc2NhdHRlcmxpc3QKKyAqIFNoYW1sZXNzbHkgY29weSBmcm9tIHRhbGl0b3MuYworICovCitzdGF0aWMgaW50IGdldF9zZ19jb3VudChzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnX2xpc3QsIGludCBuYnl0ZXMpCit7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZyA9IHNnX2xpc3Q7CisJaW50IHNnX25lbnRzID0gMDsKKworCXdoaWxlIChuYnl0ZXMpIHsKKwkJc2dfbmVudHMrKzsKKwkJaWYgKHNnLT5sZW5ndGggPiBuYnl0ZXMpCisJCQlicmVhazsKKwkJbmJ5dGVzIC09IHNnLT5sZW5ndGg7CisJCXNnID0gc2dfbmV4dChzZyk7CisJfQorCisJcmV0dXJuIHNnX25lbnRzOworfQorCitzdGF0aWMgdTMyIGdldF9uZXh0X2dkKHUzMiBjdXJyZW50KQoreworCWlmIChjdXJyZW50ICE9IFBQQzRYWF9MQVNUX0dEKQorCQlyZXR1cm4gY3VycmVudCArIDE7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKworc3RhdGljIHUzMiBnZXRfbmV4dF9zZCh1MzIgY3VycmVudCkKK3sKKwlpZiAoY3VycmVudCAhPSBQUEM0WFhfTEFTVF9TRCkKKwkJcmV0dXJuIGN1cnJlbnQgKyAxOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKK3UzMiBjcnlwdG80eHhfYnVpbGRfcGQoc3RydWN0IGNyeXB0b19hc3luY19yZXF1ZXN0ICpyZXEsCisJCSAgICAgICBzdHJ1Y3QgY3J5cHRvNHh4X2N0eCAqY3R4LAorCQkgICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzcmMsCisJCSAgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmRzdCwKKwkJICAgICAgIHVuc2lnbmVkIGludCBkYXRhbGVuLAorCQkgICAgICAgdm9pZCAqaXYsIHUzMiBpdl9sZW4pCit7CisJc3RydWN0IGNyeXB0bzR4eF9kZXZpY2UgKmRldiA9IGN0eC0+ZGV2OworCWRtYV9hZGRyX3QgYWRkciwgcGRfZG1hLCBzZF9kbWEsIGdkX2RtYTsKKwlzdHJ1Y3QgZHluYW1pY19zYV9jdGwgKnNhOworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CisJc3RydWN0IGNlX2dkICpnZDsKKwlzdHJ1Y3QgY2VfcGQgKnBkOworCXUzMiBudW1fZ2QsIG51bV9zZDsKKwl1MzIgZnN0X2dkID0gMHhmZmZmZmZmZjsKKwl1MzIgZnN0X3NkID0gMHhmZmZmZmZmZjsKKwl1MzIgcGRfZW50cnk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgcGRfdWluZm8gKnBkX3VpbmZvID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQgbmJ5dGVzID0gZGF0YWxlbiwgaWR4OworCXVuc2lnbmVkIGludCBpdmxlbiA9IDA7CisJdTMyIGdkX2lkeCA9IDA7CisKKwkvKiBmaWd1cmUgaG93IG1hbnkgZ2QgaXMgbmVlZGVkICovCisJbnVtX2dkID0gZ2V0X3NnX2NvdW50KHNyYywgZGF0YWxlbik7CisJaWYgKG51bV9nZCA9PSAxKQorCQludW1fZ2QgPSAwOworCisJLyogZmlndXJlIGhvdyBtYW55IHNkIGlzIG5lZWRlZCAqLworCWlmIChzZ19pc19sYXN0KGRzdCkgfHwgY3R4LT5pc19oYXNoKSB7CisJCW51bV9zZCA9IDA7CisJfSBlbHNlIHsKKwkJaWYgKGRhdGFsZW4gPiBQUEM0WFhfU0RfQlVGRkVSX1NJWkUpIHsKKwkJCW51bV9zZCA9IGRhdGFsZW4gLyBQUEM0WFhfU0RfQlVGRkVSX1NJWkU7CisJCQlpZiAoZGF0YWxlbiAlIFBQQzRYWF9TRF9CVUZGRVJfU0laRSkKKwkJCQludW1fc2QrKzsKKwkJfSBlbHNlIHsKKwkJCW51bV9zZCA9IDE7CisJCX0KKwl9CisKKwkvKgorCSAqIFRoZSBmb2xsb3cgc2VjdGlvbiBvZiBjb2RlIG5lZWRzIHRvIGJlIHByb3RlY3RlZAorCSAqIFRoZSBnYXRoZXIgcmluZyBhbmQgc2NhdHRlciByaW5nIG5lZWRzIHRvIGJlIGNvbnNlY3V0aXZlCisJICogSW4gY2FzZSBvZiBydW4gb3V0IG9mIGFueSBraW5kIG9mIGRlc2NyaXB0b3IsIHRoZSBkZXNjcmlwdG9yCisJICogYWxyZWFkeSBnb3QgbXVzdCBiZSByZXR1cm4gdGhlIG9yaWdpbmFsIHBsYWNlLgorCSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmNvcmVfZGV2LT5sb2NrLCBmbGFncyk7CisJaWYgKG51bV9nZCkgeworCQlmc3RfZ2QgPSBjcnlwdG80eHhfZ2V0X25fZ2QoZGV2LCBudW1fZ2QpOworCQlpZiAoZnN0X2dkID09IEVSSU5HX1dBU19GVUxMKSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmNvcmVfZGV2LT5sb2NrLCBmbGFncyk7CisJCQlyZXR1cm4gLUVBR0FJTjsKKwkJfQorCX0KKwlpZiAobnVtX3NkKSB7CisJCWZzdF9zZCA9IGNyeXB0bzR4eF9nZXRfbl9zZChkZXYsIG51bV9zZCk7CisJCWlmIChmc3Rfc2QgPT0gRVJJTkdfV0FTX0ZVTEwpIHsKKwkJCWlmIChudW1fZ2QpCisJCQkJZGV2LT5nZHJfaGVhZCA9IGZzdF9nZDsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+Y29yZV9kZXYtPmxvY2ssIGZsYWdzKTsKKwkJCXJldHVybiAtRUFHQUlOOworCQl9CisJfQorCXBkX2VudHJ5ID0gY3J5cHRvNHh4X2dldF9wZF9mcm9tX3Bkcl9ub2xvY2soZGV2KTsKKwlpZiAocGRfZW50cnkgPT0gRVJJTkdfV0FTX0ZVTEwpIHsKKwkJaWYgKG51bV9nZCkKKwkJCWRldi0+Z2RyX2hlYWQgPSBmc3RfZ2Q7CisJCWlmIChudW1fc2QpCisJCQlkZXYtPnNkcl9oZWFkID0gZnN0X3NkOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmNvcmVfZGV2LT5sb2NrLCBmbGFncyk7CisJCXJldHVybiAtRUFHQUlOOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmNvcmVfZGV2LT5sb2NrLCBmbGFncyk7CisKKwlwZF91aW5mbyA9IChzdHJ1Y3QgcGRfdWluZm8gKikoZGV2LT5wZHJfdWluZm8gKworCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IHBkX3VpbmZvKSAqIHBkX2VudHJ5KTsKKwlwZCA9IGNyeXB0bzR4eF9nZXRfcGRwKGRldiwgJnBkX2RtYSwgcGRfZW50cnkpOworCXBkX3VpbmZvLT5hc3luY19yZXEgPSByZXE7CisJcGRfdWluZm8tPm51bV9nZCA9IG51bV9nZDsKKwlwZF91aW5mby0+bnVtX3NkID0gbnVtX3NkOworCisJaWYgKGl2X2xlbiB8fCBjdHgtPmlzX2hhc2gpIHsKKwkJaXZsZW4gPSBpdl9sZW47CisJCXBkLT5zYSA9IHBkX3VpbmZvLT5zYV9wYTsKKwkJc2EgPSAoc3RydWN0IGR5bmFtaWNfc2FfY3RsICopIHBkX3VpbmZvLT5zYV92YTsKKwkJaWYgKGN0eC0+ZGlyZWN0aW9uID09IERJUl9JTkJPVU5EKQorCQkJbWVtY3B5KHNhLCBjdHgtPnNhX2luLCBjdHgtPnNhX2xlbiAqIDQpOworCQllbHNlCisJCQltZW1jcHkoc2EsIGN0eC0+c2Ffb3V0LCBjdHgtPnNhX2xlbiAqIDQpOworCisJCW1lbWNweSgodm9pZCAqKSBzYSArIGN0eC0+b2Zmc2V0X3RvX3NyX3B0ciwKKwkJCSZwZF91aW5mby0+c3JfcGEsIDQpOworCisJCWlmIChpdl9sZW4pCisJCQljcnlwdG80eHhfbWVtY3B5X2xlKHBkX3VpbmZvLT5zcl92YSwgaXYsIGl2X2xlbik7CisJfSBlbHNlIHsKKwkJaWYgKGN0eC0+ZGlyZWN0aW9uID09IERJUl9JTkJPVU5EKSB7CisJCQlwZC0+c2EgPSBjdHgtPnNhX2luX2RtYV9hZGRyOworCQkJc2EgPSAoc3RydWN0IGR5bmFtaWNfc2FfY3RsICopIGN0eC0+c2FfaW47CisJCX0gZWxzZSB7CisJCQlwZC0+c2EgPSBjdHgtPnNhX291dF9kbWFfYWRkcjsKKwkJCXNhID0gKHN0cnVjdCBkeW5hbWljX3NhX2N0bCAqKSBjdHgtPnNhX291dDsKKwkJfQorCX0KKwlwZC0+c2FfbGVuID0gY3R4LT5zYV9sZW47CisJaWYgKG51bV9nZCkgeworCQkvKiBnZXQgZmlyc3QgZ2Qgd2UgYXJlIGdvaW5nIHRvIHVzZSAqLworCQlnZF9pZHggPSBmc3RfZ2Q7CisJCXBkX3VpbmZvLT5maXJzdF9nZCA9IGZzdF9nZDsKKwkJcGRfdWluZm8tPm51bV9nZCA9IG51bV9nZDsKKwkJZ2QgPSBjcnlwdG80eHhfZ2V0X2dkcChkZXYsICZnZF9kbWEsIGdkX2lkeCk7CisJCXBkLT5zcmMgPSBnZF9kbWE7CisJCS8qIGVuYWJsZSBnYXRoZXIgKi8KKwkJc2EtPnNhX2NvbW1hbmRfMC5iZi5nYXRoZXIgPSAxOworCQlpZHggPSAwOworCQlzcmMgPSAmc3JjWzBdOworCQkvKiB3YWxrIHRoZSBzZywgYW5kIHNldHVwIGdhdGhlciBhcnJheSAqLworCQl3aGlsZSAobmJ5dGVzKSB7CisJCQlzZyA9ICZzcmNbaWR4XTsKKwkJCWFkZHIgPSBkbWFfbWFwX3BhZ2UoZGV2LT5jb3JlX2Rldi0+ZGV2aWNlLCBzZ19wYWdlKHNnKSwKKwkJCQkgICAgc2ctPm9mZnNldCwgc2ctPmxlbmd0aCwgRE1BX1RPX0RFVklDRSk7CisJCQlnZC0+cHRyID0gYWRkcjsKKwkJCWdkLT5jdGxfbGVuLmxlbiA9IHNnLT5sZW5ndGg7CisJCQlnZC0+Y3RsX2xlbi5kb25lID0gMDsKKwkJCWdkLT5jdGxfbGVuLnJlYWR5ID0gMTsKKwkJCWlmIChzZy0+bGVuZ3RoID49IG5ieXRlcykKKwkJCQlicmVhazsKKwkJCW5ieXRlcyAtPSBzZy0+bGVuZ3RoOworCQkJZ2RfaWR4ID0gZ2V0X25leHRfZ2QoZ2RfaWR4KTsKKwkJCWdkID0gY3J5cHRvNHh4X2dldF9nZHAoZGV2LCAmZ2RfZG1hLCBnZF9pZHgpOworCQkJaWR4Kys7CisJCX0KKwl9IGVsc2UgeworCQlwZC0+c3JjID0gKHUzMilkbWFfbWFwX3BhZ2UoZGV2LT5jb3JlX2Rldi0+ZGV2aWNlLCBzZ19wYWdlKHNyYyksCisJCQkJc3JjLT5vZmZzZXQsIHNyYy0+bGVuZ3RoLCBETUFfVE9fREVWSUNFKTsKKwkJLyoKKwkJICogRGlzYWJsZSBnYXRoZXIgaW4gc2EgY29tbWFuZAorCQkgKi8KKwkJc2EtPnNhX2NvbW1hbmRfMC5iZi5nYXRoZXIgPSAwOworCQkvKgorCQkgKiBJbmRpY2F0ZSBnYXRoZXIgYXJyYXkgaXMgbm90IHVzZWQKKwkJICovCisJCXBkX3VpbmZvLT5maXJzdF9nZCA9IDB4ZmZmZmZmZmY7CisJCXBkX3VpbmZvLT5udW1fZ2QgPSAwOworCX0KKwlpZiAoY3R4LT5pc19oYXNoIHx8IHNnX2lzX2xhc3QoZHN0KSkgeworCQkvKgorCQkgKiB3ZSBrbm93IGFwcGxpY2F0aW9uIGdpdmUgdXMgZHN0IGEgd2hvbGUgcGllY2Ugb2YgbWVtb3J5CisJCSAqIG5vIG5lZWQgdG8gdXNlIHNjYXR0ZXIgcmluZy4KKwkJICogSW4gY2FzZSBvZiBpc19oYXNoLCB0aGUgaWN2IGlzIGFsd2F5cyBhdCBlbmQgb2Ygc3JjIGRhdGEuCisJCSAqLworCQlwZF91aW5mby0+dXNpbmdfc2QgPSAwOworCQlwZF91aW5mby0+Zmlyc3Rfc2QgPSAweGZmZmZmZmZmOworCQlwZF91aW5mby0+bnVtX3NkID0gMDsKKwkJcGRfdWluZm8tPmRlc3RfdmEgPSBkc3Q7CisJCXNhLT5zYV9jb21tYW5kXzAuYmYuc2NhdHRlciA9IDA7CisJCWlmIChjdHgtPmlzX2hhc2gpCisJCQlwZC0+ZGVzdCA9IHZpcnRfdG9fcGh5cygodm9pZCAqKWRzdCk7CisJCWVsc2UKKwkJCXBkLT5kZXN0ID0gKHUzMilkbWFfbWFwX3BhZ2UoZGV2LT5jb3JlX2Rldi0+ZGV2aWNlLAorCQkJCQlzZ19wYWdlKGRzdCksIGRzdC0+b2Zmc2V0LAorCQkJCQlkc3QtPmxlbmd0aCwgRE1BX1RPX0RFVklDRSk7CisJfSBlbHNlIHsKKwkJc3RydWN0IGNlX3NkICpzZCA9IE5VTEw7CisJCXUzMiBzZF9pZHggPSBmc3Rfc2Q7CisJCW5ieXRlcyA9IGRhdGFsZW47CisJCXNhLT5zYV9jb21tYW5kXzAuYmYuc2NhdHRlciA9IDE7CisJCXBkX3VpbmZvLT51c2luZ19zZCA9IDE7CisJCXBkX3VpbmZvLT5kZXN0X3ZhID0gZHN0OworCQlwZF91aW5mby0+Zmlyc3Rfc2QgPSBmc3Rfc2Q7CisJCXBkX3VpbmZvLT5udW1fc2QgPSBudW1fc2Q7CisJCXNkID0gY3J5cHRvNHh4X2dldF9zZHAoZGV2LCAmc2RfZG1hLCBzZF9pZHgpOworCQlwZC0+ZGVzdCA9IHNkX2RtYTsKKwkJLyogc2V0dXAgc2NhdHRlciBkZXNjcmlwdG9yICovCisJCXNkLT5jdGwuZG9uZSA9IDA7CisJCXNkLT5jdGwucmR5ID0gMTsKKwkJLyogc2QtPnB0ciBzaG91bGQgYmUgc2V0dXAgYnkgc2RfaW5pdCByb3V0aW5lKi8KKwkJaWR4ID0gMDsKKwkJaWYgKG5ieXRlcyA+PSBQUEM0WFhfU0RfQlVGRkVSX1NJWkUpCisJCQluYnl0ZXMgLT0gUFBDNFhYX1NEX0JVRkZFUl9TSVpFOworCQllbHNlCisJCQluYnl0ZXMgPSAwOworCQl3aGlsZSAobmJ5dGVzKSB7CisJCQlzZF9pZHggPSBnZXRfbmV4dF9zZChzZF9pZHgpOworCQkJc2QgPSBjcnlwdG80eHhfZ2V0X3NkcChkZXYsICZzZF9kbWEsIHNkX2lkeCk7CisJCQkvKiBzZXR1cCBzY2F0dGVyIGRlc2NyaXB0b3IgKi8KKwkJCXNkLT5jdGwuZG9uZSA9IDA7CisJCQlzZC0+Y3RsLnJkeSA9IDE7CisJCQlpZiAobmJ5dGVzID49IFBQQzRYWF9TRF9CVUZGRVJfU0laRSkKKwkJCQluYnl0ZXMgLT0gUFBDNFhYX1NEX0JVRkZFUl9TSVpFOworCQkJZWxzZQorCQkJCS8qCisJCQkJICogU0QgZW50cnkgY2FuIGhvbGQgUFBDNFhYX1NEX0JVRkZFUl9TSVpFLAorCQkJCSAqIHdoaWNoIGlzIG1vcmUgdGhhbiBuYnl0ZXMsIHNvIGRvbmUuCisJCQkJICovCisJCQkJbmJ5dGVzID0gMDsKKwkJfQorCX0KKworCXNhLT5zYV9jb21tYW5kXzEuYmYuaGFzaF9jcnlwdG9fb2Zmc2V0ID0gMDsKKwlwZC0+cGRfY3RsLncgPSBjdHgtPnBkX2N0bDsKKwlwZC0+cGRfY3RsX2xlbi53ID0gMHgwMDQwMDAwMCB8IChjdHgtPmJ5cGFzcyA8PCAyNCkgfCBkYXRhbGVuOworCXBkX3VpbmZvLT5zdGF0ZSA9IFBEX0VOVFJZX0lOVVNFOworCXdtYigpOworCS8qIHdyaXRlIGFueSB2YWx1ZSB0byBwdXNoIGVuZ2luZSB0byByZWFkIGEgcGQgKi8KKwl3cml0ZWwoMSwgZGV2LT5jZV9iYXNlICsgQ1JZUFRPNFhYX0lOVF9ERVNDUl9SRCk7CisJcmV0dXJuIC1FSU5QUk9HUkVTUzsKK30KKworLyoqCisgKiBBbGdvcml0aG0gUmVnaXN0cmF0aW9uIEZ1bmN0aW9ucworICovCitzdGF0aWMgaW50IGNyeXB0bzR4eF9hbGdfaW5pdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQoreworCXN0cnVjdCBjcnlwdG9fYWxnICphbGcgPSB0Zm0tPl9fY3J0X2FsZzsKKwlzdHJ1Y3QgY3J5cHRvNHh4X2FsZyAqYW1jY19hbGcgPSBjcnlwdG9fYWxnX3RvX2NyeXB0bzR4eF9hbGcoYWxnKTsKKwlzdHJ1Y3QgY3J5cHRvNHh4X2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKKworCWN0eC0+ZGV2ID0gYW1jY19hbGctPmRldjsKKwljdHgtPnNhX2luID0gTlVMTDsKKwljdHgtPnNhX291dCA9IE5VTEw7CisJY3R4LT5zYV9pbl9kbWFfYWRkciA9IDA7CisJY3R4LT5zYV9vdXRfZG1hX2FkZHIgPSAwOworCWN0eC0+c2FfbGVuID0gMDsKKworCWlmIChhbGctPmNyYV90eXBlID09ICZjcnlwdG9fYWJsa2NpcGhlcl90eXBlKQorCQl0Zm0tPmNydF9hYmxrY2lwaGVyLnJlcXNpemUgPSBzaXplb2Yoc3RydWN0IGNyeXB0bzR4eF9jdHgpOworCWVsc2UgaWYgKGFsZy0+Y3JhX3R5cGUgPT0gJmNyeXB0b19haGFzaF90eXBlKQorCQl0Zm0tPmNydF9haGFzaC5yZXFzaXplID0gc2l6ZW9mKHN0cnVjdCBjcnlwdG80eHhfY3R4KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjcnlwdG80eHhfYWxnX2V4aXQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKK3sKKwlzdHJ1Y3QgY3J5cHRvNHh4X2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKKworCWNyeXB0bzR4eF9mcmVlX3NhKGN0eCk7CisJY3J5cHRvNHh4X2ZyZWVfc3RhdGVfcmVjb3JkKGN0eCk7Cit9CisKK2ludCBjcnlwdG80eHhfcmVnaXN0ZXJfYWxnKHN0cnVjdCBjcnlwdG80eHhfZGV2aWNlICpzZWNfZGV2LAorCQkJICAgc3RydWN0IGNyeXB0b19hbGcgKmNyeXB0b19hbGcsIGludCBhcnJheV9zaXplKQoreworCXN0cnVjdCBjcnlwdG80eHhfYWxnICphbGc7CisJaW50IGk7CisJaW50IHJjID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBhcnJheV9zaXplOyBpKyspIHsKKwkJYWxnID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNyeXB0bzR4eF9hbGcpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFhbGcpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQlhbGctPmFsZyA9IGNyeXB0b19hbGdbaV07CisJCUlOSVRfTElTVF9IRUFEKCZhbGctPmFsZy5jcmFfbGlzdCk7CisJCWlmIChhbGctPmFsZy5jcmFfaW5pdCA9PSBOVUxMKQorCQkJYWxnLT5hbGcuY3JhX2luaXQgPSBjcnlwdG80eHhfYWxnX2luaXQ7CisJCWlmIChhbGctPmFsZy5jcmFfZXhpdCA9PSBOVUxMKQorCQkJYWxnLT5hbGcuY3JhX2V4aXQgPSBjcnlwdG80eHhfYWxnX2V4aXQ7CisJCWFsZy0+ZGV2ID0gc2VjX2RldjsKKwkJcmMgPSBjcnlwdG9fcmVnaXN0ZXJfYWxnKCZhbGctPmFsZyk7CisJCWlmIChyYykgeworCQkJbGlzdF9kZWwoJmFsZy0+ZW50cnkpOworCQkJa2ZyZWUoYWxnKTsKKwkJfSBlbHNlIHsKKwkJCWxpc3RfYWRkX3RhaWwoJmFsZy0+ZW50cnksICZzZWNfZGV2LT5hbGdfbGlzdCk7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY3J5cHRvNHh4X3VucmVnaXN0ZXJfYWxnKHN0cnVjdCBjcnlwdG80eHhfZGV2aWNlICpzZWNfZGV2KQoreworCXN0cnVjdCBjcnlwdG80eHhfYWxnICphbGcsICp0bXA7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoYWxnLCB0bXAsICZzZWNfZGV2LT5hbGdfbGlzdCwgZW50cnkpIHsKKwkJbGlzdF9kZWwoJmFsZy0+ZW50cnkpOworCQljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmFsZy0+YWxnKTsKKwkJa2ZyZWUoYWxnKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNyeXB0bzR4eF9iaF90YXNrbGV0X2NiKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAoc3RydWN0IGRldmljZSAqKWRhdGE7CisJc3RydWN0IGNyeXB0bzR4eF9jb3JlX2RldmljZSAqY29yZV9kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgcGRfdWluZm8gKnBkX3VpbmZvOworCXN0cnVjdCBjZV9wZCAqcGQ7CisJdTMyIHRhaWw7CisKKwl3aGlsZSAoY29yZV9kZXYtPmRldi0+cGRyX2hlYWQgIT0gY29yZV9kZXYtPmRldi0+cGRyX3RhaWwpIHsKKwkJdGFpbCA9IGNvcmVfZGV2LT5kZXYtPnBkcl90YWlsOworCQlwZF91aW5mbyA9IGNvcmVfZGV2LT5kZXYtPnBkcl91aW5mbyArCisJCQlzaXplb2Yoc3RydWN0IHBkX3VpbmZvKSp0YWlsOworCQlwZCA9ICBjb3JlX2Rldi0+ZGV2LT5wZHIgKyBzaXplb2Yoc3RydWN0IGNlX3BkKSAqIHRhaWw7CisJCWlmICgocGRfdWluZm8tPnN0YXRlID09IFBEX0VOVFJZX0lOVVNFKSAmJgorCQkJCSAgIHBkLT5wZF9jdGwuYmYucGVfZG9uZSAmJgorCQkJCSAgICFwZC0+cGRfY3RsLmJmLmhvc3RfcmVhZHkpIHsKKwkJCXBkLT5wZF9jdGwuYmYucGVfZG9uZSA9IDA7CisJCQljcnlwdG80eHhfcGRfZG9uZShjb3JlX2Rldi0+ZGV2LCB0YWlsKTsKKwkJCWNyeXB0bzR4eF9wdXRfcGRfdG9fcGRyKGNvcmVfZGV2LT5kZXYsIHRhaWwpOworCQkJcGRfdWluZm8tPnN0YXRlID0gUERfRU5UUllfRlJFRTsKKwkJfSBlbHNlIHsKKwkJCS8qIGlmIHRhaWwgbm90IGRvbmUsIGJyZWFrICovCisJCQlicmVhazsKKwkJfQorCX0KK30KKworLyoqCisgKiBUb3AgSGFsZiBvZiBpc3IuCisgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBjcnlwdG80eHhfY2VfaW50ZXJydXB0X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAoc3RydWN0IGRldmljZSAqKWRhdGE7CisJc3RydWN0IGNyeXB0bzR4eF9jb3JlX2RldmljZSAqY29yZV9kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmIChjb3JlX2Rldi0+ZGV2LT5jZV9iYXNlID09IDApCisJCXJldHVybiAwOworCisJd3JpdGVsKFBQQzRYWF9JTlRFUlJVUFRfQ0xSLAorCSAgICAgICBjb3JlX2Rldi0+ZGV2LT5jZV9iYXNlICsgQ1JZUFRPNFhYX0lOVF9DTFIpOworCXRhc2tsZXRfc2NoZWR1bGUoJmNvcmVfZGV2LT50YXNrbGV0KTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyoqCisgKiBTdXBwb3J0ZWQgQ3J5cHRvIEFsZ29yaXRobXMKKyAqLworc3RydWN0IGNyeXB0b19hbGcgY3J5cHRvNHh4X2FsZ1tdID0geworCS8qIENyeXB0byBBRVMgbW9kZXMgKi8KKwl7CisJCS5jcmFfbmFtZSAJPSAiY2JjKGFlcykiLAorCQkuY3JhX2RyaXZlcl9uYW1lID0gImNiYy1hZXMtcHBjNHh4IiwKKwkJLmNyYV9wcmlvcml0eSAJPSBDUllQVE80WFhfQ1JZUFRPX1BSSU9SSVRZLAorCQkuY3JhX2ZsYWdzIAk9IENSWVBUT19BTEdfVFlQRV9BQkxLQ0lQSEVSIHwgQ1JZUFRPX0FMR19BU1lOQywKKwkJLmNyYV9ibG9ja3NpemUgCT0gQUVTX0JMT0NLX1NJWkUsCisJCS5jcmFfY3R4c2l6ZSAJPSBzaXplb2Yoc3RydWN0IGNyeXB0bzR4eF9jdHgpLAorCQkuY3JhX2FsaWdubWFzayAJPSAwLAorCQkuY3JhX3R5cGUgCT0gJmNyeXB0b19hYmxrY2lwaGVyX3R5cGUsCisJCS5jcmFfbW9kdWxlIAk9IFRISVNfTU9EVUxFLAorCQkuY3JhX3UgCQk9IHsKKwkJCS5hYmxrY2lwaGVyID0geworCQkJCS5taW5fa2V5c2l6ZSAJPSBBRVNfTUlOX0tFWV9TSVpFLAorCQkJCS5tYXhfa2V5c2l6ZSAJPSBBRVNfTUFYX0tFWV9TSVpFLAorCQkJCS5pdnNpemUJCT0gQUVTX0lWX1NJWkUsCisJCQkJLnNldGtleSAJPSBjcnlwdG80eHhfc2V0a2V5X2Flc19jYmMsCisJCQkJLmVuY3J5cHQgCT0gY3J5cHRvNHh4X2VuY3J5cHQsCisJCQkJLmRlY3J5cHQgCT0gY3J5cHRvNHh4X2RlY3J5cHQsCisJCQl9CisJCX0KKwl9LAorCS8qIEhhc2ggU0hBMSAqLworCXsKKwkJLmNyYV9uYW1lCT0gInNoYTEiLAorCQkuY3JhX2RyaXZlcl9uYW1lID0gInNoYTEtcHBjNHh4IiwKKwkJLmNyYV9wcmlvcml0eQk9IENSWVBUTzRYWF9DUllQVE9fUFJJT1JJVFksCisJCS5jcmFfZmxhZ3MJPSBDUllQVE9fQUxHX1RZUEVfQUhBU0ggfCBDUllQVE9fQUxHX0FTWU5DLAorCQkuY3JhX2Jsb2Nrc2l6ZQk9IFNIQTFfQkxPQ0tfU0laRSwKKwkJLmNyYV9jdHhzaXplCT0gc2l6ZW9mKHN0cnVjdCBjcnlwdG80eHhfY3R4KSwKKwkJLmNyYV9hbGlnbm1hc2sJPSAwLAorCQkuY3JhX3R5cGUJPSAmY3J5cHRvX2FoYXNoX3R5cGUsCisJCS5jcmFfaW5pdAk9IGNyeXB0bzR4eF9zaGExX2FsZ19pbml0LAorCQkuY3JhX21vZHVsZQk9IFRISVNfTU9EVUxFLAorCQkuY3JhX3UJCT0geworCQkJLmFoYXNoID0geworCQkJCS5kaWdlc3RzaXplIAk9IFNIQTFfRElHRVNUX1NJWkUsCisJCQkJLmluaXQJCT0gY3J5cHRvNHh4X2hhc2hfaW5pdCwKKwkJCQkudXBkYXRlCQk9IGNyeXB0bzR4eF9oYXNoX3VwZGF0ZSwKKwkJCQkuZmluYWwgIAk9IGNyeXB0bzR4eF9oYXNoX2ZpbmFsLAorCQkJCS5kaWdlc3QgCT0gY3J5cHRvNHh4X2hhc2hfZGlnZXN0LAorCQkJfQorCQl9CisJfSwKK307CisKKy8qKgorICogTW9kdWxlIEluaXRpYWxpemF0aW9uIFJvdXRpbmUKKyAqLworc3RhdGljIGludCBfX2luaXQgY3J5cHRvNHh4X3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2LAorCQkJCSAgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2gpCit7CisJaW50IHJjOworCXN0cnVjdCByZXNvdXJjZSByZXM7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJm9mZGV2LT5kZXY7CisJc3RydWN0IGNyeXB0bzR4eF9jb3JlX2RldmljZSAqY29yZV9kZXY7CisKKwlyYyA9IG9mX2FkZHJlc3NfdG9fcmVzb3VyY2Uob2ZkZXYtPm5vZGUsIDAsICZyZXMpOworCWlmIChyYykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAob2ZfZmluZF9jb21wYXRpYmxlX25vZGUoTlVMTCwgTlVMTCwgImFtY2MscHBjNDYwZXgtY3J5cHRvIikpIHsKKwkJbXRkY3JpKFNEUjAsIFBQQzQ2MEVYX1NEUjBfU1JTVCwKKwkJICAgICAgIG1mZGNyaShTRFIwLCBQUEM0NjBFWF9TRFIwX1NSU1QpIHwgUFBDNDYwRVhfQ0VfUkVTRVQpOworCQltdGRjcmkoU0RSMCwgUFBDNDYwRVhfU0RSMF9TUlNULAorCQkgICAgICAgbWZkY3JpKFNEUjAsIFBQQzQ2MEVYX1NEUjBfU1JTVCkgJiB+UFBDNDYwRVhfQ0VfUkVTRVQpOworCX0gZWxzZSBpZiAob2ZfZmluZF9jb21wYXRpYmxlX25vZGUoTlVMTCwgTlVMTCwKKwkJCSJhbWNjLHBwYzQwNWV4LWNyeXB0byIpKSB7CisJCW10ZGNyaShTRFIwLCBQUEM0MDVFWF9TRFIwX1NSU1QsCisJCSAgICAgICBtZmRjcmkoU0RSMCwgUFBDNDA1RVhfU0RSMF9TUlNUKSB8IFBQQzQwNUVYX0NFX1JFU0VUKTsKKwkJbXRkY3JpKFNEUjAsIFBQQzQwNUVYX1NEUjBfU1JTVCwKKwkJICAgICAgIG1mZGNyaShTRFIwLCBQUEM0MDVFWF9TRFIwX1NSU1QpICYgflBQQzQwNUVYX0NFX1JFU0VUKTsKKwl9IGVsc2UgaWYgKG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsCisJCQkiYW1jYyxwcGM0NjBzeC1jcnlwdG8iKSkgeworCQltdGRjcmkoU0RSMCwgUFBDNDYwU1hfU0RSMF9TUlNULAorCQkgICAgICAgbWZkY3JpKFNEUjAsIFBQQzQ2MFNYX1NEUjBfU1JTVCkgfCBQUEM0NjBTWF9DRV9SRVNFVCk7CisJCW10ZGNyaShTRFIwLCBQUEM0NjBTWF9TRFIwX1NSU1QsCisJCSAgICAgICBtZmRjcmkoU0RSMCwgUFBDNDYwU1hfU0RSMF9TUlNUKSAmIH5QUEM0NjBTWF9DRV9SRVNFVCk7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJDcnlwdG8gRnVuY3Rpb24gTm90IHN1cHBvcnRlZCFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwljb3JlX2RldiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjcnlwdG80eHhfY29yZV9kZXZpY2UpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNvcmVfZGV2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGNvcmVfZGV2KTsKKwljb3JlX2Rldi0+b2ZkZXYgPSBvZmRldjsKKwljb3JlX2Rldi0+ZGV2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNyeXB0bzR4eF9kZXZpY2UpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNvcmVfZGV2LT5kZXYpCisJCWdvdG8gZXJyX2FsbG9jX2RldjsKKworCWNvcmVfZGV2LT5kZXYtPmNvcmVfZGV2ID0gY29yZV9kZXY7CisJY29yZV9kZXYtPmRldmljZSA9IGRldjsKKwlzcGluX2xvY2tfaW5pdCgmY29yZV9kZXYtPmxvY2spOworCUlOSVRfTElTVF9IRUFEKCZjb3JlX2Rldi0+ZGV2LT5hbGdfbGlzdCk7CisJcmMgPSBjcnlwdG80eHhfYnVpbGRfcGRyKGNvcmVfZGV2LT5kZXYpOworCWlmIChyYykKKwkJZ290byBlcnJfYnVpbGRfcGRyOworCisJcmMgPSBjcnlwdG80eHhfYnVpbGRfZ2RyKGNvcmVfZGV2LT5kZXYpOworCWlmIChyYykKKwkJZ290byBlcnJfYnVpbGRfZ2RyOworCisJcmMgPSBjcnlwdG80eHhfYnVpbGRfc2RyKGNvcmVfZGV2LT5kZXYpOworCWlmIChyYykKKwkJZ290byBlcnJfYnVpbGRfc2RyOworCisJLyogSW5pdCB0YXNrbGV0IGZvciBib3R0b20gaGFsZiBwcm9jZXNzaW5nICovCisJdGFza2xldF9pbml0KCZjb3JlX2Rldi0+dGFza2xldCwgY3J5cHRvNHh4X2JoX3Rhc2tsZXRfY2IsCisJCSAgICAgKHVuc2lnbmVkIGxvbmcpIGRldik7CisKKwkvKiBSZWdpc3RlciBmb3IgQ3J5cHRvIGlzciwgQ3J5cHRvIEVuZ2luZSBJUlEgKi8KKwljb3JlX2Rldi0+aXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAob2ZkZXYtPm5vZGUsIDApOworCXJjID0gcmVxdWVzdF9pcnEoY29yZV9kZXYtPmlycSwgY3J5cHRvNHh4X2NlX2ludGVycnVwdF9oYW5kbGVyLCAwLAorCQkJIGNvcmVfZGV2LT5kZXYtPm5hbWUsIGRldik7CisJaWYgKHJjKQorCQlnb3RvIGVycl9yZXF1ZXN0X2lycTsKKworCWNvcmVfZGV2LT5kZXYtPmNlX2Jhc2UgPSBvZl9pb21hcChvZmRldi0+bm9kZSwgMCk7CisJaWYgKCFjb3JlX2Rldi0+ZGV2LT5jZV9iYXNlKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIG9mX2lvbWFwXG4iKTsKKwkJZ290byBlcnJfaW9tYXA7CisJfQorCisJLyogbmVlZCB0byBzZXR1cCBwZHIsIHJkciwgZ2RyIGFuZCBzZHIgYmVmb3JlIHRoaXMgKi8KKwljcnlwdG80eHhfaHdfaW5pdChjb3JlX2Rldi0+ZGV2KTsKKworCS8qIFJlZ2lzdGVyIHNlY3VyaXR5IGFsZ29yaXRobXMgd2l0aCBMaW51eCBDcnlwdG9BUEkgKi8KKwlyYyA9IGNyeXB0bzR4eF9yZWdpc3Rlcl9hbGcoY29yZV9kZXYtPmRldiwgY3J5cHRvNHh4X2FsZywKKwkJCSAgICAgICBBUlJBWV9TSVpFKGNyeXB0bzR4eF9hbGcpKTsKKwlpZiAocmMpCisJCWdvdG8gZXJyX3N0YXJ0X2RldjsKKworCXJldHVybiAwOworCitlcnJfc3RhcnRfZGV2OgorCWlvdW5tYXAoY29yZV9kZXYtPmRldi0+Y2VfYmFzZSk7CitlcnJfaW9tYXA6CisJZnJlZV9pcnEoY29yZV9kZXYtPmlycSwgZGV2KTsKKwlpcnFfZGlzcG9zZV9tYXBwaW5nKGNvcmVfZGV2LT5pcnEpOworCXRhc2tsZXRfa2lsbCgmY29yZV9kZXYtPnRhc2tsZXQpOworZXJyX3JlcXVlc3RfaXJxOgorCWNyeXB0bzR4eF9kZXN0cm95X3Nkcihjb3JlX2Rldi0+ZGV2KTsKK2Vycl9idWlsZF9zZHI6CisJY3J5cHRvNHh4X2Rlc3Ryb3lfZ2RyKGNvcmVfZGV2LT5kZXYpOworZXJyX2J1aWxkX2dkcjoKKwljcnlwdG80eHhfZGVzdHJveV9wZHIoY29yZV9kZXYtPmRldik7CitlcnJfYnVpbGRfcGRyOgorCWtmcmVlKGNvcmVfZGV2LT5kZXYpOworZXJyX2FsbG9jX2RldjoKKwlrZnJlZShjb3JlX2Rldik7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgX19leGl0IGNyeXB0bzR4eF9yZW1vdmUoc3RydWN0IG9mX2RldmljZSAqb2ZkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJm9mZGV2LT5kZXY7CisJc3RydWN0IGNyeXB0bzR4eF9jb3JlX2RldmljZSAqY29yZV9kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWZyZWVfaXJxKGNvcmVfZGV2LT5pcnEsIGRldik7CisJaXJxX2Rpc3Bvc2VfbWFwcGluZyhjb3JlX2Rldi0+aXJxKTsKKworCXRhc2tsZXRfa2lsbCgmY29yZV9kZXYtPnRhc2tsZXQpOworCS8qIFVuLXJlZ2lzdGVyIHdpdGggTGludXggQ3J5cHRvQVBJICovCisJY3J5cHRvNHh4X3VucmVnaXN0ZXJfYWxnKGNvcmVfZGV2LT5kZXYpOworCS8qIEZyZWUgYWxsIGFsbG9jYXRlZCBtZW1vcnkgKi8KKwljcnlwdG80eHhfc3RvcF9hbGwoY29yZV9kZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGNyeXB0bzR4eF9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgICAgICA9ICJhbWNjLHBwYzR4eC1jcnlwdG8iLH0sCisJeyB9LAorfTsKKworc3RhdGljIHN0cnVjdCBvZl9wbGF0Zm9ybV9kcml2ZXIgY3J5cHRvNHh4X2RyaXZlciA9IHsKKwkubmFtZQkJPSAiY3J5cHRvNHh4IiwKKwkubWF0Y2hfdGFibGUJPSBjcnlwdG80eHhfbWF0Y2gsCisJLnByb2JlCQk9IGNyeXB0bzR4eF9wcm9iZSwKKwkucmVtb3ZlCQk9IGNyeXB0bzR4eF9yZW1vdmUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBjcnlwdG80eHhfaW5pdCh2b2lkKQoreworCXJldHVybiBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJmNyeXB0bzR4eF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgY3J5cHRvNHh4X2V4aXQodm9pZCkKK3sKKwlvZl91bnJlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmY3J5cHRvNHh4X2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGNyeXB0bzR4eF9pbml0KTsKK21vZHVsZV9leGl0KGNyeXB0bzR4eF9leGl0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiSmFtZXMgSHNpYW8gPGpoc2lhb0BhbWNjLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBBTUNDIFBQQzR4eCBjcnlwdG8gYWNjZWxlcmF0b3IiKTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vYW1jYy9jcnlwdG80eHhfY29yZS5oIGIvZHJpdmVycy9jcnlwdG8vYW1jYy9jcnlwdG80eHhfY29yZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlZjEwMzQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2NyeXB0by9hbWNjL2NyeXB0bzR4eF9jb3JlLmgKQEAgLTAsMCArMSwxNzcgQEAKKy8qKgorICogQU1DQyBTb0MgUFBDNHh4IENyeXB0byBEcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggQXBwbGllZCBNaWNybyBDaXJjdWl0cyBDb3Jwb3JhdGlvbi4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIEphbWVzIEhzaWFvIDxqaHNpYW9AYW1jYy5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFRoaXMgaXMgdGhlIGhlYWRlciBmaWxlIGZvciBBTUNDIENyeXB0byBvZmZsb2FkIExpbnV4IGRldmljZSBkcml2ZXIgZm9yCisgKiB1c2Ugd2l0aCBMaW51eCBDcnlwdG9BUEkuCisKKyAqLworCisjaWZuZGVmIF9fQ1JZUFRPNFhYX0NPUkVfSF9fCisjZGVmaW5lIF9fQ1JZUFRPNFhYX0NPUkVfSF9fCisKKyNkZWZpbmUgUFBDNDYwU1hfU0RSMF9TUlNUICAgICAgICAgICAgICAgICAgICAgIDB4MjAxCisjZGVmaW5lIFBQQzQwNUVYX1NEUjBfU1JTVCAgICAgICAgICAgICAgICAgICAgICAweDIwMAorI2RlZmluZSBQUEM0NjBFWF9TRFIwX1NSU1QgICAgICAgICAgICAgICAgICAgICAgMHgyMDEKKyNkZWZpbmUgUFBDNDYwRVhfQ0VfUkVTRVQgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMDAwMDAKKyNkZWZpbmUgUFBDNDYwU1hfQ0VfUkVTRVQgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgUFBDNDA1RVhfQ0VfUkVTRVQgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKworI2RlZmluZSBDUllQVE80WFhfQ1JZUFRPX1BSSU9SSVRZCQkzMDAKKyNkZWZpbmUgUFBDNFhYX0xBU1RfUEQJCQkJNjMKKyNkZWZpbmUgUFBDNFhYX05VTV9QRAkJCQk2NAorI2RlZmluZSBQUEM0WFhfTEFTVF9HRAkJCQkxMDIzCisjZGVmaW5lIFBQQzRYWF9OVU1fR0QJCQkJMTAyNAorI2RlZmluZSBQUEM0WFhfTEFTVF9TRAkJCQk2MworI2RlZmluZSBQUEM0WFhfTlVNX1NECQkJCTY0CisjZGVmaW5lIFBQQzRYWF9TRF9CVUZGRVJfU0laRQkJCTIwNDgKKworI2RlZmluZSBQRF9FTlRSWV9JTlVTRQkJCQkxCisjZGVmaW5lIFBEX0VOVFJZX0ZSRUUJCQkJMAorI2RlZmluZSBFUklOR19XQVNfRlVMTAkJCQkweGZmZmZmZmZmCisKK3N0cnVjdCBjcnlwdG80eHhfZGV2aWNlOworCitzdHJ1Y3QgcGRfdWluZm8geworCXN0cnVjdCBjcnlwdG80eHhfZGV2aWNlICpkZXY7CisJdTMyICAgc3RhdGU7CisJdTMyIHVzaW5nX3NkOworCXUzMiBmaXJzdF9nZDsJCS8qIGZpcnN0IGdhdGhlciBkaXNjcmlwdG9yCisJCQkJdXNlZCBieSB0aGlzIHBhY2tldCAqLworCXUzMiBudW1fZ2Q7ICAgICAgICAgICAgIC8qIG51bWJlciBvZiBnYXRoZXIgZGlzY3JpcHRvcgorCQkJCXVzZWQgYnkgdGhpcyBwYWNrZXQgKi8KKwl1MzIgZmlyc3Rfc2Q7CQkvKiBmaXJzdCBzY2F0dGVyIGRpc2NyaXB0b3IKKwkJCQl1c2VkIGJ5IHRoaXMgcGFja2V0ICovCisJdTMyIG51bV9zZDsJCS8qIG51bWJlciBvZiBzY2F0dGVyIGRpc2NyaXB0b3JzCisJCQkJdXNlZCBieSB0aGlzIHBhY2tldCAqLworCXZvaWQgKnNhX3ZhOwkJLyogc2hhZG93IHNhLCB3aGVuIHVzaW5nIGNwIGZyb20gY3R4LT5zYSAqLworCXUzMiBzYV9wYTsKKwl2b2lkICpzcl92YTsJCS8qIHN0YXRlIHJlY29yZCBmb3Igc2hhZG93IHNhICovCisJdTMyIHNyX3BhOworCXN0cnVjdCBzY2F0dGVybGlzdCAqZGVzdF92YTsKKwlzdHJ1Y3QgY3J5cHRvX2FzeW5jX3JlcXVlc3QgKmFzeW5jX3JlcTsgCS8qIGJhc2UgY3J5cHRvIHJlcXVlc3QKKwkJCQkJCQlmb3IgdGhpcyBwYWNrZXQgKi8KK307CisKK3N0cnVjdCBjcnlwdG80eHhfZGV2aWNlIHsKKwlzdHJ1Y3QgY3J5cHRvNHh4X2NvcmVfZGV2aWNlICpjb3JlX2RldjsKKwljaGFyICpuYW1lOworCXU2NCAgY2VfcGh5X2FkZHJlc3M7CisJdm9pZCBfX2lvbWVtICpjZV9iYXNlOworCisJdm9pZCAqcGRyOwkJCS8qIGJhc2UgYWRkcmVzcyBvZiBwYWNrZXQKKwkJCQkJZGVzY3JpcHRvciByaW5nICovCisJZG1hX2FkZHJfdCBwZHJfcGE7CQkvKiBwaHlzaWNhbCBhZGRyZXNzIHVzZWQgdG8KKwkJCQkJcHJvZ3JhbSBjZSBwZHJfYmFzZV9yZWdpc3RlciAqLworCXZvaWQgKmdkcjsgICAgICAgICAgICAgICAgICAgICAgLyogZ2F0aGVyIGRlc2NyaXB0b3IgcmluZyAqLworCWRtYV9hZGRyX3QgZ2RyX3BhOwkJLyogcGh5c2ljYWwgYWRkcmVzcyB1c2VkIHRvCisJCQkJCXByb2dyYW0gY2UgZ2RyX2Jhc2VfcmVnaXN0ZXIgKi8KKwl2b2lkICpzZHI7CQkJLyogc2NhdHRlciBkZXNjcmlwdG9yIHJpbmcgKi8KKwlkbWFfYWRkcl90IHNkcl9wYTsJCS8qIHBoeXNpY2FsIGFkZHJlc3MgdXNlZCB0bworCQkJCQlwcm9ncmFtIGNlIHNkcl9iYXNlX3JlZ2lzdGVyICovCisJdm9pZCAqc2NhdHRlcl9idWZmZXJfdmE7CisJZG1hX2FkZHJfdCBzY2F0dGVyX2J1ZmZlcl9wYTsKKwl1MzIgc2NhdHRlcl9idWZmZXJfc2l6ZTsKKworCXZvaWQgKnNoYWRvd19zYV9wb29sOwkJLyogcG9vbCBvZiBtZW1vcnkgZm9yIHNhIGluIHBkX3VpbmZvICovCisJZG1hX2FkZHJfdCBzaGFkb3dfc2FfcG9vbF9wYTsKKwl2b2lkICpzaGFkb3dfc3JfcG9vbDsJCS8qIHBvb2wgb2YgbWVtb3J5IGZvciBzciBpbiBwZF91aW5mbyAqLworCWRtYV9hZGRyX3Qgc2hhZG93X3NyX3Bvb2xfcGE7CisJdTMyIHBkcl90YWlsOworCXUzMiBwZHJfaGVhZDsKKwl1MzIgZ2RyX3RhaWw7CisJdTMyIGdkcl9oZWFkOworCXUzMiBzZHJfdGFpbDsKKwl1MzIgc2RyX2hlYWQ7CisJdm9pZCAqcGRyX3VpbmZvOworCXN0cnVjdCBsaXN0X2hlYWQgYWxnX2xpc3Q7CS8qIExpc3Qgb2YgYWxnb3JpdGhtIHN1cHBvcnRlZAorCQkJCQlieSB0aGlzIGRldmljZSAqLworfTsKKworc3RydWN0IGNyeXB0bzR4eF9jb3JlX2RldmljZSB7CisJc3RydWN0IGRldmljZSAqZGV2aWNlOworCXN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2OworCXN0cnVjdCBjcnlwdG80eHhfZGV2aWNlICpkZXY7CisJdTMyIGludF9zdGF0dXM7CisJdTMyIGlycTsKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgdGFza2xldDsKKwlzcGlubG9ja190IGxvY2s7Cit9OworCitzdHJ1Y3QgY3J5cHRvNHh4X2N0eCB7CisJc3RydWN0IGNyeXB0bzR4eF9kZXZpY2UgKmRldjsKKwl2b2lkICpzYV9pbjsKKwlkbWFfYWRkcl90IHNhX2luX2RtYV9hZGRyOworCXZvaWQgKnNhX291dDsKKwlkbWFfYWRkcl90IHNhX291dF9kbWFfYWRkcjsKKwl2b2lkICpzdGF0ZV9yZWNvcmQ7CisJZG1hX2FkZHJfdCBzdGF0ZV9yZWNvcmRfZG1hX2FkZHI7CisJdTMyIHNhX2xlbjsKKwl1MzIgb2Zmc2V0X3RvX3NyX3B0cjsgICAgICAgICAgIC8qIG9mZnNldCB0byBzdGF0ZSBwdHIsIGluIGR5bmFtaWMgc2EgKi8KKwl1MzIgZGlyZWN0aW9uOworCXUzMiBuZXh0X2hkcjsKKwl1MzIgc2F2ZV9pdjsKKwl1MzIgcGRfY3RsX2xlbjsKKwl1MzIgcGRfY3RsOworCXUzMiBieXBhc3M7CisJdTMyIGlzX2hhc2g7CisJdTMyIGhhc2hfZmluYWw7Cit9OworCitzdHJ1Y3QgY3J5cHRvNHh4X3JlcV9jdHggeworCXN0cnVjdCBjcnlwdG80eHhfZGV2aWNlICpkZXY7CS8qIERldmljZSBpbiB3aGljaAorCQkJCQlvcGVyYXRpb24gdG8gc2VuZCB0byAqLworCXZvaWQgKnNhOworCXUzMiBzYV9kbWFfYWRkcjsKKwl1MTYgc2FfbGVuOworfTsKKworc3RydWN0IGNyeXB0bzR4eF9hbGcgeworCXN0cnVjdCBsaXN0X2hlYWQgIGVudHJ5OworCXN0cnVjdCBjcnlwdG9fYWxnIGFsZzsKKwlzdHJ1Y3QgY3J5cHRvNHh4X2RldmljZSAqZGV2OworfTsKKworI2RlZmluZSBjcnlwdG9fYWxnX3RvX2NyeXB0bzR4eF9hbGcoeCkgXAorCQljb250YWluZXJfb2YoeCwgc3RydWN0IGNyeXB0bzR4eF9hbGcsIGFsZykKKworZXh0ZXJuIGludCBjcnlwdG80eHhfYWxsb2Nfc2Eoc3RydWN0IGNyeXB0bzR4eF9jdHggKmN0eCwgdTMyIHNpemUpOworZXh0ZXJuIHZvaWQgY3J5cHRvNHh4X2ZyZWVfc2Eoc3RydWN0IGNyeXB0bzR4eF9jdHggKmN0eCk7CitleHRlcm4gdTMyIGNyeXB0bzR4eF9hbGxvY19zYV9yY3R4KHN0cnVjdCBjcnlwdG80eHhfY3R4ICpjdHgsCisJCQkJICAgc3RydWN0IGNyeXB0bzR4eF9jdHggKnJjdHgpOworZXh0ZXJuIHZvaWQgY3J5cHRvNHh4X2ZyZWVfc2FfcmN0eChzdHJ1Y3QgY3J5cHRvNHh4X2N0eCAqcmN0eCk7CitleHRlcm4gdm9pZCBjcnlwdG80eHhfZnJlZV9jdHgoc3RydWN0IGNyeXB0bzR4eF9jdHggKmN0eCk7CitleHRlcm4gdTMyIGNyeXB0bzR4eF9hbGxvY19zdGF0ZV9yZWNvcmQoc3RydWN0IGNyeXB0bzR4eF9jdHggKmN0eCk7CitleHRlcm4gdTMyIGdldF9keW5hbWljX3NhX29mZnNldF9zdGF0ZV9wdHJfZmllbGQoc3RydWN0IGNyeXB0bzR4eF9jdHggKmN0eCk7CitleHRlcm4gdTMyIGdldF9keW5hbWljX3NhX29mZnNldF9rZXlfZmllbGQoc3RydWN0IGNyeXB0bzR4eF9jdHggKmN0eCk7CitleHRlcm4gdTMyIGdldF9keW5hbWljX3NhX2l2X3NpemUoc3RydWN0IGNyeXB0bzR4eF9jdHggKmN0eCk7CitleHRlcm4gdm9pZCBjcnlwdG80eHhfbWVtY3B5X2xlKHVuc2lnbmVkIGludCAqZHN0LAorCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGxlbik7CitleHRlcm4gdTMyIGNyeXB0bzR4eF9idWlsZF9wZChzdHJ1Y3QgY3J5cHRvX2FzeW5jX3JlcXVlc3QgKnJlcSwKKwkJCSAgICAgIHN0cnVjdCBjcnlwdG80eHhfY3R4ICpjdHgsCisJCQkgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNyYywKKwkJCSAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqZHN0LAorCQkJICAgICAgdW5zaWduZWQgaW50IGRhdGFsZW4sCisJCQkgICAgICB2b2lkICppdiwgdTMyIGl2X2xlbik7CitleHRlcm4gaW50IGNyeXB0bzR4eF9zZXRrZXlfYWVzX2NiYyhzdHJ1Y3QgY3J5cHRvX2FibGtjaXBoZXIgKmNpcGhlciwKKwkJCQkgICAgY29uc3QgdTggKmtleSwgdW5zaWduZWQgaW50IGtleWxlbik7CitleHRlcm4gaW50IGNyeXB0bzR4eF9lbmNyeXB0KHN0cnVjdCBhYmxrY2lwaGVyX3JlcXVlc3QgKnJlcSk7CitleHRlcm4gaW50IGNyeXB0bzR4eF9kZWNyeXB0KHN0cnVjdCBhYmxrY2lwaGVyX3JlcXVlc3QgKnJlcSk7CitleHRlcm4gaW50IGNyeXB0bzR4eF9zaGExX2FsZ19pbml0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pOworZXh0ZXJuIGludCBjcnlwdG80eHhfaGFzaF9kaWdlc3Qoc3RydWN0IGFoYXNoX3JlcXVlc3QgKnJlcSk7CitleHRlcm4gaW50IGNyeXB0bzR4eF9oYXNoX2ZpbmFsKHN0cnVjdCBhaGFzaF9yZXF1ZXN0ICpyZXEpOworZXh0ZXJuIGludCBjcnlwdG80eHhfaGFzaF91cGRhdGUoc3RydWN0IGFoYXNoX3JlcXVlc3QgKnJlcSk7CitleHRlcm4gaW50IGNyeXB0bzR4eF9oYXNoX2luaXQoc3RydWN0IGFoYXNoX3JlcXVlc3QgKnJlcSk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3J5cHRvL2FtY2MvY3J5cHRvNHh4X3JlZ19kZWYuaCBiL2RyaXZlcnMvY3J5cHRvL2FtY2MvY3J5cHRvNHh4X3JlZ19kZWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDRlZGIwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jcnlwdG8vYW1jYy9jcnlwdG80eHhfcmVnX2RlZi5oCkBAIC0wLDAgKzEsMjg0IEBACisvKioKKyAqIEFNQ0MgU29DIFBQQzR4eCBDcnlwdG8gRHJpdmVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IEFwcGxpZWQgTWljcm8gQ2lyY3VpdHMgQ29ycG9yYXRpb24uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBKYW1lcyBIc2lhbyA8amhzaWFvQGFtY2MuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBUaGlzIGZpbHIgZGVmaW5lcyB0aGUgcmVnaXN0ZXIgc2V0IGZvciBTZWN1cml0eSBTdWJzeXN0ZW0KKyAqLworCisjaWZuZGVmIF9fQ1JZUFRPNFhYX1JFR19ERUZfSF9fCisjZGVmaW5lIF9fQ1JZUFRPNFhYX1JFR19ERUZfSF9fCisKKy8qIENSWVBUTzRYWCBSZWdpc3RlciBvZmZzZXQgKi8KKyNkZWZpbmUgQ1JZUFRPNFhYX0RFU0NSSVBUT1IJCQkweDAwMDAwMDAwCisjZGVmaW5lIENSWVBUTzRYWF9DVFJMX1NUQVQJCQkweDAwMDAwMDAwCisjZGVmaW5lIENSWVBUTzRYWF9TT1VSQ0UJCQkweDAwMDAwMDA0CisjZGVmaW5lIENSWVBUTzRYWF9ERVNUCQkJCTB4MDAwMDAwMDgKKyNkZWZpbmUgQ1JZUFRPNFhYX1NBCQkJCTB4MDAwMDAwMEMKKyNkZWZpbmUgQ1JZUFRPNFhYX1NBX0xFTkdUSAkJCTB4MDAwMDAwMTAKKyNkZWZpbmUgQ1JZUFRPNFhYX0xFTkdUSAkJCTB4MDAwMDAwMTQKKworI2RlZmluZSBDUllQVE80WFhfUEVfRE1BX0NGRwkJCTB4MDAwMDAwNDAKKyNkZWZpbmUgQ1JZUFRPNFhYX1BFX0RNQV9TVEFUCQkJMHgwMDAwMDA0NAorI2RlZmluZSBDUllQVE80WFhfUERSX0JBU0UJCQkweDAwMDAwMDQ4CisjZGVmaW5lIENSWVBUTzRYWF9SRFJfQkFTRQkJCTB4MDAwMDAwNGMKKyNkZWZpbmUgQ1JZUFRPNFhYX1JJTkdfU0laRQkJCTB4MDAwMDAwNTAKKyNkZWZpbmUgQ1JZUFRPNFhYX1JJTkdfQ1RSTAkJCTB4MDAwMDAwNTQKKyNkZWZpbmUgQ1JZUFRPNFhYX0lOVF9SSU5HX1NUQVQJCQkweDAwMDAwMDU4CisjZGVmaW5lIENSWVBUTzRYWF9FWFRfUklOR19TVEFUCQkJMHgwMDAwMDA1YworI2RlZmluZSBDUllQVE80WFhfSU9fVEhSRVNIT0xECQkJMHgwMDAwMDA2MAorI2RlZmluZSBDUllQVE80WFhfR0FUSF9SSU5HX0JBU0UJCTB4MDAwMDAwNjQKKyNkZWZpbmUgQ1JZUFRPNFhYX1NDQVRfUklOR19CQVNFCQkweDAwMDAwMDY4CisjZGVmaW5lIENSWVBUTzRYWF9QQVJUX1JJTkdfU0laRQkJMHgwMDAwMDA2YworI2RlZmluZSBDUllQVE80WFhfUEFSVF9SSU5HX0NGRwkJICAgICAgICAweDAwMDAwMDcwCisKKyNkZWZpbmUgQ1JZUFRPNFhYX1BEUl9CQVNFX1VBRERSCQkweDAwMDAwMDgwCisjZGVmaW5lIENSWVBUTzRYWF9SRFJfQkFTRV9VQUREUgkJMHgwMDAwMDA4NAorI2RlZmluZSBDUllQVE80WFhfUEtUX1NSQ19VQUREUgkJCTB4MDAwMDAwODgKKyNkZWZpbmUgQ1JZUFRPNFhYX1BLVF9ERVNUX1VBRERSCQkweDAwMDAwMDhjCisjZGVmaW5lIENSWVBUTzRYWF9TQV9VQUREUgkJCTB4MDAwMDAwOTAKKyNkZWZpbmUgQ1JZUFRPNFhYX0dBVEhfUklOR19CQVNFX1VBRERSCQkweDAwMDAwMEEwCisjZGVmaW5lIENSWVBUTzRYWF9TQ0FUX1JJTkdfQkFTRV9VQUREUgkJMHgwMDAwMDBBNAorCisjZGVmaW5lIENSWVBUTzRYWF9TRVFfUkQJCQkweDAwMDAwNDA4CisjZGVmaW5lIENSWVBUTzRYWF9TRVFfTUFTS19SRAkJCTB4MDAwMDA0MEMKKworI2RlZmluZSBDUllQVE80WFhfU0FfQ01EXzAJCQkweDAwMDEwNjAwCisjZGVmaW5lIENSWVBUTzRYWF9TQV9DTURfMQkJCTB4MDAwMTA2MDQKKworI2RlZmluZSBDUllQVE80WFhfU1RBVEVfUFRSCQkJMHgwMDAxMDZkYworI2RlZmluZSBDUllQVE80WFhfU1RBVEVfSVYJCQkweDAwMDEwNzAwCisjZGVmaW5lIENSWVBUTzRYWF9TVEFURV9IQVNIX0JZVEVfQ05UXzAJCTB4MDAwMTA3MTAKKyNkZWZpbmUgQ1JZUFRPNFhYX1NUQVRFX0hBU0hfQllURV9DTlRfMQkJMHgwMDAxMDcxNAorCisjZGVmaW5lIENSWVBUTzRYWF9TVEFURV9JRElHRVNUXzAJCTB4MDAwMTA3MTgKKyNkZWZpbmUgQ1JZUFRPNFhYX1NUQVRFX0lESUdFU1RfMQkJMHgwMDAxMDcxYworCisjZGVmaW5lIENSWVBUTzRYWF9EQVRBX0lOCQkJMHgwMDAxODAwMAorI2RlZmluZSBDUllQVE80WFhfREFUQV9PVVQJCQkweDAwMDFjMDAwCisKKyNkZWZpbmUgQ1JZUFRPNFhYX0lOVF9VTk1BU0tfU1RBVAkJMHgwMDA1MDBhMAorI2RlZmluZSBDUllQVE80WFhfSU5UX01BU0tfU1RBVAkJCTB4MDAwNTAwYTQKKyNkZWZpbmUgQ1JZUFRPNFhYX0lOVF9DTFIJCQkweDAwMDUwMGE0CisjZGVmaW5lIENSWVBUTzRYWF9JTlRfRU4JCQkweDAwMDUwMGE4CisKKyNkZWZpbmUgQ1JZUFRPNFhYX0lOVF9QS0EJCQkweDAwMDAwMDAyCisjZGVmaW5lIENSWVBUTzRYWF9JTlRfUERSX0RPTkUJCQkweDAwMDA4MDAwCisjZGVmaW5lIENSWVBUTzRYWF9JTlRfTUFfV1JfRVJSCQkJMHgwMDAyMDAwMAorI2RlZmluZSBDUllQVE80WFhfSU5UX01BX1JEX0VSUgkJCTB4MDAwMTAwMDAKKyNkZWZpbmUgQ1JZUFRPNFhYX0lOVF9QRV9FUlIJCQkweDAwMDAwMjAwCisjZGVmaW5lIENSWVBUTzRYWF9JTlRfVVNFUl9ETUFfRVJSCQkweDAwMDAwMDQwCisjZGVmaW5lIENSWVBUTzRYWF9JTlRfU0xBVkVfRVJSCQkJMHgwMDAwMDAxMAorI2RlZmluZSBDUllQVE80WFhfSU5UX01BU1RFUl9FUlIJCTB4MDAwMDAwMDgKKyNkZWZpbmUgQ1JZUFRPNFhYX0lOVF9FUlJPUgkJCTB4MDAwMzAyNTgKKworI2RlZmluZSBDUllQVE80WFhfSU5UX0NGRwkJCTB4MDAwNTAwYWMKKyNkZWZpbmUgQ1JZUFRPNFhYX0lOVF9ERVNDUl9SRAkJCTB4MDAwNTAwYjAKKyNkZWZpbmUgQ1JZUFRPNFhYX0lOVF9ERVNDUl9DTlQJCQkweDAwMDUwMGI0CisjZGVmaW5lIENSWVBUTzRYWF9JTlRfVElNRU9VVF9DTlQJCTB4MDAwNTAwYjgKKworI2RlZmluZSBDUllQVE80WFhfREVWSUNFX0NUUkwJCQkweDAwMDYwMDgwCisjZGVmaW5lIENSWVBUTzRYWF9ERVZJQ0VfSUQJCQkweDAwMDYwMDg0CisjZGVmaW5lIENSWVBUTzRYWF9ERVZJQ0VfSU5GTwkJCTB4MDAwNjAwODgKKyNkZWZpbmUgQ1JZUFRPNFhYX0RNQV9VU0VSX1NSQwkJCTB4MDAwNjAwOTQKKyNkZWZpbmUgQ1JZUFRPNFhYX0RNQV9VU0VSX0RFU1QJCQkweDAwMDYwMDk4CisjZGVmaW5lIENSWVBUTzRYWF9ETUFfVVNFUl9DTUQJCQkweDAwMDYwMDlDCisKKyNkZWZpbmUgQ1JZUFRPNFhYX0RNQV9DRkcJICAgICAgICAJMHgwMDA2MDBkNAorI2RlZmluZSBDUllQVE80WFhfQllURV9PUkRFUl9DRkcgCQkweDAwMDYwMGQ4CisjZGVmaW5lIENSWVBUTzRYWF9FTkRJQU5fQ0ZHCQkJMHgwMDA2MDBkOAorCisjZGVmaW5lIENSWVBUTzRYWF9QUk5HX1NUQVQJCQkweDAwMDcwMDAwCisjZGVmaW5lIENSWVBUTzRYWF9QUk5HX0NUUkwJCQkweDAwMDcwMDA0CisjZGVmaW5lIENSWVBUTzRYWF9QUk5HX1NFRURfTAkJCTB4MDAwNzAwMDgKKyNkZWZpbmUgQ1JZUFRPNFhYX1BSTkdfU0VFRF9ICQkJMHgwMDA3MDAwYworCisjZGVmaW5lIENSWVBUTzRYWF9QUk5HX1JFU18wCQkJMHgwMDA3MDAyMAorI2RlZmluZSBDUllQVE80WFhfUFJOR19SRVNfMQkJCTB4MDAwNzAwMjQKKyNkZWZpbmUgQ1JZUFRPNFhYX1BSTkdfUkVTXzIJCQkweDAwMDcwMDI4CisjZGVmaW5lIENSWVBUTzRYWF9QUk5HX1JFU18zCQkJMHgwMDA3MDAyQworCisjZGVmaW5lIENSWVBUTzRYWF9QUk5HX0xGU1JfTAkJCTB4MDAwNzAwMzAKKyNkZWZpbmUgQ1JZUFRPNFhYX1BSTkdfTEZTUl9ICQkJMHgwMDA3MDAzNAorCisvKioKKyAqIEluaXRpbGl6ZSBDUllQVE8gRU5HSU5FIHJlZ2lzdGVycywgYW5kIG1lbW9yeSBiYXNlcy4KKyAqLworI2RlZmluZSBQUEM0WFhfUERSX1BPTEwJCQkJMHgzZmYKKyNkZWZpbmUgUFBDNFhYX09VVFBVVF9USFJFU0hPTEQJCQkyCisjZGVmaW5lIFBQQzRYWF9JTlBVVF9USFJFU0hPTEQJCQkyCisjZGVmaW5lIFBQQzRYWF9QRF9TSVpFCQkJCTYKKyNkZWZpbmUgUFBDNFhYX0NUWF9ET05FX0lOVAkJCTB4MjAwMAorI2RlZmluZSBQUEM0WFhfUERfRE9ORV9JTlQJCQkweDgwMDAKKyNkZWZpbmUgUFBDNFhYX0JZVEVfT1JERVIJCQkweDIyMjIyCisjZGVmaW5lIFBQQzRYWF9JTlRFUlJVUFRfQ0xSCQkJMHgzZmZmZgorI2RlZmluZSBQUEM0WFhfUFJOR19DVFJMX0FVVE9fRU4JCTB4MworI2RlZmluZSBQUEM0WFhfRENfM0RFU19FTgkJCTEKKyNkZWZpbmUgUFBDNFhYX0lOVF9ERVNDUl9DTlQJCQk0CisjZGVmaW5lIFBQQzRYWF9JTlRfVElNRU9VVF9DTlQJCQkwCisjZGVmaW5lIFBQQzRYWF9JTlRfQ0ZHCQkJCTEKKy8qKgorICogYWxsIGZvbGxvdyBkZWZpbmUgYXJlIGFkIGhvYworICovCisjZGVmaW5lIFBQQzRYWF9SSU5HX1JFVFJZCQkJMTAwCisjZGVmaW5lIFBQQzRYWF9SSU5HX1BPTEwJCQkxMDAKKyNkZWZpbmUgUFBDNFhYX1NEUl9TSVpFCQkJCVBQQzRYWF9OVU1fU0QKKyNkZWZpbmUgUFBDNFhYX0dEUl9TSVpFCQkJCVBQQzRYWF9OVU1fR0QKKworLyoqCisgICogR2VuZXJpYyBTZWN1cml0eSBBc3NvY2lhdGlvbiAoU0EpIHdpdGggYWxsIHBvc3NpYmxlIGZpZWxkcy4gVGhlc2Ugd2lsbAorICogbmV2ZXIgbGlrZWx5IHVzZWQgZXhjZXB0IGZvciByZWZlcmVuY2UgcHVycG9zZS4gVGhlc2Ugc3RydWN0dXJlIGZvcm1hdAorICogY2FuIGJlIG5vdCBjaGFuZ2VkIGFzIHRoZSBoYXJkd2FyZSBleHBlY3RzIHRoZW0gdG8gYmUgbGF5b3V0IGFzIGRlZmluZWQuCisgKiBGaWVsZCBjYW4gYmUgcmVtb3ZlZCBvciByZWR1Y2VkIGJ1dCBvcmRlcmluZyBjYW4gbm90IGJlIGNoYW5nZWQuCisgKi8KKyNkZWZpbmUgQ1JZUFRPNFhYX0RNQV9DRkdfT0ZGU0VUCQkweDQwCit1bmlvbiBjZV9wZV9kbWFfY2ZnIHsKKwlzdHJ1Y3QgeworCQl1MzIgcnN2Ojc7CisJCXUzMiBkaXJfaG9zdDoxOworCQl1MzIgcnN2MToyOworCQl1MzIgYm9fdGRfZW46MTsKKwkJdTMyIGRpc19wZHJfdXBkOjE7CisJCXUzMiBib19zZ3BkX2VuOjE7CisJCXUzMiBib19kYXRhX2VuOjE7CisJCXUzMiBib19zYV9lbjoxOworCQl1MzIgYm9fcGRfZW46MTsKKwkJdTMyIHJzdjI6NDsKKwkJdTMyIGR5bmFtaWNfc2FfZW46MTsKKwkJdTMyIHBkcl9tb2RlOjI7CisJCXUzMiBwZV9tb2RlOjE7CisJCXUzMiByc3YzOjU7CisJCXUzMiByZXNldF9zZzoxOworCQl1MzIgcmVzZXRfcGRyOjE7CisJCXUzMiByZXNldF9wZToxOworCX0gYmY7CisgICAgdTMyIHc7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZGVmaW5lIENSWVBUTzRYWF9QRFJfQkFTRV9PRkZTRVQJCTB4NDgKKyNkZWZpbmUgQ1JZUFRPNFhYX1JEUl9CQVNFX09GRlNFVAkJMHg0YworI2RlZmluZSBDUllQVE80WFhfUklOR19TSVpFX09GRlNFVAkJMHg1MAordW5pb24gY2VfcmluZ19zaXplIHsKKwlzdHJ1Y3QgeworCQl1MzIgcmluZ19vZmZzZXQ6MTY7CisJCXUzMiByc3Y6NjsKKwkJdTMyIHJpbmdfc2l6ZToxMDsKKwl9IGJmOworICAgIHUzMiB3OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2RlZmluZSBDUllQVE80WFhfUklOR19DT05UUk9MX09GRlNFVAkJMHg1NAordW5pb24gY2VfcmluZ19jb250b2wgeworCXN0cnVjdCB7CisJCXUzMiBjb250aW51b3VzOjE7CisJCXUzMiByc3Y6NTsKKwkJdTMyIHJpbmdfcmV0cnlfZGl2aXNvcjoxMDsKKwkJdTMyIHJzdjE6NDsKKwkJdTMyIHJpbmdfcG9sbF9kaXZpc29yOjEwOworCX0gYmY7CisgICAgdTMyIHc7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZGVmaW5lIENSWVBUTzRYWF9JT19USFJFU0hPTERfT0ZGU0VUCQkweDYwCit1bmlvbiBjZV9pb190aHJlc2hvbGQgeworCXN0cnVjdCB7CisJCXUzMiByc3Y6NjsKKwkJdTMyIG91dHB1dF90aHJlc2hvbGQ6MTA7CisJCXUzMiByc3YxOjY7CisJCXUzMiBpbnB1dF90aHJlc2hvbGQ6MTA7CisJfSBiZjsKKyAgICB1MzIgdzsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUgQ1JZUFRPNFhYX0dBVEhFUl9SSU5HX0JBU0VfT0ZGU0VUCTB4NjQKKyNkZWZpbmUgQ1JZUFRPNFhYX1NDQVRURVJfUklOR19CQVNFX09GRlNFVAkweDY4CisKK3VuaW9uIGNlX3BhcnRfcmluZ19zaXplICB7CisJc3RydWN0IHsKKwkJdTMyIHNkcl9zaXplOjE2OworCQl1MzIgZ2RyX3NpemU6MTY7CisJfSBiZjsKKyAgICB1MzIgdzsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUgTUFYX0JVUlNUX1NJWkVfMzIJCQkwCisjZGVmaW5lIE1BWF9CVVJTVF9TSVpFXzY0CQkJMQorI2RlZmluZSBNQVhfQlVSU1RfU0laRV8xMjgJCQkyCisjZGVmaW5lIE1BWF9CVVJTVF9TSVpFXzI1NgkJCTMKKworLyogZ2F0aGVyIGRlc2NyaXB0b3IgY29udHJvbCBsZW5ndGggKi8KK3N0cnVjdCBnZF9jdGxfbGVuIHsKKwl1MzIgbGVuOjE2OworCXUzMiByc3Y6MTQ7CisJdTMyIGRvbmU6MTsKKwl1MzIgcmVhZHk6MTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBjZV9nZCB7CisJdTMyIHB0cjsKKwlzdHJ1Y3QgZ2RfY3RsX2xlbiBjdGxfbGVuOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IHNkX2N0bCB7CisJdTMyIGN0bDozMDsKKwl1MzIgZG9uZToxOworCXUzMiByZHk6MTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBjZV9zZCB7CisgICAgdTMyIHB0cjsKKwlzdHJ1Y3Qgc2RfY3RsIGN0bDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUgUERfUEFEX0NUTF8zMgkweDEwCisjZGVmaW5lIFBEX1BBRF9DVExfNjQJMHgyMAorI2RlZmluZSBQRF9QQURfQ1RMXzEyOAkweDQwCisjZGVmaW5lIFBEX1BBRF9DVExfMjU2CTB4ODAKK3VuaW9uIGNlX3BkX2N0bCB7CisJc3RydWN0IHsKKwkJdTMyIHBkX3BhZF9jdGw6ODsKKwkJdTMyIHN0YXR1czo4OworCQl1MzIgbmV4dF9oZHI6ODsKKwkJdTMyIHJzdjoyOworCQl1MzIgY2FjaGVkX3NhOjE7CisJCXUzMiBoYXNoX2ZpbmFsOjE7CisJCXUzMiBpbml0X2FyYzQ6MTsKKwkJdTMyIHJzdjE6MTsKKwkJdTMyIHBlX2RvbmU6MTsKKwkJdTMyIGhvc3RfcmVhZHk6MTsKKwl9IGJmOworCXUzMiB3OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwordW5pb24gY2VfcGRfY3RsX2xlbiB7CisJc3RydWN0IHsKKwkJdTMyIGJ5cGFzczo4OworCQl1MzIgcGVfZG9uZToxOworCQl1MzIgaG9zdF9yZWFkeToxOworCQl1MzIgcnN2OjI7CisJCXUzMiBwa3RfbGVuOjIwOworCX0gYmY7CisJdTMyIHc7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgY2VfcGQgeworCXVuaW9uIGNlX3BkX2N0bCAgIHBkX2N0bDsKKwl1MzIgc3JjOworCXUzMiBkZXN0OworCXUzMiBzYTsgICAgICAgICAgICAgICAgIC8qIGdldCBmcm9tIGN0eC0+c2FfZG1hX2FkZHIgKi8KKwl1MzIgc2FfbGVuOyAgICAgICAgICAgICAvKiBvbmx5IGlmIGR5bmFtaWMgc2EgaXMgdXNlZCAqLworCXVuaW9uIGNlX3BkX2N0bF9sZW4gcGRfY3RsX2xlbjsKKworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vYW1jYy9jcnlwdG80eHhfc2EuYyBiL2RyaXZlcnMvY3J5cHRvL2FtY2MvY3J5cHRvNHh4X3NhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDY2ZmQ5NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY3J5cHRvL2FtY2MvY3J5cHRvNHh4X3NhLmMKQEAgLTAsMCArMSwxMDggQEAKKy8qKgorICogQU1DQyBTb0MgUFBDNHh4IENyeXB0byBEcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggQXBwbGllZCBNaWNybyBDaXJjdWl0cyBDb3Jwb3JhdGlvbi4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIEphbWVzIEhzaWFvIDxqaHNpYW9AYW1jYy5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIEBmaWxlIGNyeXB0bzR4eF9zYS5jCisgKgorICogVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIHNlY3VyaXR5IGNvbnRleHQKKyAqIGFzc29pY2F0ZSBmb3JtYXQuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZF9kZXZpY2V0YWJsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrX3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CisjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CisjaW5jbHVkZSA8Y3J5cHRvL2FsZ2FwaS5oPgorI2luY2x1ZGUgPGNyeXB0by9kZXMuaD4KKyNpbmNsdWRlICJjcnlwdG80eHhfcmVnX2RlZi5oIgorI2luY2x1ZGUgImNyeXB0bzR4eF9zYS5oIgorI2luY2x1ZGUgImNyeXB0bzR4eF9jb3JlLmgiCisKK3UzMiBnZXRfZHluYW1pY19zYV9vZmZzZXRfaXZfZmllbGQoc3RydWN0IGNyeXB0bzR4eF9jdHggKmN0eCkKK3sKKwl1MzIgb2Zmc2V0OworCXVuaW9uIGR5bmFtaWNfc2FfY29udGVudHMgY3RzOworCisJaWYgKGN0eC0+ZGlyZWN0aW9uID09IERJUl9JTkJPVU5EKQorCQljdHMudyA9ICgoc3RydWN0IGR5bmFtaWNfc2FfY3RsICopKGN0eC0+c2FfaW4pKS0+c2FfY29udGVudHM7CisJZWxzZQorCQljdHMudyA9ICgoc3RydWN0IGR5bmFtaWNfc2FfY3RsICopKGN0eC0+c2Ffb3V0KSktPnNhX2NvbnRlbnRzOworCW9mZnNldCA9IGN0cy5iZi5rZXlfc2l6ZQorCQkrIGN0cy5iZi5pbm5lcl9zaXplCisJCSsgY3RzLmJmLm91dGVyX3NpemUKKwkJKyBjdHMuYmYuc3BpCisJCSsgY3RzLmJmLnNlcV9udW0wCisJCSsgY3RzLmJmLnNlcV9udW0xCisJCSsgY3RzLmJmLnNlcV9udW1fbWFzazAKKwkJKyBjdHMuYmYuc2VxX251bV9tYXNrMQorCQkrIGN0cy5iZi5zZXFfbnVtX21hc2syCisJCSsgY3RzLmJmLnNlcV9udW1fbWFzazM7CisKKwlyZXR1cm4gc2l6ZW9mKHN0cnVjdCBkeW5hbWljX3NhX2N0bCkgKyBvZmZzZXQgKiA0OworfQorCit1MzIgZ2V0X2R5bmFtaWNfc2Ffb2Zmc2V0X3N0YXRlX3B0cl9maWVsZChzdHJ1Y3QgY3J5cHRvNHh4X2N0eCAqY3R4KQoreworCXUzMiBvZmZzZXQ7CisJdW5pb24gZHluYW1pY19zYV9jb250ZW50cyBjdHM7CisKKwlpZiAoY3R4LT5kaXJlY3Rpb24gPT0gRElSX0lOQk9VTkQpCisJCWN0cy53ID0gKChzdHJ1Y3QgZHluYW1pY19zYV9jdGwgKikgY3R4LT5zYV9pbiktPnNhX2NvbnRlbnRzOworCWVsc2UKKwkJY3RzLncgPSAoKHN0cnVjdCBkeW5hbWljX3NhX2N0bCAqKSBjdHgtPnNhX291dCktPnNhX2NvbnRlbnRzOworCW9mZnNldCA9IGN0cy5iZi5rZXlfc2l6ZQorCQkrIGN0cy5iZi5pbm5lcl9zaXplCisJCSsgY3RzLmJmLm91dGVyX3NpemUKKwkJKyBjdHMuYmYuc3BpCisJCSsgY3RzLmJmLnNlcV9udW0wCisJCSsgY3RzLmJmLnNlcV9udW0xCisJCSsgY3RzLmJmLnNlcV9udW1fbWFzazAKKwkJKyBjdHMuYmYuc2VxX251bV9tYXNrMQorCQkrIGN0cy5iZi5zZXFfbnVtX21hc2syCisJCSsgY3RzLmJmLnNlcV9udW1fbWFzazMKKwkJKyBjdHMuYmYuaXYwCisJCSsgY3RzLmJmLml2MQorCQkrIGN0cy5iZi5pdjIKKwkJKyBjdHMuYmYuaXYzOworCisJcmV0dXJuIHNpemVvZihzdHJ1Y3QgZHluYW1pY19zYV9jdGwpICsgb2Zmc2V0ICogNDsKK30KKwordTMyIGdldF9keW5hbWljX3NhX2l2X3NpemUoc3RydWN0IGNyeXB0bzR4eF9jdHggKmN0eCkKK3sKKwl1bmlvbiBkeW5hbWljX3NhX2NvbnRlbnRzIGN0czsKKworCWlmIChjdHgtPmRpcmVjdGlvbiA9PSBESVJfSU5CT1VORCkKKwkJY3RzLncgPSAoKHN0cnVjdCBkeW5hbWljX3NhX2N0bCAqKSBjdHgtPnNhX2luKS0+c2FfY29udGVudHM7CisJZWxzZQorCQljdHMudyA9ICgoc3RydWN0IGR5bmFtaWNfc2FfY3RsICopIGN0eC0+c2Ffb3V0KS0+c2FfY29udGVudHM7CisJcmV0dXJuIChjdHMuYmYuaXYwICsgY3RzLmJmLml2MSArIGN0cy5iZi5pdjIgKyBjdHMuYmYuaXYzKSAqIDQ7Cit9CisKK3UzMiBnZXRfZHluYW1pY19zYV9vZmZzZXRfa2V5X2ZpZWxkKHN0cnVjdCBjcnlwdG80eHhfY3R4ICpjdHgpCit7CisJdW5pb24gZHluYW1pY19zYV9jb250ZW50cyBjdHM7CisKKwlpZiAoY3R4LT5kaXJlY3Rpb24gPT0gRElSX0lOQk9VTkQpCisJCWN0cy53ID0gKChzdHJ1Y3QgZHluYW1pY19zYV9jdGwgKikgY3R4LT5zYV9pbiktPnNhX2NvbnRlbnRzOworCWVsc2UKKwkJY3RzLncgPSAoKHN0cnVjdCBkeW5hbWljX3NhX2N0bCAqKSBjdHgtPnNhX291dCktPnNhX2NvbnRlbnRzOworCisJcmV0dXJuIHNpemVvZihzdHJ1Y3QgZHluYW1pY19zYV9jdGwpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vYW1jYy9jcnlwdG80eHhfc2EuaCBiL2RyaXZlcnMvY3J5cHRvL2FtY2MvY3J5cHRvNHh4X3NhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGI4M2VkNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY3J5cHRvL2FtY2MvY3J5cHRvNHh4X3NhLmgKQEAgLTAsMCArMSwyNDMgQEAKKy8qKgorICogQU1DQyBTb0MgUFBDNHh4IENyeXB0byBEcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggQXBwbGllZCBNaWNybyBDaXJjdWl0cyBDb3Jwb3JhdGlvbi4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIEphbWVzIEhzaWFvIDxqaHNpYW9AYW1jYy5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSBzZWN1cml0eSBjb250ZXh0CisgKiBhc3NvaWNhdGUgZm9ybWF0LgorICovCisKKyNpZm5kZWYgX19DUllQVE80WFhfU0FfSF9fCisjZGVmaW5lIF9fQ1JZUFRPNFhYX1NBX0hfXworCisjZGVmaW5lIEFFU19JVl9TSVpFCQkJCTE2CisKKy8qKgorICogQ29udGVudHMgb2YgRHluYW1pYyBTZWN1cml0eSBBc3NvY2lhdGlvbiAoU0EpIHdpdGggYWxsIHBvc3NpYmxlIGZpZWxkcworICovCit1bmlvbiBkeW5hbWljX3NhX2NvbnRlbnRzIHsKKwlzdHJ1Y3QgeworCQl1MzIgYXJjNF9zdGF0ZV9wdHI6MTsKKwkJdTMyIGFyYzRfaWpfcHRyOjE7CisJCXUzMiBzdGF0ZV9wdHI6MTsKKwkJdTMyIGl2MzoxOworCQl1MzIgaXYyOjE7CisJCXUzMiBpdjE6MTsKKwkJdTMyIGl2MDoxOworCQl1MzIgc2VxX251bV9tYXNrMzoxOworCQl1MzIgc2VxX251bV9tYXNrMjoxOworCQl1MzIgc2VxX251bV9tYXNrMToxOworCQl1MzIgc2VxX251bV9tYXNrMDoxOworCQl1MzIgc2VxX251bTE6MTsKKwkJdTMyIHNlcV9udW0wOjE7CisJCXUzMiBzcGk6MTsKKwkJdTMyIG91dGVyX3NpemU6NTsKKwkJdTMyIGlubmVyX3NpemU6NTsKKwkJdTMyIGtleV9zaXplOjQ7CisJCXUzMiBjbWRfc2l6ZTo0OworCX0gYmY7CisJdTMyIHc7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZGVmaW5lIERJUl9PVVRCT1VORAkJCQkwCisjZGVmaW5lIERJUl9JTkJPVU5ECQkJCTEKKyNkZWZpbmUgU0FfT1BfR1JPVVBfQkFTSUMJCQkwCisjZGVmaW5lIFNBX09QQ09ERV9FTkNSWVBUCQkJMAorI2RlZmluZSBTQV9PUENPREVfREVDUllQVAkJCTAKKyNkZWZpbmUgU0FfT1BDT0RFX0hBU0gJCQkJMworI2RlZmluZSBTQV9DSVBIRVJfQUxHX0RFUwkJCTAKKyNkZWZpbmUgU0FfQ0lQSEVSX0FMR18zREVTCQkJMQorI2RlZmluZSBTQV9DSVBIRVJfQUxHX0FSQzQJCQkyCisjZGVmaW5lIFNBX0NJUEhFUl9BTEdfQUVTCQkJMworI2RlZmluZSBTQV9DSVBIRVJfQUxHX0tBU1VNSQkJCTQKKyNkZWZpbmUgU0FfQ0lQSEVSX0FMR19OVUxMCQkJMTUKKworI2RlZmluZSBTQV9IQVNIX0FMR19NRDUJCQkJMAorI2RlZmluZSBTQV9IQVNIX0FMR19TSEExCQkJMQorI2RlZmluZSBTQV9IQVNIX0FMR19OVUxMCQkJMTUKKyNkZWZpbmUgU0FfSEFTSF9BTEdfU0hBMV9ESUdFU1RfU0laRQkJMjAKKworI2RlZmluZSBTQV9MT0FEX0hBU0hfRlJPTV9TQQkJCTAKKyNkZWZpbmUgU0FfTE9BRF9IQVNIX0ZST01fU1RBVEUJCQkyCisjZGVmaW5lIFNBX05PVF9MT0FEX0hBU0gJCQkzCisjZGVmaW5lIFNBX0xPQURfSVZfRlJPTV9TQQkJCTAKKyNkZWZpbmUgU0FfTE9BRF9JVl9GUk9NX0lOUFVUCQkJMQorI2RlZmluZSBTQV9MT0FEX0lWX0ZST01fU1RBVEUJCQkyCisjZGVmaW5lIFNBX0xPQURfSVZfR0VOX0lWCQkJMworCisjZGVmaW5lIFNBX1BBRF9UWVBFX0NPTlNUQU5UCQkJMgorI2RlZmluZSBTQV9QQURfVFlQRV9aRVJPCQkJMworI2RlZmluZSBTQV9QQURfVFlQRV9UTFMJCQkJNQorI2RlZmluZSBTQV9QQURfVFlQRV9EVExTCQkJNQorI2RlZmluZSBTQV9OT1RfU0FWRV9IQVNICQkJMAorI2RlZmluZSBTQV9TQVZFX0hBU0gJCQkJMQorI2RlZmluZSBTQV9OT1RfU0FWRV9JVgkJCQkwCisjZGVmaW5lIFNBX1NBVkVfSVYJCQkJMQorI2RlZmluZSBTQV9IRUFERVJfUFJPQwkJCQkxCisjZGVmaW5lIFNBX05PX0hFQURFUl9QUk9DCQkJMAorCit1bmlvbiBzYV9jb21tYW5kXzAgeworCXN0cnVjdCB7CisJCXUzMiBzY2F0dGVyOjE7CisJCXUzMiBnYXRoZXI6MTsKKwkJdTMyIHNhdmVfaGFzaF9zdGF0ZToxOworCQl1MzIgc2F2ZV9pdjoxOworCQl1MzIgbG9hZF9oYXNoX3N0YXRlOjI7CisJCXUzMiBsb2FkX2l2OjI7CisJCXUzMiBkaWdlc3RfbGVuOjQ7CisJCXUzMiBoZHJfcHJvYzoxOworCQl1MzIgZXh0ZW5kX3BhZDoxOworCQl1MzIgc3RyZWFtX2NpcGhlcl9wYWQ6MTsKKwkJdTMyIHJzdjoxOworCQl1MzIgaGFzaF9hbGc6NDsKKwkJdTMyIGNpcGhlcl9hbGc6NDsKKwkJdTMyIHBhZF90eXBlOjI7CisJCXUzMiBvcF9ncm91cDoyOworCQl1MzIgZGlyOjE7CisJCXUzMiBvcGNvZGU6MzsKKwl9IGJmOworCXUzMiB3OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2RlZmluZSBDUllQVE9fTU9ERV9FQ0IJCQkJMAorI2RlZmluZSBDUllQVE9fTU9ERV9DQkMJCQkJMQorCisjZGVmaW5lIENSWVBUT19GRUVEQkFDS19NT0RFX05PX0ZCCQkwCisjZGVmaW5lIENSWVBUT19GRUVEQkFDS19NT0RFXzY0QklUX09GQgkJMAorI2RlZmluZSBDUllQVE9fRkVFREJBQ0tfTU9ERV84QklUX0NGQgkJMQorI2RlZmluZSBDUllQVE9fRkVFREJBQ0tfTU9ERV8xQklUX0NGQgkJMgorI2RlZmluZSBDUllQVE9fRkVFREJBQ0tfTU9ERV8xMjhCSVRfQ0ZCCQkzCisKKyNkZWZpbmUgU0FfQUVTX0tFWV9MRU5fMTI4CQkJMgorI2RlZmluZSBTQV9BRVNfS0VZX0xFTl8xOTIJCQkzCisjZGVmaW5lIFNBX0FFU19LRVlfTEVOXzI1NgkJCTQKKworI2RlZmluZSBTQV9SRVYyCQkJCQkxCisvKioKKyAqIFRoZSBmb2xsb3cgZGVmaW5lcyBiaXRzIHNhX2NvbW1hbmRfMQorICogSW4gQmFzaWMgaGFzaCBtb2RlICB0aGlzIGJpdCBkZWZpbmUgc2ltcGxlIGhhc2ggb3IgaG1hYy4KKyAqIEluIElQc2VjIG1vZGUsIHRoaXMgYml0IGRlZmluZSBtdXRpbmcgY29udHJvbC4KKyAqLworI2RlZmluZSBTQV9IQVNIX01PREVfSEFTSAkJCTAKKyNkZWZpbmUgU0FfSEFTSF9NT0RFX0hNQUMJCQkxCisjZGVmaW5lIFNBX01DX0VOQUJMRQkJCQkwCisjZGVmaW5lIFNBX01DX0RJU0FCTEUJCQkJMQorI2RlZmluZSBTQV9OT1RfQ09QWV9IRFIJCQkJMAorI2RlZmluZSBTQV9DT1BZX0hEUgkJCQkxCisjZGVmaW5lIFNBX05PVF9DT1BZX1BBRAkJCQkwCisjZGVmaW5lIFNBX0NPUFlfUEFECQkJCTEKKyNkZWZpbmUgU0FfTk9UX0NPUFlfUEFZTE9BRAkJCTAKKyNkZWZpbmUgU0FfQ09QWV9QQVlMT0FECQkJCTEKKyNkZWZpbmUgU0FfRVhURU5ERURfU05fT0ZGCQkJMAorI2RlZmluZSBTQV9FWFRFTkRFRF9TTl9PTgkJCTEKKyNkZWZpbmUgU0FfU0VRX01BU0tfT0ZGCQkJCTAKKyNkZWZpbmUgU0FfU0VRX01BU0tfT04JCQkJMQorCit1bmlvbiBzYV9jb21tYW5kXzEgeworCXN0cnVjdCB7CisJCXUzMiBjcnlwdG9fbW9kZTMxOjE7CisJCXUzMiBzYXZlX2FyYzRfc3RhdGU6MTsKKwkJdTMyIGFyYzRfc3RhdGVmdWw6MTsKKwkJdTMyIGtleV9sZW46NTsKKwkJdTMyIGhhc2hfY3J5cHRvX29mZnNldDo4OworCQl1MzIgc2FfcmV2OjI7CisJCXUzMiBieXRlX29mZnNldDoxOworCQl1MzIgaG1hY19tdXRpbmc6MTsKKwkJdTMyIGZlZWRiYWNrX21vZGU6MjsKKwkJdTMyIGNyeXB0b19tb2RlOV84OjI7CisJCXUzMiBleHRlbmRlZF9zZXFfbnVtOjE7CisJCXUzMiBzZXFfbnVtX21hc2s6MTsKKwkJdTMyIG11dGFibGVfYml0X3Byb2M6MTsKKwkJdTMyIGlwX3ZlcnNpb246MTsKKwkJdTMyIGNvcHlfcGFkOjE7CisJCXUzMiBjb3B5X3BheWxvYWQ6MTsKKwkJdTMyIGNvcHlfaGRyOjE7CisJCXUzMiByc3YxOjE7CisJfSBiZjsKKwl1MzIgdzsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBkeW5hbWljX3NhX2N0bCB7CisJdTMyIHNhX2NvbnRlbnRzOworCXVuaW9uIHNhX2NvbW1hbmRfMCBzYV9jb21tYW5kXzA7CisJdW5pb24gc2FfY29tbWFuZF8xIHNhX2NvbW1hbmRfMTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qKgorICogU3RhdGUgUmVjb3JkIGZvciBTZWN1cml0eSBBc3NvY2lhdGlvbiAoU0EpCisgKi8KK3N0cnVjdCAgc2Ffc3RhdGVfcmVjb3JkIHsKKwl1MzIgc2F2ZV9pdls0XTsKKwl1MzIgc2F2ZV9oYXNoX2J5dGVfY250WzJdOworCXUzMiBzYXZlX2RpZ2VzdFsxNl07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKioKKyAqIFNlY3VyaXR5IEFzc29jaWF0aW9uIChTQSkgZm9yIEFFUzEyOAorICoKKyAqLworc3RydWN0IGR5bmFtaWNfc2FfYWVzMTI4IHsKKwlzdHJ1Y3QgZHluYW1pY19zYV9jdGwJY3RybDsKKwl1MzIga2V5WzRdOworCXUzMiBpdls0XTsgLyogZm9yIENCQywgT0ZDLCBhbmQgQ0ZCIG1vZGUgKi8KKwl1MzIgc3RhdGVfcHRyOworCXUzMiByZXNlcnZlZDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUgU0FfQUVTMTI4X0xFTgkJKHNpemVvZihzdHJ1Y3QgZHluYW1pY19zYV9hZXMxMjgpLzQpCisjZGVmaW5lIFNBX0FFUzEyOF9DT05URU5UUwkweDNlMDAwMDQyCisKKy8qCisgKiBTZWN1cml0eSBBc3NvY2lhdGlvbiAoU0EpIGZvciBBRVMxOTIKKyAqLworc3RydWN0IGR5bmFtaWNfc2FfYWVzMTkyIHsKKwlzdHJ1Y3QgZHluYW1pY19zYV9jdGwgY3RybDsKKwl1MzIga2V5WzZdOworCXUzMiBpdls0XTsgLyogZm9yIENCQywgT0ZDLCBhbmQgQ0ZCIG1vZGUgKi8KKwl1MzIgc3RhdGVfcHRyOworCXUzMiByZXNlcnZlZDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUgU0FfQUVTMTkyX0xFTgkJKHNpemVvZihzdHJ1Y3QgZHluYW1pY19zYV9hZXMxOTIpLzQpCisjZGVmaW5lIFNBX0FFUzE5Ml9DT05URU5UUwkweDNlMDAwMDYyCisKKy8qKgorICogU2VjdXJpdHkgQXNzb2NpYXRpb24gKFNBKSBmb3IgQUVTMjU2CisgKi8KK3N0cnVjdCBkeW5hbWljX3NhX2FlczI1NiB7CisJc3RydWN0IGR5bmFtaWNfc2FfY3RsIGN0cmw7CisJdTMyIGtleVs4XTsKKwl1MzIgaXZbNF07IC8qIGZvciBDQkMsIE9GQywgYW5kIENGQiBtb2RlICovCisJdTMyIHN0YXRlX3B0cjsKKwl1MzIgcmVzZXJ2ZWQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZGVmaW5lIFNBX0FFUzI1Nl9MRU4JCShzaXplb2Yoc3RydWN0IGR5bmFtaWNfc2FfYWVzMjU2KS80KQorI2RlZmluZSBTQV9BRVMyNTZfQ09OVEVOVFMJMHgzZTAwMDA4MgorI2RlZmluZSBTQV9BRVNfQ09OVEVOVFMJCTB4M2UwMDAwMDIKKworLyoqCisgKiBTZWN1cml0eSBBc3NvY2lhdGlvbiAoU0EpIGZvciBIQVNIMTYwOiBITUFDLVNIQTEKKyAqLworc3RydWN0IGR5bmFtaWNfc2FfaGFzaDE2MCB7CisJc3RydWN0IGR5bmFtaWNfc2FfY3RsIGN0cmw7CisJdTMyIGlubmVyX2RpZ2VzdFs1XTsKKwl1MzIgb3V0ZXJfZGlnZXN0WzVdOworCXUzMiBzdGF0ZV9wdHI7CisJdTMyIHJlc2VydmVkOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKyNkZWZpbmUgU0FfSEFTSDE2MF9MRU4JCShzaXplb2Yoc3RydWN0IGR5bmFtaWNfc2FfaGFzaDE2MCkvNCkKKyNkZWZpbmUgU0FfSEFTSDE2MF9DT05URU5UUyAgICAgMHgyMDAwYTUwMgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZGlvL2Rpby5jIGIvZHJpdmVycy9kaW8vZGlvLmMKaW5kZXggMTBjM2M0OS4uNTVkZDg4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9kaW8vZGlvLmMKKysrIGIvZHJpdmVycy9kaW8vZGlvLmMKQEAgLTE4Miw3ICsxODIsNyBAQAogCiAJLyogSW5pdGlhbGl6ZSB0aGUgRElPIGJ1cyAqLyAKIAlJTklUX0xJU1RfSEVBRCgmZGlvX2J1cy5kZXZpY2VzKTsKLQlzdHJjcHkoZGlvX2J1cy5kZXYuYnVzX2lkLCAiZGlvIik7CisJZGV2X3NldF9uYW1lKCZkaW9fYnVzLmRldiwgImRpbyIpOwogCWVycm9yID0gZGV2aWNlX3JlZ2lzdGVyKCZkaW9fYnVzLmRldik7CiAJaWYgKGVycm9yKSB7CiAJCXByX2VycigiRElPOiBFcnJvciByZWdpc3RlcmluZyBkaW9fYnVzXG4iKTsKQEAgLTIzNyw3ICsyMzcsNyBAQAogCQlkZXYtPnNjb2RlID0gc2NvZGU7CiAJCWRldi0+cmVzb3VyY2Uuc3RhcnQgPSBwYTsKIAkJZGV2LT5yZXNvdXJjZS5lbmQgPSBwYSArIERJT19TSVpFKHNjb2RlLCB2YSk7Ci0JCXNwcmludGYoZGV2LT5kZXYuYnVzX2lkLCIlMDJ4Iiwgc2NvZGUpOworCQlkZXZfc2V0X25hbWUoJmRldi0+ZGV2LCAiJTAyeCIsIHNjb2RlKTsKIAogICAgICAgICAgICAgICAgIC8qIHJlYWQgdGhlIElEIGJ5dGUocykgYW5kIGVuY29kZSBpZiBuZWNlc3NhcnkuICovCiAJCXByaWQgPSBESU9fSUQodmEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvZHdfZG1hYy5jIGIvZHJpdmVycy9kbWEvZHdfZG1hYy5jCmluZGV4IGE5N2MwN2UuLjIwYWQzZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL2R3X2RtYWMuYworKysgYi9kcml2ZXJzL2RtYS9kd19kbWFjLmMKQEAgLTEwMTEsNyArMTAxMSw3IEBACiAJZG1hX3dyaXRlbChkdywgQ0ZHLCBEV19DRkdfRE1BX0VOKTsKIAogCXByaW50ayhLRVJOX0lORk8gIiVzOiBEZXNpZ25XYXJlIERNQSBDb250cm9sbGVyLCAlZCBjaGFubmVsc1xuIiwKLQkJCXBkZXYtPmRldi5idXNfaWQsIGR3LT5kbWEuY2hhbmNudCk7CisJCQlkZXZfbmFtZSgmcGRldi0+ZGV2KSwgZHctPmRtYS5jaGFuY250KTsKIAogCWRtYV9hc3luY19kZXZpY2VfcmVnaXN0ZXIoJmR3LT5kbWEpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvY2VsbF9lZGFjLmMgYi9kcml2ZXJzL2VkYWMvY2VsbF9lZGFjLmMKaW5kZXggMjRmM2NhOC4uY2IwZjYzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL2NlbGxfZWRhYy5jCisrKyBiL2RyaXZlcnMvZWRhYy9jZWxsX2VkYWMuYwpAQCAtMTk4LDcgKzE5OCw3IEBACiAJbWNpLT5lZGFjX2NhcCA9IEVEQUNfRkxBR19FQyB8IEVEQUNfRkxBR19TRUNERUQ7CiAJbWNpLT5tb2RfbmFtZSA9ICJjZWxsX2VkYWMiOwogCW1jaS0+Y3RsX25hbWUgPSAiTUlDIjsKLQltY2ktPmRldl9uYW1lID0gcGRldi0+ZGV2LmJ1c19pZDsKKwltY2ktPmRldl9uYW1lID0gZGV2X25hbWUoJnBkZXYtPmRldik7CiAJbWNpLT5lZGFjX2NoZWNrID0gY2VsbF9lZGFjX2NoZWNrOwogCWNlbGxfZWRhY19pbml0X2Nzcm93cyhtY2kpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvbXBjODV4eF9lZGFjLmMgYi9kcml2ZXJzL2VkYWMvbXBjODV4eF9lZGFjLmMKaW5kZXggODUzZWYzNy4uNDYzN2E0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL21wYzg1eHhfZWRhYy5jCisrKyBiL2RyaXZlcnMvZWRhYy9tcGM4NXh4X2VkYWMuYwpAQCAtMjE4LDcgKzIxOCw3IEBACiAJcGNpLT5kZXYgPSAmb3AtPmRldjsKIAlwY2ktPm1vZF9uYW1lID0gRURBQ19NT0RfU1RSOwogCXBjaS0+Y3RsX25hbWUgPSBwZGF0YS0+bmFtZTsKLQlwY2ktPmRldl9uYW1lID0gb3AtPmRldi5idXNfaWQ7CisJcGNpLT5kZXZfbmFtZSA9IGRldl9uYW1lKCZvcC0+ZGV2KTsKIAogCWlmIChlZGFjX29wX3N0YXRlID09IEVEQUNfT1BTVEFURV9QT0xMKQogCQlwY2ktPmVkYWNfY2hlY2sgPSBtcGM4NXh4X3BjaV9jaGVjazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9tdjY0eDYwX2VkYWMuYyBiL2RyaXZlcnMvZWRhYy9tdjY0eDYwX2VkYWMuYwppbmRleCAwODNjZThkLi41MTMxYWFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvbXY2NHg2MF9lZGFjLmMKKysrIGIvZHJpdmVycy9lZGFjL212NjR4NjBfZWRhYy5jCkBAIC0xMjEsNyArMTIxLDcgQEAKIAlwZGF0YS0+aXJxID0gTk9fSVJROwogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHBjaSk7CiAJcGNpLT5kZXYgPSAmcGRldi0+ZGV2OwotCXBjaS0+ZGV2X25hbWUgPSBwZGV2LT5kZXYuYnVzX2lkOworCXBjaS0+ZGV2X25hbWUgPSBkZXZfbmFtZSgmcGRldi0+ZGV2KTsKIAlwY2ktPm1vZF9uYW1lID0gRURBQ19NT0RfU1RSOwogCXBjaS0+Y3RsX25hbWUgPSBwZGF0YS0+bmFtZTsKIApAQCAtMjk0LDcgKzI5NCw3IEBACiAJcGRhdGEtPmlycSA9IE5PX0lSUTsKIAllZGFjX2Rldi0+ZGV2ID0gJnBkZXYtPmRldjsKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBlZGFjX2Rldik7Ci0JZWRhY19kZXYtPmRldl9uYW1lID0gcGRldi0+ZGV2LmJ1c19pZDsKKwllZGFjX2Rldi0+ZGV2X25hbWUgPSBkZXZfbmFtZSgmcGRldi0+ZGV2KTsKIAogCXIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCWlmICghcikgewpAQCAtNDYyLDcgKzQ2Miw3IEBACiAJcGRhdGEtPmlycSA9IE5PX0lSUTsKIAllZGFjX2Rldi0+ZGV2ID0gJnBkZXYtPmRldjsKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBlZGFjX2Rldik7Ci0JZWRhY19kZXYtPmRldl9uYW1lID0gcGRldi0+ZGV2LmJ1c19pZDsKKwllZGFjX2Rldi0+ZGV2X25hbWUgPSBkZXZfbmFtZSgmcGRldi0+ZGV2KTsKIAogCXIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCWlmICghcikgewpAQCAtNzEzLDcgKzcxMyw3IEBACiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgbWNpKTsKIAlwZGF0YS0+bmFtZSA9ICJtdjY0eDYwX21jX2VyciI7CiAJcGRhdGEtPmlycSA9IE5PX0lSUTsKLQltY2ktPmRldl9uYW1lID0gcGRldi0+ZGV2LmJ1c19pZDsKKwltY2ktPmRldl9uYW1lID0gZGV2X25hbWUoJnBkZXYtPmRldik7CiAJcGRhdGEtPmVkYWNfaWR4ID0gZWRhY19tY19pZHgrKzsKIAogCXIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9laXNhL2Vpc2EtYnVzLmMgYi9kcml2ZXJzL2Vpc2EvZWlzYS1idXMuYwppbmRleCBjOTUwYmY4Li42Njk1OGIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Vpc2EvZWlzYS1idXMuYworKysgYi9kcml2ZXJzL2Vpc2EvZWlzYS1idXMuYwpAQCAtMjAwLDcgKzIwMCw3IEBACiAJZWRldi0+ZGV2LmJ1cyA9ICZlaXNhX2J1c190eXBlOwogCWVkZXYtPmRldi5kbWFfbWFzayA9ICZlZGV2LT5kbWFfbWFzazsKIAllZGV2LT5kZXYuY29oZXJlbnRfZG1hX21hc2sgPSBlZGV2LT5kbWFfbWFzazsKLQlzcHJpbnRmIChlZGV2LT5kZXYuYnVzX2lkLCAiJTAyWDolMDJYIiwgcm9vdC0+YnVzX25yLCBzbG90KTsKKwlkZXZfc2V0X25hbWUoJmVkZXYtPmRldiwgIiUwMlg6JTAyWCIsIHJvb3QtPmJ1c19uciwgc2xvdCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgRUlTQV9NQVhfUkVTT1VSQ0VTOyBpKyspIHsKICNpZmRlZiBDT05GSUdfRUlTQV9OQU1FUwpAQCAtMzAxLDcgKzMwMSw3IEBACiAJc3RydWN0IGVpc2FfZGV2aWNlICplZGV2OwogCiAgICAgICAgIHByaW50ayAoS0VSTl9JTkZPICJFSVNBOiBQcm9iaW5nIGJ1cyAlZCBhdCAlc1xuIiwKLQkJcm9vdC0+YnVzX25yLCByb290LT5kZXYtPmJ1c19pZCk7CisJCXJvb3QtPmJ1c19uciwgZGV2X25hbWUocm9vdC0+ZGV2KSk7CiAKIAkvKiBGaXJzdCB0cnkgdG8gZ2V0IGhvbGQgb2Ygc2xvdCAwLiBJZiB0aGVyZSBpcyBubyBkZXZpY2UKIAkgKiBoZXJlLCBzaW1wbHkgZmFpbCwgdW5sZXNzIHJvb3QtPmZvcmNlX3Byb2JlIGlzIHNldC4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9idDh4eGdwaW8uYyBiL2RyaXZlcnMvZ3Bpby9idDh4eGdwaW8uYwppbmRleCA3YTExNjgyLi45ODRiNTg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwaW8vYnQ4eHhncGlvLmMKKysrIGIvZHJpdmVycy9ncGlvL2J0OHh4Z3Bpby5jCkBAIC0xNjAsNyArMTYwLDcgQEAKIHsKIAlzdHJ1Y3QgZ3Bpb19jaGlwICpjID0gJmJnLT5ncGlvOwogCi0JYy0+bGFiZWwgPSBiZy0+cGRldi0+ZGV2LmJ1c19pZDsKKwljLT5sYWJlbCA9IGRldl9uYW1lKCZiZy0+cGRldi0+ZGV2KTsKIAljLT5vd25lciA9IFRISVNfTU9EVUxFOwogCWMtPmRpcmVjdGlvbl9pbnB1dCA9IGJ0OHh4Z3Bpb19ncGlvX2RpcmVjdGlvbl9pbnB1dDsKIAljLT5nZXQgPSBidDh4eGdwaW9fZ3Bpb19nZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZvcHMuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZm9wcy5jCmluZGV4IGY1MjY2M2UuLmUxM2NiNjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZm9wcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZm9wcy5jCkBAIC0zMzcsMTQgKzMzNywxMCBAQAogewogCXN0cnVjdCBkcm1fZmlsZSAqcHJpdiA9IGZpbHAtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcHJpdi0+bWlub3ItPmRldjsKLQlpbnQgcmV0Y29kZTsKIAogCURSTV9ERUJVRygiZmQgPSAlZCwgZGV2aWNlID0gMHglbHhcbiIsIGZkLAogCQkgIChsb25nKW9sZF9lbmNvZGVfZGV2KHByaXYtPm1pbm9yLT5kZXZpY2UpKTsKLQlyZXRjb2RlID0gZmFzeW5jX2hlbHBlcihmZCwgZmlscCwgb24sICZkZXYtPmJ1Zl9hc3luYyk7Ci0JaWYgKHJldGNvZGUgPCAwKQotCQlyZXR1cm4gcmV0Y29kZTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZmFzeW5jX2hlbHBlcihmZCwgZmlscCwgb24sICZkZXYtPmJ1Zl9hc3luYyk7CiB9CiBFWFBPUlRfU1lNQk9MKGRybV9mYXN5bmMpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3N5c2ZzLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3N5c2ZzLmMKaW5kZXggNWFhNjc4MC4uMTg2ZDA4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9zeXNmcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fc3lzZnMuYwpAQCAtMzU5LDggKzM1OSw4IEBACiAJRFJNX0RFQlVHKCJhZGRpbmcgXCIlc1wiIHRvIHN5c2ZzXG4iLAogCQkgIGRybV9nZXRfY29ubmVjdG9yX25hbWUoY29ubmVjdG9yKSk7CiAKLQlzbnByaW50Zihjb25uZWN0b3ItPmtkZXYuYnVzX2lkLCBCVVNfSURfU0laRSwgImNhcmQlZC0lcyIsCi0JCSBkZXYtPnByaW1hcnktPmluZGV4LCBkcm1fZ2V0X2Nvbm5lY3Rvcl9uYW1lKGNvbm5lY3RvcikpOworCWRldl9zZXRfbmFtZSgmY29ubmVjdG9yLT5rZGV2LCAiY2FyZCVkLSVzIiwKKwkJICAgICBkZXYtPnByaW1hcnktPmluZGV4LCBkcm1fZ2V0X2Nvbm5lY3Rvcl9uYW1lKGNvbm5lY3RvcikpOwogCXJldCA9IGRldmljZV9yZWdpc3RlcigmY29ubmVjdG9yLT5rZGV2KTsKIAogCWlmIChyZXQpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWRkZXYuYyBiL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWRkZXYuYwppbmRleCAxZjViNWQ0Li5hYTIxNDE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC91c2JoaWQvaGlkZGV2LmMKKysrIGIvZHJpdmVycy9oaWQvdXNiaGlkL2hpZGRldi5jCkBAIC0yMjcsMTIgKzIyNyw5IEBACiAgKi8KIHN0YXRpYyBpbnQgaGlkZGV2X2Zhc3luYyhpbnQgZmQsIHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgb24pCiB7Ci0JaW50IHJldHZhbDsKIAlzdHJ1Y3QgaGlkZGV2X2xpc3QgKmxpc3QgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAKLQlyZXR2YWwgPSBmYXN5bmNfaGVscGVyKGZkLCBmaWxlLCBvbiwgJmxpc3QtPmZhc3luYyk7Ci0KLQlyZXR1cm4gcmV0dmFsIDwgMCA/IHJldHZhbCA6IDA7CisJcmV0dXJuIGZhc3luY19oZWxwZXIoZmQsIGZpbGUsIG9uLCAmbGlzdC0+ZmFzeW5jKTsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9pMmMtY29yZS5jIGIvZHJpdmVycy9pMmMvaTJjLWNvcmUuYwppbmRleCBlN2Q5ODQ4Li5mYmI5MDMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9pMmMtY29yZS5jCisrKyBiL2RyaXZlcnMvaTJjL2kyYy1jb3JlLmMKQEAgLTg0MSw3ICs4NDEsNyBAQAogCiAJaWYgKGNsaWVudC0+ZHJpdmVyICYmICFpc19uZXdzdHlsZV9kcml2ZXIoY2xpZW50LT5kcml2ZXIpKSB7CiAJCWNsaWVudC0+ZGV2LnJlbGVhc2UgPSBpMmNfY2xpZW50X3JlbGVhc2U7Ci0JCWNsaWVudC0+ZGV2LnVldmVudF9zdXBwcmVzcyA9IDE7CisJCWRldl9zZXRfdWV2ZW50X3N1cHByZXNzKCZjbGllbnQtPmRldiwgMSk7CiAJfSBlbHNlCiAJCWNsaWVudC0+ZGV2LnJlbGVhc2UgPSBpMmNfY2xpZW50X2Rldl9yZWxlYXNlOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9LY29uZmlnIGIvZHJpdmVycy9pZGUvS2NvbmZpZwppbmRleCA1ZWEzYmZhLi42NDBjOTkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9LY29uZmlnCisrKyBiL2RyaXZlcnMvaWRlL0tjb25maWcKQEAgLTU2LDggKzU2LDEyIEBACiAKIGNvbW1lbnQgIlBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUvaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMiCiAKK2NvbmZpZyBJREVfWEZFUl9NT0RFCisJYm9vbAorCiBjb25maWcgSURFX1RJTUlOR1MKIAlib29sCisJc2VsZWN0IElERV9YRkVSX01PREUKIAogY29uZmlnIElERV9BVEFQSQogCWJvb2wKQEAgLTY5OCw2ICs3MDIsNyBAQAogY29uZmlnIEJMS19ERVZfSURFX0FVMVhYWAogICAgICAgIGJvb2wgIklERSBmb3IgQU1EIEFsY2hlbXkgQXUxMjAwIgogICAgICAgIGRlcGVuZHMgb24gU09DX0FVMTIwMAorICAgICAgIHNlbGVjdCBJREVfWEZFUl9NT0RFCiBjaG9pY2UKICAgICAgICBwcm9tcHQgIklERSBNb2RlIGZvciBBTUQgQWxjaGVteSBBdTEyMDAiCiAgICAgICAgZGVmYXVsdCBDT05GSUdfQkxLX0RFVl9JREVfQVUxWFhYX1BJT19EQkRNQQpAQCAtODcxLDYgKzg3Niw3IEBACiAKIGNvbmZpZyBCTEtfREVWX0RUQzIyNzgKIAl0cmlzdGF0ZSAiRFRDLTIyNzggc3VwcG9ydCIKKwlzZWxlY3QgSURFX1hGRVJfTU9ERQogCXNlbGVjdCBJREVfTEVHQUNZCiAJaGVscAogCSAgVGhpcyBkcml2ZXIgaXMgZW5hYmxlZCBhdCBydW50aW1lIHVzaW5nIHRoZSAiZHRjMjI3OC5wcm9iZSIga2VybmVsCkBAIC05MDIsNiArOTA4LDcgQEAKIAogY29uZmlnIEJMS19ERVZfVU1DODY3MgogCXRyaXN0YXRlICJVTUMtODY3MiBzdXBwb3J0IgorCXNlbGVjdCBJREVfWEZFUl9NT0RFCiAJc2VsZWN0IElERV9MRUdBQ1kKIAloZWxwCiAJICBUaGlzIGRyaXZlciBpcyBlbmFibGVkIGF0IHJ1bnRpbWUgdXNpbmcgdGhlICJ1bWM4NjcyLnByb2JlIiBrZXJuZWwKQEAgLTkxNSw1ICs5MjIsNiBAQAogY29uZmlnIEJMS19ERVZfSURFRE1BCiAJZGVmX2Jvb2wgQkxLX0RFVl9JREVETUFfU0ZGIHx8IFwKIAkJIEJMS19ERVZfSURFRE1BX0lDUyB8fCBCTEtfREVWX0lERV9BVTFYWFhfTURNQTJfREJETUEKKwlzZWxlY3QgSURFX1hGRVJfTU9ERQogCiBlbmRpZiAjIElERQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvTWFrZWZpbGUgYi9kcml2ZXJzL2lkZS9NYWtlZmlsZQppbmRleCAxYzMyNmQ5Li45YjRiYmUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2lkZS9NYWtlZmlsZQpAQCAtNSw5ICs1LDExIEBACiBFWFRSQV9DRkxBR1MJCQkJKz0gLUlkcml2ZXJzL2lkZQogCiBpZGUtY29yZS15ICs9IGlkZS5vIGlkZS1pb2N0bHMubyBpZGUtaW8ubyBpZGUtaW9wcy5vIGlkZS1saWIubyBpZGUtcHJvYmUubyBcCi0JICAgICAgaWRlLXRhc2tmaWxlLm8gaWRlLXBtLm8gaWRlLXBhcmsubyBpZGUtcGlvLWJsYWNrbGlzdC5vIGlkZS1zeXNmcy5vCisJICAgICAgaWRlLXRhc2tmaWxlLm8gaWRlLXBtLm8gaWRlLXBhcmsubyBpZGUtc3lzZnMubyBpZGUtZGV2c2V0cy5vIFwKKwkgICAgICBpZGUtaW8tc3RkLm8gaWRlLWVoLm8KIAogIyBjb3JlIElERSBjb2RlCitpZGUtY29yZS0kKENPTkZJR19JREVfWEZFUl9NT0RFKQkrPSBpZGUtcGlvLWJsYWNrbGlzdC5vIGlkZS14ZmVyLW1vZGUubwogaWRlLWNvcmUtJChDT05GSUdfSURFX1RJTUlOR1MpCQkrPSBpZGUtdGltaW5ncy5vCiBpZGUtY29yZS0kKENPTkZJR19JREVfQVRBUEkpCQkrPSBpZGUtYXRhcGkubwogaWRlLWNvcmUtJChDT05GSUdfQkxLX0RFVl9JREVQQ0kpCSs9IHNldHVwLXBjaS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9hZWM2Mnh4LmMgYi9kcml2ZXJzL2lkZS9hZWM2Mnh4LmMKaW5kZXggNDQ4NWI5Yy4uODc4ZjhlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvYWVjNjJ4eC5jCisrKyBiL2RyaXZlcnMvaWRlL2FlYzYyeHguYwpAQCAtMTM5LDcgKzEzOSw3IEBACiAJZHJpdmUtPmh3aWYtPnBvcnRfb3BzLT5zZXRfZG1hX21vZGUoZHJpdmUsIHBpbyArIFhGRVJfUElPXzApOwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IGluaXRfY2hpcHNldF9hZWM2Mnh4KHN0cnVjdCBwY2lfZGV2ICpkZXYpCitzdGF0aWMgaW50IGluaXRfY2hpcHNldF9hZWM2Mnh4KHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJLyogVGhlc2UgYXJlIG5lY2Vzc2FyeSB0byBnZXQgQUVDNjI4MCBNYWNpbnRvc2ggY2FyZHMgdG8gd29yayAqLwogCWlmICgoZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9BUlRPUF9BVFA4NjUpIHx8CkBAIC0xNTYsNyArMTU2LDcgQEAKIAkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg0YSwgcmVnNGFoIHwgMHg4MCk7CiAJfQogCi0JcmV0dXJuIGRldi0+aXJxOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdTggYXRwODZ4X2NhYmxlX2RldGVjdChpZGVfaHdpZl90ICpod2lmKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvYWxpbTE1eDMuYyBiL2RyaXZlcnMvaWRlL2FsaW0xNXgzLmMKaW5kZXggNjZmNDMwOC4uZDM1MTNiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvYWxpbTE1eDMuYworKysgYi9kcml2ZXJzL2lkZS9hbGltMTV4My5jCkBAIC0yMTIsNyArMjEyLDcgQEAKICAqCWFwcHJvcHJpYXRlIGFsc28gc2V0cyB1cCB0aGUgMTUzMyBzb3V0aGJyaWRnZS4KICAqLwogCi1zdGF0aWMgdW5zaWduZWQgaW50IGluaXRfY2hpcHNldF9hbGkxNXgzKHN0cnVjdCBwY2lfZGV2ICpkZXYpCitzdGF0aWMgaW50IGluaXRfY2hpcHNldF9hbGkxNXgzKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1OCB0bXBieXRlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvYW1kNzR4eC5jIGIvZHJpdmVycy9pZGUvYW1kNzR4eC5jCmluZGV4IDc3MjY3YzguLjYyOGNkMmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2FtZDc0eHguYworKysgYi9kcml2ZXJzL2lkZS9hbWQ3NHh4LmMKQEAgLTE0MCw3ICsxNDAsNyBAQAogICogVGhlIGluaXRpYWxpemF0aW9uIGNhbGxiYWNrLiAgSW5pdGlhbGl6ZSBkcml2ZSBpbmRlcGVuZGVudCByZWdpc3RlcnMuCiAgKi8KIAotc3RhdGljIHVuc2lnbmVkIGludCBpbml0X2NoaXBzZXRfYW1kNzR4eChzdHJ1Y3QgcGNpX2RldiAqZGV2KQorc3RhdGljIGludCBpbml0X2NoaXBzZXRfYW1kNzR4eChzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCXU4IHQgPSAwLCBvZmZzZXQgPSBhbWRfb2Zmc2V0KGRldik7CiAKQEAgLTE3Miw3ICsxNzIsNyBAQAogCQl0IHw9IDB4ZjA7CiAJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgQU1EX0lERV9DT05GSUcgKyBvZmZzZXQsIHQpOwogCi0JcmV0dXJuIGRldi0+aXJxOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdTggYW1kX2NhYmxlX2RldGVjdChpZGVfaHdpZl90ICpod2lmKQpAQCAtMTgzLDE0ICsxODMsNiBAQAogCQlyZXR1cm4gQVRBX0NCTF9QQVRBNDA7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZGV2aW5pdCBpbml0X2h3aWZfYW1kNzR4eChpZGVfaHdpZl90ICpod2lmKQotewotCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSB0b19wY2lfZGV2KGh3aWYtPmRldik7Ci0KLQlpZiAoaHdpZi0+aXJxID09IDApIC8qIDAgaXMgYm9ndXMgYnV0IHdpbGwgZG8gZm9yIG5vdyAqLwotCQlod2lmLT5pcnEgPSBwY2lfZ2V0X2xlZ2FjeV9pZGVfaXJxKGRldiwgaHdpZi0+Y2hhbm5lbCk7Ci19Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzIGFtZF9wb3J0X29wcyA9IHsKIAkuc2V0X3Bpb19tb2RlCQk9IGFtZF9zZXRfcGlvX21vZGUsCiAJLnNldF9kbWFfbW9kZQkJPSBhbWRfc2V0X2RyaXZlLApAQCAtMjA3LDcgKzE5OSw2IEBACiAJewkJCQkJCQkJXAogCQkubmFtZQkJPSBEUlZfTkFNRSwJCQkJXAogCQkuaW5pdF9jaGlwc2V0CT0gaW5pdF9jaGlwc2V0X2FtZDc0eHgsCQkJXAotCQkuaW5pdF9od2lmCT0gaW5pdF9od2lmX2FtZDc0eHgsCQkJXAogCQkuZW5hYmxlYml0cwk9IHt7MHg0MCwweDAyLDB4MDJ9LCB7MHg0MCwweDAxLDB4MDF9fSwJXAogCQkucG9ydF9vcHMJPSAmYW1kX3BvcnRfb3BzLAkJCVwKIAkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdTX0FNRCwJCQlcCkBAIC0yMjEsNyArMjEyLDYgQEAKIAl7CQkJCQkJCQlcCiAJCS5uYW1lCQk9IERSVl9OQU1FLAkJCQlcCiAJCS5pbml0X2NoaXBzZXQJPSBpbml0X2NoaXBzZXRfYW1kNzR4eCwJCQlcCi0JCS5pbml0X2h3aWYJPSBpbml0X2h3aWZfYW1kNzR4eCwJCQlcCiAJCS5lbmFibGViaXRzCT0ge3sweDUwLDB4MDIsMHgwMn0sIHsweDUwLDB4MDEsMHgwMX19LAlcCiAJCS5wb3J0X29wcwk9ICZhbWRfcG9ydF9vcHMsCQkJXAogCQkuaG9zdF9mbGFncwk9IElERV9IRkxBR1NfQU1ELAkJCVwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2F0aWl4cC5jIGIvZHJpdmVycy9pZGUvYXRpaXhwLmMKaW5kZXggZWNkMWU2Mi4uOTIzY2JmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvYXRpaXhwLmMKKysrIGIvZHJpdmVycy9pZGUvYXRpaXhwLmMKQEAgLTE0Miw3ICsxNDIsNiBAQAogCQkubmFtZQkJPSBEUlZfTkFNRSwKIAkJLmVuYWJsZWJpdHMJPSB7ezB4NDgsMHgwMSwweDAwfSwgezB4NDgsMHgwOCwweDAwfX0sCiAJCS5wb3J0X29wcwk9ICZhdGlpeHBfcG9ydF9vcHMsCi0JCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX0xFR0FDWV9JUlFTLAogCQkucGlvX21hc2sJPSBBVEFfUElPNCwKIAkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE1LApAQCAtMTUxLDcgKzE1MCw3IEBACiAJCS5uYW1lCQk9IERSVl9OQU1FLAogCQkuZW5hYmxlYml0cwk9IHt7MHg0OCwweDAxLDB4MDB9LCB7MHgwMCwweDAwLDB4MDB9fSwKIAkJLnBvcnRfb3BzCT0gJmF0aWl4cF9wb3J0X29wcywKLQkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfU0lOR0xFIHwgSURFX0hGTEFHX0xFR0FDWV9JUlFTLAorCQkuaG9zdF9mbGFncwk9IElERV9IRkxBR19TSU5HTEUsCiAJCS5waW9fbWFzawk9IEFUQV9QSU80LAogCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9hdTF4eHgtaWRlLmMgYi9kcml2ZXJzL2lkZS9hdTF4eHgtaWRlLmMKaW5kZXggNzlhMmRmZS4uMTU0ZWMyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvYXUxeHh4LWlkZS5jCisrKyBiL2RyaXZlcnMvaWRlL2F1MXh4eC1pZGUuYwpAQCAtNTM2LDkgKzUzNiw4IEBACiAjZW5kaWYKIH07CiAKLXN0YXRpYyBpbnQgYXVfaWRlX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgYXVfaWRlX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJX2F1aWRlX2h3aWYgKmFod2lmID0gJmF1aWRlX2h3aWY7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAJc3RydWN0IGlkZV9ob3N0ICpob3N0OwpAQCAtNTUyLDIzICs1NTEsMjMgQEAKICNlbmRpZgogCiAJbWVtc2V0KCZhdWlkZV9od2lmLCAwLCBzaXplb2YoX2F1aWRlX2h3aWYpKTsKLQlhaHdpZi0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlhaHdpZi0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShkZXYsIDApOwogCi0JcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UoZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAKIAlpZiAocmVzID09IE5VTEwpIHsKLQkJcHJfZGVidWcoIiVzICVkOiBubyBiYXNlIGFkZHJlc3NcbiIsIERSVl9OQU1FLCBwZGV2LT5pZCk7CisJCXByX2RlYnVnKCIlcyAlZDogbm8gYmFzZSBhZGRyZXNzXG4iLCBEUlZfTkFNRSwgZGV2LT5pZCk7CiAJCXJldCA9IC1FTk9ERVY7CiAJCWdvdG8gb3V0OwogCX0KIAlpZiAoYWh3aWYtPmlycSA8IDApIHsKLQkJcHJfZGVidWcoIiVzICVkOiBubyBJUlFcbiIsIERSVl9OQU1FLCBwZGV2LT5pZCk7CisJCXByX2RlYnVnKCIlcyAlZDogbm8gSVJRXG4iLCBEUlZfTkFNRSwgZGV2LT5pZCk7CiAJCXJldCA9IC1FTk9ERVY7CiAJCWdvdG8gb3V0OwogCX0KIAogCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEsCi0JCQkJcGRldi0+bmFtZSkpIHsKKwkJCQlkZXYtPm5hbWUpKSB7CiAJCXByX2RlYnVnKCIlczogcmVxdWVzdF9tZW1fcmVnaW9uIGZhaWxlZFxuIiwgRFJWX05BTUUpOwogCQlyZXQgPSAgLUVCVVNZOwogCQlnb3RvIG91dDsKQEAgLTU4Myw3ICs1ODIsNyBAQAogCW1lbXNldCgmaHcsIDAsIHNpemVvZihodykpOwogCWF1aWRlX3NldHVwX3BvcnRzKCZodywgYWh3aWYpOwogCWh3LmlycSA9IGFod2lmLT5pcnE7Ci0JaHcuZGV2ID0gZGV2OworCWh3LmRldiA9ICZkZXYtPmRldjsKIAlody5jaGlwc2V0ID0gaWRlX2F1MXh4eDsKIAogCXJldCA9IGlkZV9ob3N0X2FkZCgmYXUxeHh4X3BvcnRfaW5mbywgaHdzLCAmaG9zdCk7CkBAIC01OTIsNyArNTkxLDcgQEAKIAogCWF1aWRlX2h3aWYuaHdpZiA9IGhvc3QtPnBvcnRzWzBdOwogCi0JZGV2X3NldF9kcnZkYXRhKGRldiwgaG9zdCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBob3N0KTsKIAogCXByaW50ayhLRVJOX0lORk8gIkF1MXh4eCBJREUoYnVpbHRpbikgY29uZmlndXJlZCBmb3IgJXNcbiIsIG1vZGUgKTsKIApAQCAtNjAwLDM4ICs1OTksMzkgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGF1X2lkZV9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBhdV9pZGVfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJc3RydWN0IHJlc291cmNlICpyZXM7Ci0Jc3RydWN0IGlkZV9ob3N0ICpob3N0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGlkZV9ob3N0ICpob3N0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAlfYXVpZGVfaHdpZiAqYWh3aWYgPSAmYXVpZGVfaHdpZjsKIAogCWlkZV9ob3N0X3JlbW92ZShob3N0KTsKIAogCWlvdW5tYXAoKHZvaWQgKilhaHdpZi0+cmVnYmFzZSk7CiAKLQlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGF1MTIwMF9pZGVfZHJpdmVyID0gewotCS5uYW1lCQk9ICJhdTEyMDAtaWRlIiwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGF1MTIwMF9pZGVfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCQk9ICJhdTEyMDAtaWRlIiwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCX0sCiAJLnByb2JlIAkJPSBhdV9pZGVfcHJvYmUsCiAJLnJlbW92ZQkJPSBhdV9pZGVfcmVtb3ZlLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgYXVfaWRlX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZhdTEyMDBfaWRlX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmYXUxMjAwX2lkZV9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgYXVfaWRlX2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmYXUxMjAwX2lkZV9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZhdTEyMDBfaWRlX2RyaXZlcik7CiB9CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2NtZDY0eC5jIGIvZHJpdmVycy9pZGUvY21kNjR4LmMKaW5kZXggMmY5Njg4ZC4uYWVlZTAzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvY21kNjR4LmMKKysrIGIvZHJpdmVycy9pZGUvY21kNjR4LmMKQEAgLTMzMyw3ICszMzMsNyBAQAogCXJldHVybiAoZG1hX3N0YXQgJiA3KSAhPSA0OwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IGluaXRfY2hpcHNldF9jbWQ2NHgoc3RydWN0IHBjaV9kZXYgKmRldikKK3N0YXRpYyBpbnQgaW5pdF9jaGlwc2V0X2NtZDY0eChzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCXU4IG1yZG1vZGUgPSAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9jczU1MjAuYyBiL2RyaXZlcnMvaWRlL2NzNTUyMC5jCmluZGV4IGQwMDNiZWMuLjU4ZmI5MGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2NzNTUyMC5jCisrKyBiL2RyaXZlcnMvaWRlL2NzNTUyMC5jCkBAIC0xMzMsNyArMTMzLDggQEAKIAkgKglkbyBhbGwgdGhlIGRldmljZSBzZXR1cCBmb3IgdXMKIAkgKi8KIAotCWlkZV9wY2lfc2V0dXBfcG9ydHMoZGV2LCBkLCAxNCwgJmh3WzBdLCAmaHdzWzBdKTsKKwlpZGVfcGNpX3NldHVwX3BvcnRzKGRldiwgZCwgJmh3WzBdLCAmaHdzWzBdKTsKKwlod1swXS5pcnEgPSAxNDsKIAogCXJldHVybiBpZGVfaG9zdF9hZGQoZCwgaHdzLCBOVUxMKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2NzNTUzMC5jIGIvZHJpdmVycy9pZGUvY3M1NTMwLmMKaW5kZXggZDhlZGU4NS4uOGU4YjM1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvY3M1NTMwLmMKKysrIGIvZHJpdmVycy9pZGUvY3M1NTMwLmMKQEAgLTEzNSw3ICsxMzUsNyBAQAogICoJSW5pdGlhbGl6ZSB0aGUgY3M1NTMwIGJyaWRnZSBmb3IgcmVsaWFibGUgSURFIERNQSBvcGVyYXRpb24uCiAgKi8KIAotc3RhdGljIHVuc2lnbmVkIGludCBpbml0X2NoaXBzZXRfY3M1NTMwKHN0cnVjdCBwY2lfZGV2ICpkZXYpCitzdGF0aWMgaW50IGluaXRfY2hpcHNldF9jczU1MzAoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqbWFzdGVyXzAgPSBOVUxMLCAqY3M1NTMwXzAgPSBOVUxMOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9kZWxraW5fY2IuYyBiL2RyaXZlcnMvaWRlL2RlbGtpbl9jYi5jCmluZGV4IDhmMWIyZDkuLmJhY2IxMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2RlbGtpbl9jYi5jCisrKyBiL2RyaXZlcnMvaWRlL2RlbGtpbl9jYi5jCkBAIC00Niw3ICs0Niw3IEBACiAJLnF1aXJrcHJvYwkJPSBpZGVfdW5kZWNvZGVkX3NsYXZlLAogfTsKIAotc3RhdGljIHVuc2lnbmVkIGludCBkZWxraW5fY2JfaW5pdF9jaGlwc2V0KHN0cnVjdCBwY2lfZGV2ICpkZXYpCitzdGF0aWMgaW50IGRlbGtpbl9jYl9pbml0X2NoaXBzZXQoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAl1bnNpZ25lZCBsb25nIGJhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCAwKTsKIAlpbnQgaTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2hwdDM2Ni5jIGIvZHJpdmVycy9pZGUvaHB0MzY2LmMKaW5kZXggM2ViOWI1Yy4uZDNiM2U4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaHB0MzY2LmMKKysrIGIvZHJpdmVycy9pZGUvaHB0MzY2LmMKQEAgLTk5NSw3ICs5OTUsNyBAQAogCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBtY3JfYWRkciArIDEsIG5ld19tY3IpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IGluaXRfY2hpcHNldF9ocHQzNjYoc3RydWN0IHBjaV9kZXYgKmRldikKK3N0YXRpYyBpbnQgaW5pdF9jaGlwc2V0X2hwdDM2NihzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCXVuc2lnbmVkIGxvbmcgaW9fYmFzZQk9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIDQpOwogCXN0cnVjdCBocHRfaW5mbyAqaW5mbwk9IGhwdDN4eF9nZXRfaW5mbygmZGV2LT5kZXYpOwpAQCAtMTIzNyw3ICsxMjM3LDcgQEAKIAlocHQzeHhfZGlzYWJsZV9mYXN0X2lycShkZXYsIDB4NTApOwogCWhwdDN4eF9kaXNhYmxlX2Zhc3RfaXJxKGRldiwgMHg1NCk7CiAKLQlyZXR1cm4gZGV2LT5pcnE7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB1OCBocHQzeHhfY2FibGVfZGV0ZWN0KGlkZV9od2lmX3QgKmh3aWYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtYWNwaS5jIGIvZHJpdmVycy9pZGUvaWRlLWFjcGkuYwppbmRleCBlYzdkMDdmLi41YjcwNGYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtYWNwaS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1hY3BpLmMKQEAgLTIwLDkgKzIwLDYgQEAKICNpbmNsdWRlIDxhY3BpL2FjcGlfYnVzLmg+CiAKICNkZWZpbmUgUkVHU19QRVJfR1RGCQk3Ci1zdHJ1Y3QgdGFza2ZpbGVfYXJyYXkgewotCXU4CXRmYVtSRUdTX1BFUl9HVEZdOwkvKiByZWdzLiAweDFmMSAtIDB4MWY3ICovCi19OwogCiBzdHJ1Y3QgR1RNX2J1ZmZlciB7CiAJdTMyCVBJT19zcGVlZDA7CkBAIC04OSwxMiArODYsOCBAQAogCXsgfQkvKiB0ZXJtaW5hdGUgbGlzdCAqLwogfTsKIAotc3RhdGljIGludCBpZGVfYWNwaV9ibGFja2xpc3Qodm9pZCkKK2ludCBpZGVfYWNwaV9pbml0KHZvaWQpCiB7Ci0Jc3RhdGljIGludCBkb25lOwotCWlmIChkb25lKQotCQlyZXR1cm4gMDsKLQlkb25lID0gMTsKIAlkbWlfY2hlY2tfc3lzdGVtKGlkZV9hY3BpX2RtaV90YWJsZSk7CiAJcmV0dXJuIDA7CiB9CkBAIC0yMDIsNDAgKzE5NSw2IEBACiB9CiAKIC8qKgotICogaWRlX2FjcGlfZHJpdmVfZ2V0X2hhbmRsZSAtIEdldCBBQ1BJIG9iamVjdCBoYW5kbGUgZm9yIGEgZ2l2ZW4gZHJpdmUKLSAqIEBkcml2ZTogZGV2aWNlIHRvIGxvY2F0ZQotICoKLSAqIFJldHJpZXZlcyB0aGUgb2JqZWN0IGhhbmRsZSBvZiBhIGdpdmVuIGRyaXZlLiBBY2NvcmRpbmcgdG8gdGhlIEFDUEkKLSAqIHNwZWMgdGhlIGRyaXZlIGlzIGEgY2hpbGQgb2YgdGhlIGh3aWYuCi0gKgotICogUmV0dXJucyBoYW5kbGUgb24gc3VjY2VzcywgMCBvbiBlcnJvci4KLSAqLwotc3RhdGljIGFjcGlfaGFuZGxlIGlkZV9hY3BpX2RyaXZlX2dldF9oYW5kbGUoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCWlkZV9od2lmX3QJKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQlpbnQJCSBwb3J0OwotCWFjcGlfaGFuZGxlCSBkcml2ZV9oYW5kbGU7Ci0KLQlpZiAoIWh3aWYtPmFjcGlkYXRhKQotCQlyZXR1cm4gTlVMTDsKLQotCWlmICghaHdpZi0+YWNwaWRhdGEtPm9ial9oYW5kbGUpCi0JCXJldHVybiBOVUxMOwotCi0JcG9ydCA9IGh3aWYtPmNoYW5uZWwgPyBkcml2ZS0+ZG4gLSAyOiBkcml2ZS0+ZG47Ci0KLQlERUJQUklOVCgiRU5URVI6ICVzIGF0IGNoYW5uZWwjOiAlZCBwb3J0IzogJWRcbiIsCi0JCSBkcml2ZS0+bmFtZSwgaHdpZi0+Y2hhbm5lbCwgcG9ydCk7Ci0KLQotCS8qIFRCRDogY291bGQgYWxzbyBjaGVjayBBQ1BJIG9iamVjdCBWQUxJRCBiaXRzICovCi0JZHJpdmVfaGFuZGxlID0gYWNwaV9nZXRfY2hpbGQoaHdpZi0+YWNwaWRhdGEtPm9ial9oYW5kbGUsIHBvcnQpOwotCURFQlBSSU5UKCJkcml2ZSAlcyBoYW5kbGUgMHglcFxuIiwgZHJpdmUtPm5hbWUsIGRyaXZlX2hhbmRsZSk7Ci0KLQlyZXR1cm4gZHJpdmVfaGFuZGxlOwotfQotCi0vKioKICAqIGRvX2RyaXZlX2dldF9HVEYgLSBnZXQgdGhlIGRyaXZlIGJvb3R1cCBkZWZhdWx0IHRhc2tmaWxlIHNldHRpbmdzCiAgKiBAZHJpdmU6IHRoZSBkcml2ZSBmb3Igd2hpY2ggdGhlIHRhc2tmaWxlIHNldHRpbmdzIHNob3VsZCBiZSByZXRyaWV2ZWQKICAqIEBndGZfbGVuZ3RoOiBudW1iZXIgb2YgYnl0ZXMgb2YgX0dURiBkYXRhIHJldHVybmVkIGF0IEBndGZfYWRkcmVzcwpAQCAtMjU3LDQ3ICsyMTYsMTUgQEAKIAlhY3BpX3N0YXR1cwkJCXN0YXR1czsKIAlzdHJ1Y3QgYWNwaV9idWZmZXIJCW91dHB1dDsKIAl1bmlvbiBhY3BpX29iamVjdCAJCSpvdXRfb2JqOwotCWlkZV9od2lmX3QJCQkqaHdpZiA9IGRyaXZlLT5od2lmOwotCXN0cnVjdCBkZXZpY2UJCQkqZGV2ID0gaHdpZi0+Z2VuZGV2LnBhcmVudDsKIAlpbnQJCQkJZXJyID0gLUVOT0RFVjsKLQlpbnQJCQkJcG9ydDsKIAogCSpndGZfbGVuZ3RoID0gMDsKIAkqZ3RmX2FkZHJlc3MgPSAwVUw7CiAJKm9ial9sb2MgPSAwVUw7CiAKLQlpZiAoaWRlX25vYWNwaSkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoIWRldikgewotCQlERUJQUklOVCgibm8gUENJIGRldmljZSBmb3IgJXNcbiIsIGh3aWYtPm5hbWUpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAoIWh3aWYtPmFjcGlkYXRhKSB7Ci0JCURFQlBSSU5UKCJubyBBQ1BJIGRhdGEgZm9yICVzXG4iLCBod2lmLT5uYW1lKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JcG9ydCA9IGh3aWYtPmNoYW5uZWwgPyBkcml2ZS0+ZG4gLSAyOiBkcml2ZS0+ZG47Ci0KLQlERUJQUklOVCgiRU5URVI6ICVzIGF0ICVzLCBwb3J0IzogJWQsIGhhcmRfcG9ydCM6ICVkXG4iLAotCQkgaHdpZi0+bmFtZSwgZGV2X25hbWUoZGV2KSwgcG9ydCwgaHdpZi0+Y2hhbm5lbCk7Ci0KLQlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUFJFU0VOVCkgPT0gMCkgewotCQlERUJQUklOVCgiJXMgZHJpdmUgJWQ6JWQgbm90IHByZXNlbnRcbiIsCi0JCQkgaHdpZi0+bmFtZSwgaHdpZi0+Y2hhbm5lbCwgcG9ydCk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCS8qIEdldCB0aGlzIGRyaXZlJ3MgX0FEUiBpbmZvLiBpZiBub3QgYWxyZWFkeSBrbm93bi4gKi8KIAlpZiAoIWRyaXZlLT5hY3BpZGF0YS0+b2JqX2hhbmRsZSkgewotCQlkcml2ZS0+YWNwaWRhdGEtPm9ial9oYW5kbGUgPSBpZGVfYWNwaV9kcml2ZV9nZXRfaGFuZGxlKGRyaXZlKTsKLQkJaWYgKCFkcml2ZS0+YWNwaWRhdGEtPm9ial9oYW5kbGUpIHsKLQkJCURFQlBSSU5UKCJObyBBQ1BJIG9iamVjdCBmb3VuZCBmb3IgJXNcbiIsCi0JCQkJIGRyaXZlLT5uYW1lKTsKLQkJCWdvdG8gb3V0OwotCQl9CisJCURFQlBSSU5UKCJObyBBQ1BJIG9iamVjdCBmb3VuZCBmb3IgJXNcbiIsIGRyaXZlLT5uYW1lKTsKKwkJZ290byBvdXQ7CiAJfQogCiAJLyogU2V0dGluZyB1cCBvdXRwdXQgYnVmZmVyICovCkBAIC0zNTUsNDMgKzI4Miw2IEBACiB9CiAKIC8qKgotICogdGFza2ZpbGVfbG9hZF9yYXcgLSBzZW5kIHRhc2tmaWxlIHJlZ2lzdGVycyB0byBkcml2ZQotICogQGRyaXZlOiBkcml2ZSB0byB3aGljaCBvdXRwdXQgaXMgc2VudAotICogQGd0ZjogcmF3IEFUQSB0YXNrZmlsZSByZWdpc3RlciBzZXQgKDB4MWYxIC0gMHgxZjcpCi0gKgotICogT3V0cHV0cyBJREUgdGFza2ZpbGUgdG8gdGhlIGRyaXZlLgotICovCi1zdGF0aWMgaW50IHRhc2tmaWxlX2xvYWRfcmF3KGlkZV9kcml2ZV90ICpkcml2ZSwKLQkJCSAgICAgIGNvbnN0IHN0cnVjdCB0YXNrZmlsZV9hcnJheSAqZ3RmKQotewotCWlkZV90YXNrX3QgYXJnczsKLQlpbnQgZXJyID0gMDsKLQotCURFQlBSSU5UKCIoMHgxZjEtMWY3KTogaGV4OiAiCi0JICAgICAgICIlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4XG4iLAotCSAgICAgICBndGYtPnRmYVswXSwgZ3RmLT50ZmFbMV0sIGd0Zi0+dGZhWzJdLAotCSAgICAgICBndGYtPnRmYVszXSwgZ3RmLT50ZmFbNF0sIGd0Zi0+dGZhWzVdLCBndGYtPnRmYVs2XSk7Ci0KLQltZW1zZXQoJmFyZ3MsIDAsIHNpemVvZihpZGVfdGFza190KSk7Ci0KLQkvKiBjb252ZXJ0IGd0ZiB0byBJREUgVGFza2ZpbGUgKi8KLQltZW1jcHkoJmFyZ3MudGZfYXJyYXlbN10sICZndGYtPnRmYSwgNyk7Ci0JYXJncy50Zl9mbGFncyA9IElERV9URkxBR19URiB8IElERV9URkxBR19ERVZJQ0U7Ci0KLQlpZiAoIWlkZV9hY3BpZ3RmKSB7Ci0JCURFQlBSSU5UKCJfR1RGIGV4ZWN1dGlvbiBkaXNhYmxlZFxuIik7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0JZXJyID0gaWRlX25vX2RhdGFfdGFza2ZpbGUoZHJpdmUsICZhcmdzKTsKLQlpZiAoZXJyKQotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpZGVfbm9fZGF0YV90YXNrZmlsZSBmYWlsZWQ6ICV1XG4iLAotCQkgICAgICAgX19mdW5jX18sIGVycik7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi0vKioKICAqIGRvX2RyaXZlX3NldF90YXNrZmlsZXMgLSB3cml0ZSB0aGUgZHJpdmUgdGFza2ZpbGUgc2V0dGluZ3MgZnJvbSBfR1RGCiAgKiBAZHJpdmU6IHRoZSBkcml2ZSB0byB3aGljaCB0aGUgdGFza2ZpbGUgY29tbWFuZCBzaG91bGQgYmUgc2VudAogICogQGd0Zl9sZW5ndGg6IHRvdGFsIG51bWJlciBvZiBieXRlcyBvZiBfR1RGIHRhc2tmaWxlcwpAQCAtNDA0LDQzICsyOTQsNDEgQEAKIAkJCQkgIHVuc2lnbmVkIGludCBndGZfbGVuZ3RoLAogCQkJCSAgdW5zaWduZWQgbG9uZyBndGZfYWRkcmVzcykKIHsKLQlpbnQJCQlyYyA9IC1FTk9ERVYsIGVycjsKKwlpbnQJCQlyYyA9IDAsIGVycjsKIAlpbnQJCQlndGZfY291bnQgPSBndGZfbGVuZ3RoIC8gUkVHU19QRVJfR1RGOwogCWludAkJCWl4OwotCXN0cnVjdCB0YXNrZmlsZV9hcnJheQkqZ3RmOwotCi0JaWYgKGlkZV9ub2FjcGkpCi0JCXJldHVybiAwOwotCi0JREVCUFJJTlQoIkVOVEVSOiAlcywgaGFyZF9wb3J0IzogJWRcbiIsIGRyaXZlLT5uYW1lLCBkcml2ZS0+ZG4pOwotCi0JaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1BSRVNFTlQpID09IDApCi0JCWdvdG8gb3V0OwotCi0JaWYgKCFndGZfY291bnQpCQkvKiBzaG91bGRuJ3QgYmUgaGVyZSAqLwotCQlnb3RvIG91dDsKIAogCURFQlBSSU5UKCJ0b3RhbCBHVEYgYnl0ZXM9JXUgKDB4JXgpLCBndGZfY291bnQ9JWQsIGFkZHI9MHglbHhcbiIsCiAJCSBndGZfbGVuZ3RoLCBndGZfbGVuZ3RoLCBndGZfY291bnQsIGd0Zl9hZGRyZXNzKTsKIAotCWlmIChndGZfbGVuZ3RoICUgUkVHU19QRVJfR1RGKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IHVuZXhwZWN0ZWQgR1RGIGxlbmd0aCAoJWQpXG4iLAotCQkgICAgICAgX19mdW5jX18sIGd0Zl9sZW5ndGgpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlyYyA9IDA7CisJLyogc2VuZCBhbGwgdGFza2ZpbGUgcmVnaXN0ZXJzICgweDFmMS0weDFmNykgKmluKnRoYXQqb3JkZXIqICovCiAJZm9yIChpeCA9IDA7IGl4IDwgZ3RmX2NvdW50OyBpeCsrKSB7Ci0JCWd0ZiA9IChzdHJ1Y3QgdGFza2ZpbGVfYXJyYXkgKikKLQkJCShndGZfYWRkcmVzcyArIGl4ICogUkVHU19QRVJfR1RGKTsKKwkJdTggKmd0ZiA9ICh1OCAqKShndGZfYWRkcmVzcyArIGl4ICogUkVHU19QRVJfR1RGKTsKKwkJaWRlX3Rhc2tfdCB0YXNrOwogCi0JCS8qIHNlbmQgYWxsIFRhc2tGaWxlIHJlZ2lzdGVycyAoMHgxZjEtMHgxZjcpICppbip0aGF0Km9yZGVyKiAqLwotCQllcnIgPSB0YXNrZmlsZV9sb2FkX3Jhdyhkcml2ZSwgZ3RmKTsKLQkJaWYgKGVycikKKwkJREVCUFJJTlQoIigweDFmMS0xZjcpOiAiCisJCQkgImhleDogJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeFxuIiwKKwkJCSBndGZbMF0sIGd0ZlsxXSwgZ3RmWzJdLAorCQkJIGd0ZlszXSwgZ3RmWzRdLCBndGZbNV0sIGd0Zls2XSk7CisKKwkJaWYgKCFpZGVfYWNwaWd0ZikgeworCQkJREVCUFJJTlQoIl9HVEYgZXhlY3V0aW9uIGRpc2FibGVkXG4iKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogY29udmVydCBHVEYgdG8gdGFza2ZpbGUgKi8KKwkJbWVtc2V0KCZ0YXNrLCAwLCBzaXplb2YoaWRlX3Rhc2tfdCkpOworCQltZW1jcHkoJnRhc2sudGZfYXJyYXlbN10sIGd0ZiwgUkVHU19QRVJfR1RGKTsKKwkJdGFzay50Zl9mbGFncyA9IElERV9URkxBR19URiB8IElERV9URkxBR19ERVZJQ0U7CisKKwkJZXJyID0gaWRlX25vX2RhdGFfdGFza2ZpbGUoZHJpdmUsICZ0YXNrKTsKKwkJaWYgKGVycikgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogaWRlX25vX2RhdGFfdGFza2ZpbGUgZmFpbGVkOiAldVxuIiwKKwkJCQkJX19mdW5jX18sIGVycik7CiAJCQlyYyA9IGVycjsKKwkJfQogCX0KIAotb3V0OgogCXJldHVybiByYzsKIH0KIApAQCAtNjQ3LDI2ICs1MzUsMjMgQEAKIAkJREVCUFJJTlQoIm5vIEFDUEkgZGF0YSBmb3IgJXNcbiIsIGh3aWYtPm5hbWUpOwogCQlyZXR1cm47CiAJfQorCiAJLyogY2hhbm5lbCBmaXJzdCBhbmQgdGhlbiBkcml2ZXMgZm9yIHBvd2VyIG9uIGFuZCB2ZXJzZSB2ZXJzYSBmb3IgcG93ZXIgb2ZmICovCiAJaWYgKG9uKQogCQlhY3BpX2J1c19zZXRfcG93ZXIoaHdpZi0+YWNwaWRhdGEtPm9ial9oYW5kbGUsIEFDUElfU1RBVEVfRDApOwogCi0JaWRlX3BvcnRfZm9yX2VhY2hfZGV2KGksIGRyaXZlLCBod2lmKSB7Ci0JCWlmICghZHJpdmUtPmFjcGlkYXRhLT5vYmpfaGFuZGxlKQotCQkJZHJpdmUtPmFjcGlkYXRhLT5vYmpfaGFuZGxlID0gaWRlX2FjcGlfZHJpdmVfZ2V0X2hhbmRsZShkcml2ZSk7Ci0KLQkJaWYgKGRyaXZlLT5hY3BpZGF0YS0+b2JqX2hhbmRsZSAmJgotCQkgICAgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUFJFU0VOVCkpIHsKKwlpZGVfcG9ydF9mb3JfZWFjaF9wcmVzZW50X2RldihpLCBkcml2ZSwgaHdpZikgeworCQlpZiAoZHJpdmUtPmFjcGlkYXRhLT5vYmpfaGFuZGxlKQogCQkJYWNwaV9idXNfc2V0X3Bvd2VyKGRyaXZlLT5hY3BpZGF0YS0+b2JqX2hhbmRsZSwKLQkJCQlvbj8gQUNQSV9TVEFURV9EMDogQUNQSV9TVEFURV9EMyk7Ci0JCX0KKwkJCQkJICAgb24gPyBBQ1BJX1NUQVRFX0QwIDogQUNQSV9TVEFURV9EMyk7CiAJfQorCiAJaWYgKCFvbikKIAkJYWNwaV9idXNfc2V0X3Bvd2VyKGh3aWYtPmFjcGlkYXRhLT5vYmpfaGFuZGxlLCBBQ1BJX1NUQVRFX0QzKTsKIH0KIAogLyoqCi0gKiBpZGVfYWNwaV9pbml0IC0gaW5pdGlhbGl6ZSB0aGUgQUNQSSBsaW5rIGZvciBhbiBJREUgaW50ZXJmYWNlCisgKiBpZGVfYWNwaV9pbml0X3BvcnQgLSBpbml0aWFsaXplIHRoZSBBQ1BJIGxpbmsgZm9yIGFuIElERSBpbnRlcmZhY2UKICAqIEBod2lmOiB0YXJnZXQgSURFIGludGVyZmFjZSAoY2hhbm5lbCkKICAqCiAgKiBUaGUgQUNQSSBzcGVjIGlzIG5vdCBxdWl0ZSBjbGVhciB3aGVuIHRoZSBkcml2ZSBpZGVudGlmeSBidWZmZXIKQEAgLTY3NiwxMCArNTYxLDggQEAKICAqIFNvIHdlIGdldCB0aGUgaW5mb3JtYXRpb24gZHVyaW5nIHN0YXJ0dXA7IGJ1dCB0aGlzIG1lYW5zIHRoYXQKICAqIGFueSBjaGFuZ2VzIGR1cmluZyBydW4tdGltZSB3aWxsIGJlIGxvc3QgYWZ0ZXIgcmVzdW1lLgogICovCi12b2lkIGlkZV9hY3BpX2luaXQoaWRlX2h3aWZfdCAqaHdpZikKK3ZvaWQgaWRlX2FjcGlfaW5pdF9wb3J0KGlkZV9od2lmX3QgKmh3aWYpCiB7Ci0JaWRlX2FjcGlfYmxhY2tsaXN0KCk7Ci0KIAlod2lmLT5hY3BpZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpZGVfYWNwaV9od2lmX2xpbmspLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWh3aWYtPmFjcGlkYXRhKQogCQlyZXR1cm47CkBAIC03MDgsMTUgKzU5MSwyNCBAQAogCWh3aWYtPmRldmljZXNbMF0tPmFjcGlkYXRhID0gJmh3aWYtPmFjcGlkYXRhLT5tYXN0ZXI7CiAJaHdpZi0+ZGV2aWNlc1sxXS0+YWNwaWRhdGEgPSAmaHdpZi0+YWNwaWRhdGEtPnNsYXZlOwogCi0JLyoKLQkgKiBTZW5kIElERU5USUZZIGZvciBlYWNoIGRyaXZlCi0JICovCi0JaWRlX3BvcnRfZm9yX2VhY2hfZGV2KGksIGRyaXZlLCBod2lmKSB7Ci0JCW1lbXNldChkcml2ZS0+YWNwaWRhdGEsIDAsIHNpemVvZigqZHJpdmUtPmFjcGlkYXRhKSk7CisJLyogZ2V0IF9BRFIgaW5mbyBmb3IgZWFjaCBkZXZpY2UgKi8KKwlpZGVfcG9ydF9mb3JfZWFjaF9wcmVzZW50X2RldihpLCBkcml2ZSwgaHdpZikgeworCQlhY3BpX2hhbmRsZSBkZXZfaGFuZGxlOwogCi0JCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19QUkVTRU5UKSA9PSAwKQotCQkJY29udGludWU7CisJCURFQlBSSU5UKCJFTlRFUjogJXMgYXQgY2hhbm5lbCM6ICVkIHBvcnQjOiAlZFxuIiwKKwkJCSBkcml2ZS0+bmFtZSwgaHdpZi0+Y2hhbm5lbCwgZHJpdmUtPmRuICYgMSk7CiAKKwkJLyogVEJEOiBjb3VsZCBhbHNvIGNoZWNrIEFDUEkgb2JqZWN0IFZBTElEIGJpdHMgKi8KKwkJZGV2X2hhbmRsZSA9IGFjcGlfZ2V0X2NoaWxkKGh3aWYtPmFjcGlkYXRhLT5vYmpfaGFuZGxlLAorCQkJCQkgICAgZHJpdmUtPmRuICYgMSk7CisKKwkJREVCUFJJTlQoImRyaXZlICVzIGhhbmRsZSAweCVwXG4iLCBkcml2ZS0+bmFtZSwgZGV2X2hhbmRsZSk7CisKKwkJZHJpdmUtPmFjcGlkYXRhLT5vYmpfaGFuZGxlID0gZGV2X2hhbmRsZTsKKwl9CisKKwkvKiBzZW5kIElERU5USUZZIGZvciBlYWNoIGRldmljZSAqLworCWlkZV9wb3J0X2Zvcl9lYWNoX3ByZXNlbnRfZGV2KGksIGRyaXZlLCBod2lmKSB7CiAJCWVyciA9IHRhc2tmaWxlX2xpYl9nZXRfaWRlbnRpZnkoZHJpdmUsIGRyaXZlLT5hY3BpZGF0YS0+aWRidWZmKTsKIAkJaWYgKGVycikKIAkJCURFQlBSSU5UKCJpZGVudGlmeSBkZXZpY2UgJXMgZmFpbGVkICglZClcbiIsCkBAIC03MzYsOSArNjI4LDcgQEAKIAlpZGVfYWNwaV9nZXRfdGltaW5nKGh3aWYpOwogCWlkZV9hY3BpX3B1c2hfdGltaW5nKGh3aWYpOwogCi0JaWRlX3BvcnRfZm9yX2VhY2hfZGV2KGksIGRyaXZlLCBod2lmKSB7Ci0JCWlmIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1BSRVNFTlQpCi0JCQkvKiBFeGVjdXRlIEFDUEkgc3RhcnR1cCBjb2RlICovCi0JCQlpZGVfYWNwaV9leGVjX3Rmcyhkcml2ZSk7CisJaWRlX3BvcnRfZm9yX2VhY2hfcHJlc2VudF9kZXYoaSwgZHJpdmUsIGh3aWYpIHsKKwkJaWRlX2FjcGlfZXhlY190ZnMoZHJpdmUpOwogCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1hdGFwaS5jIGIvZHJpdmVycy9pZGUvaWRlLWF0YXBpLmMKaW5kZXggZTlkMDQyZGIuLjZhZGM1YjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1hdGFwaS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1hdGFwaS5jCkBAIC0xNDksNyArMTQ5LDEwIEBACiAJbWVtY3B5KHJxLT5jbWQsIHBjLT5jLCAxMik7CiAJaWYgKGRyaXZlLT5tZWRpYSA9PSBpZGVfdGFwZSkKIAkJcnEtPmNtZFsxM10gPSBSRVFfSURFVEFQRV9QQzE7Ci0JaWRlX2RvX2RyaXZlX2NtZChkcml2ZSwgcnEpOworCisJZHJpdmUtPmh3aWYtPnJxID0gTlVMTDsKKworCWVsdl9hZGRfcmVxdWVzdChkcml2ZS0+cXVldWUsIHJxLCBFTEVWQVRPUl9JTlNFUlRfRlJPTlQsIDApOwogfQogCiAvKgpAQCAtMjk3LDYgKzMwMCwyMSBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2NkX2dldF94ZmVybGVuKTsKIAordm9pZCBpZGVfcmVhZF9iY291bnRfYW5kX2lyZWFzb24oaWRlX2RyaXZlX3QgKmRyaXZlLCB1MTYgKmJjb3VudCwgdTggKmlyZWFzb24pCit7CisJaWRlX3Rhc2tfdCB0YXNrOworCisJbWVtc2V0KCZ0YXNrLCAwLCBzaXplb2YodGFzaykpOworCXRhc2sudGZfZmxhZ3MgPSBJREVfVEZMQUdfSU5fTEJBSCB8IElERV9URkxBR19JTl9MQkFNIHwKKwkJCUlERV9URkxBR19JTl9OU0VDVDsKKworCWRyaXZlLT5od2lmLT50cF9vcHMtPnRmX3JlYWQoZHJpdmUsICZ0YXNrKTsKKworCSpiY291bnQgPSAodGFzay50Zi5sYmFoIDw8IDgpIHwgdGFzay50Zi5sYmFtOworCSppcmVhc29uID0gdGFzay50Zi5uc2VjdCAmIDM7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpZGVfcmVhZF9iY291bnRfYW5kX2lyZWFzb24pOworCiAvKgogICogVGhpcyBpcyB0aGUgdXN1YWwgaW50ZXJydXB0IGhhbmRsZXIgd2hpY2ggd2lsbCBiZSBjYWxsZWQgZHVyaW5nIGEgcGFja2V0CiAgKiBjb21tYW5kLiAgV2Ugd2lsbCB0cmFuc2ZlciBzb21lIG9mIHRoZSBkYXRhIChhcyByZXF1ZXN0ZWQgYnkgdGhlIGRyaXZlKQpAQCAtNDU2LDYgKzQ3NCwyNSBAQAogCXJldHVybiBpZGVfc3RhcnRlZDsKIH0KIAorc3RhdGljIHZvaWQgaWRlX3BrdGNtZF90Zl9sb2FkKGlkZV9kcml2ZV90ICpkcml2ZSwgdTMyIHRmX2ZsYWdzLCB1MTYgYmNvdW50KQoreworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwlpZGVfdGFza190IHRhc2s7CisJdTggZG1hID0gZHJpdmUtPmRtYTsKKworCW1lbXNldCgmdGFzaywgMCwgc2l6ZW9mKHRhc2spKTsKKwl0YXNrLnRmX2ZsYWdzID0gSURFX1RGTEFHX09VVF9MQkFIIHwgSURFX1RGTEFHX09VVF9MQkFNIHwKKwkJCUlERV9URkxBR19PVVRfRkVBVFVSRSB8IHRmX2ZsYWdzOworCXRhc2sudGYuZmVhdHVyZSA9IGRtYTsJCS8qIFVzZSBQSU8vRE1BICovCisJdGFzay50Zi5sYmFtICAgID0gYmNvdW50ICYgMHhmZjsKKwl0YXNrLnRmLmxiYWggICAgPSAoYmNvdW50ID4+IDgpICYgMHhmZjsKKworCWlkZV90Zl9kdW1wKGRyaXZlLT5uYW1lLCAmdGFzay50Zik7CisJaHdpZi0+dHBfb3BzLT5zZXRfaXJxKGh3aWYsIDEpOworCVNFTEVDVF9NQVNLKGRyaXZlLCAwKTsKKwlod2lmLT50cF9vcHMtPnRmX2xvYWQoZHJpdmUsICZ0YXNrKTsKK30KKwogc3RhdGljIHU4IGlkZV9yZWFkX2lyZWFzb24oaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCWlkZV90YXNrX3QgdGFzazsKQEAgLTYyOSw3ICs2NjYsNyBAQAogCQkJCQkJICAgICAgIDogV0FJVF9UQVBFX0NNRDsKIAl9CiAKLQlpZGVfcGt0Y21kX3RmX2xvYWQoZHJpdmUsIHRmX2ZsYWdzLCBiY291bnQsIGRyaXZlLT5kbWEpOworCWlkZV9wa3RjbWRfdGZfbG9hZChkcml2ZSwgdGZfZmxhZ3MsIGJjb3VudCk7CiAKIAkvKiBJc3N1ZSB0aGUgcGFja2V0IGNvbW1hbmQgKi8KIAlpZiAoZHJpdmUtPmF0YXBpX2ZsYWdzICYgSURFX0FGTEFHX0RSUV9JTlRFUlJVUFQpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1jZC5jIGIvZHJpdmVycy9pZGUvaWRlLWNkLmMKaW5kZXggZGRmYmVhNC4uMjE3N2NkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWNkLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWNkLmMKQEAgLTI0Miw3ICsyNDIsOSBAQAogCQlpZGVfZGVidWdfbG9nKElERV9EQkdfU0VOU0UsICJmYWlsZWRfY21kOiAweCV4XG4iLAogCQkJICAgICAgZmFpbGVkX2NvbW1hbmQtPmNtZFswXSk7CiAKLQlpZGVfZG9fZHJpdmVfY21kKGRyaXZlLCBycSk7CisJZHJpdmUtPmh3aWYtPnJxID0gTlVMTDsKKworCWVsdl9hZGRfcmVxdWVzdChkcml2ZS0+cXVldWUsIHJxLCBFTEVWQVRPUl9JTlNFUlRfRlJPTlQsIDApOwogfQogCiBzdGF0aWMgdm9pZCBjZHJvbV9lbmRfcmVxdWVzdChpZGVfZHJpdmVfdCAqZHJpdmUsIGludCB1cHRvZGF0ZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1kZXZzZXRzLmMgYi9kcml2ZXJzL2lkZS9pZGUtZGV2c2V0cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjMzk1MzQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2lkZS9pZGUtZGV2c2V0cy5jCkBAIC0wLDAgKzEsMTkwIEBACisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pZGUuaD4KKworREVGSU5FX01VVEVYKGlkZV9zZXR0aW5nX210eCk7CisKK2lkZV9kZXZzZXRfZ2V0KGlvXzMyYml0LCBpb18zMmJpdCk7CisKK3N0YXRpYyBpbnQgc2V0X2lvXzMyYml0KGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGFyZykKK3sKKwlpZiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19OT19JT18zMkJJVCkKKwkJcmV0dXJuIC1FUEVSTTsKKworCWlmIChhcmcgPCAwIHx8IGFyZyA+IDEgKyAoU1VQUE9SVF9WTEJfU1lOQyA8PCAxKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkcml2ZS0+aW9fMzJiaXQgPSBhcmc7CisKKwlyZXR1cm4gMDsKK30KKworaWRlX2RldnNldF9nZXRfZmxhZyhrc2V0dGluZ3MsIElERV9ERkxBR19LRUVQX1NFVFRJTkdTKTsKKworc3RhdGljIGludCBzZXRfa3NldHRpbmdzKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGFyZykKK3sKKwlpZiAoYXJnIDwgMCB8fCBhcmcgPiAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChhcmcpCisJCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX0tFRVBfU0VUVElOR1M7CisJZWxzZQorCQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfS0VFUF9TRVRUSU5HUzsKKworCXJldHVybiAwOworfQorCitpZGVfZGV2c2V0X2dldF9mbGFnKHVzaW5nX2RtYSwgSURFX0RGTEFHX1VTSU5HX0RNQSk7CisKK3N0YXRpYyBpbnQgc2V0X3VzaW5nX2RtYShpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBhcmcpCit7CisjaWZkZWYgQ09ORklHX0JMS19ERVZfSURFRE1BCisJaW50IGVyciA9IC1FUEVSTTsKKworCWlmIChhcmcgPCAwIHx8IGFyZyA+IDEpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGF0YV9pZF9oYXNfZG1hKGRyaXZlLT5pZCkgPT0gMCkKKwkJZ290byBvdXQ7CisKKwlpZiAoZHJpdmUtPmh3aWYtPmRtYV9vcHMgPT0gTlVMTCkKKwkJZ290byBvdXQ7CisKKwllcnIgPSAwOworCisJaWYgKGFyZykgeworCQlpZiAoaWRlX3NldF9kbWEoZHJpdmUpKQorCQkJZXJyID0gLUVJTzsKKwl9IGVsc2UKKwkJaWRlX2RtYV9vZmYoZHJpdmUpOworCitvdXQ6CisJcmV0dXJuIGVycjsKKyNlbHNlCisJaWYgKGFyZyA8IDAgfHwgYXJnID4gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gLUVQRVJNOworI2VuZGlmCit9CisKKy8qCisgKiBoYW5kbGUgSERJT19TRVRfUElPX01PREUgaW9jdGwgYWJ1c2VycyBoZXJlLCBldmVudHVhbGx5IGl0IHdpbGwgZ28gYXdheQorICovCitzdGF0aWMgaW50IHNldF9waW9fbW9kZV9hYnVzZShpZGVfaHdpZl90ICpod2lmLCB1OCByZXFfcGlvKQoreworCXN3aXRjaCAocmVxX3BpbykgeworCWNhc2UgMjAyOgorCWNhc2UgMjAxOgorCWNhc2UgMjAwOgorCWNhc2UgMTAyOgorCWNhc2UgMTAxOgorCWNhc2UgMTAwOgorCQlyZXR1cm4gKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfQUJVU0VfRE1BX01PREVTKSA/IDEgOiAwOworCWNhc2UgOToKKwljYXNlIDg6CisJCXJldHVybiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19BQlVTRV9QUkVGRVRDSCkgPyAxIDogMDsKKwljYXNlIDc6CisJY2FzZSA2OgorCQlyZXR1cm4gKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfQUJVU0VfRkFTVF9ERVZTRUwpID8gMSA6IDA7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorfQorCitzdGF0aWMgaW50IHNldF9waW9fbW9kZShpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBhcmcpCit7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCWNvbnN0IHN0cnVjdCBpZGVfcG9ydF9vcHMgKnBvcnRfb3BzID0gaHdpZi0+cG9ydF9vcHM7CisKKwlpZiAoYXJnIDwgMCB8fCBhcmcgPiAyNTUpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHBvcnRfb3BzID09IE5VTEwgfHwgcG9ydF9vcHMtPnNldF9waW9fbW9kZSA9PSBOVUxMIHx8CisJICAgIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX05PX1NFVF9NT0RFKSkKKwkJcmV0dXJuIC1FTk9TWVM7CisKKwlpZiAoc2V0X3Bpb19tb2RlX2FidXNlKGRyaXZlLT5od2lmLCBhcmcpKSB7CisJCWlmIChhcmcgPT0gOCB8fCBhcmcgPT0gOSkgeworCQkJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCQkJLyogdGFrZSBsb2NrIGZvciBJREVfREZMQUdfW05PX11VTk1BU0svW05PX11JT18zMkJJVCAqLworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmh3aWYtPmxvY2ssIGZsYWdzKTsKKwkJCXBvcnRfb3BzLT5zZXRfcGlvX21vZGUoZHJpdmUsIGFyZyk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZod2lmLT5sb2NrLCBmbGFncyk7CisJCX0gZWxzZQorCQkJcG9ydF9vcHMtPnNldF9waW9fbW9kZShkcml2ZSwgYXJnKTsKKwl9IGVsc2UgeworCQlpbnQga2VlcF9kbWEgPSAhIShkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1VTSU5HX0RNQSk7CisKKwkJaWRlX3NldF9waW8oZHJpdmUsIGFyZyk7CisKKwkJaWYgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfU0VUX1BJT19NT0RFX0tFRVBfRE1BKSB7CisJCQlpZiAoa2VlcF9kbWEpCisJCQkJaWRlX2RtYV9vbihkcml2ZSk7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworaWRlX2RldnNldF9nZXRfZmxhZyh1bm1hc2tpcnEsIElERV9ERkxBR19VTk1BU0spOworCitzdGF0aWMgaW50IHNldF91bm1hc2tpcnEoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgYXJnKQoreworCWlmIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX05PX1VOTUFTSykKKwkJcmV0dXJuIC1FUEVSTTsKKworCWlmIChhcmcgPCAwIHx8IGFyZyA+IDEpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGFyZykKKwkJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfVU5NQVNLOworCWVsc2UKKwkJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX1VOTUFTSzsKKworCXJldHVybiAwOworfQorCitpZGVfZXh0X2RldnNldF9yd19zeW5jKGlvXzMyYml0LCBpb18zMmJpdCk7CitpZGVfZXh0X2RldnNldF9yd19zeW5jKGtlZXBzZXR0aW5ncywga3NldHRpbmdzKTsKK2lkZV9leHRfZGV2c2V0X3J3X3N5bmModW5tYXNraXJxLCB1bm1hc2tpcnEpOworaWRlX2V4dF9kZXZzZXRfcndfc3luYyh1c2luZ19kbWEsIHVzaW5nX2RtYSk7CitfX0lERV9ERVZTRVQocGlvX21vZGUsIERTX1NZTkMsIE5VTEwsIHNldF9waW9fbW9kZSk7CisKK2ludCBpZGVfZGV2c2V0X2V4ZWN1dGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCBzdHJ1Y3QgaWRlX2RldnNldCAqc2V0dGluZywKKwkJICAgICAgIGludCBhcmcpCit7CisJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBkcml2ZS0+cXVldWU7CisJc3RydWN0IHJlcXVlc3QgKnJxOworCWludCByZXQgPSAwOworCisJaWYgKCEoc2V0dGluZy0+ZmxhZ3MgJiBEU19TWU5DKSkKKwkJcmV0dXJuIHNldHRpbmctPnNldChkcml2ZSwgYXJnKTsKKworCXJxID0gYmxrX2dldF9yZXF1ZXN0KHEsIFJFQUQsIF9fR0ZQX1dBSVQpOworCXJxLT5jbWRfdHlwZSA9IFJFUV9UWVBFX1NQRUNJQUw7CisJcnEtPmNtZF9sZW4gPSA1OworCXJxLT5jbWRbMF0gPSBSRVFfREVWU0VUX0VYRUM7CisJKihpbnQgKikmcnEtPmNtZFsxXSA9IGFyZzsKKwlycS0+c3BlY2lhbCA9IHNldHRpbmctPnNldDsKKworCWlmIChibGtfZXhlY3V0ZV9ycShxLCBOVUxMLCBycSwgMCkpCisJCXJldCA9IHJxLT5lcnJvcnM7CisJYmxrX3B1dF9yZXF1ZXN0KHJxKTsKKworCXJldHVybiByZXQ7Cit9CisKK2lkZV9zdGFydHN0b3BfdCBpZGVfZG9fZGV2c2V0KGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxKQoreworCWludCBlcnIsICgqc2V0ZnVuYykoaWRlX2RyaXZlX3QgKiwgaW50KSA9IHJxLT5zcGVjaWFsOworCisJZXJyID0gc2V0ZnVuYyhkcml2ZSwgKihpbnQgKikmcnEtPmNtZFsxXSk7CisJaWYgKGVycikKKwkJcnEtPmVycm9ycyA9IGVycjsKKwllbHNlCisJCWVyciA9IDE7CisJaWRlX2VuZF9yZXF1ZXN0KGRyaXZlLCBlcnIsIDApOworCXJldHVybiBpZGVfc3RvcHBlZDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1kbWEuYyBiL2RyaXZlcnMvaWRlL2lkZS1kbWEuYwppbmRleCAwNTljOTBiLi5hODc4ZjQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtZG1hLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWRtYS5jCkBAIC00NzAsNiArNDcwLDYzIEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpZGVfZG1hX3RpbWVvdXQpOwogCisvKgorICogdW4tYnVzeSB0aGUgcG9ydCBldGMsIGFuZCBjbGVhciBhbnkgcGVuZGluZyBETUEgc3RhdHVzLiB3ZSB3YW50IHRvCisgKiByZXRyeSB0aGUgY3VycmVudCByZXF1ZXN0IGluIHBpbyBtb2RlIGluc3RlYWQgb2Ygcmlza2luZyB0b3NzaW5nIGl0CisgKiBhbGwgYXdheQorICovCitpZGVfc3RhcnRzdG9wX3QgaWRlX2RtYV90aW1lb3V0X3JldHJ5KGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGVycm9yKQoreworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwlzdHJ1Y3QgcmVxdWVzdCAqcnE7CisJaWRlX3N0YXJ0c3RvcF90IHJldCA9IGlkZV9zdG9wcGVkOworCisJLyoKKwkgKiBlbmQgY3VycmVudCBkbWEgdHJhbnNhY3Rpb24KKwkgKi8KKworCWlmIChlcnJvciA8IDApIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IERNQSB0aW1lb3V0IGVycm9yXG4iLCBkcml2ZS0+bmFtZSk7CisJCSh2b2lkKWh3aWYtPmRtYV9vcHMtPmRtYV9lbmQoZHJpdmUpOworCQlyZXQgPSBpZGVfZXJyb3IoZHJpdmUsICJkbWEgdGltZW91dCBlcnJvciIsCisJCQkJaHdpZi0+dHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKSk7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IERNQSB0aW1lb3V0IHJldHJ5XG4iLCBkcml2ZS0+bmFtZSk7CisJCWh3aWYtPmRtYV9vcHMtPmRtYV90aW1lb3V0KGRyaXZlKTsKKwl9CisKKwkvKgorCSAqIGRpc2FibGUgZG1hIGZvciBub3csIGJ1dCByZW1lbWJlciB0aGF0IHdlIGRpZCBzbyBiZWNhdXNlIG9mCisJICogYSB0aW1lb3V0IC0tIHdlJ2xsIHJlZW5hYmxlIGFmdGVyIHdlIGZpbmlzaCB0aGlzIG5leHQgcmVxdWVzdAorCSAqIChvciByYXRoZXIgdGhlIGZpcnN0IGNodW5rIG9mIGl0KSBpbiBwaW8uCisJICovCisJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfRE1BX1BJT19SRVRSWTsKKwlkcml2ZS0+cmV0cnlfcGlvKys7CisJaWRlX2RtYV9vZmZfcXVpZXRseShkcml2ZSk7CisKKwkvKgorCSAqIHVuLWJ1c3kgZHJpdmUgZXRjIGFuZCBtYWtlIHN1cmUgcmVxdWVzdCBpcyBzYW5lCisJICovCisKKwlycSA9IGh3aWYtPnJxOworCWlmICghcnEpCisJCWdvdG8gb3V0OworCisJaHdpZi0+cnEgPSBOVUxMOworCisJcnEtPmVycm9ycyA9IDA7CisKKwlpZiAoIXJxLT5iaW8pCisJCWdvdG8gb3V0OworCisJcnEtPnNlY3RvciA9IHJxLT5iaW8tPmJpX3NlY3RvcjsKKwlycS0+Y3VycmVudF9ucl9zZWN0b3JzID0gYmlvX2lvdmVjKHJxLT5iaW8pLT5idl9sZW4gPj4gOTsKKwlycS0+aGFyZF9jdXJfc2VjdG9ycyA9IHJxLT5jdXJyZW50X25yX3NlY3RvcnM7CisJcnEtPmJ1ZmZlciA9IGJpb19kYXRhKHJxLT5iaW8pOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKIHZvaWQgaWRlX3JlbGVhc2VfZG1hX2VuZ2luZShpZGVfaHdpZl90ICpod2lmKQogewogCWlmIChod2lmLT5kbWF0YWJsZV9jcHUpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1laC5jIGIvZHJpdmVycy9pZGUvaWRlLWVoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTIzMWI1ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1laC5jCkBAIC0wLDAgKzEsNDI4IEBACisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pZGUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCitzdGF0aWMgaWRlX3N0YXJ0c3RvcF90IGlkZV9hdGFfZXJyb3IoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsCisJCQkJICAgICB1OCBzdGF0LCB1OCBlcnIpCit7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCisJaWYgKChzdGF0ICYgQVRBX0JVU1kpIHx8CisJICAgICgoc3RhdCAmIEFUQV9ERikgJiYgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfTk9XRVJSKSA9PSAwKSkgeworCQkvKiBvdGhlciBiaXRzIGFyZSB1c2VsZXNzIHdoZW4gQlVTWSAqLworCQlycS0+ZXJyb3JzIHw9IEVSUk9SX1JFU0VUOworCX0gZWxzZSBpZiAoc3RhdCAmIEFUQV9FUlIpIHsKKwkJLyogZXJyIGhhcyBkaWZmZXJlbnQgbWVhbmluZyBvbiBjZHJvbSBhbmQgdGFwZSAqLworCQlpZiAoZXJyID09IEFUQV9BQk9SVEVEKSB7CisJCQlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfTEJBKSAmJgorCQkJICAgIC8qIHNvbWUgbmV3ZXIgZHJpdmVzIGRvbid0IHN1cHBvcnQgQVRBX0NNRF9JTklUX0RFVl9QQVJBTVMgKi8KKwkJCSAgICBod2lmLT50cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpID09IEFUQV9DTURfSU5JVF9ERVZfUEFSQU1TKQorCQkJCXJldHVybiBpZGVfc3RvcHBlZDsKKwkJfSBlbHNlIGlmICgoZXJyICYgQkFEX0NSQykgPT0gQkFEX0NSQykgeworCQkJLyogVURNQSBjcmMgZXJyb3IsIGp1c3QgcmV0cnkgdGhlIG9wZXJhdGlvbiAqLworCQkJZHJpdmUtPmNyY19jb3VudCsrOworCQl9IGVsc2UgaWYgKGVyciAmIChBVEFfQkJLIHwgQVRBX1VOQykpIHsKKwkJCS8qIHJldHJpZXMgd29uJ3QgaGVscCB0aGVzZSAqLworCQkJcnEtPmVycm9ycyA9IEVSUk9SX01BWDsKKwkJfSBlbHNlIGlmIChlcnIgJiBBVEFfVFJLME5GKSB7CisJCQkvKiBoZWxwIGl0IGZpbmQgdHJhY2sgemVybyAqLworCQkJcnEtPmVycm9ycyB8PSBFUlJPUl9SRUNBTDsKKwkJfQorCX0KKworCWlmICgoc3RhdCAmIEFUQV9EUlEpICYmIHJxX2RhdGFfZGlyKHJxKSA9PSBSRUFEICYmCisJICAgIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX0VSUk9SX1NUT1BTX0ZJRk8pID09IDApIHsKKwkJaW50IG5zZWN0ID0gZHJpdmUtPm11bHRfY291bnQgPyBkcml2ZS0+bXVsdF9jb3VudCA6IDE7CisKKwkJaWRlX3BhZF90cmFuc2Zlcihkcml2ZSwgUkVBRCwgbnNlY3QgKiBTRUNUT1JfU0laRSk7CisJfQorCisJaWYgKHJxLT5lcnJvcnMgPj0gRVJST1JfTUFYIHx8IGJsa19ub3JldHJ5X3JlcXVlc3QocnEpKSB7CisJCWlkZV9raWxsX3JxKGRyaXZlLCBycSk7CisJCXJldHVybiBpZGVfc3RvcHBlZDsKKwl9CisKKwlpZiAoaHdpZi0+dHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKSAmIChBVEFfQlVTWSB8IEFUQV9EUlEpKQorCQlycS0+ZXJyb3JzIHw9IEVSUk9SX1JFU0VUOworCisJaWYgKChycS0+ZXJyb3JzICYgRVJST1JfUkVTRVQpID09IEVSUk9SX1JFU0VUKSB7CisJCSsrcnEtPmVycm9yczsKKwkJcmV0dXJuIGlkZV9kb19yZXNldChkcml2ZSk7CisJfQorCisJaWYgKChycS0+ZXJyb3JzICYgRVJST1JfUkVDQUwpID09IEVSUk9SX1JFQ0FMKQorCQlkcml2ZS0+c3BlY2lhbC5iLnJlY2FsaWJyYXRlID0gMTsKKworCSsrcnEtPmVycm9yczsKKworCXJldHVybiBpZGVfc3RvcHBlZDsKK30KKworc3RhdGljIGlkZV9zdGFydHN0b3BfdCBpZGVfYXRhcGlfZXJyb3IoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsCisJCQkJICAgICAgIHU4IHN0YXQsIHU4IGVycikKK3sKKwlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CisKKwlpZiAoKHN0YXQgJiBBVEFfQlVTWSkgfHwKKwkgICAgKChzdGF0ICYgQVRBX0RGKSAmJiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19OT1dFUlIpID09IDApKSB7CisJCS8qIG90aGVyIGJpdHMgYXJlIHVzZWxlc3Mgd2hlbiBCVVNZICovCisJCXJxLT5lcnJvcnMgfD0gRVJST1JfUkVTRVQ7CisJfSBlbHNlIHsKKwkJLyogYWRkIGRlY29kaW5nIGVycm9yIHN0dWZmICovCisJfQorCisJaWYgKGh3aWYtPnRwX29wcy0+cmVhZF9zdGF0dXMoaHdpZikgJiAoQVRBX0JVU1kgfCBBVEFfRFJRKSkKKwkJLyogZm9yY2UgYW4gYWJvcnQgKi8KKwkJaHdpZi0+dHBfb3BzLT5leGVjX2NvbW1hbmQoaHdpZiwgQVRBX0NNRF9JRExFSU1NRURJQVRFKTsKKworCWlmIChycS0+ZXJyb3JzID49IEVSUk9SX01BWCkgeworCQlpZGVfa2lsbF9ycShkcml2ZSwgcnEpOworCX0gZWxzZSB7CisJCWlmICgocnEtPmVycm9ycyAmIEVSUk9SX1JFU0VUKSA9PSBFUlJPUl9SRVNFVCkgeworCQkJKytycS0+ZXJyb3JzOworCQkJcmV0dXJuIGlkZV9kb19yZXNldChkcml2ZSk7CisJCX0KKwkJKytycS0+ZXJyb3JzOworCX0KKworCXJldHVybiBpZGVfc3RvcHBlZDsKK30KKworc3RhdGljIGlkZV9zdGFydHN0b3BfdCBfX2lkZV9lcnJvcihpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwKKwkJCQkgICB1OCBzdGF0LCB1OCBlcnIpCit7CisJaWYgKGRyaXZlLT5tZWRpYSA9PSBpZGVfZGlzaykKKwkJcmV0dXJuIGlkZV9hdGFfZXJyb3IoZHJpdmUsIHJxLCBzdGF0LCBlcnIpOworCXJldHVybiBpZGVfYXRhcGlfZXJyb3IoZHJpdmUsIHJxLCBzdGF0LCBlcnIpOworfQorCisvKioKKyAqCWlkZV9lcnJvcgktCWhhbmRsZSBhbiBlcnJvciBvbiB0aGUgSURFCisgKglAZHJpdmU6IGRyaXZlIHRoZSBlcnJvciBvY2N1cnJlZCBvbgorICoJQG1zZzogbWVzc2FnZSB0byByZXBvcnQKKyAqCUBzdGF0OiBzdGF0dXMgYml0cworICoKKyAqCWlkZV9lcnJvcigpIHRha2VzIGFjdGlvbiBiYXNlZCBvbiB0aGUgZXJyb3IgcmV0dXJuZWQgYnkgdGhlIGRyaXZlLgorICoJRm9yIG5vcm1hbCBJL08gdGhhdCBtYXkgd2VsbCBpbmNsdWRlIHJldHJpZXMuIFdlIGRlYWwgd2l0aAorICoJYm90aCBuZXctc3R5bGUgKHRhc2tmaWxlKSBhbmQgb2xkIHN0eWxlIGNvbW1hbmQgaGFuZGxpbmcgaGVyZS4KKyAqCUluIHRoZSBjYXNlIG9mIHRhc2tmaWxlIGNvbW1hbmQgaGFuZGxpbmcgdGhlcmUgaXMgd29yayBsZWZ0IHRvCisgKglkbworICovCisKK2lkZV9zdGFydHN0b3BfdCBpZGVfZXJyb3IoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCBjaGFyICptc2csIHU4IHN0YXQpCit7CisJc3RydWN0IHJlcXVlc3QgKnJxOworCXU4IGVycjsKKworCWVyciA9IGlkZV9kdW1wX3N0YXR1cyhkcml2ZSwgbXNnLCBzdGF0KTsKKworCXJxID0gZHJpdmUtPmh3aWYtPnJxOworCWlmIChycSA9PSBOVUxMKQorCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CisKKwkvKiByZXRyeSBvbmx5ICJub3JtYWwiIEkvTzogKi8KKwlpZiAoIWJsa19mc19yZXF1ZXN0KHJxKSkgeworCQlycS0+ZXJyb3JzID0gMTsKKwkJaWRlX2VuZF9kcml2ZV9jbWQoZHJpdmUsIHN0YXQsIGVycik7CisJCXJldHVybiBpZGVfc3RvcHBlZDsKKwl9CisKKwlyZXR1cm4gX19pZGVfZXJyb3IoZHJpdmUsIHJxLCBzdGF0LCBlcnIpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2Vycm9yKTsKKworc3RhdGljIGlubGluZSB2b2lkIGlkZV9jb21wbGV0ZV9kcml2ZV9yZXNldChpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBlcnIpCit7CisJc3RydWN0IHJlcXVlc3QgKnJxID0gZHJpdmUtPmh3aWYtPnJxOworCisJaWYgKHJxICYmIGJsa19zcGVjaWFsX3JlcXVlc3QocnEpICYmIHJxLT5jbWRbMF0gPT0gUkVRX0RSSVZFX1JFU0VUKQorCQlpZGVfZW5kX3JlcXVlc3QoZHJpdmUsIGVyciA/IGVyciA6IDEsIDApOworfQorCisvKiBuZWVkZWQgYmVsb3cgKi8KK3N0YXRpYyBpZGVfc3RhcnRzdG9wX3QgZG9fcmVzZXQxKGlkZV9kcml2ZV90ICosIGludCk7CisKKy8qCisgKiBhdGFwaV9yZXNldF9wb2xsZnVuYygpIGdldHMgaW52b2tlZCB0byBwb2xsIHRoZSBpbnRlcmZhY2UgZm9yIGNvbXBsZXRpb24KKyAqIGV2ZXJ5IDUwbXMgZHVyaW5nIGFuIGF0YXBpIGRyaXZlIHJlc2V0IG9wZXJhdGlvbi4gIElmIHRoZSBkcml2ZSBoYXMgbm90IHlldAorICogcmVzcG9uZGVkLCBhbmQgd2UgaGF2ZSBub3QgeWV0IGhpdCBvdXIgbWF4aW11bSB3YWl0aW5nIHRpbWUsIHRoZW4gdGhlIHRpbWVyCisgKiBpcyByZXN0YXJ0ZWQgZm9yIGFub3RoZXIgNTBtcy4KKyAqLworc3RhdGljIGlkZV9zdGFydHN0b3BfdCBhdGFwaV9yZXNldF9wb2xsZnVuYyhpZGVfZHJpdmVfdCAqZHJpdmUpCit7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCXU4IHN0YXQ7CisKKwlTRUxFQ1RfRFJJVkUoZHJpdmUpOworCXVkZWxheSgxMCk7CisJc3RhdCA9IGh3aWYtPnRwX29wcy0+cmVhZF9zdGF0dXMoaHdpZik7CisKKwlpZiAoT0tfU1RBVChzdGF0LCAwLCBBVEFfQlVTWSkpCisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBBVEFQSSByZXNldCBjb21wbGV0ZVxuIiwgZHJpdmUtPm5hbWUpOworCWVsc2UgeworCQlpZiAodGltZV9iZWZvcmUoamlmZmllcywgaHdpZi0+cG9sbF90aW1lb3V0KSkgeworCQkJaWRlX3NldF9oYW5kbGVyKGRyaXZlLCAmYXRhcGlfcmVzZXRfcG9sbGZ1bmMsIEhaLzIwLAorCQkJCQlOVUxMKTsKKwkJCS8qIGNvbnRpbnVlIHBvbGxpbmcgKi8KKwkJCXJldHVybiBpZGVfc3RhcnRlZDsKKwkJfQorCQkvKiBlbmQgb2YgcG9sbGluZyAqLworCQlod2lmLT5wb2xsaW5nID0gMDsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogQVRBUEkgcmVzZXQgdGltZWQtb3V0LCBzdGF0dXM9MHglMDJ4XG4iLAorCQkJZHJpdmUtPm5hbWUsIHN0YXQpOworCQkvKiBkbyBpdCB0aGUgb2xkIGZhc2hpb25lZCB3YXkgKi8KKwkJcmV0dXJuIGRvX3Jlc2V0MShkcml2ZSwgMSk7CisJfQorCS8qIGRvbmUgcG9sbGluZyAqLworCWh3aWYtPnBvbGxpbmcgPSAwOworCWlkZV9jb21wbGV0ZV9kcml2ZV9yZXNldChkcml2ZSwgMCk7CisJcmV0dXJuIGlkZV9zdG9wcGVkOworfQorCitzdGF0aWMgdm9pZCBpZGVfcmVzZXRfcmVwb3J0X2Vycm9yKGlkZV9od2lmX3QgKmh3aWYsIHU4IGVycikKK3sKKwlzdGF0aWMgY29uc3QgY2hhciAqZXJyX21hc3Rlcl92YWxzW10gPQorCQl7IE5VTEwsICJwYXNzZWQiLCAiZm9ybWF0dGVyIGRldmljZSBlcnJvciIsCisJCSAgInNlY3RvciBidWZmZXIgZXJyb3IiLCAiRUNDIGNpcmN1aXRyeSBlcnJvciIsCisJCSAgImNvbnRyb2xsaW5nIE1QVSBlcnJvciIgfTsKKworCXU4IGVycl9tYXN0ZXIgPSBlcnIgJiAweDdmOworCisJcHJpbnRrKEtFUk5fRVJSICIlczogcmVzZXQ6IG1hc3RlcjogIiwgaHdpZi0+bmFtZSk7CisJaWYgKGVycl9tYXN0ZXIgJiYgZXJyX21hc3RlciA8IDYpCisJCXByaW50ayhLRVJOX0NPTlQgIiVzIiwgZXJyX21hc3Rlcl92YWxzW2Vycl9tYXN0ZXJdKTsKKwllbHNlCisJCXByaW50ayhLRVJOX0NPTlQgImVycm9yICgweCUwMng/KSIsIGVycik7CisJaWYgKGVyciAmIDB4ODApCisJCXByaW50ayhLRVJOX0NPTlQgIjsgc2xhdmU6IGZhaWxlZCIpOworCXByaW50ayhLRVJOX0NPTlQgIlxuIik7Cit9CisKKy8qCisgKiByZXNldF9wb2xsZnVuYygpIGdldHMgaW52b2tlZCB0byBwb2xsIHRoZSBpbnRlcmZhY2UgZm9yIGNvbXBsZXRpb24gZXZlcnkgNTBtcworICogZHVyaW5nIGFuIGlkZSByZXNldCBvcGVyYXRpb24uIElmIHRoZSBkcml2ZXMgaGF2ZSBub3QgeWV0IHJlc3BvbmRlZCwKKyAqIGFuZCB3ZSBoYXZlIG5vdCB5ZXQgaGl0IG91ciBtYXhpbXVtIHdhaXRpbmcgdGltZSwgdGhlbiB0aGUgdGltZXIgaXMgcmVzdGFydGVkCisgKiBmb3IgYW5vdGhlciA1MG1zLgorICovCitzdGF0aWMgaWRlX3N0YXJ0c3RvcF90IHJlc2V0X3BvbGxmdW5jKGlkZV9kcml2ZV90ICpkcml2ZSkKK3sKKwlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CisJY29uc3Qgc3RydWN0IGlkZV9wb3J0X29wcyAqcG9ydF9vcHMgPSBod2lmLT5wb3J0X29wczsKKwl1OCB0bXA7CisJaW50IGVyciA9IDA7CisKKwlpZiAocG9ydF9vcHMgJiYgcG9ydF9vcHMtPnJlc2V0X3BvbGwpIHsKKwkJZXJyID0gcG9ydF9vcHMtPnJlc2V0X3BvbGwoZHJpdmUpOworCQlpZiAoZXJyKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBob3N0IHJlc2V0X3BvbGwgZmFpbHVyZSBmb3IgJXMuXG4iLAorCQkJCWh3aWYtPm5hbWUsIGRyaXZlLT5uYW1lKTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJdG1wID0gaHdpZi0+dHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKTsKKworCWlmICghT0tfU1RBVCh0bXAsIDAsIEFUQV9CVVNZKSkgeworCQlpZiAodGltZV9iZWZvcmUoamlmZmllcywgaHdpZi0+cG9sbF90aW1lb3V0KSkgeworCQkJaWRlX3NldF9oYW5kbGVyKGRyaXZlLCAmcmVzZXRfcG9sbGZ1bmMsIEhaLzIwLCBOVUxMKTsKKwkJCS8qIGNvbnRpbnVlIHBvbGxpbmcgKi8KKwkJCXJldHVybiBpZGVfc3RhcnRlZDsKKwkJfQorCQlwcmludGsoS0VSTl9FUlIgIiVzOiByZXNldCB0aW1lZC1vdXQsIHN0YXR1cz0weCUwMnhcbiIsCisJCQlod2lmLT5uYW1lLCB0bXApOworCQlkcml2ZS0+ZmFpbHVyZXMrKzsKKwkJZXJyID0gLUVJTzsKKwl9IGVsc2UgIHsKKwkJdG1wID0gaWRlX3JlYWRfZXJyb3IoZHJpdmUpOworCisJCWlmICh0bXAgPT0gMSkgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHJlc2V0OiBzdWNjZXNzXG4iLCBod2lmLT5uYW1lKTsKKwkJCWRyaXZlLT5mYWlsdXJlcyA9IDA7CisJCX0gZWxzZSB7CisJCQlpZGVfcmVzZXRfcmVwb3J0X2Vycm9yKGh3aWYsIHRtcCk7CisJCQlkcml2ZS0+ZmFpbHVyZXMrKzsKKwkJCWVyciA9IC1FSU87CisJCX0KKwl9CitvdXQ6CisJaHdpZi0+cG9sbGluZyA9IDA7CS8qIGRvbmUgcG9sbGluZyAqLworCWlkZV9jb21wbGV0ZV9kcml2ZV9yZXNldChkcml2ZSwgZXJyKTsKKwlyZXR1cm4gaWRlX3N0b3BwZWQ7Cit9CisKK3N0YXRpYyB2b2lkIGlkZV9kaXNrX3ByZV9yZXNldChpZGVfZHJpdmVfdCAqZHJpdmUpCit7CisJaW50IGxlZ2FjeSA9IChkcml2ZS0+aWRbQVRBX0lEX0NGU19FTkFCTEVfMl0gJiAweDA0MDApID8gMCA6IDE7CisKKwlkcml2ZS0+c3BlY2lhbC5hbGwgPSAwOworCWRyaXZlLT5zcGVjaWFsLmIuc2V0X2dlb21ldHJ5ID0gbGVnYWN5OworCWRyaXZlLT5zcGVjaWFsLmIucmVjYWxpYnJhdGUgID0gbGVnYWN5OworCisJZHJpdmUtPm11bHRfY291bnQgPSAwOworCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19QQVJLRUQ7CisKKwlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfS0VFUF9TRVRUSU5HUykgPT0gMCAmJgorCSAgICAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19VU0lOR19ETUEpID09IDApCisJCWRyaXZlLT5tdWx0X3JlcSA9IDA7CisKKwlpZiAoZHJpdmUtPm11bHRfcmVxICE9IGRyaXZlLT5tdWx0X2NvdW50KQorCQlkcml2ZS0+c3BlY2lhbC5iLnNldF9tdWx0bW9kZSA9IDE7Cit9CisKK3N0YXRpYyB2b2lkIHByZV9yZXNldChpZGVfZHJpdmVfdCAqZHJpdmUpCit7CisJY29uc3Qgc3RydWN0IGlkZV9wb3J0X29wcyAqcG9ydF9vcHMgPSBkcml2ZS0+aHdpZi0+cG9ydF9vcHM7CisKKwlpZiAoZHJpdmUtPm1lZGlhID09IGlkZV9kaXNrKQorCQlpZGVfZGlza19wcmVfcmVzZXQoZHJpdmUpOworCWVsc2UKKwkJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfUE9TVF9SRVNFVDsKKworCWlmIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1VTSU5HX0RNQSkgeworCQlpZiAoZHJpdmUtPmNyY19jb3VudCkKKwkJCWlkZV9jaGVja19kbWFfY3JjKGRyaXZlKTsKKwkJZWxzZQorCQkJaWRlX2RtYV9vZmYoZHJpdmUpOworCX0KKworCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19LRUVQX1NFVFRJTkdTKSA9PSAwKSB7CisJCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19VU0lOR19ETUEpID09IDApIHsKKwkJCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19VTk1BU0s7CisJCQlkcml2ZS0+aW9fMzJiaXQgPSAwOworCQl9CisJCXJldHVybjsKKwl9CisKKwlpZiAocG9ydF9vcHMgJiYgcG9ydF9vcHMtPnByZV9yZXNldCkKKwkJcG9ydF9vcHMtPnByZV9yZXNldChkcml2ZSk7CisKKwlpZiAoZHJpdmUtPmN1cnJlbnRfc3BlZWQgIT0gMHhmZikKKwkJZHJpdmUtPmRlc2lyZWRfc3BlZWQgPSBkcml2ZS0+Y3VycmVudF9zcGVlZDsKKwlkcml2ZS0+Y3VycmVudF9zcGVlZCA9IDB4ZmY7Cit9CisKKy8qCisgKiBkb19yZXNldDEoKSBhdHRlbXB0cyB0byByZWNvdmVyIGEgY29uZnVzZWQgZHJpdmUgYnkgcmVzZXR0aW5nIGl0LgorICogVW5mb3J0dW5hdGVseSwgcmVzZXR0aW5nIGEgZGlzayBkcml2ZSBhY3R1YWxseSByZXNldHMgYWxsIGRldmljZXMgb24KKyAqIHRoZSBzYW1lIGludGVyZmFjZSwgc28gaXQgY2FuIHJlYWxseSBiZSB0aG91Z2h0IG9mIGFzIHJlc2V0dGluZyB0aGUKKyAqIGludGVyZmFjZSByYXRoZXIgdGhhbiByZXNldHRpbmcgdGhlIGRyaXZlLgorICoKKyAqIEFUQVBJIGRldmljZXMgaGF2ZSB0aGVpciBvd24gcmVzZXQgbWVjaGFuaXNtIHdoaWNoIGFsbG93cyB0aGVtIHRvIGJlCisgKiBpbmRpdmlkdWFsbHkgcmVzZXQgd2l0aG91dCBjbG9iYmVyaW5nIG90aGVyIGRldmljZXMgb24gdGhlIHNhbWUgaW50ZXJmYWNlLgorICoKKyAqIFVuZm9ydHVuYXRlbHksIHRoZSBJREUgaW50ZXJmYWNlIGRvZXMgbm90IGdlbmVyYXRlIGFuIGludGVycnVwdCB0byBsZXQKKyAqIHVzIGtub3cgd2hlbiB0aGUgcmVzZXQgb3BlcmF0aW9uIGhhcyBmaW5pc2hlZCwgc28gd2UgbXVzdCBwb2xsIGZvciB0aGlzLgorICogRXF1YWxseSBwb29yLCB0aG91Z2gsIGlzIHRoZSBmYWN0IHRoYXQgdGhpcyBtYXkgYSB2ZXJ5IGxvbmcgdGltZSB0byBjb21wbGV0ZSwKKyAqICh1cCB0byAzMCBzZWNvbmRzIHdvcnN0Y2FzZSkuICBTbywgaW5zdGVhZCBvZiBidXN5LXdhaXRpbmcgaGVyZSBmb3IgaXQsCisgKiB3ZSBzZXQgYSB0aW1lciB0byBwb2xsIGF0IDUwbXMgaW50ZXJ2YWxzLgorICovCitzdGF0aWMgaWRlX3N0YXJ0c3RvcF90IGRvX3Jlc2V0MShpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBkb19ub3RfdHJ5X2F0YXBpKQoreworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwlzdHJ1Y3QgaWRlX2lvX3BvcnRzICppb19wb3J0cyA9ICZod2lmLT5pb19wb3J0czsKKwljb25zdCBzdHJ1Y3QgaWRlX3RwX29wcyAqdHBfb3BzID0gaHdpZi0+dHBfb3BzOworCWNvbnN0IHN0cnVjdCBpZGVfcG9ydF9vcHMgKnBvcnRfb3BzOworCWlkZV9kcml2ZV90ICp0ZHJpdmU7CisJdW5zaWduZWQgbG9uZyBmbGFncywgdGltZW91dDsKKwlpbnQgaTsKKwlERUZJTkVfV0FJVCh3YWl0KTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZod2lmLT5sb2NrLCBmbGFncyk7CisKKwkvKiBXZSBtdXN0IG5vdCByZXNldCB3aXRoIHJ1bm5pbmcgaGFuZGxlcnMgKi8KKwlCVUdfT04oaHdpZi0+aGFuZGxlciAhPSBOVUxMKTsKKworCS8qIEZvciBhbiBBVEFQSSBkZXZpY2UsIGZpcnN0IHRyeSBhbiBBVEFQSSBTUlNULiAqLworCWlmIChkcml2ZS0+bWVkaWEgIT0gaWRlX2Rpc2sgJiYgIWRvX25vdF90cnlfYXRhcGkpIHsKKwkJcHJlX3Jlc2V0KGRyaXZlKTsKKwkJU0VMRUNUX0RSSVZFKGRyaXZlKTsKKwkJdWRlbGF5KDIwKTsKKwkJdHBfb3BzLT5leGVjX2NvbW1hbmQoaHdpZiwgQVRBX0NNRF9ERVZfUkVTRVQpOworCQluZGVsYXkoNDAwKTsKKwkJaHdpZi0+cG9sbF90aW1lb3V0ID0gamlmZmllcyArIFdBSVRfV09SU1RDQVNFOworCQlod2lmLT5wb2xsaW5nID0gMTsKKwkJX19pZGVfc2V0X2hhbmRsZXIoZHJpdmUsICZhdGFwaV9yZXNldF9wb2xsZnVuYywgSFovMjAsIE5VTEwpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZod2lmLT5sb2NrLCBmbGFncyk7CisJCXJldHVybiBpZGVfc3RhcnRlZDsKKwl9CisKKwkvKiBXZSBtdXN0IG5vdCBkaXN0dXJiIGRldmljZXMgaW4gdGhlIElERV9ERkxBR19QQVJLRUQgc3RhdGUuICovCisJZG8geworCQl1bnNpZ25lZCBsb25nIG5vdzsKKworCQlwcmVwYXJlX3RvX3dhaXQoJmlkZV9wYXJrX3dxLCAmd2FpdCwgVEFTS19VTklOVEVSUlVQVElCTEUpOworCQl0aW1lb3V0ID0gamlmZmllczsKKwkJaWRlX3BvcnRfZm9yX2VhY2hfcHJlc2VudF9kZXYoaSwgdGRyaXZlLCBod2lmKSB7CisJCQlpZiAoKHRkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1BBUktFRCkgJiYKKwkJCSAgICB0aW1lX2FmdGVyKHRkcml2ZS0+c2xlZXAsIHRpbWVvdXQpKQorCQkJCXRpbWVvdXQgPSB0ZHJpdmUtPnNsZWVwOworCQl9CisKKwkJbm93ID0gamlmZmllczsKKwkJaWYgKHRpbWVfYmVmb3JlX2VxKHRpbWVvdXQsIG5vdykpCisJCQlicmVhazsKKworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZod2lmLT5sb2NrLCBmbGFncyk7CisJCXRpbWVvdXQgPSBzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZSh0aW1lb3V0IC0gbm93KTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmh3aWYtPmxvY2ssIGZsYWdzKTsKKwl9IHdoaWxlICh0aW1lb3V0KTsKKwlmaW5pc2hfd2FpdCgmaWRlX3Bhcmtfd3EsICZ3YWl0KTsKKworCS8qCisJICogRmlyc3QsIHJlc2V0IGFueSBkZXZpY2Ugc3RhdGUgZGF0YSB3ZSB3ZXJlIG1haW50YWluaW5nCisJICogZm9yIGFueSBvZiB0aGUgZHJpdmVzIG9uIHRoaXMgaW50ZXJmYWNlLgorCSAqLworCWlkZV9wb3J0X2Zvcl9lYWNoX2RldihpLCB0ZHJpdmUsIGh3aWYpCisJCXByZV9yZXNldCh0ZHJpdmUpOworCisJaWYgKGlvX3BvcnRzLT5jdGxfYWRkciA9PSAwKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3aWYtPmxvY2ssIGZsYWdzKTsKKwkJaWRlX2NvbXBsZXRlX2RyaXZlX3Jlc2V0KGRyaXZlLCAtRU5YSU8pOworCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CisJfQorCisJLyoKKwkgKiBOb3RlIHRoYXQgd2UgYWxzbyBzZXQgbklFTiB3aGlsZSByZXNldHRpbmcgdGhlIGRldmljZSwKKwkgKiB0byBtYXNrIHVud2FudGVkIGludGVycnVwdHMgZnJvbSB0aGUgaW50ZXJmYWNlIGR1cmluZyB0aGUgcmVzZXQuCisJICogSG93ZXZlciwgZHVlIHRvIHRoZSBkZXNpZ24gb2YgUEMgaGFyZHdhcmUsIHRoaXMgd2lsbCBjYXVzZSBhbgorCSAqIGltbWVkaWF0ZSBpbnRlcnJ1cHQgZHVlIHRvIHRoZSBlZGdlIHRyYW5zaXRpb24gaXQgcHJvZHVjZXMuCisJICogVGhpcyBzaW5nbGUgaW50ZXJydXB0IGdpdmVzIHVzIGEgImZhc3QgcG9sbCIgZm9yIGRyaXZlcyB0aGF0CisJICogcmVjb3ZlciBmcm9tIHJlc2V0IHZlcnkgcXVpY2tseSwgc2F2aW5nIHVzIHRoZSBmaXJzdCA1MG1zIHdhaXQgdGltZS4KKwkgKgorCSAqIFRPRE86IGFkZCAtPnNvZnRyZXNldCBtZXRob2QgYW5kIHN0b3AgYWJ1c2luZyAtPnNldF9pcnEKKwkgKi8KKwkvKiBzZXQgU1JTVCBhbmQgbklFTiAqLworCXRwX29wcy0+c2V0X2lycShod2lmLCA0KTsKKwkvKiBtb3JlIHRoYW4gZW5vdWdoIHRpbWUgKi8KKwl1ZGVsYXkoMTApOworCS8qIGNsZWFyIFNSU1QsIGxlYXZlIG5JRU4gKHVubGVzcyBkZXZpY2UgaXMgb24gdGhlIHF1aXJrIGxpc3QpICovCisJdHBfb3BzLT5zZXRfaXJxKGh3aWYsIGRyaXZlLT5xdWlya19saXN0ID09IDIpOworCS8qIG1vcmUgdGhhbiBlbm91Z2ggdGltZSAqLworCXVkZWxheSgxMCk7CisJaHdpZi0+cG9sbF90aW1lb3V0ID0gamlmZmllcyArIFdBSVRfV09SU1RDQVNFOworCWh3aWYtPnBvbGxpbmcgPSAxOworCV9faWRlX3NldF9oYW5kbGVyKGRyaXZlLCAmcmVzZXRfcG9sbGZ1bmMsIEhaLzIwLCBOVUxMKTsKKworCS8qCisJICogU29tZSB3ZWlyZCBjb250cm9sbGVyIGxpa2UgcmVzZXR0aW5nIHRoZW1zZWx2ZXMgdG8gYSBzdHJhbmdlCisJICogc3RhdGUgd2hlbiB0aGUgZGlza3MgYXJlIHJlc2V0IHRoaXMgd2F5LiBBdCBsZWFzdCwgdGhlIFdpbmJvbmQKKwkgKiA1NTMgZG9jdW1lbnRhdGlvbiBzYXlzIHRoYXQKKwkgKi8KKwlwb3J0X29wcyA9IGh3aWYtPnBvcnRfb3BzOworCWlmIChwb3J0X29wcyAmJiBwb3J0X29wcy0+cmVzZXRwcm9jKQorCQlwb3J0X29wcy0+cmVzZXRwcm9jKGRyaXZlKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3aWYtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gaWRlX3N0YXJ0ZWQ7Cit9CisKKy8qCisgKiBpZGVfZG9fcmVzZXQoKSBpcyB0aGUgZW50cnkgcG9pbnQgdG8gdGhlIGRyaXZlL2ludGVyZmFjZSByZXNldCBjb2RlLgorICovCisKK2lkZV9zdGFydHN0b3BfdCBpZGVfZG9fcmVzZXQoaWRlX2RyaXZlX3QgKmRyaXZlKQoreworCXJldHVybiBkb19yZXNldDEoZHJpdmUsIDApOworfQorRVhQT1JUX1NZTUJPTChpZGVfZG9fcmVzZXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWlvLXN0ZC5jIGIvZHJpdmVycy9pZGUvaWRlLWlvLXN0ZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1YjQzZGQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2lkZS9pZGUtaW8tc3RkLmMKQEAgLTAsMCArMSwzMTYgQEAKKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2lkZS5oPgorCisvKgorICoJQ29udmVudGlvbmFsIFBJTyBvcGVyYXRpb25zIGZvciBBVEEgZGV2aWNlcworICovCisKK3N0YXRpYyB1OCBpZGVfaW5iKHVuc2lnbmVkIGxvbmcgcG9ydCkKK3sKKwlyZXR1cm4gKHU4KSBpbmIocG9ydCk7Cit9CisKK3N0YXRpYyB2b2lkIGlkZV9vdXRiKHU4IHZhbCwgdW5zaWduZWQgbG9uZyBwb3J0KQoreworCW91dGIodmFsLCBwb3J0KTsKK30KKworLyoKKyAqCU1NSU8gb3BlcmF0aW9ucywgdHlwaWNhbGx5IHVzZWQgZm9yIFNBVEEgY29udHJvbGxlcnMKKyAqLworCitzdGF0aWMgdTggaWRlX21tX2luYih1bnNpZ25lZCBsb25nIHBvcnQpCit7CisJcmV0dXJuICh1OCkgcmVhZGIoKHZvaWQgX19pb21lbSAqKSBwb3J0KTsKK30KKworc3RhdGljIHZvaWQgaWRlX21tX291dGIodTggdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCkKK3sKKwl3cml0ZWIodmFsdWUsICh2b2lkIF9faW9tZW0gKikgcG9ydCk7Cit9CisKK3ZvaWQgaWRlX2V4ZWNfY29tbWFuZChpZGVfaHdpZl90ICpod2lmLCB1OCBjbWQpCit7CisJaWYgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTU1JTykKKwkJd3JpdGViKGNtZCwgKHZvaWQgX19pb21lbSAqKWh3aWYtPmlvX3BvcnRzLmNvbW1hbmRfYWRkcik7CisJZWxzZQorCQlvdXRiKGNtZCwgaHdpZi0+aW9fcG9ydHMuY29tbWFuZF9hZGRyKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlkZV9leGVjX2NvbW1hbmQpOworCit1OCBpZGVfcmVhZF9zdGF0dXMoaWRlX2h3aWZfdCAqaHdpZikKK3sKKwlpZiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19NTUlPKQorCQlyZXR1cm4gcmVhZGIoKHZvaWQgX19pb21lbSAqKWh3aWYtPmlvX3BvcnRzLnN0YXR1c19hZGRyKTsKKwllbHNlCisJCXJldHVybiBpbmIoaHdpZi0+aW9fcG9ydHMuc3RhdHVzX2FkZHIpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaWRlX3JlYWRfc3RhdHVzKTsKKwordTggaWRlX3JlYWRfYWx0c3RhdHVzKGlkZV9od2lmX3QgKmh3aWYpCit7CisJaWYgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTU1JTykKKwkJcmV0dXJuIHJlYWRiKCh2b2lkIF9faW9tZW0gKilod2lmLT5pb19wb3J0cy5jdGxfYWRkcik7CisJZWxzZQorCQlyZXR1cm4gaW5iKGh3aWYtPmlvX3BvcnRzLmN0bF9hZGRyKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlkZV9yZWFkX2FsdHN0YXR1cyk7CisKK3ZvaWQgaWRlX3NldF9pcnEoaWRlX2h3aWZfdCAqaHdpZiwgaW50IG9uKQoreworCXU4IGN0bCA9IEFUQV9ERVZDVExfT0JTOworCisJaWYgKG9uID09IDQpIHsgLyogaGFjayBmb3IgU1JTVCAqLworCQljdGwgfD0gNDsKKwkJb24gJj0gfjQ7CisJfQorCisJY3RsIHw9IG9uID8gMCA6IDI7CisKKwlpZiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19NTUlPKQorCQl3cml0ZWIoY3RsLCAodm9pZCBfX2lvbWVtICopaHdpZi0+aW9fcG9ydHMuY3RsX2FkZHIpOworCWVsc2UKKwkJb3V0YihjdGwsIGh3aWYtPmlvX3BvcnRzLmN0bF9hZGRyKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlkZV9zZXRfaXJxKTsKKwordm9pZCBpZGVfdGZfbG9hZChpZGVfZHJpdmVfdCAqZHJpdmUsIGlkZV90YXNrX3QgKnRhc2spCit7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCXN0cnVjdCBpZGVfaW9fcG9ydHMgKmlvX3BvcnRzID0gJmh3aWYtPmlvX3BvcnRzOworCXN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmID0gJnRhc2stPnRmOworCXZvaWQgKCp0Zl9vdXRiKSh1OCBhZGRyLCB1bnNpZ25lZCBsb25nIHBvcnQpOworCXU4IG1taW8gPSAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19NTUlPKSA/IDEgOiAwOworCXU4IEhJSEkgPSAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfTEJBNDgpID8gMHhFMCA6IDB4RUY7CisKKwlpZiAobW1pbykKKwkJdGZfb3V0YiA9IGlkZV9tbV9vdXRiOworCWVsc2UKKwkJdGZfb3V0YiA9IGlkZV9vdXRiOworCisJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0ZMQUdHRUQpCisJCUhJSEkgPSAweEZGOworCisJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9EQVRBKSB7CisJCXUxNiBkYXRhID0gKHRmLT5ob2JfZGF0YSA8PCA4KSB8IHRmLT5kYXRhOworCisJCWlmIChtbWlvKQorCQkJd3JpdGV3KGRhdGEsICh2b2lkIF9faW9tZW0gKilpb19wb3J0cy0+ZGF0YV9hZGRyKTsKKwkJZWxzZQorCQkJb3V0dyhkYXRhLCBpb19wb3J0cy0+ZGF0YV9hZGRyKTsKKwl9CisKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9GRUFUVVJFKQorCQl0Zl9vdXRiKHRmLT5ob2JfZmVhdHVyZSwgaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7CisJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTlNFQ1QpCisJCXRmX291dGIodGYtPmhvYl9uc2VjdCwgaW9fcG9ydHMtPm5zZWN0X2FkZHIpOworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0xCQUwpCisJCXRmX291dGIodGYtPmhvYl9sYmFsLCBpb19wb3J0cy0+bGJhbF9hZGRyKTsKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9MQkFNKQorCQl0Zl9vdXRiKHRmLT5ob2JfbGJhbSwgaW9fcG9ydHMtPmxiYW1fYWRkcik7CisJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTEJBSCkKKwkJdGZfb3V0Yih0Zi0+aG9iX2xiYWgsIGlvX3BvcnRzLT5sYmFoX2FkZHIpOworCisJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9GRUFUVVJFKQorCQl0Zl9vdXRiKHRmLT5mZWF0dXJlLCBpb19wb3J0cy0+ZmVhdHVyZV9hZGRyKTsKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX05TRUNUKQorCQl0Zl9vdXRiKHRmLT5uc2VjdCwgaW9fcG9ydHMtPm5zZWN0X2FkZHIpOworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTEJBTCkKKwkJdGZfb3V0Yih0Zi0+bGJhbCwgaW9fcG9ydHMtPmxiYWxfYWRkcik7CisJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9MQkFNKQorCQl0Zl9vdXRiKHRmLT5sYmFtLCBpb19wb3J0cy0+bGJhbV9hZGRyKTsKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQUgpCisJCXRmX291dGIodGYtPmxiYWgsIGlvX3BvcnRzLT5sYmFoX2FkZHIpOworCisJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9ERVZJQ0UpCisJCXRmX291dGIoKHRmLT5kZXZpY2UgJiBISUhJKSB8IGRyaXZlLT5zZWxlY3QsCisJCQkgaW9fcG9ydHMtPmRldmljZV9hZGRyKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlkZV90Zl9sb2FkKTsKKwordm9pZCBpZGVfdGZfcmVhZChpZGVfZHJpdmVfdCAqZHJpdmUsIGlkZV90YXNrX3QgKnRhc2spCit7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCXN0cnVjdCBpZGVfaW9fcG9ydHMgKmlvX3BvcnRzID0gJmh3aWYtPmlvX3BvcnRzOworCXN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmID0gJnRhc2stPnRmOworCXZvaWQgKCp0Zl9vdXRiKSh1OCBhZGRyLCB1bnNpZ25lZCBsb25nIHBvcnQpOworCXU4ICgqdGZfaW5iKSh1bnNpZ25lZCBsb25nIHBvcnQpOworCXU4IG1taW8gPSAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19NTUlPKSA/IDEgOiAwOworCisJaWYgKG1taW8pIHsKKwkJdGZfb3V0YiA9IGlkZV9tbV9vdXRiOworCQl0Zl9pbmIgID0gaWRlX21tX2luYjsKKwl9IGVsc2UgeworCQl0Zl9vdXRiID0gaWRlX291dGI7CisJCXRmX2luYiAgPSBpZGVfaW5iOworCX0KKworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9EQVRBKSB7CisJCXUxNiBkYXRhOworCisJCWlmIChtbWlvKQorCQkJZGF0YSA9IHJlYWR3KCh2b2lkIF9faW9tZW0gKilpb19wb3J0cy0+ZGF0YV9hZGRyKTsKKwkJZWxzZQorCQkJZGF0YSA9IGludyhpb19wb3J0cy0+ZGF0YV9hZGRyKTsKKworCQl0Zi0+ZGF0YSA9IGRhdGEgJiAweGZmOworCQl0Zi0+aG9iX2RhdGEgPSAoZGF0YSA+PiA4KSAmIDB4ZmY7CisJfQorCisJLyogYmUgc3VyZSB3ZSdyZSBsb29raW5nIGF0IHRoZSBsb3cgb3JkZXIgYml0cyAqLworCXRmX291dGIoQVRBX0RFVkNUTF9PQlMgJiB+MHg4MCwgaW9fcG9ydHMtPmN0bF9hZGRyKTsKKworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9GRUFUVVJFKQorCQl0Zi0+ZmVhdHVyZSA9IHRmX2luYihpb19wb3J0cy0+ZmVhdHVyZV9hZGRyKTsKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTlNFQ1QpCisJCXRmLT5uc2VjdCAgPSB0Zl9pbmIoaW9fcG9ydHMtPm5zZWN0X2FkZHIpOworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFMKQorCQl0Zi0+bGJhbCAgID0gdGZfaW5iKGlvX3BvcnRzLT5sYmFsX2FkZHIpOworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFNKQorCQl0Zi0+bGJhbSAgID0gdGZfaW5iKGlvX3BvcnRzLT5sYmFtX2FkZHIpOworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFIKQorCQl0Zi0+bGJhaCAgID0gdGZfaW5iKGlvX3BvcnRzLT5sYmFoX2FkZHIpOworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9ERVZJQ0UpCisJCXRmLT5kZXZpY2UgPSB0Zl9pbmIoaW9fcG9ydHMtPmRldmljZV9hZGRyKTsKKworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19MQkE0OCkgeworCQl0Zl9vdXRiKEFUQV9ERVZDVExfT0JTIHwgMHg4MCwgaW9fcG9ydHMtPmN0bF9hZGRyKTsKKworCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0ZFQVRVUkUpCisJCQl0Zi0+aG9iX2ZlYXR1cmUgPSB0Zl9pbmIoaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7CisJCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTlNFQ1QpCisJCQl0Zi0+aG9iX25zZWN0ICAgPSB0Zl9pbmIoaW9fcG9ydHMtPm5zZWN0X2FkZHIpOworCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQUwpCisJCQl0Zi0+aG9iX2xiYWwgICAgPSB0Zl9pbmIoaW9fcG9ydHMtPmxiYWxfYWRkcik7CisJCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTEJBTSkKKwkJCXRmLT5ob2JfbGJhbSAgICA9IHRmX2luYihpb19wb3J0cy0+bGJhbV9hZGRyKTsKKwkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFIKQorCQkJdGYtPmhvYl9sYmFoICAgID0gdGZfaW5iKGlvX3BvcnRzLT5sYmFoX2FkZHIpOworCX0KK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlkZV90Zl9yZWFkKTsKKworLyoKKyAqIFNvbWUgbG9jYWxidXMgRUlERSBpbnRlcmZhY2VzIHJlcXVpcmUgYSBzcGVjaWFsIGFjY2VzcyBzZXF1ZW5jZQorICogd2hlbiB1c2luZyAzMi1iaXQgSS9PIGluc3RydWN0aW9ucyB0byB0cmFuc2ZlciBkYXRhLiAgV2UgY2FsbCB0aGlzCisgKiB0aGUgInZsYl9zeW5jIiBzZXF1ZW5jZSwgd2hpY2ggY29uc2lzdHMgb2YgdGhyZWUgc3VjY2Vzc2l2ZSByZWFkcworICogb2YgdGhlIHNlY3RvciBjb3VudCByZWdpc3RlciBsb2NhdGlvbiwgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkCisgKiB0byBlbnN1cmUgdGhhdCB0aGUgcmVhZHMgYWxsIGhhcHBlbiB0b2dldGhlci4KKyAqLworc3RhdGljIHZvaWQgYXRhX3ZsYl9zeW5jKHVuc2lnbmVkIGxvbmcgcG9ydCkKK3sKKwkodm9pZClpbmIocG9ydCk7CisJKHZvaWQpaW5iKHBvcnQpOworCSh2b2lkKWluYihwb3J0KTsKK30KKworLyoKKyAqIFRoaXMgaXMgdXNlZCBmb3IgbW9zdCBQSU8gZGF0YSB0cmFuc2ZlcnMgKmZyb20qIHRoZSBJREUgaW50ZXJmYWNlCisgKgorICogVGhlc2Ugcm91dGluZXMgd2lsbCByb3VuZCB1cCBhbnkgcmVxdWVzdCBmb3IgYW4gb2RkIG51bWJlciBvZiBieXRlcywKKyAqIHNvIGlmIGFuIG9kZCBsZW4gaXMgc3BlY2lmaWVkLCBiZSBzdXJlIHRoYXQgdGhlcmUncyBhdCBsZWFzdCBvbmUKKyAqIGV4dHJhIGJ5dGUgYWxsb2NhdGVkIGZvciB0aGUgYnVmZmVyLgorICovCit2b2lkIGlkZV9pbnB1dF9kYXRhKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLCB2b2lkICpidWYsCisJCSAgICB1bnNpZ25lZCBpbnQgbGVuKQoreworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwlzdHJ1Y3QgaWRlX2lvX3BvcnRzICppb19wb3J0cyA9ICZod2lmLT5pb19wb3J0czsKKwl1bnNpZ25lZCBsb25nIGRhdGFfYWRkciA9IGlvX3BvcnRzLT5kYXRhX2FkZHI7CisJdTggaW9fMzJiaXQgPSBkcml2ZS0+aW9fMzJiaXQ7CisJdTggbW1pbyA9IChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX01NSU8pID8gMSA6IDA7CisKKwlsZW4rKzsKKworCWlmIChpb18zMmJpdCkgeworCQl1bnNpZ25lZCBsb25nIHVuaW5pdGlhbGl6ZWRfdmFyKGZsYWdzKTsKKworCQlpZiAoKGlvXzMyYml0ICYgMikgJiYgIW1taW8pIHsKKwkJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkJCWF0YV92bGJfc3luYyhpb19wb3J0cy0+bnNlY3RfYWRkcik7CisJCX0KKworCQlpZiAobW1pbykKKwkJCV9faWRlX21tX2luc2woKHZvaWQgX19pb21lbSAqKWRhdGFfYWRkciwgYnVmLCBsZW4gLyA0KTsKKwkJZWxzZQorCQkJaW5zbChkYXRhX2FkZHIsIGJ1ZiwgbGVuIC8gNCk7CisKKwkJaWYgKChpb18zMmJpdCAmIDIpICYmICFtbWlvKQorCQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJCWlmICgobGVuICYgMykgPj0gMikgeworCQkJaWYgKG1taW8pCisJCQkJX19pZGVfbW1faW5zdygodm9pZCBfX2lvbWVtICopZGF0YV9hZGRyLAorCQkJCQkJKHU4ICopYnVmICsgKGxlbiAmIH4zKSwgMSk7CisJCQllbHNlCisJCQkJaW5zdyhkYXRhX2FkZHIsICh1OCAqKWJ1ZiArIChsZW4gJiB+MyksIDEpOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKG1taW8pCisJCQlfX2lkZV9tbV9pbnN3KCh2b2lkIF9faW9tZW0gKilkYXRhX2FkZHIsIGJ1ZiwgbGVuIC8gMik7CisJCWVsc2UKKwkJCWluc3coZGF0YV9hZGRyLCBidWYsIGxlbiAvIDIpOworCX0KK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlkZV9pbnB1dF9kYXRhKTsKKworLyoKKyAqIFRoaXMgaXMgdXNlZCBmb3IgbW9zdCBQSU8gZGF0YSB0cmFuc2ZlcnMgKnRvKiB0aGUgSURFIGludGVyZmFjZQorICovCit2b2lkIGlkZV9vdXRwdXRfZGF0YShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwgdm9pZCAqYnVmLAorCQkgICAgIHVuc2lnbmVkIGludCBsZW4pCit7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCXN0cnVjdCBpZGVfaW9fcG9ydHMgKmlvX3BvcnRzID0gJmh3aWYtPmlvX3BvcnRzOworCXVuc2lnbmVkIGxvbmcgZGF0YV9hZGRyID0gaW9fcG9ydHMtPmRhdGFfYWRkcjsKKwl1OCBpb18zMmJpdCA9IGRyaXZlLT5pb18zMmJpdDsKKwl1OCBtbWlvID0gKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTU1JTykgPyAxIDogMDsKKworCWxlbisrOworCisJaWYgKGlvXzMyYml0KSB7CisJCXVuc2lnbmVkIGxvbmcgdW5pbml0aWFsaXplZF92YXIoZmxhZ3MpOworCisJCWlmICgoaW9fMzJiaXQgJiAyKSAmJiAhbW1pbykgeworCQkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCQkJYXRhX3ZsYl9zeW5jKGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKKwkJfQorCisJCWlmIChtbWlvKQorCQkJX19pZGVfbW1fb3V0c2woKHZvaWQgX19pb21lbSAqKWRhdGFfYWRkciwgYnVmLCBsZW4gLyA0KTsKKwkJZWxzZQorCQkJb3V0c2woZGF0YV9hZGRyLCBidWYsIGxlbiAvIDQpOworCisJCWlmICgoaW9fMzJiaXQgJiAyKSAmJiAhbW1pbykKKwkJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCQlpZiAoKGxlbiAmIDMpID49IDIpIHsKKwkJCWlmIChtbWlvKQorCQkJCV9faWRlX21tX291dHN3KCh2b2lkIF9faW9tZW0gKilkYXRhX2FkZHIsCisJCQkJCQkgKHU4ICopYnVmICsgKGxlbiAmIH4zKSwgMSk7CisJCQllbHNlCisJCQkJb3V0c3coZGF0YV9hZGRyLCAodTggKilidWYgKyAobGVuICYgfjMpLCAxKTsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChtbWlvKQorCQkJX19pZGVfbW1fb3V0c3coKHZvaWQgX19pb21lbSAqKWRhdGFfYWRkciwgYnVmLCBsZW4gLyAyKTsKKwkJZWxzZQorCQkJb3V0c3coZGF0YV9hZGRyLCBidWYsIGxlbiAvIDIpOworCX0KK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlkZV9vdXRwdXRfZGF0YSk7CisKK2NvbnN0IHN0cnVjdCBpZGVfdHBfb3BzIGRlZmF1bHRfdHBfb3BzID0geworCS5leGVjX2NvbW1hbmQJCT0gaWRlX2V4ZWNfY29tbWFuZCwKKwkucmVhZF9zdGF0dXMJCT0gaWRlX3JlYWRfc3RhdHVzLAorCS5yZWFkX2FsdHN0YXR1cwkJPSBpZGVfcmVhZF9hbHRzdGF0dXMsCisKKwkuc2V0X2lycQkJPSBpZGVfc2V0X2lycSwKKworCS50Zl9sb2FkCQk9IGlkZV90Zl9sb2FkLAorCS50Zl9yZWFkCQk9IGlkZV90Zl9yZWFkLAorCisJLmlucHV0X2RhdGEJCT0gaWRlX2lucHV0X2RhdGEsCisJLm91dHB1dF9kYXRhCQk9IGlkZV9vdXRwdXRfZGF0YSwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtaW8uYyBiL2RyaXZlcnMvaWRlL2lkZS1pby5jCmluZGV4IGE5YTZjMjAuLjJlOTI0OTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1pby5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1pby5jCkBAIC0xOTYsNyArMTk2LDcgQEAKIH0KIEVYUE9SVF9TWU1CT0woaWRlX2VuZF9kcml2ZV9jbWQpOwogCi1zdGF0aWMgdm9pZCBpZGVfa2lsbF9ycShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSkKK3ZvaWQgaWRlX2tpbGxfcnEoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7CiAJaWYgKHJxLT5ycV9kaXNrKSB7CiAJCXN0cnVjdCBpZGVfZHJpdmVyICpkcnY7CkBAIC0yMDcsMTMzICsyMDcsNiBAQAogCQlpZGVfZW5kX3JlcXVlc3QoZHJpdmUsIDAsIDApOwogfQogCi1zdGF0aWMgaWRlX3N0YXJ0c3RvcF90IGlkZV9hdGFfZXJyb3IoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsIHU4IHN0YXQsIHU4IGVycikKLXsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0KLQlpZiAoKHN0YXQgJiBBVEFfQlVTWSkgfHwKLQkgICAgKChzdGF0ICYgQVRBX0RGKSAmJiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19OT1dFUlIpID09IDApKSB7Ci0JCS8qIG90aGVyIGJpdHMgYXJlIHVzZWxlc3Mgd2hlbiBCVVNZICovCi0JCXJxLT5lcnJvcnMgfD0gRVJST1JfUkVTRVQ7Ci0JfSBlbHNlIGlmIChzdGF0ICYgQVRBX0VSUikgewotCQkvKiBlcnIgaGFzIGRpZmZlcmVudCBtZWFuaW5nIG9uIGNkcm9tIGFuZCB0YXBlICovCi0JCWlmIChlcnIgPT0gQVRBX0FCT1JURUQpIHsKLQkJCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19MQkEpICYmCi0JCQkgICAgLyogc29tZSBuZXdlciBkcml2ZXMgZG9uJ3Qgc3VwcG9ydCBBVEFfQ01EX0lOSVRfREVWX1BBUkFNUyAqLwotCQkJICAgIGh3aWYtPnRwX29wcy0+cmVhZF9zdGF0dXMoaHdpZikgPT0gQVRBX0NNRF9JTklUX0RFVl9QQVJBTVMpCi0JCQkJcmV0dXJuIGlkZV9zdG9wcGVkOwotCQl9IGVsc2UgaWYgKChlcnIgJiBCQURfQ1JDKSA9PSBCQURfQ1JDKSB7Ci0JCQkvKiBVRE1BIGNyYyBlcnJvciwganVzdCByZXRyeSB0aGUgb3BlcmF0aW9uICovCi0JCQlkcml2ZS0+Y3JjX2NvdW50Kys7Ci0JCX0gZWxzZSBpZiAoZXJyICYgKEFUQV9CQksgfCBBVEFfVU5DKSkgewotCQkJLyogcmV0cmllcyB3b24ndCBoZWxwIHRoZXNlICovCi0JCQlycS0+ZXJyb3JzID0gRVJST1JfTUFYOwotCQl9IGVsc2UgaWYgKGVyciAmIEFUQV9UUkswTkYpIHsKLQkJCS8qIGhlbHAgaXQgZmluZCB0cmFjayB6ZXJvICovCi0JCQlycS0+ZXJyb3JzIHw9IEVSUk9SX1JFQ0FMOwotCQl9Ci0JfQotCi0JaWYgKChzdGF0ICYgQVRBX0RSUSkgJiYgcnFfZGF0YV9kaXIocnEpID09IFJFQUQgJiYKLQkgICAgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfRVJST1JfU1RPUFNfRklGTykgPT0gMCkgewotCQlpbnQgbnNlY3QgPSBkcml2ZS0+bXVsdF9jb3VudCA/IGRyaXZlLT5tdWx0X2NvdW50IDogMTsKLQotCQlpZGVfcGFkX3RyYW5zZmVyKGRyaXZlLCBSRUFELCBuc2VjdCAqIFNFQ1RPUl9TSVpFKTsKLQl9Ci0KLQlpZiAocnEtPmVycm9ycyA+PSBFUlJPUl9NQVggfHwgYmxrX25vcmV0cnlfcmVxdWVzdChycSkpIHsKLQkJaWRlX2tpbGxfcnEoZHJpdmUsIHJxKTsKLQkJcmV0dXJuIGlkZV9zdG9wcGVkOwotCX0KLQotCWlmIChod2lmLT50cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpICYgKEFUQV9CVVNZIHwgQVRBX0RSUSkpCi0JCXJxLT5lcnJvcnMgfD0gRVJST1JfUkVTRVQ7Ci0KLQlpZiAoKHJxLT5lcnJvcnMgJiBFUlJPUl9SRVNFVCkgPT0gRVJST1JfUkVTRVQpIHsKLQkJKytycS0+ZXJyb3JzOwotCQlyZXR1cm4gaWRlX2RvX3Jlc2V0KGRyaXZlKTsKLQl9Ci0KLQlpZiAoKHJxLT5lcnJvcnMgJiBFUlJPUl9SRUNBTCkgPT0gRVJST1JfUkVDQUwpCi0JCWRyaXZlLT5zcGVjaWFsLmIucmVjYWxpYnJhdGUgPSAxOwotCi0JKytycS0+ZXJyb3JzOwotCi0JcmV0dXJuIGlkZV9zdG9wcGVkOwotfQotCi1zdGF0aWMgaWRlX3N0YXJ0c3RvcF90IGlkZV9hdGFwaV9lcnJvcihpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwgdTggc3RhdCwgdTggZXJyKQotewotCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQotCWlmICgoc3RhdCAmIEFUQV9CVVNZKSB8fAotCSAgICAoKHN0YXQgJiBBVEFfREYpICYmIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX05PV0VSUikgPT0gMCkpIHsKLQkJLyogb3RoZXIgYml0cyBhcmUgdXNlbGVzcyB3aGVuIEJVU1kgKi8KLQkJcnEtPmVycm9ycyB8PSBFUlJPUl9SRVNFVDsKLQl9IGVsc2UgewotCQkvKiBhZGQgZGVjb2RpbmcgZXJyb3Igc3R1ZmYgKi8KLQl9Ci0KLQlpZiAoaHdpZi0+dHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKSAmIChBVEFfQlVTWSB8IEFUQV9EUlEpKQotCQkvKiBmb3JjZSBhbiBhYm9ydCAqLwotCQlod2lmLT50cF9vcHMtPmV4ZWNfY29tbWFuZChod2lmLCBBVEFfQ01EX0lETEVJTU1FRElBVEUpOwotCi0JaWYgKHJxLT5lcnJvcnMgPj0gRVJST1JfTUFYKSB7Ci0JCWlkZV9raWxsX3JxKGRyaXZlLCBycSk7Ci0JfSBlbHNlIHsKLQkJaWYgKChycS0+ZXJyb3JzICYgRVJST1JfUkVTRVQpID09IEVSUk9SX1JFU0VUKSB7Ci0JCQkrK3JxLT5lcnJvcnM7Ci0JCQlyZXR1cm4gaWRlX2RvX3Jlc2V0KGRyaXZlKTsKLQkJfQotCQkrK3JxLT5lcnJvcnM7Ci0JfQotCi0JcmV0dXJuIGlkZV9zdG9wcGVkOwotfQotCi1zdGF0aWMgaWRlX3N0YXJ0c3RvcF90Ci1fX2lkZV9lcnJvcihpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwgdTggc3RhdCwgdTggZXJyKQotewotCWlmIChkcml2ZS0+bWVkaWEgPT0gaWRlX2Rpc2spCi0JCXJldHVybiBpZGVfYXRhX2Vycm9yKGRyaXZlLCBycSwgc3RhdCwgZXJyKTsKLQlyZXR1cm4gaWRlX2F0YXBpX2Vycm9yKGRyaXZlLCBycSwgc3RhdCwgZXJyKTsKLX0KLQotLyoqCi0gKglpZGVfZXJyb3IJLQloYW5kbGUgYW4gZXJyb3Igb24gdGhlIElERQotICoJQGRyaXZlOiBkcml2ZSB0aGUgZXJyb3Igb2NjdXJyZWQgb24KLSAqCUBtc2c6IG1lc3NhZ2UgdG8gcmVwb3J0Ci0gKglAc3RhdDogc3RhdHVzIGJpdHMKLSAqCi0gKglpZGVfZXJyb3IoKSB0YWtlcyBhY3Rpb24gYmFzZWQgb24gdGhlIGVycm9yIHJldHVybmVkIGJ5IHRoZSBkcml2ZS4KLSAqCUZvciBub3JtYWwgSS9PIHRoYXQgbWF5IHdlbGwgaW5jbHVkZSByZXRyaWVzLiBXZSBkZWFsIHdpdGgKLSAqCWJvdGggbmV3LXN0eWxlICh0YXNrZmlsZSkgYW5kIG9sZCBzdHlsZSBjb21tYW5kIGhhbmRsaW5nIGhlcmUuCi0gKglJbiB0aGUgY2FzZSBvZiB0YXNrZmlsZSBjb21tYW5kIGhhbmRsaW5nIHRoZXJlIGlzIHdvcmsgbGVmdCB0bwotICoJZG8KLSAqLwotIAotaWRlX3N0YXJ0c3RvcF90IGlkZV9lcnJvciAoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCBjaGFyICptc2csIHU4IHN0YXQpCi17Ci0Jc3RydWN0IHJlcXVlc3QgKnJxOwotCXU4IGVycjsKLQotCWVyciA9IGlkZV9kdW1wX3N0YXR1cyhkcml2ZSwgbXNnLCBzdGF0KTsKLQotCXJxID0gZHJpdmUtPmh3aWYtPnJxOwotCWlmIChycSA9PSBOVUxMKQotCQlyZXR1cm4gaWRlX3N0b3BwZWQ7Ci0KLQkvKiByZXRyeSBvbmx5ICJub3JtYWwiIEkvTzogKi8KLQlpZiAoIWJsa19mc19yZXF1ZXN0KHJxKSkgewotCQlycS0+ZXJyb3JzID0gMTsKLQkJaWRlX2VuZF9kcml2ZV9jbWQoZHJpdmUsIHN0YXQsIGVycik7Ci0JCXJldHVybiBpZGVfc3RvcHBlZDsKLQl9Ci0KLQlyZXR1cm4gX19pZGVfZXJyb3IoZHJpdmUsIHJxLCBzdGF0LCBlcnIpOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2Vycm9yKTsKLQogc3RhdGljIHZvaWQgaWRlX3RmX3NldF9zcGVjaWZ5X2NtZChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmKQogewogCXRmLT5uc2VjdCAgID0gZHJpdmUtPnNlY3Q7CkBAIC00OTAsNzEgKzM2MywxNiBAQAogIAlyZXR1cm4gaWRlX3N0b3BwZWQ7CiB9CiAKLWludCBpZGVfZGV2c2V0X2V4ZWN1dGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCBzdHJ1Y3QgaWRlX2RldnNldCAqc2V0dGluZywKLQkJICAgICAgIGludCBhcmcpCi17Ci0Jc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBkcml2ZS0+cXVldWU7Ci0Jc3RydWN0IHJlcXVlc3QgKnJxOwotCWludCByZXQgPSAwOwotCi0JaWYgKCEoc2V0dGluZy0+ZmxhZ3MgJiBEU19TWU5DKSkKLQkJcmV0dXJuIHNldHRpbmctPnNldChkcml2ZSwgYXJnKTsKLQotCXJxID0gYmxrX2dldF9yZXF1ZXN0KHEsIFJFQUQsIF9fR0ZQX1dBSVQpOwotCXJxLT5jbWRfdHlwZSA9IFJFUV9UWVBFX1NQRUNJQUw7Ci0JcnEtPmNtZF9sZW4gPSA1OwotCXJxLT5jbWRbMF0gPSBSRVFfREVWU0VUX0VYRUM7Ci0JKihpbnQgKikmcnEtPmNtZFsxXSA9IGFyZzsKLQlycS0+c3BlY2lhbCA9IHNldHRpbmctPnNldDsKLQotCWlmIChibGtfZXhlY3V0ZV9ycShxLCBOVUxMLCBycSwgMCkpCi0JCXJldCA9IHJxLT5lcnJvcnM7Ci0JYmxrX3B1dF9yZXF1ZXN0KHJxKTsKLQotCXJldHVybiByZXQ7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpZGVfZGV2c2V0X2V4ZWN1dGUpOwotCiBzdGF0aWMgaWRlX3N0YXJ0c3RvcF90IGlkZV9zcGVjaWFsX3JxKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxKQogewogCXU4IGNtZCA9IHJxLT5jbWRbMF07CiAKLQlpZiAoY21kID09IFJFUV9QQVJLX0hFQURTIHx8IGNtZCA9PSBSRVFfVU5QQVJLX0hFQURTKSB7Ci0JCWlkZV90YXNrX3QgdGFzazsKLQkJc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmdGFzay50ZjsKLQotCQltZW1zZXQoJnRhc2ssIDAsIHNpemVvZih0YXNrKSk7Ci0JCWlmIChjbWQgPT0gUkVRX1BBUktfSEVBRFMpIHsKLQkJCWRyaXZlLT5zbGVlcCA9ICoodW5zaWduZWQgbG9uZyAqKXJxLT5zcGVjaWFsOwotCQkJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfU0xFRVBJTkc7Ci0JCQl0Zi0+Y29tbWFuZCA9IEFUQV9DTURfSURMRUlNTUVESUFURTsKLQkJCXRmLT5mZWF0dXJlID0gMHg0NDsKLQkJCXRmLT5sYmFsID0gMHg0YzsKLQkJCXRmLT5sYmFtID0gMHg0ZTsKLQkJCXRmLT5sYmFoID0gMHg1NTsKLQkJCXRhc2sudGZfZmxhZ3MgfD0gSURFX1RGTEFHX0NVU1RPTV9IQU5ETEVSOwotCQl9IGVsc2UJCS8qIGNtZCA9PSBSRVFfVU5QQVJLX0hFQURTICovCi0JCQl0Zi0+Y29tbWFuZCA9IEFUQV9DTURfQ0hLX1BPV0VSOwotCi0JCXRhc2sudGZfZmxhZ3MgfD0gSURFX1RGTEFHX1RGIHwgSURFX1RGTEFHX0RFVklDRTsKLQkJdGFzay5ycSA9IHJxOwotCQlkcml2ZS0+aHdpZi0+ZGF0YV9waGFzZSA9IHRhc2suZGF0YV9waGFzZSA9IFRBU0tGSUxFX05PX0RBVEE7Ci0JCXJldHVybiBkb19yd190YXNrZmlsZShkcml2ZSwgJnRhc2spOwotCX0KLQogCXN3aXRjaCAoY21kKSB7CisJY2FzZSBSRVFfUEFSS19IRUFEUzoKKwljYXNlIFJFUV9VTlBBUktfSEVBRFM6CisJCXJldHVybiBpZGVfZG9fcGFya191bnBhcmsoZHJpdmUsIHJxKTsKIAljYXNlIFJFUV9ERVZTRVRfRVhFQzoKLQl7Ci0JCWludCBlcnIsICgqc2V0ZnVuYykoaWRlX2RyaXZlX3QgKiwgaW50KSA9IHJxLT5zcGVjaWFsOwotCi0JCWVyciA9IHNldGZ1bmMoZHJpdmUsICooaW50ICopJnJxLT5jbWRbMV0pOwotCQlpZiAoZXJyKQotCQkJcnEtPmVycm9ycyA9IGVycjsKLQkJZWxzZQotCQkJZXJyID0gMTsKLQkJaWRlX2VuZF9yZXF1ZXN0KGRyaXZlLCBlcnIsIDApOwotCQlyZXR1cm4gaWRlX3N0b3BwZWQ7Ci0JfQorCQlyZXR1cm4gaWRlX2RvX2RldnNldChkcml2ZSwgcnEpOwogCWNhc2UgUkVRX0RSSVZFX1JFU0VUOgogCQlyZXR1cm4gaWRlX2RvX3Jlc2V0KGRyaXZlKTsKIAlkZWZhdWx0OgpAQCAtODIwLDYzICs2MzgsNiBAQAogCQlibGtfcGx1Z19kZXZpY2UocSk7CiB9CiAKLS8qCi0gKiB1bi1idXN5IHRoZSBwb3J0IGV0YywgYW5kIGNsZWFyIGFueSBwZW5kaW5nIERNQSBzdGF0dXMuIHdlIHdhbnQgdG8KLSAqIHJldHJ5IHRoZSBjdXJyZW50IHJlcXVlc3QgaW4gcGlvIG1vZGUgaW5zdGVhZCBvZiByaXNraW5nIHRvc3NpbmcgaXQKLSAqIGFsbCBhd2F5Ci0gKi8KLXN0YXRpYyBpZGVfc3RhcnRzdG9wX3QgaWRlX2RtYV90aW1lb3V0X3JldHJ5KGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGVycm9yKQotewotCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQlzdHJ1Y3QgcmVxdWVzdCAqcnE7Ci0JaWRlX3N0YXJ0c3RvcF90IHJldCA9IGlkZV9zdG9wcGVkOwotCi0JLyoKLQkgKiBlbmQgY3VycmVudCBkbWEgdHJhbnNhY3Rpb24KLQkgKi8KLQotCWlmIChlcnJvciA8IDApIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IERNQSB0aW1lb3V0IGVycm9yXG4iLCBkcml2ZS0+bmFtZSk7Ci0JCSh2b2lkKWh3aWYtPmRtYV9vcHMtPmRtYV9lbmQoZHJpdmUpOwotCQlyZXQgPSBpZGVfZXJyb3IoZHJpdmUsICJkbWEgdGltZW91dCBlcnJvciIsCi0JCQkJaHdpZi0+dHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKSk7Ci0JfSBlbHNlIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IERNQSB0aW1lb3V0IHJldHJ5XG4iLCBkcml2ZS0+bmFtZSk7Ci0JCWh3aWYtPmRtYV9vcHMtPmRtYV90aW1lb3V0KGRyaXZlKTsKLQl9Ci0KLQkvKgotCSAqIGRpc2FibGUgZG1hIGZvciBub3csIGJ1dCByZW1lbWJlciB0aGF0IHdlIGRpZCBzbyBiZWNhdXNlIG9mCi0JICogYSB0aW1lb3V0IC0tIHdlJ2xsIHJlZW5hYmxlIGFmdGVyIHdlIGZpbmlzaCB0aGlzIG5leHQgcmVxdWVzdAotCSAqIChvciByYXRoZXIgdGhlIGZpcnN0IGNodW5rIG9mIGl0KSBpbiBwaW8uCi0JICovCi0JZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfRE1BX1BJT19SRVRSWTsKLQlkcml2ZS0+cmV0cnlfcGlvKys7Ci0JaWRlX2RtYV9vZmZfcXVpZXRseShkcml2ZSk7Ci0KLQkvKgotCSAqIHVuLWJ1c3kgZHJpdmUgZXRjIGFuZCBtYWtlIHN1cmUgcmVxdWVzdCBpcyBzYW5lCi0JICovCi0KLQlycSA9IGh3aWYtPnJxOwotCWlmICghcnEpCi0JCWdvdG8gb3V0OwotCi0JaHdpZi0+cnEgPSBOVUxMOwotCi0JcnEtPmVycm9ycyA9IDA7Ci0KLQlpZiAoIXJxLT5iaW8pCi0JCWdvdG8gb3V0OwotCi0JcnEtPnNlY3RvciA9IHJxLT5iaW8tPmJpX3NlY3RvcjsKLQlycS0+Y3VycmVudF9ucl9zZWN0b3JzID0gYmlvX2lvdmVjKHJxLT5iaW8pLT5idl9sZW4gPj4gOTsKLQlycS0+aGFyZF9jdXJfc2VjdG9ycyA9IHJxLT5jdXJyZW50X25yX3NlY3RvcnM7Ci0JcnEtPmJ1ZmZlciA9IGJpb19kYXRhKHJxLT5iaW8pOwotb3V0OgotCXJldHVybiByZXQ7Ci19Ci0KIHN0YXRpYyB2b2lkIGlkZV9wbHVnX2RldmljZShpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBkcml2ZS0+cXVldWU7CkBAIC04ODgsNiArNjQ5LDI5IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShxLT5xdWV1ZV9sb2NrLCBmbGFncyk7CiB9CiAKK3N0YXRpYyBpbnQgZHJpdmVfaXNfcmVhZHkoaWRlX2RyaXZlX3QgKmRyaXZlKQoreworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwl1OCBzdGF0ID0gMDsKKworCWlmIChkcml2ZS0+d2FpdGluZ19mb3JfZG1hKQorCQlyZXR1cm4gaHdpZi0+ZG1hX29wcy0+ZG1hX3Rlc3RfaXJxKGRyaXZlKTsKKworCWlmIChod2lmLT5pb19wb3J0cy5jdGxfYWRkciAmJgorCSAgICAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19CUk9LRU5fQUxUU1RBVFVTKSA9PSAwKQorCQlzdGF0ID0gaHdpZi0+dHBfb3BzLT5yZWFkX2FsdHN0YXR1cyhod2lmKTsKKwllbHNlCisJCS8qIE5vdGU6IHRoaXMgbWF5IGNsZWFyIGEgcGVuZGluZyBJUlEhISAqLworCQlzdGF0ID0gaHdpZi0+dHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKTsKKworCWlmIChzdGF0ICYgQVRBX0JVU1kpCisJCS8qIGRyaXZlIGJ1c3k6IGRlZmluaXRlbHkgbm90IGludGVycnVwdGluZyAqLworCQlyZXR1cm4gMDsKKworCS8qIGRyaXZlIHJlYWR5OiAqbWlnaHQqIGJlIGludGVycnVwdGluZyAqLworCXJldHVybiAxOworfQorCiAvKioKICAqCWlkZV90aW1lcl9leHBpcnkJLQloYW5kbGUgbGFjayBvZiBhbiBJREUgaW50ZXJydXB0CiAgKglAZGF0YTogdGltZXIgY2FsbGJhY2sgbWFnaWMgKGh3aWYpCkBAIC0xMTY0LDU0ICs5NDgsNiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2ludHIpOwogCi0vKioKLSAqCWlkZV9kb19kcml2ZV9jbWQJLQlpc3N1ZSBJREUgc3BlY2lhbCBjb21tYW5kCi0gKglAZHJpdmU6IGRldmljZSB0byBpc3N1ZSBjb21tYW5kCi0gKglAcnE6IHJlcXVlc3QgdG8gaXNzdWUKLSAqCi0gKglUaGlzIGZ1bmN0aW9uIGlzc3VlcyBhIHNwZWNpYWwgSURFIGRldmljZSByZXF1ZXN0Ci0gKglvbnRvIHRoZSByZXF1ZXN0IHF1ZXVlLgotICoKLSAqCXRoZSBycSBpcyBxdWV1ZWQgYXQgdGhlIGhlYWQgb2YgdGhlIHJlcXVlc3QgcXVldWUsIGRpc3BsYWNpbmcKLSAqCXRoZSBjdXJyZW50bHktYmVpbmctcHJvY2Vzc2VkIHJlcXVlc3QgYW5kIHRoaXMgZnVuY3Rpb24KLSAqCXJldHVybnMgaW1tZWRpYXRlbHkgd2l0aG91dCB3YWl0aW5nIGZvciB0aGUgbmV3IHJxIHRvIGJlCi0gKgljb21wbGV0ZWQuICBUaGlzIGlzIFZFUlkgREFOR0VST1VTLCBhbmQgaXMgaW50ZW5kZWQgZm9yCi0gKgljYXJlZnVsIHVzZSBieSB0aGUgQVRBUEkgdGFwZS9jZHJvbSBkcml2ZXIgY29kZS4KLSAqLwotCi12b2lkIGlkZV9kb19kcml2ZV9jbWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCi17Ci0Jc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBkcml2ZS0+cXVldWU7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWRyaXZlLT5od2lmLT5ycSA9IE5VTEw7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZShxLT5xdWV1ZV9sb2NrLCBmbGFncyk7Ci0JX19lbHZfYWRkX3JlcXVlc3QocSwgcnEsIEVMRVZBVE9SX0lOU0VSVF9GUk9OVCwgMCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShxLT5xdWV1ZV9sb2NrLCBmbGFncyk7Ci19Ci1FWFBPUlRfU1lNQk9MKGlkZV9kb19kcml2ZV9jbWQpOwotCi12b2lkIGlkZV9wa3RjbWRfdGZfbG9hZChpZGVfZHJpdmVfdCAqZHJpdmUsIHUzMiB0Zl9mbGFncywgdTE2IGJjb3VudCwgdTggZG1hKQotewotCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQlpZGVfdGFza190IHRhc2s7Ci0KLQltZW1zZXQoJnRhc2ssIDAsIHNpemVvZih0YXNrKSk7Ci0JdGFzay50Zl9mbGFncyA9IElERV9URkxBR19PVVRfTEJBSCB8IElERV9URkxBR19PVVRfTEJBTSB8Ci0JCQlJREVfVEZMQUdfT1VUX0ZFQVRVUkUgfCB0Zl9mbGFnczsKLQl0YXNrLnRmLmZlYXR1cmUgPSBkbWE7CQkvKiBVc2UgUElPL0RNQSAqLwotCXRhc2sudGYubGJhbSAgICA9IGJjb3VudCAmIDB4ZmY7Ci0JdGFzay50Zi5sYmFoICAgID0gKGJjb3VudCA+PiA4KSAmIDB4ZmY7Ci0KLQlpZGVfdGZfZHVtcChkcml2ZS0+bmFtZSwgJnRhc2sudGYpOwotCWh3aWYtPnRwX29wcy0+c2V0X2lycShod2lmLCAxKTsKLQlTRUxFQ1RfTUFTSyhkcml2ZSwgMCk7Ci0JaHdpZi0+dHBfb3BzLT50Zl9sb2FkKGRyaXZlLCAmdGFzayk7Ci19Ci0KLUVYUE9SVF9TWU1CT0xfR1BMKGlkZV9wa3RjbWRfdGZfbG9hZCk7Ci0KIHZvaWQgaWRlX3BhZF90cmFuc2ZlcihpZGVfZHJpdmVfdCAqZHJpdmUsIGludCB3cml0ZSwgaW50IGxlbikKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtaW9wcy5jIGIvZHJpdmVycy9pZGUvaWRlLWlvcHMuYwppbmRleCBiMTg5MmJkLi4zMTdjNWRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtaW9wcy5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1pb3BzLmMKQEAgLTI3LDM1ICsyNyw3IEBACiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIAotLyoKLSAqCUNvbnZlbnRpb25hbCBQSU8gb3BlcmF0aW9ucyBmb3IgQVRBIGRldmljZXMKLSAqLwotCi1zdGF0aWMgdTggaWRlX2luYiAodW5zaWduZWQgbG9uZyBwb3J0KQotewotCXJldHVybiAodTgpIGluYihwb3J0KTsKLX0KLQotc3RhdGljIHZvaWQgaWRlX291dGIgKHU4IHZhbCwgdW5zaWduZWQgbG9uZyBwb3J0KQotewotCW91dGIodmFsLCBwb3J0KTsKLX0KLQotLyoKLSAqCU1NSU8gb3BlcmF0aW9ucywgdHlwaWNhbGx5IHVzZWQgZm9yIFNBVEEgY29udHJvbGxlcnMKLSAqLwotCi1zdGF0aWMgdTggaWRlX21tX2luYiAodW5zaWduZWQgbG9uZyBwb3J0KQotewotCXJldHVybiAodTgpIHJlYWRiKCh2b2lkIF9faW9tZW0gKikgcG9ydCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGlkZV9tbV9vdXRiICh1OCB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KQotewotCXdyaXRlYih2YWx1ZSwgKHZvaWQgX19pb21lbSAqKSBwb3J0KTsKLX0KLQotdm9pZCBTRUxFQ1RfRFJJVkUgKGlkZV9kcml2ZV90ICpkcml2ZSkKK3ZvaWQgU0VMRUNUX0RSSVZFKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJY29uc3Qgc3RydWN0IGlkZV9wb3J0X29wcyAqcG9ydF9vcHMgPSBod2lmLT5wb3J0X29wczsKQEAgLTc4LDI3NyArNTAsNiBAQAogCQlwb3J0X29wcy0+bWFza3Byb2MoZHJpdmUsIG1hc2spOwogfQogCi12b2lkIGlkZV9leGVjX2NvbW1hbmQoaWRlX2h3aWZfdCAqaHdpZiwgdTggY21kKQotewotCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX01NSU8pCi0JCXdyaXRlYihjbWQsICh2b2lkIF9faW9tZW0gKilod2lmLT5pb19wb3J0cy5jb21tYW5kX2FkZHIpOwotCWVsc2UKLQkJb3V0YihjbWQsIGh3aWYtPmlvX3BvcnRzLmNvbW1hbmRfYWRkcik7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpZGVfZXhlY19jb21tYW5kKTsKLQotdTggaWRlX3JlYWRfc3RhdHVzKGlkZV9od2lmX3QgKmh3aWYpCi17Ci0JaWYgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTU1JTykKLQkJcmV0dXJuIHJlYWRiKCh2b2lkIF9faW9tZW0gKilod2lmLT5pb19wb3J0cy5zdGF0dXNfYWRkcik7Ci0JZWxzZQotCQlyZXR1cm4gaW5iKGh3aWYtPmlvX3BvcnRzLnN0YXR1c19hZGRyKTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGlkZV9yZWFkX3N0YXR1cyk7Ci0KLXU4IGlkZV9yZWFkX2FsdHN0YXR1cyhpZGVfaHdpZl90ICpod2lmKQotewotCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX01NSU8pCi0JCXJldHVybiByZWFkYigodm9pZCBfX2lvbWVtICopaHdpZi0+aW9fcG9ydHMuY3RsX2FkZHIpOwotCWVsc2UKLQkJcmV0dXJuIGluYihod2lmLT5pb19wb3J0cy5jdGxfYWRkcik7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpZGVfcmVhZF9hbHRzdGF0dXMpOwotCi12b2lkIGlkZV9zZXRfaXJxKGlkZV9od2lmX3QgKmh3aWYsIGludCBvbikKLXsKLQl1OCBjdGwgPSBBVEFfREVWQ1RMX09CUzsKLQotCWlmIChvbiA9PSA0KSB7IC8qIGhhY2sgZm9yIFNSU1QgKi8KLQkJY3RsIHw9IDQ7Ci0JCW9uICY9IH40OwotCX0KLQotCWN0bCB8PSBvbiA/IDAgOiAyOwotCi0JaWYgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTU1JTykKLQkJd3JpdGViKGN0bCwgKHZvaWQgX19pb21lbSAqKWh3aWYtPmlvX3BvcnRzLmN0bF9hZGRyKTsKLQllbHNlCi0JCW91dGIoY3RsLCBod2lmLT5pb19wb3J0cy5jdGxfYWRkcik7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpZGVfc2V0X2lycSk7Ci0KLXZvaWQgaWRlX3RmX2xvYWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGVfdGFza190ICp0YXNrKQotewotCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQlzdHJ1Y3QgaWRlX2lvX3BvcnRzICppb19wb3J0cyA9ICZod2lmLT5pb19wb3J0czsKLQlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZ0YXNrLT50ZjsKLQl2b2lkICgqdGZfb3V0YikodTggYWRkciwgdW5zaWduZWQgbG9uZyBwb3J0KTsKLQl1OCBtbWlvID0gKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTU1JTykgPyAxIDogMDsKLQl1OCBISUhJID0gKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0xCQTQ4KSA/IDB4RTAgOiAweEVGOwotCi0JaWYgKG1taW8pCi0JCXRmX291dGIgPSBpZGVfbW1fb3V0YjsKLQllbHNlCi0JCXRmX291dGIgPSBpZGVfb3V0YjsKLQotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19GTEFHR0VEKQotCQlISUhJID0gMHhGRjsKLQotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfREFUQSkgewotCQl1MTYgZGF0YSA9ICh0Zi0+aG9iX2RhdGEgPDwgOCkgfCB0Zi0+ZGF0YTsKLQotCQlpZiAobW1pbykKLQkJCXdyaXRldyhkYXRhLCAodm9pZCBfX2lvbWVtICopaW9fcG9ydHMtPmRhdGFfYWRkcik7Ci0JCWVsc2UKLQkJCW91dHcoZGF0YSwgaW9fcG9ydHMtPmRhdGFfYWRkcik7Ci0JfQotCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfRkVBVFVSRSkKLQkJdGZfb3V0Yih0Zi0+aG9iX2ZlYXR1cmUsIGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX05TRUNUKQotCQl0Zl9vdXRiKHRmLT5ob2JfbnNlY3QsIGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9MQkFMKQotCQl0Zl9vdXRiKHRmLT5ob2JfbGJhbCwgaW9fcG9ydHMtPmxiYWxfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTEJBTSkKLQkJdGZfb3V0Yih0Zi0+aG9iX2xiYW0sIGlvX3BvcnRzLT5sYmFtX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0xCQUgpCi0JCXRmX291dGIodGYtPmhvYl9sYmFoLCBpb19wb3J0cy0+bGJhaF9hZGRyKTsKLQotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfRkVBVFVSRSkKLQkJdGZfb3V0Yih0Zi0+ZmVhdHVyZSwgaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9OU0VDVCkKLQkJdGZfb3V0Yih0Zi0+bnNlY3QsIGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQUwpCi0JCXRmX291dGIodGYtPmxiYWwsIGlvX3BvcnRzLT5sYmFsX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTEJBTSkKLQkJdGZfb3V0Yih0Zi0+bGJhbSwgaW9fcG9ydHMtPmxiYW1fYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9MQkFIKQotCQl0Zl9vdXRiKHRmLT5sYmFoLCBpb19wb3J0cy0+bGJhaF9hZGRyKTsKLQotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfREVWSUNFKQotCQl0Zl9vdXRiKCh0Zi0+ZGV2aWNlICYgSElISSkgfCBkcml2ZS0+c2VsZWN0LAotCQkJIGlvX3BvcnRzLT5kZXZpY2VfYWRkcik7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpZGVfdGZfbG9hZCk7Ci0KLXZvaWQgaWRlX3RmX3JlYWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGVfdGFza190ICp0YXNrKQotewotCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQlzdHJ1Y3QgaWRlX2lvX3BvcnRzICppb19wb3J0cyA9ICZod2lmLT5pb19wb3J0czsKLQlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZ0YXNrLT50ZjsKLQl2b2lkICgqdGZfb3V0YikodTggYWRkciwgdW5zaWduZWQgbG9uZyBwb3J0KTsKLQl1OCAoKnRmX2luYikodW5zaWduZWQgbG9uZyBwb3J0KTsKLQl1OCBtbWlvID0gKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTU1JTykgPyAxIDogMDsKLQotCWlmIChtbWlvKSB7Ci0JCXRmX291dGIgPSBpZGVfbW1fb3V0YjsKLQkJdGZfaW5iICA9IGlkZV9tbV9pbmI7Ci0JfSBlbHNlIHsKLQkJdGZfb3V0YiA9IGlkZV9vdXRiOwotCQl0Zl9pbmIgID0gaWRlX2luYjsKLQl9Ci0KLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fREFUQSkgewotCQl1MTYgZGF0YTsKLQotCQlpZiAobW1pbykKLQkJCWRhdGEgPSByZWFkdygodm9pZCBfX2lvbWVtICopaW9fcG9ydHMtPmRhdGFfYWRkcik7Ci0JCWVsc2UKLQkJCWRhdGEgPSBpbncoaW9fcG9ydHMtPmRhdGFfYWRkcik7Ci0KLQkJdGYtPmRhdGEgPSBkYXRhICYgMHhmZjsKLQkJdGYtPmhvYl9kYXRhID0gKGRhdGEgPj4gOCkgJiAweGZmOwotCX0KLQotCS8qIGJlIHN1cmUgd2UncmUgbG9va2luZyBhdCB0aGUgbG93IG9yZGVyIGJpdHMgKi8KLQl0Zl9vdXRiKEFUQV9ERVZDVExfT0JTICYgfjB4ODAsIGlvX3BvcnRzLT5jdGxfYWRkcik7Ci0KLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fRkVBVFVSRSkKLQkJdGYtPmZlYXR1cmUgPSB0Zl9pbmIoaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX05TRUNUKQotCQl0Zi0+bnNlY3QgID0gdGZfaW5iKGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTEJBTCkKLQkJdGYtPmxiYWwgICA9IHRmX2luYihpb19wb3J0cy0+bGJhbF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTEJBTSkKLQkJdGYtPmxiYW0gICA9IHRmX2luYihpb19wb3J0cy0+bGJhbV9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTEJBSCkKLQkJdGYtPmxiYWggICA9IHRmX2luYihpb19wb3J0cy0+bGJhaF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fREVWSUNFKQotCQl0Zi0+ZGV2aWNlID0gdGZfaW5iKGlvX3BvcnRzLT5kZXZpY2VfYWRkcik7Ci0KLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfTEJBNDgpIHsKLQkJdGZfb3V0YihBVEFfREVWQ1RMX09CUyB8IDB4ODAsIGlvX3BvcnRzLT5jdGxfYWRkcik7Ci0KLQkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9GRUFUVVJFKQotCQkJdGYtPmhvYl9mZWF0dXJlID0gdGZfaW5iKGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOwotCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX05TRUNUKQotCQkJdGYtPmhvYl9uc2VjdCAgID0gdGZfaW5iKGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKLQkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFMKQotCQkJdGYtPmhvYl9sYmFsICAgID0gdGZfaW5iKGlvX3BvcnRzLT5sYmFsX2FkZHIpOwotCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQU0pCi0JCQl0Zi0+aG9iX2xiYW0gICAgPSB0Zl9pbmIoaW9fcG9ydHMtPmxiYW1fYWRkcik7Ci0JCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTEJBSCkKLQkJCXRmLT5ob2JfbGJhaCAgICA9IHRmX2luYihpb19wb3J0cy0+bGJhaF9hZGRyKTsKLQl9Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpZGVfdGZfcmVhZCk7Ci0KLS8qCi0gKiBTb21lIGxvY2FsYnVzIEVJREUgaW50ZXJmYWNlcyByZXF1aXJlIGEgc3BlY2lhbCBhY2Nlc3Mgc2VxdWVuY2UKLSAqIHdoZW4gdXNpbmcgMzItYml0IEkvTyBpbnN0cnVjdGlvbnMgdG8gdHJhbnNmZXIgZGF0YS4gIFdlIGNhbGwgdGhpcwotICogdGhlICJ2bGJfc3luYyIgc2VxdWVuY2UsIHdoaWNoIGNvbnNpc3RzIG9mIHRocmVlIHN1Y2Nlc3NpdmUgcmVhZHMKLSAqIG9mIHRoZSBzZWN0b3IgY291bnQgcmVnaXN0ZXIgbG9jYXRpb24sIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZAotICogdG8gZW5zdXJlIHRoYXQgdGhlIHJlYWRzIGFsbCBoYXBwZW4gdG9nZXRoZXIuCi0gKi8KLXN0YXRpYyB2b2lkIGF0YV92bGJfc3luYyh1bnNpZ25lZCBsb25nIHBvcnQpCi17Ci0JKHZvaWQpaW5iKHBvcnQpOwotCSh2b2lkKWluYihwb3J0KTsKLQkodm9pZClpbmIocG9ydCk7Ci19Ci0KLS8qCi0gKiBUaGlzIGlzIHVzZWQgZm9yIG1vc3QgUElPIGRhdGEgdHJhbnNmZXJzICpmcm9tKiB0aGUgSURFIGludGVyZmFjZQotICoKLSAqIFRoZXNlIHJvdXRpbmVzIHdpbGwgcm91bmQgdXAgYW55IHJlcXVlc3QgZm9yIGFuIG9kZCBudW1iZXIgb2YgYnl0ZXMsCi0gKiBzbyBpZiBhbiBvZGQgbGVuIGlzIHNwZWNpZmllZCwgYmUgc3VyZSB0aGF0IHRoZXJlJ3MgYXQgbGVhc3Qgb25lCi0gKiBleHRyYSBieXRlIGFsbG9jYXRlZCBmb3IgdGhlIGJ1ZmZlci4KLSAqLwotdm9pZCBpZGVfaW5wdXRfZGF0YShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwgdm9pZCAqYnVmLAotCQkgICAgdW5zaWduZWQgaW50IGxlbikKLXsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0Jc3RydWN0IGlkZV9pb19wb3J0cyAqaW9fcG9ydHMgPSAmaHdpZi0+aW9fcG9ydHM7Ci0JdW5zaWduZWQgbG9uZyBkYXRhX2FkZHIgPSBpb19wb3J0cy0+ZGF0YV9hZGRyOwotCXU4IGlvXzMyYml0ID0gZHJpdmUtPmlvXzMyYml0OwotCXU4IG1taW8gPSAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19NTUlPKSA/IDEgOiAwOwotCi0JbGVuKys7Ci0KLQlpZiAoaW9fMzJiaXQpIHsKLQkJdW5zaWduZWQgbG9uZyB1bmluaXRpYWxpemVkX3ZhcihmbGFncyk7Ci0KLQkJaWYgKChpb18zMmJpdCAmIDIpICYmICFtbWlvKSB7Ci0JCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JCQlhdGFfdmxiX3N5bmMoaW9fcG9ydHMtPm5zZWN0X2FkZHIpOwotCQl9Ci0KLQkJaWYgKG1taW8pCi0JCQlfX2lkZV9tbV9pbnNsKCh2b2lkIF9faW9tZW0gKilkYXRhX2FkZHIsIGJ1ZiwgbGVuIC8gNCk7Ci0JCWVsc2UKLQkJCWluc2woZGF0YV9hZGRyLCBidWYsIGxlbiAvIDQpOwotCi0JCWlmICgoaW9fMzJiaXQgJiAyKSAmJiAhbW1pbykKLQkJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQotCQlpZiAoKGxlbiAmIDMpID49IDIpIHsKLQkJCWlmIChtbWlvKQotCQkJCV9faWRlX21tX2luc3coKHZvaWQgX19pb21lbSAqKWRhdGFfYWRkciwKLQkJCQkJCSh1OCAqKWJ1ZiArIChsZW4gJiB+MyksIDEpOwotCQkJZWxzZQotCQkJCWluc3coZGF0YV9hZGRyLCAodTggKilidWYgKyAobGVuICYgfjMpLCAxKTsKLQkJfQotCX0gZWxzZSB7Ci0JCWlmIChtbWlvKQotCQkJX19pZGVfbW1faW5zdygodm9pZCBfX2lvbWVtICopZGF0YV9hZGRyLCBidWYsIGxlbiAvIDIpOwotCQllbHNlCi0JCQlpbnN3KGRhdGFfYWRkciwgYnVmLCBsZW4gLyAyKTsKLQl9Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpZGVfaW5wdXRfZGF0YSk7Ci0KLS8qCi0gKiBUaGlzIGlzIHVzZWQgZm9yIG1vc3QgUElPIGRhdGEgdHJhbnNmZXJzICp0byogdGhlIElERSBpbnRlcmZhY2UKLSAqLwotdm9pZCBpZGVfb3V0cHV0X2RhdGEoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsIHZvaWQgKmJ1ZiwKLQkJICAgICB1bnNpZ25lZCBpbnQgbGVuKQotewotCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQlzdHJ1Y3QgaWRlX2lvX3BvcnRzICppb19wb3J0cyA9ICZod2lmLT5pb19wb3J0czsKLQl1bnNpZ25lZCBsb25nIGRhdGFfYWRkciA9IGlvX3BvcnRzLT5kYXRhX2FkZHI7Ci0JdTggaW9fMzJiaXQgPSBkcml2ZS0+aW9fMzJiaXQ7Ci0JdTggbW1pbyA9IChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX01NSU8pID8gMSA6IDA7Ci0KLQlsZW4rKzsKLQotCWlmIChpb18zMmJpdCkgewotCQl1bnNpZ25lZCBsb25nIHVuaW5pdGlhbGl6ZWRfdmFyKGZsYWdzKTsKLQotCQlpZiAoKGlvXzMyYml0ICYgMikgJiYgIW1taW8pIHsKLQkJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQkJCWF0YV92bGJfc3luYyhpb19wb3J0cy0+bnNlY3RfYWRkcik7Ci0JCX0KLQotCQlpZiAobW1pbykKLQkJCV9faWRlX21tX291dHNsKCh2b2lkIF9faW9tZW0gKilkYXRhX2FkZHIsIGJ1ZiwgbGVuIC8gNCk7Ci0JCWVsc2UKLQkJCW91dHNsKGRhdGFfYWRkciwgYnVmLCBsZW4gLyA0KTsKLQotCQlpZiAoKGlvXzMyYml0ICYgMikgJiYgIW1taW8pCi0JCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0KLQkJaWYgKChsZW4gJiAzKSA+PSAyKSB7Ci0JCQlpZiAobW1pbykKLQkJCQlfX2lkZV9tbV9vdXRzdygodm9pZCBfX2lvbWVtICopZGF0YV9hZGRyLAotCQkJCQkJICh1OCAqKWJ1ZiArIChsZW4gJiB+MyksIDEpOwotCQkJZWxzZQotCQkJCW91dHN3KGRhdGFfYWRkciwgKHU4ICopYnVmICsgKGxlbiAmIH4zKSwgMSk7Ci0JCX0KLQl9IGVsc2UgewotCQlpZiAobW1pbykKLQkJCV9faWRlX21tX291dHN3KCh2b2lkIF9faW9tZW0gKilkYXRhX2FkZHIsIGJ1ZiwgbGVuIC8gMik7Ci0JCWVsc2UKLQkJCW91dHN3KGRhdGFfYWRkciwgYnVmLCBsZW4gLyAyKTsKLQl9Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpZGVfb3V0cHV0X2RhdGEpOwotCiB1OCBpZGVfcmVhZF9lcnJvcihpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJaWRlX3Rhc2tfdCB0YXNrOwpAQCAtMzYyLDM1ICs2Myw2IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpZGVfcmVhZF9lcnJvcik7CiAKLXZvaWQgaWRlX3JlYWRfYmNvdW50X2FuZF9pcmVhc29uKGlkZV9kcml2ZV90ICpkcml2ZSwgdTE2ICpiY291bnQsIHU4ICppcmVhc29uKQotewotCWlkZV90YXNrX3QgdGFzazsKLQotCW1lbXNldCgmdGFzaywgMCwgc2l6ZW9mKHRhc2spKTsKLQl0YXNrLnRmX2ZsYWdzID0gSURFX1RGTEFHX0lOX0xCQUggfCBJREVfVEZMQUdfSU5fTEJBTSB8Ci0JCQlJREVfVEZMQUdfSU5fTlNFQ1Q7Ci0KLQlkcml2ZS0+aHdpZi0+dHBfb3BzLT50Zl9yZWFkKGRyaXZlLCAmdGFzayk7Ci0KLQkqYmNvdW50ID0gKHRhc2sudGYubGJhaCA8PCA4KSB8IHRhc2sudGYubGJhbTsKLQkqaXJlYXNvbiA9IHRhc2sudGYubnNlY3QgJiAzOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoaWRlX3JlYWRfYmNvdW50X2FuZF9pcmVhc29uKTsKLQotY29uc3Qgc3RydWN0IGlkZV90cF9vcHMgZGVmYXVsdF90cF9vcHMgPSB7Ci0JLmV4ZWNfY29tbWFuZAkJPSBpZGVfZXhlY19jb21tYW5kLAotCS5yZWFkX3N0YXR1cwkJPSBpZGVfcmVhZF9zdGF0dXMsCi0JLnJlYWRfYWx0c3RhdHVzCQk9IGlkZV9yZWFkX2FsdHN0YXR1cywKLQotCS5zZXRfaXJxCQk9IGlkZV9zZXRfaXJxLAotCi0JLnRmX2xvYWQJCT0gaWRlX3RmX2xvYWQsCi0JLnRmX3JlYWQJCT0gaWRlX3RmX3JlYWQsCi0KLQkuaW5wdXRfZGF0YQkJPSBpZGVfaW5wdXRfZGF0YSwKLQkub3V0cHV0X2RhdGEJCT0gaWRlX291dHB1dF9kYXRhLAotfTsKLQogdm9pZCBpZGVfZml4X2RyaXZlaWQodTE2ICppZCkKIHsKICNpZm5kZWYgX19MSVRUTEVfRU5ESUFOCkBAIC00MTIsNyArODQsNyBAQAogICogcmV0dXJuZWQgYnkgdGhlIEFUQV9DTURfSURfQVRBW1BJXSBjb21tYW5kcy4KICAqLwogCi12b2lkIGlkZV9maXhzdHJpbmcgKHU4ICpzLCBjb25zdCBpbnQgYnl0ZWNvdW50LCBjb25zdCBpbnQgYnl0ZXN3YXApCit2b2lkIGlkZV9maXhzdHJpbmcodTggKnMsIGNvbnN0IGludCBieXRlY291bnQsIGNvbnN0IGludCBieXRlc3dhcCkKIHsKIAl1OCAqcCwgKmVuZCA9ICZzW2J5dGVjb3VudCAmIH4xXTsgLyogYnl0ZWNvdW50IG11c3QgYmUgZXZlbiAqLwogCkBAIC00MzUsNDQgKzEwNyw5IEBACiAJd2hpbGUgKHAgIT0gZW5kKQogCQkqcCsrID0gJ1wwJzsKIH0KLQogRVhQT1JUX1NZTUJPTChpZGVfZml4c3RyaW5nKTsKIAogLyoKLSAqIE5lZWRlZCBmb3IgUENJIGlycSBzaGFyaW5nCi0gKi8KLWludCBkcml2ZV9pc19yZWFkeSAoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCWlkZV9od2lmX3QgKmh3aWYJPSBkcml2ZS0+aHdpZjsKLQl1OCBzdGF0CQkJPSAwOwotCi0JaWYgKGRyaXZlLT53YWl0aW5nX2Zvcl9kbWEpCi0JCXJldHVybiBod2lmLT5kbWFfb3BzLT5kbWFfdGVzdF9pcnEoZHJpdmUpOwotCi0JLyoKLQkgKiBXZSBkbyBhIHBhc3NpdmUgc3RhdHVzIHRlc3QgdW5kZXIgc2hhcmVkIFBDSSBpbnRlcnJ1cHRzIG9uCi0JICogY2FyZHMgdGhhdCB0cnVseSBzaGFyZSB0aGUgQVRBIHNpZGUgaW50ZXJydXB0LCBidXQgbWF5IGFsc28gc2hhcmUKLQkgKiBhbiBpbnRlcnJ1cHQgd2l0aCBhbm90aGVyIHBjaSBjYXJkL2RldmljZS4gIFdlIG1ha2Ugbm8gYXNzdW1wdGlvbnMKLQkgKiBhYm91dCBwb3NzaWJsZSBpc2EtcG5wIGFuZCBwY2ktcG5wIGlzc3VlcyB5ZXQuCi0JICovCi0JaWYgKGh3aWYtPmlvX3BvcnRzLmN0bF9hZGRyICYmCi0JICAgIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX0JST0tFTl9BTFRTVEFUVVMpID09IDApCi0JCXN0YXQgPSBod2lmLT50cF9vcHMtPnJlYWRfYWx0c3RhdHVzKGh3aWYpOwotCWVsc2UKLQkJLyogTm90ZTogdGhpcyBtYXkgY2xlYXIgYSBwZW5kaW5nIElSUSEhICovCi0JCXN0YXQgPSBod2lmLT50cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpOwotCi0JaWYgKHN0YXQgJiBBVEFfQlVTWSkKLQkJLyogZHJpdmUgYnVzeTogIGRlZmluaXRlbHkgbm90IGludGVycnVwdGluZyAqLwotCQlyZXR1cm4gMDsKLQotCS8qIGRyaXZlIHJlYWR5OiAqbWlnaHQqIGJlIGludGVycnVwdGluZyAqLwotCXJldHVybiAxOwotfQotCi1FWFBPUlRfU1lNQk9MKGRyaXZlX2lzX3JlYWR5KTsKLQotLyoKICAqIFRoaXMgcm91dGluZSBidXN5LXdhaXRzIGZvciB0aGUgZHJpdmUgc3RhdHVzIHRvIGJlIG5vdCAiYnVzeSIuCiAgKiBJdCB0aGVuIGNoZWNrcyB0aGUgc3RhdHVzIGZvciBhbGwgb2YgdGhlICJnb29kIiBiaXRzIGFuZCBub25lCiAgKiBvZiB0aGUgImJhZCIgYml0cywgYW5kIGlmIGFsbCBpcyBva2F5IGl0IHJldHVybnMgMC4gIEFsbCBvdGhlcgpAQCAtNDgzLDcgKzEyMCw4IEBACiAgKiBzZXR0aW5nIGEgdGltZXIgdG8gd2FrZSB1cCBhdCBoYWxmIHNlY29uZCBpbnRlcnZhbHMgdGhlcmVhZnRlciwKICAqIHVudGlsIHRpbWVvdXQgaXMgYWNoaWV2ZWQsIGJlZm9yZSB0aW1pbmcgb3V0LgogICovCi1zdGF0aWMgaW50IF9faWRlX3dhaXRfc3RhdChpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IGdvb2QsIHU4IGJhZCwgdW5zaWduZWQgbG9uZyB0aW1lb3V0LCB1OCAqcnN0YXQpCitzdGF0aWMgaW50IF9faWRlX3dhaXRfc3RhdChpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IGdvb2QsIHU4IGJhZCwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgdGltZW91dCwgdTggKnJzdGF0KQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAljb25zdCBzdHJ1Y3QgaWRlX3RwX29wcyAqdHBfb3BzID0gaHdpZi0+dHBfb3BzOwpAQCAtNTQxLDcgKzE3OSw4IEBACiAgKiBUaGUgY2FsbGVyIHNob3VsZCByZXR1cm4gdGhlIHVwZGF0ZWQgdmFsdWUgb2YgInN0YXJ0c3RvcCIgaW4gdGhpcyBjYXNlLAogICogInN0YXJ0c3RvcCIgaXMgdW5jaGFuZ2VkIHdoZW4gdGhlIGZ1bmN0aW9uIHJldHVybnMgMC4KICAqLwotaW50IGlkZV93YWl0X3N0YXQoaWRlX3N0YXJ0c3RvcF90ICpzdGFydHN0b3AsIGlkZV9kcml2ZV90ICpkcml2ZSwgdTggZ29vZCwgdTggYmFkLCB1bnNpZ25lZCBsb25nIHRpbWVvdXQpCitpbnQgaWRlX3dhaXRfc3RhdChpZGVfc3RhcnRzdG9wX3QgKnN0YXJ0c3RvcCwgaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCBnb29kLAorCQkgIHU4IGJhZCwgdW5zaWduZWQgbG9uZyB0aW1lb3V0KQogewogCWludCBlcnI7CiAJdTggc3RhdDsKQEAgLTU2MSw3ICsyMDAsNiBAQAogCiAJcmV0dXJuIGVycjsKIH0KLQogRVhQT1JUX1NZTUJPTChpZGVfd2FpdF9zdGF0KTsKIAogLyoqCkBAIC01ODIsNyArMjIwLDYgQEAKIAkJCXJldHVybiAxOwogCXJldHVybiAwOwogfQotCiBFWFBPUlRfU1lNQk9MX0dQTChpZGVfaW5fZHJpdmVfbGlzdCk7CiAKIC8qCkBAIC02MDcsNyArMjQ0LDcgQEAKICAqICBBbGwgaG9zdHMgdGhhdCB1c2UgdGhlIDgwYyByaWJib24gbXVzdCB1c2UhCiAgKiAgVGhlIG5hbWUgaXMgZGVyaXZlZCBmcm9tIHVwcGVyIGJ5dGUgb2Ygd29yZCA5MyBhbmQgdGhlIDgwYyByaWJib24uCiAgKi8KLXU4IGVpZ2h0eV9uaW50eV90aHJlZSAoaWRlX2RyaXZlX3QgKmRyaXZlKQordTggZWlnaHR5X25pbnR5X3RocmVlKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJdTE2ICppZCA9IGRyaXZlLT5pZDsKQEAgLTY1Miw0NyArMjg5LDE5IEBACiAKIGludCBpZGVfZHJpdmVpZF91cGRhdGUoaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQljb25zdCBzdHJ1Y3QgaWRlX3RwX29wcyAqdHBfb3BzID0gaHdpZi0+dHBfb3BzOwogCXUxNiAqaWQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1OCBzdGF0OworCWludCByYzsKIAotCS8qCi0JICogUmUtcmVhZCBkcml2ZS0+aWQgZm9yIHBvc3NpYmxlIERNQSBtb2RlCi0JICogY2hhbmdlIChjb3BpZWQgZnJvbSBpZGUtcHJvYmUuYykKLQkgKi8KKwlpZCA9IGttYWxsb2MoU0VDVE9SX1NJWkUsIEdGUF9BVE9NSUMpOworCWlmIChpZCA9PSBOVUxMKQorCQlyZXR1cm4gMDsKIAogCVNFTEVDVF9NQVNLKGRyaXZlLCAxKTsKLQl0cF9vcHMtPnNldF9pcnEoaHdpZiwgMCk7Ci0JbXNsZWVwKDUwKTsKLQl0cF9vcHMtPmV4ZWNfY29tbWFuZChod2lmLCBBVEFfQ01EX0lEX0FUQSk7Ci0KLQlpZiAoaWRlX2J1c3lfc2xlZXAoaHdpZiwgV0FJVF9XT1JTVENBU0UsIDEpKSB7Ci0JCVNFTEVDVF9NQVNLKGRyaXZlLCAwKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JbXNsZWVwKDUwKTsJLyogd2FpdCBmb3IgSVJRIGFuZCBBVEFfRFJRICovCi0Jc3RhdCA9IHRwX29wcy0+cmVhZF9zdGF0dXMoaHdpZik7Ci0KLQlpZiAoIU9LX1NUQVQoc3RhdCwgQVRBX0RSUSwgQkFEX1JfU1RBVCkpIHsKLQkJU0VMRUNUX01BU0soZHJpdmUsIDApOwotCQlwcmludGsoIiVzOiBDSEVDSyBmb3IgZ29vZCBTVEFUVVNcbiIsIGRyaXZlLT5uYW1lKTsKLQkJcmV0dXJuIDA7Ci0JfQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlyYyA9IGlkZV9kZXZfcmVhZF9pZChkcml2ZSwgQVRBX0NNRF9JRF9BVEEsIGlkKTsKIAlTRUxFQ1RfTUFTSyhkcml2ZSwgMCk7Ci0JaWQgPSBrbWFsbG9jKFNFQ1RPUl9TSVpFLCBHRlBfQVRPTUlDKTsKLQlpZiAoIWlkKSB7Ci0JCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQkJcmV0dXJuIDA7Ci0JfQotCXRwX29wcy0+aW5wdXRfZGF0YShkcml2ZSwgTlVMTCwgaWQsIFNFQ1RPUl9TSVpFKTsKLQkodm9pZCl0cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpOwkvKiBjbGVhciBkcml2ZSBJUlEgKi8KLQlsb2NhbF9pcnFfZW5hYmxlKCk7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCWlkZV9maXhfZHJpdmVpZChpZCk7CisKKwlpZiAocmMpCisJCWdvdG8gb3V0X2VycjsKIAogCWRyaXZlLT5pZFtBVEFfSURfVURNQV9NT0RFU10gID0gaWRbQVRBX0lEX1VETUFfTU9ERVNdOwogCWRyaXZlLT5pZFtBVEFfSURfTVdETUFfTU9ERVNdID0gaWRbQVRBX0lEX01XRE1BX01PREVTXTsKQEAgLTcwNSw2ICszMTQsMTIgQEAKIAkJaWRlX2RtYV9vZmYoZHJpdmUpOwogCiAJcmV0dXJuIDE7CitvdXRfZXJyOgorCVNFTEVDVF9NQVNLKGRyaXZlLCAwKTsKKwlpZiAocmMgPT0gMikKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogJXM6IGJhZCBzdGF0dXNcbiIsIGRyaXZlLT5uYW1lLCBfX2Z1bmNfXyk7CisJa2ZyZWUoaWQpOworCXJldHVybiAwOwogfQogCiBpbnQgaWRlX2NvbmZpZ19kcml2ZV9zcGVlZChpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IHNwZWVkKQpAQCAtNzMxLDE4ICszNDYsMTUgQEAKIAkgKiBidXQgZm9yIHNvbWUgcmVhc29uIHRoZXNlIGRvbid0IHdvcmsgYXQKIAkgKiB0aGlzIHBvaW50IChsb3N0IGludGVycnVwdCkuCiAJICovCi0gICAgICAgIC8qCi0gICAgICAgICAqIFNlbGVjdCB0aGUgZHJpdmUsIGFuZCBpc3N1ZSB0aGUgU0VURkVBVFVSRVMgY29tbWFuZAotICAgICAgICAgKi8KLQlkaXNhYmxlX2lycV9ub3N5bmMoaHdpZi0+aXJxKTsKLQkKKwogCS8qCiAJICoJRklYTUU6IHdlIHJhY2UgYWdhaW5zdCB0aGUgcnVubmluZyBJUlEgaGVyZSBpZgogCSAqCXRoaXMgaXMgY2FsbGVkIGZyb20gbm9uIElSUSBjb250ZXh0LiBJZiB3ZSB1c2UKIAkgKglkaXNhYmxlX2lycSgpIHdlIGhhbmcgb24gdGhlIGVycm9yIHBhdGguIFdvcmsKIAkgKglpcyBuZWVkZWQuCiAJICovCi0JIAorCWRpc2FibGVfaXJxX25vc3luYyhod2lmLT5pcnEpOworCiAJdWRlbGF5KDEpOwogCVNFTEVDVF9EUklWRShkcml2ZSk7CiAJU0VMRUNUX01BU0soZHJpdmUsIDEpOwpAQCAtODEyLDggKzQyNCw4IEBACiAgKgogICogU2VlIGFsc28gaWRlX2V4ZWN1dGVfY29tbWFuZAogICovCi1zdGF0aWMgdm9pZCBfX2lkZV9zZXRfaGFuZGxlciAoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGVfaGFuZGxlcl90ICpoYW5kbGVyLAotCQkgICAgICB1bnNpZ25lZCBpbnQgdGltZW91dCwgaWRlX2V4cGlyeV90ICpleHBpcnkpCit2b2lkIF9faWRlX3NldF9oYW5kbGVyKGlkZV9kcml2ZV90ICpkcml2ZSwgaWRlX2hhbmRsZXJfdCAqaGFuZGxlciwKKwkJICAgICAgIHVuc2lnbmVkIGludCB0aW1lb3V0LCBpZGVfZXhwaXJ5X3QgKmV4cGlyeSkKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAKQEAgLTgzNSw5ICs0NDcsOCBAQAogCV9faWRlX3NldF9oYW5kbGVyKGRyaXZlLCBoYW5kbGVyLCB0aW1lb3V0LCBleHBpcnkpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3aWYtPmxvY2ssIGZsYWdzKTsKIH0KLQogRVhQT1JUX1NZTUJPTChpZGVfc2V0X2hhbmRsZXIpOwotIAorCiAvKioKICAqCWlkZV9leGVjdXRlX2NvbW1hbmQJLQlleGVjdXRlIGFuIElERSBjb21tYW5kCiAgKglAZHJpdmU6IElERSBkcml2ZSB0byBpc3N1ZSB0aGUgY29tbWFuZCBhZ2FpbnN0CkBAIC04NDcsNyArNDU4LDcgQEAKICAqCUBleHBpcnk6ICBoYW5kbGVyIHRvIHJ1biBvbiB0aW1lb3V0CiAgKgogICoJSGVscGVyIGZ1bmN0aW9uIHRvIGlzc3VlIGFuIElERSBjb21tYW5kLiBUaGlzIGhhbmRsZXMgdGhlCi0gKglhdG9taWNpdHkgcmVxdWlyZW1lbnRzLCBjb21tYW5kIHRpbWluZyBhbmQgZW5zdXJlcyB0aGF0IHRoZSAKKyAqCWF0b21pY2l0eSByZXF1aXJlbWVudHMsIGNvbW1hbmQgdGltaW5nIGFuZCBlbnN1cmVzIHRoYXQgdGhlCiAgKgloYW5kbGVyIGFuZCBJUlEgc2V0dXAgZG8gbm90IHJhY2UuIEFsbCBJREUgY29tbWFuZCBraWNrIG9mZgogICoJc2hvdWxkIGdvIHZpYSB0aGlzIGZ1bmN0aW9uIG9yIGRvIGVxdWl2YWxlbnQgbG9ja2luZy4KICAqLwpAQCAtODg0LDMwMSArNDk1LDYgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlkZV9leGVjdXRlX3BrdF9jbWQpOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgaWRlX2NvbXBsZXRlX2RyaXZlX3Jlc2V0KGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGVycikKLXsKLQlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBkcml2ZS0+aHdpZi0+cnE7Ci0KLQlpZiAocnEgJiYgYmxrX3NwZWNpYWxfcmVxdWVzdChycSkgJiYgcnEtPmNtZFswXSA9PSBSRVFfRFJJVkVfUkVTRVQpCi0JCWlkZV9lbmRfcmVxdWVzdChkcml2ZSwgZXJyID8gZXJyIDogMSwgMCk7Ci19Ci0KLS8qIG5lZWRlZCBiZWxvdyAqLwotc3RhdGljIGlkZV9zdGFydHN0b3BfdCBkb19yZXNldDEgKGlkZV9kcml2ZV90ICosIGludCk7Ci0KLS8qCi0gKiBhdGFwaV9yZXNldF9wb2xsZnVuYygpIGdldHMgaW52b2tlZCB0byBwb2xsIHRoZSBpbnRlcmZhY2UgZm9yIGNvbXBsZXRpb24gZXZlcnkgNTBtcwotICogZHVyaW5nIGFuIGF0YXBpIGRyaXZlIHJlc2V0IG9wZXJhdGlvbi4gSWYgdGhlIGRyaXZlIGhhcyBub3QgeWV0IHJlc3BvbmRlZCwKLSAqIGFuZCB3ZSBoYXZlIG5vdCB5ZXQgaGl0IG91ciBtYXhpbXVtIHdhaXRpbmcgdGltZSwgdGhlbiB0aGUgdGltZXIgaXMgcmVzdGFydGVkCi0gKiBmb3IgYW5vdGhlciA1MG1zLgotICovCi1zdGF0aWMgaWRlX3N0YXJ0c3RvcF90IGF0YXBpX3Jlc2V0X3BvbGxmdW5jIChpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCXU4IHN0YXQ7Ci0KLQlTRUxFQ1RfRFJJVkUoZHJpdmUpOwotCXVkZWxheSAoMTApOwotCXN0YXQgPSBod2lmLT50cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpOwotCi0JaWYgKE9LX1NUQVQoc3RhdCwgMCwgQVRBX0JVU1kpKQotCQlwcmludGsoIiVzOiBBVEFQSSByZXNldCBjb21wbGV0ZVxuIiwgZHJpdmUtPm5hbWUpOwotCWVsc2UgewotCQlpZiAodGltZV9iZWZvcmUoamlmZmllcywgaHdpZi0+cG9sbF90aW1lb3V0KSkgewotCQkJaWRlX3NldF9oYW5kbGVyKGRyaXZlLCAmYXRhcGlfcmVzZXRfcG9sbGZ1bmMsIEhaLzIwLCBOVUxMKTsKLQkJCS8qIGNvbnRpbnVlIHBvbGxpbmcgKi8KLQkJCXJldHVybiBpZGVfc3RhcnRlZDsKLQkJfQotCQkvKiBlbmQgb2YgcG9sbGluZyAqLwotCQlod2lmLT5wb2xsaW5nID0gMDsKLQkJcHJpbnRrKCIlczogQVRBUEkgcmVzZXQgdGltZWQtb3V0LCBzdGF0dXM9MHglMDJ4XG4iLAotCQkJCWRyaXZlLT5uYW1lLCBzdGF0KTsKLQkJLyogZG8gaXQgdGhlIG9sZCBmYXNoaW9uZWQgd2F5ICovCi0JCXJldHVybiBkb19yZXNldDEoZHJpdmUsIDEpOwotCX0KLQkvKiBkb25lIHBvbGxpbmcgKi8KLQlod2lmLT5wb2xsaW5nID0gMDsKLQlpZGVfY29tcGxldGVfZHJpdmVfcmVzZXQoZHJpdmUsIDApOwotCXJldHVybiBpZGVfc3RvcHBlZDsKLX0KLQotc3RhdGljIHZvaWQgaWRlX3Jlc2V0X3JlcG9ydF9lcnJvcihpZGVfaHdpZl90ICpod2lmLCB1OCBlcnIpCi17Ci0Jc3RhdGljIGNvbnN0IGNoYXIgKmVycl9tYXN0ZXJfdmFsc1tdID0KLQkJeyBOVUxMLCAicGFzc2VkIiwgImZvcm1hdHRlciBkZXZpY2UgZXJyb3IiLAotCQkgICJzZWN0b3IgYnVmZmVyIGVycm9yIiwgIkVDQyBjaXJjdWl0cnkgZXJyb3IiLAotCQkgICJjb250cm9sbGluZyBNUFUgZXJyb3IiIH07Ci0KLQl1OCBlcnJfbWFzdGVyID0gZXJyICYgMHg3ZjsKLQotCXByaW50ayhLRVJOX0VSUiAiJXM6IHJlc2V0OiBtYXN0ZXI6ICIsIGh3aWYtPm5hbWUpOwotCWlmIChlcnJfbWFzdGVyICYmIGVycl9tYXN0ZXIgPCA2KQotCQlwcmludGsoS0VSTl9DT05UICIlcyIsIGVycl9tYXN0ZXJfdmFsc1tlcnJfbWFzdGVyXSk7Ci0JZWxzZQotCQlwcmludGsoS0VSTl9DT05UICJlcnJvciAoMHglMDJ4PykiLCBlcnIpOwotCWlmIChlcnIgJiAweDgwKQotCQlwcmludGsoS0VSTl9DT05UICI7IHNsYXZlOiBmYWlsZWQiKTsKLQlwcmludGsoS0VSTl9DT05UICJcbiIpOwotfQotCi0vKgotICogcmVzZXRfcG9sbGZ1bmMoKSBnZXRzIGludm9rZWQgdG8gcG9sbCB0aGUgaW50ZXJmYWNlIGZvciBjb21wbGV0aW9uIGV2ZXJ5IDUwbXMKLSAqIGR1cmluZyBhbiBpZGUgcmVzZXQgb3BlcmF0aW9uLiBJZiB0aGUgZHJpdmVzIGhhdmUgbm90IHlldCByZXNwb25kZWQsCi0gKiBhbmQgd2UgaGF2ZSBub3QgeWV0IGhpdCBvdXIgbWF4aW11bSB3YWl0aW5nIHRpbWUsIHRoZW4gdGhlIHRpbWVyIGlzIHJlc3RhcnRlZAotICogZm9yIGFub3RoZXIgNTBtcy4KLSAqLwotc3RhdGljIGlkZV9zdGFydHN0b3BfdCByZXNldF9wb2xsZnVuYyAoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQljb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzICpwb3J0X29wcyA9IGh3aWYtPnBvcnRfb3BzOwotCXU4IHRtcDsKLQlpbnQgZXJyID0gMDsKLQotCWlmIChwb3J0X29wcyAmJiBwb3J0X29wcy0+cmVzZXRfcG9sbCkgewotCQllcnIgPSBwb3J0X29wcy0+cmVzZXRfcG9sbChkcml2ZSk7Ci0JCWlmIChlcnIpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGhvc3QgcmVzZXRfcG9sbCBmYWlsdXJlIGZvciAlcy5cbiIsCi0JCQkJaHdpZi0+bmFtZSwgZHJpdmUtPm5hbWUpOwotCQkJZ290byBvdXQ7Ci0JCX0KLQl9Ci0KLQl0bXAgPSBod2lmLT50cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpOwotCi0JaWYgKCFPS19TVEFUKHRtcCwgMCwgQVRBX0JVU1kpKSB7Ci0JCWlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCBod2lmLT5wb2xsX3RpbWVvdXQpKSB7Ci0JCQlpZGVfc2V0X2hhbmRsZXIoZHJpdmUsICZyZXNldF9wb2xsZnVuYywgSFovMjAsIE5VTEwpOwotCQkJLyogY29udGludWUgcG9sbGluZyAqLwotCQkJcmV0dXJuIGlkZV9zdGFydGVkOwotCQl9Ci0JCXByaW50aygiJXM6IHJlc2V0IHRpbWVkLW91dCwgc3RhdHVzPTB4JTAyeFxuIiwgaHdpZi0+bmFtZSwgdG1wKTsKLQkJZHJpdmUtPmZhaWx1cmVzKys7Ci0JCWVyciA9IC1FSU87Ci0JfSBlbHNlICB7Ci0JCXRtcCA9IGlkZV9yZWFkX2Vycm9yKGRyaXZlKTsKLQotCQlpZiAodG1wID09IDEpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiByZXNldDogc3VjY2Vzc1xuIiwgaHdpZi0+bmFtZSk7Ci0JCQlkcml2ZS0+ZmFpbHVyZXMgPSAwOwotCQl9IGVsc2UgewotCQkJaWRlX3Jlc2V0X3JlcG9ydF9lcnJvcihod2lmLCB0bXApOwotCQkJZHJpdmUtPmZhaWx1cmVzKys7Ci0JCQllcnIgPSAtRUlPOwotCQl9Ci0JfQotb3V0OgotCWh3aWYtPnBvbGxpbmcgPSAwOwkvKiBkb25lIHBvbGxpbmcgKi8KLQlpZGVfY29tcGxldGVfZHJpdmVfcmVzZXQoZHJpdmUsIGVycik7Ci0JcmV0dXJuIGlkZV9zdG9wcGVkOwotfQotCi1zdGF0aWMgdm9pZCBpZGVfZGlza19wcmVfcmVzZXQoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCWludCBsZWdhY3kgPSAoZHJpdmUtPmlkW0FUQV9JRF9DRlNfRU5BQkxFXzJdICYgMHgwNDAwKSA/IDAgOiAxOwotCi0JZHJpdmUtPnNwZWNpYWwuYWxsID0gMDsKLQlkcml2ZS0+c3BlY2lhbC5iLnNldF9nZW9tZXRyeSA9IGxlZ2FjeTsKLQlkcml2ZS0+c3BlY2lhbC5iLnJlY2FsaWJyYXRlICA9IGxlZ2FjeTsKLQotCWRyaXZlLT5tdWx0X2NvdW50ID0gMDsKLQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfUEFSS0VEOwotCi0JaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX0tFRVBfU0VUVElOR1MpID09IDAgJiYKLQkgICAgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfVVNJTkdfRE1BKSA9PSAwKQotCQlkcml2ZS0+bXVsdF9yZXEgPSAwOwotCi0JaWYgKGRyaXZlLT5tdWx0X3JlcSAhPSBkcml2ZS0+bXVsdF9jb3VudCkKLQkJZHJpdmUtPnNwZWNpYWwuYi5zZXRfbXVsdG1vZGUgPSAxOwotfQotCi1zdGF0aWMgdm9pZCBwcmVfcmVzZXQoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCWNvbnN0IHN0cnVjdCBpZGVfcG9ydF9vcHMgKnBvcnRfb3BzID0gZHJpdmUtPmh3aWYtPnBvcnRfb3BzOwotCi0JaWYgKGRyaXZlLT5tZWRpYSA9PSBpZGVfZGlzaykKLQkJaWRlX2Rpc2tfcHJlX3Jlc2V0KGRyaXZlKTsKLQllbHNlCi0JCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX1BPU1RfUkVTRVQ7Ci0KLQlpZiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19VU0lOR19ETUEpIHsKLQkJaWYgKGRyaXZlLT5jcmNfY291bnQpCi0JCQlpZGVfY2hlY2tfZG1hX2NyYyhkcml2ZSk7Ci0JCWVsc2UKLQkJCWlkZV9kbWFfb2ZmKGRyaXZlKTsKLQl9Ci0KLQlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfS0VFUF9TRVRUSU5HUykgPT0gMCkgewotCQlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfVVNJTkdfRE1BKSA9PSAwKSB7Ci0JCQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfVU5NQVNLOwotCQkJZHJpdmUtPmlvXzMyYml0ID0gMDsKLQkJfQotCQlyZXR1cm47Ci0JfQotCi0JaWYgKHBvcnRfb3BzICYmIHBvcnRfb3BzLT5wcmVfcmVzZXQpCi0JCXBvcnRfb3BzLT5wcmVfcmVzZXQoZHJpdmUpOwotCi0JaWYgKGRyaXZlLT5jdXJyZW50X3NwZWVkICE9IDB4ZmYpCi0JCWRyaXZlLT5kZXNpcmVkX3NwZWVkID0gZHJpdmUtPmN1cnJlbnRfc3BlZWQ7Ci0JZHJpdmUtPmN1cnJlbnRfc3BlZWQgPSAweGZmOwotfQotCi0vKgotICogZG9fcmVzZXQxKCkgYXR0ZW1wdHMgdG8gcmVjb3ZlciBhIGNvbmZ1c2VkIGRyaXZlIGJ5IHJlc2V0dGluZyBpdC4KLSAqIFVuZm9ydHVuYXRlbHksIHJlc2V0dGluZyBhIGRpc2sgZHJpdmUgYWN0dWFsbHkgcmVzZXRzIGFsbCBkZXZpY2VzIG9uCi0gKiB0aGUgc2FtZSBpbnRlcmZhY2UsIHNvIGl0IGNhbiByZWFsbHkgYmUgdGhvdWdodCBvZiBhcyByZXNldHRpbmcgdGhlCi0gKiBpbnRlcmZhY2UgcmF0aGVyIHRoYW4gcmVzZXR0aW5nIHRoZSBkcml2ZS4KLSAqCi0gKiBBVEFQSSBkZXZpY2VzIGhhdmUgdGhlaXIgb3duIHJlc2V0IG1lY2hhbmlzbSB3aGljaCBhbGxvd3MgdGhlbSB0byBiZQotICogaW5kaXZpZHVhbGx5IHJlc2V0IHdpdGhvdXQgY2xvYmJlcmluZyBvdGhlciBkZXZpY2VzIG9uIHRoZSBzYW1lIGludGVyZmFjZS4KLSAqCi0gKiBVbmZvcnR1bmF0ZWx5LCB0aGUgSURFIGludGVyZmFjZSBkb2VzIG5vdCBnZW5lcmF0ZSBhbiBpbnRlcnJ1cHQgdG8gbGV0Ci0gKiB1cyBrbm93IHdoZW4gdGhlIHJlc2V0IG9wZXJhdGlvbiBoYXMgZmluaXNoZWQsIHNvIHdlIG11c3QgcG9sbCBmb3IgdGhpcy4KLSAqIEVxdWFsbHkgcG9vciwgdGhvdWdoLCBpcyB0aGUgZmFjdCB0aGF0IHRoaXMgbWF5IGEgdmVyeSBsb25nIHRpbWUgdG8gY29tcGxldGUsCi0gKiAodXAgdG8gMzAgc2Vjb25kcyB3b3JzdGNhc2UpLiAgU28sIGluc3RlYWQgb2YgYnVzeS13YWl0aW5nIGhlcmUgZm9yIGl0LAotICogd2Ugc2V0IGEgdGltZXIgdG8gcG9sbCBhdCA1MG1zIGludGVydmFscy4KLSAqLwotc3RhdGljIGlkZV9zdGFydHN0b3BfdCBkb19yZXNldDEgKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGRvX25vdF90cnlfYXRhcGkpCi17Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCXN0cnVjdCBpZGVfaW9fcG9ydHMgKmlvX3BvcnRzID0gJmh3aWYtPmlvX3BvcnRzOwotCWNvbnN0IHN0cnVjdCBpZGVfdHBfb3BzICp0cF9vcHMgPSBod2lmLT50cF9vcHM7Ci0JY29uc3Qgc3RydWN0IGlkZV9wb3J0X29wcyAqcG9ydF9vcHM7Ci0JaWRlX2RyaXZlX3QgKnRkcml2ZTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzLCB0aW1lb3V0OwotCWludCBpOwotCURFRklORV9XQUlUKHdhaXQpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmh3aWYtPmxvY2ssIGZsYWdzKTsKLQotCS8qIFdlIG11c3Qgbm90IHJlc2V0IHdpdGggcnVubmluZyBoYW5kbGVycyAqLwotCUJVR19PTihod2lmLT5oYW5kbGVyICE9IE5VTEwpOwotCi0JLyogRm9yIGFuIEFUQVBJIGRldmljZSwgZmlyc3QgdHJ5IGFuIEFUQVBJIFNSU1QuICovCi0JaWYgKGRyaXZlLT5tZWRpYSAhPSBpZGVfZGlzayAmJiAhZG9fbm90X3RyeV9hdGFwaSkgewotCQlwcmVfcmVzZXQoZHJpdmUpOwotCQlTRUxFQ1RfRFJJVkUoZHJpdmUpOwotCQl1ZGVsYXkgKDIwKTsKLQkJdHBfb3BzLT5leGVjX2NvbW1hbmQoaHdpZiwgQVRBX0NNRF9ERVZfUkVTRVQpOwotCQluZGVsYXkoNDAwKTsKLQkJaHdpZi0+cG9sbF90aW1lb3V0ID0gamlmZmllcyArIFdBSVRfV09SU1RDQVNFOwotCQlod2lmLT5wb2xsaW5nID0gMTsKLQkJX19pZGVfc2V0X2hhbmRsZXIoZHJpdmUsICZhdGFwaV9yZXNldF9wb2xsZnVuYywgSFovMjAsIE5VTEwpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZod2lmLT5sb2NrLCBmbGFncyk7Ci0JCXJldHVybiBpZGVfc3RhcnRlZDsKLQl9Ci0KLQkvKiBXZSBtdXN0IG5vdCBkaXN0dXJiIGRldmljZXMgaW4gdGhlIElERV9ERkxBR19QQVJLRUQgc3RhdGUuICovCi0JZG8gewotCQl1bnNpZ25lZCBsb25nIG5vdzsKLQotCQlwcmVwYXJlX3RvX3dhaXQoJmlkZV9wYXJrX3dxLCAmd2FpdCwgVEFTS19VTklOVEVSUlVQVElCTEUpOwotCQl0aW1lb3V0ID0gamlmZmllczsKLQkJaWRlX3BvcnRfZm9yX2VhY2hfZGV2KGksIHRkcml2ZSwgaHdpZikgewotCQkJaWYgKHRkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1BSRVNFTlQgJiYKLQkJCSAgICB0ZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19QQVJLRUQgJiYKLQkJCSAgICB0aW1lX2FmdGVyKHRkcml2ZS0+c2xlZXAsIHRpbWVvdXQpKQotCQkJCXRpbWVvdXQgPSB0ZHJpdmUtPnNsZWVwOwotCQl9Ci0KLQkJbm93ID0gamlmZmllczsKLQkJaWYgKHRpbWVfYmVmb3JlX2VxKHRpbWVvdXQsIG5vdykpCi0JCQlicmVhazsKLQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZod2lmLT5sb2NrLCBmbGFncyk7Ci0JCXRpbWVvdXQgPSBzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZSh0aW1lb3V0IC0gbm93KTsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmh3aWYtPmxvY2ssIGZsYWdzKTsKLQl9IHdoaWxlICh0aW1lb3V0KTsKLQlmaW5pc2hfd2FpdCgmaWRlX3Bhcmtfd3EsICZ3YWl0KTsKLQotCS8qCi0JICogRmlyc3QsIHJlc2V0IGFueSBkZXZpY2Ugc3RhdGUgZGF0YSB3ZSB3ZXJlIG1haW50YWluaW5nCi0JICogZm9yIGFueSBvZiB0aGUgZHJpdmVzIG9uIHRoaXMgaW50ZXJmYWNlLgotCSAqLwotCWlkZV9wb3J0X2Zvcl9lYWNoX2RldihpLCB0ZHJpdmUsIGh3aWYpCi0JCXByZV9yZXNldCh0ZHJpdmUpOwotCi0JaWYgKGlvX3BvcnRzLT5jdGxfYWRkciA9PSAwKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3aWYtPmxvY2ssIGZsYWdzKTsKLQkJaWRlX2NvbXBsZXRlX2RyaXZlX3Jlc2V0KGRyaXZlLCAtRU5YSU8pOwotCQlyZXR1cm4gaWRlX3N0b3BwZWQ7Ci0JfQotCi0JLyoKLQkgKiBOb3RlIHRoYXQgd2UgYWxzbyBzZXQgbklFTiB3aGlsZSByZXNldHRpbmcgdGhlIGRldmljZSwKLQkgKiB0byBtYXNrIHVud2FudGVkIGludGVycnVwdHMgZnJvbSB0aGUgaW50ZXJmYWNlIGR1cmluZyB0aGUgcmVzZXQuCi0JICogSG93ZXZlciwgZHVlIHRvIHRoZSBkZXNpZ24gb2YgUEMgaGFyZHdhcmUsIHRoaXMgd2lsbCBjYXVzZSBhbgotCSAqIGltbWVkaWF0ZSBpbnRlcnJ1cHQgZHVlIHRvIHRoZSBlZGdlIHRyYW5zaXRpb24gaXQgcHJvZHVjZXMuCi0JICogVGhpcyBzaW5nbGUgaW50ZXJydXB0IGdpdmVzIHVzIGEgImZhc3QgcG9sbCIgZm9yIGRyaXZlcyB0aGF0Ci0JICogcmVjb3ZlciBmcm9tIHJlc2V0IHZlcnkgcXVpY2tseSwgc2F2aW5nIHVzIHRoZSBmaXJzdCA1MG1zIHdhaXQgdGltZS4KLQkgKgotCSAqIFRPRE86IGFkZCAtPnNvZnRyZXNldCBtZXRob2QgYW5kIHN0b3AgYWJ1c2luZyAtPnNldF9pcnEKLQkgKi8KLQkvKiBzZXQgU1JTVCBhbmQgbklFTiAqLwotCXRwX29wcy0+c2V0X2lycShod2lmLCA0KTsKLQkvKiBtb3JlIHRoYW4gZW5vdWdoIHRpbWUgKi8KLQl1ZGVsYXkoMTApOwotCS8qIGNsZWFyIFNSU1QsIGxlYXZlIG5JRU4gKHVubGVzcyBkZXZpY2UgaXMgb24gdGhlIHF1aXJrIGxpc3QpICovCi0JdHBfb3BzLT5zZXRfaXJxKGh3aWYsIGRyaXZlLT5xdWlya19saXN0ID09IDIpOwotCS8qIG1vcmUgdGhhbiBlbm91Z2ggdGltZSAqLwotCXVkZWxheSgxMCk7Ci0JaHdpZi0+cG9sbF90aW1lb3V0ID0gamlmZmllcyArIFdBSVRfV09SU1RDQVNFOwotCWh3aWYtPnBvbGxpbmcgPSAxOwotCV9faWRlX3NldF9oYW5kbGVyKGRyaXZlLCAmcmVzZXRfcG9sbGZ1bmMsIEhaLzIwLCBOVUxMKTsKLQotCS8qCi0JICogU29tZSB3ZWlyZCBjb250cm9sbGVyIGxpa2UgcmVzZXR0aW5nIHRoZW1zZWx2ZXMgdG8gYSBzdHJhbmdlCi0JICogc3RhdGUgd2hlbiB0aGUgZGlza3MgYXJlIHJlc2V0IHRoaXMgd2F5LiBBdCBsZWFzdCwgdGhlIFdpbmJvbmQKLQkgKiA1NTMgZG9jdW1lbnRhdGlvbiBzYXlzIHRoYXQKLQkgKi8KLQlwb3J0X29wcyA9IGh3aWYtPnBvcnRfb3BzOwotCWlmIChwb3J0X29wcyAmJiBwb3J0X29wcy0+cmVzZXRwcm9jKQotCQlwb3J0X29wcy0+cmVzZXRwcm9jKGRyaXZlKTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3aWYtPmxvY2ssIGZsYWdzKTsKLQlyZXR1cm4gaWRlX3N0YXJ0ZWQ7Ci19Ci0KLS8qCi0gKiBpZGVfZG9fcmVzZXQoKSBpcyB0aGUgZW50cnkgcG9pbnQgdG8gdGhlIGRyaXZlL2ludGVyZmFjZSByZXNldCBjb2RlLgotICovCi0KLWlkZV9zdGFydHN0b3BfdCBpZGVfZG9fcmVzZXQgKGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQlyZXR1cm4gZG9fcmVzZXQxKGRyaXZlLCAwKTsKLX0KLQotRVhQT1JUX1NZTUJPTChpZGVfZG9fcmVzZXQpOwotCiAvKgogICogaWRlX3dhaXRfbm90X2J1c3koKSB3YWl0cyBmb3IgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBkZXZpY2Ugb24gdGhlIGh3aWYKICAqIHRvIHJlcG9ydCBhIG5vbi1idXN5IHN0YXR1cywgc2VlIGNvbW1lbnRzIGluIGlkZV9wcm9iZV9wb3J0KCkuCkBAIC0xMTg3LDcgKzUwMyw3IEBACiB7CiAJdTggc3RhdCA9IDA7CiAKLQl3aGlsZSh0aW1lb3V0LS0pIHsKKwl3aGlsZSAodGltZW91dC0tKSB7CiAJCS8qCiAJCSAqIFR1cm4gdGhpcyBpbnRvIGEgc2NoZWR1bGUoKSBzbGVlcCBvbmNlIEknbSBzdXJlCiAJCSAqIGFib3V0IGxvY2tpbmcgaXNzdWVzICgyLjUgd29yayA/KS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1saWIuYyBiL2RyaXZlcnMvaWRlL2lkZS1saWIuYwppbmRleCAwOTUyNmEwLi5mNmM2ODNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtbGliLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWxpYi5jCkBAIC01LDE2MyArNSw2IEBACiAjaW5jbHVkZSA8bGludXgvaWRlLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAKLXN0YXRpYyBjb25zdCBjaGFyICp1ZG1hX3N0cltdID0KLQkgeyAiVURNQS8xNiIsICJVRE1BLzI1IiwgICJVRE1BLzMzIiwgICJVRE1BLzQ0IiwKLQkgICAiVURNQS82NiIsICJVRE1BLzEwMCIsICJVRE1BLzEzMyIsICJVRE1BNyIgfTsKLXN0YXRpYyBjb25zdCBjaGFyICptd2RtYV9zdHJbXSA9Ci0JeyAiTVdETUEwIiwgIk1XRE1BMSIsICJNV0RNQTIiIH07Ci1zdGF0aWMgY29uc3QgY2hhciAqc3dkbWFfc3RyW10gPQotCXsgIlNXRE1BMCIsICJTV0RNQTEiLCAiU1dETUEyIiB9Owotc3RhdGljIGNvbnN0IGNoYXIgKnBpb19zdHJbXSA9Ci0JeyAiUElPMCIsICJQSU8xIiwgIlBJTzIiLCAiUElPMyIsICJQSU80IiwgIlBJTzUiIH07Ci0KLS8qKgotICoJaWRlX3hmZXJfdmVyYm9zZQktCXJldHVybiBJREUgbW9kZSBuYW1lcwotICoJQG1vZGU6IHRyYW5zZmVyIG1vZGUKLSAqCi0gKglSZXR1cm5zIGEgY29uc3RhbnQgc3RyaW5nIGdpdmluZyB0aGUgbmFtZSBvZiB0aGUgbW9kZQotICoJcmVxdWVzdGVkLgotICovCi0KLWNvbnN0IGNoYXIgKmlkZV94ZmVyX3ZlcmJvc2UodTggbW9kZSkKLXsKLQljb25zdCBjaGFyICpzOwotCXU4IGkgPSBtb2RlICYgMHhmOwotCi0JaWYgKG1vZGUgPj0gWEZFUl9VRE1BXzAgJiYgbW9kZSA8PSBYRkVSX1VETUFfNykKLQkJcyA9IHVkbWFfc3RyW2ldOwotCWVsc2UgaWYgKG1vZGUgPj0gWEZFUl9NV19ETUFfMCAmJiBtb2RlIDw9IFhGRVJfTVdfRE1BXzIpCi0JCXMgPSBtd2RtYV9zdHJbaV07Ci0JZWxzZSBpZiAobW9kZSA+PSBYRkVSX1NXX0RNQV8wICYmIG1vZGUgPD0gWEZFUl9TV19ETUFfMikKLQkJcyA9IHN3ZG1hX3N0cltpXTsKLQllbHNlIGlmIChtb2RlID49IFhGRVJfUElPXzAgJiYgbW9kZSA8PSBYRkVSX1BJT181KQotCQlzID0gcGlvX3N0cltpICYgMHg3XTsKLQllbHNlIGlmIChtb2RlID09IFhGRVJfUElPX1NMT1cpCi0JCXMgPSAiUElPIFNMT1ciOwotCWVsc2UKLQkJcyA9ICJYRkVSIEVSUk9SIjsKLQotCXJldHVybiBzOwotfQotRVhQT1JUX1NZTUJPTChpZGVfeGZlcl92ZXJib3NlKTsKLQotLyoqCi0gKglpZGVfcmF0ZV9maWx0ZXIJCS0JZmlsdGVyIHRyYW5zZmVyIG1vZGUKLSAqCUBkcml2ZTogSURFIGRldmljZQotICoJQHNwZWVkOiBkZXNpcmVkIHNwZWVkCi0gKgotICoJR2l2ZW4gdGhlIGF2YWlsYWJsZSB0cmFuc2ZlciBtb2RlcyB0aGlzIGZ1bmN0aW9uIHJldHVybnMKLSAqCXRoZSBiZXN0IGF2YWlsYWJsZSBzcGVlZCBhdCBvciBiZWxvdyB0aGUgc3BlZWQgcmVxdWVzdGVkLgotICoKLSAqCVRPRE86IGNoZWNrIGRldmljZSBQSU8gY2FwYWJpbGl0aWVzCi0gKi8KLQotc3RhdGljIHU4IGlkZV9yYXRlX2ZpbHRlcihpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IHNwZWVkKQotewotCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQl1OCBtb2RlID0gaWRlX2ZpbmRfZG1hX21vZGUoZHJpdmUsIHNwZWVkKTsKLQotCWlmIChtb2RlID09IDApIHsKLQkJaWYgKGh3aWYtPnBpb19tYXNrKQotCQkJbW9kZSA9IGZscyhod2lmLT5waW9fbWFzaykgLSAxICsgWEZFUl9QSU9fMDsKLQkJZWxzZQotCQkJbW9kZSA9IFhGRVJfUElPXzQ7Ci0JfQotCi0vKglwcmludGsoIiVzOiBtb2RlIDB4JTAyeCwgc3BlZWQgMHglMDJ4XG4iLCBfX2Z1bmNfXywgbW9kZSwgc3BlZWQpOyAqLwotCi0JcmV0dXJuIG1pbihzcGVlZCwgbW9kZSk7Ci19Ci0KLS8qKgotICoJaWRlX2dldF9iZXN0X3Bpb19tb2RlCS0JZ2V0IFBJTyBtb2RlIGZyb20gZHJpdmUKLSAqCUBkcml2ZTogZHJpdmUgdG8gY29uc2lkZXIKLSAqCUBtb2RlX3dhbnRlZDogcHJlZmVycmVkIG1vZGUKLSAqCUBtYXhfbW9kZTogaGlnaGVzdCBhbGxvd2VkIG1vZGUKLSAqCi0gKglUaGlzIHJvdXRpbmUgcmV0dXJucyB0aGUgcmVjb21tZW5kZWQgUElPIHNldHRpbmdzIGZvciBhIGdpdmVuIGRyaXZlLAotICoJYmFzZWQgb24gdGhlIGRyaXZlLT5pZCBpbmZvcm1hdGlvbiBhbmQgdGhlIGlkZV9waW9fYmxhY2tsaXN0W10uCi0gKgotICoJRHJpdmUgUElPIG1vZGUgaXMgYXV0by1zZWxlY3RlZCBpZiAyNTUgaXMgcGFzc2VkIGFzIG1vZGVfd2FudGVkLgotICoJVGhpcyBpcyB1c2VkIGJ5IG1vc3QgY2hpcHNldCBzdXBwb3J0IG1vZHVsZXMgd2hlbiAiYXV0by10dW5pbmciLgotICovCi0KLXU4IGlkZV9nZXRfYmVzdF9waW9fbW9kZShpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IG1vZGVfd2FudGVkLCB1OCBtYXhfbW9kZSkKLXsKLQl1MTYgKmlkID0gZHJpdmUtPmlkOwotCWludCBwaW9fbW9kZSA9IC0xLCBvdmVycmlkZGVuID0gMDsKLQotCWlmIChtb2RlX3dhbnRlZCAhPSAyNTUpCi0JCXJldHVybiBtaW5fdCh1OCwgbW9kZV93YW50ZWQsIG1heF9tb2RlKTsKLQotCWlmICgoZHJpdmUtPmh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfUElPX05PX0JMQUNLTElTVCkgPT0gMCkKLQkJcGlvX21vZGUgPSBpZGVfc2Nhbl9waW9fYmxhY2tsaXN0KChjaGFyICopJmlkW0FUQV9JRF9QUk9EXSk7Ci0KLQlpZiAocGlvX21vZGUgIT0gLTEpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGlzIG9uIFBJTyBibGFja2xpc3RcbiIsIGRyaXZlLT5uYW1lKTsKLQl9IGVsc2UgewotCQlwaW9fbW9kZSA9IGlkW0FUQV9JRF9PTERfUElPX01PREVTXSA+PiA4OwotCQlpZiAocGlvX21vZGUgPiAyKSB7CS8qIDIgaXMgbWF4aW11bSBhbGxvd2VkIHRQSU8gdmFsdWUgKi8KLQkJCXBpb19tb2RlID0gMjsKLQkJCW92ZXJyaWRkZW4gPSAxOwotCQl9Ci0KLQkJaWYgKGlkW0FUQV9JRF9GSUVMRF9WQUxJRF0gJiAyKSB7CSAgICAgIC8qIEFUQTI/ICovCi0JCQlpZiAoYXRhX2lkX2hhc19pb3JkeShpZCkpIHsKLQkJCQlpZiAoaWRbQVRBX0lEX1BJT19NT0RFU10gJiA3KSB7Ci0JCQkJCW92ZXJyaWRkZW4gPSAwOwotCQkJCQlpZiAoaWRbQVRBX0lEX1BJT19NT0RFU10gJiA0KQotCQkJCQkJcGlvX21vZGUgPSA1OwotCQkJCQllbHNlIGlmIChpZFtBVEFfSURfUElPX01PREVTXSAmIDIpCi0JCQkJCQlwaW9fbW9kZSA9IDQ7Ci0JCQkJCWVsc2UKLQkJCQkJCXBpb19tb2RlID0gMzsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCQlpZiAob3ZlcnJpZGRlbikKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiB0UElPID4gMiwgYXNzdW1pbmcgdFBJTyA9IDJcbiIsCi0JCQkJCSBkcml2ZS0+bmFtZSk7Ci0JfQotCi0JaWYgKHBpb19tb2RlID4gbWF4X21vZGUpCi0JCXBpb19tb2RlID0gbWF4X21vZGU7Ci0KLQlyZXR1cm4gcGlvX21vZGU7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpZGVfZ2V0X2Jlc3RfcGlvX21vZGUpOwotCi0vKiByZXFfcGlvID09ICIyNTUiIGZvciBhdXRvLXR1bmUgKi8KLXZvaWQgaWRlX3NldF9waW8oaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCByZXFfcGlvKQotewotCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQljb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzICpwb3J0X29wcyA9IGh3aWYtPnBvcnRfb3BzOwotCXU4IGhvc3RfcGlvLCBwaW87Ci0KLQlpZiAocG9ydF9vcHMgPT0gTlVMTCB8fCBwb3J0X29wcy0+c2V0X3Bpb19tb2RlID09IE5VTEwgfHwKLQkgICAgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTk9fU0VUX01PREUpKQotCQlyZXR1cm47Ci0KLQlCVUdfT04oaHdpZi0+cGlvX21hc2sgPT0gMHgwMCk7Ci0KLQlob3N0X3BpbyA9IGZscyhod2lmLT5waW9fbWFzaykgLSAxOwotCi0JcGlvID0gaWRlX2dldF9iZXN0X3Bpb19tb2RlKGRyaXZlLCByZXFfcGlvLCBob3N0X3Bpbyk7Ci0KLQkvKgotCSAqIFRPRE86Ci0JICogLSByZXBvcnQgZGV2aWNlIG1heCBQSU8gbW9kZQotCSAqIC0gY2hlY2sgcmVxX3BpbyAhPSAyNTUgYWdhaW5zdCBkZXZpY2UgbWF4IFBJTyBtb2RlCi0JICovCi0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBob3N0IG1heCBQSU8lZCB3YW50ZWQgUElPJWQlcyBzZWxlY3RlZCBQSU8lZFxuIiwKLQkJCSAgZHJpdmUtPm5hbWUsIGhvc3RfcGlvLCByZXFfcGlvLAotCQkJICByZXFfcGlvID09IDI1NSA/ICIoYXV0by10dW5lKSIgOiAiIiwgcGlvKTsKLQotCSh2b2lkKWlkZV9zZXRfcGlvX21vZGUoZHJpdmUsIFhGRVJfUElPXzAgKyBwaW8pOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoaWRlX3NldF9waW8pOwotCiAvKioKICAqCWlkZV90b2dnbGVfYm91bmNlCS0JaGFuZGxlIGJvdW5jZSBidWZmZXJpbmcKICAqCUBkcml2ZTogZHJpdmUgdG8gdXBkYXRlCkBAIC0xODgsODkgKzMxLDYgQEAKIAkJYmxrX3F1ZXVlX2JvdW5jZV9saW1pdChkcml2ZS0+cXVldWUsIGFkZHIpOwogfQogCi1pbnQgaWRlX3NldF9waW9fbW9kZShpZGVfZHJpdmVfdCAqZHJpdmUsIGNvbnN0IHU4IG1vZGUpCi17Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCWNvbnN0IHN0cnVjdCBpZGVfcG9ydF9vcHMgKnBvcnRfb3BzID0gaHdpZi0+cG9ydF9vcHM7Ci0KLQlpZiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19OT19TRVRfTU9ERSkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAocG9ydF9vcHMgPT0gTlVMTCB8fCBwb3J0X29wcy0+c2V0X3Bpb19tb2RlID09IE5VTEwpCi0JCXJldHVybiAtMTsKLQotCS8qCi0JICogVE9ETzogdGVtcG9yYXJ5IGhhY2sgZm9yIHNvbWUgbGVnYWN5IGhvc3QgZHJpdmVycyB0aGF0IGRpZG4ndAotCSAqIHNldCB0cmFuc2ZlciBtb2RlIG9uIHRoZSBkZXZpY2UgaW4gLT5zZXRfcGlvX21vZGUgbWV0aG9kLi4uCi0JICovCi0JaWYgKHBvcnRfb3BzLT5zZXRfZG1hX21vZGUgPT0gTlVMTCkgewotCQlwb3J0X29wcy0+c2V0X3Bpb19tb2RlKGRyaXZlLCBtb2RlIC0gWEZFUl9QSU9fMCk7Ci0JCXJldHVybiAwOwotCX0KLQotCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX1BPU1RfU0VUX01PREUpIHsKLQkJaWYgKGlkZV9jb25maWdfZHJpdmVfc3BlZWQoZHJpdmUsIG1vZGUpKQotCQkJcmV0dXJuIC0xOwotCQlwb3J0X29wcy0+c2V0X3Bpb19tb2RlKGRyaXZlLCBtb2RlIC0gWEZFUl9QSU9fMCk7Ci0JCXJldHVybiAwOwotCX0gZWxzZSB7Ci0JCXBvcnRfb3BzLT5zZXRfcGlvX21vZGUoZHJpdmUsIG1vZGUgLSBYRkVSX1BJT18wKTsKLQkJcmV0dXJuIGlkZV9jb25maWdfZHJpdmVfc3BlZWQoZHJpdmUsIG1vZGUpOwotCX0KLX0KLQotaW50IGlkZV9zZXRfZG1hX21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCB1OCBtb2RlKQotewotCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQljb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzICpwb3J0X29wcyA9IGh3aWYtPnBvcnRfb3BzOwotCi0JaWYgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTk9fU0VUX01PREUpCi0JCXJldHVybiAwOwotCi0JaWYgKHBvcnRfb3BzID09IE5VTEwgfHwgcG9ydF9vcHMtPnNldF9kbWFfbW9kZSA9PSBOVUxMKQotCQlyZXR1cm4gLTE7Ci0KLQlpZiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19QT1NUX1NFVF9NT0RFKSB7Ci0JCWlmIChpZGVfY29uZmlnX2RyaXZlX3NwZWVkKGRyaXZlLCBtb2RlKSkKLQkJCXJldHVybiAtMTsKLQkJcG9ydF9vcHMtPnNldF9kbWFfbW9kZShkcml2ZSwgbW9kZSk7Ci0JCXJldHVybiAwOwotCX0gZWxzZSB7Ci0JCXBvcnRfb3BzLT5zZXRfZG1hX21vZGUoZHJpdmUsIG1vZGUpOwotCQlyZXR1cm4gaWRlX2NvbmZpZ19kcml2ZV9zcGVlZChkcml2ZSwgbW9kZSk7Ci0JfQotfQotRVhQT1JUX1NZTUJPTF9HUEwoaWRlX3NldF9kbWFfbW9kZSk7Ci0KLS8qKgotICoJaWRlX3NldF94ZmVyX3JhdGUJLQlzZXQgdHJhbnNmZXIgcmF0ZQotICoJQGRyaXZlOiBkcml2ZSB0byBzZXQKLSAqCUByYXRlOiBzcGVlZCB0byBhdHRlbXB0IHRvIHNldAotICoKLSAqCUdlbmVyYWwgaGVscGVyIGZvciBzZXR0aW5nIHRoZSBzcGVlZCBvZiBhbiBJREUgZGV2aWNlLiBUaGlzCi0gKglmdW5jdGlvbiBrbm93cyBhYm91dCB1c2VyIGVuZm9yY2VkIGxpbWl0cyBmcm9tIHRoZSBjb25maWd1cmF0aW9uCi0gKgl3aGljaCAtPnNldF9waW9fbW9kZS8tPnNldF9kbWFfbW9kZSBkb2VzIG5vdC4KLSAqLwotCi1pbnQgaWRlX3NldF94ZmVyX3JhdGUoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCByYXRlKQotewotCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQljb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzICpwb3J0X29wcyA9IGh3aWYtPnBvcnRfb3BzOwotCi0JaWYgKHBvcnRfb3BzID09IE5VTEwgfHwgcG9ydF9vcHMtPnNldF9kbWFfbW9kZSA9PSBOVUxMIHx8Ci0JICAgIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX05PX1NFVF9NT0RFKSkKLQkJcmV0dXJuIC0xOwotCi0JcmF0ZSA9IGlkZV9yYXRlX2ZpbHRlcihkcml2ZSwgcmF0ZSk7Ci0KLQlCVUdfT04ocmF0ZSA8IFhGRVJfUElPXzApOwotCi0JaWYgKHJhdGUgPj0gWEZFUl9QSU9fMCAmJiByYXRlIDw9IFhGRVJfUElPXzUpCi0JCXJldHVybiBpZGVfc2V0X3Bpb19tb2RlKGRyaXZlLCByYXRlKTsKLQotCXJldHVybiBpZGVfc2V0X2RtYV9tb2RlKGRyaXZlLCByYXRlKTsKLX0KLQogc3RhdGljIHZvaWQgaWRlX2R1bXBfb3Bjb2RlKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKIAlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBkcml2ZS0+aHdpZi0+cnE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtcGFyay5jIGIvZHJpdmVycy9pZGUvaWRlLXBhcmsuYwppbmRleCBjODc1YTk1Li5mMzBlNTIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtcGFyay5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1wYXJrLmMKQEAgLTEsNSArMSw2IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaWRlLmg+CisjaW5jbHVkZSA8bGludXgvaGRyZWcuaD4KICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAKQEAgLTYwLDYgKzYxLDMwIEBACiAJcmV0dXJuOwogfQogCitpZGVfc3RhcnRzdG9wX3QgaWRlX2RvX3BhcmtfdW5wYXJrKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxKQoreworCWlkZV90YXNrX3QgdGFzazsKKwlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZ0YXNrLnRmOworCisJbWVtc2V0KCZ0YXNrLCAwLCBzaXplb2YodGFzaykpOworCWlmIChycS0+Y21kWzBdID09IFJFUV9QQVJLX0hFQURTKSB7CisJCWRyaXZlLT5zbGVlcCA9ICoodW5zaWduZWQgbG9uZyAqKXJxLT5zcGVjaWFsOworCQlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19TTEVFUElORzsKKwkJdGYtPmNvbW1hbmQgPSBBVEFfQ01EX0lETEVJTU1FRElBVEU7CisJCXRmLT5mZWF0dXJlID0gMHg0NDsKKwkJdGYtPmxiYWwgPSAweDRjOworCQl0Zi0+bGJhbSA9IDB4NGU7CisJCXRmLT5sYmFoID0gMHg1NTsKKwkJdGFzay50Zl9mbGFncyB8PSBJREVfVEZMQUdfQ1VTVE9NX0hBTkRMRVI7CisJfSBlbHNlCQkvKiBjbWQgPT0gUkVRX1VOUEFSS19IRUFEUyAqLworCQl0Zi0+Y29tbWFuZCA9IEFUQV9DTURfQ0hLX1BPV0VSOworCisJdGFzay50Zl9mbGFncyB8PSBJREVfVEZMQUdfVEYgfCBJREVfVEZMQUdfREVWSUNFOworCXRhc2sucnEgPSBycTsKKwlkcml2ZS0+aHdpZi0+ZGF0YV9waGFzZSA9IHRhc2suZGF0YV9waGFzZSA9IFRBU0tGSUxFX05PX0RBVEE7CisJcmV0dXJuIGRvX3J3X3Rhc2tmaWxlKGRyaXZlLCAmdGFzayk7Cit9CisKIHNzaXplX3QgaWRlX3Bhcmtfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkgICAgICBjaGFyICpidWYpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtcGNpLWdlbmVyaWMuYyBiL2RyaXZlcnMvaWRlL2lkZS1wY2ktZ2VuZXJpYy5jCmluZGV4IGJkZGFlMmIuLjYxMTExZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1wY2ktZ2VuZXJpYy5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1wY2ktZ2VuZXJpYy5jCkBAIC0zMyw4ICszMyw2IEBACiBtb2R1bGVfcGFyYW1fbmFtZWQoYWxsX2dlbmVyaWNfaWRlLCBpZGVfZ2VuZXJpY19hbGwsIGJvb2wsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhhbGxfZ2VuZXJpY19pZGUsICJJREUgZ2VuZXJpYyB3aWxsIGNsYWltIGFsbCB1bmtub3duIFBDSSBJREUgc3RvcmFnZSBjb250cm9sbGVycy4iKTsKIAotI2RlZmluZSBJREVfSEZMQUdTX1VNQyAoSURFX0hGTEFHX05PX0RNQSB8IElERV9IRkxBR19GT1JDRV9MRUdBQ1lfSVJRUykKLQogI2RlZmluZSBERUNMQVJFX0dFTkVSSUNfUENJX0RFVihleHRyYV9mbGFncykgXAogCXsgXAogCQkubmFtZQkJPSBEUlZfTkFNRSwgXApAQCAtNjEsNyArNTksNyBAQAogCS8qICAyOiBTQU1VUkFJIC8gSFQ2NTY1IC8gSElOVF9JREUgKi8KIAlERUNMQVJFX0dFTkVSSUNfUENJX0RFVigwKSwKIAkvKiAgMzogVU04NjczRiAvIFVNODg4NkEgLyBVTTg4ODZCRiAqLwotCURFQ0xBUkVfR0VORVJJQ19QQ0lfREVWKElERV9IRkxBR1NfVU1DKSwKKwlERUNMQVJFX0dFTkVSSUNfUENJX0RFVihJREVfSEZMQUdfTk9fRE1BKSwKIAkvKiAgNDogVklBX0lERSAvIE9QVEk2MjFWIC8gUGljY29sbzAxMHsyLDMsNX0gKi8KIAlERUNMQVJFX0dFTkVSSUNfUENJX0RFVihJREVfSEZMQUdfTk9fQVVUT0RNQSksCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1wcm9iZS5jIGIvZHJpdmVycy9pZGUvaWRlLXByb2JlLmMKaW5kZXggZWU4ZTNlNy4uOTc0MDY3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLXByb2JlLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLXByb2JlLmMKQEAgLTE4MSwxNiArMTgxLDE2IEBACiAgKglkb19pZGVudGlmeQktCWlkZW50aWZ5IGEgZHJpdmUKICAqCUBkcml2ZTogZHJpdmUgdG8gaWRlbnRpZnkgCiAgKglAY21kOiBjb21tYW5kIHVzZWQKKyAqCUBpZDogYnVmZmVyIGZvciBJREVOVElGWSBkYXRhCiAgKgogICoJQ2FsbGVkIHdoZW4gd2UgaGF2ZSBpc3N1ZWQgYSBkcml2ZSBpZGVudGlmeSBjb21tYW5kIHRvCiAgKglyZWFkIGFuZCBwYXJzZSB0aGUgcmVzdWx0cy4gVGhpcyBmdW5jdGlvbiBpcyBydW4gd2l0aAogICoJaW50ZXJydXB0cyBkaXNhYmxlZC4gCiAgKi8KIAotc3RhdGljIHZvaWQgZG9faWRlbnRpZnkoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCBjbWQpCitzdGF0aWMgdm9pZCBkb19pZGVudGlmeShpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IGNtZCwgdTE2ICppZCkKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0JdTE2ICppZCA9IGRyaXZlLT5pZDsKIAljaGFyICptID0gKGNoYXIgKikmaWRbQVRBX0lEX1BST0RdOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGJzd2FwID0gMTsKQEAgLTIzMywxNiArMjMzLDYgQEAKIAlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19QUkVTRU5UOwogCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19ERUFEOwogCi0JLyoKLQkgKiBDaGVjayBmb3IgYW4gQVRBUEkgZGV2aWNlCi0JICovCi0JaWYgKGNtZCA9PSBBVEFfQ01EX0lEX0FUQVBJKQotCQlpZGVfY2xhc3NpZnlfYXRhcGlfZGV2KGRyaXZlKTsKLQllbHNlCi0JLyoKLQkgKiBOb3QgYW4gQVRBUEkgZGV2aWNlOiBsb29rcyBsaWtlIGEgInJlZ3VsYXIiIGhhcmQgZGlzawotCSAqLwotCQlpZGVfY2xhc3NpZnlfYXRhX2Rldihkcml2ZSk7CiAJcmV0dXJuOwogZXJyX21pc2M6CiAJa2ZyZWUoaWQpOwpAQCAtMjUwLDIxICsyNDAsMTkgQEAKIH0KIAogLyoqCi0gKglhY3R1YWxfdHJ5X3RvX2lkZW50aWZ5CS0Jc2VuZCBhdGEvYXRhcGkgaWRlbnRpZnkKKyAqCWlkZV9kZXZfcmVhZF9pZAktCXNlbmQgQVRBL0FUQVBJIElERU5USUZZIGNvbW1hbmQKICAqCUBkcml2ZTogZHJpdmUgdG8gaWRlbnRpZnkKICAqCUBjbWQ6IGNvbW1hbmQgdG8gdXNlCisgKglAaWQ6IGJ1ZmZlciBmb3IgSURFTlRJRlkgZGF0YQogICoKLSAqCXRyeV90b19pZGVudGlmeSgpIHNlbmRzIGFuIEFUQShQSSkgSURFTlRJRlkgcmVxdWVzdCB0byBhIGRyaXZlCi0gKglhbmQgd2FpdHMgZm9yIGEgcmVzcG9uc2UuICBJdCBhbHNvIG1vbml0b3JzIGlycXMgd2hpbGUgdGhpcyBpcwotICoJaGFwcGVuaW5nLCBpbiBob3BlIG9mIGF1dG9tYXRpY2FsbHkgZGV0ZXJtaW5pbmcgd2hpY2ggb25lIGlzCi0gKgliZWluZyB1c2VkIGJ5IHRoZSBpbnRlcmZhY2UuCisgKglTZW5kcyBhbiBBVEEoUEkpIElERU5USUZZIHJlcXVlc3QgdG8gYSBkcml2ZSBhbmQgd2FpdHMgZm9yIGEgcmVzcG9uc2UuCiAgKgogICoJUmV0dXJuczoJMCAgZGV2aWNlIHdhcyBpZGVudGlmaWVkCiAgKgkJCTEgIGRldmljZSB0aW1lZC1vdXQgKG5vIHJlc3BvbnNlIHRvIGlkZW50aWZ5IHJlcXVlc3QpCiAgKgkJCTIgIGRldmljZSBhYm9ydGVkIHRoZSBjb21tYW5kIChyZWZ1c2VkIHRvIGlkZW50aWZ5IGl0c2VsZikKICAqLwogCi1zdGF0aWMgaW50IGFjdHVhbF90cnlfdG9faWRlbnRpZnkgKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggY21kKQoraW50IGlkZV9kZXZfcmVhZF9pZChpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IGNtZCwgdTE2ICppZCkKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJc3RydWN0IGlkZV9pb19wb3J0cyAqaW9fcG9ydHMgPSAmaHdpZi0+aW9fcG9ydHM7CkBAIC0yNzMsNiArMjYxLDEzIEBACiAJdW5zaWduZWQgbG9uZyB0aW1lb3V0OwogCXU4IHMgPSAwLCBhID0gMDsKIAorCS8qCisJICogRGlzYWJsZSBkZXZpY2UgSVJRLiAgT3RoZXJ3aXNlIHdlJ2xsIGdldCBzcHVyaW91cyBpbnRlcnJ1cHRzCisJICogZHVyaW5nIHRoZSBpZGVudGlmeSBwaGFzZSB0aGF0IHRoZSBJUlEgaGFuZGxlciBpc24ndCBleHBlY3RpbmcuCisJICovCisJaWYgKGlvX3BvcnRzLT5jdGxfYWRkcikKKwkJdHBfb3BzLT5zZXRfaXJxKGh3aWYsIDApOworCiAJLyogdGFrZSBhIGRlZXAgYnJlYXRoICovCiAJbXNsZWVwKDUwKTsKIApAQCAtMzE3LDcgKzMxMiw3IEBACiAKIAlpZiAoT0tfU1RBVChzLCBBVEFfRFJRLCBCQURfUl9TVEFUKSkgewogCQkvKiBkcml2ZSByZXR1cm5lZCBJRCAqLwotCQlkb19pZGVudGlmeShkcml2ZSwgY21kKTsKKwkJZG9faWRlbnRpZnkoZHJpdmUsIGNtZCwgaWQpOwogCQkvKiBkcml2ZSByZXNwb25kZWQgd2l0aCBJRCAqLwogCQlyYyA9IDA7CiAJCS8qIGNsZWFyIGRyaXZlIElSUSAqLwpAQCAtMzI5LDYzICszMjQsNiBAQAogCXJldHVybiByYzsKIH0KIAotLyoqCi0gKgl0cnlfdG9faWRlbnRpZnkJLQl0cnkgdG8gaWRlbnRpZnkgYSBkcml2ZQotICoJQGRyaXZlOiBkcml2ZSB0byBwcm9iZQotICoJQGNtZDogY29tbWFuZCB0byB1c2UKLSAqCi0gKglJc3N1ZSB0aGUgaWRlbnRpZnkgY29tbWFuZCBhbmQgdGhlbiBkbyBJUlEgcHJvYmluZyB0bwotICoJY29tcGxldGUgdGhlIGlkZW50aWZpY2F0aW9uIHdoZW4gbmVlZGVkIGJ5IGZpbmRpbmcgdGhlCi0gKglJUlEgdGhlIGRyaXZlIGlzIGF0dGFjaGVkIHRvCi0gKi8KLSAKLXN0YXRpYyBpbnQgdHJ5X3RvX2lkZW50aWZ5IChpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IGNtZCkKLXsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0JY29uc3Qgc3RydWN0IGlkZV90cF9vcHMgKnRwX29wcyA9IGh3aWYtPnRwX29wczsKLQlpbnQgcmV0dmFsOwotCWludCBhdXRvcHJvYmUgPSAwOwotCXVuc2lnbmVkIGxvbmcgY29va2llID0gMDsKLQotCS8qCi0JICogRGlzYWJsZSBkZXZpY2UgaXJxIHVubGVzcyB3ZSBuZWVkIHRvCi0JICogcHJvYmUgZm9yIGl0LiBPdGhlcndpc2Ugd2UnbGwgZ2V0IHNwdXJpb3VzCi0JICogaW50ZXJydXB0cyBkdXJpbmcgdGhlIGlkZW50aWZ5LXBoYXNlIHRoYXQKLQkgKiB0aGUgaXJxIGhhbmRsZXIgaXNuJ3QgZXhwZWN0aW5nLgotCSAqLwotCWlmIChod2lmLT5pb19wb3J0cy5jdGxfYWRkcikgewotCQlpZiAoIWh3aWYtPmlycSkgewotCQkJYXV0b3Byb2JlID0gMTsKLQkJCWNvb2tpZSA9IHByb2JlX2lycV9vbigpOwotCQl9Ci0JCXRwX29wcy0+c2V0X2lycShod2lmLCBhdXRvcHJvYmUpOwotCX0KLQotCXJldHZhbCA9IGFjdHVhbF90cnlfdG9faWRlbnRpZnkoZHJpdmUsIGNtZCk7Ci0KLQlpZiAoYXV0b3Byb2JlKSB7Ci0JCWludCBpcnE7Ci0KLQkJdHBfb3BzLT5zZXRfaXJxKGh3aWYsIDApOwotCQkvKiBjbGVhciBkcml2ZSBJUlEgKi8KLQkJKHZvaWQpdHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKTsKLQkJdWRlbGF5KDUpOwotCQlpcnEgPSBwcm9iZV9pcnFfb2ZmKGNvb2tpZSk7Ci0JCWlmICghaHdpZi0+aXJxKSB7Ci0JCQlpZiAoaXJxID4gMCkgewotCQkJCWh3aWYtPmlycSA9IGlycTsKLQkJCX0gZWxzZSB7Ci0JCQkJLyogTW1tbS4uIG11bHRpcGxlIElSUXMuLgotCQkJCSAqIGRvbid0IGtub3cgd2hpY2ggd2FzIG91cnMKLQkJCQkgKi8KLQkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBJUlEgcHJvYmUgZmFpbGVkICgweCVseClcbiIsCi0JCQkJCWRyaXZlLT5uYW1lLCBjb29raWUpOwotCQkJfQotCQl9Ci0JfQotCXJldHVybiByZXR2YWw7Ci19Ci0KIGludCBpZGVfYnVzeV9zbGVlcChpZGVfaHdpZl90ICpod2lmLCB1bnNpZ25lZCBsb25nIHRpbWVvdXQsIGludCBhbHRzdGF0dXMpCiB7CiAJdTggc3RhdDsKQEAgLTQ0MCw2ICszNzgsNyBAQAogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAljb25zdCBzdHJ1Y3QgaWRlX3RwX29wcyAqdHBfb3BzID0gaHdpZi0+dHBfb3BzOworCXUxNiAqaWQgPSBkcml2ZS0+aWQ7CiAJaW50IHJjOwogCXU4IHByZXNlbnQgPSAhIShkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1BSRVNFTlQpLCBzdGF0OwogCkBAIC00NzUsMTEgKzQxNCwxMCBAQAogCiAJaWYgKE9LX1NUQVQoc3RhdCwgQVRBX0RSRFksIEFUQV9CVVNZKSB8fAogCSAgICBwcmVzZW50IHx8IGNtZCA9PSBBVEFfQ01EX0lEX0FUQVBJKSB7Ci0JCS8qIHNlbmQgY21kIGFuZCB3YWl0ICovCi0JCWlmICgocmMgPSB0cnlfdG9faWRlbnRpZnkoZHJpdmUsIGNtZCkpKSB7CisJCXJjID0gaWRlX2Rldl9yZWFkX2lkKGRyaXZlLCBjbWQsIGlkKTsKKwkJaWYgKHJjKQogCQkJLyogZmFpbGVkOiB0cnkgYWdhaW4gKi8KLQkJCXJjID0gdHJ5X3RvX2lkZW50aWZ5KGRyaXZlLGNtZCk7Ci0JCX0KKwkJCXJjID0gaWRlX2Rldl9yZWFkX2lkKGRyaXZlLCBjbWQsIGlkKTsKIAogCQlzdGF0ID0gdHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKTsKIApAQCAtNDk0LDcgKzQzMiw3IEBACiAJCQltc2xlZXAoNTApOwogCQkJdHBfb3BzLT5leGVjX2NvbW1hbmQoaHdpZiwgQVRBX0NNRF9ERVZfUkVTRVQpOwogCQkJKHZvaWQpaWRlX2J1c3lfc2xlZXAoaHdpZiwgV0FJVF9XT1JTVENBU0UsIDApOwotCQkJcmMgPSB0cnlfdG9faWRlbnRpZnkoZHJpdmUsIGNtZCk7CisJCQlyYyA9IGlkZV9kZXZfcmVhZF9pZChkcml2ZSwgY21kLCBpZCk7CiAJCX0KIAogCQkvKiBlbnN1cmUgZHJpdmUgSVJRIGlzIGNsZWFyICovCkBAIC01MTcsMzcgKzQ1NSw2IEBACiAJcmV0dXJuIHJjOwogfQogCi0vKgotICoKLSAqLwotc3RhdGljIHZvaWQgZW5hYmxlX25lc3QgKGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0JY29uc3Qgc3RydWN0IGlkZV90cF9vcHMgKnRwX29wcyA9IGh3aWYtPnRwX29wczsKLQl1OCBzdGF0OwotCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGVuYWJsaW5nICVzIC0tICIsCi0JCWh3aWYtPm5hbWUsIChjaGFyICopJmRyaXZlLT5pZFtBVEFfSURfUFJPRF0pOwotCi0JU0VMRUNUX0RSSVZFKGRyaXZlKTsKLQltc2xlZXAoNTApOwotCXRwX29wcy0+ZXhlY19jb21tYW5kKGh3aWYsIEFUQV9FWEFCWVRFX0VOQUJMRV9ORVNUKTsKLQotCWlmIChpZGVfYnVzeV9zbGVlcChod2lmLCBXQUlUX1dPUlNUQ0FTRSwgMCkpIHsKLQkJcHJpbnRrKEtFUk5fQ09OVCAiZmFpbGVkICh0aW1lb3V0KVxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQltc2xlZXAoNTApOwotCi0Jc3RhdCA9IHRwX29wcy0+cmVhZF9zdGF0dXMoaHdpZik7Ci0KLQlpZiAoIU9LX1NUQVQoc3RhdCwgMCwgQkFEX1NUQVQpKQotCQlwcmludGsoS0VSTl9DT05UICJmYWlsZWQgKHN0YXR1cyA9IDB4JTAyeClcbiIsIHN0YXQpOwotCWVsc2UKLQkJcHJpbnRrKEtFUk5fQ09OVCAic3VjY2Vzc1xuIik7Ci19Ci0KIC8qKgogICoJcHJvYmVfZm9yX2RyaXZlcwktCXVwcGVyIGxldmVsIGRyaXZlIHByb2JlCiAgKglAZHJpdmU6IGRyaXZlIHRvIHByb2JlIGZvcgpAQCAtNTYzLDYgKzQ3MCw4IEBACiBzdGF0aWMgdTggcHJvYmVfZm9yX2RyaXZlKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKIAljaGFyICptOworCWludCByYzsKKwl1OCBjbWQ7CiAKIAkvKgogCSAqCUluIG9yZGVyIHRvIGtlZXAgdGhpbmdzIHNpbXBsZSB3ZSBoYXZlIGFuIGlkCkBAIC01ODYsMjEgKzQ5NSwxOSBAQAogCiAJLyogc2tpcCBwcm9iaW5nPyAqLwogCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19OT1BST0JFKSA9PSAwKSB7Ci1yZXRyeToKIAkJLyogaWYgIShzdWNjZXNzfHx0aW1lZC1vdXQpICovCi0JCWlmIChkb19wcm9iZShkcml2ZSwgQVRBX0NNRF9JRF9BVEEpID49IDIpCisJCWNtZCA9IEFUQV9DTURfSURfQVRBOworCQlyYyA9IGRvX3Byb2JlKGRyaXZlLCBjbWQpOworCQlpZiAocmMgPj0gMikgewogCQkJLyogbG9vayBmb3IgQVRBUEkgZGV2aWNlICovCi0JCQkodm9pZClkb19wcm9iZShkcml2ZSwgQVRBX0NNRF9JRF9BVEFQSSk7CisJCQljbWQgPSBBVEFfQ01EX0lEX0FUQVBJOworCQkJcmMgPSBkb19wcm9iZShkcml2ZSwgY21kKTsKKwkJfQogCiAJCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19QUkVTRU5UKSA9PSAwKQogCQkJLyogZHJpdmUgbm90IGZvdW5kICovCiAJCQlyZXR1cm4gMDsKIAotCQlpZiAoc3Ryc3RyKG0sICJFIFggQSBCIFkgVCBFIE4gRSBTIFQiKSkgewotCQkJZW5hYmxlX25lc3QoZHJpdmUpOwotCQkJZ290byByZXRyeTsKLQkJfQotCiAJCS8qIGlkZW50aWZpY2F0aW9uIGZhaWxlZD8gKi8KIAkJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX0lEX1JFQUQpID09IDApIHsKIAkJCWlmIChkcml2ZS0+bWVkaWEgPT0gaWRlX2Rpc2spIHsKQEAgLTYxNCw4ICs1MjEsMTIgQEAKIAkJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogVW5rbm93biBkZXZpY2Ugb24gYnVzIHJlZnVzZWQgaWRlbnRpZmljYXRpb24uIElnbm9yaW5nLlxuIiwgZHJpdmUtPm5hbWUpOwogCQkJCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19QUkVTRU5UOwogCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKGNtZCA9PSBBVEFfQ01EX0lEX0FUQVBJKQorCQkJCWlkZV9jbGFzc2lmeV9hdGFwaV9kZXYoZHJpdmUpOworCQkJZWxzZQorCQkJCWlkZV9jbGFzc2lmeV9hdGFfZGV2KGRyaXZlKTsKIAkJfQotCQkvKiBkcml2ZSB3YXMgZm91bmQgKi8KIAl9CiAKIAlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUFJFU0VOVCkgPT0gMCkKQEAgLTc3OSw3ICs2OTAsNiBAQAogc3RhdGljIGludCBpZGVfcHJvYmVfcG9ydChpZGVfaHdpZl90ICpod2lmKQogewogCWlkZV9kcml2ZV90ICpkcml2ZTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGludCBpcnFkOwogCWludCBpLCByYyA9IC1FTk9ERVY7CiAKQEAgLTc5Nyw5ICs3MDcsNiBAQAogCWlmIChpcnFkKQogCQlkaXNhYmxlX2lycShod2lmLT5pcnEpOwogCi0JbG9jYWxfc2F2ZV9mbGFncyhmbGFncyk7Ci0JbG9jYWxfaXJxX2VuYWJsZV9pbl9oYXJkaXJxKCk7Ci0KIAlpZiAoaWRlX3BvcnRfd2FpdF9yZWFkeShod2lmKSA9PSAtRUJVU1kpCiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogV2FpdCBmb3IgcmVhZHkgZmFpbGVkIGJlZm9yZSBwcm9iZSAhXG4iLCBod2lmLT5uYW1lKTsKIApAQCAtODEzLDggKzcyMCw2IEBACiAJCQlyYyA9IDA7CiAJfQogCi0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCiAJLyoKIAkgKiBVc2UgY2FjaGVkIElSUSBudW1iZXIuIEl0IG1pZ2h0IGJlIChhbmQgaXMuLi4pIGNoYW5nZWQgYnkgcHJvYmUKIAkgKiBjb2RlIGFib3ZlCkBAIC04MzEsMjkgKzczNiwxOCBAQAogCWlkZV9kcml2ZV90ICpkcml2ZTsKIAlpbnQgaTsKIAotCWlkZV9wb3J0X2Zvcl9lYWNoX2RldihpLCBkcml2ZSwgaHdpZikgewotCQlpZiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19QUkVTRU5UKSB7Ci0JCQlpZiAocG9ydF9vcHMgJiYgcG9ydF9vcHMtPnF1aXJrcHJvYykKLQkJCQlwb3J0X29wcy0+cXVpcmtwcm9jKGRyaXZlKTsKLQkJfQorCWlkZV9wb3J0X2Zvcl9lYWNoX3ByZXNlbnRfZGV2KGksIGRyaXZlLCBod2lmKSB7CisJCWlmIChwb3J0X29wcyAmJiBwb3J0X29wcy0+cXVpcmtwcm9jKQorCQkJcG9ydF9vcHMtPnF1aXJrcHJvYyhkcml2ZSk7CiAJfQogCi0JaWRlX3BvcnRfZm9yX2VhY2hfZGV2KGksIGRyaXZlLCBod2lmKSB7Ci0JCWlmIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1BSRVNFTlQpIHsKLQkJCWlkZV9zZXRfbWF4X3Bpbyhkcml2ZSk7CisJaWRlX3BvcnRfZm9yX2VhY2hfcHJlc2VudF9kZXYoaSwgZHJpdmUsIGh3aWYpIHsKKwkJaWRlX3NldF9tYXhfcGlvKGRyaXZlKTsKIAotCQkJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfTklDRTE7CisJCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX05JQ0UxOwogCi0JCQlpZiAoaHdpZi0+ZG1hX29wcykKLQkJCQlpZGVfc2V0X2RtYShkcml2ZSk7Ci0JCX0KLQl9Ci0KLQlpZGVfcG9ydF9mb3JfZWFjaF9kZXYoaSwgZHJpdmUsIGh3aWYpIHsKLQkJaWYgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTk9fSU9fMzJCSVQpCi0JCQlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19OT19JT18zMkJJVDsKLQkJZWxzZQotCQkJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX05PX0lPXzMyQklUOworCQlpZiAoaHdpZi0+ZG1hX29wcykKKwkJCWlkZV9zZXRfZG1hKGRyaXZlKTsKIAl9CiB9CiAKQEAgLTkyNCwxMCArODE4LDcgQEAKIAlpbnQgaSwgaiA9IDA7CiAKIAltdXRleF9sb2NrKCZpZGVfY2ZnX210eCk7Ci0JaWRlX3BvcnRfZm9yX2VhY2hfZGV2KGksIGRyaXZlLCBod2lmKSB7Ci0JCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19QUkVTRU5UKSA9PSAwKQotCQkJY29udGludWU7Ci0KKwlpZGVfcG9ydF9mb3JfZWFjaF9wcmVzZW50X2RldihpLCBkcml2ZSwgaHdpZikgewogCQlpZiAoaWRlX2luaXRfcXVldWUoZHJpdmUpKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgImlkZTogZmFpbGVkIHRvIGluaXQgJXNcbiIsCiAJCQkJCWRyaXZlLT5uYW1lKTsKQEAgLTk1MywxMyArODQ0LDYgQEAKIAlpcnFfaGFuZGxlcl90IGlycV9oYW5kbGVyOwogCWludCBzYSA9IDA7CiAKLQltdXRleF9sb2NrKCZpZGVfY2ZnX210eCk7Ci0Jc3Bpbl9sb2NrX2luaXQoJmh3aWYtPmxvY2spOwotCi0JaW5pdF90aW1lcigmaHdpZi0+dGltZXIpOwotCWh3aWYtPnRpbWVyLmZ1bmN0aW9uID0gJmlkZV90aW1lcl9leHBpcnk7Ci0JaHdpZi0+dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWh3aWY7Ci0KIAlpcnFfaGFuZGxlciA9IGh3aWYtPmhvc3QtPmlycV9oYW5kbGVyOwogCWlmIChpcnFfaGFuZGxlciA9PSBOVUxMKQogCQlpcnFfaGFuZGxlciA9IGlkZV9pbnRyOwpAQCAtOTk3LDEwICs4ODEsOCBAQAogCQlwcmludGsoS0VSTl9DT05UICIgKHNlcmlhbGl6ZWQpIik7CiAJcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKIAotCW11dGV4X3VubG9jaygmaWRlX2NmZ19tdHgpOwogCXJldHVybiAwOwogb3V0X3VwOgotCW11dGV4X3VubG9jaygmaWRlX2NmZ19tdHgpOwogCXJldHVybiAxOwogfQogCkBAIC0xMDk5LDE0ICs5ODEsOSBAQAogCiBzdGF0aWMgaW50IGh3aWZfaW5pdChpZGVfaHdpZl90ICpod2lmKQogewotCWludCBvbGRfaXJxOwotCiAJaWYgKCFod2lmLT5pcnEpIHsKLQkJaHdpZi0+aXJxID0gX19pZGVfZGVmYXVsdF9pcnEoaHdpZi0+aW9fcG9ydHMuZGF0YV9hZGRyKTsKLQkJaWYgKCFod2lmLT5pcnEpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGRpc2FibGVkLCBubyBJUlFcbiIsIGh3aWYtPm5hbWUpOwotCQkJcmV0dXJuIDA7Ci0JCX0KKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZGlzYWJsZWQsIG5vIElSUVxuIiwgaHdpZi0+bmFtZSk7CisJCXJldHVybiAwOwogCX0KIAogCWlmIChyZWdpc3Rlcl9ibGtkZXYoaHdpZi0+bWFqb3IsIGh3aWYtPm5hbWUpKQpAQCAtMTEyNCwyOSArMTAwMSwxMiBAQAogCiAJc2dfaW5pdF90YWJsZShod2lmLT5zZ190YWJsZSwgaHdpZi0+c2dfbWF4X25lbnRzKTsKIAkKLQlpZiAoaW5pdF9pcnEoaHdpZikgPT0gMCkKLQkJZ290byBkb25lOwotCi0Jb2xkX2lycSA9IGh3aWYtPmlycTsKLQkvKgotCSAqCUl0IGZhaWxlZCB0byBpbml0aWFsaXNlLiBGaW5kIHRoZSBkZWZhdWx0IElSUSBmb3IgCi0JICoJdGhpcyBwb3J0IGFuZCB0cnkgdGhhdC4KLQkgKi8KLQlod2lmLT5pcnEgPSBfX2lkZV9kZWZhdWx0X2lycShod2lmLT5pb19wb3J0cy5kYXRhX2FkZHIpOwotCWlmICghaHdpZi0+aXJxKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGRpc2FibGVkLCB1bmFibGUgdG8gZ2V0IElSUSAlZFxuIiwKLQkJCWh3aWYtPm5hbWUsIG9sZF9pcnEpOwotCQlnb3RvIG91dDsKLQl9CiAJaWYgKGluaXRfaXJxKGh3aWYpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IHByb2JlZCBJUlEgJWQgYW5kIGRlZmF1bHQgSVJRICVkIGZhaWxlZFxuIiwKLQkJCWh3aWYtPm5hbWUsIG9sZF9pcnEsIGh3aWYtPmlycSk7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGRpc2FibGVkLCB1bmFibGUgdG8gZ2V0IElSUSAlZFxuIiwKKwkJCWh3aWYtPm5hbWUsIGh3aWYtPmlycSk7CiAJCWdvdG8gb3V0OwogCX0KLQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogcHJvYmVkIElSUSAlZCBmYWlsZWQsIHVzaW5nIGRlZmF1bHRcbiIsCi0JCWh3aWYtPm5hbWUsIGh3aWYtPmlycSk7CiAKLWRvbmU6CiAJYmxrX3JlZ2lzdGVyX3JlZ2lvbihNS0RFVihod2lmLT5tYWpvciwgMCksIE1BWF9EUklWRVMgPDwgUEFSVE5fQklUUywKIAkJCSAgICBUSElTX01PRFVMRSwgYXRhX3Byb2JlLCBhdGFfbG9jaywgaHdpZik7CiAJcmV0dXJuIDE7CkBAIC0xMTYxLDEzICsxMDIxLDEwIEBACiAJaWRlX2RyaXZlX3QgKmRyaXZlOwogCXVuc2lnbmVkIGludCBpOwogCi0JaWRlX3BvcnRfZm9yX2VhY2hfZGV2KGksIGRyaXZlLCBod2lmKSB7CisJaWRlX3BvcnRfZm9yX2VhY2hfcHJlc2VudF9kZXYoaSwgZHJpdmUsIGh3aWYpIHsKIAkJc3RydWN0IGRldmljZSAqZGV2ID0gJmRyaXZlLT5nZW5kZXY7CiAJCWludCByZXQ7CiAKLQkJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1BSRVNFTlQpID09IDApCi0JCQljb250aW51ZTsKLQogCQlkZXZfc2V0X25hbWUoZGV2LCAiJXUuJXUiLCBod2lmLT5pbmRleCwgaSk7CiAJCWRldi0+cGFyZW50ID0gJmh3aWYtPmdlbmRldjsKIAkJZGV2LT5idXMgPSAmaWRlX2J1c190eXBlOwpAQCAtMTE5Miw2ICsxMDQ5LDggQEAKIAogCQlpZiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19JT18zMkJJVCkKIAkJCWRyaXZlLT5pb18zMmJpdCA9IDE7CisJCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX05PX0lPXzMyQklUKQorCQkJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfTk9fSU9fMzJCSVQ7CiAJCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX1VOTUFTS19JUlFTKQogCQkJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfVU5NQVNLOwogCQlpZiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19OT19VTk1BU0tfSVJRUykKQEAgLTEyMTMsMTAgKzEwNzIsNiBAQAogCWlmIChkLT5pbml0X2lvcHMpCiAJCWQtPmluaXRfaW9wcyhod2lmKTsKIAotCWlmICgoIWh3aWYtPmlycSAmJiAoZC0+aG9zdF9mbGFncyAmIElERV9IRkxBR19MRUdBQ1lfSVJRUykpIHx8Ci0JICAgIChkLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX0ZPUkNFX0xFR0FDWV9JUlFTKSkKLQkJaHdpZi0+aXJxID0gcG9ydCA/IDE1IDogMTQ7Ci0KIAkvKiAtPmhvc3RfZmxhZ3MgbWF5IGJlIHNldCBieSAtPmluaXRfaW9wcyAob3IgZXZlbiBlYXJsaWVyLi4uKSAqLwogCWh3aWYtPmhvc3RfZmxhZ3MgfD0gZC0+aG9zdF9mbGFnczsKIAlod2lmLT5waW9fbWFzayA9IGQtPnBpb19tYXNrOwpAQCAtMTMxNyw2ICsxMTcyLDEyIEBACiAJaHdpZi0+bmFtZVsyXQk9ICdlJzsKIAlod2lmLT5uYW1lWzNdCT0gJzAnICsgaW5kZXg7CiAKKwlzcGluX2xvY2tfaW5pdCgmaHdpZi0+bG9jayk7CisKKwlpbml0X3RpbWVyKCZod2lmLT50aW1lcik7CisJaHdpZi0+dGltZXIuZnVuY3Rpb24gPSAmaWRlX3RpbWVyX2V4cGlyeTsKKwlod2lmLT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpaHdpZjsKKwogCWluaXRfY29tcGxldGlvbigmaHdpZi0+Z2VuZGV2X3JlbF9jb21wKTsKIAogCWh3aWYtPnRwX29wcyA9ICZkZWZhdWx0X3RwX29wczsKQEAgLTE1NjcsNyArMTQyOCw3IEBACiAKIAkJaisrOwogCi0JCWlkZV9hY3BpX2luaXQoaHdpZik7CisJCWlkZV9hY3BpX2luaXRfcG9ydChod2lmKTsKIAogCQlpZiAoaHdpZi0+cHJlc2VudCkKIAkJCWlkZV9hY3BpX3BvcnRfaW5pdF9kZXZpY2VzKGh3aWYpOwpAQCAtMTYyNCwxMSArMTQ4NSw5IEBACiAJaWRlX2RyaXZlX3QgKmRyaXZlOwogCWludCBpOwogCi0JaWRlX3BvcnRfZm9yX2VhY2hfZGV2KGksIGRyaXZlLCBod2lmKSB7Ci0JCWlmIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1BSRVNFTlQpIHsKLQkJCWRldmljZV91bnJlZ2lzdGVyKCZkcml2ZS0+Z2VuZGV2KTsKLQkJCXdhaXRfZm9yX2NvbXBsZXRpb24oJmRyaXZlLT5nZW5kZXZfcmVsX2NvbXApOwotCQl9CisJaWRlX3BvcnRfZm9yX2VhY2hfcHJlc2VudF9kZXYoaSwgZHJpdmUsIGh3aWYpIHsKKwkJZGV2aWNlX3VucmVnaXN0ZXIoJmRyaXZlLT5nZW5kZXYpOworCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZkcml2ZS0+Z2VuZGV2X3JlbF9jb21wKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1wcm9jLmMgYi9kcml2ZXJzL2lkZS9pZGUtcHJvYy5jCmluZGV4IGE3YjkyODcuLjQxN2NkZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1wcm9jLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLXByb2MuYwpAQCAtNjAwLDcgKzYwMCw3IEBACiAJaW50IGk7CiAKIAlpZGVfcG9ydF9mb3JfZWFjaF9kZXYoaSwgZHJpdmUsIGh3aWYpIHsKLQkJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1BSRVNFTlQpID09IDAgfHwgZHJpdmUtPnByb2MpCisJCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19QUkVTRU5UKSA9PSAwKQogCQkJY29udGludWU7CiAKIAkJZHJpdmUtPnByb2MgPSBwcm9jX21rZGlyKGRyaXZlLT5uYW1lLCBwYXJlbnQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLXhmZXItbW9kZS5jIGIvZHJpdmVycy9pZGUvaWRlLXhmZXItbW9kZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5MTBmNmEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2lkZS9pZGUteGZlci1tb2RlLmMKQEAgLTAsMCArMSwyNDYgQEAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lkZS5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorCitzdGF0aWMgY29uc3QgY2hhciAqdWRtYV9zdHJbXSA9CisJIHsgIlVETUEvMTYiLCAiVURNQS8yNSIsICAiVURNQS8zMyIsICAiVURNQS80NCIsCisJICAgIlVETUEvNjYiLCAiVURNQS8xMDAiLCAiVURNQS8xMzMiLCAiVURNQTciIH07CitzdGF0aWMgY29uc3QgY2hhciAqbXdkbWFfc3RyW10gPQorCXsgIk1XRE1BMCIsICJNV0RNQTEiLCAiTVdETUEyIiB9Oworc3RhdGljIGNvbnN0IGNoYXIgKnN3ZG1hX3N0cltdID0KKwl7ICJTV0RNQTAiLCAiU1dETUExIiwgIlNXRE1BMiIgfTsKK3N0YXRpYyBjb25zdCBjaGFyICpwaW9fc3RyW10gPQorCXsgIlBJTzAiLCAiUElPMSIsICJQSU8yIiwgIlBJTzMiLCAiUElPNCIsICJQSU81IiB9OworCisvKioKKyAqCWlkZV94ZmVyX3ZlcmJvc2UJLQlyZXR1cm4gSURFIG1vZGUgbmFtZXMKKyAqCUBtb2RlOiB0cmFuc2ZlciBtb2RlCisgKgorICoJUmV0dXJucyBhIGNvbnN0YW50IHN0cmluZyBnaXZpbmcgdGhlIG5hbWUgb2YgdGhlIG1vZGUKKyAqCXJlcXVlc3RlZC4KKyAqLworCitjb25zdCBjaGFyICppZGVfeGZlcl92ZXJib3NlKHU4IG1vZGUpCit7CisJY29uc3QgY2hhciAqczsKKwl1OCBpID0gbW9kZSAmIDB4ZjsKKworCWlmIChtb2RlID49IFhGRVJfVURNQV8wICYmIG1vZGUgPD0gWEZFUl9VRE1BXzcpCisJCXMgPSB1ZG1hX3N0cltpXTsKKwllbHNlIGlmIChtb2RlID49IFhGRVJfTVdfRE1BXzAgJiYgbW9kZSA8PSBYRkVSX01XX0RNQV8yKQorCQlzID0gbXdkbWFfc3RyW2ldOworCWVsc2UgaWYgKG1vZGUgPj0gWEZFUl9TV19ETUFfMCAmJiBtb2RlIDw9IFhGRVJfU1dfRE1BXzIpCisJCXMgPSBzd2RtYV9zdHJbaV07CisJZWxzZSBpZiAobW9kZSA+PSBYRkVSX1BJT18wICYmIG1vZGUgPD0gWEZFUl9QSU9fNSkKKwkJcyA9IHBpb19zdHJbaSAmIDB4N107CisJZWxzZSBpZiAobW9kZSA9PSBYRkVSX1BJT19TTE9XKQorCQlzID0gIlBJTyBTTE9XIjsKKwllbHNlCisJCXMgPSAiWEZFUiBFUlJPUiI7CisKKwlyZXR1cm4gczsKK30KK0VYUE9SVF9TWU1CT0woaWRlX3hmZXJfdmVyYm9zZSk7CisKKy8qKgorICoJaWRlX2dldF9iZXN0X3Bpb19tb2RlCS0JZ2V0IFBJTyBtb2RlIGZyb20gZHJpdmUKKyAqCUBkcml2ZTogZHJpdmUgdG8gY29uc2lkZXIKKyAqCUBtb2RlX3dhbnRlZDogcHJlZmVycmVkIG1vZGUKKyAqCUBtYXhfbW9kZTogaGlnaGVzdCBhbGxvd2VkIG1vZGUKKyAqCisgKglUaGlzIHJvdXRpbmUgcmV0dXJucyB0aGUgcmVjb21tZW5kZWQgUElPIHNldHRpbmdzIGZvciBhIGdpdmVuIGRyaXZlLAorICoJYmFzZWQgb24gdGhlIGRyaXZlLT5pZCBpbmZvcm1hdGlvbiBhbmQgdGhlIGlkZV9waW9fYmxhY2tsaXN0W10uCisgKgorICoJRHJpdmUgUElPIG1vZGUgaXMgYXV0by1zZWxlY3RlZCBpZiAyNTUgaXMgcGFzc2VkIGFzIG1vZGVfd2FudGVkLgorICoJVGhpcyBpcyB1c2VkIGJ5IG1vc3QgY2hpcHNldCBzdXBwb3J0IG1vZHVsZXMgd2hlbiAiYXV0by10dW5pbmciLgorICovCisKK3U4IGlkZV9nZXRfYmVzdF9waW9fbW9kZShpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IG1vZGVfd2FudGVkLCB1OCBtYXhfbW9kZSkKK3sKKwl1MTYgKmlkID0gZHJpdmUtPmlkOworCWludCBwaW9fbW9kZSA9IC0xLCBvdmVycmlkZGVuID0gMDsKKworCWlmIChtb2RlX3dhbnRlZCAhPSAyNTUpCisJCXJldHVybiBtaW5fdCh1OCwgbW9kZV93YW50ZWQsIG1heF9tb2RlKTsKKworCWlmICgoZHJpdmUtPmh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfUElPX05PX0JMQUNLTElTVCkgPT0gMCkKKwkJcGlvX21vZGUgPSBpZGVfc2Nhbl9waW9fYmxhY2tsaXN0KChjaGFyICopJmlkW0FUQV9JRF9QUk9EXSk7CisKKwlpZiAocGlvX21vZGUgIT0gLTEpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGlzIG9uIFBJTyBibGFja2xpc3RcbiIsIGRyaXZlLT5uYW1lKTsKKwl9IGVsc2UgeworCQlwaW9fbW9kZSA9IGlkW0FUQV9JRF9PTERfUElPX01PREVTXSA+PiA4OworCQlpZiAocGlvX21vZGUgPiAyKSB7CS8qIDIgaXMgbWF4aW11bSBhbGxvd2VkIHRQSU8gdmFsdWUgKi8KKwkJCXBpb19tb2RlID0gMjsKKwkJCW92ZXJyaWRkZW4gPSAxOworCQl9CisKKwkJaWYgKGlkW0FUQV9JRF9GSUVMRF9WQUxJRF0gJiAyKSB7CSAgICAgIC8qIEFUQTI/ICovCisJCQlpZiAoYXRhX2lkX2hhc19pb3JkeShpZCkpIHsKKwkJCQlpZiAoaWRbQVRBX0lEX1BJT19NT0RFU10gJiA3KSB7CisJCQkJCW92ZXJyaWRkZW4gPSAwOworCQkJCQlpZiAoaWRbQVRBX0lEX1BJT19NT0RFU10gJiA0KQorCQkJCQkJcGlvX21vZGUgPSA1OworCQkJCQllbHNlIGlmIChpZFtBVEFfSURfUElPX01PREVTXSAmIDIpCisJCQkJCQlwaW9fbW9kZSA9IDQ7CisJCQkJCWVsc2UKKwkJCQkJCXBpb19tb2RlID0gMzsKKwkJCQl9CisJCQl9CisJCX0KKworCQlpZiAob3ZlcnJpZGRlbikKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiB0UElPID4gMiwgYXNzdW1pbmcgdFBJTyA9IDJcbiIsCisJCQkJCSBkcml2ZS0+bmFtZSk7CisJfQorCisJaWYgKHBpb19tb2RlID4gbWF4X21vZGUpCisJCXBpb19tb2RlID0gbWF4X21vZGU7CisKKwlyZXR1cm4gcGlvX21vZGU7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpZGVfZ2V0X2Jlc3RfcGlvX21vZGUpOworCitpbnQgaWRlX3NldF9waW9fbW9kZShpZGVfZHJpdmVfdCAqZHJpdmUsIGNvbnN0IHU4IG1vZGUpCit7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCWNvbnN0IHN0cnVjdCBpZGVfcG9ydF9vcHMgKnBvcnRfb3BzID0gaHdpZi0+cG9ydF9vcHM7CisKKwlpZiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19OT19TRVRfTU9ERSkKKwkJcmV0dXJuIDA7CisKKwlpZiAocG9ydF9vcHMgPT0gTlVMTCB8fCBwb3J0X29wcy0+c2V0X3Bpb19tb2RlID09IE5VTEwpCisJCXJldHVybiAtMTsKKworCS8qCisJICogVE9ETzogdGVtcG9yYXJ5IGhhY2sgZm9yIHNvbWUgbGVnYWN5IGhvc3QgZHJpdmVycyB0aGF0IGRpZG4ndAorCSAqIHNldCB0cmFuc2ZlciBtb2RlIG9uIHRoZSBkZXZpY2UgaW4gLT5zZXRfcGlvX21vZGUgbWV0aG9kLi4uCisJICovCisJaWYgKHBvcnRfb3BzLT5zZXRfZG1hX21vZGUgPT0gTlVMTCkgeworCQlwb3J0X29wcy0+c2V0X3Bpb19tb2RlKGRyaXZlLCBtb2RlIC0gWEZFUl9QSU9fMCk7CisJCXJldHVybiAwOworCX0KKworCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX1BPU1RfU0VUX01PREUpIHsKKwkJaWYgKGlkZV9jb25maWdfZHJpdmVfc3BlZWQoZHJpdmUsIG1vZGUpKQorCQkJcmV0dXJuIC0xOworCQlwb3J0X29wcy0+c2V0X3Bpb19tb2RlKGRyaXZlLCBtb2RlIC0gWEZFUl9QSU9fMCk7CisJCXJldHVybiAwOworCX0gZWxzZSB7CisJCXBvcnRfb3BzLT5zZXRfcGlvX21vZGUoZHJpdmUsIG1vZGUgLSBYRkVSX1BJT18wKTsKKwkJcmV0dXJuIGlkZV9jb25maWdfZHJpdmVfc3BlZWQoZHJpdmUsIG1vZGUpOworCX0KK30KKworaW50IGlkZV9zZXRfZG1hX21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCB1OCBtb2RlKQoreworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwljb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzICpwb3J0X29wcyA9IGh3aWYtPnBvcnRfb3BzOworCisJaWYgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTk9fU0VUX01PREUpCisJCXJldHVybiAwOworCisJaWYgKHBvcnRfb3BzID09IE5VTEwgfHwgcG9ydF9vcHMtPnNldF9kbWFfbW9kZSA9PSBOVUxMKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19QT1NUX1NFVF9NT0RFKSB7CisJCWlmIChpZGVfY29uZmlnX2RyaXZlX3NwZWVkKGRyaXZlLCBtb2RlKSkKKwkJCXJldHVybiAtMTsKKwkJcG9ydF9vcHMtPnNldF9kbWFfbW9kZShkcml2ZSwgbW9kZSk7CisJCXJldHVybiAwOworCX0gZWxzZSB7CisJCXBvcnRfb3BzLT5zZXRfZG1hX21vZGUoZHJpdmUsIG1vZGUpOworCQlyZXR1cm4gaWRlX2NvbmZpZ19kcml2ZV9zcGVlZChkcml2ZSwgbW9kZSk7CisJfQorfQorRVhQT1JUX1NZTUJPTF9HUEwoaWRlX3NldF9kbWFfbW9kZSk7CisKKy8qIHJlcV9waW8gPT0gIjI1NSIgZm9yIGF1dG8tdHVuZSAqLwordm9pZCBpZGVfc2V0X3BpbyhpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IHJlcV9waW8pCit7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCWNvbnN0IHN0cnVjdCBpZGVfcG9ydF9vcHMgKnBvcnRfb3BzID0gaHdpZi0+cG9ydF9vcHM7CisJdTggaG9zdF9waW8sIHBpbzsKKworCWlmIChwb3J0X29wcyA9PSBOVUxMIHx8IHBvcnRfb3BzLT5zZXRfcGlvX21vZGUgPT0gTlVMTCB8fAorCSAgICAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19OT19TRVRfTU9ERSkpCisJCXJldHVybjsKKworCUJVR19PTihod2lmLT5waW9fbWFzayA9PSAweDAwKTsKKworCWhvc3RfcGlvID0gZmxzKGh3aWYtPnBpb19tYXNrKSAtIDE7CisKKwlwaW8gPSBpZGVfZ2V0X2Jlc3RfcGlvX21vZGUoZHJpdmUsIHJlcV9waW8sIGhvc3RfcGlvKTsKKworCS8qCisJICogVE9ETzoKKwkgKiAtIHJlcG9ydCBkZXZpY2UgbWF4IFBJTyBtb2RlCisJICogLSBjaGVjayByZXFfcGlvICE9IDI1NSBhZ2FpbnN0IGRldmljZSBtYXggUElPIG1vZGUKKwkgKi8KKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGhvc3QgbWF4IFBJTyVkIHdhbnRlZCBQSU8lZCVzIHNlbGVjdGVkIFBJTyVkXG4iLAorCQkJICBkcml2ZS0+bmFtZSwgaG9zdF9waW8sIHJlcV9waW8sCisJCQkgIHJlcV9waW8gPT0gMjU1ID8gIihhdXRvLXR1bmUpIiA6ICIiLCBwaW8pOworCisJKHZvaWQpaWRlX3NldF9waW9fbW9kZShkcml2ZSwgWEZFUl9QSU9fMCArIHBpbyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpZGVfc2V0X3Bpbyk7CisKKy8qKgorICoJaWRlX3JhdGVfZmlsdGVyCQktCWZpbHRlciB0cmFuc2ZlciBtb2RlCisgKglAZHJpdmU6IElERSBkZXZpY2UKKyAqCUBzcGVlZDogZGVzaXJlZCBzcGVlZAorICoKKyAqCUdpdmVuIHRoZSBhdmFpbGFibGUgdHJhbnNmZXIgbW9kZXMgdGhpcyBmdW5jdGlvbiByZXR1cm5zCisgKgl0aGUgYmVzdCBhdmFpbGFibGUgc3BlZWQgYXQgb3IgYmVsb3cgdGhlIHNwZWVkIHJlcXVlc3RlZC4KKyAqCisgKglUT0RPOiBjaGVjayBkZXZpY2UgUElPIGNhcGFiaWxpdGllcworICovCisKK3N0YXRpYyB1OCBpZGVfcmF0ZV9maWx0ZXIoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCBzcGVlZCkKK3sKKwlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CisJdTggbW9kZSA9IGlkZV9maW5kX2RtYV9tb2RlKGRyaXZlLCBzcGVlZCk7CisKKwlpZiAobW9kZSA9PSAwKSB7CisJCWlmIChod2lmLT5waW9fbWFzaykKKwkJCW1vZGUgPSBmbHMoaHdpZi0+cGlvX21hc2spIC0gMSArIFhGRVJfUElPXzA7CisJCWVsc2UKKwkJCW1vZGUgPSBYRkVSX1BJT180OworCX0KKworLyoJcHJpbnRrKCIlczogbW9kZSAweCUwMngsIHNwZWVkIDB4JTAyeFxuIiwgX19mdW5jX18sIG1vZGUsIHNwZWVkKTsgKi8KKworCXJldHVybiBtaW4oc3BlZWQsIG1vZGUpOworfQorCisvKioKKyAqCWlkZV9zZXRfeGZlcl9yYXRlCS0Jc2V0IHRyYW5zZmVyIHJhdGUKKyAqCUBkcml2ZTogZHJpdmUgdG8gc2V0CisgKglAcmF0ZTogc3BlZWQgdG8gYXR0ZW1wdCB0byBzZXQKKyAqCisgKglHZW5lcmFsIGhlbHBlciBmb3Igc2V0dGluZyB0aGUgc3BlZWQgb2YgYW4gSURFIGRldmljZS4gVGhpcworICoJZnVuY3Rpb24ga25vd3MgYWJvdXQgdXNlciBlbmZvcmNlZCBsaW1pdHMgZnJvbSB0aGUgY29uZmlndXJhdGlvbgorICoJd2hpY2ggLT5zZXRfcGlvX21vZGUvLT5zZXRfZG1hX21vZGUgZG9lcyBub3QuCisgKi8KKworaW50IGlkZV9zZXRfeGZlcl9yYXRlKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggcmF0ZSkKK3sKKwlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CisJY29uc3Qgc3RydWN0IGlkZV9wb3J0X29wcyAqcG9ydF9vcHMgPSBod2lmLT5wb3J0X29wczsKKworCWlmIChwb3J0X29wcyA9PSBOVUxMIHx8IHBvcnRfb3BzLT5zZXRfZG1hX21vZGUgPT0gTlVMTCB8fAorCSAgICAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19OT19TRVRfTU9ERSkpCisJCXJldHVybiAtMTsKKworCXJhdGUgPSBpZGVfcmF0ZV9maWx0ZXIoZHJpdmUsIHJhdGUpOworCisJQlVHX09OKHJhdGUgPCBYRkVSX1BJT18wKTsKKworCWlmIChyYXRlID49IFhGRVJfUElPXzAgJiYgcmF0ZSA8PSBYRkVSX1BJT181KQorCQlyZXR1cm4gaWRlX3NldF9waW9fbW9kZShkcml2ZSwgcmF0ZSk7CisKKwlyZXR1cm4gaWRlX3NldF9kbWFfbW9kZShkcml2ZSwgcmF0ZSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUuYyBiL2RyaXZlcnMvaWRlL2lkZS5jCmluZGV4IDA5MjBlM2IuLjkyYzliOTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS5jCkBAIC02MiwxNjAgKzYyLDYgQEAKIAogc3RydWN0IGNsYXNzICppZGVfcG9ydF9jbGFzczsKIAotLyoKLSAqCUxvY2tzIGZvciBJREUgc2V0dGluZyBmdW5jdGlvbmFsaXR5Ci0gKi8KLQotREVGSU5FX01VVEVYKGlkZV9zZXR0aW5nX210eCk7Ci0KLWlkZV9kZXZzZXRfZ2V0KGlvXzMyYml0LCBpb18zMmJpdCk7Ci0KLXN0YXRpYyBpbnQgc2V0X2lvXzMyYml0KGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGFyZykKLXsKLQlpZiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19OT19JT18zMkJJVCkKLQkJcmV0dXJuIC1FUEVSTTsKLQotCWlmIChhcmcgPCAwIHx8IGFyZyA+IDEgKyAoU1VQUE9SVF9WTEJfU1lOQyA8PCAxKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlkcml2ZS0+aW9fMzJiaXQgPSBhcmc7Ci0KLQlyZXR1cm4gMDsKLX0KLQotaWRlX2RldnNldF9nZXRfZmxhZyhrc2V0dGluZ3MsIElERV9ERkxBR19LRUVQX1NFVFRJTkdTKTsKLQotc3RhdGljIGludCBzZXRfa3NldHRpbmdzKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGFyZykKLXsKLQlpZiAoYXJnIDwgMCB8fCBhcmcgPiAxKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChhcmcpCi0JCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX0tFRVBfU0VUVElOR1M7Ci0JZWxzZQotCQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfS0VFUF9TRVRUSU5HUzsKLQotCXJldHVybiAwOwotfQotCi1pZGVfZGV2c2V0X2dldF9mbGFnKHVzaW5nX2RtYSwgSURFX0RGTEFHX1VTSU5HX0RNQSk7Ci0KLXN0YXRpYyBpbnQgc2V0X3VzaW5nX2RtYShpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBhcmcpCi17Ci0jaWZkZWYgQ09ORklHX0JMS19ERVZfSURFRE1BCi0JaW50IGVyciA9IC1FUEVSTTsKLQotCWlmIChhcmcgPCAwIHx8IGFyZyA+IDEpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKGF0YV9pZF9oYXNfZG1hKGRyaXZlLT5pZCkgPT0gMCkKLQkJZ290byBvdXQ7Ci0KLQlpZiAoZHJpdmUtPmh3aWYtPmRtYV9vcHMgPT0gTlVMTCkKLQkJZ290byBvdXQ7Ci0KLQllcnIgPSAwOwotCi0JaWYgKGFyZykgewotCQlpZiAoaWRlX3NldF9kbWEoZHJpdmUpKQotCQkJZXJyID0gLUVJTzsKLQl9IGVsc2UKLQkJaWRlX2RtYV9vZmYoZHJpdmUpOwotCi1vdXQ6Ci0JcmV0dXJuIGVycjsKLSNlbHNlCi0JaWYgKGFyZyA8IDAgfHwgYXJnID4gMSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXR1cm4gLUVQRVJNOwotI2VuZGlmCi19Ci0KLS8qCi0gKiBoYW5kbGUgSERJT19TRVRfUElPX01PREUgaW9jdGwgYWJ1c2VycyBoZXJlLCBldmVudHVhbGx5IGl0IHdpbGwgZ28gYXdheQotICovCi1zdGF0aWMgaW50IHNldF9waW9fbW9kZV9hYnVzZShpZGVfaHdpZl90ICpod2lmLCB1OCByZXFfcGlvKQotewotCXN3aXRjaCAocmVxX3BpbykgewotCWNhc2UgMjAyOgotCWNhc2UgMjAxOgotCWNhc2UgMjAwOgotCWNhc2UgMTAyOgotCWNhc2UgMTAxOgotCWNhc2UgMTAwOgotCQlyZXR1cm4gKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfQUJVU0VfRE1BX01PREVTKSA/IDEgOiAwOwotCWNhc2UgOToKLQljYXNlIDg6Ci0JCXJldHVybiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19BQlVTRV9QUkVGRVRDSCkgPyAxIDogMDsKLQljYXNlIDc6Ci0JY2FzZSA2OgotCQlyZXR1cm4gKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfQUJVU0VfRkFTVF9ERVZTRUwpID8gMSA6IDA7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIDA7Ci0JfQotfQotCi1zdGF0aWMgaW50IHNldF9waW9fbW9kZShpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBhcmcpCi17Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCWNvbnN0IHN0cnVjdCBpZGVfcG9ydF9vcHMgKnBvcnRfb3BzID0gaHdpZi0+cG9ydF9vcHM7Ci0KLQlpZiAoYXJnIDwgMCB8fCBhcmcgPiAyNTUpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKHBvcnRfb3BzID09IE5VTEwgfHwgcG9ydF9vcHMtPnNldF9waW9fbW9kZSA9PSBOVUxMIHx8Ci0JICAgIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX05PX1NFVF9NT0RFKSkKLQkJcmV0dXJuIC1FTk9TWVM7Ci0KLQlpZiAoc2V0X3Bpb19tb2RlX2FidXNlKGRyaXZlLT5od2lmLCBhcmcpKSB7Ci0JCWlmIChhcmcgPT0gOCB8fCBhcmcgPT0gOSkgewotCQkJdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCQkJLyogdGFrZSBsb2NrIGZvciBJREVfREZMQUdfW05PX11VTk1BU0svW05PX11JT18zMkJJVCAqLwotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmh3aWYtPmxvY2ssIGZsYWdzKTsKLQkJCXBvcnRfb3BzLT5zZXRfcGlvX21vZGUoZHJpdmUsIGFyZyk7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZod2lmLT5sb2NrLCBmbGFncyk7Ci0JCX0gZWxzZQotCQkJcG9ydF9vcHMtPnNldF9waW9fbW9kZShkcml2ZSwgYXJnKTsKLQl9IGVsc2UgewotCQlpbnQga2VlcF9kbWEgPSAhIShkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1VTSU5HX0RNQSk7Ci0KLQkJaWRlX3NldF9waW8oZHJpdmUsIGFyZyk7Ci0KLQkJaWYgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfU0VUX1BJT19NT0RFX0tFRVBfRE1BKSB7Ci0JCQlpZiAoa2VlcF9kbWEpCi0JCQkJaWRlX2RtYV9vbihkcml2ZSk7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotaWRlX2RldnNldF9nZXRfZmxhZyh1bm1hc2tpcnEsIElERV9ERkxBR19VTk1BU0spOwotCi1zdGF0aWMgaW50IHNldF91bm1hc2tpcnEoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgYXJnKQotewotCWlmIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX05PX1VOTUFTSykKLQkJcmV0dXJuIC1FUEVSTTsKLQotCWlmIChhcmcgPCAwIHx8IGFyZyA+IDEpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKGFyZykKLQkJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfVU5NQVNLOwotCWVsc2UKLQkJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX1VOTUFTSzsKLQotCXJldHVybiAwOwotfQotCi1pZGVfZXh0X2RldnNldF9yd19zeW5jKGlvXzMyYml0LCBpb18zMmJpdCk7Ci1pZGVfZXh0X2RldnNldF9yd19zeW5jKGtlZXBzZXR0aW5ncywga3NldHRpbmdzKTsKLWlkZV9leHRfZGV2c2V0X3J3X3N5bmModW5tYXNraXJxLCB1bm1hc2tpcnEpOwotaWRlX2V4dF9kZXZzZXRfcndfc3luYyh1c2luZ19kbWEsIHVzaW5nX2RtYSk7Ci1fX0lERV9ERVZTRVQocGlvX21vZGUsIERTX1NZTkMsIE5VTEwsIHNldF9waW9fbW9kZSk7Ci0KIC8qKgogICogaWRlX2RldmljZV9nZXQJLQlnZXQgYW4gYWRkaXRpb25hbCByZWZlcmVuY2UgdG8gYSBpZGVfZHJpdmVfdAogICogQGRyaXZlOglkZXZpY2UgdG8gZ2V0IGEgcmVmZXJlbmNlIHRvCkBAIC01MjcsNiArMzczLDggQEAKIAkJZ290byBvdXRfcG9ydF9jbGFzczsKIAl9CiAKKwlpZGVfYWNwaV9pbml0KCk7CisKIAlwcm9jX2lkZV9jcmVhdGUoKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaXQ4MjF4LmMgYi9kcml2ZXJzL2lkZS9pdDgyMXguYwppbmRleCAxM2I4MTUzLi42YjlmYzk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pdDgyMXguYworKysgYi9kcml2ZXJzL2lkZS9pdDgyMXguYwpAQCAtNjAzLDcgKzYwMyw3IEBACiAJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgUENJX0xBVEVOQ1lfVElNRVIsIDB4MjApOwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IGluaXRfY2hpcHNldF9pdDgyMXgoc3RydWN0IHBjaV9kZXYgKmRldikKK3N0YXRpYyBpbnQgaW5pdF9jaGlwc2V0X2l0ODIxeChzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCXU4IGNvbmY7CiAJc3RhdGljIGNoYXIgKm1vZGVbMl0gPSB7ICJwYXNzIHRocm91Z2giLCAic21hcnQiIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9uczg3NDE1LmMgYi9kcml2ZXJzL2lkZS9uczg3NDE1LmMKaW5kZXggODM2NDNlZC4uZWE0OGEzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvbnM4NzQxNS5jCisrKyBiL2RyaXZlcnMvaWRlL25zODc0MTUuYwpAQCAtMjg2LDkgKzI4Niw3IEBACiAJfQogCiAJaWYgKCF1c2luZ19pbnRhKQotCQlod2lmLT5pcnEgPSBfX2lkZV9kZWZhdWx0X2lycShod2lmLT5pb19wb3J0cy5kYXRhX2FkZHIpOwotCWVsc2UgaWYgKCFod2lmLT5pcnEgJiYgaHdpZi0+bWF0ZSAmJiBod2lmLT5tYXRlLT5pcnEpCi0JCWh3aWYtPmlycSA9IGh3aWYtPm1hdGUtPmlycTsJLyogc2hhcmUgSVJRIHdpdGggbWF0ZSAqLworCQlod2lmLT5pcnEgPSBwY2lfZ2V0X2xlZ2FjeV9pZGVfaXJxKGRldiwgaHdpZi0+Y2hhbm5lbCk7CiAKIAlpZiAoIWh3aWYtPmRtYV9iYXNlKQogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wZGMyMDJ4eF9uZXcuYyBiL2RyaXZlcnMvaWRlL3BkYzIwMnh4X25ldy5jCmluZGV4IGYyMTI5MGMuLmI2ODkwNmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BkYzIwMnh4X25ldy5jCisrKyBiL2RyaXZlcnMvaWRlL3BkYzIwMnh4X25ldy5jCkBAIC0zMjUsNyArMzI1LDcgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfUFBDX1BNQUMgKi8KIAotc3RhdGljIHVuc2lnbmVkIGludCBpbml0X2NoaXBzZXRfcGRjbmV3KHN0cnVjdCBwY2lfZGV2ICpkZXYpCitzdGF0aWMgaW50IGluaXRfY2hpcHNldF9wZGNuZXcoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAljb25zdCBjaGFyICpuYW1lID0gRFJWX05BTUU7CiAJdW5zaWduZWQgbG9uZyBkbWFfYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIDQpOwpAQCAtNDQ0LDcgKzQ0NCw3IEBACiAjZW5kaWYKIAogIG91dDoKLQlyZXR1cm4gZGV2LT5pcnE7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldiAqIF9fZGV2aW5pdCBwZGMyMDI3MF9nZXRfZGV2MihzdHJ1Y3QgcGNpX2RldiAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGRjMjAyeHhfb2xkLmMgYi9kcml2ZXJzL2lkZS9wZGMyMDJ4eF9vbGQuYwppbmRleCA5NzE5MzMyLi5jYmE2NmViIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wZGMyMDJ4eF9vbGQuYworKysgYi9kcml2ZXJzL2lkZS9wZGMyMDJ4eF9vbGQuYwpAQCAtMjY0LDcgKzI2NCw3IEBACiAJaWRlX2RtYV90aW1lb3V0KGRyaXZlKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBpbml0X2NoaXBzZXRfcGRjMjAyeHgoc3RydWN0IHBjaV9kZXYgKmRldikKK3N0YXRpYyBpbnQgaW5pdF9jaGlwc2V0X3BkYzIwMnh4KHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJdW5zaWduZWQgbG9uZyBkbWFiYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgNCk7CiAJdTggdWRtYV9zcGVlZF9mbGFnID0gMCwgcHJpbWFyeV9tb2RlID0gMCwgc2Vjb25kYXJ5X21vZGUgPSAwOwpAQCAtMjkwLDcgKzI5MCw3IEBACiAJCXByaW50aygiJXNBQ1RJVkVcbiIsIChpbmIoZG1hYmFzZSB8IDB4MWYpICYgMSkgPyAiIiA6ICJJTiIpOwogCX0KIG91dDoKLQlyZXR1cm4gZGV2LT5pcnE7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBwZGMyMDJhdGE0X2ZpeHVwX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGlpeC5jIGIvZHJpdmVycy9pZGUvcGlpeC5jCmluZGV4IGYxZTJlNGUuLjJhYTY5OTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BpaXguYworKysgYi9kcml2ZXJzL2lkZS9waWl4LmMKQEAgLTIwNCw3ICsyMDQsNyBAQAogICoJb3V0IHRvIGJlIG5pY2UgYW5kIHNpbXBsZS4KICAqLwogCi1zdGF0aWMgdW5zaWduZWQgaW50IGluaXRfY2hpcHNldF9pY2goc3RydWN0IHBjaV9kZXYgKmRldikKK3N0YXRpYyBpbnQgaW5pdF9jaGlwc2V0X2ljaChzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCXUzMiBleHRyYSA9IDA7CiAKQEAgLTMxOCwxOSArMzE4LDEyIEBACiAJLmNhYmxlX2RldGVjdAkJPSBwaWl4X2NhYmxlX2RldGVjdCwKIH07CiAKLSNpZm5kZWYgQ09ORklHX0lBNjQKLSAjZGVmaW5lIElERV9IRkxBR1NfUElJWCBJREVfSEZMQUdfTEVHQUNZX0lSUVMKLSNlbHNlCi0gI2RlZmluZSBJREVfSEZMQUdTX1BJSVggMAotI2VuZGlmCi0KICNkZWZpbmUgREVDTEFSRV9QSUlYX0RFVih1ZG1hKSBcCiAJewkJCQkJCVwKIAkJLm5hbWUJCT0gRFJWX05BTUUsCQlcCiAJCS5pbml0X2h3aWYJPSBpbml0X2h3aWZfcGlpeCwJXAogCQkuZW5hYmxlYml0cwk9IHt7MHg0MSwweDgwLDB4ODB9LCB7MHg0MywweDgwLDB4ODB9fSwgXAogCQkucG9ydF9vcHMJPSAmcGlpeF9wb3J0X29wcywJXAotCQkuaG9zdF9mbGFncwk9IElERV9IRkxBR1NfUElJWCwJXAogCQkucGlvX21hc2sJPSBBVEFfUElPNCwJCVwKIAkJLnN3ZG1hX21hc2sJPSBBVEFfU1dETUEyX09OTFksCVwKIAkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUExMl9PTkxZLAlcCkBAIC0zNDQsNyArMzM3LDYgQEAKIAkJLmluaXRfaHdpZgk9IGluaXRfaHdpZl9waWl4LCBcCiAJCS5lbmFibGViaXRzCT0ge3sweDQxLDB4ODAsMHg4MH0sIHsweDQzLDB4ODAsMHg4MH19LCBcCiAJCS5wb3J0X29wcwk9ICZpY2hfcG9ydF9vcHMsIFwKLQkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdTX1BJSVgsIFwKIAkJLnBpb19tYXNrCT0gQVRBX1BJTzQsIFwKIAkJLnN3ZG1hX21hc2sJPSBBVEFfU1dETUEyX09OTFksIFwKIAkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUExMl9PTkxZLCBcCkBAIC0zNjAsOCArMzUyLDcgQEAKIAkJICovCiAJCS5uYW1lCQk9IERSVl9OQU1FLAogCQkuZW5hYmxlYml0cwk9IHt7MHg2ZCwweGMwLDB4ODB9LCB7MHg2ZCwweGMwLDB4YzB9fSwKLQkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfSVNBX1BPUlRTIHwgSURFX0hGTEFHX05PX0RNQSB8Ci0JCQkJICBJREVfSEZMQUdTX1BJSVgsCisJCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX0lTQV9QT1JUUyB8IElERV9IRkxBR19OT19ETUEsCiAJCS5waW9fbWFzawk9IEFUQV9QSU80LAogCQkvKiBUaGlzIGlzIGEgcGFpbmZ1bCBzeXN0ZW0gYmVzdCB0byBsZXQgaXQgc2VsZiB0dW5lIGZvciBub3cgKi8KIAl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvc2VydmVyd29ya3MuYyBiL2RyaXZlcnMvaWRlL3NlcnZlcndvcmtzLmMKaW5kZXggMzgyMTAyYi4uYjY1NTRlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvc2VydmVyd29ya3MuYworKysgYi9kcml2ZXJzL2lkZS9zZXJ2ZXJ3b3Jrcy5jCkBAIC0xNzUsNyArMTc1LDcgQEAKIAlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDU0LCB1bHRyYV9lbmFibGUpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IGluaXRfY2hpcHNldF9zdndrcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQorc3RhdGljIGludCBpbml0X2NoaXBzZXRfc3Z3a3Moc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAl1bnNpZ25lZCBpbnQgcmVnOwogCXU4IGJ0cjsKQEAgLTI3MCw3ICsyNzAsNyBAQAogCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDVBLCBidHIpOwogCX0KIAotCXJldHVybiBkZXYtPmlycTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHU4IGF0YTY2X3N2d2tzX3N2d2tzKGlkZV9od2lmX3QgKmh3aWYpCkBAIC0zNTMsMTQgKzM1MywxMSBAQAogCS5jYWJsZV9kZXRlY3QJCT0gc3Z3a3NfY2FibGVfZGV0ZWN0LAogfTsKIAotI2RlZmluZSBJREVfSEZMQUdTX1NWV0tTIElERV9IRkxBR19MRUdBQ1lfSVJRUwotCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gc2VydmVyd29ya3NfY2hpcHNldHNbXSBfX2RldmluaXRkYXRhID0gewogCXsJLyogMDogT1NCNCAqLwogCQkubmFtZQkJPSBEUlZfTkFNRSwKIAkJLmluaXRfY2hpcHNldAk9IGluaXRfY2hpcHNldF9zdndrcywKIAkJLnBvcnRfb3BzCT0gJm9zYjRfcG9ydF9vcHMsCi0JCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHU19TVldLUywKIAkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCiAJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IDB4MDAsIC8qIFVETUEgaXMgcHJvYmxlbWF0aWMgb24gT1NCNCAqLwpAQCAtMzY5LDcgKzM2Niw2IEBACiAJCS5uYW1lCQk9IERSVl9OQU1FLAogCQkuaW5pdF9jaGlwc2V0CT0gaW5pdF9jaGlwc2V0X3N2d2tzLAogCQkucG9ydF9vcHMJPSAmc3Z3a3NfcG9ydF9vcHMsCi0JCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHU19TVldLUywKIAkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCiAJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwKQEAgLTM3OCw3ICszNzQsNiBAQAogCQkubmFtZQkJPSBEUlZfTkFNRSwKIAkJLmluaXRfY2hpcHNldAk9IGluaXRfY2hpcHNldF9zdndrcywKIAkJLnBvcnRfb3BzCT0gJnN2d2tzX3BvcnRfb3BzLAotCQkuaG9zdF9mbGFncwk9IElERV9IRkxBR1NfU1ZXS1MsCiAJCS5waW9fbWFzawk9IEFUQV9QSU80LAogCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTUsCkBAIC0zODcsNyArMzgyLDcgQEAKIAkJLm5hbWUJCT0gRFJWX05BTUUsCiAJCS5pbml0X2NoaXBzZXQJPSBpbml0X2NoaXBzZXRfc3Z3a3MsCiAJCS5wb3J0X29wcwk9ICZzdndrc19wb3J0X29wcywKLQkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdTX1NWV0tTIHwgSURFX0hGTEFHX1NJTkdMRSwKKwkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfU0lOR0xFLAogCQkucGlvX21hc2sJPSBBVEFfUElPNCwKIAkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE1LApAQCAtMzk2LDcgKzM5MSw3IEBACiAJCS5uYW1lCQk9IERSVl9OQU1FLAogCQkuaW5pdF9jaGlwc2V0CT0gaW5pdF9jaGlwc2V0X3N2d2tzLAogCQkucG9ydF9vcHMJPSAmc3Z3a3NfcG9ydF9vcHMsCi0JCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHU19TVldLUyB8IElERV9IRkxBR19TSU5HTEUsCisJCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX1NJTkdMRSwKIAkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCiAJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3NldHVwLXBjaS5jIGIvZHJpdmVycy9pZGUvc2V0dXAtcGNpLmMKaW5kZXggZTg1ZDFlZC4uMjRiYzg4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvc2V0dXAtcGNpLmMKKysrIGIvZHJpdmVycy9pZGUvc2V0dXAtcGNpLmMKQEAgLTMwNSw3ICszMDUsNiBAQAogICoJQGRldjogUENJIGRldmljZSBob2xkaW5nIGludGVyZmFjZQogICoJQGQ6IElERSBwb3J0IGluZm8KICAqCUBwb3J0OiBwb3J0IG51bWJlcgotICoJQGlycTogUENJIElSUQogICoJQGh3OiBod19yZWdzX3QgaW5zdGFuY2UgY29ycmVzcG9uZGluZyB0byB0aGlzIHBvcnQKICAqCiAgKglQZXJmb3JtIHRoZSBpbml0aWFsIHNldCB1cCBmb3IgdGhlIGhhcmR3YXJlIGludGVyZmFjZSBzdHJ1Y3R1cmUuIFRoaXMKQEAgLTMxNiw3ICszMTUsNyBAQAogICovCiAKIHN0YXRpYyBpbnQgaWRlX2h3X2NvbmZpZ3VyZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyAqZCwKLQkJCSAgICB1bnNpZ25lZCBpbnQgcG9ydCwgaW50IGlycSwgaHdfcmVnc190ICpodykKKwkJCSAgICB1bnNpZ25lZCBpbnQgcG9ydCwgaHdfcmVnc190ICpodykKIHsKIAl1bnNpZ25lZCBsb25nIGN0bCA9IDAsIGJhc2UgPSAwOwogCkBAIC0zNDQsNyArMzQzLDYgQEAKIAl9CiAKIAltZW1zZXQoaHcsIDAsIHNpemVvZigqaHcpKTsKLQlody0+aXJxID0gaXJxOwogCWh3LT5kZXYgPSAmZGV2LT5kZXY7CiAJaHctPmNoaXBzZXQgPSBkLT5jaGlwc2V0ID8gZC0+Y2hpcHNldCA6IGlkZV9wY2k7CiAJaWRlX3N0ZF9pbml0X3BvcnRzKGh3LCBiYXNlLCBjdGwgfCAyKTsKQEAgLTQ0OCw3ICs0NDYsNiBAQAogICoJaWRlX3BjaV9zZXR1cF9wb3J0cwktCWNvbmZpZ3VyZSBwb3J0cy9kZXZpY2VzIG9uIFBDSSBJREUKICAqCUBkZXY6IFBDSSBkZXZpY2UKICAqCUBkOiBJREUgcG9ydCBpbmZvCi0gKglAcGNpaXJxOiBJUlEgbGluZQogICoJQGh3OiBod19yZWdzX3QgaW5zdGFuY2VzIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBQQ0kgSURFIGRldmljZQogICoJQGh3czogaHdfcmVnc190IHBvaW50ZXJzIHRhYmxlIHRvIHVwZGF0ZQogICoKQEAgLTQ2Miw3ICs0NTksNyBAQAogICovCiAKIHZvaWQgaWRlX3BjaV9zZXR1cF9wb3J0cyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyAqZCwKLQkJCSBpbnQgcGNpaXJxLCBod19yZWdzX3QgKmh3LCBod19yZWdzX3QgKipod3MpCisJCQkgaHdfcmVnc190ICpodywgaHdfcmVnc190ICoqaHdzKQogewogCWludCBjaGFubmVscyA9IChkLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX1NJTkdMRSkgPyAxIDogMiwgcG9ydDsKIAl1OCB0bXA7CkBAIC00ODEsNyArNDc4LDcgQEAKIAkJCWNvbnRpbnVlOwkvKiBwb3J0IG5vdCBlbmFibGVkICovCiAJCX0KIAotCQlpZiAoaWRlX2h3X2NvbmZpZ3VyZShkZXYsIGQsIHBvcnQsIHBjaWlycSwgaHcgKyBwb3J0KSkKKwkJaWYgKGlkZV9od19jb25maWd1cmUoZGV2LCBkLCBwb3J0LCBodyArIHBvcnQpKQogCQkJY29udGludWU7CiAKIAkJKihod3MgKyBwb3J0KSA9IGh3ICsgcG9ydDsKQEAgLTUyNCw3ICs1MjEsNyBAQAogCQlpZiAobm9pc3kpCiAJCQlwcmludGsoS0VSTl9JTkZPICIlcyAlczogbm90IDEwMCUlIG5hdGl2ZSBtb2RlOiB3aWxsICIKIAkJCQkicHJvYmUgaXJxcyBsYXRlclxuIiwgZC0+bmFtZSwgcGNpX25hbWUoZGV2KSk7Ci0JCXBjaWlycSA9IHJldDsKKwkJcGNpaXJxID0gMDsKIAl9IGVsc2UgaWYgKCFwY2lpcnEgJiYgbm9pc3kpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXMgJXM6IGJhZCBpcnEgKCVkKTogd2lsbCBwcm9iZSBsYXRlclxuIiwKIAkJCWQtPm5hbWUsIHBjaV9uYW1lKGRldiksIHBjaWlycSk7CkBAIC01NDksNyArNTQ2LDcgQEAKIAlpZiAocmV0IDwgMCkKIAkJZ290byBvdXQ7CiAKLQlpZGVfcGNpX3NldHVwX3BvcnRzKGRldiwgZCwgMCwgJmh3WzBdLCAmaHdzWzBdKTsKKwlpZGVfcGNpX3NldHVwX3BvcnRzKGRldiwgZCwgJmh3WzBdLCAmaHdzWzBdKTsKIAogCWhvc3QgPSBpZGVfaG9zdF9hbGxvYyhkLCBod3MpOwogCWlmIChob3N0ID09IE5VTEwpIHsKQEAgLTU2OCw3ICs1NjUsMTEgQEAKIAkJZ290byBvdXQ7CiAKIAkvKiBmaXh1cCBJUlEgKi8KLQlod1sxXS5pcnEgPSBod1swXS5pcnEgPSByZXQ7CisJaWYgKGlkZV9wY2lfaXNfaW5fY29tcGF0aWJpbGl0eV9tb2RlKGRldikpIHsKKwkJaHdbMF0uaXJxID0gcGNpX2dldF9sZWdhY3lfaWRlX2lycShkZXYsIDApOworCQlod1sxXS5pcnEgPSBwY2lfZ2V0X2xlZ2FjeV9pZGVfaXJxKGRldiwgMSk7CisJfSBlbHNlCisJCWh3WzFdLmlycSA9IGh3WzBdLmlycSA9IHJldDsKIAogCXJldCA9IGlkZV9ob3N0X3JlZ2lzdGVyKGhvc3QsIGQsIGh3cyk7CiAJaWYgKHJldCkKQEAgLTU5MSw3ICs1OTIsNyBAQAogCQlpZiAocmV0IDwgMCkKIAkJCWdvdG8gb3V0OwogCi0JCWlkZV9wY2lfc2V0dXBfcG9ydHMocGRldltpXSwgZCwgMCwgJmh3W2kqMl0sICZod3NbaSoyXSk7CisJCWlkZV9wY2lfc2V0dXBfcG9ydHMocGRldltpXSwgZCwgJmh3W2kqMl0sICZod3NbaSoyXSk7CiAJfQogCiAJaG9zdCA9IGlkZV9ob3N0X2FsbG9jKGQsIGh3cyk7CkBAIC02MTksNyArNjIwLDExIEBACiAJCQlnb3RvIG91dDsKIAogCQkvKiBmaXh1cCBJUlEgKi8KLQkJaHdbaSoyICsgMV0uaXJxID0gaHdbaSoyXS5pcnEgPSByZXQ7CisJCWlmIChpZGVfcGNpX2lzX2luX2NvbXBhdGliaWxpdHlfbW9kZShwZGV2W2ldKSkgeworCQkJaHdbaSoyXS5pcnEgPSBwY2lfZ2V0X2xlZ2FjeV9pZGVfaXJxKHBkZXZbaV0sIDApOworCQkJaHdbaSoyICsgMV0uaXJxID0gcGNpX2dldF9sZWdhY3lfaWRlX2lycShwZGV2W2ldLCAxKTsKKwkJfSBlbHNlCisJCQlod1tpKjIgKyAxXS5pcnEgPSBod1tpKjJdLmlycSA9IHJldDsKIAl9CiAKIAlyZXQgPSBpZGVfaG9zdF9yZWdpc3Rlcihob3N0LCBkLCBod3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvc2lpbWFnZS5jIGIvZHJpdmVycy9pZGUvc2lpbWFnZS5jCmluZGV4IGNiMmIzNTIuLjE4MTFhZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3NpaW1hZ2UuYworKysgYi9kcml2ZXJzL2lkZS9zaWltYWdlLmMKQEAgLTQ2NCw3ICs0NjQsNyBAQAogICoJdG8gMTMzIE1IeiBjbG9ja2luZyBpZiB0aGUgc3lzdGVtIGlzbid0IGFscmVhZHkgc2V0IHVwIHRvIGRvIGl0LgogICovCiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgaW5pdF9jaGlwc2V0X3NpaW1hZ2Uoc3RydWN0IHBjaV9kZXYgKmRldikKK3N0YXRpYyBpbnQgaW5pdF9jaGlwc2V0X3NpaW1hZ2Uoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAlzdHJ1Y3QgaWRlX2hvc3QgKmhvc3QgPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsKIAl2b2lkIF9faW9tZW0gKmlvYWRkciA9IGhvc3QtPmhvc3RfcHJpdjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3NpczU1MTMuYyBiL2RyaXZlcnMvaWRlL3NpczU1MTMuYwppbmRleCA5ZWMxYTRhLi5hZmNhMjJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9zaXM1NTEzLmMKKysrIGIvZHJpdmVycy9pZGUvc2lzNTUxMy5jCkBAIC00NDcsNyArNDQ3LDcgQEAKIAlyZXR1cm4gY2hpcHNldF9mYW1pbHk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgaW5pdF9jaGlwc2V0X3NpczU1MTMoc3RydWN0IHBjaV9kZXYgKmRldikKK3N0YXRpYyBpbnQgaW5pdF9jaGlwc2V0X3NpczU1MTMoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAkvKiBNYWtlIGdlbmVyYWwgY29uZmlnIG9wcyBoZXJlCiAJICAgMS8gdGVsbCBJREUgY2hhbm5lbHMgdG8gb3BlcmF0ZSBpbiBDb21wYXRpYmlsaXR5IG1vZGUgb25seQpAQCAtNTYzLDcgKzU2Myw3IEBACiAJLm5hbWUJCT0gRFJWX05BTUUsCiAJLmluaXRfY2hpcHNldAk9IGluaXRfY2hpcHNldF9zaXM1NTEzLAogCS5lbmFibGViaXRzCT0geyB7MHg0YSwgMHgwMiwgMHgwMn0sIHsweDRhLCAweDA0LCAweDA0fSB9LAotCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX0xFR0FDWV9JUlFTIHwgSURFX0hGTEFHX05PX0FVVE9ETUEsCisJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfTk9fQVVUT0RNQSwKIAkucGlvX21hc2sJPSBBVEFfUElPNCwKIAkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvc2w4MmMxMDUuYyBiL2RyaXZlcnMvaWRlL3NsODJjMTA1LmMKaW5kZXggNjI5Nzk1Ni4uZGJhMjEzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvc2w4MmMxMDUuYworKysgYi9kcml2ZXJzL2lkZS9zbDgyYzEwNS5jCkBAIC0yNzEsNyArMjcxLDcgQEAKICAqIGNoYW5uZWwgMCBoZXJlIGF0IGxlYXN0LCBidXQgY2hhbm5lbCAxIGhhcyB0byBiZSBlbmFibGVkIGJ5CiAgKiBmaXJtd2FyZSBvciBhcmNoIGNvZGUuIFdlIHN0aWxsIHNldCBib3RoIHRvIDE2IGJpdHMgbW9kZS4KICAqLwotc3RhdGljIHVuc2lnbmVkIGludCBpbml0X2NoaXBzZXRfc2w4MmMxMDUoc3RydWN0IHBjaV9kZXYgKmRldikKK3N0YXRpYyBpbnQgaW5pdF9jaGlwc2V0X3NsODJjMTA1KHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJdTMyIHZhbDsKIApAQCAtMjgxLDcgKzI4MSw3IEBACiAJdmFsIHw9IENUUkxfUDBFTiB8IENUUkxfUDBGMTYgfCBDVFJMX1AxRjE2OwogCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCAweDQwLCB2YWwpOwogCi0JcmV0dXJuIGRldi0+aXJxOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X29wcyBzbDgyYzEwNV9wb3J0X29wcyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3NsYzkwZTY2LmMgYi9kcml2ZXJzL2lkZS9zbGM5MGU2Ni5jCmluZGV4IDQwYjRiOTQuLmY1NWQ3ZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3NsYzkwZTY2LmMKKysrIGIvZHJpdmVycy9pZGUvc2xjOTBlNjYuYwpAQCAtMTM2LDcgKzEzNiw2IEBACiAJLm5hbWUJCT0gRFJWX05BTUUsCiAJLmVuYWJsZWJpdHMJPSB7IHsweDQxLCAweDgwLCAweDgwfSwgezB4NDMsIDB4ODAsIDB4ODB9IH0sCiAJLnBvcnRfb3BzCT0gJnNsYzkwZTY2X3BvcnRfb3BzLAotCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX0xFR0FDWV9JUlFTLAogCS5waW9fbWFzawk9IEFUQV9QSU80LAogCS5zd2RtYV9tYXNrCT0gQVRBX1NXRE1BMl9PTkxZLAogCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMTJfT05MWSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3RybTI5MC5jIGIvZHJpdmVycy9pZGUvdHJtMjkwLmMKaW5kZXggYjZhMTI4NS4uMWMwOWU1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvdHJtMjkwLmMKKysrIGIvZHJpdmVycy9pZGUvdHJtMjkwLmMKQEAgLTI3Nyw5ICsyNzcsNiBAQAogCWlmIChyZWcgJiAweDEwKQogCQkvKiBsZWdhY3kgbW9kZSAqLwogCQlod2lmLT5pcnEgPSBod2lmLT5jaGFubmVsID8gMTUgOiAxNDsKLQllbHNlIGlmICghaHdpZi0+aXJxICYmIGh3aWYtPm1hdGUgJiYgaHdpZi0+bWF0ZS0+aXJxKQotCQkvKiBzaGFyaW5nIElSUSB3aXRoIG1hdGUgKi8KLQkJaHdpZi0+aXJxID0gaHdpZi0+bWF0ZS0+aXJxOwogCiAjaWYgMQogCXsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3ZpYTgyY3h4eC5jIGIvZHJpdmVycy9pZGUvdmlhODJjeHh4LmMKaW5kZXggNjA5MmZlMy4uM2ZmNzIzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvdmlhODJjeHh4LmMKKysrIGIvZHJpdmVycy9pZGUvdmlhODJjeHh4LmMKQEAgLTI2Nyw3ICsyNjcsNyBAQAogICoJYW5kIGluaXRpYWxpemUgaXRzIGRyaXZlIGluZGVwZW5kZW50IHJlZ2lzdGVycy4KICAqLwogCi1zdGF0aWMgdW5zaWduZWQgaW50IGluaXRfY2hpcHNldF92aWE4MmN4eHgoc3RydWN0IHBjaV9kZXYgKmRldikKK3N0YXRpYyBpbnQgaW5pdF9jaGlwc2V0X3ZpYTgyY3h4eChzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCXN0cnVjdCBpZGVfaG9zdCAqaG9zdCA9IHBjaV9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCB2aWE4MmN4eHhfZGV2ICp2ZGV2ID0gaG9zdC0+aG9zdF9wcml2OwpAQCAtNDQzLDE2ICs0NDMsNiBAQAogCWlmICgodmlhX2NvbmZpZy0+ZmxhZ3MgJiBWSUFfTk9fVU5NQVNLKSA9PSAwKQogCQlkLmhvc3RfZmxhZ3MgfD0gSURFX0hGTEFHX1VOTUFTS19JUlFTOwogCi0jaWZkZWYgQ09ORklHX1BQQ19DSFJQCi0JaWYgKG1hY2hpbmVfaXMoY2hycCkgJiYgX2NocnBfdHlwZSA9PSBfQ0hSUF9QZWdhc29zKQotCQlkLmhvc3RfZmxhZ3MgfD0gSURFX0hGTEFHX0ZPUkNFX0xFR0FDWV9JUlFTOwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfQU1JR0FPTkUKLQlpZiAobWFjaGluZV9pcyhhbWlnYW9uZSkpCi0JCWQuaG9zdF9mbGFncyB8PSBJREVfSEZMQUdfRk9SQ0VfTEVHQUNZX0lSUVM7Ci0jZW5kaWYKLQogCWQudWRtYV9tYXNrID0gdmlhX2NvbmZpZy0+dWRtYV9tYXNrOwogCiAJdmRldiA9IGt6YWxsb2Moc2l6ZW9mKCp2ZGV2KSwgR0ZQX0tFUk5FTCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L2R2MTM5NC5jIGIvZHJpdmVycy9pZWVlMTM5NC9kdjEzOTQuYwppbmRleCAzODM4YmM0Li5jYjE1YmZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L2R2MTM5NC5jCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvZHYxMzk0LmMKQEAgLTEzMjUsMTEgKzEzMjUsNyBAQAogCiAJc3RydWN0IHZpZGVvX2NhcmQgKnZpZGVvID0gZmlsZV90b192aWRlb19jYXJkKGZpbGUpOwogCi0JaW50IHJldHZhbCA9IGZhc3luY19oZWxwZXIoZmQsIGZpbGUsIG9uLCAmdmlkZW8tPmZhc3luYyk7Ci0KLQlpZiAocmV0dmFsIDwgMCkKLQkJcmV0dXJuIHJldHZhbDsKLSAgICAgICAgcmV0dXJuIDA7CisJcmV0dXJuIGZhc3luY19oZWxwZXIoZmQsIGZpbGUsIG9uLCAmdmlkZW8tPmZhc3luYyk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IGR2MTM5NF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY20uYwppbmRleCBmMWU4MmE5Li41MTMwZmM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtLmMKQEAgLTkyNyw4ICs5MjcsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldCA9IDA7CiAKLQlzZXJ2aWNlX21hc2sgPSBzZXJ2aWNlX21hc2sgPyBzZXJ2aWNlX21hc2sgOgotCQkgICAgICAgX19jb25zdGFudF9jcHVfdG9fYmU2NCh+MFVMTCk7CisJc2VydmljZV9tYXNrID0gc2VydmljZV9tYXNrID8gc2VydmljZV9tYXNrIDogfmNwdV90b19iZTY0KDApOwogCXNlcnZpY2VfaWQgJj0gc2VydmljZV9tYXNrOwogCWlmICgoc2VydmljZV9pZCAmIElCX1NFUlZJQ0VfSURfQUdOX01BU0spID09IElCX0NNX0FTU0lHTl9TRVJWSUNFX0lEICYmCiAJICAgIChzZXJ2aWNlX2lkICE9IElCX0NNX0FTU0lHTl9TRVJWSUNFX0lEKSkKQEAgLTk1NCw3ICs5NTMsNyBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZjbS5sb2NrLCBmbGFncyk7CiAJaWYgKHNlcnZpY2VfaWQgPT0gSUJfQ01fQVNTSUdOX1NFUlZJQ0VfSUQpIHsKIAkJY21faWQtPnNlcnZpY2VfaWQgPSBjcHVfdG9fYmU2NChjbS5saXN0ZW5fc2VydmljZV9pZCsrKTsKLQkJY21faWQtPnNlcnZpY2VfbWFzayA9IF9fY29uc3RhbnRfY3B1X3RvX2JlNjQofjBVTEwpOworCQljbV9pZC0+c2VydmljZV9tYXNrID0gfmNwdV90b19iZTY0KDApOwogCX0gZWxzZSB7CiAJCWNtX2lkLT5zZXJ2aWNlX2lkID0gc2VydmljZV9pZDsKIAkJY21faWQtPnNlcnZpY2VfbWFzayA9IHNlcnZpY2VfbWFzazsKQEAgLTExMzQsNyArMTEzMyw3IEBACiAJCQlnb3RvIGVycm9yMTsKIAl9CiAJY21faWQtPnNlcnZpY2VfaWQgPSBwYXJhbS0+c2VydmljZV9pZDsKLQljbV9pZC0+c2VydmljZV9tYXNrID0gX19jb25zdGFudF9jcHVfdG9fYmU2NCh+MFVMTCk7CisJY21faWQtPnNlcnZpY2VfbWFzayA9IH5jcHVfdG9fYmU2NCgwKTsKIAljbV9pZF9wcml2LT50aW1lb3V0X21zID0gY21fY29udmVydF90b19tcygKIAkJCQkgICAgcGFyYW0tPnByaW1hcnlfcGF0aC0+cGFja2V0X2xpZmVfdGltZSkgKiAyICsKIAkJCQkgY21fY29udmVydF90b19tcygKQEAgLTE1NDUsNyArMTU0NCw3IEBACiAJY21faWRfcHJpdi0+aWQuY21faGFuZGxlciA9IGxpc3Rlbl9jbV9pZF9wcml2LT5pZC5jbV9oYW5kbGVyOwogCWNtX2lkX3ByaXYtPmlkLmNvbnRleHQgPSBsaXN0ZW5fY21faWRfcHJpdi0+aWQuY29udGV4dDsKIAljbV9pZF9wcml2LT5pZC5zZXJ2aWNlX2lkID0gcmVxX21zZy0+c2VydmljZV9pZDsKLQljbV9pZF9wcml2LT5pZC5zZXJ2aWNlX21hc2sgPSBfX2NvbnN0YW50X2NwdV90b19iZTY0KH4wVUxMKTsKKwljbV9pZF9wcml2LT5pZC5zZXJ2aWNlX21hc2sgPSB+Y3B1X3RvX2JlNjQoMCk7CiAKIAljbV9wcm9jZXNzX3JvdXRlZF9yZXEocmVxX21zZywgd29yay0+bWFkX3JlY3Zfd2MtPndjKTsKIAljbV9mb3JtYXRfcGF0aHNfZnJvbV9yZXEocmVxX21zZywgJndvcmstPnBhdGhbMF0sICZ3b3JrLT5wYXRoWzFdKTsKQEAgLTI4OTgsNyArMjg5Nyw3IEBACiAJCWdvdG8gb3V0OwogCiAJY21faWQtPnNlcnZpY2VfaWQgPSBwYXJhbS0+c2VydmljZV9pZDsKLQljbV9pZC0+c2VydmljZV9tYXNrID0gX19jb25zdGFudF9jcHVfdG9fYmU2NCh+MFVMTCk7CisJY21faWQtPnNlcnZpY2VfbWFzayA9IH5jcHVfdG9fYmU2NCgwKTsKIAljbV9pZF9wcml2LT50aW1lb3V0X21zID0gcGFyYW0tPnRpbWVvdXRfbXM7CiAJY21faWRfcHJpdi0+bWF4X2NtX3JldHJpZXMgPSBwYXJhbS0+bWF4X2NtX3JldHJpZXM7CiAJcmV0ID0gY21fYWxsb2NfbXNnKGNtX2lkX3ByaXYsICZtc2cpOwpAQCAtMjk5Miw3ICsyOTkxLDcgQEAKIAljbV9pZF9wcml2LT5pZC5jbV9oYW5kbGVyID0gY3VyX2NtX2lkX3ByaXYtPmlkLmNtX2hhbmRsZXI7CiAJY21faWRfcHJpdi0+aWQuY29udGV4dCA9IGN1cl9jbV9pZF9wcml2LT5pZC5jb250ZXh0OwogCWNtX2lkX3ByaXYtPmlkLnNlcnZpY2VfaWQgPSBzaWRyX3JlcV9tc2ctPnNlcnZpY2VfaWQ7Ci0JY21faWRfcHJpdi0+aWQuc2VydmljZV9tYXNrID0gX19jb25zdGFudF9jcHVfdG9fYmU2NCh+MFVMTCk7CisJY21faWRfcHJpdi0+aWQuc2VydmljZV9tYXNrID0gfmNwdV90b19iZTY0KDApOwogCiAJY21fZm9ybWF0X3NpZHJfcmVxX2V2ZW50KHdvcmssICZjdXJfY21faWRfcHJpdi0+aWQpOwogCWNtX3Byb2Nlc3Nfd29yayhjbV9pZF9wcml2LCB3b3JrKTsKQEAgLTM3ODksNyArMzc4OCw3IEBACiAJcndsb2NrX2luaXQoJmNtLmRldmljZV9sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmY20ubG9jayk7CiAJY20ubGlzdGVuX3NlcnZpY2VfdGFibGUgPSBSQl9ST09UOwotCWNtLmxpc3Rlbl9zZXJ2aWNlX2lkID0gX19jb25zdGFudF9iZTY0X3RvX2NwdShJQl9DTV9BU1NJR05fU0VSVklDRV9JRCk7CisJY20ubGlzdGVuX3NlcnZpY2VfaWQgPSBiZTY0X3RvX2NwdShJQl9DTV9BU1NJR05fU0VSVklDRV9JRCk7CiAJY20ucmVtb3RlX2lkX3RhYmxlID0gUkJfUk9PVDsKIAljbS5yZW1vdGVfcXBfdGFibGUgPSBSQl9ST09UOwogCWNtLnJlbW90ZV9zaWRyX3RhYmxlID0gUkJfUk9PVDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtX21zZ3MuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtX21zZ3MuaAppbmRleCBhZWM5YzdhLi43ZTYzYzA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbV9tc2dzLmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21fbXNncy5oCkBAIC00NCwxNyArNDQsMTcgQEAKIAogI2RlZmluZSBJQl9DTV9DTEFTU19WRVJTSU9OCTIgLyogSUIgc3BlY2lmaWNhdGlvbiAxLjIgKi8KIAotI2RlZmluZSBDTV9SRVFfQVRUUl9JRAkgICAgX19jb25zdGFudF9odG9ucygweDAwMTApCi0jZGVmaW5lIENNX01SQV9BVFRSX0lECSAgICBfX2NvbnN0YW50X2h0b25zKDB4MDAxMSkKLSNkZWZpbmUgQ01fUkVKX0FUVFJfSUQJICAgIF9fY29uc3RhbnRfaHRvbnMoMHgwMDEyKQotI2RlZmluZSBDTV9SRVBfQVRUUl9JRAkgICAgX19jb25zdGFudF9odG9ucygweDAwMTMpCi0jZGVmaW5lIENNX1JUVV9BVFRSX0lECSAgICBfX2NvbnN0YW50X2h0b25zKDB4MDAxNCkKLSNkZWZpbmUgQ01fRFJFUV9BVFRSX0lECSAgICBfX2NvbnN0YW50X2h0b25zKDB4MDAxNSkKLSNkZWZpbmUgQ01fRFJFUF9BVFRSX0lECSAgICBfX2NvbnN0YW50X2h0b25zKDB4MDAxNikKLSNkZWZpbmUgQ01fU0lEUl9SRVFfQVRUUl9JRCBfX2NvbnN0YW50X2h0b25zKDB4MDAxNykKLSNkZWZpbmUgQ01fU0lEUl9SRVBfQVRUUl9JRCBfX2NvbnN0YW50X2h0b25zKDB4MDAxOCkKLSNkZWZpbmUgQ01fTEFQX0FUVFJfSUQgICAgICBfX2NvbnN0YW50X2h0b25zKDB4MDAxOSkKLSNkZWZpbmUgQ01fQVBSX0FUVFJfSUQgICAgICBfX2NvbnN0YW50X2h0b25zKDB4MDAxQSkKKyNkZWZpbmUgQ01fUkVRX0FUVFJfSUQJCWNwdV90b19iZTE2KDB4MDAxMCkKKyNkZWZpbmUgQ01fTVJBX0FUVFJfSUQJCWNwdV90b19iZTE2KDB4MDAxMSkKKyNkZWZpbmUgQ01fUkVKX0FUVFJfSUQJCWNwdV90b19iZTE2KDB4MDAxMikKKyNkZWZpbmUgQ01fUkVQX0FUVFJfSUQJCWNwdV90b19iZTE2KDB4MDAxMykKKyNkZWZpbmUgQ01fUlRVX0FUVFJfSUQJCWNwdV90b19iZTE2KDB4MDAxNCkKKyNkZWZpbmUgQ01fRFJFUV9BVFRSX0lECQljcHVfdG9fYmUxNigweDAwMTUpCisjZGVmaW5lIENNX0RSRVBfQVRUUl9JRAkJY3B1X3RvX2JlMTYoMHgwMDE2KQorI2RlZmluZSBDTV9TSURSX1JFUV9BVFRSX0lECWNwdV90b19iZTE2KDB4MDAxNykKKyNkZWZpbmUgQ01fU0lEUl9SRVBfQVRUUl9JRAljcHVfdG9fYmUxNigweDAwMTgpCisjZGVmaW5lIENNX0xBUF9BVFRSX0lECQljcHVfdG9fYmUxNigweDAwMTkpCisjZGVmaW5lIENNX0FQUl9BVFRSX0lECQljcHVfdG9fYmUxNigweDAwMUEpCiAKIGVudW0gY21fbXNnX3NlcXVlbmNlIHsKIAlDTV9NU0dfU0VRVUVOQ0VfUkVRLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZGV2aWNlLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuYwppbmRleCA3OTEzYjgwLi5kMWZiYTQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuYwpAQCAtMTkzLDcgKzE5Myw3IEBACiAKIAlCVUdfT04oZGV2aWNlLT5yZWdfc3RhdGUgIT0gSUJfREVWX1VOUkVHSVNURVJFRCk7CiAKLQlpYl9kZXZpY2VfdW5yZWdpc3Rlcl9zeXNmcyhkZXZpY2UpOworCWtvYmplY3RfcHV0KCZkZXZpY2UtPmRldi5rb2JqKTsKIH0KIEVYUE9SVF9TWU1CT0woaWJfZGVhbGxvY19kZXZpY2UpOwogCkBAIC0zNDgsNiArMzQ4LDggQEAKIAogCW11dGV4X3VubG9jaygmZGV2aWNlX211dGV4KTsKIAorCWliX2RldmljZV91bnJlZ2lzdGVyX3N5c2ZzKGRldmljZSk7CisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2aWNlLT5jbGllbnRfZGF0YV9sb2NrLCBmbGFncyk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNvbnRleHQsIHRtcCwgJmRldmljZS0+Y2xpZW50X2RhdGFfbGlzdCwgbGlzdCkKIAkJa2ZyZWUoY29udGV4dCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9tYWQuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL21hZC5jCmluZGV4IDVjNTRmYzIuLmRlOTIyYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL21hZC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL21hZC5jCkBAIC0zMDEsNiArMzAxLDE2IEBACiAJbWFkX2FnZW50X3ByaXYtPmFnZW50LmNvbnRleHQgPSBjb250ZXh0OwogCW1hZF9hZ2VudF9wcml2LT5hZ2VudC5xcCA9IHBvcnRfcHJpdi0+cXBfaW5mb1txcG5dLnFwOwogCW1hZF9hZ2VudF9wcml2LT5hZ2VudC5wb3J0X251bSA9IHBvcnRfbnVtOworCXNwaW5fbG9ja19pbml0KCZtYWRfYWdlbnRfcHJpdi0+bG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJm1hZF9hZ2VudF9wcml2LT5zZW5kX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZtYWRfYWdlbnRfcHJpdi0+d2FpdF9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmbWFkX2FnZW50X3ByaXYtPmRvbmVfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJm1hZF9hZ2VudF9wcml2LT5ybXBwX2xpc3QpOworCUlOSVRfREVMQVlFRF9XT1JLKCZtYWRfYWdlbnRfcHJpdi0+dGltZWRfd29yaywgdGltZW91dF9zZW5kcyk7CisJSU5JVF9MSVNUX0hFQUQoJm1hZF9hZ2VudF9wcml2LT5sb2NhbF9saXN0KTsKKwlJTklUX1dPUksoJm1hZF9hZ2VudF9wcml2LT5sb2NhbF93b3JrLCBsb2NhbF9jb21wbGV0aW9ucyk7CisJYXRvbWljX3NldCgmbWFkX2FnZW50X3ByaXYtPnJlZmNvdW50LCAxKTsKKwlpbml0X2NvbXBsZXRpb24oJm1hZF9hZ2VudF9wcml2LT5jb21wKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0X3ByaXYtPnJlZ19sb2NrLCBmbGFncyk7CiAJbWFkX2FnZW50X3ByaXYtPmFnZW50LmhpX3RpZCA9ICsraWJfbWFkX2NsaWVudF9pZDsKQEAgLTM1MCwxNyArMzYwLDYgQEAKIAlsaXN0X2FkZF90YWlsKCZtYWRfYWdlbnRfcHJpdi0+YWdlbnRfbGlzdCwgJnBvcnRfcHJpdi0+YWdlbnRfbGlzdCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydF9wcml2LT5yZWdfbG9jaywgZmxhZ3MpOwogCi0Jc3Bpbl9sb2NrX2luaXQoJm1hZF9hZ2VudF9wcml2LT5sb2NrKTsKLQlJTklUX0xJU1RfSEVBRCgmbWFkX2FnZW50X3ByaXYtPnNlbmRfbGlzdCk7Ci0JSU5JVF9MSVNUX0hFQUQoJm1hZF9hZ2VudF9wcml2LT53YWl0X2xpc3QpOwotCUlOSVRfTElTVF9IRUFEKCZtYWRfYWdlbnRfcHJpdi0+ZG9uZV9saXN0KTsKLQlJTklUX0xJU1RfSEVBRCgmbWFkX2FnZW50X3ByaXYtPnJtcHBfbGlzdCk7Ci0JSU5JVF9ERUxBWUVEX1dPUksoJm1hZF9hZ2VudF9wcml2LT50aW1lZF93b3JrLCB0aW1lb3V0X3NlbmRzKTsKLQlJTklUX0xJU1RfSEVBRCgmbWFkX2FnZW50X3ByaXYtPmxvY2FsX2xpc3QpOwotCUlOSVRfV09SSygmbWFkX2FnZW50X3ByaXYtPmxvY2FsX3dvcmssIGxvY2FsX2NvbXBsZXRpb25zKTsKLQlhdG9taWNfc2V0KCZtYWRfYWdlbnRfcHJpdi0+cmVmY291bnQsIDEpOwotCWluaXRfY29tcGxldGlvbigmbWFkX2FnZW50X3ByaXYtPmNvbXApOwotCiAJcmV0dXJuICZtYWRfYWdlbnRfcHJpdi0+YWdlbnQ7CiAKIGVycm9yNDoKQEAgLTc0Myw5ICs3NDIsNyBAQAogCQlicmVhazsKIAljYXNlIElCX01BRF9SRVNVTFRfU1VDQ0VTUyB8IElCX01BRF9SRVNVTFRfQ09OU1VNRUQ6CiAJCWttZW1fY2FjaGVfZnJlZShpYl9tYWRfY2FjaGUsIG1hZF9wcml2KTsKLQkJa2ZyZWUobG9jYWwpOwotCQlyZXQgPSAxOwotCQlnb3RvIG91dDsKKwkJYnJlYWs7CiAJY2FzZSBJQl9NQURfUkVTVUxUX1NVQ0NFU1M6CiAJCS8qIFRyZWF0IGxpa2UgYW4gaW5jb21pbmcgcmVjZWl2ZSBNQUQgKi8KIAkJcG9ydF9wcml2ID0gaWJfZ2V0X21hZF9wb3J0KG1hZF9hZ2VudF9wcml2LT5hZ2VudC5kZXZpY2UsCkBAIC03NTYsMTAgKzc1MywxMiBAQAogCQkJCQkJICAgICAgICAmbWFkX3ByaXYtPm1hZC5tYWQpOwogCQl9CiAJCWlmICghcG9ydF9wcml2IHx8ICFyZWN2X21hZF9hZ2VudCkgeworCQkJLyoKKwkJCSAqIE5vIHJlY2VpdmluZyBhZ2VudCBzbyBkcm9wIHBhY2tldCBhbmQKKwkJCSAqIGdlbmVyYXRlIHNlbmQgY29tcGxldGlvbi4KKwkJCSAqLwogCQkJa21lbV9jYWNoZV9mcmVlKGliX21hZF9jYWNoZSwgbWFkX3ByaXYpOwotCQkJa2ZyZWUobG9jYWwpOwotCQkJcmV0ID0gMDsKLQkJCWdvdG8gb3V0OworCQkJYnJlYWs7CiAJCX0KIAkJbG9jYWwtPm1hZF9wcml2ID0gbWFkX3ByaXY7CiAJCWxvY2FsLT5yZWN2X21hZF9hZ2VudCA9IHJlY3ZfbWFkX2FnZW50OwpAQCAtMjM1Niw3ICsyMzU1LDcgQEAKIAlzdHJ1Y3QgaWJfbWFkX2xvY2FsX3ByaXZhdGUgKmxvY2FsOwogCXN0cnVjdCBpYl9tYWRfYWdlbnRfcHJpdmF0ZSAqcmVjdl9tYWRfYWdlbnQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcmVjdiA9IDA7CisJaW50IGZyZWVfbWFkOwogCXN0cnVjdCBpYl93YyB3YzsKIAlzdHJ1Y3QgaWJfbWFkX3NlbmRfd2MgbWFkX3NlbmRfd2M7CiAKQEAgLTIzNzAsMTQgKzIzNjksMTUgQEAKIAkJCQkgICBjb21wbGV0aW9uX2xpc3QpOwogCQlsaXN0X2RlbCgmbG9jYWwtPmNvbXBsZXRpb25fbGlzdCk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1hZF9hZ2VudF9wcml2LT5sb2NrLCBmbGFncyk7CisJCWZyZWVfbWFkID0gMDsKIAkJaWYgKGxvY2FsLT5tYWRfcHJpdikgewogCQkJcmVjdl9tYWRfYWdlbnQgPSBsb2NhbC0+cmVjdl9tYWRfYWdlbnQ7CiAJCQlpZiAoIXJlY3ZfbWFkX2FnZW50KSB7CiAJCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiTm8gcmVjZWl2ZSBNQUQgYWdlbnQgZm9yIGxvY2FsIGNvbXBsZXRpb25cbiIpOworCQkJCWZyZWVfbWFkID0gMTsKIAkJCQlnb3RvIGxvY2FsX3NlbmRfY29tcGxldGlvbjsKIAkJCX0KIAotCQkJcmVjdiA9IDE7CiAJCQkvKgogCQkJICogRGVmaW5lZCBiZWhhdmlvciBpcyB0byBjb21wbGV0ZSByZXNwb25zZQogCQkJICogYmVmb3JlIHJlcXVlc3QKQEAgLTI0MjIsNyArMjQyMiw3IEBACiAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJm1hZF9hZ2VudF9wcml2LT5sb2NrLCBmbGFncyk7CiAJCWF0b21pY19kZWMoJm1hZF9hZ2VudF9wcml2LT5yZWZjb3VudCk7Ci0JCWlmICghcmVjdikKKwkJaWYgKGZyZWVfbWFkKQogCQkJa21lbV9jYWNoZV9mcmVlKGliX21hZF9jYWNoZSwgbG9jYWwtPm1hZF9wcml2KTsKIAkJa2ZyZWUobG9jYWwpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL21hZF9ybXBwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9tYWRfcm1wcC5jCmluZGV4IDNhZjJiODQuLjU3YTNjNmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL21hZF9ybXBwLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbWFkX3JtcHAuYwpAQCAtNzM1LDcgKzczNSw3IEBACiAJCWdvdG8gYmFkOwogCX0KIAotCWlmIChybXBwX2hkci0+c2VnX251bSA9PSBfX2NvbnN0YW50X2h0b25sKDEpKSB7CisJaWYgKHJtcHBfaGRyLT5zZWdfbnVtID09IGNwdV90b19iZTMyKDEpKSB7CiAJCWlmICghKGliX2dldF9ybXBwX2ZsYWdzKHJtcHBfaGRyKSAmIElCX01HTVRfUk1QUF9GTEFHX0ZJUlNUKSkgewogCQkJcm1wcF9zdGF0dXMgPSBJQl9NR01UX1JNUFBfU1RBVFVTX0JBRF9TRUc7CiAJCQlnb3RvIGJhZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3NhX3F1ZXJ5LmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9zYV9xdWVyeS5jCmluZGV4IDc4NjNhNTAuLjE4NjUwNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3NhX3F1ZXJ5LmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvc2FfcXVlcnkuYwpAQCAtMzk1LDYgKzM5NSw4IEBACiAJfQogCiAJc3Bpbl9sb2NrX2lycSgmcG9ydC0+YWhfbG9jayk7CisJaWYgKHBvcnQtPnNtX2FoKQorCQlrcmVmX3B1dCgmcG9ydC0+c21fYWgtPnJlZiwgZnJlZV9zbV9haCk7CiAJcG9ydC0+c21fYWggPSBuZXdfYWg7CiAJc3Bpbl91bmxvY2tfaXJxKCZwb3J0LT5haF9sb2NrKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvc3lzZnMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3N5c2ZzLmMKaW5kZXggYjQzZjdkMzY4Li41YzA0Y2ZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9zeXNmcy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3N5c2ZzLmMKQEAgLTY2LDExICs2Niw2IEBACiAJaW50CQkJaW5kZXg7CiB9OwogCi1zdGF0aWMgaW5saW5lIGludCBpYmRldl9pc19hbGl2ZShjb25zdCBzdHJ1Y3QgaWJfZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIGRldi0+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+bWFkX2hkci5hdHRyX2lkID09IElCX1NNUF9BVFRSX1BPUlRfSU5GTyAmJgorCSAgICAhaWJfcXVlcnlfcG9ydChpYmRldiwgcG9ydF9udW0sICZwYXR0cikpCisJCXByZXZfbGlkID0gcGF0dHIubGlkOworCiAJZXJyID0gbWx4NF9NQURfSUZDKHRvX21kZXYoaWJkZXYpLAogCQkJICAgbWFkX2ZsYWdzICYgSUJfTUFEX0lHTk9SRV9NS0VZLAogCQkJICAgbWFkX2ZsYWdzICYgSUJfTUFEX0lHTk9SRV9CS0VZLApAQCAtMjcxLDcgKzI4NCw3IEBACiAJCXJldHVybiBJQl9NQURfUkVTVUxUX0ZBSUxVUkU7CiAKIAlpZiAoIW91dF9tYWQtPm1hZF9oZHIuc3RhdHVzKSB7Ci0JCXNtcF9zbm9vcChpYmRldiwgcG9ydF9udW0sIGluX21hZCk7CisJCXNtcF9zbm9vcChpYmRldiwgcG9ydF9udW0sIGluX21hZCwgcHJldl9saWQpOwogCQlub2RlX2Rlc2Nfb3ZlcnJpZGUoaWJkZXYsIG91dF9tYWQpOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvbWFpbi5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvbWFpbi5jCmluZGV4IDYxNTg4YmQyLi4yY2NiOWQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9tYWluLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvbWFpbi5jCkBAIC02OTksMTEgKzY5OSwxMiBAQAogCXN0cnVjdCBtbHg0X2liX2RldiAqaWJkZXYgPSBpYmRldl9wdHI7CiAJaW50IHA7CiAKKwltbHg0X2liX21hZF9jbGVhbnVwKGliZGV2KTsKKwlpYl91bnJlZ2lzdGVyX2RldmljZSgmaWJkZXYtPmliX2Rldik7CisKIAlmb3IgKHAgPSAxOyBwIDw9IGliZGV2LT5udW1fcG9ydHM7ICsrcCkKIAkJbWx4NF9DTE9TRV9QT1JUKGRldiwgcCk7CiAKLQltbHg0X2liX21hZF9jbGVhbnVwKGliZGV2KTsKLQlpYl91bnJlZ2lzdGVyX2RldmljZSgmaWJkZXYtPmliX2Rldik7CiAJaW91bm1hcChpYmRldi0+dWFyX21hcCk7CiAJbWx4NF91YXJfZnJlZShkZXYsICZpYmRldi0+cHJpdl91YXIpOwogCW1seDRfcGRfZnJlZShkZXYsIGliZGV2LT5wcml2X3Bkbik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9xcC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvcXAuYwppbmRleCBhOTFjYjRjLi5mMzg1YTI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9xcC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L3FwLmMKQEAgLTcxLDE3ICs3MSwxNyBAQAogfTsKIAogc3RhdGljIGNvbnN0IF9fYmUzMiBtbHg0X2liX29wY29kZVtdID0gewotCVtJQl9XUl9TRU5EXQkJCT0gX19jb25zdGFudF9jcHVfdG9fYmUzMihNTFg0X09QQ09ERV9TRU5EKSwKLQlbSUJfV1JfTFNPXQkJCT0gX19jb25zdGFudF9jcHVfdG9fYmUzMihNTFg0X09QQ09ERV9MU08pLAotCVtJQl9XUl9TRU5EX1dJVEhfSU1NXQkJPSBfX2NvbnN0YW50X2NwdV90b19iZTMyKE1MWDRfT1BDT0RFX1NFTkRfSU1NKSwKLQlbSUJfV1JfUkRNQV9XUklURV0JCT0gX19jb25zdGFudF9jcHVfdG9fYmUzMihNTFg0X09QQ09ERV9SRE1BX1dSSVRFKSwKLQlbSUJfV1JfUkRNQV9XUklURV9XSVRIX0lNTV0JPSBfX2NvbnN0YW50X2NwdV90b19iZTMyKE1MWDRfT1BDT0RFX1JETUFfV1JJVEVfSU1NKSwKLQlbSUJfV1JfUkRNQV9SRUFEXQkJPSBfX2NvbnN0YW50X2NwdV90b19iZTMyKE1MWDRfT1BDT0RFX1JETUFfUkVBRCksCi0JW0lCX1dSX0FUT01JQ19DTVBfQU5EX1NXUF0JPSBfX2NvbnN0YW50X2NwdV90b19iZTMyKE1MWDRfT1BDT0RFX0FUT01JQ19DUyksCi0JW0lCX1dSX0FUT01JQ19GRVRDSF9BTkRfQUREXQk9IF9fY29uc3RhbnRfY3B1X3RvX2JlMzIoTUxYNF9PUENPREVfQVRPTUlDX0ZBKSwKLQlbSUJfV1JfU0VORF9XSVRIX0lOVl0JCT0gX19jb25zdGFudF9jcHVfdG9fYmUzMihNTFg0X09QQ09ERV9TRU5EX0lOVkFMKSwKLQlbSUJfV1JfTE9DQUxfSU5WXQkJPSBfX2NvbnN0YW50X2NwdV90b19iZTMyKE1MWDRfT1BDT0RFX0xPQ0FMX0lOVkFMKSwKLQlbSUJfV1JfRkFTVF9SRUdfTVJdCQk9IF9fY29uc3RhbnRfY3B1X3RvX2JlMzIoTUxYNF9PUENPREVfRk1SKSwKKwlbSUJfV1JfU0VORF0JCQk9IGNwdV90b19iZTMyKE1MWDRfT1BDT0RFX1NFTkQpLAorCVtJQl9XUl9MU09dCQkJPSBjcHVfdG9fYmUzMihNTFg0X09QQ09ERV9MU08pLAorCVtJQl9XUl9TRU5EX1dJVEhfSU1NXQkJPSBjcHVfdG9fYmUzMihNTFg0X09QQ09ERV9TRU5EX0lNTSksCisJW0lCX1dSX1JETUFfV1JJVEVdCQk9IGNwdV90b19iZTMyKE1MWDRfT1BDT0RFX1JETUFfV1JJVEUpLAorCVtJQl9XUl9SRE1BX1dSSVRFX1dJVEhfSU1NXQk9IGNwdV90b19iZTMyKE1MWDRfT1BDT0RFX1JETUFfV1JJVEVfSU1NKSwKKwlbSUJfV1JfUkRNQV9SRUFEXQkJPSBjcHVfdG9fYmUzMihNTFg0X09QQ09ERV9SRE1BX1JFQUQpLAorCVtJQl9XUl9BVE9NSUNfQ01QX0FORF9TV1BdCT0gY3B1X3RvX2JlMzIoTUxYNF9PUENPREVfQVRPTUlDX0NTKSwKKwlbSUJfV1JfQVRPTUlDX0ZFVENIX0FORF9BRERdCT0gY3B1X3RvX2JlMzIoTUxYNF9PUENPREVfQVRPTUlDX0ZBKSwKKwlbSUJfV1JfU0VORF9XSVRIX0lOVl0JCT0gY3B1X3RvX2JlMzIoTUxYNF9PUENPREVfU0VORF9JTlZBTCksCisJW0lCX1dSX0xPQ0FMX0lOVl0JCT0gY3B1X3RvX2JlMzIoTUxYNF9PUENPREVfTE9DQUxfSU5WQUwpLAorCVtJQl9XUl9GQVNUX1JFR19NUl0JCT0gY3B1X3RvX2JlMzIoTUxYNF9PUENPREVfRk1SKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbWx4NF9pYl9zcXAgKnRvX21zcXAoc3RydWN0IG1seDRfaWJfcXAgKm1xcCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9tYWQuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9tYWQuYwppbmRleCA2NDA0NDk1Li41NjQ4NjU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfbWFkLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX21hZC5jCkBAIC0xMDQsNyArMTA0LDggQEAKICAqLwogc3RhdGljIHZvaWQgc21wX3Nub29wKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LAogCQkgICAgICB1OCBwb3J0X251bSwKLQkJICAgICAgc3RydWN0IGliX21hZCAqbWFkKQorCQkgICAgICBzdHJ1Y3QgaWJfbWFkICptYWQsCisJCSAgICAgIHUxNiBwcmV2X2xpZCkKIHsKIAlzdHJ1Y3QgaWJfZXZlbnQgZXZlbnQ7CiAKQEAgLTExNCw2ICsxMTUsNyBAQAogCQlpZiAobWFkLT5tYWRfaGRyLmF0dHJfaWQgPT0gSUJfU01QX0FUVFJfUE9SVF9JTkZPKSB7CiAJCQlzdHJ1Y3QgaWJfcG9ydF9pbmZvICpwaW5mbyA9CiAJCQkJKHN0cnVjdCBpYl9wb3J0X2luZm8gKikgKChzdHJ1Y3QgaWJfc21wICopIG1hZCktPmRhdGE7CisJCQl1MTYgbGlkID0gYmUxNl90b19jcHUocGluZm8tPmxpZCk7CiAKIAkJCW10aGNhX3VwZGF0ZV9yYXRlKHRvX21kZXYoaWJkZXYpLCBwb3J0X251bSk7CiAJCQl1cGRhdGVfc21fYWgodG9fbWRldihpYmRldiksIHBvcnRfbnVtLApAQCAtMTIzLDEyICsxMjUsMTUgQEAKIAkJCWV2ZW50LmRldmljZSAgICAgICAgICAgPSBpYmRldjsKIAkJCWV2ZW50LmVsZW1lbnQucG9ydF9udW0gPSBwb3J0X251bTsKIAotCQkJaWYgKHBpbmZvLT5jbGllbnRyZXJlZ19yZXN2X3N1Ym5ldHRvICYgMHg4MCkKKwkJCWlmIChwaW5mby0+Y2xpZW50cmVyZWdfcmVzdl9zdWJuZXR0byAmIDB4ODApIHsKIAkJCQlldmVudC5ldmVudCAgICA9IElCX0VWRU5UX0NMSUVOVF9SRVJFR0lTVEVSOwotCQkJZWxzZQotCQkJCWV2ZW50LmV2ZW50ICAgID0gSUJfRVZFTlRfTElEX0NIQU5HRTsKKwkJCQlpYl9kaXNwYXRjaF9ldmVudCgmZXZlbnQpOworCQkJfQogCi0JCQlpYl9kaXNwYXRjaF9ldmVudCgmZXZlbnQpOworCQkJaWYgKHByZXZfbGlkICE9IGxpZCkgeworCQkJCWV2ZW50LmV2ZW50ICAgID0gSUJfRVZFTlRfTElEX0NIQU5HRTsKKwkJCQlpYl9kaXNwYXRjaF9ldmVudCgmZXZlbnQpOworCQkJfQogCQl9CiAKIAkJaWYgKG1hZC0+bWFkX2hkci5hdHRyX2lkID09IElCX1NNUF9BVFRSX1BLRVlfVEFCTEUpIHsKQEAgLTE5Niw2ICsyMDEsOCBAQAogCWludCBlcnI7CiAJdTggc3RhdHVzOwogCXUxNiBzbGlkID0gaW5fd2MgPyBpbl93Yy0+c2xpZCA6IGJlMTZfdG9fY3B1KElCX0xJRF9QRVJNSVNTSVZFKTsKKwl1MTYgcHJldl9saWQgPSAwOworCXN0cnVjdCBpYl9wb3J0X2F0dHIgcGF0dHI7CiAKIAkvKiBGb3J3YXJkIGxvY2FsbHkgZ2VuZXJhdGVkIHRyYXBzIHRvIHRoZSBTTSAqLwogCWlmIChpbl9tYWQtPm1hZF9oZHIubWV0aG9kID09IElCX01HTVRfTUVUSE9EX1RSQVAgJiYKQEAgLTIzMyw2ICsyNDAsMTIgQEAKIAkJCXJldHVybiBJQl9NQURfUkVTVUxUX1NVQ0NFU1M7CiAJfSBlbHNlCiAJCXJldHVybiBJQl9NQURfUkVTVUxUX1NVQ0NFU1M7CisJaWYgKChpbl9tYWQtPm1hZF9oZHIubWdtdF9jbGFzcyA9PSBJQl9NR01UX0NMQVNTX1NVQk5fTElEX1JPVVRFRCB8fAorCSAgICAgaW5fbWFkLT5tYWRfaGRyLm1nbXRfY2xhc3MgPT0gSUJfTUdNVF9DTEFTU19TVUJOX0RJUkVDVEVEX1JPVVRFKSAmJgorCSAgICBpbl9tYWQtPm1hZF9oZHIubWV0aG9kID09IElCX01HTVRfTUVUSE9EX1NFVCAmJgorCSAgICBpbl9tYWQtPm1hZF9oZHIuYXR0cl9pZCA9PSBJQl9TTVBfQVRUUl9QT1JUX0lORk8gJiYKKwkgICAgIWliX3F1ZXJ5X3BvcnQoaWJkZXYsIHBvcnRfbnVtLCAmcGF0dHIpKQorCQlwcmV2X2xpZCA9IHBhdHRyLmxpZDsKIAogCWVyciA9IG10aGNhX01BRF9JRkModG9fbWRldihpYmRldiksCiAJCQkgICAgbWFkX2ZsYWdzICYgSUJfTUFEX0lHTk9SRV9NS0VZLApAQCAtMjUyLDcgKzI2NSw3IEBACiAJfQogCiAJaWYgKCFvdXRfbWFkLT5tYWRfaGRyLnN0YXR1cykgewotCQlzbXBfc25vb3AoaWJkZXYsIHBvcnRfbnVtLCBpbl9tYWQpOworCQlzbXBfc25vb3AoaWJkZXYsIHBvcnRfbnVtLCBpbl9tYWQsIHByZXZfbGlkKTsKIAkJbm9kZV9kZXNjX292ZXJyaWRlKGliZGV2LCBvdXRfbWFkKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lcy5jCmluZGV4IGI5NjExYWQuLmNhNTk5NzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXMuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA4IE5ldEVmZmVjdCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAwOSBJbnRlbC1ORSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoYykgMjAwNSBPcGVuIEdyaWQgQ29tcHV0aW5nLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzLmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lcy5oCmluZGV4IDEzYTViYjEuLjA0YjEyYWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzLmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXMuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA4IE5ldEVmZmVjdCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAwOSBJbnRlbC1ORSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoYykgMjAwNSBPcGVuIEdyaWQgQ29tcHV0aW5nLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2NtLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19jbS5jCmluZGV4IDRhNjViOTYuLjUyNDI1MTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2NtLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfY20uYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA4IE5ldEVmZmVjdCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAwOSBJbnRlbC1ORSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bwogICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQpAQCAtMTAzLDYgKzEwMyw3IEBACiBzdGF0aWMgdm9pZCBuZXNfZGlzY29ubmVjdF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIAogc3RhdGljIGludCBzZW5kX21wYV9yZXF1ZXN0KHN0cnVjdCBuZXNfY21fbm9kZSAqLCBzdHJ1Y3Qgc2tfYnVmZiAqKTsKK3N0YXRpYyBpbnQgc2VuZF9tcGFfcmVqZWN0KHN0cnVjdCBuZXNfY21fbm9kZSAqKTsKIHN0YXRpYyBpbnQgc2VuZF9zeW4oc3RydWN0IG5lc19jbV9ub2RlICosIHUzMiwgc3RydWN0IHNrX2J1ZmYgKik7CiBzdGF0aWMgaW50IHNlbmRfcmVzZXQoc3RydWN0IG5lc19jbV9ub2RlICosIHN0cnVjdCBza19idWZmICopOwogc3RhdGljIGludCBzZW5kX2FjayhzdHJ1Y3QgbmVzX2NtX25vZGUgKmNtX25vZGUsIHN0cnVjdCBza19idWZmICpza2IpOwpAQCAtMTEzLDggKzExNCw3IEBACiBzdGF0aWMgdm9pZCBhY3RpdmVfb3Blbl9lcnIoc3RydWN0IG5lc19jbV9ub2RlICosIHN0cnVjdCBza19idWZmICosIGludCk7CiBzdGF0aWMgdm9pZCBwYXNzaXZlX29wZW5fZXJyKHN0cnVjdCBuZXNfY21fbm9kZSAqLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBpbnQpOwogc3RhdGljIHZvaWQgY2xlYW51cF9yZXRyYW5zX2VudHJ5KHN0cnVjdCBuZXNfY21fbm9kZSAqKTsKLXN0YXRpYyB2b2lkIGhhbmRsZV9yY3ZfbXBhKHN0cnVjdCBuZXNfY21fbm9kZSAqLCBzdHJ1Y3Qgc2tfYnVmZiAqLAotCWVudW0gbmVzX2NtX2V2ZW50X3R5cGUpOworc3RhdGljIHZvaWQgaGFuZGxlX3Jjdl9tcGEoc3RydWN0IG5lc19jbV9ub2RlICosIHN0cnVjdCBza19idWZmICopOwogc3RhdGljIHZvaWQgZnJlZV9yZXRyYW5zX2VudHJ5KHN0cnVjdCBuZXNfY21fbm9kZSAqY21fbm9kZSk7CiBzdGF0aWMgaW50IGhhbmRsZV90Y3Bfb3B0aW9ucyhzdHJ1Y3QgbmVzX2NtX25vZGUgKmNtX25vZGUsIHN0cnVjdCB0Y3BoZHIgKnRjcGgsCiAJc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9wdGlvbnNpemUsIGludCBwYXNzaXZlKTsKQEAgLTEyNCw2ICsxMjQsOCBAQAogc3RhdGljIHZvaWQgY21fZXZlbnRfY29ubmVjdF9lcnJvcihzdHJ1Y3QgbmVzX2NtX2V2ZW50ICopOwogc3RhdGljIHZvaWQgY21fZXZlbnRfcmVzZXQoc3RydWN0IG5lc19jbV9ldmVudCAqKTsKIHN0YXRpYyB2b2lkIGNtX2V2ZW50X21wYV9yZXEoc3RydWN0IG5lc19jbV9ldmVudCAqKTsKK3N0YXRpYyB2b2lkIGNtX2V2ZW50X21wYV9yZWplY3Qoc3RydWN0IG5lc19jbV9ldmVudCAqKTsKK3N0YXRpYyB2b2lkIGhhbmRsZV9yZWN2X2VudHJ5KHN0cnVjdCBuZXNfY21fbm9kZSAqY21fbm9kZSwgdTMyIHJlbV9ub2RlKTsKIAogc3RhdGljIHZvaWQgcHJpbnRfY29yZShzdHJ1Y3QgbmVzX2NtX2NvcmUgKmNvcmUpOwogCkBAIC0xOTYsNyArMTk4LDYgQEAKICAqLwogc3RhdGljIGludCBzZW5kX21wYV9yZXF1ZXN0KHN0cnVjdCBuZXNfY21fbm9kZSAqY21fbm9kZSwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlpbnQgcmV0OwogCWlmICghc2tiKSB7CiAJCW5lc19kZWJ1ZyhORVNfREJHX0NNLCAic2tiIHNldCB0byBOVUxMXG4iKTsKIAkJcmV0dXJuIC0xOwpAQCAtMjA2LDExICsyMDcsMjcgQEAKIAlmb3JtX2NtX2ZyYW1lKHNrYiwgY21fbm9kZSwgTlVMTCwgMCwgJmNtX25vZGUtPm1wYV9mcmFtZSwKIAkJCWNtX25vZGUtPm1wYV9mcmFtZV9zaXplLCBTRVRfQUNLKTsKIAotCXJldCA9IHNjaGVkdWxlX25lc190aW1lcihjbV9ub2RlLCBza2IsIE5FU19USU1FUl9UWVBFX1NFTkQsIDEsIDApOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OworCXJldHVybiBzY2hlZHVsZV9uZXNfdGltZXIoY21fbm9kZSwgc2tiLCBORVNfVElNRVJfVFlQRV9TRU5ELCAxLCAwKTsKK30KIAotCXJldHVybiAwOworCisKK3N0YXRpYyBpbnQgc2VuZF9tcGFfcmVqZWN0KHN0cnVjdCBuZXNfY21fbm9kZSAqY21fbm9kZSkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAgKnNrYiA9IE5VTEw7CisKKwlza2IgPSBkZXZfYWxsb2Nfc2tiKE1BWF9DTV9CVUZGRVIpOworCWlmICghc2tiKSB7CisJCW5lc19kZWJ1ZyhORVNfREJHX0NNLCAiRmFpbGVkIHRvIGdldCBhIEZyZWUgcGt0XG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogc2VuZCBhbiBNUEEgcmVqZWN0IGZyYW1lICovCisJZm9ybV9jbV9mcmFtZShza2IsIGNtX25vZGUsIE5VTEwsIDAsICZjbV9ub2RlLT5tcGFfZnJhbWUsCisJCQljbV9ub2RlLT5tcGFfZnJhbWVfc2l6ZSwgU0VUX0FDSyB8IFNFVF9GSU4pOworCisJY21fbm9kZS0+c3RhdGUgPSBORVNfQ01fU1RBVEVfRklOX1dBSVQxOworCXJldHVybiBzY2hlZHVsZV9uZXNfdGltZXIoY21fbm9kZSwgc2tiLCBORVNfVElNRVJfVFlQRV9TRU5ELCAxLCAwKTsKIH0KIAogCkBAIC0yMTgsMTQgKzIzNSwxNyBAQAogICogcmVjdl9tcGEgLSBwcm9jZXNzIGEgcmVjZWl2ZWQgVENQIHBrdCwgd2UgYXJlIGV4cGVjdGluZyBhbgogICogSUVURiBNUEEgZnJhbWUKICAqLwotc3RhdGljIGludCBwYXJzZV9tcGEoc3RydWN0IG5lc19jbV9ub2RlICpjbV9ub2RlLCB1OCAqYnVmZmVyLCB1MzIgbGVuKQorc3RhdGljIGludCBwYXJzZV9tcGEoc3RydWN0IG5lc19jbV9ub2RlICpjbV9ub2RlLCB1OCAqYnVmZmVyLCB1MzIgKnR5cGUsCisJCXUzMiBsZW4pCiB7CiAJc3RydWN0IGlldGZfbXBhX2ZyYW1lICptcGFfZnJhbWU7CiAKKwkqdHlwZSA9IE5FU19NUEFfUkVRVUVTVF9BQ0NFUFQ7CisKIAkvKiBhc3N1bWUgcmVxIGZyYW1lIGlzIGluIHRjcCBkYXRhIHBheWxvYWQgKi8KIAlpZiAobGVuIDwgc2l6ZW9mKHN0cnVjdCBpZXRmX21wYV9mcmFtZSkpIHsKIAkJbmVzX2RlYnVnKE5FU19EQkdfQ00sICJUaGUgcmVjZWl2ZWQgaWV0ZiBidWZmZXIgd2FzIHRvbyBzbWFsbCAoJXgpXG4iLCBsZW4pOwotCQlyZXR1cm4gLTE7CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCW1wYV9mcmFtZSA9IChzdHJ1Y3QgaWV0Zl9tcGFfZnJhbWUgKilidWZmZXI7CkBAIC0yMzQsMTQgKzI1NCwyNSBAQAogCWlmIChjbV9ub2RlLT5tcGFfZnJhbWVfc2l6ZSArIHNpemVvZihzdHJ1Y3QgaWV0Zl9tcGFfZnJhbWUpICE9IGxlbikgewogCQluZXNfZGVidWcoTkVTX0RCR19DTSwgIlRoZSByZWNlaXZlZCBpZXRmIGJ1ZmZlciB3YXMgbm90IHJpZ2h0IgogCQkJCSIgY29tcGxldGUgKCV4ICsgJXggIT0gJXgpXG4iLAotCQkJCWNtX25vZGUtPm1wYV9mcmFtZV9zaXplLCAodTMyKXNpemVvZihzdHJ1Y3QgaWV0Zl9tcGFfZnJhbWUpLCBsZW4pOwotCQlyZXR1cm4gLTE7CisJCQkJY21fbm9kZS0+bXBhX2ZyYW1lX3NpemUsCisJCQkJKHUzMilzaXplb2Yoc3RydWN0IGlldGZfbXBhX2ZyYW1lKSwgbGVuKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCS8qIG1ha2Ugc3VyZSBpdCBkb2VzIG5vdCBleGNlZWQgdGhlIG1heCBzaXplICovCisJaWYgKGxlbiA+IE1BWF9DTV9CVUZGRVIpIHsKKwkJbmVzX2RlYnVnKE5FU19EQkdfQ00sICJUaGUgcmVjZWl2ZWQgaWV0ZiBidWZmZXIgd2FzIHRvbyBsYXJnZSIKKwkJCQkiICgleCArICV4ICE9ICV4KVxuIiwKKwkJCQljbV9ub2RlLT5tcGFfZnJhbWVfc2l6ZSwKKwkJCQkodTMyKXNpemVvZihzdHJ1Y3QgaWV0Zl9tcGFfZnJhbWUpLCBsZW4pOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAkvKiBjb3B5IGVudGlyZSBNUEEgZnJhbWUgdG8gb3VyIGNtX25vZGUncyBmcmFtZSAqLwogCW1lbWNweShjbV9ub2RlLT5tcGFfZnJhbWVfYnVmLCBidWZmZXIgKyBzaXplb2Yoc3RydWN0IGlldGZfbXBhX2ZyYW1lKSwKIAkJCWNtX25vZGUtPm1wYV9mcmFtZV9zaXplKTsKIAorCWlmIChtcGFfZnJhbWUtPmZsYWdzICYgSUVURl9NUEFfRkxBR1NfUkVKRUNUKQorCQkqdHlwZSA9IE5FU19NUEFfUkVRVUVTVF9SRUpFQ1Q7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM4MCw3ICs0MTEsNyBAQAogCiAJbmV3X3NlbmQgPSBremFsbG9jKHNpemVvZigqbmV3X3NlbmQpLCBHRlBfQVRPTUlDKTsKIAlpZiAoIW5ld19zZW5kKQotCQlyZXR1cm4gLTE7CisJCXJldHVybiAtRU5PTUVNOwogCiAJLyogbmV3X3NlbmQtPnRpbWV0b3NlbmQgPSBjdXJyZW50dGltZSAqLwogCW5ld19zZW5kLT5yZXRyeWNvdW50ID0gTkVTX0RFRkFVTFRfUkVUUllTOwpAQCAtMzk0LDkgKzQyNSwxMSBAQAogCiAJaWYgKHR5cGUgPT0gTkVTX1RJTUVSX1RZUEVfQ0xPU0UpIHsKIAkJbmV3X3NlbmQtPnRpbWV0b3NlbmQgKz0gKEhaLzEwKTsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNtX25vZGUtPnJlY3ZfbGlzdF9sb2NrLCBmbGFncyk7Ci0JCWxpc3RfYWRkX3RhaWwoJm5ld19zZW5kLT5saXN0LCAmY21fbm9kZS0+cmVjdl9saXN0KTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY21fbm9kZS0+cmVjdl9saXN0X2xvY2ssIGZsYWdzKTsKKwkJaWYgKGNtX25vZGUtPnJlY3ZfZW50cnkpIHsKKwkJCVdBUk5fT04oMSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQljbV9ub2RlLT5yZWN2X2VudHJ5ID0gbmV3X3NlbmQ7CiAJfQogCiAJaWYgKHR5cGUgPT0gTkVTX1RJTUVSX1RZUEVfU0VORCkgewpAQCAtNDM1LDI0ICs0NjgsNzggQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgdm9pZCBuZXNfcmV0cmFuc19leHBpcmVkKHN0cnVjdCBuZXNfY21fbm9kZSAqY21fbm9kZSkKK3sKKwlzd2l0Y2ggKGNtX25vZGUtPnN0YXRlKSB7CisJY2FzZSBORVNfQ01fU1RBVEVfU1lOX1JDVkQ6CisJY2FzZSBORVNfQ01fU1RBVEVfQ0xPU0lORzoKKwkJcmVtX3JlZl9jbV9ub2RlKGNtX25vZGUtPmNtX2NvcmUsIGNtX25vZGUpOworCQlicmVhazsKKwljYXNlIE5FU19DTV9TVEFURV9MQVNUX0FDSzoKKwljYXNlIE5FU19DTV9TVEFURV9GSU5fV0FJVDE6CisJY2FzZSBORVNfQ01fU1RBVEVfTVBBUkVKX1JDVkQ6CisJCXNlbmRfcmVzZXQoY21fbm9kZSwgTlVMTCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWNyZWF0ZV9ldmVudChjbV9ub2RlLCBORVNfQ01fRVZFTlRfQUJPUlRFRCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfcmVjdl9lbnRyeShzdHJ1Y3QgbmVzX2NtX25vZGUgKmNtX25vZGUsIHUzMiByZW1fbm9kZSkKK3sKKwlzdHJ1Y3QgbmVzX3RpbWVyX2VudHJ5ICpyZWN2X2VudHJ5ID0gY21fbm9kZS0+cmVjdl9lbnRyeTsKKwlzdHJ1Y3QgaXdfY21faWQgKmNtX2lkID0gY21fbm9kZS0+Y21faWQ7CisJc3RydWN0IG5lc19xcCAqbmVzcXA7CisJdW5zaWduZWQgbG9uZyBxcGxvY2tmbGFnczsKKworCWlmICghcmVjdl9lbnRyeSkKKwkJcmV0dXJuOworCW5lc3FwID0gKHN0cnVjdCBuZXNfcXAgKilyZWN2X2VudHJ5LT5za2I7CisJaWYgKG5lc3FwKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZuZXNxcC0+bG9jaywgcXBsb2NrZmxhZ3MpOworCQlpZiAobmVzcXAtPmNtX2lkKSB7CisJCQluZXNfZGVidWcoTkVTX0RCR19DTSwgIlFQJXU6IGNtX2lkID0gJXAsICIKKwkJCQkicmVmY291bnQgPSAlZDogSElUIEEgIgorCQkJCSJORVNfVElNRVJfVFlQRV9DTE9TRSB3aXRoIHNvbWV0aGluZyAiCisJCQkJInRvIGRvISEhXG4iLCBuZXNxcC0+aHdxcC5xcF9pZCwgY21faWQsCisJCQkJYXRvbWljX3JlYWQoJm5lc3FwLT5yZWZjb3VudCkpOworCQkJbmVzcXAtPmh3X3RjcF9zdGF0ZSA9IE5FU19BRVFFX1RDUF9TVEFURV9DTE9TRUQ7CisJCQluZXNxcC0+bGFzdF9hZXEgPSBORVNfQUVRRV9BRUlEX1JFU0VUX1NFTlQ7CisJCQluZXNxcC0+aWJxcF9zdGF0ZSA9IElCX1FQU19FUlI7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXNxcC0+bG9jaywgcXBsb2NrZmxhZ3MpOworCQkJbmVzX2NtX2Rpc2Nvbm4obmVzcXApOworCQl9IGVsc2UgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzcXAtPmxvY2ssIHFwbG9ja2ZsYWdzKTsKKwkJCW5lc19kZWJ1ZyhORVNfREJHX0NNLCAiUVAldTogY21faWQgPSAlcCwgIgorCQkJCSJyZWZjb3VudCA9ICVkOiBISVQgQSAiCisJCQkJIk5FU19USU1FUl9UWVBFX0NMT1NFIHdpdGggbm90aGluZyAiCisJCQkJInRvIGRvISEhXG4iLCBuZXNxcC0+aHdxcC5xcF9pZCwgY21faWQsCisJCQkJYXRvbWljX3JlYWQoJm5lc3FwLT5yZWZjb3VudCkpOworCQl9CisJfSBlbHNlIGlmIChyZW1fbm9kZSkgeworCQkvKiBUSU1FX1dBSVQgc3RhdGUgKi8KKwkJcmVtX3JlZl9jbV9ub2RlKGNtX25vZGUtPmNtX2NvcmUsIGNtX25vZGUpOworCX0KKwlpZiAoY21fbm9kZS0+Y21faWQpCisJCWNtX2lkLT5yZW1fcmVmKGNtX2lkKTsKKwlrZnJlZShyZWN2X2VudHJ5KTsKKwljbV9ub2RlLT5yZWN2X2VudHJ5ID0gTlVMTDsKK30KIAogLyoqCiAgKiBuZXNfY21fdGltZXJfdGljawogICovCiBzdGF0aWMgdm9pZCBuZXNfY21fdGltZXJfdGljayh1bnNpZ25lZCBsb25nIHBhc3MpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFncywgcXBsb2NrZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBsb25nIG5leHR0aW1lb3V0ID0gamlmZmllcyArIE5FU19MT05HX1RJTUU7Ci0Jc3RydWN0IGl3X2NtX2lkICpjbV9pZDsKIAlzdHJ1Y3QgbmVzX2NtX25vZGUgKmNtX25vZGU7CiAJc3RydWN0IG5lc190aW1lcl9lbnRyeSAqc2VuZF9lbnRyeSwgKnJlY3ZfZW50cnk7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqbGlzdF9jb3JlLCAqbGlzdF9jb3JlX3RlbXA7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqbGlzdF9ub2RlLCAqbGlzdF9ub2RlX3RlbXA7CisJc3RydWN0IGxpc3RfaGVhZCAqbGlzdF9jb3JlX3RlbXA7CisJc3RydWN0IGxpc3RfaGVhZCAqbGlzdF9ub2RlOwogCXN0cnVjdCBuZXNfY21fY29yZSAqY21fY29yZSA9IGdfY21fY29yZTsKLQlzdHJ1Y3QgbmVzX3FwICpuZXNxcDsKIAl1MzIgc2V0dGltZXIgPSAwOwogCWludCByZXQgPSBORVRERVZfVFhfT0s7Ci0JZW51bSBuZXNfY21fbm9kZV9zdGF0ZSBsYXN0X3N0YXRlOwogCiAJc3RydWN0IGxpc3RfaGVhZCB0aW1lcl9saXN0OwogCUlOSVRfTElTVF9IRUFEKCZ0aW1lcl9saXN0KTsKQEAgLTQ2MSw3ICs1NDgsNyBAQAogCWxpc3RfZm9yX2VhY2hfc2FmZShsaXN0X25vZGUsIGxpc3RfY29yZV90ZW1wLAogCQkJCSZjbV9jb3JlLT5jb25uZWN0ZWRfbm9kZXMpIHsKIAkJY21fbm9kZSA9IGNvbnRhaW5lcl9vZihsaXN0X25vZGUsIHN0cnVjdCBuZXNfY21fbm9kZSwgbGlzdCk7Ci0JCWlmICghbGlzdF9lbXB0eSgmY21fbm9kZS0+cmVjdl9saXN0KSB8fCAoY21fbm9kZS0+c2VuZF9lbnRyeSkpIHsKKwkJaWYgKChjbV9ub2RlLT5yZWN2X2VudHJ5KSB8fCAoY21fbm9kZS0+c2VuZF9lbnRyeSkpIHsKIAkJCWFkZF9yZWZfY21fbm9kZShjbV9ub2RlKTsKIAkJCWxpc3RfYWRkKCZjbV9ub2RlLT50aW1lcl9lbnRyeSwgJnRpbWVyX2xpc3QpOwogCQl9CkBAIC00NzEsNTQgKzU1OCwxOCBAQAogCWxpc3RfZm9yX2VhY2hfc2FmZShsaXN0X25vZGUsIGxpc3RfY29yZV90ZW1wLCAmdGltZXJfbGlzdCkgewogCQljbV9ub2RlID0gY29udGFpbmVyX29mKGxpc3Rfbm9kZSwgc3RydWN0IG5lc19jbV9ub2RlLAogCQkJCQl0aW1lcl9lbnRyeSk7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZjbV9ub2RlLT5yZWN2X2xpc3RfbG9jaywgZmxhZ3MpOwotCQlsaXN0X2Zvcl9lYWNoX3NhZmUobGlzdF9jb3JlLCBsaXN0X25vZGVfdGVtcCwKLQkJCSZjbV9ub2RlLT5yZWN2X2xpc3QpIHsKLQkJCXJlY3ZfZW50cnkgPSBjb250YWluZXJfb2YobGlzdF9jb3JlLAotCQkJCXN0cnVjdCBuZXNfdGltZXJfZW50cnksIGxpc3QpOwotCQkJaWYgKCFyZWN2X2VudHJ5KQotCQkJCWJyZWFrOworCQlyZWN2X2VudHJ5ID0gY21fbm9kZS0+cmVjdl9lbnRyeTsKKworCQlpZiAocmVjdl9lbnRyeSkgewogCQkJaWYgKHRpbWVfYWZ0ZXIocmVjdl9lbnRyeS0+dGltZXRvc2VuZCwgamlmZmllcykpIHsKIAkJCQlpZiAobmV4dHRpbWVvdXQgPiByZWN2X2VudHJ5LT50aW1ldG9zZW5kIHx8Ci0JCQkJCSFzZXR0aW1lcikgeworCQkJCQkJIXNldHRpbWVyKSB7CiAJCQkJCW5leHR0aW1lb3V0ID0gcmVjdl9lbnRyeS0+dGltZXRvc2VuZDsKIAkJCQkJc2V0dGltZXIgPSAxOwogCQkJCX0KLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCWxpc3RfZGVsKCZyZWN2X2VudHJ5LT5saXN0KTsKLQkJCWNtX2lkID0gY21fbm9kZS0+Y21faWQ7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbV9ub2RlLT5yZWN2X2xpc3RfbG9jaywgZmxhZ3MpOwotCQkJbmVzcXAgPSAoc3RydWN0IG5lc19xcCAqKXJlY3ZfZW50cnktPnNrYjsKLQkJCXNwaW5fbG9ja19pcnFzYXZlKCZuZXNxcC0+bG9jaywgcXBsb2NrZmxhZ3MpOwotCQkJaWYgKG5lc3FwLT5jbV9pZCkgewotCQkJCW5lc19kZWJ1ZyhORVNfREJHX0NNLCAiUVAldTogY21faWQgPSAlcCwgIgotCQkJCQkicmVmY291bnQgPSAlZDogSElUIEEgIgotCQkJCQkiTkVTX1RJTUVSX1RZUEVfQ0xPU0Ugd2l0aCBzb21ldGhpbmcgIgotCQkJCQkidG8gZG8hISFcbiIsIG5lc3FwLT5od3FwLnFwX2lkLCBjbV9pZCwKLQkJCQkJYXRvbWljX3JlYWQoJm5lc3FwLT5yZWZjb3VudCkpOwotCQkJCW5lc3FwLT5od190Y3Bfc3RhdGUgPSBORVNfQUVRRV9UQ1BfU1RBVEVfQ0xPU0VEOwotCQkJCW5lc3FwLT5sYXN0X2FlcSA9IE5FU19BRVFFX0FFSURfUkVTRVRfU0VOVDsKLQkJCQluZXNxcC0+aWJxcF9zdGF0ZSA9IElCX1FQU19FUlI7Ci0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzcXAtPmxvY2ssCi0JCQkJCXFwbG9ja2ZsYWdzKTsKLQkJCQluZXNfY21fZGlzY29ubihuZXNxcCk7Ci0JCQl9IGVsc2UgewotCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5lc3FwLT5sb2NrLAotCQkJCQlxcGxvY2tmbGFncyk7Ci0JCQkJbmVzX2RlYnVnKE5FU19EQkdfQ00sICJRUCV1OiBjbV9pZCA9ICVwLCAiCi0JCQkJCSJyZWZjb3VudCA9ICVkOiBISVQgQSAiCi0JCQkJCSJORVNfVElNRVJfVFlQRV9DTE9TRSB3aXRoIG5vdGhpbmcgIgotCQkJCQkidG8gZG8hISFcbiIsIG5lc3FwLT5od3FwLnFwX2lkLCBjbV9pZCwKLQkJCQkJYXRvbWljX3JlYWQoJm5lc3FwLT5yZWZjb3VudCkpOwotCQkJfQotCQkJaWYgKGNtX2lkKQotCQkJCWNtX2lkLT5yZW1fcmVmKGNtX2lkKTsKLQotCQkJa2ZyZWUocmVjdl9lbnRyeSk7Ci0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmY21fbm9kZS0+cmVjdl9saXN0X2xvY2ssIGZsYWdzKTsKKwkJCX0gZWxzZQorCQkJCWhhbmRsZV9yZWN2X2VudHJ5KGNtX25vZGUsIDEpOwogCQl9Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNtX25vZGUtPnJlY3ZfbGlzdF9sb2NrLCBmbGFncyk7CiAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmNtX25vZGUtPnJldHJhbnNfbGlzdF9sb2NrLCBmbGFncyk7CiAJCWRvIHsKQEAgLTUzMywxMiArNTg0LDExIEBACiAJCQkJCQluZXh0dGltZW91dCA9CiAJCQkJCQkJc2VuZF9lbnRyeS0+dGltZXRvc2VuZDsKIAkJCQkJCXNldHRpbWVyID0gMTsKLQkJCQkJCWJyZWFrOwogCQkJCQl9CiAJCQkJfSBlbHNlIHsKIAkJCQkJZnJlZV9yZXRyYW5zX2VudHJ5KGNtX25vZGUpOwotCQkJCQlicmVhazsKIAkJCQl9CisJCQkJYnJlYWs7CiAJCQl9CiAKIAkJCWlmICgoY21fbm9kZS0+c3RhdGUgPT0gTkVTX0NNX1NUQVRFX1RTQSkgfHwKQEAgLTU1MCwxNiArNjAwLDEyIEBACiAJCQlpZiAoIXNlbmRfZW50cnktPnJldHJhbnNjb3VudCB8fAogCQkJCSFzZW5kX2VudHJ5LT5yZXRyeWNvdW50KSB7CiAJCQkJY21fcGFja2V0c19kcm9wcGVkKys7Ci0JCQkJbGFzdF9zdGF0ZSA9IGNtX25vZGUtPnN0YXRlOwotCQkJCWNtX25vZGUtPnN0YXRlID0gTkVTX0NNX1NUQVRFX0NMT1NFRDsKIAkJCQlmcmVlX3JldHJhbnNfZW50cnkoY21fbm9kZSk7CisKIAkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKAogCQkJCQkmY21fbm9kZS0+cmV0cmFuc19saXN0X2xvY2ssIGZsYWdzKTsKLQkJCQlpZiAobGFzdF9zdGF0ZSA9PSBORVNfQ01fU1RBVEVfU1lOX1JDVkQpCi0JCQkJCXJlbV9yZWZfY21fbm9kZShjbV9jb3JlLCBjbV9ub2RlKTsKLQkJCQllbHNlCi0JCQkJCWNyZWF0ZV9ldmVudChjbV9ub2RlLAotCQkJCQkJTkVTX0NNX0VWRU5UX0FCT1JURUQpOworCQkJCW5lc19yZXRyYW5zX2V4cGlyZWQoY21fbm9kZSk7CisJCQkJY21fbm9kZS0+c3RhdGUgPSBORVNfQ01fU1RBVEVfQ0xPU0VEOwogCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZjbV9ub2RlLT5yZXRyYW5zX2xpc3RfbG9jaywKIAkJCQkJZmxhZ3MpOwogCQkJCWJyZWFrOwpAQCAtNzE0LDcgKzc2MCw3IEBACiAJCXNrYiA9IGRldl9hbGxvY19za2IoTUFYX0NNX0JVRkZFUik7CiAJaWYgKCFza2IpIHsKIAkJbmVzX2RlYnVnKE5FU19EQkdfQ00sICJGYWlsZWQgdG8gZ2V0IGEgRnJlZSBwa3RcbiIpOwotCQlyZXR1cm4gLTE7CisJCXJldHVybiAtRU5PTUVNOwogCX0KIAogCWZvcm1fY21fZnJhbWUoc2tiLCBjbV9ub2RlLCBOVUxMLCAwLCBOVUxMLCAwLCBmbGFncyk7CkBAIC03NzgsMTQgKzgyNCwxMCBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGxpc3RfaGVhZCAqaHRlOwogCXN0cnVjdCBuZXNfY21fbm9kZSAqY21fbm9kZTsKLQlfX2JlMzIgdG1wX2FkZHIgPSBjcHVfdG9fYmUzMihsb2NfYWRkcik7CiAKIAkvKiBnZXQgYSBoYW5kbGUgb24gdGhlIGh0ZSAqLwogCWh0ZSA9ICZjbV9jb3JlLT5jb25uZWN0ZWRfbm9kZXM7CiAKLQluZXNfZGVidWcoTkVTX0RCR19DTSwgIlNlYXJjaGluZyBmb3IgYW4gb3duZXIgbm9kZTogJXBJNDoleCBmcm9tIGNvcmUgJXAtPiVwXG4iLAotCQkgICZ0bXBfYWRkciwgbG9jX3BvcnQsIGNtX2NvcmUsIGh0ZSk7Ci0KIAkvKiB3YWxrIGxpc3QgYW5kIGZpbmQgY21fbm9kZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBzZXNzaW9uIElEICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNtX2NvcmUtPmh0X2xvY2ssIGZsYWdzKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNtX25vZGUsIGh0ZSwgbGlzdCkgewpAQCAtODc1LDcgKzkxNyw4IEBACiBzdGF0aWMgaW50IG1pbmlfY21fZGVjX3JlZmNudF9saXN0ZW4oc3RydWN0IG5lc19jbV9jb3JlICpjbV9jb3JlLAogCXN0cnVjdCBuZXNfY21fbGlzdGVuZXIgKmxpc3RlbmVyLCBpbnQgZnJlZV9oYW5naW5nX25vZGVzKQogewotCWludCByZXQgPSAxOworCWludCByZXQgPSAtRUlOVkFMOworCWludCBlcnIgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGxpc3RfaGVhZCAqbGlzdF9wb3MgPSBOVUxMOwogCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3RfdGVtcCA9IE5VTEw7CkBAIC05MDQsMTAgKzk0Nyw2MCBAQAogCiAJbGlzdF9mb3JfZWFjaF9zYWZlKGxpc3RfcG9zLCBsaXN0X3RlbXAsICZyZXNldF9saXN0KSB7CiAJCWNtX25vZGUgPSBjb250YWluZXJfb2YobGlzdF9wb3MsIHN0cnVjdCBuZXNfY21fbm9kZSwKLQkJCQkJcmVzZXRfZW50cnkpOwotCQljbGVhbnVwX3JldHJhbnNfZW50cnkoY21fbm9kZSk7Ci0JCXNlbmRfcmVzZXQoY21fbm9kZSwgTlVMTCk7Ci0JCXJlbV9yZWZfY21fbm9kZShjbV9ub2RlLT5jbV9jb3JlLCBjbV9ub2RlKTsKKwkJCQlyZXNldF9lbnRyeSk7CisJCXsKKwkJCXN0cnVjdCBuZXNfY21fbm9kZSAqbG9vcGJhY2sgPSBjbV9ub2RlLT5sb29wYmFja3BhcnRuZXI7CisJCQlpZiAoTkVTX0NNX1NUQVRFX0ZJTl9XQUlUMSA8PSBjbV9ub2RlLT5zdGF0ZSkgeworCQkJCXJlbV9yZWZfY21fbm9kZShjbV9ub2RlLT5jbV9jb3JlLCBjbV9ub2RlKTsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKCFsb29wYmFjaykgeworCQkJCQljbGVhbnVwX3JldHJhbnNfZW50cnkoY21fbm9kZSk7CisJCQkJCWVyciA9IHNlbmRfcmVzZXQoY21fbm9kZSwgTlVMTCk7CisJCQkJCWlmIChlcnIpIHsKKwkJCQkJCWNtX25vZGUtPnN0YXRlID0KKwkJCQkJCQkgTkVTX0NNX1NUQVRFX0NMT1NFRDsKKwkJCQkJCVdBUk5fT04oMSk7CisJCQkJCX0gZWxzZSB7CisJCQkJCQljbV9ub2RlLT5zdGF0ZSA9CisJCQkJCQkJTkVTX0NNX1NUQVRFX0NMT1NFRDsKKwkJCQkJCXJlbV9yZWZfY21fbm9kZSgKKwkJCQkJCQljbV9ub2RlLT5jbV9jb3JlLAorCQkJCQkJCWNtX25vZGUpOworCQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJCQkJc3RydWN0IG5lc19jbV9ldmVudCBldmVudDsKKworCQkJCQlldmVudC5jbV9ub2RlID0gbG9vcGJhY2s7CisJCQkJCWV2ZW50LmNtX2luZm8ucmVtX2FkZHIgPQorCQkJCQkJCWxvb3BiYWNrLT5yZW1fYWRkcjsKKwkJCQkJZXZlbnQuY21faW5mby5sb2NfYWRkciA9CisJCQkJCQkJbG9vcGJhY2stPmxvY19hZGRyOworCQkJCQlldmVudC5jbV9pbmZvLnJlbV9wb3J0ID0KKwkJCQkJCQlsb29wYmFjay0+cmVtX3BvcnQ7CisJCQkJCWV2ZW50LmNtX2luZm8ubG9jX3BvcnQgPQorCQkJCQkJCSBsb29wYmFjay0+bG9jX3BvcnQ7CisJCQkJCWV2ZW50LmNtX2luZm8uY21faWQgPSBsb29wYmFjay0+Y21faWQ7CisJCQkJCWNtX2V2ZW50X2Nvbm5lY3RfZXJyb3IoJmV2ZW50KTsKKwkJCQkJbG9vcGJhY2stPnN0YXRlID0gTkVTX0NNX1NUQVRFX0NMT1NFRDsKKworCQkJCQlldmVudC5jbV9ub2RlID0gY21fbm9kZTsKKwkJCQkJZXZlbnQuY21faW5mby5yZW1fYWRkciA9CisJCQkJCQkJIGNtX25vZGUtPnJlbV9hZGRyOworCQkJCQlldmVudC5jbV9pbmZvLmxvY19hZGRyID0KKwkJCQkJCQkgY21fbm9kZS0+bG9jX2FkZHI7CisJCQkJCWV2ZW50LmNtX2luZm8ucmVtX3BvcnQgPQorCQkJCQkJCSBjbV9ub2RlLT5yZW1fcG9ydDsKKwkJCQkJZXZlbnQuY21faW5mby5sb2NfcG9ydCA9CisJCQkJCQkJIGNtX25vZGUtPmxvY19wb3J0OworCQkJCQlldmVudC5jbV9pbmZvLmNtX2lkID0gY21fbm9kZS0+Y21faWQ7CisJCQkJCWNtX2V2ZW50X3Jlc2V0KCZldmVudCk7CisKKwkJCQkJcmVtX3JlZl9jbV9ub2RlKGNtX25vZGUtPmNtX2NvcmUsCisJCQkJCQkJIGNtX25vZGUpOworCisJCQkJfQorCQkJfQorCQl9CiAJfQogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNtX2NvcmUtPmxpc3Rlbl9saXN0X2xvY2ssIGZsYWdzKTsKQEAgLTk2OCw2ICsxMDYxLDcgQEAKIAlpZiAoY21fbm9kZS0+YWNjZXB0X3BlbmQpIHsKIAkJQlVHX09OKCFjbV9ub2RlLT5saXN0ZW5lcik7CiAJCWF0b21pY19kZWMoJmNtX25vZGUtPmxpc3RlbmVyLT5wZW5kX2FjY2VwdHNfY250KTsKKwkJY21fbm9kZS0+YWNjZXB0X3BlbmQgPSAwOwogCQlCVUdfT04oYXRvbWljX3JlYWQoJmNtX25vZGUtPmxpc3RlbmVyLT5wZW5kX2FjY2VwdHNfY250KSA8IDApOwogCX0KIApAQCAtOTk0LDcgKzEwODgsNyBAQAogCW1lbXNldCgmZmwsIDAsIHNpemVvZiBmbCk7CiAJZmwubmxfdS5pcDRfdS5kYWRkciA9IGh0b25sKGRzdF9pcCk7CiAJaWYgKGlwX3JvdXRlX291dHB1dF9rZXkoJmluaXRfbmV0LCAmcnQsICZmbCkpIHsKLQkJcHJpbnRrKCIlczogaXBfcm91dGVfb3V0cHV0X2tleSBmYWlsZWQgZm9yIDB4JTA4WFxuIiwKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogaXBfcm91dGVfb3V0cHV0X2tleSBmYWlsZWQgZm9yIDB4JTA4WFxuIiwKIAkJCQlfX2Z1bmNfXywgZHN0X2lwKTsKIAkJcmV0dXJuIHJjOwogCX0KQEAgLTEwNTcsOCArMTE1MSw2IEBACiAJCQljbV9ub2RlLT5jbV9pZCk7CiAKIAlzcGluX2xvY2tfaW5pdCgmY21fbm9kZS0+cmV0cmFuc19saXN0X2xvY2spOwotCUlOSVRfTElTVF9IRUFEKCZjbV9ub2RlLT5yZWN2X2xpc3QpOwotCXNwaW5fbG9ja19pbml0KCZjbV9ub2RlLT5yZWN2X2xpc3RfbG9jayk7CiAKIAljbV9ub2RlLT5sb29wYmFja3BhcnRuZXIgPSBOVUxMOwogCWF0b21pY19zZXQoJmNtX25vZGUtPnJlZl9jb3VudCwgMSk7CkBAIC0xMTI2LDEwICsxMjE4LDcgQEAKIHN0YXRpYyBpbnQgcmVtX3JlZl9jbV9ub2RlKHN0cnVjdCBuZXNfY21fY29yZSAqY21fY29yZSwKIAlzdHJ1Y3QgbmVzX2NtX25vZGUgKmNtX25vZGUpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFncywgcXBsb2NrZmxhZ3M7Ci0Jc3RydWN0IG5lc190aW1lcl9lbnRyeSAqcmVjdl9lbnRyeTsKLQlzdHJ1Y3QgaXdfY21faWQgKmNtX2lkOwotCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3RfY29yZSwgKmxpc3Rfbm9kZV90ZW1wOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IG5lc19xcCAqbmVzcXA7CiAKIAlpZiAoIWNtX25vZGUpCkBAIC0xMTUwLDM4ICsxMjM5LDkgQEAKIAkJYXRvbWljX2RlYygmY21fbm9kZS0+bGlzdGVuZXItPnBlbmRfYWNjZXB0c19jbnQpOwogCQlCVUdfT04oYXRvbWljX3JlYWQoJmNtX25vZGUtPmxpc3RlbmVyLT5wZW5kX2FjY2VwdHNfY250KSA8IDApOwogCX0KLQlCVUdfT04oY21fbm9kZS0+c2VuZF9lbnRyeSk7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNtX25vZGUtPnJlY3ZfbGlzdF9sb2NrLCBmbGFncyk7Ci0JbGlzdF9mb3JfZWFjaF9zYWZlKGxpc3RfY29yZSwgbGlzdF9ub2RlX3RlbXAsICZjbV9ub2RlLT5yZWN2X2xpc3QpIHsKLQkJcmVjdl9lbnRyeSA9IGNvbnRhaW5lcl9vZihsaXN0X2NvcmUsIHN0cnVjdCBuZXNfdGltZXJfZW50cnksCi0JCQkJbGlzdCk7Ci0JCWxpc3RfZGVsKCZyZWN2X2VudHJ5LT5saXN0KTsKLQkJY21faWQgPSBjbV9ub2RlLT5jbV9pZDsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY21fbm9kZS0+cmVjdl9saXN0X2xvY2ssIGZsYWdzKTsKLQkJbmVzcXAgPSAoc3RydWN0IG5lc19xcCAqKXJlY3ZfZW50cnktPnNrYjsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJm5lc3FwLT5sb2NrLCBxcGxvY2tmbGFncyk7Ci0JCWlmIChuZXNxcC0+Y21faWQpIHsKLQkJCW5lc19kZWJ1ZyhORVNfREJHX0NNLCAiUVAldTogY21faWQgPSAlcDogSElUIEEgIgotCQkJCSJORVNfVElNRVJfVFlQRV9DTE9TRSB3aXRoIHNvbWV0aGluZyB0byBkbyFcbiIsCi0JCQkJbmVzcXAtPmh3cXAucXBfaWQsIGNtX2lkKTsKLQkJCW5lc3FwLT5od190Y3Bfc3RhdGUgPSBORVNfQUVRRV9UQ1BfU1RBVEVfQ0xPU0VEOwotCQkJbmVzcXAtPmxhc3RfYWVxID0gTkVTX0FFUUVfQUVJRF9SRVNFVF9TRU5UOwotCQkJbmVzcXAtPmlicXBfc3RhdGUgPSBJQl9RUFNfRVJSOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzcXAtPmxvY2ssIHFwbG9ja2ZsYWdzKTsKLQkJCW5lc19jbV9kaXNjb25uKG5lc3FwKTsKLQkJfSBlbHNlIHsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5lc3FwLT5sb2NrLCBxcGxvY2tmbGFncyk7Ci0JCQluZXNfZGVidWcoTkVTX0RCR19DTSwgIlFQJXU6IGNtX2lkID0gJXA6IEhJVCBBICIKLQkJCQkiTkVTX1RJTUVSX1RZUEVfQ0xPU0Ugd2l0aCBub3RoaW5nIHRvIGRvIVxuIiwKLQkJCQluZXNxcC0+aHdxcC5xcF9pZCwgY21faWQpOwotCQl9Ci0JCWNtX2lkLT5yZW1fcmVmKGNtX2lkKTsKLQotCQlrZnJlZShyZWN2X2VudHJ5KTsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNtX25vZGUtPnJlY3ZfbGlzdF9sb2NrLCBmbGFncyk7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNtX25vZGUtPnJlY3ZfbGlzdF9sb2NrLCBmbGFncyk7Ci0KKwlXQVJOX09OKGNtX25vZGUtPnNlbmRfZW50cnkpOworCWlmIChjbV9ub2RlLT5yZWN2X2VudHJ5KQorCQloYW5kbGVfcmVjdl9lbnRyeShjbV9ub2RlLCAwKTsKIAlpZiAoY21fbm9kZS0+bGlzdGVuZXIpIHsKIAkJbWluaV9jbV9kZWNfcmVmY250X2xpc3RlbihjbV9jb3JlLCBjbV9ub2RlLT5saXN0ZW5lciwgMCk7CiAJfSBlbHNlIHsKQEAgLTEyNjYsOCArMTMyNiw3IEBACiAJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIH0KIAotc3RhdGljIHZvaWQgaGFuZGxlX2Zpbl9wa3Qoc3RydWN0IG5lc19jbV9ub2RlICpjbV9ub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCXN0cnVjdCB0Y3BoZHIgKnRjcGgpCitzdGF0aWMgdm9pZCBoYW5kbGVfZmluX3BrdChzdHJ1Y3QgbmVzX2NtX25vZGUgKmNtX25vZGUpCiB7CiAJbmVzX2RlYnVnKE5FU19EQkdfQ00sICJSZWNlaXZlZCBGSU4sIGNtX25vZGUgPSAlcCwgc3RhdGUgPSAldS4gIgogCQkicmVmY250PSVkXG4iLCBjbV9ub2RlLCBjbV9ub2RlLT5zdGF0ZSwKQEAgLTEyNzksMjMgKzEzMzgsMzAgQEAKIAljYXNlIE5FU19DTV9TVEFURV9TWU5fU0VOVDoKIAljYXNlIE5FU19DTV9TVEFURV9FU1RBQkxJU0hFRDoKIAljYXNlIE5FU19DTV9TVEFURV9NUEFSRVFfU0VOVDoKKwljYXNlIE5FU19DTV9TVEFURV9NUEFSRUpfUkNWRDoKIAkJY21fbm9kZS0+c3RhdGUgPSBORVNfQ01fU1RBVEVfTEFTVF9BQ0s7Ci0JCXNlbmRfZmluKGNtX25vZGUsIHNrYik7CisJCXNlbmRfZmluKGNtX25vZGUsIE5VTEwpOwogCQlicmVhazsKIAljYXNlIE5FU19DTV9TVEFURV9GSU5fV0FJVDE6CiAJCWNtX25vZGUtPnN0YXRlID0gTkVTX0NNX1NUQVRFX0NMT1NJTkc7Ci0JCXNlbmRfYWNrKGNtX25vZGUsIHNrYik7CisJCXNlbmRfYWNrKGNtX25vZGUsIE5VTEwpOworCQkvKiBXYWl0IGZvciBBQ0sgYXMgdGhpcyBpcyBzaW11bHRhbm91cyBjbG9zZS4uCisJCSogQWZ0ZXIgd2UgcmVjZWl2ZSBBQ0ssIGRvIG5vdCBzZW5kIGFueXRoaW5nLi4KKwkJKiBKdXN0IHJtIHRoZSBub2RlLi4gRG9uZS4uICovCiAJCWJyZWFrOwogCWNhc2UgTkVTX0NNX1NUQVRFX0ZJTl9XQUlUMjoKIAkJY21fbm9kZS0+c3RhdGUgPSBORVNfQ01fU1RBVEVfVElNRV9XQUlUOwotCQlzZW5kX2FjayhjbV9ub2RlLCBza2IpOworCQlzZW5kX2FjayhjbV9ub2RlLCBOVUxMKTsKKwkJc2NoZWR1bGVfbmVzX3RpbWVyKGNtX25vZGUsIE5VTEwsICBORVNfVElNRVJfVFlQRV9DTE9TRSwgMSwgMCk7CisJCWJyZWFrOworCWNhc2UgTkVTX0NNX1NUQVRFX1RJTUVfV0FJVDoKIAkJY21fbm9kZS0+c3RhdGUgPSBORVNfQ01fU1RBVEVfQ0xPU0VEOworCQlyZW1fcmVmX2NtX25vZGUoY21fbm9kZS0+Y21fY29yZSwgY21fbm9kZSk7CiAJCWJyZWFrOwogCWNhc2UgTkVTX0NNX1NUQVRFX1RTQToKIAlkZWZhdWx0OgogCQluZXNfZGVidWcoTkVTX0RCR19DTSwgIkVycm9yIFJjdmQgRklOIGZvciBub2RlLSVwIHN0YXRlID0gJWRcbiIsCiAJCQljbV9ub2RlLCBjbV9ub2RlLT5zdGF0ZSk7Ci0JCWRyb3BfcGFja2V0KHNrYik7CiAJCWJyZWFrOwogCX0KIH0KQEAgLTEzNDEsMjMgKzE0MDcsMzUgQEAKIAkJY2xlYW51cF9yZXRyYW5zX2VudHJ5KGNtX25vZGUpOwogCQlkcm9wX3BhY2tldChza2IpOwogCQlicmVhazsKKwljYXNlIE5FU19DTV9TVEFURV9USU1FX1dBSVQ6CisJCWNsZWFudXBfcmV0cmFuc19lbnRyeShjbV9ub2RlKTsKKwkJY21fbm9kZS0+c3RhdGUgPSBORVNfQ01fU1RBVEVfQ0xPU0VEOworCQlyZW1fcmVmX2NtX25vZGUoY21fbm9kZS0+Y21fY29yZSwgY21fbm9kZSk7CisJCWRyb3BfcGFja2V0KHNrYik7CisJCWJyZWFrOworCWNhc2UgTkVTX0NNX1NUQVRFX0ZJTl9XQUlUMToKKwkJY2xlYW51cF9yZXRyYW5zX2VudHJ5KGNtX25vZGUpOworCQluZXNfZGVidWcoTkVTX0RCR19DTSwgIkJhZCBzdGF0ZSAlc1sldV1cbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CiAJZGVmYXVsdDoKIAkJZHJvcF9wYWNrZXQoc2tiKTsKIAkJYnJlYWs7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBoYW5kbGVfcmN2X21wYShzdHJ1Y3QgbmVzX2NtX25vZGUgKmNtX25vZGUsIHN0cnVjdCBza19idWZmICpza2IsCi0JZW51bSBuZXNfY21fZXZlbnRfdHlwZSB0eXBlKQorCitzdGF0aWMgdm9pZCBoYW5kbGVfcmN2X21wYShzdHJ1Y3QgbmVzX2NtX25vZGUgKmNtX25vZGUsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAKLQlpbnQJcmV0OworCWludAlyZXQgPSAwOwogCWludCBkYXRhc2l6ZSA9IHNrYi0+bGVuOwogCXU4ICpkYXRhbG9jID0gc2tiLT5kYXRhOwotCXJldCA9IHBhcnNlX21wYShjbV9ub2RlLCBkYXRhbG9jLCBkYXRhc2l6ZSk7Ci0JaWYgKHJldCA8IDApIHsKKworCWVudW0gbmVzX2NtX2V2ZW50X3R5cGUgdHlwZSA9IE5FU19DTV9FVkVOVF9VTktOT1dOOworCXUzMiAgICAgcmVzX3R5cGU7CisJcmV0ID0gcGFyc2VfbXBhKGNtX25vZGUsIGRhdGFsb2MsICZyZXNfdHlwZSwgZGF0YXNpemUpOworCWlmIChyZXQpIHsKIAkJbmVzX2RlYnVnKE5FU19EQkdfQ00sICJkaWRuJ3QgbGlrZSBNUEEgUmVxdWVzdFxuIik7Ci0JCWlmICh0eXBlID09IE5FU19DTV9FVkVOVF9DT05ORUNURUQpIHsKKwkJaWYgKGNtX25vZGUtPnN0YXRlID09IE5FU19DTV9TVEFURV9NUEFSRVFfU0VOVCkgewogCQkJbmVzX2RlYnVnKE5FU19EQkdfQ00sICIlc1sldV0gY3JlYXRlIGFib3J0IGZvciAiCiAJCQkJImNtX25vZGU9JXAgbGlzdGVuZXI9JXAgc3RhdGU9JWRcbiIsIF9fZnVuY19fLAogCQkJCV9fTElORV9fLCBjbV9ub2RlLCBjbV9ub2RlLT5saXN0ZW5lciwKQEAgLTEzNjYsMTggKzE0NDQsMzggQEAKIAkJfSBlbHNlIHsKIAkJCXBhc3NpdmVfb3Blbl9lcnIoY21fbm9kZSwgc2tiLCAxKTsKIAkJfQotCX0gZWxzZSB7Ci0JCWNsZWFudXBfcmV0cmFuc19lbnRyeShjbV9ub2RlKTsKLQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQkJaWYgKHR5cGUgPT0gTkVTX0NNX0VWRU5UX0NPTk5FQ1RFRCkKLQkJCWNtX25vZGUtPnN0YXRlID0gTkVTX0NNX1NUQVRFX1RTQTsKLQkJZWxzZQotCQkJYXRvbWljX3NldCgmY21fbm9kZS0+cGFzc2l2ZV9zdGF0ZSwKLQkJCQkJTkVTX1BBU1NJVkVfU1RBVEVfSU5ESUNBVEVEKTsKLQkJY3JlYXRlX2V2ZW50KGNtX25vZGUsIHR5cGUpOwotCisJCXJldHVybjsKIAl9Ci0JcmV0dXJuIDsKKworCXN3aXRjaCAoY21fbm9kZS0+c3RhdGUpIHsKKwljYXNlIE5FU19DTV9TVEFURV9FU1RBQkxJU0hFRDoKKwkJaWYgKHJlc190eXBlID09IE5FU19NUEFfUkVRVUVTVF9SRUpFQ1QpIHsKKwkJCS8qQklHIHByb2JsZW0gYXMgd2UgYXJlIHJlY2VpdmluZyB0aGUgTVBBLi4gU28gc2hvdWxkCisJCQkqIG5vdCBiZSBSRUpFQ1QuLiBUaGlzIGlzIFBhc3NpdmUgT3Blbi4uIFdlIGNhbgorCQkJKiBvbmx5IHJlY2VpdmUgaXQgUmVqZWN0IGZvciBBY3RpdmUgT3Blbi4uLiovCisJCQlXQVJOX09OKDEpOworCQl9CisJCWNtX25vZGUtPnN0YXRlID0gTkVTX0NNX1NUQVRFX01QQVJFUV9SQ1ZEOworCQl0eXBlID0gTkVTX0NNX0VWRU5UX01QQV9SRVE7CisJCWF0b21pY19zZXQoJmNtX25vZGUtPnBhc3NpdmVfc3RhdGUsCisJCQkJTkVTX1BBU1NJVkVfU1RBVEVfSU5ESUNBVEVEKTsKKwkJYnJlYWs7CisJY2FzZSBORVNfQ01fU1RBVEVfTVBBUkVRX1NFTlQ6CisJCWlmIChyZXNfdHlwZSA9PSBORVNfTVBBX1JFUVVFU1RfUkVKRUNUKSB7CisJCQl0eXBlID0gTkVTX0NNX0VWRU5UX01QQV9SRUpFQ1Q7CisJCQljbV9ub2RlLT5zdGF0ZSA9IE5FU19DTV9TVEFURV9NUEFSRUpfUkNWRDsKKwkJfSBlbHNlIHsKKwkJCXR5cGUgPSBORVNfQ01fRVZFTlRfQ09OTkVDVEVEOworCQkJY21fbm9kZS0+c3RhdGUgPSBORVNfQ01fU1RBVEVfVFNBOworCQl9CisKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJV0FSTl9PTigxKTsKKwkJYnJlYWs7CisJfQorCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJY3JlYXRlX2V2ZW50KGNtX25vZGUsIHR5cGUpOwogfQogCiBzdGF0aWMgdm9pZCBpbmRpY2F0ZV9wa3RfZXJyKHN0cnVjdCBuZXNfY21fbm9kZSAqY21fbm9kZSwgc3RydWN0IHNrX2J1ZmYgKnNrYikKQEAgLTE0NjUsOCArMTU2Myw2IEBACiAJCWJyZWFrOwogCWNhc2UgTkVTX0NNX1NUQVRFX0xJU1RFTklORzoKIAkJLyogUGFzc2l2ZSBPUEVOICovCi0JCWNtX25vZGUtPmFjY2VwdF9wZW5kID0gMTsKLQkJYXRvbWljX2luYygmY21fbm9kZS0+bGlzdGVuZXItPnBlbmRfYWNjZXB0c19jbnQpOwogCQlpZiAoYXRvbWljX3JlYWQoJmNtX25vZGUtPmxpc3RlbmVyLT5wZW5kX2FjY2VwdHNfY250KSA+CiAJCQkJY21fbm9kZS0+bGlzdGVuZXItPmJhY2tsb2cpIHsKIAkJCW5lc19kZWJ1ZyhORVNfREJHX0NNLCAiZHJvcCBzeW4gZHVlIHRvIGJhY2tsb2cgIgpAQCAtMTQ4NCw2ICsxNTgwLDkgQEAKIAkJfQogCQljbV9ub2RlLT50Y3BfY250eHQucmN2X254dCA9IGluY19zZXF1ZW5jZSArIDE7CiAJCUJVR19PTihjbV9ub2RlLT5zZW5kX2VudHJ5KTsKKwkJY21fbm9kZS0+YWNjZXB0X3BlbmQgPSAxOworCQlhdG9taWNfaW5jKCZjbV9ub2RlLT5saXN0ZW5lci0+cGVuZF9hY2NlcHRzX2NudCk7CisKIAkJY21fbm9kZS0+c3RhdGUgPSBORVNfQ01fU1RBVEVfU1lOX1JDVkQ7CiAJCXNlbmRfc3luKGNtX25vZGUsIDEsIHNrYik7CiAJCWJyZWFrOwpAQCAtMTUxOCw2ICsxNjE3LDcgQEAKIAlpbmNfc2VxdWVuY2UgPSBudG9obCh0Y3BoLT5zZXEpOwogCXN3aXRjaCAoY21fbm9kZS0+c3RhdGUpIHsKIAljYXNlIE5FU19DTV9TVEFURV9TWU5fU0VOVDoKKwkJY2xlYW51cF9yZXRyYW5zX2VudHJ5KGNtX25vZGUpOwogCQkvKiBhY3RpdmUgb3BlbiAqLwogCQlpZiAoY2hlY2tfc3luKGNtX25vZGUsIHRjcGgsIHNrYikpCiAJCQlyZXR1cm47CkBAIC0xNTY3LDEwICsxNjY3LDcgQEAKIAl1MzIgcmVtX3NlcTsKIAlpbnQgcmV0OwogCWludCBvcHRpb25zaXplOwotCXUzMiB0ZW1wX3NlcSA9IGNtX25vZGUtPnRjcF9jbnR4dC5sb2Nfc2VxX251bTsKLQogCW9wdGlvbnNpemUgPSAodGNwaC0+ZG9mZiA8PCAyKSAtIHNpemVvZihzdHJ1Y3QgdGNwaGRyKTsKLQljbV9ub2RlLT50Y3BfY250eHQubG9jX3NlcV9udW0gPSBudG9obCh0Y3BoLT5hY2tfc2VxKTsKIAogCWlmIChjaGVja19zZXEoY21fbm9kZSwgdGNwaCwgc2tiKSkKIAkJcmV0dXJuOwpAQCAtMTU4MCw3ICsxNjc3LDcgQEAKIAlyZW1fc2VxID0gbnRvaGwodGNwaC0+c2VxKTsKIAlyZW1fc2VxX2FjayA9ICBudG9obCh0Y3BoLT5hY2tfc2VxKTsKIAlkYXRhc2l6ZSA9IHNrYi0+bGVuOwotCisJY2xlYW51cF9yZXRyYW5zX2VudHJ5KGNtX25vZGUpOwogCXN3aXRjaCAoY21fbm9kZS0+c3RhdGUpIHsKIAljYXNlIE5FU19DTV9TVEFURV9TWU5fUkNWRDoKIAkJLyogUGFzc2l2ZSBPUEVOICovCkBAIC0xNTg4LDcgKzE2ODUsNiBAQAogCQlpZiAocmV0KQogCQkJYnJlYWs7CiAJCWNtX25vZGUtPnRjcF9jbnR4dC5yZW1fYWNrX251bSA9IG50b2hsKHRjcGgtPmFja19zZXEpOwotCQljbV9ub2RlLT50Y3BfY250eHQubG9jX3NlcV9udW0gPSB0ZW1wX3NlcTsKIAkJaWYgKGNtX25vZGUtPnRjcF9jbnR4dC5yZW1fYWNrX251bSAhPQogCQkgICAgY21fbm9kZS0+dGNwX2NudHh0LmxvY19zZXFfbnVtKSB7CiAJCQluZXNfZGVidWcoTkVTX0RCR19DTSwgInJlbV9hY2tfbnVtICE9IGxvY19zZXFfbnVtXG4iKTsKQEAgLTE1OTcsMzEgKzE2OTMsMzAgQEAKIAkJCXJldHVybjsKIAkJfQogCQljbV9ub2RlLT5zdGF0ZSA9IE5FU19DTV9TVEFURV9FU1RBQkxJU0hFRDsKKwkJY2xlYW51cF9yZXRyYW5zX2VudHJ5KGNtX25vZGUpOwogCQlpZiAoZGF0YXNpemUpIHsKIAkJCWNtX25vZGUtPnRjcF9jbnR4dC5yY3Zfbnh0ID0gaW5jX3NlcXVlbmNlICsgZGF0YXNpemU7Ci0JCQljbV9ub2RlLT5zdGF0ZSA9IE5FU19DTV9TVEFURV9NUEFSRVFfUkNWRDsKLQkJCWhhbmRsZV9yY3ZfbXBhKGNtX25vZGUsIHNrYiwgTkVTX0NNX0VWRU5UX01QQV9SRVEpOwotCQkgfSBlbHNlIHsgLyogcmN2ZCBBQ0sgb25seSAqLworCQkJaGFuZGxlX3Jjdl9tcGEoY21fbm9kZSwgc2tiKTsKKwkJfSBlbHNlIHsgLyogcmN2ZCBBQ0sgb25seSAqLwogCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJCWNsZWFudXBfcmV0cmFuc19lbnRyeShjbV9ub2RlKTsKIAkJIH0KIAkJYnJlYWs7CiAJY2FzZSBORVNfQ01fU1RBVEVfRVNUQUJMSVNIRUQ6CiAJCS8qIFBhc3NpdmUgT1BFTiAqLwotCQkvKiBXZSBleHBlY3QgbXBhIGZyYW1lIHRvIGJlIHJlY2VpdmVkIG9ubHkgKi8KKwkJY2xlYW51cF9yZXRyYW5zX2VudHJ5KGNtX25vZGUpOwogCQlpZiAoZGF0YXNpemUpIHsKIAkJCWNtX25vZGUtPnRjcF9jbnR4dC5yY3Zfbnh0ID0gaW5jX3NlcXVlbmNlICsgZGF0YXNpemU7Ci0JCQljbV9ub2RlLT5zdGF0ZSA9IE5FU19DTV9TVEFURV9NUEFSRVFfUkNWRDsKLQkJCWhhbmRsZV9yY3ZfbXBhKGNtX25vZGUsIHNrYiwKLQkJCQlORVNfQ01fRVZFTlRfTVBBX1JFUSk7CisJCQloYW5kbGVfcmN2X21wYShjbV9ub2RlLCBza2IpOwogCQl9IGVsc2UKIAkJCWRyb3BfcGFja2V0KHNrYik7CiAJCWJyZWFrOwogCWNhc2UgTkVTX0NNX1NUQVRFX01QQVJFUV9TRU5UOgorCQljbGVhbnVwX3JldHJhbnNfZW50cnkoY21fbm9kZSk7CiAJCWNtX25vZGUtPnRjcF9jbnR4dC5yZW1fYWNrX251bSA9IG50b2hsKHRjcGgtPmFja19zZXEpOwogCQlpZiAoZGF0YXNpemUpIHsKIAkJCWNtX25vZGUtPnRjcF9jbnR4dC5yY3Zfbnh0ID0gaW5jX3NlcXVlbmNlICsgZGF0YXNpemU7Ci0JCQloYW5kbGVfcmN2X21wYShjbV9ub2RlLCBza2IsIE5FU19DTV9FVkVOVF9DT05ORUNURUQpOworCQkJaGFuZGxlX3Jjdl9tcGEoY21fbm9kZSwgc2tiKTsKIAkJfSBlbHNlIHsgLyogQ291bGQgYmUganVzdCBhbiBhY2sgcGt0Li4gKi8KIAkJCWNsZWFudXBfcmV0cmFuc19lbnRyeShjbV9ub2RlKTsKIAkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CkBAIC0xNjMyLDEzICsxNzI3LDI0IEBACiAJCWNsZWFudXBfcmV0cmFuc19lbnRyeShjbV9ub2RlKTsKIAkJc2VuZF9yZXNldChjbV9ub2RlLCBza2IpOwogCQlicmVhazsKKwljYXNlIE5FU19DTV9TVEFURV9MQVNUX0FDSzoKKwkJY2xlYW51cF9yZXRyYW5zX2VudHJ5KGNtX25vZGUpOworCQljbV9ub2RlLT5zdGF0ZSA9IE5FU19DTV9TVEFURV9DTE9TRUQ7CisJCWNtX25vZGUtPmNtX2lkLT5yZW1fcmVmKGNtX25vZGUtPmNtX2lkKTsKKwljYXNlIE5FU19DTV9TVEFURV9DTE9TSU5HOgorCQljbGVhbnVwX3JldHJhbnNfZW50cnkoY21fbm9kZSk7CisJCXJlbV9yZWZfY21fbm9kZShjbV9ub2RlLT5jbV9jb3JlLCBjbV9ub2RlKTsKKwkJZHJvcF9wYWNrZXQoc2tiKTsKKwkJYnJlYWs7CiAJY2FzZSBORVNfQ01fU1RBVEVfRklOX1dBSVQxOgorCQljbGVhbnVwX3JldHJhbnNfZW50cnkoY21fbm9kZSk7CisJCWRyb3BfcGFja2V0KHNrYik7CisJCWNtX25vZGUtPnN0YXRlID0gTkVTX0NNX1NUQVRFX0ZJTl9XQUlUMjsKKwkJYnJlYWs7CiAJY2FzZSBORVNfQ01fU1RBVEVfU1lOX1NFTlQ6CiAJY2FzZSBORVNfQ01fU1RBVEVfRklOX1dBSVQyOgogCWNhc2UgTkVTX0NNX1NUQVRFX1RTQToKIAljYXNlIE5FU19DTV9TVEFURV9NUEFSRVFfUkNWRDoKLQljYXNlIE5FU19DTV9TVEFURV9MQVNUX0FDSzoKLQljYXNlIE5FU19DTV9TVEFURV9DTE9TSU5HOgogCWNhc2UgTkVTX0NNX1NUQVRFX1VOS05PV046CiAJZGVmYXVsdDoKIAkJZHJvcF9wYWNrZXQoc2tiKTsKQEAgLTE3NDgsNiArMTg1NCw3IEBACiB7CiAJZW51bSBuZXNfdGNwaXBfcGt0X3R5cGUJcGt0X3R5cGUgPSBORVNfUEtUX1RZUEVfVU5LTk9XTjsKIAlzdHJ1Y3QgdGNwaGRyICp0Y3BoID0gdGNwX2hkcihza2IpOworCXUzMiAgICAgZmluX3NldCA9IDA7CiAJc2tiX3B1bGwoc2tiLCBpcF9oZHIoc2tiKS0+aWhsIDw8IDIpOwogCiAJbmVzX2RlYnVnKE5FU19EQkdfQ00sICJwcm9jZXNzX3BhY2tldDogY21fbm9kZT0lcCBzdGF0ZSA9JWQgc3luPSVkICIKQEAgLTE3NjAsMTAgKzE4NjcsMTAgQEAKIAkJcGt0X3R5cGUgPSBORVNfUEtUX1RZUEVfU1lOOwogCQlpZiAodGNwaC0+YWNrKQogCQkJcGt0X3R5cGUgPSBORVNfUEtUX1RZUEVfU1lOQUNLOwotCX0gZWxzZSBpZiAodGNwaC0+ZmluKQotCQlwa3RfdHlwZSA9IE5FU19QS1RfVFlQRV9GSU47Ci0JZWxzZSBpZiAodGNwaC0+YWNrKQorCX0gZWxzZSBpZiAodGNwaC0+YWNrKQogCQlwa3RfdHlwZSA9IE5FU19QS1RfVFlQRV9BQ0s7CisJaWYgKHRjcGgtPmZpbikKKwkJZmluX3NldCA9IDE7CiAKIAlzd2l0Y2ggKHBrdF90eXBlKSB7CiAJY2FzZSBORVNfUEtUX1RZUEVfU1lOOgpAQCAtMTc3NCwxNSArMTg4MSwxNiBAQAogCQlicmVhazsKIAljYXNlIE5FU19QS1RfVFlQRV9BQ0s6CiAJCWhhbmRsZV9hY2tfcGt0KGNtX25vZGUsIHNrYiwgdGNwaCk7CisJCWlmIChmaW5fc2V0KQorCQkJaGFuZGxlX2Zpbl9wa3QoY21fbm9kZSk7CiAJCWJyZWFrOwogCWNhc2UgTkVTX1BLVF9UWVBFX1JTVDoKIAkJaGFuZGxlX3JzdF9wa3QoY21fbm9kZSwgc2tiLCB0Y3BoKTsKIAkJYnJlYWs7Ci0JY2FzZSBORVNfUEtUX1RZUEVfRklOOgotCQloYW5kbGVfZmluX3BrdChjbV9ub2RlLCBza2IsIHRjcGgpOwotCQlicmVhazsKIAlkZWZhdWx0OgogCQlkcm9wX3BhY2tldChza2IpOworCQlpZiAoZmluX3NldCkKKwkJCWhhbmRsZV9maW5fcGt0KGNtX25vZGUpOwogCQlicmVhazsKIAl9CiB9CkBAIC0xOTI1LDcgKzIwMzMsNyBAQAogCQkJCWxvb3BiYWNrcmVtb3Rlbm9kZS0+dGNwX2NudHh0LnJjdl93c2NhbGU7CiAJCQlsb29wYmFja3JlbW90ZW5vZGUtPnRjcF9jbnR4dC5zbmRfd3NjYWxlID0KIAkJCQljbV9ub2RlLT50Y3BfY250eHQucmN2X3dzY2FsZTsKLQorCQkJbG9vcGJhY2tyZW1vdGVub2RlLT5zdGF0ZSA9IE5FU19DTV9TVEFURV9NUEFSRVFfUkNWRDsKIAkJCWNyZWF0ZV9ldmVudChsb29wYmFja3JlbW90ZW5vZGUsIE5FU19DTV9FVkVOVF9NUEFfUkVRKTsKIAkJfQogCQlyZXR1cm4gY21fbm9kZTsKQEAgLTE5ODAsNyArMjA4OCwxMSBAQAogCXN0cnVjdCBpZXRmX21wYV9mcmFtZSAqbXBhX2ZyYW1lLCBzdHJ1Y3QgbmVzX2NtX25vZGUgKmNtX25vZGUpCiB7CiAJaW50IHJldCA9IDA7CisJaW50IGVyciA9IDA7CiAJaW50IHBhc3NpdmVfc3RhdGU7CisJc3RydWN0IG5lc19jbV9ldmVudCBldmVudDsKKwlzdHJ1Y3QgaXdfY21faWQgKmNtX2lkID0gY21fbm9kZS0+Y21faWQ7CisJc3RydWN0IG5lc19jbV9ub2RlICpsb29wYmFjayA9IGNtX25vZGUtPmxvb3BiYWNrcGFydG5lcjsKIAogCW5lc19kZWJ1ZyhORVNfREJHX0NNLCAiJXMgY21fbm9kZT0lcCB0eXBlPSVkIHN0YXRlPSVkXG4iLAogCQlfX2Z1bmNfXywgY21fbm9kZSwgY21fbm9kZS0+dGNwX2NudHh0LmNsaWVudCwgY21fbm9kZS0+c3RhdGUpOwpAQCAtMTk4OSwxMiArMjEwMSwzOCBAQAogCQlyZXR1cm4gcmV0OwogCWNsZWFudXBfcmV0cmFuc19lbnRyeShjbV9ub2RlKTsKIAotCXBhc3NpdmVfc3RhdGUgPSBhdG9taWNfYWRkX3JldHVybigxLCAmY21fbm9kZS0+cGFzc2l2ZV9zdGF0ZSk7Ci0JY21fbm9kZS0+c3RhdGUgPSBORVNfQ01fU1RBVEVfQ0xPU0VEOwotCWlmIChwYXNzaXZlX3N0YXRlID09IE5FU19TRU5EX1JFU0VUX0VWRU5UKQorCWlmICghbG9vcGJhY2spIHsKKwkJcGFzc2l2ZV9zdGF0ZSA9IGF0b21pY19hZGRfcmV0dXJuKDEsICZjbV9ub2RlLT5wYXNzaXZlX3N0YXRlKTsKKwkJaWYgKHBhc3NpdmVfc3RhdGUgPT0gTkVTX1NFTkRfUkVTRVRfRVZFTlQpIHsKKwkJCWNtX25vZGUtPnN0YXRlID0gTkVTX0NNX1NUQVRFX0NMT1NFRDsKKwkJCXJlbV9yZWZfY21fbm9kZShjbV9jb3JlLCBjbV9ub2RlKTsKKwkJfSBlbHNlIHsKKwkJCXJldCA9IHNlbmRfbXBhX3JlamVjdChjbV9ub2RlKTsKKwkJCWlmIChyZXQpIHsKKwkJCQljbV9ub2RlLT5zdGF0ZSA9IE5FU19DTV9TVEFURV9DTE9TRUQ7CisJCQkJZXJyID0gc2VuZF9yZXNldChjbV9ub2RlLCBOVUxMKTsKKwkJCQlpZiAoZXJyKQorCQkJCQlXQVJOX09OKDEpOworCQkJfSBlbHNlCisJCQkJY21faWQtPmFkZF9yZWYoY21faWQpOworCQl9CisJfSBlbHNlIHsKKwkJY21fbm9kZS0+Y21faWQgPSBOVUxMOworCQlldmVudC5jbV9ub2RlID0gbG9vcGJhY2s7CisJCWV2ZW50LmNtX2luZm8ucmVtX2FkZHIgPSBsb29wYmFjay0+cmVtX2FkZHI7CisJCWV2ZW50LmNtX2luZm8ubG9jX2FkZHIgPSBsb29wYmFjay0+bG9jX2FkZHI7CisJCWV2ZW50LmNtX2luZm8ucmVtX3BvcnQgPSBsb29wYmFjay0+cmVtX3BvcnQ7CisJCWV2ZW50LmNtX2luZm8ubG9jX3BvcnQgPSBsb29wYmFjay0+bG9jX3BvcnQ7CisJCWV2ZW50LmNtX2luZm8uY21faWQgPSBsb29wYmFjay0+Y21faWQ7CisJCWNtX2V2ZW50X21wYV9yZWplY3QoJmV2ZW50KTsKIAkJcmVtX3JlZl9jbV9ub2RlKGNtX2NvcmUsIGNtX25vZGUpOwotCWVsc2UKLQkJcmV0ID0gc2VuZF9yZXNldChjbV9ub2RlLCBOVUxMKTsKKwkJbG9vcGJhY2stPnN0YXRlID0gTkVTX0NNX1NUQVRFX0NMT1NJTkc7CisKKwkJY21faWQgPSBsb29wYmFjay0+Y21faWQ7CisJCXJlbV9yZWZfY21fbm9kZShjbV9jb3JlLCBsb29wYmFjayk7CisJCWNtX2lkLT5yZW1fcmVmKGNtX2lkKTsKKwl9CisKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yMDMxLDYgKzIxNjksNyBAQAogCWNhc2UgTkVTX0NNX1NUQVRFX0NMT1NJTkc6CiAJCXJldCA9IC0xOwogCQlicmVhazsKKwljYXNlIE5FU19DTV9TVEFURV9NUEFSRUpfUkNWRDoKIAljYXNlIE5FU19DTV9TVEFURV9MSVNURU5JTkc6CiAJY2FzZSBORVNfQ01fU1RBVEVfVU5LTk9XTjoKIAljYXNlIE5FU19DTV9TVEFURV9JTklURUQ6CkBAIC0yMjI3LDE1ICsyMzY2LDE1IEBACiAJaW50IHJldCA9IDA7CiAKIAlzd2l0Y2ggKHR5cGUpIHsKLQkJY2FzZSBORVNfQ01fU0VUX1BLVF9TSVpFOgotCQkJY21fY29yZS0+bXR1ID0gdmFsdWU7Ci0JCQlicmVhazsKLQkJY2FzZSBORVNfQ01fU0VUX0ZSRUVfUEtUX1FfU0laRToKLQkJCWNtX2NvcmUtPmZyZWVfdHhfcGt0X21heCA9IHZhbHVlOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQkvKiB1bmtub3duIHNldCBvcHRpb24gKi8KLQkJCXJldCA9IC1FSU5WQUw7CisJY2FzZSBORVNfQ01fU0VUX1BLVF9TSVpFOgorCQljbV9jb3JlLT5tdHUgPSB2YWx1ZTsKKwkJYnJlYWs7CisJY2FzZSBORVNfQ01fU0VUX0ZSRUVfUEtUX1FfU0laRToKKwkJY21fY29yZS0+ZnJlZV90eF9wa3RfbWF4ID0gdmFsdWU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIHVua25vd24gc2V0IG9wdGlvbiAqLworCQlyZXQgPSAtRUlOVkFMOwogCX0KIAogCXJldHVybiByZXQ7CkBAIC0yNjU0LDkgKzI3OTMsNyBAQAogCQkJTkVTX1FQQ09OVEVYVF9PUkRJUkRfV1JQRFUpOwogCX0gZWxzZSB7CiAJCW5lc3FwLT5uZXNxcF9jb250ZXh0LT5pcmRfb3JkX3NpemVzIHw9Ci0JCQljcHVfdG9fbGUzMigoTkVTX1FQQ09OVEVYVF9PUkRJUkRfTFNNTV9QUkVTRU5UIHwKLQkJCU5FU19RUENPTlRFWFRfT1JESVJEX1dSUERVIHwKLQkJCU5FU19RUENPTlRFWFRfT1JESVJEX0FMU01NKSk7CisJCQljcHVfdG9fbGUzMihORVNfUVBDT05URVhUX09SRElSRF9XUlBEVSk7CiAJfQogCW5lc3FwLT5za2lwX2xzbW0gPSAxOwogCkBAIC0yNzc4LDIzICsyOTE1LDM1IEBACiBpbnQgbmVzX3JlamVjdChzdHJ1Y3QgaXdfY21faWQgKmNtX2lkLCBjb25zdCB2b2lkICpwZGF0YSwgdTggcGRhdGFfbGVuKQogewogCXN0cnVjdCBuZXNfY21fbm9kZSAqY21fbm9kZTsKKwlzdHJ1Y3QgbmVzX2NtX25vZGUgKmxvb3BiYWNrOworCiAJc3RydWN0IG5lc19jbV9jb3JlICpjbV9jb3JlOwogCiAJYXRvbWljX2luYygmY21fcmVqZWN0cyk7CiAJY21fbm9kZSA9IChzdHJ1Y3QgbmVzX2NtX25vZGUgKikgY21faWQtPnByb3ZpZGVyX2RhdGE7CisJbG9vcGJhY2sgPSBjbV9ub2RlLT5sb29wYmFja3BhcnRuZXI7CiAJY21fY29yZSA9IGNtX25vZGUtPmNtX2NvcmU7CisJY21fbm9kZS0+Y21faWQgPSBjbV9pZDsKIAljbV9ub2RlLT5tcGFfZnJhbWVfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaWV0Zl9tcGFfZnJhbWUpICsgcGRhdGFfbGVuOwogCi0Jc3RyY3B5KCZjbV9ub2RlLT5tcGFfZnJhbWUua2V5WzBdLCBJRUZUX01QQV9LRVlfUkVQKTsKLQltZW1jcHkoJmNtX25vZGUtPm1wYV9mcmFtZS5wcml2X2RhdGEsIHBkYXRhLCBwZGF0YV9sZW4pOworCWlmIChjbV9ub2RlLT5tcGFfZnJhbWVfc2l6ZSA+IE1BWF9DTV9CVUZGRVIpCisJCXJldHVybiAtRUlOVkFMOwogCi0JY21fbm9kZS0+bXBhX2ZyYW1lLnByaXZfZGF0YV9sZW4gPSBjcHVfdG9fYmUxNihwZGF0YV9sZW4pOworCXN0cmNweSgmY21fbm9kZS0+bXBhX2ZyYW1lLmtleVswXSwgSUVGVF9NUEFfS0VZX1JFUCk7CisJaWYgKGxvb3BiYWNrKSB7CisJCW1lbWNweSgmbG9vcGJhY2stPm1wYV9mcmFtZS5wcml2X2RhdGEsIHBkYXRhLCBwZGF0YV9sZW4pOworCQlsb29wYmFjay0+bXBhX2ZyYW1lLnByaXZfZGF0YV9sZW4gPSBwZGF0YV9sZW47CisJCWxvb3BiYWNrLT5tcGFfZnJhbWVfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaWV0Zl9tcGFfZnJhbWUpICsKKwkJCQlwZGF0YV9sZW47CisJfSBlbHNlIHsKKwkJbWVtY3B5KCZjbV9ub2RlLT5tcGFfZnJhbWUucHJpdl9kYXRhLCBwZGF0YSwgcGRhdGFfbGVuKTsKKwkJY21fbm9kZS0+bXBhX2ZyYW1lLnByaXZfZGF0YV9sZW4gPSBjcHVfdG9fYmUxNihwZGF0YV9sZW4pOworCX0KKwogCWNtX25vZGUtPm1wYV9mcmFtZS5yZXYgPSBtcGFfdmVyc2lvbjsKIAljbV9ub2RlLT5tcGFfZnJhbWUuZmxhZ3MgPSBJRVRGX01QQV9GTEFHU19DUkMgfCBJRVRGX01QQV9GTEFHU19SRUpFQ1Q7CiAKLQljbV9jb3JlLT5hcGktPnJlamVjdChjbV9jb3JlLCAmY21fbm9kZS0+bXBhX2ZyYW1lLCBjbV9ub2RlKTsKLQotCXJldHVybiAwOworCXJldHVybiBjbV9jb3JlLT5hcGktPnJlamVjdChjbV9jb3JlLCAmY21fbm9kZS0+bXBhX2ZyYW1lLCBjbV9ub2RlKTsKIH0KIAogCkBAIC0zMzAzLDEzICszNDUyLDU2IEBACiAJY21fZXZlbnQucmVtb3RlX2FkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7CiAJY21fZXZlbnQucmVtb3RlX2FkZHIuc2luX3BvcnQgPSBodG9ucyhldmVudC0+Y21faW5mby5yZW1fcG9ydCk7CiAJY21fZXZlbnQucmVtb3RlX2FkZHIuc2luX2FkZHIuc19hZGRyID0gaHRvbmwoZXZlbnQtPmNtX2luZm8ucmVtX2FkZHIpOwotCi0JCWNtX2V2ZW50LnByaXZhdGVfZGF0YSAgICAgICAgICAgICAgICA9IGNtX25vZGUtPm1wYV9mcmFtZV9idWY7Ci0JCWNtX2V2ZW50LnByaXZhdGVfZGF0YV9sZW4gICAgICAgICAgICA9ICh1OCkgY21fbm9kZS0+bXBhX2ZyYW1lX3NpemU7CisJY21fZXZlbnQucHJpdmF0ZV9kYXRhID0gY21fbm9kZS0+bXBhX2ZyYW1lX2J1ZjsKKwljbV9ldmVudC5wcml2YXRlX2RhdGFfbGVuICA9ICh1OCkgY21fbm9kZS0+bXBhX2ZyYW1lX3NpemU7CiAKIAlyZXQgPSBjbV9pZC0+ZXZlbnRfaGFuZGxlcihjbV9pZCwgJmNtX2V2ZW50KTsKIAlpZiAocmV0KQotCQlwcmludGsoIiVzWyV1XSBPRkEgQ00gZXZlbnRfaGFuZGxlciByZXR1cm5lZCwgcmV0PSVkXG4iLAorCQlwcmludGsoS0VSTl9FUlIgIiVzWyV1XSBPRkEgQ00gZXZlbnRfaGFuZGxlciByZXR1cm5lZCwgcmV0PSVkXG4iLAorCQkJCV9fZnVuY19fLCBfX0xJTkVfXywgcmV0KTsKKwlyZXR1cm47Cit9CisKKworc3RhdGljIHZvaWQgY21fZXZlbnRfbXBhX3JlamVjdChzdHJ1Y3QgbmVzX2NtX2V2ZW50ICpldmVudCkKK3sKKwlzdHJ1Y3QgaXdfY21faWQgICAqY21faWQ7CisJc3RydWN0IGl3X2NtX2V2ZW50IGNtX2V2ZW50OworCXN0cnVjdCBuZXNfY21fbm9kZSAqY21fbm9kZTsKKwlpbnQgcmV0OworCisJY21fbm9kZSA9IGV2ZW50LT5jbV9ub2RlOworCWlmICghY21fbm9kZSkKKwkJcmV0dXJuOworCWNtX2lkID0gY21fbm9kZS0+Y21faWQ7CisKKwlhdG9taWNfaW5jKCZjbV9jb25uZWN0X3JlcXMpOworCW5lc19kZWJ1ZyhORVNfREJHX0NNLCAiY21fbm9kZSA9ICVwIC0gY21faWQgPSAlcCwgamlmZmllcyA9ICVsdVxuIiwKKwkJCWNtX25vZGUsIGNtX2lkLCBqaWZmaWVzKTsKKworCWNtX2V2ZW50LmV2ZW50ID0gSVdfQ01fRVZFTlRfQ09OTkVDVF9SRVBMWTsKKwljbV9ldmVudC5zdGF0dXMgPSAtRUNPTk5SRUZVU0VEOworCWNtX2V2ZW50LnByb3ZpZGVyX2RhdGEgPSBjbV9pZC0+cHJvdmlkZXJfZGF0YTsKKworCWNtX2V2ZW50LmxvY2FsX2FkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7CisJY21fZXZlbnQubG9jYWxfYWRkci5zaW5fcG9ydCA9IGh0b25zKGV2ZW50LT5jbV9pbmZvLmxvY19wb3J0KTsKKwljbV9ldmVudC5sb2NhbF9hZGRyLnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKGV2ZW50LT5jbV9pbmZvLmxvY19hZGRyKTsKKworCWNtX2V2ZW50LnJlbW90ZV9hZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworCWNtX2V2ZW50LnJlbW90ZV9hZGRyLnNpbl9wb3J0ID0gaHRvbnMoZXZlbnQtPmNtX2luZm8ucmVtX3BvcnQpOworCWNtX2V2ZW50LnJlbW90ZV9hZGRyLnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKGV2ZW50LT5jbV9pbmZvLnJlbV9hZGRyKTsKKworCWNtX2V2ZW50LnByaXZhdGVfZGF0YSA9IGNtX25vZGUtPm1wYV9mcmFtZV9idWY7CisJY21fZXZlbnQucHJpdmF0ZV9kYXRhX2xlbiA9ICh1OCkgY21fbm9kZS0+bXBhX2ZyYW1lX3NpemU7CisKKwluZXNfZGVidWcoTkVTX0RCR19DTSwgImNhbGwgQ01fRVZFTlRfTVBBX1JFSkVDVEVELCBsb2NhbF9hZGRyPSUwOHgsICIKKwkJCSJyZW1vdmVfYWRkcj0lMDh4XG4iLAorCQkJY21fZXZlbnQubG9jYWxfYWRkci5zaW5fYWRkci5zX2FkZHIsCisJCQljbV9ldmVudC5yZW1vdGVfYWRkci5zaW5fYWRkci5zX2FkZHIpOworCisJcmV0ID0gY21faWQtPmV2ZW50X2hhbmRsZXIoY21faWQsICZjbV9ldmVudCk7CisJaWYgKHJldCkKKwkJcHJpbnRrKEtFUk5fRVJSICIlc1sldV0gT0ZBIENNIGV2ZW50X2hhbmRsZXIgcmV0dXJuZWQsIHJldD0lZFxuIiwKIAkJCQlfX2Z1bmNfXywgX19MSU5FX18sIHJldCk7CiAKIAlyZXR1cm47CkBAIC0zMzc0LDYgKzM1NjYsMTQgQEAKIAkJY21fZXZlbnRfY29ubmVjdGVkKGV2ZW50KTsKIAkJbmVzX2RlYnVnKE5FU19EQkdfQ00sICJDTSBFdmVudDogQ09OTkVDVEVEXG4iKTsKIAkJYnJlYWs7CisJY2FzZSBORVNfQ01fRVZFTlRfTVBBX1JFSkVDVDoKKwkJaWYgKCghZXZlbnQtPmNtX25vZGUtPmNtX2lkKSB8fAorCQkJCShldmVudC0+Y21fbm9kZS0+c3RhdGUgPT0gTkVTX0NNX1NUQVRFX1RTQSkpCisJCQlicmVhazsKKwkJY21fZXZlbnRfbXBhX3JlamVjdChldmVudCk7CisJCW5lc19kZWJ1ZyhORVNfREJHX0NNLCAiQ00gRXZlbnQ6IFJFSkVDVFxuIik7CisJCWJyZWFrOworCiAJY2FzZSBORVNfQ01fRVZFTlRfQUJPUlRFRDoKIAkJaWYgKCghZXZlbnQtPmNtX25vZGUtPmNtX2lkKSB8fAogCQkJKGV2ZW50LT5jbV9ub2RlLT5zdGF0ZSA9PSBORVNfQ01fU1RBVEVfVFNBKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2NtLmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19jbS5oCmluZGV4IGZhZmEzNTAuLmQ1Zjc3ODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2NtLmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfY20uaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA4IE5ldEVmZmVjdCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAwOSBJbnRlbC1ORSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bwogICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQpAQCAtMzksNiArMzksOSBAQAogI2RlZmluZSBORVNfTUFOQUdFX0FQQlZUX0RFTCAwCiAjZGVmaW5lIE5FU19NQU5BR0VfQVBCVlRfQUREIDEKIAorI2RlZmluZSBORVNfTVBBX1JFUVVFU1RfQUNDRVBUICAxCisjZGVmaW5lIE5FU19NUEFfUkVRVUVTVF9SRUpFQ1QgIDIKKwogLyogSUVURiBNUEEgLS0gZGVmaW5lcywgZW51bXMsIHN0cnVjdHMgKi8KICNkZWZpbmUgSUVGVF9NUEFfS0VZX1JFUSAgIk1QQSBJRCBSZXEgRnJhbWUiCiAjZGVmaW5lIElFRlRfTVBBX0tFWV9SRVAgICJNUEEgSUQgUmVwIEZyYW1lIgpAQCAtMTg2LDYgKzE4OSw3IEBACiAJTkVTX0NNX1NUQVRFX0FDQ0VQVElORywKIAlORVNfQ01fU1RBVEVfTVBBUkVRX1NFTlQsCiAJTkVTX0NNX1NUQVRFX01QQVJFUV9SQ1ZELAorCU5FU19DTV9TVEFURV9NUEFSRUpfUkNWRCwKIAlORVNfQ01fU1RBVEVfVFNBLAogCU5FU19DTV9TVEFURV9GSU5fV0FJVDEsCiAJTkVTX0NNX1NUQVRFX0ZJTl9XQUlUMiwKQEAgLTI3OCwxMyArMjgyLDEyIEBACiAJc3RydWN0IG5lc190aW1lcl9lbnRyeQkqc2VuZF9lbnRyeTsKIAogCXNwaW5sb2NrX3QgICAgICAgICAgICAgICAgcmV0cmFuc19saXN0X2xvY2s7Ci0Jc3RydWN0IGxpc3RfaGVhZCAgICAgICAgICByZWN2X2xpc3Q7Ci0Jc3BpbmxvY2tfdCAgICAgICAgICAgICAgICByZWN2X2xpc3RfbG9jazsKKwlzdHJ1Y3QgbmVzX3RpbWVyX2VudHJ5ICAqcmVjdl9lbnRyeTsKIAogCWludCAgICAgICAgICAgICAgICAgICAgICAgc2VuZF93cml0ZTA7CiAJdW5pb24gewogCQlzdHJ1Y3QgaWV0Zl9tcGFfZnJhbWUgbXBhX2ZyYW1lOwotCQl1OCAgICAgICAgICAgICAgICAgICAgbXBhX2ZyYW1lX2J1ZltORVNfQ01fREVGQVVMVF9NVFVdOworCQl1OCAgICAgICAgICAgICAgICAgICAgbXBhX2ZyYW1lX2J1ZltNQVhfQ01fQlVGRkVSXTsKIAl9OwogCXUxNiAgICAgICAgICAgICAgICAgICAgICAgbXBhX2ZyYW1lX3NpemU7CiAJc3RydWN0IGl3X2NtX2lkICAgICAgICAgICAqY21faWQ7CkBAIC0zMjYsNiArMzI5LDcgQEAKIAlORVNfQ01fRVZFTlRfTVBBX1JFUSwKIAlORVNfQ01fRVZFTlRfTVBBX0NPTk5FQ1QsCiAJTkVTX0NNX0VWRU5UX01QQV9BQ0NFUFQsCisJTkVTX0NNX0VWRU5UX01QQV9SRUpFQ1QsCiAJTkVTX0NNX0VWRU5UX01QQV9FU1RBQkxJU0hFRCwKIAlORVNfQ01fRVZFTlRfQ09OTkVDVEVELAogCU5FU19DTV9FVkVOVF9DTE9TRUQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19jb250ZXh0LmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19jb250ZXh0LmgKaW5kZXggZGE5ZGFiYS4uMGZiOGQ4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfY29udGV4dC5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2NvbnRleHQuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA4IE5ldEVmZmVjdCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAwOSBJbnRlbC1ORSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bwogICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfaHcuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2h3LmMKaW5kZXggNWQxMzlkYi4uNTJlNzM0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfaHcuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19ody5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAwNiAtIDIwMDggTmV0RWZmZWN0LCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA5IEludGVsLU5FLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCiAgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCkBAIC0yNTQsNiArMjU0LDcgQEAKIAl1MzIgYWRhcHRlcl9zaXplOwogCXUzMiBhcnBfdGFibGVfc2l6ZTsKIAl1MTYgdmVuZG9yX2lkOworCXUxNiBkZXZpY2VfaWQ7CiAJdTggIE9uZUdfTW9kZTsKIAl1OCAgZnVuY19pbmRleDsKIApAQCAtMzU2LDYgKzM1NywxMyBAQAogCQlyZXR1cm4gTlVMTDsKIAl9CiAKKwluZXNhZGFwdGVyLT52ZW5kb3JfaWQgPSAoKCh1MzIpIG5lc2FkYXB0ZXItPm1hY19hZGRyX2hpZ2gpIDw8IDgpIHwKKwkJCQkobmVzYWRhcHRlci0+bWFjX2FkZHJfbG93ID4+IDI0KTsKKworCXBjaV9idXNfcmVhZF9jb25maWdfd29yZChuZXNkZXYtPnBjaWRldi0+YnVzLCBuZXNkZXYtPnBjaWRldi0+ZGV2Zm4sCisJCQkJIFBDSV9ERVZJQ0VfSUQsICZkZXZpY2VfaWQpOworCW5lc2FkYXB0ZXItPnZlbmRvcl9wYXJ0X2lkID0gZGV2aWNlX2lkOworCiAJaWYgKG5lc19pbml0X3NlcmRlcyhuZXNkZXYsIGh3X3JldiwgcG9ydF9jb3VudCwgbmVzYWRhcHRlciwKIAkJCQkJCQlPbmVHX01vZGUpKSB7CiAJCWtmcmVlKG5lc2FkYXB0ZXIpOwpAQCAtMTYzNiw3ICsxNjQ0LDYgQEAKIAluZXN2bmljLT5wb3N0X2NxcF9yZXF1ZXN0ID0gbmVzX3Bvc3RfY3FwX3JlcXVlc3Q7CiAJbmVzdm5pYy0+bWNycV9tY2FzdF9maWx0ZXIgPSBOVUxMOwogCi0Jc3Bpbl9sb2NrX2luaXQoJm5lc3ZuaWMtPm5pYy5zcV9sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmbmVzdm5pYy0+bmljLnJxX2xvY2spOwogCiAJLyogc2V0dXAgdGhlIFJRICovCkBAIC0yMjYxLDYgKzIyNjgsOCBAQAogCiAJCWlmICgrK2hlYWQgPj0gYWVxX3NpemUpCiAJCQloZWFkID0gMDsKKworCQluZXNfd3JpdGUzMihuZXNkZXYtPnJlZ3MgKyBORVNfQUVRX0FMTE9DLCAxIDw8IDE2KTsKIAl9CiAJd2hpbGUgKDEpOwogCWFlcS0+YWVxX2hlYWQgPSBoZWFkOwpAQCAtMjU0MSw3ICsyNTUwLDcgQEAKIHsKIAlzdHJ1Y3QgbmVzX3ZuaWMgKm5lc3ZuaWMgPSBjb250YWluZXJfb2YoY3EsIHN0cnVjdCBuZXNfdm5pYywgbmljX2NxKTsKIAotCW5ldGlmX3J4X3NjaGVkdWxlKCZuZXN2bmljLT5uYXBpKTsKKwluYXBpX3NjaGVkdWxlKCZuZXN2bmljLT5uYXBpKTsKIH0KIAogCkBAIC0yNjIyLDkgKzI2MzEsOSBAQAogCQkJCQkJfSBlbHNlCiAJCQkJCQkJYnJlYWs7CiAJCQkJCX0KLQkJCQkJaWYgKHNrYikKLQkJCQkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCQkJfQorCQkJCWlmIChza2IpCisJCQkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCQkJbmVzbmljLT5zcV90YWlsKys7CiAJCQkJbmVzbmljLT5zcV90YWlsICY9IG5lc25pYy0+c3Ffc2l6ZS0xOwogCQkJCWlmIChzcV9jcWVzID4gMTI4KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19ody5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfaHcuaAppbmRleCBiYzBiNGRlLi5mNDFhODcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19ody5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2h3LmgKQEAgLTEsNSArMSw1IEBACiAvKgotKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA4IE5ldEVmZmVjdCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA5IEludGVsLU5FLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogKgogKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bwogKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCkBAIC02MSw2ICs2MSw3IEBACiAJTkVTX0NRX0FDSyA9IDB4MDAzNCwKIAlORVNfV1FFX0FMTE9DID0gMHgwMDQwLAogCU5FU19DUUVfQUxMT0MgPSAweDAwNDQsCisJTkVTX0FFUV9BTExPQyA9IDB4MDA0OAogfTsKIAogZW51bSBpbmRleGVkX3JlZ3MgewpAQCAtODc1LDcgKzg3Niw2IEBACiAJdTggcmVwbGVuaXNoaW5nX3JxOwogCXU4IHJlc2VydmVkOwogCi0Jc3BpbmxvY2tfdCBzcV9sb2NrOwogCXNwaW5sb2NrX3QgcnFfbG9jazsKIH07CiAKQEAgLTExNDcsNyArMTE0Nyw2IEBACiBzdHJ1Y3QgbmVzX3ZuaWMgewogCXN0cnVjdCBuZXNfaWJfZGV2aWNlICpuZXNpYmRldjsKIAl1NjQgc3FfZnVsbDsKLQl1NjQgc3FfbG9ja2VkOwogCXU2NCB0c29fcmVxdWVzdHM7CiAJdTY0IHNlZ21lbnRlZF90c29fcmVxdWVzdHM7CiAJdTY0IGxpbmVhcml6ZWRfc2ticzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX25pYy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfbmljLmMKaW5kZXggNTdhNDdjZi4uZWNiMWY2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfbmljLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfbmljLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAwOCBOZXRFZmZlY3QsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNiAtIDIwMDkgSW50ZWwtTkUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KICAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKQEAgLTExMSw3ICsxMTEsNyBAQAogCW5lc19uaWNfY2VfaGFuZGxlcihuZXNkZXYsIG5lc2NxKTsKIAogCWlmIChuZXNjcS0+Y3Flc19wZW5kaW5nID09IDApIHsKLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CiAJCS8qIGNsZWFyIG91dCBjb21wbGV0ZWQgY3FlcyBhbmQgYXJtICovCiAJCW5lc193cml0ZTMyKG5lc2Rldi0+cmVncytORVNfQ1FFX0FMTE9DLCBORVNfQ1FFX0FMTE9DX05PVElGWV9ORVhUIHwKIAkJCQluZXNjcS0+Y3FfbnVtYmVyIHwgKG5lc2NxLT5jcWVfYWxsb2NzX3BlbmRpbmcgPDwgMTYpKTsKQEAgLTQwMCw4ICs0MDAsNyBAQAogCWlmIChza2JfaGVhZGxlbihza2IpID09IHNrYi0+bGVuKSB7CiAJCWlmIChza2JfaGVhZGxlbihza2IpIDw9IE5FU19GSVJTVF9GUkFHX1NJWkUpIHsKIAkJCW5pY19zcWUtPndxZV93b3Jkc1tORVNfTklDX1NRX1dRRV9MRU5HVEhfMl8xX0lEWF0gPSAwOwotCQkJbmVzbmljLT50eF9za2JbbmVzbmljLT5zcV9oZWFkXSA9IE5VTEw7Ci0JCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCQluZXNuaWMtPnR4X3NrYltuZXNuaWMtPnNxX2hlYWRdID0gc2tiOwogCQl9CiAJfSBlbHNlIHsKIAkJLyogRGVhbCB3aXRoIEZyYWdtZW50cyAqLwpAQCAtNDUzLDcgKzQ1Miw2IEBACiAJdTMyIHdxZV9jb3VudD0xOwogCXUzMiBzZW5kX3JjOwogCXN0cnVjdCBpcGhkciAqaXBoOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJX19sZTE2ICp3cWVfZnJhZ21lbnRfbGVuZ3RoOwogCXUzMiBucl9mcmFnczsKIAl1MzIgb3JpZ2luYWxfZmlyc3RfbGVuZ3RoOwpAQCAtNDgwLDEzICs0NzgsNiBAQAogCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKG5ldGRldikpCiAJCXJldHVybiBORVRERVZfVFhfQlVTWTsKIAotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlpZiAoIXNwaW5fdHJ5bG9jaygmbmVzbmljLT5zcV9sb2NrKSkgewotCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JCW5lc3ZuaWMtPnNxX2xvY2tlZCsrOwotCQlyZXR1cm4gTkVUREVWX1RYX0xPQ0tFRDsKLQl9Ci0KIAkvKiBDaGVjayBpZiBTUSBpcyBmdWxsICovCiAJaWYgKCgoKG5lc25pYy0+c3FfdGFpbCsobmVzbmljLT5zcV9zaXplKjIpKS1uZXNuaWMtPnNxX2hlYWQpICYgKG5lc25pYy0+c3Ffc2l6ZSAtIDEpKSA9PSAxKSB7CiAJCWlmICghbmV0aWZfcXVldWVfc3RvcHBlZChuZXRkZXYpKSB7CkBAIC00OTgsNyArNDg5LDYgQEAKIAkJCX0KIAkJfQogCQluZXN2bmljLT5zcV9mdWxsKys7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5lc25pYy0+c3FfbG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiAJfQogCkBAIC01MzEsNyArNTIxLDYgQEAKIAkJCQkJfQogCQkJCX0KIAkJCQluZXN2bmljLT5zcV9mdWxsKys7Ci0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzbmljLT5zcV9sb2NrLCBmbGFncyk7CiAJCQkJbmVzX2RlYnVnKE5FU19EQkdfTklDX1RYLCAiJXM6IEhOSUMgU1EgZnVsbC0gVFNPIHJlcXVlc3QgaGFzIHRvbyBtYW55IGZyYWdzIVxuIiwKIAkJCQkJCW5ldGRldi0+bmFtZSk7CiAJCQkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwpAQCAtNjU2LDE3ICs2NDUsMTMgQEAKIAkJCXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcihza2IsIGhvZmZzZXQpOwogCQkJc2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIG5ob2Zmc2V0KTsKIAkJCXNlbmRfcmMgPSBuZXNfbmljX3NlbmQoc2tiLCBuZXRkZXYpOwotCQkJaWYgKHNlbmRfcmMgIT0gTkVUREVWX1RYX09LKSB7Ci0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzbmljLT5zcV9sb2NrLCBmbGFncyk7CisJCQlpZiAoc2VuZF9yYyAhPSBORVRERVZfVFhfT0spCiAJCQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKLQkJCX0KIAkJfQogCX0gZWxzZSB7CiAJCXNlbmRfcmMgPSBuZXNfbmljX3NlbmQoc2tiLCBuZXRkZXYpOwotCQlpZiAoc2VuZF9yYyAhPSBORVRERVZfVFhfT0spIHsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5lc25pYy0+c3FfbG9jaywgZmxhZ3MpOworCQlpZiAoc2VuZF9yYyAhPSBORVRERVZfVFhfT0spCiAJCQlyZXR1cm4gTkVUREVWX1RYX09LOwotCQl9CiAJfQogCiAJYmFycmllcigpOwpAQCAtNjc2LDcgKzY2MSw2IEBACiAJCQkJKHdxZV9jb3VudCA8PCAyNCkgfCAoMSA8PCAyMykgfCBuZXN2bmljLT5uaWMucXBfaWQpOwogCiAJbmV0ZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzbmljLT5zcV9sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogfQpAQCAtMTAxMiw3ICs5OTYsNiBAQAogCSJQYXVzZSBGcmFtZXMgUmVjZWl2ZWQiLAogCSJJbnRlcm5hbCBSb3V0aW5nIEVycm9ycyIsCiAJIlNRIFNXIERyb3BwZWQgU0tCcyIsCi0JIlNRIExvY2tlZCIsCiAJIlNRIEZ1bGwiLAogCSJTZWdtZW50ZWQgVFNPIFJlcXVlc3RzIiwKIAkiUnggU3ltYm9sIEVycm9ycyIsCkBAIC0xMTI5LDE2ICsxMTEyLDE3IEBACiAJc3RydWN0IG5lc19kZXZpY2UgKm5lc2RldiA9IG5lc3ZuaWMtPm5lc2RldjsKIAl1MzIgbmljX2NvdW50OwogCXUzMiB1MzJ0ZW1wOworCXUzMiBpbmRleCA9IDA7CiAKIAl0YXJnZXRfZXRodG9vbF9zdGF0cy0+bl9zdGF0cyA9IE5FU19FVEhUT09MX1NUQVRfQ09VTlQ7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzBdID0gbmVzdm5pYy0+bmVzZGV2LT5saW5rX3N0YXR1c19pbnRlcnJ1cHRzOwotCXRhcmdldF9zdGF0X3ZhbHVlc1sxXSA9IG5lc3ZuaWMtPmxpbmVhcml6ZWRfc2ticzsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMl0gPSBuZXN2bmljLT50c29fcmVxdWVzdHM7CisJdGFyZ2V0X3N0YXRfdmFsdWVzW2luZGV4XSA9IG5lc3ZuaWMtPm5lc2Rldi0+bGlua19zdGF0dXNfaW50ZXJydXB0czsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBuZXN2bmljLT5saW5lYXJpemVkX3NrYnM7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gbmVzdm5pYy0+dHNvX3JlcXVlc3RzOwogCiAJdTMydGVtcCA9IG5lc19yZWFkX2luZGV4ZWQobmVzZGV2LAogCQkJTkVTX0lEWF9NQUNfVFhfUEFVU0VfRlJBTUVTICsgKG5lc3ZuaWMtPm5lc2Rldi0+bWFjX2luZGV4KjB4MjAwKSk7CiAJbmVzdm5pYy0+bmVzZGV2LT5tYWNfcGF1c2VfZnJhbWVzX3NlbnQgKz0gdTMydGVtcDsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbM10gPSBuZXN2bmljLT5uZXNkZXYtPm1hY19wYXVzZV9mcmFtZXNfc2VudDsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBuZXN2bmljLT5uZXNkZXYtPm1hY19wYXVzZV9mcmFtZXNfc2VudDsKIAogCXUzMnRlbXAgPSBuZXNfcmVhZF9pbmRleGVkKG5lc2RldiwKIAkJCU5FU19JRFhfTUFDX1JYX1BBVVNFX0ZSQU1FUyArIChuZXN2bmljLT5uZXNkZXYtPm1hY19pbmRleCoweDIwMCkpOwpAQCAtMTIwOSw2MCArMTE5Myw1OSBAQAogCQluZXN2bmljLT5lbmRub2RlX2lwdjRfdGNwX3JldHJhbnNtaXRzICs9IHUzMnRlbXA7CiAJfQogCi0JdGFyZ2V0X3N0YXRfdmFsdWVzWzRdID0gbmVzdm5pYy0+bmVzZGV2LT5tYWNfcGF1c2VfZnJhbWVzX3JlY2VpdmVkOwotCXRhcmdldF9zdGF0X3ZhbHVlc1s1XSA9IG5lc2Rldi0+bmVzYWRhcHRlci0+bmljX3J4X2V0aF9yb3V0ZV9lcnI7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzZdID0gbmVzdm5pYy0+dHhfc3dfZHJvcHBlZDsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbN10gPSBuZXN2bmljLT5zcV9sb2NrZWQ7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzhdID0gbmVzdm5pYy0+c3FfZnVsbDsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbOV0gPSBuZXN2bmljLT5zZWdtZW50ZWRfdHNvX3JlcXVlc3RzOwotCXRhcmdldF9zdGF0X3ZhbHVlc1sxMF0gPSBuZXN2bmljLT5uZXNkZXYtPm1hY19yeF9zeW1ib2xfZXJyX2ZyYW1lczsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMTFdID0gbmVzdm5pYy0+bmVzZGV2LT5tYWNfcnhfamFiYmVyX2ZyYW1lczsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMTJdID0gbmVzdm5pYy0+bmVzZGV2LT5tYWNfcnhfb3ZlcnNpemVkX2ZyYW1lczsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMTNdID0gbmVzdm5pYy0+bmVzZGV2LT5tYWNfcnhfc2hvcnRfZnJhbWVzOwotCXRhcmdldF9zdGF0X3ZhbHVlc1sxNF0gPSBuZXN2bmljLT5lbmRub2RlX25zdGF0X3J4X2Rpc2NhcmQ7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzE1XSA9IG5lc3ZuaWMtPmVuZG5vZGVfbnN0YXRfcnhfb2N0ZXRzOwotCXRhcmdldF9zdGF0X3ZhbHVlc1sxNl0gPSBuZXN2bmljLT5lbmRub2RlX25zdGF0X3J4X2ZyYW1lczsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMTddID0gbmVzdm5pYy0+ZW5kbm9kZV9uc3RhdF90eF9vY3RldHM7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzE4XSA9IG5lc3ZuaWMtPmVuZG5vZGVfbnN0YXRfdHhfZnJhbWVzOwotCXRhcmdldF9zdGF0X3ZhbHVlc1sxOV0gPSBtaF9kZXRlY3RlZDsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMjBdID0gbWhfcGF1c2VzX3NlbnQ7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzIxXSA9IG5lc3ZuaWMtPmVuZG5vZGVfaXB2NF90Y3BfcmV0cmFuc21pdHM7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzIyXSA9IGF0b21pY19yZWFkKCZjbV9jb25uZWN0cyk7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzIzXSA9IGF0b21pY19yZWFkKCZjbV9hY2NlcHRzKTsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMjRdID0gYXRvbWljX3JlYWQoJmNtX2Rpc2Nvbm5lY3RzKTsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMjVdID0gYXRvbWljX3JlYWQoJmNtX2Nvbm5lY3RlZHMpOwotCXRhcmdldF9zdGF0X3ZhbHVlc1syNl0gPSBhdG9taWNfcmVhZCgmY21fY29ubmVjdF9yZXFzKTsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMjddID0gYXRvbWljX3JlYWQoJmNtX3JlamVjdHMpOwotCXRhcmdldF9zdGF0X3ZhbHVlc1syOF0gPSBhdG9taWNfcmVhZCgmbW9kX3FwX3RpbW91dHMpOwotCXRhcmdldF9zdGF0X3ZhbHVlc1syOV0gPSBhdG9taWNfcmVhZCgmcXBzX2NyZWF0ZWQpOwotCXRhcmdldF9zdGF0X3ZhbHVlc1szMF0gPSBhdG9taWNfcmVhZCgmc3dfcXBzX2Rlc3Ryb3llZCk7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzMxXSA9IGF0b21pY19yZWFkKCZxcHNfZGVzdHJveWVkKTsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMzJdID0gYXRvbWljX3JlYWQoJmNtX2Nsb3Nlcyk7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzMzXSA9IGNtX3BhY2tldHNfc2VudDsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMzRdID0gY21fcGFja2V0c19ib3VuY2VkOwotCXRhcmdldF9zdGF0X3ZhbHVlc1szNV0gPSBjbV9wYWNrZXRzX2NyZWF0ZWQ7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzM2XSA9IGNtX3BhY2tldHNfcmVjZWl2ZWQ7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzM3XSA9IGNtX3BhY2tldHNfZHJvcHBlZDsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMzhdID0gY21fcGFja2V0c19yZXRyYW5zOwotCXRhcmdldF9zdGF0X3ZhbHVlc1szOV0gPSBjbV9saXN0ZW5zX2NyZWF0ZWQ7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzQwXSA9IGNtX2xpc3RlbnNfZGVzdHJveWVkOwotCXRhcmdldF9zdGF0X3ZhbHVlc1s0MV0gPSBjbV9iYWNrbG9nX2Ryb3BzOwotCXRhcmdldF9zdGF0X3ZhbHVlc1s0Ml0gPSBhdG9taWNfcmVhZCgmY21fbG9vcGJhY2tzKTsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbNDNdID0gYXRvbWljX3JlYWQoJmNtX25vZGVzX2NyZWF0ZWQpOwotCXRhcmdldF9zdGF0X3ZhbHVlc1s0NF0gPSBhdG9taWNfcmVhZCgmY21fbm9kZXNfZGVzdHJveWVkKTsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbNDVdID0gYXRvbWljX3JlYWQoJmNtX2FjY2VsX2Ryb3BwZWRfcGt0cyk7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzQ2XSA9IGF0b21pY19yZWFkKCZjbV9yZXNldHNfcmVjdmQpOwotCXRhcmdldF9zdGF0X3ZhbHVlc1s0N10gPSBpbnRfbW9kX3RpbWVyX2luaXQ7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzQ4XSA9IGludF9tb2RfY3FfZGVwdGhfMTsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbNDldID0gaW50X21vZF9jcV9kZXB0aF80OwotCXRhcmdldF9zdGF0X3ZhbHVlc1s1MF0gPSBpbnRfbW9kX2NxX2RlcHRoXzE2OwotCXRhcmdldF9zdGF0X3ZhbHVlc1s1MV0gPSBpbnRfbW9kX2NxX2RlcHRoXzI0OwotCXRhcmdldF9zdGF0X3ZhbHVlc1s1Ml0gPSBpbnRfbW9kX2NxX2RlcHRoXzMyOwotCXRhcmdldF9zdGF0X3ZhbHVlc1s1M10gPSBpbnRfbW9kX2NxX2RlcHRoXzEyODsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbNTRdID0gaW50X21vZF9jcV9kZXB0aF8yNTY7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzU1XSA9IG5lc3ZuaWMtPmxyb19tZ3Iuc3RhdHMuYWdncmVnYXRlZDsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbNTZdID0gbmVzdm5pYy0+bHJvX21nci5zdGF0cy5mbHVzaGVkOwotCXRhcmdldF9zdGF0X3ZhbHVlc1s1N10gPSBuZXN2bmljLT5scm9fbWdyLnN0YXRzLm5vX2Rlc2M7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gbmVzdm5pYy0+bmVzZGV2LT5tYWNfcGF1c2VfZnJhbWVzX3JlY2VpdmVkOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IG5lc2Rldi0+bmVzYWRhcHRlci0+bmljX3J4X2V0aF9yb3V0ZV9lcnI7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gbmVzdm5pYy0+dHhfc3dfZHJvcHBlZDsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBuZXN2bmljLT5zcV9mdWxsOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IG5lc3ZuaWMtPnNlZ21lbnRlZF90c29fcmVxdWVzdHM7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gbmVzdm5pYy0+bmVzZGV2LT5tYWNfcnhfc3ltYm9sX2Vycl9mcmFtZXM7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gbmVzdm5pYy0+bmVzZGV2LT5tYWNfcnhfamFiYmVyX2ZyYW1lczsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBuZXN2bmljLT5uZXNkZXYtPm1hY19yeF9vdmVyc2l6ZWRfZnJhbWVzOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IG5lc3ZuaWMtPm5lc2Rldi0+bWFjX3J4X3Nob3J0X2ZyYW1lczsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBuZXN2bmljLT5lbmRub2RlX25zdGF0X3J4X2Rpc2NhcmQ7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gbmVzdm5pYy0+ZW5kbm9kZV9uc3RhdF9yeF9vY3RldHM7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gbmVzdm5pYy0+ZW5kbm9kZV9uc3RhdF9yeF9mcmFtZXM7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gbmVzdm5pYy0+ZW5kbm9kZV9uc3RhdF90eF9vY3RldHM7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gbmVzdm5pYy0+ZW5kbm9kZV9uc3RhdF90eF9mcmFtZXM7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gbWhfZGV0ZWN0ZWQ7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gbWhfcGF1c2VzX3NlbnQ7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gbmVzdm5pYy0+ZW5kbm9kZV9pcHY0X3RjcF9yZXRyYW5zbWl0czsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBhdG9taWNfcmVhZCgmY21fY29ubmVjdHMpOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGF0b21pY19yZWFkKCZjbV9hY2NlcHRzKTsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBhdG9taWNfcmVhZCgmY21fZGlzY29ubmVjdHMpOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGF0b21pY19yZWFkKCZjbV9jb25uZWN0ZWRzKTsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBhdG9taWNfcmVhZCgmY21fY29ubmVjdF9yZXFzKTsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBhdG9taWNfcmVhZCgmY21fcmVqZWN0cyk7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gYXRvbWljX3JlYWQoJm1vZF9xcF90aW1vdXRzKTsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBhdG9taWNfcmVhZCgmcXBzX2NyZWF0ZWQpOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGF0b21pY19yZWFkKCZzd19xcHNfZGVzdHJveWVkKTsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBhdG9taWNfcmVhZCgmcXBzX2Rlc3Ryb3llZCk7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gYXRvbWljX3JlYWQoJmNtX2Nsb3Nlcyk7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gY21fcGFja2V0c19zZW50OworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGNtX3BhY2tldHNfYm91bmNlZDsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBjbV9wYWNrZXRzX2NyZWF0ZWQ7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gY21fcGFja2V0c19yZWNlaXZlZDsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBjbV9wYWNrZXRzX2Ryb3BwZWQ7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gY21fcGFja2V0c19yZXRyYW5zOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGNtX2xpc3RlbnNfY3JlYXRlZDsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBjbV9saXN0ZW5zX2Rlc3Ryb3llZDsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBjbV9iYWNrbG9nX2Ryb3BzOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGF0b21pY19yZWFkKCZjbV9sb29wYmFja3MpOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGF0b21pY19yZWFkKCZjbV9ub2Rlc19jcmVhdGVkKTsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBhdG9taWNfcmVhZCgmY21fbm9kZXNfZGVzdHJveWVkKTsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBhdG9taWNfcmVhZCgmY21fYWNjZWxfZHJvcHBlZF9wa3RzKTsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBhdG9taWNfcmVhZCgmY21fcmVzZXRzX3JlY3ZkKTsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBpbnRfbW9kX3RpbWVyX2luaXQ7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gaW50X21vZF9jcV9kZXB0aF8xOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGludF9tb2RfY3FfZGVwdGhfNDsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBpbnRfbW9kX2NxX2RlcHRoXzE2OworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGludF9tb2RfY3FfZGVwdGhfMjQ7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gaW50X21vZF9jcV9kZXB0aF8zMjsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBpbnRfbW9kX2NxX2RlcHRoXzEyODsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBpbnRfbW9kX2NxX2RlcHRoXzI1NjsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBuZXN2bmljLT5scm9fbWdyLnN0YXRzLmFnZ3JlZ2F0ZWQ7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gbmVzdm5pYy0+bHJvX21nci5zdGF0cy5mbHVzaGVkOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IG5lc3ZuaWMtPmxyb19tZ3Iuc3RhdHMubm9fZGVzYzsKIAogfQogCkBAIC0xNTY4LDYgKzE1NTEsMTkgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXNhZGFwdGVyLT5waHlfbG9jaywgZmxhZ3MpOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5lc19uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiAJCT0gbmVzX25ldGRldl9vcGVuLAorCS5uZG9fc3RvcAkJPSBuZXNfbmV0ZGV2X3N0b3AsCisJLm5kb19zdGFydF94bWl0IAk9IG5lc19uZXRkZXZfc3RhcnRfeG1pdCwKKwkubmRvX2dldF9zdGF0cwkJPSBuZXNfbmV0ZGV2X2dldF9zdGF0cywKKwkubmRvX3R4X3RpbWVvdXQgCT0gbmVzX25ldGRldl90eF90aW1lb3V0LAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gbmVzX25ldGRldl9zZXRfbWFjX2FkZHJlc3MsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBuZXNfbmV0ZGV2X3NldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gbmVzX25ldGRldl9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKKwkubmRvX3ZsYW5fcnhfcmVnaXN0ZXIgCT0gbmVzX25ldGRldl92bGFuX3J4X3JlZ2lzdGVyLAorfTsKIAogLyoqCiAgKiBuZXNfbmV0ZGV2X2luaXQgLSBpbml0aWFsaXplIG5ldHdvcmsgZGV2aWNlCkBAIC0xNTc2LDcgKzE1NzIsNyBAQAogCQl2b2lkIF9faW9tZW0gKm1taW9fYWRkcikKIHsKIAl1NjQgdTY0dGVtcDsKLQlzdHJ1Y3QgbmVzX3ZuaWMgKm5lc3ZuaWMgPSBOVUxMOworCXN0cnVjdCBuZXNfdm5pYyAqbmVzdm5pYzsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OwogCXN0cnVjdCBuaWNfcXBfbWFwICpjdXJyX3FwX21hcDsKIAl1MzIgdTMydGVtcDsKQEAgLTE1ODgsMjIgKzE1ODQsMTIgQEAKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAibmVzdm5pYyBldGhlcmRldiBhbGxvYyBmYWlsZWQiKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQorCW5lc3ZuaWMgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCiAJbmVzX2RlYnVnKE5FU19EQkdfSU5JVCwgIm5ldGRldiA9ICVwLCAlc1xuIiwgbmV0ZGV2LCBuZXRkZXYtPm5hbWUpOwogCiAJU0VUX05FVERFVl9ERVYobmV0ZGV2LCAmbmVzZGV2LT5wY2lkZXYtPmRldik7CiAKLQluZXN2bmljID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQltZW1zZXQobmVzdm5pYywgMCwgc2l6ZW9mKCpuZXN2bmljKSk7Ci0KLQluZXRkZXYtPm9wZW4gPSBuZXNfbmV0ZGV2X29wZW47Ci0JbmV0ZGV2LT5zdG9wID0gbmVzX25ldGRldl9zdG9wOwotCW5ldGRldi0+aGFyZF9zdGFydF94bWl0ID0gbmVzX25ldGRldl9zdGFydF94bWl0OwotCW5ldGRldi0+Z2V0X3N0YXRzID0gbmVzX25ldGRldl9nZXRfc3RhdHM7Ci0JbmV0ZGV2LT50eF90aW1lb3V0ID0gbmVzX25ldGRldl90eF90aW1lb3V0OwotCW5ldGRldi0+c2V0X21hY19hZGRyZXNzID0gbmVzX25ldGRldl9zZXRfbWFjX2FkZHJlc3M7Ci0JbmV0ZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBuZXNfbmV0ZGV2X3NldF9tdWx0aWNhc3RfbGlzdDsKLQluZXRkZXYtPmNoYW5nZV9tdHUgPSBuZXNfbmV0ZGV2X2NoYW5nZV9tdHU7CiAJbmV0ZGV2LT53YXRjaGRvZ190aW1lbyA9IE5FU19UWF9USU1FT1VUOwogCW5ldGRldi0+aXJxID0gbmVzZGV2LT5wY2lkZXYtPmlycTsKIAluZXRkZXYtPm10dSA9IEVUSF9EQVRBX0xFTjsKQEAgLTE2MTEsMTIgKzE1OTcsMTEgQEAKIAluZXRkZXYtPmFkZHJfbGVuID0gRVRIX0FMRU47CiAJbmV0ZGV2LT50eXBlID0gQVJQSFJEX0VUSEVSOwogCW5ldGRldi0+ZmVhdHVyZXMgPSBORVRJRl9GX0hJR0hETUE7CisJbmV0ZGV2LT5uZXRkZXZfb3BzID0gJm5lc19uZXRkZXZfb3BzOwogCW5ldGRldi0+ZXRodG9vbF9vcHMgPSAmbmVzX2V0aHRvb2xfb3BzOwogCW5ldGlmX25hcGlfYWRkKG5ldGRldiwgJm5lc3ZuaWMtPm5hcGksIG5lc19uZXRkZXZfcG9sbCwgMTI4KTsKIAluZXNfZGVidWcoTkVTX0RCR19JTklULCAiRW5hYmxpbmcgVkxBTiBJbnNlcnQvRGVsZXRlLlxuIik7CiAJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hXX1ZMQU5fVFggfCBORVRJRl9GX0hXX1ZMQU5fUlg7Ci0JbmV0ZGV2LT52bGFuX3J4X3JlZ2lzdGVyID0gbmVzX25ldGRldl92bGFuX3J4X3JlZ2lzdGVyOwotCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9MTFRYOwogCiAJLyogRmlsbCBpbiB0aGUgcG9ydCBzdHJ1Y3R1cmUgKi8KIAluZXN2bmljLT5uZXRkZXYgPSBuZXRkZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc191c2VyLmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc191c2VyLmgKaW5kZXggZTY0MzA2Yi4uY2M5MGMxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfdXNlci5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX3VzZXIuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA4IE5ldEVmZmVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA5IEludGVsLU5FLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChjKSAyMDA1IFRvcHNwaW4gQ29tbXVuaWNhdGlvbnMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChjKSAyMDA1IENpc2NvIFN5c3RlbXMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChjKSAyMDA1IE9wZW4gR3JpZCBDb21wdXRpbmcsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX3V0aWxzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc191dGlscy5jCmluZGV4IDZmM2JjMWIuLmEyODIwMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX3V0aWxzLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfdXRpbHMuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA4IE5ldEVmZmVjdCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAwOSBJbnRlbC1ORSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bwogICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfdmVyYnMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX3ZlcmJzLmMKaW5kZXggZDkzYTY1Ni4uN2U1YjViYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfdmVyYnMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc192ZXJicy5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAwNiAtIDIwMDggTmV0RWZmZWN0LCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA5IEludGVsLU5FLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCiAgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCkBAIC01NTEsNiArNTUxLDcgQEAKIAlzdHJ1Y3QgbmVzX2RldmljZSAqbmVzZGV2ID0gbmVzdm5pYy0+bmVzZGV2OwogCXN0cnVjdCBuZXNfYWRhcHRlciAqbmVzYWRhcHRlciA9IG5lc2Rldi0+bmVzYWRhcHRlcjsKIAlpbnQgaSA9IDA7CisJaW50IHJjOwogCiAJLyogZnJlZSB0aGUgcmVzb3VyY2VzICovCiAJaWYgKG5lc2Ztci0+bGVhZl9wYmxfY250ID09IDApIHsKQEAgLTU3Miw3ICs1NzMsOSBAQAogCW5lc21yLT5pYm13LnJrZXkgPSBpYmZtci0+cmtleTsKIAluZXNtci0+aWJtdy51b2JqZWN0ID0gTlVMTDsKIAotCWlmIChuZXNmbXItPm5lc21yLnBibHNfdXNlZCAhPSAwKSB7CisJcmMgPSBuZXNfZGVhbGxvY19tdygmbmVzbXItPmlibXcpOworCisJaWYgKChyYyA9PSAwKSAmJiAobmVzZm1yLT5uZXNtci5wYmxzX3VzZWQgIT0gMCkpIHsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJm5lc2FkYXB0ZXItPnBibF9sb2NrLCBmbGFncyk7CiAJCWlmIChuZXNmbXItPm5lc21yLnBibF80aykgewogCQkJbmVzYWRhcHRlci0+ZnJlZV80a3BibCArPSBuZXNmbXItPm5lc21yLnBibHNfdXNlZDsKQEAgLTU4NCw3ICs1ODcsNyBAQAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXNhZGFwdGVyLT5wYmxfbG9jaywgZmxhZ3MpOwogCX0KIAotCXJldHVybiBuZXNfZGVhbGxvY19tdygmbmVzbXItPmlibXcpOworCXJldHVybiByYzsKIH0KIAogCkBAIC0xODg2LDIxICsxODg5LDc1IEBACiAJcmV0dXJuIHJldDsKIH0KIAorLyoqCisgKiByb290XzI1NgorICovCitzdGF0aWMgdTMyIHJvb3RfMjU2KHN0cnVjdCBuZXNfZGV2aWNlICpuZXNkZXYsCisJCSAgICBzdHJ1Y3QgbmVzX3Jvb3RfdnBibCAqcm9vdF92cGJsLAorCQkgICAgc3RydWN0IG5lc19yb290X3ZwYmwgKm5ld19yb290LAorCQkgICAgdTE2IHBibF9jb3VudF80aywKKwkJICAgIHUxNiBwYmxfY291bnRfMjU2KQoreworCXU2NCBsZWFmX3BibDsKKwlpbnQgaSwgaiwgazsKKworCWlmIChwYmxfY291bnRfNGsgPT0gMSkgeworCQluZXdfcm9vdC0+cGJsX3ZiYXNlID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQobmVzZGV2LT5wY2lkZXYsCisJCQkJCQk1MTIsICZuZXdfcm9vdC0+cGJsX3BiYXNlKTsKKworCQlpZiAobmV3X3Jvb3QtPnBibF92YmFzZSA9PSBOVUxMKQorCQkJcmV0dXJuIDA7CisKKwkJbGVhZl9wYmwgPSAodTY0KXJvb3RfdnBibC0+cGJsX3BiYXNlOworCQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgeworCQkJbmV3X3Jvb3QtPnBibF92YmFzZVtpXS5wYV9sb3cgPQorCQkJCWNwdV90b19sZTMyKCh1MzIpbGVhZl9wYmwpOworCQkJbmV3X3Jvb3QtPnBibF92YmFzZVtpXS5wYV9oaWdoID0KKwkJCQljcHVfdG9fbGUzMigodTMyKSgoKCh1NjQpbGVhZl9wYmwpID4+IDMyKSkpOworCQkJbGVhZl9wYmwgKz0gMjU2OworCQl9CisJfSBlbHNlIHsKKwkJZm9yIChpID0gMzsgaSA+PSAwOyBpLS0pIHsKKwkJCWogPSBpICogMTY7CisJCQlyb290X3ZwYmwtPnBibF92YmFzZVtqXSA9IHJvb3RfdnBibC0+cGJsX3ZiYXNlW2ldOworCQkJbGVhZl9wYmwgPSBsZTMyX3RvX2NwdShyb290X3ZwYmwtPnBibF92YmFzZVtqXS5wYV9sb3cpICsKKwkJCSAgICAoKCh1NjQpbGUzMl90b19jcHUocm9vdF92cGJsLT5wYmxfdmJhc2Vbal0ucGFfaGlnaCkpCisJCQkJPDwgMzIpOworCQkJZm9yIChrID0gMTsgayA8IDE2OyBrKyspIHsKKwkJCQlsZWFmX3BibCArPSAyNTY7CisJCQkJcm9vdF92cGJsLT5wYmxfdmJhc2VbaiArIGtdLnBhX2xvdyA9CisJCQkJCQljcHVfdG9fbGUzMigodTMyKWxlYWZfcGJsKTsKKwkJCQlyb290X3ZwYmwtPnBibF92YmFzZVtqICsga10ucGFfaGlnaCA9CisJCQkJICAgIGNwdV90b19sZTMyKCh1MzIpKCgoKHU2NClsZWFmX3BibCkgPj4gMzIpKSk7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gMTsKK30KKwogCiAvKioKICAqIG5lc19yZWdfbXIKICAqLwogc3RhdGljIGludCBuZXNfcmVnX21yKHN0cnVjdCBuZXNfZGV2aWNlICpuZXNkZXYsIHN0cnVjdCBuZXNfcGQgKm5lc3BkLAogCQl1MzIgc3RhZywgdTY0IHJlZ2lvbl9sZW5ndGgsIHN0cnVjdCBuZXNfcm9vdF92cGJsICpyb290X3ZwYmwsCi0JCWRtYV9hZGRyX3Qgc2luZ2xlX2J1ZmZlciwgdTE2IHBibF9jb3VudCwgdTE2IHJlc2lkdWFsX3BhZ2VfY291bnQsCi0JCWludCBhY2MsIHU2NCAqaW92YV9zdGFydCkKKwkJZG1hX2FkZHJfdCBzaW5nbGVfYnVmZmVyLCB1MTYgcGJsX2NvdW50XzRrLAorCQl1MTYgcmVzaWR1YWxfcGFnZV9jb3VudF80aywgaW50IGFjYywgdTY0ICppb3ZhX3N0YXJ0LAorCQl1MTYgKmFjdHVhbF9wYmxfY250LCB1OCAqdXNlZF80a19wYmxzKQogewogCXN0cnVjdCBuZXNfaHdfY3FwX3dxZSAqY3FwX3dxZTsKIAlzdHJ1Y3QgbmVzX2NxcF9yZXF1ZXN0ICpjcXBfcmVxdWVzdDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXQ7CiAJc3RydWN0IG5lc19hZGFwdGVyICpuZXNhZGFwdGVyID0gbmVzZGV2LT5uZXNhZGFwdGVyOwotCS8qIGludCBjb3VudDsgKi8KKwl1aW50IHBnX2NudCA9IDA7CisJdTE2IHBibF9jb3VudF8yNTY7CisJdTE2IHBibF9jb3VudCA9IDA7CisJdTggIHVzZV8yNTZfcGJscyA9IDA7CisJdTggIHVzZV80a19wYmxzID0gMDsKKwl1MTYgdXNlX3R3b19sZXZlbCA9IChwYmxfY291bnRfNGsgPiAxKSA/IDEgOiAwOworCXN0cnVjdCBuZXNfcm9vdF92cGJsIG5ld19yb290ID0gezAsIDAsIDB9OwogCXUzMiBvcGNvZGUgPSAwOwogCXUxNiBtYWpvcl9jb2RlOwogCkBAIC0xOTEzLDQxICsxOTcwLDcwIEBACiAJY3FwX3JlcXVlc3QtPndhaXRpbmcgPSAxOwogCWNxcF93cWUgPSAmY3FwX3JlcXVlc3QtPmNxcF93cWU7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmbmVzYWRhcHRlci0+cGJsX2xvY2ssIGZsYWdzKTsKLQkvKiB0cmFjayBQQkwgcmVzb3VyY2VzICovCi0JaWYgKHBibF9jb3VudCAhPSAwKSB7Ci0JCWlmIChwYmxfY291bnQgPiAxKSB7Ci0JCQkvKiBUd28gbGV2ZWwgUEJMICovCi0JCQlpZiAoKHBibF9jb3VudCsxKSA+IG5lc2FkYXB0ZXItPmZyZWVfNGtwYmwpIHsKLQkJCQluZXNfZGVidWcoTkVTX0RCR19NUiwgIk91dCBvZiA0S0IgUGJscyBmb3IgdHdvIGxldmVsIHJlcXVlc3QuXG4iKTsKLQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXNhZGFwdGVyLT5wYmxfbG9jaywgZmxhZ3MpOwotCQkJCW5lc19mcmVlX2NxcF9yZXF1ZXN0KG5lc2RldiwgY3FwX3JlcXVlc3QpOwotCQkJCXJldHVybiAtRU5PTUVNOwotCQkJfSBlbHNlIHsKLQkJCQluZXNhZGFwdGVyLT5mcmVlXzRrcGJsIC09IHBibF9jb3VudCsxOwotCQkJfQotCQl9IGVsc2UgaWYgKHJlc2lkdWFsX3BhZ2VfY291bnQgPiAzMikgewotCQkJaWYgKHBibF9jb3VudCA+IG5lc2FkYXB0ZXItPmZyZWVfNGtwYmwpIHsKLQkJCQluZXNfZGVidWcoTkVTX0RCR19NUiwgIk91dCBvZiA0S0IgUGJscy5cbiIpOwotCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5lc2FkYXB0ZXItPnBibF9sb2NrLCBmbGFncyk7Ci0JCQkJbmVzX2ZyZWVfY3FwX3JlcXVlc3QobmVzZGV2LCBjcXBfcmVxdWVzdCk7Ci0JCQkJcmV0dXJuIC1FTk9NRU07Ci0JCQl9IGVsc2UgewotCQkJCW5lc2FkYXB0ZXItPmZyZWVfNGtwYmwgLT0gcGJsX2NvdW50OworCWlmIChwYmxfY291bnRfNGspIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJm5lc2FkYXB0ZXItPnBibF9sb2NrLCBmbGFncyk7CisKKwkJcGdfY250ID0gKChwYmxfY291bnRfNGsgLSAxKSAqIDUxMikgKyByZXNpZHVhbF9wYWdlX2NvdW50XzRrOworCQlwYmxfY291bnRfMjU2ID0gKHBnX2NudCArIDMxKSAvIDMyOworCQlpZiAocGdfY250IDw9IDMyKSB7CisJCQlpZiAocGJsX2NvdW50XzI1NiA8PSBuZXNhZGFwdGVyLT5mcmVlXzI1NnBibCkKKwkJCQl1c2VfMjU2X3BibHMgPSAxOworCQkJZWxzZSBpZiAocGJsX2NvdW50XzRrIDw9IG5lc2FkYXB0ZXItPmZyZWVfNGtwYmwpCisJCQkJdXNlXzRrX3BibHMgPSAxOworCQl9IGVsc2UgaWYgKHBnX2NudCA8PSAyMDQ4KSB7CisJCQlpZiAoKChwYmxfY291bnRfNGsgKyB1c2VfdHdvX2xldmVsKSA8PSBuZXNhZGFwdGVyLT5mcmVlXzRrcGJsKSAmJgorCQkJICAgIChuZXNhZGFwdGVyLT5mcmVlXzRrcGJsID4gKG5lc2FkYXB0ZXItPm1heF80a3BibCA+PiAxKSkpIHsKKwkJCQl1c2VfNGtfcGJscyA9IDE7CisJCQl9IGVsc2UgaWYgKChwYmxfY291bnRfMjU2ICsgMSkgPD0gbmVzYWRhcHRlci0+ZnJlZV8yNTZwYmwpIHsKKwkJCQl1c2VfMjU2X3BibHMgPSAxOworCQkJCXVzZV90d29fbGV2ZWwgPSAxOworCQkJfSBlbHNlIGlmICgocGJsX2NvdW50XzRrICsgdXNlX3R3b19sZXZlbCkgPD0gbmVzYWRhcHRlci0+ZnJlZV80a3BibCkgeworCQkJCXVzZV80a19wYmxzID0gMTsKIAkJCX0KIAkJfSBlbHNlIHsKLQkJCWlmIChwYmxfY291bnQgPiBuZXNhZGFwdGVyLT5mcmVlXzI1NnBibCkgewotCQkJCW5lc19kZWJ1ZyhORVNfREJHX01SLCAiT3V0IG9mIDI1NkIgUGJscy5cbiIpOwotCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5lc2FkYXB0ZXItPnBibF9sb2NrLCBmbGFncyk7Ci0JCQkJbmVzX2ZyZWVfY3FwX3JlcXVlc3QobmVzZGV2LCBjcXBfcmVxdWVzdCk7Ci0JCQkJcmV0dXJuIC1FTk9NRU07Ci0JCQl9IGVsc2UgewotCQkJCW5lc2FkYXB0ZXItPmZyZWVfMjU2cGJsIC09IHBibF9jb3VudDsKLQkJCX0KKwkJCWlmICgocGJsX2NvdW50XzRrICsgMSkgPD0gbmVzYWRhcHRlci0+ZnJlZV80a3BibCkKKwkJCQl1c2VfNGtfcGJscyA9IDE7CiAJCX0KKworCQlpZiAodXNlXzI1Nl9wYmxzKSB7CisJCQlwYmxfY291bnQgPSBwYmxfY291bnRfMjU2OworCQkJbmVzYWRhcHRlci0+ZnJlZV8yNTZwYmwgLT0gcGJsX2NvdW50ICsgdXNlX3R3b19sZXZlbDsKKwkJfSBlbHNlIGlmICh1c2VfNGtfcGJscykgeworCQkJcGJsX2NvdW50ID0gIHBibF9jb3VudF80azsKKwkJCW5lc2FkYXB0ZXItPmZyZWVfNGtwYmwgLT0gcGJsX2NvdW50ICsgdXNlX3R3b19sZXZlbDsKKwkJfSBlbHNlIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5lc2FkYXB0ZXItPnBibF9sb2NrLCBmbGFncyk7CisJCQluZXNfZGVidWcoTkVTX0RCR19NUiwgIk91dCBvZiBQYmxzXG4iKTsKKwkJCW5lc19mcmVlX2NxcF9yZXF1ZXN0KG5lc2RldiwgY3FwX3JlcXVlc3QpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXNhZGFwdGVyLT5wYmxfbG9jaywgZmxhZ3MpOwogCX0KIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5lc2FkYXB0ZXItPnBibF9sb2NrLCBmbGFncyk7CisJaWYgKHVzZV8yNTZfcGJscyAmJiB1c2VfdHdvX2xldmVsKSB7CisJCWlmIChyb290XzI1NihuZXNkZXYsIHJvb3RfdnBibCwgJm5ld19yb290LCBwYmxfY291bnRfNGssIHBibF9jb3VudF8yNTYpID09IDEpIHsKKwkJCWlmIChuZXdfcm9vdC5wYmxfcGJhc2UgIT0gMCkKKwkJCQlyb290X3ZwYmwgPSAmbmV3X3Jvb3Q7CisJCX0gZWxzZSB7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmbmVzYWRhcHRlci0+cGJsX2xvY2ssIGZsYWdzKTsKKwkJCW5lc2FkYXB0ZXItPmZyZWVfMjU2cGJsICs9IHBibF9jb3VudF8yNTYgKyB1c2VfdHdvX2xldmVsOworCQkJdXNlXzI1Nl9wYmxzID0gMDsKKworCQkJaWYgKHBibF9jb3VudF80ayA9PSAxKQorCQkJCXVzZV90d29fbGV2ZWwgPSAwOworCQkJcGJsX2NvdW50ID0gcGJsX2NvdW50XzRrOworCisJCQlpZiAoKHBibF9jb3VudF80ayArIHVzZV90d29fbGV2ZWwpIDw9IG5lc2FkYXB0ZXItPmZyZWVfNGtwYmwpIHsKKwkJCQluZXNhZGFwdGVyLT5mcmVlXzRrcGJsIC09IHBibF9jb3VudCArIHVzZV90d29fbGV2ZWw7CisJCQkJdXNlXzRrX3BibHMgPSAxOworCQkJfQorCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzYWRhcHRlci0+cGJsX2xvY2ssIGZsYWdzKTsKKworCQkJaWYgKHVzZV80a19wYmxzID09IDApCisJCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwl9CiAKIAlvcGNvZGUgPSBORVNfQ1FQX1JFR0lTVEVSX1NUQUcgfCBORVNfQ1FQX1NUQUdfUklHSFRTX0xPQ0FMX1JFQUQgfAogCQkJCQlORVNfQ1FQX1NUQUdfVkFfVE8gfCBORVNfQ1FQX1NUQUdfTVI7CkBAIC0xOTc2LDEwICsyMDYyLDkgQEAKIAl9IGVsc2UgewogCQlzZXRfd3FlXzY0Yml0X3ZhbHVlKGNxcF93cWUtPndxZV93b3JkcywgTkVTX0NRUF9TVEFHX1dRRV9QQV9MT1dfSURYLCByb290X3ZwYmwtPnBibF9wYmFzZSk7CiAJCXNldF93cWVfMzJiaXRfdmFsdWUoY3FwX3dxZS0+d3FlX3dvcmRzLCBORVNfQ1FQX1NUQUdfV1FFX1BCTF9CTEtfQ09VTlRfSURYLCBwYmxfY291bnQpOwotCQlzZXRfd3FlXzMyYml0X3ZhbHVlKGNxcF93cWUtPndxZV93b3JkcywgTkVTX0NRUF9TVEFHX1dRRV9QQkxfTEVOX0lEWCwKLQkJCQkoKChwYmxfY291bnQgLSAxKSAqIDQwOTYpICsgKHJlc2lkdWFsX3BhZ2VfY291bnQqOCkpKTsKKwkJc2V0X3dxZV8zMmJpdF92YWx1ZShjcXBfd3FlLT53cWVfd29yZHMsIE5FU19DUVBfU1RBR19XUUVfUEJMX0xFTl9JRFgsIChwZ19jbnQgKiA4KSk7CiAKLQkJaWYgKChwYmxfY291bnQgPiAxKSB8fCAocmVzaWR1YWxfcGFnZV9jb3VudCA+IDMyKSkKKwkJaWYgKHVzZV80a19wYmxzKQogCQkJY3FwX3dxZS0+d3FlX3dvcmRzW05FU19DUVBfV1FFX09QQ09ERV9JRFhdIHw9IGNwdV90b19sZTMyKE5FU19DUVBfU1RBR19QQkxfQkxLX1NJWkUpOwogCX0KIAliYXJyaWVyKCk7CkBAIC0xOTk2LDEzICsyMDgxLDI1IEBACiAJbWFqb3JfY29kZSA9IGNxcF9yZXF1ZXN0LT5tYWpvcl9jb2RlOwogCW5lc19wdXRfY3FwX3JlcXVlc3QobmVzZGV2LCBjcXBfcmVxdWVzdCk7CiAKKwlpZiAoKCFyZXQgfHwgbWFqb3JfY29kZSkgJiYgcGJsX2NvdW50ICE9IDApIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJm5lc2FkYXB0ZXItPnBibF9sb2NrLCBmbGFncyk7CisJCWlmICh1c2VfMjU2X3BibHMpCisJCQluZXNhZGFwdGVyLT5mcmVlXzI1NnBibCArPSBwYmxfY291bnQgKyB1c2VfdHdvX2xldmVsOworCQllbHNlIGlmICh1c2VfNGtfcGJscykKKwkJCW5lc2FkYXB0ZXItPmZyZWVfNGtwYmwgKz0gcGJsX2NvdW50ICsgdXNlX3R3b19sZXZlbDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzYWRhcHRlci0+cGJsX2xvY2ssIGZsYWdzKTsKKwl9CisJaWYgKG5ld19yb290LnBibF9wYmFzZSkKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChuZXNkZXYtPnBjaWRldiwgNTEyLCBuZXdfcm9vdC5wYmxfdmJhc2UsCisJCQkJICAgIG5ld19yb290LnBibF9wYmFzZSk7CisKIAlpZiAoIXJldCkKIAkJcmV0dXJuIC1FVElNRTsKIAllbHNlIGlmIChtYWpvcl9jb2RlKQogCQlyZXR1cm4gLUVJTzsKLQllbHNlCi0JCXJldHVybiAwOwogCisJKmFjdHVhbF9wYmxfY250ID0gcGJsX2NvdW50ICsgdXNlX3R3b19sZXZlbDsKKwkqdXNlZF80a19wYmxzID0gdXNlXzRrX3BibHM7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIxNjcsMTggKzIyNjQsMTQgQEAKIAkJcGJsX2NvdW50ID0gcm9vdF9wYmxfaW5kZXg7CiAJfQogCXJldCA9IG5lc19yZWdfbXIobmVzZGV2LCBuZXNwZCwgc3RhZywgcmVnaW9uX2xlbmd0aCwgJnJvb3RfdnBibCwKLQkJCWJ1ZmZlcl9saXN0WzBdLmFkZHIsIHBibF9jb3VudCwgKHUxNiljdXJfcGJsX2luZGV4LCBhY2MsIGlvdmFfc3RhcnQpOworCQkJYnVmZmVyX2xpc3RbMF0uYWRkciwgcGJsX2NvdW50LCAodTE2KWN1cl9wYmxfaW5kZXgsIGFjYywgaW92YV9zdGFydCwKKwkJCSZuZXNtci0+cGJsc191c2VkLCAmbmVzbXItPnBibF80ayk7CiAKIAlpZiAocmV0ID09IDApIHsKIAkJbmVzbXItPmlibXIucmtleSA9IHN0YWc7CiAJCW5lc21yLT5pYm1yLmxrZXkgPSBzdGFnOwogCQluZXNtci0+bW9kZSA9IElXTkVTX01FTVJFR19UWVBFX01FTTsKIAkJaWJtciA9ICZuZXNtci0+aWJtcjsKLQkJbmVzbXItPnBibF80ayA9ICgocGJsX2NvdW50ID4gMSkgfHwgKGN1cl9wYmxfaW5kZXggPiAzMikpID8gMSA6IDA7Ci0JCW5lc21yLT5wYmxzX3VzZWQgPSBwYmxfY291bnQ7Ci0JCWlmIChwYmxfY291bnQgPiAxKSB7Ci0JCQluZXNtci0+cGJsc191c2VkKys7Ci0JCX0KIAl9IGVsc2UgewogCQlrZnJlZShuZXNtcik7CiAJCWlibXIgPSBFUlJfUFRSKC1FTk9NRU0pOwpAQCAtMjQ1Niw4ICsyNTQ5LDkgQEAKIAkJCQkJc3RhZywgKHVuc2lnbmVkIGludClpb3ZhX3N0YXJ0LAogCQkJCQkodW5zaWduZWQgaW50KXJlZ2lvbl9sZW5ndGgsIHN0YWdfaW5kZXgsCiAJCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcmVnaW9uLT5sZW5ndGgsIHBibF9jb3VudCk7Ci0JCQlyZXQgPSBuZXNfcmVnX21yKCBuZXNkZXYsIG5lc3BkLCBzdGFnLCByZWdpb24tPmxlbmd0aCwgJnJvb3RfdnBibCwKLQkJCQkJZmlyc3RfZG1hX2FkZHIsIHBibF9jb3VudCwgKHUxNiljdXJfcGJsX2luZGV4LCBhY2MsICZpb3ZhX3N0YXJ0KTsKKwkJCXJldCA9IG5lc19yZWdfbXIobmVzZGV2LCBuZXNwZCwgc3RhZywgcmVnaW9uLT5sZW5ndGgsICZyb290X3ZwYmwsCisJCQkJCSBmaXJzdF9kbWFfYWRkciwgcGJsX2NvdW50LCAodTE2KWN1cl9wYmxfaW5kZXgsIGFjYywKKwkJCQkJICZpb3ZhX3N0YXJ0LCAmbmVzbXItPnBibHNfdXNlZCwgJm5lc21yLT5wYmxfNGspOwogCiAJCQluZXNfZGVidWcoTkVTX0RCR19NUiwgInJldD0lZFxuIiwgcmV0KTsKIApAQCAtMjQ2NiwxMSArMjU2MCw2IEBACiAJCQkJbmVzbXItPmlibXIubGtleSA9IHN0YWc7CiAJCQkJbmVzbXItPm1vZGUgPSBJV05FU19NRU1SRUdfVFlQRV9NRU07CiAJCQkJaWJtciA9ICZuZXNtci0+aWJtcjsKLQkJCQluZXNtci0+cGJsXzRrID0gKChwYmxfY291bnQgPiAxKSB8fCAoY3VyX3BibF9pbmRleCA+IDMyKSkgPyAxIDogMDsKLQkJCQluZXNtci0+cGJsc191c2VkID0gcGJsX2NvdW50OwotCQkJCWlmIChwYmxfY291bnQgPiAxKSB7Ci0JCQkJCW5lc21yLT5wYmxzX3VzZWQrKzsKLQkJCQl9CiAJCQl9IGVsc2UgewogCQkJCWliX3VtZW1fcmVsZWFzZShyZWdpb24pOwogCQkJCWtmcmVlKG5lc21yKTsKQEAgLTI2MDksMjQgKzI2OTgsNiBAQAogCWNxcF9yZXF1ZXN0LT53YWl0aW5nID0gMTsKIAljcXBfd3FlID0gJmNxcF9yZXF1ZXN0LT5jcXBfd3FlOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJm5lc2FkYXB0ZXItPnBibF9sb2NrLCBmbGFncyk7Ci0JaWYgKG5lc21yLT5wYmxzX3VzZWQgIT0gMCkgewotCQlpZiAobmVzbXItPnBibF80aykgewotCQkJbmVzYWRhcHRlci0+ZnJlZV80a3BibCArPSBuZXNtci0+cGJsc191c2VkOwotCQkJaWYgKG5lc2FkYXB0ZXItPmZyZWVfNGtwYmwgPiBuZXNhZGFwdGVyLT5tYXhfNGtwYmwpIHsKLQkJCQlwcmludGsoS0VSTl9FUlIgUEZYICJmcmVlIDRLQiBQQkxzKCV1KSBoYXMgZXhjZWVkZWQgdGhlIG1heCgldSlcbiIsCi0JCQkJCQluZXNhZGFwdGVyLT5mcmVlXzRrcGJsLCBuZXNhZGFwdGVyLT5tYXhfNGtwYmwpOwotCQkJfQotCQl9IGVsc2UgewotCQkJbmVzYWRhcHRlci0+ZnJlZV8yNTZwYmwgKz0gbmVzbXItPnBibHNfdXNlZDsKLQkJCWlmIChuZXNhZGFwdGVyLT5mcmVlXzI1NnBibCA+IG5lc2FkYXB0ZXItPm1heF8yNTZwYmwpIHsKLQkJCQlwcmludGsoS0VSTl9FUlIgUEZYICJmcmVlIDI1NkIgUEJMcygldSkgaGFzIGV4Y2VlZGVkIHRoZSBtYXgoJXUpXG4iLAotCQkJCQkJbmVzYWRhcHRlci0+ZnJlZV8yNTZwYmwsIG5lc2FkYXB0ZXItPm1heF8yNTZwYmwpOwotCQkJfQotCQl9Ci0JfQotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzYWRhcHRlci0+cGJsX2xvY2ssIGZsYWdzKTsKIAluZXNfZmlsbF9pbml0X2NxcF93cWUoY3FwX3dxZSwgbmVzZGV2KTsKIAlzZXRfd3FlXzMyYml0X3ZhbHVlKGNxcF93cWUtPndxZV93b3JkcywgTkVTX0NRUF9XUUVfT1BDT0RFX0lEWCwKIAkJCU5FU19DUVBfREVBTExPQ0FURV9TVEFHIHwgTkVTX0NRUF9TVEFHX1ZBX1RPIHwKQEAgLTI2NDQsMTEgKzI3MTUsNiBAQAogCQkJIiBDUVAgTWFqb3I6TWlub3IgY29kZXMgPSAweCUwNFg6MHglMDRYXG4iLAogCQkJaWJfbXItPnJrZXksIHJldCwgY3FwX3JlcXVlc3QtPm1ham9yX2NvZGUsIGNxcF9yZXF1ZXN0LT5taW5vcl9jb2RlKTsKIAotCW5lc19mcmVlX3Jlc291cmNlKG5lc2FkYXB0ZXIsIG5lc2FkYXB0ZXItPmFsbG9jYXRlZF9tcnMsCi0JCQkoaWJfbXItPnJrZXkgJiAweDBmZmZmZjAwKSA+PiA4KTsKLQotCWtmcmVlKG5lc21yKTsKLQogCW1ham9yX2NvZGUgPSBjcXBfcmVxdWVzdC0+bWFqb3JfY29kZTsKIAltaW5vcl9jb2RlID0gY3FwX3JlcXVlc3QtPm1pbm9yX2NvZGU7CiAKQEAgLTI2NjQsOCArMjczMCwzMyBAQAogCQkJCSIgdG8gZGVzdHJveSBTVGFnLCBpYl9tcj0lcCwgcmtleSA9IDB4JTA4WFxuIiwKIAkJCQltYWpvcl9jb2RlLCBtaW5vcl9jb2RlLCBpYl9tciwgaWJfbXItPnJrZXkpOwogCQlyZXR1cm4gLUVJTzsKLQl9IGVsc2UKLQkJcmV0dXJuIDA7CisJfQorCisJaWYgKG5lc21yLT5wYmxzX3VzZWQgIT0gMCkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmbmVzYWRhcHRlci0+cGJsX2xvY2ssIGZsYWdzKTsKKwkJaWYgKG5lc21yLT5wYmxfNGspIHsKKwkJCW5lc2FkYXB0ZXItPmZyZWVfNGtwYmwgKz0gbmVzbXItPnBibHNfdXNlZDsKKwkJCWlmIChuZXNhZGFwdGVyLT5mcmVlXzRrcGJsID4gbmVzYWRhcHRlci0+bWF4XzRrcGJsKQorCQkJCXByaW50ayhLRVJOX0VSUiBQRlggImZyZWUgNEtCIFBCTHMoJXUpIGhhcyAiCisJCQkJCSJleGNlZWRlZCB0aGUgbWF4KCV1KVxuIiwKKwkJCQkJbmVzYWRhcHRlci0+ZnJlZV80a3BibCwKKwkJCQkJbmVzYWRhcHRlci0+bWF4XzRrcGJsKTsKKwkJfSBlbHNlIHsKKwkJCW5lc2FkYXB0ZXItPmZyZWVfMjU2cGJsICs9IG5lc21yLT5wYmxzX3VzZWQ7CisJCQlpZiAobmVzYWRhcHRlci0+ZnJlZV8yNTZwYmwgPiBuZXNhZGFwdGVyLT5tYXhfMjU2cGJsKQorCQkJCXByaW50ayhLRVJOX0VSUiBQRlggImZyZWUgMjU2QiBQQkxzKCV1KSBoYXMgIgorCQkJCQkiZXhjZWVkZWQgdGhlIG1heCgldSlcbiIsCisJCQkJCW5lc2FkYXB0ZXItPmZyZWVfMjU2cGJsLAorCQkJCQluZXNhZGFwdGVyLT5tYXhfMjU2cGJsKTsKKwkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXNhZGFwdGVyLT5wYmxfbG9jaywgZmxhZ3MpOworCX0KKwluZXNfZnJlZV9yZXNvdXJjZShuZXNhZGFwdGVyLCBuZXNhZGFwdGVyLT5hbGxvY2F0ZWRfbXJzLAorCQkJKGliX21yLT5ya2V5ICYgMHgwZmZmZmYwMCkgPj4gOCk7CisKKwlrZnJlZShuZXNtcik7CisKKwlyZXR1cm4gMDsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc192ZXJicy5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfdmVyYnMuaAppbmRleCBhZTBjYTliLi41ZTQ4ZjY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc192ZXJicy5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX3ZlcmJzLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAwOCBOZXRFZmZlY3QsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNiAtIDIwMDkgSW50ZWwtTkUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDUgT3BlbiBHcmlkIENvbXB1dGluZywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX2liLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX2liLmMKaW5kZXggYTE5MjU4MS4uZGE2MDgyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9pYi5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfaWIuYwpAQCAtNDQ2LDExICs0NDYsMTEgQEAKIAkJaWYgKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0xSTykKIAkJCWxyb19mbHVzaF9hbGwoJnByaXYtPmxyby5scm9fbWdyKTsKIAotCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJaWYgKHVubGlrZWx5KGliX3JlcV9ub3RpZnlfY3EocHJpdi0+cmVjdl9jcSwKIAkJCQkJICAgICAgSUJfQ1FfTkVYVF9DT01QIHwKIAkJCQkJICAgICAgSUJfQ1FfUkVQT1JUX01JU1NFRF9FVkVOVFMpKSAmJgotCQkgICAgbmV0aWZfcnhfcmVzY2hlZHVsZShuYXBpKSkKKwkJICAgIG5hcGlfcmVzY2hlZHVsZShuYXBpKSkKIAkJCWdvdG8gcG9sbF9tb3JlOwogCX0KIApAQCAtNDYyLDcgKzQ2Miw3IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGRldl9wdHI7CiAJc3RydWN0IGlwb2liX2Rldl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotCW5ldGlmX3J4X3NjaGVkdWxlKCZwcml2LT5uYXBpKTsKKwluYXBpX3NjaGVkdWxlKCZwcml2LT5uYXBpKTsKIH0KIAogc3RhdGljIHZvaWQgZHJhaW5fdHhfY3Eoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMKaW5kZXggMGJkMmE0Zi4uNDIxYTY2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMKQEAgLTY2MCw4ICs2NjAsMTIgQEAKIAogCXBhdGggPSBfX3BhdGhfZmluZChkZXYsIHBoZHItPmh3YWRkciArIDQpOwogCWlmICghcGF0aCB8fCAhcGF0aC0+dmFsaWQpIHsKLQkJaWYgKCFwYXRoKQorCQlpbnQgbmV3X3BhdGggPSAwOworCisJCWlmICghcGF0aCkgewogCQkJcGF0aCA9IHBhdGhfcmVjX2NyZWF0ZShkZXYsIHBoZHItPmh3YWRkciArIDQpOworCQkJbmV3X3BhdGggPSAxOworCQl9CiAJCWlmIChwYXRoKSB7CiAJCQkvKiBwdXQgcHNldWRvaGVhZGVyIGJhY2sgb24gZm9yIG5leHQgdGltZSAqLwogCQkJc2tiX3B1c2goc2tiLCBzaXplb2YgKnBoZHIpOwpAQCAtNjY5LDcgKzY3Myw4IEBACiAKIAkJCWlmICghcGF0aC0+cXVlcnkgJiYgcGF0aF9yZWNfc3RhcnQoZGV2LCBwYXRoKSkgewogCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQkJCQlwYXRoX2ZyZWUoZGV2LCBwYXRoKTsKKwkJCQlpZiAobmV3X3BhdGgpCisJCQkJCXBhdGhfZnJlZShkZXYsIHBhdGgpOwogCQkJCXJldHVybjsKIAkJCX0gZWxzZQogCQkJCV9fcGF0aF9hZGQoZGV2LCBwYXRoKTsKQEAgLTEwMTYsMTggKzEwMjEsMjIgQEAKIAlwcml2LT5scm8ubHJvX21nci5pcF9zdW1tZWRfYWdnciA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGlwb2liX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQkgPSBpcG9pYl9vcGVuLAorCS5uZG9fc3RvcAkJID0gaXBvaWJfc3RvcCwKKwkubmRvX2NoYW5nZV9tdHUJCSA9IGlwb2liX2NoYW5nZV9tdHUsCisJLm5kb19zdGFydF94bWl0CSAJID0gaXBvaWJfc3RhcnRfeG1pdCwKKwkubmRvX3R4X3RpbWVvdXQJCSA9IGlwb2liX3RpbWVvdXQsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QJID0gaXBvaWJfc2V0X21jYXN0X2xpc3QsCisJLm5kb19uZWlnaF9zZXR1cAkgPSBpcG9pYl9uZWlnaF9zZXR1cF9kZXYsCit9OworCiBzdGF0aWMgdm9pZCBpcG9pYl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBpcG9pYl9kZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAKLQlkZXYtPm9wZW4JCSA9IGlwb2liX29wZW47Ci0JZGV2LT5zdG9wCQkgPSBpcG9pYl9zdG9wOwotCWRldi0+Y2hhbmdlX210dQkJID0gaXBvaWJfY2hhbmdlX210dTsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdAkgPSBpcG9pYl9zdGFydF94bWl0OwotCWRldi0+dHhfdGltZW91dAkJID0gaXBvaWJfdGltZW91dDsKKwlkZXYtPm5ldGRldl9vcHMJCSA9ICZpcG9pYl9uZXRkZXZfb3BzOwogCWRldi0+aGVhZGVyX29wcwkJID0gJmlwb2liX2hlYWRlcl9vcHM7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QJID0gaXBvaWJfc2V0X21jYXN0X2xpc3Q7Ci0JZGV2LT5uZWlnaF9zZXR1cAkgPSBpcG9pYl9uZWlnaF9zZXR1cF9kZXY7CiAKIAlpcG9pYl9zZXRfZXRodG9vbF9vcHMoZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzZXJfdmVyYnMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2VyX3ZlcmJzLmMKaW5kZXggMzE5YjE4OC4uZWE5ZTE1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzZXJfdmVyYnMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNlcl92ZXJicy5jCkBAIC00MDEsMTMgKzQwMSw2IEBACiAJaWYgKHJldCkKIAkJZ290byBmYWlsdXJlOwogCi0JaXNlcl9kYmcoInBhdGgubXR1IGlzICVkIHNldHRpbmcgaXQgdG8gJWRcbiIsCi0JCSBjbWFfaWQtPnJvdXRlLnBhdGhfcmVjLT5tdHUsIElCX01UVV8xMDI0KTsKLQotCS8qIHdlIG11c3Qgc2V0IHRoZSBNVFUgdG8gMTAyNCBhcyB0aGlzIGlzIHdoYXQgdGhlIHRhcmdldCBpcyBhc3N1bWluZyAqLwotCWlmIChjbWFfaWQtPnJvdXRlLnBhdGhfcmVjLT5tdHUgPiBJQl9NVFVfMTAyNCkKLQkJY21hX2lkLT5yb3V0ZS5wYXRoX3JlYy0+bXR1ID0gSUJfTVRVXzEwMjQ7Ci0KIAltZW1zZXQoJmNvbm5fcGFyYW0sIDAsIHNpemVvZiBjb25uX3BhcmFtKTsKIAljb25uX3BhcmFtLnJlc3BvbmRlcl9yZXNvdXJjZXMgPSA0OwogCWNvbm5fcGFyYW0uaW5pdGlhdG9yX2RlcHRoICAgICA9IDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2V2ZGV2LmMgYi9kcml2ZXJzL2lucHV0L2V2ZGV2LmMKaW5kZXggZWQ4YmFhMC4uN2E3YTAyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9ldmRldi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvZXZkZXYuYwpAQCAtOTQsMTEgKzk0LDggQEAKIHN0YXRpYyBpbnQgZXZkZXZfZmFzeW5jKGludCBmZCwgc3RydWN0IGZpbGUgKmZpbGUsIGludCBvbikKIHsKIAlzdHJ1Y3QgZXZkZXZfY2xpZW50ICpjbGllbnQgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JaW50IHJldHZhbDsKIAotCXJldHZhbCA9IGZhc3luY19oZWxwZXIoZmQsIGZpbGUsIG9uLCAmY2xpZW50LT5mYXN5bmMpOwotCi0JcmV0dXJuIHJldHZhbCA8IDAgPyByZXR2YWwgOiAwOworCXJldHVybiBmYXN5bmNfaGVscGVyKGZkLCBmaWxlLCBvbiwgJmNsaWVudC0+ZmFzeW5jKTsKIH0KIAogc3RhdGljIGludCBldmRldl9mbHVzaChzdHJ1Y3QgZmlsZSAqZmlsZSwgZmxfb3duZXJfdCBpZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvam95ZGV2LmMgYi9kcml2ZXJzL2lucHV0L2pveWRldi5jCmluZGV4IDZmMjM2NjIuLjQyMjRmMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvam95ZGV2LmMKKysrIGIvZHJpdmVycy9pbnB1dC9qb3lkZXYuYwpAQCAtMTU5LDEyICsxNTksOSBAQAogCiBzdGF0aWMgaW50IGpveWRldl9mYXN5bmMoaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG9uKQogewotCWludCByZXR2YWw7CiAJc3RydWN0IGpveWRldl9jbGllbnQgKmNsaWVudCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAotCXJldHZhbCA9IGZhc3luY19oZWxwZXIoZmQsIGZpbGUsIG9uLCAmY2xpZW50LT5mYXN5bmMpOwotCi0JcmV0dXJuIHJldHZhbCA8IDAgPyByZXR2YWwgOiAwOworCXJldHVybiBmYXN5bmNfaGVscGVyKGZkLCBmaWxlLCBvbiwgJmNsaWVudC0+ZmFzeW5jKTsKIH0KIAogc3RhdGljIHZvaWQgam95ZGV2X2ZyZWUoc3RydWN0IGRldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9tYXBsZWNvbnRyb2wuYyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svbWFwbGVjb250cm9sLmMKaW5kZXggZTUwMDQ3Yi4uNzdjZmRlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9tYXBsZWNvbnRyb2wuYworKysgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL21hcGxlY29udHJvbC5jCkBAIC0zLDcgKzMsNyBAQAogICoJQmFzZWQgb24gZHJpdmVycy91c2IvaWZvcmNlLmMKICAqCiAgKglDb3B5cmlnaHQgWWFlZ2FzaGkgVGFrZXNoaSwgMjAwMQotICoJQWRyaWFuIE1jTWVuYW1pbiwgMjAwOAorICoJQWRyaWFuIE1jTWVuYW1pbiwgMjAwOCAtIDIwMDkKICAqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0yOSw3ICsyOSw3IEBACiAJc3RydWN0IG1hcGxlX2RldmljZSAqbWFwbGVkZXYgPSBtcS0+ZGV2OwogCXN0cnVjdCBkY19wYWQgKnBhZCA9IG1hcGxlX2dldF9kcnZkYXRhKG1hcGxlZGV2KTsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYgPSBwYWQtPmRldjsKLQl1bnNpZ25lZCBjaGFyICpyZXMgPSBtcS0+cmVjdmJ1ZjsKKwl1bnNpZ25lZCBjaGFyICpyZXMgPSBtcS0+cmVjdmJ1Zi0+YnVmOwogCiAJYnV0dG9ucyA9IH5sZTE2X3RvX2NwdXAoKF9fbGUxNiAqKShyZXMgKyA4KSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvbWFwbGVfa2V5Yi5jIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9tYXBsZV9rZXliLmMKaW5kZXggMjJmMTdhNS4uNWFhMjM2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9tYXBsZV9rZXliLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9tYXBsZV9rZXliLmMKQEAgLTEsOCArMSw4IEBACiAvKgogICogU0VHQSBEcmVhbWNhc3Qga2V5Ym9hcmQgZHJpdmVyCiAgKiBCYXNlZCBvbiBkcml2ZXJzL3VzYi91c2JrYmQuYwotICogQ29weXJpZ2h0IFlBRUdBU0hJIFRha2VzaGksIDIwMDEKLSAqIFBvcnRpbmcgdG8gMi42IENvcHlyaWdodCBBZHJpYW4gTWNNZW5hbWluLCAyMDA3LCAyMDA4CisgKiBDb3B5cmlnaHQgKGMpIFlBRUdBU0hJIFRha2VzaGksIDIwMDEKKyAqIFBvcnRpbmcgdG8gMi42IENvcHlyaWdodCAoYykgQWRyaWFuIE1jTWVuYW1pbiwgMjAwNyAtIDIwMDkKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTMzLDcgKzMzLDcgQEAKIAogI2RlZmluZSBOUl9TQ0FOQ09ERVMgMjU2CiAKLU1PRFVMRV9BVVRIT1IoIllBRUdBU0hJIFRha2VzaGksIEFkcmlhbiBNY01lbmFtaW4iKTsKK01PRFVMRV9BVVRIT1IoIkFkcmlhbiBNY01lbmFtaW4gPGFkcmlhbkBtY21lbi5kZW1vbi5jby51ayIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJTRUdBIERyZWFtY2FzdCBrZXlib2FyZCBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIApAQCAtMTE1LDcgKzExNSw3IEBACiAJCQkJaW5wdXRfZXZlbnQoZGV2LCBFVl9NU0MsIE1TQ19TQ0FOLCBjb2RlKTsKIAkJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwga2V5Y29kZSwgMCk7CiAJCQl9IGVsc2UKLQkJCQlwcmludGsoS0VSTl9ERUJVRyAibWFwbGVfa2V5YjogIgorCQkJCWRldl9kYmcoJmRldi0+ZGV2LAogCQkJCQkiVW5rbm93biBrZXkgKHNjYW5jb2RlICUjeCkgcmVsZWFzZWQuIiwKIAkJCQkJY29kZSk7CiAJCX0KQEAgLTEyNyw3ICsxMjcsNyBAQAogCQkJCWlucHV0X2V2ZW50KGRldiwgRVZfTVNDLCBNU0NfU0NBTiwgY29kZSk7CiAJCQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIGtleWNvZGUsIDEpOwogCQkJfSBlbHNlCi0JCQkJcHJpbnRrKEtFUk5fREVCVUcgIm1hcGxlX2tleWI6ICIKKwkJCQlkZXZfZGJnKCZkZXYtPmRldiwKIAkJCQkJIlVua25vd24ga2V5IChzY2FuY29kZSAlI3gpIHByZXNzZWQuIiwKIAkJCQkJY29kZSk7CiAJCX0KQEAgLTE0MCw3ICsxNDAsNyBAQAogewogCXN0cnVjdCBtYXBsZV9kZXZpY2UgKm1hcGxlZGV2ID0gbXEtPmRldjsKIAlzdHJ1Y3QgZGNfa2JkICprYmQgPSBtYXBsZV9nZXRfZHJ2ZGF0YShtYXBsZWRldik7Ci0JdW5zaWduZWQgbG9uZyAqYnVmID0gbXEtPnJlY3ZidWY7CisJdW5zaWduZWQgbG9uZyAqYnVmID0gKHVuc2lnbmVkIGxvbmcgKikobXEtPnJlY3ZidWYtPmJ1Zik7CiAKIAkvKgogCSAqIFdlIHNob3VsZCBhbHdheXMgZ2V0IHRoZSBsb2NrIGJlY2F1c2UgdGhlIG9ubHkKQEAgLTE1OSwyMiArMTU5LDI3IEBACiAKIHN0YXRpYyBpbnQgcHJvYmVfbWFwbGVfa2JkKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2ID0gdG9fbWFwbGVfZGV2KGRldik7Ci0Jc3RydWN0IG1hcGxlX2RyaXZlciAqbWRydiA9IHRvX21hcGxlX2RyaXZlcihkZXYtPmRyaXZlcik7CisJc3RydWN0IG1hcGxlX2RldmljZSAqbWRldjsKKwlzdHJ1Y3QgbWFwbGVfZHJpdmVyICptZHJ2OwogCWludCBpLCBlcnJvcjsKIAlzdHJ1Y3QgZGNfa2JkICprYmQ7CiAJc3RydWN0IGlucHV0X2RldiAqaWRldjsKIAotCWlmICghKG1kZXYtPmZ1bmN0aW9uICYgTUFQTEVfRlVOQ19LRVlCT0FSRCkpCi0JCXJldHVybiAtRUlOVkFMOworCW1kZXYgPSB0b19tYXBsZV9kZXYoZGV2KTsKKwltZHJ2ID0gdG9fbWFwbGVfZHJpdmVyKGRldi0+ZHJpdmVyKTsKIAogCWtiZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkY19rYmQpLCBHRlBfS0VSTkVMKTsKLQlpZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7Ci0JaWYgKCFrYmQgfHwgIWlkZXYpIHsKKwlpZiAoIWtiZCkgewogCQllcnJvciA9IC1FTk9NRU07CiAJCWdvdG8gZmFpbDsKIAl9CiAKKwlpZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CisJaWYgKCFpZGV2KSB7CisJCWVycm9yID0gLUVOT01FTTsKKwkJZ290byBmYWlsX2lkZXZfYWxsb2M7CisJfQorCiAJa2JkLT5kZXYgPSBpZGV2OwogCW1lbWNweShrYmQtPmtleWNvZGUsIGRjX2tiZF9rZXljb2RlLCBzaXplb2Yoa2JkLT5rZXljb2RlKSk7CiAKQEAgLTE5NSw3ICsyMDAsNyBAQAogCiAJZXJyb3IgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoaWRldik7CiAJaWYgKGVycm9yKQotCQlnb3RvIGZhaWw7CisJCWdvdG8gZmFpbF9yZWdpc3RlcjsKIAogCS8qIE1hcGxlIHBvbGxpbmcgaXMgbG9ja2VkIHRvIFZCTEFOSyAtIHdoaWNoIG1heSBiZSBqdXN0IDUwL3MgKi8KIAltYXBsZV9nZXRjb25kX2NhbGxiYWNrKG1kZXYsIGRjX2tiZF9jYWxsYmFjaywgSFovNTAsCkBAIC0yMDcsMTAgKzIxMiwxMiBAQAogCiAJcmV0dXJuIGVycm9yOwogCi1mYWlsOgotCWlucHV0X2ZyZWVfZGV2aWNlKGlkZXYpOwotCWtmcmVlKGtiZCk7CitmYWlsX3JlZ2lzdGVyOgogCW1hcGxlX3NldF9kcnZkYXRhKG1kZXYsIE5VTEwpOworCWlucHV0X2ZyZWVfZGV2aWNlKGlkZXYpOworZmFpbF9pZGV2X2FsbG9jOgorCWtmcmVlKGtiZCk7CitmYWlsOgogCXJldHVybiBlcnJvcjsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9zaF9rZXlzYy5jIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9zaF9rZXlzYy5jCmluZGV4IDVjOGExYmMuLmUxNDgwZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvc2hfa2V5c2MuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3NoX2tleXNjLmMKQEAgLTIxOSw2ICsyMTksOCBAQAogCQkgIHBkYXRhLT5zY2FuX3RpbWluZywgcHJpdi0+aW9tZW1fYmFzZSArIEtZQ1IxX09GRlMpOwogCWlvd3JpdGUxNigwLCBwcml2LT5pb21lbV9iYXNlICsgS1lPVVREUl9PRkZTKTsKIAlpb3dyaXRlMTYoS1lDUjJfSVJRX0xFVkVMLCBwcml2LT5pb21lbV9iYXNlICsgS1lDUjJfT0ZGUyk7CisKKwlkZXZpY2VfaW5pdF93YWtldXAoJnBkZXYtPmRldiwgMSk7CiAJcmV0dXJuIDA7CiAgZXJyNToKIAlmcmVlX2lycShpcnEsIHBkZXYpOwpAQCAtMjUzLDE3ICsyNTUsMzMgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBzaF9rZXlzY19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IHNoX2tleXNjX3ByaXYgKnByaXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwl1bnNpZ25lZCBzaG9ydCB2YWx1ZTsKIAotI2RlZmluZSBzaF9rZXlzY19zdXNwZW5kIE5VTEwKLSNkZWZpbmUgc2hfa2V5c2NfcmVzdW1lIE5VTEwKKwl2YWx1ZSA9IGlvcmVhZDE2KHByaXYtPmlvbWVtX2Jhc2UgKyBLWUNSMV9PRkZTKTsKKworCWlmIChkZXZpY2VfbWF5X3dha2V1cChkZXYpKQorCQl2YWx1ZSB8PSAweDgwOworCWVsc2UKKwkJdmFsdWUgJj0gfjB4ODA7CisKKwlpb3dyaXRlMTYodmFsdWUsIHByaXYtPmlvbWVtX2Jhc2UgKyBLWUNSMV9PRkZTKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBkZXZfcG1fb3BzIHNoX2tleXNjX2Rldl9wbV9vcHMgPSB7CisJLnN1c3BlbmQgPSBzaF9rZXlzY19zdXNwZW5kLAorfTsKIAogc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzaF9rZXlzY19kZXZpY2VfZHJpdmVyID0gewogCS5wcm9iZQkJPSBzaF9rZXlzY19wcm9iZSwKIAkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHNoX2tleXNjX3JlbW92ZSksCi0JLnN1c3BlbmQJPSBzaF9rZXlzY19zdXNwZW5kLAotCS5yZXN1bWUJCT0gc2hfa2V5c2NfcmVzdW1lLAogCS5kcml2ZXIJCT0gewogCQkubmFtZQk9ICJzaF9rZXlzYyIsCisJCS5wbQk9ICZzaF9rZXlzY19kZXZfcG1fb3BzLAogCX0KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2VkZXYuYyBiL2RyaXZlcnMvaW5wdXQvbW91c2VkZXYuYwppbmRleCBlZjk5YTdlLi4xN2ZkNmQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlZGV2LmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZWRldi5jCkBAIC00MDMsMTIgKzQwMyw5IEBACiAKIHN0YXRpYyBpbnQgbW91c2VkZXZfZmFzeW5jKGludCBmZCwgc3RydWN0IGZpbGUgKmZpbGUsIGludCBvbikKIHsKLQlpbnQgcmV0dmFsOwogCXN0cnVjdCBtb3VzZWRldl9jbGllbnQgKmNsaWVudCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAotCXJldHZhbCA9IGZhc3luY19oZWxwZXIoZmQsIGZpbGUsIG9uLCAmY2xpZW50LT5mYXN5bmMpOwotCi0JcmV0dXJuIHJldHZhbCA8IDAgPyByZXR2YWwgOiAwOworCXJldHVybiBmYXN5bmNfaGVscGVyKGZkLCBmaWxlLCBvbiwgJmNsaWVudC0+ZmFzeW5jKTsKIH0KIAogc3RhdGljIHZvaWQgbW91c2VkZXZfZnJlZShzdHJ1Y3QgZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvX3Jhdy5jIGIvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpb19yYXcuYwppbmRleCAwNmJiZDBlLi5iMDMwMDliIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvX3Jhdy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW9fcmF3LmMKQEAgLTU4LDEwICs1OCw4IEBACiBzdGF0aWMgaW50IHNlcmlvX3Jhd19mYXN5bmMoaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG9uKQogewogCXN0cnVjdCBzZXJpb19yYXdfbGlzdCAqbGlzdCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlpbnQgcmV0dmFsOwogCi0JcmV0dmFsID0gZmFzeW5jX2hlbHBlcihmZCwgZmlsZSwgb24sICZsaXN0LT5mYXN5bmMpOwotCXJldHVybiByZXR2YWwgPCAwID8gcmV0dmFsIDogMDsKKwlyZXR1cm4gZmFzeW5jX2hlbHBlcihmZCwgZmlsZSwgb24sICZsaXN0LT5mYXN5bmMpOwogfQogCiBzdGF0aWMgc3RydWN0IHNlcmlvX3JhdyAqc2VyaW9fcmF3X2xvY2F0ZShpbnQgbWlub3IpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vYWN0MjAwMC9hY3QyMDAwX2lzYS5jIGIvZHJpdmVycy9pc2RuL2FjdDIwMDAvYWN0MjAwMF9pc2EuYwppbmRleCAxYmQ4OTYwLi5mZWE1Yjc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vYWN0MjAwMC9hY3QyMDAwX2lzYS5jCisrKyBiL2RyaXZlcnMvaXNkbi9hY3QyMDAwL2FjdDIwMDBfaXNhLmMKQEAgLTI1Nyw5ICsyNTcsOSBAQAogCQkJCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCQkJCSAgICAgICAiYWN0MjAwMF9pc2FfcmVjZWl2ZTogSW52YWxpZCBDQVBJIG1zZ1xuIik7CiAJCQkJCXsKLQkJCQkJCWludCBpOyBfX3U4ICpwOyBfX3U4ICpjOyBfX3U4IHRtcFszMF07Ci0JCQkJCQlmb3IgKGkgPSAwLCBwID0gKF9fdTggKikmY2FyZC0+aWRhdC5pc2EucmN2aGRyLCBjID0gdG1wOyBpIDwgODsgaSsrKQotCQkJCQkJCWMgKz0gc3ByaW50ZihjLCAiJTAyeCAiLCAqKHArKykpOworCQkJCQkJaW50IGk7IF9fdTggKnA7IF9fdTggKnQ7IF9fdTggdG1wWzMwXTsKKwkJCQkJCWZvciAoaSA9IDAsIHAgPSAoX191OCAqKSZjYXJkLT5pZGF0LmlzYS5yY3ZoZHIsIHQgPSB0bXA7IGkgPCA4OyBpKyspCisJCQkJCQkJdCArPSBzcHJpbnRmKHQsICIlMDJ4ICIsICoocCsrKSk7CiAJCQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJhY3QyMDAwX2lzYV9yZWNlaXZlOiAlc1xuIiwgdG1wKTsKIAkJCQkJfQogCQkJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9jYXBpL2NhcGkuYyBiL2RyaXZlcnMvaXNkbi9jYXBpL2NhcGkuYwppbmRleCAxYjViZjg3Li4zZTQ2OGQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vY2FwaS9jYXBpLmMKKysrIGIvZHJpdmVycy9pc2RuL2NhcGkvY2FwaS5jCkBAIC0yNzcsNyArMjc3LDcgQEAKIAlsaXN0X2RlbCgmbXAtPmxpc3QpOwogCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZjYXBpbWlub3JfbGlzdF9sb2NrLCBmbGFncyk7CiAKLQlpZiAobXAtPnR0eXNrYikga2ZyZWVfc2tiKG1wLT50dHlza2IpOworCWtmcmVlX3NrYihtcC0+dHR5c2tiKTsKIAltcC0+dHR5c2tiID0gTlVMTDsKIAlza2JfcXVldWVfcHVyZ2UoJm1wLT5pbnF1ZXVlKTsKIAlza2JfcXVldWVfcHVyZ2UoJm1wLT5vdXRxdWV1ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vY2FwaS9rY2FwaV9wcm9jLmMgYi9kcml2ZXJzL2lzZG4vY2FwaS9rY2FwaV9wcm9jLmMKaW5kZXggYzI5MjA4Yi4uNTBlZDc3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2NhcGkva2NhcGlfcHJvYy5jCisrKyBiL2RyaXZlcnMvaXNkbi9jYXBpL2tjYXBpX3Byb2MuYwpAQCAtMjM5LDYgKzIzOSw3IEBACiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogc3RhdGljIHZvaWQgKmNhcGlfZHJpdmVyX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKKwlfX2FjcXVpcmVzKCZjYXBpX2RyaXZlcnNfbGlzdF9sb2NrKQogewogCXJlYWRfbG9jaygmY2FwaV9kcml2ZXJzX2xpc3RfbG9jayk7CiAJcmV0dXJuIHNlcV9saXN0X3N0YXJ0KCZjYXBpX2RyaXZlcnMsICpwb3MpOwpAQCAtMjUwLDYgKzI1MSw3IEBACiB9CiAKIHN0YXRpYyB2b2lkIGNhcGlfZHJpdmVyX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCisJX19yZWxlYXNlcygmY2FwaV9kcml2ZXJzX2xpc3RfbG9jaykKIHsKIAlyZWFkX3VubG9jaygmY2FwaV9kcml2ZXJzX2xpc3RfbG9jayk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC9LY29uZmlnIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvS2NvbmZpZwppbmRleCAwMDE3ZTUwLi45Y2E4ODlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC9LY29uZmlnCisrKyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L0tjb25maWcKQEAgLTEsNSArMSw1IEBACiBtZW51Y29uZmlnIElTRE5fRFJWX0dJR0FTRVQKLQl0cmlzdGF0ZSAiU2llbWVucyBHaWdhc2V0IHN1cHBvcnQgKGlzZG4pIgorCXRyaXN0YXRlICJTaWVtZW5zIEdpZ2FzZXQgc3VwcG9ydCIKIAlzZWxlY3QgQ1JDX0NDSVRUCiAJc2VsZWN0IEJJVFJFVkVSU0UKIAloZWxwCkBAIC0xMSwxMSArMTEsMTEgQEAKIAkgIG9uZSBvZiB0aGUgY29ubmVjdGlvbiBzcGVjaWZpYyBwYXJ0cyB0aGF0IGZvbGxvdy4KIAkgIFRoaXMgd2lsbCBidWlsZCBhIG1vZHVsZSBjYWxsZWQgImdpZ2FzZXQiLgogCi1pZiBJU0ROX0RSVl9HSUdBU0VUIT1uCitpZiBJU0ROX0RSVl9HSUdBU0VUCiAKIGNvbmZpZyBHSUdBU0VUX0JBU0UKIAl0cmlzdGF0ZSAiR2lnYXNldCBiYXNlIHN0YXRpb24gc3VwcG9ydCIKLQlkZXBlbmRzIG9uIElTRE5fRFJWX0dJR0FTRVQgJiYgVVNCCisJZGVwZW5kcyBvbiBVU0IKIAloZWxwCiAJICBTYXkgTSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgVVNCIGludGVyZmFjZSBvZiB0aGUgR2lnYXNldAogCSAgYmFzZSBmb3IgY29ubmVjdGlvbiB0byB5b3VyIHN5c3RlbS4KQEAgLTIzLDcgKzIzLDcgQEAKIAogY29uZmlnIEdJR0FTRVRfTTEwNQogCXRyaXN0YXRlICJHaWdhc2V0IE0xMDUgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIElTRE5fRFJWX0dJR0FTRVQgJiYgVVNCCisJZGVwZW5kcyBvbiBVU0IKIAloZWxwCiAJICBTYXkgTSBoZXJlIGlmIHlvdSB3YW50IHRvIGNvbm5lY3QgdG8gdGhlIEdpZ2FzZXQgYmFzZSB2aWEgREVDVAogCSAgdXNpbmcgYSBHaWdhc2V0IE0xMDUgKFNpbnVzIDQ1IERhdGEgMikgVVNCIERFQ1QgZGV2aWNlLgpAQCAtMzEsNyArMzEsNiBAQAogCiBjb25maWcgR0lHQVNFVF9NMTAxCiAJdHJpc3RhdGUgIkdpZ2FzZXQgTTEwMSBzdXBwb3J0IgotCWRlcGVuZHMgb24gSVNETl9EUlZfR0lHQVNFVAogCWhlbHAKIAkgIFNheSBNIGhlcmUgaWYgeW91IHdhbnQgdG8gY29ubmVjdCB0byB0aGUgR2lnYXNldCBiYXNlIHZpYSBERUNUCiAJICB1c2luZyBhIEdpZ2FzZXQgTTEwMSAoU2ludXMgNDUgRGF0YSAxKSBSUzIzMiBERUNUIGRldmljZS4KQEAgLTQ4LDcgKzQ3LDYgQEAKIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgVVNCIHJlcXVlc3RzIHdlIG9ubHkga25vdyBmcm9tCiAJICByZXZlcnNlIGVuZ2luZWVyaW5nIChjdXJyZW50bHkgTTEwNSBvbmx5KS4gSWYgeW91IG5lZWQKLQkgIGZlYXR1cmVzIGxpa2UgY29uZmlndXJhdGlvbiBtb2RlIG9mIE0xMDUsIHNheSB5ZXMuIElmIHlvdQotCSAgY2FyZSBhYm91dCB5b3VyIGRldmljZSwgc2F5IG5vLgorCSAgZmVhdHVyZXMgbGlrZSBjb25maWd1cmF0aW9uIG1vZGUgb2YgTTEwNSwgc2F5IHllcy4KIAotZW5kaWYgIyBJU0ROX0RSVl9HSUdBU0VUICE9IG4KK2VuZGlmICMgSVNETl9EUlZfR0lHQVNFVApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvc2VyLWdpZ2FzZXQuYyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L3Nlci1naWdhc2V0LmMKaW5kZXggYWMyNDVlNy4uMzA3MWE1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvc2VyLWdpZ2FzZXQuYworKysgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9zZXItZ2lnYXNldC5jCkBAIC0zODksOCArMzg5LDcgQEAKIAogc3RhdGljIHZvaWQgZ2lnYXNldF9kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9Ci0JCWNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UsIGRldik7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCiAJLyogYWRhcHRlZCBmcm9tIHBsYXRmb3JtX2RldmljZV9yZWxlYXNlKCkgaW4gZHJpdmVycy9iYXNlL3BsYXRmb3JtLmMgKi8KIAkvL0ZJWE1FIGlzIHRoaXMgYWN0dWFsbHkgbmVjZXNzYXJ5PwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvdXNiLWdpZ2FzZXQuYyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L3VzYi1naWdhc2V0LmMKaW5kZXggZmJhNjFmNi4uZDc4Mzg1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvdXNiLWdpZ2FzZXQuYworKysgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC91c2ItZ2lnYXNldC5jCkBAIC0yNzgsMTcgKzI3OCwxNyBAQAogc3RhdGljIGludCBnaWdhc2V0X3NldF9tb2RlbV9jdHJsKHN0cnVjdCBjYXJkc3RhdGUgKmNzLCB1bnNpZ25lZCBvbGRfc3RhdGUsCiAJCQkJICB1bnNpZ25lZCBuZXdfc3RhdGUpCiB7Ci0JcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIC1FTk9UVFk7CiB9CiAKIHN0YXRpYyBpbnQgZ2lnYXNldF9zZXRfbGluZV9jdHJsKHN0cnVjdCBjYXJkc3RhdGUgKmNzLCB1bnNpZ25lZCBjZmxhZykKIHsKLQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gLUVOT1RUWTsKIH0KIAogc3RhdGljIGludCBnaWdhc2V0X2JhdWRfcmF0ZShzdHJ1Y3QgY2FyZHN0YXRlICpjcywgdW5zaWduZWQgY2ZsYWcpCiB7Ci0JcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIC1FTk9UVFk7CiB9CiAjZW5kaWYKIApAQCAtNTc3LDcgKzU3Nyw3IEBACiAJcmV0dXJuIHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2Jfc25kY3RybHBpcGUodWRldiwgMCksIDB4MTksIDB4NDEsCiAJCQkgICAgICAgMCwgMCwgJmJ1ZiwgNiwgMjAwMCk7CiAjZWxzZQotCXJldHVybiAtRUlOVkFMOworCXJldHVybiAtRU5PVFRZOwogI2VuZGlmCiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9kZWJ1Zy5jIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL2RlYnVnLmMKaW5kZXggODQzMThlYy4uMzNjZTg5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL2RlYnVnLmMKKysrIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL2RlYnVnLmMKQEAgLTExOTgsNyArMTE5OCw3IEBACiAgICAgICAgIHBDLT54YnVmZmVyWzVdID0gKGJ5dGUpKHJ4X2RtYV9tYWdpYyA+PiAgOCk7CiAgICAgICAgIHBDLT54YnVmZmVyWzZdID0gKGJ5dGUpKHJ4X2RtYV9tYWdpYyA+PiAxNik7CiAgICAgICAgIHBDLT54YnVmZmVyWzddID0gKGJ5dGUpKHJ4X2RtYV9tYWdpYyA+PiAyNCk7Ci0gICAgICAgIHBDLT54YnVmZmVyWzhdID0gKGJ5dGUpRElWQV9NQVhfTUFOQUdFTUVOVF9UUkFOU0ZFUl9TSVpFOworCXBDLT54YnVmZmVyWzhdID0gKGJ5dGUpKERJVkFfTUFYX01BTkFHRU1FTlRfVFJBTlNGRVJfU0laRSAmIDB4RkYpOwogICAgICAgICBwQy0+eGJ1ZmZlcls5XSA9IChieXRlKShESVZBX01BWF9NQU5BR0VNRU5UX1RSQU5TRkVSX1NJWkUgPj4gOCk7CiAgICAgICAgIHBDLT54YnVmZmVyWzEwXSA9IDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9tZXNzYWdlLmMgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vbWVzc2FnZS5jCmluZGV4IDRjYzk0ZjIuLjMxZjkxYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9tZXNzYWdlLmMKKysrIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL21lc3NhZ2UuYwpAQCAtMTE5NCw3ICsxMTk0LDggQEAKIC8qIHRyYW5zbGF0aW9uIGZ1bmN0aW9uIGZvciBlYWNoIG1lc3NhZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotYnl0ZSBjb25uZWN0X3JlcShkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICAgKiBhLCBQTENJICAgKiBwbGNpLCBBUFBMICAgKiBhcHBsLCBBUElfUEFSU0UgKiBwYXJtcykKK3N0YXRpYyBieXRlIGNvbm5lY3RfcmVxKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgKmEsCisJCQlQTENJICpwbGNpLCBBUFBMICphcHBsLCBBUElfUEFSU0UgKnBhcm1zKQogewogICB3b3JkIGNoOwogICB3b3JkIGk7CkBAIC0xNDExLDcgKzE0MTIsOCBAQAogICByZXR1cm4gMjsKIH0KIAotYnl0ZSBjb25uZWN0X3Jlcyhkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICAgKiBhLCBQTENJICAgKiBwbGNpLCBBUFBMICAgKiBhcHBsLCBBUElfUEFSU0UgKiBwYXJtcykKK3N0YXRpYyBieXRlIGNvbm5lY3RfcmVzKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgKmEsCisJCQlQTENJICpwbGNpLCBBUFBMICphcHBsLCBBUElfUEFSU0UgKnBhcm1zKQogewogICB3b3JkIGksIEluZm87CiAgIHdvcmQgUmVqZWN0OwpAQCAtMTU2NywxMyArMTU2OSwxNSBAQAogICByZXR1cm4gMTsKIH0KIAotYnl0ZSBjb25uZWN0X2FfcmVzKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgICAqIGEsIFBMQ0kgICAqIHBsY2ksIEFQUEwgICAqIGFwcGwsIEFQSV9QQVJTRSAqIG1zZykKK3N0YXRpYyBieXRlIGNvbm5lY3RfYV9yZXMoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAqYSwKKwkJCSAgUExDSSAqcGxjaSwgQVBQTCAqYXBwbCwgQVBJX1BBUlNFICptc2cpCiB7CiAgIGRidWcoMSxkcHJpbnRmKCJjb25uZWN0X2FfcmVzIikpOwogICByZXR1cm4gZmFsc2U7CiB9CiAKLWJ5dGUgZGlzY29ubmVjdF9yZXEoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAgICogYSwgUExDSSAgICogcGxjaSwgQVBQTCAgICogYXBwbCwgQVBJX1BBUlNFICogbXNnKQorc3RhdGljIGJ5dGUgZGlzY29ubmVjdF9yZXEoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAqYSwKKwkJCSAgIFBMQ0kgKnBsY2ksIEFQUEwgKmFwcGwsIEFQSV9QQVJTRSAqbXNnKQogewogICB3b3JkIEluZm87CiAgIHdvcmQgaTsKQEAgLTE2MjgsNyArMTYzMiw4IEBACiAgIHJldHVybiBmYWxzZTsKIH0KIAotYnl0ZSBkaXNjb25uZWN0X3Jlcyhkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICAgKiBhLCBQTENJICAgKiBwbGNpLCBBUFBMICAgKiBhcHBsLCBBUElfUEFSU0UgKiBtc2cpCitzdGF0aWMgYnl0ZSBkaXNjb25uZWN0X3Jlcyhkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICphLAorCQkJICAgUExDSSAqcGxjaSwgQVBQTCAqYXBwbCwgQVBJX1BBUlNFICptc2cpCiB7CiAgIGRidWcoMSxkcHJpbnRmKCJkaXNjb25uZWN0X3JlcyIpKTsKICAgaWYocGxjaSkKQEAgLTE2NTUsNyArMTY2MCw4IEBACiAgIHJldHVybiAwOwogfQogCi1ieXRlIGxpc3Rlbl9yZXEoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAgICogYSwgUExDSSAgICogcGxjaSwgQVBQTCAgICogYXBwbCwgQVBJX1BBUlNFICogcGFybXMpCitzdGF0aWMgYnl0ZSBsaXN0ZW5fcmVxKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgKmEsCisJCSAgICAgICBQTENJICpwbGNpLCBBUFBMICphcHBsLCBBUElfUEFSU0UgKnBhcm1zKQogewogICB3b3JkIEluZm87CiAgIGJ5dGUgaTsKQEAgLTE3MDQsNyArMTcxMCw4IEBACiAgIHJldHVybiBmYWxzZTsKIH0KIAotYnl0ZSBpbmZvX3JlcShkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICAgKiBhLCBQTENJICAgKiBwbGNpLCBBUFBMICAgKiBhcHBsLCBBUElfUEFSU0UgKiBtc2cpCitzdGF0aWMgYnl0ZSBpbmZvX3JlcShkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICphLAorCQkgICAgIFBMQ0kgKnBsY2ksIEFQUEwgKmFwcGwsIEFQSV9QQVJTRSAqbXNnKQogewogICB3b3JkIGk7CiAgIEFQSV9QQVJTRSAqIGFpOwpAQCAtMTgxMywxMyArMTgyMCwxNSBAQAogICByZXR1cm4gZmFsc2U7CiB9CiAKLWJ5dGUgaW5mb19yZXMoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAgICogYSwgUExDSSAgICogcGxjaSwgQVBQTCAgICogYXBwbCwgQVBJX1BBUlNFICogbXNnKQorc3RhdGljIGJ5dGUgaW5mb19yZXMoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAqYSwKKwkJICAgICBQTENJICpwbGNpLCBBUFBMICphcHBsLCBBUElfUEFSU0UgKm1zZykKIHsKICAgZGJ1ZygxLGRwcmludGYoImluZm9fcmVzIikpOwogICByZXR1cm4gZmFsc2U7CiB9CiAKLWJ5dGUgYWxlcnRfcmVxKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgICAqIGEsIFBMQ0kgICAqIHBsY2ksIEFQUEwgICAqIGFwcGwsIEFQSV9QQVJTRSAqIG1zZykKK3N0YXRpYyBieXRlIGFsZXJ0X3JlcShkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICphLAorCQkgICAgICBQTENJICpwbGNpLCBBUFBMICphcHBsLCBBUElfUEFSU0UgKm1zZykKIHsKICAgd29yZCBJbmZvOwogICBieXRlIHJldDsKQEAgLTE4NDksNyArMTg1OCw4IEBACiAgIHJldHVybiByZXQ7CiB9CiAKLWJ5dGUgZmFjaWxpdHlfcmVxKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgICAqIGEsIFBMQ0kgICAqIHBsY2ksIEFQUEwgICAqIGFwcGwsIEFQSV9QQVJTRSAqIG1zZykKK3N0YXRpYyBieXRlIGZhY2lsaXR5X3JlcShkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICphLAorCQkJIFBMQ0kgKnBsY2ksIEFQUEwgKmFwcGwsIEFQSV9QQVJTRSAqbXNnKQogewogICB3b3JkIEluZm8gPSAwOwogICB3b3JkIGkgICAgPSAwOwpAQCAtMjU5OSwxMyArMjYwOSwxNSBAQAogICByZXR1cm4gZmFsc2U7CiB9CiAKLWJ5dGUgZmFjaWxpdHlfcmVzKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgICAqIGEsIFBMQ0kgICAqIHBsY2ksIEFQUEwgICAqIGFwcGwsIEFQSV9QQVJTRSAqIG1zZykKK3N0YXRpYyBieXRlIGZhY2lsaXR5X3Jlcyhkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICphLAorCQkJIFBMQ0kgKnBsY2ksIEFQUEwgKmFwcGwsIEFQSV9QQVJTRSAqbXNnKQogewogICBkYnVnKDEsZHByaW50ZigiZmFjaWxpdHlfcmVzIikpOwogICByZXR1cm4gZmFsc2U7CiB9CiAKLWJ5dGUgY29ubmVjdF9iM19yZXEoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAgICogYSwgUExDSSAgICogcGxjaSwgQVBQTCAgICogYXBwbCwgQVBJX1BBUlNFICogcGFybXMpCitzdGF0aWMgYnl0ZSBjb25uZWN0X2IzX3JlcShkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICphLAorCQkJICAgUExDSSAqcGxjaSwgQVBQTCAqYXBwbCwgQVBJX1BBUlNFICpwYXJtcykKIHsKICAgd29yZCBJbmZvID0gMDsKICAgYnl0ZSByZXE7CkBAIC0yODM5LDcgKzI4NTEsOCBAQAogICByZXR1cm4gZmFsc2U7CiB9CiAKLWJ5dGUgY29ubmVjdF9iM19yZXMoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAgICogYSwgUExDSSAgICogcGxjaSwgQVBQTCAgICogYXBwbCwgQVBJX1BBUlNFICogcGFybXMpCitzdGF0aWMgYnl0ZSBjb25uZWN0X2IzX3Jlcyhkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICphLAorCQkJICAgUExDSSAqcGxjaSwgQVBQTCAqYXBwbCwgQVBJX1BBUlNFICpwYXJtcykKIHsKICAgd29yZCBuY2NpOwogICBBUElfUEFSU0UgKiBuY3BpOwpAQCAtMjk1NCw3ICsyOTY3LDggQEAKICAgcmV0dXJuIGZhbHNlOwogfQogCi1ieXRlIGNvbm5lY3RfYjNfYV9yZXMoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAgICogYSwgUExDSSAgICogcGxjaSwgQVBQTCAgICogYXBwbCwgQVBJX1BBUlNFICogcGFybXMpCitzdGF0aWMgYnl0ZSBjb25uZWN0X2IzX2FfcmVzKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgKmEsCisJCQkgICAgIFBMQ0kgKnBsY2ksIEFQUEwgKmFwcGwsIEFQSV9QQVJTRSAqcGFybXMpCiB7CiAgIHdvcmQgbmNjaTsKIApAQCAtMjk3NCw3ICsyOTg4LDggQEAKICAgcmV0dXJuIGZhbHNlOwogfQogCi1ieXRlIGRpc2Nvbm5lY3RfYjNfcmVxKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgICAqIGEsIFBMQ0kgICAqIHBsY2ksIEFQUEwgICAqIGFwcGwsIEFQSV9QQVJTRSAqIHBhcm1zKQorc3RhdGljIGJ5dGUgZGlzY29ubmVjdF9iM19yZXEoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAqYSwKKwkJCSAgICAgIFBMQ0kgKnBsY2ksIEFQUEwgKmFwcGwsIEFQSV9QQVJTRSAqcGFybXMpCiB7CiAgIHdvcmQgSW5mbzsKICAgd29yZCBuY2NpOwpAQCAtMzAzMCw3ICszMDQ1LDggQEAKICAgcmV0dXJuIGZhbHNlOwogfQogCi1ieXRlIGRpc2Nvbm5lY3RfYjNfcmVzKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgICAqIGEsIFBMQ0kgICAqIHBsY2ksIEFQUEwgICAqIGFwcGwsIEFQSV9QQVJTRSAqIHBhcm1zKQorc3RhdGljIGJ5dGUgZGlzY29ubmVjdF9iM19yZXMoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAqYSwKKwkJCSAgICAgIFBMQ0kgKnBsY2ksIEFQUEwgKmFwcGwsIEFQSV9QQVJTRSAqcGFybXMpCiB7CiAgIHdvcmQgbmNjaTsKICAgd29yZCBpOwpAQCAtMzA4Niw3ICszMTAyLDggQEAKICAgcmV0dXJuIGZhbHNlOwogfQogCi1ieXRlIGRhdGFfYjNfcmVxKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgICAqIGEsIFBMQ0kgICAqIHBsY2ksIEFQUEwgICAqIGFwcGwsIEFQSV9QQVJTRSAqIHBhcm1zKQorc3RhdGljIGJ5dGUgZGF0YV9iM19yZXEoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAqYSwKKwkJCVBMQ0kgKnBsY2ksIEFQUEwgKmFwcGwsIEFQSV9QQVJTRSAqcGFybXMpCiB7CiAgIE5DQ0kgICAqbmNjaV9wdHI7CiAgIERBVEFfQjNfREVTQyAgICpkYXRhOwpAQCAtMzE2Myw3ICszMTgwLDggQEAKICAgcmV0dXJuIGZhbHNlOwogfQogCi1ieXRlIGRhdGFfYjNfcmVzKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgICAqIGEsIFBMQ0kgICAqIHBsY2ksIEFQUEwgICAqIGFwcGwsIEFQSV9QQVJTRSAqIHBhcm1zKQorc3RhdGljIGJ5dGUgZGF0YV9iM19yZXMoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAqYSwKKwkJCVBMQ0kgKnBsY2ksIEFQUEwgKmFwcGwsIEFQSV9QQVJTRSAqcGFybXMpCiB7CiAgIHdvcmQgbjsKICAgd29yZCBuY2NpOwpAQCAtMzE5Niw3ICszMjE0LDggQEAKICAgcmV0dXJuIGZhbHNlOwogfQogCi1ieXRlIHJlc2V0X2IzX3JlcShkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICAgKiBhLCBQTENJICAgKiBwbGNpLCBBUFBMICAgKiBhcHBsLCBBUElfUEFSU0UgKiBwYXJtcykKK3N0YXRpYyBieXRlIHJlc2V0X2IzX3JlcShkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICphLAorCQkJIFBMQ0kgKnBsY2ksIEFQUEwgKmFwcGwsIEFQSV9QQVJTRSAqcGFybXMpCiB7CiAgIHdvcmQgSW5mbzsKICAgd29yZCBuY2NpOwpAQCAtMzIzNyw3ICszMjU2LDggQEAKICAgcmV0dXJuIGZhbHNlOwogfQogCi1ieXRlIHJlc2V0X2IzX3Jlcyhkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICAgKiBhLCBQTENJICAgKiBwbGNpLCBBUFBMICAgKiBhcHBsLCBBUElfUEFSU0UgKiBwYXJtcykKK3N0YXRpYyBieXRlIHJlc2V0X2IzX3Jlcyhkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICphLAorCQkJIFBMQ0kgKnBsY2ksIEFQUEwgKmFwcGwsIEFQSV9QQVJTRSAqcGFybXMpCiB7CiAgIHdvcmQgbmNjaTsKIApAQCAtMzI2MSw3ICszMjgxLDggQEAKICAgcmV0dXJuIGZhbHNlOwogfQogCi1ieXRlIGNvbm5lY3RfYjNfdDkwX2FfcmVzKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgICAqIGEsIFBMQ0kgICAqIHBsY2ksIEFQUEwgICAqIGFwcGwsIEFQSV9QQVJTRSAqIHBhcm1zKQorc3RhdGljIGJ5dGUgY29ubmVjdF9iM190OTBfYV9yZXMoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAqYSwKKwkJCQkgUExDSSAqcGxjaSwgQVBQTCAqYXBwbCwgQVBJX1BBUlNFICpwYXJtcykKIHsKICAgd29yZCBuY2NpOwogICBBUElfUEFSU0UgKiBuY3BpOwpAQCAtMzI5NSw3ICszMzE2LDggQEAKIH0KIAogCi1ieXRlIHNlbGVjdF9iX3JlcShkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICAgKiBhLCBQTENJICAgKiBwbGNpLCBBUFBMICAgKiBhcHBsLCBBUElfUEFSU0UgKiBtc2cpCitzdGF0aWMgYnl0ZSBzZWxlY3RfYl9yZXEoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAqYSwKKwkJCSBQTENJICpwbGNpLCBBUFBMICphcHBsLCBBUElfUEFSU0UgKm1zZykKIHsKICAgd29yZCBJbmZvPTA7CiAgIHdvcmQgaTsKQEAgLTg2ODksNyArODcxMSw3IEBACiAvKiBzZW5kIGEgcmVxdWVzdCBmb3IgdGhlIHNpZ25hbGluZyBlbnRpdHkgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXZvaWQgc2lnX3JlcShQTENJICAgKiBwbGNpLCBieXRlIHJlcSwgYnl0ZSBJZCkKK3N0YXRpYyB2b2lkIHNpZ19yZXEoUExDSSAqcGxjaSwgYnl0ZSByZXEsIGJ5dGUgSWQpCiB7CiAgIGlmKCFwbGNpKSByZXR1cm47CiAgIGlmKHBsY2ktPmFkYXB0ZXItPmFkYXB0ZXJfZGlzYWJsZWQpIHJldHVybjsKQEAgLTg3ODksNyArODgxMSw3IEBACiAgIGRidWcoMSxkcHJpbnRmKCJzZW5kX29rIikpOwogfQogCi12b2lkIHNlbmRfZGF0YShQTENJICAgKiBwbGNpKQorc3RhdGljIHZvaWQgc2VuZF9kYXRhKFBMQ0kgKnBsY2kpCiB7CiAgIERJVkFfQ0FQSV9BREFQVEVSICAgKiBhOwogICBEQVRBX0IzX0RFU0MgICAqIGRhdGE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vaGZjcGNpLmMgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vaGZjcGNpLmMKaW5kZXggZjBlMTRkZi4uNjQxYTljZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL2hmY3BjaS5jCisrKyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9oZmNwY2kuYwpAQCAtNTYsOCArNTYsOCBAQAogc3RhdGljIGludCBIRkNfY250Owogc3RhdGljIHVpbnQgZGVidWc7CiBzdGF0aWMgdWludCBwb2xsLCB0aWNzOwotc3RydWN0IHRpbWVyX2xpc3QgaGZjX3RsOwotdTMyCWhmY19qaWZmaWVzOworc3RhdGljIHN0cnVjdCB0aW1lcl9saXN0IGhmY190bDsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGhmY19qaWZmaWVzOwogCiBNT0RVTEVfQVVUSE9SKCJLYXJzdGVuIEtlaWwiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9oZmNzdXNiLmMgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vaGZjc3VzYi5jCmluZGV4IGJhNjkyNWYuLjljNDI3ZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9oZmNzdXNiLmMKKysrIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL2hmY3N1c2IuYwpAQCAtMzUsNyArMzUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21JU0ROaHcuaD4KICNpbmNsdWRlICJoZmNzdXNiLmgiCiAKLWNvbnN0IGNoYXIgKmhmY3N1c2JfcmV2ID0gIlJldmlzaW9uOiAwLjMuMyAoc29ja2V0KSwgMjAwOC0xMS0wNSI7CitzdGF0aWMgY29uc3QgY2hhciAqaGZjc3VzYl9yZXYgPSAiUmV2aXNpb246IDAuMy4zIChzb2NrZXQpLCAyMDA4LTExLTA1IjsKIAogc3RhdGljIHVuc2lnbmVkIGludCBkZWJ1ZzsKIHN0YXRpYyBpbnQgcG9sbCA9IERFRkFVTFRfVFJBTlNQX0JVUlNUX1NaOwpAQCAtOTc0LDcgKzk3NCw3IEBACiAJc3Bpbl91bmxvY2soJmh3LT5sb2NrKTsKIH0KIAotdm9pZAorc3RhdGljIHZvaWQKIGZpbGxfaXNvY191cmIoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgcGlwZSwKIAkgICAgICB2b2lkICpidWYsIGludCBudW1fcGFja2V0cywgaW50IHBhY2tldF9zaXplLCBpbnQgaW50ZXJ2YWwsCiAJICAgICAgdXNiX2NvbXBsZXRlX3QgY29tcGxldGUsIHZvaWQgKmNvbnRleHQpCkBAIC0xNzIwLDcgKzE3MjAsNyBAQAogCiAKIC8qIEhhcmR3YXJlIEluaXRpYWxpemF0aW9uICovCi1pbnQKK3N0YXRpYyBpbnQKIHNldHVwX2hmY3N1c2Ioc3RydWN0IGhmY3N1c2IgKmh3KQogewogCWludCBlcnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vaGZjc3VzYi5oIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL2hmY3N1c2IuaAppbmRleCAwOTg0ODZiLi40M2VmZTczIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vaGZjc3VzYi5oCisrKyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9oZmNzdXNiLmgKQEAgLTE5OCw3ICsxOTgsNyBAQAogfTsKIAogLyogc3RyaW5nIGRlc2NyaXB0aW9uIG9mIGNob3NlbiBjb25maWcgKi8KLWNoYXIgKmNvbmZfc3RyW10gPSB7CitzdGF0aWMgY2hhciAqY29uZl9zdHJbXSA9IHsKIAkiNCBJbnRlcnJ1cHQgSU4gKyAzIElzb2Nocm9uIE9VVCIsCiAJIjMgSW50ZXJydXB0IElOICsgMyBJc29jaHJvbiBPVVQiLAogCSI0IElzb2Nocm9uIElOICsgMyBJc29jaHJvbiBPVVQiLApAQCAtMzE2LDcgKzMxNiw3IEBACiAjZGVmaW5lIEhGQ19NQVhfVEVfTEFZRVIxX1NUQVRFIDgKICNkZWZpbmUgSEZDX01BWF9OVF9MQVlFUjFfU1RBVEUgNAogCi1jb25zdCBjaGFyICpIRkNfVEVfTEFZRVIxX1NUQVRFU1tIRkNfTUFYX1RFX0xBWUVSMV9TVEFURSArIDFdID0geworc3RhdGljIGNvbnN0IGNoYXIgKkhGQ19URV9MQVlFUjFfU1RBVEVTW0hGQ19NQVhfVEVfTEFZRVIxX1NUQVRFICsgMV0gPSB7CiAJIlRFIEYwIC0gUmVzZXQiLAogCSJURSBGMSAtIFJlc2V0IiwKIAkiVEUgRjIgLSBTZW5zaW5nIiwKQEAgLTMyOCw3ICszMjgsNyBAQAogCSJURSBGOCAtIExvc3QgZnJhbWluZyIsCiB9OwogCi1jb25zdCBjaGFyICpIRkNfTlRfTEFZRVIxX1NUQVRFU1tIRkNfTUFYX05UX0xBWUVSMV9TVEFURSArIDFdID0geworc3RhdGljIGNvbnN0IGNoYXIgKkhGQ19OVF9MQVlFUjFfU1RBVEVTW0hGQ19NQVhfTlRfTEFZRVIxX1NUQVRFICsgMV0gPSB7CiAJIk5UIEcwIC0gUmVzZXQiLAogCSJOVCBHMSAtIERlYWN0aXZlIiwKIAkiTlQgRzIgLSBQZW5kaW5nIGFjdGl2YXRpb24iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2NhbGxjLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvY2FsbGMuYwppbmRleCA3YzU2YzQ0Li4wMjVhMjBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvY2FsbGMuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvY2FsbGMuYwpAQCAtMjQsNyArMjQsNiBAQAogY29uc3QgY2hhciAqbGxpX3JldmlzaW9uID0gIiRSZXZpc2lvbjogMi41OS4yLjQgJCI7CiAKIGV4dGVybiBzdHJ1Y3QgSXNkbkNhcmQgY2FyZHNbXTsKLWV4dGVybiBpbnQgbnJjYXJkczsKIAogc3RhdGljIGludCBpbml0X2Jfc3Qoc3RydWN0IENoYW5uZWwgKmNoYW5wLCBpbnQgaW5jb21pbmcpOwogc3RhdGljIHZvaWQgcmVsZWFzZV9iX3N0KHN0cnVjdCBDaGFubmVsICpjaGFucCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvY29uZmlnLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvY29uZmlnLmMKaW5kZXggZGVkOWQwYi4uNGZhYjE4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2NvbmZpZy5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9jb25maWcuYwpAQCAtMzYxLDEyICszNjEsNiBAQAogCiBpbnQgbnJjYXJkczsKIAotZXh0ZXJuIGNvbnN0IGNoYXIgKmwxX3JldmlzaW9uOwotZXh0ZXJuIGNvbnN0IGNoYXIgKmwyX3JldmlzaW9uOwotZXh0ZXJuIGNvbnN0IGNoYXIgKmwzX3JldmlzaW9uOwotZXh0ZXJuIGNvbnN0IGNoYXIgKmxsaV9yZXZpc2lvbjsKLWV4dGVybiBjb25zdCBjaGFyICp0ZWlfcmV2aXNpb247Ci0KIGNoYXIgKkhpU2F4X2dldHJldihjb25zdCBjaGFyICpyZXZpc2lvbikKIHsKIAljaGFyICpyZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjc2NhcmQuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNzY2FyZC5jCmluZGV4IGNmMDgyNjYuLjIwZDc2ODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNzY2FyZC5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNzY2FyZC5jCkBAIC0xNiw4ICsxNiw2IEBACiAjaW5jbHVkZSAiaGZjXzJiZHMwLmgiCiAjaW5jbHVkZSAiaXNkbmwxLmgiCiAKLWV4dGVybiBjb25zdCBjaGFyICpDYXJkVHlwZVtdOwotCiBzdGF0aWMgY29uc3QgY2hhciAqaGZjc19yZXZpc2lvbiA9ICIkUmV2aXNpb246IDEuMTAuMi40ICQiOwogCiBzdGF0aWMgaXJxcmV0dXJuX3QKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9oaXNheC5oIGIvZHJpdmVycy9pc2RuL2hpc2F4L2hpc2F4LmgKaW5kZXggZThkNDI5Zi4uZjg1MjcwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2hpc2F4LmgKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2hpc2F4LmgKQEAgLTEyMSw2ICsxMjEsMTUgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAorZXh0ZXJuIGNvbnN0IGNoYXIgKkNhcmRUeXBlW107CitleHRlcm4gaW50IG5yY2FyZHM7CisKK2V4dGVybiBjb25zdCBjaGFyICpsMV9yZXZpc2lvbjsKK2V4dGVybiBjb25zdCBjaGFyICpsMl9yZXZpc2lvbjsKK2V4dGVybiBjb25zdCBjaGFyICpsM19yZXZpc2lvbjsKK2V4dGVybiBjb25zdCBjaGFyICpsbGlfcmV2aXNpb247CitleHRlcm4gY29uc3QgY2hhciAqdGVpX3JldmlzaW9uOworCiAvKiBpbmNsdWRlIGwzZHNzMSAmIG5pMSBzcGVjaWZpYyBwcm9jZXNzIHN0cnVjdHVyZXMsIGJ1dCBubyBvdGhlciBkZWZpbmVzICovCiAjaWZkZWYgQ09ORklHX0hJU0FYX0VVUk8KICAgI2RlZmluZSBsM2RzczFfcHJvY2VzcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2lzZG5sMS5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2lzZG5sMS5jCmluZGV4IGExNDIwNGUuLjMxN2YxNmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9pc2RubDEuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaXNkbmwxLmMKQEAgLTE4LDEyICsxOCwxMiBAQAogICoKICAqLwogCi1jb25zdCBjaGFyICpsMV9yZXZpc2lvbiA9ICIkUmV2aXNpb246IDIuNDYuMi41ICQiOwotCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgImhpc2F4LmgiCiAjaW5jbHVkZSAiaXNkbmwxLmgiCiAKK2NvbnN0IGNoYXIgKmwxX3JldmlzaW9uID0gIiRSZXZpc2lvbjogMi40Ni4yLjUgJCI7CisKICNkZWZpbmUgVElNRVIzX1ZBTFVFIDcwMDAKIAogc3RhdGljIHN0cnVjdCBGc20gbDFmc21fYjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9zZWRsYmF1ZXIuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9zZWRsYmF1ZXIuYwppbmRleCBhMTBkZmE4Li41NTY5YTUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvc2VkbGJhdWVyLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L3NlZGxiYXVlci5jCkBAIC00OCw4ICs0OCw2IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvaXNhcG5wLmg+CiAKLWV4dGVybiBjb25zdCBjaGFyICpDYXJkVHlwZVtdOwotCiBzdGF0aWMgY29uc3QgY2hhciAqU2VkbGJhdWVyX3JldmlzaW9uID0gIiRSZXZpc2lvbjogMS4zNC4yLjYgJCI7CiAKIHN0YXRpYyBjb25zdCBjaGFyICpTZWRsYmF1ZXJfVHlwZXNbXSA9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvdGVsZXMwLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvdGVsZXMwLmMKaW5kZXggNDg1ODEzMy4uM2NhMGJlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L3RlbGVzMC5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC90ZWxlczAuYwpAQCAtMjEsOCArMjEsNiBAQAogI2luY2x1ZGUgImlzYWMuaCIKICNpbmNsdWRlICJoc2N4LmgiCiAKLWV4dGVybiBjb25zdCBjaGFyICpDYXJkVHlwZVtdOwotCiBzdGF0aWMgY29uc3QgY2hhciAqdGVsZXMwX3JldmlzaW9uID0gIiRSZXZpc2lvbjogMi4xNS4yLjQgJCI7CiAKICNkZWZpbmUgVEVMRVNfSU9NRU1fU0laRQkweDQwMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L3RlbGVzMy5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L3RlbGVzMy5jCmluZGV4IDVkYzlmMWEuLmU5ZjViYjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC90ZWxlczMuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvdGVsZXMzLmMKQEAgLTIwLDcgKzIwLDYgQEAKICNpbmNsdWRlICJoc2N4LmgiCiAjaW5jbHVkZSAiaXNkbmwxLmgiCiAKLWV4dGVybiBjb25zdCBjaGFyICpDYXJkVHlwZVtdOwogc3RhdGljIGNvbnN0IGNoYXIgKnRlbGVzM19yZXZpc2lvbiA9ICIkUmV2aXNpb246IDIuMTkuMi40ICQiOwogCiAjZGVmaW5lIGJ5dGVvdXQoYWRkcix2YWwpIG91dGIodmFsLGFkZHIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vbUlTRE4vY2xvY2suYyBiL2RyaXZlcnMvaXNkbi9tSVNETi9jbG9jay5jCmluZGV4IDQ0ZDljM2QuLmYxYmJjODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9tSVNETi9jbG9jay5jCisrKyBiL2RyaXZlcnMvaXNkbi9tSVNETi9jbG9jay5jCkBAIC00MSwxMSArNDEsMTEgQEAKIAogc3RhdGljIHVfaW50ICpkZWJ1ZzsKIHN0YXRpYyBMSVNUX0hFQUQoaWNsb2NrX2xpc3QpOwotREVGSU5FX1JXTE9DSyhpY2xvY2tfbG9jayk7Ci11MTYJaWNsb2NrX2NvdW50OwkJLyogY291bnRlciBvZiBsYXN0IGNsb2NrICovCi1zdHJ1Y3QJdGltZXZhbCBpY2xvY2tfdHY7CS8qIHRpbWUgc3RhbXAgb2YgbGFzdCBjbG9jayAqLwotaW50CWljbG9ja190dl92YWxpZDsJLyogYWxyZWFkeSByZWNlaXZlZCBvbmUgdGltZXN0YW1wICovCi1zdHJ1Y3QJbUlTRE5jbG9jayAqaWNsb2NrX2N1cnJlbnQ7CitzdGF0aWMgREVGSU5FX1JXTE9DSyhpY2xvY2tfbG9jayk7CitzdGF0aWMgdTE2IGljbG9ja19jb3VudDsJCS8qIGNvdW50ZXIgb2YgbGFzdCBjbG9jayAqLworc3RhdGljIHN0cnVjdCB0aW1ldmFsIGljbG9ja190djsJLyogdGltZSBzdGFtcCBvZiBsYXN0IGNsb2NrICovCitzdGF0aWMgaW50IGljbG9ja190dl92YWxpZDsJCS8qIGFscmVhZHkgcmVjZWl2ZWQgb25lIHRpbWVzdGFtcCAqLworc3RhdGljIHN0cnVjdCBtSVNETmNsb2NrICppY2xvY2tfY3VycmVudDsKIAogdm9pZAogbUlTRE5faW5pdF9jbG9jayh1X2ludCAqZHApCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vbUlTRE4vdGltZXJkZXYuYyBiL2RyaXZlcnMvaXNkbi9tSVNETi90aW1lcmRldi5jCmluZGV4IGYyYjMyMTguLmJiZDk5ZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9tSVNETi90aW1lcmRldi5jCisrKyBiL2RyaXZlcnMvaXNkbi9tSVNETi90aW1lcmRldi5jCkBAIC0xNTIsOCArMTUyLDcgQEAKIAl1X2xvbmcJCQlmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZ0aW1lci0+ZGV2LT5sb2NrLCBmbGFncyk7Ci0JbGlzdF9kZWwoJnRpbWVyLT5saXN0KTsKLQlsaXN0X2FkZF90YWlsKCZ0aW1lci0+bGlzdCwgJnRpbWVyLT5kZXYtPmV4cGlyZWQpOworCWxpc3RfbW92ZV90YWlsKCZ0aW1lci0+bGlzdCwgJnRpbWVyLT5kZXYtPmV4cGlyZWQpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRpbWVyLT5kZXYtPmxvY2ssIGZsYWdzKTsKIAl3YWtlX3VwX2ludGVycnVwdGlibGUoJnRpbWVyLT5kZXYtPndhaXQpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL3BjYml0L2xheWVyMi5jIGIvZHJpdmVycy9pc2RuL3BjYml0L2xheWVyMi5jCmluZGV4IDViYTJhODcuLmUwNzVlOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9wY2JpdC9sYXllcjIuYworKysgYi9kcml2ZXJzL2lzZG4vcGNiaXQvbGF5ZXIyLmMKQEAgLTM0Nyw4ICszNDcsNyBAQAogCQlpZiAoZGV2LT5yZWFkX2ZyYW1lKSB7CiAJCQlwcmludGsoS0VSTl9ERUJVRyAicGNiaXRfcmVjZWl2ZTogVHlwZSAwIGZyYW1lIGFuZCByZWFkX2ZyYW1lICE9IE5VTExcbiIpOwogCQkJLyogZGlzY2FyZCBwcmV2aW91cyBxdWV1ZWQgZnJhbWUgKi8KLQkJCWlmIChkZXYtPnJlYWRfZnJhbWUtPnNrYikKLQkJCQlrZnJlZV9za2IoZGV2LT5yZWFkX2ZyYW1lLT5za2IpOworCQkJa2ZyZWVfc2tiKGRldi0+cmVhZF9mcmFtZS0+c2tiKTsKIAkJCWtmcmVlKGRldi0+cmVhZF9mcmFtZSk7CiAJCQlkZXYtPnJlYWRfZnJhbWUgPSBOVUxMOwogCQl9CkBAIC02MDEsOCArNjAwLDcgQEAKIAlkZXYtPndfYnVzeSA9IGRldi0+cl9idXN5ID0gMTsKIAogCWlmIChkZXYtPnJlYWRfZnJhbWUpIHsKLQkJaWYgKGRldi0+cmVhZF9mcmFtZS0+c2tiKQotCQkJa2ZyZWVfc2tiKGRldi0+cmVhZF9mcmFtZS0+c2tiKTsKKwkJa2ZyZWVfc2tiKGRldi0+cmVhZF9mcmFtZS0+c2tiKTsKIAkJa2ZyZWUoZGV2LT5yZWFkX2ZyYW1lKTsKIAkJZGV2LT5yZWFkX2ZyYW1lID0gTlVMTDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvS2NvbmZpZyBiL2RyaXZlcnMvbGVkcy9LY29uZmlnCmluZGV4IDc0MjcxMzYuLjU1NmFlY2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGVkcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvbGVkcy9LY29uZmlnCkBAIC0yMjMsNCArMjIzLDcgQEAKIAkgIFRoaXMgYWxsb3dzIExFRHMgdG8gYmUgaW5pdGlhbGlzZWQgaW4gdGhlIE9OIHN0YXRlLgogCSAgSWYgdW5zdXJlLCBzYXkgWS4KIAorY29tbWVudCAiaXB0YWJsZXMgdHJpZ2dlciBpcyB1bmRlciBOZXRmaWx0ZXIgY29uZmlnIChMRUQgdGFyZ2V0KSIKKwlkZXBlbmRzIG9uIExFRFNfVFJJR0dFUlMKKwogZW5kaWYgIyBORVdfTEVEUwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tY2EvbWNhLWJ1cy5jIGIvZHJpdmVycy9tY2EvbWNhLWJ1cy5jCmluZGV4IGVmMmRiZmUuLmFkYTVlYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWNhL21jYS1idXMuYworKysgYi9kcml2ZXJzL21jYS9tY2EtYnVzLmMKQEAgLTExMCw3ICsxMTAsNyBAQAogCiAJbWNhX2Rldi0+ZGV2LnBhcmVudCA9ICZtY2FfYnVzLT5kZXY7CiAJbWNhX2Rldi0+ZGV2LmJ1cyA9ICZtY2FfYnVzX3R5cGU7Ci0Jc3ByaW50ZiAobWNhX2Rldi0+ZGV2LmJ1c19pZCwgIiUwMmQ6JTAyWCIsIGJ1cywgbWNhX2Rldi0+c2xvdCk7CisJZGV2X3NldF9uYW1lKCZtY2FfZGV2LT5kZXYsICIlMDJkOiUwMlgiLCBidXMsIG1jYV9kZXYtPnNsb3QpOwogCW1jYV9kZXYtPmRtYV9tYXNrID0gbWNhX2J1cy0+ZGVmYXVsdF9kbWFfbWFzazsKIAltY2FfZGV2LT5kZXYuZG1hX21hc2sgPSAmbWNhX2Rldi0+ZG1hX21hc2s7CiAJbWNhX2Rldi0+ZGV2LmNvaGVyZW50X2RtYV9tYXNrID0gbWNhX2Rldi0+ZG1hX21hc2s7CkBAIC0xNTEsNyArMTUxLDcgQEAKIAlpZiAoIW1jYV9idXMpCiAJCXJldHVybiBOVUxMOwogCi0Jc3ByaW50ZihtY2FfYnVzLT5kZXYuYnVzX2lkLCJtY2ElZCIsYnVzKTsKKwlkZXZfc2V0X25hbWUoJm1jYV9idXMtPmRldiwgIm1jYSVkIiwgYnVzKTsKIAlzcHJpbnRmKG1jYV9idXMtPm5hbWUsIkhvc3QgJXMgTUNBIEJyaWRnZSIsIGJ1cyA/ICJTZWNvbmRhcnkiIDogIlByaW1hcnkiKTsKIAlpZiAoZGV2aWNlX3JlZ2lzdGVyKCZtY2FfYnVzLT5kZXYpKSB7CiAJCWtmcmVlKG1jYV9idXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby10ZWE1NzY0LmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXRlYTU3NjQuYwppbmRleCA0ZDM1MzA4Li4zOTM2MjM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXRlYTU3NjQuYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXRlYTU3NjQuYwpAQCAtMjk4LDcgKzI5OCw4IEBACiAKIAlzdHJsY3B5KHYtPmRyaXZlciwgZGV2LT5kZXYuZHJpdmVyLT5uYW1lLCBzaXplb2Yodi0+ZHJpdmVyKSk7CiAJc3RybGNweSh2LT5jYXJkLCBkZXYtPm5hbWUsIHNpemVvZih2LT5jYXJkKSk7Ci0Jc25wcmludGYodi0+YnVzX2luZm8sIHNpemVvZih2LT5idXNfaW5mbyksICJJMkM6JXMiLCBkZXYtPmRldi5idXNfaWQpOworCXNucHJpbnRmKHYtPmJ1c19pbmZvLCBzaXplb2Yodi0+YnVzX2luZm8pLAorCQkgIkkyQzolcyIsIGRldl9uYW1lKCZkZXYtPmRldikpOwogCXYtPnZlcnNpb24gPSBSQURJT19WRVJTSU9OOwogCXYtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1RVTkVSIHwgVjRMMl9DQVBfUkFESU87CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1hbHNhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1hbHNhLmMKaW5kZXggNjZjNzU1Yy4uY2U5OGQ5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtYWxzYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWFsc2EuYwpAQCAtODAzLDkgKzgwMywxMCBAQAogCQlyZXR1cm4gKC1FTk9FTlQpOwogCX0KIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2bm9dLCBpZFtkZXZub10sIFRISVNfTU9EVUxFLCBzaXplb2Yoc25kX2N4ODhfY2FyZF90KSk7Ci0JaWYgKCFjYXJkKQotCQlyZXR1cm4gKC1FTk9NRU0pOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZub10sIGlkW2Rldm5vXSwgVEhJU19NT0RVTEUsCisJCQkgICAgICBzaXplb2Yoc25kX2N4ODhfY2FyZF90KSwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJY2FyZC0+cHJpdmF0ZV9mcmVlID0gc25kX2N4ODhfZGV2X2ZyZWU7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1hdWRpby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWF1ZGlvLmMKaW5kZXggMmFjNzM4Zi4uZjEzMmUzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWF1ZGlvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWF1ZGlvLmMKQEAgLTQ0OCw5ICs0NDgsMTAgQEAKIAlwcmludGsoS0VSTl9JTkZPICJlbTI4eHgtYXVkaW8uYzogQ29weXJpZ2h0IChDKSAyMDA2IE1hcmt1cyAiCiAJCQkgIlJlY2hiZXJnZXJcbiIpOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZucl0sICJFbTI4eHggQXVkaW8iLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldm5yXSwgIkVtMjh4eCBBdWRpbyIsIFRISVNfTU9EVUxFLCAwLAorCQkJICAgICAgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJc3Bpbl9sb2NrX2luaXQoJmFkZXYtPnNsb2NrKTsKIAllcnIgPSBzbmRfcGNtX25ldyhjYXJkLCAiRW0yOHh4IEF1ZGlvIiwgMCwgMCwgMSwgJnBjbSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1hbHNhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1hbHNhLmMKaW5kZXggYzc1MGQzZC4uOGIwYjY0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtYWxzYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWFsc2EuYwpAQCAtOTkwLDEwICs5OTAsMTAgQEAKIAlpZiAoIWVuYWJsZVtkZXZudW1dKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2bnVtXSwgaWRbZGV2bnVtXSwgVEhJU19NT0RVTEUsIHNpemVvZihzbmRfY2FyZF9zYWE3MTM0X3QpKTsKLQotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZudW1dLCBpZFtkZXZudW1dLCBUSElTX01PRFVMRSwKKwkJCSAgICAgIHNpemVvZihzbmRfY2FyZF9zYWE3MTM0X3QpLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAlzdHJjcHkoY2FyZC0+ZHJpdmVyLCAiU0FBNzEzNCIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItZGV2aWNlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItZGV2aWNlLmMKaW5kZXggY2Y5ZDRjNy4uOGE0Yjc0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWRldmljZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1kZXZpY2UuYwpAQCAtMzQsNyArMzQsNyBAQAogCXNwaW5fbG9ja19pbml0KCZ2NGwyX2Rldi0+bG9jayk7CiAJdjRsMl9kZXYtPmRldiA9IGRldjsKIAlzbnByaW50Zih2NGwyX2Rldi0+bmFtZSwgc2l6ZW9mKHY0bDJfZGV2LT5uYW1lKSwgIiVzICVzIiwKLQkJCWRldi0+ZHJpdmVyLT5uYW1lLCBkZXYtPmJ1c19pZCk7CisJCQlkZXYtPmRyaXZlci0+bmFtZSwgZGV2X25hbWUoZGV2KSk7CiAJZGV2X3NldF9kcnZkYXRhKGRldiwgdjRsMl9kZXYpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvbWNwLWNvcmUuYyBiL2RyaXZlcnMvbWZkL21jcC1jb3JlLmMKaW5kZXggNjA2M2RjMi4uNTcyNzFjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvbWNwLWNvcmUuYworKysgYi9kcml2ZXJzL21mZC9tY3AtY29yZS5jCkBAIC0yMTQsNyArMjE0LDcgQEAKIAogaW50IG1jcF9ob3N0X3JlZ2lzdGVyKHN0cnVjdCBtY3AgKm1jcCkKIHsKLQlzdHJjcHkobWNwLT5hdHRhY2hlZF9kZXZpY2UuYnVzX2lkLCAibWNwMCIpOworCWRldl9zZXRfbmFtZSgmbWNwLT5hdHRhY2hlZF9kZXZpY2UsICJtY3AwIik7CiAJcmV0dXJuIGRldmljZV9yZWdpc3RlcigmbWNwLT5hdHRhY2hlZF9kZXZpY2UpOwogfQogRVhQT1JUX1NZTUJPTChtY3BfaG9zdF9yZWdpc3Rlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC91Y2IxeDAwLWNvcmUuYyBiL2RyaXZlcnMvbWZkL3VjYjF4MDAtY29yZS5jCmluZGV4IDY4NjBjOTIuLmZlYTkwODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3VjYjF4MDAtY29yZS5jCisrKyBiL2RyaXZlcnMvbWZkL3VjYjF4MDAtY29yZS5jCkBAIC00OTIsNyArNDkyLDcgQEAKIAogCXVjYi0+ZGV2LmNsYXNzID0gJnVjYjF4MDBfY2xhc3M7CiAJdWNiLT5kZXYucGFyZW50ID0gJm1jcC0+YXR0YWNoZWRfZGV2aWNlOwotCXN0cmxjcHkodWNiLT5kZXYuYnVzX2lkLCAidWNiMXgwMCIsIHNpemVvZih1Y2ItPmRldi5idXNfaWQpKTsKKwlkZXZfc2V0X25hbWUoJnVjYi0+ZGV2LCAidWNiMXgwMCIpOwogCiAJc3Bpbl9sb2NrX2luaXQoJnVjYi0+bG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJnVjYi0+aW9fbG9jayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jIGIvZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYwppbmRleCAyYjExOTZlLi5lOTRlOTIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMKQEAgLTE2MDMsNyArMTYwMyw3IEBACiAKIAl0YXNrbGV0X2luaXQoJmhvc3QtPnRhc2tsZXQsIGF0bWNpX3Rhc2tsZXRfZnVuYywgKHVuc2lnbmVkIGxvbmcpaG9zdCk7CiAKLQlyZXQgPSByZXF1ZXN0X2lycShpcnEsIGF0bWNpX2ludGVycnVwdCwgMCwgcGRldi0+ZGV2LmJ1c19pZCwgaG9zdCk7CisJcmV0ID0gcmVxdWVzdF9pcnEoaXJxLCBhdG1jaV9pbnRlcnJ1cHQsIDAsIGRldl9uYW1lKCZwZGV2LT5kZXYpLCBob3N0KTsKIAlpZiAocmV0KQogCQlnb3RvIGVycl9yZXF1ZXN0X2lycTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9vZl9tbWNfc3BpLmMgYi9kcml2ZXJzL21tYy9ob3N0L29mX21tY19zcGkuYwppbmRleCBmYjI5MjFmLi4wYzQ0ZDU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L29mX21tY19zcGkuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L29mX21tY19zcGkuYwpAQCAtMTAzLDcgKzEwMyw3IEBACiAJCWlmICghZ3Bpb19pc192YWxpZChvbXMtPmdwaW9zW2ldKSkKIAkJCWNvbnRpbnVlOwogCi0JCXJldCA9IGdwaW9fcmVxdWVzdChvbXMtPmdwaW9zW2ldLCBkZXYtPmJ1c19pZCk7CisJCXJldCA9IGdwaW9fcmVxdWVzdChvbXMtPmdwaW9zW2ldLCBkZXZfbmFtZShkZXYpKTsKIAkJaWYgKHJldCA8IDApIHsKIAkJCW9tcy0+Z3Bpb3NbaV0gPSAtRUlOVkFMOwogCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL0tjb25maWcgYi9kcml2ZXJzL210ZC9tYXBzL0tjb25maWcKaW5kZXggMDQzZDUwZi4uNzI5Zjg5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvS2NvbmZpZwpAQCAtNTUxLDUgKzU1MSwxNSBAQAogCiAJICBUaGlzIHNlbGVjdGlvbiBhdXRvbWF0aWNhbGx5IHNlbGVjdHMgdGhlIG1hcF9yYW0gZHJpdmVyLgogCi1lbmRtZW51Citjb25maWcgTVREX1ZNVQorCXRyaXN0YXRlICJNYXAgZHJpdmVyIGZvciBEcmVhbWNhc3QgVk1VIgorCWRlcGVuZHMgb24gTUFQTEUKKwloZWxwCisJICBUaGlzIGRyaXZlciBlbmFibGVzIGFjY2VzcyB0byB0aGUgRHJlYW1jYXN0IFZpc3VhbCBNZW1vcnkgVW5pdCAoVk1VKS4KIAorCSAgTW9zdCBEcmVhbWNhc3QgdXNlcnMgd2lsbCB3YW50IHRvIHNheSBZIGhlcmUuCisKKwkgIFRvIGJ1aWxkIHRoaXMgYXMgYSBtb2R1bGUgc2VsZWN0IE0gaGVyZSwgdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZAorCSAgdm11LWZsYXNoLgorCitlbmRtZW51CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL01ha2VmaWxlIGIvZHJpdmVycy9tdGQvbWFwcy9NYWtlZmlsZQppbmRleCA2ZDliYTM1Li4yNmIyOGE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvTWFrZWZpbGUKQEAgLTYxLDMgKzYxLDQgQEAKIG9iai0kKENPTkZJR19NVERfT01BUF9OT1IpCSs9IG9tYXBfbm9yLm8KIG9iai0kKENPTkZJR19NVERfSU5URUxfVlJfTk9SKQkrPSBpbnRlbF92cl9ub3Iubwogb2JqLSQoQ09ORklHX01URF9CRklOX0FTWU5DKQkrPSBiZmluLWFzeW5jLWZsYXNoLm8KK29iai0kKENPTkZJR19NVERfVk1VKQkJKz0gdm11LWZsYXNoLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvcHhhMnh4LWZsYXNoLmMgYi9kcml2ZXJzL210ZC9tYXBzL3B4YTJ4eC1mbGFzaC5jCmluZGV4IDc3MTEzOWMuLmU5MDI2Y2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvcHhhMnh4LWZsYXNoLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9weGEyeHgtZmxhc2guYwpAQCAtNDEsOSArNDEsOCBAQAogc3RhdGljIGNvbnN0IGNoYXIgKnByb2Jlc1tdID0geyAiUmVkQm9vdCIsICJjbWRsaW5lcGFydCIsIE5VTEwgfTsKIAogCi1zdGF0aWMgaW50IF9faW5pdCBweGEyeHhfZmxhc2hfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBfX2luaXQgcHhhMnh4X2ZsYXNoX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCXN0cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhICpmbGFzaCA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCBweGEyeHhfZmxhc2hfaW5mbyAqaW5mbzsKIAlzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqcGFydHM7CkBAIC0xMTQsMTUgKzExMywxNSBAQAogCQlhZGRfbXRkX2RldmljZShpbmZvLT5tdGQpOwogCX0KIAotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGluZm8pOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGluZm8pOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IF9fZXhpdCBweGEyeHhfZmxhc2hfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19leGl0IHB4YTJ4eF9mbGFzaF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBweGEyeHhfZmxhc2hfaW5mbyAqaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBweGEyeHhfZmxhc2hfaW5mbyAqaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOwogCiAjaWZkZWYgQ09ORklHX01URF9QQVJUSVRJT05TCiAJaWYgKGluZm8tPm5yX3BhcnRzKQpAQCAtMTQxLDkgKzE0MCw5IEBACiB9CiAKICNpZmRlZiBDT05GSUdfUE0KLXN0YXRpYyBpbnQgcHhhMnh4X2ZsYXNoX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHB4YTJ4eF9mbGFzaF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCXN0cnVjdCBweGEyeHhfZmxhc2hfaW5mbyAqaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBweGEyeHhfZmxhc2hfaW5mbyAqaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAJaW50IHJldCA9IDA7CiAKIAlpZiAoaW5mby0+bXRkICYmIGluZm8tPm10ZC0+c3VzcGVuZCkKQEAgLTE1MSwxNyArMTUwLDE3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBweGEyeHhfZmxhc2hfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgcHhhMnh4X2ZsYXNoX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHB4YTJ4eF9mbGFzaF9pbmZvICppbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHB4YTJ4eF9mbGFzaF9pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAogCWlmIChpbmZvLT5tdGQgJiYgaW5mby0+bXRkLT5yZXN1bWUpCiAJCWluZm8tPm10ZC0+cmVzdW1lKGluZm8tPm10ZCk7CiAJcmV0dXJuIDA7CiB9Ci1zdGF0aWMgdm9pZCBweGEyeHhfZmxhc2hfc2h1dGRvd24oc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIHZvaWQgcHhhMnh4X2ZsYXNoX3NodXRkb3duKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcHhhMnh4X2ZsYXNoX2luZm8gKmluZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgcHhhMnh4X2ZsYXNoX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJaWYgKGluZm8gJiYgaW5mby0+bXRkLT5zdXNwZW5kKGluZm8tPm10ZCkgPT0gMCkKIAkJaW5mby0+bXRkLT5yZXN1bWUoaW5mby0+bXRkKTsKQEAgLTE3MiwxMSArMTcxLDEzIEBACiAjZGVmaW5lIHB4YTJ4eF9mbGFzaF9zaHV0ZG93biBOVUxMCiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHB4YTJ4eF9mbGFzaF9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gInB4YTJ4eC1mbGFzaCIsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBweGEyeHhfZmxhc2hfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCQk9ICJweGEyeHgtZmxhc2giLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJfSwKIAkucHJvYmUJCT0gcHhhMnh4X2ZsYXNoX3Byb2JlLAotCS5yZW1vdmUJCT0gX19leGl0X3AocHhhMnh4X2ZsYXNoX3JlbW92ZSksCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChweGEyeHhfZmxhc2hfcmVtb3ZlKSwKIAkuc3VzcGVuZAk9IHB4YTJ4eF9mbGFzaF9zdXNwZW5kLAogCS5yZXN1bWUJCT0gcHhhMnh4X2ZsYXNoX3Jlc3VtZSwKIAkuc2h1dGRvd24JPSBweGEyeHhfZmxhc2hfc2h1dGRvd24sCkBAIC0xODQsMTIgKzE4NSwxMiBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBpbml0X3B4YTJ4eF9mbGFzaCh2b2lkKQogewotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJnB4YTJ4eF9mbGFzaF9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnB4YTJ4eF9mbGFzaF9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgY2xlYW51cF9weGEyeHhfZmxhc2godm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmcHhhMnh4X2ZsYXNoX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnB4YTJ4eF9mbGFzaF9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChpbml0X3B4YTJ4eF9mbGFzaCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL3ZtdS1mbGFzaC5jIGIvZHJpdmVycy9tdGQvbWFwcy92bXUtZmxhc2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjczMjk3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tdGQvbWFwcy92bXUtZmxhc2guYwpAQCAtMCwwICsxLDgzMiBAQAorLyogdm11LWZsYXNoLmMKKyAqIERyaXZlciBmb3IgU0VHQSBEcmVhbWNhc3QgVmlzdWFsIE1lbW9yeSBVbml0CisgKgorICogQ29weXJpZ2h0IChjKSBBZHJpYW4gTWNNZW5hbWluIDIwMDIgLSAyMDA5CisgKiBDb3B5cmlnaHQgKGMpIFBhdWwgTXVuZHQgMjAwMQorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHZlcnNpb24gMiBvZiB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbmNlCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L21hcGxlLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tYXAuaD4KKworc3RydWN0IHZtdV9jYWNoZSB7CisJdW5zaWduZWQgY2hhciAqYnVmZmVyOwkJLyogQ2FjaGUgKi8KKwl1bnNpZ25lZCBpbnQgYmxvY2s7CQkvKiBXaGljaCBibG9jayB3YXMgY2FjaGVkICovCisJdW5zaWduZWQgbG9uZyBqaWZmaWVzX2F0YzsJLyogV2hlbiB3YXMgaXQgY2FjaGVkPyAqLworCWludCB2YWxpZDsKK307CisKK3N0cnVjdCBtZGV2X3BhcnQgeworCXN0cnVjdCBtYXBsZV9kZXZpY2UgKm1kZXY7CisJaW50IHBhcnRpdGlvbjsKK307CisKK3N0cnVjdCB2bXVwYXJ0IHsKKwl1MTYgdXNlcl9ibG9ja3M7CisJdTE2IHJvb3RfYmxvY2s7CisJdTE2IG51bWJsb2NrczsKKwljaGFyICpuYW1lOworCXN0cnVjdCB2bXVfY2FjaGUgKnBjYWNoZTsKK307CisKK3N0cnVjdCBtZW1jYXJkIHsKKwl1MTYgdGVtcEE7CisJdTE2IHRlbXBCOworCXUzMiBwYXJ0aXRpb25zOworCXUzMiBibG9ja2xlbjsKKwl1MzIgd3JpdGVjbnQ7CisJdTMyIHJlYWRjbnQ7CisJdTMyIHJlbW92ZWFibGU7CisJaW50IHBhcnRpdGlvbjsKKwlpbnQgcmVhZDsKKwl1bnNpZ25lZCBjaGFyICpibG9ja3JlYWQ7CisJc3RydWN0IHZtdXBhcnQgKnBhcnRzOworCXN0cnVjdCBtdGRfaW5mbyAqbXRkOworfTsKKworc3RydWN0IHZtdV9ibG9jayB7CisJdW5zaWduZWQgaW50IG51bTsgLyogYmxvY2sgbnVtYmVyICovCisJdW5zaWduZWQgaW50IG9mczsgLyogYmxvY2sgb2Zmc2V0ICovCit9OworCitzdGF0aWMgc3RydWN0IHZtdV9ibG9jayAqb2ZzX3RvX2Jsb2NrKHVuc2lnbmVkIGxvbmcgc3JjX29mcywKKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IHBhcnRpdGlvbikKK3sKKwlzdHJ1Y3Qgdm11X2Jsb2NrICp2YmxvY2s7CisJc3RydWN0IG1hcGxlX2RldmljZSAqbWRldjsKKwlzdHJ1Y3QgbWVtY2FyZCAqY2FyZDsKKwlzdHJ1Y3QgbWRldl9wYXJ0ICptcGFydDsKKwlpbnQgbnVtOworCisJbXBhcnQgPSBtdGQtPnByaXY7CisJbWRldiA9IG1wYXJ0LT5tZGV2OworCWNhcmQgPSBtYXBsZV9nZXRfZHJ2ZGF0YShtZGV2KTsKKworCWlmIChzcmNfb2ZzID49IGNhcmQtPnBhcnRzW3BhcnRpdGlvbl0ubnVtYmxvY2tzICogY2FyZC0+YmxvY2tsZW4pCisJCWdvdG8gZmFpbGVkOworCisJbnVtID0gc3JjX29mcyAvIGNhcmQtPmJsb2NrbGVuOworCWlmIChudW0gPiBjYXJkLT5wYXJ0c1twYXJ0aXRpb25dLm51bWJsb2NrcykKKwkJZ290byBmYWlsZWQ7CisKKwl2YmxvY2sgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgdm11X2Jsb2NrKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF2YmxvY2spCisJCWdvdG8gZmFpbGVkOworCisJdmJsb2NrLT5udW0gPSBudW07CisJdmJsb2NrLT5vZnMgPSBzcmNfb2ZzICUgY2FyZC0+YmxvY2tsZW47CisJcmV0dXJuIHZibG9jazsKKworZmFpbGVkOgorCXJldHVybiBOVUxMOworfQorCisvKiBNYXBsZSBidXMgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIHJlYWRzICovCitzdGF0aWMgdm9pZCB2bXVfYmxvY2tyZWFkKHN0cnVjdCBtYXBsZXEgKm1xKQoreworCXN0cnVjdCBtYXBsZV9kZXZpY2UgKm1kZXY7CisJc3RydWN0IG1lbWNhcmQgKmNhcmQ7CisKKwltZGV2ID0gbXEtPmRldjsKKwljYXJkID0gbWFwbGVfZ2V0X2RydmRhdGEobWRldik7CisJLyogY29weSB0aGUgcmVhZCBpbiBkYXRhICovCisKKwlpZiAodW5saWtlbHkoIWNhcmQtPmJsb2NrcmVhZCkpCisJCXJldHVybjsKKworCW1lbWNweShjYXJkLT5ibG9ja3JlYWQsIG1xLT5yZWN2YnVmLT5idWYgKyAxMiwKKwkJY2FyZC0+YmxvY2tsZW4vY2FyZC0+cmVhZGNudCk7CisKK30KKworLyogSW50ZXJmYWNlIHdpdGggbWFwbGUgYnVzIHRvIHJlYWQgYmxvY2tzCisgKiBjYWNoaW5nIHRoZSByZXN1bHRzIHNvIHRoYXQgb3RoZXIgcGFydHMKKyAqIG9mIHRoZSBkcml2ZXIgY2FuIGFjY2VzcyBibG9jayByZWFkcyAqLworc3RhdGljIGludCBtYXBsZV92bXVfcmVhZF9ibG9jayh1bnNpZ25lZCBpbnQgbnVtLCB1bnNpZ25lZCBjaGFyICpidWYsCisJc3RydWN0IG10ZF9pbmZvICptdGQpCit7CisJc3RydWN0IG1lbWNhcmQgKmNhcmQ7CisJc3RydWN0IG1kZXZfcGFydCAqbXBhcnQ7CisJc3RydWN0IG1hcGxlX2RldmljZSAqbWRldjsKKwlpbnQgcGFydGl0aW9uLCBlcnJvciA9IDAsIHgsIHdhaXQ7CisJdW5zaWduZWQgY2hhciAqYmxvY2tyZWFkID0gTlVMTDsKKwlzdHJ1Y3Qgdm11X2NhY2hlICpwY2FjaGU7CisJX19iZTMyIHNlbmRidWY7CisKKwltcGFydCA9IG10ZC0+cHJpdjsKKwltZGV2ID0gbXBhcnQtPm1kZXY7CisJcGFydGl0aW9uID0gbXBhcnQtPnBhcnRpdGlvbjsKKwljYXJkID0gbWFwbGVfZ2V0X2RydmRhdGEobWRldik7CisJcGNhY2hlID0gY2FyZC0+cGFydHNbcGFydGl0aW9uXS5wY2FjaGU7CisJcGNhY2hlLT52YWxpZCA9IDA7CisKKwkvKiBwcmVwYXJlIHRoZSBjYWNoZSBmb3IgdGhpcyBibG9jayAqLworCWlmICghcGNhY2hlLT5idWZmZXIpIHsKKwkJcGNhY2hlLT5idWZmZXIgPSBrbWFsbG9jKGNhcmQtPmJsb2NrbGVuLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFwY2FjaGUtPmJ1ZmZlcikgeworCQkJZGV2X2VycigmbWRldi0+ZGV2LCAiVk1VIGF0ICglZCwgJWQpIC0gcmVhZCBmYWlscyBkdWUiCisJCQkJIiB0byBsYWNrIG9mIG1lbW9yeVxuIiwgbWRldi0+cG9ydCwKKwkJCQltZGV2LT51bml0KTsKKwkJCWVycm9yID0gLUVOT01FTTsKKwkJCWdvdG8gb3V0QjsKKwkJfQorCX0KKworCS8qCisJKiBSZWFkcyBtYXkgYmUgcGhhc2VkIC0gYWdhaW4gdGhlIGhhcmR3YXJlIHNwZWMKKwkqIHN1cHBvcnRzIHRoaXMgLSB0aG91Z2ggbWF5IG5vdCBiZSBhbnkgZGV2aWNlcyBpbgorCSogdGhlIHdpbGQgdGhhdCBpbXBsZW1lbnQgaXQsIGJ1dCB3ZSB3aWxsIGhlcmUKKwkqLworCWZvciAoeCA9IDA7IHggPCBjYXJkLT5yZWFkY250OyB4KyspIHsKKwkJc2VuZGJ1ZiA9IGNwdV90b19iZTMyKHBhcnRpdGlvbiA8PCAyNCB8IHggPDwgMTYgfCBudW0pOworCisJCWlmIChhdG9taWNfcmVhZCgmbWRldi0+YnVzeSkgPT0gMSkgeworCQkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQobWRldi0+bWFwbGVfd2FpdCwKKwkJCQlhdG9taWNfcmVhZCgmbWRldi0+YnVzeSkgPT0gMCwgSFopOworCQkJaWYgKGF0b21pY19yZWFkKCZtZGV2LT5idXN5KSA9PSAxKSB7CisJCQkJZGV2X25vdGljZSgmbWRldi0+ZGV2LCAiVk1VIGF0ICglZCwgJWQpIgorCQkJCQkiIGlzIGJ1c3lcbiIsIG1kZXYtPnBvcnQsIG1kZXYtPnVuaXQpOworCQkJCWVycm9yID0gLUVBR0FJTjsKKwkJCQlnb3RvIG91dEI7CisJCQl9CisJCX0KKworCQlhdG9taWNfc2V0KCZtZGV2LT5idXN5LCAxKTsKKwkJYmxvY2tyZWFkID0ga21hbGxvYyhjYXJkLT5ibG9ja2xlbi9jYXJkLT5yZWFkY250LCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFibG9ja3JlYWQpIHsKKwkJCWVycm9yID0gLUVOT01FTTsKKwkJCWF0b21pY19zZXQoJm1kZXYtPmJ1c3ksIDApOworCQkJZ290byBvdXRCOworCQl9CisJCWNhcmQtPmJsb2NrcmVhZCA9IGJsb2NrcmVhZDsKKworCQltYXBsZV9nZXRjb25kX2NhbGxiYWNrKG1kZXYsIHZtdV9ibG9ja3JlYWQsIDAsCisJCQlNQVBMRV9GVU5DX01FTUNBUkQpOworCQllcnJvciA9IG1hcGxlX2FkZF9wYWNrZXQobWRldiwgTUFQTEVfRlVOQ19NRU1DQVJELAorCQkJCU1BUExFX0NPTU1BTkRfQlJFQUQsIDIsICZzZW5kYnVmKTsKKwkJLyogVmVyeSBsb25nIHRpbWVvdXRzIHNlZW0gdG8gYmUgbmVlZGVkIHdoZW4gYm94IGlzIHN0cmVzc2VkICovCisJCXdhaXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChtZGV2LT5tYXBsZV93YWl0LAorCQkJKGF0b21pY19yZWFkKCZtZGV2LT5idXN5KSA9PSAwIHx8CisJCQlhdG9taWNfcmVhZCgmbWRldi0+YnVzeSkgPT0gMiksIEhaICogMyk7CisJCS8qCisJCSogTVREIGxheWVyIGRvZXMgbm90IGhhbmRsZSBob3RwbHVnZ2luZyB3ZWxsCisJCSogc28gaGF2ZSB0byByZXR1cm4gZXJyb3JzIHdoZW4gVk1VIGlzIHVucGx1Z2dlZAorCQkqIGluIHRoZSBtaWRkbGUgb2YgYSByZWFkIChidXN5ID09IDIpCisJCSovCisJCWlmIChlcnJvciB8fCBhdG9taWNfcmVhZCgmbWRldi0+YnVzeSkgPT0gMikgeworCQkJaWYgKGF0b21pY19yZWFkKCZtZGV2LT5idXN5KSA9PSAyKQorCQkJCWVycm9yID0gLUVOWElPOworCQkJYXRvbWljX3NldCgmbWRldi0+YnVzeSwgMCk7CisJCQljYXJkLT5ibG9ja3JlYWQgPSBOVUxMOworCQkJZ290byBvdXRBOworCQl9CisJCWlmICh3YWl0ID09IDAgfHwgd2FpdCA9PSAtRVJFU1RBUlRTWVMpIHsKKwkJCWNhcmQtPmJsb2NrcmVhZCA9IE5VTEw7CisJCQlhdG9taWNfc2V0KCZtZGV2LT5idXN5LCAwKTsKKwkJCWVycm9yID0gLUVJTzsKKwkJCWxpc3RfZGVsX2luaXQoJihtZGV2LT5tcS0+bGlzdCkpOworCQkJa2ZyZWUobWRldi0+bXEtPnNlbmRidWYpOworCQkJbWRldi0+bXEtPnNlbmRidWYgPSBOVUxMOworCQkJaWYgKHdhaXQgPT0gLUVSRVNUQVJUU1lTKSB7CisJCQkJZGV2X3dhcm4oJm1kZXYtPmRldiwgIlZNVSByZWFkIG9uICglZCwgJWQpIgorCQkJCQkiIGludGVycnVwdGVkIG9uIGJsb2NrIDB4JVhcbiIsCisJCQkJCW1kZXYtPnBvcnQsIG1kZXYtPnVuaXQsIG51bSk7CisJCQl9IGVsc2UKKwkJCQlkZXZfbm90aWNlKCZtZGV2LT5kZXYsICJWTVUgcmVhZCBvbiAoJWQsICVkKSIKKwkJCQkJIiB0aW1lZCBvdXQgb24gYmxvY2sgMHglWFxuIiwKKwkJCQkJbWRldi0+cG9ydCwgbWRldi0+dW5pdCwgbnVtKTsKKwkJCWdvdG8gb3V0QTsKKwkJfQorCisJCW1lbWNweShidWYgKyAoY2FyZC0+YmxvY2tsZW4vY2FyZC0+cmVhZGNudCkgKiB4LCBibG9ja3JlYWQsCisJCQljYXJkLT5ibG9ja2xlbi9jYXJkLT5yZWFkY250KTsKKworCQltZW1jcHkocGNhY2hlLT5idWZmZXIgKyAoY2FyZC0+YmxvY2tsZW4vY2FyZC0+cmVhZGNudCkgKiB4LAorCQkJY2FyZC0+YmxvY2tyZWFkLCBjYXJkLT5ibG9ja2xlbi9jYXJkLT5yZWFkY250KTsKKwkJY2FyZC0+YmxvY2tyZWFkID0gTlVMTDsKKwkJcGNhY2hlLT5ibG9jayA9IG51bTsKKwkJcGNhY2hlLT5qaWZmaWVzX2F0YyA9IGppZmZpZXM7CisJCXBjYWNoZS0+dmFsaWQgPSAxOworCQlrZnJlZShibG9ja3JlYWQpOworCX0KKworCXJldHVybiBlcnJvcjsKKworb3V0QToKKwlrZnJlZShibG9ja3JlYWQpOworb3V0QjoKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qIGNvbW11bmljYXRlIHdpdGggbWFwbGUgYnVzIGZvciBwaGFzZWQgd3JpdGluZyAqLworc3RhdGljIGludCBtYXBsZV92bXVfd3JpdGVfYmxvY2sodW5zaWduZWQgaW50IG51bSwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAorCXN0cnVjdCBtdGRfaW5mbyAqbXRkKQoreworCXN0cnVjdCBtZW1jYXJkICpjYXJkOworCXN0cnVjdCBtZGV2X3BhcnQgKm1wYXJ0OworCXN0cnVjdCBtYXBsZV9kZXZpY2UgKm1kZXY7CisJaW50IHBhcnRpdGlvbiwgZXJyb3IsIGxvY2tpbmcsIHgsIHBoYXNlbGVuLCB3YWl0OworCV9fYmUzMiAqc2VuZGJ1ZjsKKworCW1wYXJ0ID0gbXRkLT5wcml2OworCW1kZXYgPSBtcGFydC0+bWRldjsKKwlwYXJ0aXRpb24gPSBtcGFydC0+cGFydGl0aW9uOworCWNhcmQgPSBtYXBsZV9nZXRfZHJ2ZGF0YShtZGV2KTsKKworCXBoYXNlbGVuID0gY2FyZC0+YmxvY2tsZW4vY2FyZC0+d3JpdGVjbnQ7CisKKwlzZW5kYnVmID0ga21hbGxvYyhwaGFzZWxlbiArIDQsIEdGUF9LRVJORUwpOworCWlmICghc2VuZGJ1ZikgeworCQllcnJvciA9IC1FTk9NRU07CisJCWdvdG8gZmFpbF9ub3NlbmRidWY7CisJfQorCWZvciAoeCA9IDA7IHggPCBjYXJkLT53cml0ZWNudDsgeCsrKSB7CisJCXNlbmRidWZbMF0gPSBjcHVfdG9fYmUzMihwYXJ0aXRpb24gPDwgMjQgfCB4IDw8IDE2IHwgbnVtKTsKKwkJbWVtY3B5KCZzZW5kYnVmWzFdLCBidWYgKyBwaGFzZWxlbiAqIHgsIHBoYXNlbGVuKTsKKwkJLyogd2FpdCB1bnRpbCB0aGUgZGV2aWNlIGlzIG5vdCBidXN5IGRvaW5nIHNvbWV0aGluZyBlbHNlCisJCSogb3IgMSBzZWNvbmQgLSB3aGljaCBldmVyIGlzIGxvbmdlciAqLworCQlpZiAoYXRvbWljX3JlYWQoJm1kZXYtPmJ1c3kpID09IDEpIHsKKwkJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KG1kZXYtPm1hcGxlX3dhaXQsCisJCQkJYXRvbWljX3JlYWQoJm1kZXYtPmJ1c3kpID09IDAsIEhaKTsKKwkJCWlmIChhdG9taWNfcmVhZCgmbWRldi0+YnVzeSkgPT0gMSkgeworCQkJCWVycm9yID0gLUVCVVNZOworCQkJCWRldl9ub3RpY2UoJm1kZXYtPmRldiwgIlZNVSB3cml0ZSBhdCAoJWQsICVkKSIKKwkJCQkJImZhaWxlZCAtIGRldmljZSBpcyBidXN5XG4iLAorCQkJCQltZGV2LT5wb3J0LCBtZGV2LT51bml0KTsKKwkJCQlnb3RvIGZhaWxfbm9sb2NrOworCQkJfQorCQl9CisJCWF0b21pY19zZXQoJm1kZXYtPmJ1c3ksIDEpOworCisJCWxvY2tpbmcgPSBtYXBsZV9hZGRfcGFja2V0KG1kZXYsIE1BUExFX0ZVTkNfTUVNQ0FSRCwKKwkJCU1BUExFX0NPTU1BTkRfQldSSVRFLCBwaGFzZWxlbiAvIDQgKyAyLCBzZW5kYnVmKTsKKwkJd2FpdCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KG1kZXYtPm1hcGxlX3dhaXQsCisJCQlhdG9taWNfcmVhZCgmbWRldi0+YnVzeSkgPT0gMCwgSFovMTApOworCQlpZiAobG9ja2luZykgeworCQkJZXJyb3IgPSAtRUlPOworCQkJYXRvbWljX3NldCgmbWRldi0+YnVzeSwgMCk7CisJCQlnb3RvIGZhaWxfbm9sb2NrOworCQl9CisJCWlmIChhdG9taWNfcmVhZCgmbWRldi0+YnVzeSkgPT0gMikgeworCQkJYXRvbWljX3NldCgmbWRldi0+YnVzeSwgMCk7CisJCX0gZWxzZSBpZiAod2FpdCA9PSAwIHx8IHdhaXQgPT0gLUVSRVNUQVJUU1lTKSB7CisJCQllcnJvciA9IC1FSU87CisJCQlkZXZfd2FybigmbWRldi0+ZGV2LCAiV3JpdGUgYXQgKCVkLCAlZCkgb2YgYmxvY2siCisJCQkJIiAweCVYIGF0IHBoYXNlICVkIGZhaWxlZDogY291bGQgbm90IgorCQkJCSIgY29tbXVuaWNhdGUgd2l0aCBWTVUiLCBtZGV2LT5wb3J0LAorCQkJCW1kZXYtPnVuaXQsIG51bSwgeCk7CisJCQlhdG9taWNfc2V0KCZtZGV2LT5idXN5LCAwKTsKKwkJCWtmcmVlKG1kZXYtPm1xLT5zZW5kYnVmKTsKKwkJCW1kZXYtPm1xLT5zZW5kYnVmID0gTlVMTDsKKwkJCWxpc3RfZGVsX2luaXQoJihtZGV2LT5tcS0+bGlzdCkpOworCQkJZ290byBmYWlsX25vbG9jazsKKwkJfQorCX0KKwlrZnJlZShzZW5kYnVmKTsKKworCXJldHVybiBjYXJkLT5ibG9ja2xlbjsKKworZmFpbF9ub2xvY2s6CisJa2ZyZWUoc2VuZGJ1Zik7CitmYWlsX25vc2VuZGJ1ZjoKKwlkZXZfZXJyKCZtZGV2LT5kZXYsICJWTVUgKCVkLCAlZCk6IHdyaXRlIGZhaWxlZFxuIiwgbWRldi0+cG9ydCwKKwkJbWRldi0+dW5pdCk7CisJcmV0dXJuIGVycm9yOworfQorCisvKiBtdGQgZnVuY3Rpb24gdG8gc2ltdWxhdGUgcmVhZGluZyBieXRlIGJ5IGJ5dGUgKi8KK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHZtdV9mbGFzaF9yZWFkX2NoYXIodW5zaWduZWQgbG9uZyBvZnMsIGludCAqcmV0dmFsLAorCXN0cnVjdCBtdGRfaW5mbyAqbXRkKQoreworCXN0cnVjdCB2bXVfYmxvY2sgKnZibG9jazsKKwlzdHJ1Y3QgbWVtY2FyZCAqY2FyZDsKKwlzdHJ1Y3QgbWRldl9wYXJ0ICptcGFydDsKKwlzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2OworCXVuc2lnbmVkIGNoYXIgKmJ1ZiwgcmV0OworCWludCBwYXJ0aXRpb24sIGVycm9yOworCisJbXBhcnQgPSBtdGQtPnByaXY7CisJbWRldiA9IG1wYXJ0LT5tZGV2OworCXBhcnRpdGlvbiA9IG1wYXJ0LT5wYXJ0aXRpb247CisJY2FyZCA9IG1hcGxlX2dldF9kcnZkYXRhKG1kZXYpOworCSpyZXR2YWwgPSAgMDsKKworCWJ1ZiA9IGttYWxsb2MoY2FyZC0+YmxvY2tsZW4sIEdGUF9LRVJORUwpOworCWlmICghYnVmKSB7CisJCSpyZXR2YWwgPSAxOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGZpbmlzaDsKKwl9CisKKwl2YmxvY2sgPSBvZnNfdG9fYmxvY2sob2ZzLCBtdGQsIHBhcnRpdGlvbik7CisJaWYgKCF2YmxvY2spIHsKKwkJKnJldHZhbCA9IDM7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0X2J1ZjsKKwl9CisKKwllcnJvciA9IG1hcGxlX3ZtdV9yZWFkX2Jsb2NrKHZibG9jay0+bnVtLCBidWYsIG10ZCk7CisJaWYgKGVycm9yKSB7CisJCXJldCA9IGVycm9yOworCQkqcmV0dmFsID0gMjsKKwkJZ290byBvdXRfdmJsb2NrOworCX0KKworCXJldCA9IGJ1Zlt2YmxvY2stPm9mc107CisKK291dF92YmxvY2s6CisJa2ZyZWUodmJsb2NrKTsKK291dF9idWY6CisJa2ZyZWUoYnVmKTsKK2ZpbmlzaDoKKwlyZXR1cm4gcmV0OworfQorCisvKiBtdGQgaGlnaGVyIG9yZGVyIGZ1bmN0aW9uIHRvIHJlYWQgZmxhc2ggKi8KK3N0YXRpYyBpbnQgdm11X2ZsYXNoX3JlYWQoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuLAorCXNpemVfdCAqcmV0bGVuLCAgdV9jaGFyICpidWYpCit7CisJc3RydWN0IG1hcGxlX2RldmljZSAqbWRldjsKKwlzdHJ1Y3QgbWVtY2FyZCAqY2FyZDsKKwlzdHJ1Y3QgbWRldl9wYXJ0ICptcGFydDsKKwlzdHJ1Y3Qgdm11X2NhY2hlICpwY2FjaGU7CisJc3RydWN0IHZtdV9ibG9jayAqdmJsb2NrOworCWludCBpbmRleCA9IDAsIHJldHZhbCwgcGFydGl0aW9uLCBsZWZ0b3ZlciwgbnVtYmxvY2tzOworCXVuc2lnbmVkIGNoYXIgY3g7CisKKwlpZiAobGVuIDwgMSkKKwkJcmV0dXJuIC1FSU87CisKKwltcGFydCA9IG10ZC0+cHJpdjsKKwltZGV2ID0gbXBhcnQtPm1kZXY7CisJcGFydGl0aW9uID0gbXBhcnQtPnBhcnRpdGlvbjsKKwljYXJkID0gbWFwbGVfZ2V0X2RydmRhdGEobWRldik7CisKKwludW1ibG9ja3MgPSBjYXJkLT5wYXJ0c1twYXJ0aXRpb25dLm51bWJsb2NrczsKKwlpZiAoZnJvbSArIGxlbiA+IG51bWJsb2NrcyAqIGNhcmQtPmJsb2NrbGVuKQorCQlsZW4gPSBudW1ibG9ja3MgKiBjYXJkLT5ibG9ja2xlbiAtIGZyb207CisJaWYgKGxlbiA9PSAwKQorCQlyZXR1cm4gLUVJTzsKKwkvKiBIYXZlIHdlIGNhY2hlZCB0aGlzIGJpdCBhbHJlYWR5PyAqLworCXBjYWNoZSA9IGNhcmQtPnBhcnRzW3BhcnRpdGlvbl0ucGNhY2hlOworCWRvIHsKKwkJdmJsb2NrID0gIG9mc190b19ibG9jayhmcm9tICsgaW5kZXgsIG10ZCwgcGFydGl0aW9uKTsKKwkJaWYgKCF2YmxvY2spCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJLyogSGF2ZSB3ZSBjYWNoZWQgdGhpcyBhbmQgaXMgdGhlIGNhY2hlIHZhbGlkIGFuZCB0aW1lbHk/ICovCisJCWlmIChwY2FjaGUtPnZhbGlkICYmCisJCQl0aW1lX2JlZm9yZShqaWZmaWVzLCBwY2FjaGUtPmppZmZpZXNfYXRjICsgSFopICYmCisJCQkocGNhY2hlLT5ibG9jayA9PSB2YmxvY2stPm51bSkpIHsKKwkJCS8qIHdlIGhhdmUgY2FjaGVkIGl0LCBzbyBkbyBuZWNlc3NhcnkgY29weWluZyAqLworCQkJbGVmdG92ZXIgPSBjYXJkLT5ibG9ja2xlbiAtIHZibG9jay0+b2ZzOworCQkJaWYgKHZibG9jay0+b2ZzICsgbGVuIC0gaW5kZXggPCBjYXJkLT5ibG9ja2xlbikgeworCQkJCS8qIG9ubHkgYSBiaXQgb2YgdGhpcyBibG9jayB0byBjb3B5ICovCisJCQkJbWVtY3B5KGJ1ZiArIGluZGV4LAorCQkJCQlwY2FjaGUtPmJ1ZmZlciArIHZibG9jay0+b2ZzLAorCQkJCQlsZW4gLSBpbmRleCk7CisJCQkJaW5kZXggPSBsZW47CisJCQl9IGVsc2UgeworCQkJCS8qIG90aGVyd2lzZSBjb3B5IHJlbWFpbmRlciBvZiB3aG9sZSBibG9jayAqLworCQkJCW1lbWNweShidWYgKyBpbmRleCwgcGNhY2hlLT5idWZmZXIgKworCQkJCQl2YmxvY2stPm9mcywgbGVmdG92ZXIpOworCQkJCWluZGV4ICs9IGxlZnRvdmVyOworCQkJfQorCQl9IGVsc2UgeworCQkJLyoKKwkJCSogTm90IGNhY2hlZCBzbyByZWFkIG9uZSBieXRlIC0KKwkJCSogYnV0IGNhY2hlIHRoZSByZXN0IG9mIHRoZSBibG9jaworCQkJKi8KKwkJCWN4ID0gdm11X2ZsYXNoX3JlYWRfY2hhcihmcm9tICsgaW5kZXgsICZyZXR2YWwsIG10ZCk7CisJCQlpZiAocmV0dmFsKSB7CisJCQkJKnJldGxlbiA9IGluZGV4OworCQkJCWtmcmVlKHZibG9jayk7CisJCQkJcmV0dXJuIGN4OworCQkJfQorCQkJbWVtc2V0KGJ1ZiArIGluZGV4LCBjeCwgMSk7CisJCQlpbmRleCsrOworCQl9CisJCWtmcmVlKHZibG9jayk7CisJfSB3aGlsZSAobGVuID4gaW5kZXgpOworCSpyZXRsZW4gPSBpbmRleDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZtdV9mbGFzaF93cml0ZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IHRvLCBzaXplX3QgbGVuLAorCXNpemVfdCAqcmV0bGVuLCBjb25zdCB1X2NoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2OworCXN0cnVjdCBtZW1jYXJkICpjYXJkOworCXN0cnVjdCBtZGV2X3BhcnQgKm1wYXJ0OworCWludCBpbmRleCA9IDAsIHBhcnRpdGlvbiwgZXJyb3IgPSAwLCBudW1ibG9ja3M7CisJc3RydWN0IHZtdV9jYWNoZSAqcGNhY2hlOworCXN0cnVjdCB2bXVfYmxvY2sgKnZibG9jazsKKwl1bnNpZ25lZCBjaGFyICpidWZmZXI7CisKKwltcGFydCA9IG10ZC0+cHJpdjsKKwltZGV2ID0gbXBhcnQtPm1kZXY7CisJcGFydGl0aW9uID0gbXBhcnQtPnBhcnRpdGlvbjsKKwljYXJkID0gbWFwbGVfZ2V0X2RydmRhdGEobWRldik7CisKKwkvKiBzaW1wbGUgc2FuaXR5IGNoZWNrcyAqLworCWlmIChsZW4gPCAxKSB7CisJCWVycm9yID0gLUVJTzsKKwkJZ290byBmYWlsZWQ7CisJfQorCW51bWJsb2NrcyA9IGNhcmQtPnBhcnRzW3BhcnRpdGlvbl0ubnVtYmxvY2tzOworCWlmICh0byArIGxlbiA+IG51bWJsb2NrcyAqIGNhcmQtPmJsb2NrbGVuKQorCQlsZW4gPSBudW1ibG9ja3MgKiBjYXJkLT5ibG9ja2xlbiAtIHRvOworCWlmIChsZW4gPT0gMCkgeworCQllcnJvciA9IC1FSU87CisJCWdvdG8gZmFpbGVkOworCX0KKworCXZibG9jayA9IG9mc190b19ibG9jayh0bywgbXRkLCBwYXJ0aXRpb24pOworCWlmICghdmJsb2NrKSB7CisJCWVycm9yID0gLUVOT01FTTsKKwkJZ290byBmYWlsZWQ7CisJfQorCisJYnVmZmVyID0ga21hbGxvYyhjYXJkLT5ibG9ja2xlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWZmZXIpIHsKKwkJZXJyb3IgPSAtRU5PTUVNOworCQlnb3RvIGZhaWxfYnVmZmVyOworCX0KKworCWRvIHsKKwkJLyogUmVhZCBpbiB0aGUgYmxvY2sgd2UgYXJlIHRvIHdyaXRlIHRvICovCisJCWVycm9yID0gbWFwbGVfdm11X3JlYWRfYmxvY2sodmJsb2NrLT5udW0sIGJ1ZmZlciwgbXRkKTsKKwkJaWYgKGVycm9yKQorCQkJZ290byBmYWlsX2lvOworCisJCWRvIHsKKwkJCWJ1ZmZlclt2YmxvY2stPm9mc10gPSBidWZbaW5kZXhdOworCQkJdmJsb2NrLT5vZnMrKzsKKwkJCWluZGV4Kys7CisJCQlpZiAoaW5kZXggPj0gbGVuKQorCQkJCWJyZWFrOworCQl9IHdoaWxlICh2YmxvY2stPm9mcyA8IGNhcmQtPmJsb2NrbGVuKTsKKworCQkvKiB3cml0ZSBvdXQgbmV3IGJ1ZmZlciAqLworCQllcnJvciA9IG1hcGxlX3ZtdV93cml0ZV9ibG9jayh2YmxvY2stPm51bSwgYnVmZmVyLCBtdGQpOworCQkvKiBpbnZhbGlkYXRlIHRoZSBjYWNoZSAqLworCQlwY2FjaGUgPSBjYXJkLT5wYXJ0c1twYXJ0aXRpb25dLnBjYWNoZTsKKwkJcGNhY2hlLT52YWxpZCA9IDA7CisKKwkJaWYgKGVycm9yICE9IGNhcmQtPmJsb2NrbGVuKQorCQkJZ290byBmYWlsX2lvOworCisJCXZibG9jay0+bnVtKys7CisJCXZibG9jay0+b2ZzID0gMDsKKwl9IHdoaWxlIChsZW4gPiBpbmRleCk7CisKKwlrZnJlZShidWZmZXIpOworCSpyZXRsZW4gPSBpbmRleDsKKwlrZnJlZSh2YmxvY2spOworCXJldHVybiAwOworCitmYWlsX2lvOgorCWtmcmVlKGJ1ZmZlcik7CitmYWlsX2J1ZmZlcjoKKwlrZnJlZSh2YmxvY2spOworZmFpbGVkOgorCWRldl9lcnIoJm1kZXYtPmRldiwgIlZNVSB3cml0ZSBmYWlsaW5nIHdpdGggZXJyb3IgJWRcbiIsIGVycm9yKTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyB2b2lkIHZtdV9mbGFzaF9zeW5jKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQoreworCS8qIERvIG5vdGhpbmcgaGVyZSAqLworfQorCisvKiBNYXBsZSBidXMgY2FsbGJhY2sgZnVuY3Rpb24gdG8gcmVjdXJzaXZlbHkgcXVlcnkgaGFyZHdhcmUgZGV0YWlscyAqLworc3RhdGljIHZvaWQgdm11X3F1ZXJ5YmxvY2tzKHN0cnVjdCBtYXBsZXEgKm1xKQoreworCXN0cnVjdCBtYXBsZV9kZXZpY2UgKm1kZXY7CisJdW5zaWduZWQgc2hvcnQgKnJlczsKKwlzdHJ1Y3QgbWVtY2FyZCAqY2FyZDsKKwlfX2JlMzIgcGFydG51bTsKKwlzdHJ1Y3Qgdm11X2NhY2hlICpwY2FjaGU7CisJc3RydWN0IG1kZXZfcGFydCAqbXBhcnQ7CisJc3RydWN0IG10ZF9pbmZvICptdGRfY3VyOworCXN0cnVjdCB2bXVwYXJ0ICpwYXJ0X2N1cjsKKwlpbnQgZXJyb3I7CisKKwltZGV2ID0gbXEtPmRldjsKKwljYXJkID0gbWFwbGVfZ2V0X2RydmRhdGEobWRldik7CisJcmVzID0gKHVuc2lnbmVkIHNob3J0ICopIChtcS0+cmVjdmJ1Zi0+YnVmKTsKKwljYXJkLT50ZW1wQSA9IHJlc1sxMl07CisJY2FyZC0+dGVtcEIgPSByZXNbNl07CisKKwlkZXZfaW5mbygmbWRldi0+ZGV2LCAiVk1VIGRldmljZSBhdCBwYXJ0aXRpb24gJWQgaGFzICVkIHVzZXIgIgorCQkiYmxvY2tzIHdpdGggYSByb290IGJsb2NrIGF0ICVkXG4iLCBjYXJkLT5wYXJ0aXRpb24sCisJCWNhcmQtPnRlbXBBLCBjYXJkLT50ZW1wQik7CisKKwlwYXJ0X2N1ciA9ICZjYXJkLT5wYXJ0c1tjYXJkLT5wYXJ0aXRpb25dOworCXBhcnRfY3VyLT51c2VyX2Jsb2NrcyA9IGNhcmQtPnRlbXBBOworCXBhcnRfY3VyLT5yb290X2Jsb2NrID0gY2FyZC0+dGVtcEI7CisJcGFydF9jdXItPm51bWJsb2NrcyA9IGNhcmQtPnRlbXBCICsgMTsKKwlwYXJ0X2N1ci0+bmFtZSA9IGttYWxsb2MoMTIsIEdGUF9LRVJORUwpOworCWlmICghcGFydF9jdXItPm5hbWUpCisJCWdvdG8gZmFpbF9uYW1lOworCisJc3ByaW50ZihwYXJ0X2N1ci0+bmFtZSwgInZtdSVkLiVkLiVkIiwKKwkJbWRldi0+cG9ydCwgbWRldi0+dW5pdCwgY2FyZC0+cGFydGl0aW9uKTsKKwltdGRfY3VyID0gJmNhcmQtPm10ZFtjYXJkLT5wYXJ0aXRpb25dOworCW10ZF9jdXItPm5hbWUgPSBwYXJ0X2N1ci0+bmFtZTsKKwltdGRfY3VyLT50eXBlID0gODsKKwltdGRfY3VyLT5mbGFncyA9IE1URF9XUklURUFCTEV8TVREX05PX0VSQVNFOworCW10ZF9jdXItPnNpemUgPSBwYXJ0X2N1ci0+bnVtYmxvY2tzICogY2FyZC0+YmxvY2tsZW47CisJbXRkX2N1ci0+ZXJhc2VzaXplID0gY2FyZC0+YmxvY2tsZW47CisJbXRkX2N1ci0+d3JpdGUgPSB2bXVfZmxhc2hfd3JpdGU7CisJbXRkX2N1ci0+cmVhZCA9IHZtdV9mbGFzaF9yZWFkOworCW10ZF9jdXItPnN5bmMgPSB2bXVfZmxhc2hfc3luYzsKKwltdGRfY3VyLT53cml0ZXNpemUgPSBjYXJkLT5ibG9ja2xlbjsKKworCW1wYXJ0ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG1kZXZfcGFydCksIEdGUF9LRVJORUwpOworCWlmICghbXBhcnQpCisJCWdvdG8gZmFpbF9tcGFydDsKKworCW1wYXJ0LT5tZGV2ID0gbWRldjsKKwltcGFydC0+cGFydGl0aW9uID0gY2FyZC0+cGFydGl0aW9uOworCW10ZF9jdXItPnByaXYgPSBtcGFydDsKKwltdGRfY3VyLT5vd25lciA9IFRISVNfTU9EVUxFOworCisJcGNhY2hlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHZtdV9jYWNoZSksIEdGUF9LRVJORUwpOworCWlmICghcGNhY2hlKQorCQlnb3RvIGZhaWxfY2FjaGVfY3JlYXRlOworCXBhcnRfY3VyLT5wY2FjaGUgPSBwY2FjaGU7CisKKwllcnJvciA9IGFkZF9tdGRfZGV2aWNlKG10ZF9jdXIpOworCWlmIChlcnJvcikKKwkJZ290byBmYWlsX210ZF9yZWdpc3RlcjsKKworCW1hcGxlX2dldGNvbmRfY2FsbGJhY2sobWRldiwgTlVMTCwgMCwKKwkJTUFQTEVfRlVOQ19NRU1DQVJEKTsKKworCS8qCisJKiBTZXQgdXAgYSByZWN1cnNpdmUgY2FsbCB0byB0aGUgKHByb2JhYmx5IHRoZW9yZXRpY2FsKQorCSogc2Vjb25kIG9yIG1vcmUgcGFydGl0aW9uCisJKi8KKwlpZiAoKytjYXJkLT5wYXJ0aXRpb24gPCBjYXJkLT5wYXJ0aXRpb25zKSB7CisJCXBhcnRudW0gPSBjcHVfdG9fYmUzMihjYXJkLT5wYXJ0aXRpb24gPDwgMjQpOworCQltYXBsZV9nZXRjb25kX2NhbGxiYWNrKG1kZXYsIHZtdV9xdWVyeWJsb2NrcywgMCwKKwkJCU1BUExFX0ZVTkNfTUVNQ0FSRCk7CisJCW1hcGxlX2FkZF9wYWNrZXQobWRldiwgTUFQTEVfRlVOQ19NRU1DQVJELAorCQkJTUFQTEVfQ09NTUFORF9HRVRNSU5GTywgMiwgJnBhcnRudW0pOworCX0KKwlyZXR1cm47CisKK2ZhaWxfbXRkX3JlZ2lzdGVyOgorCWRldl9lcnIoJm1kZXYtPmRldiwgIkNvdWxkIG5vdCByZWdpc3RlciBtYXBsZSBkZXZpY2UgYXQgKCVkLCAlZCkiCisJCSJlcnJvciBpcyAweCVYXG4iLCBtZGV2LT5wb3J0LCBtZGV2LT51bml0LCBlcnJvcik7CisJZm9yIChlcnJvciA9IDA7IGVycm9yIDw9IGNhcmQtPnBhcnRpdGlvbjsgZXJyb3IrKykgeworCQlrZnJlZSgoKGNhcmQtPnBhcnRzKVtlcnJvcl0pLnBjYWNoZSk7CisJCSgoY2FyZC0+cGFydHMpW2Vycm9yXSkucGNhY2hlID0gTlVMTDsKKwl9CitmYWlsX2NhY2hlX2NyZWF0ZToKK2ZhaWxfbXBhcnQ6CisJZm9yIChlcnJvciA9IDA7IGVycm9yIDw9IGNhcmQtPnBhcnRpdGlvbjsgZXJyb3IrKykgeworCQlrZnJlZSgoKGNhcmQtPm10ZClbZXJyb3JdKS5wcml2KTsKKwkJKChjYXJkLT5tdGQpW2Vycm9yXSkucHJpdiA9IE5VTEw7CisJfQorCW1hcGxlX2dldGNvbmRfY2FsbGJhY2sobWRldiwgTlVMTCwgMCwKKwkJTUFQTEVfRlVOQ19NRU1DQVJEKTsKKwlrZnJlZShwYXJ0X2N1ci0+bmFtZSk7CitmYWlsX25hbWU6CisJcmV0dXJuOworfQorCisvKiBIYW5kbGVzIHZlcnkgYmFzaWMgaW5mbyBhYm91dCB0aGUgZmxhc2gsIHF1ZXJpZXMgZm9yIGRldGFpbHMgKi8KK3N0YXRpYyBpbnQgX19kZXZpbml0IHZtdV9jb25uZWN0KHN0cnVjdCBtYXBsZV9kZXZpY2UgKm1kZXYpCit7CisJdW5zaWduZWQgbG9uZyB0ZXN0X2ZsYXNoX2RhdGEsIGJhc2ljX2ZsYXNoX2RhdGE7CisJaW50IGMsIGVycm9yOworCXN0cnVjdCBtZW1jYXJkICpjYXJkOworCXUzMiBwYXJ0bnVtID0gMDsKKworCXRlc3RfZmxhc2hfZGF0YSA9IGJlMzJfdG9fY3B1KG1kZXYtPmRldmluZm8uZnVuY3Rpb24pOworCS8qIE5lZWQgdG8gY291bnQgaG93IG1hbnkgYml0cyBhcmUgc2V0IC0gdG8gZmluZCBvdXQgd2hpY2gKKwkgKiBmdW5jdGlvbl9kYXRhIGVsZW1lbnQgaGFzIGRldGFpbHMgb2YgdGhlIG1lbW9yeSBjYXJkOgorCSAqIHVzaW5nIEJyaWFuIEtlcm5pZ2hhbidzL1BldGVyIFdlZ25lcidzIG1ldGhvZCAqLworCWZvciAoYyA9IDA7IHRlc3RfZmxhc2hfZGF0YTsgYysrKQorCQl0ZXN0X2ZsYXNoX2RhdGEgJj0gdGVzdF9mbGFzaF9kYXRhIC0gMTsKKworCWJhc2ljX2ZsYXNoX2RhdGEgPSBiZTMyX3RvX2NwdShtZGV2LT5kZXZpbmZvLmZ1bmN0aW9uX2RhdGFbYyAtIDFdKTsKKworCWNhcmQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbWVtY2FyZCksIEdGUF9LRVJORUwpOworCWlmICghY2FyZCkgeworCQllcnJvciA9IEVOT01FTTsKKwkJZ290byBmYWlsX25vbWVtOworCX0KKworCWNhcmQtPnBhcnRpdGlvbnMgPSAoYmFzaWNfZmxhc2hfZGF0YSA+PiAyNCAmIDB4RkYpICsgMTsKKwljYXJkLT5ibG9ja2xlbiA9ICgoYmFzaWNfZmxhc2hfZGF0YSA+PiAxNiAmIDB4RkYpICsgMSkgPDwgNTsKKwljYXJkLT53cml0ZWNudCA9IGJhc2ljX2ZsYXNoX2RhdGEgPj4gMTIgJiAweEY7CisJY2FyZC0+cmVhZGNudCA9IGJhc2ljX2ZsYXNoX2RhdGEgPj4gOCAmIDB4RjsKKwljYXJkLT5yZW1vdmVhYmxlID0gYmFzaWNfZmxhc2hfZGF0YSA+PiA3ICYgMTsKKworCWNhcmQtPnBhcnRpdGlvbiA9IDA7CisKKwkvKgorCSogTm90IHN1cmUgdGhlcmUgYXJlIGFjdHVhbGx5IGFueSBtdWx0aS1wYXJ0aXRpb24gZGV2aWNlcyBpbiB0aGUKKwkqIHJlYWwgd29ybGQsIGJ1dCB0aGUgaGFyZHdhcmUgc3VwcG9ydHMgdGhlbSwgc28sIHNvIHdpbGwgd2UKKwkqLworCWNhcmQtPnBhcnRzID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHZtdXBhcnQpICogY2FyZC0+cGFydGl0aW9ucywKKwkJR0ZQX0tFUk5FTCk7CisJaWYgKCFjYXJkLT5wYXJ0cykgeworCQllcnJvciA9IC1FTk9NRU07CisJCWdvdG8gZmFpbF9wYXJ0aXRpb25zOworCX0KKworCWNhcmQtPm10ZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtdGRfaW5mbykgKiBjYXJkLT5wYXJ0aXRpb25zLAorCQlHRlBfS0VSTkVMKTsKKwlpZiAoIWNhcmQtPm10ZCkgeworCQllcnJvciA9IC1FTk9NRU07CisJCWdvdG8gZmFpbF9tdGRfaW5mbzsKKwl9CisKKwltYXBsZV9zZXRfZHJ2ZGF0YShtZGV2LCBjYXJkKTsKKworCS8qCisJKiBXZSB3YW50IHRvIHRyYXAgbWVtaW5mbyBub3QgZ2V0IGNvbmQKKwkqIHNvIHNldCBpbnRlcnZhbCB0byB6ZXJvLCBidXQgcmVseSBvbiBtYXBsZSBidXMKKwkqIGRyaXZlciB0byBwYXNzIGJhY2sgdGhlIHJlc3VsdHMgb2YgdGhlIG1lbWluZm8KKwkqLworCW1hcGxlX2dldGNvbmRfY2FsbGJhY2sobWRldiwgdm11X3F1ZXJ5YmxvY2tzLCAwLAorCQlNQVBMRV9GVU5DX01FTUNBUkQpOworCisJLyogTWFrZSBzdXJlIHdlIGFyZSBjbGVhciB0byBnbyAqLworCWlmIChhdG9taWNfcmVhZCgmbWRldi0+YnVzeSkgPT0gMSkgeworCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChtZGV2LT5tYXBsZV93YWl0LAorCQkJYXRvbWljX3JlYWQoJm1kZXYtPmJ1c3kpID09IDAsIEhaKTsKKwkJaWYgKGF0b21pY19yZWFkKCZtZGV2LT5idXN5KSA9PSAxKSB7CisJCQlkZXZfbm90aWNlKCZtZGV2LT5kZXYsICJWTVUgYXQgKCVkLCAlZCkgaXMgYnVzeVxuIiwKKwkJCQltZGV2LT5wb3J0LCBtZGV2LT51bml0KTsKKwkJCWVycm9yID0gLUVBR0FJTjsKKwkJCWdvdG8gZmFpbF9kZXZpY2VfYnVzeTsKKwkJfQorCX0KKworCWF0b21pY19zZXQoJm1kZXYtPmJ1c3ksIDEpOworCisJLyoKKwkqIFNldCB1cCB0aGUgbWluZm8gY2FsbDogdm11X3F1ZXJ5YmxvY2tzIHdpbGwgaGFuZGxlCisJKiB0aGUgaW5mb3JtYXRpb24gcGFzc2VkIGJhY2sKKwkqLworCWVycm9yID0gbWFwbGVfYWRkX3BhY2tldChtZGV2LCBNQVBMRV9GVU5DX01FTUNBUkQsCisJCU1BUExFX0NPTU1BTkRfR0VUTUlORk8sIDIsICZwYXJ0bnVtKTsKKwlpZiAoZXJyb3IpIHsKKwkJZGV2X2VycigmbWRldi0+ZGV2LCAiQ291bGQgbm90IGxvY2sgVk1VIGF0ICglZCwgJWQpIgorCQkJIiBlcnJvciBpcyAweCVYXG4iLCBtZGV2LT5wb3J0LCBtZGV2LT51bml0LCBlcnJvcik7CisJCWdvdG8gZmFpbF9tdGRfaW5mbzsKKwl9CisJcmV0dXJuIDA7CisKK2ZhaWxfZGV2aWNlX2J1c3k6CisJa2ZyZWUoY2FyZC0+bXRkKTsKK2ZhaWxfbXRkX2luZm86CisJa2ZyZWUoY2FyZC0+cGFydHMpOworZmFpbF9wYXJ0aXRpb25zOgorCWtmcmVlKGNhcmQpOworZmFpbF9ub21lbToKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCB2bXVfZGlzY29ubmVjdChzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2KQoreworCXN0cnVjdCBtZW1jYXJkICpjYXJkOworCXN0cnVjdCBtZGV2X3BhcnQgKm1wYXJ0OworCWludCB4OworCisJbWRldi0+Y2FsbGJhY2sgPSBOVUxMOworCWNhcmQgPSBtYXBsZV9nZXRfZHJ2ZGF0YShtZGV2KTsKKwlmb3IgKHggPSAwOyB4IDwgY2FyZC0+cGFydGl0aW9uczsgeCsrKSB7CisJCW1wYXJ0ID0gKChjYXJkLT5tdGQpW3hdKS5wcml2OworCQltcGFydC0+bWRldiA9IE5VTEw7CisJCWRlbF9tdGRfZGV2aWNlKCYoKGNhcmQtPm10ZClbeF0pKTsKKwkJa2ZyZWUoKChjYXJkLT5wYXJ0cylbeF0pLm5hbWUpOworCX0KKwlrZnJlZShjYXJkLT5wYXJ0cyk7CisJa2ZyZWUoY2FyZC0+bXRkKTsKKwlrZnJlZShjYXJkKTsKK30KKworLyogQ2FsbGJhY2sgdG8gaGFuZGxlIGVjY2VudHJpY2l0aWVzIG9mIGJvdGggbXRkIHN1YnN5c3RlbQorICogYW5kIGdlbmVyYWwgZmxha3luZXNzIG9mIERyZWFtY2FzdCBWTVVzCisgKi8KK3N0YXRpYyBpbnQgdm11X2Nhbl91bmxvYWQoc3RydWN0IG1hcGxlX2RldmljZSAqbWRldikKK3sKKwlzdHJ1Y3QgbWVtY2FyZCAqY2FyZDsKKwlpbnQgeDsKKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZDsKKworCWNhcmQgPSBtYXBsZV9nZXRfZHJ2ZGF0YShtZGV2KTsKKwlmb3IgKHggPSAwOyB4IDwgY2FyZC0+cGFydGl0aW9uczsgeCsrKSB7CisJCW10ZCA9ICYoKGNhcmQtPm10ZClbeF0pOworCQlpZiAobXRkLT51c2Vjb3VudCA+IDApCisJCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDE7Cit9CisKKyNkZWZpbmUgRVJSU1RSICJWTVUgYXQgKCVkLCAlZCkgZmlsZSBlcnJvciAtIgorCitzdGF0aWMgdm9pZCB2bXVfZmlsZV9lcnJvcihzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2LCB2b2lkICpyZWN2YnVmKQoreworCWVudW0gbWFwbGVfZmlsZV9lcnJvcnMgZXJyb3IgPSAoKGludCAqKXJlY3ZidWYpWzFdOworCisJc3dpdGNoIChlcnJvcikgeworCisJY2FzZSBNQVBMRV9GSUxFRVJSX0lOVkFMSURfUEFSVElUSU9OOgorCQlkZXZfbm90aWNlKCZtZGV2LT5kZXYsIEVSUlNUUiAiIGludmFsaWQgcGFydGl0aW9uIG51bWJlclxuIiwKKwkJCW1kZXYtPnBvcnQsIG1kZXYtPnVuaXQpOworCQlicmVhazsKKworCWNhc2UgTUFQTEVfRklMRUVSUl9QSEFTRV9FUlJPUjoKKwkJZGV2X25vdGljZSgmbWRldi0+ZGV2LCBFUlJTVFIgIiBwaGFzZSBlcnJvclxuIiwKKwkJCW1kZXYtPnBvcnQsIG1kZXYtPnVuaXQpOworCQlicmVhazsKKworCWNhc2UgTUFQTEVfRklMRUVSUl9JTlZBTElEX0JMT0NLOgorCQlkZXZfbm90aWNlKCZtZGV2LT5kZXYsIEVSUlNUUiAiIGludmFsaWQgYmxvY2sgbnVtYmVyXG4iLAorCQkJbWRldi0+cG9ydCwgbWRldi0+dW5pdCk7CisJCWJyZWFrOworCisJY2FzZSBNQVBMRV9GSUxFRVJSX1dSSVRFX0VSUk9SOgorCQlkZXZfbm90aWNlKCZtZGV2LT5kZXYsIEVSUlNUUiAiIHdyaXRlIGVycm9yXG4iLAorCQkJbWRldi0+cG9ydCwgbWRldi0+dW5pdCk7CisJCWJyZWFrOworCisJY2FzZSBNQVBMRV9GSUxFRVJSX0lOVkFMSURfV1JJVEVfTEVOR1RIOgorCQlkZXZfbm90aWNlKCZtZGV2LT5kZXYsIEVSUlNUUiAiIGludmFsaWQgd3JpdGUgbGVuZ3RoXG4iLAorCQkJbWRldi0+cG9ydCwgbWRldi0+dW5pdCk7CisJCWJyZWFrOworCisJY2FzZSBNQVBMRV9GSUxFRVJSX0JBRF9DUkM6CisJCWRldl9ub3RpY2UoJm1kZXYtPmRldiwgRVJSU1RSICIgYmFkIENSQ1xuIiwKKwkJCW1kZXYtPnBvcnQsIG1kZXYtPnVuaXQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWRldl9ub3RpY2UoJm1kZXYtPmRldiwgRVJSU1RSICIgMHglWFxuIiwKKwkJCW1kZXYtPnBvcnQsIG1kZXYtPnVuaXQsIGVycm9yKTsKKwl9Cit9CisKKworc3RhdGljIGludCBfX2RldmluaXQgcHJvYmVfbWFwbGVfdm11KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpbnQgZXJyb3I7CisJc3RydWN0IG1hcGxlX2RldmljZSAqbWRldiA9IHRvX21hcGxlX2RldihkZXYpOworCXN0cnVjdCBtYXBsZV9kcml2ZXIgKm1kcnYgPSB0b19tYXBsZV9kcml2ZXIoZGV2LT5kcml2ZXIpOworCisJbWRldi0+Y2FuX3VubG9hZCA9IHZtdV9jYW5fdW5sb2FkOworCW1kZXYtPmZpbGVlcnJfaGFuZGxlciA9IHZtdV9maWxlX2Vycm9yOworCW1kZXYtPmRyaXZlciA9IG1kcnY7CisKKwllcnJvciA9IHZtdV9jb25uZWN0KG1kZXYpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHJlbW92ZV9tYXBsZV92bXUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBtYXBsZV9kZXZpY2UgKm1kZXYgPSB0b19tYXBsZV9kZXYoZGV2KTsKKworCXZtdV9kaXNjb25uZWN0KG1kZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IG1hcGxlX2RyaXZlciB2bXVfZmxhc2hfZHJpdmVyID0geworCS5mdW5jdGlvbiA9CU1BUExFX0ZVTkNfTUVNQ0FSRCwKKwkuZHJ2ID0geworCQkubmFtZSA9CQkiRHJlYW1jYXN0X3Zpc3VhbF9tZW1vcnkiLAorCQkucHJvYmUgPQlwcm9iZV9tYXBsZV92bXUsCisJCS5yZW1vdmUgPSAJX19kZXZleGl0X3AocmVtb3ZlX21hcGxlX3ZtdSksCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHZtdV9mbGFzaF9tYXBfaW5pdCh2b2lkKQoreworCXJldHVybiBtYXBsZV9kcml2ZXJfcmVnaXN0ZXIoJnZtdV9mbGFzaF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgdm11X2ZsYXNoX21hcF9leGl0KHZvaWQpCit7CisJbWFwbGVfZHJpdmVyX3VucmVnaXN0ZXIoJnZtdV9mbGFzaF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCh2bXVfZmxhc2hfbWFwX2luaXQpOworbW9kdWxlX2V4aXQodm11X2ZsYXNoX21hcF9leGl0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiQWRyaWFuIE1jTWVuYW1pbiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJGbGFzaCBtYXBwaW5nIGZvciBTZWdhIERyZWFtY2FzdCB2aXN1YWwgbWVtb3J5Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL2V4Y2l0ZV9uYW5kZmxhc2guYyBiL2RyaXZlcnMvbXRkL25hbmQvZXhjaXRlX25hbmRmbGFzaC5jCmluZGV4IGNlZDE0YjUuLjcyNDQ2ZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvZXhjaXRlX25hbmRmbGFzaC5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvZXhjaXRlX25hbmRmbGFzaC5jCkBAIC0xMjgsMTEgKzEyOCwxMSBAQAogICogVGhlIGJpbmRpbmcgdG8gdGhlIG10ZCBhbmQgYWxsIGFsbG9jYXRlZAogICogcmVzb3VyY2VzIGFyZSByZWxlYXNlZC4KICAqLwotc3RhdGljIGludCBfX2V4aXQgZXhjaXRlX25hbmRfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19leGl0IGV4Y2l0ZV9uYW5kX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGV4Y2l0ZV9uYW5kX2RydmRhdGEgKiBjb25zdCB0aGlzID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGV4Y2l0ZV9uYW5kX2RydmRhdGEgKiBjb25zdCB0aGlzID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CiAKIAlpZiAodW5saWtlbHkoIXRoaXMpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbGxlZCAlcyB3aXRob3V0IHByaXZhdGUgZGF0YSEhIiwKQEAgLTE1OSw5ICsxNTksOCBAQAogICogaXQgY2FuIGFsbG9jYXRlIGFsbCBuZWNlc3NhcnkgcmVzb3VyY2VzIHRoZW4gY2FsbHMgdGhlCiAgKiBuYW5kIGxheWVyIHRvIGxvb2sgZm9yIGRldmljZXMuCiAqLwotc3RhdGljIGludCBfX2luaXQgZXhjaXRlX25hbmRfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBfX2luaXQgZXhjaXRlX25hbmRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICogY29uc3QgcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCXN0cnVjdCBleGNpdGVfbmFuZF9kcnZkYXRhICpkcnZkYXRhOwkvKiBwcml2YXRlIGRyaXZlciBkYXRhICovCiAJc3RydWN0IG5hbmRfY2hpcCAqYm9hcmRfY2hpcDsJLyogcHJpdmF0ZSBmbGFzaCBjaGlwIGRhdGEgKi8KIAlzdHJ1Y3QgbXRkX2luZm8gKmJvYXJkX210ZDsJLyogbXRkIGluZm8gZm9yIHRoaXMgYm9hcmQgKi8KQEAgLTE3NSw3ICsxNzQsNyBAQAogCX0KIAogCS8qIGJpbmQgcHJpdmF0ZSBkYXRhIGludG8gZHJpdmVyICovCi0JZGV2X3NldF9kcnZkYXRhKGRldiwgZHJ2ZGF0YSk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZHJ2ZGF0YSk7CiAKIAkvKiBhbGxvY2F0ZSBhbmQgbWFwIHRoZSByZXNvdXJjZSAqLwogCWRydmRhdGEtPnJlZ3MgPQpAQCAtMjE5LDIzICsyMTgsMjUgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGV4Y2l0ZV9uYW5kX2RyaXZlciA9IHsKLQkubmFtZSA9ICJleGNpdGVfbmFuZCIsCi0JLmJ1cyA9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGV4Y2l0ZV9uYW5kX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJleGNpdGVfbmFuZCIsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwl9LAogCS5wcm9iZSA9IGV4Y2l0ZV9uYW5kX3Byb2JlLAotCS5yZW1vdmUgPSBfX2V4aXRfcChleGNpdGVfbmFuZF9yZW1vdmUpCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKGV4Y2l0ZV9uYW5kX3JlbW92ZSkKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGV4Y2l0ZV9uYW5kX2luaXQodm9pZCkKIHsKIAlwcl9pbmZvKCJCYXNsZXIgZVhjaXRlIG5hbmQgZmxhc2ggZHJpdmVyIFZlcnNpb24gIgogCQlFWENJVEVfTkFOREZMQVNIX1ZFUlNJT04gIlxuIik7Ci0JcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmZXhjaXRlX25hbmRfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZleGNpdGVfbmFuZF9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgZXhjaXRlX25hbmRfZXhpdCh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZleGNpdGVfbmFuZF9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZleGNpdGVfbmFuZF9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChleGNpdGVfbmFuZF9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvbmRmYy5jIGIvZHJpdmVycy9tdGQvbmFuZC9uZGZjLmMKaW5kZXggNTgyY2Y4MC4uODliZjg1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9uZGZjLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9uZGZjLmMKQEAgLTE4Nyw3ICsxODcsNyBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAogCW5kZmMtPm10ZC5uYW1lID0ga2FzcHJpbnRmKEdGUF9LRVJORUwsICIlcy4lcyIsCi0JCQkJICAgbmRmYy0+b2ZkZXYtPmRldi5idXNfaWQsIGZsYXNoX25wLT5uYW1lKTsKKwkJCWRldl9uYW1lKCZuZGZjLT5vZmRldi0+ZGV2KSwgZmxhc2hfbnAtPm5hbWUpOwogCWlmICghbmRmYy0+bXRkLm5hbWUpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBlcnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9vbmVuYW5kL2dlbmVyaWMuYyBiL2RyaXZlcnMvbXRkL29uZW5hbmQvZ2VuZXJpYy5jCmluZGV4IDViNjllNzcuLjNhNDk2YzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL29uZW5hbmQvZ2VuZXJpYy5jCisrKyBiL2RyaXZlcnMvbXRkL29uZW5hbmQvZ2VuZXJpYy5jCkBAIC0zNiwxMCArMzYsOSBAQAogCXN0cnVjdCBvbmVuYW5kX2NoaXAJb25lbmFuZDsKIH07CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IGdlbmVyaWNfb25lbmFuZF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBnZW5lcmljX29uZW5hbmRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgb25lbmFuZF9pbmZvICppbmZvOwotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgZmxhc2hfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IHBkZXYtPnJlc291cmNlOwogCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDE7CkBAIC00OSw3ICs0OCw3IEBACiAJaWYgKCFpbmZvKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHNpemUsIGRldi0+ZHJpdmVyLT5uYW1lKSkgeworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHNpemUsIHBkZXYtPmRldi5kcml2ZXItPm5hbWUpKSB7CiAJCWVyciA9IC1FQlVTWTsKIAkJZ290byBvdXRfZnJlZV9pbmZvOwogCX0KQEAgLTgyLDcgKzgxLDcgQEAKICNlbmRpZgogCQllcnIgPSBhZGRfbXRkX2RldmljZSgmaW5mby0+bXRkKTsKIAotCWRldl9zZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2LCBpbmZvKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBpbmZvKTsKIAogCXJldHVybiAwOwogCkBAIC05NiwxNCArOTUsMTMgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IF9fZGV2ZXhpdCBnZW5lcmljX29uZW5hbmRfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19kZXZleGl0IGdlbmVyaWNfb25lbmFuZF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7Ci0Jc3RydWN0IG9uZW5hbmRfaW5mbyAqaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KTsKKwlzdHJ1Y3Qgb25lbmFuZF9pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IHJlc291cmNlICpyZXMgPSBwZGV2LT5yZXNvdXJjZTsKIAl1bnNpZ25lZCBsb25nIHNpemUgPSByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxOwogCi0JZGV2X3NldF9kcnZkYXRhKCZwZGV2LT5kZXYsIE5VTEwpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCiAJaWYgKGluZm8pIHsKIAkJaWYgKGluZm8tPnBhcnRzKQpAQCAtMTIwLDkgKzExOCwxMSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgZ2VuZXJpY19vbmVuYW5kX2RyaXZlciA9IHsKLQkubmFtZQkJPSBEUklWRVJfTkFNRSwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGdlbmVyaWNfb25lbmFuZF9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJCT0gRFJJVkVSX05BTUUsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwl9LAogCS5wcm9iZQkJPSBnZW5lcmljX29uZW5hbmRfcHJvYmUsCiAJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChnZW5lcmljX29uZW5hbmRfcmVtb3ZlKSwKIH07CkBAIC0xMzEsMTIgKzEzMSwxMiBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBnZW5lcmljX29uZW5hbmRfaW5pdCh2b2lkKQogewotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJmdlbmVyaWNfb25lbmFuZF9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmdlbmVyaWNfb25lbmFuZF9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgZ2VuZXJpY19vbmVuYW5kX2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmZ2VuZXJpY19vbmVuYW5kX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmdlbmVyaWNfb25lbmFuZF9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChnZW5lcmljX29uZW5hbmRfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC8zYzUwMS5jIGIvZHJpdmVycy9uZXQvM2M1MDEuYwppbmRleCAzZDEzMThhLi4xYzUzNDRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC8zYzUwMS5jCisrKyBiL2RyaXZlcnMvbmV0LzNjNTAxLmMKQEAgLTE5Nyw2ICsxOTcsMTcgQEAKIAlyZXR1cm4gRVJSX1BUUihlcnIpOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGVsX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IGVsX29wZW4sCisJLm5kb19zdG9wCQk9IGVsMV9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQgCT0gZWxfc3RhcnRfeG1pdCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gZWxfdGltZW91dCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IHNldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogLyoqCiAgKgllbDFfcHJvYmUxOgogICoJQGRldjogVGhlIGRldmljZSBzdHJ1Y3R1cmUgdG8gdXNlCkBAIC0zMDUsMTIgKzMxNiw4IEBACiAJICoJVGhlIEVMMS1zcGVjaWZpYyBlbnRyaWVzIGluIHRoZSBkZXZpY2Ugc3RydWN0dXJlLgogCSAqLwogCi0JZGV2LT5vcGVuID0gJmVsX29wZW47Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSAmZWxfc3RhcnRfeG1pdDsKLQlkZXYtPnR4X3RpbWVvdXQgPSAmZWxfdGltZW91dDsKKwlkZXYtPm5ldGRldl9vcHMgPSAmZWxfbmV0ZGV2X29wczsKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gSFo7Ci0JZGV2LT5zdG9wID0gJmVsMV9jbG9zZTsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9ICZzZXRfbXVsdGljYXN0X2xpc3Q7CiAJZGV2LT5ldGh0b29sX29wcyA9ICZuZXRkZXZfZXRodG9vbF9vcHM7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC8zYzUwNS5jIGIvZHJpdmVycy9uZXQvM2M1MDUuYwppbmRleCBhODEwN2Y5Li4yZGUxYzljIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC8zYzUwNS5jCisrKyBiL2RyaXZlcnMvbmV0LzNjNTA1LmMKQEAgLTEzNTQsNiArMTM1NCwxNyBAQAogCXJldHVybiAwOwkJLyogQmVjYXVzZSBvZiB0aGlzLCB0aGUgbGF5ZXIgYWJvdmUgd2lsbCByZXR1cm4gLUVOT0RFViAqLwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGVscF9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBlbHBfb3BlbiwKKwkubmRvX3N0b3AJCT0gZWxwX2Nsb3NlLAorCS5uZG9fZ2V0X3N0YXRzIAkJPSBlbHBfZ2V0X3N0YXRzLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBlbHBfc3RhcnRfeG1pdCwKKwkubmRvX3R4X3RpbWVvdXQgCT0gZWxwX3RpbWVvdXQsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBlbHBfc2V0X21jX2xpc3QsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCkBAIC0xNTU4LDEzICsxNTY5LDggQEAKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogYWRhcHRlciBjb25maWd1cmF0aW9uIGZhaWxlZFxuIiwgZGV2LT5uYW1lKTsKIAl9CiAKLQlkZXYtPm9wZW4gPSBlbHBfb3BlbjsJCQkJLyogbG9jYWwgKi8KLQlkZXYtPnN0b3AgPSBlbHBfY2xvc2U7CQkJCS8qIGxvY2FsICovCi0JZGV2LT5nZXRfc3RhdHMgPSBlbHBfZ2V0X3N0YXRzOwkJCS8qIGxvY2FsICovCi0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBlbHBfc3RhcnRfeG1pdDsJCS8qIGxvY2FsICovCi0JZGV2LT50eF90aW1lb3V0ID0gZWxwX3RpbWVvdXQ7CQkJLyogbG9jYWwgKi8KKwlkZXYtPm5ldGRldl9vcHMgPSAmZWxwX25ldGRldl9vcHM7CiAJZGV2LT53YXRjaGRvZ190aW1lbyA9IDEwKkhaOwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gZWxwX3NldF9tY19saXN0OwkvKiBsb2NhbCAqLwogCWRldi0+ZXRodG9vbF9vcHMgPSAmbmV0ZGV2X2V0aHRvb2xfb3BzOwkJLyogbG9jYWwgKi8KIAogCWRldi0+bWVtX3N0YXJ0ID0gZGV2LT5tZW1fZW5kID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzNjNTA3LmMgYi9kcml2ZXJzL25ldC8zYzUwNy5jCmluZGV4IDQyM2U2NWQuLmZiYmFmODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzNjNTA3LmMKKysrIGIvZHJpdmVycy9uZXQvM2M1MDcuYwpAQCAtMzUyLDYgKzM1MiwxNiBAQAogCXJldHVybiBFUlJfUFRSKGVycik7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gZWwxNl9vcGVuLAorCS5uZG9fc3RvcAkJPSBlbDE2X2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdCAJPSBlbDE2X3NlbmRfcGFja2V0LAorCS5uZG9fdHhfdGltZW91dCAJPSBlbDE2X3R4X3RpbWVvdXQsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIHN0YXRpYyBpbnQgX19pbml0IGVsMTZfcHJvYmUxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBpb2FkZHIpCiB7CiAJc3RhdGljIHVuc2lnbmVkIGNoYXIgaW5pdF9JRF9kb25lLCB2ZXJzaW9uX3ByaW50ZWQ7CkBAIC00NDksMTAgKzQ1OSw3IEBACiAJCWdvdG8gb3V0MTsKIAl9CiAKLSAJZGV2LT5vcGVuID0gZWwxNl9vcGVuOwotIAlkZXYtPnN0b3AgPSBlbDE2X2Nsb3NlOwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gZWwxNl9zZW5kX3BhY2tldDsKLQlkZXYtPnR4X3RpbWVvdXQgPSBlbDE2X3R4X3RpbWVvdXQ7CisJZGV2LT5uZXRkZXZfb3BzID0gJm5ldGRldl9vcHM7CiAJZGV2LT53YXRjaGRvZ190aW1lbyA9IFRYX1RJTUVPVVQ7CiAJZGV2LT5ldGh0b29sX29wcyA9ICZuZXRkZXZfZXRodG9vbF9vcHM7CiAgCWRldi0+ZmxhZ3MgJj0gfklGRl9NVUxUSUNBU1Q7CS8qIE11bHRpY2FzdCBkb2Vzbid0IHdvcmsgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzNjNTA5LmMgYi9kcml2ZXJzL25ldC8zYzUwOS5jCmluZGV4IDhjNjk0MjEuLmZiYjM3MTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzNjNTA5LmMKKysrIGIvZHJpdmVycy9uZXQvM2M1MDkuYwpAQCAtNTM3LDYgKzUzNywyMSBAQAogc3RhdGljIGludCBtY2FfcmVnaXN0ZXJlZDsKICNlbmRpZiAvKiBDT05GSUdfTUNBICovCiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4gCQk9IGVsM19vcGVuLAorCS5uZG9fc3RvcAkgCT0gZWwzX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdCAJPSBlbDNfc3RhcnRfeG1pdCwKKwkubmRvX2dldF9zdGF0cyAJCT0gZWwzX2dldF9zdGF0cywKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IHNldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX3R4X3RpbWVvdXQgCT0gZWwzX3R4X3RpbWVvdXQsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKKyNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgorCS5uZG9fcG9sbF9jb250cm9sbGVyCT0gZWwzX3BvbGxfY29udHJvbGxlciwKKyNlbmRpZgorfTsKKwogc3RhdGljIGludCBfX2RldmluaXQgZWwzX2NvbW1vbl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGVsM19wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7CkBAIC01NTMsMTYgKzU2OCw4IEBACiAJfQogCiAJLyogVGhlIEVMMy1zcGVjaWZpYyBlbnRyaWVzIGluIHRoZSBkZXZpY2Ugc3RydWN0dXJlLiAqLwotCWRldi0+b3BlbiA9ICZlbDNfb3BlbjsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9ICZlbDNfc3RhcnRfeG1pdDsKLQlkZXYtPnN0b3AgPSAmZWwzX2Nsb3NlOwotCWRldi0+Z2V0X3N0YXRzID0gJmVsM19nZXRfc3RhdHM7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSAmc2V0X211bHRpY2FzdF9saXN0OwotCWRldi0+dHhfdGltZW91dCA9IGVsM190eF90aW1lb3V0OworCWRldi0+bmV0ZGV2X29wcyA9ICZuZXRkZXZfb3BzOwogCWRldi0+d2F0Y2hkb2dfdGltZW8gPSBUWF9USU1FT1VUOwotI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCi0JZGV2LT5wb2xsX2NvbnRyb2xsZXIgPSBlbDNfcG9sbF9jb250cm9sbGVyOwotI2VuZGlmCiAJU0VUX0VUSFRPT0xfT1BTKGRldiwgJmV0aHRvb2xfb3BzKTsKIAogCWVyciA9IHJlZ2lzdGVyX25ldGRldihkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvM2M1MTUuYyBiL2RyaXZlcnMvbmV0LzNjNTE1LmMKaW5kZXggMzlhYzEyMi4uMTY3YmYyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvM2M1MTUuYworKysgYi9kcml2ZXJzL25ldC8zYzUxNS5jCkBAIC01NjMsNiArNTYzLDIwIEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKKworc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBuZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBjb3Jrc2NyZXdfb3BlbiwKKwkubmRvX3N0b3AJCT0gY29ya3NjcmV3X2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBjb3Jrc2NyZXdfc3RhcnRfeG1pdCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gY29ya3NjcmV3X3RpbWVvdXQsCisJLm5kb19nZXRfc3RhdHMJCT0gY29ya3NjcmV3X2dldF9zdGF0cywKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IHNldF9yeF9tb2RlLAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCisKIHN0YXRpYyBpbnQgY29ya3NjcmV3X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBpb2FkZHIsCiAJCQkgICAgc3RydWN0IHBucF9kZXYgKmlkZXYsIGludCBjYXJkX251bWJlcikKIHsKQEAgLTY4MSwxMyArNjk1LDggQEAKIAl2cC0+ZnVsbF9idXNfbWFzdGVyX3J4ID0gKHZwLT5jYXBhYmlsaXRpZXMgJiAweDIwKSA/IDEgOiAwOwogCiAJLyogVGhlIDNjNTF4LXNwZWNpZmljIGVudHJpZXMgaW4gdGhlIGRldmljZSBzdHJ1Y3R1cmUuICovCi0JZGV2LT5vcGVuID0gJmNvcmtzY3Jld19vcGVuOwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gJmNvcmtzY3Jld19zdGFydF94bWl0OwotCWRldi0+dHhfdGltZW91dCA9ICZjb3Jrc2NyZXdfdGltZW91dDsKKwlkZXYtPm5ldGRldl9vcHMgPSAmbmV0ZGV2X29wczsKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gKDQwMCAqIEhaKSAvIDEwMDA7Ci0JZGV2LT5zdG9wID0gJmNvcmtzY3Jld19jbG9zZTsKLQlkZXYtPmdldF9zdGF0cyA9ICZjb3Jrc2NyZXdfZ2V0X3N0YXRzOwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gJnNldF9yeF9tb2RlOwogCWRldi0+ZXRodG9vbF9vcHMgPSAmbmV0ZGV2X2V0aHRvb2xfb3BzOwogCiAJcmV0dXJuIHJlZ2lzdGVyX25ldGRldihkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvM2M1MjMuYyBiL2RyaXZlcnMvbmV0LzNjNTIzLmMKaW5kZXggZmY0MWUxZi4uOGY3MzRkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvM2M1MjMuYworKysgYi9kcml2ZXJzL25ldC8zYzUyMy5jCkBAIC00MDMsNiArNDAzLDIwIEBACiAJcmV0dXJuIGxlbjsKIH0JCQkJLyogZWxtY19nZXRpbmZvKCkgKi8KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBuZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiAJCT0gZWxtY19vcGVuLAorCS5uZG9fc3RvcAkJPSBlbG1jX2Nsb3NlLAorCS5uZG9fZ2V0X3N0YXRzCQk9IGVsbWNfZ2V0X3N0YXRzLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBlbG1jX3NlbmRfcGFja2V0LAorCS5uZG9fdHhfdGltZW91dAkJPSBlbG1jX3RpbWVvdXQsCisjaWZkZWYgRUxNQ19NVUxUSUNBU1QKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IHNldF9tdWx0aWNhc3RfbGlzdCwKKyNlbmRpZgorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHN0YXRpYyBpbnQgX19pbml0IGRvX2VsbWNfcHJvYmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTU0NCwxNyArNTU4LDggQEAKIAlwcmludGsoS0VSTl9JTkZPICIlczogaGFyZHdhcmUgYWRkcmVzcyAlcE1cbiIsCiAJICAgICAgIGRldi0+bmFtZSwgZGV2LT5kZXZfYWRkcik7CiAKLQlkZXYtPm9wZW4gPSAmZWxtY19vcGVuOwotCWRldi0+c3RvcCA9ICZlbG1jX2Nsb3NlOwotCWRldi0+Z2V0X3N0YXRzID0gJmVsbWNfZ2V0X3N0YXRzOwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gJmVsbWNfc2VuZF9wYWNrZXQ7Ci0JZGV2LT50eF90aW1lb3V0ID0gJmVsbWNfdGltZW91dDsKKwlkZXYtPm5ldGRldl9vcHMgPSAmbmV0ZGV2X29wczsKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gSFo7Ci0jaWZkZWYgRUxNQ19NVUxUSUNBU1QKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9ICZzZXRfbXVsdGljYXN0X2xpc3Q7Ci0jZWxzZQotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gTlVMTDsKLSNlbmRpZgogCWRldi0+ZXRodG9vbF9vcHMgPSAmbmV0ZGV2X2V0aHRvb2xfb3BzOwogCiAJLyogbm90ZSB0aGF0IHdlIGhhdmVuJ3QgYWN0dWFsbHkgcmVxdWVzdGVkIHRoZSBJUlEgZnJvbSB0aGUga2VybmVsLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvM2M1MjcuYyBiL2RyaXZlcnMvbmV0LzNjNTI3LmMKaW5kZXggMmRmM2FmMy4uYjYxMDczYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvM2M1MjcuYworKysgYi9kcml2ZXJzL25ldC8zYzUyNy5jCkBAIC0yODgsNiArMjg4LDE4IEBACiAJcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gbWMzMl9vcGVuLAorCS5uZG9fc3RvcAkJPSBtYzMyX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBtYzMyX3NlbmRfcGFja2V0LAorCS5uZG9fZ2V0X3N0YXRzCQk9IG1jMzJfZ2V0X3N0YXRzLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gbWMzMl9zZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb190eF90aW1lb3V0CQk9IG1jMzJfdGltZW91dCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogLyoqCiAgKiBtYzMyX3Byb2JlMQktCUNoZWNrIGEgZ2l2ZW4gc2xvdCBmb3IgYSBib2FyZCBhbmQgdGVzdCB0aGUgY2FyZAogICogQGRldjogIERldmljZSBzdHJ1Y3R1cmUgdG8gZmlsbCBpbgpAQCAtNTE4LDEyICs1MzAsNyBAQAogCXByaW50aygiJXM6IEZpcm13YXJlIFJldiAlZC4gJWQgUlggYnVmZmVycywgJWQgVFggYnVmZmVycy4gQmFzZSBvZiAweCUwOFguXG4iLAogCQlkZXYtPm5hbWUsIGxwLT5leGVjX2JveC0+ZGF0YVsxMl0sIGxwLT5yeF9sZW4sIGxwLT50eF9sZW4sIGxwLT5iYXNlKTsKIAotCWRldi0+b3BlbgkJPSBtYzMyX29wZW47Ci0JZGV2LT5zdG9wCQk9IG1jMzJfY2xvc2U7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQJPSBtYzMyX3NlbmRfcGFja2V0OwotCWRldi0+Z2V0X3N0YXRzCQk9IG1jMzJfZ2V0X3N0YXRzOwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gbWMzMl9zZXRfbXVsdGljYXN0X2xpc3Q7Ci0JZGV2LT50eF90aW1lb3V0CQk9IG1jMzJfdGltZW91dDsKKwlkZXYtPm5ldGRldl9vcHMJCT0gJm5ldGRldl9vcHM7CiAJZGV2LT53YXRjaGRvZ190aW1lbwk9IEhaKjU7CS8qIEJvYXJkIGRvZXMgYWxsIHRoZSB3b3JrICovCiAJZGV2LT5ldGh0b29sX29wcwk9ICZuZXRkZXZfZXRodG9vbF9vcHM7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzNjNTl4LmMgYi9kcml2ZXJzL25ldC8zYzU5eC5jCmluZGV4IGNkYmJiNjIuLmM1NjY5ODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzNjNTl4LmMKKysrIGIvZHJpdmVycy9uZXQvM2M1OXguYwpAQCAtMTAyLDggKzEwMiw4IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KIAogCi1zdGF0aWMgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0ZGF0YSA9Ci1EUlZfTkFNRSAiOiBEb25hbGQgQmVja2VyIGFuZCBvdGhlcnMuXG4iOworc3RhdGljIGNvbnN0IGNoYXIgdmVyc2lvbltdIF9fZGV2aW5pdGNvbnN0ID0KKwlEUlZfTkFNRSAiOiBEb25hbGQgQmVja2VyIGFuZCBvdGhlcnMuXG4iOwogCiBNT0RVTEVfQVVUSE9SKCJEb25hbGQgQmVja2VyIDxiZWNrZXJAc2N5bGQuY29tPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCIzQ29tIDNjNTl4LzNjOXh4IGV0aGVybmV0IGRyaXZlciAiKTsKQEAgLTk5Miw2ICs5OTIsNDIgQEAKIAlyZXR1cm4gcmM7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYm9vbXJhbmdfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gdm9ydGV4X29wZW4sCisJLm5kb19zdG9wCQk9IHZvcnRleF9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gYm9vbWVyYW5nX3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0CQk9IHZvcnRleF90eF90aW1lb3V0LAorCS5uZG9fZ2V0X3N0YXRzCQk9IHZvcnRleF9nZXRfc3RhdHMsCisjaWZkZWYgQ09ORklHX1BDSQorCS5uZG9fZG9faW9jdGwgCQk9IHZvcnRleF9pb2N0bCwKKyNlbmRpZgorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gc2V0X3J4X21vZGUsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKKyNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgorCS5uZG9fcG9sbF9jb250cm9sbGVyCT0gcG9sbF92b3J0ZXgsCisjZW5kaWYKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdm9ydGV4X25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IHZvcnRleF9vcGVuLAorCS5uZG9fc3RvcAkJPSB2b3J0ZXhfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IHZvcnRleF9zdGFydF94bWl0LAorCS5uZG9fdHhfdGltZW91dAkJPSB2b3J0ZXhfdHhfdGltZW91dCwKKwkubmRvX2dldF9zdGF0cwkJPSB2b3J0ZXhfZ2V0X3N0YXRzLAorI2lmZGVmIENPTkZJR19QQ0kKKwkubmRvX2RvX2lvY3RsIAkJPSB2b3J0ZXhfaW9jdGwsCisjZW5kaWYKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IHNldF9yeF9tb2RlLAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCisjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKKwkubmRvX3BvbGxfY29udHJvbGxlcgk9IHBvbGxfdm9ydGV4LAorI2VuZGlmCit9OworCiAvKgogICogU3RhcnQgdXAgdGhlIFBDSS9FSVNBIGRldmljZSB3aGljaCBpcyBkZXNjcmliZWQgYnkgKmdlbmRldi4KICAqIFJldHVybiAwIG9uIHN1Y2Nlc3MuCkBAIC0xMzY2LDE4ICsxNDAyLDE2IEBACiAJfQogCiAJLyogVGhlIDNjNTl4LXNwZWNpZmljIGVudHJpZXMgaW4gdGhlIGRldmljZSBzdHJ1Y3R1cmUuICovCi0JZGV2LT5vcGVuID0gdm9ydGV4X29wZW47CiAJaWYgKHZwLT5mdWxsX2J1c19tYXN0ZXJfdHgpIHsKLQkJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBib29tZXJhbmdfc3RhcnRfeG1pdDsKKwkJZGV2LT5uZXRkZXZfb3BzID0gJmJvb21yYW5nX25ldGRldl9vcHM7CiAJCS8qIEFjdHVhbGx5LCBpdCBzdGlsbCBzaG91bGQgd29yayB3aXRoIGlvbW11LiAqLwogCQlpZiAoY2FyZF9pZHggPCBNQVhfVU5JVFMgJiYKIAkJICAgICgoaHdfY2hlY2tzdW1zW2NhcmRfaWR4XSA9PSAtMSAmJiAodnAtPmRydl9mbGFncyAmIEhBU19IV0NLU00pKSB8fAogCQkJCWh3X2NoZWNrc3Vtc1tjYXJkX2lkeF0gPT0gMSkpIHsKIAkJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9TRzsKIAkJfQotCX0gZWxzZSB7Ci0JCWRldi0+aGFyZF9zdGFydF94bWl0ID0gdm9ydGV4X3N0YXJ0X3htaXQ7Ci0JfQorCX0gZWxzZQorCQlkZXYtPm5ldGRldl9vcHMgPSAgJnZvcnRleF9uZXRkZXZfb3BzOwogCiAJaWYgKHByaW50X2luZm8pIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHNjYXR0ZXIvZ2F0aGVyICVzYWJsZWQuIGgvdyBjaGVja3N1bXMgJXNhYmxlZFxuIiwKQEAgLTEzODYsMTggKzE0MjAsOSBAQAogCQkJCShkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9JUF9DU1VNKSA/ICJlbiI6ImRpcyIpOwogCX0KIAotCWRldi0+c3RvcCA9IHZvcnRleF9jbG9zZTsKLQlkZXYtPmdldF9zdGF0cyA9IHZvcnRleF9nZXRfc3RhdHM7Ci0jaWZkZWYgQ09ORklHX1BDSQotCWRldi0+ZG9faW9jdGwgPSB2b3J0ZXhfaW9jdGw7Ci0jZW5kaWYKIAlkZXYtPmV0aHRvb2xfb3BzID0gJnZvcnRleF9ldGh0b29sX29wczsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IHNldF9yeF9tb2RlOwotCWRldi0+dHhfdGltZW91dCA9IHZvcnRleF90eF90aW1lb3V0OwogCWRldi0+d2F0Y2hkb2dfdGltZW8gPSAod2F0Y2hkb2cgKiBIWikgLyAxMDAwOwotI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCi0JZGV2LT5wb2xsX2NvbnRyb2xsZXIgPSBwb2xsX3ZvcnRleDsKLSNlbmRpZgorCiAJaWYgKHBkZXYpIHsKIAkJdnAtPnBtX3N0YXRlX3ZhbGlkID0gMTsKICAJCXBjaV9zYXZlX3N0YXRlKFZPUlRFWF9QQ0kodnApKTsKQEAgLTI4ODMsNyArMjkwOCw3IEBACiAJCXN0cmNweShpbmZvLT5idXNfaW5mbywgcGNpX25hbWUoVk9SVEVYX1BDSSh2cCkpKTsKIAl9IGVsc2UgewogCQlpZiAoVk9SVEVYX0VJU0EodnApKQotCQkJc3ByaW50ZihpbmZvLT5idXNfaW5mbywgZGV2X25hbWUodnAtPmdlbmRldikpOworCQkJc3RyY3B5KGluZm8tPmJ1c19pbmZvLCBkZXZfbmFtZSh2cC0+Z2VuZGV2KSk7CiAJCWVsc2UKIAkJCXNwcmludGYoaW5mby0+YnVzX2luZm8sICJFSVNBIDB4JWx4ICVkIiwKIAkJCQkJZGV2LT5iYXNlX2FkZHIsIGRldi0+aXJxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzgxMzljcC5jIGIvZHJpdmVycy9uZXQvODEzOWNwLmMKaW5kZXggNGUxOWFlMy4uYTA5ZTNhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvODEzOWNwLmMKKysrIGIvZHJpdmVycy9uZXQvODEzOWNwLmMKQEAgLTYwNCw3ICs2MDQsNyBAQAogCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZjcC0+bG9jaywgZmxhZ3MpOwogCQljcHcxNl9mKEludHJNYXNrLCBjcF9pbnRyX21hc2spOwotCQlfX25ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQlfX25hcGlfY29tcGxldGUobmFwaSk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNwLT5sb2NrLCBmbGFncyk7CiAJfQogCkBAIC02NDEsOSArNjQxLDkgQEAKIAl9CiAKIAlpZiAoc3RhdHVzICYgKFJ4T0sgfCBSeEVyciB8IFJ4RW1wdHkgfCBSeEZJRk9PdnIpKQotCQlpZiAobmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgmY3AtPm5hcGkpKSB7CisJCWlmIChuYXBpX3NjaGVkdWxlX3ByZXAoJmNwLT5uYXBpKSkgewogCQkJY3B3MTZfZihJbnRyTWFzaywgY3Bfbm9yeF9pbnRyX21hc2spOwotCQkJX19uZXRpZl9yeF9zY2hlZHVsZSgmY3AtPm5hcGkpOworCQkJX19uYXBpX3NjaGVkdWxlKCZjcC0+bmFwaSk7CiAJCX0KIAogCWlmIChzdGF0dXMgJiAoVHhPSyB8IFR4RXJyIHwgVHhFbXB0eSB8IFNXSW50KSkKQEAgLTE2MDIsNiArMTYwMiwyOCBAQAogCXJldHVybiByYzsKIH0KIAorc3RhdGljIGludCBjcF9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcCkKK3sKKwlzdHJ1Y3QgY3BfcHJpdmF0ZSAqY3AgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBzb2NrYWRkciAqYWRkciA9IHA7CisKKwlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoYWRkci0+c2FfZGF0YSkpCisJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKKworCW1lbWNweShkZXYtPmRldl9hZGRyLCBhZGRyLT5zYV9kYXRhLCBkZXYtPmFkZHJfbGVuKTsKKworCXNwaW5fbG9ja19pcnEoJmNwLT5sb2NrKTsKKworCWNwdzhfZihDZmc5MzQ2LCBDZmc5MzQ2X1VubG9jayk7CisJY3B3MzJfZihNQUMwICsgMCwgbGUzMl90b19jcHUgKCooX19sZTMyICopIChkZXYtPmRldl9hZGRyICsgMCkpKTsKKwljcHczMl9mKE1BQzAgKyA0LCBsZTMyX3RvX2NwdSAoKihfX2xlMzIgKikgKGRldi0+ZGV2X2FkZHIgKyA0KSkpOworCWNwdzhfZihDZmc5MzQ2LCBDZmc5MzQ2X0xvY2spOworCisJc3Bpbl91bmxvY2tfaXJxKCZjcC0+bG9jayk7CisKKwlyZXR1cm4gMDsKK30KKwogLyogU2VyaWFsIEVFUFJPTSBzZWN0aW9uLiAqLwogCiAvKiAgRUVQUk9NX0N0cmwgYml0cy4gKi8KQEAgLTE4MjEsNyArMTg0Myw3IEBACiAJLm5kb19vcGVuCQk9IGNwX29wZW4sCiAJLm5kb19zdG9wCQk9IGNwX2Nsb3NlLAogCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAotCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBjcF9zZXRfbWFjX2FkZHJlc3MsCiAJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QJPSBjcF9zZXRfcnhfbW9kZSwKIAkubmRvX2dldF9zdGF0cwkJPSBjcF9nZXRfc3RhdHMsCiAJLm5kb19kb19pb2N0bAkJPSBjcF9pb2N0bCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzgxMzl0b28uYyBiL2RyaXZlcnMvbmV0LzgxMzl0b28uYwppbmRleCBhNWIyNDIwLi4yOWRmMzk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC84MTM5dG9vLmMKKysrIGIvZHJpdmVycy9uZXQvODEzOXRvby5jCkBAIC02NDAsNiArNjQwLDcgQEAKICNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgogc3RhdGljIHZvaWQgcnRsODEzOV9wb2xsX2NvbnRyb2xsZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAjZW5kaWYKK3N0YXRpYyBpbnQgcnRsODEzOV9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcCk7CiBzdGF0aWMgaW50IHJ0bDgxMzlfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpOwogc3RhdGljIGlycXJldHVybl90IHJ0bDgxMzlfaW50ZXJydXB0IChpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpOwogc3RhdGljIGludCBydGw4MTM5X2Nsb3NlIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKQEAgLTkxNyw3ICs5MTgsNyBAQAogCS5uZG9fc3RvcAkJPSBydGw4MTM5X2Nsb3NlLAogCS5uZG9fZ2V0X3N0YXRzCQk9IHJ0bDgxMzlfZ2V0X3N0YXRzLAogCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAotCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBydGw4MTM5X3NldF9tYWNfYWRkcmVzcywKIAkubmRvX3N0YXJ0X3htaXQJCT0gcnRsODEzOV9zdGFydF94bWl0LAogCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gcnRsODEzOV9zZXRfcnhfbW9kZSwKIAkubmRvX2RvX2lvY3RsCQk9IG5ldGRldl9pb2N0bCwKQEAgLTIxMjgsNyArMjEyOSw3IEBACiAJCSAqLwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmdHAtPmxvY2ssIGZsYWdzKTsKIAkJUlRMX1cxNl9GKEludHJNYXNrLCBydGw4MTM5X2ludHJfbWFzayk7Ci0JCV9fbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCV9fbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHAtPmxvY2ssIGZsYWdzKTsKIAl9CiAJc3Bpbl91bmxvY2soJnRwLT5yeF9sb2NrKTsKQEAgLTIxNzgsOSArMjE3OSw5IEBACiAJLyogUmVjZWl2ZSBwYWNrZXRzIGFyZSBwcm9jZXNzZWQgYnkgcG9sbCByb3V0aW5lLgogCSAgIElmIG5vdCBydW5uaW5nIHN0YXJ0IGl0IG5vdy4gKi8KIAlpZiAoc3RhdHVzICYgUnhBY2tCaXRzKXsKLQkJaWYgKG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoJnRwLT5uYXBpKSkgeworCQlpZiAobmFwaV9zY2hlZHVsZV9wcmVwKCZ0cC0+bmFwaSkpIHsKIAkJCVJUTF9XMTZfRiAoSW50ck1hc2ssIHJ0bDgxMzlfbm9yeF9pbnRyX21hc2spOwotCQkJX19uZXRpZl9yeF9zY2hlZHVsZSgmdHAtPm5hcGkpOworCQkJX19uYXBpX3NjaGVkdWxlKCZ0cC0+bmFwaSk7CiAJCX0KIAl9CiAKQEAgLTIyMTUsNiArMjIxNiwyOSBAQAogfQogI2VuZGlmCiAKK3N0YXRpYyBpbnQgcnRsODEzOV9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcCkKK3sKKwlzdHJ1Y3QgcnRsODEzOV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7CisJdm9pZCBfX2lvbWVtICppb2FkZHIgPSB0cC0+bW1pb19hZGRyOworCXN0cnVjdCBzb2NrYWRkciAqYWRkciA9IHA7CisKKwlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoYWRkci0+c2FfZGF0YSkpCisJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKKworCW1lbWNweShkZXYtPmRldl9hZGRyLCBhZGRyLT5zYV9kYXRhLCBkZXYtPmFkZHJfbGVuKTsKKworCXNwaW5fbG9ja19pcnEoJnRwLT5sb2NrKTsKKworCVJUTF9XOF9GKENmZzkzNDYsIENmZzkzNDZfVW5sb2NrKTsKKwlSVExfVzMyX0YoTUFDMCArIDAsIGNwdV90b19sZTMyICgqKHUzMiAqKSAoZGV2LT5kZXZfYWRkciArIDApKSk7CisJUlRMX1czMl9GKE1BQzAgKyA0LCBjcHVfdG9fbGUzMiAoKih1MzIgKikgKGRldi0+ZGV2X2FkZHIgKyA0KSkpOworCVJUTF9XOF9GKENmZzkzNDYsIENmZzkzNDZfTG9jayk7CisKKwlzcGluX3VubG9ja19pcnEoJnRwLT5sb2NrKTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHJ0bDgxMzlfY2xvc2UgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHJ0bDgxMzlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvODI1OTYuYyBiL2RyaXZlcnMvbmV0LzgyNTk2LmMKaW5kZXggYjI3MzU5Ni4uY2NhOTRiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvODI1OTYuYworKysgYi9kcml2ZXJzL25ldC84MjU5Ni5jCkBAIC0xMTIyLDYgKzExMjIsMTcgQEAKIHN0YXRpYyBpbnQgaW8gPSAweDMwMDsKIHN0YXRpYyBpbnQgaXJxID0gMTA7CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaTU5Nl9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiAJCT0gaTU5Nl9vcGVuLAorCS5uZG9fc3RvcAkJPSBpNTk2X2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBpNTk2X3N0YXJ0X3htaXQsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBzZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb190eF90aW1lb3V0CQk9IGk1OTZfdHhfdGltZW91dCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogc3RydWN0IG5ldF9kZXZpY2UgKiBfX2luaXQgaTgyNTk2X3Byb2JlKGludCB1bml0KQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CkBAIC0xMjMyLDExICsxMjQzLDcgQEAKIAlERUIoREVCX1BST0JFLHByaW50ayhLRVJOX0lORk8gIiVzIiwgdmVyc2lvbikpOwogCiAJLyogVGhlIDgyNTk2LXNwZWNpZmljIGVudHJpZXMgaW4gdGhlIGRldmljZSBzdHJ1Y3R1cmUuICovCi0JZGV2LT5vcGVuID0gaTU5Nl9vcGVuOwotCWRldi0+c3RvcCA9IGk1OTZfY2xvc2U7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBpNTk2X3N0YXJ0X3htaXQ7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBzZXRfbXVsdGljYXN0X2xpc3Q7Ci0JZGV2LT50eF90aW1lb3V0ID0gaTU5Nl90eF90aW1lb3V0OworCWRldi0+bmV0ZGV2X29wcyA9ICZpNTk2X25ldGRldl9vcHM7CiAJZGV2LT53YXRjaGRvZ190aW1lbyA9IFRYX1RJTUVPVVQ7CiAKIAlkZXYtPm1sX3ByaXYgPSAodm9pZCAqKShkZXYtPm1lbV9zdGFydCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9LY29uZmlnIGIvZHJpdmVycy9uZXQvS2NvbmZpZwppbmRleCA2MmQ3MzJhLi5lNWZmYzFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L0tjb25maWcKQEAgLTI2LDYgKzI2LDE1IEBACiAjIHRoYXQgZm9yIGVhY2ggb2YgdGhlIHN5bWJvbHMuCiBpZiBORVRERVZJQ0VTCiAKK2NvbmZpZyBDT01QQVRfTkVUX0RFVl9PUFMKKyAgICAgICBkZWZhdWx0IHkKKyAgICAgICBib29sICJFbmFibGUgb2xkZXIgbmV0d29yayBkZXZpY2UgQVBJIGNvbXBhdGlhYmxpdHkiCisgICAgICAgLS0taGVscC0tLQorICAgICAgICAgIFRoaXMgb3B0aW9uIGVuYWJsZXMga2VybmVsIGNvbXBhdGlhYmlsaXR5IHdpdGggb2xkZXIgbmV0d29yayBkZXZpY2VzCisgICAgICAgICAgdGhhdCBkbyBub3QgdXNlIG5ldF9kZXZpY2Vfb3BzIGludGVyZmFjZS4KKworCSAgSWYgdW5zdXJlLCBzYXkgWS4KKwogY29uZmlnIElGQgogCXRyaXN0YXRlICJJbnRlcm1lZGlhdGUgRnVuY3Rpb25hbCBCbG9jayBzdXBwb3J0IgogCWRlcGVuZHMgb24gTkVUX0NMU19BQ1QKQEAgLTE4NDAsMTAgKzE4NDksMTAgQEAKIAogY29uZmlnIEZFQwogCWJvb2wgIkZFQyBldGhlcm5ldCBjb250cm9sbGVyIChvZiBDb2xkRmlyZSBDUFVzKSIKLQlkZXBlbmRzIG9uIE01MjN4IHx8IE01Mjd4IHx8IE01MjcyIHx8IE01Mjh4IHx8IE01MjB4IHx8IE01MzJ4CisJZGVwZW5kcyBvbiBNNTIzeCB8fCBNNTI3eCB8fCBNNTI3MiB8fCBNNTI4eCB8fCBNNTIweCB8fCBNNTMyeCB8fCBNQUNIX01YMjcKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgYnVpbHQtaW4gMTAvMTAwIEZhc3QgZXRoZXJuZXQKLQkgIGNvbnRyb2xsZXIgb24gc29tZSBNb3Rvcm9sYSBDb2xkRmlyZSBwcm9jZXNzb3JzLgorCSAgY29udHJvbGxlciBvbiBzb21lIE1vdG9yb2xhIENvbGRGaXJlIGFuZCBGcmVlc2NhbGUgaS5NWCBwcm9jZXNzb3JzLgogCiBjb25maWcgRkVDMgogCWJvb2wgIlNlY29uZCBGRUMgZXRoZXJuZXQgY29udHJvbGxlciAob24gc29tZSBDb2xkRmlyZSBDUFVzKSIKQEAgLTIwMzAsMTUgKzIwMzksNiBAQAogICAgICAgICAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZQogICAgICAgICAgd2lsbCBiZSBjYWxsZWQgaWdiLgogCi1jb25maWcgSUdCX0xSTyAKLQlib29sICJVc2Ugc29mdHdhcmUgTFJPIgotCWRlcGVuZHMgb24gSUdCICYmIElORVQKLQlzZWxlY3QgSU5FVF9MUk8KLQktLS1oZWxwLS0tCi0JICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBsYXJnZSByZWNlaXZlIG9mZmxvYWQuIAotCi0JICBJZiBpbiBkb3VidCwgc2F5IE4uCi0KIGNvbmZpZyBJR0JfRENBCiAJYm9vbCAiRGlyZWN0IENhY2hlIEFjY2VzcyAoRENBKSBTdXBwb3J0IgogCWRlZmF1bHQgeQpAQCAtMjI4NCw5ICsyMjg0LDE3IEBACiAKICAgICAgICAgICBJZiB1bnN1cmUsIHNheSBOLgogCitjb25maWcgRlNMX1BRX01ESU8KKwl0cmlzdGF0ZSAiRnJlZXNjYWxlIFBRIE1ESU8iCisJZGVwZW5kcyBvbiBGU0xfU09DCisJc2VsZWN0IFBIWUxJQgorCWhlbHAKKwkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBNRElPIGJ1cyB1c2VkIGJ5IHRoZSBnaWFuZmFyIGFuZCBVQ0MgZHJpdmVycy4KKwogY29uZmlnIEdJQU5GQVIKIAl0cmlzdGF0ZSAiR2lhbmZhciBFdGhlcm5ldCIKIAlkZXBlbmRzIG9uIEZTTF9TT0MKKwlzZWxlY3QgRlNMX1BRX01ESU8KIAlzZWxlY3QgUEhZTElCCiAJc2VsZWN0IENSQzMyCiAJaGVscApAQCAtMjI5Niw2ICsyMzA0LDcgQEAKIGNvbmZpZyBVQ0NfR0VUSAogCXRyaXN0YXRlICJGcmVlc2NhbGUgUUUgR2lnYWJpdCBFdGhlcm5ldCIKIAlkZXBlbmRzIG9uIFFVSUNDX0VOR0lORQorCXNlbGVjdCBGU0xfUFFfTURJTwogCXNlbGVjdCBQSFlMSUIKIAloZWxwCiAJICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgR2lnYWJpdCBFdGhlcm5ldCBtb2RlIG9mIHRoZSBRVUlDQyBFbmdpbmUsCkBAIC0yMzEyLDYgKzIzMjEsNyBAQAogY29uZmlnIE1WNjQzWFhfRVRICiAJdHJpc3RhdGUgIk1hcnZlbGwgRGlzY292ZXJ5ICg2NDNYWCkgYW5kIE9yaW9uIGV0aGVybmV0IHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBNVjY0MzYwIHx8IE1WNjRYNjAgfHwgKFBQQ19NVUxUSVBMQVRGT1JNICYmIFBQQzMyKSB8fCBQTEFUX09SSU9OCisJc2VsZWN0IElORVRfTFJPCiAJc2VsZWN0IFBIWUxJQgogCWhlbHAKIAkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBnaWdhYml0IGV0aGVybmV0IE1BQ3MgaW4gdGhlCkBAIC0yNDMwLDcgKzI0NDAsNiBAQAogCXRyaXN0YXRlICJDaGVsc2lvIENvbW11bmljYXRpb25zIFQzIDEwR2IgRXRoZXJuZXQgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIENIRUxTSU9fVDNfREVQRU5EUwogCXNlbGVjdCBGV19MT0FERVIKLQlzZWxlY3QgSU5FVF9MUk8KIAloZWxwCiAJICBUaGlzIGRyaXZlciBzdXBwb3J0cyBDaGVsc2lvIFQzLWJhc2VkIGdpZ2FiaXQgYW5kIDEwR2IgRXRoZXJuZXQKIAkgIGFkYXB0ZXJzLgpAQCAtMjQ2Niw3ICsyNDc1LDYgQEAKIGNvbmZpZyBJWEdCRQogCXRyaXN0YXRlICJJbnRlbChSKSAxMEdiRSBQQ0kgRXhwcmVzcyBhZGFwdGVycyBzdXBwb3J0IgogCWRlcGVuZHMgb24gUENJICYmIElORVQKLQlzZWxlY3QgSU5FVF9MUk8KIAktLS1oZWxwLS0tCiAJICBUaGlzIGRyaXZlciBzdXBwb3J0cyBJbnRlbChSKSAxMEdiRSBQQ0kgRXhwcmVzcyBmYW1pbHkgb2YKIAkgIGFkYXB0ZXJzLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRvIGlkZW50aWZ5IHlvdXIgYWRhcHRlciwgZ28KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L01ha2VmaWxlIGIvZHJpdmVycy9uZXQvTWFrZWZpbGUKaW5kZXggNDcxYmFhZi4uNzU4ZWNkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvTWFrZWZpbGUKQEAgLTI2LDExICsyNiwxMiBAQAogCiBnaWFuZmFyX2RyaXZlci1vYmpzIDo9IGdpYW5mYXIubyBcCiAJCWdpYW5mYXJfZXRodG9vbC5vIFwKLQkJZ2lhbmZhcl9taWkubyBcCiAJCWdpYW5mYXJfc3lzZnMubwogCiBvYmotJChDT05GSUdfVUNDX0dFVEgpICs9IHVjY19nZXRoX2RyaXZlci5vCi11Y2NfZ2V0aF9kcml2ZXItb2JqcyA6PSB1Y2NfZ2V0aC5vIHVjY19nZXRoX21paS5vIHVjY19nZXRoX2V0aHRvb2wubwordWNjX2dldGhfZHJpdmVyLW9ianMgOj0gdWNjX2dldGgubyB1Y2NfZ2V0aF9ldGh0b29sLm8KKworb2JqLSQoQ09ORklHX0ZTTF9QUV9NRElPKSArPSBmc2xfcHFfbWRpby5vCiAKICMKICMgbGluayBvcmRlciBpbXBvcnRhbnQgaGVyZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYTIwNjUuYyBiL2RyaXZlcnMvbmV0L2EyMDY1LmMKaW5kZXggN2E2MGJkZC4uZDBkMGMyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYTIwNjUuYworKysgYi9kcml2ZXJzL25ldC9hMjA2NS5jCkBAIC01NTIsMTggKzU1MiwxMyBAQAogCXN0cnVjdCBsYW5jZV9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7CiAJdm9sYXRpbGUgc3RydWN0IGxhbmNlX3JlZ3MgKmxsID0gbHAtPmxsOwogCXZvbGF0aWxlIHN0cnVjdCBsYW5jZV9pbml0X2Jsb2NrICppYiA9IGxwLT5pbml0X2Jsb2NrOwotCWludCBlbnRyeSwgc2tibGVuLCBsZW47CisJaW50IGVudHJ5LCBza2JsZW47CiAJaW50IHN0YXR1cyA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNrYmxlbiA9IHNrYi0+bGVuOwotCWxlbiA9IHNrYmxlbjsKLQotCWlmIChsZW4gPCBFVEhfWkxFTikgewotCQlsZW4gPSBFVEhfWkxFTjsKLQkJaWYgKHNrYl9wYWR0byhza2IsIEVUSF9aTEVOKSkKLQkJCXJldHVybiAwOwotCX0KKwlpZiAoc2tiX3BhZHRvKHNrYiwgRVRIX1pMRU4pKQorCQlyZXR1cm4gMDsKKwlza2JsZW4gPSBtYXhfdCh1bnNpZ25lZCwgc2tiLT5sZW4sIEVUSF9aTEVOKTsKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIApAQCAtNTg2LDE1ICs1ODEsMTEgQEAKIAl9CiAjZW5kaWYKIAllbnRyeSA9IGxwLT50eF9uZXcgJiBscC0+dHhfcmluZ19tb2RfbWFzazsKLQlpYi0+YnR4X3JpbmcgW2VudHJ5XS5sZW5ndGggPSAoLWxlbikgfCAweGYwMDA7CisJaWItPmJ0eF9yaW5nIFtlbnRyeV0ubGVuZ3RoID0gKC1za2JsZW4pIHwgMHhmMDAwOwogCWliLT5idHhfcmluZyBbZW50cnldLm1pc2MgPSAwOwogCiAJc2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YShza2IsICh2b2lkICopJmliLT50eF9idWYgW2VudHJ5XVswXSwgc2tibGVuKTsKIAotCS8qIENsZWFyIHRoZSBzbGFjayBvZiB0aGUgcGFja2V0LCBkbyBJIG5lZWQgdGhpcz8gKi8KLQlpZiAobGVuICE9IHNrYmxlbikKLQkJbWVtc2V0ICgodm9pZCAqKSAmaWItPnR4X2J1ZiBbZW50cnldW3NrYmxlbl0sIDAsIGxlbiAtIHNrYmxlbik7Ci0KIAkvKiBOb3csIGdpdmUgdGhlIHBhY2tldCB0byB0aGUgbGFuY2UgKi8KIAlpYi0+YnR4X3JpbmcgW2VudHJ5XS50bWQxX2JpdHMgPSAoTEVfVDFfUE9LfExFX1QxX09XTik7CiAJbHAtPnR4X25ldyA9IChscC0+dHhfbmV3KzEpICYgbHAtPnR4X3JpbmdfbW9kX21hc2s7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hY2VuaWMuYyBiL2RyaXZlcnMvbmV0L2FjZW5pYy5jCmluZGV4IDk1ODlkNjIwLi4wNmE5ZjExIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hY2VuaWMuYworKysgYi9kcml2ZXJzL25ldC9hY2VuaWMuYwpAQCAtNDM3LDcgKzQzNyw3IEBACiBNT0RVTEVfUEFSTV9ERVNDKHR4X3JhdGlvLCAiQWNlTklDLzNDOTg1L0dBNjIwIHJhdGlvIG9mIE5JQyBtZW1vcnkgdXNlZCBmb3IgVFgvUlggZGVzY3JpcHRvcnMgKHJhbmdlIDAtNjMpIik7CiAKIAotc3RhdGljIGNoYXIgdmVyc2lvbltdIF9fZGV2aW5pdGRhdGEgPQorc3RhdGljIGNvbnN0IGNoYXIgdmVyc2lvbltdIF9fZGV2aW5pdGNvbnN0ID0KICAgImFjZW5pYy5jOiB2MC45MiAwOC8wNS8yMDAyICBKZXMgU29yZW5zZW4sIGxpbnV4LWFjZW5pY0BTdW5TSVRFLmRrXG4iCiAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cDovL2hvbWUuY2Vybi5jaC9+amVzL2dpZ2UvYWNlbmljLmh0bWxcbiI7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FtZDgxMTFlLmMgYi9kcml2ZXJzL25ldC9hbWQ4MTExZS5jCmluZGV4IDc3MDk5OTIuLmNiOWM5NWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FtZDgxMTFlLmMKKysrIGIvZHJpdmVycy9uZXQvYW1kODExMWUuYwpAQCAtODMxLDcgKzgzMSw3IEBACiAJaWYgKHJ4X3BrdF9saW1pdCA+IDApIHsKIAkJLyogUmVjZWl2ZSBkZXNjcmlwdG9yIGlzIGVtcHR5IG5vdyAqLwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmbHAtPmxvY2ssIGZsYWdzKTsKLQkJX19uZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJX19uYXBpX2NvbXBsZXRlKG5hcGkpOwogCQl3cml0ZWwoVkFMMHxSSU5URU4wLCBtbWlvICsgSU5URU4wKTsKIAkJd3JpdGVsKFZBTDIgfCBSRE1EMCwgbW1pbyArIENNRDApOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZscC0+bG9jaywgZmxhZ3MpOwpAQCAtMTE3MCwxMSArMTE3MCwxMSBAQAogCiAJLyogQ2hlY2sgaWYgUmVjZWl2ZSBJbnRlcnJ1cHQgaGFzIG9jY3VycmVkLiAqLwogCWlmIChpbnRyMCAmIFJJTlQwKSB7Ci0JCWlmIChuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKCZscC0+bmFwaSkpIHsKKwkJaWYgKG5hcGlfc2NoZWR1bGVfcHJlcCgmbHAtPm5hcGkpKSB7CiAJCQkvKiBEaXNhYmxlIHJlY2VpdmUgaW50ZXJ1cHRzICovCiAJCQl3cml0ZWwoUklOVEVOMCwgbW1pbyArIElOVEVOMCk7CiAJCQkvKiBTY2hlZHVsZSBhIHBvbGxpbmcgcm91dGluZSAqLwotCQkJX19uZXRpZl9yeF9zY2hlZHVsZSgmbHAtPm5hcGkpOworCQkJX19uYXBpX3NjaGVkdWxlKCZscC0+bmFwaSk7CiAJCX0gZWxzZSBpZiAoaW50cmVuMCAmIFJJTlRFTjApIHsKIAkJCXByaW50aygiKioqKioqKioqKioqRHJpdmVyIGJ1ZyEgXAogCQkJCWludGVycnVwdCB3aGlsZSBpbiBwb2xsXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FyY25ldC9hcmMtcmF3bW9kZS5jIGIvZHJpdmVycy9uZXQvYXJjbmV0L2FyYy1yYXdtb2RlLmMKaW5kZXggM2ZmOWFmZi4uNjQ2ZGZjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXJjbmV0L2FyYy1yYXdtb2RlLmMKKysrIGIvZHJpdmVycy9uZXQvYXJjbmV0L2FyYy1yYXdtb2RlLmMKQEAgLTEwMiw3ICsxMDIsNyBAQAogCXNrYiA9IGFsbG9jX3NrYihsZW5ndGggKyBBUkNfSERSX1NJWkUsIEdGUF9BVE9NSUMpOwogCWlmIChza2IgPT0gTlVMTCkgewogCQlCVUdNU0coRF9OT1JNQUwsICJNZW1vcnkgc3F1ZWV6ZSwgZHJvcHBpbmcgcGFja2V0LlxuIik7Ci0JCWxwLT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQlyZXR1cm47CiAJfQogCXNrYl9wdXQoc2tiLCBsZW5ndGggKyBBUkNfSERSX1NJWkUpOwpAQCAtMTIyLDcgKzEyMiw3IEBACiAKIAlCVUdMVkwoRF9TS0IpIGFyY25ldF9kdW1wX3NrYihkZXYsIHNrYiwgInJ4Iik7CiAKLQlza2ItPnByb3RvY29sID0gX19jb25zdGFudF9odG9ucyhFVEhfUF9BUkNORVQpOworCXNrYi0+cHJvdG9jb2wgPSBjcHVfdG9fYmUxNihFVEhfUF9BUkNORVQpOwogOwogCW5ldGlmX3J4KHNrYik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcmNuZXQvYXJjbmV0LmMgYi9kcml2ZXJzL25ldC9hcmNuZXQvYXJjbmV0LmMKaW5kZXggNmI1M2U1ZS4uZDZkNGFiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXJjbmV0L2FyY25ldC5jCisrKyBiL2RyaXZlcnMvbmV0L2FyY25ldC9hcmNuZXQuYwpAQCAtOTUsMTcgKzk1LDE2IEBACiBFWFBPUlRfU1lNQk9MKGFyY25ldF9kZWJ1Zyk7CiBFWFBPUlRfU1lNQk9MKGFsbG9jX2FyY2Rldik7CiBFWFBPUlRfU1lNQk9MKGFyY25ldF9pbnRlcnJ1cHQpOworRVhQT1JUX1NZTUJPTChhcmNuZXRfb3Blbik7CitFWFBPUlRfU1lNQk9MKGFyY25ldF9jbG9zZSk7CitFWFBPUlRfU1lNQk9MKGFyY25ldF9zZW5kX3BhY2tldCk7CitFWFBPUlRfU1lNQk9MKGFyY25ldF90aW1lb3V0KTsKIAogLyogSW50ZXJuYWwgZnVuY3Rpb24gcHJvdG90eXBlcyAqLwotc3RhdGljIGludCBhcmNuZXRfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgYXJjbmV0X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIGludCBhcmNuZXRfc2VuZF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgdm9pZCBhcmNuZXRfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgYXJjbmV0X2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJIHVuc2lnbmVkIHNob3J0IHR5cGUsIGNvbnN0IHZvaWQgKmRhZGRyLAogCQkJIGNvbnN0IHZvaWQgKnNhZGRyLCB1bnNpZ25lZCBsZW4pOwogc3RhdGljIGludCBhcmNuZXRfcmVidWlsZF9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmFyY25ldF9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IGdvX3R4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCiBzdGF0aWMgaW50IGRlYnVnID0gQVJDTkVUX0RFQlVHOwpAQCAtMzIyLDExICszMjEsMTggQEAKIAkucmVidWlsZCA9IGFyY25ldF9yZWJ1aWxkX2hlYWRlciwKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYXJjbmV0X25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCT0gYXJjbmV0X29wZW4sCisJLm5kb19zdG9wCT0gYXJjbmV0X2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdCA9IGFyY25ldF9zZW5kX3BhY2tldCwKKwkubmRvX3R4X3RpbWVvdXQgPSBhcmNuZXRfdGltZW91dCwKK307CiAKIC8qIFNldHVwIGEgc3RydWN0IGRldmljZSBmb3IgQVJDbmV0LiAqLwogc3RhdGljIHZvaWQgYXJjZGV2X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJZGV2LT50eXBlID0gQVJQSFJEX0FSQ05FVDsKKwlkZXYtPm5ldGRldl9vcHMgPSAmYXJjbmV0X25ldGRldl9vcHM7CiAJZGV2LT5oZWFkZXJfb3BzID0gJmFyY25ldF9oZWFkZXJfb3BzOwogCWRldi0+aGFyZF9oZWFkZXJfbGVuID0gc2l6ZW9mKHN0cnVjdCBhcmNoZHIpOwogCWRldi0+bXR1ID0gY2hvb3NlX210dSgpOwpAQCAtMzM5LDE4ICszNDUsOSBAQAogCS8qIE5ldy1zdHlsZSBmbGFncy4gKi8KIAlkZXYtPmZsYWdzID0gSUZGX0JST0FEQ0FTVDsKIAotCS8qCi0JICogUHV0IGluIHRoaXMgc3R1ZmYgaGVyZSwgc28gd2UgZG9uJ3QgaGF2ZSB0byBleHBvcnQgdGhlIHN5bWJvbHMgdG8KLQkgKiB0aGUgY2hpcHNldCBkcml2ZXJzLgotCSAqLwotCWRldi0+b3BlbiA9IGFyY25ldF9vcGVuOwotCWRldi0+c3RvcCA9IGFyY25ldF9jbG9zZTsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGFyY25ldF9zZW5kX3BhY2tldDsKLQlkZXYtPnR4X3RpbWVvdXQgPSBhcmNuZXRfdGltZW91dDsKLQlkZXYtPmdldF9zdGF0cyA9IGFyY25ldF9nZXRfc3RhdHM7CiB9CiAKLXN0cnVjdCBuZXRfZGV2aWNlICphbGxvY19hcmNkZXYoY2hhciAqbmFtZSkKK3N0cnVjdCBuZXRfZGV2aWNlICphbGxvY19hcmNkZXYoY29uc3QgY2hhciAqbmFtZSkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCkBAIC0zNzIsNyArMzY5LDcgQEAKICAqIHRoYXQgInNob3VsZCIgb25seSBuZWVkIHRvIGJlIHNldCBvbmNlIGF0IGJvb3QsIHNvIHRoYXQgdGhlcmUgaXMKICAqIG5vbi1yZWJvb3Qgd2F5IHRvIHJlY292ZXIgaWYgc29tZXRoaW5nIGdvZXMgd3JvbmcuCiAgKi8KLXN0YXRpYyBpbnQgYXJjbmV0X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK2ludCBhcmNuZXRfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBhcmNuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgY291bnQsIG5ld210dSwgZXJyb3I7CkBAIC0zODMsNyArMzgwLDYgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlCVUdMVkwoRF9QUk9UTykgewotCQlpbnQgY291bnQ7CiAJCUJVR01TRyhEX1BST1RPLCAicHJvdG9jb2wgbWFwIChkZWZhdWx0IGlzICclYycpOiAiLAogCQkgICAgICAgYXJjX3Byb3RvX2RlZmF1bHQtPnN1ZmZpeCk7CiAJCWZvciAoY291bnQgPSAwOyBjb3VudCA8IDI1NjsgY291bnQrKykKQEAgLTQ3Miw3ICs0NjgsNyBAQAogCiAKIC8qIFRoZSBpbnZlcnNlIHJvdXRpbmUgdG8gYXJjbmV0X29wZW4gLSBzaHV0cyBkb3duIHRoZSBjYXJkLiAqLwotc3RhdGljIGludCBhcmNuZXRfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK2ludCBhcmNuZXRfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgYXJjbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CiAKQEAgLTU4Myw4ICs1NzksOCBAQAogCX0gZWxzZSB7CiAJCUJVR01TRyhEX05PUk1BTCwKIAkJICAgICAgICJJIGRvbid0IHVuZGVyc3RhbmQgZXRoZXJuZXQgcHJvdG9jb2wgJVhoIGFkZHJlc3NlcyFcbiIsIHR5cGUpOwotCQlscC0+c3RhdHMudHhfZXJyb3JzKys7Ci0JCWxwLT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CiAJfQogCiAJLyogaWYgd2UgY291bGRuJ3QgcmVzb2x2ZSB0aGUgYWRkcmVzcy4uLiBnaXZlIHVwLiAqLwpAQCAtNjAxLDcgKzU5Nyw3IEBACiAKIAogLyogQ2FsbGVkIGJ5IHRoZSBrZXJuZWwgaW4gb3JkZXIgdG8gdHJhbnNtaXQgYSBwYWNrZXQuICovCi1zdGF0aWMgaW50IGFyY25ldF9zZW5kX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoraW50IGFyY25ldF9zZW5kX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBhcmNuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgYXJjaGRyICpwa3Q7CkBAIC02NDUsNyArNjQxLDcgQEAKIAkJICAgICFwcm90by0+YWNrX3R4KSB7CiAJCQkvKiBkb25lIHJpZ2h0IGF3YXkgYW5kIHdlIGRvbid0IHdhbnQgdG8gYWNrbm93bGVkZ2UKIAkJCSAgIHRoZSBwYWNrYWdlIGxhdGVyIC0gZm9yZ2V0IGFib3V0IGl0IG5vdyAqLwotCQkJbHAtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOworCQkJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKIAkJCWZyZWVza2IgPSAxOwogCQl9IGVsc2UgewogCQkJLyogZG8gaXQgdGhlICdzcGxpdCcgd2F5ICovCkBAIC03MDksNyArNzA1LDcgQEAKIAkvKiBzdGFydCBzZW5kaW5nICovCiAJQUNPTU1BTkQoVFhjbWQgfCAobHAtPmN1cl90eCA8PCAzKSk7CiAKLQlscC0+c3RhdHMudHhfcGFja2V0cysrOworCWRldi0+c3RhdHMudHhfcGFja2V0cysrOwogCWxwLT5sYXN0dHJhbnNfZGVzdCA9IGxwLT5sYXN0bG9hZF9kZXN0OwogCWxwLT5sYXN0bG9hZF9kZXN0ID0gMDsKIAlscC0+ZXhjbmFrX3BlbmRpbmcgPSAwOwpAQCAtNzIwLDcgKzcxNiw3IEBACiAKIAogLyogQ2FsbGVkIGJ5IHRoZSBrZXJuZWwgd2hlbiB0cmFuc21pdCB0aW1lcyBvdXQgKi8KLXN0YXRpYyB2b2lkIGFyY25ldF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit2b2lkIGFyY25ldF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgYXJjbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CkBAIC03MzIsMTEgKzcyOCwxMSBAQAogCQltc2cgPSAiIC0gbWlzc2VkIElSUT8iOwogCX0gZWxzZSB7CiAJCW1zZyA9ICIiOwotCQlscC0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOwogCQlscC0+dGltZWRfb3V0ID0gMTsKIAkJQUNPTU1BTkQoTk9UWGNtZCB8IChscC0+Y3VyX3R4IDw8IDMpKTsKIAl9Ci0JbHAtPnN0YXRzLnR4X2Vycm9ycysrOworCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CiAKIAkvKiBtYWtlIHN1cmUgd2UgZGlkbid0IG1pc3MgYSBUWCBvciBhIEVYQyBOQUsgSVJRICovCiAJQUlOVE1BU0soMCk7CkBAIC04NjUsOCArODYxLDggQEAKIAkJCQkJCSAgICAgICAidHJhbnNtaXQgd2FzIG5vdCBhY2tub3dsZWRnZWQhICIKIAkJCQkJCSAgICAgICAiKHN0YXR1cz0lWGgsIGRlc3Q9JTAyWGgpXG4iLAogCQkJCQkJICAgICAgIHN0YXR1cywgbHAtPmxhc3R0cmFuc19kZXN0KTsKLQkJCQkJCWxwLT5zdGF0cy50eF9lcnJvcnMrKzsKLQkJCQkJCWxwLT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOworCQkJCQkJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKKwkJCQkJCWRldi0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKIAkJCQkJfSBlbHNlIHsKIAkJCQkJCUJVR01TRyhEX0RVUklORywKIAkJCQkJCSAgICAgICAiYnJvYWRjYXN0IHdhcyBub3QgYWNrbm93bGVkZ2VkOyB0aGF0J3Mgbm9ybWFsICIKQEAgLTkwNSw3ICs5MDEsNyBAQAogCQkJCWlmICh0eGJ1ZiAhPSAtMSkgewogCQkJCQlpZiAobHAtPm91dGdvaW5nLnByb3RvLT5jb250aW51ZV90eChkZXYsIHR4YnVmKSkgewogCQkJCQkJLyogdGhhdCB3YXMgdGhlIGxhc3Qgc2VnbWVudCAqLwotCQkJCQkJbHAtPnN0YXRzLnR4X2J5dGVzICs9IGxwLT5vdXRnb2luZy5za2ItPmxlbjsKKwkJCQkJCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gbHAtPm91dGdvaW5nLnNrYi0+bGVuOwogCQkJCQkJaWYoIWxwLT5vdXRnb2luZy5wcm90by0+YWNrX3R4KQogCQkJCQkJICB7CiAJCQkJCQkgICAgZGV2X2tmcmVlX3NrYl9pcnEobHAtPm91dGdvaW5nLnNrYik7CkBAIC05MzAsNyArOTI2LDcgQEAKIAkJfQogCQlpZiAoc3RhdHVzICYgbHAtPmludG1hc2sgJiBSRUNPTmZsYWcpIHsKIAkJCUFDT01NQU5EKENGTEFHU2NtZCB8IENPTkZJR2NsZWFyKTsKLQkJCWxwLT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOworCQkJZGV2LT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOwogCiAJCQlCVUdNU0coRF9SRUNPTiwgIk5ldHdvcmsgcmVjb25maWd1cmF0aW9uIGRldGVjdGVkIChzdGF0dXM9JVhoKVxuIiwKIAkJCSAgICAgICBzdGF0dXMpOwpAQCAtMTAzOCw4ICsxMDM0LDggQEAKIAkgICAgICAgIiglZCs0IGJ5dGVzKVxuIiwKIAkgICAgICAgYnVmbnVtLCBwa3QuaGFyZC5zb3VyY2UsIHBrdC5oYXJkLmRlc3QsIGxlbmd0aCk7CiAKLQlscC0+c3RhdHMucnhfcGFja2V0cysrOwotCWxwLT5zdGF0cy5yeF9ieXRlcyArPSBsZW5ndGggKyBBUkNfSERSX1NJWkU7CisJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBsZW5ndGggKyBBUkNfSERSX1NJWkU7CiAKIAkvKiBjYWxsIHRoZSByaWdodCByZWNlaXZlciBmb3IgdGhlIHByb3RvY29sICovCiAJaWYgKGFyY19wcm90b19tYXBbc29mdC0+cHJvdG9dLT5pc19pcCkgewpAQCAtMTA2NywxOCArMTA2Myw2IEBACiB9CiAKIAotCi0vKiAKLSAqIEdldCB0aGUgY3VycmVudCBzdGF0aXN0aWNzLiAgVGhpcyBtYXkgYmUgY2FsbGVkIHdpdGggdGhlIGNhcmQgb3BlbiBvcgotICogY2xvc2VkLgotICovCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmFyY25ldF9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgYXJjbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7Ci0JcmV0dXJuICZscC0+c3RhdHM7Ci19Ci0KLQogc3RhdGljIHZvaWQgbnVsbF9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgYnVmbnVtLAogCQkgICAgc3RydWN0IGFyY2hkciAqcGt0aGRyLCBpbnQgbGVuZ3RoKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXJjbmV0L2NhcG1vZGUuYyBiL2RyaXZlcnMvbmV0L2FyY25ldC9jYXBtb2RlLmMKaW5kZXggMzA1ODBiYi4uMDgzZTIxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXJjbmV0L2NhcG1vZGUuYworKysgYi9kcml2ZXJzL25ldC9hcmNuZXQvY2FwbW9kZS5jCkBAIC0xMTksNyArMTE5LDcgQEAKIAlza2IgPSBhbGxvY19za2IobGVuZ3RoICsgQVJDX0hEUl9TSVpFICsgc2l6ZW9mKGludCksIEdGUF9BVE9NSUMpOwogCWlmIChza2IgPT0gTlVMTCkgewogCQlCVUdNU0coRF9OT1JNQUwsICJNZW1vcnkgc3F1ZWV6ZSwgZHJvcHBpbmcgcGFja2V0LlxuIik7Ci0JCWxwLT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQlyZXR1cm47CiAJfQogCXNrYl9wdXQoc2tiLCBsZW5ndGggKyBBUkNfSERSX1NJWkUgKyBzaXplb2YoaW50KSk7CkBAIC0xNDgsNyArMTQ4LDcgQEAKIAogCUJVR0xWTChEX1NLQikgYXJjbmV0X2R1bXBfc2tiKGRldiwgc2tiLCAicngiKTsKIAotCXNrYi0+cHJvdG9jb2wgPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0FSQ05FVCk7CisJc2tiLT5wcm90b2NvbCA9IGNwdV90b19iZTE2KEVUSF9QX0FSQ05FVCk7CiA7CiAJbmV0aWZfcngoc2tiKTsKIH0KQEAgLTI4Miw3ICsyODIsNyBAQAogICBCVUdNU0coRF9QUk9UTywgIkFja2tub3dsZWRnZSBmb3IgY2FwIHBhY2tldCAleC5cbiIsCiAJICooKGludCopJmFja3BrdC0+c29mdC5jYXAuY29va2llWzBdKSk7CiAKLSAgYWNrc2tiLT5wcm90b2NvbCA9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfQVJDTkVUKTsKKyAgYWNrc2tiLT5wcm90b2NvbCA9IGNwdV90b19iZTE2KEVUSF9QX0FSQ05FVCk7CiAKICAgQlVHTFZMKERfU0tCKSBhcmNuZXRfZHVtcF9za2IoZGV2LCBhY2tza2IsICJhY2tfdHhfcmVjdiIpOwogICBuZXRpZl9yeChhY2tza2IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXJjbmV0L2NvbTIwMDIwLWlzYS5jIGIvZHJpdmVycy9uZXQvYXJjbmV0L2NvbTIwMDIwLWlzYS5jCmluZGV4IGVhNTNhOTQuLmRiMDhmYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FyY25ldC9jb20yMDAyMC1pc2EuYworKysgYi9kcml2ZXJzL25ldC9hcmNuZXQvY29tMjAwMjAtaXNhLmMKQEAgLTE1MSw2ICsxNTEsOCBAQAogCWlmIChub2RlICYmIG5vZGUgIT0gMHhmZikKIAkJZGV2LT5kZXZfYWRkclswXSA9IG5vZGU7CiAKKwlkZXYtPm5ldGRldl9vcHMgPSAmY29tMjAwMjBfbmV0ZGV2X29wczsKKwogCWxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlscC0+YmFja3BsYW5lID0gYmFja3BsYW5lOwogCWxwLT5jbG9ja3AgPSBjbG9ja3AgJiA3OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXJjbmV0L2NvbTIwMDIwLXBjaS5jIGIvZHJpdmVycy9uZXQvYXJjbmV0L2NvbTIwMDIwLXBjaS5jCmluZGV4IDhiNTFmNjMuLmRiZjRkZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FyY25ldC9jb20yMDAyMC1wY2kuYworKysgYi9kcml2ZXJzL25ldC9hcmNuZXQvY29tMjAwMjAtcGNpLmMKQEAgLTcyLDYgKzcyLDkgQEAKIAlkZXYgPSBhbGxvY19hcmNkZXYoZGV2aWNlKTsKIAlpZiAoIWRldikKIAkJcmV0dXJuIC1FTk9NRU07CisKKwlkZXYtPm5ldGRldl9vcHMgPSAmY29tMjAwMjBfbmV0ZGV2X29wczsKKwogCWxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXJjbmV0L2NvbTIwMDIwLmMgYi9kcml2ZXJzL25ldC9hcmNuZXQvY29tMjAwMjAuYwppbmRleCAxMDM2ODgzLi42NTEyNzVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcmNuZXQvY29tMjAwMjAuYworKysgYi9kcml2ZXJzL25ldC9hcmNuZXQvY29tMjAwMjAuYwpAQCAtMTQ5LDYgKzE0OSwxNCBAQAogCXJldHVybiAwOwogfQogCitjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgY29tMjAwMjBfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JPSBhcmNuZXRfb3BlbiwKKwkubmRvX3N0b3AJPSBhcmNuZXRfY2xvc2UsCisJLm5kb19zdGFydF94bWl0ID0gYXJjbmV0X3NlbmRfcGFja2V0LAorCS5uZG9fdHhfdGltZW91dCA9IGFyY25ldF90aW1lb3V0LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gY29tMjAwMjBfc2V0X21jX2xpc3QsCit9OworCiAvKiBTZXQgdXAgdGhlIHN0cnVjdCBuZXRfZGV2aWNlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNhcmQuICBDYWxsZWQgYWZ0ZXIKICAqIHByb2Jpbmcgc3VjY2VlZHMuCiAgKi8KQEAgLTE3MCw4ICsxNzgsNiBAQAogCWxwLT5ody5jb3B5X2Zyb21fY2FyZCA9IGNvbTIwMDIwX2NvcHlfZnJvbV9jYXJkOwogCWxwLT5ody5jbG9zZSA9IGNvbTIwMDIwX2Nsb3NlOwogCi0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBjb20yMDAyMF9zZXRfbWNfbGlzdDsKLQogCWlmICghZGV2LT5kZXZfYWRkclswXSkKIAkJZGV2LT5kZXZfYWRkclswXSA9IGluYihpb2FkZHIgKyBCVVNfQUxJR04qOCk7CS8qIEZJWE1FOiBkbyB0aGlzIHNvbWUgb3RoZXIgd2F5ISAqLwogCkBAIC0zNDIsNiArMzQ4LDcgQEAKICAgICBkZWZpbmVkKENPTkZJR19BUkNORVRfQ09NMjAwMjBfQ1NfTU9EVUxFKQogRVhQT1JUX1NZTUJPTChjb20yMDAyMF9jaGVjayk7CiBFWFBPUlRfU1lNQk9MKGNvbTIwMDIwX2ZvdW5kKTsKK0VYUE9SVF9TWU1CT0woY29tMjAwMjBfbmV0ZGV2X29wcyk7CiAjZW5kaWYKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXJjbmV0L3JmYzEwNTEuYyBiL2RyaXZlcnMvbmV0L2FyY25ldC9yZmMxMDUxLmMKaW5kZXggNDlkMzlhOS4uMDZmOGZhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXJjbmV0L3JmYzEwNTEuYworKysgYi9kcml2ZXJzL25ldC9hcmNuZXQvcmZjMTA1MS5jCkBAIC04OCw3ICs4OCw2IEBACiAgKi8KIHN0YXRpYyBfX2JlMTYgdHlwZV90cmFucyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCBhcmNuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgYXJjaGRyICpwa3QgPSAoc3RydWN0IGFyY2hkciAqKSBza2ItPmRhdGE7CiAJc3RydWN0IGFyY19yZmMxMDUxICpzb2Z0ID0gJnBrdC0+c29mdC5yZmMxMDUxOwogCWludCBoZHJfc2l6ZSA9IEFSQ19IRFJfU0laRSArIFJGQzEwNTFfSERSX1NJWkU7CkBAIC0xMTIsOCArMTExLDggQEAKIAkJcmV0dXJuIGh0b25zKEVUSF9QX0FSUCk7CiAKIAlkZWZhdWx0OgotCQlscC0+c3RhdHMucnhfZXJyb3JzKys7Ci0JCWxwLT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CisJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CisJCWRldi0+c3RhdHMucnhfY3JjX2Vycm9ycysrOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTE0MCw3ICsxMzksNyBAQAogCXNrYiA9IGFsbG9jX3NrYihsZW5ndGggKyBBUkNfSERSX1NJWkUsIEdGUF9BVE9NSUMpOwogCWlmIChza2IgPT0gTlVMTCkgewogCQlCVUdNU0coRF9OT1JNQUwsICJNZW1vcnkgc3F1ZWV6ZSwgZHJvcHBpbmcgcGFja2V0LlxuIik7Ci0JCWxwLT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQlyZXR1cm47CiAJfQogCXNrYl9wdXQoc2tiLCBsZW5ndGggKyBBUkNfSERSX1NJWkUpOwpAQCAtMTY4LDcgKzE2Nyw2IEBACiBzdGF0aWMgaW50IGJ1aWxkX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJdW5zaWduZWQgc2hvcnQgdHlwZSwgdWludDhfdCBkYWRkcikKIHsKLQlzdHJ1Y3QgYXJjbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CiAJaW50IGhkcl9zaXplID0gQVJDX0hEUl9TSVpFICsgUkZDMTA1MV9IRFJfU0laRTsKIAlzdHJ1Y3QgYXJjaGRyICpwa3QgPSAoc3RydWN0IGFyY2hkciAqKSBza2JfcHVzaChza2IsIGhkcl9zaXplKTsKIAlzdHJ1Y3QgYXJjX3JmYzEwNTEgKnNvZnQgPSAmcGt0LT5zb2Z0LnJmYzEwNTE7CkBAIC0xODQsOCArMTgyLDggQEAKIAlkZWZhdWx0OgogCQlCVUdNU0coRF9OT1JNQUwsICJSRkMxMDUxOiBJIGRvbid0IHVuZGVyc3RhbmQgcHJvdG9jb2wgJWQgKCVYaClcbiIsCiAJCSAgICAgICB0eXBlLCB0eXBlKTsKLQkJbHAtPnN0YXRzLnR4X2Vycm9ycysrOwotCQlscC0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOwogCQlyZXR1cm4gMDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FyY25ldC9yZmMxMjAxLmMgYi9kcml2ZXJzL25ldC9hcmNuZXQvcmZjMTIwMS5jCmluZGV4IDIzMDNkM2EuLjc0NTUzMDY1MWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FyY25ldC9yZmMxMjAxLmMKKysrIGIvZHJpdmVycy9uZXQvYXJjbmV0L3JmYzEyMDEuYwpAQCAtOTIsNyArOTIsNiBAQAogewogCXN0cnVjdCBhcmNoZHIgKnBrdCA9IChzdHJ1Y3QgYXJjaGRyICopIHNrYi0+ZGF0YTsKIAlzdHJ1Y3QgYXJjX3JmYzEyMDEgKnNvZnQgPSAmcGt0LT5zb2Z0LnJmYzEyMDE7Ci0Jc3RydWN0IGFyY25ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCWludCBoZHJfc2l6ZSA9IEFSQ19IRFJfU0laRSArIFJGQzEyMDFfSERSX1NJWkU7CiAKIAkvKiBQdWxsIG9mZiB0aGUgYXJjbmV0IGhlYWRlci4gKi8KQEAgLTEyMSw4ICsxMjAsOCBAQAogCWNhc2UgQVJDX1BfTk9WRUxMX0VDOgogCQlyZXR1cm4gaHRvbnMoRVRIX1BfODAyXzMpOwogCWRlZmF1bHQ6Ci0JCWxwLT5zdGF0cy5yeF9lcnJvcnMrKzsKLQkJbHAtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMTcyLDggKzE3MSw4IEBACiAJCQkgaW4tPnNlcXVlbmNlLCBzb2Z0LT5zcGxpdF9mbGFnLCBzb2Z0LT5zZXF1ZW5jZSk7CiAJCQlscC0+cmZjMTIwMS5hYm9ydGVkX3NlcSA9IHNvZnQtPnNlcXVlbmNlOwogCQkJZGV2X2tmcmVlX3NrYl9pcnEoaW4tPnNrYik7Ci0JCQlscC0+c3RhdHMucnhfZXJyb3JzKys7Ci0JCQlscC0+c3RhdHMucnhfbWlzc2VkX2Vycm9ycysrOworCQkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJCWRldi0+c3RhdHMucnhfbWlzc2VkX2Vycm9ycysrOwogCQkJaW4tPnNrYiA9IE5VTEw7CiAJCX0KIAkJaW4tPnNlcXVlbmNlID0gc29mdC0+c2VxdWVuY2U7CkBAIC0xODEsNyArMTgwLDcgQEAKIAkJc2tiID0gYWxsb2Nfc2tiKGxlbmd0aCArIEFSQ19IRFJfU0laRSwgR0ZQX0FUT01JQyk7CiAJCWlmIChza2IgPT0gTlVMTCkgewogCQkJQlVHTVNHKERfTk9STUFMLCAiTWVtb3J5IHNxdWVlemUsIGRyb3BwaW5nIHBhY2tldC5cbiIpOwotCQkJbHAtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQkJcmV0dXJuOwogCQl9CiAJCXNrYl9wdXQoc2tiLCBsZW5ndGggKyBBUkNfSERSX1NJWkUpOwpAQCAtMjEzLDcgKzIxMiw3IEBACiAJCQkJCUJVR01TRyhEX0VYVFJBLAogCQkJCQkgICAgICAgIkFSUCBzb3VyY2UgYWRkcmVzcyB3YXMgMDBoLCBzZXQgdG8gJTAyWGguXG4iLAogCQkJCQkgICAgICAgc2FkZHIpOwotCQkJCQlscC0+c3RhdHMucnhfY3JjX2Vycm9ycysrOworCQkJCQlkZXYtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKIAkJCQkJKmNwdHIgPSBzYWRkcjsKIAkJCQl9IGVsc2UgewogCQkJCQlCVUdNU0coRF9EVVJJTkcsICJBUlAgc291cmNlIGFkZHJlc3MgKCVYaCkgaXMgZmluZS5cbiIsCkBAIC0yMjIsOCArMjIxLDggQEAKIAkJCX0gZWxzZSB7CiAJCQkJQlVHTVNHKERfTk9STUFMLCAiZnVubnktc2hhcGVkIEFSUCBwYWNrZXQuICglWGgsICVYaClcbiIsCiAJCQkJICAgICAgIGFycC0+YXJfaGxuLCBhcnAtPmFyX3Bsbik7Ci0JCQkJbHAtPnN0YXRzLnJ4X2Vycm9ycysrOwotCQkJCWxwLT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CisJCQkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJCQlkZXYtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKIAkJCX0KIAkJfQogCQlCVUdMVkwoRF9TS0IpIGFyY25ldF9kdW1wX3NrYihkZXYsIHNrYiwgInJ4Iik7CkBAIC0yNTcsOCArMjU2LDggQEAKIAkJCSAgICAgICBzb2Z0LT5zcGxpdF9mbGFnKTsKIAkJCWRldl9rZnJlZV9za2JfaXJxKGluLT5za2IpOwogCQkJaW4tPnNrYiA9IE5VTEw7Ci0JCQlscC0+c3RhdHMucnhfZXJyb3JzKys7Ci0JCQlscC0+c3RhdHMucnhfbWlzc2VkX2Vycm9ycysrOworCQkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJCWRldi0+c3RhdHMucnhfbWlzc2VkX2Vycm9ycysrOwogCQkJaW4tPmxhc3RwYWNrZXQgPSBpbi0+bnVtcGFja2V0cyA9IDA7CiAJCX0KIAkJaWYgKHNvZnQtPnNwbGl0X2ZsYWcgJiAxKSB7CS8qIGZpcnN0IHBhY2tldCBpbiBzcGxpdCAqLwpAQCAtMjY5LDggKzI2OCw4IEBACiAJCQkJICAgICAgICIoc3BsaXRmbGFnPSVkLCBzZXE9JWQpXG4iLAogCQkJCSAgICAgICBpbi0+c2VxdWVuY2UsIHNvZnQtPnNwbGl0X2ZsYWcsCiAJCQkJICAgICAgIHNvZnQtPnNlcXVlbmNlKTsKLQkJCQlscC0+c3RhdHMucnhfZXJyb3JzKys7Ci0JCQkJbHAtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMrKzsKKwkJCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOworCQkJCWRldi0+c3RhdHMucnhfbWlzc2VkX2Vycm9ycysrOwogCQkJCWRldl9rZnJlZV9za2JfaXJxKGluLT5za2IpOwogCQkJfQogCQkJaW4tPnNlcXVlbmNlID0gc29mdC0+c2VxdWVuY2U7CkBAIC0yODEsOCArMjgwLDggQEAKIAkJCQlCVUdNU0coRF9FWFRSQSwgImluY29taW5nIHBhY2tldCBtb3JlIHRoYW4gMTYgc2VnbWVudHM7IGRyb3BwaW5nLiAoc3BsaXRmbGFnPSVkKVxuIiwKIAkJCQkgICAgICAgc29mdC0+c3BsaXRfZmxhZyk7CiAJCQkJbHAtPnJmYzEyMDEuYWJvcnRlZF9zZXEgPSBzb2Z0LT5zZXF1ZW5jZTsKLQkJCQlscC0+c3RhdHMucnhfZXJyb3JzKys7Ci0JCQkJbHAtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKKwkJCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOworCQkJCWRldi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOwogCQkJCXJldHVybjsKIAkJCX0KIAkJCWluLT5za2IgPSBza2IgPSBhbGxvY19za2IoNTA4ICogaW4tPm51bXBhY2tldHMgKyBBUkNfSERSX1NJWkUsCkBAIC0yOTAsNyArMjg5LDcgQEAKIAkJCWlmIChza2IgPT0gTlVMTCkgewogCQkJCUJVR01TRyhEX05PUk1BTCwgIihzcGxpdCkgbWVtb3J5IHNxdWVlemUsIGRyb3BwaW5nIHBhY2tldC5cbiIpOwogCQkJCWxwLT5yZmMxMjAxLmFib3J0ZWRfc2VxID0gc29mdC0+c2VxdWVuY2U7Ci0JCQkJbHAtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJCQlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAkJCQlyZXR1cm47CiAJCQl9CiAJCQlza2ItPmRldiA9IGRldjsKQEAgLTMxNCw4ICszMTMsOCBAQAogCQkJCQkgICAgICAgImZpcnN0ISAoc3BsaXRmbGFnPSVkLCBzZXE9JWQsIGFib3J0ZWQ9JWQpXG4iLAogCQkJCQlzb2Z0LT5zcGxpdF9mbGFnLCBzb2Z0LT5zZXF1ZW5jZSwKIAkJCQkJICAgICAgIGxwLT5yZmMxMjAxLmFib3J0ZWRfc2VxKTsKLQkJCQkJbHAtPnN0YXRzLnJ4X2Vycm9ycysrOwotCQkJCQlscC0+c3RhdHMucnhfbWlzc2VkX2Vycm9ycysrOworCQkJCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOworCQkJCQlkZXYtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMrKzsKIAkJCQl9CiAJCQkJcmV0dXJuOwogCQkJfQpAQCAtMzI1LDggKzMyNCw4IEBACiAJCQkJaWYgKHBhY2tldG51bSA8PSBpbi0+bGFzdHBhY2tldCAtIDEpIHsKIAkJCQkJQlVHTVNHKERfRVhUUkEsICJkdXBsaWNhdGUgc3BsaXRwYWNrZXQgaWdub3JlZCEgKHNwbGl0ZmxhZz0lZClcbiIsCiAJCQkJCSAgICAgICBzb2Z0LT5zcGxpdF9mbGFnKTsKLQkJCQkJbHAtPnN0YXRzLnJ4X2Vycm9ycysrOwotCQkJCQlscC0+c3RhdHMucnhfZnJhbWVfZXJyb3JzKys7CisJCQkJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CisJCQkJCWRldi0+c3RhdHMucnhfZnJhbWVfZXJyb3JzKys7CiAJCQkJCXJldHVybjsKIAkJCQl9CiAJCQkJLyogImJhZCIgZHVwbGljYXRlLCBraWxsIHJlYXNzZW1ibHkgKi8KQEAgLTMzNiw4ICszMzUsOCBAQAogCQkJCWxwLT5yZmMxMjAxLmFib3J0ZWRfc2VxID0gc29mdC0+c2VxdWVuY2U7CiAJCQkJZGV2X2tmcmVlX3NrYl9pcnEoaW4tPnNrYik7CiAJCQkJaW4tPnNrYiA9IE5VTEw7Ci0JCQkJbHAtPnN0YXRzLnJ4X2Vycm9ycysrOwotCQkJCWxwLT5zdGF0cy5yeF9taXNzZWRfZXJyb3JzKys7CisJCQkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJCQlkZXYtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMrKzsKIAkJCQlpbi0+bGFzdHBhY2tldCA9IGluLT5udW1wYWNrZXRzID0gMDsKIAkJCQlyZXR1cm47CiAJCQl9CkBAIC00MDQsOCArNDAzLDggQEAKIAlkZWZhdWx0OgogCQlCVUdNU0coRF9OT1JNQUwsICJSRkMxMjAxOiBJIGRvbid0IHVuZGVyc3RhbmQgcHJvdG9jb2wgJWQgKCVYaClcbiIsCiAJCSAgICAgICB0eXBlLCB0eXBlKTsKLQkJbHAtPnN0YXRzLnR4X2Vycm9ycysrOwotCQlscC0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOwogCQlyZXR1cm4gMDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FybS9lcDkzeHhfZXRoLmMgYi9kcml2ZXJzL25ldC9hcm0vZXA5M3h4X2V0aC5jCmluZGV4IDNlYzIwY2MuLmNjNzcwODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FybS9lcDkzeHhfZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvYXJtL2VwOTN4eF9ldGguYwpAQCAtMjk4LDcgKzI5OCw3IEBACiAJCWludCBtb3JlID0gMDsKIAogCQlzcGluX2xvY2tfaXJxKCZlcC0+cnhfbG9jayk7Ci0JCV9fbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCV9fbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJd3JsKGVwLCBSRUdfSU5URU4sIFJFR19JTlRFTl9UWCB8IFJFR19JTlRFTl9SWCk7CiAJCWlmIChlcDkzeHhfaGF2ZV9tb3JlX3J4KGVwKSkgewogCQkJd3JsKGVwLCBSRUdfSU5URU4sIFJFR19JTlRFTl9UWCk7CkBAIC0zMDcsNyArMzA3LDcgQEAKIAkJfQogCQlzcGluX3VubG9ja19pcnEoJmVwLT5yeF9sb2NrKTsKIAotCQlpZiAobW9yZSAmJiBuZXRpZl9yeF9yZXNjaGVkdWxlKG5hcGkpKQorCQlpZiAobW9yZSAmJiBuYXBpX3Jlc2NoZWR1bGUobmFwaSkpCiAJCQlnb3RvIHBvbGxfc29tZV9tb3JlOwogCX0KIApAQCAtNDE1LDkgKzQxNSw5IEBACiAKIAlpZiAoc3RhdHVzICYgUkVHX0lOVFNUU19SWCkgewogCQlzcGluX2xvY2soJmVwLT5yeF9sb2NrKTsKLQkJaWYgKGxpa2VseShuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKCZlcC0+bmFwaSkpKSB7CisJCWlmIChsaWtlbHkobmFwaV9zY2hlZHVsZV9wcmVwKCZlcC0+bmFwaSkpKSB7CiAJCQl3cmwoZXAsIFJFR19JTlRFTiwgUkVHX0lOVEVOX1RYKTsKLQkJCV9fbmV0aWZfcnhfc2NoZWR1bGUoJmVwLT5uYXBpKTsKKwkJCV9fbmFwaV9zY2hlZHVsZSgmZXAtPm5hcGkpOwogCQl9CiAJCXNwaW5fdW5sb2NrKCZlcC0+cnhfbG9jayk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXJtL2l4cDR4eF9ldGguYyBiL2RyaXZlcnMvbmV0L2FybS9peHA0eHhfZXRoLmMKaW5kZXggNWZjZTFkNS4uNWZlMTdkNWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FybS9peHA0eHhfZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvYXJtL2l4cDR4eF9ldGguYwpAQCAtNDczLDcgKzQ3Myw3IEBACiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBldGhfcnhfaXJxXG4iLCBkZXYtPm5hbWUpOwogI2VuZGlmCiAJcW1ncl9kaXNhYmxlX2lycShwb3J0LT5wbGF0LT5yeHEpOwotCW5ldGlmX3J4X3NjaGVkdWxlKCZwb3J0LT5uYXBpKTsKKwluYXBpX3NjaGVkdWxlKCZwb3J0LT5uYXBpKTsKIH0KIAogc3RhdGljIGludCBldGhfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCkBAIC00OTgsMTYgKzQ5OCwxNiBAQAogCiAJCWlmICgobiA9IHF1ZXVlX2dldF9kZXNjKHJ4cSwgcG9ydCwgMCkpIDwgMCkgewogI2lmIERFQlVHX1JYCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGV0aF9wb2xsIG5ldGlmX3J4X2NvbXBsZXRlXG4iLAorCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBldGhfcG9sbCBuYXBpX2NvbXBsZXRlXG4iLAogCQkJICAgICAgIGRldi0+bmFtZSk7CiAjZW5kaWYKLQkJCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJCXFtZ3JfZW5hYmxlX2lycShyeHEpOwogCQkJaWYgKCFxbWdyX3N0YXRfZW1wdHkocnhxKSAmJgotCQkJICAgIG5ldGlmX3J4X3Jlc2NoZWR1bGUobmFwaSkpIHsKKwkJCSAgICBuYXBpX3Jlc2NoZWR1bGUobmFwaSkpIHsKICNpZiBERUJVR19SWAogCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogZXRoX3BvbGwiCi0JCQkJICAgICAgICIgbmV0aWZfcnhfcmVzY2hlZHVsZSBzdWNjZXNzZWRcbiIsCisJCQkJICAgICAgICIgbmFwaV9yZXNjaGVkdWxlIHN1Y2Nlc3NlZFxuIiwKIAkJCQkgICAgICAgZGV2LT5uYW1lKTsKICNlbmRpZgogCQkJCXFtZ3JfZGlzYWJsZV9pcnEocnhxKTsKQEAgLTEwMzYsNyArMTAzNiw3IEBACiAJfQogCXBvcnRzX29wZW4rKzsKIAkvKiB3ZSBtYXkgYWxyZWFkeSBoYXZlIFJYIGRhdGEsIGVuYWJsZXMgSVJRICovCi0JbmV0aWZfcnhfc2NoZWR1bGUoJnBvcnQtPm5hcGkpOworCW5hcGlfc2NoZWR1bGUoJnBvcnQtPm5hcGkpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcm0va3M4Njk1bmV0LmMgYi9kcml2ZXJzL25ldC9hcm0va3M4Njk1bmV0LmMKaW5kZXggZjNhMTI3NC4uMzVjZDI2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXJtL2tzODY5NW5ldC5jCisrKyBiL2RyaXZlcnMvbmV0L2FybS9rczg2OTVuZXQuYwpAQCAtMTA1OSw3ICsxMDU5LDcgQEAKIHsKIAlzdHJsY3B5KGluZm8tPmRyaXZlciwgTU9EVUxFTkFNRSwgc2l6ZW9mKGluZm8tPmRyaXZlcikpOwogCXN0cmxjcHkoaW5mby0+dmVyc2lvbiwgTU9EVUxFVkVSU0lPTiwgc2l6ZW9mKGluZm8tPnZlcnNpb24pKTsKLQlzdHJsY3B5KGluZm8tPmJ1c19pbmZvLCBuZGV2LT5kZXYucGFyZW50LT5idXNfaWQsCisJc3RybGNweShpbmZvLT5idXNfaW5mbywgZGV2X25hbWUobmRldi0+ZGV2LnBhcmVudCksCiAJCXNpemVvZihpbmZvLT5idXNfaW5mbykpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hdDE3MDAuYyBiL2RyaXZlcnMvbmV0L2F0MTcwMC5jCmluZGV4IDcyZWE2ZTMuLmNlZDcwNzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2F0MTcwMC5jCisrKyBiL2RyaXZlcnMvbmV0L2F0MTcwMC5jCkBAIC04MjgsNyArODI4LDYgQEAKIAlzdHJ1Y3QgbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CiAJdW5zaWduZWQgY2hhciBtY19maWx0ZXJbOF07CQkgLyogTXVsdGljYXN0IGhhc2ggZmlsdGVyICovCiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgaTsKIAogCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKIAkJbWVtc2V0KG1jX2ZpbHRlciwgMHhmZiwgc2l6ZW9mKG1jX2ZpbHRlcikpOwpAQCAtODU3LDYgKzg1Niw3IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSAoJmxwLT5sb2NrLCBmbGFncyk7CiAJaWYgKG1lbWNtcChtY19maWx0ZXIsIGxwLT5tY19maWx0ZXIsIHNpemVvZihtY19maWx0ZXIpKSkgeworCQlpbnQgaTsKIAkJaW50IHNhdmVkX2JhbmsgPSBpbncoaW9hZGRyICsgQ09ORklHXzApOwogCQkvKiBTd2l0Y2ggdG8gYmFuayAxIGFuZCBzZXQgdGhlIG11bHRpY2FzdCB0YWJsZS4gKi8KIAkJb3V0dygoc2F2ZWRfYmFuayAmIH4weDBDMDApIHwgMHgwNDgwLCBpb2FkZHIgKyBDT05GSUdfMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hdGwxYy9hdGwxYy5oIGIvZHJpdmVycy9uZXQvYXRsMWMvYXRsMWMuaAppbmRleCBhYzExYjg0Li5lMTY1OGVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hdGwxYy9hdGwxYy5oCisrKyBiL2RyaXZlcnMvbmV0L2F0bDFjL2F0bDFjLmgKQEAgLTQ1LDcgKzQ1LDYgQEAKICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3RjcC5oPgotI2luY2x1ZGUgPGxpbnV4L21paS5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KICNpbmNsdWRlIDxsaW51eC9pZl92bGFuLmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hdGwxZS9hdGwxZS5oIGIvZHJpdmVycy9uZXQvYXRsMWUvYXRsMWUuaAppbmRleCBjNDk1NTBkLi4yYmY2M2I0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hdGwxZS9hdGwxZS5oCisrKyBiL2RyaXZlcnMvbmV0L2F0bDFlL2F0bDFlLmgKQEAgLTQ0OCw3ICs0NDgsNyBAQAogCS8qIEFsbCBEZXNjcmlwdG9yIG1lbW9yeSAqLwogCWRtYV9hZGRyX3QgIAlyaW5nX2RtYTsKIAl2b2lkICAgICAJKnJpbmdfdmlyX2FkZHI7Ci0JaW50ICAgICAgICAgICAgIHJpbmdfc2l6ZTsKKwl1MzIgICAgICAgICAgICAgcmluZ19zaXplOwogCiAJc3RydWN0IGF0bDFlX3R4X3JpbmcgdHhfcmluZzsKIAlzdHJ1Y3QgYXRsMWVfcnhfcmluZyByeF9yaW5nOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXRsMWUvYXRsMWVfbWFpbi5jIGIvZHJpdmVycy9uZXQvYXRsMWUvYXRsMWVfbWFpbi5jCmluZGV4IGJiOTA5NGQuLmM3NTg4ODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2F0bDFlL2F0bDFlX21haW4uYworKysgYi9kcml2ZXJzL25ldC9hdGwxZS9hdGwxZV9tYWluLmMKQEAgLTEzMjYsOSArMTMyNiw5IEBACiAJCQlBVF9XUklURV9SRUcoaHcsIFJFR19JTVIsCiAJCQkJICAgICBJTVJfTk9STUFMX01BU0sgJiB+SVNSX1JYX0VWRU5UKTsKIAkJCUFUX1dSSVRFX0ZMVVNIKGh3KTsKLQkJCWlmIChsaWtlbHkobmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgKKwkJCWlmIChsaWtlbHkobmFwaV9zY2hlZHVsZV9wcmVwKAogCQkJCSAgICZhZGFwdGVyLT5uYXBpKSkpCi0JCQkJX19uZXRpZl9yeF9zY2hlZHVsZSgmYWRhcHRlci0+bmFwaSk7CisJCQkJX19uYXBpX3NjaGVkdWxlKCZhZGFwdGVyLT5uYXBpKTsKIAkJfQogCX0gd2hpbGUgKC0tbWF4X2ludHMgPiAwKTsKIAkvKiByZS1lbmFibGUgSW50ZXJydXB0Ki8KQEAgLTE1MTQsNyArMTUxNCw3IEBACiAJLyogSWYgbm8gVHggYW5kIG5vdCBlbm91Z2ggUnggd29yayBkb25lLCBleGl0IHRoZSBwb2xsaW5nIG1vZGUgKi8KIAlpZiAod29ya19kb25lIDwgYnVkZ2V0KSB7CiBxdWl0X3BvbGxpbmc6Ci0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCQlpbXJfZGF0YSA9IEFUX1JFQURfUkVHKCZhZGFwdGVyLT5odywgUkVHX0lNUik7CiAJCUFUX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIFJFR19JTVIsIGltcl9kYXRhIHwgSVNSX1JYX0VWRU5UKTsKIAkJLyogdGVzdCBkZWJ1ZyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXRsMWUvYXRsMWVfcGFyYW0uYyBiL2RyaXZlcnMvbmV0L2F0bDFlL2F0bDFlX3BhcmFtLmMKaW5kZXggZjcyYWJiMy4uYjNiZTU5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXRsMWUvYXRsMWVfcGFyYW0uYworKysgYi9kcml2ZXJzL25ldC9hdGwxZS9hdGwxZV9wYXJhbS5jCkBAIC00MSw3ICs0MSw3IEBACiAKICNkZWZpbmUgQVRMMUVfUEFSQU0oeCwgZGVzYykgXAogCXN0YXRpYyBpbnQgX19kZXZpbml0ZGF0YSB4W0FUTDFFX01BWF9OSUMgKyAxXSA9IEFUTDFFX1BBUkFNX0lOSVQ7IFwKLQlzdGF0aWMgaW50IG51bV8jI3g7IFwKKwlzdGF0aWMgdW5zaWduZWQgaW50IG51bV8jI3g7IFwKIAltb2R1bGVfcGFyYW1fYXJyYXlfbmFtZWQoeCwgeCwgaW50LCAmbnVtXyMjeCwgMCk7IFwKIAlNT0RVTEVfUEFSTV9ERVNDKHgsIGRlc2MpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hdGx4L2F0bDEuYyBiL2RyaXZlcnMvbmV0L2F0bHgvYXRsMS5jCmluZGV4IGMwY2VlZTAuLjQzZmMxYjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2F0bHgvYXRsMS5jCisrKyBiL2RyaXZlcnMvbmV0L2F0bHgvYXRsMS5jCkBAIC0xMDUsNyArMTA1LDcgQEAKICAqIERlZmF1bHQgVmFsdWU6IDEwMCAoMjAwdXMpCiAgKi8KIHN0YXRpYyBpbnQgX19kZXZpbml0ZGF0YSBpbnRfbW9kX3RpbWVyW0FUTDFfTUFYX05JQysxXSA9IEFUTDFfUEFSQU1fSU5JVDsKLXN0YXRpYyBpbnQgbnVtX2ludF9tb2RfdGltZXI7CitzdGF0aWMgdW5zaWduZWQgaW50IG51bV9pbnRfbW9kX3RpbWVyOwogbW9kdWxlX3BhcmFtX2FycmF5X25hbWVkKGludF9tb2RfdGltZXIsIGludF9tb2RfdGltZXIsIGludCwKIAkmbnVtX2ludF9tb2RfdGltZXIsIDApOwogTU9EVUxFX1BBUk1fREVTQyhpbnRfbW9kX3RpbWVyLCAiSW50ZXJydXB0IG1vZGVyYXRvciB0aW1lciIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXRseC9hdGwyLmMgYi9kcml2ZXJzL25ldC9hdGx4L2F0bDIuYwppbmRleCBiYzM5NDQ5Li45ZmUwNmMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hdGx4L2F0bDIuYworKysgYi9kcml2ZXJzL25ldC9hdGx4L2F0bDIuYwpAQCAtMjg1NCw3ICsyODU0LDcgQEAKICNlbHNlCiAjZGVmaW5lIEFUTDJfUEFSQU0oWCwgZGVzYykgXAogICAgIHN0YXRpYyBpbnQgX19kZXZpbml0ZGF0YSBYW0FUTDJfTUFYX05JQysxXSA9IEFUTDJfUEFSQU1fSU5JVDsgXAotICAgIHN0YXRpYyBpbnQgbnVtXyMjWCA9IDA7IFwKKyAgICBzdGF0aWMgdW5zaWduZWQgaW50IG51bV8jI1g7IFwKICAgICBtb2R1bGVfcGFyYW1fYXJyYXlfbmFtZWQoWCwgWCwgaW50LCAmbnVtXyMjWCwgMCk7IFwKICAgICBNT0RVTEVfUEFSTV9ERVNDKFgsIGRlc2MpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hdTEwMDBfZXRoLmMgYi9kcml2ZXJzL25ldC9hdTEwMDBfZXRoLmMKaW5kZXggOWM4NzViYi4uNDI3NGU0YWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2F1MTAwMF9ldGguYworKysgYi9kcml2ZXJzL25ldC9hdTEwMDBfZXRoLmMKQEAgLTgxLDI0ICs4MSw2IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oRFJWX0RFU0MpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi0vLyBwcm90b3R5cGVzCi1zdGF0aWMgdm9pZCBoYXJkX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKik7Ci1zdGF0aWMgdm9pZCBlbmFibGVfcnhfdHgoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKiBhdTEwMDBfcHJvYmUoaW50IHBvcnRfbnVtKTsKLXN0YXRpYyBpbnQgYXUxMDAwX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKik7Ci1zdGF0aWMgaW50IGF1MTAwMF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICopOwotc3RhdGljIGludCBhdTEwMDBfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKik7Ci1zdGF0aWMgaW50IGF1MTAwMF90eChzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3QgbmV0X2RldmljZSAqKTsKLXN0YXRpYyBpbnQgYXUxMDAwX3J4KHN0cnVjdCBuZXRfZGV2aWNlICopOwotc3RhdGljIGlycXJldHVybl90IGF1MTAwMF9pbnRlcnJ1cHQoaW50LCB2b2lkICopOwotc3RhdGljIHZvaWQgYXUxMDAwX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKik7Ci1zdGF0aWMgdm9pZCBzZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqKTsKLXN0YXRpYyBpbnQgYXUxMDAwX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICosIHN0cnVjdCBpZnJlcSAqLCBpbnQpOwotc3RhdGljIGludCBhdTEwMDBfbWRpb19yZWFkKHN0cnVjdCBuZXRfZGV2aWNlICosIGludCwgaW50KTsKLXN0YXRpYyB2b2lkIGF1MTAwMF9tZGlvX3dyaXRlKHN0cnVjdCBuZXRfZGV2aWNlICosIGludCwgaW50LCB1MTYpOwotc3RhdGljIHZvaWQgYXUxMDAwX2FkanVzdF9saW5rKHN0cnVjdCBuZXRfZGV2aWNlICopOwotc3RhdGljIHZvaWQgZW5hYmxlX21hYyhzdHJ1Y3QgbmV0X2RldmljZSAqLCBpbnQpOwotCiAvKgogICogVGhlb3J5IG9mIG9wZXJhdGlvbgogICoKQEAgLTE4OCw2ICsxNzAsMjYgQEAKICMgZXJyb3IgTUFDMC1hc3NvY2lhdGVkIFBIWSBhdHRhY2hlZCAybmQgTUFDcyBNSUkgYnVzIG5vdCBzdXBwb3J0ZWQgeWV0CiAjZW5kaWYKIAorc3RhdGljIHZvaWQgZW5hYmxlX21hYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgZm9yY2VfcmVzZXQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cCA9IG5ldGRldl9wcml2KGRldik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYXVwLT5sb2NrLCBmbGFncyk7CisKKwlpZihmb3JjZV9yZXNldCB8fCAoIWF1cC0+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+bWFjX2luX3VzZSAmJgorCQkJICAgICgocmVhZGwoYmFzZSArIE52UmVnVHJhbnNtaXR0ZXJDb250cm9sKSAmIE5WUkVHX1hNSVRDVExfU1lOQ19NQVNLKSA9PQorCQkJICAgICBOVlJFR19YTUlUQ1RMX1NZTkNfUEhZX0lOSVQpKSB7CisJCQkJLyogcGh5IGlzIGluaXRlZCBieSBtZ210IHVuaXQgKi8KKwkJCQlwaHlpbml0aWFsaXplZCA9IDE7CisJCQkJZHByaW50ayhLRVJOX0lORk8gIiVzOiBQaHkgYWxyZWFkeSBpbml0aWFsaXplZCBieSBtZ210IHVuaXQuXG4iLAorCQkJCQlwY2lfbmFtZShwY2lfZGV2KSk7CisJCQl9IGVsc2UgeworCQkJCS8qIHdlIG5lZWQgdG8gaW5pdCB0aGUgcGh5ICovCiAJCQl9CiAJCX0KIAl9CkBAIC01OTQ1LDYgKzYwNjMsOCBAQAogCS8qIHJlc3RvcmUgYW55IHBoeSByZWxhdGVkIGNoYW5nZXMgKi8KIAludl9yZXN0b3JlX3BoeShkZXYpOwogCisJbnZfbWdtdF9yZWxlYXNlX3NlbWEoZGV2KTsKKwogCS8qIGZyZWUgYWxsIHN0cnVjdHVyZXMgKi8KIAlmcmVlX3JpbmdzKGRldik7CiAJaW91bm1hcChnZXRfaHdiYXNlKGRldikpOwpAQCAtNTk5NSw2ICs2MTE1LDggQEAKIAlmb3IgKGkgPSAwO2kgPD0gbnAtPnJlZ2lzdGVyX3NpemUvc2l6ZW9mKHUzMik7IGkrKykKIAkJd3JpdGVsKG5wLT5zYXZlZF9jb25maWdfc3BhY2VbaV0sIGJhc2UraSpzaXplb2YodTMyKSk7CiAKKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIE5WX01TSV9QUklWX09GRlNFVCwgTlZfTVNJX1BSSVZfVkFMVUUpOworCiAJbmV0aWZfZGV2aWNlX2F0dGFjaChkZXYpOwogCWlmIChuZXRpZl9ydW5uaW5nKGRldikpIHsKIAkJcmMgPSBudl9vcGVuKGRldik7CkBAIC02MDY4LDExNSArNjE5MCwxMTUgQEAKIAl9LAogCXsJLyogQ0s4MDQgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfOCksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19TVEFUSVNUSUNTX1YxfERFVl9ORUVEX1RYX0xJTUlULAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfU1RBVElTVElDU19WMXxERVZfTkVFRF9UWF9MSU1JVCwKIAl9LAogCXsJLyogQ0s4MDQgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfOSksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19TVEFUSVNUSUNTX1YxfERFVl9ORUVEX1RYX0xJTUlULAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfU1RBVElTVElDU19WMXxERVZfTkVFRF9UWF9MSU1JVCwKIAl9LAogCXsJLyogTUNQMDQgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMTApLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfU1RBVElTVElDU19WMXxERVZfTkVFRF9UWF9MSU1JVCwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1NUQVRJU1RJQ1NfVjF8REVWX05FRURfVFhfTElNSVQsCiAJfSwKIAl7CS8qIE1DUDA0IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzExKSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1NUQVRJU1RJQ1NfVjF8REVWX05FRURfVFhfTElNSVQsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19TVEFUSVNUSUNTX1YxfERFVl9ORUVEX1RYX0xJTUlULAogCX0sCiAJewkvKiBNQ1A1MSBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8xMiksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19TVEFUSVNUSUNTX1YxLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfU1RBVElTVElDU19WMSwKIAl9LAogCXsJLyogTUNQNTEgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMTMpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfU1RBVElTVElDU19WMSwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1NUQVRJU1RJQ1NfVjEsCiAJfSwKIAl7CS8qIE1DUDU1IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzE0KSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1ZMQU58REVWX0hBU19NU0l8REVWX0hBU19NU0lfWHxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9ORUVEX1RYX0xJTUlULAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfVkxBTnxERVZfSEFTX01TSXxERVZfSEFTX01TSV9YfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX05FRURfVFhfTElNSVQsCiAJfSwKIAl7CS8qIE1DUDU1IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzE1KSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1ZMQU58REVWX0hBU19NU0l8REVWX0hBU19NU0lfWHxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9ORUVEX1RYX0xJTUlULAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfVkxBTnxERVZfSEFTX01TSXxERVZfSEFTX01TSV9YfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX05FRURfVFhfTElNSVQsCiAJfSwKIAl7CS8qIE1DUDYxIEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzE2KSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUiwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUiwKIAl9LAogCXsJLyogTUNQNjEgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMTcpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSLAogCX0sCiAJewkvKiBNQ1A2MSBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8xOCksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFIsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFIsCiAJfSwKIAl7CS8qIE1DUDYxIEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzE5KSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUiwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUiwKIAl9LAogCXsJLyogTUNQNjUgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMjApLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9ORUVEX1RYX0xJTUlUfERFVl9ORUVEX1RYX0xJTUlUfERFVl9IQVNfR0VBUl9NT0RFLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9ORUVEX1RYX0xJTUlUfERFVl9ORUVEX1RYX0xJTUlUfERFVl9IQVNfR0VBUl9NT0RFLAogCX0sCiAJewkvKiBNQ1A2NSBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8yMSksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX05FRURfVFhfTElNSVR8REVWX0hBU19HRUFSX01PREUsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX05FRURfVFhfTElNSVR8REVWX0hBU19HRUFSX01PREUsCiAJfSwKIAl7CS8qIE1DUDY1IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzIyKSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfTkVFRF9UWF9MSU1JVHxERVZfSEFTX0dFQVJfTU9ERSwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfTkVFRF9UWF9MSU1JVHxERVZfSEFTX0dFQVJfTU9ERSwKIAl9LAogCXsJLyogTUNQNjUgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMjMpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9ORUVEX1RYX0xJTUlUfERFVl9IQVNfR0VBUl9NT0RFLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9ORUVEX1RYX0xJTUlUfERFVl9IQVNfR0VBUl9NT0RFLAogCX0sCiAJewkvKiBNQ1A2NyBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8yNCksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19HRUFSX01PREUsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19HRUFSX01PREUsCiAJfSwKIAl7CS8qIE1DUDY3IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzI1KSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0dFQVJfTU9ERSwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0dFQVJfTU9ERSwKIAl9LAogCXsJLyogTUNQNjcgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMjYpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfR0VBUl9NT0RFLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfR0VBUl9NT0RFLAogCX0sCiAJewkvKiBNQ1A2NyBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8yNyksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19HRUFSX01PREUsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19HRUFSX01PREUsCiAJfSwKIAl7CS8qIE1DUDczIEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzI4KSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0NPTExJU0lPTl9GSVh8REVWX0hBU19HRUFSX01PREUsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19DT0xMSVNJT05fRklYfERFVl9IQVNfR0VBUl9NT0RFLAogCX0sCiAJewkvKiBNQ1A3MyBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8yOSksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19DT0xMSVNJT05fRklYfERFVl9IQVNfR0VBUl9NT0RFLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfQ09MTElTSU9OX0ZJWHxERVZfSEFTX0dFQVJfTU9ERSwKIAl9LAogCXsJLyogTUNQNzMgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMzApLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfQ09MTElTSU9OX0ZJWHxERVZfSEFTX0dFQVJfTU9ERSwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0NPTExJU0lPTl9GSVh8REVWX0hBU19HRUFSX01PREUsCiAJfSwKIAl7CS8qIE1DUDczIEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzMxKSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0NPTExJU0lPTl9GSVh8REVWX0hBU19HRUFSX01PREUsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19DT0xMSVNJT05fRklYfERFVl9IQVNfR0VBUl9NT0RFLAogCX0sCiAJewkvKiBNQ1A3NyBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8zMiksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19NU0l8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjJ8REVWX0hBU19TVEFUSVNUSUNTX1YzfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0NPTExJU0lPTl9GSVh8REVWX05FRURfVFhfTElNSVR8REVWX0hBU19HRUFSX01PREUsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19NU0l8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjJ8REVWX0hBU19TVEFUSVNUSUNTX1YzfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0NPTExJU0lPTl9GSVh8REVWX05FRURfVFhfTElNSVR8REVWX0hBU19HRUFSX01PREUsCiAJfSwKIAl7CS8qIE1DUDc3IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzMzKSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX01TSXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMnxERVZfSEFTX1NUQVRJU1RJQ1NfVjN8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfQ09MTElTSU9OX0ZJWHxERVZfTkVFRF9UWF9MSU1JVHxERVZfSEFTX0dFQVJfTU9ERSwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX01TSXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMnxERVZfSEFTX1NUQVRJU1RJQ1NfVjN8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfQ09MTElTSU9OX0ZJWHxERVZfTkVFRF9UWF9MSU1JVHxERVZfSEFTX0dFQVJfTU9ERSwKIAl9LAogCXsJLyogTUNQNzcgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMzQpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfTVNJfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YyfERFVl9IQVNfU1RBVElTVElDU19WM3xERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19DT0xMSVNJT05fRklYfERFVl9ORUVEX1RYX0xJTUlUfERFVl9IQVNfR0VBUl9NT0RFLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfTVNJfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YyfERFVl9IQVNfU1RBVElTVElDU19WM3xERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19DT0xMSVNJT05fRklYfERFVl9ORUVEX1RYX0xJTUlUfERFVl9IQVNfR0VBUl9NT0RFLAogCX0sCiAJewkvKiBNQ1A3NyBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8zNSksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19NU0l8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjJ8REVWX0hBU19TVEFUSVNUSUNTX1YzfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0NPTExJU0lPTl9GSVh8REVWX05FRURfVFhfTElNSVR8REVWX0hBU19HRUFSX01PREUsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19NU0l8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjJ8REVWX0hBU19TVEFUSVNUSUNTX1YzfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0NPTExJU0lPTl9GSVh8REVWX05FRURfVFhfTElNSVR8REVWX0hBU19HRUFSX01PREUsCiAJfSwKIAl7CS8qIE1DUDc5IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzM2KSwKQEAgLTYxODQsMTUgKzYzMDYsMTUgQEAKIAl9LAogCXsJLyogTUNQNzkgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMzcpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfTVNJfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YzfERFVl9IQVNfU1RBVElTVElDU19WM3xERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19DT0xMSVNJT05fRklYfERFVl9ORUVEX1RYX0xJTUlUfERFVl9IQVNfR0VBUl9NT0RFLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfTVNJfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YzfERFVl9IQVNfU1RBVElTVElDU19WM3xERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19DT0xMSVNJT05fRklYfERFVl9ORUVEX1RYX0xJTUlUfERFVl9IQVNfR0VBUl9NT0RFLAogCX0sCiAJewkvKiBNQ1A3OSBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8zOCksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19NU0l8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjN8REVWX0hBU19TVEFUSVNUSUNTX1YzfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0NPTExJU0lPTl9GSVh8REVWX05FRURfVFhfTElNSVR8REVWX0hBU19HRUFSX01PREUsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19NU0l8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjN8REVWX0hBU19TVEFUSVNUSUNTX1YzfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0NPTExJU0lPTl9GSVh8REVWX05FRURfVFhfTElNSVR8REVWX0hBU19HRUFSX01PREUsCiAJfSwKIAl7CS8qIE1DUDc5IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzM5KSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX01TSXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WM3xERVZfSEFTX1NUQVRJU1RJQ1NfVjN8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfQ09MTElTSU9OX0ZJWHxERVZfTkVFRF9UWF9MSU1JVHxERVZfSEFTX0dFQVJfTU9ERSwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX01TSXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WM3xERVZfSEFTX1NUQVRJU1RJQ1NfVjN8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfQ09MTElTSU9OX0ZJWHxERVZfTkVFRF9UWF9MSU1JVHxERVZfSEFTX0dFQVJfTU9ERSwKIAl9LAogCXswLH0sCiB9OwpAQCAtNjIyMCw3ICs2MzQyLDcgQEAKIG1vZHVsZV9wYXJhbShtYXhfaW50ZXJydXB0X3dvcmssIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKG1heF9pbnRlcnJ1cHRfd29yaywgImZvcmNlZGV0aCBtYXhpbXVtIGV2ZW50cyBoYW5kbGVkIHBlciBpbnRlcnJ1cHQiKTsKIG1vZHVsZV9wYXJhbShvcHRpbWl6YXRpb25fbW9kZSwgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0Mob3B0aW1pemF0aW9uX21vZGUsICJJbiB0aHJvdWdocHV0IG1vZGUgKDApLCBldmVyeSB0eCAmIHJ4IHBhY2tldCB3aWxsIGdlbmVyYXRlIGFuIGludGVycnVwdC4gSW4gQ1BVIG1vZGUgKDEpLCBpbnRlcnJ1cHRzIGFyZSBjb250cm9sbGVkIGJ5IGEgdGltZXIuIik7CitNT0RVTEVfUEFSTV9ERVNDKG9wdGltaXphdGlvbl9tb2RlLCAiSW4gdGhyb3VnaHB1dCBtb2RlICgwKSwgZXZlcnkgdHggJiByeCBwYWNrZXQgd2lsbCBnZW5lcmF0ZSBhbiBpbnRlcnJ1cHQuIEluIENQVSBtb2RlICgxKSwgaW50ZXJydXB0cyBhcmUgY29udHJvbGxlZCBieSBhIHRpbWVyLiBJbiBkeW5hbWljIG1vZGUgKDIpLCB0aGUgbW9kZSB0b2dnbGVzIGJldHdlZW4gdGhyb3VnaHB1dCBhbmQgQ1BVIG1vZGUgYmFzZWQgb24gbmV0d29yayBsb2FkLiIpOwogbW9kdWxlX3BhcmFtKHBvbGxfaW50ZXJ2YWwsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKHBvbGxfaW50ZXJ2YWwsICJJbnRlcnZhbCBkZXRlcm1pbmVzIGhvdyBmcmVxdWVudCB0aW1lciBpbnRlcnJ1cHQgaXMgZ2VuZXJhdGVkIGJ5IFsodGltZV9pbl9taWNyb19zZWNzICogMTAwKSAvICgyXjEwKV0uIE1pbiBpcyAwIGFuZCBNYXggaXMgNjU1MzUuIik7CiBtb2R1bGVfcGFyYW0obXNpLCBpbnQsIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZnNfZW5ldC9mc19lbmV0LW1haW4uYyBiL2RyaXZlcnMvbmV0L2ZzX2VuZXQvZnNfZW5ldC1tYWluLmMKaW5kZXggY2U5MDBlNS4uYjAzN2NlOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZzX2VuZXQvZnNfZW5ldC1tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvZnNfZW5ldC9mc19lbmV0LW1haW4uYwpAQCAtMjA5LDcgKzIwOSw3IEBACiAKIAlpZiAocmVjZWl2ZWQgPCBidWRnZXQpIHsKIAkJLyogZG9uZSAqLwotCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJKCpmZXAtPm9wcy0+bmFwaV9lbmFibGVfcngpKGRldik7CiAJfQogCXJldHVybiByZWNlaXZlZDsKQEAgLTQ3OCw3ICs0NzgsNyBAQAogCQkJCS8qIE5PVEU6IGl0IGlzIHBvc3NpYmxlIGZvciBGQ0NzIGluIE5BUEkgbW9kZSAgICAqLwogCQkJCS8qIHRvIHN1Ym1pdCBhIHNwdXJpb3VzIGludGVycnVwdCB3aGlsZSBpbiBwb2xsICAqLwogCQkJCWlmIChuYXBpX29rKQotCQkJCQlfX25ldGlmX3J4X3NjaGVkdWxlKCZmZXAtPm5hcGkpOworCQkJCQlfX25hcGlfc2NoZWR1bGUoJmZlcC0+bmFwaSk7CiAJCQl9CiAJCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZnNsX3BxX21kaW8uYyBiL2RyaXZlcnMvbmV0L2ZzbF9wcV9tZGlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjMwNzlhNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2ZzbF9wcV9tZGlvLmMKQEAgLTAsMCArMSw0NjggQEAKKy8qCisgKiBGcmVlc2NhbGUgUG93ZXJRVUlDQyBFdGhlcm5ldCBEcml2ZXIgLS0gTUlJTSBidXMgaW1wbGVtZW50YXRpb24KKyAqIFByb3ZpZGVzIEJ1cyBpbnRlcmZhY2UgZm9yIE1JSU0gcmVncworICoKKyAqIEF1dGhvcjogQW5keSBGbGVtaW5nIDxhZmxlbWluZ0BmcmVlc2NhbGUuY29tPgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA0LDIwMDggRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqCisgKiBCYXNlZCBvbiBnaWFuZmFyX21paS5jIGFuZCB1Y2NfZ2V0aF9taWkuYyAoTGkgWWFuZywgS2ltIFBoaWxsaXBzKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgorI2luY2x1ZGUgPGxpbnV4L21paS5oPgorI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKworI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS91Y2MuaD4KKworI2luY2x1ZGUgImdpYW5mYXIuaCIKKyNpbmNsdWRlICJmc2xfcHFfbWRpby5oIgorCisvKgorICogV3JpdGUgdmFsdWUgdG8gdGhlIFBIWSBhdCBtaWlfaWQgYXQgcmVnaXN0ZXIgcmVnbnVtLAorICogb24gdGhlIGJ1cyBhdHRhY2hlZCB0byB0aGUgbG9jYWwgaW50ZXJmYWNlLCB3aGljaCBtYXkgYmUgZGlmZmVyZW50IGZyb20gdGhlCisgKiBnZW5lcmljIG1kaW8gYnVzICh0aWVkIHRvIGEgc2luZ2xlIGludGVyZmFjZSksIHdhaXRpbmcgdW50aWwgdGhlIHdyaXRlIGlzCisgKiBkb25lIGJlZm9yZSByZXR1cm5pbmcuIFRoaXMgaXMgaGVscGZ1bCBpbiBwcm9ncmFtbWluZyBpbnRlcmZhY2VzIGxpa2UKKyAqIHRoZSBUQkkgd2hpY2ggY29udHJvbCBpbnRlcmZhY2VzIGxpa2Ugb25jaGlwIFNFUkRFUyBhbmQgYXJlIGFsd2F5cyB0aWVkIHRvCisgKiB0aGUgbG9jYWwgbWRpbyBwaW5zLCB3aGljaCBtYXkgbm90IGJlIHRoZSBzYW1lIGFzIHN5c3RlbSBtZGlvIGJ1cywgdXNlZCBmb3IKKyAqIGNvbnRyb2xsaW5nIHRoZSBleHRlcm5hbCBQSFlzLCBmb3IgZXhhbXBsZS4KKyAqLworaW50IGZzbF9wcV9sb2NhbF9tZGlvX3dyaXRlKHN0cnVjdCBmc2xfcHFfbWRpbyBfX2lvbWVtICpyZWdzLCBpbnQgbWlpX2lkLAorCQlpbnQgcmVnbnVtLCB1MTYgdmFsdWUpCit7CisJLyogU2V0IHRoZSBQSFkgYWRkcmVzcyBhbmQgdGhlIHJlZ2lzdGVyIGFkZHJlc3Mgd2Ugd2FudCB0byB3cml0ZSAqLworCW91dF9iZTMyKCZyZWdzLT5taWltYWRkLCAobWlpX2lkIDw8IDgpIHwgcmVnbnVtKTsKKworCS8qIFdyaXRlIG91dCB0aGUgdmFsdWUgd2Ugd2FudCAqLworCW91dF9iZTMyKCZyZWdzLT5taWltY29uLCB2YWx1ZSk7CisKKwkvKiBXYWl0IGZvciB0aGUgdHJhbnNhY3Rpb24gdG8gZmluaXNoICovCisJd2hpbGUgKGluX2JlMzIoJnJlZ3MtPm1paW1pbmQpICYgTUlJTUlORF9CVVNZKQorCQljcHVfcmVsYXgoKTsKKworCXJldHVybiAwOworfQorCisvKgorICogUmVhZCB0aGUgYnVzIGZvciBQSFkgYXQgYWRkciBtaWlfaWQsIHJlZ2lzdGVyIHJlZ251bSwgYW5kCisgKiByZXR1cm4gdGhlIHZhbHVlLiAgQ2xlYXJzIG1paW1jb20gZmlyc3QuICBBbGwgUEhZIG9wZXJhdGlvbgorICogZG9uZSBvbiB0aGUgYnVzIGF0dGFjaGVkIHRvIHRoZSBsb2NhbCBpbnRlcmZhY2UsCisgKiB3aGljaCBtYXkgYmUgZGlmZmVyZW50IGZyb20gdGhlIGdlbmVyaWMgbWRpbyBidXMKKyAqIFRoaXMgaXMgaGVscGZ1bCBpbiBwcm9ncmFtbWluZyBpbnRlcmZhY2VzIGxpa2UKKyAqIHRoZSBUQkkgd2hpY2gsIGluIHR1cm4sIGNvbnRyb2wgaW50ZXJmYWNlcyBsaWtlIG9uY2hpcCBTRVJERVMKKyAqIGFuZCBhcmUgYWx3YXlzIHRpZWQgdG8gdGhlIGxvY2FsIG1kaW8gcGlucywgd2hpY2ggbWF5IG5vdCBiZSB0aGUKKyAqIHNhbWUgYXMgc3lzdGVtIG1kaW8gYnVzLCB1c2VkIGZvciBjb250cm9sbGluZyB0aGUgZXh0ZXJuYWwgUEhZcywgZm9yIGVnLgorICovCitpbnQgZnNsX3BxX2xvY2FsX21kaW9fcmVhZChzdHJ1Y3QgZnNsX3BxX21kaW8gX19pb21lbSAqcmVncywKKwkJaW50IG1paV9pZCwgaW50IHJlZ251bSkKK3sKKwl1MTYgdmFsdWU7CisKKwkvKiBTZXQgdGhlIFBIWSBhZGRyZXNzIGFuZCB0aGUgcmVnaXN0ZXIgYWRkcmVzcyB3ZSB3YW50IHRvIHJlYWQgKi8KKwlvdXRfYmUzMigmcmVncy0+bWlpbWFkZCwgKG1paV9pZCA8PCA4KSB8IHJlZ251bSk7CisKKwkvKiBDbGVhciBtaWltY29tLCBhbmQgdGhlbiBpbml0aWF0ZSBhIHJlYWQgKi8KKwlvdXRfYmUzMigmcmVncy0+bWlpbWNvbSwgMCk7CisJb3V0X2JlMzIoJnJlZ3MtPm1paW1jb20sIE1JSV9SRUFEX0NPTU1BTkQpOworCisJLyogV2FpdCBmb3IgdGhlIHRyYW5zYWN0aW9uIHRvIGZpbmlzaCAqLworCXdoaWxlIChpbl9iZTMyKCZyZWdzLT5taWltaW5kKSAmIChNSUlNSU5EX05PVFZBTElEIHwgTUlJTUlORF9CVVNZKSkKKwkJY3B1X3JlbGF4KCk7CisKKwkvKiBHcmFiIHRoZSB2YWx1ZSBvZiB0aGUgcmVnaXN0ZXIgZnJvbSBtaWltc3RhdCAqLworCXZhbHVlID0gaW5fYmUzMigmcmVncy0+bWlpbXN0YXQpOworCisJcmV0dXJuIHZhbHVlOworfQorCisvKgorICogV3JpdGUgdmFsdWUgdG8gdGhlIFBIWSBhdCBtaWlfaWQgYXQgcmVnaXN0ZXIgcmVnbnVtLAorICogb24gdGhlIGJ1cywgd2FpdGluZyB1bnRpbCB0aGUgd3JpdGUgaXMgZG9uZSBiZWZvcmUgcmV0dXJuaW5nLgorICovCitpbnQgZnNsX3BxX21kaW9fd3JpdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IG1paV9pZCwgaW50IHJlZ251bSwgdTE2IHZhbHVlKQoreworCXN0cnVjdCBmc2xfcHFfbWRpbyBfX2lvbWVtICpyZWdzID0gKHZvaWQgX19pb21lbSAqKWJ1cy0+cHJpdjsKKworCS8qIFdyaXRlIHRvIHRoZSBsb2NhbCBNSUkgcmVncyAqLworCXJldHVybihmc2xfcHFfbG9jYWxfbWRpb193cml0ZShyZWdzLCBtaWlfaWQsIHJlZ251bSwgdmFsdWUpKTsKK30KKworLyoKKyAqIFJlYWQgdGhlIGJ1cyBmb3IgUEhZIGF0IGFkZHIgbWlpX2lkLCByZWdpc3RlciByZWdudW0sIGFuZAorICogcmV0dXJuIHRoZSB2YWx1ZS4gIENsZWFycyBtaWltY29tIGZpcnN0LgorICovCitpbnQgZnNsX3BxX21kaW9fcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgbWlpX2lkLCBpbnQgcmVnbnVtKQoreworCXN0cnVjdCBmc2xfcHFfbWRpbyBfX2lvbWVtICpyZWdzID0gKHZvaWQgX19pb21lbSAqKWJ1cy0+cHJpdjsKKworCS8qIFJlYWQgdGhlIGxvY2FsIE1JSSByZWdzICovCisJcmV0dXJuKGZzbF9wcV9sb2NhbF9tZGlvX3JlYWQocmVncywgbWlpX2lkLCByZWdudW0pKTsKK30KKworLyogUmVzZXQgdGhlIE1JSU0gcmVnaXN0ZXJzLCBhbmQgd2FpdCBmb3IgdGhlIGJ1cyB0byBmcmVlICovCitzdGF0aWMgaW50IGZzbF9wcV9tZGlvX3Jlc2V0KHN0cnVjdCBtaWlfYnVzICpidXMpCit7CisJc3RydWN0IGZzbF9wcV9tZGlvIF9faW9tZW0gKnJlZ3MgPSAodm9pZCBfX2lvbWVtICopYnVzLT5wcml2OworCWludCB0aW1lb3V0ID0gUEhZX0lOSVRfVElNRU9VVDsKKworCW11dGV4X2xvY2soJmJ1cy0+bWRpb19sb2NrKTsKKworCS8qIFJlc2V0IHRoZSBtYW5hZ2VtZW50IGludGVyZmFjZSAqLworCW91dF9iZTMyKCZyZWdzLT5taWltY2ZnLCBNSUlNQ0ZHX1JFU0VUKTsKKworCS8qIFNldHVwIHRoZSBNSUkgTWdtdCBjbG9jayBzcGVlZCAqLworCW91dF9iZTMyKCZyZWdzLT5taWltY2ZnLCBNSUlNQ0ZHX0lOSVRfVkFMVUUpOworCisJLyogV2FpdCB1bnRpbCB0aGUgYnVzIGlzIGZyZWUgKi8KKwl3aGlsZSAoKGluX2JlMzIoJnJlZ3MtPm1paW1pbmQpICYgTUlJTUlORF9CVVNZKSAmJiB0aW1lb3V0LS0pCisJCWNwdV9yZWxheCgpOworCisJbXV0ZXhfdW5sb2NrKCZidXMtPm1kaW9fbG9jayk7CisKKwlpZiAodGltZW91dCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogVGhlIE1JSSBCdXMgaXMgc3R1Y2shXG4iLAorCQkJCWJ1cy0+bmFtZSk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIEFsbG9jYXRlIGFuIGFycmF5IHdoaWNoIHByb3ZpZGVzIGlycSAjcyBmb3IgZWFjaCBQSFkgb24gdGhlIGdpdmVuIGJ1cyAqLworc3RhdGljIGludCAqY3JlYXRlX2lycV9tYXAoc3RydWN0IGRldmljZV9ub2RlICpucCkKK3sKKwlpbnQgKmlycXM7CisJaW50IGk7CisJc3RydWN0IGRldmljZV9ub2RlICpjaGlsZCA9IE5VTEw7CisKKwlpcnFzID0ga2NhbGxvYyhQSFlfTUFYX0FERFIsIHNpemVvZihpbnQpLCBHRlBfS0VSTkVMKTsKKworCWlmICghaXJxcykKKwkJcmV0dXJuIE5VTEw7CisKKwlmb3IgKGkgPSAwOyBpIDwgUEhZX01BWF9BRERSOyBpKyspCisJCWlycXNbaV0gPSBQSFlfUE9MTDsKKworCXdoaWxlICgoY2hpbGQgPSBvZl9nZXRfbmV4dF9jaGlsZChucCwgY2hpbGQpKSAhPSBOVUxMKSB7CisJCWludCBpcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChjaGlsZCwgMCk7CisJCWNvbnN0IHUzMiAqaWQ7CisKKwkJaWYgKGlycSA9PSBOT19JUlEpCisJCQljb250aW51ZTsKKworCQlpZCA9IG9mX2dldF9wcm9wZXJ0eShjaGlsZCwgInJlZyIsIE5VTEwpOworCisJCWlmICghaWQpCisJCQljb250aW51ZTsKKworCQlpZiAoKmlkIDwgUEhZX01BWF9BRERSICYmICppZCA+PSAwKQorCQkJaXJxc1sqaWRdID0gaXJxOworCQllbHNlCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogIgorCQkJCQkiJWQgaXMgbm90IGEgdmFsaWQgUEhZIGFkZHJlc3NcbiIsCisJCQkJCW5wLT5mdWxsX25hbWUsICppZCk7CisJfQorCisJcmV0dXJuIGlycXM7Cit9CisKK3ZvaWQgZnNsX3BxX21kaW9fYnVzX25hbWUoY2hhciAqbmFtZSwgc3RydWN0IGRldmljZV9ub2RlICpucCkKK3sKKwljb25zdCB1MzIgKmFkZHI7CisJdTY0IHRhZGRyID0gT0ZfQkFEX0FERFI7CisKKwlhZGRyID0gb2ZfZ2V0X2FkZHJlc3MobnAsIDAsIE5VTEwsIE5VTEwpOworCWlmIChhZGRyKQorCQl0YWRkciA9IG9mX3RyYW5zbGF0ZV9hZGRyZXNzKG5wLCBhZGRyKTsKKworCXNucHJpbnRmKG5hbWUsIE1JSV9CVVNfSURfU0laRSwgIiVzQCVsbHgiLCBucC0+bmFtZSwKKwkJKHVuc2lnbmVkIGxvbmcgbG9uZyl0YWRkcik7Cit9CisKKy8qIFNjYW4gdGhlIGJ1cyBpbiByZXZlcnNlLCBsb29raW5nIGZvciBhbiBlbXB0eSBzcG90ICovCitzdGF0aWMgaW50IGZzbF9wcV9tZGlvX2ZpbmRfZnJlZShzdHJ1Y3QgbWlpX2J1cyAqbmV3X2J1cykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IFBIWV9NQVhfQUREUjsgaSA+IDA7IGktLSkgeworCQl1MzIgcGh5X2lkOworCisJCWlmIChnZXRfcGh5X2lkKG5ld19idXMsIGksICZwaHlfaWQpKQorCQkJcmV0dXJuIC0xOworCisJCWlmIChwaHlfaWQgPT0gMHhmZmZmZmZmZikKKwkJCWJyZWFrOworCX0KKworCXJldHVybiBpOworfQorCisKKyNpZmRlZiBDT05GSUdfR0lBTkZBUgorc3RhdGljIHUzMiBfX2lvbWVtICpnZXRfZ2Zhcl90YmlwYShzdHJ1Y3QgZnNsX3BxX21kaW8gX19pb21lbSAqcmVncykKK3sKKwlzdHJ1Y3QgZ2ZhciBfX2lvbWVtICplbmV0X3JlZ3M7CisKKwkvKgorCSAqIFRoaXMgaXMgbWlsZGx5IGV2aWwsIGJ1dCBzbyBpcyBvdXIgaGFyZHdhcmUgZm9yIGRvaW5nIHRoaXMuCisJICogQWxzbywgd2UgaGF2ZSB0byBjYXN0IGJhY2sgdG8gc3RydWN0IGdmYXIgYmVjYXVzZSBvZgorCSAqIGRlZmluaXRpb24gd2VpcmRuZXNzIGRvbmUgaW4gZ2lhbmZhci5oLgorCSAqLworCWVuZXRfcmVncyA9IChzdHJ1Y3QgZ2ZhciBfX2lvbWVtICopCisJCSgoY2hhciBfX2lvbWVtICopcmVncyAtIG9mZnNldG9mKHN0cnVjdCBnZmFyLCBnZmFyX21paV9yZWdzKSk7CisKKwlyZXR1cm4gJmVuZXRfcmVncy0+dGJpcGE7Cit9CisjZW5kaWYKKworCisjaWZkZWYgQ09ORklHX1VDQ19HRVRICitzdGF0aWMgaW50IGdldF91Y2NfaWRfZm9yX3JhbmdlKHU2NCBzdGFydCwgdTY0IGVuZCwgdTMyICp1Y2NfaWQpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpucCA9IE5VTEw7CisJaW50IGVyciA9IDA7CisKKwlmb3JfZWFjaF9jb21wYXRpYmxlX25vZGUobnAsIE5VTEwsICJ1Y2NfZ2V0aCIpIHsKKwkJc3RydWN0IHJlc291cmNlIHRlbXByZXM7CisKKwkJZXJyID0gb2ZfYWRkcmVzc190b19yZXNvdXJjZShucCwgMCwgJnRlbXByZXMpOworCQlpZiAoZXJyKQorCQkJY29udGludWU7CisKKwkJLyogaWYgb3VyIG1kaW8gcmVncyBmYWxsIHdpdGhpbiB0aGlzIFVDQyByZWdzIHJhbmdlICovCisJCWlmICgoc3RhcnQgPj0gdGVtcHJlcy5zdGFydCkgJiYgKGVuZCA8PSB0ZW1wcmVzLmVuZCkpIHsKKwkJCS8qIEZpbmQgdGhlIGlkIG9mIHRoZSBVQ0MgKi8KKwkJCWNvbnN0IHUzMiAqaWQ7CisKKwkJCWlkID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAiY2VsbC1pbmRleCIsIE5VTEwpOworCQkJaWYgKCFpZCkgeworCQkJCWlkID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAiZGV2aWNlLWlkIiwgTlVMTCk7CisJCQkJaWYgKCFpZCkKKwkJCQkJY29udGludWU7CisJCQl9CisKKwkJCSp1Y2NfaWQgPSAqaWQ7CisKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwllbHNlCisJCXJldHVybiAtRUlOVkFMOworfQorI2VuZGlmCisKKworc3RhdGljIGludCBmc2xfcHFfbWRpb19wcm9iZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldiwKKwkJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2gpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpucCA9IG9mZGV2LT5ub2RlOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqdGJpOworCXN0cnVjdCBmc2xfcHFfbWRpbyBfX2lvbWVtICpyZWdzOworCXUzMiBfX2lvbWVtICp0YmlwYTsKKwlzdHJ1Y3QgbWlpX2J1cyAqbmV3X2J1czsKKwlpbnQgdGJpYWRkciA9IC0xOworCXU2NCBhZGRyLCBzaXplOworCWludCBlcnIgPSAwOworCisJbmV3X2J1cyA9IG1kaW9idXNfYWxsb2MoKTsKKwlpZiAoTlVMTCA9PSBuZXdfYnVzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW5ld19idXMtPm5hbWUgPSAiRnJlZXNjYWxlIFBvd2VyUVVJQ0MgTUlJIEJ1cyIsCisJbmV3X2J1cy0+cmVhZCA9ICZmc2xfcHFfbWRpb19yZWFkLAorCW5ld19idXMtPndyaXRlID0gJmZzbF9wcV9tZGlvX3dyaXRlLAorCW5ld19idXMtPnJlc2V0ID0gJmZzbF9wcV9tZGlvX3Jlc2V0LAorCWZzbF9wcV9tZGlvX2J1c19uYW1lKG5ld19idXMtPmlkLCBucCk7CisKKwkvKiBTZXQgdGhlIFBIWSBiYXNlIGFkZHJlc3MgKi8KKwlhZGRyID0gb2ZfdHJhbnNsYXRlX2FkZHJlc3MobnAsIG9mX2dldF9hZGRyZXNzKG5wLCAwLCAmc2l6ZSwgTlVMTCkpOworCXJlZ3MgPSBpb3JlbWFwKGFkZHIsIHNpemUpOworCisJaWYgKE5VTEwgPT0gcmVncykgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9mcmVlX2J1czsKKwl9CisKKwluZXdfYnVzLT5wcml2ID0gKHZvaWQgX19mb3JjZSAqKXJlZ3M7CisKKwluZXdfYnVzLT5pcnEgPSBjcmVhdGVfaXJxX21hcChucCk7CisKKwlpZiAoTlVMTCA9PSBuZXdfYnVzLT5pcnEpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfdW5tYXBfcmVnczsKKwl9CisKKwluZXdfYnVzLT5wYXJlbnQgPSAmb2ZkZXYtPmRldjsKKwlkZXZfc2V0X2RydmRhdGEoJm9mZGV2LT5kZXYsIG5ld19idXMpOworCisJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAiZnNsLGdpYW5mYXItbWRpbyIpIHx8CisJCQlvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgImZzbCxnaWFuZmFyLXRiaSIpIHx8CisJCQlvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgImdpYW5mYXIiKSkgeworI2lmZGVmIENPTkZJR19HSUFORkFSCisJCXRiaXBhID0gZ2V0X2dmYXJfdGJpcGEocmVncyk7CisjZWxzZQorCQllcnIgPSAtRU5PREVWOworCQlnb3RvIGVycl9mcmVlX2lycXM7CisjZW5kaWYKKwl9IGVsc2UgaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAiZnNsLHVjYy1tZGlvIikgfHwKKwkJCW9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAidWNjX2dldGhfcGh5IikpIHsKKyNpZmRlZiBDT05GSUdfVUNDX0dFVEgKKwkJdTMyIGlkOworCisJCXRiaXBhID0gJnJlZ3MtPnV0YmlwYXI7CisKKwkJaWYgKChlcnIgPSBnZXRfdWNjX2lkX2Zvcl9yYW5nZShhZGRyLCBhZGRyICsgc2l6ZSwgJmlkKSkpCisJCQlnb3RvIGVycl9mcmVlX2lycXM7CisKKwkJdWNjX3NldF9xZV9tdXhfbWlpX21uZyhpZCAtIDEpOworI2Vsc2UKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBlcnJfZnJlZV9pcnFzOworI2VuZGlmCisJfSBlbHNlIHsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBlcnJfZnJlZV9pcnFzOworCX0KKworCWZvcl9lYWNoX2NoaWxkX29mX25vZGUobnAsIHRiaSkgeworCQlpZiAoIXN0cm5jbXAodGJpLT50eXBlLCAidGJpLXBoeSIsIDgpKQorCQkJYnJlYWs7CisJfQorCisJaWYgKHRiaSkgeworCQljb25zdCB1MzIgKnByb3AgPSBvZl9nZXRfcHJvcGVydHkodGJpLCAicmVnIiwgTlVMTCk7CisKKwkJaWYgKHByb3ApCisJCQl0YmlhZGRyID0gKnByb3A7CisJfQorCisJaWYgKHRiaWFkZHIgPT0gLTEpIHsKKwkJb3V0X2JlMzIodGJpcGEsIDApOworCisJCXRiaWFkZHIgPSBmc2xfcHFfbWRpb19maW5kX2ZyZWUobmV3X2J1cyk7CisJfQorCisJLyoKKwkgKiBXZSBkZWZpbmUgVEJJUEEgYXQgMCB0byBiZSBpbGxlZ2FsLCBvcHRpbmcgdG8gZmFpbCBmb3IgYm9hcmRzIHRoYXQKKwkgKiBoYXZlIFBIWXMgYXQgMS0zMSwgcmF0aGVyIHRoYW4gY2hhbmdlIHRiaXBhIGFuZCByZXNjYW4uCisJICovCisJaWYgKHRiaWFkZHIgPT0gMCkgeworCQllcnIgPSAtRUJVU1k7CisKKwkJZ290byBlcnJfZnJlZV9pcnFzOworCX0KKworCW91dF9iZTMyKHRiaXBhLCB0YmlhZGRyKTsKKworCS8qCisJICogVGhlIFRCSVBIWS1vbmx5IGJ1c2VzIHdpbGwgZmluZCBQSFlzIGF0IGV2ZXJ5IGFkZHJlc3MsCisJICogc28gd2UgbWFzayB0aGVtIGFsbCBidXQgdGhlIFRCSQorCSAqLworCWlmICghb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJmc2wsZ2lhbmZhci1tZGlvIikpCisJCW5ld19idXMtPnBoeV9tYXNrID0gfigxIDw8IHRiaWFkZHIpOworCisJZXJyID0gbWRpb2J1c19yZWdpc3RlcihuZXdfYnVzKTsKKworCWlmIChlcnIpIHsKKwkJcHJpbnRrIChLRVJOX0VSUiAiJXM6IENhbm5vdCByZWdpc3RlciBhcyBNRElPIGJ1c1xuIiwKKwkJCQluZXdfYnVzLT5uYW1lKTsKKwkJZ290byBlcnJfZnJlZV9pcnFzOworCX0KKworCXJldHVybiAwOworCitlcnJfZnJlZV9pcnFzOgorCWtmcmVlKG5ld19idXMtPmlycSk7CitlcnJfdW5tYXBfcmVnczoKKwlpb3VubWFwKHJlZ3MpOworZXJyX2ZyZWVfYnVzOgorCWtmcmVlKG5ld19idXMpOworCisJcmV0dXJuIGVycjsKK30KKworCitzdGF0aWMgaW50IGZzbF9wcV9tZGlvX3JlbW92ZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXZpY2UgPSAmb2ZkZXYtPmRldjsKKwlzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gZGV2X2dldF9kcnZkYXRhKGRldmljZSk7CisKKwltZGlvYnVzX3VucmVnaXN0ZXIoYnVzKTsKKworCWRldl9zZXRfZHJ2ZGF0YShkZXZpY2UsIE5VTEwpOworCisJaW91bm1hcCgodm9pZCBfX2lvbWVtICopYnVzLT5wcml2KTsKKwlidXMtPnByaXYgPSBOVUxMOworCW1kaW9idXNfZnJlZShidXMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGZzbF9wcV9tZGlvX21hdGNoW10gPSB7CisJeworCQkudHlwZSA9ICJtZGlvIiwKKwkJLmNvbXBhdGlibGUgPSAidWNjX2dldGhfcGh5IiwKKwl9LAorCXsKKwkJLnR5cGUgPSAibWRpbyIsCisJCS5jb21wYXRpYmxlID0gImdpYW5mYXIiLAorCX0sCisJeworCQkuY29tcGF0aWJsZSA9ICJmc2wsdWNjLW1kaW8iLAorCX0sCisJeworCQkuY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiLAorCX0sCisJeworCQkuY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIiwKKwl9LAorCXt9LAorfTsKKworc3RhdGljIHN0cnVjdCBvZl9wbGF0Zm9ybV9kcml2ZXIgZnNsX3BxX21kaW9fZHJpdmVyID0geworCS5uYW1lID0gImZzbC1wcV9tZGlvIiwKKwkucHJvYmUgPSBmc2xfcHFfbWRpb19wcm9iZSwKKwkucmVtb3ZlID0gZnNsX3BxX21kaW9fcmVtb3ZlLAorCS5tYXRjaF90YWJsZSA9IGZzbF9wcV9tZGlvX21hdGNoLAorfTsKKworaW50IF9faW5pdCBmc2xfcHFfbWRpb19pbml0KHZvaWQpCit7CisJcmV0dXJuIG9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmZnNsX3BxX21kaW9fZHJpdmVyKTsKK30KKwordm9pZCBmc2xfcHFfbWRpb19leGl0KHZvaWQpCit7CisJb2ZfdW5yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJmZzbF9wcV9tZGlvX2RyaXZlcik7Cit9CitzdWJzeXNfaW5pdGNhbGxfc3luYyhmc2xfcHFfbWRpb19pbml0KTsKK21vZHVsZV9leGl0KGZzbF9wcV9tZGlvX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZnNsX3BxX21kaW8uaCBiL2RyaXZlcnMvbmV0L2ZzbF9wcV9tZGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZkYWQ1MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2ZzbF9wcV9tZGlvLmgKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIEZyZWVzY2FsZSBQb3dlclFVSUNDIE1ESU8gRHJpdmVyIC0tIE1JSSBNYW5hZ2VtZW50IEJ1cyBJbXBsZW1lbnRhdGlvbgorICogRHJpdmVyIGZvciB0aGUgTURJTyBidXMgY29udHJvbGxlciBvbiBGcmVlc2NhbGUgUG93ZXJRVUlDQyBwcm9jZXNzb3JzCisgKgorICogQXV0aG9yOiBBbmR5IEZsZW1pbmcKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNCwyMDA4IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKyNpZm5kZWYgX19GU0xfUFFfTURJT19ICisjZGVmaW5lIF9fRlNMX1BRX01ESU9fSAorCisjZGVmaW5lIE1JSU1JTkRfQlVTWSAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgTUlJTUlORF9OT1RWQUxJRCAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBNSUlNQ0ZHX0lOSVRfVkFMVUUJMHgwMDAwMDAwNworI2RlZmluZSBNSUlNQ0ZHX1JFU0VUICAgICAgICAgICAweDgwMDAwMDAwCisKKyNkZWZpbmUgTUlJX1JFQURfQ09NTUFORCAgICAgICAweDAwMDAwMDAxCisKK3N0cnVjdCBmc2xfcHFfbWRpbyB7CisJdTMyIG1paW1jZmc7CQkvKiBNSUkgbWFuYWdlbWVudCBjb25maWd1cmF0aW9uIHJlZyAqLworCXUzMiBtaWltY29tOwkJLyogTUlJIG1hbmFnZW1lbnQgY29tbWFuZCByZWcgKi8KKwl1MzIgbWlpbWFkZDsJCS8qIE1JSSBtYW5hZ2VtZW50IGFkZHJlc3MgcmVnICovCisJdTMyIG1paW1jb247CQkvKiBNSUkgbWFuYWdlbWVudCBjb250cm9sIHJlZyAqLworCXUzMiBtaWltc3RhdDsJCS8qIE1JSSBtYW5hZ2VtZW50IHN0YXR1cyByZWcgKi8KKwl1MzIgbWlpbWluZDsJCS8qIE1JSSBtYW5hZ2VtZW50IGluZGljYXRpb24gcmVnICovCisJdTggcmVzZXJ2ZWRbMjhdOwkvKiBTcGFjZSBob2xkZXIgKi8KKwl1MzIgdXRiaXBhcjsJCS8qIFRCSSBwaHkgYWRkcmVzcyByZWcgKG9ubHkgb24gVUNDKSAqLworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKworaW50IGZzbF9wcV9tZGlvX3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IG1paV9pZCwgaW50IHJlZ251bSk7CitpbnQgZnNsX3BxX21kaW9fd3JpdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IG1paV9pZCwgaW50IHJlZ251bSwgdTE2IHZhbHVlKTsKK2ludCBmc2xfcHFfbG9jYWxfbWRpb193cml0ZShzdHJ1Y3QgZnNsX3BxX21kaW8gX19pb21lbSAqcmVncywgaW50IG1paV9pZCwKKwkJCSAgaW50IHJlZ251bSwgdTE2IHZhbHVlKTsKK2ludCBmc2xfcHFfbG9jYWxfbWRpb19yZWFkKHN0cnVjdCBmc2xfcHFfbWRpbyBfX2lvbWVtICpyZWdzLCBpbnQgbWlpX2lkLCBpbnQgcmVnbnVtKTsKK2ludCBfX2luaXQgZnNsX3BxX21kaW9faW5pdCh2b2lkKTsKK3ZvaWQgZnNsX3BxX21kaW9fZXhpdCh2b2lkKTsKK3ZvaWQgZnNsX3BxX21kaW9fYnVzX25hbWUoY2hhciAqbmFtZSwgc3RydWN0IGRldmljZV9ub2RlICpucCk7CisjZW5kaWYgLyogRlNMX1BRX01ESU9fSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZ2lhbmZhci5jIGIvZHJpdmVycy9uZXQvZ2lhbmZhci5jCmluZGV4IDk4MzFiM2YuLjlkODFlN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2dpYW5mYXIuYworKysgYi9kcml2ZXJzL25ldC9naWFuZmFyLmMKQEAgLTkzLDcgKzkzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9vZi5oPgogCiAjaW5jbHVkZSAiZ2lhbmZhci5oIgotI2luY2x1ZGUgImdpYW5mYXJfbWlpLmgiCisjaW5jbHVkZSAiZnNsX3BxX21kaW8uaCIKIAogI2RlZmluZSBUWF9USU1FT1VUICAgICAgKDEqSFopCiAjdW5kZWYgQlJJRUZfR0ZBUl9FUlJPUlMKQEAgLTE0MCwxMyArMTQwLDI2IEBACiB2b2lkIGdmYXJfc3RhcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBnZmFyX2NsZWFyX2V4YWN0X21hdGNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgZ2Zhcl9zZXRfbWFjX2Zvcl9hZGRyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBudW0sIHU4ICphZGRyKTsKLQotZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBnZmFyX2V0aHRvb2xfb3BzOworc3RhdGljIGludCBnZmFyX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpOwogCiBNT0RVTEVfQVVUSE9SKCJGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkdpYW5mYXIgRXRoZXJuZXQgRHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZ2Zhcl9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiA9IGdmYXJfZW5ldF9vcGVuLAorCS5uZG9fc3RhcnRfeG1pdCA9IGdmYXJfc3RhcnRfeG1pdCwKKwkubmRvX3N0b3AgPSBnZmFyX2Nsb3NlLAorCS5uZG9fY2hhbmdlX210dSA9IGdmYXJfY2hhbmdlX210dSwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IGdmYXJfc2V0X211bHRpLAorCS5uZG9fdHhfdGltZW91dCA9IGdmYXJfdGltZW91dCwKKwkubmRvX2RvX2lvY3RsID0gZ2Zhcl9pb2N0bCwKKwkubmRvX3ZsYW5fcnhfcmVnaXN0ZXIgPSBnZmFyX3ZsYW5fcnhfcmVnaXN0ZXIsCisjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKKwkubmRvX3BvbGxfY29udHJvbGxlciA9IGdmYXJfbmV0cG9sbCwKKyNlbmRpZgorfTsKKwogLyogUmV0dXJucyAxIGlmIGluY29taW5nIGZyYW1lcyB1c2UgYW4gRkNCICovCiBzdGF0aWMgaW5saW5lIGludCBnZmFyX3VzZXNfZmNiKHN0cnVjdCBnZmFyX3ByaXZhdGUgKnByaXYpCiB7CkBAIC0xNjYsNiArMTc5LDkgQEAKIAlzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gcHJpdi0+bm9kZTsKIAljaGFyIGJ1c19uYW1lW01JSV9CVVNfSURfU0laRV07CisJY29uc3QgdTMyICpzdGFzaDsKKwljb25zdCB1MzIgKnN0YXNoX2xlbjsKKwljb25zdCB1MzIgKnN0YXNoX2lkeDsKIAogCWlmICghbnAgfHwgIW9mX2RldmljZV9pc19hdmFpbGFibGUobnApKQogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTE5NSw2ICsyMTEsMjYgQEAKIAkJfQogCX0KIAorCXN0YXNoID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAiYmQtc3Rhc2giLCBOVUxMKTsKKworCWlmKHN0YXNoKSB7CisJCXByaXYtPmRldmljZV9mbGFncyB8PSBGU0xfR0lBTkZBUl9ERVZfSEFTX0JEX1NUQVNISU5HOworCQlwcml2LT5iZF9zdGFzaF9lbiA9IDE7CisJfQorCisJc3Rhc2hfbGVuID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAicngtc3Rhc2gtbGVuIiwgTlVMTCk7CisKKwlpZiAoc3Rhc2hfbGVuKQorCQlwcml2LT5yeF9zdGFzaF9zaXplID0gKnN0YXNoX2xlbjsKKworCXN0YXNoX2lkeCA9IG9mX2dldF9wcm9wZXJ0eShucCwgInJ4LXN0YXNoLWlkeCIsIE5VTEwpOworCisJaWYgKHN0YXNoX2lkeCkKKwkJcHJpdi0+cnhfc3Rhc2hfaW5kZXggPSAqc3Rhc2hfaWR4OworCisJaWYgKHN0YXNoX2xlbiB8fCBzdGFzaF9pZHgpCisJCXByaXYtPmRldmljZV9mbGFncyB8PSBGU0xfR0lBTkZBUl9ERVZfSEFTX0JVRl9TVEFTSElORzsKKwogCW1hY19hZGRyID0gb2ZfZ2V0X21hY19hZGRyZXNzKG5wKTsKIAlpZiAobWFjX2FkZHIpCiAJCW1lbWNweShkZXYtPmRldl9hZGRyLCBtYWNfYWRkciwgTUFDX0FERFJfTEVOKTsKQEAgLTI1NSw3ICsyOTEsNyBAQAogCQlvZl9ub2RlX3B1dChwaHkpOwogCQlvZl9ub2RlX3B1dChtZGlvKTsKIAotCQlnZmFyX21kaW9fYnVzX25hbWUoYnVzX25hbWUsIG1kaW8pOworCQlmc2xfcHFfbWRpb19idXNfbmFtZShidXNfbmFtZSwgbWRpbyk7CiAJCXNucHJpbnRmKHByaXYtPnBoeV9idXNfaWQsIHNpemVvZihwcml2LT5waHlfYnVzX2lkKSwgIiVzOiUwMngiLAogCQkJCWJ1c19uYW1lLCAqaWQpOwogCX0KQEAgLTMyOSw4ICszNjUsMTAgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlwcml2LT5kZXYgPSBkZXY7CisJcHJpdi0+bmRldiA9IGRldjsKKwlwcml2LT5vZmRldiA9IG9mZGV2OwogCXByaXYtPm5vZGUgPSBvZmRldi0+bm9kZTsKKwlTRVRfTkVUREVWX0RFVihkZXYsICZvZmRldi0+ZGV2KTsKIAogCWVyciA9IGdmYXJfb2ZfaW5pdChkZXYpOwogCkBAIC0zNjksMjEgKzQwNywxMiBAQAogCVNFVF9ORVRERVZfREVWKGRldiwgJm9mZGV2LT5kZXYpOwogCiAJLyogRmlsbCBpbiB0aGUgZGV2IHN0cnVjdHVyZSAqLwotCWRldi0+b3BlbiA9IGdmYXJfZW5ldF9vcGVuOwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gZ2Zhcl9zdGFydF94bWl0OwotCWRldi0+dHhfdGltZW91dCA9IGdmYXJfdGltZW91dDsKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVDsKIAluZXRpZl9uYXBpX2FkZChkZXYsICZwcml2LT5uYXBpLCBnZmFyX3BvbGwsIEdGQVJfREVWX1dFSUdIVCk7Ci0jaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKLQlkZXYtPnBvbGxfY29udHJvbGxlciA9IGdmYXJfbmV0cG9sbDsKLSNlbmRpZgotCWRldi0+c3RvcCA9IGdmYXJfY2xvc2U7Ci0JZGV2LT5jaGFuZ2VfbXR1ID0gZ2Zhcl9jaGFuZ2VfbXR1OwogCWRldi0+bXR1ID0gMTUwMDsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IGdmYXJfc2V0X211bHRpOwogCisJZGV2LT5uZXRkZXZfb3BzID0gJmdmYXJfbmV0ZGV2X29wczsKIAlkZXYtPmV0aHRvb2xfb3BzID0gJmdmYXJfZXRodG9vbF9vcHM7Ci0JZGV2LT5kb19pb2N0bCA9IGdmYXJfaW9jdGw7CiAKIAlpZiAocHJpdi0+ZGV2aWNlX2ZsYWdzICYgRlNMX0dJQU5GQVJfREVWX0hBU19DU1VNKSB7CiAJCXByaXYtPnJ4X2NzdW1fZW5hYmxlID0gMTsKQEAgLTM5MywxMSArNDIyLDggQEAKIAogCXByaXYtPnZsZ3JwID0gTlVMTDsKIAotCWlmIChwcml2LT5kZXZpY2VfZmxhZ3MgJiBGU0xfR0lBTkZBUl9ERVZfSEFTX1ZMQU4pIHsKLQkJZGV2LT52bGFuX3J4X3JlZ2lzdGVyID0gZ2Zhcl92bGFuX3J4X3JlZ2lzdGVyOwotCisJaWYgKHByaXYtPmRldmljZV9mbGFncyAmIEZTTF9HSUFORkFSX0RFVl9IQVNfVkxBTikKIAkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hXX1ZMQU5fVFggfCBORVRJRl9GX0hXX1ZMQU5fUlg7Ci0JfQogCiAJaWYgKHByaXYtPmRldmljZV9mbGFncyAmIEZTTF9HSUFORkFSX0RFVl9IQVNfRVhURU5ERURfSEFTSCkgewogCQlwcml2LT5leHRlbmRlZF9oYXNoID0gMTsKQEAgLTQyNSw3ICs0NTEsNyBAQAogCQlwcml2LT5oYXNoX3dpZHRoID0gODsKIAogCQlwcml2LT5oYXNoX3JlZ3NbMF0gPSAmcHJpdi0+cmVncy0+Z2FkZHIwOwotICAgICAgICAgICAgICAgIHByaXYtPmhhc2hfcmVnc1sxXSA9ICZwcml2LT5yZWdzLT5nYWRkcjE7CisJCXByaXYtPmhhc2hfcmVnc1sxXSA9ICZwcml2LT5yZWdzLT5nYWRkcjE7CiAJCXByaXYtPmhhc2hfcmVnc1syXSA9ICZwcml2LT5yZWdzLT5nYWRkcjI7CiAJCXByaXYtPmhhc2hfcmVnc1szXSA9ICZwcml2LT5yZWdzLT5nYWRkcjM7CiAJCXByaXYtPmhhc2hfcmVnc1s0XSA9ICZwcml2LT5yZWdzLT5nYWRkcjQ7CkBAIC00NjYsNiArNDkyLDkgQEAKIAkJZ290byByZWdpc3Rlcl9mYWlsOwogCX0KIAorCWRldmljZV9pbml0X3dha2V1cCgmZGV2LT5kZXYsCisJCXByaXYtPmRldmljZV9mbGFncyAmIEZTTF9HSUFORkFSX0RFVl9IQVNfTUFHSUNfUEFDS0VUKTsKKwogCS8qIGZpbGwgb3V0IElSUSBudW1iZXIgYW5kIG5hbWUgZmllbGRzICovCiAJbGVuX2Rldm5hbWUgPSBzdHJsZW4oZGV2LT5uYW1lKTsKIAlzdHJuY3B5KCZwcml2LT5pbnRfbmFtZV90eFswXSwgZGV2LT5uYW1lLCBsZW5fZGV2bmFtZSk7CkBAIC01MTEsNyArNTQwLDcgQEAKIAlkZXZfc2V0X2RydmRhdGEoJm9mZGV2LT5kZXYsIE5VTEwpOwogCiAJaW91bm1hcChwcml2LT5yZWdzKTsKLQlmcmVlX25ldGRldihwcml2LT5kZXYpOworCWZyZWVfbmV0ZGV2KHByaXYtPm5kZXYpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC01MjAsNyArNTQ5LDcgQEAKIHN0YXRpYyBpbnQgZ2Zhcl9zdXNwZW5kKHN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YSgmb2ZkZXYtPmRldik7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXYtPmRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+bmRldjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUzMiB0ZW1wdmFsOwogCkBAIC01NjksNyArNTk4LDcgQEAKIHN0YXRpYyBpbnQgZ2Zhcl9yZXN1bWUoc3RydWN0IG9mX2RldmljZSAqb2ZkZXYpCiB7CiAJc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YSgmb2ZkZXYtPmRldik7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXYtPmRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+bmRldjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUzMiB0ZW1wdmFsOwogCWludCBtYWdpY19wYWNrZXQgPSBwcml2LT53b2xfZW4gJiYKQEAgLTgzOCwxMiArODY3LDEyIEBACiAJCWZyZWVfaXJxKHByaXYtPmludGVycnVwdFRyYW5zbWl0LCBkZXYpOwogCQlmcmVlX2lycShwcml2LT5pbnRlcnJ1cHRSZWNlaXZlLCBkZXYpOwogCX0gZWxzZSB7Ci0gCQlmcmVlX2lycShwcml2LT5pbnRlcnJ1cHRUcmFuc21pdCwgZGV2KTsKKwkJZnJlZV9pcnEocHJpdi0+aW50ZXJydXB0VHJhbnNtaXQsIGRldik7CiAJfQogCiAJZnJlZV9za2JfcmVzb3VyY2VzKHByaXYpOwogCi0JZG1hX2ZyZWVfY29oZXJlbnQoJmRldi0+ZGV2LAorCWRtYV9mcmVlX2NvaGVyZW50KCZwcml2LT5vZmRldi0+ZGV2LAogCQkJc2l6ZW9mKHN0cnVjdCB0eGJkOCkqcHJpdi0+dHhfcmluZ19zaXplCiAJCQkrIHNpemVvZihzdHJ1Y3QgcnhiZDgpKnByaXYtPnJ4X3Jpbmdfc2l6ZSwKIAkJCXByaXYtPnR4X2JkX2Jhc2UsCkBAIC04NjUsMTIgKzg5NCwxMiBAQAogCQlpZiAoIXByaXYtPnR4X3NrYnVmZltpXSkKIAkJCWNvbnRpbnVlOwogCi0JCWRtYV91bm1hcF9zaW5nbGUoJnByaXYtPmRldi0+ZGV2LCB0eGJkcC0+YnVmUHRyLAorCQlkbWFfdW5tYXBfc2luZ2xlKCZwcml2LT5vZmRldi0+ZGV2LCB0eGJkcC0+YnVmUHRyLAogCQkJCXR4YmRwLT5sZW5ndGgsIERNQV9UT19ERVZJQ0UpOwogCQl0eGJkcC0+bHN0YXR1cyA9IDA7CiAJCWZvciAoaiA9IDA7IGogPCBza2Jfc2hpbmZvKHByaXYtPnR4X3NrYnVmZltpXSktPm5yX2ZyYWdzOyBqKyspIHsKIAkJCXR4YmRwKys7Ci0JCQlkbWFfdW5tYXBfcGFnZSgmcHJpdi0+ZGV2LT5kZXYsIHR4YmRwLT5idWZQdHIsCisJCQlkbWFfdW5tYXBfcGFnZSgmcHJpdi0+b2ZkZXYtPmRldiwgdHhiZHAtPmJ1ZlB0ciwKIAkJCQkJdHhiZHAtPmxlbmd0aCwgRE1BX1RPX0RFVklDRSk7CiAJCX0KIAkJdHhiZHArKzsKQEAgLTg4Nyw3ICs5MTYsNyBAQAogCWlmKHByaXYtPnJ4X3NrYnVmZiAhPSBOVUxMKSB7CiAJCWZvciAoaSA9IDA7IGkgPCBwcml2LT5yeF9yaW5nX3NpemU7IGkrKykgewogCQkJaWYgKHByaXYtPnJ4X3NrYnVmZltpXSkgewotCQkJCWRtYV91bm1hcF9zaW5nbGUoJnByaXYtPmRldi0+ZGV2LCByeGJkcC0+YnVmUHRyLAorCQkJCWRtYV91bm1hcF9zaW5nbGUoJnByaXYtPm9mZGV2LT5kZXYsIHJ4YmRwLT5idWZQdHIsCiAJCQkJCQlwcml2LT5yeF9idWZmZXJfc2l6ZSwKIAkJCQkJCURNQV9GUk9NX0RFVklDRSk7CiAKQEAgLTk1Myw3ICs5ODIsNyBAQAogCWdmYXJfd3JpdGUoJnJlZ3MtPmltYXNrLCBJTUFTS19JTklUX0NMRUFSKTsKIAogCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGJ1ZmZlciBkZXNjcmlwdG9ycyAqLwotCXZhZGRyID0gKHVuc2lnbmVkIGxvbmcpIGRtYV9hbGxvY19jb2hlcmVudCgmZGV2LT5kZXYsCisJdmFkZHIgPSAodW5zaWduZWQgbG9uZykgZG1hX2FsbG9jX2NvaGVyZW50KCZwcml2LT5vZmRldi0+ZGV2LAogCQkJc2l6ZW9mIChzdHJ1Y3QgdHhiZDgpICogcHJpdi0+dHhfcmluZ19zaXplICsKIAkJCXNpemVvZiAoc3RydWN0IHJ4YmQ4KSAqIHByaXYtPnJ4X3Jpbmdfc2l6ZSwKIAkJCSZhZGRyLCBHRlBfS0VSTkVMKTsKQEAgLTExNjUsNyArMTE5NCw3IEBACiByeF9za2JfZmFpbDoKIAlmcmVlX3NrYl9yZXNvdXJjZXMocHJpdik7CiB0eF9za2JfZmFpbDoKLQlkbWFfZnJlZV9jb2hlcmVudCgmZGV2LT5kZXYsCisJZG1hX2ZyZWVfY29oZXJlbnQoJnByaXYtPm9mZGV2LT5kZXYsCiAJCQlzaXplb2Yoc3RydWN0IHR4YmQ4KSpwcml2LT50eF9yaW5nX3NpemUKIAkJCSsgc2l6ZW9mKHN0cnVjdCByeGJkOCkqcHJpdi0+cnhfcmluZ19zaXplLAogCQkJcHJpdi0+dHhfYmRfYmFzZSwKQEAgLTExODMsNiArMTIxMiw4IEBACiAKIAluYXBpX2VuYWJsZSgmcHJpdi0+bmFwaSk7CiAKKwlza2JfcXVldWVfaGVhZF9pbml0KCZwcml2LT5yeF9yZWN5Y2xlKTsKKwogCS8qIEluaXRpYWxpemUgYSBidW5jaCBvZiByZWdpc3RlcnMgKi8KIAlpbml0X3JlZ2lzdGVycyhkZXYpOwogCkBAIC0xMjAzLDEzICsxMjM0LDI0IEBACiAKIAluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwogCisJZGV2aWNlX3NldF93YWtldXBfZW5hYmxlKCZkZXYtPmRldiwgcHJpdi0+d29sX2VuKTsKKwogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHR4ZmNiICpnZmFyX2FkZF9mY2Ioc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHR4ZmNiICpnZmFyX2FkZF9mY2Ioc3RydWN0IHNrX2J1ZmYgKipza2JwKQogewotCXN0cnVjdCB0eGZjYiAqZmNiID0gKHN0cnVjdCB0eGZjYiAqKXNrYl9wdXNoIChza2IsIEdNQUNfRkNCX0xFTik7CisJc3RydWN0IHR4ZmNiICpmY2I7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9ICpza2JwOwogCisJaWYgKHVubGlrZWx5KHNrYl9oZWFkcm9vbShza2IpIDwgR01BQ19GQ0JfTEVOKSkgeworCQlzdHJ1Y3Qgc2tfYnVmZiAqb2xkX3NrYiA9IHNrYjsKKwkJc2tiID0gc2tiX3JlYWxsb2NfaGVhZHJvb20ob2xkX3NrYiwgR01BQ19GQ0JfTEVOKTsKKwkJaWYgKCFza2IpCisJCQlyZXR1cm4gTlVMTDsKKwkJZGV2X2tmcmVlX3NrYl9hbnkob2xkX3NrYik7CisJfQorCWZjYiA9IChzdHJ1Y3QgdHhmY2IgKilza2JfcHVzaChza2IsIEdNQUNfRkNCX0xFTik7CiAJY2FjaGVhYmxlX21lbXplcm8oZmNiLCBHTUFDX0ZDQl9MRU4pOwogCiAJcmV0dXJuIGZjYjsKQEAgLTEzMTQsNyArMTM1Niw3IEBACiAJCQlpZiAoaSA9PSBucl9mcmFncyAtIDEpCiAJCQkJbHN0YXR1cyB8PSBCRF9MRkxBRyhUWEJEX0xBU1QgfCBUWEJEX0lOVEVSUlVQVCk7CiAKLQkJCWJ1ZmFkZHIgPSBkbWFfbWFwX3BhZ2UoJmRldi0+ZGV2LAorCQkJYnVmYWRkciA9IGRtYV9tYXBfcGFnZSgmcHJpdi0+b2ZkZXYtPmRldiwKIAkJCQkJc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXS5wYWdlLAogCQkJCQlza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldLnBhZ2Vfb2Zmc2V0LAogCQkJCQlsZW5ndGgsCkBAIC0xMzMwLDIzICsxMzcyLDI1IEBACiAKIAkvKiBTZXQgdXAgY2hlY2tzdW1taW5nICovCiAJaWYgKENIRUNLU1VNX1BBUlRJQUwgPT0gc2tiLT5pcF9zdW1tZWQpIHsKLQkJZmNiID0gZ2Zhcl9hZGRfZmNiKHNrYik7Ci0JCWxzdGF0dXMgfD0gQkRfTEZMQUcoVFhCRF9UT0UpOwotCQlnZmFyX3R4X2NoZWNrc3VtKHNrYiwgZmNiKTsKKwkJZmNiID0gZ2Zhcl9hZGRfZmNiKCZza2IpOworCQlpZiAobGlrZWx5KGZjYiAhPSBOVUxMKSkgeworCQkJbHN0YXR1cyB8PSBCRF9MRkxBRyhUWEJEX1RPRSk7CisJCQlnZmFyX3R4X2NoZWNrc3VtKHNrYiwgZmNiKTsKKwkJfQogCX0KIAogCWlmIChwcml2LT52bGdycCAmJiB2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikpIHsKLQkJaWYgKHVubGlrZWx5KE5VTEwgPT0gZmNiKSkgewotCQkJZmNiID0gZ2Zhcl9hZGRfZmNiKHNrYik7CisJCWlmICh1bmxpa2VseShOVUxMID09IGZjYikpCisJCQlmY2IgPSBnZmFyX2FkZF9mY2IoJnNrYik7CisJCWlmIChsaWtlbHkoZmNiICE9IE5VTEwpKSB7CiAJCQlsc3RhdHVzIHw9IEJEX0xGTEFHKFRYQkRfVE9FKTsKKwkJCWdmYXJfdHhfdmxhbihza2IsIGZjYik7CiAJCX0KLQotCQlnZmFyX3R4X3ZsYW4oc2tiLCBmY2IpOwogCX0KIAogCS8qIHNldHVwIHRoZSBUeEJEIGxlbmd0aCBhbmQgYnVmZmVyIHBvaW50ZXIgZm9yIHRoZSBmaXJzdCBCRCAqLwogCXByaXYtPnR4X3NrYnVmZltwcml2LT5za2JfY3VydHhdID0gc2tiOwotCXR4YmRwX3N0YXJ0LT5idWZQdHIgPSBkbWFfbWFwX3NpbmdsZSgmZGV2LT5kZXYsIHNrYi0+ZGF0YSwKKwl0eGJkcF9zdGFydC0+YnVmUHRyID0gZG1hX21hcF9zaW5nbGUoJnByaXYtPm9mZGV2LT5kZXYsIHNrYi0+ZGF0YSwKIAkJCXNrYl9oZWFkbGVuKHNrYiksIERNQV9UT19ERVZJQ0UpOwogCiAJbHN0YXR1cyB8PSBCRF9MRkxBRyhUWEJEX0NSQyB8IFRYQkRfUkVBRFkpIHwgc2tiX2hlYWRsZW4oc2tiKTsKQEAgLTEzOTksNiArMTQ0Myw3IEBACiAKIAluYXBpX2Rpc2FibGUoJnByaXYtPm5hcGkpOwogCisJc2tiX3F1ZXVlX3B1cmdlKCZwcml2LT5yeF9yZWN5Y2xlKTsKIAljYW5jZWxfd29ya19zeW5jKCZwcml2LT5yZXNldF90YXNrKTsKIAlzdG9wX2dmYXIoZGV2KTsKIApAQCAtMTUzMSw3ICsxNTc2LDcgQEAKIHsKIAlzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBnZmFyX3ByaXZhdGUsCiAJCQlyZXNldF90YXNrKTsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+ZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwcml2LT5uZGV2OwogCiAJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfVVApIHsKIAkJc3RvcF9nZmFyKGRldik7CkBAIC0xNTc4LDcgKzE2MjMsNyBAQAogCQkJCShsc3RhdHVzICYgQkRfTEVOR1RIX01BU0spKQogCQkJYnJlYWs7CiAKLQkJZG1hX3VubWFwX3NpbmdsZSgmZGV2LT5kZXYsCisJCWRtYV91bm1hcF9zaW5nbGUoJnByaXYtPm9mZGV2LT5kZXYsCiAJCQkJYmRwLT5idWZQdHIsCiAJCQkJYmRwLT5sZW5ndGgsCiAJCQkJRE1BX1RPX0RFVklDRSk7CkBAIC0xNTg3LDcgKzE2MzIsNyBAQAogCQliZHAgPSBuZXh0X3R4YmQoYmRwLCBiYXNlLCB0eF9yaW5nX3NpemUpOwogCiAJCWZvciAoaSA9IDA7IGkgPCBmcmFnczsgaSsrKSB7Ci0JCQlkbWFfdW5tYXBfcGFnZSgmZGV2LT5kZXYsCisJCQlkbWFfdW5tYXBfcGFnZSgmcHJpdi0+b2ZkZXYtPmRldiwKIAkJCQkJYmRwLT5idWZQdHIsCiAJCQkJCWJkcC0+bGVuZ3RoLAogCQkJCQlETUFfVE9fREVWSUNFKTsKQEAgLTE1OTUsNyArMTY0MCwxNyBAQAogCQkJYmRwID0gbmV4dF90eGJkKGJkcCwgYmFzZSwgdHhfcmluZ19zaXplKTsKIAkJfQogCi0JCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJCS8qCisJCSAqIElmIHRoZXJlJ3Mgcm9vbSBpbiB0aGUgcXVldWUgKGxpbWl0IGl0IHRvIHJ4X2J1ZmZlcl9zaXplKQorCQkgKiB3ZSBhZGQgdGhpcyBza2IgYmFjayBpbnRvIHRoZSBwb29sLCBpZiBpdCdzIHRoZSByaWdodCBzaXplCisJCSAqLworCQlpZiAoc2tiX3F1ZXVlX2xlbigmcHJpdi0+cnhfcmVjeWNsZSkgPCBwcml2LT5yeF9yaW5nX3NpemUgJiYKKwkJCQlza2JfcmVjeWNsZV9jaGVjayhza2IsIHByaXYtPnJ4X2J1ZmZlcl9zaXplICsKKwkJCQkJUlhCVUZfQUxJR05NRU5UKSkKKwkJCV9fc2tiX3F1ZXVlX2hlYWQoJnByaXYtPnJ4X3JlY3ljbGUsIHNrYik7CisJCWVsc2UKKwkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisKIAkJcHJpdi0+dHhfc2tidWZmW3NrYl9kaXJ0eXR4XSA9IE5VTEw7CiAKIAkJc2tiX2RpcnR5dHggPSAoc2tiX2RpcnR5dHggKyAxKSAmCkBAIC0xNjI2LDkgKzE2ODEsOSBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT50eGxvY2ssIGZsYWdzKTsKIAlzcGluX2xvY2soJnByaXYtPnJ4bG9jayk7CiAKLQlpZiAobmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgmcHJpdi0+bmFwaSkpIHsKKwlpZiAobmFwaV9zY2hlZHVsZV9wcmVwKCZwcml2LT5uYXBpKSkgewogCQlnZmFyX3dyaXRlKCZwcml2LT5yZWdzLT5pbWFzaywgSU1BU0tfUlRYX0RJU0FCTEVEKTsKLQkJX19uZXRpZl9yeF9zY2hlZHVsZSgmcHJpdi0+bmFwaSk7CisJCV9fbmFwaV9zY2hlZHVsZSgmcHJpdi0+bmFwaSk7CiAJfSBlbHNlIHsKIAkJLyoKIAkJICogQ2xlYXIgSUVWRU5ULCBzbyBpbnRlcnJ1cHRzIGFyZW4ndCBjYWxsZWQgYWdhaW4KQEAgLTE2NTQsNyArMTcwOSw3IEBACiAJc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJdTMyIGxzdGF0dXM7CiAKLQliZHAtPmJ1ZlB0ciA9IGRtYV9tYXBfc2luZ2xlKCZkZXYtPmRldiwgc2tiLT5kYXRhLAorCWJkcC0+YnVmUHRyID0gZG1hX21hcF9zaW5nbGUoJnByaXYtPm9mZGV2LT5kZXYsIHNrYi0+ZGF0YSwKIAkJCXByaXYtPnJ4X2J1ZmZlcl9zaXplLCBETUFfRlJPTV9ERVZJQ0UpOwogCiAJbHN0YXR1cyA9IEJEX0xGTEFHKFJYQkRfRU1QVFkgfCBSWEJEX0lOVEVSUlVQVCk7CkBAIC0xNjc0LDggKzE3MjksMTAgQEAKIAlzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKIAotCS8qIFdlIGhhdmUgdG8gYWxsb2NhdGUgdGhlIHNrYiwgc28ga2VlcCB0cnlpbmcgdGlsbCB3ZSBzdWNjZWVkICovCi0Jc2tiID0gbmV0ZGV2X2FsbG9jX3NrYihkZXYsIHByaXYtPnJ4X2J1ZmZlcl9zaXplICsgUlhCVUZfQUxJR05NRU5UKTsKKwlza2IgPSBfX3NrYl9kZXF1ZXVlKCZwcml2LT5yeF9yZWN5Y2xlKTsKKwlpZiAoIXNrYikKKwkJc2tiID0gbmV0ZGV2X2FsbG9jX3NrYihkZXYsCisJCQkJcHJpdi0+cnhfYnVmZmVyX3NpemUgKyBSWEJVRl9BTElHTk1FTlQpOwogCiAJaWYgKCFza2IpCiAJCXJldHVybiBOVUxMOwpAQCAtMTgxMiw3ICsxODY5LDcgQEAKIAogCQlza2IgPSBwcml2LT5yeF9za2J1ZmZbcHJpdi0+c2tiX2N1cnJ4XTsKIAotCQlkbWFfdW5tYXBfc2luZ2xlKCZwcml2LT5kZXYtPmRldiwgYmRwLT5idWZQdHIsCisJCWRtYV91bm1hcF9zaW5nbGUoJnByaXYtPm9mZGV2LT5kZXYsIGJkcC0+YnVmUHRyLAogCQkJCXByaXYtPnJ4X2J1ZmZlcl9zaXplLCBETUFfRlJPTV9ERVZJQ0UpOwogCiAJCS8qIFdlIGRyb3AgdGhlIGZyYW1lIGlmIHdlIGZhaWxlZCB0byBhbGxvY2F0ZSBhIG5ldyBidWZmZXIgKi8KQEAgLTE4MjMsNyArMTg4MCw3IEBACiAJCQlpZiAodW5saWtlbHkoIW5ld3NrYikpCiAJCQkJbmV3c2tiID0gc2tiOwogCQkJZWxzZSBpZiAoc2tiKQotCQkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJCQkJX19za2JfcXVldWVfaGVhZCgmcHJpdi0+cnhfcmVjeWNsZSwgc2tiKTsKIAkJfSBlbHNlIHsKIAkJCS8qIEluY3JlbWVudCB0aGUgbnVtYmVyIG9mIHBhY2tldHMgKi8KIAkJCWRldi0+c3RhdHMucnhfcGFja2V0cysrOwpAQCAtMTgzNSw2ICsxODkyLDggQEAKIAkJCQlza2JfcHV0KHNrYiwgcGt0X2xlbik7CiAJCQkJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBwa3RfbGVuOwogCisJCQkJaWYgKGluX2lycSgpIHx8IGlycXNfZGlzYWJsZWQoKSkKKwkJCQkJcHJpbnRrKCJJbnRlcnJ1cHQgcHJvYmxlbSFcbiIpOwogCQkJCWdmYXJfcHJvY2Vzc19mcmFtZShkZXYsIHNrYiwgYW1vdW50X3B1bGwpOwogCiAJCQl9IGVsc2UgewpAQCAtMTg3MCw3ICsxOTI5LDcgQEAKIHN0YXRpYyBpbnQgZ2Zhcl9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCkKIHsKIAlzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2ID0gY29udGFpbmVyX29mKG5hcGksIHN0cnVjdCBnZmFyX3ByaXZhdGUsIG5hcGkpOwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwcml2LT5kZXY7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXYtPm5kZXY7CiAJaW50IHR4X2NsZWFuZWQgPSAwOwogCWludCByeF9jbGVhbmVkID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMTg5MSw3ICsxOTUwLDcgQEAKIAkJcmV0dXJuIGJ1ZGdldDsKIAogCWlmIChyeF9jbGVhbmVkIDwgYnVkZ2V0KSB7Ci0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCiAJCS8qIENsZWFyIHRoZSBoYWx0IGJpdCBpbiBSU1RBVCAqLwogCQlnZmFyX3dyaXRlKCZwcml2LT5yZWdzLT5yc3RhdCwgUlNUQVRfQ0xFQVJfUkhBTFQpOwpAQCAtMjMwOCwyMyArMjM2NywxMiBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBnZmFyX2luaXQodm9pZCkKIHsKLQlpbnQgZXJyID0gZ2Zhcl9tZGlvX2luaXQoKTsKLQotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQllcnIgPSBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJmdmYXJfZHJpdmVyKTsKLQotCWlmIChlcnIpCi0JCWdmYXJfbWRpb19leGl0KCk7Ci0KLQlyZXR1cm4gZXJyOworCXJldHVybiBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJmdmYXJfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGdmYXJfZXhpdCh2b2lkKQogewogCW9mX3VucmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZnZmFyX2RyaXZlcik7Ci0JZ2Zhcl9tZGlvX2V4aXQoKTsKIH0KIAogbW9kdWxlX2luaXQoZ2Zhcl9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2dpYW5mYXIuaCBiL2RyaXZlcnMvbmV0L2dpYW5mYXIuaAppbmRleCBlYWE4Njg5Li5kZDQ5OWQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9naWFuZmFyLmgKKysrIGIvZHJpdmVycy9uZXQvZ2lhbmZhci5oCkBAIC00Niw3ICs0Niw2IEBACiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzbF9kZXZpY2VzLmg+Ci0jaW5jbHVkZSAiZ2lhbmZhcl9taWkuaCIKIAogLyogVGhlIG1heGltdW0gbnVtYmVyIG9mIHBhY2tldHMgdG8gYmUgaGFuZGxlZCBpbiBvbmUgY2FsbCBvZiBnZmFyX3BvbGwgKi8KICNkZWZpbmUgR0ZBUl9ERVZfV0VJR0hUIDY0CkBAIC0xMjYsOSArMTI1LDEyIEBACiAjZGVmaW5lIERFRkFVTFRfUlhfQ09BTEVTQ0UgMAogI2RlZmluZSBERUZBVUxUX1JYQ09VTlQJMAogCi0jZGVmaW5lIE1JSU1DRkdfSU5JVF9WQUxVRQkweDAwMDAwMDA3Ci0jZGVmaW5lIE1JSU1DRkdfUkVTRVQgICAgICAgICAgIDB4ODAwMDAwMDAKLSNkZWZpbmUgTUlJTUlORF9CVVNZICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBHRkFSX1NVUFBPUlRFRCAoU1VQUE9SVEVEXzEwYmFzZVRfSGFsZiBcCisJCXwgU1VQUE9SVEVEXzEwYmFzZVRfRnVsbCBcCisJCXwgU1VQUE9SVEVEXzEwMGJhc2VUX0hhbGYgXAorCQl8IFNVUFBPUlRFRF8xMDBiYXNlVF9GdWxsIFwKKwkJfCBTVVBQT1JURURfQXV0b25lZyBcCisJCXwgU1VQUE9SVEVEX01JSSkKIAogLyogVEJJIHJlZ2lzdGVyIGFkZHJlc3NlcyAqLwogI2RlZmluZSBNSUlfVEJJQ09OCQkweDExCkBAIC03MzYsNyArNzM4LDggQEAKIAlzcGlubG9ja190IHJ4bG9jazsKIAogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZTsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2OworCXN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2OwogCXN0cnVjdCBuYXBpX3N0cnVjdCBuYXBpOwogCiAJLyogc2tiIGFycmF5IGFuZCBpbmRleCAqLwpAQCAtNzU2LDYgKzc1OSw4IEBACiAJdW5zaWduZWQgaW50IHJ4X3N0YXNoX3NpemU7CiAJdW5zaWduZWQgaW50IHJ4X3N0YXNoX2luZGV4OwogCisJc3RydWN0IHNrX2J1ZmZfaGVhZCByeF9yZWN5Y2xlOworCiAJc3RydWN0IHZsYW5fZ3JvdXAgKnZsZ3JwOwogCiAJLyogVW5wcm90ZWN0ZWQgZmllbGRzICovCkBAIC04MjYsOCArODMxLDcgQEAKIGV4dGVybiB2b2lkIGdmYXJfcGh5X3Rlc3Qoc3RydWN0IG1paV9idXMgKmJ1cywgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwKIAkJaW50IGVuYWJsZSwgdTMyIHJlZ251bSwgdTMyIHJlYWQpOwogdm9pZCBnZmFyX2luaXRfc3lzZnMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1pbnQgZ2Zhcl9sb2NhbF9tZGlvX3dyaXRlKHN0cnVjdCBnZmFyX21paSBfX2lvbWVtICpyZWdzLCBpbnQgbWlpX2lkLAotCQkJICBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpOwotaW50IGdmYXJfbG9jYWxfbWRpb19yZWFkKHN0cnVjdCBnZmFyX21paSBfX2lvbWVtICpyZWdzLCBpbnQgbWlpX2lkLCBpbnQgcmVnbnVtKTsKKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBnZmFyX2V0aHRvb2xfb3BzOwogCiAjZW5kaWYgLyogX19HSUFORkFSX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2dpYW5mYXJfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZ2lhbmZhcl9ldGh0b29sLmMKaW5kZXggNTliM2I1ZC4uZGJmMDZlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZ2lhbmZhcl9ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvZ2lhbmZhcl9ldGh0b29sLmMKQEAgLTYwMCw2ICs2MDAsNyBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmJmbG9jaywgZmxhZ3MpOwogCXByaXYtPndvbF9lbiA9IHdvbC0+d29sb3B0cyAmIFdBS0VfTUFHSUMgPyAxIDogMDsKKwlkZXZpY2Vfc2V0X3dha2V1cF9lbmFibGUoJmRldi0+ZGV2LCBwcml2LT53b2xfZW4pOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmJmbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9naWFuZmFyX21paS5jIGIvZHJpdmVycy9uZXQvZ2lhbmZhcl9taWkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjQ5YTQyNi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC9naWFuZmFyX21paS5jCisrKyAvZGV2L251bGwKQEAgLTEsMzc5ICswLDAgQEAKLS8qCi0gKiBkcml2ZXJzL25ldC9naWFuZmFyX21paS5jCi0gKgotICogR2lhbmZhciBFdGhlcm5ldCBEcml2ZXIgLS0gTUlJTSBidXMgaW1wbGVtZW50YXRpb24KLSAqIFByb3ZpZGVzIEJ1cyBpbnRlcmZhY2UgZm9yIE1JSU0gcmVncwotICoKLSAqIEF1dGhvcjogQW5keSBGbGVtaW5nCi0gKiBNYWludGFpbmVyOiBLdW1hciBHYWxhCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDQgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KLSNpbmNsdWRlIDxsaW51eC9taWkuaD4KLSNpbmNsdWRlIDxsaW51eC9waHkuaD4KLSNpbmNsdWRlIDxsaW51eC9vZi5oPgotI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+Ci0KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLQotI2luY2x1ZGUgImdpYW5mYXIuaCIKLSNpbmNsdWRlICJnaWFuZmFyX21paS5oIgotCi0vKgotICogV3JpdGUgdmFsdWUgdG8gdGhlIFBIWSBhdCBtaWlfaWQgYXQgcmVnaXN0ZXIgcmVnbnVtLAotICogb24gdGhlIGJ1cyBhdHRhY2hlZCB0byB0aGUgbG9jYWwgaW50ZXJmYWNlLCB3aGljaCBtYXkgYmUgZGlmZmVyZW50IGZyb20gdGhlCi0gKiBnZW5lcmljIG1kaW8gYnVzICh0aWVkIHRvIGEgc2luZ2xlIGludGVyZmFjZSksIHdhaXRpbmcgdW50aWwgdGhlIHdyaXRlIGlzCi0gKiBkb25lIGJlZm9yZSByZXR1cm5pbmcuIFRoaXMgaXMgaGVscGZ1bCBpbiBwcm9ncmFtbWluZyBpbnRlcmZhY2VzIGxpa2UKLSAqIHRoZSBUQkkgd2hpY2ggY29udHJvbCBpbnRlcmZhY2VzIGxpa2Ugb25jaGlwIFNFUkRFUyBhbmQgYXJlIGFsd2F5cyB0aWVkIHRvCi0gKiB0aGUgbG9jYWwgbWRpbyBwaW5zLCB3aGljaCBtYXkgbm90IGJlIHRoZSBzYW1lIGFzIHN5c3RlbSBtZGlvIGJ1cywgdXNlZCBmb3IKLSAqIGNvbnRyb2xsaW5nIHRoZSBleHRlcm5hbCBQSFlzLCBmb3IgZXhhbXBsZS4KLSAqLwotaW50IGdmYXJfbG9jYWxfbWRpb193cml0ZShzdHJ1Y3QgZ2Zhcl9taWkgX19pb21lbSAqcmVncywgaW50IG1paV9pZCwKLQkJCSAgaW50IHJlZ251bSwgdTE2IHZhbHVlKQotewotCS8qIFNldCB0aGUgUEhZIGFkZHJlc3MgYW5kIHRoZSByZWdpc3RlciBhZGRyZXNzIHdlIHdhbnQgdG8gd3JpdGUgKi8KLQlnZmFyX3dyaXRlKCZyZWdzLT5taWltYWRkLCAobWlpX2lkIDw8IDgpIHwgcmVnbnVtKTsKLQotCS8qIFdyaXRlIG91dCB0aGUgdmFsdWUgd2Ugd2FudCAqLwotCWdmYXJfd3JpdGUoJnJlZ3MtPm1paW1jb24sIHZhbHVlKTsKLQotCS8qIFdhaXQgZm9yIHRoZSB0cmFuc2FjdGlvbiB0byBmaW5pc2ggKi8KLQl3aGlsZSAoZ2Zhcl9yZWFkKCZyZWdzLT5taWltaW5kKSAmIE1JSU1JTkRfQlVTWSkKLQkJY3B1X3JlbGF4KCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIFJlYWQgdGhlIGJ1cyBmb3IgUEhZIGF0IGFkZHIgbWlpX2lkLCByZWdpc3RlciByZWdudW0sIGFuZAotICogcmV0dXJuIHRoZSB2YWx1ZS4gIENsZWFycyBtaWltY29tIGZpcnN0LiAgQWxsIFBIWSBvcGVyYXRpb24KLSAqIGRvbmUgb24gdGhlIGJ1cyBhdHRhY2hlZCB0byB0aGUgbG9jYWwgaW50ZXJmYWNlLAotICogd2hpY2ggbWF5IGJlIGRpZmZlcmVudCBmcm9tIHRoZSBnZW5lcmljIG1kaW8gYnVzCi0gKiBUaGlzIGlzIGhlbHBmdWwgaW4gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlcyBsaWtlCi0gKiB0aGUgVEJJIHdoaWNoLCBpbnR1cm4sIGNvbnRyb2wgaW50ZXJmYWNlcyBsaWtlIG9uY2hpcCBTRVJERVMKLSAqIGFuZCBhcmUgYWx3YXlzIHRpZWQgdG8gdGhlIGxvY2FsIG1kaW8gcGlucywgd2hpY2ggbWF5IG5vdCBiZSB0aGUKLSAqIHNhbWUgYXMgc3lzdGVtIG1kaW8gYnVzLCB1c2VkIGZvciBjb250cm9sbGluZyB0aGUgZXh0ZXJuYWwgUEhZcywgZm9yIGVnLgotICovCi1pbnQgZ2Zhcl9sb2NhbF9tZGlvX3JlYWQoc3RydWN0IGdmYXJfbWlpIF9faW9tZW0gKnJlZ3MsIGludCBtaWlfaWQsIGludCByZWdudW0pCi17Ci0JdTE2IHZhbHVlOwotCi0JLyogU2V0IHRoZSBQSFkgYWRkcmVzcyBhbmQgdGhlIHJlZ2lzdGVyIGFkZHJlc3Mgd2Ugd2FudCB0byByZWFkICovCi0JZ2Zhcl93cml0ZSgmcmVncy0+bWlpbWFkZCwgKG1paV9pZCA8PCA4KSB8IHJlZ251bSk7Ci0KLQkvKiBDbGVhciBtaWltY29tLCBhbmQgdGhlbiBpbml0aWF0ZSBhIHJlYWQgKi8KLQlnZmFyX3dyaXRlKCZyZWdzLT5taWltY29tLCAwKTsKLQlnZmFyX3dyaXRlKCZyZWdzLT5taWltY29tLCBNSUlfUkVBRF9DT01NQU5EKTsKLQotCS8qIFdhaXQgZm9yIHRoZSB0cmFuc2FjdGlvbiB0byBmaW5pc2ggKi8KLQl3aGlsZSAoZ2Zhcl9yZWFkKCZyZWdzLT5taWltaW5kKSAmIChNSUlNSU5EX05PVFZBTElEIHwgTUlJTUlORF9CVVNZKSkKLQkJY3B1X3JlbGF4KCk7Ci0KLQkvKiBHcmFiIHRoZSB2YWx1ZSBvZiB0aGUgcmVnaXN0ZXIgZnJvbSBtaWltc3RhdCAqLwotCXZhbHVlID0gZ2Zhcl9yZWFkKCZyZWdzLT5taWltc3RhdCk7Ci0KLQlyZXR1cm4gdmFsdWU7Ci19Ci0KLS8qIFdyaXRlIHZhbHVlIHRvIHRoZSBQSFkgYXQgbWlpX2lkIGF0IHJlZ2lzdGVyIHJlZ251bSwKLSAqIG9uIHRoZSBidXMsIHdhaXRpbmcgdW50aWwgdGhlIHdyaXRlIGlzIGRvbmUgYmVmb3JlIHJldHVybmluZy4KLSAqIEFsbCBQSFkgY29uZmlndXJhdGlvbiBpcyBkb25lIHRocm91Z2ggdGhlIFRTRUMxIE1JSU0gcmVncyAqLwotaW50IGdmYXJfbWRpb193cml0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgbWlpX2lkLCBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpCi17Ci0Jc3RydWN0IGdmYXJfbWlpIF9faW9tZW0gKnJlZ3MgPSAodm9pZCBfX2lvbWVtICopYnVzLT5wcml2OwotCi0JLyogV3JpdGUgdG8gdGhlIGxvY2FsIE1JSSByZWdzICovCi0JcmV0dXJuKGdmYXJfbG9jYWxfbWRpb193cml0ZShyZWdzLCBtaWlfaWQsIHJlZ251bSwgdmFsdWUpKTsKLX0KLQotLyogUmVhZCB0aGUgYnVzIGZvciBQSFkgYXQgYWRkciBtaWlfaWQsIHJlZ2lzdGVyIHJlZ251bSwgYW5kCi0gKiByZXR1cm4gdGhlIHZhbHVlLiAgQ2xlYXJzIG1paW1jb20gZmlyc3QuICBBbGwgUEhZCi0gKiBjb25maWd1cmF0aW9uIGhhcyB0byBiZSBkb25lIHRocm91Z2ggdGhlIFRTRUMxIE1JSU0gcmVncyAqLwotaW50IGdmYXJfbWRpb19yZWFkKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBtaWlfaWQsIGludCByZWdudW0pCi17Ci0Jc3RydWN0IGdmYXJfbWlpIF9faW9tZW0gKnJlZ3MgPSAodm9pZCBfX2lvbWVtICopYnVzLT5wcml2OwotCi0JLyogUmVhZCB0aGUgbG9jYWwgTUlJIHJlZ3MgKi8KLQlyZXR1cm4oZ2Zhcl9sb2NhbF9tZGlvX3JlYWQocmVncywgbWlpX2lkLCByZWdudW0pKTsKLX0KLQotLyogUmVzZXQgdGhlIE1JSU0gcmVnaXN0ZXJzLCBhbmQgd2FpdCBmb3IgdGhlIGJ1cyB0byBmcmVlICovCi1zdGF0aWMgaW50IGdmYXJfbWRpb19yZXNldChzdHJ1Y3QgbWlpX2J1cyAqYnVzKQotewotCXN0cnVjdCBnZmFyX21paSBfX2lvbWVtICpyZWdzID0gKHZvaWQgX19pb21lbSAqKWJ1cy0+cHJpdjsKLQl1bnNpZ25lZCBpbnQgdGltZW91dCA9IFBIWV9JTklUX1RJTUVPVVQ7Ci0KLQltdXRleF9sb2NrKCZidXMtPm1kaW9fbG9jayk7Ci0KLQkvKiBSZXNldCB0aGUgbWFuYWdlbWVudCBpbnRlcmZhY2UgKi8KLQlnZmFyX3dyaXRlKCZyZWdzLT5taWltY2ZnLCBNSUlNQ0ZHX1JFU0VUKTsKLQotCS8qIFNldHVwIHRoZSBNSUkgTWdtdCBjbG9jayBzcGVlZCAqLwotCWdmYXJfd3JpdGUoJnJlZ3MtPm1paW1jZmcsIE1JSU1DRkdfSU5JVF9WQUxVRSk7Ci0KLQkvKiBXYWl0IHVudGlsIHRoZSBidXMgaXMgZnJlZSAqLwotCXdoaWxlICgoZ2Zhcl9yZWFkKCZyZWdzLT5taWltaW5kKSAmIE1JSU1JTkRfQlVTWSkgJiYKLQkJCS0tdGltZW91dCkKLQkJY3B1X3JlbGF4KCk7Ci0KLQltdXRleF91bmxvY2soJmJ1cy0+bWRpb19sb2NrKTsKLQotCWlmKHRpbWVvdXQgPT0gMCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBUaGUgTUlJIEJ1cyBpcyBzdHVjayFcbiIsCi0JCQkJYnVzLT5uYW1lKTsKLQkJcmV0dXJuIC1FQlVTWTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogQWxsb2NhdGUgYW4gYXJyYXkgd2hpY2ggcHJvdmlkZXMgaXJxICNzIGZvciBlYWNoIFBIWSBvbiB0aGUgZ2l2ZW4gYnVzICovCi1zdGF0aWMgaW50ICpjcmVhdGVfaXJxX21hcChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQotewotCWludCAqaXJxczsKLQlpbnQgaTsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkID0gTlVMTDsKLQotCWlycXMgPSBrY2FsbG9jKFBIWV9NQVhfQUREUiwgc2l6ZW9mKGludCksIEdGUF9LRVJORUwpOwotCi0JaWYgKCFpcnFzKQotCQlyZXR1cm4gTlVMTDsKLQotCWZvciAoaSA9IDA7IGkgPCBQSFlfTUFYX0FERFI7IGkrKykKLQkJaXJxc1tpXSA9IFBIWV9QT0xMOwotCi0Jd2hpbGUgKChjaGlsZCA9IG9mX2dldF9uZXh0X2NoaWxkKG5wLCBjaGlsZCkpICE9IE5VTEwpIHsKLQkJaW50IGlycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKGNoaWxkLCAwKTsKLQkJY29uc3QgdTMyICppZDsKLQotCQlpZiAoaXJxID09IE5PX0lSUSkKLQkJCWNvbnRpbnVlOwotCi0JCWlkID0gb2ZfZ2V0X3Byb3BlcnR5KGNoaWxkLCAicmVnIiwgTlVMTCk7Ci0KLQkJaWYgKCFpZCkKLQkJCWNvbnRpbnVlOwotCi0JCWlmICgqaWQgPCBQSFlfTUFYX0FERFIgJiYgKmlkID49IDApCi0JCQlpcnFzWyppZF0gPSBpcnE7Ci0JCWVsc2UKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiAiCi0JCQkJCSIlZCBpcyBub3QgYSB2YWxpZCBQSFkgYWRkcmVzc1xuIiwKLQkJCQkJbnAtPmZ1bGxfbmFtZSwgKmlkKTsKLQl9Ci0KLQlyZXR1cm4gaXJxczsKLX0KLQotCi12b2lkIGdmYXJfbWRpb19idXNfbmFtZShjaGFyICpuYW1lLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQotewotCWNvbnN0IHUzMiAqcmVnOwotCi0JcmVnID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAicmVnIiwgTlVMTCk7Ci0KLQlzbnByaW50ZihuYW1lLCBNSUlfQlVTX0lEX1NJWkUsICIlc0AleCIsIG5wLT5uYW1lLCByZWcgPyAqcmVnIDogMCk7Ci19Ci0KLS8qIFNjYW4gdGhlIGJ1cyBpbiByZXZlcnNlLCBsb29raW5nIGZvciBhbiBlbXB0eSBzcG90ICovCi1zdGF0aWMgaW50IGdmYXJfbWRpb19maW5kX2ZyZWUoc3RydWN0IG1paV9idXMgKm5ld19idXMpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSBQSFlfTUFYX0FERFI7IGkgPiAwOyBpLS0pIHsKLQkJdTMyIHBoeV9pZDsKLQotCQlpZiAoZ2V0X3BoeV9pZChuZXdfYnVzLCBpLCAmcGh5X2lkKSkKLQkJCXJldHVybiAtMTsKLQotCQlpZiAocGh5X2lkID09IDB4ZmZmZmZmZmYpCi0JCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gaTsKLX0KLQotc3RhdGljIGludCBnZmFyX21kaW9fcHJvYmUoc3RydWN0IG9mX2RldmljZSAqb2ZkZXYsCi0JCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoKQotewotCXN0cnVjdCBnZmFyX21paSBfX2lvbWVtICpyZWdzOwotCXN0cnVjdCBnZmFyIF9faW9tZW0gKmVuZXRfcmVnczsKLQlzdHJ1Y3QgbWlpX2J1cyAqbmV3X2J1czsKLQlpbnQgZXJyID0gMDsKLQl1NjQgYWRkciwgc2l6ZTsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gb2ZkZXYtPm5vZGU7Ci0Jc3RydWN0IGRldmljZV9ub2RlICp0Ymk7Ci0JaW50IHRiaWFkZHIgPSAtMTsKLQotCW5ld19idXMgPSBtZGlvYnVzX2FsbG9jKCk7Ci0JaWYgKE5VTEwgPT0gbmV3X2J1cykKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlkZXZpY2VfaW5pdF93YWtldXAoJm9mZGV2LT5kZXYsIDEpOwotCi0JbmV3X2J1cy0+bmFtZSA9ICJHaWFuZmFyIE1JSSBCdXMiLAotCW5ld19idXMtPnJlYWQgPSAmZ2Zhcl9tZGlvX3JlYWQsCi0JbmV3X2J1cy0+d3JpdGUgPSAmZ2Zhcl9tZGlvX3dyaXRlLAotCW5ld19idXMtPnJlc2V0ID0gJmdmYXJfbWRpb19yZXNldCwKLQlnZmFyX21kaW9fYnVzX25hbWUobmV3X2J1cy0+aWQsIG5wKTsKLQotCS8qIFNldCB0aGUgUEhZIGJhc2UgYWRkcmVzcyAqLwotCWFkZHIgPSBvZl90cmFuc2xhdGVfYWRkcmVzcyhucCwgb2ZfZ2V0X2FkZHJlc3MobnAsIDAsICZzaXplLCBOVUxMKSk7Ci0JcmVncyA9IGlvcmVtYXAoYWRkciwgc2l6ZSk7Ci0KLQlpZiAoTlVMTCA9PSByZWdzKSB7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyX2ZyZWVfYnVzOwotCX0KLQotCW5ld19idXMtPnByaXYgPSAodm9pZCBfX2ZvcmNlICopcmVnczsKLQotCW5ld19idXMtPmlycSA9IGNyZWF0ZV9pcnFfbWFwKG5wKTsKLQotCWlmIChuZXdfYnVzLT5pcnEgPT0gTlVMTCkgewotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIGVycl91bm1hcF9yZWdzOwotCX0KLQotCW5ld19idXMtPnBhcmVudCA9ICZvZmRldi0+ZGV2OwotCWRldl9zZXRfZHJ2ZGF0YSgmb2ZkZXYtPmRldiwgbmV3X2J1cyk7Ci0KLQkvKgotCSAqIFRoaXMgaXMgbWlsZGx5IGV2aWwsIGJ1dCBzbyBpcyBvdXIgaGFyZHdhcmUgZm9yIGRvaW5nIHRoaXMuCi0JICogQWxzbywgd2UgaGF2ZSB0byBjYXN0IGJhY2sgdG8gc3RydWN0IGdmYXJfbWlpIGJlY2F1c2Ugb2YKLQkgKiBkZWZpbml0aW9uIHdlaXJkbmVzcyBkb25lIGluIGdpYW5mYXIuaC4KLQkgKi8KLQllbmV0X3JlZ3MgPSAoc3RydWN0IGdmYXIgX19pb21lbSAqKQotCQkoKGNoYXIgKilyZWdzIC0gb2Zmc2V0b2Yoc3RydWN0IGdmYXIsIGdmYXJfbWlpX3JlZ3MpKTsKLQotCWZvcl9lYWNoX2NoaWxkX29mX25vZGUobnAsIHRiaSkgewotCQlpZiAoIXN0cm5jbXAodGJpLT50eXBlLCAidGJpLXBoeSIsIDgpKQotCQkJYnJlYWs7Ci0JfQotCi0JaWYgKHRiaSkgewotCQljb25zdCB1MzIgKnByb3AgPSBvZl9nZXRfcHJvcGVydHkodGJpLCAicmVnIiwgTlVMTCk7Ci0KLQkJaWYgKHByb3ApCi0JCQl0YmlhZGRyID0gKnByb3A7Ci0JfQotCi0JaWYgKHRiaWFkZHIgPT0gLTEpIHsKLQkJZ2Zhcl93cml0ZSgmZW5ldF9yZWdzLT50YmlwYSwgMCk7Ci0KLQkJdGJpYWRkciA9IGdmYXJfbWRpb19maW5kX2ZyZWUobmV3X2J1cyk7Ci0JfQotCi0JLyoKLQkgKiBXZSBkZWZpbmUgVEJJUEEgYXQgMCB0byBiZSBpbGxlZ2FsLCBvcHRpbmcgdG8gZmFpbCBmb3IgYm9hcmRzIHRoYXQKLQkgKiBoYXZlIFBIWXMgYXQgMS0zMSwgcmF0aGVyIHRoYW4gY2hhbmdlIHRiaXBhIGFuZCByZXNjYW4uCi0JICovCi0JaWYgKHRiaWFkZHIgPT0gMCkgewotCQllcnIgPSAtRUJVU1k7Ci0KLQkJZ290byBlcnJfZnJlZV9pcnFzOwotCX0KLQotCWdmYXJfd3JpdGUoJmVuZXRfcmVncy0+dGJpcGEsIHRiaWFkZHIpOwotCi0JLyoKLQkgKiBUaGUgVEJJUEhZLW9ubHkgYnVzZXMgd2lsbCBmaW5kIFBIWXMgYXQgZXZlcnkgYWRkcmVzcywKLQkgKiBzbyB3ZSBtYXNrIHRoZW0gYWxsIGJ1dCB0aGUgVEJJCi0JICovCi0JaWYgKCFvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgImZzbCxnaWFuZmFyLW1kaW8iKSkKLQkJbmV3X2J1cy0+cGh5X21hc2sgPSB+KDEgPDwgdGJpYWRkcik7Ci0KLQllcnIgPSBtZGlvYnVzX3JlZ2lzdGVyKG5ld19idXMpOwotCi0JaWYgKGVyciAhPSAwKSB7Ci0JCXByaW50ayAoS0VSTl9FUlIgIiVzOiBDYW5ub3QgcmVnaXN0ZXIgYXMgTURJTyBidXNcbiIsCi0JCQkJbmV3X2J1cy0+bmFtZSk7Ci0JCWdvdG8gZXJyX2ZyZWVfaXJxczsKLQl9Ci0KLQlyZXR1cm4gMDsKLQotZXJyX2ZyZWVfaXJxczoKLQlrZnJlZShuZXdfYnVzLT5pcnEpOwotZXJyX3VubWFwX3JlZ3M6Ci0JaW91bm1hcChyZWdzKTsKLWVycl9mcmVlX2J1czoKLQltZGlvYnVzX2ZyZWUobmV3X2J1cyk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi0KLXN0YXRpYyBpbnQgZ2Zhcl9tZGlvX3JlbW92ZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldikKLXsKLQlzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gZGV2X2dldF9kcnZkYXRhKCZvZmRldi0+ZGV2KTsKLQotCW1kaW9idXNfdW5yZWdpc3RlcihidXMpOwotCi0JZGV2X3NldF9kcnZkYXRhKCZvZmRldi0+ZGV2LCBOVUxMKTsKLQotCWlvdW5tYXAoKHZvaWQgX19pb21lbSAqKWJ1cy0+cHJpdik7Ci0JYnVzLT5wcml2ID0gTlVMTDsKLQlrZnJlZShidXMtPmlycSk7Ci0JbWRpb2J1c19mcmVlKGJ1cyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgZ2Zhcl9tZGlvX21hdGNoW10gPQotewotCXsKLQkJLmNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyIsCi0JfSwKLQl7Ci0JCS5jb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSIsCi0JfSwKLQl7Ci0JCS50eXBlID0gIm1kaW8iLAotCQkuY29tcGF0aWJsZSA9ICJnaWFuZmFyIiwKLQl9LAotCXt9LAotfTsKLQotc3RhdGljIHN0cnVjdCBvZl9wbGF0Zm9ybV9kcml2ZXIgZ2lhbmZhcl9tZGlvX2RyaXZlciA9IHsKLQkubmFtZSA9ICJmc2wtZ2lhbmZhcl9tZGlvIiwKLQkubWF0Y2hfdGFibGUgPSBnZmFyX21kaW9fbWF0Y2gsCi0KLQkucHJvYmUgPSBnZmFyX21kaW9fcHJvYmUsCi0JLnJlbW92ZSA9IGdmYXJfbWRpb19yZW1vdmUsCi19OwotCi1pbnQgX19pbml0IGdmYXJfbWRpb19pbml0KHZvaWQpCi17Ci0JcmV0dXJuIG9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmZ2lhbmZhcl9tZGlvX2RyaXZlcik7Ci19Ci0KLXZvaWQgZ2Zhcl9tZGlvX2V4aXQodm9pZCkKLXsKLQlvZl91bnJlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmZ2lhbmZhcl9tZGlvX2RyaXZlcik7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9naWFuZmFyX21paS5oIGIvZHJpdmVycy9uZXQvZ2lhbmZhcl9taWkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjVjMjQyYy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC9naWFuZmFyX21paS5oCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotLyoKLSAqIGRyaXZlcnMvbmV0L2dpYW5mYXJfbWlpLmgKLSAqCi0gKiBHaWFuZmFyIEV0aGVybmV0IERyaXZlciAtLSBNSUkgTWFuYWdlbWVudCBCdXMgSW1wbGVtZW50YXRpb24KLSAqIERyaXZlciBmb3IgdGhlIE1ESU8gYnVzIGNvbnRyb2xsZXIgaW4gdGhlIEdpYW5mYXIgcmVnaXN0ZXIgc3BhY2UKLSAqCi0gKiBBdXRob3I6IEFuZHkgRmxlbWluZwotICogTWFpbnRhaW5lcjogS3VtYXIgR2FsYQotICoKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA0IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKi8KLSNpZm5kZWYgX19HSUFORkFSX01JSV9ICi0jZGVmaW5lIF9fR0lBTkZBUl9NSUlfSAotCi1zdHJ1Y3QgZ2Zhcl9wcml2YXRlOyAvKiBmb3J3YXJkIHJlZiAqLwotCi0jZGVmaW5lIE1JSU1JTkRfQlVTWSAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgTUlJTUlORF9OT1RWQUxJRCAgICAgICAgMHgwMDAwMDAwNAotCi0jZGVmaW5lIE1JSV9SRUFEX0NPTU1BTkQgICAgICAgMHgwMDAwMDAwMQotCi0jZGVmaW5lIEdGQVJfU1VQUE9SVEVEIChTVVBQT1JURURfMTBiYXNlVF9IYWxmIFwKLQkJfCBTVVBQT1JURURfMTBiYXNlVF9GdWxsIFwKLQkJfCBTVVBQT1JURURfMTAwYmFzZVRfSGFsZiBcCi0JCXwgU1VQUE9SVEVEXzEwMGJhc2VUX0Z1bGwgXAotCQl8IFNVUFBPUlRFRF9BdXRvbmVnIFwKLQkJfCBTVVBQT1JURURfTUlJKQotCi1zdHJ1Y3QgZ2Zhcl9taWkgewotCXUzMgltaWltY2ZnOwkvKiAweC41MjAgLSBNSUkgTWFuYWdlbWVudCBDb25maWcgUmVnaXN0ZXIgKi8KLQl1MzIJbWlpbWNvbTsJLyogMHguNTI0IC0gTUlJIE1hbmFnZW1lbnQgQ29tbWFuZCBSZWdpc3RlciAqLwotCXUzMgltaWltYWRkOwkvKiAweC41MjggLSBNSUkgTWFuYWdlbWVudCBBZGRyZXNzIFJlZ2lzdGVyICovCi0JdTMyCW1paW1jb247CS8qIDB4LjUyYyAtIE1JSSBNYW5hZ2VtZW50IENvbnRyb2wgUmVnaXN0ZXIgKi8KLQl1MzIJbWlpbXN0YXQ7CS8qIDB4LjUzMCAtIE1JSSBNYW5hZ2VtZW50IFN0YXR1cyBSZWdpc3RlciAqLwotCXUzMgltaWltaW5kOwkvKiAweC41MzQgLSBNSUkgTWFuYWdlbWVudCBJbmRpY2F0b3IgUmVnaXN0ZXIgKi8KLX07Ci0KLWludCBnZmFyX21kaW9fcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgbWlpX2lkLCBpbnQgcmVnbnVtKTsKLWludCBnZmFyX21kaW9fd3JpdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IG1paV9pZCwgaW50IHJlZ251bSwgdTE2IHZhbHVlKTsKLWludCBnZmFyX2xvY2FsX21kaW9fd3JpdGUoc3RydWN0IGdmYXJfbWlpIF9faW9tZW0gKnJlZ3MsIGludCBtaWlfaWQsCi0JCQkgIGludCByZWdudW0sIHUxNiB2YWx1ZSk7Ci1pbnQgZ2Zhcl9sb2NhbF9tZGlvX3JlYWQoc3RydWN0IGdmYXJfbWlpIF9faW9tZW0gKnJlZ3MsIGludCBtaWlfaWQsIGludCByZWdudW0pOwotc3RydWN0IG1paV9idXMgKmdmYXJfZ2V0X21paWJ1cyhjb25zdCBzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2KTsKLWludCBfX2luaXQgZ2Zhcl9tZGlvX2luaXQodm9pZCk7Ci12b2lkIGdmYXJfbWRpb19leGl0KHZvaWQpOwotCi12b2lkIGdmYXJfbWRpb19idXNfbmFtZShjaGFyICpuYW1lLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKTsKLSNlbmRpZiAvKiBHSUFORkFSX1BIWV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9naWFuZmFyX3N5c2ZzLmMgYi9kcml2ZXJzL25ldC9naWFuZmFyX3N5c2ZzLmMKaW5kZXggNzgyYzIwMS4uZGQyNmRhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZ2lhbmZhcl9zeXNmcy5jCisrKyBiL2RyaXZlcnMvbmV0L2dpYW5mYXJfc3lzZnMuYwpAQCAtNTMsNiArNTMsOSBAQAogCXUzMiB0ZW1wOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwlpZiAoIShwcml2LT5kZXZpY2VfZmxhZ3MgJiBGU0xfR0lBTkZBUl9ERVZfSEFTX0JEX1NUQVNISU5HKSkKKwkJcmV0dXJuIGNvdW50OworCiAJLyogRmluZCBvdXQgdGhlIG5ldyBzZXR0aW5nICovCiAJaWYgKCFzdHJuY21wKCJvbiIsIGJ1ZiwgY291bnQgLSAxKSB8fCAhc3RybmNtcCgiMSIsIGJ1ZiwgY291bnQgLSAxKSkKIAkJbmV3X3NldHRpbmcgPSAxOwpAQCAtODEsNyArODQsNyBAQAogCXJldHVybiBjb3VudDsKIH0KIAotREVWSUNFX0FUVFIoYmRfc3Rhc2gsIDA2NDQsIGdmYXJfc2hvd19iZF9zdGFzaCwgZ2Zhcl9zZXRfYmRfc3Rhc2gpOworc3RhdGljIERFVklDRV9BVFRSKGJkX3N0YXNoLCAwNjQ0LCBnZmFyX3Nob3dfYmRfc3Rhc2gsIGdmYXJfc2V0X2JkX3N0YXNoKTsKIAogc3RhdGljIHNzaXplX3QgZ2Zhcl9zaG93X3J4X3N0YXNoX3NpemUoc3RydWN0IGRldmljZSAqZGV2LAogCQkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQpAQCAtMTAwLDYgKzEwMyw5IEBACiAJdTMyIHRlbXA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCWlmICghKHByaXYtPmRldmljZV9mbGFncyAmIEZTTF9HSUFORkFSX0RFVl9IQVNfQlVGX1NUQVNISU5HKSkKKwkJcmV0dXJuIGNvdW50OworCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnJ4bG9jaywgZmxhZ3MpOwogCWlmIChsZW5ndGggPiBwcml2LT5yeF9idWZmZXJfc2l6ZSkKIAkJZ290byBvdXQ7CkBAIC0xMzAsOCArMTM2LDggQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLURFVklDRV9BVFRSKHJ4X3N0YXNoX3NpemUsIDA2NDQsIGdmYXJfc2hvd19yeF9zdGFzaF9zaXplLAotCSAgICBnZmFyX3NldF9yeF9zdGFzaF9zaXplKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihyeF9zdGFzaF9zaXplLCAwNjQ0LCBnZmFyX3Nob3dfcnhfc3Rhc2hfc2l6ZSwKKwkJICAgZ2Zhcl9zZXRfcnhfc3Rhc2hfc2l6ZSk7CiAKIC8qIFN0YXNoaW5nIHdpbGwgb25seSBiZSBlbmFibGVkIHdoZW4gcnhfc3Rhc2hfc2l6ZSAhPSAwICovCiBzdGF0aWMgc3NpemVfdCBnZmFyX3Nob3dfcnhfc3Rhc2hfaW5kZXgoc3RydWN0IGRldmljZSAqZGV2LApAQCAtMTUyLDYgKzE1OCw5IEBACiAJdTMyIHRlbXA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCWlmICghKHByaXYtPmRldmljZV9mbGFncyAmIEZTTF9HSUFORkFSX0RFVl9IQVNfQlVGX1NUQVNISU5HKSkKKwkJcmV0dXJuIGNvdW50OworCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnJ4bG9jaywgZmxhZ3MpOwogCWlmIChpbmRleCA+IHByaXYtPnJ4X3N0YXNoX3NpemUpCiAJCWdvdG8gb3V0OwpAQCAtMTcyLDggKzE4MSw4IEBACiAJcmV0dXJuIGNvdW50OwogfQogCi1ERVZJQ0VfQVRUUihyeF9zdGFzaF9pbmRleCwgMDY0NCwgZ2Zhcl9zaG93X3J4X3N0YXNoX2luZGV4LAotCSAgICBnZmFyX3NldF9yeF9zdGFzaF9pbmRleCk7CitzdGF0aWMgREVWSUNFX0FUVFIocnhfc3Rhc2hfaW5kZXgsIDA2NDQsIGdmYXJfc2hvd19yeF9zdGFzaF9pbmRleCwKKwkJICAgZ2Zhcl9zZXRfcnhfc3Rhc2hfaW5kZXgpOwogCiBzdGF0aWMgc3NpemVfdCBnZmFyX3Nob3dfZmlmb190aHJlc2hvbGQoc3RydWN0IGRldmljZSAqZGV2LAogCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKQEAgLTIxMCw4ICsyMTksOCBAQAogCXJldHVybiBjb3VudDsKIH0KIAotREVWSUNFX0FUVFIoZmlmb190aHJlc2hvbGQsIDA2NDQsIGdmYXJfc2hvd19maWZvX3RocmVzaG9sZCwKLQkgICAgZ2Zhcl9zZXRfZmlmb190aHJlc2hvbGQpOworc3RhdGljIERFVklDRV9BVFRSKGZpZm9fdGhyZXNob2xkLCAwNjQ0LCBnZmFyX3Nob3dfZmlmb190aHJlc2hvbGQsCisJCSAgIGdmYXJfc2V0X2ZpZm9fdGhyZXNob2xkKTsKIAogc3RhdGljIHNzaXplX3QgZ2Zhcl9zaG93X2ZpZm9fc3RhcnZlKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCkBAIC0yNDcsNyArMjU2LDggQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLURFVklDRV9BVFRSKGZpZm9fc3RhcnZlLCAwNjQ0LCBnZmFyX3Nob3dfZmlmb19zdGFydmUsIGdmYXJfc2V0X2ZpZm9fc3RhcnZlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihmaWZvX3N0YXJ2ZSwgMDY0NCwgZ2Zhcl9zaG93X2ZpZm9fc3RhcnZlLAorCQkgICBnZmFyX3NldF9maWZvX3N0YXJ2ZSk7CiAKIHN0YXRpYyBzc2l6ZV90IGdmYXJfc2hvd19maWZvX3N0YXJ2ZV9vZmYoc3RydWN0IGRldmljZSAqZGV2LAogCQkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCkBAIC0yODQsOCArMjk0LDggQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLURFVklDRV9BVFRSKGZpZm9fc3RhcnZlX29mZiwgMDY0NCwgZ2Zhcl9zaG93X2ZpZm9fc3RhcnZlX29mZiwKLQkgICAgZ2Zhcl9zZXRfZmlmb19zdGFydmVfb2ZmKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihmaWZvX3N0YXJ2ZV9vZmYsIDA2NDQsIGdmYXJfc2hvd19maWZvX3N0YXJ2ZV9vZmYsCisJCSAgIGdmYXJfc2V0X2ZpZm9fc3RhcnZlX29mZik7CiAKIHZvaWQgZ2Zhcl9pbml0X3N5c2ZzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CkBAIC0yOTMsMTIgKzMwMyw5IEBACiAJaW50IHJjOwogCiAJLyogSW5pdGlhbGl6ZSB0aGUgZGVmYXVsdCB2YWx1ZXMgKi8KLQlwcml2LT5yeF9zdGFzaF9zaXplID0gREVGQVVMVF9TVEFTSF9MRU5HVEg7Ci0JcHJpdi0+cnhfc3Rhc2hfaW5kZXggPSBERUZBVUxUX1NUQVNIX0lOREVYOwogCXByaXYtPmZpZm9fdGhyZXNob2xkID0gREVGQVVMVF9GSUZPX1RYX1RIUjsKIAlwcml2LT5maWZvX3N0YXJ2ZSA9IERFRkFVTFRfRklGT19UWF9TVEFSVkU7CiAJcHJpdi0+Zmlmb19zdGFydmVfb2ZmID0gREVGQVVMVF9GSUZPX1RYX1NUQVJWRV9PRkY7Ci0JcHJpdi0+YmRfc3Rhc2hfZW4gPSBERUZBVUxUX0JEX1NUQVNIOwogCiAJLyogQ3JlYXRlIG91ciBzeXNmcyBmaWxlcyAqLwogCXJjID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZkZXYtPmRldiwgJmRldl9hdHRyX2JkX3N0YXNoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hhbWFjaGkuYyBiL2RyaXZlcnMvbmV0L2hhbWFjaGkuYwppbmRleCA3ZThiM2M1Li4zMTBlZTAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9oYW1hY2hpLmMKKysrIGIvZHJpdmVycy9uZXQvaGFtYWNoaS5jCkBAIC0xNzEsNyArMTcxLDcgQEAKICNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlLmg+CiAKLXN0YXRpYyBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRkYXRhID0KK3N0YXRpYyBjb25zdCBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRjb25zdCA9CiBLRVJOX0lORk8gRFJWX05BTUUgIi5jOnYiIERSVl9WRVJTSU9OICIgIiBEUlZfUkVMREFURSAiICBXcml0dGVuIGJ5IERvbmFsZCBCZWNrZXJcbiIKIEtFUk5fSU5GTyAiICAgU29tZSBtb2RpZmljYXRpb25zIGJ5IEVyaWMga2FzdGVuIDxrYXN0ZW5AbnNjbC5tc3UuZWR1PlxuIgogS0VSTl9JTkZPICIgICBGdXJ0aGVyIG1vZGlmaWNhdGlvbnMgYnkgS2VpdGggVW5kZXJ3b29kIDxrZWl0aHVAcGFybC5jbGVtc29uLmVkdT5cbiI7CkBAIC0xMjQ0LDcgKzEyNDQsNyBAQAogICAgIGNzdW1fYWRkKHN1bSwgKGloKS0+c2FkZHIgJiAweGZmZmYpOyBcCiAgICAgY3N1bV9hZGQoc3VtLCAoaWgpLT5kYWRkciA+PiAxNik7IFwKICAgICBjc3VtX2FkZChzdW0sIChpaCktPmRhZGRyICYgMHhmZmZmKTsgXAotICAgIGNzdW1fYWRkKHN1bSwgX19jb25zdGFudF9odG9ucyhJUFBST1RPX1VEUCkpOyBcCisgICAgY3N1bV9hZGQoc3VtLCBjcHVfdG9fYmUxNihJUFBST1RPX1VEUCkpOyBcCiAgICAgY3N1bV9hZGQoc3VtLCAodWgpLT5sZW4pOyBcCiB9IHdoaWxlICgwKQogCkBAIC0xMjU1LDcgKzEyNTUsNyBAQAogICAgIGNzdW1fYWRkKHN1bSwgKGloKS0+c2FkZHIgJiAweGZmZmYpOyBcCiAgICAgY3N1bV9hZGQoc3VtLCAoaWgpLT5kYWRkciA+PiAxNik7IFwKICAgICBjc3VtX2FkZChzdW0sIChpaCktPmRhZGRyICYgMHhmZmZmKTsgXAotICAgIGNzdW1fYWRkKHN1bSwgX19jb25zdGFudF9odG9ucyhJUFBST1RPX1RDUCkpOyBcCisgICAgY3N1bV9hZGQoc3VtLCBjcHVfdG9fYmUxNihJUFBST1RPX1RDUCkpOyBcCiAgICAgY3N1bV9hZGQoc3VtLCBodG9ucyhsZW4pKTsgXAogfSB3aGlsZSAoMCkKICNlbmRpZgpAQCAtMTI5Niw3ICsxMjk2LDcgQEAKIAkgICAgLyogdGFjayBvbiBjaGVja3N1bSB0YWcgKi8KIAkgICAgdTMyIHRhZ3ZhbCA9IDA7CiAJICAgIHN0cnVjdCBldGhoZHIgKmVoID0gKHN0cnVjdCBldGhoZHIgKilza2ItPmRhdGE7Ci0JICAgIGlmIChlaC0+aF9wcm90byA9PSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQKSkgeworCSAgICBpZiAoZWgtPmhfcHJvdG8gPT0gY3B1X3RvX2JlMTYoRVRIX1BfSVApKSB7CiAJCXN0cnVjdCBpcGhkciAqaWggPSAoc3RydWN0IGlwaGRyICopKChjaGFyICopZWggKyBFVEhfSExFTik7CiAJCWlmIChpaC0+cHJvdG9jb2wgPT0gSVBQUk9UT19VRFApIHsKIAkJICAgIHN0cnVjdCB1ZHBoZHIgKnVoCkBAIC0xNjA1LDcgKzE2MDUsNyBAQAogCQkJCSAqLwogCQkJCWlmIChudG9ocyhpaC0+dG90X2xlbikgPj0gNDYpewogCQkJCQkvKiBkb24ndCB3b3JyeSBhYm91dCBmcmFncyAqLwotCQkJCQlpZiAoIShpaC0+ZnJhZ19vZmYgJiBfX2NvbnN0YW50X2h0b25zKElQX01GfElQX09GRlNFVCkpKSB7CisJCQkJCWlmICghKGloLT5mcmFnX29mZiAmIGNwdV90b19iZTE2KElQX01GfElQX09GRlNFVCkpKSB7CiAJCQkJCQl1MzIgaW52ID0gKih1MzIgKikgJmJ1Zl9hZGRyW2RhdGFfc2l6ZSAtIDE2XTsKIAkJCQkJCXUzMiAqcCA9ICh1MzIgKikgJmJ1Zl9hZGRyW2RhdGFfc2l6ZSAtIDIwXTsKIAkJCQkJCXJlZ2lzdGVyIHUzMiBjcmMsIHBfciwgcF9yMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvLzZwYWNrLmMgYi9kcml2ZXJzL25ldC9oYW1yYWRpby82cGFjay5jCmluZGV4IDJkNDA4OTguLjE1NTE2MDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvLzZwYWNrLmMKKysrIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vNnBhY2suYwpAQCAtMzIyLDIzICszMjIsMjUgQEAKIAkucmVidWlsZAk9IHNwX3JlYnVpbGRfaGVhZGVyLAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBzcF9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBzcF9vcGVuX2RldiwKKwkubmRvX3N0b3AJCT0gc3BfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IHNwX3htaXQsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgICAgPSBzcF9zZXRfbWFjX2FkZHJlc3MsCit9OworCiBzdGF0aWMgdm9pZCBzcF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCS8qIEZpbmlzaCBzZXR0aW5nIHVwIHRoZSBERVZJQ0UgaW5mby4gKi8KLQlkZXYtPm10dQkJPSBTSVhQX01UVTsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdAk9IHNwX3htaXQ7Ci0JZGV2LT5vcGVuCQk9IHNwX29wZW5fZGV2OworCWRldi0+bmV0ZGV2X29wcwkJPSAmc3BfbmV0ZGV2X29wczsKIAlkZXYtPmRlc3RydWN0b3IJCT0gZnJlZV9uZXRkZXY7Ci0JZGV2LT5zdG9wCQk9IHNwX2Nsb3NlOwotCi0JZGV2LT5zZXRfbWFjX2FkZHJlc3MgICAgPSBzcF9zZXRfbWFjX2FkZHJlc3M7CisJZGV2LT5tdHUJCT0gU0lYUF9NVFU7CiAJZGV2LT5oYXJkX2hlYWRlcl9sZW4JPSBBWDI1X01BWF9IRUFERVJfTEVOOwogCWRldi0+aGVhZGVyX29wcyAJPSAmc3BfaGVhZGVyX29wczsKIAogCWRldi0+YWRkcl9sZW4JCT0gQVgyNV9BRERSX0xFTjsKIAlkZXYtPnR5cGUJCT0gQVJQSFJEX0FYMjU7CiAJZGV2LT50eF9xdWV1ZV9sZW4JPSAxMDsKLQlkZXYtPnR4X3RpbWVvdXQJCT0gTlVMTDsKIAogCS8qIE9ubHkgYWN0aXZhdGVkIGluIEFYLjI1IG1vZGUgKi8KIAltZW1jcHkoZGV2LT5icm9hZGNhc3QsICZheDI1X2JjYXN0LCBBWDI1X0FERFJfTEVOKTsKQEAgLTc4OCw5ICs3OTAsOSBAQAogCiAvKiBJbml0aWFsaXplIDZwYWNrIGNvbnRyb2wgZGV2aWNlIC0tIHJlZ2lzdGVyIDZwYWNrIGxpbmUgZGlzY2lwbGluZSAqLwogCi1zdGF0aWMgY2hhciBtc2dfYmFubmVyW10gIF9faW5pdGRhdGEgPSBLRVJOX0lORk8gXAorc3RhdGljIGNvbnN0IGNoYXIgbXNnX2Jhbm5lcltdICBfX2luaXRkYXRhID0gS0VSTl9JTkZPIFwKIAkiQVguMjU6IDZwYWNrIGRyaXZlciwgIiBTSVhQQUNLX1ZFUlNJT04gIlxuIjsKLXN0YXRpYyBjaGFyIG1zZ19yZWdmYWlsW10gX19pbml0ZGF0YSA9IEtFUk5fRVJSICBcCitzdGF0aWMgY29uc3QgY2hhciBtc2dfcmVnZmFpbFtdIF9faW5pdGRhdGEgPSBLRVJOX0VSUiAgXAogCSI2cGFjazogY2FuJ3QgcmVnaXN0ZXIgbGluZSBkaXNjaXBsaW5lIChlcnIgPSAlZClcbiI7CiAKIHN0YXRpYyBpbnQgX19pbml0IHNpeHBhY2tfaW5pdF9kcml2ZXIodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2JheWNvbV9lcHAuYyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2JheWNvbV9lcHAuYwppbmRleCA4MWE2NWUzLi5iYjc4YzExIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9oYW1yYWRpby9iYXljb21fZXBwLmMKKysrIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vYmF5Y29tX2VwcC5jCkBAIC0yMDMsNyArMjAzLDYgQEAKIAkJdW5zaWduZWQgY2hhciBidWZbVFhCVUZGRVJfU0laRV07CiAgICAgICAgIH0gaGRsY3R4OwogCi0gICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwogCXVuc2lnbmVkIGludCBwdHRfa2V5ZWQ7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsgIC8qIG5leHQgdHJhbnNtaXQgcGFja2V0ICAqLwogCkBAIC00MjMsNyArNDIyLDcgQEAKIAliYy0+aGRsY3R4LmJ1ZnB0ciA9IGJjLT5oZGxjdHguYnVmOwogCWJjLT5oZGxjdHguYnVmY250ID0gd3AgLSBiYy0+aGRsY3R4LmJ1ZjsKIAlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JYmMtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwliYy0+ZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTU0Nyw3ICs1NDYsNyBAQAogCXBrdGxlbiA9IGJjLT5oZGxjcnguYnVmY250LTIrMTsgLyogS0lTUyBrbHVkZ2UgKi8KIAlpZiAoIShza2IgPSBkZXZfYWxsb2Nfc2tiKHBrdGxlbikpKSB7CiAJCXByaW50aygiJXM6IG1lbW9yeSBzcXVlZXplLCBkcm9wcGluZyBwYWNrZXRcbiIsIGRldi0+bmFtZSk7Ci0JCWJjLT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQlyZXR1cm47CiAJfQogCWNwID0gc2tiX3B1dChza2IsIHBrdGxlbik7CkBAIC01NTUsNyArNTU0LDcgQEAKIAltZW1jcHkoY3AsIGJjLT5oZGxjcnguYnVmLCBwa3RsZW4gLSAxKTsKIAlza2ItPnByb3RvY29sID0gYXgyNV90eXBlX3RyYW5zKHNrYiwgZGV2KTsKIAluZXRpZl9yeChza2IpOwotCWJjLT5zdGF0cy5yeF9wYWNrZXRzKys7CisJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CiB9CiAKIHN0YXRpYyBpbnQgcmVjZWl2ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgY250KQpAQCAtODAyLDE5ICs4MDEsNiBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpiYXljb21fZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGJheWNvbV9zdGF0ZSAqYmMgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JLyogCi0JICogR2V0IHRoZSBjdXJyZW50IHN0YXRpc3RpY3MuICBUaGlzIG1heSBiZSBjYWxsZWQgd2l0aCB0aGUKLQkgKiBjYXJkIG9wZW4gb3IgY2xvc2VkLiAKLQkgKi8KLQlyZXR1cm4gJmJjLT5zdGF0czsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KIHN0YXRpYyB2b2lkIGVwcF93YWtldXAodm9pZCAqaGFuZGxlKQogewogICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopaGFuZGxlOwpAQCAtMTA2NSwxMCArMTA1MSwxMCBAQAogCQloaS5kYXRhLmNzLnB0dCA9ICEhKGJjLT5zdGF0ICYgRVBQX1BUVEJJVCk7CiAJCWhpLmRhdGEuY3MuZGNkID0gIShiYy0+c3RhdCAmIEVQUF9EQ0RCSVQpOwogCQloaS5kYXRhLmNzLnB0dF9rZXllZCA9IGJjLT5wdHRfa2V5ZWQ7Ci0JCWhpLmRhdGEuY3MudHhfcGFja2V0cyA9IGJjLT5zdGF0cy50eF9wYWNrZXRzOwotCQloaS5kYXRhLmNzLnR4X2Vycm9ycyA9IGJjLT5zdGF0cy50eF9lcnJvcnM7Ci0JCWhpLmRhdGEuY3MucnhfcGFja2V0cyA9IGJjLT5zdGF0cy5yeF9wYWNrZXRzOwotCQloaS5kYXRhLmNzLnJ4X2Vycm9ycyA9IGJjLT5zdGF0cy5yeF9lcnJvcnM7CisJCWhpLmRhdGEuY3MudHhfcGFja2V0cyA9IGRldi0+c3RhdHMudHhfcGFja2V0czsKKwkJaGkuZGF0YS5jcy50eF9lcnJvcnMgPSBkZXYtPnN0YXRzLnR4X2Vycm9yczsKKwkJaGkuZGF0YS5jcy5yeF9wYWNrZXRzID0gZGV2LT5zdGF0cy5yeF9wYWNrZXRzOworCQloaS5kYXRhLmNzLnJ4X2Vycm9ycyA9IGRldi0+c3RhdHMucnhfZXJyb3JzOwogCQlicmVhazsJCQogCiAJY2FzZSBIRExDRFJWQ1RMX09MREdFVFNUQVQ6CkBAIC0xMTE2LDYgKzExMDIsMTQgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYmF5Y29tX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCSAgICAgPSBlcHBfb3BlbiwKKwkubmRvX3N0b3AJICAgICA9IGVwcF9jbG9zZSwKKwkubmRvX2RvX2lvY3RsCSAgICAgPSBiYXljb21faW9jdGwsCisJLm5kb19zdGFydF94bWl0ICAgICAgPSBiYXljb21fc2VuZF9wYWNrZXQsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgPSBiYXljb21fc2V0X21hY19hZGRyZXNzLAorfTsKKwogLyoKICAqIENoZWNrIGZvciBhIG5ldHdvcmsgYWRhcHRvciBvZiB0aGlzIHR5cGUsIGFuZCByZXR1cm4gJzAnIGlmIG9uZSBleGlzdHMuCiAgKiBJZiBkZXYtPmJhc2VfYWRkciA9PSAwLCBwcm9iZSBhbGwgbGlrZWx5IGxvY2F0aW9ucy4KQEAgLTExNDMsMTcgKzExMzcsMTIgQEAKIAkvKgogCSAqIGluaXRpYWxpemUgdGhlIGRldmljZSBzdHJ1Y3QKIAkgKi8KLQlkZXYtPm9wZW4gPSBlcHBfb3BlbjsKLQlkZXYtPnN0b3AgPSBlcHBfY2xvc2U7Ci0JZGV2LT5kb19pb2N0bCA9IGJheWNvbV9pb2N0bDsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGJheWNvbV9zZW5kX3BhY2tldDsKLQlkZXYtPmdldF9zdGF0cyA9IGJheWNvbV9nZXRfc3RhdHM7CiAKIAkvKiBGaWxsIGluIHRoZSBmaWVsZHMgb2YgdGhlIGRldmljZSBzdHJ1Y3R1cmUgKi8KIAliYy0+c2tiID0gTlVMTDsKIAkKKwlkZXYtPm5ldGRldl9vcHMgPSAmYmF5Y29tX25ldGRldl9vcHM7CiAJZGV2LT5oZWFkZXJfb3BzID0gJmF4MjVfaGVhZGVyX29wczsKLQlkZXYtPnNldF9tYWNfYWRkcmVzcyA9IGJheWNvbV9zZXRfbWFjX2FkZHJlc3M7CiAJCiAJZGV2LT50eXBlID0gQVJQSFJEX0FYMjU7ICAgICAgICAgICAvKiBBRl9BWDI1IGRldmljZSAqLwogCWRldi0+aGFyZF9oZWFkZXJfbGVuID0gQVgyNV9NQVhfSEVBREVSX0xFTiArIEFYMjVfQlBRX0hFQURFUl9MRU47CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9oYW1yYWRpby9icHFldGhlci5jIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vYnBxZXRoZXIuYwppbmRleCA0NmY4ZjMzLi5kNTA5YjM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9oYW1yYWRpby9icHFldGhlci5jCisrKyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2JwcWV0aGVyLmMKQEAgLTg3LDcgKzg3LDggQEAKIAogI2luY2x1ZGUgPGxpbnV4L2JwcWV0aGVyLmg+CiAKLXN0YXRpYyBjaGFyIGJhbm5lcltdIF9faW5pdGRhdGEgPSBLRVJOX0lORk8gIkFYLjI1OiBicHFldGhlciBkcml2ZXIgdmVyc2lvbiAwMDRcbiI7CitzdGF0aWMgY29uc3QgY2hhciBiYW5uZXJbXSBfX2luaXRkYXRhID0gS0VSTl9JTkZPIFwKKwkiQVguMjU6IGJwcWV0aGVyIGRyaXZlciB2ZXJzaW9uIDAwNFxuIjsKIAogc3RhdGljIGNoYXIgYmNhc3RfYWRkcls2XT17MHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkZ9OwogCkBAIC05Niw4ICs5Nyw4IEBACiBzdGF0aWMgaW50IGJwcV9yY3Yoc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IG5ldF9kZXZpY2UgKiwgc3RydWN0IHBhY2tldF90eXBlICosIHN0cnVjdCBuZXRfZGV2aWNlICopOwogc3RhdGljIGludCBicHFfZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqLCB1bnNpZ25lZCBsb25nLCB2b2lkICopOwogCi1zdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGJwcV9wYWNrZXRfdHlwZSA9IHsKLQkudHlwZQk9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfQlBRKSwKK3N0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgYnBxX3BhY2tldF90eXBlIF9fcmVhZF9tb3N0bHkgPSB7CisJLnR5cGUJPSBjcHVfdG9fYmUxNihFVEhfUF9CUFEpLAogCS5mdW5jCT0gYnBxX3JjdiwKIH07CiAKQEAgLTExMCw3ICsxMTEsNiBAQAogCXN0cnVjdCBsaXN0X2hlYWQgYnBxX2xpc3Q7CS8qIGxpc3Qgb2YgYnBxIGRldmljZXMgY2hhaW4gKi8KIAlzdHJ1Y3QgbmV0X2RldmljZSAqZXRoZGV2OwkvKiBsaW5rIHRvIGV0aGVybmV0IGRldmljZSAqLwogCXN0cnVjdCBuZXRfZGV2aWNlICpheGRldjsJLyogYnBxIGRldmljZSAoYnBxIykgKi8KLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsJLyogc29tZSBzdGF0aXN0aWNzICovCiAJY2hhciAgIGRlc3RfYWRkcls2XTsJCS8qIGV0aGVyIGRlc3RpbmF0aW9uIGFkZHJlc3MgKi8KIAljaGFyICAgYWNwdF9hZGRyWzZdOwkJLyogYWNjZXB0IGV0aGVyIGZyYW1lcyBmcm9tIHRoaXMgYWRkcmVzcyBvbmx5ICovCiB9OwpAQCAtMjIyLDggKzIyMiw4IEBACiAJc2tiX3B1bGwoc2tiLCAyKTsJLyogUmVtb3ZlIHRoZSBsZW5ndGggYnl0ZXMgKi8KIAlza2JfdHJpbShza2IsIGxlbik7CS8qIFNldCB0aGUgbGVuZ3RoIG9mIHRoZSBkYXRhICovCiAKLQlicHEtPnN0YXRzLnJ4X3BhY2tldHMrKzsKLQlicHEtPnN0YXRzLnJ4X2J5dGVzICs9IGxlbjsKKwlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IGxlbjsKIAogCXB0ciA9IHNrYl9wdXNoKHNrYiwgMSk7CiAJKnB0ciA9IDA7CkBAIC0yOTIsNyArMjkyLDcgQEAKIAlicHEgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJaWYgKChkZXYgPSBicHFfZ2V0X2V0aGVyX2RldihkZXYpKSA9PSBOVUxMKSB7Ci0JCWJwcS0+c3RhdHMudHhfZHJvcHBlZCsrOworCQlkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KQEAgLTMwMCw4ICszMDAsOCBAQAogCXNrYi0+cHJvdG9jb2wgPSBheDI1X3R5cGVfdHJhbnMoc2tiLCBkZXYpOwogCXNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpOwogCWRldl9oYXJkX2hlYWRlcihza2IsIGRldiwgRVRIX1BfQlBRLCBicHEtPmRlc3RfYWRkciwgTlVMTCwgMCk7Ci0JYnBxLT5zdGF0cy50eF9wYWNrZXRzKys7Ci0JYnBxLT5zdGF0cy50eF9ieXRlcys9c2tiLT5sZW47CisJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CisJZGV2LT5zdGF0cy50eF9ieXRlcys9c2tiLT5sZW47CiAgIAogCWRldl9xdWV1ZV94bWl0KHNrYik7CiAJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwpAQCAtMzA5LDE2ICszMDksNiBAQAogfQogCiAvKgotICoJU3RhdGlzdGljcwotICovCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmJwcV9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgYnBxZGV2ICpicHEgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JcmV0dXJuICZicHEtPnN0YXRzOwotfQotCi0vKgogICoJU2V0IEFYLjI1IGNhbGxzaWduCiAgKi8KIHN0YXRpYyBpbnQgYnBxX3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICphZGRyKQpAQCAtMzk2LDYgKzM4Niw3IEBACiAgKglQcm9jIGZpbGVzeXN0ZW0KICAqLwogc3RhdGljIHZvaWQgKmJwcV9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQorCV9fYWNxdWlyZXMoUkNVKQogewogCWludCBpID0gMTsKIAlzdHJ1Y3QgYnBxZGV2ICpicHFkZXY7CkBAIC00MjgsNiArNDE5LDcgQEAKIH0KIAogc3RhdGljIHZvaWQgYnBxX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQorCV9fcmVsZWFzZXMoUkNVKQogewogCXJjdV9yZWFkX3VubG9jaygpOwogfQpAQCAtNDU0LDcgKzQ0Niw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgYnBxX3NlcW9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgYnBxX3NlcW9wcyA9IHsKIAkuc3RhcnQgPSBicHFfc2VxX3N0YXJ0LAogCS5uZXh0ID0gYnBxX3NlcV9uZXh0LAogCS5zdG9wID0gYnBxX3NlcV9zdG9wLApAQCAtNDc3LDE2ICs0NjksMTcgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYnBxX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCSAgICAgPSBicHFfb3BlbiwKKwkubmRvX3N0b3AJICAgICA9IGJwcV9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJICAgICA9IGJwcV94bWl0LAorCS5uZG9fc2V0X21hY19hZGRyZXNzID0gYnBxX3NldF9tYWNfYWRkcmVzcywKKwkubmRvX2RvX2lvY3RsCSAgICAgPSBicHFfaW9jdGwsCit9OwogCiBzdGF0aWMgdm9pZCBicHFfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gYnBxX3htaXQ7Ci0JZGV2LT5vcGVuCSAgICAgPSBicHFfb3BlbjsKLQlkZXYtPnN0b3AJICAgICA9IGJwcV9jbG9zZTsKLQlkZXYtPnNldF9tYWNfYWRkcmVzcyA9IGJwcV9zZXRfbWFjX2FkZHJlc3M7Ci0JZGV2LT5nZXRfc3RhdHMJICAgICA9IGJwcV9nZXRfc3RhdHM7Ci0JZGV2LT5kb19pb2N0bAkgICAgID0gYnBxX2lvY3RsOworCWRldi0+bmV0ZGV2X29wcwkgICAgID0gJmJwcV9uZXRkZXZfb3BzOwogCWRldi0+ZGVzdHJ1Y3RvcgkgICAgID0gZnJlZV9uZXRkZXY7CiAKIAltZW1jcHkoZGV2LT5icm9hZGNhc3QsICZheDI1X2JjYXN0LCBBWDI1X0FERFJfTEVOKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2RtYXNjYy5jIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vZG1hc2NjLmMKaW5kZXggZTY3MTAzMy4uODgxYmY4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vZG1hc2NjLmMKKysrIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vZG1hc2NjLmMKQEAgLTE5NSw3ICsxOTUsNyBAQAogCWludCBjaGlwOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IHNjY19pbmZvICppbmZvOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOworCiAJaW50IGNoYW5uZWw7CiAJaW50IGNhcmRfYmFzZSwgc2NjX2NtZCwgc2NjX2RhdGE7CiAJaW50IHRtcl9jbnQsIHRtcl9jdHJsLCB0bXJfbW9kZTsKQEAgLTIzOSw3ICsyMzksNiBAQAogc3RhdGljIGludCBzY2NfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IHNjY19pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmciwgaW50IGNtZCk7CiBzdGF0aWMgaW50IHNjY19zZW5kX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc2NjX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgc2NjX3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpzYSk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB0eF9vbihzdHJ1Y3Qgc2NjX3ByaXYgKnByaXYpOwpAQCAtNDQxLDYgKzQ0MCwxMyBAQAogCW1lbWNweShkZXYtPmRldl9hZGRyLCAmYXgyNV9kZWZhZGRyLCBBWDI1X0FERFJfTEVOKTsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBzY2NfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4gPSBzY2Nfb3BlbiwKKwkubmRvX3N0b3AgPSBzY2NfY2xvc2UsCisJLm5kb19zdGFydF94bWl0ID0gc2NjX3NlbmRfcGFja2V0LAorCS5uZG9fZG9faW9jdGwgPSBzY2NfaW9jdGwsCit9OworCiBzdGF0aWMgaW50IF9faW5pdCBzZXR1cF9hZGFwdGVyKGludCBjYXJkX2Jhc2UsIGludCB0eXBlLCBpbnQgbikKIHsKIAlpbnQgaSwgaXJxLCBjaGlwOwpAQCAtNTc2LDExICs1ODIsNyBAQAogCQlzcHJpbnRmKGRldi0+bmFtZSwgImRtYXNjYyVpIiwgMiAqIG4gKyBpKTsKIAkJZGV2LT5iYXNlX2FkZHIgPSBjYXJkX2Jhc2U7CiAJCWRldi0+aXJxID0gaXJxOwotCQlkZXYtPm9wZW4gPSBzY2Nfb3BlbjsKLQkJZGV2LT5zdG9wID0gc2NjX2Nsb3NlOwotCQlkZXYtPmRvX2lvY3RsID0gc2NjX2lvY3RsOwotCQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IHNjY19zZW5kX3BhY2tldDsKLQkJZGV2LT5nZXRfc3RhdHMgPSBzY2NfZ2V0X3N0YXRzOworCQlkZXYtPm5ldGRldl9vcHMgPSAmc2NjX25ldGRldl9vcHM7CiAJCWRldi0+aGVhZGVyX29wcyA9ICZheDI1X2hlYWRlcl9vcHM7CiAJCWRldi0+c2V0X21hY19hZGRyZXNzID0gc2NjX3NldF9tYWNfYWRkcmVzczsKIAl9CkBAIC05NjEsMTQgKzk2Myw2IEBACiB9CiAKIAotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzY2NfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHNjY19wcml2ICpwcml2ID0gZGV2LT5tbF9wcml2OwotCi0JcmV0dXJuICZwcml2LT5zdGF0czsKLX0KLQotCiBzdGF0aWMgaW50IHNjY19zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqc2EpCiB7CiAJbWVtY3B5KGRldi0+ZGV2X2FkZHIsICgoc3RydWN0IHNvY2thZGRyICopIHNhKS0+c2FfZGF0YSwKQEAgLTEyMTYsMTcgKzEyMTAsMTcgQEAKIAkJfQogCQlpZiAocHJpdi0+cnhfb3ZlcikgewogCQkJLyogV2UgaGFkIGFuIG92ZXJydW4gKi8KLQkJCXByaXYtPnN0YXRzLnJ4X2Vycm9ycysrOworCQkJcHJpdi0+ZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJCWlmIChwcml2LT5yeF9vdmVyID09IDIpCi0JCQkJcHJpdi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOworCQkJCXByaXYtPmRldi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOwogCQkJZWxzZQotCQkJCXByaXYtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzKys7CisJCQkJcHJpdi0+ZGV2LT5zdGF0cy5yeF9maWZvX2Vycm9ycysrOwogCQkJcHJpdi0+cnhfb3ZlciA9IDA7CiAJCX0gZWxzZSBpZiAocmMgJiBDUkNfRVJSKSB7CiAJCQkvKiBDb3VudCBpbnZhbGlkIENSQyBvbmx5IGlmIHBhY2tldCBsZW5ndGggPj0gbWluaW11bSAqLwogCQkJaWYgKGNiID49IDE1KSB7Ci0JCQkJcHJpdi0+c3RhdHMucnhfZXJyb3JzKys7Ci0JCQkJcHJpdi0+c3RhdHMucnhfY3JjX2Vycm9ycysrOworCQkJCXByaXYtPmRldi0+c3RhdHMucnhfZXJyb3JzKys7CisJCQkJcHJpdi0+ZGV2LT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CiAJCQl9CiAJCX0gZWxzZSB7CiAJCQlpZiAoY2IgPj0gMTUpIHsKQEAgLTEyMzksOCArMTIzMyw4IEBACiAJCQkJCXByaXYtPnJ4X2NvdW50Kys7CiAJCQkJCXNjaGVkdWxlX3dvcmsoJnByaXYtPnJ4X3dvcmspOwogCQkJCX0gZWxzZSB7Ci0JCQkJCXByaXYtPnN0YXRzLnJ4X2Vycm9ycysrOwotCQkJCQlwcml2LT5zdGF0cy5yeF9vdmVyX2Vycm9ycysrOworCQkJCQlwcml2LT5kZXYtPnN0YXRzLnJ4X2Vycm9ycysrOworCQkJCQlwcml2LT5kZXYtPnN0YXRzLnJ4X292ZXJfZXJyb3JzKys7CiAJCQkJfQogCQkJfQogCQl9CkBAIC0xMjc1LDcgKzEyNjksNyBAQAogCQlza2IgPSBkZXZfYWxsb2Nfc2tiKGNiICsgMSk7CiAJCWlmIChza2IgPT0gTlVMTCkgewogCQkJLyogRHJvcCBwYWNrZXQgKi8KLQkJCXByaXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJCXByaXYtPmRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQl9IGVsc2UgewogCQkJLyogRmlsbCBidWZmZXIgKi8KIAkJCWRhdGEgPSBza2JfcHV0KHNrYiwgY2IgKyAxKTsKQEAgLTEyODMsOCArMTI3Nyw4IEBACiAJCQltZW1jcHkoJmRhdGFbMV0sIHByaXYtPnJ4X2J1ZltpXSwgY2IpOwogCQkJc2tiLT5wcm90b2NvbCA9IGF4MjVfdHlwZV90cmFucyhza2IsIHByaXYtPmRldik7CiAJCQluZXRpZl9yeChza2IpOwotCQkJcHJpdi0+c3RhdHMucnhfcGFja2V0cysrOwotCQkJcHJpdi0+c3RhdHMucnhfYnl0ZXMgKz0gY2I7CisJCQlwcml2LT5kZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwkJCXByaXYtPmRldi0+c3RhdHMucnhfYnl0ZXMgKz0gY2I7CiAJCX0KIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnJpbmdfbG9jaywgZmxhZ3MpOwogCQkvKiBNb3ZlIHRhaWwgKi8KQEAgLTEzNTEsMTUgKzEzNDUsMTUgQEAKIAkJCXdyaXRlX3NjYyhwcml2LCBSMSwgRVhUX0lOVF9FTkFCIHwgV1RfRk5fUkRZRk4pOwogCQlpZiAocmVzKSB7CiAJCQkvKiBVcGRhdGUgcGFja2V0IHN0YXRpc3RpY3MgKi8KLQkJCXByaXYtPnN0YXRzLnR4X2Vycm9ycysrOwotCQkJcHJpdi0+c3RhdHMudHhfZmlmb19lcnJvcnMrKzsKKwkJCXByaXYtPmRldi0+c3RhdHMudHhfZXJyb3JzKys7CisJCQlwcml2LT5kZXYtPnN0YXRzLnR4X2ZpZm9fZXJyb3JzKys7CiAJCQkvKiBPdGhlciB1bmRlcnJ1biBpbnRlcnJ1cHRzIG1heSBhbHJlYWR5IGJlIHdhaXRpbmcgKi8KIAkJCXdyaXRlX3NjYyhwcml2LCBSMCwgUkVTX0VYVF9JTlQpOwogCQkJd3JpdGVfc2NjKHByaXYsIFIwLCBSRVNfRVhUX0lOVCk7CiAJCX0gZWxzZSB7CiAJCQkvKiBVcGRhdGUgcGFja2V0IHN0YXRpc3RpY3MgKi8KLQkJCXByaXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKLQkJCXByaXYtPnN0YXRzLnR4X2J5dGVzICs9IHByaXYtPnR4X2xlbltpXTsKKwkJCXByaXYtPmRldi0+c3RhdHMudHhfcGFja2V0cysrOworCQkJcHJpdi0+ZGV2LT5zdGF0cy50eF9ieXRlcyArPSBwcml2LT50eF9sZW5baV07CiAJCQkvKiBSZW1vdmUgZnJhbWUgZnJvbSBGSUZPICovCiAJCQlwcml2LT50eF90YWlsID0gKGkgKyAxKSAlIE5VTV9UWF9CVUY7CiAJCQlwcml2LT50eF9jb3VudC0tOwpAQCAtMTQyNSw3ICsxNDE5LDcgQEAKIAkJd3JpdGVfc2NjKHByaXYsIFIxNSwgRENESUUpOwogCQlwcml2LT5ycjAgPSByZWFkX3NjYyhwcml2LCBSMCk7CiAJCWlmIChwcml2LT5ycjAgJiBEQ0QpIHsKLQkJCXByaXYtPnN0YXRzLmNvbGxpc2lvbnMrKzsKKwkJCXByaXYtPmRldi0+c3RhdHMuY29sbGlzaW9ucysrOwogCQkJcnhfb24ocHJpdik7CiAJCQlwcml2LT5zdGF0ZSA9IFJYX09OOwogCQl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vaGRsY2Rydi5jIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vaGRsY2Rydi5jCmluZGV4IDhlYmE2MWExLi42MWRlNTZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9oYW1yYWRpby9oZGxjZHJ2LmMKKysrIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vaGRsY2Rydi5jCkBAIC0xNTQsNyArMTU0LDcgQEAKIAlwa3RfbGVuID0gcy0+aGRsY3J4LmxlbiAtIDIgKyAxOyAvKiBLSVNTIGtsdWRnZSAqLwogCWlmICghKHNrYiA9IGRldl9hbGxvY19za2IocGt0X2xlbikpKSB7CiAJCXByaW50aygiJXM6IG1lbW9yeSBzcXVlZXplLCBkcm9wcGluZyBwYWNrZXRcbiIsIGRldi0+bmFtZSk7Ci0JCXMtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCXJldHVybjsKIAl9CiAJY3AgPSBza2JfcHV0KHNrYiwgcGt0X2xlbik7CkBAIC0xNjIsNyArMTYyLDcgQEAKIAltZW1jcHkoY3AsIHMtPmhkbGNyeC5idWZmZXIsIHBrdF9sZW4gLSAxKTsKIAlza2ItPnByb3RvY29sID0gYXgyNV90eXBlX3RyYW5zKHNrYiwgZGV2KTsKIAluZXRpZl9yeChza2IpOwotCXMtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKIH0KIAogdm9pZCBoZGxjZHJ2X3JlY2VpdmVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBoZGxjZHJ2X3N0YXRlICpzKQpAQCAtMzI2LDcgKzMyNiw3IEBACiAJCQlzLT5oZGxjdHgubGVuID0gcGt0X2xlbisyOyAvKiB0aGUgYXBwZW5kZWQgQ1JDICovCiAJCQlzLT5oZGxjdHgudHhfc3RhdGUgPSAyOwogCQkJcy0+aGRsY3R4LmJpdHN0cmVhbSA9IDA7Ci0JCQlzLT5zdGF0cy50eF9wYWNrZXRzKys7CisJCQlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKIAkJCWJyZWFrOwogCQljYXNlIDI6CiAJCQlpZiAoIXMtPmhkbGN0eC5sZW4pIHsKQEAgLTQyNywxOSArNDI3LDYgQEAKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqaGRsY2Rydl9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgaGRsY2Rydl9zdGF0ZSAqc20gPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JLyogCi0JICogR2V0IHRoZSBjdXJyZW50IHN0YXRpc3RpY3MuICBUaGlzIG1heSBiZSBjYWxsZWQgd2l0aCB0aGUKLQkgKiBjYXJkIG9wZW4gb3IgY2xvc2VkLiAKLQkgKi8KLQlyZXR1cm4gJnNtLT5zdGF0czsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKgogICogT3Blbi9pbml0aWFsaXplIHRoZSBib2FyZC4gVGhpcyBpcyBjYWxsZWQgKGluIHRoZSBjdXJyZW50IGtlcm5lbCkKICAqIHNvbWV0aW1lIGFmdGVyIGJvb3Rpbmcgd2hlbiB0aGUgJ2lmY29uZmlnJyBwcm9ncmFtIGlzIHJ1bi4KQEAgLTU2OCwxMCArNTU1LDEwIEBACiAJCWJpLmRhdGEuY3MucHR0ID0gaGRsY2Rydl9wdHQocyk7CiAJCWJpLmRhdGEuY3MuZGNkID0gcy0+aGRsY3J4LmRjZDsKIAkJYmkuZGF0YS5jcy5wdHRfa2V5ZWQgPSBzLT5wdHRfa2V5ZWQ7Ci0JCWJpLmRhdGEuY3MudHhfcGFja2V0cyA9IHMtPnN0YXRzLnR4X3BhY2tldHM7Ci0JCWJpLmRhdGEuY3MudHhfZXJyb3JzID0gcy0+c3RhdHMudHhfZXJyb3JzOwotCQliaS5kYXRhLmNzLnJ4X3BhY2tldHMgPSBzLT5zdGF0cy5yeF9wYWNrZXRzOwotCQliaS5kYXRhLmNzLnJ4X2Vycm9ycyA9IHMtPnN0YXRzLnJ4X2Vycm9yczsKKwkJYmkuZGF0YS5jcy50eF9wYWNrZXRzID0gZGV2LT5zdGF0cy50eF9wYWNrZXRzOworCQliaS5kYXRhLmNzLnR4X2Vycm9ycyA9IGRldi0+c3RhdHMudHhfZXJyb3JzOworCQliaS5kYXRhLmNzLnJ4X3BhY2tldHMgPSBkZXYtPnN0YXRzLnJ4X3BhY2tldHM7CisJCWJpLmRhdGEuY3MucnhfZXJyb3JzID0gZGV2LT5zdGF0cy5yeF9lcnJvcnM7CiAJCWJyZWFrOwkJCiAKIAljYXNlIEhETENEUlZDVExfT0xER0VUU1RBVDoKQEAgLTYzMCw2ICs2MTcsMTQgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaGRsY2Rydl9uZXRkZXYgPSB7CisJLm5kb19vcGVuCT0gaGRsY2Rydl9vcGVuLAorCS5uZG9fc3RvcAk9IGhkbGNkcnZfY2xvc2UsCisJLm5kb19zdGFydF94bWl0ID0gaGRsY2Rydl9zZW5kX3BhY2tldCwKKwkubmRvX2RvX2lvY3RsCT0gaGRsY2Rydl9pb2N0bCwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyA9IGhkbGNkcnZfc2V0X21hY19hZGRyZXNzLAorfTsKKwogLyoKICAqIEluaXRpYWxpemUgZmllbGRzIGluIGhkbGNkcnYKICAqLwpAQCAtNjY5LDIxICs2NjQsMTMgQEAKIAlzLT5iaXRidWZfaGRsYy5zaHJlZyA9IDB4ODA7CiAjZW5kaWYgLyogSERMQ0RSVl9ERUJVRyAqLwogCi0JLyoKLQkgKiBpbml0aWFsaXplIHRoZSBkZXZpY2Ugc3RydWN0Ci0JICovCi0JZGV2LT5vcGVuID0gaGRsY2Rydl9vcGVuOwotCWRldi0+c3RvcCA9IGhkbGNkcnZfY2xvc2U7Ci0JZGV2LT5kb19pb2N0bCA9IGhkbGNkcnZfaW9jdGw7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBoZGxjZHJ2X3NlbmRfcGFja2V0OwotCWRldi0+Z2V0X3N0YXRzID0gaGRsY2Rydl9nZXRfc3RhdHM7CiAKIAkvKiBGaWxsIGluIHRoZSBmaWVsZHMgb2YgdGhlIGRldmljZSBzdHJ1Y3R1cmUgKi8KIAogCXMtPnNrYiA9IE5VTEw7CiAJCisJZGV2LT5uZXRkZXZfb3BzID0gJmhkbGNkcnZfbmV0ZGV2OwogCWRldi0+aGVhZGVyX29wcyA9ICZheDI1X2hlYWRlcl9vcHM7Ci0JZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSBoZGxjZHJ2X3NldF9tYWNfYWRkcmVzczsKIAkKIAlkZXYtPnR5cGUgPSBBUlBIUkRfQVgyNTsgICAgICAgICAgIC8qIEFGX0FYMjUgZGV2aWNlICovCiAJZGV2LT5oYXJkX2hlYWRlcl9sZW4gPSBBWDI1X01BWF9IRUFERVJfTEVOICsgQVgyNV9CUFFfSEVBREVSX0xFTjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL21raXNzLmMgYi9kcml2ZXJzL25ldC9oYW1yYWRpby9ta2lzcy5jCmluZGV4IGJiZGIzMTEuLjAzMmMwZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL21raXNzLmMKKysrIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vbWtpc3MuYwpAQCAtNTksOCArNTksNiBAQAogCXVuc2lnbmVkIGNoYXIJCSp4aGVhZDsJLyogcG9pbnRlciB0byBuZXh0IGJ5dGUgdG8gWE1JVCAqLwogCWludAkJCXhsZWZ0OwkvKiBieXRlcyBsZWZ0IGluIFhNSVQgcXVldWUgICAgICovCiAKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cwlzdGF0czsKLQogCS8qIERldGFpbGVkIFNMSVAgc3RhdGlzdGljcy4gKi8KIAlpbnQJCW10dTsJCS8qIE91ciBtdHUgKHRvIHNwb3QgY2hhbmdlcyEpICAgKi8KIAlpbnQJCWJ1ZmZzaXplOwkvKiBNYXggYnVmZmVycyBzaXplcyAgICAgICAgICAgICovCkBAIC0yNTMsNyArMjUxLDcgQEAKIAlpZiAoYXgtPnJidWZmWzBdID4gMHgwZikgewogCQlpZiAoYXgtPnJidWZmWzBdICYgMHg4MCkgewogCQkJaWYgKGNoZWNrX2NyY18xNihheC0+cmJ1ZmYsIGF4LT5yY291bnQpIDwgMCkgewotCQkJCWF4LT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJCQlheC0+ZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJCQlzcGluX3VubG9ja19iaCgmYXgtPmJ1ZmxvY2spOwogCiAJCQkJcmV0dXJuOwpAQCAtMjY4LDcgKzI2Niw3IEBACiAJCQkqYXgtPnJidWZmICY9IH4weDgwOwogCQl9IGVsc2UgaWYgKGF4LT5yYnVmZlswXSAmIDB4MjApICB7CiAJCQlpZiAoY2hlY2tfY3JjX2ZsZXgoYXgtPnJidWZmLCBheC0+cmNvdW50KSA8IDApIHsKLQkJCQlheC0+c3RhdHMucnhfZXJyb3JzKys7CisJCQkJYXgtPmRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJCQkJc3Bpbl91bmxvY2tfYmgoJmF4LT5idWZsb2NrKTsKIAkJCQlyZXR1cm47CiAJCQl9CkBAIC0yOTUsNyArMjkzLDcgQEAKIAlpZiAoKHNrYiA9IGRldl9hbGxvY19za2IoY291bnQpKSA9PSBOVUxMKSB7CiAJCXByaW50ayhLRVJOX0VSUiAibWtpc3M6ICVzOiBtZW1vcnkgc3F1ZWV6ZSwgZHJvcHBpbmcgcGFja2V0LlxuIiwKIAkJICAgICAgIGF4LT5kZXYtPm5hbWUpOwotCQlheC0+c3RhdHMucnhfZHJvcHBlZCsrOworCQlheC0+ZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCXNwaW5fdW5sb2NrX2JoKCZheC0+YnVmbG9jayk7CiAJCXJldHVybjsKIAl9CkBAIC0zMDMsOCArMzAxLDggQEAKIAltZW1jcHkoc2tiX3B1dChza2IsY291bnQpLCBheC0+cmJ1ZmYsIGNvdW50KTsKIAlza2ItPnByb3RvY29sID0gYXgyNV90eXBlX3RyYW5zKHNrYiwgYXgtPmRldik7CiAJbmV0aWZfcngoc2tiKTsKLQlheC0+c3RhdHMucnhfcGFja2V0cysrOwotCWF4LT5zdGF0cy5yeF9ieXRlcyArPSBjb3VudDsKKwlheC0+ZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJYXgtPmRldi0+c3RhdHMucnhfYnl0ZXMgKz0gY291bnQ7CiAJc3Bpbl91bmxvY2tfYmgoJmF4LT5idWZsb2NrKTsKIH0KIApAQCAtMzQ0LDcgKzM0Miw3IEBACiAJCQlyZXR1cm47CiAJCX0KIAotCQlheC0+c3RhdHMucnhfb3Zlcl9lcnJvcnMrKzsKKwkJYXgtPmRldi0+c3RhdHMucnhfb3Zlcl9lcnJvcnMrKzsKIAkJc2V0X2JpdChBWEZfRVJST1IsICZheC0+ZmxhZ3MpOwogCX0KIAlzcGluX3VubG9ja19iaCgmYXgtPmJ1ZmxvY2spOwpAQCAtNDA2LDcgKzQwNCw3IEBACiAJCQltZW1jcHkoYXgtPnhidWZmLCBheC0+eGhlYWQsIGF4LT54bGVmdCk7CiAJCX0gZWxzZSAgewogCQkJYXgtPnhsZWZ0ID0gMDsKLQkJCWF4LT5zdGF0cy50eF9kcm9wcGVkKys7CisJCQlkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJfQogCX0KIApAQCAtNDE3LDcgKzQxNSw3IEBACiAJCQltZW1jcHkoYXgtPnJidWZmLCBvcmJ1ZmYsIGF4LT5yY291bnQpOwogCQl9IGVsc2UgIHsKIAkJCWF4LT5yY291bnQgPSAwOwotCQkJYXgtPnN0YXRzLnJ4X292ZXJfZXJyb3JzKys7CisJCQlkZXYtPnN0YXRzLnJ4X292ZXJfZXJyb3JzKys7CiAJCQlzZXRfYml0KEFYRl9FUlJPUiwgJmF4LT5mbGFncyk7CiAJCX0KIAl9CkBAIC00NDQsNyArNDQyLDcgQEAKIAlpZiAobGVuID4gYXgtPm10dSkgewkJLyogU2lnaCwgc2hvdWxkbid0IG9jY3VyIEJVVCAuLi4gKi8KIAkJbGVuID0gYXgtPm10dTsKIAkJcHJpbnRrKEtFUk5fRVJSICJta2lzczogJXM6IHRydW5jYXRpbmcgb3ZlcnNpemVkIHRyYW5zbWl0IHBhY2tldCFcbiIsIGF4LT5kZXYtPm5hbWUpOwotCQlheC0+c3RhdHMudHhfZHJvcHBlZCsrOworCQlkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKIAkJcmV0dXJuOwogCX0KQEAgLTUxOCw4ICs1MTYsOCBAQAogCiAJc2V0X2JpdChUVFlfRE9fV1JJVEVfV0FLRVVQLCAmYXgtPnR0eS0+ZmxhZ3MpOwogCWFjdHVhbCA9IGF4LT50dHktPm9wcy0+d3JpdGUoYXgtPnR0eSwgYXgtPnhidWZmLCBjb3VudCk7Ci0JYXgtPnN0YXRzLnR4X3BhY2tldHMrKzsKLQlheC0+c3RhdHMudHhfYnl0ZXMgKz0gYWN0dWFsOworCWRldi0+c3RhdHMudHhfcGFja2V0cysrOworCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gYWN0dWFsOwogCiAJYXgtPmRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCWF4LT54bGVmdCA9IGNvdW50IC0gYWN0dWFsOwpAQCAtNjY0LDMyICs2NjIsMjggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpheF9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgbWtpc3MgKmF4ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCXJldHVybiAmYXgtPnN0YXRzOwotfQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IGhlYWRlcl9vcHMgYXhfaGVhZGVyX29wcyA9IHsKIAkuY3JlYXRlICAgID0gYXhfaGVhZGVyLAogCS5yZWJ1aWxkICAgPSBheF9yZWJ1aWxkX2hlYWRlciwKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYXhfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4gICAgICAgICAgICA9IGF4X29wZW5fZGV2LAorCS5uZG9fc3RvcCAgICAgICAgICAgID0gYXhfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CSAgICAgPSBheF94bWl0LAorCS5uZG9fc2V0X21hY19hZGRyZXNzID0gYXhfc2V0X21hY19hZGRyZXNzLAorfTsKKwogc3RhdGljIHZvaWQgYXhfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAkvKiBGaW5pc2ggc2V0dGluZyB1cCB0aGUgREVWSUNFIGluZm8uICovCiAJZGV2LT5tdHUgICAgICAgICAgICAgPSBBWF9NVFU7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBheF94bWl0OwotCWRldi0+b3BlbiAgICAgICAgICAgID0gYXhfb3Blbl9kZXY7Ci0JZGV2LT5zdG9wICAgICAgICAgICAgPSBheF9jbG9zZTsKLQlkZXYtPmdldF9zdGF0cwkgICAgID0gYXhfZ2V0X3N0YXRzOwotCWRldi0+c2V0X21hY19hZGRyZXNzID0gYXhfc2V0X21hY19hZGRyZXNzOwogCWRldi0+aGFyZF9oZWFkZXJfbGVuID0gMDsKIAlkZXYtPmFkZHJfbGVuICAgICAgICA9IDA7CiAJZGV2LT50eXBlICAgICAgICAgICAgPSBBUlBIUkRfQVgyNTsKIAlkZXYtPnR4X3F1ZXVlX2xlbiAgICA9IDEwOwogCWRldi0+aGVhZGVyX29wcyAgICAgID0gJmF4X2hlYWRlcl9vcHM7CisJZGV2LT5uZXRkZXZfb3BzCSAgICAgPSAmYXhfbmV0ZGV2X29wczsKIAogCiAJbWVtY3B5KGRldi0+YnJvYWRjYXN0LCAmYXgyNV9iY2FzdCwgQVgyNV9BRERSX0xFTik7CkBAIC05MjksNyArOTIzLDcgQEAKIAl3aGlsZSAoY291bnQtLSkgewogCQlpZiAoZnAgIT0gTlVMTCAmJiAqZnArKykgewogCQkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KEFYRl9FUlJPUiwgJmF4LT5mbGFncykpCi0JCQkJYXgtPnN0YXRzLnJ4X2Vycm9ycysrOworCQkJCWF4LT5kZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQkJY3ArKzsKIAkJCWNvbnRpbnVlOwogCQl9CkBAIC05ODIsOSArOTc2LDkgQEAKIAkud3JpdGVfd2FrZXVwCT0gbWtpc3Nfd3JpdGVfd2FrZXVwCiB9OwogCi1zdGF0aWMgY2hhciBiYW5uZXJbXSBfX2luaXRkYXRhID0gS0VSTl9JTkZPIFwKK3N0YXRpYyBjb25zdCBjaGFyIGJhbm5lcltdIF9faW5pdGRhdGEgPSBLRVJOX0lORk8gXAogCSJta2lzczogQVguMjUgTXVsdGlraXNzLCBIYW5zIEFsYmFzIFBFMUFZWFxuIjsKLXN0YXRpYyBjaGFyIG1zZ19yZWdmYWlsW10gX19pbml0ZGF0YSA9IEtFUk5fRVJSIFwKK3N0YXRpYyBjb25zdCBjaGFyIG1zZ19yZWdmYWlsW10gX19pbml0ZGF0YSA9IEtFUk5fRVJSIFwKIAkibWtpc3M6IGNhbid0IHJlZ2lzdGVyIGxpbmUgZGlzY2lwbGluZSAoZXJyID0gJWQpXG4iOwogCiBzdGF0aWMgaW50IF9faW5pdCBta2lzc19pbml0X2RyaXZlcih2b2lkKQpAQCAtOTkzLDggKzk4Nyw5IEBACiAKIAlwcmludGsoYmFubmVyKTsKIAotCWlmICgoc3RhdHVzID0gdHR5X3JlZ2lzdGVyX2xkaXNjKE5fQVgyNSwgJmF4X2xkaXNjKSkgIT0gMCkKLQkJcHJpbnRrKG1zZ19yZWdmYWlsKTsKKwlzdGF0dXMgPSB0dHlfcmVnaXN0ZXJfbGRpc2MoTl9BWDI1LCAmYXhfbGRpc2MpOworCWlmIChzdGF0dXMgIT0gMCkKKwkJcHJpbnRrKG1zZ19yZWdmYWlsLCBzdGF0dXMpOwogCiAJcmV0dXJuIHN0YXR1czsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL3NjYy5jIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vc2NjLmMKaW5kZXggYzAxMWFmNy4uZDcxMmU3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vc2NjLmMKKysrIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vc2NjLmMKQEAgLTE4NCw3ICsxODQsOCBAQAogCiAjaW5jbHVkZSAiejg1MzAuaCIKIAotc3RhdGljIGNoYXIgYmFubmVyW10gX19pbml0ZGF0YSA9IEtFUk5fSU5GTyAiQVguMjU6IFo4NTMwIFNDQyBkcml2ZXIgdmVyc2lvbiAiVkVSU0lPTiIuZGwxYmtlXG4iOworc3RhdGljIGNvbnN0IGNoYXIgYmFubmVyW10gX19pbml0ZGF0YSA9IEtFUk5fSU5GTyBcCisJIkFYLjI1OiBaODUzMCBTQ0MgZHJpdmVyIHZlcnNpb24gIlZFUlNJT04iLmRsMWJrZVxuIjsKIAogc3RhdGljIHZvaWQgdF9kd2FpdCh1bnNpZ25lZCBsb25nKTsKIHN0YXRpYyB2b2lkIHRfdHhkZWxheSh1bnNpZ25lZCBsb25nKTsKQEAgLTE1NDIsMjMgKzE1NDMsMjQgQEAKIC8qICoJCQkgICAgTmV0d29yayBkcml2ZXIgbWV0aG9kcwkJICAgICAgKiAqLwogLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBzY2NfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4gICAgICAgICAgICA9IHNjY19uZXRfb3BlbiwKKwkubmRvX3N0b3AJICAgICA9IHNjY19uZXRfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CSAgICAgPSBzY2NfbmV0X3R4LAorCS5uZG9fc2V0X21hY19hZGRyZXNzID0gc2NjX25ldF9zZXRfbWFjX2FkZHJlc3MsCisJLm5kb19nZXRfc3RhdHMgICAgICAgPSBzY2NfbmV0X2dldF9zdGF0cywKKwkubmRvX2RvX2lvY3RsICAgICAgICA9IHNjY19uZXRfaW9jdGwsCit9OworCiAvKiAtLS0tPiBJbml0aWFsaXplIGRldmljZSA8LS0tLS0gKi8KIAogc3RhdGljIHZvaWQgc2NjX25ldF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCWRldi0+dHhfcXVldWVfbGVuICAgID0gMTY7CS8qIHNob3VsZCBiZSBlbm91Z2guLi4gKi8KIAotCWRldi0+b3BlbiAgICAgICAgICAgID0gc2NjX25ldF9vcGVuOwotCWRldi0+c3RvcAkgICAgID0gc2NjX25ldF9jbG9zZTsKLQotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gc2NjX25ldF90eDsKKwlkZXYtPm5ldGRldl9vcHMJICAgICA9ICZzY2NfbmV0ZGV2X29wczsKIAlkZXYtPmhlYWRlcl9vcHMgICAgICA9ICZheDI1X2hlYWRlcl9vcHM7CiAKLQlkZXYtPnNldF9tYWNfYWRkcmVzcyA9IHNjY19uZXRfc2V0X21hY19hZGRyZXNzOwotCWRldi0+Z2V0X3N0YXRzICAgICAgID0gc2NjX25ldF9nZXRfc3RhdHM7Ci0JZGV2LT5kb19pb2N0bCAgICAgICAgPSBzY2NfbmV0X2lvY3RsOwotCWRldi0+dHhfdGltZW91dCAgICAgID0gTlVMTDsKLQogCW1lbWNweShkZXYtPmJyb2FkY2FzdCwgJmF4MjVfYmNhc3QsICBBWDI1X0FERFJfTEVOKTsKIAltZW1jcHkoZGV2LT5kZXZfYWRkciwgICZheDI1X2RlZmFkZHIsIEFYMjVfQUREUl9MRU4pOwogIApAQCAtMjA3Myw3ICsyMDc1LDcgQEAKICAgICAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgc2NjX25ldF9zZXFfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBzY2NfbmV0X3NlcV9vcHMgPSB7CiAJLnN0YXJ0ICA9IHNjY19uZXRfc2VxX3N0YXJ0LAogCS5uZXh0ICAgPSBzY2NfbmV0X3NlcV9uZXh0LAogCS5zdG9wICAgPSBzY2NfbmV0X3NlcV9zdG9wLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaGFtcmFkaW8veWFtLmMgYi9kcml2ZXJzL25ldC9oYW1yYWRpby95YW0uYwppbmRleCA1NDA3Zjc0Li41MDBhNDBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9oYW1yYWRpby95YW0uYworKysgYi9kcml2ZXJzL25ldC9oYW1yYWRpby95YW0uYwpAQCAtNzcsNyArNzcsOCBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyBjb25zdCBjaGFyIHlhbV9kcnZuYW1lW10gPSAieWFtIjsKLXN0YXRpYyBjaGFyIHlhbV9kcnZpbmZvW10gX19pbml0ZGF0YSA9IEtFUk5fSU5GTyAiWUFNIGRyaXZlciB2ZXJzaW9uIDAuOCBieSBGMU9BVC9GNkZCQlxuIjsKK3N0YXRpYyBjb25zdCBjaGFyIHlhbV9kcnZpbmZvW10gX19pbml0ZGF0YSA9IEtFUk5fSU5GTyBcCisJIllBTSBkcml2ZXIgdmVyc2lvbiAwLjggYnkgRjFPQVQvRjZGQkJcbiI7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCkBAIC0xMTUsMTAgKzExNiw2IEBACiAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCi0JLyogU3RhdHMgc2VjdGlvbiAqLwotCi0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7Ci0KIAlpbnQgbmJfcnhpbnQ7CiAJaW50IG5iX21kaW50OwogCkBAIC01MDcsNyArNTA0LDcgQEAKIAkJfSBlbHNlIHsKIAkJCWlmICghKHNrYiA9IGRldl9hbGxvY19za2IocGt0X2xlbikpKSB7CiAJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IG1lbW9yeSBzcXVlZXplLCBkcm9wcGluZyBwYWNrZXRcbiIsIGRldi0+bmFtZSk7Ci0JCQkJKyt5cC0+c3RhdHMucnhfZHJvcHBlZDsKKwkJCQkrK2Rldi0+c3RhdHMucnhfZHJvcHBlZDsKIAkJCX0gZWxzZSB7CiAJCQkJdW5zaWduZWQgY2hhciAqY3A7CiAJCQkJY3AgPSBza2JfcHV0KHNrYiwgcGt0X2xlbik7CkBAIC01MTUsNyArNTEyLDcgQEAKIAkJCQltZW1jcHkoY3AsIHlwLT5yeF9idWYsIHBrdF9sZW4gLSAxKTsKIAkJCQlza2ItPnByb3RvY29sID0gYXgyNV90eXBlX3RyYW5zKHNrYiwgZGV2KTsKIAkJCQluZXRpZl9yeChza2IpOwotCQkJCSsreXAtPnN0YXRzLnJ4X3BhY2tldHM7CisJCQkJKytkZXYtPnN0YXRzLnJ4X3BhY2tldHM7CiAJCQl9CiAJCX0KIAl9CkBAIC02NzcsNyArNjc0LDcgQEAKIAkJCXlwLT50eF9jb3VudCA9IDE7CiAJCQl5cC0+dHhfc3RhdGUgPSBUWF9IRUFEOwogCQl9Ci0JCSsreXAtPnN0YXRzLnR4X3BhY2tldHM7CisJCSsrZGV2LT5zdGF0cy50eF9wYWNrZXRzOwogCQlicmVhazsKIAljYXNlIFRYX1RBSUw6CiAJCWlmICgtLXlwLT50eF9jb3VudCA8PSAwKSB7CkBAIC03MTYsNyArNzEzLDcgQEAKIAkJCWhhbmRsZWQgPSAxOwogCiAJCQlpZiAobHNyICYgTFNSX09FKQotCQkJCSsreXAtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzOworCQkJCSsrZGV2LT5zdGF0cy5yeF9maWZvX2Vycm9yczsKIAogCQkJeXAtPmRjZCA9IChtc3IgJiBSWF9EQ0QpID8gMSA6IDA7CiAKQEAgLTc3OCwxNiArNzc1LDE2IEBACiAJc2VxX3ByaW50ZihzZXEsICIgIFR4VGFpbCAgICV1XG4iLCB5cC0+dHh0YWlsKTsKIAlzZXFfcHJpbnRmKHNlcSwgIiAgU2xvdFRpbWUgJXVcbiIsIHlwLT5zbG90KTsKIAlzZXFfcHJpbnRmKHNlcSwgIiAgUGVyc2lzdCAgJXVcbiIsIHlwLT5wZXJzKTsKLQlzZXFfcHJpbnRmKHNlcSwgIiAgVHhGcmFtZXMgJWx1XG4iLCB5cC0+c3RhdHMudHhfcGFja2V0cyk7Ci0Jc2VxX3ByaW50ZihzZXEsICIgIFJ4RnJhbWVzICVsdVxuIiwgeXAtPnN0YXRzLnJ4X3BhY2tldHMpOworCXNlcV9wcmludGYoc2VxLCAiICBUeEZyYW1lcyAlbHVcbiIsIGRldi0+c3RhdHMudHhfcGFja2V0cyk7CisJc2VxX3ByaW50ZihzZXEsICIgIFJ4RnJhbWVzICVsdVxuIiwgZGV2LT5zdGF0cy5yeF9wYWNrZXRzKTsKIAlzZXFfcHJpbnRmKHNlcSwgIiAgVHhJbnQgICAgJXVcbiIsIHlwLT5uYl9tZGludCk7CiAJc2VxX3ByaW50ZihzZXEsICIgIFJ4SW50ICAgICV1XG4iLCB5cC0+bmJfcnhpbnQpOwotCXNlcV9wcmludGYoc2VxLCAiICBSeE92ZXIgICAlbHVcbiIsIHlwLT5zdGF0cy5yeF9maWZvX2Vycm9ycyk7CisJc2VxX3ByaW50ZihzZXEsICIgIFJ4T3ZlciAgICVsdVxuIiwgZGV2LT5zdGF0cy5yeF9maWZvX2Vycm9ycyk7CiAJc2VxX3ByaW50ZihzZXEsICJcbiIpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIHlhbV9zZXFvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHlhbV9zZXFvcHMgPSB7CiAJLnN0YXJ0ID0geWFtX3NlcV9zdGFydCwKIAkubmV4dCA9IHlhbV9zZXFfbmV4dCwKIAkuc3RvcCA9IHlhbV9zZXFfc3RvcCwKQEAgLTgxMiwyNiArODA5LDYgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqeWFtX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCB5YW1fcG9ydCAqeXA7Ci0KLQlpZiAoIWRldikKLQkJcmV0dXJuIE5VTEw7Ci0KLQl5cCA9IG5ldGRldl9wcml2KGRldik7Ci0JaWYgKHlwLT5tYWdpYyAhPSBZQU1fTUFHSUMpCi0JCXJldHVybiBOVUxMOwotCi0JLyogCi0JICogR2V0IHRoZSBjdXJyZW50IHN0YXRpc3RpY3MuICBUaGlzIG1heSBiZSBjYWxsZWQgd2l0aCB0aGUKLQkgKiBjYXJkIG9wZW4gb3IgY2xvc2VkLiAKLQkgKi8KLQlyZXR1cm4gJnlwLT5zdGF0czsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KIHN0YXRpYyBpbnQgeWFtX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgeWFtX3BvcnQgKnlwID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTg3NywxMCArODU0LDEwIEBACiAKIAkvKiBSZXNldCBvdmVycnVucyBmb3IgYWxsIHBvcnRzIC0gRlBHQSBwcm9ncmFtbWluZyBtYWtlcyBvdmVycnVucyAqLwogCWZvciAoaSA9IDA7IGkgPCBOUl9QT1JUUzsgaSsrKSB7Ci0JCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSB5YW1fZGV2c1tpXTsKLQkJc3RydWN0IHlhbV9wb3J0ICp5cCA9IG5ldGRldl9wcml2KGRldik7Ci0JCWluYihMU1IoZGV2LT5iYXNlX2FkZHIpKTsKLQkJeXAtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzID0gMDsKKwkJc3RydWN0IG5ldF9kZXZpY2UgKnlhbV9kZXYgPSB5YW1fZGV2c1tpXTsKKworCQlpbmIoTFNSKHlhbV9kZXYtPmJhc2VfYWRkcikpOworCQl5YW1fZGV2LT5zdGF0cy5yeF9maWZvX2Vycm9ycyA9IDA7CiAJfQogCiAJcHJpbnRrKEtFUk5fSU5GTyAiJXMgYXQgaW9iYXNlIDB4JWx4IGlycSAldSB1YXJ0ICVzXG4iLCBkZXYtPm5hbWUsIGRldi0+YmFzZV9hZGRyLCBkZXYtPmlycSwKQEAgLTEwNjgsNiArMTA0NSwxNCBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB5YW1fbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JICAgICA9IHlhbV9vcGVuLAorCS5uZG9fc3RvcAkgICAgID0geWFtX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdCAgICAgID0geWFtX3NlbmRfcGFja2V0LAorCS5uZG9fZG9faW9jdGwgCSAgICAgPSB5YW1faW9jdGwsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgPSB5YW1fc2V0X21hY19hZGRyZXNzLAorfTsKKwogc3RhdGljIHZvaWQgeWFtX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHlhbV9wb3J0ICp5cCA9IG5ldGRldl9wcml2KGRldik7CkBAIC0xMDg4LDE4ICsxMDczLDExIEBACiAJZGV2LT5iYXNlX2FkZHIgPSB5cC0+aW9iYXNlOwogCWRldi0+aXJxID0geXAtPmlycTsKIAotCWRldi0+b3BlbiA9IHlhbV9vcGVuOwotCWRldi0+c3RvcCA9IHlhbV9jbG9zZTsKLQlkZXYtPmRvX2lvY3RsID0geWFtX2lvY3RsOwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0geWFtX3NlbmRfcGFja2V0OwotCWRldi0+Z2V0X3N0YXRzID0geWFtX2dldF9zdGF0czsKLQogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnlwLT5zZW5kX3F1ZXVlKTsKIAorCWRldi0+bmV0ZGV2X29wcyA9ICZ5YW1fbmV0ZGV2X29wczsKIAlkZXYtPmhlYWRlcl9vcHMgPSAmYXgyNV9oZWFkZXJfb3BzOwogCi0JZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSB5YW1fc2V0X21hY19hZGRyZXNzOwotCiAJZGV2LT50eXBlID0gQVJQSFJEX0FYMjU7CiAJZGV2LT5oYXJkX2hlYWRlcl9sZW4gPSBBWDI1X01BWF9IRUFERVJfTEVOOwogCWRldi0+bXR1ID0gQVgyNV9NVFU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pYm1fbmV3ZW1hYy9jb3JlLmMgYi9kcml2ZXJzL25ldC9pYm1fbmV3ZW1hYy9jb3JlLmMKaW5kZXggNmZkN2FhNi4uYTgxNWUxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvY29yZS5jCisrKyBiL2RyaXZlcnMvbmV0L2libV9uZXdlbWFjL2NvcmUuYwpAQCAtMTM0LDcgKzEzNCw3IEBACiAJCQkJICBFTUFDX0ZUUl80NDBFUF9QSFlfQ0xLX0ZJWCkpCiAJCURCRyhkZXYsICIlcyIgTkwsIGVycm9yKTsKIAllbHNlIGlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCXByaW50ayhLRVJOX0VSUiAiJXM6ICVzXG4iLCBkZXYtPm5kZXYtPm5hbWUsIGVycm9yKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogJXNcbiIsIGRldi0+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+cGh5X21vZGUgPSBlZngtPnBoeV9tb2RlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2lzOTAwLmMgYi9kcml2ZXJzL25ldC9zaXM5MDAuYwppbmRleCBiZTQ0NjViYy4uOGE3MGRlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2lzOTAwLmMKKysrIGIvZHJpdmVycy9uZXQvc2lzOTAwLmMKQEAgLTgwLDggKzgwLDggQEAKICNkZWZpbmUgU0lTOTAwX01PRFVMRV9OQU1FICJzaXM5MDAiCiAjZGVmaW5lIFNJUzkwMF9EUlZfVkVSU0lPTiAidjEuMDguMTAgQXByLiAyIDIwMDYiCiAKLXN0YXRpYyBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRkYXRhID0KLUtFUk5fSU5GTyAic2lzOTAwLmM6ICIgU0lTOTAwX0RSVl9WRVJTSU9OICJcbiI7CitzdGF0aWMgY29uc3QgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0Y29uc3QgPQorCUtFUk5fSU5GTyAic2lzOTAwLmM6ICIgU0lTOTAwX0RSVl9WRVJTSU9OICJcbiI7CiAKIHN0YXRpYyBpbnQgbWF4X2ludGVycnVwdF93b3JrID0gNDA7CiBzdGF0aWMgaW50IG11bHRpY2FzdF9maWx0ZXJfbGltaXQgPSAxMjg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9za2ZwL2gvc21jLmggYi9kcml2ZXJzL25ldC9za2ZwL2gvc21jLmgKaW5kZXggOTQzMjU5MS4uMTc1OGQ5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2tmcC9oL3NtYy5oCisrKyBiL2RyaXZlcnMvbmV0L3NrZnAvaC9zbWMuaApAQCAtNDY3LDUgKzQ2NywyMiBAQAogI2VuZGlmCS8qIERFQlVHX0JSRCAmJiBERUJVRyAqLwogfSA7CiAKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZmRkaV9hZGRyIGZkZGlfYnJvYWRjYXN0OworCitleHRlcm4gdm9pZCBhbGxfc2VsZWN0aW9uX2NyaXRlcmlhKHN0cnVjdCBzX3NtYyAqc21jKTsKK2V4dGVybiB2b2lkIGNhcmRfc3RvcChzdHJ1Y3Qgc19zbWMgKnNtYyk7CitleHRlcm4gdm9pZCBpbml0X2JvYXJkKHN0cnVjdCBzX3NtYyAqc21jLCB1X2NoYXIgKm1hY19hZGRyKTsKK2V4dGVybiBpbnQgaW5pdF9mcGx1cyhzdHJ1Y3Qgc19zbWMgKnNtYyk7CitleHRlcm4gdm9pZCBpbml0X3BsYyhzdHJ1Y3Qgc19zbWMgKnNtYyk7CitleHRlcm4gaW50IGluaXRfc210KHN0cnVjdCBzX3NtYyAqc21jLCB1X2NoYXIgKiBtYWNfYWRkcik7CitleHRlcm4gdm9pZCBtYWMxX2lycShzdHJ1Y3Qgc19zbWMgKnNtYywgdV9zaG9ydCBzdHUsIHVfc2hvcnQgc3RsKTsKK2V4dGVybiB2b2lkIG1hYzJfaXJxKHN0cnVjdCBzX3NtYyAqc21jLCB1X3Nob3J0IGNvZGVfczJ1LCB1X3Nob3J0IGNvZGVfczJsKTsKK2V4dGVybiB2b2lkIG1hYzNfaXJxKHN0cnVjdCBzX3NtYyAqc21jLCB1X3Nob3J0IGNvZGVfczN1LCB1X3Nob3J0IGNvZGVfczNsKTsKK2V4dGVybiBpbnQgcGNtX3N0YXR1c190d2lzdGVkKHN0cnVjdCBzX3NtYyAqc21jKTsKK2V4dGVybiB2b2lkIHBsYzFfaXJxKHN0cnVjdCBzX3NtYyAqc21jKTsKK2V4dGVybiB2b2lkIHBsYzJfaXJxKHN0cnVjdCBzX3NtYyAqc21jKTsKK2V4dGVybiB2b2lkIHJlYWRfYWRkcmVzcyhzdHJ1Y3Qgc19zbWMgKnNtYywgdV9jaGFyICogbWFjX2FkZHIpOworZXh0ZXJuIHZvaWQgdGltZXJfaXJxKHN0cnVjdCBzX3NtYyAqc21jKTsKKwogI2VuZGlmCS8qIF9TQ01FQ01fICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrZnAvaHdtdG0uYyBiL2RyaXZlcnMvbmV0L3NrZnAvaHdtdG0uYwppbmRleCA0MjE4ZTk3Li5kMzIyZjFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za2ZwL2h3bXRtLmMKKysrIGIvZHJpdmVycy9uZXQvc2tmcC9od210bS5jCkBAIC05NywyMyArOTcsMTUgQEAKIAogZXh0ZXJuIHZvaWQqIG1hY19kcnZfZ2V0X3NwYWNlKHN0cnVjdCBzX3NtYyAqc21jLCB1bnNpZ25lZCBpbnQgc2l6ZSk7CiBleHRlcm4gdm9pZCogbWFjX2Rydl9nZXRfZGVzY19tZW0oc3RydWN0IHNfc21jICpzbWMsIHVuc2lnbmVkIGludCBzaXplKTsKLWV4dGVybiB2b2lkIGluaXRfYm9hcmQoc3RydWN0IHNfc21jICpzbWMsIHVfY2hhciAqbWFjX2FkZHIpOwogZXh0ZXJuIHZvaWQgbWFjX2Rydl9maWxsX3J4ZChzdHJ1Y3Qgc19zbWMgKnNtYyk7Ci1leHRlcm4gdm9pZCBwbGMxX2lycShzdHJ1Y3Qgc19zbWMgKnNtYyk7CiBleHRlcm4gdm9pZCBtYWNfZHJ2X3R4X2NvbXBsZXRlKHN0cnVjdCBzX3NtYyAqc21jLAogCQkJCXZvbGF0aWxlIHN0cnVjdCBzX3NtdF9mcF90eGQgKnR4ZCk7Ci1leHRlcm4gdm9pZCBwbGMyX2lycShzdHJ1Y3Qgc19zbWMgKnNtYyk7Ci1leHRlcm4gdm9pZCBtYWMxX2lycShzdHJ1Y3Qgc19zbWMgKnNtYywgdV9zaG9ydCBzdHUsIHVfc2hvcnQgc3RsKTsKLWV4dGVybiB2b2lkIG1hYzJfaXJxKHN0cnVjdCBzX3NtYyAqc21jLCB1X3Nob3J0IGNvZGVfczJ1LCB1X3Nob3J0IGNvZGVfczJsKTsKLWV4dGVybiB2b2lkIG1hYzNfaXJxKHN0cnVjdCBzX3NtYyAqc21jLCB1X3Nob3J0IGNvZGVfczN1LCB1X3Nob3J0IGNvZGVfczNsKTsKLWV4dGVybiB2b2lkIHRpbWVyX2lycShzdHJ1Y3Qgc19zbWMgKnNtYyk7CiBleHRlcm4gdm9pZCBtYWNfZHJ2X3J4X2NvbXBsZXRlKHN0cnVjdCBzX3NtYyAqc21jLAogCQkJCXZvbGF0aWxlIHN0cnVjdCBzX3NtdF9mcF9yeGQgKnJ4ZCwKIAkJCQlpbnQgZnJhZ19jb3VudCwgaW50IGxlbik7CiBleHRlcm4gdm9pZCBtYWNfZHJ2X3JlcXVldWVfcnhkKHN0cnVjdCBzX3NtYyAqc21jLCAKIAkJCQl2b2xhdGlsZSBzdHJ1Y3Qgc19zbXRfZnBfcnhkICpyeGQsCiAJCQkJaW50IGZyYWdfY291bnQpOwotZXh0ZXJuIHZvaWQgaW5pdF9wbGMoc3RydWN0IHNfc21jICpzbWMpOwogZXh0ZXJuIHZvaWQgbWFjX2Rydl9jbGVhcl9yeGQoc3RydWN0IHNfc21jICpzbWMsCiAJCQkgICAgICB2b2xhdGlsZSBzdHJ1Y3Qgc19zbXRfZnBfcnhkICpyeGQsIGludCBmcmFnX2NvdW50KTsKIApAQCAtMTM2LDcgKzEyOCw2IEBACiAJCQkgaW50IGZsYWcpOwogI2VuZGlmCiAKLWV4dGVybiBpbnQgaW5pdF9mcGx1cyhzdHJ1Y3Qgc19zbWMgKnNtYyk7CiBleHRlcm4gaW50IG1hY19kcnZfcnhfaW5pdChzdHJ1Y3Qgc19zbWMgKnNtYywgaW50IGxlbiwgaW50IGZjLCBjaGFyICpsb29rX2FoZWFkLAogCQkJICAgaW50IGxhX2xlbik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrZnAvcGNtcGxjLmMgYi9kcml2ZXJzL25ldC9za2ZwL3BjbXBsYy5jCmluZGV4IDc0ZTEyOWYuLmYxZGYyZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NrZnAvcGNtcGxjLmMKKysrIGIvZHJpdmVycy9uZXQvc2tmcC9wY21wbGMuYwpAQCAtMTk4LDkgKzE5OCw2IEBACiBzdGF0aWMgY29uc3QgaW50IHBsY19pbXNrX2FjdCA9IFBMX1BDTV9DT0RFIHwgUExfVFJBQ0VfUFJPUCB8IFBMX1BDTV9CUkVBSyB8CiAJCQlQTF9QQ01fRU5BQkxFRCB8IFBMX1NFTEZfVEVTVCB8IFBMX0VCVUZfRVJSOwogCi0vKiBleHRlcm5hbCBmdW5jdGlvbnMgKi8KLXZvaWQgYWxsX3NlbGVjdGlvbl9jcml0ZXJpYShzdHJ1Y3Qgc19zbWMgKnNtYyk7Ci0KIC8qIGludGVybmFsIGZ1bmN0aW9ucyAqLwogc3RhdGljIHZvaWQgcGNtX2ZzbShzdHJ1Y3Qgc19zbWMgKnNtYywgc3RydWN0IHNfcGh5ICpwaHksIGludCBjbWQpOwogc3RhdGljIHZvaWQgcGNfcmNvZGVfYWN0aW9ucyhzdHJ1Y3Qgc19zbWMgKnNtYywgaW50IGJpdCwgc3RydWN0IHNfcGh5ICpwaHkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2tmcC9za2ZkZGkuYyBiL2RyaXZlcnMvbmV0L3NrZnAvc2tmZGRpLmMKaW5kZXggOWEwMGU1NS4uZTE0YWVjMGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NrZnAvc2tmZGRpLmMKKysrIGIvZHJpdmVycy9uZXQvc2tmcC9za2ZkZGkuYwpAQCAtMTM1LDE0ICsxMzUsMTEgQEAKIAogLy8gRXh0ZXJuYWwgZnVuY3Rpb25zIGZyb20gdGhlIGhhcmR3YXJlIG1vZHVsZQogZXh0ZXJuIHVfaW50IG1hY19kcnZfY2hlY2tfc3BhY2Uodm9pZCk7Ci1leHRlcm4gdm9pZCByZWFkX2FkZHJlc3Moc3RydWN0IHNfc21jICpzbWMsIHVfY2hhciAqIG1hY19hZGRyKTsKLWV4dGVybiB2b2lkIGNhcmRfc3RvcChzdHJ1Y3Qgc19zbWMgKnNtYyk7CiBleHRlcm4gaW50IG1hY19kcnZfaW5pdChzdHJ1Y3Qgc19zbWMgKnNtYyk7CiBleHRlcm4gdm9pZCBod21fdHhfZnJhZyhzdHJ1Y3Qgc19zbWMgKnNtYywgY2hhciBmYXIgKiB2aXJ0LCB1X2xvbmcgcGh5cywKIAkJCWludCBsZW4sIGludCBmcmFtZV9zdGF0dXMpOwogZXh0ZXJuIGludCBod21fdHhfaW5pdChzdHJ1Y3Qgc19zbWMgKnNtYywgdV9jaGFyIGZjLCBpbnQgZnJhZ19jb3VudCwKIAkJICAgICAgIGludCBmcmFtZV9sZW4sIGludCBmcmFtZV9zdGF0dXMpOwotZXh0ZXJuIGludCBpbml0X3NtdChzdHJ1Y3Qgc19zbWMgKnNtYywgdV9jaGFyICogbWFjX2FkZHIpOwogZXh0ZXJuIHZvaWQgZmRkaV9pc3Ioc3RydWN0IHNfc21jICpzbWMpOwogZXh0ZXJuIHZvaWQgaHdtX3J4X2ZyYWcoc3RydWN0IHNfc21jICpzbWMsIGNoYXIgZmFyICogdmlydCwgdV9sb25nIHBoeXMsCiAJCQlpbnQgbGVuLCBpbnQgZnJhbWVfc3RhdHVzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrZnAvc210LmMgYi9kcml2ZXJzL25ldC9za2ZwL3NtdC5jCmluZGV4IDgwNTM4M2IuLjgzZDE2ZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NrZnAvc210LmMKKysrIGIvZHJpdmVycy9uZXQvc2tmcC9zbXQuYwpAQCAtNTUsMTYgKzU1LDYgQEAKIH0gOwogCiAvKgotICogZXh0ZXJuYWwgdmFyaWFibGVzCi0gKi8KLWV4dGVybiBjb25zdCBzdHJ1Y3QgZmRkaV9hZGRyIGZkZGlfYnJvYWRjYXN0IDsKLQotLyoKLSAqIGV4dGVybmFsIGZ1bmN0aW9ucwotICovCi1pbnQgcGNtX3N0YXR1c190d2lzdGVkKHN0cnVjdCBzX3NtYyAqc21jKTsKLQotLyoKICAqIGZ1bmN0aW9uIHByb3RvdHlwZXMKICAqLwogI2lmZGVmCUxJVFRMRV9FTkRJQU4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrZ2UuYyBiL2RyaXZlcnMvbmV0L3NrZ2UuYwppbmRleCBjOWRiYjA2Li45NTJkMzdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za2dlLmMKKysrIGIvZHJpdmVycy9uZXQvc2tnZS5jCkBAIC0zMjE0LDcgKzMyMTQsNyBAQAogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZody0+aHdfbG9jaywgZmxhZ3MpOwotCQlfX25ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQlfX25hcGlfY29tcGxldGUobmFwaSk7CiAJCWh3LT5pbnRyX21hc2sgfD0gbmFwaW1hc2tbc2tnZS0+cG9ydF07CiAJCXNrZ2Vfd3JpdGUzMihodywgQjBfSU1TSywgaHctPmludHJfbWFzayk7CiAJCXNrZ2VfcmVhZDMyKGh3LCBCMF9JTVNLKTsKQEAgLTMzNzcsNyArMzM3Nyw3IEBACiAJaWYgKHN0YXR1cyAmIChJU19YQTFfRnxJU19SMV9GKSkgewogCQlzdHJ1Y3Qgc2tnZV9wb3J0ICpza2dlID0gbmV0ZGV2X3ByaXYoaHctPmRldlswXSk7CiAJCWh3LT5pbnRyX21hc2sgJj0gfihJU19YQTFfRnxJU19SMV9GKTsKLQkJbmV0aWZfcnhfc2NoZWR1bGUoJnNrZ2UtPm5hcGkpOworCQluYXBpX3NjaGVkdWxlKCZza2dlLT5uYXBpKTsKIAl9CiAKIAlpZiAoc3RhdHVzICYgSVNfUEFfVE9fVFgxKQpAQCAtMzM5Nyw3ICszMzk3LDcgQEAKIAogCQlpZiAoc3RhdHVzICYgKElTX1hBMl9GfElTX1IyX0YpKSB7CiAJCQlody0+aW50cl9tYXNrICY9IH4oSVNfWEEyX0Z8SVNfUjJfRik7Ci0JCQluZXRpZl9yeF9zY2hlZHVsZSgmc2tnZS0+bmFwaSk7CisJCQluYXBpX3NjaGVkdWxlKCZza2dlLT5uYXBpKTsKIAkJfQogCiAJCWlmIChzdGF0dXMgJiBJU19QQV9UT19SWDIpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NreTIuYyBiL2RyaXZlcnMvbmV0L3NreTIuYwppbmRleCA5OTQ3MDNjLi5kMDFjNTZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za3kyLmMKKysrIGIvZHJpdmVycy9uZXQvc2t5Mi5jCkBAIC0xMDY4LDEzICsxMDY4LDE2IEBACiB9CiAKIAotc3RhdGljIHZvaWQgc2t5Ml9yeF9tYXBfc2tiKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgcnhfcmluZ19pbmZvICpyZSwKK3N0YXRpYyBpbnQgc2t5Ml9yeF9tYXBfc2tiKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgcnhfcmluZ19pbmZvICpyZSwKIAkJCSAgICB1bnNpZ25lZCBzaXplKQogewogCXN0cnVjdCBza19idWZmICpza2IgPSByZS0+c2tiOwogCWludCBpOwogCiAJcmUtPmRhdGFfYWRkciA9IHBjaV9tYXBfc2luZ2xlKHBkZXYsIHNrYi0+ZGF0YSwgc2l6ZSwgUENJX0RNQV9GUk9NREVWSUNFKTsKKwlpZiAodW5saWtlbHkocGNpX2RtYV9tYXBwaW5nX2Vycm9yKHBkZXYsIHJlLT5kYXRhX2FkZHIpKSkKKwkJcmV0dXJuIC1FSU87CisKIAlwY2lfdW5tYXBfbGVuX3NldChyZSwgZGF0YV9zaXplLCBzaXplKTsKIAogCWZvciAoaSA9IDA7IGkgPCBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOyBpKyspCkBAIC0xMDgzLDYgKzEwODYsNyBAQAogCQkJCQkJc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXS5wYWdlX29mZnNldCwKIAkJCQkJCXNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV0uc2l6ZSwKIAkJCQkJCVBDSV9ETUFfRlJPTURFVklDRSk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHNreTJfcnhfdW5tYXBfc2tiKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgcnhfcmluZ19pbmZvICpyZSkKQEAgLTEzNTQsNyArMTM1OCwxMiBAQAogCQlpZiAoIXJlLT5za2IpCiAJCQlnb3RvIG5vbWVtOwogCi0JCXNreTJfcnhfbWFwX3NrYihody0+cGRldiwgcmUsIHNreTItPnJ4X2RhdGFfc2l6ZSk7CisJCWlmIChza3kyX3J4X21hcF9za2IoaHctPnBkZXYsIHJlLCBza3kyLT5yeF9kYXRhX3NpemUpKSB7CisJCQlkZXZfa2ZyZWVfc2tiKHJlLT5za2IpOworCQkJcmUtPnNrYiA9IE5VTEw7CisJCQlnb3RvIG5vbWVtOworCQl9CisKIAkJc2t5Ml9yeF9zdWJtaXQoc2t5MiwgcmUpOwogCX0KIApAQCAtMTU0Nyw3ICsxNTU2LDcgQEAKIAlzdHJ1Y3Qgc2t5Ml9odyAqaHcgPSBza3kyLT5odzsKIAlzdHJ1Y3Qgc2t5Ml90eF9sZSAqbGUgPSBOVUxMOwogCXN0cnVjdCB0eF9yaW5nX2luZm8gKnJlOwotCXVuc2lnbmVkIGksIGxlbjsKKwl1bnNpZ25lZCBpLCBsZW4sIGZpcnN0X3Nsb3Q7CiAJZG1hX2FkZHJfdCBtYXBwaW5nOwogCXUxNiBtc3M7CiAJdTggY3RybDsKQEAgLTE1NTUsMTMgKzE1NjQsMTcgQEAKICAJaWYgKHVubGlrZWx5KHR4X2F2YWlsKHNreTIpIDwgdHhfbGVfcmVxKHNrYikpKQogICAJCXJldHVybiBORVRERVZfVFhfQlVTWTsKIAotCWlmICh1bmxpa2VseShuZXRpZl9tc2dfdHhfcXVldWVkKHNreTIpKSkKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB0eCBxdWV1ZWQsIHNsb3QgJXUsIGxlbiAlZFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgc2t5Mi0+dHhfcHJvZCwgc2tiLT5sZW4pOwotCiAJbGVuID0gc2tiX2hlYWRsZW4oc2tiKTsKIAltYXBwaW5nID0gcGNpX21hcF9zaW5nbGUoaHctPnBkZXYsIHNrYi0+ZGF0YSwgbGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKIAorCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3IoaHctPnBkZXYsIG1hcHBpbmcpKQorCQlnb3RvIG1hcHBpbmdfZXJyb3I7CisKKwlmaXJzdF9zbG90ID0gc2t5Mi0+dHhfcHJvZDsKKwlpZiAodW5saWtlbHkobmV0aWZfbXNnX3R4X3F1ZXVlZChza3kyKSkpCisJCXByaW50ayhLRVJOX0RFQlVHICIlczogdHggcXVldWVkLCBzbG90ICV1LCBsZW4gJWRcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIGZpcnN0X3Nsb3QsIHNrYi0+bGVuKTsKKwogCS8qIFNlbmQgaGlnaCBiaXRzIGlmIG5lZWRlZCAqLwogCWlmIChzaXplb2YoZG1hX2FkZHJfdCkgPiBzaXplb2YodTMyKSkgewogCQlsZSA9IGdldF90eF9sZShza3kyKTsKQEAgLTE2NDgsNiArMTY2MSw5IEBACiAJCW1hcHBpbmcgPSBwY2lfbWFwX3BhZ2UoaHctPnBkZXYsIGZyYWctPnBhZ2UsIGZyYWctPnBhZ2Vfb2Zmc2V0LAogCQkJCSAgICAgICBmcmFnLT5zaXplLCBQQ0lfRE1BX1RPREVWSUNFKTsKIAorCQlpZiAocGNpX2RtYV9tYXBwaW5nX2Vycm9yKGh3LT5wZGV2LCBtYXBwaW5nKSkKKwkJCWdvdG8gbWFwcGluZ191bndpbmQ7CisKIAkJaWYgKHNpemVvZihkbWFfYWRkcl90KSA+IHNpemVvZih1MzIpKSB7CiAJCQlsZSA9IGdldF90eF9sZShza3kyKTsKIAkJCWxlLT5hZGRyID0gY3B1X3RvX2xlMzIodXBwZXJfMzJfYml0cyhtYXBwaW5nKSk7CkBAIC0xNjc2LDYgKzE2OTIsMzQgQEAKIAogCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCXJldHVybiBORVRERVZfVFhfT0s7CisKK21hcHBpbmdfdW53aW5kOgorCWZvciAoaSA9IGZpcnN0X3Nsb3Q7IGkgIT0gc2t5Mi0+dHhfcHJvZDsgaSA9IFJJTkdfTkVYVChpLCBUWF9SSU5HX1NJWkUpKSB7CisJCWxlID0gc2t5Mi0+dHhfbGUgKyBpOworCQlyZSA9IHNreTItPnR4X3JpbmcgKyBpOworCisJCXN3aXRjaChsZS0+b3Bjb2RlICYgfkhXX09XTkVSKSB7CisJCWNhc2UgT1BfTEFSR0VTRU5EOgorCQljYXNlIE9QX1BBQ0tFVDoKKwkJCXBjaV91bm1hcF9zaW5nbGUoaHctPnBkZXYsCisJCQkJCSBwY2lfdW5tYXBfYWRkcihyZSwgbWFwYWRkciksCisJCQkJCSBwY2lfdW5tYXBfbGVuKHJlLCBtYXBsZW4pLAorCQkJCQkgUENJX0RNQV9UT0RFVklDRSk7CisJCQlicmVhazsKKwkJY2FzZSBPUF9CVUZGRVI6CisJCQlwY2lfdW5tYXBfcGFnZShody0+cGRldiwgcGNpX3VubWFwX2FkZHIocmUsIG1hcGFkZHIpLAorCQkJCSAgICAgICBwY2lfdW5tYXBfbGVuKHJlLCBtYXBsZW4pLAorCQkJCSAgICAgICBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJc2t5Mi0+dHhfcHJvZCA9IGZpcnN0X3Nsb3Q7CittYXBwaW5nX2Vycm9yOgorCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCWRldl93YXJuKCZody0+cGRldi0+ZGV2LCAiJXM6IHR4IG1hcHBpbmcgZXJyb3JcbiIsIGRldi0+bmFtZSk7CisJZGV2X2tmcmVlX3NrYihza2IpOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIC8qCkBAIC0yMTkxLDcgKzIyMzUsMTEgQEAKIAogCXByZWZldGNoKHNrYi0+ZGF0YSk7CiAJcmUtPnNrYiA9IG5za2I7Ci0Jc2t5Ml9yeF9tYXBfc2tiKHNreTItPmh3LT5wZGV2LCByZSwgaGRyX3NwYWNlKTsKKwlpZiAoc2t5Ml9yeF9tYXBfc2tiKHNreTItPmh3LT5wZGV2LCByZSwgaGRyX3NwYWNlKSkgeworCQlkZXZfa2ZyZWVfc2tiKG5za2IpOworCQlyZS0+c2tiID0gc2tiOworCQlyZXR1cm4gTlVMTDsKKwl9CiAKIAlpZiAoc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncykKIAkJc2tiX3B1dF9mcmFncyhza2IsIGhkcl9zcGFjZSwgbGVuZ3RoKTsKQEAgLTI2ODcsMTMgKzI3MzUsNiBAQAogCQkJZ290byBkb25lOwogCX0KIAotCS8qIEJ1Zy9FcnJhdGEgd29ya2Fyb3VuZD8KLQkgKiBOZWVkIHRvIGtpY2sgdGhlIFRYIGlycSBtb2RlcmF0aW9uIHRpbWVyLgotCSAqLwotCWlmIChza3kyX3JlYWQ4KGh3LCBTVEFUX1RYX1RJTUVSX0NUUkwpID09IFRJTV9TVEFSVCkgewotCQlza3kyX3dyaXRlOChodywgU1RBVF9UWF9USU1FUl9DVFJMLCBUSU1fU1RPUCk7Ci0JCXNreTJfd3JpdGU4KGh3LCBTVEFUX1RYX1RJTUVSX0NUUkwsIFRJTV9TVEFSVCk7Ci0JfQogCW5hcGlfY29tcGxldGUobmFwaSk7CiAJc2t5Ml9yZWFkMzIoaHcsIEIwX1kyX1NQX0xJU1IpOwogZG9uZToKQEAgLTM4NjQsNiArMzkwNSw4NiBAQAogCiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqc2t5Ml9kZWJ1ZzsKIAorCisvKgorICogUmVhZCBhbmQgcGFyc2UgdGhlIGZpcnN0IHBhcnQgb2YgVml0YWwgUHJvZHVjdCBEYXRhCisgKi8KKyNkZWZpbmUgVlBEX1NJWkUJMTI4CisjZGVmaW5lIFZQRF9NQUdJQwkweDgyCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdnBkX3RhZyB7CisJY2hhciB0YWdbMl07CisJY2hhciAqbGFiZWw7Cit9IHZwZF90YWdzW10gPSB7CisJeyAiUE4iLAkiUGFydCBOdW1iZXIiIH0sCisJeyAiRUMiLCAiRW5naW5lZXJpbmcgTGV2ZWwiIH0sCisJeyAiTU4iLCAiTWFudWZhY3R1cmVyIiB9LAorCXsgIlNOIiwgIlNlcmlhbCBOdW1iZXIiIH0sCisJeyAiWUEiLCAiQXNzZXQgVGFnIiB9LAorCXsgIlZMIiwgIkZpcnN0IEVycm9yIExvZyBNZXNzYWdlIiB9LAorCXsgIlZGIiwgIlNlY29uZCBFcnJvciBMb2cgTWVzc2FnZSIgfSwKKwl7ICJWQiIsICJCb290IEFnZW50IFJPTSBDb25maWd1cmF0aW9uIiB9LAorCXsgIlZFIiwgIkVGSSBVTkRJIENvbmZpZ3VyYXRpb24iIH0sCit9OworCitzdGF0aWMgdm9pZCBza3kyX3Nob3dfdnBkKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3Qgc2t5Ml9odyAqaHcpCit7CisJc2l6ZV90IHZwZF9zaXplOworCWxvZmZfdCBvZmZzOworCXU4IGxlbjsKKwl1bnNpZ25lZCBjaGFyICpidWY7CisJdTE2IHJlZzI7CisKKwlyZWcyID0gc2t5Ml9wY2lfcmVhZDE2KGh3LCBQQ0lfREVWX1JFRzIpOworCXZwZF9zaXplID0gMSA8PCAoICgocmVnMiAmIFBDSV9WUERfUk9NX1NaKSA+PiAxNCkgKyA4KTsKKworCXNlcV9wcmludGYoc2VxLCAiJXMgUHJvZHVjdCBEYXRhXG4iLCBwY2lfbmFtZShody0+cGRldikpOworCWJ1ZiA9IGttYWxsb2ModnBkX3NpemUsIEdGUF9LRVJORUwpOworCWlmICghYnVmKSB7CisJCXNlcV9wdXRzKHNlcSwgIm5vIG1lbW9yeSFcbiIpOworCQlyZXR1cm47CisJfQorCisJaWYgKHBjaV9yZWFkX3ZwZChody0+cGRldiwgMCwgdnBkX3NpemUsIGJ1ZikgPCAwKSB7CisJCXNlcV9wdXRzKHNlcSwgIlZQRCByZWFkIGZhaWxlZFxuIik7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChidWZbMF0gIT0gVlBEX01BR0lDKSB7CisJCXNlcV9wcmludGYoc2VxLCAiVlBEIHRhZyBtaXNtYXRjaDogJSN4XG4iLCBidWZbMF0pOworCQlnb3RvIG91dDsKKwl9CisJbGVuID0gYnVmWzFdOworCWlmIChsZW4gPT0gMCB8fCBsZW4gPiB2cGRfc2l6ZSAtIDQpIHsKKwkJc2VxX3ByaW50ZihzZXEsICJJbnZhbGlkIGlkIGxlbmd0aDogJWRcbiIsIGxlbik7CisJCWdvdG8gb3V0OworCX0KKworCXNlcV9wcmludGYoc2VxLCAiJS4qc1xuIiwgbGVuLCBidWYgKyAzKTsKKwlvZmZzID0gbGVuICsgMzsKKworCXdoaWxlIChvZmZzIDwgdnBkX3NpemUgLSA0KSB7CisJCWludCBpOworCisJCWlmICghbWVtY21wKCJSVyIsIGJ1ZiArIG9mZnMsIDIpKQkvKiBlbmQgbWFya2VyICovCisJCQlicmVhazsKKwkJbGVuID0gYnVmW29mZnMgKyAyXTsKKwkJaWYgKG9mZnMgKyBsZW4gKyAzID49IHZwZF9zaXplKQorCQkJYnJlYWs7CisKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodnBkX3RhZ3MpOyBpKyspIHsKKwkJCWlmICghbWVtY21wKHZwZF90YWdzW2ldLnRhZywgYnVmICsgb2ZmcywgMikpIHsKKwkJCQlzZXFfcHJpbnRmKHNlcSwgIiAlczogJS4qc1xuIiwKKwkJCQkJICAgdnBkX3RhZ3NbaV0ubGFiZWwsIGxlbiwgYnVmICsgb2ZmcyArIDMpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCW9mZnMgKz0gbGVuICsgMzsKKwl9CitvdXQ6CisJa2ZyZWUoYnVmKTsKK30KKwogc3RhdGljIGludCBza3kyX2RlYnVnX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNlcS0+cHJpdmF0ZTsKQEAgLTM4NzMsMTQgKzM5OTQsMTggQEAKIAl1bnNpZ25lZCBpZHgsIGxhc3Q7CiAJaW50IHNvcDsKIAotCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQotCQlyZXR1cm4gLUVORVRET1dOOworCXNreTJfc2hvd192cGQoc2VxLCBodyk7CiAKLQlzZXFfcHJpbnRmKHNlcSwgIklSUSBzcmM9JXggbWFzaz0leCBjb250cm9sPSV4XG4iLAorCXNlcV9wcmludGYoc2VxLCAiXG5JUlEgc3JjPSV4IG1hc2s9JXggY29udHJvbD0leFxuIiwKIAkJICAgc2t5Ml9yZWFkMzIoaHcsIEIwX0lTUkMpLAogCQkgICBza3kyX3JlYWQzMihodywgQjBfSU1TSyksCiAJCSAgIHNreTJfcmVhZDMyKGh3LCBCMF9ZMl9TUF9JQ1IpKTsKIAorCWlmICghbmV0aWZfcnVubmluZyhkZXYpKSB7CisJCXNlcV9wcmludGYoc2VxLCAibmV0d29yayBub3QgcnVubmluZ1xuIik7CisJCXJldHVybiAwOworCX0KKwogCW5hcGlfZGlzYWJsZSgmaHctPm5hcGkpOwogCWxhc3QgPSBza3kyX3JlYWQxNihodywgU1RBVF9QVVRfSURYKTsKIApAQCAtNDIwNCw2OSArNDMyOSw2IEBACiAJcmV0dXJuIGVycjsKIH0KIAotLyoKLSAqIFJlYWQgYW5kIHBhcnNlIHRoZSBmaXJzdCBwYXJ0IG9mIFZpdGFsIFByb2R1Y3QgRGF0YQotICovCi0jZGVmaW5lIFZQRF9TSVpFCTEyOAotI2RlZmluZSBWUERfTUFHSUMJMHg4MgotCi1zdGF0aWMgdm9pZCBfX2RldmluaXQgc2t5Ml92cGRfaW5mbyhzdHJ1Y3Qgc2t5Ml9odyAqaHcpCi17Ci0JaW50IGNhcCA9IHBjaV9maW5kX2NhcGFiaWxpdHkoaHctPnBkZXYsIFBDSV9DQVBfSURfVlBEKTsKLQljb25zdCB1OCAqcDsKLQl1OCAqdnBkX2J1ZiA9IE5VTEw7Ci0JdTE2IGxlbjsKLQlzdGF0aWMgc3RydWN0IHZwZF90YWcgewotCQljaGFyIHRhZ1syXTsKLQkJY2hhciAqbGFiZWw7Ci0JfSB2cGRfdGFnc1tdID0gewotCQl7ICJQTiIsCSJQYXJ0IE51bWJlciIgfSwKLQkJeyAiRUMiLCAiRW5naW5lZXJpbmcgTGV2ZWwiIH0sCi0JCXsgIk1OIiwgIk1hbnVmYWN0dXJlciIgfSwKLQl9OwotCi0JaWYgKCFjYXApCi0JCWdvdG8gb3V0OwotCi0JdnBkX2J1ZiA9IGttYWxsb2MoVlBEX1NJWkUsIEdGUF9LRVJORUwpOwotCWlmICghdnBkX2J1ZikKLQkJZ290byBvdXQ7Ci0KLQlpZiAoc2t5Ml92cGRfcmVhZChodywgY2FwLCB2cGRfYnVmLCAwLCBWUERfU0laRSkpCi0JCWdvdG8gb3V0OwotCi0JaWYgKHZwZF9idWZbMF0gIT0gVlBEX01BR0lDKQotCQlnb3RvIG91dDsKLQlsZW4gPSB2cGRfYnVmWzFdOwotCWlmIChsZW4gPT0gMCB8fCBsZW4gPiBWUERfU0laRSAtIDQpCi0JCWdvdG8gb3V0OwotCXAgPSB2cGRfYnVmICsgMzsKLQlkZXZfaW5mbygmaHctPnBkZXYtPmRldiwgIiUuKnNcbiIsIGxlbiwgcCk7Ci0JcCArPSBsZW47Ci0KLQl3aGlsZSAocCA8IHZwZF9idWYgKyBWUERfU0laRSAtIDQpIHsKLQkJaW50IGk7Ci0KLQkJaWYgKCFtZW1jbXAoIlJXIiwgcCwgMikpCS8qIGVuZCBtYXJrZXIgKi8KLQkJCWJyZWFrOwotCi0JCWxlbiA9IHBbMl07Ci0JCWlmIChsZW4gPiAocCAtIHZwZF9idWYpIC0gNCkKLQkJCWJyZWFrOwotCi0JCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHZwZF90YWdzKTsgaSsrKSB7Ci0JCQlpZiAoIW1lbWNtcCh2cGRfdGFnc1tpXS50YWcsIHAsIDIpKSB7Ci0JCQkJcHJpbnRrKEtFUk5fREVCVUcgIiAlczogJS4qc1xuIiwKLQkJCQkgICAgICAgdnBkX3RhZ3NbaV0ubGFiZWwsIGxlbiwgcCArIDMpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCXAgKz0gbGVuICsgMzsKLQl9Ci1vdXQ6Ci0Ja2ZyZWUodnBkX2J1Zik7Ci19Ci0KIC8qIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHl1a29uMiBjaGlwc2V0IG9ubHkgKi8KIHN0YXRpYyBjb25zdCBjaGFyICpza3kyX25hbWUodTggY2hpcGlkLCBjaGFyICpidWYsIGludCBzeikKIHsKQEAgLTQyOTQsNiArNDM1Niw3IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3Qgc2t5Ml9odyAqaHc7CiAJaW50IGVyciwgdXNpbmdfZGFjID0gMCwgd29sX2RlZmF1bHQ7CisJdTMyIHJlZzsKIAljaGFyIGJ1ZjFbMTZdOwogCiAJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CkBAIC00MzI3LDYgKzQzOTAsMzQgQEAKIAkJfQogCX0KIAorCS8qIEdldCBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uCisJICogTm90ZTogb25seSByZWd1bGFyIFBDSSBjb25maWcgYWNjZXNzIG9uY2UgdG8gdGVzdCBmb3IgSFcgaXNzdWVzCisJICogICAgICAgb3RoZXIgUENJIGFjY2VzcyB0aHJvdWdoIHNoYXJlZCBtZW1vcnkgZm9yIHNwZWVkIGFuZCB0bworCSAqCSBhdm9pZCBNTUNPTkZJRyBwcm9ibGVtcy4KKwkgKi8KKwllcnIgPSBwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgUENJX0RFVl9SRUcyLCAmcmVnKTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIlBDSSByZWFkIGNvbmZpZyBmYWlsZWRcbiIpOworCQlnb3RvIGVycl9vdXRfZnJlZV9yZWdpb25zOworCX0KKworCS8qIHNpemUgb2YgYXZhaWxhYmxlIFZQRCwgb25seSBpbXBhY3Qgc3lzZnMgKi8KKwllcnIgPSBwY2lfdnBkX3RydW5jYXRlKHBkZXYsIDF1bCA8PCAoKChyZWcgJiBQQ0lfVlBEX1JPTV9TWikgPj4gMTQpICsgOCkpOworCWlmIChlcnIpCisJCWRldl93YXJuKCZwZGV2LT5kZXYsICJDYW4ndCBzZXQgVlBEIHNpemVcbiIpOworCisjaWZkZWYgX19CSUdfRU5ESUFOCisJLyogVGhlIHNrOThsaW4gdmVuZG9yIGRyaXZlciB1c2VzIGhhcmR3YXJlIGJ5dGUgc3dhcHBpbmcgYnV0CisJICogdGhpcyBkcml2ZXIgdXNlcyBzb2Z0d2FyZSBzd2FwcGluZy4KKwkgKi8KKwlyZWcgJj0gflBDSV9SRVZfREVTQzsKKwllcnIgPSBwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsUENJX0RFVl9SRUcyLCByZWcpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiUENJIHdyaXRlIGNvbmZpZyBmYWlsZWRcbiIpOworCQlnb3RvIGVycl9vdXRfZnJlZV9yZWdpb25zOworCX0KKyNlbmRpZgorCiAJd29sX2RlZmF1bHQgPSBkZXZpY2VfbWF5X3dha2V1cCgmcGRldi0+ZGV2KSA/IFdBS0VfTUFHSUMgOiAwOwogCiAJZXJyID0gLUVOT01FTTsKQEAgLTQzNDQsMTggKzQ0MzUsNiBAQAogCQlnb3RvIGVycl9vdXRfZnJlZV9odzsKIAl9CiAKLSNpZmRlZiBfX0JJR19FTkRJQU4KLQkvKiBUaGUgc2s5OGxpbiB2ZW5kb3IgZHJpdmVyIHVzZXMgaGFyZHdhcmUgYnl0ZSBzd2FwcGluZyBidXQKLQkgKiB0aGlzIGRyaXZlciB1c2VzIHNvZnR3YXJlIHN3YXBwaW5nLgotCSAqLwotCXsKLQkJdTMyIHJlZzsKLQkJcmVnID0gc2t5Ml9wY2lfcmVhZDMyKGh3LCBQQ0lfREVWX1JFRzIpOwotCQlyZWcgJj0gflBDSV9SRVZfREVTQzsKLQkJc2t5Ml9wY2lfd3JpdGUzMihodywgUENJX0RFVl9SRUcyLCByZWcpOwotCX0KLSNlbmRpZgotCiAJLyogcmluZyBmb3Igc3RhdHVzIHJlc3BvbnNlcyAqLwogCWh3LT5zdF9sZSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHBkZXYsIFNUQVRVU19MRV9CWVRFUywgJmh3LT5zdF9kbWEpOwogCWlmICghaHctPnN0X2xlKQpAQCAtNDM3MCw4ICs0NDQ5LDYgQEAKIAogCXNreTJfcmVzZXQoaHcpOwogCi0Jc2t5Ml92cGRfaW5mbyhodyk7Ci0KIAlkZXYgPSBza3kyX2luaXRfbmV0ZGV2KGh3LCAwLCB1c2luZ19kYWMsIHdvbF9kZWZhdWx0KTsKIAlpZiAoIWRldikgewogCQllcnIgPSAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc21jOTExeC5jIGIvZHJpdmVycy9uZXQvc21jOTExeC5jCmluZGV4IDIyM2NkZTAuLjI5MzYxMDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NtYzkxMXguYworKysgYi9kcml2ZXJzL25ldC9zbWM5MTF4LmMKQEAgLTE1NDUsNyArMTU0NSw3IEBACiB7CiAJc3RybmNweShpbmZvLT5kcml2ZXIsIENBUkROQU1FLCBzaXplb2YoaW5mby0+ZHJpdmVyKSk7CiAJc3RybmNweShpbmZvLT52ZXJzaW9uLCB2ZXJzaW9uLCBzaXplb2YoaW5mby0+dmVyc2lvbikpOwotCXN0cm5jcHkoaW5mby0+YnVzX2luZm8sIGRldi0+ZGV2LnBhcmVudC0+YnVzX2lkLCBzaXplb2YoaW5mby0+YnVzX2luZm8pKTsKKwlzdHJuY3B5KGluZm8tPmJ1c19pbmZvLCBkZXZfbmFtZShkZXYtPmRldi5wYXJlbnQpLCBzaXplb2YoaW5mby0+YnVzX2luZm8pKTsKIH0KIAogc3RhdGljIGludCBzbWM5MTF4X2V0aHRvb2xfbndheXJlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zbWM5MXguYyBiL2RyaXZlcnMvbmV0L3NtYzkxeC5jCmluZGV4IGIyMTVhOGQuLmZkY2JhZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NtYzkxeC5jCisrKyBiL2RyaXZlcnMvbmV0L3NtYzkxeC5jCkBAIC0xNjE0LDcgKzE2MTQsNyBAQAogewogCXN0cm5jcHkoaW5mby0+ZHJpdmVyLCBDQVJETkFNRSwgc2l6ZW9mKGluZm8tPmRyaXZlcikpOwogCXN0cm5jcHkoaW5mby0+dmVyc2lvbiwgdmVyc2lvbiwgc2l6ZW9mKGluZm8tPnZlcnNpb24pKTsKLQlzdHJuY3B5KGluZm8tPmJ1c19pbmZvLCBkZXYtPmRldi5wYXJlbnQtPmJ1c19pZCwgc2l6ZW9mKGluZm8tPmJ1c19pbmZvKSk7CisJc3RybmNweShpbmZvLT5idXNfaW5mbywgZGV2X25hbWUoZGV2LT5kZXYucGFyZW50KSwgc2l6ZW9mKGluZm8tPmJ1c19pbmZvKSk7CiB9CiAKIHN0YXRpYyBpbnQgc21jX2V0aHRvb2xfbndheXJlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC0xNjQzLDYgKzE2NDMsMTE3IEBACiAJbHAtPm1zZ19lbmFibGUgPSBsZXZlbDsKIH0KIAorc3RhdGljIGludCBzbWNfd3JpdGVfZWVwcm9tX3dvcmQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IGFkZHIsIHUxNiB3b3JkKQoreworCXUxNiBjdGw7CisJc3RydWN0IHNtY19sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOworCXZvaWQgX19pb21lbSAqaW9hZGRyID0gbHAtPmJhc2U7CisKKwlzcGluX2xvY2tfaXJxKCZscC0+bG9jayk7CisJLyogbG9hZCB3b3JkIGludG8gR1AgcmVnaXN0ZXIgKi8KKwlTTUNfU0VMRUNUX0JBTksobHAsIDEpOworCVNNQ19TRVRfR1AobHAsIHdvcmQpOworCS8qIHNldCB0aGUgYWRkcmVzcyB0byBwdXQgdGhlIGRhdGEgaW4gRUVQUk9NICovCisJU01DX1NFTEVDVF9CQU5LKGxwLCAyKTsKKwlTTUNfU0VUX1BUUihscCwgYWRkcik7CisJLyogdGVsbCBpdCB0byB3cml0ZSAqLworCVNNQ19TRUxFQ1RfQkFOSyhscCwgMSk7CisJY3RsID0gU01DX0dFVF9DVEwobHApOworCVNNQ19TRVRfQ1RMKGxwLCBjdGwgfCAoQ1RMX0VFUFJPTV9TRUxFQ1QgfCBDVExfU1RPUkUpKTsKKwkvKiB3YWl0IGZvciBpdCB0byBmaW5pc2ggKi8KKwlkbyB7CisJCXVkZWxheSgxKTsKKwl9IHdoaWxlIChTTUNfR0VUX0NUTChscCkgJiBDVExfU1RPUkUpOworCS8qIGNsZWFuIHVwICovCisJU01DX1NFVF9DVEwobHAsIGN0bCk7CisJU01DX1NFTEVDVF9CQU5LKGxwLCAyKTsKKwlzcGluX3VubG9ja19pcnEoJmxwLT5sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbWNfcmVhZF9lZXByb21fd29yZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgYWRkciwgdTE2ICp3b3JkKQoreworCXUxNiBjdGw7CisJc3RydWN0IHNtY19sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOworCXZvaWQgX19pb21lbSAqaW9hZGRyID0gbHAtPmJhc2U7CisKKwlzcGluX2xvY2tfaXJxKCZscC0+bG9jayk7CisJLyogc2V0IHRoZSBFRVBST00gYWRkcmVzcyB0byBnZXQgdGhlIGRhdGEgZnJvbSAqLworCVNNQ19TRUxFQ1RfQkFOSyhscCwgMik7CisJU01DX1NFVF9QVFIobHAsIGFkZHIgfCBQVFJfUkVBRCk7CisJLyogdGVsbCBpdCB0byBsb2FkICovCisJU01DX1NFTEVDVF9CQU5LKGxwLCAxKTsKKwlTTUNfU0VUX0dQKGxwLCAweGZmZmYpOwkvKiBpbml0IHRvIGtub3duICovCisJY3RsID0gU01DX0dFVF9DVEwobHApOworCVNNQ19TRVRfQ1RMKGxwLCBjdGwgfCAoQ1RMX0VFUFJPTV9TRUxFQ1QgfCBDVExfUkVMT0FEKSk7CisJLyogd2FpdCBmb3IgaXQgdG8gZmluaXNoICovCisJZG8geworCQl1ZGVsYXkoMSk7CisJfSB3aGlsZSAoU01DX0dFVF9DVEwobHApICYgQ1RMX1JFTE9BRCk7CisJLyogcmVhZCB3b3JkIGZyb20gR1AgcmVnaXN0ZXIgKi8KKwkqd29yZCA9IFNNQ19HRVRfR1AobHApOworCS8qIGNsZWFuIHVwICovCisJU01DX1NFVF9DVEwobHAsIGN0bCk7CisJU01DX1NFTEVDVF9CQU5LKGxwLCAyKTsKKwlzcGluX3VubG9ja19pcnEoJmxwLT5sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbWNfZXRodG9vbF9nZXRlZXByb21fbGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIDB4MjMgKiAyOworfQorCitzdGF0aWMgaW50IHNtY19ldGh0b29sX2dldGVlcHJvbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQlzdHJ1Y3QgZXRodG9vbF9lZXByb20gKmVlcHJvbSwgdTggKmRhdGEpCit7CisJaW50IGk7CisJaW50IGltYXg7CisKKwlEQkcoMSwgIlJlYWRpbmcgJWQgYnl0ZXMgYXQgJWQoMHgleClcbiIsCisJCWVlcHJvbS0+bGVuLCBlZXByb20tPm9mZnNldCwgZWVwcm9tLT5vZmZzZXQpOworCWltYXggPSBzbWNfZXRodG9vbF9nZXRlZXByb21fbGVuKGRldik7CisJZm9yIChpID0gMDsgaSA8IGVlcHJvbS0+bGVuOyBpICs9IDIpIHsKKwkJaW50IHJldDsKKwkJdTE2IHdidWY7CisJCWludCBvZmZzZXQgPSBpICsgZWVwcm9tLT5vZmZzZXQ7CisJCWlmIChvZmZzZXQgPiBpbWF4KQorCQkJYnJlYWs7CisJCXJldCA9IHNtY19yZWFkX2VlcHJvbV93b3JkKGRldiwgb2Zmc2V0ID4+IDEsICZ3YnVmKTsKKwkJaWYgKHJldCAhPSAwKQorCQkJcmV0dXJuIHJldDsKKwkJREJHKDIsICJSZWFkIDB4JXggZnJvbSAweCV4XG4iLCB3YnVmLCBvZmZzZXQgPj4gMSk7CisJCWRhdGFbaV0gPSAod2J1ZiA+PiA4KSAmIDB4ZmY7CisJCWRhdGFbaSsxXSA9IHdidWYgJiAweGZmOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbWNfZXRodG9vbF9zZXRlZXByb20oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJc3RydWN0IGV0aHRvb2xfZWVwcm9tICplZXByb20sIHU4ICpkYXRhKQoreworCWludCBpOworCWludCBpbWF4OworCisJREJHKDEsICJXcml0aW5nICVkIGJ5dGVzIHRvICVkKDB4JXgpXG4iLAorCQkJZWVwcm9tLT5sZW4sIGVlcHJvbS0+b2Zmc2V0LCBlZXByb20tPm9mZnNldCk7CisJaW1heCA9IHNtY19ldGh0b29sX2dldGVlcHJvbV9sZW4oZGV2KTsKKwlmb3IgKGkgPSAwOyBpIDwgZWVwcm9tLT5sZW47IGkgKz0gMikgeworCQlpbnQgcmV0OworCQl1MTYgd2J1ZjsKKwkJaW50IG9mZnNldCA9IGkgKyBlZXByb20tPm9mZnNldDsKKwkJaWYgKG9mZnNldCA+IGltYXgpCisJCQlicmVhazsKKwkJd2J1ZiA9IChkYXRhW2ldIDw8IDgpIHwgZGF0YVtpICsgMV07CisJCURCRygyLCAiV3JpdGluZyAweCV4IHRvIDB4JXhcbiIsIHdidWYsIG9mZnNldCA+PiAxKTsKKwkJcmV0ID0gc21jX3dyaXRlX2VlcHJvbV93b3JkKGRldiwgb2Zmc2V0ID4+IDEsIHdidWYpOworCQlpZiAocmV0ICE9IDApCisJCQlyZXR1cm4gcmV0OworCX0KKwlyZXR1cm4gMDsKK30KKworCiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHNtY19ldGh0b29sX29wcyA9IHsKIAkuZ2V0X3NldHRpbmdzCT0gc21jX2V0aHRvb2xfZ2V0c2V0dGluZ3MsCiAJLnNldF9zZXR0aW5ncwk9IHNtY19ldGh0b29sX3NldHNldHRpbmdzLApAQCAtMTY1Miw4ICsxNzYzLDIyIEBACiAJLnNldF9tc2dsZXZlbAk9IHNtY19ldGh0b29sX3NldG1zZ2xldmVsLAogCS5ud2F5X3Jlc2V0CT0gc21jX2V0aHRvb2xfbndheXJlc2V0LAogCS5nZXRfbGluawk9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCi0vLwkuZ2V0X2VlcHJvbQk9IHNtY19ldGh0b29sX2dldGVlcHJvbSwKLS8vCS5zZXRfZWVwcm9tCT0gc21jX2V0aHRvb2xfc2V0ZWVwcm9tLAorCS5nZXRfZWVwcm9tX2xlbiA9IHNtY19ldGh0b29sX2dldGVlcHJvbV9sZW4sCisJLmdldF9lZXByb20JPSBzbWNfZXRodG9vbF9nZXRlZXByb20sCisJLnNldF9lZXByb20JPSBzbWNfZXRodG9vbF9zZXRlZXByb20sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHNtY19uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBzbWNfb3BlbiwKKwkubmRvX3N0b3AJCT0gc21jX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBzbWNfaGFyZF9zdGFydF94bWl0LAorCS5uZG9fdHhfdGltZW91dAkJPSBzbWNfdGltZW91dCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdAk9IHNtY19zZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCisJLm5kb19wb2xsX2NvbnRyb2xsZXIJPSBzbWNfcG9sbF9jb250cm9sbGVyLAorI2VuZGlmCiB9OwogCiAvKgpAQCAtMTg2NSwxNiArMTk5MCw5IEBACiAJLyogRmlsbCBpbiB0aGUgZmllbGRzIG9mIHRoZSBkZXZpY2Ugc3RydWN0dXJlIHdpdGggZXRoZXJuZXQgdmFsdWVzLiAqLwogCWV0aGVyX3NldHVwKGRldik7CiAKLQlkZXYtPm9wZW4gPSBzbWNfb3BlbjsKLQlkZXYtPnN0b3AgPSBzbWNfY2xvc2U7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBzbWNfaGFyZF9zdGFydF94bWl0OwotCWRldi0+dHhfdGltZW91dCA9IHNtY190aW1lb3V0OwogCWRldi0+d2F0Y2hkb2dfdGltZW8gPSBtc2Vjc190b19qaWZmaWVzKHdhdGNoZG9nKTsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IHNtY19zZXRfbXVsdGljYXN0X2xpc3Q7CisJZGV2LT5uZXRkZXZfb3BzID0gJnNtY19uZXRkZXZfb3BzOwogCWRldi0+ZXRodG9vbF9vcHMgPSAmc21jX2V0aHRvb2xfb3BzOwotI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCi0JZGV2LT5wb2xsX2NvbnRyb2xsZXIgPSBzbWNfcG9sbF9jb250cm9sbGVyOwotI2VuZGlmCiAKIAl0YXNrbGV0X2luaXQoJmxwLT50eF90YXNrLCBzbWNfaGFyZHdhcmVfc2VuZF9wa3QsICh1bnNpZ25lZCBsb25nKWRldik7CiAJSU5JVF9XT1JLKCZscC0+cGh5X2NvbmZpZ3VyZSwgc21jX3BoeV9jb25maWd1cmUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc21jOTF4LmggYi9kcml2ZXJzL25ldC9zbWM5MXguaAppbmRleCBjNGNjZDEyLi5lZDlhZTQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zbWM5MXguaAorKysgYi9kcml2ZXJzL25ldC9zbWM5MXguaApAQCAtMTE0MSw2ICsxMTQxLDE2IEBACiAKICNkZWZpbmUgU01DX0dFVF9NSUkobHApCQlTTUNfaW53KGlvYWRkciwgTUlJX1JFRyhscCkpCiAKKyNkZWZpbmUgU01DX0dFVF9HUChscCkJCVNNQ19pbncoaW9hZGRyLCBHUF9SRUcobHApKQorCisjZGVmaW5lIFNNQ19TRVRfR1AobHAsIHgpCQkJCQkJXAorCWRvIHsJCQkJCQkJCVwKKwkJaWYgKFNNQ19NVVNUX0FMSUdOX1dSSVRFKGxwKSkJCQkJXAorCQkJU01DX291dGwoKHgpPDwxNiwgaW9hZGRyLCBTTUNfUkVHKGxwLCA4LCAxKSk7CVwKKwkJZWxzZQkJCQkJCQlcCisJCQlTTUNfb3V0dyh4LCBpb2FkZHIsIEdQX1JFRyhscCkpOwkJXAorCX0gd2hpbGUgKDApCisKICNkZWZpbmUgU01DX1NFVF9NSUkobHAsIHgpCQlTTUNfb3V0dyh4LCBpb2FkZHIsIE1JSV9SRUcobHApKQogCiAjZGVmaW5lIFNNQ19HRVRfTUlSKGxwKQkJU01DX2ludyhpb2FkZHIsIE1JUl9SRUcobHApKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc21zYzkxMXguYyBiL2RyaXZlcnMvbmV0L3Ntc2M5MTF4LmMKaW5kZXggZDE1OTBhYy4uYWQzY2JjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc21zYzkxMXguYworKysgYi9kcml2ZXJzL25ldC9zbXNjOTExeC5jCkBAIC0zNjgsNDggKzM2OCw1MyBAQAogCXJldHVybiByZWc7CiB9CiAKLS8qIEF1dG9kZXRlY3RzIGFuZCBpbml0aWFsaXNlcyBleHRlcm5hbCBwaHkgZm9yIFNNU0M5MTE1IGFuZCBTTVNDOTExNyBmbGF2b3JzLgotICogSWYgc29tZXRoaW5nIGdvZXMgd3JvbmcsIHJldHVybnMgLUVOT0RFViB0byByZXZlcnQgYmFjayB0byBpbnRlcm5hbCBwaHkuCi0gKiBQZXJmb3JtZWQgYXQgaW5pdGlhbGlzYXRpb24gb25seSwgc28gaW50ZXJydXB0cyBhcmUgZW5hYmxlZCAqLwotc3RhdGljIGludCBzbXNjOTExeF9waHlfaW5pdGlhbGlzZV9leHRlcm5hbChzdHJ1Y3Qgc21zYzkxMXhfZGF0YSAqcGRhdGEpCisvKiBTd2l0Y2ggdG8gZXh0ZXJuYWwgcGh5LiBBc3N1bWVzIHR4IGFuZCByeCBhcmUgc3RvcHBlZC4gKi8KK3N0YXRpYyB2b2lkIHNtc2M5MTF4X3BoeV9lbmFibGVfZXh0ZXJuYWwoc3RydWN0IHNtc2M5MTF4X2RhdGEgKnBkYXRhKQogewogCXVuc2lnbmVkIGludCBod2NmZyA9IHNtc2M5MTF4X3JlZ19yZWFkKHBkYXRhLCBIV19DRkcpOwogCi0JLyogRXh0ZXJuYWwgcGh5IGlzIHJlcXVlc3RlZCwgc3VwcG9ydGVkLCBhbmQgZGV0ZWN0ZWQgKi8KLQlpZiAoaHdjZmcgJiBIV19DRkdfRVhUX1BIWV9ERVRfKSB7CisJLyogRGlzYWJsZSBwaHkgY2xvY2tzIHRvIHRoZSBNQUMgKi8KKwlod2NmZyAmPSAofkhXX0NGR19QSFlfQ0xLX1NFTF8pOworCWh3Y2ZnIHw9IEhXX0NGR19QSFlfQ0xLX1NFTF9DTEtfRElTXzsKKwlzbXNjOTExeF9yZWdfd3JpdGUocGRhdGEsIEhXX0NGRywgaHdjZmcpOworCXVkZWxheSgxMCk7CS8qIEVub3VnaCB0aW1lIGZvciBjbG9ja3MgdG8gc3RvcCAqLwogCi0JCS8qIFN3aXRjaCB0byBleHRlcm5hbCBwaHkuIEFzc3VtaW5nIHR4IGFuZCByeCBhcmUgc3RvcHBlZAotCQkgKiBiZWNhdXNlIHNtc2M5MTF4X3BoeV9pbml0aWFsaXNlIGlzIGNhbGxlZCBiZWZvcmUKLQkJICogc21zYzkxMXhfcnhfaW5pdGlhbGlzZSBhbmQgdHhfaW5pdGlhbGlzZS4gKi8KKwkvKiBTd2l0Y2ggdG8gZXh0ZXJuYWwgcGh5ICovCisJaHdjZmcgfD0gSFdfQ0ZHX0VYVF9QSFlfRU5fOworCXNtc2M5MTF4X3JlZ193cml0ZShwZGF0YSwgSFdfQ0ZHLCBod2NmZyk7CiAKLQkJLyogRGlzYWJsZSBwaHkgY2xvY2tzIHRvIHRoZSBNQUMgKi8KLQkJaHdjZmcgJj0gKH5IV19DRkdfUEhZX0NMS19TRUxfKTsKLQkJaHdjZmcgfD0gSFdfQ0ZHX1BIWV9DTEtfU0VMX0NMS19ESVNfOwotCQlzbXNjOTExeF9yZWdfd3JpdGUocGRhdGEsIEhXX0NGRywgaHdjZmcpOwotCQl1ZGVsYXkoMTApOwkvKiBFbm91Z2ggdGltZSBmb3IgY2xvY2tzIHRvIHN0b3AgKi8KKwkvKiBFbmFibGUgcGh5IGNsb2NrcyB0byB0aGUgTUFDICovCisJaHdjZmcgJj0gKH5IV19DRkdfUEhZX0NMS19TRUxfKTsKKwlod2NmZyB8PSBIV19DRkdfUEhZX0NMS19TRUxfRVhUX1BIWV87CisJc21zYzkxMXhfcmVnX3dyaXRlKHBkYXRhLCBIV19DRkcsIGh3Y2ZnKTsKKwl1ZGVsYXkoMTApOwkvKiBFbm91Z2ggdGltZSBmb3IgY2xvY2tzIHRvIHJlc3RhcnQgKi8KIAotCQkvKiBTd2l0Y2ggdG8gZXh0ZXJuYWwgcGh5ICovCi0JCWh3Y2ZnIHw9IEhXX0NGR19FWFRfUEhZX0VOXzsKLQkJc21zYzkxMXhfcmVnX3dyaXRlKHBkYXRhLCBIV19DRkcsIGh3Y2ZnKTsKKwlod2NmZyB8PSBIV19DRkdfU01JX1NFTF87CisJc21zYzkxMXhfcmVnX3dyaXRlKHBkYXRhLCBIV19DRkcsIGh3Y2ZnKTsKK30KIAotCQkvKiBFbmFibGUgcGh5IGNsb2NrcyB0byB0aGUgTUFDICovCi0JCWh3Y2ZnICY9ICh+SFdfQ0ZHX1BIWV9DTEtfU0VMXyk7Ci0JCWh3Y2ZnIHw9IEhXX0NGR19QSFlfQ0xLX1NFTF9FWFRfUEhZXzsKLQkJc21zYzkxMXhfcmVnX3dyaXRlKHBkYXRhLCBIV19DRkcsIGh3Y2ZnKTsKLQkJdWRlbGF5KDEwKTsJLyogRW5vdWdoIHRpbWUgZm9yIGNsb2NrcyB0byByZXN0YXJ0ICovCisvKiBBdXRvZGV0ZWN0cyBhbmQgZW5hYmxlcyBleHRlcm5hbCBwaHkgaWYgcHJlc2VudCBvbiBzdXBwb3J0ZWQgY2hpcHMuCisgKiBhdXRvZGV0ZWN0aW9uIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHNwZWNpZnlpbmcgU01TQzkxMVhfRk9SQ0VfSU5URVJOQUxfUEhZCisgKiBvciBTTVNDOTExWF9GT1JDRV9FWFRFUk5BTF9QSFkgaW4gdGhlIHBsYXRmb3JtX2RhdGEgZmxhZ3MuICovCitzdGF0aWMgdm9pZCBzbXNjOTExeF9waHlfaW5pdGlhbGlzZV9leHRlcm5hbChzdHJ1Y3Qgc21zYzkxMXhfZGF0YSAqcGRhdGEpCit7CisJdW5zaWduZWQgaW50IGh3Y2ZnID0gc21zYzkxMXhfcmVnX3JlYWQocGRhdGEsIEhXX0NGRyk7CiAKLQkJaHdjZmcgfD0gSFdfQ0ZHX1NNSV9TRUxfOwotCQlzbXNjOTExeF9yZWdfd3JpdGUocGRhdGEsIEhXX0NGRywgaHdjZmcpOwotCi0JCVNNU0NfVFJBQ0UoSFcsICJTdWNjZXNzZnVsbHkgc3dpdGNoZWQgdG8gZXh0ZXJuYWwgUEhZIik7CisJaWYgKHBkYXRhLT5jb25maWcuZmxhZ3MgJiBTTVNDOTExWF9GT1JDRV9JTlRFUk5BTF9QSFkpIHsKKwkJU01TQ19UUkFDRShIVywgIkZvcmNpbmcgaW50ZXJuYWwgUEhZIik7CisJCXBkYXRhLT51c2luZ19leHRwaHkgPSAwOworCX0gZWxzZSBpZiAocGRhdGEtPmNvbmZpZy5mbGFncyAmIFNNU0M5MTFYX0ZPUkNFX0VYVEVSTkFMX1BIWSkgeworCQlTTVNDX1RSQUNFKEhXLCAiRm9yY2luZyBleHRlcm5hbCBQSFkiKTsKKwkJc21zYzkxMXhfcGh5X2VuYWJsZV9leHRlcm5hbChwZGF0YSk7CisJCXBkYXRhLT51c2luZ19leHRwaHkgPSAxOworCX0gZWxzZSBpZiAoaHdjZmcgJiBIV19DRkdfRVhUX1BIWV9ERVRfKSB7CisJCVNNU0NfVFJBQ0UoSFcsICJIV19DRkcgRVhUX1BIWV9ERVQgc2V0LCB1c2luZyBleHRlcm5hbCBQSFkiKTsKKwkJc21zYzkxMXhfcGh5X2VuYWJsZV9leHRlcm5hbChwZGF0YSk7CiAJCXBkYXRhLT51c2luZ19leHRwaHkgPSAxOwogCX0gZWxzZSB7Ci0JCVNNU0NfV0FSTklORyhIVywgIk5vIGV4dGVybmFsIFBIWSBkZXRlY3RlZCwgIgotCQkJIlVzaW5nIGludGVybmFsIFBIWSBpbnN0ZWFkLiIpOwotCQkvKiBVc2UgaW50ZXJuYWwgcGh5ICovCi0JCXJldHVybiAtRU5PREVWOworCQlTTVNDX1RSQUNFKEhXLCAiSFdfQ0ZHIEVYVF9QSFlfREVUIGNsZWFyLCB1c2luZyBpbnRlcm5hbCBQSFkiKTsKKwkJcGRhdGEtPnVzaW5nX2V4dHBoeSA9IDA7CiAJfQotCXJldHVybiAwOwogfQogCiAvKiBGZXRjaGVzIGEgdHggc3RhdHVzIG91dCBvZiB0aGUgc3RhdHVzIGZpZm8gKi8KQEAgLTc2OSw3ICs3NzQsNyBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlwaHlkZXYgPSBwaHlfY29ubmVjdChkZXYsIHBoeWRldi0+ZGV2LmJ1c19pZCwKKwlwaHlkZXYgPSBwaHlfY29ubmVjdChkZXYsIGRldl9uYW1lKCZwaHlkZXYtPmRldiksCiAJCSZzbXNjOTExeF9waHlfYWRqdXN0X2xpbmssIDAsIHBkYXRhLT5jb25maWcucGh5X2ludGVyZmFjZSk7CiAKIAlpZiAoSVNfRVJSKHBoeWRldikpIHsKQEAgLTc3OCw3ICs3ODMsOCBAQAogCX0KIAogCXByX2luZm8oIiVzOiBhdHRhY2hlZCBQSFkgZHJpdmVyIFslc10gKG1paV9idXM6cGh5X2FkZHI9JXMsIGlycT0lZClcbiIsCi0JCWRldi0+bmFtZSwgcGh5ZGV2LT5kcnYtPm5hbWUsIHBoeWRldi0+ZGV2LmJ1c19pZCwgcGh5ZGV2LT5pcnEpOworCQlkZXYtPm5hbWUsIHBoeWRldi0+ZHJ2LT5uYW1lLAorCQlkZXZfbmFtZSgmcGh5ZGV2LT5kZXYpLCBwaHlkZXYtPmlycSk7CiAKIAkvKiBtYXNrIHdpdGggTUFDIHN1cHBvcnRlZCBmZWF0dXJlcyAqLwogCXBoeWRldi0+c3VwcG9ydGVkICY9IChQSFlfQkFTSUNfRkVBVFVSRVMgfCBTVVBQT1JURURfUGF1c2UgfApAQCAtODI0LDIyICs4MzAsMTggQEAKIAogCXBkYXRhLT5taWlfYnVzLT5wYXJlbnQgPSAmcGRldi0+ZGV2OwogCi0JcGRhdGEtPnVzaW5nX2V4dHBoeSA9IDA7Ci0KIAlzd2l0Y2ggKHBkYXRhLT5pZHJldiAmIDB4RkZGRjAwMDApIHsKIAljYXNlIDB4MDExNzAwMDA6CiAJY2FzZSAweDAxMTUwMDAwOgogCWNhc2UgMHgxMTdBMDAwMDoKIAljYXNlIDB4MTE1QTAwMDA6CiAJCS8qIEV4dGVybmFsIFBIWSBzdXBwb3J0ZWQsIHRyeSB0byBhdXRvZGV0ZWN0ICovCi0JCWlmIChzbXNjOTExeF9waHlfaW5pdGlhbGlzZV9leHRlcm5hbChwZGF0YSkgPCAwKSB7Ci0JCQlTTVNDX1RSQUNFKEhXLCAiTm8gZXh0ZXJuYWwgUEhZIGRldGVjdGVkLCAiCi0JCQkJInVzaW5nIGludGVybmFsIFBIWSIpOwotCQl9CisJCXNtc2M5MTF4X3BoeV9pbml0aWFsaXNlX2V4dGVybmFsKHBkYXRhKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJU01TQ19UUkFDRShIVywgIkV4dGVybmFsIFBIWSBpcyBub3Qgc3VwcG9ydGVkLCAiCiAJCQkidXNpbmcgaW50ZXJuYWwgUEhZIik7CisJCXBkYXRhLT51c2luZ19leHRwaHkgPSAwOwogCQlicmVhazsKIAl9CiAKQEAgLTg5MywyMiArODk1LDIyIEBACiAJCQlTTVNDX1dBUk5JTkcoSFcsCiAJCQkJIlBhY2tldCB0YWcgcmVzZXJ2ZWQgYml0IGlzIGhpZ2giKTsKIAkJfSBlbHNlIHsKLQkJCWlmICh1bmxpa2VseSh0eF9zdGF0ICYgMHgwMDAwODAwMCkpIHsKKwkJCWlmICh1bmxpa2VseSh0eF9zdGF0ICYgVFhfU1RTX0VTXykpIHsKIAkJCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOwogCQkJfSBlbHNlIHsKIAkJCQlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKIAkJCQlkZXYtPnN0YXRzLnR4X2J5dGVzICs9ICh0eF9zdGF0ID4+IDE2KTsKIAkJCX0KLQkJCWlmICh1bmxpa2VseSh0eF9zdGF0ICYgMHgwMDAwMDEwMCkpIHsKKwkJCWlmICh1bmxpa2VseSh0eF9zdGF0ICYgVFhfU1RTX0VYQ0VTU19DT0xfKSkgewogCQkJCWRldi0+c3RhdHMuY29sbGlzaW9ucyArPSAxNjsKIAkJCQlkZXYtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzICs9IDE7CiAJCQl9IGVsc2UgewogCQkJCWRldi0+c3RhdHMuY29sbGlzaW9ucyArPQogCQkJCSAgICAoKHR4X3N0YXQgPj4gMykgJiAweEYpOwogCQkJfQotCQkJaWYgKHVubGlrZWx5KHR4X3N0YXQgJiAweDAwMDAwODAwKSkKKwkJCWlmICh1bmxpa2VseSh0eF9zdGF0ICYgVFhfU1RTX0xPU1RfQ0FSUklFUl8pKQogCQkJCWRldi0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMgKz0gMTsKLQkJCWlmICh1bmxpa2VseSh0eF9zdGF0ICYgMHgwMDAwMDIwMCkpIHsKKwkJCWlmICh1bmxpa2VseSh0eF9zdGF0ICYgVFhfU1RTX0xBVEVfQ09MXykpIHsKIAkJCQlkZXYtPnN0YXRzLmNvbGxpc2lvbnMrKzsKIAkJCQlkZXYtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CiAJCQl9CkBAIC05MjIsMTkgKzkyNCwxNyBAQAogewogCWludCBjcmNfZXJyID0gMDsKIAotCWlmICh1bmxpa2VseShyeHN0YXQgJiAweDAwMDA4MDAwKSkgeworCWlmICh1bmxpa2VseShyeHN0YXQgJiBSWF9TVFNfRVNfKSkgewogCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwotCQlpZiAodW5saWtlbHkocnhzdGF0ICYgMHgwMDAwMDAwMikpIHsKKwkJaWYgKHVubGlrZWx5KHJ4c3RhdCAmIFJYX1NUU19DUkNfRVJSXykpIHsKIAkJCWRldi0+c3RhdHMucnhfY3JjX2Vycm9ycysrOwogCQkJY3JjX2VyciA9IDE7CiAJCX0KIAl9CiAJaWYgKGxpa2VseSghY3JjX2VycikpIHsKLQkJaWYgKHVubGlrZWx5KChyeHN0YXQgJiAweDAwMDAxMDIwKSA9PSAweDAwMDAxMDIwKSkgewotCQkJLyogRnJhbWUgdHlwZSBpbmRpY2F0ZXMgbGVuZ3RoLAotCQkJICogYW5kIGxlbmd0aCBlcnJvciBpcyBzZXQgKi8KKwkJaWYgKHVubGlrZWx5KChyeHN0YXQgJiBSWF9TVFNfRlJBTUVfVFlQRV8pICYmCisJCQkgICAgIChyeHN0YXQgJiBSWF9TVFNfTEVOR1RIX0VSUl8pKSkKIAkJCWRldi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOwotCQl9CiAJCWlmIChyeHN0YXQgJiBSWF9TVFNfTUNBU1RfKQogCQkJZGV2LT5zdGF0cy5tdWx0aWNhc3QrKzsKIAl9CkBAIC05NTMsNyArOTUzLDcgQEAKIAkJZG8gewogCQkJdWRlbGF5KDEpOwogCQkJdmFsID0gc21zYzkxMXhfcmVnX3JlYWQocGRhdGEsIFJYX0RQX0NUUkwpOwotCQl9IHdoaWxlICgtLXRpbWVvdXQgJiYgKHZhbCAmIFJYX0RQX0NUUkxfUlhfRkZXRF8pKTsKKwkJfSB3aGlsZSAoKHZhbCAmIFJYX0RQX0NUUkxfUlhfRkZXRF8pICYmIC0tdGltZW91dCk7CiAKIAkJaWYgKHVubGlrZWx5KHRpbWVvdXQgPT0gMCkpCiAJCQlTTVNDX1dBUk5JTkcoSFcsICJUaW1lZCBvdXQgd2FpdGluZyBmb3IgIgpAQCAtOTg0LDcgKzk4NCw3IEBACiAJCQkvKiBXZSBwcm9jZXNzZWQgYWxsIHBhY2tldHMgYXZhaWxhYmxlLiAgVGVsbCBOQVBJIGl0IGNhbgogCQkJICogc3RvcCBwb2xsaW5nIHRoZW4gcmUtZW5hYmxlIHJ4IGludGVycnVwdHMgKi8KIAkJCXNtc2M5MTF4X3JlZ193cml0ZShwZGF0YSwgSU5UX1NUUywgSU5UX1NUU19SU0ZMXyk7Ci0JCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJCW5hcGlfY29tcGxldGUobmFwaSk7CiAJCQl0ZW1wID0gc21zYzkxMXhfcmVnX3JlYWQocGRhdGEsIElOVF9FTik7CiAJCQl0ZW1wIHw9IElOVF9FTl9SU0ZMX0VOXzsKIAkJCXNtc2M5MTF4X3JlZ193cml0ZShwZGF0YSwgSU5UX0VOLCB0ZW1wKTsKQEAgLTExMTksNyArMTExOSw3IEBACiAKIC8qIFNldHMgdGhlIGRldmljZSBNQUMgYWRkcmVzcyB0byBkZXZfYWRkciwgY2FsbGVkIHdpdGggbWFjX2xvY2sgaGVsZCAqLwogc3RhdGljIHZvaWQKLXNtc2M5MTF4X3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3Qgc21zYzkxMXhfZGF0YSAqcGRhdGEsIHU4IGRldl9hZGRyWzZdKQorc21zYzkxMXhfc2V0X2h3X21hY19hZGRyZXNzKHN0cnVjdCBzbXNjOTExeF9kYXRhICpwZGF0YSwgdTggZGV2X2FkZHJbNl0pCiB7CiAJdTMyIG1hY19oaWdoMTYgPSAoZGV2X2FkZHJbNV0gPDwgOCkgfCBkZXZfYWRkcls0XTsKIAl1MzIgbWFjX2xvdzMyID0gKGRldl9hZGRyWzNdIDw8IDI0KSB8IChkZXZfYWRkclsyXSA8PCAxNikgfApAQCAtMTE2MCw4ICsxMTYwLDggQEAKIAogCS8qIE1ha2Ugc3VyZSBFRVBST00gaGFzIGZpbmlzaGVkIGxvYWRpbmcgYmVmb3JlIHNldHRpbmcgR1BJT19DRkcgKi8KIAl0aW1lb3V0ID0gNTA7Ci0Jd2hpbGUgKCh0aW1lb3V0LS0pICYmCi0JICAgICAgIChzbXNjOTExeF9yZWdfcmVhZChwZGF0YSwgRTJQX0NNRCkgJiBFMlBfQ01EX0VQQ19CVVNZXykpIHsKKwl3aGlsZSAoKHNtc2M5MTF4X3JlZ19yZWFkKHBkYXRhLCBFMlBfQ01EKSAmIEUyUF9DTURfRVBDX0JVU1lfKSAmJgorCSAgICAgICAtLXRpbWVvdXQpIHsKIAkJdWRlbGF5KDEwKTsKIAl9CiAKQEAgLTExNzQsNyArMTE3NCw3IEBACiAJLyogVGhlIHNvZnQgcmVzZXQgYWJvdmUgY2xlYXJlZCB0aGUgZGV2aWNlJ3MgTUFDIGFkZHJlc3MsCiAJICogcmVzdG9yZSBpdCBmcm9tIGxvY2FsIGNvcHkgKHNldCBpbiBwcm9iZSkgKi8KIAlzcGluX2xvY2tfaXJxKCZwZGF0YS0+bWFjX2xvY2spOwotCXNtc2M5MTF4X3NldF9tYWNfYWRkcmVzcyhwZGF0YSwgZGV2LT5kZXZfYWRkcik7CisJc21zYzkxMXhfc2V0X2h3X21hY19hZGRyZXNzKHBkYXRhLCBkZXYtPmRldl9hZGRyKTsKIAlzcGluX3VubG9ja19pcnEoJnBkYXRhLT5tYWNfbG9jayk7CiAKIAkvKiBJbml0aWFsaXNlIGlycXMsIGJ1dCBsZWF2ZSBhbGwgc291cmNlcyBkaXNhYmxlZCAqLwpAQCAtMTI1MCw3ICsxMjUwLDcgQEAKIAluYXBpX2VuYWJsZSgmcGRhdGEtPm5hcGkpOwogCiAJdGVtcCA9IHNtc2M5MTF4X3JlZ19yZWFkKHBkYXRhLCBJTlRfRU4pOwotCXRlbXAgfD0gKElOVF9FTl9UREZBX0VOXyB8IElOVF9FTl9SU0ZMX0VOXyk7CisJdGVtcCB8PSAoSU5UX0VOX1RERkFfRU5fIHwgSU5UX0VOX1JTRkxfRU5fIHwgSU5UX0VOX1JYU1RPUF9JTlRfRU5fKTsKIAlzbXNjOTExeF9yZWdfd3JpdGUocGRhdGEsIElOVF9FTiwgdGVtcCk7CiAKIAlzcGluX2xvY2tfaXJxKCZwZGF0YS0+bWFjX2xvY2spOwpAQCAtMTQyMiwxMSArMTQyMiw2IEBACiAKIAkJCS8qIFJlcXVlc3QgdGhlIGhhcmR3YXJlIHRvIHN0b3AsIHRoZW4gcGVyZm9ybSB0aGUKIAkJCSAqIHVwZGF0ZSB3aGVuIHdlIGdldCBhbiBSWF9TVE9QIGludGVycnVwdCAqLwotCQkJc21zYzkxMXhfcmVnX3dyaXRlKHBkYXRhLCBJTlRfU1RTLCBJTlRfU1RTX1JYU1RPUF9JTlRfKTsKLQkJCXRlbXAgPSBzbXNjOTExeF9yZWdfcmVhZChwZGF0YSwgSU5UX0VOKTsKLQkJCXRlbXAgfD0gSU5UX0VOX1JYU1RPUF9JTlRfRU5fOwotCQkJc21zYzkxMXhfcmVnX3dyaXRlKHBkYXRhLCBJTlRfRU4sIHRlbXApOwotCiAJCQl0ZW1wID0gc21zYzkxMXhfbWFjX3JlYWQocGRhdGEsIE1BQ19DUik7CiAJCQl0ZW1wICY9IH4oTUFDX0NSX1JYRU5fKTsKIAkJCXNtc2M5MTF4X21hY193cml0ZShwZGF0YSwgTUFDX0NSLCB0ZW1wKTsKQEAgLTE0NjUsMTEgKzE0NjAsOSBAQAogCQkvKiBDYWxsZWQgd2hlbiB0aGVyZSBpcyBhIG11bHRpY2FzdCB1cGRhdGUgc2NoZWR1bGVkIGFuZAogCQkgKiBpdCBpcyBub3cgc2FmZSB0byBjb21wbGV0ZSB0aGUgdXBkYXRlICovCiAJCVNNU0NfVFJBQ0UoSU5UUiwgIlJYIFN0b3AgaW50ZXJydXB0Iik7Ci0JCXRlbXAgPSBzbXNjOTExeF9yZWdfcmVhZChwZGF0YSwgSU5UX0VOKTsKLQkJdGVtcCAmPSAofklOVF9FTl9SWFNUT1BfSU5UX0VOXyk7Ci0JCXNtc2M5MTF4X3JlZ193cml0ZShwZGF0YSwgSU5UX0VOLCB0ZW1wKTsKIAkJc21zYzkxMXhfcmVnX3dyaXRlKHBkYXRhLCBJTlRfU1RTLCBJTlRfU1RTX1JYU1RPUF9JTlRfKTsKLQkJc21zYzkxMXhfcnhfbXVsdGljYXN0X3VwZGF0ZV93b3JrYXJvdW5kKHBkYXRhKTsKKwkJaWYgKHBkYXRhLT5tdWx0aWNhc3RfdXBkYXRlX3BlbmRpbmcpCisJCQlzbXNjOTExeF9yeF9tdWx0aWNhc3RfdXBkYXRlX3dvcmthcm91bmQocGRhdGEpOwogCQlzZXJ2aWNlZCA9IElSUV9IQU5ETEVEOwogCX0KIApAQCAtMTQ4OSwxNiArMTQ4MiwxNiBAQAogCX0KIAogCWlmIChsaWtlbHkoaW50c3RzICYgaW50ZW4gJiBJTlRfU1RTX1JTRkxfKSkgewotCQlpZiAobGlrZWx5KG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoJnBkYXRhLT5uYXBpKSkpIHsKKwkJaWYgKGxpa2VseShuYXBpX3NjaGVkdWxlX3ByZXAoJnBkYXRhLT5uYXBpKSkpIHsKIAkJCS8qIERpc2FibGUgUnggaW50ZXJydXB0cyAqLwogCQkJdGVtcCA9IHNtc2M5MTF4X3JlZ19yZWFkKHBkYXRhLCBJTlRfRU4pOwogCQkJdGVtcCAmPSAofklOVF9FTl9SU0ZMX0VOXyk7CiAJCQlzbXNjOTExeF9yZWdfd3JpdGUocGRhdGEsIElOVF9FTiwgdGVtcCk7CiAJCQkvKiBTY2hlZHVsZSBhIE5BUEkgcG9sbCAqLwotCQkJX19uZXRpZl9yeF9zY2hlZHVsZSgmcGRhdGEtPm5hcGkpOworCQkJX19uYXBpX3NjaGVkdWxlKCZwZGF0YS0+bmFwaSk7CiAJCX0gZWxzZSB7CiAJCQlTTVNDX1dBUk5JTkcoUlhfRVJSLAotCQkJCSJuZXRpZl9yeF9zY2hlZHVsZV9wcmVwIGZhaWxlZCIpOworCQkJCSJuYXBpX3NjaGVkdWxlX3ByZXAgZmFpbGVkIik7CiAJCX0KIAkJc2VydmljZWQgPSBJUlFfSEFORExFRDsKIAl9CkBAIC0xNTE1LDYgKzE1MDgsMzEgQEAKIH0KICNlbmRpZgkJCQkvKiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiAqLwogCitzdGF0aWMgaW50IHNtc2M5MTF4X3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpwKQoreworCXN0cnVjdCBzbXNjOTExeF9kYXRhICpwZGF0YSA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHNvY2thZGRyICphZGRyID0gcDsKKworCS8qIE9uIG9sZGVyIGhhcmR3YXJlIHJldmlzaW9ucyB3ZSBjYW5ub3QgY2hhbmdlIHRoZSBtYWMgYWRkcmVzcworCSAqIHJlZ2lzdGVycyB3aGlsZSByZWNlaXZpbmcgZGF0YS4gIE5ld2VyIGRldmljZXMgY2FuIHNhZmVseSBjaGFuZ2UKKwkgKiB0aGlzIGF0IGFueSB0aW1lLiAqLworCWlmIChwZGF0YS0+Z2VuZXJhdGlvbiA8PSAxICYmIG5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihhZGRyLT5zYV9kYXRhKSkKKwkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOworCisJbWVtY3B5KGRldi0+ZGV2X2FkZHIsIGFkZHItPnNhX2RhdGEsIEVUSF9BTEVOKTsKKworCXNwaW5fbG9ja19pcnEoJnBkYXRhLT5tYWNfbG9jayk7CisJc21zYzkxMXhfc2V0X2h3X21hY19hZGRyZXNzKHBkYXRhLCBkZXYtPmRldl9hZGRyKTsKKwlzcGluX3VubG9ja19pcnEoJnBkYXRhLT5tYWNfbG9jayk7CisKKwlkZXZfaW5mbygmZGV2LT5kZXYsICJNQUMgQWRkcmVzczogJXBNXG4iLCBkZXYtPmRldl9hZGRyKTsKKworCXJldHVybiAwOworfQorCiAvKiBTdGFuZGFyZCBpb2N0bHMgZm9yIG1paS10b29sICovCiBzdGF0aWMgaW50IHNtc2M5MTF4X2RvX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyLCBpbnQgY21kKQogewpAQCAtMTU0OSw3ICsxNTY3LDcgQEAKIHsKIAlzdHJsY3B5KGluZm8tPmRyaXZlciwgU01TQ19DSElQTkFNRSwgc2l6ZW9mKGluZm8tPmRyaXZlcikpOwogCXN0cmxjcHkoaW5mby0+dmVyc2lvbiwgU01TQ19EUlZfVkVSU0lPTiwgc2l6ZW9mKGluZm8tPnZlcnNpb24pKTsKLQlzdHJsY3B5KGluZm8tPmJ1c19pbmZvLCBkZXYtPmRldi5wYXJlbnQtPmJ1c19pZCwKKwlzdHJsY3B5KGluZm8tPmJ1c19pbmZvLCBkZXZfbmFtZShkZXYtPmRldi5wYXJlbnQpLAogCQlzaXplb2YoaW5mby0+YnVzX2luZm8pKTsKIH0KIApAQCAtMTc0NSwxMiArMTc2MywyNyBAQAogCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gc21zYzkxMXhfc2V0X211bHRpY2FzdF9saXN0LAogCS5uZG9fZG9faW9jdGwJCT0gc21zYzkxMXhfZG9faW9jdGwsCiAJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCi0JLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IHNtc2M5MTF4X3NldF9tYWNfYWRkcmVzcywKICNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgogCS5uZG9fcG9sbF9jb250cm9sbGVyCT0gc21zYzkxMXhfcG9sbF9jb250cm9sbGVyLAogI2VuZGlmCiB9OwogCisvKiBjb3BpZXMgdGhlIGN1cnJlbnQgbWFjIGFkZHJlc3MgZnJvbSBoYXJkd2FyZSB0byBkZXYtPmRldl9hZGRyICovCitzdGF0aWMgdm9pZCBfX2RldmluaXQgc21zYzkxMXhfcmVhZF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBzbXNjOTExeF9kYXRhICpwZGF0YSA9IG5ldGRldl9wcml2KGRldik7CisJdTMyIG1hY19oaWdoMTYgPSBzbXNjOTExeF9tYWNfcmVhZChwZGF0YSwgQUREUkgpOworCXUzMiBtYWNfbG93MzIgPSBzbXNjOTExeF9tYWNfcmVhZChwZGF0YSwgQUREUkwpOworCisJZGV2LT5kZXZfYWRkclswXSA9ICh1OCkobWFjX2xvdzMyKTsKKwlkZXYtPmRldl9hZGRyWzFdID0gKHU4KShtYWNfbG93MzIgPj4gOCk7CisJZGV2LT5kZXZfYWRkclsyXSA9ICh1OCkobWFjX2xvdzMyID4+IDE2KTsKKwlkZXYtPmRldl9hZGRyWzNdID0gKHU4KShtYWNfbG93MzIgPj4gMjQpOworCWRldi0+ZGV2X2FkZHJbNF0gPSAodTgpKG1hY19oaWdoMTYpOworCWRldi0+ZGV2X2FkZHJbNV0gPSAodTgpKG1hY19oaWdoMTYgPj4gOCk7Cit9CisKIC8qIEluaXRpYWxpemluZyBwcml2YXRlIGRldmljZSBzdHJ1Y3R1cmVzLCBvbmx5IGNhbGxlZCBmcm9tIHByb2JlICovCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBzbXNjOTExeF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CkBAIC0xODM4LDYgKzE4NzEsMTIgQEAKIAkJU01TQ19XQVJOSU5HKFBST0JFLAogCQkJIlRoaXMgZHJpdmVyIGlzIG5vdCBpbnRlbmRlZCBmb3IgdGhpcyBjaGlwIHJldmlzaW9uIik7CiAKKwkvKiB3b3JrYXJvdW5kIGZvciBwbGF0Zm9ybXMgd2l0aG91dCBhbiBlZXByb20sIHdoZXJlIHRoZSBtYWMgYWRkcmVzcworCSAqIGlzIHN0b3JlZCBlbHNld2hlcmUgYW5kIHNldCBieSB0aGUgYm9vdGxvYWRlci4gIFRoaXMgc2F2ZXMgdGhlCisJICogbWFjIGFkZHJlc3MgYmVmb3JlIHJlc2V0dGluZyB0aGUgZGV2aWNlICovCisJaWYgKHBkYXRhLT5jb25maWcuZmxhZ3MgJiBTTVNDOTExWF9TQVZFX01BQ19BRERSRVNTKQorCQlzbXNjOTExeF9yZWFkX21hY19hZGRyZXNzKGRldik7CisKIAkvKiBSZXNldCB0aGUgTEFOOTExeCAqLwogCWlmIChzbXNjOTExeF9zb2Z0X3Jlc2V0KHBkYXRhKSkKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC0xODk2LDExICsxOTM1LDEwIEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3Qgc21zYzkxMXhfZGF0YSAqcGRhdGE7CiAJc3RydWN0IHNtc2M5MTF4X3BsYXRmb3JtX2NvbmZpZyAqY29uZmlnID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7Ci0Jc3RydWN0IHJlc291cmNlICpyZXM7CisJc3RydWN0IHJlc291cmNlICpyZXMsICppcnFfcmVzOwogCXVuc2lnbmVkIGludCBpbnRjZmcgPSAwOwotCWludCByZXNfc2l6ZTsKKwlpbnQgcmVzX3NpemUsIGlycV9mbGFnczsKIAlpbnQgcmV0dmFsOwotCURFQ0xBUkVfTUFDX0JVRihtYWMpOwogCiAJcHJfaW5mbygiJXM6IERyaXZlciB2ZXJzaW9uICVzLlxuIiwgU01TQ19DSElQTkFNRSwgU01TQ19EUlZfVkVSU0lPTik7CiAKQEAgLTE5MjMsNiArMTk2MSwxNCBAQAogCX0KIAlyZXNfc2l6ZSA9IHJlcy0+ZW5kIC0gcmVzLT5zdGFydDsKIAorCWlycV9yZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JUlEsIDApOworCWlmICghaXJxX3JlcykgeworCQlwcl93YXJuaW5nKCIlczogQ291bGQgbm90IGFsbG9jYXRlIGlycSByZXNvdXJjZS5cbiIsCisJCQlTTVNDX0NISVBOQU1FKTsKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJZ290byBvdXRfMDsKKwl9CisKIAlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNfc2l6ZSwgU01TQ19DSElQTkFNRSkpIHsKIAkJcmV0dmFsID0gLUVCVVNZOwogCQlnb3RvIG91dF8wOwpAQCAtMTkzOSw3ICsxOTg1LDggQEAKIAogCXBkYXRhID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotCWRldi0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlkZXYtPmlycSA9IGlycV9yZXMtPnN0YXJ0OworCWlycV9mbGFncyA9IGlycV9yZXMtPmZsYWdzICYgSVJRRl9UUklHR0VSX01BU0s7CiAJcGRhdGEtPmlvYWRkciA9IGlvcmVtYXBfbm9jYWNoZShyZXMtPnN0YXJ0LCByZXNfc2l6ZSk7CiAKIAkvKiBjb3B5IGNvbmZpZyBwYXJhbWV0ZXJzIGFjcm9zcyB0byBwZGF0YSAqLwpAQCAtMTk3Miw4ICsyMDE5LDggQEAKIAlzbXNjOTExeF9yZWdfd3JpdGUocGRhdGEsIElOVF9FTiwgMCk7CiAJc21zYzkxMXhfcmVnX3dyaXRlKHBkYXRhLCBJTlRfU1RTLCAweEZGRkZGRkZGKTsKIAotCXJldHZhbCA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCBzbXNjOTExeF9pcnFoYW5kbGVyLCBJUlFGX0RJU0FCTEVELAotCQkJICAgICBkZXYtPm5hbWUsIGRldik7CisJcmV0dmFsID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsIHNtc2M5MTF4X2lycWhhbmRsZXIsCisJCQkgICAgIGlycV9mbGFncyB8IElSUUZfU0hBUkVELCBkZXYtPm5hbWUsIGRldik7CiAJaWYgKHJldHZhbCkgewogCQlTTVNDX1dBUk5JTkcoUFJPQkUsCiAJCQkiVW5hYmxlIHRvIGNsYWltIHJlcXVlc3RlZCBpcnE6ICVkIiwgZGV2LT5pcnEpOwpAQCAtMjAwNCwxOSArMjA1MSwxMiBAQAogCiAJLyogQ2hlY2sgaWYgbWFjIGFkZHJlc3MgaGFzIGJlZW4gc3BlY2lmaWVkIHdoZW4gYnJpbmdpbmcgaW50ZXJmYWNlIHVwICovCiAJaWYgKGlzX3ZhbGlkX2V0aGVyX2FkZHIoZGV2LT5kZXZfYWRkcikpIHsKLQkJc21zYzkxMXhfc2V0X21hY19hZGRyZXNzKHBkYXRhLCBkZXYtPmRldl9hZGRyKTsKKwkJc21zYzkxMXhfc2V0X2h3X21hY19hZGRyZXNzKHBkYXRhLCBkZXYtPmRldl9hZGRyKTsKIAkJU01TQ19UUkFDRShQUk9CRSwgIk1BQyBBZGRyZXNzIGlzIHNwZWNpZmllZCBieSBjb25maWd1cmF0aW9uIik7CiAJfSBlbHNlIHsKIAkJLyogVHJ5IHJlYWRpbmcgbWFjIGFkZHJlc3MgZnJvbSBkZXZpY2UuIGlmIEVFUFJPTSBpcyBwcmVzZW50CiAJCSAqIGl0IHdpbGwgYWxyZWFkeSBoYXZlIGJlZW4gc2V0ICovCi0JCXUzMiBtYWNfaGlnaDE2ID0gc21zYzkxMXhfbWFjX3JlYWQocGRhdGEsIEFERFJIKTsKLQkJdTMyIG1hY19sb3czMiA9IHNtc2M5MTF4X21hY19yZWFkKHBkYXRhLCBBRERSTCk7Ci0JCWRldi0+ZGV2X2FkZHJbMF0gPSAodTgpKG1hY19sb3czMik7Ci0JCWRldi0+ZGV2X2FkZHJbMV0gPSAodTgpKG1hY19sb3czMiA+PiA4KTsKLQkJZGV2LT5kZXZfYWRkclsyXSA9ICh1OCkobWFjX2xvdzMyID4+IDE2KTsKLQkJZGV2LT5kZXZfYWRkclszXSA9ICh1OCkobWFjX2xvdzMyID4+IDI0KTsKLQkJZGV2LT5kZXZfYWRkcls0XSA9ICh1OCkobWFjX2hpZ2gxNik7Ci0JCWRldi0+ZGV2X2FkZHJbNV0gPSAodTgpKG1hY19oaWdoMTYgPj4gOCk7CisJCXNtc2M5MTF4X3JlYWRfbWFjX2FkZHJlc3MoZGV2KTsKIAogCQlpZiAoaXNfdmFsaWRfZXRoZXJfYWRkcihkZXYtPmRldl9hZGRyKSkgewogCQkJLyogZWVwcm9tIHZhbHVlcyBhcmUgdmFsaWQgIHNvIHVzZSB0aGVtICovCkBAIC0yMDI1LDcgKzIwNjUsNyBAQAogCQl9IGVsc2UgewogCQkJLyogZWVwcm9tIHZhbHVlcyBhcmUgaW52YWxpZCwgZ2VuZXJhdGUgcmFuZG9tIE1BQyAqLwogCQkJcmFuZG9tX2V0aGVyX2FkZHIoZGV2LT5kZXZfYWRkcik7Ci0JCQlzbXNjOTExeF9zZXRfbWFjX2FkZHJlc3MocGRhdGEsIGRldi0+ZGV2X2FkZHIpOworCQkJc21zYzkxMXhfc2V0X2h3X21hY19hZGRyZXNzKHBkYXRhLCBkZXYtPmRldl9hZGRyKTsKIAkJCVNNU0NfVFJBQ0UoUFJPQkUsCiAJCQkJIk1BQyBBZGRyZXNzIGlzIHNldCB0byByYW5kb21fZXRoZXJfYWRkciIpOwogCQl9CkBAIC0yMDMzLDggKzIwNzMsNyBAQAogCiAJc3Bpbl91bmxvY2tfaXJxKCZwZGF0YS0+bWFjX2xvY2spOwogCi0JZGV2X2luZm8oJmRldi0+ZGV2LCAiTUFDIEFkZHJlc3M6ICVzXG4iLAotCQkgcHJpbnRfbWFjKG1hYywgZGV2LT5kZXZfYWRkcikpOworCWRldl9pbmZvKCZkZXYtPmRldiwgIk1BQyBBZGRyZXNzOiAlcE1cbiIsIGRldi0+ZGV2X2FkZHIpOwogCiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Ntc2M5MTF4LmggYi9kcml2ZXJzL25ldC9zbXNjOTExeC5oCmluZGV4IDJiNzY2NTQuLmI1NzE2YmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Ntc2M5MTF4LmgKKysrIGIvZHJpdmVycy9uZXQvc21zYzkxMXguaApAQCAtODEsMTIgKzgxLDE5IEBACiAKICNkZWZpbmUgUlhfU1RBVFVTX0ZJRk8JCQkweDQwCiAjZGVmaW5lIFJYX1NUU19FU18JCQkweDAwMDA4MDAwCisjZGVmaW5lIFJYX1NUU19MRU5HVEhfRVJSXwkJMHgwMDAwMTAwMAogI2RlZmluZSBSWF9TVFNfTUNBU1RfCQkJMHgwMDAwMDQwMAorI2RlZmluZSBSWF9TVFNfRlJBTUVfVFlQRV8JCTB4MDAwMDAwMjAKKyNkZWZpbmUgUlhfU1RTX0NSQ19FUlJfCQkJMHgwMDAwMDAwMgogCiAjZGVmaW5lIFJYX1NUQVRVU19GSUZPX1BFRUsJCTB4NDQKIAogI2RlZmluZSBUWF9TVEFUVVNfRklGTwkJCTB4NDgKICNkZWZpbmUgVFhfU1RTX0VTXwkJCTB4MDAwMDgwMDAKKyNkZWZpbmUgVFhfU1RTX0xPU1RfQ0FSUklFUl8JCTB4MDAwMDA4MDAKKyNkZWZpbmUgVFhfU1RTX05PX0NBUlJJRVJfCQkweDAwMDAwNDAwCisjZGVmaW5lIFRYX1NUU19MQVRFX0NPTF8JCTB4MDAwMDAyMDAKKyNkZWZpbmUgVFhfU1RTX0VYQ0VTU19DT0xfCQkweDAwMDAwMTAwCiAKICNkZWZpbmUgVFhfU1RBVFVTX0ZJRk9fUEVFSwkJMHg0QwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zbXNjOTQyMC5jIGIvZHJpdmVycy9uZXQvc21zYzk0MjAuYwppbmRleCA0ZTE1YWUwLi41OTU5YWU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zbXNjOTQyMC5jCisrKyBiL2RyaXZlcnMvbmV0L3Ntc2M5NDIwLmMKQEAgLTY3MCw3ICs2NzAsNyBAQAogCQkJc21zYzk0MjBfcGNpX2ZsdXNoX3dyaXRlKHBkKTsKIAogCQkJaW50c190b19jbGVhciB8PSAoRE1BQ19TVFNfUlhfIHwgRE1BQ19TVFNfTklTXyk7Ci0JCQluZXRpZl9yeF9zY2hlZHVsZSgmcGQtPm5hcGkpOworCQkJbmFwaV9zY2hlZHVsZSgmcGQtPm5hcGkpOwogCQl9CiAKIAkJaWYgKGludHNfdG9fY2xlYXIpCkBAIC04MDcsNyArODA3LDcgQEAKIAlpZiAocGQtPnJ4X2NzdW0pIHsKIAkJdTE2IGh3X2NzdW0gPSBnZXRfdW5hbGlnbmVkX2xlMTYoc2tiX3RhaWxfcG9pbnRlcihza2IpICsKIAkJCU5FVF9JUF9BTElHTiArIHBhY2tldF9sZW5ndGggKyA0KTsKLQkJcHV0X3VuYWxpZ25lZF9sZTE2KGNwdV90b19sZTE2KGh3X2NzdW0pLCAmc2tiLT5jc3VtKTsKKwkJcHV0X3VuYWxpZ25lZF9sZTE2KGh3X2NzdW0sICZza2ItPmNzdW0pOwogCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX0NPTVBMRVRFOwogCX0KIApAQCAtODkzLDcgKzg5Myw3IEBACiAJc21zYzk0MjBfcGNpX2ZsdXNoX3dyaXRlKHBkKTsKIAogCWlmICh3b3JrX2RvbmUgPCBidWRnZXQpIHsKLQkJbmV0aWZfcnhfY29tcGxldGUoJnBkLT5uYXBpKTsKKwkJbmFwaV9jb21wbGV0ZSgmcGQtPm5hcGkpOwogCiAJCS8qIHJlLWVuYWJsZSBSWCBETUEgaW50ZXJydXB0cyAqLwogCQlkbWFfaW50cl9lbmEgPSBzbXNjOTQyMF9yZWdfcmVhZChwZCwgRE1BQ19JTlRSX0VOQSk7CkBAIC0xMTYwLDcgKzExNjAsNyBAQAogCXNtc2NfaW5mbyhQUk9CRSwgIlBIWSBhZGRyICVkLCBwaHlfaWQgMHglMDhYIiwgcGh5ZGV2LT5hZGRyLAogCQlwaHlkZXYtPnBoeV9pZCk7CiAKLQlwaHlkZXYgPSBwaHlfY29ubmVjdChkZXYsIHBoeWRldi0+ZGV2LmJ1c19pZCwKKwlwaHlkZXYgPSBwaHlfY29ubmVjdChkZXYsIGRldl9uYW1lKCZwaHlkZXYtPmRldiksCiAJCSZzbXNjOTQyMF9waHlfYWRqdXN0X2xpbmssIDAsIFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUkpOwogCiAJaWYgKElTX0VSUihwaHlkZXYpKSB7CkBAIC0xMTY5LDcgKzExNjksNyBAQAogCX0KIAogCXByX2luZm8oIiVzOiBhdHRhY2hlZCBQSFkgZHJpdmVyIFslc10gKG1paV9idXM6cGh5X2FkZHI9JXMsIGlycT0lZClcbiIsCi0JCWRldi0+bmFtZSwgcGh5ZGV2LT5kcnYtPm5hbWUsIHBoeWRldi0+ZGV2LmJ1c19pZCwgcGh5ZGV2LT5pcnEpOworCQlkZXYtPm5hbWUsIHBoeWRldi0+ZHJ2LT5uYW1lLCBkZXZfbmFtZSgmcGh5ZGV2LT5kZXYpLCBwaHlkZXYtPmlycSk7CiAKIAkvKiBtYXNrIHdpdGggTUFDIHN1cHBvcnRlZCBmZWF0dXJlcyAqLwogCXBoeWRldi0+c3VwcG9ydGVkICY9IChQSFlfQkFTSUNfRkVBVFVSRVMgfCBTVVBQT1JURURfUGF1c2UgfApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3BpZGVyX25ldC5jIGIvZHJpdmVycy9uZXQvc3BpZGVyX25ldC5jCmluZGV4IDg4ZDJjNjcuLjkwZTY2M2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NwaWRlcl9uZXQuYworKysgYi9kcml2ZXJzL25ldC9zcGlkZXJfbmV0LmMKQEAgLTEzMDEsNyArMTMwMSw3IEBACiAJLyogaWYgYWxsIHBhY2tldHMgYXJlIGluIHRoZSBzdGFjaywgZW5hYmxlIGludGVycnVwdHMgYW5kIHJldHVybiAwICovCiAJLyogaWYgbm90LCByZXR1cm4gMSAqLwogCWlmIChwYWNrZXRzX2RvbmUgPCBidWRnZXQpIHsKLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CiAJCXNwaWRlcl9uZXRfcnhfaXJxX29uKGNhcmQpOwogCQljYXJkLT5pZ25vcmVfcnhfcmFtZnVsbCA9IDA7CiAJfQpAQCAtMTUyOCw3ICsxNTI4LDcgQEAKIAkJCXNwaWRlcl9uZXRfcmVmaWxsX3J4X2NoYWluKGNhcmQpOwogCQkJc3BpZGVyX25ldF9lbmFibGVfcnhkbWFjKGNhcmQpOwogCQkJY2FyZC0+bnVtX3J4X2ludHMgKys7Ci0JCQluZXRpZl9yeF9zY2hlZHVsZSgmY2FyZC0+bmFwaSk7CisJCQluYXBpX3NjaGVkdWxlKCZjYXJkLT5uYXBpKTsKIAkJfQogCQlzaG93X2Vycm9yID0gMDsKIAkJYnJlYWs7CkBAIC0xNTQ4LDcgKzE1NDgsNyBAQAogCQlzcGlkZXJfbmV0X3JlZmlsbF9yeF9jaGFpbihjYXJkKTsKIAkJc3BpZGVyX25ldF9lbmFibGVfcnhkbWFjKGNhcmQpOwogCQljYXJkLT5udW1fcnhfaW50cyArKzsKLQkJbmV0aWZfcnhfc2NoZWR1bGUoJmNhcmQtPm5hcGkpOworCQluYXBpX3NjaGVkdWxlKCZjYXJkLT5uYXBpKTsKIAkJc2hvd19lcnJvciA9IDA7CiAJCWJyZWFrOwogCkBAIC0xNTYyLDcgKzE1NjIsNyBAQAogCQlzcGlkZXJfbmV0X3JlZmlsbF9yeF9jaGFpbihjYXJkKTsKIAkJc3BpZGVyX25ldF9lbmFibGVfcnhkbWFjKGNhcmQpOwogCQljYXJkLT5udW1fcnhfaW50cyArKzsKLQkJbmV0aWZfcnhfc2NoZWR1bGUoJmNhcmQtPm5hcGkpOworCQluYXBpX3NjaGVkdWxlKCZjYXJkLT5uYXBpKTsKIAkJc2hvd19lcnJvciA9IDA7CiAJCWJyZWFrOwogCkBAIC0xNjU2LDExICsxNjU2LDExIEBACiAKIAlpZiAoc3RhdHVzX3JlZyAmIFNQSURFUl9ORVRfUlhJTlQgKSB7CiAJCXNwaWRlcl9uZXRfcnhfaXJxX29mZihjYXJkKTsKLQkJbmV0aWZfcnhfc2NoZWR1bGUoJmNhcmQtPm5hcGkpOworCQluYXBpX3NjaGVkdWxlKCZjYXJkLT5uYXBpKTsKIAkJY2FyZC0+bnVtX3J4X2ludHMgKys7CiAJfQogCWlmIChzdGF0dXNfcmVnICYgU1BJREVSX05FVF9UWElOVCkKLQkJbmV0aWZfcnhfc2NoZWR1bGUoJmNhcmQtPm5hcGkpOworCQluYXBpX3NjaGVkdWxlKCZjYXJkLT5uYXBpKTsKIAogCWlmIChzdGF0dXNfcmVnICYgU1BJREVSX05FVF9MSU5LSU5UKQogCQlzcGlkZXJfbmV0X2xpbmtfcmVzZXQobmV0ZGV2KTsKQEAgLTIyNTksNiArMjI1OSwyMyBAQAogCWNhcmQtPnNwaWRlcl9zdGF0cy50eF90aW1lb3V0cysrOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHNwaWRlcl9uZXRfb3BzID0geworCS5uZG9fb3BlbgkJPSBzcGlkZXJfbmV0X29wZW4sCisJLm5kb19zdG9wCQk9IHNwaWRlcl9uZXRfc3RvcCwKKwkubmRvX3N0YXJ0X3htaXQJCT0gc3BpZGVyX25ldF94bWl0LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gc3BpZGVyX25ldF9zZXRfbXVsdGksCisJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSBzcGlkZXJfbmV0X3NldF9tYWMsCisJLm5kb19jaGFuZ2VfbXR1CQk9IHNwaWRlcl9uZXRfY2hhbmdlX210dSwKKwkubmRvX2RvX2lvY3RsCQk9IHNwaWRlcl9uZXRfZG9faW9jdGwsCisJLm5kb190eF90aW1lb3V0CQk9IHNwaWRlcl9uZXRfdHhfdGltZW91dCwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKKwkvKiBIVyBWTEFOICovCisjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKKwkvKiBwb2xsIGNvbnRyb2xsZXIgKi8KKwkubmRvX3BvbGxfY29udHJvbGxlcgk9IHNwaWRlcl9uZXRfcG9sbF9jb250cm9sbGVyLAorI2VuZGlmIC8qIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSICovCit9OworCiAvKioKICAqIHNwaWRlcl9uZXRfc2V0dXBfbmV0ZGV2X29wcyAtIGluaXRpYWxpemF0aW9uIG9mIG5ldF9kZXZpY2Ugb3BlcmF0aW9ucwogICogQG5ldGRldjogbmV0X2RldmljZSBzdHJ1Y3R1cmUKQEAgLTIyNjgsMjEgKzIyODUsOCBAQAogc3RhdGljIHZvaWQKIHNwaWRlcl9uZXRfc2V0dXBfbmV0ZGV2X29wcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewotCW5ldGRldi0+b3BlbiA9ICZzcGlkZXJfbmV0X29wZW47Ci0JbmV0ZGV2LT5zdG9wID0gJnNwaWRlcl9uZXRfc3RvcDsKLQluZXRkZXYtPmhhcmRfc3RhcnRfeG1pdCA9ICZzcGlkZXJfbmV0X3htaXQ7Ci0JbmV0ZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSAmc3BpZGVyX25ldF9zZXRfbXVsdGk7Ci0JbmV0ZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSAmc3BpZGVyX25ldF9zZXRfbWFjOwotCW5ldGRldi0+Y2hhbmdlX210dSA9ICZzcGlkZXJfbmV0X2NoYW5nZV9tdHU7Ci0JbmV0ZGV2LT5kb19pb2N0bCA9ICZzcGlkZXJfbmV0X2RvX2lvY3RsOwotCS8qIHR4IHdhdGNoZG9nICovCi0JbmV0ZGV2LT50eF90aW1lb3V0ID0gJnNwaWRlcl9uZXRfdHhfdGltZW91dDsKKwluZXRkZXYtPm5ldGRldl9vcHMgPSAmc3BpZGVyX25ldF9vcHM7CiAJbmV0ZGV2LT53YXRjaGRvZ190aW1lbyA9IFNQSURFUl9ORVRfV0FUQ0hET0dfVElNRU9VVDsKLQkvKiBIVyBWTEFOICovCi0jaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKLQkvKiBwb2xsIGNvbnRyb2xsZXIgKi8KLQluZXRkZXYtPnBvbGxfY29udHJvbGxlciA9ICZzcGlkZXJfbmV0X3BvbGxfY29udHJvbGxlcjsKLSNlbmRpZiAvKiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiAqLwogCS8qIGV0aHRvb2wgb3BzICovCiAJbmV0ZGV2LT5ldGh0b29sX29wcyA9ICZzcGlkZXJfbmV0X2V0aHRvb2xfb3BzOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3RhcmZpcmUuYyBiL2RyaXZlcnMvbmV0L3N0YXJmaXJlLmMKaW5kZXggZGEzYTc2Yi4uZmNiOTQzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3RhcmZpcmUuYworKysgYi9kcml2ZXJzL25ldC9zdGFyZmlyZS5jCkBAIC0xNzgsNyArMTc4LDcgQEAKICNkZWZpbmUgRklSTVdBUkVfVFgJImFkYXB0ZWMvc3RhcmZpcmVfdHguYmluIgogCiAvKiBUaGVzZSBpZGVudGlmeSB0aGUgZHJpdmVyIGJhc2UgdmVyc2lvbiBhbmQgbWF5IG5vdCBiZSByZW1vdmVkLiAqLwotc3RhdGljIGNoYXIgdmVyc2lvbltdID0KK3N0YXRpYyBjb25zdCBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRjb25zdCA9CiBLRVJOX0lORk8gInN0YXJmaXJlLmM6djEuMDMgNy8yNi8yMDAwICBXcml0dGVuIGJ5IERvbmFsZCBCZWNrZXIgPGJlY2tlckBzY3lsZC5jb20+XG4iCiBLRVJOX0lORk8gIiAodW5vZmZpY2lhbCAyLjIvMi40IGtlcm5lbCBwb3J0LCB2ZXJzaW9uICIgRFJWX1ZFUlNJT04gIiwgIiBEUlZfUkVMREFURSAiKVxuIjsKIApAQCAtMTM0Miw4ICsxMzQyLDggQEAKIAkJaWYgKGludHJfc3RhdHVzICYgKEludHJSeERvbmUgfCBJbnRyUnhFbXB0eSkpIHsKIAkJCXUzMiBlbmFibGU7CiAKLQkJCWlmIChsaWtlbHkobmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgmbnAtPm5hcGkpKSkgewotCQkJCV9fbmV0aWZfcnhfc2NoZWR1bGUoJm5wLT5uYXBpKTsKKwkJCWlmIChsaWtlbHkobmFwaV9zY2hlZHVsZV9wcmVwKCZucC0+bmFwaSkpKSB7CisJCQkJX19uYXBpX3NjaGVkdWxlKCZucC0+bmFwaSk7CiAJCQkJZW5hYmxlID0gcmVhZGwoaW9hZGRyICsgSW50ckVuYWJsZSk7CiAJCQkJZW5hYmxlICY9IH4oSW50clJ4RG9uZSB8IEludHJSeEVtcHR5KTsKIAkJCQl3cml0ZWwoZW5hYmxlLCBpb2FkZHIgKyBJbnRyRW5hYmxlKTsKQEAgLTE1ODcsNyArMTU4Nyw3IEBACiAJCWludHJfc3RhdHVzID0gcmVhZGwoaW9hZGRyICsgSW50clN0YXR1cyk7CiAJfSB3aGlsZSAoaW50cl9zdGF0dXMgJiAoSW50clJ4RG9uZSB8IEludHJSeEVtcHR5KSk7CiAKLQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwluYXBpX2NvbXBsZXRlKG5hcGkpOwogCWludHJfc3RhdHVzID0gcmVhZGwoaW9hZGRyICsgSW50ckVuYWJsZSk7CiAJaW50cl9zdGF0dXMgfD0gSW50clJ4RG9uZSB8IEludHJSeEVtcHR5OwogCXdyaXRlbChpbnRyX3N0YXR1cywgaW9hZGRyICsgSW50ckVuYWJsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdW5ibWFjLmMgYi9kcml2ZXJzL25ldC9zdW5ibWFjLmMKaW5kZXggN2Y2OWM3Zi4uNTAxN2Q3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3VuYm1hYy5jCisrKyBiL2RyaXZlcnMvbmV0L3N1bmJtYWMuYwpAQCAtMTA3NCw2ICsxMDc0LDE4IEBACiAJLmdldF9saW5rCQk9IGJpZ21hY19nZXRfbGluaywKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYmlnbWFjX29wcyA9IHsKKwkubmRvX29wZW4JCT0gYmlnbWFjX29wZW4sCisJLm5kb19zdG9wCQk9IGJpZ21hY19jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gYmlnbWFjX3N0YXJ0X3htaXQsCisJLm5kb19nZXRfc3RhdHMJCT0gYmlnbWFjX2dldF9zdGF0cywKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdAk9IGJpZ21hY19zZXRfbXVsdGljYXN0LAorCS5uZG9fdHhfdGltZW91dAkJPSBiaWdtYWNfdHhfdGltZW91dCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBiaWdtYWNfZXRoZXJfaW5pdChzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCwKIAkJCQkgICAgICAgc3RydWN0IG9mX2RldmljZSAqcWVjX29wKQogewpAQCAtMTE4NywxNiArMTE5OSw4IEBACiAJYnAtPmRldiA9IGRldjsKIAogCS8qIFNldCBsaW5rcyB0byBvdXIgQmlnTUFDIG9wZW4gYW5kIGNsb3NlIHJvdXRpbmVzLiAqLwotCWRldi0+b3BlbiA9ICZiaWdtYWNfb3BlbjsKLQlkZXYtPnN0b3AgPSAmYmlnbWFjX2Nsb3NlOwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gJmJpZ21hY19zdGFydF94bWl0OwogCWRldi0+ZXRodG9vbF9vcHMgPSAmYmlnbWFjX2V0aHRvb2xfb3BzOwotCi0JLyogU2V0IGxpbmtzIHRvIEJpZ01BQyBzdGF0aXN0aWMgYW5kIG11bHRpLWNhc3QgbG9hZGluZyBjb2RlLiAqLwotCWRldi0+Z2V0X3N0YXRzID0gJmJpZ21hY19nZXRfc3RhdHM7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSAmYmlnbWFjX3NldF9tdWx0aWNhc3Q7Ci0KLQlkZXYtPnR4X3RpbWVvdXQgPSAmYmlnbWFjX3R4X3RpbWVvdXQ7CisJZGV2LT5uZXRkZXZfb3BzID0gJmJpZ21hY19vcHM7CiAJZGV2LT53YXRjaGRvZ190aW1lbyA9IDUqSFo7CiAKIAkvKiBGaW5pc2ggbmV0IGRldmljZSByZWdpc3RyYXRpb24uICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdW5kYW5jZS5jIGIvZHJpdmVycy9uZXQvc3VuZGFuY2UuYwppbmRleCA0MzY5NWI3Li5jMzk5YjE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdW5kYW5jZS5jCisrKyBiL2RyaXZlcnMvbmV0L3N1bmRhbmNlLmMKQEAgLTEwOSw4ICsxMDksOSBAQAogI2VuZGlmCiAKIC8qIFRoZXNlIGlkZW50aWZ5IHRoZSBkcml2ZXIgYmFzZSB2ZXJzaW9uIGFuZCBtYXkgbm90IGJlIHJlbW92ZWQuICovCi1zdGF0aWMgY2hhciB2ZXJzaW9uW10gPQotS0VSTl9JTkZPIERSVl9OQU1FICIuYzp2IiBEUlZfVkVSU0lPTiAiICIgRFJWX1JFTERBVEUgIiAgV3JpdHRlbiBieSBEb25hbGQgQmVja2VyXG4iOworc3RhdGljIGNvbnN0IGNoYXIgdmVyc2lvbltdIF9fZGV2aW5pdGNvbnN0ID0KKwlLRVJOX0lORk8gRFJWX05BTUUgIi5jOnYiIERSVl9WRVJTSU9OICIgIiBEUlZfUkVMREFURQorCSIgV3JpdHRlbiBieSBEb25hbGQgQmVja2VyXG4iOwogCiBNT0RVTEVfQVVUSE9SKCJEb25hbGQgQmVja2VyIDxiZWNrZXJAc2N5bGQuY29tPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJTdW5kYW5jZSBBbHRhIEV0aGVybmV0IGRyaXZlciIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3VuZ2VtLmMgYi9kcml2ZXJzL25ldC9zdW5nZW0uYwppbmRleCBjOWM3NjUwLi5jMDI0MzUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdW5nZW0uYworKysgYi9kcml2ZXJzL25ldC9zdW5nZW0uYwpAQCAtOTIxLDcgKzkyMSw3IEBACiAJCWdwLT5zdGF0dXMgPSByZWFkbChncC0+cmVncyArIEdSRUdfU1RBVCk7CiAJfSB3aGlsZSAoZ3AtPnN0YXR1cyAmIEdSRUdfU1RBVF9OQVBJKTsKIAotCV9fbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJX19uYXBpX2NvbXBsZXRlKG5hcGkpOwogCWdlbV9lbmFibGVfaW50cyhncCk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncC0+bG9jaywgZmxhZ3MpOwpAQCAtOTQ0LDcgKzk0NCw3IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZ3AtPmxvY2ssIGZsYWdzKTsKIAotCWlmIChuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKCZncC0+bmFwaSkpIHsKKwlpZiAobmFwaV9zY2hlZHVsZV9wcmVwKCZncC0+bmFwaSkpIHsKIAkJdTMyIGdlbV9zdGF0dXMgPSByZWFkbChncC0+cmVncyArIEdSRUdfU1RBVCk7CiAKIAkJaWYgKGdlbV9zdGF0dXMgPT0gMCkgewpAQCAtOTU0LDcgKzk1NCw3IEBACiAJCX0KIAkJZ3AtPnN0YXR1cyA9IGdlbV9zdGF0dXM7CiAJCWdlbV9kaXNhYmxlX2ludHMoZ3ApOwotCQlfX25ldGlmX3J4X3NjaGVkdWxlKCZncC0+bmFwaSk7CisJCV9fbmFwaV9zY2hlZHVsZSgmZ3AtPm5hcGkpOwogCX0KIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwLT5sb2NrLCBmbGFncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdW5sYW5jZS5jIGIvZHJpdmVycy9uZXQvc3VubGFuY2UuYwppbmRleCAxNmM1MjhkLi5hZmM3YjM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdW5sYW5jZS5jCisrKyBiL2RyaXZlcnMvbmV0L3N1bmxhbmNlLmMKQEAgLTEzMTEsNiArMTMxMSwxNyBAQAogCS5nZXRfbGluawkJPSBzcGFyY19sYW5jZV9nZXRfbGluaywKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgc3BhcmNfbGFuY2Vfb3BzID0geworCS5uZG9fb3BlbgkJPSBsYW5jZV9vcGVuLAorCS5uZG9fc3RvcAkJPSBsYW5jZV9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gbGFuY2Vfc3RhcnRfeG1pdCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdAk9IGxhbmNlX3NldF9tdWx0aWNhc3QsCisJLm5kb190eF90aW1lb3V0CQk9IGxhbmNlX3R4X3RpbWVvdXQsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogc3RhdGljIGludCBfX2RldmluaXQgc3BhcmNfbGFuY2VfcHJvYmVfb25lKHN0cnVjdCBvZl9kZXZpY2UgKm9wLAogCQkJCQkgICBzdHJ1Y3Qgb2ZfZGV2aWNlICpsZWRtYSwKIAkJCQkJICAgc3RydWN0IG9mX2RldmljZSAqbGVidWZmZXIpCkBAIC0xNDYyLDEzICsxNDczLDkgQEAKIAogCWxwLT5kZXYgPSBkZXY7CiAJU0VUX05FVERFVl9ERVYoZGV2LCAmb3AtPmRldik7Ci0JZGV2LT5vcGVuID0gJmxhbmNlX29wZW47Ci0JZGV2LT5zdG9wID0gJmxhbmNlX2Nsb3NlOwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gJmxhbmNlX3N0YXJ0X3htaXQ7Ci0JZGV2LT50eF90aW1lb3V0ID0gJmxhbmNlX3R4X3RpbWVvdXQ7CiAJZGV2LT53YXRjaGRvZ190aW1lbyA9IDUqSFo7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSAmbGFuY2Vfc2V0X211bHRpY2FzdDsKIAlkZXYtPmV0aHRvb2xfb3BzID0gJnNwYXJjX2xhbmNlX2V0aHRvb2xfb3BzOworCWRldi0+bmV0ZGV2X29wcyA9ICZzcGFyY19sYW5jZV9vcHM7CiAKIAlkZXYtPmlycSA9IG9wLT5pcnFzWzBdOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdW5xZS5jIGIvZHJpdmVycy9uZXQvc3VucWUuYwppbmRleCBmZTBjM2YyLi5jNmVjNjFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdW5xZS5jCisrKyBiL2RyaXZlcnMvbmV0L3N1bnFlLmMKQEAgLTgyOSw2ICs4MjksMTcgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBxZWNfb3BzID0geworCS5uZG9fb3BlbgkJPSBxZV9vcGVuLAorCS5uZG9fc3RvcAkJPSBxZV9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gcWVfc3RhcnRfeG1pdCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdAk9IHFlX3NldF9tdWx0aWNhc3QsCisJLm5kb190eF90aW1lb3V0CQk9IHFlX3R4X3RpbWVvdXQsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogc3RhdGljIGludCBfX2RldmluaXQgcWVjX2V0aGVyX2luaXQoc3RydWN0IG9mX2RldmljZSAqb3ApCiB7CiAJc3RhdGljIHVuc2lnbmVkIHZlcnNpb25fcHJpbnRlZDsKQEAgLTg5MywxNSArOTA0LDExIEBACiAKIAlTRVRfTkVUREVWX0RFVihkZXYsICZvcC0+ZGV2KTsKIAotCWRldi0+b3BlbiA9IHFlX29wZW47Ci0JZGV2LT5zdG9wID0gcWVfY2xvc2U7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBxZV9zdGFydF94bWl0OwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gcWVfc2V0X211bHRpY2FzdDsKLQlkZXYtPnR4X3RpbWVvdXQgPSBxZV90eF90aW1lb3V0OwogCWRldi0+d2F0Y2hkb2dfdGltZW8gPSA1KkhaOwogCWRldi0+aXJxID0gb3AtPmlycXNbMF07CiAJZGV2LT5kbWEgPSAwOwogCWRldi0+ZXRodG9vbF9vcHMgPSAmcWVfZXRodG9vbF9vcHM7CisJZGV2LT5uZXRkZXZfb3BzID0gJnFlY19vcHM7CiAKIAlyZXMgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAlpZiAocmVzKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3Vudm5ldC5jIGIvZHJpdmVycy9uZXQvc3Vudm5ldC5jCmluZGV4IDYxMTIzMGYuLmE4MmZiMmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N1bnZuZXQuYworKysgYi9kcml2ZXJzL25ldC9zdW52bmV0LmMKQEAgLTEwMTIsNiArMTAxMiwxNiBAQAogc3RhdGljIExJU1RfSEVBRCh2bmV0X2xpc3QpOwogc3RhdGljIERFRklORV9NVVRFWCh2bmV0X2xpc3RfbXV0ZXgpOwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHZuZXRfb3BzID0geworCS5uZG9fb3BlbgkJPSB2bmV0X29wZW4sCisJLm5kb19zdG9wCQk9IHZuZXRfY2xvc2UsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QJPSB2bmV0X3NldF9yeF9tb2RlLAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gdm5ldF9zZXRfbWFjX2FkZHIsCisJLm5kb190eF90aW1lb3V0CQk9IHZuZXRfdHhfdGltZW91dCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gdm5ldF9jaGFuZ2VfbXR1LAorCS5uZG9fc3RhcnRfeG1pdAkJPSB2bmV0X3N0YXJ0X3htaXQsCit9OworCiBzdGF0aWMgc3RydWN0IHZuZXQgKiBfX2RldmluaXQgdm5ldF9uZXcoY29uc3QgdTY0ICpsb2NhbF9tYWMpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKQEAgLTEwNDAsMTUgKzEwNTAsOSBAQAogCUlOSVRfTElTVF9IRUFEKCZ2cC0+bGlzdCk7CiAJdnAtPmxvY2FsX21hYyA9ICpsb2NhbF9tYWM7CiAKLQlkZXYtPm9wZW4gPSB2bmV0X29wZW47Ci0JZGV2LT5zdG9wID0gdm5ldF9jbG9zZTsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IHZuZXRfc2V0X3J4X21vZGU7Ci0JZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSB2bmV0X3NldF9tYWNfYWRkcjsKLQlkZXYtPnR4X3RpbWVvdXQgPSB2bmV0X3R4X3RpbWVvdXQ7CisJZGV2LT5uZXRkZXZfb3BzID0gJnZuZXRfb3BzOwogCWRldi0+ZXRodG9vbF9vcHMgPSAmdm5ldF9ldGh0b29sX29wczsKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gVk5FVF9UWF9USU1FT1VUOwotCWRldi0+Y2hhbmdlX210dSA9IHZuZXRfY2hhbmdlX210dTsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IHZuZXRfc3RhcnRfeG1pdDsKIAogCWVyciA9IHJlZ2lzdGVyX25ldGRldihkZXYpOwogCWlmIChlcnIpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RjMzU4MTUuYyBiL2RyaXZlcnMvbmV0L3RjMzU4MTUuYwppbmRleCBiY2QwZTYwLi5iNTJhMWMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90YzM1ODE1LmMKKysrIGIvZHJpdmVycy9uZXQvdGMzNTgxNS5jCkBAIC03MjUsNyArNzI1LDcgQEAKIAl9CiAKIAkvKiBhdHRhY2ggdGhlIG1hYyB0byB0aGUgcGh5ICovCi0JcGh5ZGV2ID0gcGh5X2Nvbm5lY3QoZGV2LCBwaHlkZXYtPmRldi5idXNfaWQsCisJcGh5ZGV2ID0gcGh5X2Nvbm5lY3QoZGV2LCBkZXZfbmFtZSgmcGh5ZGV2LT5kZXYpLAogCQkJICAgICAmdGNfaGFuZGxlX2xpbmtfY2hhbmdlLCAwLAogCQkJICAgICBscC0+Y2hpcHR5cGUgPT0gVEMzNTgxNV9UWDQ5MzkgPwogCQkJICAgICBQSFlfSU5URVJGQUNFX01PREVfUk1JSSA6IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUkpOwpAQCAtNzM1LDcgKzczNSw3IEBACiAJfQogCXByaW50ayhLRVJOX0lORk8gIiVzOiBhdHRhY2hlZCBQSFkgZHJpdmVyIFslc10gIgogCQkiKG1paV9idXM6cGh5X2FkZHI9JXMsIGlkPSV4KVxuIiwKLQkJZGV2LT5uYW1lLCBwaHlkZXYtPmRydi0+bmFtZSwgcGh5ZGV2LT5kZXYuYnVzX2lkLAorCQlkZXYtPm5hbWUsIHBoeWRldi0+ZHJ2LT5uYW1lLCBkZXZfbmFtZSgmcGh5ZGV2LT5kZXYpLAogCQlwaHlkZXYtPnBoeV9pZCk7CiAKIAkvKiBtYXNrIHdpdGggTUFDIHN1cHBvcnRlZCBmZWF0dXJlcyAqLwpAQCAtMTYwOSw4ICsxNjA5LDggQEAKIAlpZiAoIShkbWFjdGwgJiBETUFfSW50TWFzaykpIHsKIAkJLyogZGlzYWJsZSBpbnRlcnJ1cHRzICovCiAJCXRjX3dyaXRlbChkbWFjdGwgfCBETUFfSW50TWFzaywgJnRyLT5ETUFfQ3RsKTsKLQkJaWYgKG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoJmxwLT5uYXBpKSkKLQkJCV9fbmV0aWZfcnhfc2NoZWR1bGUoJmxwLT5uYXBpKTsKKwkJaWYgKG5hcGlfc2NoZWR1bGVfcHJlcCgmbHAtPm5hcGkpKQorCQkJX19uYXBpX3NjaGVkdWxlKCZscC0+bmFwaSk7CiAJCWVsc2UgewogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogaW50ZXJydXB0IHRha2VuIGluIHBvbGxcbiIsCiAJCQkgICAgICAgZGV2LT5uYW1lKTsKQEAgLTE5MTksNyArMTkxOSw3IEBACiAJc3Bpbl91bmxvY2soJmxwLT5sb2NrKTsKIAogCWlmIChyZWNlaXZlZCA8IGJ1ZGdldCkgewotCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJLyogZW5hYmxlIGludGVycnVwdHMgKi8KIAkJdGNfd3JpdGVsKHRjX3JlYWRsKCZ0ci0+RE1BX0N0bCkgJiB+RE1BX0ludE1hc2ssICZ0ci0+RE1BX0N0bCk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdGVodXRpLmMgYi9kcml2ZXJzL25ldC90ZWh1dGkuYwppbmRleCBhN2E0ZGM0Li43ZGViZDFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90ZWh1dGkuYworKysgYi9kcml2ZXJzL25ldC90ZWh1dGkuYwpAQCAtNjMsNyArNjMsNiBAQAogICovCiAKICNpbmNsdWRlICJ0ZWh1dGkuaCIKLSNpbmNsdWRlICJ0ZWh1dGlfZncuaCIKIAogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIF9fZGV2aW5pdGRhdGEgYmR4X3BjaV90YmxbXSA9IHsKIAl7MHgxRkM5LCAweDMwMDksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LApAQCAtMjY1LDggKzI2NCw4IEBACiAJCWJkeF9pc3JfZXh0cmEocHJpdiwgaXNyKTsKIAogCWlmIChpc3IgJiAoSVJfUlhfREVTQ18wIHwgSVJfVFhfRlJFRV8wKSkgewotCQlpZiAobGlrZWx5KG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoJnByaXYtPm5hcGkpKSkgewotCQkJX19uZXRpZl9yeF9zY2hlZHVsZSgmcHJpdi0+bmFwaSk7CisJCWlmIChsaWtlbHkobmFwaV9zY2hlZHVsZV9wcmVwKCZwcml2LT5uYXBpKSkpIHsKKwkJCV9fbmFwaV9zY2hlZHVsZSgmcHJpdi0+bmFwaSk7CiAJCQlSRVQoSVJRX0hBTkRMRUQpOwogCQl9IGVsc2UgewogCQkJLyogTk9URTogd2UgZ2V0IGhlcmUgaWYgaW50ciBoYXMgc2xpcHBlZCBpbnRvIHdpbmRvdwpAQCAtMzAyLDcgKzMwMSw3IEBACiAJCSAqIGRldmljZSBsb2NrIGFuZCBhbGxvdyB3YWl0aW5nIHRhc2tzIChlZyBybW1vZCkgdG8gYWR2YW5jZSkgKi8KIAkJcHJpdi0+bmFwaV9zdG9wID0gMDsKIAotCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJYmR4X2VuYWJsZV9pbnRlcnJ1cHRzKHByaXYpOwogCX0KIAlyZXR1cm4gd29ya19kb25lOwpAQCAtMzE4LDI4ICszMTcsNDEgQEAKIAogc3RhdGljIGludCBiZHhfZndfbG9hZChzdHJ1Y3QgYmR4X3ByaXYgKnByaXYpCiB7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyA9IE5VTEw7CiAJaW50IG1hc3RlciwgaTsKKwlpbnQgcmM7CiAKIAlFTlRFUjsKIAltYXN0ZXIgPSBSRUFEX1JFRyhwcml2LCByZWdJTklUX1NFTUFQSE9SRSk7CiAJaWYgKCFSRUFEX1JFRyhwcml2LCByZWdJTklUX1NUQVRVUykgJiYgbWFzdGVyKSB7Ci0JCWJkeF90eF9wdXNoX2Rlc2Nfc2FmZShwcml2LCBzX2Zpcm1Mb2FkLCBzaXplb2Yoc19maXJtTG9hZCkpOworCQlyYyA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3LCAidGVodXRpL2Zpcm13YXJlLmJpbiIsICZwcml2LT5wZGV2LT5kZXYpOworCQlpZiAocmMpCisJCQlnb3RvIG91dDsKKwkJYmR4X3R4X3B1c2hfZGVzY19zYWZlKHByaXYsIChjaGFyICopZnctPmRhdGEsIGZ3LT5zaXplKTsKIAkJbWRlbGF5KDEwMCk7CiAJfQogCWZvciAoaSA9IDA7IGkgPCAyMDA7IGkrKykgewotCQlpZiAoUkVBRF9SRUcocHJpdiwgcmVnSU5JVF9TVEFUVVMpKQotCQkJYnJlYWs7CisJCWlmIChSRUFEX1JFRyhwcml2LCByZWdJTklUX1NUQVRVUykpIHsKKwkJCXJjID0gMDsKKwkJCWdvdG8gb3V0OworCQl9CiAJCW1kZWxheSgyKTsKIAl9CisJcmMgPSAtRUlPOworb3V0OgogCWlmIChtYXN0ZXIpCiAJCVdSSVRFX1JFRyhwcml2LCByZWdJTklUX1NFTUFQSE9SRSwgMSk7CisJaWYgKGZ3KQorCQlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKIAotCWlmIChpID09IDIwMCkgeworCWlmIChyYykgewogCQlFUlIoIiVzOiBmaXJtd2FyZSBsb2FkaW5nIGZhaWxlZFxuIiwgcHJpdi0+bmRldi0+bmFtZSk7Ci0JCURCRygiVlBDID0gMHgleCBWSUMgPSAweCV4IElOSVRfU1RBVFVTID0gMHgleCBpPSVkXG4iLAotCQkgICAgUkVBRF9SRUcocHJpdiwgcmVnVlBDKSwKLQkJICAgIFJFQURfUkVHKHByaXYsIHJlZ1ZJQyksIFJFQURfUkVHKHByaXYsIHJlZ0lOSVRfU1RBVFVTKSwgaSk7Ci0JCVJFVCgtRUlPKTsKKwkJaWYgKHJjID09IC1FSU8pCisJCQlEQkcoIlZQQyA9IDB4JXggVklDID0gMHgleCBJTklUX1NUQVRVUyA9IDB4JXggaT0lZFxuIiwKKwkJCSAgICBSRUFEX1JFRyhwcml2LCByZWdWUEMpLAorCQkJICAgIFJFQURfUkVHKHByaXYsIHJlZ1ZJQyksCisJCQkgICAgUkVBRF9SRUcocHJpdiwgcmVnSU5JVF9TVEFUVVMpLCBpKTsKKwkJUkVUKHJjKTsKIAl9IGVsc2UgewogCQlEQkcoIiVzOiBmaXJtd2FyZSBsb2FkaW5nIHN1Y2Nlc3NcbiIsIHByaXYtPm5kZXYtPm5hbWUpOwogCQlSRVQoMCk7CkBAIC02MTcsMTMgKzYyOSw2IEBACiAJUkVUKHJjKTsKIH0KIAotc3RhdGljIHZvaWQgX19pbml0IGJkeF9maXJtd2FyZV9lbmRpYW5lc3Modm9pZCkKLXsKLQlpbnQgaTsKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzX2Zpcm1Mb2FkKTsgaSsrKQotCQlzX2Zpcm1Mb2FkW2ldID0gQ1BVX0NISVBfU1dBUDMyKHNfZmlybUxvYWRbaV0pOwotfQotCiBzdGF0aWMgaW50IGJkeF9yYW5nZV9jaGVjayhzdHJ1Y3QgYmR4X3ByaXYgKnByaXYsIHUzMiBvZmZzZXQpCiB7CiAJcmV0dXJuIChvZmZzZXQgPiAodTMyKSAoQkRYX1JFR1NfU0laRSAvIHByaXYtPm5pYy0+cG9ydF9udW0pKSA/CkBAIC0yNTAxLDcgKzI1MDYsNiBAQAogc3RhdGljIGludCBfX2luaXQgYmR4X21vZHVsZV9pbml0KHZvaWQpCiB7CiAJRU5URVI7Ci0JYmR4X2Zpcm13YXJlX2VuZGlhbmVzcygpOwogCWluaXRfdHhkX3NpemVzKCk7CiAJcHJpbnRfZHJpdmVyX2lkKCk7CiAJUkVUKHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmJkeF9wY2lfZHJpdmVyKSk7CkBAIC0yNTIxLDMgKzI1MjUsNCBAQAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKIE1PRFVMRV9ERVNDUklQVElPTihCRFhfRFJWX0RFU0MpOworTU9EVUxFX0ZJUk1XQVJFKCJ0ZWh1dGkvZmlybXdhcmUuYmluIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90ZWh1dGkuaCBiL2RyaXZlcnMvbmV0L3RlaHV0aS5oCmluZGV4IGVmYWY4NGQuLmRlYzY3ZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3RlaHV0aS5oCisrKyBiL2RyaXZlcnMvbmV0L3RlaHV0aS5oCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8bGludXgvaWZfdmxhbi5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KIAogLyogQ29tcGlsZSBUaW1lIFN3aXRjaGVzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90ZWh1dGlfZncuaCBiL2RyaXZlcnMvbmV0L3RlaHV0aV9mdy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYzYwM2E4Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3RlaHV0aV9mdy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTA3MTIgKzAsMCBAQAotLyoKLSAqIFRlaHV0aSBOZXR3b3JrcyhSKSBOZXR3b3JrIERyaXZlcgotICogQ29weXJpZ2h0IChDKSAyMDA3IFRlaHV0aSBOZXR3b3JrcyBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0KLS8qIExvYWRpbmcgRmlybXdhcmUgKi8KLS8qIElOVF9NRU0gVmVyICovCi1zdGF0aWMgdTMyIHNfZmlybUxvYWRbXSA9IHsKLQkweDAwMGYwMDAyLAotCTB4NDA3MTgwMDAsCi0JMHgwMDAwMDAyZCwKLQkweGMwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAwMSwKLQkweDAwMDAwMDJkLAotCTB4YzA4MDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDAyLAotCTB4MDAwMDAwMmQsCi0JMHhjMTAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMDMsCi0JMHgwMDAwMDAyZCwKLQkweGMxODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAwNCwKLQkweDAwMDAwMDJkLAotCTB4YzIwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDA1LAotCTB4MDAwMDAwMmQsCi0JMHhjMjgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMDYsCi0JMHgwMDAwMDAyZCwKLQkweGMzMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAwNywKLQkweDAwMDAwMDJkLAotCTB4YzM4MDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDA4LAotCTB4MDAwMDAwMmQsCi0JMHhjNDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMDksCi0JMHgwMDAwMDAyZCwKLQkweGM0ODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAwYSwKLQkweDAwMDAwMDJkLAotCTB4YzUwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDBiLAotCTB4MDAwMDAwMmQsCi0JMHhjNTgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMGMsCi0JMHgwMDAwMDAyZCwKLQkweGM2MDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAwZCwKLQkweDAwMDAwMDJkLAotCTB4YzY4MDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDBlLAotCTB4MDAwMDAwMmQsCi0JMHhjNzAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMGYsCi0JMHgwMDAwMDAyZCwKLQkweGM3ODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAxMCwKLQkweDAwMDAwMDJkLAotCTB4YzgwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDExLAotCTB4MDAwMDAwMmQsCi0JMHhjODgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMTIsCi0JMHgwMDAwMDAyZCwKLQkweGM5MDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAxMywKLQkweDAwMDAwMDJkLAotCTB4Yzk4MDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDE0LAotCTB4MDAwMDAwMmQsCi0JMHhjYTAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMTUsCi0JMHgwMDAwMDAyZCwKLQkweGNhODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAxNiwKLQkweDAwMDAwMDJkLAotCTB4Y2IwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDE3LAotCTB4MDAwMDAwMmQsCi0JMHhjYjgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMTgsCi0JMHgwMDAwMDAyZCwKLQkweGNjMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAxOSwKLQkweDAwMDAwMDJkLAotCTB4Y2M4MDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDFhLAotCTB4MDAwMDAwMmQsCi0JMHhjZDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMWIsCi0JMHgwMDAwMDAyZCwKLQkweGNkODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAxYywKLQkweDAwMDAwMDJkLAotCTB4Y2UwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDFkLAotCTB4MDAwMDAwMmQsCi0JMHhjZTgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMWUsCi0JMHgwMDAwMDAyZCwKLQkweGNmMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAxZiwKLQkweDAwMDAwMDJkLAotCTB4Y2Y4MDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDIwLAotCTB4MDAwMDAwMmQsCi0JMHhkMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMjEsCi0JMHgwMDAwMDAyZCwKLQkweGQwODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAyMiwKLQkweDAwMDAwMDJkLAotCTB4ZDEwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDIzLAotCTB4MDAwMDAwMmQsCi0JMHhkMTgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMjQsCi0JMHgwMDAwMDAyZCwKLQkweGQyMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAyNSwKLQkweDAwMDAwMDJkLAotCTB4ZDI4MDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDI2LAotCTB4MDAwMDAwMmQsCi0JMHhkMzAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMjcsCi0JMHgwMDAwMDAyZCwKLQkweGQzODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAyOCwKLQkweDAwMDAwMDJkLAotCTB4ZDQwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDI5LAotCTB4MDAwMDAwMmQsCi0JMHhkNDgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMmEsCi0JMHgwMDAwMDAyZCwKLQkweGQ1MDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAyYiwKLQkweDAwMDAwMDJkLAotCTB4ZDU4MDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDJjLAotCTB4MDAwMDAwMmQsCi0JMHhkNjAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMmQsCi0JMHgwMDAwMDAyZCwKLQkweGQ2ODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAyZSwKLQkweDAwMDAwMDJkLAotCTB4ZDcwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDJmLAotCTB4MDAwMDAwMmQsCi0JMHhkNzgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMzAsCi0JMHgwMDAwMDAyZCwKLQkweGQ4MDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAzMSwKLQkweDAwMDAwMDJkLAotCTB4ZDg4MDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDMyLAotCTB4MDAwMDAwMmQsCi0JMHhkOTAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMzMsCi0JMHgwMDAwMDAyZCwKLQkweGQ5ODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAzNCwKLQkweDAwMDAwMDJkLAotCTB4ZGEwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDM1LAotCTB4MDAwMDAwMmQsCi0JMHhkYTgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMzYsCi0JMHgwMDAwMDAyZCwKLQkweGRiMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAzNywKLQkweDAwMDAwMDJkLAotCTB4ZGI4MDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDM4LAotCTB4MDAwMDAwN2IsCi0JMHhkZDYwODAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMzksCi0JMHgwMDAwMDAyZCwKLQkweGRkMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAzYSwKLQkweDAwMDAwMDJkLAotCTB4ZGI4MDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDNiLAotCTB4MDAwMDAwMmQsCi0JMHhkZDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwM2MsCi0JMHgwMDAwMDAyZCwKLQkweGRkMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAzZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDNlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwM2YsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA0MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDQxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNDIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA0MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDQ0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNDUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA0NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDQ3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNDgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA0OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDRhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNGIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA0YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDRkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNGUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA0ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDUwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA1MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDUzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA1NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDU2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA1OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDU5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA1YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDVjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA1ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDVmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNjAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA2MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDYyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNjMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA2NCwKLQkweDAwMDAwMDJkLAotCTB4ZGIwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDY1LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDEwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNjYsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA2NywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDY4LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDgwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNjksCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA2YSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDMwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDZiLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNmMsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA2ZCwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDAwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDZlLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNmYsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAzZDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA3MCwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDcxLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNzIsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwNzA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA3MywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDc0LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMjg4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNzUsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA3NiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDc3LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMzcwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNzgsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA3OSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDI5MDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDdhLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwN2IsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA3YywKLQkweDAwMDAwMDNmLAotCTB4ZGQwNGFhMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDdkLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwN2UsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAyODA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA3ZiwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDgwLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwODEsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAzMTA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA4MiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDgzLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMmI4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwODQsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA4NSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDg2LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAxZTQwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwODcsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA4OCwKLQkweDAwMDAwMDNmLAotCTB4ZDc4MDAwODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDg5LAotCTB4MDAwMDAwM2YsCi0JMHhkNzk4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOGEsCi0JMHgwMDAwMDA1OSwKLQkweGQ3ODAzN2VmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA4YiwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDhjLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOGQsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA4ZSwKLQkweDAwMDAwMDJkLAotCTB4ZDdkNjAyN2YsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDhmLAotCTB4MDAwMDAwMTgsCi0JMHgxN2ZmMDA4MSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOTAsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA5MSwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDkyLAotCTB4MDAwMDAwMmQsCi0JMHhkN2Q4MDBiOCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOTMsCi0JMHgwMDAwMDAxOCwKLQkweDE3ZWIwMDgxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA5NCwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDI5MDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDk1LAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOTYsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA5NywKLQkweDAwMDAwMDNmLAotCTB4ZGQwNGFhODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDk4LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOTksCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAyYjA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA5YSwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDliLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOWMsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwMDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA5ZCwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDllLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMjk4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOWYsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBhMCwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGExLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYTIsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBhMywKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDJhMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGE0LAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYTUsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBhNiwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDkxODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGE3LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYTgsCi0JMHgwMDAwMDAzZiwKLQkweGQ2ODAxOTg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBhOSwKLQkweDAwMDAwMDNmLAotCTB4ZDY4MDAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGFhLAotCTB4MDAwMDAwMzUsCi0JMHhkNjgwMDBlZCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYWIsCi0JMHgwMDAwMDAxOCwKLQkweDM3ZmYwMDgxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBhYywKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDJiMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGFkLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYWUsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBhZiwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDAwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGIwLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYjEsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAyYTg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBiMiwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGIzLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYjQsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwMDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBiNSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGI2LAotCTB4MDAwMDAwM2YsCi0JMHhkNjgwMGM4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYjcsCi0JMHgwMDAwMDAzZiwKLQkweGQ2ODAwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBiOCwKLQkweDAwMDAwMDM1LAotCTB4ZDY4MDAwZWQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGI5LAotCTB4MDAwMDAwMTgsCi0JMHgzN2ZmMDA4MSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYmEsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAyYTg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBiYiwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGJjLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYmQsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwMDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBiZSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGJmLAotCTB4MDAwMDAwM2YsCi0JMHhkNjgwMGY4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYzAsCi0JMHgwMDAwMDAzZiwKLQkweGQ2ODAwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBjMSwKLQkweDAwMDAwMDM1LAotCTB4ZDY4MDAwZWQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGMyLAotCTB4MDAwMDAwMTgsCi0JMHgzN2ZmMDA4MSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYzMsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAyYTA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBjNCwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGM1LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYzYsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAxMTg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBjNywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGM4LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMjg4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYzksCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBjYSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGNiLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMzc4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwY2MsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBjZCwKLQkweDAwMDAwMDJkLAotCTB4ZDM4MDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGNlLAotCTB4MDAwMDAwM2YsCi0JMHhkMjAwMzc4MCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwY2YsCi0JMHgwMDAwMDAzZiwKLQkweGQxODAwNDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBkMCwKLQkweDAwMDAwMDNmLAotCTB4ZDE4NDAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGQxLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZDIsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBkMywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGQ0LAotCTB4MDAwMDAwM2YsCi0JMHhkMTdmZmY4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZDUsCi0JMHgwMDAwMDAzZiwKLQkweGQxN2ZmZjgxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBkNiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGQ3LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZDgsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBkOSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGRhLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZGIsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBkYywKLQkweDAwMDAwMDNmLAotCTB4ZDY4MDA3ODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGRkLAotCTB4MDAwMDAwM2YsCi0JMHhkNjgwMDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZGUsCi0JMHgwMDAwMDAzNSwKLQkweGQ2ODAwMGVkLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBkZiwKLQkweDAwMDAwMDE4LAotCTB4MzdmZjAwODEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGUwLAotCTB4MDAwMDAwNDksCi0JMHhkZDAwM2I2MywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZTEsCi0JMHgwMDAwMDA1OSwKLQkweGRkMDAzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBlMiwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGUzLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZTQsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBlNSwKLQkweDAwMDAwMDJkLAotCTB4ZGQwNjAyN2YsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGU2LAotCTB4MDAwMDAwMTgsCi0JMHgxZDdmM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZTcsCi0JMHgwMDAwMDA0NSwKLQkweGRkMDAzMTM5LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBlOCwKLQkweDAwMDAwMDk0LAotCTB4MDAwYjMxM2IsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGU5LAotCTB4MDAwMDAwOTQsCi0JMHgwMDA5MzEzZCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZWEsCi0JMHgwMDAwMDA5NCwKLQkweDAwMDczMTNmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBlYiwKLQkweDAwMDAwMDk0LAotCTB4MDAwNTNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGVjLAotCTB4MDAwMDAwMDksCi0JMHhjMWVkM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZWQsCi0JMHgwMDAwMDAzZiwKLQkweGQyMDBiNzgwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBlZSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDI4ODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGVmLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZjAsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzMjY0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBmMSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGYyLAotCTB4MDAwMDAwM2YsCi0JMHhkNjgwMDc4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZjMsCi0JMHgwMDAwMDAzZiwKLQkweGQ2ODAwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBmNCwKLQkweDAwMDAwMDM1LAotCTB4ZDY4MDAwZWQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGY1LAotCTB4MDAwMDAwMTgsCi0JMHgzN2ZmMDA4MSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZjYsCi0JMHgwMDAwMDA0OSwKLQkweGRkMDAzYjYzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBmNywKLQkweDAwMDAwMDU5LAotCTB4ZGQwMDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGY4LAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZjksCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBmYSwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGZiLAotCTB4MDAwMDAwMmQsCi0JMHhkZDA2MDI3ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZmMsCi0JMHgwMDAwMDAxOCwKLQkweDFkN2YzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBmZCwKLQkweDAwMDAwMDQ1LAotCTB4ZGQwMDMxM2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGZlLAotCTB4MDAwMDAwMTgsCi0JMHgxZDJkM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZmYsCi0JMHgwMDAwMDA0NSwKLQkweGRkMDAzMTNjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEwMCwKLQkweDAwMDAwMDE4LAotCTB4MWQxMzNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTAxLAotCTB4MDAwMDAwNDUsCi0JMHhkZDAwMzEzZSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMDIsCi0JMHgwMDAwMDAxOCwKLQkweDFkMWIzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEwMywKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDMwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTA0LAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMDUsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEwNiwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDAxMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTA3LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMDgsCi0JMHgwMDAwMDAwOSwKLQkweGM1MmQzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEwOSwKLQkweDAwMDAwMDI5LAotCTB4ZDIwMTAwNjQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTBhLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMjg4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMGIsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEwYywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDMyNjQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTBkLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMGUsCi0JMHgwMDAwMDAwOSwKLQkweGMyMjkzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEwZiwKLQkweDAwMDAwMDI5LAotCTB4ZDIwMDAwNjQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTEwLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMjg4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMTEsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODExMiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDMyNjQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTEzLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMTQsCi0JMHgwMDAwMDA0OSwKLQkweGRkMDAzYjYzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODExNSwKLQkweDAwMDAwMDU5LAotCTB4ZGQwMDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTE2LAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMTcsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODExOCwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTE5LAotCTB4MDAwMDAwMmQsCi0JMHhkZDA2MDI3ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMWEsCi0JMHgwMDAwMDAxOCwKLQkweDFkN2YzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODExYiwKLQkweDAwMDAwMDQ1LAotCTB4ZGQwMDMxM2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTFjLAotCTB4MDAwMDAwMTgsCi0JMHgxZDBmM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMWQsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAzMDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODExZSwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTFmLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMjAsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwMTA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEyMSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTIyLAotCTB4MDAwMDAwMDksCi0JMHhjNTJkM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMjMsCi0JMHgwMDAwMDAyZCwKLQkweGQxMDgwMDgyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEyNCwKLQkweDAwMDAwMDA4LAotCTB4MjNjMzNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTI1LAotCTB4MDAwMDAwNDksCi0JMHhkNjAwM2IwYSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMjYsCi0JMHgwMDAwMDAzZiwKLQkweGQzMDAwMDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEyNywKLQkweDAwMDAwMDNmLAotCTB4ZDMwNDAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTI4LAotCTB4MDAwMDAwMmYsCi0JMHhkNjgxNDA4NSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMjksCi0JMHgwMDAwMDAzZiwKLQkweGQ0ZmZmZjg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEyYSwKLQkweDAwMDAwMDNmLAotCTB4ZDQ4MDA3ODEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTJiLAotCTB4MDAwMDAwM2YsCi0JMHhkMWZmZmY4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMmMsCi0JMHgwMDAwMDAzZiwKLQkweGQxODAwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEyZCwKLQkweDAwMDAwMDQ5LAotCTB4ZGQwMDM2NjYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTJlLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMmYsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEzMCwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTMxLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I2OSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMzIsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEzMywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTM0LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMzUsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjY5LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEzNiwKLQkweDAwMDAwMDYxLAotCTB4ZjYwMDA0NmMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTM3LAotCTB4MDAwMDAwMzUsCi0JMHhkNjgwMDBlZCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMzgsCi0JMHgwMDAwMDAxOCwKLQkweDNkNmIwMDgxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEzOSwKLQkweDAwMDAwMDQ5LAotCTB4ZDYwMDA1OGIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTNhLAotCTB4MDAwMDAwMmYsCi0JMHhkNjgxMDEwNiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxM2IsCi0JMHgwMDAwMDAyZCwKLQkweGQyMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEzYywKLQkweDAwMDAwMDIxLAotCTB4ZDIwMDAwZTQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTNkLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxM2UsCi0JMHgwMDAwMDAyZCwKLQkweGRkMDYwMTdmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEzZiwKLQkweDAwMDAwMDE4LAotCTB4MWQ3ZjNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTQwLAotCTB4MDAwMDAwNDksCi0JMHhkODAwMzY2YywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNDEsCi0JMHgwMDAwMDA2OSwKLQkweGQ4MDAzM2U3LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE0MiwKLQkweDAwMDAwMDY5LAotCTB4ZDgwMDMzZTcsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTQzLAotCTB4MDAwMDAwNjksCi0JMHhkODAwMzdlZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNDQsCi0JMHgwMDAwMDAzMSwKLQkweGQ2MDAwMTZjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE0NSwKLQkweDAwMDAwMDJkLAotCTB4ZDEwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTQ2LAotCTB4MDAwMDAwNDksCi0JMHhkMTdhMzNlNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNDcsCi0JMHgwMDAwMDAyZiwKLQkweGQxNzEwMTYyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE0OCwKLQkweDAwMDAwMDJmLAotCTB4ZDE2MTAxNjIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTQ5LAotCTB4MDAwMDAwNDksCi0JMHhkMTQwMzNlMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNGEsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE0YiwKLQkweDAwMDAwMDJkLAotCTB4ZGQwNjAxN2YsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTRjLAotCTB4MDAwMDAwMTgsCi0JMHgxZDdmM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNGQsCi0JMHgwMDAwMDA0OSwKLQkweGQ4MDAzNjZjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE0ZSwKLQkweDAwMDAwMDY5LAotCTB4ZDgwMDMzZTcsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTRmLAotCTB4MDAwMDAwNjksCi0JMHhkODAwMzE2MiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNTAsCi0JMHgwMDAwMDA2OSwKLQkweGQ4MDAzN2VmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE1MSwKLQkweDAwMDAwMDMxLAotCTB4ZDYwMDAxNmMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTUyLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNTMsCi0JMHgwMDAwMDAyZCwKLQkweGRkMDYwMTdmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE1NCwKLQkweDAwMDAwMDE4LAotCTB4MWQ3ZjNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTU1LAotCTB4MDAwMDAwNDksCi0JMHhkODAwMzY2YywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNTYsCi0JMHgwMDAwMDA2OSwKLQkweGQ4MDAzM2U3LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE1NywKLQkweDAwMDAwMDY5LAotCTB4ZDgwMDMzZTcsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTU4LAotCTB4MDAwMDAwNjksCi0JMHhkODAwMzdlZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNTksCi0JMHgwMDAwMDAzMSwKLQkweGQ2MDAwMTZjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE1YSwKLQkweDAwMDAwMDJkLAotCTB4ZDEwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTViLAotCTB4MDAwMDAwMmQsCi0JMHhkMTZjMDdlNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNWMsCi0JMHgwMDAwMDA0OSwKLQkweGQxNDAzM2UzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE1ZCwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTVlLAotCTB4MDAwMDAwMmQsCi0JMHhkZDA2MDE3ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNWYsCi0JMHgwMDAwMDAxOCwKLQkweDFkN2YzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE2MCwKLQkweDAwMDAwMDQ5LAotCTB4ZDgwMDM2NmMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTYxLAotCTB4MDAwMDAwNjksCi0JMHhkODAwMzNlNywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNjIsCi0JMHgwMDAwMDA2OSwKLQkweGQ4MDAzMTYyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE2MywKLQkweDAwMDAwMDY5LAotCTB4ZDgwMDM3ZWYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTY0LAotCTB4MDAwMDAwMzEsCi0JMHhkNjAwMDE2YywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNjUsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE2NiwKLQkweDAwMDAwMDJkLAotCTB4ZGQwNjAxN2YsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTY3LAotCTB4MDAwMDAwMTgsCi0JMHgxZDdmM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNjgsCi0JMHgwMDAwMDA0OSwKLQkweGQ4MDAzNjZjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE2OSwKLQkweDAwMDAwMDY5LAotCTB4ZDgwMDMzZTcsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTZhLAotCTB4MDAwMDAwNjksCi0JMHhkODAwMzNlNywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNmIsCi0JMHgwMDAwMDA2OSwKLQkweGQ4MDAzN2VmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE2YywKLQkweDAwMDAwMDMxLAotCTB4ZDYwMDAxNmMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTZkLAotCTB4MDAwMDAwMmQsCi0JMHhkMTAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNmUsCi0JMHgwMDAwMDA0OSwKLQkweGQxNzgzM2U0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE2ZiwKLQkweDAwMDAwMDJmLAotCTB4ZDE3MTAxNjIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTcwLAotCTB4MDAwMDAwMmYsCi0JMHhkMTYxMDE2MiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNzEsCi0JMHgwMDAwMDA0OSwKLQkweGQxNDAzM2UzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE3MiwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTczLAotCTB4MDAwMDAwMmQsCi0JMHhkZDA2MDE3ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNzQsCi0JMHgwMDAwMDAxOCwKLQkweDFkN2YzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE3NSwKLQkweDAwMDAwMDQ5LAotCTB4ZDgwMDM2NmMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTc2LAotCTB4MDAwMDAwNjksCi0JMHhkODAwMzNlNywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNzcsCi0JMHgwMDAwMDA2OSwKLQkweGQ4MDAzMTYyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE3OCwKLQkweDAwMDAwMDY5LAotCTB4ZDgwMDM3ZWYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTc5LAotCTB4MDAwMDAwMzEsCi0JMHhkNjAwMDE2YywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxN2EsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE3YiwKLQkweDAwMDAwMDJkLAotCTB4ZGQwNjAxN2YsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTdjLAotCTB4MDAwMDAwMTgsCi0JMHgxZDdmM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxN2QsCi0JMHgwMDAwMDA0OSwKLQkweGQ4MDAzNjZjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE3ZSwKLQkweDAwMDAwMDY5LAotCTB4ZDgwMDMzZTcsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTdmLAotCTB4MDAwMDAwNjksCi0JMHhkODAwMzNlNywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxODAsCi0JMHgwMDAwMDA2OSwKLQkweGQ4MDAzN2VmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE4MSwKLQkweDAwMDAwMDMxLAotCTB4ZDYwMDAxNmMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTgyLAotCTB4MDAwMDAwMmQsCi0JMHhkMTAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxODMsCi0JMHgwMDAwMDAyZCwKLQkweGQxNjgwN2U0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE4NCwKLQkweDAwMDAwMDQ5LAotCTB4ZDE0MDMzZTMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTg1LAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxODYsCi0JMHgwMDAwMDAyZCwKLQkweGRkMDYwMTdmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE4NywKLQkweDAwMDAwMDE4LAotCTB4MWQ3ZjNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTg4LAotCTB4MDAwMDAwNDksCi0JMHhkODAwMzY2YywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxODksCi0JMHgwMDAwMDA2OSwKLQkweGQ4MDAzM2U3LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE4YSwKLQkweDAwMDAwMDY5LAotCTB4ZDgwMDMxNjIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MThiLAotCTB4MDAwMDAwNjksCi0JMHhkODAwMzdlZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOGMsCi0JMHgwMDAwMDAzMSwKLQkweGQ2MDAwMTZjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE4ZCwKLQkweDAwMDAwMDM1LAotCTB4ZDY4MDAwZWQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MThlLAotCTB4MDAwMDAwMDgsCi0JMHgyMjc5MDA4MSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOGYsCi0JMHgwMDAwMDA0OSwKLQkweGQ2MDAwNjBjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE5MCwKLQkweDAwMDAwMDJmLAotCTB4ZDY4MTAxMDYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTkxLAotCTB4MDAwMDAwM2YsCi0JMHhkNDgwMDAwMiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOTIsCi0JMHgwMDAwMDAzZiwKLQkweGQ0ODAwMDg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE5MywKLQkweDAwMDAwMDNmLAotCTB4ZDUwMDAxMDIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTk0LAotCTB4MDAwMDAwM2YsCi0JMHhkNTAwMDE4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOTUsCi0JMHgwMDAwMDAzZiwKLQkweGQ1ODAwMjAyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE5NiwKLQkweDAwMDAwMDNmLAotCTB4ZDU4MDAyMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTk3LAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOTgsCi0JMHgwMDAwMDAyZCwKLQkweGRkMDYwMTdmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE5OSwKLQkweDAwMDAwMDE4LAotCTB4MWQ3ZjNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTlhLAotCTB4MDAwMDAwNDksCi0JMHhkODAwMzY2YywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOWIsCi0JMHgwMDAwMDA2OSwKLQkweGQ4MDAzNGU5LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE5YywKLQkweDAwMDAwMDY5LAotCTB4ZDgwMDM1NmEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTlkLAotCTB4MDAwMDAwNjksCi0JMHhkODAwMzdlZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOWUsCi0JMHgwMDAwMDAzMSwKLQkweGQ2MDAwMTZjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE5ZiwKLQkweDAwMDAwMDQxLAotCTB4ZDQ4MDM0ZWIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWEwLAotCTB4MDAwMDAwNDEsCi0JMHhkNTAwMzU2YiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYTEsCi0JMHgwMDAwMDAzNSwKLQkweGQ2ODAwMGVkLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFhMiwKLQkweDAwMDAwMDE4LAotCTB4MzdlYjAwODEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWEzLAotCTB4MDAwMDAwNDksCi0JMHhkNjAwM2IwZCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYTQsCi0JMHgwMDAwMDA0OSwKLQkweGQ2ODAzYjA3LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFhNSwKLQkweDAwMDAwMDJkLAotCTB4ZDEwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWE2LAotCTB4MDAwMDAwNDksCi0JMHhkZDAwMzY2NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYTcsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFhOCwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWE5LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYWEsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFhYiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWFjLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYWQsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFhZSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWFmLAotCTB4MDAwMDAwNjEsCi0JMHhmNjAwMDQ2YywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYjAsCi0JMHgwMDAwMDAzNSwKLQkweGQ2ODAwMGVkLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFiMSwKLQkweDAwMDAwMDE4LAotCTB4MzdlYjAwODEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWIyLAotCTB4MDAwMDAwNDksCi0JMHhkNjAwM2IwZSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYjMsCi0JMHgwMDAwMDA0OSwKLQkweGQ2ODAzYjA4LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFiNCwKLQkweDAwMDAwMDQ5LAotCTB4ZDU4MDNiMDksCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWI1LAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYjYsCi0JMHgwMDAwMDAyZCwKLQkweGRkMDYwMTdmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFiNywKLQkweDAwMDAwMDE4LAotCTB4MWQ3ZjNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWI4LAotCTB4MDAwMDAwNDksCi0JMHhkODAwMzY2YywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYjksCi0JMHgwMDAwMDA2OSwKLQkweGQ4MDAzNWViLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFiYSwKLQkweDAwMDAwMDY5LAotCTB4ZDgwMDMzZTcsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWJiLAotCTB4MDAwMDAwNjksCi0JMHhkODAwMzdlZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYmMsCi0JMHgwMDAwMDA0MSwKLQkweGQ2MDAwN2VjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFiZCwKLQkweDAwMDAwMDQxLAotCTB4ZDU4MDA4NmIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWJlLAotCTB4MDAwMDAwMzUsCi0JMHhkNjgwMDBlZCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYmYsCi0JMHgwMDAwMDAxOCwKLQkweDM3ZWQwMDgxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFjMCwKLQkweDAwMDAwMDNmLAotCTB4ZDRmZmZmODAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWMxLAotCTB4MDAwMDAwM2YsCi0JMHhkNTAyMDAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYzIsCi0JMHgwMDAwMDAzZiwKLQkweGQ1MTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFjMywKLQkweDAwMDAwMDQ5LAotCTB4ZGQwMDNiNmEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWM0LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I2OSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYzUsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjY5LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFjNiwKLQkweDAwMDAwMDIxLAotCTB4ZDUwMDAwZWEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWM3LAotCTB4MDAwMDAwNDksCi0JMHhkZDBlM2I2YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYzgsCi0JMHgwMDAwMDAzNSwKLQkweGQxMDQwMDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFjOSwKLQkweDAwMDAwMDE4LAotCTB4MzdmNTAwODEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWNhLAotCTB4MDAwMDAwM2YsCi0JMHhkNGZmZmY4MCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxY2IsCi0JMHgwMDAwMDAzZiwKLQkweGQ1MDQwMDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFjYywKLQkweDAwMDAwMDNmLAotCTB4ZDUxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWNkLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I2OSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxY2UsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjY5LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFjZiwKLQkweDAwMDAwMDQ5LAotCTB4ZGQwMDNiNmEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWQwLAotCTB4MDAwMDAwNTEsCi0JMHhmNTAwMDBlYSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZDEsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFkMiwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWQzLAotCTB4MDAwMDAwNDksCi0JMHhkZDBlM2I2YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZDQsCi0JMHgwMDAwMDAzNSwKLQkweGQxMDQ4MDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFkNSwKLQkweDAwMDAwMDE4LAotCTB4MzdmNTAwODEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWQ2LAotCTB4MDAwMDAwM2YsCi0JMHhjNzdmN2YwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZDcsCi0JMHgwMDAwMDAzZiwKLQkweGM3N2Y3ZjAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFkOCwKLQkweDAwMDAwMDNmLAotCTB4ZDY4MDQwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWQ5LAotCTB4MDAwMDAwM2YsCi0JMHhkMTAzYzAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZGEsCi0JMHgwMDAwMDAyNSwKLQkweGRlMjAwMGUyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFkYiwKLQkweDAwMDAwMDQ5LAotCTB4ZGU4MDI3NGUsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWRjLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZGQsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFkZSwKLQkweDAwMDAwMDM1LAotCTB4ZDEwMDAwZTIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWRmLAotCTB4MDAwMDAwMzUsCi0JMHhkNjgwMDBlZCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZTAsCi0JMHgwMDAwMDAxOCwKLQkweDM3ZjUwMDgxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFlMSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDMwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWUyLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZTMsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAxZDNhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFlNCwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWU1LAotCTB4MDAwMDAwN2QsCi0JMHhjNzYwYTcxMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZTYsCi0JMHgwMDAwMDAzMSwKLQkweGMwODAwMDQxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFlNywKLQkweDAwMDAwMDMxLAotCTB4YzQwMDAwNDgsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWU4LAotCTB4MDAwMDAwMzEsCi0JMHhjMjgwMDA0NSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFlYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWViLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFlZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWVlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFmMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWYxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZjIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFmMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWY0LAotCTB4MDAwMDAwMmQsCi0JMHhkYjAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZjUsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAzMDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFmNiwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWY3LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZjgsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwMDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFmOSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWZhLAotCTB4MDAwMDAwMmQsCi0JMHhkMzgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZmIsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwNDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFmYywKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWZkLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwMGExNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZmUsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFmZiwKLQkweDAwMDAwMDQ5LAotCTB4ZDEwNDMzOTQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjAwLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDQ4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMDEsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIwMiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDMxNjIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjAzLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMDQsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwNTA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIwNSwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjA2LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwMGE5NSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMDcsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIwOCwKLQkweDAwMDAwMDQ5LAotCTB4ZDEwNDMzOTUsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjA5LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDU4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMGEsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIwYiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDMxNjIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjBjLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMGQsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwNjA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIwZSwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjBmLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMTAsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwMDg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIxMSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjEyLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMTMsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIxNCwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDBiMTYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjE1LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMTYsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAxMDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIxNywKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjE4LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMTksCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwMDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIxYSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjFiLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMTA4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMWMsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIxZCwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjFlLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAxODAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMWYsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIyMCwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDExMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjIxLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMjIsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIyMywKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDAwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjI0LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMjUsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAxMTg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIyNiwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjI3LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMjgsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTYwMDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIyOSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjJhLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMTIwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMmIsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIyYywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjJkLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMmUsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIyZiwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDEyODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjMwLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMzEsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIzMiwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDAwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjMzLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMzQsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAxMzA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIzNSwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjM2LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMzcsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwMDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIzOCwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjM5LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMTM4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyM2EsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIzYiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjNjLAotCTB4MDAwMDAwM2YsCi0JMHhkZDA1MDAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyM2QsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIzZSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDIwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjNmLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNDAsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI0MSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDAwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjQyLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNDMsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAyMDg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI0NCwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjQ1LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNDYsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDE5MDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI0NywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjQ4LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMjEwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNDksCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI0YSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjRiLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDA4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNGMsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI0ZCwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDIxODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjRlLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNGYsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI1MCwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDAwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjUxLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNTIsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAyMjA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI1MywKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjU0LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNTUsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwMjg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI1NiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjU3LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMjI4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNTgsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI1OSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjVhLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNWIsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI1YywKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDIzMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjVkLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNWUsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI1ZiwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDAwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjYwLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNjEsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAxODA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI2MiwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjYzLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwMGI5NywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNjQsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI2NSwKLQkweDAwMDAwMDQ5LAotCTB4ZDEwNDMzOTcsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjY2LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMTg4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNjcsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI2OCwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDMxNjIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjY5LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNmEsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAxOTA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI2YiwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjZjLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwMGMxOCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNmQsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI2ZSwKLQkweDAwMDAwMDQ5LAotCTB4ZDEwNDMzOTgsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjZmLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMTk4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNzAsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI3MSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDMxNjIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjcyLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNzMsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAxYTA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI3NCwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjc1LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNzYsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwMDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI3NywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjc4LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMWE4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNzksCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI3YSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDBiMTYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjdiLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyN2MsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAxYzA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI3ZCwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjdlLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwMGM5OSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyN2YsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI4MCwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDFjODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjgxLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyODIsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAwZDFhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI4MywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjg0LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMWQwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyODUsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI4NiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDBkOWIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjg3LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyODgsCi0JMHgwMDAwMDA0OSwKLQkweGQxMDQzMzliLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI4OSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDFkODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjhhLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOGIsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzMTYyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI4YywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjhkLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMWUwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOGUsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI4ZiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDBlMWMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjkwLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOTEsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwMTA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI5MiwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjkzLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOTQsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwZjA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI5NSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjk2LAotCTB4MDAwMDAwN2QsCi0JMHhjNzYwYTcxMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOTcsCi0JMHgwMDAwMDAzMSwKLQkweGMwODAwMDQxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI5OCwKLQkweDAwMDAwMDMxLAotCTB4YzQwMDAwNDgsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjk5LAotCTB4MDAwMDAwMzEsCi0JMHhjMjgwMDA0NSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOWEsCi0JMHgwMDAwMDAzMSwKLQkweGQ2ODAwMDZkLAotLyogQlJEWF9JTklUX1NEUkFNICovCi0JMHgwMDBmMDAwZiwKLQkweDAwNzAwMDY0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwNDAsCi0JMHgwMDAwMDEwMCwKLQkweDAwMDAwNDAwLAotCTB4MDAwMDAwNjQsCi0JMHgwMDAwMDA1NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDI0MDAsCi0JMHgwMDAwMjgwMCwKLQkweDAwMDAwNDAwLAotCTB4MDAwMDI4ODAsCi0JMHgwMDAwMDE4MCwKLQkweDAwMDAwMDAzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwNTEsCi0JMHgwMDAwMDE3ZCwKLQkweDAwMDAwMDA4LAotCTB4MDAwMDAwNTEsCi0JMHgwMDAwMDA1ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDksCi0JMHgwMDAwNTAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0vKiBCUkRYX0lOSVQgKi8KLQkweDAwMGYwMDBmLAotCTB4MDA3MDAxZjQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDA0MCwKLQkweDAwMDAwMTAwLAotCTB4MDAwMDA0MDAsCi0JMHgwMDAwMDA2NCwKLQkweDAwMDAwMDU0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMjQwMCwKLQkweDAwMDAyODAwLAotCTB4MDAwMDA0MDAsCi0JMHgwMDAwMjg4MCwKLQkweDAwMDAwMTgwLAotCTB4MDAwMDAwMDMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDA1MSwKLQkweDAwMDAwMTdkLAotCTB4MDAwMDAwMDgsCi0JMHgwMDAwMDA1MSwKLQkweDAwMDAwMDVkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwOSwKLQkweDAwMDA1MDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLS8qIFpFUk9fSU5JVCAqLwotCTB4MDAwZjAwMDIsCi0JMHgwMDcwMDAwMCwKLQkweDAwMDAwMDAxLAotCTB4MDAwMDAwMDAsCi0vKiBaRVJPX0lOSVQgKi8KLQkweDAwMGYwMDAyLAotCTB4MDA3MDAwMDAsCi0JMHgwMDAwMDAwMSwKLQkweDAwMDAwMDAwLAotLyogTG9hZGluZyBvcGVyYXRpb25hbCBGaXJtd2FyZSAqLwotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAwMCwKLQkweDAwMDAwMDI1LAotCTB4ZGQwZTAwMDIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDAxLAotCTB4MDAwMDAwMDQsCi0JMHgwMWQxM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMDIsCi0JMHgwMDAwMDAyNSwKLQkweGRkMGUwMDgyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAwMywKLQkweDAwMDAwMDA0LAotCTB4MDI4OTNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDA0LAotCTB4MDAwMDAwMjUsCi0JMHhkZDBlMDEwMiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMDUsCi0JMHgwMDAwMDAwNCwKLQkweDAyODUzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAwNiwKLQkweDAwMDAwMDI1LAotCTB4ZGQwZTAxODIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDA3LAotCTB4MDAwMDAwMDQsCi0JMHgwM2ZkM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMDgsCi0JMHgwMDAwMDAwOSwKLQkweGNmODEzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAwOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDBhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMGIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAwYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDBkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMGUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAwZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDEwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAxMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDEzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAxNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDE2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAxOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDE5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAxYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDFjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAxZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDFmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMjAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAyMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDIyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMjMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAyNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDI1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMjYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAyNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDI4LAotCTB4MDAwMDAwNDksCi0JMHhjMDAwM2IwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMjksCi0JMHgwMDAwMDA0OSwKLQkweGMwODAzYjAyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAyYSwKLQkweDAwMDAwMDQ5LAotCTB4YzEwMDNiMDMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDJiLAotCTB4MDAwMDAwNDksCi0JMHhjMTgwM2IwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMmMsCi0JMHgwMDAwMDAyOSwKLQkweGRmNjAwMDc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAyZCwKLQkweDAwMDAwMDQ5LAotCTB4ZGY0NDNiN2QsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDJlLAotCTB4MDAwMDAwNzksCi0JMHhmZDYwOTA3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMmYsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAzMCwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDMxLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMzIsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAzMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDM0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMzUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAzNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDM3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMzgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAzOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDNhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwM2IsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAzYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDNkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwM2UsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAzZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDQwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNDEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA0MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDQzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNDQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA0NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDQ2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNDcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA0OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDQ5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNGEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA0YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDRjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNGQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA0ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDRmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA1MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDUyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA1NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDU1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA1NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDU4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA1YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDViLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA1ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDVlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA2MCwKLQkweDAwMDAwMDNmLAotCTB4ZGYwMDAwMDMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDYxLAotCTB4MDAwMDAwMmQsCi0JMHhkZGUwMGY4MSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNjIsCi0JMHgwMDAwMDAzZiwKLQkweGRkODAwMjgzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA2MywKLQkweDAwMDAwMDJkLAotCTB4ZGQwNDAxODAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDY0LAotCTB4MDAwMDAwN2QsCi0JMHhmZDE1MDA4MCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNjUsCi0JMHgwMDAwMDA3YSwKLQkweDEwMjAzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA2NiwKLQkweDAwMDAwMDdhLAotCTB4MzAyMDdiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDY3LAotCTB4MDAwMDAwMjEsCi0JMHhkMDI0MDA2MCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNjgsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwMTA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA2OSwKLQkweDAwMDAwMDNmLAotCTB4ZGQ0MDAyODEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDZhLAotCTB4MDAwMDAwNzksCi0JMHhkZDMxYmIwMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNmIsCi0JMHgwMDAwMDA3OSwKLQkweGRkMzFmYjA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA2YywKLQkweDAwMDAwMDc5LAotCTB4ZGQzMWJiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDZkLAotCTB4MDAwMDAwNzksCi0JMHhkZDMxZmI3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNmUsCi0JMHgwMDAwMDA3OSwKLQkweGZkMjEwMTAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA2ZiwKLQkweDAwMDAwMDdkLAotCTB4ZmQyYjQwODEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDcwLAotCTB4MDAwMDAwNDAsCi0JMHgzZDAwMzAwMiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNzEsCi0JMHgwMDAwMDA0OCwKLQkweDFkMDAzYjAyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA3MiwKLQkweDAwMDAwMDc5LAotCTB4ZGQyMTdiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDczLAotCTB4MDAwMDAwMmQsCi0JMHhkZDA0MDU3ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNzQsCi0JMHgwMDAwMDAxOCwKLQkweDNkN2YzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA3NSwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDc2LAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNzcsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA3OCwKLQkweDAwMDAwMDIxLAotCTB4ZTMzNzFmNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDc5LAotCTB4MDAwMDAwNDksCi0JMHhkZDAwM2I3OSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwN2EsCi0JMHgwMDAwMDA3OSwKLQkweGRkMjFiYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA3YiwKLQkweDAwMDAwMDQ5LAotCTB4ZGQwMDNiNzksCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDdjLAotCTB4MDAwMDAwNzksCi0JMHhkZDIxYmI3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwN2QsCi0JMHgwMDAwMDA0OSwKLQkweGRkMDAzYjc5LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA3ZSwKLQkweDAwMDAwMDc5LAotCTB4ZGQyMWJiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDdmLAotCTB4MDAwMDAwNzksCi0JMHhmZDYwOTA3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwODAsCi0JMHgwMDAwMDA3OSwKLQkweGRkMjFmYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA4MSwKLQkweDAwMDAwMDNmLAotCTB4ZGYwMDAwODMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDgyLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwODMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA4NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDg1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwODYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA4NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDg4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwODksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA4YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDhiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOGMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA4ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDhlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOGYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA5MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDkxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA5MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDk0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA5NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDk3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA5OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDlhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA5YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDlkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA5ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGEwLAotCTB4MDAwMDAwMmQsCi0JMHhkMDA4MDgwMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYTEsCi0JMHgwMDAwMDAwOCwKLQkweDIxYjVmYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBhMiwKLQkweDAwMDAwMDc5LAotCTB4ZGQwMTAwODEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGEzLAotCTB4MDAwMDAwNzksCi0JMHhkZDAxODEwMiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYTQsCi0JMHgwMDAwMDA3ZCwKLQkweGZkMDE4MDgzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBhNSwKLQkweDAwMDAwMDc5LAotCTB4ZDA5MDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGE2LAotCTB4MDAwMDAwNDksCi0JMHhkMDU4M2I3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYTcsCi0JMHgwMDAwMDA0OSwKLQkweGQyMDQzYjAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBhOCwKLQkweDAwMDAwMDNkLAotCTB4ZGQ0MDAwMDMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGE5LAotCTB4MDAwMDAwMjQsCi0JMHgzMjAwMDI2NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYWEsCi0JMHgwMDAwMDAzZCwKLQkweGRkN2ZmODAzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBhYiwKLQkweDAwMDAwMDI5LAotCTB4ZDAyMDAxN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGFjLAotCTB4MDAwMDAwNDksCi0JMHhkMGE0M2IwZSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYWQsCi0JMHgwMDAwMDAyZCwKLQkweGRkMDQ0MmZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBhZSwKLQkweDAwMDAwMDE4LAotCTB4M2Q3ZjNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGFmLAotCTB4MDAwMDAwMmQsCi0JMHhkZDA2MDA4MiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYjAsCi0JMHgwMDAwMDAzOCwKLQkweDMwMDAwMWUwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBiMSwKLQkweDAwMDAwMDM5LAotCTB4ZDAwMDAxNjAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGIyLAotCTB4MDAwMDAwNzksCi0JMHhkMWIxM2I3YywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYjMsCi0JMHgwMDAwMDAyZCwKLQkweGRkZTAwZmUzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBiNCwKLQkweDAwMDAwMDQ5LAotCTB4ZDA4MDMwZTQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGI1LAotCTB4MDAwMDAwNzksCi0JMHhkZDMxN2I3YywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYjYsCi0JMHgwMDAwMDA3OSwKLQkweGRkMzEzYjdjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBiNywKLQkweDAwMDAwMDdkLAotCTB4ZmQzNzQwODIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGI4LAotCTB4MDAwMDAwMDgsCi0JMHgwMTdkM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYjksCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBiYSwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGJiLAotCTB4MDAwMDAwNDksCi0JMHhkZDAwMDM4NywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYmMsCi0JMHgwMDAwMDA3OSwKLQkweGRkMzEwNDA4LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBiZCwKLQkweDAwMDAwMDc5LAotCTB4ZGQzMTdkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGJlLAotCTB4MDAwMDAwNDksCi0JMHhkMzAwM2I3YywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYmYsCi0JMHgwMDAwMDA3OSwKLQkweGQzODFiYjdjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBjMCwKLQkweDAwMDAwMDdmLAotCTB4ZDEwMWIyN2MsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGMxLAotCTB4MDAwMDAwNDgsCi0JMHg1MTAwMzI2NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYzIsCi0JMHgwMDAwMDAzZCwKLQkweGRkNDAwMDAzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBjMywKLQkweDAwMDAwMDA4LAotCTB4MDE5NTMxNjIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGM0LAotCTB4MDAwMDAwMjEsCi0JMHhkMzAwMDY2NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYzUsCi0JMHgwMDAwMDAyMCwKLQkweDUzODAwMGU3LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBjNiwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDA4MDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGM3LAotCTB4MDAwMDAwNzksCi0JMHhkZDAxYjM2NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYzgsCi0JMHgwMDAwMDA3OSwKLQkweGRkMDFiM2U3LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBjOSwKLQkweDAwMDAwMDc1LAotCTB4ZjEwMTg2NjIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGNhLAotCTB4MDAwMDAwNzUsCi0JMHhkMjAxYjE2NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwY2IsCi0JMHgwMDAwMDA3OCwKLQkweDFkMDA3Yjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBjYywKLQkweDAwMDAwMDI1LAotCTB4ZGQwMDAxZTMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGNkLAotCTB4MDAwMDAwMDgsCi0JMHgwMWIxMzE2MiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwY2UsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBjZiwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGQwLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZDEsCi0JMHgwMDAwMDAyMSwKLQkweGUzMzc5ZjYzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBkMiwKLQkweDAwMDAwMDQ5LAotCTB4ZDMwMDNiN2MsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGQzLAotCTB4MDAwMDAwNzksCi0JMHhkMzgxYmI3YywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZDQsCi0JMHgwMDAwMDA3ZiwKLQkweGQxMDFiMjdjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBkNSwKLQkweDAwMDAwMDQ4LAotCTB4NTEwMDMyNjQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGQ2LAotCTB4MDAwMDAwNzUsCi0JMHhkMjAxYjE2NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZDcsCi0JMHgwMDAwMDA3OCwKLQkweDFkMDA3Yjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBkOCwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDAwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGQ5LAotCTB4MDAwMDAwNzksCi0JMHhkZDAxYzA4MSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZGEsCi0JMHgwMDAwMDA3OSwKLQkweGZkNjA5MDc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBkYiwKLQkweDAwMDAwMDJkLAotCTB4ZGQwODA4MDMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGRjLAotCTB4MDAwMDAwNzgsCi0JMHgzZDAxYzA4MSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZGQsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBkZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGRmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBlMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGUyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBlNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGU1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBlNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGU4LAotCTB4MDAwMDAwNDksCi0JMHhkMThlM2IwMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZTksCi0JMHgwMDAwMDAyZiwKLQkweGQxODEwMGUzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBlYSwKLQkweDAwMDAwMDNmLAotCTB4ZDE4MDE4MDMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGViLAotCTB4MDAwMDAwNDksCi0JMHhkMTA0M2IwMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZWMsCi0JMHgwMDAwMDAzZiwKLQkweGRkODAwMjAzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBlZCwKLQkweDAwMDAwMDQ5LAotCTB4ZDIwNDNiMDIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGVlLAotCTB4MDAwMDAwNDksCi0JMHhkMjg0M2IwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZWYsCi0JMHgwMDAwMDAyNSwKLQkweGRkMDAwMGUyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBmMCwKLQkweDAwMDAwMDk0LAotCTB4MDAxMzQxNjIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGYxLAotCTB4MDAwMDAwOTQsCi0JMHgwMDBiNDM2MiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZjIsCi0JMHgwMDAwMDA5NCwKLQkweDAwMTU0OGUyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBmMywKLQkweDAwMDAwMDk0LAotCTB4MDAxYjQ5NjIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGY0LAotCTB4MDAwMDAwOTQsCi0JMHgwMDJmNDA3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZjUsCi0JMHgwMDAwMDAwOSwKLQkweGNmODEzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBmNiwKLQkweDAwMDAwMDFkLAotCTB4ZmQyYjgwZTUsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGY3LAotCTB4MDAwMDAwMzAsCi0JMHgzMTgzODA2MywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZjgsCi0JMHgwMDAwMDAzMCwKLQkweDExODI4MDYzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBmOSwKLQkweDAwMDAwMDFkLAotCTB4ZmQyNTgwZTUsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGZhLAotCTB4MDAwMDAwMzAsCi0JMHgzMTgzMDA2MywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZmIsCi0JMHgwMDAwMDAzMCwKLQkweDExODIwMDYzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBmYywKLQkweDAwMDAwMDJmLAotCTB4ZDE4MTAwZTMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGZkLAotCTB4MDAwMDAwMWQsCi0JMHhmZDA5ODBlNSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZmUsCi0JMHgwMDAwMDAzMCwKLQkweDMxODNkMzYzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBmZiwKLQkweDAwMDAwMDMwLAotCTB4MTE4M2QyNjMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTAwLAotCTB4MDAwMDAwMmYsCi0JMHhkMTgxMDBlMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMDEsCi0JMHgwMDAwMDAzZiwKLQkweGQ2ODAwMTg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEwMiwKLQkweDAwMDAwMDNmLAotCTB4ZDY4MDAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTAzLAotCTB4MDAwMDAwMzUsCi0JMHhkNjgwMDBlZCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMDQsCi0JMHgwMDAwMDAxOCwKLQkweDM3ZmYwMDgxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEwNSwKLQkweDAwMDAwMDI1LAotCTB4ZDIwMDAyNjQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTA2LAotCTB4MDAwMDAwMTgsCi0JMHg3ZDc3ZmQ3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMDcsCi0JMHgwMDAwMDA0OSwKLQkweGRlMjAzYjYzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEwOCwKLQkweDAwMDAwMDQ5LAotCTB4ZGU4MDNiNzksCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTA5LAotCTB4MDAwMDAwMjEsCi0JMHhkMTgwMDBlMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMGEsCi0JMHgwMDAwMDAwOSwKLQkweGNmODEzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEwYiwKLQkweDAwMDAwMDQ5LAotCTB4ZGQwMDMxZTMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTBjLAotCTB4MDAwMDAwNjksCi0JMHhkZDBlM2I3OCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMGQsCi0JMHgwMDAwMDA2MSwKLQkweGRkMDAzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEwZSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDAxODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTBmLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMTAsCi0JMHgwMDAwMDAzNSwKLQkweGRkMDAwMGZhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODExMSwKLQkweDAwMDAwMDE4LAotCTB4M2I3ZjNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTEyLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMTMsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODExNCwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTE1LAotCTB4MDAwMDAwMjEsCi0JMHhkMTgwMDBlMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMTYsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDQzYjc5LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODExNywKLQkweDAwMDAwMDYxLAotCTB4ZjE4MDAwZTMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTE4LAotCTB4MDAwMDAwM2YsCi0JMHhkNjgwMDE4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMTksCi0JMHgwMDAwMDAzZiwKLQkweGQ2ODAwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODExYSwKLQkweDAwMDAwMDM1LAotCTB4ZDY4MDAwZWQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTFiLAotCTB4MDAwMDAwMTgsCi0JMHgzN2ZmMDA4MSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMWMsCi0JMHgwMDAwMDAyNSwKLQkweGQyMDAwMjY0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODExZCwKLQkweDAwMDAwMDk4LAotCTB4NjA1ZGJiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTFlLAotCTB4MDAwMDAwMDksCi0JMHhjZjgxM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEyMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTIxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMjIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEyMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTI0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMjUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEyNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTI3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMjgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEyOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTJhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMmIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEyYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTJkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMmUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEyZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTMwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMzEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEzMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTMzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMzQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEzNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTM2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMzcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEzOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTM5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxM2EsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEzYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTNjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxM2QsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEzZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTNmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNDAsCi0JMHgwMDAwMDA0OSwKLQkweGQ0MDgzYjAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE0MSwKLQkweDAwMDAwMDA5LAotCTB4YzI4YjNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTQyLAotCTB4MDAwMDAwM2YsCi0JMHhkNDAwMDM4MCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNDMsCi0JMHgwMDAwMDAwOSwKLQkweGMyOGIzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE0NCwKLQkweDAwMDAwMDQ5LAotCTB4ZDQwZTNiMDMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTQ1LAotCTB4MDAwMDAwM2YsCi0JMHhkNjQyMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNDYsCi0JMHgwMDAwMDAyZiwKLQkweGQyODE0MDgwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE0NywKLQkweDAwMDAwMDJkLAotCTB4ZDI4NDAzNjUsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTQ4LAotCTB4MDAwMDAwM2YsCi0JMHhkNjgwMDA4MCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNDksCi0JMHgwMDAwMDAzZiwKLQkweGRkMDQwMDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE0YSwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTRiLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I2ZCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNGMsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjZkLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE0ZCwKLQkweDAwMDAwMDMxLAotCTB4ZDMwM2QyNjUsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTRlLAotCTB4MDAwMDAwNDksCi0JMHhkZTQwM2I2NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNGYsCi0JMHgwMDAwMDAzZiwKLQkweGQ2ODAwMTg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE1MCwKLQkweDAwMDAwMDNmLAotCTB4ZDY4MDAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTUxLAotCTB4MDAwMDAwMzUsCi0JMHhkNjgwMDBlZCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNTIsCi0JMHgwMDAwMDAxOCwKLQkweDM3ZmYwMDgxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE1MywKLQkweDAwMDAwMDQ5LAotCTB4ZDU4MDNiN2UsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTU0LAotCTB4MDAwMDAwMjEsCi0JMHhkZTQwMDBlNiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNTUsCi0JMHgwMDAwMDAzZiwKLQkweGQ2ODAwMTg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE1NiwKLQkweDAwMDAwMDNmLAotCTB4ZDY4MDAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTU3LAotCTB4MDAwMDAwMzUsCi0JMHhkNjgwMDBlZCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNTgsCi0JMHgwMDAwMDAxOCwKLQkweDM3ZmYwMDgxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE1OSwKLQkweDAwMDAwMDQ5LAotCTB4ZDUwMDNiN2UsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTVhLAotCTB4MDAwMDAwNzksCi0JMHhkZDAxM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNWIsCi0JMHgwMDAwMDAyZCwKLQkweGRkMDQ0MDdmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE1YywKLQkweDAwMDAwMDE4LAotCTB4M2Q3ZjNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTVkLAotCTB4MDAwMDAwNzksCi0JMHhkZDAxYmI3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNWUsCi0JMHgwMDAwMDA3NSwKLQkweGZkMDE4MGU4LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE1ZiwKLQkweDAwMDAwMDk0LAotCTB4MDAxNTQxNjgsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTYwLAotCTB4MDAwMDAwOTQsCi0JMHgwMDI1NDRlOCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNjEsCi0JMHgwMDAwMDA5NCwKLQkweDAwMjM0MWU4LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE2MiwKLQkweDAwMDAwMDk0LAotCTB4MDAxNzQ1NjgsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTYzLAotCTB4MDAwMDAwOTQsCi0JMHgwMDE1NDI2OCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNjQsCi0JMHgwMDAwMDA5NCwKLQkweDAwMjc0MmU4LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE2NSwKLQkweDAwMDAwMDk0LAotCTB4MDAyZDQzNjgsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTY2LAotCTB4MDAwMDAwOTQsCi0JMHgwMDJkNDQ2OCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNjcsCi0JMHgwMDAwMDA5NCwKLQkweDAwMzM0M2U4LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE2OCwKLQkweDAwMDAwMDA0LAotCTB4MDM5NzNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTY5LAotCTB4MDAwMDAwMGQsCi0JMHhlMzBkYzE2NSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNmEsCi0JMHgwMDAwMDAzMCwKLQkweDMyMDMwMDc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE2YiwKLQkweDAwMDAwMDMwLAotCTB4MTIwMjAwNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTZjLAotCTB4MDAwMDAwM2YsCi0JMHhkNDgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNmQsCi0JMHgwMDAwMDAzZiwKLQkweGQxODA4MDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE2ZSwKLQkweDAwMDAwMDBkLAotCTB4ZTMzZmMxNjUsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTZmLAotCTB4MDAwMDAwMzAsCi0JMHgzMjA0NjA3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNzAsCi0JMHgwMDAwMDAzMCwKLQkweDEyMDQ0MDc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE3MSwKLQkweDAwMDAwMDNmLAotCTB4ZDQ4MjgwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTcyLAotCTB4MDAwMDAwM2YsCi0JMHhkMTgwODAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNzMsCi0JMHgwMDAwMDAwZCwKLQkweGUzM2ZjMTY1LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE3NCwKLQkweDAwMDAwMDMwLAotCTB4MzIwNDIwNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTc1LAotCTB4MDAwMDAwMzAsCi0JMHgxMjA0MDA3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNzYsCi0JMHgwMDAwMDAzZiwKLQkweGQ0ODIwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE3NywKLQkweDAwMDAwMDBkLAotCTB4ZTM2M2MxNjUsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTc4LAotCTB4MDAwMDAwMzAsCi0JMHgzMjAzMjA3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNzksCi0JMHgwMDAwMDAzMCwKLQkweDEyMDMwMDc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE3YSwKLQkweDAwMDAwMDNmLAotCTB4ZDQ4MzAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTdiLAotCTB4MDAwMDAwNDksCi0JMHhkMjgwM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxN2MsCi0JMHgwMDAwMDAwZCwKLQkweGUzMGRjMTY1LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE3ZCwKLQkweDAwMDAwMDMwLAotCTB4MzIwMzgwNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTdlLAotCTB4MDAwMDAwMzAsCi0JMHgxMjAyODA3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxN2YsCi0JMHgwMDAwMDAzZiwKLQkweGQ0ODEwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE4MCwKLQkweDAwMDAwMDNmLAotCTB4ZDYwMjAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTgxLAotCTB4MDAwMDAwM2YsCi0JMHhkMTgxMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxODIsCi0JMHgwMDAwMDAwZCwKLQkweGUzM2ZjMTY1LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE4MywKLQkweDAwMDAwMDMwLAotCTB4MzIwNDIwNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTg0LAotCTB4MDAwMDAwMzAsCi0JMHgxMjA0MDA3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxODUsCi0JMHgwMDAwMDAzZiwKLQkweGQ0ODIwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE4NiwKLQkweDAwMDAwMDQxLAotCTB4ZDQ4MDM0ZWIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTg3LAotCTB4MDAwMDAwNzksCi0JMHhkZDAxYmI2YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxODgsCi0JMHgwMDAwMDA3OSwKLQkweGRkMDFiYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE4OSwKLQkweDAwMDAwMDNmLAotCTB4ZDIwMDE4MDMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MThhLAotCTB4MDAwMDAwM2YsCi0JMHhkMTgxMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOGIsCi0JMHgwMDAwMDA3NSwKLQkweGZkMDE4MDYzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE4YywKLQkweDAwMDAwMDk4LAotCTB4ODA2OTNiNjQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MThkLAotCTB4MDAwMDAwNTEsCi0JMHhmMjAwMDBlNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOGUsCi0JMHgwMDAwMDAzZiwKLQkweGQ2ODAwMTg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE4ZiwKLQkweDAwMDAwMDNmLAotCTB4ZDY4MDAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTkwLAotCTB4MDAwMDAwMzUsCi0JMHhkNjgwMDBlZCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOTEsCi0JMHgwMDAwMDAxOCwKLQkweDM3ZmYwMDgxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE5MiwKLQkweDAwMDAwMDJkLAotCTB4ZGQwNDQwN2YsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTkzLAotCTB4MDAwMDAwMTgsCi0JMHgzZDdmM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOTQsCi0JMHgwMDAwMDA0OSwKLQkweGQzYzAzYjM4LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE5NSwKLQkweDAwMDAwMDQ5LAotCTB4ZGQwMDNiNjQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTk2LAotCTB4MDAwMDAwNTEsCi0JMHhmMjAwMDBlNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOTcsCi0JMHgwMDAwMDAzZiwKLQkweGQ2ODAwMTg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE5OCwKLQkweDAwMDAwMDNmLAotCTB4ZDY4MDAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTk5LAotCTB4MDAwMDAwMzUsCi0JMHhkNjgwMDBlZCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOWEsCi0JMHgwMDAwMDAxOCwKLQkweDM3ZmYwMDgxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE5YiwKLQkweDAwMDAwMDQ5LAotCTB4ZDNhMDNiMzgsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTljLAotCTB4MDAwMDAwMTksCi0JMHhkZDYxYmI3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOWQsCi0JMHgwMDAwMDA0OSwKLQkweGRkMDAzYjY3LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE5ZSwKLQkweDAwMDAwMDc1LAotCTB4ZjE4MTgyNjMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTlmLAotCTB4MDAwMDAwNDEsCi0JMHhkNDgwMzRlYiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYTAsCi0JMHgwMDAwMDA3OSwKLQkweGRkMDFiYjZhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFhMSwKLQkweDAwMDAwMDc5LAotCTB4ZGQwMWJiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWEyLAotCTB4MDAwMDAwM2YsCi0JMHhkMjAwMTgwMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYTMsCi0JMHgwMDAwMDAzZiwKLQkweGQxODA4MDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFhNCwKLQkweDAwMDAwMDc1LAotCTB4ZmQwMTgwNjMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWE1LAotCTB4MDAwMDAwOTgsCi0JMHg4MDM3M2I2NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYTYsCi0JMHgwMDAwMDA1MSwKLQkweGYyMDAwMGU0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFhNywKLQkweDAwMDAwMDNmLAotCTB4ZDY4MDAxODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWE4LAotCTB4MDAwMDAwM2YsCi0JMHhkNjgwMDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYTksCi0JMHgwMDAwMDAzNSwKLQkweGQ2ODAwMGVkLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFhYSwKLQkweDAwMDAwMDE4LAotCTB4MzdmZjAwODEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWFiLAotCTB4MDAwMDAwMmQsCi0JMHhkZDA0NDA3ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYWMsCi0JMHgwMDAwMDAxOCwKLQkweDNkN2YzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFhZCwKLQkweDAwMDAwMDQ5LAotCTB4ZDM4MDNiMzgsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWFlLAotCTB4MDAwMDAwMTksCi0JMHhkZDZmYmI3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYWYsCi0JMHgwMDAwMDA0OSwKLQkweGRkMDAzYjY3LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFiMCwKLQkweDAwMDAwMDc1LAotCTB4ZjE4MTgyNjMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWIxLAotCTB4MDAwMDAwNDEsCi0JMHhkNDgwMzRlYiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYjIsCi0JMHgwMDAwMDA3OSwKLQkweGRkMDFiYjZhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFiMywKLQkweDAwMDAwMDc5LAotCTB4ZGQwMWJiNjMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWI0LAotCTB4MDAwMDAwNzUsCi0JMHhmZDAxODA2MywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYjUsCi0JMHgwMDAwMDA5OCwKLQkweDgwMTczYjY0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFiNiwKLQkweDAwMDAwMDQ5LAotCTB4ZGU0MDNiNjQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWI3LAotCTB4MDAwMDAwM2YsCi0JMHhkNjgwMDE4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYjgsCi0JMHgwMDAwMDAzZiwKLQkweGQ2ODAwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFiOSwKLQkweDAwMDAwMDM1LAotCTB4ZDY4MDAwZWQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWJhLAotCTB4MDAwMDAwMTgsCi0JMHgzN2ZmMDA4MSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYmIsCi0JMHgwMDAwMDAyZCwKLQkweGRkMDQ0MDdmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFiYywKLQkweDAwMDAwMDE4LAotCTB4M2Q3ZjNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWJkLAotCTB4MDAwMDAwMjEsCi0JMHhkMjAwMDBlNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYmUsCi0JMHgwMDAwMDAxOSwKLQkweGQzZWY3YjdlLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFiZiwKLQkweDAwMDAwMDc1LAotCTB4ZjE4MTgyNjMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWMwLAotCTB4MDAwMDAwM2YsCi0JMHhkNjgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYzEsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDQwMDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFjMiwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWMzLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I2ZCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYzQsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjZkLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFjNSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWM2LAotCTB4MDAwMDAwMmQsCi0JMHhkZDU0MDE4MCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYzcsCi0JMHgwMDAwMDA3OSwKLQkweGYzZTA4MDc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFjOCwKLQkweDAwMDAwMDQ5LAotCTB4ZDYwMDM2N2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWM5LAotCTB4MDAwMDAwNzksCi0JMHhkZDAxZmI3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxY2EsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFjYiwKLQkweDAwMDAwMDQ5LAotCTB4ZGQwMDNiMDMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWNjLAotCTB4MDAwMDAwNTksCi0JMHhmZDAwM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxY2QsCi0JMHgwMDAwMDAzZiwKLQkweGRkODAxYzAzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFjZSwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWNmLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZDAsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFkMSwKLQkweDAwMDAwMDJkLAotCTB4ZGQwNjAyN2YsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWQyLAotCTB4MDAwMDAwMTgsCi0JMHgxZDdmM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZDMsCi0JMHgwMDAwMDAzMSwKLQkweGQ0ODM4ODZiLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFkNCwKLQkweDAwMDAwMDc5LAotCTB4ZGQwMWJiNmEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWQ1LAotCTB4MDAwMDAwNzksCi0JMHhmMTgxOTA3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZDYsCi0JMHgwMDAwMDA3NSwKLQkweGZkMDE4MDYzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFkNywKLQkweDAwMDAwMDk4LAotCTB4ODA1M2JiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWQ4LAotCTB4MDAwMDAwMTksCi0JMHhkZDdmN2I3OSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZDksCi0JMHgwMDAwMDA3NSwKLQkweGYxODE4MjYzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFkYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWRiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZGMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFkZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWRlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZGYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFlMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWUxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFlMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWU0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFlNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWU3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFlOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWVhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFlYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWVkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFlZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWYwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZjEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFmMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWYzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZjQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFmNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWY2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZjcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFmOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWY5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZmEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFmYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWZjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZmQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFmZSwKLQkweDAwMDAwMDNmLAotCTB4ZGQ4MDAyMDMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWZmLAotCTB4MDAwMDAwNDksCi0JMHhkMTg0M2IwMiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMDAsCi0JMHgwMDAwMDA0OSwKLQkweGRkMDAzYjAzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIwMSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjAyLAotCTB4MDAwMDAwNDksCi0JMHhkZDAwM2I3OSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMDMsCi0JMHgwMDAwMDA2NSwKLQkweGYxODAwMjYzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIwNCwKLQkweDAwMDAwMDE4LAotCTB4N2Q3ZDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjA1LAotCTB4MDAwMDAwMDksCi0JMHhjZjgxM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMDYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIwNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjA4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMDksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIwYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjBiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMGMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIwZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjBlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMGYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIxMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjExLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIxMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjE0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIxNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjE3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIxOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjFhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIxYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjFkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIxZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjIwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMjEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIyMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjIzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMjQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIyNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjI2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMjcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIyOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjI5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMmEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIyYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjJjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMmQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIyZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjJmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMzAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIzMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjMyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMzMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIzNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjM1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMzYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIzNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjM4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMzksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIzYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjNiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyM2MsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIzZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjNlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyM2YsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI0MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjQxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNDIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI0MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjQ0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNDUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI0NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjQ3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNDgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI0OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjRhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNGIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI0YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjRkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNGUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI0ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjUwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI1MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjUzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI1NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjU2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI1OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjU5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI1YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjVjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI1ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjVmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNjAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI2MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjYyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNjMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI2NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjY1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNjYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI2NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjY4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNjksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI2YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjZiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNmMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI2ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjZlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNmYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI3MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjcxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNzIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI3MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjc0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNzUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI3NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjc3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNzgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI3OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjdhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyN2IsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI3YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjdkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyN2UsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI3ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjgwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyODEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI4MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjgzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyODQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI4NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjg2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyODcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI4OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjg5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOGEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI4YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjhjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOGQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI4ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjhmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI5MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjkyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI5NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjk1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI5NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjk4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI5YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjliLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI5ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjllLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJhMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmExLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJhMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmE0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJhNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmE3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJhOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmFhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJhYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmFkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJhZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmIwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYjEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJiMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmIzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYjQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJiNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmI2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYjcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJiOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmI5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYmEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJiYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmJjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYmQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJiZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmJmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYzAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJjMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmMyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYzMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJjNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmM1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYzYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJjNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmM4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYzksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJjYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmNiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyY2MsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJjZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmNlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyY2YsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJkMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmQxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZDIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJkMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmQ0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZDUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJkNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmQ3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZDgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJkOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmRhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZGIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJkYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmRkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZGUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJkZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmUwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJlMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmUzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJlNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmU2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJlOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmU5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJlYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmVjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJlZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmVmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZjAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJmMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmYyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZjMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJmNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmY1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZjYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJmNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmY4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZjksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJmYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmZiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZmMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJmZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmZlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZmYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzAxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMDIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMwMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzA0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMDUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMwNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzA3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMDgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMwOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzBhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMGIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMwYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzBkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMGUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMwZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzEwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMxMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzEzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMxNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzE2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMxOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzE5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMxYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzFjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMxZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzFmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMjAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMyMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzIyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMjMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMyNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzI1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMjYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMyNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzI4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMjksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMyYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzJiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMmMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMyZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzJlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMmYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMzMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzMxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMzIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMzMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzM0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMzUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMzNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzM3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMzgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMzOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzNhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzM2IsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMzYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzNkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzM2UsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMzZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzQwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNDEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM0MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzQzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNDQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM0NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzQ2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNDcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM0OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzQ5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNGEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM0YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzRjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNGQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM0ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzRmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM1MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzUyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM1NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzU1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM1NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzU4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM1YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzViLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM1ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzVlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM2MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzYxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNjIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM2MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzY0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNjUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM2NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzY3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNjgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM2OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzZhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNmIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM2YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzZkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNmUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM2ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzcwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNzEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM3MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzczLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNzQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM3NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mzc2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNzcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM3OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mzc5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzN2EsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM3YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzdjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzN2QsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM3ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzdmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzODAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM4MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzgyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzODMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM4NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mzg1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzODYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM4NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mzg4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzODksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM4YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzhiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzOGMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM4ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzhlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzOGYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM5MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzkxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzOTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM5MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mzk0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzOTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM5NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mzk3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzOTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM5OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzlhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzOWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM5YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzlkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzOWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM5ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2EwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNhMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2EzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNhNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2E2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNhOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2E5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNhYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2FjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNhZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2FmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYjAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNiMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2IyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYjMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNiNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2I1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYjYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNiNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2I4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYjksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNiYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2JiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYmMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNiZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2JlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYmYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNjMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2MxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYzIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNjMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2M0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYzUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNjNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2M3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYzgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNjOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2NhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzY2IsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNjYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2NkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzY2UsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNjZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2QwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZDEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNkMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2QzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZDQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNkNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2Q2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZDcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNkOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2Q5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZGEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNkYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2RjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZGQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNkZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2RmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNlMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2UyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNlNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2U1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNlNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2U4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNlYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2ViLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNlZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2VlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNmMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2YxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZjIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNmMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2Y0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZjUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNmNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2Y3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZjgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNmOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2ZhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZmIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNmYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2ZkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZmUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNmZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MDEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQwMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDAzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MDQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQwNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDA2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MDcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQwOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDA5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MGEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQwYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDBjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MGQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQwZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDBmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQxMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDEyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQxNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDE1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQxNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDE4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQxYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDFiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQxZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDFlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQyMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDIxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MjIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQyMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDI0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MjUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQyNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDI3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MjgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQyOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDJhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MmIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQyYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDJkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MmUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQyZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDMwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MzEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQzMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDMzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MzQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQzNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDM2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MzcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQzOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDM5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0M2EsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQzYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDNjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0M2QsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQzZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDNmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ0MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDQyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NDMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ0NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDQ1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NDYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ0NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDQ4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NDksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ0YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDRiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NGMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ0ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDRlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NGYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ1MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDUxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ1MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDU0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ1NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDU3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ1OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDVhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ1YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDVkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ1ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDYwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NjEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ2MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDYzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NjQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ2NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDY2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NjcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ2OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDY5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NmEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ2YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDZjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NmQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ2ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDZmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NzAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ3MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDcyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NzMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ3NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDc1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NzYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ3NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDc4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NzksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ3YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDdiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0N2MsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ3ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDdlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0N2YsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ4MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDgxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ODIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ4MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDg0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ODUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ4NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDg3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ODgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ4OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDhhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0OGIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ4YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDhkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0OGUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ4ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDkwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0OTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ5MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDkzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0OTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ5NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDk2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0OTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ5OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDk5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0OWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ5YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDljLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0OWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ5ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDlmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRhMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGEyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRhNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGE1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRhNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGE4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRhYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGFiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRhZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGFlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRiMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGIxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YjIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRiMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGI0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YjUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRiNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGI3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YjgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRiOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGJhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YmIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRiYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGJkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YmUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRiZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGMwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YzEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRjMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGMzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YzQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRjNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGM2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YzcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRjOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGM5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0Y2EsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRjYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGNjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0Y2QsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRjZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGNmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRkMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGQyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZDMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRkNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGQ1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZDYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRkNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGQ4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZDksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRkYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGRiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZGMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRkZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGRlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZGYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRlMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGUxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRlMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGU0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRlNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGU3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRlOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGVhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRlYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGVkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRlZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGYwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZjEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRmMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGYzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZjQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRmNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGY2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZjcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRmOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGY5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZmEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRmYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGZjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZmQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRmZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGZmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUwMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTAyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MDMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUwNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTA1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MDYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUwNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTA4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MDksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUwYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTBiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MGMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUwZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTBlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MGYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUxMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTExLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUxMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTE0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUxNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTE3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUxOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTFhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUxYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTFkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUxZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTIwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MjEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUyMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTIzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MjQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUyNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTI2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MjcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUyOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTI5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MmEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUyYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTJjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MmQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUyZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTJmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MzAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUzMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTMyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MzMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUzNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTM1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MzYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUzNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTM4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MzksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUzYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTNiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1M2MsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUzZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTNlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1M2YsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU0MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTQxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NDIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU0MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTQ0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NDUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU0NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTQ3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NDgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU0OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTRhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NGIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU0YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTRkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NGUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU0ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTUwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU1MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTUzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU1NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTU2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU1OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTU5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU1YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTVjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU1ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTVmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NjAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU2MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTYyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NjMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU2NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTY1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NjYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU2NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTY4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NjksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU2YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTZiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NmMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU2ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTZlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NmYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU3MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTcxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NzIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU3MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTc0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NzUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU3NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTc3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NzgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU3OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTdhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1N2IsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU3YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTdkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1N2UsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU3ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTgwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ODEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU4MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTgzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ODQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU4NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTg2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ODcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU4OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTg5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1OGEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU4YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NThjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1OGQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU4ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NThmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1OTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU5MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTkyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1OTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU5NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTk1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1OTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU5NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTk4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1OTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU5YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTliLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1OWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU5ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTllLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1OWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVhMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWExLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVhMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWE0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVhNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWE3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVhOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWFhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVhYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWFkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVhZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWIwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YjEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODViMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWIzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YjQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODViNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWI2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YjcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODViOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWI5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YmEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODViYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWJjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YmQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODViZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWJmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YzAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVjMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWMyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YzMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVjNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWM1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YzYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVjNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWM4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YzksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVjYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWNiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1Y2MsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVjZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWNlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1Y2YsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVkMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWQxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZDIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVkMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWQ0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZDUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVkNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWQ3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZDgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVkOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWRhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZGIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVkYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWRkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZGUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVkZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWUwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVlMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWUzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVlNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWU2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVlOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWU5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVlYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWVjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVlZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWVmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZjAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVmMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWYyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZjMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVmNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWY1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZjYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVmNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWY4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZjksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVmYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWZiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZmMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVmZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWZlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZmYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjAxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MDIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYwMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjA0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MDUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYwNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjA3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MDgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYwOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjBhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MGIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYwYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjBkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MGUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYwZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjEwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYxMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjEzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYxNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjE2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYxOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjE5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYxYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjFjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYxZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjFmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MjAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYyMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjIyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MjMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYyNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjI1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MjYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYyNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjI4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MjksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYyYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjJiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MmMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYyZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjJlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MmYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYzMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjMxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MzIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYzMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjM0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MzUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYzNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjM3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MzgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYzOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjNhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2M2IsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYzYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjNkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2M2UsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYzZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjQwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NDEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY0MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjQzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NDQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY0NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjQ2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NDcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY0OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjQ5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NGEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY0YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjRjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NGQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY0ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjRmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY1MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjUyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY1NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjU1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY1NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjU4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY1YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjViLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY1ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjVlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY2MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjYxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NjIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY2MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjY0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NjUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY2NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjY3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NjgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY2OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjZhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NmIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY2YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjZkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NmUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY2ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjcwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NzEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY3MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjczLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NzQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY3NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Njc2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NzcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY3OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Njc5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2N2EsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY3YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjdjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2N2QsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY3ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjdmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ODAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY4MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjgyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ODMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY4NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Njg1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ODYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY4NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Njg4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ODksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY4YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjhiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2OGMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY4ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjhlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2OGYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY5MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjkxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2OTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY5MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Njk0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2OTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY5NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Njk3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2OTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY5OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjlhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2OWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY5YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjlkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2OWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY5ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmEwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZhMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmEzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZhNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmE2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZhOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmE5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZhYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmFjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZhZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmFmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YjAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZiMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmIyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YjMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZiNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmI1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YjYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZiNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmI4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YjksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZiYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmJiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YmMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZiZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmJlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YmYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZjMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmMxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YzIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZjMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmM0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YzUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZjNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmM3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YzgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZjOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmNhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2Y2IsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZjYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmNkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2Y2UsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZjZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmQwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZDEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZkMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmQzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZDQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZkNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmQ2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZDcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZkOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmQ5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZGEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZkYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmRjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZGQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZkZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmRmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZlMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmUyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZlNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmU1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZlNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmU4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZlYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmViLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZlZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmVlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZmMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmYxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZjIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZmMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmY0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZjUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZmNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmY3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZjgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZmOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmZhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZmIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZmYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmZkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZmUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZmZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MDEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcwMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzAzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MDQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcwNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzA2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MDcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcwOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzA5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MGEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcwYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzBjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MGQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcwZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzBmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcxMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzEyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcxNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzE1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcxNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzE4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcxYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzFiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcxZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzFlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcyMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzIxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MjIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcyMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzI0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MjUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcyNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzI3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MjgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcyOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzJhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MmIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcyYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzJkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MmUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcyZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzMwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MzEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODczMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzMzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MzQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODczNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzM2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MzcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODczOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzM5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3M2EsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODczYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzNjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3M2QsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODczZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzNmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc0MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzQyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NDMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc0NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzQ1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NDYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc0NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzQ4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NDksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc0YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzRiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NGMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc0ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzRlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NGYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc1MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzUxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc1MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzU0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc1NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzU3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc1OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzVhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc1YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzVkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc1ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzYwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NjEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc2MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzYzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NjQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc2NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzY2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NjcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc2OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzY5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NmEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc2YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzZjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NmQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc2ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzZmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NzAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc3MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzcyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NzMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc3NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Nzc1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NzYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc3NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Nzc4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NzksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc3YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzdiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3N2MsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc3ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzdlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3N2YsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc4MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzgxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3ODIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc4MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Nzg0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3ODUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc4NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Nzg3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3ODgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc4OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzhhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3OGIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc4YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzhkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3OGUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc4ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzkwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3OTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc5MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzkzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3OTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc5NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Nzk2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3OTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc5OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Nzk5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3OWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc5YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzljLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3OWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc5ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzlmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdhMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2EyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdhNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2E1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdhNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2E4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdhYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2FiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdhZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2FlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdiMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2IxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YjIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdiMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2I0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YjUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdiNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2I3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YjgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdiOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2JhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YmIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdiYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2JkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YmUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdiZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2MwLAotCTB4MDAwMDAwNzksCi0JMHhmZDYwOTA3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YzEsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdjMiwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2MzLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLS8qIEZJTklTSCBJTklUIERlc2NyaXB0b3IgKi8KLQkweDAwMGYwMDAyLAotCTB4ODA3MTg3YzQsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RnMy5jIGIvZHJpdmVycy9uZXQvdGczLmMKaW5kZXggZGFiZGY1OWYuLmY3ZWZjZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3RnMy5jCisrKyBiL2RyaXZlcnMvbmV0L3RnMy5jCkBAIC00LDcgKzQsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AcmVkaGF0LmNvbSkKICAqIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMyBKZWZmIEdhcnppayAoamdhcnppa0Bwb2JveC5jb20pCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQgU3VuIE1pY3Jvc3lzdGVtcyBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNyBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4KKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA5IEJyb2FkY29tIENvcnBvcmF0aW9uLgogICoKICAqIEZpcm13YXJlIGlzOgogICoJRGVyaXZlZCBmcm9tIHByb3ByaWV0YXJ5IHVucHVibGlzaGVkIHNvdXJjZSBjb2RlLApAQCAtNjgsOCArNjgsOCBAQAogCiAjZGVmaW5lIERSVl9NT0RVTEVfTkFNRQkJInRnMyIKICNkZWZpbmUgUEZYIERSVl9NT0RVTEVfTkFNRQkiOiAiCi0jZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTgkiMy45NyIKLSNkZWZpbmUgRFJWX01PRFVMRV9SRUxEQVRFCSJEZWNlbWJlciAxMCwgMjAwOCIKKyNkZWZpbmUgRFJWX01PRFVMRV9WRVJTSU9OCSIzLjk4IgorI2RlZmluZSBEUlZfTU9EVUxFX1JFTERBVEUJIkZlYnJ1YXJ5IDI1LCAyMDA5IgogCiAjZGVmaW5lIFRHM19ERUZfTUFDX01PREUJMAogI2RlZmluZSBURzNfREVGX1JYX01PREUJCTAKQEAgLTg2MCw3ICs4NjAsNyBAQAogCiBzdGF0aWMgaW50IHRnM19tZGlvX3JlYWQoc3RydWN0IG1paV9idXMgKmJwLCBpbnQgbWlpX2lkLCBpbnQgcmVnKQogewotCXN0cnVjdCB0ZzMgKnRwID0gKHN0cnVjdCB0ZzMgKilicC0+cHJpdjsKKwlzdHJ1Y3QgdGczICp0cCA9IGJwLT5wcml2OwogCXUzMiB2YWw7CiAKIAlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19NRElPQlVTX1BBVVNFRCkKQEAgLTg3NCw3ICs4NzQsNyBAQAogCiBzdGF0aWMgaW50IHRnM19tZGlvX3dyaXRlKHN0cnVjdCBtaWlfYnVzICpicCwgaW50IG1paV9pZCwgaW50IHJlZywgdTE2IHZhbCkKIHsKLQlzdHJ1Y3QgdGczICp0cCA9IChzdHJ1Y3QgdGczICopYnAtPnByaXY7CisJc3RydWN0IHRnMyAqdHAgPSBicC0+cHJpdjsKIAogCWlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX01ESU9CVVNfUEFVU0VEKQogCQlyZXR1cm4gLUVBR0FJTjsKQEAgLTIwNTAsOCArMjA1MCw2IEBACiAKIHN0YXRpYyB2b2lkIHRnM193cml0ZV9zaWdfcG9zdF9yZXNldChzdHJ1Y3QgdGczICosIGludCk7CiBzdGF0aWMgaW50IHRnM19oYWx0X2NwdShzdHJ1Y3QgdGczICosIHUzMik7Ci1zdGF0aWMgaW50IHRnM19udnJhbV9sb2NrKHN0cnVjdCB0ZzMgKik7Ci1zdGF0aWMgdm9pZCB0ZzNfbnZyYW1fdW5sb2NrKHN0cnVjdCB0ZzMgKik7CiAKIHN0YXRpYyB2b2lkIHRnM19wb3dlcl9kb3duX3BoeShzdHJ1Y3QgdGczICp0cCwgYm9vbCBkb19sb3dfcG93ZXIpCiB7CkBAIC0yMTA4LDYgKzIxMDYsMTk0IEBACiB9CiAKIC8qIHRwLT5sb2NrIGlzIGhlbGQuICovCitzdGF0aWMgaW50IHRnM19udnJhbV9sb2NrKHN0cnVjdCB0ZzMgKnRwKQoreworCWlmICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfTlZSQU0pIHsKKwkJaW50IGk7CisKKwkJaWYgKHRwLT5udnJhbV9sb2NrX2NudCA9PSAwKSB7CisJCQl0dzMyKE5WUkFNX1NXQVJCLCBTV0FSQl9SRVFfU0VUMSk7CisJCQlmb3IgKGkgPSAwOyBpIDwgODAwMDsgaSsrKSB7CisJCQkJaWYgKHRyMzIoTlZSQU1fU1dBUkIpICYgU1dBUkJfR05UMSkKKwkJCQkJYnJlYWs7CisJCQkJdWRlbGF5KDIwKTsKKwkJCX0KKwkJCWlmIChpID09IDgwMDApIHsKKwkJCQl0dzMyKE5WUkFNX1NXQVJCLCBTV0FSQl9SRVFfQ0xSMSk7CisJCQkJcmV0dXJuIC1FTk9ERVY7CisJCQl9CisJCX0KKwkJdHAtPm52cmFtX2xvY2tfY250Kys7CisJfQorCXJldHVybiAwOworfQorCisvKiB0cC0+bG9jayBpcyBoZWxkLiAqLworc3RhdGljIHZvaWQgdGczX252cmFtX3VubG9jayhzdHJ1Y3QgdGczICp0cCkKK3sKKwlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX05WUkFNKSB7CisJCWlmICh0cC0+bnZyYW1fbG9ja19jbnQgPiAwKQorCQkJdHAtPm52cmFtX2xvY2tfY250LS07CisJCWlmICh0cC0+bnZyYW1fbG9ja19jbnQgPT0gMCkKKwkJCXR3MzJfZihOVlJBTV9TV0FSQiwgU1dBUkJfUkVRX0NMUjEpOworCX0KK30KKworLyogdHAtPmxvY2sgaXMgaGVsZC4gKi8KK3N0YXRpYyB2b2lkIHRnM19lbmFibGVfbnZyYW1fYWNjZXNzKHN0cnVjdCB0ZzMgKnRwKQoreworCWlmICgodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzUwX1BMVVMpICYmCisJICAgICEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9QUk9URUNURURfTlZSQU0pKSB7CisJCXUzMiBudmFjY2VzcyA9IHRyMzIoTlZSQU1fQUNDRVNTKTsKKworCQl0dzMyKE5WUkFNX0FDQ0VTUywgbnZhY2Nlc3MgfCBBQ0NFU1NfRU5BQkxFKTsKKwl9Cit9CisKKy8qIHRwLT5sb2NrIGlzIGhlbGQuICovCitzdGF0aWMgdm9pZCB0ZzNfZGlzYWJsZV9udnJhbV9hY2Nlc3Moc3RydWN0IHRnMyAqdHApCit7CisJaWYgKCh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3NTBfUExVUykgJiYKKwkgICAgISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1BST1RFQ1RFRF9OVlJBTSkpIHsKKwkJdTMyIG52YWNjZXNzID0gdHIzMihOVlJBTV9BQ0NFU1MpOworCisJCXR3MzIoTlZSQU1fQUNDRVNTLCBudmFjY2VzcyAmIH5BQ0NFU1NfRU5BQkxFKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgdGczX252cmFtX3JlYWRfdXNpbmdfZWVwcm9tKHN0cnVjdCB0ZzMgKnRwLAorCQkJCQl1MzIgb2Zmc2V0LCB1MzIgKnZhbCkKK3sKKwl1MzIgdG1wOworCWludCBpOworCisJaWYgKG9mZnNldCA+IEVFUFJPTV9BRERSX0FERFJfTUFTSyB8fCAob2Zmc2V0ICUgNCkgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl0bXAgPSB0cjMyKEdSQ19FRVBST01fQUREUikgJiB+KEVFUFJPTV9BRERSX0FERFJfTUFTSyB8CisJCQkJCUVFUFJPTV9BRERSX0RFVklEX01BU0sgfAorCQkJCQlFRVBST01fQUREUl9SRUFEKTsKKwl0dzMyKEdSQ19FRVBST01fQUREUiwKKwkgICAgIHRtcCB8CisJICAgICAoMCA8PCBFRVBST01fQUREUl9ERVZJRF9TSElGVCkgfAorCSAgICAgKChvZmZzZXQgPDwgRUVQUk9NX0FERFJfQUREUl9TSElGVCkgJgorCSAgICAgIEVFUFJPTV9BRERSX0FERFJfTUFTSykgfAorCSAgICAgRUVQUk9NX0FERFJfUkVBRCB8IEVFUFJPTV9BRERSX1NUQVJUKTsKKworCWZvciAoaSA9IDA7IGkgPCAxMDAwOyBpKyspIHsKKwkJdG1wID0gdHIzMihHUkNfRUVQUk9NX0FERFIpOworCisJCWlmICh0bXAgJiBFRVBST01fQUREUl9DT01QTEVURSkKKwkJCWJyZWFrOworCQltc2xlZXAoMSk7CisJfQorCWlmICghKHRtcCAmIEVFUFJPTV9BRERSX0NPTVBMRVRFKSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCSp2YWwgPSB0cjMyKEdSQ19FRVBST01fREFUQSk7CisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgTlZSQU1fQ01EX1RJTUVPVVQgMTAwMDAKKworc3RhdGljIGludCB0ZzNfbnZyYW1fZXhlY19jbWQoc3RydWN0IHRnMyAqdHAsIHUzMiBudnJhbV9jbWQpCit7CisJaW50IGk7CisKKwl0dzMyKE5WUkFNX0NNRCwgbnZyYW1fY21kKTsKKwlmb3IgKGkgPSAwOyBpIDwgTlZSQU1fQ01EX1RJTUVPVVQ7IGkrKykgeworCQl1ZGVsYXkoMTApOworCQlpZiAodHIzMihOVlJBTV9DTUQpICYgTlZSQU1fQ01EX0RPTkUpIHsKKwkJCXVkZWxheSgxMCk7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChpID09IE5WUkFNX0NNRF9USU1FT1VUKQorCQlyZXR1cm4gLUVCVVNZOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1MzIgdGczX252cmFtX3BoeXNfYWRkcihzdHJ1Y3QgdGczICp0cCwgdTMyIGFkZHIpCit7CisJaWYgKCh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfTlZSQU0pICYmCisJICAgICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfTlZSQU1fQlVGRkVSRUQpICYmCisJICAgICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0ZMQVNIKSAmJgorCSAgICEodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19OT19OVlJBTV9BRERSX1RSQU5TKSAmJgorCSAgICAodHAtPm52cmFtX2plZGVjbnVtID09IEpFREVDX0FUTUVMKSkKKworCQlhZGRyID0gKChhZGRyIC8gdHAtPm52cmFtX3BhZ2VzaXplKSA8PAorCQkJQVRNRUxfQVQ0NURCMFgxQl9QQUdFX1BPUykgKworCQkgICAgICAgKGFkZHIgJSB0cC0+bnZyYW1fcGFnZXNpemUpOworCisJcmV0dXJuIGFkZHI7Cit9CisKK3N0YXRpYyB1MzIgdGczX252cmFtX2xvZ2ljYWxfYWRkcihzdHJ1Y3QgdGczICp0cCwgdTMyIGFkZHIpCit7CisJaWYgKCh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfTlZSQU0pICYmCisJICAgICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfTlZSQU1fQlVGRkVSRUQpICYmCisJICAgICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0ZMQVNIKSAmJgorCSAgICEodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19OT19OVlJBTV9BRERSX1RSQU5TKSAmJgorCSAgICAodHAtPm52cmFtX2plZGVjbnVtID09IEpFREVDX0FUTUVMKSkKKworCQlhZGRyID0gKChhZGRyID4+IEFUTUVMX0FUNDVEQjBYMUJfUEFHRV9QT1MpICoKKwkJCXRwLT5udnJhbV9wYWdlc2l6ZSkgKworCQkgICAgICAgKGFkZHIgJiAoKDEgPDwgQVRNRUxfQVQ0NURCMFgxQl9QQUdFX1BPUykgLSAxKSk7CisKKwlyZXR1cm4gYWRkcjsKK30KKworLyogTk9URTogRGF0YSByZWFkIGluIGZyb20gTlZSQU0gaXMgYnl0ZXN3YXBwZWQgYWNjb3JkaW5nIHRvCisgKiB0aGUgYnl0ZXN3YXBwaW5nIHNldHRpbmdzIGZvciBhbGwgb3RoZXIgcmVnaXN0ZXIgYWNjZXNzZXMuCisgKiB0ZzMgZGV2aWNlcyBhcmUgQkUgZGV2aWNlcywgc28gb24gYSBCRSBtYWNoaW5lLCB0aGUgZGF0YQorICogcmV0dXJuZWQgd2lsbCBiZSBleGFjdGx5IGFzIGl0IGlzIHNlZW4gaW4gTlZSQU0uICBPbiBhIExFCisgKiBtYWNoaW5lLCB0aGUgMzItYml0IHZhbHVlIHdpbGwgYmUgYnl0ZXN3YXBwZWQuCisgKi8KK3N0YXRpYyBpbnQgdGczX252cmFtX3JlYWQoc3RydWN0IHRnMyAqdHAsIHUzMiBvZmZzZXQsIHUzMiAqdmFsKQoreworCWludCByZXQ7CisKKwlpZiAoISh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfTlZSQU0pKQorCQlyZXR1cm4gdGczX252cmFtX3JlYWRfdXNpbmdfZWVwcm9tKHRwLCBvZmZzZXQsIHZhbCk7CisKKwlvZmZzZXQgPSB0ZzNfbnZyYW1fcGh5c19hZGRyKHRwLCBvZmZzZXQpOworCisJaWYgKG9mZnNldCA+IE5WUkFNX0FERFJfTVNLKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldCA9IHRnM19udnJhbV9sb2NrKHRwKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJdGczX2VuYWJsZV9udnJhbV9hY2Nlc3ModHApOworCisJdHczMihOVlJBTV9BRERSLCBvZmZzZXQpOworCXJldCA9IHRnM19udnJhbV9leGVjX2NtZCh0cCwgTlZSQU1fQ01EX1JEIHwgTlZSQU1fQ01EX0dPIHwKKwkJTlZSQU1fQ01EX0ZJUlNUIHwgTlZSQU1fQ01EX0xBU1QgfCBOVlJBTV9DTURfRE9ORSk7CisKKwlpZiAocmV0ID09IDApCisJCSp2YWwgPSB0cjMyKE5WUkFNX1JEREFUQSk7CisKKwl0ZzNfZGlzYWJsZV9udnJhbV9hY2Nlc3ModHApOworCisJdGczX252cmFtX3VubG9jayh0cCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKiBFbnN1cmVzIE5WUkFNIGRhdGEgaXMgaW4gYnl0ZXN0cmVhbSBmb3JtYXQuICovCitzdGF0aWMgaW50IHRnM19udnJhbV9yZWFkX2JlMzIoc3RydWN0IHRnMyAqdHAsIHUzMiBvZmZzZXQsIF9fYmUzMiAqdmFsKQoreworCXUzMiB2OworCWludCByZXMgPSB0ZzNfbnZyYW1fcmVhZCh0cCwgb2Zmc2V0LCAmdik7CisJaWYgKCFyZXMpCisJCSp2YWwgPSBjcHVfdG9fYmUzMih2KTsKKwlyZXR1cm4gcmVzOworfQorCisvKiB0cC0+bG9jayBpcyBoZWxkLiAqLwogc3RhdGljIHZvaWQgX190ZzNfc2V0X21hY19hZGRyKHN0cnVjdCB0ZzMgKnRwLCBpbnQgc2tpcF9tYWNfMSkKIHsKIAl1MzIgYWRkcl9oaWdoLCBhZGRyX2xvdzsKQEAgLTQzMzksNiArNDUyNSwxMyBAQAogCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwogCiAJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIHRwLT5kZXYpOworCisJCWlmIChsZW4gPiAodHAtPmRldi0+bXR1ICsgRVRIX0hMRU4pICYmCisJCSAgICBza2ItPnByb3RvY29sICE9IGh0b25zKEVUSF9QXzgwMjFRKSkgeworCQkJZGV2X2tmcmVlX3NrYihza2IpOworCQkJZ290byBuZXh0X3BrdDsKKwkJfQorCiAjaWYgVEczX1ZMQU5fVEFHX1VTRUQKIAkJaWYgKHRwLT52bGdycCAhPSBOVUxMICYmCiAJCSAgICBkZXNjLT50eXBlX2ZsYWdzICYgUlhEX0ZMQUdfVkxBTikgewpAQCAtNDQ2MSw3ICs0NjU0LDcgQEAKIAkJCXNibGstPnN0YXR1cyAmPSB+U0RfU1RBVFVTX1VQREFURUQ7CiAKIAkJaWYgKGxpa2VseSghdGczX2hhc193b3JrKHRwKSkpIHsKLQkJCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJCXRnM19yZXN0YXJ0X2ludHModHApOwogCQkJYnJlYWs7CiAJCX0KQEAgLTQ0NzEsNyArNDY2NCw3IEBACiAKIHR4X3JlY292ZXJ5OgogCS8qIHdvcmtfZG9uZSBpcyBndWFyYW50ZWVkIHRvIGJlIGxlc3MgdGhhbiBidWRnZXQuICovCi0JbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAlzY2hlZHVsZV93b3JrKCZ0cC0+cmVzZXRfdGFzayk7CiAJcmV0dXJuIHdvcmtfZG9uZTsKIH0KQEAgLTQ1MjAsNyArNDcxMyw3IEBACiAJcHJlZmV0Y2goJnRwLT5yeF9yY2JbdHAtPnJ4X3JjYl9wdHJdKTsKIAogCWlmIChsaWtlbHkoIXRnM19pcnFfc3luYyh0cCkpKQotCQluZXRpZl9yeF9zY2hlZHVsZSgmdHAtPm5hcGkpOworCQluYXBpX3NjaGVkdWxlKCZ0cC0+bmFwaSk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CkBAIC00NTQ1LDcgKzQ3MzgsNyBAQAogCSAqLwogCXR3MzJfbWFpbGJveChNQUlMQk9YX0lOVEVSUlVQVF8wICsgVEczXzY0QklUX1JFR19MT1csIDB4MDAwMDAwMDEpOwogCWlmIChsaWtlbHkoIXRnM19pcnFfc3luYyh0cCkpKQotCQluZXRpZl9yeF9zY2hlZHVsZSgmdHAtPm5hcGkpOworCQluYXBpX3NjaGVkdWxlKCZ0cC0+bmFwaSk7CiAKIAlyZXR1cm4gSVJRX1JFVFZBTCgxKTsKIH0KQEAgLTQ1ODcsNyArNDc4MCw3IEBACiAJc2Jsay0+c3RhdHVzICY9IH5TRF9TVEFUVVNfVVBEQVRFRDsKIAlpZiAobGlrZWx5KHRnM19oYXNfd29yayh0cCkpKSB7CiAJCXByZWZldGNoKCZ0cC0+cnhfcmNiW3RwLT5yeF9yY2JfcHRyXSk7Ci0JCW5ldGlmX3J4X3NjaGVkdWxlKCZ0cC0+bmFwaSk7CisJCW5hcGlfc2NoZWR1bGUoJnRwLT5uYXBpKTsKIAl9IGVsc2UgewogCQkvKiBObyB3b3JrLCBzaGFyZWQgaW50ZXJydXB0IHBlcmhhcHM/ICByZS1lbmFibGUKIAkJICogaW50ZXJydXB0cywgYW5kIGZsdXNoIHRoYXQgUENJIHdyaXRlCkBAIC00NjMzLDcgKzQ4MjYsNyBAQAogCXR3MzJfbWFpbGJveF9mKE1BSUxCT1hfSU5URVJSVVBUXzAgKyBURzNfNjRCSVRfUkVHX0xPVywgMHgwMDAwMDAwMSk7CiAJaWYgKHRnM19pcnFfc3luYyh0cCkpCiAJCWdvdG8gb3V0OwotCWlmIChuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKCZ0cC0+bmFwaSkpIHsKKwlpZiAobmFwaV9zY2hlZHVsZV9wcmVwKCZ0cC0+bmFwaSkpIHsKIAkJcHJlZmV0Y2goJnRwLT5yeF9yY2JbdHAtPnJ4X3JjYl9wdHJdKTsKIAkJLyogVXBkYXRlIGxhc3RfdGFnIHRvIG1hcmsgdGhhdCB0aGlzIHN0YXR1cyBoYXMgYmVlbgogCQkgKiBzZWVuLiBCZWNhdXNlIGludGVycnVwdCBtYXkgYmUgc2hhcmVkLCB3ZSBtYXkgYmUKQEAgLTQ2NDEsNyArNDgzNCw3IEBACiAJCSAqIGlmIHRnM19wb2xsKCkgaXMgbm90IHNjaGVkdWxlZC4KIAkJICovCiAJCXRwLT5sYXN0X3RhZyA9IHNibGstPnN0YXR1c190YWc7Ci0JCV9fbmV0aWZfcnhfc2NoZWR1bGUoJnRwLT5uYXBpKTsKKwkJX19uYXBpX3NjaGVkdWxlKCZ0cC0+bmFwaSk7CiAJfQogb3V0OgogCXJldHVybiBJUlFfUkVUVkFMKGhhbmRsZWQpOwpAQCAtNTYzMSw2MiArNTgyNCw2IEBACiAJcmV0dXJuIGVycjsKIH0KIAotLyogdHAtPmxvY2sgaXMgaGVsZC4gKi8KLXN0YXRpYyBpbnQgdGczX252cmFtX2xvY2soc3RydWN0IHRnMyAqdHApCi17Ci0JaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19OVlJBTSkgewotCQlpbnQgaTsKLQotCQlpZiAodHAtPm52cmFtX2xvY2tfY250ID09IDApIHsKLQkJCXR3MzIoTlZSQU1fU1dBUkIsIFNXQVJCX1JFUV9TRVQxKTsKLQkJCWZvciAoaSA9IDA7IGkgPCA4MDAwOyBpKyspIHsKLQkJCQlpZiAodHIzMihOVlJBTV9TV0FSQikgJiBTV0FSQl9HTlQxKQotCQkJCQlicmVhazsKLQkJCQl1ZGVsYXkoMjApOwotCQkJfQotCQkJaWYgKGkgPT0gODAwMCkgewotCQkJCXR3MzIoTlZSQU1fU1dBUkIsIFNXQVJCX1JFUV9DTFIxKTsKLQkJCQlyZXR1cm4gLUVOT0RFVjsKLQkJCX0KLQkJfQotCQl0cC0+bnZyYW1fbG9ja19jbnQrKzsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIHRwLT5sb2NrIGlzIGhlbGQuICovCi1zdGF0aWMgdm9pZCB0ZzNfbnZyYW1fdW5sb2NrKHN0cnVjdCB0ZzMgKnRwKQotewotCWlmICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfTlZSQU0pIHsKLQkJaWYgKHRwLT5udnJhbV9sb2NrX2NudCA+IDApCi0JCQl0cC0+bnZyYW1fbG9ja19jbnQtLTsKLQkJaWYgKHRwLT5udnJhbV9sb2NrX2NudCA9PSAwKQotCQkJdHczMl9mKE5WUkFNX1NXQVJCLCBTV0FSQl9SRVFfQ0xSMSk7Ci0JfQotfQotCi0vKiB0cC0+bG9jayBpcyBoZWxkLiAqLwotc3RhdGljIHZvaWQgdGczX2VuYWJsZV9udnJhbV9hY2Nlc3Moc3RydWN0IHRnMyAqdHApCi17Ci0JaWYgKCh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3NTBfUExVUykgJiYKLQkgICAgISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1BST1RFQ1RFRF9OVlJBTSkpIHsKLQkJdTMyIG52YWNjZXNzID0gdHIzMihOVlJBTV9BQ0NFU1MpOwotCi0JCXR3MzIoTlZSQU1fQUNDRVNTLCBudmFjY2VzcyB8IEFDQ0VTU19FTkFCTEUpOwotCX0KLX0KLQotLyogdHAtPmxvY2sgaXMgaGVsZC4gKi8KLXN0YXRpYyB2b2lkIHRnM19kaXNhYmxlX252cmFtX2FjY2VzcyhzdHJ1Y3QgdGczICp0cCkKLXsKLQlpZiAoKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTc1MF9QTFVTKSAmJgotCSAgICAhKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfUFJPVEVDVEVEX05WUkFNKSkgewotCQl1MzIgbnZhY2Nlc3MgPSB0cjMyKE5WUkFNX0FDQ0VTUyk7Ci0KLQkJdHczMihOVlJBTV9BQ0NFU1MsIG52YWNjZXNzICYgfkFDQ0VTU19FTkFCTEUpOwotCX0KLX0KLQogc3RhdGljIHZvaWQgdGczX2FwZV9zZW5kX2V2ZW50KHN0cnVjdCB0ZzMgKnRwLCB1MzIgZXZlbnQpCiB7CiAJaW50IGk7CkBAIC02ODI0LDcgKzY5NjEsOCBAQAogCV9fdGczX3NldF9tYWNfYWRkcih0cCwgMCk7CiAKIAkvKiBNVFUgKyBldGhlcm5ldCBoZWFkZXIgKyBGQ1MgKyBvcHRpb25hbCBWTEFOIHRhZyAqLwotCXR3MzIoTUFDX1JYX01UVV9TSVpFLCB0cC0+ZGV2LT5tdHUgKyBFVEhfSExFTiArIDgpOworCXR3MzIoTUFDX1JYX01UVV9TSVpFLAorCSAgICAgdHAtPmRldi0+bXR1ICsgRVRIX0hMRU4gKyBFVEhfRkNTX0xFTiArIFZMQU5fSExFTik7CiAKIAkvKiBUaGUgc2xvdCB0aW1lIGlzIGNoYW5nZWQgYnkgdGczX3NldHVwX3BoeSBpZiB3ZQogCSAqIHJ1biBhdCBnaWdhYml0IHdpdGggaGFsZiBkdXBsZXguCkBAIC04Mzg2LDE3ICs4NTI0LDEzIEBACiAJcmV0dXJuIHRwLT5udnJhbV9zaXplOwogfQogCi1zdGF0aWMgaW50IHRnM19udnJhbV9yZWFkKHN0cnVjdCB0ZzMgKnRwLCB1MzIgb2Zmc2V0LCB1MzIgKnZhbCk7Ci1zdGF0aWMgaW50IHRnM19udnJhbV9yZWFkX2xlKHN0cnVjdCB0ZzMgKnRwLCB1MzIgb2Zmc2V0LCBfX2xlMzIgKnZhbCk7Ci1zdGF0aWMgaW50IHRnM19udnJhbV9yZWFkX3N3YWIoc3RydWN0IHRnMyAqdHAsIHUzMiBvZmZzZXQsIHUzMiAqdmFsKTsKLQogc3RhdGljIGludCB0ZzNfZ2V0X2VlcHJvbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9lZXByb20gKmVlcHJvbSwgdTggKmRhdGEpCiB7CiAJc3RydWN0IHRnMyAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCWludCByZXQ7CiAJdTggICpwZDsKIAl1MzIgaSwgb2Zmc2V0LCBsZW4sIGJfb2Zmc2V0LCBiX2NvdW50OwotCV9fbGUzMiB2YWw7CisJX19iZTMyIHZhbDsKIAogCWlmICh0cC0+bGlua19jb25maWcucGh5X2lzX2xvd19wb3dlcikKIAkJcmV0dXJuIC1FQUdBSU47CkBAIC04NDE1LDcgKzg1NDksNyBAQAogCQkJLyogaS5lLiBvZmZzZXQ9MSBsZW49MiAqLwogCQkJYl9jb3VudCA9IGxlbjsKIAkJfQotCQlyZXQgPSB0ZzNfbnZyYW1fcmVhZF9sZSh0cCwgb2Zmc2V0LWJfb2Zmc2V0LCAmdmFsKTsKKwkJcmV0ID0gdGczX252cmFtX3JlYWRfYmUzMih0cCwgb2Zmc2V0LWJfb2Zmc2V0LCAmdmFsKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiAJCW1lbWNweShkYXRhLCAoKGNoYXIqKSZ2YWwpICsgYl9vZmZzZXQsIGJfY291bnQpOwpAQCAtODQyNyw3ICs4NTYxLDcgQEAKIAkvKiByZWFkIGJ5dGVzIHVwdG8gdGhlIGxhc3QgNCBieXRlIGJvdW5kYXJ5ICovCiAJcGQgPSAmZGF0YVtlZXByb20tPmxlbl07CiAJZm9yIChpID0gMDsgaSA8IChsZW4gLSAobGVuICYgMykpOyBpICs9IDQpIHsKLQkJcmV0ID0gdGczX252cmFtX3JlYWRfbGUodHAsIG9mZnNldCArIGksICZ2YWwpOworCQlyZXQgPSB0ZzNfbnZyYW1fcmVhZF9iZTMyKHRwLCBvZmZzZXQgKyBpLCAmdmFsKTsKIAkJaWYgKHJldCkgewogCQkJZWVwcm9tLT5sZW4gKz0gaTsKIAkJCXJldHVybiByZXQ7CkBAIC04NDQxLDcgKzg1NzUsNyBAQAogCQlwZCA9ICZkYXRhW2VlcHJvbS0+bGVuXTsKIAkJYl9jb3VudCA9IGxlbiAmIDM7CiAJCWJfb2Zmc2V0ID0gb2Zmc2V0ICsgbGVuIC0gYl9jb3VudDsKLQkJcmV0ID0gdGczX252cmFtX3JlYWRfbGUodHAsIGJfb2Zmc2V0LCAmdmFsKTsKKwkJcmV0ID0gdGczX252cmFtX3JlYWRfYmUzMih0cCwgYl9vZmZzZXQsICZ2YWwpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKIAkJbWVtY3B5KHBkLCAmdmFsLCBiX2NvdW50KTsKQEAgLTg0NTgsNyArODU5Miw3IEBACiAJaW50IHJldDsKIAl1MzIgb2Zmc2V0LCBsZW4sIGJfb2Zmc2V0LCBvZGRfbGVuOwogCXU4ICpidWY7Ci0JX19sZTMyIHN0YXJ0LCBlbmQ7CisJX19iZTMyIHN0YXJ0LCBlbmQ7CiAKIAlpZiAodHAtPmxpbmtfY29uZmlnLnBoeV9pc19sb3dfcG93ZXIpCiAJCXJldHVybiAtRUFHQUlOOwpAQCAtODQ3MSw3ICs4NjA1LDcgQEAKIAogCWlmICgoYl9vZmZzZXQgPSAob2Zmc2V0ICYgMykpKSB7CiAJCS8qIGFkanVzdG1lbnRzIHRvIHN0YXJ0IG9uIHJlcXVpcmVkIDQgYnl0ZSBib3VuZGFyeSAqLwotCQlyZXQgPSB0ZzNfbnZyYW1fcmVhZF9sZSh0cCwgb2Zmc2V0LWJfb2Zmc2V0LCAmc3RhcnQpOworCQlyZXQgPSB0ZzNfbnZyYW1fcmVhZF9iZTMyKHRwLCBvZmZzZXQtYl9vZmZzZXQsICZzdGFydCk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwogCQlsZW4gKz0gYl9vZmZzZXQ7CkBAIC04NDg1LDcgKzg2MTksNyBAQAogCQkvKiBhZGp1c3RtZW50cyB0byBlbmQgb24gcmVxdWlyZWQgNCBieXRlIGJvdW5kYXJ5ICovCiAJCW9kZF9sZW4gPSAxOwogCQlsZW4gPSAobGVuICsgMykgJiB+MzsKLQkJcmV0ID0gdGczX252cmFtX3JlYWRfbGUodHAsIG9mZnNldCtsZW4tNCwgJmVuZCk7CisJCXJldCA9IHRnM19udnJhbV9yZWFkX2JlMzIodHAsIG9mZnNldCtsZW4tNCwgJmVuZCk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwogCX0KQEAgLTg1NDQsNyArODY3OCw3IEBACiAJCWNtZC0+ZHVwbGV4ID0gdHAtPmxpbmtfY29uZmlnLmFjdGl2ZV9kdXBsZXg7CiAJfQogCWNtZC0+cGh5X2FkZHJlc3MgPSBQSFlfQUREUjsKLQljbWQtPnRyYW5zY2VpdmVyID0gMDsKKwljbWQtPnRyYW5zY2VpdmVyID0gWENWUl9JTlRFUk5BTDsKIAljbWQtPmF1dG9uZWcgPSB0cC0+bGlua19jb25maWcuYXV0b25lZzsKIAljbWQtPm1heHR4cGt0ID0gMDsKIAljbWQtPm1heHJ4cGt0ID0gMDsKQEAgLTg1NjEsMjYgKzg2OTUsNTggQEAKIAkJcmV0dXJuIHBoeV9ldGh0b29sX3NzZXQodHAtPm1kaW9fYnVzLT5waHlfbWFwW1BIWV9BRERSXSwgY21kKTsKIAl9CiAKLQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9BTllfU0VSREVTKSB7Ci0JCS8qIFRoZXNlIGFyZSB0aGUgb25seSB2YWxpZCBhZHZlcnRpc2VtZW50IGJpdHMgYWxsb3dlZC4gICovCi0JCWlmIChjbWQtPmF1dG9uZWcgPT0gQVVUT05FR19FTkFCTEUgJiYKLQkJICAgIChjbWQtPmFkdmVydGlzaW5nICYgfihBRFZFUlRJU0VEXzEwMDBiYXNlVF9IYWxmIHwKLQkJCQkJICBBRFZFUlRJU0VEXzEwMDBiYXNlVF9GdWxsIHwKLQkJCQkJICBBRFZFUlRJU0VEX0F1dG9uZWcgfAotCQkJCQkgIEFEVkVSVElTRURfRklCUkUpKSkKLQkJCXJldHVybiAtRUlOVkFMOwotCQkvKiBGaWJlciBjYW4gb25seSBkbyBTUEVFRF8xMDAwLiAgKi8KLQkJZWxzZSBpZiAoKGNtZC0+YXV0b25lZyAhPSBBVVRPTkVHX0VOQUJMRSkgJiYKLQkJCSAoY21kLT5zcGVlZCAhPSBTUEVFRF8xMDAwKSkKLQkJCXJldHVybiAtRUlOVkFMOwotCS8qIENvcHBlciBjYW5ub3QgZm9yY2UgU1BFRURfMTAwMC4gICovCi0JfSBlbHNlIGlmICgoY21kLT5hdXRvbmVnICE9IEFVVE9ORUdfRU5BQkxFKSAmJgotCQkgICAoY21kLT5zcGVlZCA9PSBTUEVFRF8xMDAwKSkKKwlpZiAoY21kLT5hdXRvbmVnICE9IEFVVE9ORUdfRU5BQkxFICYmCisJICAgIGNtZC0+YXV0b25lZyAhPSBBVVRPTkVHX0RJU0FCTEUpCiAJCXJldHVybiAtRUlOVkFMOwotCWVsc2UgaWYgKChjbWQtPnNwZWVkID09IFNQRUVEXzEwMDApICYmCi0JCSAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHXzEwXzEwMF9PTkxZKSkKKworCWlmIChjbWQtPmF1dG9uZWcgPT0gQVVUT05FR19ESVNBQkxFICYmCisJICAgIGNtZC0+ZHVwbGV4ICE9IERVUExFWF9GVUxMICYmCisJICAgIGNtZC0+ZHVwbGV4ICE9IERVUExFWF9IQUxGKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCWlmIChjbWQtPmF1dG9uZWcgPT0gQVVUT05FR19FTkFCTEUpIHsKKwkJdTMyIG1hc2sgPSBBRFZFUlRJU0VEX0F1dG9uZWcgfAorCQkJICAgQURWRVJUSVNFRF9QYXVzZSB8CisJCQkgICBBRFZFUlRJU0VEX0FzeW1fUGF1c2U7CisKKwkJaWYgKCEodHAtPnRnM19mbGFnczIgJiBURzNfRkxBR18xMF8xMDBfT05MWSkpCisJCQltYXNrIHw9IEFEVkVSVElTRURfMTAwMGJhc2VUX0hhbGYgfAorCQkJCUFEVkVSVElTRURfMTAwMGJhc2VUX0Z1bGw7CisKKwkJaWYgKCEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9BTllfU0VSREVTKSkKKwkJCW1hc2sgfD0gQURWRVJUSVNFRF8xMDBiYXNlVF9IYWxmIHwKKwkJCQlBRFZFUlRJU0VEXzEwMGJhc2VUX0Z1bGwgfAorCQkJCUFEVkVSVElTRURfMTBiYXNlVF9IYWxmIHwKKwkJCQlBRFZFUlRJU0VEXzEwYmFzZVRfRnVsbCB8CisJCQkJQURWRVJUSVNFRF9UUDsKKwkJZWxzZQorCQkJbWFzayB8PSBBRFZFUlRJU0VEX0ZJQlJFOworCisJCWlmIChjbWQtPmFkdmVydGlzaW5nICYgfm1hc2spCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQltYXNrICY9IChBRFZFUlRJU0VEXzEwMDBiYXNlVF9IYWxmIHwKKwkJCSBBRFZFUlRJU0VEXzEwMDBiYXNlVF9GdWxsIHwKKwkJCSBBRFZFUlRJU0VEXzEwMGJhc2VUX0hhbGYgfAorCQkJIEFEVkVSVElTRURfMTAwYmFzZVRfRnVsbCB8CisJCQkgQURWRVJUSVNFRF8xMGJhc2VUX0hhbGYgfAorCQkJIEFEVkVSVElTRURfMTBiYXNlVF9GdWxsKTsKKworCQljbWQtPmFkdmVydGlzaW5nICY9IG1hc2s7CisJfSBlbHNlIHsKKwkJaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfQU5ZX1NFUkRFUykgeworCQkJaWYgKGNtZC0+c3BlZWQgIT0gU1BFRURfMTAwMCkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKworCQkJaWYgKGNtZC0+ZHVwbGV4ICE9IERVUExFWF9GVUxMKQorCQkJCXJldHVybiAtRUlOVkFMOworCQl9IGVsc2UgeworCQkJaWYgKGNtZC0+c3BlZWQgIT0gU1BFRURfMTAwICYmCisJCQkgICAgY21kLT5zcGVlZCAhPSBTUEVFRF8xMCkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKwogCXRnM19mdWxsX2xvY2sodHAsIDApOwogCiAJdHAtPmxpbmtfY29uZmlnLmF1dG9uZWcgPSBjbWQtPmF1dG9uZWc7CkBAIC05MDI1LDEwICs5MTkxLDEwIEBACiBzdGF0aWMgaW50IHRnM190ZXN0X252cmFtKHN0cnVjdCB0ZzMgKnRwKQogewogCXUzMiBjc3VtLCBtYWdpYzsKLQlfX2xlMzIgKmJ1ZjsKKwlfX2JlMzIgKmJ1ZjsKIAlpbnQgaSwgaiwgaywgZXJyID0gMCwgc2l6ZTsKIAotCWlmICh0ZzNfbnZyYW1fcmVhZF9zd2FiKHRwLCAwLCAmbWFnaWMpICE9IDApCisJaWYgKHRnM19udnJhbV9yZWFkKHRwLCAwLCAmbWFnaWMpICE9IDApCiAJCXJldHVybiAtRUlPOwogCiAJaWYgKG1hZ2ljID09IFRHM19FRVBST01fTUFHSUMpCkBAIC05MDYyLDE0ICs5MjI4LDE1IEBACiAKIAllcnIgPSAtRUlPOwogCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgc2l6ZTsgaSArPSA0LCBqKyspIHsKLQkJaWYgKChlcnIgPSB0ZzNfbnZyYW1fcmVhZF9sZSh0cCwgaSwgJmJ1ZltqXSkpICE9IDApCisJCWVyciA9IHRnM19udnJhbV9yZWFkX2JlMzIodHAsIGksICZidWZbal0pOworCQlpZiAoZXJyKQogCQkJYnJlYWs7CiAJfQogCWlmIChpIDwgc2l6ZSkKIAkJZ290byBvdXQ7CiAKIAkvKiBTZWxmYm9vdCBmb3JtYXQgKi8KLQltYWdpYyA9IHN3YWIzMihsZTMyX3RvX2NwdShidWZbMF0pKTsKKwltYWdpYyA9IGJlMzJfdG9fY3B1KGJ1ZlswXSk7CiAJaWYgKChtYWdpYyAmIFRHM19FRVBST01fTUFHSUNfRldfTVNLKSA9PQogCSAgICBURzNfRUVQUk9NX01BR0lDX0ZXKSB7CiAJCXU4ICpidWY4ID0gKHU4ICopIGJ1ZiwgY3N1bTggPSAwOwpAQCAtOTA5OCw3ICs5MjY1LDcgQEAKIAlpZiAoKG1hZ2ljICYgVEczX0VFUFJPTV9NQUdJQ19IV19NU0spID09CiAJICAgIFRHM19FRVBST01fTUFHSUNfSFcpIHsKIAkJdTggZGF0YVtOVlJBTV9TRUxGQk9PVF9EQVRBX1NJWkVdOwotCSAgICAgICAJdTggcGFyaXR5W05WUkFNX1NFTEZCT09UX0RBVEFfU0laRV07CisJCXU4IHBhcml0eVtOVlJBTV9TRUxGQk9PVF9EQVRBX1NJWkVdOwogCQl1OCAqYnVmOCA9ICh1OCAqKSBidWY7CiAKIAkJLyogU2VwYXJhdGUgdGhlIHBhcml0eSBiaXRzIGFuZCB0aGUgZGF0YSBieXRlcy4gICovCkBAIC05MTQxLDEzICs5MzA4LDEzIEBACiAKIAkvKiBCb290c3RyYXAgY2hlY2tzdW0gYXQgb2Zmc2V0IDB4MTAgKi8KIAljc3VtID0gY2FsY19jcmMoKHVuc2lnbmVkIGNoYXIgKikgYnVmLCAweDEwKTsKLQlpZihjc3VtICE9IGxlMzJfdG9fY3B1KGJ1ZlsweDEwLzRdKSkKKwlpZiAoY3N1bSAhPSBiZTMyX3RvX2NwdShidWZbMHgxMC80XSkpCiAJCWdvdG8gb3V0OwogCiAJLyogTWFudWZhY3R1cmluZyBibG9jayBzdGFydHMgYXQgb2Zmc2V0IDB4NzQsIGNoZWNrc3VtIGF0IDB4ZmMgKi8KIAljc3VtID0gY2FsY19jcmMoKHVuc2lnbmVkIGNoYXIgKikgJmJ1ZlsweDc0LzRdLCAweDg4KTsKLQlpZiAoY3N1bSAhPSBsZTMyX3RvX2NwdShidWZbMHhmYy80XSkpCi0JCSBnb3RvIG91dDsKKwlpZiAoY3N1bSAhPSBiZTMyX3RvX2NwdShidWZbMHhmYy80XSkpCisJCWdvdG8gb3V0OwogCiAJZXJyID0gMDsKIApAQCAtOTg1Niw4ICsxMDAyMywxMiBAQAogewogCXN0cnVjdCB0ZzMgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotCWlmIChuZXRpZl9ydW5uaW5nKGRldikpCi0JCXRnM19uZXRpZl9zdG9wKHRwKTsKKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkgeworCQl0cC0+dmxncnAgPSBncnA7CisJCXJldHVybjsKKwl9CisKKwl0ZzNfbmV0aWZfc3RvcCh0cCk7CiAKIAl0ZzNfZnVsbF9sb2NrKHRwLCAwKTsKIApAQCAtOTg2Niw4ICsxMDAzNyw3IEBACiAJLyogVXBkYXRlIFJYX01PREVfS0VFUF9WTEFOX1RBRyBiaXQgaW4gUlhfTU9ERSByZWdpc3Rlci4gKi8KIAlfX3RnM19zZXRfcnhfbW9kZShkZXYpOwogCi0JaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkKLQkJdGczX25ldGlmX3N0YXJ0KHRwKTsKKwl0ZzNfbmV0aWZfc3RhcnQodHApOwogCiAJdGczX2Z1bGxfdW5sb2NrKHRwKTsKIH0KQEAgLTk5NzQsNyArMTAxNDQsNyBAQAogCiAJdHAtPm52cmFtX3NpemUgPSBFRVBST01fQ0hJUF9TSVpFOwogCi0JaWYgKHRnM19udnJhbV9yZWFkX3N3YWIodHAsIDAsICZtYWdpYykgIT0gMCkKKwlpZiAodGczX252cmFtX3JlYWQodHAsIDAsICZtYWdpYykgIT0gMCkKIAkJcmV0dXJuOwogCiAJaWYgKChtYWdpYyAhPSBURzNfRUVQUk9NX01BR0lDKSAmJgpAQCAtOTk5MCw3ICsxMDE2MCw3IEBACiAJY3Vyc2l6ZSA9IDB4MTA7CiAKIAl3aGlsZSAoY3Vyc2l6ZSA8IHRwLT5udnJhbV9zaXplKSB7Ci0JCWlmICh0ZzNfbnZyYW1fcmVhZF9zd2FiKHRwLCBjdXJzaXplLCAmdmFsKSAhPSAwKQorCQlpZiAodGczX252cmFtX3JlYWQodHAsIGN1cnNpemUsICZ2YWwpICE9IDApCiAJCQlyZXR1cm47CiAKIAkJaWYgKHZhbCA9PSBtYWdpYykKQEAgLTEwMDA2LDcgKzEwMTc2LDcgQEAKIHsKIAl1MzIgdmFsOwogCi0JaWYgKHRnM19udnJhbV9yZWFkX3N3YWIodHAsIDAsICZ2YWwpICE9IDApCisJaWYgKHRnM19udnJhbV9yZWFkKHRwLCAwLCAmdmFsKSAhPSAwKQogCQlyZXR1cm47CiAKIAkvKiBTZWxmYm9vdCBmb3JtYXQgKi8KQEAgLTEwMDE3LDcgKzEwMTg3LDE4IEBACiAKIAlpZiAodGczX252cmFtX3JlYWQodHAsIDB4ZjAsICZ2YWwpID09IDApIHsKIAkJaWYgKHZhbCAhPSAwKSB7Ci0JCQl0cC0+bnZyYW1fc2l6ZSA9ICh2YWwgPj4gMTYpICogMTAyNDsKKwkJCS8qIFRoaXMgaXMgY29uZnVzaW5nLiAgV2Ugd2FudCB0byBvcGVyYXRlIG9uIHRoZQorCQkJICogMTYtYml0IHZhbHVlIGF0IG9mZnNldCAweGYyLiAgVGhlIHRnM19udnJhbV9yZWFkKCkKKwkJCSAqIGNhbGwgd2lsbCByZWFkIGZyb20gTlZSQU0gYW5kIGJ5dGVzd2FwIHRoZSBkYXRhCisJCQkgKiBhY2NvcmRpbmcgdG8gdGhlIGJ5dGVzd2FwcGluZyBzZXR0aW5ncyBmb3IgYWxsCisJCQkgKiBvdGhlciByZWdpc3RlciBhY2Nlc3Nlcy4gIFRoaXMgZW5zdXJlcyB0aGUgZGF0YSB3ZQorCQkJICogd2FudCB3aWxsIGFsd2F5cyByZXNpZGUgaW4gdGhlIGxvd2VyIDE2LWJpdHMuCisJCQkgKiBIb3dldmVyLCB0aGUgZGF0YSBpbiBOVlJBTSBpcyBpbiBMRSBmb3JtYXQsIHdoaWNoCisJCQkgKiBtZWFucyB0aGUgZGF0YSBmcm9tIHRoZSBOVlJBTSByZWFkIHdpbGwgYWx3YXlzIGJlCisJCQkgKiBvcHBvc2l0ZSB0aGUgZW5kaWFubmVzcyBvZiB0aGUgQ1BVLiAgVGhlIDE2LWJpdAorCQkJICogYnl0ZXN3YXAgdGhlbiBicmluZ3MgdGhlIGRhdGEgdG8gQ1BVIGVuZGlhbm5lc3MuCisJCQkgKi8KKwkJCXRwLT5udnJhbV9zaXplID0gc3dhYjE2KCh1MTYpKHZhbCAmIDB4MDAwMGZmZmYpKSAqIDEwMjQ7CiAJCQlyZXR1cm47CiAJCX0KIAl9CkBAIC0xMDQ2OCwxNDEgKzEwNjQ5LDYgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgdGczX252cmFtX3JlYWRfdXNpbmdfZWVwcm9tKHN0cnVjdCB0ZzMgKnRwLAotCQkJCQl1MzIgb2Zmc2V0LCB1MzIgKnZhbCkKLXsKLQl1MzIgdG1wOwotCWludCBpOwotCi0JaWYgKG9mZnNldCA+IEVFUFJPTV9BRERSX0FERFJfTUFTSyB8fAotCSAgICAob2Zmc2V0ICUgNCkgIT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQl0bXAgPSB0cjMyKEdSQ19FRVBST01fQUREUikgJiB+KEVFUFJPTV9BRERSX0FERFJfTUFTSyB8Ci0JCQkJCUVFUFJPTV9BRERSX0RFVklEX01BU0sgfAotCQkJCQlFRVBST01fQUREUl9SRUFEKTsKLQl0dzMyKEdSQ19FRVBST01fQUREUiwKLQkgICAgIHRtcCB8Ci0JICAgICAoMCA8PCBFRVBST01fQUREUl9ERVZJRF9TSElGVCkgfAotCSAgICAgKChvZmZzZXQgPDwgRUVQUk9NX0FERFJfQUREUl9TSElGVCkgJgotCSAgICAgIEVFUFJPTV9BRERSX0FERFJfTUFTSykgfAotCSAgICAgRUVQUk9NX0FERFJfUkVBRCB8IEVFUFJPTV9BRERSX1NUQVJUKTsKLQotCWZvciAoaSA9IDA7IGkgPCAxMDAwOyBpKyspIHsKLQkJdG1wID0gdHIzMihHUkNfRUVQUk9NX0FERFIpOwotCi0JCWlmICh0bXAgJiBFRVBST01fQUREUl9DT01QTEVURSkKLQkJCWJyZWFrOwotCQltc2xlZXAoMSk7Ci0JfQotCWlmICghKHRtcCAmIEVFUFJPTV9BRERSX0NPTVBMRVRFKSkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCSp2YWwgPSB0cjMyKEdSQ19FRVBST01fREFUQSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLSNkZWZpbmUgTlZSQU1fQ01EX1RJTUVPVVQgMTAwMDAKLQotc3RhdGljIGludCB0ZzNfbnZyYW1fZXhlY19jbWQoc3RydWN0IHRnMyAqdHAsIHUzMiBudnJhbV9jbWQpCi17Ci0JaW50IGk7Ci0KLQl0dzMyKE5WUkFNX0NNRCwgbnZyYW1fY21kKTsKLQlmb3IgKGkgPSAwOyBpIDwgTlZSQU1fQ01EX1RJTUVPVVQ7IGkrKykgewotCQl1ZGVsYXkoMTApOwotCQlpZiAodHIzMihOVlJBTV9DTUQpICYgTlZSQU1fQ01EX0RPTkUpIHsKLQkJCXVkZWxheSgxMCk7Ci0JCQlicmVhazsKLQkJfQotCX0KLQlpZiAoaSA9PSBOVlJBTV9DTURfVElNRU9VVCkgewotCQlyZXR1cm4gLUVCVVNZOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHUzMiB0ZzNfbnZyYW1fcGh5c19hZGRyKHN0cnVjdCB0ZzMgKnRwLCB1MzIgYWRkcikKLXsKLQlpZiAoKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19OVlJBTSkgJiYKLQkgICAgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19OVlJBTV9CVUZGRVJFRCkgJiYKLQkgICAgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfRkxBU0gpICYmCi0JICAgISh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX05PX05WUkFNX0FERFJfVFJBTlMpICYmCi0JICAgICh0cC0+bnZyYW1famVkZWNudW0gPT0gSkVERUNfQVRNRUwpKQotCi0JCWFkZHIgPSAoKGFkZHIgLyB0cC0+bnZyYW1fcGFnZXNpemUpIDw8Ci0JCQlBVE1FTF9BVDQ1REIwWDFCX1BBR0VfUE9TKSArCi0JCSAgICAgICAoYWRkciAlIHRwLT5udnJhbV9wYWdlc2l6ZSk7Ci0KLQlyZXR1cm4gYWRkcjsKLX0KLQotc3RhdGljIHUzMiB0ZzNfbnZyYW1fbG9naWNhbF9hZGRyKHN0cnVjdCB0ZzMgKnRwLCB1MzIgYWRkcikKLXsKLQlpZiAoKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19OVlJBTSkgJiYKLQkgICAgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19OVlJBTV9CVUZGRVJFRCkgJiYKLQkgICAgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfRkxBU0gpICYmCi0JICAgISh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX05PX05WUkFNX0FERFJfVFJBTlMpICYmCi0JICAgICh0cC0+bnZyYW1famVkZWNudW0gPT0gSkVERUNfQVRNRUwpKQotCi0JCWFkZHIgPSAoKGFkZHIgPj4gQVRNRUxfQVQ0NURCMFgxQl9QQUdFX1BPUykgKgotCQkJdHAtPm52cmFtX3BhZ2VzaXplKSArCi0JCSAgICAgICAoYWRkciAmICgoMSA8PCBBVE1FTF9BVDQ1REIwWDFCX1BBR0VfUE9TKSAtIDEpKTsKLQotCXJldHVybiBhZGRyOwotfQotCi1zdGF0aWMgaW50IHRnM19udnJhbV9yZWFkKHN0cnVjdCB0ZzMgKnRwLCB1MzIgb2Zmc2V0LCB1MzIgKnZhbCkKLXsKLQlpbnQgcmV0OwotCi0JaWYgKCEodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX05WUkFNKSkKLQkJcmV0dXJuIHRnM19udnJhbV9yZWFkX3VzaW5nX2VlcHJvbSh0cCwgb2Zmc2V0LCB2YWwpOwotCi0Jb2Zmc2V0ID0gdGczX252cmFtX3BoeXNfYWRkcih0cCwgb2Zmc2V0KTsKLQotCWlmIChvZmZzZXQgPiBOVlJBTV9BRERSX01TSykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXQgPSB0ZzNfbnZyYW1fbG9jayh0cCk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCXRnM19lbmFibGVfbnZyYW1fYWNjZXNzKHRwKTsKLQotCXR3MzIoTlZSQU1fQUREUiwgb2Zmc2V0KTsKLQlyZXQgPSB0ZzNfbnZyYW1fZXhlY19jbWQodHAsIE5WUkFNX0NNRF9SRCB8IE5WUkFNX0NNRF9HTyB8Ci0JCU5WUkFNX0NNRF9GSVJTVCB8IE5WUkFNX0NNRF9MQVNUIHwgTlZSQU1fQ01EX0RPTkUpOwotCi0JaWYgKHJldCA9PSAwKQotCQkqdmFsID0gc3dhYjMyKHRyMzIoTlZSQU1fUkREQVRBKSk7Ci0KLQl0ZzNfZGlzYWJsZV9udnJhbV9hY2Nlc3ModHApOwotCi0JdGczX252cmFtX3VubG9jayh0cCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IHRnM19udnJhbV9yZWFkX2xlKHN0cnVjdCB0ZzMgKnRwLCB1MzIgb2Zmc2V0LCBfX2xlMzIgKnZhbCkKLXsKLQl1MzIgdjsKLQlpbnQgcmVzID0gdGczX252cmFtX3JlYWQodHAsIG9mZnNldCwgJnYpOwotCWlmICghcmVzKQotCQkqdmFsID0gY3B1X3RvX2xlMzIodik7Ci0JcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIGludCB0ZzNfbnZyYW1fcmVhZF9zd2FiKHN0cnVjdCB0ZzMgKnRwLCB1MzIgb2Zmc2V0LCB1MzIgKnZhbCkKLXsKLQlpbnQgZXJyOwotCXUzMiB0bXA7Ci0KLQllcnIgPSB0ZzNfbnZyYW1fcmVhZCh0cCwgb2Zmc2V0LCAmdG1wKTsKLQkqdmFsID0gc3dhYjMyKHRtcCk7Ci0JcmV0dXJuIGVycjsKLX0KLQogc3RhdGljIGludCB0ZzNfbnZyYW1fd3JpdGVfYmxvY2tfdXNpbmdfZWVwcm9tKHN0cnVjdCB0ZzMgKnRwLAogCQkJCSAgICB1MzIgb2Zmc2V0LCB1MzIgbGVuLCB1OCAqYnVmKQogewpAQCAtMTA2MTEsMTMgKzEwNjU3LDEzIEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpICs9IDQpIHsKIAkJdTMyIGFkZHI7Ci0JCV9fbGUzMiBkYXRhOworCQlfX2JlMzIgZGF0YTsKIAogCQlhZGRyID0gb2Zmc2V0ICsgaTsKIAogCQltZW1jcHkoJmRhdGEsIGJ1ZiArIGksIDQpOwogCi0JCXR3MzIoR1JDX0VFUFJPTV9EQVRBLCBsZTMyX3RvX2NwdShkYXRhKSk7CisJCXR3MzIoR1JDX0VFUFJPTV9EQVRBLCBiZTMyX3RvX2NwdShkYXRhKSk7CiAKIAkJdmFsID0gdHIzMihHUkNfRUVQUk9NX0FERFIpOwogCQl0dzMyKEdSQ19FRVBST01fQUREUiwgdmFsIHwgRUVQUk9NX0FERFJfQ09NUExFVEUpOwpAQCAtMTA2NjcsOCArMTA3MTMsOSBAQAogCQlwaHlfYWRkciA9IG9mZnNldCAmIH5wYWdlbWFzazsKIAogCQlmb3IgKGogPSAwOyBqIDwgcGFnZXNpemU7IGogKz0gNCkgewotCQkJaWYgKChyZXQgPSB0ZzNfbnZyYW1fcmVhZF9sZSh0cCwgcGh5X2FkZHIgKyBqLAotCQkJCQkJKF9fbGUzMiAqKSAodG1wICsgaikpKSkKKwkJCXJldCA9IHRnM19udnJhbV9yZWFkX2JlMzIodHAsIHBoeV9hZGRyICsgaiwKKwkJCQkJCSAgKF9fYmUzMiAqKSAodG1wICsgaikpOworCQkJaWYgKHJldCkKIAkJCQlicmVhazsKIAkJfQogCQlpZiAocmV0KQpAQCAtMTA3MTUsNyArMTA3NjIsNyBAQAogCQkJX19iZTMyIGRhdGE7CiAKIAkJCWRhdGEgPSAqKChfX2JlMzIgKikgKHRtcCArIGopKTsKLQkJCS8qIHN3YWIzMihsZTMyX3RvX2NwdShkYXRhKSksIGFjdHVhbGx5ICovCisKIAkJCXR3MzIoTlZSQU1fV1JEQVRBLCBiZTMyX3RvX2NwdShkYXRhKSk7CiAKIAkJCXR3MzIoTlZSQU1fQUREUiwgcGh5X2FkZHIgKyBqKTsKQEAgLTExMzAxLDI0ICsxMTM0OCwyNSBAQAogCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgdGczX3JlYWRfcGFydG5vKHN0cnVjdCB0ZzMgKnRwKQogewotCXVuc2lnbmVkIGNoYXIgdnBkX2RhdGFbMjU2XTsKKwl1bnNpZ25lZCBjaGFyIHZwZF9kYXRhWzI1Nl07ICAgLyogaW4gbGl0dGxlLWVuZGlhbiBmb3JtYXQgKi8KIAl1bnNpZ25lZCBpbnQgaTsKIAl1MzIgbWFnaWM7CiAKLQlpZiAodGczX252cmFtX3JlYWRfc3dhYih0cCwgMHgwLCAmbWFnaWMpKQorCWlmICh0ZzNfbnZyYW1fcmVhZCh0cCwgMHgwLCAmbWFnaWMpKQogCQlnb3RvIG91dF9ub3RfZm91bmQ7CiAKIAlpZiAobWFnaWMgPT0gVEczX0VFUFJPTV9NQUdJQykgewogCQlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpICs9IDQpIHsKIAkJCXUzMiB0bXA7CiAKLQkJCWlmICh0ZzNfbnZyYW1fcmVhZCh0cCwgMHgxMDAgKyBpLCAmdG1wKSkKKwkJCS8qIFRoZSBkYXRhIGlzIGluIGxpdHRsZS1lbmRpYW4gZm9ybWF0IGluIE5WUkFNLgorCQkJICogVXNlIHRoZSBiaWctZW5kaWFuIHJlYWQgcm91dGluZXMgdG8gcHJlc2VydmUKKwkJCSAqIHRoZSBieXRlIG9yZGVyIGFzIGl0IGV4aXN0cyBpbiBOVlJBTS4KKwkJCSAqLworCQkJaWYgKHRnM19udnJhbV9yZWFkX2JlMzIodHAsIDB4MTAwICsgaSwgJnRtcCkpCiAJCQkJZ290byBvdXRfbm90X2ZvdW5kOwogCi0JCQl2cGRfZGF0YVtpICsgMF0gPSAoKHRtcCA+PiAgMCkgJiAweGZmKTsKLQkJCXZwZF9kYXRhW2kgKyAxXSA9ICgodG1wID4+ICA4KSAmIDB4ZmYpOwotCQkJdnBkX2RhdGFbaSArIDJdID0gKCh0bXAgPj4gMTYpICYgMHhmZik7Ci0JCQl2cGRfZGF0YVtpICsgM10gPSAoKHRtcCA+PiAyNCkgJiAweGZmKTsKKwkJCW1lbWNweSgmdnBkX2RhdGFbaV0sICZ0bXAsIHNpemVvZih0bXApKTsKIAkJfQogCX0gZWxzZSB7CiAJCWludCB2cGRfY2FwOwpAQCAtMTEzNDQsNyArMTEzOTIsNyBAQAogCQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHRwLT5wZGV2LCB2cGRfY2FwICsgUENJX1ZQRF9EQVRBLAogCQkJCQkgICAgICAmdG1wKTsKIAkJCXYgPSBjcHVfdG9fbGUzMih0bXApOwotCQkJbWVtY3B5KCZ2cGRfZGF0YVtpXSwgJnYsIDQpOworCQkJbWVtY3B5KCZ2cGRfZGF0YVtpXSwgJnYsIHNpemVvZih2KSk7CiAJCX0KIAl9CiAKQEAgLTExNDA0LDE1ICsxMTQ1Miw3OSBAQAogewogCXUzMiB2YWw7CiAKLQlpZiAodGczX252cmFtX3JlYWRfc3dhYih0cCwgb2Zmc2V0LCAmdmFsKSB8fAorCWlmICh0ZzNfbnZyYW1fcmVhZCh0cCwgb2Zmc2V0LCAmdmFsKSB8fAogCSAgICAodmFsICYgMHhmYzAwMDAwMCkgIT0gMHgwYzAwMDAwMCB8fAotCSAgICB0ZzNfbnZyYW1fcmVhZF9zd2FiKHRwLCBvZmZzZXQgKyA0LCAmdmFsKSB8fAorCSAgICB0ZzNfbnZyYW1fcmVhZCh0cCwgb2Zmc2V0ICsgNCwgJnZhbCkgfHwKIAkgICAgdmFsICE9IDApCiAJCXJldHVybiAwOwogCiAJcmV0dXJuIDE7CiB9CiAKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCB0ZzNfcmVhZF9iY192ZXIoc3RydWN0IHRnMyAqdHApCit7CisJdTMyIHZhbCwgb2Zmc2V0LCBzdGFydCwgdmVyX29mZnNldDsKKwlpbnQgaTsKKwlib29sIG5ld3ZlciA9IGZhbHNlOworCisJaWYgKHRnM19udnJhbV9yZWFkKHRwLCAweGMsICZvZmZzZXQpIHx8CisJICAgIHRnM19udnJhbV9yZWFkKHRwLCAweDQsICZzdGFydCkpCisJCXJldHVybjsKKworCW9mZnNldCA9IHRnM19udnJhbV9sb2dpY2FsX2FkZHIodHAsIG9mZnNldCk7CisKKwlpZiAodGczX252cmFtX3JlYWQodHAsIG9mZnNldCwgJnZhbCkpCisJCXJldHVybjsKKworCWlmICgodmFsICYgMHhmYzAwMDAwMCkgPT0gMHgwYzAwMDAwMCkgeworCQlpZiAodGczX252cmFtX3JlYWQodHAsIG9mZnNldCArIDQsICZ2YWwpKQorCQkJcmV0dXJuOworCisJCWlmICh2YWwgPT0gMCkKKwkJCW5ld3ZlciA9IHRydWU7CisJfQorCisJaWYgKG5ld3ZlcikgeworCQlpZiAodGczX252cmFtX3JlYWQodHAsIG9mZnNldCArIDgsICZ2ZXJfb2Zmc2V0KSkKKwkJCXJldHVybjsKKworCQlvZmZzZXQgPSBvZmZzZXQgKyB2ZXJfb2Zmc2V0IC0gc3RhcnQ7CisJCWZvciAoaSA9IDA7IGkgPCAxNjsgaSArPSA0KSB7CisJCQlfX2JlMzIgdjsKKwkJCWlmICh0ZzNfbnZyYW1fcmVhZF9iZTMyKHRwLCBvZmZzZXQgKyBpLCAmdikpCisJCQkJcmV0dXJuOworCisJCQltZW1jcHkodHAtPmZ3X3ZlciArIGksICZ2LCBzaXplb2YodikpOworCQl9CisJfSBlbHNlIHsKKwkJdTMyIG1ham9yLCBtaW5vcjsKKworCQlpZiAodGczX252cmFtX3JlYWQodHAsIFRHM19OVk1fUFRSRVZfQkNWRVIsICZ2ZXJfb2Zmc2V0KSkKKwkJCXJldHVybjsKKworCQltYWpvciA9ICh2ZXJfb2Zmc2V0ICYgVEczX05WTV9CQ1ZFUl9NQUpNU0spID4+CisJCQlURzNfTlZNX0JDVkVSX01BSlNGVDsKKwkJbWlub3IgPSB2ZXJfb2Zmc2V0ICYgVEczX05WTV9CQ1ZFUl9NSU5NU0s7CisJCXNucHJpbnRmKCZ0cC0+ZndfdmVyWzBdLCAzMiwgInYlZC4lMDJkIiwgbWFqb3IsIG1pbm9yKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCB0ZzNfcmVhZF9od3NiX3ZlcihzdHJ1Y3QgdGczICp0cCkKK3sKKwl1MzIgdmFsLCBtYWpvciwgbWlub3I7CisKKwkvKiBVc2UgbmF0aXZlIGVuZGlhbiByZXByZXNlbnRhdGlvbiAqLworCWlmICh0ZzNfbnZyYW1fcmVhZCh0cCwgVEczX05WTV9IV1NCX0NGRzEsICZ2YWwpKQorCQlyZXR1cm47CisKKwltYWpvciA9ICh2YWwgJiBURzNfTlZNX0hXU0JfQ0ZHMV9NQUpNU0spID4+CisJCVRHM19OVk1fSFdTQl9DRkcxX01BSlNGVDsKKwltaW5vciA9ICh2YWwgJiBURzNfTlZNX0hXU0JfQ0ZHMV9NSU5NU0spID4+CisJCVRHM19OVk1fSFdTQl9DRkcxX01JTlNGVDsKKworCXNucHJpbnRmKCZ0cC0+ZndfdmVyWzBdLCAzMiwgInNiIHYlZC4lMDJkIiwgbWFqb3IsIG1pbm9yKTsKK30KKwogc3RhdGljIHZvaWQgX19kZXZpbml0IHRnM19yZWFkX3NiX3ZlcihzdHJ1Y3QgdGczICp0cCwgdTMyIHZhbCkKIHsKIAl1MzIgb2Zmc2V0LCBtYWpvciwgbWlub3IsIGJ1aWxkOwpAQCAtMTE0MzgsNyArMTE1NTAsNyBAQAogCQlyZXR1cm47CiAJfQogCi0JaWYgKHRnM19udnJhbV9yZWFkX3N3YWIodHAsIG9mZnNldCwgJnZhbCkpCisJaWYgKHRnM19udnJhbV9yZWFkKHRwLCBvZmZzZXQsICZ2YWwpKQogCQlyZXR1cm47CiAKIAlidWlsZCA9ICh2YWwgJiBURzNfRUVQUk9NX1NCX0VESF9CTERfTUFTSykgPj4KQEAgLTExNDU4LDQ5ICsxMTU3MCwxNSBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgX19kZXZpbml0IHRnM19yZWFkX2Z3X3ZlcihzdHJ1Y3QgdGczICp0cCkKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCB0ZzNfcmVhZF9tZ210ZndfdmVyKHN0cnVjdCB0ZzMgKnRwKQogewogCXUzMiB2YWwsIG9mZnNldCwgc3RhcnQ7Ci0JdTMyIHZlcl9vZmZzZXQ7Ci0JaW50IGksIGJjbnQ7Ci0KLQlpZiAodGczX252cmFtX3JlYWRfc3dhYih0cCwgMCwgJnZhbCkpCi0JCXJldHVybjsKLQotCWlmICh2YWwgIT0gVEczX0VFUFJPTV9NQUdJQykgewotCQlpZiAoKHZhbCAmIFRHM19FRVBST01fTUFHSUNfRldfTVNLKSA9PSBURzNfRUVQUk9NX01BR0lDX0ZXKQotCQkJdGczX3JlYWRfc2JfdmVyKHRwLCB2YWwpOwotCi0JCXJldHVybjsKLQl9Ci0KLQlpZiAodGczX252cmFtX3JlYWRfc3dhYih0cCwgMHhjLCAmb2Zmc2V0KSB8fAotCSAgICB0ZzNfbnZyYW1fcmVhZF9zd2FiKHRwLCAweDQsICZzdGFydCkpCi0JCXJldHVybjsKLQotCW9mZnNldCA9IHRnM19udnJhbV9sb2dpY2FsX2FkZHIodHAsIG9mZnNldCk7Ci0KLQlpZiAoIXRnM19md19pbWdfaXNfdmFsaWQodHAsIG9mZnNldCkgfHwKLQkgICAgdGczX252cmFtX3JlYWRfc3dhYih0cCwgb2Zmc2V0ICsgOCwgJnZlcl9vZmZzZXQpKQotCQlyZXR1cm47Ci0KLQlvZmZzZXQgPSBvZmZzZXQgKyB2ZXJfb2Zmc2V0IC0gc3RhcnQ7Ci0JZm9yIChpID0gMDsgaSA8IDE2OyBpICs9IDQpIHsKLQkJX19sZTMyIHY7Ci0JCWlmICh0ZzNfbnZyYW1fcmVhZF9sZSh0cCwgb2Zmc2V0ICsgaSwgJnYpKQotCQkJcmV0dXJuOwotCi0JCW1lbWNweSh0cC0+ZndfdmVyICsgaSwgJnYsIDQpOwotCX0KLQotCWlmICghKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19FTkFCTEVfQVNGKSB8fAotCSAgICAgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfRU5BQkxFX0FQRSkpCi0JCXJldHVybjsKKwlpbnQgaSwgdmxlbjsKIAogCWZvciAob2Zmc2V0ID0gVEczX05WTV9ESVJfU1RBUlQ7CiAJICAgICBvZmZzZXQgPCBURzNfTlZNX0RJUl9FTkQ7CiAJICAgICBvZmZzZXQgKz0gVEczX05WTV9ESVJFTlRfU0laRSkgewotCQlpZiAodGczX252cmFtX3JlYWRfc3dhYih0cCwgb2Zmc2V0LCAmdmFsKSkKKwkJaWYgKHRnM19udnJhbV9yZWFkKHRwLCBvZmZzZXQsICZ2YWwpKQogCQkJcmV0dXJuOwogCiAJCWlmICgodmFsID4+IFRHM19OVk1fRElSVFlQRV9TSElGVCkgPT0gVEczX05WTV9ESVJUWVBFX0FTRklOSSkKQEAgLTExNTEyLDM2ICsxMTU5MCw4NyBAQAogCiAJaWYgKCEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzA1X1BMVVMpKQogCQlzdGFydCA9IDB4MDgwMDAwMDA7Ci0JZWxzZSBpZiAodGczX252cmFtX3JlYWRfc3dhYih0cCwgb2Zmc2V0IC0gNCwgJnN0YXJ0KSkKKwllbHNlIGlmICh0ZzNfbnZyYW1fcmVhZCh0cCwgb2Zmc2V0IC0gNCwgJnN0YXJ0KSkKIAkJcmV0dXJuOwogCi0JaWYgKHRnM19udnJhbV9yZWFkX3N3YWIodHAsIG9mZnNldCArIDQsICZvZmZzZXQpIHx8CisJaWYgKHRnM19udnJhbV9yZWFkKHRwLCBvZmZzZXQgKyA0LCAmb2Zmc2V0KSB8fAogCSAgICAhdGczX2Z3X2ltZ19pc192YWxpZCh0cCwgb2Zmc2V0KSB8fAotCSAgICB0ZzNfbnZyYW1fcmVhZF9zd2FiKHRwLCBvZmZzZXQgKyA4LCAmdmFsKSkKKwkgICAgdGczX252cmFtX3JlYWQodHAsIG9mZnNldCArIDgsICZ2YWwpKQogCQlyZXR1cm47CiAKIAlvZmZzZXQgKz0gdmFsIC0gc3RhcnQ7CiAKLQliY250ID0gc3RybGVuKHRwLT5md192ZXIpOworCXZsZW4gPSBzdHJsZW4odHAtPmZ3X3Zlcik7CiAKLQl0cC0+ZndfdmVyW2JjbnQrK10gPSAnLCc7Ci0JdHAtPmZ3X3ZlcltiY250KytdID0gJyAnOworCXRwLT5md192ZXJbdmxlbisrXSA9ICcsJzsKKwl0cC0+ZndfdmVyW3ZsZW4rK10gPSAnICc7CiAKIAlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0JCV9fbGUzMiB2OwotCQlpZiAodGczX252cmFtX3JlYWRfbGUodHAsIG9mZnNldCwgJnYpKQorCQlfX2JlMzIgdjsKKwkJaWYgKHRnM19udnJhbV9yZWFkX2JlMzIodHAsIG9mZnNldCwgJnYpKQogCQkJcmV0dXJuOwogCiAJCW9mZnNldCArPSBzaXplb2Yodik7CiAKLQkJaWYgKGJjbnQgPiBURzNfVkVSX1NJWkUgLSBzaXplb2YodikpIHsKLQkJCW1lbWNweSgmdHAtPmZ3X3ZlcltiY250XSwgJnYsIFRHM19WRVJfU0laRSAtIGJjbnQpOworCQlpZiAodmxlbiA+IFRHM19WRVJfU0laRSAtIHNpemVvZih2KSkgeworCQkJbWVtY3B5KCZ0cC0+ZndfdmVyW3ZsZW5dLCAmdiwgVEczX1ZFUl9TSVpFIC0gdmxlbik7CiAJCQlicmVhazsKIAkJfQogCi0JCW1lbWNweSgmdHAtPmZ3X3ZlcltiY250XSwgJnYsIHNpemVvZih2KSk7Ci0JCWJjbnQgKz0gc2l6ZW9mKHYpOworCQltZW1jcHkoJnRwLT5md192ZXJbdmxlbl0sICZ2LCBzaXplb2YodikpOworCQl2bGVuICs9IHNpemVvZih2KTsKIAl9Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCB0ZzNfcmVhZF9kYXNoX3ZlcihzdHJ1Y3QgdGczICp0cCkKK3sKKwlpbnQgdmxlbjsKKwl1MzIgYXBlZGF0YTsKKworCWlmICghKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfRU5BQkxFX0FQRSkgfHwKKwkgICAgISh0cC0+dGczX2ZsYWdzICAmIFRHM19GTEFHX0VOQUJMRV9BU0YpKQorCQlyZXR1cm47CisKKwlhcGVkYXRhID0gdGczX2FwZV9yZWFkMzIodHAsIFRHM19BUEVfU0VHX1NJRyk7CisJaWYgKGFwZWRhdGEgIT0gQVBFX1NFR19TSUdfTUFHSUMpCisJCXJldHVybjsKKworCWFwZWRhdGEgPSB0ZzNfYXBlX3JlYWQzMih0cCwgVEczX0FQRV9GV19TVEFUVVMpOworCWlmICghKGFwZWRhdGEgJiBBUEVfRldfU1RBVFVTX1JFQURZKSkKKwkJcmV0dXJuOworCisJYXBlZGF0YSA9IHRnM19hcGVfcmVhZDMyKHRwLCBURzNfQVBFX0ZXX1ZFUlNJT04pOworCisJdmxlbiA9IHN0cmxlbih0cC0+ZndfdmVyKTsKKworCXNucHJpbnRmKCZ0cC0+ZndfdmVyW3ZsZW5dLCBURzNfVkVSX1NJWkUgLSB2bGVuLCAiIERBU0ggdiVkLiVkLiVkLiVkIiwKKwkJIChhcGVkYXRhICYgQVBFX0ZXX1ZFUlNJT05fTUFKTVNLKSA+PiBBUEVfRldfVkVSU0lPTl9NQUpTRlQsCisJCSAoYXBlZGF0YSAmIEFQRV9GV19WRVJTSU9OX01JTk1TSykgPj4gQVBFX0ZXX1ZFUlNJT05fTUlOU0ZULAorCQkgKGFwZWRhdGEgJiBBUEVfRldfVkVSU0lPTl9SRVZNU0spID4+IEFQRV9GV19WRVJTSU9OX1JFVlNGVCwKKwkJIChhcGVkYXRhICYgQVBFX0ZXX1ZFUlNJT05fQkxETVNLKSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCB0ZzNfcmVhZF9md192ZXIoc3RydWN0IHRnMyAqdHApCit7CisJdTMyIHZhbDsKKworCWlmICh0ZzNfbnZyYW1fcmVhZCh0cCwgMCwgJnZhbCkpCisJCXJldHVybjsKKworCWlmICh2YWwgPT0gVEczX0VFUFJPTV9NQUdJQykKKwkJdGczX3JlYWRfYmNfdmVyKHRwKTsKKwllbHNlIGlmICgodmFsICYgVEczX0VFUFJPTV9NQUdJQ19GV19NU0spID09IFRHM19FRVBST01fTUFHSUNfRlcpCisJCXRnM19yZWFkX3NiX3Zlcih0cCwgdmFsKTsKKwllbHNlIGlmICgodmFsICYgVEczX0VFUFJPTV9NQUdJQ19IV19NU0spID09IFRHM19FRVBST01fTUFHSUNfSFcpCisJCXRnM19yZWFkX2h3c2JfdmVyKHRwKTsKKwllbHNlCisJCXJldHVybjsKKworCWlmICghKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19FTkFCTEVfQVNGKSB8fAorCSAgICAgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfRU5BQkxFX0FQRSkpCisJCXJldHVybjsKKworCXRnM19yZWFkX21nbXRmd192ZXIodHApOwogCiAJdHAtPmZ3X3ZlcltURzNfVkVSX1NJWkUgLSAxXSA9IDA7CiB9CkBAIC0xMjMxMiwxNCArMTI0NDEsMTAgQEAKIAl9CiAJaWYgKCFhZGRyX29rKSB7CiAJCS8qIE5leHQsIHRyeSBOVlJBTS4gKi8KLQkJaWYgKCF0ZzNfbnZyYW1fcmVhZCh0cCwgbWFjX29mZnNldCArIDAsICZoaSkgJiYKLQkJICAgICF0ZzNfbnZyYW1fcmVhZCh0cCwgbWFjX29mZnNldCArIDQsICZsbykpIHsKLQkJCWRldi0+ZGV2X2FkZHJbMF0gPSAoKGhpID4+IDE2KSAmIDB4ZmYpOwotCQkJZGV2LT5kZXZfYWRkclsxXSA9ICgoaGkgPj4gMjQpICYgMHhmZik7Ci0JCQlkZXYtPmRldl9hZGRyWzJdID0gKChsbyA+PiAgMCkgJiAweGZmKTsKLQkJCWRldi0+ZGV2X2FkZHJbM10gPSAoKGxvID4+ICA4KSAmIDB4ZmYpOwotCQkJZGV2LT5kZXZfYWRkcls0XSA9ICgobG8gPj4gMTYpICYgMHhmZik7Ci0JCQlkZXYtPmRldl9hZGRyWzVdID0gKChsbyA+PiAyNCkgJiAweGZmKTsKKwkJaWYgKCF0ZzNfbnZyYW1fcmVhZF9iZTMyKHRwLCBtYWNfb2Zmc2V0ICsgMCwgJmhpKSAmJgorCQkgICAgIXRnM19udnJhbV9yZWFkX2JlMzIodHAsIG1hY19vZmZzZXQgKyA0LCAmbG8pKSB7CisJCQltZW1jcHkoJmRldi0+ZGV2X2FkZHJbMF0sICgoY2hhciAqKSZoaSkgKyAyLCAyKTsKKwkJCW1lbWNweSgmZGV2LT5kZXZfYWRkclsyXSwgKGNoYXIgKikmbG8sIHNpemVvZihsbykpOwogCQl9CiAJCS8qIEZpbmFsbHkganVzdCBmZXRjaCBpdCBvdXQgb2YgdGhlIE1BQyBjb250cm9sIHJlZ3MuICovCiAJCWVsc2UgewpAQCAtMTMyMDAsNiArMTMzMjUsOSBAQAogCQl9CiAKIAkJdGczX2FwZV9sb2NrX2luaXQodHApOworCisJCWlmICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfRU5BQkxFX0FTRikKKwkJCXRnM19yZWFkX2Rhc2hfdmVyKHRwKTsKIAl9CiAKIAkvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdGczLmggYi9kcml2ZXJzL25ldC90ZzMuaAppbmRleCA1MDhkZWYzLi5jYjRjNjJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90ZzMuaAorKysgYi9kcml2ZXJzL25ldC90ZzMuaApAQCAtMTcxOSw2ICsxNzE5LDEyIEBACiAKICNkZWZpbmUgVEczX09UUF9ERUZBVUxUCQkJMHgyODZjMTY0MAogCisvKiBIYXJkd2FyZSBTZWxmYm9vdCBOVlJBTSBsYXlvdXQgKi8KKyNkZWZpbmUgVEczX05WTV9IV1NCX0NGRzEJCTB4MDAwMDAwMDQKKyNkZWZpbmUgIFRHM19OVk1fSFdTQl9DRkcxX01BSk1TSwkweGY4MDAwMDAwCisjZGVmaW5lICBURzNfTlZNX0hXU0JfQ0ZHMV9NQUpTRlQJMjcKKyNkZWZpbmUgIFRHM19OVk1fSFdTQl9DRkcxX01JTk1TSwkweDA3YzAwMDAwCisjZGVmaW5lICBURzNfTlZNX0hXU0JfQ0ZHMV9NSU5TRlQJMjIKIAogI2RlZmluZSBURzNfRUVQUk9NX01BR0lDCQkweDY2OTk1NWFhCiAjZGVmaW5lIFRHM19FRVBST01fTUFHSUNfRlcJCTB4YTUwMDAwMDAKQEAgLTE3MzcsNiArMTc0MywxMCBAQAogI2RlZmluZSBURzNfTlZNX0RJUkVOVF9TSVpFCQkweGMKICNkZWZpbmUgVEczX05WTV9ESVJUWVBFX1NISUZUCQkyNAogI2RlZmluZSBURzNfTlZNX0RJUlRZUEVfQVNGSU5JCQkxCisjZGVmaW5lIFRHM19OVk1fUFRSRVZfQkNWRVIJCTB4OTQKKyNkZWZpbmUgVEczX05WTV9CQ1ZFUl9NQUpNU0sJCTB4MDAwMGZmMDAKKyNkZWZpbmUgVEczX05WTV9CQ1ZFUl9NQUpTRlQJCTgKKyNkZWZpbmUgVEczX05WTV9CQ1ZFUl9NSU5NU0sJCTB4MDAwMDAwZmYKIAogI2RlZmluZSBURzNfRUVQUk9NX1NCX0YxUjBfRURIX09GRgkweDEwCiAjZGVmaW5lIFRHM19FRVBST01fU0JfRjFSMl9FREhfT0ZGCTB4MTQKQEAgLTE5NjcsNiArMTk3NywxNCBAQAogLyogQVBFIHNoYXJlZCBtZW1vcnkuICBBY2Nlc3NpYmxlIHRocm91Z2ggQkFSMSAqLwogI2RlZmluZSBURzNfQVBFX0ZXX1NUQVRVUwkJMHg0MDBjCiAjZGVmaW5lICBBUEVfRldfU1RBVFVTX1JFQURZCQkgMHgwMDAwMDEwMAorI2RlZmluZSBURzNfQVBFX0ZXX1ZFUlNJT04JCTB4NDAxOAorI2RlZmluZSAgQVBFX0ZXX1ZFUlNJT05fTUFKTVNLCQkgMHhmZjAwMDAwMAorI2RlZmluZSAgQVBFX0ZXX1ZFUlNJT05fTUFKU0ZUCQkgMjQKKyNkZWZpbmUgIEFQRV9GV19WRVJTSU9OX01JTk1TSwkJIDB4MDBmZjAwMDAKKyNkZWZpbmUgIEFQRV9GV19WRVJTSU9OX01JTlNGVAkJIDE2CisjZGVmaW5lICBBUEVfRldfVkVSU0lPTl9SRVZNU0sJCSAweDAwMDBmZjAwCisjZGVmaW5lICBBUEVfRldfVkVSU0lPTl9SRVZTRlQJCSA4CisjZGVmaW5lICBBUEVfRldfVkVSU0lPTl9CTERNU0sJCSAweDAwMDAwMGZmCiAjZGVmaW5lIFRHM19BUEVfSE9TVF9TRUdfU0lHCQkweDQyMDAKICNkZWZpbmUgIEFQRV9IT1NUX1NFR19TSUdfTUFHSUMJCSAweDQ4NGY1MzU0CiAjZGVmaW5lIFRHM19BUEVfSE9TVF9TRUdfTEVOCQkweDQyMDQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy8zYzM1OS5jIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nLzNjMzU5LmMKaW5kZXggNDM4NTNlMy4uNGE2NWZjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nLzNjMzU5LmMKKysrIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nLzNjMzU5LmMKQEAgLTI3NCw2ICsyNzQsMTUgQEAKIAkKIAlyZXR1cm4gOyAKIH0KKworc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB4bF9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSB4bF9vcGVuLAorCS5uZG9fc3RvcAkJPSB4bF9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJCT0geGxfeG1pdCwKKwkubmRvX2NoYW5nZV9tdHUJCT0geGxfY2hhbmdlX210dSwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IHhsX3NldF9yeF9tb2RlLAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0geGxfc2V0X21hY19hZGRyZXNzLAorfTsKICAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHhsX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCQkJICAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkgCkBAIC0zMzcsMTMgKzM0Niw3IEBACiAJCXJldHVybiBpIDsgCiAJfQkJCQkKIAotCWRldi0+b3Blbj0meGxfb3BlbjsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdD0meGxfeG1pdDsKLQlkZXYtPmNoYW5nZV9tdHU9JnhsX2NoYW5nZV9tdHU7Ci0JZGV2LT5zdG9wPSZ4bF9jbG9zZTsKLQlkZXYtPmRvX2lvY3RsPU5VTEw7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3Q9JnhsX3NldF9yeF9tb2RlOwotCWRldi0+c2V0X21hY19hZGRyZXNzPSZ4bF9zZXRfbWFjX2FkZHJlc3MgOyAKKwlkZXYtPm5ldGRldl9vcHMgPSAmeGxfbmV0ZGV2X29wczsKIAlTRVRfTkVUREVWX0RFVihkZXYsICZwZGV2LT5kZXYpOwogCiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsZGV2KSA7IApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2FieXNzLmMgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvYWJ5c3MuYwppbmRleCBiNTY2ZDZkLi5iOWRiMWI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvYWJ5c3MuYworKysgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvYWJ5c3MuYwpAQCAtOTIsNiArOTIsOCBAQAogCW91dHcodmFsLCBkZXYtPmJhc2VfYWRkciArIHJlZyk7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYWJ5c3NfbmV0ZGV2X29wczsKKwogc3RhdGljIGludCBfX2RldmluaXQgYWJ5c3NfYXR0YWNoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogewkKIAlzdGF0aWMgaW50IHZlcnNpb25wcmludGVkOwpAQCAtMTU3LDggKzE1OSw3IEBACiAKIAltZW1jcHkodHAtPlByb2R1Y3RJRCwgIk1hZGdlIFBDSSAxNi80IE1rMiIsIFBST0RfSURfU0laRSArIDEpOwogCQkKLQlkZXYtPm9wZW4gPSBhYnlzc19vcGVuOwotCWRldi0+c3RvcCA9IGFieXNzX2Nsb3NlOworCWRldi0+bmV0ZGV2X29wcyA9ICZhYnlzc19uZXRkZXZfb3BzOwogCiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGRldik7CiAJU0VUX05FVERFVl9ERVYoZGV2LCAmcGRldi0+ZGV2KTsKQEAgLTQ1MCw2ICs0NTEsMTEgQEAKIAogc3RhdGljIGludCBfX2luaXQgYWJ5c3NfaW5pdCAodm9pZCkKIHsKKwlhYnlzc19uZXRkZXZfb3BzID0gdG1zMzgwdHJfbmV0ZGV2X29wczsKKworCWFieXNzX25ldGRldl9vcHMubmRvX29wZW4gPSBhYnlzc19vcGVuOworCWFieXNzX25ldGRldl9vcHMubmRvX3N0b3AgPSBhYnlzc19jbG9zZTsKKwogCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZhYnlzc19kcml2ZXIpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvaWJtdHIuYyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9pYm10ci5jCmluZGV4IGZhN2JjZTZlMC4uOWQ4OTYxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2libXRyLmMKKysrIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2libXRyLmMKQEAgLTIwMCw3ICsyMDAsNiBAQAogc3RhdGljIHZvaWQJaWJtdHJfcmVzZXRfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QqdG1yLHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQJdG9rX3JlcnVuKHVuc2lnbmVkIGxvbmcgZGV2X2FkZHIpOwogc3RhdGljIHZvaWQJaWJtdHJfcmVhZGxvZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBzdHJ1Y3QgCW5ldF9kZXZpY2Vfc3RhdHMgKnRva19nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50CWlibXRyX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG10dSk7CiBzdGF0aWMgdm9pZAlmaW5kX3R1cmJvX2FkYXB0ZXJzKGludCAqaW9saXN0KTsKIApAQCAtODE2LDE4ICs4MTUsMjEgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHRyZGV2X25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IHRva19vcGVuLAorCS5uZG9fc3RvcAkJPSB0b2tfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IHRva19zZW5kX3BhY2tldCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IHRva19zZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGlibXRyX2NoYW5nZV9tdHUsCit9OworCiBzdGF0aWMgaW50IF9fZGV2aW5pdCB0cmRldl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHRva19pbmZvICp0aSA9IG5ldGRldl9wcml2KGRldik7CiAKIAlTRVRfUEFHRSh0aS0+c3JiX3BhZ2UpOwogICAgICAgICB0aS0+b3Blbl9mYWlsdXJlID0gTk8gICAgOwotCWRldi0+b3BlbiA9IHRva19vcGVuOwotCWRldi0+c3RvcCA9IHRva19jbG9zZTsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IHRva19zZW5kX3BhY2tldDsKLQlkZXYtPmdldF9zdGF0cyA9IHRva19nZXRfc3RhdHM7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSB0b2tfc2V0X211bHRpY2FzdF9saXN0OwotCWRldi0+Y2hhbmdlX210dSA9IGlibXRyX2NoYW5nZV9tdHU7CisJZGV2LT5uZXRkZXZfb3BzID0gJnRyZGV2X25ldGRldl9vcHM7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE0NjAsNyArMTQ2Miw3IEBACiAJCQkJCSIlMDJYXG4iLAogCQkJCQkoaW50KXJldGNvZGUsIChpbnQpcmVhZGIodGktPnNzYiArIDYpKTsKIAkJCWVsc2UKLQkJCQl0aS0+dHJfc3RhdHMudHhfcGFja2V0cysrOworCQkJCWRldi0+c3RhdHMudHhfcGFja2V0cysrOwogCQkJYnJlYWs7CiAJCWNhc2UgWE1JVF9YSURfQ01EOgogCQkJRFBSSU5USygieG1pdCB4aWQgcmV0X2NvZGU6ICUwMlhcbiIsCkBAIC0xNjQ2LDcgKzE2NDgsNyBAQAogCQlicmVhazsKIAl9CiAJd3JpdGViKFJFU1BfSU5fQVNCLCB0aS0+bW1pbyArIEFDQV9PRkZTRVQgKyBBQ0FfU0VUICsgSVNSQV9PREQpOwotCXRpLT50cl9zdGF0cy50eF9ieXRlcyArPSB0aS0+Y3VycmVudF9za2ItPmxlbjsKKwlkZXYtPnN0YXRzLnR4X2J5dGVzICs9IHRpLT5jdXJyZW50X3NrYi0+bGVuOwogCWRldl9rZnJlZV9za2JfaXJxKHRpLT5jdXJyZW50X3NrYik7CiAJdGktPmN1cnJlbnRfc2tiID0gTlVMTDsKIAluZXRpZl93YWtlX3F1ZXVlKGRldik7CkBAIC0xNzIyLDcgKzE3MjQsNyBAQAogCWlmIChyZWFkYihsbGMgKyBvZmZzZXRvZihzdHJ1Y3QgdHJsbGMsIGxsYykpICE9IFVJX0NNRCkgewogCQlTRVRfUEFHRSh0aS0+YXNiX3BhZ2UpOwogCQl3cml0ZWIoREFUQV9MT1NULCB0aS0+YXNiICsgUkVUQ09ERV9PRlNUKTsKLQkJdGktPnRyX3N0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCXdyaXRlYihSRVNQX0lOX0FTQiwgdGktPm1taW8gKyBBQ0FfT0ZGU0VUICsgQUNBX1NFVCArIElTUkFfT0REKTsKIAkJcmV0dXJuOwogCX0KQEAgLTE3NTcsNyArMTc1OSw3IEBACiAKIAlpZiAoIShza2IgPSBkZXZfYWxsb2Nfc2tiKHNrYl9zaXplKSkpIHsKIAkJRFBSSU5USygib3V0IG9mIG1lbW9yeS4gZnJhbWUgZHJvcHBlZC5cbiIpOwotCQl0aS0+dHJfc3RhdHMucnhfZHJvcHBlZCsrOworCQlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAkJU0VUX1BBR0UodGktPmFzYl9wYWdlKTsKIAkJd3JpdGViKERBVEFfTE9TVCwgdGktPmFzYiArIG9mZnNldG9mKHN0cnVjdCBhc2JfcmVjLCByZXRfY29kZSkpOwogCQl3cml0ZWIoUkVTUF9JTl9BU0IsIHRpLT5tbWlvICsgQUNBX09GRlNFVCArIEFDQV9TRVQgKyBJU1JBX09ERCk7CkBAIC0xODEzLDggKzE4MTUsOCBAQAogCiAJd3JpdGViKFJFU1BfSU5fQVNCLCB0aS0+bW1pbyArIEFDQV9PRkZTRVQgKyBBQ0FfU0VUICsgSVNSQV9PREQpOwogCi0JdGktPnRyX3N0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOwotCXRpLT50cl9zdGF0cy5yeF9wYWNrZXRzKys7CisJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKKwlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKIAogCXNrYi0+cHJvdG9jb2wgPSB0cl90eXBlX3RyYW5zKHNrYiwgZGV2KTsKIAlpZiAoSVB2NF9wKSB7CkBAIC0xODc2LDIxICsxODc4LDYgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0vKiB0b2tfZ2V0X3N0YXRzKCk6ICBCYXNpY2FsbHkgYSBzY2FmZm9sZCByb3V0aW5lIHdoaWNoIHdpbGwgcmV0dXJuCi0gICB0aGUgYWRkcmVzcyBvZiB0aGUgdHJfc3RhdGlzdGljcyBzdHJ1Y3R1cmUgYXNzb2NpYXRlZCB3aXRoCi0gICB0aGlzIGRldmljZSAtLSB0aGUgdHIuLi4uIHN0cnVjdHVyZSBpcyBhbiBldGhuZXQgbG9vay1hbGlrZQotICAgc28gYXQgbGVhc3QgZm9yIHRoaXMgaXRlcmF0aW9uIG1heSBzdWZmaWNlLiAgICovCi0KLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqdG9rX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCi0Jc3RydWN0IHRva19pbmZvICp0b2tpOwotCXRva2kgPSBuZXRkZXZfcHJpdihkZXYpOwotCXJldHVybiAoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKikgJnRva2ktPnRyX3N0YXRzOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KIHN0YXRpYyBpbnQgaWJtdHJfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbXR1KQogewogCXN0cnVjdCB0b2tfaW5mbyAqdGkgPSBuZXRkZXZfcHJpdihkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2xhbnN0cmVhbWVyLmMgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvbGFuc3RyZWFtZXIuYwppbmRleCAyMzljNzUyLi5mMzA5YjhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvbGFuc3RyZWFtZXIuYworKysgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvbGFuc3RyZWFtZXIuYwpAQCAtMjA3LDcgKzIwNyw2IEBACiBzdGF0aWMgaW50IHN0cmVhbWVyX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgc3RyZWFtZXJfc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaXJxcmV0dXJuX3Qgc3RyZWFtZXJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCk7Ci1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0cmVhbWVyX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgc3RyZWFtZXJfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKmFkZHIpOwogc3RhdGljIHZvaWQgc3RyZWFtZXJfYXJiX2NtZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgc3RyZWFtZXJfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbXR1KTsKQEAgLTIyMiw2ICsyMjEsMTggQEAKICNlbmRpZgogI2VuZGlmCiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgc3RyZWFtZXJfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gc3RyZWFtZXJfb3BlbiwKKwkubmRvX3N0b3AJCT0gc3RyZWFtZXJfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IHN0cmVhbWVyX3htaXQsCisJLm5kb19jaGFuZ2VfbXR1CQk9IHN0cmVhbWVyX2NoYW5nZV9tdHUsCisjaWYgU1RSRUFNRVJfSU9DVEwKKwkubmRvX2RvX2lvY3RsCQk9IHN0cmVhbWVyX2lvY3RsLAorI2VuZGlmCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBzdHJlYW1lcl9zZXRfcnhfbW9kZSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IHN0cmVhbWVyX3NldF9tYWNfYWRkcmVzcywKK307CisKIHN0YXRpYyBpbnQgX19kZXZpbml0IHN0cmVhbWVyX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogewpAQCAtMzIxLDE4ICszMzIsNyBAQAogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnN0cmVhbWVyX3ByaXYtPnNyYl93YWl0KTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzdHJlYW1lcl9wcml2LT50cmJfd2FpdCk7CiAKLQlkZXYtPm9wZW4gPSAmc3RyZWFtZXJfb3BlbjsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9ICZzdHJlYW1lcl94bWl0OwotCWRldi0+Y2hhbmdlX210dSA9ICZzdHJlYW1lcl9jaGFuZ2VfbXR1OwotCWRldi0+c3RvcCA9ICZzdHJlYW1lcl9jbG9zZTsKLSNpZiBTVFJFQU1FUl9JT0NUTAotCWRldi0+ZG9faW9jdGwgPSAmc3RyZWFtZXJfaW9jdGw7Ci0jZWxzZQotCWRldi0+ZG9faW9jdGwgPSBOVUxMOwotI2VuZGlmCi0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSAmc3RyZWFtZXJfc2V0X3J4X21vZGU7Ci0JZGV2LT5nZXRfc3RhdHMgPSAmc3RyZWFtZXJfZ2V0X3N0YXRzOwotCWRldi0+c2V0X21hY19hZGRyZXNzID0gJnN0cmVhbWVyX3NldF9tYWNfYWRkcmVzczsKKwlkZXYtPm5ldGRldl9vcHMgPSAmc3RyZWFtZXJfbmV0ZGV2X29wczsKIAlkZXYtPmlycSA9IHBkZXYtPmlycTsKIAlkZXYtPmJhc2VfYWRkcj1waW9fc3RhcnQ7CiAJU0VUX05FVERFVl9ERVYoZGV2LCAmcGRldi0+ZGV2KTsKQEAgLTYxNiw4ICs2MTYsNiBAQAogCXByaW50aygiU0lTUiBNYXNrID0gJTA0eFxuIiwgcmVhZHcoc3RyZWFtZXJfbW1pbyArIFNJU1JfTUFTSykpOwogI2VuZGlmCiAJZG8gewotCQlpbnQgaTsKLQogCQlmb3IgKGkgPSAwOyBpIDwgU1JCX0NPTU1BTkRfU0laRTsgaSArPSAyKSB7CiAJCQl3cml0ZXcoMCwgc3RyZWFtZXJfbW1pbyArIExBUERJTkMpOwogCQl9CkBAIC05MzcsNyArOTM1LDcgQEAKIAkJCWlmIChza2IgPT0gTlVMTCkgCiAJCQl7CiAJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IE5vdCBlbm91Z2ggbWVtb3J5IHRvIGNvcHkgcGFja2V0IHRvIHVwcGVyIGxheWVycy4gXG4iLAlkZXYtPm5hbWUpOwotCQkJCXN0cmVhbWVyX3ByaXYtPnN0cmVhbWVyX3N0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJCQlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAkJCX0gZWxzZSB7CS8qIHdlIGFsbG9jYXRlZCBhbiBza2IgT0sgKi8KIAkJCQlpZiAoYnVmZmVyX2NudCA9PSAxKSB7CiAJCQkJCS8qIHJlbGVhc2UgdGhlIERNQSBtYXBwaW5nICovCkBAIC0xMDA5LDggKzEwMDcsOCBAQAogCQkJCQkvKiBzZW5kIHVwIHRvIHRoZSBwcm90b2NvbCAqLwogCQkJCQluZXRpZl9yeChza2IpOwogCQkJCX0KLQkJCQlzdHJlYW1lcl9wcml2LT5zdHJlYW1lcl9zdGF0cy5yeF9wYWNrZXRzKys7Ci0JCQkJc3RyZWFtZXJfcHJpdi0+c3RyZWFtZXJfc3RhdHMucnhfYnl0ZXMgKz0gbGVuZ3RoOworCQkJCWRldi0+c3RhdHMucnhfcGFja2V0cysrOworCQkJCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gbGVuZ3RoOwogCQkJfQkvKiBpZiBza2IgPT0gbnVsbCAqLwogCQl9CQkvKiBlbmQgcmVjZWl2ZWQgd2l0aG91dCBlcnJvcnMgKi8KIApAQCAtMTA1Myw4ICsxMDUxLDggQEAKIAkJCQl3aGlsZShzdHJlYW1lcl9wcml2LT5zdHJlYW1lcl90eF9yaW5nWyhzdHJlYW1lcl9wcml2LT50eF9yaW5nX2xhc3Rfc3RhdHVzICsgMSkgJiAoU1RSRUFNRVJfVFhfUklOR19TSVpFIC0gMSldLnN0YXR1cykgewogCQkJCXN0cmVhbWVyX3ByaXYtPnR4X3JpbmdfbGFzdF9zdGF0dXMgPSAoc3RyZWFtZXJfcHJpdi0+dHhfcmluZ19sYXN0X3N0YXR1cyArIDEpICYgKFNUUkVBTUVSX1RYX1JJTkdfU0laRSAtIDEpOwogCQkJCXN0cmVhbWVyX3ByaXYtPmZyZWVfdHhfcmluZ19lbnRyaWVzKys7Ci0JCQkJc3RyZWFtZXJfcHJpdi0+c3RyZWFtZXJfc3RhdHMudHhfYnl0ZXMgKz0gc3RyZWFtZXJfcHJpdi0+dHhfcmluZ19za2Jbc3RyZWFtZXJfcHJpdi0+dHhfcmluZ19sYXN0X3N0YXR1c10tPmxlbjsKLQkJCQlzdHJlYW1lcl9wcml2LT5zdHJlYW1lcl9zdGF0cy50eF9wYWNrZXRzKys7CisJCQkJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBzdHJlYW1lcl9wcml2LT50eF9yaW5nX3NrYltzdHJlYW1lcl9wcml2LT50eF9yaW5nX2xhc3Rfc3RhdHVzXS0+bGVuOworCQkJCWRldi0+c3RhdHMudHhfcGFja2V0cysrOwogCQkJCWRldl9rZnJlZV9za2JfaXJxKHN0cmVhbWVyX3ByaXYtPnR4X3Jpbmdfc2tiW3N0cmVhbWVyX3ByaXYtPnR4X3JpbmdfbGFzdF9zdGF0dXNdKTsKIAkJCQlzdHJlYW1lcl9wcml2LT5zdHJlYW1lcl90eF9yaW5nW3N0cmVhbWVyX3ByaXYtPnR4X3JpbmdfbGFzdF9zdGF0dXNdLmJ1ZmZlciA9IDB4ZGVhZGJlZWY7CiAJCQkJc3RyZWFtZXJfcHJpdi0+c3RyZWFtZXJfdHhfcmluZ1tzdHJlYW1lcl9wcml2LT50eF9yaW5nX2xhc3Rfc3RhdHVzXS5zdGF0dXMgPSAwOwpAQCAtMTQ4NCwxMyArMTQ4Miw2IEBACiAJfQkJCS8qIHN3aXRjaCBzcmJbMF0gKi8KIH0KIAotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdHJlYW1lcl9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3Qgc3RyZWFtZXJfcHJpdmF0ZSAqc3RyZWFtZXJfcHJpdjsKLQlzdHJlYW1lcl9wcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlyZXR1cm4gKHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICopICZzdHJlYW1lcl9wcml2LT5zdHJlYW1lcl9zdGF0czsKLX0KLQogc3RhdGljIGludCBzdHJlYW1lcl9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqYWRkcikKIHsKIAlzdHJ1Y3Qgc29ja2FkZHIgKnNhZGRyID0gYWRkcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9sYW5zdHJlYW1lci5oIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2xhbnN0cmVhbWVyLmgKaW5kZXggMTNjY2VlNi4uM2M1OGQ2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2xhbnN0cmVhbWVyLmgKKysrIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2xhbnN0cmVhbWVyLmgKQEAgLTI5OSw3ICsyOTksNiBAQAogCWludCB0eF9yaW5nX2ZyZWUsIHR4X3JpbmdfbGFzdF9zdGF0dXMsIHJ4X3JpbmdfbGFzdF9yZWNlaXZlZCwKIAkgICAgZnJlZV90eF9yaW5nX2VudHJpZXM7CiAKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdHJlYW1lcl9zdGF0czsKIAlfX3UxNiBzdHJlYW1lcl9sYW5fc3RhdHVzOwogCV9fdTggc3RyZWFtZXJfcmluZ19zcGVlZDsKIAlfX3UxNiBwa3RfYnVmX3N6OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL21hZGdlbWMuYyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9tYWRnZW1jLmMKaW5kZXggOTE3YjRkMi4uMTkzMzA4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL21hZGdlbWMuYworKysgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvbWFkZ2VtYy5jCkBAIC02OTIsOCArNjkyLDYgQEAKIAkKIAlsZW4gKz0gc3ByaW50ZihidWYrbGVuLCAiLS0tLS0tLVxuIik7CiAJaWYgKGN1cmNhcmQpIHsKLQkJc3RydWN0IG5ldF9sb2NhbCAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCQkKIAkJbGVuICs9IHNwcmludGYoYnVmK2xlbiwgIkNhcmQgUmV2aXNpb246ICVkXG4iLCBjdXJjYXJkLT5jYXJkcmV2KTsKIAkJbGVuICs9IHNwcmludGYoYnVmK2xlbiwgIlJBTSBTaXplOiAlZGtiXG4iLCBjdXJjYXJkLT5yYW1zaXplKTsKIAkJbGVuICs9IHNwcmludGYoYnVmK2xlbiwgIkNhYmxlIHR5cGU6ICVzXG4iLCAoY3VyY2FyZC0+Y2FibGV0eXBlKT8iU1RQL0RCOSI6IlVUUC9SSi00NSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL29seW1waWMuYyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9vbHltcGljLmMKaW5kZXggZWNiNWM3Yy4uZDA2OGE5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL29seW1waWMuYworKysgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvb2x5bXBpYy5jCkBAIC0xODcsNyArMTg3LDYgQEAKIHN0YXRpYyB2b2lkIG9seW1waWNfc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBvbHltcGljX2ZyZWVtZW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldikgOyAgCiBzdGF0aWMgaXJxcmV0dXJuX3Qgb2x5bXBpY19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqIG9seW1waWNfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBvbHltcGljX3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICphZGRyKSA7IAogc3RhdGljIHZvaWQgb2x5bXBpY19hcmJfY21kKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBvbHltcGljX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG10dSk7CkBAIC0xOTUsNiArMTk0LDE1IEBACiBzdGF0aWMgdm9pZCBvbHltcGljX2FzYl9iaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KSA7IAogc3RhdGljIGludCBvbHltcGljX3Byb2NfaW5mbyhjaGFyICpidWZmZXIsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LCBpbnQgbGVuZ3RoLCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkgOyAKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBvbHltcGljX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IG9seW1waWNfb3BlbiwKKwkubmRvX3N0b3AJCT0gb2x5bXBpY19jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gb2x5bXBpY194bWl0LAorCS5uZG9fY2hhbmdlX210dQkJPSBvbHltcGljX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QJPSBvbHltcGljX3NldF9yeF9tb2RlLAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gb2x5bXBpY19zZXRfbWFjX2FkZHJlc3MsCit9OworCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBvbHltcGljX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgOyAKQEAgLTI1MywxNCArMjYxLDcgQEAKIAkJZ290byBvcF9mcmVlX2lvbWFwOwogCX0JCQkJCiAKLQlkZXYtPm9wZW49Jm9seW1waWNfb3BlbjsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdD0mb2x5bXBpY194bWl0OwotCWRldi0+Y2hhbmdlX210dT0mb2x5bXBpY19jaGFuZ2VfbXR1OwotCWRldi0+c3RvcD0mb2x5bXBpY19jbG9zZTsKLQlkZXYtPmRvX2lvY3RsPU5VTEw7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3Q9Jm9seW1waWNfc2V0X3J4X21vZGU7Ci0JZGV2LT5nZXRfc3RhdHM9Jm9seW1waWNfZ2V0X3N0YXRzIDsKLQlkZXYtPnNldF9tYWNfYWRkcmVzcz0mb2x5bXBpY19zZXRfbWFjX2FkZHJlc3MgOyAgCisJZGV2LT5uZXRkZXZfb3BzID0gJm9seW1waWNfbmV0ZGV2X29wczsKIAlTRVRfTkVUREVWX0RFVihkZXYsICZwZGV2LT5kZXYpOwogCiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsZGV2KSA7IApAQCAtNjk4LDcgKzY5OSw2IEBACiAJaWYgKG9seW1waWNfcHJpdi0+b2x5bXBpY19uZXR3b3JrX21vbml0b3IpIHsgCiAJCXU4IF9faW9tZW0gKm9hdDsKIAkJdTggX19pb21lbSAqb3B0OwotCQlpbnQgaTsKIAkJdTggYWRkcls2XTsKIAkJb2F0ID0gKG9seW1waWNfcHJpdi0+b2x5bXBpY19sYXAgKyBvbHltcGljX3ByaXYtPm9seW1waWNfYWRkcl90YWJsZV9hZGRyKTsKIAkJb3B0ID0gKG9seW1waWNfcHJpdi0+b2x5bXBpY19sYXAgKyBvbHltcGljX3ByaXYtPm9seW1waWNfcGFybXNfYWRkcik7CkBAIC03ODUsNyArNzg1LDcgQEAKIAkJCQl9IAogCQkJCW9seW1waWNfcHJpdi0+cnhfcmluZ19sYXN0X3JlY2VpdmVkICs9IGkgOyAKIAkJCQlvbHltcGljX3ByaXYtPnJ4X3JpbmdfbGFzdF9yZWNlaXZlZCAmPSAoT0xZTVBJQ19SWF9SSU5HX1NJWkUgLTEpIDsgCi0JCQkJb2x5bXBpY19wcml2LT5vbHltcGljX3N0YXRzLnJ4X2Vycm9ycysrOwkgCisJCQkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJCX0gZWxzZSB7CQogCQkJCiAJCQkJaWYgKGJ1ZmZlcl9jbnQgPT0gMSkgewpAQCAtNzk2LDcgKzc5Niw3IEBACiAKIAkJCQlpZiAoc2tiID09IE5VTEwpIHsKIAkJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IE5vdCBlbm91Z2ggbWVtb3J5IHRvIGNvcHkgcGFja2V0IHRvIHVwcGVyIGxheWVycy4gXG4iLGRldi0+bmFtZSkgOwotCQkJCQlvbHltcGljX3ByaXYtPm9seW1waWNfc3RhdHMucnhfZHJvcHBlZCsrIDsgCisJCQkJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQkJCQkvKiBVcGRhdGUgY291bnRlcnMgZXZlbiB0aG91Z2ggd2UgZG9uJ3QgdHJhbnNmZXIgdGhlIGZyYW1lICovCiAJCQkJCW9seW1waWNfcHJpdi0+cnhfcmluZ19sYXN0X3JlY2VpdmVkICs9IGkgOyAKIAkJCQkJb2x5bXBpY19wcml2LT5yeF9yaW5nX2xhc3RfcmVjZWl2ZWQgJj0gKE9MWU1QSUNfUlhfUklOR19TSVpFIC0xKSA7ICAKQEAgLTg2Miw4ICs4NjIsOCBAQAogCQkJCQkJc2tiLT5wcm90b2NvbCA9IHRyX3R5cGVfdHJhbnMoc2tiLGRldik7CiAJCQkJCQluZXRpZl9yeChza2IpIDsgCiAJCQkJCX0gCi0JCQkJCW9seW1waWNfcHJpdi0+b2x5bXBpY19zdGF0cy5yeF9wYWNrZXRzKysgOyAKLQkJCQkJb2x5bXBpY19wcml2LT5vbHltcGljX3N0YXRzLnJ4X2J5dGVzICs9IGxlbmd0aCA7IAorCQkJCQlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKyA7CisJCQkJCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gbGVuZ3RoIDsKIAkJCQl9IC8qIGlmIHNrYiA9PSBudWxsICovCiAJCQl9IC8qIElmIHN0YXR1cyAmIDB4M2IgKi8KIApAQCAtOTcxLDggKzk3MSw4IEBACiAJCQkJb2x5bXBpY19wcml2LT50eF9yaW5nX2xhc3Rfc3RhdHVzKys7CiAJCQkJb2x5bXBpY19wcml2LT50eF9yaW5nX2xhc3Rfc3RhdHVzICY9IChPTFlNUElDX1RYX1JJTkdfU0laRS0xKTsKIAkJCQlvbHltcGljX3ByaXYtPmZyZWVfdHhfcmluZ19lbnRyaWVzKys7Ci0JCQkJb2x5bXBpY19wcml2LT5vbHltcGljX3N0YXRzLnR4X2J5dGVzICs9IG9seW1waWNfcHJpdi0+dHhfcmluZ19za2Jbb2x5bXBpY19wcml2LT50eF9yaW5nX2xhc3Rfc3RhdHVzXS0+bGVuOwotCQkJCW9seW1waWNfcHJpdi0+b2x5bXBpY19zdGF0cy50eF9wYWNrZXRzKysgOyAKKwkJCQlkZXYtPnN0YXRzLnR4X2J5dGVzICs9IG9seW1waWNfcHJpdi0+dHhfcmluZ19za2Jbb2x5bXBpY19wcml2LT50eF9yaW5nX2xhc3Rfc3RhdHVzXS0+bGVuOworCQkJCWRldi0+c3RhdHMudHhfcGFja2V0cysrIDsKIAkJCQlwY2lfdW5tYXBfc2luZ2xlKG9seW1waWNfcHJpdi0+cGRldiwgCiAJCQkJCWxlMzJfdG9fY3B1KG9seW1waWNfcHJpdi0+b2x5bXBpY190eF9yaW5nW29seW1waWNfcHJpdi0+dHhfcmluZ19sYXN0X3N0YXR1c10uYnVmZmVyKSwgCiAJCQkJCW9seW1waWNfcHJpdi0+dHhfcmluZ19za2Jbb2x5bXBpY19wcml2LT50eF9yaW5nX2xhc3Rfc3RhdHVzXS0+bGVuLFBDSV9ETUFfVE9ERVZJQ0UpOwpAQCAtMTM0NCwxMyArMTM0NCw2IEBACiAKIH0gCiAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqIG9seW1waWNfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IG9seW1waWNfcHJpdmF0ZSAqb2x5bXBpY19wcml2IDsKLQlvbHltcGljX3ByaXY9bmV0ZGV2X3ByaXYoZGV2KTsKLQlyZXR1cm4gKHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICopICZvbHltcGljX3ByaXYtPm9seW1waWNfc3RhdHM7IAotfQotCiBzdGF0aWMgaW50IG9seW1waWNfc2V0X21hY19hZGRyZXNzIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICphZGRyKSAKIHsKIAlzdHJ1Y3Qgc29ja2FkZHIgKnNhZGRyID0gYWRkciA7IApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL29seW1waWMuaCBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9vbHltcGljLmgKaW5kZXggMTBmYmJhMC4uMzA2MzFiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL29seW1waWMuaAorKysgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvb2x5bXBpYy5oCkBAIC0yNzUsNyArMjc1LDYgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqdHhfcmluZ19za2JbT0xZTVBJQ19UWF9SSU5HX1NJWkVdLCAqcnhfcmluZ19za2JbT0xZTVBJQ19SWF9SSU5HX1NJWkVdOwkKIAlpbnQgdHhfcmluZ19mcmVlLCB0eF9yaW5nX2xhc3Rfc3RhdHVzLCByeF9yaW5nX2xhc3RfcmVjZWl2ZWQscnhfc3RhdHVzX2xhc3RfcmVjZWl2ZWQsIGZyZWVfdHhfcmluZ19lbnRyaWVzOwogCi0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgb2x5bXBpY19zdGF0cyA7CiAJdTE2IG9seW1waWNfbGFuX3N0YXR1cyA7CiAJdTggb2x5bXBpY19yaW5nX3NwZWVkIDsKIAl1MTYgcGt0X2J1Zl9zeiA7IApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3NtY3RyLmMgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvc21jdHIuYwppbmRleCA1MGViMjljLi45ZDdkYjJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvc21jdHIuYworKysgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvc21jdHIuYwpAQCAtNjEsNyArNjEsOCBAQAogCiAjaW5jbHVkZSAic21jdHIuaCIgICAgICAgICAgICAgICAvKiBPdXIgU3R1ZmYgKi8KIAotc3RhdGljIGNoYXIgdmVyc2lvbltdIF9faW5pdGRhdGEgPSBLRVJOX0lORk8gInNtY3RyLmM6IHYxLjQgNy8xMi8wMCBieSBqc2NobHN0QHNhbWJhLm9yZ1xuIjsKK3N0YXRpYyBjb25zdCBjaGFyIHZlcnNpb25bXSBfX2luaXRkYXRhID0KKwlLRVJOX0lORk8gInNtY3RyLmM6IHYxLjQgNy8xMi8wMCBieSBqc2NobHN0QHNhbWJhLm9yZ1xuIjsKIHN0YXRpYyBjb25zdCBjaGFyIGNhcmRuYW1lW10gPSAic21jdHIiOwogCiAKQEAgLTQzOTIsNTIgKzQzOTMsNDIgQEAKICAgICAgICAgewogICAgICAgICAgICAgICAgIGNhc2UgUklOR19SRUNPVkVSWToKICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBSaW5nIFJlY292ZXJ5XG4iLCBkZXYtPm5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgdHAtPmN1cnJlbnRfcmluZ19zdGF0dXMgfD0gUklOR19SRUNPVkVSWTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICAgICAgY2FzZSBTSU5HTEVfU1RBVElPTjoKICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBTaW5nbGUgU3RhdGlub25cbiIsIGRldi0+bmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cC0+Y3VycmVudF9yaW5nX3N0YXR1cyB8PSBTSU5HTEVfU1RBVElPTjsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICAgICAgY2FzZSBDT1VOVEVSX09WRVJGTE9XOgogICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IENvdW50ZXIgT3ZlcmZsb3dcbiIsIGRldi0+bmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cC0+Y3VycmVudF9yaW5nX3N0YXR1cyB8PSBDT1VOVEVSX09WRVJGTE9XOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgICAgICBjYXNlIFJFTU9WRV9SRUNFSVZFRDoKICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBSZW1vdmUgUmVjZWl2ZWRcbiIsIGRldi0+bmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cC0+Y3VycmVudF9yaW5nX3N0YXR1cyB8PSBSRU1PVkVfUkVDRUlWRUQ7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgICAgIGNhc2UgQVVUT19SRU1PVkFMX0VSUk9SOgogICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEF1dG8gUmVtb3ZlIEVycm9yXG4iLCBkZXYtPm5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgdHAtPmN1cnJlbnRfcmluZ19zdGF0dXMgfD0gQVVUT19SRU1PVkFMX0VSUk9SOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgICAgICBjYXNlIExPQkVfV0lSRV9GQVVMVDoKICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBMb2JlIFdpcmUgRmF1bHRcbiIsIGRldi0+bmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cC0+Y3VycmVudF9yaW5nX3N0YXR1cyB8PSBMT0JFX1dJUkVfRkFVTFQ7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgICAgIGNhc2UgVFJBTlNNSVRfQkVBQ09OOgogICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFRyYW5zbWl0IEJlYWNvblxuIiwgZGV2LT5uYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRwLT5jdXJyZW50X3Jpbmdfc3RhdHVzIHw9IFRSQU5TTUlUX0JFQUNPTjsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICAgICAgY2FzZSBTT0ZUX0VSUk9SOgogICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFNvZnQgRXJyb3JcbiIsIGRldi0+bmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cC0+Y3VycmVudF9yaW5nX3N0YXR1cyB8PSBTT0ZUX0VSUk9SOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgICAgICBjYXNlIEhBUkRfRVJST1I6CiAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogSGFyZCBFcnJvclxuIiwgZGV2LT5uYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRwLT5jdXJyZW50X3Jpbmdfc3RhdHVzIHw9IEhBUkRfRVJST1I7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgICAgIGNhc2UgU0lHTkFMX0xPU1M6CiAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogU2lnbmFsIExvc3NcbiIsIGRldi0+bmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cC0+Y3VycmVudF9yaW5nX3N0YXR1cyB8PSBTSUdOQUxfTE9TUzsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICAgICAgZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9zbWN0ci5oIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3NtY3RyLmgKaW5kZXggNTJkZjdkZC4uNmU1NzAwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3NtY3RyLmgKKysrIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3NtY3RyLmgKQEAgLTk3Nyw3ICs5NzcsNiBAQAogCV9fdTgJCW1vbml0b3Jfc3RhdGVfcmVhZHk7CiAJX191MTYJCXJpbmdfc3RhdHVzOwogCV9fdTgJCXJpbmdfc3RhdHVzX2ZsYWdzOwotCV9fdTgJCWN1cnJlbnRfcmluZ19zdGF0dXM7CiAJX191OAkJc3RhdGU7CiAKIAlfX3U4CQlqb2luX3N0YXRlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3RtczM4MHRyLmMgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvdG1zMzgwdHIuYwppbmRleCA1YmUzNGMyLi5iMTFiYjcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvdG1zMzgwdHIuYworKysgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvdG1zMzgwdHIuYwpAQCAtMjMzMCw2ICsyMzMwLDE3IEBACiAJCURNQV9CSURJUkVDVElPTkFMKTsKIH0KIAorY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHRtczM4MHRyX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IHRtczM4MHRyX29wZW4sCisJLm5kb19zdG9wCQk9IHRtczM4MHRyX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAkJPSB0bXMzODB0cl9zZW5kX3BhY2tldCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gdG1zMzgwdHJfdGltZW91dCwKKwkubmRvX2dldF9zdGF0cwkJPSB0bXMzODB0cl9nZXRfc3RhdHMsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSB0bXMzODB0cl9zZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSB0bXMzODB0cl9zZXRfbWFjX2FkZHJlc3MsCit9OworRVhQT1JUX1NZTUJPTCh0bXMzODB0cl9uZXRkZXZfb3BzKTsKKwogaW50IHRtc2Rldl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IG5ldF9sb2NhbCAqdG1zX2xvY2FsOwpAQCAtMjM1MywxNiArMjM2NCw4IEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAkKLQkvKiBUaGVzZSBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgY2FyZCBkcml2ZXIgaWYgbmVlZGVkICovCi0JZGV2LT5vcGVuCQk9IHRtczM4MHRyX29wZW47Ci0JZGV2LT5zdG9wCQk9IHRtczM4MHRyX2Nsb3NlOwotCWRldi0+ZG9faW9jdGwJCT0gTlVMTDsgCi0JZGV2LT5oYXJkX3N0YXJ0X3htaXQJPSB0bXMzODB0cl9zZW5kX3BhY2tldDsKLQlkZXYtPnR4X3RpbWVvdXQJCT0gdG1zMzgwdHJfdGltZW91dDsKKwlkZXYtPm5ldGRldl9vcHMJCT0gJnRtczM4MHRyX25ldGRldl9vcHM7CiAJZGV2LT53YXRjaGRvZ190aW1lbwk9IEhaOwotCWRldi0+Z2V0X3N0YXRzCQk9IHRtczM4MHRyX2dldF9zdGF0czsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9ICZ0bXMzODB0cl9zZXRfbXVsdGljYXN0X2xpc3Q7Ci0JZGV2LT5zZXRfbWFjX2FkZHJlc3MJPSB0bXMzODB0cl9zZXRfbWFjX2FkZHJlc3M7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy90bXMzODB0ci5oIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3RtczM4MHRyLmgKaW5kZXggN2FmNzZkNy4uNjBiMzBlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3RtczM4MHRyLmgKKysrIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3RtczM4MHRyLmgKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KIAogLyogbW9kdWxlIHByb3RvdHlwZXMgKi8KK2V4dGVybiBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdG1zMzgwdHJfbmV0ZGV2X29wczsKIGludCB0bXMzODB0cl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogaW50IHRtczM4MHRyX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogaXJxcmV0dXJuX3QgdG1zMzgwdHJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvdG1zcGNpLmMgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvdG1zcGNpLmMKaW5kZXggZTIxNTBiMy4uZjkyZmU4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3Rtc3BjaS5jCisrKyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy90bXNwY2kuYwpAQCAtMTUyLDEzICsxNTIsMTMgQEAKIAogCXRwLT50bXNwcml2ID0gY2FyZGluZm87CiAKKwlkZXYtPm5ldGRldl9vcHMgPSAmdG1zMzgwdHJfbmV0ZGV2X29wczsKKwogCXJldCA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgdG1zMzgwdHJfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwKIAkJCSAgZGV2LT5uYW1lLCBkZXYpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyX291dF90bXNkZXY7CiAKLQlkZXYtPm9wZW4gPSB0bXMzODB0cl9vcGVuOwotCWRldi0+c3RvcCA9IHRtczM4MHRyX2Nsb3NlOwogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpOwogCVNFVF9ORVRERVZfREVWKGRldiwgJnBkZXYtPmRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RzaTEwOF9ldGguYyBiL2RyaXZlcnMvbmV0L3RzaTEwOF9ldGguYwppbmRleCBhOWZkMmIyLi5iYjQzZTdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90c2kxMDhfZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvdHNpMTA4X2V0aC5jCkBAIC04ODgsNyArODg4LDcgQEAKIAogCWlmIChudW1fcmVjZWl2ZWQgPCBidWRnZXQpIHsKIAkJZGF0YS0+cnhwZW5kaW5nID0gMDsKLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CiAKIAkJVFNJX1dSSVRFKFRTSTEwOF9FQ19JTlRNQVNLLAogCQkJCSAgICAgVFNJX1JFQUQoVFNJMTA4X0VDX0lOVE1BU0spCkBAIC05MTUsMTEgKzkxNSwxMSBAQAogCSAqCiAJICogVGhpcyBjYW4gaGFwcGVuIGlmIHRoaXMgY29kZSByYWNlcyB3aXRoIHRzaTEwOF9wb2xsKCksIHdoaWNoIG1hc2tzCiAJICogdGhlIGludGVycnVwdHMgYWZ0ZXIgdHNpMTA4X2lycV9vbmUoKSByZWFkIHRoZSBtYXNrLCBidXQgYmVmb3JlCi0JICogbmV0aWZfcnhfc2NoZWR1bGUgaXMgY2FsbGVkLiAgSXQgY291bGQgYWxzbyBoYXBwZW4gZHVlIHRvIGNhbGxzCisJICogbmFwaV9zY2hlZHVsZSBpcyBjYWxsZWQuICBJdCBjb3VsZCBhbHNvIGhhcHBlbiBkdWUgdG8gY2FsbHMKIAkgKiBmcm9tIHRzaTEwOF9jaGVja19yeHJpbmcoKS4KIAkgKi8KIAotCWlmIChuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKCZkYXRhLT5uYXBpKSkgeworCWlmIChuYXBpX3NjaGVkdWxlX3ByZXAoJmRhdGEtPm5hcGkpKSB7CiAJCS8qIE1hc2ssIHJhdGhlciB0aGFuIGFjaywgdGhlIHJlY2VpdmUgaW50ZXJydXB0cy4gIFRoZSBhY2sKIAkJICogd2lsbCBoYXBwZW4gaW4gdHNpMTA4X3BvbGwoKS4KIAkJICovCkBAIC05MzAsNyArOTMwLDcgQEAKIAkJCQkgICAgIHwgVFNJMTA4X0lOVF9SWFRIUkVTSCB8CiAJCQkJICAgICBUU0kxMDhfSU5UX1JYT1ZFUlJVTiB8IFRTSTEwOF9JTlRfUlhFUlJPUiB8CiAJCQkJICAgICBUU0kxMDhfSU5UX1JYV0FJVCk7Ci0JCV9fbmV0aWZfcnhfc2NoZWR1bGUoJmRhdGEtPm5hcGkpOworCQlfX25hcGlfc2NoZWR1bGUoJmRhdGEtPm5hcGkpOwogCX0gZWxzZSB7CiAJCWlmICghbmV0aWZfcnVubmluZyhkZXYpKSB7CiAJCQkvKiBUaGlzIGNhbiBoYXBwZW4gaWYgYW4gaW50ZXJydXB0IG9jY3VycyB3aGlsZSB0aGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bGlwL2RlNHg1LmMgYi9kcml2ZXJzL25ldC90dWxpcC9kZTR4NS5jCmluZGV4IDY0MThmNzQuLmY5NDkxYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bGlwL2RlNHg1LmMKKysrIGIvZHJpdmVycy9uZXQvdHVsaXAvZGU0eDUuYwpAQCAtNDc5LDcgKzQ3OSw4IEBACiAKICNpbmNsdWRlICJkZTR4NS5oIgogCi1zdGF0aWMgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0ZGF0YSA9ICJkZTR4NS5jOlYwLjU0NiAyMDAxLzAyLzIyIGRhdmllc0BtYW5pYWMudWx0cmFuZXQuY29tXG4iOworc3RhdGljIGNvbnN0IGNoYXIgdmVyc2lvbltdIF9fZGV2aW5pdGNvbnN0ID0KKwlLRVJOX0lORk8gImRlNHg1LmM6VjAuNTQ2IDIwMDEvMDIvMjIgZGF2aWVzQG1hbmlhYy51bHRyYW5ldC5jb21cbiI7CiAKICNkZWZpbmUgY19jaGFyIGNvbnN0IGNoYXIKIApAQCAtMzk0MSw4ICszOTQyLDggQEAKIAlzdHJjcHkobmFtZSwgIkRFNDM0LzUiKTsKIAlyZXR1cm4gc3RhdHVzOwogICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2VhcmNoIGZvciBhIERFQyBuYW1lIGluIHRoZSBTUk9NICovCi0JaW50IGkgPSAqKChjaGFyICopJmxwLT5zcm9tICsgMTkpICogMzsKLQlzdHJuY3B5KG5hbWUsIChjaGFyICopJmxwLT5zcm9tICsgMjYgKyBpLCA4KTsKKwlpbnQgdG1wID0gKigoY2hhciAqKSZscC0+c3JvbSArIDE5KSAqIDM7CisJc3RybmNweShuYW1lLCAoY2hhciAqKSZscC0+c3JvbSArIDI2ICsgdG1wLCA4KTsKICAgICB9CiAgICAgbmFtZVs4XSA9ICdcMCc7CiAgICAgZm9yIChpPTA7IGk8c2lnbGVuOyBpKyspIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bGlwL2RtZmUuYyBiL2RyaXZlcnMvbmV0L3R1bGlwL2RtZmUuYwppbmRleCAyZTVjOTk5Li5lMmM5ZDBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC9kbWZlLmMKKysrIGIvZHJpdmVycy9uZXQvdHVsaXAvZG1mZS5jCkBAIC0yODgsNyArMjg4LDcgQEAKIAogLyogR2xvYmFsIHZhcmlhYmxlIGRlY2xhcmF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiBzdGF0aWMgaW50IF9fZGV2aW5pdGRhdGEgcHJpbnRlZF92ZXJzaW9uOwotc3RhdGljIGNoYXIgdmVyc2lvbltdIF9fZGV2aW5pdGRhdGEgPQorc3RhdGljIGNvbnN0IGNoYXIgdmVyc2lvbltdIF9fZGV2aW5pdGNvbnN0ID0KIAlLRVJOX0lORk8gRFJWX05BTUUgIjogRGF2aWNvbSBETTl4eHggbmV0IGRyaXZlciwgdmVyc2lvbiAiCiAJRFJWX1ZFUlNJT04gIiAoIiBEUlZfUkVMREFURSAiKVxuIjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvaW50ZXJydXB0LmMgYi9kcml2ZXJzL25ldC90dWxpcC9pbnRlcnJ1cHQuYwppbmRleCA2YzM0MjhhLi5jOGQyMjBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC9pbnRlcnJ1cHQuYworKysgYi9kcml2ZXJzL25ldC90dWxpcC9pbnRlcnJ1cHQuYwpAQCAtMTAzLDcgKzEwMyw3IEBACiB7CiAgICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilkYXRhOwogCXN0cnVjdCB0dWxpcF9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7Ci0JbmV0aWZfcnhfc2NoZWR1bGUoJnRwLT5uYXBpKTsKKwluYXBpX3NjaGVkdWxlKCZ0cC0+bmFwaSk7CiB9CiAKIGludCB0dWxpcF9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCkKQEAgLTE0MCw2ICsxNDAsNyBAQAogICAgICAgICAgICAgICAgLyogSWYgd2Ugb3duIHRoZSBuZXh0IGVudHJ5LCBpdCBpcyBhIG5ldyBwYWNrZXQuIFNlbmQgaXQgdXAuICovCiAgICAgICAgICAgICAgICB3aGlsZSAoICEgKHRwLT5yeF9yaW5nW2VudHJ5XS5zdGF0dXMgJiBjcHVfdG9fbGUzMihEZXNjT3duZWQpKSkgewogICAgICAgICAgICAgICAgICAgICAgICBzMzIgc3RhdHVzID0gbGUzMl90b19jcHUodHAtPnJ4X3JpbmdbZW50cnldLnN0YXR1cyk7CisJCSAgICAgICBzaG9ydCBwa3RfbGVuOwogCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0cC0+ZGlydHlfcnggKyBSWF9SSU5HX1NJWkUgPT0gdHAtPmN1cl9yeCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTE1MSw4ICsxNTIsMjggQEAKIAkJICAgICAgIGlmICgrK3dvcmtfZG9uZSA+PSBidWRnZXQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBub3RfZG9uZTsKIAotICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHN0YXR1cyAmIDB4MzgwMDgzMDApICE9IDB4MDMwMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoc3RhdHVzICYgMHgzODAwMDMwMCkgIT0gMHgwMzAwKSB7CisJCSAgICAgICAvKgorCQkJKiBPbWl0IHRoZSBmb3VyIG9jdGV0IENSQyBmcm9tIHRoZSBsZW5ndGguCisJCQkqIChNYXkgbm90IGJlIGNvbnNpZGVyZWQgdmFsaWQgdW50aWwgd2UgaGF2ZQorCQkJKiBjaGVja2VkIHN0YXR1cyBmb3IgUnhMZW5ndGhPdmVyMjA0NyBiaXRzKQorCQkJKi8KKwkJICAgICAgIHBrdF9sZW4gPSAoKHN0YXR1cyA+PiAxNikgJiAweDdmZikgLSA0OworCisJCSAgICAgICAvKgorCQkJKiBNYXhpbXVtIHBrdF9sZW4gaXMgMTUxOCAoMTUxNCArIHZsYW4gaGVhZGVyKQorCQkJKiBBbnl0aGluZyBoaWdoZXIgdGhhbiB0aGlzIGlzIGFsd2F5cyBpbnZhbGlkCisJCQkqIHJlZ2FyZGxlc3Mgb2YgUnhMZW5ndGhPdmVyMjA0NyBiaXRzCisJCQkqLworCisJCSAgICAgICBpZiAoKHN0YXR1cyAmIChSeExlbmd0aE92ZXIyMDQ3IHwKKwkJCQkgICAgICBSeERlc2NDUkNFcnJvciB8CisJCQkJICAgICAgUnhEZXNjQ29sbGlzaW9uU2VlbiB8CisJCQkJICAgICAgUnhEZXNjUnVudCB8CisJCQkJICAgICAgUnhEZXNjRGVzY0VyciB8CisJCQkJICAgICAgUnhXaG9sZVBrdCkpICE9IFJ4V2hvbGVQa3QKKwkJCSAgIHx8IHBrdF9sZW4gPiAxNTE4KSB7CisJCQkgICAgICAgaWYgKChzdGF0dXMgJiAoUnhMZW5ndGhPdmVyMjA0NyB8CisJCQkJCSAgICAgIFJ4V2hvbGVQa3QpKSAhPSBSeFdob2xlUGt0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEluZ29yZSBlYXJsaWVyIGJ1ZmZlcnMuICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHN0YXR1cyAmIDB4ZmZmZikgIT0gMHg3ZmZmKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0dWxpcF9kZWJ1ZyA+IDEpCkBAIC0xNjEsMzAgKzE4MiwyMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXYtPm5hbWUsIHN0YXR1cyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRwLT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgJiBSeERlc2NGYXRhbEVycikgeworCQkJICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoZXJlIHdhcyBhIGZhdGFsIGVycm9yLiAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR1bGlwX2RlYnVnID4gMikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBSZWNlaXZlIGVycm9yLCBSeCBzdGF0dXMgJTguOHguXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2LT5uYW1lLCBzdGF0dXMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHAtPnN0YXRzLnJ4X2Vycm9ycysrOyAvKiBlbmQgb2YgYSBwYWNrZXQuKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgJiAweDA4OTApIHRwLT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CisJCQkJICAgICAgIGlmIChwa3RfbGVuID4gMTUxOCB8fAorCQkJCQkgICAoc3RhdHVzICYgUnhEZXNjUnVudCkpCisJCQkJCSAgICAgICB0cC0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOworCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICYgMHgwMDA0KSB0cC0+c3RhdHMucnhfZnJhbWVfZXJyb3JzKys7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICYgMHgwMDAyKSB0cC0+c3RhdHMucnhfY3JjX2Vycm9ycysrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyAmIDB4MDAwMSkgdHAtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzKys7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE9taXQgdGhlIGZvdXIgb2N0ZXQgQ1JDIGZyb20gdGhlIGxlbmd0aC4gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydCBwa3RfbGVuID0gKChzdGF0dXMgPj4gMTYpICYgMHg3ZmYpIC0gNDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCi0jaWZuZGVmIGZpbmFsX3ZlcnNpb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGt0X2xlbiA+IDE1MTgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBCb2d1cyBwYWNrZXQgc2l6ZSBvZiAlZCAoJSN4KS5cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2LT5uYW1lLCBwa3RfbGVuLCBwa3RfbGVuKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBrdF9sZW4gPSAxNTE4OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHAtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0jZW5kaWYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDaGVjayBpZiB0aGUgcGFja2V0IGlzIGxvbmcgZW5vdWdoIHRvIGFjY2VwdCB3aXRob3V0IGNvcHlpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBhIG1pbmltYWxseS1zaXplZCBza2J1ZmYuICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBrdF9sZW4gPCB0dWxpcF9yeF9jb3B5YnJlYWsKQEAgLTMwMCw3ICszMTQsNyBAQAogCiAgICAgICAgICAvKiBSZW1vdmUgdXMgZnJvbSBwb2xsaW5nIGxpc3QgYW5kIGVuYWJsZSBSWCBpbnRyLiAqLwogCi0gICAgICAgICBuZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKyAgICAgICAgIG5hcGlfY29tcGxldGUobmFwaSk7CiAgICAgICAgICBpb3dyaXRlMzIodHVsaXBfdGJsW3RwLT5jaGlwX2lkXS52YWxpZF9pbnRycywgdHAtPmJhc2VfYWRkcitDU1I3KTsKIAogICAgICAgICAgLyogVGhlIGxhc3Qgb3AgaGFwcGVucyBhZnRlciBwb2xsIGNvbXBsZXRpb24uIFdoaWNoIG1lYW5zIHRoZSBmb2xsb3dpbmc6CkBAIC0zMzMsMTAgKzM0NywxMCBAQAogCiAgICAgICAgICAvKiBUaGluazogdGltZXJfcGVuZGluZygpIHdhcyBhbiBleHBsaWNpdCBzaWduYXR1cmUgb2YgYnVnLgogICAgICAgICAgICogVGltZXIgY2FuIGJlIHBlbmRpbmcgbm93IGJ1dCBmaXJlZCBhbmQgY29tcGxldGVkCi0gICAgICAgICAgKiBiZWZvcmUgd2UgZGlkIG5ldGlmX3J4X2NvbXBsZXRlKCkuIFNlZT8gV2Ugd291bGQgbG9zZSBpdC4gKi8KKyAgICAgICAgICAqIGJlZm9yZSB3ZSBkaWQgbmFwaV9jb21wbGV0ZSgpLiBTZWU/IFdlIHdvdWxkIGxvc2UgaXQuICovCiAKICAgICAgICAgIC8qIHJlbW92ZSBvdXJzZWx2ZXMgZnJvbSB0aGUgcG9sbGluZyBsaXN0ICovCi0gICAgICAgICBuZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKyAgICAgICAgIG5hcGlfY29tcGxldGUobmFwaSk7CiAKICAgICAgICAgIHJldHVybiB3b3JrX2RvbmU7CiB9CkBAIC0zNTYsMTQgKzM3MCwzNSBAQAogCS8qIElmIHdlIG93biB0aGUgbmV4dCBlbnRyeSwgaXQgaXMgYSBuZXcgcGFja2V0LiBTZW5kIGl0IHVwLiAqLwogCXdoaWxlICggISAodHAtPnJ4X3JpbmdbZW50cnldLnN0YXR1cyAmIGNwdV90b19sZTMyKERlc2NPd25lZCkpKSB7CiAJCXMzMiBzdGF0dXMgPSBsZTMyX3RvX2NwdSh0cC0+cnhfcmluZ1tlbnRyeV0uc3RhdHVzKTsKKwkJc2hvcnQgcGt0X2xlbjsKIAogCQlpZiAodHVsaXBfZGVidWcgPiA1KQogCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBJbiB0dWxpcF9yeCgpLCBlbnRyeSAlZCAlOC44eC5cbiIsCiAJCQkJICAgZGV2LT5uYW1lLCBlbnRyeSwgc3RhdHVzKTsKIAkJaWYgKC0tcnhfd29ya19saW1pdCA8IDApCiAJCQlicmVhazsKLQkJaWYgKChzdGF0dXMgJiAweDM4MDA4MzAwKSAhPSAweDAzMDApIHsKLQkJCWlmICgoc3RhdHVzICYgMHgzODAwMDMwMCkgIT0gMHgwMzAwKSB7CisKKwkJLyoKKwkJICBPbWl0IHRoZSBmb3VyIG9jdGV0IENSQyBmcm9tIHRoZSBsZW5ndGguCisJCSAgKE1heSBub3QgYmUgY29uc2lkZXJlZCB2YWxpZCB1bnRpbCB3ZSBoYXZlCisJCSAgY2hlY2tlZCBzdGF0dXMgZm9yIFJ4TGVuZ3RoT3ZlcjIwNDcgYml0cykKKwkJKi8KKwkJcGt0X2xlbiA9ICgoc3RhdHVzID4+IDE2KSAmIDB4N2ZmKSAtIDQ7CisJCS8qCisJCSAgTWF4aW11bSBwa3RfbGVuIGlzIDE1MTggKDE1MTQgKyB2bGFuIGhlYWRlcikKKwkJICBBbnl0aGluZyBoaWdoZXIgdGhhbiB0aGlzIGlzIGFsd2F5cyBpbnZhbGlkCisJCSAgcmVnYXJkbGVzcyBvZiBSeExlbmd0aE92ZXIyMDQ3IGJpdHMKKwkJKi8KKworCQlpZiAoKHN0YXR1cyAmIChSeExlbmd0aE92ZXIyMDQ3IHwKKwkJCSAgICAgICBSeERlc2NDUkNFcnJvciB8CisJCQkgICAgICAgUnhEZXNjQ29sbGlzaW9uU2VlbiB8CisJCQkgICAgICAgUnhEZXNjUnVudCB8CisJCQkgICAgICAgUnhEZXNjRGVzY0VyciB8CisJCQkgICAgICAgUnhXaG9sZVBrdCkpICAgICAgICAhPSBSeFdob2xlUGt0CisJCSAgICAgfHwgcGt0X2xlbiA+IDE1MTgpIHsKKwkJCWlmICgoc3RhdHVzICYgKFJ4TGVuZ3RoT3ZlcjIwNDcgfAorCQkJICAgICBSeFdob2xlUGt0KSkgICAgICAgICAhPSBSeFdob2xlUGt0KSB7CiAJCQkJLyogSW5nb3JlIGVhcmxpZXIgYnVmZmVycy4gKi8KIAkJCQlpZiAoKHN0YXR1cyAmIDB4ZmZmZikgIT0gMHg3ZmZmKSB7CiAJCQkJCWlmICh0dWxpcF9kZWJ1ZyA+IDEpCkBAIC0zNzIsMzEgKzQwNywyMiBAQAogCQkJCQkJCSAgIGRldi0+bmFtZSwgc3RhdHVzKTsKIAkJCQkJdHAtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKIAkJCQl9Ci0JCQl9IGVsc2UgaWYgKHN0YXR1cyAmIFJ4RGVzY0ZhdGFsRXJyKSB7CisJCQl9IGVsc2UgewogCQkJCS8qIFRoZXJlIHdhcyBhIGZhdGFsIGVycm9yLiAqLwogCQkJCWlmICh0dWxpcF9kZWJ1ZyA+IDIpCiAJCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogUmVjZWl2ZSBlcnJvciwgUnggc3RhdHVzICU4Ljh4LlxuIiwKIAkJCQkJCSAgIGRldi0+bmFtZSwgc3RhdHVzKTsKIAkJCQl0cC0+c3RhdHMucnhfZXJyb3JzKys7IC8qIGVuZCBvZiBhIHBhY2tldC4qLwotCQkJCWlmIChzdGF0dXMgJiAweDA4OTApIHRwLT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CisJCQkJaWYgKHBrdF9sZW4gPiAxNTE4IHx8CisJCQkJICAgIChzdGF0dXMgJiBSeERlc2NSdW50KSkKKwkJCQkJdHAtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKIAkJCQlpZiAoc3RhdHVzICYgMHgwMDA0KSB0cC0+c3RhdHMucnhfZnJhbWVfZXJyb3JzKys7CiAJCQkJaWYgKHN0YXR1cyAmIDB4MDAwMikgdHAtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKIAkJCQlpZiAoc3RhdHVzICYgMHgwMDAxKSB0cC0+c3RhdHMucnhfZmlmb19lcnJvcnMrKzsKIAkJCX0KIAkJfSBlbHNlIHsKLQkJCS8qIE9taXQgdGhlIGZvdXIgb2N0ZXQgQ1JDIGZyb20gdGhlIGxlbmd0aC4gKi8KLQkJCXNob3J0IHBrdF9sZW4gPSAoKHN0YXR1cyA+PiAxNikgJiAweDdmZikgLSA0OwogCQkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAotI2lmbmRlZiBmaW5hbF92ZXJzaW9uCi0JCQlpZiAocGt0X2xlbiA+IDE1MTgpIHsKLQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogQm9ndXMgcGFja2V0IHNpemUgb2YgJWQgKCUjeCkuXG4iLAotCQkJCQkgICBkZXYtPm5hbWUsIHBrdF9sZW4sIHBrdF9sZW4pOwotCQkJCXBrdF9sZW4gPSAxNTE4OwotCQkJCXRwLT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7Ci0JCQl9Ci0jZW5kaWYKLQogCQkJLyogQ2hlY2sgaWYgdGhlIHBhY2tldCBpcyBsb25nIGVub3VnaCB0byBhY2NlcHQgd2l0aG91dCBjb3B5aW5nCiAJCQkgICB0byBhIG1pbmltYWxseS1zaXplZCBza2J1ZmYuICovCiAJCQlpZiAocGt0X2xlbiA8IHR1bGlwX3J4X2NvcHlicmVhawpAQCAtNTE5LDcgKzU0NSw3IEBACiAJCQlyeGQrKzsKIAkJCS8qIE1hc2sgUlggaW50cnMgYW5kIGFkZCB0aGUgZGV2aWNlIHRvIHBvbGwgbGlzdC4gKi8KIAkJCWlvd3JpdGUzMih0dWxpcF90YmxbdHAtPmNoaXBfaWRdLnZhbGlkX2ludHJzJn5SeFBvbGxJbnQsIGlvYWRkciArIENTUjcpOwotCQkJbmV0aWZfcnhfc2NoZWR1bGUoJnRwLT5uYXBpKTsKKwkJCW5hcGlfc2NoZWR1bGUoJnRwLT5uYXBpKTsKIAogCQkJaWYgKCEoY3NyNSZ+KEFibm9ybWFsSW50cnxOb3JtYWxJbnRyfFJ4UG9sbEludHxUUExua1Bhc3MpKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bGlwL21lZGlhLmMgYi9kcml2ZXJzL25ldC90dWxpcC9tZWRpYS5jCmluZGV4IDkxY2Y5YzguLmRhZGRmYTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bGlwL21lZGlhLmMKKysrIGIvZHJpdmVycy9uZXQvdHVsaXAvbWVkaWEuYwpAQCAtNjksMTEgKzY5LDEwIEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdHAtPm1paV9sb2NrLCBmbGFncyk7CiAJaWYgKHRwLT5jaGlwX2lkID09IExDODJDMTY4KSB7Ci0JCWludCBpID0gMTAwMDsKIAkJaW93cml0ZTMyKDB4NjAwMjAwMDAgKyAocGh5X2lkPDwyMykgKyAobG9jYXRpb248PDE4KSwgaW9hZGRyICsgMHhBMCk7CiAJCWlvcmVhZDMyKGlvYWRkciArIDB4QTApOwogCQlpb3JlYWQzMihpb2FkZHIgKyAweEEwKTsKLQkJd2hpbGUgKC0taSA+IDApIHsKKwkJZm9yIChpID0gMTAwMDsgaSA+PSAwOyAtLWkpIHsKIAkJCWJhcnJpZXIoKTsKIAkJCWlmICggISAoKHJldHZhbCA9IGlvcmVhZDMyKGlvYWRkciArIDB4QTApKSAmIDB4ODAwMDAwMDApKQogCQkJCWJyZWFrOwpAQCAtMTMxLDEzICsxMzAsMTIgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZ0cC0+bWlpX2xvY2ssIGZsYWdzKTsKIAlpZiAodHAtPmNoaXBfaWQgPT0gTEM4MkMxNjgpIHsKLQkJaW50IGkgPSAxMDAwOwogCQlpb3dyaXRlMzIoY21kLCBpb2FkZHIgKyAweEEwKTsKLQkJZG8geworCQlmb3IgKGkgPSAxMDAwOyBpID49IDA7IC0taSkgewogCQkJYmFycmllcigpOwogCQkJaWYgKCAhIChpb3JlYWQzMihpb2FkZHIgKyAweEEwKSAmIDB4ODAwMDAwMDApKQogCQkJCWJyZWFrOwotCQl9IHdoaWxlICgtLWkgPiAwKTsKKwkJfQogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0cC0+bWlpX2xvY2ssIGZsYWdzKTsKIAkJcmV0dXJuOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bGlwL3R1bGlwLmggYi9kcml2ZXJzL25ldC90dWxpcC90dWxpcC5oCmluZGV4IDE5YWJiYzMuLjBhZmEyZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bGlwL3R1bGlwLmgKKysrIGIvZHJpdmVycy9uZXQvdHVsaXAvdHVsaXAuaApAQCAtMjAxLDggKzIwMSwzOCBAQAogCURlc2NTdGFydFBrdCA9IDB4MjAwMDAwMDAsCiAJRGVzY0VuZFJpbmcgID0gMHgwMjAwMDAwMCwKIAlEZXNjVXNlTGluayAgPSAweDAxMDAwMDAwLAotCVJ4RGVzY0ZhdGFsRXJyID0gMHgwMDgwMDAsCisKKwkvKgorCSAqIEVycm9yIHN1bW1hcnkgZmxhZyBpcyBsb2dpY2FsIG9yIG9mICdDUkMgRXJyb3InLCAnQ29sbGlzaW9uIFNlZW4nLAorCSAqICdGcmFtZSBUb28gTG9uZycsICdSdW50JyBhbmQgJ0Rlc2NyaXB0b3IgRXJyb3InIGZsYWdzIGdlbmVyYXRlZAorCSAqIHdpdGhpbiB0dWxpcCBjaGlwLgorCSAqLworCVJ4RGVzY0Vycm9yU3VtbWFyeSA9IDB4ODAwMCwKKwlSeERlc2NDUkNFcnJvciA9IDB4MDAwMiwKKwlSeERlc2NDb2xsaXNpb25TZWVuID0gMHgwMDQwLAorCisJLyoKKwkgKiAnRnJhbWUgVG9vIExvbmcnIGZsYWcgaXMgc2V0IGlmIHBhY2tldCBsZW5ndGggaW5jbHVkaW5nIENSQyBleGNlZWRzCisJICogMTUxOC4gIEhvd2V2ZXIsIGEgZnVsbCBzaXplZCBWTEFOIHRhZ2dlZCBmcmFtZSBpcyAxNTIyIGJ5dGVzCisJICogaW5jbHVkaW5nIENSQy4KKwkgKgorCSAqIFRoZSB0dWxpcCBjaGlwIGRvZXMgbm90IGJsb2NrIG92ZXJzaXplZCBmcmFtZXMsIGFuZCBpZiB0aGlzIGZsYWcgaXMKKwkgKiBzZXQgb24gYSByZWNlaXZlIGRlc2NyaXB0b3IgaXQgZG9lcyBub3QgaW5kaWNhdGUgdGhlIGZyYW1lIGhhcyBiZWVuCisJICogdHJ1bmNhdGVkLiAgVGhlIHJlY2VpdmUgZGVzY3JpcHRvciBhbHNvIGluY2x1ZGVzIHRoZSBhY3R1YWwgbGVuZ3RoLgorCSAqIFRoZXJlZm9yZSB3ZSBjYW4gc2FmZXR5IGlnbm9yZSB0aGlzIGZsYWcgYW5kIGNoZWNrIHRoZSBsZW5ndGgKKwkgKiBvdXJzZWx2ZXMuCisJICovCisJUnhEZXNjRnJhbWVUb29Mb25nID0gMHgwMDgwLAorCVJ4RGVzY1J1bnQgPSAweDA4MDAsCisJUnhEZXNjRGVzY0VyciA9IDB4NDAwMCwKIAlSeFdob2xlUGt0ICAgPSAweDAwMDAwMzAwLAorCS8qCisJICogVG9wIHRocmVlIGJpdHMgb2YgMTQgYml0IGZyYW1lIGxlbmd0aCAoc3RhdHVzIGJpdHMgMjctMjkpIHNob3VsZAorCSAqIG5ldmVyIGJlIHNldCBhcyB0aGF0IHdvdWxkIG1ha2UgZnJhbWUgb3ZlciAyMDQ3IGJ5dGVzLiBUaGUgUmVjZWl2ZQorCSAqIFdhdGNoZG9nIGZsYWcgKGJpdCA0KSBtYXkgaW5kaWNhdGUgdGhlIGxlbmd0aCBpcyBvdmVyIDIwNDggYW5kIHRoZQorCSAqIGxlbmd0aCBmaWVsZCBpcyBpbnZhbGlkLgorCSAqLworCVJ4TGVuZ3RoT3ZlcjIwNDcgPSAweDM4MDAwMDEwCiB9OwogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bGlwL3VsaTUyNnguYyBiL2RyaXZlcnMvbmV0L3R1bGlwL3VsaTUyNnguYwppbmRleCAwMzBlMDJlLi5jMjI3ZGIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC91bGk1MjZ4LmMKKysrIGIvZHJpdmVycy9uZXQvdHVsaXAvdWxpNTI2eC5jCkBAIC0yMDAsNyArMjAwLDcgQEAKIAogLyogR2xvYmFsIHZhcmlhYmxlIGRlY2xhcmF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiBzdGF0aWMgaW50IF9fZGV2aW5pdGRhdGEgcHJpbnRlZF92ZXJzaW9uOwotc3RhdGljIGNoYXIgdmVyc2lvbltdIF9fZGV2aW5pdGRhdGEgPQorc3RhdGljIGNvbnN0IGNoYXIgdmVyc2lvbltdIF9fZGV2aW5pdGNvbnN0ID0KIAlLRVJOX0lORk8gRFJWX05BTUUgIjogVUxpIE01MjYxL001MjYzIG5ldCBkcml2ZXIsIHZlcnNpb24gIgogCURSVl9WRVJTSU9OICIgKCIgRFJWX1JFTERBVEUgIilcbiI7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bGlwL3dpbmJvbmQtODQwLmMgYi9kcml2ZXJzL25ldC90dWxpcC93aW5ib25kLTg0MC5jCmluZGV4IGY0NjdiZjguLmM2MWEwMWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bGlwL3dpbmJvbmQtODQwLmMKKysrIGIvZHJpdmVycy9uZXQvdHVsaXAvd2luYm9uZC04NDAuYwpAQCAtMTM5LDkgKzEzOSwxMCBAQAogI2RlZmluZSBQS1RfQlVGX1NaCQkxNTM2CS8qIFNpemUgb2YgZWFjaCB0ZW1wb3JhcnkgUnggYnVmZmVyLiovCiAKIC8qIFRoZXNlIGlkZW50aWZ5IHRoZSBkcml2ZXIgYmFzZSB2ZXJzaW9uIGFuZCBtYXkgbm90IGJlIHJlbW92ZWQuICovCi1zdGF0aWMgY2hhciB2ZXJzaW9uW10gPQotS0VSTl9JTkZPIERSVl9OQU1FICIuYzp2IiBEUlZfVkVSU0lPTiAiICgyLjQgcG9ydCkgIiBEUlZfUkVMREFURSAiICBEb25hbGQgQmVja2VyIDxiZWNrZXJAc2N5bGQuY29tPlxuIgotS0VSTl9JTkZPICIgIGh0dHA6Ly93d3cuc2N5bGQuY29tL25ldHdvcmsvZHJpdmVycy5odG1sXG4iOworc3RhdGljIGNvbnN0IGNoYXIgdmVyc2lvbltdIF9faW5pdGNvbnN0ID0KKwlLRVJOX0lORk8gRFJWX05BTUUgIi5jOnYiIERSVl9WRVJTSU9OICIgKDIuNCBwb3J0KSAiCisJRFJWX1JFTERBVEUgIiAgRG9uYWxkIEJlY2tlciA8YmVja2VyQHNjeWxkLmNvbT5cbiIKKwlLRVJOX0lORk8gIiAgaHR0cDovL3d3dy5zY3lsZC5jb20vbmV0d29yay9kcml2ZXJzLmh0bWxcbiI7CiAKIE1PRFVMRV9BVVRIT1IoIkRvbmFsZCBCZWNrZXIgPGJlY2tlckBzY3lsZC5jb20+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIldpbmJvbmQgVzg5Yzg0MCBFdGhlcm5ldCBkcml2ZXIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bi5jIGIvZHJpdmVycy9uZXQvdHVuLmMKaW5kZXggMDlmZWEzMS4uYTFiMDY5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVuLmMKKysrIGIvZHJpdmVycy9uZXQvdHVuLmMKQEAgLTYzLDYgKzYzLDggQEAKICNpbmNsdWRlIDxsaW51eC92aXJ0aW9fbmV0Lmg+CiAjaW5jbHVkZSA8bmV0L25ldF9uYW1lc3BhY2UuaD4KICNpbmNsdWRlIDxuZXQvbmV0bnMvZ2VuZXJpYy5oPgorI2luY2x1ZGUgPG5ldC9ydG5ldGxpbmsuaD4KKyNpbmNsdWRlIDxuZXQvc29jay5oPgogCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CkBAIC04NywyNiArODksMTI3IEBACiAJdW5zaWduZWQgY2hhcglhZGRyW0ZMVF9FWEFDVF9DT1VOVF1bRVRIX0FMRU5dOwogfTsKIAorc3RydWN0IHR1bl9maWxlIHsKKwlhdG9taWNfdCBjb3VudDsKKwlzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuOworCXN0cnVjdCBuZXQgKm5ldDsKKwl3YWl0X3F1ZXVlX2hlYWRfdAlyZWFkX3dhaXQ7Cit9OworCitzdHJ1Y3QgdHVuX3NvY2s7CisKIHN0cnVjdCB0dW5fc3RydWN0IHsKLQlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICBsaXN0OworCXN0cnVjdCB0dW5fZmlsZQkJKnRmaWxlOwogCXVuc2lnbmVkIGludCAJCWZsYWdzOwotCWludAkJCWF0dGFjaGVkOwogCXVpZF90CQkJb3duZXI7CiAJZ2lkX3QJCQlncm91cDsKIAotCXdhaXRfcXVldWVfaGVhZF90CXJlYWRfd2FpdDsKIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkCXJlYWRxOwogCiAJc3RydWN0IG5ldF9kZXZpY2UJKmRldjsKIAlzdHJ1Y3QgZmFzeW5jX3N0cnVjdAkqZmFzeW5jOwogCiAJc3RydWN0IHRhcF9maWx0ZXIgICAgICAgdHhmbHQ7CisJc3RydWN0IHNvY2sJCSpzazsKKwlzdHJ1Y3Qgc29ja2V0CQlzb2NrZXQ7CiAKICNpZmRlZiBUVU5fREVCVUcKIAlpbnQgZGVidWc7CiAjZW5kaWYKIH07CiAKK3N0cnVjdCB0dW5fc29jayB7CisJc3RydWN0IHNvY2sJCXNrOworCXN0cnVjdCB0dW5fc3RydWN0CSp0dW47Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCB0dW5fc29jayAqdHVuX3NrKHN0cnVjdCBzb2NrICpzaykKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHNrLCBzdHJ1Y3QgdHVuX3NvY2ssIHNrKTsKK30KKworc3RhdGljIGludCB0dW5fYXR0YWNoKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCB0dW5fZmlsZSAqdGZpbGUgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQgPSBjdXJyZW50X2NyZWQoKTsKKwlpbnQgZXJyOworCisJQVNTRVJUX1JUTkwoKTsKKworCS8qIENoZWNrIHBlcm1pc3Npb25zICovCisJaWYgKCgodHVuLT5vd25lciAhPSAtMSAmJiBjcmVkLT5ldWlkICE9IHR1bi0+b3duZXIpIHx8CisJICAgICAodHVuLT5ncm91cCAhPSAtMSAmJiAhaW5fZWdyb3VwX3AodHVuLT5ncm91cCkpKSAmJgorCQkhY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKKwkJcmV0dXJuIC1FUEVSTTsKKworCW5ldGlmX3R4X2xvY2tfYmgodHVuLT5kZXYpOworCisJZXJyID0gLUVJTlZBTDsKKwlpZiAodGZpbGUtPnR1bikKKwkJZ290byBvdXQ7CisKKwllcnIgPSAtRUJVU1k7CisJaWYgKHR1bi0+dGZpbGUpCisJCWdvdG8gb3V0OworCisJZXJyID0gMDsKKwl0ZmlsZS0+dHVuID0gdHVuOworCXR1bi0+dGZpbGUgPSB0ZmlsZTsKKwlkZXZfaG9sZCh0dW4tPmRldik7CisJYXRvbWljX2luYygmdGZpbGUtPmNvdW50KTsKKworb3V0OgorCW5ldGlmX3R4X3VubG9ja19iaCh0dW4tPmRldik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgX190dW5fZGV0YWNoKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4pCit7CisJc3RydWN0IHR1bl9maWxlICp0ZmlsZSA9IHR1bi0+dGZpbGU7CisKKwkvKiBEZXRhY2ggZnJvbSBuZXQgZGV2aWNlICovCisJbmV0aWZfdHhfbG9ja19iaCh0dW4tPmRldik7CisJdGZpbGUtPnR1biA9IE5VTEw7CisJdHVuLT50ZmlsZSA9IE5VTEw7CisJbmV0aWZfdHhfdW5sb2NrX2JoKHR1bi0+ZGV2KTsKKworCS8qIERyb3AgcmVhZCBxdWV1ZSAqLworCXNrYl9xdWV1ZV9wdXJnZSgmdHVuLT5yZWFkcSk7CisKKwkvKiBEcm9wIHRoZSBleHRyYSBjb3VudCBvbiB0aGUgbmV0IGRldmljZSAqLworCWRldl9wdXQodHVuLT5kZXYpOworfQorCitzdGF0aWMgdm9pZCB0dW5fZGV0YWNoKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4pCit7CisJcnRubF9sb2NrKCk7CisJX190dW5fZGV0YWNoKHR1bik7CisJcnRubF91bmxvY2soKTsKK30KKworc3RhdGljIHN0cnVjdCB0dW5fc3RydWN0ICpfX3R1bl9nZXQoc3RydWN0IHR1bl9maWxlICp0ZmlsZSkKK3sKKwlzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuID0gTlVMTDsKKworCWlmIChhdG9taWNfaW5jX25vdF96ZXJvKCZ0ZmlsZS0+Y291bnQpKQorCQl0dW4gPSB0ZmlsZS0+dHVuOworCisJcmV0dXJuIHR1bjsKK30KKworc3RhdGljIHN0cnVjdCB0dW5fc3RydWN0ICp0dW5fZ2V0KHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBfX3R1bl9nZXQoZmlsZS0+cHJpdmF0ZV9kYXRhKTsKK30KKworc3RhdGljIHZvaWQgdHVuX3B1dChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuKQoreworCXN0cnVjdCB0dW5fZmlsZSAqdGZpbGUgPSB0dW4tPnRmaWxlOworCisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnRmaWxlLT5jb3VudCkpCisJCXR1bl9kZXRhY2godGZpbGUtPnR1bik7Cit9CisKIC8qIFRBUCBmaWx0ZXJ0aW5nICovCiBzdGF0aWMgdm9pZCBhZGRyX2hhc2hfc2V0KHUzMiAqbWFzaywgY29uc3QgdTggKmFkZHIpCiB7CkBAIC0yMTksMTMgKzMyMiwyMyBAQAogCiAvKiBOZXR3b3JrIGRldmljZSBwYXJ0IG9mIHRoZSBkcml2ZXIgKi8KIAotc3RhdGljIGludCB0dW5fbmV0X2lkOwotc3RydWN0IHR1bl9uZXQgewotCXN0cnVjdCBsaXN0X2hlYWQgZGV2X2xpc3Q7Ci19OwotCiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHR1bl9ldGh0b29sX29wczsKIAorLyogTmV0IGRldmljZSBkZXRhY2ggZnJvbSBmZC4gKi8KK3N0YXRpYyB2b2lkIHR1bl9uZXRfdW5pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHR1bl9maWxlICp0ZmlsZSA9IHR1bi0+dGZpbGU7CisKKwkvKiBJbmZvcm0gdGhlIG1ldGhvZHMgdGhleSBuZWVkIHRvIHN0b3AgdXNpbmcgdGhlIGRldi4KKwkgKi8KKwlpZiAodGZpbGUpIHsKKwkJd2FrZV91cF9hbGwoJnRmaWxlLT5yZWFkX3dhaXQpOworCQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmdGZpbGUtPmNvdW50KSkKKwkJCV9fdHVuX2RldGFjaCh0dW4pOworCX0KK30KKwogLyogTmV0IGRldmljZSBvcGVuLiAqLwogc3RhdGljIGludCB0dW5fbmV0X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKQEAgLTI0OCw3ICszNjEsNyBAQAogCURCRyhLRVJOX0lORk8gIiVzOiB0dW5fbmV0X3htaXQgJWRcbiIsIHR1bi0+ZGV2LT5uYW1lLCBza2ItPmxlbik7CiAKIAkvKiBEcm9wIHBhY2tldCBpZiBpbnRlcmZhY2UgaXMgbm90IGF0dGFjaGVkICovCi0JaWYgKCF0dW4tPmF0dGFjaGVkKQorCWlmICghdHVuLT50ZmlsZSkKIAkJZ290byBkcm9wOwogCiAJLyogRHJvcCBpZiB0aGUgZmlsdGVyIGRvZXMgbm90IGxpa2UgaXQuCkBAIC0yODAsNyArMzkzLDcgQEAKIAkvKiBOb3RpZnkgYW5kIHdha2UgdXAgcmVhZGVyIHByb2Nlc3MgKi8KIAlpZiAodHVuLT5mbGFncyAmIFRVTl9GQVNZTkMpCiAJCWtpbGxfZmFzeW5jKCZ0dW4tPmZhc3luYywgU0lHSU8sIFBPTExfSU4pOwotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdHVuLT5yZWFkX3dhaXQpOworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdHVuLT50ZmlsZS0+cmVhZF93YWl0KTsKIAlyZXR1cm4gMDsKIAogZHJvcDoKQEAgLTMxMiw2ICs0MjUsNyBAQAogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHR1bl9uZXRkZXZfb3BzID0geworCS5uZG9fdW5pbml0CQk9IHR1bl9uZXRfdW5pbml0LAogCS5uZG9fb3BlbgkJPSB0dW5fbmV0X29wZW4sCiAJLm5kb19zdG9wCQk9IHR1bl9uZXRfY2xvc2UsCiAJLm5kb19zdGFydF94bWl0CQk9IHR1bl9uZXRfeG1pdCwKQEAgLTMxOSw2ICs0MzMsNyBAQAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB0YXBfbmV0ZGV2X29wcyA9IHsKKwkubmRvX3VuaW5pdAkJPSB0dW5fbmV0X3VuaW5pdCwKIAkubmRvX29wZW4JCT0gdHVuX25ldF9vcGVuLAogCS5uZG9fc3RvcAkJPSB0dW5fbmV0X2Nsb3NlLAogCS5uZG9fc3RhcnRfeG1pdAkJPSB0dW5fbmV0X3htaXQsCkBAIC0zNjUsODYgKzQ4MCw2NiBAQAogLyogUG9sbCAqLwogc3RhdGljIHVuc2lnbmVkIGludCB0dW5fY2hyX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKiB3YWl0KQogewotCXN0cnVjdCB0dW5fc3RydWN0ICp0dW4gPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JdW5zaWduZWQgaW50IG1hc2sgPSBQT0xMT1VUIHwgUE9MTFdSTk9STTsKKwlzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB0dW5fc3RydWN0ICp0dW4gPSBfX3R1bl9nZXQodGZpbGUpOworCXN0cnVjdCBzb2NrICpzayA9IHR1bi0+c2s7CisJdW5zaWduZWQgaW50IG1hc2sgPSAwOwogCiAJaWYgKCF0dW4pCi0JCXJldHVybiAtRUJBREZEOworCQlyZXR1cm4gUE9MTEVSUjsKIAogCURCRyhLRVJOX0lORk8gIiVzOiB0dW5fY2hyX3BvbGxcbiIsIHR1bi0+ZGV2LT5uYW1lKTsKIAotCXBvbGxfd2FpdChmaWxlLCAmdHVuLT5yZWFkX3dhaXQsIHdhaXQpOworCXBvbGxfd2FpdChmaWxlLCAmdGZpbGUtPnJlYWRfd2FpdCwgd2FpdCk7CiAKIAlpZiAoIXNrYl9xdWV1ZV9lbXB0eSgmdHVuLT5yZWFkcSkpCiAJCW1hc2sgfD0gUE9MTElOIHwgUE9MTFJETk9STTsKIAorCWlmIChzb2NrX3dyaXRlYWJsZShzaykgfHwKKwkgICAgKCF0ZXN0X2FuZF9zZXRfYml0KFNPQ0tfQVNZTkNfTk9TUEFDRSwgJnNrLT5za19zb2NrZXQtPmZsYWdzKSAmJgorCSAgICAgc29ja193cml0ZWFibGUoc2spKSkKKwkJbWFzayB8PSBQT0xMT1VUIHwgUE9MTFdSTk9STTsKKworCWlmICh0dW4tPmRldi0+cmVnX3N0YXRlICE9IE5FVFJFR19SRUdJU1RFUkVEKQorCQltYXNrID0gUE9MTEVSUjsKKworCXR1bl9wdXQodHVuKTsKIAlyZXR1cm4gbWFzazsKIH0KIAogLyogcHJlcGFkIGlzIHRoZSBhbW91bnQgdG8gcmVzZXJ2ZSBhdCBmcm9udC4gIGxlbiBpcyBsZW5ndGggYWZ0ZXIgdGhhdC4KICAqIGxpbmVhciBpcyBhIGhpbnQgYXMgdG8gaG93IG11Y2ggdG8gY29weSAodXN1YWxseSBoZWFkZXJzKS4gKi8KLXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdHVuX2FsbG9jX3NrYihzaXplX3QgcHJlcGFkLCBzaXplX3QgbGVuLCBzaXplX3QgbGluZWFyLAotCQkJCSAgICAgZ2ZwX3QgZ2ZwKQorc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqdHVuX2FsbG9jX3NrYihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLAorCQkJCQkgICAgc2l6ZV90IHByZXBhZCwgc2l6ZV90IGxlbiwKKwkJCQkJICAgIHNpemVfdCBsaW5lYXIsIGludCBub2Jsb2NrKQogeworCXN0cnVjdCBzb2NrICpzayA9IHR1bi0+c2s7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQl1bnNpZ25lZCBpbnQgaTsKLQotCXNrYiA9IGFsbG9jX3NrYihwcmVwYWQgKyBsZW4sIGdmcHxfX0dGUF9OT1dBUk4pOwotCWlmIChza2IpIHsKLQkJc2tiX3Jlc2VydmUoc2tiLCBwcmVwYWQpOwotCQlza2JfcHV0KHNrYiwgbGVuKTsKLQkJcmV0dXJuIHNrYjsKLQl9CisJaW50IGVycjsKIAogCS8qIFVuZGVyIGEgcGFnZT8gIERvbid0IGJvdGhlciB3aXRoIHBhZ2VkIHNrYi4gKi8KIAlpZiAocHJlcGFkICsgbGVuIDwgUEFHRV9TSVpFKQotCQlyZXR1cm4gTlVMTDsKKwkJbGluZWFyID0gbGVuOwogCi0JLyogU3RhcnQgd2l0aCBhIG5vcm1hbCBza2IsIGFuZCBhZGQgcGFnZXMuICovCi0Jc2tiID0gYWxsb2Nfc2tiKHByZXBhZCArIGxpbmVhciwgZ2ZwKTsKKwlza2IgPSBzb2NrX2FsbG9jX3NlbmRfcHNrYihzaywgcHJlcGFkICsgbGluZWFyLCBsZW4gLSBsaW5lYXIsIG5vYmxvY2ssCisJCQkJICAgJmVycik7CiAJaWYgKCFza2IpCi0JCXJldHVybiBOVUxMOworCQlyZXR1cm4gRVJSX1BUUihlcnIpOwogCiAJc2tiX3Jlc2VydmUoc2tiLCBwcmVwYWQpOwogCXNrYl9wdXQoc2tiLCBsaW5lYXIpOwotCi0JbGVuIC09IGxpbmVhcjsKLQotCWZvciAoaSA9IDA7IGkgPCBNQVhfU0tCX0ZSQUdTOyBpKyspIHsKLQkJc2tiX2ZyYWdfdCAqZiA9ICZza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldOwotCi0JCWYtPnBhZ2UgPSBhbGxvY19wYWdlKGdmcHxfX0dGUF9aRVJPKTsKLQkJaWYgKCFmLT5wYWdlKQotCQkJYnJlYWs7Ci0KLQkJZi0+cGFnZV9vZmZzZXQgPSAwOwotCQlmLT5zaXplID0gUEFHRV9TSVpFOwotCi0JCXNrYi0+ZGF0YV9sZW4gKz0gUEFHRV9TSVpFOwotCQlza2ItPmxlbiArPSBQQUdFX1NJWkU7Ci0JCXNrYi0+dHJ1ZXNpemUgKz0gUEFHRV9TSVpFOwotCQlza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzKys7Ci0KLQkJaWYgKGxlbiA8IFBBR0VfU0laRSkgewotCQkJbGVuID0gMDsKLQkJCWJyZWFrOwotCQl9Ci0JCWxlbiAtPSBQQUdFX1NJWkU7Ci0JfQotCi0JLyogVG9vIGxhcmdlLCBvciBhbGxvYyBmYWlsPyAqLwotCWlmICh1bmxpa2VseShsZW4pKSB7Ci0JCWtmcmVlX3NrYihza2IpOwotCQlza2IgPSBOVUxMOwotCX0KKwlza2ItPmRhdGFfbGVuID0gbGVuIC0gbGluZWFyOworCXNrYi0+bGVuICs9IGxlbiAtIGxpbmVhcjsKIAogCXJldHVybiBza2I7CiB9CiAKIC8qIEdldCBwYWNrZXQgZnJvbSB1c2VyIHNwYWNlIGJ1ZmZlciAqLwotc3RhdGljIF9faW5saW5lX18gc3NpemVfdCB0dW5fZ2V0X3VzZXIoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IGlvdmVjICppdiwgc2l6ZV90IGNvdW50KQorc3RhdGljIF9faW5saW5lX18gc3NpemVfdCB0dW5fZ2V0X3VzZXIoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwKKwkJCQkgICAgICAgc3RydWN0IGlvdmVjICppdiwgc2l6ZV90IGNvdW50LAorCQkJCSAgICAgICBpbnQgbm9ibG9jaykKIHsKLQlzdHJ1Y3QgdHVuX3BpIHBpID0geyAwLCBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQKSB9OworCXN0cnVjdCB0dW5fcGkgcGkgPSB7IDAsIGNwdV90b19iZTE2KEVUSF9QX0lQKSB9OwogCXN0cnVjdCBza19idWZmICpza2I7CiAJc2l6ZV90IGxlbiA9IGNvdW50LCBhbGlnbiA9IDA7CiAJc3RydWN0IHZpcnRpb19uZXRfaGRyIGdzbyA9IHsgMCB9OwpAQCAtNDc0LDkgKzU2OSwxMSBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaWYgKCEoc2tiID0gdHVuX2FsbG9jX3NrYihhbGlnbiwgbGVuLCBnc28uaGRyX2xlbiwgR0ZQX0tFUk5FTCkpKSB7Ci0JCXR1bi0+ZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7Ci0JCXJldHVybiAtRU5PTUVNOworCXNrYiA9IHR1bl9hbGxvY19za2IodHVuLCBhbGlnbiwgbGVuLCBnc28uaGRyX2xlbiwgbm9ibG9jayk7CisJaWYgKElTX0VSUihza2IpKSB7CisJCWlmIChQVFJfRVJSKHNrYikgIT0gLUVBR0FJTikKKwkJCXR1bi0+ZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCXJldHVybiBQVFJfRVJSKHNrYik7CiAJfQogCiAJaWYgKHNrYl9jb3B5X2RhdGFncmFtX2Zyb21faW92ZWMoc2tiLCAwLCBpdiwgbGVuKSkgewpAQCAtNTYyLDE0ICs2NTksMjAgQEAKIHN0YXRpYyBzc2l6ZV90IHR1bl9jaHJfYWlvX3dyaXRlKHN0cnVjdCBraW9jYiAqaW9jYiwgY29uc3Qgc3RydWN0IGlvdmVjICppdiwKIAkJCSAgICAgIHVuc2lnbmVkIGxvbmcgY291bnQsIGxvZmZfdCBwb3MpCiB7Ci0Jc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biA9IGlvY2ItPmtpX2ZpbHAtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgZmlsZSAqZmlsZSA9IGlvY2ItPmtpX2ZpbHA7CisJc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biA9IHR1bl9nZXQoZmlsZSk7CisJc3NpemVfdCByZXN1bHQ7CiAKIAlpZiAoIXR1bikKIAkJcmV0dXJuIC1FQkFERkQ7CiAKIAlEQkcoS0VSTl9JTkZPICIlczogdHVuX2Nocl93cml0ZSAlbGRcbiIsIHR1bi0+ZGV2LT5uYW1lLCBjb3VudCk7CiAKLQlyZXR1cm4gdHVuX2dldF91c2VyKHR1biwgKHN0cnVjdCBpb3ZlYyAqKSBpdiwgaW92X2xlbmd0aChpdiwgY291bnQpKTsKKwlyZXN1bHQgPSB0dW5fZ2V0X3VzZXIodHVuLCAoc3RydWN0IGlvdmVjICopaXYsIGlvdl9sZW5ndGgoaXYsIGNvdW50KSwKKwkJCSAgICAgIGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKTsKKworCXR1bl9wdXQodHVuKTsKKwlyZXR1cm4gcmVzdWx0OwogfQogCiAvKiBQdXQgcGFja2V0IHRvIHRoZSB1c2VyIHNwYWNlIGJ1ZmZlciAqLwpAQCAtNjQyLDcgKzc0NSw4IEBACiAJCQkgICAgdW5zaWduZWQgbG9uZyBjb3VudCwgbG9mZl90IHBvcykKIHsKIAlzdHJ1Y3QgZmlsZSAqZmlsZSA9IGlvY2ItPmtpX2ZpbHA7Ci0Jc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB0dW5fc3RydWN0ICp0dW4gPSBfX3R1bl9nZXQodGZpbGUpOwogCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3NpemVfdCBsZW4sIHJldCA9IDA7CkBAIC02NTMsMTAgKzc1NywxMiBAQAogCURCRyhLRVJOX0lORk8gIiVzOiB0dW5fY2hyX3JlYWRcbiIsIHR1bi0+ZGV2LT5uYW1lKTsKIAogCWxlbiA9IGlvdl9sZW5ndGgoaXYsIGNvdW50KTsKLQlpZiAobGVuIDwgMCkKLQkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGxlbiA8IDApIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQogCi0JYWRkX3dhaXRfcXVldWUoJnR1bi0+cmVhZF93YWl0LCAmd2FpdCk7CisJYWRkX3dhaXRfcXVldWUoJnRmaWxlLT5yZWFkX3dhaXQsICZ3YWl0KTsKIAl3aGlsZSAobGVuKSB7CiAJCWN1cnJlbnQtPnN0YXRlID0gVEFTS19JTlRFUlJVUFRJQkxFOwogCkBAIC02NzAsNiArNzc2LDEwIEBACiAJCQkJcmV0ID0gLUVSRVNUQVJUU1lTOwogCQkJCWJyZWFrOwogCQkJfQorCQkJaWYgKHR1bi0+ZGV2LT5yZWdfc3RhdGUgIT0gTkVUUkVHX1JFR0lTVEVSRUQpIHsKKwkJCQlyZXQgPSAtRUlPOworCQkJCWJyZWFrOworCQkJfQogCiAJCQkvKiBOb3RoaW5nIHRvIHJlYWQsIGxldCdzIHNsZWVwICovCiAJCQlzY2hlZHVsZSgpOwpAQCAtNjgzLDggKzc5MywxMCBAQAogCX0KIAogCWN1cnJlbnQtPnN0YXRlID0gVEFTS19SVU5OSU5HOwotCXJlbW92ZV93YWl0X3F1ZXVlKCZ0dW4tPnJlYWRfd2FpdCwgJndhaXQpOworCXJlbW92ZV93YWl0X3F1ZXVlKCZ0ZmlsZS0+cmVhZF93YWl0LCAmd2FpdCk7CiAKK291dDoKKwl0dW5fcHV0KHR1bik7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNjkzLDU0ICs4MDUsNzggQEAKIAlzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnR1bi0+cmVhZHEpOwotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnR1bi0+cmVhZF93YWl0KTsKIAogCXR1bi0+b3duZXIgPSAtMTsKIAl0dW4tPmdyb3VwID0gLTE7CiAKIAlkZXYtPmV0aHRvb2xfb3BzID0gJnR1bl9ldGh0b29sX29wczsKIAlkZXYtPmRlc3RydWN0b3IgPSBmcmVlX25ldGRldjsKLQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfTkVUTlNfTE9DQUw7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuX2dldF9ieV9uYW1lKHN0cnVjdCB0dW5fbmV0ICp0biwgY29uc3QgY2hhciAqbmFtZSkKKy8qIFRyaXZpYWwgc2V0IG9mIG5ldGxpbmsgb3BzIHRvIGFsbG93IGRlbGV0aW5nIHR1biBvciB0YXAKKyAqIGRldmljZSB3aXRoIG5ldGxpbmsuCisgKi8KK3N0YXRpYyBpbnQgdHVuX3ZhbGlkYXRlKHN0cnVjdCBubGF0dHIgKnRiW10sIHN0cnVjdCBubGF0dHIgKmRhdGFbXSkKK3sKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIHR1bl9saW5rX29wcyBfX3JlYWRfbW9zdGx5ID0geworCS5raW5kCQk9IERSVl9OQU1FLAorCS5wcml2X3NpemUJPSBzaXplb2Yoc3RydWN0IHR1bl9zdHJ1Y3QpLAorCS5zZXR1cAkJPSB0dW5fc2V0dXAsCisJLnZhbGlkYXRlCT0gdHVuX3ZhbGlkYXRlLAorfTsKKworc3RhdGljIHZvaWQgdHVuX3NvY2tfd3JpdGVfc3BhY2Uoc3RydWN0IHNvY2sgKnNrKQogewogCXN0cnVjdCB0dW5fc3RydWN0ICp0dW47CiAKLQlBU1NFUlRfUlROTCgpOwotCWxpc3RfZm9yX2VhY2hfZW50cnkodHVuLCAmdG4tPmRldl9saXN0LCBsaXN0KSB7Ci0JCWlmICghc3RybmNtcCh0dW4tPmRldi0+bmFtZSwgbmFtZSwgSUZOQU1TSVopKQotCQkgICAgcmV0dXJuIHR1bjsKLQl9CisJaWYgKCFzb2NrX3dyaXRlYWJsZShzaykpCisJCXJldHVybjsKIAotCXJldHVybiBOVUxMOworCWlmIChzay0+c2tfc2xlZXAgJiYgd2FpdHF1ZXVlX2FjdGl2ZShzay0+c2tfc2xlZXApKQorCQl3YWtlX3VwX2ludGVycnVwdGlibGVfc3luYyhzay0+c2tfc2xlZXApOworCisJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoU09DS19BU1lOQ19OT1NQQUNFLCAmc2stPnNrX3NvY2tldC0+ZmxhZ3MpKQorCQlyZXR1cm47CisKKwl0dW4gPSBjb250YWluZXJfb2Yoc2ssIHN0cnVjdCB0dW5fc29jaywgc2spLT50dW47CisJa2lsbF9mYXN5bmMoJnR1bi0+ZmFzeW5jLCBTSUdJTywgUE9MTF9PVVQpOwogfQogCitzdGF0aWMgdm9pZCB0dW5fc29ja19kZXN0cnVjdChzdHJ1Y3Qgc29jayAqc2spCit7CisJZGV2X3B1dChjb250YWluZXJfb2Yoc2ssIHN0cnVjdCB0dW5fc29jaywgc2spLT50dW4tPmRldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcHJvdG8gdHVuX3Byb3RvID0geworCS5uYW1lCQk9ICJ0dW4iLAorCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub2JqX3NpemUJPSBzaXplb2Yoc3RydWN0IHR1bl9zb2NrKSwKK307CisKIHN0YXRpYyBpbnQgdHVuX3NldF9pZmYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGlmcmVxICppZnIpCiB7Ci0Jc3RydWN0IHR1bl9uZXQgKnRuOworCXN0cnVjdCBzb2NrICpzazsKIAlzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Ci0JY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQgPSBjdXJyZW50X2NyZWQoKTsKKwlzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCWludCBlcnI7CiAKLQl0biA9IG5ldF9nZW5lcmljKG5ldCwgdHVuX25ldF9pZCk7Ci0JdHVuID0gdHVuX2dldF9ieV9uYW1lKHRuLCBpZnItPmlmcl9uYW1lKTsKLQlpZiAodHVuKSB7Ci0JCWlmICh0dW4tPmF0dGFjaGVkKQotCQkJcmV0dXJuIC1FQlVTWTsKKwlkZXYgPSBfX2Rldl9nZXRfYnlfbmFtZShuZXQsIGlmci0+aWZyX25hbWUpOworCWlmIChkZXYpIHsKKwkJaWYgKChpZnItPmlmcl9mbGFncyAmIElGRl9UVU4pICYmIGRldi0+bmV0ZGV2X29wcyA9PSAmdHVuX25ldGRldl9vcHMpCisJCQl0dW4gPSBuZXRkZXZfcHJpdihkZXYpOworCQllbHNlIGlmICgoaWZyLT5pZnJfZmxhZ3MgJiBJRkZfVEFQKSAmJiBkZXYtPm5ldGRldl9vcHMgPT0gJnRhcF9uZXRkZXZfb3BzKQorCQkJdHVuID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwkJZWxzZQorCQkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJLyogQ2hlY2sgcGVybWlzc2lvbnMgKi8KLQkJaWYgKCgodHVuLT5vd25lciAhPSAtMSAmJgotCQkgICAgICBjcmVkLT5ldWlkICE9IHR1bi0+b3duZXIpIHx8Ci0JCSAgICAgKHR1bi0+Z3JvdXAgIT0gLTEgJiYKLQkJICAgICAgY3JlZC0+ZWdpZCAhPSB0dW4tPmdyb3VwKSkgJiYKLQkJICAgICFjYXBhYmxlKENBUF9ORVRfQURNSU4pKSB7Ci0JCQlyZXR1cm4gLUVQRVJNOwotCQl9CisJCWVyciA9IHR1bl9hdHRhY2godHVuLCBmaWxlKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOwogCX0KLQllbHNlIGlmIChfX2Rldl9nZXRfYnlfbmFtZShuZXQsIGlmci0+aWZyX25hbWUpKQotCQlyZXR1cm4gLUVJTlZBTDsKIAllbHNlIHsKIAkJY2hhciAqbmFtZTsKIAkJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CkBAIC03NzEsMjUgKzkwNyw0NSBAQAogCQkJcmV0dXJuIC1FTk9NRU07CiAKIAkJZGV2X25ldF9zZXQoZGV2LCBuZXQpOworCQlkZXYtPnJ0bmxfbGlua19vcHMgPSAmdHVuX2xpbmtfb3BzOwogCiAJCXR1biA9IG5ldGRldl9wcml2KGRldik7CiAJCXR1bi0+ZGV2ID0gZGV2OwogCQl0dW4tPmZsYWdzID0gZmxhZ3M7CiAJCXR1bi0+dHhmbHQuY291bnQgPSAwOwogCisJCWVyciA9IC1FTk9NRU07CisJCXNrID0gc2tfYWxsb2MobmV0LCBBRl9VTlNQRUMsIEdGUF9LRVJORUwsICZ0dW5fcHJvdG8pOworCQlpZiAoIXNrKQorCQkJZ290byBlcnJfZnJlZV9kZXY7CisKKwkJLyogVGhpcyByZWYgY291bnQgaXMgZm9yIHR1bi0+c2suICovCisJCWRldl9ob2xkKGRldik7CisJCXNvY2tfaW5pdF9kYXRhKCZ0dW4tPnNvY2tldCwgc2spOworCQlzay0+c2tfd3JpdGVfc3BhY2UgPSB0dW5fc29ja193cml0ZV9zcGFjZTsKKwkJc2stPnNrX2Rlc3RydWN0ID0gdHVuX3NvY2tfZGVzdHJ1Y3Q7CisJCXNrLT5za19zbmRidWYgPSBJTlRfTUFYOworCQlzay0+c2tfc2xlZXAgPSAmdGZpbGUtPnJlYWRfd2FpdDsKKworCQl0dW4tPnNrID0gc2s7CisJCWNvbnRhaW5lcl9vZihzaywgc3RydWN0IHR1bl9zb2NrLCBzayktPnR1biA9IHR1bjsKKwogCQl0dW5fbmV0X2luaXQoZGV2KTsKIAogCQlpZiAoc3RyY2hyKGRldi0+bmFtZSwgJyUnKSkgewogCQkJZXJyID0gZGV2X2FsbG9jX25hbWUoZGV2LCBkZXYtPm5hbWUpOwogCQkJaWYgKGVyciA8IDApCi0JCQkJZ290byBlcnJfZnJlZV9kZXY7CisJCQkJZ290byBlcnJfZnJlZV9zazsKIAkJfQogCisJCWVyciA9IC1FSU5WQUw7CiAJCWVyciA9IHJlZ2lzdGVyX25ldGRldmljZSh0dW4tPmRldik7CiAJCWlmIChlcnIgPCAwKQogCQkJZ290byBlcnJfZnJlZV9kZXY7CiAKLQkJbGlzdF9hZGQoJnR1bi0+bGlzdCwgJnRuLT5kZXZfbGlzdCk7CisJCWVyciA9IHR1bl9hdHRhY2godHVuLCBmaWxlKTsKKwkJaWYgKGVyciA8IDApCisJCQlnb3RvIGVycl9mcmVlX2RldjsKIAl9CiAKIAlEQkcoS0VSTl9JTkZPICIlczogdHVuX3NldF9pZmZcbiIsIHR1bi0+ZGV2LT5uYW1lKTsKQEAgLTgwOSwxMCArOTY1LDYgQEAKIAllbHNlCiAJCXR1bi0+ZmxhZ3MgJj0gflRVTl9WTkVUX0hEUjsKIAotCWZpbGUtPnByaXZhdGVfZGF0YSA9IHR1bjsKLQl0dW4tPmF0dGFjaGVkID0gMTsKLQlnZXRfbmV0KGRldl9uZXQodHVuLT5kZXYpKTsKLQogCS8qIE1ha2Ugc3VyZSBwZXJzaXN0ZW50IGRldmljZXMgZG8gbm90IGdldCBzdHVjayBpbgogCSAqIHhvZmYgc3RhdGUuCiAJICovCkBAIC04MjIsNiArOTc0LDggQEAKIAlzdHJjcHkoaWZyLT5pZnJfbmFtZSwgdHVuLT5kZXYtPm5hbWUpOwogCXJldHVybiAwOwogCisgZXJyX2ZyZWVfc2s6CisJc29ja19wdXQoc2spOwogIGVycl9mcmVlX2RldjoKIAlmcmVlX25ldGRldihkZXYpOwogIGZhaWxlZDoKQEAgLTgzMCw3ICs5ODQsNyBAQAogCiBzdGF0aWMgaW50IHR1bl9nZXRfaWZmKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBpZnJlcSAqaWZyKQogewotCXN0cnVjdCB0dW5fc3RydWN0ICp0dW4gPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biA9IHR1bl9nZXQoZmlsZSk7CiAKIAlpZiAoIXR1bikKIAkJcmV0dXJuIC1FQkFERkQ7CkBAIC04NTUsNiArMTAwOSw3IEBACiAJaWYgKHR1bi0+ZmxhZ3MgJiBUVU5fVk5FVF9IRFIpCiAJCWlmci0+aWZyX2ZsYWdzIHw9IElGRl9WTkVUX0hEUjsKIAorCXR1bl9wdXQodHVuKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtOTAxLDMyICsxMDU2LDE3IEBACiBzdGF0aWMgaW50IHR1bl9jaHJfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCiAJCQkgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0Jc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB0dW5fc3RydWN0ICp0dW47CiAJdm9pZCBfX3VzZXIqIGFyZ3AgPSAodm9pZCBfX3VzZXIqKWFyZzsKIAlzdHJ1Y3QgaWZyZXEgaWZyOworCWludCBzbmRidWY7CiAJaW50IHJldDsKIAogCWlmIChjbWQgPT0gVFVOU0VUSUZGIHx8IF9JT0NfVFlQRShjbWQpID09IDB4ODkpCiAJCWlmIChjb3B5X2Zyb21fdXNlcigmaWZyLCBhcmdwLCBzaXplb2YgaWZyKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCi0JaWYgKGNtZCA9PSBUVU5TRVRJRkYgJiYgIXR1bikgewotCQlpbnQgZXJyOwotCi0JCWlmci5pZnJfbmFtZVtJRk5BTVNJWi0xXSA9ICdcMCc7Ci0KLQkJcnRubF9sb2NrKCk7Ci0JCWVyciA9IHR1bl9zZXRfaWZmKGN1cnJlbnQtPm5zcHJveHktPm5ldF9ucywgZmlsZSwgJmlmcik7Ci0JCXJ0bmxfdW5sb2NrKCk7Ci0KLQkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7Ci0KLQkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmaWZyLCBzaXplb2YoaWZyKSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJcmV0dXJuIDA7Ci0JfQotCiAJaWYgKGNtZCA9PSBUVU5HRVRGRUFUVVJFUykgewogCQkvKiBDdXJyZW50bHkgdGhpcyBqdXN0IG1lYW5zOiAid2hhdCBJRkYgZmxhZ3MgYXJlIHZhbGlkPyIuCiAJCSAqIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2Ugd2UgbmV2ZXIgY2hlY2tlZCBmb3IgaW52YWxpZCBmbGFncyBvbgpAQCAtOTM2LDE5ICsxMDc2LDM5IEBACiAJCQkJKHVuc2lnbmVkIGludCBfX3VzZXIqKWFyZ3ApOwogCX0KIAorCXR1biA9IF9fdHVuX2dldCh0ZmlsZSk7CisJaWYgKGNtZCA9PSBUVU5TRVRJRkYgJiYgIXR1bikgeworCQlpbnQgZXJyOworCisJCWlmci5pZnJfbmFtZVtJRk5BTVNJWi0xXSA9ICdcMCc7CisKKwkJcnRubF9sb2NrKCk7CisJCWVyciA9IHR1bl9zZXRfaWZmKHRmaWxlLT5uZXQsIGZpbGUsICZpZnIpOworCQlydG5sX3VubG9jaygpOworCisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCisJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJmlmciwgc2l6ZW9mKGlmcikpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCXJldHVybiAwOworCX0KKworCiAJaWYgKCF0dW4pCiAJCXJldHVybiAtRUJBREZEOwogCiAJREJHKEtFUk5fSU5GTyAiJXM6IHR1bl9jaHJfaW9jdGwgY21kICVkXG4iLCB0dW4tPmRldi0+bmFtZSwgY21kKTsKIAorCXJldCA9IDA7CiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFRVTkdFVElGRjoKIAkJcmV0ID0gdHVuX2dldF9pZmYoY3VycmVudC0+bnNwcm94eS0+bmV0X25zLCBmaWxlLCAmaWZyKTsKIAkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7CisJCQlicmVhazsKIAogCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZpZnIsIHNpemVvZihpZnIpKSkKLQkJCXJldHVybiAtRUZBVUxUOworCQkJcmV0ID0gLUVGQVVMVDsKIAkJYnJlYWs7CiAKIAljYXNlIFRVTlNFVE5PQ1NVTToKQEAgLTEwMDAsNyArMTE2MCw3IEBACiAJCQlyZXQgPSAwOwogCQl9CiAJCXJ0bmxfdW5sb2NrKCk7Ci0JCXJldHVybiByZXQ7CisJCWJyZWFrOwogCiAjaWZkZWYgVFVOX0RFQlVHCiAJY2FzZSBUVU5TRVRERUJVRzoKQEAgLTEwMTEsMjQgKzExNzEsMjUgQEAKIAkJcnRubF9sb2NrKCk7CiAJCXJldCA9IHNldF9vZmZsb2FkKHR1bi0+ZGV2LCBhcmcpOwogCQlydG5sX3VubG9jaygpOwotCQlyZXR1cm4gcmV0OworCQlicmVhazsKIAogCWNhc2UgVFVOU0VUVFhGSUxURVI6CiAJCS8qIENhbiBiZSBzZXQgb25seSBmb3IgVEFQcyAqLworCQlyZXQgPSAtRUlOVkFMOwogCQlpZiAoKHR1bi0+ZmxhZ3MgJiBUVU5fVFlQRV9NQVNLKSAhPSBUVU5fVEFQX0RFVikKLQkJCXJldHVybiAtRUlOVkFMOworCQkJYnJlYWs7CiAJCXJ0bmxfbG9jaygpOwogCQlyZXQgPSB1cGRhdGVfZmlsdGVyKCZ0dW4tPnR4Zmx0LCAodm9pZCBfX3VzZXIgKilhcmcpOwogCQlydG5sX3VubG9jaygpOwotCQlyZXR1cm4gcmV0OworCQlicmVhazsKIAogCWNhc2UgU0lPQ0dJRkhXQUREUjoKIAkJLyogR2V0IGh3IGFkZHJlcyAqLwogCQltZW1jcHkoaWZyLmlmcl9od2FkZHIuc2FfZGF0YSwgdHVuLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CiAJCWlmci5pZnJfaHdhZGRyLnNhX2ZhbWlseSA9IHR1bi0+ZGV2LT50eXBlOwogCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZpZnIsIHNpemVvZiBpZnIpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCXJldHVybiAwOworCQkJcmV0ID0gLUVGQVVMVDsKKwkJYnJlYWs7CiAKIAljYXNlIFNJT0NTSUZIV0FERFI6CiAJCS8qIFNldCBodyBhZGRyZXNzICovCkBAIC0xMDM4LDE4ICsxMTk5LDM1IEBACiAJCXJ0bmxfbG9jaygpOwogCQlyZXQgPSBkZXZfc2V0X21hY19hZGRyZXNzKHR1bi0+ZGV2LCAmaWZyLmlmcl9od2FkZHIpOwogCQlydG5sX3VubG9jaygpOwotCQlyZXR1cm4gcmV0OworCQlicmVhazsKKworCWNhc2UgVFVOR0VUU05EQlVGOgorCQlzbmRidWYgPSB0dW4tPnNrLT5za19zbmRidWY7CisJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJnNuZGJ1Ziwgc2l6ZW9mKHNuZGJ1ZikpKQorCQkJcmV0ID0gLUVGQVVMVDsKKwkJYnJlYWs7CisKKwljYXNlIFRVTlNFVFNOREJVRjoKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZzbmRidWYsIGFyZ3AsIHNpemVvZihzbmRidWYpKSkgeworCQkJcmV0ID0gLUVGQVVMVDsKKwkJCWJyZWFrOworCQl9CisKKwkJdHVuLT5zay0+c2tfc25kYnVmID0gc25kYnVmOworCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOworCQlyZXQgPSAtRUlOVkFMOworCQlicmVhazsKIAl9OwogCi0JcmV0dXJuIDA7CisJdHVuX3B1dCh0dW4pOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgdHVuX2Nocl9mYXN5bmMoaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG9uKQogewotCXN0cnVjdCB0dW5fc3RydWN0ICp0dW4gPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biA9IHR1bl9nZXQoZmlsZSk7CiAJaW50IHJldDsKIAogCWlmICghdHVuKQpAQCAtMTA3MSw0MiArMTI0OSw1MCBAQAogCXJldCA9IDA7CiBvdXQ6CiAJdW5sb2NrX2tlcm5lbCgpOworCXR1bl9wdXQodHVuKTsKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IHR1bl9jaHJfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqIGZpbGUpCiB7CisJc3RydWN0IHR1bl9maWxlICp0ZmlsZTsKIAljeWNsZV9rZXJuZWxfbG9jaygpOwogCURCRzEoS0VSTl9JTkZPICJ0dW5YOiB0dW5fY2hyX29wZW5cbiIpOwotCWZpbGUtPnByaXZhdGVfZGF0YSA9IE5VTEw7CisKKwl0ZmlsZSA9IGttYWxsb2Moc2l6ZW9mKCp0ZmlsZSksIEdGUF9LRVJORUwpOworCWlmICghdGZpbGUpCisJCXJldHVybiAtRU5PTUVNOworCWF0b21pY19zZXQoJnRmaWxlLT5jb3VudCwgMCk7CisJdGZpbGUtPnR1biA9IE5VTEw7CisJdGZpbGUtPm5ldCA9IGdldF9uZXQoY3VycmVudC0+bnNwcm94eS0+bmV0X25zKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZ0ZmlsZS0+cmVhZF93YWl0KTsKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSB0ZmlsZTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB0dW5fY2hyX2Nsb3NlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCXN0cnVjdCB0dW5fc3RydWN0ICp0dW4gPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHR1bl9maWxlICp0ZmlsZSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuID0gX190dW5fZ2V0KHRmaWxlKTsKIAotCWlmICghdHVuKQotCQlyZXR1cm4gMDsKIAotCURCRyhLRVJOX0lORk8gIiVzOiB0dW5fY2hyX2Nsb3NlXG4iLCB0dW4tPmRldi0+bmFtZSk7CisJaWYgKHR1bikgeworCQlEQkcoS0VSTl9JTkZPICIlczogdHVuX2Nocl9jbG9zZVxuIiwgdHVuLT5kZXYtPm5hbWUpOwogCi0JcnRubF9sb2NrKCk7CisJCXJ0bmxfbG9jaygpOworCQlfX3R1bl9kZXRhY2godHVuKTsKIAotCS8qIERldGFjaCBmcm9tIG5ldCBkZXZpY2UgKi8KLQlmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOwotCXR1bi0+YXR0YWNoZWQgPSAwOwotCXB1dF9uZXQoZGV2X25ldCh0dW4tPmRldikpOworCQkvKiBJZiBkZXNpcmVhYmxlLCB1bnJlZ2lzdGVyIHRoZSBuZXRkZXZpY2UuICovCisJCWlmICghKHR1bi0+ZmxhZ3MgJiBUVU5fUEVSU0lTVCkpIHsKKwkJCXNvY2tfcHV0KHR1bi0+c2spOworCQkJdW5yZWdpc3Rlcl9uZXRkZXZpY2UodHVuLT5kZXYpOworCQl9CiAKLQkvKiBEcm9wIHJlYWQgcXVldWUgKi8KLQlza2JfcXVldWVfcHVyZ2UoJnR1bi0+cmVhZHEpOwotCi0JaWYgKCEodHVuLT5mbGFncyAmIFRVTl9QRVJTSVNUKSkgewotCQlsaXN0X2RlbCgmdHVuLT5saXN0KTsKLQkJdW5yZWdpc3Rlcl9uZXRkZXZpY2UodHVuLT5kZXYpOworCQlydG5sX3VubG9jaygpOwogCX0KIAotCXJ0bmxfdW5sb2NrKCk7CisJcHV0X25ldCh0ZmlsZS0+bmV0KTsKKwlrZnJlZSh0ZmlsZSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTExODcsNyArMTM3Myw3IEBACiBzdGF0aWMgdTMyIHR1bl9nZXRfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCB0dW5fc3RydWN0ICp0dW4gPSBuZXRkZXZfcHJpdihkZXYpOwotCXJldHVybiB0dW4tPmF0dGFjaGVkOworCXJldHVybiAhIXR1bi0+dGZpbGU7CiB9CiAKIHN0YXRpYyB1MzIgdHVuX2dldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC0xMjE2LDQ1ICsxNDAyLDYgQEAKIAkuc2V0X3J4X2NzdW0JPSB0dW5fc2V0X3J4X2NzdW0KIH07CiAKLXN0YXRpYyBpbnQgdHVuX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKLXsKLQlzdHJ1Y3QgdHVuX25ldCAqdG47Ci0KLQl0biA9IGttYWxsb2Moc2l6ZW9mKCp0biksIEdGUF9LRVJORUwpOwotCWlmICh0biA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCUlOSVRfTElTVF9IRUFEKCZ0bi0+ZGV2X2xpc3QpOwotCi0JaWYgKG5ldF9hc3NpZ25fZ2VuZXJpYyhuZXQsIHR1bl9uZXRfaWQsIHRuKSkgewotCQlrZnJlZSh0bik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCB0dW5fZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KQotewotCXN0cnVjdCB0dW5fbmV0ICp0bjsKLQlzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCAqbnh0OwotCi0JdG4gPSBuZXRfZ2VuZXJpYyhuZXQsIHR1bl9uZXRfaWQpOwotCi0JcnRubF9sb2NrKCk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHR1biwgbnh0LCAmdG4tPmRldl9saXN0LCBsaXN0KSB7Ci0JCURCRyhLRVJOX0lORk8gIiVzIGNsZWFuZWQgdXBcbiIsIHR1bi0+ZGV2LT5uYW1lKTsKLQkJdW5yZWdpc3Rlcl9uZXRkZXZpY2UodHVuLT5kZXYpOwotCX0KLQlydG5sX3VubG9jaygpOwotCi0Ja2ZyZWUodG4pOwotfQotCi1zdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIHR1bl9uZXRfb3BzID0gewotCS5pbml0ID0gdHVuX2luaXRfbmV0LAotCS5leGl0ID0gdHVuX2V4aXRfbmV0LAotfTsKIAogc3RhdGljIGludCBfX2luaXQgdHVuX2luaXQodm9pZCkKIHsKQEAgLTEyNjMsMTAgKzE0MTAsMTAgQEAKIAlwcmludGsoS0VSTl9JTkZPICJ0dW46ICVzLCAlc1xuIiwgRFJWX0RFU0NSSVBUSU9OLCBEUlZfVkVSU0lPTik7CiAJcHJpbnRrKEtFUk5fSU5GTyAidHVuOiAlc1xuIiwgRFJWX0NPUFlSSUdIVCk7CiAKLQlyZXQgPSByZWdpc3Rlcl9wZXJuZXRfZ2VuX2RldmljZSgmdHVuX25ldF9pZCwgJnR1bl9uZXRfb3BzKTsKKwlyZXQgPSBydG5sX2xpbmtfcmVnaXN0ZXIoJnR1bl9saW5rX29wcyk7CiAJaWYgKHJldCkgewotCQlwcmludGsoS0VSTl9FUlIgInR1bjogQ2FuJ3QgcmVnaXN0ZXIgcGVybmV0IG9wc1xuIik7Ci0JCWdvdG8gZXJyX3Blcm5ldDsKKwkJcHJpbnRrKEtFUk5fRVJSICJ0dW46IENhbid0IHJlZ2lzdGVyIGxpbmtfb3BzXG4iKTsKKwkJZ290byBlcnJfbGlua29wczsKIAl9CiAKIAlyZXQgPSBtaXNjX3JlZ2lzdGVyKCZ0dW5fbWlzY2Rldik7CkBAIC0xMjc0LDE4ICsxNDIxLDE3IEBACiAJCXByaW50ayhLRVJOX0VSUiAidHVuOiBDYW4ndCByZWdpc3RlciBtaXNjIGRldmljZSAlZFxuIiwgVFVOX01JTk9SKTsKIAkJZ290byBlcnJfbWlzYzsKIAl9Ci0JcmV0dXJuIDA7Ci0KKwlyZXR1cm4gIDA7CiBlcnJfbWlzYzoKLQl1bnJlZ2lzdGVyX3Blcm5ldF9nZW5fZGV2aWNlKHR1bl9uZXRfaWQsICZ0dW5fbmV0X29wcyk7Ci1lcnJfcGVybmV0OgorCXJ0bmxfbGlua191bnJlZ2lzdGVyKCZ0dW5fbGlua19vcHMpOworZXJyX2xpbmtvcHM6CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgdHVuX2NsZWFudXAodm9pZCkKIHsKIAltaXNjX2RlcmVnaXN0ZXIoJnR1bl9taXNjZGV2KTsKLQl1bnJlZ2lzdGVyX3Blcm5ldF9nZW5fZGV2aWNlKHR1bl9uZXRfaWQsICZ0dW5fbmV0X29wcyk7CisJcnRubF9saW5rX3VucmVnaXN0ZXIoJnR1bl9saW5rX29wcyk7CiB9CiAKIG1vZHVsZV9pbml0KHR1bl9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R5cGhvb24tZmlybXdhcmUuaCBiL2RyaXZlcnMvbmV0L3R5cGhvb24tZmlybXdhcmUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTgyZDY5ZS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC90eXBob29uLWZpcm13YXJlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNzc4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMTk5OS0yMDA0IDNDb20gQ29ycG9yYXRpb24uICBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMgb2YgdGhlIDNjOTkwaW1nLmgKLSAqIG1pY3JvY29kZSBzb2Z0d2FyZSBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb24gb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb24gaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIFRoZSBuYW1lIG9mIDNDb20gbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cwotICogICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIDNDT00gYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgotICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KLSAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKgotICogVVNFUiBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUyBUSEFUIFBVUkNIQVNFIE9SIFVTRSBPRiBUSEUgM2M5OTBpbWcuaAotICogTUlDUk9DT0RFIFNPRlRXQVJFIFdJTEwgTk9UIENSRUFURSBPUiBHSVZFIEdST1VORFMgRk9SIEEgTElDRU5TRSBCWQotICogSU1QTElDQVRJT04sIEVTVE9QUEVMLCBPUiBPVEhFUldJU0UgSU4gQU5ZIElOVEVMTEVDVFVBTCBQUk9QRVJUWSBSSUdIVFMKLSAqIChQQVRFTlQsIENPUFlSSUdIVCwgVFJBREUgU0VDUkVULCBNQVNLIFdPUkssIE9SIE9USEVSIFBST1BSSUVUQVJZIFJJR0hUKQotICogRU1CT0RJRUQgSU4gQU5ZIE9USEVSIDNDT00gSEFSRFdBUkUgT1IgU09GVFdBUkUgRUlUSEVSIFNPTEVMWSBPUiBJTgotICogQ09NQklOQVRJT04gV0lUSCBUSEUgM2M5OTBpbWcuaCBNSUNST0NPREUgU09GVFdBUkUKLSAqLwotCi0gLyogdmVyIDAzLjAwMS4wMDggKi8KLXN0YXRpYyBjb25zdCB1OCB0eXBob29uX2Zpcm13YXJlX2ltYWdlW10gPSB7Ci0weDU0LCAweDU5LCAweDUwLCAweDQ4LCAweDRmLCAweDRmLCAweDRlLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLAotMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHhjYiwgMHg5OSwgMHhiMSwgMHhkNCwKLTB4NGMsIDB4YjgsIDB4ZDAsIDB4NGIsIDB4MzIsIDB4MDIsIDB4ZDQsIDB4ZWUsIDB4NzMsIDB4N2UsIDB4MGIsIDB4MTMsCi0weDliLCAweGMwLCAweGFlLCAweGY0LCAweDQwLCAweDAxLCAweDAwLCAweDAwLCAweGU4LCAweGZjLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgzOSwgMHgwMCwgMHgwMCwgMHhlYSwgMHgwNSwgMHgwMCwgMHgwMCwgMHhlYSwKLTB4MDQsIDB4MDAsIDB4MDAsIDB4ZWEsIDB4MDMsIDB4MDAsIDB4MDAsIDB4ZWEsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZWEsCi0weDAxLCAweDAwLCAweDAwLCAweGVhLCAweDMyLCAweDAyLCAweDAwLCAweGVhLCAweGM1LCAweDE0LCAweDAwLCAweGVhLAotMHgwNywgMHgwMCwgMHgyZCwgMHhlOSwgMHgwZSwgMHgwMCwgMHhhMCwgMHhlMSwgMHgwMCwgMHgxMCwgMHgwZiwgMHhlMSwKLTB4ZDAsIDB4MjAsIDB4OWYsIDB4ZTUsIDB4MTIsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4ZmUsIDB4ZmYsIDB4ZmYsIDB4ZWEsCi0weDAxLCAweDAwLCAweDgwLCAweGUwLCAweDA0LCAweDIwLCAweDgxLCAweGU0LCAweDAxLCAweDAwLCAweDUwLCAweGUxLAotMHhmYywgMHhmZiwgMHhmZiwgMHgxYSwgMHgwZSwgMHhmMCwgMHhhMCwgMHhlMSwgMHgwMCwgMHhhMCwgMHhhMCwgMHhlMSwKLTB4MGUsIDB4YjAsIDB4YTAsIDB4ZTEsIDB4MDAsIDB4MDAsIDB4YTAsIDB4ZTMsIDB4YTgsIDB4MTAsIDB4OWYsIDB4ZTUsCi0weDAwLCAweDAwLCAweDgxLCAweGU1LCAweGE0LCAweDEwLCAweDlmLCAweGU1LCAweDAwLCAweDAwLCAweDgxLCAweGU1LAotMHgwMSwgMHgxNiwgMHhhMCwgMHhlMywgMHgwMCwgMHgwMCwgMHg5MSwgMHhlNSwgMHgwMSwgMHgwMCwgMHg4MCwgMHhlMywKLTB4MDAsIDB4MDAsIDB4ODEsIDB4ZTUsIDB4ZDcsIDB4MDAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4ZjAsIDB4MjEsIDB4ZTEsCi0weDg4LCAweGQwLCAweDlmLCAweGU1LCAweGRiLCAweDAwLCAweGEwLCAweGUzLCAweDAwLCAweGYwLCAweDIxLCAweGUxLAotMHg3YywgMHhkMCwgMHg5ZiwgMHhlNSwgMHhkMiwgMHgwMCwgMHhhMCwgMHhlMywgMHgwMCwgMHhmMCwgMHgyMSwgMHhlMSwKLTB4NzQsIDB4ZDAsIDB4OWYsIDB4ZTUsIDB4ZDEsIDB4MDAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4ZjAsIDB4MjEsIDB4ZTEsCi0weDZjLCAweGQwLCAweDlmLCAweGU1LCAweDliLCAweDE0LCAweDAwLCAweGViLCAweGQzLCAweDAwLCAweGEwLCAweGUzLAotMHgwMCwgMHhmMCwgMHgyMSwgMHhlMSwgMHg2MCwgMHhkMCwgMHg5ZiwgMHhlNSwgMHg2MCwgMHgwMCwgMHg5ZiwgMHhlNSwKLTB4NjAsIDB4MTAsIDB4OWYsIDB4ZTUsIDB4NjAsIDB4MjAsIDB4OWYsIDB4ZTUsIDB4ZGIsIDB4ZmYsIDB4ZmYsIDB4ZWIsCi0weDVjLCAweDAwLCAweDlmLCAweGU1LCAweDVjLCAweDEwLCAweDlmLCAweGU1LCAweDAwLCAweDIwLCAweGEwLCAweGUzLAotMHhkNywgMHhmZiwgMHhmZiwgMHhlYiwgMHg1NCwgMHgwMCwgMHg5ZiwgMHhlNSwgMHg1NCwgMHgxMCwgMHg5ZiwgMHhlNSwKLTB4ZDQsIDB4ZmYsIDB4ZmYsIDB4ZWIsIDB4MGEsIDB4MDAsIDB4YTAsIDB4ZTEsIDB4MGIsIDB4ZjAsIDB4YTAsIDB4ZTEsCi0weGQzLCAweDEwLCAweGEwLCAweGUzLCAweDAxLCAweGYwLCAweDIxLCAweGUxLCAweGQ0LCAweGZmLCAweGZmLCAweGViLAotMHgzYywgMHhhMCwgMHg5ZiwgMHhlNSwgMHgxYSwgMHhmZiwgMHgyZiwgMHhlMSwgMHhjNiwgMHhmZiwgMHhmZiwgMHhlYSwKLTB4MTUsIDB4MjEsIDB4ZmYsIDB4ZmYsIDB4MGMsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MTAsIDB4MDAsCi0weDNjLCAweDM4LCAweDAwLCAweDgwLCAweGZjLCAweDM3LCAweDAwLCAweDgwLCAweGZjLCAweDNmLCAweDAwLCAweDgwLAotMHg3YywgMHgzNCwgMHgwMCwgMHg4MCwgMHg4MCwgMHgwZiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgzMCwgMHgwMCwgMHg4MCwKLTB4YWQsIDB4ZGUsIDB4YWQsIDB4ZGUsIDB4YjAsIDB4YmIsIDB4MDAsIDB4MDAsIDB4MjQsIDB4YWIsIDB4MjAsIDB4NDAsCi0weDQ4LCAweDI5LCAweDAwLCAweDAwLCAweDI4LCAweDA1LCAweDAwLCAweDgwLCAweGJkLCAweGJhLCAweDIxLCAweDQwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDU4LCAweDU3LCAweDAwLCAweDAwLCAweDg2LCAweDRiLCAweDAwLCAweDAwLCAweDYwLCAweDAxLCAweGZmLCAweGZmLAotMHhiMCwgMHhiNSwgMHgwNywgMHgxYywgMHgxMiwgMHg0ZCwgMHgwMCwgMHgyNCwgMHgyOCwgMHg2OCwgMHgwMCwgMHgyOCwKLTB4MWUsIDB4ZDAsIDB4MzgsIDB4MWMsIDB4MTAsIDB4NDksIDB4MDQsIDB4ZjAsIDB4N2IsIDB4ZmQsIDB4MjksIDB4NjgsCi0weGMwLCAweDQ2LCAweDA4LCAweDYwLCAweDAwLCAweDI4LCAweDE1LCAweGQwLCAweDM4LCAweDAxLCAweDBkLCAweDQ5LAotMHg0MCwgMHgxOCwgMHgxOSwgMHgyMywgMHhkYiwgMHgwMSwgMHhjMCwgMHgxOCwgMHg0MSwgMHg2YiwgMHg4MCwgMHgyOSwKLTB4MGMsIDB4ZDIsIDB4MDEsIDB4MzEsIDB4NDEsIDB4NjMsIDB4MjgsIDB4NjgsIDB4YzEsIDB4NjksIDB4YzAsIDB4NDYsCi0weDI5LCAweDYwLCAweDM5LCAweDA3LCAweDQxLCAweDYwLCAweDA0LCAweDYyLCAweGM3LCAweDYyLCAweGIwLCAweGJjLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgyMCwgMHgxYywgMHhmYSwgMHhlNywgMHhlOCwgMHgxNywgMHgwMCwgMHg4MCwKLTB4ZWUsIDB4MDUsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MWMsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDksIDB4MGEsIDB4NjgsCi0weGMwLCAweDQ2LCAweGMyLCAweDYxLCAweDA4LCAweDYwLCAweDcwLCAweDQ3LAotMHhlOCwgMHgxNywgMHgwMCwgMHg4MCwgMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwKLTB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGYsIDB4ZTEsIDB4MDAsIDB4MTAsIDB4YTAsIDB4ZTEsCi0weGMwLCAweDEwLCAweDgxLCAweGUzLCAweDAxLCAweGYwLCAweDIxLCAweGUxLCAweDFlLCAweGZmLCAweDJmLCAweGUxLAotMHgwMCwgMHhmMCwgMHgyMSwgMHhlMSwgMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwgMHgwMCwgMHgwMCwgMHgwZiwgMHhlMSwKLTB4YzAsIDB4MDAsIDB4ODAsIDB4ZTMsIDB4MDAsIDB4ZjAsIDB4MjEsIDB4ZTEsIDB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsCi0weDAwLCAweDAwLCAweDBmLCAweGUxLCAweGMwLCAweDAwLCAweGMwLCAweGUzLCAweDAwLCAweGYwLCAweDIxLCAweGUxLAotMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwgMHgwMCwgMHgwMCwgMHgwZiwgMHhlMSwgMHg0MCwgMHgwMCwgMHg4MCwgMHhlMywKLTB4MDAsIDB4ZjAsIDB4MjEsIDB4ZTEsIDB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4MDAsIDB4MDAsIDB4MGYsIDB4ZTEsCi0weDgwLCAweDAwLCAweDEwLCAweGUzLCAweDgwLCAweDAwLCAweDgwLCAweGUzLCAweDAwLCAweGYwLCAweDIxLCAweGUxLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwgMHgwMCwgMHgwMCwgMHg1MCwgMHhlMywKLTB4MDAsIDB4MDAsIDB4MGYsIDB4ZTEsIDB4ODAsIDB4MDAsIDB4YzAsIDB4MTMsIDB4MDAsIDB4ZjAsIDB4MjEsIDB4ZTEsCi0weDFlLCAweGZmLCAweDJmLCAweGUxLCAweDAwLCAweDAwLCAweDBmLCAweGUxLCAweDgwLCAweDAwLCAweGMwLCAweGUzLAotMHgwMCwgMHhmMCwgMHgyMSwgMHhlMSwgMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwgMHg5MSwgMHgwMCwgMHgwMCwgMHhlMCwKLTB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4MDEsIDB4MjAsIDB4ODAsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZTAsCi0weDFlLCAweGZmLCAweDJmLCAweGUxLCAweDgwLCAweGI1LCAweDA4LCAweDRmLCAweDY0LCAweDI4LCAweDA0LCAweGQzLAotMHg2NCwgMHgyMCwgMHgzOCwgMHg2MywgMHgwMCwgMHgyMCwgMHhjMCwgMHg0MywgMHgwMywgMHhlMCwgMHgzOCwgMHg2MywKLTB4MDQsIDB4NDksIDB4MDUsIDB4ZjAsIDB4MDEsIDB4ZmIsIDB4NzgsIDB4NjMsIDB4YjgsIDB4NjMsIDB4ODAsIDB4YmMsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweDg4LCAweDEzLCAweDAwLCAweDAwLAotMHg4MCwgMHhiNCwgMHgxMCwgMHg0YiwgMHgwMCwgMHgyMiwgMHgxZiwgMHg2YiwgMHg2NCwgMHgyZiwgMHgwMywgMHhkMiwKLTB4MDksIDB4NjgsIDB4MDksIDB4NjgsIDB4NDksIDB4MDgsIDB4MDIsIDB4ZDIsIDB4MTAsIDB4MWMsIDB4ODAsIDB4YmMsCi0weDcwLCAweDQ3LCAweDE5LCAweDFjLCAweGRiLCAweDZiLCAweDRmLCAweDZiLCAweGJiLCAweDQyLCAweDA1LCAweGQyLAotMHg0MCwgMHg2OCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywgMHgxOCwgMHgxOCwgMHhjOCwgMHg2MywgMHhmMSwgMHhlNywKLTB4NDEsIDB4NjgsIDB4MDUsIDB4NGIsIDB4MTksIDB4NDMsIDB4NDEsIDB4NjAsIDB4MDQsIDB4NDgsIDB4YzEsIDB4NmIsCi0weDAxLCAweDMxLCAweGMxLCAweDYzLCAweDAyLCAweDIwLCAweGU4LCAweGU3LCAweDY4LCAweDBlLCAweDAwLCAweDgwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwYywgMHgyYiwgMHgwMCwgMHg4MCwgMHg5MCwgMHhiNSwgMHgwNywgMHgxYywKLTB4MTUsIDB4NGMsIDB4MDAsIDB4MjAsIDB4MjEsIDB4NmIsIDB4NjQsIDB4MjksIDB4MGIsIDB4ZDIsIDB4YjksIDB4NmUsCi0weDQ5LCAweDA4LCAweDA4LCAweGQzLCAweDIxLCAweDZjLCAweGEyLCAweDZiLCAweDkxLCAweDQyLCAweDA3LCAweGQyLAotMHhmYSwgMHgxZCwgMHgzOSwgMHgzMiwgMHg1MiwgMHg4YiwgMHg4OSwgMHgxOCwgMHgyMSwgMHg2NCwgMHg5MCwgMHhiYywKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NzgsIDB4NmEsIDB4MzksIDB4NmIsIDB4YzAsIDB4NDYsIDB4NDgsIDB4NjIsCi0weDM4LCAweDZiLCAweDAyLCAweGYwLCAweDJkLCAweGZlLCAweDM4LCAweDFjLCAweDAyLCAweGYwLCAweGU4LCAweGZhLAotMHgwMSwgMHgyMCwgMHhiYiwgMHgyMywgMHgxYiwgMHgwMSwgMHhlMSwgMHgxOCwgMHhjOCwgMHg3MywgMHgwNSwgMHg0OSwKLTB4MGEsIDB4NmMsIDB4MTIsIDB4MTgsIDB4MGEsIDB4NjQsIDB4MDQsIDB4NDksIDB4OGEsIDB4NmQsIDB4MTIsIDB4MTgsCi0weDhhLCAweDY1LCAweGU0LCAweGU3LCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweDBjLCAweDJiLCAweDAwLCAweDgwLAotMHhhNCwgMHgyYSwgMHgwMCwgMHg4MCwgMHg4MCwgMHhiNCwgMHgwYSwgMHg0OCwgMHhjMCwgMHg2ZCwgMHgwMiwgMHgyMywKLTB4MTgsIDB4NDAsIDB4MDksIDB4NGEsIDB4MDAsIDB4MjEsIDB4MDAsIDB4MjgsIDB4MDMsIDB4ZDAsIDB4ZDEsIDB4NjMsCi0weDExLCAweDY0LCAweDgwLCAweGJjLCAweDcwLCAweDQ3LCAweDA2LCAweDQ4LCAweDA3LCAweDY4LCAweDdiLCAweDFjLAotMHgwMywgMHg2MCwgMHgwYSwgMHgyZiwgMHhmNywgMHhkMywgMHgwMSwgMHg2MCwgMHhmMywgMHhlNywgMHgwMCwgMHgwMCwKLTB4YTQsIDB4MmEsIDB4MDAsIDB4ODAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4ODAsCi0weDcwLCAweDQ3LCAweDAyLCAweDA0LCAweDEyLCAweDBjLCAweDAwLCAweDBjLCAweDEwLCAweDE4LCAweDBhLCAweDA0LAotMHgxMiwgMHgwYywgMHgwOSwgMHgwYywgMHg1MSwgMHgxOCwgMHgwOCwgMHgxOCwgMHgwMSwgMHgwYywgMHgwNSwgMHhkMCwKLTB4MDEsIDB4MDQsIDB4MDksIDB4MGMsIDB4MDAsIDB4MGMsIDB4MDgsIDB4MTgsIDB4MDEsIDB4MGMsIDB4ZjksIDB4ZDEsCi0weDAwLCAweDA0LCAweDAwLCAweDBjLCAweDcwLCAweDQ3LCAweDgwLCAweGI0LCAweDAwLCAweDIyLCAweDAwLCAweDI5LAotMHgxOCwgMHhkMCwgMHg0ZiwgMHgwOCwgMHg3YiwgMHgxZSwgMHgwMCwgMHgyZiwKLTB4MDYsIDB4ZDAsIDB4MDcsIDB4ODgsIDB4YmEsIDB4MTgsIDB4MDIsIDB4MzAsIDB4MWYsIDB4MWMsIDB4MDEsIDB4M2IsCi0weDAwLCAweDJmLCAweGY4LCAweGQxLCAweDQ5LCAweDA4LCAweDAzLCAweGQzLCAweDAwLCAweDg4LCAweDAwLCAweDA2LAotMHgwMCwgMHgwZSwgMHg4MiwgMHgxOCwgMHgxMCwgMHgwYywgMHgwNSwgMHhkMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHgwYywKLTB4MTEsIDB4MGMsIDB4NDIsIDB4MTgsIDB4MTAsIDB4MGMsIDB4ZjksIDB4ZDEsIDB4MTAsIDB4MDQsIDB4MDAsIDB4MGMsCi0weDgwLCAweGJjLCAweDcwLCAweDQ3LCAweDgwLCAweGI1LCAweDgzLCAweDg5LCAweGM3LCAweDg5LCAweGZiLCAweDE4LAotMHgwNywgMHg4YSwgMHhmYiwgMHgxOCwgMHg0NywgMHg4YSwgMHhmYiwgMHgxOCwgMHg0MCwgMHg3YSwgMHgwMCwgMHgwMiwKLTB4YzcsIDB4MTgsIDB4MzgsIDB4MGMsIDB4MDUsIDB4ZDAsIDB4MzgsIDB4MDQsIDB4MDAsIDB4MGMsIDB4M2IsIDB4MGMsCi0weGM3LCAweDE4LCAweDM4LCAweDBjLCAweGY5LCAweGQxLCAweDA4LCAweDFjLCAweDExLCAweDFjLCAweGZmLCAweGY3LAotMHhjOCwgMHhmZiwgMHgwMSwgMHgxYywgMHgzOCwgMHgxYywgMHhmZiwgMHhmNywgMHhiMCwgMHhmZiwgMHg4MCwgMHhiYywKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4OTAsIDB4YjUsIDB4MDIsIDB4MjMsIDB4ODIsIDB4NjgsIDB4MWEsIDB4NDAsCi0weDAwLCAweDI3LCAweDAwLCAweDJhLCAweDBmLCAweGQwLCAweDBhLCAweDRhLCAweDkzLCAweDY5LCAweDAxLCAweDMzLAotMHg5MywgMHg2MSwgMHgwYSwgMHg2OCwgMHg4YiwgMHg2OCwgMHg5YSwgMHgxOCwgMHgwMCwgMHg2OCwgMHgxYywgMHgxOCwKLTB4NTcsIDB4ODEsIDB4MDksIDB4NjksIDB4MTAsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4YWMsIDB4ZmYsIDB4YzAsIDB4NDMsCi0weDYwLCAweDgxLCAweDM4LCAweDFjLCAweDkwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLAotMHgwYywgMHgyYiwgMHgwMCwgMHg4MCwgMHg5MCwgMHhiNSwgMHgwNCwgMHgyMywgMHg4MiwgMHg2OCwgMHgxYSwgMHg0MCwKLTB4MDAsIDB4MjcsIDB4MDAsIDB4MmEsIDB4MTEsIDB4ZDAsIDB4NGEsIDB4NjgsIDB4NTIsIDB4MDksIDB4MGUsIDB4ZDMsCi0weDA5LCAweDRhLCAweDEzLCAweDZhLCAweDAxLCAweDMzLCAweDEzLCAweDYyLCAweGNiLCAweDY4LCAweDAyLCAweDY4LAotMHg5YywgMHgxOCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgwOCwgMHgzYSwgMHgxYSwgMHg0MywgMHgxMiwgMHg2OCwKLTB4MDAsIDB4ZjAsIDB4MmUsIDB4ZjgsIDB4MjAsIDB4ODIsIDB4MzgsIDB4MWMsIDB4OTAsIDB4YmMsIDB4MDgsIDB4YmMsCi0weDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDBjLCAweDJiLCAweDAwLCAweDgwLCAweDkwLCAweGI1LCAweDgwLCAweDIzLAotMHg4MiwgMHg2OCwgMHgxYSwgMHg0MCwgMHgwMCwgMHgyNCwgMHgwMCwgMHgyYSwgMHgxNSwgMHhkMCwgMHg0YSwgMHg2OCwKLTB4OTIsIDB4MDksIDB4MTIsIDB4ZDMsIDB4MGIsIDB4NGEsIDB4ZDMsIDB4NjksIDB4MDEsIDB4MzMsIDB4ZDMsIDB4NjEsCi0weGNiLCAweDY4LCAweDAyLCAweDY4LCAweDlmLCAweDE4LCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweDA4LCAweDNhLAotMHgxYSwgMHg0MywgMHgxMiwgMHg2OCwgMHgwMCwgMHhmMCwgMHgwZSwgMHhmOCwgMHgwMCwgMHgyOCwgMHgwMCwgMHhkMSwKLTB4MDQsIDB4NDgsIDB4YzAsIDB4NDYsIDB4ZjgsIDB4ODAsIDB4MjAsIDB4MWMsIDB4OTAsIDB4YmMsIDB4MDgsIDB4YmMsCi0weDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDBjLCAweDJiLCAweDAwLCAweDgwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLAotMHhiMCwgMHhiNSwgMHgxNCwgMHgxYywgMHgwNSwgMHgxYywgMHgwZiwgMHgxYywgMHgzOCwgMHg2OSwgMHhiOSwgMHg2OCwKLTB4NDEsIDB4MTgsIDB4MzgsIDB4NjgsIDB4ZmYsIDB4ZjcsIDB4NTMsIDB4ZmYsIDB4YzAsIDB4NDMsIDB4MDEsIDB4MDQsCi0weDA5LCAweDBjLCAweDIwLCAweDFjLCAweGZmLCAweGY3LCAweDM5LCAweGZmLCAweDA0LCAweDFjLCAweGI4LCAweDY4LAotMHg3OSwgMHg2OSwgMHg0MCwgMHgxOCwgMHg2OSwgMHg2OCwgMHg4OCwgMHg0MiwgMHgwYywgMHhkMiwgMHgyYSwgMHg2OCwKLTB4MTIsIDB4MTgsIDB4MDksIDB4MWEsIDB4MTAsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4MDUsIDB4ZjksIDB4YzAsIDB4NDMsCi0weDAxLCAweDA0LCAweDA5LCAweDBjLCAweDIwLCAweDFjLCAweGZmLCAweGY3LCAweDI2LCAweGZmLCAweDA0LCAweDFjLAotMHhlMCwgMHg0MywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywgMHhiMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4ODAsIDB4YjUsIDB4MDcsIDB4MWMsIDB4YjgsIDB4NmIsIDB4YzAsIDB4MDgsIDB4MWEsIDB4ZDMsIDB4YjgsIDB4NmEsCi0weGY5LCAweDZiLCAweDQwLCAweDE4LCAweDc5LCAweDZjLCAweDAwLCAweGYwLCAweGVkLCAweGY4LCAweGMwLCAweDQzLAotMHgwMSwgMHgwNCwgMHgwOSwgMHgwYywgMHgwYSwgMHg0OCwgMHgwNywgMHhkMCwgMHgyMCwgMHgyMywgMHhiOSwgMHg2OSwKLTB4MTksIDB4NDMsIDB4YjksIDB4NjEsIDB4MDEsIDB4NmIsIDB4MDEsIDB4MzEsIDB4MDEsIDB4NjMsIDB4MDcsIDB4ZTAsCi0weGZmLCAweDIzLCAweDAxLCAweDMzLCAweGI5LCAweDY5LCAweDE5LCAweDQzLCAweGI5LCAweDYxLCAweDQxLCAweDZhLAotMHgwMSwgMHgzMSwgMHg0MSwgMHg2MiwgMHgwMCwgMHgyMCwgMHg4MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4MGMsIDB4MmIsIDB4MDAsIDB4ODAsIDB4ODAsIDB4YjUsIDB4MDcsIDB4MWMsIDB4YjgsIDB4NmIsIDB4NDEsIDB4MDksCi0weDFjLCAweGQzLCAweGMwLCAweDA4LCAweDFhLCAweGQzLCAweGY4LCAweDFkLCAweDM5LCAweDMwLCAweDAwLCAweDdiLAotMHgwNiwgMHgyOCwgMHgxNSwgMHhkMSwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHg1MywgMHhmOCwgMHgwMSwgMHgxYywKLTB4MGEsIDB4NDgsIDB4MDcsIDB4ZDAsIDB4NDAsIDB4MjMsIDB4YjksIDB4NjksCi0weDE5LCAweDQzLCAweGI5LCAweDYxLCAweDgxLCAweDZiLCAweDAxLCAweDMxLCAweDgxLCAweDYzLCAweDA3LCAweGUwLAotMHgwMSwgMHgyMywgMHg5YiwgMHgwMiwgMHhiOSwgMHg2OSwgMHgxOSwgMHg0MywgMHhiOSwgMHg2MSwgMHhjMSwgMHg2YSwKLTB4MDEsIDB4MzEsIDB4YzEsIDB4NjIsIDB4MDAsIDB4MjAsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weDBjLCAweDJiLCAweDAwLCAweDgwLCAweGIwLCAweGI1LCAweDA3LCAweDFjLCAweGI4LCAweDZiLCAweDgxLCAweDA5LAotMHgyYywgMHhkMywgMHhjMCwgMHgwOCwgMHgyYSwgMHhkMywgMHhmOCwgMHgxZCwgMHgzOSwgMHgzMCwgMHgwMCwgMHg3YiwKLTB4MTEsIDB4MjgsIDB4MjUsIDB4ZDEsIDB4YjgsIDB4NmEsIDB4MzksIDB4NmMsIDB4NDAsIDB4MTgsIDB4MDEsIDB4MjMsCi0weDliLCAweDA3LCAweDA2LCAweDMwLCAweDE4LCAweDQzLCAweDAwLCAweDY4LCAweDA1LCAweDA0LCAweDJkLCAweDBjLAotMHgwZiwgMHg0YywgMHgxMSwgMHhkMCwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHgxZiwgMHhmOCwgMHgwMCwgMHgyOCwKLTB4MGMsIDB4ZDAsIDB4YTgsIDB4NDIsIDB4MDIsIDB4ZDEsIDB4MGMsIDB4NGIsIDB4OTgsIDB4NDIsIDB4MDcsIDB4ZDAsCi0weDgwLCAweDIzLCAweGI4LCAweDY5LCAweDE4LCAweDQzLCAweGI4LCAweDYxLCAweDYwLCAweDZiLCAweDAxLCAweDMwLAotMHg2MCwgMHg2MywgMHgwNywgMHhlMCwgMHgwMSwgMHgyMywgMHg1YiwgMHgwMiwgMHhiOCwgMHg2OSwgMHgxOCwgMHg0MywKLTB4YjgsIDB4NjEsIDB4YTAsIDB4NmEsIDB4MDEsIDB4MzAsIDB4YTAsIDB4NjIsIDB4MDAsIDB4MjAsIDB4YjAsIDB4YmMsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDBjLCAweDJiLCAweDAwLCAweDgwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLAotMHhmMCwgMHhiNSwgMHhmZiwgMHhiMCwgMHg5OSwgMHhiMCwgMHgwNCwgMHgxYywgMHhlMCwgMHg2YiwgMHg2MSwgMHg2YywKLTB4MDksIDB4MTgsIDB4MDMsIDB4YWEsIDB4ODUsIDB4MTgsIDB4YTMsIDB4NmEsIDB4MDAsIDB4MjAsIDB4OGEsIDB4MDgsCi0weDAxLCAweDMyLCAweDk3LCAweDkyLCAweDA3LCAweGQwLCAweDgyLCAweDAwLCAweDlmLCAweDU4LCAweDAzLCAweGFlLAotMHhiNywgMHg1MCwgMHg5NywgMHg5YSwgMHgwMSwgMHgzMCwgMHg4MiwgMHg0MiwgMHhmNywgMHhkOCwgMHg2MCwgMHg2YSwKLTB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MDQsIDB4MzAsIDB4MTgsIDB4NDMsIDB4MDAsIDB4NjgsIDB4YzAsIDB4NDYsCi0weDAyLCAweDkwLCAweDAyLCAweGFmLCAweDNmLCAweDg4LCAweDAzLCAweGE4LCAweGZmLCAweGY3LCAweDg3LCAweGZlLAotMHhjMCwgMHg0MywgMHgwMSwgMHgwNCwgMHgwOSwgMHgwYywgMHgzOCwgMHgxYywgMHhmZiwgMHhmNywgMHg2ZCwgMHhmZSwKLTB4MDcsIDB4MWMsIDB4ZTAsIDB4NmIsIDB4YTEsIDB4NmMsIDB4NDAsIDB4MTgsIDB4NjEsIDB4NmEsIDB4MDEsIDB4MjMsCi0weDliLCAweDA3LCAweDA4LCAweDMxLCAweDE5LCAweDQzLCAweDA5LCAweDY4LCAweGMwLCAweDQ2LCAweDAxLCAweDkxLAotMHgwMSwgMHhhOSwgMHgwOSwgMHg4OCwgMHgwMSwgMHgzMSwgMHg4OCwgMHg0MiwgMHgwYywgMHhkMiwgMHhhMiwgMHg2YSwKLTB4MTIsIDB4MTgsIDB4MDksIDB4MWEsIDB4MTAsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4MmYsIDB4ZjgsIDB4YzAsIDB4NDMsCi0weDAxLCAweDA0LCAweDA5LCAweDBjLCAweDM4LCAweDFjLCAweGZmLCAweGY3LCAweDUwLCAweGZlLCAweDA3LCAweDFjLAotMHhhOCwgMHg4OSwgMHhlOSwgMHg4OSwgMHgwOCwgMHgxOCwgMHgyOSwgMHg4YSwgMHgwOCwgMHgxOCwgMHg2OSwgMHg4YSwKLTB4MDgsIDB4MTgsIDB4NjksIDB4N2EsIDB4MDksIDB4MDIsIDB4MDgsIDB4MTgsIDB4YTEsIDB4NmMsIDB4NjIsIDB4NmMsCi0weDg5LCAweDFhLCAweDBhLCAweDA0LCAweDEyLCAweDBjLCAweDExLCAweDAyLCAweDEyLCAweDBhLCAweDExLCAweDQzLAotMHgwOSwgMHgwNCwgMHgwOSwgMHgwYywgMHgwOSwgMHgxOCwgMHgwOCwgMHgwYywgMHgwNSwgMHhkMCwgMHgwOCwgMHgwNCwKLTB4MDAsIDB4MGMsIDB4MDksIDB4MGMsIDB4NDEsIDB4MTgsIDB4MDgsIDB4MGMsIDB4ZjksIDB4ZDEsIDB4MzgsIDB4MWMsCi0weGZmLCAweGY3LCAweDJmLCAweGZlLCAweGMwLCAweDQzLCAweDAwLCAweDA0LCAweDAwLCAweDBjLCAweDdmLCAweGIwLAotMHgxOSwgMHhiMCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHhiMCwgMHhiNCwgMHgwMCwgMHgyMiwKLTB4MDAsIDB4MjksIDB4MmUsIDB4ZDAsIDB4ODMsIDB4MDcsIDB4OWIsIDB4MGYsIDB4ZGMsIDB4MDAsIDB4NDcsIDB4MTgsCi0weDA0LCAweDI1LCAweGVmLCAweDFiLCAweGJmLCAweDA3LCAweGJmLCAweDBmLCAweGZmLCAweDAwLCAweDgwLCAweDA4LAotMHg4MCwgMHgwMCwgMHg1OSwgMHgxOCwgMHgwMywgMHgzMSwgMHg4OSwgMHgwOCwgMHg0ZCwgMHgxZSwgMHgwMiwgMHhjOCwKLTB4ZTEsIDB4NDAsIDB4YTEsIDB4NDAsIDB4NmIsIDB4MWUsIDB4MDAsIDB4MmQsIDB4MDksIDB4ZDAsIDB4MGMsIDB4MDQsCi0weDI0LCAweDBjLCAweGEyLCAweDE4LCAweDA5LCAweDBjLCAweDhhLCAweDE4LCAweDAyLCAweGM4LCAweDFjLCAweDFjLAotMHgwMSwgMHgzYiwgMHgwMCwgMHgyYywgMHhmNSwgMHhkMSwgMHhiOSwgMHg0MCwgMHgwOCwgMHgxYywgMHhmOCwgMHg0MCwKLTB4MDEsIDB4MDQsIDB4MDksIDB4MGMsIDB4ODksIDB4MTgsIDB4MDAsIDB4MGMsIDB4NDIsIDB4MTgsIDB4MTAsIDB4MGMsCi0weDA1LCAweGQwLCAweDEwLCAweDA0LCAweDAwLCAweDBjLCAweDExLCAweDBjLCAweDQyLCAweDE4LCAweDEwLCAweDBjLAotMHhmOSwgMHhkMSwgMHgxMCwgMHgwNCwgMHgwMCwgMHgwYywgMHhiMCwgMHhiYywgMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwKLTB4OTAsIDB4YjQsIDB4MDAsIDB4MjAsIDB4MDEsIDB4MjcsIDB4MTEsIDB4NDksIDB4NDIsIDB4MDAsIDB4MTIsIDB4MTgsCi0weGQyLCAweDAwLCAweDUzLCAweDE4LCAweDljLCAweDY4LCAweDAxLCAweDIzLAotMHg5YiwgMHgwNywgMHgyMywgMHg0MywgMHgxYiwgMHg2OCwgMHgxYiwgMHgwMywgMHgxYiwgMHgwYiwgMHg4YSwgMHg1OCwKLTB4MTIsIDB4MDMsIDB4MTIsIDB4MGIsIDB4OTMsIDB4NDIsIDB4MGMsIDB4ZDEsIDB4MDEsIDB4MzAsIDB4MDQsIDB4MjgsCi0weGVjLCAweGQzLCAweDA4LCAweDQ4LCAweGMwLCAweDZhLCAweDAxLCAweDAzLCAweDA5LCAweDBiLCAweDA3LCAweDQ4LAotMHgwMCwgMHg2ZiwgMHgwMCwgMHgwMywgMHgwMCwgMHgwYiwgMHg4MSwgMHg0MiwgMHgwMiwgMHhkMCwgMHgzOCwgMHgxYywKLTB4OTAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MjAsIDB4ZmIsIDB4ZTcsIDB4YTgsIDB4MDMsIDB4MDAsIDB4ODAsCi0weDAwLCAweDQwLCAweDE0LCAweDQwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweDk4LCAweGI0LCAweDE0LCAweDRhLAotMHhjMCwgMHg0NiwgMHgwMCwgMHg5MiwgMHg4MywgMHgwMCwgMHgxMywgMHg0OCwgMHhjMCwgMHg1OCwgMHgwNywgMHgwMywKLTB4M2YsIDB4MGIsIDB4MTIsIDB4NDgsIDB4YzAsIDB4NTgsIDB4MDIsIDB4MDMsIDB4MTIsIDB4MGIsIDB4MTEsIDB4NDgsCi0weGMwLCAweDU4LCAweDAwLCAweDAzLCAweDAwLCAweDBiLCAweDEwLCAweDRjLCAweGU0LCAweDU4LCAweDAxLCAweDIzLAotMHg5YiwgMHgwNywgMHgyMywgMHg0MywgMHgxYiwgMHg2OCwgMHg5YiwgMHgwMCwgMHhjYywgMHgwMCwgMHgwMSwgMHgyMSwKLTB4OTgsIDB4NDIsIDB4MDEsIDB4ZDEsIDB4MDgsIDB4MWMsIDB4MDksIDB4ZTAsIDB4OTgsIDB4NDIsIDB4MDMsIDB4ZDksCi0weDEwLCAweDFhLCAweGRhLCAweDFiLCAweDgwLCAweDE4LCAweDAwLCAweGUwLCAweDE4LCAweDFhLCAweDg0LCAweDQyLAotMHhmNCwgMHhkMywgMHgwMCwgMHgyMCwgMHg5OCwgMHhiYywgMHg3MCwgMHg0NywgMHg1NSwgMHg1NSwgMHg1NSwgMHg1NSwKLTB4MjAsIDB4MDQsIDB4MDAsIDB4ODAsIDB4MjgsIDB4MDQsIDB4MDAsIDB4ODAsIDB4MDgsIDB4MDQsIDB4MDAsIDB4ODAsCi0weDE4LCAweDA0LCAweDAwLCAweDgwLCAweDgwLCAweGI0LCAweDEzLCAweDA0LCAweDAwLCAweGQwLCAweDAxLCAweDNhLAotMHg4MCwgMHgwMCwgMHgwYiwgMHgxYywgMHgxMywgMHg0OSwgMHgwZiwgMHg1OCwgMHhjMCwgMHg0NiwgMHgzYiwgMHg2MCwKLTB4MGIsIDB4NTgsIDB4YzAsIDB4NDYsIDB4NWEsIDB4NjAsIDB4MGEsIDB4NTgsIDB4MDgsIDB4MzIsIDB4MTAsIDB4NGIsCi0weDFiLCAweDU4LCAweDlhLCAweDQyLCAweDAxLCAweGQzLCAweDBmLCAweDRhLCAweDEyLCAweDU4LCAweDBmLCAweDRiLAotMHgxZiwgMHg1OCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgzYiwgMHg0MywgMHgxYiwgMHg2OCwgMHg5YiwgMHgwMCwKLTB4MTcsIDB4MDMsIDB4M2YsIDB4MGIsIDB4OWYsIDB4NDIsIDB4MDYsIDB4ZDEsIDB4MGEsIDB4NDgsIDB4YzEsIDB4NjgsCi0weDAxLCAweDMxLCAweGMxLCAweDYwLCAweDAxLCAweDIwLCAweDgwLCAweGJjLCAweDcwLCAweDQ3LCAweDA4LCAweDRiLAotMHgxYiwgMHg1OCwgMHhjMCwgMHg0NiwgMHgxYSwgMHg2MCwgMHgwYSwgMHg1MCwgMHgwMCwgMHgyMCwgMHhmNiwgMHhlNywKLTB4MDgsIDB4MDQsIDB4MDAsIDB4ODAsIDB4MjgsIDB4MDQsIDB4MDAsIDB4ODAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4ODAsCi0weDE4LCAweDA0LCAweDAwLCAweDgwLCAweGEwLCAweDgyLCAweDIwLCAweDQwLCAweDEwLCAweDA0LCAweDAwLCAweDgwLAotMHhmZiwgMHg1ZiwgMHgyZCwgMHhlOSwgMHg0OCwgMHhmZSwgMHhmZiwgMHhlYiwgMHgwMSwgMHhiNiwgMHhhMCwgMHhlMywKLTB4MDEsIDB4YjEsIDB4OGIsIDB4ZTIsIDB4MDIsIDB4OGEsIDB4YTAsIDB4ZTMsIDB4MDEsIDB4N2EsIDB4YTAsIDB4ZTMsCi0weDAxLCAweGE5LCAweGEwLCAweGUzLCAweDAxLCAweDU2LCAweGEwLCAweGUzLCAweGM4LCAweDYwLCAweDlmLCAweGU1LAotMHhjOCwgMHg5MCwgMHg5ZiwgMHhlNSwgMHgxNCwgMHg0MCwgMHg5YiwgMHhlNSwgMHgwMCwgMHgwMCwgMHg1NCwgMHhlMywKLTB4MmMsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MDMsIDB4MGEsIDB4MTQsIDB4ZTMsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MGEsCi0weDBjLCAweDAwLCAweDk2LCAweGU1LCAweDAwLCAweDAwLCAweDUwLCAweGUzLCAweDIxLCAweDAwLCAweDAwLCAweDBhLAotMHgwMSwgMHgwYSwgMHgxNCwgMHhlMywgMHgwNSwgMHgwMCwgMHgwMCwgMHgwYSwgMHgxYywgMHgwMCwgMHg5NiwgMHhlNSwKLTB4MDEsIDB4MGEsIDB4YzAsIDB4ZTMsIDB4MWMsIDB4MDAsIDB4ODYsIDB4ZTUsIDB4MWMsIDB4MDAsIDB4ODUsIDB4ZTUsCi0weDE0LCAweDcwLCAweDg1LCAweGU1LCAweDA2LCAweDAwLCAweDAwLCAweGVhLCAweDAyLCAweDBhLCAweDE0LCAweGUzLAotMHgwNCwgMHgwMCwgMHgwMCwgMHgwYSwgMHgxYywgMHgwMCwgMHg5NiwgMHhlNSwgMHgwMiwgMHgwYSwgMHhjMCwgMHhlMywKLTB4MWMsIDB4MDAsIDB4ODYsIDB4ZTUsIDB4MWMsIDB4MDAsIDB4ODUsIDB4ZTUsIDB4MTQsIDB4ODAsIDB4ODUsIDB4ZTUsCi0weDAxLCAweDA5LCAweDE0LCAweGUzLCAweDA0LCAweDAwLCAweDAwLCAweDBhLCAweDFjLCAweDAwLCAweDk2LCAweGU1LAotMHgwMSwgMHgwOSwgMHhjMCwgMHhlMywgMHgxYywgMHgwMCwgMHg4NiwgMHhlNSwgMHgxYywgMHgwMCwgMHg4NSwgMHhlNSwKLTB4MTQsIDB4YTAsIDB4ODUsIDB4ZTUsIDB4MDIsIDB4MDAsIDB4MTQsIDB4ZTMsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MWIsCi0weDAxLCAweDAwLCAweDE0LCAweGUzLCAweDU0LCAweDAwLCAweDAwLCAweDFiLCAweDAyLCAweDBiLCAweDE0LCAweGUzLAotMHg2NywgMHgwMCwgMHgwMCwgMHgxYiwgMHgwMSwgMHgwYiwgMHgxNCwgMHhlMywgMHgyMCwgMHgwMCwgMHgwMCwgMHgxYiwKLTB4MTgsIDB4MDAsIDB4OTksIDB4ZTUsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZTIsIDB4MTgsIDB4MDAsIDB4ODksIDB4ZTUsCi0weGQ1LCAweGZmLCAweGZmLCAweGVhLCAweDFjLCAweDAwLCAweDk2LCAweGU1LCAweDAxLCAweDBhLCAweGMwLCAweGUzLAotMHgxYywgMHgwMCwgMHg4NiwgMHhlNSwgMHgxYywgMHgwMCwgMHg4NSwgMHhlNSwKLTB4MTQsIDB4NzAsIDB4ODUsIDB4ZTUsIDB4ZTEsIDB4ZmYsIDB4ZmYsIDB4ZWEsIDB4ZmYsIDB4NWYsIDB4YmQsIDB4ZTgsCi0weDA0LCAweGYwLCAweDVlLCAweGUyLCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweDA4LCAweDgzLCAweDIwLCAweDQwLAotMHgxMCwgMHgxMCwgMHgxZiwgMHhlNSwgMHgxNCwgMHgzMCwgMHg5MSwgMHhlNSwgMHgwMCwgMHgyMCwgMHhjMywgMHhlMSwKLTB4MTQsIDB4MjAsIDB4ODEsIDB4ZTUsIDB4MDEsIDB4MTYsIDB4YTAsIDB4ZTMsIDB4MGMsIDB4MjAsIDB4ODEsIDB4ZTUsCi0weDBiLCAweDEyLCAweGEwLCAweGUzLCAweDAwLCAweDAwLCAweDgxLCAweGU1LCAweDE4LCAweDEwLCAweDlmLCAweGU1LAotMHhiMCwgMHgyNCwgMHhkMSwgMHhlMSwgMHgwMSwgMHgyMCwgMHg4MiwgMHhlMiwgMHhiMCwgMHgyNCwgMHhjMSwgMHhlMSwKLTB4M2MsIDB4MjAsIDB4OTEsIDB4ZTUsIDB4MDAsIDB4MDAsIDB4ODIsIDB4ZTEsIDB4M2MsIDB4MDAsIDB4ODEsIDB4ZTUsCi0weDFlLCAweGZmLCAweDJmLCAweGUxLCAweGEwLCAweDgyLCAweDIwLCAweDQwLCAweGZmLCAweGZmLCAweGZmLCAweGVhLAotMHhmZSwgMHhmZiwgMHhmZiwgMHhlYSwgMHgwMSwgMHgwYiwgMHhhMCwgMHhlMywgMHgwMSwgMHgxNiwgMHhhMCwgMHhlMywKLTB4MTQsIDB4MDAsIDB4ODEsIDB4ZTUsIDB4MDAsIDB4MWEsIDB4ODEsIDB4ZTEsIDB4MjQsIDB4MjAsIDB4OTEsIDB4ZTUsCi0weDcwLCAweDAwLCAweDFmLCAweGU1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI0LCAweDIwLCAweDgwLCAweGU1LAotMHgyOCwgMHgxMCwgMHg5MSwgMHhlNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgxMCwgMHg4MCwgMHhlNSwKLTB4MmMsIDB4MjAsIDB4OTAsIDB4ZTUsIDB4MDEsIDB4MjAsIDB4ODIsIDB4ZTIsIDB4MmMsIDB4MjAsIDB4ODAsIDB4ZTUsCi0weDNmLCAweDAwLCAweDAxLCAweGUyLCAweDNmLCAweDAwLCAweDUwLCAweGUzLCAweDFlLCAweGZmLCAweDJmLCAweDExLAotMHgxOCwgMHgwMCwgMHg5ZiwgMHhlNSwgMHgwMCwgMHgxMCwgMHg5MCwgMHhlNSwgMHgwMSwgMHgxMCwgMHg4MSwgMHhlMiwKLTB4MDAsIDB4MTAsIDB4ODAsIDB4ZTUsIDB4MDIsIDB4MTgsIDB4YTAsIDB4ZTMsIDB4MGIsIDB4MDIsIDB4YTAsIDB4ZTMsCi0weDAwLCAweDEwLCAweDgwLCAweGU1LCAweDFlLCAweGZmLCAweDJmLCAweGUxLCAweDMwLCAweDA0LCAweDAwLCAweDgwLAotMHgwMSwgMHgwNiwgMHhhMCwgMHhlMywgMHgwMSwgMHgwMSwgMHg4MCwgMHhlMiwgMHgwMCwgMHgxMCwgMHg5MCwgMHhlNSwKLTB4MDEsIDB4MDgsIDB4MTEsIDB4ZTMsIDB4MGIsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MDIsIDB4MTksIDB4ODEsIDB4ZTIsCi0weDA1LCAweDAwLCAweDAwLCAweDFhLCAweDAwLCAweDIwLCAweDkwLCAweGU1LCAweDQyLCAweDI4LCAweGIwLCAweGUxLAotMHgwNSwgMHgwMCwgMHgwMCwgMHgxYSwgMHgwMCwgMHgwMCwgMHg5MCwgMHhlNSwgMHgwMiwgMHgwYywgMHgxMCwgMHhlMywKLTB4MDIsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MDYsIDB4MDcsIDB4YTAsIDB4ZTMsIDB4NGMsIDB4MTEsIDB4ODAsIDB4ZTUsCi0weDAzLCAweDAwLCAweDAwLCAweGVhLCAweDBjLCAweDAwLCAweDlmLCAweGU1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHg0MCwgMHgxMCwgMHg4MCwgMHhlNSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhlYSwgMHhmZSwgMHhmZiwgMHhmZiwgMHhlYSwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDEsIDB4MDYsIDB4YTAsIDB4ZTMsIDB4MDEsIDB4MDEsIDB4ODAsIDB4ZTIsCi0weDAwLCAweDEwLCAweDkwLCAweGU1LCAweDAxLCAweDA4LCAweDExLCAweGUzLCAweDBjLCAweDEwLCAweGEwLCAweGUzLAotMHgwMiwgMHgxOSwgMHg4MSwgMHhlMiwgMHgwNSwgMHgwMCwgMHgwMCwgMHgxYSwgMHgwMCwgMHgyMCwgMHg5MCwgMHhlNSwKLTB4NDIsIDB4MjgsIDB4YjAsIDB4ZTEsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MWEsIDB4MDAsIDB4MDAsIDB4OTAsIDB4ZTUsCi0weDAyLCAweDBjLCAweDEwLCAweGUzLCAweDAyLCAweDAwLCAweDAwLCAweDBhLCAweDA2LCAweDA3LCAweGEwLCAweGUzLAotMHg0YywgMHgxMSwgMHg4MCwgMHhlNSwgMHgwMywgMHgwMCwgMHgwMCwgMHhlYSwgMHg0YywgMHgwMCwgMHgxZiwgMHhlNSwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTAsIDB4ODAsIDB4ZTUsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZWEsCi0weGZlLCAweGZmLCAweGZmLCAweGVhLCAweDAyLCAweDFiLCAweGEwLCAweGUzLCAweDAxLCAweDA2LCAweGEwLCAweGUzLAotMHgxNCwgMHgxMCwgMHg4MCwgMHhlNSwgMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwgMHg4MCwgMHgyMSwgMHgxZiwgMHhlNSwKLTB4MTQsIDB4MzAsIDB4OTIsIDB4ZTUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4ODAsIDB4ZTUsCi0weDFjLCAweDAwLCAweDkyLCAweGU1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgxLCAweGU1LAotMHgwMCwgMHgxMCwgMHhhMCwgMHhlMywgMHgxNCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMSwgMHgwNiwgMHhhMCwgMHhlMywKLTB4MWMsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MGMsIDB4MTAsIDB4ODAsIDB4ZTUsIDB4MWMsIDB4MTAsIDB4OTIsIDB4ZTUsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDEwLCAweDgwLCAweGU1LCAweDFlLCAweGZmLCAweDJmLCAweGUxLAotMHhjMCwgMHgyMSwgMHgxZiwgMHhlNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgxMCwgMHg4MiwgMHhlNSwKLTB4MDEsIDB4MTYsIDB4YTAsIDB4ZTMsIDB4MTQsIDB4MDAsIDB4ODIsIDB4ZTUsIDB4MGMsIDB4MDAsIDB4ODEsIDB4ZTUsCi0weDFjLCAweDAwLCAweDkyLCAweGU1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDAwLCAweDgxLCAweGU1LAotMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwgMHg4MCwgMHhiNSwgMHgwZiwgMHgxYywgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwKLTB4MTcsIDB4ZjgsIDB4MDAsIDB4MjgsIDB4MDIsIDB4ZDAsIDB4MzgsIDB4MWMsCi0weDAwLCAweGYwLCAweDkyLCAweGY4LCAweDAwLCAweDIwLCAweDgwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHg4MCwgMHhiNSwgMHgwZiwgMHgxYywgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHgwOSwgMHhmOCwgMHgwMCwgMHgyOCwKLTB4MDIsIDB4ZDAsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4ODQsIDB4ZjgsIDB4MDAsIDB4MjAsIDB4ODAsIDB4YmMsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweGYwLCAweGI0LCAweDA3LCAweDY4LCAweDNhLCAweDc4LCAweGQyLCAweDA3LAotMHhkMiwgMHgwZiwgMHgwMCwgMHgyNCwgMHgwMCwgMHgyYSwgMHgwMywgMHhkMCwgMHhmZiwgMHgyMiwgMHgwMSwgMHgzMiwKLTB4NDIsIDB4NjAsIDB4MDAsIDB4ZTAsIDB4NDQsIDB4NjAsIDB4M2EsIDB4N2IsIDB4N2IsIDB4N2IsIDB4MWIsIDB4MDIsCi0weDFhLCAweDQzLCAweDgxLCAweDJhLCAweDA4LCAweGQxLCAweDAxLCAweDIzLCAweDViLCAweDAyLCAweDQyLCAweDY4LAotMHgxYSwgMHg0MywgMHg0MiwgMHg2MCwgMHgwNCwgMHgyMiwgMHhiZiwgMHgxOCwgMHg4MiwgMHg2MCwgMHgwMCwgMHhlMCwKLTB4ODQsIDB4NjAsIDB4M2EsIDB4N2IsIDB4N2IsIDB4N2IsIDB4MWIsIDB4MDIsIDB4MWEsIDB4NDMsIDB4MDgsIDB4MmEsCi0weDA2LCAweGQxLCAweDA2LCAweDIzLCAweDQxLCAweDY4LCAweDE5LCAweDQzLCAweDQxLCAweDYwLCAweDgxLCAweDY4LAotMHgwZSwgMHgzMSwgMHgzYywgMHhlMCwgMHhjMSwgMHgyMywgMHhkYiwgMHgwMCwgMHg5YSwgMHg0MiwgMHgwMywgMHhkMSwKLTB4NDEsIDB4NjgsIDB4MjQsIDB4NGIsIDB4MTksIDB4NDMsIDB4M2UsIDB4ZTAsIDB4MjMsIDB4NGIsIDB4OWEsIDB4NDIsCi0weDA0LCAweGQxLCAweDAxLCAweDIzLCAweDFiLCAweDAzLCAweDQxLCAweDY4LCAweDE5LCAweDQzLCAweDM2LCAweGUwLAotMHgxMywgMHgwMiwgMHgxMiwgMHgwYSwgMHgxMiwgMHgwNiwgMHgxMiwgMHgwZSwgMHgxYSwgMHg0MywgMHgxMiwgMHgwNCwKLTB4MTIsIDB4MGMsIDB4MmUsIDB4M2EsIDB4MWMsIDB4NGIsIDB4OWEsIDB4NDIsIDB4MmQsIDB4ZDgsIDB4MDEsIDB4MjUsCi0weDQyLCAweDY4LCAweDE1LCAweDQzLCAweDQ1LCAweDYwLCAweGJhLCAweDdiLCAweGZiLCAweDdiLCAweDFiLCAweDAyLAotMHgxYSwgMHg0MywgMHgxOCwgMHg0YiwgMHg5YSwgMHg0MiwgMHgyMiwgMHhkMSwgMHhmYiwgMHgxZCwgMHgwOSwgMHgzMywKLTB4NDQsIDB4Y2IsIDB4OWIsIDB4MDcsIDB4ZGIsIDB4MGUsIDB4ZGEsIDB4NDAsIDB4NWIsIDB4NDIsIDB4MjAsIDB4MzMsCi0weDllLCAweDQwLCAweDE2LCAweDQzLCAweDAzLCAweDJlLCAweDE4LCAweGQxLCAweDM5LCAweDdkLCAweDdiLCAweDdkLAotMHgxYiwgMHgwMiwgMHgxOSwgMHg0MywgMHgwOCwgMHgyOSwgMHgwNywgMHhkMSwgMHgwNCwgMHgyMSwgMHgyOSwgMHg0MywKLTB4NDEsIDB4NjAsIDB4ODEsIDB4NjgsIDB4MTYsIDB4MzEsIDB4ODEsIDB4NjAsIDB4MDEsIDB4MjEsIDB4MGEsIDB4ZTAsCi0weGMxLCAweDIzLCAweGRiLCAweDAwLCAweDk5LCAweDQyLCAweDA0LCAweGQxLCAweDAxLCAweDIxLCAweDg5LCAweDAzLAotMHgyOSwgMHg0MywgMHg0MSwgMHg2MCwgMHgwMCwgMHhlMCwgMHg4NCwgMHg2MCwgMHgwMCwgMHgyMSwgMHgwOCwgMHgxYywKLTB4ZjAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4ODAsIDB4MDAsIDB4MDAsCi0weGFlLCAweDA1LCAweDAwLCAweDAwLCAweGFhLCAweGFhLCAweDAwLCAweDAwLCAweDgwLCAweGI0LCAweDQyLCAweDY4LAotMHhkMSwgMHgwOCwgMHgzZiwgMHhkMywgMHgwMSwgMHg2OCwgMHg4MywgMHg2OCwgMHg1OSwgMHgxOCwgMHgwMiwgMHgzOSwKLTB4OGYsIDB4NzgsIDB4M2YsIDB4MDcsIDB4M2YsIDB4MGYsIDB4MDUsIDB4MmYsIDB4MDMsIDB4ZDEsIDB4ZGEsIDB4MWQsCi0weDBkLCAweDMyLCAweGMyLCAweDYwLCAweDA1LCAweGUwLCAweGJmLCAweDAwLCAweGRiLCAweDE5LCAweGMzLCAweDYwLAotMHgwOCwgMHgyMywgMHgxYSwgMHg0MywgMHg0MiwgMHg2MCwgMHg4YSwgMHg3OCwgMHgxMiwgMHgwNywgMHgxMiwgMHgwZiwKLTB4OTIsIDB4MDAsIDB4MDIsIDB4NjEsIDB4MGEsIDB4NzksIDB4NGIsIDB4NzksIDB4MWIsIDB4MDIsIDB4MWEsIDB4NDMsCi0weDEzLCAweDAyLCAweDEyLCAweDBhLCAweDEyLCAweDA2LCAweDEyLCAweDBlLCAweDFhLCAweDQzLCAweDEyLCAweDA0LAotMHgxMiwgMHgwYywgMHg0MiwgMHg2MSwgMHhjYSwgMHg3YSwgMHgwNiwgMHgyYSwgMHgwMywgMHhkMSwgMHgxMCwgMHgyMywKLTB4NDIsIDB4NjgsIDB4MWEsIDB4NDMsIDB4MTAsIDB4ZTAsIDB4MTEsIDB4MmEsIDB4MDMsIDB4ZDEsIDB4MjAsIDB4MjMsCi0weDQyLCAweDY4LCAweDFhLCAweDQzLCAweDBhLCAweGUwLCAweDMzLCAweDJhLCAweDAzLCAweGQxLCAweDQwLCAweDIzLAotMHg0MiwgMHg2OCwgMHgxYSwgMHg0MywgMHgwNCwgMHhlMCwgMHgzMiwgMHgyYSwgMHgwMywgMHhkMSwgMHg4MCwgMHgyMywKLTB4NDIsIDB4NjgsIDB4MWEsIDB4NDMsIDB4NDIsIDB4NjAsIDB4YzksIDB4N2EsIDB4YzAsIDB4NDYsIDB4MDEsIDB4NzYsCi0weDgwLCAweGJjLCAweDcwLCAweDQ3LCAweDBhLCAweDc4LCAweGMwLCAweDQ2LCAweDAyLCAweDYwLCAweDRiLCAweDc4LAotMHgxYiwgMHgwMiwgMHgxYSwgMHg0MywgMHgwMiwgMHg2MCwgMHg4YiwgMHg3OCwgMHgxYiwgMHgwNCwgMHgxYSwgMHg0MywKLTB4MDIsIDB4NjAsIDB4YzksIDB4NzgsIDB4MDksIDB4MDYsIDB4MTEsIDB4NDMsIDB4MDEsIDB4NjAsIDB4NzAsIDB4NDcsCi0weDgwLCAweGI1LCAweDA3LCAweDFjLCAweDQ4LCAweDY4LCAweDgwLCAweDA5LCAweDI2LCAweGQzLCAweGI4LCAweDZhLAotMHhjOSwgMHg2OCwgMHg0MCwgMHgxOCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgwMiwgMHgzMCwgMHgxOCwgMHg0MywKLTB4MDAsIDB4NjgsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MGMsIDB4MTEsIDB4MjMsIDB4OWIsIDB4MDIsIDB4OTgsIDB4NDIsCi0weDE4LCAweGQxLCAweDc4LCAweDZhLCAweDM5LCAweDZiLCAweGMwLCAweDQ2LAotMHg0OCwgMHg2MiwgMHgzOCwgMHg2YiwgMHgwMiwgMHhmMCwgMHhkYSwgMHhmOCwgMHgzOCwgMHgxYywgMHgwMSwgMHhmMCwKLTB4OTUsIDB4ZmQsIDB4MDEsIDB4MjAsIDB4MDcsIDB4NDksIDB4YzAsIDB4NDYsIDB4YzgsIDB4NzMsIDB4MDcsIDB4NDksCi0weDRhLCAweDZjLCAweDEyLCAweDE4LCAweDRhLCAweDY0LCAweDA2LCAweDQ5LCAweDhhLCAweDZkLCAweDEyLCAweDE4LAotMHg4YSwgMHg2NSwgMHg4MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgyMCwgMHhmYSwgMHhlNywKLTB4MTgsIDB4MWEsIDB4MDAsIDB4ODAsIDB4MGMsIDB4MmIsIDB4MDAsIDB4ODAsIDB4YTQsIDB4MmEsIDB4MDAsIDB4ODAsCi0weDgxLCAweDA3LCAweDE5LCAweGQwLCAweDgwLCAweDA4LCAweDgwLCAweDAwLCAweDAxLCAweDIzLCAweDliLCAweDA3LAotMHgwMSwgMHgxZCwgMHgxOCwgMHg0MywgMHgwMCwgMHg2OCwgMHgxOSwgMHg0MywgMHgwOSwgMHg2OCwgMHgwMiwgMHgwMiwKLTB4MTIsIDB4MGUsIDB4MTIsIDB4MDYsIDB4MDAsIDB4MGEsIDB4ZmYsIDB4MjMsIDB4MWIsIDB4MDQsIDB4MTgsIDB4NDAsCi0weDEwLCAweDQzLCAweDBhLCAweDBhLCAweDEyLCAweDA2LCAweDEyLCAweDBlLCAweDEwLCAweDQzLCAweDA5LCAweDAyLAotMHgxYiwgMHgwYSwgMHgxOSwgMHg0MCwgMHgwOCwgMHg0MywgMHg3MCwgMHg0NywgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywKLTB4MTgsIDB4NDMsIDB4MDAsIDB4NjgsIDB4MDEsIDB4MDYsIDB4MDIsIDB4MDIsIDB4ZmYsIDB4MjMsIDB4MWIsIDB4MDQsCi0weDFhLCAweDQwLCAweDExLCAweDQzLCAweDAyLCAweDBhLCAweDFiLCAweDBhLCAweDFhLCAweDQwLCAweDExLCAweDQzLAotMHgwMCwgMHgwZSwgMHgwOCwgMHg0MywgMHhlZCwgMHhlNywgMHgwMCwgMHgwMCwgMHhmMCwgMHhiNSwgMHgwNCwgMHgyMywKLTB4ODEsIDB4NmIsIDB4MTksIDB4NDAsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MjksIDB4NDYsIDB4ZDAsIDB4YzcsIDB4MWQsCi0weDM5LCAweDM3LCAweDM5LCAweDdiLCAweDMzLCAweDI5LCAweDAxLCAweGQwLCAweDMyLCAweDI5LCAweDNmLCAweGQxLAotMHgwMSwgMHg2YiwgMHhjMCwgMHg0NiwgMHg0YSwgMHg2NSwgMHhjNCwgMHgxZCwgMHgyZCwgMHgzNCwgMHhjZCwgMHgxZCwKLTB4MmQsIDB4MzUsIDB4MDAsIDB4MjIsIDB4OTMsIDB4MDAsIDB4ZTYsIDB4NTgsIDB4YzAsIDB4NDYsIDB4ZWUsIDB4NTAsCi0weDAxLCAweDMyLCAweDA3LCAweDJhLCAweGY4LCAweGQzLCAweDgyLCAweDZhLCAweGMwLCAweDQ2LCAweDRhLCAweDYzLAotMHg4MiwgMHg2YSwgMHhjMCwgMHg0NiwgMHg4YSwgMHg2MiwgMHg3YSwgMHg4YiwgMHhjYiwgMHgxZCwgMHgzOSwgMHgzMywKLTB4NWEsIDB4ODMsIDB4NDAsIDB4NmEsIDB4YzAsIDB4NDYsIDB4NDgsIDB4NjIsIDB4MTIsIDB4NDgsIDB4MDEsIDB4MjcsCi0weDQyLCAweDY4LCAweDAwLCAweDJhLCAweDEwLCAweGQxLCAweGMyLCAweDY4LCAweDAwLCAweDJhLCAweDEzLCAweGQxLAotMHg0MiwgMHg2OSwgMHgwMCwgMHgyYSwgMHgwZCwgMHhkMSwgMHgwMSwgMHg2MSwgMHhjMSwgMHg2MCwgMHgwMSwgMHg2YSwKLTB4MDIsIDB4MjksIDB4MDIsIDB4ZDMsIDB4MjAsIDB4MzAsIDB4MDcsIDB4NzEsIDB4MGMsIDB4ZTAsIDB4MDAsIDB4ZjAsCi0weDEzLCAweGY4LCAweDA5LCAweGUwLCAweGMyLCAweDY4LCAweDAwLCAweDJhLCAweDAyLCAweGQxLCAweDAxLCAweDYxLAotMHhjMSwgMHg2MCwgMHgwMywgMHhlMCwgMHgwMiwgMHg2OSwgMHhjMCwgMHg0NiwgMHg1MSwgMHg2NSwgMHgwMSwgMHg2MSwKLTB4MzgsIDB4MWMsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MTAsIDB4MWMsIDB4ZmEsIDB4ZTcsCi0weDZjLCAweDA2LCAweDAwLCAweDgwLCAweDgwLCAweGI1LCAweDFlLCAweDQ5LCAweDAwLCAweDIyLCAweGNiLCAweDY4LAotMHgwMCwgMHgyYiwgMHgzNCwgMHhkMCwgMHhjOCwgMHgxZCwgMHhmOSwgMHgzMCwgMHg4MywgMHg2MiwgMHhjYiwgMHg2OCwKLTB4OWIsIDB4NmEsIDB4YzAsIDB4NDYsIDB4YzMsIDB4NjIsIDB4Y2YsIDB4NjksIDB4N2IsIDB4MDAsIDB4ZGYsIDB4MTksCi0weDdmLCAweDAyLCAweDE3LCAweDRiLCAweGZmLCAweDE4LCAweGZmLCAweDM3LCAweDY1LCAweDM3LCAweDgzLCAweDYzLAotMHgwNywgMHg2MywgMHhjYiwgMHgxZCwgMHhmZiwgMHgzMywgMHg1YSwgMHgzMywgMHgxYSwgMHg3MiwgMHhjYiwgMHg2OSwKLTB4MDAsIDB4MmIsIDB4MDEsIDB4ZDAsIDB4Y2EsIDB4NjEsIDB4MDEsIDB4ZTAsIDB4MDEsIDB4MjMsIDB4Y2IsIDB4NjEsCi0weDBmLCAweDFjLCAweGM5LCAweDY4LCAweDQ5LCAweDZhLCAweDA5LCAweDg5LCAweDAxLCAweDMxLCAweDQxLCAweDYzLAotMHhmOCwgMHgxZCwgMHhmZiwgMHgzMCwgMHgzYSwgMHgzMCwgMHg0MiwgMHg2MCwgMHgwMiwgMHg4MiwgMHg4MiwgMHg2MCwKLTB4YzIsIDB4NjAsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4Y2UsIDB4ZmEsIDB4MzgsIDB4NmEsIDB4MDEsIDB4MzAsCi0weDM4LCAweDYyLCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAweDBhLCAweGY4LCAweDgwLCAweGJjLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHgxMCwgMHgxYywgMHhmYSwgMHhlNywgMHgwMCwgMHgwMCwgMHg2YywgMHgwNiwgMHgwMCwgMHg4MCwKLTB4YWMsIDB4YWIsIDB4MjAsIDB4NDAsIDB4ZjAsIDB4YjUsIDB4MDcsIDB4MWMsIDB4ZjksIDB4MWQsIDB4ZjksIDB4MzEsCi0weDg4LCAweDZhLCAweGMyLCAweDFkLCAweDJkLCAweDMyLCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweDA4LCAweDMyLAotMHgxYSwgMHg0MywgMHhjOCwgMHg2YSwgMHgxMiwgMHg2OCwgMHgxMiwgMHgwNCwgMHgxMiwgMHgwYywgMHg4MCwgMHgxOCwKLTB4ODIsIDB4NzksIDB4YzMsIDB4NzksIDB4MWIsIDB4MDIsIDB4MWEsIDB4NDMsIDB4MTMsIDB4MDIsIDB4MTIsIDB4MGEsCi0weDEyLCAweDA2LCAweDEyLCAweDBlLCAweDFhLCAweDQzLCAweDEyLCAweDA0LCAweDEyLCAweDBjLCAweDAyLCAweDM4LAotMHg5MiwgMHgwNCwgMHg5MiwgMHgwYywgMHgwMCwgMHgyNiwgMHgyNSwgMHg0ZCwKLTB4ZWMsIDB4MWQsIDB4ZmYsIDB4MzQsIDB4M2EsIDB4MzQsIDB4MDAsIDB4MmEsIDB4MDQsIDB4ZDAsIDB4MjAsIDB4OGEsCi0weDAxLCAweDIzLCAweDliLCAweDAyLCAweDE4LCAweDQzLCAweDJiLCAweGUwLCAweDAxLCAweDIzLCAweDliLCAweDA3LAotMHhjMiwgMHgxZCwgMHgwZCwgMHgzMiwgMHgxYSwgMHg0MywgMHgxMiwgMHg2OCwgMHgxMiwgMHgwNCwgMHgxMiwgMHgzMCwKLTB4MTgsIDB4NDMsIDB4MDAsIDB4NjgsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MGMsIDB4MTAsIDB4NDMsIDB4MDMsIDB4MWMsCi0weGY4LCAweDFkLCAweGZmLCAweDMwLCAweDRhLCAweDMwLCAweDgyLCAweDc4LCAweGM4LCAweDZiLCAweDE5LCAweDFjLAotMHgwMiwgMHhmMCwgMHgwMiwgMHhmOCwgMHgwMCwgMHgyOCwgMHgwNCwgMHhkYSwgMHgyMCwgMHg4YSwgMHhmZiwgMHgyMywKLTB4MDEsIDB4MzMsIDB4MTgsIDB4NDMsIDB4MGUsIDB4ZTAsIDB4ZjksIDB4MWQsIDB4ZmYsIDB4MzEsIDB4M2EsIDB4MzEsCi0weDA4LCAweDYwLCAweDAxLCAweDA0LCAweDA5LCAweDBjLCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAweDFjLCAweGY4LAotMHgwMCwgMHgyOCwgMHgxNCwgMHhkMSwgMHgyMCwgMHg4YSwgMHgwMSwgMHgyMywgMHg1YiwgMHgwMiwgMHgxOCwgMHg0MywKLTB4MjAsIDB4ODIsIDB4MjEsIDB4OGEsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4YTIsIDB4ZmIsIDB4ZTgsIDB4NjgsCi0weDAxLCAweDIzLCAweDliLCAweDA3LCAweDU0LCAweDMwLCAweDE4LCAweDQzLCAweDAwLCAweDY4LCAweGMwLCAweDQ2LAotMHhlOCwgMHg2MCwgMHgzMCwgMHgxYywgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMSwgMHgyMCwKLTB4ZmEsIDB4ZTcsIDB4MDAsIDB4MDAsIDB4NmMsIDB4MDYsIDB4MDAsIDB4ODAsIDB4ZjgsIDB4YjUsIDB4MDcsIDB4MWMsCi0weGZjLCAweDFkLCAweGY5LCAweDM0LCAweGEwLCAweDZiLCAweGE2LCAweDZhLCAweGM1LCAweDFkLCAweDBkLCAweDM1LAotMHgzOCwgMHg0OCwgMHhjMCwgMHg2YSwgMHg0YiwgMHgwMCwgMHg1OSwgMHgxOCwgMHg0OSwgMHgwMSwgMHg0MiwgMHgxOCwKLTB4MDEsIDB4MjAsIDB4ODAsIDB4MDcsIDB4MTAsIDB4NDMsIDB4MDAsIDB4NjgsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MGMsCi0weDAwLCAweDkwLCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweGQwLCAweDFkLCAweDA1LCAweDMwLCAweDE4LCAweDQzLAotMHgwMCwgMHg2OCwgMHgzOCwgMHgxYywgMHgyOSwgMHgxYywgMHgwMCwgMHhmMCwgMHhjMiwgMHhmYSwgMHhhOCwgMHg4OCwKLTB4NDEsIDB4MDcsIDB4MDEsIDB4ZDAsIDB4MDAsIDB4MjAsIDB4NTEsIDB4ZTAsIDB4MjksIDB4ODksIDB4MDksIDB4MTgsCi0weDYwLCAweDZiLCAweDgxLCAweDQyLCAweGY4LCAweGQ4LCAweDY5LCAweDg5LCAweGVhLCAweDg4LCAweDg5LCAweDE4LAotMHg4MSwgMHg0MiwgMHhmMywgMHhkOCwgMHgwMCwgMHg5OCwgMHgwMSwgMHgyOCwgMHgyNSwgMHhkMSwgMHhlMCwgMHg2YSwKLTB4ZjEsIDB4NmIsIDB4NDAsIDB4MTgsIDB4NzEsIDB4NmMsIDB4ZmEsIDB4MWQsIDB4Y2QsIDB4MzIsIDB4MDEsIDB4ZjAsCi0weDMzLCAweGY5LCAweGZhLCAweDFkLCAweGZmLCAweDMyLCAweDNhLCAweDMyLCAweGUwLCAweDZhLCAweDUxLCAweDY5LAotMHg0MCwgMHgxOCwgMHhjMywgMHgxZCwgMHgwMywgMHgzMywgMHgwMCwgMHgyMCwgMHg4MSwgMHgwMCwgMHg1ZSwgMHg1OCwKLTB4YzksIDB4MTksIDB4ZmYsIDB4MzEsIDB4MDEsIDB4MzEsIDB4NGUsIDB4NjEsIDB4MDEsIDB4MzAsIDB4MDQsIDB4MjgsCi0weGY2LCAweGQzLCAweGUwLCAweDZhLCAweDUxLCAweDY5LCAweDQwLCAweDE4LCAweGMxLCAweDFkLCAweDA1LCAweDMxLAotMHgwMCwgMHgyMCwgMHgwMCwgMHgyMiwgMHg0MywgMHgwMCwgMHhjYSwgMHg1MiwgMHgwMSwgMHgzMCwgMHgwNiwgMHgyOCwKLTB4ZmEsIDB4ZDMsIDB4MjksIDB4MWMsIDB4MTEsIDB4NGEsIDB4MDAsIDB4MjAsIDB4ZmYsIDB4ZjcsIDB4YWUsIDB4ZmIsCi0weDAxLCAweDIyLCAweDUyLCAweDA0LCAweDYwLCAweDZiLCAweDAyLCAweDQzLCAweDAxLCAweDIwLCAweDIxLCAweDZiLAotMHhmZiwgMHhmNywgMHhhNiwgMHhmYiwgMHgwMSwgMHgyMiwgMHg1MiwgMHgwNCwgMHg2MCwgMHg2YiwgMHgwMiwgMHg0MywKLTB4MDAsIDB4MjAsIDB4ZTEsIDB4NmEsIDB4ZmYsIDB4ZjcsIDB4OWUsIDB4ZmIsIDB4YTEsIDB4NmIsIDB4MDgsIDB4NGEsCi0weDAxLCAweDIwLCAweGZmLCAweGY3LCAweDk5LCAweGZiLCAweDAzLCAweDIwLCAweDA2LCAweDQ5LCAweGMwLCAweDQ2LAotMHg0OCwgMHg2MiwgMHgwMSwgMHgyMCwgMHhmOCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwKLTB4NGMsIDB4MmEsIDB4MDAsIDB4ODAsIDB4NTQsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MGYsIDB4MDAsCi0weDZjLCAweDA3LCAweDAwLCAweDgwLCAweGYwLCAweGI1LCAweDhkLCAweGIwLCAweDAwLCAweDIwLCAweGI1LCAweDRhLAotMHhkNSwgMHgxZCwgMHhmOSwgMHgzNSwgMHg2OCwgMHg2MiwgMHgwMSwgMHgyMCwgMHgwMCwgMHgwNSwgMHhiMywgMHg0OSwKLTB4YzAsIDB4NDYsIDB4MDgsIDB4NjAsIDB4YTgsIDB4NmEsIDB4YzQsIDB4MWQsIDB4MmQsIDB4MzQsIDB4YjEsIDB4NDgsCi0weGMwLCAweDZhLCAweGQ3LCAweDFkLCAweGZmLCAweDM3LCAweDNhLCAweDM3LCAweDM5LCAweDY4LCAweDRiLCAweDAwLAotMHg1OSwgMHgxOCwgMHg0OSwgMHgwMSwgMHg0MCwgMHgxOCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHhjMSwgMHgxZCwKLTB4MDUsIDB4MzEsIDB4MTksIDB4NDMsIDB4MDksIDB4NjgsIDB4MDgsIDB4MzAsIDB4MTgsIDB4NDMsIDB4MDAsIDB4NjgsCi0weGMwLCAweDQ2LCAweDA5LCAweDkwLCAweGZmLCAweDIzLCAweDFiLCAweDAyLCAweDE4LCAweDQwLCAweDAwLCAweDBhLAotMHgwYSwgMHg5MCwgMHgwYSwgMHg5OCwgMHhhNCwgMHg0ZSwgMHgwMSwgMHgyOCwgMHg1OSwgMHhkMSwgMHgyOCwgMHg2YiwKLTB4YTIsIDB4NjgsIDB4ODAsIDB4MTgsIDB4YTIsIDB4NGEsIDB4MjEsIDB4NjksCi0weDA5LCAweDA0LCAweDA5LCAweDBjLCAweDAxLCAweGYwLCAweDI2LCAweGY5LCAweDI4LCAweDZiLCAweDc5LCAweDY5LAotMHg0MCwgMHgxOCwgMHhjMSwgMHgxZCwgMHgwNSwgMHgzMSwgMHgwMCwgMHgyMCwgMHg4MiwgMHgwMCwgMHg5OCwgMHg0YiwKLTB4ZDMsIDB4MTgsIDB4ZmYsIDB4MzMsIDB4MDEsIDB4MzMsIDB4NWIsIDB4NjksIDB4YzAsIDB4NDYsIDB4OGIsIDB4NTAsCi0weDAxLCAweDMwLCAweDA0LCAweDI4LCAweGY0LCAweGQzLCAweDAwLCAweDIwLCAweDMxLCAweDFjLCAweDgyLCAweDAwLAotMHg1NiwgMHgxOCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgzMywgMHg0MywgMHgxYiwgMHg2OCwgMHgwNCwgMHhhZSwKLTB4YjMsIDB4NTAsIDB4MDEsIDB4MzAsIDB4MDMsIDB4MjgsIDB4ZjQsIDB4ZDMsIDB4MDAsIDB4MjAsIDB4MDgsIDB4OTAsCi0weDkwLCAweDQ5LCAweDQyLCAweDAwLCAweDhiLCAweDVhLCAweGIyLCAweDVhLCAweDkzLCAweDQyLCAweDEzLCAweGQwLAotMHg4ZSwgMHg0OCwgMHhjMSwgMHg4OSwgMHgwMSwgMHgzMSwgMHhjMSwgMHg4MSwgMHhiOCwgMHg2OCwgMHgwMCwgMHgyOCwKLTB4MDMsIDB4ZDEsIDB4MzgsIDB4OGEsIDB4MTAsIDB4MjMsIDB4MTgsIDB4NDMsIDB4NzEsIDB4ZTAsIDB4MzgsIDB4OGEsCi0weDQwLCAweDIzLCAweDE4LCAweDQzLCAweDZkLCAweGUwLCAweDAwLCAweGYwLCAweDExLCAweGY5LCAweDAxLCAweGYwLAotMHg2NywgMHhmZiwgMHhmNSwgMHhlMCwgMHgwMSwgMHgzMCwgMHgwNiwgMHgyOCwgMHhlMywgMHhkMywgMHgwOCwgMHg5OCwKLTB4MDAsIDB4MjgsIDB4MGMsIDB4ZDEsIDB4YjgsIDB4NjgsIDB4NDEsIDB4MWMsIDB4YjksIDB4NjAsIDB4MDAsIDB4MjgsCi0weDAzLCAweGQxLCAweDM4LCAweDhhLCAweDAxLCAweDIzLCAweDE4LCAweDQzLCAweDAyLCAweGUwLCAweDM4LCAweDhhLAotMHgwNCwgMHgyMywgMHgxOCwgMHg0MywgMHgzOCwgMHg4MiwgMHg3OCwgMHg2OCwgMHgwMSwgMHgzMCwgMHg3OCwgMHg2MCwKLTB4NjIsIDB4ZTAsIDB4MGEsIDB4OTgsIDB4MDIsIDB4MjgsIDB4NWYsIDB4ZDEsIDB4MDksIDB4OTgsIDB4NDAsIDB4MGMsCi0weDczLCAweGQzLCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweGUwLCAweDFkLCAweDAxLCAweDMwLCAweDE4LCAweDQzLAotMHgwMCwgMHg2OCwgMHhlMSwgMHgxZCwgMHgwZCwgMHgzMSwgMHgxOSwgMHg0MywgMHgwOSwgMHg2OCwgMHg0MCwgMHgxOCwKLTB4MGMsIDB4MzgsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MjEsIDB4OGEsIDB4MDAsIDB4NmIsIDB4NGIsCi0weGQ2LCAweDE4LCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweDMzLCAweDQzLCAweDFiLCAweDY4LCAweDA0LCAweGFlLAotMHhiMywgMHg1MCwgMHgwMSwgMHgzMSwgMHgwMywgMHgyOSwgMHhmMywgMHhkMywgMHgwMCwgMHgyMSwgMHg4MywgMHgxZSwKLTB4MGMsIDB4OTMsIDB4NjgsIDB4NGEsIDB4MTYsIDB4NmIsIDB4YzAsIDB4NDYsIDB4MGIsIDB4OTYsIDB4OGEsIDB4MDAsCi0weDBjLCAweDliLCAweDliLCAweDE4LCAweDBiLCAweDllLCAweDllLCAweDE5LCAweDAxLCAweDIzLCAweDliLCAweDA3LAotMHgzMywgMHg0MywgMHgxYiwgMHg2OCwgMHg2ZSwgMHg0NiwgMHhiMywgMHg1MCwgMHgwMSwgMHgzMSwgMHgwNCwgMHgyOSwKLTB4ZjEsIDB4ZDMsIDB4NjksIDB4NDYsIDB4OGIsIDB4MWMsIDB4MDcsIDB4OTMsIDB4MDAsIDB4MjEsIDB4MDgsIDB4OTEsCi0weDA0LCAweGFlLCAweDRhLCAweDAwLCAweDA3LCAweDliLCAweDliLCAweDVhLCAweGIyLCAweDVhLCAweDkzLCAweDQyLAotMHgxMSwgMHhkMCwgMHg1OCwgMHg0OCwgMHhjMSwgMHg4OSwgMHgwMSwgMHgzMSwgMHhjMSwgMHg4MSwgMHhmOCwgMHg2OCwKLTB4NDEsIDB4MWMsIDB4ZjksIDB4NjAsIDB4MDAsIDB4MjgsIDB4MDMsIDB4ZDEsIDB4MzgsIDB4OGEsIDB4MjAsIDB4MjMsCi0weDE4LCAweDQzLCAweDAyLCAweGUwLCAweDM4LCAweDhhLCAweDgwLCAweDIzLCAweDE4LCAweDQzLCAweDM4LCAweDgyLAotMHg4ZiwgMHhlNywgMHgwMSwgMHgzMSwgMHgwNiwgMHgyOSwgMHhlNCwgMHhkMywgMHgwOCwgMHg5OSwgMHgwMCwgMHgyOSwKLTB4MGQsIDB4ZDEsIDB4ZjksIDB4NjgsIDB4NGEsIDB4MWMsIDB4ZmEsIDB4NjAsIDB4MDAsIDB4MjksIDB4MDQsIDB4ZDEsCi0weDM5LCAweDhhLCAweDAyLCAweDIzLCAweDE5LCAweDQzLCAweDAzLCAweGUwLCAweDBjLCAweGUwLCAweDM5LCAweDhhLAotMHgwOCwgMHgyMywgMHgxOSwgMHg0MywgMHgzOSwgMHg4MiwgMHgyOSwgMHg2YiwgMHgwOCwgMHgxOCwgMHgwMSwgMHgyMywKLTB4OWIsIDB4MDcsIDB4MDEsIDB4MzgsIDB4MTgsIDB4NDMsIDB4MDAsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MjAsIDB4NzYsCi0weDAxLCAweDIzLCAweDliLCAweDA3LCAweGUwLCAweDFkLCAweDExLCAweDMwLCAweDE4LCAweDQzLCAweDAwLCAweDY4LAotMHgwMSwgMHgwNiwgMHgwOSwgMHgwZSwgMHgwMCwgMHhlMCwgMHgxOSwgMHhlMCwgMHgzNSwgMHg0OCwgMHgyYSwgMHg2YiwKLTB4YzAsIDB4NDYsIDB4ZWEsIDB4NjIsIDB4MDQsIDB4MjksIDB4NGYsIDB4ZDEsIDB4MDEsIDB4MjEsIDB4YzYsIDB4MWQsCi0weGZmLCAweDM2LCAweDVhLCAweDM2LCAweDMxLCAweDcyLCAweDBhLCAweDk5LCAweDAyLCAweDI5LCAweDFlLCAweGQxLAotMHgwOSwgMHg5OSwgMHgwOSwgMHgwZSwgMHg0OSwgMHgwNiwgMHgxYSwgMHhkMSwgMHhlMSwgMHgxZCwgMHgwNSwgMHgzMSwKLTB4MTksIDB4NDMsIDB4MDksIDB4NjgsIDB4MDksIDB4MDYsIDB4MDksIDB4MGUsIDB4MDgsIDB4MzksIDB4MWEsIDB4ZTAsCi0weDAxLCAweDIzLCAweDliLCAweDA3LCAweGUwLCAweDFkLCAweDAxLCAweDMwLCAweDE4LCAweDQzLCAweDAwLCAweDY4LAotMHhlMSwgMHgxZCwgMHgwZCwgMHgzMSwgMHgxOSwgMHg0MywgMHgwOSwgMHg2OCwgMHg0MCwgMHgxOCwgMHgwMCwgMHgwNCwKLTB4MDAsIDB4MGMsIDB4ZjksIDB4NjgsIDB4NGEsIDB4MWMsIDB4ZmEsIDB4NjAsIDB4MDAsIDB4MjksIDB4YmMsIDB4ZDEsCi0weGI2LCAweGU3LCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweGUxLCAweDFkLAotMHgwNSwgMHgzMSwgMHgxOSwgMHg0MywgMHgwOSwgMHg2OCwgMHgwOSwgMHgwNiwgMHgwOSwgMHgwZSwgMHhhMSwgMHg2MCwKLTB4ZTgsIDB4NmEsIDB4YzAsIDB4NDYsIDB4MjAsIDB4NjAsIDB4MjAsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4ODgsIDB4ZmMsCi0weDIwLCAweDdlLCAweDMzLCAweDI4LCAweDAxLCAweGQwLCAweDMyLCAweDI4LCAweDExLCAweGQxLCAweDAxLCAweDIxLAotMHgxNCwgMHg0YywgMHhjMCwgMHg0NiwgMHhmOSwgMHg2MCwgMHhiOSwgMHg2MCwgMHgyMCwgMHgxYywgMHgwMCwgMHhmMCwKLTB4ODUsIDB4ZjgsIDB4MjgsIDB4NmIsIDB4YTksIDB4NmEsIDB4YzAsIDB4NDYsIDB4ODgsIDB4NjIsIDB4MjAsIDB4MWMsCi0weGZmLCAweGY3LCAweGMwLCAweGZkLCAweDAwLCAweDI4LCAweDExLCAweGQxLCAweDBlLCAweGUwLCAweDAwLCAweDIwLAotMHgzMCwgMHg3MiwgMHgxMSwgMHhlMCwgMHgzMywgMHgyOSwgMHgwMSwgMHhkMCwgMHgzMiwgMHgyOSwgMHgwZCwgMHhkMSwKLTB4MDcsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4NzEsIDB4ZjgsIDB4MzgsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4YjAsIDB4ZmQsCi0weDAwLCAweDI4LCAweDAxLCAweGQxLCAweDAxLCAweGYwLCAweDcwLCAweGZlLCAweDBkLCAweGIwLCAweGYwLCAweGJjLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHhmMCwgMHgxMiwgMHhmOCwgMHhmNiwgMHhlNywgMHgwMCwgMHgwMCwKLTB4NmMsIDB4MDYsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4NGMsIDB4MmEsIDB4MDAsIDB4ODAsCi0weGFjLCAweGFiLCAweDIwLCAweDQwLCAweDQwLCAweDA3LCAweDAwLCAweDgwLCAweDgyLCAweDA3LCAweDAwLCAweDgwLAotMHgwYywgMHgyYiwgMHgwMCwgMHg4MCwgMHg2YywgMHgwNywgMHgwMCwgMHg4MCwgMHhmMCwgMHhiNSwgMHgyNSwgMHg0OCwKLTB4NDEsIDB4NjgsIDB4MDEsIDB4MzEsIDB4NDEsIDB4NjAsIDB4MjQsIDB4NGYsIDB4ZjksIDB4MWQsIDB4ZjksIDB4MzEsCi0weDAwLCAweDI0LCAweDg4LCAweDZhLCAweGZhLCAweDY4LCAweGMwLCAweDQ2LCAweDk0LCAweDYxLCAweDA0LCAweDIyLAotMHhmYiwgMHg2OCwgMHhjMCwgMHg0NiwgMHhkYSwgMHg2MCwgMHgxMCwgMHgyMiwgMHhmYiwgMHg2OCwgMHhjMCwgMHg0NiwKLTB4OWEsIDB4NjEsIDB4ZmEsIDB4MWQsIDB4ZmYsIDB4MzIsIDB4NWEsIDB4MzIsIDB4MTMsIDB4N2EsIDB4MWIsIDB4NGEsCi0weDAwLCAweDJiLCAweDBiLCAweGQwLCAweDE1LCAweDhhLCAweDJlLCAweDBhLCAweDM2LCAweDAyLCAweDMzLCAweDIzLAotMHgyYiwgMHg0MCwgMHg5YiwgMHgwMCwgMHgxZSwgMHg0MywgMHhjYywgMHgyMywgMHgyYiwgMHg0MCwgMHg5YiwgMHgwOCwKLTB4MzMsIDB4NDMsIDB4MTMsIDB4ODIsIDB4MTIsIDB4OGEsIDB4ZmIsIDB4NjgsIDB4YzAsIDB4NDYsIDB4ZGEsIDB4ODMsCi0weDRhLCAweDZiLCAweGZiLCAweDY4LCAweGMwLCAweDQ2LCAweGRhLCAweDgxLCAweDBhLCAweDZiLCAweGMwLCAweDQ2LAotMHg4MiwgMHg2MiwgMHhjNCwgMHg2MiwgMHhjMywgMHgxZCwgMHgzOSwgMHgzMywgMHg0YSwgMHg2YiwgMHhjMCwgMHg0NiwKLTB4NWEsIDB4ODMsIDB4MDQsIDB4MjMsIDB4MDIsIDB4NjgsIDB4MWEsIDB4NDMsIDB4MDIsIDB4NjAsIDB4ODgsIDB4NmEsCi0weDAxLCAweGYwLCAweDMyLCAweGZhLCAweGY4LCAweDY4LCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweDU0LCAweDMwLAotMHgxOCwgMHg0MywgMHgwMCwgMHg2OCwgMHhjMCwgMHg0NiwgMHhmOCwgMHg2MCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywKLTB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MmIsIDB4MDAsIDB4ODAsIDB4NmMsIDB4MDYsIDB4MDAsIDB4ODAsCi0weGFjLCAweDA3LCAweDAwLCAweDgwLCAweDgwLCAweGI1LCAweGMxLCAweDFkLCAweGY5LCAweDMxLCAweDhhLCAweDZhLAotMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHhkMSwgMHgxZCwgMHg0NSwgMHgzMSwgMHgxOSwgMHg0MywgMHgwOSwgMHg2OCwKLTB4MGIsIDB4MDYsIDB4MWIsIDB4MGUsIDB4MDEsIDB4MjcsIDB4YzEsIDB4MWQsIDB4ZmYsIDB4MzEsIDB4NGEsIDB4MzEsCi0weDMzLCAweDJiLCAweDA1LCAweGQxLCAweDhiLCAweDcwLCAweDAxLCAweDFjLCAweDEwLCAweDFjLCAweDAwLCAweGYwLAotMHgwZiwgMHhmOCwgMHgwNiwgMHhlMCwgMHgzMiwgMHgyYiwgMHgwOCwgMHhkMSwgMHg4YiwgMHg3MCwgMHgwMSwgMHgxYywKLTB4MTAsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4M2MsIDB4ZjgsIDB4MzgsIDB4MWMsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsCi0weDE4LCAweDQ3LCAweDAwLCAweDIwLCAweDg4LCAweDcwLCAweGY5LCAweGU3LCAweDkwLCAweGI0LCAweGNhLCAweDFkLAotMHhmOSwgMHgzMiwgMHgzMywgMHgyNywgMHhjYywgMHgxZCwgMHhmZiwgMHgzNCwgMHg0YSwgMHgzNCwgMHhkMywgMHg2YSwKLTB4YzAsIDB4NDYsIDB4YTcsIDB4NzAsIDB4ZmYsIDB4MzEsIDB4NDEsIDB4MzEsIDB4MDcsIDB4NmMsIDB4YzAsIDB4NDYsCi0weDRmLCAweDYxLCAweGZiLCAweDE4LCAweDM5LCAweDFjLCAweDlmLCAweDFlLCAweDAxLCAweDIzLCAweDliLCAweDA3LAotMHhmYywgMHgxYywgMHgyMywgMHg0MywgMHgxYiwgMHg2OCwgMHgxYiwgMHgwNiwgMHgxYiwgMHgwZSwgMHg5YiwgMHgwMCwKLTB4MWIsIDB4MDQsIDB4MWIsIDB4MGMsIDB4YzksIDB4MTgsIDB4MDgsIDB4MzEsIDB4MDEsIDB4NjQsIDB4MDEsIDB4MjMsCi0weDliLCAweDA3LCAweGI5LCAweDFjLCAweDE5LCAweDQzLCAweDA5LCAweDY4LCAweDM0LCAweDMwLCAweDAxLCAweDc2LAotMHhmOCwgMHgxZCwgMHgwMSwgMHgzMCwgMHgxOCwgMHg0MywgMHgwMCwgMHg2OCwgMHgwMCwgMHgwNCwgMHhiOSwgMHgxZCwKLTB4MTksIDB4NDMsIDB4ZDAsIDB4NjMsIDB4MDksIDB4NjgsIDB4MDksIDB4MDQsIDB4MDksIDB4MGMsIDB4MDgsIDB4NDMsCi0weGQwLCAweDYzLCAweDkwLCAweGJjLCAweDcwLCAweDQ3LCAweGIwLCAweGI1LCAweGNhLCAweDFkLCAweGY5LCAweDMyLAotMHhjNSwgMHgxZCwgMHgyZCwgMHgzNSwgMHgzMiwgMHgyMCwgMHhjZiwgMHgxZCwKLTB4ZmYsIDB4MzcsIDB4NGEsIDB4MzcsIDB4ZDMsIDB4NmEsIDB4YzAsIDB4NDYsIDB4YjgsIDB4NzAsIDB4Y2MsIDB4MWQsCi0weGZmLCAweDM0LCAweDNhLCAweDM0LCAweGU4LCAweDY4LCAweGMwLCAweDQ2LCAweDYwLCAweDYxLCAweDEwLCAweDMwLAotMHhlOCwgMHg2MCwgMHg2MCwgMHg2OSwgMHhjMCwgMHgxOCwgMHg4NywgMHgxZSwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywKLTB4MzgsIDB4MWQsIDB4MTgsIDB4NDMsIDB4MDAsIDB4NjgsIDB4MDAsIDB4MDQsIDB4YjksIDB4MWMsIDB4MTksIDB4NDMsCi0weGQwLCAweDYzLCAweDA5LCAweDY4LCAweDA5LCAweDA0LCAweDA5LCAweDBjLCAweDA4LCAweDQzLCAweGQwLCAweDYzLAotMHhmOCwgMHgxZCwgMHgwMywgMHgzMCwgMHhmZiwgMHhmNywgMHhmYywgMHhmYiwgMHgyMCwgMHg2MiwgMHhmOCwgMHgxZCwKLTB4MDcsIDB4MzAsIDB4ZmYsIDB4ZjcsIDB4ZjcsIDB4ZmIsIDB4NjAsIDB4NjIsIDB4MDAsIDB4MjAsIDB4MjgsIDB4NzYsCi0weGIwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweGY3LCAweGI1LCAweDgxLCAweGIwLCAweDAxLCAweDk4LAotMHhjNywgMHgxZCwgMHhmOSwgMHgzNywgMHhiOCwgMHg2YSwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHhkNCwgMHgxZCwKLTB4MDUsIDB4MzQsIDB4MjMsIDB4NDMsIDB4MWMsIDB4NjgsIDB4ZmYsIDB4MjMsIDB4ZmUsIDB4MzMsIDB4MjMsIDB4NDAsCi0weDdmLCAweDZiLCAweDNmLCAweDA0LCAweDNiLCAweDQzLCAweDBiLCAweDYwLCAweDM0LCAweDMwLCAweDFjLCAweDFjLAotMHg4MCwgMHgyMywgMHgyMywgMHg0MCwgMHgwMSwgMHg5ZiwgMHhmZiwgMHgzNywgMHg0MSwgMHgzNywgMHgwMCwgMHgyYiwKLTB4M2MsIDB4ZDAsIDB4MGMsIDB4MjMsIDB4MDAsIDB4OTMsIDB4MDAsIDB4MjMsIDB4OWQsIDB4MDAsIDB4YWUsIDB4MTgsCi0weDM2LCAweDY5LCAweDZkLCAweDE4LCAweDZlLCAweDYxLCAweDAxLCAweDMzLCAweDA1LCAweDJiLCAweGY3LCAweGQzLAotMHgwMCwgMHgyMywgMHg5ZCwgMHgwMCwgMHhhZSwgMHgxOCwgMHg3NiwgMHg2YSwgMHg2ZCwgMHgxOCwgMHhhZSwgMHg2MiwKLTB4MDEsIDB4MzMsIDB4MDUsIDB4MmIsIDB4ZjcsIDB4ZDMsIDB4MDEsIDB4OWIsIDB4ZmYsIDB4MzMsIDB4NTEsIDB4MzMsCi0weDliLCAweDc4LCAweDMzLCAweDJiLCAweDBlLCAweGQxLCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweGM1LCAweDFkLAotMHgwMSwgMHgzNSwgMHgyYiwgMHg0MywgMHgxYiwgMHg2OCwgMHhjMCwgMHg0NiwgMHg0YiwgMHg4MSwgMHgwMSwgMHgyMywKLTB4OWIsIDB4MDcsIDB4YzUsIDB4MWQsIDB4MGQsIDB4MzUsIDB4MmIsIDB4NDMsIDB4MWIsIDB4NjgsIDB4MTYsIDB4ZTAsCi0weDdiLCAweDY5LCAweGMwLCAweDQ2LCAweDRiLCAweDgxLCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweGM1LCAweDFkLAotMHgwZCwgMHgzNSwgMHgyYiwgMHg0MywgMHgxYiwgMHg2OCwgMHg3ZCwgMHg2OSwgMHg1ZCwgMHgxYiwgMHgwMSwgMHgyMywKLTB4OWIsIDB4MDcsIDB4YzYsIDB4MWQsIDB4MDEsIDB4MzYsIDB4MzMsIDB4NDMsIDB4MWIsIDB4NjgsIDB4ZWIsIDB4MTgsCi0weDBjLCAweDNiLCAweDAyLCAweGUwLCAweDAwLCAweDIzLCAweDAwLCAweDkzLCAweDRiLCAweDgxLCAweGNiLCAweDgwLAotMHg2MywgMHgwOSwgMHg0OSwgMHhkMywgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHhjNCwgMHgxZCwgMHgwNSwgMHgzNCwKLTB4MjMsIDB4NDMsIDB4MWIsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MGIsIDB4ODEsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsCi0weGM0LCAweDFkLCAweDBkLCAweDM0LCAweDIzLCAweDQzLCAweDFiLCAweDY4LCAweDBjLCAweDg5LCAweDFiLCAweDFiLAotMHgwMCwgMHg5YywgMHgxYywgMHgxYiwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgwOCwgMHgzMCwgMHgxOCwgMHg0MywKLTB4MDAsIDB4NjgsIDB4MjAsIDB4MTgsIDB4ODgsIDB4ODAsIDB4MzgsIDB4NmEsIDB4MDQsIDB4MGUsIDB4ZmYsIDB4MjMsCi0weDFiLCAweDA0LCAweDAzLCAweDQwLCAweDFiLCAweDBhLCAweDFjLCAweDQzLCAweGZmLCAweDIzLCAweDFiLCAweDAyLAotMHgwMywgMHg0MCwgMHgxYiwgMHgwMiwgMHgyMywgMHg0MywgMHgwMCwgMHgwNiwgMHgxOCwgMHg0MywgMHhjOCwgMHg2MCwKLTB4NzgsIDB4NmEsIDB4MDcsIDB4MGUsIDB4ZmYsIDB4MjMsIDB4MWIsIDB4MDQsIDB4MDMsIDB4NDAsIDB4MWIsIDB4MGEsCi0weDFmLCAweDQzLCAweGZmLCAweDIzLCAweDFiLCAweDAyLCAweDAzLCAweDQwLCAweDFiLCAweDAyLCAweDNiLCAweDQzLAotMHgwMCwgMHgwNiwgMHgxOCwgMHg0MywgMHgwOCwgMHg2MSwgMHhkMCwgMHg2YiwgMHhjMCwgMHg0NiwgMHhjOCwgMHg2MywKLTB4OTAsIDB4NmIsIDB4YzAsIDB4NDYsIDB4MDgsIDB4NjQsIDB4NTAsIDB4NmMsIDB4YzAsIDB4NDYsIDB4NDgsIDB4NjQsCi0weDEwLCAweDZjLCAweGMwLCAweDQ2LCAweDg4LCAweDY0LCAweGQwLCAweDZjLCAweGMwLCAweDQ2LCAweGM4LCAweDY0LAotMHg5MCwgMHg2YywgMHhjMCwgMHg0NiwgMHgwOCwgMHg2NSwgMHgwMiwgMHhlMCwgMHgwMCwgMHgyMywgMHgwYiwgMHg4MSwKLTB4OGIsIDB4ODAsIDB4MDQsIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4YjUsCi0weDBmLCAweDRhLCAweDkzLCAweDg5LCAweDAxLCAweDMzLCAweDkzLCAweDgxLCAweGMyLCAweDFkLCAweGY5LCAweDMyLAotMHgwNCwgMHgyMywgMHg5MCwgMHg2YSwgMHhjMCwgMHg0NiwgMHhjMywgMHg2MCwgMHgxMCwgMHgyMywgMHg4MywgMHg2MSwKLTB4Y2IsIDB4MGEsIDB4MDEsIDB4ZDMsIDB4MTgsIDB4MjMsIDB4ODMsIDB4NjEsIDB4YzEsIDB4ODMsIDB4NTEsIDB4NmIsCi0weGMwLCAweDQ2LCAweGMxLCAweDgxLCAweDUxLCAweDZiLCAweGMyLCAweDFkLCAweDM5LCAweDMyLCAweDUxLCAweDgzLAotMHgwNCwgMHgyMywgMHgwMSwgMHg2OCwgMHgxOSwgMHg0MywgMHgwMSwgMHg2MCwgMHgwMSwgMHhmMCwgMHhjMiwgMHhmOCwKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MGMsIDB4MmIsIDB4MDAsIDB4ODAsCi0weGIwLCAweGI1LCAweDFiLCAweDRjLCAweDIwLCAweDZhLCAweDAyLCAweDI4LCAweDFiLCAweGQyLCAweDAwLCAweDIwLAotMHhlNywgMHgxZCwgMHgxOSwgMHgzNywgMHgzOCwgMHg3MSwgMHhlMSwgMHg2OCwgMHhlMCwgMHgxZCwgMHhmOSwgMHgzMCwKLTB4MDAsIDB4MjksIDB4MTUsIDB4ZDAsIDB4NDIsIDB4NmEsIDB4MDAsIDB4MmEsIDB4MTIsIDB4ZDEsIDB4MDEsIDB4MjUsCi0weDBhLCAweGUwLCAweGZmLCAweGY3LCAweDg5LCAweGZiLCAweDAwLCAweDI4LCAweDA5LCAweGQxLCAweDIwLCAweDZhLAotMHgwMiwgMHgyOCwgMHgwMCwgMHhkMywgMHgzZCwgMHg3MSwgMHhlMCwgMHg2OCwgMHgwMCwgMHgyOCwgMHgwMiwgMHhkMCwKLTB4MzgsIDB4NzksIDB4MDAsIDB4MjgsIDB4ZjEsIDB4ZDAsIDB4YjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weDQwLCAweDZhLCAweDAwLCAweDI4LCAweGY5LCAweGQxLCAweDAwLCAweDI5LCAweGY3LCAweGQxLCAweDYwLCAweDY5LAotMHgwMCwgMHgyOCwgMHgwNCwgMHhkMCwgMHgwNiwgMHg0OCwgMHgwMCwgMHg2OCwgMHgwMywgMHhmMCwgMHhhOCwgMHhmYywKLTB4ZWYsIDB4ZTcsIDB4NjAsIDB4NjgsIDB4MDAsIDB4MjgsIDB4ZWMsIDB4ZDAsIDB4MDAsIDB4ZjAsIDB4NWEsIDB4ZjgsCi0weGU5LCAweGU3LCAweDAwLCAweDAwLCAweDZjLCAweDA2LCAweDAwLCAweDgwLCAweDM0LCAweDA0LCAweDAwLCAweDgwLAotMHhiMCwgMHhiNSwgMHgwNywgMHgxYywgMHgyMCwgMHgyMywgMHhiOCwgMHg2OCwgMHgxOCwgMHg0MCwgMHgwMSwgMHgyNCwKLTB4MDAsIDB4MjUsIDB4MDAsIDB4MjgsIDB4MGIsIDB4ZDEsIDB4MzgsIDB4NmEsIDB4MDAsIDB4MjgsIDB4MDMsIDB4ZDEsCi0weDI4LCAweDFjLCAweGIwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDFmLCAweDQ4LCAweDAxLCAweDZlLAotMHgwMSwgMHgzMSwgMHgwMSwgMHg2NiwgMHgwMywgMHhlMCwgMHg0OCwgMHg2OCwgMHhjNCwgMHgyMywgMHgxOCwgMHg0MCwKLTB4MDMsIDB4ZDEsIDB4MzgsIDB4NmEsIDB4MDAsIDB4ZjAsIDB4MGMsIDB4ZmMsIDB4MmYsIDB4ZTAsIDB4MzgsIDB4MWMsCi0weDAwLCAweGYwLCAweDFjLCAweGZjLCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAweDdiLCAweGZhLCAweGI4LCAweDY4LAotMHhjMCwgMHgwOCwgMHgwMiwgMHhkMywgMHgzOCwgMHg2YSwgMHgwMCwgMHhmMCwgMHhkMSwgMHhmYiwgMHhiOCwgMHg2OCwKLTB4MzksIDB4NmEsIDB4YzAsIDB4NDYsIDB4ODgsIDB4NjAsIDB4MzgsIDB4NmEsIDB4YzAsIDB4NDYsIDB4YzUsIDB4NjAsCi0weDEwLCAweDQ4LCAweDQxLCAweDY4LCAweDAwLCAweDI5LCAweDExLCAweGQxLCAweGMxLCAweDY4LCAweDAwLCAweDI5LAotMHgwOSwgMHhkMSwgMHg0MSwgMHg2OSwgMHgwMCwgMHgyOSwgMHgwNiwgMHhkMSwgMHgzOSwgMHg2YSwgMHhjMCwgMHg0NiwKLTB4ODEsIDB4NjAsIDB4NDEsIDB4NjAsIDB4MDAsIDB4ZjAsIDB4MTQsIDB4ZjgsIDB4MGIsIDB4ZTAsIDB4MzksIDB4NmEsCi0weGMwLCAweDQ2LCAweDgxLCAweDYwLCAweDQxLCAweDYwLCAweDA2LCAweGUwLCAweDM5LCAweDZhLCAweDgyLCAweDY4LAotMHhjMCwgMHg0NiwgMHhkMSwgMHg2MCwgMHgzOSwgMHg2YSwgMHhjMCwgMHg0NiwgMHg4MSwgMHg2MCwgMHgyMCwgMHgxYywKLTB4YmQsIDB4ZTcsIDB4MDAsIDB4MDAsIDB4YTQsIDB4MmEsIDB4MDAsIDB4ODAsIDB4NmMsIDB4MDYsIDB4MDAsIDB4ODAsCi0weDkwLCAweGI1LCAweDBiLCAweDRjLCAweDY3LCAweDY4LCAweDAwLCAweDJmLCAweDBmLCAweGQwLCAweDM4LCAweDFjLAotMHgwMCwgMHhmMCwgMHgxMiwgMHhmOCwgMHgwMCwgMHgyOCwgMHgwYSwgMHhkMSwgMHg2MCwgMHg2OCwgMHhjMCwgMHg2OCwKLTB4YzAsIDB4NDYsIDB4NjAsIDB4NjAsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4YzMsIDB4ZmIsIDB4MDAsIDB4MjAsCi0weDkwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAxLCAweDIwLCAweGZhLCAweGU3LCAweDAwLCAweDAwLAotMHg2YywgMHgwNiwgMHgwMCwgMHg4MCwgMHhmMCwgMHhiNSwgMHgwNywgMHgxYywgMHhmZSwgMHgxZCwgMHg0OSwgMHgzNiwKLTB4MzAsIDB4NzgsIDB4NDAsIDB4MDAsIDB4YzAsIDB4MTksIDB4ODUsIDB4OGIsIDB4MzMsIDB4NGMsIDB4MzQsIDB4NGIsCi0weDlkLCAweDQyLCAweDNjLCAweGQwLCAweDM4LCAweDFjLCAweDIxLCAweDFjLCAweDJhLCAweDFjLCAweDAwLCAweGYwLAotMHgxZCwgMHhmOSwgMHgzMSwgMHg0OCwgMHg4MCwgMHg2YSwgMHg1OCwgMHgyMSwgMHg2OSwgMHg0MywgMHg0MCwgMHgxOCwKLTB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MTgsIDB4NDMsIDB4MDAsIDB4NjgsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MGMsCi0weDJjLCAweDRkLCAweDAxLCAweDI4LCAweDFhLCAweGQxLCAweDMwLCAweDc4LCAweGMwLCAweDE5LCAweGMxLCAweDFkLAotMHgxOSwgMHgzMSwgMHgwOCwgMHg3YSwgMHgzYSwgMHg2OCwgMHg4MCwgMHgxOCwgMHgwOSwgMHg3YiwgMHhlYSwgMHgxZCwKLTB4MjEsIDB4MzIsIDB4MDAsIDB4ZjAsIDB4ZTMsIDB4ZmMsIDB4MzAsIDB4NzgsIDB4YzAsIDB4MTksIDB4MjAsIDB4MzAsCi0weDAwLCAweDc5LCAweDM5LCAweDY4LCAweDQwLCAweDE4LCAweGMxLCAweDFkLCAweDA1LCAweDMxLCAweDAwLCAweDIwLAotMHgwMCwgMHgyMywgMHg0MiwgMHgwMCwgMHg4YiwgMHg1MiwgMHgwMSwgMHgzMCwgMHgwNiwgMHgyOCwgMHhmYSwgMHhkMywKLTB4YTAsIDB4ODgsIDB4NDEsIDB4MDcsIDB4MGIsIDB4ZDEsIDB4MjEsIDB4ODksIDB4MDksIDB4MTgsIDB4NzgsIDB4NjgsCi0weDAwLCAweDA0LCAweDAwLCAweDBjLCAweDgxLCAweDQyLCAweDA0LCAweGQ4LCAweDYxLCAweDg5LCAweGUyLCAweDg4LAotMHg4OSwgMHgxOCwgMHg4MSwgMHg0MiwgMHgwMywgMHhkOSwgMHgwMCwgMHgyMCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywKLTB4MTgsIDB4NDcsIDB4MjEsIDB4MWMsIDB4MTQsIDB4NGEsIDB4MDAsIDB4MjAsIDB4ZmUsIDB4ZjcsIDB4NWEsIDB4ZmYsCi0weDAxLCAweDIyLCAweDUyLCAweDA0LCAweDc4LCAweDY4LCAweDAyLCAweDQzLAotMHgwMSwgMHgyMCwgMHgzOSwgMHg2OCwgMHhmZSwgMHhmNywgMHg1MiwgMHhmZiwgMHgwMSwgMHgyMiwgMHg1MiwgMHgwNCwKLTB4NzgsIDB4NjgsIDB4MDIsIDB4NDMsIDB4MDAsIDB4MjAsIDB4MzksIDB4NjgsIDB4ZmUsIDB4ZjcsIDB4NGEsIDB4ZmYsCi0weDBiLCAweDQ5LCAweDBjLCAweDRhLCAweDAxLCAweDIwLCAweGZlLCAweGY3LCAweDQ1LCAweGZmLCAweDAxLCAweDIwLAotMHhlOSwgMHgxZCwgMHgxOSwgMHgzMSwgMHg0OCwgMHg3MSwgMHgwMiwgMHgyMSwgMHhlYSwgMHgxZCwgMHhmOSwgMHgzMiwKLTB4NTEsIDB4NjIsIDB4ZDksIDB4ZTcsIDB4MjgsIDB4YWMsIDB4MjAsIDB4NDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsCi0weDRjLCAweDJhLCAweDAwLCAweDgwLCAweDZjLCAweDA2LCAweDAwLCAweDgwLCAweDU0LCAweDAwLCAweDAzLCAweDAwLAotMHgxNCwgMHhhYywgMHgyMCwgMHg0MCwgMHgxNCwgMHgwMCwgMHgwNywgMHgwMCwgMHhmMCwgMHhiNSwgMHg4MywgMHhiMCwKLTB4MDAsIDB4MjEsIDB4NGYsIDB4NDgsIDB4YzIsIDB4MWQsIDB4ZjksIDB4MzIsIDB4NTEsIDB4NjIsIDB4MDEsIDB4MjEsCi0weGM5LCAweDA0LCAweDRkLCAweDRhLCAweGMwLCAweDQ2LCAweDExLCAweDYwLCAweGMxLCAweDFkLCAweDE5LCAweDMxLAotMHg0OSwgMHg3OSwgMHgwMCwgMHgyOSwgMHgwNCwgMHhkMSwgMHg0YSwgMHg0OCwgMHgwMCwgMHg2OCwgMHgwMywgMHhmMCwKLTB4OWIsIDB4ZmIsIDB4ODcsIDB4ZTAsIDB4NDUsIDB4NDgsIDB4NDcsIDB4NjgsIDB4ZmMsIDB4MWQsIDB4NDksIDB4MzQsCi0weDIxLCAweDc4LCAweDQ4LCAweDAwLCAweGMwLCAweDE5LCAweDgwLCAweDhiLCAweDQ0LCAweDRhLCAweDkyLCAweDZhLAotMHg1OCwgMHgyMywgMHg1OCwgMHg0MywgMHgxNSwgMHgxOCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHhlYSwgMHgxZCwKLTB4MDUsIDB4MzIsIDB4MWEsIDB4NDMsIDB4MTIsIDB4NjgsIDB4MDgsIDB4MzUsIDB4MmIsIDB4NDMsIDB4MWQsIDB4NjgsCi0weGZmLCAweDIzLCAweDFiLCAweDAyLCAweDJiLCAweDQwLCAweDFiLCAweDBhLCAweDNjLCAweDRkLCAweDAxLCAweDJiLAotMHgyNCwgMHhkMSwgMHhjOCwgMHgxOSwgMHhjMSwgMHgxZCwgMHgxOSwgMHgzMSwgMHgwOCwgMHg3YSwgMHgzYSwgMHg2OCwKLTB4ODAsIDB4MTgsIDB4MzksIDB4NGEsIDB4MDksIDB4N2IsIDB4MDAsIDB4ZjAsIDB4YzUsIDB4ZmMsIDB4MjAsIDB4NzgsCi0weGMwLCAweDE5LCAweDIwLCAweDMwLCAweDAwLCAweDc5LCAweDM5LCAweDY4LCAweDQxLCAweDE4LCAweDAwLCAweDIwLAotMHg4MiwgMHgwMCwgMHg1MywgMHgxOSwgMHg5YiwgMHg2ZSwgMHg2ZSwgMHg0NiwgMHhiMywgMHg1MCwgMHgwMSwgMHgzMCwKLTB4MDMsIDB4MjgsIDB4ZjcsIDB4ZDMsIDB4Y2EsIDB4MWQsIDB4MDUsIDB4MzIsIDB4NjksIDB4NDYsIDB4MDAsIDB4MjAsCi0weDQzLCAweDAwLCAweGNkLCAweDVhLCAweGMwLCAweDQ2LCAweGQ1LCAweDUyLCAweDAxLCAweDMwLCAweDA2LCAweDI4LAotMHhmOCwgMHhkMywgMHgyZCwgMHhlMCwgMHgwMiwgMHgyYiwgMHgyYiwgMHhkMSwgMHgxMSwgMHgwYSwgMHgyOSwgMHhkMywKLTB4MDAsIDB4MjEsIDB4OGEsIDB4MDAsIDB4NTMsIDB4MTksIDB4OWIsIDB4NmUsIDB4NmUsIDB4NDYsIDB4YjMsIDB4NTAsCi0weDAxLCAweDMxLCAweDAzLCAweDI5LCAweGY3LCAweGQzLCAweDIxLCAweDc4LCAweDQ5LCAweDAwLCAweGM5LCAweDE5LAotMHgwOSwgMHg4ZiwgMHgzYSwgMHg2OCwgMHg4YiwgMHgxOCwgMHg2YSwgMHg0NiwgMHgwMCwgMHgyMSwgMHg0ZCwgMHgwMCwKLTB4NTYsIDB4NWIsIDB4YzAsIDB4NDYsIDB4NWUsIDB4NTMsIDB4MDEsIDB4MzEsIDB4MDYsIDB4MjksIDB4ZjgsIDB4ZDMsCi0weDE5LCAweDQ5LCAweDhhLCAweDZhLCAweDEzLCAweDE4LCAweDFhLCAweDZkLCAweDAwLCAweDlkLCAweDU1LCAweDQwLAotMHgxOSwgMHg0YSwgMHhkNiwgMHg2OCwgMHg3NSwgMHg0MCwgMHgxZCwgMHg2NSwgMHg4OSwgMHg2YSwgMHgwOCwgMHgxOCwKLTB4NDEsIDB4NmQsIDB4MDIsIDB4OWIsIDB4NTksIDB4NDAsIDB4OTIsIDB4NjksIDB4NTEsIDB4NDAsIDB4NDEsIDB4NjUsCi0weDIwLCAweDc4LCAweDQxLCAweDFlLCAweDIxLCAweDcwLCAweDAwLCAweDI4LCAweDBkLCAweGQwLCAweDM4LCAweDFjLAotMHhmZiwgMHhmNywgMHhmNCwgMHhmZSwgMHgwMCwgMHgyOCwgMHgwZCwgMHhkMSwgMHgwOCwgMHg0YSwgMHg1MCwgMHg2OCwKLTB4YzAsIDB4NjgsIDB4YzAsIDB4NDYsIDB4NTAsIDB4NjAsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4YTQsIDB4ZmEsCi0weDAyLCAweGUwLCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAweDczLCAweGZhLCAweDAxLCAweGYwLCAweGRlLCAweGZhLAotMHgwMywgMHhiMCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg2YywgMHgwNiwgMHgwMCwgMHg4MCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MzgsIDB4MDQsIDB4MDAsIDB4ODAsIDB4NGMsIDB4MmEsIDB4MDAsIDB4ODAsCi0weGFjLCAweGFiLCAweDIwLCAweDQwLCAweDk0LCAweDA2LCAweDAwLCAweDgwLCAweDA4LCAweDgzLCAweDIwLCAweDQwLAotMHhmMCwgMHhiNSwgMHg4MiwgMHhiMCwgMHg2OSwgMHg0YiwgMHg5ZiwgMHg2YSwgMHg1OCwgMHgyMywgMHg1YSwgMHg0MywKLTB4YmEsIDB4MTgsIDB4YzMsIDB4MWQsIDB4NDksIDB4MzMsIDB4MWYsIDB4NzgsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsCi0weGQ0LCAweDFkLCAweDAxLCAweDM0LCAweDIzLCAweDQzLCAweDFkLCAweDY4LCAweDQzLCAweDY4LCAweDFjLCAweDA0LAotMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHhkNiwgMHgxZCwgMHgwNSwgMHgzNiwgMHgzMywgMHg0MywgMHgxYiwgMHg2OCwKLTB4MWMsIDB4NDMsIDB4NDIsIDB4MjMsIDB4MWMsIDB4NDMsIDB4MGMsIDB4NjAsIDB4ZmYsIDB4MjYsIDB4MzYsIDB4MDIsCi0weDJlLCAweDQwLCAweDAxLCAweDIzLCAweDViLCAweDAyLCAweDllLCAweDQyLCAweDc0LCAweGQxLCAweDZiLCAweDBjLAotMHgyYiwgMHhkMywgMHhjMywgMHgxOSwgMHgyMCwgMHgzMywgMHgxYiwgMHg3OSwKLTB4YzAsIDB4NDYsIDB4NGIsIDB4ODEsIDB4N2IsIDB4MDAsIDB4MWIsIDB4MTgsIDB4MWIsIDB4OGYsIDB4NGMsIDB4ODksCi0weDFiLCAweDFiLCAweGNiLCAweDgwLCAweDAwLCAweDI0LCAweGE2LCAweDAwLCAweDAxLCAweDk2LCAweGIzLCAweDE4LAotMHhkZSwgMHgxZCwgMHgwOSwgMHgzNiwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgzMywgMHg0MywgMHgxYiwgMHg2OCwKLTB4MDEsIDB4OWUsIDB4NzYsIDB4MTgsIDB4NzMsIDB4NjEsIDB4MDEsIDB4MzQsIDB4MDUsIDB4MmMsIDB4ZjAsIDB4ZDMsCi0weDAwLCAweDI0LCAweGE2LCAweDAwLCAweDAwLCAweDk2LCAweGIzLCAweDE4LCAweGRlLCAweDFkLCAweDFkLCAweDM2LAotMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgzMywgMHg0MywgMHgxYiwgMHg2OCwgMHgwMCwgMHg5ZSwgMHg3NiwgMHgxOCwKLTB4YjMsIDB4NjIsIDB4MDEsIDB4MzQsIDB4MDUsIDB4MmMsIDB4ZjAsIDB4ZDMsIDB4MDYsIDB4ZTAsIDB4MDAsIDB4MjMsCi0weDRiLCAweDgxLCAweGNiLCAweDgwLCAweDQwLCAweDIzLCAweDljLCAweDQzLCAweDBjLCAweDYwLCAweDIzLCAweDFjLAotMHg2YiwgMHgwZSwgMHg0YSwgMHhkMywgMHhjMywgMHgxOSwgMHgyMCwgMHgzMywgMHgxYiwgMHg3OSwgMHgxMCwgMHgzMywKLTB4MGIsIDB4ODEsIDB4N2IsIDB4MDAsIDB4MWIsIDB4MTgsIDB4MWIsIDB4OGYsIDB4MGYsIDB4ODksIDB4ZGIsIDB4MWIsCi0weDhiLCAweDgwLCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweGQ0LCAweDFkLCAweDM1LCAweDM0LCAweDIzLCAweDQzLAotMHgxYiwgMHg2OCwgMHhjMCwgMHg0NiwgMHhjYiwgMHg2MywgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHhkNCwgMHgxZCwKLTB4MzEsIDB4MzQsIDB4MjMsIDB4NDMsIDB4MWIsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MGIsIDB4NjQsIDB4YWIsIDB4MGUsCi0weDIxLCAweGQyLCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweGQ0LCAweDFkLCAweDNkLCAweDM0LCAweDIzLCAweDQzLAotMHgxYiwgMHg2OCwgMHhjMCwgMHg0NiwgMHg0YiwgMHg2NCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHhkNCwgMHgxZCwKLTB4MzksIDB4MzQsIDB4MjMsIDB4NDMsIDB4MWIsIDB4NjgsIDB4YzAsIDB4NDYsIDB4OGIsIDB4NjQsIDB4MDEsIDB4MjMsCi0weDliLCAweDA3LCAweGQ0LCAweDFkLCAweDQ1LCAweDM0LCAweDIzLCAweDQzLCAweDFiLCAweDY4LCAweGMwLCAweDQ2LAotMHhjYiwgMHg2NCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHhkNCwgMHgxZCwgMHg0MSwgMHgzNCwgMHgyMywgMHg0MywKLTB4MWIsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MGIsIDB4NjUsIDB4MDAsIDB4ZTAsIDB4MGYsIDB4ZTAsIDB4ZmIsIDB4MWYsCi0weDAxLCAweDNiLCAweDFiLCAweDA0LCAweDFiLCAweDBjLCAweDA3LCAweDY4LCAweGZmLCAweDE4LCAweDAzLCAweDY5LAotMHgwOCwgMHgxYywgMHgzOSwgMHgxYywgMHgwMCwgMHhmMCwgMHgzNCwgMHhmOCwgMHgyYywgMHhlMCwgMHgwMCwgMHgyMywKLTB4MGIsIDB4ODEsIDB4OGIsIDB4ODAsIDB4MjgsIDB4ZTAsIDB4MDAsIDB4MjMsIDB4OGIsIDB4ODAsIDB4MGIsIDB4ODEsCi0weGMzLCAweDE5LCAweDIwLCAweDMzLCAweDFiLCAweDdhLCAweGMwLCAweDQ2LCAweDRiLCAweDgxLCAweDdiLCAweDAwLAotMHgxOCwgMHgxOCwgMHgwMCwgMHg4ZSwgMHhjMCwgMHg0NiwgMHhjOCwgMHg4MCwgMHgwMCwgMHgyMCwgMHg4NywgMHgwMCwKLTB4YmIsIDB4MTgsIDB4ZGMsIDB4MWQsIDB4MDksIDB4MzQsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MjMsIDB4NDMsCi0weDFiLCAweDY4LCAweDdmLCAweDE4LCAweDdiLCAweDYxLCAweDAxLCAweDMwLCAweDA1LCAweDI4LCAweGYyLCAweGQzLAotMHgwMCwgMHgyMCwgMHg4NywgMHgwMCwgMHhiYiwgMHgxOCwgMHhkYywgMHgxZCwgMHgxZCwgMHgzNCwgMHgwMSwgMHgyMywKLTB4OWIsIDB4MDcsIDB4MjMsIDB4NDMsIDB4MWIsIDB4NjgsIDB4N2YsIDB4MTgsIDB4YmIsIDB4NjIsIDB4MDEsIDB4MzAsCi0weDA1LCAweDI4LCAweGYyLCAweGQzLCAweDAyLCAweGIwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHg0YywgMHgyYSwgMHgwMCwgMHg4MCwgMHg4MCwgMHhiNCwgMHgxZiwgMHgxYywgMHgzYiwgMHgwYywgMHgxOCwgMHhkMiwKLTB4MTcsIDB4NmQsIDB4MTEsIDB4NGIsIDB4YzAsIDB4NDYsIDB4ZGYsIDB4NjAsIDB4NTIsIDB4NmQsIDB4YzAsIDB4NDYsCi0weDFhLCAweDYxLCAweGM3LCAweDYwLCAweDFhLCAweDY5LCAweGMwLCAweDQ2LCAweDAyLCAweDYxLCAweGQ4LCAweDY4LAotMHhjMCwgMHg0NiwgMHgwOCwgMHg4MCwgMHhkOCwgMHg2OCwgMHgwMCwgMHgwYywgMHg0OCwgMHg4MCwgMHgxOCwgMHg2OSwKLTB4YzAsIDB4NDYsIDB4ODgsIDB4ODAsIDB4MTgsIDB4NjksIDB4MDAsIDB4MGMsIDB4YzgsIDB4ODAsIDB4ODAsIDB4YmMsCi0weDcwLCAweDQ3LCAweDRhLCAweDg4LCAweDEyLCAweDA0LCAweDBiLCAweDg4LCAweDFhLCAweDQzLCAweGMyLCAweDYwLAotMHg4YSwgMHg4OCwgMHhjOSwgMHg4OCwgMHgwOSwgMHgwNCwgMHgxMSwgMHg0MywgMHgwMSwgMHg2MSwgMHhmMiwgMHhlNywKLTB4MmMsIDB4MDcsIDB4MDAsIDB4ODAsIDB4ZjEsIDB4YjUsIDB4ODgsIDB4YjAsIDB4MDAsIDB4MjIsIDB4MDgsIDB4OTgsCi0weDAwLCAweDZhLCAweDA4LCAweDliLCAweDk5LCAweDY4LCAweDQ5LCAweDBhLCAweDAyLCAweGQzLCAweDAxLCAweDI3LAotMHhmZiwgMHgwMywgMHgwMCwgMHhlMCwgMHgwMCwgMHgyNywgMHgwMywgMHg4YiwgMHgwMCwgMHgyYiwgMHgxOSwgMHhkMCwKLTB4YTMsIDB4NDksIDB4ODksIDB4NmEsIDB4MWMsIDB4MWMsIDB4NTgsIDB4MjMsIDB4NjMsIDB4NDMsIDB4YzksIDB4MTgsCi0weDAxLCAweDIzLCAweDliLCAweDA3LCAweDU4LCAweDM5LCAweDE5LCAweDQzLCAweDA5LCAweDY4LCAweDA5LCAweDA0LAotMHgwOSwgMHgwYywgMHgwMiwgMHgyOSwgMHgwMiwgMHhkMSwgMHgwOCwgMHgyMywgMHgxZiwgMHg0MywgMHgwNywgMHhlMCwKLTB4NDEsIDB4OGIsIDB4MDAsIDB4MjksIDB4MDIsIDB4ZDAsIDB4MGMsIDB4MjMsCi0weDFmLCAweDQzLCAweDAxLCAweGUwLCAweDA0LCAweDIzLCAweDFmLCAweDQzLCAweDgzLCAweDhhLCAweDAwLCAweDJiLAotMHgxOCwgMHhkMCwgMHg5NSwgMHg0OSwgMHg4OSwgMHg2YSwgMHgxYywgMHgxYywgMHg1OCwgMHgyMywgMHg2MywgMHg0MywKLTB4YzksIDB4MTgsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4NTgsIDB4MzksIDB4MTksIDB4NDMsIDB4MDksIDB4NjgsCi0weDA5LCAweDA0LCAweDA5LCAweDBjLCAweDAyLCAweDI5LCAweDAxLCAweGQxLCAweDBmLCAweDQzLCAweDA3LCAweGUwLAotMHhjMSwgMHg4YSwgMHgwMCwgMHgyOSwgMHgwMiwgMHhkMCwgMHgwMywgMHgyMywgMHgxZiwgMHg0MywgMHgwMSwgMHhlMCwKLTB4MDEsIDB4MjMsIDB4MWYsIDB4NDMsIDB4YzEsIDB4MWQsIDB4MzksIDB4MzEsIDB4MDcsIDB4OTEsIDB4NGIsIDB4ODksCi0weDBjLCAweDg5LCAweDFjLCAweDE5LCAweDI0LCAweDA0LCAweDI0LCAweDBjLCAweDA4LCAweDlkLCAweDJkLCAweDY4LAotMHhjMCwgMHg0NiwgMHgwMSwgMHg5NSwgMHhjOSwgMHg4OCwgMHg3ZCwgMHgwOCwgMHgxYSwgMHhkMywgMHgxYSwgMHgxYywKLTB4YzMsIDB4MWQsIDB4MTksIDB4MzMsIDB4MWEsIDB4NzIsIDB4MDcsIDB4OWEsIDB4OTIsIDB4ODksIDB4YzAsIDB4NDYsCi0weDFhLCAweDczLCAweDA3LCAweDlhLCAweDEyLCAweDg5LCAweGMwLCAweDQ2LCAweDAyLCAweDg2LCAweDA0LCAweDg3LAotMHg4MiwgMHg4YSwgMHgwMSwgMHgzYSwgMHg4MiwgMHg4MywgMHgwMSwgMHgyMiwgMHgxOSwgMHg3MSwgMHgwOCwgMHg5YiwKLTB4MWIsIDB4NjgsIDB4NWIsIDB4MTgsIDB4NWIsIDB4NzgsIDB4OWIsIDB4MDAsIDB4MWIsIDB4MDQsIDB4MWIsIDB4MGMsCi0weDA4LCAweDMzLCAweDU5LCAweDE4LCAweGJiLCAweDA4LCAweDQ3LCAweGQzLCAweDA3LCAweDliLCAweDViLCAweDg5LAotMHg4NSwgMHgxOCwgMHgwNiwgMHg5NSwgMHgyMCwgMHgzNSwgMHgyYiwgMHg3MiwgMHgwNywgMHg5YiwgMHg5YiwgMHg4OSwKLTB4YzAsIDB4NDYsIDB4MmIsIDB4NzMsIDB4MDcsIDB4OWIsIDB4MWIsIDB4ODksIDB4MmUsIDB4MWMsIDB4NTUsIDB4MDAsCi0weDJkLCAweDE4LCAweDA1LCAweDk1LCAweDJiLCAweDg2LCAweDAwLCAweDJhLCAweDAxLCAweGQwLCAweGMzLCAweDhhLAotMHgwMCwgMHhlMCwgMHg4MywgMHg4YSwgMHgwMSwgMHgzYiwgMHgwNSwgMHg5ZCwgMHhjMCwgMHg0NiwgMHhhYiwgMHg4MywKLTB4MzEsIDB4NzEsIDB4NjUsIDB4NGIsIDB4OWQsIDB4NmEsIDB4MDUsIDB4OWIsIDB4OWUsIDB4OGIsIDB4NTgsIDB4MjMsCi0weDczLCAweDQzLCAweGViLCAweDE4LCAweGRkLCAweDFkLCAweDAxLCAweDM1LCAweDAxLCAweDIzLCAweDliLCAweDA3LAotMHgyYiwgMHg0MywgMHgxZCwgMHg2OCwgMHgyYiwgMHgwZSwgMHg1YiwgMHgwNiwgMHgwMSwgMHhkMSwgMHgwOCwgMHgzMSwKLTB4MDAsIDB4ZTAsIDB4MTAsIDB4MzEsIDB4ODEsIDB4MjMsIDB4NWIsIDB4MDIsIDB4MWQsIDB4NDAsIDB4OWQsIDB4NDIsCi0weDAzLCAweGQxLCAweGUzLCAweDFmLCAweDA1LCAweDNiLCAweDFjLCAweDA0LCAweDI0LCAweDBjLCAweDA1LCAweDliLAotMHhjMCwgMHg0NiwgMHgxYywgMHg4NywgMHgwOCwgMHg5YiwgMHgxYiwgMHg2OCwgMHgxYiwgMHgxOSwgMHgxMCwgMHgzYiwKLTB4OWIsIDB4N2IsIDB4MDYsIDB4OWQsIDB4NDAsIDB4MzUsIDB4MmIsIDB4NzAsIDB4MmIsIDB4NzgsIDB4MDIsIDB4MzMsCi0weGUzLCAweDFhLCAweDFjLCAweDA0LCAweDI0LCAweDBjLCAweDAxLCAweDMyLCAweGJiLCAweDA4LCAweDliLCAweDA3LAotMHg2ZCwgMHhkMCwgMHg4MywgMHgxOCwgMHgyMCwgMHgzMywgMHgwNCwgMHg5MywgMHgxOSwgMHg3MiwgMHgwMSwgMHg5YiwKLTB4NWQsIDB4MTgsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MmIsIDB4NDMsIDB4MWIsIDB4NjgsIDB4MWIsIDB4MDcsCi0weDFiLCAweDBmLCAweDliLCAweDAwLCAweDA0LCAweDllLCAweGMwLCAweDQ2LCAweDMzLCAweDczLCAweDAwLCAweDk1LAotMHgyYiwgMHg3OCwgMHgxYiwgMHgwNywgMHgxYiwgMHgwZiwgMHg5YiwgMHgwMCwgMHgwNCwgMHg5ZCwgMHhjMCwgMHg0NiwKLTB4MmIsIDB4NzMsIDB4MDAsIDB4OWQsIDB4ZWIsIDB4NzgsIDB4YWQsIDB4NzgsIDB4MWIsIDB4MDIsIDB4MWQsIDB4NDMsCi0weDJiLCAweDAyLCAweDJkLCAweDBhLCAweDJkLCAweDA2LCAweDJkLCAweDBlLCAweDJiLCAweDQzLCAweDU1LCAweDAwLAotMHgyZCwgMHgxOCwgMHgyYiwgMHg4NiwgMHgwNCwgMHg5YiwgMHhjMCwgMHg0NiwgMHg1OSwgMHg3MiwgMHgwNCwgMHg5YiwKLTB4MWIsIDB4N2IsIDB4MmUsIDB4MWMsIDB4MDQsIDB4OWQsIDB4YzAsIDB4NDYsIDB4NmIsIDB4NzMsIDB4MzMsIDB4OGUsCi0weGMwLCAweDQ2LCAweDczLCAweDg2LCAweDAwLCAweDlkLCAweDJiLCAweDc4LCAweDFiLCAweDA3LCAweDFiLCAweDBmLAotMHg5YiwgMHgwMCwgMHgxYiwgMHgwNCwgMHgxYiwgMHgwYywgMHg1OSwgMHgxOCwgMHgwNCwgMHgyNSwgMHgzZCwgMHg0MCwKLTB4MGUsIDB4ZDAsIDB4MzQsIDB4ODcsIDB4MDMsIDB4OGIsIDB4MDEsIDB4M2IsIDB4YjMsIDB4ODMsIDB4MTMsIDB4MWMsCi0weDFiLCAweDE4LCAweDIwLCAweDMzLCAweDE5LCAweDcxLCAweDAxLCAweDliLCAweDViLCAweDE4LCAweDViLCAweDc4LAotMHg5YiwgMHgwMCwgMHg1OSwgMHgxOCwgMHgwOCwgMHgzMSwgMHgwMSwgMHgzMiwgMHgzYiwgMHgwOSwgMHgzNywgMHhkMywKLTB4MDAsIDB4MmQsIDB4MDEsIDB4ZDAsIDB4NDMsIDB4OGIsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4OGIsIDB4NTUsIDB4MDAsCi0weDJkLCAweDE4LCAweDAxLCAweDNiLCAweGFiLCAweDgzLCAweDgzLCAweDE4LCAweDAzLCAweDkzLCAweDIwLCAweDMzLAotMHgxOSwgMHg3MSwgMHgyMCwgMHg0YiwgMHg5ZCwgMHg2YSwgMHg1MywgMHgwMCwgMHgxYiwgMHgxOCwgMHgwMiwgMHg5MywKLTB4OWUsIDB4OGIsIDB4NTgsIDB4MjMsIDB4NzMsIDB4NDMsIDB4ZWIsIDB4MTgsIDB4ZGQsIDB4MWQsIDB4MDEsIDB4MzUsCi0weDAxLCAweDIzLCAweDliLCAweDA3LCAweDJiLCAweDQzLCAweDFkLCAweDY4LAotMHgyYiwgMHgwZSwgMHg1YiwgMHgwNiwgMHgwMiwgMHhkMSwgMHgwOCwgMHgzMSwgMHgwMSwgMHhlMCwgMHgxNSwgMHhlMCwKLTB4MTAsIDB4MzEsIDB4ODEsIDB4MjMsIDB4NWIsIDB4MDIsIDB4MWQsIDB4NDAsIDB4OWQsIDB4NDIsIDB4MDMsIDB4ZDEsCi0weGUzLCAweDFmLCAweDA1LCAweDNiLCAweDFjLCAweDA0LCAweDI0LCAweDBjLCAweDAyLCAweDliLCAweGMwLCAweDQ2LAotMHgxYywgMHg4NywgMHgwOCwgMHg5YiwgMHgxYiwgMHg2OCwgMHgxYiwgMHgxOSwgMHgxMCwgMHgzYiwgMHg5YiwgMHg3YiwKLTB4MDMsIDB4OWMsIDB4NDAsIDB4MzQsIDB4MjMsIDB4NzAsIDB4MDEsIDB4MzIsIDB4MDcsIDB4OWIsIDB4YzAsIDB4NDYsCi0weGQ5LCAweDgwLCAweDUxLCAweDFlLCAweGMzLCAweDFkLCAweDQ5LCAweDMzLCAweDE5LCAweDcwLCAweDA3LCAweDYxLAotMHgwNCwgMHgyYSwgMHgwNiwgMHhkMiwgMHgwNiwgMHg0OSwgMHg1MywgMHgwMCwgMHgxYiwgMHgxOCwgMHg5OSwgMHg4MywKLTB4MDEsIDB4MzIsIDB4MDQsIDB4MmEsIDB4ZjksIDB4ZDMsIDB4MDksIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsCi0weDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDRjLCAweDJhLCAweDAwLCAweDgwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLAotMHg3MCwgMHg0NywgMHg4MCwgMHhiNSwgMHg4YywgMHhiMCwgMHgwNywgMHgxYywgMHgxMiwgMHg0OCwgMHgwMSwgMHg2OCwKLTB4MDEsIDB4MzEsIDB4MDEsIDB4NjAsIDB4MzgsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTAsIDB4NzgsIDB4NjgsCi0weGMwLCAweDQ2LCAweDAxLCAweDkwLCAweGI4LCAweDY4LCAweGMwLCAweDQ2LCAweDAyLCAweDkwLCAweDBkLCAweDQ4LAotMHg0MSwgMHg2OCwgMHhjOSwgMHg2OCwgMHhjMCwgMHg0NiwgMHg0MSwgMHg2MCwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwKLTB4NGYsIDB4ZjgsIDB4YjgsIDB4NjgsIDB4NDAsIDB4MDksIDB4MDYsIDB4ZDMsIDB4MTAsIDB4MjMsIDB4MDIsIDB4OTgsCi0weDE4LCAweDQzLCAweDAyLCAweDkwLCAweDY4LCAweDQ2LCAweDAyLCAweGYwLCAweGUxLCAweGZmLCAweDY4LCAweDQ2LAotMHgwMiwgMHhmMCwgMHg5YSwgMHhmZSwgMHgwYywgMHhiMCwgMHg4MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4MGMsIDB4MmIsIDB4MDAsIDB4ODAsIDB4NmMsIDB4MDYsIDB4MDAsIDB4ODAsIDB4MDAsIDB4YjUsIDB4OGMsIDB4YjAsCi0weDAxLCAweDY4LCAweGMwLCAweDQ2LCAweDAwLCAweDkxLCAweDQxLCAweDY4LCAweDA1LCAweDRiLCAweDE5LCAweDQzLAotMHgwMSwgMHg5MSwgMHgwMCwgMHhmMCwgMHgyZiwgMHhmOCwgMHg2OCwgMHg0NiwgMHgwMiwgMHhmMCwgMHg4NCwgMHhmZSwKLTB4MGMsIDB4YjAsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsCi0weDAyLCAweDZhLCAweDAzLCAweDY4LCAweGMwLCAweDQ2LCAweDEzLCAweDYwLCAweDQwLCAweDY4LCAweGMwLCAweDQ2LAotMHg1MCwgMHg2MCwgMHg0MCwgMHgzMiwgMHg0OCwgMHg2OCwgMHhjMCwgMHg0NiwgMHg5MCwgMHg4MCwgMHhjOCwgMHg2OCwKLTB4YzAsIDB4NDYsIDB4ZDAsIDB4ODAsIDB4NDgsIDB4NjksIDB4YzAsIDB4NDYsIDB4MTAsIDB4ODEsIDB4ODgsIDB4NjgsCi0weGMwLCAweDQ2LCAweDUwLCAweDgxLCAweDA4LCAweDdlLCAweGMwLCAweDQ2LCAweDkwLCAweDczLCAweDA4LCAweDY5LAotMHhjMCwgMHg0NiwgMHg5MCwgMHg4MSwgMHg3MCwgMHg0NywgMHgwNCwgMHg0OSwgMHgwOCwgMHg2OCwgMHgwMCwgMHgyOCwKLTB4MDAsIDB4ZDEsIDB4NzAsIDB4NDcsIDB4YzIsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MGEsIDB4NjAsIDB4ZmEsIDB4ZTcsCi0weDZjLCAweDA2LCAweDAwLCAweDgwLCAweDAyLCAweDQ5LCAweDBhLCAweDY4LCAweGMwLCAweDQ2LCAweGMyLCAweDYwLAotMHgwOCwgMHg2MCwgMHg3MCwgMHg0NywgMHg2YywgMHgwNiwgMHgwMCwgMHg4MCwgMHhiMCwgMHhiNCwgMHgwMCwgMHgyMiwKLTB4MTIsIDB4NGYsIDB4N2MsIDB4N2YsIDB4MDEsIDB4MzQsIDB4N2MsIDB4NzcsIDB4MDMsIDB4MjMsIDB4ZmMsIDB4MWQsCi0weDE5LCAweDM0LCAweDM4LCAweDYyLCAweDc5LCAweDYyLCAweDIzLCAweDcyLCAweDBlLCAweDRjLCAweDI1LCAweDY4LAotMHg2YiwgMHgwYywgMHgwNSwgMHhkMiwgMHgyMywgMHg2OCwgMHgxYiwgMHgwYywgMHgxMCwgMHhkMSwgMHgyNCwgMHg2OCwKLTB4YTMsIDB4MGEsIDB4MGQsIDB4ZDMsIDB4MDEsIDB4MjMsIDB4MGEsIDB4NGYsIDB4YzAsIDB4NDYsIDB4ZmIsIDB4NjIsCi0weDA5LCAweDRmLCAweDBhLCAweDRiLCAweGMwLCAweDQ2LCAweGRmLCAweDYwLCAweDk5LCAweDYwLCAweDU4LCAweDYwLAotMHgxMCwgMHgxYywgMHgxOCwgMHg2MCwgMHgwMSwgMHgzMiwgMHhmYiwgMHhlNywgMHgxMCwgMHgxYywgMHgzOCwgMHg2NCwKLTB4MDEsIDB4MzIsIDB4ZmIsIDB4ZTcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsCi0weGMwLCAweDAwLCAweDE4LCAweDAwLCAweDAyLCAweDgxLCAweDAwLCAweDAwLCAweDQwLCAweDAxLCAweDE4LCAweDAwLAotMHhmMCwgMHhiNSwgMHg0NywgMHg0ZiwgMHgzOCwgMHg2OCwgMHg0NywgMHg0ZSwgMHg0NywgMHg0ZCwgMHgwNywgMHgyMywKLTB4NWIsIDB4MDIsIDB4ZWMsIDB4MTgsIDB4MDAsIDB4MjgsIDB4MWQsIDB4ZDEsIDB4MjAsIDB4NmIsIDB4MDEsIDB4MzAsCi0weDIwLCAweDYzLCAweDQ0LCAweDQ5LCAweGMwLCAweDQ2LCAweDA4LCAweDYwLCAweDQzLCAweDQ4LCAweDQxLCAweDY5LAotMHgwMCwgMHgyOSwgMHgxMywgMHhkMCwgMHhjMSwgMHgxZCwgMHg2OSwgMHgzMSwgMHgwOSwgMHg3YiwgMHgwMCwgMHgyOSwKLTB4MGUsIDB4ZDAsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MDEsIDB4NmQsIDB4MTksIDB4NDMsIDB4MDksIDB4NjgsCi0weGMwLCAweDQ2LCAweDgxLCAweDYxLCAweGMyLCAweDY5LCAweDkxLCAweDQyLCAweDA0LCAweGQwLCAweGYxLCAweDZjLAotMHgwMSwgMHgzMSwgMHhmMSwgMHg2NCwgMHgwMSwgMHhmMCwgMHg1MCwgMHhmZSwKLTB4MzgsIDB4NjgsIDB4MDEsIDB4MjgsIDB4MTcsIDB4ZDEsIDB4MzcsIDB4NDgsIDB4NDEsIDB4NjksIDB4MDAsIDB4MjksCi0weDEzLCAweGQwLCAweGMxLCAweDFkLCAweDY5LCAweDMxLCAweDA5LCAweDdiLCAweDAwLCAweDI5LCAweDBlLCAweGQwLAotMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgwMSwgMHg2ZCwgMHgxOSwgMHg0MywgMHgwOSwgMHg2OCwgMHhjMCwgMHg0NiwKLTB4ODEsIDB4NjEsIDB4YzIsIDB4NjksIDB4OTEsIDB4NDIsIDB4MDQsIDB4ZDAsIDB4ZjEsIDB4NmMsIDB4MDEsIDB4MzEsCi0weGYxLCAweDY0LCAweDAxLCAweGYwLCAweDM1LCAweGZlLCAweDM4LCAweDY4LCAweDAyLCAweDI4LCAweDJmLCAweGQxLAotMHhiYiwgMHgyMywgMHgxYiwgMHgwMSwgMHhlZSwgMHgxOCwgMHg3MCwgMHg3YiwgMHgwMCwgMHgyOCwgMHgwMywgMHhkMCwKLTB4MDAsIDB4MjAsIDB4NzAsIDB4NzMsIDB4MDAsIDB4ZjAsIDB4NGEsIDB4ZmQsIDB4MzAsIDB4N2IsIDB4MDAsIDB4MjgsCi0weDAyLCAweGQwLCAweDc4LCAweDY4LCAweDAyLCAweGYwLCAweGFhLCAweGZmLCAweDFiLCAweDIzLCAweGRiLCAweDAxLAotMHhlOCwgMHgxOCwgMHhjMCwgMHg4YiwgMHgwNCwgMHgyNiwgMHgwNiwgMHg0MCwgMHhlMCwgMHg2YSwgMHhiMCwgMHg0MiwKLTB4MTQsIDB4ZDAsIDB4ZjgsIDB4NjgsIDB4MDEsIDB4MzAsIDB4ZjgsIDB4NjAsIDB4MTksIDB4MjgsIDB4MTEsIDB4ZDMsCi0weDFiLCAweDQ4LCAweDAxLCAweDdiLCAweDAwLCAweDI5LCAweDBkLCAweGQxLCAweGZmLCAweDMwLCAweDQxLCAweDMwLAotMHg0MCwgMHg3OCwgMHgwMCwgMHgyOCwgMHgwOCwgMHhkMSwgMHhiOCwgMHg2OCwgMHgwMiwgMHhmMCwgMHg5MCwgMHhmZiwKLTB4MDAsIDB4MjAsIDB4ZjgsIDB4NjAsIDB4ZTYsIDB4NjIsIDB4MDEsIDB4ZTAsIDB4MDAsIDB4MjAsIDB4ZjgsIDB4NjAsCi0weDM4LCAweDY4LCAweDAzLCAweDI4LCAweDBiLCAweGQxLCAweGVjLCAweDFkLCAweDc5LCAweDM0LCAweGUwLCAweDZiLAotMHg4MCwgMHgwOCwgMHgwMiwgMHhkMywgMHgwMiwgMHgyMCwgMHgwMiwgMHhmMCwgMHgwNywgMHhmYywgMHgwMiwgMHgyMywKLTB4ZTAsIDB4NmIsIDB4OTgsIDB4NDMsIDB4ZTAsIDB4NjMsIDB4MzgsIDB4NjgsIDB4MDEsIDB4MzAsIDB4MzgsIDB4NjAsCi0weDAzLCAweDI4LCAweDAxLCAweGQ5LCAweDAwLCAweDIwLCAweDM4LCAweDYwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHgzYywgMHgwNCwgMHgwMCwgMHg4MCwgMHhhMCwgMHg4MiwgMHgyMCwgMHg0MCwKLTB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4NDAsIDB4MDEsIDB4MTgsIDB4MDAsIDB4NjQsIDB4MmQsIDB4MDAsIDB4ODAsCi0weGU0LCAweDJjLCAweDAwLCAweDgwLCAweDI4LCAweDA1LCAweDAwLCAweDgwLCAweGIwLCAweGI0LCAweDFkLCAweDQ4LAotMHg4NCwgMHg4YSwgMHgxZCwgMHg0YSwgMHgxMywgMHg4YSwgMHhjMSwgMHgxZCwgMHgwOSwgMHgzMSwgMHgwMSwgMHgyNywKLTB4OWMsIDB4NDIsIDB4MDMsIDB4ZDEsIDB4NDMsIDB4OGEsIDB4NTQsIDB4OGEsIDB4YTMsIDB4NDIsIDB4MTAsIDB4ZDAsCi0weDBiLCAweDc4LCAweDAwLCAweDJiLCAweDBkLCAweGQwLCAweDRiLCAweDc4LCAweDAwLCAweDJiLCAweDBhLCAweGQwLAotMHg0NCwgMHg4YiwgMHg5MywgMHg4YSwgMHg5YywgMHg0MiwgMHgwNCwgMHhkYywgMHgxMywgMHg0YiwgMHhjMCwgMHg0NiwKLTB4NWYsIDB4NjAsIDB4OTcsIDB4ODIsIDB4MDEsIDB4ZTAsIDB4MDEsIDB4MzMsIDB4OTMsIDB4ODIsIDB4YzMsIDB4OGIsCi0weDVjLCAweDFjLCAweGM0LCAweDgzLCAweDg0LCAweDhiLCAweGEzLCAweDQyLCAweDBlLCAweGRiLCAweDg0LCAweDhhLAotMHgwNSwgMHg4YiwgMHgwMCwgMHgyMywgMHhhYywgMHg0MiwgMHgwNSwgMHhkYSwgMHg0NCwgMHg4YSwgMHhjNSwgMHg4YSwKLTB4YWMsIDB4NDIsIDB4MDEsIDB4ZGEsIDB4NGIsIDB4NzAsIDB4MDAsIDB4ZTAsIDB4NGYsIDB4NzAsIDB4NDMsIDB4ODIsCi0weDgzLCAweDgyLCAweGMzLCAweDgzLCAweDQxLCAweDhhLCAweGMwLCAweDQ2LCAweDUxLCAweDgyLCAweDgwLCAweDhhLAotMHhjMCwgMHg0NiwgMHgxMCwgMHg4MiwgMHhiMCwgMHhiYywgMHg3MCwgMHg0NywgMHhlOCwgMHgwZSwgMHgwMCwgMHg4MCwKLTB4M2MsIDB4MDQsIDB4MDAsIDB4ODAsIDB4NDAsIDB4MDEsIDB4MTgsIDB4MDAsIDB4ZjcsIDB4YjUsIDB4OTEsIDB4YjAsCi0weDZiLCAweDQ2LCAweDg0LCAweDFlLCAweDEyLCAweDk5LCAweDE0LCAweDI5LCAweDFhLCAweGQ5LCAweDAwLCAweDIwLAotMHg4MSwgMHgwMCwgMHg2NywgMHg1OCwgMHhjMCwgMHg0NiwgMHg1NywgMHg1MCwgMHgwMSwgMHgzMCwgMHgwMCwgMHgwNiwKLTB4MDAsIDB4MGUsIDB4MTAsIDB4MjgsIDB4ZjYsIDB4ZDMsIDB4MDAsIDB4MjEsIDB4MDUsIDB4MjAsIDB4ODcsIDB4MDAsCi0weGQ2LCAweDU5LCAweDRmLCAweDFjLCAweDNkLCAweDA2LCAweDJkLCAweDBlLCAweDBmLCAweDFjLCAweGJmLCAweDAwLAotMHhkZSwgMHg1MSwgMHgyOSwgMHgxYywgMHgwMSwgMHgzMCwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwZSwgMHgxMCwgMHgyOCwKLTB4ZjEsIDB4ZDMsIDB4MDksIDB4ZTAsIDB4MDAsIDB4MjAsIDB4ODEsIDB4MDAsIDB4NjMsIDB4NTgsIDB4YzAsIDB4NDYsCi0weDUzLCAweDUwLCAweDAxLCAweDMwLCAweDAwLCAweDA2LCAweDAwLCAweDBlLCAweDA2LCAweDI4LCAweGY2LCAweGQzLAotMHgwMCwgMHgyMCwgMHhlMCwgMHg3MCwgMHgyMCwgMHg3MiwgMHg2MCwgMHg3MiwgMHhhMCwgMHg3MiwgMHgyMCwgMHg3MywKLTB4NjAsIDB4NzMsIDB4MTIsIDB4OTksIDB4MTQsIDB4MjksIDB4MzcsIDB4ZDksIDB4NjksIDB4NDYsIDB4OGUsIDB4MWMsCi0weDkxLCAweDc4LCAweDA5LCAweDA3LCAweDA5LCAweDBmLCAweDg5LCAweDAwLCAweDE0LCAweDM5LCAweDBkLCAweDA2LAotMHgyZCwgMHgxNiwgMHgwMCwgMHgyNywgMHgwMCwgMHgyZCwgMHgxYiwgMHhkZCwgMHhmMCwgMHgxOSwgMHgxMCwgMHhhOSwKLTB4MDAsIDB4ZjAsIDB4M2QsIDB4ZjgsIDB4MDAsIDB4MjgsIDB4MGUsIDB4ZDAsCi0weDAwLCAweDIwLCAweDEwLCAweGE5LCAweDA5LCAweDc4LCAweDAwLCAweDI5LCAweDA5LCAweGRkLCAweDAwLCAweDIyLAotMHgzOSwgMHgxOCwgMHg3MiwgMHg1NCwgMHgwMSwgMHgzMCwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwZSwgMHgxMCwgMHhhOSwKLTB4MDksIDB4NzgsIDB4ODgsIDB4NDIsIDB4ZjYsIDB4ZGIsIDB4MTAsIDB4YTgsIDB4MDAsIDB4NzgsIDB4MzgsIDB4MTgsCi0weDA3LCAweDA2LCAweDNmLCAweDBlLCAweGFmLCAweDQyLCAweGUzLCAweGRiLCAweDY4LCAweDQ2LCAweGUyLCAweDFkLAotMHgwZCwgMHgzMiwgMHgwMCwgMHgyMSwgMHhhYiwgMHgwOCwgMHg1ZiwgMHgxYywgMHgwOCwgMHhkMCwgMHg4YiwgMHgwMCwKLTB4YzQsIDB4NTgsIDB4YzAsIDB4NDYsIDB4ZDQsIDB4NTAsIDB4MDEsIDB4MzEsIDB4MDksIDB4MDYsIDB4MDksIDB4MGUsCi0weDhmLCAweDQyLCAweGY2LCAweGQ4LCAweDE0LCAweGIwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHg5MCwgMHhiNCwgMHg4NywgMHgxZSwgMHgwMCwgMHgyMCwgMHg4OSwgMHgwOCwgMHg0YiwgMHgxYywgMHgwOCwgMHhkMCwKLTB4ODEsIDB4MDAsIDB4NTQsIDB4NTgsIDB4YzAsIDB4NDYsIDB4N2MsIDB4NTAsIDB4MDEsIDB4MzAsIDB4MDAsIDB4MDYsCi0weDAwLCAweDBlLCAweDgzLCAweDQyLCAweGY2LCAweGQ4LCAweDkwLCAweGJjLCAweDcwLCAweDQ3LCAweDgwLCAweGI0LAotMHgwMiwgMHg3OCwgMHhkMiwgMHgwNiwgMHhkMiwgMHgwZSwgMHgwMCwgMHgyMywgMHgwMSwgMHgyNywgMHgwMSwgMHgyYSwKLTB4MDEsIDB4ZGMsIDB4MGYsIDB4NzAsIDB4MTEsIDB4ZTAsIDB4NDAsIDB4NzgsIDB4YzAsIDB4NDYsIDB4MDgsIDB4NzAsCi0weDE0LCAweDJhLCAweDA0LCAweGQxLCAweDA4LCAweDQ4LCAweDAxLCAweDdhLCAweDAxLCAweDMxLCAweDAxLCAweDcyLAotMHgwNywgMHhlMCwgMHgwMiwgMHgyYSwgMHgwNSwgMHhkMCwgMHgwNSwgMHgyYSwgMHgwMywgMHhkMCwgMHgwNiwgMHgyYSwKLTB4MDEsIDB4ZDAsIDB4MTUsIDB4MmEsIDB4MDIsIDB4ZDEsIDB4MTgsIDB4MWMsIDB4ODAsIDB4YmMsIDB4NzAsIDB4NDcsCi0weDM4LCAweDFjLCAweGZiLCAweGU3LCAweGUwLCAweDgyLCAweDIwLCAweDQwLCAweDAwLCAweGI1LCAweDBmLCAweDQ4LAotMHgwMSwgMHgyMywgMHgxYiwgMHgwNiwgMHg0MSwgMHg2OSwgMHg5OSwgMHg0MywgMHgxYSwgMHgwOSwgMHg0MSwgMHg2MSwKLTB4ZDEsIDB4NjAsIDB4MDAsIDB4MjEsIDB4YTEsIDB4MjIsIDB4NTIsIDB4MDMsIDB4OTEsIDB4NjEsIDB4MTksIDB4MWMsCi0weDA5LCAweDRhLCAweGMwLCAweDQ2LCAweDExLCAweDYwLCAweDFiLCAweDIzLCAweGRiLCAweDAxLCAweGMwLCAweDE4LAotMHg4MCwgMHg2OSwgMHgwMCwgMHgyOCwgMHgwMywgMHhkMCwgMHgwMiwgMHhmMCwgMHg2MSwgMHhmZSwgMHgwOCwgMHhiYywKLTB4MTgsIDB4NDcsIDB4MDQsIDB4NDgsIDB4NDEsIDB4ODgsIDB4MDEsIDB4MzEsIDB4NDEsIDB4ODAsIDB4ZjgsIDB4ZTcsCi0weDY4LCAweDBlLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweGUwLCAweDgyLCAweDIwLCAweDQwLAotMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHhmMCwgMHhiNSwgMHg4NiwgMHhiMCwgMHg5NSwgMHg0YSwgMHhkMCwgMHg2OCwKLTB4ZDcsIDB4MWQsIDB4NzksIDB4MzcsIDB4MDEsIDB4MjgsIDB4MDksIDB4ZDEsIDB4MzgsIDB4ODksIDB4MDAsIDB4MjgsCi0weDA2LCAweGQxLCAweGQwLCAweDZmLCAweDAyLCAweDIzLCAweDAxLCAweDY4LCAweDk5LCAweDQzLCAweDAxLCAweDYwLAotMHgxNCwgMHgyMCwgMHgzOCwgMHg4MSwgMHg4ZSwgMHg0YywgMHg2MSwgMHg2YSwgMHg4ZSwgMHg0OCwgMHhjMywgMHg2YiwKLTB4NTksIDB4MTgsIDB4YzEsIDB4NjMsIDB4YTAsIDB4NmEsIDB4MTksIDB4MjMsIDB4ZGIsIDB4MDEsIDB4ZDQsIDB4MTgsCi0weGEwLCAweDYyLCAweDIxLCAweDZhLCAweDA5LCAweDAzLCAweDA5LCAweDBiLCAweDgxLCAweDQyLCAweDA1LCAweGQxLAotMHgwMSwgMHgyMCwgMHg0MCwgMHgwNCwgMHg4NywgMHg0OSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg2MCwgMHhmMywgMHhlMCwKLTB4YmIsIDB4OGEsIDB4NTgsIDB4MWMsIDB4YjgsIDB4ODIsIDB4M2QsIDB4OGIsIDB4MDEsIDB4MjAsIDB4MDAsIDB4MjEsCi0weGFiLCAweDQyLCAweDA0LCAweGRiLCAweGQzLCAweDFkLCAweDg5LCAweDMzLCAweDU4LCAweDcwLCAweGI5LCAweDgyLAotMHhmOSwgMHg4MywgMHgzMywgMHgyMywgMHg5YiwgMHgwMSwgMHhkMywgMHgxOCwgMHgwNSwgMHg5MywgMHg1YiwgMHg2OSwKLTB4MGYsIDB4MmIsIDB4NzMsIDB4ZDIsIDB4MDAsIDB4MjEsIDB4N2MsIDB4NGYsIDB4YzAsIDB4NDYsIDB4MzksIDB4NjEsCi0weDIxLCAweDZhLCAweDhhLCAweDY4LCAweDEyLCAweDA0LCAweDEyLCAweDBjLCAweDRiLCAweDY4LCAweDFlLCAweDBjLAotMHgzNiwgMHgwNCwgMHhmZCwgMHgxZiwgMHgwOSwgMHgzZCwgMHgwMCwgMHgyZSwgMHgwNSwgMHhkMSwgMHgzYiwgMHgyYSwKLTB4MDMsIDB4ZDMsIDB4MDEsIDB4MjMsIDB4ZGIsIDB4MDIsIDB4OWEsIDB4NDIsIDB4MDEsIDB4ZDksIDB4YTgsIDB4NzMsCi0weGM4LCAweGUwLCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweDA4LCAweDMxLCAweDE5LCAweDQzLCAweDA5LCAweDY4LAotMHhjMCwgMHg0NiwgMHgwMywgMHg5MSwgMHgwMywgMHhhOSwgMHgwOSwgMHg4OCwgMHgwMSwgMHgzMSwgMHgwOSwgMHgwNCwKLTB4MDksIDB4MGMsIDB4NzksIDB4ODIsIDB4NDksIDB4MDksIDB4MDUsIDB4MzEsIDB4MDksIDB4MDYsIDB4MDksIDB4MGUsCi0weDY5LCAweDRlLCAweGMwLCAweDQ2LCAweDAyLCAweDk2LCAweDY5LCAweDQ4LCAweDQzLCAweDZhLCAweGMwLCAweDQ2LAotMHgwMSwgMHg5MywgMHg4MywgMHg2YSwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MywgMHhjMiwgMHgxZCwgMHgxMSwgMHgzMiwKLTB4ODAsIDB4NjksIDB4MDAsIDB4MDMsIDB4MDAsIDB4MGIsIDB4OTIsIDB4NjgsIDB4YjMsIDB4MDcsIDB4MWEsIDB4NDMsCi0weDEyLCAweDY4LCAweDkwLCAweDQyLCAweDAxLCAweGQxLCAweDAxLCAweDIwLAotMHgwZCwgMHhlMCwgMHg5MCwgMHg0MiwgMHgwNSwgMHhkOSwgMHgwMCwgMHg5YiwgMHgxOCwgMHgxYSwgMHgwMSwgMHg5YiwKLTB4ZDIsIDB4MWEsIDB4ODIsIDB4MTgsIDB4MDAsIDB4ZTAsIDB4MTIsIDB4MWEsIDB4MDEsIDB4MjAsIDB4MDksIDB4MDEsCi0weDkxLCAweDQyLCAweDAwLCAweGQzLCAweDAwLCAweDIwLCAweDAxLCAweDI4LCAweDY1LCAweGQxLCAweDUxLCAweDQ5LAotMHgyMCwgMHg2OSwgMHgwMCwgMHgyOCwgMHg2MiwgMHhkMCwgMHgwNSwgMHg5OSwgMHg0OCwgMHg2OSwgMHgwMSwgMHgzMCwKLTB4NDgsIDB4NjEsIDB4MDIsIDB4MjAsIDB4MjEsIDB4NmEsIDB4YzAsIDB4NDYsIDB4MDgsIDB4NjAsIDB4MDAsIDB4ZjAsCi0weGE3LCAweGZjLCAweDc4LCAweDYzLCAweGJlLCAweDYwLCAweDQ5LCAweDQ5LCAweDIyLCAweDZhLCAweGEzLCAweDZiLAotMHhkMywgMHgxOCwgMHg2NiwgMHg2YiwgMHhiMywgMHg0MiwgMHgwMCwgMHhkOSwgMHgyMiwgMHg2YiwgMHhjMCwgMHg0NiwKLTB4YmEsIDB4NjIsIDB4YmEsIDB4NmEsIDB4MGMsIDB4MzIsIDB4ZmEsIDB4NjIsIDB4MDAsIDB4MjIsIDB4ZmEsIDB4NjEsCi0weDAzLCAweGFhLCAweDUyLCAweDg4LCAweGQyLCAweDA5LCAweDAzLCAweGQzLCAweDAxLCAweDIyLCAweDAwLCAweGUwLAotMHg3YiwgMHhlMCwgMHgwMCwgMHhlMCwgMHgwMCwgMHgyMiwgMHg3YSwgMHg2MCwgMHg3YSwgMHg2OCwgMHhjMCwgMHg0NiwKLTB4MDIsIDB4NjAsIDB4NzgsIDB4OGEsIDB4NDEsIDB4NGUsIDB4NjAsIDB4MjgsIDB4MDQsIDB4ZGMsIDB4YjAsIDB4ODMsCi0weDc4LCAweDhhLCAweGMwLCAweDQ2LCAweGYwLCAweDgzLCAweDA4LCAweGUwLCAweDYwLCAweDIwLCAweGIwLCAweDgzLAotMHg3OSwgMHg4YSwgMHhmOCwgMHg2YSwgMHg0MiwgMHgxOCwgMHg2MywgMHg2YiwgMHg5YSwgMHg0MiwgMHgwMywgMHhkOCwKLTB4ZjEsIDB4ODMsIDB4MDAsIDB4MjIsIDB4M2EsIDB4NjMsIDB4MDUsIDB4ZTAsIDB4MjEsIDB4NmIsIDB4YzAsIDB4NDYsCi0weDM5LCAweDYzLCAweDYxLCAweDZiLCAweDA4LCAweDFhLCAweGYwLCAweDgzLCAweDJkLCAweDQ5LCAweDc4LCAweDZiLAotMHg0MiwgMHg2OCwgMHhjMCwgMHg0NiwgMHhiYSwgMHg2MCwgMHg4MiwgMHg2OCwgMHhjMCwgMHg0NiwgMHhmYSwgMHg2MCwKLTB4MDIsIDB4NjksIDB4YzAsIDB4NDYsIDB4N2EsIDB4NjEsIDB4NDAsIDB4NjksIDB4YzAsIDB4NDYsIDB4YjgsIDB4NjEsCi0weDJlLCAweDRiLCAweGM4LCAweDE4LCAweDA0LCAweDkwLCAweDAwLCAweGYwLCAweDM3LCAweGY5LCAweDA0LCAweDk4LAotMHgwMCwgMHhmMCwgMHg4OCwgMHhmOCwgMHgwMCwgMHhmMCwgMHhmNiwgMHhmYSwgMHg3OCwgMHg4YSwgMHhmMSwgMHg4YiwKLTB4ODgsIDB4NDIsIDB4MDQsIDB4ZDEsIDB4ZjksIDB4NmEsIDB4MDgsIDB4MTgsIDB4MDQsIDB4ZTAsIDB4MzgsIDB4ZTAsCi0weDMyLCAweGUwLCAweDNhLCAweDZiLCAweDEwLCAweDE4LCAweDQwLCAweDFhLCAweDgxLCAweDA3LCAweDAyLCAweGQwLAotMHg4MCwgMHgwOCwgMHg4MCwgMHgwMCwgMHgwNCwgMHgzMCwgMHg2MSwgMHg2YiwgMHgwOSwgMHgxYSwgMHhhMiwgMHg2YiwKLTB4OTEsIDB4NDIsIDB4MDAsIDB4ZDIsIDB4MjAsIDB4NmIsIDB4YzAsIDB4NDYsIDB4MjAsIDB4NjIsIDB4ZTgsIDB4N2IsCi0weDAwLCAweDI4LCAweDA4LCAweGQwLCAweDAwLCAweDIyLCAweGVhLCAweDczLCAweDA1LCAweDk5LCAweDQ4LCAweDY5LAotMHgwMSwgMHgzOCwgMHg0OCwgMHg2MSwgMHg3OCwgMHg2YiwgMHgwMCwgMHhmMCwgMHg3MywgMHhmYSwgMHgxOCwgMHg0OCwKLTB4ODAsIDB4NmEsIDB4ODAsIDB4MDYsIDB4ODAsIDB4MGUsIDB4MDEsIDB4MjgsIDB4MGEsIDB4ZDEsIDB4MjAsIDB4NmEsCi0weDAwLCAweDAzLCAweDAwLCAweDBiLCAweDBiLCAweDRjLCAweGExLCAweDZhLCAweDg4LCAweDQyLCAweDAzLCAweGQwLAotMHgwNiwgMHhiMCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMSwgMHgyMCwgMHg0MCwgMHgwNCwKLTB4MDgsIDB4NDksIDB4YzAsIDB4NDYsIDB4MDgsIDB4NjAsIDB4MDYsIDB4ZTAsIDB4ZTAsIDB4NjgsIDB4MDAsIDB4MjgsCi0weDAxLCAweGQwLCAweDAwLCAweGYwLCAweGI1LCAweGZhLCAweDAxLCAweDIwLCAweGE4LCAweDczLCAweGVkLCAweGU3LAotMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHgwMCwgMHg0MCwgMHgxNCwgMHg0MCwgMHhhNCwgMHgyYSwgMHgwMCwgMHg4MCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MjgsIDB4MWEsIDB4MDAsIDB4ODAsIDB4NTUsIDB4NTUsIDB4NTUsIDB4NTUsCi0weGE4LCAweDAzLCAweDAwLCAweDgwLCAweDY4LCAweDFhLCAweDAwLCAweDgwLCAweGM0LCAweDBiLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwgMHg4MCwgMHhiNSwgMHgwNywgMHgxYywgMHg3OCwgMHg2YSwgMHg0MCwgMHg4OSwKLTB4ZmYsIDB4MjEsIDB4MDEsIDB4MzEsIDB4MDEsIDB4NDAsIDB4MTAsIDB4NDgsIDB4MDIsIDB4ZDEsIDB4ODEsIDB4NmMsCi0weDAxLCAweDMxLCAweDgxLCAweDY0LCAweDc5LCAweDZhLCAweDQ5LCAweDg5LCAweDQ5LCAweDBiLCAweDAyLCAweGQyLAotMHg0MSwgMHg2YywgMHgwMSwgMHgzMSwgMHg0MSwgMHg2NCwgMHgwYiwgMHg0OCwgMHg0MSwgMHg2YSwgMHgwMSwgMHgzMSwKLTB4NDEsIDB4NjIsIDB4NzgsIDB4NmEsIDB4MzksIDB4NmIsIDB4YzAsIDB4NDYsIDB4NDgsIDB4NjIsIDB4MzgsIDB4NmIsCi0weDAwLCAweGYwLCAweGY4LCAweGZiLCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAweGIzLCAweGY4LCAweDAxLCAweDIwLAotMHgwNCwgMHg0OSwgMHhjMCwgMHg0NiwgMHhjOCwgMHg3MywgMHg4MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4YTQsIDB4MmEsIDB4MDAsIDB4ODAsIDB4YTAsIDB4ODIsIDB4MjAsIDB4NDAsIDB4MTgsIDB4MWEsIDB4MDAsIDB4ODAsCi0weGY4LCAweGI1LCAweDA3LCAweDFjLCAweDAwLCAweDIyLCAweGY5LCAweDFkLCAweDYxLCAweDMxLCAweDBkLCAweDFjLAotMHg3OCwgMHg2YSwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MCwgMHg0MCwgMHg4OSwKLTB4MDMsIDB4MGMsIDB4MDEsIDB4ZDIsIDB4NDAsIDB4MGEsIDB4MDMsIDB4ZDIsIDB4MzgsIDB4MWMsIDB4ZmYsIDB4ZjcsCi0weGMxLCAweGZmLCAweDY3LCAweGUwLCAweDM1LCAweDQ4LCAweGMwLCAweDZiLCAweDAwLCAweDA5LCAweDFmLCAweGQzLAotMHgwOCwgMHg3OCwgMHg0MCwgMHgwOCwgMHgxYywgMHhkMiwgMHgwMCwgMHgyMCwgMHg0MywgMHgwMCwgMHhjYywgMHg1YSwKLTB4MzEsIDB4NGUsIDB4OWUsIDB4MTksIDB4MzMsIDB4MjMsIDB4OWIsIDB4MDEsIDB4ZjMsIDB4MTgsIDB4MWIsIDB4ODgsCi0weDljLCAweDQyLCAweDBlLCAweGQwLCAweGI4LCAweDY5LCAweDM5LCAweDZiLCAweGMwLCAweDQ2LCAweDg4LCAweDYxLAotMHhmOCwgMHg2OCwgMHgzOSwgMHg2YiwgMHhjMCwgMHg0NiwgMHhjOCwgMHg2MCwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwKLTB4MjcsIDB4ZjksIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4NzQsIDB4ZjgsIDB4NDYsIDB4ZTAsIDB4MDEsIDB4MzAsCi0weDAzLCAweDI4LCAweGUzLCAweGRiLCAweDAyLCAweDIwLCAweDQzLCAweDAwLCAweDVjLCAweDE4LCAweGU0LCAweDg4LAotMHgyMiwgMHg0ZSwgMHg5ZSwgMHgxOSwgMHgzMywgMHgyMywgMHg5YiwgMHgwMSwgMHhmMywgMHgxOCwgMHgxYiwgMHg4OCwKLTB4OWMsIDB4NDIsIDB4MDMsIDB4ZDEsIDB4MDEsIDB4MjMsIDB4MDEsIDB4MzgsIDB4ZDgsIDB4NDIsIDB4ZjAsIDB4ZGMsCi0weDAxLCAweDIzLCAweGQ4LCAweDQyLCAweGM0LCAweGQwLCAweDFiLCAweDRlLCAweDBiLCAweDIzLCAweDFiLCAweDAyLAotMHhmMCwgMHgxOCwgMHg0MCwgMHg2OSwgMHgwMCwgMHgyOCwgMHgyNCwgMHhkMCwgMHg3ZCwgMHg2MywgMHgwMCwgMHg5OCwKLTB4NDAsIDB4ODksIDB4MDAsIDB4MGMsIDB4MWYsIDB4ZDIsIDB4MDAsIDB4MjQsIDB4MmQsIDB4MjMsIDB4OWIsIDB4MDEsCi0weGYwLCAweDE4LCAweGMwLCAweDZiLCAweDM1LCAweDFjLCAweDAwLCAweDI4LCAweDE3LCAweGQwLCAweGZlLCAweDFkLAotMHgyZCwgMHgzNiwgMHhhMiwgMHgwMCwgMHg1MiwgMHgxOSwgMHgyZCwgMHgyMywgMHg5YiwgMHgwMSwgMHhkMiwgMHgxOCwKLTB4ZDIsIDB4NmIsIDB4MzgsIDB4MWMsIDB4MzEsIDB4MWMsIDB4MDIsIDB4ZjAsIDB4N2IsIDB4ZmMsIDB4MDEsIDB4MjgsCi0weDBlLCAweGQwLCAweDAxLCAweDM0LCAweGEwLCAweDAwLCAweDQwLCAweDE5LCAweDJkLCAweDIzLCAweDliLCAweDAxLAotMHhjMCwgMHgxOCwgMHhjMCwgMHg2YiwgMHgwMCwgMHgyOCwgMHhlYSwgMHhkMSwgMHgwMSwgMHhlMCwgMHgwMSwgMHgyYSwKLTB4MDIsIDB4ZDAsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4MDgsIDB4ZjgsIDB4ZjgsIDB4YmMsIDB4MDgsIDB4YmMsCi0weDE4LCAweDQ3LCAweDAwLCAweDAwLCAweGU4LCAweDFhLCAweDAwLCAweDgwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLAotMHg4MCwgMHhiNSwgMHgwNywgMHgxYywgMHhiOCwgMHg2OSwgMHgzOSwgMHg2YiwgMHhjMCwgMHg0NiwgMHg4OCwgMHg2MSwKLTB4ZjgsIDB4NjgsIDB4MzksIDB4NmIsIDB4YzAsIDB4NDYsIDB4YzgsIDB4NjAsIDB4NzgsIDB4NmEsIDB4NDAsIDB4ODksCi0weDAxLCAweDBjLCAweDBlLCAweGQyLCAweDQwLCAweDBhLCAweDBjLCAweGQzLCAweDM4LCAweDY4LCAweDQwLCAweDA4LAotMHgwMiwgMHhkMywgMHgzOCwgMHgxYywgMHgwMiwgMHhmMCwgMHgwYywgMHhmYywgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwKLTB4YmIsIDB4ZjgsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4MDgsIDB4ZjgsIDB4MDIsIDB4ZTAsIDB4MzgsIDB4MWMsCi0weGZmLCAweGY3LCAweDMwLCAweGZmLCAweDAxLCAweDIwLCAweDgwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHgwMSwgMHgyMSwgMHgwMCwgMHg2YiwgMHg0MCwgMHg2YSwgMHhjMCwgMHg0NiwgMHgwMSwgMHg2MCwgMHg3MCwgMHg0NywKLTB4YjAsIDB4YjQsIDB4YzEsIDB4MWQsIDB4MzksIDB4MzEsIDB4MDksIDB4OGIsIDB4ODksIDB4MDgsIDB4MDksIDB4MDQsCi0weDA5LCAweDBjLCAweDg0LCAweDZhLCAweGMyLCAweDFkLCAweDYxLCAweDMyLCAweDAwLCAweDIwLCAweDAwLCAweDI5LAotMHgwYywgMHhkZCwgMHg4NywgMHgwMCwgMHgzZCwgMHgxOSwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgyYiwgMHg0MywKLTB4MWIsIDB4NjgsIDB4YzAsIDB4NDYsIDB4ZDMsIDB4NTEsIDB4MDEsIDB4MzAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MGMsCi0weDg4LCAweDQyLCAweGYyLCAweGRiLCAweGIwLCAweGJjLCAweDcwLCAweDQ3LCAweGYwLCAweGI1LCAweGEwLCAweGIwLAotMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHhjMSwgMHgxZCwgMHgyMSwgMHgzMSwgMHgxOSwgMHg0MywgMHgwOSwgMHg2OCwKLTB4YzAsIDB4NDYsIDB4MGIsIDB4OTEsIDB4YzEsIDB4MWQsIDB4NTMsIDB4MzEsIDB4MTksIDB4NDMsIDB4MWYsIDB4OTEsCi0weDA5LCAweDY4LCAweDAxLCAweGFmLCAweGZhLCAweDFkLCAweDM5LCAweDMyLCAweDFlLCAweDkyLCAweDE3LCAweGFiLAotMHg1OSwgMHg4MCwgMHgzYSwgMHg0OSwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgwYSwgMHg2YSwgMHgxMywgMHg0MywKLTB4Y2MsIDB4MWQsIDB4MTEsIDB4MzQsIDB4ODksIDB4NjksIDB4MDksIDB4MDMsIDB4MDksIDB4MGIsIDB4MjIsIDB4NjksCi0weGU1LCAweDY4LCAweGMwLCAweDQ2LCAweDFkLCAweDk1LCAweGZjLCAweDFkLCAweDM5LCAweDM0LCAweDY0LCAweDhiLAotMHg2NCwgMHgwOSwgMHgwNSwgMHgzNCwgMHgyNCwgMHgwNiwgMHgyNCwgMHgwZSwgMHgxYywgMHg5NCwgMHg1NiwgMHgxYSwKLTB4MWIsIDB4OTYsIDB4MWMsIDB4OWMsIDB4MmUsIDB4NGEsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTIsIDB4MDEsIDB4MjYsCi0weDFkLCAweDlkLCAweDFhLCAweDY4LCAweDkxLCAweDQyLCAweDAxLCAweGQxLCAweDMyLCAweDFjLCAweDBiLCAweGUwLAotMHg5MSwgMHg0MiwgMHgwMywgMHhkOSwgMHg1MiwgMHgxYiwgMHgxYiwgMHg5ZSwgMHhiNSwgMHgxOCwgMHgwMCwgMHhlMCwKLTB4NTUsIDB4MWEsIDB4MDEsIDB4MjIsIDB4MjQsIDB4MDEsIDB4YWMsIDB4NDIsCi0weDAwLCAweGQzLCAweDAwLCAweDIyLCAweDAxLCAweDJhLCAweGU2LCAweGQxLCAweDkxLCAweDA3LCAweDAxLCAweDQzLAotMHgwOSwgMHg2OCwgMHhjMCwgMHg0NiwgMHgzOSwgMHg2MCwgMHg5MywgMHgwNywgMHgwMSwgMHgxZCwgMHgxOSwgMHg0MywKLTB4MDksIDB4NjgsIDB4YzAsIDB4NDYsIDB4NzksIDB4NjAsIDB4YzEsIDB4MWQsIDB4MDEsIDB4MzEsIDB4MTksIDB4NDMsCi0weDA5LCAweDY4LCAweGMwLCAweDQ2LCAweGI5LCAweDYwLCAweDFmLCAweDk5LCAweDA5LCAweDY4LCAweDFlLCAweDlhLAotMHhjMCwgMHg0NiwgMHg1MSwgMHg4MywgMHhjMSwgMHgxZCwgMHgxZCwgMHgzMSwgMHgxOSwgMHg0MywgMHgwOSwgMHg2OCwKLTB4YzAsIDB4NDYsIDB4MzgsIDB4NjMsIDB4NzksIDB4NjIsIDB4YzEsIDB4MWQsIDB4MTEsIDB4MzEsIDB4MTksIDB4NDMsCi0weDA5LCAweDY4LCAweGMwLCAweDQ2LCAweGI5LCAweDYxLCAweGMxLCAweDFkLCAweDA1LCAweDMxLCAweDE5LCAweDQzLAotMHgwOSwgMHg2OCwgMHhjMCwgMHg0NiwgMHhmOSwgMHg2MCwgMHhjMSwgMHgxZCwgMHgxNywgMHgzMSwgMHgxOSwgMHg0MywKLTB4MDksIDB4NjgsIDB4YzAsIDB4NDYsIDB4ZjksIDB4ODMsIDB4MGUsIDB4MzAsIDB4MTgsIDB4NDMsIDB4MDAsIDB4NjgsCi0weGMwLCAweDQ2LCAweGY4LCAweDgxLCAweDM4LCAweDY4LCAweDQwLCAweDA4LCAweDAyLCAweGQzLCAweDM4LCAweDFjLAotMHgwMiwgMHhmMCwgMHg1YywgMHhmYiwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHgwYiwgMHhmOCwgMHgzOCwgMHgxYywKLTB4ZmYsIDB4ZjcsIDB4NTgsIDB4ZmYsIDB4MjAsIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weGE4LCAweDAzLCAweDAwLCAweDgwLCAweDU1LCAweDU1LCAweDU1LCAweDU1LCAweGY4LCAweGI1LCAweDA3LCAweDFjLAotMHhmOCwgMHgxZCwgMHgzOSwgMHgzMCwgMHg0MSwgMHg4YiwgMHgzOSwgMHg0YSwgMHg5MSwgMHg0MiwgMHgwMCwgMHhkZCwKLTB4NDIsIDB4ODMsIDB4NDIsIDB4OGIsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTIsIDB4MDEsIDB4MjAsIDB4M2EsIDB4MWQsCi0weDA2LCAweGNhLCAweGJiLCAweDZhLCAweDAyLCAweGYwLCAweDBlLCAweGZmLCAweDMzLCAweDRhLCAweGMwLCAweDQ2LAotMHgwMCwgMHg5MiwgMHgzMywgMHg0ZSwgMHgzMCwgMHg2YSwgMHgzMywgMHg0YywgMHhlMSwgMHg2ZCwgMHg0MSwgMHgxOCwKLTB4MzgsIDB4NmIsIDB4YzMsIDB4MWQsIDB4MDUsIDB4MzMsIDB4MDEsIDB4MjAsIDB4NzIsIDB4NmEsIDB4MDIsIDB4ZjAsCi0weGZiLCAweGZlLCAweGUwLCAweDZkLCAweDE4LCAweDMwLCAweDAwLCAweDI1LCAweGIxLCAweDZhLCAweDgxLCAweDQyLAotMHgwMSwgMHhkOCwgMHhlNSwgMHg2NSwgMHgwMCwgMHhlMCwgMHhlMCwgMHg2NSwgMHgyZiwgMHgyMywgMHg5YiwgMHgwMSwKLTB4MjAsIDB4MWMsIDB4ZTEsIDB4NmQsIDB4ZTQsIDB4MTgsIDB4MjIsIDB4NjgsIDB4OTIsIDB4MDAsIDB4MjcsIDB4NGIsCi0weGMwLCAweDQ2LCAweDk5LCAweDUwLCAweDI2LCAweDQ4LCAweGMxLCAweDZiLCAweDRhLCAweDA4LCAweDA1LCAweGQzLAotMHg0OSwgMHgwOCwgMHg0OSwgMHgwMCwgMHhjMSwgMHg2MywgMHgwMSwgMHgyMCwgMHgwMSwgMHhmMCwgMHhkNiwgMHhmZiwKLTB4MjIsIDB4NGEsIDB4MWYsIDB4NDgsIDB4YzEsIDB4MWQsIDB4ODksIDB4MzEsIDB4MGIsIDB4NzgsIDB4MDAsIDB4MmIsCi0weDAyLCAweGQwLCAweDQ5LCAweDc4LCAweDAwLCAweDI5LCAweDAwLCAweGQxLCAweDFlLCAweDRhLCAweGMwLCAweDQ2LAotMHgwMCwgMHg5MiwgMHgyMCwgMHg2OCwgMHg4MCwgMHgwMCwgMHgxOSwgMHg0YiwgMHhjMywgMHgxOCwgMHgwNSwgMHhjZSwKLTB4YzEsIDB4MWQsIDB4MTEsIDB4MzEsIDB4MDEsIDB4MjAsIDB4MDIsIDB4ZjAsIDB4YzcsIDB4ZmUsIDB4MTQsIDB4NDgsCi0weDIxLCAweDY4LCAweDAxLCAweDMxLCAweDIxLCAweDYwLCAweDE3LCAweDI5LCAweDAwLCAweGQzLCAweDI1LCAweDYwLAotMHgzOSwgMHg2YiwgMHhjMCwgMHg0NiwgMHgwZCwgMHg2NSwgMHg3OSwgMHg2YSwgMHgzYSwgMHg2YiwgMHhjMCwgMHg0NiwKLTB4NTEsIDB4NjIsIDB4MzMsIDB4MjMsIDB4OWIsIDB4MDEsIDB4YzAsIDB4MTgsIDB4ODEsIDB4NjgsIDB4MDAsIDB4MjksCi0weDAzLCAweGQxLCAweDM5LCAweDZiLCAweGMwLCAweDQ2LCAweDgxLCAweDYwLCAweDA0LCAweGUwLCAweDM5LCAweDZiLAotMHhjMiwgMHg2OCwgMHhjMCwgMHg0NiwgMHgxMSwgMHg2NSwgMHgzOSwgMHg2YiwgMHhjMCwgMHg0NiwgMHhjMSwgMHg2MCwKLTB4ZjgsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4ZWEsIDB4MDUsIDB4MDAsIDB4MDAsCi0weDE4LCAweDAwLCAweDE0LCAweDAyLCAweDdjLCAweDI5LCAweDAwLCAweDgwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLAotMHg0NCwgMHg4MiwgMHgyMCwgMHg0MCwgMHhlOCwgMHgwZSwgMHgwMCwgMHg4MCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMiwKLTB4MDQsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjUsIDB4MTEsIDB4NGUsIDB4ZmYsIDB4MjUsIDB4MDEsIDB4MzUsCi0weDEwLCAweDRmLCAweGMwLCAweDQ2LCAweDM1LCAweDYwLCAweDc4LCAweDY5LCAweDAxLCAweDM4LCAweDc4LCAweDYxLAotMHhiYywgMHg2OCwgMHgwMCwgMHgyYywgMHgxMCwgMHhkMCwgMHgyMCwgMHg2ZCwgMHhjMCwgMHg0NiwgMHhiOCwgMHg2MCwKLTB4MjAsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4MjEsIDB4ZjgsIDB4MjAsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4MDQsIDB4ZmEsCi0weDA4LCAweDQ4LCAweDgwLCAweDZhLCAweDAwLCAweDBjLCAweDAwLCAweDA3LCAweGU5LCAweGQxLCAweGYwLCAweGJjLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwNSwgMHg0OCwgMHhjMSwgMHg3OSwgMHgwMSwgMHgzMSwgMHhjMSwgMHg3MSwKLTB4ZjcsIDB4ZTcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MjgsIDB4MWIsIDB4MDAsIDB4ODAsCi0weDAwLCAweDAwLCAweDEwLCAweDQwLCAweGEwLCAweDgyLCAweDIwLCAweDQwLAotMHgwMSwgMHgyMCwgMHg4MCwgMHgwMywgMHgwMSwgMHg0OSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg2MCwgMHg3MCwgMHg0NywKLTB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4OTAsIDB4YjUsIDB4MDcsIDB4MWMsIDB4MzgsIDB4NjgsIDB4YzAsIDB4MDgsCi0weDA5LCAweGQzLCAweDFkLCAweDQ4LCAweDAxLCAweDZhLCAweDAxLCAweDM5LCAweDAxLCAweDYyLCAweDIwLCAweDMwLAotMHgwMCwgMHg3OSwgMHgwMCwgMHgyOCwgMHgwMSwgMHhkMCwgMHhmZSwgMHhmNywgMHhlOSwgMHhmZCwgMHgwMSwgMHgyMywKLTB4OWIsIDB4MDcsIDB4ZjgsIDB4MWQsIDB4MWQsIDB4MzAsIDB4MTgsIDB4NDMsIDB4MDAsIDB4NjgsIDB4MTYsIDB4NGMsCi0weDYxLCAweDZhLCAweDgxLCAweDQyLCAweDIxLCAweGQxLCAweDAxLCAweDFjLCAweDE5LCAweDQzLCAweDA5LCAweDY4LAotMHgwOSwgMHgwNCwgMHgwOSwgMHgwYywgMHgwMSwgMHgyOSwgMHgxYSwgMHhkMSwgMHgwMCwgMHhmMCwgMHgyMiwgMHhmOCwKLTB4NjAsIDB4NjIsIDB4NjAsIDB4NmEsIDB4MjEsIDB4NmEsIDB4ODgsIDB4NDIsIDB4MDUsIDB4ZDAsIDB4MDEsIDB4MjEsCi0weDg5LCAweDA3LCAweDAxLCAweDQzLCAweDA5LCAweDY4LCAweDA5LCAweDA0LCAweGYyLCAweGQwLCAweDUxLCAweDIxLAotMHg4OSwgMHgwMywgMHg2MiwgMHg2YSwgMHgyMywgMHg2YiwgMHg5YSwgMHg0MiwgMHgwMiwgMHhkMSwgMHg2MCwgMHg2YiwKLTB4YTIsIDB4NmIsIDB4ODAsIDB4MWEsIDB4MDQsIDB4MzgsIDB4YzgsIDB4NjAsIDB4OTAsIDB4YmMsIDB4MDgsIDB4YmMsCi0weDE4LCAweDQ3LCAweDAwLCAweDIwLCAweDc5LCAweDZhLCAweGMwLCAweDQ2LCAweDA4LCAweDYwLCAweGY3LCAweGU3LAotMHg2YywgMHgwNiwgMHgwMCwgMHg4MCwgMHhlOCwgMHgxYSwgMHgwMCwgMHg4MCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywKLTB4YzEsIDB4MWQsIDB4MDEsIDB4MzEsIDB4MTksIDB4NDMsIDB4MDksIDB4NjgsIDB4MDksIDB4MDQsIDB4MDksIDB4MGMsCi0weDA4LCAweDE4LCAweDBkLCAweDMwLCAweDgxLCAweDA3LCAweDAyLCAweGQwLCAweDgwLCAweDA4LCAweDgwLCAweDAwLAotMHgwNCwgMHgzMCwgMHgwNCwgMHg0OSwgMHg4YSwgMHg2YiwgMHgxMiwgMHgxOCwgMHg0YiwgMHg2YiwgMHg5YSwgMHg0MiwKLTB4MDAsIDB4ZDksIDB4MDgsIDB4NmIsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4MWEsIDB4MDAsIDB4ODAsCi0weDAwLCAweGI1LCAweDA0LCAweDQ4LCAweGMwLCAweDY4LCAweDEwLCAweDI4LCAweDAxLCAweGQzLCAweDAwLCAweGYwLAotMHgwNSwgMHhmOCwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHhlOCwgMHgxYSwgMHgwMCwgMHg4MCwKLTB4ODgsIDB4YjUsIDB4MGMsIDB4NGYsIDB4MzgsIDB4NzksIDB4MDAsIDB4MjgsIDB4MTEsIDB4ZDEsIDB4MGIsIDB4NDksCi0weDEwLCAweDIwLCAweDAyLCAweGYwLCAweGY1LCAweGZkLCAweDAwLCAweDI4LCAweDBiLCAweGQwLCAweDAxLCAweDIwLAotMHgzOCwgMHg3MSwgMHgwOCwgMHg0YSwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MiwgMHgwNywgMHg0OCwgMHg0MiwgMHg2OCwKLTB4MDcsIDB4NGIsIDB4MDEsIDB4NjgsIDB4MDAsIDB4MjAsIDB4MDIsIDB4ZjAsIDB4ZGYsIDB4ZmQsIDB4ODgsIDB4YmMsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweGY4LCAweDFhLCAweDAwLCAweDgwLCAweGY1LCAweDJjLCAweGZmLCAweGZmLAotMHgxMCwgMHgwMCwgMHgzNSwgMHgwMiwgMHg3YywgMHgyOSwgMHgwMCwgMHg4MCwgMHg0NCwgMHg4MCwgMHgyMCwgMHg0MCwKLTB4OTAsIDB4YjUsIDB4MDEsIDB4MjAsIDB4NDAsIDB4MDIsIDB4MTAsIDB4NDksIDB4YzAsIDB4NDYsIDB4MDgsIDB4NjAsCi0weDBmLCAweDRmLCAweDEwLCAweDIxLCAweGY4LCAweDFkLCAweDNkLCAweDMwLCAweDAyLCAweGYwLCAweDRjLCAweGZjLAotMHgxOSwgMHgyMywgMHhkYiwgMHgwMSwgMHhmYywgMHgxOCwgMHhlMCwgMHg2OCwgMHgwMCwgMHgyOCwgMHgwMSwgMHhkMCwKLTB4MDAsIDB4ZjAsIDB4MTQsIDB4ZjgsIDB4MDAsIDB4MjAsIDB4YzksIDB4MjMsIDB4MWIsIDB4MDEsIDB4ZjksIDB4MTgsCi0weDA4LCAweDcxLCAweGUwLCAweDY4LCAweDEwLCAweDI4LCAweDA0LCAweGQzLCAweDAxLCAweDIwLCAweGJiLCAweDIzLAotMHgxYiwgMHgwMSwgMHhmOSwgMHgxOCwgMHg0OCwgMHg3MywgMHg5MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4ZjgsIDB4YjUsIDB4MzcsIDB4NDgsCi0weDE5LCAweDIzLCAweGRiLCAweDAxLCAweGMxLCAweDE4LCAweGM5LCAweDY4LCAweDM1LCAweDRkLCAweDEwLCAweDI5LAotMHgwMCwgMHhkOSwgMHgxMCwgMHgyMSwgMHg2OSwgMHg2MiwgMHgzMiwgMHg0OCwgMHhjMSwgMHg2YywgMHgwMCwgMHg2ZSwKLTB4ODEsIDB4NDIsIDB4MDcsIDB4ZDksIDB4MDgsIDB4MWEsIDB4MDcsIDB4MDksIDB4MDAsIDB4MjQsIDB4NjgsIDB4NmEsCi0weGI4LCAweDQyLCAweDEyLCAweGQyLCAweDA3LCAweDFjLCAweDEwLCAweGUwLCAweDgxLCAweDQyLCAweDJhLCAweGQyLAotMHgyYywgMHg0YSwgMHg1MiwgMHg2YiwgMHgxMCwgMHgxYSwgMHgwNywgMHgwOSwgMHg2OCwgMHg2YSwgMHhiOCwgMHg0MiwKLTB4MDUsIDB4ZDksIDB4MGMsIDB4MDksIDB4MzksIDB4MTksIDB4ODgsIDB4NDIsIDB4MDMsIDB4ZDIsIDB4YzQsIDB4MWIsCi0weDAxLCAweGUwLCAweDAwLCAweDI0LCAweDA3LCAweDFjLCAweDNlLCAweDE5LCAweDMwLCAweDAxLCAweDI1LCAweDQ5LAotMHgwMiwgMHhmMCwgMHg4NCwgMHhmZCwgMHgwMCwgMHgyOCwgMHgzZCwgMHhkMCwgMHgyMywgMHg0OCwgMHgwMCwgMHgyYywKLTB4MWEsIDB4ZDEsIDB4MWUsIDB4NDksIDB4M2EsIDB4MDEsIDB4NmYsIDB4NjIsIDB4MDksIDB4NmUsIDB4OGMsIDB4MTgsCi0weDFkLCAweDRkLCAweDZiLCAweDZiLCAweGEzLCAweDQyLCAweDAwLCAweGQ4LCAweGU0LCAweDFhLCAweDFlLCAweDRiLAotMHgxYSwgMHg0MywgMHgwMCwgMHg5MiwgMHhlYSwgMHg2YSwgMHg1MSwgMHgxOCwKLTB4MmEsIDB4NmIsIDB4MDMsIDB4MWMsIDB4MjAsIDB4ZTAsIDB4MWIsIDB4NDgsIDB4MDEsIDB4NmIsIDB4MDEsIDB4MzEsCi0weDAxLCAweDYzLCAweDAwLCAweDIwLCAweDY4LCAweDYyLCAweGY4LCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHgxMCwgMHg0OSwgMHgyNCwgMHgwMSwgMHgzZiwgMHgwMSwgMHgxMSwgMHgyMiwgMHg1MiwgMHgwNSwgMHgzYSwgMHg0MywKLTB4NmUsIDB4NjIsIDB4MDAsIDB4OTIsIDB4MGUsIDB4NGQsIDB4ZWEsIDB4NmEsIDB4MDksIDB4NmUsIDB4NTEsIDB4MTgsCi0weDAzLCAweDFjLCAweDA2LCAweDFjLCAweDAwLCAweDIwLCAweDJhLCAweDZiLCAweDAyLCAweGYwLCAweDRhLCAweGZkLAotMHgwYywgMHg0YSwgMHgyMiwgMHg0MywgMHgwMCwgMHg5MiwgMHhiYiwgMHgxOSwgMHhlOSwgMHg2YSwgMHgyYSwgMHg2YiwKLTB4MDAsIDB4MjAsIDB4MDIsIDB4ZjAsIDB4NDEsIDB4ZmQsIDB4MDMsIDB4NDgsIDB4YzAsIDB4NDYsIDB4MDQsIDB4NjYsCi0weDAwLCAweGYwLCAweDEwLCAweGY4LCAweDAxLCAweDIwLCAweGRhLCAweGU3LCAweDY4LCAweDBlLCAweDAwLCAweDgwLAotMHgyOCwgMHgxYiwgMHgwMCwgMHg4MCwgMHg3YywgMHgyOSwgMHgwMCwgMHg4MCwgMHg1ZCwgMHgyZSwgMHhmZiwgMHhmZiwKLTB4NDQsIDB4ODAsIDB4MjAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MzYsIDB4MDIsIDB4YTAsIDB4ODIsIDB4MjAsIDB4NDAsCi0weDA0LCAweDQ4LCAweDAxLCAweDZlLCAweDA0LCAweDRhLCAweDgwLCAweDMwLCAweGQxLCAweDYwLCAweDAyLCAweDIzLAotMHhjMSwgMHg2YiwgMHgxOSwgMHg0MywgMHhjMSwgMHg2MywgMHg3MCwgMHg0NywgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwKLTB4OTAsIDB4ZWUsIDB4MjAsIDB4NDAsIDB4ZjAsIDB4YjUsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MjAsIDB4ODAsIDB4MDIsCi0weDFjLCAweDQ5LCAweGMwLCAweDQ2LCAweDA4LCAweDYwLCAweDAwLCAweDI3LCAweDFiLCAweDRlLCAweDMzLCAweDIzLAotMHg5YiwgMHgwMSwgMHhmNSwgMHgxOCwgMHg2OCwgMHg2YSwgMHgwMCwgMHgyOCwgMHgxZCwgMHhkOSwgMHgxOSwgMHg0YywKLTB4NjgsIDB4NDYsIDB4MTAsIDB4MjEsIDB4MDIsIDB4ZjAsIDB4OTAsIDB4ZmIsIDB4NjgsIDB4NDYsIDB4MDAsIDB4ZjAsCi0weDMzLCAweGY4LCAweDAwLCAweDI4LCAweDA0LCAweGQwLCAweDE1LCAweDQ5LCAweDQ4LCAweDY5LCAweDAxLCAweDMwLAotMHg0OCwgMHg2MSwgMHgwYSwgMHhlMCwgMHgxMywgMHg0OSwgMHg2MCwgMHg3YiwgMHgwMSwgMHgzMCwgMHg2MCwgMHg3MywKLTB4ODgsIDB4NzksIDB4MDEsIDB4MzAsIDB4ODgsIDB4NzEsIDB4MTEsIDB4NDgsIDB4MDAsIDB4NjgsIDB4MDIsIDB4ZjAsCi0weDY1LCAweGY5LCAweDY4LCAweDZhLCAweDAxLCAweDM3LCAweGI4LCAweDQyLCAweGUyLCAweGQ4LCAweGJiLCAweDIzLAotMHgxYiwgMHgwMSwgMHhmMCwgMHgxOCwgMHg4MSwgMHg3YiwgMHgwMCwgMHgyOSwgMHgwMywgMHhkMCwgMHgwMCwgMHgyMSwKLTB4ODEsIDB4NzMsIDB4ZmYsIDB4ZjcsIDB4MDUsIDB4ZmIsIDB4ZmYsIDB4ZjcsIDB4ZTMsIDB4ZmUsIDB4MDQsIDB4YjAsCi0weGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLAotMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHhiMCwgMHg4MiwgMHgyMCwgMHg0MCwgMHgwOCwgMHg4MywgMHgyMCwgMHg0MCwKLTB4YTAsIDB4ODIsIDB4MjAsIDB4NDAsIDB4NTgsIDB4MDQsIDB4MDAsIDB4ODAsIDB4OTAsIDB4YjQsIDB4MTcsIDB4NGYsCi0weDE5LCAweDIzLCAweGRiLCAweDAxLCAweGY5LCAweDE4LCAweDAwLCAweDIyLCAweGNiLCAweDY4LCAweDAwLCAweDJiLAotMHgyMywgMHhkMCwgMHgwMSwgMHgzYiwgMHhjYiwgMHg2MCwgMHgzMywgMHgyMywgMHg5YiwgMHgwMSwgMHhmZiwgMHgxOCwKLTB4YmIsIDB4NjksIDB4MWMsIDB4NmQsIDB4YzAsIDB4NDYsIDB4YmMsIDB4NjEsIDB4MDQsIDB4NjgsIDB4YzAsIDB4NDYsCi0weDVjLCAweDYwLCAweDQ0LCAweDY4LCAweGMwLCAweDQ2LCAweDljLCAweDYwLCAweDg0LCAweDY4LCAweGMwLCAweDQ2LAotMHgxYywgMHg2MSwgMHhjMCwgMHg2OCwgMHhjMCwgMHg0NiwgMHg1OCwgMHg2MSwgMHgxYSwgMHg2NSwgMHgwOCwgMHg2OSwKLTB4NDIsIDB4MWMsIDB4MGEsIDB4NjEsIDB4MDAsIDB4MjgsIDB4MDMsIDB4ZDAsIDB4MzgsIDB4NmEsIDB4YzAsIDB4NDYsCi0weDAzLCAweDY1LCAweDAwLCAweGUwLCAweGZiLCAweDYxLCAweDNiLCAweDYyLCAweDE4LCAweDFjLCAweDkwLCAweGJjLAotMHg3MCwgMHg0NywgMHgxMCwgMHgxYywgMHhmYiwgMHhlNywgMHgwMCwgMHgwMCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwKLTB4MGEsIDB4NGEsIDB4MzMsIDB4MjMsIDB4OWIsIDB4MDEsIDB4ZDEsIDB4MTgsIDB4YzgsIDB4NjksIDB4MTksIDB4MjMsCi0weGRiLCAweDAxLCAweGQyLCAweDE4LCAweDEzLCAweDY5LCAweDAwLCAweDJiLCAweDA2LCAweGQwLCAweDAxLCAweDNiLAotMHgxMywgMHg2MSwgMHhjYSwgMHg2OSwgMHgxMiwgMHg2ZCwgMHhjMCwgMHg0NiwgMHhjYSwgMHg2MSwgMHg3MCwgMHg0NywKLTB4MDAsIDB4MjEsIDB4MTEsIDB4NjEsIDB4ZmIsIDB4ZTcsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsCi0weDA2LCAweDRhLCAweDExLCAweDY5LCAweDRiLCAweDFjLCAweDEzLCAweDYxLCAweDQwLCAweDMyLCAweDAwLCAweDI5LAotMHgwMSwgMHhkMCwgMHhkMSwgMHg2OSwgMHgwMCwgMHhlMCwgMHgwMCwgMHgyMSwgMHgwMSwgMHg2NSwgMHhkMCwgMHg2MSwKLTB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4MWEsIDB4MDAsIDB4ODAsIDB4MDYsIDB4NGEsIDB4ZDEsIDB4NjgsCi0weDRiLCAweDFjLCAweGQzLCAweDYwLCAweDQwLCAweDMyLCAweDAwLCAweDI5LCAweDAxLCAweGQwLCAweDkxLCAweDY5LAotMHgwMCwgMHhlMCwgMHgwMCwgMHgyMSwgMHgwMSwgMHg2NSwgMHg5MCwgMHg2MSwgMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwKLTB4ZTgsIDB4MWEsIDB4MDAsIDB4ODAsIDB4OTAsIDB4YjQsIDB4MDAsIDB4MjEsCi0weDBmLCAweDRhLCAweDk3LCAweDg5LCAweDkyLCAweDZhLCAweDRiLCAweDAwLCAweDFiLCAweDE4LCAweDliLCAweDhhLAotMHgwMCwgMHgyYiwgMHgxMiwgMHhkMCwgMHhiYiwgMHg0MiwgMHgxMCwgMHhkYywgMHgxYywgMHgxYywgMHg1OCwgMHgyMywKLTB4NjMsIDB4NDMsIDB4ZDMsIDB4MTgsIDB4ZGMsIDB4MWYsIDB4NDksIDB4M2MsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsCi0weDIzLCAweDQzLCAweDFiLCAweDY4LCAweDFiLCAweDA2LCAweDFiLCAweDBlLCAweDAzLCAweDJiLCAweDAyLCAweGQwLAotMHgwMCwgMHgyMCwgMHg5MCwgMHhiYywgMHg3MCwgMHg0NywgMHgwMSwgMHgzMSwgMHgwNCwgMHgyOSwgMHhlNCwgMHhkMywKLTB4MDEsIDB4MjAsIDB4ZjgsIDB4ZTcsIDB4NGMsIDB4MmEsIDB4MDAsIDB4ODAsIDB4ZjcsIDB4YjUsIDB4ODYsIDB4YjAsCi0weDNkLCAweDRhLCAweDA3LCAweDFjLCAweGQxLCAweDY5LCAweDhmLCAweDQwLCAweDAzLCAweDFjLCAweDE0LCAweDZhLAotMHhlMywgMHg0MCwgMHg1ZiwgMHg0MCwgMHgwNywgMHg5ZSwgMHg4ZSwgMHg0MCwgMHg3NywgMHg0MCwgMHhjZiwgMHg0MCwKLTB4OTQsIDB4NjksIDB4YzAsIDB4NDYsIDB4MDUsIDB4OTQsIDB4MDMsIDB4MWMsIDB4YTMsIDB4NDAsIDB4MDAsIDB4MjUsCi0weDE0LCAweDY5LCAweGMwLCAweDQ2LCAweDA0LCAweDk0LCAweDAwLCAweDJjLCAweDVkLCAweGQ5LCAweDFjLCAweDFjLAotMHgzMiwgMHg0ZSwgMHgyNiwgMHg0MywgMHg5NCwgMHg2OSwgMHhlNiwgMHg0MCwgMHgzMywgMHgxYywgMHgwMywgMHg5NiwKLTB4NTMsIDB4NmEsIDB4YzAsIDB4NDYsIDB4MDIsIDB4OTMsIDB4ZDIsIDB4NmEsIDB4YzAsIDB4NDYsIDB4MDEsIDB4OTIsCi0weGJiLCAweDAwLCAweDAyLCAweDlhLCAweGQyLCAweDU4LCAweDEzLCAweDFjLCAweDA1LCAweDljLCAweGUzLCAweDQwLAotMHgwMywgMHg5YywgMHhhMywgMHg0MiwgMHgzZSwgMHhkMSwgMHg4YSwgMHg0MCwgMHhjYSwgMHg0MCwgMHgxNCwgMHgxYywKLTB4NjMsIDB4MDAsIDB4MWIsIDB4MTksIDB4NWIsIDB4MDEsIDB4MDEsIDB4OWEsIDB4ZDIsIDB4MTgsIDB4MDEsIDB4MjMsCi0weDliLCAweDA3LCAweGQ2LCAweDFkLCAweDAxLCAweDM2LCAweDMzLCAweDQzLCAweDFiLCAweDY4LCAweDFiLCAweDA2LAotMHgxYiwgMHgwZSwgMHgwMywgMHgyYiwgMHgyYywgMHhkMSwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHhkNiwgMHgxZCwKLTB4NTEsIDB4MzYsIDB4MzMsIDB4NDMsIDB4MWIsIDB4NjgsIDB4MDcsIDB4OWUsIDB4MWUsIDB4NDAsIDB4MDAsIDB4OTYsCi0weDAxLCAweDIzLCAweDliLCAweDA3LCAweGQ2LCAweDFkLCAweDQ5LCAweDM2LCAweDMzLCAweDQzLCAweDFiLCAweDY4LAotMHg4MywgMHg0MiwgMHgxYiwgMHhkMSwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHhkNiwgMHgxZCwgMHg0ZCwgMHgzNiwKLTB4MzMsIDB4NDMsIDB4MWIsIDB4NjgsIDB4MDAsIDB4OWUsIDB4YjMsIDB4NDIsIDB4MTIsIDB4ZDEsIDB4MDEsIDB4MjMsCi0weDliLCAweDA3LCAweDFhLCAweDQzLCAweDEyLCAweDY4LCAweDEyLCAweDA0LCAweDEyLCAweDBjLCAweDA4LCAweDliLAotMHgzMiwgMHgyYiwgMHgwNCwgMHhkMSwgMHgwMiwgMHgyYSwgMHgwNywgMHhkMSwgMHgyMCwgMHgwNCwgMHgwMCwgMHgxNCwKLTB4MGYsIDB4ZTAsIDB4MDgsIDB4OWIsIDB4MzMsIDB4MmIsIDB4MDEsIDB4ZDEsIDB4MDEsIDB4MmEsIDB4ZjcsIDB4ZDAsCi0weDA0LCAweDlhLCAweDAxLCAweDM3LCAweDk3LCAweDQyLCAweDAwLCAweGQzLCAweDAwLCAweDI3LCAweDA0LCAweDlhLAotMHgwMSwgMHgzNSwgMHhhYSwgMHg0MiwgMHhhZSwgMHhkOCwgMHgwMCwgMHgyMCwgMHhjMCwgMHg0MywgMHgwOSwgMHhiMCwKLTB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4NGMsIDB4MmEsIDB4MDAsIDB4ODAsCi0weDAwLCAweDAwLCAweDAwLCAweDgwLCAweGYwLCAweGI1LCAweDI3LCAweDRkLCAweDY4LCAweDY5LCAweDAwLCAweDI4LAotMHgwNiwgMHhkMCwgMHgyNiwgMHg0OCwgMHgwMCwgMHg2OCwgMHgwMiwgMHhmMCwgMHgyYiwgMHhmOCwgMHhmMCwgMHhiYywKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MjMsIDB4NGMsIDB4MDAsIDB4MjYsIDB4YTAsIDB4NjgsIDB4MjMsIDB4NGYsCi0weDAwLCAweDI4LCAweDE2LCAweGQwLCAweDBmLCAweGUwLCAweDI4LCAweDZhLCAweDAyLCAweDI4LCAweDAyLCAweGQzLAotMHgwMSwgMHgyMCwgMHgzOCwgMHg3MSwgMHgwZiwgMHhlMCwgMHhhNiwgMHg2MCwgMHhmZCwgMHhmNywgMHhkZSwgMHhmZSwKLTB4MDAsIDB4MjgsIDB4ZWEsIDB4ZDEsIDB4MjgsIDB4NmEsIDB4MDIsIDB4MjgsIDB4MDEsIDB4ZDMsIDB4MDEsIDB4MjAsCi0weDM4LCAweDcxLCAweGU4LCAweDY4LCAweDAwLCAweDI4LCAweDAyLCAweGQwLCAweDM4LCAweDc5LCAweDAwLCAweDI4LAotMHhlOSwgMHhkMCwgMHg2OCwgMHg2OCwgMHgwMCwgMHgyOCwgMHgxYiwgMHhkMCwgMHgwMSwgMHgyMCwgMHhhMCwgMHg2MCwKLTB4ZmUsIDB4ZjcsIDB4YmMsIDB4ZmIsIDB4MDAsIDB4MjgsIDB4ZDYsIDB4ZDEsIDB4NjgsIDB4NjgsIDB4MDAsIDB4MjgsCi0weGY2LCAweGQxLCAweDExLCAweGUwLCAweDAwLCAweDI4LCAweGQwLCAweGQxLCAweDI4LCAweDZhLCAweDAyLCAweDI4LAotMHgwMiwgMHhkMywgMHgwMSwgMHgyMCwgMHgzOCwgMHg3MSwgMHhjYSwgMHhlNywgMHhhNiwgMHg2MCwgMHhmZCwgMHhmNywKLTB4YjksIDB4ZmUsIDB4MDAsIDB4MjgsIDB4YzUsIDB4ZDEsIDB4MjgsIDB4NmEsIDB4MDIsIDB4MjgsIDB4MDEsIDB4ZDMsCi0weDAxLCAweDIwLCAweDM4LCAweDcxLCAweGU4LCAweDY4LCAweDAwLCAweDI4LCAweGJkLCAweGQwLCAweDM4LCAweDc5LAotMHgwMCwgMHgyOCwgMHhlNywgMHhkMCwgMHhiOSwgMHhlNywgMHgwMCwgMHgwMCwgMHg2YywgMHgwNiwgMHgwMCwgMHg4MCwKLTB4NWMsIDB4MDQsIDB4MDAsIDB4ODAsIDB4NGMsIDB4MmEsIDB4MDAsIDB4ODAsIDB4OGMsIDB4MDYsIDB4MDAsIDB4ODAsCi0weDcwLCAweDQ3LCAweDAwLCAweDAwLCAweDcwLCAweDQ3LCAweDAwLCAweDAwLAotMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHg5MCwgMHhiNSwgMHg0MCwgMHgyMCwgMHgxZCwgMHg0OSwgMHhjMCwgMHg0NiwKLTB4MDgsIDB4NjAsIDB4MDEsIDB4ZjAsIDB4OWQsIDB4ZmMsIDB4MDMsIDB4MjMsIDB4MWIsIDB4MDcsIDB4NDEsIDB4NjgsCi0weDE5LCAweDQwLCAweDBjLCAweDBmLCAweDYxLCAweDAxLCAweDA5LCAweDFiLCAweDg5LCAweDAwLCAweDE4LCAweDRhLAotMHg4ZiwgMHgxOCwgMHgwMSwgMHgyMSwgMHgzOSwgMHg4MCwgMHg4MSwgMHg2YSwgMHhjMCwgMHg0NiwgMHg3OSwgMHg2NSwKLTB4NDEsIDB4NmEsIDB4YzAsIDB4NDYsIDB4NzksIDB4NjcsIDB4YjksIDB4NmMsIDB4ZmEsIDB4NmMsIDB4ODksIDB4MTgsCi0weGI5LCAweDY0LCAweDAwLCAweDIxLCAweGY5LCAweDY0LCAweGJhLCAweDZiLCAweDNiLCAweDZkLCAweGQyLCAweDE4LAotMHhiYSwgMHg2MywgMHgzOSwgMHg2NSwgMHg0MiwgMHg2YSwgMHgyMCwgMHgzMiwgMHg1MSwgMHg3MSwgMHg3OSwgMHg2ZCwKLTB4N2EsIDB4NmYsIDB4ZDIsIDB4NmQsIDB4YzAsIDB4NDYsIDB4MTEsIDB4NjAsIDB4ZmMsIDB4ZjcsIDB4Y2EsIDB4ZmYsCi0weDIwLCAweDAxLCAweDA5LCAweDQ5LCAweDQwLCAweDE4LCAweDE5LCAweDIzLCAweGRiLCAweDAxLCAweGMwLCAweDE4LAotMHg0MSwgMHg2YiwgMHgwMSwgMHgzOSwgMHg0MSwgMHg2MywgMHg3OCwgMHg2ZiwgMHgwMSwgMHhmMCwgMHhjNiwgMHhmYiwKLTB4OTAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsCi0weDVjLCAweDJiLCAweDAwLCAweDgwLCAweGEwLCAweDFjLCAweDAwLCAweDgwLCAweGYwLCAweGI1LCAweDQwLCAweDIwLAotMHgxMiwgMHg0OSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg2MCwgMHgwMSwgMHhmMCwgMHg1OSwgMHhmYywgMHgwNywgMHgxYywKLTB4NDAsIDB4NjgsIDB4MDMsIDB4MjMsIDB4MWIsIDB4MDcsIDB4MTgsIDB4NDAsIDB4MDYsIDB4MGYsIDB4NzAsIDB4MDEsCi0weDgwLCAweDFiLCAweDgwLCAweDAwLCAweDBjLCAweDQ5LCAweDQ0LCAweDE4LCAweGI4LCAweDZhLCAweGMwLCAweDQ2LAotMHg2MCwgMHg2NSwgMHg3OCwgMHg2YSwgMHhjMCwgMHg0NiwgMHg2MCwgMHg2NywgMHg4MCwgMHg2ZiwgMHgwNSwgMHgxZCwKLTB4ZTUsIDB4NjMsIDB4YjksIDB4NjksIDB4MjgsIDB4MWMsIDB4MDIsIDB4ZjAsIDB4ODksIDB4ZjksIDB4MzgsIDB4MWMsCi0weDIxLCAweDFjLCAweDMyLCAweDFjLCAweDJiLCAweDFjLCAweDAwLCAweGYwLCAweDIwLCAweGY4LCAweGYwLCAweGJjLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHg1YywgMHgyYiwgMHgwMCwgMHg4MCwKLTB4ZjAsIDB4YjUsIDB4NGIsIDB4NmYsIDB4OWIsIDB4NmYsIDB4MWYsIDB4MWQsIDB4Y2YsIDB4NjMsIDB4MDUsIDB4NjgsCi0weDAwLCAweDIzLCAweDg0LCAweDY5LCAweGE0LCAweDA4LCAweDA4LCAweGQwLCAweDljLCAweDAwLCAweDJlLCAweDU5LAotMHhjMCwgMHg0NiwgMHgzZSwgMHg1MSwgMHg4NCwgMHg2OSwgMHhhNCwgMHgwOCwgMHgwMSwgMHgzMywgMHg5YywgMHg0MiwKLTB4ZjYsIDB4ZDgsIDB4M2IsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4MDMsIDB4ZjgsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsCi0weDE4LCAweDQ3LCAweGZmLCAweGI1LCAweDgxLCAweGIwLCAweDA0LCAweDFjLCAweDFkLCAweDFjLCAweDBmLCAweDFjLAotMHg0NiwgMHg0OCwgMHgwMSwgMHg2OSwgMHgwMSwgMHgzMSwgMHgwMSwgMHg2MSwgMHhmOSwgMHgxZCwgMHg1MSwgMHgzMSwKLTB4YmQsIDB4NjUsIDB4MDAsIDB4OTEsIDB4MjAsIDB4MWMsIDB4ZmQsIDB4ZjcsIDB4NWQsIDB4ZmMsIDB4ZjgsIDB4NmQsCi0weDQwLCAweDA5LCAweDM2LCAweGQyLCAweGI4LCAweDZkLCAweDA2LCAweDdiLCAweDQzLCAweDdiLCAweDFiLCAweDAyLAotMHgxZSwgMHg0MywgMHgxNywgMHgyMSwgMHg0OSwgMHgwMiwgMHgwMSwgMHg3MywgMHgwYiwgMHgwYSwgMHg0MywgMHg3MywKLTB4MDAsIDB4OTksIDB4MjAsIDB4MWMsIDB4ZmQsIDB4ZjcsIDB4NGMsIDB4ZmMsIDB4YjgsIDB4NmQsIDB4YzAsIDB4NDYsCi0weDA2LCAweDczLCAweDMzLCAweDBhLCAweDQzLCAweDczLCAweGY4LCAweDZkLCAweDQwLCAweDA5LCAweDIwLCAweGQyLAotMHg2MCwgMHg2OCwgMHgwMSwgMHgwNCwgMHgwOSwgMHgwYywgMHgwMywgMHg5OCwgMHgwMSwgMHhmMCwgMHhjYywgMHhmYywKLTB4NjAsIDB4NjgsIDB4MzIsIDB4NGIsIDB4MTgsIDB4NDMsIDB4NjAsIDB4NjAsIDB4MjAsIDB4MWMsIDB4MDEsIDB4ZjAsCi0weDM1LCAweGZkLCAweDAwLCAweDI1LCAweDdkLCAweDYwLCAweGJkLCAweDYwLCAweDNkLCAweDY0LCAweDdkLCAweDY0LAotMHgyMCwgMHgxYywgMHhmYywgMHhmNywgMHgzMSwgMHhmZiwgMHgzOCwgMHg4OCwgMHg0MCwgMHgyMywgMHgxOCwgMHg0MywKLTB4MzgsIDB4ODAsIDB4N2QsIDB4NjIsIDB4MjksIDB4NDgsIDB4YzAsIDB4NDYsIDB4YjgsIDB4NjIsIDB4MzgsIDB4MWMsCi0weDAwLCAweGYwLCAweGEwLCAweGZiLCAweDQ0LCAweGUwLCAweDIwLCAweDY4LCAweDAxLCAweDIzLCAweDliLCAweDA3LAotMHgwOCwgMHgzOCwgMHgxOCwgMHg0MywgMHgwMCwgMHg2OCwgMHhjMCwgMHg0NiwgMHg3OCwgMHg2NCwgMHg2MCwgMHg2OCwKLTB4MDIsIDB4MDQsIDB4MTIsIDB4MGMsIDB4NzgsIDB4NmUsIDB4MDEsIDB4MjYsIDB4YzEsIDB4MWQsIDB4MGQsIDB4MzEsCi0weDhhLCAweDQyLCAweDAyLCAweGQyLCAweDNhLCAweDY0LCAweDA4LCAweDFjLCAweDBlLCAweGUwLCAweDQxLCAweDE5LAotMHg4OSwgMHg4OSwgMHhmMCwgMHgyMywgMHgxOSwgMHg0MCwgMHgwOSwgMHgwOSwgMHg4OSwgMHgwMCwgMHg0MCwgMHgxOCwKLTB4ZjgsIDB4NjAsIDB4ZjksIDB4NjEsIDB4NjEsIDB4NjgsIDB4MDksIDB4MDQsIDB4MDksIDB4MGMsIDB4ODEsIDB4NDIsCi0weDE2LCAweGQyLCAweDM5LCAweDY0LCAweDYzLCAweDY4LCAweDE5LCAweDA0LCAweDA5LCAweDBjLCAweDQwLCAweDFhLAotMHgwMywgMHgzMCwgMHg4MCwgMHgwOCwgMHg4MiwgMHgwMCwgMHhhMCwgMHg2MSwKLTB4MjAsIDB4NjgsIDB4MDksIDB4MTgsIDB4OWIsIDB4MTgsIDB4NjMsIDB4NjAsIDB4YzMsIDB4MWYsIDB4MDUsIDB4M2IsCi0weDM4LCAweDFjLCAweDAwLCAweGYwLCAweGI2LCAweGZhLCAweDdlLCAweDgwLCAweDIwLCAweDFjLCAweDAwLCAweGYwLAotMHhiZiwgMHhmYiwgMHgwYiwgMHhlMCwgMHhiOSwgMHg2OCwgMHgwOCwgMHgxYSwgMHgwMCwgMHgyNSwgMHg3OCwgMHg2MiwKLTB4YmQsIDB4NjIsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4M2MsIDB4ZmMsIDB4MjAsIDB4MWMsIDB4MzksIDB4MWMsCi0weDAwLCAweGYwLCAweDY0LCAweGY4LCAweDA1LCAweGIwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHgwYywgMHgyYiwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhjMCwKLTB4ZjAsIDB4YjUsIDB4MDQsIDB4MWMsIDB4MGYsIDB4MWMsIDB4MzgsIDB4NmMsIDB4ZjksIDB4NmIsIDB4MGQsIDB4MTgsCi0weDIxLCAweDY4LCAweDQxLCAweDE4LCAweDAwLCAweDIwLCAweGEyLCAweDY5LCAweDAwLCAweDJhLCAweDBiLCAweGQ5LAotMHg4MiwgMHgwMCwgMHg1NiwgMHgxOCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgzMywgMHg0MywgMHgxYiwgMHg2OCwKLTB4YzAsIDB4NDYsIDB4YWIsIDB4NTAsIDB4YTIsIDB4NjksIDB4MDEsIDB4MzAsIDB4ODIsIDB4NDIsIDB4ZjMsIDB4ZDgsCi0weDc4LCAweDZlLCAweGY5LCAweDZiLCAweDA5LCAweDE4LCAweDg5LCAweDg5LCAweGYwLCAweDIzLCAweDE5LCAweDQwLAotMHgwOSwgMHgwOSwgMHg4OSwgMHgwMCwgMHg0MCwgMHgxOCwgMHhmOCwgMHg2MCwgMHhmOSwgMHg2MSwgMHgyMCwgMHg2OCwKLTB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MDgsIDB4MzgsIDB4MTgsIDB4NDMsIDB4MDEsIDB4NjgsIDB4NzgsIDB4NmMsCi0weGZjLCAweGY3LCAweDk1LCAweGZmLCAweDc4LCAweDY0LCAweDYwLCAweDY4LCAweDAxLCAweDA0LCAweDA5LCAweDBjLAotMHhmOCwgMHg2OCwgMHg4MSwgMHg0MiwgMHgxOSwgMHhkMiwgMHgzOSwgMHg2NCwgMHg2MywgMHg2OCwgMHgxOSwgMHgwNCwKLTB4MDksIDB4MGMsIDB4NDAsIDB4MWEsIDB4MDMsIDB4MzAsIDB4ODAsIDB4MDgsIDB4ODIsIDB4MDAsIDB4YTAsIDB4NjEsCi0weDIwLCAweDY4LCAweDA5LCAweDE4LCAweDliLCAweDE4LCAweDYzLCAweDYwLCAweGMzLCAweDFmLCAweDA1LCAweDNiLAotMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHg1NiwgMHhmYSwgMHgwMSwgMHgyMCwgMHg3OCwgMHg4MCwgMHgyMCwgMHgxYywKLTB4MDAsIDB4ZjAsIDB4NWUsIDB4ZmIsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4YjksIDB4NjgsCi0weDA4LCAweDFhLCAweDc4LCAweDYyLCAweDAwLCAweDIwLCAweGI4LCAweDYyLCAweDM4LCAweDFjLCAweDAwLCAweGYwLAotMHhkOSwgMHhmYiwgMHgyMCwgMHgxYywgMHgzOSwgMHgxYywgMHgwMCwgMHhmMCwgMHgwMSwgMHhmOCwgMHhlZiwgMHhlNywKLTB4ZjAsIDB4YjUsIDB4ODQsIDB4YjAsIDB4MDQsIDB4MWMsIDB4MGYsIDB4MWMsIDB4OGUsIDB4NDgsIDB4NDEsIDB4NjksCi0weDAxLCAweDMxLCAweDQxLCAweDYxLCAweDAzLCAweDIwLCAweDAwLCAweDA3LCAweDYxLCAweDY4LCAweDA4LCAweDQwLAotMHgwNiwgMHgwZiwgMHgwYSwgMHgwNCwgMHgxMiwgMHgwYywgMHgyMCwgMHg2OCwgMHgxMSwgMHgxOCwgMHhmYiwgMHg2OCwKLTB4ZDIsIDB4MWEsIDB4N2IsIDB4NjgsIDB4OWQsIDB4MWEsIDB4YzMsIDB4MWYsIDB4MDUsIDB4M2IsIDB4MzgsIDB4MWMsCi0weDJhLCAweDFjLCAweDAwLCAweGYwLCAweDI2LCAweGZhLCAweDAwLCAweDIwLCAweDc4LCAweDgwLCAweDIwLCAweDFjLAotMHgwMCwgMHhmMCwgMHgyZSwgMHhmYiwgMHg2MCwgMHg2OCwgMHg0MCwgMHgxOSwgMHgwMSwgMHgwNCwgMHgwOSwgMHgwYywKLTB4NjAsIDB4NjAsIDB4MzAsIDB4MWMsIDB4MDEsIDB4ZjAsIDB4ZTAsIDB4ZmIsIDB4N2QsIDB4NGUsIDB4MGIsIDB4MjMsCi0weDFiLCAweDAyLCAweGYwLCAweDE4LCAweDAwLCAweDY5LCAweDAwLCAweDI4LCAweDE5LCAweGQwLCAweDAwLCAweDI1LAotMHgyZCwgMHgyMywgMHg5YiwgMHgwMSwgMHhmMCwgMHgxOCwgMHhjMCwgMHg2OCwgMHgwMCwgMHgyOCwgMHgxMiwgMHhkMCwKLTB4YWEsIDB4MDAsIDB4OTIsIDB4MTksIDB4MmQsIDB4MjMsIDB4OWIsIDB4MDEsIDB4ZDIsIDB4MTgsIDB4ZDIsIDB4NjgsCi0weDIwLCAweDFjLCAweDM5LCAweDFjLCAweDAxLCAweGYwLCAweDFjLCAweGZlLCAweDAxLCAweDM1LCAweGE4LCAweDAwLAotMHg4MCwgMHgxOSwgMHgyZCwgMHgyMywgMHg5YiwgMHgwMSwgMHhjMCwgMHgxOCwgMHhjMCwgMHg2OCwgMHgwMCwgMHgyOCwKLTB4ZWMsIDB4ZDEsIDB4ZjgsIDB4NmIsIDB4MDEsIDB4MWYsIDB4OGEsIDB4MWMsIDB4ZmEsIDB4NjMsIDB4ZmEsIDB4NjgsCi0weDdkLCAweDZjLCAweDAwLCAweGYwLCAweGJiLCAweGY5LCAweGMwLCAweDQzLCAweDAxLCAweDA0LCAweDA5LCAweDBjLAotMHgyOCwgMHgxYywgMHhmYywgMHhmNywgMHgxMCwgMHhmZiwgMHgwMywgMHg5MCwgMHhmOSwgMHg2YiwgMHgzYSwgMHg2ZSwKLTB4OGUsIDB4MTgsIDB4MjAsIDB4NjgsIDB4MTIsIDB4MTgsIDB4MDEsIDB4OTIsIDB4N2EsIDB4NmUsIDB4OGQsIDB4MTgsCi0weDExLCAweDE4LCAweDAyLCAweDkxLCAweGM4LCAweDFkLCAweDA5LCAweDMwLCAweGUwLCAweDYwLCAweGIxLCAweDg4LAotMHgwOCwgMHgwMiwgMHgwOSwgMHgwYSwgMHgwOSwgMHgwNiwgMHgwOSwgMHgwZSwgMHgwOCwgMHg0MywgMHgwMCwgMHgwNCwKLTB4MDAsIDB4MGMsIDB4NzgsIDB4NjEsIDB4NjgsIDB4NjgsIDB4MDEsIDB4MGUsIDB4ZmYsIDB4MjIsIDB4MTIsIDB4MDQsCi0weDAyLCAweDQwLCAweDEyLCAweDBhLCAweDExLCAweDQzLCAweGZmLCAweDIyLCAweDEyLCAweDAyLCAweDAyLCAweDQwLAotMHgxMiwgMHgwMiwgMHgxMSwgMHg0MywgMHgwMCwgMHgwNiwgMHgwOCwgMHg0MywgMHgzOCwgMHg2MSwgMHhhOCwgMHg4OSwKLTB4MDksIDB4MjMsIDB4MWIsIDB4MDIsIDB4MTgsIDB4NDAsIDB4YjgsIDB4NjEsCi0weGE4LCAweDg5LCAweDk4LCAweDQzLCAweGE4LCAweDgxLCAweGE4LCAweDg5LCAweDAyLCAweDk5LCAweGMwLCAweDQ2LAotMHg4OCwgMHg4MSwgMHgwMCwgMHgyMCwgMHg3MCwgMHg4MCwgMHhiMCwgMHg4MCwgMHg3MCwgMHg4MSwgMHg2OCwgMHg2MCwKLTB4MjgsIDB4ODIsIDB4YjksIDB4NmUsIDB4MzAsIDB4MWMsIDB4ZmMsIDB4ZjcsIDB4ZTgsIDB4ZmUsIDB4MzgsIDB4ODYsCi0weGZhLCAweDY5LCAweDMwLCAweDFjLCAweDI5LCAweDFjLCAweGZjLCAweGY3LCAweDAzLCAweGZmLCAweDc4LCAweDg2LAotMHgzZCwgMHg4ZSwgMHg3OCwgMHg4ZSwgMHgwMywgMHg5OSwgMHhmYywgMHhmNywgMHhjOCwgMHhmZSwgMHgwMCwgMHg5MCwKLTB4NjAsIDB4NjgsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MGMsIDB4MzksIDB4NmUsIDB4NDEsIDB4MWEsIDB4MDksIDB4MDQsCi0weDA5LCAweDBjLCAweDdhLCAweDZlLCAweDgyLCAweDFhLCAweDEzLCAweDA0LCAweDFiLCAweDBjLCAweDFhLCAweDAyLAotMHgxYiwgMHgwYSwgMHgxYSwgMHg0MywgMHgxNiwgMHgwNCwgMHgzNiwgMHgwYywgMHhiYSwgMHg2OCwgMHg4MiwgMHg0MiwKLTB4MDEsIDB4ZDIsIDB4MDAsIDB4MjAsIDB4MDAsIDB4ZTAsIDB4MTAsIDB4MWEsIDB4YjgsIDB4NjAsIDB4MDgsIDB4MDIsCi0weDA5LCAweDEyLCAweDA5LCAweDA2LCAweDA5LCAweDBlLCAweDA4LCAweDQzLCAweDAxLCAweDA0LCAweDA5LCAweDBjLAotMHgwMSwgMHg5OCwgMHhjMCwgMHg0NiwgMHg0MSwgMHg4MCwgMHgyOCwgMHgxYywgMHhmYywgMHhmNywgMHhhMywgMHhmZSwKLTB4MDUsIDB4MWMsIDB4MDAsIDB4OTgsIDB4MzEsIDB4MWMsIDB4ZmMsIDB4ZjcsIDB4OWUsIDB4ZmUsIDB4MDYsIDB4MWMsCi0weDc4LCAweDY5LCAweDAwLCAweDA0LCAweDAwLCAweDBjLCAweDAxLCAweDAyLCAweDAwLCAweDBhLCAweDA4LCAweDQzLAotMHgwMSwgMHgwNCwgMHgwOSwgMHgwYywgMHgwMSwgMHg5OCwgMHhjMCwgMHg0NiwgMHg4MSwgMHg4MCwgMHgyOCwgMHgxYywKLTB4ZmMsIDB4ZjcsIDB4OGYsIDB4ZmUsIDB4NzksIDB4NjksIDB4MDEsIDB4MzEsIDB4YzAsIDB4NDMsIDB4NzksIDB4NjEsCi0weDAxLCAweDlhLCAweGMwLCAweDQ2LCAweDUwLCAweDgxLCAweDM4LCAweDY5LCAweDAxLCAweDBlLCAweGZmLCAweDIyLAotMHgxMiwgMHgwNCwgMHgwMiwgMHg0MCwgMHgxMiwgMHgwYSwgMHgxMSwgMHg0MywgMHhmZiwgMHgyMiwgMHgxMiwgMHgwMiwKLTB4MDIsIDB4NDAsIDB4MTIsIDB4MDIsIDB4MTEsIDB4NDMsIDB4MDAsIDB4MDYsIDB4MDEsIDB4NDMsIDB4MzAsIDB4MWMsCi0weGZjLCAweGY3LCAweDc3LCAweGZlLCAweDM5LCAweDY5LCAweDdhLCAweDY4LCAweDg5LCAweDE4LCAweDM5LCAweDYxLAotMHhiOSwgMHg2OCwgMHgwMCwgMHgyOSwgMHgwOSwgMHhkMSwgMHgwMiwgMHg5OSwgMHg4OSwgMHg4OSwgMHhiYSwgMHg2OSwKLTB4MTEsIDB4NDMsIDB4MDIsIDB4OWEsIDB4YzAsIDB4NDYsIDB4OTEsIDB4ODEsIDB4YjksIDB4NjksIDB4ZmMsIDB4ZjcsCi0weDY2LCAweGZlLCAweDIwLCAweDgyLCAweDAwLCAweDIwLCAweDYwLCAweDgyLCAweGY4LCAweDZkLCAweDQxLCAweDA4LAotMHgxNiwgMHhkMywgMHg4MCwgMHgwYSwgMHgwYSwgMHhkMywgMHg2MCwgMHg2OCwgMHgxMCwgMHgzOCwgMHgwMSwgMHgwNCwKLTB4MDksIDB4MGMsIDB4MDgsIDB4MDIsIDB4MDksIDB4MGEsIDB4MDgsIDB4NDMsIDB4MjEsIDB4NjgsIDB4YzAsIDB4NDYsCi0weDA4LCAweDgyLCAweDA5LCAweGUwLCAweDYwLCAweDY4LCAweDBjLCAweDM4LCAweDAxLCAweDA0LCAweDA5LCAweDBjLAotMHgwOCwgMHgwMiwgMHgwOSwgMHgwYSwgMHgwOCwgMHg0MywgMHgyMSwgMHg2OCwgMHhjMCwgMHg0NiwgMHg4OCwgMHg4MSwKLTB4MDQsIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MGMsIDB4MmIsIDB4MDAsIDB4ODAsCi0weDY4LCAweDBlLCAweDAwLCAweDgwLCAweGYxLCAweGI1LCAweDg0LCAweGIwLCAweDZlLCAweDRkLCAweDI4LCAweDY5LAotMHgwMSwgMHgyMiwgMHgwNCwgMHg5OSwgMHg4YSwgMHg0MCwgMHg5MCwgMHg0MywgMHgyOCwgMHg2MSwgMHgwNCwgMHg5OCwKLTB4NDMsIDB4MDEsIDB4MTgsIDB4MWEsIDB4ODAsIDB4MDAsIDB4MTYsIDB4MWMsIDB4NjksIDB4NDksIDB4NDQsIDB4MTgsCi0weGUwLCAweDZiLCAweGMwLCAweDQ2LCAweDAwLCAweDkwLCAweGEwLCAweDY4LCAweDAwLCAweDI4LCAweDAxLCAweGQxLAotMHgwMCwgMHgyNiwgMHgyNiwgMHhlMCwgMHg2NSwgMHg0OCwgMHg0MSwgMHg2OSwgMHgwMSwgMHgzMSwgMHg0MSwgMHg2MSwKLTB4MDQsIDB4OTgsIDB4ZmMsIDB4ZjcsIDB4MDksIDB4ZmQsIDB4MDcsIDB4MWMsIDB4MDMsIDB4ZDEsIDB4MjgsIDB4NjksCi0weDMwLCAweDQzLCAweDI4LCAweDYxLCAweGI1LCAweGUwLCAweGEwLCAweDY4LCAweDY1LCAweDY4LCAweGE4LCAweDQyLAotMHgwMCwgMHhkMiwgMHgwNSwgMHgxYywgMHhhMSwgMHg2YywgMHhhOSwgMHg0MiwgMHgxNiwgMHhkMiwgMHg0MCwgMHgxYSwKLTB4NjIsIDB4NmEsIDB4MTAsIDB4MWEsIDB4MDAsIDB4MjYsIDB4NjAsIDB4NjIsIDB4YTYsIDB4NjAsIDB4YTYsIDB4NjIsCi0weDIwLCAweDg4LCAweDQ4LCAweDIzLCAweDE4LCAweDQzLCAweDIwLCAweDgwLCAweDBkLCAweDFjLCAweDA5LCAweGQxLAotMHgzOCwgMHgxYywgMHhmYywgMHhmNywgMHgxOSwgMHhmZCwgMHgwMywgMHgyMCwgMHg2MCwgMHg4MCwgMHg2NiwgMHg2MCwKLTB4MjAsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4OGQsIDB4ZjksIDB4OTYsIDB4ZTAsIDB4ZTEsIDB4NjgsIDB4MzgsIDB4NjgsCi0weDA5LCAweDE4LCAweGMzLCAweDFmLCAweDA1LCAweDNiLCAweDIwLCAweDFjLCAweDAyLCAweDM5LCAweDJhLCAweDFjLAotMHgwMCwgMHhmMCwgMHhjZCwgMHhmOCwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHhkNywgMHhmOSwgMHhlMCwgMHg2OCwKLTB4NDYsIDB4MTksIDB4NzgsIDB4NjgsIDB4MzAsIDB4NDMsIDB4NzgsIDB4NjAsIDB4MDQsIDB4OTgsIDB4MzEsIDB4MWMsCi0weDAxLCAweGYwLCAweDg4LCAweGZhLCAweDIxLCAweDZlLCAweDAwLCAweDk4LAotMHgwOCwgMHgxOCwgMHgwMSwgMHg5MCwgMHg3MCwgMHgxYSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywgMHg2MSwgMHg2ZSwKLTB4NzEsIDB4MWEsIDB4MGEsIDB4MDQsIDB4MTIsIDB4MGMsIDB4MTEsIDB4MDIsIDB4MTIsIDB4MGEsIDB4MTEsIDB4NDMsCi0weDA5LCAweDA0LCAweDA5LCAweDBjLCAweDAyLCAweDkxLCAweDAxLCAweDAyLCAweDAwLCAweDBhLCAweDA4LCAweDQzLAotMHgwMSwgMHgwNCwgMHgwOSwgMHgwYywgMHgwMSwgMHg5OCwgMHhjMCwgMHg0NiwgMHg0MSwgMHg4MCwgMHgyMCwgMHg4ZSwKLTB4ZmMsIDB4ZjcsIDB4Y2IsIDB4ZmQsIDB4MDYsIDB4MWMsIDB4NjAsIDB4OGUsIDB4MDIsIDB4OTksIDB4ZmMsIDB4ZjcsCi0weGM2LCAweGZkLCAweDAzLCAweDkwLCAweDYwLCAweDY5LCAweDAxLCAweDA0LCAweDA5LCAweDBjLCAweDA4LCAweDAyLAotMHgwOSwgMHgwYSwgMHgwOCwgMHg0MywgMHgwMSwgMHgwNCwgMHgwOSwgMHgwYywgMHgwMSwgMHg5OCwgMHhjMCwgMHg0NiwKLTB4ODEsIDB4ODAsIDB4MzAsIDB4MWMsIDB4ZmMsIDB4ZjcsIDB4YjcsIDB4ZmQsIDB4NjEsIDB4NjksIDB4MDEsIDB4MzEsCi0weGMwLCAweDQzLCAweDYxLCAweDYxLCAweDAxLCAweDk5LCAweGMwLCAweDQ2LCAweDQ4LCAweDgxLCAweDYwLCAweDZlLAotMHgwMCwgMHg5OSwgMHg0NiwgMHgxOCwgMHgyMCwgMHg2OSwgMHgwMSwgMHgwZSwgMHhmZiwgMHgyMiwgMHgxMiwgMHgwNCwKLTB4MDIsIDB4NDAsIDB4MTIsIDB4MGEsIDB4MTEsIDB4NDMsIDB4ZmYsIDB4MjIsIDB4MTIsIDB4MDIsIDB4MDIsIDB4NDAsCi0weDEyLCAweDAyLCAweDExLCAweDQzLCAweDAwLCAweDA2LCAweDAxLCAweDQzLCAweDcxLCAweDYwLCAweDAzLCAweDk4LAotMHhmYywgMHhmNywgMHg5YiwgMHhmZCwgMHgyMSwgMHg2OSwgMHg0OSwgMHgxOSwgMHgyMSwgMHg2MSwgMHhhMSwgMHg2OCwKLTB4NDksIDB4MWIsIDB4YTEsIDB4NjAsIDB4MDYsIDB4ZDEsIDB4YjEsIDB4ODksIDB4YTIsIDB4NjksIDB4MTEsIDB4NDMsCi0weGIxLCAweDgxLCAweGExLCAweDY5LCAweGZjLCAweGY3LCAweDhkLCAweGZkLCAweDM4LCAweDgyLCAweDYxLCAweDZlLAotMHgzOCwgMHg2OCwgMHgwOSwgMHgxOCwgMHgwZSwgMHgzMSwgMHhmOSwgMHg2MCwgMHhlMiwgMHg2OCwgMHgwMCwgMHg5OSwKLTB4MDQsIDB4MzgsIDB4MDAsIDB4ZjAsIDB4NGMsIDB4ZjgsIDB4MDIsIDB4MjAsIDB4NzgsIDB4ODIsIDB4ZTAsIDB4NmQsCi0weDQxLCAweDA4LCAweDE2LCAweGQzLCAweDgwLCAweDBhLCAweDBhLCAweGQzLCAweDc4LCAweDY4LCAweDEwLCAweDM4LAotMHgwMSwgMHgwNCwgMHgwOSwgMHgwYywgMHgwOCwgMHgwMiwgMHgwOSwgMHgwYSwgMHgwOCwgMHg0MywgMHgzOSwgMHg2OCwKLTB4YzAsIDB4NDYsIDB4YzgsIDB4ODEsIDB4MDksIDB4ZTAsIDB4NzgsIDB4NjgsIDB4MGMsIDB4MzgsIDB4MDEsIDB4MDQsCi0weDA5LCAweDBjLCAweDA4LCAweDAyLCAweDA5LCAweDBhLCAweDA4LCAweDQzLCAweDM5LCAweDY4LCAweGMwLCAweDQ2LAotMHg0OCwgMHg4MSwgMHgwNSwgMHhiMCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwKLTB4ZDAsIDB4MmMsIDB4MDAsIDB4ODAsIDB4NWMsIDB4MmIsIDB4MDAsIDB4ODAsIDB4MGMsIDB4MmIsIDB4MDAsIDB4ODAsCi0weGY3LCAweGI1LCAweDAzLCAweDFjLCAweDBmLCAweDFjLCAweDAwLCAweDIwLCAweDFjLCAweDY4LCAweDI2LCAweDA0LAotMHgzMSwgMHgxYywgMHgxZCwgMHgxZCwgMHhmYywgMHhmNywgMHg1MSwgMHhmZCwgMHg0MCwgMHhjNywgMHgwMiwgMHg5YSwKLTB4ZDEsIDB4MWMsIDB4ODksIDB4MDgsIDB4MDEsIDB4MzksIDB4NGEsIDB4MWUsIDB4MDIsIDB4OTIsIDB4MDAsIDB4MjksCi0weDBkLCAweGQwLCAweDIxLCAweDBjLCAweDEwLCAweGNkLCAweDIyLCAweDA0LCAweDBhLCAweDQzLCAweDExLCAweDFjLAotMHgxNiwgMHgxYywgMHhmYywgMHhmNywgMHg0MCwgMHhmZCwgMHg0MCwgMHhjNywgMHgwMiwgMHg5OSwgMHg0YSwgMHgxZSwKLTB4MDIsIDB4OTIsIDB4MDAsIDB4MjksIDB4ZjEsIDB4ZDEsIDB4MDMsIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsCi0weDE4LCAweDQ3LCAweDgwLCAweDA4LCAweDgwLCAweDAwLCAweDg5LCAweDA4LCAweDg5LCAweDAwLCAweDAzLCAweDMyLAotMHg5MywgMHgwOCwgMHg1YSwgMHgxZSwgMHgwMCwgMHgyYiwgMHgwNSwgMHhkMCwgMHgwOCwgMHhjOSwgMHgwOCwgMHhjMCwKLTB4MTMsIDB4MWMsIDB4MDEsIDB4M2EsIDB4MDAsIDB4MmIsIDB4ZjksIDB4ZDEsIDB4NzAsIDB4NDcsIDB4ZmYsIDB4YjUsCi0weDg2LCAweGIwLCAweDE3LCAweDFjLCAweDAwLCAweDI2LCAweDA2LCAweDk4LCAweDgwLCAweDZjLCAweGMwLCAweDFiLAotMHgwNiwgMHg5OSwgMHhjMCwgMHg0NiwgMHg4OCwgMHg2NCwgMHgwMSwgMHgyMCwgMHhjMCwgMHgwNSwgMHgwNiwgMHg5OSwKLTB4ODksIDB4NmIsIDB4YzAsIDB4NDYsIDB4MDEsIDB4OTEsIDB4MDYsIDB4OTksIDB4NGMsIDB4NmIsIDB4NjcsIDB4ZTAsCi0weDIxLCAweDY4LCAweGMwLCAweDQ2LCAweDAyLCAweDkxLCAweDYxLCAweDY4LCAweGMwLCAweDQ2LCAweDAzLCAweDkxLAotMHhhMSwgMHg2OCwgMHhjMCwgMHg0NiwgMHgwNCwgMHg5MSwgMHgwMiwgMHhhOSwgMHg0OSwgMHg4OCwgMHhiOSwgMHg0MiwKLTB4MDgsIDB4ZDIsIDB4MDIsIDB4YWQsIDB4NmQsIDB4ODgsIDB4MDIsIDB4YTksIDB4NDksIDB4ODgsIDB4N2YsIDB4MWEsCi0weDAwLCAweDIxLCAweDAyLCAweGFiLCAweDU5LCAweDgwLCAweDE5LCAweGUwLCAweDAyLCAweGE5LCAweDQ5LCAweDg4LAotMHhjOSwgMHgxYiwgMHgwMiwgMHhhYiwgMHg1OSwgMHg4MCwgMHgzZCwgMHgxYywgMHgwMCwgMHgyNywgMHgwMSwgMHgyMSwKLTB4NDksIDB4MDYsIDB4MDcsIDB4OWIsIDB4OWEsIDB4MDcsIDB4OTIsIDB4MGYsIDB4MGQsIDB4ZDAsIDB4ZWIsIDB4MDYsCi0weGRiLCAweDBlLCAweDA4LCAweGQwLCAweDFlLCAweDJiLCAweDA4LCAweGQzLCAweDFlLCAweDJiLCAweDAyLCAweGQxLAotMHgwMywgMHgyYSwgMHgwNCwgMHhkMSwgMHgwMSwgMHhlMCwgMHgwMiwgMHgyYSwKLTB4MDEsIDB4ZDMsIDB4MDEsIDB4MjYsIDB4MDAsIDB4MjEsIDB4MjksIDB4NDMsIDB4MDEsIDB4NDMsIDB4MGEsIDB4MWMsCi0weDAwLCAweDkxLCAweDAwLCAweDIwLCAweDAzLCAweDk5LCAweDA0LCAweDlhLCAweDA3LCAweDliLCAweDAxLCAweGYwLAotMHg1YiwgMHhmZiwgMHgwNywgMHg5OSwgMHg0OSwgMHgxOSwgMHgwNywgMHg5MSwgMHgwMCwgMHgyZSwgMHgwYSwgMHhkMCwKLTB4MWQsIDB4NGEsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTIsIDB4MWQsIDB4NDgsIDB4MDEsIDB4NmQsIDB4NDIsIDB4NmQsCi0weDAwLCAweDIwLCAweDA3LCAweDliLCAweDAxLCAweGYwLCAweDRjLCAweGZmLCAweDAwLCAweDI2LCAweDAyLCAweGE4LAotMHg0MCwgMHg4OCwgMHgwMCwgMHgyOCwgMHgwYywgMHhkMCwgMHgwMywgMHg5OCwgMHg0MCwgMHgxOSwgMHgwMywgMHg5MCwKLTB4MDIsIDB4OTgsIDB4YzAsIDB4NDYsIDB4MjAsIDB4NjAsIDB4MDMsIDB4OTgsIDB4YzAsIDB4NDYsIDB4NjAsIDB4NjAsCi0weDA0LCAweDk4LCAweGMwLCAweDQ2LCAweGEwLCAweDYwLCAweDAzLCAweGUwLCAweDAxLCAweDk4LCAweDAxLCAweDM4LAotMHgwMSwgMHg5MCwgMHgxMCwgMHgzNCwgMHgwNiwgMHg5OCwgMHhjMCwgMHg0NiwgMHg0NCwgMHg2MywgMHgwMSwgMHg5OCwKLTB4MDYsIDB4OTksIDB4YzAsIDB4NDYsIDB4ODgsIDB4NjMsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MmYsIDB4MDIsIDB4ZDAsCi0weDAxLCAweDk5LCAweDAwLCAweDI5LCAweDkyLCAweGQxLCAweDA5LCAweDRhLCAweGMwLCAweDQ2LCAweDAwLCAweDkyLAotMHgwNiwgMHg0OCwgMHgwMSwgMHg2ZCwgMHg0MiwgMHg2ZCwgMHgwMCwgMHgyMCwgMHgwOSwgMHg5YiwgMHgwMSwgMHhmMCwKLTB4MWYsIDB4ZmYsIDB4MGEsIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsCi0weDAxLCAweDAwLCAweDAwLCAweDAyLCAweDdjLCAweDI5LCAweDAwLCAweDgwLCAweDA0LCAweDAwLCAweDUzLCAweDAyLAotMHg5MCwgMHhiNSwgMHgwYywgMHgxYywgMHgwNywgMHgxYywgMHgzOCwgMHg2OCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywKLTB4MDgsIDB4MzgsIDB4MTgsIDB4NDMsIDB4MDEsIDB4NjgsIDB4MzgsIDB4OGEsIDB4ZmMsIDB4ZjcsIDB4ODUsIDB4ZmMsCi0weGMwLCAweDQzLCAweGY5LCAweDY4LCAweGMwLCAweDQ2LCAweDA4LCAweDgwLCAweDc4LCAweDhhLCAweDM5LCAweDY4LAotMHgwOCwgMHgxYSwgMHgzOCwgMHg2MCwgMHgzOCwgMHgxYywgMHgwMSwgMHhmMCwgMHg4YiwgMHhmOSwgMHgzOCwgMHgxYywKLTB4ZmMsIDB4ZjcsIDB4OGMsIDB4ZmIsIDB4MjAsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4MzMsIDB4ZmUsIDB4OTAsIDB4YmMsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDgwLCAweGI1LCAweDAxLCAweDg4LCAweDhhLCAweDA5LCAweDIxLCAweGQzLAotMHhjYSwgMHgwOSwgMHgxZiwgMHhkMiwgMHg4YSwgMHgwOCwgMHgxZCwgMHhkMywgMHgwMCwgMHgyMSwgMHgwMSwgMHg4MCwKLTB4NDEsIDB4ODAsIDB4NDcsIDB4NmYsIDB4NDAsIDB4NmQsIDB4ZmEsIDB4MWQsIDB4MTksIDB4MzIsIDB4NTEsIDB4NzEsCi0weGZhLCAweDZkLCAweGMwLCAweDQ2LCAweDEwLCAweDYwLCAweDNhLCAweDZlLCAweGMwLCAweDQ2LCAweDEwLCAweDYwLAotMHgwYywgMHg0OCwgMHhjMCwgMHg0NiwgMHg4MSwgMHg2MywgMHhjMSwgMHg2YiwgMHg0OSwgMHgwOCwgMHg0OSwgMHgwMCwKLTB4YzEsIDB4NjMsIDB4MDEsIDB4MjAsIDB4MDAsIDB4ZjAsIDB4Y2MsIDB4ZmYsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsCi0weDZiLCAweGZmLCAweDgwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDgwLCAweDIzLCAweDE5LCAweDQzLAotMHgwMSwgMHg4MCwgMHgwMSwgMHg4OCwgMHg0OSwgMHgwOSwgMHhmNiwgMHhkMiwgMHgwMCwgMHhmMCwgMHhiMCwgMHhmOCwKLTB4ZjMsIDB4ZTcsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4ZjAsIDB4YjUsIDB4MDcsIDB4MWMsCi0weDEwLCAweDFjLCAweDBkLCAweDFjLCAweDAwLCAweDI0LCAweDVlLCAweDFlLCAweDAwLCAweDJiLCAweDE5LCAweGQwLAotMHgwMSwgMHg2OCwgMHhjMCwgMHg0NiwgMHgzOSwgMHg2MCwgMHg0MSwgMHg4OCwgMHgwYywgMHgxOSwgMHg0MSwgMHg2OCwKLTB4YzAsIDB4NDYsIDB4NzksIDB4NjAsIDB4ODEsIDB4NjgsIDB4YzAsIDB4NDYsIDB4YjksIDB4NjAsIDB4YzEsIDB4NjgsCi0weGMwLCAweDQ2LCAweGY5LCAweDYwLCAweDEwLCAweDMwLCAweDEwLCAweDM3LCAweGU5LCAweDZhLCAweDgxLCAweDQyLAotMHgwMiwgMHhkOCwgMHgyOCwgMHgxYywgMHgwMCwgMHhmMCwgMHhlYywgMHhmZiwgMHgzMSwgMHgxYywgMHgwMSwgMHgzZSwKLTB4MDAsIDB4MjksIDB4ZTUsIDB4ZDEsIDB4MjAsIDB4MWMsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weDAwLCAweDIxLCAweGMxLCAweDYxLCAweDA1LCAweDQ5LCAweDBhLCAweDY4LCAweDAwLCAweDJhLCAweDAxLCAweGQxLAotMHgwOCwgMHg2MCwgMHgwMiwgMHhlMCwgMHg0YSwgMHg2OCwgMHhjMCwgMHg0NiwgMHhkMCwgMHg2MSwgMHg0OCwgMHg2MCwKLTB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4MmMsIDB4MDAsIDB4ODAsIDB4MDMsIDB4NDksIDB4MDgsIDB4NjgsCi0weDAwLCAweDI4LCAweDAyLCAweGQwLCAweGMyLCAweDY5LCAweGMwLCAweDQ2LCAweDBhLCAweDYwLCAweDcwLCAweDQ3LAotMHhkMCwgMHgyYywgMHgwMCwgMHg4MCwgMHgwMCwgMHgyMSwgMHg4MSwgMHg2NywgMHgwNSwgMHg0OSwgMHg4YSwgMHg2OCwKLTB4MDAsIDB4MmEsIDB4MDEsIDB4ZDEsIDB4ODgsIDB4NjAsIDB4MDIsIDB4ZTAsIDB4Y2EsIDB4NjgsIDB4YzAsIDB4NDYsCi0weDkwLCAweDY3LCAweGM4LCAweDYwLCAweDcwLCAweDQ3LCAweDAwLCAweDAwLCAweGQwLCAweDJjLCAweDAwLCAweDgwLAotMHgwMywgMHg0OSwgMHg4OCwgMHg2OCwgMHgwMCwgMHgyOCwgMHgwMiwgMHhkMCwgMHg4MiwgMHg2ZiwgMHhjMCwgMHg0NiwKLTB4OGEsIDB4NjAsIDB4NzAsIDB4NDcsIDB4ZDAsIDB4MmMsIDB4MDAsIDB4ODAsCi0weDAwLCAweGI1LCAweDgwLCAweDIwLCAweDEzLCAweDQ5LCAweGMwLCAweDQ2LCAweDA4LCAweDYwLCAweGZmLCAweGY3LAotMHhkNSwgMHhmZiwgMHgwMCwgMHgyOCwgMHgxYiwgMHhkMCwgMHgwMywgMHgyMywgMHgxYiwgMHgwNywgMHg0MSwgMHg2OCwKLTB4MTksIDB4NDAsIDB4MGEsIDB4MGYsIDB4NTEsIDB4MDEsIDB4ODksIDB4MWEsIDB4ODksIDB4MDAsIDB4MGQsIDB4NGIsCi0weGM5LCAweDE4LCAweDRiLCAweDg4LCAweDAwLCAweDJiLCAweDA0LCAweGQxLCAweDExLCAweDFjLCAweGZmLCAweGY3LAotMHgzYiwgMHhmZiwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMSwgMHgyYiwgMHgwMiwgMHhkMSwgMHhmZiwgMHhmNywKLTB4MDUsIDB4ZmMsIDB4ZjgsIDB4ZTcsIDB4MDIsIDB4MmIsIDB4ZjYsIDB4ZDEsIDB4ZmYsIDB4ZjcsIDB4NGUsIDB4ZmIsCi0weGYzLCAweGU3LCAweDA0LCAweDQ4LCAweDAxLCAweDZkLCAweDAxLCAweDMxLCAweDAxLCAweDY1LCAweGVlLCAweGU3LAotMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHg1YywgMHgyYiwgMHgwMCwgMHg4MCwgMHhhMCwgMHg4MiwgMHgyMCwgMHg0MCwKLTB4MDAsIDB4YjUsIDB4MjAsIDB4MjAsIDB4MGQsIDB4NDksIDB4YzAsIDB4NDYsIDB4MDgsIDB4NjAsIDB4ZmYsIDB4ZjcsCi0weGJmLCAweGZmLCAweDAwLCAweDI4LCAweDBlLCAweGQwLCAweDAxLCAweDg4LCAweDIwLCAweDIzLCAweDE5LCAweDQzLAotMHgwMSwgMHg4MCwgMHgwMSwgMHg4OCwgMHgxMCwgMHgyMywgMHg5OSwgMHg0MywgMHgwMSwgMHg4MCwgMHgwMSwgMHg4OCwKLTB4MDksIDB4MGEsIDB4MDEsIDB4ZDMsIDB4ZmYsIDB4ZjcsIDB4MmUsIDB4ZmYsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weDAzLCAweDQ4LCAweDAxLCAweDZkLCAweDAxLCAweDMxLCAweDAxLCAweDY1LCAweGY4LCAweGU3LCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHhhMCwgMHg4MiwgMHgyMCwgMHg0MCwgMHg5OCwgMHhiNSwgMHgwNywgMHgxYywKLTB4MjIsIDB4NDgsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTAsIDB4MjIsIDB4NDgsIDB4YzMsIDB4MWQsIDB4NDEsIDB4MzMsCi0weDQxLCAweDZkLCAweDgyLCAweDZkLCAweDgwLCAweDZjLCAweDAwLCAweDAzLCAweDAwLCAweDBiLCAweDljLCAweDY4LAotMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgyMywgMHg0MywgMHgxYiwgMHg2OCwgMHg5OCwgMHg0MiwgMHgwMCwgMHhkMSwKLTB4MGMsIDB4ZTAsIDB4OTgsIDB4NDIsIDB4MDMsIDB4ZDksIDB4MTAsIDB4MWEsIDB4NTksIDB4MWEsIDB4NDEsIDB4MTgsCi0weDAwLCAweGUwLCAweDE5LCAweDFhLCAweDAxLCAweDIwLCAweDEwLCAweDI5LCAweDAwLCAweGQ4LCAweDAwLCAweDIwLAotMHgwMCwgMHgyOCwgMHgxZiwgMHhkMCwgMHg3OCwgMHg2YSwgMHhmOSwgMHg2YSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg2MCwKLTB4YjgsIDB4NmEsIDB4ZjksIDB4NmEsIDB4YzAsIDB4NDYsIDB4NDgsIDB4NjAsIDB4MTAsIDB4NGEsIDB4YzAsIDB4NDYsCi0weDAwLCAweDkyLCAweGZiLCAweDZhLCAweDBmLCAweDQ4LCAweDQyLCAweDZkLCAweDAzLCAweDIwLCAweDM5LCAweDZhLAotMHgwMSwgMHhmMCwgMHhlMiwgMHhmZCwgMHgzOCwgMHg4OCwgMHgxMCwgMHgyMywgMHgxOCwgMHg0MywgMHgzOCwgMHg4MCwKLTB4MzgsIDB4ODgsIDB4NDAsIDB4MjMsIDB4OTgsIDB4NDMsIDB4MzgsIDB4ODAsIDB4MzgsIDB4MWMsIDB4ZmYsIDB4ZjcsCi0weDU1LCAweGZmLCAweDk4LCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDM4LCAweDg4LCAweDQwLCAweDIzLAotMHgxOCwgMHg0MywgMHgzOCwgMHg4MCwgMHhmNywgMHhlNywgMHgwMCwgMHgwMCwgMHg1NSwgMHg1NSwgMHg1NSwgMHg1NSwKLTB4YTgsIDB4MDMsIDB4MDAsIDB4ODAsIDB4MDgsIDB4MDAsIDB4MTEsIDB4MDIsIDB4N2MsIDB4MjksIDB4MDAsIDB4ODAsCi0weGIwLCAweGI1LCAweDQwLCAweDIwLCAweDJjLCAweDQ5LCAweGMwLCAweDQ2LCAweDA4LCAweDYwLCAweDAwLCAweGYwLAotMHhmZCwgMHhmZSwgMHgwNywgMHgxYywgMHg0MCwgMHg2OCwgMHgwMywgMHgyMywgMHgxYiwgMHgwNywgMHgxOCwgMHg0MCwKLTB4MDUsIDB4MGYsIDB4NjgsIDB4MDEsIDB4NDAsIDB4MWIsIDB4ODAsIDB4MDAsIDB4MjYsIDB4NDksIDB4NDQsIDB4MTgsCi0weDIwLCAweDg4LCAweDAyLCAweDIzLCAweDE4LCAweDQzLCAweDIwLCAweDgwLCAweDIwLCAweDg4LCAweDQxLCAweDA4LAotMHgzNCwgMHhkMywgMHg0MCwgMHgwOCwgMHg0MCwgMHgwMCwgMHgyMCwgMHg4MCwgMHhhMCwgMHg2YywgMHhlMSwgMHg2YywKLTB4NDAsIDB4MTgsIDB4YTAsIDB4NjQsIDB4MDAsIDB4MjAsIDB4ZTAsIDB4NjQsIDB4YTEsIDB4NmIsIDB4MjIsIDB4NmQsCi0weDg5LCAweDE4LCAweGExLCAweDYzLCAweDIwLCAweDY1LCAweGI4LCAweDZhLCAweGMwLCAweDQ2LCAweDYwLCAweDY1LAotMHgwMywgMHgyMywgMHgxYiwgMHgwNywgMHg3OCwgMHg2OCwgMHgxOCwgMHg0MCwgMHg3OCwgMHg2MCwgMHg2MSwgMHg2OCwKLTB4MzYsIDB4MzEsIDB4OTQsIDB4MjksIDB4MDQsIDB4ZDgsIDB4MzgsIDB4MjMsIDB4MTgsIDB4NDMsIDB4NzgsIDB4NjAsCi0weDM4LCAweDIwLCAweDAzLCAweGUwLCAweDk0LCAweDIzLCAweDE4LCAweDQzLCAweDc4LCAweDYwLCAweDk0LCAweDIwLAotMHhiOCwgMHg2MSwgMHgzOSwgMHg2OCwgMHg3OCwgMHg2OCwgMHgwMiwgMHgwNCwgMHgxMiwgMHgwYywgMHgyMCwgMHgxYywKLTB4Y2IsIDB4MWYsIDB4MDUsIDB4M2IsIDB4ZmYsIDB4ZjcsIDB4ZDcsIDB4ZmQsIDB4MDIsIDB4MjAsIDB4NjAsIDB4ODAsCi0weDM4LCAweDFjLCAweGZmLCAweGY3LCAweGRmLCAweGZlLCAweGIwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHgzOCwgMHgxYywgMHhmYywgMHhmNywgMHgwNywgMHhmYSwgMHgyOCwgMHgwMSwgMHgwNiwgMHg0OSwgMHg0MCwgMHgxOCwKLTB4MTksIDB4MjMsIDB4ZGIsIDB4MDEsIDB4YzAsIDB4MTgsIDB4NDEsIDB4NmIsIDB4MDEsIDB4MzksIDB4NDEsIDB4NjMsCi0weGVmLCAweGU3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLAotMHg1YywgMHgyYiwgMHgwMCwgMHg4MCwgMHhhMCwgMHgxYywgMHgwMCwgMHg4MCwgMHg5MCwgMHhiNSwgMHgwMCwgMHgyNywKLTB4MGYsIDB4NGMsIDB4MGQsIDB4ZTAsIDB4NDIsIDB4NmIsIDB4MDEsIDB4M2EsIDB4NDIsIDB4NjMsIDB4MDAsIDB4MmEsCi0weDA1LCAweGRjLCAweDAyLCAweDZiLCAweGMwLCAweDQ2LCAweDQyLCAweDYzLCAweGMwLCAweDZhLCAweDAxLCAweGYwLAotMHhjNiwgMHhmOSwgMHgwMSwgMHgzNywgMHgwYiwgMHgyZiwgMHgwNywgMHhkMiwgMHgzOCwgMHgwMSwgMHgwMCwgMHgxOSwKLTB4MzMsIDB4MjMsIDB4OWIsIDB4MDEsIDB4YzAsIDB4MTgsIDB4ODEsIDB4NmEsIDB4MDAsIDB4MjksIDB4ZTksIDB4ZDEsCi0weDAxLCAweDIwLCAweDQwLCAweDA2LCAweDAzLCAweDQ5LCAweGMwLCAweDQ2LCAweDA4LCAweDYwLCAweDkwLCAweGJjLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwKLTB4MTAsIDB4NDgsIDB4YzEsIDB4NjgsIDB4MDEsIDB4MzEsIDB4YzEsIDB4NjAsIDB4MGYsIDB4NDksIDB4YzgsIDB4NjgsCi0weDAxLCAweDI4LCAweDE3LCAweGQxLCAweGM4LCAweDFkLCAweDc5LCAweDMwLCAweDAyLCAweDg5LCAweDAwLCAweDJhLAotMHgxMiwgMHhkMCwgMHgwMSwgMHgzYSwgMHgwMiwgMHg4MSwgMHgwMiwgMHg4OSwgMHgwMCwgMHgyYSwgMHgwZCwgMHhkMSwKLTB4NDIsIDB4ODksIDB4MDAsIDB4MmEsIDB4MDgsIDB4ZDEsIDB4YzksIDB4NmYsIDB4MDIsIDB4MjMsIDB4MGEsIDB4NjgsCi0weDFhLCAweDQzLCAweDBhLCAweDYwLCAweDA0LCAweDIxLCAweDAxLCAweDgxLCAweDAxLCAweDIxLCAweDAwLCAweGUwLAotMHgwMCwgMHgyMSwgMHg0MSwgMHg4MSwgMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHgwOCwgMHg4MywgMHgyMCwgMHg0MCwKLTB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4YjAsIDB4YjUsIDB4MDcsIDB4MWMsIDB4MDEsIDB4MjMsIDB4ZjgsIDB4MWQsCi0weDY5LCAweDMwLCAweDAzLCAweDczLCAweDFlLCAweDQ4LCAweGMyLCAweDFkLCAweDc5LCAweDMyLCAweDU0LCAweDhhLAotMHg2MSwgMHgxYywgMHg1MSwgMHg4MiwgMHhkNSwgMHg4YSwgMHgwMCwgMHgyMSwgMHhhYywgMHg0MiwgMHgwNCwgMHhkYiwKLTB4YzQsIDB4MWQsIDB4ODksIDB4MzQsIDB4NjMsIDB4NzAsIDB4NTEsIDB4ODIsIDB4ZDEsIDB4ODMsIDB4MDEsIDB4MjMsCi0weDliLCAweDA3LCAweDNhLCAweDZkLCAweDFhLCAweDQzLCAweDEyLCAweDY4LCAweGMwLCAweDQ2LCAweGJhLCAweDYxLAotMHhmYiwgMHg2OSwgMHg5YSwgMHg0MiwgMHgwNiwgMHhkMSwgMHhmOCwgMHg2YywgMHgxMiwgMHg0OSwgMHhjMCwgMHg0NiwKLTB4MDgsIDB4NjAsIDB4YjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NzksIDB4NjEsIDB4NDEsIDB4NjksCi0weGZhLCAweDZjLCAweDkxLCAweDQzLCAweDQxLCAweDYxLCAweDAxLCAweDIwLCAweDAwLCAweDA1LCAweGMxLCAweDYwLAotMHgzOCwgMHg2OSwgMHgwMiwgMHgyOCwgMHhmMSwgMHhkMCwgMHhiOCwgMHg2OSwgMHhmOSwgMHg2OSwgMHg0MSwgMHgxYSwKLTB4MDEsIDB4ZDUsIDB4NzgsIDB4NmQsIDB4NDEsIDB4MTgsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4MGUsIDB4ZjgsCi0weGY5LCAweDY5LCAweDA5LCAweDE4LCAweGY5LCAweDYxLCAweDc4LCAweDZkLCAweDgxLCAweDQyLCAweGUyLCAweGQzLAotMHgwOCwgMHgxYSwgMHhmOCwgMHg2MSwgMHhkZiwgMHhlNywgMHgwMCwgMHgwMCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4ZjgsIDB4YjUsIDB4MDQsIDB4MWMsIDB4MGYsIDB4MWMsIDB4ZmYsIDB4MjMsCi0weDIxLCAweDMzLCAweDlmLCAweDQyLCAweDAxLCAweGQ5LCAweGZmLCAweDI3LCAweDIxLCAweDM3LCAweGUxLCAweDZlLAotMHgzOCwgMHgxYywgMHgwMSwgMHhmMCwgMHhjYiwgMHhmYywgMHgyZCwgMHg0ZCwgMHgwMCwgMHgyOCwgMHgxMywgMHhkMSwKLTB4ZTAsIDB4MWQsIDB4NDksIDB4MzAsIDB4MDEsIDB4N2EsIDB4MDEsIDB4MjMsIDB4MTksIDB4NDMsIDB4MDEsIDB4NzIsCi0weDI5LCAweDRhLCAweGMwLCAweDQ2LCAweDAwLCAweDkyLCAweDI5LCAweDQ4LCAweDAxLCAweDZkLCAweDQyLCAweDZkLAotMHgwMCwgMHgyMCwgMHgyYiwgMHgxYywgMHgwMSwgMHhmMCwgMHhiMCwgMHhmYywgMHgwMCwgMHgyMCwgMHhmOCwgMHhiYywKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MjAsIDB4NjksIDB4MDEsIDB4MzAsIDB4MjAsIDB4NjEsIDB4MjMsIDB4NDksCi0weGM4LCAweDFkLCAweGI5LCAweDMwLCAweDAyLCAweDZiLCAweDkyLCAweDAwLCAweDUxLCAweDE4LCAweGMwLCAweDMxLAotMHgwZiwgMHg2MSwgMHgwMSwgMHg2YiwgMHgwMSwgMHgzMSwgMHg4OSwgMHgwNywgMHg4OSwgMHgwZiwgMHgwMSwgMHg2MywKLTB4MjAsIDB4NmIsIDB4YzIsIDB4MTksIDB4NjEsIDB4NmQsIDB4OGEsIDB4NDIsIDB4MDMsIDB4ZDgsIDB4MjMsIDB4MjIsCi0weDEyLCAweDA1LCAweDNhLCAweDQzLCAweDA1LCAweGUwLCAweDA5LCAweDFhLCAweDdlLCAweDFhLCAweDA3LCAweGQxLAotMHgyMywgMHgyMiwgMHgxMiwgMHgwNSwgMHgwYSwgMHg0MywgMHgwMCwgMHg5MiwgMHg2MSwgMHg2ZSwgMHgwOSwgMHgxOCwKLTB4YTIsIDB4NmUsIDB4MTAsIDB4ZTAsIDB4MTEsIDB4MjIsIDB4NTIsIDB4MDUsIDB4MGEsIDB4NDMsIDB4MDAsIDB4OTIsCi0weDYxLCAweDZlLCAweDA5LCAweDE4LCAweDAwLCAweDIwLCAweGEyLCAweDZlLCAweDJiLCAweDFjLCAweDAxLCAweGYwLAotMHg3ZCwgMHhmYywgMHgyMywgMHgyMiwgMHgxMiwgMHgwNSwgMHgzMiwgMHg0MywgMHgwMCwgMHg5MiwgMHg2MSwgMHg2ZSwKLTB4YTIsIDB4NmUsIDB4MDAsIDB4MjAsIDB4MmIsIDB4MWMsIDB4MDEsIDB4ZjAsIDB4NzMsIDB4ZmMsIDB4MjAsIDB4NmIsCi0weGMwLCAweDE5LCAweDAwLCAweDA5LCAweDAwLCAweDAxLCAweDYxLCAweDZkLCAweDgxLCAweDQyLCAweDAwLCAweGQ4LAotMHg0MCwgMHgxYSwgMHgyMCwgMHg2MywgMHgzOCwgMHgxYywgMHhiOCwgMHhlNywKLTB4NDQsIDB4ODAsIDB4MjAsIDB4NDAsIDB4MDQsIDB4MDAsIDB4MWIsIDB4MDIsIDB4N2MsIDB4MjksIDB4MDAsIDB4ODAsCi0weDY4LCAweDBlLCAweDAwLCAweDgwLCAweDgwLCAweGI1LCAweDAxLCAweDIwLCAweGMwLCAweDAzLCAweDBkLCAweDQ5LAotMHhjMCwgMHg0NiwgMHgwOCwgMHg2MCwgMHgwYywgMHg0OSwgMHhjOCwgMHgxZCwgMHg0OSwgMHgzMCwgMHgwMiwgMHg3YSwKLTB4MDAsIDB4MjcsIDB4MDAsIDB4MmEsIDB4MDMsIDB4ZDAsIDB4MDcsIDB4NzIsIDB4MDgsIDB4MWMsIDB4ZmYsIDB4ZjcsCi0weDM3LCAweGZmLCAweDA4LCAweDQ5LCAweGM4LCAweDFkLCAweDQ5LCAweDMwLCAweDAyLCAweDdhLCAweDAwLCAweDJhLAotMHgwMywgMHhkMCwgMHgwNywgMHg3MiwgMHgwOCwgMHgxYywgMHhmZiwgMHhmNywgMHgyZCwgMHhmZiwgMHg4MCwgMHhiYywKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4NjQsIDB4MmQsIDB4MDAsIDB4ODAsCi0weGU0LCAweDJjLCAweDAwLCAweDgwLCAweDkwLCAweGI1LCAweDA3LCAweDFjLCAweDEwLCAweDIwLCAweDE4LCAweDQ5LAotMHhjMCwgMHg0NiwgMHgwOCwgMHg2MCwgMHhmOCwgMHg2OCwgMHgwMSwgMHgzMCwgMHhmOCwgMHg2MCwgMHgxNiwgMHg0OCwKLTB4YzQsIDB4MWQsIDB4YjksIDB4MzQsIDB4NjEsIDB4NmIsIDB4ODksIDB4MDAsIDB4MDksIDB4MTgsIDB4YzAsIDB4MzEsCi0weDA5LCAweDY5LCAweDdhLCAweDY4LCAweDkyLCAweDAwLCAweGQyLCAweDE5LCAweDUxLCAweDY0LCAweDYxLCAweDZiLAotMHg4OSwgMHgwMCwgMHgwOCwgMHgxOCwgMHhjMCwgMHgzMCwgMHgwMSwgMHg2OSwgMHg3OCwgMHg2OCwgMHg4MCwgMHgwMCwKLTB4YzAsIDB4MTksIDB4YzAsIDB4NmIsIDB4MDEsIDB4ZjAsIDB4YTIsIDB4ZmEsIDB4MDEsIDB4MjMsIDB4NzgsIDB4NjgsCi0weDU4LCAweDQwLCAweDc4LCAweDYwLCAweDYwLCAweDZiLCAweDAxLCAweDMwLCAweDgwLCAweDA3LCAweDgwLCAweDBmLAotMHg2MCwgMHg2MywgMHhmOCwgMHgxZCwgMHgxOSwgMHgzMCwgMHg0MCwgMHg3OSwgMHgwMCwgMHgyOCwgMHgwMiwgMHhkMSwKLTB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4MDcsIDB4ZjgsIDB4OTAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weDAwLCAweDAwLCAweDAwLCAweGIwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweDkwLCAweGI1LCAweDA3LCAweDFjLAotMHgzOSwgMHg0OCwgMHhjMCwgMHg2OCwgMHgwMCwgMHgyOCwgMHgwNSwgMHhkMCwgMHhiOCwgMHg2YSwgMHhjMCwgMHg2OCwKLTB4ODAsIDB4MDksIDB4MDEsIDB4ZDMsIDB4MDIsIDB4MjAsIDB4MDAsIDB4ZTAsIDB4NzgsIDB4NmYsIDB4ZmMsIDB4ZjcsCi0weDU5LCAweGY4LCAweDA0LCAweDFjLCAweDA2LCAweGQxLCAweDAxLCAweDIwLCAweGY5LCAweDFkLCAweDE5LCAweDMxLAotMHgwOCwgMHg3MSwgMHg5MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHhmOCwgMHg2YywgMHgyZiwgMHg0OSwKLTB4YzAsIDB4NDYsIDB4MDgsIDB4NjAsIDB4YmEsIDB4NmEsIDB4MzgsIDB4MWMsIDB4MjEsIDB4MWMsIDB4MDAsIDB4ZjAsCi0weDU5LCAweGY4LCAweDY3LCAweDYyLCAweDAwLCAweDI4LCAweDAzLCAweGQxLCAweDIwLCAweDFjLCAweDAwLCAweGYwLAotMHgwYiwgMHhmZCwgMHhlYywgMHhlNywgMHhmOSwgMHg2ZCwgMHgwOSwgMHg2OCwgMHgwOSwgMHgxOCwgMHgwOSwgMHgwOSwKLTB4MDksIDB4MDEsIDB4N2EsIDB4NmQsIDB4OGEsIDB4NDIsIDB4MDAsIDB4ZDgsIDB4ODksIDB4MWEsIDB4YTEsIDB4NjIsCi0weGI5LCAweDY4LCAweDg5LCAweDAwLCAweGM5LCAweDE5LCAweDRhLCAweDZjLCAweDAwLCAweDJhLCAweDA3LCAweGQwLAotMHg0YSwgMHg2YywgMHgxMiwgMHgxYSwgMHg0YSwgMHg2NCwgMHg4MCwgMHgwOCwgMHg4MCwgMHgwMCwgMHhiOSwgMHg2YSwKLTB4MDgsIDB4MTgsIDB4YjgsIDB4NjIsIDB4MzgsIDB4NjgsIDB4YjksIDB4NmEsIDB4ODAsIDB4MDAsIDB4YzAsIDB4MTksCi0weDQyLCAweDZiLCAweDkxLCAweDQyLCAweDBlLCAweGQzLCAweDAwLCAweDIxLCAweDQxLCAweDY0LCAweGI4LCAweDZhLAotMHgzOSwgMHg2OCwgMHg4OSwgMHgwMCwgMHhjOSwgMHgxOSwgMHg0OSwgMHg2YiwgMHg0MCwgMHgxYSwgMHhiOCwgMHg2MiwKLTB4YjksIDB4NjgsIDB4ODksIDB4MDAsIDB4YzksIDB4MTksIDB4YzksIDB4NmIsIDB4NDAsIDB4MTgsIDB4YjgsIDB4NjIsCi0weGI4LCAweDY4LCAweDgxLCAweDAwLCAweGM5LCAweDE5LCAweDQ5LCAweDZjLCAweDAwLCAweDI5LCAweGI4LCAweGQxLAotMHhiOSwgMHg2YSwgMHhmYSwgMHg2YiwgMHg5MSwgMHg0MiwgMHhiNCwgMHhkMCwgMHgzYSwgMHg2YywgMHg5MSwgMHg0MiwKLTB4YjEsIDB4ZDAsIDB4MDEsIDB4MjMsIDB4NTgsIDB4NDAsIDB4YjgsIDB4NjAsIDB4ODAsIDB4MDAsIDB4YzAsIDB4MTksCi0weGMwLCAweDZiLCAweGMwLCAweDQ2LCAweGI4LCAweDYyLCAweGY4LCAweDY4LCAweDAwLCAweDI4LCAweDAxLCAweGQwLAotMHgwMSwgMHgzOCwgMHhmOCwgMHg2MCwgMHgzOCwgMHg2OSwgMHgwMCwgMHgyOCwgMHhhMSwgMHhkMCwgMHgwMSwgMHgzOCwKLTB4MzgsIDB4NjEsIDB4OWUsIDB4ZTcsIDB4NjgsIDB4MTksIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsCi0weGY3LCAweGI1LCAweDkwLCAweGIwLCAweDA0LCAweDFjLCAweDBkLCAweDFjLCAweDAwLCAweDIwLCAweDA1LCAweDkwLAotMHgwMiwgMHg5MCwgMHgwMCwgMHgyMiwgMHgwMSwgMHg5MiwgMHhmOSwgMHg0OCwgMHhjMCwgMHg2YSwgMHhjMCwgMHg0NiwKLTB4YTgsIDB4NjEsIDB4YTAsIDB4NjgsIDB4ODEsIDB4MDAsIDB4MDksIDB4MTksIDB4NDksIDB4NmIsIDB4YzAsIDB4NDYsCi0weDIwLCAweDYwLCAweGUxLCAweDYyLCAweDEyLCAweDlhLCAweGQwLCAweDY4LCAweGMwLCAweDQ2LCAweGE4LCAweDYwLAotMHgxMiwgMHg5YSwgMHg1MSwgMHg3OCwgMHhjMCwgMHg0NiwgMHgwYywgMHg5MSwgMHhmMCwgMHg0OCwgMHhjMCwgMHg0NiwKLTB4MDMsIDB4OTAsIDB4ZDcsIDB4MWQsIDB4MDksIDB4MzcsIDB4ZTAsIDB4NmEsCi0weGMxLCAweDFiLCAweDA5LCAweDA5LCAweGUzLCAweDFkLCAweDE5LCAweDMzLCAweDBjLCAweDlhLCAweGMwLCAweDQ2LAotMHgwZiwgMHg5MywgMHhlYiwgMHg0YiwgMHhjMCwgMHg0NiwgMHgwZSwgMHg5MywgMHg5MSwgMHg0MiwgMHgwMSwgMHhkMywKLTB4YjgsIDB4NDIsIDB4MjEsIDB4ZDgsIDB4ZTEsIDB4NjgsIDB4MDIsIDB4MjksIDB4MWUsIDB4ZDIsIDB4MDEsIDB4MjAsCi0weDBmLCAweDk5LCAweGMwLCAweDQ2LCAweDQ4LCAweDcxLCAweDAwLCAweDIwLCAweDAzLCAweDk5LCAweDAxLCAweGYwLAotMHg1NywgMHhmYiwgMHgwMCwgMHgyOCwgMHgwMywgMHhkMSwgMHgwZSwgMHg5YiwgMHhkOCwgMHg2YiwgMHgwMSwgMHgzMCwKLTB4ZDgsIDB4NjMsIDB4MDEsIDB4MjAsIDB4ODAsIDB4MDYsIDB4MDAsIDB4MjcsIDB4NjgsIDB4NjAsIDB4YWYsIDB4NjEsCi0weGRkLCAweDRhLCAweGMwLCAweDQ2LCAweDAwLCAweDkyLCAweGRkLCAweDQ4LCAweDAxLCAweDZkLCAweDQyLCAweDZkLAotMHhkYywgMHg0YiwgMHgwMCwgMHgyMCwgMHgwMSwgMHhmMCwgMHgzYSwgMHhmYiwgMHgzOCwgMHgxYywgMHg1YywgMHhlMywKLTB4YjgsIDB4NDIsIDB4MDMsIDB4ZDgsIDB4MjAsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4N2IsIDB4ZmMsIDB4MDcsIDB4MWMsCi0weGQ3LCAweDQ4LCAweGMwLCAweDY4LCAweDAwLCAweDI4LCAweDY0LCAweGQwLCAweDM4LCAweDc4LCAweDQwLCAweDA3LAotMHg0MCwgMHgwZiwgMHgwMywgMHgyOCwgMHg2MCwgMHhkMSwgMHgwNSwgMHg5OCwgMHgwMSwgMHgzMCwgMHgwMCwgMHgwNiwKLTB4MDAsIDB4MGUsIDB4MDUsIDB4OTAsIDB4MzgsIDB4NzgsIDB4ZjAsIDB4MjMsIDB4MTgsIDB4NDAsIDB4NTgsIDB4ZDEsCi0weGUwLCAweDZhLCAweGMwLCAweDFiLCAweDAwLCAweDA5LCAweDBjLCAweDk5LCAweDg4LCAweDQyLCAweDAyLCAweGQyLAotMHhlMCwgMHg2OCwgMHgwMiwgMHgyOCwgMHgwNSwgMHhkMywgMHhjYiwgMHg0OSwgMHg4OCwgMHg2OCwgMHgwMCwgMHhmMCwKLTB4ODMsIDB4ZmYsIDB4MDYsIDB4MWMsIDB4MDYsIDB4ZDEsIDB4MDMsIDB4OWIsIDB4MjgsIDB4MWMsIDB4MzksIDB4MWMsCi0weDIyLCAweDFjLCAweDAwLCAweGYwLCAweDhiLCAweGZjLCAweDE2LCAweGUxLCAweDJlLCAweDYyLCAweGY4LCAweDY4LAotMHgwMCwgMHgyOCwgMHgwZCwgMHhkMCwgMHhiOCwgMHg4OSwgMHgwMCwgMHgyOCwgMHgwMywgMHhkMCwgMHhjMSwgMHg0OSwKLTB4YzksIDB4NjgsIDB4MDAsIDB4ZjAsIDB4NzAsIDB4ZmYsIDB4ZjgsIDB4ODksIDB4MDAsIDB4MjgsIDB4MDMsIDB4ZDAsCi0weGJkLCAweDQ5LCAweGM5LCAweDY4LCAweDAwLCAweGYwLCAweDY5LCAweGZmLCAweDdhLCAweDY4LCAweGMwLCAweDQ2LAotMHg3MiwgMHg2MSwgMHhiOSwgMHg2OCwgMHhjMCwgMHg0NiwgMHhiMSwgMHg2MSwgMHgzMCwgMHgxYywgMHhiOCwgMHg0OSwKLTB4MDksIDB4NjgsIDB4MDAsIDB4ZjAsIDB4NWUsIDB4ZmYsIDB4MDAsIDB4MjgsIDB4MTcsIDB4ZDEsIDB4MzAsIDB4MWMsCi0weGI0LCAweDQ5LCAweDQ5LCAweDY4LCAweDAwLCAweGYwLCAweDU3LCAweGZmLCAweDEwLCAweDM3LCAweGUwLCAweDZhLAotMHhiOCwgMHg0MiwgMHgwMywgMHhkOCwgMHgyMCwgMHgxYywgMHgwMCwgMHhmMCwgMHgyNywgMHhmYywgMHgwNywgMHgxYywKLTB4NjgsIDB4NjgsIDB4YWYsIDB4NGIsIDB4MTgsIDB4NDMsIDB4NjgsIDB4NjAsIDB4MDAsIDB4MjAsIDB4YTgsIDB4NjEsCi0weGFjLCAweDIzLCAweGE4LCAweDY4LCAweDk4LCAweDQzLCAweGE4LCAweDYwLCAweGIwLCAweGUwLCAweGE4LCAweDY5LAotMHhhOCwgMHgyOCwgMHgwMSwgMHhkMiwgMHhhOCwgMHgyMCwgMHhhOCwgMHg2MSwgMHgxMCwgMHgzNywgMHhlMCwgMHg2YSwKLTB4YjgsIDB4NDIsIDB4NmMsIDB4ZDgsIDB4OWMsIDB4ZTAsIDB4YTUsIDB4ZTAsIDB4YTQsIDB4ZTAsIDB4MTAsIDB4MjgsCi0weDY4LCAweGQxLCAweDAzLCAweDIzLCAweDFiLCAweDA3LCAweDY4LCAweDY4LCAweDE4LCAweDQwLCAweDAxLCAweDBmLAotMHg0OCwgMHgwMSwgMHg0MCwgMHgxYSwgMHg4MCwgMHgwMCwgMHhhMCwgMHg0YSwgMHg4MiwgMHgxOCwgMHgwMSwgMHg5MiwKLTB4NzgsIDB4ODgsIDB4NDIsIDB4MGIsIDB4MzEsIDB4ZDMsIDB4ODIsIDB4MGIsIDB4MmYsIDB4ZDMsIDB4OWQsIDB4NDgsCi0weGMwLCAweDQ2LCAweDAzLCAweDkwLCAweDAyLCAweDIwLCAweDAxLCAweDlhLCAweGMwLCAweDQ2LCAweDEwLCAweDgwLAotMHg3OCwgMHg4OCwgMHgwMCwgMHgwNSwgMHgwMCwgMHgwZCwgMHgwMSwgMHg5YSwgMHhjMCwgMHg0NiwgMHg1MCwgMHg2MCwKLTB4YjgsIDB4NjgsIDB4MDEsIDB4OWEsIDB4YzAsIDB4NDYsIDB4OTAsIDB4NjAsIDB4NzgsIDB4NjgsIDB4MDEsIDB4OWEsCi0weGMwLCAweDQ2LCAweDEwLCAweDYyLCAweDAwLCAweDIwLCAweDAxLCAweDlhLCAweGMwLCAweDQ2LCAweDkwLCAweDY0LAotMHgwMSwgMHg5YSwgMHhjMCwgMHg0NiwgMHg5MCwgMHg2MywgMHg4OCwgMHgwMiwgMHg4ZiwgMHg0OSwgMHg0MCwgMHgxOCwKLTB4MDEsIDB4OWEsIDB4YzAsIDB4NDYsIDB4NTAsIDB4NjMsIDB4MDEsIDB4OWEsIDB4NTAsIDB4NjgsIDB4MzYsIDB4MzAsCi0weDk0LCAweDI4LCAweDAxLCAweGQ4LCAweDM4LCAweDIwLCAweDAwLCAweGUwLCAweDk0LCAweDIwLCAweGE4LCAweDYxLAotMHgxMCwgMHgzNywgMHhlMCwgMHg2YSwgMHhiOCwgMHg0MiwgMHgyOCwgMHhkOCwgMHg1OCwgMHhlMCwgMHg3YSwgMHg4OCwKLTB4OTIsIDB4MGIsIDB4MDMsIDB4ZDMsIDB4ODUsIDB4NDgsIDB4YzAsIDB4NDYsIDB4MDMsIDB4OTAsIDB4MjMsIDB4ZTAsCi0weDAxLCAweDIyLCAweDEyLCAweDAzLCAweDAyLCAweDQwLCAweDgzLCAweDRiLCAweDFkLCAweGQwLCAweDAzLCAweDkzLAotMHgwMCwgMHgwNSwgMHgwMCwgMHgwZCwgMHgwMSwgMHg5YSwgMHhjMCwgMHg0NiwgMHg1MCwgMHg2MCwgMHhiOCwgMHg2OCwKLTB4MDEsIDB4OWEsIDB4YzAsIDB4NDYsIDB4OTAsIDB4NjAsIDB4NzgsIDB4NjgsIDB4MDEsIDB4OWEsIDB4YzAsIDB4NDYsCi0weDEwLCAweDYyLCAweDAwLCAweDIwLCAweDAxLCAweDlhLCAweGMwLCAweDQ2LAotMHg5MCwgMHg2NCwgMHgwMSwgMHg5YSwgMHhjMCwgMHg0NiwgMHg5MCwgMHg2MywgMHg4OCwgMHgwMiwgMHg3NSwgMHg0OSwKLTB4NDAsIDB4MTgsIDB4MDEsIDB4OWEsIDB4YzAsIDB4NDYsIDB4NTAsIDB4NjMsIDB4MDIsIDB4ZTAsIDB4MzMsIDB4ZTAsCi0weDJhLCAweGUwLCAweDAzLCAweDkzLCAweDAxLCAweDIwLCAweDBmLCAweDk5LCAweGMwLCAweDQ2LCAweDQ4LCAweDcxLAotMHgxMiwgMHg5YSwgMHg1MCwgMHg3OCwgMHgwNSwgMHg5OSwgMHg0MywgMHgxYSwgMHgwYiwgMHg5MywgMHgxMCwgMHgzNywKLTB4ZTAsIDB4NmEsIDB4YjgsIDB4NDIsIDB4MDMsIDB4ZDgsIDB4MjAsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4OTIsIDB4ZmIsCi0weDA3LCAweDFjLCAweDAxLCAweDlhLCAweDUwLCAweDZiLCAweDkxLCAweDZiLCAweDA5LCAweDAxLCAweDQwLCAweDE4LAotMHgwYiwgMHg5YiwgMHgyMSwgMHgxYywgMHgzYSwgMHgxYywgMHhmZiwgMHhmNywgMHg3ZCwgMHhmYiwgMHgwMSwgMHg5YSwKLTB4YzAsIDB4NDYsIDB4ZDAsIDB4NjQsIDB4MDEsIDB4OWEsIDB4MGIsIDB4OWIsIDB4YzAsIDB4NDYsIDB4MTMsIDB4NjUsCi0weDAxLCAweDIzLCAweDViLCAweDA2LCAweDY4LCAweDY4LCAweDE4LCAweDQzLCAweDY4LCAweDYwLCAweDAwLCAweDIwLAotMHhhOCwgMHg2MSwgMHgwZCwgMHhlMCwgMHgxMCwgMHgzNywgMHhlMCwgMHg2YSwgMHhiOCwgMHg0MiwgMHgwMywgMHhkOCwKLTB4MjAsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4NzEsIDB4ZmIsIDB4MDcsIDB4MWMsIDB4MzgsIDB4NzgsIDB4NDAsIDB4MDcsCi0weDQwLCAweDBmLCAweDAzLCAweDI4LCAweDAwLCAweGQxLCAweGY4LCAweGU2LCAweGE4LCAweDY5LCAweDAzLCAweDk5LAotMHgwMSwgMHhmMCwgMHgyNiwgMHhmYSwgMHgwMCwgMHgyOCwgMHgyYSwgMHhkMSwgMHgzOCwgMHgxYywgMHgyMSwgMHgxYywKLTB4MDAsIDB4ZjAsIDB4NzksIDB4ZmIsIDB4YTgsIDB4NjgsIDB4ODAsIDB4MDksIDB4MDQsIDB4ZDMsIDB4MzAsIDB4MWMsCi0weDQ5LCAweDQ5LCAweDQ5LCAweDY4LCAweDAwLCAweGYwLCAweDgxLCAweGZlLCAweDQxLCAweDQ5LCAweDAwLCAweDIwLAotMHgwMSwgMHhmMCwgMHgxNCwgMHhmYSwgMHgwMCwgMHgyOCwgMHgwNCwgMHhkMSwgMHgwZSwgMHg5YiwgMHhkOCwgMHg2YiwKLTB4MDEsIDB4MzAsIDB4ZDgsIDB4NjMsIDB4MTEsIDB4ZTAsIDB4MDEsIDB4MjAsIDB4MGYsIDB4OTksIDB4YzAsIDB4NDYsCi0weDQ4LCAweDcxLCAweDgwLCAweDA2LCAweDAwLCAweDI3LCAweDY4LCAweDYwLCAweGFmLCAweDYxLCAweDNhLCAweDRhLAotMHhjMCwgMHg0NiwgMHgwMCwgMHg5MiwgMHgzOSwgMHg0OCwgMHgwMSwgMHg2ZCwgMHg0MiwgMHg2ZCwgMHgzOSwgMHg0YiwKLTB4MDAsIDB4MjAsIDB4MDEsIDB4ZjAsIDB4ZjMsIDB4ZjksIDB4MDAsIDB4MjAsIDB4MTUsIDB4ZTIsIDB4MDUsIDB4OTgsCi0weDBjLCAweDk5LCAweDA4LCAweDFhLCAweDAwLCAweDA0LCAweDAwLCAweDBjLCAweDBjLCAweDkwLCAweDBiLCAweDkwLAotMHgwYywgMHg5OCwgMHgwMCwgMHgyOCwgMHgwMywgMHhkMCwgMHgwMSwgMHgyMCwgMHgwZiwgMHg5OSwgMHhjMCwgMHg0NiwKLTB4NDgsIDB4NzEsIDB4MjgsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MDQsIDB4OTAsIDB4MDAsIDB4MjYsIDB4MDAsIDB4MjAsCi0weDA4LCAweDkwLCAweDAwLCAweDIyLCAweDBhLCAweDkyLCAweDBjLCAweDk4LCAweDAxLCAweDM4LCAweDBkLCAweDkwLAotMHhhMywgMHhlMCwgMHg3OCwgMHg4OCwgMHg4YSwgMHgxYiwgMHgxMiwgMHgwNCwgMHgxMiwgMHgwYywgMHg5MCwgMHg0MiwKLTB4MDUsIDB4ZGQsIDB4MDcsIDB4OTIsIDB4ODAsIDB4MWEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MGMsIDB4MDgsIDB4OTAsCi0weDAwLCAweGUwLCAweDA3LCAweDkwLCAweDA4LCAweDk4LCAweDAwLCAweDI4LCAweDA3LCAweGQxLCAweDBkLCAweDk4LAotMHgwYSwgMHg5YSwgMHg5MCwgMHg0MiwgMHgwNywgMHhkZCwgMHgwNywgMHg5OCwgMHgzMCwgMHgxOCwgMHg4OCwgMHg0MiwKLTB4MDMsIDB4ZDgsIDB4MDEsIDB4MjAsIDB4NDAsIDB4MDUsIDB4MDYsIDB4OTAsIDB4MWMsIDB4ZTAsIDB4MTEsIDB4MjAsCi0weDQwLCAweDA1LCAweDA2LCAweDkwLCAweGE4LCAweDY4LCAweDhjLCAweDIzLCAweDE4LCAweDQwLCAweDAyLCAweGQxLAotMHgyMCwgMHg0OCwgMHhjMCwgMHg0NiwgMHgwNiwgMHg5MCwgMHhiMSwgMHgwNywgMHg4OSwgMHgwZiwgMHgwZiwgMHhkMCwKLTB4MDcsIDB4OTgsIDB4YzAsIDB4MDYsIDB4YzAsIDB4MGUsIDB4MDgsIDB4ZDAsIDB4MWUsIDB4MjgsIDB4MDksIDB4ZGIsCi0weDFlLCAweDI4LCAweDAyLCAweGQxLCAweDAzLCAweDI5LCAweDA1LCAweGQxLCAweDAxLCAweGUwLCAweDAyLCAweDI5LAotMHgwMiwgMHhkMywgMHgwMSwgMHgyMCwgMHgwMiwgMHg5MCwgMHhkZSwgMHhlNywgMHgwYSwgMHg5YSwgMHgwMCwgMHgyYSwKLTB4MDQsIDB4ZDEsIDB4MDEsIDB4MjMsIDB4ZGIsIDB4MDUsIDB4MDYsIDB4OTgsIDB4MTgsIDB4NDMsIDB4MDYsIDB4OTAsCi0weDA3LCAweDk4LCAweDA2LCAweDk5LCAweDA4LCAweDQzLCAweDAyLCAweDFjLCAweDAwLCAweDkwLCAweDA0LCAweDk4LAotMHg4MywgMHgxOSwgMHgxZCwgMHhlMCwgMHhlOCwgMHgwZSwgMHgwMCwgMHg4MCwgMHgwMSwgMHg0OSwgMHhmZiwgMHhmZiwKLTB4MjgsIDB4MGYsIDB4MDAsIDB4ODAsIDB4MDQsIDB4MDAsIDB4MTIsIDB4MDIsIDB4N2MsIDB4MjksIDB4MDAsIDB4ODAsCi0weDQ0LCAweDgwLCAweDIwLCAweDQwLCAweDY4LCAweDE5LCAweDAwLCAweDgwLCAweDYwLCAweDA0LCAweDAwLCAweDgwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1YywgMHgyYiwgMHgwMCwgMHg4MCwgMHg1NSwgMHgzMiwgMHhmZiwgMHhmZiwKLTB4YWMsIDB4NWUsIDB4MjEsIDB4NDAsIDB4MGQsIDB4M2QsIDB4ZmYsIDB4ZmYsIDB4Y2QsIDB4MzEsIDB4ZmYsIDB4ZmYsCi0weDAwLCAweDAwLCAweDMyLCAweDAyLCAweDAwLCAweDIwLCAweDNhLCAweDFkLCAweDA2LCAweGNhLCAweDAxLCAweGYwLAotMHg2YiwgMHhmOSwgMHgwNywgMHg5OCwgMHgzNiwgMHgxOCwgMHgwMiwgMHg5OCwKLTB4MDAsIDB4MjgsIDB4MTYsIDB4ZDAsIDB4YTgsIDB4NjgsIDB4OGMsIDB4MjMsIDB4MTgsIDB4NDAsIDB4MDQsIDB4ZDEsCi0weDA5LCAweDIzLCAweDViLCAweDA0LCAweDA2LCAweDk4LCAweDE4LCAweDQzLCAweDA2LCAweDkwLCAweDA2LCAweDk4LAotMHhjMiwgMHg0YSwgMHgwMiwgMHg0MywgMHgwMCwgMHg5MiwgMHgwNCwgMHg5OCwgMHg4MywgMHgxOSwgMHhjMSwgMHg0OCwKLTB4MDEsIDB4NmQsIDB4NDIsIDB4NmQsIDB4MDAsIDB4MjAsIDB4MDEsIDB4ZjAsIDB4NTEsIDB4ZjksIDB4MDAsIDB4MjAsCi0weDAyLCAweDkwLCAweDA4LCAweDk4LCAweDAwLCAweDI4LCAweDBiLCAweGQxLCAweDBiLCAweDliLCAweDAxLCAweDNiLAotMHgwYiwgMHg5MywgMHgxMCwgMHgzNywgMHhlMCwgMHg2YSwgMHhiOCwgMHg0MiwgMHgwYywgMHhkOCwgMHgyMCwgMHgxYywKLTB4MDAsIDB4ZjAsIDB4OGEsIDB4ZmEsIDB4MDcsIDB4MWMsIDB4MDcsIDB4ZTAsIDB4NzgsIDB4NjgsIDB4MDcsIDB4OWEsCi0weDgwLCAweDE4LCAweDc4LCAweDYwLCAweDc4LCAweDg4LCAweDA3LCAweDlhLCAweDgwLCAweDFhLCAweDc4LCAweDgwLAotMHgwYSwgMHg5YSwgMHg1MCwgMHgxYywgMHgwMiwgMHgwNCwgMHgxMiwgMHgwYywgMHgwYSwgMHg5MiwgMHgwYywgMHg5OCwKLTB4MGEsIDB4OWEsIDB4ODIsIDB4NDIsIDB4MDMsIDB4ZGEsIDB4YTksIDB4NjksIDB4YjEsIDB4NDIsIDB4MDAsIDB4ZDksCi0weDUzLCAweGU3LCAweGE4LCAweDY5LCAweGIwLCAweDQyLCAweDZiLCAweGQxLCAweGE4LCAweDY4LCAweDAxLCAweDA5LAotMHg2OSwgMHhkMiwgMHgwOCwgMHg5YSwgMHgwMCwgMHgyYSwgMHg1NiwgMHhkMCwgMHgwYywgMHg5OSwgMHgwYSwgMHg5YSwKLTB4OGEsIDB4NDIsIDB4M2UsIDB4ZGIsIDB4YjEsIDB4MDcsIDB4ODksIDB4MGYsIDB4MGMsIDB4ZDAsIDB4MDgsIDB4OWEsCi0weGQyLCAweDA2LCAweGQyLCAweDBlLCAweDBiLCAweGQwLCAweDFlLCAweDJhLCAweDA2LCAweGRiLCAweDFlLCAweDJhLAotMHgwMiwgMHhkMSwgMHgwMywgMHgyOSwgMHgwNSwgMHhkMCwgMHgwMSwgMHhlMCwgMHgwMiwgMHgyOSwgMHgwMiwgMHhkMiwKLTB4MDIsIDB4OTksIDB4MDAsIDB4MjksIDB4MjEsIDB4ZDAsIDB4MDgsIDB4OWEsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTIsCi0weDA0LCAweDk4LCAweDgzLCAweDE5LCAweDAwLCAweDIwLCAweDNhLCAweDFkLCAweDA2LCAweGNhLCAweDAxLCAweGYwLAotMHgwMSwgMHhmOSwgMHgwOCwgMHg5OCwgMHgzNiwgMHgxOCwgMHhhOCwgMHg2OCwgMHg4YywgMHgyMywgMHgxOCwgMHg0MCwKLTB4MDIsIDB4ZDAsIDB4MDEsIDB4MjAsIDB4NDAsIDB4MDYsIDB4MDAsIDB4ZTAsIDB4OTIsIDB4NDgsIDB4MDEsIDB4MjIsCi0weDAyLCAweDQzLCAweDAwLCAweDkyLCAweDA0LCAweDk4LCAweDgzLCAweDE5LCAweDhlLCAweDQ4LCAweDAxLCAweDZkLAotMHg0MiwgMHg2ZCwgMHgwMCwgMHgyMCwgMHgwMSwgMHhmMCwgMHhlYywgMHhmOCwgMHgwMCwgMHgyMCwgMHgwMiwgMHg5MCwKLTB4MTUsIDB4ZTAsIDB4OGMsIDB4MjMsIDB4MTgsIDB4NDAsIDB4MDIsIDB4ZDAsIDB4MDEsIDB4MjAsIDB4NDAsIDB4MDYsCi0weDAwLCAweGUwLCAweDg4LCAweDQ4LCAweDA4LCAweDlhLCAweDAyLCAweDQzLCAweDAwLCAweGUwLCAweDA4LCAweDlhLAotMHhjMCwgMHg0NiwgMHgwMCwgMHg5MiwgMHgwNCwgMHg5OCwgMHg4MywgMHgxOSwgMHgwMCwgMHgyMCwgMHgzYSwgMHgxZCwKLTB4MDYsIDB4Y2EsIDB4MDEsIDB4ZjAsIDB4ZDUsIDB4ZjgsIDB4MDgsIDB4OTgsIDB4MzYsIDB4MTgsIDB4MTAsIDB4MzcsCi0weGUwLCAweDZhLCAweGI4LCAweDQyLCAweDAzLCAweGQ4LCAweDIwLCAweDFjLCAweDAwLCAweGYwLCAweDE0LCAweGZhLAotMHgwNywgMHgxYywgMHg2OCwgMHg2OCwgMHg4MCwgMHgwZSwgMHg2YiwgMHhkMiwgMHgwYSwgMHg5OCwgMHhjMCwgMHg0NiwKLTB4MDksIDB4OTAsIDB4MGMsIDB4OTksIDB4ODgsIDB4NDIsIDB4NWMsIDB4ZGEsIDB4MGQsIDB4OTgsIDB4MDksIDB4OTksCi0weDg4LCAweDQyLCAweDAzLCAweGQwLCAweDdhLCAweDg4LCAweDFlLCAweGUwLCAweDVmLCAweGUwLCAweDVlLCAweGUwLAotMHg3OCwgMHg4OCwgMHgwMSwgMHgyMiwgMHg1MiwgMHgwNiwgMHgwMiwgMHg0MywgMHhhOSwgMHg2OCwgMHg4YywgMHgyMywKLTB4MTksIDB4NDAsIDB4MDIsIDB4ZDEsIDB4MDksIDB4MjMsIDB4NWIsIDB4MDQsIDB4MWEsIDB4NDMsIDB4YjEsIDB4MDcsCi0weDg5LCAweDBmLCAweDBlLCAweGQwLCAweGMzLCAweDA2LCAweGRiLCAweDBlLCAweDA4LCAweGQwLCAweDFlLCAweDJiLAotMHgwOSwgMHhkYiwgMHgxZSwgMHgyYiwgMHgwMiwgMHhkMSwgMHgwMywgMHgyOSwgMHgwNSwgMHhkMSwgMHgwMSwgMHhlMCwKLTB4MDIsIDB4MjksIDB4MDIsIDB4ZDMsIDB4MDEsIDB4MjEsIDB4MDIsIDB4OTEsIDB4MDIsIDB4MWMsIDB4MDksIDB4OTgsCi0weDAwLCAweDI4LCAweDAyLCAweGQxLCAweDAxLCAweDIzLCAweGRiLCAweDA1LCAweDFhLCAweDQzLCAweDAwLCAweDkyLAotMHgwNCwgMHg5OCwgMHg4MywgMHgxOSwgMHgwMCwgMHgyMCwgMHgzYSwgMHgxZCwgMHgwNiwgMHhjYSwgMHgwMSwgMHhmMCwKLTB4OGYsIDB4ZjgsIDB4NzgsIDB4ODgsIDB4ODYsIDB4MTksIDB4MTAsIDB4MzcsIDB4MDIsIDB4OTgsIDB4MDAsIDB4MjgsCi0weDE0LCAweGQwLCAweGE4LCAweDY4LCAweDhjLCAweDIzLCAweDE4LCAweDQwLCAweDAyLCAweGQwLCAweDAxLCAweDIwLAotMHg0MCwgMHgwNiwgMHgwMCwgMHhlMCwgMHg1NywgMHg0OCwgMHgwMSwgMHgyMiwgMHgwMiwgMHg0MywgMHgwMCwgMHg5MiwKLTB4MDQsIDB4OTgsIDB4ODMsIDB4MTksIDB4NTMsIDB4NDgsIDB4MDEsIDB4NmQsIDB4NDIsIDB4NmQsIDB4MDAsIDB4MjAsCi0weDAxLCAweGYwLCAweDc2LCAweGY4LCAweDAwLCAweDIwLCAweDAyLCAweDkwLCAweGUwLCAweDZhLCAweGI4LCAweDQyLAotMHgwMywgMHhkOCwgMHgyMCwgMHgxYywgMHgwMCwgMHhmMCwgMHhiNiwgMHhmOSwgMHgwNywgMHgxYywgMHgwOSwgMHg5OCwKLTB4MDEsIDB4MzAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MGMsIDB4MDksIDB4OTAsCi0weDBjLCAweDk5LCAweDg4LCAweDQyLCAweGEyLCAweGRiLCAweDY4LCAweDY4LCAweDMwLCAweDQzLCAweDAxLCAweDA0LAotMHgwOSwgMHgwYywgMHg2OCwgMHg2MCwgMHhlOCwgMHg2YSwgMHgwMCwgMHhmMCwgMHg3YiwgMHhmYSwgMHgyOCwgMHhlMCwKLTB4MjcsIDB4ZTAsIDB4YTgsIDB4NjgsIDB4MDAsIDB4MDksIDB4MTQsIDB4ZDMsIDB4NjgsIDB4NjgsIDB4ODAsIDB4MGUsCi0weDE1LCAweGQyLCAweDAxLCAweDlhLCAweDAwLCAweDJhLCAweDEyLCAweGQwLCAweDAxLCAweDlhLCAweDUwLCAweDZiLAotMHgwYiwgMHg5YiwgMHgyMSwgMHgxYywgMHgzYSwgMHgxYywgMHhmZiwgMHhmNywgMHg4OSwgMHhmOSwgMHgwMSwgMHg5YSwKLTB4YzAsIDB4NDYsIDB4OTAsIDB4NjQsIDB4MDEsIDB4OWEsIDB4MGIsIDB4OWIsIDB4YzAsIDB4NDYsIDB4OTMsIDB4NjMsCi0weDAzLCAweGUwLCAweGU4LCAweDZhLCAweDMxLCAweDFjLCAweDAwLCAweGYwLCAweDVkLCAweGZhLCAweDY4LCAweDY4LAotMHgzMCwgMHg0MywgMHg2OCwgMHg2MCwgMHhhOCwgMHg2OSwgMHhiMCwgMHg0MiwgMHgwNSwgMHhkOSwgMHgwMCwgMHgwNCwKLTB4MDAsIDB4MGMsIDB4ODAsIDB4MWIsIDB4MDAsIDB4ZjAsIDB4ZWUsIDB4ZjksIDB4YWUsIDB4NjEsIDB4YTgsIDB4NjgsCi0weDhjLCAweDIzLCAweDE4LCAweDQwLCAweDBiLCAweGQwLCAweDJmLCAweDRhLCAweGMwLCAweDQ2LCAweDAwLCAweDkyLAotMHgwNCwgMHg5OCwgMHhjMywgMHgxZiwgMHgwNSwgMHgzYiwgMHgyYSwgMHg0OCwgMHgwMSwgMHg2ZCwgMHg0MiwgMHg2ZCwKLTB4MDAsIDB4MjAsIDB4MDEsIDB4ZjAsIDB4MjMsIDB4ZjgsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MjAsIDB4NmQsCi0weDE4LCAweDQzLCAweDAwLCAweDY4LCAweGMwLCAweDQ2LCAweGEwLCAweDYxLCAweGUxLCAweDY5LCAweDgxLCAweDQyLAotMHgxMiwgMHhkMCwgMHgyMiwgMHg2OSwgMHgwMiwgMHgyYSwgMHgwZiwgMHhkMiwgMHg0MSwgMHgxYSwgMHgwMSwgMHhkNSwKLTB4NjAsIDB4NmQsIDB4NDEsIDB4MTgsIDB4MjAsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4M2YsIDB4ZmIsIDB4ZTEsIDB4NjksCi0weDQwLCAweDE4LCAweGUwLCAweDYxLCAweDYxLCAweDZkLCAweDg4LCAweDQyLCAweDI0LCAweGQzLCAweDQwLCAweDFhLAotMHhlMCwgMHg2MSwgMHgyMSwgMHhlMCwgMHg4MSwgMHg0MiwgMHgxZiwgMHhkMSwgMHgyMCwgMHg2OSwgMHgwMiwgMHgyOCwKLTB4MWMsIDB4ZDIsIDB4MDEsIDB4MjAsIDB4NjAsIDB4NjEsIDB4MTgsIDB4NDgsIDB4NDEsIDB4NjksIDB4ZTIsIDB4NmMsCi0weDBhLCAweDQzLCAweDQyLCAweDYxLCAweDgxLCAweDY5LCAweGUzLCAweDZjLCAweDk5LCAweDQzLCAweDgxLCAweDYxLAotMHgwMSwgMHgyMSwgMHgwOSwgMHgwNSwgMHhjYSwgMHg2MCwgMHg4MCwgMHg2OSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg2MSwKLTB4OGIsIDB4MDIsIDB4MjAsIDB4NmQsIDB4MTgsIDB4NDMsIDB4MDAsIDB4NjgsIDB4YzAsIDB4NDYsIDB4YTAsIDB4NjEsCi0weGUxLCAweDY5LCAweDgxLCAweDQyLCAweDAyLCAweGQwLCAweDIwLCAweDFjLCAweGZmLCAweGY3LCAweGNjLCAweGZhLAotMHgyOCwgMHgxYywgMHgwMCwgMHhmMCwgMHgwZiwgMHhmOSwgMHgwYywgMHg5OCwgMHgwNSwgMHg5OSwgMHg0MCwgMHgxOCwKLTB4MDAsIDB4MDEsIDB4MTAsIDB4MzAsIDB4NjgsIDB4NjEsIDB4MTMsIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsCi0weDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAyLCAweDdjLCAweDI5LCAweDAwLCAweDgwLAotMHgwMCwgMHgwMCwgMHgxMiwgMHgwMiwgMHgwNCwgMHgwMCwgMHg1MiwgMHgwMiwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwKLTB4ZjAsIDB4YjUsIDB4NDAsIDB4MjAsIDB4MmQsIDB4NDksIDB4YzAsIDB4NDYsIDB4MDgsIDB4NjAsIDB4MDAsIDB4ZjAsCi0weDAzLCAweGY5LCAweDA3LCAweDFjLCAweDgxLCAweDY5LCAweDQ0LCAweDZhLCAweGEwLCAweDZmLCAweDAwLCAweGYwLAotMHg0NSwgMHhmZSwgMHgwMCwgMHgyMCwgMHhlMSwgMHgxZCwgMHgxOSwgMHgzMSwgMHg0OCwgMHg3MSwgMHg3OSwgMHg2OCwKLTB4YzksIDB4MGUsIDB4MDksIDB4ZDMsIDB4ZjgsIDB4NmEsIDB4MDAsIDB4MDEsIDB4MjQsIDB4NDksIDB4NDAsIDB4MTgsCi0weDI0LCAweDRiLCAweGMwLCAweDE4LCAweDAxLCAweDY4LCAweDAxLCAweDM5LCAweDAxLCAweDYwLCAweDM2LCAweGUwLAotMHhlMSwgMHg2ZCwgMHgwOSwgMHg2OCwgMHgyMiwgMHg2ZSwgMHhjMCwgMHg0NiwgMHgxMSwgMHg2MCwgMHgyMCwgMHg0ZSwKLTB4ZjUsIDB4MWQsIDB4NzksIDB4MzUsIDB4MDEsIDB4MjMsIDB4ZTksIDB4NmIsIDB4MTksIDB4NDMsIDB4ZTksIDB4NjMsCi0weGI5LCAweDZhLCAweGUyLCAweDZkLCAweGMwLCAweDQ2LCAweDExLCAweDYwLCAweGI5LCAweDZhLCAweDIyLCAweDZlLAotMHhjMCwgMHg0NiwgMHgxMSwgMHg2MCwgMHg2MSwgMHg2OSwgMHgwMCwgMHgyOSwgMHgwNCwgMHhkMSwgMHhhOSwgMHg2YiwKLTB4MDEsIDB4MzEsIDB4YTksIDB4NjMsIDB4MDgsIDB4MjksIDB4MDcsIDB4ZDMsIDB4YTgsIDB4NjMsIDB4MDEsIDB4MjAsCi0weDAwLCAweGYwLCAweDg2LCAweGY4LCAweGU4LCAweDZiLCAweDQwLCAweDA4LCAweDQwLCAweDAwLCAweGU4LCAweDYzLAotMHg3OCwgMHg2OCwgMHg4MSwgMHgwZSwgMHgwZiwgMHhkMiwgMHgwYiwgMHgyMywgMHgxYiwgMHgwMiwgMHhmMSwgMHgxOCwKLTB4YzksIDB4NjgsIDB4MDAsIDB4MjksIDB4MDYsIDB4ZDAsIDB4MDAsIDB4MDgsIDB4MDQsIDB4ZDIsIDB4MjAsIDB4MWMsCi0weDM5LCAweDFjLCAweDAwLCAweGYwLCAweDQzLCAweGY4LCAweDAyLCAweGUwLCAweDM4LCAweDFjLCAweDAwLCAweGYwLAotMHgwNSwgMHhmYSwgMHgzOCwgMHgxYywgMHhmYiwgMHhmNywgMHgwNiwgMHhmYywgMHgyMCwgMHgxYywgMHgwMCwgMHhmMCwKLTB4MGIsIDB4ZjgsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsCi0weGEwLCAweDFjLCAweDAwLCAweDgwLCAweGI0LCAweDBjLCAweDAwLCAweDAwLAotMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHg4MCwgMHhiNSwgMHgwNywgMHgxYywgMHhmOCwgMHgxZCwgMHgxOSwgMHgzMCwKLTB4MDEsIDB4NzksIDB4MDAsIDB4MjksIDB4MDQsIDB4ZDAsIDB4MDAsIDB4MjEsIDB4MDEsIDB4NzEsIDB4MzgsIDB4MWMsCi0weGZmLCAweGY3LCAweDU2LCAweGZiLCAweGY4LCAweDY4LCAweDAyLCAweDI4LCAweDBkLCAweGQwLCAweGI4LCAweDY4LAotMHg4MCwgMHgwMCwgMHhjMiwgMHgxOSwgMHg1MCwgMHg2YywgMHgwMCwgMHgyOCwgMHgxMSwgMHhkMCwgMHhiOCwgMHg2YSwKLTB4NDEsIDB4NzgsIDB4MDksIDB4MDEsIDB4MTAsIDB4MzEsIDB4NTIsIDB4NmIsIDB4MTAsIDB4MWEsIDB4ODgsIDB4NDIsCi0weDA1LCAweGQzLCAweDM4LCAweDFjLCAweGZmLCAweGY3LCAweDQyLCAweGZiLCAweDgwLCAweGJjLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHgzOCwgMHgxYywgMHhmZiwgMHhmNywgMHgyOCwgMHhmYSwgMHhmOCwgMHhlNywgMHg3OCwgMHg2OCwKLTB4ODAsIDB4MDAsIDB4YzAsIDB4MTksIDB4YzAsIDB4NmIsIDB4YzAsIDB4NDYsIDB4YjgsIDB4NjIsIDB4ZjEsIDB4ZTcsCi0weGIwLCAweGI1LCAweDg3LCAweGIwLCAweDBmLCAweDFjLCAweDgwLCAweDZmLCAweGMwLCAweDQ2LCAweDAwLCAweDkwLAotMHgwMCwgMHgyNCwgMHgxMywgMHg0ZCwgMHgwYiwgMHgyMywgMHgxYiwgMHgwMiwgMHhlOCwgMHgxOCwgMHg4MCwgMHg2OSwKLTB4MDAsIDB4MjgsIDB4MTcsIDB4ZDAsIDB4NjksIDB4NDYsIDB4YTIsIDB4MDAsIDB4NTIsIDB4MTksIDB4MGIsIDB4MjMsCi0weDFiLCAweDAyLCAweGQyLCAweDE4LCAweDkyLCAweDY5LCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAweDkyLCAweGZiLAotMHgwMCwgMHgyOCwgMHgwOSwgMHhkMSwgMHgwMSwgMHgzNCwgMHhhMCwgMHgwMCwgMHg0MCwgMHgxOSwgMHgwYiwgMHgyMywKLTB4MWIsIDB4MDIsIDB4YzAsIDB4MTgsIDB4ODAsIDB4NjksIDB4MDAsIDB4MjgsIDB4ZWEsIDB4ZDEsIDB4MDEsIDB4ZTAsCi0weDAxLCAweDI4LCAweDAyLCAweGQwLCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAweDlkLCAweGY5LCAweDA3LCAweGIwLAotMHhiMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwKLTB4YjgsIDB4YjUsIDB4YzIsIDB4MDcsIDB4ZDIsIDB4MGYsIDB4MTYsIDB4NGMsIDB4MTYsIDB4NDksIDB4MDEsIDB4ZDAsCi0weDA4LCAweDIyLCAweDA4LCAweGUwLCAweDgyLCAweDA4LCAweDA1LCAweGQzLCAweDBjLCAweDIyLCAweGE0LCAweDE4LAotMHgwYiwgMHg2OCwgMHhkZiwgMHgxZCwgMHgxNSwgMHgzNywgMHgwMywgMHhlMCwgMHgxYywgMHgyMiwgMHgwYiwgMHg2OCwKLTB4ZGYsIDB4MWQsIDB4MDksIDB4MzcsIDB4MGYsIDB4NGIsIDB4MWQsIDB4NzgsIDB4MDAsIDB4MmQsIDB4MTMsIDB4ZDAsCi0weDViLCAweDc4LCAweDAwLCAweDJiLCAweDEwLCAweGQwLCAweDAxLCAweDIzLCAweDViLCAweDA2LCAweDFhLCAweDQzLAotMHgwMCwgMHgyOCwgMHgwMSwgMHhkMSwgMHg1YiwgMHgwOCwgMHgxYSwgMHg0MywgMHgwMCwgMHg5MiwgMHg0YSwgMHg2OCwKLTB4MDEsIDB4MjAsIDB4MzksIDB4MWMsIDB4MjMsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4ZGYsIDB4ZmUsIDB4YjgsIDB4YmMsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAzLCAweDIzLCAweDFiLCAweDA2LCAweDFhLCAweDQzLCAweGYxLCAweGU3LAotMHg5MCwgMHhlZSwgMHgyMCwgMHg0MCwgMHg3YywgMHgyOSwgMHgwMCwgMHg4MCwgMHhmOCwgMHgwZSwgMHgwMCwgMHg4MCwKLTB4MDAsIDB4MjEsIDB4YzEsIDB4NjEsIDB4MDUsIDB4NDksIDB4OGEsIDB4NjgsIDB4MDAsIDB4MmEsIDB4MDEsIDB4ZDEsCi0weDg4LCAweDYwLCAweDAyLCAweGUwLCAweGNhLCAweDY4LCAweGMwLCAweDQ2LCAweGQwLCAweDYxLCAweGM4LCAweDYwLAotMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHgyOCwgMHgwZiwgMHgwMCwgMHg4MCwgMHgwMywgMHg0OSwgMHg4OCwgMHg2OCwKLTB4MDAsIDB4MjgsIDB4MDIsIDB4ZDAsIDB4YzIsIDB4NjksIDB4YzAsIDB4NDYsIDB4OGEsIDB4NjAsIDB4NzAsIDB4NDcsCi0weDI4LCAweDBmLCAweDAwLCAweDgwLCAweDAxLCAweDFjLCAweDAxLCAweDIzLCAweDg4LCAweDY4LCAweDU4LCAweDQwLAotMHg4OCwgMHg2MCwgMHhjYSwgMHg2OCwgMHgwMSwgMHgzYSwgMHhjYSwgMHg2MCwgMHgwYSwgMHg2OSwgMHgwMSwgMHgzYSwKLTB4ODAsIDB4MDAsIDB4MGEsIDB4NjEsIDB4NDIsIDB4MTgsIDB4ZDAsIDB4NmIsIDB4NTMsIDB4NmIsIDB4YzAsIDB4NDYsCi0weGNiLCAweDYyLCAweDBiLCAweDY4LCAweDliLCAweDAwLCAweDU5LCAweDE4LCAweDQ5LCAweDZjLCAweDUzLCAweDZjLAotMHhjOSwgMHgxOCwgMHg1MSwgMHg2NCwgMHg3MCwgMHg0NywgMHg4YSwgMHg2OCwgMHg5MiwgMHgwMCwgMHg1MiwgMHgxOCwKLTB4ZDMsIDB4NmIsIDB4ODMsIDB4NDIsIDB4MTcsIDB4ZDEsIDB4ZDAsIDB4MWQsIDB4M2QsIDB4MzAsIDB4MGEsIDB4NjgsCi0weDkyLCAweDAwLCAweDUyLCAweDE4LCAweDUyLCAweDZjLCAweDAzLCAweDY4LCAweDlhLCAweDFhLCAweDAyLCAweDYwLAotMHgwMSwgMHgyMywgMHg4OCwgMHg2OCwgMHg1OCwgMHg0MCwgMHg4OCwgMHg2MCwgMHhjYSwgMHg2OCwgMHgwMSwgMHgzMiwKLTB4Y2EsIDB4NjAsIDB4MGEsIDB4NjksIDB4MDEsIDB4MzIsIDB4ODAsIDB4MDAsIDB4NDAsIDB4MTgsIDB4MGEsIDB4NjEsCi0weDQwLCAweDZiLCAweGMwLCAweDQ2LCAweGM4LCAweDYyLCAweDcwLCAweDQ3LCAweGI4LCAweGI1LCAweDA0LCAweDFjLAotMHgxZCwgMHgxYywgMHgxNywgMHgxYywgMHgwOCwgMHgxYywgMHgzOSwgMHgxYywgMHhmZiwgMHhmNywgMHhkOSwgMHhmZiwKLTB4MDAsIDB4MjAsIDB4MjksIDB4MWMsIDB4MDAsIDB4ZjAsIDB4N2MsIDB4ZmUsIDB4MDEsIDB4MjAsIDB4ZjksIDB4MWQsCi0weDE5LCAweDMxLCAweDQ4LCAweDcxLCAweDgwLCAweDA2LCAweDYwLCAweDYwLCAweDAwLCAweDIwLCAweGEwLCAweDYxLAotMHgwNiwgMHg0YSwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MiwgMHgwNiwgMHg0OCwKLTB4MDEsIDB4NmQsIDB4NDIsIDB4NmQsIDB4MDUsIDB4NGIsIDB4MDAsIDB4MjAsIDB4MDAsIDB4ZjAsIDB4NjIsIDB4ZmUsCi0weGI4LCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDEyLCAweDAyLAotMHg3YywgMHgyOSwgMHgwMCwgMHg4MCwgMHg0NCwgMHg4MCwgMHgyMCwgMHg0MCwgMHgwNiwgMHg0OSwgMHgwYSwgMHg2OCwKLTB4MTAsIDB4MTgsIDB4MDgsIDB4NjAsIDB4MDEsIDB4MjMsIDB4NWIsIDB4MDIsIDB4OTgsIDB4NDIsIDB4MDMsIDB4ZDksCi0weDAzLCAweDQ5LCAweDBhLCAweDc5LCAweDAxLCAweDMyLCAweDBhLCAweDcxLCAweDcwLCAweDQ3LCAweDAwLCAweDAwLAotMHhlNCwgMHgyZCwgMHgwMCwgMHg4MCwgMHhhMCwgMHg4MiwgMHgyMCwgMHg0MCwgMHg4MCwgMHgwOCwgMHg4MCwgMHgwMCwKLTB4MDYsIDB4NDksIDB4MGEsIDB4NjgsIDB4MTAsIDB4MTgsIDB4MDgsIDB4NjAsIDB4MDEsIDB4MjMsIDB4NWIsIDB4MDIsCi0weDk4LCAweDQyLCAweDAzLCAweGQ5LCAweDAzLCAweDQ5LCAweDBhLCAweDc5LCAweDAxLCAweDMyLCAweDBhLCAweDcxLAotMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHhlNCwgMHgyZCwgMHgwMCwgMHg4MCwgMHhhMCwgMHg4MiwgMHgyMCwgMHg0MCwKLTB4MDMsIDB4MzAsIDB4ODAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4MDYsIDB4NDksIDB4MGEsIDB4NjgsIDB4MTAsIDB4MTgsCi0weDA4LCAweDYwLCAweDAxLCAweDIzLCAweDViLCAweDAyLCAweDk4LCAweDQyLCAweDAzLCAweGQ5LCAweDAzLCAweDQ5LAotMHgwYSwgMHg3OSwgMHgwMSwgMHgzMiwgMHgwYSwgMHg3MSwgMHg3MCwgMHg0NywgMHhlNCwgMHgyZCwgMHgwMCwgMHg4MCwKLTB4YTAsIDB4ODIsIDB4MjAsIDB4NDAsIDB4MDIsIDB4NDgsIDB4NDEsIDB4NzksIDB4MDEsIDB4MzEsIDB4NDEsIDB4NzEsCi0weDcwLCAweDQ3LCAweDAwLCAweDAwLCAweGEwLCAweDgyLCAweDIwLCAweDQwLCAweDkwLCAweGI0LCAweDgyLCAweDAwLAotMHgxNywgMHg0YiwgMHg5YSwgMHg1OCwgMHg4YiwgMHgwNywgMHgwMiwgMHhkMCwgMHg4OSwgMHgwOCwgMHgwYiwgMHgxZCwKLTB4MDEsIDB4ZTAsIDB4ODksIDB4MDgsIDB4Y2IsIDB4MWMsIDB4MTEsIDB4NjksIDB4ZDcsIDB4NjgsIDB4MTIsIDB4NGMsCi0weDgwLCAweDAwLCAweDIwLCAweDU4LCAweDQwLCAweDY4LCAweGI5LCAweDQyLCAweDAzLCAweGQxLCAweDgxLCAweDQyLAotMHgxOSwgMHhkOSwgMHgxMSwgMHg2OCwgMHgxNywgMHhlMCwgMHgwMCwgMHgyNCwgMHhiOSwgMHg0MiwgMHgwOSwgMHhkOSwKLTB4ODEsIDB4NDIsIDB4MTIsIDB4ZDksIDB4MTEsIDB4NjgsIDB4NzgsIDB4MWEsIDB4MDAsIDB4ZDUsIDB4MDMsIDB4MzAsCi0weDgwLCAweDEwLCAweDk4LCAweDQyLCAweDBiLCAweGQ4LCAweDA3LCAweGUwLCAweDgxLCAweDQyLCAweDA1LCAweGQ4LAotMHg3OCwgMHgxYSwgMHgwMCwgMHhkNSwgMHgwMywgMHgzMCwgMHg4MCwgMHgxMCwgMHg5OCwgMHg0MiwgMHgwMiwgMHhkOCwKLTB4MjAsIDB4MWMsIDB4OTAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4YzgsIDB4MWQsIDB4MDUsIDB4MzAsIDB4ZmEsIDB4ZTcsCi0weDcwLCAweDA0LCAweDAwLCAweDgwLCAweDgwLCAweGI1LCAweDgwLCAweDAwLCAweDBmLCAweDRhLCAweDE3LCAweDU4LAotMHg4OCwgMHgwNywgMHgwMiwgMHhkMCwgMHg4OCwgMHgwOCwgMHgwNCwgMHgzMCwgMHgwMSwgMHhlMCwgMHg4OCwgMHgwOCwKLTB4MDMsIDB4MzAsIDB4MzksIDB4NjksIDB4N2EsIDB4NjgsIDB4OTEsIDB4NDIsIDB4MDksIDB4ZDksIDB4MzksIDB4NjgsCi0weGMwLCAweDQ2LCAweDM5LCAweDYxLCAweGY5LCAweDY4LCAweDdhLCAweDY4LCAweDkxLCAweDQyLCAweDAyLCAweGQ5LAotMHgzOSwgMHg2OCwgMHhjMCwgMHg0NiwgMHhmOSwgMHg2MCwgMHg4MSwgMHgwMCwgMHgzOCwgMHg2OSwgMHgwMCwgMHhmMCwKLTB4ZDEsIDB4ZmQsIDB4MzgsIDB4NjEsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsCi0weDcwLCAweDA0LCAweDAwLCAweDgwLCAweDkwLCAweGI1LCAweDAzLCAweDIxLCAweDA5LCAweDA3LCAweDAxLCAweDQwLAotMHgwYywgMHgwZiwgMHgwMSwgMHgwNCwgMHgwOSwgMHgwYywgMHgwMSwgMHgyMiwgMHg5MiwgMHgwNywgMHgwMiwgMHg0MCwKLTB4YTMsIDB4MDAsIDB4MWMsIDB4NGYsIDB4ZmYsIDB4NTgsIDB4ODksIDB4MDcsIDB4ODksIDB4MGYsIDB4MDAsIDB4MDQsCi0weDAwLCAweDBjLCAweDgwLCAweDA4LCAweDAwLCAweDI5LCAweDAwLCAweGQwLCAweDAxLCAweDMwLCAweDAwLCAweDJhLAotMHgwMSwgMHhkMCwgMHgwMiwgMHgzMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgzMCwgMHhmOSwgMHg2OCwgMHg3YSwgMHg2OCwKLTB4OTEsIDB4NDIsIDB4MDIsIDB4ZDksIDB4MzksIDB4NjgsIDB4YzAsIDB4NDYsIDB4ZjksIDB4NjAsIDB4ODEsIDB4MDAsCi0weGY4LCAweDY4LCAweDAwLCAweGYwLCAweGE1LCAweGZkLCAweGY4LCAweDYwLCAweDBmLCAweDQ4LCAweDAwLCAweDY5LAotMHgwMCwgMHgyOCwgMHgwNSwgMHhkMCwgMHgwMSwgMHgyMCwgMHhhMCwgMHg0MCwgMHgwMiwgMHhkMCwgMHgyMCwgMHgxYywKLTB4ZmUsIDB4ZjcsIDB4Y2EsIDB4ZmMsIDB4MGIsIDB4NDksIDB4YzgsIDB4MWQsIDB4MTksIDB4MzAsIDB4MDMsIDB4NzksCi0weDAwLCAweDIyLCAweDAwLCAweDJiLCAweDA1LCAweGQxLCAweDA5LCAweDQ5LCAweGM4LCAweDFkLCAweDE5LCAweDMwLAotMHgwMywgMHg3OSwgMHgwMCwgMHgyYiwgMHgwMywgMHhkMCwgMHgwMiwgMHg3MSwgMHgwOCwgMHgxYywgMHhmZiwgMHhmNywKLTB4NzksIDB4ZjksIDB4OTAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NzAsIDB4MDQsIDB4MDAsIDB4ODAsCi0weGQwLCAweDJjLCAweDAwLCAweDgwLCAweDY0LCAweDJkLCAweDAwLCAweDgwLCAweGU0LCAweDJjLCAweDAwLCAweDgwLAotMHhiMCwgMHhiNSwgMHgyYiwgMHg0OSwgMHgwOSwgMHg3OSwgMHgwMCwgMHgyOSwgMHgwMywgMHhkMSwgMHg0MSwgMHg2OCwKLTB4MjksIDB4NGIsIDB4MTksIDB4NDMsIDB4NDEsIDB4NjAsIDB4ODEsIDB4NjgsCi0weDQ5LCAweDA4LCAweDAyLCAweGQzLCAweDA5LCAweDIxLCAweDA5LCAweDA0LCAweDAxLCAweGUwLCAweDBkLCAweDIxLAotMHgwOSwgMHgwNCwgMHgwYywgMHhjOCwgMHgwOCwgMHgzOCwgMHgxOSwgMHg0MywgMHg4NywgMHg2OCwgMHhiYiwgMHgwYSwKLTB4MDMsIDB4ZDMsIDB4NDMsIDB4NjgsIDB4NWIsIDB4MDgsIDB4MDAsIDB4ZDMsIDB4MDEsIDB4MzEsIDB4NDAsIDB4NjgsCi0weDAzLCAweDIzLCAweDFiLCAweDA3LCAweDE4LCAweDQwLCAweDA3LCAweDBmLCAweGY4LCAweDAwLCAweDFkLCAweDRjLAotMHgwMCwgMHgxOSwgMHgyMywgMHg2OCwgMHhjMCwgMHgxOCwgMHg1MCwgMHgzMCwgMHgwMCwgMHg3OSwgMHgwMSwgMHgyOCwKLTB4MTAsIDB4ZDEsIDB4NjAsIDB4NjgsIDB4MDEsIDB4MjgsIDB4MGQsIDB4ZDAsIDB4MTAsIDB4MWMsIDB4MDAsIDB4ZjAsCi0weDcxLCAweGY4LCAweDM4LCAweDAxLCAweDAwLCAweDE5LCAweDE5LCAweDIzLCAweGRiLCAweDAxLCAweGMwLCAweDE4LAotMHg0MSwgMHg2YiwgMHgwMSwgMHgzOSwgMHg0MSwgMHg2MywgMHhiMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4MzgsIDB4MDEsIDB4MDAsIDB4MTksIDB4MTksIDB4MjMsIDB4ZGIsIDB4MDEsIDB4YzAsIDB4MTgsIDB4MDMsIDB4NmIsCi0weDVkLCAweDFjLCAweDA1LCAweDYzLCAweGJkLCAweDAyLCAweDJkLCAweDE5LCAweGRiLCAweDAwLCAweGViLCAweDE4LAotMHg4MCwgMHgzMywgMHgxOSwgMHg2MywgMHhkYSwgMHg2MiwgMHg4MSwgMHg2YiwgMHgwMSwgMHgzMSwgMHg4MSwgMHg2MywKLTB4MDEsIDB4MjEsIDB4YjksIDB4NDAsIDB4MjIsIDB4NjgsIDB4MTEsIDB4NDMsIDB4MjEsIDB4NjAsIDB4MDEsIDB4NmIsCi0weDgwLCAweDI5LCAweGUyLCAweGQzLCAweDAwLCAweDIxLCAweDAxLCAweDYzLCAweGRmLCAweGU3LCAweDAwLCAweDAwLAotMHgyOCwgMHgwZiwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMCwgMHgxYywgMHgwMCwgMHg4MCwKLTB4ZjAsIDB4YjUsIDB4MWYsIDB4NGUsIDB4NzAsIDB4NjgsIDB4MDAsIDB4MjgsIDB4MzYsIDB4ZDEsIDB4MDAsIDB4MjQsCi0weGIxLCAweDY4LCAweDQ4LCAweDFjLCAweGM5LCAweDAwLCAweDg5LCAweDE5LCAweGIwLCAweDYwLCAweDMyLCAweDY4LAotMHg4OSwgMHgxOCwgMHg2MCwgMHgzMSwgMHgwZCwgMHg3YiwgMHgwOCwgMHgyOCwgMHgwMCwgMHhkMywgMHhiNCwgMHg2MCwKLTB4MjgsIDB4MDEsIDB4ODAsIDB4MTksIDB4MTksIDB4MjMsIDB4ZGIsIDB4MDEsIDB4YzAsIDB4MTgsIDB4ODcsIDB4NmIsCi0weDAwLCAweDJmLCAweDIxLCAweGQwLCAweGMxLCAweDZhLCAweDRiLCAweDFjLCAweGFhLCAweDAyLCAweDkyLCAweDE5LAotMHhjOSwgMHgwMCwgMHg1MSwgMHgxOCwgMHg4MCwgMHgzMSwgMHhjMywgMHg2MiwgMHhjYSwgMHg2YSwgMHgwOSwgMHg2YiwKLTB4MDEsIDB4M2YsIDB4ODcsIDB4NjMsIDB4ODAsIDB4MmIsIDB4MDAsIDB4ZDMsIDB4YzQsIDB4NjIsIDB4MDAsIDB4MmYsCi0weDA2LCAweGQxLCAweDAxLCAweDI3LCAweGFmLCAweDQwLCAweDNiLCAweDFjLCAweGRiLCAweDQzLCAweDM3LCAweDY4LAotMHgzYiwgMHg0MCwgMHgzMywgMHg2MCwgMHg0MywgMHg2YiwgMHgwMSwgMHgzYiwgMHg0MywgMHg2MywgMHgxMCwgMHgxYywKLTB4MzcsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4MDksIDB4ZjgsIDB4NzgsIDB4NjgsIDB4MDAsIDB4MjgsIDB4YzksIDB4ZDAsCi0weGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweGEwLCAweDFjLCAweDAwLCAweDgwLAotMHhmMCwgMHhiNSwgMHhjZCwgMHgwZiwgMHhlZCwgMHgwNywgMHgwMSwgMHgyNCwgMHgwMCwgMHgyNywgMHgyZSwgMHg0YiwKLTB4MmUsIDB4NGEsIDB4MDAsIDB4MmQsIDB4MWQsIDB4ZDAsIDB4ZDgsIDB4NmEsIDB4MDEsIDB4MzAsIDB4ZDgsIDB4NjIsCi0weDEwLCAweDFjLCAweDUyLCAweDY5LCAweDAwLCAweDJhLCAweDEyLCAweGQwLCAweDAyLCAweDY5LCAweDUzLCAweDFjLAotMHg5MiwgMHgwMCwgMHgxMiwgMHgxOCwgMHgwMywgMHg2MSwgMHg5MSwgMHg2MSwgMHg0MSwgMHg2OSwgMHgwMSwgMHgzMSwKLTB4NDEsIDB4NjEsIDB4MDIsIDB4NjksIDB4MGYsIDB4MmEsIDB4MDAsIDB4ZDMsIDB4MDcsIDB4NjEsIDB4MGYsIDB4MjksCi0weDAwLCAweGQzLCAweDQ0LCAweDYwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDA4LCAweDFjLAotMHhmZiwgMHhmNywgMHhlZSwgMHhmZSwgMHhmOCwgMHhlNywgMHgxNSwgMHg2OSwgMHg2ZSwgMHgxYywgMHhhZCwgMHgwMCwKLTB4YWQsIDB4MTgsIDB4MTYsIDB4NjEsIDB4YTksIDB4NjEsIDB4NTUsIDB4NjksIDB4MDEsIDB4MzUsIDB4NTUsIDB4NjEsCi0weDE2LCAweDY5LCAweDBmLCAweDJlLCAweDAwLCAweGQzLCAweDE3LCAweDYxLCAweDBmLCAweDJkLCAweDAwLCAweGQzLAotMHg1NCwgMHg2MCwgMHg4YywgMHgwMiwgMHhhNCwgMHgwYSwgMHgxNiwgMHg0ZiwgMHgzYSwgMHg2ZiwgMHhmZCwgMHg2OCwKLTB4ZjksIDB4MWQsIDB4NzksIDB4MzEsIDB4MDEsIDB4MmQsIDB4MGMsIDB4ZDEsIDB4ZGIsIDB4NmQsIDB4NWIsIDB4MDgsCi0weDA5LCAweGQzLCAweDBiLCAweDg5LCAweDAwLCAweDJiLCAweDA2LCAweGQxLCAweGZkLCAweDZmLCAweDAzLCAweDNiLAotMHgyZSwgMHg2OCwgMHgzMywgMHg0MCwgMHgyYiwgMHg2MCwgMHgxNCwgMHgyMywgMHgwYiwgMHg4MSwgMHgxMCwgMHg2MCwKLTB4ODAsIDB4MDcsIDB4ODAsIDB4MGEsIDB4MjAsIDB4NDMsIDB4MDMsIDB4MDQsIDB4MDAsIDB4ZDAsIDB4MDEsIDB4MzgsCi0weDUwLCAweDYwLCAweDA5LCAweDZhLCAweDA4LCAweDMyLCAweDkxLCAweDQyLCAweDAwLCAweGQ4LCAweDA3LCAweDRhLAotMHgwMCwgMHgwZCwgMHgwMiwgMHhkMywgMHg1MSwgMHgyMCwgMHg4MCwgMHgwMywgMHg4MiwgMHg2MSwgMHgzYSwgMHg2NywKLTB4YmUsIDB4ZTcsIDB4MDAsIDB4MDAsIDB4YTQsIDB4MmEsIDB4MDAsIDB4ODAsIDB4YTAsIDB4MWMsIDB4MDAsIDB4ODAsCi0weDY4LCAweDBlLCAweDAwLCAweDgwLCAweDI0LCAweGE3LCAweDIwLCAweDQwLAotMHhiMCwgMHhiNSwgMHgwMCwgMHgyOCwgMHgwNCwgMHhkMSwgMHgwMSwgMHgyMCwgMHhjMCwgMHgwNSwgMHgxNiwgMHg0OSwKLTB4YzAsIDB4NDYsIDB4MDgsIDB4NjAsIDB4MTUsIDB4NGMsIDB4MDAsIDB4MjUsIDB4NjcsIDB4NjksIDB4MDAsIDB4MmYsCi0weDE2LCAweGQwLCAweGUwLCAweDY4LCAweDQxLCAweDFjLCAweDgwLCAweDAwLCAweDAwLCAweDE5LCAweGUxLCAweDYwLAotMHg4MCwgMHg2OSwgMHgwMSwgMHgzZiwgMHhmZiwgMHhmNywgMHg5NCwgMHhmZSwgMHhlMCwgMHg2OCwgMHgwZiwgMHgyOCwKLTB4MDAsIDB4ZDMsIDB4ZTUsIDB4NjAsIDB4ZTAsIDB4NjgsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MTksIDB4ODAsIDB4NjksCi0weDAwLCAweDA4LCAweDAxLCAweGQzLCAweDAwLCAweDJmLCAweGVhLCAweGQxLCAweDY3LCAweDYxLCAweDAzLCAweGUwLAotMHgwOCwgMHg0OCwgMHgwMSwgMHg2ZCwgMHgwMSwgMHgzMSwgMHgwMSwgMHg2NSwgMHg2NSwgMHg2MCwgMHgyMCwgMHg2OCwKLTB4MDAsIDB4MjgsIDB4MDEsIDB4ZDAsIDB4ZmYsIDB4ZjcsIDB4MjYsIDB4ZmYsIDB4YjAsIDB4YmMsIDB4MDgsIDB4YmMsCi0weDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweGEwLCAweDFjLCAweDAwLCAweDgwLAotMHhhMCwgMHg4MiwgMHgyMCwgMHg0MCwgMHgwMCwgMHgyMCwgMHg3MCwgMHg0NywgMHhiMCwgMHhiNCwgMHgxMCwgMHgyMywKLTB4ODIsIDB4NjgsIDB4MTMsIDB4NDAsIDB4MDAsIDB4MjEsIDB4MDAsIDB4MmIsIDB4MTUsIDB4ZDAsIDB4MGMsIDB4NGIsCi0weDFhLCAweDQwLCAweDEyLCAweDAxLCAweDgxLCAweDI0LCAweDE0LCAweDQzLCAweDAyLCAweDY4LCAweDE1LCAweDY4LAotMHgxMywgMHgxZCwgMHg4MCwgMHhjYiwgMHgxYiwgMHg2OCwgMHgwNCwgMHgzYSwgMHgwMiwgMHg2MCwgMHgyMCwgMHhjMiwKLTB4ODAsIDB4YzIsIDB4MDgsIDB4YzIsIDB4MTQsIDB4NjAsIDB4NDIsIDB4NjgsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsCi0weDA0LCAweDMyLCAweDFhLCAweDQzLCAweDQyLCAweDYwLCAweDA4LCAweDFjLCAweGIwLCAweGJjLCAweDcwLCAweDQ3LAotMHgwMCwgMHhmMCwgMHhmZiwgMHgwZiwgMHhmMCwgMHhiNCwgMHg4MiwgMHg2OCwgMHg1MywgMHgwOSwgMHgzNCwgMHhkMywKLTB4MWIsIDB4NGIsIDB4MWEsIDB4NDAsIDB4MTIsIDB4MDEsIDB4ODEsIDB4MjYsIDB4MTYsIDB4NDMsIDB4MDMsIDB4NjgsCi0weDFkLCAweDY4LCAweDFmLCAweDFkLCAweDEwLCAweGNmLCAweDNmLCAweDY4LCAweDA0LCAweDNiLCAweDAzLCAweDYwLAotMHgyMCwgMHhjMywgMHgxMCwgMHhjMywgMHg4MCwgMHhjMywgMHgxZSwgMHg2MCwgMHg0MywgMHg2OCwgMHgxZiwgMHgxZCwKLTB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4M2IsIDB4NDMsIDB4NDMsIDB4NjAsIDB4Y2IsIDB4NmIsIDB4MTgsIDB4MWYsCi0weGM4LCAweDYzLCAweDgwLCAweGNiLCAweDgwLCAweGMwLCAweDFjLCAweDY4LCAweDFmLCAweDFkLCAweDAzLCAweDFkLAotMHgwNCwgMHg2MCwgMHgzOCwgMHgxYywgMHgzZiwgMHg2OCwgMHhjMCwgMHg0NiwgMHgxZiwgMHg2MCwgMHgxZiwgMHgxZCwKLTB4NDMsIDB4NjgsIDB4MWMsIDB4MDQsIDB4MjQsIDB4MGMsIDB4ODEsIDB4MjMsIDB4MjMsIDB4NDMsIDB4M2IsIDB4NjAsCi0weDQwLCAweDY4LCAweDAwLCAweDBjLCAweDAwLCAweDA0LCAweDEwLCAweDQzLCAweDc4LCAweDYwLCAweDA4LCAweDZlLAotMHgwNCwgMHgzMCwgMHgwOCwgMHg2NiwgMHg0OCwgMHg2ZSwgMHgwNCwgMHgzMCwgMHg0OCwgMHg2NiwgMHgwMCwgMHgyMCwKLTB4ZjAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4MDAsIDB4ZjAsIDB4ZmYsIDB4MGYsIDB4ODAsIDB4YjQsIDB4ODEsIDB4NmEsCi0weDAxLCAweDIzLCAweDliLCAweDA3LCAweGNhLCAweDFkLCAweDA1LCAweDMyLCAweDFhLCAweDQzLCAweDEyLCAweDY4LAotMHhjZiwgMHgxZCwgMHgwMSwgMHgzNywgMHgzYiwgMHg0MywgMHgxYiwgMHg2OCwgMHhjMCwgMHg0NiwgMHhjYiwgMHg2MCwKLTB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MGYsIDB4MWQsIDB4M2IsIDB4NDMsIDB4MWIsIDB4NjgsIDB4YzAsIDB4NDYsCi0weDhiLCAweDYwLCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweDBiLCAweDQzLCAweDFiLCAweDY4LCAweDBjLCAweGMxLAotMHgwMiwgMHg2MiwgMHgwMSwgMHg2YiwgMHhjMCwgMHg0NiwgMHgwYSwgMHg2MiwgMHgwNCwgMHgyMywgMHg4MSwgMHg2OSwKLTB4MTksIDB4NDMsIDB4ODEsIDB4NjEsIDB4MDIsIDB4NmIsIDB4YzAsIDB4NDYsIDB4OTEsIDB4NjEsIDB4ODEsIDB4NmEsCi0weDA0LCAweDMxLCAweDgxLCAweDYyLCAweDAyLCAweDZiLCAweGMwLCAweDQ2LCAweDkxLCAweDYyLCAweGMxLCAweDFkLAotMHgzOSwgMHgzMSwgMHg0YSwgMHg4YiwgMHgwNCwgMHgzYSwgMHg0YSwgMHg4MywgMHg0OSwgMHg4YiwgMHgwMiwgMHg2YiwKLTB4NDAsIDB4MzIsIDB4NTEsIDB4ODMsIDB4YzEsIDB4ODksIDB4MDQsIDB4MzksIDB4YzEsIDB4ODEsIDB4YzEsIDB4NjgsCi0weDAwLCAweDZiLCAweGMwLCAweDQ2LCAweGMxLCAweDYwLCAweDAwLCAweDIwLCAweDgwLCAweGJjLCAweDcwLCAweDQ3LAotMHgwMCwgMHg0NywgMHgwOCwgMHg0NywgMHgxMCwgMHg0NywgMHgxOCwgMHg0NywgMHgyMCwgMHg0NywgMHgyOCwgMHg0NywKLTB4MzAsIDB4NDcsIDB4MzgsIDB4NDcsIDB4MzAsIDB4NDAsIDB4MmQsIDB4ZTksIDB4MGMsIDB4YzAsIDB4OWQsIDB4ZTUsCi0weDBjLCAweDQ4LCAweGEwLCAweGUxLCAweDI0LCAweDQ4LCAweGIwLCAweGUxLCAweDFlLCAweDAwLCAweDAwLCAweDBhLAotMHgwMSwgMHhjMCwgMHg0YywgMHhlMiwgMHgxOCwgMHg0MCwgMHhhMCwgMHhlMywgMHg2NCwgMHg1MSwgMHg5ZiwgMHhlNSwKLTB4OTQsIDB4NTAsIDB4MjAsIDB4ZTAsIDB4MDAsIDB4NTAsIDB4OTAsIDB4ZTUsIDB4MTQsIDB4NDAsIDB4OTAsIDB4ZTUsCi0weDAwLCAweDMwLCAweDg1LCAweGU1LCAweDA0LCAweGMwLCAweDg1LCAweGU1LCAweDA4LCAweDEwLCAweDg1LCAweGU1LAotMHgwYywgMHgyMCwgMHg4NSwgMHhlNSwgMHgxMCwgMHgxMCwgMHg5MCwgMHhlNSwKLTB4MTAsIDB4NTAsIDB4ODUsIDB4ZTIsIDB4MDEsIDB4MDAsIDB4NTUsIDB4ZTEsIDB4MGMsIDB4NTAsIDB4OTAsIDB4NTUsCi0weDA0LCAweDAwLCAweDU1LCAweGUxLCAweDA1LCAweDAwLCAweDAwLCAweDBhLCAweDA0LCAweDEwLCAweDkwLCAweGU1LAotMHgwMCwgMHg1MCwgMHg4MCwgMHhlNSwgMHgwMCwgMHg1MCwgMHg4MSwgMHhlNSwgMHgwMCwgMHgwMCwgMHhhMCwgMHhlMywKLTB4MzAsIDB4NDAsIDB4YmQsIDB4ZTgsIDB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4MDAsIDB4MzAsIDB4OTMsIDB4ZTUsCi0weDA4LCAweDIwLCAweDkwLCAweGU1LCAweDAxLCAweDMxLCAweDgzLCAweGUzLCAweDAyLCAweDM2LCAweDgzLCAweGUzLAotMHgwMywgMHgwMCwgMHg1NSwgMHhlMSwgMHgxNCwgMHgzMCwgMHg4MCwgMHhlNSwgMHhmMiwgMHhmZiwgMHhmZiwgMHgxYSwKLTB4MDEsIDB4MDAsIDB4YTAsIDB4ZTMsIDB4ZjQsIDB4ZmYsIDB4ZmYsIDB4ZWEsIDB4MDEsIDB4MDYsIDB4MWMsIDB4ZTMsCi0weGYxLCAweGZmLCAweGZmLCAweDBhLCAweGVjLCAweDEwLCAweDlmLCAweGU1LCAweDAyLCAweGM2LCAweGNjLCAweGUzLAotMHg1NCwgMHgyMCwgMHg5MSwgMHhlNSwgMHhlNCwgMHgzMCwgMHg5ZiwgMHhlNSwgMHg1MCwgMHgxMCwgMHg5MSwgMHhlNSwKLTB4ZDksIDB4ZmYsIDB4ZmYsIDB4ZWEsIDB4ZjAsIDB4NDcsIDB4MmQsIDB4ZTksIDB4MjAsIDB4YzAsIDB4OWQsIDB4ZTUsCi0weDBjLCAweDY4LCAweGEwLCAweGUxLCAweDI2LCAweDY4LCAweGIwLCAweGUxLCAweDI1LCAweDAwLCAweDAwLCAweDBhLAotMHgxOCwgMHg0MCwgMHhhMCwgMHhlMywgMHhiOCwgMHg1MCwgMHg5ZiwgMHhlNSwgMHg5NCwgMHgwMCwgMHgwMCwgMHhlMCwKLTB4MDUsIDB4MDAsIDB4ODAsIDB4ZTAsIDB4MDgsIDB4NDAsIDB4OTAsIDB4ZTUsIDB4MDQsIDB4ODAsIDB4OTAsIDB4ZTUsCi0weDAwLCAweDcwLCAweGEwLCAweGUzLCAweDFmLCAweGMwLCAweGEwLCAweGUzLCAweDAyLCAweGM0LCAweDhjLCAweGUzLAotMHgwMCwgMHg1MCwgMHg5MCwgMHhlNSwgMHgxMCwgMHg5MCwgMHg5MCwgMHhlNSwgMHgxNCwgMHhhMCwgMHg5MCwgMHhlNSwKLTB4MDAsIDB4MzAsIDB4ODUsIDB4ZTUsIDB4MDQsIDB4YzAsIDB4ODUsIDB4ZTUsIDB4MDgsIDB4MTAsIDB4ODUsIDB4ZTUsCi0weDBjLCAweDIwLCAweDg1LCAweGU1LCAweDEwLCAweDUwLCAweDg1LCAweGUyLCAweDA5LCAweDAwLCAweDU1LCAweGUxLAotMHgwYywgMHg1MCwgMHg5MCwgMHg1NSwgMHgwYSwgMHgwMCwgMHg1NSwgMHhlMSwgMHgxNSwgMHgwMCwgMHgwMCwgMHgwYSwKLTB4MDMsIDB4NzAsIDB4MTcsIDB4ZTIsIDB4MjAsIDB4MTAsIDB4ODEsIDB4ZTIsIDB4MjAsIDB4MzAsIDB4ODMsIDB4ZTIsCi0weDBhLCAweDAwLCAweDAwLCAweDBhLCAweDAwLCAweDYwLCAweDk2LCAweGUyLCAweDAxLCAweDcwLCAweDg3LCAweGUyLAotMHgwOSwgMHgwMCwgMHgwMCwgMHgwYSwgMHgyMCwgMHg2MCwgMHg0NiwgMHhlMiwgMHgyMCwgMHgwMCwgMHg1NiwgMHhlMywKLTB4ZWMsIDB4ZmYsIDB4ZmYsIDB4Y2EsIDB4MDAsIDB4NzAsIDB4YTAsIDB4ZTMsIDB4MDEsIDB4YzAsIDB4NDYsIDB4ZTIsCi0weDAyLCAweGM0LCAweDhjLCAweGUzLCAweDAwLCAweDYwLCAweGEwLCAweGUzLCAweGU3LCAweGZmLCAweGZmLCAweGVhLAotMHgwMCwgMHg1MCwgMHg4OCwgMHhlNSwgMHhmMiwgMHhmZiwgMHhmZiwgMHhlYSwgMHgwMCwgMHgxMCwgMHhhMCwgMHhlMywKLTB4MDAsIDB4NTAsIDB4ODAsIDB4ZTUsIDB4MDEsIDB4MDAsIDB4YTAsIDB4ZTEsIDB4ZjAsIDB4NDcsIDB4YmQsIDB4ZTgsCi0weDFlLCAweGZmLCAweDJmLCAweGUxLCAweDAwLCAweGEwLCAweDk0LCAweGU1LCAweDBhLCAweDAwLCAweDU1LCAweGUxLAotMHgxNCwgMHhhMCwgMHg4MCwgMHhlNSwgMHhlNSwgMHhmZiwgMHhmZiwgMHgxYSwgMHgwMSwgMHgxMCwgMHhhMCwgMHhlMywKLTB4ZjUsIDB4ZmYsIDB4ZmYsIDB4ZWEsIDB4YTgsIDB4MDMsIDB4MDAsIDB4ODAsIDB4N2MsIDB4MjksIDB4MDAsIDB4ODAsCi0weDAwLCAweDgwLCAweDIwLCAweDQwLCAweDY4LCAweDgyLCAweDlmLCAweGU1LCAweDBiLCAweDkyLCAweGEwLCAweGUzLAotMHg2NCwgMHhhMiwgMHg5ZiwgMHhlNSwgMHg1OCwgMHhiMCwgMHg5YSwgMHhlNSwgMHgwZSwgMHhmMCwgMHhhMCwgMHhlMSwKLTB4NTQsIDB4YjAsIDB4OWEsIDB4ZTUsIDB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4M2YsIDB4NDAsIDB4MmQsIDB4ZTksCi0weDAwLCAweDAwLCAweDRmLCAweGUxLCAweDFmLCAweDAwLCAweDAwLCAweGUyLCAweDEyLCAweDAwLCAweDUwLCAweGUzLAotMHg1NCwgMHgwMCwgMHgwMCwgMHgwYSwgMHgwMCwgMHgwMCwgMHgwZiwgMHhlMSwgMHg4MCwgMHgwMCwgMHhjMCwgMHhlMywKLTB4MDAsIDB4ZjAsIDB4MjEsIDB4ZTEsIDB4MDQsIDB4NTAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4NDAsIDB4OTksIDB4ZTUsCi0weDA5LCAweDAwLCAweDAwLCAweGVhLCAweDAyLCAweDAwLCAweDE0LCAweGUzLCAweDUzLCAweDAwLCAweDAwLCAweDFiLAotMHg4MCwgMHgwMCwgMHgxNCwgMHhlMywgMHg1OSwgMHgwMCwgMHgwMCwgMHgxYiwgMHgyMCwgMHgwMCwgMHgxNCwgMHhlMywKLTB4NTksIDB4MDAsIDB4MDAsIDB4MWIsIDB4MDIsIDB4MDcsIDB4MTQsIDB4ZTMsIDB4NTksIDB4MDAsIDB4MDAsIDB4MWIsCi0weDAxLCAweDA2LCAweDE0LCAweGUzLCAweDU5LCAweDAwLCAweDAwLCAweDFiLCAweDA4LCAweDAwLCAweDE0LCAweGUzLAotMHg0NSwgMHgwMCwgMHgwMCwgMHgxYiwgMHgwMiwgMHgwNSwgMHgxNCwgMHhlMywgMHg0YSwgMHgwMCwgMHgwMCwgMHgxYiwKLTB4MDIsIDB4MDgsIDB4MTQsIDB4ZTMsIDB4NGIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ZTUsIDB4MGUsIDB4MTQsIDB4ZTMsCi0weDA3LCAweDAwLCAweDAwLCAweDBhLCAweDA0LCAweDIwLCAweDk4LCAweGU1LCAweDBjLCAweDEwLCAweDk4LCAweGU1LAotMHgwNCwgMHgzMCwgMHg1MiwgMHhlMiwgMHgzYywgMHgzMCwgMHhhMCwgMHhiMywgMHgwNCwgMHgzMCwgMHg4OCwgMHhlNSwKLTB4MDIsIDB4MDAsIDB4OTEsIDB4ZTcsIDB4MGYsIDB4ZTAsIDB4YTAsIDB4ZTEsCi0weDEwLCAweGZmLCAweDJmLCAweGUxLCAweDAxLCAweDUwLCAweDU1LCAweGUyLCAweDAzLCAweDAwLCAweDAwLCAweDBhLAotMHgwMCwgMHg0MCwgMHg5OSwgMHhlNSwgMHgwYywgMHgwMCwgMHg5YSwgMHhlNSwgMHgwMCwgMHgwMCwgMHgxNCwgMHhlMSwKLTB4MWIsIDB4ZmYsIDB4MmYsIDB4MTEsIDB4MDgsIDB4MDAsIDB4OWEsIDB4ZTUsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ZTEsCi0weDBiLCAweDAwLCAweDAwLCAweDBhLCAweDAxLCAweDBjLCAweDE0LCAweGUzLCAweDk4LCAweDAxLCAweDlmLCAweDE1LAotMHgwZiwgMHhlMCwgMHhhMCwgMHgxMSwgMHgxMCwgMHhmZiwgMHgyZiwgMHgxMSwgMHgwMiwgMHgwNCwgMHgxNCwgMHhlMywKLTB4OGMsIDB4MDEsIDB4OWYsIDB4MTUsIDB4MGYsIDB4ZTAsIDB4YTAsIDB4MTEsIDB4MTAsIDB4ZmYsIDB4MmYsIDB4MTEsCi0weDAxLCAweDA5LCAweDE0LCAweGUzLCAweDgwLCAweDAxLCAweDlmLCAweDE1LCAweDBmLCAweGUwLCAweGEwLCAweDExLAotMHgxMCwgMHhmZiwgMHgyZiwgMHgxMSwgMHgwNCwgMHgwMCwgMHg5YSwgMHhlNSwgMHgwMCwgMHgwMCwgMHgxNCwgMHhlMSwKLTB4MTYsIDB4MDAsIDB4MDAsIDB4MGEsIDB4NTQsIDB4ZTAsIDB4OGYsIDB4ZTIsIDB4MDQsIDB4MDAsIDB4MTQsIDB4ZTMsCi0weDQwLCAweDAwLCAweDlhLCAweDE1LCAweDEwLCAweGZmLCAweDJmLCAweDExLCAweDAyLCAweDBhLCAweDE0LCAweGUzLAotMHg0NCwgMHgwMCwgMHg5YSwgMHgxNSwgMHgxMCwgMHhmZiwgMHgyZiwgMHgxMSwgMHgwMiwgMHgwOSwgMHgxNCwgMHhlMywKLTB4NDgsIDB4MDAsIDB4OWEsIDB4MTUsIDB4MTAsIDB4ZmYsIDB4MmYsIDB4MTEsIDB4MDEsIDB4MDIsIDB4MTQsIDB4ZTMsCi0weDRjLCAweDAwLCAweDlhLCAweDE1LCAweDEwLCAweGZmLCAweDJmLCAweDExLCAweDAxLCAweDA0LCAweDE0LCAweGUzLAotMHg1MCwgMHgwMCwgMHg5YSwgMHgxNSwgMHgxMCwgMHhmZiwgMHgyZiwgMHgxMSwgMHgwMSwgMHgwYSwgMHgxNCwgMHhlMywKLTB4MjEsIDB4MDAsIDB4MDAsIDB4MWIsIDB4MDIsIDB4MDAsIDB4MTQsIDB4ZTMsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MWIsCi0weDEwLCAweDAwLCAweDlhLCAweGU1LCAweDAwLCAweDAwLCAweDE0LCAweGUxLCAweDFjLCAweDAwLCAweDAwLCAweDFiLAotMHgwMCwgMHg0MCwgMHg5OSwgMHhlNSwgMHgwNCwgMHg1MCwgMHhhMCwgMHhlMywgMHgwMCwgMHg0MCwgMHg5NCwgMHhlMiwKLTB4MWIsIDB4ZmYsIDB4MmYsIDB4MTEsIDB4M2YsIDB4NDAsIDB4YmQsIDB4ZTgsIDB4MDQsIDB4ZjAsIDB4NWUsIDB4ZTIsCi0weGMwLCAweDAwLCAweDgwLCAweGUzLCAweDAwLCAweGYwLCAweDYxLCAweGUxLCAweGZhLCAweGZmLCAweGZmLCAweGVhLAotMHgxOCwgMHgwMCwgMHg5YSwgMHhlNSwgMHgxYywgMHgxMCwgMHg5YSwgMHhlNSwgMHgxMSwgMHhmZiwgMHgyZiwgMHhlMSwKLTB4NTQsIDB4YjAsIDB4OWEsIDB4ZTUsIDB4MWMsIDB4MTAsIDB4OWEsIDB4ZTUsIDB4MTQsIDB4MDAsIDB4OWEsIDB4ZTUsCi0weDExLCAweGZmLCAweDJmLCAweGUxLCAweDIwLCAweDEwLCAweDlhLCAweGU1LCAweDAwLCAweDAwLCAweGEwLCAweGUzLAotMHgxMSwgMHhmZiwgMHgyZiwgMHhlMSwgMHgyNCwgMHgxMCwgMHg5YSwgMHhlNSwgMHgxMSwgMHhmZiwgMHgyZiwgMHhlMSwKLTB4MjgsIDB4MTAsIDB4OWEsIDB4ZTUsIDB4MTEsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4MmMsIDB4MTAsIDB4OWEsIDB4ZTUsCi0weDExLCAweGZmLCAweDJmLCAweGUxLCAweDMwLCAweDEwLCAweDlhLCAweGU1LCAweDExLCAweGZmLCAweDJmLCAweGUxLAotMHgzNCwgMHgxMCwgMHg5YSwgMHhlNSwgMHgxMSwgMHhmZiwgMHgyZiwgMHhlMSwgMHhmZSwgMHhmZiwgMHhmZiwgMHhlYSwKLTB4MzgsIDB4ZTAsIDB4OWEsIDB4ZTUsIDB4M2MsIDB4MTAsIDB4OWEsIDB4ZTUsIDB4MTgsIDB4MDAsIDB4OWEsIDB4ZTUsCi0weDExLCAweGZmLCAweDJmLCAweGUxLCAweDM4LCAweGUwLCAweDlhLCAweGU1LCAweDNjLCAweDEwLCAweDlhLCAweGU1LAotMHgxNCwgMHgwMCwgMHg5YSwgMHhlNSwgMHgxMSwgMHhmZiwgMHgyZiwgMHhlMSwgMHg2NCwgMHgyMCwgMHg5ZiwgMHhlNSwKLTB4MDAsIDB4MzAsIDB4OTIsIDB4ZTUsIDB4MDAsIDB4MzAsIDB4NTMsIDB4ZTAsIDB4MGEsIDB4MDAsIDB4MDAsIDB4YmEsCi0weDAwLCAweDMwLCAweDgyLCAweGU1LCAweDBjLCAweDAwLCAweDkyLCAweGU1LCAweDA4LCAweDMwLCAweDkyLCAweGU1LAotMHgwMCwgMHgxMCwgMHg5MSwgMHhlMiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwYSwgMHgwMywgMHgxMCwgMHg4MCwgMHhlNywKLTB4MDQsIDB4MzAsIDB4NTMsIDB4ZTIsIDB4M2MsIDB4MzAsIDB4YTAsIDB4YjMsIDB4MDgsIDB4MzAsIDB4ODIsIDB4ZTUsCi0weDAxLCAweDAwLCAweGEwLCAweGUzLCAweDFlLCAweGZmLCAweDJmLCAweGUxLCAweDNjLCAweDEwLCAweDlmLCAweGU1LAotMHgwMCwgMHgwMCwgMHg5MSwgMHhlNSwgMHgwMSwgMHgwMCwgMHg4MCwgMHhlMiwgMHgwMCwgMHgwMCwgMHg4MSwgMHhlNSwKLTB4MDAsIDB4MDAsIDB4YTAsIDB4ZTMsIDB4ZjgsIDB4ZmYsIDB4ZmYsIDB4ZWEsIDB4MTAsIDB4MDAsIDB4OWYsIDB4ZTUsCi0weDA4LCAweDEwLCAweDkwLCAweGU1LCAweDA0LCAweDEwLCAweDUxLCAweGUyLCAweDNjLCAweDEwLCAweGEwLCAweGIzLAotMHgwOCwgMHgxMCwgMHg4MCwgMHhlNSwgMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwgMHhlNCwgMHgyZCwgMHgwMCwgMHg4MCwKLTB4Y2MsIDB4MDQsIDB4MDAsIDB4ODAsIDB4NzEsIDB4MmIsIDB4ZmYsIDB4ZmYsIDB4ZDEsIDB4M2QsIDB4ZmYsIDB4ZmYsCi0weGM5LCAweDJiLCAweGZmLCAweGZmLCAweGEwLCAweDgyLCAweDIwLCAweDQwLCAweGM5LCAweDFjLCAweDg5LCAweDA4LAotMHg4OSwgMHgwMCwgMHgwMSwgMHgyMywgMHg4NSwgMHg0YSwgMHg1YiwgMHgwNywgMHgxOCwgMHg0MywgMHgxMywgMHg2OCwKLTB4NWIsIDB4MTgsIDB4MTMsIDB4NjAsIDB4MDAsIDB4MWYsIDB4ODEsIDB4YTMsIDB4NWIsIDB4MWEsIDB4MTgsIDB4NDcsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwgMHhlNCwgMHgyZCwgMHgwMCwgMHg4MCwKLTB4OTgsIDB4MDAsIDB4OWYsIDB4ZTUsIDB4OTgsIDB4MTAsIDB4OWYsIDB4ZTUsIDB4MDEsIDB4MjAsIDB4NDAsIDB4ZTAsCi0weDk0LCAweDMwLCAweDlmLCAweGU1LCAweDAwLCAweDAwLCAweDkxLCAweGU1LCAweDAzLCAweDAwLCAweDUwLCAweGUxLAotMHgwMywgMHgwMCwgMHgwMCwgMHgxYSwgMHgwNCwgMHgxMCwgMHg4MSwgMHhlMiwgMHgwNCwgMHgyMCwgMHg1MiwgMHhlMiwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4ZjgsIDB4ZmYsIDB4ZmYsIDB4ZWEsIDB4NzgsIDB4MDAsIDB4OWYsIDB4ZTUsCi0weDAwLCAweDIwLCAweDgwLCAweGU1LCAweDc0LCAweDAwLCAweDlmLCAweGU1LCAweDc0LCAweDEwLCAweDlmLCAweGU1LAotMHgwMSwgMHgyMCwgMHg0MCwgMHhlMCwgMHg2MCwgMHgzMCwgMHg5ZiwgMHhlNSwgMHgwMCwgMHgwMCwgMHg5MSwgMHhlNSwKLTB4MDMsIDB4MDAsIDB4NTAsIDB4ZTEsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MWEsIDB4MDQsIDB4MTAsIDB4ODEsIDB4ZTIsCi0weDA0LCAweDIwLCAweDUyLCAweGUyLCAweDAwLCAweDAwLCAweDAwLCAweDBhLCAweGY4LCAweGZmLCAweGZmLCAweGVhLAotMHg1MCwgMHgwMCwgMHg5ZiwgMHhlNSwgMHgwMCwgMHgyMCwgMHg4MCwgMHhlNSwgMHg0YywgMHgwMCwgMHg5ZiwgMHhlNSwKLTB4NGMsIDB4MTAsIDB4OWYsIDB4ZTUsIDB4MDEsIDB4MjAsIDB4NDAsIDB4ZTAsIDB4MmMsIDB4MzAsIDB4OWYsIDB4ZTUsCi0weDAwLCAweDAwLCAweDkxLCAweGU1LCAweDAzLCAweDAwLCAweDUwLCAweGUxLCAweDAzLCAweDAwLCAweDAwLCAweDFhLAotMHgwNCwgMHgxMCwgMHg4MSwgMHhlMiwgMHgwNCwgMHgyMCwgMHg1MiwgMHhlMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwKLTB4ZjgsIDB4ZmYsIDB4ZmYsIDB4ZWEsIDB4MjgsIDB4MDAsIDB4OWYsIDB4ZTUsIDB4MDAsIDB4MjAsIDB4ODAsIDB4ZTUsCi0weDFlLCAweGZmLCAweDJmLCAweGUxLCAweDdjLCAweDM0LCAweDAwLCAweDgwLCAweDgwLCAweDMwLCAweDAwLCAweDgwLAotMHhhZCwgMHhkZSwgMHhhZCwgMHhkZSwgMHhjMCwgMHgwNCwgMHgwMCwgMHg4MCwgMHhmYywgMHgzNywgMHgwMCwgMHg4MCwKLTB4ODAsIDB4MzQsIDB4MDAsIDB4ODAsIDB4YzQsIDB4MDQsIDB4MDAsIDB4ODAsIDB4ZmMsIDB4M2YsIDB4MDAsIDB4ODAsCi0weDQwLCAweDM4LCAweDAwLCAweDgwLCAweGM4LCAweDA0LCAweDAwLCAweDgwLCAweDc4LCAweDQ3LCAweDAwLCAweDAwLAotMHg3MSwgMHhlYSwgMHhmZiwgMHhlYSwgMHg3OCwgMHg0NywgMHgwMCwgMHgwMCwgMHgzOSwgMHhmZSwgMHhmZiwgMHhlYSwKLTB4NzgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4NjMsIDB4ZmUsIDB4ZmYsIDB4ZWEsIDB4NzgsIDB4NDcsIDB4MDAsIDB4MDAsCi0weDFiLCAweGZmLCAweGZmLCAweGVhLCAweDc4LCAweDQ3LCAweDAwLCAweDAwLCAweDZiLCAweGVhLCAweGZmLCAweGVhLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwKLTB4MjgsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4M2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ODAsCi0weDAwLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGI5LCAweDBiLCAweGZmLCAweGZmLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHgwYiwgMHhmZiwgMHhmZiwgMHgwMywgMHhmZiwgMHgwNiwgMHg1NCwKLTB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzUsIDB4MDQsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weGExLCAweDA1LCAweGZmLCAweGZmLCAweDA0LCAweGZmLCAweDA3LCAweDU0LCAweDAzLCAweDAwLCAweDAwLCAweDAwLAotMHhiNSwgMHgwNCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMSwgMHgwNSwgMHhmZiwgMHhmZiwKLTB4MDUsIDB4ZmYsIDB4MDUsIDB4NTQsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzksIDB4MDQsIDB4ZmYsIDB4ZmYsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU1LCAweDA1LCAweGZmLCAweGZmLCAweDAxLCAweGZmLCAweDA0LCAweDAwLAotMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxOCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4NjEsIDB4MGUsIDB4ZmYsIDB4ZmYsIDB4MDIsIDB4ZmYsIDB4MDIsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weGExLCAweDAyLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYxLCAweDAyLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHgwMSwgMHg0NCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWQsIDB4MGQsIDB4ZmYsIDB4ZmYsIDB4MDYsIDB4MDAsIDB4ZmYsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNkLCAweDUwLCAweGZmLCAweGZmLCAweDgxLCAweDUwLCAweGZmLCAweGZmLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weGZmLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHg0OCwgMHgwNSwgMHgwMCwgMHg4MCwgMHgxMSwgMHg3NSwgMHgyMSwgMHg0MCwgMHgxYiwgMHg3NSwgMHgyMSwgMHg0MCwKLTB4MzEsIDB4NzUsIDB4MjEsIDB4NDAsIDB4NDksIDB4NzUsIDB4MjEsIDB4NDAsCi0weDU1LCAweDc1LCAweDIxLCAweDQwLCAweDYzLCAweDc1LCAweDIxLCAweDQwLCAweDdkLCAweDc1LCAweDIxLCAweDQwLAotMHhhOSwgMHg3NSwgMHgyMSwgMHg0MCwgMHg2ZCwgMHg3NiwgMHgyMSwgMHg0MCwgMHhjNSwgMHg3NiwgMHgyMSwgMHg0MCwKLTB4ZDMsIDB4NzYsIDB4MjEsIDB4NDAsIDB4ZGQsIDB4NzYsIDB4MjEsIDB4NDAsIDB4ZTcsIDB4NzYsIDB4MjEsIDB4NDAsCi0weDk5LCAweDc3LCAweDIxLCAweDQwLCAweGE3LCAweDc3LCAweDIxLCAweDQwLCAweGI1LCAweDc3LCAweDIxLCAweDQwLAotMHg2MSwgMHg3OCwgMHgyMSwgMHg0MCwgMHg1ZiwgMHg3YywgMHgyMSwgMHg0MCwgMHhlOSwgMHg3YywgMHgyMSwgMHg0MCwKLTB4ODksIDB4N2QsIDB4MjEsIDB4NDAsIDB4YmQsIDB4N2UsIDB4MjEsIDB4NDAsIDB4YzksIDB4N2UsIDB4MjEsIDB4NDAsCi0weDI5LCAweDdmLCAweDIxLCAweDQwLCAweDhkLCAweDdmLCAweDIxLCAweDQwLCAweGI5LCAweDdmLCAweDIxLCAweDQwLAotMHhkZCwgMHg3ZiwgMHgyMSwgMHg0MCwgMHgxZCwgMHg4MCwgMHgyMSwgMHg0MCwgMHg0NSwgMHg4MCwgMHgyMSwgMHg0MCwKLTB4OGQsIDB4ODAsIDB4MjEsIDB4NDAsIDB4OWQsIDB4ODAsIDB4MjEsIDB4NDAsIDB4YzUsIDB4ODAsIDB4MjEsIDB4NDAsCi0weGQ1LCAweDgwLCAweDIxLCAweDQwLCAweDFkLCAweDgxLCAweDIxLCAweDQwLCAweDViLCAweDgxLCAweDIxLCAweDQwLAotMHhiMSwgMHg4MSwgMHgyMSwgMHg0MCwgMHgxMSwgMHg4MiwgMHgyMSwgMHg0MCwgMHgxYiwgMHg4MiwgMHgyMSwgMHg0MCwKLTB4MWYsIDB4ODIsIDB4MjEsIDB4NDAsIDB4OGQsIDB4ODIsIDB4MjEsIDB4NDAsIDB4ZDksIDB4ODIsIDB4MjEsIDB4NDAsCi0weDMxLCAweDgzLCAweDIxLCAweDQwLCAweDZkLCAweDgzLCAweDIxLCAweDQwLCAweGQxLCAweDgzLCAweDIxLCAweDQwLAotMHgwOSwgMHg4NCwgMHgyMSwgMHg0MCwgMHgxOSwgMHg4NCwgMHgyMSwgMHg0MCwgMHg1MSwgMHg4NCwgMHgyMSwgMHg0MCwKLTB4NjEsIDB4ODQsIDB4MjEsIDB4NDAsIDB4NzUsIDB4ODQsIDB4MjEsIDB4NDAsIDB4OWQsIDB4ODQsIDB4MjEsIDB4NDAsCi0weGE3LCAweDg0LCAweDIxLCAweDQwLCAweGIxLCAweDg0LCAweDIxLCAweDQwLCAweDE1LCAweDg1LCAweDIxLCAweDQwLAotMHg0NSwgMHg4NSwgMHgyMSwgMHg0MCwgMHg1MSwgMHg4NSwgMHgyMSwgMHg0MCwgMHhjNSwgMHg4NSwgMHgyMSwgMHg0MCwKLTB4Y2YsIDB4ODUsIDB4MjEsIDB4NDAsIDB4ZDksIDB4ODUsIDB4MjEsIDB4NDAsIDB4ZTMsIDB4ODUsIDB4MjEsIDB4NDAsCi0weGVkLCAweDg1LCAweDIxLCAweDQwLCAweGY3LCAweDg1LCAweDIxLCAweDQwLCAweDAxLCAweDg2LCAweDIxLCAweDQwLAotMHgwYiwgMHg4NiwgMHgyMSwgMHg0MCwgMHgxNSwgMHg4NiwgMHgyMSwgMHg0MCwgMHgwMSwgMHg4OSwgMHgyMSwgMHg0MCwKLTB4MWYsIDB4ODYsIDB4MjEsIDB4NDAsIDB4MjksIDB4ODYsIDB4MjEsIDB4NDAsIDB4MzMsIDB4ODYsIDB4MjEsIDB4NDAsCi0weDNkLCAweDg2LCAweDIxLCAweDQwLCAweDY1LCAweDg2LCAweDIxLCAweDQwLCAweDZmLCAweDg2LCAweDIxLCAweDQwLAotMHhkMSwgMHg4NiwgMHgyMSwgMHg0MCwgMHhkYiwgMHg4NiwgMHgyMSwgMHg0MCwgMHhlNSwgMHg4NiwgMHgyMSwgMHg0MCwKLTB4ZWYsIDB4ODYsIDB4MjEsIDB4NDAsIDB4ZjksIDB4ODYsIDB4MjEsIDB4NDAsIDB4OWQsIDB4NzQsIDB4MjEsIDB4NDAsCi0weDAzLCAweDg3LCAweDIxLCAweDQwLCAweDY5LCAweDg3LCAweDIxLCAweDQwLCAweGI1LCAweDg3LCAweDIxLCAweDQwLAotMHhmOSwgMHg4NywgMHgyMSwgMHg0MCwgMHgwOSwgMHg4OCwgMHgyMSwgMHg0MCwgMHg5ZCwgMHg3NCwgMHgyMSwgMHg0MCwKLTB4NTUsIDB4ODgsIDB4MjEsIDB4NDAsIDB4NTksIDB4ODgsIDB4MjEsIDB4NDAsIDB4NWQsIDB4ODgsIDB4MjEsIDB4NDAsCi0weGI1LCAweDg4LCAweDIxLCAweDQwLCAweGRkLCAweDg4LCAweDIxLCAweDQwLCAweGU5LCAweDg4LCAweDIxLCAweDQwLAotMHhlZCwgMHg4OCwgMHgyMSwgMHg0MCwgMHhmMSwgMHg4OCwgMHgyMSwgMHg0MCwgMHhmNSwgMHg4OCwgMHgyMSwgMHg0MCwKLTB4ZjksIDB4ODgsIDB4MjEsIDB4NDAsIDB4ZmQsIDB4ODgsIDB4MjEsIDB4NDAsIDB4MmQsIDB4ODUsIDB4MjEsIDB4NDAsCi0weDg5LCAweDg1LCAweDIxLCAweDQwLCAweDlkLCAweDc0LCAweDIxLCAweDQwLCAweDlkLCAweDc0LCAweDIxLCAweDQwLAotMHgwZCwgMHg4OSwgMHgyMSwgMHg0MCwgMHg5ZCwgMHg3NCwgMHgyMSwgMHg0MCwgMHhlMSwgMHg3NCwgMHgyMSwgMHg0MCwKLTB4OWQsIDB4NzQsIDB4MjEsIDB4NDAsIDB4OWQsIDB4NzQsIDB4MjEsIDB4NDAsIDB4OWQsIDB4NzQsIDB4MjEsIDB4NDAsCi0weDlkLCAweDc0LCAweDIxLCAweDQwLCAweDlkLCAweDc0LCAweDIxLCAweDQwLCAweDlkLCAweDc0LCAweDIxLCAweDQwLAotMHg2YiwgMHg3OCwgMHgyMSwgMHg0MCwgMHhmNSwgMHg3YiwgMHgyMSwgMHg0MCwgMHgzMSwgMHg3YywgMHgyMSwgMHg0MCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDAxLCAweDE4LCAweDQwLCAweDU4LCAweDAxLCAweDE4LCAweDQwLAotMHgyNCwgMHhhMywgMHgyMCwgMHg0MCwgMHgyNCwgMHhhNywgMHgyMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NmMsIDB4MDEsIDB4MTgsIDB4NDAsIDB4NjgsIDB4MDEsIDB4MTgsIDB4NDAsCi0weDI0LCAweDgzLCAweDIwLCAweDQwLCAweDI0LCAweGEzLCAweDIwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3YywgMHgwMSwgMHgxOCwgMHg0MCwgMHg3OCwgMHgwMSwgMHgxOCwgMHg0MCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDhjLCAweDAxLCAweDE4LCAweDQwLAotMHg4OCwgMHgwMSwgMHgxOCwgMHg0MCwgMHgyNCwgMHhhOSwgMHgyMCwgMHg0MCwgMHgyNCwgMHhhYiwgMHgyMCwgMHg0MCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDA4LCAweDAwLCAweDEyLCAweDAwLCAweDE4LCAweDAwLCAweDEyLCAweDAwLCAweDBjLCAweDAwLCAweDEyLCAweDAwLAotMHgxYywgMHgwMCwgMHgxMiwgMHgwMCwgMHgyNCwgMHhhOCwgMHgyMCwgMHg0MCwgMHhhNCwgMHhhOCwgMHgyMCwgMHg0MCwKLTB4YTQsIDB4YTgsIDB4MjAsIDB4NDAsIDB4MjQsIDB4YTksIDB4MjAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weGQxLCAweGE4LCAweDIxLCAweDQwLCAweDJkLCAweGFhLCAweDIxLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHg4OSwgMHg3MCwgMHgyMSwgMHg0MCwgMHhjOSwgMHhhMSwgMHgyMSwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDU3LCAweDg5LCAweDIxLCAweDQwLCAweGQxLCAweGE4LCAweDIxLCAweDQwLCAweGM1LCAweDJmLCAweGZmLCAweGZmLAotMHgwNSwgMHgyMSwgMHhmZiwgMHhmZiwgMHhlZiwgMHgyMCwgMHhmZiwgMHhmZiwgMHg1OSwgMHhhNywgMHgyMSwgMHg0MCwKLTB4MzQsIDB4MmUsIDB4MDAsIDB4ODAsIDB4NDgsIDB4MmUsIDB4MDAsIDB4ODAsIDB4NWMsIDB4MmUsIDB4MDAsIDB4ODAsCi0weDMwLCAweDMzLCAweDNhLCAweDMxLCAweDMxLCAweDNhLCAweDMxLCAweDMxLCAweDAwLCAweDMwLCAweDM3LCAweDJmLAotMHgzMiwgMHgzMywgMHgyZiwgMHgzMCwgMHgzMSwgMHgwMCwgMHgzMCwgMHgzMCwgMHgzMCwgMHgzMCwgMHgzMSwgMHgzNSwKLTB4MzYsIDB4MzksIDB4MDAsIDB4NDMsIDB4NmYsIDB4NzAsIDB4NzksIDB4NzIsIDB4NjksIDB4NjcsIDB4NjgsIDB4NzQsCi0weDIwLCAweDI4LCAweDYzLCAweDI5LCAweDIwLCAweDMyLCAweDMwLCAweDMwLCAweDMxLCAweDIwLCAweDMzLCAweDQzLAotMHg2ZiwgMHg2ZCwgMHgyMCwgMHg0MywgMHg2ZiwgMHg3MiwgMHg3MCwgMHg2ZiwgMHg3MiwgMHg2MSwgMHg3NCwgMHg2OSwKLTB4NmYsIDB4NmUsIDB4MGEsIDB4MDAsIDB4MDgsIDB4MTAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDhjLCAweDUzLCAweGZmLCAweGZmLAotMHgyNywgMHhmMCwgMHg3ZCwgMHhmZCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMiwgMHhkYSwgMHgwZSwgMHg4MiwgMHgwMCwKLTB4MDEsIDB4NDAsIDB4NjQsIDB4MDQsIDB4NjQsIDB4MmQsIDB4MDAsIDB4ODAsIDB4ZTQsIDB4MmMsIDB4MDAsIDB4ODAsCi0weDY5LCAweDNlLCAweGZmLCAweGZmLCAweGM5LCAweDRmLCAweGZmLCAweGZmLCAweGQ1LCAweDI0LCAweGZmLCAweGZmLAotMHhjOSwgMHgzYiwgMHhmZiwgMHhmZiwgMHgyOSwgMHgzYywgMHhmZiwgMHhmZiwgMHgxOSwgMHgxYSwgMHhmZiwgMHhmZiwKLTB4NjUsIDB4MTEsIDB4ZmYsIDB4ZmYsIDB4Y2MsIDB4NTMsIDB4ZmYsIDB4ZmYsIDB4MjEsIDB4NDAsIDB4ZmYsIDB4ZmYsCi0weDg5LCAweDcwLCAweDIxLCAweDQwLCAweDQ5LCAweDcyLCAweDIxLCAweDQwLCAweGQ5LCAweDNmLCAweGZmLCAweGZmLAotMHgyMSwgMHg5YSwgMHgyMSwgMHg0MCwgMHg4NSwgMHgyNCwgMHhmZiwgMHhmZiwgMHg2NCwgMHg1MywgMHhmZiwgMHhmZiwKLTB4OGMsIDB4NTMsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsCi0weDgwLCAweDMwLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgyMCwgMHg0MCwgMHhiMCwgMHg1MCwgMHgwMCwgMHgwMCwgMHg3YiwgMHgwZSwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4NmUsIDB4MjEsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weGVkLCAweDg5LCAweDIxLCAweDQwLCAweDhiLCAweDg5LCAweDIxLCAweDQwLCAweGE1LCAweDhjLCAweDIxLCAweDQwLAotMHgwNSwgMHg4ZCwgMHgyMSwgMHg0MCwgMHhjZCwgMHg4ZCwgMHgyMSwgMHg0MCwgMHg4YiwgMHg4YiwgMHgyMSwgMHg0MCwKLTB4YTksIDB4OGUsIDB4MjEsIDB4NDAsIDB4MTUsIDB4OGYsIDB4MjEsIDB4NDAsIDB4NjksIDB4OGIsIDB4MjEsIDB4NDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDU5LCAweGJkLCAweDIxLCAweDQwLCAweGMxLCAweGJkLCAweDIxLCAweDQwLCAweDJkLCAweGJlLCAweDIxLCAweDQwLAotMHgwMCwgMHgyMCwgMHgwYSwgMHg0YSwgMHgwYiwgMHgyMywgMHgxYiwgMHgwMiwgMHhkMSwgMHgxOCwgMHgyZCwgMHgyMywKLTB4OWIsIDB4MDEsIDB4ZDMsIDB4MTgsIDB4ODgsIDB4NjEsIDB4ZDgsIDB4NjAsIDB4ZDgsIDB4NjMsIDB4ODAsIDB4MzIsCi0weGM4LCAweDYwLCAweDA4LCAweDYxLCAweDQ4LCAweDYxLCAweGQwLCAweDYyLCAweDAzLCAweDQ4LCAweGMwLCAweDQ2LAotMHg0OCwgMHg2MCwgMHg4OCwgMHg2MCwgMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwKLTB4ZmUsIDB4MDMsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4YjUsIDB4ODQsIDB4YjAsIDB4MGMsIDB4MWMsIDB4MDUsIDB4MWMsCi0weDAwLCAweDIzLCAweDAwLCAweDkzLCAweGZmLCAweGY3LCAweGRlLCAweGZmLCAweDY4LCAweDQ5LCAweDBiLCAweDIzLAotMHgxYiwgMHgwMiwgMHhjZiwgMHgxOCwgMHg3OCwgMHg2OCwgMHgyOCwgMHg0MCwKLTB4MDAsIDB4MjIsIDB4ZjgsIDB4NjAsIDB4M2EsIDB4NjEsIDB4YmEsIDB4NjgsIDB4MjIsIDB4NDAsIDB4N2EsIDB4NjEsCi0weDBjLCAweDFjLCAweDQxLCAweDA5LCAweDAzLCAweGQyLCAweDUxLCAweDA5LCAweDAxLCAweGQyLCAweDgwLCAweDBhLAotMHgwMiwgMHhkMywgMHg2MCwgMHg0OCwgMHgwMCwgMHhmMCwgMHhjMiwgMHhmOCwgMHgwMSwgMHgyMCwgMHhmOSwgMHg2OCwKLTB4NDksIDB4MDksIDB4MDMsIDB4ZDIsIDB4NzksIDB4NjksIDB4NDksIDB4MDksIDB4MDAsIDB4ZDIsIDB4MDAsIDB4MjAsCi0weDAwLCAweDA2LCAweDAwLCAweDBlLCAweDAzLCAweGYwLCAweGQ0LCAweGZhLCAweGY4LCAweDY4LCAweDAwLCAweDI4LAotMHg3MCwgMHhkMCwgMHgwMCwgMHgyMywgMHgwMiwgMHg5MywgMHgwMSwgMHg5MywgMHg1NCwgMHg0YSwgMHgwMSwgMHgyMywKLTB4MTgsIDB4NDMsIDB4ZjgsIDB4NjAsIDB4MDAsIDB4MjAsIDB4ZDUsIDB4MWQsIDB4NzksIDB4MzUsIDB4MDMsIDB4OTUsCi0weDAxLCAweDI0LCAweDAwLCAweDIxLCAweDRmLCAweDRkLCAweGZhLCAweDY4LCAweDIyLCAweDQwLCAweDM5LCAweGQwLAotMHg4YSwgMHgwMCwgMHg1MiwgMHgxOCwgMHg5MiwgMHgwMCwgMHg0ZSwgMHg0YiwgMHg5YiwgMHg1YywgMHgxZSwgMHgxYywKLTB4ODMsIDB4NDIsIDB4MDQsIDB4ZDAsIDB4NGIsIDB4NGIsIDB4ZDMsIDB4MTgsIDB4NWIsIDB4NzgsIDB4ODMsIDB4NDIsCi0weDJjLCAweGQxLCAweDQ5LCAweDRiLCAweGQyLCAweDE4LCAweGQzLCAweDc4LCAweDAzLCAweDlkLCAweGVkLCAweDZhLAotMHhhYiwgMHg0MiwgMHgwMiwgMHhkOSwgMHgwMywgMHg5ZCwgMHhjMCwgMHg0NiwgMHhlYiwgMHg2MiwgMHg1MywgMHg2OCwKLTB4NWIsIDB4MDgsIDB4MDEsIDB4ZDMsIDB4MDEsIDB4MjMsIDB4MDAsIDB4OTMsIDB4ODYsIDB4NDIsIDB4MGEsIDB4ZDEsCi0weDk1LCAweDY4LCAweDAyLCAweDliLCAweDVlLCAweDFjLCAweDAyLCAweDk2LCAweDliLCAweDAwLCAweDNjLCAweDRlLAotMHg5ZSwgMHgxOSwgMHgwYiwgMHgyMywgMHgxYiwgMHgwMiwgMHhmMywgMHgxOCwgMHg5ZCwgMHg2MSwgMHg1MywgMHg3OCwKLTB4ODMsIDB4NDIsIDB4MGQsIDB4ZDEsIDB4ZDIsIDB4NjgsIDB4MDEsIDB4OWIsIDB4NWQsIDB4MWMsIDB4MDEsIDB4OTUsCi0weDliLCAweDAwLCAweDM1LCAweDRkLCAweDVkLCAweDE5LCAweDJkLCAweDIzLCAweDliLCAweDAxLCAweGViLCAweDE4LAotMHhkYSwgMHg2MCwgMHgzYSwgMHg2OSwgMHgwMSwgMHgzMiwgMHgzYSwgMHg2MSwgMHg2NCwgMHgwMCwgMHgwMSwgMHgzMSwKLTB4MGIsIDB4MjksIDB4YmQsIDB4ZDMsIDB4MDEsIDB4MzAsIDB4MDksIDB4MjgsIDB4YjgsIDB4ZDMsIDB4MDAsIDB4MjAsCi0weDAyLCAweDliLCAweDk5LCAweDAwLCAweDJiLCAweDRhLCAweDg5LCAweDE4LCAweDBiLCAweDIzLCAweDFiLCAweDAyLAotMHhjOSwgMHgxOCwgMHg4OCwgMHg2MSwgMHgwMSwgMHg5YiwgMHg5OSwgMHgwMCwgMHg4OSwgMHgxOCwgMHgyZCwgMHgyMywKLTB4OWIsIDB4MDEsIDB4YzksIDB4MTgsIDB4YzgsIDB4NjAsIDB4MDAsIDB4OWIsIDB4MDAsIDB4MmIsIDB4MGMsIDB4ZDEsCi0weDgxLCAweDAwLCAweDg5LCAweDE4LCAweDBiLCAweDIzLCAweDFiLCAweDAyLCAweGM5LCAweDE4LCAweGNiLCAweDY5LAotMHhjMCwgMHg0NiwgMHg4YiwgMHg2MSwgMHgwMSwgMHgzMCwgMHgwYiwgMHgyOCwgMHhmNCwgMHhkMywgMHgwOCwgMHhlMCwKLTB4MDcsIDB4ZTAsIDB4MDMsIDB4OWQsIDB4ZTgsIDB4NmEsIDB4MzAsIDB4MjgsIDB4MDMsIDB4ZDIsIDB4MzAsIDB4MjAsCi0weDAzLCAweDlkLCAweGMwLCAweDQ2LCAweGU4LCAweDYyLCAweDE5LCAweDRhLCAweDc4LCAweDY5LCAweDAwLCAweDI4LAotMHgyYSwgMHhkMCwgMHgwMCwgMHgyMSwgMHgwMSwgMHgyMywgMHgxOCwgMHg0MywgMHg3OCwgMHg2MSwgMHgwMCwgMHgyMCwKLTB4MDEsIDB4MjQsIDB4MDAsIDB4MjIsIDB4MTMsIDB4NGUsIDB4N2IsIDB4NjksIDB4MjMsIDB4NDAsIDB4MTAsIDB4ZDAsCi0weDkzLCAweDAwLCAweDliLCAweDE4LCAweDliLCAweDAwLCAweDEyLCAweDRkLCAweDViLCAweDE5LCAweDlkLCAweDc4LAotMHg4NSwgMHg0MiwgMHgwOCwgMHhkMSwgMHgxZCwgMHg2OSwgMHgwYiwgMHgxYywgMHg5YiwgMHgwMCwgMHg5ZSwgMHgxOSwKLTB4MmQsIDB4MjMsIDB4OWIsIDB4MDEsIDB4ZjMsIDB4MTgsIDB4ZGQsIDB4NjMsIDB4MDEsIDB4MzEsIDB4NjQsIDB4MDAsCi0weDAxLCAweDMyLCAweDBiLCAweDJhLCAweGU2LCAweGQzLCAweDAxLCAweDMwLCAweDA5LCAweDI4LCAweGUxLCAweGQzLAotMHgwMCwgMHgyMCwgMHg4OSwgMHgwMCwgMHgwNCwgMHg0YSwgMHg4OSwgMHgxOCwgMHgyZCwgMHgyMywgMHg5YiwgMHgwMSwKLTB4YzksIDB4MTgsIDB4YzgsIDB4NjMsIDB4MDQsIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weDY4LCAweDBlLCAweDAwLCAweDgwLCAweDMwLCAweDUzLCAweGZmLCAweGZmLCAweDAwLCAweDAxLCAweDAwLCAweDgwLAotMHgwMCwgMHg0NywgMHgwOCwgMHg0NywgMHgxMCwgMHg0NywgMHgxOCwgMHg0NywgMHg3OCwgMHg0NywgMHhjMCwgMHg0NiwKLTB4MTgsIDB4YzAsIDB4OWYsIDB4ZTUsIDB4MWMsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4NzgsIDB4NDcsIDB4YzAsIDB4NDYsCi0weDEwLCAweGMwLCAweDlmLCAweGU1LCAweDFjLCAweGZmLCAweDJmLCAweGUxLCAweDc4LCAweDQ3LCAweGMwLCAweDQ2LAotMHgwOCwgMHhjMCwgMHg5ZiwgMHhlNSwgMHgxYywgMHhmZiwgMHgyZiwgMHhlMSwgMHgzOCwgMHg1MiwgMHhmZiwgMHhmZiwKLTB4ODgsIDB4NTEsIDB4ZmYsIDB4ZmYsIDB4ZDUsIDB4YjAsIDB4MjEsIDB4NDAsIDB4ZjAsIDB4YjUsIDB4MDQsIDB4MjAsCi0weDFhLCAweDQ5LCAweDAxLCAweDI1LCAweDA4LCAweDYwLCAweDFhLCAweDRmLCAweGJiLCAweDIzLCAweDFiLCAweDAxLAotMHhmOCwgMHgxOCwgMHgwNSwgMHg3MywgMHgxOCwgMHg0OCwgMHg0MSwgMHg2YiwgMHgyYywgMHgwNSwgMHgwMCwgMHgyMCwKLTB4N2EsIDB4NmUsIDB4MTcsIDB4NGIsIDB4OGEsIDB4NDIsIDB4MWQsIDB4ZDAsCi0weDE5LCAweDdiLCAweDAwLCAweDI5LCAweDE3LCAweGQxLCAweGQ5LCAweDFkLCAweGZmLCAweDMxLCAweDNhLCAweDMxLAotMHg0OSwgMHg3OCwgMHgxZSwgMHgxYywgMHgwMCwgMHgyOSwgMHgxMCwgMHhkMSwgMHhiMCwgMHg2MCwgMHgxMCwgMHgyMCwKLTB4NzAsIDB4NjAsIDB4MTAsIDB4NGEsIDB4MTAsIDB4NDksIDB4ZmYsIDB4ZjcsIDB4YzMsIDB4ZmYsIDB4MDAsIDB4MjgsCi0weDA3LCAweGQwLCAweDM1LCAweDczLCAweDA0LCAweDIzLCAweGI4LCAweDY5LCAweDE4LCAweDQzLCAweGI4LCAweDYxLAotMHgyMCwgMHg2MSwgMHgwMCwgMHhmMCwgMHgxNywgMHhmOCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4MTgsIDB4NzMsIDB4MDQsIDB4MjMsIDB4YjgsIDB4NjksIDB4OTgsIDB4NDMsIDB4YjgsIDB4NjEsIDB4MjAsIDB4NjEsCi0weGY1LCAweGU3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLAotMHgwMCwgMHgwMSwgMHgxOCwgMHg0MCwgMHgyOCwgMHgwNSwgMHgwMCwgMHg4MCwgMHgyMCwgMHg1NSwgMHhmZiwgMHhmZiwKLTB4N2QsIDB4NzEsIDB4MjEsIDB4NDAsIDB4ZjgsIDB4YjUsIDB4MTUsIDB4NGYsIDB4MzksIDB4NmMsIDB4MTUsIDB4NDgsCi0weDQwLCAweDZlLCAweDBjLCAweDFhLCAweDE0LCAweDRlLCAweDcxLCAweDY4LCAweDE0LCAweDRkLCAweGExLCAweDQyLAotMHgwNiwgMHhkOCwgMHgxNCwgMHg0YSwgMHgwYSwgMHg0MywgMHgwMCwgMHg5MiwgMHhiOSwgMHg2YiwgMHgwOSwgMHgxOCwKLTB4ZmEsIDB4NmIsIDB4MTEsIDB4ZTAsIDB4MTEsIDB4MjIsIDB4NTIsIDB4MDUsIDB4MjIsIDB4NDMsIDB4MDAsIDB4OTIsCi0weGI5LCAweDZiLCAweDA5LCAweDE4LCAweDAwLCAweDIwLCAweGZhLCAweDZiLCAweDJiLCAweDFjLCAweGZmLCAweGY3LAotMHg4ZCwgMHhmZiwgMHg3MCwgMHg2OCwgMHgwMCwgMHgxYiwgMHgwYSwgMHg0YSwgMHgwMiwgMHg0MywgMHgwMCwgMHg5MiwKLTB4YjksIDB4NmIsIDB4ZmEsIDB4NmIsIDB4MDAsIDB4MjAsIDB4MmIsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4ODIsIDB4ZmYsCi0weGY4LCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDdjLCAweDI5LCAweDAwLCAweDgwLAotMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHgyOCwgMHgwNSwgMHgwMCwgMHg4MCwgMHg0NCwgMHg4MCwgMHgyMCwgMHg0MCwKLTB4MDAsIDB4MDAsIDB4MzcsIDB4MDIsIDB4ZjAsIDB4YjUsIDB4MmIsIDB4NGYsIDB4YjgsIDB4NjgsIDB4NzksIDB4NjgsCi0weGMwLCAweDE5LCAweDIwLCAweDMwLCAweDI5LCAweDRhLCAweGZmLCAweGY3LCAweDYzLCAweGZmLCAweDAxLCAweDIwLAotMHhjMCwgMHgwMiwgMHgyOCwgMHg0OSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg2MCwgMHhiOSwgMHg2OCwgMHgzOCwgMHgxYywKLTB4MjYsIDB4NGQsIDB4MDAsIDB4MjQsIDB4MjYsIDB4NGUsIDB4ZWYsIDB4MWQsIDB4NzksIDB4MzcsIDB4MDAsIDB4MjksCi0weDMxLCAweGQxLCAweDMxLCAweDY4LCAweDBhLCAweDc4LCAweDEyLCAweDBhLCAweDAzLCAweGQyLCAweDA0LCAweDczLAotMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg0OSwgMHg3OCwgMHgwMCwgMHgyOSwgMHgwYywgMHhkMSwKLTB4MDUsIDB4MWMsIDB4NDAsIDB4NjgsIDB4MDAsIDB4ZjAsIDB4M2UsIDB4ZjksIDB4MzAsIDB4NjgsIDB4MDAsIDB4ZjAsCi0weDY3LCAweGY4LCAweDAwLCAweDI4LCAweDI2LCAweGQxLCAweDJjLCAweDczLCAweGZmLCAweGY3LCAweDU4LCAweGZmLAotMHgyMiwgMHhlMCwgMHgwOSwgMHgwMSwgMHgwNywgMHgxYywgMHg0MSwgMHg2MCwgMHgwOCwgMHgxYywgMHgxNywgMHg0YSwKLTB4MTcsIDB4NDksIDB4ZmYsIDB4ZjcsIDB4MzUsIDB4ZmYsIDB4MDAsIDB4MjgsIDB4MDcsIDB4ZDEsIDB4M2MsIDB4NzMsCi0weDA0LCAweDIzLCAweGE4LCAweDY5LCAweDk4LCAweDQzLCAweDk5LCAweDA0LCAweGE4LCAweDYxLCAweDA4LCAweDYxLAotMHhkYSwgMHhlNywgMHgxMCwgMHgyMCwgMHgwMCwgMHhmMCwgMHgyMCwgMHhmOSwgMHgxMCwgMHgyMCwgMHhiOCwgMHg2MCwKLTB4ZmYsIDB4ZjcsIDB4ODIsIDB4ZmYsIDB4ZDIsIDB4ZTcsIDB4MDUsIDB4MWMsIDB4NDAsIDB4NjgsIDB4MDAsIDB4ZjAsCi0weDE3LCAweGY5LCAweDMwLCAweDY4LCAweDAwLCAweGYwLCAweDQwLCAweGY4LCAweDAwLCAweDI4LCAweGQ4LCAweGQwLAotMHgwMiwgMHgyMywgMHhmOCwgMHg2YiwgMHgxOCwgMHg0MywgMHhmOCwgMHg2MywgMHhjNCwgMHhlNywgMHgwMCwgMHgwMCwKLTB4MjgsIDB4MDUsIDB4MDAsIDB4ODAsIDB4YTUsIDB4NTUsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsCi0weDY4LCAweDBlLCAweDAwLCAweDgwLCAweGU0LCAweDAxLCAweDAwLCAweDgwLCAweDIwLCAweDU1LCAweGZmLCAweGZmLAotMHg3ZCwgMHg3MSwgMHgyMSwgMHg0MCwgMHg5MCwgMHhiNSwgMHgwMSwgMHgyMCwgMHg0MCwgMHgwMywgMHgxMCwgMHg0OSwKLTB4MDAsIDB4MjcsIDB4MDgsIDB4NjAsIDB4MGYsIDB4NGMsIDB4ZTAsIDB4MWQsIDB4ZmYsIDB4MzAsIDB4M2EsIDB4MzAsCi0weDQ3LCAweDcwLCAweGUwLCAweDY5LCAweDgwLCAweDAwLCAweDAwLCAweDE5LCAweDAwLCAweDY5LCAweDAwLCAweGYwLAotMHhkNywgMHhmOCwgMHhlMCwgMHg2OSwgMHgwMCwgMHgyOCwgMHgwMSwgMHhkMCwgMHhlNywgMHg2MSwgMHgwMSwgMHhlMCwKLTB4MDEsIDB4MjAsIDB4ZTAsIDB4NjEsIDB4MDcsIDB4NDgsIDB4MDIsIDB4MjMsIDB4YzEsIDB4NmIsIDB4MTksIDB4NDMsCi0weGMxLCAweDYzLCAweDI3LCAweDczLCAweGZmLCAweGY3LCAweDAwLCAweGZmLCAweDkwLCAweGJjLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgyOCwgMHgwNSwgMHgwMCwgMHg4MCwKLTB4ZTgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4ODAsIDB4YjUsIDB4ODQsIDB4YjAsIDB4MDcsIDB4MWMsIDB4NzgsIDB4ODgsCi0weDZkLCAweDI4LCAweDAzLCAweGRiLCAweDM4LCAweDFjLCAweDAwLCAweGYwLAotMHhmNywgMHhmOCwgMHgxNywgMHhlMCwgMHg4MCwgMHgwMCwgMHgwZCwgMHg0OSwgMHgwOSwgMHg1OCwgMHgzOCwgMHgxYywKLTB4ZmYsIDB4ZjcsIDB4Y2IsIDB4ZmUsIDB4MDAsIDB4MjgsIDB4MGYsIDB4ZDEsIDB4MzksIDB4NzgsIDB4YzksIDB4MDksCi0weDBjLCAweGQzLCAweDY5LCAweDQ2LCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAweGNmLCAweGY4LCAweDY4LCAweDQ2LAotMHgwMCwgMHgyMSwgMHgwMCwgMHhmMCwgMHgwYiwgMHhmOCwgMHgwMCwgMHgyOCwgMHgwMSwgMHhkMSwgMHgwMSwgMHgyMCwKLTB4MDAsIDB4ZTAsIDB4MDAsIDB4MjAsIDB4MDQsIDB4YjAsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weGU4LCAweDAxLCAweDAwLCAweDgwLCAweGYwLCAweGI1LCAweDgyLCAweGIwLCAweDAyLCAweDFjLCAweDQxLCAweDRiLAotMHhkZCwgMHgxZCwgMHhmZiwgMHgzNSwgMHgzYSwgMHgzNSwgMHgyZiwgMHg3OCwgMHgwMCwgMHgyZiwgMHgwMSwgMHhkMCwKLTB4MDAsIDB4MjcsIDB4MDAsIDB4ZTAsIDB4MDEsIDB4MjcsIDB4MmYsIDB4NzAsIDB4MmYsIDB4NzgsIDB4ZmIsIDB4MDAsCi0weGRiLCAweDE5LCAweDViLCAweDAxLCAweDNhLCAweDRmLCAweGRjLCAweDE5LCAweDQwLCAweDc4LCAweDAwLCAweDAxLAotMHhjNywgMHgxZCwgMHgwOSwgMHgzNywgMHgwMCwgMHgyMCwgMHg4MywgMHgwMCwgMHhkNiwgMHg1OCwgMHhjMCwgMHg0NiwKLTB4ZTYsIDB4NTAsIDB4MDEsIDB4MzAsIDB4MDQsIDB4MjgsIDB4ZjgsIDB4ZDMsIDB4MDAsIDB4MjksIDB4MGYsIDB4ZDAsCi0weDAwLCAweDIyLCAweGJiLCAweDA4LCAweDAxLCAweDkzLCAweDgzLCAweDQyLCAweDBiLCAweGQ5LCAweDEzLCAweDFjLAotMHg5YiwgMHgwMCwgMHhjYiwgMHg1OCwgMHg4NiwgMHgwMCwgMHhhMywgMHg1MSwgMHgwMSwgMHg5YiwgMHgwMSwgMHgzMCwKLTB4MDEsIDB4MzIsIDB4ODMsIDB4NDIsIDB4ZjUsIDB4ZDgsIDB4MDAsIDB4ZTAsIDB4MTAsIDB4MjcsIDB4MmIsIDB4NDgsCi0weDAyLCAweDZkLCAweDgwLCAweDZlLCAweDJhLCAweDQ5LCAweDgyLCAweDQyLCAweDAzLCAweGQ4LCAweDgyLCAweDFhLAotMHhjYiwgMHg2YywgMHg5YSwgMHgxYSwgMHgwMCwgMHhlMCwgMHgxMiwgMHgxYSwgMHhiYSwgMHg0MiwgMHgwNSwgMHhkOCwKLTB4MjYsIDB4NDgsIDB4ODEsIDB4NmIsIDB4MDEsIDB4MzEsIDB4ODEsIDB4NjMsIDB4MDEsIDB4MjAsIDB4MzcsIDB4ZTAsCi0weGMzLCAweDE5LCAweGNhLCAweDZjLCAweDkzLCAweDQyLCAweDA4LCAweGQ4LCAweDIyLCAweDRhLCAweDNhLCAweDQzLAotMHgwMCwgMHg5MiwgMHgwYSwgMHgxYywgMHg0OSwgMHg2YywgMHgwOSwgMHgxOCwgMHg5MiwgMHg2YywgMHgyMywgMHgxYywKLTB4MTIsIDB4ZTAsIDB4MTYsIDB4MWEsIDB4MDAsIDB4OTYsIDB4MWIsIDB4NDksIDB4NDksIDB4NmMsIDB4MDksIDB4MTgsCi0weDE5LCAweDQ4LCAweDgyLCAweDZjLCAweDAzLCAweDIwLCAweDIzLCAweDFjLCAweGZmLCAweGY3LCAweDVlLCAweGZlLAotMHhiOCwgMHgxYiwgMHgxOCwgMHg0YSwgMHgwMiwgMHg0MywgMHgwMCwgMHg5MiwgMHhhMywgMHgxOSwgMHgxNCwgMHg0OCwKLTB4ODIsIDB4NmMsIDB4NDEsIDB4NmMsIDB4MDMsIDB4MjAsIDB4ZmYsIDB4ZjcsIDB4NTMsIDB4ZmUsIDB4MDEsIDB4MjAsCi0weDBkLCAweDQ5LCAweGMwLCAweDQ2LCAweDY4LCAweDcwLCAweDhhLCAweDY5LCAweDkyLCAweDAwLCAweDUyLCAweDE4LAotMHgxNywgMHg2MSwgMHg4YSwgMHg2OSwgMHgwMCwgMHgyYSwgMHgwMiwgMHhkMCwgMHgwMCwgMHgyNywgMHg4ZiwgMHg2MSwKLTB4MDAsIDB4ZTAsIDB4ODgsIDB4NjEsIDB4MGMsIDB4NDgsIDB4MDIsIDB4MjMsIDB4YzEsIDB4NmIsIDB4MTksIDB4NDMsCi0weGMxLCAweDYzLCAweDAwLCAweDIwLCAweDAxLCAweDI3LCAweDBhLCAweDQ5LCAweGMwLCAweDQ2LCAweDRmLCAweDczLAotMHgwMiwgMHhiMCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgyOCwgMHgwNSwgMHgwMCwgMHg4MCwKLTB4NTAsIDB4YmEsIDB4MjAsIDB4NDAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4N2MsIDB4MjksIDB4MDAsIDB4ODAsCi0weGEwLCAweDgyLCAweDIwLCAweDQwLCAweDAwLCAweDAwLCAweDE5LCAweDAyLCAweGU4LCAweDBlLCAweDAwLCAweDgwLAotMHgxOCwgMHgxYSwgMHgwMCwgMHg4MCwgMHgwNywgMHg0OSwgMHg4YSwgMHg2ZSwgMHgxMCwgMHgxOCwgMHgwNywgMHg0YSwKLTB4ZDIsIDB4NmMsIDB4MTMsIDB4MDQsIDB4MWIsIDB4MGMsIDB4ODMsIDB4NDIsIDB4MDAsIDB4ZDgsIDB4ODAsIDB4MWEsCi0weDg4LCAweDY2LCAweDg4LCAweDZlLCAweDAzLCAweDQ5LCAweGMwLCAweDQ2LCAweDQ4LCAweDYxLCAweDcwLCAweDQ3LAotMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHg3YywgMHgyOSwgMHgwMCwgMHg4MCwgMHg5MCwgMHhlZSwgMHgyMCwgMHg0MCwKLTB4MDYsIDB4NDksIDB4NGEsIDB4NmUsIDB4MTAsIDB4MTgsIDB4MDYsIDB4NGEsIDB4MTIsIDB4NmMsIDB4ODIsIDB4NDIsCi0weDAwLCAweGQ4LCAweDgwLCAweDFhLCAweDQ4LCAweDY2LCAweDQ4LCAweDZlLCAweDAzLCAweDQ5LCAweGMwLCAweDQ2LAotMHgwOCwgMHg2MSwgMHg3MCwgMHg0NywgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHg3YywgMHgyOSwgMHgwMCwgMHg4MCwKLTB4OTAsIDB4ZWUsIDB4MjAsIDB4NDAsIDB4MDUsIDB4MjIsIDB4MGEsIDB4NjAsIDB4ODIsIDB4ODgsIDB4YzAsIDB4NDYsCi0weDhhLCAweDgwLCAweDAwLCAweDIyLCAweDRhLCAweDcwLCAweDQwLCAweDg4LCAweGMwLCAweDQ2LCAweDQ4LCAweDgwLAotMHhjYSwgMHg4MCwgMHg4YSwgMHg2MCwgMHhjYSwgMHg2MCwgMHg3MCwgMHg0NywgMHgwNSwgMHgyMiwgMHgwMiwgMHg2MCwKLTB4MDAsIDB4MjIsIDB4ODIsIDB4ODAsIDB4NDIsIDB4NzAsIDB4NDEsIDB4ODAsIDB4YzIsIDB4ODAsIDB4ODIsIDB4NjAsCi0weGMyLCAweDYwLCAweDcwLCAweDQ3LCAweDgwLCAweGI1LCAweDg0LCAweGIwLCAweDA3LCAweDFjLCAweDBlLCAweDQ4LAotMHg0MSwgMHg2YiwgMHgwMSwgMHgzMSwgMHg0MSwgMHg2MywgMHg2OSwgMHg0NiwKLTB4MzgsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4ZGQsIDB4ZmYsIDB4MzgsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTAsCi0weDQ1LCAweDIwLCAweDAwLCAweGFiLCAweDE4LCAweDcwLCAweDAxLCAweDI3LCAweGRmLCAweDgwLCAweDY4LCAweDQ2LAotMHgwMCwgMHgyMSwgMHhmZiwgMHhmNywgMHgxMSwgMHhmZiwgMHgwMCwgMHgyOCwgMHgwMSwgMHhkMSwgMHgzOCwgMHgxYywKLTB4MDAsIDB4ZTAsIDB4MDAsIDB4MjAsIDB4MDQsIDB4YjAsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weGEwLCAweDgyLCAweDIwLCAweDQwLCAweDAwLCAweGI1LCAweDg0LCAweGIwLCAweGMxLCAweDg4LCAweDA5LCAweDRhLAotMHhjMCwgMHg0NiwgMHg5MSwgMHg4MSwgMHg2OSwgMHg0NiwgMHhmZiwgMHhmNywgMHhiZCwgMHhmZiwgMHgwMSwgMHgyMCwKLTB4NDAsIDB4MDIsIDB4MDEsIDB4YWIsIDB4NTgsIDB4ODAsIDB4NjgsIDB4NDYsIDB4MDAsIDB4MjEsIDB4ZmYsIDB4ZjcsCi0weGY1LCAweGZlLCAweDAxLCAweDIwLCAweDA0LCAweGIwLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLAotMHhlOCwgMHgwZSwgMHgwMCwgMHg4MCwgMHgwMCwgMHhiNSwgMHhmZiwgMHhmNywgMHhjMywgMHhmZiwgMHgwOCwgMHhiYywKLTB4MTgsIDB4NDcsIDB4MDEsIDB4MjAsIDB4MDMsIDB4NDksIDB4YzAsIDB4NDYsIDB4MDgsIDB4NzEsIDB4YTEsIDB4MjEsCi0weDQ5LCAweDAzLCAweDg4LCAweDYwLCAweDAwLCAweDIwLCAweDcwLCAweDQ3LCAweDI4LCAweDBmLCAweDAwLCAweDgwLAotMHgwMCwgMHgyMCwgMHgwNCwgMHg0OSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg3MSwgMHhmZiwgMHgyMSwgMHhhMSwgMHgyMiwKLTB4NTIsIDB4MDMsIDB4MDEsIDB4MzEsIDB4OTEsIDB4NjAsIDB4NzAsIDB4NDcsIDB4MjgsIDB4MGYsIDB4MDAsIDB4ODAsCi0weDAyLCAweDIwLCAweGExLCAweDIxLCAweDQ5LCAweDAzLCAweDg4LCAweDYwLCAweDAwLCAweDIwLCAweDcwLCAweDQ3LAotMHgwMSwgMHgyMCwgMHg0MCwgMHgwMiwgMHhhMSwgMHgyMSwgMHg0OSwgMHgwMywgMHg4OCwgMHg2MCwgMHgwMCwgMHgyMCwKLTB4NzAsIDB4NDcsIDB4YzAsIDB4ODgsIDB4YzAsIDB4MDYsIDB4YzAsIDB4MGUsIDB4YTEsIDB4MjEsIDB4NDksIDB4MDMsCi0weDQ4LCAweDYxLCAweDAyLCAweDQ5LCAweGMwLCAweDQ2LCAweGM4LCAweDYzLCAweDAwLCAweDIwLCAweDcwLCAweDQ3LAotMHhlOCwgMHgxYSwgMHgwMCwgMHg4MCwgMHg4MCwgMHhiNSwgMHg4NCwgMHhiMCwgMHgwOCwgMHg0OSwgMHgwZiwgMHg2YiwKLTB4NjksIDB4NDYsIDB4ZmYsIDB4ZjcsIDB4NzEsIDB4ZmYsIDB4ZjgsIDB4MDYsIDB4YzAsIDB4MGUsIDB4MDEsIDB4YWIsCi0weDU4LCAweDgwLCAweDY4LCAweDQ2LCAweDAwLCAweDIxLCAweGZmLCAweGY3LCAweGE5LCAweGZlLCAweDAxLCAweDIwLAotMHgwNCwgMHhiMCwgMHg4MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg4MCwgMHgwMCwgMHgxNCwgMHg0MCwKLTB4ODAsIDB4YjUsIDB4ODUsIDB4YjAsIDB4MDcsIDB4MWMsIDB4NjksIDB4NDYsIDB4MzgsIDB4MWMsIDB4ZmYsIDB4ZjcsCi0weDViLCAweGZmLCAweGY4LCAweDg4LCAweDA0LCAweGE5LCAweDAzLCAweGYwLCAweGM5LCAweGZmLCAweDAxLCAweGFiLAotMHg1OCwgMHg4MCwgMHgwMSwgMHhhOCwgMHg0MCwgMHg4OCwgMHgwMCwgMHgyOCwgMHgwZiwgMHhkMCwgMHgwMSwgMHhhOCwKLTB4NDAsIDB4ODgsIDB4ODAsIDB4MDgsIDB4MDMsIDB4MzgsIDB4ODAsIDB4MDgsIDB4MDEsIDB4MzAsIDB4MDQsIDB4M2IsCi0weDU4LCAweDcwLCAweDA0LCAweDk4LCAweDAxLCAweDY4LCAweGMwLCAweDQ2LCAweDAyLCAweDkxLCAweDQwLCAweDY4LAotMHhjMCwgMHg0NiwgMHgwMywgMHg5MCwgMHgwNSwgMHhlMCwgMHgwMCwgMHhhOCwgMHgwMCwgMHg3OCwgMHg0MCwgMHgyMywKLTB4MTgsIDB4NDMsIDB4MDAsIDB4YWIsIDB4MTgsIDB4NzAsIDB4MDQsIDB4OTgsIDB4YzEsIDB4MWQsIDB4MDEsIDB4MzEsCi0weDY4LCAweDQ2LCAweGZmLCAweGY3LCAweDc1LCAweGZlLCAweDAxLCAweDIwLCAweDA1LCAweGIwLCAweDgwLCAweGJjLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg5MCwgMHhiNSwgMHg4NCwgMHhiMCwgMHgxNCwgMHg0ZiwgMHgzOSwgMHg3YiwKLTB4MDAsIDB4MjksIDB4MjAsIDB4ZDEsIDB4ZjksIDB4MWQsIDB4ZmYsIDB4MzEsIDB4M2EsIDB4MzEsIDB4NDksIDB4NzgsCi0weDAwLCAweDI5LCAweDFhLCAweGQxLCAweDEwLCAweDQ5LCAweDA1LCAweDIyLCAweDAwLCAweDkyLCAweDA4LCAweDIyLAotMHgwMCwgMHhhYiwgMHg1YSwgMHg4MCwgMHg5OCwgMHg4MCwgMHgwNiwgMHgyMCwgMHgwMCwgMHhhYiwgMHg1OCwgMHg3MCwKLTB4MDAsIDB4MjQsIDB4ZGMsIDB4ODAsIDB4MDgsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MDIsIDB4OTAsIDB4NDgsIDB4NjgsCi0weGMwLCAweDQ2LCAweDAzLCAweDkwLCAweDAxLCAweDIwLCAweDM4LCAweDczLCAweDY4LCAweDQ2LCAweDA4LCAweDMxLAotMHhmZiwgMHhmNywgMHg0YywgMHhmZSwgMHgwMCwgMHgyOCwgMHgwMCwgMHhkMCwgMHgzYywgMHg3MywgMHgwNCwgMHhiMCwKLTB4OTAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDUsIDB4MDAsIDB4ODAsCi0weGE0LCAweDJhLCAweDAwLCAweDgwLCAweDkwLCAweGI1LCAweDg0LCAweGIwLCAweDA3LCAweDFjLCAweDY5LCAweDQ2LAotMHgzOCwgMHgxYywgMHhmZiwgMHhmNywgMHhmOSwgMHhmZSwgMHhiYSwgMHg2OCwgMHgwZCwgMHg0YywgMHgwZSwgMHg0OCwKLTB4MDAsIDB4MmEsIDB4MDUsIDB4ZDEsIDB4MGQsIDB4NDksIDB4ZmYsIDB4ZjcsIDB4ZTQsIDB4ZmMsIDB4MDAsIDB4MjgsCi0weDBjLCAweGRhLCAweDA1LCAweGUwLCAweGI5LCAweDg4LCAweDBiLCAweDRiLCAweGZmLCAweGY3LCAweGRmLCAweGZjLAotMHgwMCwgMHgyOCwgMHgwNSwgMHhkYSwgMHgwMSwgMHhhYiwgMHg1YywgMHg4MCwgMHg2OCwgMHg0NiwgMHgwMCwgMHgyMSwKLTB4ZmYsIDB4ZjcsIDB4MjIsIDB4ZmUsIDB4MDAsIDB4MjAsIDB4MDQsIDB4YjAsCi0weDkwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLAotMHgwZCwgMHg3NiwgMHgyMSwgMHg0MCwgMHhjMSwgMHhiZCwgMHgyMSwgMHg0MCwgMHg1OSwgMHhiZCwgMHgyMSwgMHg0MCwKLTB4MDAsIDB4YjUsIDB4YzAsIDB4ODgsIDB4MDMsIDB4ZjAsIDB4MmUsIDB4ZmYsIDB4MDAsIDB4MjAsIDB4MDgsIDB4YmMsCi0weDE4LCAweDQ3LCAweDAwLCAweGI1LCAweGZmLCAweGY3LCAweGUyLCAweGZlLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHgwMCwgMHhiNSwgMHhmZiwgMHhmNywgMHhkZCwgMHhmZSwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHhiNSwKLTB4MDEsIDB4MWMsIDB4MDIsIDB4MjAsIDB4MDAsIDB4ZjAsIDB4MDIsIDB4ZjgsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weGIwLCAweGI1LCAweGM2LCAweGIwLCAweDA3LCAweDFjLCAweDA4LCAweDFjLCAweDY5LCAweDQ2LCAweGZmLCAweGY3LAotMHhiNSwgMHhmZSwgMHgyMSwgMHg0OCwgMHhmZiwgMHhmNywgMHhhNCwgMHhmYywgMHgwNCwgMHgxYywgMHgyMCwgMHg0YSwKLTB4MDAsIDB4MjEsIDB4MzgsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4YTAsIDB4ZmMsIDB4MDAsIDB4MjgsIDB4MjcsIDB4ZDAsCi0weDA0LCAweGE5LCAweDFkLCAweDRhLCAweDM4LCAweDFjLCAweGZmLCAweGY3LCAweDk5LCAweGZjLCAweDA0LCAweGE4LAotMHgwMCwgMHgyMywgMHgwMSwgMHgyZiwgMHgwNiwgMHhkMSwgMHgwYywgMHhhYSwgMHgwMiwgMHgzMiwgMHgwMCwgMHgyMSwKLTB4MTMsIDB4NjAsIDB4MDEsIDB4MzEsIDB4MTAsIDB4MjksIDB4ZmIsIDB4ZDMsIDB4MDEsIDB4NjgsIDB4MDQsIDB4MjksCi0weDA0LCAweGQ5LCAweDg5LCAweDA4LCAweDAzLCAweDM5LCAweDg5LCAweDA4LCAweDAxLCAweDMxLCAweDAwLCAweGUwLAotMHgxOSwgMHgxYywgMHgwMCwgMHhhYiwgMHg1OSwgMHg3MCwgMHgwNiwgMHhhOSwgMHgwOSwgMHg3OCwgMHhjMCwgMHg0NiwKLTB4ZDksIDB4ODAsIDB4MDAsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MDIsIDB4OTAsIDB4MDcsIDB4OTgsIDB4YzAsIDB4NDYsCi0weDAzLCAweDkwLCAweDA0LCAweDMzLCAweDA4LCAweGFkLCAweDAyLCAweGUwLCAweDQ1LCAweDIwLCAweDAwLCAweGFiLAotMHgxOCwgMHg3MCwgMHgwOSwgMHg0OSwgMHgyMCwgMHgxYywgMHhmZiwgMHhmNywgMHg2ZSwgMHhmYywgMHg2OCwgMHg0NiwKLTB4MjksIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4YjcsIDB4ZmQsIDB4MDEsIDB4MjAsIDB4NDYsIDB4YjAsIDB4YjAsIDB4YmMsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDI0LCAweDAyLCAweGZmLCAweGZmLCAweDU5LCAweGIxLCAweDIxLCAweDQwLAotMHg5ZCwgMHhhZiwgMHgyMSwgMHg0MCwgMHgzYywgMHgwMiwgMHhmZiwgMHhmZiwgMHgwMCwgMHhiNSwgMHgwMSwgMHgxYywKLTB4MDIsIDB4MjAsIDB4MDAsIDB4ZjAsIDB4MTAsIDB4ZjgsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4YjUsCi0weDAxLCAweDFjLCAweDAxLCAweDIwLCAweGZmLCAweGY3LCAweGEyLCAweGZmLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHgwMCwgMHhiNSwgMHgwMSwgMHgxYywgMHgwMSwgMHgyMCwgMHgwMCwgMHhmMCwgMHgwMiwgMHhmOCwgMHgwOCwgMHhiYywKLTB4MTgsIDB4NDcsIDB4ZjAsIDB4YjUsIDB4YzcsIDB4YjAsIDB4MDQsIDB4MWMsIDB4MGYsIDB4MWMsIDB4MzgsIDB4MWMsCi0weDAxLCAweGE5LCAweGZmLCAweGY3LCAweDRkLCAweGZlLCAweDIxLCAweDQ4LCAweGZmLCAweGY3LCAweDNjLCAweGZjLAotMHgwMCwgMHg5MCwgMHg3OCwgMHg3OCwgMHgwMCwgMHgwMSwgMHhiYSwgMHg2OCwgMHgwNCwgMHgzMCwgMHhmYywgMHgyYSwKLTB4MjUsIDB4ZDgsIDB4ZmYsIDB4MjMsIDB4MDksIDB4MzMsIDB4OTgsIDB4NDIsIDB4MjEsIDB4ZDgsIDB4MTksIDB4MmMsCi0weDFmLCAweGQ4LCAweGZkLCAweDg4LCAweGY4LCAweDY4LCAweGMwLCAweDQ2LCAweDA1LCAweDkwLCAweGY5LCAweDFkLAotMHgwOSwgMHgzMSwgMHgwNiwgMHhhYiwgMHgwMCwgMHgyMCwgMHg3ZSwgMHg3OCwgMHgwMCwgMHgyZSwgMHgwZCwgMHhkZCwKLTB4NDAsIDB4YzksIDB4NDAsIDB4YzMsIDB4NDAsIDB4YzksIDB4NDAsIDB4YzMsIDB4NDAsIDB4YzksIDB4NDAsIDB4YzMsCi0weDQwLCAweGM5LCAweDQwLCAweGMzLCAweDAxLCAweDMwLCAweDAwLCAweDA0LCAweDAwLCAweDBjLCAweDdlLCAweDc4LAotMHg4NiwgMHg0MiwgMHhmMSwgMHhkYywgMHgyMCwgMHgxYywgMHgwNSwgMHhhOSwgMHgyYiwgMHgxYywgMHhmZiwgMHhmNywKLTB4MjEsIDB4ZmMsIDB4MDAsIDB4MjgsIDB4MDUsIDB4ZDAsIDB4MDEsIDB4YTgsIDB4MDAsIDB4NzgsIDB4NDAsIDB4MjMsCi0weDE4LCAweDQzLCAweDAxLCAweGFiLCAweDE4LCAweDcwLCAweDA3LCAweDQ5LCAweDAwLCAweDk4LCAweGZmLCAweGY3LAotMHgwNiwgMHhmYywgMHgwMCwgMHgyMSwgMHgwMSwgMHhhOCwgMHhmZiwgMHhmNywgMHg0ZiwgMHhmZCwgMHgwMSwgMHgyMCwKLTB4NDcsIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MjQsIDB4MDIsIDB4ZmYsIDB4ZmYsCi0weDNjLCAweDAyLCAweGZmLCAweGZmLCAweDAwLCAweGI1LCAweGZmLCAweGY3LCAweDFiLCAweGZlLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHhmMCwgMHhiNSwgMHhjNiwgMHhiMCwgMHgwNywgMHgxYywgMHhmYywgMHg4OCwgMHgyNSwgMHg0ZCwKLTB4NjgsIDB4NjgsIDB4MDEsIDB4MzAsIDB4NjksIDB4NDYsIDB4NjgsIDB4NjAsIDB4MzgsIDB4MWMsIDB4ZmYsIDB4ZjcsCi0weGY1LCAweGZkLCAweDEwLCAweDJjLCAweDA4LCAweGQzLCAweDAwLCAweGE4LCAweDAwLCAweDc4LCAweDQwLCAweDIzLAotMHgxOCwgMHg0MywgMHgwMCwgMHhhYiwgMHgxOCwgMHg3MCwgMHgwMiwgMHgyMCwgMHhkOCwgMHg4MCwgMHgxNywgMHhlMCwKLTB4NzgsIDB4NzgsIDB4ODIsIDB4MDAsIDB4ZmIsIDB4MWQsIDB4MDksIDB4MzMsIDB4MDAsIDB4MjAsIDB4YjksIDB4NjgsCi0weDAwLCAweDJhLCAweDE1LCAweGQ5LCAweDQwLCAweGNiLCAweDBmLCAweDFjLAotMHgwMSwgMHgzMSwgMHhiZSwgMHg0MiwgMHgwZCwgMHhkMCwgMHgwMCwgMHhhYSwgMHgxMiwgMHg3OCwgMHg0MCwgMHgyMywKLTB4MWEsIDB4NDMsIDB4MDAsIDB4YWIsIDB4MWEsIDB4NzAsIDB4MDQsIDB4MjIsIDB4ZGEsIDB4ODAsIDB4MDIsIDB4OTAsCi0weDAzLCAweDkxLCAweDA0LCAweDMzLCAweDY4LCAweDQ2LCAweDAwLCAweDIxLCAweDE1LCAweGUwLCAweDAxLCAweDMwLAotMHg5MCwgMHg0MiwgMHhlOSwgMHhkMywgMHgwMCwgMHhhYiwgMHg1YywgMHg3MCwgMHgwMiwgMHg5NCwgMHg2OSwgMHg2OCwKLTB4YzAsIDB4NDYsIDB4MDMsIDB4OTEsIDB4YTIsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MTAsIDB4MzMsIDB4MDAsIDB4MmEsCi0weDA1LCAweGQ5LCAweDBmLCAweDFjLCAweDgwLCAweGMzLCAweDAxLCAweDMwLCAweDAxLCAweDMxLCAweDkwLCAweDQyLAotMHhmOSwgMHhkMywgMHg2OCwgMHg0NiwgMHgwNCwgMHhhOSwgMHhmZiwgMHhmNywgMHhmNywgMHhmYywgMHgwMSwgMHgyMCwKLTB4NDYsIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4OWMsIDB4MDMsIDB4MDAsIDB4ODAsCi0weDkwLCAweGI0LCAweDIzLCAweDQ4LCAweDAwLCAweDY4LCAweDAxLCAweDIxLCAweDQyLCAweDA5LCAweDAwLCAweGQzLAotMHgwMCwgMHgyMSwgMHgwMCwgMHgyNywgMHgzYSwgMHgxYywgMHg0MywgMHgwYiwgMHgwMCwgMHhkMiwgMHgwMiwgMHgyMiwKLTB4MTEsIDB4NDMsIDB4MWUsIDB4NGEsIDB4MjAsIDB4MjQsIDB4ZDMsIDB4NjgsIDB4MDEsIDB4MmIsIDB4MmUsIDB4ZDEsCi0weDgwLCAweDBhLCAweDAwLCAweGQyLCAweDAwLCAweDI0LCAweDBjLCAweDQzLCAweDIwLCAweDFjLCAweDFiLCAweDIzLAotMHhkYiwgMHgwMSwgMHhkMSwgMHgxOCwgMHg4OSwgMHg4YiwgMHgwOSwgMHgwYiwgMHgwMCwgMHhkMiwgMHgwNCwgMHgyNywKLTB4MzgsIDB4NDMsIDB4ZDEsIDB4NmYsIDB4MDksIDB4NjgsIDB4MDksIDB4MGEsIDB4MDcsIDB4ZDIsIDB4ZDEsIDB4MWQsCi0weDc5LCAweDMxLCAweDA5LCAweDY4LCAweDA5LCAweDY4LCAweDA5LCAweDBhLCAweDAxLCAweGQzLCAweDA4LCAweDIzLAotMHgxOCwgMHg0MywgMHhlMywgMHgyMywgMHgxYiwgMHgwMSwgMHhkMSwgMHgxOCwgMHg4OSwgMHg3OSwgMHgwMywgMHgyOSwKLTB4MDIsIDB4ZDEsIDB4ZmYsIDB4MjMsIDB4MDEsIDB4MzMsIDB4MTgsIDB4NDMsIDB4MGIsIDB4NDksIDB4MDksIDB4NmEsCi0weDEwLCAweDIyLCAweDRiLCAweDBhLCAweDAwLCAweGQyLCAweDAwLCAweDIyLCAweDEwLCAweDQzLCAweDg5LCAweDA3LAotMHg4OSwgMHgwZiwgMHg4OSwgMHgwMSwgMHgwOCwgMHg0MywgMHg5MCwgMHhiYywgMHg3MCwgMHg0NywgMHg0MCwgMHgwYywKLTB4MDAsIDB4ZDIsIDB4MDAsIDB4MjQsIDB4MGMsIDB4NDMsIDB4MjAsIDB4MWMsIDB4ZWMsIDB4ZTcsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDEwLCAweDQwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweGMwLCAweDAwLCAweDE4LCAweDQwLAotMHhmMCwgMHhiNSwgMHgzYSwgMHg0YywgMHgyMCwgMHgxYywgMHgwNCwgMHhmMCwgMHgwNywgMHhmYSwgMHgzOSwgMHg0OCwKLTB4ZTMsIDB4MjMsIDB4MWIsIDB4MDEsIDB4YzcsIDB4MTgsIDB4YjksIDB4NzksIDB4MzcsIDB4NGUsIDB4YzUsIDB4MWQsCi0weDc5LCAweDM1LCAweDA2LCAweDI5LCAweDYyLCAweGQyLCAweDAyLCAweGEzLCAweDViLCAweDVjLCAweDViLCAweDAwLAotMHg5ZiwgMHg0NCwgMHgwMCwgMHgxYywgMHgwMywgMHgwZSwgMHgxZSwgMHgzNywgMHg0ZSwgMHg1NSwgMHgwMSwgMHgyMCwKLTB4YjgsIDB4NzEsIDB4MDAsIDB4MjAsIDB4YjAsIDB4NjAsIDB4ZmYsIDB4ZjcsIDB4OTUsIDB4ZmYsIDB4MDUsIDB4MjMsCi0weDk4LCAweDQzLCAweDAwLCAweGYwLCAweDZmLCAweGY4LCAweDBjLCAweGUwLCAweGZmLCAweGY3LCAweDhlLCAweGZmLAotMHhjMCwgMHgwOCwgMHgwNiwgMHhkMywgMHhiMCwgMHg2OCwgMHg0MSwgMHgxYywgMHhiMSwgMHg2MCwgMHgwYSwgMHgyOCwKLTB4MDMsIDB4ZDksIDB4MDQsIDB4MjAsIDB4MDAsIDB4ZTAsIDB4MDIsIDB4MjAsIDB4YjgsIDB4NzEsIDB4NjQsIDB4MjIsCi0weDIwLCAweDFjLCAweDJiLCAweGUwLCAweDA2LCAweDFjLCAweGMwLCAweDZmLCAweDgwLCAweDIzLCAweDAxLCAweDY4LAotMHgxOSwgMHg0MywgMHgwMSwgMHg2MCwgMHgwMywgMHgyMCwgMHhiOCwgMHg3MSwgMHgyMCwgMHgxYywgMHgyMCwgMHg0YSwKLTB4MDAsIDB4MjEsIDB4MDQsIDB4ZjAsIDB4OTksIDB4ZjksIDB4ZjAsIDB4NmYsIDB4MDQsIDB4MjMsIDB4MDEsIDB4NjgsCi0weDk5LCAweDQzLCAweDAxLCAweDYwLCAweDI4LCAweDY4LCAweDAxLCAweDY4LCAweDE5LCAweDQzLCAweDAxLCAweDYwLAotMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwNSwgMHgyMSwgMHhiOSwgMHg3MSwgMHgyOSwgMHg2OCwKLTB4MDQsIDB4MjMsIDB4MGEsIDB4NjgsIDB4OWEsIDB4NDMsIDB4MGEsIDB4NjAsIDB4YzAsIDB4NmYsIDB4MDEsIDB4NjgsCi0weDE5LCAweDQzLCAweDAxLCAweDYwLCAweGZmLCAweGY3LCAweDVhLCAweGZmLCAweDA4LCAweDIzLCAweDE4LCAweDQzLAotMHgwMCwgMHhmMCwgMHgzNCwgMHhmOCwgMHgyMCwgMHgxYywgMHgxMCwgMHg0YSwgMHgwMCwgMHgyMSwgMHgwNCwgMHhmMCwKLTB4NzcsIDB4ZjksIDB4ZTUsIDB4ZTcsIDB4ZmYsIDB4ZjcsIDB4NGUsIDB4ZmYsIDB4MDQsIDB4MjMsIDB4MTgsIDB4NDMsCi0weDAwLCAweGYwLCAweDI4LCAweGY4LCAweGRlLCAweGU3LCAweDAwLCAweDIwLCAweDI5LCAweDY4LCAweDYwLCAweDIzLAotMHgwYSwgMHg2OCwgMHg5YSwgMHg0MywgMHgwYSwgMHg2MCwgMHhmZiwgMHhmNywgMHhlMywgMHhmYSwgMHhkNSwgMHhlNywKLTB4MDYsIDB4MjAsIDB4YjgsIDB4NzEsIDB4ZDIsIDB4ZTcsIDB4MDAsIDB4MDAsIDB4YTksIDB4NzksIDB4MjEsIDB4NDAsCi0weDY4LCAweDBlLCAweDAwLCAweDgwLCAweDljLCAweDAzLCAweDAwLCAweDgwLCAweDMwLCAweDc1LCAweDAwLCAweDAwLAotMHgxMCwgMHgyNywgMHgwMCwgMHgwMCwgMHgwMCwgMHhiNSwgMHgwMCwgMHgyMCwKLTB4MDQsIDB4NDksIDB4YzAsIDB4NDYsIDB4ODgsIDB4NzEsIDB4MDQsIDB4NDgsIDB4MDEsIDB4MjIsIDB4MDAsIDB4MjEsCi0weDA0LCAweGYwLCAweDRlLCAweGY5LCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDk4LCAweDFjLCAweDAwLCAweDgwLAotMHhhOSwgMHg3OSwgMHgyMSwgMHg0MCwgMHg5MCwgMHhiNSwgMHgwNywgMHgxYywgMHgzMSwgMHg0OCwgMHgwMCwgMHg2OCwKLTB4NzksIDB4MDgsIDB4MDMsIDB4ZDMsIDB4MTAsIDB4MjMsIDB4MDEsIDB4MWMsIDB4OTksIDB4NDMsIDB4MDEsIDB4ZTAsCi0weDEwLCAweDIxLCAweDAxLCAweDQzLCAweDJkLCAweDRjLCAweGUyLCAweDY4LCAweDAxLCAweDJhLCAweDA1LCAweGQxLAotMHgyMiwgMHg3OSwgMHgwMCwgMHgyYSwgMHgwMiwgMHhkMCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwMiwgMHgxOSwgMHg0MywKLTB4ODEsIDB4NDIsIDB4MDIsIDB4ZDAsIDB4MDEsIDB4MjAsIDB4MDAsIDB4MDUsIDB4MDEsIDB4NjAsIDB4ZTAsIDB4NjgsCi0weDAxLCAweDI4LCAweDIwLCAweGQxLCAweDFiLCAweDIzLCAweGRiLCAweDAxLCAweGUwLCAweDE4LCAweDgwLCAweDhiLAotMHhmOSwgMHgwOCwgMHgwNCwgMHhkMywgMHgwMSwgMHgyMywgMHhkYiwgMHgwMiwgMHgwMSwgMHgxYywgMHg5OSwgMHg0MywKLTB4MDEsIDB4ZTAsIDB4MDEsIDB4MjEsIDB4YzksIDB4MDIsIDB4ODEsIDB4NDIsIDB4MDIsIDB4ZDAsIDB4MDAsIDB4MjAsCi0weDAyLCAweGYwLCAweDFhLCAweGZiLCAweDM4LCAweDA5LCAweDA3LCAweGQzLCAweGUwLCAweDZmLCAweDgwLCAweDIzLAotMHgwMSwgMHg2OCwgMHg5OSwgMHg0MywgMHgwMSwgMHg2MCwgMHhlMCwgMHgxOCwgMHgwMCwgMHg2OCwgMHgwMCwgMHhlMCwKLTB4ZTAsIDB4NmYsIDB4ODAsIDB4MjMsIDB4MDEsIDB4NjgsIDB4MTksIDB4NDMsIDB4MDEsIDB4NjAsIDB4MTUsIDB4NDgsCi0weDAxLCAweDZhLCAweDc4LCAweDA5LCAweDAzLCAweGQzLCAweGZmLCAweDIwLCAweDAxLCAweDMwLCAweDA4LCAweDQzLAotMHgwMywgMHhlMCwgMHhmZiwgMHgyMywgMHgwOCwgMHgxYywgMHgwMSwgMHgzMywgMHg5OCwgMHg0MywgMHg4MCwgMHgwOCwKLTB4ODAsIDB4MDAsIDB4YmEsIDB4MDksIDB4OTIsIDB4MDcsIDB4OTIsIDB4MGYsIDB4MTAsIDB4NDMsIDB4ODgsIDB4NDIsCi0weDAyLCAweGQwLCAweDBjLCAweDQ5LCAweGMwLCAweDQ2LCAweDA4LCAweDYyLCAweGUxLCAweDY4LCAweDAxLCAweDI5LAotMHgwOCwgMHhkMSwgMHg3OSwgMHgwYSwgMHgwNiwgMHhkMywgMHhmZiwgMHgyMywgMHgwNCwgMHgzMywgMHgxOCwgMHg0MCwKLTB4MDMsIDB4MjgsIDB4MDEsIDB4ZDEsIDB4ZmYsIDB4ZjcsIDB4OGUsIDB4ZmYsIDB4OTAsIDB4YmMsIDB4MDgsIDB4YmMsCi0weDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDQwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLAotMHhjMCwgMHgwMCwgMHgxOCwgMHg0MCwgMHhjMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHg4MCwgMHhiNSwgMHhmZiwgMHhmNywKLTB4YjEsIDB4ZmUsIDB4ODAsIDB4MDksIDB4MWIsIDB4ZDIsIDB4MGYsIDB4NDgsIDB4ZTMsIDB4MjMsIDB4MWIsIDB4MDEsCi0weGMxLCAweDE4LCAweDRhLCAweDc5LCAweDAwLCAweDJhLCAweDE0LCAweGQxLCAweDAxLCAweDIyLCAweDRhLCAweDcxLAotMHgwMCwgMHgyNywgMHg4MCwgMHgzMCwgMHgwMCwgMHg2OCwgMHg2MCwgMHgyMywgMHgwMSwgMHg2OCwgMHg5OSwgMHg0MywKLTB4MDEsIDB4NjAsIDB4MDgsIDB4NDgsIDB4MDYsIDB4ZTAsIDB4MDIsIDB4MjAsIDB4MDIsIDB4ZjAsIDB4OGMsIDB4ZmMsCi0weDA3LCAweDIwLCAweDAyLCAweGYwLCAweDViLCAweGZjLCAweDM4LCAweDFjLCAweGZmLCAweGY3LCAweDM2LCAweGZhLAotMHhmNSwgMHhlNywgMHg4MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwKLTB4ZjQsIDB4MDEsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4YjUsIDB4ODQsIDB4YjAsIDB4NjksIDB4NDYsIDB4ZmYsIDB4ZjcsCi0weDM3LCAweGZjLCAweGZmLCAweGY3LCAweDg1LCAweGZlLCAweDAxLCAweGFiLCAweDU4LCAweDgwLCAweDA4LCAweDQ4LAotMHgwMCwgMHg2OCwgMHhjMCwgMHg0NiwgMHgwMiwgMHg5MCwgMHgwNywgMHg0OCwgMHgwMCwgMHg2YSwgMHhjMCwgMHg0NiwKLTB4MDMsIDB4OTAsIDB4NjgsIDB4NDYsIDB4MDAsIDB4MjEsIDB4ZmYsIDB4ZjcsIDB4NjcsIDB4ZmIsIDB4MDEsIDB4MjAsCi0weDA0LCAweGIwLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDQwLAotMHhjMCwgMHgwMCwgMHgxOCwgMHg0MCwgMHg4MCwgMHhiNSwgMHg4NCwgMHhiMCwgMHgwNywgMHgxYywgMHg2OSwgMHg0NiwKLTB4MzgsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4MTcsIDB4ZmMsIDB4ZjgsIDB4ODgsIDB4ZmYsIDB4ZjcsIDB4NDIsIDB4ZmYsCi0weGZmLCAweGY3LCAweDYyLCAweGZlLCAweDAxLCAweGFiLCAweDU4LCAweDgwLCAweDY4LCAweDQ2LCAweDAwLCAweDIxLAotMHhmZiwgMHhmNywgMHg0YywgMHhmYiwgMHgwMSwgMHgyMCwgMHgwNCwgMHhiMCwgMHg4MCwgMHhiYywgMHgwOCwgMHhiYywKLTB4MTgsIDB4NDcsIDB4YjAsIDB4YjUsIDB4YzYsIDB4YjAsIDB4YzcsIDB4ODgsIDB4NjksIDB4NDYsIDB4ZmYsIDB4ZjcsCi0weDAxLCAweGZjLCAweDAxLCAweDI0LCAweDFhLCAweDRiLCAweDlmLCAweDQyLCAweDBhLCAweGQ5LCAweDAwLCAweGE4LAotMHgwMCwgMHg3OCwgMHg0MCwgMHgyMywgMHgxOCwgMHg0MywgMHgwMCwgMHhhYiwgMHgxOCwgMHg3MCwgMHgwMiwgMHgyMCwKLTB4ZDgsIDB4ODAsIDB4NjgsIDB4NDYsIDB4MDAsIDB4MjEsIDB4MjAsIDB4ZTAsIDB4MTQsIDB4NDgsIDB4ZmYsIDB4ZjcsCi0weGUxLCAweGY5LCAweDA1LCAweDFjLCAweDEzLCAweDRhLCAweDM4LCAweDFjLCAweDA0LCAweGE5LCAweGZmLCAweGY3LAotMHhkZCwgMHhmOSwgMHgxMiwgMHg0OSwgMHgyOCwgMHgxYywgMHhmZiwgMHhmNywgMHhkOCwgMHhmOSwgMHgwMSwgMHgyZiwKLTB4MDYsIDB4ZDEsIDB4MGMsIDB4YTksIDB4MDAsIDB4MjAsIDB4MDAsIDB4MjIsCi0weDBhLCAweDYwLCAweDAxLCAweDMwLCAweDEwLCAweDI4LCAweGZiLCAweGQzLCAweDEwLCAweDIwLCAweDAwLCAweGFiLAotMHg1OCwgMHg3MCwgMHgwNCwgMHg5OCwgMHhjMCwgMHg0NiwgMHgwMiwgMHg5MCwgMHgwNSwgMHg5OCwgMHhjMCwgMHg0NiwKLTB4MDMsIDB4OTAsIDB4NjgsIDB4NDYsIDB4MDYsIDB4YTksIDB4ZmYsIDB4ZjcsIDB4MGYsIDB4ZmIsIDB4MjAsIDB4MWMsCi0weDQ2LCAweGIwLCAweGIwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweGZmLCAweDAxLCAweDAwLCAweDAwLAotMHgyNCwgMHgwMiwgMHhmZiwgMHhmZiwgMHg5ZCwgMHhhZiwgMHgyMSwgMHg0MCwgMHgzYywgMHgwMiwgMHhmZiwgMHhmZiwKLTB4ZjAsIDB4YjUsIDB4YzYsIDB4YjAsIDB4MDcsIDB4MWMsIDB4NjksIDB4NDYsIDB4MzgsIDB4MWMsIDB4ZmYsIDB4ZjcsCi0weGJiLCAweGZiLCAweGZjLCAweDg4LCAweDc4LCAweDc4LCAweDAxLCAweDI1LCAweDEwLCAweDI4LCAweDAxLCAweGQxLAotMHgxOSwgMHgyYywgMHgwOSwgMHhkOSwgMHgwMCwgMHhhOCwgMHgwMCwgMHg3OCwgMHg0MCwgMHgyMywgMHgxOCwgMHg0MywKLTB4MDAsIDB4YWIsIDB4MTgsIDB4NzAsIDB4MDIsIDB4MjAsIDB4ZDgsIDB4ODAsIDB4MDQsIDB4MzMsIDB4MjcsIDB4ZTAsCi0weGI4LCAweDY4LCAweGMwLCAweDQ2LCAweDA0LCAweDkwLCAweGY4LCAweDY4LCAweGMwLCAweDQ2LCAweDA1LCAweDkwLAotMHgwNiwgMHhhYSwgMHhmYiwgMHgxZCwgMHgwOSwgMHgzMywgMHgwMCwgMHgyMSwgMHg3OCwgMHg3OCwgMHgwMCwgMHgyOCwKLTB4MGQsIDB4ZGQsIDB4MDAsIDB4MjAsIDB4NDAsIDB4Y2IsIDB4NDAsIDB4YzIsIDB4MDEsIDB4MzAsIDB4MDAsIDB4MDQsCi0weDAwLCAweDBjLCAweDA0LCAweDI4LCAweGY4LCAweGRiLCAweDQ4LCAweDFjLCAweDAxLCAweDA0LCAweDA5LCAweDBjLAotMHg3OCwgMHg3OCwgMHg4OCwgMHg0MiwgMHhmMSwgMHhkYywgMHgwYiwgMHg0OCwgMHhmZiwgMHhmNywgMHg3ZSwgMHhmOSwKLTB4MDcsIDB4MWMsIDB4MGEsIDB4NGEsIDB4MjAsIDB4MWMsIDB4MDQsIDB4YTksIDB4ZmYsIDB4ZjcsIDB4N2EsIDB4ZjksCi0weDA4LCAweDQ5LCAweDM4LCAweDFjLCAweGZmLCAweGY3LCAweDc1LCAweGY5LCAweDY4LCAweDQ2LCAweDAwLCAweDIxLAotMHhmZiwgMHhmNywgMHhiZSwgMHhmYSwgMHgyOCwgMHgxYywgMHg0NiwgMHhiMCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywKLTB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MjQsIDB4MDIsIDB4ZmYsIDB4ZmYsIDB4YzUsIDB4YWYsIDB4MjEsIDB4NDAsCi0weDNjLCAweDAyLCAweGZmLCAweGZmLCAweGYwLCAweGI1LCAweDg0LCAweGIwLCAweDA0LCAweDFjLCAweDAwLCAweDI3LAotMHhlNiwgMHg4OCwgMHhhMiwgMHg2OCwgMHg0NywgMHg0OSwgMHgwOCwgMHg3OSwgMHgwMCwgMHgyOCwgMHgwOCwgMHhkMCwKLTB4MDAsIDB4MmUsIDB4MDEsIDB4ZDAsIDB4MDEsIDB4MmUsIDB4MDEsIDB4ZDEsIDB4MDEsIDB4MjcsIDB4MDEsIDB4ZTAsCi0weDA0LCAweDJlLCAweDAwLCAweGQxLCAweDAzLCAweDI2LCAweDAxLCAweDI1LCAweDQxLCAweDQ4LCAweDA1LCAweDJlLAotMHg2NiwgMHhkMiwgMHgwMiwgMHhhMywgMHg5YiwgMHg1ZCwgMHg1YiwgMHgwMCwgMHg5ZiwgMHg0NCwgMHgwMCwgMHgxYywKLTB4MDMsIDB4MDYsIDB4MDgsIDB4MGMsIDB4MTAsIDB4MDAsIDB4MDUsIDB4ODAsIDB4MDAsIDB4MjMsIDB4MDMsIDB4ZTAsCi0weDA1LCAweDgwLCAweDA1LCAweGUwLCAweDAwLCAweDIzLCAweDAzLCAweDgwLCAweDQzLCAweDgwLCAweDA2LCAweGUwLAotMHgwMCwgMHgyMywgMHgwMywgMHg4MCwgMHg0NSwgMHg4MCwgMHgwMiwgMHhlMCwgMHhmZiwgMHgyMywgMHgwMSwgMHgzMywKLTB4MDMsIDB4ODAsIDB4Y2IsIDB4MWQsIDB4NzksIDB4MzMsIDB4OWUsIDB4ODksIDB4MDEsIDB4MjMsIDB4NWIsIDB4MDIsCi0weDllLCAweDQyLCAweDAyLCAweGRiLCAweGQyLCAweDA3LCAweGQyLCAweDBmLCAweDAwLCAweGUwLCAweDAxLCAweDIyLAotMHg2ZCwgMHgyMywgMHg1YiwgMHgwMSwgMHhjOSwgMHgxOCwgMHg4OSwgMHg4OCwgMHhmZiwgMHgyMywgMHhlMSwgMHgzMywKLTB4OTksIDB4NDMsIDB4MDEsIDB4MjMsIDB4MTksIDB4NDMsIDB4MDYsIDB4ODgsIDB4ZmYsIDB4MzMsIDB4OWUsIDB4NDIsCi0weDBkLCAweGQxLCAweGZmLCAweDIwLCAweGUxLCAweDMwLCAweDA4LCAweDQzLCAweDAwLCAweDJhLCAweDA0LCAweGQxLAotMHgwMSwgMHgyMywgMHg5YiwgMHgwMiwgMHg5OCwgMHg0MywgMHgwMSwgMHgxYywgMHgyMCwgMHhlMCwgMHgwMSwgMHgyMSwKLTB4ODksIDB4MDIsIDB4MDEsIDB4NDMsIDB4MWMsIDB4ZTAsIDB4MDEsIDB4MmUsIDB4MGEsIDB4ZDEsIDB4NDAsIDB4ODgsCi0weDAxLCAweDI4LCAweDA0LCAweGQxLCAweDYwLCAweDIzLCAweDE5LCAweDQzLCAweDAwLCAweDJhLCAweDEzLCAweGQwLAotMHgwYywgMHhlMCwgMHgyMCwgMHgyMywgMHgxOSwgMHg0MywgMHgwZiwgMHhlMCwgMHgwMCwgMHgyZSwgMHgwZCwgMHhkMSwKLTB4NDAsIDB4ODgsIDB4MDEsIDB4MjgsIDB4MDgsIDB4ZDEsIDB4ZmYsIDB4MjMsIDB4ODEsIDB4MzMsIDB4MTksIDB4NDMsCi0weDAwLCAweDJhLCAweDA1LCAweGQwLCAweDAxLCAweDIzLCAweDliLCAweDAyLCAweDE5LCAweDQzLCAweDAxLCAweGUwLAotMHg4MCwgMHgyMywgMHgxOSwgMHg0MywgMHgwNCwgMHgyMCwgMHgwMiwgMHhmMCwgMHg3NSwgMHhmOSwgMHgwOSwgMHgyMSwKLTB4NDksIDB4MDIsIDB4MDAsIDB4MjAsIDB4MDIsIDB4ZjAsIDB4NzAsIDB4ZjksIDB4MDAsIDB4MmYsIDB4MDIsIDB4ZDEsCi0weDAwLCAweDIwLCAweDEyLCAweGUwLCAweGZmLCAweGU3LCAweDY5LCAweDQ2LCAweDIwLCAweDFjLCAweGZmLCAweGY3LAotMHhlZiwgMHhmYSwgMHgwMCwgMHhhOCwgMHgwMCwgMHg3OCwgMHg0MCwgMHgyMywgMHgxOCwgMHg0MywgMHgwMCwgMHhhYiwKLTB4MTgsIDB4NzAsIDB4MDIsIDB4MjAsIDB4ZDgsIDB4ODAsIDB4NjgsIDB4NDYsIDB4MDAsIDB4MjEsIDB4MDQsIDB4MzMsCi0weGZmLCAweGY3LCAweDIyLCAweGZhLCAweDI4LCAweDFjLCAweDA0LCAweGIwLAotMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwKLTB4ODgsIDB4MWMsIDB4MDAsIDB4ODAsIDB4YzAsIDB4ODgsIDB4NTEsIDB4MjEsIDB4ODksIDB4MDMsIDB4MDgsIDB4NjIsCi0weDAwLCAweDIwLCAweDcwLCAweDQ3LCAweDgwLCAweGI1LCAweDE2LCAweDRmLCAweGY4LCAweDY4LCAweDAxLCAweDI4LAotMHgwNywgMHhkMSwgMHgzNywgMHgyMywgMHg5YiwgMHgwMSwgMHhmOCwgMHgxOCwgMHg0MCwgMHg4YSwgMHg4MCwgMHgyMSwKLTB4MDEsIDB4NDMsIDB4MWIsIDB4MjAsIDB4MDcsIDB4ZTAsIDB4NmQsIDB4MjMsIDB4NWIsIDB4MDEsIDB4ZjgsIDB4MTgsCi0weDgwLCAweDhiLCAweDAxLCAweDIxLCAweDQ5LCAweDAzLCAweDAxLCAweDQzLCAweDEwLCAweDIwLCAweDAyLCAweGYwLAotMHgzMywgMHhmOSwgMHgwMSwgMHgyMCwgMHg3MSwgMHgyMywgMHg1YiwgMHgwMSwgMHhmOSwgMHgxOCwgMHgwOCwgMHg4MCwKLTB4NDgsIDB4ODAsIDB4MWIsIDB4MjMsIDB4ZGIsIDB4MDEsIDB4ZjgsIDB4MTgsIDB4ODAsIDB4OGIsIDB4MDEsIDB4MjMsCi0weDFiLCAweDAzLCAweDk4LCAweDQzLCAweDQxLCAweDIxLCAweDA5LCAweDAyLCAweDAxLCAweDQzLCAweDAwLCAweDIwLAotMHgwMiwgMHhmMCwgMHgyMCwgMHhmOSwgMHgwMCwgMHgyMCwgMHg4MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4ODAsIDB4YjUsIDB4MTcsIDB4NGYsIDB4ZjgsIDB4NjgsIDB4MDEsIDB4MjgsCi0weDA4LCAweGQxLCAweDM3LCAweDIzLCAweDliLCAweDAxLCAweGY4LCAweDE4LCAweDQwLCAweDhhLCAweDgwLCAweDIzLAotMHg5OCwgMHg0MywgMHgwMSwgMHgxYywgMHgxYiwgMHgyMCwgMHgwOCwgMHhlMCwgMHg2ZCwgMHgyMywgMHg1YiwgMHgwMSwKLTB4ZjgsIDB4MTgsIDB4ODAsIDB4OGIsIDB4MDEsIDB4MjMsIDB4NWIsIDB4MDMsIDB4OTgsIDB4NDMsIDB4MDEsIDB4MWMsCi0weDEwLCAweDIwLCAweDAyLCAweGYwLCAweDAxLCAweGY5LCAweGZmLCAweDIwLCAweDcxLCAweDIzLCAweDViLCAweDAxLAotMHhmOSwgMHgxOCwgMHgwMSwgMHgzMCwgMHgwOCwgMHg4MCwgMHgxYiwgMHgyMywgMHhkYiwgMHgwMSwgMHhmOCwgMHgxOCwKLTB4ODAsIDB4OGIsIDB4NDEsIDB4MjMsIDB4MWIsIDB4MDIsIDB4OTgsIDB4NDMsIDB4MDksIDB4MjEsIDB4NDksIDB4MDIsCi0weDAxLCAweDQzLCAweDAwLCAweDIwLCAweDAyLCAweGYwLCAweGVlLCAweGY4LCAweDAwLCAweDIwLCAweDgwLCAweGJjLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHg4MCwgMHhiNSwgMHg4NCwgMHhiMCwKLTB4MDgsIDB4NDksIDB4Y2YsIDB4NmEsIDB4NjksIDB4NDYsIDB4ZmYsIDB4ZjcsIDB4NjksIDB4ZmEsIDB4YjgsIDB4MDUsCi0weDgwLCAweDBkLCAweDAxLCAweGFiLCAweDU4LCAweDgwLCAweDY4LCAweDQ2LCAweDAwLCAweDIxLCAweGZmLCAweGY3LAotMHhhMSwgMHhmOSwgMHgwMSwgMHgyMCwgMHgwNCwgMHhiMCwgMHg4MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4NDAsIDB4MDAsIDB4MTQsIDB4NDAsIDB4YzAsIDB4ODgsIDB4OWYsIDB4MjMsIDB4MTgsIDB4NDAsIDB4MDUsIDB4NDksCi0weGM5LCAweDZhLCAweDFiLCAweDIzLCAweDViLCAweDAxLCAweDE5LCAweDQwLCAweDA4LCAweDQzLCAweDAzLCAweDQ5LAotMHhjMCwgMHg0NiwgMHhjOCwgMHg2MiwgMHgwMCwgMHgyMCwgMHg3MCwgMHg0NywgMHg0MCwgMHgwMCwgMHgxNCwgMHg0MCwKLTB4NDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4ODAsIDB4YjUsIDB4ODQsIDB4YjAsIDB4MGQsIDB4NDksIDB4MGYsIDB4NmEsCi0weDAxLCAweDJmLCAweDAxLCAweGQxLCAweGZmLCAweDAzLCAweDA3LCAweGUwLCAweDAyLCAweDJmLCAweDAxLCAweGQxLAotMHgzZiwgMHgwMywgMHgwMywgMHhlMCwgMHgwMCwgMHgyZiwgMHgwMSwgMHhkMSwgMHgwMSwgMHgyNywgMHhmZiwgMHgwMiwKLTB4NjksIDB4NDYsIDB4ZmYsIDB4ZjcsIDB4MzUsIDB4ZmEsIDB4MDEsIDB4YWIsIDB4NWYsIDB4ODAsIDB4NjgsIDB4NDYsCi0weDAwLCAweDIxLCAweGZmLCAweGY3LCAweDZmLCAweGY5LCAweDAxLCAweDIwLCAweDA0LCAweGIwLCAweDgwLCAweGJjLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgyMCwgMHgxNCwgMHg0MCwgMHhjMiwgMHg4OCwgMHhhMSwgMHgyMCwKLTB4NDAsIDB4MDMsIDB4MDAsIDB4MjEsIDB4MDEsIDB4MjMsIDB4NWIsIDB4MDMsIDB4OWEsIDB4NDIsIDB4MDEsIDB4ZDEsCi0weDAyLCAweDIyLCAweDA0LCAweGUwLCAweDAxLCAweDIzLCAweGRiLCAweDAzLCAweDlhLCAweDQyLCAweDAyLCAweGQxLAotMHgwMSwgMHgyMiwgMHgwMiwgMHg2MiwgMHgwMCwgMHhlMCwgMHgwMSwgMHg2MiwgMHgwOCwgMHgxYywgMHg3MCwgMHg0NywKLTB4OTAsIDB4YjUsIDB4ODQsIDB4YjAsIDB4MDcsIDB4MWMsIDB4MDIsIDB4ZjAsIDB4OWYsIDB4ZjgsIDB4NjksIDB4NDYsCi0weDA0LCAweDFjLCAweDM4LCAweDFjLCAweGZmLCAweGY3LCAweDBhLCAweGZhLCAweDAxLCAweGFiLCAweDVjLCAweDgwLAotMHgwOSwgMHg0ZiwgMHhmOCwgMHg2ZCwgMHhjMCwgMHg0NiwgMHgwMiwgMHg5MCwgMHg2OCwgMHg0NiwgMHgwMCwgMHgyMSwKLTB4ZmYsIDB4ZjcsIDB4NDAsIDB4ZjksIDB4ZjgsIDB4NmQsIDB4YzAsIDB4MDcsIDB4YzAsIDB4MGYsIDB4MDUsIDB4NDksCi0weGMwLCAweDQ2LCAweGM4LCAweDYyLCAweDAxLCAweDIwLCAweDA0LCAweGIwLCAweDkwLCAweGJjLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHhhNCwgMHgyYSwgMHgwMCwgMHg4MCwgMHg2OCwgMHgxYywgMHgwMCwgMHg4MCwKLTB4YzAsIDB4ODgsIDB4MDIsIDB4NDksIDB4YzAsIDB4NDYsIDB4NDgsIDB4NjEsIDB4MDAsIDB4MjAsIDB4NzAsIDB4NDcsCi0weDgwLCAweDAwLCAweDE0LCAweDAwLCAweDAwLCAweGI1LCAweDg0LCAweGIwLCAweDY5LCAweDQ2LCAweGZmLCAweGY3LAotMHhlMywgMHhmOSwgMHgwNiwgMHg0OCwgMHhjMCwgMHg2OCwgMHgwMSwgMHhhYiwKLTB4NTgsIDB4ODAsIDB4NjgsIDB4NDYsIDB4MDAsIDB4MjEsIDB4ZmYsIDB4ZjcsIDB4MWIsIDB4ZjksIDB4MDEsIDB4MjAsCi0weDA0LCAweGIwLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDE0LCAweDQwLAotMHhjMCwgMHg4OCwgMHgwMiwgMHg0OSwgMHhjMCwgMHg0NiwgMHhjOCwgMHg2MCwgMHgwMCwgMHgyMCwgMHg3MCwgMHg0NywKLTB4ODAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4ODAsIDB4YjUsIDB4ODQsIDB4YjAsIDB4NjksIDB4NDYsIDB4ODcsIDB4NjgsCi0weGZmLCAweGY3LCAweGM2LCAweGY5LCAweDIwLCAweDJmLCAweDA3LCAweGQyLCAweDc4LCAweDAwLCAweDBjLCAweDQ5LAotMHg0MCwgMHgxOCwgMHgxYiwgMHgyMywgMHhkYiwgMHgwMSwgMHhjMCwgMHgxOCwgMHg4MCwgMHg4YiwgMHgwNiwgMHhlMCwKLTB4MDAsIDB4YTgsIDB4MDAsIDB4NzgsIDB4NDAsIDB4MjMsIDB4MTgsIDB4NDMsIDB4MDAsIDB4YWIsIDB4MTgsIDB4NzAsCi0weDAyLCAweDIwLCAweDAxLCAweGFiLCAweDU4LCAweDgwLCAweDY4LCAweDQ2LCAweDAwLCAweDIxLCAweGZmLCAweGY3LAotMHhlZiwgMHhmOCwgMHgwMSwgMHgyMCwgMHgwNCwgMHhiMCwgMHg4MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4MDAsIDB4YjUsIDB4ODQsIDB4YjAsIDB4YzEsIDB4ODgsIDB4ODIsIDB4NjgsCi0weDIwLCAweDJhLCAweDA0LCAweGQyLCAweDEwLCAweDFjLCAweDAyLCAweGYwLCAweDE3LCAweGY4LCAweDAwLCAweDIwLAotMHgxMCwgMHhlMCwgMHg2OSwgMHg0NiwgMHhmZiwgMHhmNywgMHg5YSwgMHhmOSwgMHgwMCwgMHhhOCwgMHgwMCwgMHg3OCwKLTB4NDAsIDB4MjMsIDB4MTgsIDB4NDMsIDB4MDAsIDB4YWIsIDB4MTgsIDB4NzAsIDB4MDIsIDB4MjAsIDB4ZDgsIDB4ODAsCi0weDY4LCAweDQ2LCAweDAwLCAweDIxLCAweDA0LCAweDMzLCAweGZmLCAweGY3LCAweGNkLCAweGY4LCAweDAxLCAweDIwLAotMHgwNCwgMHhiMCwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg5MCwgMHhiNSwgMHg4NCwgMHhiMCwgMHhjNywgMHg4OCwKLTB4NjksIDB4NDYsIDB4ZmYsIDB4ZjcsIDB4ODMsIDB4ZjksIDB4MTAsIDB4NDgsIDB4ZmUsIDB4ZjcsIDB4NzIsIDB4ZmYsCi0weDAyLCAweDIwLCAweDM5LCAweDFjLCAweDAyLCAweGYwLCAweGYyLCAweGZmLCAweDAwLCAweDI4LCAweDA2LCAweGQwLAotMHgwMiwgMHgyMCwgMHgzOSwgMHgxYywgMHgwMiwgMHhmMCwgMHgzNiwgMHhmZiwgMHgwMSwgMHhhYiwgMHg1OCwgMHg4MCwKLTB4MDIsIDB4ZTAsIDB4NDUsIDB4MjAsIDB4MDAsIDB4YWIsIDB4MTgsIDB4NzAsIDB4MDcsIDB4NDksIDB4MjAsIDB4MWMsCi0weGZlLCAweGY3LCAweDVmLCAweGZmLCAweDY4LCAweDQ2LCAweDAwLCAweDIxLCAweGZmLCAweGY3LCAweGE4LCAweGY4LAotMHgwMSwgMHgyMCwgMHgwNCwgMHhiMCwgMHg5MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwKLTB4MjQsIDB4MDIsIDB4ZmYsIDB4ZmYsIDB4M2MsIDB4MDIsIDB4ZmYsIDB4ZmYsIDB4YjAsIDB4YjUsIDB4ODQsIDB4YjAsCi0weGM3LCAweDg4LCAweDY5LCAweDQ2LCAweDg0LCAweDY4LCAweGZmLCAweGY3LCAweDU3LCAweGY5LCAweDEwLCAweDQ4LAotMHhmZSwgMHhmNywgMHg0NiwgMHhmZiwgMHgwZiwgMHg0YSwgMHgwMiwgMHgyMCwgMHgzOSwgMHgxYywgMHhmZSwgMHhmNywKLTB4NDMsIDB4ZmYsIDB4MDAsIDB4MjgsIDB4MDYsIDB4ZDAsIDB4MGQsIDB4NGIsIDB4MDIsIDB4MjAsIDB4MzksIDB4MWMsCi0weDIyLCAweDFjLCAweGZlLCAweGY3LCAweDNjLCAweGZmLCAweDAyLCAweGUwLCAweDQ1LCAweDIwLCAweDAwLCAweGFiLAotMHgxOCwgMHg3MCwgMHgwOSwgMHg0OSwgMHgyOCwgMHgxYywgMHhmZSwgMHhmNywgMHgzMiwgMHhmZiwgMHg2OCwgMHg0NiwKLTB4MDAsIDB4MjEsIDB4ZmYsIDB4ZjcsIDB4N2IsIDB4ZjgsIDB4MDEsIDB4MjAsIDB4MDQsIDB4YjAsIDB4YjAsIDB4YmMsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDI0LCAweDAyLCAweGZmLCAweGZmLCAweDU5LCAweGIxLCAweDIxLCAweDQwLAotMHg1OSwgMHhiMCwgMHgyMSwgMHg0MCwgMHgzYywgMHgwMiwgMHhmZiwgMHhmZiwgMHgwMCwgMHhiNSwgMHhmZiwgMHhmNywKLTB4NDMsIDB4ZjksIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MjAsIDB4NzAsIDB4NDcsIDB4ODAsIDB4YjQsCi0weGMyLCAweDg4LCAweDE5LCAweDRiLCAweGExLCAweDIxLCAweDQ5LCAweDAzLCAweDAwLCAweDJhLCAweDAzLCAweGQxLAotMHgxOCwgMHg2YiwgMHgxMCwgMHgyMywgMHg5OCwgMHg0MywgMHgwNCwgMHhlMCwgMHgwMSwgMHgyYSwgMHgwNCwgMHhkMSwKLTB4MTgsIDB4NmIsIDB4MTAsIDB4MjMsIDB4MTgsIDB4NDMsIDB4NDgsIDB4NjEsIDB4MWYsIDB4ZTAsIDB4MDIsIDB4MmEsCi0weDFkLCAweGQxLCAweGMyLCAweDY4LCAweDg3LCAweDY4LCAweDAwLCAweDIwLCAweDNiLCAweDFjLCAweGMzLCAweDQwLAotMHhkYiwgMHgwNywgMHhkYiwgMHgwZiwgMHg5YiwgMHgwMiwgMHgwMywgMHg0MywgMHgwYiwgMHg2MSwgMHgwMSwgMHgzMCwKLTB4MDAsIDB4MDQsIDB4MDAsIDB4MGMsIDB4MjAsIDB4MjgsIDB4ZjMsIDB4ZGIsIDB4MDAsIDB4MjAsIDB4MTMsIDB4MWMsCi0weGMzLCAweDQwLCAweGRiLCAweDA3LCAweGRiLCAweDBmLCAweDliLCAweDAyLCAweGM3LCAweDFkLCAweDE5LCAweDM3LAotMHgzYiwgMHg0MywgMHgwYiwgMHg2MSwgMHgwMSwgMHgzMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywgMHgyMCwgMHgyOCwKLTB4ZjEsIDB4ZGIsIDB4MDAsIDB4MjAsIDB4ODAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4ODAsIDB4MDAsIDB4MTQsIDB4NDAsCi0weDgwLCAweGI0LCAweGMyLCAweDg4LCAweDgxLCAweDY4LCAweDEwLCAweDAyLCAweDEyLCAweDBhLCAweDEwLCAweDQzLAotMHgwMiwgMHgwNCwgMHgxMiwgMHgwYywgMHgwYywgMHg0OCwgMHhjMCwgMHg0NiwgMHgwMiwgMHg2MCwgMHgwYywgMHg0YiwKLTB4YzAsIDB4NDYsIDB4MWEsIDB4ODAsIDB4MGEsIDB4MGMsIDB4MTcsIDB4MDIsCi0weDEyLCAweDEyLCAweDNhLCAweDQzLCAweDEyLCAweDA0LCAweDEyLCAweDBjLCAweDQyLCAweDYwLCAweDVhLCAweDgwLAotMHgwOSwgMHgwNCwgMHgwOSwgMHgwYywgMHgwYSwgMHgwMiwgMHgwOSwgMHgwYSwgMHgxMSwgMHg0MywgMHgwOSwgMHgwNCwKLTB4MDksIDB4MGMsIDB4ODEsIDB4NjAsIDB4OTksIDB4ODAsIDB4MDAsIDB4MjAsIDB4ODAsIDB4YmMsIDB4NzAsIDB4NDcsCi0weDQwLCAweDAwLCAweDE0LCAweDAwLCAweDI4LCAweDFiLCAweDAwLCAweDgwLCAweGIwLCAweGI1LCAweDg0LCAweGIwLAotMHgxMywgMHg0OSwgMHgwYSwgMHg2OCwgMHgxMiwgMHgwNCwgMHgxMiwgMHgwYywgMHgxMywgMHgwMiwgMHgxMiwgMHgxMiwKLTB4MTMsIDB4NDMsIDB4NGEsIDB4NjgsIDB4MTIsIDB4MDQsIDB4MTIsIDB4MGMsIDB4MWYsIDB4MWMsIDB4MTMsIDB4MDIsCi0weDEyLCAweDEyLCAweDEzLCAweDQzLCAweDg5LCAweDY4LCAweDA5LCAweDA0LCAweDA5LCAweDBjLCAweDBhLCAweDAyLAotMHgwOSwgMHgxMiwgMHgxMSwgMHg0MywgMHgwYywgMHgwNCwgMHgyNCwgMHgwYywgMHg2OSwgMHg0NiwgMHgxZCwgMHgxYywKLTB4ZmYsIDB4ZjcsIDB4YWUsIDB4ZjgsIDB4MDEsIDB4YWIsIDB4NWYsIDB4ODAsIDB4MjgsIDB4MDQsIDB4MjAsIDB4NDMsCi0weDAyLCAweDkwLCAweDY4LCAweDQ2LCAweDAwLCAweDIxLCAweGZlLCAweGY3LCAweGU1LCAweGZmLCAweDAxLCAweDIwLAotMHgwNCwgMHhiMCwgMHhiMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg0MCwgMHgwMCwgMHgxNCwgMHg0MCwKLTB4YzEsIDB4ODgsIDB4ODIsIDB4NjgsIDB4MDgsIDB4MDIsIDB4MDksIDB4MGEsIDB4MDgsIDB4NDMsIDB4MDAsIDB4MDQsCi0weDAwLCAweDBjLCAweDBhLCAweDQ5LCAweGMwLCAweDQ2LCAweGM4LCAweDYwLCAweDEwLCAweDBjLCAweDAzLCAweDAyLAotMHgwMCwgMHgxMiwgMHgxOCwgMHg0MywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywgMHgwOCwgMHg2MSwgMHgxMCwgMHgwNCwKLTB4MDAsIDB4MGMsIDB4MDIsIDB4MDIsIDB4MDAsIDB4MGEsIDB4MTAsIDB4NDMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MGMsCi0weDQ4LCAweDYxLCAweDAwLCAweDIwLCAweDcwLCAweDQ3LCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweDE0LCAweDAwLAotMHg5MCwgMHhiNSwgMHg4NCwgMHhiMCwgMHgxNiwgMHg0YiwgMHhkOSwgMHg2OCwgMHgwOSwgMHgwNCwgMHgwOSwgMHgwYywKLTB4MGEsIDB4MDIsIDB4MDksIDB4MTIsIDB4MTEsIDB4NDMsIDB4MWEsIDB4NjksIDB4MTIsIDB4MDQsIDB4MTIsIDB4MGMsCi0weDE3LCAweDAyLCAweDEyLCAweDEyLCAweDNhLCAweDQzLCAweDViLCAweDY5LCAweDFiLCAweDA0LCAweDFiLCAweDBjLAotMHgxZiwgMHgwMiwgMHgxYiwgMHgxMiwgMHgzYiwgMHg0MywgMHgxZiwgMHgwNCwgMHgzZiwgMHgwYywgMHgwNSwgMHgyMywKLTB4MDAsIDB4OTMsIDB4ODQsIDB4ODgsIDB4MDEsIDB4YWIsIDB4MWMsIDB4ODAsIDB4MDAsIDB4MjQsIDB4MDQsIDB4M2IsCi0weDVjLCAweDcwLCAweDQwLCAweDg4LCAweDAwLCAweGFiLCAweDU4LCAweDgwLCAweGQ5LCAweDgwLCAweDEwLCAweDA0LAotMHgzOCwgMHg0MywgMHgwMiwgMHg5MCwgMHgwMywgMHg5NCwgMHg2OCwgMHg0NiwgMHgwMCwgMHgyMSwgMHhmZSwgMHhmNywKLTB4OTUsIDB4ZmYsIDB4MDEsIDB4MjAsIDB4MDQsIDB4YjAsIDB4OTAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weDQwLCAweDAwLCAweDE0LCAweDQwLCAweDAwLCAweGI1LCAweDg0LCAweGIwLCAweDBiLCAweDQ5LCAweDhhLCAweDZhLAotMHgwNSwgMHgyMSwgMHgwMCwgMHg5MSwgMHg4MSwgMHg4OCwgMHgwMSwgMHhhYiwgMHgxOSwgMHg4MCwgMHgwMCwgMHgyMSwKLTB4MDQsIDB4M2IsIDB4NTksIDB4NzAsIDB4NDAsIDB4ODgsIDB4MDAsIDB4YWIsIDB4NTgsIDB4ODAsIDB4ZGEsIDB4ODAsCi0weDAyLCAweDkxLCAweDAzLCAweDkxLCAweDY4LCAweDQ2LCAweGZlLCAweGY3LCAweDc5LCAweGZmLCAweDAxLCAweDIwLAotMHgwNCwgMHhiMCwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMCwgMHgxNCwgMHg0MCwKLTB4YzAsIDB4ODgsIDB4MDIsIDB4NDksIDB4YzAsIDB4NDYsIDB4ODgsIDB4NjIsIDB4MDAsIDB4MjAsIDB4NzAsIDB4NDcsCi0weGMwLCAweDAwLCAweDE0LCAweDAwLCAweDAwLCAweGI1LCAweDg0LCAweGIwLCAweDBiLCAweDQ5LCAweDBhLCAweDZhLAotMHgwNSwgMHgyMSwgMHgwMCwgMHg5MSwgMHg4MSwgMHg4OCwgMHgwMSwgMHhhYiwgMHgxOSwgMHg4MCwgMHgwMCwgMHgyMSwKLTB4MDQsIDB4M2IsIDB4NTksIDB4NzAsIDB4NDAsIDB4ODgsIDB4MDAsIDB4YWIsIDB4NTgsIDB4ODAsIDB4ZGEsIDB4ODAsCi0weDAyLCAweDkxLCAweDAzLCAweDkxLCAweDY4LCAweDQ2LCAweGZlLCAweGY3LCAweDU1LCAweGZmLCAweDAxLCAweDIwLAotMHgwNCwgMHhiMCwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMCwgMHgxNCwgMHg0MCwKLTB4YzAsIDB4ODgsIDB4MDIsIDB4NDksIDB4YzAsIDB4NDYsIDB4MDgsIDB4NjIsIDB4MDAsIDB4MjAsIDB4NzAsIDB4NDcsCi0weGMwLCAweDAwLCAweDE0LCAweDAwLCAweDAwLCAweGI1LCAweGMwLCAweDg4LCAweDAyLCAweDQ5LCAweGZlLCAweGY3LAotMHhmNCwgMHhmZCwgMHgwMCwgMHgyMCwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg3NSwgMHgwMiwgMHhmZiwgMHhmZiwKLTB4MDAsIDB4YjUsIDB4ODQsIDB4YjAsIDB4NjksIDB4NDYsIDB4ZmUsIDB4ZjcsIDB4ZjcsIDB4ZmYsIDB4MDYsIDB4NDgsCi0weDAwLCAweDZiLCAweDAxLCAweGFiLCAweDU4LCAweDgwLCAweDY4LCAweDQ2LCAweDAwLCAweDIxLCAweGZlLCAweGY3LAotMHgyZiwgMHhmZiwgMHgwMSwgMHgyMCwgMHgwNCwgMHhiMCwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwKLTB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4MDAsIDB4YjUsIDB4ZmUsIDB4ZjcsIDB4ZmQsIDB4ZmYsIDB4MDgsIDB4YmMsCi0weDE4LCAweDQ3LCAweDAwLCAweGI1LCAweGZlLCAweGY3LCAweGY4LCAweGZmLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHhiNSwgMHhmZSwgMHhmNywgMHhmMywgMHhmZiwgMHgwOCwgMHhiYywKLTB4MTgsIDB4NDcsIDB4ODAsIDB4YjUsIDB4MDcsIDB4MWMsIDB4MTAsIDB4NDgsIDB4ZmUsIDB4ZjcsIDB4YzYsIDB4ZmQsCi0weDAxLCAweDIwLCAweDQwLCAweDAyLCAweGExLCAweDIxLCAweDQ5LCAweDAzLCAweDg4LCAweDYwLCAweDAwLCAweDIxLAotMHgwYywgMHg0OCwgMHhjMCwgMHg0NiwgMHgwMSwgMHg3MSwgMHgwYywgMHg0OCwgMHgwMiwgMHg2OCwgMHg1MiwgMHgwYywKLTB4MDUsIDB4ZDIsIDB4MDIsIDB4NjgsIDB4MTIsIDB4MGMsIDB4MDYsIDB4ZDEsIDB4MDAsIDB4NjgsIDB4ODAsIDB4MGEsCi0weDAzLCAweGQzLCAweDA4LCAweDQ4LCAweGMwLCAweDQ2LCAweGM3LCAweDYwLCAweDAyLCAweGUwLCAweDA3LCAweDQ4LAotMHhjMCwgMHg0NiwgMHgwNywgMHg2NCwgMHgwOCwgMHgxYywgMHg4MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4ZDUsIDB4OTQsIDB4MjEsIDB4NDAsIDB4MjgsIDB4MGYsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsCi0weDQwLCAweDAxLCAweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweGI1LCAweDAxLCAweDIwLAotMHgwMywgMHg0OSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg3MiwgMHgxMiwgMHgyMCwgMHhmZiwgMHhmNywgMHhjYiwgMHhmZiwKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4ODgsIDB4MWMsIDB4MDAsIDB4ODAsIDB4MDAsIDB4YjUsIDB4MDEsIDB4MjAsCi0weDAzLCAweDQ5LCAweGMwLCAweDQ2LCAweDQ4LCAweDcyLCAweDE1LCAweDIwLCAweGZmLCAweGY3LCAweGJmLCAweGZmLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg4OCwgMHgxYywgMHgwMCwgMHg4MCwgMHgwMCwgMHhiNSwgMHgwMSwgMHhmMCwKLTB4ZjksIDB4ZmYsIDB4MDEsIDB4MjAsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4ODAsIDB4YjUsIDB4ODQsIDB4YjAsCi0weDA3LCAweDFjLCAweGY4LCAweDg4LCAweDAyLCAweGYwLCAweGZlLCAweGY4LCAweDAwLCAweDI4LCAweDBjLCAweGQxLAotMHg2OSwgMHg0NiwgMHgzOCwgMHgxYywgMHhmZSwgMHhmNywgMHg4MiwgMHhmZiwgMHgwNiwgMHg0OCwgMHgwMSwgMHhhYiwKLTB4NTgsIDB4ODAsIDB4NjgsIDB4NDYsIDB4MDAsIDB4MjEsIDB4ZmUsIDB4ZjcsIDB4YmIsIDB4ZmUsIDB4MDEsIDB4MjAsCi0weDAwLCAweGUwLCAweDAwLCAweDIwLCAweDA0LCAweGIwLCAweDgwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHg4MCwgMHhiNSwgMHg4NCwgMHhiMCwgMHg2OSwgMHg0NiwgMHhmZSwgMHhmNywKLTB4NmQsIDB4ZmYsIDB4MDEsIDB4MjcsIDB4MDEsIDB4YWIsIDB4NWYsIDB4ODAsIDB4MDksIDB4NDgsIDB4ODEsIDB4ODksCi0weDA5LCAweDA0LCAweGMyLCAweDg5LCAweDExLCAweDQzLCAweDAyLCAweDkxLCAweDgxLCAweDg4LCAweDA5LCAweDA0LAotMHhjMCwgMHg4OCwgMHgwOCwgMHg0MywgMHgwMywgMHg5MCwgMHg2OCwgMHg0NiwgMHgwMCwgMHgyMSwgMHhmZSwgMHhmNywKLTB4OWIsIDB4ZmUsIDB4MzgsIDB4MWMsIDB4MDQsIDB4YjAsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weDRjLCAweDJhLCAweDAwLCAweDgwLCAweDAwLCAweGI1LCAweGZlLCAweGY3LCAweDY5LCAweGZmLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHgwMCwgMHhiNSwgMHhmZSwgMHhmNywgMHg2NCwgMHhmZiwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4MDAsIDB4YjUsIDB4ZmUsIDB4ZjcsIDB4NWYsIDB4ZmYsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4YjUsCi0weGZlLCAweGY3LCAweDVhLCAweGZmLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweGI1LCAweGZlLCAweGY3LAotMHg1NSwgMHhmZiwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHhiNSwgMHhmZSwgMHhmNywgMHg1MCwgMHhmZiwKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4YjUsIDB4ZmUsIDB4ZjcsIDB4NGIsIDB4ZmYsIDB4MDgsIDB4YmMsCi0weDE4LCAweDQ3LCAweDAwLCAweGI1LCAweGZlLCAweGY3LCAweDQ2LCAweGZmLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHgwMCwgMHhiNSwgMHhmZSwgMHhmNywgMHg0MSwgMHhmZiwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHhiNSwKLTB4ZmUsIDB4ZjcsIDB4M2MsIDB4ZmYsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4YjUsIDB4ZmUsIDB4ZjcsCi0weDM3LCAweGZmLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweGI1LCAweGZlLCAweGY3LCAweDMyLCAweGZmLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHhiNSwgMHg4YywgMHhiMCwgMHgwOCwgMHhhOSwgMHhmZSwgMHhmNywKLTB4MTMsIDB4ZmYsIDB4NjksIDB4NDYsIDB4MDgsIDB4YTgsIDB4MDIsIDB4ZjAsIDB4YTksIDB4ZmYsIDB4MDIsIDB4MjAsCi0weDA4LCAweGFiLCAweDU4LCAweDcwLCAweDY5LCAweDQ2LCAweDA4LCAweGE4LCAweGZlLCAweGY3LCAweDQ4LCAweGZlLAotMHgwMSwgMHgyMCwgMHgwYywgMHhiMCwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHhiNSwgMHhmZSwgMHhmNywKLTB4MTksIDB4ZmYsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4OTAsIDB4YjUsIDB4ODQsIDB4YjAsIDB4MDcsIDB4MWMsCi0weDY5LCAweDQ2LCAweDM4LCAweDFjLCAweGZlLCAweGY3LCAweGY4LCAweGZlLCAweGZhLCAweDg4LCAweDEyLCAweDQ5LAotMHgwMSwgMHgyNCwgMHhjOCwgMHgxZCwgMHg4OSwgMHgzMCwgMHgwMCwgMHgyYSwgMHgwZiwgMHhkMCwgMHgwNCwgMHg3MCwKLTB4NDQsIDB4NzAsIDB4YjgsIDB4NjgsIDB4MDAsIDB4MGMsIDB4ODAsIDB4MzEsIDB4YzgsIDB4ODIsIDB4YjgsIDB4NjgsCi0weGMwLCAweDQ2LCAweDA4LCAweDgzLCAweGY4LCAweDY4LCAweDAwLCAweDBjLCAweDQ4LCAweDgzLCAweGY4LCAweDY4LAotMHhjMCwgMHg0NiwgMHg4OCwgMHg4MywgMHgwMiwgMHhlMCwgMHgwMCwgMHgyMSwKLTB4MDEsIDB4NzAsIDB4NDEsIDB4NzAsIDB4MDYsIDB4NDgsIDB4MDEsIDB4YWIsIDB4NTgsIDB4ODAsIDB4NjgsIDB4NDYsCi0weDAwLCAweDIxLCAweGZlLCAweGY3LCAweDE3LCAweGZlLCAweDIwLCAweDFjLCAweDA0LCAweGIwLCAweDkwLCAweGJjLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4YjUsIDB4ZmUsIDB4ZjcsIDB4ZTMsIDB4ZmUsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4YjUsCi0weGZlLCAweGY3LCAweGRlLCAweGZlLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweGI1LCAweGZlLCAweGY3LAotMHhkOSwgMHhmZSwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHhiNSwgMHhmZSwgMHhmNywgMHhkNCwgMHhmZSwKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4YjUsIDB4ZmUsIDB4ZjcsIDB4Y2YsIDB4ZmUsIDB4MDgsIDB4YmMsCi0weDE4LCAweDQ3LCAweDkwLCAweGI1LCAweDg0LCAweGIwLCAweDA3LCAweDFjLCAweDY5LCAweDQ2LCAweDM4LCAweDFjLAotMHhmZSwgMHhmNywgMHhhZSwgMHhmZSwgMHhmOCwgMHg4OCwgMHgwMywgMHgyNCwgMHhlNCwgMHgwNCwgMHgwNCwgMHg0MywKLTB4MDMsIDB4MjMsIDB4ZGIsIDB4MDQsIDB4OWMsIDB4NDIsIDB4MDIsIDB4ZDMsIDB4MGYsIDB4NGIsIDB4OWMsIDB4NDIsCi0weDA2LCAweGQ5LCAweDBmLCAweDQ4LCAweDAxLCAweGFiLCAweDU4LCAweDgwLCAweDY4LCAweDQ2LCAweDAwLCAweDIxLAotMHhmZSwgMHhmNywgMHhkYywgMHhmZCwgMHgwMSwgMHgyMCwgMHg4MCwgMHgwNywgMHgyMCwgMHg0MywgMHgwMCwgMHg2OCwKLTB4MDAsIDB4MjEsIDB4MDAsIDB4YWIsIDB4NTksIDB4NzAsIDB4ZmEsIDB4ODgsIDB4YzAsIDB4NDYsIDB4ZGEsIDB4ODAsCi0weDAyLCAweDkwLCAweDAzLCAweDkxLCAweDY4LCAweDQ2LCAweDA0LCAweDMzLCAweGZlLCAweGY3LCAweGNjLCAweGZkLAotMHgwMSwgMHgyMCwgMHgwNCwgMHhiMCwgMHg5MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwKLTB4ZTAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YjUsIDB4ODQsIDB4YjAsCi0weDA3LCAweDFjLCAweDY5LCAweDQ2LCAweDM4LCAweDFjLCAweGZlLCAweGY3LCAweDdiLCAweGZlLCAweGY4LCAweDg4LAotMHgwMywgMHgyMywgMHhkYiwgMHgwNCwgMHgxOCwgMHg0MywgMHg5OCwgMHg0MiwgMHgwMiwgMHhkMywgMHgwYSwgMHg0YiwKLTB4OTgsIDB4NDIsIDB4MDgsIDB4ZDksIDB4MDksIDB4NDgsIDB4MDEsIDB4YWIsIDB4NTgsIDB4ODAsIDB4NjgsIDB4NDYsCi0weDAwLCAweDIxLCAweGZlLCAweGY3LCAweGFiLCAweGZkLCAweDAxLCAweDIwLCAweDAzLCAweGUwLCAweGI5LCAweDY4LAotMHhjMCwgMHg0NiwgMHgwMSwgMHg2MCwgMHgwMCwgMHgyMCwgMHgwNCwgMHhiMCwgMHg4MCwgMHhiYywgMHgwOCwgMHhiYywKLTB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsCi0weDgwLCAweGI1LCAweDg2LCAweGIwLCAweDAyLCAweGE5LCAweGZlLCAweGY3LCAweDU3LCAweGZlLCAweDAxLCAweDI3LAotMHgwMiwgMHhhYiwgMHg1ZiwgMHg3MCwgMHgwMCwgMHgyMCwgMHhkOCwgMHg4MCwgMHgwYSwgMHg0OCwgMHg0MSwgMHg2OCwKLTB4YzAsIDB4NDYsIDB4MDQsIDB4OTEsIDB4ODEsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MDUsIDB4OTEsIDB4YzEsIDB4NjgsCi0weGMwLCAweDQ2LCAweDAwLCAweDkxLCAweDQwLCAweDY5LCAweGMwLCAweDQ2LCAweDAxLCAweDkwLCAweDY5LCAweDQ2LAotMHgwMiwgMHhhOCwgMHhmZSwgMHhmNywgMHg4MSwgMHhmZCwgMHgzOCwgMHgxYywgMHgwNiwgMHhiMCwgMHg4MCwgMHhiYywKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NjgsIDB4MTksIDB4MDAsIDB4ODAsIDB4MDAsIDB4YjUsIDB4YzEsIDB4NjgsCi0weDgwLCAweDY4LCAweGZlLCAweGY3LCAweDQ3LCAweGZiLCAweDAwLCAweDIwLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHgwMCwgMHgyMCwgMHg3MCwgMHg0NywgMHg5MCwgMHhiNSwgMHg4NCwgMHhiMCwgMHgwNCwgMHgxYywgMHgwZiwgMHgxYywKLTB4NjgsIDB4NDYsIDB4NTAsIDB4MjEsIDB4ZmUsIDB4ZjcsIDB4MzYsIDB4ZmUsIDB4MDEsIDB4YWIsIDB4NWMsIDB4ODAsCi0weDAyLCAweDk3LCAweDY4LCAweDQ2LCAweDAwLCAweDIxLCAweGZlLCAweGY3LCAweDYxLCAweGZkLCAweDA0LCAweGIwLAotMHg5MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg4MCwgMHhiNSwgMHg4NCwgMHhiMCwgMHgwNywgMHgxYywKLTB4NjgsIDB4NDYsIDB4NTEsIDB4MjEsIDB4ZmUsIDB4ZjcsIDB4MjQsIDB4ZmUsIDB4MDEsIDB4YWIsIDB4NWYsIDB4ODAsCi0weDY4LCAweDQ2LCAweDAwLCAweDIxLCAweGZlLCAweGY3LCAweDUwLCAweGZkLCAweDA0LCAweGIwLCAweDgwLCAweGJjLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgyMCwgMHg3MCwgMHg0NywgMHgwMCwgMHgyMCwgMHg3MCwgMHg0NywKLTB4OTAsIDB4YjUsIDB4ODQsIDB4YjAsIDB4MDAsIDB4MjcsIDB4MTIsIDB4NDksIDB4MDksIDB4NjgsIDB4MTIsIDB4NGEsCi0weDEyLCAweDZiLCAweDEwLCAweDIzLCAweDFhLCAweDQwLCAweDAxLCAweDI0LCAweDAwLCAweDJhLCAweDAwLCAweGQwLAotMHgwMSwgMHgyNywgMHg4YSwgMHgwYywgMHgwMywgMHhkMywgMHgzYSwgMHgwNCwgMHgxMiwgMHgwYywgMHgwMiwgMHgyNywKLTB4MTcsIDB4NDMsIDB4YzksIDB4MGMsIDB4MDMsIDB4ZDMsIDB4MzksIDB4MDQsIDB4MDksIDB4MGMsIDB4MDQsIDB4MjcsCi0weDBmLCAweDQzLCAweDY5LCAweDQ2LCAweGZlLCAweGY3LCAweGVjLCAweGZkLCAweDAxLCAweGFiLCAweDVmLCAweDgwLAotMHg2OCwgMHg0NiwgMHgwMCwgMHgyMSwgMHhmZSwgMHhmNywgMHgyNiwgMHhmZCwgMHgyMCwgMHgxYywgMHgwNCwgMHhiMCwKLTB4OTAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDEwLCAweDQwLCAweGMwLCAweDAwLCAweDE4LCAweDQwLCAweDAwLCAweGI1LCAweDg0LCAweGIwLAotMHg2OSwgMHg0NiwgMHhmZSwgMHhmNywgMHhkNywgMHhmZCwgMHgwNiwgMHg0OCwgMHhjMCwgMHg2ZCwgMHgwMSwgMHhhYiwKLTB4NTgsIDB4ODAsIDB4NjgsIDB4NDYsIDB4MDAsIDB4MjEsIDB4ZmUsIDB4ZjcsIDB4MGYsIDB4ZmQsIDB4MDEsIDB4MjAsCi0weDA0LCAweGIwLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweGE0LCAweDJhLCAweDAwLCAweDgwLAotMHgwMCwgMHhiNSwgMHhmZSwgMHhmNywgMHhkZCwgMHhmZCwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg3MCwgMHg0NywKLTB4MDAsIDB4MjAsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MjAsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MjAsIDB4NzAsIDB4NDcsCi0weDAwLCAweDIwLCAweDcwLCAweDQ3LCAweDAwLCAweDIwLCAweDcwLCAweDQ3LCAweDAwLCAweDIwLCAweDcwLCAweDQ3LAotMHgwMCwgMHhiNSwgMHhmZSwgMHhmNywgMHhjYiwgMHhmZCwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwKLTB4ODAsIDB4YjUsIDB4ODUsIDB4YjAsIDB4MDEsIDB4YTksIDB4ZmUsIDB4ZjcsIDB4YWIsIDB4ZmQsIDB4MDAsIDB4MjAsCi0weDAxLCAweGFiLCAweDU4LCAweDcwLCAweDBjLCAweDQ5LCAweGM5LCAweDY4LCAweDAxLCAweDI3LCAweDAxLCAweDI5LAotMHgwMiwgMHhkMSwgMHgwMywgMHg5NywgMHgwNCwgMHg5NywgMHgwMSwgMHhlMCwgMHgwMywgMHg5NywgMHgwNCwgMHg5MCwKLTB4NjgsIDB4NDYsIDB4MDEsIDB4ZjAsIDB4MzMsIDB4ZmQsIDB4MDIsIDB4YWIsIDB4MDAsIDB4OTgsIDB4YzAsIDB4NDYsCi0weDU4LCAweDgwLCAweDAwLCAweDIxLCAweDAxLCAweGE4LCAweGZlLCAweGY3LCAweGQzLCAweGZjLCAweDM4LCAweDFjLAotMHgwNSwgMHhiMCwgMHg4MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwKLTB4NzAsIDB4NDcsIDB4MDQsIDB4NDksIDB4MDAsIDB4MjAsIDB4MDAsIDB4MjIsIDB4MGEsIDB4NzAsIDB4MDEsIDB4MzAsCi0weDAxLCAweDMxLCAweDY4LCAweDI4LCAweGZhLCAweGQzLCAweDcwLCAweDQ3LCAweGEwLCAweDgyLCAweDIwLCAweDQwLAotMHgwMCwgMHgyMiwgMHg4OCwgMHg0MiwgMHgwMywgMHhkMywgMHg0MCwgMHgxYSwgMHgwMSwgMHgzMiwgMHg4OCwgMHg0MiwKLTB4ZmIsIDB4ZDIsIDB4MTAsIDB4MWMsIDB4NzAsIDB4NDcsIDB4ODgsIDB4NDIsIDB4MDIsIDB4ZDMsIDB4NDAsIDB4MWEsCi0weDg4LCAweDQyLCAweGZjLCAweGQyLCAweDcwLCAweDQ3LCAweDkwLCAweGI0LCAweDAxLCAweDFjLCAweGZmLCAweDI3LAotMHgwNCwgMHgyOSwgMHgyNywgMHhkYSwgMHgwMCwgMHgyMCwgMHgxNCwgMHg0YSwgMHg0MywgMHgwMCwgMHgxYiwgMHgxOCwKLTB4ZGIsIDB4MDAsIDB4ZDQsIDB4NTgsIDB4NjMsIDB4MGMsIDB4MWEsIDB4ZDIsIDB4NGIsIDB4MDAsIDB4NTksIDB4MTgsCi0weGM5LCAweDAwLCAweDU3LCAweDU4LCAweDQzLCAweDAwLCAweDFiLCAweDE4LCAweGRiLCAweDAwLCAweGQ3LCAweDUwLAotMHg4OSwgMHgxOCwgMHg5YSwgMHgxOCwgMHg0ZiwgMHg2OCwgMHhjMCwgMHg0NiwgMHg1NywgMHg2MCwgMHg4YiwgMHg2OCwKLTB4YzAsIDB4NDYsIDB4OTMsIDB4NjAsIDB4MGIsIDB4NjksIDB4YzAsIDB4NDYsIDB4MTMsIDB4NjEsIDB4NGIsIDB4NjksCi0weGMwLCAweDQ2LCAweDUzLCAweDYxLCAweGM5LCAweDY4LCAweGMwLCAweDQ2LCAweGQxLCAweDYwLCAweDkwLCAweGJjLAotMHg3MCwgMHg0NywgMHgwMSwgMHgzMCwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwZSwgMHgwNCwgMHgyOCwgMHhkOSwgMHhkYiwKLTB4MzgsIDB4MWMsIDB4ZjYsIDB4ZTcsIDB4NDAsIDB4YWIsIDB4MjAsIDB4NDAsIDB4ZjcsIDB4YjUsIDB4YzQsIDB4YjAsCi0weDA0LCAweDFjLCAweDAwLCAweDIwLCAweDQ2LCAweDlhLCAweDExLCAweDIxLCAweDExLCAweDQwLCAweDZlLCAweGQwLAotMHgwMCwgMHgyNywgMHg3OSwgMHgwMCwgMHhjOSwgMHgxOSwgMHhjOSwgMHgwMCwgMHg1NywgMHg0YSwgMHg1MSwgMHg1OCwKLTB4NDksIDB4MGMsIDB4MDMsIDB4ZDIsIDB4MDEsIDB4MzAsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MGUsIDB4MDQsIDB4ZTAsCi0weDc5LCAweDFjLCAweDBmLCAweDA2LCAweDNmLCAweDBlLCAweDA0LCAweDJmLCAweGVmLCAweGRiLCAweDAwLCAweDI4LAotMHg1YiwgMHhkMCwgMHgwMCwgMHgyNiwgMHgwMCwgMHgyMiwgMHgwMCwgMHg5MiwgMHg0MCwgMHgyMywgMHgwMCwgMHgyMSwKLTB4MDAsIDB4MjAsIDB4MDIsIDB4YWEsIDB4MDAsIDB4ZjAsIDB4ODgsIDB4ZmEsIDB4MDQsIDB4YTksIDB4MDAsIDB4MjAsCi0weDgyLCAweDAwLCAweDhhLCAweDU4LCAweDEyLCAweDA2LCAweDEyLCAweDBlLCAweGEyLCAweDQyLCAweDAzLCAweGQxLAotMHg3MiwgMHgxYywgMHgxNiwgMHgwNiwgMHgzNiwgMHgwZSwgMHgwNCwgMHhlMCwgMHgwMSwgMHgzMCwgMHgwMCwgMHgwNiwKLTB4MDAsIDB4MGUsIDB4MTAsIDB4MjgsIDB4ZjAsIDB4ZGIsIDB4MDAsIDB4MmUsIDB4M2QsIDB4ZDAsIDB4MDQsIDB4MmMsCi0weDNlLCAweGQxLCAweDgwLCAweDAwLCAweDA4LCAweDU4LCAweDQwLCAweDAxLCAweDgwLCAweDBkLCAweDAwLCAweDIyLAotMHgwMCwgMHg5MiwgMHgxMCwgMHgyMywgMHgwMCwgMHgyMSwgMHgwMiwgMHhhYSwgMHgwMCwgMHhmMCwgMHg2OCwgMHhmYSwKLTB4MDAsIDB4MjEsIDB4MDEsIDB4OTEsIDB4MDIsIDB4YTgsIDB4MDUsIDB4OTksIDB4NDksIDB4MGMsIDB4ODksIDB4MDUsCi0weDI5LCAweGQwLCAweGMxLCAweDY4LCAweDBhLCAweDA2LCAweDEyLCAweDBlLCAweDQ1LCAweDliLCAweDlhLCAweDQyLAotMHgxMSwgMHhkMSwgMHhjMCwgMHg2OCwgMHg0MCwgMHgwMSwgMHg4NiwgMHgwZCwgMHgwMCwgMHgyMiwgMHgwMCwgMHg5MiwKLTB4MGMsIDB4MjMsIDB4MDAsIDB4MjEsIDB4MzAsIDB4MWMsIDB4MDIsIDB4YWEsIDB4MDAsIDB4ZjAsIDB4NTAsIDB4ZmEsCi0weDAxLCAweDk5LCAweDAyLCAweDlkLCAweDQ4LCAweDFjLCAweDAxLCAweDA2LAotMHgwOSwgMHgwZSwgMHgwMSwgMHg5MSwgMHgwZSwgMHhlMCwgMHg0OCwgMHgwMSwgMHg4NiwgMHgwZCwgMHgwMCwgMHgyMiwKLTB4MDAsIDB4OTIsIDB4MTAsIDB4MjMsIDB4MDAsIDB4MjEsIDB4MzAsIDB4MWMsIDB4MDIsIDB4YWEsIDB4MDAsIDB4ZjAsCi0weDNmLCAweGZhLCAweDAyLCAweGE4LCAweDA1LCAweDk5LCAweDQ5LCAweDBjLCAweDg5LCAweDA1LCAweGQ4LCAweGQxLAotMHgwMSwgMHg5OSwgMHgwMCwgMHgyOSwgMHgwZiwgMHhkMSwgMHhmZiwgMHgyMCwgMHgzZCwgMHhlMCwgMHg0MCwgMHhlMCwKLTB4ODAsIDB4MDAsIDB4MDgsIDB4NTgsIDB4NDAsIDB4MDEsIDB4ODYsIDB4MGQsIDB4MDAsIDB4MjIsIDB4MDAsIDB4OTIsCi0weDBjLCAweDIzLCAweDAwLCAweDIxLCAweDMwLCAweDFjLCAweDAyLCAweGFhLCAweDAwLCAweGYwLCAweDI4LCAweGZhLAotMHgwMiwgMHg5ZCwgMHgwMSwgMHgyMCwgMHgwMCwgMHgwNCwgMHg0NiwgMHg5YSwgMHgxMCwgMHg0MywgMHg3OSwgMHgwMCwKLTB4YzksIDB4MTksIDB4YzksIDB4MDAsIDB4MTcsIDB4NGEsIDB4YzAsIDB4NDYsIDB4NTAsIDB4NTAsIDB4MzAsIDB4MWMsCi0weDhlLCAweDE4LCAweDcwLCAweDYwLCAweDEwLCAweDIwLCAweDA0LCAweDJjLCAweDAwLCAweGQwLCAweDBjLCAweDIwLAotMHgwNCwgMHgxYywgMHhiMCwgMHg2MCwgMHgwMCwgMHgyMCwgMHgyMCwgMHgyMSwgMHg0NiwgMHg5YSwgMHgxMSwgMHg0MCwKLTB4MjAsIDB4MjksIDB4MDAsIDB4ZDAsIDB4MjgsIDB4MWMsIDB4MzAsIDB4NjEsIDB4MjgsIDB4MTksIDB4ZmYsIDB4MjEsCi0weGZmLCAweDMwLCAweDA4LCAweDMwLCAweDA5LCAweDMxLCAweGZmLCAweGY3LCAweDE5LCAweGZmLCAweDQzLCAweDAxLAotMHgxOCwgMHgxOCwgMHhjMCwgMHgwMCwgMHgwMCwgMHgxYiwgMHg3MCwgMHg2MSwgMHgwMCwgMHgyMCwgMHg1MCwgMHgyMSwKLTB4NDYsIDB4OWEsIDB4MTEsIDB4NDAsIDB4NTAsIDB4MjksIDB4MDAsIDB4ZDEsIDB4MjgsIDB4MWMsIDB4ZjAsIDB4NjAsCi0weDM4LCAweDFjLCAweDQ3LCAweGIwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweGZmLCAweDIwLAotMHhmOSwgMHhlNywgMHgwMCwgMHgwMCwgMHg0MCwgMHhhYiwgMHgyMCwgMHg0MCwgMHg4MCwgMHhiNCwgMHgwMCwgMHgyMywKLTB4MDAsIDB4MjIsIDB4MDAsIDB4MjksIDB4MDYsIDB4ZDksIDB4ODcsIDB4NWMsIDB4N2IsIDB4NDAsIDB4MWIsIDB4MDYsCi0weDFiLCAweDBlLCAweDAxLCAweDMyLCAweDhhLCAweDQyLCAweGY4LCAweGQzLCAweGQ4LCAweDQzLCAweDAwLCAweDA2LAotMHgwMCwgMHgwZSwgMHg4MCwgMHhiYywgMHg3MCwgMHg0NywgMHhmMCwgMHhiNSwgMHhjNiwgMHhiMCwgMHgwNCwgMHgyOCwKLTB4MDcsIDB4ZGEsIDB4NDEsIDB4MDAsIDB4MDksIDB4MTgsIDB4YzksIDB4MDAsIDB4NDUsIDB4OTEsIDB4NDEsIDB4NGEsCi0weDUxLCAweDU4LCAweDRiLCAweDBjLCAweDAyLCAweGQyLCAweDAwLCAweDIwLCAweGMwLCAweDQzLCAweDc2LCAweGUwLAotMHgwMSwgMHgyMywgMHg1YiwgMHgwNCwgMHgxOSwgMHg0MCwgMHg0MywgMHgwMCwgMHgxOCwgMHgxOCwgMHhjMCwgMHgwMCwKLTB4M2EsIDB4NGEsIDB4MTQsIDB4MTgsIDB4MDAsIDB4MjksIDB4NjEsIDB4ZDAsIDB4MDAsIDB4MjEsIDB4MDIsIDB4OTEsCi0weDIwLCAweDY5LCAweGExLCAweDY4LCAweDQ1LCAweDE4LCAweDMwLCAweGQwLCAweGZmLCAweDIxLCAweDY4LCAweDFlLAotMHgwOSwgMHgzMSwgMHhmZiwgMHhmNywgMHhjZCwgMHhmZSwgMHg2MSwgMHg2OCwgMHg0MCwgMHgxOCwgMHgwMSwgMHg5MCwKLTB4MDEsIDB4OTgsIDB4ODEsIDB4NDIsIDB4MDIsIDB4ZDEsIDB4YTYsIDB4NjgsIDB4YWYsIDB4MWIsIDB4MDksIDB4ZTAsCi0weDAwLCAweDI2LCAweGZmLCAweDIxLCAweDI4LCAweDFjLCAweDA5LCAweDMxLCAweGZmLCAweGY3LCAweGM3LCAweGZlLAotMHgwNywgMHgxYywgMHgwMSwgMHhkMSwgMHhmZiwgMHgyNywgMHgwOSwgMHgzNywgMHgwMCwgMHgyMiwgMHgwMCwgMHg5MiwKLTB4MDEsIDB4OTgsIDB4MzEsIDB4MWMsIDB4MDMsIDB4YWEsIDB4M2IsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4OWUsIDB4ZjksCi0weDAzLCAweGE4LCAweDM5LCAweDFjLCAweGZmLCAweGY3LCAweGFjLCAweGZmLCAweGMwLCAweDQzLCAweDAyLCAweDk5LAotMHg0OCwgMHg0MCwgMHgwMSwgMHgwNiwgMHgwOSwgMHgwZSwgMHgwMiwgMHg5MSwgMHhlZCwgMHgxYiwgMHhhMCwgMHg2OCwKLTB4YTgsIDB4NDIsIDB4MDAsIDB4ZDEsIDB4MDAsIDB4MjUsIDB4MDAsIDB4MmQsIDB4Y2UsIDB4ZDgsIDB4MDIsIDB4OTksCi0weGNmLCAweDQzLCAweDAwLCAweDIyLCAweDAwLCAweDkyLCAweDBjLCAweDIzLCAweDAwLCAweDIxLCAweDYwLCAweDY4LAotMHgwMywgMHhhYSwgMHgwMCwgMHhmMCwgMHg4MywgMHhmOSwgMHgyMCwgMHg2OSwgMHhjMCwgMHg0NiwgMHgwMywgMHg5MCwKLTB4MDUsIDB4OTgsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MDIsIDB4MzksIDB4MDYsIDB4MDksIDB4MGUsIDB4MDgsIDB4NDMsCi0weDA1LCAweDkwLCAweGZmLCAweDIzLCAweDFiLCAweDAyLCAweDk4LCAweDQzLCAweDA1LCAweDkwLCAweDBjLCAweDIxLAotMHgwMywgMHhhOCwgMHhmZiwgMHhmNywgMHg4MywgMHhmZiwgMHhmZiwgMHgyMywgMHgxYiwgMHgwMiwgMHgwNSwgMHg5OSwKLTB4OTksIDB4NDMsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MGUsIDB4MDAsIDB4MDIsIDB4MDgsIDB4NDMsIDB4MDUsIDB4OTAsCi0weDBjLCAweDIzLCAweDAwLCAweDIxLCAweDYwLCAweDY4LCAweDAzLCAweGFhLCAweDAwLCAweGYwLCAweGNhLCAweGY5LAotMHgwMCwgMHgyMCwgMHg0NSwgMHg5OSwgMHgwNiwgMHg0YSwgMHhjMCwgMHg0NiwgMHg1MCwgMHg1MCwgMHhjMSwgMHg0MywKLTB4NjEsIDB4NjAsIDB4YTEsIDB4NjAsIDB4ZTEsIDB4NjAsIDB4MjEsIDB4NjEsIDB4NjEsIDB4NjEsIDB4NDYsIDB4YjAsCi0weGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDQwLCAweGFiLCAweDIwLCAweDQwLAotMHhiMCwgMHhiNCwgMHg0YywgMHg0MiwgMHgwMCwgMHgyOSwgMHgwMCwgMHhkYiwKLTB4MGMsIDB4MWMsIDB4MDAsIDB4MjcsIDB4ZmYsIDB4NDMsIDB4MDQsIDB4MjgsIDB4MjEsIDB4ZGEsIDB4MTIsIDB4NGQsCi0weDQzLCAweDAwLCAweDE4LCAweDE4LCAweGMwLCAweDAwLCAweDQwLCAweDE5LCAweDAxLCAweDJhLCAweDA1LCAweGQwLAotMHgwMiwgMHgyYSwgMHgwOSwgMHhkMCwgMHgwMywgMHgyYSwgMHgxNiwgMHhkMSwgMHgwMSwgMHg2OSwgMHgwYiwgMHhlMCwKLTB4MDAsIDB4MjksIDB4MTIsIDB4ZGIsIDB4MDIsIDB4NjksIDB4OGEsIDB4NDIsIDB4MGYsIDB4ZDMsIDB4MDUsIDB4ZTAsCi0weDAwLCAweDI5LCAweDA3LCAweGRhLCAweGMxLCAweDY4LCAweGExLCAweDQyLCAweDA5LCAweGQzLCAweDA5LCAweDFiLAotMHhjMSwgMHg2MCwgMHhjMCwgMHg2OCwgMHhiMCwgMHhiYywgMHg3MCwgMHg0NywgMHhjMSwgMHg2OCwgMHgwOSwgMHgxOSwKLTB4MDIsIDB4NjksIDB4OTEsIDB4NDIsIDB4ZjYsIDB4ZDksIDB4MzgsIDB4MWMsIDB4ZjYsIDB4ZTcsIDB4MDAsIDB4MDAsCi0weDQwLCAweGFiLCAweDIwLCAweDQwLCAweGYwLCAweGI1LCAweDg0LCAweGIwLCAweDE3LCAweDFjLCAweDBkLCAweDFjLAotMHgwMCwgMHgyMSwgMHgwMiwgMHg5MSwgMHg0MiwgMHgwMCwgMHgxMiwgMHgxOCwgMHhkMiwgMHgwMCwgMHgyYywgMHg0OSwKLTB4OGIsIDB4NTgsIDB4MWIsIDB4MDYsIDB4MWIsIDB4MGUsIDB4MDEsIDB4OTMsIDB4MDAsIDB4MjMsIDB4ZGIsIDB4NDMsCi0weDA0LCAweDI4LCAweDAyLCAweGRhLCAweDAxLCAweDk4LCAweDQwLCAweDA4LCAweDAxLCAweGQyLCAweDE4LCAweDFjLAotMHg0NiwgMHhlMCwgMHg1NCwgMHgxOCwgMHhlMCwgMHg2OCwgMHhjMiwgMHgxOSwgMHgyMSwgMHg2OSwgMHg4YSwgMHg0MiwKLTB4MDAsIDB4ZDksIDB4MGYsIDB4MWEsIDB4MDAsIDB4MmYsIDB4M2MsIDB4ZDksIDB4YTAsIDB4NjgsIDB4ZTEsIDB4NjgsCi0weDQwLCAweDE4LCAweGZmLCAweDIxLCAweDA5LCAweDMxLCAweGZmLCAweGY3LCAweDBkLCAweGZlLCAweDYxLCAweDY4LAotMHg0NiwgMHgxOCwgMHhhMCwgMHg2OCwgMHhlMSwgMHg2OCwgMHg0MCwgMHgxOCwgMHhmZiwgMHgyMSwgMHgwOSwgMHgzMSwKLTB4ZmYsIDB4ZjcsIDB4MGQsIDB4ZmUsIDB4YzIsIDB4MTksIDB4ZmYsIDB4MjEsIDB4MDksIDB4MzEsIDB4OGEsIDB4NDIsCi0weDE0LCAweGQ5LCAweDAxLCAweDlhLCAweGMwLCAweDQ2LCAweDAwLCAweDkyLCAweDBiLCAweDFhLCAweDAzLCAweDkzLAotMHgwMSwgMHgxYywgMHgzMCwgMHgxYywgMHgyYSwgMHgxYywgMHgwMCwgMHhmMCwgMHhlMSwgMHhmOCwgMHhlMCwgMHg2OCwKLTB4MDMsIDB4OWIsIDB4YzAsIDB4MTgsIDB4ZTAsIDB4NjAsIDB4MDMsIDB4OWIsIDB4NWQsIDB4MTksIDB4ZmYsIDB4MWEsCi0weDAyLCAweDk4LCAweDE4LCAweDE4LCAweDAyLCAweDkwLCAweDEwLCAweGUwLCAweDAxLCAweDlhLCAweGMwLCAweDQ2LAotMHgwMCwgMHg5MiwgMHgwMSwgMHgxYywgMHgzMCwgMHgxYywgMHgyYSwgMHgxYywgMHgzYiwgMHgxYywgMHgwMCwgMHhmMCwKLTB4Y2QsIDB4ZjgsIDB4ZTAsIDB4NjgsIDB4YzAsIDB4MTksIDB4ZWQsIDB4MTksIDB4ZTAsIDB4NjAsIDB4MDIsIDB4OTgsCi0weGMwLCAweDE5LCAweDAyLCAweDkwLCAweDAwLCAweDI3LCAweDAwLCAweDJmLCAweGMyLCAweGQ4LCAweDAyLCAweDk4LAotMHgwNCwgMHhiMCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg0MCwgMHhhYiwgMHgyMCwgMHg0MCwKLTB4ZjAsIDB4YjUsIDB4ODMsIDB4YjAsIDB4MTcsIDB4MWMsIDB4MGQsIDB4MWMsIDB4MDAsIDB4MjEsIDB4MDEsIDB4OTEsCi0weDQyLCAweDAwLCAweDEyLCAweDE4LCAweGQyLCAweDAwLCAweDAyLCAweDkyLCAweDMwLCAweDQ5LCAweDhhLCAweDU4LAotMHgxMiwgMHgwNiwgMHgxMiwgMHgwZSwgMHgwMCwgMHgyNCwgMHhlNCwgMHg0MywgMHgwNCwgMHgyOCwgMHgwMSwgMHhkYSwKLTB4NTAsIDB4MDksIDB4MDEsIDB4ZDIsIDB4MjAsIDB4MWMsIDB4NTEsIDB4ZTAsIDB4MDIsIDB4OWEsIDB4NTQsIDB4MTgsCi0weGUwLCAweDY4LCAweGMyLCAweDE5LCAweDYwLCAweDY5LCAweDgyLCAweDQyLCAweDAxLCAweGQ5LCAweDIyLCAweDY5LAotMHg4NywgMHgxYSwgMHgwMCwgMHgyZiwgMHg0NSwgMHhkOSwgMHgyNSwgMHg0ZSwgMHhhMCwgMHg2OCwgMHhlMSwgMHg2OCwKLTB4NDAsIDB4MTgsIDB4ZmYsIDB4MjEsIDB4MDksIDB4MzEsIDB4ZmYsIDB4ZjcsIDB4YTcsIDB4ZmQsIDB4NjEsIDB4NjgsCi0weDQwLCAweDE4LCAweDAwLCAweDkwLCAweGEwLCAweDY4LCAweGUxLCAweDY4LCAweDQwLCAweDE4LCAweGZmLCAweDIxLAotMHgwOSwgMHgzMSwgMHhmZiwgMHhmNywgMHhhNiwgMHhmZCwgMHgwMiwgMHg5YSwgMHhiMSwgMHg1OCwgMHgwMSwgMHgyMywKLTB4NWIsIDB4MDQsIDB4MTksIDB4NDMsIDB4YjEsIDB4NTAsIDB4YzEsIDB4MTksIDB4ZmYsIDB4MjIsIDB4MDksIDB4MzIsCi0weDkxLCAweDQyLCAweDEzLCAweGQ5LCAweDEzLCAweDFhLCAweDAxLCAweDFjLCAweDAwLCAweDk4LCAweDJhLCAweDFjLAotMHgxZSwgMHgxYywgMHgwMCwgMHhmMCwgMHhkZiwgMHhmOCwgMHhlMCwgMHg2OCwgMHg4MCwgMHgxOSwgMHg3NSwgMHgxOSwKLTB4ZTAsIDB4NjAsIDB4MjEsIDB4NjksIDB4ODgsIDB4NDIsIDB4MDAsIDB4ZDksIDB4MjAsIDB4NjEsIDB4YmYsIDB4MWIsCi0weDAxLCAweDk4LCAweDMwLCAweDE4LCAweDAxLCAweDkwLCAweDEyLCAweGUwLCAweDAxLCAweDFjLCAweDAwLCAweDllLAotMHgzMCwgMHgxYywgMHgyYSwgMHgxYywgMHgzYiwgMHgxYywgMHgwMCwgMHhmMCwgMHhjYiwgMHhmOCwgMHhlMCwgMHg2OCwKLTB4YzAsIDB4MTksIDB4ZWQsIDB4MTksIDB4ZTAsIDB4NjAsIDB4MjEsIDB4NjksIDB4ODgsIDB4NDIsIDB4MDAsIDB4ZDksCi0weDIwLCAweDYxLCAweDAxLCAweDk4LCAweGMwLCAweDE5LCAweDAxLCAweDkwLCAweDAwLCAweDI3LCAweDAwLCAweDJmLAotMHhiOSwgMHhkOCwgMHgwMSwgMHg5OCwgMHgwMywgMHhiMCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4NDAsIDB4YWIsIDB4MjAsIDB4NDAsIDB4YjAsIDB4YjUsIDB4YzMsIDB4YjAsCi0weDBjLCAweDFjLCAweDAwLCAweDI3LCAweGZhLCAweDQzLCAweDA0LCAweDI4LCAweDA2LCAweGRhLCAweDQxLCAweDAwLAotMHgwOSwgMHgxOCwgMHhjOSwgMHgwMCwgMHgxNCwgMHg0OCwgMHg0NSwgMHg1OCwgMHg2YiwgMHgwYywgMHgwNCwgMHhkMiwKLTB4MTAsIDB4MWMsIDB4NDMsIDB4YjAsIDB4YjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NjIsIDB4MDksCi0weDFiLCAweGQzLCAweDAwLCAweDIyLCAweDAwLCAweDkyLCAweDA4LCAweDE4LCAweDQwLCAweDY4LCAweDBjLCAweDIzLAotMHgwMCwgMHgyMSwgMHgwMSwgMHhhYSwgMHgwMCwgMHhmMCwgMHgzMCwgMHhmOCwgMHgxMSwgMHgyYywgMHgwZCwgMHhkMCwKLTB4MTIsIDB4MmMsIDB4MGQsIDB4ZDAsIDB4MTMsIDB4MmMsIDB4MDUsIDB4ZDAsIDB4MTQsIDB4MmMsIDB4MGEsIDB4ZDEsCi0weDAzLCAweDk4LCAweDAwLCAweDA0LCAweDA3LCAweDBlLCAweDA2LCAweGUwLCAweDAzLCAweDk4LCAweDA3LCAweDA2LAotMHgzZiwgMHgwZSwgMHgwMiwgMHhlMCwgMHgwMSwgMHg5ZiwgMHgwMCwgMHhlMCwgMHgwMiwgMHg5ZiwgMHgzOCwgMHgxYywKLTB4ZGIsIDB4ZTcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YWIsIDB4MjAsIDB4NDAsIDB4MDMsIDB4NDksIDB4MDAsIDB4MjAsCi0weDAwLCAweDIyLCAweDBhLCAweDU0LCAweDAxLCAweDMwLCAweDYwLCAweDI4LCAweGZiLCAweGQzLCAweDcwLCAweDQ3LAotMHg0MCwgMHhhYiwgMHgyMCwgMHg0MCwgMHgwMCwgMHhiNSwgMHgwMiwgMHhmMCwgMHg2ZiwgMHhmYSwgMHg1NywgMHgyMCwKLTB4MDIsIDB4ZjAsIDB4Y2MsIDB4ZjksIDB4MDIsIDB4ZjAsIDB4NDAsIDB4ZjksIDB4MDAsIDB4MGEsIDB4ZmIsIDB4ZDMsCi0weDAyLCAweGYwLCAweDRlLCAweGZhLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweGYwLCAweGI1LCAweDgyLCAweGIwLAotMHgwNywgMHg5ZCwgMHgxNCwgMHgxYywgMHgxZiwgMHgxYywgMHgzMCwgMHg0YSwgMHhkMiwgMHg2ZiwgMHgyMCwgMHgyMywKLTB4MTYsIDB4NjgsIDB4OWUsIDB4NDMsIDB4MTYsIDB4NjAsIDB4MzMsIDB4MWMsIDB4ZmYsIDB4MjIsIDB4MDEsIDB4MzIsCi0weDJhLCAweDQwLCAweDQwLCAweDAyLCAweDA4LCAweDQzLCAweDA1LCAweDBhLCAweDA2LCAweDFjLCAweDAwLCAweDBjLAotMHgwMSwgMHg5MCwgMHgwMCwgMHgyYSwgMHgyMCwgMHhkMCwgMHgwMiwgMHhmMCwgMHg0YiwgMHhmYSwgMHg1MywgMHgyMCwKLTB4MDIsIDB4ZjAsIDB4YTgsIDB4ZjksIDB4MDEsIDB4OTgsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTAsIDB4MDIsIDB4ZjAsCi0weGEzLCAweGY5LCAweDI4LCAweDFjLCAweDAyLCAweGYwLCAweGEwLCAweGY5LCAweDMwLCAweDFjLCAweDAyLCAweGYwLAotMHg5ZCwgMHhmOSwgMHgwMiwgMHhmMCwgMHgyMywgMHhmYSwgMHhmZiwgMHhmNywgMHhjNywgMHhmZiwgMHgwMiwgMHhmMCwKLTB4MzcsIDB4ZmEsIDB4NTQsIDB4MjAsIDB4MDIsIDB4ZjAsIDB4OTQsIDB4ZjksIDB4MDAsIDB4OTgsIDB4MDIsIDB4ZjAsCi0weDkxLCAweGY5LCAweDI4LCAweDFjLCAweDAyLCAweGYwLCAweDhlLCAweGY5LCAweDMwLCAweDFjLCAweDE0LCAweGUwLAotMHgwMiwgMHhmMCwgMHgyYSwgMHhmYSwgMHg1MiwgMHgyMCwgMHgwMiwgMHhmMCwgMHg4NywgMHhmOSwgMHgwMSwgMHg5OCwKLTB4MDIsIDB4ZjAsIDB4ODQsIDB4ZjksIDB4MjgsIDB4MWMsIDB4MDIsIDB4ZjAsIDB4ODEsIDB4ZjksIDB4MzAsIDB4MWMsCi0weDAyLCAweGYwLCAweDdlLCAweGY5LCAweDAwLCAweDIwLCAweDAyLCAweGYwLCAweDdiLCAweGY5LCAweDAwLCAweDIwLAotMHgwMiwgMHhmMCwgMHg3OCwgMHhmOSwgMHgwMCwgMHgyMCwgMHgwMiwgMHhmMCwgMHg3NSwgMHhmOSwgMHgwMCwgMHgyMCwKLTB4MDIsIDB4ZjAsIDB4NzIsIDB4ZjksIDB4MDAsIDB4MmYsIDB4MDUsIDB4ZDksIDB4MDIsIDB4ZjAsIDB4ZTQsIDB4ZjgsCi0weDIwLCAweDcwLCAweDAxLCAweDM0LCAweDAxLCAweDNmLCAweGY5LCAweGQxLCAweDAyLCAweGYwLCAweGYwLCAweGY5LAotMHgwNCwgMHg0YSwgMHhkMCwgMHg2ZiwgMHgyMCwgMHgyMywgMHgwMSwgMHg2OCwgMHgxOSwgMHg0MywgMHgwMSwgMHg2MCwKLTB4MDIsIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsCi0weGYwLCAweGI1LCAweDgyLCAweGIwLCAweDE0LCAweDFjLCAweDFmLCAweDFjLCAweDQyLCAweDAyLCAweDBhLCAweDQzLAotMHgxNSwgMHgxYywgMHgwMSwgMHgyOCwgMHg1NCwgMHhkMCwgMHgyYywgMHg0OSwgMHhjOCwgMHg2ZiwgMHgyMCwgMHgyMywKLTB4MDIsIDB4NjgsIDB4OWEsIDB4NDMsIDB4MDIsIDB4NjAsIDB4YzgsIDB4NmYsIDB4NDAsIDB4MjMsIDB4MDEsIDB4NjgsCi0weDE5LCAweDQzLCAweDAxLCAweDYwLCAweDAyLCAweGYwLCAweGU2LCAweGY5LCAweDUzLCAweDIwLCAweDAyLCAweGYwLAotMHg0MywgMHhmOSwgMHgyOCwgMHgwYywgMHgwNiwgMHgxYywgMHgwMiwgMHhmMCwgMHgzZiwgMHhmOSwgMHgyOCwgMHgwYSwKLTB4MDEsIDB4OTAsIDB4MDAsIDB4OTAsIDB4MDIsIDB4ZjAsIDB4M2EsIDB4ZjksIDB4MjgsIDB4MWMsIDB4MDIsIDB4ZjAsCi0weDM3LCAweGY5LCAweDAyLCAweGYwLCAweGJkLCAweGY5LCAweGZmLCAweGY3LCAweDYxLCAweGZmLCAweDAyLCAweGYwLAotMHhkMSwgMHhmOSwgMHg4NCwgMHgyMCwgMHgwMiwgMHhmMCwgMHgyZSwgMHhmOSwgMHgzMCwgMHgxYywgMHgwMiwgMHhmMCwKLTB4MmIsIDB4ZjksIDB4MDAsIDB4OTgsIDB4MDIsIDB4ZjAsIDB4MjgsIDB4ZjksIDB4MjgsIDB4MWMsIDB4MDIsIDB4ZjAsCi0weDI1LCAweGY5LCAweDAwLCAweDJmLCAweDA1LCAweGQ5LCAweDIwLCAweDc4LCAweDAxLCAweDM0LCAweDAyLCAweGYwLAotMHgxZiwgMHhmOSwgMHgwMSwgMHgzZiwgMHhmOSwgMHhkMSwgMHgwMiwgMHhmMCwgMHhhMywgMHhmOSwgMHgwMiwgMHhmMCwKLTB4YjksIDB4ZjksIDB4ODMsIDB4MjAsIDB4MDIsIDB4ZjAsIDB4MTYsIDB4ZjksIDB4MzAsIDB4MWMsIDB4MDIsIDB4ZjAsCi0weDEzLCAweGY5LCAweDAxLCAweDk4LCAweDAyLCAweGYwLCAweDEwLCAweGY5LAotMHgyOCwgMHgxYywgMHgwMiwgMHhmMCwgMHgwZCwgMHhmOSwgMHgwMiwgMHhmMCwgMHg5MywgMHhmOSwgMHhmZiwgMHhmNywKLTB4MzcsIDB4ZmYsIDB4MDcsIDB4NDksIDB4YzgsIDB4NmYsIDB4NDAsIDB4MjMsIDB4MDIsIDB4NjgsIDB4OWEsIDB4NDMsCi0weDAyLCAweDYwLCAweGM4LCAweDZmLCAweDIwLCAweDIzLCAweDAxLCAweDY4LCAweDE5LCAweDQzLCAweDAxLCAweDYwLAotMHgwMiwgMHhiMCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwKLTB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YjUsIDB4MDEsIDB4ZjAsIDB4OGYsIDB4ZjgsIDB4MDYsIDB4NGYsCi0weGMwLCAweDQ2LCAweGY4LCAweDYwLCAweDAxLCAweGYwLCAweGYyLCAweGY4LCAweDc4LCAweDgwLCAweDAxLCAweGYwLAotMHhiMSwgMHhmOCwgMHgzOCwgMHg3MSwgMHg4MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwKLTB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4MDAsIDB4YjUsIDB4MDEsIDB4ZjAsIDB4MDUsIDB4ZjksIDB4MDIsIDB4NDksCi0weGMwLCAweDQ2LCAweDA4LCAweDgwLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDY4LCAweDBlLCAweDAwLCAweDgwLAotMHgwYiwgMHg0OCwgMHhjMSwgMHg2OCwgMHgwMSwgMHgyOSwgMHgxMSwgMHhkMSwgMHhjMSwgMHg2ZiwgMHgwMiwgMHgyMywKLTB4MGEsIDB4NjgsIDB4MWEsIDB4NDMsIDB4MGEsIDB4NjAsIDB4YzEsIDB4NmYsIDB4ODAsIDB4MjMsIDB4MGEsIDB4NjgsCi0weDFhLCAweDQzLCAweDBhLCAweDYwLCAweGMxLCAweDE4LCAweDA4LCAweDY4LCAweDgyLCAweDIzLCAweDAyLCAweDY4LAotMHgxYSwgMHg0MywgMHgwMiwgMHg2MCwgMHgwMCwgMHgyMCwgMHgwOCwgMHg4MSwgMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwKLTB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4ZjAsIDB4YjQsIDB4NGEsIDB4NDksIDB4Y2EsIDB4MWQsIDB4OWQsIDB4MzIsCi0weDAwLCAweDIwLCAweDAwLCAweDI3LCAweDgzLCAweDAwLCAweGQ3LCAweDUwLCAweDAxLCAweDMwLCAweDE3LCAweDI4LAotMHhmYSwgMHhkMywgMHg0NiwgMHg0YywgMHgwMCwgMHgyMCwgMHg4MiwgMHgwMCwgMHhhNywgMHg1MCwgMHgwMSwgMHgzMCwKLTB4MjAsIDB4MjgsIDB4ZmEsIDB4ZDMsIDB4NDMsIDB4NGEsIDB4MDAsIDB4MjAsIDB4ODMsIDB4MDAsIDB4ZDcsIDB4NTAsCi0weDAxLCAweDMwLCAweDIwLCAweDI4LCAweGZhLCAweGQzLCAweGE3LCAweDYxLCAweDk3LCAweDYxLCAweDRmLCAweDY1LAotMHg4ZiwgMHg2NSwgMHgzZiwgMHg0ZCwgMHhjMCwgMHg0NiwgMHgyZiwgMHg2MCwgMHg2ZiwgMHg2MCwgMHhhZiwgMHg2MCwKLTB4YWYsIDB4NjEsIDB4ZWYsIDB4NjAsIDB4MmYsIDB4NjEsIDB4NmYsIDB4NjEsIDB4MDAsIDB4MjAsIDB4YzEsIDB4MDAsCi0weDA5LCAweDE4LCAweDQ5LCAweDAxLCAweDM1LCAweDRiLCAweGM5LCAweDE4LCAweDg2LCAweDAwLCAweGNiLCAweDFkLAotMHhmOSwgMHgzMywgMHgzNCwgMHg0YywgMHgzNCwgMHgxOSwgMHhlMywgMHg2MywgMHgxMSwgMHgyMywgMHg1YiwgMHgwMSwKLTB4Y2IsIDB4MTgsIDB4NjMsIDB4NjMsIDB4MGQsIDB4MjMsIDB4OWIsIDB4MDEsIDB4Y2IsIDB4MTgsIDB4YjQsIDB4MTgsCi0weGUzLCAweDYzLCAweDIzLCAweDIzLCAweDViLCAweDAxLCAweGM5LCAweDE4LCAweDYxLCAweDYzLCAweDAxLCAweDMwLAotMHgwMiwgMHgyOCwgMHhlNCwgMHhkYiwgMHgyOSwgMHg0OCwgMHhjMSwgMHgxZCwgMHhmOSwgMHgzMSwgMHgyOSwgMHg0YywKLTB4YzAsIDB4NDYsIDB4YTEsIDB4NjIsIDB4NjEsIDB4NmIsIDB4MGQsIDB4MjMsIDB4OWIsIDB4MDEsIDB4ZTEsIDB4NjIsCi0weGMxLCAweDE4LCAweDkxLCAweDYyLCAweDUxLCAweDZiLCAweGMwLCAweDQ2LCAweGQxLCAweDYyLCAweDA4LCAweDIxLAotMHhlMSwgMHg2NCwgMHgyNSwgMHg0OSwgMHhjMCwgMHg0NiwgMHgyMSwgMHg2NSwgMHgyNCwgMHg0OSwgMHgwYiwgMHg2OSwKLTB4YzAsIDB4NDYsIDB4NjMsIDB4NjUsIDB4YzMsIDB4MWQsIDB4NGQsIDB4MzMsIDB4ZTMsIDB4NjUsIDB4MjUsIDB4NjYsCi0weDhiLCAweDY4LCAweGMwLCAweDQ2LCAweDYzLCAweDY2LCAweGNiLCAweDY4LCAweGMwLCAweDQ2LCAweGEzLCAweDY2LAotMHgxZSwgMHg0YiwgMHhjMCwgMHg0NiwgMHhlMywgMHg2NiwgMHgyNywgMHg2NywgMHgwYiwgMHgyMywgMHhkYiwgMHgwMSwKLTB4YzMsIDB4MTgsIDB4YTMsIDB4NjcsIDB4NjcsIDB4NjcsIDB4MDEsIDB4MjYsIDB4ZTMsIDB4MWQsIDB4NjksIDB4MzMsCi0weDY2LCAweDYxLCAweGU3LCAweDYxLCAweDFmLCAweDczLCAweDAyLCAweDIzLCAweGQzLCAweDY0LCAweDE3LCAweDRiLAotMHhjMCwgMHg0NiwgMHgxMywgMHg2NSwgMHhjYiwgMHg2OSwgMHhjMCwgMHg0NiwgMHg1MywgMHg2NSwgMHhjMywgMHgxZCwKLTB4NTEsIDB4MzMsIDB4ZDMsIDB4NjUsIDB4MmIsIDB4MWQsIDB4MTMsIDB4NjYsIDB4NGIsIDB4NjksIDB4YzAsIDB4NDYsCi0weDUzLCAweDY2LCAweDg5LCAweDY5LCAweGMwLCAweDQ2LCAweDkxLCAweDY2LCAweDBmLCAweDQ5LCAweGMwLCAweDQ2LAotMHhkMSwgMHg2NiwgMHgxNiwgMHg2NywgMHgwZiwgMHgyMywgMHhkYiwgMHgwMSwgMHhjMCwgMHgxOCwgMHg5MCwgMHg2NywKLTB4NTYsIDB4NjcsIDB4ZDcsIDB4NjEsIDB4ZDAsIDB4MWQsIDB4NjksIDB4MzAsIDB4NTYsIDB4NjEsIDB4MDcsIDB4NzMsCi0weGYwLCAweGJjLCAweDcwLCAweDQ3LCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweGU0LCAweDJjLCAweDAwLCAweDgwLAotMHg2NCwgMHgyZCwgMHgwMCwgMHg4MCwgMHg5MCwgMHhlZSwgMHgyMCwgMHg0MCwgMHgzMCwgMHgwMSwgMHgxOCwgMHgwMCwKLTB4N2MsIDB4MjksIDB4MDAsIDB4ODAsIDB4MDAsIDB4NTUsIDB4ZmYsIDB4ZmYsIDB4MzgsIDB4MDEsIDB4MTgsIDB4MDAsCi0weDEwLCAweDU1LCAweGZmLCAweGZmLCAweDkwLCAweGI0LCAweDAwLCAweDIxLCAweDFlLCAweDRhLCAweGJiLCAweDIzLAotMHgxYiwgMHgwMSwgMHhkNywgMHgxOCwgMHhmOSwgMHg3MywgMHgxOSwgMHgyMywKLTB4ZGIsIDB4MDEsIDB4ZDAsIDB4MTgsIDB4MDEsIDB4MjQsIDB4Y2QsIDB4MjMsIDB4MWIsIDB4MDEsIDB4ZDMsIDB4MTgsCi0weGMxLCAweDYxLCAweDFjLCAweDcwLCAweDMzLCAweDIzLCAweDliLCAweDAxLCAweGQzLCAweDE4LCAweDk5LCAweDYwLAotMHhiOSwgMHg3MywgMHg1OSwgMHg2MSwgMHgyZiwgMHgyMywgMHg5YiwgMHgwMSwgMHhkMywgMHgxOCwgMHgxOSwgMHg2MCwKLTB4MTMsIDB4NGIsIDB4NTEsIDB4MjcsIDB4YmYsIDB4MDMsIDB4MDMsIDB4NjMsIDB4M2IsIDB4NjAsIDB4ODQsIDB4NjksCi0weGU0LCAweDE4LCAweDQ0LCAweDYzLCAweDA0LCAweDNjLCAweDdjLCAweDYwLCAweDAxLCAweDI0LCAweGU0LCAweDAyLAotMHg4NCwgMHg2MywgMHgwZSwgMHg0YywgMHhjMCwgMHg0NiwgMHhiYywgMHg2MCwgMHgwNCwgMHg2YiwgMHhjMCwgMHg0NiwKLTB4NDQsIDB4NjIsIDB4ODQsIDB4NjksIDB4ZTQsIDB4MTgsIDB4MGIsIDB4NGIsIDB4ZTMsIDB4MTgsIDB4ZmIsIDB4NjAsCi0weDAzLCAweDZiLCAweGMwLCAweDQ2LCAweDgzLCAweDYyLCAweDQzLCAweDZhLCAweGMwLCAweDQ2LCAweDAzLCAweDYyLAotMHhjMSwgMHg2MywgMHg1MSwgMHg2NCwgMHg5MSwgMHg2NCwgMHhkMSwgMHg2NSwgMHhkMSwgMHg2NiwgMHg5MCwgMHhiYywKLTB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4NDAsCi0weGZjLCAweDA3LCAweDAwLCAweDAwLCAweGZjLCAweGY3LCAweGZmLCAweGZmLCAweDkwLCAweGI0LCAweDAwLCAweDIyLAotMHgxYiwgMHg0OSwgMHhjOSwgMHgyMywgMHgxYiwgMHgwMSwgMHhjOCwgMHgxOCwgMHgwMiwgMHg3MSwgMHgwMSwgMHgyMCwKLTB4YmIsIDB4MjMsIDB4MWIsIDB4MDEsIDB4Y2IsIDB4MTgsIDB4NTgsIDB4NzMsIDB4MTcsIDB4NDgsIDB4MDMsIDB4MWMsCi0weDAwLCAweDI3LCAweGRjLCAweDFkLCAweGMxLCAweDM0LCAweDFjLCAweDY1LCAweDIzLCAweDFjLCAweDAxLCAweDM3LAotMHgzZiwgMHgyZiwgMHhmOCwgMHhkMywgMHgxYSwgMHg2NSwgMHgxOSwgMHgyMywgMHhkYiwgMHgwMSwgMHhjZiwgMHgxOCwKLTB4MzMsIDB4MjMsIDB4OWIsIDB4MDEsIDB4Y2IsIDB4MTgsIDB4M2EsIDB4NjEsIDB4OTgsIDB4NjEsIDB4NDAsIDB4MjAsCi0weGY4LCAweDYwLCAweGRhLCAweDYxLCAweDFhLCAweDYyLCAweGNhLCAweDY0LCAweDBhLCAweDY2LCAweDBjLCAweDQ4LAotMHhjMCwgMHg0NiwgMHhjMiwgMHg2MCwgMHgwYiwgMHg0OCwgMHgwMCwgMHg2YiwgMHhjMCwgMHgwNiwgMHhjMCwgMHgwZSwKLTB4ZjgsIDB4NjMsIDB4MGEsIDB4NDgsIDB4MDEsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MTksIDB4ODAsIDB4NDEsIDB4NjgsCi0weGMwLCAweDQ2LCAweDU5LCAweDgwLCAweDgwLCAweDY4LCAweGMwLCAweDQ2LCAweDk4LCAweDgwLCAweDkwLCAweGJjLAotMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHg5MCwgMHhiYywgMHgyMCwgMHg0MCwKLTB4OTAsIDB4ZWUsIDB4MjAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MTQsIDB4NDAsIDB4NDAsIDB4MDAsIDB4MTQsIDB4NDAsCi0weDAwLCAweDIwLCAweDBhLCAweDQ5LCAweGMwLCAweDQ2LCAweDA4LCAweDczLCAweGNiLCAweDFkLCAweGZmLCAweDMzLAotMHgzYSwgMHgzMywgMHg4OCwgMHg2MSwgMHhjOCwgMHg2MSwgMHgxOCwgMHg3MCwgMHgwNiwgMHg0YSwgMHhjMCwgMHg0NiwKLTB4MTAsIDB4NjUsIDB4NTAsIDB4NjYsIDB4OTAsIDB4NjYsIDB4MDgsIDB4NzAsIDB4NTgsIDB4NzAsIDB4YmIsIDB4MjMsCi0weDFiLCAweDAxLCAweGQxLCAweDE4LCAweDA4LCAweDczLCAweDcwLCAweDQ3LCAweDI4LCAweDA1LCAweDAwLCAweDgwLAotMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHhmMCwgMHhiNCwgMHgyZiwgMHg0OSwgMHgyZiwgMHg0YSwgMHhjMCwgMHg0NiwKLTB4MTEsIDB4NjEsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDIsIDB4YzgsIDB4MTgsIDB4NTAsIDB4NjEsIDB4MmQsIDB4NDgsCi0weGMwLCAweDQ2LCAweDEwLCAweDYyLCAweGRiLCAweDAwLCAweGMzLCAweDE4LCAweDUzLCAweDYyLCAweDAwLCAweDIzLAotMHgxMywgMHg2MywgMHg1MywgMHg2MywgMHgyOSwgMHg0YSwgMHgyYSwgMHg0ZiwgMHhkNCwgMHgxZCwgMHhmZiwgMHgzNCwKLTB4ZmEsIDB4MzQsIDB4MTQsIDB4YzcsIDB4MDgsIDB4M2YsIDB4M2IsIDB4NjEsIDB4MWMsIDB4MWYsIDB4N2MsIDB4NjEsCi0weDI2LCAweDRmLCAweGMwLCAweDQ2LCAweDM5LCAweDYwLCAweGI4LCAweDYxLCAweDc5LCAweDYxLCAweGY4LCAweDYyLAotMHgzYiwgMHg2MywgMHg3YiwgMHg2NCwgMHhiYSwgMHg2NCwgMHhmYSwgMHg2NSwgMHgyMiwgMHg0ZiwgMHhmZSwgMHgxZCwKLTB4ZjksIDB4MzYsIDB4MjIsIDB4NGQsIDB4ZWMsIDB4MWQsIDB4NzksIDB4MzQsIDB4MjYsIDB4NjIsIDB4NTEsIDB4MjYsCi0weGI2LCAweDAzLCAweDM3LCAweDYxLCAweDI0LCAweDZhLCAweGMwLCAweDQ2LCAweDc0LCAweDYxLCAweDJmLCAweDY3LAotMHgxZCwgMHg0ZCwgMHgwOSwgMHgyNywgMHg3ZiwgMHgwNCwgMHhlYywgMHgxZCwgMHg3NSwgMHgzNCwgMHg3YywgMHg2MCwKLTB4M2QsIDB4NjAsIDB4MWIsIDB4NGMsIDB4YzAsIDB4NDYsIDB4M2MsIDB4NjEsIDB4ZTYsIDB4MWQsIDB4NzUsIDB4MzYsCi0weDdlLCAweDYxLCAweDE5LCAweDRmLCAweGMwLCAweDQ2LCAweDdjLCAweDYwLCAweDNkLCAweDYwLCAweDBmLCAweDFjLAotMHgwMCwgMHgyMSwgMHhmZiwgMHgyNCwgMHgwMSwgMHgzNCwgMHgxZCwgMHgxYywgMHg4YiwgMHgwMCwgMHhmZCwgMHg1MCwKLTB4MDEsIDB4MzEsIDB4YTEsIDB4NDIsIDB4ZmEsIDB4ZDMsIDB4MDEsIDB4MWMsIDB4MDAsIDB4MjAsIDB4MDEsIDB4MjcsCi0weGZmLCAweDAyLCAweDgzLCAweDAwLCAweGNkLCAweDUwLCAweDAxLCAweDMwLCAweGI4LCAweDQyLCAweGZhLCAweGQzLAotMHgwMCwgMHgyMCwgMHg4MSwgMHgwMCwgMHg1NSwgMHg1MCwgMHgwMSwgMHgzMCwgMHg4MCwgMHgyOCwgMHhmYSwgMHhkMywKLTB4ZjAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4MjQsIDB4YTMsIDB4MjAsIDB4NDAsCi0weDQwLCAweDAxLCAweDE4LCAweDAwLCAweDI0LCAweDgzLCAweDIwLCAweDQwLCAweDI0LCAweGE5LCAweDIwLCAweDQwLAotMHg4MCwgMHgwMSwgMHgxOCwgMHgwMCwgMHhhOCwgMHgwMywgMHgwMCwgMHg4MCwgMHgyNCwgMHhhNywgMHgyMCwgMHg0MCwKLTB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4MjQsIDB4YTgsIDB4MjAsIDB4NDAsIDB4YTQsIDB4YTgsIDB4MjAsIDB4NDAsCi0weDA4LCAweDA0LCAweDAwLCAweDgwLCAweGI4LCAweGI1LCAweDJjLCAweDQ4LCAweGZkLCAweGY3LCAweGJhLCAweGZkLAotMHgwMSwgMHgyMCwgMHgyYiwgMHg0OSwgMHgwYSwgMHg2OCwgMHg1MiwgMHgwYywgMHgwNiwgMHhkMiwgMHgwYSwgMHg2OCwKLTB4MTIsIDB4MGMsIDB4MDIsIDB4ZDEsIDB4MGEsIDB4NjgsIDB4OTIsIDB4MGEsIDB4MDAsIDB4ZDIsIDB4MDAsIDB4MjAsCi0weDA0LCAweDA2LCAweDI0LCAweDBlLCAweDI1LCAweDRhLCAweGQ3LCAweDFkLCAweDBkLCAweDM3LCAweDAwLCAweDIzLAotMHgwMCwgMHgyMCwgMHg5ZCwgMHgwMCwgMHg3OCwgMHg1MSwgMHgwMSwgMHgzMywgMHgwNCwgMHgyYiwgMHhmYSwgMHhkMywKLTB4MDEsIDB4MjcsIDB4M2YsIDB4MDUsIDB4NTAsIDB4NjEsIDB4ZjgsIDB4NjAsIDB4ZDAsIDB4NjEsIDB4ZjgsIDB4NjEsCi0weDAwLCAweDIzLCAweGRiLCAweDQzLCAweDkzLCAweDYxLCAweDNiLCAweDYxLCAweDEzLCAweDYyLCAweDNiLCAweDYyLAotMHgwMCwgMHgyNywgMHgxYiwgMHg0YiwgMHg4ZCwgMHg2OCwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5NSwgMHg4ZCwgMHg2OSwKLTB4YzAsIDB4NDYsIDB4MDAsIDB4OTUsIDB4MDAsIDB4MmMsIDB4MGIsIDB4ZDAsIDB4ZGQsIDB4NmIsIDB4YzAsIDB4NDYsCi0weDAwLCAweDk1LCAweDlkLCAweDZiLCAweGMwLCAweDQ2LCAweDAwLCAweDk1LCAweDVkLCAweDZiLCAweGMwLCAweDQ2LAotMHgwMCwgMHg5NSwgMHgxZCwgMHg2YiwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5NSwgMHgwMSwgMHgzNywgMHg0MCwgMHgyZiwKLTB4ZTgsIDB4ZDMsIDB4MDAsIDB4MjcsIDB4NmMsIDB4NDYsIDB4MDEsIDB4MjMsIDB4NWIsIDB4MDcsIDB4MWMsIDB4NDMsCi0weDAxLCAweGUwLCAweDIwLCAweDYwLCAweDAxLCAweDM3LCAweDBkLCAweDY4LCAweDJiLCAweDA5LCAweDAyLCAweGQyLAotMHg4MCwgMHgyZiwgMHhmOCwgMHhkMywgMHgwMSwgMHhlMCwgMHg4MCwgMHgyZiwgMHgwMywgMHhkMywgMHgwOCwgMHg0OSwKLTB4NGIsIDB4NmUsIDB4MDEsIDB4MzMsIDB4NGIsIDB4NjYsIDB4ZDAsIDB4NjIsIDB4YjgsIDB4YmMsIDB4MDgsIDB4YmMsCi0weDE4LCAweDQ3LCAweDAwLCAweDAwLCAweGY0LCAweDAxLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDEwLCAweDQwLAotMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgxOCwgMHg0MCwgMHhhMCwgMHg4MiwgMHgyMCwgMHg0MCwKLTB4OTAsIDB4YjQsIDB4MDAsIDB4MjEsIDB4MGUsIDB4NGYsIDB4MGYsIDB4NGEsIDB4MDAsIDB4MjAsIDB4NGMsIDB4MDEsCi0weDY0LCAweDFhLCAweGE0LCAweDAwLCAweGEzLCAweDE4LCAweDU4LCAweDYwLCAweDk4LCAweDYwLCAweDE4LCAweDY0LAotMHg1OCwgMHg2NCwgMHgxMCwgMHg1MywgMHg1OCwgMHg4MCwgMHhjYywgMHgwMCwgMHhlNCwgMHgxOSwgMHg5OCwgMHg2NywKLTB4ZGMsIDB4NjIsIDB4MDEsIDB4MzEsIDB4MDMsIDB4MjksIDB4ZWUsIDB4ZDMsIDB4MDYsIDB4NDksIDB4YzAsIDB4NDYsCi0weDA4LCAweDYwLCAweDQ4LCAweDYwLCAweDg4LCAweDYwLCAweGM4LCAweDYwLCAweDA4LCAweDYxLCAweDkwLCAweGJjLAotMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHhhYywgMHg2NiwgMHgyMSwgMHg0MCwgMHg1YywgMHgyYiwgMHgwMCwgMHg4MCwKLTB4ZDAsIDB4MmMsIDB4MDAsIDB4ODAsIDB4NjQsIDB4MjEsIDB4MDUsIDB4NDgsIDB4YzAsIDB4NDYsIDB4MDEsIDB4NjMsCi0weDAwLCAweDIxLCAweGM5LCAweDQzLCAweDQxLCAweDYzLCAweDgxLCAweDYzLCAweDAwLCAweDIxLCAweGMxLCAweDYzLAotMHgwMSwgMHg2NCwgMHg3MCwgMHg0NywgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHg4MCwgMHhiNCwgMHgwMSwgMHgyMCwKLTB4NDAsIDB4MDIsIDB4MGEsIDB4NDksIDB4YzAsIDB4NDYsIDB4MDgsIDB4NjAsIDB4M2MsIDB4MjAsIDB4NDgsIDB4NjAsCi0weDg4LCAweDYwLCAweDA4LCAweDQ4LCAweGMwLCAweDQ2LCAweGM4LCAweDYwLCAweDAwLCAweDIwLCAweDA3LCAweDRhLAotMHg4NywgMHgwMCwgMHhjYiwgMHg2OCwgMHhjMCwgMHg0NiwgMHhkYSwgMHg1MSwgMHgwMSwgMHgzMCwgMHgxMCwgMHgyOCwKLTB4ZjgsIDB4ZDMsIDB4ODAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MmQsIDB4MDAsIDB4ODAsCi0weGY0LCAweDJkLCAweDAwLCAweDgwLCAweDVkLCAweDRjLCAweGZmLCAweGZmLCAweDEyLCAweDQ5LCAweDEzLCAweDQ4LAotMHg2NywgMHgyMywgMHg5YiwgMHgwMSwgMHhjYSwgMHgxOCwgMHgwNiwgMHhjMCwgMHgwOCwgMHgzOCwgMHgxMSwgMHg0YiwKLTB4Y2EsIDB4MTgsIDB4YzEsIDB4NjAsIDB4ODIsIDB4NjAsIDB4MDEsIDB4NjEsIDB4MGYsIDB4NDksIDB4MTAsIDB4NDgsCi0weGE3LCAweDIzLCAweDliLCAweDAxLCAweGNhLCAweDE4LCAweDA2LCAweGMwLCAweDA4LCAweDM4LCAweDBlLCAweDRiLAotMHhjYSwgMHgxOCwgMHhjMSwgMHg2MCwgMHg4MiwgMHg2MCwgMHgwMSwgMHg2MSwgMHgwYywgMHg0OCwgMHgwZCwgMHg0OSwKLTB4NjcsIDB4MjMsIDB4OWIsIDB4MDEsIDB4YzIsIDB4MTgsIDB4MDUsIDB4YzEsIDB4MDgsIDB4MzksIDB4MDUsIDB4NGIsCi0weGMyLCAweDE4LCAweGM4LCAweDYwLCAweDhhLCAweDYwLCAweDA4LCAweDYxLCAweDcwLCAweDQ3LCAweDAwLCAweDAwLAotMHhhYywgMHgxZSwgMHgyMSwgMHg0MCwgMHg0OCwgMHgyZSwgMHgwMCwgMHg4MCwgMHhmYywgMHgxZiwgMHgwMCwgMHgwMCwKLTB4YWMsIDB4ZWUsIDB4MjAsIDB4NDAsIDB4MzQsIDB4MmUsIDB4MDAsIDB4ODAsIDB4ZmMsIDB4MmYsIDB4MDAsIDB4MDAsCi0weGFjLCAweDNlLCAweDIxLCAweDQwLCAweDVjLCAweDJlLCAweDAwLCAweDgwLAotMHg5MCwgMHhiNCwgMHgwMCwgMHgyMSwgMHg0MCwgMHg0YywgMHgwMCwgMHgyMCwgMHgwYSwgMHgwMSwgMHgxMiwgMHgxOSwKLTB4MTksIDB4MjMsIDB4ZGIsIDB4MDEsIDB4ZDIsIDB4MTgsIDB4ZDAsIDB4NjIsIDB4MTAsIDB4NjMsIDB4NTAsIDB4NjMsCi0weDkwLCAweDYzLCAweDAxLCAweDMxLCAweDAzLCAweDI5LCAweGYzLCAweGQzLCAweDNhLCAweDQ5LCAweGMwLCAweDQ2LAotMHgwOCwgMHg2MywgMHg0OCwgMHg2MywgMHg4OCwgMHg2MywgMHgyMCwgMHg2MCwgMHgwMSwgMHgyMSwgMHhlMywgMHgxZCwKLTB4NTksIDB4MzMsIDB4NjAsIDB4NjAsIDB4MTksIDB4NzEsIDB4MTgsIDB4NzIsIDB4OTgsIDB4NzEsIDB4OTgsIDB4NzIsCi0weDU5LCAweDcxLCAweDU4LCAweDcyLCAweGQ4LCAweDcxLCAweGQ4LCAweDcyLCAweGUyLCAweDFkLCAweDQ5LCAweDMyLAotMHgxMSwgMHg3MywgMHgxOSwgMHg3MCwgMHg5MCwgMHg3MywgMHg5OCwgMHg3MCwgMHg1MSwgMHg3MywgMHg1OSwgMHg3MCwKLTB4ZDAsIDB4NzMsIDB4ZDgsIDB4NzAsIDB4MTEsIDB4NzEsIDB4MTEsIDB4NzIsIDB4OTAsIDB4NzEsIDB4OTAsIDB4NzIsCi0weDUwLCAweDcxLCAweDUwLCAweDcyLCAweGQwLCAweDcxLCAweGQwLCAweDcyLCAweDE4LCAweDczLCAweDAyLCAweDIyLAotMHhlNywgMHgxZCwgMHg2OSwgMHgzNywgMHgzYSwgMHg3MCwgMHg5OSwgMHg3MywgMHhiYSwgMHg3MCwgMHg1OCwgMHg3MywKLTB4NzgsIDB4NzAsIDB4ZDgsIDB4NzMsIDB4ZjgsIDB4NzAsIDB4MzksIDB4NzEsIDB4M2EsIDB4NzIsIDB4YjksIDB4NzEsCi0weGI5LCAweDcyLCAweDc4LCAweDcxLCAweDdhLCAweDcyLCAweGY5LCAweDcxLCAweGY5LCAweDcyLCAweDM5LCAweDczLAotMHhlMywgMHgxZCwgMHg3OSwgMHgzMywgMHgxYSwgMHg3MCwgMHhiOSwgMHg3MywgMHg5OSwgMHg3MCwgMHg3OCwgMHg3MywKLTB4NWEsIDB4NzAsIDB4ZjksIDB4NzMsIDB4ZDksIDB4NzAsIDB4MWEsIDB4NzEsIDB4MWEsIDB4NzIsIDB4OTksIDB4NzEsCi0weDlhLCAweDcyLCAweDU4LCAweDcxLCAweDVhLCAweDcyLCAweGQ5LCAweDcxLCAweGRhLCAweDcyLCAweDE5LCAweDczLAotMHhlNywgMHgxZCwgMHg4OSwgMHgzNywgMHgzYSwgMHg3MCwgMHg5OSwgMHg3MywgMHhiOSwgMHg3MCwgMHg1OCwgMHg3MywKLTB4N2EsIDB4NzAsIDB4ZDksIDB4NzMsIDB4ZjksIDB4NzAsIDB4MzksIDB4NzEsIDB4M2EsIDB4NzIsIDB4YjksIDB4NzEsCi0weGI5LCAweDcyLCAweDc4LCAweDcxLCAweDdhLCAweDcyLCAweGY5LCAweDcxLCAweGY5LCAweDcyLCAweDNhLCAweDczLAotMHhlMywgMHgxZCwgMHg5OSwgMHgzMywgMHgxYSwgMHg3MCwgMHhiOSwgMHg3MywgMHg5YSwgMHg3MCwgMHg3OCwgMHg3MywKLTB4NWEsIDB4NzAsIDB4ZjksIDB4NzMsIDB4ZGEsIDB4NzAsIDB4MTksIDB4NzEsIDB4MWEsIDB4NzIsIDB4OTksIDB4NzEsCi0weDk5LCAweDcyLCAweDU4LCAweDcxLCAweDVhLCAweDcyLCAweGQ5LCAweDcxLCAweGQ5LCAweDcyLCAweDIwLCAweDYxLAotMHhlMCwgMHg2MCwgMHg2MCwgMHg2MSwgMHhhMCwgMHg2MCwgMHg5MCwgMHhiYywgMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwKLTB4YTAsIDB4MWMsIDB4MDAsIDB4ODAsIDB4ZTgsIDB4MTksIDB4MDAsIDB4ODAsIDB4ODEsIDB4MjAsIDB4MDAsIDB4MDIsCi0weDAxLCAweDQ5LCAweGMwLCAweDQ2LCAweDg4LCAweDYyLCAweDcwLCAweDQ3LCAweGMwLCAweDAwLCAweDE0LCAweDAwLAotMHgwOSwgMHg0OSwgMHgwYSwgMHg0YiwgMHhjOCwgMHgxOCwgMHgwNCwgMHgzYiwgMHhjOSwgMHgxOCwgMHgwOCwgMHg2MCwKLTB4MDAsIDB4MjEsIDB4YzIsIDB4MWQsIDB4MjksIDB4MzIsIDB4YzIsIDB4NjEsIDB4MTAsIDB4MWMsIDB4MDEsIDB4MzEsCi0weDA4LCAweDI5LCAweGY4LCAweGQzLCAweGMxLCAweDFmLCAweDI5LCAweDM5LCAweDAwLCAweDIwLCAweGM4LCAweDYxLAotMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHg4NCwgMHgwOSwgMHgwMCwgMHgwMCwKLTB4MDYsIDB4NDgsIDB4MDcsIDB4NDksIDB4YzAsIDB4NDYsIDB4MDgsIDB4ODAsIDB4NDgsIDB4ODAsIDB4MDAsIDB4MjAsCi0weDg4LCAweDgwLCAweGM4LCAweDgwLCAweDg4LCAweDYwLCAweDA0LCAweDQ5LCAweGMwLCAweDQ2LCAweDQ4LCAweDYxLAotMHg4OCwgMHg2MSwgMHg3MCwgMHg0NywgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHg0YywgMHgyYSwgMHgwMCwgMHg4MCwKLTB4NmMsIDB4MDYsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MjEsIDB4MDYsIDB4NDgsIDB4YzIsIDB4MWQsIDB4MTksIDB4MzIsCi0weGMxLCAweDYwLCAweDAxLCAweDYxLCAweGMxLCAweDYxLCAweDAxLCAweDYyLCAweDExLCAweDcxLCAweGZmLCAweDMwLAotMHgwMSwgMHgzMCwgMHg0MSwgMHg2MiwgMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHg2YywgMHgwNiwgMHgwMCwgMHg4MCwKLTB4MDksIDB4NDgsIDB4MGEsIDB4NGIsIDB4YzAsIDB4NDYsIDB4MTgsIDB4NjAsIDB4MDAsIDB4MjEsIDB4YzIsIDB4MWQsCi0weDRkLCAweDMyLCAweGMyLCAweDYwLCAweDEwLCAweDFjLCAweDAxLCAweDMxLCAweDE0LCAweDI5LCAweGY4LCAweGQzLAotMHhjMSwgMHgxZiwgMHg0ZCwgMHgzOSwgMHgwMCwgMHgyMCwgMHhjOCwgMHg2MCwgMHg1OCwgMHg2MCwgMHg5OCwgMHg2MCwKLTB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDcsIDB4MDAsIDB4ODAsIDB4NmMsIDB4MDYsIDB4MDAsIDB4ODAsCi0weDAwLCAweGI1LCAweDBiLCAweDQ5LCAweDBiLCAweDQ4LCAweGZkLCAweGY3LCAweGVhLCAweGZiLCAweDBiLCAweDQ4LAotMHgwMCwgMHg2YSwgMHgwMSwgMHgyMywgMHhkYiwgMHgwMywgMHg5OCwgMHg0MywgMHgwOSwgMHg0OSwgMHhjMCwgMHg0NiwKLTB4MDgsIDB4NjIsIDB4MDksIDB4NDgsIDB4YzEsIDB4NjgsIDB4MDEsIDB4MjksIDB4MDQsIDB4ZDEsIDB4YzAsIDB4NmYsCi0weDgwLCAweDIzLCAweDAxLCAweDY4LCAweDE5LCAweDQzLCAweDAxLCAweDYwLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHhjMSwgMHhiZCwgMHgyMSwgMHg0MCwgMHg3NSwgMHg5OCwgMHgyMSwgMHg0MCwKLTB4YzAsIDB4MDAsIDB4MTgsIDB4NDAsIDB4YzAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsCi0weDAwLCAweGI1LCAweDBmLCAweDQ4LCAweGMxLCAweDY4LCAweDAxLCAweDI5LCAweDA0LCAweGQxLCAweGMwLCAweDZmLAotMHg4MCwgMHgyMywgMHgwMSwgMHg2OCwgMHg5OSwgMHg0MywgMHgwMSwgMHg2MCwgMHgwYiwgMHg0YiwgMHgwYywgMHg0OCwKLTB4MGMsIDB4NGEsIDB4MDAsIDB4MjEsIDB4ZmQsIDB4ZjcsIDB4YmYsIDB4ZmIsIDB4MGIsIDB4NDgsIDB4NDEsIDB4OGQsCi0weDAxLCAweDMxLCAweDQxLCAweDg1LCAweDAwLCAweDIxLCAweGMxLCAweDg1LCAweDA5LCAweDQ4LCAweDAwLCAweDZhLAotMHgwMSwgMHgyMywgMHhkYiwgMHgwMywgMHgxOCwgMHg0MywgMHgwOCwgMHg0OSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg2MiwKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4NTksIDB4YmQsIDB4MjEsIDB4NDAsCi0weDc1LCAweDk4LCAweDIxLCAweDQwLCAweGI4LCAweDBiLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLAotMHhjMCwgMHgwMCwgMHgxOCwgMHg0MCwgMHhjMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHhmMCwgMHhiNSwgMHgxYiwgMHg0YywKLTB4MTAsIDB4MjYsIDB4ZTAsIDB4NjgsIDB4MDEsIDB4MjgsIDB4MDgsIDB4ZDEsIDB4NjAsIDB4ODgsIDB4MDAsIDB4MjgsCi0weDA1LCAweGQxLCAweDIwLCAweDc5LCAweDAwLCAweDI4LCAweDAyLCAweGQxLCAweDE5LCAweDIwLCAweGEwLCAweDY3LAotMHgwMCwgMHhlMCwgMHhhNiwgMHg2NywgMHgwMCwgMHgyMCwgMHgwNywgMHgyMywgMHg1YiwgMHgwMiwgMHhlNSwgMHgxOCwKLTB4YzEsIDB4NDMsIDB4ZTgsIDB4NjEsIDB4NjksIDB4NjIsIDB4NTksIDB4MDgsIDB4YTEsIDB4MjcsIDB4N2YsIDB4MDMsCi0weDc5LCAweDYwLCAweDBmLCAweDIxLCAweDc5LCAweDYwLCAweGUxLCAweDFkLCAweGI5LCAweDMxLCAweDA4LCAweDcxLAotMHgwMSwgMHgyMCwgMHhiOCwgMHg2MCwgMHg0MCwgMHgwMiwgMHhiOCwgMHg2MCwgMHgwMCwgMHhmMCwgMHg0YywgMHhmYSwKLTB4MDAsIDB4ZjAsIDB4ZjAsIDB4ZmEsIDB4MDQsIDB4MjAsIDB4YjgsIDB4NjAsIDB4MDcsIDB4MjAsIDB4NzgsIDB4NjEsCi0weDdlLCAweDYwLCAweDFiLCAweDIzLCAweGRiLCAweDAxLCAweGUwLCAweDE4LCAweGMwLCAweDhiLCAweDA0LCAweDIzLAotMHgxOCwgMHg0MCwgMHhlOCwgMHg2MiwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwKLTB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4OTAsIDB4YjQsIDB4MDIsIDB4MWMsIDB4MDAsIDB4MjAsIDB4ZmYsIDB4MjMsCi0weDAxLCAweDMzLCAweDlhLCAweDQyLCAweDA4LCAweGQwLCAweDAxLCAweDI5LCAweDAwLCAweGQxLCAweDAxLCAweDIwLAotMHgwMCwgMHgyYSwgMHgwMSwgMHhkMSwgMHgwMiwgMHgyMywgMHgxOCwgMHg0MywgMHg5MCwgMHhiYywgMHg3MCwgMHg0NywKLTB4MWIsIDB4NGEsIDB4ZDcsIDB4NjgsIDB4MWEsIDB4NGIsIDB4MTksIDB4NzksIDB4MWMsIDB4MWMsIDB4MzcsIDB4MjMsCi0weDliLCAweDAxLCAweGUzLCAweDE4LCAweDAxLCAweDJmLCAweDBkLCAweGQxLCAweDU3LCAweDg4LCAweDAwLCAweDJmLAotMHgwYSwgMHhkMSwgMHgwMCwgMHgyOSwgMHgwYSwgMHhkMSwgMHg1OSwgMHg4YiwgMHgwYSwgMHgwOSwgMHgwMCwgMHhkMywKLTB4MDIsIDB4MjAsIDB4NDksIDB4MDksIDB4ZTgsIDB4ZDMsIDB4MDEsIDB4MjMsIDB4MTgsIDB4NDMsIDB4ZTUsIDB4ZTcsCi0weDAwLCAweDI5LCAweDAzLCAweGQwLCAweDk4LCAweDhhLCAweDgwLCAweDA3LCAweDgwLCAweDBmLCAweGRmLCAweGU3LAotMHg2ZCwgMHgyMywgMHg1YiwgMHgwMSwgMHhkMSwgMHgxOCwgMHg4YSwgMHg4OCwgMHhmZiwgMHgyNywgMHgwMSwgMHgzNywKLTB4MTcsIDB4NDAsIDB4MGEsIDB4NDksIDB4YzksIDB4ODgsIDB4MDMsIDB4ZDAsIDB4NGIsIDB4MGEsIDB4MDEsIDB4ZDMsCi0weDAzLCAweDIwLCAweGQxLCAweGU3LCAweDEzLCAweDBhLCAweDAzLCAweGQzLCAweDBiLCAweDBhLCAweDAxLCAweGQzLAotMHgwMiwgMHgyMCwgMHhjYiwgMHhlNywgMHhkMiwgMHgwOSwgMHhjOSwgMHhkMywgMHhjOSwgMHgwOSwgMHhjNywgMHhkMywKLTB4MDEsIDB4MjAsIDB4YzUsIDB4ZTcsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4MDgsIDB4MWMsIDB4MDAsIDB4ODAsCi0weGYwLCAweGI1LCAweGMxLCAweGIwLCAweDAxLCAweDIwLCAweDAwLCAweDA3LCAweDUyLCAweDQ5LCAweGMwLCAweDQ2LAotMHgwOCwgMHg2MCwgMHg1MiwgMHg0OCwgMHg0MiwgMHg2OSwgMHg0MCwgMHgwZCwgMHhhMSwgMHgyMSwgMHg0OSwgMHgwMywKLTB4NDgsIDB4NjAsIDB4NTAsIDB4NDgsIDB4YzAsIDB4NmEsIDB4NTAsIDB4NGIsIDB4MTgsIDB4NDMsIDB4MDAsIDB4MjEsCi0weDAzLCAweDAzLCAweDFiLCAweDBiLCAweDRlLCAweDRjLCAweDI3LCAweDZmLCAweDNkLCAweDAzLCAweDJkLCAweDBiLAotMHhlNywgMHgxZCwgMHg3OSwgMHgzNywgMHhhYiwgMHg0MiwgMHgxYywgMHhkMCwgMHhlMywgMHgxZCwgMHg3OSwgMHgzMywKLTB4MWIsIDB4NmEsIDB4YzAsIDB4NDYsIDB4NDAsIDB4OTMsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MDMsIDB4NDMsCi0weDFiLCAweDY4LCAweGNjLCAweDAwLCAweDZlLCAweDQ2LCAweDMzLCAweDUxLCAweDAxLCAweDIzLCAweDliLCAweDA3LAotMHgwNiwgMHgxZCwgMHgzMywgMHg0MywgMHgxYiwgMHg2OCwgMHg2YywgMHg0NCwgMHg2MywgMHg2MCwgMHgwOCwgMHgzMCwKLTB4MDEsIDB4MzEsIDB4NDAsIDB4OWIsIDB4ODMsIDB4NDIsIDB4MDAsIDB4ZDgsIDB4M2YsIDB4NDgsIDB4MDMsIDB4MDMsCi0weDFiLCAweDBiLCAweGFiLCAweDQyLCAweGU3LCAweGQxLCAweDAwLCAweDIwLCAweDAxLCAweDIzLCAweDFiLCAweDAzLAotMHgxMywgMHg0MCwgMHgzYywgMHg0YywgMHgwMywgMHhkMCwgMHg2MywgMHg2YSwgMHgwMSwgMHgzMywgMHg2MywgMHg2MiwKLTB4MDksIDB4ZTAsIDB4MTMsIDB4MGIsIDB4MDMsIDB4ZDMsIDB4MjMsIDB4NmEsCi0weDAxLCAweDMzLCAweDIzLCAweDYyLCAweDAzLCAweGUwLCAweDM3LCAweDRiLCAweDVjLCAweDZkLCAweDAxLCAweDM0LAotMHg1YywgMHg2NSwgMHgwMCwgMHgyOSwgMHgwOSwgMHhkMCwgMHgwMywgMHgxYywgMHhkYywgMHgwMCwgMHgyMywgMHgxYywKLTB4NmIsIDB4NDQsIDB4NWMsIDB4NjgsIDB4MDEsIDB4MzAsIDB4MjMsIDB4MGQsIDB4MDEsIDB4ZDIsIDB4ODgsIDB4NDIsCi0weGY1LCAweGQxLCAweDMwLCAweDRjLCAweDI1LCAweDY4LCAweDZiLCAweDBjLCAweDA1LCAweGQyLCAweDIzLCAweDY4LAotMHgxYiwgMHgwYywgMHgwOCwgMHhkMSwgMHgyNCwgMHg2OCwgMHhhMywgMHgwYSwgMHgwNSwgMHhkMywgMHgyMCwgMHgyNCwKLTB4MmIsIDB4NGIsIDB4YzAsIDB4NDYsIDB4NWMsIDB4NjIsIDB4MDAsIDB4MjQsIDB4NWMsIDB4NjIsIDB4MjUsIDB4NGIsCi0weDIzLCAweDRjLCAweDUxLCAweDI2LCAweGI2LCAweDAzLCAweDIzLCAweDY3LCAweDMzLCAweDYxLCAweDNkLCAweDZhLAotMHhjMCwgMHg0NiwgMHg3NSwgMHg2MSwgMHgwMiwgMHgyNSwgMHhhMSwgMHgyNiwgMHg3NiwgMHgwMywgMHg3NSwgMHg2MCwKLTB4MDEsIDB4MjUsIDB4YjUsIDB4NjAsIDB4ZTYsIDB4MWQsIDB4YjksIDB4MzYsIDB4MzUsIDB4NzEsIDB4ODgsIDB4NDIsCi0weDIxLCAweGQwLCAweDI1LCAweDFjLCAweGMzLCAweDAwLCAweDZjLCAweDQ2LCAweGU0LCAweDU4LCAweDJlLCAweDZmLAotMHg2YiwgMHg0NCwgMHgzNCwgMHg2MCwgMHg1YiwgMHg2OCwgMHgyYywgMHg2ZiwgMHhjMCwgMHg0NiwgMHg2MywgMHg2MCwKLTB4MmIsIDB4NmYsIDB4MDgsIDB4MzMsIDB4MmIsIDB4NjcsIDB4M2MsIDB4NmEsIDB4YTMsIDB4NDIsIDB4MDIsIDB4ZDMsCi0weDEyLCAweDRiLCAweGMwLCAweDQ2LCAweDJiLCAweDY3LCAweDAzLCAweDFjLCAweGRiLCAweDAwLCAweDZiLCAweDQ0LAotMHg1YywgMHg2OCwgMHgwMSwgMHgzMCwgMHgyMywgMHgwZCwgMHgwNCwgMHhkMywgMHg1MSwgMHgyNCwgMHhhNCwgMHgwMywKLTB4MmIsIDB4NmYsIDB4YzAsIDB4NDYsIDB4YTMsIDB4NjEsIDB4ODgsIDB4NDIsIDB4ZGUsIDB4ZDEsIDB4MTAsIDB4MGIsCi0weDAzLCAweGQzLCAweDBlLCAweDQ5LCAweDAxLCAweDIwLCAweGZkLCAweGY3LCAweDc0LCAweGZhLCAweDQxLCAweGIwLAotMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwKLTB4MDAsIDB4MDEsIDB4MTQsIDB4NDAsIDB4MDAsIDB4NDAsIDB4MTQsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4NDAsCi0weDY4LCAweDBlLCAweDAwLCAweDgwLCAweDI0LCAweGE3LCAweDIwLCAweDQwLCAweGE0LCAweDJhLCAweDAwLCAweDgwLAotMHhhMCwgMHg4MiwgMHgyMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwgMHhjMCwgMHgwMCwgMHgxOCwgMHgwMCwKLTB4YzksIDB4NGYsIDB4ZmYsIDB4ZmYsIDB4ZjAsIDB4YjQsIDB4MDAsIDB4MjEsIDB4MDAsIDB4MjMsIDB4MDcsIDB4MjIsCi0weDA2LCAweDI0LCAweDQ3LCAweDRmLCAweGMwLCAweDQ2LCAweDNjLCAweDYxLCAweDNhLCAweDYxLCAweDAxLCAweDMzLAotMHgyMCwgMHgyYiwgMHhmOSwgMHhkMywgMHgwNCwgMHgyNSwgMHgzZCwgMHg2MSwgMHgwNSwgMHgyMywgMHgzYiwgMHg2MSwKLTB4M2MsIDB4NjEsIDB4M2EsIDB4NjEsIDB4M2MsIDB4NjEsIDB4M2EsIDB4NjEsIDB4M2QsIDB4NjEsIDB4M2IsIDB4NjEsCi0weDNmLCAweDRkLCAweGFiLCAweDZmLCAweGRlLCAweDA4LCAweDAyLCAweDIzLCAweDFlLCAweDQwLCAweDA0LCAweDIzLAotMHgzMywgMHg0MywgMHgzYiwgMHg2MSwgMHgwNSwgMHgyMywgMHgzMywgMHg0MywgMHgzYiwgMHg2MSwgMHhhYiwgMHg2ZiwKLTB4OWUsIDB4MDgsIDB4MDIsIDB4MjMsIDB4MWUsIDB4NDAsIDB4MDQsIDB4MjMsIDB4MzMsIDB4NDMsIDB4M2IsIDB4NjEsCi0weDA1LCAweDIzLCAweDMzLCAweDQzLCAweDNiLCAweDYxLCAweGFiLCAweDZmLCAweDVlLCAweDA4LCAweDAyLCAweDIzLAotMHgxZSwgMHg0MCwgMHgwNCwgMHgyMywgMHgzMywgMHg0MywgMHgzYiwgMHg2MSwgMHgwNSwgMHgyMywgMHgzMywgMHg0MywKLTB4M2IsIDB4NjEsIDB4MDIsIDB4MjMsIDB4YWUsIDB4NmYsIDB4MWUsIDB4NDAsIDB4MDQsIDB4MjMsIDB4MzMsIDB4NDMsCi0weDNiLCAweDYxLCAweDA1LCAweDIzLCAweDMzLCAweDQzLCAweDNiLCAweDYxLCAweGFiLCAweDZmLCAweDVkLCAweDAwLAotMHgwMiwgMHgyMywgMHgxZCwgMHg0MCwgMHgwNCwgMHgyMywgMHgyYiwgMHg0MywgMHgzYiwgMHg2MSwgMHgwNSwgMHgyMywKLTB4MmIsIDB4NDMsIDB4M2IsIDB4NjEsIDB4YzUsIDB4MDgsIDB4MDIsIDB4MjMsIDB4MWQsIDB4NDAsIDB4MDQsIDB4MjMsCi0weDJiLCAweDQzLCAweDNiLCAweDYxLCAweDA1LCAweDIzLCAweDJiLCAweDQzLCAweDNiLCAweDYxLCAweDg1LCAweDA4LAotMHgwMiwgMHgyMywgMHgxZCwgMHg0MCwgMHgwNCwgMHgyMywgMHgyYiwgMHg0MywgMHgzYiwgMHg2MSwgMHgwNSwgMHgyMywKLTB4MmIsIDB4NDMsIDB4M2IsIDB4NjEsIDB4NDUsIDB4MDgsIDB4MDIsIDB4MjMsIDB4MWQsIDB4NDAsIDB4MDQsIDB4MjMsCi0weDJiLCAweDQzLCAweDNiLCAweDYxLCAweDA1LCAweDIzLCAweDJiLCAweDQzLCAweDNiLCAweDYxLCAweDAyLCAweDI1LAotMHgwNSwgMHg0MCwgMHgwNCwgMHgyMywgMHgyYiwgMHg0MywgMHgzYiwgMHg2MSwgMHgwNSwgMHgyMywgMHgyYiwgMHg0MywKLTB4M2IsIDB4NjEsIDB4NDAsIDB4MDAsIDB4MDIsIDB4MjMsIDB4MTgsIDB4NDAsIDB4MDQsIDB4MjMsIDB4MDMsIDB4NDMsCi0weDNiLCAweDYxLCAweDA1LCAweDIzLCAweDE4LCAweDQzLCAweDM4LCAweDYxLCAweDAwLCAweDI1LCAweDNkLCAweDYxLAotMHgwMSwgMHgyMywgMHgzYiwgMHg2MSwgMHgzZCwgMHg2MSwgMHgzYiwgMHg2MSwgMHgwMCwgMHgyMCwgMHgzZCwgMHg2MSwKLTB4MGQsIDB4NGIsIDB4MWIsIDB4NjksIDB4NDksIDB4MDAsIDB4MWUsIDB4MWMsIDB4MDIsIDB4MjMsIDB4MzMsIDB4NDAsCi0weDE5LCAweDQzLCAweDAxLCAweDIzLCAweDNiLCAweDYxLCAweDAxLCAweDMwLAotMHgxMCwgMHgyOCwgMHhmMiwgMHhkMywgMHgwMiwgMHgyMCwgMHgzOCwgMHg2MSwgMHgwMywgMHgyMCwgMHgzOCwgMHg2MSwKLTB4M2MsIDB4NjEsIDB4M2EsIDB4NjEsIDB4M2MsIDB4NjEsIDB4M2EsIDB4NjEsIDB4MzgsIDB4NjEsIDB4NDgsIDB4MDgsCi0weGYwLCAweGJjLCAweDcwLCAweDQ3LCAweDgwLCAweDAwLCAweDE0LCAweDAwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLAotMHg4MCwgMHgwMCwgMHgxNCwgMHg0MCwgMHhmMCwgMHhiNCwgMHgwMCwgMHgyNCwgMHgwNywgMHgyMywgMHgwNiwgMHgyNywKLTB4NDQsIDB4NGEsIDB4YzAsIDB4NDYsIDB4MTcsIDB4NjEsIDB4MTMsIDB4NjEsIDB4MDEsIDB4MzQsIDB4MjAsIDB4MmMsCi0weGY5LCAweGQzLCAweDA0LCAweDI2LCAweDE2LCAweDYxLCAweDA1LCAweDI0LCAweDE0LCAweDYxLCAweDE3LCAweDYxLAotMHgwNywgMHgyMywgMHgxMywgMHg2MSwgMHgxNiwgMHg2MSwgMHgxNCwgMHg2MSwgMHgxNywgMHg2MSwgMHgxMywgMHg2MSwKLTB4M2MsIDB4NGIsIDB4OWIsIDB4NmYsIDB4ZGQsIDB4MDgsIDB4MDIsIDB4MjMsIDB4MWQsIDB4NDAsIDB4MmIsIDB4MWMsCi0weDMzLCAweDQzLCAweDEzLCAweDYxLCAweDI1LCAweDQzLCAweDE1LCAweDYxLCAweDM3LCAweDRiLCAweDliLCAweDZmLAotMHg5ZCwgMHgwOCwgMHgwMiwgMHgyMywgMHgxZCwgMHg0MCwgMHgyYiwgMHgxYywgMHgzMywgMHg0MywgMHgxMywgMHg2MSwKLTB4MjUsIDB4NDMsIDB4MTUsIDB4NjEsIDB4MzIsIDB4NGIsIDB4OWIsIDB4NmYsIDB4NWQsIDB4MDgsIDB4MDIsIDB4MjMsCi0weDFkLCAweDQwLCAweDJiLCAweDFjLCAweDMzLCAweDQzLCAweDEzLCAweDYxLCAweDI1LCAweDQzLCAweDE1LCAweDYxLAotMHgyZCwgMHg0YiwgMHg5ZCwgMHg2ZiwgMHgwMiwgMHgyMywgMHgxZCwgMHg0MCwgMHgyYiwgMHgxYywgMHgzMywgMHg0MywKLTB4MTMsIDB4NjEsIDB4MjUsIDB4NDMsIDB4MTUsIDB4NjEsIDB4MjksIDB4NGIsIDB4OWIsIDB4NmYsIDB4NWQsIDB4MDAsCi0weDAyLCAweDIzLCAweDFkLCAweDQwLCAweDJiLCAweDFjLCAweDMzLCAweDQzLCAweDEzLCAweDYxLCAweDI1LCAweDQzLAotMHgxNSwgMHg2MSwgMHhjNSwgMHgwOCwgMHgwMiwgMHgyMywgMHgxZCwgMHg0MCwgMHgyYiwgMHgxYywgMHgzMywgMHg0MywKLTB4MTMsIDB4NjEsIDB4MjUsIDB4NDMsIDB4MTUsIDB4NjEsIDB4ODUsIDB4MDgsIDB4MDIsIDB4MjMsIDB4MWQsIDB4NDAsCi0weDJiLCAweDFjLCAweDMzLCAweDQzLCAweDEzLCAweDYxLCAweDI1LCAweDQzLCAweDE1LCAweDYxLCAweDQ1LCAweDA4LAotMHgwMiwgMHgyMywgMHgxZCwgMHg0MCwgMHgyYiwgMHgxYywgMHgzMywgMHg0MywgMHgxMywgMHg2MSwgMHgyNSwgMHg0MywKLTB4MTUsIDB4NjEsIDB4MDIsIDB4MjUsIDB4MDUsIDB4NDAsIDB4MmIsIDB4MWMsIDB4MzMsIDB4NDMsIDB4MTMsIDB4NjEsCi0weDI1LCAweDQzLCAweDE1LCAweDYxLCAweDQwLCAweDAwLCAweDAyLCAweDIzLCAweDE4LCAweDQwLCAweDAzLCAweDFjLAotMHgzMywgMHg0MywgMHgxMywgMHg2MSwgMHgyMCwgMHg0MywgMHgxMCwgMHg2MSwgMHgxNywgMHg2MSwgMHgwNywgMHgyMywKLTB4MTMsIDB4NjEsIDB4MTYsIDB4NjEsIDB4MTQsIDB4NjEsIDB4NGMsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MGYsIDB4MjEsCi0weDI1LCAweDFjLCAweGNkLCAweDQwLCAweDAyLCAweDIzLCAweDFkLCAweDQwLCAweDA0LCAweDIzLCAweDJiLCAweDQzLAotMHgxMywgMHg2MSwgMHgwNSwgMHgyMywgMHgyYiwgMHg0MywgMHgxMywgMHg2MSwgMHgwMSwgMHgzMCwgMHgwMSwgMHgzOSwKLTB4MTAsIDB4MjgsIDB4ZjEsIDB4ZDMsIDB4MTcsIDB4NjEsIDB4MDcsIDB4MjMsIDB4MTMsIDB4NjEsIDB4MTcsIDB4NjEsCi0weDEzLCAweDYxLCAweDAzLCAweDIwLCAweDEwLCAweDYxLCAweGYwLCAweGJjLCAweDcwLCAweDQ3LCAweDAwLCAweDAwLAotMHg4MCwgMHgwMCwgMHgxNCwgMHgwMCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHhmMCwgMHhiNSwgMHg0ZiwgMHg0ZCwKLTB4MDgsIDB4MjEsIDB4MDIsIDB4MjAsIDB4MmEsIDB4MWMsIDB4ZmQsIDB4ZjcsIDB4MjcsIDB4ZjksIDB4NGQsIDB4NGMsCi0weDcxLCAweDIzLCAweDViLCAweDAxLCAweGU3LCAweDE4LCAweDM4LCAweDgwLCAweDFhLCAweDIxLCAweDAyLCAweDIwLAotMHgyYSwgMHgxYywgMHhmZCwgMHhmNywgMHgxZCwgMHhmOSwgMHg3OCwgMHg4MCwgMHgyMCwgMHg3OSwgMHgwMCwgMHgyOCwKLTB4MGIsIDB4ZDAsIDB4MDAsIDB4MjAsIDB4MzgsIDB4ODAsIDB4ZTAsIDB4NjgsIDB4MDEsIDB4MjgsIDB4MTAsIDB4ZDEsCi0weDQ0LCAweDQ4LCAweDAwLCAweDY4LCAweDAxLCAweDIzLCAweDliLCAweDAyLCAweDE4LCAweDQzLCAweDk5LCAweDAyLAotMHgwOCwgMHg2MCwgMHhlMCwgMHg2OCwgMHgwMSwgMHgyOCwgMHgwNiwgMHhkMSwgMHg2MCwgMHg4OCwgMHgwMCwgMHgyOCwKLTB4MDMsIDB4ZDEsIDB4ZjksIDB4MjEsIDB4MTIsIDB4MjAsIDB4ZmYsIDB4ZjcsIDB4NDMsIDB4ZmYsIDB4MDEsIDB4MjEsCi0weGM5LCAweDAzLCAweDAwLCAweDIwLCAweGZmLCAweGY3LCAweDNlLCAweGZmLCAweDAwLCAweDI1LCAweDdkLCAweDI2LAotMHhmNiwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMSwgMHgzNSwgMHgwMCwgMHgyMCwgMHhmZiwgMHhmNywgMHg5YywgMHhmZSwKLTB4MDAsIDB4MGMsIDB4MDEsIDB4ZDMsIDB4YjUsIDB4NDIsIDB4ZjcsIDB4ZDMsIDB4MDAsIDB4MjUsIDB4MDUsIDB4ZTAsCi0weDAzLCAweDIxLCAweDA5LCAweDAzLCAweDAwLCAweDIwLCAweGZmLCAweGY3LCAweDJiLCAweGZmLCAweDAxLCAweDM1LAotMHgwMCwgMHgyMCwgMHhmZiwgMHhmNywgMHg4ZCwgMHhmZSwgMHg0MCwgMHgwYiwgMHgwMSwgMHhkMiwgMHhiNSwgMHg0MiwKLTB4ZjIsIDB4ZDMsIDB4MDQsIDB4MjAsIDB4ZmYsIDB4ZjcsIDB4ODYsIDB4ZmUsIDB4ZmYsIDB4MjMsIDB4ZTEsIDB4MzMsCi0weDk4LCAweDQzLCAweDAxLCAweDIxLCAweDAxLCAweDQzLCAweDM4LCAweDg4LCAweGZmLCAweDIzLCAweDAxLCAweDMzLAotMHg5OCwgMHg0MiwgMHgwMywgMHhkMSwgMHgyZiwgMHgyMywgMHg1YiwgMHgwMSwKLTB4MTksIDB4NDMsIDB4MTYsIDB4ZTAsIDB4MDEsIDB4MjgsIDB4MDksIDB4ZDEsIDB4NzgsIDB4ODgsIDB4MDEsIDB4MjgsCi0weDAzLCAweGQxLCAweDIzLCAweDIzLCAweDViLCAweDAxLCAweDE5LCAweDQzLCAweDBkLCAweGUwLCAweDIwLCAweDIzLAotMHgxOSwgMHg0MywgMHgwYSwgMHhlMCwgMHgwMCwgMHgyOCwgMHgwOCwgMHhkMSwgMHg3OCwgMHg4OCwgMHgwMSwgMHgyOCwKLTB4MDMsIDB4ZDEsIDB4MGIsIDB4MjMsIDB4ZGIsIDB4MDEsIDB4MTksIDB4NDMsIDB4MDEsIDB4ZTAsIDB4ODAsIDB4MjMsCi0weDE5LCAweDQzLCAweDA0LCAweDIwLCAweGZmLCAweGY3LCAweGY4LCAweGZlLCAweDA5LCAweDIxLCAweDQ5LCAweDAyLAotMHgwMCwgMHgyMCwgMHhmZiwgMHhmNywgMHhmMywgMHhmZSwgMHhlMCwgMHg2OCwgMHgwMCwgMHgyOCwgMHgwYywgMHhkMSwKLTB4MDAsIDB4MjEsIDB4MWIsIDB4MjAsIDB4ZmYsIDB4ZjcsIDB4ZWMsIDB4ZmUsIDB4MWEsIDB4MjAsIDB4ZmYsIDB4ZjcsCi0weDRmLCAweGZlLCAweDAxLCAweDIxLCAweGM5LCAweDAzLCAweDAxLCAweDQzLCAweDFhLCAweDIwLCAweGZmLCAweGY3LAotMHhlMywgMHhmZSwgMHgwMCwgMHgyNywgMHgwMywgMHhlMCwgMHgwOCwgMHgyZiwgMHgwMSwgMHhkMywgMHgwZiwgMHgyZiwKLTB4MDgsIDB4ZDksIDB4MzgsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4NDAsIDB4ZmUsIDB4NzksIDB4MDAsIDB4MDksIDB4MTksCi0weDFiLCAweDIzLCAweGRiLCAweDAxLCAweGM5LCAweDE4LCAweDg4LCAweDgzLCAweDAxLCAweDM3LCAweDIwLCAweDJmLAotMHhlZiwgMHhkMywgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHhlZCwgMHhhZiwgMHgyMSwgMHg0MCwKLTB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsIDB4ODEsIDB4YjAsIDB4MTMsIDB4NDgsCi0weDAxLCAweDY4LCAweGMwLCAweDQ2LCAweDAwLCAweDkxLCAweDQxLCAweDY4LCAweGMwLCAweDQ2LCAweDAwLCAweDkxLAotMHg4MSwgMHg2OCwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MSwgMHhjMSwgMHg2OCwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MSwKLTB4MDEsIDB4NjksIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTEsIDB4NDEsIDB4NjksIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTEsCi0weDgxLCAweDY5LCAweGMwLCAweDQ2LCAweDAwLCAweDkxLCAweGMxLCAweDY5LCAweGMwLCAweDQ2LCAweDAwLCAweDkxLAotMHgwMSwgMHg2YSwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MSwgMHg0MSwgMHg2YSwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MSwKLTB4ODEsIDB4NmEsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTEsIDB4YzAsIDB4NmEsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTAsCi0weDAxLCAweGIwLCAweDcwLCAweDQ3LCAweDAwLCAweDA4LCAweDE0LCAweDQwLCAweGYwLCAweGI1LCAweDgzLCAweGIwLAotMHg2OCwgMHg0ZCwgMHgxYiwgMHgyMywgMHhkYiwgMHgwMSwgMHhlZiwgMHgxOCwgMHhmOCwgMHg4YiwgMHgwNCwgMHgyMiwKLTB4MDIsIDB4NDAsIDB4MDIsIDB4OTIsIDB4NzEsIDB4MjMsIDB4NWIsIDB4MDEsIDB4ZTgsIDB4MTgsIDB4MDEsIDB4ODgsCi0weGMwLCAweDQ2LCAweDAxLCAweDkxLCAweDQwLCAweDg4LCAweGMwLCAweDQ2LCAweDAwLCAweDkwLCAweDAwLCAweDI0LAotMHgwMywgMHhlMCwgMHgwOCwgMHgyYywgMHgwMSwgMHhkMywgMHgwZiwgMHgyYywgMHgwOCwgMHhkOSwgMHgyMCwgMHgxYywKLTB4ZmYsIDB4ZjcsIDB4ZTgsIDB4ZmQsIDB4NjEsIDB4MDAsIDB4NDksIDB4MTksIDB4MWIsIDB4MjMsIDB4ZGIsIDB4MDEsCi0weGM5LCAweDE4LCAweDg4LCAweDgzLCAweDAxLCAweDM0LCAweDIwLCAweDJjLCAweGVmLCAweGQzLCAweDU4LCAweDRjLAotMHhlMCwgMHg2OSwgMHgwMCwgMHgyOCwgMHgxNSwgMHhkMCwgMHg1NywgMHg0ZSwgMHgyMCwgMHgyNSwgMHgwMSwgMHgzZCwKLTB4NTMsIDB4NDksIDB4ZTAsIDB4NjksIDB4MzAsIDB4NDAsIDB4MGIsIDB4ZDAsIDB4NjgsIDB4MDAsIDB4NDAsIDB4MTgsCi0weDM3LCAweDIzLCAweDliLCAweDAxLCAweGMwLCAweDE4LCAweDgxLCAweDhiLCAweDI4LCAweDFjLCAweGZmLCAweGY3LAotMHg2NSwgMHhmZSwgMHhlMCwgMHg2OSwgMHhiMCwgMHg0MywgMHhlMCwgMHg2MSwgMHg3NiwgMHgwOCwgMHgwMCwgMHgyZCwKLTB4ZWIsIDB4ZDEsIDB4MDEsIDB4MjAsIDB4ZmYsIDB4ZjcsIDB4YzIsIDB4ZmQsIDB4NDgsIDB4NDksIDB4YzAsIDB4NDYsCi0weGY4LCAweDgzLCAweGY4LCAweDhiLCAweGMyLCAweDA4LCAweDI1LCAweGQzLCAweGNhLCAweDY4LCAweDAxLCAweDJhLAotMHgxMywgMHhkMSwgMHgwYSwgMHg3OSwgMHgwMCwgMHgyYSwgMHgxZiwgMHhkMSwgMHg0OSwgMHg4OCwgMHgwMCwgMHgyOSwKLTB4MWMsIDB4ZDEsIDB4MDEsIDB4OTksIDB4NDMsIDB4NGEsIDB4MDAsIDB4MjksIDB4MDUsIDB4ZDAsIDB4MDEsIDB4MjksCi0weDE2LCAweGQxLCAweDUxLCAweDhiLCAweGM5LCAweDA4LCAweDEzLCAweGQyLCAweDBmLCAweGUwLCAweDUxLCAweDhiLAotMHgwOSwgMHgwOSwgMHgwZiwgMHhkMiwgMHgwYiwgMHhlMCwgMHgwYSwgMHg3OSwgMHgwMCwgMHgyYSwgMHgwYiwgMHhkMSwKLTB4NmQsIDB4MjMsIDB4NWIsIDB4MDEsIDB4YzksIDB4MTgsIDB4OGEsIDB4ODgsIDB4YzksIDB4ODgsIDB4MTEsIDB4NDAsCi0weDQ5LCAweDA5LCAweDA5LCAweDA3LCAweDAyLCAweGQxLCAweDA0LCAweDIzLCAweDk4LCAweDQzLCAweGY4LCAweDgzLAotMHhmOCwgMHg4YiwgMHgwNCwgMHgyMSwgMHgwMSwgMHg0MCwgMHgwMiwgMHg5YSwgMHgxZiwgMHhkMCwgMHhiOSwgMHg4YiwKLTB4NGEsIDB4MGIsIDB4MjcsIDB4ZDMsIDB4ODAsIDB4MDksIDB4MjUsIDB4ZDMsIDB4ZmYsIDB4MjMsIDB4MDEsIDB4OTgsCi0weDAxLCAweDMzLCAweDk4LCAweDQyLCAweDIwLCAweGQwLCAweDAwLCAweDI1LCAweDAwLCAweDk4LCAweDAxLCAweDI4LAotMHgwMCwgMHhkMSwgMHgwNSwgMHgwMiwgMHgwMSwgMHg5OCwgMHgwMCwgMHgyOCwgMHgwMiwgMHhkMSwgMHgwMSwgMHgyMywKLTB4NWIsIDB4MDMsIDB4MWQsIDB4NDMsIDB4YTksIDB4NDIsIDB4MTMsIDB4ZDAsCi0weDAwLCAweDIwLCAweDI5LCAweDFjLCAweGZmLCAweGY3LCAweDEwLCAweGZlLCAweGJkLCAweDgzLCAweDAwLCAweDIwLAotMHhjMCwgMHg0MywgMHg2MCwgMHg2MiwgMHgwYSwgMHhlMCwgMHhiOCwgMHg4YiwgMHg0MCwgMHgwYiwgMHgwNywgMHhkMiwKLTB4MDksIDB4MjEsIDB4NDksIDB4MDIsIDB4MDAsIDB4MjAsIDB4ZmYsIDB4ZjcsIDB4MDMsIDB4ZmUsIDB4MDksIDB4MjAsCi0weDQwLCAweDAyLCAweGI4LCAweDgzLCAweGY4LCAweDhiLCAweGMwLCAweDA4LCAweDJkLCAweGQzLCAweDFkLCAweDQ4LAotMHhjNywgMHg2YSwgMHgwMSwgMHg5OCwgMHgwMCwgMHg5OSwgMHhmZiwgMHhmNywgMHg1MSwgMHhmYywgMHhjMiwgMHgwNywKLTB4ZDIsIDB4MGYsIDB4MWEsIDB4NDksIDB4MDMsIDB4ZDAsIDB4MDQsIDB4MjMsIDB4Y2QsIDB4NmQsIDB4MmIsIDB4NDMsCi0weDAzLCAweGUwLCAweDA0LCAweDIzLCAweGNkLCAweDZkLCAweDlkLCAweDQzLCAweDJiLCAweDFjLCAweGNiLCAweDY1LAotMHg4MywgMHgwOCwgMHgwMywgMHhkMywgMHgwMiwgMHgyMywgMHhjZCwgMHg2ZCwgMHgyYiwgMHg0MywgMHgwMywgMHhlMCwKLTB4MDIsIDB4MjMsIDB4Y2QsIDB4NmQsIDB4OWQsIDB4NDMsIDB4MmIsIDB4MWMsIDB4Y2IsIDB4NjUsIDB4NjEsIDB4NmEsCi0weDgxLCAweDQyLCAweDBjLCAweGQwLCAweDYwLCAweDYyLCAweDBlLCAweDQ4LCAweDAwLCAweDJhLCAweDAzLCAweGQwLAotMHhmZiwgMHgyMSwgMHgyMSwgMHgzMSwgMHgzOSwgMHg0MywgMHgwMywgMHhlMCwgMHhmZiwgMHgyMywgMHgyMSwgMHgzMywKLTB4OWYsIDB4NDMsIDB4MzksIDB4MWMsIDB4YzEsIDB4NjIsIDB4MDMsIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsCi0weDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweDY4LCAweDFjLCAweDAwLCAweDgwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgyOCwgMHgxYywgMHgwMCwgMHg4MCwgMHg0MCwgMHgwMCwgMHgxNCwgMHg0MCwKLTB4YTQsIDB4MmEsIDB4MDAsIDB4ODAsIDB4NDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4OTAsIDB4YjQsIDB4MDEsIDB4MjIsCi0weDIwLCAweDI4LCAweDBmLCAweGQyLCAweDQzLCAweDAwLCAweDBmLCAweDFjLCAweDA3LCAweDQ5LCAweDVjLCAweDE4LAotMHgzNywgMHgyMywgMHg5YiwgMHgwMSwgMHhlMywgMHgxOCwgMHg5ZiwgMHg4MywgMHg4MiwgMHg0MCwgMHgwNywgMHgyMywKLTB4NWIsIDB4MDIsIDB4YzksIDB4MTgsIDB4MTAsIDB4MWMsIDB4Y2EsIDB4NjksIDB4MTAsIDB4NDMsIDB4YzgsIDB4NjEsCi0weDkwLCAweGJjLCAweDcwLCAweDQ3LCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweDBiLCAweDQ4LCAweDQwLCAweDY5LAotMHgwYiwgMHg0OSwgMHhjOSwgMHg4YiwgMHgwNCwgMHgyMiwgMHgwYSwgMHg0MCwgMHgwYSwgMHg0OSwgMHgwNiwgMHhkMCwKLTB4MDEsIDB4MjMsIDB4ZGIsIDB4MDIsIDB4OTgsIDB4NDMsIDB4MDEsIDB4MjMsIDB4Y2EsIDB4NmQsIDB4MWEsIDB4NDMsCi0weDA1LCAweGUwLCAweDAxLCAweDIzLCAweGRiLCAweDAyLCAweDE4LCAweDQzLCAweGNhLCAweDZkLCAweDUyLCAweDA4LAotMHg1MiwgMHgwMCwgMHhjYSwgMHg2NSwgMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxNCwgMHg0MCwKLTB4ZTgsIDB4MWIsIDB4MDAsIDB4ODAsIDB4YTQsIDB4MmEsIDB4MDAsIDB4ODAsIDB4MDAsIDB4YjUsIDB4ODQsIDB4YjAsCi0weGZmLCAweGY3LCAweGRlLCAweGZmLCAweDAxLCAweDFjLCAweDA1LCAweDIwLCAweDAwLCAweDkwLCAweDAwLCAweDIwLAotMHgwMSwgMHhhYiwgMHgxOCwgMHg4MCwgMHgwNCwgMHgzYiwgMHg1OCwgMHg3MCwgMHgxYiwgMHgyMiwgMHgwMCwgMHhhYiwKLTB4NWEsIDB4ODAsIDB4ZDksIDB4ODAsIDB4MDUsIDB4NDksIDB4YzksIDB4NmQsIDB4YzAsIDB4NDYsIDB4MDIsIDB4OTEsCi0weDAzLCAweDkwLCAweDY4LCAweDQ2LCAweDAwLCAweDIxLCAweGZkLCAweGY3LCAweDc5LCAweGY4LCAweDA0LCAweGIwLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHhhNCwgMHgyYSwgMHgwMCwgMHg4MCwgMHgwZiwgMHg0OCwgMHgwMSwgMHg2OCwKLTB4NDksIDB4MGMsIDB4MDUsIDB4ZDIsIDB4MDEsIDB4NjgsIDB4MDksIDB4MGMsIDB4MDYsIDB4ZDEsIDB4MDAsIDB4NjgsCi0weDgwLCAweDBhLCAweDAzLCAweGQzLCAweDBiLCAweDQ4LCAweDAwLCAweDY4LCAweDAwLCAweDBjLCAweDAxLCAweGUwLAotMHgwYSwgMHg0OCwgMHg4MCwgMHg2YywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywgMHgwOSwgMHg0YiwgMHg5OCwgMHg0MiwKLTB4MDUsIDB4ZDAsIDB4MDIsIDB4MzMsIDB4OTgsIDB4NDIsIDB4MDIsIDB4ZDAsIDB4MDcsIDB4NGIsIDB4OTgsIDB4NDIsCi0weDAxLCAweGQxLCAweDAxLCAweDIwLCAweDcwLCAweDQ3LCAweDAwLCAweDIwLCAweGZjLCAweGU3LCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxOCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwKLTB4MDQsIDB4OTksIDB4MDAsIDB4MDAsIDB4MDcsIDB4OTksIDB4MDAsIDB4MDAsIDB4OTAsIDB4YjQsIDB4MDEsIDB4MjQsCi0weDIxLCAweDFjLCAweDE4LCAweDQ4LCAweDAyLCAweDY4LCAweDUyLCAweDBjLCAweDA2LCAweGQyLCAweDAyLCAweDY4LAotMHgxMiwgMHgwYywgMHgwMiwgMHhkMSwgMHgwMCwgMHg2OCwgMHg4MCwgMHgwYSwgMHgwMCwgMHhkMiwgMHgwMCwgMHgyMSwKLTB4MDksIDB4MDYsIDB4MDksIDB4MGUsIDB4MTIsIDB4NGYsIDB4MTMsIDB4NGEsIDB4MDIsIDB4ZDAsIDB4MzgsIDB4NjgsCi0weDAwLCAweDBjLCAweDAwLCAweGUwLCAweDkwLCAweDZjLCAweDAwLCAweDA0LCAweDAwLCAweDBjLCAweDEwLCAweDRiLAotMHg5OCwgMHg0MiwgMHgwOCwgMHhkMCwgMHgwMiwgMHgzMywgMHg5OCwgMHg0MiwgMHgwNSwgMHhkMCwgMHgwZSwgMHg0YiwKLTB4OTgsIDB4NDIsIDB4MDIsIDB4ZDAsIDB4MDIsIDB4M2IsIDB4OTgsIDB4NDIsIDB4MGMsIDB4ZDEsIDB4MDAsIDB4MjksCi0weDAyLCAweGQwLCAweGY4LCAweDZhLCAweDAwLCAweDBjLCAweDAwLCAweGUwLAotMHhkMCwgMHg2YywgMHg0MCwgMHgwYSwgMHgwMCwgMHhkMiwgMHgwMCwgMHgyNCwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwZSwKLTB4OTAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MjAsIDB4ZmIsIDB4ZTcsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsCi0weDAwLCAweDAwLCAweDE4LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDA0LCAweDk5LCAweDAwLCAweDAwLAotMHgwNywgMHg5OSwgMHgwMCwgMHgwMCwgMHgwYywgMHg0OCwgMHgwMSwgMHg2OCwgMHg0OSwgMHgwYywgMHgwNSwgMHhkMiwKLTB4MDEsIDB4NjgsIDB4MDksIDB4MGMsIDB4MDUsIDB4ZDEsIDB4MDAsIDB4NjgsIDB4ODAsIDB4MGEsIDB4MDIsIDB4ZDMsCi0weDA4LCAweDQ4LCAweDgwLCAweDY4LCAweDAxLCAweGUwLCAweDA4LCAweDQ4LCAweDQwLCAweDZjLCAweDAwLCAweDA0LAotMHgwMCwgMHgwYywgMHgwMCwgMHgyMSwgMHgwMywgMHgyOCwgMHgwMywgMHhkMCwgMHg0MCwgMHgwOCwgMHgwMSwgMHhkMywKLTB4MDEsIDB4MjAsIDB4NzAsIDB4NDcsIDB4MDgsIDB4MWMsIDB4ZmMsIDB4ZTcsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsCi0weDAwLCAweDAwLCAweDE4LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweGYwLCAweGI1LCAweDAxLCAweDI3LAotMHgxYSwgMHg0YywgMHgyNSwgMHg2OCwgMHhmZiwgMHhmNywgMHg3MiwgMHhmZiwgMHgwMywgMHgxYywgMHgxOSwgMHg0YSwKLTB4MDIsIDB4MjEsIDB4MDEsIDB4MjYsIDB4MTgsIDB4NDgsIDB4MDEsIDB4MmIsIDB4MWIsIDB4ZDEsIDB4Y2IsIDB4MDQsCi0weDFlLCAweDYwLCAweDU1LCAweDIzLCAweDAzLCAweDYwLCAweDAwLCAweDIzLCAweDQzLCAweDYwLCAweDA2LCAweDY4LAotMHg1NSwgMHgyZSwgMHgxYiwgMHhkMSwgMHhhYSwgMHgyNiwgMHgwNiwgMHg2MCwgMHg0MywgMHg2MCwgMHgwMywgMHg2OCwKLTB4YWEsIDB4MmIsIDB4MTUsIDB4ZDEsIDB4MDksIDB4MjMsIDB4MDMsIDB4NjAsIDB4MDUsIDB4MjMsIDB4MGYsIDB4NGYsCi0weGMwLCAweDQ2LCAweDNiLCAweDYwLCAweDAzLCAweDIzLCAweDBlLCAweDRmLCAweGMwLCAweDQ2LCAweDNiLCAweDYwLAotMHgxMSwgMHg2MCwgMHgwNywgMHg2OCwgMHgwOCwgMHhlMCwgMHgwOCwgMHgyMywgMHgyMywgMHg2MCwgMHgwNCwgMHgyMywKLTB4MGEsIDB4NGYsIDB4YzAsIDB4NDYsIDB4M2IsIDB4NjAsIDB4MTEsIDB4NjAsIDB4MDYsIDB4NjAsIDB4MjcsIDB4NjgsCi0weGMwLCAweDQ2LCAweDI1LCAweDYwLCAweDM4LCAweDFjLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHgwMCwgMHgwMCwgMHgyMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgyNCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgyMiwgMHg0MCwKLTB4MDAsIDB4MDAsIDB4MmEsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MjYsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4NDAsCi0weDgwLCAweGI1LCAweDA3LCAweDFjLCAweGZmLCAweGY3LCAweDMwLCAweGZmLCAweDAxLCAweDI4LCAweDA1LCAweGQxLAotMHgxOSwgMHg0OCwgMHgwMCwgMHg2OCwgMHgxOSwgMHg0OSwgMHg0OSwgMHg2YiwgMHgwOCwgMHg0MCwgMHgyMiwgMHhlMCwKLTB4MTgsIDB4NDgsIDB4MDEsIDB4NjgsIDB4NDksIDB4MGMsIDB4MDUsIDB4ZDIsIDB4MDEsIDB4NjgsIDB4MDksIDB4MGMsCi0weDA2LCAweGQxLCAweDAwLCAweDY4LCAweDgwLCAweDBhLCAweDAzLCAweGQzLCAweDE0LCAweDQ4LCAweDAwLCAweDY4LAotMHgwMCwgMHgwYywgMHgwMSwgMHhlMCwgMHgxMywgMHg0OCwgMHg4MCwgMHg2YywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywKLTB4MTIsIDB4NGIsIDB4YzAsIDB4MTgsIDB4MDgsIDB4MjgsIDB4MGIsIDB4ZDIsIDB4MDEsIDB4YTMsIDB4MWIsIDB4NWMsCi0weDViLCAweDAwLCAweDlmLCAweDQ0LCAweDA1LCAweDAzLCAweDA3LCAweDAzLCAweDA3LCAweDA3LCAweDA1LCAweDAzLAotMHgwMywgMHgyMCwgMHgwMiwgMHhlMCwgMHgwMSwgMHgyMCwgMHgwMCwgMHhlMCwgMHgwMCwgMHgyMCwgMHgwMSwgMHgyMSwKLTB4MzgsIDB4NjAsIDB4ODAsIDB4MDcsIDB4MDAsIDB4ZDEsIDB4MDAsIDB4MjEsIDB4MDgsIDB4MDYsIDB4MDAsIDB4MGUsCi0weDgwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDM0LCAweDZlLCAweDIxLCAweDQwLAotMHgwMCwgMHgwMCwgMHgxMSwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxOCwgMHg0MCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZmUsIDB4NjYsIDB4ZmYsIDB4ZmYsIDB4ZjAsIDB4YjUsIDB4ODIsIDB4YjAsCi0weDA3LCAweDFjLCAweDAxLCAweDIwLCAweDAxLCAweDkwLCAweGZmLCAweGY3LCAweGU3LCAweGZlLCAweDAxLCAweDI4LAotMHgxMywgMHhkMSwgMHgzOCwgMHgyZiwgMHgwMSwgMHhkMCwgMHhhOCwgMHgyZiwgMHgwNywgMHhkMSwgMHgwMCwgMHgyNiwKLTB4ZjYsIDB4NDMsIDB4MzQsIDB4MWMsIDB4YTgsIDB4MmYsIDB4MDIsIDB4ZDEsIDB4MzAsIDB4MWMsIDB4MDAsIDB4OTYsCi0weDM1LCAweDFjLCAweDExLCAweDIwLCAweDAwLCAweDA0LCAweDA2LCAweDYyLCAweDQ0LCAweDYyLCAweDg1LCAweDYyLAotMHgwMCwgMHg5OSwgMHhjMCwgMHg0NiwgMHhjMSwgMHg2MiwgMHgwMCwgMHgyMSwgMHgwOCwgMHg0OCwgMHhjMCwgMHg0NiwKLTB4MDEsIDB4NjAsIDB4MzgsIDB4MmYsIDB4MDEsIDB4ZDAsIDB4YTgsIDB4MmYsIDB4MDUsIDB4ZDEsIDB4MDEsIDB4MjEsCi0weDAxLCAweDYwLCAweGE4LCAweDJmLCAweDAxLCAweGQxLCAweDAzLCAweDIxLCAweDAxLCAweDYwLCAweDAxLCAweDk4LAotMHgwMiwgMHhiMCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgzNCwgMHg2ZSwgMHgyMSwgMHg0MCwKLTB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4OTAsIDB4YjUsIDB4MDcsIDB4MWMsCi0weDEyLCAweDRjLCAweDIxLCAweDY4LCAweDEyLCAweDQ4LCAweDgxLCAweDQyLCAweDBiLCAweGQwLCAweDAwLCAweDIzLAotMHgyMSwgMHgxYywgMHhlMiwgMHgxZCwgMHhjMSwgMHgzMiwgMHgwMCwgMHhlMCwKLTB4MDgsIDB4YzEsIDB4OTEsIDB4NDIsIDB4ZmMsIDB4ZDMsIDB4MjAsIDB4NjAsIDB4YzgsIDB4MjAsIDB4YTAsIDB4ODAsCi0weDY3LCAweDcyLCAweDM4LCAweDAxLCAweDAwLCAweGYwLCAweDE4LCAweGY4LCAweDI3LCAweDcyLCAweDBhLCAweDQ4LAotMHhjMCwgMHg0NiwgMHhlMCwgMHg2MCwgMHgwOSwgMHgyZiwgMHgwMCwgMHhkYiwgMHgwMCwgMHgyNywgMHhlMCwgMHgxOSwKLTB4MDEsIDB4N2QsIDB4MDEsIDB4MzEsIDB4MDEsIDB4NzUsIDB4ZTAsIDB4ODgsIDB4MDEsIDB4MzAsIDB4ZTAsIDB4ODAsCi0weDAxLCAweDIwLCAweDkwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDAwLCAweDgwLAotMHhlZSwgMHhmZiwgMHhjMCwgMHhkMCwgMHgwOCwgMHgxMCwgMHgwMCwgMHgwMywgMHg4MCwgMHhiNCwgMHgwOCwgMHg0YSwKLTB4ZDEsIDB4MWQsIDB4ODksIDB4MzEsIDB4MGIsIDB4N2EsIDB4MjAsIDB4MmIsIDB4MDEsIDB4ZDMsIDB4MDAsIDB4MjMsCi0weDBiLCAweDcyLCAweDA3LCAweDFjLCAweDA4LCAweDdhLCAweDQzLCAweDFjLCAweDBiLCAweDcyLCAweDgwLCAweDE4LAotMHg5MCwgMHgzMCwgMHg0NywgMHg3MiwgMHg4MCwgMHhiYywgMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwKLTB4MDcsIDB4NDksIDB4MDEsIDB4MjIsIDB4MTIsIDB4MDQsIDB4MDgsIDB4NjgsIDB4MDIsIDB4NDAsIDB4MDEsIDB4MjAsCi0weDAwLCAweDJhLCAweDA2LCAweGQxLCAweDBhLCAweDY4LCAweDEyLCAweDBjLCAweDAyLCAweGQxLCAweDA5LCAweDY4LAotMHg4OSwgMHgwYSwgMHgwMCwgMHhkMiwgMHgwMCwgMHgyMCwgMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwKLTB4OTAsIDB4YjUsIDB4MDcsIDB4MWMsIDB4MDksIDB4NGMsIDB4MzgsIDB4MWMsIDB4MjEsIDB4MWMsIDB4ZmMsIDB4ZjcsCi0weDkxLCAweGZmLCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAweDBlLCAweGY4LCAweDAxLCAweDIzLCAweGQ4LCAweDQyLAotMHgwMSwgMHhkMSwgMHgwMCwgMHgwYywgMHhlMCwgMHg4MCwgMHgwMCwgMHgyMSwgMHgyMCwgMHgxYywgMHhmYywgMHhmNywKLTB4YzUsIDB4ZmUsIDB4OTAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4YzQsIDB4NjYsIDB4MjEsIDB4NDAsCi0weGY4LCAweGI1LCAweDA3LCAweDFjLCAweDc5LCAweDdhLCAweDc2LCAweDQ4LCAweDAwLCAweDIzLCAweDc2LCAweDRjLAotMHgwMSwgMHgyOSwgMHg1ZCwgMHhkMSwgMHhhMiwgMHg4OCwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MiwgMHhhMSwgMHg4OSwKLTB4OGEsIDB4NDIsIDB4NzQsIDB4ZGEsIDB4ZmEsIDB4N2EsIDB4MDAsIDB4MmEsIDB4MTUsIDB4ZDAsIDB4N2EsIDB4NmMsCi0weDAwLCAweDJhLCAweDEyLCAweGQwLCAweDhhLCAweDQyLCAweDEwLCAweGQ4LCAweDAwLCAweDlhLCAweDUxLCAweDFjLAotMHhhMSwgMHg4MCwgMHhhMSwgMHg4OCwgMHhjMCwgMHg0NiwgMHg0MSwgMHg4MSwgMHg3OCwgMHg2YywgMHg2YiwgMHg0ZSwKLTB4YzAsIDB4NDYsIDB4ZjAsIDB4ODAsIDB4YTAsIDB4NmEsIDB4NTgsIDB4MjMsIDB4NzksIDB4NmMsIDB4NTksIDB4NDMsCi0weDQwLCAweDE4LCAweGMxLCAweDFhLCAweDI4LCAweGUwLCAweDIyLCAweDg4LCAweDAxLCAweDMyLCAweDEyLCAweDA0LAotMHgxMiwgMHgwYywgMHgyMiwgMHg4MCwgMHg4YSwgMHg0MiwgMHgwMCwgMHhkYiwgMHgyMywgMHg4MCwgMHgwMCwgMHgyMiwKLTB4MDAsIDB4MjksIDB4NjksIDB4ZGQsIDB4NWYsIDB4NGMsIDB4YTQsIDB4NmEsIDB4NWUsIDB4NGIsIDB4MWQsIDB4ODgsCi0weDU4LCAweDIzLCAweDZiLCAweDQzLCAweGUzLCAweDE4LCAweGRlLCAweDFkLCAweDAxLCAweDM2LCAweDAxLCAweDIzLAotMHg5YiwgMHgwNywgMHgzMywgMHg0MywgMHgxYiwgMHg2OCwgMHgxYiwgMHgwNiwgMHgxNSwgMHhkMSwgMHg1OCwgMHg0OSwKLTB4MDAsIDB4OWEsIDB4MDEsIDB4MzIsIDB4OGEsIDB4ODAsIDB4OGEsIDB4ODgsIDB4YzAsIDB4NDYsIDB4NDIsIDB4ODEsCi0weDA4LCAweDg4LCAweDAxLCAweDMwLCAweDU0LCAweDRlLCAweGMwLCAweDQ2LCAweGYwLCAweDgwLCAweDU4LCAweDIwLAotMHg2OCwgMHg0MywgMHgyMSwgMHgxOCwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHgzOSwgMHhmYiwgMHhmMCwgMHg4OCwKLTB4MDAsIDB4MDQsIDB4MDAsIDB4MTQsIDB4OTUsIDB4ZTAsIDB4NGQsIDB4NGIsIDB4MDEsIDB4MzUsIDB4MmQsIDB4MDQsCi0weDJkLCAweDBjLCAweDFkLCAweDgwLCAweDhkLCAweDQyLCAweDAxLCAweGRiLCAweDAwLCAweDI1LCAweDFkLCAweDgwLAotMHgwMSwgMHgzMiwgMHgxMiwgMHgwNCwgMHgxMiwgMHgxNCwgMHg5MSwgMHg0MiwgMHhjZSwgMHhkYywgMHg4MSwgMHhlMCwKLTB4ZTEsIDB4ODgsIDB4ZTIsIDB4ODksIDB4OTEsIDB4NDIsIDB4MTgsIDB4ZGEsIDB4ZjksIDB4N2EsIDB4MDAsIDB4MjksCi0weDJmLCAweGQwLCAweDc5LCAweDZjLCAweDQ5LCAweDA0LCAweDQ5LCAweDBjLCAweDc5LCAweDY0LCAweDJhLCAweGQwLAotMHhlMiwgMHg4OSwgMHg5MSwgMHg0MiwgMHgyNywgMHhkOCwgMHhlMSwgMHg4OCwgMHgwMSwgMHgzMSwgMHhlMSwgMHg4MCwKLTB4ZTEsIDB4ODgsIDB4YzAsIDB4NDYsIDB4ODEsIDB4ODEsIDB4MDEsIDB4MjMsIDB4ZGIsIDB4MDMsIDB4NzgsIDB4NmMsCi0weDE4LCAweDQzLCAweDNhLCAweDRlLCAweGMwLCAweDQ2LCAweGYwLCAweDgwLCAweDAwLCAweGUwLCAweDYzLCAweGUwLAotMHhlMCwgMHg2YSwgMHg3OSwgMHg2YywgMHg0YiwgMHgwMCwgMHg1OSwgMHgxOCwgMHg0OSwgMHgwMSwgMHg0MCwgMHgxOCwKLTB4YzEsIDB4MWYsIDB4NTksIDB4MzksIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4MGYsIDB4ZmIsIDB4ZTAsIDB4NmEsCi0weDc5LCAweDZjLCAweDRhLCAweDAwLCAweDUyLCAweDE4LCAweDUyLCAweDAxLCAweDgwLCAweDE4LCAweDAxLCAweDM5LAotMHgwOSwgMHgwNCwgMHgwOSwgMHgwYywgMHg2MCwgMHgzOCwgMHgwMCwgMHhmMCwgMHg4OSwgMHhmYiwgMHhiNiwgMHhlNywKLTB4NGEsIDB4ZTAsIDB4NjEsIDB4ODgsIDB4MDEsIDB4MzEsIDB4MDksIDB4MDQsCi0weDA5LCAweDBjLCAweDYxLCAweDgwLCAweGUyLCAweDg5LCAweDkxLCAweDQyLCAweDAwLCAweGRiLCAweDYzLCAweDgwLAotMHgwMCwgMHgyMSwgMHgwMCwgMHgyYSwgMHgzZSwgMHhkZCwgMHgyNCwgMHg0YywgMHhlNCwgMHg2YSwgMHgyMywgMHg0YiwKLTB4NWQsIDB4ODgsIDB4NmIsIDB4MDAsIDB4NWIsIDB4MTksIDB4NWIsIDB4MDEsIDB4ZTMsIDB4MTgsIDB4ZGUsIDB4MWQsCi0weDAxLCAweDM2LCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweDMzLCAweDQzLCAweDFiLCAweDY4LCAweDFiLCAweDA2LAotMHgyMCwgMHhkMSwgMHgxYywgMHg0ZSwgMHhmMSwgMHg4OCwgMHgwMSwgMHgzMSwgMHhmMSwgMHg4MCwgMHhmMSwgMHg4OCwKLTB4YzAsIDB4NDYsIDB4ODEsIDB4ODEsIDB4NzAsIDB4ODgsIDB4MDEsIDB4MjMsIDB4ZGIsIDB4MDMsIDB4MDEsIDB4MzAsCi0weDE4LCAweDQzLCAweDE3LCAweDQ5LCAweGMwLCAweDQ2LCAweGM4LCAweDgwLCAweDY4LCAweDAwLCAweDQwLCAweDE5LAotMHg0MCwgMHgwMSwgMHgyMSwgMHgxOCwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHhjZiwgMHhmYSwgMHg3MSwgMHg4OCwKLTB4NGEsIDB4MDAsIDB4NTIsIDB4MTgsIDB4NTIsIDB4MDEsIDB4ZjAsIDB4NmEsIDB4ODAsIDB4MTgsIDB4MDAsIDB4ZjAsCi0weDRkLCAweGZiLCAweDBlLCAweDQ5LCAweGM4LCAweDg4LCAweDc5LCAweGU3LCAweDBiLCAweDRiLCAweDAxLCAweDM1LAotMHgyZCwgMHgwNCwgMHgyZCwgMHgwYywgMHg1ZCwgMHg4MCwgMHg5NSwgMHg0MiwgMHgwMSwgMHhkYiwgMHgwMCwgMHgyNSwKLTB4NWQsIDB4ODAsIDB4MDEsIDB4MzEsIDB4MDksIDB4MDQsIDB4MDksIDB4MTQsIDB4OGEsIDB4NDIsIDB4YzIsIDB4ZGMsCi0weDAxLCAweDg5LCAweDAxLCAweDMxLCAweDAxLCAweDgxLCAweDAwLCAweDIwLCAweGMwLCAweDQzLCAweGY4LCAweGJjLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg0YywgMHgyYiwgMHgwMCwgMHg4MCwgMHg0YywgMHgyYSwgMHgwMCwgMHg4MCwKLTB4YzQsIDB4NjYsIDB4MjEsIDB4NDAsIDB4ZjAsIDB4YjQsIDB4MDYsIDB4MWMsIDB4MDEsIDB4MjMsIDB4ZGIsIDB4MDMsCi0weDMzLCAweDQwLCAweDAxLCAweDI0LCAweDQ0LCAweDRmLCAweDAwLCAweDIwLCAweDQ0LCAweDRhLCAweDQ1LCAweDRkLAotMHhkMSwgMHgxZCwgMHgzOSwgMHgzMSwgMHgwMCwgMHgyYiwgMHg0MSwgMHhkMCwgMHhlMywgMHgwMywgMHhmMywgMHgxYSwKLTB4NzMsIDB4ZDAsIDB4ZWUsIDB4ODksIDB4OWUsIDB4NDIsIDB4NzEsIDB4ZDMsIDB4ZWUsIDB4ODgsIDB4MDAsIDB4MmUsCi0weDZkLCAweGQwLCAweGVkLCAweDZhLCAweDVlLCAweDFlLCAweDczLCAweDAwLCAweDliLCAweDE5LCAweDViLCAweDAxLAotMHhlZCwgMHgxOCwgMHhhZSwgMHg2OCwgMHgzNiwgMHgwNiwgMHgzNiwgMHgwZSwgMHgwMywgMHgyZSwgMHgwMiwgMHhkMCwKLTB4Y2UsIDB4ODksIDB4MDEsIDB4MzYsIDB4Y2UsIDB4ODEsIDB4NDAsIDB4MzUsIDB4YWQsIDB4OGIsIDB4YWQsIDB4MDAsCi0weDM1LCAweDRlLCAweDc2LCAweDZhLCAweGMwLCAweDQ2LCAweDcwLCAweDUxLCAweDU1LCAweDg5LCAweDAxLCAweDM1LAotMHg1NSwgMHg4MSwgMHgzMiwgMHg0ZSwgMHhmMiwgMHg2YSwgMHhkMiwgMHgxOCwgMHg5MCwgMHg2MCwgMHhmMiwgMHg2YSwKLTB4ZDIsIDB4MTgsIDB4OTAsIDB4NjMsIDB4ZjIsIDB4NmEsIDB4ZDIsIDB4MTgsIDB4ZDAsIDB4NjMsIDB4ZjIsIDB4NmEsCi0weGQyLCAweDE4LCAweDEwLCAweDY0LCAweGYyLCAweDZhLCAweGQyLCAweDE4LCAweDUwLCAweDY0LCAweGYyLCAweDZhLAotMHhkMiwgMHgxOCwgMHg5MCwgMHg2NCwgMHhmMiwgMHg2YSwgMHhkMiwgMHgxOCwgMHhkMCwgMHg2NCwgMHhmMCwgMHg4OCwKLTB4MDEsIDB4MzgsIDB4ZjAsIDB4ODAsIDB4ZjAsIDB4ODgsIDB4YzAsIDB4NDYsIDB4ODgsIDB4ODEsIDB4MjQsIDB4NDksCi0weDAwLCAweDI4LCAweDM5LCAweGQxLCAweDRmLCAweDgwLCAweDM3LCAweGUwLCAweDAwLCAweDJlLCAweDM4LCAweGQ5LAotMHhhYiwgMHg4OSwgMHhiMywgMHg0MiwgMHgzMCwgMHhkMywgMHhhYiwgMHg4OCwgMHgwMCwgMHgyYiwgMHgyYywgMHhkMCwKLTB4NTMsIDB4ODksIDB4MDEsIDB4MzMsIDB4NTMsIDB4ODEsIDB4MmEsIDB4MWMsIDB4YWQsIDB4NmEsIDB4NTgsIDB4MjMsCi0weDAxLCAweDNlLCAweDczLCAweDQzLCAweGVkLCAweDE4LCAweGFlLCAweDY4LCAweDM2LCAweDA2LCAweDM2LCAweDBlLAotMHgwMywgMHgyZSwgMHgwMiwgMHhkMCwgMHhjZSwgMHg4OSwgMHgwMSwgMHgzNiwgMHhjZSwgMHg4MSwgMHhhOCwgMHg2MCwKLTB4OTUsIDB4NmEsIDB4ZWQsIDB4MTgsIDB4YTgsIDB4NjMsIDB4OTUsIDB4NmEsIDB4ZWQsIDB4MTgsIDB4ZTgsIDB4NjMsCi0weDk1LCAweDZhLCAweGVkLCAweDE4LCAweDI4LCAweDY0LCAweDk1LCAweDZhLCAweGVkLCAweDE4LCAweDY4LCAweDY0LAotMHg5NSwgMHg2YSwgMHhlZCwgMHgxOCwgMHhhOCwgMHg2NCwgMHg5NSwgMHg2YSwgMHhlYiwgMHgxOCwgMHhkOCwgMHg2NCwKLTB4OTAsIDB4ODgsIDB4MDEsIDB4MzgsIDB4OTAsIDB4ODAsIDB4OTAsIDB4ODgsIDB4YzAsIDB4NDYsIDB4NDgsIDB4ODEsCi0weDAwLCAweDI4LCAweDAzLCAweGQxLCAweDAxLCAweGUwLCAweDA0LCAweGUwLCAweDAzLCAweGUwLCAweDE3LCAweDgwLAotMHgyMCwgMHgxYywgMHhmMCwgMHhiYywgMHg3MCwgMHg0NywgMHhjYSwgMHg4OSwgMHgwMSwgMHgzMiwgMHhjYSwgMHg4MSwKLTB4ZjksIDB4ZTcsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MmIsIDB4MDAsIDB4ODAsCi0weDRjLCAweDJhLCAweDAwLCAweDgwLCAweDAwLCAweGI1LCAweDAwLCAweDIxLCAweDQxLCAweDYwLCAweDEwLCAweDQ5LAotMHg0YSwgMHg2OCwgMHgwMCwgMHgyYSwgMHgxMCwgMHhkMSwgMHhjYSwgMHg2OCwgMHgwMCwgMHgyYSwgMHgwNCwgMHhkMCwKLTB4Y2EsIDB4MWQsIDB4MTksIDB4MzIsIDB4MTIsIDB4NzksIDB4MDAsIDB4MmEsIDB4MDgsIDB4ZDAsIDB4NGEsIDB4NjksCi0weDAwLCAweDJhLCAweDBiLCAweGQxLCAweDg4LCAweDYxLCAweDQ4LCAweDYxLAotMHgwMCwgMHhmMCwgMHgxMCwgMHhmOCwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg0YSwgMHg2OSwgMHgwMCwgMHgyYSwKLTB4MDIsIDB4ZDEsIDB4ODgsIDB4NjEsIDB4NDgsIDB4NjEsIDB4ZjcsIDB4ZTcsIDB4OGEsIDB4NjksIDB4YzAsIDB4NDYsCi0weDUwLCAweDYwLCAweDg4LCAweDYxLCAweGYyLCAweGU3LCAweDAwLCAweDAwLCAweDZjLCAweDA2LCAweDAwLCAweDgwLAotMHhiMCwgMHhiNSwgMHgyYSwgMHg0OCwgMHg0MCwgMHg2OSwgMHgwMCwgMHgyOCwgMHg0YywgMHhkMCwgMHgwOCwgMHgyMiwKLTB4YzEsIDB4NjgsIDB4MGEsIDB4NDAsIDB4MDAsIDB4MjcsIDB4MjcsIDB4NGIsIDB4ZDksIDB4MWQsIDB4YjksIDB4MzEsCi0weDAwLCAweDJhLCAweDExLCAweGQwLCAweDA0LCAweDIyLCAweDI1LCAweDRjLCAweGMwLCAweDQ2LCAweDBjLCAweDYxLAotMHgyNCwgMHg0YywgMHhjMCwgMHg0NiwgMHg0YywgMHg2MiwgMHgyNCwgMHg0YywgMHhjMCwgMHg0NiwgMHg4YywgMHg2MiwKLTB4MjMsIDB4NGMsIDB4YzAsIDB4NDYsIDB4Y2MsIDB4NjIsIDB4MjMsIDB4NGMsIDB4YzAsIDB4NDYsIDB4MGMsIDB4NjMsCi0weDRmLCAweDYzLCAweDEyLCAweGUwLCAweDA1LCAweDIyLCAweDIxLCAweDRjLCAweGMwLCAweDQ2LCAweDBjLCAweDYxLAotMHgyMCwgMHg0YywgMHhjMCwgMHg0NiwgMHg0YywgMHg2MiwgMHgyMCwgMHg0YywgMHhjMCwgMHg0NiwgMHg4YywgMHg2MiwKLTB4MWYsIDB4NGMsIDB4YzAsIDB4NDYsIDB4Y2MsIDB4NjIsIDB4MWYsIDB4NGMsIDB4YzAsIDB4NDYsIDB4MGMsIDB4NjMsCi0weDFlLCAweDRjLCAweGMwLCAweDQ2LCAweDRjLCAweDYzLCAweDQwLCAweDI0LCAweGNjLCAweDgyLCAweDRmLCAweDgzLAotMHgxYywgMHg0ZiwgMHgwMCwgMHgyMSwgMHgwMCwgMHgyYSwgMHgwYywgMHhkOSwgMHg4YywgMHgwMCwgMHgwNSwgMHgxOSwKLTB4NmQsIDB4NmEsIDB4N2QsIDB4NDAsIDB4ZTQsIDB4MTgsIDB4ZmYsIDB4MzQsIDB4MDEsIDB4MzQsIDB4NjUsIDB4NjIsCi0weDAxLCAweDMxLCAweDkxLCAweDQyLCAweGY0LCAweGQzLCAweDEwLCAweDI5LCAweDA3LCAweGQyLCAweDhhLCAweDAwLAotMHhkMiwgMHgxOCwgMHhmZiwgMHgzMiwgMHgwMSwgMHgzMiwgMHg1NywgMHg2MiwgMHgwMSwgMHgzMSwgMHgxMCwgMHgyOSwKLTB4ZjcsIDB4ZDMsIDB4MTEsIDB4NDksIDB4MDAsIDB4ZjAsIDB4MjIsIDB4ZjgsIDB4YjAsIDB4YmMsIDB4MDgsIDB4YmMsCi0weDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDZjLCAweDA2LCAweDAwLCAweDgwLCAweGFjLCAweGFiLCAweDIwLCAweDQwLAotMHgyOCwgMHgwMSwgMHg0MCwgMHgwMCwgMHgwMSwgMHgyMywgMHg0NSwgMHg2NywgMHg4OSwgMHhhYiwgMHhjZCwgMHhlZiwKLTB4ZmUsIDB4ZGMsIDB4YmEsIDB4OTgsIDB4NzYsIDB4NTQsIDB4MzIsIDB4MTAsIDB4MjAsIDB4MDEsIDB4NDAsIDB4MDAsCi0weDY3LCAweDQ1LCAweDIzLCAweDAxLCAweGVmLCAweGNkLCAweGFiLCAweDg5LCAweDk4LCAweGJhLCAweGRjLCAweGZlLAotMHgxMCwgMHgzMiwgMHg1NCwgMHg3NiwgMHhjMywgMHhkMiwgMHhlMSwgMHhmMCwgMHgzNiwgMHgzNiwgMHgzNiwgMHgzNiwKLTB4MzAsIDB4ODAsIDB4MjAsIDB4NDAsIDB4YjAsIDB4YjUsIDB4MGYsIDB4MWMsIDB4MTUsIDB4NGQsIDB4ZTksIDB4MWQsCi0weGM5LCAweDMxLCAweDE1LCAweDRjLCAweDIzLCAweDFjLCAweDE1LCAweDRhLCAweDAwLCAweDIwLCAweGZjLCAweGY3LAotMHg0NCwgMHhmYiwgMHhlOSwgMHgxZCwgMHhmZiwgMHgzMSwgMHgxZSwgMHgzMSwgMHgyMywgMHgxYywgMHgwZCwgMHgxYywKLTB4MTEsIDB4NGEsIDB4MDEsIDB4MjAsIDB4ZmMsIDB4ZjcsIDB4M2IsIDB4ZmIsIDB4MjksIDB4MWMsIDB4MjMsIDB4MWMsCi0weDBlLCAweDRhLCAweDAwLCAweDIwLCAweGZjLCAweGY3LCAweDM1LCAweGZiLCAweDM5LCAweDFjLCAweDIzLCAweDFjLAotMHgwYywgMHg0YSwgMHgwMSwgMHgyMCwgMHhmYywgMHhmNywgMHgyZiwgMHhmYiwgMHgwMCwgMHgyMSwgMHgwYiwgMHg0OCwKLTB4YzIsIDB4MWQsIDB4MTksIDB4MzIsIDB4NTEsIDB4NzEsIDB4MDEsIDB4MjEsIDB4ZmYsIDB4MzAsIDB4MDEsIDB4MzAsCi0weDQxLCAweDYyLCAweDA4LCAweDFjLCAweGIwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLAotMHhhYywgMHhhYiwgMHgyMCwgMHg0MCwgMHg3NSwgMHgwOCwgMHhmZiwgMHhmZiwgMHgyOCwgMHgwMCwgMHgwMywgMHgwMCwKLTB4NDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MDcsIDB4MDAsIDB4NmMsIDB4MDYsIDB4MDAsIDB4ODAsCi0weGYwLCAweGI1LCAweDM3LCAweDRhLCAweDUwLCAweDY5LCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweDA4LCAweDMwLAotMHgxOCwgMHg0MywgMHgwMCwgMHg2OCwgMHgwMSwgMHgwNiwgMHgwOSwgMHgwZSwgMHgzMywgMHg0YiwgMHgwMSwgMHgyOSwKLTB4NDksIDB4ZDEsIDB4MWYsIDB4NjgsIDB4MTksIDB4MWMsIDB4MzIsIDB4NGIsIDB4OWYsIDB4NDIsIDB4MDQsIDB4ZDEsCi0weGZmLCAweGY3LCAweDNlLCAweGZmLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDIzLAotMHg5ZiwgMHgwMCwgMHhjYywgMHg1OSwgMHg1NSwgMHg2OSwgMHhlZiwgMHgxOSwgMHgzYywgMHg2MSwgMHgwMSwgMHgzMywKLTB4MDUsIDB4MmIsIDB4ZjcsIDB4ZDMsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MDIsIDB4MDIsIDB4MjMsIDB4MTgsIDB4NDMsCi0weDUzLCAweDY5LCAweGMwLCAweDQ2LCAweDk4LCAweDYwLCAweDUwLCAweDY5LCAweDA4LCAweDIzLCAweGMyLCAweDY4LAotMHgxMywgMHg0MCwgMHgyNSwgMHg0ZiwgMHhmYSwgMHgxZCwgMHhiOSwgMHgzMiwgMHgwMCwgMHgyYiwgMHgwMiwgMHhkMCwKLTB4MDQsIDB4MjMsIDB4MjMsIDB4NGMsIDB4MDEsIDB4ZTAsIDB4MDUsIDB4MjMsIDB4MjIsIDB4NGMsIDB4YzAsIDB4NDYsCi0weDE0LCAweDYxLCAweDQwLCAweDI0LCAweGQ0LCAweDgyLCAweDAwLCAweDI0LCAweDU0LCAweDgzLCAweDIwLCAweDRjLAotMHgwMCwgMHgyMiwgMHgwMCwgMHgyYiwgMHgwYywgMHhkOSwgMHg5NSwgMHgwMCwKLTB4NDYsIDB4MTksIDB4NzYsIDB4NmEsIDB4NjYsIDB4NDAsIDB4ZWQsIDB4MTksIDB4ZmYsIDB4MzUsIDB4MDEsIDB4MzUsCi0weDZlLCAweDYyLCAweDAxLCAweDMyLCAweDlhLCAweDQyLCAweGY0LCAweGQzLCAweDEwLCAweDJhLCAweDA3LCAweGQyLAotMHg5MywgMHgwMCwgMHhkYiwgMHgxOSwgMHhmZiwgMHgzMywgMHgwMSwgMHgzMywgMHg1YywgMHg2MiwgMHgwMSwgMHgzMiwKLTB4MTAsIDB4MmEsIDB4ZjcsIDB4ZDMsIDB4ZmYsIDB4ZjcsIDB4NzAsIDB4ZmYsIDB4YmMsIDB4ZTcsIDB4MDAsIDB4MjEsCi0weDhmLCAweDAwLCAweGRjLCAweDU5LCAweDU1LCAweDY5LCAweGVmLCAweDE5LCAweDdjLCAweDYyLCAweDAxLCAweDMxLAotMHgwNSwgMHgyOSwgMHhmNywgMHhkMywgMHgwMCwgMHgwYSwgMHgwMCwgMHgwMiwgMHgwMywgMHgyMywgMHgxOCwgMHg0MywKLTB4NTEsIDB4NjksIDB4YzAsIDB4NDYsIDB4ODgsIDB4NjAsIDB4NTAsIDB4NjksIDB4NDAsIDB4NjgsIDB4YzAsIDB4NDYsCi0weDUwLCAweDYxLCAweDA5LCAweDQ4LCAweGZjLCAweGY3LCAweGE0LCAweGZhLCAweGE0LCAweGU3LCAweDAwLCAweDAwLAotMHg2YywgMHgwNiwgMHgwMCwgMHg4MCwgMHgzMCwgMHg4MCwgMHgyMCwgMHg0MCwgMHg2NywgMHg0NSwgMHgyMywgMHgwMSwKLTB4YWMsIDB4YWIsIDB4MjAsIDB4NDAsIDB4MjgsIDB4MDEsIDB4NDAsIDB4MDAsIDB4MjAsIDB4MDEsIDB4NDAsIDB4MDAsCi0weDVjLCAweDVjLCAweDVjLCAweDVjLCAweDExLCAweDMxLCAweGZmLCAweGZmLCAweGYwLCAweGI1LCAweDA3LCAweDFjLAotMHgzYiwgMHg0OCwgMHgzYywgMHg0YywgMHgwOCwgMHgyMSwgMHgyMCwgMHg2MCwgMHhhMSwgMHg4MCwgMHgwMCwgMHgyMCwKLTB4MjAsIDB4ODEsIDB4ZTEsIDB4ODAsIDB4NjAsIDB4ODEsIDB4MzksIDB4NDgsIDB4YzAsIDB4NDYsIDB4ZTAsIDB4NjAsCi0weDM4LCAweDQ4LCAweGMwLCAweDQ2LCAweDIwLCAweDYxLCAweDM4LCAweDQ4LCAweGMwLCAweDQ2LCAweDYwLCAweDYxLAotMHgzNywgMHg0OCwgMHhjMCwgMHg0NiwgMHhhMCwgMHg2MSwgMHgzNywgMHg0OCwgMHhjMCwgMHg0NiwgMHhlMCwgMHg2MSwKLTB4MzYsIDB4NDgsIDB4YzAsIDB4NDYsIDB4MjAsIDB4NjIsIDB4MzYsIDB4NDgsIDB4YzAsIDB4NDYsIDB4NjAsIDB4NjIsCi0weDM1LCAweDQ4LCAweGMwLCAweDQ2LCAweGEwLCAweDYyLCAweDM1LCAweDQ4LCAweGMwLCAweDQ2LCAweGUwLCAweDYyLAotMHgzNCwgMHg0OCwgMHhjMCwgMHg0NiwgMHgyMCwgMHg2MywgMHgzNCwgMHg0OCwgMHhjMCwgMHg0NiwgMHg2MCwgMHg2MywKLTB4MzMsIDB4NDgsIDB4YzAsIDB4NDYsIDB4YTAsIDB4NjMsIDB4MzMsIDB4NDgsIDB4YzAsIDB4NDYsIDB4ZTAsIDB4NjMsCi0weDMyLCAweDQ4LCAweGMwLCAweDQ2LCAweDIwLCAweDY0LCAweDMyLCAweDQ4LCAweGMwLCAweDQ2LCAweDYwLCAweDY0LAotMHgzMSwgMHg0OCwgMHhjMCwgMHg0NiwgMHhhMCwgMHg2NCwgMHgzMSwgMHg0OCwgMHhjMCwgMHg0NiwgMHhlMCwgMHg2NCwKLTB4MzAsIDB4NDgsIDB4YzAsIDB4NDYsIDB4MjAsIDB4NjUsIDB4MzAsIDB4NDksIDB4YzgsIDB4NjgsIDB4MDIsIDB4MDQsCi0weDg5LCAweDY5LCAweDRhLCAweDQwLCAweGUzLCAweDFkLCAweDc5LCAweDMzLCAweDA5LCAweDA0LCAweGM5LCAweDQzLAotMHhjMCwgMHg0MywgMHg0OCwgMHg0MCwgMHhlMSwgMHgxZCwgMHhiOSwgMHgzMSwgMHhkYSwgMHg2MywgMHgwOCwgMHg2MCwKLTB4MjksIDB4NGQsIDB4MjEsIDB4MWMsIDB4MmIsIDB4MWMsIDB4MjksIDB4NGEsIDB4MDAsIDB4MjAsIDB4ZmMsIDB4ZjcsCi0weDNlLCAweGZhLCAweDI4LCAweDRhLCAweGUxLCAweDFkLCAweGI1LCAweDMxLCAweDAxLCAweDIwLCAweDJiLCAweDFjLAotMHgwZSwgMHgxYywgMHhmYywgMHhmNywgMHgzNiwgMHhmYSwgMHgyNCwgMHg0YSwgMHgwMCwgMHgyMCwgMHgzMSwgMHgxYywKLTB4MmIsIDB4MWMsIDB4ZmMsIDB4ZjcsIDB4MzAsIDB4ZmEsIDB4ZTEsIDB4MWQsIDB4NGQsIDB4MzEsIDB4MmIsIDB4MWMsCi0weDIwLCAweDRhLCAweDAxLCAweDIwLCAweGZjLCAweGY3LCAweDI5LCAweGZhLCAweGUwLCAweDFkLCAweDVkLCAweDMwLAotMHgwMSwgMHg2OCwgMHgwMCwgMHgyOSwgMHhmYywgMHhkMCwgMHg2MCwgMHg2ZCwgMHhjMCwgMHg0NiwgMHgzOCwgMHg2NSwKLTB4MjAsIDB4NmUsIDB4YzAsIDB4NDYsIDB4NzgsIDB4NjUsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weDgwLCAweDAwLCAweDA4LCAweDAwLCAweDhjLCAweGI5LCAweDIwLCAweDQwLCAweDgxLCAweDgxLCAweDQ4LCAweGJkLAotMHg3OSwgMHg1NiwgMHgyMywgMHg4YywgMHg5MywgMHgwYywgMHg4MiwgMHg5NSwgMHgxZCwgMHgwZSwgMHgxMiwgMHhjZiwKLTB4OWIsIDB4M2IsIDB4YzAsIDB4ZTksIDB4ZTYsIDB4NTUsIDB4N2MsIDB4ODIsIDB4OTksIDB4ZjYsIDB4NzgsIDB4MDIsCi0weGQxLCAweGQ3LCAweDI1LCAweDczLCAweDcyLCAweDhjLCAweDMzLCAweDEwLCAweGY3LCAweDAzLCAweGYxLCAweDQyLAotMHg2YywgMHg5YiwgMHg0YSwgMHhhNywgMHg4MiwgMHg4ZSwgMHgyMywgMHhhOSwgMHg5MCwgMHhiMSwgMHg4MiwgMHg4ZSwKLTB4ZGMsIDB4M2YsIDB4ZmIsIDB4MjksIDB4MDAsIDB4NjIsIDB4MjIsIDB4NDUsIDB4ODgsIDB4MmIsIDB4ZjEsIDB4ODUsCi0weDEyLCAweDYxLCAweGQxLCAweDczLCAweDZlLCAweGIxLCAweDExLCAweDE2LCAweDA4LCAweDgzLCAweDIwLCAweDQwLAotMHg3NSwgMHgwOCwgMHhmZiwgMHhmZiwgMHg1NCwgMHgwMCwgMHgwMywgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMiwgMHgwMCwKLTB4MTQsIDB4MDAsIDB4MDMsIDB4MDAsIDB4ODAsIDB4YjUsIDB4MGYsIDB4MWMsIDB4MzksIDB4MWMsIDB4MDAsIDB4ZjAsCi0weDMzLCAweGY4LCAweDM4LCAweDFjLCAweGZmLCAweGY3LCAweDRjLCAweGZmLCAweDAzLCAweDQ4LCAweDAxLCAweDg5LAotMHgwMSwgMHgzMSwgMHgwMSwgMHg4MSwgMHg4MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwKLTB4MGMsIDB4MmIsIDB4MDAsIDB4ODAsIDB4OTAsIDB4YjUsIDB4MDQsIDB4MWMsCi0weDBmLCAweDFjLCAweDIwLCAweDFjLCAweDM5LCAweDFjLCAweDAwLCAweGYwLCAweDFmLCAweGY4LCAweGUwLCAweDY4LAotMHgwMSwgMHgwZSwgMHhmZiwgMHgyMiwgMHgxMiwgMHgwNCwgMHgwMiwgMHg0MCwgMHgxMiwgMHgwYSwgMHgxMSwgMHg0MywKLTB4ZmYsIDB4MjIsIDB4MTIsIDB4MDIsIDB4MDIsIDB4NDAsIDB4MTIsIDB4MDIsIDB4MTEsIDB4NDMsIDB4MDAsIDB4MDYsCi0weDA4LCAweDQzLCAweDM4LCAweDY1LCAweDIwLCAweDY5LCAweGMwLCAweDQ2LCAweDc4LCAweDY1LCAweDYwLCAweDY5LAotMHhjMCwgMHg0NiwgMHhiOCwgMHg2NSwgMHgwMywgMHg0OCwgMHgwMSwgMHg4OSwgMHgwMSwgMHgzMSwgMHgwMSwgMHg4MSwKLTB4OTAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MmIsIDB4MDAsIDB4ODAsCi0weDkwLCAweGI1LCAweDAwLCAweDIyLCAweDkzLCAweDAwLCAweDFmLCAweDE4LCAweGJmLCAweDY5LCAweDViLCAweDE4LAotMHg1ZiwgMHg2MiwgMHgwMSwgMHgzMiwgMHgwNSwgMHgyYSwgMHhmNywgMHhkMywgMHgwNywgMHg3YSwgMHhmYiwgMHgwOCwKLTB4MDMsIDB4ZDMsIDB4MDAsIDB4MjMsIDB4OTIsIDB4MDAsIDB4NTIsIDB4MTgsIDB4MTMsIDB4NjIsIDB4MDcsIDB4NmIsCi0weGMwLCAweDQ2LCAweDhmLCAweDYzLCAweGM3LCAweDZhLCAweGMwLCAweDQ2LCAweGNmLCAweDYzLCAweDg3LCAweDZiLAotMHhjMCwgMHg0NiwgMHgwZiwgMHg2NCwgMHg0NywgMHg2YiwgMHhjMCwgMHg0NiwgMHg0ZiwgMHg2NCwgMHgwNywgMHg2YywKLTB4YzAsIDB4NDYsIDB4OGYsIDB4NjQsIDB4YzIsIDB4NmIsIDB4YzAsIDB4NDYsIDB4Y2EsIDB4NjQsIDB4YzIsIDB4ODgsCi0weGMwLCAweDQ2LCAweDBhLCAweDgwLCAweDgyLCAweDdhLCAweDEyLCAweDA2LCAweDAzLCAweDdhLCAweDFiLCAweDA0LAotMHgxYSwgMHg0MywgMHhjMywgMHg4OCwgMHgxYiwgMHgwMiwgMHgxYSwgMHg0MywgMHg0MywgMHg3YSwgMHhkYiwgMHgwNywKLTB4MWEsIDB4NDMsIDB4OGEsIDB4NjAsIDB4MTcsIDB4MWMsIDB4ODMsIDB4N2EsIDB4NWEsIDB4MDgsIDB4MDUsIDB4ZDMsCi0weDE0LCAweDIyLCAweDFjLCAweDFjLCAweGEzLCAweDA4LCAweDAyLCAweGQyLCAweDE1LCAweDIyLCAweDAwLCAweGUwLAotMHgwMCwgMHgyMiwgMHgwMCwgMHg3YSwgMHg0MywgMHgwOCwgMHgxMCwgMHhkMywgMHhjMCwgMHgwOCwgMHgwMiwgMHhkMywKLTB4ODgsIDB4MjAsIDB4MTAsIDB4NDMsIDB4MDEsIDB4ZTAsIDB4ODAsIDB4MjAsIDB4MTAsIDB4NDMsIDB4M2EsIDB4MGEsCi0weDEyLCAweDAyLCAweDAxLCAweDIzLCAweDFhLCAweDQzLCAweGM4LCAweDYwLCAweDhhLCAweDYwLCAweDA4LCAweDFjLAotMHhmZiwgMHhmNywgMHg3OCwgMHhmZCwgMHgwNSwgMHhlMCwgMHgzOCwgMHgwYSwgMHgwMCwgMHgwMiwgMHgwMywgMHgyMywKLTB4MTgsIDB4NDMsIDB4ODgsIDB4NjAsIDB4Y2EsIDB4NjAsIDB4MDMsIDB4NDgsIDB4MDEsIDB4ODksIDB4MDEsIDB4MzEsCi0weDAxLCAweDgxLCAweDkwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDBjLCAweDJiLCAweDAwLCAweDgwLAotMHhmMCwgMHhiNCwgMHgwMiwgMHg2ZCwgMHgxNCwgMHg0YywgMHgxNSwgMHgxYywgMHhlNywgMHg2OSwgMHhiZCwgMHg0MCwKLTB4MTMsIDB4MWMsIDB4MjYsIDB4NmEsIDB4ZjMsIDB4NDAsIDB4NWQsIDB4NDAsIDB4MmUsIDB4MWMsIDB4NDUsIDB4NmQsCi0weGJkLCAweDQwLCAweDZlLCAweDQwLCAweDJiLCAweDFjLCAweDM1LCAweDFjLCAweGZkLCAweDQwLCAweDJmLCAweDFjLAotMHhiYiwgMHgwMCwgMHg2NSwgMHg2YSwgMHhlYiwgMHg1OCwgMHgwMCwgMHgyYiwgMHgwOCwgMHhkMCwgMHgyMywgMHg2OSwKLTB4MDEsIDB4MzcsIDB4OWYsIDB4NDIsIDB4MDAsIDB4ZDMsIDB4MDAsIDB4MjcsIDB4YmUsIDB4MDAsIDB4YWUsIDB4NTksCi0weDAwLCAweDJlLCAweGY3LCAweGQxLCAweGE0LCAweDY5LCAweGEyLCAweDQwLCAweDExLCAweDQzLCAweDA1LCAweDRiLAotMHgxOSwgMHg0MywgMHhiYSwgMHgwMCwgMHhhOSwgMHg1MCwgMHg0MCwgMHgzMCwgMHg4NywgMHg4MywgMHhmMCwgMHhiYywKLTB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4NGMsIDB4MmEsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsCi0weDgwLCAweGI0LCAweDAwLCAweDIyLCAweDAwLCAweDIzLCAweDAwLCAweDI5LCAweDA1LCAweGQ5LCAweDA3LCAweDc4LAotMHg3YSwgMHg0MCwgMHgwMSwgMHgzMCwgMHgwMSwgMHgzMywgMHg4YiwgMHg0MiwgMHhmOSwgMHhkMywgMHhkMCwgMHg0MywKLTB4MDAsIDB4MDYsIDB4MDAsIDB4MGUsIDB4ODAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4ZjAsIDB4YjUsIDB4MDcsIDB4MWMsCi0weDAwLCAweDI0LCAweGZmLCAweDI2LCAweDA5LCAweDM2LCAweDIwLCAweDFjLCAweDAwLCAweGYwLCAweDlhLCAweGY4LAotMHgwMCwgMHhmMCwgMHhiOCwgMHhmOSwgMHgwNSwgMHgxYywgMHgwMCwgMHhmMCwgMHhjNywgMHhmYSwgMHgzZCwgMHg3MCwKLTB4MjgsIDB4MWMsIDB4MDEsIDB4MzcsIDB4MDEsIDB4MzQsIDB4YjQsIDB4NDIsIDB4ZjEsIDB4ZDMsIDB4ZjAsIDB4YmMsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDgwLCAweGI1LCAweDAwLCAweGYwLCAweDkzLCAweGY4LCAweDAwLCAweGYwLAotMHhhNywgMHhmOSwgMHgwNywgMHgxYywgMHgwMCwgMHhmMCwgMHhiNiwgMHhmYSwgMHgzOCwgMHgwYSwgMHhmNiwgMHhkMywKLTB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4ZjMsIDB4YjUsIDB4ODIsIDB4YjAsIDB4MDIsIDB4OTgsCi0weDQxLCAweDAyLCAweDUzLCAweDIwLCAweDAwLCAweGYwLCAweDY0LCAweGY4LCAweDAwLCAweGYwLCAweGE4LCAweGZhLAotMHhmZiwgMHhmNywgMHhlOCwgMHhmZiwgMHgwMCwgMHgyNCwgMHgwMCwgMHgyMCwgMHgwMSwgMHg5MCwgMHgyZSwgMHgyMCwKLTB4MDAsIDB4OTAsIDB4MDAsIDB4MjUsIDB4MDAsIDB4MjcsIDB4MDIsIDB4OTgsIDB4MDEsIDB4MjgsIDB4MDQsIDB4ZDEsCi0weDAwLCAweDk4LCAweDg0LCAweDQyLCAweDAxLCAweGQzLCAweDAwLCAweDI2LAotMHgwOSwgMHhlMCwgMHgwMSwgMHg5OCwgMHg0MSwgMHgxYywgMHgwMSwgMHg5MSwgMHgwMCwgMHhmMCwgMHg2MCwgMHhmOCwKLTB4MDAsIDB4ZjAsIDB4N2UsIDB4ZjksIDB4MDYsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4OGQsIDB4ZmEsIDB4ZjgsIDB4MDAsCi0weDg2LCAweDQwLCAweDM1LCAweDQzLCAweDAxLCAweDM0LCAweDAxLCAweDM3LCAweDA0LCAweDJmLCAweGU2LCAweGQzLAotMHgwMywgMHg5OSwgMHgyMCwgMHhjMSwgMHgwMywgMHg5MSwgMHhmZiwgMHgyMywgMHgwOSwgMHgzMywgMHg5YywgMHg0MiwKLTB4ZGQsIDB4ZDMsIDB4MDQsIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4ZjAsIDB4YjUsCi0weDA0LCAweDFjLCAweDBmLCAweDFjLCAweDAxLCAweDJjLCAweDJhLCAweGQwLCAweDE2LCAweDQ4LCAweGMwLCAweDZmLAotMHg0MCwgMHgyMywgMHgwMSwgMHg2OCwgMHgxOSwgMHg0MywgMHgwMSwgMHg2MCwgMHgwMCwgMHgyNiwgMHgyMCwgMHhjZiwKLTB4YjEsIDB4MDAsIDB4ODQsIDB4MjAsIDB4MDAsIDB4ZjAsIDB4MjQsIDB4ZjgsIDB4MjgsIDB4MWMsIDB4MDAsIDB4ZjAsCi0weGRmLCAweGY5LCAweDI4LCAweDBhLCAweDAwLCAweGYwLCAweGRjLCAweGY5LCAweDI4LCAweDBjLCAweDAwLCAweGYwLAotMHhkOSwgMHhmOSwgMHgyOCwgMHgwZSwgMHgwMCwgMHhmMCwgMHhkNiwgMHhmOSwgMHgwMCwgMHhmMCwgMHg1YywgMHhmYSwKLTB4MDEsIDB4MzYsIDB4NDIsIDB4MmUsIDB4ZTksIDB4ZDMsIDB4NjEsIDB4MDIsIDB4ODMsIDB4MjAsIDB4MDAsIDB4ZjAsCi0weDBmLCAweGY4LCAweDAwLCAweGYwLCAweDUzLCAweGZhLCAweGZmLCAweGY3LCAweDkzLCAweGZmLCAweDA0LCAweDQ4LAotMHhjMCwgMHg2ZiwgMHg0MCwgMHgyMywgMHgwMSwgMHg2OCwgMHg5OSwgMHg0MywgMHgwMSwgMHg2MCwgMHhmMCwgMHhiYywKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4OTAsIDB4YjUsIDB4MDQsIDB4MWMsCi0weDBmLCAweDFjLCAweDAwLCAweGYwLCAweDU5LCAweGZhLCAweDIwLCAweDFjLCAweDAwLCAweGYwLCAweGI2LCAweGY5LAotMHgzOCwgMHgwYywgMHgwMCwgMHhmMCwgMHhiMywgMHhmOSwgMHgzOCwgMHgwYSwgMHgwMCwgMHhmMCwgMHhiMCwgMHhmOSwKLTB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4YWQsIDB4ZjksIDB4OTAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weDAwLCAweGI1LCAweDAxLCAweDFjLCAweDU0LCAweDIwLCAweGZmLCAweGY3LCAweGU3LCAweGZmLCAweDAwLCAweDIwLAotMHgwMCwgMHhmMCwgMHhhMiwgMHhmOSwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHhiNSwgMHgwMCwgMHhmMCwKLTB4M2QsIDB4ZmEsIDB4NTcsIDB4MjAsIDB4MDAsIDB4ZjAsIDB4OWEsIDB4ZjksIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weDkwLCAweGI1LCAweDA4LCAweDRmLCAweGZhLCAweDZmLCAweDIwLCAweDIzLCAweDE0LCAweDY4LCAweDljLCAweDQzLAotMHgxNCwgMHg2MCwgMHgyMywgMHgxYywgMHhmZiwgMHhmNywgMHg2NSwgMHhmZiwgMHhmOCwgMHg2ZiwgMHgyMCwgMHgyMywKLTB4MDEsIDB4NjgsIDB4MTksIDB4NDMsIDB4MDEsIDB4NjAsIDB4OTAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weDY4LCAweDBlLCAweDAwLCAweDgwLCAweDkwLCAweGI1LCAweDA4LCAweDRmLCAweGZhLCAweDZmLCAweDIwLCAweDIzLAotMHgxNCwgMHg2OCwgMHg5YywgMHg0MywgMHgxNCwgMHg2MCwgMHgyMywgMHgxYywgMHhmZiwgMHhmNywgMHg4NywgMHhmZiwKLTB4ZjgsIDB4NmYsIDB4MjAsIDB4MjMsIDB4MDEsIDB4NjgsIDB4MTksIDB4NDMsIDB4MDEsIDB4NjAsIDB4OTAsIDB4YmMsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweGYwLCAweGI1LCAweDA0LCAweDFjLAotMHgwZiwgMHgxYywgMHgxOCwgMHg0ZSwgMHhmMCwgMHg2ZiwgMHgyMCwgMHgyMywgMHgwMSwgMHg2OCwgMHg5OSwgMHg0MywKLTB4MDEsIDB4NjAsIDB4NjEsIDB4MDIsIDB4NTMsIDB4MjAsIDB4ZmYsIDB4ZjcsIDB4YTUsIDB4ZmYsIDB4MDAsIDB4ZjAsCi0weGU5LCAweGY5LCAweGZmLCAweGY3LCAweDI5LCAweGZmLCAweGY4LCAweDFkLCAweDA1LCAweDMwLCAweDAxLCAweDJjLAotMHgwMywgMHhkMSwgMHgyMiwgMHgyZiwgMHgwMSwgMHhkMywgMHgwMCwgMHgyNywgMHgwZiwgMHhlMCwgMHg0NCwgMHgxYywKLTB4ZmYsIDB4ZjcsIDB4YWEsIDB4ZmYsIDB4MDAsIDB4ZjAsIDB4YzgsIDB4ZjgsIDB4MDcsIDB4MWMsIDB4MDAsIDB4ZjAsCi0weGQ3LCAweGY5LCAweDIwLCAweDFjLCAweGZmLCAweGY3LCAweGEyLCAweGZmLCAweDAwLCAweGYwLCAweGMwLCAweGY4LAotMHgwNSwgMHgxYywgMHgwMCwgMHhmMCwgMHhjZiwgMHhmOSwgMHhmMCwgMHg2ZiwgMHgyMCwgMHgyMywgMHgwMSwgMHg2OCwKLTB4MTksIDB4NDMsIDB4MDEsIDB4NjAsIDB4MjgsIDB4MDIsIDB4MzgsIDB4NDMsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsCi0weDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweGYwLCAweGI1LCAweGMyLCAweGIwLAotMHgxNCwgMHgxYywgMHgwZCwgMHgxYywgMHgwNywgMHgxYywgMHgwMSwgMHgyZiwgMHgyZiwgMHhkMCwgMHg3OSwgMHgwMiwKLTB4MTksIDB4NGUsIDB4ZjAsIDB4NmYsIDB4MjAsIDB4MjMsIDB4MDIsIDB4NjgsIDB4OWEsIDB4NDMsIDB4MDIsIDB4NjAsCi0weDUzLCAweDIwLCAweGZmLCAweGY3LCAweDZiLCAweGZmLCAweDAwLCAweGYwLCAweGFmLCAweGY5LCAweGZmLCAweGY3LAotMHhlZiwgMHhmZSwgMHg2OCwgMHg0NiwgMHhmZiwgMHhmNywgMHhkNiwgMHhmZSwgMHg2YSwgMHg0NiwgMHhlOCwgMHgxZCwKLTB4MDUsIDB4MzAsIDB4MTQsIDB4NTQsIDB4MjEsIDB4MGEsIDB4NjgsIDB4NDQsIDB4NDEsIDB4NzAsIDB4NjgsIDB4NDYsCi0weDAwLCAweDk5LCAweDBjLCAweDMwLCAweGZmLCAweGY3LCAweGJhLCAweGZlLCAweDAyLCAweGFiLCAweDE4LCAweDcwLAotMHgwMCwgMHgyMCwgMHg1OCwgMHg3MCwgMHg2OCwgMHg0NiwgMHgwYywgMHgyMSwKLTB4ZmYsIDB4ZjcsIDB4YjIsIDB4ZmUsIDB4MDIsIDB4YWIsIDB4NTgsIDB4NzAsIDB4NjksIDB4NDYsIDB4MzgsIDB4MWMsCi0weGZmLCAweGY3LCAweDE1LCAweGZmLCAweGYwLCAweDZmLCAweDIwLCAweDIzLCAweDAxLCAweDY4LCAweDE5LCAweDQzLAotMHgwMSwgMHg2MCwgMHg0MiwgMHhiMCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwKLTB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4ZmYsIDB4YjUsIDB4YzIsIDB4YjAsIDB4MDcsIDB4MWMsIDB4MDEsIDB4MmYsCi0weDAxLCAweGQxLCAweDAxLCAweDIwLCAweDM2LCAweGUwLCAweDZiLCAweDQ2LCAweDAwLCAweDIwLCAweGM0LCAweDQzLAotMHgxMCwgMHhjMywgMHgwMSwgMHgzMCwgMHg0MiwgMHgyOCwgMHhmYiwgMHhkMywgMHg2OCwgMHg0NiwgMHgwYywgMHgzMCwKLTB4MDMsIDB4MWMsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MmEsIDB4MGEsIDB4ZDksIDB4MGUsIDB4ODgsIDB4YzAsIDB4NDYsCi0weDA2LCAweDcwLCAweDBlLCAweDg4LCAweDM2LCAweDEyLCAweDQ2LCAweDcwLCAweDAyLCAweDMwLCAweDAyLCAweDMxLAotMHgwMiwgMHgzNCwgMHg5NCwgMHg0MiwgMHhmNCwgMHhkMywgMHgwMCwgMHg5MiwgMHgxOCwgMHgxYywgMHgxMSwgMHgxYywKLTB4ZmYsIDB4ZjcsIDB4N2MsIDB4ZmUsIDB4MDQsIDB4MWMsIDB4MDAsIDB4MjAsIDB4MDEsIDB4OTAsIDB4MDIsIDB4YWIsCi0weDFjLCAweDcwLCAweDU4LCAweDcwLCAweDlkLCAweDcwLCAweDY4LCAweDQ2LCAweDBjLCAweDIxLCAweGZmLCAweGY3LAotMHg3MSwgMHhmZSwgMHgwMiwgMHhhYiwgMHg1OCwgMHg3MCwgMHg0NSwgMHg5YiwgMHgxZCwgMHgwNiwgMHgyZCwgMHgwZSwKLTB4YWMsIDB4NDIsIDB4MDMsIDB4ZDEsIDB4NjksIDB4NDYsIDB4MzgsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4M2UsIDB4ZmYsCi0weDAxLCAweDIwLCAweGFjLCAweDQyLCAweDAwLCAweGQxLCAweDAwLCAweDIwLCAweDQ2LCAweGIwLCAweGYwLCAweGJjLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHhiMCwgMHhiNSwgMHhjMiwgMHhiMCwgMHgwZiwgMHgxYywgMHg0MSwgMHgwMiwKLTB4MTQsIDB4NGMsIDB4ZTAsIDB4NmYsIDB4MjAsIDB4MjMsIDB4MDIsIDB4NjgsIDB4OWEsIDB4NDMsIDB4MDIsIDB4NjAsCi0weDUzLCAweDIwLCAweGZmLCAweGY3LCAweGVmLCAweGZlLCAweDAwLCAweGYwLCAweDMzLCAweGY5LCAweGZmLCAweGY3LAotMHg3MywgMHhmZSwgMHg2OCwgMHg0NiwgMHhmZiwgMHhmNywgMHg1YSwgMHhmZSwgMHhlMCwgMHg2ZiwgMHgyMCwgMHgyMywKLTB4MDEsIDB4NjgsIDB4MTksIDB4NDMsIDB4MDIsIDB4YWQsIDB4MDEsIDB4NjAsIDB4NmQsIDB4NzgsIDB4MDAsIDB4MjQsCi0weDAyLCAweGFiLCAweDVjLCAweDcwLCAweDY4LCAweDQ2LCAweDBjLCAweDIxLCAweGZmLCAweGY3LCAweDNjLCAweGZlLAotMHhhOCwgMHg0MiwgMHgwMiwgMHhkMSwgMHgwMCwgMHg5OCwgMHg4NywgMHg0MiwgMHgwMSwgMHhkMywgMHgyMCwgMHgxYywKLTB4MDAsIDB4ZTAsIDB4MDEsIDB4MjAsIDB4NDIsIDB4YjAsIDB4YjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weDY4LCAweDBlLCAweDAwLCAweDgwLCAweGZjLCAweDQ2LCAweDYwLCAweDQ3LCAweDAwLCAweDAwLCAweGEwLCAweGUzLAotMHhiNCwgMHgyMiwgMHg5ZiwgMHhlNSwgMHhiNCwgMHgzMiwgMHg5ZiwgMHhlNSwgMHgwMSwgMHgxMCwgMHhhMCwgMHhlMywKLTB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4YTAsIDB4ZTMsCi0weDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweDkzLCAweGU1LAotMHg4MSwgMHgwMywgMHg4MCwgMHhlMSwgMHgwMSwgMHgxMCwgMHhhMCwgMHhlMywgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwKLTB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsCi0weDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweDkzLCAweGU1LCAweDAxLCAweDAzLCAweDgwLCAweGUxLAotMHgwMSwgMHgxMCwgMHhhMCwgMHhlMywgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwKLTB4MDAsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsCi0weDAwLCAweDEwLCAweDkzLCAweGU1LCAweDgxLCAweDAyLCAweDgwLCAweGUxLCAweDAxLCAweDEwLCAweGEwLCAweGUzLAotMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHhhMCwgMHhlMywKLTB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4OTMsIDB4ZTUsCi0weDAxLCAweDAyLCAweDgwLCAweGUxLCAweDAxLCAweDEwLCAweGEwLCAweGUzLCAweDAwLCAweDEwLCAweDgyLCAweGU1LAotMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHhhMCwgMHhlMywgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwKLTB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4OTMsIDB4ZTUsIDB4ODEsIDB4MDEsIDB4ODAsIDB4ZTEsCi0weDAxLCAweDEwLCAweGEwLCAweGUzLCAweDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweDgyLCAweGU1LAotMHgwMCwgMHgxMCwgMHhhMCwgMHhlMywgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwKLTB4MDAsIDB4MTAsIDB4OTMsIDB4ZTUsIDB4MDEsIDB4MDEsIDB4ODAsIDB4ZTEsIDB4MDEsIDB4MTAsIDB4YTAsIDB4ZTMsCi0weDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweGEwLCAweGUzLAotMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHg5MywgMHhlNSwKLTB4ODEsIDB4MDAsIDB4ODAsIDB4ZTEsIDB4MDEsIDB4MTAsIDB4YTAsIDB4ZTMsCi0weDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweGEwLCAweGUzLAotMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHg5MywgMHhlNSwKLTB4MDEsIDB4MDAsIDB4ODAsIDB4ZTEsIDB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4ZmMsIDB4NDYsIDB4NjAsIDB4NDcsCi0weGE0LCAweDIxLCAweDlmLCAweGU1LCAweGE4LCAweDMxLCAweDlmLCAweGU1LCAweGEwLCAweDEzLCAweGEwLCAweGUxLAotMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwgMHgwMSwgMHgxMCwgMHhhMCwgMHhlMywgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwKLTB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsCi0weDAwLCAweDEwLCAweDgyLCAweGU1LCAweDIwLCAweDEzLCAweGEwLCAweGUxLCAweDAwLCAweDEwLCAweDgzLCAweGU1LAotMHgwMSwgMHgxMCwgMHhhMCwgMHhlMywgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwKLTB4MDAsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsCi0weGEwLCAweDEyLCAweGEwLCAweGUxLCAweDAwLCAweDEwLCAweDgzLCAweGU1LCAweDAxLCAweDEwLCAweGEwLCAweGUzLAotMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHhhMCwgMHhlMywKLTB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MjAsIDB4MTIsIDB4YTAsIDB4ZTEsCi0weDAwLCAweDEwLCAweDgzLCAweGU1LCAweDAxLCAweDEwLCAweGEwLCAweGUzLCAweDAwLCAweDEwLCAweDgyLCAweGU1LAotMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHhhMCwgMHhlMywgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwKLTB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4YTAsIDB4MTEsIDB4YTAsIDB4ZTEsIDB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsCi0weDAxLCAweDEwLCAweGEwLCAweGUzLCAweDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweDgyLCAweGU1LAotMHgwMCwgMHgxMCwgMHhhMCwgMHhlMywgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwKLTB4MjAsIDB4MTEsIDB4YTAsIDB4ZTEsIDB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsIDB4MDEsIDB4MTAsIDB4YTAsIDB4ZTMsCi0weDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweGEwLCAweGUzLAotMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHhhMCwgMHgxMCwgMHhhMCwgMHhlMSwKLTB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsIDB4MDEsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsCi0weDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweGEwLCAweGUzLCAweDAwLCAweDEwLCAweDgyLCAweGU1LAotMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHhhMCwgMHhlMSwgMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwKLTB4MDEsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsCi0weDAwLCAweDEwLCAweGEwLCAweGUzLCAweDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweDgyLCAweGU1LAotMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwgMHhmYywgMHg0NiwgMHg2MCwgMHg0NywgMHhhMCwgMHgzMCwgMHg5ZiwgMHhlNSwKLTB4MDEsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsCi0weDAwLCAweDEwLCAweDgzLCAweGU1LCAweDAwLCAweDEwLCAweDgzLCAweGU1LCAweDAwLCAweDEwLCAweDgzLCAweGU1LAotMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwKLTB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4ZmMsIDB4NDYsIDB4NjAsIDB4NDcsIDB4NzAsIDB4MzAsIDB4OWYsIDB4ZTUsCi0weDAwLCAweDEwLCAweGEwLCAweGUzLCAweDAwLCAweDEwLCAweDgzLCAweGU1LCAweDAwLCAweDEwLCAweDgzLCAweGU1LAotMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwKLTB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsCi0weDFlLCAweGZmLCAweDJmLCAweGUxLCAweGZjLCAweDQ2LCAweDYwLCAweDQ3LCAweDM0LCAweDIwLCAweDlmLCAweGU1LAotMHgzYywgMHgzMCwgMHg5ZiwgMHhlNSwgMHgwMCwgMHgxMCwgMHhhMCwgMHhlMywgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwKLTB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDEsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsCi0weDAwLCAweDEwLCAweDgzLCAweGU1LCAweDAwLCAweDEwLCAweDgzLCAweGU1LCAweDAwLCAweDEwLCAweDgzLCAweGU1LAotMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwKLTB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsIDB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4ZjgsIDB4MDAsIDB4MTgsIDB4NDAsCi0weDA0LCAweDAxLCAweDE4LCAweDQwLCAweDAwLCAweDAxLCAweDE4LCAweDQwLCAweGZjLCAweDAwLCAweDE4LCAweDQwLAotMHg4MCwgMHhiNSwgMHgwMCwgMHhmMCwgMHgwYywgMHhmOCwgMHgwMCwgMHgyNywgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwKLTB4NDcsIDB4ZjgsIDB4NzgsIDB4MWMsIDB4MDcsIDB4MDQsIDB4M2YsIDB4MGMsIDB4MGMsIDB4MmYsIDB4ZjcsIDB4ZGQsCi0weDgwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDFkLCAweDQ4LAotMHgwMiwgMHg2OCwgMHgxZCwgMHg0OSwgMHg4YiwgMHg2OSwgMHhkMiwgMHgxOCwgMHgwMiwgMHg2MCwgMHgwMiwgMHg2NiwKLTB4OGEsIDB4NmEsIDB4NDMsIDB4NjgsIDB4OWIsIDB4MTgsIDB4NDMsIDB4NjAsIDB4OTMsIDB4NDIsIDB4MDIsIDB4ZDIsCi0weDgyLCAweDY4LCAweDAxLCAweDMyLCAweDgyLCAweDYwLCAweGMyLCAweDY4LCAweDBiLCAweDZhLCAweGQyLCAweDE4LAotMHhjMiwgMHg2MCwgMHg0MiwgMHg2OSwgMHhjYiwgMHg2OCwgMHhkMiwgMHgxOCwgMHg0MiwgMHg2MSwgMHhjMiwgMHg2OSwKLTB4OGIsIDB4NjgsIDB4ZDIsIDB4MTgsIDB4YzIsIDB4NjEsIDB4MDIsIDB4NjksIDB4MGIsIDB4NjksIDB4ZDIsIDB4MTgsCi0weDAyLCAweDYxLCAweDgyLCAweDY5LCAweDBiLCAweDY4LCAweGQyLCAweDE4LCAweDgyLCAweDYxLCAweDAyLCAweDZiLAotMHhjYiwgMHg2OSwgMHhkMiwgMHgxOCwgMHgwMiwgMHg2MywgMHg0YSwgMHg2YSwgMHg0MywgMHg2YiwgMHg5YiwgMHgxOCwKLTB4NDMsIDB4NjMsIDB4OTMsIDB4NDIsIDB4MDIsIDB4ZDIsIDB4ODIsIDB4NmIsIDB4MDEsIDB4MzIsIDB4ODIsIDB4NjMsCi0weGMyLCAweDZiLCAweDRiLCAweDY5LCAweGQyLCAweDE4LCAweGMyLCAweDYzLCAweDAyLCAweDZjLCAweGM5LCAweDZhLAotMHg1MSwgMHgxOCwgMHgwMSwgMHg2NCwgMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHhhNCwgMHgyYSwgMHgwMCwgMHg4MCwKLTB4MDAsIDB4MDgsIDB4MTQsIDB4NDAsIDB4ODgsIDB4YjUsIDB4NjksIDB4NDYsIDB4MDAsIDB4ZjAsIDB4MTcsIDB4ZjgsCi0weDgxLCAweDA4LCAweDBhLCAweGQwLCAweDAwLCAweDIwLCAweDAwLCAweDI5LCAweDA3LCAweGQ5LCAweDAwLCAweDIyLAotMHg4MywgMHgwMCwgMHgwMCwgMHg5ZiwgMHhjMCwgMHg0NiwgMHhmYSwgMHg1MCwgMHgwMSwgMHgzMCwgMHg4OCwgMHg0MiwKLTB4ZjgsIDB4ZDMsIDB4ODgsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4YjUsIDB4MDAsIDB4ZjAsCi0weDA0LCAweGY4LCAweDAwLCAweDA0LCAweDAwLCAweDBjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDIyLAotMHgwMCwgMHgyOCwgMHgwYSwgMHhkMCwgMHgwMSwgMHgyOCwgMHgwYSwgMHhkMCwgMHgwMiwgMHgyOCwgMHgwYywgMHhkMCwKLTB4MDMsIDB4MjgsIDB4MDIsIDB4ZDEsIDB4MDcsIDB4NDgsIDB4MWMsIDB4MjIsIDB4MDgsIDB4NjAsIDB4MTAsIDB4MWMsCi0weDcwLCAweDQ3LCAweDA2LCAweDQ4LCAweDA0LCAweGUwLCAweDA2LCAweDQ4LCAweDUwLCAweDIyLCAweDA4LCAweDYwLAotMHhmNywgMHhlNywgMHgwNSwgMHg0OCwgMHg2OCwgMHgyMiwgMHgwOCwgMHg2MCwgMHhmMywgMHhlNywgMHgwMCwgMHgwMCwKLTB4MDgsIDB4ODMsIDB4MjAsIDB4NDAsIDB4YTQsIDB4MmEsIDB4MDAsIDB4ODAsIDB4MGMsIDB4MmIsIDB4MDAsIDB4ODAsCi0weGEwLCAweDgyLCAweDIwLCAweDQwLCAweDgwLCAweGI0LCAweDAzLCAweDIyLCAweGMyLCAweDgwLCAweDE1LCAweDRhLAotMHhjMCwgMHg0NiwgMHg4MiwgMHg2MCwgMHgxNCwgMHg0YSwgMHgxMiwgMHg4OCwgMHgwMSwgMHgzMiwgMHhjMiwgMHg2MCwKLTB4MDAsIDB4MjAsIDB4MTMsIDB4NGEsIDB4MTMsIDB4NWMsIDB4YzAsIDB4NDYsIDB4MGIsIDB4NzAsIDB4MDEsIDB4MzAsCi0weDAxLCAweDMxLCAweDA4LCAweDI4LCAweGY4LCAweGQzLCAweDIwLCAweDIyLCAweDBhLCAweDcwLCAweDAxLCAweDMxLAotMHgwMCwgMHgyMCwgMHgwZSwgMHg0YiwgMHgxZiwgMHg1YywgMHhjMCwgMHg0NiwgMHgwZiwgMHg3MCwgMHgwMSwgMHgzMCwKLTB4MDEsIDB4MzEsIDB4MDgsIDB4MjgsIDB4ZjgsIDB4ZDMsIDB4MGEsIDB4NzAsIDB4MDEsIDB4MzEsIDB4MDAsIDB4MjAsCi0weDA5LCAweDRhLCAweDEzLCAweDVjLCAweGMwLCAweDQ2LCAweDBiLCAweDcwLCAweDAxLCAweDMwLCAweDAxLCAweDMxLAotMHgwOCwgMHgyOCwgMHhmOCwgMHhkMywgMHgwMCwgMHgyMCwgMHgwOCwgMHg3MCwgMHg4MCwgMHhiYywgMHg3MCwgMHg0NywKLTB4MDgsIDB4MTAsIDB4MDAsIDB4MDMsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4N2MsIDB4MDQsIDB4MDAsIDB4ODAsCi0weDg1LCAweDA0LCAweDAwLCAweDgwLCAweDhlLCAweDA0LCAweDAwLCAweDgwLCAweDAwLCAweGI1LCAweDAxLCAweDIzLAotMHgwYSwgMHg0OCwgMHhjMSwgMHgxZCwgMHg4OSwgMHgzMSwgMHg0YiwgMHg3MCwgMHgwMCwgMHgyMiwgMHgwYSwgMHg3MCwKLTB4NjQsIDB4MjEsIDB4ODAsIDB4MzAsIDB4YzEsIDB4ODIsIDB4MDEsIDB4ODMsIDB4NDMsIDB4ODMsIDB4N2QsIDB4MjEsCi0weGM5LCAweDAwLCAweDgxLCAweDgzLCAweGMyLCAweDgzLCAweDA0LCAweDQ4LCAweDAxLCAweDIyLCAweDAwLCAweDIxLAotMHgwMCwgMHhmMCwgMHg4ZSwgMHhmYiwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwKLTB4YjUsIDB4MjIsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4YjUsIDB4ZmYsIDB4ZjcsIDB4ZTEsIDB4ZmYsIDB4MTMsIDB4NDgsCi0weDAyLCAweDIyLCAweDAwLCAweDIxLCAweDAwLCAweGYwLCAweDgwLCAweGZiLCAweDAxLCAweDIzLCAweGQ4LCAweDQyLAotMHgwYSwgMHhkMSwgMHgxMCwgMHg0OCwgMHhjMSwgMHgxZCwgMHgzOSwgMHgzMSwgMHhjYSwgMHg4OCwgMHgwMSwgMHgzMiwKLTB4Y2EsIDB4ODAsIDB4ODEsIDB4NzksIDB4MDEsIDB4MzEsIDB4ODEsIDB4NzEsIDB4ZmQsIDB4ZjcsIDB4NzAsIDB4ZjksCi0weDBiLCAweDQ4LCAweGMwLCAweDY4LCAweDAxLCAweDI4LCAweDA1LCAweGQxLCAweDBhLCAweDQ4LCAweDdkLCAweDIyLAotMHhkMiwgMHgwMCwgMHgwMCwgMHgyMSwgMHgwMCwgMHhmMCwgMHg2OCwgMHhmYiwgMHgwOCwgMHg0OCwgMHhmYiwgMHhmNywKLTB4ZTEsIDB4ZmMsIDB4MDgsIDB4NDgsIDB4MjgsIDB4MjIsIDB4MDAsIDB4MjEsIDB4MDAsIDB4ZjAsIDB4NjAsIDB4ZmIsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDc5LCAweDIxLCAweGZmLCAweGZmLCAweGEwLCAweDgyLCAweDIwLCAweDQwLAotMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHhhNSwgMHg3YiwgMHgyMSwgMHg0MCwKLTB4OTUsIDB4MmMsIDB4ZmYsIDB4ZmYsIDB4NTksIDB4MDMsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4YjUsIDB4MTAsIDB4MjAsCi0weDBmLCAweDQ5LCAweGMwLCAweDQ2LCAweDA4LCAweDYwLCAweDBmLCAweDRhLCAweDBmLCAweDQ4LCAweDY0LCAweDIxLAotMHhmYiwgMHhmNywgMHhjNiwgMHhmYywgMHgwZSwgMHg0OCwgMHgwMSwgMHgyMiwgMHgxMiwgMHgwNCwgMHgwMSwgMHg2OCwKLTB4MGEsIDB4NDAsIDB4MDgsIDB4MjEsIDB4MDAsIDB4MmEsIDB4MDUsIDB4ZDEsIDB4MDIsIDB4NjgsIDB4MTIsIDB4MGMsCi0weDA3LCAweGQxLCAweDAwLCAweDY4LCAweDgwLCAweDBhLCAweDA0LCAweGQzLCAweDA4LCAweDQ4LCAweGMwLCAweDQ2LAotMHhjMSwgMHg2MCwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwNywgMHg0OCwgMHhjMCwgMHg0NiwgMHgwMSwgMHg2NCwKLTB4ZjksIDB4ZTcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4YTUsIDB4NTUsIDB4ZmYsIDB4ZmYsCi0weDdjLCAweDI5LCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDEwLCAweDQwLCAweDQwLCAweDAxLCAweDE4LCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhmOCwgMHhiNSwgMHgyNywgMHg0OCwgMHgwMSwgMHgyMiwgMHgxMiwgMHgwNCwKLTB4MDEsIDB4NjgsIDB4MGEsIDB4NDAsIDB4MDcsIDB4MjEsIDB4MDAsIDB4MmEsIDB4MDUsIDB4ZDEsIDB4MDIsIDB4NjgsCi0weDEyLCAweDBjLCAweDA2LCAweGQxLCAweDAwLCAweDY4LCAweDgwLCAweDBhLCAweDAzLCAweGQzLCAweDIxLCAweDQ4LAotMHhjMCwgMHg0NiwgMHhjMSwgMHg2MCwgMHgwMiwgMHhlMCwgMHgyMCwgMHg0OCwgMHhjMCwgMHg0NiwgMHgwMSwgMHg2NCwKLTB4MWYsIDB4NDgsIDB4ZmIsIDB4ZjcsIDB4ODcsIDB4ZmMsIDB4MWYsIDB4NDgsIDB4YzEsIDB4NmIsIDB4ZmYsIDB4MjksCi0weGZjLCAweGQxLCAweDgxLCAweDZiLCAweDQyLCAweDZiLCAweDE2LCAweDFjLCAweDBmLCAweDFjLCAweDFjLCAweDRjLAotMHgxMCwgMHgyMywgMHg2MCwgMHg2OSwgMHgxOCwgMHg0MywgMHg2MCwgMHg2MSwgMHhhMSwgMHg2OSwgMHg5OSwgMHg0MywKLTB4MWQsIDB4MDQsIDB4YTEsIDB4NjEsIDB4ZTgsIDB4NjAsIDB4YTAsIDB4NjksIDB4YzAsIDB4NDYsIDB4MjgsIDB4NjEsCi0weDE2LCAweDRhLCAweDE3LCAweDQ5LCAweDY0LCAweDIwLCAweGZiLCAweGY3LCAweDZmLCAweGZjLCAweDE2LCAweDRhLAotMHhjMCwgMHg0NiwgMHgwMCwgMHg5MiwgMHgxNSwgMHg0YiwgMHgwMCwgMHgyMCwgMHgzOSwgMHgxYywgMHgzMiwgMHgxYywKLTB4ZmIsIDB4ZjcsIDB4NmUsIDB4ZmMsIDB4MTMsIDB4NDgsIDB4YzEsIDB4NjgsIDB4MDgsIDB4MjksIDB4ZmMsIDB4ZDEsCi0weDEyLCAweDQ4LCAweGZiLCAweGY3LCAweDVkLCAweGZjLCAweDEwLCAweDIzLCAweDYwLCAweDY5LCAweDk4LCAweDQzLAotMHg2MCwgMHg2MSwgMHhlOCwgMHg2MCwgMHgwMSwgMHgyMCwgMHhlMywgMHgyMywgMHgxYiwgMHgwMSwgMHhlMSwgMHgxOCwKLTB4YzgsIDB4NzEsIDB4ZjgsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsCi0weDQwLCAweDAxLCAweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDA0LCAweDAyLCAweGZmLCAweGZmLAotMHgwMCwgMHgwMSwgMHgxOCwgMHg0MCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHgyMCwgMHg1NSwgMHhmZiwgMHhmZiwKLTB4YjUsIDB4YjYsIDB4MjEsIDB4NDAsIDB4NjQsIDB4MDAsIDB4MzAsIDB4MDIsIDB4NDQsIDB4ODAsIDB4MjAsIDB4NDAsCi0weDQwLCAweDAxLCAweDE4LCAweDQwLCAweGY0LCAweDAxLCAweGZmLCAweGZmLCAweDAwLCAweGI1LCAweGZkLCAweGY3LAotMHgwMSwgMHhmZiwgMHgwNiwgMHg0OCwgMHhmYiwgMHhmNywgMHgzMiwgMHhmYywgMHhmZCwgMHhmNywgMHhkNiwgMHhmZSwKLTB4ZmUsIDB4ZjcsIDB4MDQsIDB4ZjgsIDB4ZmUsIDB4ZjcsIDB4MTYsIDB4ZjgsIDB4ZmUsIDB4ZjcsIDB4MjQsIDB4ZjgsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDkxLCAweDAzLCAweGZmLCAweGZmLCAweDkwLCAweGI1LCAweGZkLCAweGY3LAotMHg2YiwgMHhmYywgMHgzNCwgMHg0ZiwgMHgwMCwgMHgyNCwgMHhmOSwgMHg2OCwgMHhmOCwgMHgxZCwgMHg3OSwgMHgzMCwKLTB4MDEsIDB4MjksIDB4MGYsIDB4ZDEsIDB4MzEsIDB4NDksIDB4YzAsIDB4NDYsIDB4ZjksIDB4NjcsIDB4MzEsIDB4NDksCi0weGMwLCAweDQ2LCAweDAxLCAweDYwLCAweDMwLCAweDQ5LCAweGMwLCAweDQ2LCAweDBjLCAweDYwLCAweDRjLCAweDYwLAotMHg4YywgMHg2MCwgMHhjYywgMHg2MCwgMHgwYywgMHg2MSwgMHg0YywgMHg2MSwgMHg4YywgMHg2MSwgMHgwNCwgMHhlMCwKLTB4ZjksIDB4MWQsIDB4N2QsIDB4MzEsIDB4ZjksIDB4NjcsIDB4MTIsIDB4YzAsIDB4MDgsIDB4MzgsIDB4MDAsIDB4NjgsCi0weDYwLCAweDIzLCAweDAxLCAweDY4LCAweDE5LCAweDQzLCAweDAxLCAweDYwLCAweGY4LCAweDZmLCAweDIwLCAweDIzLAotMHgwMSwgMHg2OCwgMHgxOSwgMHg0MywgMHgwMSwgMHg2MCwgMHhmOCwgMHg2ZiwgMHg0MCwgMHgyMywgMHgwMSwgMHg2OCwKLTB4OTksIDB4NDMsIDB4MDEsIDB4NjAsIDB4MDAsIDB4ZjAsIDB4NTQsIDB4ZjgsIDB4ZmQsIDB4ZjcsIDB4NGUsIDB4ZmMsCi0weDAwLCAweGYwLCAweDVlLCAweGY5LCAweGZkLCAweGY3LCAweDczLCAweGY4LCAweGZmLCAweGY3LCAweDBjLCAweGZlLAotMHhmZCwgMHhmNywgMHgyZSwgMHhmZSwgMHhmZCwgMHhmNywgMHhiNiwgMHhmZCwgMHhmZCwgMHhmNywgMHhjMiwgMHhmZSwKLTB4ZmQsIDB4ZjcsIDB4NTQsIDB4ZmQsIDB4ZmQsIDB4ZjcsIDB4MGEsIDB4ZmQsIDB4ZmQsIDB4ZjcsIDB4OTQsIDB4ZmQsCi0weDAwLCAweGYwLCAweDFhLCAweGZhLCAweGZkLCAweGY3LCAweDljLCAweGZmLCAweGZkLCAweGY3LCAweDBhLCAweGZmLAotMHhmZCwgMHhmNywgMHhkMiwgMHhmZSwgMHhmZCwgMHhmNywgMHgzYywgMHhmYywgMHhmYiwgMHhmNywgMHhkYywgMHhmYSwKLTB4ZmYsIDB4ZjcsIDB4OWMsIDB4ZmYsIDB4NzEsIDB4MjMsIDB4NWIsIDB4MDEsCi0weGY4LCAweDE4LCAweDA0LCAweDcyLCAweDQ0LCAweDcyLCAweDA3LCAweDIzLCAweDViLCAweDAyLCAweGY4LCAweDE4LAotMHgwNCwgMHg2MywgMHhmOCwgMHg2OCwgMHgwMSwgMHgyOCwgMHgwMiwgMHhkMSwgMHhhOCwgMHgyMCwgMHhmZSwgMHhmNywKLTB4YjEsIDB4ZmQsIDB4MDksIDB4NDgsIDB4YzAsIDB4NDYsIDB4NDQsIDB4NjIsIDB4MDAsIDB4ZjAsIDB4MTgsIDB4ZmEsCi0weDA3LCAweDQ4LCAweGZiLCAweGY3LCAweGJkLCAweGZiLCAweDkwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgxMSwgMHg0MCwgMHgwNCwgMHgwMSwgMHgxMSwgMHg0MCwKLTB4MDAsIDB4MDEsIDB4MTEsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MTUsIDB4OGYsIDB4MjEsIDB4NDAsCi0weDAwLCAweGI1LCAweDA0LCAweDQ4LCAweGZiLCAweGY3LCAweGFhLCAweGZiLCAweGZkLCAweGY3LCAweDVlLCAweGZmLAotMHhmZCwgMHhmNywgMHgyNCwgMHhmYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgxNSwgMHg5OSwgMHgyMSwgMHg0MCwKLTB4ZmEsIDB4MjEsIDB4MDMsIDB4NDgsIDB4YzAsIDB4NDYsIDB4NDEsIDB4NjIsIDB4NDAsIDB4MjEsIDB4NDEsIDB4NjIsCi0weDcwLCAweDQ3LCAweDAwLCAweDAwLCAweGMwLCAweDAwLCAweDE4LCAweDAwLCAweDA3LCAweDQ4LCAweDQxLCAweDY5LAotMHgwNywgMHg0YiwgMHgxOSwgMHg0MywgMHg0MSwgMHg2MSwgMHg4MiwgMHg2OSwgMHg5YSwgMHg0MywgMHg4MiwgMHg2MSwKLTB4MDEsIDB4MjIsIDB4MTIsIDB4MDUsIDB4ZDEsIDB4NjAsIDB4ODAsIDB4NjksIDB4YzAsIDB4NDYsIDB4MTAsIDB4NjEsCi0weDcwLCAweDQ3LCAweDAwLCAweDAwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweGZlLCAweGFmLCAweDlhLCAweDEwLAotMHgwMCwgMHhiNSwgMHgwMiwgMHg0OCwgMHhmYiwgMHhmNywgMHg4MCwgMHhmYiwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4YzgsIDB4NTcsIDB4ZmYsIDB4ZmYsIDB4ZjAsIDB4YjUsIDB4MjQsIDB4NGMsIDB4MDEsIDB4MjEsIDB4MDksIDB4MDQsCi0weDIwLCAweDY4LCAweDAxLCAweDQwLCAweDA5LCAweDIwLCAweDIyLCAweDRlLCAweDIyLCAweDRkLCAweDAwLCAweDI5LAotMHgwNSwgMHhkMSwgMHgyMSwgMHg2OCwgMHgwOSwgMHgwYywgMHgwNCwgMHhkMSwgMHgyMSwgMHg2OCwgMHg4OSwgMHgwYSwKLTB4MDEsIDB4ZDMsIDB4ZjAsIDB4NjAsIDB4MDAsIDB4ZTAsIDB4MjgsIDB4NjQsIDB4MWQsIDB4NDgsIDB4ZmIsIDB4ZjcsCi0weDY1LCAweGZiLCAweDFkLCAweDRmLCAweDFkLCAweDQ5LCAweDg4LCAweDY5LCAweDAxLCAweDMwLCAweDg4LCAweDYxLAotMHgzOCwgMHg3YSwgMHgwMCwgMHgyOCwgMHgwMiwgMHhkMSwgMHg3OCwgMHg3YSwgMHgwMCwgMHgyOCwgMHgxZiwgMHhkMCwKLTB4MTksIDB4NDgsIDB4ZmIsIDB4ZjcsIDB4NTcsIDB4ZmIsIDB4MTksIDB4NDgsIDB4ZmIsIDB4ZjcsIDB4NTQsIDB4ZmIsCi0weDAwLCAweDI4LCAweGZhLCAweGQxLCAweDM4LCAweDdhLCAweDAwLCAweDI4LCAweDAyLCAweGQwLCAweDE2LCAweDQ4LAotMHhmYiwgMHhmNywgMHg0YywgMHhmYiwgMHgwMSwgMHgyMSwgMHgwOSwgMHgwNCwgMHgyMCwgMHg2OCwgMHgwMSwgMHg0MCwKLTB4MTQsIDB4MjAsIDB4MDAsIDB4MjksIDB4MDUsIDB4ZDEsIDB4MjEsIDB4NjgsIDB4MDksIDB4MGMsIDB4MDQsIDB4ZDEsCi0weDIxLCAweDY4LCAweDg5LCAweDBhLCAweDAxLCAweGQzLCAweGYwLCAweDYwLCAweDAxLCAweGUwLCAweDI4LCAweDY0LAotMHhmZiwgMHhlNywgMHhmZSwgMHhlNywgMHhmZiwgMHhmNywgMHg2NSwgMHhmZCwgMHgwYiwgMHg0OCwgMHhmYiwgMHhmNywKLTB4MzUsIDB4ZmIsIDB4ZmYsIDB4ZjcsIDB4YWYsIDB4ZmYsIDB4Y2QsIDB4ZTcsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsCi0weDQwLCAweDAxLCAweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDA0LCAweDAyLCAweGZmLCAweGZmLAotMHg4OCwgMHgxYywgMHgwMCwgMHg4MCwgMHgwOCwgMHg4MywgMHgyMCwgMHg0MCwgMHhmNCwgMHgwMSwgMHhmZiwgMHhmZiwKLTB4YjUsIDB4MDcsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4OTksIDB4OWYsIDB4MjEsIDB4NDAsCi0weDAwLCAweDIwLCAweDA3LCAweDRhLCAweDAxLCAweDIxLCAweDA5LCAweDA1LCAweDUwLCAweDYxLCAweGM4LCAweDYwLAotMHhkMCwgMHg2MSwgMHhjOCwgMHg2MSwgMHgwMywgMHgyMywgMHhkYiwgMHgwNCwgMHgwMywgMHg0YSwgMHgwMSwgMHgyMSwKLTB4ZDEsIDB4NjMsIDB4NTgsIDB4NjAsIDB4ZmMsIDB4ZTcsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsCi0weGMwLCAweDAwLCAweDE4LCAweDAwLCAweDgwLCAweGI1LCAweGMwLCAweGIwLCAweDAxLCAweDIyLCAweDAwLCAweDIxLAotMHgwYSwgMHgyMCwgMHhmYywgMHhmNywgMHhkMSwgMHhmZiwgMHgwNywgMHgxYywgMHhmZiwgMHgyZiwgMHgyOCwgMHhkMCwKLTB4NjksIDB4NDYsIDB4ZmYsIDB4MjIsIDB4MzgsIDB4MWMsIDB4MDEsIDB4MzIsIDB4ZmQsIDB4ZjcsIDB4NTQsIDB4ZjksCi0weGZmLCAweDIzLCAweDAxLCAweDMzLCAweDk4LCAweDQyLCAweDFiLCAweGQxLCAweDBkLCAweDk4LCAweDAwLCAweDA5LAotMHgxOCwgMHhkMywgMHgzOCwgMHgxYywgMHhmZCwgMHhmNywgMHg4ZCwgMHhmOCwgMHgwZSwgMHg0OSwgMHgwMSwgMHgyMiwKLTB4MTIsIDB4MDQsIDB4MDgsIDB4NjgsIDB4MDIsIDB4NDAsIDB4MGQsIDB4NDgsIDB4MDUsIDB4ZDEsIDB4MGEsIDB4NjgsCi0weDEyLCAweDBjLCAweDA2LCAweGQxLCAweDA5LCAweDY4LCAweDg5LCAweDBhLCAweDAzLCAweGQzLCAweDBhLCAweDQ5LAotMHhjMCwgMHg0NiwgMHhjOCwgMHg2MCwgMHgwMiwgMHhlMCwgMHgwOSwgMHg0OSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg2NCwKLTB4ZmYsIDB4ZjcsIDB4YmMsIDB4ZmYsIDB4MzgsIDB4MWMsIDB4ZmQsIDB4ZjcsIDB4NzQsIDB4ZjgsIDB4NDAsIDB4YjAsCi0weDgwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwgMHgwNywgMHg4MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMSwgMHgxOCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4YjUsIDB4MTcsIDB4NDksIDB4MDEsIDB4MjIsIDB4MTIsIDB4MDQsCi0weDA4LCAweDY4LCAweDAyLCAweDQwLCAweDA2LCAweDIwLCAweDAwLCAweDJhLCAweDA1LCAweGQxLCAweDBhLCAweDY4LAotMHgxMiwgMHgwYywgMHgwNiwgMHhkMSwgMHgwOSwgMHg2OCwgMHg4OSwgMHgwYSwgMHgwMywgMHhkMywgMHgxMSwgMHg0OSwKLTB4YzAsIDB4NDYsIDB4YzgsIDB4NjAsIDB4MDIsIDB4ZTAsIDB4MTAsIDB4NDksIDB4YzAsIDB4NDYsIDB4MDgsIDB4NjQsCi0weDAzLCAweDIwLCAweGZlLCAweGY3LCAweGQzLCAweGZjLCAweGZiLCAweGY3LCAweDBkLCAweGZmLCAweDAxLCAweDIzLAotMHgxOCwgMHg0MywgMHhmYiwgMHhmNywgMHhlNywgMHhmZiwgMHhmZiwgMHhmNywgMHg4MywgMHhmZSwgMHhmZiwgMHhmNywKLTB4OWQsIDB4ZmYsIDB4ZmYsIDB4ZjcsIDB4MDUsIDB4ZmUsIDB4ZmYsIDB4ZjcsIDB4ZjUsIDB4ZmUsIDB4ZmYsIDB4ZjcsCi0weDA5LCAweGZmLCAweGZmLCAweGY3LCAweDliLCAweGZkLCAweGZmLCAweGY3LCAweDIxLCAweGZmLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwgMHg0MCwgMHgwMSwgMHgxOCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZjAsIDB4YjQsIDB4NDYsIDB4NGEsIDB4MDEsIDB4MjEsIDB4YzksIDB4MDMsCi0weDQ1LCAweDRkLCAweDE5LCAweDIzLCAweGRiLCAweDAxLCAweGVjLCAweDE4LCAweGExLCAweDYxLCAweDI4LCAweDg4LAotMHg0MCwgMHgwNCwgMHg0MywgMHg0YiwgMHhjMCwgMHgxOCwgMHg4NywgMHgxYSwgMHgwNCwgMHgyMCwgMHhhZiwgMHg2MCwKLTB4NDEsIDB4NGUsIDB4YzAsIDB4NDYsIDB4YjAsIDB4NjEsIDB4MDgsIDB4MjAsIDB4YzgsIDB4MjMsIDB4NDMsIDB4NDMsCi0weGJiLCAweDQyLCAweDIxLCAweGQ5LCAweDQxLCAweDAwLCAweDNkLCAweDRlLCAweGMwLCAweDQ2LCAweDMxLCAweDYxLAotMHhiNiwgMHg2OSwgMHgyMCwgMHgyMywgMHg5YiwgMHgxYiwgMHgzYSwgMHg0ZSwgMHhjMCwgMHg0NiwgMHhmMywgMHg2MSwKLTB4MTAsIDB4M2IsIDB4MzMsIDB4NjIsIDB4OGIsIDB4MDAsIDB4ZmYsIDB4MWEsIDB4NDAsIDB4MDgsIDB4ODEsIDB4NDIsCi0weDE3LCAweGQzLCAweGI4LCAweDIzLCAweDQzLCAweDQzLCAweGJiLCAweDQyLCAweDA4LCAweGQ5LCAweDQxLCAweDFlLAotMHgzMiwgMHg0YiwgMHhjMCwgMHg0NiwgMHg5OSwgMHg4MSwgMHhkOSwgMHg4MSwgMHg0MCwgMHgwMCwgMHgwMiwgMHgzOCwKLTB4NTgsIDB4NjEsIDB4MGEsIDB4ZTAsIDB4MDEsIDB4MzAsIDB4ODEsIDB4NDIsIDB4ZWYsIDB4ZDIsIDB4MDYsIDB4ZTAsCi0weDJjLCAweDRlLCAweGIzLCAweDY5LCAweDAxLCAweDMzLCAweGIzLCAweDYxLCAweDQwLCAweDAwLCAweDg4LCAweDQyLAotMHhkMiwgMHhkOSwgMHgyYSwgMHg0OSwgMHgwMCwgMHgyMCwgMHhhMywgMHg2OSwgMHg5YiwgMHgwOCwgMHgwNywgMHhkMCwKLTB4MjgsIDB4NGIsIDB4ODcsIDB4MDAsIDB4Y2IsIDB4NTEsIDB4YTcsIDB4NjksIDB4YmYsIDB4MDgsIDB4MDEsIDB4MzAsCi0weDg3LCAweDQyLCAweGY4LCAweGQ4LCAweDIyLCAweDQ5LCAweGMwLCAweDQ2LCAweDhhLCAweDYyLCAweDhjLCAweDg5LAotMHg1OCwgMHgyMCwgMHg2MCwgMHg0MywgMHg4NywgMHgxOCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgyMiwgMHgwMCwgMHgyYywKLTB4MGEsIDB4ZGQsIDB4NTgsIDB4MjMsIDB4NDMsIDB4NDMsIDB4OGMsIDB4NmEsIDB4ZTMsIDB4MTgsIDB4MDEsIDB4MzAsCi0weDAwLCAweDA0LCAweDAwLCAweDBjLCAweDlhLCAweDYwLCAweDhiLCAweDg5LCAweDgzLCAweDQyLCAweGY0LCAweGRjLAotMHhjZiwgMHg2MiwgMHhjYywgMHg4OSwgMHg2MCwgMHgwMCwgMHgwMCwgMHgxOSwgMHg0MCwgMHgwMSwgMHhjNywgMHgxOSwKLTB4MDAsIDB4MjAsIDB4MDAsIDB4MmMsIDB4MGIsIDB4ZGQsIDB4NDMsIDB4MDAsIDB4MWIsIDB4MTgsIDB4NWIsIDB4MDEsCi0weGNjLCAweDZhLCAweGUzLCAweDE4LCAweDAxLCAweDMwLCAweDAwLCAweDA0LCAweDAwLCAweDBjLCAweDlhLCAweDYwLAotMHhjYiwgMHg4OSwgMHg4MywgMHg0MiwgMHhmMywgMHhkYywgMHg0ZiwgMHg2MiwgMHgwMCwgMHgyMCwgMHgwYiwgMHg2OSwKLTB4MDAsIDB4MmIsIDB4MDcsIDB4ZDksIDB4ODcsIDB4MDAsIDB4NGIsIDB4NmEsIDB4YzAsIDB4NDYsIDB4ZGEsIDB4NTEsCi0weDBiLCAweDY5LCAweDAxLCAweDMwLCAweDgzLCAweDQyLCAweGY3LCAweGQ4LCAweDQ5LCAweDZhLCAweDgwLCAweDAwLAotMHgwOCwgMHgxOCwgMHgwNCwgMHgzOCwgMHgyOCwgMHg2MSwgMHhmMCwgMHhiYywgMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwKLTB4YjAsIDB4YmUsIDB4MjEsIDB4NDAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4NDAsCi0weDRjLCAweDJhLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDIwLCAweDQwLCAweDAwLCAweGFkLCAweGRlLCAweDAwLAotMHgwYSwgMHg0OCwgMHgwMSwgMHgyMywgMHgxYiwgMHgwNiwgMHg0MSwgMHg2OSwgMHg5OSwgMHg0MywgMHgxYSwgMHgwOSwKLTB4NDEsIDB4NjEsIDB4ZDEsIDB4NjAsIDB4MDAsIDB4MjEsIDB4YTEsIDB4MjIsIDB4NTIsIDB4MDMsIDB4OTEsIDB4NjEsCi0weDFiLCAweDIzLCAweGRiLCAweDAxLCAweGMwLCAweDE4LCAweDgxLCAweDYxLCAweDAxLCAweDIwLCAweDAwLCAweDA2LAotMHg1OSwgMHgwNSwgMHgwOCwgMHg2MCwgMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwKLTB4ODAsIDB4YjQsIDB4MDIsIDB4MWMsIDB4MGIsIDB4NDgsIDB4MWIsIDB4MjMsIDB4ZGIsIDB4MDEsIDB4YzMsIDB4MTgsCi0weDlhLCAweDYxLCAweDAxLCAweDIzLCAweDFiLCAweDA2LCAweDQyLCAweDY5LCAweDFhLCAweDQzLCAweDQyLCAweDYxLAotMHg4NywgMHg2OSwgMHg5ZiwgMHg0MywgMHgwMSwgMHgyMywgMHgxYiwgMHgwNSwKLTB4ODcsIDB4NjEsIDB4ZGEsIDB4NjAsIDB4ODAsIDB4NjksIDB4YzAsIDB4NDYsIDB4MTgsIDB4NjEsIDB4YTEsIDB4MjAsCi0weDQwLCAweDAzLCAweDgxLCAweDYxLCAweDgwLCAweGJjLCAweDcwLCAweDQ3LCAweDY4LCAweDBlLCAweDAwLCAweDgwLAotMHg4MCwgMHhiNSwgMHhmZiwgMHhmNywgMHhjOSwgMHhmZiwgMHgwMCwgMHgyMCwgMHgwMCwgMHhmMCwgMHgyMCwgMHhmOCwKLTB4MDAsIDB4MjAsIDB4MDksIDB4NDksIDB4MDAsIDB4MjIsIDB4MDMsIDB4MDEsIDB4NWYsIDB4MTgsIDB4MzMsIDB4MjMsCi0weDliLCAweDAxLCAweGZiLCAweDE4LCAweDlhLCAweDYyLCAweDAxLCAweDMwLCAweDBiLCAweDI4LCAweGY2LCAweGQzLAotMHgwNCwgMHg0OCwgMHgwMSwgMHgyMiwgMHgwMCwgMHgyMSwgMHgwMCwgMHhmMCwgMHgzMywgMHhmOCwgMHg4MCwgMHhiYywKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4MWQsIDB4M2UsIDB4ZmYsIDB4ZmYsCi0weDAwLCAweGI1LCAweDAyLCAweDQ4LCAweDAwLCAweGYwLCAweDA0LCAweGY4LCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHhhOCwgMHg2MSwgMHgwMCwgMHgwMCwgMHg4MCwgMHhiNCwgMHgwMSwgMHgyMiwgMHgxMiwgMHgwNSwgMHgwZiwgMHg0YiwKLTB4YTEsIDB4MjEsIDB4NDksIDB4MDMsIDB4MDAsIDB4MjgsIDB4MGUsIDB4ZDAsIDB4YzgsIDB4NjEsIDB4MTgsIDB4MWMsCi0weDU5LCAweDY5LCAweDUzLCAweDAxLCAweDE5LCAweDQzLCAweDQxLCAweDYxLCAweDg3LCAweDY5LCAweDlmLCAweDQzLAotMHg4NywgMHg2MSwgMHhkMSwgMHg2MCwgMHg4MCwgMHg2OSwgMHhjMCwgMHg0NiwgMHgxMCwgMHg2MSwgMHg4MCwgMHhiYywKLTB4NzAsIDB4NDcsIDB4MTgsIDB4MWMsIDB4NWYsIDB4NjksIDB4MDEsIDB4MjMsIDB4NWIsIDB4MDYsIDB4OWYsIDB4NDMsCi0weDQ3LCAweDYxLCAweGQ3LCAweDYwLCAweDAwLCAweDIwLCAweGM4LCAweDYxLCAweGYzLCAweGU3LCAweDAwLCAweDAwLAotMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHhiMCwgMHhiNCwgMHgwNywgMHgxYywgMHgwMCwgMHgyMCwgMHgxNywgMHg0YywKLTB4MDMsIDB4MDEsIDB4MWQsIDB4MTksIDB4MzMsIDB4MjMsIDB4OWIsIDB4MDEsIDB4ZWIsIDB4MTgsIDB4OWQsIDB4NmEsCi0weGJkLCAweDQyLCAweDA1LCAweGQxLCAweDFkLCAweDZiLCAweDk1LCAweDQyLCAweDAyLCAweGQxLCAweGRiLCAweDZhLAotMHg4YiwgMHg0MiwgMHgxYywgMHhkMCwgMHgwMSwgMHgzMCwgMHgwYiwgMHgyOCwgMHhlZSwgMHhkMywgMHgwMCwgMHgyMCwKLTB4MDMsIDB4MDEsIDB4MWQsIDB4MTksIDB4MzMsIDB4MjMsIDB4OWIsIDB4MDEsIDB4ZWIsIDB4MTgsIDB4OWIsIDB4NmEsCi0weDAwLCAweDJiLCAweDA5LCAweGQxLCAweDAzLCAweDAxLCAweDFjLCAweDE5LCAweDMzLCAweDIzLCAweDliLCAweDAxLAotMHhlMywgMHgxOCwgMHgxYSwgMHg2MywgMHhkOSwgMHg2MiwgMHg1YSwgMHg2MywgMHg5ZiwgMHg2MiwgMHgwMiwgMHhlMCwKLTB4MDEsIDB4MzAsIDB4MGIsIDB4MjgsIDB4ZWEsIDB4ZDMsIDB4MGIsIDB4MjgsIDB4MDEsIDB4ZDEsIDB4MDAsIDB4MjAsCi0weGMwLCAweDQzLCAweGIwLCAweGJjLCAweDcwLCAweDQ3LCAweDAwLCAweDAwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLAotMHg5MCwgMHhiNCwgMHgwMSwgMHgxYywgMHgwMCwgMHgyMiwgMHgwMSwgMHgyMCwgMHgxNiwgMHg0ZiwgMHgwMSwgMHhlMCwKLTB4MDAsIDB4MmEsIDB4MDcsIDB4ZDEsIDB4MDMsIDB4MDEsIDB4ZGMsIDB4MTksIDB4MzMsIDB4MjMsIDB4OWIsIDB4MDEsCi0weGUzLCAweDE4LCAweDliLCAweDY5LCAweDhiLCAweDQyLCAweDExLCAweGQxLCAweDAyLCAweDAxLCAweGQyLCAweDE5LAotMHgzMywgMHgyMywgMHg5YiwgMHgwMSwgMHhkMiwgMHgxOCwgMHg5MywgMHg2YSwgMHhjMCwgMHg0NiwgMHg5MywgMHg2MSwKLTB4ZDMsIDB4NmEsIDB4YzAsIDB4NDYsIDB4ZDMsIDB4NjEsIDB4MTMsIDB4NmIsIDB4YzAsIDB4NDYsIDB4MTMsIDB4NjIsCi0weDUzLCAweDZiLCAweGMwLCAweDQ2LCAweDUzLCAweDYyLCAweDAxLCAweDIyLCAweDAxLCAweDMwLCAweDBiLCAweDI4LAotMHhlMCwgMHhkMywgMHgwNywgMHg0YiwgMHgwMCwgMHgyYSwgMHgwMiwgMHhkMSwgMHg5YSwgMHg2OCwgMHg4YSwgMHg0MiwKLTB4MDMsIDB4ZDEsIDB4MDAsIDB4MjEsIDB4OTksIDB4NjAsIDB4OTAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MjAsCi0weGMwLCAweDQzLCAweGZhLCAweGU3LCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweGU4LCAweDFiLCAweDAwLCAweDgwLAotMHgwYiwgMHgyOCwgMHgxNywgMHhkYSwgMHgwYywgMHg0OSwgMHgwMSwgMHgyMywgMHg1YiwgMHgwNiwgMHg4YSwgMHg2OSwKLTB4MTMsIDB4NDMsIDB4MDEsIDB4MjIsIDB4MTIsIDB4MDUsIDB4OGIsIDB4NjEsIDB4MTMsIDB4NjEsIDB4MDAsIDB4MDEsCi0weDQwLCAweDE4LCAweDMzLCAweDIzLCAweDliLCAweDAxLCAweGMwLCAweDE4LCAweDAzLCAweDZiLCAweGMwLCAweDQ2LAotMHg0MywgMHg2MywgMHg1MywgMHgwMSwgMHg4OCwgMHg2OSwgMHg5OCwgMHg0MywgMHg4OCwgMHg2MSwgMHgxMCwgMHg2MSwKLTB4MDEsIDB4MjAsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MjAsIDB4ZmMsIDB4ZTcsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsCi0weDkwLCAweGI0LCAweDA4LCAweDRhLCAweGQwLCAweDY5LCAweDAwLCAweDIxLCAweDA3LCAweDRmLCAweGQzLCAweDY5LAotMHg4MywgMHg0MiwgMHgwMiwgMHhkOSwgMHhmYywgMHgxYSwgMHgyMCwgMHgxOCwgMHgwMCwgMHhlMCwgMHhjMCwgMHgxYSwKLTB4MDksIDB4MTgsIDB4MTgsIDB4MWMsIDB4YjksIDB4NDIsIDB4ZjQsIDB4ZDksIDB4OTAsIDB4YmMsIDB4NzAsIDB4NDcsCi0weDAwLCAweDIwLCAweDE0LCAweDQwLCAweGE4LCAweDYxLCAweDAwLCAweDAwLCAweDkwLCAweGI1LCAweDA3LCAweDFjLAotMHgwMCwgMHgyNCwgMHgwMCwgMHgyZiwgMHgwNCwgMHhkMywgMHhmZiwgMHhmNywgMHhlMywgMHhmZiwgMHgwMSwgMHgzNCwKLTB4YmMsIDB4NDIsIDB4ZmEsIDB4ZDksIDB4OTAsIDB4YmMsIDB4MDgsIDB4YmMsCi0weDE4LCAweDQ3LCAweDAwLCAweDAwLAotfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R5cGhvb24uYyBiL2RyaXZlcnMvbmV0L3R5cGhvb24uYwppbmRleCAzYWY5YTk1Li45ZGQ0Zjc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90eXBob29uLmMKKysrIGIvZHJpdmVycy9uZXQvdHlwaG9vbi5jCkBAIC0xMDAsMTAgKzEwMCwxMSBAQAogI2RlZmluZSBQS1RfQlVGX1NaCQkxNTM2CiAKICNkZWZpbmUgRFJWX01PRFVMRV9OQU1FCQkidHlwaG9vbiIKLSNkZWZpbmUgRFJWX01PRFVMRV9WRVJTSU9OIAkiMS41LjgiCi0jZGVmaW5lIERSVl9NT0RVTEVfUkVMREFURQkiMDYvMTEvMDkiCisjZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTiAJIjEuNS45IgorI2RlZmluZSBEUlZfTU9EVUxFX1JFTERBVEUJIk1hciAyLCAyMDA5IgogI2RlZmluZSBQRlgJCQlEUlZfTU9EVUxFX05BTUUgIjogIgogI2RlZmluZSBFUlJfUEZYCQkJS0VSTl9FUlIgUEZYCisjZGVmaW5lIEZJUk1XQVJFX05BTUUJCSIzY29tL3R5cGhvb24uYmluIgogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0xMjksOSArMTMwLDkgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2luNi5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KIAogI2luY2x1ZGUgInR5cGhvb24uaCIKLSNpbmNsdWRlICJ0eXBob29uLWZpcm13YXJlLmgiCiAKIHN0YXRpYyBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRkYXRhID0KICAgICAidHlwaG9vbi5jOiB2ZXJzaW9uICIgRFJWX01PRFVMRV9WRVJTSU9OICIgKCIgRFJWX01PRFVMRV9SRUxEQVRFICIpXG4iOwpAQCAtMTM5LDYgKzE0MCw3IEBACiBNT0RVTEVfQVVUSE9SKCJEYXZpZCBEaWxsb3cgPGRhdmVAdGhlZGlsbG93cy5vcmc+Iik7CiBNT0RVTEVfVkVSU0lPTihEUlZfTU9EVUxFX1ZFUlNJT04pOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0ZJUk1XQVJFKEZJUk1XQVJFX05BTUUpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCIzQ29tIFR5cGhvb24gRmFtaWx5ICgzQzk5MCwgM0NSOTkwLCBhbmQgdmFyaWFudHMpIik7CiBNT0RVTEVfUEFSTV9ERVNDKHJ4X2NvcHlicmVhaywgIlBhY2tldHMgc21hbGxlciB0aGFuIHRoaXMgYXJlIGNvcGllZCBhbmQgIgogCQkJICAgICAgICJ0aGUgYnVmZmVyIGdpdmVuIGJhY2sgdG8gdGhlIE5JQy4gRGVmYXVsdCAiCkBAIC0xMzQ0LDE0ICsxMzQ2LDc0IEBACiAJdHAtPnR4SGlSaW5nLmxhc3RSZWFkID0gMDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqdHlwaG9vbl9mdzsKKworc3RhdGljIGludAordHlwaG9vbl9yZXF1ZXN0X2Zpcm13YXJlKHN0cnVjdCB0eXBob29uICp0cCkKK3sKKwljb25zdCBzdHJ1Y3QgdHlwaG9vbl9maWxlX2hlYWRlciAqZkhkcjsKKwljb25zdCBzdHJ1Y3QgdHlwaG9vbl9zZWN0aW9uX2hlYWRlciAqc0hkcjsKKwljb25zdCB1OCAqaW1hZ2VfZGF0YTsKKwl1MzIgbnVtU2VjdGlvbnM7CisJdTMyIHNlY3Rpb25fbGVuOworCXUzMiByZW1haW5pbmc7CisJaW50IGVycjsKKworCWlmICh0eXBob29uX2Z3KQorCQlyZXR1cm4gMDsKKworCWVyciA9IHJlcXVlc3RfZmlybXdhcmUoJnR5cGhvb25fZncsIEZJUk1XQVJFX05BTUUsICZ0cC0+cGRldi0+ZGV2KTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEZhaWxlZCB0byBsb2FkIGZpcm13YXJlIFwiJXNcIlxuIiwKKwkJCQl0cC0+bmFtZSwgRklSTVdBUkVfTkFNRSk7CisJCXJldHVybiBlcnI7CisJfQorCisJaW1hZ2VfZGF0YSA9ICh1OCAqKSB0eXBob29uX2Z3LT5kYXRhOworCXJlbWFpbmluZyA9IHR5cGhvb25fZnctPnNpemU7CisJaWYgKHJlbWFpbmluZyA8IHNpemVvZihzdHJ1Y3QgdHlwaG9vbl9maWxlX2hlYWRlcikpCisJCWdvdG8gaW52YWxpZF9mdzsKKworCWZIZHIgPSAoc3RydWN0IHR5cGhvb25fZmlsZV9oZWFkZXIgKikgaW1hZ2VfZGF0YTsKKwlpZiAobWVtY21wKGZIZHItPnRhZywgIlRZUEhPT04iLCA4KSkKKwkJZ290byBpbnZhbGlkX2Z3OworCisJbnVtU2VjdGlvbnMgPSBsZTMyX3RvX2NwdShmSGRyLT5udW1TZWN0aW9ucyk7CisJaW1hZ2VfZGF0YSArPSBzaXplb2Yoc3RydWN0IHR5cGhvb25fZmlsZV9oZWFkZXIpOworCXJlbWFpbmluZyAtPSBzaXplb2Yoc3RydWN0IHR5cGhvb25fZmlsZV9oZWFkZXIpOworCisJd2hpbGUgKG51bVNlY3Rpb25zLS0pIHsKKwkJaWYgKHJlbWFpbmluZyA8IHNpemVvZihzdHJ1Y3QgdHlwaG9vbl9zZWN0aW9uX2hlYWRlcikpCisJCQlnb3RvIGludmFsaWRfZnc7CisKKwkJc0hkciA9IChzdHJ1Y3QgdHlwaG9vbl9zZWN0aW9uX2hlYWRlciAqKSBpbWFnZV9kYXRhOworCQlpbWFnZV9kYXRhICs9IHNpemVvZihzdHJ1Y3QgdHlwaG9vbl9zZWN0aW9uX2hlYWRlcik7CisJCXNlY3Rpb25fbGVuID0gbGUzMl90b19jcHUoc0hkci0+bGVuKTsKKworCQlpZiAocmVtYWluaW5nIDwgc2VjdGlvbl9sZW4pCisJCQlnb3RvIGludmFsaWRfZnc7CisKKwkJaW1hZ2VfZGF0YSArPSBzZWN0aW9uX2xlbjsKKwkJcmVtYWluaW5nIC09IHNlY3Rpb25fbGVuOworCX0KKworCXJldHVybiAwOworCitpbnZhbGlkX2Z3OgorCXByaW50ayhLRVJOX0VSUiAiJXM6IEludmFsaWQgZmlybXdhcmUgaW1hZ2VcbiIsIHRwLT5uYW1lKTsKKwlyZWxlYXNlX2Zpcm13YXJlKHR5cGhvb25fZncpOworCXR5cGhvb25fZncgPSBOVUxMOworCXJldHVybiAtRUlOVkFMOworfQorCiBzdGF0aWMgaW50CiB0eXBob29uX2Rvd25sb2FkX2Zpcm13YXJlKHN0cnVjdCB0eXBob29uICp0cCkKIHsKIAl2b2lkIF9faW9tZW0gKmlvYWRkciA9IHRwLT5pb2FkZHI7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0cC0+cGRldjsKLQlzdHJ1Y3QgdHlwaG9vbl9maWxlX2hlYWRlciAqZkhkcjsKLQlzdHJ1Y3QgdHlwaG9vbl9zZWN0aW9uX2hlYWRlciAqc0hkcjsKLQl1OCAqaW1hZ2VfZGF0YTsKKwljb25zdCBzdHJ1Y3QgdHlwaG9vbl9maWxlX2hlYWRlciAqZkhkcjsKKwljb25zdCBzdHJ1Y3QgdHlwaG9vbl9zZWN0aW9uX2hlYWRlciAqc0hkcjsKKwljb25zdCB1OCAqaW1hZ2VfZGF0YTsKIAl2b2lkICpkcGFnZTsKIAlkbWFfYWRkcl90IGRwYWdlX2RtYTsKIAlfX3N1bTE2IGNzdW07CkBAIC0xMzY1LDIwICsxNDI3LDEyIEBACiAJaW50IGk7CiAJaW50IGVycjsKIAotCWVyciA9IC1FSU5WQUw7Ci0JZkhkciA9IChzdHJ1Y3QgdHlwaG9vbl9maWxlX2hlYWRlciAqKSB0eXBob29uX2Zpcm13YXJlX2ltYWdlOwotCWltYWdlX2RhdGEgPSAodTggKikgZkhkcjsKLQotCWlmKG1lbWNtcChmSGRyLT50YWcsICJUWVBIT09OIiwgOCkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogSW52YWxpZCBmaXJtd2FyZSBpbWFnZSFcbiIsIHRwLT5uYW1lKTsKLQkJZ290byBlcnJfb3V0OwotCX0KKwlpbWFnZV9kYXRhID0gKHU4ICopIHR5cGhvb25fZnctPmRhdGE7CisJZkhkciA9IChzdHJ1Y3QgdHlwaG9vbl9maWxlX2hlYWRlciAqKSBpbWFnZV9kYXRhOwogCiAJLyogQ2Fubm90IGp1c3QgbWFwIHRoZSBmaXJtd2FyZSBpbWFnZSB1c2luZyBwY2lfbWFwX3NpbmdsZSgpIGFzCi0JICogdGhlIGZpcm13YXJlIGlzIHBhcnQgb2YgdGhlIGtlcm5lbC9tb2R1bGUgaW1hZ2UsIHNvIHdlIGFsbG9jYXRlCi0JICogc29tZSBjb25zaXN0ZW50IG1lbW9yeSB0byBjb3B5IHRoZSBzZWN0aW9ucyBpbnRvLCBhcyBpdCBpcyBzaW1wbGVyLAotCSAqIGFuZCBzaG9ydC1saXZlZC4gSWYgd2UgZXZlciBzcGxpdCBvdXQgYW5kIHJlcXVpcmUgYSB1c2VybGFuZAotCSAqIGZpcm13YXJlIGxvYWRlciwgdGhlbiB3ZSBjYW4gcmV2aXNpdCB0aGlzLgorCSAqIHRoZSBmaXJtd2FyZSBpcyB2bWFsbG9jKCknZCBhbmQgbWF5IG5vdCBiZSBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMsCisJICogc28gd2UgYWxsb2NhdGUgc29tZSBjb25zaXN0ZW50IG1lbW9yeSB0byBjb3B5IHRoZSBzZWN0aW9ucyBpbnRvLgogCSAqLwogCWVyciA9IC1FTk9NRU07CiAJZHBhZ2UgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwZGV2LCBQQUdFX1NJWkUsICZkcGFnZV9kbWEpOwpAQCAtMTc4Myw3ICsxODM3LDcgQEAKIAl9CiAKIAlpZiAod29ya19kb25lIDwgYnVkZ2V0KSB7Ci0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCQlpb3dyaXRlMzIoVFlQSE9PTl9JTlRSX05PTkUsCiAJCQkJdHAtPmlvYWRkciArIFRZUEhPT05fUkVHX0lOVFJfTUFTSyk7CiAJCXR5cGhvb25fcG9zdF9wY2lfd3JpdGVzKHRwLT5pb2FkZHIpOwpAQCAtMTgwNiwxMCArMTg2MCwxMCBAQAogCiAJaW93cml0ZTMyKGludHJfc3RhdHVzLCBpb2FkZHIgKyBUWVBIT09OX1JFR19JTlRSX1NUQVRVUyk7CiAKLQlpZiAobmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgmdHAtPm5hcGkpKSB7CisJaWYgKG5hcGlfc2NoZWR1bGVfcHJlcCgmdHAtPm5hcGkpKSB7CiAJCWlvd3JpdGUzMihUWVBIT09OX0lOVFJfQUxMLCBpb2FkZHIgKyBUWVBIT09OX1JFR19JTlRSX01BU0spOwogCQl0eXBob29uX3Bvc3RfcGNpX3dyaXRlcyhpb2FkZHIpOwotCQlfX25ldGlmX3J4X3NjaGVkdWxlKCZ0cC0+bmFwaSk7CisJCV9fbmFwaV9zY2hlZHVsZSgmdHAtPm5hcGkpOwogCX0gZWxzZSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yLCBwb2xsIGFscmVhZHkgc2NoZWR1bGVkXG4iLAogICAgICAgICAgICAgICAgICAgICAgICBkZXYtPm5hbWUpOwpAQCAtMTk0NCw3ICsxOTk4LDcgQEAKIAkJZ290byBlcnJvcl9vdXQ7CiAKIAlJTklUX0NPTU1BTkRfTk9fUkVTUE9OU0UoJnhwX2NtZCwgVFlQSE9PTl9DTURfVkxBTl9UWVBFX1dSSVRFKTsKLQl4cF9jbWQucGFybTEgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KEVUSF9QXzgwMjFRKTsKKwl4cF9jbWQucGFybTEgPSBjcHVfdG9fbGUxNihFVEhfUF84MDIxUSk7CiAJZXJyID0gdHlwaG9vbl9pc3N1ZV9jb21tYW5kKHRwLCAxLCAmeHBfY21kLCAwLCBOVUxMKTsKIAlpZihlcnIgPCAwKQogCQlnb3RvIGVycm9yX291dDsKQEAgLTIwODYsNiArMjE0MCwxMCBAQAogCXN0cnVjdCB0eXBob29uICp0cCA9IG5ldGRldl9wcml2KGRldik7CiAJaW50IGVycjsKIAorCWVyciA9IHR5cGhvb25fcmVxdWVzdF9maXJtd2FyZSh0cCk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKIAllcnIgPSB0eXBob29uX3dha2V1cCh0cCwgV2FpdFNsZWVwKTsKIAlpZihlcnIgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IHVuYWJsZSB0byB3YWtldXAgZGV2aWNlXG4iLCBkZXYtPm5hbWUpOwpAQCAtMjYyNCw2ICsyNjgyLDggQEAKIHN0YXRpYyB2b2lkIF9fZXhpdAogdHlwaG9vbl9jbGVhbnVwKHZvaWQpCiB7CisJaWYgKHR5cGhvb25fZncpCisJCXJlbGVhc2VfZmlybXdhcmUodHlwaG9vbl9mdyk7CiAJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZ0eXBob29uX2RyaXZlcik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R5cGhvb24uaCBiL2RyaXZlcnMvbmV0L3R5cGhvb24uaAppbmRleCBkZDcwMjJjLi42NzNmZDUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90eXBob29uLmgKKysrIGIvZHJpdmVycy9uZXQvdHlwaG9vbi5oCkBAIC0xNzQsMTggKzE3NCwxOCBAQAogCQl1NjQgdHhfYWRkcjsJLyogb3BhcXVlIGZvciBoYXJkd2FyZSwgZm9yIFRYX0RFU0MgKi8KIAl9OwogCV9fbGUzMiBwcm9jZXNzRmxhZ3M7Ci0jZGVmaW5lIFRZUEhPT05fVFhfUEZfTk9fQ1JDCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMDEpCi0jZGVmaW5lIFRZUEhPT05fVFhfUEZfSVBfQ0hLU1VNCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMDIpCi0jZGVmaW5lIFRZUEhPT05fVFhfUEZfVENQX0NIS1NVTQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMDQpCi0jZGVmaW5lIFRZUEhPT05fVFhfUEZfVENQX1NFR01FTlQJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMDA4KQotI2RlZmluZSBUWVBIT09OX1RYX1BGX0lOU0VSVF9WTEFOCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDAxMCkKLSNkZWZpbmUgVFlQSE9PTl9UWF9QRl9JUFNFQwkJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMDIwKQotI2RlZmluZSBUWVBIT09OX1RYX1BGX1ZMQU5fUFJJT1JJVFkJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMDQwKQotI2RlZmluZSBUWVBIT09OX1RYX1BGX1VEUF9DSEtTVU0JX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMDgwKQotI2RlZmluZSBUWVBIT09OX1RYX1BGX1BBRF9GUkFNRQkJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMTAwKQotI2RlZmluZSBUWVBIT09OX1RYX1BGX1JFU0VSVkVECQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDBlMDApCi0jZGVmaW5lIFRZUEhPT05fVFhfUEZfVkxBTl9NQVNLCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MGZmZmYwMDApCi0jZGVmaW5lIFRZUEhPT05fVFhfUEZfSU5URVJOQUwJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHhmMDAwMDAwMCkKKyNkZWZpbmUgVFlQSE9PTl9UWF9QRl9OT19DUkMJCWNwdV90b19sZTMyKDB4MDAwMDAwMDEpCisjZGVmaW5lIFRZUEhPT05fVFhfUEZfSVBfQ0hLU1VNCQljcHVfdG9fbGUzMigweDAwMDAwMDAyKQorI2RlZmluZSBUWVBIT09OX1RYX1BGX1RDUF9DSEtTVU0JY3B1X3RvX2xlMzIoMHgwMDAwMDAwNCkKKyNkZWZpbmUgVFlQSE9PTl9UWF9QRl9UQ1BfU0VHTUVOVAljcHVfdG9fbGUzMigweDAwMDAwMDA4KQorI2RlZmluZSBUWVBIT09OX1RYX1BGX0lOU0VSVF9WTEFOCWNwdV90b19sZTMyKDB4MDAwMDAwMTApCisjZGVmaW5lIFRZUEhPT05fVFhfUEZfSVBTRUMJCWNwdV90b19sZTMyKDB4MDAwMDAwMjApCisjZGVmaW5lIFRZUEhPT05fVFhfUEZfVkxBTl9QUklPUklUWQljcHVfdG9fbGUzMigweDAwMDAwMDQwKQorI2RlZmluZSBUWVBIT09OX1RYX1BGX1VEUF9DSEtTVU0JY3B1X3RvX2xlMzIoMHgwMDAwMDA4MCkKKyNkZWZpbmUgVFlQSE9PTl9UWF9QRl9QQURfRlJBTUUJCWNwdV90b19sZTMyKDB4MDAwMDAxMDApCisjZGVmaW5lIFRZUEhPT05fVFhfUEZfUkVTRVJWRUQJCWNwdV90b19sZTMyKDB4MDAwMDBlMDApCisjZGVmaW5lIFRZUEhPT05fVFhfUEZfVkxBTl9NQVNLCQljcHVfdG9fbGUzMigweDBmZmZmMDAwKQorI2RlZmluZSBUWVBIT09OX1RYX1BGX0lOVEVSTkFMCQljcHVfdG9fbGUzMigweGYwMDAwMDAwKQogI2RlZmluZSBUWVBIT09OX1RYX1BGX1ZMQU5fVEFHX1NISUZUCTEyCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIApAQCAtMjAzLDggKzIwMyw4IEBACiAJdTggIGZsYWdzOwogCXU4ICBudW1EZXNjOwogCV9fbGUxNiBtc3NfZmxhZ3M7Ci0jZGVmaW5lIFRZUEhPT05fVFNPX0ZJUlNUCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MTAwMCkKLSNkZWZpbmUgVFlQSE9PTl9UU09fTEFTVAkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDIwMDApCisjZGVmaW5lIFRZUEhPT05fVFNPX0ZJUlNUCQljcHVfdG9fbGUxNigweDEwMDApCisjZGVmaW5lIFRZUEhPT05fVFNPX0xBU1QJCWNwdV90b19sZTE2KDB4MjAwMCkKIAlfX2xlMzIgcmVzcEFkZHJMbzsKIAlfX2xlMzIgYnl0ZXNUeDsKIAlfX2xlMzIgc3RhdHVzOwpAQCAtMjIyLDggKzIyMiw4IEBACiAJdTggIGZsYWdzOwogCXU4ICBudW1EZXNjOwogCV9fbGUxNiBpcHNlY0ZsYWdzOwotI2RlZmluZSBUWVBIT09OX0lQU0VDX0dFTl9JVglfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAwMCkKLSNkZWZpbmUgVFlQSE9PTl9JUFNFQ19VU0VfSVYJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMDEpCisjZGVmaW5lIFRZUEhPT05fSVBTRUNfR0VOX0lWCWNwdV90b19sZTE2KDB4MDAwMCkKKyNkZWZpbmUgVFlQSE9PTl9JUFNFQ19VU0VfSVYJY3B1X3RvX2xlMTYoMHgwMDAxKQogCV9fbGUzMiBzYTE7CiAJX19sZTMyIHNhMjsKIAlfX2xlMzIgcmVzZXJ2ZWQ7CkBAIC0yNDgsNDEgKzI0OCw0MSBAQAogCXUzMiBhZGRyOwkvKiBvcGFxdWUsIGNvbWVzIGZyb20gdmlydEFkZHIgKi8KIAl1MzIgYWRkckhpOwkvKiBvcGFxdWUsIGNvbWVzIGZyb20gdmlydEFkZHJIaSAqLwogCV9fbGUzMiByeFN0YXR1czsKLSNkZWZpbmUgVFlQSE9PTl9SWF9FUlJfSU5URVJOQUwJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCkKLSNkZWZpbmUgVFlQSE9PTl9SWF9FUlJfRklGT19VTkRFUlJVTglfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMDEpCi0jZGVmaW5lIFRZUEhPT05fUlhfRVJSX0JBRF9TU0QJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDAwMikKLSNkZWZpbmUgVFlQSE9PTl9SWF9FUlJfUlVOVAkJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMDAzKQotI2RlZmluZSBUWVBIT09OX1JYX0VSUl9DUkMJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDAwNCkKLSNkZWZpbmUgVFlQSE9PTl9SWF9FUlJfT1ZFUlNJWkUJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDAwNSkKLSNkZWZpbmUgVFlQSE9PTl9SWF9FUlJfQUxJR04JCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDAwNikKLSNkZWZpbmUgVFlQSE9PTl9SWF9FUlJfRFJJQkJMRQkJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMDA3KQotI2RlZmluZSBUWVBIT09OX1JYX1BST1RPX01BU0sJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDAwMykKLSNkZWZpbmUgVFlQSE9PTl9SWF9QUk9UT19VTktOT1dOCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCkKLSNkZWZpbmUgVFlQSE9PTl9SWF9QUk9UT19JUAkJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMDAxKQotI2RlZmluZSBUWVBIT09OX1JYX1BST1RPX0lQWAkJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMDAyKQotI2RlZmluZSBUWVBIT09OX1JYX1ZMQU4JCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMDQpCi0jZGVmaW5lIFRZUEhPT05fUlhfSVBfRlJBRwkJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMDA4KQotI2RlZmluZSBUWVBIT09OX1JYX0lQU0VDCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMTApCi0jZGVmaW5lIFRZUEhPT05fUlhfSVBfQ0hLX0ZBSUwJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDAyMCkKLSNkZWZpbmUgVFlQSE9PTl9SWF9UQ1BfQ0hLX0ZBSUwJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDA0MCkKLSNkZWZpbmUgVFlQSE9PTl9SWF9VRFBfQ0hLX0ZBSUwJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDA4MCkKLSNkZWZpbmUgVFlQSE9PTl9SWF9JUF9DSEtfR09PRAkJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMTAwKQotI2RlZmluZSBUWVBIT09OX1JYX1RDUF9DSEtfR09PRAkJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMjAwKQotI2RlZmluZSBUWVBIT09OX1JYX1VEUF9DSEtfR09PRAkJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwNDAwKQorI2RlZmluZSBUWVBIT09OX1JYX0VSUl9JTlRFUk5BTAkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVFlQSE9PTl9SWF9FUlJfRklGT19VTkRFUlJVTgljcHVfdG9fbGUzMigweDAwMDAwMDAxKQorI2RlZmluZSBUWVBIT09OX1JYX0VSUl9CQURfU1NECQljcHVfdG9fbGUzMigweDAwMDAwMDAyKQorI2RlZmluZSBUWVBIT09OX1JYX0VSUl9SVU5UCQljcHVfdG9fbGUzMigweDAwMDAwMDAzKQorI2RlZmluZSBUWVBIT09OX1JYX0VSUl9DUkMJCWNwdV90b19sZTMyKDB4MDAwMDAwMDQpCisjZGVmaW5lIFRZUEhPT05fUlhfRVJSX09WRVJTSVpFCQljcHVfdG9fbGUzMigweDAwMDAwMDA1KQorI2RlZmluZSBUWVBIT09OX1JYX0VSUl9BTElHTgkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwNikKKyNkZWZpbmUgVFlQSE9PTl9SWF9FUlJfRFJJQkJMRQkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwNykKKyNkZWZpbmUgVFlQSE9PTl9SWF9QUk9UT19NQVNLCQljcHVfdG9fbGUzMigweDAwMDAwMDAzKQorI2RlZmluZSBUWVBIT09OX1JYX1BST1RPX1VOS05PV04JY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVFlQSE9PTl9SWF9QUk9UT19JUAkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMSkKKyNkZWZpbmUgVFlQSE9PTl9SWF9QUk9UT19JUFgJCWNwdV90b19sZTMyKDB4MDAwMDAwMDIpCisjZGVmaW5lIFRZUEhPT05fUlhfVkxBTgkJCWNwdV90b19sZTMyKDB4MDAwMDAwMDQpCisjZGVmaW5lIFRZUEhPT05fUlhfSVBfRlJBRwkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwOCkKKyNkZWZpbmUgVFlQSE9PTl9SWF9JUFNFQwkJY3B1X3RvX2xlMzIoMHgwMDAwMDAxMCkKKyNkZWZpbmUgVFlQSE9PTl9SWF9JUF9DSEtfRkFJTAkJY3B1X3RvX2xlMzIoMHgwMDAwMDAyMCkKKyNkZWZpbmUgVFlQSE9PTl9SWF9UQ1BfQ0hLX0ZBSUwJCWNwdV90b19sZTMyKDB4MDAwMDAwNDApCisjZGVmaW5lIFRZUEhPT05fUlhfVURQX0NIS19GQUlMCQljcHVfdG9fbGUzMigweDAwMDAwMDgwKQorI2RlZmluZSBUWVBIT09OX1JYX0lQX0NIS19HT09ECQljcHVfdG9fbGUzMigweDAwMDAwMTAwKQorI2RlZmluZSBUWVBIT09OX1JYX1RDUF9DSEtfR09PRAkJY3B1X3RvX2xlMzIoMHgwMDAwMDIwMCkKKyNkZWZpbmUgVFlQSE9PTl9SWF9VRFBfQ0hLX0dPT0QJCWNwdV90b19sZTMyKDB4MDAwMDA0MDApCiAJX19sZTE2IGZpbHRlclJlc3VsdHM7Ci0jZGVmaW5lIFRZUEhPT05fUlhfRklMVEVSX01BU0sJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHg3ZmZmKQotI2RlZmluZSBUWVBIT09OX1JYX0ZJTFRFUkVECQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4ODAwMCkKKyNkZWZpbmUgVFlQSE9PTl9SWF9GSUxURVJfTUFTSwkJY3B1X3RvX2xlMTYoMHg3ZmZmKQorI2RlZmluZSBUWVBIT09OX1JYX0ZJTFRFUkVECQljcHVfdG9fbGUxNigweDgwMDApCiAJX19sZTE2IGlwc2VjUmVzdWx0czsKLSNkZWZpbmUgVFlQSE9PTl9SWF9PVVRFUl9BSF9HT09ECV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDAxKQotI2RlZmluZSBUWVBIT09OX1JYX09VVEVSX0VTUF9HT09ECV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDAyKQotI2RlZmluZSBUWVBIT09OX1JYX0lOTkVSX0FIX0dPT0QJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMDQpCi0jZGVmaW5lIFRZUEhPT05fUlhfSU5ORVJfRVNQX0dPT0QJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMDgpCi0jZGVmaW5lIFRZUEhPT05fUlhfT1VURVJfQUhfRkFJTAlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAxMCkKLSNkZWZpbmUgVFlQSE9PTl9SWF9PVVRFUl9FU1BfRkFJTAlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAyMCkKLSNkZWZpbmUgVFlQSE9PTl9SWF9JTk5FUl9BSF9GQUlMCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDQwKQotI2RlZmluZSBUWVBIT09OX1JYX0lOTkVSX0VTUF9GQUlMCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDgwKQotI2RlZmluZSBUWVBIT09OX1JYX1VOS05PV05fU0EJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMTAwKQotI2RlZmluZSBUWVBIT09OX1JYX0VTUF9GT1JNQVRfRVJSCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMjAwKQorI2RlZmluZSBUWVBIT09OX1JYX09VVEVSX0FIX0dPT0QJY3B1X3RvX2xlMTYoMHgwMDAxKQorI2RlZmluZSBUWVBIT09OX1JYX09VVEVSX0VTUF9HT09ECWNwdV90b19sZTE2KDB4MDAwMikKKyNkZWZpbmUgVFlQSE9PTl9SWF9JTk5FUl9BSF9HT09ECWNwdV90b19sZTE2KDB4MDAwNCkKKyNkZWZpbmUgVFlQSE9PTl9SWF9JTk5FUl9FU1BfR09PRAljcHVfdG9fbGUxNigweDAwMDgpCisjZGVmaW5lIFRZUEhPT05fUlhfT1VURVJfQUhfRkFJTAljcHVfdG9fbGUxNigweDAwMTApCisjZGVmaW5lIFRZUEhPT05fUlhfT1VURVJfRVNQX0ZBSUwJY3B1X3RvX2xlMTYoMHgwMDIwKQorI2RlZmluZSBUWVBIT09OX1JYX0lOTkVSX0FIX0ZBSUwJY3B1X3RvX2xlMTYoMHgwMDQwKQorI2RlZmluZSBUWVBIT09OX1JYX0lOTkVSX0VTUF9GQUlMCWNwdV90b19sZTE2KDB4MDA4MCkKKyNkZWZpbmUgVFlQSE9PTl9SWF9VTktOT1dOX1NBCQljcHVfdG9fbGUxNigweDAxMDApCisjZGVmaW5lIFRZUEhPT05fUlhfRVNQX0ZPUk1BVF9FUlIJY3B1X3RvX2xlMTYoMHgwMjAwKQogCV9fYmUzMiB2bGFuVGFnOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKQEAgLTMxOCwzMSArMzE4LDMxIEBACiAJdTggIGZsYWdzOwogCXU4ICBudW1EZXNjOwogCV9fbGUxNiBjbWQ7Ci0jZGVmaW5lIFRZUEhPT05fQ01EX1RYX0VOQUJMRQkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMDEpCi0jZGVmaW5lIFRZUEhPT05fQ01EX1RYX0RJU0FCTEUJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDAyKQotI2RlZmluZSBUWVBIT09OX0NNRF9SWF9FTkFCTEUJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDAzKQotI2RlZmluZSBUWVBIT09OX0NNRF9SWF9ESVNBQkxFCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAwNCkKLSNkZWZpbmUgVFlQSE9PTl9DTURfU0VUX1JYX0ZJTFRFUglfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAwNSkKLSNkZWZpbmUgVFlQSE9PTl9DTURfUkVBRF9TVEFUUwkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMDcpCi0jZGVmaW5lIFRZUEhPT05fQ01EX1hDVlJfU0VMRUNUCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAxMykKLSNkZWZpbmUgVFlQSE9PTl9DTURfU0VUX01BWF9QS1RfU0laRQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAxYSkKLSNkZWZpbmUgVFlQSE9PTl9DTURfUkVBRF9NRURJQV9TVEFUVVMJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMWIpCi0jZGVmaW5lIFRZUEhPT05fQ01EX0dPVE9fU0xFRVAJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDIzKQotI2RlZmluZSBUWVBIT09OX0NNRF9TRVRfTVVMVElDQVNUX0hBU0gJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMjUpCi0jZGVmaW5lIFRZUEhPT05fQ01EX1NFVF9NQUNfQUREUkVTUwlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAyNikKLSNkZWZpbmUgVFlQSE9PTl9DTURfUkVBRF9NQUNfQUREUkVTUwlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAyNykKLSNkZWZpbmUgVFlQSE9PTl9DTURfVkxBTl9UWVBFX1dSSVRFCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDJiKQotI2RlZmluZSBUWVBIT09OX0NNRF9DUkVBVEVfU0EJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDM0KQotI2RlZmluZSBUWVBIT09OX0NNRF9ERUxFVEVfU0EJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDM1KQotI2RlZmluZSBUWVBIT09OX0NNRF9SRUFEX1ZFUlNJT05TCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDQzKQotI2RlZmluZSBUWVBIT09OX0NNRF9JUlFfQ09BTEVTQ0VfQ1RSTAlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDA0NSkKLSNkZWZpbmUgVFlQSE9PTl9DTURfRU5BQkxFX1dBS0VfRVZFTlRTCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDQ5KQotI2RlZmluZSBUWVBIT09OX0NNRF9TRVRfT0ZGTE9BRF9UQVNLUwlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDA0ZikKLSNkZWZpbmUgVFlQSE9PTl9DTURfSEVMTE9fUkVTUAkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwNTcpCi0jZGVmaW5lIFRZUEhPT05fQ01EX0hBTFQJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDVkKQotI2RlZmluZSBUWVBIT09OX0NNRF9SRUFEX0lQU0VDX0lORk8JX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwNWUpCi0jZGVmaW5lIFRZUEhPT05fQ01EX0dFVF9JUFNFQ19FTkFCTEUJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwNjcpCi0jZGVmaW5lIFRZUEhPT05fQ01EX0dFVF9DTURfTFZMCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDA2OSkKKyNkZWZpbmUgVFlQSE9PTl9DTURfVFhfRU5BQkxFCQljcHVfdG9fbGUxNigweDAwMDEpCisjZGVmaW5lIFRZUEhPT05fQ01EX1RYX0RJU0FCTEUJCWNwdV90b19sZTE2KDB4MDAwMikKKyNkZWZpbmUgVFlQSE9PTl9DTURfUlhfRU5BQkxFCQljcHVfdG9fbGUxNigweDAwMDMpCisjZGVmaW5lIFRZUEhPT05fQ01EX1JYX0RJU0FCTEUJCWNwdV90b19sZTE2KDB4MDAwNCkKKyNkZWZpbmUgVFlQSE9PTl9DTURfU0VUX1JYX0ZJTFRFUgljcHVfdG9fbGUxNigweDAwMDUpCisjZGVmaW5lIFRZUEhPT05fQ01EX1JFQURfU1RBVFMJCWNwdV90b19sZTE2KDB4MDAwNykKKyNkZWZpbmUgVFlQSE9PTl9DTURfWENWUl9TRUxFQ1QJCWNwdV90b19sZTE2KDB4MDAxMykKKyNkZWZpbmUgVFlQSE9PTl9DTURfU0VUX01BWF9QS1RfU0laRQljcHVfdG9fbGUxNigweDAwMWEpCisjZGVmaW5lIFRZUEhPT05fQ01EX1JFQURfTUVESUFfU1RBVFVTCWNwdV90b19sZTE2KDB4MDAxYikKKyNkZWZpbmUgVFlQSE9PTl9DTURfR09UT19TTEVFUAkJY3B1X3RvX2xlMTYoMHgwMDIzKQorI2RlZmluZSBUWVBIT09OX0NNRF9TRVRfTVVMVElDQVNUX0hBU0gJY3B1X3RvX2xlMTYoMHgwMDI1KQorI2RlZmluZSBUWVBIT09OX0NNRF9TRVRfTUFDX0FERFJFU1MJY3B1X3RvX2xlMTYoMHgwMDI2KQorI2RlZmluZSBUWVBIT09OX0NNRF9SRUFEX01BQ19BRERSRVNTCWNwdV90b19sZTE2KDB4MDAyNykKKyNkZWZpbmUgVFlQSE9PTl9DTURfVkxBTl9UWVBFX1dSSVRFCWNwdV90b19sZTE2KDB4MDAyYikKKyNkZWZpbmUgVFlQSE9PTl9DTURfQ1JFQVRFX1NBCQljcHVfdG9fbGUxNigweDAwMzQpCisjZGVmaW5lIFRZUEhPT05fQ01EX0RFTEVURV9TQQkJY3B1X3RvX2xlMTYoMHgwMDM1KQorI2RlZmluZSBUWVBIT09OX0NNRF9SRUFEX1ZFUlNJT05TCWNwdV90b19sZTE2KDB4MDA0MykKKyNkZWZpbmUgVFlQSE9PTl9DTURfSVJRX0NPQUxFU0NFX0NUUkwJY3B1X3RvX2xlMTYoMHgwMDQ1KQorI2RlZmluZSBUWVBIT09OX0NNRF9FTkFCTEVfV0FLRV9FVkVOVFMJY3B1X3RvX2xlMTYoMHgwMDQ5KQorI2RlZmluZSBUWVBIT09OX0NNRF9TRVRfT0ZGTE9BRF9UQVNLUwljcHVfdG9fbGUxNigweDAwNGYpCisjZGVmaW5lIFRZUEhPT05fQ01EX0hFTExPX1JFU1AJCWNwdV90b19sZTE2KDB4MDA1NykKKyNkZWZpbmUgVFlQSE9PTl9DTURfSEFMVAkJY3B1X3RvX2xlMTYoMHgwMDVkKQorI2RlZmluZSBUWVBIT09OX0NNRF9SRUFEX0lQU0VDX0lORk8JY3B1X3RvX2xlMTYoMHgwMDVlKQorI2RlZmluZSBUWVBIT09OX0NNRF9HRVRfSVBTRUNfRU5BQkxFCWNwdV90b19sZTE2KDB4MDA2NykKKyNkZWZpbmUgVFlQSE9PTl9DTURfR0VUX0NNRF9MVkwJCWNwdV90b19sZTE2KDB4MDA2OSkKIAl1MTYgc2VxTm87CiAJX19sZTE2IHBhcm0xOwogCV9fbGUzMiBwYXJtMjsKQEAgLTM4MCwxMSArMzgwLDExIEBACiAKIC8qIFRZUEhPT05fQ01EX1NFVF9SWF9GSUxURVIgZmlsdGVyIGJpdHMgKGNtZC5wYXJtMSkKICAqLwotI2RlZmluZSBUWVBIT09OX1JYX0ZJTFRFUl9ESVJFQ1RFRAlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAwMSkKLSNkZWZpbmUgVFlQSE9PTl9SWF9GSUxURVJfQUxMX01DQVNUCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDAyKQotI2RlZmluZSBUWVBIT09OX1JYX0ZJTFRFUl9CUk9BRENBU1QJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMDQpCi0jZGVmaW5lIFRZUEhPT05fUlhfRklMVEVSX1BST01JU0NPVVMJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMDgpCi0jZGVmaW5lIFRZUEhPT05fUlhfRklMVEVSX01DQVNUX0hBU0gJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMTApCisjZGVmaW5lIFRZUEhPT05fUlhfRklMVEVSX0RJUkVDVEVECWNwdV90b19sZTE2KDB4MDAwMSkKKyNkZWZpbmUgVFlQSE9PTl9SWF9GSUxURVJfQUxMX01DQVNUCWNwdV90b19sZTE2KDB4MDAwMikKKyNkZWZpbmUgVFlQSE9PTl9SWF9GSUxURVJfQlJPQURDQVNUCWNwdV90b19sZTE2KDB4MDAwNCkKKyNkZWZpbmUgVFlQSE9PTl9SWF9GSUxURVJfUFJPTUlTQ09VUwljcHVfdG9fbGUxNigweDAwMDgpCisjZGVmaW5lIFRZUEhPT05fUlhfRklMVEVSX01DQVNUX0hBU0gJY3B1X3RvX2xlMTYoMHgwMDEwKQogCiAvKiBUWVBIT09OX0NNRF9SRUFEX1NUQVRTIHJlc3BvbnNlIGZvcm1hdAogICovCkBAIC00MTYsNDAgKzQxNiw0MCBAQAogCV9fbGUzMiByeE92ZXJmbG93OwogCV9fbGUzMiByeEZpbHRlcmVkOwogCV9fbGUzMiBsaW5rU3RhdHVzOwotI2RlZmluZSBUWVBIT09OX0xJTktfU1RBVF9NQVNLCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMDEpCi0jZGVmaW5lIFRZUEhPT05fTElOS19HT09ECQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMDEpCi0jZGVmaW5lIFRZUEhPT05fTElOS19CQUQJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCkKLSNkZWZpbmUgVFlQSE9PTl9MSU5LX1NQRUVEX01BU0sJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDAwMikKLSNkZWZpbmUgVFlQSE9PTl9MSU5LXzEwME1CUFMJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDAwMikKLSNkZWZpbmUgVFlQSE9PTl9MSU5LXzEwTUJQUwkJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMDAwKQotI2RlZmluZSBUWVBIT09OX0xJTktfRFVQTEVYX01BU0sJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMDA0KQotI2RlZmluZSBUWVBIT09OX0xJTktfRlVMTF9EVVBMRVgJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMDA0KQotI2RlZmluZSBUWVBIT09OX0xJTktfSEFMRl9EVVBMRVgJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMDAwKQorI2RlZmluZSBUWVBIT09OX0xJTktfU1RBVF9NQVNLCQljcHVfdG9fbGUzMigweDAwMDAwMDAxKQorI2RlZmluZSBUWVBIT09OX0xJTktfR09PRAkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMSkKKyNkZWZpbmUgVFlQSE9PTl9MSU5LX0JBRAkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVFlQSE9PTl9MSU5LX1NQRUVEX01BU0sJCWNwdV90b19sZTMyKDB4MDAwMDAwMDIpCisjZGVmaW5lIFRZUEhPT05fTElOS18xMDBNQlBTCQljcHVfdG9fbGUzMigweDAwMDAwMDAyKQorI2RlZmluZSBUWVBIT09OX0xJTktfMTBNQlBTCQljcHVfdG9fbGUzMigweDAwMDAwMDAwKQorI2RlZmluZSBUWVBIT09OX0xJTktfRFVQTEVYX01BU0sJY3B1X3RvX2xlMzIoMHgwMDAwMDAwNCkKKyNkZWZpbmUgVFlQSE9PTl9MSU5LX0ZVTExfRFVQTEVYCWNwdV90b19sZTMyKDB4MDAwMDAwMDQpCisjZGVmaW5lIFRZUEhPT05fTElOS19IQUxGX0RVUExFWAljcHVfdG9fbGUzMigweDAwMDAwMDAwKQogCV9fbGUzMiB1bnVzZWQyOwogCV9fbGUzMiB1bnVzZWQzOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIC8qIFRZUEhPT05fQ01EX1hDVlJfU0VMRUNUIHhjdnIgdmFsdWVzIChyZXNwLnBhcm0xKQogICovCi0jZGVmaW5lIFRZUEhPT05fWENWUl8xMEhBTEYJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMDApCi0jZGVmaW5lIFRZUEhPT05fWENWUl8xMEZVTEwJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMDEpCi0jZGVmaW5lIFRZUEhPT05fWENWUl8xMDBIQUxGCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDAyKQotI2RlZmluZSBUWVBIT09OX1hDVlJfMTAwRlVMTAlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAwMykKLSNkZWZpbmUgVFlQSE9PTl9YQ1ZSX0FVVE9ORUcJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMDQpCisjZGVmaW5lIFRZUEhPT05fWENWUl8xMEhBTEYJY3B1X3RvX2xlMTYoMHgwMDAwKQorI2RlZmluZSBUWVBIT09OX1hDVlJfMTBGVUxMCWNwdV90b19sZTE2KDB4MDAwMSkKKyNkZWZpbmUgVFlQSE9PTl9YQ1ZSXzEwMEhBTEYJY3B1X3RvX2xlMTYoMHgwMDAyKQorI2RlZmluZSBUWVBIT09OX1hDVlJfMTAwRlVMTAljcHVfdG9fbGUxNigweDAwMDMpCisjZGVmaW5lIFRZUEhPT05fWENWUl9BVVRPTkVHCWNwdV90b19sZTE2KDB4MDAwNCkKIAogLyogVFlQSE9PTl9DTURfUkVBRF9NRURJQV9TVEFUVVMgKHJlc3AucGFybTEpCiAgKi8KLSNkZWZpbmUgVFlQSE9PTl9NRURJQV9TVEFUX0NSQ19TVFJJUF9ESVNBQkxFCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDA0KQotI2RlZmluZSBUWVBIT09OX01FRElBX1NUQVRfQ09MTElTSU9OX0RFVEVDVAlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAxMCkKLSNkZWZpbmUgVFlQSE9PTl9NRURJQV9TVEFUX0NBUlJJRVJfU0VOU0UJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMjApCi0jZGVmaW5lIFRZUEhPT05fTUVESUFfU1RBVF9QT0xBUklUWV9SRVYJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwNDAwKQotI2RlZmluZSBUWVBIT09OX01FRElBX1NUQVRfTk9fTElOSwkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDA4MDApCisjZGVmaW5lIFRZUEhPT05fTUVESUFfU1RBVF9DUkNfU1RSSVBfRElTQUJMRQljcHVfdG9fbGUxNigweDAwMDQpCisjZGVmaW5lIFRZUEhPT05fTUVESUFfU1RBVF9DT0xMSVNJT05fREVURUNUCWNwdV90b19sZTE2KDB4MDAxMCkKKyNkZWZpbmUgVFlQSE9PTl9NRURJQV9TVEFUX0NBUlJJRVJfU0VOU0UJY3B1X3RvX2xlMTYoMHgwMDIwKQorI2RlZmluZSBUWVBIT09OX01FRElBX1NUQVRfUE9MQVJJVFlfUkVWCQljcHVfdG9fbGUxNigweDA0MDApCisjZGVmaW5lIFRZUEhPT05fTUVESUFfU1RBVF9OT19MSU5LCQljcHVfdG9fbGUxNigweDA4MDApCiAKIC8qIFRZUEhPT05fQ01EX1NFVF9NVUxUSUNBU1RfSEFTSCBlbmFibGUgdmFsdWVzIChjbWQucGFybTEpCiAgKi8KLSNkZWZpbmUgVFlQSE9PTl9NQ0FTVF9IQVNIX0RJU0FCTEUJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMDApCi0jZGVmaW5lIFRZUEhPT05fTUNBU1RfSEFTSF9FTkFCTEUJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMDEpCi0jZGVmaW5lIFRZUEhPT05fTUNBU1RfSEFTSF9TRVQJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDAyKQorI2RlZmluZSBUWVBIT09OX01DQVNUX0hBU0hfRElTQUJMRQljcHVfdG9fbGUxNigweDAwMDApCisjZGVmaW5lIFRZUEhPT05fTUNBU1RfSEFTSF9FTkFCTEUJY3B1X3RvX2xlMTYoMHgwMDAxKQorI2RlZmluZSBUWVBIT09OX01DQVNUX0hBU0hfU0VUCQljcHVfdG9fbGUxNigweDAwMDIpCiAKIC8qIFRZUEhPT05fQ01EX0NSRUFURV9TQSBkZXNjcmlwdG9yIGFuZCBzZXR0aW5ncwogICovCkBAIC00NTksOSArNDU5LDkgQEAKIAl1MTYgY21kOwogCXUxNiBzZXFObzsKIAl1MTYgbW9kZTsKLSNkZWZpbmUgVFlQSE9PTl9TQV9NT0RFX05VTEwJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDAwKQotI2RlZmluZSBUWVBIT09OX1NBX01PREVfQUgJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDAxKQotI2RlZmluZSBUWVBIT09OX1NBX01PREVfRVNQCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAwMikKKyNkZWZpbmUgVFlQSE9PTl9TQV9NT0RFX05VTEwJCWNwdV90b19sZTE2KDB4MDAwMCkKKyNkZWZpbmUgVFlQSE9PTl9TQV9NT0RFX0FICQljcHVfdG9fbGUxNigweDAwMDEpCisjZGVmaW5lIFRZUEhPT05fU0FfTU9ERV9FU1AJCWNwdV90b19sZTE2KDB4MDAwMikKIAl1OCAgaGFzaEZsYWdzOwogI2RlZmluZSBUWVBIT09OX1NBX0hBU0hfRU5BQkxFCQkweDAxCiAjZGVmaW5lIFRZUEhPT05fU0FfSEFTSF9TSEExCQkweDAyCkBAIC00OTMsMjIgKzQ5MywyMiBAQAogLyogVFlQSE9PTl9DTURfU0VUX09GRkxPQURfVEFTS1MgYml0cyAoY21kLnBhcm0yIChUeCkgJiBjbWQucGFybTMgKFJ4KSkKICAqIFRoaXMgaXMgYWxsIGZvciBJUHY0LgogICovCi0jZGVmaW5lIFRZUEhPT05fT0ZGTE9BRF9UQ1BfQ0hLU1VNCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDAwMikKLSNkZWZpbmUgVFlQSE9PTl9PRkZMT0FEX1VEUF9DSEtTVU0JX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMDA0KQotI2RlZmluZSBUWVBIT09OX09GRkxPQURfSVBfQ0hLU1VNCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDAwOCkKLSNkZWZpbmUgVFlQSE9PTl9PRkZMT0FEX0lQU0VDCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMTApCi0jZGVmaW5lIFRZUEhPT05fT0ZGTE9BRF9CQ0FTVF9USFJPVFRMRQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMjApCi0jZGVmaW5lIFRZUEhPT05fT0ZGTE9BRF9ESENQX1BSRVZFTlQJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMDQwKQotI2RlZmluZSBUWVBIT09OX09GRkxPQURfVkxBTgkJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMDgwKQotI2RlZmluZSBUWVBIT09OX09GRkxPQURfRklMVEVSSU5HCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDEwMCkKLSNkZWZpbmUgVFlQSE9PTl9PRkZMT0FEX1RDUF9TRUdNRU5UCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDIwMCkKKyNkZWZpbmUgVFlQSE9PTl9PRkZMT0FEX1RDUF9DSEtTVU0JY3B1X3RvX2xlMzIoMHgwMDAwMDAwMikKKyNkZWZpbmUgVFlQSE9PTl9PRkZMT0FEX1VEUF9DSEtTVU0JY3B1X3RvX2xlMzIoMHgwMDAwMDAwNCkKKyNkZWZpbmUgVFlQSE9PTl9PRkZMT0FEX0lQX0NIS1NVTQljcHVfdG9fbGUzMigweDAwMDAwMDA4KQorI2RlZmluZSBUWVBIT09OX09GRkxPQURfSVBTRUMJCWNwdV90b19sZTMyKDB4MDAwMDAwMTApCisjZGVmaW5lIFRZUEhPT05fT0ZGTE9BRF9CQ0FTVF9USFJPVFRMRQljcHVfdG9fbGUzMigweDAwMDAwMDIwKQorI2RlZmluZSBUWVBIT09OX09GRkxPQURfREhDUF9QUkVWRU5UCWNwdV90b19sZTMyKDB4MDAwMDAwNDApCisjZGVmaW5lIFRZUEhPT05fT0ZGTE9BRF9WTEFOCQljcHVfdG9fbGUzMigweDAwMDAwMDgwKQorI2RlZmluZSBUWVBIT09OX09GRkxPQURfRklMVEVSSU5HCWNwdV90b19sZTMyKDB4MDAwMDAxMDApCisjZGVmaW5lIFRZUEhPT05fT0ZGTE9BRF9UQ1BfU0VHTUVOVAljcHVfdG9fbGUzMigweDAwMDAwMjAwKQogCiAvKiBUWVBIT09OX0NNRF9FTkFCTEVfV0FLRV9FVkVOVFMgYml0cyAoY21kLnBhcm0xKQogICovCi0jZGVmaW5lIFRZUEhPT05fV0FLRV9NQUdJQ19QS1QJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMSkKLSNkZWZpbmUgVFlQSE9PTl9XQUtFX0xJTktfRVZFTlQJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMikKLSNkZWZpbmUgVFlQSE9PTl9XQUtFX0lDTVBfRUNITwkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDA0KQotI2RlZmluZSBUWVBIT09OX1dBS0VfQVJQCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDgpCisjZGVmaW5lIFRZUEhPT05fV0FLRV9NQUdJQ19QS1QJCWNwdV90b19sZTE2KDB4MDEpCisjZGVmaW5lIFRZUEhPT05fV0FLRV9MSU5LX0VWRU5UCQljcHVfdG9fbGUxNigweDAyKQorI2RlZmluZSBUWVBIT09OX1dBS0VfSUNNUF9FQ0hPCQljcHVfdG9fbGUxNigweDA0KQorI2RlZmluZSBUWVBIT09OX1dBS0VfQVJQCQljcHVfdG9fbGUxNigweDA4KQogCiAvKiBUaGVzZSBhcmUgdXNlZCB0byBsb2FkIHRoZSBmaXJtd2FyZSBpbWFnZSBvbiB0aGUgTklDCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VjY19nZXRoLmMgYi9kcml2ZXJzL25ldC91Y2NfZ2V0aC5jCmluZGV4IDFmNjFlNDIuLmExMTAzMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VjY19nZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvdWNjX2dldGguYwpAQCAtMzksNyArMzksNyBAQAogI2luY2x1ZGUgPGFzbS91Y2NfZmFzdC5oPgogCiAjaW5jbHVkZSAidWNjX2dldGguaCIKLSNpbmNsdWRlICJ1Y2NfZ2V0aF9taWkuaCIKKyNpbmNsdWRlICJmc2xfcHFfbWRpby5oIgogCiAjdW5kZWYgREVCVUcKIApAQCAtMzI0OSw3ICszMjQ5LDcgQEAKIAkJaG93bWFueSArPSB1Y2NfZ2V0aF9yeCh1Z2V0aCwgaSwgYnVkZ2V0IC0gaG93bWFueSk7CiAKIAlpZiAoaG93bWFueSA8IGJ1ZGdldCkgewotCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJc2V0Yml0czMyKHVnZXRoLT51Y2NmLT5wX3VjY20sIFVDQ0VfUlhfRVZFTlRTKTsKIAl9CiAKQEAgLTMyODAsMTAgKzMyODAsMTAgQEAKIAogCS8qIGNoZWNrIGZvciByZWNlaXZlIGV2ZW50cyB0aGF0IHJlcXVpcmUgcHJvY2Vzc2luZyAqLwogCWlmICh1Y2NlICYgVUNDRV9SWF9FVkVOVFMpIHsKLQkJaWYgKG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoJnVnZXRoLT5uYXBpKSkgeworCQlpZiAobmFwaV9zY2hlZHVsZV9wcmVwKCZ1Z2V0aC0+bmFwaSkpIHsKIAkJCXVjY20gJj0gflVDQ0VfUlhfRVZFTlRTOwogCQkJb3V0X2JlMzIodWNjZi0+cF91Y2NtLCB1Y2NtKTsKLQkJCV9fbmV0aWZfcnhfc2NoZWR1bGUoJnVnZXRoLT5uYXBpKTsKKwkJCV9fbmFwaV9zY2hlZHVsZSgmdWdldGgtPm5hcGkpOwogCQl9CiAJfQogCkBAIC0zNTAxLDYgKzM1MDEsMjAgQEAKIAlyZXR1cm4gUEhZX0lOVEVSRkFDRV9NT0RFX01JSTsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB1Y2NfZ2V0aF9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSB1Y2NfZ2V0aF9vcGVuLAorCS5uZG9fc3RvcAkJPSB1Y2NfZ2V0aF9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gdWNjX2dldGhfc3RhcnRfeG1pdCwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IGV0aF9tYWNfYWRkciwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QJPSB1Y2NfZ2V0aF9zZXRfbXVsdGksCisJLm5kb190eF90aW1lb3V0CQk9IHVjY19nZXRoX3RpbWVvdXQsCisjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKKwkubmRvX3BvbGxfY29udHJvbGxlcgk9IHVjY19uZXRwb2xsLAorI2VuZGlmCit9OworCiBzdGF0aWMgaW50IHVjY19nZXRoX3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UqIG9mZGV2LCBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXZpY2UgPSAmb2ZkZXYtPmRldjsKQEAgLTM2NDEsNyArMzY1NSw3IEBACiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gLTE7CiAKLQkJdWVjX21kaW9fYnVzX25hbWUoYnVzX25hbWUsIG1kaW8pOworCQlmc2xfcHFfbWRpb19idXNfbmFtZShidXNfbmFtZSwgbWRpbyk7CiAJCXNucHJpbnRmKHVnX2luZm8tPnBoeV9idXNfaWQsIHNpemVvZih1Z19pbmZvLT5waHlfYnVzX2lkKSwKIAkJCSIlczolMDJ4IiwgYnVzX25hbWUsICpwcm9wKTsKIAl9CkBAIC0zNzE2LDE5ICszNzMwLDExIEBACiAKIAkvKiBGaWxsIGluIHRoZSBkZXYgc3RydWN0dXJlICovCiAJdWVjX3NldF9ldGh0b29sX29wcyhkZXYpOwotCWRldi0+b3BlbiA9IHVjY19nZXRoX29wZW47Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSB1Y2NfZ2V0aF9zdGFydF94bWl0OwotCWRldi0+dHhfdGltZW91dCA9IHVjY19nZXRoX3RpbWVvdXQ7CisJZGV2LT5uZXRkZXZfb3BzID0gJnVjY19nZXRoX25ldGRldl9vcHM7CiAJZGV2LT53YXRjaGRvZ190aW1lbyA9IFRYX1RJTUVPVVQ7CiAJSU5JVF9XT1JLKCZ1Z2V0aC0+dGltZW91dF93b3JrLCB1Y2NfZ2V0aF90aW1lb3V0X3dvcmspOwogCW5ldGlmX25hcGlfYWRkKGRldiwgJnVnZXRoLT5uYXBpLCB1Y2NfZ2V0aF9wb2xsLCBVQ0NfR0VUSF9ERVZfV0VJR0hUKTsKLSNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgotCWRldi0+cG9sbF9jb250cm9sbGVyID0gdWNjX25ldHBvbGw7Ci0jZW5kaWYKLQlkZXYtPnN0b3AgPSB1Y2NfZ2V0aF9jbG9zZTsKLS8vICAgIGRldi0+Y2hhbmdlX210dSA9IHVjY19nZXRoX2NoYW5nZV9tdHU7CiAJZGV2LT5tdHUgPSAxNTAwOwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gdWNjX2dldGhfc2V0X211bHRpOwogCiAJdWdldGgtPm1zZ19lbmFibGUgPSBuZXRpZl9tc2dfaW5pdChkZWJ1Zy5tc2dfZW5hYmxlLCBVR0VUSF9NU0dfREVGQVVMVCk7CiAJdWdldGgtPnBoeV9pbnRlcmZhY2UgPSBwaHlfaW50ZXJmYWNlOwpAQCAtMzc4OSwxMSArMzc5NSw2IEBACiB7CiAJaW50IGksIHJldDsKIAotCXJldCA9IHVlY19tZGlvX2luaXQoKTsKLQotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KIAlpZiAobmV0aWZfbXNnX2RydigmZGVidWcpKQogCQlwcmludGsoS0VSTl9JTkZPICJ1Y2NfZ2V0aDogIiBEUlZfREVTQyAiXG4iKTsKIAlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQpAQCAtMzgwMiwxNiArMzgwMywxMiBAQAogCiAJcmV0ID0gb2ZfcmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZ1Y2NfZ2V0aF9kcml2ZXIpOwogCi0JaWYgKHJldCkKLQkJdWVjX21kaW9fZXhpdCgpOwotCiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHVjY19nZXRoX2V4aXQodm9pZCkKIHsKIAlvZl91bnJlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmdWNjX2dldGhfZHJpdmVyKTsKLQl1ZWNfbWRpb19leGl0KCk7CiB9CiAKIG1vZHVsZV9pbml0KHVjY19nZXRoX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdWNjX2dldGguaCBiL2RyaXZlcnMvbmV0L3VjY19nZXRoLmgKaW5kZXggNjExYmRlZi4uZTNhMjVlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdWNjX2dldGguaAorKysgYi9kcml2ZXJzL25ldC91Y2NfZ2V0aC5oCkBAIC0yOCw4ICsyOCw2IEBACiAjaW5jbHVkZSA8YXNtL3VjYy5oPgogI2luY2x1ZGUgPGFzbS91Y2NfZmFzdC5oPgogCi0jaW5jbHVkZSAidWNjX2dldGhfbWlpLmgiCi0KICNkZWZpbmUgRFJWX0RFU0MgIlFFIFVDQyBHaWdhYml0IEV0aGVybmV0IENvbnRyb2xsZXIiCiAjZGVmaW5lIERSVl9OQU1FICJ1Y2NfZ2V0aCIKICNkZWZpbmUgRFJWX1ZFUlNJT04gIjEuMSIKQEAgLTE4NCw2ICsxODIsMTggQEAKICNkZWZpbmUgVUNDRV9SWF9FVkVOVFMgIChVQ0NFX1JYRiB8IFVDQ19HRVRIX1VDQ0VfQlNZKQogI2RlZmluZSBVQ0NFX1RYX0VWRU5UUwkoVUNDRV9UWEIgfCBVQ0NfR0VUSF9VQ0NFX1RYRSkKIAorLyogVEJJIGRlZmluZXMgKi8KKyNkZWZpbmUJRU5FVF9UQklfTUlJX0NSCQkweDAwCS8qIENvbnRyb2wgKi8KKyNkZWZpbmUJRU5FVF9UQklfTUlJX1NSCQkweDAxCS8qIFN0YXR1cyAqLworI2RlZmluZQlFTkVUX1RCSV9NSUlfQU5BCTB4MDQJLyogQU4gYWR2ZXJ0aXNlbWVudCAqLworI2RlZmluZQlFTkVUX1RCSV9NSUlfQU5MUEJQQQkweDA1CS8qIEFOIGxpbmsgcGFydG5lciBiYXNlIHBhZ2UgYWJpbGl0eSAqLworI2RlZmluZQlFTkVUX1RCSV9NSUlfQU5FWAkweDA2CS8qIEFOIGV4cGFuc2lvbiAqLworI2RlZmluZQlFTkVUX1RCSV9NSUlfQU5OUFQJMHgwNwkvKiBBTiBuZXh0IHBhZ2UgdHJhbnNtaXQgKi8KKyNkZWZpbmUJRU5FVF9UQklfTUlJX0FOTFBBTlAJMHgwOAkvKiBBTiBsaW5rIHBhcnRuZXIgYWJpbGl0eSBuZXh0IHBhZ2UgKi8KKyNkZWZpbmUJRU5FVF9UQklfTUlJX0VYU1QJMHgwRgkvKiBFeHRlbmRlZCBzdGF0dXMgKi8KKyNkZWZpbmUJRU5FVF9UQklfTUlJX0pECQkweDEwCS8qIEppdHRlciBkaWFnbm9zdGljcyAqLworI2RlZmluZQlFTkVUX1RCSV9NSUlfVEJJQ09OCTB4MTEJLyogVEJJIGNvbnRyb2wgKi8KKwogLyogVUNDIEdFVEggTUFDQ0ZHMSAoTUFDIENvbmZpZ3VyYXRpb24gMSBSZWdpc3RlcikgKi8KICNkZWZpbmUgTUFDQ0ZHMV9GTE9XX1JYICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAJLyogRmxvdyBDb250cm9sCiAJCQkJCQkJCSAgIFJ4ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91Y2NfZ2V0aF9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC91Y2NfZ2V0aF9ldGh0b29sLmMKaW5kZXggNjhhN2Y1NC4uYTc1NWJlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdWNjX2dldGhfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L3VjY19nZXRoX2V0aHRvb2wuYwpAQCAtMzksNyArMzksNiBAQAogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogCiAjaW5jbHVkZSAidWNjX2dldGguaCIKLSNpbmNsdWRlICJ1Y2NfZ2V0aF9taWkuaCIKIAogc3RhdGljIGNoYXIgaHdfc3RhdF9nc3RyaW5nc1tdW0VUSF9HU1RSSU5HX0xFTl0gPSB7CiAJInR4LTY0LWZyYW1lcyIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91Y2NfZ2V0aF9taWkuYyBiL2RyaXZlcnMvbmV0L3VjY19nZXRoX21paS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYWRhNGVkLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3VjY19nZXRoX21paS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjk1ICswLDAgQEAKLS8qCi0gKiBkcml2ZXJzL25ldC91Y2NfZ2V0aF9taWkuYwotICoKLSAqIFFFIFVDQyBHaWdhYml0IEV0aGVybmV0IERyaXZlciAtLSBNSUkgTWFuYWdlbWVudCBCdXMgSW1wbGVtZW50YXRpb24KLSAqIFByb3ZpZGVzIEJ1cyBpbnRlcmZhY2UgZm9yIE1JSSBNYW5hZ2VtZW50IHJlZ3MgaW4gdGhlIFVDQyByZWdpc3RlciBzcGFjZQotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgotICoKLSAqIEF1dGhvcnM6IExpIFlhbmcgPGxlb2xpQGZyZWVzY2FsZS5jb20+Ci0gKgkgICAgS2ltIFBoaWxsaXBzIDxraW0ucGhpbGxpcHNAZnJlZXNjYWxlLmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgotI2luY2x1ZGUgPGxpbnV4L21paS5oPgotI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzbF9kZXZpY2VzLmg+Ci0jaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KLQotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGFzbS91Y2MuaD4KLQotI2luY2x1ZGUgInVjY19nZXRoX21paS5oIgotI2luY2x1ZGUgInVjY19nZXRoLmgiCi0KLSNkZWZpbmUgREVCVUcKLSNpZmRlZiBERUJVRwotI2RlZmluZSB2ZGJnKGZvcm1hdCwgYXJnLi4uKSBwcmludGsoS0VSTl9ERUJVRyAsIGZvcm1hdCAiXG4iICwgIyMgYXJnKQotI2Vsc2UKLSNkZWZpbmUgdmRiZyhmb3JtYXQsIGFyZy4uLikgZG8ge30gd2hpbGUoMCkKLSNlbmRpZgotCi0jZGVmaW5lIE1JSV9EUlZfREVTQyAiUUUgVUNDIEV0aGVybmV0IENvbnRyb2xsZXIgTUlJIEJ1cyIKLSNkZWZpbmUgTUlJX0RSVl9OQU1FICJmc2wtdWVjX21kaW8iCi0KLS8qIFdyaXRlIHZhbHVlIHRvIHRoZSBQSFkgZm9yIHRoaXMgZGV2aWNlIHRvIHRoZSByZWdpc3RlciBhdCByZWdudW0sICovCi0vKiB3YWl0aW5nIHVudGlsIHRoZSB3cml0ZSBpcyBkb25lIGJlZm9yZSBpdCByZXR1cm5zLiAgQWxsIFBIWSAqLwotLyogY29uZmlndXJhdGlvbiBoYXMgdG8gYmUgZG9uZSB0aHJvdWdoIHRoZSBtYXN0ZXIgVUVDIE1JSU0gcmVncyAqLwotaW50IHVlY19tZGlvX3dyaXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBtaWlfaWQsIGludCByZWdudW0sIHUxNiB2YWx1ZSkKLXsKLQlzdHJ1Y3QgdWNjX21paV9tbmcgX19pb21lbSAqcmVncyA9ICh2b2lkIF9faW9tZW0gKilidXMtPnByaXY7Ci0KLQkvKiBTZXR0aW5nIHVwIHRoZSBNSUkgTWFuZ2VtZW50IEFkZHJlc3MgUmVnaXN0ZXIgKi8KLQlvdXRfYmUzMigmcmVncy0+bWlpbWFkZCwKLQkJIChtaWlfaWQgPDwgTUlJTUFERF9QSFlfQUREUkVTU19TSElGVCkgfCByZWdudW0pOwotCi0JLyogU2V0dGluZyB1cCB0aGUgTUlJIE1hbmdlbWVudCBDb250cm9sIFJlZ2lzdGVyIHdpdGggdGhlIHZhbHVlICovCi0Jb3V0X2JlMzIoJnJlZ3MtPm1paW1jb24sIHZhbHVlKTsKLQotCS8qIFdhaXQgdGlsbCBNSUkgbWFuYWdlbWVudCB3cml0ZSBpcyBjb21wbGV0ZSAqLwotCXdoaWxlICgoaW5fYmUzMigmcmVncy0+bWlpbWluZCkpICYgTUlJTUlORF9CVVNZKQotCQljcHVfcmVsYXgoKTsKLQotCXJldHVybiAwOwotfQotCi0vKiBSZWFkcyBmcm9tIHJlZ2lzdGVyIHJlZ251bSBpbiB0aGUgUEhZIGZvciBkZXZpY2UgZGV2LCAqLwotLyogcmV0dXJuaW5nIHRoZSB2YWx1ZS4gIENsZWFycyBtaWltY29tIGZpcnN0LiAgQWxsIFBIWSAqLwotLyogY29uZmlndXJhdGlvbiBoYXMgdG8gYmUgZG9uZSB0aHJvdWdoIHRoZSBUU0VDMSBNSUlNIHJlZ3MgKi8KLWludCB1ZWNfbWRpb19yZWFkKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBtaWlfaWQsIGludCByZWdudW0pCi17Ci0Jc3RydWN0IHVjY19taWlfbW5nIF9faW9tZW0gKnJlZ3MgPSAodm9pZCBfX2lvbWVtICopYnVzLT5wcml2OwotCXUxNiB2YWx1ZTsKLQotCS8qIFNldHRpbmcgdXAgdGhlIE1JSSBNYW5nZW1lbnQgQWRkcmVzcyBSZWdpc3RlciAqLwotCW91dF9iZTMyKCZyZWdzLT5taWltYWRkLAotCQkgKG1paV9pZCA8PCBNSUlNQUREX1BIWV9BRERSRVNTX1NISUZUKSB8IHJlZ251bSk7Ci0KLQkvKiBDbGVhciBtaWltY29tLCBwZXJmb3JtIGFuIE1JSSBtYW5hZ2VtZW50IHJlYWQgY3ljbGUgKi8KLQlvdXRfYmUzMigmcmVncy0+bWlpbWNvbSwgMCk7Ci0Jb3V0X2JlMzIoJnJlZ3MtPm1paW1jb20sIE1JSU1DT01fUkVBRF9DWUNMRSk7Ci0KLQkvKiBXYWl0IHRpbGwgTUlJIG1hbmFnZW1lbnQgd3JpdGUgaXMgY29tcGxldGUgKi8KLQl3aGlsZSAoKGluX2JlMzIoJnJlZ3MtPm1paW1pbmQpKSAmIChNSUlNSU5EX0JVU1kgfCBNSUlNSU5EX05PVF9WQUxJRCkpCi0JCWNwdV9yZWxheCgpOwotCi0JLyogUmVhZCBNSUkgbWFuYWdlbWVudCBzdGF0dXMgICovCi0JdmFsdWUgPSBpbl9iZTMyKCZyZWdzLT5taWltc3RhdCk7Ci0KLQlyZXR1cm4gdmFsdWU7Ci19Ci0KLS8qIFJlc2V0IHRoZSBNSUlNIHJlZ2lzdGVycywgYW5kIHdhaXQgZm9yIHRoZSBidXMgdG8gZnJlZSAqLwotc3RhdGljIGludCB1ZWNfbWRpb19yZXNldChzdHJ1Y3QgbWlpX2J1cyAqYnVzKQotewotCXN0cnVjdCB1Y2NfbWlpX21uZyBfX2lvbWVtICpyZWdzID0gKHZvaWQgX19pb21lbSAqKWJ1cy0+cHJpdjsKLQlpbnQgdGltZW91dCA9IFBIWV9JTklUX1RJTUVPVVQ7Ci0KLQltdXRleF9sb2NrKCZidXMtPm1kaW9fbG9jayk7Ci0KLQkvKiBSZXNldCB0aGUgbWFuYWdlbWVudCBpbnRlcmZhY2UgKi8KLQlvdXRfYmUzMigmcmVncy0+bWlpbWNmZywgTUlJTUNGR19SRVNFVF9NQU5BR0VNRU5UKTsKLQotCS8qIFNldHVwIHRoZSBNSUkgTWdtdCBjbG9jayBzcGVlZCAqLwotCW91dF9iZTMyKCZyZWdzLT5taWltY2ZnLCBNSUlNQ0ZHX01BTkFHRU1FTlRfQ0xPQ0tfRElWSURFX0JZXzExMik7Ci0KLQkvKiBXYWl0IHVudGlsIHRoZSBidXMgaXMgZnJlZSAqLwotCXdoaWxlICgoaW5fYmUzMigmcmVncy0+bWlpbWluZCkgJiBNSUlNSU5EX0JVU1kpICYmIHRpbWVvdXQtLSkKLQkJY3B1X3JlbGF4KCk7Ci0KLQltdXRleF91bmxvY2soJmJ1cy0+bWRpb19sb2NrKTsKLQotCWlmICh0aW1lb3V0IDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBUaGUgTUlJIEJ1cyBpcyBzdHVjayFcbiIsIGJ1cy0+bmFtZSk7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdWVjX21kaW9fcHJvYmUoc3RydWN0IG9mX2RldmljZSAqb2ZkZXYsIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoKQotewotCXN0cnVjdCBkZXZpY2UgKmRldmljZSA9ICZvZmRldi0+ZGV2OwotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBvZmRldi0+bm9kZSwgKnRlbXBucCA9IE5VTEw7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpjaGlsZCA9IE5VTEw7Ci0Jc3RydWN0IHVjY19taWlfbW5nIF9faW9tZW0gKnJlZ3M7Ci0Jc3RydWN0IG1paV9idXMgKm5ld19idXM7Ci0Jc3RydWN0IHJlc291cmNlIHJlczsKLQlpbnQgaywgZXJyID0gMDsKLQotCW5ld19idXMgPSBtZGlvYnVzX2FsbG9jKCk7Ci0JaWYgKE5VTEwgPT0gbmV3X2J1cykKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQluZXdfYnVzLT5uYW1lID0gIlVDQyBFdGhlcm5ldCBDb250cm9sbGVyIE1JSSBCdXMiOwotCW5ld19idXMtPnJlYWQgPSAmdWVjX21kaW9fcmVhZDsKLQluZXdfYnVzLT53cml0ZSA9ICZ1ZWNfbWRpb193cml0ZTsKLQluZXdfYnVzLT5yZXNldCA9ICZ1ZWNfbWRpb19yZXNldDsKLQotCW1lbXNldCgmcmVzLCAwLCBzaXplb2YocmVzKSk7Ci0KLQllcnIgPSBvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG5wLCAwLCAmcmVzKTsKLQlpZiAoZXJyKQotCQlnb3RvIHJlZ19tYXBfZmFpbDsKLQotCXVlY19tZGlvX2J1c19uYW1lKG5ld19idXMtPmlkLCBucCk7Ci0KLQluZXdfYnVzLT5pcnEgPSBrbWFsbG9jKDMyICogc2l6ZW9mKGludCksIEdGUF9LRVJORUwpOwotCi0JaWYgKE5VTEwgPT0gbmV3X2J1cy0+aXJxKSB7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gcmVnX21hcF9mYWlsOwotCX0KLQotCWZvciAoayA9IDA7IGsgPCAzMjsgaysrKQotCQluZXdfYnVzLT5pcnFba10gPSBQSFlfUE9MTDsKLQotCXdoaWxlICgoY2hpbGQgPSBvZl9nZXRfbmV4dF9jaGlsZChucCwgY2hpbGQpKSAhPSBOVUxMKSB7Ci0JCWludCBpcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChjaGlsZCwgMCk7Ci0JCWlmIChpcnEgIT0gTk9fSVJRKSB7Ci0JCQljb25zdCB1MzIgKmlkID0gb2ZfZ2V0X3Byb3BlcnR5KGNoaWxkLCAicmVnIiwgTlVMTCk7Ci0JCQluZXdfYnVzLT5pcnFbKmlkXSA9IGlycTsKLQkJfQotCX0KLQotCS8qIFNldCB0aGUgYmFzZSBhZGRyZXNzICovCi0JcmVncyA9IGlvcmVtYXAocmVzLnN0YXJ0LCBzaXplb2Yoc3RydWN0IHVjY19taWlfbW5nKSk7Ci0KLQlpZiAoTlVMTCA9PSByZWdzKSB7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gaW9yZW1hcF9mYWlsOwotCX0KLQotCW5ld19idXMtPnByaXYgPSAodm9pZCBfX2ZvcmNlICopcmVnczsKLQotCW5ld19idXMtPnBhcmVudCA9IGRldmljZTsKLQlkZXZfc2V0X2RydmRhdGEoZGV2aWNlLCBuZXdfYnVzKTsKLQotCS8qIFJlYWQgTUlJIG1hbmFnZW1lbnQgbWFzdGVyIGZyb20gZGV2aWNlIHRyZWUgKi8KLQl3aGlsZSAoKHRlbXBucCA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKHRlbXBucCwgIm5ldHdvcmsiLCAidWNjX2dldGgiKSkKLQkgICAgICAgIT0gTlVMTCkgewotCQlzdHJ1Y3QgcmVzb3VyY2UgdGVtcHJlczsKLQotCQllcnIgPSBvZl9hZGRyZXNzX3RvX3Jlc291cmNlKHRlbXBucCwgMCwgJnRlbXByZXMpOwotCQlpZiAoZXJyKQotCQkJZ290byBidXNfcmVnaXN0ZXJfZmFpbDsKLQotCQkvKiBpZiBvdXIgbWRpbyByZWdzIGZhbGwgd2l0aGluIHRoaXMgVUNDIHJlZ3MgcmFuZ2UgKi8KLQkJaWYgKChyZXMuc3RhcnQgPj0gdGVtcHJlcy5zdGFydCkgJiYKLQkJICAgIChyZXMuZW5kIDw9IHRlbXByZXMuZW5kKSkgewotCQkJLyogc2V0IHRoaXMgVUNDIHRvIGJlIHRoZSBNSUkgbWFzdGVyICovCi0JCQljb25zdCB1MzIgKmlkOwotCi0JCQlpZCA9IG9mX2dldF9wcm9wZXJ0eSh0ZW1wbnAsICJjZWxsLWluZGV4IiwgTlVMTCk7Ci0JCQlpZiAoIWlkKSB7Ci0JCQkJaWQgPSBvZl9nZXRfcHJvcGVydHkodGVtcG5wLCAiZGV2aWNlLWlkIiwgTlVMTCk7Ci0JCQkJaWYgKCFpZCkKLQkJCQkJZ290byBidXNfcmVnaXN0ZXJfZmFpbDsKLQkJCX0KLQotCQkJdWNjX3NldF9xZV9tdXhfbWlpX21uZygqaWQgLSAxKTsKLQotCQkJLyogYXNzaWduIHRoZSBUQkkgYW4gYWRkcmVzcyB3aGljaCB3b24ndAotCQkJICogY29uZmxpY3Qgd2l0aCB0aGUgUEhZcyAqLwotCQkJb3V0X2JlMzIoJnJlZ3MtPnV0YmlwYXIsIFVUQklQQVJfSU5JVF9UQklQQSk7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCWVyciA9IG1kaW9idXNfcmVnaXN0ZXIobmV3X2J1cyk7Ci0JaWYgKDAgIT0gZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCByZWdpc3RlciBhcyBNRElPIGJ1c1xuIiwKLQkJICAgICAgIG5ld19idXMtPm5hbWUpOwotCQlnb3RvIGJ1c19yZWdpc3Rlcl9mYWlsOwotCX0KLQotCXJldHVybiAwOwotCi1idXNfcmVnaXN0ZXJfZmFpbDoKLQlpb3VubWFwKHJlZ3MpOwotaW9yZW1hcF9mYWlsOgotCWtmcmVlKG5ld19idXMtPmlycSk7Ci1yZWdfbWFwX2ZhaWw6Ci0JbWRpb2J1c19mcmVlKG5ld19idXMpOwotCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCB1ZWNfbWRpb19yZW1vdmUoc3RydWN0IG9mX2RldmljZSAqb2ZkZXYpCi17Ci0Jc3RydWN0IGRldmljZSAqZGV2aWNlID0gJm9mZGV2LT5kZXY7Ci0Jc3RydWN0IG1paV9idXMgKmJ1cyA9IGRldl9nZXRfZHJ2ZGF0YShkZXZpY2UpOwotCi0JbWRpb2J1c191bnJlZ2lzdGVyKGJ1cyk7Ci0KLQlkZXZfc2V0X2RydmRhdGEoZGV2aWNlLCBOVUxMKTsKLQotCWlvdW5tYXAoKHZvaWQgX19pb21lbSAqKWJ1cy0+cHJpdik7Ci0JYnVzLT5wcml2ID0gTlVMTDsKLQltZGlvYnVzX2ZyZWUoYnVzKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCB1ZWNfbWRpb19tYXRjaFtdID0gewotCXsKLQkJLnR5cGUgPSAibWRpbyIsCi0JCS5jb21wYXRpYmxlID0gInVjY19nZXRoX3BoeSIsCi0JfSwKLQl7Ci0JCS5jb21wYXRpYmxlID0gImZzbCx1Y2MtbWRpbyIsCi0JfSwKLQl7fSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgb2ZfcGxhdGZvcm1fZHJpdmVyIHVlY19tZGlvX2RyaXZlciA9IHsKLQkubmFtZQk9IE1JSV9EUlZfTkFNRSwKLQkucHJvYmUJPSB1ZWNfbWRpb19wcm9iZSwKLQkucmVtb3ZlCT0gdWVjX21kaW9fcmVtb3ZlLAotCS5tYXRjaF90YWJsZQk9IHVlY19tZGlvX21hdGNoLAotfTsKLQotaW50IF9faW5pdCB1ZWNfbWRpb19pbml0KHZvaWQpCi17Ci0JcmV0dXJuIG9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmdWVjX21kaW9fZHJpdmVyKTsKLX0KLQotLyogY2FsbGVkIGZyb20gX19pbml0IHVjY19nZXRoX2luaXQsIHRoZXJlZm9yZSBjYW4gbm90IGJlIF9fZXhpdCAqLwotdm9pZCB1ZWNfbWRpb19leGl0KHZvaWQpCi17Ci0Jb2ZfdW5yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJnVlY19tZGlvX2RyaXZlcik7Ci19Ci0KLXZvaWQgdWVjX21kaW9fYnVzX25hbWUoY2hhciAqbmFtZSwgc3RydWN0IGRldmljZV9ub2RlICpucCkKLXsKLSAgICAgICAgY29uc3QgdTMyICpyZWc7Ci0KLSAgICAgICAgcmVnID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAicmVnIiwgTlVMTCk7Ci0KLSAgICAgICAgc25wcmludGYobmFtZSwgTUlJX0JVU19JRF9TSVpFLCAiJXNAJXgiLCBucC0+bmFtZSwgcmVnID8gKnJlZyA6IDApOwotfQotCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91Y2NfZ2V0aF9taWkuaCBiL2RyaXZlcnMvbmV0L3VjY19nZXRoX21paS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDBjZjgwLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3VjY19nZXRoX21paS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTAxICswLDAgQEAKLS8qCi0gKiBkcml2ZXJzL25ldC91Y2NfZ2V0aF9taWkuaAotICoKLSAqIFFFIFVDQyBHaWdhYml0IEV0aGVybmV0IERyaXZlciAtLSBNSUkgTWFuYWdlbWVudCBCdXMgSW1wbGVtZW50YXRpb24KLSAqIFByb3ZpZGVzIEJ1cyBpbnRlcmZhY2UgZm9yIE1JSSBNYW5hZ2VtZW50IHJlZ3MgaW4gdGhlIFVDQyByZWdpc3RlciBzcGFjZQotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgotICoKLSAqIEF1dGhvcnM6IExpIFlhbmcgPGxlb2xpQGZyZWVzY2FsZS5jb20+Ci0gKgkgICAgS2ltIFBoaWxsaXBzIDxraW0ucGhpbGxpcHNAZnJlZXNjYWxlLmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqLwotI2lmbmRlZiBfX1VFQ19NSUlfSAotI2RlZmluZSBfX1VFQ19NSUlfSAotCi0vKiBVQ0MgR0VUSCBNSUlNQ0ZHIChNSUkgTWFuYWdlbWVudCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyKSAqLwotI2RlZmluZSBNSUlNQ0ZHX1JFU0VUX01BTkFHRU1FTlQgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAkvKiBSZXNldAotCQkJCQkJCQkgICBtYW5hZ2VtZW50ICovCi0jZGVmaW5lIE1JSU1DRkdfTk9fUFJFQU1CTEUgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCS8qIFByZWFtYmxlCi0JCQkJCQkJCSAgIHN1cHByZXNzICovCi0jZGVmaW5lIE1JSU1DRkdfQ0xPQ0tfRElWSURFX1NISUZUICAgICAgICAgICAgICAoMzEgLSAzMSkJLyogY2xvY2sgZGl2aWRlCi0JCQkJCQkJCSAgIDw8IHNoaWZ0ICovCi0jZGVmaW5lIE1JSU1DRkdfQ0xPQ0tfRElWSURFX01BWCAgICAgICAgICAgICAgICAweGYJLyogbWF4IGNsb2NrIGRpdmlkZSAqLwotI2RlZmluZSBNSUlNQ0ZHX01BTkFHRU1FTlRfQ0xPQ0tfRElWSURFX0JZXzIgICAgMHgwMDAwMDAwMAotI2RlZmluZSBNSUlNQ0ZHX01BTkFHRU1FTlRfQ0xPQ0tfRElWSURFX0JZXzQgICAgMHgwMDAwMDAwMQotI2RlZmluZSBNSUlNQ0ZHX01BTkFHRU1FTlRfQ0xPQ0tfRElWSURFX0JZXzYgICAgMHgwMDAwMDAwMgotI2RlZmluZSBNSUlNQ0ZHX01BTkFHRU1FTlRfQ0xPQ0tfRElWSURFX0JZXzggICAgMHgwMDAwMDAwMwotI2RlZmluZSBNSUlNQ0ZHX01BTkFHRU1FTlRfQ0xPQ0tfRElWSURFX0JZXzEwICAgMHgwMDAwMDAwNAotI2RlZmluZSBNSUlNQ0ZHX01BTkFHRU1FTlRfQ0xPQ0tfRElWSURFX0JZXzE0ICAgMHgwMDAwMDAwNQotI2RlZmluZSBNSUlNQ0ZHX01BTkFHRU1FTlRfQ0xPQ0tfRElWSURFX0JZXzE2ICAgMHgwMDAwMDAwOAotI2RlZmluZSBNSUlNQ0ZHX01BTkFHRU1FTlRfQ0xPQ0tfRElWSURFX0JZXzIwICAgMHgwMDAwMDAwNgotI2RlZmluZSBNSUlNQ0ZHX01BTkFHRU1FTlRfQ0xPQ0tfRElWSURFX0JZXzI4ICAgMHgwMDAwMDAwNwotI2RlZmluZSBNSUlNQ0ZHX01BTkFHRU1FTlRfQ0xPQ0tfRElWSURFX0JZXzMyICAgMHgwMDAwMDAwOQotI2RlZmluZSBNSUlNQ0ZHX01BTkFHRU1FTlRfQ0xPQ0tfRElWSURFX0JZXzQ4ICAgMHgwMDAwMDAwYQotI2RlZmluZSBNSUlNQ0ZHX01BTkFHRU1FTlRfQ0xPQ0tfRElWSURFX0JZXzY0ICAgMHgwMDAwMDAwYgotI2RlZmluZSBNSUlNQ0ZHX01BTkFHRU1FTlRfQ0xPQ0tfRElWSURFX0JZXzgwICAgMHgwMDAwMDAwYwotI2RlZmluZSBNSUlNQ0ZHX01BTkFHRU1FTlRfQ0xPQ0tfRElWSURFX0JZXzExMiAgMHgwMDAwMDAwZAotI2RlZmluZSBNSUlNQ0ZHX01BTkFHRU1FTlRfQ0xPQ0tfRElWSURFX0JZXzE2MCAgMHgwMDAwMDAwZQotI2RlZmluZSBNSUlNQ0ZHX01BTkFHRU1FTlRfQ0xPQ0tfRElWSURFX0JZXzIyNCAgMHgwMDAwMDAwZgotCi0vKiBVQ0MgR0VUSCBNSUlNQ09NIChNSUkgTWFuYWdlbWVudCBDb21tYW5kIFJlZ2lzdGVyKSAqLwotI2RlZmluZSBNSUlNQ09NX1NDQU5fQ1lDTEUgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgkvKiBTY2FuIGN5Y2xlICovCi0jZGVmaW5lIE1JSU1DT01fUkVBRF9DWUNMRSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCS8qIFJlYWQgY3ljbGUgKi8KLQotLyogVUNDIEdFVEggTUlJTUFERCAoTUlJIE1hbmFnZW1lbnQgQWRkcmVzcyBSZWdpc3RlcikgKi8KLSNkZWZpbmUgTUlJTUFERF9QSFlfQUREUkVTU19TSElGVCAgICAgICAgICAgICAgICgzMSAtIDIzKQkvKiBQSFkgQWRkcmVzcwotCQkJCQkJCQkgICA8PCBzaGlmdCAqLwotI2RlZmluZSBNSUlNQUREX1BIWV9SRUdJU1RFUl9TSElGVCAgICAgICAgICAgICAgKDMxIC0gMzEpCS8qIFBIWSBSZWdpc3RlcgotCQkJCQkJCQkgICA8PCBzaGlmdCAqLwotCi0vKiBVQ0MgR0VUSCBNSUlNQ09OIChNSUkgTWFuYWdlbWVudCBDb250cm9sIFJlZ2lzdGVyKSAqLwotI2RlZmluZSBNSUlNQ09OX1BIWV9DT05UUk9MX1NISUZUICAgICAgICAgICAgICAgKDMxIC0gMzEpCS8qIFBIWSBDb250cm9sCi0JCQkJCQkJCSAgIDw8IHNoaWZ0ICovCi0jZGVmaW5lIE1JSU1DT05fUEhZX1NUQVRVU19TSElGVCAgICAgICAgICAgICAgICAoMzEgLSAzMSkJLyogUEhZIFN0YXR1cwotCQkJCQkJCQkgICA8PCBzaGlmdCAqLwotCi0vKiBVQ0MgR0VUSCBNSUlNSU5EIChNSUkgTWFuYWdlbWVudCBJbmRpY2F0b3IgUmVnaXN0ZXIpICovCi0jZGVmaW5lIE1JSU1JTkRfTk9UX1ZBTElEICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CS8qIE5vdCB2YWxpZCAqLwotI2RlZmluZSBNSUlNSU5EX1NDQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgkvKiBTY2FuIGluCi0JCQkJCQkJCSAgIHByb2dyZXNzICovCi0jZGVmaW5lIE1JSU1JTkRfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCi0KLS8qIEluaXRpYWwgVEJJIFBoeXNpY2FsIEFkZHJlc3MgKi8KLSNkZWZpbmUgVVRCSVBBUl9JTklUX1RCSVBBCQkJMHgxZgotCi1zdHJ1Y3QgdWNjX21paV9tbmcgewotCXUzMiBtaWltY2ZnOwkJLyogTUlJIG1hbmFnZW1lbnQgY29uZmlndXJhdGlvbiByZWcgKi8KLQl1MzIgbWlpbWNvbTsJCS8qIE1JSSBtYW5hZ2VtZW50IGNvbW1hbmQgcmVnICovCi0JdTMyIG1paW1hZGQ7CQkvKiBNSUkgbWFuYWdlbWVudCBhZGRyZXNzIHJlZyAqLwotCXUzMiBtaWltY29uOwkJLyogTUlJIG1hbmFnZW1lbnQgY29udHJvbCByZWcgKi8KLQl1MzIgbWlpbXN0YXQ7CQkvKiBNSUkgbWFuYWdlbWVudCBzdGF0dXMgcmVnICovCi0JdTMyIG1paW1pbmQ7CQkvKiBNSUkgbWFuYWdlbWVudCBpbmRpY2F0aW9uIHJlZyAqLwotCXU4IG5vdGNhcmVbMjhdOwkJLyogU3BhY2UgaG9sZGVyICovCi0JdTMyIHV0YmlwYXI7CQkvKiBUQkkgcGh5IGFkZHJlc3MgcmVnICovCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyogVEJJIC8gTUlJIFNldCBSZWdpc3RlciAqLwotZW51bSBlbmV0X3RiaV9taWlfcmVnIHsKLQlFTkVUX1RCSV9NSUlfQ1IgPSAweDAwLAkvKiBDb250cm9sICovCi0JRU5FVF9UQklfTUlJX1NSID0gMHgwMSwJLyogU3RhdHVzICovCi0JRU5FVF9UQklfTUlJX0FOQSA9IDB4MDQsCS8qIEFOIGFkdmVydGlzZW1lbnQgKi8KLQlFTkVUX1RCSV9NSUlfQU5MUEJQQSA9IDB4MDUsCS8qIEFOIGxpbmsgcGFydG5lciBiYXNlIHBhZ2UgYWJpbGl0eSAqLwotCUVORVRfVEJJX01JSV9BTkVYID0gMHgwNiwJLyogQU4gZXhwYW5zaW9uICovCi0JRU5FVF9UQklfTUlJX0FOTlBUID0gMHgwNywJLyogQU4gbmV4dCBwYWdlIHRyYW5zbWl0ICovCi0JRU5FVF9UQklfTUlJX0FOTFBBTlAgPSAweDA4LAkvKiBBTiBsaW5rIHBhcnRuZXIgYWJpbGl0eSBuZXh0IHBhZ2UgKi8KLQlFTkVUX1RCSV9NSUlfRVhTVCA9IDB4MEYsCS8qIEV4dGVuZGVkIHN0YXR1cyAqLwotCUVORVRfVEJJX01JSV9KRCA9IDB4MTAsCS8qIEppdHRlciBkaWFnbm9zdGljcyAqLwotCUVORVRfVEJJX01JSV9UQklDT04gPSAweDExCS8qIFRCSSBjb250cm9sICovCi19OwotCi1pbnQgdWVjX21kaW9fcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgbWlpX2lkLCBpbnQgcmVnbnVtKTsKLWludCB1ZWNfbWRpb193cml0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgbWlpX2lkLCBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpOwotaW50IF9faW5pdCB1ZWNfbWRpb19pbml0KHZvaWQpOwotdm9pZCB1ZWNfbWRpb19leGl0KHZvaWQpOwotdm9pZCB1ZWNfbWRpb19idXNfbmFtZShjaGFyICpuYW1lLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKTsKLSNlbmRpZgkJCQkvKiBfX1VFQ19NSUlfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2FzaXguYyBiL2RyaXZlcnMvbmV0L3VzYi9hc2l4LmMKaW5kZXggMzk2ZjgyMS4uODdiNGEwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL2FzaXguYworKysgYi9kcml2ZXJzL25ldC91c2IvYXNpeC5jCkBAIC04MDcsNiArODA3LDE4IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYXg4ODE3Ml9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSB1c2JuZXRfb3BlbiwKKwkubmRvX3N0b3AJCT0gdXNibmV0X3N0b3AsCisJLm5kb19zdGFydF94bWl0CQk9IHVzYm5ldF9zdGFydF94bWl0LAorCS5uZG9fdHhfdGltZW91dAkJPSB1c2JuZXRfdHhfdGltZW91dCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gdXNibmV0X2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorCS5uZG9fZG9faW9jdGwJCT0gYXNpeF9pb2N0bCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IGF4ODgxNzJfc2V0X211bHRpY2FzdCwKK307CisKIHN0YXRpYyBpbnQgYXg4ODE3Ml9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCiB7CiAJaW50IHJldCA9IDA7CkBAIC04NDYsOSArODU4LDggQEAKIAlkZXYtPm1paS5waHlfaWRfbWFzayA9IDB4M2Y7CiAJZGV2LT5taWkucmVnX251bV9tYXNrID0gMHgxZjsKIAlkZXYtPm1paS5waHlfaWQgPSBhc2l4X2dldF9waHlfYWRkcihkZXYpOwotCWRldi0+bmV0LT5kb19pb2N0bCA9IGFzaXhfaW9jdGw7CiAKLQlkZXYtPm5ldC0+c2V0X211bHRpY2FzdF9saXN0ID0gYXg4ODE3Ml9zZXRfbXVsdGljYXN0OworCWRldi0+bmV0LT5uZXRkZXZfb3BzID0gJmF4ODgxNzJfbmV0ZGV2X29wczsKIAlkZXYtPm5ldC0+ZXRodG9vbF9vcHMgPSAmYXg4ODE3Ml9ldGh0b29sX29wczsKIAogCWFzaXhfbWRpb193cml0ZShkZXYtPm5ldCwgZGV2LT5taWkucGh5X2lkLCBNSUlfQk1DUiwgQk1DUl9SRVNFVCk7CkBAIC04OTgsNiArOTA5LDE4IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYXg4ODc3Ml9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSB1c2JuZXRfb3BlbiwKKwkubmRvX3N0b3AJCT0gdXNibmV0X3N0b3AsCisJLm5kb19zdGFydF94bWl0CQk9IHVzYm5ldF9zdGFydF94bWl0LAorCS5uZG9fdHhfdGltZW91dAkJPSB1c2JuZXRfdHhfdGltZW91dCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gdXNibmV0X2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorCS5uZG9fZG9faW9jdGwJCT0gYXNpeF9pb2N0bCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IGFzaXhfc2V0X211bHRpY2FzdCwKK307CisKIHN0YXRpYyBpbnQgYXg4ODc3Ml9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCiB7CiAJaW50IHJldCwgZW1iZF9waHk7CkBAIC05NjIsNyArOTg1LDYgQEAKIAlkZXYtPm1paS5tZGlvX3dyaXRlID0gYXNpeF9tZGlvX3dyaXRlOwogCWRldi0+bWlpLnBoeV9pZF9tYXNrID0gMHgxZjsKIAlkZXYtPm1paS5yZWdfbnVtX21hc2sgPSAweDFmOwotCWRldi0+bmV0LT5kb19pb2N0bCA9IGFzaXhfaW9jdGw7CiAJZGV2LT5taWkucGh5X2lkID0gYXNpeF9nZXRfcGh5X2FkZHIoZGV2KTsKIAogCXBoeWlkID0gYXNpeF9nZXRfcGh5aWQoZGV2KTsKQEAgLTk3OCw3ICsxMDAwLDcgQEAKIAogCW1zbGVlcCgxNTApOwogCi0JZGV2LT5uZXQtPnNldF9tdWx0aWNhc3RfbGlzdCA9IGFzaXhfc2V0X211bHRpY2FzdDsKKwlkZXYtPm5ldC0+bmV0ZGV2X29wcyA9ICZheDg4NzcyX25ldGRldl9vcHM7CiAJZGV2LT5uZXQtPmV0aHRvb2xfb3BzID0gJmF4ODg3NzJfZXRodG9vbF9vcHM7CiAKIAlhc2l4X21kaW9fd3JpdGUoZGV2LT5uZXQsIGRldi0+bWlpLnBoeV9pZCwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQpOwpAQCAtMTE4MSw2ICsxMjAzLDE4IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYXg4ODE3OF9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSB1c2JuZXRfb3BlbiwKKwkubmRvX3N0b3AJCT0gdXNibmV0X3N0b3AsCisJLm5kb19zdGFydF94bWl0CQk9IHVzYm5ldF9zdGFydF94bWl0LAorCS5uZG9fdHhfdGltZW91dAkJPSB1c2JuZXRfdHhfdGltZW91dCwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBhc2l4X3NldF9tdWx0aWNhc3QsCisJLm5kb19kb19pb2N0bCAJCT0gYXNpeF9pb2N0bCwKKwkubmRvX2NoYW5nZV9tdHUgCT0gYXg4ODE3OF9jaGFuZ2VfbXR1LAorfTsKKwogc3RhdGljIGludCBheDg4MTc4X2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKIHsKIAlzdHJ1Y3QgYXNpeF9kYXRhICpkYXRhID0gKHN0cnVjdCBhc2l4X2RhdGEgKikmZGV2LT5kYXRhOwpAQCAtMTI0NywxMSArMTI4MSwxMCBAQAogCWRldi0+bWlpLnBoeV9pZF9tYXNrID0gMHgxZjsKIAlkZXYtPm1paS5yZWdfbnVtX21hc2sgPSAweGZmOwogCWRldi0+bWlpLnN1cHBvcnRzX2dtaWkgPSAxOwotCWRldi0+bmV0LT5kb19pb2N0bCA9IGFzaXhfaW9jdGw7CiAJZGV2LT5taWkucGh5X2lkID0gYXNpeF9nZXRfcGh5X2FkZHIoZGV2KTsKLQlkZXYtPm5ldC0+c2V0X211bHRpY2FzdF9saXN0ID0gYXNpeF9zZXRfbXVsdGljYXN0OworCisJZGV2LT5uZXQtPm5ldGRldl9vcHMgPSAmYXg4ODE3OF9uZXRkZXZfb3BzOwogCWRldi0+bmV0LT5ldGh0b29sX29wcyA9ICZheDg4MTc4X2V0aHRvb2xfb3BzOwotCWRldi0+bmV0LT5jaGFuZ2VfbXR1ID0gJmF4ODgxNzhfY2hhbmdlX210dTsKIAogCXBoeWlkID0gYXNpeF9nZXRfcGh5aWQoZGV2KTsKIAlkYmcoIlBIWUlEPTB4JTA4eCIsIHBoeWlkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9jYXRjLmMgYi9kcml2ZXJzL25ldC91c2IvY2F0Yy5jCmluZGV4IGNiN2FjYmIuLmI5ZGQ0MjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9jYXRjLmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL2NhdGMuYwpAQCAtMTYzLDcgKzE2Myw2IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2OwogCi0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXVuc2lnbmVkIGludCB0eF9wdHIsIHR4X2lkeDsKQEAgLTI0NSw4ICsyNDQsOCBAQAogCQlpZighY2F0Yy0+aXNfZjV1MDExKSB7CiAJCQlwa3RfbGVuID0gbGUxNl90b19jcHVwKChfX2xlMTYqKXBrdF9zdGFydCk7CiAJCQlpZiAocGt0X2xlbiA+IHVyYi0+YWN0dWFsX2xlbmd0aCkgewotCQkJCWNhdGMtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKLQkJCQljYXRjLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJCQljYXRjLT5uZXRkZXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKKwkJCQljYXRjLT5uZXRkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQkJCWJyZWFrOwogCQkJfQogCQl9IGVsc2UgewpAQCAtMjYyLDggKzI2MSw4IEBACiAJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGNhdGMtPm5ldGRldik7CiAJCW5ldGlmX3J4KHNrYik7CiAKLQkJY2F0Yy0+c3RhdHMucnhfcGFja2V0cysrOwotCQljYXRjLT5zdGF0cy5yeF9ieXRlcyArPSBwa3RfbGVuOworCQljYXRjLT5uZXRkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwkJY2F0Yy0+bmV0ZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBwa3RfbGVuOwogCiAJCS8qIEY1VTAxMSBvbmx5IGRvZXMgb25lIHBhY2tldCBwZXIgUlggKi8KIAkJaWYgKGNhdGMtPmlzX2Y1dTAxMSkKQEAgLTM4Niw3ICszODUsNyBAQAogCQlkYmcoIlR4IFJlc2V0LiIpOwogCQl1cmItPnN0YXR1cyA9IDA7CiAJCWNhdGMtPm5ldGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwotCQljYXRjLT5zdGF0cy50eF9lcnJvcnMrKzsKKwkJY2F0Yy0+bmV0ZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKIAkJY2xlYXJfYml0KFRYX1JVTk5JTkcsICZjYXRjLT5mbGFncyk7CiAJCW5ldGlmX3dha2VfcXVldWUoY2F0Yy0+bmV0ZGV2KTsKIAkJcmV0dXJuOwpAQCAtNDEyLDcgKzQxMSw3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2F0Yy0+dHhfbG9jaywgZmxhZ3MpOwogfQogCi1zdGF0aWMgaW50IGNhdGNfaGFyZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCitzdGF0aWMgaW50IGNhdGNfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBjYXRjICpjYXRjID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNDQzLDggKzQ0Miw4IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2F0Yy0+dHhfbG9jaywgZmxhZ3MpOwogCiAJaWYgKHIgPj0gMCkgewotCQljYXRjLT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKLQkJY2F0Yy0+c3RhdHMudHhfcGFja2V0cysrOworCQljYXRjLT5uZXRkZXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOworCQljYXRjLT5uZXRkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKIAl9CiAKIAlkZXZfa2ZyZWVfc2tiKHNrYik7CkBAIC01ODgsMTUgKzU4NywxNSBAQAogCXN3aXRjaCAoaW5kZXgpIHsKIAkJY2FzZSBUeFNpbmdsZUNvbGw6CiAJCWNhc2UgVHhNdWx0aUNvbGw6Ci0JCQljYXRjLT5zdGF0cy5jb2xsaXNpb25zICs9IGRhdGEgLSBsYXN0OworCQkJY2F0Yy0+bmV0ZGV2LT5zdGF0cy5jb2xsaXNpb25zICs9IGRhdGEgLSBsYXN0OwogCQkJYnJlYWs7CiAJCWNhc2UgVHhFeGNlc3NDb2xsOgotCQkJY2F0Yy0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMgKz0gZGF0YSAtIGxhc3Q7Ci0JCQljYXRjLT5zdGF0cy50eF9lcnJvcnMgKz0gZGF0YSAtIGxhc3Q7CisJCQljYXRjLT5uZXRkZXYtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzICs9IGRhdGEgLSBsYXN0OworCQkJY2F0Yy0+bmV0ZGV2LT5zdGF0cy50eF9lcnJvcnMgKz0gZGF0YSAtIGxhc3Q7CiAJCQlicmVhazsKIAkJY2FzZSBSeEZyYW1FcnI6Ci0JCQljYXRjLT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMgKz0gZGF0YSAtIGxhc3Q7Ci0JCQljYXRjLT5zdGF0cy5yeF9lcnJvcnMgKz0gZGF0YSAtIGxhc3Q7CisJCQljYXRjLT5uZXRkZXYtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycyArPSBkYXRhIC0gbGFzdDsKKwkJCWNhdGMtPm5ldGRldi0+c3RhdHMucnhfZXJyb3JzICs9IGRhdGEgLSBsYXN0OwogCQkJYnJlYWs7CiAJfQogCkBAIC02MTQsMTIgKzYxMyw2IEBACiAJbW9kX3RpbWVyKCZjYXRjLT50aW1lciwgamlmZmllcyArIFNUQVRTX1VQREFURSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqY2F0Y19nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKLXsKLQlzdHJ1Y3QgY2F0YyAqY2F0YyA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0JcmV0dXJuICZjYXRjLT5zdGF0czsKLX0KLQogLyoKICAqIFJlY2VpdmUgbW9kZXMuIEJyb2FkY2FzdCwgTXVsdGljYXN0LCBQcm9taXNjLgogICovCkBAIC03NTAsNiArNzQzLDE4IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgY2F0Y19uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBjYXRjX29wZW4sCisJLm5kb19zdG9wCQk9IGNhdGNfc3RvcCwKKwkubmRvX3N0YXJ0X3htaXQJCT0gY2F0Y19zdGFydF94bWl0LAorCisJLm5kb190eF90aW1lb3V0CQk9IGNhdGNfdHhfdGltZW91dCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IGNhdGNfc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCiAvKgogICogVVNCIHByb2JlLCBkaXNjb25uZWN0LgogICovCkBAIC03NzQsMTMgKzc3OSw4IEBACiAKIAljYXRjID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAotCW5ldGRldi0+b3BlbiA9IGNhdGNfb3BlbjsKLQluZXRkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGNhdGNfaGFyZF9zdGFydF94bWl0OwotCW5ldGRldi0+c3RvcCA9IGNhdGNfc3RvcDsKLQluZXRkZXYtPmdldF9zdGF0cyA9IGNhdGNfZ2V0X3N0YXRzOwotCW5ldGRldi0+dHhfdGltZW91dCA9IGNhdGNfdHhfdGltZW91dDsKKwluZXRkZXYtPm5ldGRldl9vcHMgPSAmY2F0Y19uZXRkZXZfb3BzOwogCW5ldGRldi0+d2F0Y2hkb2dfdGltZW8gPSBUWF9USU1FT1VUOwotCW5ldGRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gY2F0Y19zZXRfbXVsdGljYXN0X2xpc3Q7CiAJU0VUX0VUSFRPT0xfT1BTKG5ldGRldiwgJm9wcyk7CiAKIAljYXRjLT51c2JkZXYgPSB1c2JkZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvZG05NjAxLmMgYi9kcml2ZXJzL25ldC91c2IvZG05NjAxLmMKaW5kZXggODE2ODJjNi4uNmZjNGY4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL2RtOTYwMS5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9kbTk2MDEuYwpAQCAtNDE5LDYgKzQxOSwxOCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGRtOTYwMV9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSB1c2JuZXRfb3BlbiwKKwkubmRvX3N0b3AJCT0gdXNibmV0X3N0b3AsCisJLm5kb19zdGFydF94bWl0CQk9IHVzYm5ldF9zdGFydF94bWl0LAorCS5uZG9fdHhfdGltZW91dAkJPSB1c2JuZXRfdHhfdGltZW91dCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gdXNibmV0X2NoYW5nZV9tdHUsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCisJLm5kb19kb19pb2N0bCAJCT0gZG05NjAxX2lvY3RsLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gZG05NjAxX3NldF9tdWx0aWNhc3QsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSBkbTk2MDFfc2V0X21hY19hZGRyZXNzLAorfTsKKwogc3RhdGljIGludCBkbTk2MDFfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQogewogCWludCByZXQ7CkBAIC00MjgsOSArNDQwLDcgQEAKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKIAotCWRldi0+bmV0LT5kb19pb2N0bCA9IGRtOTYwMV9pb2N0bDsKLQlkZXYtPm5ldC0+c2V0X211bHRpY2FzdF9saXN0ID0gZG05NjAxX3NldF9tdWx0aWNhc3Q7Ci0JZGV2LT5uZXQtPnNldF9tYWNfYWRkcmVzcyA9IGRtOTYwMV9zZXRfbWFjX2FkZHJlc3M7CisJZGV2LT5uZXQtPm5ldGRldl9vcHMgPSAmZG05NjAxX25ldGRldl9vcHM7CiAJZGV2LT5uZXQtPmV0aHRvb2xfb3BzID0gJmRtOTYwMV9ldGh0b29sX29wczsKIAlkZXYtPm5ldC0+aGFyZF9oZWFkZXJfbGVuICs9IERNX1RYX09WRVJIRUFEOwogCWRldi0+aGFyZF9tdHUgPSBkZXYtPm5ldC0+bXR1ICsgZGV2LT5uZXQtPmhhcmRfaGVhZGVyX2xlbjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9oc28uYyBiL2RyaXZlcnMvbmV0L3VzYi9oc28uYwppbmRleCBmZTk4YWNhLi5jZGU0MjNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvaHNvLmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL2hzby5jCkBAIC05MzYsOCArOTM2LDcgQEAKIAkJCWlmICghb2Rldi0+cnhfYnVmX21pc3NpbmcpIHsKIAkJCQkvKiBQYWNrZXQgaXMgY29tcGxldGUuIEluamVjdCBpbnRvIHN0YWNrLiAqLwogCQkJCS8qIFdlIGhhdmUgSVAgcGFja2V0IGhlcmUgKi8KLQkJCQlvZGV2LT5za2JfcnhfYnVmLT5wcm90b2NvbCA9Ci0JCQkJCQlfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQKTsKKwkJCQlvZGV2LT5za2JfcnhfYnVmLT5wcm90b2NvbCA9IGNwdV90b19iZTE2KEVUSF9QX0lQKTsKIAkJCQkvKiBkb24ndCBjaGVjayBpdCAqLwogCQkJCW9kZXYtPnNrYl9yeF9idWYtPmlwX3N1bW1lZCA9CiAJCQkJCUNIRUNLU1VNX1VOTkVDRVNTQVJZOwpAQCAtMTI0Nyw3ICsxMjQ2LDcgQEAKICAqIFRoaXMgbmVlZHMgdG8gYmUgYSB0YXNrbGV0IG90aGVyd2lzZSB3ZSB3aWxsCiAgKiBlbmQgdXAgcmVjdXJzaXZlbHkgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgogICovCi12b2lkIGhzb191bnRocm90dGxlX3Rhc2tsZXQoc3RydWN0IGhzb19zZXJpYWwgKnNlcmlhbCkKK3N0YXRpYyB2b2lkIGhzb191bnRocm90dGxlX3Rhc2tsZXQoc3RydWN0IGhzb19zZXJpYWwgKnNlcmlhbCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC0xMjY2LDcgKzEyNjUsNyBAQAogCXRhc2tsZXRfaGlfc2NoZWR1bGUoJnNlcmlhbC0+dW50aHJvdHRsZV90YXNrbGV0KTsKIH0KIAotdm9pZCBoc29fdW50aHJvdHRsZV93b3JrZnVuYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCitzdGF0aWMgdm9pZCBoc29fdW50aHJvdHRsZV93b3JrZnVuYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IGhzb19zZXJpYWwgKnNlcmlhbCA9CiAJICAgIGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaHNvX3NlcmlhbCwKQEAgLTE0NjUsOSArMTQ2NCw5IEBACiAKIAlyZXR1cm4gY2hhcnM7CiB9Ci1pbnQgdGlvY21nZXRfc3VibWl0X3VyYihzdHJ1Y3QgaHNvX3NlcmlhbCAqc2VyaWFsLAotCQkJc3RydWN0IGhzb190aW9jbWdldCAgKnRpb2NtZ2V0LAotCQkJc3RydWN0IHVzYl9kZXZpY2UgKnVzYikKK3N0YXRpYyBpbnQgdGlvY21nZXRfc3VibWl0X3VyYihzdHJ1Y3QgaHNvX3NlcmlhbCAqc2VyaWFsLAorCQkJICAgICAgIHN0cnVjdCBoc29fdGlvY21nZXQgKnRpb2NtZ2V0LAorCQkJICAgICAgIHN0cnVjdCB1c2JfZGV2aWNlICp1c2IpCiB7CiAJaW50IHJlc3VsdDsKIApAQCAtMjM2NCwxMiArMjM2Myw2IEBACiAJcmV0dXJuIC0xOwogfQogCi0vKiBGcmVlcyBhIGdlbmVyYWwgaHNvIGRldmljZSAqLwotc3RhdGljIHZvaWQgaHNvX2ZyZWVfZGV2aWNlKHN0cnVjdCBoc29fZGV2aWNlICpoc29fZGV2KQotewotCWtmcmVlKGhzb19kZXYpOwotfQotCiAvKiBDcmVhdGVzIGEgZ2VuZXJhbCBoc28gZGV2aWNlICovCiBzdGF0aWMgc3RydWN0IGhzb19kZXZpY2UgKmhzb19jcmVhdGVfZGV2aWNlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAogCQkJCQkgICAgaW50IHBvcnRfc3BlYykKQEAgLTI0MzIsOSArMjQyNSwxNiBAQAogCQlmcmVlX25ldGRldihoc29fbmV0LT5uZXQpOwogCX0KIAotCWhzb19mcmVlX2RldmljZShoc29fZGV2KTsKKwlrZnJlZShoc29fZGV2KTsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBoc29fbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JPSBoc29fbmV0X29wZW4sCisJLm5kb19zdG9wCT0gaHNvX25ldF9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQgPSBoc29fbmV0X3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0ID0gaHNvX25ldF90eF90aW1lb3V0LAorfTsKKwogLyogaW5pdGlhbGl6ZSB0aGUgbmV0d29yayBpbnRlcmZhY2UgKi8KIHN0YXRpYyB2b2lkIGhzb19uZXRfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQogewpAQCAtMjQ0MywxMCArMjQ0Myw3IEBACiAJRDEoInNpemVvZiBoc29fbmV0IGlzICVkIiwgKGludClzaXplb2YoKmhzb19uZXQpKTsKIAogCS8qIGZpbGwgaW4gdGhlIG90aGVyIGZpZWxkcyAqLwotCW5ldC0+b3BlbiA9IGhzb19uZXRfb3BlbjsKLQluZXQtPnN0b3AgPSBoc29fbmV0X2Nsb3NlOwotCW5ldC0+aGFyZF9zdGFydF94bWl0ID0gaHNvX25ldF9zdGFydF94bWl0OwotCW5ldC0+dHhfdGltZW91dCA9IGhzb19uZXRfdHhfdGltZW91dDsKKwluZXQtPm5ldGRldl9vcHMgPSAmaHNvX25ldGRldl9vcHM7CiAJbmV0LT53YXRjaGRvZ190aW1lbyA9IEhTT19ORVRfVFhfVElNRU9VVDsKIAluZXQtPmZsYWdzID0gSUZGX1BPSU5UT1BPSU5UIHwgSUZGX05PQVJQIHwgSUZGX01VTFRJQ0FTVDsKIAluZXQtPnR5cGUgPSBBUlBIUkRfTk9ORTsKQEAgLTI2NDYsNyArMjY0Myw3IEBACiAJfQogCWhzb19mcmVlX3Rpb21nZXQoc2VyaWFsKTsKIAlrZnJlZShzZXJpYWwpOwotCWhzb19mcmVlX2RldmljZShoc29fZGV2KTsKKwlrZnJlZShoc29fZGV2KTsKIH0KIAogLyogQ3JlYXRlcyBhIGJ1bGsgQVQgY2hhbm5lbCAqLwpAQCAtMjcyNyw3ICsyNzI0LDcgQEAKIGV4aXQ6CiAJaHNvX2ZyZWVfdGlvbWdldChzZXJpYWwpOwogCWtmcmVlKHNlcmlhbCk7Ci0JaHNvX2ZyZWVfZGV2aWNlKGhzb19kZXYpOworCWtmcmVlKGhzb19kZXYpOwogCXJldHVybiBOVUxMOwogfQogCkBAIC0yNzg2LDcgKzI3ODMsNyBAQAogCQlrZnJlZShzZXJpYWwpOwogCX0KIAlpZiAoaHNvX2RldikKLQkJaHNvX2ZyZWVfZGV2aWNlKGhzb19kZXYpOworCQlrZnJlZShoc29fZGV2KTsKIAlyZXR1cm4gTlVMTDsKIAogfQpAQCAtMjk3OSw4ICsyOTc2LDYgQEAKIAkJZ290byBleGl0OwogCX0KIAotCXVzYl9kcml2ZXJfY2xhaW1faW50ZXJmYWNlKCZoc29fZHJpdmVyLCBpbnRlcmZhY2UsIGhzb19kZXYpOwotCiAJLyogc2F2ZSBvdXIgZGF0YSBwb2ludGVyIGluIHRoaXMgZGV2aWNlICovCiAJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIGhzb19kZXYpOwogCkBAIC0yOTk4LDggKzI5OTMsNiBAQAogCiAJLyogcmVtb3ZlIHJlZmVyZW5jZSBvZiBvdXIgcHJpdmF0ZSBkYXRhICovCiAJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIE5VTEwpOwotCi0JdXNiX2RyaXZlcl9yZWxlYXNlX2ludGVyZmFjZSgmaHNvX2RyaXZlciwgaW50ZXJmYWNlKTsKIH0KIAogc3RhdGljIHZvaWQgYXN5bmNfZ2V0X2ludGYoc3RydWN0IHdvcmtfc3RydWN0ICpkYXRhKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL21jczc4MzAuYyBiL2RyaXZlcnMvbmV0L3VzYi9tY3M3ODMwLmMKaW5kZXggY2VkOGYzNi4uN2FlOWFmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL21jczc4MzAuYworKysgYi9kcml2ZXJzL25ldC91c2IvbWNzNzgzMC5jCkBAIC00ODYsNiArNDg2LDE4IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbWNzNzgzMF9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSB1c2JuZXRfb3BlbiwKKwkubmRvX3N0b3AJCT0gdXNibmV0X3N0b3AsCisJLm5kb19zdGFydF94bWl0CQk9IHVzYm5ldF9zdGFydF94bWl0LAorCS5uZG9fdHhfdGltZW91dAkJPSB1c2JuZXRfdHhfdGltZW91dCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gdXNibmV0X2NoYW5nZV9tdHUsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCisJLm5kb19kb19pb2N0bCAJCT0gbWNzNzgzMF9pb2N0bCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IG1jczc4MzBfc2V0X211bHRpY2FzdCwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwkgPSBtY3M3ODMwX3NldF9tYWNfYWRkcmVzcywKK307CisKIHN0YXRpYyBpbnQgbWNzNzgzMF9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKnVkZXYpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldCA9IGRldi0+bmV0OwpAQCAtNDk1LDExICs1MDcsOSBAQAogCWlmIChyZXQpCiAJCWdvdG8gb3V0OwogCi0JbmV0LT5kb19pb2N0bCA9IG1jczc4MzBfaW9jdGw7CiAJbmV0LT5ldGh0b29sX29wcyA9ICZtY3M3ODMwX2V0aHRvb2xfb3BzOwotCW5ldC0+c2V0X211bHRpY2FzdF9saXN0ID0gbWNzNzgzMF9zZXRfbXVsdGljYXN0OworCW5ldC0+bmV0ZGV2X29wcyA9ICZtY3M3ODMwX25ldGRldl9vcHM7CiAJbWNzNzgzMF9zZXRfbXVsdGljYXN0KG5ldCk7Ci0JbmV0LT5zZXRfbWFjX2FkZHJlc3MgPSBtY3M3ODMwX3NldF9tYWNfYWRkcmVzczsKIAogCS8qIHJlc2VydmUgc3BhY2UgZm9yIHRoZSBzdGF0dXMgYnl0ZSBvbiByeCAqLwogCWRldi0+cnhfdXJiX3NpemUgPSBFVEhfRlJBTUVfTEVOICsgMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9ybmRpc19ob3N0LmMgYi9kcml2ZXJzL25ldC91c2Ivcm5kaXNfaG9zdC5jCmluZGV4IGJjZDg1OGMuLjFiZjI0M2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9ybmRpc19ob3N0LmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL3JuZGlzX2hvc3QuYwpAQCAtMTY5LDcgKzE2OSw3IEBACiAJCQkJc3RydWN0IHJuZGlzX2tlZXBhbGl2ZV9jICptc2cgPSAodm9pZCAqKWJ1ZjsKIAogCQkJCW1zZy0+bXNnX3R5cGUgPSBSTkRJU19NU0dfS0VFUEFMSVZFX0M7Ci0JCQkJbXNnLT5tc2dfbGVuID0gY2NwdTIoc2l6ZW9mICptc2cpOworCQkJCW1zZy0+bXNnX2xlbiA9IGNwdV90b19sZTMyKHNpemVvZiAqbXNnKTsKIAkJCQltc2ctPnN0YXR1cyA9IFJORElTX1NUQVRVU19TVUNDRVNTOwogCQkJCXJldHZhbCA9IHVzYl9jb250cm9sX21zZyhkZXYtPnVkZXYsCiAJCQkJCXVzYl9zbmRjdHJscGlwZShkZXYtPnVkZXYsIDApLApAQCAtMjM3LDcgKzIzNyw3IEBACiAJdS5nZXQtPm1zZ19sZW4gPSBjcHVfdG9fbGUzMihzaXplb2YgKnUuZ2V0ICsgaW5fbGVuKTsKIAl1LmdldC0+b2lkID0gb2lkOwogCXUuZ2V0LT5sZW4gPSBjcHVfdG9fbGUzMihpbl9sZW4pOwotCXUuZ2V0LT5vZmZzZXQgPSBjY3B1MigyMCk7CisJdS5nZXQtPm9mZnNldCA9IGNwdV90b19sZTMyKDIwKTsKIAogCXJldHZhbCA9IHJuZGlzX2NvbW1hbmQoZGV2LCB1LmhlYWRlciwgQ09OVFJPTF9CVUZGRVJfU0laRSk7CiAJaWYgKHVubGlrZWx5KHJldHZhbCA8IDApKSB7CkBAIC0yNjYsNiArMjY2LDE2IEBACiAJcmV0dXJuIC1FRE9NOwogfQogCisvKiBzYW1lIGFzIHVzYm5ldF9uZXRkZXZfb3BzIGJ1dCBNVFUgY2hhbmdlIG5vdCBhbGxvd2VkICovCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHJuZGlzX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IHVzYm5ldF9vcGVuLAorCS5uZG9fc3RvcAkJPSB1c2JuZXRfc3RvcCwKKwkubmRvX3N0YXJ0X3htaXQJCT0gdXNibmV0X3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0CQk9IHVzYm5ldF90eF90aW1lb3V0LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIGludAogZ2VuZXJpY19ybmRpc19iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGludCBmbGFncykKIHsKQEAgLTI5Nyw5ICszMDcsOSBAQAogCQlnb3RvIGZhaWw7CiAKIAl1LmluaXQtPm1zZ190eXBlID0gUk5ESVNfTVNHX0lOSVQ7Ci0JdS5pbml0LT5tc2dfbGVuID0gY2NwdTIoc2l6ZW9mICp1LmluaXQpOwotCXUuaW5pdC0+bWFqb3JfdmVyc2lvbiA9IGNjcHUyKDEpOwotCXUuaW5pdC0+bWlub3JfdmVyc2lvbiA9IGNjcHUyKDApOworCXUuaW5pdC0+bXNnX2xlbiA9IGNwdV90b19sZTMyKHNpemVvZiAqdS5pbml0KTsKKwl1LmluaXQtPm1ham9yX3ZlcnNpb24gPSBjcHVfdG9fbGUzMigxKTsKKwl1LmluaXQtPm1pbm9yX3ZlcnNpb24gPSBjcHVfdG9fbGUzMigwKTsKIAogCS8qIG1heCB0cmFuc2ZlciAoaW4gc3BlYykgaXMgMHg0MDAwIGF0IGZ1bGwgc3BlZWQsIGJ1dCBmb3IKIAkgKiBUWCB3ZSdsbCBzdGljayB0byBvbmUgRXRoZXJuZXQgcGFja2V0IHBsdXMgUk5ESVMgZnJhbWluZy4KQEAgLTMyNyw3ICszMzcsOCBAQAogCWRldi0+cnhfdXJiX3NpemUgJj0gfihkZXYtPm1heHBhY2tldCAtIDEpOwogCXUuaW5pdC0+bWF4X3RyYW5zZmVyX3NpemUgPSBjcHVfdG9fbGUzMihkZXYtPnJ4X3VyYl9zaXplKTsKIAotCW5ldC0+Y2hhbmdlX210dSA9IE5VTEw7CisJbmV0LT5uZXRkZXZfb3BzID0gJnJuZGlzX25ldGRldl9vcHM7CisKIAlyZXR2YWwgPSBybmRpc19jb21tYW5kKGRldiwgdS5oZWFkZXIsIENPTlRST0xfQlVGRkVSX1NJWkUpOwogCWlmICh1bmxpa2VseShyZXR2YWwgPCAwKSkgewogCQkvKiBpdCBtaWdodCBub3QgZXZlbiBiZSBhbiBSTkRJUyBkZXZpY2UhISAqLwpAQCAtNDAzLDEwICs0MTQsMTAgQEAKIAkvKiBzZXQgYSBub256ZXJvIGZpbHRlciB0byBlbmFibGUgZGF0YSB0cmFuc2ZlcnMgKi8KIAltZW1zZXQodS5zZXQsIDAsIHNpemVvZiAqdS5zZXQpOwogCXUuc2V0LT5tc2dfdHlwZSA9IFJORElTX01TR19TRVQ7Ci0JdS5zZXQtPm1zZ19sZW4gPSBjY3B1Mig0ICsgc2l6ZW9mICp1LnNldCk7CisJdS5zZXQtPm1zZ19sZW4gPSBjcHVfdG9fbGUzMig0ICsgc2l6ZW9mICp1LnNldCk7CiAJdS5zZXQtPm9pZCA9IE9JRF9HRU5fQ1VSUkVOVF9QQUNLRVRfRklMVEVSOwotCXUuc2V0LT5sZW4gPSBjY3B1Mig0KTsKLQl1LnNldC0+b2Zmc2V0ID0gY2NwdTIoKHNpemVvZiAqdS5zZXQpIC0gOCk7CisJdS5zZXQtPmxlbiA9IGNwdV90b19sZTMyKDQpOworCXUuc2V0LT5vZmZzZXQgPSBjcHVfdG9fbGUzMigoc2l6ZW9mICp1LnNldCkgLSA4KTsKIAkqKF9fbGUzMiAqKSh1LmJ1ZiArIHNpemVvZiAqdS5zZXQpID0gUk5ESVNfREVGQVVMVF9GSUxURVI7CiAKIAlyZXR2YWwgPSBybmRpc19jb21tYW5kKGRldiwgdS5oZWFkZXIsIENPTlRST0xfQlVGRkVSX1NJWkUpOwpAQCAtNDIzLDcgKzQzNCw3IEBACiBoYWx0X2ZhaWxfYW5kX3JlbGVhc2U6CiAJbWVtc2V0KHUuaGFsdCwgMCwgc2l6ZW9mICp1LmhhbHQpOwogCXUuaGFsdC0+bXNnX3R5cGUgPSBSTkRJU19NU0dfSEFMVDsKLQl1LmhhbHQtPm1zZ19sZW4gPSBjY3B1MihzaXplb2YgKnUuaGFsdCk7CisJdS5oYWx0LT5tc2dfbGVuID0gY3B1X3RvX2xlMzIoc2l6ZW9mICp1LmhhbHQpOwogCSh2b2lkKSBybmRpc19jb21tYW5kKGRldiwgKHZvaWQgKil1LmhhbHQsIENPTlRST0xfQlVGRkVSX1NJWkUpOwogZmFpbF9hbmRfcmVsZWFzZToKIAl1c2Jfc2V0X2ludGZkYXRhKGluZm8tPmRhdGEsIE5VTEwpOwpAQCAtNDQ4LDcgKzQ1OSw3IEBACiAJaGFsdCA9IGt6YWxsb2MoQ09OVFJPTF9CVUZGRVJfU0laRSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGhhbHQpIHsKIAkJaGFsdC0+bXNnX3R5cGUgPSBSTkRJU19NU0dfSEFMVDsKLQkJaGFsdC0+bXNnX2xlbiA9IGNjcHUyKHNpemVvZiAqaGFsdCk7CisJCWhhbHQtPm1zZ19sZW4gPSBjcHVfdG9fbGUzMihzaXplb2YgKmhhbHQpOwogCQkodm9pZCkgcm5kaXNfY29tbWFuZChkZXYsICh2b2lkICopaGFsdCwgQ09OVFJPTF9CVUZGRVJfU0laRSk7CiAJCWtmcmVlKGhhbHQpOwogCX0KQEAgLTU0Myw3ICs1NTQsNyBAQAogCW1lbXNldChoZHIsIDAsIHNpemVvZiAqaGRyKTsKIAloZHItPm1zZ190eXBlID0gUk5ESVNfTVNHX1BBQ0tFVDsKIAloZHItPm1zZ19sZW4gPSBjcHVfdG9fbGUzMihza2ItPmxlbik7Ci0JaGRyLT5kYXRhX29mZnNldCA9IGNjcHUyKHNpemVvZigqaGRyKSAtIDgpOworCWhkci0+ZGF0YV9vZmZzZXQgPSBjcHVfdG9fbGUzMihzaXplb2YoKmhkcikgLSA4KTsKIAloZHItPmRhdGFfbGVuID0gY3B1X3RvX2xlMzIobGVuKTsKIAogCS8qIEZJWE1FIG1ha2UgdGhlIGxhc3QgcGFja2V0IGFsd2F5cyBiZSBzaG9ydCAuLi4gKi8KQEAgLTU2Miw5ICs1NzMsNiBAQAogCS50eF9maXh1cCA9CXJuZGlzX3R4X2ZpeHVwLAogfTsKIAotI3VuZGVmIGNjcHUyCi0KLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkCXByb2R1Y3RzIFtdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL3J0bDgxNTAuYyBiL2RyaXZlcnMvbmV0L3VzYi9ydGw4MTUwLmMKaW5kZXggZDg2NjRiZi4uZjlmYjQ1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL3J0bDgxNTAuYworKysgYi9kcml2ZXJzL25ldC91c2IvcnRsODE1MC5jCkBAIC0xNTUsNyArMTU1LDYgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OwogCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCB0bDsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OwogCXN0cnVjdCB1cmIgKnJ4X3VyYiwgKnR4X3VyYiwgKmludHJfdXJiLCAqY3RybF91cmI7CiAJc3RydWN0IHNrX2J1ZmYgKnR4X3NrYiwgKnJ4X3NrYjsKQEAgLTQ2Myw4ICs0NjIsOCBAQAogCXNrYl9wdXQoZGV2LT5yeF9za2IsIHBrdF9sZW4pOwogCWRldi0+cnhfc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKGRldi0+cnhfc2tiLCBuZXRkZXYpOwogCW5ldGlmX3J4KGRldi0+cnhfc2tiKTsKLQlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKLQlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHBrdF9sZW47CisJbmV0ZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJbmV0ZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBwa3RfbGVuOwogCiAJc3Bpbl9sb2NrKCZkZXYtPnJ4X3Bvb2xfbG9jayk7CiAJc2tiID0gcHVsbF9za2IoZGV2KTsKQEAgLTU3MywxMyArNTcyLDEzIEBACiAKIAlkID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CiAJaWYgKGRbMF0gJiBUU1JfRVJST1JTKSB7Ci0JCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CisJCWRldi0+bmV0ZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKIAkJaWYgKGRbSU5UX1RTUl0gJiAoVFNSX0VDT0wgfCBUU1JfSkJSKSkKLQkJCWRldi0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMrKzsKKwkJCWRldi0+bmV0ZGV2LT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOwogCQlpZiAoZFtJTlRfVFNSXSAmIFRTUl9MQ09MKQotCQkJZGV2LT5zdGF0cy50eF93aW5kb3dfZXJyb3JzKys7CisJCQlkZXYtPm5ldGRldi0+c3RhdHMudHhfd2luZG93X2Vycm9ycysrOwogCQlpZiAoZFtJTlRfVFNSXSAmIFRTUl9MT1NTX0NSUykKLQkJCWRldi0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKKwkJCWRldi0+bmV0ZGV2LT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOwogCX0KIAkvKiBSZXBvcnQgbGluayBzdGF0dXMgY2hhbmdlcyB0byB0aGUgbmV0d29yayBzdGFjayAqLwogCWlmICgoZFtJTlRfTVNSXSAmIE1TUl9MSU5LKSA9PSAwKSB7CkBAIC02OTcsMTcgKzY5NiwxMiBAQAogCXNldF9yZWdpc3RlcnMoZGV2LCBDUiwgMSwgJmNyKTsKIH0KIAotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpydGw4MTUwX25ldGRldl9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXJldHVybiAmKChydGw4MTUwX3QgKiluZXRkZXZfcHJpdihkZXYpKS0+c3RhdHM7Ci19Ci0KIHN0YXRpYyB2b2lkIHJ0bDgxNTBfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXJ0bDgxNTBfdCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAlkZXZfd2FybigmbmV0ZGV2LT5kZXYsICJUeCB0aW1lb3V0LlxuIik7CiAJdXNiX3VubGlua191cmIoZGV2LT50eF91cmIpOwotCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CisJbmV0ZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKIH0KIAogc3RhdGljIHZvaWQgcnRsODE1MF9zZXRfbXVsdGljYXN0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCkBAIC03NDcsMTIgKzc0MSwxMiBAQAogCQkJbmV0aWZfZGV2aWNlX2RldGFjaChkZXYtPm5ldGRldik7CiAJCWVsc2UgewogCQkJZGV2X3dhcm4oJm5ldGRldi0+ZGV2LCAiZmFpbGVkIHR4X3VyYiAlZFxuIiwgcmVzKTsKLQkJCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CisJCQluZXRkZXYtPnN0YXRzLnR4X2Vycm9ycysrOwogCQkJbmV0aWZfc3RhcnRfcXVldWUobmV0ZGV2KTsKIAkJfQogCX0gZWxzZSB7Ci0JCWRldi0+c3RhdHMudHhfcGFja2V0cysrOwotCQlkZXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOworCQluZXRkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwkJbmV0ZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKIAkJbmV0ZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAJfQogCkBAIC04OTcsNiArODkxLDE5IEBACiAJcmV0dXJuIHJlczsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBydGw4MTUwX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IHJ0bDgxNTBfb3BlbiwKKwkubmRvX3N0b3AJCT0gcnRsODE1MF9jbG9zZSwKKwkubmRvX2RvX2lvY3RsCQk9IHJ0bDgxNTBfaW9jdGwsCisJLm5kb19zdGFydF94bWl0CQk9IHJ0bDgxNTBfc3RhcnRfeG1pdCwKKwkubmRvX3R4X3RpbWVvdXQgCT0gcnRsODE1MF90eF90aW1lb3V0LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gcnRsODE1MF9zZXRfbXVsdGljYXN0LAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gcnRsODE1MF9zZXRfbWFjX2FkZHJlc3MsCisKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCiBzdGF0aWMgaW50IHJ0bDgxNTBfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCiAJCQkgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQogewpAQCAtOTIzLDE1ICs5MzAsOCBAQAogCQogCWRldi0+dWRldiA9IHVkZXY7CiAJZGV2LT5uZXRkZXYgPSBuZXRkZXY7Ci0JbmV0ZGV2LT5vcGVuID0gcnRsODE1MF9vcGVuOwotCW5ldGRldi0+c3RvcCA9IHJ0bDgxNTBfY2xvc2U7Ci0JbmV0ZGV2LT5kb19pb2N0bCA9IHJ0bDgxNTBfaW9jdGw7CisJbmV0ZGV2LT5uZXRkZXZfb3BzID0gJnJ0bDgxNTBfbmV0ZGV2X29wczsKIAluZXRkZXYtPndhdGNoZG9nX3RpbWVvID0gUlRMODE1MF9UWF9USU1FT1VUOwotCW5ldGRldi0+dHhfdGltZW91dCA9IHJ0bDgxNTBfdHhfdGltZW91dDsKLQluZXRkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IHJ0bDgxNTBfc3RhcnRfeG1pdDsKLQluZXRkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IHJ0bDgxNTBfc2V0X211bHRpY2FzdDsKLQluZXRkZXYtPnNldF9tYWNfYWRkcmVzcyA9IHJ0bDgxNTBfc2V0X21hY19hZGRyZXNzOwotCW5ldGRldi0+Z2V0X3N0YXRzID0gcnRsODE1MF9uZXRkZXZfc3RhdHM7CiAJU0VUX0VUSFRPT0xfT1BTKG5ldGRldiwgJm9wcyk7CiAJZGV2LT5pbnRyX2ludGVydmFsID0gMTAwOwkvKiAxMDBtcyAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYyBiL2RyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jCmluZGV4IDU1NzRhYmUuLmRjMTY2NTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jCkBAIC01NSwxMSArNTUsMTAgQEAKIAogc3RydWN0IHVzYl9jb250ZXh0IHsKIAlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0IHJlcTsKLQlzdHJ1Y3QgY29tcGxldGlvbiBub3RpZnk7CiAJc3RydWN0IHVzYm5ldCAqZGV2OwogfTsKIAotaW50IHR1cmJvX21vZGUgPSB0cnVlOworc3RhdGljIGludCB0dXJib19tb2RlID0gdHJ1ZTsKIG1vZHVsZV9wYXJhbSh0dXJib19tb2RlLCBib29sLCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0ModHVyYm9fbW9kZSwgIkVuYWJsZSBtdWx0aXBsZSBmcmFtZXMgcGVyIFJ4IHRyYW5zYWN0aW9uIik7CiAKQEAgLTMwNyw3ICszMDYsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBzbXNjOTV4eF9hc3luY19jbWRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyB2b2lkIHNtc2M5NXh4X2FzeW5jX2NtZF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpCiB7CiAJc3RydWN0IHVzYl9jb250ZXh0ICp1c2JfY29udGV4dCA9IHVyYi0+Y29udGV4dDsKIAlzdHJ1Y3QgdXNibmV0ICpkZXYgPSB1c2JfY29udGV4dC0+ZGV2OwpAQCAtMzE2LDggKzMxNSw2IEBACiAJaWYgKHN0YXR1cyA8IDApCiAJCWRldndhcm4oZGV2LCAiYXN5bmMgY2FsbGJhY2sgZmFpbGVkIHdpdGggJWQiLCBzdGF0dXMpOwogCi0JY29tcGxldGUoJnVzYl9jb250ZXh0LT5ub3RpZnkpOwotCiAJa2ZyZWUodXNiX2NvbnRleHQpOwogCXVzYl9mcmVlX3VyYih1cmIpOwogfQpAQCAtMzQ4LDExICszNDUsMTAgQEAKIAl1c2JfY29udGV4dC0+cmVxLndWYWx1ZSA9IDAwOwogCXVzYl9jb250ZXh0LT5yZXEud0luZGV4ID0gY3B1X3RvX2xlMTYoaW5kZXgpOwogCXVzYl9jb250ZXh0LT5yZXEud0xlbmd0aCA9IGNwdV90b19sZTE2KHNpemUpOwotCWluaXRfY29tcGxldGlvbigmdXNiX2NvbnRleHQtPm5vdGlmeSk7CiAKIAl1c2JfZmlsbF9jb250cm9sX3VyYih1cmIsIGRldi0+dWRldiwgdXNiX3NuZGN0cmxwaXBlKGRldi0+dWRldiwgMCksCiAJCSh2b2lkICopJnVzYl9jb250ZXh0LT5yZXEsIGRhdGEsIHNpemUsCi0JCSh1c2JfY29tcGxldGVfdClzbXNjOTV4eF9hc3luY19jbWRfY2FsbGJhY2ssCisJCXNtc2M5NXh4X2FzeW5jX2NtZF9jYWxsYmFjaywKIAkJKHZvaWQgKil1c2JfY29udGV4dCk7CiAKIAlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwpAQCAtMTAxMiw2ICsxMDA4LDE4IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgc21zYzk1eHhfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gdXNibmV0X29wZW4sCisJLm5kb19zdG9wCQk9IHVzYm5ldF9zdG9wLAorCS5uZG9fc3RhcnRfeG1pdAkJPSB1c2JuZXRfc3RhcnRfeG1pdCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gdXNibmV0X3R4X3RpbWVvdXQsCisJLm5kb19jaGFuZ2VfbXR1CQk9IHVzYm5ldF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKKwkubmRvX2RvX2lvY3RsIAkJPSBzbXNjOTV4eF9pb2N0bCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IHNtc2M5NXh4X3NldF9tdWx0aWNhc3QsCit9OworCiBzdGF0aWMgaW50IHNtc2M5NXh4X2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKIHsKIAlzdHJ1Y3Qgc21zYzk1eHhfcHJpdiAqcGRhdGEgPSBOVUxMOwpAQCAtMTA0Miw5ICsxMDUwLDggQEAKIAkvKiBJbml0IGFsbCByZWdpc3RlcnMgKi8KIAlyZXQgPSBzbXNjOTV4eF9yZXNldChkZXYpOwogCi0JZGV2LT5uZXQtPmRvX2lvY3RsID0gc21zYzk1eHhfaW9jdGw7CisJZGV2LT5uZXQtPm5ldGRldl9vcHMgPSAmc21zYzk1eHhfbmV0ZGV2X29wczsKIAlkZXYtPm5ldC0+ZXRodG9vbF9vcHMgPSAmc21zYzk1eHhfZXRodG9vbF9vcHM7Ci0JZGV2LT5uZXQtPnNldF9tdWx0aWNhc3RfbGlzdCA9IHNtc2M5NXh4X3NldF9tdWx0aWNhc3Q7CiAJZGV2LT5uZXQtPmZsYWdzIHw9IElGRl9NVUxUSUNBU1Q7CiAJZGV2LT5uZXQtPmhhcmRfaGVhZGVyX2xlbiArPSBTTVNDOTVYWF9UWF9PVkVSSEVBRDsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuYyBiL2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuYwppbmRleCBjMzIyODRmLi42NTk2NTRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvdXNibmV0LmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jCkBAIC0yMjMsNyArMjIzLDcgQEAKICAqCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgaW50IHVzYm5ldF9jaGFuZ2VfbXR1IChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBpbnQgbmV3X210dSkKK2ludCB1c2JuZXRfY2hhbmdlX210dSAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgaW50IG5ld19tdHUpCiB7CiAJc3RydWN0IHVzYm5ldAkqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKIAlpbnQJCWxsX210dSA9IG5ld19tdHUgKyBuZXQtPmhhcmRfaGVhZGVyX2xlbjsKQEAgLTI0NiwxNCArMjQ2LDcgQEAKIAogCXJldHVybiAwOwogfQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnVzYm5ldF9nZXRfc3RhdHMgKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCi17Ci0Jc3RydWN0IHVzYm5ldAkqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKLQlyZXR1cm4gJmRldi0+c3RhdHM7Ci19CitFWFBPUlRfU1lNQk9MX0dQTCh1c2JuZXRfY2hhbmdlX210dSk7CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKQEAgLTU0OCw3ICs1NDEsNyBAQAogCiAvLyBwcmVjb25kaXRpb246IG5ldmVyIGNhbGxlZCBpbl9pbnRlcnJ1cHQKIAotc3RhdGljIGludCB1c2JuZXRfc3RvcCAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKK2ludCB1c2JuZXRfc3RvcCAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKIHsKIAlzdHJ1Y3QgdXNibmV0CQkqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKIAlpbnQJCQl0ZW1wOwpAQCAtNTkyLDYgKzU4NSw3IEBACiAKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYm5ldF9zdG9wKTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApAQCAtNTk5LDcgKzU5Myw3IEBACiAKIC8vIHByZWNvbmRpdGlvbjogbmV2ZXIgY2FsbGVkIGluX2ludGVycnVwdAogCi1zdGF0aWMgaW50IHVzYm5ldF9vcGVuIChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQoraW50IHVzYm5ldF9vcGVuIChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQogewogCXN0cnVjdCB1c2JuZXQJCSpkZXYgPSBuZXRkZXZfcHJpdihuZXQpOwogCWludAkJCXJldHZhbDsKQEAgLTY3NCw2ICs2NjgsNyBAQAogZG9uZV9ub3BtOgogCXJldHVybiByZXR2YWw7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2JuZXRfb3Blbik7CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKQEAgLTkwOCw3ICs5MDMsNyBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgdm9pZCB1c2JuZXRfdHhfdGltZW91dCAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKK3ZvaWQgdXNibmV0X3R4X3RpbWVvdXQgKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCiB7CiAJc3RydWN0IHVzYm5ldAkJKmRldiA9IG5ldGRldl9wcml2KG5ldCk7CiAKQEAgLTkxNywxMCArOTEyLDExIEBACiAKIAkvLyBGSVhNRTogZGV2aWNlIHJlY292ZXJ5IC0tIHJlc2V0PwogfQorRVhQT1JUX1NZTUJPTF9HUEwodXNibmV0X3R4X3RpbWVvdXQpOwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgaW50IHVzYm5ldF9zdGFydF94bWl0IChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQoraW50IHVzYm5ldF9zdGFydF94bWl0IChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQogewogCXN0cnVjdCB1c2JuZXQJCSpkZXYgPSBuZXRkZXZfcHJpdihuZXQpOwogCWludAkJCWxlbmd0aDsKQEAgLTEwMDMsNyArOTk5LDcgQEAKIAl9CiAJcmV0dXJuIHJldHZhbDsKIH0KLQorRVhQT1JUX1NZTUJPTF9HUEwodXNibmV0X3N0YXJ0X3htaXQpOwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC0xMTEwLDYgKzExMDYsMTUgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHVzYm5ldF9kaXNjb25uZWN0KTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB1c2JuZXRfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gdXNibmV0X29wZW4sCisJLm5kb19zdG9wCQk9IHVzYm5ldF9zdG9wLAorCS5uZG9fc3RhcnRfeG1pdAkJPSB1c2JuZXRfc3RhcnRfeG1pdCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gdXNibmV0X3R4X3RpbWVvdXQsCisJLm5kb19jaGFuZ2VfbXR1CQk9IHVzYm5ldF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKQEAgLTExNzksMTMgKzExODQsMTQgQEAKIAkJbmV0LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hJR0hETUE7CiAjZW5kaWYKIAotCW5ldC0+Y2hhbmdlX210dSA9IHVzYm5ldF9jaGFuZ2VfbXR1OwotCW5ldC0+Z2V0X3N0YXRzID0gdXNibmV0X2dldF9zdGF0czsKKwluZXQtPm5ldGRldl9vcHMgPSAmdXNibmV0X25ldGRldl9vcHM7CisjaWZkZWYgQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUwogCW5ldC0+aGFyZF9zdGFydF94bWl0ID0gdXNibmV0X3N0YXJ0X3htaXQ7CiAJbmV0LT5vcGVuID0gdXNibmV0X29wZW47CiAJbmV0LT5zdG9wID0gdXNibmV0X3N0b3A7Ci0JbmV0LT53YXRjaGRvZ190aW1lbyA9IFRYX1RJTUVPVVRfSklGRklFUzsKIAluZXQtPnR4X3RpbWVvdXQgPSB1c2JuZXRfdHhfdGltZW91dDsKKyNlbmRpZgorCW5ldC0+d2F0Y2hkb2dfdGltZW8gPSBUWF9USU1FT1VUX0pJRkZJRVM7CiAJbmV0LT5ldGh0b29sX29wcyA9ICZ1c2JuZXRfZXRodG9vbF9vcHM7CiAKIAkvLyBhbGxvdyBkZXZpY2Utc3BlY2lmaWMgYmluZC9pbml0IHByb2NlZHVyZXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZldGguYyBiL2RyaXZlcnMvbmV0L3ZldGguYwppbmRleCAxMjRmZTc1Li4wMTVkYjFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92ZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvdmV0aC5jCkBAIC0xOSwxMiArMTksMTcgQEAKICNkZWZpbmUgRFJWX05BTUUJInZldGgiCiAjZGVmaW5lIERSVl9WRVJTSU9OCSIxLjAiCiAKKyNkZWZpbmUgTUlOX01UVSA2OAkJLyogTWluIEwzIE1UVSAqLworI2RlZmluZSBNQVhfTVRVIDY1NTM1CQkvKiBNYXggTDMgTVRVIChhcmJpdHJhcnkpICovCisjZGVmaW5lIE1UVV9QQUQgKEVUSF9ITEVOICsgNCkgIC8qIE1heCBkaWZmZXJlbmNlIGJldHdlZW4gTDIgYW5kIEwzIHNpemUgTVRVICovCisKIHN0cnVjdCB2ZXRoX25ldF9zdGF0cyB7CiAJdW5zaWduZWQgbG9uZwlyeF9wYWNrZXRzOwogCXVuc2lnbmVkIGxvbmcJdHhfcGFja2V0czsKIAl1bnNpZ25lZCBsb25nCXJ4X2J5dGVzOwogCXVuc2lnbmVkIGxvbmcJdHhfYnl0ZXM7CiAJdW5zaWduZWQgbG9uZwl0eF9kcm9wcGVkOworCXVuc2lnbmVkIGxvbmcJcnhfZHJvcHBlZDsKIH07CiAKIHN0cnVjdCB2ZXRoX3ByaXYgewpAQCAtMTQ3LDcgKzE1Miw3IEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKnJjdiA9IE5VTEw7CiAJc3RydWN0IHZldGhfcHJpdiAqcHJpdiwgKnJjdl9wcml2OwotCXN0cnVjdCB2ZXRoX25ldF9zdGF0cyAqc3RhdHM7CisJc3RydWN0IHZldGhfbmV0X3N0YXRzICpzdGF0cywgKnJjdl9zdGF0czsKIAlpbnQgbGVuZ3RoLCBjcHU7CiAKIAlza2Jfb3JwaGFuKHNrYik7CkBAIC0xNTgsOSArMTYzLDEzIEBACiAKIAljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJc3RhdHMgPSBwZXJfY3B1X3B0cihwcml2LT5zdGF0cywgY3B1KTsKKwlyY3Zfc3RhdHMgPSBwZXJfY3B1X3B0cihyY3ZfcHJpdi0+c3RhdHMsIGNwdSk7CiAKIAlpZiAoIShyY3YtPmZsYWdzICYgSUZGX1VQKSkKLQkJZ290byBvdXRmOworCQlnb3RvIHR4X2Ryb3A7CisKKwlpZiAoc2tiLT5sZW4gPiAocmN2LT5tdHUgKyBNVFVfUEFEKSkKKwkJZ290byByeF9kcm9wOwogCiAJc2tiLT5wa3RfdHlwZSA9IFBBQ0tFVF9IT1NUOwogCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIHJjdik7CkBAIC0xNzgsMTcgKzE4NywyMSBAQAogCXN0YXRzLT50eF9ieXRlcyArPSBsZW5ndGg7CiAJc3RhdHMtPnR4X3BhY2tldHMrKzsKIAotCXN0YXRzID0gcGVyX2NwdV9wdHIocmN2X3ByaXYtPnN0YXRzLCBjcHUpOwotCXN0YXRzLT5yeF9ieXRlcyArPSBsZW5ndGg7Ci0Jc3RhdHMtPnJ4X3BhY2tldHMrKzsKKwlyY3Zfc3RhdHMtPnJ4X2J5dGVzICs9IGxlbmd0aDsKKwlyY3Zfc3RhdHMtPnJ4X3BhY2tldHMrKzsKIAogCW5ldGlmX3J4KHNrYik7CiAJcmV0dXJuIDA7CiAKLW91dGY6Cit0eF9kcm9wOgogCWtmcmVlX3NrYihza2IpOwogCXN0YXRzLT50eF9kcm9wcGVkKys7CiAJcmV0dXJuIDA7CisKK3J4X2Ryb3A6CisJa2ZyZWVfc2tiKHNrYik7CisJcmN2X3N0YXRzLT5yeF9kcm9wcGVkKys7CisJcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC0yMTAsNiArMjIzLDcgQEAKIAlkZXZfc3RhdHMtPnJ4X2J5dGVzID0gMDsKIAlkZXZfc3RhdHMtPnR4X2J5dGVzID0gMDsKIAlkZXZfc3RhdHMtPnR4X2Ryb3BwZWQgPSAwOworCWRldl9zdGF0cy0+cnhfZHJvcHBlZCA9IDA7CiAKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgewogCQlzdGF0cyA9IHBlcl9jcHVfcHRyKHByaXYtPnN0YXRzLCBjcHUpOwpAQCAtMjE5LDYgKzIzMyw3IEBACiAJCWRldl9zdGF0cy0+cnhfYnl0ZXMgKz0gc3RhdHMtPnJ4X2J5dGVzOwogCQlkZXZfc3RhdHMtPnR4X2J5dGVzICs9IHN0YXRzLT50eF9ieXRlczsKIAkJZGV2X3N0YXRzLT50eF9kcm9wcGVkICs9IHN0YXRzLT50eF9kcm9wcGVkOworCQlkZXZfc3RhdHMtPnJ4X2Ryb3BwZWQgKz0gc3RhdHMtPnJ4X2Ryb3BwZWQ7CiAJfQogCiAJcmV0dXJuIGRldl9zdGF0czsKQEAgLTI0OSw2ICsyNjQsMTkgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBpc192YWxpZF92ZXRoX210dShpbnQgbmV3X210dSkKK3sKKwlyZXR1cm4gKG5ld19tdHUgPj0gTUlOX01UVSAmJiBuZXdfbXR1IDw9IE1BWF9NVFUpOworfQorCitzdGF0aWMgaW50IHZldGhfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSkKK3sKKwlpZiAoIWlzX3ZhbGlkX3ZldGhfbXR1KG5ld19tdHUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlkZXYtPm10dSA9IG5ld19tdHU7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgdmV0aF9kZXZfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCB2ZXRoX25ldF9zdGF0cyAqc3RhdHM7CkBAIC0yNzcsNiArMzA1LDcgQEAKIAkubmRvX29wZW4gICAgICAgICAgICA9IHZldGhfb3BlbiwKIAkubmRvX3N0b3AgICAgICAgICAgICA9IHZldGhfY2xvc2UsCiAJLm5kb19zdGFydF94bWl0ICAgICAgPSB2ZXRoX3htaXQsCisJLm5kb19jaGFuZ2VfbXR1ICAgICAgPSB2ZXRoX2NoYW5nZV9tdHUsCiAJLm5kb19nZXRfc3RhdHMgICAgICAgPSB2ZXRoX2dldF9zdGF0cywKIAkubmRvX3NldF9tYWNfYWRkcmVzcyA9IGV0aF9tYWNfYWRkciwKIH07CkBAIC0zMDMsNiArMzMyLDEwIEBACiAJCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihubGFfZGF0YSh0YltJRkxBX0FERFJFU1NdKSkpCiAJCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7CiAJfQorCWlmICh0YltJRkxBX01UVV0pIHsKKwkJaWYgKCFpc192YWxpZF92ZXRoX210dShubGFfZ2V0X3UzMih0YltJRkxBX01UVV0pKSkKKwkJCXJldHVybiAtRUlOVkFMOworCX0KIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdmlhLXJoaW5lLmMgYi9kcml2ZXJzL25ldC92aWEtcmhpbmUuYwppbmRleCAzYjhlNjMyLi44ODBlYWYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92aWEtcmhpbmUuYworKysgYi9kcml2ZXJzL25ldC92aWEtcmhpbmUuYwpAQCAtMTA5LDggKzEwOSw5IEBACiAjaW5jbHVkZSA8bGludXgvZG1pLmg+CiAKIC8qIFRoZXNlIGlkZW50aWZ5IHRoZSBkcml2ZXIgYmFzZSB2ZXJzaW9uIGFuZCBtYXkgbm90IGJlIHJlbW92ZWQuICovCi1zdGF0aWMgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0ZGF0YSA9Ci1LRVJOX0lORk8gRFJWX05BTUUgIi5jOnYxLjEwLUxLIiBEUlZfVkVSU0lPTiAiICIgRFJWX1JFTERBVEUgIiBXcml0dGVuIGJ5IERvbmFsZCBCZWNrZXJcbiI7CitzdGF0aWMgY29uc3QgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0Y29uc3QgPQorCUtFUk5fSU5GTyBEUlZfTkFNRSAiLmM6djEuMTAtTEsiIERSVl9WRVJTSU9OICIgIiBEUlZfUkVMREFURQorCSIgV3JpdHRlbiBieSBEb25hbGQgQmVja2VyXG4iOwogCiAvKiBUaGlzIGRyaXZlciB3YXMgd3JpdHRlbiB0byB1c2UgUENJIG1lbW9yeSBzcGFjZS4gU29tZSBlYXJseSB2ZXJzaW9ucwogICAgb2YgdGhlIFJoaW5lIG1heSBvbmx5IHdvcmsgY29ycmVjdGx5IHdpdGggSS9PIHNwYWNlIGFjY2Vzc2VzLiAqLwpAQCAtNTg5LDcgKzU5MCw3IEBACiAJd29ya19kb25lID0gcmhpbmVfcngoZGV2LCBidWRnZXQpOwogCiAJaWYgKHdvcmtfZG9uZSA8IGJ1ZGdldCkgewotCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAogCQlpb3dyaXRlMTYoSW50clJ4RG9uZSB8IEludHJSeEVyciB8IEludHJSeEVtcHR5fCBJbnRyUnhPdmVyZmxvdyB8CiAJCQkgIEludHJSeERyb3BwZWQgfCBJbnRyUnhOb0J1ZiB8IEludHJUeEFib3J0ZWQgfApAQCAtMTMxOSw3ICsxMzIwLDcgQEAKIAkJCQkgIEludHJQQ0lFcnIgfCBJbnRyU3RhdHNNYXggfCBJbnRyTGlua0NoYW5nZSwKIAkJCQkgIGlvYWRkciArIEludHJFbmFibGUpOwogCi0JCQluZXRpZl9yeF9zY2hlZHVsZSgmcnAtPm5hcGkpOworCQkJbmFwaV9zY2hlZHVsZSgmcnAtPm5hcGkpOwogCQl9CiAKIAkJaWYgKGludHJfc3RhdHVzICYgKEludHJUeEVyclN1bW1hcnkgfCBJbnRyVHhEb25lKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdmlhLXZlbG9jaXR5LmggYi9kcml2ZXJzL25ldC92aWEtdmVsb2NpdHkuaAppbmRleCAyOWEzMzA5Li5lYTQzZTE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92aWEtdmVsb2NpdHkuaAorKysgYi9kcml2ZXJzL25ldC92aWEtdmVsb2NpdHkuaApAQCAtMTgzLDcgKzE4Myw3IEBACiB9OwogCiBlbnVtIHsKLQlSWF9JTlRFTiA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHg4MDAwKQorCVJYX0lOVEVOID0gY3B1X3RvX2xlMTYoMHg4MDAwKQogfTsKIAogc3RydWN0IHJ4X2Rlc2MgewpAQCAtMjEwLDcgKzIxMCw3IEBACiB9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CiAKIGVudW0gewotCVREX1FVRVVFID0gX19jb25zdGFudF9jcHVfdG9fbGUxNigweDgwMDApCisJVERfUVVFVUUgPSBjcHVfdG9fbGUxNigweDgwMDApCiB9OwogCiBzdHJ1Y3QgdGRfYnVmIHsKQEAgLTI0Miw3ICsyNDIsNyBAQAogCiBlbnVtICB2ZWxvY2l0eV9vd25lciB7CiAJT1dORURfQllfSE9TVCA9IDAsCi0JT1dORURfQllfTklDID0gX19jb25zdGFudF9jcHVfdG9fbGUxNigweDgwMDApCisJT1dORURfQllfTklDID0gY3B1X3RvX2xlMTYoMHg4MDAwKQogfTsKIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMgYi9kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMKaW5kZXggZTY3ZDE2Yy4uYTZmMWUxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdmlydGlvX25ldC5jCisrKyBiL2RyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYwpAQCAtMzcsMTIgKzM3LDE1IEBACiAjZGVmaW5lIE1BWF9QQUNLRVRfTEVOIChFVEhfSExFTiArIFZMQU5fSExFTiArIEVUSF9EQVRBX0xFTikKICNkZWZpbmUgR09PRF9DT1BZX0xFTgkxMjgKIAorI2RlZmluZSBWSVJUTkVUX1NFTkRfQ09NTUFORF9TR19NQVggICAgMgorCiBzdHJ1Y3QgdmlydG5ldF9pbmZvCiB7CiAJc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXY7Ci0Jc3RydWN0IHZpcnRxdWV1ZSAqcnZxLCAqc3ZxOworCXN0cnVjdCB2aXJ0cXVldWUgKnJ2cSwgKnN2cSwgKmN2cTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBuYXBpX3N0cnVjdCBuYXBpOworCXVuc2lnbmVkIGludCBzdGF0dXM7CiAKIAkvKiBUaGUgc2tiIHdlIGNvdWxkbid0IHNlbmQgYmVjYXVzZSBidWZmZXJzIHdlcmUgZnVsbC4gKi8KIAlzdHJ1Y3Qgc2tfYnVmZiAqbGFzdF94bWl0X3NrYjsKQEAgLTM3NSw5ICszNzgsOSBAQAogewogCXN0cnVjdCB2aXJ0bmV0X2luZm8gKnZpID0gcnZxLT52ZGV2LT5wcml2OwogCS8qIFNjaGVkdWxlIE5BUEksIFN1cHByZXNzIGZ1cnRoZXIgaW50ZXJydXB0cyBpZiBzdWNjZXNzZnVsLiAqLwotCWlmIChuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKCZ2aS0+bmFwaSkpIHsKKwlpZiAobmFwaV9zY2hlZHVsZV9wcmVwKCZ2aS0+bmFwaSkpIHsKIAkJcnZxLT52cV9vcHMtPmRpc2FibGVfY2IocnZxKTsKLQkJX19uZXRpZl9yeF9zY2hlZHVsZSgmdmktPm5hcGkpOworCQlfX25hcGlfc2NoZWR1bGUoJnZpLT5uYXBpKTsKIAl9CiB9CiAKQEAgLTQwMywxMSArNDA2LDExIEBACiAKIAkvKiBPdXQgb2YgcGFja2V0cz8gKi8KIAlpZiAocmVjZWl2ZWQgPCBidWRnZXQpIHsKLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CiAJCWlmICh1bmxpa2VseSghdmktPnJ2cS0+dnFfb3BzLT5lbmFibGVfY2IodmktPnJ2cSkpCiAJCSAgICAmJiBuYXBpX3NjaGVkdWxlX3ByZXAobmFwaSkpIHsKIAkJCXZpLT5ydnEtPnZxX29wcy0+ZGlzYWJsZV9jYih2aS0+cnZxKTsKLQkJCV9fbmV0aWZfcnhfc2NoZWR1bGUobmFwaSk7CisJCQlfX25hcGlfc2NoZWR1bGUobmFwaSk7CiAJCQlnb3RvIGFnYWluOwogCQl9CiAJfQpAQCAtNTYyLDYgKzU2NSwyMiBAQAogCWdvdG8gZG9uZTsKIH0KIAorc3RhdGljIGludCB2aXJ0bmV0X3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpwKQoreworCXN0cnVjdCB2aXJ0bmV0X2luZm8gKnZpID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldiA9IHZpLT52ZGV2OworCWludCByZXQ7CisKKwlyZXQgPSBldGhfbWFjX2FkZHIoZGV2LCBwKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJdmRldi0+Y29uZmlnLT5zZXQodmRldiwgb2Zmc2V0b2Yoc3RydWN0IHZpcnRpb19uZXRfY29uZmlnLCBtYWMpLAorCQkJICBkZXYtPmRldl9hZGRyLCBkZXYtPmFkZHJfbGVuKTsKKworCXJldHVybiAwOworfQorCiAjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKIHN0YXRpYyB2b2lkIHZpcnRuZXRfbmV0cG9sbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewpAQCAtNTgxLDEzICs2MDAsNjAgQEAKIAkgKiB3b24ndCBnZXQgYW5vdGhlciBpbnRlcnJ1cHQsIHNvIHByb2Nlc3MgYW55IG91dHN0YW5kaW5nIHBhY2tldHMKIAkgKiBub3cuICB2aXJ0bmV0X3BvbGwgd2FudHMgcmUtZW5hYmxlIHRoZSBxdWV1ZSwgc28gd2UgZGlzYWJsZSBoZXJlLgogCSAqIFdlIHN5bmNocm9uaXplIGFnYWluc3QgaW50ZXJydXB0cyB2aWEgTkFQSV9TVEFURV9TQ0hFRCAqLwotCWlmIChuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKCZ2aS0+bmFwaSkpIHsKKwlpZiAobmFwaV9zY2hlZHVsZV9wcmVwKCZ2aS0+bmFwaSkpIHsKIAkJdmktPnJ2cS0+dnFfb3BzLT5kaXNhYmxlX2NiKHZpLT5ydnEpOwotCQlfX25ldGlmX3J4X3NjaGVkdWxlKCZ2aS0+bmFwaSk7CisJCV9fbmFwaV9zY2hlZHVsZSgmdmktPm5hcGkpOwogCX0KIAlyZXR1cm4gMDsKIH0KIAorLyoKKyAqIFNlbmQgY29tbWFuZCB2aWEgdGhlIGNvbnRyb2wgdmlydHF1ZXVlIGFuZCBjaGVjayBzdGF0dXMuICBDb21tYW5kcworICogc3VwcG9ydGVkIGJ5IHRoZSBoeXBlcnZpc29yLCBhcyBpbmRpY2F0ZWQgYnkgZmVhdHVyZSBiaXRzLCBzaG91bGQKKyAqIG5ldmVyIGZhaWwgdW5sZXNzIGltcHJvcGVybHkgZm9ybWF0ZWQuCisgKi8KK3N0YXRpYyBib29sIHZpcnRuZXRfc2VuZF9jb21tYW5kKHN0cnVjdCB2aXJ0bmV0X2luZm8gKnZpLCB1OCBjbGFzcywgdTggY21kLAorCQkJCSBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmRhdGEsIGludCBvdXQsIGludCBpbikKK3sKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dbVklSVE5FVF9TRU5EX0NPTU1BTkRfU0dfTUFYICsgMl07CisJc3RydWN0IHZpcnRpb19uZXRfY3RybF9oZHIgY3RybDsKKwl2aXJ0aW9fbmV0X2N0cmxfYWNrIHN0YXR1cyA9IH4wOworCXVuc2lnbmVkIGludCB0bXA7CisKKwlpZiAoIXZpcnRpb19oYXNfZmVhdHVyZSh2aS0+dmRldiwgVklSVElPX05FVF9GX0NUUkxfVlEpKSB7CisJCUJVRygpOyAgLyogQ2FsbGVyIHNob3VsZCBrbm93IGJldHRlciAqLworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJQlVHX09OKG91dCArIGluID4gVklSVE5FVF9TRU5EX0NPTU1BTkRfU0dfTUFYKTsKKworCW91dCsrOyAvKiBBZGQgaGVhZGVyICovCisJaW4rKzsgLyogQWRkIHJldHVybiBzdGF0dXMgKi8KKworCWN0cmwuY2xhc3MgPSBjbGFzczsKKwljdHJsLmNtZCA9IGNtZDsKKworCXNnX2luaXRfdGFibGUoc2csIG91dCArIGluKTsKKworCXNnX3NldF9idWYoJnNnWzBdLCAmY3RybCwgc2l6ZW9mKGN0cmwpKTsKKwltZW1jcHkoJnNnWzFdLCBkYXRhLCBzaXplb2Yoc3RydWN0IHNjYXR0ZXJsaXN0KSAqIChvdXQgKyBpbiAtIDIpKTsKKwlzZ19zZXRfYnVmKCZzZ1tvdXQgKyBpbiAtIDFdLCAmc3RhdHVzLCBzaXplb2Yoc3RhdHVzKSk7CisKKwlpZiAodmktPmN2cS0+dnFfb3BzLT5hZGRfYnVmKHZpLT5jdnEsIHNnLCBvdXQsIGluLCB2aSkgIT0gMCkKKwkJQlVHKCk7CisKKwl2aS0+Y3ZxLT52cV9vcHMtPmtpY2sodmktPmN2cSk7CisKKwkvKgorCSAqIFNwaW4gZm9yIGEgcmVzcG9uc2UsIHRoZSBraWNrIGNhdXNlcyBhbiBpb3BvcnQgd3JpdGUsIHRyYXBwaW5nCisJICogaW50byB0aGUgaHlwZXJ2aXNvciwgc28gdGhlIHJlcXVlc3Qgc2hvdWxkIGJlIGhhbmRsZWQgaW1tZWRpYXRlbHkuCisJICovCisJd2hpbGUgKCF2aS0+Y3ZxLT52cV9vcHMtPmdldF9idWYodmktPmN2cSwgJnRtcCkpCisJCWNwdV9yZWxheCgpOworCisJcmV0dXJuIHN0YXR1cyA9PSBWSVJUSU9fTkVUX09LOworfQorCiBzdGF0aWMgaW50IHZpcnRuZXRfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgdmlydG5ldF9pbmZvICp2aSA9IG5ldGRldl9wcml2KGRldik7CkBAIC02MDgsNiArNjc0LDk5IEBACiAJcmV0dXJuIGV0aHRvb2xfb3Bfc2V0X3R4X2h3X2NzdW0oZGV2LCBkYXRhKTsKIH0KIAorc3RhdGljIHZvaWQgdmlydG5ldF9zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCB2aXJ0bmV0X2luZm8gKnZpID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dbMl07CisJdTggcHJvbWlzYywgYWxsbXVsdGk7CisJc3RydWN0IHZpcnRpb19uZXRfY3RybF9tYWMgKm1hY19kYXRhOworCXN0cnVjdCBkZXZfYWRkcl9saXN0ICphZGRyOworCXZvaWQgKmJ1ZjsKKwlpbnQgaTsKKworCS8qIFdlIGNhbid0IGR5bmFtaWNhbHkgc2V0IG5kb19zZXRfcnhfbW9kZSwgc28gcmV0dXJuIGdyYWNlZnVsbHkgKi8KKwlpZiAoIXZpcnRpb19oYXNfZmVhdHVyZSh2aS0+dmRldiwgVklSVElPX05FVF9GX0NUUkxfUlgpKQorCQlyZXR1cm47CisKKwlwcm9taXNjID0gKChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpICE9IDApOworCWFsbG11bHRpID0gKChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSAhPSAwKTsKKworCXNnX3NldF9idWYoc2csICZwcm9taXNjLCBzaXplb2YocHJvbWlzYykpOworCisJaWYgKCF2aXJ0bmV0X3NlbmRfY29tbWFuZCh2aSwgVklSVElPX05FVF9DVFJMX1JYLAorCQkJCSAgVklSVElPX05FVF9DVFJMX1JYX1BST01JU0MsCisJCQkJICBzZywgMSwgMCkpCisJCWRldl93YXJuKCZkZXYtPmRldiwgIkZhaWxlZCB0byAlc2FibGUgcHJvbWlzYyBtb2RlLlxuIiwKKwkJCSBwcm9taXNjID8gImVuIiA6ICJkaXMiKTsKKworCXNnX3NldF9idWYoc2csICZhbGxtdWx0aSwgc2l6ZW9mKGFsbG11bHRpKSk7CisKKwlpZiAoIXZpcnRuZXRfc2VuZF9jb21tYW5kKHZpLCBWSVJUSU9fTkVUX0NUUkxfUlgsCisJCQkJICBWSVJUSU9fTkVUX0NUUkxfUlhfQUxMTVVMVEksCisJCQkJICBzZywgMSwgMCkpCisJCWRldl93YXJuKCZkZXYtPmRldiwgIkZhaWxlZCB0byAlc2FibGUgYWxsbXVsdGkgbW9kZS5cbiIsCisJCQkgYWxsbXVsdGkgPyAiZW4iIDogImRpcyIpOworCisJLyogTUFDIGZpbHRlciAtIHVzZSBvbmUgYnVmZmVyIGZvciBib3RoIGxpc3RzICovCisJbWFjX2RhdGEgPSBidWYgPSBremFsbG9jKCgoZGV2LT51Y19jb3VudCArIGRldi0+bWNfY291bnQpICogRVRIX0FMRU4pICsKKwkJCQkgKDIgKiBzaXplb2YobWFjX2RhdGEtPmVudHJpZXMpKSwgR0ZQX0FUT01JQyk7CisJaWYgKCFidWYpIHsKKwkJZGV2X3dhcm4oJmRldi0+ZGV2LCAiTm8gbWVtb3J5IGZvciBNQUMgYWRkcmVzcyBidWZmZXJcbiIpOworCQlyZXR1cm47CisJfQorCisJLyogU3RvcmUgdGhlIHVuaWNhc3QgbGlzdCBhbmQgY291bnQgaW4gdGhlIGZyb250IG9mIHRoZSBidWZmZXIgKi8KKwltYWNfZGF0YS0+ZW50cmllcyA9IGRldi0+dWNfY291bnQ7CisJYWRkciA9IGRldi0+dWNfbGlzdDsKKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT51Y19jb3VudDsgaSsrLCBhZGRyID0gYWRkci0+bmV4dCkKKwkJbWVtY3B5KCZtYWNfZGF0YS0+bWFjc1tpXVswXSwgYWRkci0+ZGFfYWRkciwgRVRIX0FMRU4pOworCisJc2dfc2V0X2J1Zigmc2dbMF0sIG1hY19kYXRhLAorCQkgICBzaXplb2YobWFjX2RhdGEtPmVudHJpZXMpICsgKGRldi0+dWNfY291bnQgKiBFVEhfQUxFTikpOworCisJLyogbXVsdGljYXN0IGxpc3QgYW5kIGNvdW50IGZpbGwgdGhlIGVuZCAqLworCW1hY19kYXRhID0gKHZvaWQgKikmbWFjX2RhdGEtPm1hY3NbZGV2LT51Y19jb3VudF1bMF07CisKKwltYWNfZGF0YS0+ZW50cmllcyA9IGRldi0+bWNfY291bnQ7CisJYWRkciA9IGRldi0+bWNfbGlzdDsKKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT5tY19jb3VudDsgaSsrLCBhZGRyID0gYWRkci0+bmV4dCkKKwkJbWVtY3B5KCZtYWNfZGF0YS0+bWFjc1tpXVswXSwgYWRkci0+ZGFfYWRkciwgRVRIX0FMRU4pOworCisJc2dfc2V0X2J1Zigmc2dbMV0sIG1hY19kYXRhLAorCQkgICBzaXplb2YobWFjX2RhdGEtPmVudHJpZXMpICsgKGRldi0+bWNfY291bnQgKiBFVEhfQUxFTikpOworCisJaWYgKCF2aXJ0bmV0X3NlbmRfY29tbWFuZCh2aSwgVklSVElPX05FVF9DVFJMX01BQywKKwkJCQkgIFZJUlRJT19ORVRfQ1RSTF9NQUNfVEFCTEVfU0VULAorCQkJCSAgc2csIDIsIDApKQorCQlkZXZfd2FybigmZGV2LT5kZXYsICJGYWlsZWQgdG8gc2V0IE1BQyBmaXRsZXIgdGFibGUuXG4iKTsKKworCWtmcmVlKGJ1Zik7Cit9CisKK3N0YXRpYyB2b2lkIHZpcm5ldF92bGFuX3J4X2FkZF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IHZpZCkKK3sKKwlzdHJ1Y3QgdmlydG5ldF9pbmZvICp2aSA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHNjYXR0ZXJsaXN0IHNnOworCisJc2dfc2V0X2J1Zigmc2csICZ2aWQsIHNpemVvZih2aWQpKTsKKworCWlmICghdmlydG5ldF9zZW5kX2NvbW1hbmQodmksIFZJUlRJT19ORVRfQ1RSTF9WTEFOLAorCQkJCSAgVklSVElPX05FVF9DVFJMX1ZMQU5fQURELCAmc2csIDEsIDApKQorCQlkZXZfd2FybigmZGV2LT5kZXYsICJGYWlsZWQgdG8gYWRkIFZMQU4gSUQgJWQuXG4iLCB2aWQpOworfQorCitzdGF0aWMgdm9pZCB2aXJuZXRfdmxhbl9yeF9raWxsX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgdmlkKQoreworCXN0cnVjdCB2aXJ0bmV0X2luZm8gKnZpID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2c7CisKKwlzZ19zZXRfYnVmKCZzZywgJnZpZCwgc2l6ZW9mKHZpZCkpOworCisJaWYgKCF2aXJ0bmV0X3NlbmRfY29tbWFuZCh2aSwgVklSVElPX05FVF9DVFJMX1ZMQU4sCisJCQkJICBWSVJUSU9fTkVUX0NUUkxfVkxBTl9ERUwsICZzZywgMSwgMCkpCisJCWRldl93YXJuKCZkZXYtPmRldiwgIkZhaWxlZCB0byBraWxsIFZMQU4gSUQgJWQuXG4iLCB2aWQpOworfQorCiBzdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIHZpcnRuZXRfZXRodG9vbF9vcHMgPSB7CiAJLnNldF90eF9jc3VtID0gdmlydG5ldF9zZXRfdHhfY3N1bSwKIAkuc2V0X3NnID0gZXRodG9vbF9vcF9zZXRfc2csCkBAIC02MzEsMTMgKzc5MCw1MSBAQAogCS5uZG9fc3RvcCAgIAkgICAgID0gdmlydG5ldF9jbG9zZSwKIAkubmRvX3N0YXJ0X3htaXQgICAgICA9IHN0YXJ0X3htaXQsCiAJLm5kb192YWxpZGF0ZV9hZGRyICAgPSBldGhfdmFsaWRhdGVfYWRkciwKLQkubmRvX3NldF9tYWNfYWRkcmVzcyA9IGV0aF9tYWNfYWRkciwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyA9IHZpcnRuZXRfc2V0X21hY19hZGRyZXNzLAorCS5uZG9fc2V0X3J4X21vZGUgICAgID0gdmlydG5ldF9zZXRfcnhfbW9kZSwKIAkubmRvX2NoYW5nZV9tdHUJICAgICA9IHZpcnRuZXRfY2hhbmdlX210dSwKKwkubmRvX3ZsYW5fcnhfYWRkX3ZpZCA9IHZpcm5ldF92bGFuX3J4X2FkZF92aWQsCisJLm5kb192bGFuX3J4X2tpbGxfdmlkID0gdmlybmV0X3ZsYW5fcnhfa2lsbF92aWQsCiAjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKIAkubmRvX3BvbGxfY29udHJvbGxlciA9IHZpcnRuZXRfbmV0cG9sbCwKICNlbmRpZgogfTsKIAorc3RhdGljIHZvaWQgdmlydG5ldF91cGRhdGVfc3RhdHVzKHN0cnVjdCB2aXJ0bmV0X2luZm8gKnZpKQoreworCXUxNiB2OworCisJaWYgKCF2aXJ0aW9faGFzX2ZlYXR1cmUodmktPnZkZXYsIFZJUlRJT19ORVRfRl9TVEFUVVMpKQorCQlyZXR1cm47CisKKwl2aS0+dmRldi0+Y29uZmlnLT5nZXQodmktPnZkZXYsCisJCQkgICAgICBvZmZzZXRvZihzdHJ1Y3QgdmlydGlvX25ldF9jb25maWcsIHN0YXR1cyksCisJCQkgICAgICAmdiwgc2l6ZW9mKHYpKTsKKworCS8qIElnbm9yZSB1bmtub3duIChmdXR1cmUpIHN0YXR1cyBiaXRzICovCisJdiAmPSBWSVJUSU9fTkVUX1NfTElOS19VUDsKKworCWlmICh2aS0+c3RhdHVzID09IHYpCisJCXJldHVybjsKKworCXZpLT5zdGF0dXMgPSB2OworCisJaWYgKHZpLT5zdGF0dXMgJiBWSVJUSU9fTkVUX1NfTElOS19VUCkgeworCQluZXRpZl9jYXJyaWVyX29uKHZpLT5kZXYpOworCQluZXRpZl93YWtlX3F1ZXVlKHZpLT5kZXYpOworCX0gZWxzZSB7CisJCW5ldGlmX2NhcnJpZXJfb2ZmKHZpLT5kZXYpOworCQluZXRpZl9zdG9wX3F1ZXVlKHZpLT5kZXYpOworCX0KK30KKworc3RhdGljIHZvaWQgdmlydG5ldF9jb25maWdfY2hhbmdlZChzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldikKK3sKKwlzdHJ1Y3QgdmlydG5ldF9pbmZvICp2aSA9IHZkZXYtPnByaXY7CisKKwl2aXJ0bmV0X3VwZGF0ZV9zdGF0dXModmkpOworfQorCiBzdGF0aWMgaW50IHZpcnRuZXRfcHJvYmUoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCiB7CiAJaW50IGVycjsKQEAgLTY3OSw4ICs4NzYsMTEgQEAKIAkJdmRldi0+Y29uZmlnLT5nZXQodmRldiwKIAkJCQkgIG9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fbmV0X2NvbmZpZywgbWFjKSwKIAkJCQkgIGRldi0+ZGV2X2FkZHIsIGRldi0+YWRkcl9sZW4pOwotCX0gZWxzZQorCX0gZWxzZSB7CiAJCXJhbmRvbV9ldGhlcl9hZGRyKGRldi0+ZGV2X2FkZHIpOworCQl2ZGV2LT5jb25maWctPnNldCh2ZGV2LCBvZmZzZXRvZihzdHJ1Y3QgdmlydGlvX25ldF9jb25maWcsIG1hYyksCisJCQkJICBkZXYtPmRldl9hZGRyLCBkZXYtPmFkZHJfbGVuKTsKKwl9CiAKIAkvKiBTZXQgdXAgb3VyIGRldmljZS1zcGVjaWZpYyBpbmZvcm1hdGlvbiAqLwogCXZpID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTcxNiw2ICs5MTYsMTcgQEAKIAkJZ290byBmcmVlX3JlY3Y7CiAJfQogCisJaWYgKHZpcnRpb19oYXNfZmVhdHVyZSh2aS0+dmRldiwgVklSVElPX05FVF9GX0NUUkxfVlEpKSB7CisJCXZpLT5jdnEgPSB2ZGV2LT5jb25maWctPmZpbmRfdnEodmRldiwgMiwgTlVMTCk7CisJCWlmIChJU19FUlIodmktPmN2cSkpIHsKKwkJCWVyciA9IFBUUl9FUlIodmktPnN2cSk7CisJCQlnb3RvIGZyZWVfc2VuZDsKKwkJfQorCisJCWlmICh2aXJ0aW9faGFzX2ZlYXR1cmUodmktPnZkZXYsIFZJUlRJT19ORVRfRl9DVFJMX1ZMQU4pKQorCQkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hXX1ZMQU5fRklMVEVSOworCX0KKwogCS8qIEluaXRpYWxpemUgb3VyIGVtcHR5IHJlY2VpdmUgYW5kIHNlbmQgcXVldWVzLiAqLwogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnZpLT5yZWN2KTsKIAlza2JfcXVldWVfaGVhZF9pbml0KCZ2aS0+c2VuZCk7CkBAIC03MjgsNyArOTM5LDcgQEAKIAllcnIgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAlpZiAoZXJyKSB7CiAJCXByX2RlYnVnKCJ2aXJ0aW9fbmV0OiByZWdpc3RlcmluZyBkZXZpY2UgZmFpbGVkXG4iKTsKLQkJZ290byBmcmVlX3NlbmQ7CisJCWdvdG8gZnJlZV9jdHJsOwogCX0KIAogCS8qIExhc3Qgb2YgYWxsLCBzZXQgdXAgc29tZSByZWNlaXZlIGJ1ZmZlcnMuICovCkBAIC03NDAsNiArOTUxLDggQEAKIAkJZ290byB1bnJlZ2lzdGVyOwogCX0KIAorCXZpLT5zdGF0dXMgPSBWSVJUSU9fTkVUX1NfTElOS19VUDsKKwl2aXJ0bmV0X3VwZGF0ZV9zdGF0dXModmkpOwogCW5ldGlmX2NhcnJpZXJfb24oZGV2KTsKIAogCXByX2RlYnVnKCJ2aXJ0bmV0OiByZWdpc3RlcmVkIGRldmljZSAlc1xuIiwgZGV2LT5uYW1lKTsKQEAgLTc0Nyw2ICs5NjAsOSBAQAogCiB1bnJlZ2lzdGVyOgogCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CitmcmVlX2N0cmw6CisJaWYgKHZpcnRpb19oYXNfZmVhdHVyZSh2aS0+dmRldiwgVklSVElPX05FVF9GX0NUUkxfVlEpKQorCQl2ZGV2LT5jb25maWctPmRlbF92cSh2aS0+Y3ZxKTsKIGZyZWVfc2VuZDoKIAl2ZGV2LT5jb25maWctPmRlbF92cSh2aS0+c3ZxKTsKIGZyZWVfcmVjdjoKQEAgLTc3OCw2ICs5OTQsOCBAQAogCiAJdmRldi0+Y29uZmlnLT5kZWxfdnEodmktPnN2cSk7CiAJdmRldi0+Y29uZmlnLT5kZWxfdnEodmktPnJ2cSk7CisJaWYgKHZpcnRpb19oYXNfZmVhdHVyZSh2aS0+dmRldiwgVklSVElPX05FVF9GX0NUUkxfVlEpKQorCQl2ZGV2LT5jb25maWctPmRlbF92cSh2aS0+Y3ZxKTsKIAl1bnJlZ2lzdGVyX25ldGRldih2aS0+ZGV2KTsKIAogCXdoaWxlICh2aS0+cGFnZXMpCkBAIC03OTcsNyArMTAxNSw4IEBACiAJVklSVElPX05FVF9GX0hPU1RfVFNPNCwgVklSVElPX05FVF9GX0hPU1RfVUZPLCBWSVJUSU9fTkVUX0ZfSE9TVF9UU082LAogCVZJUlRJT19ORVRfRl9IT1NUX0VDTiwgVklSVElPX05FVF9GX0dVRVNUX1RTTzQsIFZJUlRJT19ORVRfRl9HVUVTVF9UU082LAogCVZJUlRJT19ORVRfRl9HVUVTVF9FQ04sIC8qIFdlIGRvbid0IHlldCBoYW5kbGUgVUZPIGlucHV0LiAqLwotCVZJUlRJT19ORVRfRl9NUkdfUlhCVUYsCisJVklSVElPX05FVF9GX01SR19SWEJVRiwgVklSVElPX05FVF9GX1NUQVRVUywgVklSVElPX05FVF9GX0NUUkxfVlEsCisJVklSVElPX05FVF9GX0NUUkxfUlgsIFZJUlRJT19ORVRfRl9DVFJMX1ZMQU4sCiAJVklSVElPX0ZfTk9USUZZX09OX0VNUFRZLAogfTsKIApAQCAtODA5LDYgKzEwMjgsNyBAQAogCS5pZF90YWJsZSA9CWlkX3RhYmxlLAogCS5wcm9iZSA9CXZpcnRuZXRfcHJvYmUsCiAJLnJlbW92ZSA9CV9fZGV2ZXhpdF9wKHZpcnRuZXRfcmVtb3ZlKSwKKwkuY29uZmlnX2NoYW5nZWQgPSB2aXJ0bmV0X2NvbmZpZ19jaGFuZ2VkLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2MxMDEuYyBiL2RyaXZlcnMvbmV0L3dhbi9jMTAxLmMKaW5kZXggYjQ2ODk3OS4uOTY5M2IwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2MxMDEuYworKysgYi9kcml2ZXJzL25ldC93YW4vYzEwMS5jCkBAIC0yOTYsNyArMjk2LDEzIEBACiAJa2ZyZWUoY2FyZCk7CiB9CiAKLQorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBjMTAxX29wcyA9IHsKKwkubmRvX29wZW4gICAgICAgPSBjMTAxX29wZW4sCisJLm5kb19zdG9wICAgICAgID0gYzEwMV9jbG9zZSwKKwkubmRvX2NoYW5nZV9tdHUgPSBoZGxjX2NoYW5nZV9tdHUsCisJLm5kb19zdGFydF94bWl0ID0gaGRsY19zdGFydF94bWl0LAorCS5uZG9fZG9faW9jdGwgICA9IGMxMDFfaW9jdGwsCit9OwogCiBzdGF0aWMgaW50IF9faW5pdCBjMTAxX3J1bih1bnNpZ25lZCBsb25nIGlycSwgdW5zaWduZWQgbG9uZyB3aW5iYXNlKQogewpAQCAtMzY3LDkgKzM3Myw3IEBACiAJZGV2LT5tZW1fc3RhcnQgPSB3aW5iYXNlOwogCWRldi0+bWVtX2VuZCA9IHdpbmJhc2UgKyBDMTAxX01BUFBFRF9SQU1fU0laRSAtIDE7CiAJZGV2LT50eF9xdWV1ZV9sZW4gPSA1MDsKLQlkZXYtPmRvX2lvY3RsID0gYzEwMV9pb2N0bDsKLQlkZXYtPm9wZW4gPSBjMTAxX29wZW47Ci0JZGV2LT5zdG9wID0gYzEwMV9jbG9zZTsKKwlkZXYtPm5ldGRldl9vcHMgPSAmYzEwMV9vcHM7CiAJaGRsYy0+YXR0YWNoID0gc2NhX2F0dGFjaDsKIAloZGxjLT54bWl0ID0gc2NhX3htaXQ7CiAJY2FyZC0+c2V0dGluZ3MuY2xvY2tfdHlwZSA9IENMT0NLX0VYVDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9jb3NhLmMgYi9kcml2ZXJzL25ldC93YW4vY29zYS5jCmluZGV4IGQ4MGI3MmUuLjYxNTgxZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9jb3NhLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2Nvc2EuYwpAQCAtNDI3LDYgKzQyNywxNSBAQAogfQogbW9kdWxlX2V4aXQoY29zYV9leGl0KTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBjb3NhX29wcyA9IHsKKwkubmRvX29wZW4gICAgICAgPSBjb3NhX25ldF9vcGVuLAorCS5uZG9fc3RvcCAgICAgICA9IGNvc2FfbmV0X2Nsb3NlLAorCS5uZG9fY2hhbmdlX210dSA9IGhkbGNfY2hhbmdlX210dSwKKwkubmRvX3N0YXJ0X3htaXQgPSBoZGxjX3N0YXJ0X3htaXQsCisJLm5kb19kb19pb2N0bCAgID0gY29zYV9uZXRfaW9jdGwsCisJLm5kb190eF90aW1lb3V0ID0gY29zYV9uZXRfdGltZW91dCwKK307CisKIHN0YXRpYyBpbnQgY29zYV9wcm9iZShpbnQgYmFzZSwgaW50IGlycSwgaW50IGRtYSkKIHsKIAlzdHJ1Y3QgY29zYV9kYXRhICpjb3NhID0gY29zYV9jYXJkcytucl9jYXJkczsKQEAgLTU3NSwxMCArNTg0LDcgQEAKIAkJfQogCQlkZXZfdG9faGRsYyhjaGFuLT5uZXRkZXYpLT5hdHRhY2ggPSBjb3NhX25ldF9hdHRhY2g7CiAJCWRldl90b19oZGxjKGNoYW4tPm5ldGRldiktPnhtaXQgPSBjb3NhX25ldF90eDsKLQkJY2hhbi0+bmV0ZGV2LT5vcGVuID0gY29zYV9uZXRfb3BlbjsKLQkJY2hhbi0+bmV0ZGV2LT5zdG9wID0gY29zYV9uZXRfY2xvc2U7Ci0JCWNoYW4tPm5ldGRldi0+ZG9faW9jdGwgPSBjb3NhX25ldF9pb2N0bDsKLQkJY2hhbi0+bmV0ZGV2LT50eF90aW1lb3V0ID0gY29zYV9uZXRfdGltZW91dDsKKwkJY2hhbi0+bmV0ZGV2LT5uZXRkZXZfb3BzID0gJmNvc2Ffb3BzOwogCQljaGFuLT5uZXRkZXYtPndhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVDsKIAkJY2hhbi0+bmV0ZGV2LT5iYXNlX2FkZHIgPSBjaGFuLT5jb3NhLT5kYXRhcmVnOwogCQljaGFuLT5uZXRkZXYtPmlycSA9IGNoYW4tPmNvc2EtPmlycTsKQEAgLTcyNSw4ICs3MzEsNyBAQAogCSAqIFdlIGNhbiBzYWZlbHkgZmFsbCBiYWNrIHRvIG5vbi1kbWEtYWJsZSBtZW1vcnksIGJlY2F1c2Ugd2UgaGF2ZQogCSAqIHRoZSBjb3NhLT5ib3VuY2VidWYgcHJlLWFsbG9jYXRlZC4KIAkgKi8KLQlpZiAoY2hhbi0+cnhfc2tiKQotCQlrZnJlZV9za2IoY2hhbi0+cnhfc2tiKTsKKwlrZnJlZV9za2IoY2hhbi0+cnhfc2tiKTsKIAljaGFuLT5yeF9za2IgPSBkZXZfYWxsb2Nfc2tiKHNpemUpOwogCWlmIChjaGFuLT5yeF9za2IgPT0gTlVMTCkgewogCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiBNZW1vcnkgc3F1ZWV6ZSwgZHJvcHBpbmcgcGFja2V0XG4iLApAQCAtOTkzLDggKzk5OCw4IEBACiBzdGF0aWMgaW50IGNvc2FfZmFzeW5jKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgb24pCiB7CiAgICAgICAgIGludCBwb3J0ID0gaW1pbm9yKGlub2RlKTsKLSAgICAgICAgaW50IHJ2ID0gZmFzeW5jX2hlbHBlcihpbm9kZSwgZmlsZSwgb24sICZmYXN5bmNbcG9ydF0pOwotICAgICAgICByZXR1cm4gcnYgPCAwID8gcnYgOiAwOworCisJcmV0dXJuIGZhc3luY19oZWxwZXIoaW5vZGUsIGZpbGUsIG9uLCAmZmFzeW5jW3BvcnRdKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vY3ljeF94MjUuYyBiL2RyaXZlcnMvbmV0L3dhbi9jeWN4X3gyNS5jCmluZGV4IDVmYTUyOTIuLjM1ZGVhM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9jeWN4X3gyNS5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9jeWN4X3gyNS5jCkBAIC0zNTUsMTIgKzM1NSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIGNhbGxiYWNrIHRvIGluaXRpYWxpemUgZGV2aWNlICovCi1zdGF0aWMgdm9pZCBjeWN4X3gyNV9jaGFuX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JZGV2LT5pbml0ID0gY3ljeF9uZXRkZXZpY2VfaW5pdDsKLX0KLQogLyogQ3JlYXRlIG5ldyBsb2dpY2FsIGNoYW5uZWwuCiAgKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIGJ5IHRoZSByb3V0ZXIgd2hlbiBST1VURVJfSUZORVcgSU9DVEwgaXMgYmVpbmcKICAqIGhhbmRsZWQuCkBAIC00NzYsNiArNDcwLDI3IEBACiAJLnJlYnVpbGQgPSBjeWN4X25ldGRldmljZV9yZWJ1aWxkX2hlYWRlciwKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgY3ljeF9uZXRkZXZfb3BzID0geworCS5uZG9faW5pdAk9IGN5Y3hfbmV0ZGV2aWNlX2luaXQsCisJLm5kb19vcGVuCT0gY3ljeF9uZXRkZXZpY2Vfb3BlbiwKKwkubmRvX3N0b3AJPSBjeWN4X25ldGRldmljZV9zdG9wLAorCS5uZG9fc3RhcnRfeG1pdAk9IGN5Y3hfbmV0ZGV2aWNlX2hhcmRfc3RhcnRfeG1pdCwKKwkubmRvX2dldF9zdGF0cwk9IGN5Y3hfbmV0ZGV2aWNlX2dldF9zdGF0cywKK307CisKK3N0YXRpYyB2b2lkIGN5Y3hfeDI1X2NoYW5fc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwkvKiBJbml0aWFsaXplIGRldmljZSBkcml2ZXIgZW50cnkgcG9pbnRzICovCisJZGV2LT5uZXRkZXZfb3BzCQk9ICZjeWN4X25ldGRldl9vcHM7CisJZGV2LT5oZWFkZXJfb3BzCQk9ICZjeWN4X2hlYWRlcl9vcHM7CisKKwkvKiBJbml0aWFsaXplIG1lZGlhLXNwZWNpZmljIHBhcmFtZXRlcnMgKi8KKwlkZXYtPm10dQkJPSBDWUNYX1gyNV9DSEFOX01UVTsKKwlkZXYtPnR5cGUJCT0gQVJQSFJEX0hXWDI1OwkvKiBBUlAgaC93IHR5cGUgKi8KKwlkZXYtPmhhcmRfaGVhZGVyX2xlbgk9IDA7CQkvKiBtZWRpYSBoZWFkZXIgbGVuZ3RoICovCisJZGV2LT5hZGRyX2xlbgkJPSAwOwkJLyogaGFyZHdhcmUgYWRkcmVzcyBsZW5ndGggKi8KK30KKwogLyogSW5pdGlhbGl6ZSBMaW51eCBuZXR3b3JrIGludGVyZmFjZS4KICAqCiAgKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIG9ubHkgb25jZSBmb3IgZWFjaCBpbnRlcmZhY2UsIGR1cmluZyBMaW51eCBuZXR3b3JrCkBAIC00ODcsMjAgKzUwMiw2IEBACiAJc3RydWN0IGN5Y3hfZGV2aWNlICpjYXJkID0gY2hhbi0+Y2FyZDsKIAlzdHJ1Y3Qgd2FuX2RldmljZSAqd2FuZGV2ID0gJmNhcmQtPndhbmRldjsKIAotCS8qIEluaXRpYWxpemUgZGV2aWNlIGRyaXZlciBlbnRyeSBwb2ludHMgKi8KLQlkZXYtPm9wZW4JCT0gY3ljeF9uZXRkZXZpY2Vfb3BlbjsKLQlkZXYtPnN0b3AJCT0gY3ljeF9uZXRkZXZpY2Vfc3RvcDsKLQlkZXYtPmhlYWRlcl9vcHMJCT0gJmN5Y3hfaGVhZGVyX29wczsKLQotCWRldi0+aGFyZF9zdGFydF94bWl0CT0gY3ljeF9uZXRkZXZpY2VfaGFyZF9zdGFydF94bWl0OwotCWRldi0+Z2V0X3N0YXRzCQk9IGN5Y3hfbmV0ZGV2aWNlX2dldF9zdGF0czsKLQotCS8qIEluaXRpYWxpemUgbWVkaWEtc3BlY2lmaWMgcGFyYW1ldGVycyAqLwotCWRldi0+bXR1CQk9IENZQ1hfWDI1X0NIQU5fTVRVOwotCWRldi0+dHlwZQkJPSBBUlBIUkRfSFdYMjU7CS8qIEFSUCBoL3cgdHlwZSAqLwotCWRldi0+aGFyZF9oZWFkZXJfbGVuCT0gMDsJCS8qIG1lZGlhIGhlYWRlciBsZW5ndGggKi8KLQlkZXYtPmFkZHJfbGVuCQk9IDA7CQkvKiBoYXJkd2FyZSBhZGRyZXNzIGxlbmd0aCAqLwotCiAJaWYgKCFjaGFuLT5zdmMpCiAJCSooX19iZTE2KilkZXYtPmRldl9hZGRyID0gaHRvbnMoY2hhbi0+bGNuKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2RsY2kuYyBiL2RyaXZlcnMvbmV0L3dhbi9kbGNpLmMKaW5kZXggYTI5N2UzZS4uZThkMTU1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2RsY2kuYworKysgYi9kcml2ZXJzL25ldC93YW4vZGxjaS5jCkBAIC0xMTQsNyArMTE0LDcgQEAKIAlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2YoKmhkcikpKSB7CiAJCXByaW50ayhLRVJOX05PVElDRSAiJXM6IGludmFsaWQgZGF0YSBubyBoZWFkZXJcbiIsCiAJCSAgICAgICBkZXYtPm5hbWUpOwotCQlkbHAtPnN0YXRzLnJ4X2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQlrZnJlZV9za2Ioc2tiKTsKIAkJcmV0dXJuOwogCX0KQEAgLTEyNyw3ICsxMjcsNyBAQAogCWlmIChoZHItPmNvbnRyb2wgIT0gRlJBRF9JX1VJKQogCXsKIAkJcHJpbnRrKEtFUk5fTk9USUNFICIlczogSW52YWxpZCBoZWFkZXIgZmxhZyAweCUwMlguXG4iLCBkZXYtPm5hbWUsIGhkci0+Y29udHJvbCk7Ci0JCWRscC0+c3RhdHMucnhfZXJyb3JzKys7CisJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJfQogCWVsc2UKIAkJc3dpdGNoKGhkci0+SVBfTkxQSUQpCkBAIC0xMzYsMTQgKzEzNiwxNCBAQAogCQkJCWlmIChoZHItPk5MUElEICE9IEZSQURfUF9TTkFQKQogCQkJCXsKIAkJCQkJcHJpbnRrKEtFUk5fTk9USUNFICIlczogVW5zdXBwb3J0ZWQgTkxQSUQgMHglMDJYLlxuIiwgZGV2LT5uYW1lLCBoZHItPk5MUElEKTsKLQkJCQkJZGxwLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJCQkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJCQkJYnJlYWs7CiAJCQkJfQogCSAKIAkJCQlpZiAoaGRyLT5PVUlbMF0gKyBoZHItPk9VSVsxXSArIGhkci0+T1VJWzJdICE9IDApCiAJCQkJewogCQkJCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiBVbnN1cHBvcnRlZCBvcmdhbml6YXRpb25hbGx5IHVuaXF1ZSBpZGVudGlmaWVyIDB4JTAyWC0lMDJYLSUwMlguXG4iLCBkZXYtPm5hbWUsIGhkci0+T1VJWzBdLCBoZHItPk9VSVsxXSwgaGRyLT5PVUlbMl0pOwotCQkJCQlkbHAtPnN0YXRzLnJ4X2Vycm9ycysrOworCQkJCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQkJCQlicmVhazsKIAkJCQl9CiAKQEAgLTE2NCwxMiArMTY0LDEyIEBACiAJCQljYXNlIEZSQURfUF9ROTMzOgogCQkJY2FzZSBGUkFEX1BfQ0xOUDoKIAkJCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiBVbnN1cHBvcnRlZCBOTFBJRCAweCUwMlguXG4iLCBkZXYtPm5hbWUsIGhkci0+cGFkKTsKLQkJCQlkbHAtPnN0YXRzLnJ4X2Vycm9ycysrOworCQkJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJCQkJYnJlYWs7CiAKIAkJCWRlZmF1bHQ6CiAJCQkJcHJpbnRrKEtFUk5fTk9USUNFICIlczogSW52YWxpZCBwYWQgYnl0ZSAweCUwMlguXG4iLCBkZXYtPm5hbWUsIGhkci0+cGFkKTsKLQkJCQlkbHAtPnN0YXRzLnJ4X2Vycm9ycysrOworCQkJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJCQkJYnJlYWs7CQkJCQogCQl9CiAKQEAgLTE3OCw5ICsxNzgsOSBAQAogCQkvKiB3ZSd2ZSBzZXQgdXAgdGhlIHByb3RvY29sLCBzbyBkaXNjYXJkIHRoZSBoZWFkZXIgKi8KIAkJc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsKIAkJc2tiX3B1bGwoc2tiLCBoZWFkZXIpOwotCQlkbHAtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOworCQlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOwogCQluZXRpZl9yeChza2IpOwotCQlkbHAtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwkJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CiAJfQogCWVsc2UKIAkJZGV2X2tmcmVlX3NrYihza2IpOwpAQCAtMjAwLDE5ICsyMDAsMTkgQEAKIAogCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAkKLQlyZXQgPSBkbHAtPnNsYXZlLT5oYXJkX3N0YXJ0X3htaXQoc2tiLCBkbHAtPnNsYXZlKTsKKwlyZXQgPSBkbHAtPnNsYXZlLT5uZXRkZXZfb3BzLT5uZG9fc3RhcnRfeG1pdChza2IsIGRscC0+c2xhdmUpOwogCXN3aXRjaCAocmV0KQogCXsKIAkJY2FzZSBETENJX1JFVF9PSzoKLQkJCWRscC0+c3RhdHMudHhfcGFja2V0cysrOworCQkJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CiAJCQlyZXQgPSAwOwogCQkJYnJlYWs7CiAJCQljYXNlIERMQ0lfUkVUX0VSUjoKLQkJCWRscC0+c3RhdHMudHhfZXJyb3JzKys7CisJCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOwogCQkJcmV0ID0gMDsKIAkJCWJyZWFrOwogCQkJY2FzZSBETENJX1JFVF9EUk9QOgotCQkJZGxwLT5zdGF0cy50eF9kcm9wcGVkKys7CisJCQlkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJCXJldCA9IDE7CiAJCQlicmVhazsKIAl9CkBAIC0yOTUsMTEgKzI5NSw5IEBACiAKIHN0YXRpYyBpbnQgZGxjaV9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KQogewotCXN0cnVjdCBkbGNpX2xvY2FsICpkbHA7CisJc3RydWN0IGRsY2lfbG9jYWwgKmRscCA9IG5ldGRldl9wcml2KGRldik7CiAKLQlkbHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JcmV0dXJuKCgqZGxwLT5zbGF2ZS0+Y2hhbmdlX210dSkoZGxwLT5zbGF2ZSwgbmV3X210dSkpOworCXJldHVybiBkZXZfc2V0X210dShkbHAtPnNsYXZlLCBuZXdfbXR1KTsKIH0KIAogc3RhdGljIGludCBkbGNpX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTM0MiwxNSArMzQwLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpkbGNpX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBkbGNpX2xvY2FsICpkbHA7Ci0KLQlkbHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JcmV0dXJuKCZkbHAtPnN0YXRzKTsKLX0KLQogc3RhdGljIGludCBkbGNpX2FkZChzdHJ1Y3QgZGxjaV9hZGQgKmRsY2kpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UJKm1hc3RlciwgKnNsYXZlOwpAQCAtNDg4LDE4ICs0NzcsMjEgQEAKIAkuY3JlYXRlCT0gZGxjaV9oZWFkZXIsCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGRsY2lfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JPSBkbGNpX29wZW4sCisJLm5kb19zdG9wCT0gZGxjaV9jbG9zZSwKKwkubmRvX2RvX2lvY3RsCT0gZGxjaV9kZXZfaW9jdGwsCisJLm5kb19zdGFydF94bWl0CT0gZGxjaV90cmFuc21pdCwKKwkubmRvX2NoYW5nZV9tdHUJPSBkbGNpX2NoYW5nZV9tdHUsCit9OworCiBzdGF0aWMgdm9pZCBkbGNpX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRsY2lfbG9jYWwgKmRscCA9IG5ldGRldl9wcml2KGRldik7CiAKIAlkZXYtPmZsYWdzCQk9IDA7Ci0JZGV2LT5vcGVuCQk9IGRsY2lfb3BlbjsKLQlkZXYtPnN0b3AJCT0gZGxjaV9jbG9zZTsKLQlkZXYtPmRvX2lvY3RsCQk9IGRsY2lfZGV2X2lvY3RsOwotCWRldi0+aGFyZF9zdGFydF94bWl0CT0gZGxjaV90cmFuc21pdDsKIAlkZXYtPmhlYWRlcl9vcHMJCT0gJmRsY2lfaGVhZGVyX29wczsKLQlkZXYtPmdldF9zdGF0cwkJPSBkbGNpX2dldF9zdGF0czsKLQlkZXYtPmNoYW5nZV9tdHUJCT0gZGxjaV9jaGFuZ2VfbXR1OworCWRldi0+bmV0ZGV2X29wcwkJPSAmZGxjaV9uZXRkZXZfb3BzOwogCWRldi0+ZGVzdHJ1Y3RvcgkJPSBmcmVlX25ldGRldjsKIAogCWRscC0+cmVjZWl2ZQkJPSBkbGNpX3JlY2VpdmU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vZHNjYzQuYyBiL2RyaXZlcnMvbmV0L3dhbi9kc2NjNC5jCmluZGV4IDg4ODAyNWQuLjhmYWNlNWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9kc2NjNC5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9kc2NjNC5jCkBAIC04ODMsNiArODgzLDE1IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBkc2NjNF9vcHMgPSB7CisJLm5kb19vcGVuICAgICAgID0gZHNjYzRfb3BlbiwKKwkubmRvX3N0b3AgICAgICAgPSBkc2NjNF9jbG9zZSwKKwkubmRvX2NoYW5nZV9tdHUgPSBoZGxjX2NoYW5nZV9tdHUsCisJLm5kb19zdGFydF94bWl0ID0gaGRsY19zdGFydF94bWl0LAorCS5uZG9fZG9faW9jdGwgICA9IGRzY2M0X2lvY3RsLAorCS5uZG9fdHhfdGltZW91dCA9IGRzY2M0X3R4X3RpbWVvdXQsCit9OworCiBzdGF0aWMgaW50IGRzY2M0X2ZvdW5kMShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdm9pZCBfX2lvbWVtICppb2FkZHIpCiB7CiAJc3RydWN0IGRzY2M0X3BjaV9wcml2ICpwcHJpdjsKQEAgLTkxNiwxMyArOTI1LDggQEAKIAkJaGRsY19kZXZpY2UgKmhkbGMgPSBkZXZfdG9faGRsYyhkKTsKIAogCSAgICAgICAgZC0+YmFzZV9hZGRyID0gKHVuc2lnbmVkIGxvbmcpaW9hZGRyOwotCQlkLT5pbml0ID0gTlVMTDsKIAkgICAgICAgIGQtPmlycSA9IHBkZXYtPmlycTsKLQkgICAgICAgIGQtPm9wZW4gPSBkc2NjNF9vcGVuOwotCSAgICAgICAgZC0+c3RvcCA9IGRzY2M0X2Nsb3NlOwotCQlkLT5zZXRfbXVsdGljYXN0X2xpc3QgPSBOVUxMOwotCSAgICAgICAgZC0+ZG9faW9jdGwgPSBkc2NjNF9pb2N0bDsKLQkJZC0+dHhfdGltZW91dCA9IGRzY2M0X3R4X3RpbWVvdXQ7CisJCWQtPm5ldGRldl9vcHMgPSAmZHNjYzRfb3BzOwogCQlkLT53YXRjaGRvZ190aW1lbyA9IFRYX1RJTUVPVVQ7CiAJCVNFVF9ORVRERVZfREVWKGQsICZwZGV2LT5kZXYpOwogCkBAIC0xMDQ4LDcgKzEwNTIsNyBAQAogCXN0cnVjdCBkc2NjNF9wY2lfcHJpdiAqcHByaXY7CiAJaW50IHJldCA9IC1FQUdBSU47CiAKLQlpZiAoKGRzY2M0X2xvb3BiYWNrX2NoZWNrKGRwcml2KSA8IDApIHx8ICFkZXYtPmhhcmRfc3RhcnRfeG1pdCkKKwlpZiAoKGRzY2M0X2xvb3BiYWNrX2NoZWNrKGRwcml2KSA8IDApKQogCQlnb3RvIGVycjsKIAogCWlmICgocmV0ID0gaGRsY19vcGVuKGRldikpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2ZhcnN5bmMuYyBiL2RyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmMKaW5kZXggNDhhMmM5ZC4uMDA5NDVmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2ZhcnN5bmMuYworKysgYi9kcml2ZXJzL25ldC93YW4vZmFyc3luYy5jCkBAIC0yNDI0LDYgKzI0MjQsMTUgQEAKIAkgICAgICAgdHlwZV9zdHJpbmdzW2NhcmQtPnR5cGVdLCBjYXJkLT5pcnEsIGNhcmQtPm5wb3J0cyk7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZnN0X29wcyA9IHsKKwkubmRvX29wZW4gICAgICAgPSBmc3Rfb3BlbiwKKwkubmRvX3N0b3AgICAgICAgPSBmc3RfY2xvc2UsCisJLm5kb19jaGFuZ2VfbXR1ID0gaGRsY19jaGFuZ2VfbXR1LAorCS5uZG9fc3RhcnRfeG1pdCA9IGhkbGNfc3RhcnRfeG1pdCwKKwkubmRvX2RvX2lvY3RsICAgPSBmc3RfaW9jdGwsCisJLm5kb190eF90aW1lb3V0ID0gZnN0X3R4X3RpbWVvdXQsCit9OworCiAvKgogICogICAgICBJbml0aWFsaXNlIGNhcmQgd2hlbiBkZXRlY3RlZC4KICAqICAgICAgUmV0dXJucyAwIHRvIGluZGljYXRlIHN1Y2Nlc3MsIG9yIGVycm5vIG90aGVyd2lzZS4KQEAgLTI1NjUsMTIgKzI1NzQsOSBAQAogICAgICAgICAgICAgICAgIGRldi0+YmFzZV9hZGRyICAgPSBjYXJkLT5wY2lfY29uZjsKICAgICAgICAgICAgICAgICBkZXYtPmlycSAgICAgICAgID0gY2FyZC0+aXJxOwogCi0gICAgICAgICAgICAgICAgZGV2LT50eF9xdWV1ZV9sZW4gICAgICAgICAgPSBGU1RfVFhfUVVFVUVfTEVOOwotICAgICAgICAgICAgICAgIGRldi0+b3BlbiAgICAgICAgICAgICAgICAgID0gZnN0X29wZW47Ci0gICAgICAgICAgICAgICAgZGV2LT5zdG9wICAgICAgICAgICAgICAgICAgPSBmc3RfY2xvc2U7Ci0gICAgICAgICAgICAgICAgZGV2LT5kb19pb2N0bCAgICAgICAgICAgICAgPSBmc3RfaW9jdGw7Ci0gICAgICAgICAgICAgICAgZGV2LT53YXRjaGRvZ190aW1lbyAgICAgICAgPSBGU1RfVFhfVElNRU9VVDsKLSAgICAgICAgICAgICAgICBkZXYtPnR4X3RpbWVvdXQgICAgICAgICAgICA9IGZzdF90eF90aW1lb3V0OworCQlkZXYtPm5ldGRldl9vcHMgPSAmZnN0X29wczsKKwkJZGV2LT50eF9xdWV1ZV9sZW4gPSBGU1RfVFhfUVVFVUVfTEVOOworCQlkZXYtPndhdGNoZG9nX3RpbWVvID0gRlNUX1RYX1RJTUVPVVQ7CiAgICAgICAgICAgICAgICAgaGRsYy0+YXR0YWNoID0gZnN0X2F0dGFjaDsKICAgICAgICAgICAgICAgICBoZGxjLT54bWl0ICAgPSBmc3Rfc3RhcnRfeG1pdDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vaGQ2NDU3Mi5jIGIvZHJpdmVycy9uZXQvd2FuL2hkNjQ1NzIuYwppbmRleCAwOGIzNTM2Li40OTdiMDAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vaGQ2NDU3Mi5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9oZDY0NTcyLmMKQEAgLTM0MSw3ICszNDEsNyBAQAogCQlyZWNlaXZlZCA9IHNjYV9yeF9kb25lKHBvcnQsIGJ1ZGdldCk7CiAKIAlpZiAocmVjZWl2ZWQgPCBidWRnZXQpIHsKLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CiAJCWVuYWJsZV9pbnRyKHBvcnQpOwogCX0KIApAQCAtMzU5LDcgKzM1OSw3IEBACiAJCWlmIChwb3J0ICYmIChpc3IwICYgKGkgPyAweDA4MDAyMjAwIDogMHgwMDA4MDAyMikpKSB7CiAJCQloYW5kbGVkID0gMTsKIAkJCWRpc2FibGVfaW50cihwb3J0KTsKLQkJCW5ldGlmX3J4X3NjaGVkdWxlKCZwb3J0LT5uYXBpKTsKKwkJCW5hcGlfc2NoZWR1bGUoJnBvcnQtPm5hcGkpOwogCQl9CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vaGRsYy5jIGIvZHJpdmVycy9uZXQvd2FuL2hkbGMuYwppbmRleCAxZjJhMTQwLi43NTk2ZWFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vaGRsYy5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9oZGxjLmMKQEAgLTQ0LDcgKzQ0LDcgQEAKIAogc3RhdGljIHN0cnVjdCBoZGxjX3Byb3RvICpmaXJzdF9wcm90bzsKIAotc3RhdGljIGludCBoZGxjX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpCitpbnQgaGRsY19jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KQogewogCWlmICgobmV3X210dSA8IDY4KSB8fCAobmV3X210dSA+IEhETENfTUFYX01UVSkpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNTIsMTUgKzUyLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotCi0KLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqaGRsY19nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gJmRldi0+c3RhdHM7Ci19Ci0KLQotCiBzdGF0aWMgaW50IGhkbGNfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCSAgICBzdHJ1Y3QgcGFja2V0X3R5cGUgKnAsIHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2RldikKIHsKQEAgLTc1LDcgKzY2LDE1IEBACiAJcmV0dXJuIGhkbGMtPnByb3RvLT5uZXRpZl9yeChza2IpOwogfQogCitpbnQgaGRsY19zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJaGRsY19kZXZpY2UgKmhkbGMgPSBkZXZfdG9faGRsYyhkZXYpOwogCisJaWYgKGhkbGMtPnByb3RvLT54bWl0KQorCQlyZXR1cm4gaGRsYy0+cHJvdG8tPnhtaXQoc2tiLCBkZXYpOworCisJcmV0dXJuIGhkbGMtPnhtaXQoc2tiLCBkZXYpOyAvKiBjYWxsIGhhcmR3YXJlIGRyaXZlciBkaXJlY3RseSAqLworfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgaGRsY19wcm90b19zdGFydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewpAQCAtMTAyLDExICsxMDEsMTEgQEAKIAloZGxjX2RldmljZSAqaGRsYzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBvbjsKLSAKKwogCWlmIChkZXZfbmV0KGRldikgIT0gJmluaXRfbmV0KQogCQlyZXR1cm4gTk9USUZZX0RPTkU7CiAKLQlpZiAoZGV2LT5nZXRfc3RhdHMgIT0gaGRsY19nZXRfc3RhdHMpCisJaWYgKCEoZGV2LT5wcml2X2ZsYWdzICYgSUZGX1dBTl9IRExDKSkKIAkJcmV0dXJuIE5PVElGWV9ET05FOyAvKiBub3QgYW4gSERMQyBkZXZpY2UgKi8KIAogCWlmIChldmVudCAhPSBORVRERVZfQ0hBTkdFKQpAQCAtMjMzLDE1ICsyMzIsMTMgQEAKIAkvKiBSZS1pbml0IGFsbCB2YXJpYWJsZXMgY2hhbmdlZCBieSBIRExDIHByb3RvY29sIGRyaXZlcnMsCiAJICogaW5jbHVkaW5nIGV0aGVyX3NldHVwKCkgY2FsbGVkIGZyb20gaGRsY19yYXdfZXRoLmMuCiAJICovCi0JZGV2LT5nZXRfc3RhdHMJCSA9IGhkbGNfZ2V0X3N0YXRzOwogCWRldi0+ZmxhZ3MJCSA9IElGRl9QT0lOVE9QT0lOVCB8IElGRl9OT0FSUDsKKwlkZXYtPnByaXZfZmxhZ3MJCSA9IElGRl9XQU5fSERMQzsKIAlkZXYtPm10dQkJID0gSERMQ19NQVhfTVRVOwogCWRldi0+dHlwZQkJID0gQVJQSFJEX1JBV0hETEM7CiAJZGV2LT5oYXJkX2hlYWRlcl9sZW4JID0gMTY7CiAJZGV2LT5hZGRyX2xlbgkJID0gMDsKIAlkZXYtPmhlYWRlcl9vcHMJCSA9ICZoZGxjX251bGxfb3BzOwotCi0JZGV2LT5jaGFuZ2VfbXR1CQkgPSBoZGxjX2NoYW5nZV9tdHU7CiB9CiAKIHN0YXRpYyB2b2lkIGhkbGNfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTMzOSw2ICszMzYsOCBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJIRExDIHN1cHBvcnQgbW9kdWxlIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CiAKK0VYUE9SVF9TWU1CT0woaGRsY19jaGFuZ2VfbXR1KTsKK0VYUE9SVF9TWU1CT0woaGRsY19zdGFydF94bWl0KTsKIEVYUE9SVF9TWU1CT0woaGRsY19vcGVuKTsKIEVYUE9SVF9TWU1CT0woaGRsY19jbG9zZSk7CiBFWFBPUlRfU1lNQk9MKGhkbGNfaW9jdGwpOwpAQCAtMzQ5LDggKzM0OCw4IEBACiBFWFBPUlRfU1lNQk9MKGF0dGFjaF9oZGxjX3Byb3RvY29sKTsKIEVYUE9SVF9TWU1CT0woZGV0YWNoX2hkbGNfcHJvdG9jb2wpOwogCi1zdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGhkbGNfcGFja2V0X3R5cGUgPSB7Ci0JLnR5cGUgPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0hETEMpLAorc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBoZGxjX3BhY2tldF90eXBlIF9fcmVhZF9tb3N0bHkgPSB7CisJLnR5cGUgPSBjcHVfdG9fYmUxNihFVEhfUF9IRExDKSwKIAkuZnVuYyA9IGhkbGNfcmN2LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2hkbGNfY2lzY28uYyBiL2RyaXZlcnMvbmV0L3dhbi9oZGxjX2Npc2NvLmMKaW5kZXggNDRlNjRiMTUuLmNmNWZkMTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9oZGxjX2Npc2NvLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2hkbGNfY2lzY28uYwpAQCAtMTE3LDcgKzExNyw3IEBACiAJZGF0YS0+dHlwZSA9IGh0b25sKHR5cGUpOwogCWRhdGEtPnBhcjEgPSBwYXIxOwogCWRhdGEtPnBhcjIgPSBwYXIyOwotCWRhdGEtPnJlbCA9IF9fY29uc3RhbnRfaHRvbnMoMHhGRkZGKTsKKwlkYXRhLT5yZWwgPSBjcHVfdG9fYmUxNigweEZGRkYpOwogCS8qIHdlIHdpbGwgbmVlZCBkb19kaXYgaGVyZSBpZiAxMDAwICUgSFogIT0gMCAqLwogCWRhdGEtPnRpbWUgPSBodG9ubCgoamlmZmllcyAtIElOSVRJQUxfSklGRklFUykgKiAoMTAwMCAvIEhaKSk7CiAKQEAgLTEzNiwyMCArMTM2LDIwIEBACiAJc3RydWN0IGhkbGNfaGVhZGVyICpkYXRhID0gKHN0cnVjdCBoZGxjX2hlYWRlciopc2tiLT5kYXRhOwogCiAJaWYgKHNrYi0+bGVuIDwgc2l6ZW9mKHN0cnVjdCBoZGxjX2hlYWRlcikpCi0JCXJldHVybiBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0hETEMpOworCQlyZXR1cm4gY3B1X3RvX2JlMTYoRVRIX1BfSERMQyk7CiAKIAlpZiAoZGF0YS0+YWRkcmVzcyAhPSBDSVNDT19NVUxUSUNBU1QgJiYKIAkgICAgZGF0YS0+YWRkcmVzcyAhPSBDSVNDT19VTklDQVNUKQotCQlyZXR1cm4gX19jb25zdGFudF9odG9ucyhFVEhfUF9IRExDKTsKKwkJcmV0dXJuIGNwdV90b19iZTE2KEVUSF9QX0hETEMpOwogCiAJc3dpdGNoKGRhdGEtPnByb3RvY29sKSB7Ci0JY2FzZSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQKToKLQljYXNlIF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVBYKToKLQljYXNlIF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVBWNik6CisJY2FzZSBjcHVfdG9fYmUxNihFVEhfUF9JUCk6CisJY2FzZSBjcHVfdG9fYmUxNihFVEhfUF9JUFgpOgorCWNhc2UgY3B1X3RvX2JlMTYoRVRIX1BfSVBWNik6CiAJCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBoZGxjX2hlYWRlcikpOwogCQlyZXR1cm4gZGF0YS0+cHJvdG9jb2w7CiAJZGVmYXVsdDoKLQkJcmV0dXJuIF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSERMQyk7CisJCXJldHVybiBjcHVfdG9fYmUxNihFVEhfUF9IRExDKTsKIAl9CiB9CiAKQEAgLTE5NCw3ICsxOTQsNyBAQAogCQljYXNlIENJU0NPX0FERFJfUkVROiAvKiBTdG9sZW4gZnJvbSBzeW5jcHBwLmMgOi0pICovCiAJCQlpbl9kZXYgPSBkZXYtPmlwX3B0cjsKIAkJCWFkZHIgPSAwOwotCQkJbWFzayA9IF9fY29uc3RhbnRfaHRvbmwofjApOyAvKiBpcyB0aGUgbWFzayBjb3JyZWN0PyAqLworCQkJbWFzayA9IH5jcHVfdG9fYmUzMigwKTsgLyogaXMgdGhlIG1hc2sgY29ycmVjdD8gKi8KIAogCQkJaWYgKGluX2RldiAhPSBOVUxMKSB7CiAJCQkJc3RydWN0IGluX2lmYWRkciAqKmlmYXAgPSAmaW5fZGV2LT5pZmFfbGlzdDsKQEAgLTM4Miw3ICszODIsNiBAQAogCiAJCW1lbWNweSgmc3RhdGUoaGRsYyktPnNldHRpbmdzLCAmbmV3X3NldHRpbmdzLCBzaXplKTsKIAkJc3Bpbl9sb2NrX2luaXQoJnN0YXRlKGhkbGMpLT5sb2NrKTsKLQkJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBoZGxjLT54bWl0OwogCQlkZXYtPmhlYWRlcl9vcHMgPSAmY2lzY29faGVhZGVyX29wczsKIAkJZGV2LT50eXBlID0gQVJQSFJEX0NJU0NPOwogCQluZXRpZl9kb3JtYW50X29uKGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vaGRsY19mci5jIGIvZHJpdmVycy9uZXQvd2FuL2hkbGNfZnIuYwppbmRleCBmMWRkZDdjLi44MDA1MzAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vaGRsY19mci5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9oZGxjX2ZyLmMKQEAgLTI3OCwzMSArMjc4LDMxIEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9ICpza2JfcDsKIAogCXN3aXRjaCAoc2tiLT5wcm90b2NvbCkgewotCWNhc2UgX19jb25zdGFudF9odG9ucyhOTFBJRF9DQ0lUVF9BTlNJX0xNSSk6CisJY2FzZSBjcHVfdG9fYmUxNihOTFBJRF9DQ0lUVF9BTlNJX0xNSSk6CiAJCWhlYWRfbGVuID0gNDsKIAkJc2tiX3B1c2goc2tiLCBoZWFkX2xlbik7CiAJCXNrYi0+ZGF0YVszXSA9IE5MUElEX0NDSVRUX0FOU0lfTE1JOwogCQlicmVhazsKIAotCWNhc2UgX19jb25zdGFudF9odG9ucyhOTFBJRF9DSVNDT19MTUkpOgorCWNhc2UgY3B1X3RvX2JlMTYoTkxQSURfQ0lTQ09fTE1JKToKIAkJaGVhZF9sZW4gPSA0OwogCQlza2JfcHVzaChza2IsIGhlYWRfbGVuKTsKIAkJc2tiLT5kYXRhWzNdID0gTkxQSURfQ0lTQ09fTE1JOwogCQlicmVhazsKIAotCWNhc2UgX19jb25zdGFudF9odG9ucyhFVEhfUF9JUCk6CisJY2FzZSBjcHVfdG9fYmUxNihFVEhfUF9JUCk6CiAJCWhlYWRfbGVuID0gNDsKIAkJc2tiX3B1c2goc2tiLCBoZWFkX2xlbik7CiAJCXNrYi0+ZGF0YVszXSA9IE5MUElEX0lQOwogCQlicmVhazsKIAotCWNhc2UgX19jb25zdGFudF9odG9ucyhFVEhfUF9JUFY2KToKKwljYXNlIGNwdV90b19iZTE2KEVUSF9QX0lQVjYpOgogCQloZWFkX2xlbiA9IDQ7CiAJCXNrYl9wdXNoKHNrYiwgaGVhZF9sZW4pOwogCQlza2ItPmRhdGFbM10gPSBOTFBJRF9JUFY2OwogCQlicmVhazsKIAotCWNhc2UgX19jb25zdGFudF9odG9ucyhFVEhfUF84MDJfMyk6CisJY2FzZSBjcHVfdG9fYmUxNihFVEhfUF84MDJfMyk6CiAJCWhlYWRfbGVuID0gMTA7CiAJCWlmIChza2JfaGVhZHJvb20oc2tiKSA8IGhlYWRfbGVuKSB7CiAJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiMiA9IHNrYl9yZWFsbG9jX2hlYWRyb29tKHNrYiwKQEAgLTQyNiw3ICs0MjYsNyBAQAogCQkJCXNrYl9wdXQoc2tiLCBwYWQpOwogCQkJCW1lbXNldChza2ItPmRhdGEgKyBsZW4sIDAsIHBhZCk7CiAJCQl9Ci0JCQlza2ItPnByb3RvY29sID0gX19jb25zdGFudF9odG9ucyhFVEhfUF84MDJfMyk7CisJCQlza2ItPnByb3RvY29sID0gY3B1X3RvX2JlMTYoRVRIX1BfODAyXzMpOwogCQl9CiAJCWlmICghZnJfaGFyZF9oZWFkZXIoJnNrYiwgcHZjLT5kbGNpKSkgewogCQkJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKQEAgLTQ0NCwxOCArNDQ0LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotCi0KLXN0YXRpYyBpbnQgcHZjX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpCi17Ci0JaWYgKChuZXdfbXR1IDwgNjgpIHx8IChuZXdfbXR1ID4gSERMQ19NQVhfTVRVKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JZGV2LT5tdHUgPSBuZXdfbXR1OwotCXJldHVybiAwOwotfQotCi0KLQogc3RhdGljIGlubGluZSB2b2lkIGZyX2xvZ19kbGNpX2FjdGl2ZShwdmNfZGV2aWNlICpwdmMpCiB7CiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IERMQ0kgJWQgWyVzJXMlc10lcyAlc1xuIiwKQEAgLTUwOCwxMCArNDk2LDEwIEBACiAJbWVtc2V0KHNrYi0+ZGF0YSwgMCwgbGVuKTsKIAlza2JfcmVzZXJ2ZShza2IsIDQpOwogCWlmIChsbWkgPT0gTE1JX0NJU0NPKSB7Ci0JCXNrYi0+cHJvdG9jb2wgPSBfX2NvbnN0YW50X2h0b25zKE5MUElEX0NJU0NPX0xNSSk7CisJCXNrYi0+cHJvdG9jb2wgPSBjcHVfdG9fYmUxNihOTFBJRF9DSVNDT19MTUkpOwogCQlmcl9oYXJkX2hlYWRlcigmc2tiLCBMTUlfQ0lTQ09fRExDSSk7CiAJfSBlbHNlIHsKLQkJc2tiLT5wcm90b2NvbCA9IF9fY29uc3RhbnRfaHRvbnMoTkxQSURfQ0NJVFRfQU5TSV9MTUkpOworCQlza2ItPnByb3RvY29sID0gY3B1X3RvX2JlMTYoTkxQSURfQ0NJVFRfQU5TSV9MTUkpOwogCQlmcl9oYXJkX2hlYWRlcigmc2tiLCBMTUlfQ0NJVFRfQU5TSV9ETENJKTsKIAl9CiAJZGF0YSA9IHNrYl90YWlsX3BvaW50ZXIoc2tiKTsKQEAgLTEwNjgsNiArMTA1NiwxNCBAQAogCWRldi0+YWRkcl9sZW4gPSAyOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHB2Y19vcHMgPSB7CisJLm5kb19vcGVuICAgICAgID0gcHZjX29wZW4sCisJLm5kb19zdG9wICAgICAgID0gcHZjX2Nsb3NlLAorCS5uZG9fY2hhbmdlX210dSA9IGhkbGNfY2hhbmdlX210dSwKKwkubmRvX3N0YXJ0X3htaXQgPSBwdmNfeG1pdCwKKwkubmRvX2RvX2lvY3RsICAgPSBwdmNfaW9jdGwsCit9OworCiBzdGF0aWMgaW50IGZyX2FkZF9wdmMoc3RydWN0IG5ldF9kZXZpY2UgKmZyYWQsIHVuc2lnbmVkIGludCBkbGNpLCBpbnQgdHlwZSkKIHsKIAloZGxjX2RldmljZSAqaGRsYyA9IGRldl90b19oZGxjKGZyYWQpOwpAQCAtMTEwNCwxMSArMTEwMCw3IEBACiAJCSooX19iZTE2KilkZXYtPmRldl9hZGRyID0gaHRvbnMoZGxjaSk7CiAJCWRsY2lfdG9fcTkyMihkZXYtPmJyb2FkY2FzdCwgZGxjaSk7CiAJfQotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gcHZjX3htaXQ7Ci0JZGV2LT5vcGVuID0gcHZjX29wZW47Ci0JZGV2LT5zdG9wID0gcHZjX2Nsb3NlOwotCWRldi0+ZG9faW9jdGwgPSBwdmNfaW9jdGw7Ci0JZGV2LT5jaGFuZ2VfbXR1ID0gcHZjX2NoYW5nZV9tdHU7CisJZGV2LT5uZXRkZXZfb3BzID0gJnB2Y19vcHM7CiAJZGV2LT5tdHUgPSBIRExDX01BWF9NVFU7CiAJZGV2LT50eF9xdWV1ZV9sZW4gPSAwOwogCWRldi0+bWxfcHJpdiA9IHB2YzsKQEAgLTEyNjAsOCArMTI1Miw2IEBACiAJCQlzdGF0ZShoZGxjKS0+ZGNlX3B2Y19jb3VudCA9IDA7CiAJCX0KIAkJbWVtY3B5KCZzdGF0ZShoZGxjKS0+c2V0dGluZ3MsICZuZXdfc2V0dGluZ3MsIHNpemUpOwotCi0JCWRldi0+aGFyZF9zdGFydF94bWl0ID0gaGRsYy0+eG1pdDsKIAkJZGV2LT50eXBlID0gQVJQSFJEX0ZSQUQ7CiAJCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vaGRsY19wcHAuYyBiL2RyaXZlcnMvbmV0L3dhbi9oZGxjX3BwcC5jCmluZGV4IDU3ZmU3MTQuLjcyYTdjZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9oZGxjX3BwcC5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9oZGxjX3BwcC5jCkBAIC0xNTAsMTEgKzE1MCwxMSBAQAogCQlyZXR1cm4gaHRvbnMoRVRIX1BfSERMQyk7CiAKIAlzd2l0Y2ggKGRhdGEtPnByb3RvY29sKSB7Ci0JY2FzZSBfX2NvbnN0YW50X2h0b25zKFBJRF9JUCk6CisJY2FzZSBjcHVfdG9fYmUxNihQSURfSVApOgogCQlza2JfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgaGRsY19oZWFkZXIpKTsKIAkJcmV0dXJuIGh0b25zKEVUSF9QX0lQKTsKIAotCWNhc2UgX19jb25zdGFudF9odG9ucyhQSURfSVBWNik6CisJY2FzZSBjcHVfdG9fYmUxNihQSURfSVBWNik6CiAJCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBoZGxjX2hlYWRlcikpOwogCQlyZXR1cm4gaHRvbnMoRVRIX1BfSVBWNik7CiAKQEAgLTU1OCw3ICs1NTgsNiBAQAogCXJldHVybiBORVRfUlhfRFJPUDsKIH0KIAotCiBzdGF0aWMgdm9pZCBwcHBfdGltZXIodW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJc3RydWN0IHByb3RvICpwcm90byA9IChzdHJ1Y3QgcHJvdG8gKilhcmc7CkBAIC02NzksNyArNjc4LDYgQEAKIAkJcHBwLT5rZWVwYWxpdmVfaW50ZXJ2YWwgPSAxMDsKIAkJcHBwLT5rZWVwYWxpdmVfdGltZW91dCA9IDYwOwogCi0JCWRldi0+aGFyZF9zdGFydF94bWl0ID0gaGRsYy0+eG1pdDsKIAkJZGV2LT5oYXJkX2hlYWRlcl9sZW4gPSBzaXplb2Yoc3RydWN0IGhkbGNfaGVhZGVyKTsKIAkJZGV2LT5oZWFkZXJfb3BzID0gJnBwcF9oZWFkZXJfb3BzOwogCQlkZXYtPnR5cGUgPSBBUlBIUkRfUFBQOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2hkbGNfcmF3LmMgYi9kcml2ZXJzL25ldC93YW4vaGRsY19yYXcuYwppbmRleCA4NjEyMzExNy4uMTlmNTFmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2hkbGNfcmF3LmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2hkbGNfcmF3LmMKQEAgLTI3LDExICsyNyw5IEBACiAKIHN0YXRpYyBfX2JlMTYgcmF3X3R5cGVfdHJhbnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlyZXR1cm4gX19jb25zdGFudF9odG9ucyhFVEhfUF9JUCk7CisJcmV0dXJuIGNwdV90b19iZTE2KEVUSF9QX0lQKTsKIH0KIAotCi0KIHN0YXRpYyBzdHJ1Y3QgaGRsY19wcm90byBwcm90byA9IHsKIAkudHlwZV90cmFucwk9IHJhd190eXBlX3RyYW5zLAogCS5pb2N0bAkJPSByYXdfaW9jdGwsCkBAIC04Niw3ICs4NCw2IEBACiAJCWlmIChyZXN1bHQpCiAJCQlyZXR1cm4gcmVzdWx0OwogCQltZW1jcHkoaGRsYy0+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+cmZfb2Zmc2V0ID0gc2ltcGxlX3N0cnRvdWwoKGNoYXIgKilidWYsIE5VTEwsIDE2KTsKKwlwcml2LT5yZl9vZmZzZXQgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDE2KTsKIAlyZXMgPSBjb3VudDsKIG91dF91bmxvY2s6CiAJZnJlZV9wYWdlKGFkZHIpOwpAQCAtNjgwLDEyICs2ODAsMTIgQEAKIH0KIAogc3RydWN0IGxic19kZWJ1Z2ZzX2ZpbGVzIHsKLQljaGFyICpuYW1lOworCWNvbnN0IGNoYXIgKm5hbWU7CiAJaW50IHBlcm07CiAJc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmb3BzOwogfTsKIAotc3RhdGljIHN0cnVjdCBsYnNfZGVidWdmc19maWxlcyBkZWJ1Z2ZzX2ZpbGVzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGxic19kZWJ1Z2ZzX2ZpbGVzIGRlYnVnZnNfZmlsZXNbXSA9IHsKIAl7ICJpbmZvIiwgMDQ0NCwgRk9QUyhsYnNfZGV2X2luZm8sIHdyaXRlX2ZpbGVfZHVtbXkpLCB9LAogCXsgImdldHNjYW50YWJsZSIsIDA0NDQsIEZPUFMobGJzX2dldHNjYW50YWJsZSwKIAkJCQkJd3JpdGVfZmlsZV9kdW1teSksIH0sCkBAIC02OTMsNyArNjkzLDcgQEAKIAkJCQlsYnNfc2xlZXBwYXJhbXNfd3JpdGUpLCB9LAogfTsKIAotc3RhdGljIHN0cnVjdCBsYnNfZGVidWdmc19maWxlcyBkZWJ1Z2ZzX2V2ZW50c19maWxlc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBsYnNfZGVidWdmc19maWxlcyBkZWJ1Z2ZzX2V2ZW50c19maWxlc1tdID0gewogCXsibG93X3Jzc2kiLCAwNjQ0LCBGT1BTKGxic19sb3dyc3NpX3JlYWQsCiAJCQkJbGJzX2xvd3Jzc2lfd3JpdGUpLCB9LAogCXsibG93X3NuciIsIDA2NDQsIEZPUFMobGJzX2xvd3Nucl9yZWFkLApAQCAtNzA4LDcgKzcwOCw3IEBACiAJCQkJbGJzX2hpZ2hzbnJfd3JpdGUpLCB9LAogfTsKIAotc3RhdGljIHN0cnVjdCBsYnNfZGVidWdmc19maWxlcyBkZWJ1Z2ZzX3JlZ3NfZmlsZXNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbGJzX2RlYnVnZnNfZmlsZXMgZGVidWdmc19yZWdzX2ZpbGVzW10gPSB7CiAJeyJyZG1hYyIsIDA2NDQsIEZPUFMobGJzX3JkbWFjX3JlYWQsIGxic19yZG1hY193cml0ZSksIH0sCiAJeyJ3cm1hYyIsIDA2MDAsIEZPUFMoTlVMTCwgbGJzX3dybWFjX3dyaXRlKSwgfSwKIAl7InJkYmJwIiwgMDY0NCwgRk9QUyhsYnNfcmRiYnBfcmVhZCwgbGJzX3JkYmJwX3dyaXRlKSwgfSwKQEAgLTczNSw3ICs3MzUsNyBAQAogdm9pZCBsYnNfZGVidWdmc19pbml0X29uZShzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJaW50IGk7Ci0Jc3RydWN0IGxic19kZWJ1Z2ZzX2ZpbGVzICpmaWxlczsKKwljb25zdCBzdHJ1Y3QgbGJzX2RlYnVnZnNfZmlsZXMgKmZpbGVzOwogCWlmICghbGJzX2RpcikKIAkJZ290byBleGl0OwogCkBAIC05MzgsNyArOTM4LDcgQEAKIAlyZXR1cm4gKHNzaXplX3QpY250OwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBsYnNfZGVidWdfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGxic19kZWJ1Z19mb3BzID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5vcGVuID0gb3Blbl9maWxlX2dlbmVyaWMsCiAJLndyaXRlID0gbGJzX2RlYnVnZnNfd3JpdGUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZWZzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZWZzLmgKaW5kZXggYzM2NGU0YzAuLmU4ZGZkZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2RlZnMuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZWZzLmgKQEAgLTQxLDYgKzQxLDcgQEAKICNkZWZpbmUgTEJTX0RFQl9IRVgJMHgwMDIwMDAwMAogI2RlZmluZSBMQlNfREVCX1NESU8JMHgwMDQwMDAwMAogI2RlZmluZSBMQlNfREVCX1NZU0ZTCTB4MDA4MDAwMDAKKyNkZWZpbmUgTEJTX0RFQl9TUEkJMHgwMTAwMDAwMAogCiBleHRlcm4gdW5zaWduZWQgaW50IGxic19kZWJ1ZzsKIApAQCAtODQsNiArODUsNyBAQAogI2RlZmluZSBsYnNfZGViX3RocmVhZChmbXQsIGFyZ3MuLi4pICAgIExCU19ERUJfTEwoTEJTX0RFQl9USFJFQUQsICIgdGhyZWFkIiwgZm10LCAjI2FyZ3MpCiAjZGVmaW5lIGxic19kZWJfc2RpbyhmbXQsIGFyZ3MuLi4pICAgICAgTEJTX0RFQl9MTChMQlNfREVCX1NESU8sICIgc2RpbyIsIGZtdCwgIyNhcmdzKQogI2RlZmluZSBsYnNfZGViX3N5c2ZzKGZtdCwgYXJncy4uLikgICAgIExCU19ERUJfTEwoTEJTX0RFQl9TWVNGUywgIiBzeXNmcyIsIGZtdCwgIyNhcmdzKQorI2RlZmluZSBsYnNfZGViX3NwaShmbXQsIGFyZ3MuLi4pICAgICAgIExCU19ERUJfTEwoTEJTX0RFQl9TUEksICIgc3BpIiwgZm10LCAjI2FyZ3MpCiAKICNkZWZpbmUgbGJzX3ByX2luZm8oZm9ybWF0LCBhcmdzLi4uKSBcCiAJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRSI6ICIgZm9ybWF0LCAjIyBhcmdzKQpAQCAtMjYzLDYgKzI2NSw3IEBACiAKICNkZWZpbmUJQ01EX0ZfSE9TVENNRAkJKDEgPDwgMCkKICNkZWZpbmUgRldfQ0FQSU5GT19XUEEgIAkoMSA8PCAwKQorI2RlZmluZSBGV19DQVBJTkZPX1BTICAJCSgxIDw8IDEpCiAjZGVmaW5lIEZXX0NBUElORk9fRklSTVdBUkVfVVBHUkFERQkoMSA8PCAxMykKICNkZWZpbmUgRldfQ0FQSU5GT19CT09UMl9VUEdSQURFCSgxPDwxNCkKICNkZWZpbmUgRldfQ0FQSU5GT19QRVJTSVNURU5UX0NPTkZJRwkoMTw8MTUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZXYuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2Rldi5oCmluZGV4IGRkNjgyYzQuLjI3ZTgxZmQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZXYuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZXYuaApAQCAtMTA5LDcgKzEwOSw2IEBACiAJdm9pZCAqY2FyZDsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCi0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm1lc2hfZGV2OyAvKiBWaXJ0dWFsIGRldmljZSAqLwogCXN0cnVjdCBuZXRfZGV2aWNlICpydGFwX25ldF9kZXY7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2hvc3QuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2hvc3QuaAppbmRleCAyNzdmZjE5Li5kNDQ1N2VmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9ob3N0LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaG9zdC5oCkBAIC02Niw2ICs2Niw3IEBACiAjZGVmaW5lIENNRF84MDJfMTFfTEVEX0dQSU9fQ1RSTAkJMHgwMDRlCiAjZGVmaW5lIENNRF84MDJfMTFfRUVQUk9NX0FDQ0VTUwkJMHgwMDU5CiAjZGVmaW5lIENNRF84MDJfMTFfQkFORF9DT05GSUcJCQkweDAwNTgKKyNkZWZpbmUgQ01EX0dTUElfQlVTX0NPTkZJRwkJCTB4MDA1YQogI2RlZmluZSBDTURfODAyXzExRF9ET01BSU5fSU5GTwkJCTB4MDA1YgogI2RlZmluZSBDTURfODAyXzExX0tFWV9NQVRFUklBTAkJCTB4MDA1ZQogI2RlZmluZSBDTURfODAyXzExX1NMRUVQX1BBUkFNUwkJCTB4MDA2NgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaG9zdGNtZC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaG9zdGNtZC5oCmluZGV4IGY2YTc5YTYuLmE4OTlhZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2hvc3RjbWQuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9ob3N0Y21kLmgKQEAgLTIyMSw2ICsyMjEsMTQgQEAKIAl1OCBtYWNsaXN0W0VUSF9BTEVOICogTVJWRFJWX01BWF9NVUxUSUNBU1RfTElTVF9TSVpFXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCitzdHJ1Y3QgY21kX2RzX2dzcGlfYnVzX2NvbmZpZyB7CisJc3RydWN0IGNtZF9oZWFkZXIgaGRyOworCV9fbGUxNiBhY3Rpb247CisJX19sZTE2IGJ1c19kZWxheV9tb2RlOworCV9fbGUxNiBob3N0X3RpbWVfZGVsYXlfdG9fcmVhZF9wb3J0OworCV9fbGUxNiBob3N0X3RpbWVfZGVsYXlfdG9fcmVhZF9yZWdpc3RlcjsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCiBzdHJ1Y3QgY21kX2RzXzgwMl8xMV9hdXRoZW50aWNhdGUgewogCXU4IG1hY2FkZHJbRVRIX0FMRU5dOwogCXU4IGF1dGh0eXBlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfY3MuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX2NzLmMKaW5kZXggODQyYTA4ZC4uY2VkZWFjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfY3MuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9jcy5jCkBAIC0xNTEsNyArMTUxLDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgMTAwMDAwOyBpKyspIHsKIAkJdTggdmFsID0gaWZfY3NfcmVhZDgoY2FyZCwgYWRkcik7CiAJCWlmICh2YWwgPT0gcmVnKQotCQkJcmV0dXJuIGk7CisJCQlyZXR1cm4gMDsKIAkJdWRlbGF5KDUpOwogCX0KIAlyZXR1cm4gLUVUSU1FOwpAQCAtNDIxLDcgKzQyMSw3IEBACiAJbGVuID0gaWZfY3NfcmVhZDE2KHByaXYtPmNhcmQsIElGX0NTX1JFQURfTEVOKTsKIAlpZiAobGVuID09IDAgfHwgbGVuID4gTVJWRFJWX0VUSF9SWF9QQUNLRVRfQlVGRkVSX1NJWkUpIHsKIAkJbGJzX3ByX2VycigiY2FyZCBkYXRhIGJ1ZmZlciBoYXMgaW52YWxpZCAjIG9mIGJ5dGVzICglZClcbiIsIGxlbik7Ci0JCXByaXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJcHJpdi0+ZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCWdvdG8gZGF0X2VycjsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NkaW8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NkaW8uYwppbmRleCA0NTE5ZDczLi43NmY0YzY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9zZGlvLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfc2Rpby5jCkBAIC05NSw2ICs5NSw4IEBACiAKIAlzcGlubG9ja190CQlsb2NrOwogCXN0cnVjdCBpZl9zZGlvX3BhY2tldAkqcGFja2V0czsKKworCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0CSp3b3JrcXVldWU7CiAJc3RydWN0IHdvcmtfc3RydWN0CXBhY2tldF93b3JrZXI7CiB9OwogCkBAIC0yMDksNiArMjExLDkgQEAKIAkJZXZlbnQgPSBzZGlvX3JlYWRiKGNhcmQtPmZ1bmMsIElGX1NESU9fRVZFTlQsICZyZXQpOwogCQlpZiAocmV0KQogCQkJZ290byBvdXQ7CisKKwkJLyogcmlnaHQgc2hpZnQgMyBiaXRzIHRvIGdldCB0aGUgZXZlbnQgaWQgKi8KKwkJZXZlbnQgPj49IDM7CiAJfSBlbHNlIHsKIAkJaWYgKHNpemUgPCA0KSB7CiAJCQlsYnNfZGViX3NkaW8oImV2ZW50IHBhY2tldCB0b28gc21hbGwgKCVkIGJ5dGVzKVxuIiwKQEAgLTc0Myw3ICs3NDgsNyBAQAogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+bG9jaywgZmxhZ3MpOwogCi0Jc2NoZWR1bGVfd29yaygmY2FyZC0+cGFja2V0X3dvcmtlcik7CisJcXVldWVfd29yayhjYXJkLT53b3JrcXVldWUsICZjYXJkLT5wYWNrZXRfd29ya2VyKTsKIAogCXJldCA9IDA7CiAKQEAgLTgzMyw2ICs4MzgsNyBAQAogCWNhcmQtPmZ1bmMgPSBmdW5jOwogCWNhcmQtPm1vZGVsID0gbW9kZWw7CiAJc3Bpbl9sb2NrX2luaXQoJmNhcmQtPmxvY2spOworCWNhcmQtPndvcmtxdWV1ZSA9IGNyZWF0ZV93b3JrcXVldWUoImxpYmVydGFzX3NkaW8iKTsKIAlJTklUX1dPUksoJmNhcmQtPnBhY2tldF93b3JrZXIsIGlmX3NkaW9faG9zdF90b19jYXJkX3dvcmtlcik7CiAKIAlmb3IgKGkgPSAwO2kgPCBBUlJBWV9TSVpFKGlmX3NkaW9fbW9kZWxzKTtpKyspIHsKQEAgLTkyMSwxNSArOTI3LDE3IEBACiAJaWYgKHJldCkKIAkJZ290byBlcnJfYWN0aXZhdGVfY2FyZDsKIAorCWlmIChwcml2LT5md2NhcGluZm8gJiBGV19DQVBJTkZPX1BTKQorCQlwcml2LT5wc19zdXBwb3J0ZWQgPSAxOworCiBvdXQ6CiAJbGJzX2RlYl9sZWF2ZV9hcmdzKExCU19ERUJfU0RJTywgInJldCAlZCIsIHJldCk7CiAKIAlyZXR1cm4gcmV0OwogCiBlcnJfYWN0aXZhdGVfY2FyZDoKLQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwotCWZyZWVfbmV0ZGV2KHByaXYtPmRldik7Ci0Ja2ZyZWUocHJpdik7CisJZmx1c2hfd29ya3F1ZXVlKGNhcmQtPndvcmtxdWV1ZSk7CisJbGJzX3JlbW92ZV9jYXJkKHByaXYpOwogcmVjbGFpbToKIAlzZGlvX2NsYWltX2hvc3QoZnVuYyk7CiByZWxlYXNlX2ludDoKQEAgLTkzOSw2ICs5NDcsNyBAQAogcmVsZWFzZToKIAlzZGlvX3JlbGVhc2VfaG9zdChmdW5jKTsKIGZyZWU6CisJZGVzdHJveV93b3JrcXVldWUoY2FyZC0+d29ya3F1ZXVlKTsKIAl3aGlsZSAoY2FyZC0+cGFja2V0cykgewogCQlwYWNrZXQgPSBjYXJkLT5wYWNrZXRzOwogCQljYXJkLT5wYWNrZXRzID0gY2FyZC0+cGFja2V0cy0+bmV4dDsKQEAgLTk2NSw3ICs5NzQsOCBAQAogCWxic19zdG9wX2NhcmQoY2FyZC0+cHJpdik7CiAJbGJzX3JlbW92ZV9jYXJkKGNhcmQtPnByaXYpOwogCi0JZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKwlmbHVzaF93b3JrcXVldWUoY2FyZC0+d29ya3F1ZXVlKTsKKwlkZXN0cm95X3dvcmtxdWV1ZShjYXJkLT53b3JrcXVldWUpOwogCiAJc2Rpb19jbGFpbV9ob3N0KGZ1bmMpOwogCXNkaW9fcmVsZWFzZV9pcnEoZnVuYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9zcGkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NwaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3MzExZTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9zcGkuYwpAQCAtMCwwICsxLDEyMTggQEAKKy8qCisgKglsaW51eC9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9zcGkuYworICoKKyAqCURyaXZlciBmb3IgTWFydmVsbCBTUEkgV0xBTiBjYXJkcy4KKyAqCisgKglDb3B5cmlnaHQgMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICoJQXV0aG9yczoKKyAqCUFuZHJleSBZdXJvdnNreSA8YW5kcmV5QGNvenliaXQuY29tPgorICoJQ29saW4gTWNDYWJlIDxjb2xpbkBjb3p5Yml0LmNvbT4KKyAqCisgKglJbnNwaXJlZCBieSBpZl9zZGlvLmMsIENvcHlyaWdodCAyMDA3LTIwMDggUGllcnJlIE9zc21hbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL2xpYmVydGFzX3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKworI2luY2x1ZGUgImhvc3QuaCIKKyNpbmNsdWRlICJkZWNsLmgiCisjaW5jbHVkZSAiZGVmcy5oIgorI2luY2x1ZGUgImRldi5oIgorI2luY2x1ZGUgImlmX3NwaS5oIgorCitzdHJ1Y3QgaWZfc3BpX3BhY2tldCB7CisJc3RydWN0IGxpc3RfaGVhZAkJbGlzdDsKKwl1MTYJCQkJYmxlbjsKKwl1OAkJCQlidWZmZXJbMF0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg0KSkpOworfTsKKworc3RydWN0IGlmX3NwaV9jYXJkIHsKKwlzdHJ1Y3Qgc3BpX2RldmljZQkJKnNwaTsKKwlzdHJ1Y3QgbGJzX3ByaXZhdGUJCSpwcml2OworCXN0cnVjdCBsaWJlcnRhc19zcGlfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CisKKwljaGFyCQkJCWhlbHBlcl9md19uYW1lW0ZJUk1XQVJFX05BTUVfTUFYXTsKKwljaGFyCQkJCW1haW5fZndfbmFtZVtGSVJNV0FSRV9OQU1FX01BWF07CisKKwkvKiBUaGUgY2FyZCBJRCBhbmQgY2FyZCByZXZpc2lvbiwgYXMgcmVwb3J0ZWQgYnkgdGhlIGhhcmR3YXJlLiAqLworCXUxNgkJCQljYXJkX2lkOworCXU4CQkJCWNhcmRfcmV2OworCisJLyogUGluIG51bWJlciBmb3Igb3VyIEdQSU8gY2hpcC1zZWxlY3QuICovCisJLyogVE9ETzogT25jZSB0aGUgZ2VuZXJpYyBTUEkgbGF5ZXIgaGFzIHNvbWUgYWRkaXRpb25hbCBmZWF0dXJlcywgd2UKKwkgKiBzaG91bGQgdGFrZSB0aGlzIG91dCBhbmQgdXNlIHRoZSBub3JtYWwgY2hpcCBzZWxlY3QgaGVyZS4KKwkgKiBXZSBuZWVkIHN1cHBvcnQgZm9yIGNoaXAgc2VsZWN0IGRlbGF5cywgYW5kIG5vdCBkcm9wcGluZyBjaGlwc2VsZWN0CisJICogYWZ0ZXIgZWFjaCB3b3JkLiAqLworCWludAkJCQlncGlvX2NzOworCisJLyogVGhlIGxhc3QgdGltZSB0aGF0IHdlIGluaXRpYXRlZCBhbiBTUFUgb3BlcmF0aW9uICovCisJdW5zaWduZWQgbG9uZwkJCXByZXZfeGZlcl90aW1lOworCisJaW50CQkJCXVzZV9kdW1teV93cml0ZXM7CisJdW5zaWduZWQgbG9uZwkJCXNwdV9wb3J0X2RlbGF5OworCXVuc2lnbmVkIGxvbmcJCQlzcHVfcmVnX2RlbGF5OworCisJLyogSGFuZGxlcyBhbGwgU1BJIGNvbW11bmljYXRpb24gKGV4Y2VwdCBmb3IgRlcgbG9hZCkgKi8KKwlzdHJ1Y3QgdGFza19zdHJ1Y3QJCSpzcGlfdGhyZWFkOworCWludAkJCQlydW5fdGhyZWFkOworCisJLyogVXNlZCB0byB3YWtlIHVwIHRoZSBzcGlfdGhyZWFkICovCisJc3RydWN0IHNlbWFwaG9yZQkJc3BpX3JlYWR5OworCXN0cnVjdCBzZW1hcGhvcmUJCXNwaV90aHJlYWRfdGVybWluYXRlZDsKKworCXU4CQkJCWNtZF9idWZmZXJbSUZfU1BJX0NNRF9CVUZfU0laRV07CisKKwkvKiBBIGJ1ZmZlciBvZiBpbmNvbWluZyBwYWNrZXRzIGZyb20gbGliZXJ0YXMgY29yZS4KKwkgKiBTaW5jZSB3ZSBjYW4ndCBzbGVlcCBpbiBod19ob3N0X3RvX2NhcmQsIHdlIGhhdmUgdG8gYnVmZmVyCisJICogdGhlbS4gKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCQljbWRfcGFja2V0X2xpc3Q7CisJc3RydWN0IGxpc3RfaGVhZAkJZGF0YV9wYWNrZXRfbGlzdDsKKworCS8qIFByb3RlY3RzIGNtZF9wYWNrZXRfbGlzdCBhbmQgZGF0YV9wYWNrZXRfbGlzdCAqLworCXNwaW5sb2NrX3QJCQlidWZmZXJfbG9jazsKK307CisKK3N0YXRpYyB2b2lkIGZyZWVfaWZfc3BpX2NhcmQoc3RydWN0IGlmX3NwaV9jYXJkICpjYXJkKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKmN1cnNvciwgKm5leHQ7CisJc3RydWN0IGlmX3NwaV9wYWNrZXQgKnBhY2tldDsKKworCUJVR19PTihjYXJkLT5ydW5fdGhyZWFkKTsKKwlsaXN0X2Zvcl9lYWNoX3NhZmUoY3Vyc29yLCBuZXh0LCAmY2FyZC0+Y21kX3BhY2tldF9saXN0KSB7CisJCXBhY2tldCA9IGNvbnRhaW5lcl9vZihjdXJzb3IsIHN0cnVjdCBpZl9zcGlfcGFja2V0LCBsaXN0KTsKKwkJbGlzdF9kZWwoJnBhY2tldC0+bGlzdCk7CisJCWtmcmVlKHBhY2tldCk7CisJfQorCWxpc3RfZm9yX2VhY2hfc2FmZShjdXJzb3IsIG5leHQsICZjYXJkLT5kYXRhX3BhY2tldF9saXN0KSB7CisJCXBhY2tldCA9IGNvbnRhaW5lcl9vZihjdXJzb3IsIHN0cnVjdCBpZl9zcGlfcGFja2V0LCBsaXN0KTsKKwkJbGlzdF9kZWwoJnBhY2tldC0+bGlzdCk7CisJCWtmcmVlKHBhY2tldCk7CisJfQorCXNwaV9zZXRfZHJ2ZGF0YShjYXJkLT5zcGksIE5VTEwpOworCWtmcmVlKGNhcmQpOworfQorCitzdGF0aWMgc3RydWN0IGNoaXBfaWRlbnQgY2hpcF9pZF90b19kZXZpY2VfbmFtZVtdID0geworCXsgLmNoaXBfaWQgPSAweDA0LCAubmFtZSA9IDgzODUgfSwKKwl7IC5jaGlwX2lkID0gMHgwYiwgLm5hbWUgPSA4Njg2IH0sCit9OworCisvKgorICogU1BJIEludGVyZmFjZSBVbml0IFJvdXRpbmVzCisgKgorICogVGhlIFNQVSBzaXRzIGJldHdlZW4gdGhlIGhvc3QgYW5kIHRoZSBXTEFOIG1vZHVsZS4KKyAqIEFsbCBjb21tdW5pY2F0aW9uIHdpdGggdGhlIGZpcm13YXJlIGlzIHRocm91Z2ggU1BVIHRyYW5zYWN0aW9ucy4KKyAqCisgKiBGaXJzdCB3ZSBoYXZlIHRvIHB1dCBhIFNQVSByZWdpc3RlciBuYW1lIG9uIHRoZSBidXMuIFRoZW4gd2UgY2FuCisgKiBlaXRoZXIgcmVhZCBmcm9tIG9yIHdyaXRlIHRvIHRoYXQgcmVnaXN0ZXIuCisgKgorICogRm9yIDE2LWJpdCB0cmFuc2FjdGlvbnMsIGJ5dGUgb3JkZXIgb24gdGhlIGJ1cyBpcyBiaWctZW5kaWFuLgorICogV2UgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCB0aGF0IGhlcmUsIHRob3VnaC4KKyAqIFRoZSB0cmFuc2xhdGlvbiB0YWtlcyBwbGFjZSBpbiB0aGUgU1BJIHJvdXRpbmVzLgorICovCisKK3N0YXRpYyB2b2lkIHNwdV90cmFuc2FjdGlvbl9pbml0KHN0cnVjdCBpZl9zcGlfY2FyZCAqY2FyZCkKK3sKKwlpZiAoIXRpbWVfYWZ0ZXIoamlmZmllcywgY2FyZC0+cHJldl94ZmVyX3RpbWUgKyAxKSkgeworCQkvKiBVbmZvcnR1bmF0ZWx5LCB0aGUgU1BVIHJlcXVpcmVzIGEgZGVsYXkgYmV0d2VlbiBzdWNjZXNzaXZlCisJCSAqIHRyYW5zYWN0aW9ucy4gSWYgb3VyIGxhc3QgdHJhbnNhY3Rpb24gd2FzIG1vcmUgdGhhbiBhIGppZmZ5CisJCSAqIGFnbywgd2UgaGF2ZSBvYnZpb3VzbHkgYWxyZWFkeSBkZWxheWVkIGVub3VnaC4KKwkJICogSWYgbm90LCB3ZSBoYXZlIHRvIGJ1c3ktd2FpdCB0byBiZSBvbiB0aGUgc2FmZSBzaWRlLiAqLworCQluZGVsYXkoNDAwKTsKKwl9CisJZ3Bpb19zZXRfdmFsdWUoY2FyZC0+Z3Bpb19jcywgMCk7IC8qIGFzc2VydCBDUyAqLworfQorCitzdGF0aWMgdm9pZCBzcHVfdHJhbnNhY3Rpb25fZmluaXNoKHN0cnVjdCBpZl9zcGlfY2FyZCAqY2FyZCkKK3sKKwlncGlvX3NldF92YWx1ZShjYXJkLT5ncGlvX2NzLCAxKTsgLyogZHJvcCBDUyAqLworCWNhcmQtPnByZXZfeGZlcl90aW1lID0gamlmZmllczsKK30KKworLyogV3JpdGUgb3V0IGEgYnl0ZSBidWZmZXIgdG8gYW4gU1BJIHJlZ2lzdGVyLAorICogdXNpbmcgYSBzZXJpZXMgb2YgMTYtYml0IHRyYW5zZmVycy4gKi8KK3N0YXRpYyBpbnQgc3B1X3dyaXRlKHN0cnVjdCBpZl9zcGlfY2FyZCAqY2FyZCwgdTE2IHJlZywgY29uc3QgdTggKmJ1ZiwgaW50IGxlbikKK3sKKwlpbnQgZXJyID0gMDsKKwl1MTYgcmVnX291dCA9IHJlZyB8IElGX1NQSV9XUklURV9PUEVSQVRJT05fTUFTSzsKKworCS8qIFlvdSBtdXN0IGdpdmUgYW4gZXZlbiBudW1iZXIgb2YgYnl0ZXMgdG8gdGhlIFNQVSwgZXZlbiBpZiBpdAorCSAqIGRvZXNuJ3QgY2FyZSBhYm91dCB0aGUgbGFzdCBvbmUuICAqLworCUJVR19PTihsZW4gJiAweDEpOworCisJc3B1X3RyYW5zYWN0aW9uX2luaXQoY2FyZCk7CisKKwkvKiB3cml0ZSBTUFUgcmVnaXN0ZXIgaW5kZXggKi8KKwllcnIgPSBzcGlfd3JpdGUoY2FyZC0+c3BpLCAodTggKikmcmVnX291dCwgc2l6ZW9mKHUxNikpOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCisJZXJyID0gc3BpX3dyaXRlKGNhcmQtPnNwaSwgYnVmLCBsZW4pOworCitvdXQ6CisJc3B1X3RyYW5zYWN0aW9uX2ZpbmlzaChjYXJkKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW5saW5lIGludCBzcHVfd3JpdGVfdTE2KHN0cnVjdCBpZl9zcGlfY2FyZCAqY2FyZCwgdTE2IHJlZywgdTE2IHZhbCkKK3sKKwlyZXR1cm4gc3B1X3dyaXRlKGNhcmQsIHJlZywgKHU4ICopJnZhbCwgc2l6ZW9mKHUxNikpOworfQorCitzdGF0aWMgaW5saW5lIGludCBzcHVfd3JpdGVfdTMyKHN0cnVjdCBpZl9zcGlfY2FyZCAqY2FyZCwgdTE2IHJlZywgdTMyIHZhbCkKK3sKKwkvKiBUaGUgbG93ZXIgMTYgYml0cyBhcmUgd3JpdHRlbiBmaXJzdC4gKi8KKwl1MTYgb3V0WzJdOworCW91dFswXSA9IHZhbCAmIDB4ZmZmZjsKKwlvdXRbMV0gPSAodmFsICYgMHhmZmZmMDAwMCkgPj4gMTY7CisJcmV0dXJuIHNwdV93cml0ZShjYXJkLCByZWcsICh1OCAqKSZvdXQsIHNpemVvZih1MzIpKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc3B1X3JlZ19pc19wb3J0X3JlZyh1MTYgcmVnKQoreworCXN3aXRjaCAocmVnKSB7CisJY2FzZSBJRl9TUElfSU9fUkRXUlBPUlRfUkVHOgorCWNhc2UgSUZfU1BJX0NNRF9SRFdSUE9SVF9SRUc6CisJY2FzZSBJRl9TUElfREFUQV9SRFdSUE9SVF9SRUc6CisJCXJldHVybiAxOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KK30KKworc3RhdGljIGludCBzcHVfcmVhZChzdHJ1Y3QgaWZfc3BpX2NhcmQgKmNhcmQsIHUxNiByZWcsIHU4ICpidWYsIGludCBsZW4pCit7CisJdW5zaWduZWQgaW50IGksIGRlbGF5OworCWludCBlcnIgPSAwOworCXUxNiB6ZXJvID0gMDsKKwl1MTYgcmVnX291dCA9IHJlZyB8IElGX1NQSV9SRUFEX09QRVJBVElPTl9NQVNLOworCisJLyogWW91IG11c3QgdGFrZSBhbiBldmVuIG51bWJlciBvZiBieXRlcyBmcm9tIHRoZSBTUFUsIGV2ZW4gaWYgeW91CisJICogZG9uJ3QgY2FyZSBhYm91dCB0aGUgbGFzdCBvbmUuICAqLworCUJVR19PTihsZW4gJiAweDEpOworCisJc3B1X3RyYW5zYWN0aW9uX2luaXQoY2FyZCk7CisKKwkvKiB3cml0ZSBTUFUgcmVnaXN0ZXIgaW5kZXggKi8KKwllcnIgPSBzcGlfd3JpdGUoY2FyZC0+c3BpLCAodTggKikmcmVnX291dCwgc2l6ZW9mKHUxNikpOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCisJZGVsYXkgPSBzcHVfcmVnX2lzX3BvcnRfcmVnKHJlZykgPyBjYXJkLT5zcHVfcG9ydF9kZWxheSA6CisJCQkJCQljYXJkLT5zcHVfcmVnX2RlbGF5OworCWlmIChjYXJkLT51c2VfZHVtbXlfd3JpdGVzKSB7CisJCS8qIENsb2NrIGluIGR1bW15IGN5Y2xlcyB3aGlsZSB0aGUgU1BVIGZpbGxzIHRoZSBGSUZPICovCisJCWZvciAoaSA9IDA7IGkgPCBkZWxheSAvIDE2OyArK2kpIHsKKwkJCWVyciA9IHNwaV93cml0ZShjYXJkLT5zcGksICh1OCAqKSZ6ZXJvLCBzaXplb2YodTE2KSk7CisJCQlpZiAoZXJyKQorCQkJCXJldHVybiBlcnI7CisJCX0KKwl9IGVsc2UgeworCQkvKiBCdXN5LXdhaXQgd2hpbGUgdGhlIFNQVSBmaWxscyB0aGUgRklGTyAqLworCQluZGVsYXkoMTAwICsgKGRlbGF5ICogMTApKTsKKwl9CisKKwkvKiByZWFkIGluIGRhdGEgKi8KKwllcnIgPSBzcGlfcmVhZChjYXJkLT5zcGksIGJ1ZiwgbGVuKTsKKworb3V0OgorCXNwdV90cmFuc2FjdGlvbl9maW5pc2goY2FyZCk7CisJcmV0dXJuIGVycjsKK30KKworLyogUmVhZCAxNiBiaXRzIGZyb20gYW4gU1BJIHJlZ2lzdGVyICovCitzdGF0aWMgaW5saW5lIGludCBzcHVfcmVhZF91MTYoc3RydWN0IGlmX3NwaV9jYXJkICpjYXJkLCB1MTYgcmVnLCB1MTYgKnZhbCkKK3sKKwlyZXR1cm4gc3B1X3JlYWQoY2FyZCwgcmVnLCAodTggKil2YWwsIHNpemVvZih1MTYpKTsKK30KKworLyogUmVhZCAzMiBiaXRzIGZyb20gYW4gU1BJIHJlZ2lzdGVyLgorICogVGhlIGxvdyAxNiBiaXRzIGFyZSByZWFkIGZpcnN0LiAqLworc3RhdGljIGludCBzcHVfcmVhZF91MzIoc3RydWN0IGlmX3NwaV9jYXJkICpjYXJkLCB1MTYgcmVnLCB1MzIgKnZhbCkKK3sKKwl1MTYgYnVmWzJdOworCWludCBlcnI7CisJZXJyID0gc3B1X3JlYWQoY2FyZCwgcmVnLCAodTggKilidWYsIHNpemVvZih1MzIpKTsKKwlpZiAoIWVycikKKwkJKnZhbCA9IGJ1ZlswXSB8IChidWZbMV0gPDwgMTYpOworCXJldHVybiBlcnI7Cit9CisKKy8qIEtlZXAgcmVhZGluZyAxNiBiaXRzIGZyb20gYW4gU1BJIHJlZ2lzdGVyIHVudGlsIHlvdSBnZXQgdGhlIGNvcnJlY3QgcmVzdWx0LgorICoKKyAqIElmIG1hc2sgPSAwLCB0aGUgY29ycmVjdCByZXN1bHQgaXMgYW55IG5vbi16ZXJvIG51bWJlci4KKyAqIElmIG1hc2sgIT0gMCwgdGhlIGNvcnJlY3QgcmVzdWx0IGlzIGFueSBudW1iZXIgd2hlcmUKKyAqIG51bWJlciAmIHRhcmdldF9tYXNrID09IHRhcmdldAorICoKKyAqIFJldHVybnMgLUVUSU1FRE9VVCBpZiBhIHNlY29uZCBwYXNzZXMgd2l0aG91dCB0aGUgY29ycmVjdCByZXN1bHQuICovCitzdGF0aWMgaW50IHNwdV93YWl0X2Zvcl91MTYoc3RydWN0IGlmX3NwaV9jYXJkICpjYXJkLCB1MTYgcmVnLAorCQkJdTE2IHRhcmdldF9tYXNrLCB1MTYgdGFyZ2V0KQoreworCWludCBlcnI7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gamlmZmllcyArIDUqSFo7CisJd2hpbGUgKDEpIHsKKwkJdTE2IHZhbDsKKwkJZXJyID0gc3B1X3JlYWRfdTE2KGNhcmQsIHJlZywgJnZhbCk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCQlpZiAodGFyZ2V0X21hc2spIHsKKwkJCWlmICgodmFsICYgdGFyZ2V0X21hc2spID09IHRhcmdldCkKKwkJCQlyZXR1cm4gMDsKKwkJfSBlbHNlIHsKKwkJCWlmICh2YWwpCisJCQkJcmV0dXJuIDA7CisJCX0KKwkJdWRlbGF5KDEwMCk7CisJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKSB7CisJCQlsYnNfcHJfZXJyKCIlczogdGltZW91dCB3aXRoIHZhbD0lMDJ4LCAiCisJCQkgICAgICAgInRhcmdldF9tYXNrPSUwMngsIHRhcmdldD0lMDJ4XG4iLAorCQkJICAgICAgIF9fZnVuY19fLCB2YWwsIHRhcmdldF9tYXNrLCB0YXJnZXQpOworCQkJcmV0dXJuIC1FVElNRURPVVQ7CisJCX0KKwl9Cit9CisKKy8qIFJlYWQgMTYgYml0cyBmcm9tIGFuIFNQSSByZWdpc3RlciB1bnRpbCB5b3UgcmVjZWl2ZSBhIHNwZWNpZmljIHZhbHVlLgorICogUmV0dXJucyAtRVRJTUVET1VUIGlmIGEgNCB0cmllcyBwYXNzIHdpdGhvdXQgc3VjY2Vzcy4gKi8KK3N0YXRpYyBpbnQgc3B1X3dhaXRfZm9yX3UzMihzdHJ1Y3QgaWZfc3BpX2NhcmQgKmNhcmQsIHUzMiByZWcsIHUzMiB0YXJnZXQpCit7CisJaW50IGVyciwgdHJ5OworCWZvciAodHJ5ID0gMDsgdHJ5IDwgNDsgKyt0cnkpIHsKKwkJdTMyIHZhbCA9IDA7CisJCWVyciA9IHNwdV9yZWFkX3UzMihjYXJkLCByZWcsICZ2YWwpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwkJaWYgKHZhbCA9PSB0YXJnZXQpCisJCQlyZXR1cm4gMDsKKwkJbWRlbGF5KDEwMCk7CisJfQorCXJldHVybiAtRVRJTUVET1VUOworfQorCitzdGF0aWMgaW50IHNwdV9zZXRfaW50ZXJydXB0X21vZGUoc3RydWN0IGlmX3NwaV9jYXJkICpjYXJkLAorCQkJICAgaW50IHN1cHByZXNzX2hvc3RfaW50LAorCQkJICAgaW50IGF1dG9faW50KQoreworCWludCBlcnIgPSAwOworCisJLyogV2UgY2FuIHN1cHByZXNzIGEgaG9zdCBpbnRlcnJ1cHQgYnkgY2xlYXJpbmcgdGhlIGFwcHJvcHJpYXRlCisJICogYml0IGluIHRoZSAiaG9zdCBpbnRlcnJ1cHQgc3RhdHVzIG1hc2siIHJlZ2lzdGVyICovCisJaWYgKHN1cHByZXNzX2hvc3RfaW50KSB7CisJCWVyciA9IHNwdV93cml0ZV91MTYoY2FyZCwgSUZfU1BJX0hPU1RfSU5UX1NUQVRVU19NQVNLX1JFRywgMCk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0gZWxzZSB7CisJCWVyciA9IHNwdV93cml0ZV91MTYoY2FyZCwgSUZfU1BJX0hPU1RfSU5UX1NUQVRVU19NQVNLX1JFRywKKwkJCSAgICAgIElGX1NQSV9ISVNNX1RYX0RPV05MT0FEX1JEWSB8CisJCQkgICAgICBJRl9TUElfSElTTV9SWF9VUExPQURfUkRZIHwKKwkJCSAgICAgIElGX1NQSV9ISVNNX0NNRF9ET1dOTE9BRF9SRFkgfAorCQkJICAgICAgSUZfU1BJX0hJU01fQ0FSREVWRU5UIHwKKwkJCSAgICAgIElGX1NQSV9ISVNNX0NNRF9VUExPQURfUkRZKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCisJLyogSWYgYXV0by1pbnRlcnJ1cHRzIGFyZSBvbiwgdGhlIGNvbXBsZXRpb24gb2YgY2VydGFpbiB0cmFuc2FjdGlvbnMKKwkgKiB3aWxsIHRyaWdnZXIgYW4gaW50ZXJydXB0IGF1dG9tYXRpY2FsbHkuIElmIGF1dG8taW50ZXJydXB0cworCSAqIGFyZSBvZmYsIHdlIG5lZWQgdG8gc2V0IHRoZSAiQ2FyZCBJbnRlcnJ1cHQgQ2F1c2UiIHJlZ2lzdGVyIHRvCisJICogdHJpZ2dlciBhIGNhcmQgaW50ZXJydXB0LiAqLworCWlmIChhdXRvX2ludCkgeworCQllcnIgPSBzcHVfd3JpdGVfdTE2KGNhcmQsIElGX1NQSV9IT1NUX0lOVF9DVFJMX1JFRywKKwkJCQlJRl9TUElfSElDVF9UWF9ET1dOTE9BRF9PVkVSX0FVVE8gfAorCQkJCUlGX1NQSV9ISUNUX1JYX1VQTE9BRF9PVkVSX0FVVE8gfAorCQkJCUlGX1NQSV9ISUNUX0NNRF9ET1dOTE9BRF9PVkVSX0FVVE8gfAorCQkJCUlGX1NQSV9ISUNUX0NNRF9VUExPQURfT1ZFUl9BVVRPKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfSBlbHNlIHsKKwkJZXJyID0gc3B1X3dyaXRlX3UxNihjYXJkLCBJRl9TUElfSE9TVF9JTlRfU1RBVFVTX01BU0tfUkVHLCAwKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgc3B1X2dldF9jaGlwX3JldmlzaW9uKHN0cnVjdCBpZl9zcGlfY2FyZCAqY2FyZCwKKwkJCQkgIHUxNiAqY2FyZF9pZCwgdTggKmNhcmRfcmV2KQoreworCWludCBlcnIgPSAwOworCXUzMiBkZXZfY3RybDsKKwllcnIgPSBzcHVfcmVhZF91MzIoY2FyZCwgSUZfU1BJX0RFVklDRUlEX0NUUkxfUkVHLCAmZGV2X2N0cmwpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJKmNhcmRfaWQgPSBJRl9TUElfREVWSUNFSURfQ1RSTF9SRUdfVE9fQ0FSRF9JRChkZXZfY3RybCk7CisJKmNhcmRfcmV2ID0gSUZfU1BJX0RFVklDRUlEX0NUUkxfUkVHX1RPX0NBUkRfUkVWKGRldl9jdHJsKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHNwdV9zZXRfYnVzX21vZGUoc3RydWN0IGlmX3NwaV9jYXJkICpjYXJkLCB1MTYgbW9kZSkKK3sKKwlpbnQgZXJyID0gMDsKKwl1MTYgcnZhbDsKKwkvKiBzZXQgYnVzIG1vZGUgKi8KKwllcnIgPSBzcHVfd3JpdGVfdTE2KGNhcmQsIElGX1NQSV9TUFVfQlVTX01PREVfUkVHLCBtb2RlKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCS8qIENoZWNrIHRoYXQgd2Ugd2VyZSBhYmxlIHRvIHJlYWQgYmFjayB3aGF0IHdlIGp1c3Qgd3JvdGUuICovCisJZXJyID0gc3B1X3JlYWRfdTE2KGNhcmQsIElGX1NQSV9TUFVfQlVTX01PREVfUkVHLCAmcnZhbCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwlpZiAocnZhbCAhPSBtb2RlKSB7CisJCWxic19wcl9lcnIoIkNhbid0IHJlYWQgYnVzIG1vZGUgcmVnaXN0ZXIuXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNwdV9pbml0KHN0cnVjdCBpZl9zcGlfY2FyZCAqY2FyZCwgaW50IHVzZV9kdW1teV93cml0ZXMpCit7CisJaW50IGVyciA9IDA7CisJdTMyIGRlbGF5OworCisJLyogV2UgaGF2ZSB0byBzdGFydCB1cCBpbiB0aW1lZCBkZWxheSBtb2RlIHNvIHRoYXQgd2UgY2FuIHNhZmVseQorCSAqIHJlYWQgdGhlIERlbGF5IFJlYWQgUmVnaXN0ZXIuICovCisJY2FyZC0+dXNlX2R1bW15X3dyaXRlcyA9IDA7CisJZXJyID0gc3B1X3NldF9idXNfbW9kZShjYXJkLAorCQkJCUlGX1NQSV9CVVNfTU9ERV9TUElfQ0xPQ0tfUEhBU0VfUklTSU5HIHwKKwkJCQlJRl9TUElfQlVTX01PREVfREVMQVlfTUVUSE9EX1RJTUVEIHwKKwkJCQlJRl9TUElfQlVTX01PREVfMTZfQklUX0FERFJFU1NfMTZfQklUX0RBVEEpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJY2FyZC0+c3B1X3BvcnRfZGVsYXkgPSAxMDAwOworCWNhcmQtPnNwdV9yZWdfZGVsYXkgPSAxMDAwOworCWVyciA9IHNwdV9yZWFkX3UzMihjYXJkLCBJRl9TUElfREVMQVlfUkVBRF9SRUcsICZkZWxheSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwljYXJkLT5zcHVfcG9ydF9kZWxheSA9IGRlbGF5ICYgMHgwMDAwZmZmZjsKKwljYXJkLT5zcHVfcmVnX2RlbGF5ID0gKGRlbGF5ICYgMHhmZmZmMDAwMCkgPj4gMTY7CisKKwkvKiBJZiBkdW1teSBjbG9jayBkZWxheSBtb2RlIGhhcyBiZWVuIHJlcXVlc3RlZCwgc3dpdGNoIHRvIGl0IG5vdyAqLworCWlmICh1c2VfZHVtbXlfd3JpdGVzKSB7CisJCWNhcmQtPnVzZV9kdW1teV93cml0ZXMgPSAxOworCQllcnIgPSBzcHVfc2V0X2J1c19tb2RlKGNhcmQsCisJCQkJSUZfU1BJX0JVU19NT0RFX1NQSV9DTE9DS19QSEFTRV9SSVNJTkcgfAorCQkJCUlGX1NQSV9CVVNfTU9ERV9ERUxBWV9NRVRIT0RfRFVNTVlfQ0xPQ0sgfAorCQkJCUlGX1NQSV9CVVNfTU9ERV8xNl9CSVRfQUREUkVTU18xNl9CSVRfREFUQSk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCWxic19kZWJfc3BpKCJJbml0aWFsaXplZCBTUFUgdW5pdC4gIgorCQkgICAgInNwdV9wb3J0X2RlbGF5PTB4JTA0bHgsIHNwdV9yZWdfZGVsYXk9MHglMDRseFxuIiwKKwkJICAgIGNhcmQtPnNwdV9wb3J0X2RlbGF5LCBjYXJkLT5zcHVfcmVnX2RlbGF5KTsKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogRmlybXdhcmUgTG9hZGluZworICovCisKK3N0YXRpYyBpbnQgaWZfc3BpX3Byb2dfaGVscGVyX2Zpcm13YXJlKHN0cnVjdCBpZl9zcGlfY2FyZCAqY2FyZCkKK3sKKwlpbnQgZXJyID0gMDsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZpcm13YXJlID0gTlVMTDsKKwlpbnQgYnl0ZXNfcmVtYWluaW5nOworCWNvbnN0IHU4ICpmdzsKKwl1OCB0ZW1wW0hFTFBFUl9GV19MT0FEX0NIVU5LX1NaXTsKKwlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gY2FyZC0+c3BpOworCisJbGJzX2RlYl9lbnRlcihMQlNfREVCX1NQSSk7CisKKwllcnIgPSBzcHVfc2V0X2ludGVycnVwdF9tb2RlKGNhcmQsIDEsIDApOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCS8qIEdldCBoZWxwZXIgZmlybXdhcmUgaW1hZ2UgKi8KKwllcnIgPSByZXF1ZXN0X2Zpcm13YXJlKCZmaXJtd2FyZSwgY2FyZC0+aGVscGVyX2Z3X25hbWUsICZzcGktPmRldik7CisJaWYgKGVycikgeworCQlsYnNfcHJfZXJyKCJyZXF1ZXN0X2Zpcm13YXJlIGZhaWxlZCB3aXRoIGVyciA9ICVkXG4iLCBlcnIpOworCQlnb3RvIG91dDsKKwl9CisJYnl0ZXNfcmVtYWluaW5nID0gZmlybXdhcmUtPnNpemU7CisJZncgPSBmaXJtd2FyZS0+ZGF0YTsKKworCS8qIExvYWQgaGVscGVyIGZpcm13YXJlIGltYWdlICovCisJd2hpbGUgKGJ5dGVzX3JlbWFpbmluZyA+IDApIHsKKwkJLyogU2NyYXRjaCBwYWQgMSBzaG91bGQgY29udGFpbiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdlCisJCSAqIHdhbnQgdG8gZG93bmxvYWQgdG8gdGhlIGZpcm13YXJlICovCisJCWVyciA9IHNwdV93cml0ZV91MTYoY2FyZCwgSUZfU1BJX1NDUkFUQ0hfMV9SRUcsCisJCQkJCUhFTFBFUl9GV19MT0FEX0NIVU5LX1NaKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gcmVsZWFzZV9maXJtd2FyZTsKKworCQllcnIgPSBzcHVfd2FpdF9mb3JfdTE2KGNhcmQsIElGX1NQSV9IT1NUX0lOVF9TVEFUVVNfUkVHLAorCQkJCQlJRl9TUElfSElTVF9DTURfRE9XTkxPQURfUkRZLAorCQkJCQlJRl9TUElfSElTVF9DTURfRE9XTkxPQURfUkRZKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gcmVsZWFzZV9maXJtd2FyZTsKKworCQkvKiBGZWVkIHRoZSBkYXRhIGludG8gdGhlIGNvbW1hbmQgcmVhZC93cml0ZSBwb3J0IHJlZworCQkgKiBpbiBjaHVua3Mgb2YgNjQgYnl0ZXMgKi8KKwkJbWVtc2V0KHRlbXAsIDAsIHNpemVvZih0ZW1wKSk7CisJCW1lbWNweSh0ZW1wLCBmdywKKwkJICAgICAgIG1pbihieXRlc19yZW1haW5pbmcsIEhFTFBFUl9GV19MT0FEX0NIVU5LX1NaKSk7CisJCW1kZWxheSgxMCk7CisJCWVyciA9IHNwdV93cml0ZShjYXJkLCBJRl9TUElfQ01EX1JEV1JQT1JUX1JFRywKKwkJCQkJdGVtcCwgSEVMUEVSX0ZXX0xPQURfQ0hVTktfU1opOworCQlpZiAoZXJyKQorCQkJZ290byByZWxlYXNlX2Zpcm13YXJlOworCisJCS8qIEludGVycnVwdCB0aGUgYm9vdCBjb2RlICovCisJCWVyciA9IHNwdV93cml0ZV91MTYoY2FyZCwgSUZfU1BJX0hPU1RfSU5UX1NUQVRVU19SRUcsIDApOworCQlpZiAoZXJyKQorCQkJZ290byByZWxlYXNlX2Zpcm13YXJlOworCQllcnIgPSBzcHVfd3JpdGVfdTE2KGNhcmQsIElGX1NQSV9DQVJEX0lOVF9DQVVTRV9SRUcsCisJCQkJICAgICAgIElGX1NQSV9DSUNfQ01EX0RPV05MT0FEX09WRVIpOworCQlpZiAoZXJyKQorCQkJZ290byByZWxlYXNlX2Zpcm13YXJlOworCQlieXRlc19yZW1haW5pbmcgLT0gSEVMUEVSX0ZXX0xPQURfQ0hVTktfU1o7CisJCWZ3ICs9IEhFTFBFUl9GV19MT0FEX0NIVU5LX1NaOworCX0KKworCS8qIE9uY2UgdGhlIGhlbHBlciAvIHNpbmdsZSBzdGFnZSBmaXJtd2FyZSBkb3dubG9hZCBpcyBjb21wbGV0ZSwKKwkgKiB3cml0ZSAwIHRvIHNjcmF0Y2ggcGFkIDEgYW5kIGludGVycnVwdCB0aGUKKwkgKiBib290bG9hZGVyLiBUaGlzIGNvbXBsZXRlcyB0aGUgaGVscGVyIGRvd25sb2FkLiAqLworCWVyciA9IHNwdV93cml0ZV91MTYoY2FyZCwgSUZfU1BJX1NDUkFUQ0hfMV9SRUcsIEZJUk1XQVJFX0ROTERfT0spOworCWlmIChlcnIpCisJCWdvdG8gcmVsZWFzZV9maXJtd2FyZTsKKwllcnIgPSBzcHVfd3JpdGVfdTE2KGNhcmQsIElGX1NQSV9IT1NUX0lOVF9TVEFUVVNfUkVHLCAwKTsKKwlpZiAoZXJyKQorCQlnb3RvIHJlbGVhc2VfZmlybXdhcmU7CisJZXJyID0gc3B1X3dyaXRlX3UxNihjYXJkLCBJRl9TUElfQ0FSRF9JTlRfQ0FVU0VfUkVHLAorCQkJCUlGX1NQSV9DSUNfQ01EX0RPV05MT0FEX09WRVIpOworCQlnb3RvIHJlbGVhc2VfZmlybXdhcmU7CisKKwlsYnNfZGViX3NwaSgid2FpdGluZyBmb3IgaGVscGVyIHRvIGJvb3QuLi5cbiIpOworCityZWxlYXNlX2Zpcm13YXJlOgorCXJlbGVhc2VfZmlybXdhcmUoZmlybXdhcmUpOworb3V0OgorCWlmIChlcnIpCisJCWxic19wcl9lcnIoImZhaWxlZCB0byBsb2FkIGhlbHBlciBmaXJtd2FyZSAoZXJyPSVkKVxuIiwgZXJyKTsKKwlsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9TUEksICJlcnIgJWQiLCBlcnIpOworCXJldHVybiBlcnI7Cit9CisKKy8qIFJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgbmV4dCBwYWNrZXQgdGhlIGZpcm13YXJlIGV4cGVjdHMgdXMgdG8gc2VuZAorICogU2V0cyBjcmNfZXJyIGlmIHRoZSBwcmV2aW91cyB0cmFuc2ZlciBoYWQgYSBDUkMgZXJyb3IuICovCitzdGF0aWMgaW50IGlmX3NwaV9wcm9nX21haW5fZmlybXdhcmVfY2hlY2tfbGVuKHN0cnVjdCBpZl9zcGlfY2FyZCAqY2FyZCwKKwkJCQkJCWludCAqY3JjX2VycikKK3sKKwl1MTYgbGVuOworCWludCBlcnIgPSAwOworCisJLyogd2FpdCB1bnRpbCB0aGUgaG9zdCBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyIGluZGljYXRlcworCSAqIHRoYXQgd2UgYXJlIHJlYWR5IHRvIGRvd25sb2FkICovCisJZXJyID0gc3B1X3dhaXRfZm9yX3UxNihjYXJkLCBJRl9TUElfSE9TVF9JTlRfU1RBVFVTX1JFRywKKwkJCQlJRl9TUElfSElTVF9DTURfRE9XTkxPQURfUkRZLAorCQkJCUlGX1NQSV9ISVNUX0NNRF9ET1dOTE9BRF9SRFkpOworCWlmIChlcnIpIHsKKwkJbGJzX3ByX2VycigidGltZWQgb3V0IHdhaXRpbmcgZm9yIGhvc3RfaW50X3N0YXR1c1xuIik7CisJCXJldHVybiBlcnI7CisJfQorCisJLyogQXNrIHRoZSBkZXZpY2UgaG93IG1hbnkgYnl0ZXMgb2YgZmlybXdhcmUgaXQgd2FudHMuICovCisJZXJyID0gc3B1X3JlYWRfdTE2KGNhcmQsIElGX1NQSV9TQ1JBVENIXzFfUkVHLCAmbGVuKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJaWYgKGxlbiA+IElGX1NQSV9DTURfQlVGX1NJWkUpIHsKKwkJbGJzX3ByX2VycigiZmlybXdhcmUgbG9hZCBkZXZpY2UgcmVxdWVzdGVkIGEgbGFyZ2VyICIKKwkJCSAgICJ0cmFuZmVyIHRoYW4gd2UgYXJlIHByZXBhcmVkIHRvICIKKwkJCSAgICJoYW5kbGUuIChsZW4gPSAlZClcbiIsIGxlbik7CisJCXJldHVybiAtRUlPOworCX0KKwlpZiAobGVuICYgMHgxKSB7CisJCWxic19kZWJfc3BpKCIlczogY3JjIGVycm9yXG4iLCBfX2Z1bmNfXyk7CisJCWxlbiAmPSB+MHgxOworCQkqY3JjX2VyciA9IDE7CisJfSBlbHNlCisJCSpjcmNfZXJyID0gMDsKKworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBpbnQgaWZfc3BpX3Byb2dfbWFpbl9maXJtd2FyZShzdHJ1Y3QgaWZfc3BpX2NhcmQgKmNhcmQpCit7CisJaW50IGxlbiwgcHJldl9sZW47CisJaW50IGJ5dGVzLCBjcmNfZXJyID0gMCwgZXJyID0gMDsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZpcm13YXJlID0gTlVMTDsKKwljb25zdCB1OCAqZnc7CisJc3RydWN0IHNwaV9kZXZpY2UgKnNwaSA9IGNhcmQtPnNwaTsKKwl1MTYgbnVtX2NyY19lcnJzOworCisJbGJzX2RlYl9lbnRlcihMQlNfREVCX1NQSSk7CisKKwllcnIgPSBzcHVfc2V0X2ludGVycnVwdF9tb2RlKGNhcmQsIDEsIDApOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCisJLyogR2V0IGZpcm13YXJlIGltYWdlICovCisJZXJyID0gcmVxdWVzdF9maXJtd2FyZSgmZmlybXdhcmUsIGNhcmQtPm1haW5fZndfbmFtZSwgJnNwaS0+ZGV2KTsKKwlpZiAoZXJyKSB7CisJCWxic19wcl9lcnIoIiVzOiBjYW4ndCBnZXQgZmlybXdhcmUgJyVzJyBmcm9tIGtlcm5lbC4gIgorCQkJImVyciA9ICVkXG4iLCBfX2Z1bmNfXywgY2FyZC0+bWFpbl9md19uYW1lLCBlcnIpOworCQlnb3RvIG91dDsKKwl9CisKKwllcnIgPSBzcHVfd2FpdF9mb3JfdTE2KGNhcmQsIElGX1NQSV9TQ1JBVENIXzFfUkVHLCAwLCAwKTsKKwlpZiAoZXJyKSB7CisJCWxic19wcl9lcnIoIiVzOiB0aW1lZCBvdXQgd2FpdGluZyBmb3IgaW5pdGlhbCAiCisJCQkgICAic2NyYXRjaCByZWcgPSAwXG4iLCBfX2Z1bmNfXyk7CisJCWdvdG8gcmVsZWFzZV9maXJtd2FyZTsKKwl9CisKKwludW1fY3JjX2VycnMgPSAwOworCXByZXZfbGVuID0gMDsKKwlieXRlcyA9IGZpcm13YXJlLT5zaXplOworCWZ3ID0gZmlybXdhcmUtPmRhdGE7CisJd2hpbGUgKChsZW4gPSBpZl9zcGlfcHJvZ19tYWluX2Zpcm13YXJlX2NoZWNrX2xlbihjYXJkLCAmY3JjX2VycikpKSB7CisJCWlmIChsZW4gPCAwKSB7CisJCQllcnIgPSBsZW47CisJCQlnb3RvIHJlbGVhc2VfZmlybXdhcmU7CisJCX0KKwkJaWYgKGJ5dGVzIDwgMCkgeworCQkJLyogSWYgdGhlcmUgYXJlIG5vIG1vcmUgYnl0ZXMgbGVmdCwgd2Ugd291bGQgbm9ybWFsbHkKKwkJCSAqIGV4cGVjdCB0byBoYXZlIHRlcm1pbmF0ZWQgd2l0aCBsZW4gPSAwICovCisJCQlsYnNfcHJfZXJyKCJGaXJtd2FyZSBsb2FkIHdhbnRzIG1vcmUgYnl0ZXMgIgorCQkJCSAgICJ0aGFuIHdlIGhhdmUgdG8gb2ZmZXIuXG4iKTsKKwkJCWJyZWFrOworCQl9CisJCWlmIChjcmNfZXJyKSB7CisJCQkvKiBQcmV2aW91cyB0cmFuc2ZlciBmYWlsZWQuICovCisJCQlpZiAoKytudW1fY3JjX2VycnMgPiBNQVhfTUFJTl9GV19MT0FEX0NSQ19FUlIpIHsKKwkJCQlsYnNfcHJfZXJyKCJUb28gbWFueSBDUkMgZXJyb3JzIGVuY291bnRlcmVkICIKKwkJCQkJICAgImluIGZpcm13YXJlIGxvYWQuXG4iKTsKKwkJCQllcnIgPSAtRUlPOworCQkJCWdvdG8gcmVsZWFzZV9maXJtd2FyZTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qIFByZXZpb3VzIHRyYW5zZmVyIHN1Y2NlZWRlZC4gQWR2YW5jZSBjb3VudGVycy4gKi8KKwkJCWJ5dGVzIC09IHByZXZfbGVuOworCQkJZncgKz0gcHJldl9sZW47CisJCX0KKwkJaWYgKGJ5dGVzIDwgbGVuKSB7CisJCQltZW1zZXQoY2FyZC0+Y21kX2J1ZmZlciwgMCwgbGVuKTsKKwkJCW1lbWNweShjYXJkLT5jbWRfYnVmZmVyLCBmdywgYnl0ZXMpOworCQl9IGVsc2UKKwkJCW1lbWNweShjYXJkLT5jbWRfYnVmZmVyLCBmdywgbGVuKTsKKworCQllcnIgPSBzcHVfd3JpdGVfdTE2KGNhcmQsIElGX1NQSV9IT1NUX0lOVF9TVEFUVVNfUkVHLCAwKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gcmVsZWFzZV9maXJtd2FyZTsKKwkJZXJyID0gc3B1X3dyaXRlKGNhcmQsIElGX1NQSV9DTURfUkRXUlBPUlRfUkVHLAorCQkJCWNhcmQtPmNtZF9idWZmZXIsIGxlbik7CisJCWlmIChlcnIpCisJCQlnb3RvIHJlbGVhc2VfZmlybXdhcmU7CisJCWVyciA9IHNwdV93cml0ZV91MTYoY2FyZCwgSUZfU1BJX0NBUkRfSU5UX0NBVVNFX1JFRyAsCisJCQkJCUlGX1NQSV9DSUNfQ01EX0RPV05MT0FEX09WRVIpOworCQlpZiAoZXJyKQorCQkJZ290byByZWxlYXNlX2Zpcm13YXJlOworCQlwcmV2X2xlbiA9IGxlbjsKKwl9CisJaWYgKGJ5dGVzID4gcHJldl9sZW4pIHsKKwkJbGJzX3ByX2VycigiZmlybXdhcmUgbG9hZCB3YW50cyBmZXdlciBieXRlcyB0aGFuICIKKwkJCSAgICJ3ZSBoYXZlIHRvIG9mZmVyLlxuIik7CisJfQorCisJLyogQ29uZmlybSBmaXJtd2FyZSBkb3dubG9hZCAqLworCWVyciA9IHNwdV93YWl0X2Zvcl91MzIoY2FyZCwgSUZfU1BJX1NDUkFUQ0hfNF9SRUcsCisJCQkJCVNVQ0NFU1NGVUxfRldfRE9XTkxPQURfTUFHSUMpOworCWlmIChlcnIpIHsKKwkJbGJzX3ByX2VycigiZmFpbGVkIHRvIGNvbmZpcm0gdGhlIGZpcm13YXJlIGRvd25sb2FkXG4iKTsKKwkJZ290byByZWxlYXNlX2Zpcm13YXJlOworCX0KKworcmVsZWFzZV9maXJtd2FyZToKKwlyZWxlYXNlX2Zpcm13YXJlKGZpcm13YXJlKTsKKworb3V0OgorCWlmIChlcnIpCisJCWxic19wcl9lcnIoImZhaWxlZCB0byBsb2FkIGZpcm13YXJlIChlcnI9JWQpXG4iLCBlcnIpOworCWxic19kZWJfbGVhdmVfYXJncyhMQlNfREVCX1NQSSwgImVyciAlZCIsIGVycik7CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIFNQSSBUcmFuc2ZlciBUaHJlYWQKKyAqCisgKiBUaGUgU1BJIHRocmVhZCBoYW5kbGVzIGFsbCBTUEkgdHJhbnNmZXJzLCBzbyB0aGVyZSBpcyBubyBuZWVkIGZvciBhIGxvY2suCisgKi8KKworLyogTW92ZSBhIGNvbW1hbmQgZnJvbSB0aGUgY2FyZCB0byB0aGUgaG9zdCAqLworc3RhdGljIGludCBpZl9zcGlfYzJoX2NtZChzdHJ1Y3QgaWZfc3BpX2NhcmQgKmNhcmQpCit7CisJc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gY2FyZC0+cHJpdjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBlcnIgPSAwOworCXUxNiBsZW47CisJdTggaTsKKworCS8qIFdlIG5lZWQgYSBidWZmZXIgYmlnIGVub3VnaCB0byBoYW5kbGUgd2hhdGV2ZXIgcGVvcGxlIHNlbmQgdG8KKwkgKiBod19ob3N0X3RvX2NhcmQgKi8KKwlCVUlMRF9CVUdfT04oSUZfU1BJX0NNRF9CVUZfU0laRSA8IExCU19DTURfQlVGRkVSX1NJWkUpOworCUJVSUxEX0JVR19PTihJRl9TUElfQ01EX0JVRl9TSVpFIDwgTEJTX1VQTERfU0laRSk7CisKKwkvKiBJdCdzIGp1c3QgYW5ub3lpbmcgaWYgdGhlIGJ1ZmZlciBzaXplIGlzbid0IGEgbXVsdGlwbGUgb2YgNCwgYmVjYXVzZQorCSAqIHRoZW4gd2UgbWlnaHQgaGF2ZSBsZW4gPCAgSUZfU1BJX0NNRF9CVUZfU0laRSBidXQKKwkgKiBBTElHTihsZW4sIDQpID4gSUZfU1BJX0NNRF9CVUZfU0laRSAqLworCUJVSUxEX0JVR19PTihJRl9TUElfQ01EX0JVRl9TSVpFICUgNCAhPSAwKTsKKworCWxic19kZWJfZW50ZXIoTEJTX0RFQl9TUEkpOworCisJLyogSG93IG1hbnkgYnl0ZXMgYXJlIHRoZXJlIHRvIHJlYWQ/ICovCisJZXJyID0gc3B1X3JlYWRfdTE2KGNhcmQsIElGX1NQSV9TQ1JBVENIXzJfUkVHLCAmbGVuKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKwlpZiAoIWxlbikgeworCQlsYnNfcHJfZXJyKCIlczogZXJyb3I6IGNhcmQgaGFzIG5vIGRhdGEgZm9yIGhvc3RcbiIsCisJCQkgICBfX2Z1bmNfXyk7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0gZWxzZSBpZiAobGVuID4gSUZfU1BJX0NNRF9CVUZfU0laRSkgeworCQlsYnNfcHJfZXJyKCIlczogZXJyb3I6IHJlc3BvbnNlIHBhY2tldCB0b28gbGFyZ2U6ICIKKwkJCSAgICIlZCBieXRlcywgYnV0IG1heGltdW0gaXMgJWRcbiIsCisJCQkgICBfX2Z1bmNfXywgbGVuLCBJRl9TUElfQ01EX0JVRl9TSVpFKTsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJLyogUmVhZCB0aGUgZGF0YSBmcm9tIHRoZSBXTEFOIG1vZHVsZSBpbnRvIG91ciBjb21tYW5kIGJ1ZmZlciAqLworCWVyciA9IHNwdV9yZWFkKGNhcmQsIElGX1NQSV9DTURfUkRXUlBPUlRfUkVHLAorCQkJCWNhcmQtPmNtZF9idWZmZXIsIEFMSUdOKGxlbiwgNCkpOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmRyaXZlcl9sb2NrLCBmbGFncyk7CisJaSA9IChwcml2LT5yZXNwX2lkeCA9PSAwKSA/IDEgOiAwOworCUJVR19PTihwcml2LT5yZXNwX2xlbltpXSk7CisJcHJpdi0+cmVzcF9sZW5baV0gPSBsZW47CisJbWVtY3B5KHByaXYtPnJlc3BfYnVmW2ldLCBjYXJkLT5jbWRfYnVmZmVyLCBsZW4pOworCWxic19ub3RpZnlfY29tbWFuZF9yZXNwb25zZShwcml2LCBpKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5kcml2ZXJfbG9jaywgZmxhZ3MpOworCitvdXQ6CisJaWYgKGVycikKKwkJbGJzX3ByX2VycigiJXM6IGVycj0lZFxuIiwgX19mdW5jX18sIGVycik7CisJbGJzX2RlYl9sZWF2ZShMQlNfREVCX1NQSSk7CisJcmV0dXJuIGVycjsKK30KKworLyogTW92ZSBkYXRhIGZyb20gdGhlIGNhcmQgdG8gdGhlIGhvc3QgKi8KK3N0YXRpYyBpbnQgaWZfc3BpX2MyaF9kYXRhKHN0cnVjdCBpZl9zcGlfY2FyZCAqY2FyZCkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCWNoYXIgKmRhdGE7CisJdTE2IGxlbjsKKwlpbnQgZXJyID0gMDsKKworCWxic19kZWJfZW50ZXIoTEJTX0RFQl9TUEkpOworCisJLyogSG93IG1hbnkgYnl0ZXMgYXJlIHRoZXJlIHRvIHJlYWQ/ICovCisJZXJyID0gc3B1X3JlYWRfdTE2KGNhcmQsIElGX1NQSV9TQ1JBVENIXzFfUkVHLCAmbGVuKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKwlpZiAoIWxlbikgeworCQlsYnNfcHJfZXJyKCIlczogZXJyb3I6IGNhcmQgaGFzIG5vIGRhdGEgZm9yIGhvc3RcbiIsCisJCQkgICBfX2Z1bmNfXyk7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0gZWxzZSBpZiAobGVuID4gTVJWRFJWX0VUSF9SWF9QQUNLRVRfQlVGRkVSX1NJWkUpIHsKKwkJbGJzX3ByX2VycigiJXM6IGVycm9yOiBjYXJkIGhhcyAlZCBieXRlcyBvZiBkYXRhLCBidXQgIgorCQkJICAgIm91ciBtYXhpbXVtIHNrYiBzaXplIGlzICV1XG4iLAorCQkJICAgX19mdW5jX18sIGxlbiwgTVJWRFJWX0VUSF9SWF9QQUNLRVRfQlVGRkVSX1NJWkUpOworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBUT0RPOiBzaG91bGQgd2UgYWxsb2NhdGUgYSBzbWFsbGVyIHNrYiBpZiB3ZSBoYXZlIGxlc3MgZGF0YT8gKi8KKwlza2IgPSBkZXZfYWxsb2Nfc2tiKE1SVkRSVl9FVEhfUlhfUEFDS0VUX0JVRkZFUl9TSVpFKTsKKwlpZiAoIXNrYikgeworCQllcnIgPSAtRU5PQlVGUzsKKwkJZ290byBvdXQ7CisJfQorCXNrYl9yZXNlcnZlKHNrYiwgSVBGSUVMRF9BTElHTl9PRkZTRVQpOworCWRhdGEgPSBza2JfcHV0KHNrYiwgbGVuKTsKKworCS8qIFJlYWQgdGhlIGRhdGEgZnJvbSB0aGUgV0xBTiBtb2R1bGUgaW50byBvdXIgc2tiLi4uICovCisJZXJyID0gc3B1X3JlYWQoY2FyZCwgSUZfU1BJX0RBVEFfUkRXUlBPUlRfUkVHLCBkYXRhLCBBTElHTihsZW4sIDQpKTsKKwlpZiAoZXJyKQorCQlnb3RvIGZyZWVfc2tiOworCisJLyogcGFzcyB0aGUgU0tCIHRvIGxpYmVydGFzICovCisJZXJyID0gbGJzX3Byb2Nlc3NfcnhlZF9wYWNrZXQoY2FyZC0+cHJpdiwgc2tiKTsKKwlpZiAoZXJyKQorCQlnb3RvIGZyZWVfc2tiOworCisJLyogc3VjY2VzcyAqLworCWdvdG8gb3V0OworCitmcmVlX3NrYjoKKwlkZXZfa2ZyZWVfc2tiKHNrYik7CitvdXQ6CisJaWYgKGVycikKKwkJbGJzX3ByX2VycigiJXM6IGVycj0lZFxuIiwgX19mdW5jX18sIGVycik7CisJbGJzX2RlYl9sZWF2ZShMQlNfREVCX1NQSSk7CisJcmV0dXJuIGVycjsKK30KKworLyogTW92ZSBkYXRhIG9yIGEgY29tbWFuZCBmcm9tIHRoZSBob3N0IHRvIHRoZSBjYXJkLiAqLworc3RhdGljIHZvaWQgaWZfc3BpX2gyYyhzdHJ1Y3QgaWZfc3BpX2NhcmQgKmNhcmQsCisJCQlzdHJ1Y3QgaWZfc3BpX3BhY2tldCAqcGFja2V0LCBpbnQgdHlwZSkKK3sKKwlpbnQgZXJyID0gMDsKKwl1MTYgaW50X3R5cGUsIHBvcnRfcmVnOworCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBNVk1TX0RBVDoKKwkJaW50X3R5cGUgPSBJRl9TUElfQ0lDX1RYX0RPV05MT0FEX09WRVI7CisJCXBvcnRfcmVnID0gSUZfU1BJX0RBVEFfUkRXUlBPUlRfUkVHOworCQlicmVhazsKKwljYXNlIE1WTVNfQ01EOgorCQlpbnRfdHlwZSA9IElGX1NQSV9DSUNfQ01EX0RPV05MT0FEX09WRVI7CisJCXBvcnRfcmVnID0gSUZfU1BJX0NNRF9SRFdSUE9SVF9SRUc7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWxic19wcl9lcnIoImNhbid0IHRyYW5zZmVyIGJ1ZmZlciBvZiB0eXBlICVkXG4iLCB0eXBlKTsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJLyogV3JpdGUgdGhlIGRhdGEgdG8gdGhlIGNhcmQgKi8KKwllcnIgPSBzcHVfd3JpdGUoY2FyZCwgcG9ydF9yZWcsIHBhY2tldC0+YnVmZmVyLCBwYWNrZXQtPmJsZW4pOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCitvdXQ6CisJa2ZyZWUocGFja2V0KTsKKworCWlmIChlcnIpCisJCWxic19wcl9lcnIoIiVzOiBlcnJvciAlZFxuIiwgX19mdW5jX18sIGVycik7Cit9CisKKy8qIEluZm9ybSB0aGUgaG9zdCBhYm91dCBhIGNhcmQgZXZlbnQgKi8KK3N0YXRpYyB2b2lkIGlmX3NwaV9lMmgoc3RydWN0IGlmX3NwaV9jYXJkICpjYXJkKQoreworCWludCBlcnIgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIGNhdXNlOworCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IGNhcmQtPnByaXY7CisKKwllcnIgPSBzcHVfcmVhZF91MzIoY2FyZCwgSUZfU1BJX1NDUkFUQ0hfM19SRUcsICZjYXVzZSk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+ZHJpdmVyX2xvY2ssIGZsYWdzKTsKKwlsYnNfcXVldWVfZXZlbnQocHJpdiwgY2F1c2UgJiAweGZmKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5kcml2ZXJfbG9jaywgZmxhZ3MpOworCitvdXQ6CisJaWYgKGVycikKKwkJbGJzX3ByX2VycigiJXM6IGVycm9yICVkXG4iLCBfX2Z1bmNfXywgZXJyKTsKK30KKworc3RhdGljIGludCBsYnNfc3BpX3RocmVhZCh2b2lkICpkYXRhKQoreworCWludCBlcnI7CisJc3RydWN0IGlmX3NwaV9jYXJkICpjYXJkID0gZGF0YTsKKwl1MTYgaGlTdGF0dXM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgaWZfc3BpX3BhY2tldCAqcGFja2V0OworCisJd2hpbGUgKDEpIHsKKwkJLyogV2FpdCB0byBiZSB3b2tlbiB1cCBieSBvbmUgb2YgdHdvIHRoaW5ncy4gIEZpcnN0LCBvdXIgSVNSCisJCSAqIGNvdWxkIHRlbGwgdXMgdGhhdCBzb21ldGhpbmcgaGFwcGVuZWQgb24gdGhlIFdMQU4uCisJCSAqIFNlY29uZGx5LCBsaWJlcnRhcyBjb3VsZCBjYWxsIGh3X2hvc3RfdG9fY2FyZCB3aXRoIG1vcmUKKwkJICogZGF0YSwgd2hpY2ggd2UgbWlnaHQgYmUgYWJsZSB0byBzZW5kLgorCQkgKi8KKwkJZG8geworCQkJZXJyID0gZG93bl9pbnRlcnJ1cHRpYmxlKCZjYXJkLT5zcGlfcmVhZHkpOworCQkJaWYgKCFjYXJkLT5ydW5fdGhyZWFkKSB7CisJCQkJdXAoJmNhcmQtPnNwaV90aHJlYWRfdGVybWluYXRlZCk7CisJCQkJZG9fZXhpdCgwKTsKKwkJCX0KKwkJfSB3aGlsZSAoZXJyID09IEVJTlRSKTsKKworCQkvKiBSZWFkIHRoZSBob3N0IGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIgdG8gc2VlIHdoYXQgd2UKKwkJICogY2FuIGRvLiAqLworCQllcnIgPSBzcHVfcmVhZF91MTYoY2FyZCwgSUZfU1BJX0hPU1RfSU5UX1NUQVRVU19SRUcsCisJCQkJCSZoaVN0YXR1cyk7CisJCWlmIChlcnIpIHsKKwkJCWxic19wcl9lcnIoIkkvTyBlcnJvclxuIik7CisJCQlnb3RvIGVycjsKKwkJfQorCisJCWlmIChoaVN0YXR1cyAmIElGX1NQSV9ISVNUX0NNRF9VUExPQURfUkRZKQorCQkJZXJyID0gaWZfc3BpX2MyaF9jbWQoY2FyZCk7CisJCQlpZiAoZXJyKQorCQkJCWdvdG8gZXJyOworCQlpZiAoaGlTdGF0dXMgJiBJRl9TUElfSElTVF9SWF9VUExPQURfUkRZKQorCQkJZXJyID0gaWZfc3BpX2MyaF9kYXRhKGNhcmQpOworCQkJaWYgKGVycikKKwkJCQlnb3RvIGVycjsKKwkJaWYgKGhpU3RhdHVzICYgSUZfU1BJX0hJU1RfQ01EX0RPV05MT0FEX1JEWSkgeworCQkJLyogVGhpcyBtZWFucyB0d28gdGhpbmdzLiBGaXJzdCBvZiBhbGwsCisJCQkgKiBpZiB0aGVyZSB3YXMgYSBwcmV2aW91cyBjb21tYW5kIHNlbnQsIHRoZSBjYXJkIGhhcworCQkJICogc3VjY2Vzc2Z1bGx5IHJlY2VpdmVkIGl0LgorCQkJICogU2Vjb25kbHksIGl0IGlzIG5vdyByZWFkeSB0byBkb3dubG9hZCBhbm90aGVyCisJCQkgKiBjb21tYW5kLgorCQkJICovCisJCQlsYnNfaG9zdF90b19jYXJkX2RvbmUoY2FyZC0+cHJpdik7CisKKwkJCS8qIERvIHdlIGhhdmUgYW55IGNvbW1hbmQgcGFja2V0cyBmcm9tIHRoZSBob3N0IHRvCisJCQkgKiBzZW5kPyAqLworCQkJcGFja2V0ID0gTlVMTDsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5idWZmZXJfbG9jaywgZmxhZ3MpOworCQkJaWYgKCFsaXN0X2VtcHR5KCZjYXJkLT5jbWRfcGFja2V0X2xpc3QpKSB7CisJCQkJcGFja2V0ID0gKHN0cnVjdCBpZl9zcGlfcGFja2V0ICopKGNhcmQtPgorCQkJCQkJY21kX3BhY2tldF9saXN0Lm5leHQpOworCQkJCWxpc3RfZGVsKCZwYWNrZXQtPmxpc3QpOworCQkJfQorCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+YnVmZmVyX2xvY2ssIGZsYWdzKTsKKworCQkJaWYgKHBhY2tldCkKKwkJCQlpZl9zcGlfaDJjKGNhcmQsIHBhY2tldCwgTVZNU19DTUQpOworCQl9CisJCWlmIChoaVN0YXR1cyAmIElGX1NQSV9ISVNUX1RYX0RPV05MT0FEX1JEWSkgeworCQkJLyogRG8gd2UgaGF2ZSBhbnkgZGF0YSBwYWNrZXRzIGZyb20gdGhlIGhvc3QgdG8KKwkJCSAqIHNlbmQ/ICovCisJCQlwYWNrZXQgPSBOVUxMOworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmJ1ZmZlcl9sb2NrLCBmbGFncyk7CisJCQlpZiAoIWxpc3RfZW1wdHkoJmNhcmQtPmRhdGFfcGFja2V0X2xpc3QpKSB7CisJCQkJcGFja2V0ID0gKHN0cnVjdCBpZl9zcGlfcGFja2V0ICopKGNhcmQtPgorCQkJCQkJZGF0YV9wYWNrZXRfbGlzdC5uZXh0KTsKKwkJCQlsaXN0X2RlbCgmcGFja2V0LT5saXN0KTsKKwkJCX0KKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmJ1ZmZlcl9sb2NrLCBmbGFncyk7CisKKwkJCWlmIChwYWNrZXQpCisJCQkJaWZfc3BpX2gyYyhjYXJkLCBwYWNrZXQsIE1WTVNfREFUKTsKKwkJfQorCQlpZiAoaGlTdGF0dXMgJiBJRl9TUElfSElTVF9DQVJEX0VWRU5UKQorCQkJaWZfc3BpX2UyaChjYXJkKTsKKworZXJyOgorCQlpZiAoZXJyKQorCQkJbGJzX3ByX2VycigiJXM6IGdvdCBlcnJvciAlZFxuIiwgX19mdW5jX18sIGVycik7CisJfQorfQorCisvKiBCbG9jayB1bnRpbCBsYnNfc3BpX3RocmVhZCB0aHJlYWQgaGFzIHRlcm1pbmF0ZWQgKi8KK3N0YXRpYyB2b2lkIGlmX3NwaV90ZXJtaW5hdGVfc3BpX3RocmVhZChzdHJ1Y3QgaWZfc3BpX2NhcmQgKmNhcmQpCit7CisJLyogSXQgd291bGQgYmUgbmljZSB0byB1c2Uga3RocmVhZF9zdG9wIGhlcmUsIGJ1dCB0aGF0IGZ1bmN0aW9uCisJICogY2FuJ3Qgd2FrZSB0aHJlYWRzIHdhaXRpbmcgZm9yIGEgc2VtYXBob3JlLiAqLworCWNhcmQtPnJ1bl90aHJlYWQgPSAwOworCXVwKCZjYXJkLT5zcGlfcmVhZHkpOworCWRvd24oJmNhcmQtPnNwaV90aHJlYWRfdGVybWluYXRlZCk7Cit9CisKKy8qCisgKiBIb3N0IHRvIENhcmQKKyAqCisgKiBDYWxsZWQgZnJvbSBMaWJlcnRhcyB0byB0cmFuc2ZlciBzb21lIGRhdGEgdG8gdGhlIFdMQU4gZGV2aWNlCisgKiBXZSBjYW4ndCBzbGVlcCBoZXJlLiAqLworc3RhdGljIGludCBpZl9zcGlfaG9zdF90b19jYXJkKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwKKwkJCQl1OCB0eXBlLCB1OCAqYnVmLCB1MTYgbmIpCit7CisJaW50IGVyciA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgaWZfc3BpX2NhcmQgKmNhcmQgPSBwcml2LT5jYXJkOworCXN0cnVjdCBpZl9zcGlfcGFja2V0ICpwYWNrZXQ7CisJdTE2IGJsZW47CisKKwlsYnNfZGViX2VudGVyX2FyZ3MoTEJTX0RFQl9TUEksICJ0eXBlICVkLCBieXRlcyAlZCIsIHR5cGUsIG5iKTsKKworCWlmIChuYiA9PSAwKSB7CisJCWxic19wcl9lcnIoIiVzOiBpbnZhbGlkIHNpemUgcmVxdWVzdGVkOiAlZFxuIiwgX19mdW5jX18sIG5iKTsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCWJsZW4gPSBBTElHTihuYiwgNCk7CisJcGFja2V0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGlmX3NwaV9wYWNrZXQpICsgYmxlbiwgR0ZQX0FUT01JQyk7CisJaWYgKCFwYWNrZXQpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCXBhY2tldC0+YmxlbiA9IGJsZW47CisJbWVtY3B5KHBhY2tldC0+YnVmZmVyLCBidWYsIG5iKTsKKwltZW1zZXQocGFja2V0LT5idWZmZXIgKyBuYiwgMCwgYmxlbiAtIG5iKTsKKworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgTVZNU19DTUQ6CisJCXByaXYtPmRubGRfc2VudCA9IEROTERfQ01EX1NFTlQ7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5idWZmZXJfbG9jaywgZmxhZ3MpOworCQlsaXN0X2FkZF90YWlsKCZwYWNrZXQtPmxpc3QsICZjYXJkLT5jbWRfcGFja2V0X2xpc3QpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5idWZmZXJfbG9jaywgZmxhZ3MpOworCQlicmVhazsKKwljYXNlIE1WTVNfREFUOgorCQlwcml2LT5kbmxkX3NlbnQgPSBETkxEX0RBVEFfU0VOVDsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmJ1ZmZlcl9sb2NrLCBmbGFncyk7CisJCWxpc3RfYWRkX3RhaWwoJnBhY2tldC0+bGlzdCwgJmNhcmQtPmRhdGFfcGFja2V0X2xpc3QpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5idWZmZXJfbG9jaywgZmxhZ3MpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlsYnNfcHJfZXJyKCJjYW4ndCB0cmFuc2ZlciBidWZmZXIgb2YgdHlwZSAlZCIsIHR5cGUpOworCQllcnIgPSAtRUlOVkFMOworCQlicmVhazsKKwl9CisKKwkvKiBXYWtlIHVwIHRoZSBzcGkgdGhyZWFkICovCisJdXAoJmNhcmQtPnNwaV9yZWFkeSk7CitvdXQ6CisJbGJzX2RlYl9sZWF2ZV9hcmdzKExCU19ERUJfU1BJLCAiZXJyPSVkIiwgZXJyKTsKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogSG9zdCBJbnRlcnJ1cHRzCisgKgorICogU2VydmljZSBpbmNvbWluZyBpbnRlcnJ1cHRzIGZyb20gdGhlIFdMQU4gZGV2aWNlLiBXZSBjYW4ndCBzbGVlcCBoZXJlLCBzbworICogZG9uJ3QgdHJ5IHRvIHRhbGsgb24gdGhlIFNQSSBidXMsIGp1c3Qgd2FrZSB1cCB0aGUgU1BJIHRocmVhZC4KKyAqLworc3RhdGljIGlycXJldHVybl90IGlmX3NwaV9ob3N0X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IGlmX3NwaV9jYXJkICpjYXJkID0gZGV2X2lkOworCisJdXAoJmNhcmQtPnNwaV9yZWFkeSk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKgorICogU1BJIGNhbGxiYWNrcworICovCisKK3N0YXRpYyBpbnQgaWZfc3BpX2NhbGN1bGF0ZV9md19uYW1lcyh1MTYgY2FyZF9pZCwKKwkJCSAgICAgIGNoYXIgKmhlbHBlcl9mdywgY2hhciAqbWFpbl9mdykKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjaGlwX2lkX3RvX2RldmljZV9uYW1lKTsgKytpKSB7CisJCWlmIChjYXJkX2lkID09IGNoaXBfaWRfdG9fZGV2aWNlX25hbWVbaV0uY2hpcF9pZCkKKwkJCWJyZWFrOworCX0KKwlpZiAoaSA9PSBBUlJBWV9TSVpFKGNoaXBfaWRfdG9fZGV2aWNlX25hbWUpKSB7CisJCWxic19wcl9lcnIoIlVuc3VwcG9ydGVkIGNoaXBfaWQ6IDB4JTAyeFxuIiwgY2FyZF9pZCk7CisJCXJldHVybiAtRUFGTk9TVVBQT1JUOworCX0KKwlzbnByaW50ZihoZWxwZXJfZncsIEZJUk1XQVJFX05BTUVfTUFYLCAibGliZXJ0YXMvZ3NwaSVkX2hscC5iaW4iLAorCQkgY2hpcF9pZF90b19kZXZpY2VfbmFtZVtpXS5uYW1lKTsKKwlzbnByaW50ZihtYWluX2Z3LCBGSVJNV0FSRV9OQU1FX01BWCwgImxpYmVydGFzL2dzcGklZC5iaW4iLAorCQkgY2hpcF9pZF90b19kZXZpY2VfbmFtZVtpXS5uYW1lKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgaWZfc3BpX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJc3RydWN0IGlmX3NwaV9jYXJkICpjYXJkOworCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IE5VTEw7CisJc3RydWN0IGxpYmVydGFzX3NwaV9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IHNwaS0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJaW50IGVyciA9IDA7CisJdTMyIHNjcmF0Y2g7CisKKwlsYnNfZGViX2VudGVyKExCU19ERUJfU1BJKTsKKworCWlmICghcGRhdGEpIHsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKHBkYXRhLT5zZXR1cCkgeworCQllcnIgPSBwZGF0YS0+c2V0dXAoc3BpKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gb3V0OworCX0KKworCS8qIEFsbG9jYXRlIGNhcmQgc3RydWN0dXJlIHRvIHJlcHJlc2VudCB0aGlzIHNwZWNpZmljIGRldmljZSAqLworCWNhcmQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaWZfc3BpX2NhcmQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNhcmQpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCXNwaV9zZXRfZHJ2ZGF0YShzcGksIGNhcmQpOworCWNhcmQtPnBkYXRhID0gcGRhdGE7CisJY2FyZC0+c3BpID0gc3BpOworCWNhcmQtPmdwaW9fY3MgPSBwZGF0YS0+Z3Bpb19jczsKKwljYXJkLT5wcmV2X3hmZXJfdGltZSA9IGppZmZpZXM7CisKKwlzZW1hX2luaXQoJmNhcmQtPnNwaV9yZWFkeSwgMCk7CisJc2VtYV9pbml0KCZjYXJkLT5zcGlfdGhyZWFkX3Rlcm1pbmF0ZWQsIDApOworCUlOSVRfTElTVF9IRUFEKCZjYXJkLT5jbWRfcGFja2V0X2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZjYXJkLT5kYXRhX3BhY2tldF9saXN0KTsKKwlzcGluX2xvY2tfaW5pdCgmY2FyZC0+YnVmZmVyX2xvY2spOworCisJLyogc2V0IHVwIEdQSU8gQ1MgbGluZS4gVE9ETzogdXNlICByZWd1bGFyIENTIGxpbmUgKi8KKwllcnIgPSBncGlvX3JlcXVlc3QoY2FyZC0+Z3Bpb19jcywgImlmX3NwaV9ncGlvX2NoaXBfc2VsZWN0Iik7CisJaWYgKGVycikKKwkJZ290byBmcmVlX2NhcmQ7CisJZXJyID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KGNhcmQtPmdwaW9fY3MsIDEpOworCWlmIChlcnIpCisJCWdvdG8gZnJlZV9ncGlvOworCisJLyogSW5pdGlhbGl6ZSB0aGUgU1BJIEludGVyZmFjZSBVbml0ICovCisJZXJyID0gc3B1X2luaXQoY2FyZCwgcGRhdGEtPnVzZV9kdW1teV93cml0ZXMpOworCWlmIChlcnIpCisJCWdvdG8gZnJlZV9ncGlvOworCWVyciA9IHNwdV9nZXRfY2hpcF9yZXZpc2lvbihjYXJkLCAmY2FyZC0+Y2FyZF9pZCwgJmNhcmQtPmNhcmRfcmV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIGZyZWVfZ3BpbzsKKworCS8qIEZpcm13YXJlIGxvYWQgKi8KKwllcnIgPSBzcHVfcmVhZF91MzIoY2FyZCwgSUZfU1BJX1NDUkFUQ0hfNF9SRUcsICZzY3JhdGNoKTsKKwlpZiAoZXJyKQorCQlnb3RvIGZyZWVfZ3BpbzsKKwlpZiAoc2NyYXRjaCA9PSBTVUNDRVNTRlVMX0ZXX0RPV05MT0FEX01BR0lDKQorCQlsYnNfZGViX3NwaSgiRmlybXdhcmUgaXMgYWxyZWFkeSBsb2FkZWQgZm9yICIKKwkJCSAgICAiTWFydmVsbCBXTEFOIDgwMi4xMSBhZGFwdGVyXG4iKTsKKwllbHNlIHsKKwkJZXJyID0gaWZfc3BpX2NhbGN1bGF0ZV9md19uYW1lcyhjYXJkLT5jYXJkX2lkLAorCQkJCWNhcmQtPmhlbHBlcl9md19uYW1lLCBjYXJkLT5tYWluX2Z3X25hbWUpOworCQlpZiAoZXJyKQorCQkJZ290byBmcmVlX2dwaW87CisKKwkJbGJzX2RlYl9zcGkoIkluaXRpYWxpemluZyBGVyBmb3IgTWFydmVsbCBXTEFOIDgwMi4xMSBhZGFwdGVyICIKKwkJCQkiKGNoaXBfaWQgPSAweCUwNHgsIGNoaXBfcmV2ID0gMHglMDJ4KSAiCisJCQkJImF0dGFjaGVkIHRvIFNQSSBidXNfbnVtICVkLCBjaGlwX3NlbGVjdCAlZC4gIgorCQkJCSJzcGktPm1heF9zcGVlZF9oej0lZFxuIiwKKwkJCQljYXJkLT5jYXJkX2lkLCBjYXJkLT5jYXJkX3JldiwKKwkJCQlzcGktPm1hc3Rlci0+YnVzX251bSwgc3BpLT5jaGlwX3NlbGVjdCwKKwkJCQlzcGktPm1heF9zcGVlZF9oeik7CisJCWVyciA9IGlmX3NwaV9wcm9nX2hlbHBlcl9maXJtd2FyZShjYXJkKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZnJlZV9ncGlvOworCQllcnIgPSBpZl9zcGlfcHJvZ19tYWluX2Zpcm13YXJlKGNhcmQpOworCQlpZiAoZXJyKQorCQkJZ290byBmcmVlX2dwaW87CisJCWxic19kZWJfc3BpKCJsb2FkZWQgRlcgZm9yIE1hcnZlbGwgV0xBTiA4MDIuMTEgYWRhcHRlclxuIik7CisJfQorCisJZXJyID0gc3B1X3NldF9pbnRlcnJ1cHRfbW9kZShjYXJkLCAwLCAxKTsKKwlpZiAoZXJyKQorCQlnb3RvIGZyZWVfZ3BpbzsKKworCS8qIFJlZ2lzdGVyIG91ciBjYXJkIHdpdGggbGliZXJ0YXMuCisJICogVGhpcyB3aWxsIGNhbGwgYWxsb2NfZXRoZXJkZXYgKi8KKwlwcml2ID0gbGJzX2FkZF9jYXJkKGNhcmQsICZzcGktPmRldik7CisJaWYgKCFwcml2KSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZnJlZV9ncGlvOworCX0KKwljYXJkLT5wcml2ID0gcHJpdjsKKwlwcml2LT5jYXJkID0gY2FyZDsKKwlwcml2LT5od19ob3N0X3RvX2NhcmQgPSBpZl9zcGlfaG9zdF90b19jYXJkOworCXByaXYtPmZ3X3JlYWR5ID0gMTsKKwlwcml2LT5wc19zdXBwb3J0ZWQgPSAxOworCisJLyogSW5pdGlhbGl6ZSBpbnRlcnJ1cHQgaGFuZGxpbmcgc3R1ZmYuICovCisJY2FyZC0+cnVuX3RocmVhZCA9IDE7CisJY2FyZC0+c3BpX3RocmVhZCA9IGt0aHJlYWRfcnVuKGxic19zcGlfdGhyZWFkLCBjYXJkLCAibGJzX3NwaV90aHJlYWQiKTsKKwlpZiAoSVNfRVJSKGNhcmQtPnNwaV90aHJlYWQpKSB7CisJCWNhcmQtPnJ1bl90aHJlYWQgPSAwOworCQllcnIgPSBQVFJfRVJSKGNhcmQtPnNwaV90aHJlYWQpOworCQlsYnNfcHJfZXJyKCJlcnJvciBjcmVhdGluZyBTUEkgdGhyZWFkOiBlcnI9JWRcbiIsIGVycik7CisJCWdvdG8gcmVtb3ZlX2NhcmQ7CisJfQorCWVyciA9IHJlcXVlc3RfaXJxKHNwaS0+aXJxLCBpZl9zcGlfaG9zdF9pbnRlcnJ1cHQsCisJCQlJUlFGX1RSSUdHRVJfRkFMTElORywgImxpYmVydGFzX3NwaSIsIGNhcmQpOworCWlmIChlcnIpIHsKKwkJbGJzX3ByX2VycigiY2FuJ3QgZ2V0IGhvc3QgaXJxIGxpbmUtLSByZXF1ZXN0X2lycSBmYWlsZWRcbiIpOworCQlnb3RvIHRlcm1pbmF0ZV90aHJlYWQ7CisJfQorCisJLyogU3RhcnQgdGhlIGNhcmQuCisJICogVGhpcyB3aWxsIGNhbGwgcmVnaXN0ZXJfbmV0ZGV2LCBhbmQgd2UnbGwgc3RhcnQKKwkgKiBnZXR0aW5nIGludGVycnVwdHMuLi4gKi8KKwllcnIgPSBsYnNfc3RhcnRfY2FyZChwcml2KTsKKwlpZiAoZXJyKQorCQlnb3RvIHJlbGVhc2VfaXJxOworCisJbGJzX2RlYl9zcGkoIkZpbmlzaGVkIGluaXRpYWxpemluZyBXTEFOIG1vZHVsZS5cbiIpOworCisJLyogc3VjY2Vzc2Z1bCBleGl0ICovCisJZ290byBvdXQ7CisKK3JlbGVhc2VfaXJxOgorCWZyZWVfaXJxKHNwaS0+aXJxLCBjYXJkKTsKK3Rlcm1pbmF0ZV90aHJlYWQ6CisJaWZfc3BpX3Rlcm1pbmF0ZV9zcGlfdGhyZWFkKGNhcmQpOworcmVtb3ZlX2NhcmQ6CisJbGJzX3JlbW92ZV9jYXJkKHByaXYpOyAvKiB3aWxsIGNhbGwgZnJlZV9uZXRkZXYgKi8KK2ZyZWVfZ3BpbzoKKwlncGlvX2ZyZWUoY2FyZC0+Z3Bpb19jcyk7CitmcmVlX2NhcmQ6CisJZnJlZV9pZl9zcGlfY2FyZChjYXJkKTsKK291dDoKKwlsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9TUEksICJlcnIgJWRcbiIsIGVycik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgbGliZXJ0YXNfc3BpX3JlbW92ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCBpZl9zcGlfY2FyZCAqY2FyZCA9IHNwaV9nZXRfZHJ2ZGF0YShzcGkpOworCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IGNhcmQtPnByaXY7CisKKwlsYnNfZGViX3NwaSgibGliZXJ0YXNfc3BpX3JlbW92ZVxuIik7CisJbGJzX2RlYl9lbnRlcihMQlNfREVCX1NQSSk7CisJcHJpdi0+c3VycHJpc2VyZW1vdmVkID0gMTsKKworCWxic19zdG9wX2NhcmQocHJpdik7CisJZnJlZV9pcnEoc3BpLT5pcnEsIGNhcmQpOworCWlmX3NwaV90ZXJtaW5hdGVfc3BpX3RocmVhZChjYXJkKTsKKwlsYnNfcmVtb3ZlX2NhcmQocHJpdik7IC8qIHdpbGwgY2FsbCBmcmVlX25ldGRldiAqLworCWdwaW9fZnJlZShjYXJkLT5ncGlvX2NzKTsKKwlpZiAoY2FyZC0+cGRhdGEtPnRlYXJkb3duKQorCQljYXJkLT5wZGF0YS0+dGVhcmRvd24oc3BpKTsKKwlmcmVlX2lmX3NwaV9jYXJkKGNhcmQpOworCWxic19kZWJfbGVhdmUoTEJTX0RFQl9TUEkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNwaV9kcml2ZXIgbGliZXJ0YXNfc3BpX2RyaXZlciA9IHsKKwkucHJvYmUJPSBpZl9zcGlfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKGxpYmVydGFzX3NwaV9yZW1vdmUpLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lCT0gImxpYmVydGFzX3NwaSIsCisJCS5idXMJPSAmc3BpX2J1c190eXBlLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworLyoKKyAqIE1vZHVsZSBmdW5jdGlvbnMKKyAqLworCitzdGF0aWMgaW50IF9faW5pdCBpZl9zcGlfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlpbnQgcmV0ID0gMDsKKwlsYnNfZGViX2VudGVyKExCU19ERUJfU1BJKTsKKwlwcmludGsoS0VSTl9JTkZPICJsaWJlcnRhc19zcGk6IExpYmVydGFzIFNQSSBkcml2ZXJcbiIpOworCXJldCA9IHNwaV9yZWdpc3Rlcl9kcml2ZXIoJmxpYmVydGFzX3NwaV9kcml2ZXIpOworCWxic19kZWJfbGVhdmUoTEJTX0RFQl9TUEkpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBpZl9zcGlfZXhpdF9tb2R1bGUodm9pZCkKK3sKKwlsYnNfZGViX2VudGVyKExCU19ERUJfU1BJKTsKKwlzcGlfdW5yZWdpc3Rlcl9kcml2ZXIoJmxpYmVydGFzX3NwaV9kcml2ZXIpOworCWxic19kZWJfbGVhdmUoTEJTX0RFQl9TUEkpOworfQorCittb2R1bGVfaW5pdChpZl9zcGlfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQoaWZfc3BpX2V4aXRfbW9kdWxlKTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJMaWJlcnRhcyBTUEkgV0xBTiBEcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIkFuZHJleSBZdXJvdnNreSA8YW5kcmV5QGNvenliaXQuY29tPiwgIgorCSAgICAgICJDb2xpbiBNY0NhYmUgPGNvbGluQGNvenliaXQuY29tPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfc3BpLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9zcGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTAzODY5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfc3BpLmgKQEAgLTAsMCArMSwyMDggQEAKKy8qCisgKglsaW51eC9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9zcGkuYworICoKKyAqCURyaXZlciBmb3IgTWFydmVsbCBTUEkgV0xBTiBjYXJkcy4KKyAqCisgKglDb3B5cmlnaHQgMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICoJQXV0aG9yczoKKyAqCUFuZHJleSBZdXJvdnNreSA8YW5kcmV5QGNvenliaXQuY29tPgorICoJQ29saW4gTWNDYWJlIDxjb2xpbkBjb3p5Yml0LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdAorICogeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYgX0xCU19JRl9TUElfSF8KKyNkZWZpbmUgX0xCU19JRl9TUElfSF8KKworI2RlZmluZSBJUEZJRUxEX0FMSUdOX09GRlNFVCAyCisjZGVmaW5lIElGX1NQSV9DTURfQlVGX1NJWkUgMjQwMAorCisvKioqKioqKioqKioqKioqKiogRmlybXdhcmUgKioqKioqKioqKioqKioqKiovCitzdHJ1Y3QgY2hpcF9pZGVudCB7CisJdTE2IGNoaXBfaWQ7CisJdTE2IG5hbWU7Cit9OworCisjZGVmaW5lIE1BWF9NQUlOX0ZXX0xPQURfQ1JDX0VSUiAxMAorCisvKiBDaHVuayBzaXplIHdoZW4gbG9hZGluZyB0aGUgaGVscGVyIGZpcm13YXJlICovCisjZGVmaW5lIEhFTFBFUl9GV19MT0FEX0NIVU5LX1NaIDY0CisKKy8qIFZhbHVlIHRvIHdyaXRlIHRvIGluZGljYXRlIGVuZCBvZiBoZWxwZXIgZmlybXdhcmUgZG5sZCAqLworI2RlZmluZSBGSVJNV0FSRV9ETkxEX09LIDB4MDAwMAorCisvKiBWYWx1ZSB0byBjaGVjayBvbmNlIHRoZSBtYWluIGZpcm13YXJlIGlzIGRvd25sb2FkZWQgKi8KKyNkZWZpbmUgU1VDQ0VTU0ZVTF9GV19ET1dOTE9BRF9NQUdJQyAweDg4ODg4ODg4CisKKy8qKioqKioqKioqKioqKioqKiBTUEkgSW50ZXJmYWNlIFVuaXQgKioqKioqKioqKioqKioqKiovCisvKiBNYXNrcyB1c2VkIGluIFNQSSByZWdpc3RlciByZWFkL3dyaXRlIG9wZXJhdGlvbnMgKi8KKyNkZWZpbmUgSUZfU1BJX1JFQURfT1BFUkFUSU9OX01BU0sgMHgwCisjZGVmaW5lIElGX1NQSV9XUklURV9PUEVSQVRJT05fTUFTSyAweDgwMDAKKworLyogU1BJIHJlZ2lzdGVyIG9mZnNldHMuIDQtYnl0ZSBhbGlnbmVkLiAqLworI2RlZmluZSBJRl9TUElfREVWSUNFSURfQ1RSTF9SRUcgMHgwMAkvKiBEZXZpY2VJRCBjb250cm9sbGVyIHJlZyAqLworI2RlZmluZSBJRl9TUElfSU9fUkVBREJBU0VfUkVHIDB4MDQgCS8qIFJlYWQgSS9PIGJhc2UgcmVnICovCisjZGVmaW5lIElGX1NQSV9JT19XUklURUJBU0VfUkVHIDB4MDgJLyogV3JpdGUgSS9PIGJhc2UgcmVnICovCisjZGVmaW5lIElGX1NQSV9JT19SRFdSUE9SVF9SRUcgMHgwQwkvKiBSZWFkL1dyaXRlIEkvTyBwb3J0IHJlZyAqLworCisjZGVmaW5lIElGX1NQSV9DTURfUkVBREJBU0VfUkVHIDB4MTAJLyogUmVhZCBjb21tYW5kIGJhc2UgcmVnICovCisjZGVmaW5lIElGX1NQSV9DTURfV1JJVEVCQVNFX1JFRyAweDE0CS8qIFdyaXRlIGNvbW1hbmQgYmFzZSByZWcgKi8KKyNkZWZpbmUgSUZfU1BJX0NNRF9SRFdSUE9SVF9SRUcgMHgxOAkvKiBSZWFkL1dyaXRlIGNvbW1hbmQgcG9ydCByZWcgKi8KKworI2RlZmluZSBJRl9TUElfREFUQV9SRUFEQkFTRV9SRUcgMHgxQwkvKiBSZWFkIGRhdGEgYmFzZSByZWcgKi8KKyNkZWZpbmUgSUZfU1BJX0RBVEFfV1JJVEVCQVNFX1JFRyAweDIwCS8qIFdyaXRlIGRhdGEgYmFzZSByZWcgKi8KKyNkZWZpbmUgSUZfU1BJX0RBVEFfUkRXUlBPUlRfUkVHIDB4MjQJLyogUmVhZC9Xcml0ZSBkYXRhIHBvcnQgcmVnICovCisKKyNkZWZpbmUgSUZfU1BJX1NDUkFUQ0hfMV9SRUcgMHgyOAkvKiBTY3JhdGNoIHJlZyAxICovCisjZGVmaW5lIElGX1NQSV9TQ1JBVENIXzJfUkVHIDB4MkMJLyogU2NyYXRjaCByZWcgMiAqLworI2RlZmluZSBJRl9TUElfU0NSQVRDSF8zX1JFRyAweDMwCS8qIFNjcmF0Y2ggcmVnIDMgKi8KKyNkZWZpbmUgSUZfU1BJX1NDUkFUQ0hfNF9SRUcgMHgzNAkvKiBTY3JhdGNoIHJlZyA0ICovCisKKyNkZWZpbmUgSUZfU1BJX1RYX0ZSQU1FX1NFUV9OVU1fUkVHIDB4MzggLyogVHggZnJhbWUgc2VxdWVuY2UgbnVtYmVyIHJlZyAqLworI2RlZmluZSBJRl9TUElfVFhfRlJBTUVfU1RBVFVTX1JFRyAweDNDCS8qIFR4IGZyYW1lIHN0YXR1cyByZWcgKi8KKworI2RlZmluZSBJRl9TUElfSE9TVF9JTlRfQ1RSTF9SRUcgMHg0MAkvKiBIb3N0IGludGVycnVwdCBjb250cm9sbGVyIHJlZyAqLworCisjZGVmaW5lIElGX1NQSV9DQVJEX0lOVF9DQVVTRV9SRUcgMHg0NAkvKiBDYXJkIGludGVycnVwdCBjYXVzZSByZWcgKi8KKyNkZWZpbmUgSUZfU1BJX0NBUkRfSU5UX1NUQVRVU19SRUcgMHg0OCAvKiBDYXJkIGludGVydXB0IHN0YXR1cyByZWcgKi8KKyNkZWZpbmUgSUZfU1BJX0NBUkRfSU5UX0VWRU5UX01BU0tfUkVHIDB4NEMgLyogQ2FyZCBpbnRlcnJ1cHQgZXZlbnQgbWFzayAqLworI2RlZmluZSBJRl9TUElfQ0FSRF9JTlRfU1RBVFVTX01BU0tfUkVHCTB4NTAgLyogQ2FyZCBpbnRlcnJ1cHQgc3RhdHVzIG1hc2sgKi8KKworI2RlZmluZSBJRl9TUElfQ0FSRF9JTlRfUkVTRVRfU0VMRUNUX1JFRyAweDU0IC8qIENhcmQgaW50ZXJydXB0IHJlc2V0IHNlbGVjdCAqLworCisjZGVmaW5lIElGX1NQSV9IT1NUX0lOVF9DQVVTRV9SRUcgMHg1OAkvKiBIb3N0IGludGVycnVwdCBjYXVzZSByZWcgKi8KKyNkZWZpbmUgSUZfU1BJX0hPU1RfSU5UX1NUQVRVU19SRUcgMHg1QwkvKiBIb3N0IGludGVycnVwdCBzdGF0dXMgcmVnICovCisjZGVmaW5lIElGX1NQSV9IT1NUX0lOVF9FVkVOVF9NQVNLX1JFRyAweDYwIC8qIEhvc3QgaW50ZXJydXB0IGV2ZW50IG1hc2sgKi8KKyNkZWZpbmUgSUZfU1BJX0hPU1RfSU5UX1NUQVRVU19NQVNLX1JFRwkweDY0IC8qIEhvc3QgaW50ZXJydXB0IHN0YXR1cyBtYXNrICovCisjZGVmaW5lIElGX1NQSV9IT1NUX0lOVF9SRVNFVF9TRUxFQ1RfUkVHIDB4NjggLyogSG9zdCBpbnRlcnJ1cHQgcmVzZXQgc2VsZWN0ICovCisKKyNkZWZpbmUgSUZfU1BJX0RFTEFZX1JFQURfUkVHIDB4NkMJLyogRGVsYXkgcmVhZCByZWcgKi8KKyNkZWZpbmUgSUZfU1BJX1NQVV9CVVNfTU9ERV9SRUcgMHg3MAkvKiBTUFUgQlVTIG1vZGUgcmVnICovCisKKy8qKioqKioqKioqKioqKioqKiBJRl9TUElfREVWSUNFSURfQ1RSTF9SRUcgKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIElGX1NQSV9ERVZJQ0VJRF9DVFJMX1JFR19UT19DQVJEX0lEKGRjKSAoKGRjICYgMHhmZmZmMDAwMCk+PjE2KQorI2RlZmluZSBJRl9TUElfREVWSUNFSURfQ1RSTF9SRUdfVE9fQ0FSRF9SRVYoZGMpIChkYyAmIDB4MDAwMDAwZmYpCisKKy8qKioqKioqKioqKioqKioqKiBJRl9TUElfSE9TVF9JTlRfQ1RSTF9SRUcgKioqKioqKioqKioqKioqKiovCisvKiogSG9zdCBJbnRlcnJ1cHQgQ29udHJvbCBiaXQgOiBXYWtlIHVwICovCisjZGVmaW5lIElGX1NQSV9ISUNUX1dBS0VfVVAJCQkJKDE8PDApCisvKiogSG9zdCBJbnRlcnJ1cHQgQ29udHJvbCBiaXQgOiBXTEFOIHJlYWR5ICovCisjZGVmaW5lIElGX1NQSV9ISUNUX1dMQU5fUkVBRFkJCQkJKDE8PDEpCisvKiNkZWZpbmUgSUZfU1BJX0hJQ1RfRklGT19GSVJTVF9IQUxGX0VNUFRZCQkoMTw8MikgKi8KKy8qI2RlZmluZSBJRl9TUElfSElDVF9GSUZPX1NFQ09ORF9IQUxGX0VNUFRZCQkoMTw8MykgKi8KKy8qI2RlZmluZSBJRl9TUElfSElDVF9JUlFTUkNfV0xBTgkJCSgxPDw0KSAqLworLyoqIEhvc3QgSW50ZXJydXB0IENvbnRyb2wgYml0IDogVHggYXV0byBkb3dubG9hZCAqLworI2RlZmluZSBJRl9TUElfSElDVF9UWF9ET1dOTE9BRF9PVkVSX0FVVE8JCSgxPDw1KQorLyoqIEhvc3QgSW50ZXJydXB0IENvbnRyb2wgYml0IDogUnggYXV0byB1cGxvYWQgKi8KKyNkZWZpbmUgSUZfU1BJX0hJQ1RfUlhfVVBMT0FEX09WRVJfQVVUTwkJCSgxPDw2KQorLyoqIEhvc3QgSW50ZXJydXB0IENvbnRyb2wgYml0IDogQ29tbWFuZCBhdXRvIGRvd25sb2FkICovCisjZGVmaW5lIElGX1NQSV9ISUNUX0NNRF9ET1dOTE9BRF9PVkVSX0FVVE8JCSgxPDw3KQorLyoqIEhvc3QgSW50ZXJydXB0IENvbnRyb2wgYml0IDogQ29tbWFuZCBhdXRvIHVwbG9hZCAqLworI2RlZmluZSBJRl9TUElfSElDVF9DTURfVVBMT0FEX09WRVJfQVVUTwkJKDE8PDgpCisKKy8qKioqKioqKioqKioqKioqKiBJRl9TUElfQ0FSRF9JTlRfQ0FVU0VfUkVHICoqKioqKioqKioqKioqKioqLworLyoqIENhcmQgSW50ZXJydXB0IENhc2UgYml0IDogVHggZG93bmxvYWQgb3ZlciAqLworI2RlZmluZSBJRl9TUElfQ0lDX1RYX0RPV05MT0FEX09WRVIJCQkoMTw8MCkKKy8qKiBDYXJkIEludGVycnVwdCBDYXNlIGJpdCA6IFJ4IHVwbG9hZCBvdmVyICovCisjZGVmaW5lIElGX1NQSV9DSUNfUlhfVVBMT0FEX09WRVIJCQkoMTw8MSkKKy8qKiBDYXJkIEludGVycnVwdCBDYXNlIGJpdCA6IENvbW1hbmQgZG93bmxvYWQgb3ZlciAqLworI2RlZmluZSBJRl9TUElfQ0lDX0NNRF9ET1dOTE9BRF9PVkVSCQkJKDE8PDIpCisvKiogQ2FyZCBJbnRlcnJ1cHQgQ2FzZSBiaXQgOiBIb3N0IGV2ZW50ICovCisjZGVmaW5lIElGX1NQSV9DSUNfSE9TVF9FVkVOVAkJCQkoMTw8MykKKy8qKiBDYXJkIEludGVycnVwdCBDYXNlIGJpdCA6IENvbW1hbmQgdXBsb2FkIG92ZXIgKi8KKyNkZWZpbmUgSUZfU1BJX0NJQ19DTURfVVBMT0FEX09WRVIJCQkoMTw8NCkKKy8qKiBDYXJkIEludGVycnVwdCBDYXNlIGJpdCA6IFBvd2VyIGRvd24gKi8KKyNkZWZpbmUgSUZfU1BJX0NJQ19QT1dFUl9ET1dOCQkJCSgxPDw1KQorCisvKioqKioqKioqKioqKioqKiogSUZfU1BJX0NBUkRfSU5UX1NUQVRVU19SRUcgKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIElGX1NQSV9DSVNfVFhfRE9XTkxPQURfT1ZFUgkJCSgxPDwwKQorI2RlZmluZSBJRl9TUElfQ0lTX1JYX1VQTE9BRF9PVkVSCQkJKDE8PDEpCisjZGVmaW5lIElGX1NQSV9DSVNfQ01EX0RPV05MT0FEX09WRVIJCQkoMTw8MikKKyNkZWZpbmUgSUZfU1BJX0NJU19IT1NUX0VWRU5UCQkJCSgxPDwzKQorI2RlZmluZSBJRl9TUElfQ0lTX0NNRF9VUExPQURfT1ZFUgkJCSgxPDw0KQorI2RlZmluZSBJRl9TUElfQ0lTX1BPV0VSX0RPV04JCQkJKDE8PDUpCisKKy8qKioqKioqKioqKioqKioqKiBJRl9TUElfSE9TVF9JTlRfQ0FVU0VfUkVHICoqKioqKioqKioqKioqKioqLworI2RlZmluZSBJRl9TUElfSElDVV9UWF9ET1dOTE9BRF9SRFkJCQkoMTw8MCkKKyNkZWZpbmUgSUZfU1BJX0hJQ1VfUlhfVVBMT0FEX1JEWQkJCSgxPDwxKQorI2RlZmluZSBJRl9TUElfSElDVV9DTURfRE9XTkxPQURfUkRZCQkJKDE8PDIpCisjZGVmaW5lIElGX1NQSV9ISUNVX0NBUkRfRVZFTlQJCQkJKDE8PDMpCisjZGVmaW5lIElGX1NQSV9ISUNVX0NNRF9VUExPQURfUkRZCQkJKDE8PDQpCisjZGVmaW5lIElGX1NQSV9ISUNVX0lPX1dSX0ZJRk9fT1ZFUkZMT1cJCQkoMTw8NSkKKyNkZWZpbmUgSUZfU1BJX0hJQ1VfSU9fUkRfRklGT19VTkRFUkZMT1cJCSgxPDw2KQorI2RlZmluZSBJRl9TUElfSElDVV9EQVRBX1dSX0ZJRk9fT1ZFUkZMT1cJCSgxPDw3KQorI2RlZmluZSBJRl9TUElfSElDVV9EQVRBX1JEX0ZJRk9fVU5ERVJGTE9XCQkoMTw8OCkKKyNkZWZpbmUgSUZfU1BJX0hJQ1VfQ01EX1dSX0ZJRk9fT1ZFUkZMT1cJCSgxPDw5KQorI2RlZmluZSBJRl9TUElfSElDVV9DTURfUkRfRklGT19VTkRFUkZMT1cJCSgxPDwxMCkKKworLyoqKioqKioqKioqKioqKioqIElGX1NQSV9IT1NUX0lOVF9TVEFUVVNfUkVHICoqKioqKioqKioqKioqKioqLworLyoqIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBiaXQgOiBUeCBkb3dubG9hZCByZWFkeSAqLworI2RlZmluZSBJRl9TUElfSElTVF9UWF9ET1dOTE9BRF9SRFkJCQkoMTw8MCkKKy8qKiBIb3N0IEludGVycnVwdCBTdGF0dXMgYml0IDogUnggdXBsb2FkIHJlYWR5ICovCisjZGVmaW5lIElGX1NQSV9ISVNUX1JYX1VQTE9BRF9SRFkJCQkoMTw8MSkKKy8qKiBIb3N0IEludGVycnVwdCBTdGF0dXMgYml0IDogQ29tbWFuZCBkb3dubG9hZCByZWFkeSAqLworI2RlZmluZSBJRl9TUElfSElTVF9DTURfRE9XTkxPQURfUkRZCQkJKDE8PDIpCisvKiogSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIGJpdCA6IENhcmQgZXZlbnQgKi8KKyNkZWZpbmUgSUZfU1BJX0hJU1RfQ0FSRF9FVkVOVAkJCQkoMTw8MykKKy8qKiBIb3N0IEludGVycnVwdCBTdGF0dXMgYml0IDogQ29tbWFuZCB1cGxvYWQgcmVhZHkgKi8KKyNkZWZpbmUgSUZfU1BJX0hJU1RfQ01EX1VQTE9BRF9SRFkJCQkoMTw8NCkKKy8qKiBIb3N0IEludGVycnVwdCBTdGF0dXMgYml0IDogSS9PIHdyaXRlIEZJRk8gb3ZlcmZsb3cgKi8KKyNkZWZpbmUgSUZfU1BJX0hJU1RfSU9fV1JfRklGT19PVkVSRkxPVwkJCSgxPDw1KQorLyoqIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBiaXQgOiBJL08gcmVhZCBGSUZPIHVuZGVyZmxvdyAqLworI2RlZmluZSBJRl9TUElfSElTVF9JT19SRF9GSUZPX1VORFJGTE9XCQkJKDE8PDYpCisvKiogSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIGJpdCA6IERhdGEgd3JpdGUgRklGTyBvdmVyZmxvdyAqLworI2RlZmluZSBJRl9TUElfSElTVF9EQVRBX1dSX0ZJRk9fT1ZFUkZMT1cJCSgxPDw3KQorLyoqIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBiaXQgOiBEYXRhIHJlYWQgRklGTyB1bmRlcmZsb3cgKi8KKyNkZWZpbmUgSUZfU1BJX0hJU1RfREFUQV9SRF9GSUZPX1VOREVSRkxPVwkJKDE8PDgpCisvKiogSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIGJpdCA6IENvbW1hbmQgd3JpdGUgRklGTyBvdmVyZmxvdyAqLworI2RlZmluZSBJRl9TUElfSElTVF9DTURfV1JfRklGT19PVkVSRkxPVwkJKDE8PDkpCisvKiogSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIGJpdCA6IENvbW1hbmQgcmVhZCBGSUZPIHVuZGVyZmxvdyAqLworI2RlZmluZSBJRl9TUElfSElTVF9DTURfUkRfRklGT19VTkRFUkZMT1cJCSgxPDwxMCkKKworLyoqKioqKioqKioqKioqKioqIElGX1NQSV9IT1NUX0lOVF9TVEFUVVNfTUFTS19SRUcgKioqKioqKioqKioqKioqKiovCisvKiogSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIE1hc2sgYml0IDogVHggZG93bmxvYWQgcmVhZHkgKi8KKyNkZWZpbmUgSUZfU1BJX0hJU01fVFhfRE9XTkxPQURfUkRZCQkJKDE8PDApCisvKiogSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIE1hc2sgYml0IDogUnggdXBsb2FkIHJlYWR5ICovCisjZGVmaW5lIElGX1NQSV9ISVNNX1JYX1VQTE9BRF9SRFkJCQkoMTw8MSkKKy8qKiBIb3N0IEludGVycnVwdCBTdGF0dXMgTWFzayBiaXQgOiBDb21tYW5kIGRvd25sb2FkIHJlYWR5ICovCisjZGVmaW5lIElGX1NQSV9ISVNNX0NNRF9ET1dOTE9BRF9SRFkJCQkoMTw8MikKKy8qKiBIb3N0IEludGVycnVwdCBTdGF0dXMgTWFzayBiaXQgOiBDYXJkIGV2ZW50ICovCisjZGVmaW5lIElGX1NQSV9ISVNNX0NBUkRFVkVOVAkJCQkoMTw8MykKKy8qKiBIb3N0IEludGVycnVwdCBTdGF0dXMgTWFzayBiaXQgOiBDb21tYW5kIHVwbG9hZCByZWFkeSAqLworI2RlZmluZSBJRl9TUElfSElTTV9DTURfVVBMT0FEX1JEWQkJCSgxPDw0KQorLyoqIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBNYXNrIGJpdCA6IEkvTyB3cml0ZSBGSUZPIG92ZXJmbG93ICovCisjZGVmaW5lIElGX1NQSV9ISVNNX0lPX1dSX0ZJRk9fT1ZFUkZMT1cJCQkoMTw8NSkKKy8qKiBIb3N0IEludGVycnVwdCBTdGF0dXMgTWFzayBiaXQgOiBJL08gcmVhZCBGSUZPIHVuZGVyZmxvdyAqLworI2RlZmluZSBJRl9TUElfSElTTV9JT19SRF9GSUZPX1VOREVSRkxPVwkJKDE8PDYpCisvKiogSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIE1hc2sgYml0IDogRGF0YSB3cml0ZSBGSUZPIG92ZXJmbG93ICovCisjZGVmaW5lIElGX1NQSV9ISVNNX0RBVEFfV1JfRklGT19PVkVSRkxPVwkJKDE8PDcpCisvKiogSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIE1hc2sgYml0IDogRGF0YSB3cml0ZSBGSUZPIHVuZGVyZmxvdyAqLworI2RlZmluZSBJRl9TUElfSElTTV9EQVRBX1JEX0ZJRk9fVU5ERVJGTE9XCQkoMTw8OCkKKy8qKiBIb3N0IEludGVycnVwdCBTdGF0dXMgTWFzayBiaXQgOiBDb21tYW5kIHdyaXRlIEZJRk8gb3ZlcmZsb3cgKi8KKyNkZWZpbmUgSUZfU1BJX0hJU01fQ01EX1dSX0ZJRk9fT1ZFUkZMT1cJCSgxPDw5KQorLyoqIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBNYXNrIGJpdCA6IENvbW1hbmQgd3JpdGUgRklGTyB1bmRlcmZsb3cgKi8KKyNkZWZpbmUgSUZfU1BJX0hJU01fQ01EX1JEX0ZJRk9fVU5ERVJGTE9XCQkoMTw8MTApCisKKy8qKioqKioqKioqKioqKioqKiBJRl9TUElfU1BVX0JVU19NT0RFX1JFRyAqKioqKioqKioqKioqKioqKi8KKy8qIFNDSyBlZGdlIG9uIHdoaWNoIHRoZSBXTEFOIG1vZHVsZSBvdXRwdXRzIGRhdGEgb24gTUlTTyAqLworI2RlZmluZSBJRl9TUElfQlVTX01PREVfU1BJX0NMT0NLX1BIQVNFX0ZBTExJTkcgMHg4CisjZGVmaW5lIElGX1NQSV9CVVNfTU9ERV9TUElfQ0xPQ0tfUEhBU0VfUklTSU5HIDB4MAorCisvKiBJbiBhIFNQVSByZWFkIG9wZXJhdGlvbiwgdGhlcmUgaXMgYSBkZWxheSBiZXR3ZWVuIHdyaXRpbmcgdGhlIFNQVQorICogcmVnaXN0ZXIgbmFtZSBhbmQgZ2V0dGluZyBiYWNrIGRhdGEgZnJvbSB0aGUgV0xBTiBtb2R1bGUuCisgKiBUaGlzIGNhbiBiZSBzcGVjaWZpZWQgaW4gdGVybXMgb2YgbmFub3NlY29uZHMgb3IgaW4gdGVybXMgb2YgZHVtbXkKKyAqIGNsb2NrIGN5Y2xlcyB3aGljaCB0aGUgbWFzdGVyIG11c3Qgb3V0cHV0IGJlZm9yZSByZWNlaXZpbmcgYSByZXNwb25zZS4gKi8KKyNkZWZpbmUgSUZfU1BJX0JVU19NT0RFX0RFTEFZX01FVEhPRF9EVU1NWV9DTE9DSyAweDQKKyNkZWZpbmUgSUZfU1BJX0JVU19NT0RFX0RFTEFZX01FVEhPRF9USU1FRCAweDAKKworLyogU29tZSBkaWZmZXJlbnQgbW9kZXMgb2YgU1BJIG9wZXJhdGlvbiAqLworI2RlZmluZSBJRl9TUElfQlVTX01PREVfOF9CSVRfQUREUkVTU18xNl9CSVRfREFUQSAweDAwCisjZGVmaW5lIElGX1NQSV9CVVNfTU9ERV84X0JJVF9BRERSRVNTXzMyX0JJVF9EQVRBIDB4MDEKKyNkZWZpbmUgSUZfU1BJX0JVU19NT0RFXzE2X0JJVF9BRERSRVNTXzE2X0JJVF9EQVRBIDB4MDIKKyNkZWZpbmUgSUZfU1BJX0JVU19NT0RFXzE2X0JJVF9BRERSRVNTXzMyX0JJVF9EQVRBIDB4MDMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9tYWluLmMKaW5kZXggZjc2NjIzZS4uOGFlOTM1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL21haW4uYwpAQCAtNTgyLDIwICs1ODIsNiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwobGJzX2hvc3RfdG9fY2FyZF9kb25lKTsKIAotLyoqCi0gKiAgQGJyaWVmIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbmV0d29yayBzdGF0aXN0aWNzCi0gKgotICogIEBwYXJhbSBkZXYgICAgIEEgcG9pbnRlciB0byBzdHJ1Y3QgbGJzX3ByaXZhdGUgc3RydWN0dXJlCi0gKiAgQHJldHVybiAJICAgQSBwb2ludGVyIHRvIG5ldF9kZXZpY2Vfc3RhdHMgc3RydWN0dXJlCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqbGJzX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IGRldi0+bWxfcHJpdjsKLQotCWxic19kZWJfZW50ZXIoTEJTX0RFQl9ORVQpOwotCXJldHVybiAmcHJpdi0+c3RhdHM7Ci19Ci0KIHN0YXRpYyBpbnQgbGJzX3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICphZGRyKQogewogCWludCByZXQgPSAwOwpAQCAtMTAwNiw5ICs5OTIsOCBAQAogRVhQT1JUX1NZTUJPTF9HUEwobGJzX3Jlc3VtZSk7CiAKIC8qKgotICogIEBicmllZiBUaGlzIGZ1bmN0aW9uIGRvd25sb2FkcyBmaXJtd2FyZSBpbWFnZSwgZ2V0cwotICogIEhXIHNwZWMgZnJvbSBmaXJtd2FyZSBhbmQgc2V0IGJhc2ljIHBhcmFtZXRlcnMgdG8KLSAqICBmaXJtd2FyZS4KKyAqIEBicmllZiBUaGlzIGZ1bmN0aW9uIGdldHMgdGhlIEhXIHNwZWMgZnJvbSB0aGUgZmlybXdhcmUgYW5kIHNldHMKKyAqICAgICAgICBzb21lIGJhc2ljIHBhcmFtZXRlcnMuCiAgKgogICogIEBwYXJhbSBwcml2ICAgIEEgcG9pbnRlciB0byBzdHJ1Y3QgbGJzX3ByaXZhdGUgc3RydWN0dXJlCiAgKiAgQHJldHVybiAJICAgMCBvciAtMQpAQCAtMTE2Myw2ICsxMTQ4LDE3IEBACiAJbGJzX2RlYl9sZWF2ZShMQlNfREVCX01BSU4pOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGxic19uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiAJCT0gbGJzX2Rldl9vcGVuLAorCS5uZG9fc3RvcAkJPSBsYnNfZXRoX3N0b3AsCisJLm5kb19zdGFydF94bWl0CQk9IGxic19oYXJkX3N0YXJ0X3htaXQsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSBsYnNfc2V0X21hY19hZGRyZXNzLAorCS5uZG9fdHhfdGltZW91dCAJPSBsYnNfdHhfdGltZW91dCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IGxic19zZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogLyoqCiAgKiBAYnJpZWYgVGhpcyBmdW5jdGlvbiBhZGRzIHRoZSBjYXJkLiBpdCB3aWxsIHByb2JlIHRoZQogICogY2FyZCwgYWxsb2NhdGUgdGhlIGxic19wcml2IGFuZCBpbml0aWFsaXplIHRoZSBkZXZpY2UuCkBAIC0xMTk3LDE5ICsxMTkzLDEzIEBACiAJcHJpdi0+aW5mcmFfb3BlbiA9IDA7CiAKIAkvKiBTZXR1cCB0aGUgT1MgSW50ZXJmYWNlIHRvIG91ciBmdW5jdGlvbnMgKi8KLQlkZXYtPm9wZW4gPSBsYnNfZGV2X29wZW47Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBsYnNfaGFyZF9zdGFydF94bWl0OwotCWRldi0+c3RvcCA9IGxic19ldGhfc3RvcDsKLQlkZXYtPnNldF9tYWNfYWRkcmVzcyA9IGxic19zZXRfbWFjX2FkZHJlc3M7Ci0JZGV2LT50eF90aW1lb3V0ID0gbGJzX3R4X3RpbWVvdXQ7Ci0JZGV2LT5nZXRfc3RhdHMgPSBsYnNfZ2V0X3N0YXRzOworIAlkZXYtPm5ldGRldl9vcHMgPSAmbGJzX25ldGRldl9vcHM7CiAJZGV2LT53YXRjaGRvZ190aW1lbyA9IDUgKiBIWjsKIAlkZXYtPmV0aHRvb2xfb3BzID0gJmxic19ldGh0b29sX29wczsKICNpZmRlZglXSVJFTEVTU19FWFQKLQlkZXYtPndpcmVsZXNzX2hhbmRsZXJzID0gKHN0cnVjdCBpd19oYW5kbGVyX2RlZiAqKSZsYnNfaGFuZGxlcl9kZWY7CisJZGV2LT53aXJlbGVzc19oYW5kbGVycyA9ICZsYnNfaGFuZGxlcl9kZWY7CiAjZW5kaWYKIAlkZXYtPmZsYWdzIHw9IElGRl9CUk9BRENBU1QgfCBJRkZfTVVMVElDQVNUOwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gbGJzX3NldF9tdWx0aWNhc3RfbGlzdDsKIAogCVNFVF9ORVRERVZfREVWKGRldiwgZG1kZXYpOwogCkBAIC0xNDE5LDYgKzE0MDksMTQgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKGxic19zdG9wX2NhcmQpOwogCiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbWVzaF9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBsYnNfZGV2X29wZW4sCisJLm5kb19zdG9wIAkJPSBsYnNfbWVzaF9zdG9wLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBsYnNfaGFyZF9zdGFydF94bWl0LAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gbGJzX3NldF9tYWNfYWRkcmVzcywKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IGxic19zZXRfbXVsdGljYXN0X2xpc3QsCit9OworCiAvKioKICAqIEBicmllZiBUaGlzIGZ1bmN0aW9uIGFkZHMgbXNoWCBpbnRlcmZhY2UKICAqCkBAIC0xNDQxLDExICsxNDM5LDcgQEAKIAltZXNoX2Rldi0+bWxfcHJpdiA9IHByaXY7CiAJcHJpdi0+bWVzaF9kZXYgPSBtZXNoX2RldjsKIAotCW1lc2hfZGV2LT5vcGVuID0gbGJzX2Rldl9vcGVuOwotCW1lc2hfZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBsYnNfaGFyZF9zdGFydF94bWl0OwotCW1lc2hfZGV2LT5zdG9wID0gbGJzX21lc2hfc3RvcDsKLQltZXNoX2Rldi0+Z2V0X3N0YXRzID0gbGJzX2dldF9zdGF0czsKLQltZXNoX2Rldi0+c2V0X21hY19hZGRyZXNzID0gbGJzX3NldF9tYWNfYWRkcmVzczsKKwltZXNoX2Rldi0+bmV0ZGV2X29wcyA9ICZtZXNoX25ldGRldl9vcHM7CiAJbWVzaF9kZXYtPmV0aHRvb2xfb3BzID0gJmxic19ldGh0b29sX29wczsKIAltZW1jcHkobWVzaF9kZXYtPmRldl9hZGRyLCBwcml2LT5kZXYtPmRldl9hZGRyLAogCQkJc2l6ZW9mKHByaXYtPmRldi0+ZGV2X2FkZHIpKTsKQEAgLTE0NTYsNyArMTQ1MCw2IEBACiAJbWVzaF9kZXYtPndpcmVsZXNzX2hhbmRsZXJzID0gKHN0cnVjdCBpd19oYW5kbGVyX2RlZiAqKSZtZXNoX2hhbmRsZXJfZGVmOwogI2VuZGlmCiAJbWVzaF9kZXYtPmZsYWdzIHw9IElGRl9CUk9BRENBU1QgfCBJRkZfTVVMVElDQVNUOwotCW1lc2hfZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBsYnNfc2V0X211bHRpY2FzdF9saXN0OwogCS8qIFJlZ2lzdGVyIHZpcnR1YWwgbWVzaCBpbnRlcmZhY2UgKi8KIAlyZXQgPSByZWdpc3Rlcl9uZXRkZXYobWVzaF9kZXYpOwogCWlmIChyZXQpIHsKQEAgLTE2NDksMTQgKzE2NDIsNiBAQAogCXJldHVybiBORVRERVZfVFhfQlVTWTsKIH0KIAotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpsYnNfcnRhcF9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBkZXYtPm1sX3ByaXY7Ci0JbGJzX2RlYl9lbnRlcihMQlNfREVCX05FVCk7Ci0JcmV0dXJuICZwcml2LT5zdGF0czsKLX0KLQotCiBzdGF0aWMgdm9pZCBsYnNfcmVtb3ZlX3J0YXAoc3RydWN0IGxic19wcml2YXRlICpwcml2KQogewogCWxic19kZWJfZW50ZXIoTEJTX0RFQl9NQUlOKTsKQEAgLTE2NjksNiArMTY1NCwxMiBAQAogCWxic19kZWJfbGVhdmUoTEJTX0RFQl9NQUlOKTsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBydGFwX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuID0gbGJzX3J0YXBfb3BlbiwKKwkubmRvX3N0b3AgPSBsYnNfcnRhcF9zdG9wLAorCS5uZG9fc3RhcnRfeG1pdCA9IGxic19ydGFwX2hhcmRfc3RhcnRfeG1pdCwKK307CisKIHN0YXRpYyBpbnQgbGJzX2FkZF9ydGFwKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdikKIHsKIAlpbnQgcmV0ID0gMDsKQEAgLTE2ODgsMTAgKzE2NzksNyBAQAogCiAJbWVtY3B5KHJ0YXBfZGV2LT5kZXZfYWRkciwgcHJpdi0+Y3VycmVudF9hZGRyLCBFVEhfQUxFTik7CiAJcnRhcF9kZXYtPnR5cGUgPSBBUlBIUkRfSUVFRTgwMjExX1JBRElPVEFQOwotCXJ0YXBfZGV2LT5vcGVuID0gbGJzX3J0YXBfb3BlbjsKLQlydGFwX2Rldi0+c3RvcCA9IGxic19ydGFwX3N0b3A7Ci0JcnRhcF9kZXYtPmdldF9zdGF0cyA9IGxic19ydGFwX2dldF9zdGF0czsKLQlydGFwX2Rldi0+aGFyZF9zdGFydF94bWl0ID0gbGJzX3J0YXBfaGFyZF9zdGFydF94bWl0OworCXJ0YXBfZGV2LT5uZXRkZXZfb3BzID0gJnJ0YXBfbmV0ZGV2X29wczsKIAlydGFwX2Rldi0+bWxfcHJpdiA9IHByaXY7CiAJU0VUX05FVERFVl9ERVYocnRhcF9kZXYsIHByaXYtPmRldi0+ZGV2LnBhcmVudCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3J4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9yeC5jCmluZGV4IDA3OWU2YWEuLjRmNjA5NDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3J4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvcnguYwpAQCAtMTY4LDcgKzE2OCw3IEBACiAKIAlpZiAoc2tiLT5sZW4gPCAoRVRIX0hMRU4gKyA4ICsgc2l6ZW9mKHN0cnVjdCByeHBkKSkpIHsKIAkJbGJzX2RlYl9yeCgicnggZXJyOiBmcmFtZSByZWNlaXZlZCB3aXRoIGJhZCBsZW5ndGhcbiIpOwotCQlwcml2LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CisJCWRldi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOwogCQlyZXQgPSAwOwogCQlnb3RvIGRvbmU7CiAJfQpAQCAtMTc5LDcgKzE3OSw3IEBACiAJaWYgKCEocF9yeF9wZC0+c3RhdHVzICYgY3B1X3RvX2xlMTYoTVJWRFJWX1JYUERfU1RBVFVTX09LKSkpIHsKIAkJbGJzX2RlYl9yeCgicnggZXJyOiBmcmFtZSByZWNlaXZlZCB3aXRoIGJhZCBzdGF0dXNcbiIpOwogCQlsYnNfcHJfYWxlcnQoInJ4cGQgbm90IG9rXG4iKTsKLQkJcHJpdi0+c3RhdHMucnhfZXJyb3JzKys7CisJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJCXJldCA9IDA7CiAJCWdvdG8gZG9uZTsKIAl9CkBAIC0yNDMsOCArMjQzLDggQEAKIAlsYnNfY29tcHV0ZV9yc3NpKHByaXYsIHBfcnhfcGQpOwogCiAJbGJzX2RlYl9yeCgicnggZGF0YTogc2l6ZSBvZiBhY3R1YWwgcGFja2V0ICVkXG4iLCBza2ItPmxlbik7Ci0JcHJpdi0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47Ci0JcHJpdi0+c3RhdHMucnhfcGFja2V0cysrOworCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CisJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CiAKIAlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYpOwogCWlmIChpbl9pbnRlcnJ1cHQoKSkKQEAgLTMxMSw3ICszMTEsNyBAQAogCXN0cnVjdCBza19idWZmICpza2IpCiB7CiAJaW50IHJldCA9IDA7Ci0KKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+ZGV2OwogCXN0cnVjdCByeDgwMjExcGFja2V0aGRyICpwX3J4X3BrdDsKIAlzdHJ1Y3QgcnhwZCAqcHJ4cGQ7CiAJc3RydWN0IHJ4X3JhZGlvdGFwX2hkciByYWRpb3RhcF9oZHI7CkBAIC0zMjYsNyArMzI2LDcgQEAKIAogCWlmIChza2ItPmxlbiA8IChFVEhfSExFTiArIDggKyBzaXplb2Yoc3RydWN0IHJ4cGQpKSkgewogCQlsYnNfZGViX3J4KCJyeCBlcnI6IGZyYW1lIHJlY2VpdmVkIHdpdGggYmFkIGxlbmd0aFxuIik7Ci0JCXByaXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWtmcmVlX3NrYihza2IpOwogCQlnb3RvIGRvbmU7CkBAIC0zMzcsNyArMzM3LDcgQEAKIAkgKi8KIAlpZiAoIShwcnhwZC0+c3RhdHVzICYgY3B1X3RvX2xlMTYoTVJWRFJWX1JYUERfU1RBVFVTX09LKSkpIHsKIAkJLy9sYnNfZGViX3J4KCJyeCBlcnI6IGZyYW1lIHJlY2VpdmVkIHdpdGggYmFkIHN0YXR1c1xuIik7Ci0JCXByaXYtPnN0YXRzLnJ4X2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCX0KIAogCWxic19kZWJfcngoInJ4IGRhdGE6IHNrYi0+bGVuLXNpemVvZihSeFBkKSA9ICVkLSV6ZCA9ICV6ZFxuIiwKQEAgLTM4OSw4ICszODksOCBAQAogCWxic19jb21wdXRlX3Jzc2kocHJpdiwgcHJ4cGQpOwogCiAJbGJzX2RlYl9yeCgicnggZGF0YTogc2l6ZSBvZiBhY3R1YWwgcGFja2V0ICVkXG4iLCBza2ItPmxlbik7Ci0JcHJpdi0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47Ci0JcHJpdi0+c3RhdHMucnhfcGFja2V0cysrOworCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CisJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CiAKIAlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBwcml2LT5ydGFwX25ldF9kZXYpOwogCW5ldGlmX3J4KHNrYik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9zY2FuLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9zY2FuLmMKaW5kZXggOTAxNDk1MC4uODEyNGRiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvc2Nhbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3NjYW4uYwpAQCAtNjkyLDcgKzY5Miw3IEBACiAJCQkJCSAgICBic3MtPndwYV9pZV9sZW4pOwogCQkJfSBlbHNlIGlmIChwb3NbMV0gPj0gTUFSVkVMTF9NRVNIX0lFX0xFTkdUSCAmJgogCQkJCSAgIHBvc1syXSA9PSAweDAwICYmIHBvc1szXSA9PSAweDUwICYmCi0JCQkJICAgcG9zWzRdID09IDB4NDMgJiYgcG9zWzRdID09IDB4MDQpIHsKKwkJCQkgICBwb3NbNF0gPT0gMHg0MyAmJiBwb3NbNV0gPT0gMHgwNCkgewogCQkJCWxic19kZWJfc2NhbigiZ290IG1lc2ggSUVcbiIpOwogCQkJCWJzcy0+bWVzaCA9IDE7CiAJCQl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvdHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3R4LmMKaW5kZXggNjhiZWMzMS4uZjEwYWEzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvdHguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy90eC5jCkBAIC04Miw4ICs4Miw4IEBACiAJCSAgICAgICBza2ItPmxlbiwgTVJWRFJWX0VUSF9UWF9QQUNLRVRfQlVGRkVSX1NJWkUpOwogCQkvKiBXZSdsbCBuZXZlciBtYW5hZ2UgdG8gc2VuZCB0aGlzIG9uZTsgZHJvcCBpdCBhbmQgcmV0dXJuICdPSycgKi8KIAotCQlwcml2LT5zdGF0cy50eF9kcm9wcGVkKys7Ci0JCXByaXYtPnN0YXRzLnR4X2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKKwkJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKIAkJZ290byBmcmVlOwogCX0KIApAQCAtMTQ2LDggKzE0Niw4IEBACiAKIAlsYnNfZGViX3R4KCIlcyBsaW5lZCB1cCBwYWNrZXRcbiIsIF9fZnVuY19fKTsKIAotCXByaXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKLQlwcml2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKKwlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwlkZXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOwogCiAJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3dleHQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3dleHQuYwppbmRleCBmMTZkMTM2Li44YmMxOTA3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvd2V4dC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3dleHQuYwpAQCAtODMwLDcgKzgzMCw3IEBACiAJcXVhbGl0eSA9IHJzc2lfcXVhbDsKIAogCS8qIFF1YWxpdHkgYnkgVFggZXJyb3JzICovCi0JcHJpdi0+d3N0YXRzLmRpc2NhcmQucmV0cmllcyA9IHByaXYtPnN0YXRzLnR4X2Vycm9yczsKKwlwcml2LT53c3RhdHMuZGlzY2FyZC5yZXRyaWVzID0gZGV2LT5zdGF0cy50eF9lcnJvcnM7CiAKIAltZW1zZXQoJmxvZywgMCwgc2l6ZW9mKGxvZykpOwogCWxvZy5oZHIuc2l6ZSA9IGNwdV90b19sZTE2KHNpemVvZihsb2cpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzX3RmL2NtZC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXNfdGYvY21kLmMKaW5kZXggM2QzOTE0Yy4uMjg3OTBlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXNfdGYvY21kLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXNfdGYvY21kLmMKQEAgLTI4Niw3ICsyODYsNyBAQAogCWxidGZfY21kX2FzeW5jKHByaXYsIENNRF84MDJfMTFfU0VUX01PREUsICZjbWQuaGRyLCBzaXplb2YoY21kKSk7CiB9CiAKLXZvaWQgbGJ0Zl9zZXRfYnNzaWQoc3RydWN0IGxidGZfcHJpdmF0ZSAqcHJpdiwgYm9vbCBhY3RpdmF0ZSwgdTggKmJzc2lkKQordm9pZCBsYnRmX3NldF9ic3NpZChzdHJ1Y3QgbGJ0Zl9wcml2YXRlICpwcml2LCBib29sIGFjdGl2YXRlLCBjb25zdCB1OCAqYnNzaWQpCiB7CiAJc3RydWN0IGNtZF9kc19zZXRfYnNzaWQgY21kOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhc190Zi9saWJlcnRhc190Zi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXNfdGYvbGliZXJ0YXNfdGYuaAppbmRleCA4OTk1Y2Q3Li40Y2M0MmRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhc190Zi9saWJlcnRhc190Zi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzX3RmL2xpYmVydGFzX3RmLmgKQEAgLTQ2Myw3ICs0NjMsNyBAQAogaW50IGxidGZfdXBkYXRlX2h3X3NwZWMoc3RydWN0IGxidGZfcHJpdmF0ZSAqcHJpdik7CiBpbnQgbGJ0Zl9jbWRfc2V0X21hY19tdWx0aWNhc3RfYWRkcihzdHJ1Y3QgbGJ0Zl9wcml2YXRlICpwcml2KTsKIHZvaWQgbGJ0Zl9zZXRfbW9kZShzdHJ1Y3QgbGJ0Zl9wcml2YXRlICpwcml2LCBlbnVtIGxidGZfbW9kZSBtb2RlKTsKLXZvaWQgbGJ0Zl9zZXRfYnNzaWQoc3RydWN0IGxidGZfcHJpdmF0ZSAqcHJpdiwgYm9vbCBhY3RpdmF0ZSwgdTggKmJzc2lkKTsKK3ZvaWQgbGJ0Zl9zZXRfYnNzaWQoc3RydWN0IGxidGZfcHJpdmF0ZSAqcHJpdiwgYm9vbCBhY3RpdmF0ZSwgY29uc3QgdTggKmJzc2lkKTsKIGludCBsYnRmX3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbGJ0Zl9wcml2YXRlICpwcml2LCB1aW50OF90ICptYWNfYWRkcik7CiAKIGludCBsYnRmX3NldF9jaGFubmVsKHN0cnVjdCBsYnRmX3ByaXZhdGUgKnByaXYsIHU4IGNoYW5uZWwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFjODAyMTFfaHdzaW0uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hYzgwMjExX2h3c2ltLmMKaW5kZXggZjgzZDY5ZS4uMjM2OGI3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFjODAyMTFfaHdzaW0uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYWM4MDIxMV9od3NpbS5jCkBAIC0xMCw3ICsxMCw2IEBACiAvKgogICogVE9ETzoKICAqIC0gSUJTUyBtb2RlIHNpbXVsYXRpb24gKEJlYWNvbiB0cmFuc21pc3Npb24gd2l0aCBjb21wZXRpdGlvbiBmb3IgImFpciB0aW1lIikKLSAqIC0gSUVFRSA4MDIuMTFhIGFuZCA4MDIuMTFuIG1vZGVzCiAgKiAtIFJYIGZpbHRlcmluZyBiYXNlZCBvbiBmaWx0ZXIgY29uZmlndXJhdGlvbiAoZGF0YS0+cnhfZmlsdGVyKQogICovCiAKQEAgLTMxLDYgKzMwLDExMiBAQAogbW9kdWxlX3BhcmFtKHJhZGlvcywgaW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MocmFkaW9zLCAiTnVtYmVyIG9mIHNpbXVsYXRlZCByYWRpb3MiKTsKIAorLyoqCisgKiBlbnVtIGh3c2ltX3JlZ3Rlc3QgLSB0aGUgdHlwZSBvZiByZWd1bGF0b3J5IHRlc3RzIHdlIG9mZmVyCisgKgorICogVGhlc2UgYXJlIHRoZSBkaWZmZXJlbnQgdmFsdWVzIHlvdSBjYW4gdXNlIGZvciB0aGUgcmVndGVzdAorICogbW9kdWxlIHBhcmFtZXRlci4gVGhpcyBpcyB1c2VmdWwgdG8gaGVscCB0ZXN0IHdvcmxkIHJvYW1pbmcKKyAqIGFuZCB0aGUgZHJpdmVyIHJlZ3VsYXRvcnlfaGludCgpIGNhbGwgYW5kIGNvbWJpbmF0aW9ucyBvZiB0aGVzZS4KKyAqIElmIHlvdSB3YW50IHRvIGRvIHNwZWNpZmljIGFscGhhMiByZWd1bGF0b3J5IGRvbWFpbiB0ZXN0cyBzaW1wbHkKKyAqIHVzZSB0aGUgdXNlcnNwYWNlIHJlZ3VsYXRvcnkgcmVxdWVzdCBhcyB0aGF0IHdpbGwgYmUgcmVzcGVjdGVkIGFzCisgKiB3ZWxsIHdpdGhvdXQgdGhlIG5lZWQgb2YgdGhpcyBtb2R1bGUgcGFyYW1ldGVyLiBUaGlzIGlzIGRlc2lnbmVkCisgKiBvbmx5IGZvciB0ZXN0aW5nIHRoZSBkcml2ZXIgcmVndWxhdG9yeSByZXF1ZXN0LCB3b3JsZCByb2FtaW5nCisgKiBhbmQgYWxsIHBvc3NpYmxlIGNvbWJpbmF0aW9ucy4KKyAqCisgKiBASFdTSU1fUkVHVEVTVF9ESVNBQkxFRDogTm8gcmVndWxhdG9yeSB0ZXN0cyBhcmUgcGVyZm9ybWVkLAorICogCXRoaXMgaXMgdGhlIGRlZmF1bHQgdmFsdWUuCisgKiBASFdTSU1fUkVHVEVTVF9EUklWRVJfUkVHX0ZPTExPVzogVXNlZCBmb3IgdGVzdGluZyB0aGUgZHJpdmVyIHJlZ3VsYXRvcnkKKyAqCWhpbnQsIG9ubHkgb25lIGRyaXZlciByZWd1bGF0b3J5IGhpbnQgd2lsbCBiZSBzZW50IGFzIHN1Y2ggdGhlCisgKiAJc2Vjb25kYXJ5IHJhZGlvcyBhcmUgZXhwZWN0ZWQgdG8gZm9sbG93LgorICogQEhXU0lNX1JFR1RFU1RfRFJJVkVSX1JFR19BTEw6IFVzZWQgZm9yIHRlc3RpbmcgdGhlIGRyaXZlciByZWd1bGF0b3J5CisgKiAJcmVxdWVzdCB3aXRoIGFsbCByYWRpb3MgcmVwb3J0aW5nIHRoZSBzYW1lIHJlZ3VsYXRvcnkgZG9tYWluLgorICogQEhXU0lNX1JFR1RFU1RfRElGRl9DT1VOVFJZOiBVc2VkIGZvciB0ZXN0aW5nIHRoZSBkcml2ZXJzIGNhbGxpbmcKKyAqIAlkaWZmZXJlbnQgcmVndWxhdG9yeSBkb21haW5zIHJlcXVlc3RzLiBFeHBlY3RlZCBiZWhhdmlvdXIgaXMgZm9yCisgKiAJYW4gaW50ZXJzZWN0aW9uIHRvIG9jY3VyIGJ1dCBlYWNoIGRldmljZSB3aWxsIHN0aWxsIHVzZSB0aGVpcgorICogCXJlc3BlY3RpdmUgcmVndWxhdG9yeSByZXF1ZXN0ZWQgZG9tYWlucy4gU3Vic2VxdWVudCByYWRpb3Mgd2lsbAorICogCXVzZSB0aGUgcmVzdWx0aW5nIGludGVyc2VjdGlvbi4KKyAqIEBIV1NJTV9SRUdURVNUX1dPUkxEX1JPQU06IFVzZWQgZm9yIHRlc3RpbmcgdGhlIHdvcmxkIHJvYW1pbmcuIFdlIGFjb21wbGlzaAorICoJdGhpcyBieSB1c2luZyBhIGN1c3RvbSBiZWFjb24tY2FwYWJsZSByZWd1bGF0b3J5IGRvbWFpbiBmb3IgdGhlIGZpcnN0CisgKglyYWRpby4gQWxsIG90aGVyIGRldmljZSB3b3JsZCByb2FtLgorICogQEhXU0lNX1JFR1RFU1RfQ1VTVE9NX1dPUkxEOiBVc2VkIGZvciB0ZXN0aW5nIHRoZSBjdXN0b20gd29ybGQgcmVndWxhdG9yeQorICogCWRvbWFpbiByZXF1ZXN0cy4gQWxsIHJhZGlvcyB3aWxsIGFkaGVyZSB0byB0aGlzIGN1c3RvbSB3b3JsZCByZWd1bGF0b3J5CisgKiAJZG9tYWluLgorICogQEhXU0lNX1JFR1RFU1RfQ1VTVE9NX1dPUkxEXzI6IFVzZWQgZm9yIHRlc3RpbmcgMiBjdXN0b20gd29ybGQgcmVndWxhdG9yeQorICogCWRvbWFpbiByZXF1ZXN0cy4gVGhlIGZpcnN0IHJhZGlvIHdpbGwgYWRoZXJlIHRvIHRoZSBmaXJzdCBjdXN0b20gd29ybGQKKyAqIAlyZWd1bGF0b3J5IGRvbWFpbiwgdGhlIHNlY29uZCBvbmUgdG8gdGhlIHNlY29uZCBjdXN0b20gd29ybGQgcmVndWxhdG9yeQorICogCWRvbWFpbi4gQWxsIG90aGVyIGRldmljZXMgd2lsbCB3b3JsZCByb2FtLgorICogQEhXU0lNX1JFR1RFU1RfU1RSSUNUX0ZPTExPV186IFVzZWQgZm9yIHRlc3Rpbmcgc3RyaWN0IHJlZ3VsYXRvcnkgZG9tYWluCisgKglzZXR0aW5ncywgb25seSB0aGUgZmlyc3QgcmFkaW8gd2lsbCBzZW5kIGEgcmVndWxhdG9yeSBkb21haW4gcmVxdWVzdAorICoJYW5kIHVzZSBzdHJpY3Qgc2V0dGluZ3MuIFRoZSByZXN0IG9mIHRoZSByYWRpb3MgYXJlIGV4cGVjdGVkIHRvIGZvbGxvdy4KKyAqIEBIV1NJTV9SRUdURVNUX1NUUklDVF9BTEw6IFVzZWQgZm9yIHRlc3Rpbmcgc3RyaWN0IHJlZ3VsYXRvcnkgZG9tYWluCisgKglzZXR0aW5ncy4gQWxsIHJhZGlvcyB3aWxsIGFkaGVyZSB0byB0aGlzLgorICogQEhXU0lNX1JFR1RFU1RfU1RSSUNUX0FORF9EUklWRVJfUkVHOiBVc2VkIGZvciB0ZXN0aW5nIHN0cmljdCByZWd1bGF0b3J5CisgKglkb21haW4gc2V0dGluZ3MsIGNvbWJpbmVkIHdpdGggc2Vjb25kYXJ5IGRyaXZlciByZWd1bGF0b3J5IGRvbWFpbgorICoJc2V0dGluZ3MuIFRoZSBmaXJzdCByYWRpbyB3aWxsIGdldCBhIHN0cmljdCByZWd1bGF0b3J5IGRvbWFpbiBzZXR0aW5nCisgKgl1c2luZyB0aGUgZmlyc3QgZHJpdmVyIHJlZ3VsYXRvcnkgcmVxdWVzdCBhbmQgdGhlIHNlY29uZCByYWRpbyB3aWxsIHVzZQorICoJbm9uLXN0cmljdCBzZXR0aW5ncyB1c2luZyB0aGUgc2Vjb25kIGRyaXZlciByZWd1bGF0b3J5IHJlcXVlc3QuIEFsbAorICoJb3RoZXIgZGV2aWNlcyBzaG91bGQgZm9sbG93IHRoZSBpbnRlcnNlY3Rpb24gY3JlYXRlZCBiZXR3ZWVuIHRoZQorICoJZmlyc3QgdHdvLgorICogQEhXU0lNX1JFR1RFU1RfQUxMOiBVc2VkIGZvciB0ZXN0aW5nIGV2ZXJ5IHBvc3NpYmxlIG1peC4gWW91IHdpbGwgbmVlZAorICogCWF0IGxlYXN0IDYgcmFkaW9zIGZvciBhIGNvbXBsZXRlIHRlc3QuIFdlIHdpbGwgdGVzdCBpbiB0aGlzIG9yZGVyOgorICogCTEgLSBkcml2ZXIgY3VzdG9tIHdvcmxkIHJlZ3VsYXRvcnkgZG9tYWluCisgKiAJMiAtIHNlY29uZCBjdXN0b20gd29ybGQgcmVndWxhdG9yeSBkb21haW4KKyAqIAkzIC0gZmlyc3QgZHJpdmVyIHJlZ3VsYXRvcnkgZG9tYWluIHJlcXVlc3QKKyAqIAk0IC0gc2Vjb25kIGRyaXZlciByZWd1bGF0b3J5IGRvbWFpbiByZXF1ZXN0CisgKiAJNSAtIHN0cmljdCByZWd1bGF0b3J5IGRvbWFpbiBzZXR0aW5ncyB1c2luZyB0aGUgdGhpcmQgZHJpdmVyIHJlZ3VsYXRvcnkKKyAqIAkgICAgZG9tYWluIHJlcXVlc3QKKyAqIAk2IGFuZCBvbiAtIHNob3VsZCBmb2xsb3cgdGhlIGludGVyc2VjdGlvbiBvZiB0aGUgM3JkLCA0cnRoIGFuZCA1dGggcmFkaW8KKyAqIAkgICAgICAgICAgIHJlZ3VsYXRvcnkgcmVxdWVzdHMuCisgKi8KK2VudW0gaHdzaW1fcmVndGVzdCB7CisJSFdTSU1fUkVHVEVTVF9ESVNBQkxFRCA9IDAsCisJSFdTSU1fUkVHVEVTVF9EUklWRVJfUkVHX0ZPTExPVyA9IDEsCisJSFdTSU1fUkVHVEVTVF9EUklWRVJfUkVHX0FMTCA9IDIsCisJSFdTSU1fUkVHVEVTVF9ESUZGX0NPVU5UUlkgPSAzLAorCUhXU0lNX1JFR1RFU1RfV09STERfUk9BTSA9IDQsCisJSFdTSU1fUkVHVEVTVF9DVVNUT01fV09STEQgPSA1LAorCUhXU0lNX1JFR1RFU1RfQ1VTVE9NX1dPUkxEXzIgPSA2LAorCUhXU0lNX1JFR1RFU1RfU1RSSUNUX0ZPTExPVyA9IDcsCisJSFdTSU1fUkVHVEVTVF9TVFJJQ1RfQUxMID0gOCwKKwlIV1NJTV9SRUdURVNUX1NUUklDVF9BTkRfRFJJVkVSX1JFRyA9IDksCisJSFdTSU1fUkVHVEVTVF9BTEwgPSAxMCwKK307CisKKy8qIFNldCB0byBvbmUgb2YgdGhlIEhXU0lNX1JFR1RFU1RfKiB2YWx1ZXMgYWJvdmUgKi8KK3N0YXRpYyBpbnQgcmVndGVzdCA9IEhXU0lNX1JFR1RFU1RfRElTQUJMRUQ7Cittb2R1bGVfcGFyYW0ocmVndGVzdCwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MocmVndGVzdCwgIlRoZSB0eXBlIG9mIHJlZ3VsYXRvcnkgdGVzdCB3ZSB3YW50IHRvIHJ1biIpOworCitzdGF0aWMgY29uc3QgY2hhciAqaHdzaW1fYWxwaGEyc1tdID0geworCSJGSSIsCisJIkFMIiwKKwkiVVMiLAorCSJERSIsCisJIkpQIiwKKwkiQUwiLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluIGh3c2ltX3dvcmxkX3JlZ2RvbV9jdXN0b21fMDEgPSB7CisJLm5fcmVnX3J1bGVzID0gNCwKKwkuYWxwaGEyID0gICI5OSIsCisJLnJlZ19ydWxlcyA9IHsKKwkJUkVHX1JVTEUoMjQxMi0xMCwgMjQ2MisxMCwgNDAsIDAsIDIwLCAwKSwKKwkJUkVHX1JVTEUoMjQ4NC0xMCwgMjQ4NCsxMCwgNDAsIDAsIDIwLCAwKSwKKwkJUkVHX1JVTEUoNTE1MC0xMCwgNTI0MCsxMCwgNDAsIDAsIDMwLCAwKSwKKwkJUkVHX1JVTEUoNTc0NS0xMCwgNTgyNSsxMCwgNDAsIDAsIDMwLCAwKSwKKwl9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gaHdzaW1fd29ybGRfcmVnZG9tX2N1c3RvbV8wMiA9IHsKKwkubl9yZWdfcnVsZXMgPSAyLAorCS5hbHBoYTIgPSAgIjk5IiwKKwkucmVnX3J1bGVzID0geworCQlSRUdfUlVMRSgyNDEyLTEwLCAyNDYyKzEwLCA0MCwgMCwgMjAsIDApLAorCQlSRUdfUlVMRSg1NzI1LTEwLCA1ODUwKzEwLCA0MCwgMCwgMzAsCisJCQlOTDgwMjExX1JSRl9QQVNTSVZFX1NDQU4gfCBOTDgwMjExX1JSRl9OT19JQlNTKSwKKwl9Cit9OworCiBzdHJ1Y3QgaHdzaW1fdmlmX3ByaXYgewogCXUzMiBtYWdpYzsKIAl1OCBic3NpZFtFVEhfQUxFTl07CkBAIC04NiwyMiArMTkxLDY1IEBACiAKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqaHdzaW1fbW9uOyAvKiBnbG9iYWwgbW9uaXRvciBuZXRkZXYgKi8KIAorI2RlZmluZSBDSEFOMkcoX2ZyZXEpICB7IFwKKwkuYmFuZCA9IElFRUU4MDIxMV9CQU5EXzJHSFosIFwKKwkuY2VudGVyX2ZyZXEgPSAoX2ZyZXEpLCBcCisJLmh3X3ZhbHVlID0gKF9mcmVxKSwgXAorCS5tYXhfcG93ZXIgPSAyMCwgXAorfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIGh3c2ltX2NoYW5uZWxzW10gPSB7Ci0JeyAuY2VudGVyX2ZyZXEgPSAyNDEyIH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDE3IH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDIyIH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDI3IH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDMyIH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDM3IH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDQyIH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDQ3IH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDUyIH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDU3IH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDYyIH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDY3IH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDcyIH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDg0IH0sCisjZGVmaW5lIENIQU41RyhfZnJlcSkgeyBcCisJLmJhbmQgPSBJRUVFODAyMTFfQkFORF81R0haLCBcCisJLmNlbnRlcl9mcmVxID0gKF9mcmVxKSwgXAorCS5od192YWx1ZSA9IChfZnJlcSksIFwKKwkubWF4X3Bvd2VyID0gMjAsIFwKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCBod3NpbV9jaGFubmVsc18yZ2h6W10gPSB7CisJQ0hBTjJHKDI0MTIpLCAvKiBDaGFubmVsIDEgKi8KKwlDSEFOMkcoMjQxNyksIC8qIENoYW5uZWwgMiAqLworCUNIQU4yRygyNDIyKSwgLyogQ2hhbm5lbCAzICovCisJQ0hBTjJHKDI0MjcpLCAvKiBDaGFubmVsIDQgKi8KKwlDSEFOMkcoMjQzMiksIC8qIENoYW5uZWwgNSAqLworCUNIQU4yRygyNDM3KSwgLyogQ2hhbm5lbCA2ICovCisJQ0hBTjJHKDI0NDIpLCAvKiBDaGFubmVsIDcgKi8KKwlDSEFOMkcoMjQ0NyksIC8qIENoYW5uZWwgOCAqLworCUNIQU4yRygyNDUyKSwgLyogQ2hhbm5lbCA5ICovCisJQ0hBTjJHKDI0NTcpLCAvKiBDaGFubmVsIDEwICovCisJQ0hBTjJHKDI0NjIpLCAvKiBDaGFubmVsIDExICovCisJQ0hBTjJHKDI0NjcpLCAvKiBDaGFubmVsIDEyICovCisJQ0hBTjJHKDI0NzIpLCAvKiBDaGFubmVsIDEzICovCisJQ0hBTjJHKDI0ODQpLCAvKiBDaGFubmVsIDE0ICovCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIGh3c2ltX2NoYW5uZWxzXzVnaHpbXSA9IHsKKwlDSEFONUcoNTE4MCksIC8qIENoYW5uZWwgMzYgKi8KKwlDSEFONUcoNTIwMCksIC8qIENoYW5uZWwgNDAgKi8KKwlDSEFONUcoNTIyMCksIC8qIENoYW5uZWwgNDQgKi8KKwlDSEFONUcoNTI0MCksIC8qIENoYW5uZWwgNDggKi8KKworCUNIQU41Ryg1MjYwKSwgLyogQ2hhbm5lbCA1MiAqLworCUNIQU41Ryg1MjgwKSwgLyogQ2hhbm5lbCA1NiAqLworCUNIQU41Ryg1MzAwKSwgLyogQ2hhbm5lbCA2MCAqLworCUNIQU41Ryg1MzIwKSwgLyogQ2hhbm5lbCA2NCAqLworCisJQ0hBTjVHKDU1MDApLCAvKiBDaGFubmVsIDEwMCAqLworCUNIQU41Ryg1NTIwKSwgLyogQ2hhbm5lbCAxMDQgKi8KKwlDSEFONUcoNTU0MCksIC8qIENoYW5uZWwgMTA4ICovCisJQ0hBTjVHKDU1NjApLCAvKiBDaGFubmVsIDExMiAqLworCUNIQU41Ryg1NTgwKSwgLyogQ2hhbm5lbCAxMTYgKi8KKwlDSEFONUcoNTYwMCksIC8qIENoYW5uZWwgMTIwICovCisJQ0hBTjVHKDU2MjApLCAvKiBDaGFubmVsIDEyNCAqLworCUNIQU41Ryg1NjQwKSwgLyogQ2hhbm5lbCAxMjggKi8KKwlDSEFONUcoNTY2MCksIC8qIENoYW5uZWwgMTMyICovCisJQ0hBTjVHKDU2ODApLCAvKiBDaGFubmVsIDEzNiAqLworCUNIQU41Ryg1NzAwKSwgLyogQ2hhbm5lbCAxNDAgKi8KKworCUNIQU41Ryg1NzQ1KSwgLyogQ2hhbm5lbCAxNDkgKi8KKwlDSEFONUcoNTc2NSksIC8qIENoYW5uZWwgMTUzICovCisJQ0hBTjVHKDU3ODUpLCAvKiBDaGFubmVsIDE1NyAqLworCUNIQU41Ryg1ODA1KSwgLyogQ2hhbm5lbCAxNjEgKi8KKwlDSEFONUcoNTgyNSksIC8qIENoYW5uZWwgMTY1ICovCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yYXRlIGh3c2ltX3JhdGVzW10gPSB7CkBAIC0xMjYsOCArMjc0LDkgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CiAJc3RydWN0IGRldmljZSAqZGV2OwotCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgYmFuZDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgY2hhbm5lbHNbQVJSQVlfU0laRShod3NpbV9jaGFubmVscyldOworCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgYmFuZHNbMl07CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIGNoYW5uZWxzXzJnaHpbQVJSQVlfU0laRShod3NpbV9jaGFubmVsc18yZ2h6KV07CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIGNoYW5uZWxzXzVnaHpbQVJSQVlfU0laRShod3NpbV9jaGFubmVsc181Z2h6KV07CiAJc3RydWN0IGllZWU4MDIxMV9yYXRlIHJhdGVzW0FSUkFZX1NJWkUoaHdzaW1fcmF0ZXMpXTsKIAogCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbDsKQEAgLTU5MCwxMCArNzM5LDE2IEBACiAJLm5hbWUgPSAibWFjODAyMTFfaHdzaW0iCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGh3c2ltX25ldGRldl9vcHMgPSB7CisJLm5kb19zdGFydF94bWl0IAk9IGh3c2ltX21vbl94bWl0LAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OwogCiBzdGF0aWMgdm9pZCBod3NpbV9tb25fc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGh3c2ltX21vbl94bWl0OworCWRldi0+bmV0ZGV2X29wcyA9ICZod3NpbV9uZXRkZXZfb3BzOwogCWRldi0+ZGVzdHJ1Y3RvciA9IGZyZWVfbmV0ZGV2OwogCWV0aGVyX3NldHVwKGRldik7CiAJZGV2LT50eF9xdWV1ZV9sZW4gPSAwOwpAQCAtNzI4LDYgKzg4Myw3IEBACiAJdTggYWRkcltFVEhfQUxFTl07CiAJc3RydWN0IG1hYzgwMjExX2h3c2ltX2RhdGEgKmRhdGE7CiAJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CisJZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kOwogCiAJaWYgKHJhZGlvcyA8IDEgfHwgcmFkaW9zID4gMTAwKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTc3OSwyOSArOTM1LDExMSBAQAogCQkJQklUKE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpOwogCQlody0+YW1wZHVfcXVldWVzID0gMTsKIAorCQlody0+ZmxhZ3MgPSBJRUVFODAyMTFfSFdfTUZQX0NBUEFCTEU7CisKIAkJLyogYXNrIG1hYzgwMjExIHRvIHJlc2VydmUgc3BhY2UgZm9yIG1hZ2ljICovCiAJCWh3LT52aWZfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBod3NpbV92aWZfcHJpdik7CiAJCWh3LT5zdGFfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBod3NpbV9zdGFfcHJpdik7CiAKLQkJbWVtY3B5KGRhdGEtPmNoYW5uZWxzLCBod3NpbV9jaGFubmVscywgc2l6ZW9mKGh3c2ltX2NoYW5uZWxzKSk7CisJCW1lbWNweShkYXRhLT5jaGFubmVsc18yZ2h6LCBod3NpbV9jaGFubmVsc18yZ2h6LAorCQkJc2l6ZW9mKGh3c2ltX2NoYW5uZWxzXzJnaHopKTsKKwkJbWVtY3B5KGRhdGEtPmNoYW5uZWxzXzVnaHosIGh3c2ltX2NoYW5uZWxzXzVnaHosCisJCQlzaXplb2YoaHdzaW1fY2hhbm5lbHNfNWdoeikpOwogCQltZW1jcHkoZGF0YS0+cmF0ZXMsIGh3c2ltX3JhdGVzLCBzaXplb2YoaHdzaW1fcmF0ZXMpKTsKLQkJZGF0YS0+YmFuZC5jaGFubmVscyA9IGRhdGEtPmNoYW5uZWxzOwotCQlkYXRhLT5iYW5kLm5fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKGh3c2ltX2NoYW5uZWxzKTsKLQkJZGF0YS0+YmFuZC5iaXRyYXRlcyA9IGRhdGEtPnJhdGVzOwotCQlkYXRhLT5iYW5kLm5fYml0cmF0ZXMgPSBBUlJBWV9TSVpFKGh3c2ltX3JhdGVzKTsKLQkJZGF0YS0+YmFuZC5odF9jYXAuaHRfc3VwcG9ydGVkID0gdHJ1ZTsKLQkJZGF0YS0+YmFuZC5odF9jYXAuY2FwID0gSUVFRTgwMjExX0hUX0NBUF9TVVBfV0lEVEhfMjBfNDAgfAotCQkJSUVFRTgwMjExX0hUX0NBUF9HUk5fRkxEIHwKLQkJCUlFRUU4MDIxMV9IVF9DQVBfU0dJXzQwIHwKLQkJCUlFRUU4MDIxMV9IVF9DQVBfRFNTU0NDSzQwOwotCQlkYXRhLT5iYW5kLmh0X2NhcC5hbXBkdV9mYWN0b3IgPSAweDM7Ci0JCWRhdGEtPmJhbmQuaHRfY2FwLmFtcGR1X2RlbnNpdHkgPSAweDY7Ci0JCW1lbXNldCgmZGF0YS0+YmFuZC5odF9jYXAubWNzLCAwLAotCQkgICAgICAgc2l6ZW9mKGRhdGEtPmJhbmQuaHRfY2FwLm1jcykpOwotCQlkYXRhLT5iYW5kLmh0X2NhcC5tY3MucnhfbWFza1swXSA9IDB4ZmY7Ci0JCWRhdGEtPmJhbmQuaHRfY2FwLm1jcy5yeF9tYXNrWzFdID0gMHhmZjsKLQkJZGF0YS0+YmFuZC5odF9jYXAubWNzLnR4X3BhcmFtcyA9IElFRUU4MDIxMV9IVF9NQ1NfVFhfREVGSU5FRDsKLQkJaHctPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXSA9ICZkYXRhLT5iYW5kOworCisJCWZvciAoYmFuZCA9IElFRUU4MDIxMV9CQU5EXzJHSFo7IGJhbmQgPCBJRUVFODAyMTFfTlVNX0JBTkRTOyBiYW5kKyspIHsKKwkJCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kID0gJmRhdGEtPmJhbmRzW2JhbmRdOworCQkJc3dpdGNoIChiYW5kKSB7CisJCQljYXNlIElFRUU4MDIxMV9CQU5EXzJHSFo6CisJCQkJc2JhbmQtPmNoYW5uZWxzID0gZGF0YS0+Y2hhbm5lbHNfMmdoejsKKwkJCQlzYmFuZC0+bl9jaGFubmVscyA9CisJCQkJCUFSUkFZX1NJWkUoaHdzaW1fY2hhbm5lbHNfMmdoeik7CisJCQkJYnJlYWs7CisJCQljYXNlIElFRUU4MDIxMV9CQU5EXzVHSFo6CisJCQkJc2JhbmQtPmNoYW5uZWxzID0gZGF0YS0+Y2hhbm5lbHNfNWdoejsKKwkJCQlzYmFuZC0+bl9jaGFubmVscyA9CisJCQkJCUFSUkFZX1NJWkUoaHdzaW1fY2hhbm5lbHNfNWdoeik7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWJyZWFrOworCQkJfQorCisJCQlzYmFuZC0+Yml0cmF0ZXMgPSBkYXRhLT5yYXRlczsKKwkJCXNiYW5kLT5uX2JpdHJhdGVzID0gQVJSQVlfU0laRShod3NpbV9yYXRlcyk7CisKKwkJCXNiYW5kLT5odF9jYXAuaHRfc3VwcG9ydGVkID0gdHJ1ZTsKKwkJCXNiYW5kLT5odF9jYXAuY2FwID0gSUVFRTgwMjExX0hUX0NBUF9TVVBfV0lEVEhfMjBfNDAgfAorCQkJCUlFRUU4MDIxMV9IVF9DQVBfR1JOX0ZMRCB8CisJCQkJSUVFRTgwMjExX0hUX0NBUF9TR0lfNDAgfAorCQkJCUlFRUU4MDIxMV9IVF9DQVBfRFNTU0NDSzQwOworCQkJc2JhbmQtPmh0X2NhcC5hbXBkdV9mYWN0b3IgPSAweDM7CisJCQlzYmFuZC0+aHRfY2FwLmFtcGR1X2RlbnNpdHkgPSAweDY7CisJCQltZW1zZXQoJnNiYW5kLT5odF9jYXAubWNzLCAwLAorCQkJICAgICAgIHNpemVvZihzYmFuZC0+aHRfY2FwLm1jcykpOworCQkJc2JhbmQtPmh0X2NhcC5tY3MucnhfbWFza1swXSA9IDB4ZmY7CisJCQlzYmFuZC0+aHRfY2FwLm1jcy5yeF9tYXNrWzFdID0gMHhmZjsKKwkJCXNiYW5kLT5odF9jYXAubWNzLnR4X3BhcmFtcyA9IElFRUU4MDIxMV9IVF9NQ1NfVFhfREVGSU5FRDsKKworCQkJaHctPndpcGh5LT5iYW5kc1tiYW5kXSA9IHNiYW5kOworCQl9CisKKwkJLyogV29yayB0byBiZSBkb25lIHByaW9yIHRvIGllZWU4MDIxMV9yZWdpc3Rlcl9odygpICovCisJCXN3aXRjaCAocmVndGVzdCkgeworCQljYXNlIEhXU0lNX1JFR1RFU1RfRElTQUJMRUQ6CisJCWNhc2UgSFdTSU1fUkVHVEVTVF9EUklWRVJfUkVHX0ZPTExPVzoKKwkJY2FzZSBIV1NJTV9SRUdURVNUX0RSSVZFUl9SRUdfQUxMOgorCQljYXNlIEhXU0lNX1JFR1RFU1RfRElGRl9DT1VOVFJZOgorCQkJLyoKKwkJCSAqIE5vdGhpbmcgdG8gYmUgZG9uZSBmb3IgZHJpdmVyIHJlZ3VsYXRvcnkgZG9tYWluCisJCQkgKiBoaW50cyBwcmlvciB0byBpZWVlODAyMTFfcmVnaXN0ZXJfaHcoKQorCQkJICovCisJCQlicmVhazsKKwkJY2FzZSBIV1NJTV9SRUdURVNUX1dPUkxEX1JPQU06CisJCQlpZiAoaSA9PSAwKSB7CisJCQkJaHctPndpcGh5LT5jdXN0b21fcmVndWxhdG9yeSA9IHRydWU7CisJCQkJd2lwaHlfYXBwbHlfY3VzdG9tX3JlZ3VsYXRvcnkoaHctPndpcGh5LAorCQkJCQkmaHdzaW1fd29ybGRfcmVnZG9tX2N1c3RvbV8wMSk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBIV1NJTV9SRUdURVNUX0NVU1RPTV9XT1JMRDoKKwkJCWh3LT53aXBoeS0+Y3VzdG9tX3JlZ3VsYXRvcnkgPSB0cnVlOworCQkJd2lwaHlfYXBwbHlfY3VzdG9tX3JlZ3VsYXRvcnkoaHctPndpcGh5LAorCQkJCSZod3NpbV93b3JsZF9yZWdkb21fY3VzdG9tXzAxKTsKKwkJCWJyZWFrOworCQljYXNlIEhXU0lNX1JFR1RFU1RfQ1VTVE9NX1dPUkxEXzI6CisJCQlpZiAoaSA9PSAwKSB7CisJCQkJaHctPndpcGh5LT5jdXN0b21fcmVndWxhdG9yeSA9IHRydWU7CisJCQkJd2lwaHlfYXBwbHlfY3VzdG9tX3JlZ3VsYXRvcnkoaHctPndpcGh5LAorCQkJCQkmaHdzaW1fd29ybGRfcmVnZG9tX2N1c3RvbV8wMSk7CisJCQl9IGVsc2UgaWYgKGkgPT0gMSkgeworCQkJCWh3LT53aXBoeS0+Y3VzdG9tX3JlZ3VsYXRvcnkgPSB0cnVlOworCQkJCXdpcGh5X2FwcGx5X2N1c3RvbV9yZWd1bGF0b3J5KGh3LT53aXBoeSwKKwkJCQkJJmh3c2ltX3dvcmxkX3JlZ2RvbV9jdXN0b21fMDIpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgSFdTSU1fUkVHVEVTVF9TVFJJQ1RfQUxMOgorCQkJaHctPndpcGh5LT5zdHJpY3RfcmVndWxhdG9yeSA9IHRydWU7CisJCQlicmVhazsKKwkJY2FzZSBIV1NJTV9SRUdURVNUX1NUUklDVF9GT0xMT1c6CisJCWNhc2UgSFdTSU1fUkVHVEVTVF9TVFJJQ1RfQU5EX0RSSVZFUl9SRUc6CisJCQlpZiAoaSA9PSAwKQorCQkJCWh3LT53aXBoeS0+c3RyaWN0X3JlZ3VsYXRvcnkgPSB0cnVlOworCQkJYnJlYWs7CisJCWNhc2UgSFdTSU1fUkVHVEVTVF9BTEw6CisJCQlpZiAoaSA9PSAwKSB7CisJCQkJaHctPndpcGh5LT5jdXN0b21fcmVndWxhdG9yeSA9IHRydWU7CisJCQkJd2lwaHlfYXBwbHlfY3VzdG9tX3JlZ3VsYXRvcnkoaHctPndpcGh5LAorCQkJCQkmaHdzaW1fd29ybGRfcmVnZG9tX2N1c3RvbV8wMSk7CisJCQl9IGVsc2UgaWYgKGkgPT0gMSkgeworCQkJCWh3LT53aXBoeS0+Y3VzdG9tX3JlZ3VsYXRvcnkgPSB0cnVlOworCQkJCXdpcGh5X2FwcGx5X2N1c3RvbV9yZWd1bGF0b3J5KGh3LT53aXBoeSwKKwkJCQkJJmh3c2ltX3dvcmxkX3JlZ2RvbV9jdXN0b21fMDIpOworCQkJfSBlbHNlIGlmIChpID09IDQpCisJCQkJaHctPndpcGh5LT5zdHJpY3RfcmVndWxhdG9yeSA9IHRydWU7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CiAKIAkJZXJyID0gaWVlZTgwMjExX3JlZ2lzdGVyX2h3KGh3KTsKIAkJaWYgKGVyciA8IDApIHsKQEAgLTgxMCw2ICsxMDQ4LDUyIEBACiAJCQlnb3RvIGZhaWxlZF9odzsKIAkJfQogCisJCS8qIFdvcmsgdG8gYmUgZG9uZSBhZnRlciB0byBpZWVlODAyMTFfcmVnaXN0ZXJfaHcoKSAqLworCQlzd2l0Y2ggKHJlZ3Rlc3QpIHsKKwkJY2FzZSBIV1NJTV9SRUdURVNUX1dPUkxEX1JPQU06CisJCWNhc2UgSFdTSU1fUkVHVEVTVF9ESVNBQkxFRDoKKwkJCWJyZWFrOworCQljYXNlIEhXU0lNX1JFR1RFU1RfRFJJVkVSX1JFR19GT0xMT1c6CisJCQlpZiAoIWkpCisJCQkJcmVndWxhdG9yeV9oaW50KGh3LT53aXBoeSwgaHdzaW1fYWxwaGEyc1swXSk7CisJCQlicmVhazsKKwkJY2FzZSBIV1NJTV9SRUdURVNUX0RSSVZFUl9SRUdfQUxMOgorCQljYXNlIEhXU0lNX1JFR1RFU1RfU1RSSUNUX0FMTDoKKwkJCXJlZ3VsYXRvcnlfaGludChody0+d2lwaHksIGh3c2ltX2FscGhhMnNbMF0pOworCQkJYnJlYWs7CisJCWNhc2UgSFdTSU1fUkVHVEVTVF9ESUZGX0NPVU5UUlk6CisJCQlpZiAoaSA8IEFSUkFZX1NJWkUoaHdzaW1fYWxwaGEycykpCisJCQkJcmVndWxhdG9yeV9oaW50KGh3LT53aXBoeSwgaHdzaW1fYWxwaGEyc1tpXSk7CisJCQlicmVhazsKKwkJY2FzZSBIV1NJTV9SRUdURVNUX0NVU1RPTV9XT1JMRDoKKwkJY2FzZSBIV1NJTV9SRUdURVNUX0NVU1RPTV9XT1JMRF8yOgorCQkJLyoKKwkJCSAqIE5vdGhpbmcgdG8gYmUgZG9uZSBmb3IgY3VzdG9tIHdvcmxkIHJlZ3VsYXRvcnkKKwkJCSAqIGRvbWFpbnMgYWZ0ZXIgdG8gaWVlZTgwMjExX3JlZ2lzdGVyX2h3CisJCQkgKi8KKwkJCWJyZWFrOworCQljYXNlIEhXU0lNX1JFR1RFU1RfU1RSSUNUX0ZPTExPVzoKKwkJCWlmIChpID09IDApCisJCQkJcmVndWxhdG9yeV9oaW50KGh3LT53aXBoeSwgaHdzaW1fYWxwaGEyc1swXSk7CisJCQlicmVhazsKKwkJY2FzZSBIV1NJTV9SRUdURVNUX1NUUklDVF9BTkRfRFJJVkVSX1JFRzoKKwkJCWlmIChpID09IDApCisJCQkJcmVndWxhdG9yeV9oaW50KGh3LT53aXBoeSwgaHdzaW1fYWxwaGEyc1swXSk7CisJCQllbHNlIGlmIChpID09IDEpCisJCQkJcmVndWxhdG9yeV9oaW50KGh3LT53aXBoeSwgaHdzaW1fYWxwaGEyc1sxXSk7CisJCQlicmVhazsKKwkJY2FzZSBIV1NJTV9SRUdURVNUX0FMTDoKKwkJCWlmIChpID09IDIpCisJCQkJcmVndWxhdG9yeV9oaW50KGh3LT53aXBoeSwgaHdzaW1fYWxwaGEyc1swXSk7CisJCQllbHNlIGlmIChpID09IDMpCisJCQkJcmVndWxhdG9yeV9oaW50KGh3LT53aXBoeSwgaHdzaW1fYWxwaGEyc1sxXSk7CisJCQllbHNlIGlmIChpID09IDQpCisJCQkJcmVndWxhdG9yeV9oaW50KGh3LT53aXBoeSwgaHdzaW1fYWxwaGEyc1syXSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBod2FkZHIgJXBNIHJlZ2lzdGVyZWRcbiIsCiAJCSAgICAgICB3aXBoeV9uYW1lKGh3LT53aXBoeSksCiAJCSAgICAgICBody0+d2lwaHktPnBlcm1fYWRkcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9td2w4ay5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdsOGsuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2EwMjY4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdsOGsuYwpAQCAtMCwwICsxLDM3ODkgQEAKKy8qCisgKiBkcml2ZXJzL25ldC93aXJlbGVzcy9td2w4ay5jIGRyaXZlciBmb3IgTWFydmVsbCBUT1BET0cgODAyLjExIFdpcmVsZXNzIGNhcmRzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IE1hcnZlbGwgU2VtaWNvbmR1Y3RvciBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55CisgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKworI2RlZmluZSBNV0w4S19ERVNDCSJNYXJ2ZWxsIFRPUERPRyhSKSA4MDIuMTEgV2lyZWxlc3MgTmV0d29yayBEcml2ZXIiCisjZGVmaW5lIE1XTDhLX05BTUUJS0JVSUxEX01PRE5BTUUKKyNkZWZpbmUgTVdMOEtfVkVSU0lPTgkiMC45LjEiCisKK01PRFVMRV9ERVNDUklQVElPTihNV0w4S19ERVNDKTsKK01PRFVMRV9WRVJTSU9OKE1XTDhLX1ZFUlNJT04pOworTU9EVUxFX0FVVEhPUigiTGVubmVydCBCdXl0ZW5oZWsgPGJ1eXRlbmhAbWFydmVsbC5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShtd2w4a190YWJsZSkgPSB7CisJeyBQQ0lfVkRFVklDRShNQVJWRUxMLCAweDJhMmIpLCAuZHJpdmVyX2RhdGEgPSA4Njg3LCB9LAorCXsgUENJX1ZERVZJQ0UoTUFSVkVMTCwgMHgyYTMwKSwgLmRyaXZlcl9kYXRhID0gODY4NywgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgbXdsOGtfdGFibGUpOworCisjZGVmaW5lIElFRUU4MDIxMV9BRERSX0xFTgkJCUVUSF9BTEVOCisKKy8qIFJlZ2lzdGVyIGRlZmluaXRpb25zICovCisjZGVmaW5lIE1XTDhLX0hJVV9HRU5fUFRSCQkJMHgwMDAwMGMxMAorI2RlZmluZSAgTVdMOEtfTU9ERV9TVEEJCQkJMHgwMDAwMDA1YQorI2RlZmluZSAgTVdMOEtfTU9ERV9BUAkJCQkweDAwMDAwMGE1CisjZGVmaW5lIE1XTDhLX0hJVV9JTlRfQ09ERQkJCTB4MDAwMDBjMTQKKyNkZWZpbmUgIE1XTDhLX0ZXU1RBX1JFQURZCQkJMHhmMGYxZjJmNAorI2RlZmluZSAgTVdMOEtfRldBUF9SRUFEWQkJCTB4ZjFmMmY0YTUKKyNkZWZpbmUgIE1XTDhLX0lOVF9DT0RFX0NNRF9GSU5JU0hFRAkJMHgwMDAwMDAwNQorI2RlZmluZSBNV0w4S19ISVVfU0NSQVRDSAkJCTB4MDAwMDBjNDAKKworLyogSG9zdC0+ZGV2aWNlIGNvbW11bmljYXRpb25zICovCisjZGVmaW5lIE1XTDhLX0hJVV9IMkFfSU5URVJSVVBUX0VWRU5UUwkJMHgwMDAwMGMxOAorI2RlZmluZSBNV0w4S19ISVVfSDJBX0lOVEVSUlVQVF9TVEFUVVMJCTB4MDAwMDBjMWMKKyNkZWZpbmUgTVdMOEtfSElVX0gyQV9JTlRFUlJVUFRfTUFTSwkJMHgwMDAwMGMyMAorI2RlZmluZSBNV0w4S19ISVVfSDJBX0lOVEVSUlVQVF9DTEVBUl9TRUwJMHgwMDAwMGMyNAorI2RlZmluZSBNV0w4S19ISVVfSDJBX0lOVEVSUlVQVF9TVEFUVVNfTUFTSwkweDAwMDAwYzI4CisjZGVmaW5lICBNV0w4S19IMkFfSU5UX0RVTU1ZCQkJKDEgPDwgMjApCisjZGVmaW5lICBNV0w4S19IMkFfSU5UX1JFU0VUCQkJKDEgPDwgMTUpCisjZGVmaW5lICBNV0w4S19IMkFfSU5UX1BTCQkJKDEgPDwgMikKKyNkZWZpbmUgIE1XTDhLX0gyQV9JTlRfRE9PUkJFTEwJCQkoMSA8PCAxKQorI2RlZmluZSAgTVdMOEtfSDJBX0lOVF9QUEFfUkVBRFkJCSgxIDw8IDApCisKKy8qIERldmljZS0+aG9zdCBjb21tdW5pY2F0aW9ucyAqLworI2RlZmluZSBNV0w4S19ISVVfQTJIX0lOVEVSUlVQVF9FVkVOVFMJCTB4MDAwMDBjMmMKKyNkZWZpbmUgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfU1RBVFVTCQkweDAwMDAwYzMwCisjZGVmaW5lIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX01BU0sJCTB4MDAwMDBjMzQKKyNkZWZpbmUgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfQ0xFQVJfU0VMCTB4MDAwMDBjMzgKKyNkZWZpbmUgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfU1RBVFVTX01BU0sJMHgwMDAwMGMzYworI2RlZmluZSAgTVdMOEtfQTJIX0lOVF9EVU1NWQkJCSgxIDw8IDIwKQorI2RlZmluZSAgTVdMOEtfQTJIX0lOVF9DSE5MX1NXSVRDSEVECQkoMSA8PCAxMSkKKyNkZWZpbmUgIE1XTDhLX0EySF9JTlRfUVVFVUVfRU1QVFkJCSgxIDw8IDEwKQorI2RlZmluZSAgTVdMOEtfQTJIX0lOVF9SQURBUl9ERVRFQ1QJCSgxIDw8IDcpCisjZGVmaW5lICBNV0w4S19BMkhfSU5UX1JBRElPX09OCQkJKDEgPDwgNikKKyNkZWZpbmUgIE1XTDhLX0EySF9JTlRfUkFESU9fT0ZGCQkoMSA8PCA1KQorI2RlZmluZSAgTVdMOEtfQTJIX0lOVF9NQUNfRVZFTlQJCSgxIDw8IDMpCisjZGVmaW5lICBNV0w4S19BMkhfSU5UX09QQ19ET05FCQkJKDEgPDwgMikKKyNkZWZpbmUgIE1XTDhLX0EySF9JTlRfUlhfUkVBRFkJCQkoMSA8PCAxKQorI2RlZmluZSAgTVdMOEtfQTJIX0lOVF9UWF9ET05FCQkJKDEgPDwgMCkKKworI2RlZmluZSBNV0w4S19BMkhfRVZFTlRTCShNV0w4S19BMkhfSU5UX0RVTU1ZIHwgXAorCQkJCSBNV0w4S19BMkhfSU5UX0NITkxfU1dJVENIRUQgfCBcCisJCQkJIE1XTDhLX0EySF9JTlRfUVVFVUVfRU1QVFkgfCBcCisJCQkJIE1XTDhLX0EySF9JTlRfUkFEQVJfREVURUNUIHwgXAorCQkJCSBNV0w4S19BMkhfSU5UX1JBRElPX09OIHwgXAorCQkJCSBNV0w4S19BMkhfSU5UX1JBRElPX09GRiB8IFwKKwkJCQkgTVdMOEtfQTJIX0lOVF9NQUNfRVZFTlQgfCBcCisJCQkJIE1XTDhLX0EySF9JTlRfT1BDX0RPTkUgfCBcCisJCQkJIE1XTDhLX0EySF9JTlRfUlhfUkVBRFkgfCBcCisJCQkJIE1XTDhLX0EySF9JTlRfVFhfRE9ORSkKKworLyogV01FIHN0cmVhbSBjbGFzc2VzICovCisjZGVmaW5lIFdNRV9BQ19CRQkwCQkvKiBiZXN0IGVmZm9ydCAqLworI2RlZmluZSBXTUVfQUNfQksJMQkJLyogYmFja2dyb3VuZCAqLworI2RlZmluZSBXTUVfQUNfVkkJMgkJLyogdmlkZW8gKi8KKyNkZWZpbmUgV01FX0FDX1ZPCTMJCS8qIHZvaWNlICovCisKKyNkZWZpbmUgTVdMOEtfUlhfUVVFVUVTCQkxCisjZGVmaW5lIE1XTDhLX1RYX1FVRVVFUwkJNAorCitzdHJ1Y3QgbXdsOGtfcnhfcXVldWUgeworCWludCByeF9kZXNjX2NvdW50OworCisJLyogaHcgcmVjZWl2ZXMgaGVyZSAqLworCWludCByeF9oZWFkOworCisJLyogcmVmaWxsIGRlc2NzIGhlcmUgKi8KKwlpbnQgcnhfdGFpbDsKKworCXN0cnVjdCBtd2w4a19yeF9kZXNjICpyeF9kZXNjX2FyZWE7CisJZG1hX2FkZHJfdCByeF9kZXNjX2RtYTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqKnJ4X3NrYjsKK307CisKK3N0cnVjdCBtd2w4a19za2IgeworCS8qCisJICogVGhlIERNQSBlbmdpbmUgcmVxdWlyZXMgYSBtb2RpZmljYXRpb24gdG8gdGhlIHBheWxvYWQuCisJICogSWYgdGhlIHNrYnVmZiBpcyBzaGFyZWQvY2xvbmVkLCBpdCBuZWVkcyB0byBiZSB1bnNoYXJlZC4KKwkgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGVuc3VyZSB0aGUgc3RhY2sgYWx3YXlzIGdldHMgYmFjaworCSAqIHRoZSBza2J1ZmYgaXQgc2VudCBmb3IgdHJhbnNtaXNzaW9uLgorCSAqLworCXN0cnVjdCBza19idWZmICpjbG9uZTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworfTsKKworc3RydWN0IG13bDhrX3R4X3F1ZXVlIHsKKwkvKiBodyB0cmFuc21pdHMgaGVyZSAqLworCWludCB0eF9oZWFkOworCisJLyogc3cgYXBwZW5kcyBoZXJlICovCisJaW50IHR4X3RhaWw7CisKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3N0YXRzIHR4X3N0YXRzOworCXN0cnVjdCBtd2w4a190eF9kZXNjICp0eF9kZXNjX2FyZWE7CisJZG1hX2FkZHJfdCB0eF9kZXNjX2RtYTsKKwlzdHJ1Y3QgbXdsOGtfc2tiICp0eF9za2I7Cit9OworCisvKiBQb2ludGVycyB0byB0aGUgZmlybXdhcmUgZGF0YSBhbmQgbWV0YSBpbmZvcm1hdGlvbiBhYm91dCBpdC4gICovCitzdHJ1Y3QgbXdsOGtfZmlybXdhcmUgeworCS8qIE1pY3JvY29kZSAqLworCXN0cnVjdCBmaXJtd2FyZSAqdWNvZGU7CisKKwkvKiBCb290IGhlbHBlciBjb2RlICovCisJc3RydWN0IGZpcm13YXJlICpoZWxwZXI7Cit9OworCitzdHJ1Y3QgbXdsOGtfcHJpdiB7CisJdm9pZCBfX2lvbWVtICpyZWdzOworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3OworCisJc3RydWN0IHBjaV9kZXYgKnBkZXY7CisJdTggbmFtZVsxNl07CisJLyogZmlybXdhcmUgYWNjZXNzIGxvY2sgKi8KKwlzcGlubG9ja190IGZ3X2xvY2s7CisKKwkvKiBmaXJtd2FyZSBmaWxlcyBhbmQgbWV0YSBkYXRhICovCisJc3RydWN0IG13bDhrX2Zpcm13YXJlIGZ3OworCXUzMiBwYXJ0X251bTsKKworCS8qIGxvY2sgaGVsZCBvdmVyIFRYIGFuZCBUWCByZWFwICovCisJc3BpbmxvY2tfdCB0eF9sb2NrOworCXUzMiBpbnRfbWFzazsKKworCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWY7CisJc3RydWN0IGxpc3RfaGVhZCB2aWZfbGlzdDsKKworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY3VycmVudF9jaGFubmVsOworCisJLyogcG93ZXIgbWFuYWdlbWVudCBzdGF0dXMgY29va2llIGZyb20gZmlybXdhcmUgKi8KKwl1MzIgKmNvb2tpZTsKKwlkbWFfYWRkcl90IGNvb2tpZV9kbWE7CisKKwl1MTYgbnVtX21jYWRkcnM7CisJdTE2IHJlZ2lvbl9jb2RlOworCXU4IGh3X3JldjsKKwlfX2xlMzIgZndfcmV2OworCXUzMiB3ZXBfZW5hYmxlZDsKKworCS8qCisJICogUnVubmluZyBjb3VudCBvZiBUWCBwYWNrZXRzIGluIGZsaWdodCwgdG8gYXZvaWQKKwkgKiBpdGVyYXRpbmcgb3ZlciB0aGUgdHJhbnNtaXQgcmluZ3MgZWFjaCB0aW1lLgorCSAqLworCWludCBwZW5kaW5nX3R4X3BrdHM7CisKKwlzdHJ1Y3QgbXdsOGtfcnhfcXVldWUgcnhxW01XTDhLX1JYX1FVRVVFU107CisJc3RydWN0IG13bDhrX3R4X3F1ZXVlIHR4cVtNV0w4S19UWF9RVUVVRVNdOworCisJLyogUEhZIHBhcmFtZXRlcnMgKi8KKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kIGJhbmQ7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIGNoYW5uZWxzWzE0XTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgcmF0ZXNbMTJdOworCisJLyogUkYgcHJlYW1ibGU6IFNob3J0LCBMb25nIG9yIEF1dG8gKi8KKwl1OAlyYWRpb19wcmVhbWJsZTsKKwl1OAlyYWRpb19zdGF0ZTsKKworCS8qIFdNTSBNT0RFIDEgZm9yIGVuYWJsZWQ7IDAgZm9yIGRpc2FibGVkICovCisJYm9vbCB3bW1fbW9kZTsKKworCS8qIFNldCBpZiBQSFkgY29uZmlnIGlzIGluIHByb2dyZXNzICovCisJYm9vbCBpbmNvbmZpZzsKKworCS8qIFhYWCBuZWVkIHRvIGNvbnZlcnQgdGhpcyB0byBoYW5kbGUgbXVsdGlwbGUgaW50ZXJmYWNlcyAqLworCWJvb2wgY2FwdHVyZV9iZWFjb247CisJdTggY2FwdHVyZV9ic3NpZFtJRUVFODAyMTFfQUREUl9MRU5dOworCXN0cnVjdCBza19idWZmICpiZWFjb25fc2tiOworCisJLyoKKwkgKiBUaGlzIEZKIHdvcmtlciBoYXMgdG8gYmUgZ2xvYmFsIGFzIGl0IGlzIHNjaGVkdWxlZCBmcm9tIHRoZQorCSAqIFJYIGhhbmRsZXIuICBBdCB0aGlzIHBvaW50IHdlIGRvbid0IGtub3cgd2hpY2ggaW50ZXJmYWNlIGl0CisJICogYmVsb25ncyB0byB1bnRpbCB0aGUgbGlzdCBvZiBic3NpZHMgd2FpdGluZyB0byBjb21wbGV0ZSBqb2luCisJICogaXMgY2hlY2tlZC4KKwkgKi8KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgZmluYWxpemVfam9pbl93b3JrZXI7CisKKwkvKiBUYXNrbGV0IHRvIHJlY2xhaW0gVFggZGVzY3JpcHRvcnMgYW5kIGJ1ZmZlcnMgYWZ0ZXIgdHggKi8KKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgdHhfcmVjbGFpbV90YXNrOworCisJLyogV29yayB0aHJlYWQgdG8gc2VyaWFsaXplIGNvbmZpZ3VyYXRpb24gcmVxdWVzdHMgKi8KKwlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqY29uZmlnX3dxOworCXN0cnVjdCBjb21wbGV0aW9uICpob3N0Y21kX3dhaXQ7CisJc3RydWN0IGNvbXBsZXRpb24gKnR4X3dhaXQ7Cit9OworCisvKiBQZXIgaW50ZXJmYWNlIHNwZWNpZmljIHByaXZhdGUgZGF0YSAqLworc3RydWN0IG13bDhrX3ZpZiB7CisJc3RydWN0IGxpc3RfaGVhZCBub2RlOworCisJLyogYmFja3BvaW50ZXIgdG8gcGFyZW50IGNvbmZpZyBibG9jayAqLworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2OworCisJLyogQlNTIGNvbmZpZyBvZiBBUCBvciBJQlNTIGZyb20gbWFjODAyMTEqLworCXN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgYnNzX2luZm87CisKKwkvKiBCU1NJRCBvZiBBUCBvciBJQlNTICovCisJdTgJYnNzaWRbSUVFRTgwMjExX0FERFJfTEVOXTsKKwl1OAltYWNfYWRkcltJRUVFODAyMTFfQUREUl9MRU5dOworCisJLyoKKwkgKiBTdWJzZXQgb2Ygc3VwcG9ydGVkIGxlZ2FjeSByYXRlcy4KKwkgKiBJbnRlcnNlY3Rpb24gb2YgQVAgYW5kIFNUQSBzdXBwb3J0ZWQgcmF0ZXMuCisJICovCisJc3RydWN0IGllZWU4MDIxMV9yYXRlIGxlZ2FjeV9yYXRlc1sxMl07CisKKwkvKiBudW1iZXIgb2Ygc3VwcG9ydGVkIGxlZ2FjeSByYXRlcyAqLworCXU4CWxlZ2FjeV9ucmF0ZXM7CisKKwkvKiBOdW1iZXIgb2Ygc3VwcG9ydGVkIE1DUyByYXRlcy4gV29yayBpbiBwcm9ncmVzcyAqLworCXU4CW1jc19ucmF0ZXM7CisKKwkgLyogSW5kZXggaW50byBzdGF0aW9uIGRhdGFiYXNlLlJldHVybmVkIGJ5IHVwZGF0ZV9zdGFfZGIgY2FsbCAqLworCXU4CXBlZXJfaWQ7CisKKwkvKiBOb24gQU1QRFUgc2VxdWVuY2UgbnVtYmVyIGFzc2lnbmVkIGJ5IGRyaXZlciAqLworCXUxNglzZXFubzsKKworCS8qIE5vdGU6VGhlcmUgaXMgbm8gY2hhbm5lbCBpbmZvLAorCSAqIHJlZmVyIHRvIHRoZSBtYXN0ZXIgY2hhbm5lbCBpbmZvIGluIHByaXYKKwkgKi8KK307CisKKyNkZWZpbmUgTVdMOEtfVklGKF92aWYpIChzdHJ1Y3QgbXdsOGtfdmlmICopKCYoKF92aWYpLT5kcnZfcHJpdikpCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgbXdsOGtfY2hhbm5lbHNbXSA9IHsKKwl7IC5jZW50ZXJfZnJlcSA9IDI0MTIsIC5od192YWx1ZSA9IDEsIH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDE3LCAuaHdfdmFsdWUgPSAyLCB9LAorCXsgLmNlbnRlcl9mcmVxID0gMjQyMiwgLmh3X3ZhbHVlID0gMywgfSwKKwl7IC5jZW50ZXJfZnJlcSA9IDI0MjcsIC5od192YWx1ZSA9IDQsIH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDMyLCAuaHdfdmFsdWUgPSA1LCB9LAorCXsgLmNlbnRlcl9mcmVxID0gMjQzNywgLmh3X3ZhbHVlID0gNiwgfSwKKwl7IC5jZW50ZXJfZnJlcSA9IDI0NDIsIC5od192YWx1ZSA9IDcsIH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDQ3LCAuaHdfdmFsdWUgPSA4LCB9LAorCXsgLmNlbnRlcl9mcmVxID0gMjQ1MiwgLmh3X3ZhbHVlID0gOSwgfSwKKwl7IC5jZW50ZXJfZnJlcSA9IDI0NTcsIC5od192YWx1ZSA9IDEwLCB9LAorCXsgLmNlbnRlcl9mcmVxID0gMjQ2MiwgLmh3X3ZhbHVlID0gMTEsIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yYXRlIG13bDhrX3JhdGVzW10gPSB7CisJeyAuYml0cmF0ZSA9IDEwLCAuaHdfdmFsdWUgPSAyLCB9LAorCXsgLmJpdHJhdGUgPSAyMCwgLmh3X3ZhbHVlID0gNCwgfSwKKwl7IC5iaXRyYXRlID0gNTUsIC5od192YWx1ZSA9IDExLCB9LAorCXsgLmJpdHJhdGUgPSA2MCwgLmh3X3ZhbHVlID0gMTIsIH0sCisJeyAuYml0cmF0ZSA9IDkwLCAuaHdfdmFsdWUgPSAxOCwgfSwKKwl7IC5iaXRyYXRlID0gMTEwLCAuaHdfdmFsdWUgPSAyMiwgfSwKKwl7IC5iaXRyYXRlID0gMTIwLCAuaHdfdmFsdWUgPSAyNCwgfSwKKwl7IC5iaXRyYXRlID0gMTgwLCAuaHdfdmFsdWUgPSAzNiwgfSwKKwl7IC5iaXRyYXRlID0gMjQwLCAuaHdfdmFsdWUgPSA0OCwgfSwKKwl7IC5iaXRyYXRlID0gMzYwLCAuaHdfdmFsdWUgPSA3MiwgfSwKKwl7IC5iaXRyYXRlID0gNDgwLCAuaHdfdmFsdWUgPSA5NiwgfSwKKwl7IC5iaXRyYXRlID0gNTQwLCAuaHdfdmFsdWUgPSAxMDgsIH0sCit9OworCisvKiBSYWRpbyBzZXR0aW5ncyAqLworI2RlZmluZSBNV0w4S19SQURJT19GT1JDRQkJMHgyCisjZGVmaW5lIE1XTDhLX1JBRElPX0VOQUJMRQkJMHgxCisjZGVmaW5lIE1XTDhLX1JBRElPX0RJU0FCTEUJCTB4MAorI2RlZmluZSBNV0w4S19SQURJT19BVVRPX1BSRUFNQkxFCTB4MDAwNQorI2RlZmluZSBNV0w4S19SQURJT19TSE9SVF9QUkVBTUJMRQkweDAwMDMKKyNkZWZpbmUgTVdMOEtfUkFESU9fTE9OR19QUkVBTUJMRQkweDAwMDEKKworLyogV01NICovCisjZGVmaW5lIE1XTDhLX1dNTV9FTkFCTEUJCTEKKyNkZWZpbmUgTVdMOEtfV01NX0RJU0FCTEUJCTAKKworI2RlZmluZSBNV0w4S19SQURJT19ERUZBVUxUX1BSRUFNQkxFCU1XTDhLX1JBRElPX0xPTkdfUFJFQU1CTEUKKworLyogU2xvdCB0aW1lICovCisKKy8qIFNob3J0IFNsb3Q6IDl1cyBzbG90IHRpbWUgKi8KKyNkZWZpbmUgTVdMOEtfU0hPUlRfU0xPVFRJTUUJCTEKKworLyogTG9uZyBzbG90OiAyMHVzIHNsb3QgdGltZSAqLworI2RlZmluZSBNV0w4S19MT05HX1NMT1RUSU1FCQkwCisKKy8qIFNldCBvciBnZXQgaW5mbyBmcm9tIEZpcm13YXJlICovCisjZGVmaW5lIE1XTDhLX0NNRF9TRVQJCQkweDAwMDEKKyNkZWZpbmUgTVdMOEtfQ01EX0dFVAkJCTB4MDAwMAorCisvKiBGaXJtd2FyZSBjb21tYW5kIGNvZGVzICovCisjZGVmaW5lIE1XTDhLX0NNRF9DT0RFX0ROTEQJCTB4MDAwMQorI2RlZmluZSBNV0w4S19DTURfR0VUX0hXX1NQRUMJCTB4MDAwMworI2RlZmluZSBNV0w4S19DTURfTUFDX01VTFRJQ0FTVF9BRFIJMHgwMDEwCisjZGVmaW5lIE1XTDhLX0NNRF9HRVRfU1RBVAkJMHgwMDE0CisjZGVmaW5lIE1XTDhLX0NNRF9SQURJT19DT05UUk9MCQkweDAwMUMKKyNkZWZpbmUgTVdMOEtfQ01EX1JGX1RYX1BPV0VSCQkweDAwMUUKKyNkZWZpbmUgTVdMOEtfQ01EX1NFVF9QUkVfU0NBTgkJMHgwMTA3CisjZGVmaW5lIE1XTDhLX0NNRF9TRVRfUE9TVF9TQ0FOCQkweDAxMDgKKyNkZWZpbmUgTVdMOEtfQ01EX1NFVF9SRl9DSEFOTkVMCTB4MDEwQQorI2RlZmluZSBNV0w4S19DTURfU0VUX1NMT1QJCTB4MDExNAorI2RlZmluZSBNV0w4S19DTURfTUlNT19DT05GSUcJCTB4MDEyNQorI2RlZmluZSBNV0w4S19DTURfRU5BQkxFX1NOSUZGRVIJMHgwMTUwCisjZGVmaW5lIE1XTDhLX0NNRF9TRVRfV01NX01PREUJCTB4MDEyMworI2RlZmluZSBNV0w4S19DTURfU0VUX0VEQ0FfUEFSQU1TCTB4MDExNQorI2RlZmluZSBNV0w4S19DTURfU0VUX0ZJTkFMSVpFX0pPSU4JMHgwMTExCisjZGVmaW5lIE1XTDhLX0NNRF9VUERBVEVfU1RBREIJCTB4MTEyMworI2RlZmluZSBNV0w4S19DTURfU0VUX1JBVEVBREFQVF9NT0RFCTB4MDIwMworI2RlZmluZSBNV0w4S19DTURfU0VUX0xJTktBREFQVF9NT0RFCTB4MDEyOQorI2RlZmluZSBNV0w4S19DTURfU0VUX0FJRAkJMHgwMTBkCisjZGVmaW5lIE1XTDhLX0NNRF9TRVRfUkFURQkJMHgwMTEwCisjZGVmaW5lIE1XTDhLX0NNRF9VU0VfRklYRURfUkFURQkweDAxMjYKKyNkZWZpbmUgTVdMOEtfQ01EX1JUU19USFJFU0hPTEQJCTB4MDExMworI2RlZmluZSBNV0w4S19DTURfRU5DUllQVElPTgkJMHgxMTIyCisKK3N0YXRpYyBjb25zdCBjaGFyICptd2w4a19jbWRfbmFtZSh1MTYgY21kLCBjaGFyICpidWYsIGludCBidWZzaXplKQoreworI2RlZmluZSBNV0w4S19DTUROQU1FKHgpCWNhc2UgTVdMOEtfQ01EXyMjeDogZG8ge1wKKwkJCQkJc25wcmludGYoYnVmLCBidWZzaXplLCAiJXMiLCAjeCk7XAorCQkJCQlyZXR1cm4gYnVmO1wKKwkJCQkJfSB3aGlsZSAoMCkKKwlzd2l0Y2ggKGNtZCAmICh+MHg4MDAwKSkgeworCQlNV0w4S19DTUROQU1FKENPREVfRE5MRCk7CisJCU1XTDhLX0NNRE5BTUUoR0VUX0hXX1NQRUMpOworCQlNV0w4S19DTUROQU1FKE1BQ19NVUxUSUNBU1RfQURSKTsKKwkJTVdMOEtfQ01ETkFNRShHRVRfU1RBVCk7CisJCU1XTDhLX0NNRE5BTUUoUkFESU9fQ09OVFJPTCk7CisJCU1XTDhLX0NNRE5BTUUoUkZfVFhfUE9XRVIpOworCQlNV0w4S19DTUROQU1FKFNFVF9QUkVfU0NBTik7CisJCU1XTDhLX0NNRE5BTUUoU0VUX1BPU1RfU0NBTik7CisJCU1XTDhLX0NNRE5BTUUoU0VUX1JGX0NIQU5ORUwpOworCQlNV0w4S19DTUROQU1FKFNFVF9TTE9UKTsKKwkJTVdMOEtfQ01ETkFNRShNSU1PX0NPTkZJRyk7CisJCU1XTDhLX0NNRE5BTUUoRU5BQkxFX1NOSUZGRVIpOworCQlNV0w4S19DTUROQU1FKFNFVF9XTU1fTU9ERSk7CisJCU1XTDhLX0NNRE5BTUUoU0VUX0VEQ0FfUEFSQU1TKTsKKwkJTVdMOEtfQ01ETkFNRShTRVRfRklOQUxJWkVfSk9JTik7CisJCU1XTDhLX0NNRE5BTUUoVVBEQVRFX1NUQURCKTsKKwkJTVdMOEtfQ01ETkFNRShTRVRfUkFURUFEQVBUX01PREUpOworCQlNV0w4S19DTUROQU1FKFNFVF9MSU5LQURBUFRfTU9ERSk7CisJCU1XTDhLX0NNRE5BTUUoU0VUX0FJRCk7CisJCU1XTDhLX0NNRE5BTUUoU0VUX1JBVEUpOworCQlNV0w4S19DTUROQU1FKFVTRV9GSVhFRF9SQVRFKTsKKwkJTVdMOEtfQ01ETkFNRShSVFNfVEhSRVNIT0xEKTsKKwkJTVdMOEtfQ01ETkFNRShFTkNSWVBUSU9OKTsKKwlkZWZhdWx0OgorCQlzbnByaW50ZihidWYsIGJ1ZnNpemUsICIweCV4IiwgY21kKTsKKwl9CisjdW5kZWYgTVdMOEtfQ01ETkFNRQorCisJcmV0dXJuIGJ1ZjsKK30KKworLyogSGFyZHdhcmUgYW5kIGZpcm13YXJlIHJlc2V0ICovCitzdGF0aWMgdm9pZCBtd2w4a19od19yZXNldChzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdikKK3sKKwlpb3dyaXRlMzIoTVdMOEtfSDJBX0lOVF9SRVNFVCwKKwkJcHJpdi0+cmVncyArIE1XTDhLX0hJVV9IMkFfSU5URVJSVVBUX0VWRU5UUyk7CisJaW93cml0ZTMyKE1XTDhLX0gyQV9JTlRfUkVTRVQsCisJCXByaXYtPnJlZ3MgKyBNV0w4S19ISVVfSDJBX0lOVEVSUlVQVF9FVkVOVFMpOworCW1zbGVlcCgyMCk7Cit9CisKKy8qIFJlbGVhc2UgZncgaW1hZ2UgKi8KK3N0YXRpYyB2b2lkIG13bDhrX3JlbGVhc2VfZncoc3RydWN0IGZpcm13YXJlICoqZncpCit7CisJaWYgKCpmdyA9PSBOVUxMKQorCQlyZXR1cm47CisJcmVsZWFzZV9maXJtd2FyZSgqZncpOworCSpmdyA9IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIG13bDhrX3JlbGVhc2VfZmlybXdhcmUoc3RydWN0IG13bDhrX3ByaXYgKnByaXYpCit7CisJbXdsOGtfcmVsZWFzZV9mdygmcHJpdi0+ZncudWNvZGUpOworCW13bDhrX3JlbGVhc2VfZncoJnByaXYtPmZ3LmhlbHBlcik7Cit9CisKKy8qIFJlcXVlc3QgZncgaW1hZ2UgKi8KK3N0YXRpYyBpbnQgbXdsOGtfcmVxdWVzdF9mdyhzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiwKKwkJCQljb25zdCBjaGFyICpmbmFtZSwgc3RydWN0IGZpcm13YXJlICoqZncpCit7CisJLyogcmVsZWFzZSBjdXJyZW50IGltYWdlICovCisJaWYgKCpmdyAhPSBOVUxMKQorCQltd2w4a19yZWxlYXNlX2Z3KGZ3KTsKKworCXJldHVybiByZXF1ZXN0X2Zpcm13YXJlKChjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKiopZncsCisJCQkJCQlmbmFtZSwgJnByaXYtPnBkZXYtPmRldik7Cit9CisKK3N0YXRpYyBpbnQgbXdsOGtfcmVxdWVzdF9maXJtd2FyZShzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiwgdTMyIHBhcnRfbnVtKQoreworCXU4IGZpbGVuYW1lWzY0XTsKKwlpbnQgcmM7CisKKwlwcml2LT5wYXJ0X251bSA9IHBhcnRfbnVtOworCisJc25wcmludGYoZmlsZW5hbWUsIHNpemVvZihmaWxlbmFtZSksCisJCSAibXdsOGsvaGVscGVyXyV1LmZ3IiwgcHJpdi0+cGFydF9udW0pOworCisJcmMgPSBtd2w4a19yZXF1ZXN0X2Z3KHByaXYsIGZpbGVuYW1lLCAmcHJpdi0+ZncuaGVscGVyKTsKKwlpZiAocmMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkiJXMgRXJyb3IgcmVxdWVzdGluZyBoZWxwZXIgZmlybXdhcmUgZmlsZSAlc1xuIiwKKwkJCXBjaV9uYW1lKHByaXYtPnBkZXYpLCBmaWxlbmFtZSk7CisJCXJldHVybiByYzsKKwl9CisKKwlzbnByaW50ZihmaWxlbmFtZSwgc2l6ZW9mKGZpbGVuYW1lKSwKKwkJICJtd2w4ay9mbWltYWdlXyV1LmZ3IiwgcHJpdi0+cGFydF9udW0pOworCisJcmMgPSBtd2w4a19yZXF1ZXN0X2Z3KHByaXYsIGZpbGVuYW1lLCAmcHJpdi0+ZncudWNvZGUpOworCWlmIChyYykgeworCQlwcmludGsoS0VSTl9FUlIgIiVzIEVycm9yIHJlcXVlc3RpbmcgZmlybXdhcmUgZmlsZSAlc1xuIiwKKwkJCQkJcGNpX25hbWUocHJpdi0+cGRldiksIGZpbGVuYW1lKTsKKwkJbXdsOGtfcmVsZWFzZV9mdygmcHJpdi0+ZncuaGVscGVyKTsKKwkJcmV0dXJuIHJjOworCX0KKworCXJldHVybiAwOworfQorCitzdHJ1Y3QgbXdsOGtfY21kX3BrdCB7CisJX19sZTE2CWNvZGU7CisJX19sZTE2CWxlbmd0aDsKKwlfX2xlMTYJc2VxX251bTsKKwlfX2xlMTYJcmVzdWx0OworCWNoYXIJcGF5bG9hZFswXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qCisgKiBGaXJtd2FyZSBsb2FkaW5nLgorICovCitzdGF0aWMgaW50Cittd2w4a19zZW5kX2Z3X2xvYWRfY21kKHN0cnVjdCBtd2w4a19wcml2ICpwcml2LCB2b2lkICpkYXRhLCBpbnQgbGVuZ3RoKQoreworCXZvaWQgX19pb21lbSAqcmVncyA9IHByaXYtPnJlZ3M7CisJZG1hX2FkZHJfdCBkbWFfYWRkcjsKKwlpbnQgcmM7CisJaW50IGxvb3BzOworCisJZG1hX2FkZHIgPSBwY2lfbWFwX3NpbmdsZShwcml2LT5wZGV2LCBkYXRhLCBsZW5ndGgsIFBDSV9ETUFfVE9ERVZJQ0UpOworCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3IocHJpdi0+cGRldiwgZG1hX2FkZHIpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlvd3JpdGUzMihkbWFfYWRkciwgcmVncyArIE1XTDhLX0hJVV9HRU5fUFRSKTsKKwlpb3dyaXRlMzIoMCwgcmVncyArIE1XTDhLX0hJVV9JTlRfQ09ERSk7CisJaW93cml0ZTMyKE1XTDhLX0gyQV9JTlRfRE9PUkJFTEwsCisJCXJlZ3MgKyBNV0w4S19ISVVfSDJBX0lOVEVSUlVQVF9FVkVOVFMpOworCWlvd3JpdGUzMihNV0w4S19IMkFfSU5UX0RVTU1ZLAorCQlyZWdzICsgTVdMOEtfSElVX0gyQV9JTlRFUlJVUFRfRVZFTlRTKTsKKworCXJjID0gLUVUSU1FRE9VVDsKKwlsb29wcyA9IDEwMDA7CisJZG8geworCQl1MzIgaW50X2NvZGU7CisKKwkJaW50X2NvZGUgPSBpb3JlYWQzMihyZWdzICsgTVdMOEtfSElVX0lOVF9DT0RFKTsKKwkJaWYgKGludF9jb2RlID09IE1XTDhLX0lOVF9DT0RFX0NNRF9GSU5JU0hFRCkgeworCQkJaW93cml0ZTMyKDAsIHJlZ3MgKyBNV0w4S19ISVVfSU5UX0NPREUpOworCQkJcmMgPSAwOworCQkJYnJlYWs7CisJCX0KKworCQl1ZGVsYXkoMSk7CisJfSB3aGlsZSAoLS1sb29wcyk7CisKKwlwY2lfdW5tYXBfc2luZ2xlKHByaXYtPnBkZXYsIGRtYV9hZGRyLCBsZW5ndGgsIFBDSV9ETUFfVE9ERVZJQ0UpOworCisJLyoKKwkgKiBDbGVhciAnY29tbWFuZCBkb25lJyBpbnRlcnJ1cHQgYml0LgorCSAqLworCWxvb3BzID0gMTAwMDsKKwlkbyB7CisJCXUzMiBzdGF0dXM7CisKKwkJc3RhdHVzID0gaW9yZWFkMzIocHJpdi0+cmVncyArCisJCQkJTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfU1RBVFVTKTsKKwkJaWYgKHN0YXR1cyAmIE1XTDhLX0EySF9JTlRfT1BDX0RPTkUpIHsKKwkJCWlvd3JpdGUzMih+TVdMOEtfQTJIX0lOVF9PUENfRE9ORSwKKwkJCQlwcml2LT5yZWdzICsgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfU1RBVFVTKTsKKwkJCWlvcmVhZDMyKHByaXYtPnJlZ3MgKyBNV0w4S19ISVVfQTJIX0lOVEVSUlVQVF9TVEFUVVMpOworCQkJYnJlYWs7CisJCX0KKworCQl1ZGVsYXkoMSk7CisJfSB3aGlsZSAoLS1sb29wcyk7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgbXdsOGtfbG9hZF9md19pbWFnZShzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiwKKwkJCQljb25zdCB1OCAqZGF0YSwgc2l6ZV90IGxlbmd0aCkKK3sKKwlzdHJ1Y3QgbXdsOGtfY21kX3BrdCAqY21kOworCWludCBkb25lOworCWludCByYyA9IDA7CisKKwljbWQgPSBrbWFsbG9jKHNpemVvZigqY21kKSArIDI1NiwgR0ZQX0tFUk5FTCk7CisJaWYgKGNtZCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNtZC0+Y29kZSA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9DT0RFX0ROTEQpOworCWNtZC0+c2VxX251bSA9IDA7CisJY21kLT5yZXN1bHQgPSAwOworCisJZG9uZSA9IDA7CisJd2hpbGUgKGxlbmd0aCkgeworCQlpbnQgYmxvY2tfc2l6ZSA9IGxlbmd0aCA+IDI1NiA/IDI1NiA6IGxlbmd0aDsKKworCQltZW1jcHkoY21kLT5wYXlsb2FkLCBkYXRhICsgZG9uZSwgYmxvY2tfc2l6ZSk7CisJCWNtZC0+bGVuZ3RoID0gY3B1X3RvX2xlMTYoYmxvY2tfc2l6ZSk7CisKKwkJcmMgPSBtd2w4a19zZW5kX2Z3X2xvYWRfY21kKHByaXYsIGNtZCwKKwkJCQkJCXNpemVvZigqY21kKSArIGJsb2NrX3NpemUpOworCQlpZiAocmMpCisJCQlicmVhazsKKworCQlkb25lICs9IGJsb2NrX3NpemU7CisJCWxlbmd0aCAtPSBibG9ja19zaXplOworCX0KKworCWlmICghcmMpIHsKKwkJY21kLT5sZW5ndGggPSAwOworCQlyYyA9IG13bDhrX3NlbmRfZndfbG9hZF9jbWQocHJpdiwgY21kLCBzaXplb2YoKmNtZCkpOworCX0KKworCWtmcmVlKGNtZCk7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgbXdsOGtfZmVlZF9md19pbWFnZShzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiwKKwkJCQljb25zdCB1OCAqZGF0YSwgc2l6ZV90IGxlbmd0aCkKK3sKKwl1bnNpZ25lZCBjaGFyICpidWZmZXI7CisJaW50IG1heV9jb250aW51ZSwgcmMgPSAwOworCXUzMiBkb25lLCBwcmV2X2Jsb2NrX3NpemU7CisKKwlidWZmZXIgPSBrbWFsbG9jKDEwMjQsIEdGUF9LRVJORUwpOworCWlmIChidWZmZXIgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkb25lID0gMDsKKwlwcmV2X2Jsb2NrX3NpemUgPSAwOworCW1heV9jb250aW51ZSA9IDEwMDA7CisJd2hpbGUgKG1heV9jb250aW51ZSA+IDApIHsKKwkJdTMyIGJsb2NrX3NpemU7CisKKwkJYmxvY2tfc2l6ZSA9IGlvcmVhZDMyKHByaXYtPnJlZ3MgKyBNV0w4S19ISVVfU0NSQVRDSCk7CisJCWlmIChibG9ja19zaXplICYgMSkgeworCQkJYmxvY2tfc2l6ZSAmPSB+MTsKKwkJCW1heV9jb250aW51ZS0tOworCQl9IGVsc2UgeworCQkJZG9uZSArPSBwcmV2X2Jsb2NrX3NpemU7CisJCQlsZW5ndGggLT0gcHJldl9ibG9ja19zaXplOworCQl9CisKKwkJaWYgKGJsb2NrX3NpemUgPiAxMDI0IHx8IGJsb2NrX3NpemUgPiBsZW5ndGgpIHsKKwkJCXJjID0gLUVPVkVSRkxPVzsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKGxlbmd0aCA9PSAwKSB7CisJCQlyYyA9IDA7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChibG9ja19zaXplID09IDApIHsKKwkJCXJjID0gLUVQUk9UTzsKKwkJCW1heV9jb250aW51ZS0tOworCQkJdWRlbGF5KDEpOworCQkJY29udGludWU7CisJCX0KKworCQlwcmV2X2Jsb2NrX3NpemUgPSBibG9ja19zaXplOworCQltZW1jcHkoYnVmZmVyLCBkYXRhICsgZG9uZSwgYmxvY2tfc2l6ZSk7CisKKwkJcmMgPSBtd2w4a19zZW5kX2Z3X2xvYWRfY21kKHByaXYsIGJ1ZmZlciwgYmxvY2tfc2l6ZSk7CisJCWlmIChyYykKKwkJCWJyZWFrOworCX0KKworCWlmICghcmMgJiYgbGVuZ3RoICE9IDApCisJCXJjID0gLUVSRU1PVEVJTzsKKworCWtmcmVlKGJ1ZmZlcik7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgbXdsOGtfbG9hZF9maXJtd2FyZShzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdikKK3sKKwlpbnQgbG9vcHMsIHJjOworCisJY29uc3QgdTggKnVjb2RlID0gcHJpdi0+ZncudWNvZGUtPmRhdGE7CisJc2l6ZV90IHVjb2RlX2xlbiA9IHByaXYtPmZ3LnVjb2RlLT5zaXplOworCWNvbnN0IHU4ICpoZWxwZXIgPSBwcml2LT5mdy5oZWxwZXItPmRhdGE7CisJc2l6ZV90IGhlbHBlcl9sZW4gPSBwcml2LT5mdy5oZWxwZXItPnNpemU7CisKKwlpZiAoIW1lbWNtcCh1Y29kZSwgIlx4MDFceDAwXHgwMFx4MDAiLCA0KSkgeworCQlyYyA9IG13bDhrX2xvYWRfZndfaW1hZ2UocHJpdiwgaGVscGVyLCBoZWxwZXJfbGVuKTsKKwkJaWYgKHJjKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmFibGUgdG8gbG9hZCBmaXJtd2FyZSAiCisJCQkJImhlbHBlciBpbWFnZVxuIiwgcGNpX25hbWUocHJpdi0+cGRldikpOworCQkJcmV0dXJuIHJjOworCQl9CisJCW1zbGVlcCgxKTsKKworCQlyYyA9IG13bDhrX2ZlZWRfZndfaW1hZ2UocHJpdiwgdWNvZGUsIHVjb2RlX2xlbik7CisJfSBlbHNlIHsKKwkJcmMgPSBtd2w4a19sb2FkX2Z3X2ltYWdlKHByaXYsIHVjb2RlLCB1Y29kZV9sZW4pOworCX0KKworCWlmIChyYykgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmFibGUgdG8gbG9hZCBmaXJtd2FyZSBkYXRhXG4iLAorCQkJcGNpX25hbWUocHJpdi0+cGRldikpOworCQlyZXR1cm4gcmM7CisJfQorCisJaW93cml0ZTMyKE1XTDhLX01PREVfU1RBLCBwcml2LT5yZWdzICsgTVdMOEtfSElVX0dFTl9QVFIpOworCW1zbGVlcCgxKTsKKworCWxvb3BzID0gMjAwMDAwOworCWRvIHsKKwkJaWYgKGlvcmVhZDMyKHByaXYtPnJlZ3MgKyBNV0w4S19ISVVfSU5UX0NPREUpCisJCQkJCQk9PSBNV0w4S19GV1NUQV9SRUFEWSkKKwkJCWJyZWFrOworCQl1ZGVsYXkoMSk7CisJfSB3aGlsZSAoLS1sb29wcyk7CisKKwlyZXR1cm4gbG9vcHMgPyAwIDogLUVUSU1FRE9VVDsKK30KKworCisvKgorICogRGVmaW5lcyBzaGFyZWQgYmV0d2VlbiB0cmFuc21pc3Npb24gYW5kIHJlY2VwdGlvbi4KKyAqLworLyogSFQgY29udHJvbCBmaWVsZHMgZm9yIGZpcm13YXJlICovCitzdHJ1Y3QgZXdjX2h0X2luZm8geworCV9fbGUxNgljb250cm9sMTsKKwlfX2xlMTYJY29udHJvbDI7CisJX19sZTE2CWNvbnRyb2wzOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyogRmlybXdhcmUgU3RhdGlvbiBkYXRhYmFzZSBvcGVyYXRpb25zICovCisjZGVmaW5lIE1XTDhLX1NUQV9EQl9BRERfRU5UUlkJCTAKKyNkZWZpbmUgTVdMOEtfU1RBX0RCX01PRElGWV9FTlRSWQkxCisjZGVmaW5lIE1XTDhLX1NUQV9EQl9ERUxfRU5UUlkJCTIKKyNkZWZpbmUgTVdMOEtfU1RBX0RCX0ZMVVNICQkzCisKKy8qIFBlZXIgRW50cnkgZmxhZ3MgLSB1c2VkIHRvIGRlZmluZSB0aGUgdHlwZSBvZiB0aGUgcGVlciBub2RlICovCisjZGVmaW5lIE1XTDhLX1BFRVJfVFlQRV9BQ0NFU1NQT0lOVAkyCisjZGVmaW5lIE1XTDhLX1BFRVJfVFlQRV9BREhPQ19TVEFUSU9OCTQKKworI2RlZmluZSBNV0w4S19JRUVFX0xFR0FDWV9EQVRBX1JBVEVTCTEyCisjZGVmaW5lIE1XTDhLX01DU19CSVRNQVBfU0laRQkJMTYKKyNkZWZpbmUgcGFkX3NpemUJCQkxNgorCitzdHJ1Y3QgcGVlcl9jYXBhYmlsaXR5X2luZm8geworCS8qIFBlZXIgdHlwZSAtIEFQIHZzLiBTVEEuICAqLworCV9fdTgJcGVlcl90eXBlOworCisJLyogQmFzaWMgODAyLjExIGNhcGFiaWxpdGllcyBmcm9tIGFzc29jIHJlc3AuICAqLworCV9fbGUxNgliYXNpY19jYXBzOworCisJLyogU2V0IGlmIHBlZXIgc3VwcG9ydHMgODAyLjExbiBoaWdoIHRocm91Z2hwdXQgKEhUKS4gICovCisJX191OAlodF9zdXBwb3J0OworCisJLyogVmFsaWQgaWYgSFQgaXMgc3VwcG9ydGVkLiAgKi8KKwlfX2xlMTYJaHRfY2FwczsKKwlfX3U4CWV4dGVuZGVkX2h0X2NhcHM7CisJc3RydWN0IGV3Y19odF9pbmZvCWV3Y19pbmZvOworCisJLyogTGVnYWN5IHJhdGUgdGFibGUuIEludGVyc2VjdGlvbiBvZiBvdXIgcmF0ZXMgYW5kIHBlZXIgcmF0ZXMuICAqLworCV9fdTgJbGVnYWN5X3JhdGVzW01XTDhLX0lFRUVfTEVHQUNZX0RBVEFfUkFURVNdOworCisJLyogSFQgcmF0ZSB0YWJsZS4gSW50ZXJzZWN0aW9uIG9mIG91ciByYXRlcyBhbmQgcGVlciByYXRlcy4gICovCisJX191OAlodF9yYXRlc1tNV0w4S19NQ1NfQklUTUFQX1NJWkVdOworCV9fdTgJcGFkW3BhZF9zaXplXTsKKworCS8qIElmIHNldCwgaW50ZXJvcGVyYWJpbGl0eSBtb2RlLCBubyBwcm9wcmlldGFyeSBleHRlbnNpb25zLiAgKi8KKwlfX3U4CWludGVyb3A7CisJX191OAlwYWQyOworCV9fdTgJc3RhdGlvbl9pZDsKKwlfX2xlMTYJYW1zZHVfZW5hYmxlZDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qIElubGluZSBmdW5jdGlvbnMgdG8gbWFuaXB1bGF0ZSBRb1MgZmllbGQgaW4gZGF0YSBkZXNjcmlwdG9yLiAgKi8KK3N0YXRpYyBpbmxpbmUgdTE2IG13bDhrX3Fvc19zZXRiaXRfdGlkKHUxNiBxb3MsIHU4IHRpZCkKK3sKKwl1MTYgdmFsX21hc2sgPSAweDAwMGY7CisJdTE2IHFvc19tYXNrID0gfnZhbF9tYXNrOworCisJLyogVElEIGJpdHMgMC0zICovCisJcmV0dXJuIChxb3MgJiBxb3NfbWFzaykgfCAodGlkICYgdmFsX21hc2spOworfQorCitzdGF0aWMgaW5saW5lIHUxNiBtd2w4a19xb3Nfc2V0Yml0X2Vvc3AodTE2IHFvcykKK3sKKwl1MTYgdmFsX21hc2sgPSAxIDw8IDQ7CisKKwkvKiBFbmQgb2YgU2VydmljZSBQZXJpb2QgQml0IDQgKi8KKwlyZXR1cm4gcW9zIHwgdmFsX21hc2s7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTE2IG13bDhrX3Fvc19zZXRiaXRfYWNrKHUxNiBxb3MsIHU4IGFja19wb2xpY3kpCit7CisJdTE2IHZhbF9tYXNrID0gMHgzOworCXU4CXNoaWZ0ID0gNTsKKwl1MTYgcW9zX21hc2sgPSB+KHZhbF9tYXNrIDw8IHNoaWZ0KTsKKworCS8qIEFjayBQb2xpY3kgQml0IDUtNiAqLworCXJldHVybiAocW9zICYgcW9zX21hc2spIHwgKChhY2tfcG9saWN5ICYgdmFsX21hc2spIDw8IHNoaWZ0KTsKK30KKworc3RhdGljIGlubGluZSB1MTYgbXdsOGtfcW9zX3NldGJpdF9hbXNkdSh1MTYgcW9zKQoreworCXUxNiB2YWxfbWFzayA9IDEgPDwgNzsKKworCS8qIEFNU0RVIHByZXNlbnQgQml0IDcgKi8KKwlyZXR1cm4gcW9zIHwgdmFsX21hc2s7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTE2IG13bDhrX3Fvc19zZXRiaXRfcWxlbih1MTYgcW9zLCB1OCBsZW4pCit7CisJdTE2IHZhbF9tYXNrID0gMHhmZjsKKwl1OAlzaGlmdCA9IDg7CisJdTE2IHFvc19tYXNrID0gfih2YWxfbWFzayA8PCBzaGlmdCk7CisKKwkvKiBRdWV1ZSBMZW5ndGggQml0cyA4LTE1ICovCisJcmV0dXJuIChxb3MgJiBxb3NfbWFzaykgfCAoKGxlbiAmIHZhbF9tYXNrKSA8PCBzaGlmdCk7Cit9CisKKy8qIERNQSBoZWFkZXIgdXNlZCBieSBmaXJtd2FyZSBhbmQgaGFyZHdhcmUuICAqLworc3RydWN0IG13bDhrX2RtYV9kYXRhIHsKKwlfX2xlMTYgZndsZW47CisJc3RydWN0IGllZWU4MDIxMV9oZHIgd2g7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKiBSb3V0aW5lcyB0byBhZGQvcmVtb3ZlIERNQSBoZWFkZXIgZnJvbSBza2IuICAqLworc3RhdGljIGlubGluZSBpbnQgbXdsOGtfcmVtb3ZlX2RtYV9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgbXdsOGtfZG1hX2RhdGEgKnRyID0gKHN0cnVjdCBtd2w4a19kbWFfZGF0YSAqKShza2ItPmRhdGEpOworCXZvaWQgKmRzdCwgKnNyYyA9ICZ0ci0+d2g7CisJX19sZTE2IGZjID0gdHItPndoLmZyYW1lX2NvbnRyb2w7CisJaW50IGhkcmxlbiA9IGllZWU4MDIxMV9oZHJsZW4oZmMpOworCXUxNiBzcGFjZSA9IHNpemVvZihzdHJ1Y3QgbXdsOGtfZG1hX2RhdGEpIC0gaGRybGVuOworCisJZHN0ID0gKHZvaWQgKil0ciArIHNwYWNlOworCWlmIChkc3QgIT0gc3JjKSB7CisJCW1lbW1vdmUoZHN0LCBzcmMsIGhkcmxlbik7CisJCXNrYl9wdWxsKHNrYiwgc3BhY2UpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICptd2w4a19hZGRfZG1hX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBpZWVlODAyMTFfaGRyICp3aDsKKwl1MzIgaGRybGVuLCBwa3RsZW47CisJc3RydWN0IG13bDhrX2RtYV9kYXRhICp0cjsKKworCXdoID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOworCWhkcmxlbiA9IGllZWU4MDIxMV9oZHJsZW4od2gtPmZyYW1lX2NvbnRyb2wpOworCXBrdGxlbiA9IHNrYi0+bGVuOworCisJLyoKKwkgKiBDb3B5IHVwL2Rvd24gdGhlIDgwMi4xMSBoZWFkZXI7IHRoZSBmaXJtd2FyZSByZXF1aXJlcworCSAqIHdlIHByZXNlbnQgYSAyLWJ5dGUgcGF5bG9hZCBsZW5ndGggZm9sbG93ZWQgYnkgYQorCSAqIDQtYWRkcmVzcyBoZWFkZXIgKHcvbyBRb1MpLCBmb2xsb3dlZCAob3B0aW9uYWxseSkgYnkKKwkgKiBhbnkgV0VQL0V4dElWIGhlYWRlciAoYnV0IG9ubHkgZmlsbGVkIGluIGZvciBDQ01QKS4KKwkgKi8KKwlpZiAoaGRybGVuICE9IHNpemVvZihzdHJ1Y3QgbXdsOGtfZG1hX2RhdGEpKQorCQlza2JfcHVzaChza2IsIHNpemVvZihzdHJ1Y3QgbXdsOGtfZG1hX2RhdGEpIC0gaGRybGVuKTsKKworCXRyID0gKHN0cnVjdCBtd2w4a19kbWFfZGF0YSAqKXNrYi0+ZGF0YTsKKwlpZiAod2ggIT0gJnRyLT53aCkKKwkJbWVtbW92ZSgmdHItPndoLCB3aCwgaGRybGVuKTsKKworCS8qIENsZWFyIGFkZHI0ICovCisJbWVtc2V0KHRyLT53aC5hZGRyNCwgMCwgSUVFRTgwMjExX0FERFJfTEVOKTsKKworCS8qCisJICogRmlybXdhcmUgbGVuZ3RoIGlzIHRoZSBsZW5ndGggb2YgdGhlIGZ1bGx5IGZvcm1lZCAiODAyLjExCisJICogcGF5bG9hZCIuICBUaGF0IGlzLCBldmVyeXRoaW5nIGV4Y2VwdCBmb3IgdGhlIDgwMi4xMSBoZWFkZXIuCisJICogVGhpcyBpbmNsdWRlcyBhbGwgY3J5cHRvIG1hdGVyaWFsIGluY2x1ZGluZyB0aGUgTUlDLgorCSAqLworCXRyLT5md2xlbiA9IGNwdV90b19sZTE2KHBrdGxlbiAtIGhkcmxlbik7CisKKwlyZXR1cm4gc2tiOworfQorCisKKy8qCisgKiBQYWNrZXQgcmVjZXB0aW9uLgorICovCisjZGVmaW5lIE1XTDhLX1JYX0NUUkxfS0VZX0lOREVYX01BU0sJMHgzMAorI2RlZmluZSBNV0w4S19SWF9DVFJMX09XTkVEX0JZX0hPU1QJMHgwMgorI2RlZmluZSBNV0w4S19SWF9DVFJMX0FNUERVCQkweDAxCisKK3N0cnVjdCBtd2w4a19yeF9kZXNjIHsKKwlfX2xlMTYgcGt0X2xlbjsKKwlfX3U4IGxpbmtfcXVhbGl0eTsKKwlfX3U4IG5vaXNlX2xldmVsOworCV9fbGUzMiBwa3RfcGh5c19hZGRyOworCV9fbGUzMiBuZXh0X3J4X2Rlc2NfcGh5c19hZGRyOworCV9fbGUxNiBxb3NfY29udHJvbDsKKwlfX2xlMTYgcmF0ZV9pbmZvOworCV9fbGUzMiBwYWQwWzRdOworCV9fdTggcnNzaTsKKwlfX3U4IGNoYW5uZWw7CisJX19sZTE2IHBhZDE7CisJX191OCByeF9jdHJsOworCV9fdTggcnhfc3RhdHVzOworCV9fdTggcGFkMlsyXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUgTVdMOEtfUlhfREVTQ1MJCTI1NgorI2RlZmluZSBNV0w4S19SWF9NQVhTWgkJMzgwMAorCitzdGF0aWMgaW50IG13bDhrX3J4cV9pbml0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgaW5kZXgpCit7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlzdHJ1Y3QgbXdsOGtfcnhfcXVldWUgKnJ4cSA9IHByaXYtPnJ4cSArIGluZGV4OworCWludCBzaXplOworCWludCBpOworCisJcnhxLT5yeF9kZXNjX2NvdW50ID0gMDsKKwlyeHEtPnJ4X2hlYWQgPSAwOworCXJ4cS0+cnhfdGFpbCA9IDA7CisKKwlzaXplID0gTVdMOEtfUlhfREVTQ1MgKiBzaXplb2Yoc3RydWN0IG13bDhrX3J4X2Rlc2MpOworCisJcnhxLT5yeF9kZXNjX2FyZWEgPQorCQlwY2lfYWxsb2NfY29uc2lzdGVudChwcml2LT5wZGV2LCBzaXplLCAmcnhxLT5yeF9kZXNjX2RtYSk7CisJaWYgKHJ4cS0+cnhfZGVzY19hcmVhID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIGFsbG9jIFJYIGRlc2NyaXB0b3JzXG4iLAorCQkgICAgICAgcHJpdi0+bmFtZSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwltZW1zZXQocnhxLT5yeF9kZXNjX2FyZWEsIDAsIHNpemUpOworCisJcnhxLT5yeF9za2IgPSBrbWFsbG9jKE1XTDhLX1JYX0RFU0NTICoKKwkJCQlzaXplb2YoKnJ4cS0+cnhfc2tiKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHJ4cS0+cnhfc2tiID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIGFsbG9jIFJYIHNrYnVmZiBsaXN0XG4iLAorCQkJcHJpdi0+bmFtZSk7CisJCXBjaV9mcmVlX2NvbnNpc3RlbnQocHJpdi0+cGRldiwgc2l6ZSwKKwkJCQkgICAgcnhxLT5yeF9kZXNjX2FyZWEsIHJ4cS0+cnhfZGVzY19kbWEpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJbWVtc2V0KHJ4cS0+cnhfc2tiLCAwLCBNV0w4S19SWF9ERVNDUyAqIHNpemVvZigqcnhxLT5yeF9za2IpKTsKKworCWZvciAoaSA9IDA7IGkgPCBNV0w4S19SWF9ERVNDUzsgaSsrKSB7CisJCXN0cnVjdCBtd2w4a19yeF9kZXNjICpyeF9kZXNjOworCQlpbnQgbmV4dGk7CisKKwkJcnhfZGVzYyA9IHJ4cS0+cnhfZGVzY19hcmVhICsgaTsKKwkJbmV4dGkgPSAoaSArIDEpICUgTVdMOEtfUlhfREVTQ1M7CisKKwkJcnhfZGVzYy0+bmV4dF9yeF9kZXNjX3BoeXNfYWRkciA9CisJCQljcHVfdG9fbGUzMihyeHEtPnJ4X2Rlc2NfZG1hCisJCQkJCQkrIG5leHRpICogc2l6ZW9mKCpyeF9kZXNjKSk7CisJCXJ4X2Rlc2MtPnJ4X2N0cmwgPQorCQkJY3B1X3RvX2xlMzIoTVdMOEtfUlhfQ1RSTF9PV05FRF9CWV9IT1NUKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByeHFfcmVmaWxsKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgaW5kZXgsIGludCBsaW1pdCkKK3sKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCXN0cnVjdCBtd2w4a19yeF9xdWV1ZSAqcnhxID0gcHJpdi0+cnhxICsgaW5kZXg7CisJaW50IHJlZmlsbGVkOworCisJcmVmaWxsZWQgPSAwOworCXdoaWxlIChyeHEtPnJ4X2Rlc2NfY291bnQgPCBNV0w4S19SWF9ERVNDUyAmJiBsaW1pdC0tKSB7CisJCXN0cnVjdCBza19idWZmICpza2I7CisJCWludCByeDsKKworCQlza2IgPSBkZXZfYWxsb2Nfc2tiKE1XTDhLX1JYX01BWFNaKTsKKwkJaWYgKHNrYiA9PSBOVUxMKQorCQkJYnJlYWs7CisKKwkJcnhxLT5yeF9kZXNjX2NvdW50Kys7CisKKwkJcnggPSByeHEtPnJ4X3RhaWw7CisJCXJ4cS0+cnhfdGFpbCA9IChyeCArIDEpICUgTVdMOEtfUlhfREVTQ1M7CisKKwkJcnhxLT5yeF9kZXNjX2FyZWFbcnhdLnBrdF9waHlzX2FkZHIgPQorCQkJY3B1X3RvX2xlMzIocGNpX21hcF9zaW5nbGUocHJpdi0+cGRldiwgc2tiLT5kYXRhLAorCQkJCQlNV0w4S19SWF9NQVhTWiwgRE1BX0ZST01fREVWSUNFKSk7CisKKwkJcnhxLT5yeF9kZXNjX2FyZWFbcnhdLnBrdF9sZW4gPSBjcHVfdG9fbGUxNihNV0w4S19SWF9NQVhTWik7CisJCXJ4cS0+cnhfc2tiW3J4XSA9IHNrYjsKKwkJd21iKCk7CisJCXJ4cS0+cnhfZGVzY19hcmVhW3J4XS5yeF9jdHJsID0gMDsKKworCQlyZWZpbGxlZCsrOworCX0KKworCXJldHVybiByZWZpbGxlZDsKK30KKworLyogTXVzdCBiZSBjYWxsZWQgb25seSB3aGVuIHRoZSBjYXJkJ3MgcmVjZXB0aW9uIGlzIGNvbXBsZXRlbHkgaGFsdGVkICovCitzdGF0aWMgdm9pZCBtd2w4a19yeHFfZGVpbml0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgaW5kZXgpCit7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlzdHJ1Y3QgbXdsOGtfcnhfcXVldWUgKnJ4cSA9IHByaXYtPnJ4cSArIGluZGV4OworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IE1XTDhLX1JYX0RFU0NTOyBpKyspIHsKKwkJaWYgKHJ4cS0+cnhfc2tiW2ldICE9IE5VTEwpIHsKKwkJCXVuc2lnbmVkIGxvbmcgYWRkcjsKKworCQkJYWRkciA9IGxlMzJfdG9fY3B1KHJ4cS0+cnhfZGVzY19hcmVhW2ldLnBrdF9waHlzX2FkZHIpOworCQkJcGNpX3VubWFwX3NpbmdsZShwcml2LT5wZGV2LCBhZGRyLCBNV0w4S19SWF9NQVhTWiwKKwkJCQkJIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQlrZnJlZV9za2IocnhxLT5yeF9za2JbaV0pOworCQkJcnhxLT5yeF9za2JbaV0gPSBOVUxMOworCQl9CisJfQorCisJa2ZyZWUocnhxLT5yeF9za2IpOworCXJ4cS0+cnhfc2tiID0gTlVMTDsKKworCXBjaV9mcmVlX2NvbnNpc3RlbnQocHJpdi0+cGRldiwKKwkJCSAgICBNV0w4S19SWF9ERVNDUyAqIHNpemVvZihzdHJ1Y3QgbXdsOGtfcnhfZGVzYyksCisJCQkgICAgcnhxLT5yeF9kZXNjX2FyZWEsIHJ4cS0+cnhfZGVzY19kbWEpOworCXJ4cS0+cnhfZGVzY19hcmVhID0gTlVMTDsKK30KKworCisvKgorICogU2NhbiBhIGxpc3Qgb2YgQlNTSURzIHRvIHByb2Nlc3MgZm9yIGZpbmFsaXplIGpvaW4uCisgKiBBbGxvd3MgZm9yIGV4dGVuc2lvbiB0byBwcm9jZXNzIG11bHRpcGxlIEJTU0lEcy4KKyAqLworc3RhdGljIGlubGluZSBpbnQKK213bDhrX2NhcHR1cmVfYnNzaWQoc3RydWN0IG13bDhrX3ByaXYgKnByaXYsIHN0cnVjdCBpZWVlODAyMTFfaGRyICp3aCkKK3sKKwlyZXR1cm4gcHJpdi0+Y2FwdHVyZV9iZWFjb24gJiYKKwkJaWVlZTgwMjExX2lzX2JlYWNvbih3aC0+ZnJhbWVfY29udHJvbCkgJiYKKwkJIWNvbXBhcmVfZXRoZXJfYWRkcih3aC0+YWRkcjMsIHByaXYtPmNhcHR1cmVfYnNzaWQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbXdsOGtfc2F2ZV9iZWFjb24oc3RydWN0IG13bDhrX3ByaXYgKnByaXYsCisJCQkJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlwcml2LT5jYXB0dXJlX2JlYWNvbiA9IGZhbHNlOworCW1lbXNldChwcml2LT5jYXB0dXJlX2Jzc2lkLCAwLCBJRUVFODAyMTFfQUREUl9MRU4pOworCisJLyoKKwkgKiBVc2UgR0ZQX0FUT01JQyBhcyByeHFfcHJvY2VzcyBpcyBjYWxsZWQgZnJvbQorCSAqIHRoZSBwcmltYXJ5IGludGVycnVwdCBoYW5kbGVyLCBtZW1vcnkgYWxsb2NhdGlvbiBjYWxsCisJICogbXVzdCBub3Qgc2xlZXAuCisJICovCisJcHJpdi0+YmVhY29uX3NrYiA9IHNrYl9jb3B5KHNrYiwgR0ZQX0FUT01JQyk7CisJaWYgKHByaXYtPmJlYWNvbl9za2IgIT0gTlVMTCkKKwkJcXVldWVfd29yayhwcml2LT5jb25maWdfd3EsCisJCQkJJnByaXYtPmZpbmFsaXplX2pvaW5fd29ya2VyKTsKK30KKworc3RhdGljIGludCByeHFfcHJvY2VzcyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgaW50IGluZGV4LCBpbnQgbGltaXQpCit7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlzdHJ1Y3QgbXdsOGtfcnhfcXVldWUgKnJ4cSA9IHByaXYtPnJ4cSArIGluZGV4OworCWludCBwcm9jZXNzZWQ7CisKKwlwcm9jZXNzZWQgPSAwOworCXdoaWxlIChyeHEtPnJ4X2Rlc2NfY291bnQgJiYgbGltaXQtLSkgeworCQlzdHJ1Y3QgbXdsOGtfcnhfZGVzYyAqcnhfZGVzYzsKKwkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwkJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgc3RhdHVzOworCQl1bnNpZ25lZCBsb25nIGFkZHI7CisJCXN0cnVjdCBpZWVlODAyMTFfaGRyICp3aDsKKworCQlyeF9kZXNjID0gcnhxLT5yeF9kZXNjX2FyZWEgKyByeHEtPnJ4X2hlYWQ7CisJCWlmICghKHJ4X2Rlc2MtPnJ4X2N0cmwgJiBNV0w4S19SWF9DVFJMX09XTkVEX0JZX0hPU1QpKQorCQkJYnJlYWs7CisJCXJtYigpOworCisJCXNrYiA9IHJ4cS0+cnhfc2tiW3J4cS0+cnhfaGVhZF07CisJCXJ4cS0+cnhfc2tiW3J4cS0+cnhfaGVhZF0gPSBOVUxMOworCisJCXJ4cS0+cnhfaGVhZCA9IChyeHEtPnJ4X2hlYWQgKyAxKSAlIE1XTDhLX1JYX0RFU0NTOworCQlyeHEtPnJ4X2Rlc2NfY291bnQtLTsKKworCQlhZGRyID0gbGUzMl90b19jcHUocnhfZGVzYy0+cGt0X3BoeXNfYWRkcik7CisJCXBjaV91bm1hcF9zaW5nbGUocHJpdi0+cGRldiwgYWRkciwKKwkJCQkJTVdMOEtfUlhfTUFYU1osIFBDSV9ETUFfRlJPTURFVklDRSk7CisKKwkJc2tiX3B1dChza2IsIGxlMTZfdG9fY3B1KHJ4X2Rlc2MtPnBrdF9sZW4pKTsKKwkJaWYgKG13bDhrX3JlbW92ZV9kbWFfaGVhZGVyKHNrYikpIHsKKwkJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJd2ggPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7CisKKwkJLyoKKwkJICogQ2hlY2sgZm9yIHBlbmRpbmcgam9pbiBvcGVyYXRpb24uIHNhdmUgYSBjb3B5IG9mCisJCSAqIHRoZSBiZWFjb24gYW5kIHNjaGVkdWxlIGEgdGFza2xldCB0byBzZW5kIGZpbmFsaXplCisJCSAqIGpvaW4gY29tbWFuZCB0byB0aGUgZmlybXdhcmUuCisJCSAqLworCQlpZiAobXdsOGtfY2FwdHVyZV9ic3NpZChwcml2LCB3aCkpCisJCQltd2w4a19zYXZlX2JlYWNvbihwcml2LCBza2IpOworCisJCW1lbXNldCgmc3RhdHVzLCAwLCBzaXplb2Yoc3RhdHVzKSk7CisJCXN0YXR1cy5tYWN0aW1lID0gMDsKKwkJc3RhdHVzLnNpZ25hbCA9IC1yeF9kZXNjLT5yc3NpOworCQlzdGF0dXMubm9pc2UgPSAtcnhfZGVzYy0+bm9pc2VfbGV2ZWw7CisJCXN0YXR1cy5xdWFsID0gcnhfZGVzYy0+bGlua19xdWFsaXR5OworCQlzdGF0dXMuYW50ZW5uYSA9IDE7CisJCXN0YXR1cy5yYXRlX2lkeCA9IDE7CisJCXN0YXR1cy5mbGFnID0gMDsKKwkJc3RhdHVzLmJhbmQgPSBJRUVFODAyMTFfQkFORF8yR0haOworCQlzdGF0dXMuZnJlcSA9IGllZWU4MDIxMV9jaGFubmVsX3RvX2ZyZXF1ZW5jeShyeF9kZXNjLT5jaGFubmVsKTsKKwkJaWVlZTgwMjExX3J4X2lycXNhZmUoaHcsIHNrYiwgJnN0YXR1cyk7CisKKwkJcHJvY2Vzc2VkKys7CisJfQorCisJcmV0dXJuIHByb2Nlc3NlZDsKK30KKworCisvKgorICogUGFja2V0IHRyYW5zbWlzc2lvbi4KKyAqLworCisvKiBUcmFuc21pdCBxdWV1ZSBhc3NpZ25tZW50LiAgKi8KK2VudW0geworCU1XTDhLX1dNRV9BQ19CSwk9IDAsCQkvKiBiYWNrZ3JvdW5kIGFjY2VzcyAqLworCU1XTDhLX1dNRV9BQ19CRQk9IDEsCQkvKiBiZXN0IGVmZm9ydCBhY2Nlc3MgKi8KKwlNV0w4S19XTUVfQUNfVkkJPSAyLAkJLyogdmlkZW8gYWNjZXNzICovCisJTVdMOEtfV01FX0FDX1ZPCT0gMywJCS8qIHZvaWNlIGFjY2VzcyAqLworfTsKKworLyogVHJhbnNtaXQgcGFja2V0IEFDSyBwb2xpY3kgKi8KKyNkZWZpbmUgTVdMOEtfVFhEX0FDS19QT0xJQ1lfTk9STUFMCQkwCisjZGVmaW5lIE1XTDhLX1RYRF9BQ0tfUE9MSUNZX05PTkUJCTEKKyNkZWZpbmUgTVdMOEtfVFhEX0FDS19QT0xJQ1lfTk9fRVhQTElDSVQJMgorI2RlZmluZSBNV0w4S19UWERfQUNLX1BPTElDWV9CTE9DS0FDSwkJMworCisjZGVmaW5lIEdFVF9UWFEoX2FjKSAoXAorCQkoKF9hYykgPT0gV01FX0FDX1ZPKSA/IE1XTDhLX1dNRV9BQ19WTyA6IFwKKwkJKChfYWMpID09IFdNRV9BQ19WSSkgPyBNV0w4S19XTUVfQUNfVkkgOiBcCisJCSgoX2FjKSA9PSBXTUVfQUNfQkspID8gTVdMOEtfV01FX0FDX0JLIDogXAorCQlNV0w4S19XTUVfQUNfQkUpCisKKyNkZWZpbmUgTVdMOEtfVFhEX1NUQVRVU19JRExFCQkJMHgwMDAwMDAwMAorI2RlZmluZSBNV0w4S19UWERfU1RBVFVTX1VTRUQJCQkweDAwMDAwMDAxCisjZGVmaW5lIE1XTDhLX1RYRF9TVEFUVVNfT0sJCQkweDAwMDAwMDAxCisjZGVmaW5lIE1XTDhLX1RYRF9TVEFUVVNfT0tfUkVUUlkJCTB4MDAwMDAwMDIKKyNkZWZpbmUgTVdMOEtfVFhEX1NUQVRVU19PS19NT1JFX1JFVFJZCQkweDAwMDAwMDA0CisjZGVmaW5lIE1XTDhLX1RYRF9TVEFUVVNfTVVMVElDQVNUX1RYCQkweDAwMDAwMDA4CisjZGVmaW5lIE1XTDhLX1RYRF9TVEFUVVNfQlJPQURDQVNUX1RYCQkweDAwMDAwMDEwCisjZGVmaW5lIE1XTDhLX1RYRF9TVEFUVVNfRkFJTEVEX0xJTktfRVJST1IJMHgwMDAwMDAyMAorI2RlZmluZSBNV0w4S19UWERfU1RBVFVTX0ZBSUxFRF9FWENFRURfTElNSVQJMHgwMDAwMDA0MAorI2RlZmluZSBNV0w4S19UWERfU1RBVFVTX0ZBSUxFRF9BR0lORwkJMHgwMDAwMDA4MAorI2RlZmluZSBNV0w4S19UWERfU1RBVFVTX0hPU1RfQ01ECQkweDQwMDAwMDAwCisjZGVmaW5lIE1XTDhLX1RYRF9TVEFUVVNfRldfT1dORUQJCTB4ODAwMDAwMDAKKyNkZWZpbmUgIE1XTDhLX1RYRF9TT0ZUU1RBTEUJCQkJMHg4MAorI2RlZmluZSAgTVdMOEtfVFhEX1NPRlRTVEFMRV9NR01UX1JFVFJZCQkJMHgwMQorCitzdHJ1Y3QgbXdsOGtfdHhfZGVzYyB7CisJX19sZTMyIHN0YXR1czsKKwlfX3U4IGRhdGFfcmF0ZTsKKwlfX3U4IHR4X3ByaW9yaXR5OworCV9fbGUxNiBxb3NfY29udHJvbDsKKwlfX2xlMzIgcGt0X3BoeXNfYWRkcjsKKwlfX2xlMTYgcGt0X2xlbjsKKwlfX3U4IGRlc3RfTUFDX2FkZHJbSUVFRTgwMjExX0FERFJfTEVOXTsKKwlfX2xlMzIgbmV4dF90eF9kZXNjX3BoeXNfYWRkcjsKKwlfX2xlMzIgcmVzZXJ2ZWQ7CisJX19sZTE2IHJhdGVfaW5mbzsKKwlfX3U4IHBlZXJfaWQ7CisJX191OCB0eF9mcmFnX2NudDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUgTVdMOEtfVFhfREVTQ1MJCTEyOAorCitzdGF0aWMgaW50IG13bDhrX3R4cV9pbml0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgaW5kZXgpCit7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlzdHJ1Y3QgbXdsOGtfdHhfcXVldWUgKnR4cSA9IHByaXYtPnR4cSArIGluZGV4OworCWludCBzaXplOworCWludCBpOworCisJbWVtc2V0KCZ0eHEtPnR4X3N0YXRzLCAwLAorCQlzaXplb2Yoc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9zdGF0cykpOworCXR4cS0+dHhfc3RhdHMubGltaXQgPSBNV0w4S19UWF9ERVNDUzsKKwl0eHEtPnR4X2hlYWQgPSAwOworCXR4cS0+dHhfdGFpbCA9IDA7CisKKwlzaXplID0gTVdMOEtfVFhfREVTQ1MgKiBzaXplb2Yoc3RydWN0IG13bDhrX3R4X2Rlc2MpOworCisJdHhxLT50eF9kZXNjX2FyZWEgPQorCQlwY2lfYWxsb2NfY29uc2lzdGVudChwcml2LT5wZGV2LCBzaXplLCAmdHhxLT50eF9kZXNjX2RtYSk7CisJaWYgKHR4cS0+dHhfZGVzY19hcmVhID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIGFsbG9jIFRYIGRlc2NyaXB0b3JzXG4iLAorCQkgICAgICAgcHJpdi0+bmFtZSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwltZW1zZXQodHhxLT50eF9kZXNjX2FyZWEsIDAsIHNpemUpOworCisJdHhxLT50eF9za2IgPSBrbWFsbG9jKE1XTDhLX1RYX0RFU0NTICogc2l6ZW9mKCp0eHEtPnR4X3NrYiksCisJCQkJCQkJCUdGUF9LRVJORUwpOworCWlmICh0eHEtPnR4X3NrYiA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBhbGxvYyBUWCBza2J1ZmYgbGlzdFxuIiwKKwkJICAgICAgIHByaXYtPm5hbWUpOworCQlwY2lfZnJlZV9jb25zaXN0ZW50KHByaXYtPnBkZXYsIHNpemUsCisJCQkJICAgIHR4cS0+dHhfZGVzY19hcmVhLCB0eHEtPnR4X2Rlc2NfZG1hKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCW1lbXNldCh0eHEtPnR4X3NrYiwgMCwgTVdMOEtfVFhfREVTQ1MgKiBzaXplb2YoKnR4cS0+dHhfc2tiKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTVdMOEtfVFhfREVTQ1M7IGkrKykgeworCQlzdHJ1Y3QgbXdsOGtfdHhfZGVzYyAqdHhfZGVzYzsKKwkJaW50IG5leHRpOworCisJCXR4X2Rlc2MgPSB0eHEtPnR4X2Rlc2NfYXJlYSArIGk7CisJCW5leHRpID0gKGkgKyAxKSAlIE1XTDhLX1RYX0RFU0NTOworCisJCXR4X2Rlc2MtPnN0YXR1cyA9IDA7CisJCXR4X2Rlc2MtPm5leHRfdHhfZGVzY19waHlzX2FkZHIgPQorCQkJY3B1X3RvX2xlMzIodHhxLT50eF9kZXNjX2RtYSArCisJCQkJCQluZXh0aSAqIHNpemVvZigqdHhfZGVzYykpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbXdsOGtfdHhfc3RhcnQoc3RydWN0IG13bDhrX3ByaXYgKnByaXYpCit7CisJaW93cml0ZTMyKE1XTDhLX0gyQV9JTlRfUFBBX1JFQURZLAorCQlwcml2LT5yZWdzICsgTVdMOEtfSElVX0gyQV9JTlRFUlJVUFRfRVZFTlRTKTsKKwlpb3dyaXRlMzIoTVdMOEtfSDJBX0lOVF9EVU1NWSwKKwkJcHJpdi0+cmVncyArIE1XTDhLX0hJVV9IMkFfSU5URVJSVVBUX0VWRU5UUyk7CisJaW9yZWFkMzIocHJpdi0+cmVncyArIE1XTDhLX0hJVV9JTlRfQ09ERSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG13bDhrX3R4cV9idXN5KHN0cnVjdCBtd2w4a19wcml2ICpwcml2KQoreworCXJldHVybiBwcml2LT5wZW5kaW5nX3R4X3BrdHM7Cit9CisKK3N0cnVjdCBtd2w4a190eHFfaW5mbyB7CisJdTMyIGZ3X293bmVkOworCXUzMiBkcnZfb3duZWQ7CisJdTMyIHVudXNlZDsKKwl1MzIgbGVuOworCXUzMiBoZWFkOworCXUzMiB0YWlsOworfTsKKworc3RhdGljIGludCBtd2w4a19zY2FuX3R4X3Jpbmcoc3RydWN0IG13bDhrX3ByaXYgKnByaXYsCisJCQkJc3RydWN0IG13bDhrX3R4cV9pbmZvIHR4aW5mb1tdLAorCQkJCXUzMiBudW1fcXVldWVzKQoreworCWludCBjb3VudCwgZGVzYywgc3RhdHVzOworCXN0cnVjdCBtd2w4a190eF9xdWV1ZSAqdHhxOworCXN0cnVjdCBtd2w4a190eF9kZXNjICp0eF9kZXNjOworCWludCBuZGVzY3MgPSAwOworCisJbWVtc2V0KHR4aW5mbywgMCwgbnVtX3F1ZXVlcyAqIHNpemVvZihzdHJ1Y3QgbXdsOGtfdHhxX2luZm8pKTsKKwlzcGluX2xvY2tfYmgoJnByaXYtPnR4X2xvY2spOworCWZvciAoY291bnQgPSAwOyBjb3VudCA8IG51bV9xdWV1ZXM7IGNvdW50KyspIHsKKwkJdHhxID0gcHJpdi0+dHhxICsgY291bnQ7CisJCXR4aW5mb1tjb3VudF0ubGVuID0gdHhxLT50eF9zdGF0cy5sZW47CisJCXR4aW5mb1tjb3VudF0uaGVhZCA9IHR4cS0+dHhfaGVhZDsKKwkJdHhpbmZvW2NvdW50XS50YWlsID0gdHhxLT50eF90YWlsOworCQlmb3IgKGRlc2MgPSAwOyBkZXNjIDwgTVdMOEtfVFhfREVTQ1M7IGRlc2MrKykgeworCQkJdHhfZGVzYyA9IHR4cS0+dHhfZGVzY19hcmVhICsgZGVzYzsKKwkJCXN0YXR1cyA9IGxlMzJfdG9fY3B1KHR4X2Rlc2MtPnN0YXR1cyk7CisKKwkJCWlmIChzdGF0dXMgJiBNV0w4S19UWERfU1RBVFVTX0ZXX09XTkVEKQorCQkJCXR4aW5mb1tjb3VudF0uZndfb3duZWQrKzsKKwkJCWVsc2UKKwkJCQl0eGluZm9bY291bnRdLmRydl9vd25lZCsrOworCisJCQlpZiAodHhfZGVzYy0+cGt0X2xlbiA9PSAwKQorCQkJCXR4aW5mb1tjb3VudF0udW51c2VkKys7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfYmgoJnByaXYtPnR4X2xvY2spOworCisJcmV0dXJuIG5kZXNjczsKK30KKworc3RhdGljIGludCBtd2w4a190eF93YWl0X2VtcHR5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgZGVsYXlfbXMpCit7CisJdTMyIGNvdW50ID0gMDsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSAwOworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisJREVDTEFSRV9DT01QTEVUSU9OX09OU1RBQ0soY21kX3dhaXQpOworCisJbWlnaHRfc2xlZXAoKTsKKworCWlmIChwcml2LT50eF93YWl0ICE9IE5VTEwpCisJCXByaW50ayhLRVJOX0VSUiAiV0FSTklORyBQcmV2aW91cyBUWFdhaXRFbXB0eSBpbnN0YW5jZVxuIik7CisKKwlzcGluX2xvY2tfYmgoJnByaXYtPnR4X2xvY2spOworCWNvdW50ID0gbXdsOGtfdHhxX2J1c3kocHJpdik7CisJaWYgKGNvdW50KSB7CisJCXByaXYtPnR4X3dhaXQgPSAmY21kX3dhaXQ7CisJCWlmIChwcml2LT5yYWRpb19zdGF0ZSkKKwkJCW13bDhrX3R4X3N0YXJ0KHByaXYpOworCX0KKwlzcGluX3VubG9ja19iaCgmcHJpdi0+dHhfbG9jayk7CisKKwlpZiAoY291bnQpIHsKKwkJc3RydWN0IG13bDhrX3R4cV9pbmZvIHR4aW5mb1s0XTsKKwkJaW50IGluZGV4OworCQlpbnQgbmV3Y291bnQ7CisKKwkJdGltZW91dCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmY21kX3dhaXQsCisJCQkJCW1zZWNzX3RvX2ppZmZpZXMoZGVsYXlfbXMpKTsKKwkJaWYgKHRpbWVvdXQpCisJCQlyZXR1cm4gMDsKKworCQlzcGluX2xvY2tfYmgoJnByaXYtPnR4X2xvY2spOworCQlwcml2LT50eF93YWl0ID0gTlVMTDsKKwkJbmV3Y291bnQgPSBtd2w4a190eHFfYnVzeShwcml2KTsKKwkJc3Bpbl91bmxvY2tfYmgoJnByaXYtPnR4X2xvY2spOworCisJCXByaW50ayhLRVJOX0VSUiAiJXMoJXUpIFRJTUVET1VUOiV1bXMgUGVuZDoldS0tPiV1XG4iLAorCQkgICAgICAgX19mdW5jX18sIF9fTElORV9fLCBkZWxheV9tcywgY291bnQsIG5ld2NvdW50KTsKKworCQltd2w4a19zY2FuX3R4X3JpbmcocHJpdiwgdHhpbmZvLCA0KTsKKwkJZm9yIChpbmRleCA9IDAgOyBpbmRleCA8IDQ7IGluZGV4KyspCisJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkiVFhROiV1IEw6JXUgSDoldSBUOiV1IEZXOiV1IERSVjoldSBVOiV1XG4iLAorCQkJCQlpbmRleCwKKwkJCQkJdHhpbmZvW2luZGV4XS5sZW4sCisJCQkJCXR4aW5mb1tpbmRleF0uaGVhZCwKKwkJCQkJdHhpbmZvW2luZGV4XS50YWlsLAorCQkJCQl0eGluZm9baW5kZXhdLmZ3X293bmVkLAorCQkJCQl0eGluZm9baW5kZXhdLmRydl9vd25lZCwKKwkJCQkJdHhpbmZvW2luZGV4XS51bnVzZWQpOworCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBNV0w4S19UWERfT0sJKE1XTDhLX1RYRF9TVEFUVVNfT0sgfCBcCisJCQkgTVdMOEtfVFhEX1NUQVRVU19PS19SRVRSWSB8IFwKKwkJCSBNV0w4S19UWERfU1RBVFVTX09LX01PUkVfUkVUUlkpCisjZGVmaW5lIE1XTDhLX1RYRF9TVUNDRVNTKHN0YXQpCQkoKHN0YXQpICYgTVdMOEtfVFhEX09LKQorI2RlZmluZSBNV0w4S19UWERfRkFJTF9SRVRSWShzdGF0KQlcCisJKChzdGF0KSAmIChNV0w4S19UWERfU1RBVFVTX0ZBSUxFRF9FWENFRURfTElNSVQpKQorCitzdGF0aWMgdm9pZCBtd2w4a190eHFfcmVjbGFpbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgaW50IGluZGV4LCBpbnQgZm9yY2UpCit7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlzdHJ1Y3QgbXdsOGtfdHhfcXVldWUgKnR4cSA9IHByaXYtPnR4cSArIGluZGV4OworCWludCB3YWtlID0gMDsKKworCXdoaWxlICh0eHEtPnR4X3N0YXRzLmxlbiA+IDApIHsKKwkJaW50IHR4OworCQlpbnQgcmM7CisJCXN0cnVjdCBtd2w4a190eF9kZXNjICp0eF9kZXNjOworCQl1bnNpZ25lZCBsb25nIGFkZHI7CisJCXNpemVfdCBzaXplOworCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm87CisJCXUzMiBzdGF0dXM7CisKKwkJcmMgPSAwOworCQl0eCA9IHR4cS0+dHhfaGVhZDsKKwkJdHhfZGVzYyA9IHR4cS0+dHhfZGVzY19hcmVhICsgdHg7CisKKwkJc3RhdHVzID0gbGUzMl90b19jcHUodHhfZGVzYy0+c3RhdHVzKTsKKworCQlpZiAoc3RhdHVzICYgTVdMOEtfVFhEX1NUQVRVU19GV19PV05FRCkgeworCQkJaWYgKCFmb3JjZSkKKwkJCQlicmVhazsKKwkJCXR4X2Rlc2MtPnN0YXR1cyAmPQorCQkJCX5jcHVfdG9fbGUzMihNV0w4S19UWERfU1RBVFVTX0ZXX09XTkVEKTsKKwkJfQorCisJCXR4cS0+dHhfaGVhZCA9ICh0eCArIDEpICUgTVdMOEtfVFhfREVTQ1M7CisJCUJVR19PTih0eHEtPnR4X3N0YXRzLmxlbiA9PSAwKTsKKwkJdHhxLT50eF9zdGF0cy5sZW4tLTsKKwkJcHJpdi0+cGVuZGluZ190eF9wa3RzLS07CisKKwkJYWRkciA9IGxlMzJfdG9fY3B1KHR4X2Rlc2MtPnBrdF9waHlzX2FkZHIpOworCQlzaXplID0gKHUzMikobGUxNl90b19jcHUodHhfZGVzYy0+cGt0X2xlbikpOworCQlza2IgPSB0eHEtPnR4X3NrYlt0eF0uc2tiOworCQl0eHEtPnR4X3NrYlt0eF0uc2tiID0gTlVMTDsKKworCQlCVUdfT04oc2tiID09IE5VTEwpOworCQlwY2lfdW5tYXBfc2luZ2xlKHByaXYtPnBkZXYsIGFkZHIsIHNpemUsIFBDSV9ETUFfVE9ERVZJQ0UpOworCisJCXJjID0gbXdsOGtfcmVtb3ZlX2RtYV9oZWFkZXIoc2tiKTsKKworCQkvKiBNYXJrIGRlc2NyaXB0b3IgYXMgdW51c2VkICovCisJCXR4X2Rlc2MtPnBrdF9waHlzX2FkZHIgPSAwOworCQl0eF9kZXNjLT5wa3RfbGVuID0gMDsKKworCQlpZiAodHhxLT50eF9za2JbdHhdLmNsb25lKSB7CisJCQkvKiBSZXBsYWNlIHdpdGggb3JpZ2luYWwgc2tiCisJCQkgKiBiZWZvcmUgcmV0dXJuaW5nIHRvIHN0YWNrCisJCQkgKiBhcyBidWZmZXIgaGFzIGJlZW4gY2xvbmVkCisJCQkgKi8KKwkJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJCXNrYiA9IHR4cS0+dHhfc2tiW3R4XS5jbG9uZTsKKwkJCXR4cS0+dHhfc2tiW3R4XS5jbG9uZSA9IE5VTEw7CisJCX0KKworCQlpZiAocmMpIHsKKwkJCS8qIFNvbWV0aGluZyBoYXMgZ29uZSB3cm9uZyBoZXJlLgorCQkJICogRmFpbGVkIHRvIHJlbW92ZSBETUEgaGVhZGVyLgorCQkJICogUHJpbnQgZXJyb3IgbWVzc2FnZSBhbmQgZHJvcCBwYWNrZXQuCisJCQkgKi8KKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yIHJlbW92aW5nIERNQSBoZWFkZXIgZnJvbSAiCisJCQkJCSJ0eCBza2IgMHglcC5cbiIsIHByaXYtPm5hbWUsIHNrYik7CisKKwkJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwkJaWVlZTgwMjExX3R4X2luZm9fY2xlYXJfc3RhdHVzKGluZm8pOworCisJCS8qIENvbnZlcnQgZmlybXdhcmUgc3RhdHVzIHN0dWZmIGludG8gdHhfc3RhdHVzICovCisJCWlmIChNV0w4S19UWERfU1VDQ0VTUyhzdGF0dXMpKSB7CisJCQkvKiBUcmFuc21pdCBPSyAqLworCQkJaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1NUQVRfQUNLOworCQl9CisKKwkJaWVlZTgwMjExX3R4X3N0YXR1c19pcnFzYWZlKGh3LCBza2IpOworCisJCXdha2UgPSAhcHJpdi0+aW5jb25maWcgJiYgcHJpdi0+cmFkaW9fc3RhdGU7CisJfQorCisJaWYgKHdha2UpCisJCWllZWU4MDIxMV93YWtlX3F1ZXVlKGh3LCBpbmRleCk7Cit9CisKKy8qIG11c3QgYmUgY2FsbGVkIG9ubHkgd2hlbiB0aGUgY2FyZCdzIHRyYW5zbWl0IGlzIGNvbXBsZXRlbHkgaGFsdGVkICovCitzdGF0aWMgdm9pZCBtd2w4a190eHFfZGVpbml0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgaW5kZXgpCit7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlzdHJ1Y3QgbXdsOGtfdHhfcXVldWUgKnR4cSA9IHByaXYtPnR4cSArIGluZGV4OworCisJbXdsOGtfdHhxX3JlY2xhaW0oaHcsIGluZGV4LCAxKTsKKworCWtmcmVlKHR4cS0+dHhfc2tiKTsKKwl0eHEtPnR4X3NrYiA9IE5VTEw7CisKKwlwY2lfZnJlZV9jb25zaXN0ZW50KHByaXYtPnBkZXYsCisJCQkgICAgTVdMOEtfVFhfREVTQ1MgKiBzaXplb2Yoc3RydWN0IG13bDhrX3R4X2Rlc2MpLAorCQkJICAgIHR4cS0+dHhfZGVzY19hcmVhLCB0eHEtPnR4X2Rlc2NfZG1hKTsKKwl0eHEtPnR4X2Rlc2NfYXJlYSA9IE5VTEw7Cit9CisKK3N0YXRpYyBpbnQKK213bDhrX3R4cV94bWl0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgaW5kZXgsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm87CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKndoOworCXN0cnVjdCBtd2w4a190eF9xdWV1ZSAqdHhxOworCXN0cnVjdCBtd2w4a190eF9kZXNjICp0eDsKKwlzdHJ1Y3QgbXdsOGtfZG1hX2RhdGEgKnRyOworCXN0cnVjdCBtd2w4a192aWYgKm13bDhrX3ZpZjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqb3JnX3NrYiA9IHNrYjsKKwlkbWFfYWRkcl90IGRtYTsKKwl1MTYgcW9zID0gMDsKKwlib29sIHFvc2ZyYW1lID0gZmFsc2UsIGFtcGR1ZnJhbWUgPSBmYWxzZTsKKwlib29sIG1jZnJhbWUgPSBmYWxzZSwgZWFwb2xmcmFtZSA9IGZhbHNlOworCWJvb2wgYW1zZHVmcmFtZSA9IGZhbHNlOworCV9fbGUxNiBmYzsKKworCXR4cSA9IHByaXYtPnR4cSArIGluZGV4OworCXR4ID0gdHhxLT50eF9kZXNjX2FyZWEgKyB0eHEtPnR4X3RhaWw7CisKKwlCVUdfT04odHhxLT50eF9za2JbdHhxLT50eF90YWlsXS5za2IgIT0gTlVMTCk7CisKKwkvKgorCSAqIEFwcGVuZCBIVyBETUEgaGVhZGVyIHRvIHN0YXJ0IG9mIHBhY2tldC4gIERyb3AgcGFja2V0IGlmCisJICogdGhlcmUgaXMgbm90IGVub3VnaCBzcGFjZSBvciBhIGZhaWx1cmUgdG8gdW5zaGFyZS91bmNsb25lCisJICogdGhlIHNrYi4KKwkgKi8KKwlza2IgPSBtd2w4a19hZGRfZG1hX2hlYWRlcihza2IpOworCisJaWYgKHNrYiA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIHByZXBlbmQgSFcgRE1BICIKKwkJCSJoZWFkZXIsIGRyb3BwaW5nIFRYIGZyYW1lLlxuIiwgcHJpdi0+bmFtZSk7CisJCWRldl9rZnJlZV9za2Iob3JnX3NrYik7CisJCXJldHVybiBORVRERVZfVFhfT0s7CisJfQorCisJdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwltd2w4a192aWYgPSBNV0w4S19WSUYodHhfaW5mby0+Y29udHJvbC52aWYpOworCXRyID0gKHN0cnVjdCBtd2w4a19kbWFfZGF0YSAqKXNrYi0+ZGF0YTsKKwl3aCA9ICZ0ci0+d2g7CisJZmMgPSB3aC0+ZnJhbWVfY29udHJvbDsKKwlxb3NmcmFtZSA9IGllZWU4MDIxMV9pc19kYXRhX3FvcyhmYyk7CisJbWNmcmFtZSA9IGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKHdoLT5hZGRyMSk7CisJYW1wZHVmcmFtZSA9ICEhKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BTVBEVSk7CisKKwlpZiAodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0FTU0lHTl9TRVEpIHsKKwkJdTE2IHNlcW5vID0gbXdsOGtfdmlmLT5zZXFubzsKKwkJd2gtPnNlcV9jdHJsICY9IGNwdV90b19sZTE2KElFRUU4MDIxMV9TQ1RMX0ZSQUcpOworCQl3aC0+c2VxX2N0cmwgfD0gY3B1X3RvX2xlMTYoc2Vxbm8gPDwgNCk7CisJCW13bDhrX3ZpZi0+c2Vxbm8gPSBzZXFubysrICUgNDA5NjsKKwl9CisKKwlpZiAocW9zZnJhbWUpCisJCXFvcyA9IGxlMTZfdG9fY3B1KCooKF9fbGUxNiAqKWllZWU4MDIxMV9nZXRfcW9zX2N0bCh3aCkpKTsKKworCWRtYSA9IHBjaV9tYXBfc2luZ2xlKHByaXYtPnBkZXYsIHNrYi0+ZGF0YSwKKwkJCQlza2ItPmxlbiwgUENJX0RNQV9UT0RFVklDRSk7CisKKwlpZiAocGNpX2RtYV9tYXBwaW5nX2Vycm9yKHByaXYtPnBkZXYsIGRtYSkpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBmYWlsZWQgdG8gZG1hIG1hcCBza2IsICIKKwkJCSJkcm9wcGluZyBUWCBmcmFtZS5cbiIsIHByaXYtPm5hbWUpOworCisJCWlmIChvcmdfc2tiICE9IE5VTEwpCisJCQlkZXZfa2ZyZWVfc2tiKG9yZ19za2IpOworCQlpZiAoc2tiICE9IE5VTEwpCisJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCXJldHVybiBORVRERVZfVFhfT0s7CisJfQorCisJLyogU2V0IGRlc2MgaGVhZGVyLCBjcHUgYml0IG9yZGVyLiAgKi8KKwl0eC0+c3RhdHVzID0gMDsKKwl0eC0+ZGF0YV9yYXRlID0gMDsKKwl0eC0+dHhfcHJpb3JpdHkgPSBpbmRleDsKKwl0eC0+cW9zX2NvbnRyb2wgPSAwOworCXR4LT5yYXRlX2luZm8gPSAwOworCXR4LT5wZWVyX2lkID0gbXdsOGtfdmlmLT5wZWVyX2lkOworCisJYW1zZHVmcmFtZSA9ICEhKHFvcyAmIElFRUU4MDIxMV9RT1NfQ09OVFJPTF9BX01TRFVfUFJFU0VOVCk7CisKKwkvKiBTZXR1cCBmaXJtd2FyZSBjb250cm9sIGJpdCBmaWVsZHMgZm9yIGVhY2ggZnJhbWUgdHlwZS4gICovCisJaWYgKGllZWU4MDIxMV9pc19tZ210KGZjKSB8fCBpZWVlODAyMTFfaXNfY3RsKGZjKSkgeworCQl0eC0+ZGF0YV9yYXRlID0gMDsKKwkJcW9zID0gbXdsOGtfcW9zX3NldGJpdF9lb3NwKHFvcyk7CisJCS8qIFNldCBRdWV1ZSBzaXplIHRvIHVuc3BlY2lmaWVkICovCisJCXFvcyA9IG13bDhrX3Fvc19zZXRiaXRfcWxlbihxb3MsIDB4ZmYpOworCX0gZWxzZSBpZiAoaWVlZTgwMjExX2lzX2RhdGEoZmMpKSB7CisJCXR4LT5kYXRhX3JhdGUgPSAxOworCQlpZiAobWNmcmFtZSkKKwkJCXR4LT5zdGF0dXMgfD0gTVdMOEtfVFhEX1NUQVRVU19NVUxUSUNBU1RfVFg7CisKKwkJLyoKKwkJICogVGVsbCBmaXJtd2FyZSB0byBub3Qgc2VuZCBFQVBPTCBwa3RzIGluIGFuCisJCSAqIGFnZ3JlZ2F0ZS4gIFZlcmlmeSBhZ2FpbnN0IG1hYzgwMjExIHR4IHBhdGguICBJZgorCQkgKiBzdGFjayB0dXJucyBvZmYgQU1QRFUgZm9yIGFuIEVBUE9MIGZyYW1lIHRoaXMKKwkJICogY2hlY2sgd2lsbCBiZSByZW1vdmVkLgorCQkgKi8KKwkJaWYgKGVhcG9sZnJhbWUpIHsKKwkJCXFvcyA9IG13bDhrX3Fvc19zZXRiaXRfYWNrKHFvcywKKwkJCQlNV0w4S19UWERfQUNLX1BPTElDWV9OT1JNQUwpOworCQl9IGVsc2UgeworCQkJLyogU2VuZCBwa3QgaW4gYW4gYWdncmVnYXRlIGlmIEFNUERVIGZyYW1lLiAgKi8KKwkJCWlmIChhbXBkdWZyYW1lKQorCQkJCXFvcyA9IG13bDhrX3Fvc19zZXRiaXRfYWNrKHFvcywKKwkJCQkJTVdMOEtfVFhEX0FDS19QT0xJQ1lfQkxPQ0tBQ0spOworCQkJZWxzZQorCQkJCXFvcyA9IG13bDhrX3Fvc19zZXRiaXRfYWNrKHFvcywKKwkJCQkJTVdMOEtfVFhEX0FDS19QT0xJQ1lfTk9STUFMKTsKKworCQkJaWYgKGFtc2R1ZnJhbWUpCisJCQkJcW9zID0gbXdsOGtfcW9zX3NldGJpdF9hbXNkdShxb3MpOworCQl9CisJfQorCisJLyogQ29udmVydCB0byBsaXR0bGUgZW5kaWFuICovCisJdHgtPnFvc19jb250cm9sID0gY3B1X3RvX2xlMTYocW9zKTsKKwl0eC0+c3RhdHVzID0gY3B1X3RvX2xlMzIodHgtPnN0YXR1cyk7CisJdHgtPnBrdF9waHlzX2FkZHIgPSBjcHVfdG9fbGUzMihkbWEpOworCXR4LT5wa3RfbGVuID0gY3B1X3RvX2xlMTYoc2tiLT5sZW4pOworCisJdHhxLT50eF9za2JbdHhxLT50eF90YWlsXS5za2IgPSBza2I7CisJdHhxLT50eF9za2JbdHhxLT50eF90YWlsXS5jbG9uZSA9CisJCXNrYiA9PSBvcmdfc2tiID8gTlVMTCA6IG9yZ19za2I7CisKKwlzcGluX2xvY2tfYmgoJnByaXYtPnR4X2xvY2spOworCisJdHgtPnN0YXR1cyA9IGNwdV90b19sZTMyKE1XTDhLX1RYRF9TVEFUVVNfT0sgfAorCQkJCQlNV0w4S19UWERfU1RBVFVTX0ZXX09XTkVEKTsKKwl3bWIoKTsKKwl0eHEtPnR4X3N0YXRzLmxlbisrOworCXByaXYtPnBlbmRpbmdfdHhfcGt0cysrOworCXR4cS0+dHhfc3RhdHMuY291bnQrKzsKKwl0eHEtPnR4X3RhaWwrKzsKKworCWlmICh0eHEtPnR4X3RhaWwgPT0gTVdMOEtfVFhfREVTQ1MpCisJCXR4cS0+dHhfdGFpbCA9IDA7CisJaWYgKHR4cS0+dHhfaGVhZCA9PSB0eHEtPnR4X3RhaWwpCisJCWllZWU4MDIxMV9zdG9wX3F1ZXVlKGh3LCBpbmRleCk7CisKKwlpZiAocHJpdi0+aW5jb25maWcpIHsKKwkJLyoKKwkJICogU2lsZW50bHkgcXVldWUgcGFja2V0IHdoZW4gd2UgYXJlIGluIHRoZSBtaWRkbGUgb2YKKwkJICogYSBjb25maWcgY3ljbGUuICBOb3RpZnkgZmlybXdhcmUgb25seSBpZiB3ZSBhcmUKKwkJICogd2FpdGluZyBmb3IgVFhRcyB0byBlbXB0eS4gIElmIGEgcGFja2V0IGlzIHNlbnQKKwkJICogYmVmb3JlIC5jb25maWcoKSBpcyBjb21wbGV0ZSwgcGVyaGFwcyBpdCBpcyBiZXR0ZXIKKwkJICogdG8gZHJvcCB0aGUgcGFja2V0LCBhcyB0aGUgY2hhbm5lbCBpcyBiZWluZyBjaGFuZ2VkCisJCSAqIGFuZCB0aGUgcGFja2V0IHdpbGwgZW5kIHVwIG9uIHRoZSB3cm9uZyBjaGFubmVsLgorCQkgKi8KKwkJcHJpbnRrKEtFUk5fRVJSICIlcygpOiBXQVJOSU5HIFRYIGFjdGl2aXR5IHdoaWxlICIKKwkJCSJpbiBjb25maWdcbiIsIF9fZnVuY19fKTsKKworCQlpZiAocHJpdi0+dHhfd2FpdCAhPSBOVUxMKQorCQkJbXdsOGtfdHhfc3RhcnQocHJpdik7CisJfSBlbHNlCisJCW13bDhrX3R4X3N0YXJ0KHByaXYpOworCisJc3Bpbl91bmxvY2tfYmgoJnByaXYtPnR4X2xvY2spOworCisJcmV0dXJuIE5FVERFVl9UWF9PSzsKK30KKworCisvKgorICogQ29tbWFuZCBwcm9jZXNzaW5nLgorICovCisKKy8qIFRpbWVvdXQgZmlybXdhcmUgY29tbWFuZHMgYWZ0ZXIgMjAwMG1zICovCisjZGVmaW5lIE1XTDhLX0NNRF9USU1FT1VUX01TCTIwMDAKKworc3RhdGljIGludCBtd2w4a19wb3N0X2NtZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IG13bDhrX2NtZF9wa3QgKmNtZCkKK3sKKwlERUNMQVJFX0NPTVBMRVRJT05fT05TVEFDSyhjbWRfd2FpdCk7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwl2b2lkIF9faW9tZW0gKnJlZ3MgPSBwcml2LT5yZWdzOworCWRtYV9hZGRyX3QgZG1hX2FkZHI7CisJdW5zaWduZWQgaW50IGRtYV9zaXplOworCWludCByYzsKKwl1MTYgX19pb21lbSAqcmVzdWx0OworCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IDA7CisJdTggYnVmWzMyXTsKKworCWNtZC0+cmVzdWx0ID0gMHhGRkZGOworCWRtYV9zaXplID0gbGUxNl90b19jcHUoY21kLT5sZW5ndGgpOworCWRtYV9hZGRyID0gcGNpX21hcF9zaW5nbGUocHJpdi0+cGRldiwgY21kLCBkbWFfc2l6ZSwKKwkJCQkgIFBDSV9ETUFfQklESVJFQ1RJT05BTCk7CisJaWYgKHBjaV9kbWFfbWFwcGluZ19lcnJvcihwcml2LT5wZGV2LCBkbWFfYWRkcikpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKHByaXYtPmhvc3RjbWRfd2FpdCAhPSBOVUxMKQorCQlwcmludGsoS0VSTl9FUlIgIldBUk5JTkcgaG9zdCBjb21tYW5kIGluIHByb2dyZXNzXG4iKTsKKworCXNwaW5fbG9ja19pcnEoJnByaXYtPmZ3X2xvY2spOworCXByaXYtPmhvc3RjbWRfd2FpdCA9ICZjbWRfd2FpdDsKKwlpb3dyaXRlMzIoZG1hX2FkZHIsIHJlZ3MgKyBNV0w4S19ISVVfR0VOX1BUUik7CisJaW93cml0ZTMyKE1XTDhLX0gyQV9JTlRfRE9PUkJFTEwsCisJCXJlZ3MgKyBNV0w4S19ISVVfSDJBX0lOVEVSUlVQVF9FVkVOVFMpOworCWlvd3JpdGUzMihNV0w4S19IMkFfSU5UX0RVTU1ZLAorCQlyZWdzICsgTVdMOEtfSElVX0gyQV9JTlRFUlJVUFRfRVZFTlRTKTsKKwlzcGluX3VubG9ja19pcnEoJnByaXYtPmZ3X2xvY2spOworCisJdGltZW91dCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmY21kX3dhaXQsCisJCQkJbXNlY3NfdG9famlmZmllcyhNV0w4S19DTURfVElNRU9VVF9NUykpOworCisJcmVzdWx0ID0gJmNtZC0+cmVzdWx0OworCWlmICghdGltZW91dCkgeworCQlzcGluX2xvY2tfaXJxKCZwcml2LT5md19sb2NrKTsKKwkJcHJpdi0+aG9zdGNtZF93YWl0ID0gTlVMTDsKKwkJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5md19sb2NrKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogQ29tbWFuZCAlcyB0aW1lb3V0IGFmdGVyICV1IG1zXG4iLAorCQkgICAgICAgcHJpdi0+bmFtZSwKKwkJICAgICAgIG13bDhrX2NtZF9uYW1lKGNtZC0+Y29kZSwgYnVmLCBzaXplb2YoYnVmKSksCisJCSAgICAgICBNV0w4S19DTURfVElNRU9VVF9NUyk7CisJCXJjID0gLUVUSU1FRE9VVDsKKwl9IGVsc2UgeworCQlyYyA9ICpyZXN1bHQgPyAtRUlOVkFMIDogMDsKKwkJaWYgKHJjKQorCQkJcHJpbnRrKEtFUk5fRVJSICIlczogQ29tbWFuZCAlcyBlcnJvciAweCV4XG4iLAorCQkJICAgICAgIHByaXYtPm5hbWUsCisJCQkgICAgICAgbXdsOGtfY21kX25hbWUoY21kLT5jb2RlLCBidWYsIHNpemVvZihidWYpKSwKKwkJCSAgICAgICAqcmVzdWx0KTsKKwl9CisKKwlwY2lfdW5tYXBfc2luZ2xlKHByaXYtPnBkZXYsIGRtYV9hZGRyLCBkbWFfc2l6ZSwKKwkJCQkJUENJX0RNQV9CSURJUkVDVElPTkFMKTsKKwlyZXR1cm4gcmM7Cit9CisKKy8qCisgKiBHRVRfSFdfU1BFQy4KKyAqLworc3RydWN0IG13bDhrX2NtZF9nZXRfaHdfc3BlYyB7CisJc3RydWN0IG13bDhrX2NtZF9wa3QgaGVhZGVyOworCV9fdTggaHdfcmV2OworCV9fdTggaG9zdF9pbnRlcmZhY2U7CisJX19sZTE2IG51bV9tY2FkZHJzOworCV9fdTggcGVybV9hZGRyW0lFRUU4MDIxMV9BRERSX0xFTl07CisJX19sZTE2IHJlZ2lvbl9jb2RlOworCV9fbGUzMiBmd19yZXY7CisJX19sZTMyIHBzX2Nvb2tpZTsKKwlfX2xlMzIgY2FwczsKKwlfX3U4IG1jc19iaXRtYXBbMTZdOworCV9fbGUzMiByeF9xdWV1ZV9wdHI7CisJX19sZTMyIG51bV90eF9xdWV1ZXM7CisJX19sZTMyIHR4X3F1ZXVlX3B0cnNbTVdMOEtfVFhfUVVFVUVTXTsKKwlfX2xlMzIgY2FwczI7CisJX19sZTMyIG51bV90eF9kZXNjX3Blcl9xdWV1ZTsKKwlfX2xlMzIgdG90YWxfcnhfZGVzYzsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0YXRpYyBpbnQgbXdsOGtfY21kX2dldF9od19zcGVjKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IG13bDhrX2NtZF9nZXRfaHdfc3BlYyAqY21kOworCWludCByYzsKKwlpbnQgaTsKKworCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY21kID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJY21kLT5oZWFkZXIuY29kZSA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9HRVRfSFdfU1BFQyk7CisJY21kLT5oZWFkZXIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKKworCW1lbXNldChjbWQtPnBlcm1fYWRkciwgMHhmZiwgc2l6ZW9mKGNtZC0+cGVybV9hZGRyKSk7CisJY21kLT5wc19jb29raWUgPSBjcHVfdG9fbGUzMihwcml2LT5jb29raWVfZG1hKTsKKwljbWQtPnJ4X3F1ZXVlX3B0ciA9IGNwdV90b19sZTMyKHByaXYtPnJ4cVswXS5yeF9kZXNjX2RtYSk7CisJY21kLT5udW1fdHhfcXVldWVzID0gTVdMOEtfVFhfUVVFVUVTOworCWZvciAoaSA9IDA7IGkgPCBNV0w4S19UWF9RVUVVRVM7IGkrKykKKwkJY21kLT50eF9xdWV1ZV9wdHJzW2ldID0gY3B1X3RvX2xlMzIocHJpdi0+dHhxW2ldLnR4X2Rlc2NfZG1hKTsKKwljbWQtPm51bV90eF9kZXNjX3Blcl9xdWV1ZSA9IE1XTDhLX1RYX0RFU0NTOworCWNtZC0+dG90YWxfcnhfZGVzYyA9IE1XTDhLX1JYX0RFU0NTOworCisJcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKKworCWlmICghcmMpIHsKKwkJU0VUX0lFRUU4MDIxMV9QRVJNX0FERFIoaHcsIGNtZC0+cGVybV9hZGRyKTsKKwkJcHJpdi0+bnVtX21jYWRkcnMgPSBsZTE2X3RvX2NwdShjbWQtPm51bV9tY2FkZHJzKTsKKwkJcHJpdi0+ZndfcmV2ID0gY21kLT5md19yZXY7CisJCXByaXYtPmh3X3JldiA9IGNtZC0+aHdfcmV2OworCQlwcml2LT5yZWdpb25fY29kZSA9IGxlMTZfdG9fY3B1KGNtZC0+cmVnaW9uX2NvZGUpOworCX0KKworCWtmcmVlKGNtZCk7CisJcmV0dXJuIHJjOworfQorCisvKgorICogQ01EX01BQ19NVUxUSUNBU1RfQURSLgorICovCitzdHJ1Y3QgbXdsOGtfY21kX21hY19tdWx0aWNhc3RfYWRyIHsKKwlzdHJ1Y3QgbXdsOGtfY21kX3BrdCBoZWFkZXI7CisJX19sZTE2IGFjdGlvbjsKKwlfX2xlMTYgbnVtYWRkcjsKKwlfX3U4IGFkZHJbMV1bSUVFRTgwMjExX0FERFJfTEVOXTsKK307CisKKyNkZWZpbmUgTVdMOEtfRU5BQkxFX1JYX01VTFRJQ0FTVCAweDAwMEYKK3N0YXRpYyBpbnQgbXdsOGtfY21kX21hY19tdWx0aWNhc3RfYWRyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCQlpbnQgbWNfY291bnQsCisJCQkJCXN0cnVjdCBkZXZfYWRkcl9saXN0ICptY2xpc3QpCit7CisJc3RydWN0IG13bDhrX2NtZF9tYWNfbXVsdGljYXN0X2FkciAqY21kOworCWludCBpbmRleCA9IDA7CisJaW50IHJjOworCWludCBzaXplID0gc2l6ZW9mKCpjbWQpICsgKChtY19jb3VudCAtIDEpICogSUVFRTgwMjExX0FERFJfTEVOKTsKKwljbWQgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCWlmIChjbWQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX01BQ19NVUxUSUNBU1RfQURSKTsKKwljbWQtPmhlYWRlci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplKTsKKwljbWQtPmFjdGlvbiA9IGNwdV90b19sZTE2KE1XTDhLX0VOQUJMRV9SWF9NVUxUSUNBU1QpOworCWNtZC0+bnVtYWRkciA9IGNwdV90b19sZTE2KG1jX2NvdW50KTsKKwl3aGlsZSAoKGluZGV4IDwgbWNfY291bnQpICYmIG1jbGlzdCkgeworCQlpZiAobWNsaXN0LT5kYV9hZGRybGVuICE9IElFRUU4MDIxMV9BRERSX0xFTikgeworCQkJcmMgPSAtRUlOVkFMOworCQkJZ290byBtd2w4a19jbWRfbWFjX211bHRpY2FzdF9hZHJfZXhpdDsKKwkJfQorCQltZW1jcHkoY21kLT5hZGRyW2luZGV4XSwgbWNsaXN0LT5kYV9hZGRyLCBJRUVFODAyMTFfQUREUl9MRU4pOworCQlpbmRleCsrOworCQltY2xpc3QgPSBtY2xpc3QtPm5leHQ7CisJfQorCisJcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKKworbXdsOGtfY21kX21hY19tdWx0aWNhc3RfYWRyX2V4aXQ6CisJa2ZyZWUoY21kKTsKKwlyZXR1cm4gcmM7Cit9CisKKy8qCisgKiBDTURfODAyXzExX0dFVF9TVEFULgorICovCitzdHJ1Y3QgbXdsOGtfY21kXzgwMl8xMV9nZXRfc3RhdCB7CisJc3RydWN0IG13bDhrX2NtZF9wa3QgaGVhZGVyOworCV9fbGUxNiBhY3Rpb247CisJX19sZTMyIHN0YXRzWzY0XTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUgTVdMOEtfU1RBVF9BQ0tfRkFJTFVSRQk5CisjZGVmaW5lIE1XTDhLX1NUQVRfUlRTX0ZBSUxVUkUJMTIKKyNkZWZpbmUgTVdMOEtfU1RBVF9GQ1NfRVJST1IJMjQKKyNkZWZpbmUgTVdMOEtfU1RBVF9SVFNfU1VDQ0VTUwkxMQorCitzdGF0aWMgaW50IG13bDhrX2NtZF84MDJfMTFfZ2V0X3N0YXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJc3RydWN0IGllZWU4MDIxMV9sb3dfbGV2ZWxfc3RhdHMgKnN0YXRzKQoreworCXN0cnVjdCBtd2w4a19jbWRfODAyXzExX2dldF9zdGF0ICpjbWQ7CisJaW50IHJjOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmIChjbWQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX0dFVF9TVEFUKTsKKwljbWQtPmhlYWRlci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOworCWNtZC0+YWN0aW9uID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX0dFVCk7CisKKwlyYyA9IG13bDhrX3Bvc3RfY21kKGh3LCAmY21kLT5oZWFkZXIpOworCWlmICghcmMpIHsKKwkJc3RhdHMtPmRvdDExQUNLRmFpbHVyZUNvdW50ID0KKwkJCWxlMzJfdG9fY3B1KGNtZC0+c3RhdHNbTVdMOEtfU1RBVF9BQ0tfRkFJTFVSRV0pOworCQlzdGF0cy0+ZG90MTFSVFNGYWlsdXJlQ291bnQgPQorCQkJbGUzMl90b19jcHUoY21kLT5zdGF0c1tNV0w4S19TVEFUX1JUU19GQUlMVVJFXSk7CisJCXN0YXRzLT5kb3QxMUZDU0Vycm9yQ291bnQgPQorCQkJbGUzMl90b19jcHUoY21kLT5zdGF0c1tNV0w4S19TVEFUX0ZDU19FUlJPUl0pOworCQlzdGF0cy0+ZG90MTFSVFNTdWNjZXNzQ291bnQgPQorCQkJbGUzMl90b19jcHUoY21kLT5zdGF0c1tNV0w4S19TVEFUX1JUU19TVUNDRVNTXSk7CisJfQorCWtmcmVlKGNtZCk7CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qCisgKiBDTURfODAyXzExX1JBRElPX0NPTlRST0wuCisgKi8KK3N0cnVjdCBtd2w4a19jbWRfODAyXzExX3JhZGlvX2NvbnRyb2wgeworCXN0cnVjdCBtd2w4a19jbWRfcGt0IGhlYWRlcjsKKwlfX2xlMTYgYWN0aW9uOworCV9fbGUxNiBjb250cm9sOworCV9fbGUxNiByYWRpb19vbjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0YXRpYyBpbnQgbXdsOGtfY21kXzgwMl8xMV9yYWRpb19jb250cm9sKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgZW5hYmxlKQoreworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IG13bDhrX2NtZF84MDJfMTFfcmFkaW9fY29udHJvbCAqY21kOworCWludCByYzsKKworCWlmICgoKGVuYWJsZSAmIE1XTDhLX1JBRElPX0VOQUJMRSkgPT0gcHJpdi0+cmFkaW9fc3RhdGUpICYmCisJICAgICEoZW5hYmxlICYgTVdMOEtfUkFESU9fRk9SQ0UpKQorCQlyZXR1cm4gMDsKKworCWVuYWJsZSAmPSBNV0w4S19SQURJT19FTkFCTEU7CisKKwljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNtZCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNtZC0+aGVhZGVyLmNvZGUgPSBjcHVfdG9fbGUxNihNV0w4S19DTURfUkFESU9fQ09OVFJPTCk7CisJY21kLT5oZWFkZXIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKKwljbWQtPmFjdGlvbiA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9TRVQpOworCWNtZC0+Y29udHJvbCA9IGNwdV90b19sZTE2KHByaXYtPnJhZGlvX3ByZWFtYmxlKTsKKwljbWQtPnJhZGlvX29uID0gY3B1X3RvX2xlMTYoZW5hYmxlID8gMHgwMDAxIDogMHgwMDAwKTsKKworCXJjID0gbXdsOGtfcG9zdF9jbWQoaHcsICZjbWQtPmhlYWRlcik7CisJa2ZyZWUoY21kKTsKKworCWlmICghcmMpCisJCXByaXYtPnJhZGlvX3N0YXRlID0gZW5hYmxlOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50Cittd2w4a19zZXRfcmFkaW9fcHJlYW1ibGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGJvb2wgc2hvcnRfcHJlYW1ibGUpCit7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXY7CisKKwlpZiAoaHcgPT0gTlVMTCB8fCBody0+cHJpdiA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlwcml2ID0gaHctPnByaXY7CisKKwlwcml2LT5yYWRpb19wcmVhbWJsZSA9IChzaG9ydF9wcmVhbWJsZSA/CisJCU1XTDhLX1JBRElPX1NIT1JUX1BSRUFNQkxFIDoKKwkJTVdMOEtfUkFESU9fTE9OR19QUkVBTUJMRSk7CisKKwlyZXR1cm4gbXdsOGtfY21kXzgwMl8xMV9yYWRpb19jb250cm9sKGh3LAorCQkJTVdMOEtfUkFESU9fRU5BQkxFIHwgTVdMOEtfUkFESU9fRk9SQ0UpOworfQorCisvKgorICogQ01EXzgwMl8xMV9SRl9UWF9QT1dFUi4KKyAqLworI2RlZmluZSBNV0w4S19UWF9QT1dFUl9MRVZFTF9UT1RBTAk4CisKK3N0cnVjdCBtd2w4a19jbWRfODAyXzExX3JmX3R4X3Bvd2VyIHsKKwlzdHJ1Y3QgbXdsOGtfY21kX3BrdCBoZWFkZXI7CisJX19sZTE2IGFjdGlvbjsKKwlfX2xlMTYgc3VwcG9ydF9sZXZlbDsKKwlfX2xlMTYgY3VycmVudF9sZXZlbDsKKwlfX2xlMTYgcmVzZXJ2ZWQ7CisJX19sZTE2IHBvd2VyX2xldmVsX2xpc3RbTVdMOEtfVFhfUE9XRVJfTEVWRUxfVE9UQUxdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RhdGljIGludCBtd2w4a19jbWRfODAyXzExX3JmX3R4X3Bvd2VyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgZEJtKQoreworCXN0cnVjdCBtd2w4a19jbWRfODAyXzExX3JmX3R4X3Bvd2VyICpjbWQ7CisJaW50IHJjOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmIChjbWQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1JGX1RYX1BPV0VSKTsKKwljbWQtPmhlYWRlci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOworCWNtZC0+YWN0aW9uID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1NFVCk7CisJY21kLT5zdXBwb3J0X2xldmVsID0gY3B1X3RvX2xlMTYoZEJtKTsKKworCXJjID0gbXdsOGtfcG9zdF9jbWQoaHcsICZjbWQtPmhlYWRlcik7CisJa2ZyZWUoY21kKTsKKworCXJldHVybiByYzsKK30KKworLyoKKyAqIENNRF9TRVRfUFJFX1NDQU4uCisgKi8KK3N0cnVjdCBtd2w4a19jbWRfc2V0X3ByZV9zY2FuIHsKKwlzdHJ1Y3QgbXdsOGtfY21kX3BrdCBoZWFkZXI7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdGF0aWMgaW50IG13bDhrX2NtZF9zZXRfcHJlX3NjYW4oc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IG13bDhrX2NtZF9zZXRfcHJlX3NjYW4gKmNtZDsKKwlpbnQgcmM7CisKKwljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNtZCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNtZC0+aGVhZGVyLmNvZGUgPSBjcHVfdG9fbGUxNihNV0w4S19DTURfU0VUX1BSRV9TQ0FOKTsKKwljbWQtPmhlYWRlci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOworCisJcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKKwlrZnJlZShjbWQpOworCisJcmV0dXJuIHJjOworfQorCisvKgorICogQ01EX1NFVF9QT1NUX1NDQU4uCisgKi8KK3N0cnVjdCBtd2w4a19jbWRfc2V0X3Bvc3Rfc2NhbiB7CisJc3RydWN0IG13bDhrX2NtZF9wa3QgaGVhZGVyOworCV9fbGUzMiBpc2lic3M7CisJX191OCBic3NpZFtJRUVFODAyMTFfQUREUl9MRU5dOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RhdGljIGludAorbXdsOGtfY21kX3NldF9wb3N0X3NjYW4oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIF9fdTggbWFjW0lFRUU4MDIxMV9BRERSX0xFTl0pCit7CisJc3RydWN0IG13bDhrX2NtZF9zZXRfcG9zdF9zY2FuICpjbWQ7CisJaW50IHJjOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmIChjbWQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1NFVF9QT1NUX1NDQU4pOworCWNtZC0+aGVhZGVyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZigqY21kKSk7CisJY21kLT5pc2lic3MgPSAwOworCW1lbWNweShjbWQtPmJzc2lkLCBtYWMsIElFRUU4MDIxMV9BRERSX0xFTik7CisKKwlyYyA9IG13bDhrX3Bvc3RfY21kKGh3LCAmY21kLT5oZWFkZXIpOworCWtmcmVlKGNtZCk7CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qCisgKiBDTURfU0VUX1JGX0NIQU5ORUwuCisgKi8KK3N0cnVjdCBtd2w4a19jbWRfc2V0X3JmX2NoYW5uZWwgeworCXN0cnVjdCBtd2w4a19jbWRfcGt0IGhlYWRlcjsKKwlfX2xlMTYgYWN0aW9uOworCV9fdTggY3VycmVudF9jaGFubmVsOworCV9fbGUzMiBjaGFubmVsX2ZsYWdzOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RhdGljIGludCBtd2w4a19jbWRfc2V0X3JmX2NoYW5uZWwoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCkKK3sKKwlzdHJ1Y3QgbXdsOGtfY21kX3NldF9yZl9jaGFubmVsICpjbWQ7CisJaW50IHJjOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmIChjbWQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1NFVF9SRl9DSEFOTkVMKTsKKwljbWQtPmhlYWRlci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOworCWNtZC0+YWN0aW9uID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1NFVCk7CisJY21kLT5jdXJyZW50X2NoYW5uZWwgPSBjaGFubmVsLT5od192YWx1ZTsKKwlpZiAoY2hhbm5lbC0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haKQorCQljbWQtPmNoYW5uZWxfZmxhZ3MgPSBjcHVfdG9fbGUzMigweDAwMDAwMDgxKTsKKwllbHNlCisJCWNtZC0+Y2hhbm5lbF9mbGFncyA9IGNwdV90b19sZTMyKDB4MDAwMDAwMDApOworCisJcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKKwlrZnJlZShjbWQpOworCisJcmV0dXJuIHJjOworfQorCisvKgorICogQ01EX1NFVF9TTE9ULgorICovCitzdHJ1Y3QgbXdsOGtfY21kX3NldF9zbG90IHsKKwlzdHJ1Y3QgbXdsOGtfY21kX3BrdCBoZWFkZXI7CisJX19sZTE2IGFjdGlvbjsKKwlfX3U4IHNob3J0X3Nsb3Q7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdGF0aWMgaW50IG13bDhrX2NtZF9zZXRfc2xvdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgaW50IHNsb3RfdGltZSkKK3sKKwlzdHJ1Y3QgbXdsOGtfY21kX3NldF9zbG90ICpjbWQ7CisJaW50IHJjOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmIChjbWQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1NFVF9TTE9UKTsKKwljbWQtPmhlYWRlci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOworCWNtZC0+YWN0aW9uID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1NFVCk7CisJY21kLT5zaG9ydF9zbG90ID0gc2xvdF90aW1lID09IE1XTDhLX1NIT1JUX1NMT1RUSU1FID8gMSA6IDA7CisKKwlyYyA9IG13bDhrX3Bvc3RfY21kKGh3LCAmY21kLT5oZWFkZXIpOworCWtmcmVlKGNtZCk7CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qCisgKiBDTURfTUlNT19DT05GSUcuCisgKi8KK3N0cnVjdCBtd2w4a19jbWRfbWltb19jb25maWcgeworCXN0cnVjdCBtd2w4a19jbWRfcGt0IGhlYWRlcjsKKwlfX2xlMzIgYWN0aW9uOworCV9fdTggcnhfYW50ZW5uYV9tYXA7CisJX191OCB0eF9hbnRlbm5hX21hcDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0YXRpYyBpbnQgbXdsOGtfY21kX21pbW9fY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBfX3U4IHJ4LCBfX3U4IHR4KQoreworCXN0cnVjdCBtd2w4a19jbWRfbWltb19jb25maWcgKmNtZDsKKwlpbnQgcmM7CisKKwljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNtZCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNtZC0+aGVhZGVyLmNvZGUgPSBjcHVfdG9fbGUxNihNV0w4S19DTURfTUlNT19DT05GSUcpOworCWNtZC0+aGVhZGVyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZigqY21kKSk7CisJY21kLT5hY3Rpb24gPSBjcHVfdG9fbGUzMigodTMyKU1XTDhLX0NNRF9TRVQpOworCWNtZC0+cnhfYW50ZW5uYV9tYXAgPSByeDsKKwljbWQtPnR4X2FudGVubmFfbWFwID0gdHg7CisKKwlyYyA9IG13bDhrX3Bvc3RfY21kKGh3LCAmY21kLT5oZWFkZXIpOworCWtmcmVlKGNtZCk7CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qCisgKiBDTURfRU5BQkxFX1NOSUZGRVIuCisgKi8KK3N0cnVjdCBtd2w4a19jbWRfZW5hYmxlX3NuaWZmZXIgeworCXN0cnVjdCBtd2w4a19jbWRfcGt0IGhlYWRlcjsKKwlfX2xlMzIgYWN0aW9uOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RhdGljIGludCBtd2w4a19lbmFibGVfc25pZmZlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgYm9vbCBlbmFibGUpCit7CisJc3RydWN0IG13bDhrX2NtZF9lbmFibGVfc25pZmZlciAqY21kOworCWludCByYzsKKworCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY21kID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJY21kLT5oZWFkZXIuY29kZSA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9FTkFCTEVfU05JRkZFUik7CisJY21kLT5oZWFkZXIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKKwljbWQtPmFjdGlvbiA9IGVuYWJsZSA/IGNwdV90b19sZTMyKCh1MzIpTVdMOEtfQ01EX1NFVCkgOiAwOworCisJcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKKwlrZnJlZShjbWQpOworCisJcmV0dXJuIHJjOworfQorCisvKgorICogQ01EX1NFVF9SQVRFX0FEQVBUX01PREUuCisgKi8KK3N0cnVjdCBtd2w4a19jbWRfc2V0X3JhdGVfYWRhcHRfbW9kZSB7CisJc3RydWN0IG13bDhrX2NtZF9wa3QgaGVhZGVyOworCV9fbGUxNiBhY3Rpb247CisJX19sZTE2IG1vZGU7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdGF0aWMgaW50IG13bDhrX2NtZF9zZXRyYXRlYWRhcHRtb2RlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBfX3UxNiBtb2RlKQoreworCXN0cnVjdCBtd2w4a19jbWRfc2V0X3JhdGVfYWRhcHRfbW9kZSAqY21kOworCWludCByYzsKKworCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY21kID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJY21kLT5oZWFkZXIuY29kZSA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9TRVRfUkFURUFEQVBUX01PREUpOworCWNtZC0+aGVhZGVyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZigqY21kKSk7CisJY21kLT5hY3Rpb24gPSBjcHVfdG9fbGUxNihNV0w4S19DTURfU0VUKTsKKwljbWQtPm1vZGUgPSBjcHVfdG9fbGUxNihtb2RlKTsKKworCXJjID0gbXdsOGtfcG9zdF9jbWQoaHcsICZjbWQtPmhlYWRlcik7CisJa2ZyZWUoY21kKTsKKworCXJldHVybiByYzsKK30KKworLyoKKyAqIENNRF9TRVRfV01NX01PREUuCisgKi8KK3N0cnVjdCBtd2w4a19jbWRfc2V0X3dtbSB7CisJc3RydWN0IG13bDhrX2NtZF9wa3QgaGVhZGVyOworCV9fbGUxNiBhY3Rpb247Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdGF0aWMgaW50IG13bDhrX3NldF93bW0oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGJvb2wgZW5hYmxlKQoreworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IG13bDhrX2NtZF9zZXRfd21tICpjbWQ7CisJaW50IHJjOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmIChjbWQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1NFVF9XTU1fTU9ERSk7CisJY21kLT5oZWFkZXIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKKwljbWQtPmFjdGlvbiA9IGVuYWJsZSA/IGNwdV90b19sZTE2KE1XTDhLX0NNRF9TRVQpIDogMDsKKworCXJjID0gbXdsOGtfcG9zdF9jbWQoaHcsICZjbWQtPmhlYWRlcik7CisJa2ZyZWUoY21kKTsKKworCWlmICghcmMpCisJCXByaXYtPndtbV9tb2RlID0gZW5hYmxlOworCisJcmV0dXJuIHJjOworfQorCisvKgorICogQ01EX1NFVF9SVFNfVEhSRVNIT0xELgorICovCitzdHJ1Y3QgbXdsOGtfY21kX3J0c190aHJlc2hvbGQgeworCXN0cnVjdCBtd2w4a19jbWRfcGt0IGhlYWRlcjsKKwlfX2xlMTYgYWN0aW9uOworCV9fbGUxNiB0aHJlc2hvbGQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdGF0aWMgaW50IG13bDhrX3J0c190aHJlc2hvbGQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkgICAgICAgdTE2IGFjdGlvbiwgdTE2ICp0aHJlc2hvbGQpCit7CisJc3RydWN0IG13bDhrX2NtZF9ydHNfdGhyZXNob2xkICpjbWQ7CisJaW50IHJjOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmIChjbWQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1JUU19USFJFU0hPTEQpOworCWNtZC0+aGVhZGVyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZigqY21kKSk7CisJY21kLT5hY3Rpb24gPSBjcHVfdG9fbGUxNihhY3Rpb24pOworCWNtZC0+dGhyZXNob2xkID0gY3B1X3RvX2xlMTYoKnRocmVzaG9sZCk7CisKKwlyYyA9IG13bDhrX3Bvc3RfY21kKGh3LCAmY21kLT5oZWFkZXIpOworCWtmcmVlKGNtZCk7CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qCisgKiBDTURfU0VUX0VEQ0FfUEFSQU1TLgorICovCitzdHJ1Y3QgbXdsOGtfY21kX3NldF9lZGNhX3BhcmFtcyB7CisJc3RydWN0IG13bDhrX2NtZF9wa3QgaGVhZGVyOworCisJLyogU2VlIE1XTDhLX1NFVF9FRENBX1hYWCBiZWxvdyAqLworCV9fbGUxNiBhY3Rpb247CisKKwkvKiBUWCBvcHBvcnR1bml0eSBpbiB1bml0cyBvZiAzMiB1cyAqLworCV9fbGUxNiB0eG9wOworCisJLyogTG9nIGV4cG9uZW50IG9mIG1heCBjb250ZW50aW9uIHBlcmlvZDogMC4uLjE1Ki8KKwlfX3U4IGxvZ19jd19tYXg7CisKKwkvKiBMb2cgZXhwb25lbnQgb2YgbWluIGNvbnRlbnRpb24gcGVyaW9kOiAwLi4uMTUgKi8KKwlfX3U4IGxvZ19jd19taW47CisKKwkvKiBBZGFwdGl2ZSBpbnRlcmZyYW1lIHNwYWNpbmcgaW4gdW5pdHMgb2YgMzJ1cyAqLworCV9fdTggYWlmczsKKworCS8qIFRYIHF1ZXVlIHRvIGNvbmZpZ3VyZSAqLworCV9fdTggdHhxOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2RlZmluZSBNV0w4S19HRVRfRURDQV9BTEwJMAorI2RlZmluZSBNV0w4S19TRVRfRURDQV9DVwkweDAxCisjZGVmaW5lIE1XTDhLX1NFVF9FRENBX1RYT1AJMHgwMgorI2RlZmluZSBNV0w4S19TRVRfRURDQV9BSUZTCTB4MDQKKworI2RlZmluZSBNV0w4S19TRVRfRURDQV9BTEwJKE1XTDhLX1NFVF9FRENBX0NXIHwgXAorCQkJCSBNV0w4S19TRVRfRURDQV9UWE9QIHwgXAorCQkJCSBNV0w4S19TRVRfRURDQV9BSUZTKQorCitzdGF0aWMgaW50Cittd2w4a19zZXRfZWRjYV9wYXJhbXMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIF9fdTggcW51bSwKKwkJX191MTYgY3dfbWluLCBfX3UxNiBjd19tYXgsCisJCV9fdTggYWlmcywgX191MTYgdHhvcCkKK3sKKwlzdHJ1Y3QgbXdsOGtfY21kX3NldF9lZGNhX3BhcmFtcyAqY21kOworCXUzMiBsb2dfY3dfbWluLCBsb2dfY3dfbWF4OworCWludCByYzsKKworCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY21kID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJbG9nX2N3X21pbiA9IGlsb2cyKGN3X21pbisxKTsKKwlsb2dfY3dfbWF4ID0gaWxvZzIoY3dfbWF4KzEpOworCWNtZC0+aGVhZGVyLmNvZGUgPSBjcHVfdG9fbGUxNihNV0w4S19DTURfU0VUX0VEQ0FfUEFSQU1TKTsKKwljbWQtPmhlYWRlci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOworCisJY21kLT5hY3Rpb24gPSBjcHVfdG9fbGUxNihNV0w4S19TRVRfRURDQV9BTEwpOworCWNtZC0+dHhvcCA9IGNwdV90b19sZTE2KHR4b3ApOworCWNtZC0+bG9nX2N3X21heCA9ICh1OClsb2dfY3dfbWF4OworCWNtZC0+bG9nX2N3X21pbiA9ICh1OClsb2dfY3dfbWluOworCWNtZC0+YWlmcyA9IGFpZnM7CisJY21kLT50eHEgPSBxbnVtOworCisJcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKKwlrZnJlZShjbWQpOworCisJcmV0dXJuIHJjOworfQorCisvKgorICogQ01EX0ZJTkFMSVpFX0pPSU4uCisgKi8KKworLyogRkogYmVhY29uIGJ1ZmZlciBzaXplIGlzIGNvbXBpbGVkIGludG8gdGhlIGZpcm13YXJlLiAgKi8KKyNkZWZpbmUgTVdMOEtfRkpfQkVBQ09OX01BWExFTgkxMjgKKworc3RydWN0IG13bDhrX2NtZF9maW5hbGl6ZV9qb2luIHsKKwlzdHJ1Y3QgbXdsOGtfY21kX3BrdCBoZWFkZXI7CisJX19sZTMyIHNsZWVwX2ludGVydmFsOwkvKiBOdW1iZXIgb2YgYmVhY29uIHBlcmlvZHMgdG8gc2xlZXAgKi8KKwlfX3U4IGJlYWNvbl9kYXRhW01XTDhLX0ZKX0JFQUNPTl9NQVhMRU5dOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RhdGljIGludCBtd2w4a19maW5hbGl6ZV9qb2luKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB2b2lkICpmcmFtZSwKKwkJCQlfX3UxNiBmcmFtZWxlbiwgX191MTYgZHRpbSkKK3sKKwlzdHJ1Y3QgbXdsOGtfY21kX2ZpbmFsaXplX2pvaW4gKmNtZDsKKwlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKnBheWxvYWQgPSBmcmFtZTsKKwl1MTYgaGRybGVuOworCXUzMiBwYXlsb2FkX2xlbjsKKwlpbnQgcmM7CisKKwlpZiAoZnJhbWUgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNtZCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNtZC0+aGVhZGVyLmNvZGUgPSBjcHVfdG9fbGUxNihNV0w4S19DTURfU0VUX0ZJTkFMSVpFX0pPSU4pOworCWNtZC0+aGVhZGVyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZigqY21kKSk7CisKKwlpZiAoZHRpbSkKKwkJY21kLT5zbGVlcF9pbnRlcnZhbCA9IGNwdV90b19sZTMyKGR0aW0pOworCWVsc2UKKwkJY21kLT5zbGVlcF9pbnRlcnZhbCA9IGNwdV90b19sZTMyKDEpOworCisJaGRybGVuID0gaWVlZTgwMjExX2hkcmxlbihwYXlsb2FkLT5mcmFtZV9jb250cm9sKTsKKworCXBheWxvYWRfbGVuID0gZnJhbWVsZW4gPiBoZHJsZW4gPyBmcmFtZWxlbiAtIGhkcmxlbiA6IDA7CisKKwkvKiBYWFggVEJEIE1pZ2h0IGp1c3QgaGF2ZSB0byBhYm9ydCBhbmQgcmV0dXJuIGFuIGVycm9yICovCisJaWYgKHBheWxvYWRfbGVuID4gTVdMOEtfRkpfQkVBQ09OX01BWExFTikKKwkJcHJpbnRrKEtFUk5fRVJSICIlcygpOiBXQVJOSU5HOiBJbmNvbXBsZXRlIGJlYWNvbiAiCisJCQkic2VudCB0byBmaXJtd2FyZS4gU3o9JXUgTUFYPSV1XG4iLCBfX2Z1bmNfXywKKwkJCXBheWxvYWRfbGVuLCBNV0w4S19GSl9CRUFDT05fTUFYTEVOKTsKKworCXBheWxvYWRfbGVuID0gcGF5bG9hZF9sZW4gPiBNV0w4S19GSl9CRUFDT05fTUFYTEVOID8KKwkJCQlNV0w4S19GSl9CRUFDT05fTUFYTEVOIDogcGF5bG9hZF9sZW47CisKKwlpZiAocGF5bG9hZCAmJiBwYXlsb2FkX2xlbikKKwkJbWVtY3B5KGNtZC0+YmVhY29uX2RhdGEsICZwYXlsb2FkLT51LmJlYWNvbiwgcGF5bG9hZF9sZW4pOworCisJcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKKwlrZnJlZShjbWQpOworCXJldHVybiByYzsKK30KKworLyoKKyAqIENNRF9VUERBVEVfU1RBREIuCisgKi8KK3N0cnVjdCBtd2w4a19jbWRfdXBkYXRlX3N0YV9kYiB7CisJc3RydWN0IG13bDhrX2NtZF9wa3QgaGVhZGVyOworCisJLyogU2VlIFNUQURCX0FDVElPTl9UWVBFICovCisJX19sZTMyCWFjdGlvbjsKKworCS8qIFBlZXIgTUFDIGFkZHJlc3MgKi8KKwlfX3U4CXBlZXJfYWRkcltJRUVFODAyMTFfQUREUl9MRU5dOworCisJX19sZTMyCXJlc2VydmVkOworCisJLyogUGVlciBpbmZvIC0gdmFsaWQgZHVyaW5nIGFkZC91cGRhdGUuICAqLworCXN0cnVjdCBwZWVyX2NhcGFiaWxpdHlfaW5mbwlwZWVyX2luZm87Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdGF0aWMgaW50IG13bDhrX2NtZF91cGRhdGVfc3RhX2RiKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLCBfX3UzMiBhY3Rpb24pCit7CisJc3RydWN0IG13bDhrX3ZpZiAqbXZfdmlmID0gTVdMOEtfVklGKHZpZik7CisJc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqaW5mbyA9ICZtdl92aWYtPmJzc19pbmZvOworCXN0cnVjdCBtd2w4a19jbWRfdXBkYXRlX3N0YV9kYiAqY21kOworCXN0cnVjdCBwZWVyX2NhcGFiaWxpdHlfaW5mbyAqcGVlcl9pbmZvOworCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqYml0cmF0ZXMgPSBtdl92aWYtPmxlZ2FjeV9yYXRlczsKKwlERUNMQVJFX01BQ19CVUYobWFjKTsKKwlpbnQgcmM7CisJX191OCBjb3VudCwgKnJhdGVzOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmIChjbWQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1VQREFURV9TVEFEQik7CisJY21kLT5oZWFkZXIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKKworCWNtZC0+YWN0aW9uID0gY3B1X3RvX2xlMzIoYWN0aW9uKTsKKwlwZWVyX2luZm8gPSAmY21kLT5wZWVyX2luZm87CisJbWVtY3B5KGNtZC0+cGVlcl9hZGRyLCBtdl92aWYtPmJzc2lkLCBJRUVFODAyMTFfQUREUl9MRU4pOworCisJc3dpdGNoIChhY3Rpb24pIHsKKwljYXNlIE1XTDhLX1NUQV9EQl9BRERfRU5UUlk6CisJY2FzZSBNV0w4S19TVEFfREJfTU9ESUZZX0VOVFJZOgorCQkvKiBCdWlsZCBwZWVyX2luZm8gYmxvY2sgKi8KKwkJcGVlcl9pbmZvLT5wZWVyX3R5cGUgPSBNV0w4S19QRUVSX1RZUEVfQUNDRVNTUE9JTlQ7CisJCXBlZXJfaW5mby0+YmFzaWNfY2FwcyA9IGNwdV90b19sZTE2KGluZm8tPmFzc29jX2NhcGFiaWxpdHkpOworCQlwZWVyX2luZm8tPmludGVyb3AgPSAxOworCQlwZWVyX2luZm8tPmFtc2R1X2VuYWJsZWQgPSAwOworCisJCXJhdGVzID0gcGVlcl9pbmZvLT5sZWdhY3lfcmF0ZXM7CisJCWZvciAoY291bnQgPSAwIDsgY291bnQgPCBtdl92aWYtPmxlZ2FjeV9ucmF0ZXM7IGNvdW50KyspCisJCQlyYXRlc1tjb3VudF0gPSBiaXRyYXRlc1tjb3VudF0uaHdfdmFsdWU7CisKKwkJcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKKwkJaWYgKHJjID09IDApCisJCQltdl92aWYtPnBlZXJfaWQgPSBwZWVyX2luZm8tPnN0YXRpb25faWQ7CisKKwkJYnJlYWs7CisKKwljYXNlIE1XTDhLX1NUQV9EQl9ERUxfRU5UUlk6CisJY2FzZSBNV0w4S19TVEFfREJfRkxVU0g6CisJZGVmYXVsdDoKKwkJcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKKwkJaWYgKHJjID09IDApCisJCQltdl92aWYtPnBlZXJfaWQgPSAwOworCQlicmVhazsKKwl9CisJa2ZyZWUoY21kKTsKKworCXJldHVybiByYzsKK30KKworLyoKKyAqIENNRF9TRVRfQUlELgorICovCisjZGVmaW5lIElFRUU4MDIxMV9PUE1PREVfRElTQUJMRUQJCQkweDAwCisjZGVmaW5lIElFRUU4MDIxMV9PUE1PREVfTk9OX01FTUJFUl9QUk9UX01PREUJCTB4MDEKKyNkZWZpbmUgSUVFRTgwMjExX09QTU9ERV9PTkVfMjBNSFpfU1RBX1BST1RfTU9ERQkweDAyCisjZGVmaW5lIElFRUU4MDIxMV9PUE1PREVfSFRNSVhFRF9QUk9UX01PREUJCTB4MDMKKworI2RlZmluZSBNV0w4S19SQVRFX0lOREVYX01BWF9BUlJBWQkJCTE0CisKKyNkZWZpbmUgTVdMOEtfRlJBTUVfUFJPVF9ESVNBQkxFRAkJCTB4MDAKKyNkZWZpbmUgTVdMOEtfRlJBTUVfUFJPVF8xMUcJCQkJMHgwNworI2RlZmluZSBNV0w4S19GUkFNRV9QUk9UXzExTl9IVF80ME1IWl9PTkxZCQkweDAyCisjZGVmaW5lIE1XTDhLX0ZSQU1FX1BST1RfMTFOX0hUX0FMTAkJCTB4MDYKKyNkZWZpbmUgTVdMOEtfRlJBTUVfUFJPVF9NQVNLCQkJCTB4MDcKKworc3RydWN0IG13bDhrX2NtZF91cGRhdGVfc2V0X2FpZCB7CisJc3RydWN0CW13bDhrX2NtZF9wa3QgaGVhZGVyOworCV9fbGUxNglhaWQ7CisKKwkgLyogQVAncyBNQUMgYWRkcmVzcyAoQlNTSUQpICovCisJX191OAlic3NpZFtJRUVFODAyMTFfQUREUl9MRU5dOworCV9fbGUxNglwcm90ZWN0aW9uX21vZGU7CisJX191OAlzdXBwX3JhdGVzW01XTDhLX1JBVEVfSU5ERVhfTUFYX0FSUkFZXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0YXRpYyBpbnQgbXdsOGtfY21kX3NldF9haWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCit7CisJc3RydWN0IG13bDhrX3ZpZiAqbXZfdmlmID0gTVdMOEtfVklGKHZpZik7CisJc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqaW5mbyA9ICZtdl92aWYtPmJzc19pbmZvOworCXN0cnVjdCBtd2w4a19jbWRfdXBkYXRlX3NldF9haWQgKmNtZDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKmJpdHJhdGVzID0gbXZfdmlmLT5sZWdhY3lfcmF0ZXM7CisJaW50IGNvdW50OworCXUxNiBwcm90X21vZGU7CisJaW50IHJjOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmIChjbWQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1NFVF9BSUQpOworCWNtZC0+aGVhZGVyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZigqY21kKSk7CisJY21kLT5haWQgPSBjcHVfdG9fbGUxNihpbmZvLT5haWQpOworCisJbWVtY3B5KGNtZC0+YnNzaWQsIG12X3ZpZi0+YnNzaWQsIElFRUU4MDIxMV9BRERSX0xFTik7CisKKwlwcm90X21vZGUgPSBNV0w4S19GUkFNRV9QUk9UX0RJU0FCTEVEOworCisJaWYgKGluZm8tPnVzZV9jdHNfcHJvdCkgeworCQlwcm90X21vZGUgPSBNV0w4S19GUkFNRV9QUk9UXzExRzsKKwl9IGVsc2UgeworCQlzd2l0Y2ggKGluZm8tPmh0Lm9wZXJhdGlvbl9tb2RlICYKKwkJCUlFRUU4MDIxMV9IVF9PUF9NT0RFX1BST1RFQ1RJT04pIHsKKwkJY2FzZSBJRUVFODAyMTFfSFRfT1BfTU9ERV9QUk9URUNUSU9OXzIwTUhaOgorCQkJcHJvdF9tb2RlID0gTVdMOEtfRlJBTUVfUFJPVF8xMU5fSFRfNDBNSFpfT05MWTsKKwkJCWJyZWFrOworCQljYXNlIElFRUU4MDIxMV9IVF9PUF9NT0RFX1BST1RFQ1RJT05fTk9OSFRfTUlYRUQ6CisJCQlwcm90X21vZGUgPSBNV0w4S19GUkFNRV9QUk9UXzExTl9IVF9BTEw7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByb3RfbW9kZSA9IE1XTDhLX0ZSQU1FX1BST1RfRElTQUJMRUQ7CisJCQlicmVhazsKKwkJfQorCX0KKworCWNtZC0+cHJvdGVjdGlvbl9tb2RlID0gY3B1X3RvX2xlMTYocHJvdF9tb2RlKTsKKworCWZvciAoY291bnQgPSAwOyBjb3VudCA8IG12X3ZpZi0+bGVnYWN5X25yYXRlczsgY291bnQrKykKKwkJY21kLT5zdXBwX3JhdGVzW2NvdW50XSA9IGJpdHJhdGVzW2NvdW50XS5od192YWx1ZTsKKworCXJjID0gbXdsOGtfcG9zdF9jbWQoaHcsICZjbWQtPmhlYWRlcik7CisJa2ZyZWUoY21kKTsKKworCXJldHVybiByYzsKK30KKworLyoKKyAqIENNRF9TRVRfUkFURS4KKyAqLworc3RydWN0IG13bDhrX2NtZF91cGRhdGVfcmF0ZXNldCB7CisJc3RydWN0CW13bDhrX2NtZF9wa3QgaGVhZGVyOworCV9fdTgJbGVnYWN5X3JhdGVzW01XTDhLX1JBVEVfSU5ERVhfTUFYX0FSUkFZXTsKKworCS8qIEJpdG1hcCBmb3Igc3VwcG9ydGVkIE1DUyBjb2Rlcy4gICovCisJX191OAltY3Nfc2V0W01XTDhLX0lFRUVfTEVHQUNZX0RBVEFfUkFURVNdOworCV9fdTgJcmVzZXJ2ZWRbTVdMOEtfSUVFRV9MRUdBQ1lfREFUQV9SQVRFU107Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdGF0aWMgaW50IG13bDhrX3VwZGF0ZV9yYXRlc2V0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQoreworCXN0cnVjdCBtd2w4a192aWYgKm12X3ZpZiA9IE1XTDhLX1ZJRih2aWYpOworCXN0cnVjdCBtd2w4a19jbWRfdXBkYXRlX3JhdGVzZXQgKmNtZDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKmJpdHJhdGVzID0gbXZfdmlmLT5sZWdhY3lfcmF0ZXM7CisJaW50IGNvdW50OworCWludCByYzsKKworCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY21kID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJY21kLT5oZWFkZXIuY29kZSA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9TRVRfUkFURSk7CisJY21kLT5oZWFkZXIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKKworCWZvciAoY291bnQgPSAwOyBjb3VudCA8IG12X3ZpZi0+bGVnYWN5X25yYXRlczsgY291bnQrKykKKwkJY21kLT5sZWdhY3lfcmF0ZXNbY291bnRdID0gYml0cmF0ZXNbY291bnRdLmh3X3ZhbHVlOworCisJcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKKwlrZnJlZShjbWQpOworCisJcmV0dXJuIHJjOworfQorCisvKgorICogQ01EX1VTRV9GSVhFRF9SQVRFLgorICovCisjZGVmaW5lIE1XTDhLX1JBVEVfVEFCTEVfU0laRQk4CisjZGVmaW5lIE1XTDhLX1VDQVNUX1JBVEUJMAorI2RlZmluZSBNV0w4S19NQ0FTVF9SQVRFCTEKKyNkZWZpbmUgTVdMOEtfQkNBU1RfUkFURQkyCisKKyNkZWZpbmUgTVdMOEtfVVNFX0ZJWEVEX1JBVEUJMHgwMDAxCisjZGVmaW5lIE1XTDhLX1VTRV9BVVRPX1JBVEUJMHgwMDAyCisKK3N0cnVjdCBtd2w4a19yYXRlX2VudHJ5IHsKKwkvKiBTZXQgdG8gMSBpZiBIVCByYXRlLCAwIGlmIGxlZ2FjeS4gICovCisJX19sZTMyCWlzX2h0X3JhdGU7CisKKwkvKiBTZXQgdG8gMSB0byB1c2UgcmV0cnlfY291bnQgZmllbGQuICAqLworCV9fbGUzMgllbmFibGVfcmV0cnk7CisKKwkvKiBTcGVjaWZpZWQgbGVnYWN5IHJhdGUgb3IgTUNTLiAgKi8KKwlfX2xlMzIJcmF0ZTsKKworCS8qIE51bWJlciBvZiBhbGxvd2VkIHJldHJpZXMuICAqLworCV9fbGUzMglyZXRyeV9jb3VudDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBtd2w4a19yYXRlX3RhYmxlIHsKKwkvKiAxIHRvIGFsbG93IHNwZWNpZmllZCByYXRlIGFuZCBiZWxvdyAqLworCV9fbGUzMglhbGxvd19yYXRlX2Ryb3A7CisJX19sZTMyCW51bV9yYXRlczsKKwlzdHJ1Y3QgbXdsOGtfcmF0ZV9lbnRyeSByYXRlX2VudHJ5W01XTDhLX1JBVEVfVEFCTEVfU0laRV07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgbXdsOGtfY21kX3VzZV9maXhlZF9yYXRlIHsKKwlzdHJ1Y3QJbXdsOGtfY21kX3BrdCBoZWFkZXI7CisJX19sZTMyCWFjdGlvbjsKKwlzdHJ1Y3QgbXdsOGtfcmF0ZV90YWJsZSByYXRlX3RhYmxlOworCisJLyogVW5pY2FzdCwgQnJvYWRjYXN0IG9yIE11bHRpY2FzdCAqLworCV9fbGUzMglyYXRlX3R5cGU7CisJX19sZTMyCXJlc2VydmVkMTsKKwlfX2xlMzIJcmVzZXJ2ZWQyOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RhdGljIGludCBtd2w4a19jbWRfdXNlX2ZpeGVkX3JhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJdTMyIGFjdGlvbiwgdTMyIHJhdGVfdHlwZSwgc3RydWN0IG13bDhrX3JhdGVfdGFibGUgKnJhdGVfdGFibGUpCit7CisJc3RydWN0IG13bDhrX2NtZF91c2VfZml4ZWRfcmF0ZSAqY21kOworCWludCBjb3VudDsKKwlpbnQgcmM7CisKKwljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNtZCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNtZC0+aGVhZGVyLmNvZGUgPSBjcHVfdG9fbGUxNihNV0w4S19DTURfVVNFX0ZJWEVEX1JBVEUpOworCWNtZC0+aGVhZGVyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZigqY21kKSk7CisKKwljbWQtPmFjdGlvbiA9IGNwdV90b19sZTMyKGFjdGlvbik7CisJY21kLT5yYXRlX3R5cGUgPSBjcHVfdG9fbGUzMihyYXRlX3R5cGUpOworCisJaWYgKHJhdGVfdGFibGUgIT0gTlVMTCkgeworCQkvKiBDb3B5IG92ZXIgZWFjaCBmaWVsZCBtYW51YWxseSBzbworCQkqIHRoYXQgYml0ZmxpcHBpbmcgY2FuIGJlIGRvbmUKKwkJKi8KKwkJY21kLT5yYXRlX3RhYmxlLmFsbG93X3JhdGVfZHJvcCA9CisJCQkJY3B1X3RvX2xlMzIocmF0ZV90YWJsZS0+YWxsb3dfcmF0ZV9kcm9wKTsKKwkJY21kLT5yYXRlX3RhYmxlLm51bV9yYXRlcyA9CisJCQkJY3B1X3RvX2xlMzIocmF0ZV90YWJsZS0+bnVtX3JhdGVzKTsKKworCQlmb3IgKGNvdW50ID0gMDsgY291bnQgPCByYXRlX3RhYmxlLT5udW1fcmF0ZXM7IGNvdW50KyspIHsKKwkJCXN0cnVjdCBtd2w4a19yYXRlX2VudHJ5ICpkc3QgPQorCQkJCSZjbWQtPnJhdGVfdGFibGUucmF0ZV9lbnRyeVtjb3VudF07CisJCQlzdHJ1Y3QgbXdsOGtfcmF0ZV9lbnRyeSAqc3JjID0KKwkJCQkmcmF0ZV90YWJsZS0+cmF0ZV9lbnRyeVtjb3VudF07CisKKwkJCWRzdC0+aXNfaHRfcmF0ZSA9IGNwdV90b19sZTMyKHNyYy0+aXNfaHRfcmF0ZSk7CisJCQlkc3QtPmVuYWJsZV9yZXRyeSA9IGNwdV90b19sZTMyKHNyYy0+ZW5hYmxlX3JldHJ5KTsKKwkJCWRzdC0+cmF0ZSA9IGNwdV90b19sZTMyKHNyYy0+cmF0ZSk7CisJCQlkc3QtPnJldHJ5X2NvdW50ID0gY3B1X3RvX2xlMzIoc3JjLT5yZXRyeV9jb3VudCk7CisJCX0KKwl9CisKKwlyYyA9IG13bDhrX3Bvc3RfY21kKGh3LCAmY21kLT5oZWFkZXIpOworCWtmcmVlKGNtZCk7CisKKwlyZXR1cm4gcmM7Cit9CisKKworLyoKKyAqIEludGVycnVwdCBoYW5kbGluZy4KKyAqLworc3RhdGljIGlycXJldHVybl90IG13bDhrX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBkZXZfaWQ7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwl1MzIgc3RhdHVzOworCisJc3RhdHVzID0gaW9yZWFkMzIocHJpdi0+cmVncyArIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX1NUQVRVUyk7CisJaW93cml0ZTMyKH5zdGF0dXMsIHByaXYtPnJlZ3MgKyBNV0w4S19ISVVfQTJIX0lOVEVSUlVQVF9TVEFUVVMpOworCisJc3RhdHVzICY9IHByaXYtPmludF9tYXNrOworCWlmICghc3RhdHVzKQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwlpZiAoc3RhdHVzICYgTVdMOEtfQTJIX0lOVF9UWF9ET05FKQorCQl0YXNrbGV0X3NjaGVkdWxlKCZwcml2LT50eF9yZWNsYWltX3Rhc2spOworCisJaWYgKHN0YXR1cyAmIE1XTDhLX0EySF9JTlRfUlhfUkVBRFkpIHsKKwkJd2hpbGUgKHJ4cV9wcm9jZXNzKGh3LCAwLCAxKSkKKwkJCXJ4cV9yZWZpbGwoaHcsIDAsIDEpOworCX0KKworCWlmIChzdGF0dXMgJiBNV0w4S19BMkhfSU5UX09QQ19ET05FKSB7CisJCWlmIChwcml2LT5ob3N0Y21kX3dhaXQgIT0gTlVMTCkgeworCQkJY29tcGxldGUocHJpdi0+aG9zdGNtZF93YWl0KTsKKwkJCXByaXYtPmhvc3RjbWRfd2FpdCA9IE5VTEw7CisJCX0KKwl9CisKKwlpZiAoc3RhdHVzICYgTVdMOEtfQTJIX0lOVF9RVUVVRV9FTVBUWSkgeworCQlpZiAoIXByaXYtPmluY29uZmlnICYmCisJCQlwcml2LT5yYWRpb19zdGF0ZSAmJgorCQkJbXdsOGtfdHhxX2J1c3kocHJpdikpCisJCQkJbXdsOGtfdHhfc3RhcnQocHJpdik7CisJfQorCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisKKy8qCisgKiBDb3JlIGRyaXZlciBvcGVyYXRpb25zLgorICovCitzdGF0aWMgaW50IG13bDhrX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisJaW50IGluZGV4ID0gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYik7CisJaW50IHJjOworCisJaWYgKHByaXYtPmN1cnJlbnRfY2hhbm5lbCA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogZHJvcHBlZCBUWCBmcmFtZSBzaW5jZSByYWRpbyAiCisJCSAgICAgICAiZGlzYWJsZWRcbiIsIHByaXYtPm5hbWUpOworCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCXJldHVybiBORVRERVZfVFhfT0s7CisJfQorCisJcmMgPSBtd2w4a190eHFfeG1pdChodywgaW5kZXgsIHNrYik7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0cnVjdCBtd2w4a193b3JrX3N0cnVjdCB7CisJLyogSW5pdGlhbGl6ZWQgYnkgbXdsOGtfcXVldWVfd29yaygpLiAgKi8KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd3Q7CisKKwkvKiBSZXF1aXJlZCBmaWVsZCBwYXNzZWQgaW4gdG8gbXdsOGtfcXVldWVfd29yaygpLiAgKi8KKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKKworCS8qIFJlcXVpcmVkIGZpZWxkIHBhc3NlZCBpbiB0byBtd2w4a19xdWV1ZV93b3JrKCkuICAqLworCWludCAoKndmdW5jKShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpOworCisJLyogSW5pdGlhbGl6ZWQgYnkgbXdsOGtfcXVldWVfd29yaygpLiAgKi8KKwlzdHJ1Y3QgY29tcGxldGlvbiAqY21kX3dhaXQ7CisKKwkvKiBSZXN1bHQgY29kZS4gICovCisJaW50IHJjOworCisJLyoKKwkgKiBPcHRpb25hbCBmaWVsZC4gUmVmZXIgdG8gZXhwbGFuYXRpb24gb2YgTVdMOEtfV1FfWFhYX1hYWAorCSAqIGZsYWdzIGZvciBleHBsYW5hdGlvbi4gIERlZmF1bHRzIHRvIE1XTDhLX1dRX0RFRkFVTFRfT1BUSU9OUy4KKwkgKi8KKwl1MzIgb3B0aW9uczsKKworCS8qIE9wdGlvbmFsIGZpZWxkLiAgRGVmYXVsdHMgdG8gTVdMOEtfQ09ORklHX1RJTUVPVVRfTVMuICAqLworCXVuc2lnbmVkIGxvbmcgdGltZW91dF9tczsKKworCS8qIE9wdGlvbmFsIGZpZWxkLiAgRGVmYXVsdHMgdG8gTVdMOEtfV1FfVFhXQUlUX0FUVEVNUFRTLiAgKi8KKwl1MzIgdHh3YWl0X2F0dGVtcHRzOworCisJLyogT3B0aW9uYWwgZmllbGQuICBEZWZhdWx0cyB0byBNV0w4S19UWFdBSVRfTVMuICAqLworCXUzMiB0eF90aW1lb3V0X21zOworCXUzMiBzdGVwOworfTsKKworLyogRmxhZ3MgY29udHJvbGxpbmcgYmVoYXZpb3Igb2YgY29uZmlnIHF1ZXVlIHJlcXVlc3RzICovCisKKy8qIENhbGxlciBzcGlucyB3aGlsZSB3YWl0aW5nIGZvciBjb21wbGV0aW9uLiAgKi8KKyNkZWZpbmUgTVdMOEtfV1FfU1BJTgkJCTB4MDAwMDAwMDEKKworLyogV2FpdCBmb3IgVFggcXVldWVzIHRvIGVtcHR5IGJlZm9yZSBwcm9jZWVkaW5nIHdpdGggY29uZmlndXJhdGlvbi4gICovCisjZGVmaW5lIE1XTDhLX1dRX1RYX1dBSVRfRU1QVFkJCTB4MDAwMDAwMDIKKworLyogUXVldWUgcmVxdWVzdCBhbmQgcmV0dXJuIGltbWVkaWF0ZWx5LiAgKi8KKyNkZWZpbmUgTVdMOEtfV1FfUE9TVF9SRVFVRVNUCQkweDAwMDAwMDA0CisKKy8qCisgKiBDYWxsZXIgc2xlZXBzIGFuZCB3YWl0cyBmb3IgdGFzayBjb21wbGV0ZSBub3RpZmljYXRpb24uCisgKiBEbyBub3QgdXNlIGluIGF0b21pYyBjb250ZXh0LgorICovCisjZGVmaW5lIE1XTDhLX1dRX1NMRUVQCQkJMHgwMDAwMDAwOAorCisvKiBGcmVlIHdvcmsgc3RydWN0IHdoZW4gdGFzayBpcyBkb25lLiAgKi8KKyNkZWZpbmUgTVdMOEtfV1FfRlJFRV9XT1JLU1RSVUNUCTB4MDAwMDAwMTAKKworLyoKKyAqIENvbmZpZyByZXF1ZXN0IGlzIHF1ZXVlZCBhbmQgcmV0dXJucyB0byBjYWxsZXIgaW1lZGlhdGVseS4gIFVzZQorICogdGhpcyBpbiBhdG9taWMgY29udGV4dC4gV29yayBzdHJ1Y3QgaXMgZnJlZWQgYnkgbXdsOGtfcXVldWVfd29yaygpCisgKiB3aGVuIHRoaXMgZmxhZyBpcyBzZXQuCisgKi8KKyNkZWZpbmUgTVdMOEtfV1FfUVVFVUVfT05MWQkoTVdMOEtfV1FfUE9TVF9SRVFVRVNUIHwgXAorCQkJCSBNV0w4S19XUV9GUkVFX1dPUktTVFJVQ1QpCisKKy8qIERlZmF1bHQgd29yayBxdWV1ZSBiZWhhdmlvciBpcyB0byBzbGVlcCBhbmQgd2FpdCBmb3IgdHggY29tcGxldGlvbi4gICovCisjZGVmaW5lIE1XTDhLX1dRX0RFRkFVTFRfT1BUSU9OUyAoTVdMOEtfV1FfU0xFRVAgfCBNV0w4S19XUV9UWF9XQUlUX0VNUFRZKQorCisvKgorICogRGVmYXVsdCBjb25maWcgcmVxdWVzdCB0aW1lb3V0LiAgQWRkIGFkanVzdG1lbnRzIHRvIG1ha2Ugc3VyZSB0aGUKKyAqIGNvbmZpZyB0aHJlYWQgd2FpdHMgbG9uZyBlbm91Z2ggZm9yIGJvdGggdHggd2FpdCBhbmQgY21kIHdhaXQgYmVmb3JlCisgKiB0aW1pbmcgb3V0LgorICovCisKKy8qIFRpbWUgdG8gd2FpdCBmb3IgYWxsIFRYUXMgdG8gZHJhaW4uICBUWCBEb29yYmVsbCBpcyBwcmVzc2VkIGVhY2ggdGltZS4gICovCisjZGVmaW5lIE1XTDhLX1RYV0FJVF9USU1FT1VUX01TCQkxMDAwCisKKy8qIERlZmF1bHQgbnVtYmVyIG9mIFRYIHdhaXQgYXR0ZW1wdHMuICAqLworI2RlZmluZSBNV0w4S19XUV9UWFdBSVRfQVRURU1QVFMJNAorCisvKiBUb3RhbCB0aW1lIHRvIHdhaXQgZm9yIFRYUSB0byBkcmFpbi4gICovCisjZGVmaW5lIE1XTDhLX1RYV0FJVF9NUwkJCShNV0w4S19UWFdBSVRfVElNRU9VVF9NUyAqIFwKKwkJCQkJCU1XTDhLX1dRX1RYV0FJVF9BVFRFTVBUUykKKworLyogU2NoZWR1bGluZyBzbG9wLiAgKi8KKyNkZWZpbmUgTVdMOEtfT1NfU0NIRURVTEVfT1ZFUkhFQURfTVMJMjAwCisKKyNkZWZpbmUgTVdMOEtfQ09ORklHX1RJTUVPVVRfTVMJKE1XTDhLX0NNRF9USU1FT1VUX01TICsgXAorCQkJCSBNV0w4S19UWFdBSVRfTVMgKyBcCisJCQkJIE1XTDhLX09TX1NDSEVEVUxFX09WRVJIRUFEX01TKQorCitzdGF0aWMgdm9pZCBtd2w4a19jb25maWdfdGhyZWFkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd3QpCit7CisJc3RydWN0IG13bDhrX3dvcmtfc3RydWN0ICp3b3JrZXIgPSAoc3RydWN0IG13bDhrX3dvcmtfc3RydWN0ICopd3Q7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSB3b3JrZXItPmh3OworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisJaW50IHJjID0gMDsKKworCXNwaW5fbG9ja19pcnEoJnByaXYtPnR4X2xvY2spOworCXByaXYtPmluY29uZmlnID0gdHJ1ZTsKKwlzcGluX3VubG9ja19pcnEoJnByaXYtPnR4X2xvY2spOworCisJaWVlZTgwMjExX3N0b3BfcXVldWVzKGh3KTsKKworCS8qCisJICogV2FpdCBmb3IgaG9zdCBxdWV1ZXMgdG8gZHJhaW4gYmVmb3JlIGRvaW5nIFBIWQorCSAqIHJlY29uZmlndXJhdGlvbi4gVGhpcyBhdm9pZHMgaW50ZXJydXB0aW5nIGFueSBpbi1mbGlnaHQKKwkgKiBETUEgdHJhbnNmZXJzIHRvIHRoZSBoYXJkd2FyZS4KKwkgKi8KKwlpZiAod29ya2VyLT5vcHRpb25zICYgTVdMOEtfV1FfVFhfV0FJVF9FTVBUWSkgeworCQl1MzIgdGltZW91dDsKKwkJdTMyIHRpbWVfcmVtYWluaW5nOworCQl1MzIgaXRlcjsKKwkJdTMyIHR4X3dhaXRfYXR0ZW1wdHMgPSB3b3JrZXItPnR4d2FpdF9hdHRlbXB0czsKKworCQl0aW1lX3JlbWFpbmluZyA9IHdvcmtlci0+dHhfdGltZW91dF9tczsKKwkJaWYgKCF0eF93YWl0X2F0dGVtcHRzKQorCQkJdHhfd2FpdF9hdHRlbXB0cyA9IDE7CisKKwkJdGltZW91dCA9IHdvcmtlci0+dHhfdGltZW91dF9tcy90eF93YWl0X2F0dGVtcHRzOworCQlpZiAoIXRpbWVvdXQpCisJCQl0aW1lb3V0ID0gMTsKKworCQlpdGVyID0gdHhfd2FpdF9hdHRlbXB0czsKKwkJZG8geworCQkJaW50IHdhaXRfdGltZTsKKworCQkJaWYgKHRpbWVfcmVtYWluaW5nID4gdGltZW91dCkgeworCQkJCXRpbWVfcmVtYWluaW5nIC09IHRpbWVvdXQ7CisJCQkJd2FpdF90aW1lID0gdGltZW91dDsKKwkJCX0gZWxzZQorCQkJCXdhaXRfdGltZSA9IHRpbWVfcmVtYWluaW5nOworCisJCQlpZiAoIXdhaXRfdGltZSkKKwkJCQl3YWl0X3RpbWUgPSAxOworCisJCQlyYyA9IG13bDhrX3R4X3dhaXRfZW1wdHkoaHcsIHdhaXRfdGltZSk7CisJCQlpZiAocmMpCisJCQkJcHJpbnRrKEtFUk5fRVJSICIlcygpIHR4d2FpdCB0aW1lb3V0PSV1bXMgIgorCQkJCQkiUmV0cnk6JXUvJXVcbiIsIF9fZnVuY19fLCB0aW1lb3V0LAorCQkJCQl0eF93YWl0X2F0dGVtcHRzIC0gaXRlciArIDEsCisJCQkJCXR4X3dhaXRfYXR0ZW1wdHMpOworCisJCX0gd2hpbGUgKHJjICYmIC0taXRlcik7CisKKwkJcmMgPSBpdGVyID8gMCA6IC1FVElNRURPVVQ7CisJfQorCWlmICghcmMpCisJCXJjID0gd29ya2VyLT53ZnVuYyh3dCk7CisKKwlzcGluX2xvY2tfaXJxKCZwcml2LT50eF9sb2NrKTsKKwlwcml2LT5pbmNvbmZpZyA9IGZhbHNlOworCWlmIChwcml2LT5wZW5kaW5nX3R4X3BrdHMgJiYgcHJpdi0+cmFkaW9fc3RhdGUpCisJCW13bDhrX3R4X3N0YXJ0KHByaXYpOworCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+dHhfbG9jayk7CisJaWVlZTgwMjExX3dha2VfcXVldWVzKGh3KTsKKworCXdvcmtlci0+cmMgPSByYzsKKwlpZiAod29ya2VyLT5vcHRpb25zICYgTVdMOEtfV1FfU0xFRVApCisJCWNvbXBsZXRlKHdvcmtlci0+Y21kX3dhaXQpOworCisJaWYgKHdvcmtlci0+b3B0aW9ucyAmIE1XTDhLX1dRX0ZSRUVfV09SS1NUUlVDVCkKKwkJa2ZyZWUod3QpOworfQorCitzdGF0aWMgaW50IG13bDhrX3F1ZXVlX3dvcmsoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJc3RydWN0IG13bDhrX3dvcmtfc3RydWN0ICp3b3JrZXIsCisJCQkJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxdWV1ZSwKKwkJCQlpbnQgKCp3ZnVuYykoc3RydWN0IHdvcmtfc3RydWN0ICp3KSkKK3sKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSAwOworCWludCByYyA9IDA7CisKKwlERUNMQVJFX0NPTVBMRVRJT05fT05TVEFDSyhjbWRfd2FpdCk7CisKKwlpZiAoIXdvcmtlci0+dGltZW91dF9tcykKKwkJd29ya2VyLT50aW1lb3V0X21zID0gTVdMOEtfQ09ORklHX1RJTUVPVVRfTVM7CisKKwlpZiAoIXdvcmtlci0+b3B0aW9ucykKKwkJd29ya2VyLT5vcHRpb25zID0gTVdMOEtfV1FfREVGQVVMVF9PUFRJT05TOworCisJaWYgKCF3b3JrZXItPnR4d2FpdF9hdHRlbXB0cykKKwkJd29ya2VyLT50eHdhaXRfYXR0ZW1wdHMgPSBNV0w4S19XUV9UWFdBSVRfQVRURU1QVFM7CisKKwlpZiAoIXdvcmtlci0+dHhfdGltZW91dF9tcykKKwkJd29ya2VyLT50eF90aW1lb3V0X21zID0gTVdMOEtfVFhXQUlUX01TOworCisJd29ya2VyLT5odyA9IGh3OworCXdvcmtlci0+Y21kX3dhaXQgPSAmY21kX3dhaXQ7CisJd29ya2VyLT5yYyA9IDE7CisJd29ya2VyLT53ZnVuYyA9IHdmdW5jOworCisJSU5JVF9XT1JLKCZ3b3JrZXItPnd0LCBtd2w4a19jb25maWdfdGhyZWFkKTsKKwlxdWV1ZV93b3JrKHdxdWV1ZSwgJndvcmtlci0+d3QpOworCisJaWYgKHdvcmtlci0+b3B0aW9ucyAmIE1XTDhLX1dRX1BPU1RfUkVRVUVTVCkgeworCQlyYyA9IDA7CisJfSBlbHNlIHsKKwkJaWYgKHdvcmtlci0+b3B0aW9ucyAmIE1XTDhLX1dRX1NQSU4pIHsKKwkJCXRpbWVvdXQgPSB3b3JrZXItPnRpbWVvdXRfbXM7CisJCQl3aGlsZSAodGltZW91dCAmJiAod29ya2VyLT5yYyA+IDApKSB7CisJCQkJbWRlbGF5KDEpOworCQkJCXRpbWVvdXQtLTsKKwkJCX0KKwkJfSBlbHNlIGlmICh3b3JrZXItPm9wdGlvbnMgJiBNV0w4S19XUV9TTEVFUCkKKwkJCXRpbWVvdXQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmNtZF93YWl0LAorCQkJCW1zZWNzX3RvX2ppZmZpZXMod29ya2VyLT50aW1lb3V0X21zKSk7CisKKwkJaWYgKHRpbWVvdXQpCisJCQlyYyA9IHdvcmtlci0+cmM7CisJCWVsc2UgeworCQkJY2FuY2VsX3dvcmtfc3luYygmd29ya2VyLT53dCk7CisJCQlyYyA9IC1FVElNRURPVVQ7CisJCX0KKwl9CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0cnVjdCBtd2w4a19zdGFydF93b3JrZXIgeworCXN0cnVjdCBtd2w4a193b3JrX3N0cnVjdCBoZWFkZXI7Cit9OworCitzdGF0aWMgaW50IG13bDhrX3N0YXJ0X3d0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd3QpCit7CisJc3RydWN0IG13bDhrX3N0YXJ0X3dvcmtlciAqd29ya2VyID0gKHN0cnVjdCBtd2w4a19zdGFydF93b3JrZXIgKil3dDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHdvcmtlci0+aGVhZGVyLmh3OworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisJaW50IHJjID0gMDsKKworCWlmIChwcml2LT52aWYgIT0gTlVMTCkgeworCQlyYyA9IC1FSU87CisJCWdvdG8gbXdsOGtfc3RhcnRfZXhpdDsKKwl9CisKKwkvKiBUdXJuIG9uIHJhZGlvICovCisJaWYgKG13bDhrX2NtZF84MDJfMTFfcmFkaW9fY29udHJvbChodywgTVdMOEtfUkFESU9fRU5BQkxFKSkgeworCQlyYyA9IC1FSU87CisJCWdvdG8gbXdsOGtfc3RhcnRfZXhpdDsKKwl9CisKKwkvKiBQdXJnZSBUWC9SWCBIVyBxdWV1ZXMgKi8KKwlpZiAobXdsOGtfY21kX3NldF9wcmVfc2NhbihodykpIHsKKwkJcmMgPSAtRUlPOworCQlnb3RvIG13bDhrX3N0YXJ0X2V4aXQ7CisJfQorCisJaWYgKG13bDhrX2NtZF9zZXRfcG9zdF9zY2FuKGh3LCAiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIikpIHsKKwkJcmMgPSAtRUlPOworCQlnb3RvIG13bDhrX3N0YXJ0X2V4aXQ7CisJfQorCisJLyogRW5hYmxlIGZpcm13YXJlIHJhdGUgYWRhcHRhdGlvbiAqLworCWlmIChtd2w4a19jbWRfc2V0cmF0ZWFkYXB0bW9kZShodywgMCkpIHsKKwkJcmMgPSAtRUlPOworCQlnb3RvIG13bDhrX3N0YXJ0X2V4aXQ7CisJfQorCisJLyogRGlzYWJsZSBXTU0uIFdNTSBnZXRzIGVuYWJsZWQgd2hlbiBzdGFjayBzZW5kcyBXTU0gcGFybXMgKi8KKwlpZiAobXdsOGtfc2V0X3dtbShodywgTVdMOEtfV01NX0RJU0FCTEUpKSB7CisJCXJjID0gLUVJTzsKKwkJZ290byBtd2w4a19zdGFydF9leGl0OworCX0KKworCS8qIERpc2FibGUgc25pZmZlciBtb2RlICovCisJaWYgKG13bDhrX2VuYWJsZV9zbmlmZmVyKGh3LCAwKSkKKwkJcmMgPSAtRUlPOworCittd2w4a19zdGFydF9leGl0OgorCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBtd2w4a19zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgbXdsOGtfc3RhcnRfd29ya2VyICp3b3JrZXI7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlpbnQgcmM7CisKKwkvKiBFbmFibGUgdHggcmVjbGFpbSB0YXNrbGV0ICovCisJdGFza2xldF9lbmFibGUoJnByaXYtPnR4X3JlY2xhaW1fdGFzayk7CisKKwlyYyA9IHJlcXVlc3RfaXJxKHByaXYtPnBkZXYtPmlycSwgJm13bDhrX2ludGVycnVwdCwKKwkJCSBJUlFGX1NIQVJFRCwgTVdMOEtfTkFNRSwgaHcpOworCWlmIChyYykgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gcmVnaXN0ZXIgSVJRIGhhbmRsZXJcbiIsCisJCSAgICAgICBwcml2LT5uYW1lKTsKKwkJcmMgPSAtRUlPOworCQlnb3RvIG13bDhrX3N0YXJ0X2Rpc2FibGVfdGFza2xldDsKKwl9CisKKwkvKiBFbmFibGUgaW50ZXJydXB0cyAqLworCWlvd3JpdGUzMihwcml2LT5pbnRfbWFzaywgcHJpdi0+cmVncyArIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX01BU0spOworCisJd29ya2VyID0ga3phbGxvYyhzaXplb2YoKndvcmtlciksIEdGUF9LRVJORUwpOworCWlmICh3b3JrZXIgPT0gTlVMTCkgeworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gbXdsOGtfc3RhcnRfZGlzYWJsZV9pcnE7CisJfQorCisJcmMgPSBtd2w4a19xdWV1ZV93b3JrKGh3LCAmd29ya2VyLT5oZWFkZXIsCisJCQkgICAgICBwcml2LT5jb25maWdfd3EsIG13bDhrX3N0YXJ0X3d0KTsKKwlrZnJlZSh3b3JrZXIpOworCWlmICghcmMpCisJCXJldHVybiByYzsKKworCWlmIChyYyA9PSAtRVRJTUVET1VUKQorCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgdGltZWQgb3V0XG4iLCBfX2Z1bmNfXyk7CisKKwlyYyA9IC1FSU87CisKK213bDhrX3N0YXJ0X2Rpc2FibGVfaXJxOgorCXNwaW5fbG9ja19pcnEoJnByaXYtPnR4X2xvY2spOworCWlvd3JpdGUzMigwLCBwcml2LT5yZWdzICsgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfTUFTSyk7CisJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT50eF9sb2NrKTsKKwlmcmVlX2lycShwcml2LT5wZGV2LT5pcnEsIGh3KTsKKworbXdsOGtfc3RhcnRfZGlzYWJsZV90YXNrbGV0OgorCXRhc2tsZXRfZGlzYWJsZSgmcHJpdi0+dHhfcmVjbGFpbV90YXNrKTsKKworCXJldHVybiByYzsKK30KKworc3RydWN0IG13bDhrX3N0b3Bfd29ya2VyIHsKKwlzdHJ1Y3QgbXdsOGtfd29ya19zdHJ1Y3QgaGVhZGVyOworfTsKKworc3RhdGljIGludCBtd2w4a19zdG9wX3d0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd3QpCit7CisJc3RydWN0IG13bDhrX3N0b3Bfd29ya2VyICp3b3JrZXIgPSAoc3RydWN0IG13bDhrX3N0b3Bfd29ya2VyICopd3Q7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSB3b3JrZXItPmhlYWRlci5odzsKKwlpbnQgcmM7CisKKwlyYyA9IG13bDhrX2NtZF84MDJfMTFfcmFkaW9fY29udHJvbChodywgTVdMOEtfUkFESU9fRElTQUJMRSk7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIG13bDhrX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJaW50IHJjOworCXN0cnVjdCBtd2w4a19zdG9wX3dvcmtlciAqd29ya2VyOworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisJaW50IGk7CisKKwlpZiAocHJpdi0+dmlmICE9IE5VTEwpCisJCXJldHVybjsKKworCWllZWU4MDIxMV9zdG9wX3F1ZXVlcyhodyk7CisKKwl3b3JrZXIgPSBremFsbG9jKHNpemVvZigqd29ya2VyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHdvcmtlciA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlyYyA9IG13bDhrX3F1ZXVlX3dvcmsoaHcsICZ3b3JrZXItPmhlYWRlciwKKwkJCSAgICAgIHByaXYtPmNvbmZpZ193cSwgbXdsOGtfc3RvcF93dCk7CisJa2ZyZWUod29ya2VyKTsKKwlpZiAocmMgPT0gLUVUSU1FRE9VVCkKKwkJcHJpbnRrKEtFUk5fRVJSICIlcygpIHRpbWVkIG91dFxuIiwgX19mdW5jX18pOworCisJLyogRGlzYWJsZSBpbnRlcnJ1cHRzICovCisJc3Bpbl9sb2NrX2lycSgmcHJpdi0+dHhfbG9jayk7CisJaW93cml0ZTMyKDAsIHByaXYtPnJlZ3MgKyBNV0w4S19ISVVfQTJIX0lOVEVSUlVQVF9NQVNLKTsKKwlzcGluX3VubG9ja19pcnEoJnByaXYtPnR4X2xvY2spOworCWZyZWVfaXJxKHByaXYtPnBkZXYtPmlycSwgaHcpOworCisJLyogU3RvcCBmaW5hbGl6ZSBqb2luIHdvcmtlciAqLworCWNhbmNlbF93b3JrX3N5bmMoJnByaXYtPmZpbmFsaXplX2pvaW5fd29ya2VyKTsKKwlpZiAocHJpdi0+YmVhY29uX3NrYiAhPSBOVUxMKQorCQlkZXZfa2ZyZWVfc2tiKHByaXYtPmJlYWNvbl9za2IpOworCisJLyogU3RvcCB0eCByZWNsYWltIHRhc2tsZXQgKi8KKwl0YXNrbGV0X2Rpc2FibGUoJnByaXYtPnR4X3JlY2xhaW1fdGFzayk7CisKKwkvKiBTdG9wIGNvbmZpZyB0aHJlYWQgKi8KKwlmbHVzaF93b3JrcXVldWUocHJpdi0+Y29uZmlnX3dxKTsKKworCS8qIFJldHVybiBhbGwgc2ticyB0byBtYWM4MDIxMSAqLworCWZvciAoaSA9IDA7IGkgPCBNV0w4S19UWF9RVUVVRVM7IGkrKykKKwkJbXdsOGtfdHhxX3JlY2xhaW0oaHcsIGksIDEpOworfQorCitzdGF0aWMgaW50IG13bDhrX2FkZF9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpCit7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlzdHJ1Y3QgbXdsOGtfdmlmICptd2w4a192aWY7CisKKwkvKgorCSAqIFdlIG9ubHkgc3VwcG9ydCBvbmUgYWN0aXZlIGludGVyZmFjZSBhdCBhIHRpbWUuCisJICovCisJaWYgKHByaXYtPnZpZiAhPSBOVUxMKQorCQlyZXR1cm4gLUVCVVNZOworCisJLyoKKwkgKiBXZSBvbmx5IHN1cHBvcnQgbWFuYWdlZCBpbnRlcmZhY2VzIGZvciBub3cuCisJICovCisJaWYgKGNvbmYtPnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiAmJgorCSAgICBjb25mLT50eXBlICE9IE5MODAyMTFfSUZUWVBFX01PTklUT1IpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogQ2xlYW4gb3V0IGRyaXZlciBwcml2YXRlIGFyZWEgKi8KKwltd2w4a192aWYgPSBNV0w4S19WSUYoY29uZi0+dmlmKTsKKwltZW1zZXQobXdsOGtfdmlmLCAwLCBzaXplb2YoKm13bDhrX3ZpZikpOworCisJLyogU2F2ZSB0aGUgbWFjIGFkZHJlc3MgKi8KKwltZW1jcHkobXdsOGtfdmlmLT5tYWNfYWRkciwgY29uZi0+bWFjX2FkZHIsIElFRUU4MDIxMV9BRERSX0xFTik7CisKKwkvKiBCYWNrIHBvaW50ZXIgdG8gcGFyZW50IGNvbmZpZyBibG9jayAqLworCW13bDhrX3ZpZi0+cHJpdiA9IHByaXY7CisKKwkvKiBTZXR1cCBpbml0aWFsIFBIWSBwYXJhbWV0ZXJzICovCisJbWVtY3B5KG13bDhrX3ZpZi0+bGVnYWN5X3JhdGVzICwKKwkJcHJpdi0+cmF0ZXMsIHNpemVvZihtd2w4a192aWYtPmxlZ2FjeV9yYXRlcykpOworCW13bDhrX3ZpZi0+bGVnYWN5X25yYXRlcyA9IEFSUkFZX1NJWkUocHJpdi0+cmF0ZXMpOworCisJLyogU2V0IEluaXRpYWwgc2VxdWVuY2UgbnVtYmVyIHRvIHplcm8gKi8KKwltd2w4a192aWYtPnNlcW5vID0gMDsKKworCXByaXYtPnZpZiA9IGNvbmYtPnZpZjsKKwlwcml2LT5jdXJyZW50X2NoYW5uZWwgPSBOVUxMOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG13bDhrX3JlbW92ZV9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpCit7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKworCWlmIChwcml2LT52aWYgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJcHJpdi0+dmlmID0gTlVMTDsKK30KKworc3RydWN0IG13bDhrX2NvbmZpZ193b3JrZXIgeworCXN0cnVjdCBtd2w4a193b3JrX3N0cnVjdCBoZWFkZXI7CisJdTMyIGNoYW5nZWQ7Cit9OworCitzdGF0aWMgaW50IG13bDhrX2NvbmZpZ193dChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnd0KQoreworCXN0cnVjdCBtd2w4a19jb25maWdfd29ya2VyICp3b3JrZXIgPQorCQkoc3RydWN0IG13bDhrX2NvbmZpZ193b3JrZXIgKil3dDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHdvcmtlci0+aGVhZGVyLmh3OworCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9ICZody0+Y29uZjsKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCWludCByYyA9IDA7CisKKwlpZiAoIWNvbmYtPnJhZGlvX2VuYWJsZWQpIHsKKwkJbXdsOGtfY21kXzgwMl8xMV9yYWRpb19jb250cm9sKGh3LCBNV0w4S19SQURJT19ESVNBQkxFKTsKKwkJcHJpdi0+Y3VycmVudF9jaGFubmVsID0gTlVMTDsKKwkJcmMgPSAwOworCQlnb3RvIG13bDhrX2NvbmZpZ19leGl0OworCX0KKworCWlmIChtd2w4a19jbWRfODAyXzExX3JhZGlvX2NvbnRyb2woaHcsIE1XTDhLX1JBRElPX0VOQUJMRSkpIHsKKwkJcmMgPSAtRUlOVkFMOworCQlnb3RvIG13bDhrX2NvbmZpZ19leGl0OworCX0KKworCXByaXYtPmN1cnJlbnRfY2hhbm5lbCA9IGNvbmYtPmNoYW5uZWw7CisKKwlpZiAobXdsOGtfY21kX3NldF9yZl9jaGFubmVsKGh3LCBjb25mLT5jaGFubmVsKSkgeworCQlyYyA9IC1FSU5WQUw7CisJCWdvdG8gbXdsOGtfY29uZmlnX2V4aXQ7CisJfQorCisJaWYgKGNvbmYtPnBvd2VyX2xldmVsID4gMTgpCisJCWNvbmYtPnBvd2VyX2xldmVsID0gMTg7CisJaWYgKG13bDhrX2NtZF84MDJfMTFfcmZfdHhfcG93ZXIoaHcsIGNvbmYtPnBvd2VyX2xldmVsKSkgeworCQlyYyA9IC1FSU5WQUw7CisJCWdvdG8gbXdsOGtfY29uZmlnX2V4aXQ7CisJfQorCisJaWYgKG13bDhrX2NtZF9taW1vX2NvbmZpZyhodywgMHg3LCAweDcpKQorCQlyYyA9IC1FSU5WQUw7CisKK213bDhrX2NvbmZpZ19leGl0OgorCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBtd2w4a19jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiBjaGFuZ2VkKQoreworCWludCByYyA9IDA7CisJc3RydWN0IG13bDhrX2NvbmZpZ193b3JrZXIgKndvcmtlcjsKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCisJd29ya2VyID0ga3phbGxvYyhzaXplb2YoKndvcmtlciksIEdGUF9LRVJORUwpOworCWlmICh3b3JrZXIgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl3b3JrZXItPmNoYW5nZWQgPSBjaGFuZ2VkOworCXJjID0gbXdsOGtfcXVldWVfd29yayhodywgJndvcmtlci0+aGVhZGVyLAorCQkJICAgICAgcHJpdi0+Y29uZmlnX3dxLCBtd2w4a19jb25maWdfd3QpOworCWlmIChyYyA9PSAtRVRJTUVET1VUKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXMoKSB0aW1lZCBvdXQuXG4iLCBfX2Z1bmNfXyk7CisJCXJjID0gLUVJTlZBTDsKKwl9CisKKwlrZnJlZSh3b3JrZXIpOworCisJLyoKKwkgKiBtYWM4MDIxMSB3aWxsIGNyYXNoIG9uIGFueXRoaW5nIG90aGVyIHRoYW4gLUVJTlZBTCBvbgorCSAqIGVycm9yLiBMb29rcyBsaWtlIHdpcmVsZXNzIGV4dGVuc2lvbnMgd2hpY2ggY2FsbHMgbWFjODAyMTEKKwkgKiBtYXkgYmUgdGhlIGFjdHVhbCBjdWxwcml0Li4uCisJICovCisJcmV0dXJuIHJjID8gLUVJTlZBTCA6IDA7Cit9CisKK3N0YXRpYyBpbnQgbXdsOGtfY29uZmlnX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2lmX2NvbmYgKmNvbmYpCit7CisJc3RydWN0IG13bDhrX3ZpZiAqbXZfdmlmID0gTVdMOEtfVklGKHZpZik7CisJdTMyIGNoYW5nZWQgPSBjb25mLT5jaGFuZ2VkOworCisJaWYgKGNoYW5nZWQgJiBJRUVFODAyMTFfSUZDQ19CU1NJRCkKKwkJbWVtY3B5KG12X3ZpZi0+YnNzaWQsIGNvbmYtPmJzc2lkLCBJRUVFODAyMTFfQUREUl9MRU4pOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBtd2w4a19ic3NfaW5mb19jaGFuZ2VkX3dvcmtlciB7CisJc3RydWN0IG13bDhrX3dvcmtfc3RydWN0IGhlYWRlcjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmOworCXN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmluZm87CisJdTMyIGNoYW5nZWQ7Cit9OworCitzdGF0aWMgaW50IG13bDhrX2Jzc19pbmZvX2NoYW5nZWRfd3Qoc3RydWN0IHdvcmtfc3RydWN0ICp3dCkKK3sKKwlzdHJ1Y3QgbXdsOGtfYnNzX2luZm9fY2hhbmdlZF93b3JrZXIgKndvcmtlciA9CisJCShzdHJ1Y3QgbXdsOGtfYnNzX2luZm9fY2hhbmdlZF93b3JrZXIgKil3dDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHdvcmtlci0+aGVhZGVyLmh3OworCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYgPSB3b3JrZXItPnZpZjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICppbmZvID0gd29ya2VyLT5pbmZvOworCXUzMiBjaGFuZ2VkOworCWludCByYzsKKworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IG13bDhrX3ZpZiAqbXdsOGtfdmlmID0gTVdMOEtfVklGKHZpZik7CisKKwljaGFuZ2VkID0gd29ya2VyLT5jaGFuZ2VkOworCXByaXYtPmNhcHR1cmVfYmVhY29uID0gZmFsc2U7CisKKwlpZiAoaW5mby0+YXNzb2MpIHsKKwkJbWVtY3B5KCZtd2w4a192aWYtPmJzc19pbmZvLCBpbmZvLAorCQkJc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYpKTsKKworCQkvKiBJbnN0YWxsIHJhdGVzICovCisJCWlmIChtd2w4a191cGRhdGVfcmF0ZXNldChodywgdmlmKSkKKwkJCWdvdG8gbXdsOGtfYnNzX2luZm9fY2hhbmdlZF9leGl0OworCisJCS8qIFR1cm4gb24gcmF0ZSBhZGFwdGF0aW9uICovCisJCWlmIChtd2w4a19jbWRfdXNlX2ZpeGVkX3JhdGUoaHcsIE1XTDhLX1VTRV9BVVRPX1JBVEUsCisJCQlNV0w4S19VQ0FTVF9SQVRFLCBOVUxMKSkKKwkJCWdvdG8gbXdsOGtfYnNzX2luZm9fY2hhbmdlZF9leGl0OworCisJCS8qIFNldCByYWRpbyBwcmVhbWJsZSAqLworCQlpZiAobXdsOGtfc2V0X3JhZGlvX3ByZWFtYmxlKGh3LAorCQkJCWluZm8tPnVzZV9zaG9ydF9wcmVhbWJsZSkpCisJCQlnb3RvIG13bDhrX2Jzc19pbmZvX2NoYW5nZWRfZXhpdDsKKworCQkvKiBTZXQgc2xvdCB0aW1lICovCisJCWlmIChtd2w4a19jbWRfc2V0X3Nsb3QoaHcsIGluZm8tPnVzZV9zaG9ydF9zbG90ID8KKwkJCQlNV0w4S19TSE9SVF9TTE9UVElNRSA6IE1XTDhLX0xPTkdfU0xPVFRJTUUpKQorCQkJZ290byBtd2w4a19ic3NfaW5mb19jaGFuZ2VkX2V4aXQ7CisKKwkJLyogVXBkYXRlIHBlZXIgcmF0ZSBpbmZvICovCisJCWlmIChtd2w4a19jbWRfdXBkYXRlX3N0YV9kYihodywgdmlmLAorCQkJCU1XTDhLX1NUQV9EQl9NT0RJRllfRU5UUlkpKQorCQkJZ290byBtd2w4a19ic3NfaW5mb19jaGFuZ2VkX2V4aXQ7CisKKwkJLyogU2V0IEFJRCAqLworCQlpZiAobXdsOGtfY21kX3NldF9haWQoaHcsIHZpZikpCisJCQlnb3RvIG13bDhrX2Jzc19pbmZvX2NoYW5nZWRfZXhpdDsKKworCQkvKgorCQkgKiBGaW5hbGl6ZSB0aGUgam9pbi4gIFRlbGwgcnggaGFuZGxlciB0byBwcm9jZXNzCisJCSAqIG5leHQgYmVhY29uIGZyb20gb3VyIEJTU0lELgorCQkgKi8KKwkJbWVtY3B5KHByaXYtPmNhcHR1cmVfYnNzaWQsCisJCQkJbXdsOGtfdmlmLT5ic3NpZCwgSUVFRTgwMjExX0FERFJfTEVOKTsKKwkJcHJpdi0+Y2FwdHVyZV9iZWFjb24gPSB0cnVlOworCX0gZWxzZSB7CisJCW13bDhrX2NtZF91cGRhdGVfc3RhX2RiKGh3LCB2aWYsIE1XTDhLX1NUQV9EQl9ERUxfRU5UUlkpOworCQltZW1zZXQoJm13bDhrX3ZpZi0+YnNzX2luZm8sIDAsCisJCQlzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZikpOworCQltZW1zZXQobXdsOGtfdmlmLT5ic3NpZCwgMCwgSUVFRTgwMjExX0FERFJfTEVOKTsKKwl9CisKK213bDhrX2Jzc19pbmZvX2NoYW5nZWRfZXhpdDoKKwlyYyA9IDA7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZCBtd2w4a19ic3NfaW5mb19jaGFuZ2VkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQkJICAgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqaW5mbywKKwkJCQkgICB1MzIgY2hhbmdlZCkKK3sKKwlzdHJ1Y3QgbXdsOGtfYnNzX2luZm9fY2hhbmdlZF93b3JrZXIgKndvcmtlcjsKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCWludCByYzsKKworCWlmICgoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0FTU09DKSA9PSAwKQorCQlyZXR1cm47CisKKwl3b3JrZXIgPSBremFsbG9jKHNpemVvZigqd29ya2VyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHdvcmtlciA9PSBOVUxMKQorCQlyZXR1cm47CisKKwl3b3JrZXItPnZpZiA9IHZpZjsKKwl3b3JrZXItPmluZm8gPSBpbmZvOworCXdvcmtlci0+Y2hhbmdlZCA9IGNoYW5nZWQ7CisJcmMgPSBtd2w4a19xdWV1ZV93b3JrKGh3LCAmd29ya2VyLT5oZWFkZXIsCisJCQkgICAgICBwcml2LT5jb25maWdfd3EsCisJCQkgICAgICBtd2w4a19ic3NfaW5mb19jaGFuZ2VkX3d0KTsKKwlrZnJlZSh3b3JrZXIpOworCWlmIChyYyA9PSAtRVRJTUVET1VUKQorCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgdGltZWQgb3V0XG4iLCBfX2Z1bmNfXyk7Cit9CisKK3N0cnVjdCBtd2w4a19jb25maWd1cmVfZmlsdGVyX3dvcmtlciB7CisJc3RydWN0IG13bDhrX3dvcmtfc3RydWN0IGhlYWRlcjsKKwl1bnNpZ25lZCBpbnQgY2hhbmdlZF9mbGFnczsKKwl1bnNpZ25lZCBpbnQgKnRvdGFsX2ZsYWdzOworCWludCBtY19jb3VudDsKKwlzdHJ1Y3QgZGV2X2FkZHJfbGlzdCAqbWNsaXN0OworfTsKKworI2RlZmluZSBNV0w4S19TVVBQT1JURURfSUZfRkxBR1MJRklGX0JDTl9QUkJSRVNQX1BST01JU0MKKworc3RhdGljIGludCBtd2w4a19jb25maWd1cmVfZmlsdGVyX3d0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd3QpCit7CisJc3RydWN0IG13bDhrX2NvbmZpZ3VyZV9maWx0ZXJfd29ya2VyICp3b3JrZXIgPQorCQkoc3RydWN0IG13bDhrX2NvbmZpZ3VyZV9maWx0ZXJfd29ya2VyICopd3Q7CisKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHdvcmtlci0+aGVhZGVyLmh3OworCXVuc2lnbmVkIGludCBjaGFuZ2VkX2ZsYWdzID0gd29ya2VyLT5jaGFuZ2VkX2ZsYWdzOworCXVuc2lnbmVkIGludCAqdG90YWxfZmxhZ3MgPSB3b3JrZXItPnRvdGFsX2ZsYWdzOworCWludCBtY19jb3VudCA9IHdvcmtlci0+bWNfY291bnQ7CisJc3RydWN0IGRldl9hZGRyX2xpc3QgKm1jbGlzdCA9IHdvcmtlci0+bWNsaXN0OworCisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlzdHJ1Y3QgbXdsOGtfdmlmICptdl92aWY7CisJaW50IHJjID0gMDsKKworCWlmIChjaGFuZ2VkX2ZsYWdzICYgRklGX0JDTl9QUkJSRVNQX1BST01JU0MpIHsKKwkJaWYgKCp0b3RhbF9mbGFncyAmIEZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDKQorCQkJcmMgPSBtd2w4a19jbWRfc2V0X3ByZV9zY2FuKGh3KTsKKwkJZWxzZSB7CisJCQltdl92aWYgPSBNV0w4S19WSUYocHJpdi0+dmlmKTsKKwkJCXJjID0gbXdsOGtfY21kX3NldF9wb3N0X3NjYW4oaHcsIG12X3ZpZi0+YnNzaWQpOworCQl9CisJfQorCisJaWYgKHJjKQorCQlnb3RvIG13bDhrX2NvbmZpZ3VyZV9maWx0ZXJfZXhpdDsKKwlpZiAobWNfY291bnQpIHsKKwkJbWNfY291bnQgPSBtY19jb3VudCA8IHByaXYtPm51bV9tY2FkZHJzID8KKwkJCQltY19jb3VudCA6IHByaXYtPm51bV9tY2FkZHJzOworCQlyYyA9IG13bDhrX2NtZF9tYWNfbXVsdGljYXN0X2FkcihodywgbWNfY291bnQsIG1jbGlzdCk7CisJCWlmIChyYykKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJIiVzKClFcnJvciBzZXR0aW5nIG11bHRpY2FzdCBhZGRyZXNzZXNcbiIsCisJCQlfX2Z1bmNfXyk7CisJfQorCittd2w4a19jb25maWd1cmVfZmlsdGVyX2V4aXQ6CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZCBtd2w4a19jb25maWd1cmVfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgIHVuc2lnbmVkIGludCBjaGFuZ2VkX2ZsYWdzLAorCQkJCSAgIHVuc2lnbmVkIGludCAqdG90YWxfZmxhZ3MsCisJCQkJICAgaW50IG1jX2NvdW50LAorCQkJCSAgIHN0cnVjdCBkZXZfYWRkcl9saXN0ICptY2xpc3QpCit7CisKKwlzdHJ1Y3QgbXdsOGtfY29uZmlndXJlX2ZpbHRlcl93b3JrZXIgKndvcmtlcjsKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCisJLyogQ2xlYXIgdW5zdXBwb3J0ZWQgZmVhdHVyZSBmbGFncyAqLworCSp0b3RhbF9mbGFncyAmPSBNV0w4S19TVVBQT1JURURfSUZfRkxBR1M7CisKKwlpZiAoIShjaGFuZ2VkX2ZsYWdzICYgTVdMOEtfU1VQUE9SVEVEX0lGX0ZMQUdTKSAmJiAhbWNfY291bnQpCisJCXJldHVybjsKKworCXdvcmtlciA9IGt6YWxsb2Moc2l6ZW9mKCp3b3JrZXIpLCBHRlBfQVRPTUlDKTsKKwlpZiAod29ya2VyID09IE5VTEwpCisJCXJldHVybjsKKworCXdvcmtlci0+aGVhZGVyLm9wdGlvbnMgPSBNV0w4S19XUV9RVUVVRV9PTkxZIHwgTVdMOEtfV1FfVFhfV0FJVF9FTVBUWTsKKwl3b3JrZXItPmNoYW5nZWRfZmxhZ3MgPSBjaGFuZ2VkX2ZsYWdzOworCXdvcmtlci0+dG90YWxfZmxhZ3MgPSB0b3RhbF9mbGFnczsKKwl3b3JrZXItPm1jX2NvdW50ID0gbWNfY291bnQ7CisJd29ya2VyLT5tY2xpc3QgPSBtY2xpc3Q7CisKKwltd2w4a19xdWV1ZV93b3JrKGh3LCAmd29ya2VyLT5oZWFkZXIsIHByaXYtPmNvbmZpZ193cSwKKwkJCSBtd2w4a19jb25maWd1cmVfZmlsdGVyX3d0KTsKK30KKworc3RydWN0IG13bDhrX3NldF9ydHNfdGhyZXNob2xkX3dvcmtlciB7CisJc3RydWN0IG13bDhrX3dvcmtfc3RydWN0IGhlYWRlcjsKKwl1MzIgdmFsdWU7Cit9OworCitzdGF0aWMgaW50IG13bDhrX3NldF9ydHNfdGhyZXNob2xkX3d0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd3QpCit7CisJc3RydWN0IG13bDhrX3NldF9ydHNfdGhyZXNob2xkX3dvcmtlciAqd29ya2VyID0KKwkJKHN0cnVjdCBtd2w4a19zZXRfcnRzX3RocmVzaG9sZF93b3JrZXIgKil3dDsKKworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gd29ya2VyLT5oZWFkZXIuaHc7CisJdTE2IHRocmVzaG9sZCA9ICh1MTYpKHdvcmtlci0+dmFsdWUpOworCWludCByYzsKKworCXJjID0gbXdsOGtfcnRzX3RocmVzaG9sZChodywgTVdMOEtfQ01EX1NFVCwgJnRocmVzaG9sZCk7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgbXdsOGtfc2V0X3J0c190aHJlc2hvbGQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiB2YWx1ZSkKK3sKKwlpbnQgcmM7CisJc3RydWN0IG13bDhrX3NldF9ydHNfdGhyZXNob2xkX3dvcmtlciAqd29ya2VyOworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisKKwl3b3JrZXIgPSBremFsbG9jKHNpemVvZigqd29ya2VyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHdvcmtlciA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXdvcmtlci0+dmFsdWUgPSB2YWx1ZTsKKworCXJjID0gbXdsOGtfcXVldWVfd29yayhodywgJndvcmtlci0+aGVhZGVyLAorCQkJICAgICAgcHJpdi0+Y29uZmlnX3dxLAorCQkJICAgICAgbXdsOGtfc2V0X3J0c190aHJlc2hvbGRfd3QpOworCWtmcmVlKHdvcmtlcik7CisKKwlpZiAocmMgPT0gLUVUSU1FRE9VVCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgdGltZWQgb3V0XG4iLCBfX2Z1bmNfXyk7CisJCXJjID0gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0cnVjdCBtd2w4a19jb25mX3R4X3dvcmtlciB7CisJc3RydWN0IG13bDhrX3dvcmtfc3RydWN0IGhlYWRlcjsKKwl1MTYgcXVldWU7CisJY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgKnBhcmFtczsKK307CisKK3N0YXRpYyBpbnQgbXdsOGtfY29uZl90eF93dChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnd0KQoreworCXN0cnVjdCBtd2w4a19jb25mX3R4X3dvcmtlciAqd29ya2VyID0KKwkoc3RydWN0IG13bDhrX2NvbmZfdHhfd29ya2VyICopd3Q7CisKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHdvcmtlci0+aGVhZGVyLmh3OworCXUxNiBxdWV1ZSA9IHdvcmtlci0+cXVldWU7CisJY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgKnBhcmFtcyA9IHdvcmtlci0+cGFyYW1zOworCisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlpbnQgcmMgPSAwOworCisJaWYgKHByaXYtPndtbV9tb2RlID09IE1XTDhLX1dNTV9ESVNBQkxFKQorCQlpZiAobXdsOGtfc2V0X3dtbShodywgTVdMOEtfV01NX0VOQUJMRSkpIHsKKwkJCXJjID0gLUVJTlZBTDsKKwkJCWdvdG8gbXdsOGtfY29uZl90eF9leGl0OworCX0KKworCWlmIChtd2w4a19zZXRfZWRjYV9wYXJhbXMoaHcsIEdFVF9UWFEocXVldWUpLCBwYXJhbXMtPmN3X21pbiwKKwkJcGFyYW1zLT5jd19tYXgsIHBhcmFtcy0+YWlmcywgcGFyYW1zLT50eG9wKSkKKwkJCXJjID0gLUVJTlZBTDsKK213bDhrX2NvbmZfdHhfZXhpdDoKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgbXdsOGtfY29uZl90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTE2IHF1ZXVlLAorCQkJIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfcGFyYW1zICpwYXJhbXMpCit7CisJaW50IHJjOworCXN0cnVjdCBtd2w4a19jb25mX3R4X3dvcmtlciAqd29ya2VyOworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisKKwl3b3JrZXIgPSBremFsbG9jKHNpemVvZigqd29ya2VyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHdvcmtlciA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXdvcmtlci0+cXVldWUgPSBxdWV1ZTsKKwl3b3JrZXItPnBhcmFtcyA9IHBhcmFtczsKKwlyYyA9IG13bDhrX3F1ZXVlX3dvcmsoaHcsICZ3b3JrZXItPmhlYWRlciwKKwkJCSAgICAgIHByaXYtPmNvbmZpZ193cSwgbXdsOGtfY29uZl90eF93dCk7CisJa2ZyZWUod29ya2VyKTsKKwlpZiAocmMgPT0gLUVUSU1FRE9VVCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgdGltZWQgb3V0XG4iLCBfX2Z1bmNfXyk7CisJCXJjID0gLUVJTlZBTDsKKwl9CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IG13bDhrX2dldF90eF9zdGF0cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfc3RhdHMgKnN0YXRzKQoreworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IG13bDhrX3R4X3F1ZXVlICp0eHE7CisJaW50IGluZGV4OworCisJc3Bpbl9sb2NrX2JoKCZwcml2LT50eF9sb2NrKTsKKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBNV0w4S19UWF9RVUVVRVM7IGluZGV4KyspIHsKKwkJdHhxID0gcHJpdi0+dHhxICsgaW5kZXg7CisJCW1lbWNweSgmc3RhdHNbaW5kZXhdLCAmdHhxLT50eF9zdGF0cywKKwkJCXNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3N0YXRzKSk7CisJfQorCXNwaW5fdW5sb2NrX2JoKCZwcml2LT50eF9sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IG13bDhrX2dldF9zdGF0c193b3JrZXIgeworCXN0cnVjdCBtd2w4a193b3JrX3N0cnVjdCBoZWFkZXI7CisJc3RydWN0IGllZWU4MDIxMV9sb3dfbGV2ZWxfc3RhdHMgKnN0YXRzOworfTsKKworc3RhdGljIGludCBtd2w4a19nZXRfc3RhdHNfd3Qoc3RydWN0IHdvcmtfc3RydWN0ICp3dCkKK3sKKwlzdHJ1Y3QgbXdsOGtfZ2V0X3N0YXRzX3dvcmtlciAqd29ya2VyID0KKwkJKHN0cnVjdCBtd2w4a19nZXRfc3RhdHNfd29ya2VyICopd3Q7CisKKwlyZXR1cm4gbXdsOGtfY21kXzgwMl8xMV9nZXRfc3RhdCh3b3JrZXItPmhlYWRlci5odywgd29ya2VyLT5zdGF0cyk7Cit9CisKK3N0YXRpYyBpbnQgbXdsOGtfZ2V0X3N0YXRzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJICAgc3RydWN0IGllZWU4MDIxMV9sb3dfbGV2ZWxfc3RhdHMgKnN0YXRzKQoreworCWludCByYzsKKwlzdHJ1Y3QgbXdsOGtfZ2V0X3N0YXRzX3dvcmtlciAqd29ya2VyOworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisKKwl3b3JrZXIgPSBremFsbG9jKHNpemVvZigqd29ya2VyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHdvcmtlciA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXdvcmtlci0+c3RhdHMgPSBzdGF0czsKKwlyYyA9IG13bDhrX3F1ZXVlX3dvcmsoaHcsICZ3b3JrZXItPmhlYWRlciwKKwkJCSAgICAgIHByaXYtPmNvbmZpZ193cSwgbXdsOGtfZ2V0X3N0YXRzX3d0KTsKKworCWtmcmVlKHdvcmtlcik7CisJaWYgKHJjID09IC1FVElNRURPVVQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlcygpIHRpbWVkIG91dFxuIiwgX19mdW5jX18pOworCQlyYyA9IC1FSU5WQUw7CisJfQorCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgbXdsOGtfb3BzID0geworCS50eAkJCT0gbXdsOGtfdHgsCisJLnN0YXJ0CQkJPSBtd2w4a19zdGFydCwKKwkuc3RvcAkJCT0gbXdsOGtfc3RvcCwKKwkuYWRkX2ludGVyZmFjZQkJPSBtd2w4a19hZGRfaW50ZXJmYWNlLAorCS5yZW1vdmVfaW50ZXJmYWNlCT0gbXdsOGtfcmVtb3ZlX2ludGVyZmFjZSwKKwkuY29uZmlnCQkJPSBtd2w4a19jb25maWcsCisJLmNvbmZpZ19pbnRlcmZhY2UJPSBtd2w4a19jb25maWdfaW50ZXJmYWNlLAorCS5ic3NfaW5mb19jaGFuZ2VkCT0gbXdsOGtfYnNzX2luZm9fY2hhbmdlZCwKKwkuY29uZmlndXJlX2ZpbHRlcgk9IG13bDhrX2NvbmZpZ3VyZV9maWx0ZXIsCisJLnNldF9ydHNfdGhyZXNob2xkCT0gbXdsOGtfc2V0X3J0c190aHJlc2hvbGQsCisJLmNvbmZfdHgJCT0gbXdsOGtfY29uZl90eCwKKwkuZ2V0X3R4X3N0YXRzCQk9IG13bDhrX2dldF90eF9zdGF0cywKKwkuZ2V0X3N0YXRzCQk9IG13bDhrX2dldF9zdGF0cywKK307CisKK3N0YXRpYyB2b2lkIG13bDhrX3R4X3JlY2xhaW1faGFuZGxlcih1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJaW50IGk7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSAoc3RydWN0IGllZWU4MDIxMV9odyAqKSBkYXRhOworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisKKwlzcGluX2xvY2tfYmgoJnByaXYtPnR4X2xvY2spOworCWZvciAoaSA9IDA7IGkgPCBNV0w4S19UWF9RVUVVRVM7IGkrKykKKwkJbXdsOGtfdHhxX3JlY2xhaW0oaHcsIGksIDApOworCisJaWYgKHByaXYtPnR4X3dhaXQgIT0gTlVMTCkgeworCQlpbnQgY291bnQgPSBtd2w4a190eHFfYnVzeShwcml2KTsKKwkJaWYgKGNvdW50ID09IDApIHsKKwkJCWNvbXBsZXRlKHByaXYtPnR4X3dhaXQpOworCQkJcHJpdi0+dHhfd2FpdCA9IE5VTEw7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfYmgoJnByaXYtPnR4X2xvY2spOworfQorCitzdGF0aWMgdm9pZCBtd2w4a19maW5hbGl6ZV9qb2luX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IG13bDhrX3ByaXYsIGZpbmFsaXplX2pvaW5fd29ya2VyKTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcHJpdi0+YmVhY29uX3NrYjsKKwl1OCBkdGltID0gKE1XTDhLX1ZJRihwcml2LT52aWYpKS0+YnNzX2luZm8uZHRpbV9wZXJpb2Q7CisKKwltd2w4a19maW5hbGl6ZV9qb2luKHByaXYtPmh3LCBza2ItPmRhdGEsIHNrYi0+bGVuLCBkdGltKTsKKwlkZXZfa2ZyZWVfc2tiKHNrYik7CisKKwlwcml2LT5iZWFjb25fc2tiID0gTlVMTDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgbXdsOGtfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkJIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdjsKKwlERUNMQVJFX01BQ19CVUYobWFjKTsKKwlpbnQgcmM7CisJaW50IGk7CisJdTggKmZ3OworCisJcmMgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKKwlpZiAocmMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IGVuYWJsZSBuZXcgUENJIGRldmljZVxuIiwKKwkJICAgICAgIE1XTDhLX05BTUUpOworCQlyZXR1cm4gcmM7CisJfQorCisJcmMgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBkZXYsIE1XTDhLX05BTUUpOworCWlmIChyYykgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3Qgb2J0YWluIFBDSSByZXNvdXJjZXNcbiIsCisJCSAgICAgICBNV0w4S19OQU1FKTsKKwkJcmV0dXJuIHJjOworCX0KKworCXBjaV9zZXRfbWFzdGVyKHBkZXYpOworCisJaHcgPSBpZWVlODAyMTFfYWxsb2NfaHcoc2l6ZW9mKCpwcml2KSwgJm13bDhrX29wcyk7CisJaWYgKGh3ID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogaWVlZTgwMjExIGFsbG9jIGZhaWxlZFxuIiwgTVdMOEtfTkFNRSk7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBlcnJfZnJlZV9yZWc7CisJfQorCisJcHJpdiA9IGh3LT5wcml2OworCXByaXYtPmh3ID0gaHc7CisJcHJpdi0+cGRldiA9IHBkZXY7CisJcHJpdi0+aG9zdGNtZF93YWl0ID0gTlVMTDsKKwlwcml2LT50eF93YWl0ID0gTlVMTDsKKwlwcml2LT5pbmNvbmZpZyA9IGZhbHNlOworCXByaXYtPndlcF9lbmFibGVkID0gMDsKKwlwcml2LT53bW1fbW9kZSA9IGZhbHNlOworCXByaXYtPnBlbmRpbmdfdHhfcGt0cyA9IDA7CisJc3RybmNweShwcml2LT5uYW1lLCBNV0w4S19OQU1FLCBzaXplb2YocHJpdi0+bmFtZSkpOworCisJc3Bpbl9sb2NrX2luaXQoJnByaXYtPmZ3X2xvY2spOworCisJU0VUX0lFRUU4MDIxMV9ERVYoaHcsICZwZGV2LT5kZXYpOworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBodyk7CisKKwlwcml2LT5yZWdzID0gcGNpX2lvbWFwKHBkZXYsIDEsIDB4MTAwMDApOworCWlmIChwcml2LT5yZWdzID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IG1hcCBkZXZpY2UgbWVtb3J5XG4iLCBwcml2LT5uYW1lKTsKKwkJZ290byBlcnJfaW91bm1hcDsKKwl9CisKKwltZW1jcHkocHJpdi0+Y2hhbm5lbHMsIG13bDhrX2NoYW5uZWxzLCBzaXplb2YobXdsOGtfY2hhbm5lbHMpKTsKKwlwcml2LT5iYW5kLmJhbmQgPSBJRUVFODAyMTFfQkFORF8yR0haOworCXByaXYtPmJhbmQuY2hhbm5lbHMgPSBwcml2LT5jaGFubmVsczsKKwlwcml2LT5iYW5kLm5fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKG13bDhrX2NoYW5uZWxzKTsKKwlwcml2LT5iYW5kLmJpdHJhdGVzID0gcHJpdi0+cmF0ZXM7CisJcHJpdi0+YmFuZC5uX2JpdHJhdGVzID0gQVJSQVlfU0laRShtd2w4a19yYXRlcyk7CisJaHctPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXSA9ICZwcml2LT5iYW5kOworCisJQlVJTERfQlVHX09OKHNpemVvZihwcml2LT5yYXRlcykgIT0gc2l6ZW9mKG13bDhrX3JhdGVzKSk7CisJbWVtY3B5KHByaXYtPnJhdGVzLCBtd2w4a19yYXRlcywgc2l6ZW9mKG13bDhrX3JhdGVzKSk7CisKKwkvKgorCSAqIEV4dHJhIGhlYWRyb29tIGlzIHRoZSBzaXplIG9mIHRoZSByZXF1aXJlZCBETUEgaGVhZGVyCisJICogbWludXMgdGhlIHNpemUgb2YgdGhlIHNtYWxsZXN0IDgwMi4xMSBmcmFtZSAoQ1RTIGZyYW1lKS4KKwkgKi8KKwlody0+ZXh0cmFfdHhfaGVhZHJvb20gPQorCQlzaXplb2Yoc3RydWN0IG13bDhrX2RtYV9kYXRhKSAtIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2N0cyk7CisKKwlody0+Y2hhbm5lbF9jaGFuZ2VfdGltZSA9IDEwOworCisJaHctPnF1ZXVlcyA9IE1XTDhLX1RYX1FVRVVFUzsKKworCWh3LT53aXBoeS0+aW50ZXJmYWNlX21vZGVzID0KKwkJQklUKE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHwgQklUKE5MODAyMTFfSUZUWVBFX01PTklUT1IpOworCisJLyogU2V0IHJzc2kgYW5kIG5vaXNlIHZhbHVlcyB0byBkQm0gKi8KKwlody0+ZmxhZ3MgfD0gKElFRUU4MDIxMV9IV19TSUdOQUxfREJNIHwgSUVFRTgwMjExX0hXX05PSVNFX0RCTSk7CisJaHctPnZpZl9kYXRhX3NpemUgPSBzaXplb2Yoc3RydWN0IG13bDhrX3ZpZik7CisJcHJpdi0+dmlmID0gTlVMTDsKKworCS8qIFNldCBkZWZhdWx0IHJhZGlvIHN0YXRlIGFuZCBwcmVhbWJsZSAqLworCXByaXYtPnJhZGlvX3ByZWFtYmxlID0gTVdMOEtfUkFESU9fREVGQVVMVF9QUkVBTUJMRTsKKwlwcml2LT5yYWRpb19zdGF0ZSA9IE1XTDhLX1JBRElPX0RJU0FCTEU7CisKKwkvKiBGaW5hbGl6ZSBqb2luIHdvcmtlciAqLworCUlOSVRfV09SSygmcHJpdi0+ZmluYWxpemVfam9pbl93b3JrZXIsIG13bDhrX2ZpbmFsaXplX2pvaW5fd29ya2VyKTsKKworCS8qIFRYIHJlY2xhaW0gdGFza2xldCAqLworCXRhc2tsZXRfaW5pdCgmcHJpdi0+dHhfcmVjbGFpbV90YXNrLAorCQkJbXdsOGtfdHhfcmVjbGFpbV9oYW5kbGVyLCAodW5zaWduZWQgbG9uZylodyk7CisJdGFza2xldF9kaXNhYmxlKCZwcml2LT50eF9yZWNsYWltX3Rhc2spOworCisJLyogQ29uZmlnIHdvcmt0aHJlYWQgKi8KKwlwcml2LT5jb25maWdfd3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgibXdsOGtfY29uZmlnIik7CisJaWYgKHByaXYtPmNvbmZpZ193cSA9PSBOVUxMKQorCQlnb3RvIGVycl9pb3VubWFwOworCisJLyogUG93ZXIgbWFuYWdlbWVudCBjb29raWUgKi8KKwlwcml2LT5jb29raWUgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwcml2LT5wZGV2LCA0LCAmcHJpdi0+Y29va2llX2RtYSk7CisJaWYgKHByaXYtPmNvb2tpZSA9PSBOVUxMKQorCQlnb3RvIGVycl9pb3VubWFwOworCisJcmMgPSBtd2w4a19yeHFfaW5pdChodywgMCk7CisJaWYgKHJjKQorCQlnb3RvIGVycl9pb3VubWFwOworCXJ4cV9yZWZpbGwoaHcsIDAsIElOVF9NQVgpOworCisJc3Bpbl9sb2NrX2luaXQoJnByaXYtPnR4X2xvY2spOworCisJZm9yIChpID0gMDsgaSA8IE1XTDhLX1RYX1FVRVVFUzsgaSsrKSB7CisJCXJjID0gbXdsOGtfdHhxX2luaXQoaHcsIGkpOworCQlpZiAocmMpCisJCQlnb3RvIGVycl9mcmVlX3F1ZXVlczsKKwl9CisKKwlpb3dyaXRlMzIoMCwgcHJpdi0+cmVncyArIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX1NUQVRVUyk7CisJcHJpdi0+aW50X21hc2sgPSAwOworCWlvd3JpdGUzMihwcml2LT5pbnRfbWFzaywgcHJpdi0+cmVncyArIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX01BU0spOworCWlvd3JpdGUzMigwLCBwcml2LT5yZWdzICsgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfQ0xFQVJfU0VMKTsKKwlpb3dyaXRlMzIoMHhmZmZmZmZmZiwgcHJpdi0+cmVncyArIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX1NUQVRVU19NQVNLKTsKKworCXJjID0gcmVxdWVzdF9pcnEocHJpdi0+cGRldi0+aXJxLCAmbXdsOGtfaW50ZXJydXB0LAorCQkJIElSUUZfU0hBUkVELCBNV0w4S19OQU1FLCBodyk7CisJaWYgKHJjKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byByZWdpc3RlciBJUlEgaGFuZGxlclxuIiwKKwkJICAgICAgIHByaXYtPm5hbWUpOworCQlnb3RvIGVycl9mcmVlX3F1ZXVlczsKKwl9CisKKwkvKiBSZXNldCBmaXJtd2FyZSBhbmQgaGFyZHdhcmUgKi8KKwltd2w4a19od19yZXNldChwcml2KTsKKworCS8qIEFzayB1c2VybGFuZCBob3RwbHVnIGRhZW1vbiBmb3IgdGhlIGRldmljZSBmaXJtd2FyZSAqLworCXJjID0gbXdsOGtfcmVxdWVzdF9maXJtd2FyZShwcml2LCAodTMyKWlkLT5kcml2ZXJfZGF0YSk7CisJaWYgKHJjKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEZpcm13YXJlIGZpbGVzIG5vdCBmb3VuZFxuIiwgcHJpdi0+bmFtZSk7CisJCWdvdG8gZXJyX2ZyZWVfaXJxOworCX0KKworCS8qIExvYWQgZmlybXdhcmUgaW50byBoYXJkd2FyZSAqLworCXJjID0gbXdsOGtfbG9hZF9maXJtd2FyZShwcml2KTsKKwlpZiAocmMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IHN0YXJ0IGZpcm13YXJlXG4iLCBwcml2LT5uYW1lKTsKKwkJZ290byBlcnJfc3RvcF9maXJtd2FyZTsKKwl9CisKKwkvKiBSZWNsYWltIG1lbW9yeSBvbmNlIGZpcm13YXJlIGlzIHN1Y2Nlc3NmdWxseSBsb2FkZWQgKi8KKwltd2w4a19yZWxlYXNlX2Zpcm13YXJlKHByaXYpOworCisJLyoKKwkgKiBUZW1wb3JhcmlseSBlbmFibGUgaW50ZXJydXB0cy4gIEluaXRpYWwgZmlybXdhcmUgaG9zdAorCSAqIGNvbW1hbmRzIHVzZSBpbnRlcnJ1cHRzIGFuZCBhdm9pZHMgcG9sbGluZy4gIERpc2FibGUKKwkgKiBpbnRlcnJ1cHRzIHdoZW4gZG9uZS4KKwkgKi8KKwlwcml2LT5pbnRfbWFzayB8PSBNV0w4S19BMkhfRVZFTlRTOworCisJaW93cml0ZTMyKHByaXYtPmludF9tYXNrLCBwcml2LT5yZWdzICsgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfTUFTSyk7CisKKwkvKiBHZXQgY29uZmlnIGRhdGEsIG1hYyBhZGRycyBldGMgKi8KKwlyYyA9IG13bDhrX2NtZF9nZXRfaHdfc3BlYyhodyk7CisJaWYgKHJjKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCBpbml0aWFsaXNlIGZpcm13YXJlXG4iLCBwcml2LT5uYW1lKTsKKwkJZ290byBlcnJfc3RvcF9maXJtd2FyZTsKKwl9CisKKwkvKiBUdXJuIHJhZGlvIG9mZiAqLworCXJjID0gbXdsOGtfY21kXzgwMl8xMV9yYWRpb19jb250cm9sKGh3LCBNV0w4S19SQURJT19ESVNBQkxFKTsKKwlpZiAocmMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IGRpc2FibGVcbiIsIHByaXYtPm5hbWUpOworCQlnb3RvIGVycl9zdG9wX2Zpcm13YXJlOworCX0KKworCS8qIERpc2FibGUgaW50ZXJydXB0cyAqLworCXNwaW5fbG9ja19pcnEoJnByaXYtPnR4X2xvY2spOworCWlvd3JpdGUzMigwLCBwcml2LT5yZWdzICsgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfTUFTSyk7CisJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT50eF9sb2NrKTsKKwlmcmVlX2lycShwcml2LT5wZGV2LT5pcnEsIGh3KTsKKworCXJjID0gaWVlZTgwMjExX3JlZ2lzdGVyX2h3KGh3KTsKKwlpZiAocmMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IHJlZ2lzdGVyIGRldmljZVxuIiwgcHJpdi0+bmFtZSk7CisJCWdvdG8gZXJyX3N0b3BfZmlybXdhcmU7CisJfQorCisJZncgPSAodTggKikmcHJpdi0+ZndfcmV2OworCXByaW50ayhLRVJOX0lORk8gIiVzOiA4OFcldSAlc1xuIiwgcHJpdi0+bmFtZSwgcHJpdi0+cGFydF9udW0sCisJCU1XTDhLX0RFU0MpOworCXByaW50ayhLRVJOX0lORk8gIiVzOiBEcml2ZXIgVmVyOiVzICBGaXJtd2FyZSBWZXI6JXUuJXUuJXUuJXVcbiIsCisJCXByaXYtPm5hbWUsIE1XTDhLX1ZFUlNJT04sIGZ3WzNdLCBmd1syXSwgZndbMV0sIGZ3WzBdKTsKKwlwcmludGsoS0VSTl9JTkZPICIlczogTUFDIEFkZHJlc3M6ICVzXG4iLCBwcml2LT5uYW1lLAorCSAgICAgICBwcmludF9tYWMobWFjLCBody0+d2lwaHktPnBlcm1fYWRkcikpOworCisJcmV0dXJuIDA7CisKK2Vycl9zdG9wX2Zpcm13YXJlOgorCW13bDhrX2h3X3Jlc2V0KHByaXYpOworCW13bDhrX3JlbGVhc2VfZmlybXdhcmUocHJpdik7CisKK2Vycl9mcmVlX2lycToKKwlzcGluX2xvY2tfaXJxKCZwcml2LT50eF9sb2NrKTsKKwlpb3dyaXRlMzIoMCwgcHJpdi0+cmVncyArIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX01BU0spOworCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+dHhfbG9jayk7CisJZnJlZV9pcnEocHJpdi0+cGRldi0+aXJxLCBodyk7CisKK2Vycl9mcmVlX3F1ZXVlczoKKwlmb3IgKGkgPSAwOyBpIDwgTVdMOEtfVFhfUVVFVUVTOyBpKyspCisJCW13bDhrX3R4cV9kZWluaXQoaHcsIGkpOworCW13bDhrX3J4cV9kZWluaXQoaHcsIDApOworCitlcnJfaW91bm1hcDoKKwlpZiAocHJpdi0+Y29va2llICE9IE5VTEwpCisJCXBjaV9mcmVlX2NvbnNpc3RlbnQocHJpdi0+cGRldiwgNCwKKwkJCQlwcml2LT5jb29raWUsIHByaXYtPmNvb2tpZV9kbWEpOworCisJaWYgKHByaXYtPnJlZ3MgIT0gTlVMTCkKKwkJcGNpX2lvdW5tYXAocGRldiwgcHJpdi0+cmVncyk7CisKKwlpZiAocHJpdi0+Y29uZmlnX3dxICE9IE5VTEwpCisJCWRlc3Ryb3lfd29ya3F1ZXVlKHByaXYtPmNvbmZpZ193cSk7CisKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJaWVlZTgwMjExX2ZyZWVfaHcoaHcpOworCitlcnJfZnJlZV9yZWc6CisJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBtd2w4a19yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJcHJpbnRrKEtFUk5fRVJSICI9PT0+JXMoJXUpXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgbXdsOGtfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXY7CisJaW50IGk7CisKKwlpZiAoaHcgPT0gTlVMTCkKKwkJcmV0dXJuOworCXByaXYgPSBody0+cHJpdjsKKworCWllZWU4MDIxMV9zdG9wX3F1ZXVlcyhodyk7CisKKwkvKiBSZW1vdmUgdHggcmVjbGFpbSB0YXNrbGV0ICovCisJdGFza2xldF9raWxsKCZwcml2LT50eF9yZWNsYWltX3Rhc2spOworCisJLyogU3RvcCBjb25maWcgdGhyZWFkICovCisJZGVzdHJveV93b3JrcXVldWUocHJpdi0+Y29uZmlnX3dxKTsKKworCS8qIFN0b3AgaGFyZHdhcmUgKi8KKwltd2w4a19od19yZXNldChwcml2KTsKKworCS8qIFJldHVybiBhbGwgc2ticyB0byBtYWM4MDIxMSAqLworCWZvciAoaSA9IDA7IGkgPCBNV0w4S19UWF9RVUVVRVM7IGkrKykKKwkJbXdsOGtfdHhxX3JlY2xhaW0oaHcsIGksIDEpOworCisJaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcoaHcpOworCisJZm9yIChpID0gMDsgaSA8IE1XTDhLX1RYX1FVRVVFUzsgaSsrKQorCQltd2w4a190eHFfZGVpbml0KGh3LCBpKTsKKworCW13bDhrX3J4cV9kZWluaXQoaHcsIDApOworCisJcGNpX2ZyZWVfY29uc2lzdGVudChwcml2LT5wZGV2LCA0LAorCQkJCXByaXYtPmNvb2tpZSwgcHJpdi0+Y29va2llX2RtYSk7CisKKwlwY2lfaW91bm1hcChwZGV2LCBwcml2LT5yZWdzKTsKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJaWVlZTgwMjExX2ZyZWVfaHcoaHcpOworCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbXdsOGtfZHJpdmVyID0geworCS5uYW1lCQk9IE1XTDhLX05BTUUsCisJLmlkX3RhYmxlCT0gbXdsOGtfdGFibGUsCisJLnByb2JlCQk9IG13bDhrX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AobXdsOGtfcmVtb3ZlKSwKKwkuc2h1dGRvd24JPSBfX2RldmV4aXRfcChtd2w4a19zaHV0ZG93biksCit9OworCitzdGF0aWMgaW50IF9faW5pdCBtd2w4a19pbml0KHZvaWQpCit7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJm13bDhrX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBtd2w4a19leGl0KHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZtd2w4a19kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChtd2w4a19pbml0KTsKK21vZHVsZV9leGl0KG13bDhrX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbmV0d2F2ZV9jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbmV0d2F2ZV9jcy5jCmluZGV4IDI0Y2FlYzYuLmQ2M2M4OTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL25ldHdhdmVfY3MuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9uZXR3YXZlX2NzLmMKQEAgLTIxMCwxMCArMjEwLDYgQEAKIHN0YXRpYyBpcnFyZXR1cm5fdCBuZXR3YXZlX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwogc3RhdGljIHZvaWQgbmV0d2F2ZV93YXRjaGRvZyhzdHJ1Y3QgbmV0X2RldmljZSAqKTsKIAotLyogU3RhdGlzdGljcyAqLwotc3RhdGljIHZvaWQgdXBkYXRlX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpuZXR3YXZlX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLQogLyogV2lyZWxlc3MgZXh0ZW5zaW9ucyAqLwogc3RhdGljIHN0cnVjdCBpd19zdGF0aXN0aWNzKiBuZXR3YXZlX2dldF93aXJlbGVzc19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIApAQCAtMjc1LDE0ICsyNzEsOSBAQAogICAgIGludCAgICAgICAgbGFzdEV4ZWM7CiAgICAgc3RydWN0IHRpbWVyX2xpc3QgICAgICB3YXRjaGRvZzsJLyogVG8gYXZvaWQgYmxvY2tpbmcgc3RhdGUgKi8KICAgICBzdHJ1Y3Qgc2l0ZV9zdXJ2ZXkgICAgIG5zczsKLSAgICBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKICAgICBzdHJ1Y3QgaXdfc3RhdGlzdGljcyAgIGl3X3N0YXRzOyAgICAvKiBXaXJlbGVzcyBzdGF0cyAqLwogfSBuZXR3YXZlX3ByaXZhdGU7CiAKLSNpZmRlZiBORVRXQVZFX1NUQVRTCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKm5ldHdhdmVfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotI2VuZGlmCi0KIC8qCiAgKiBUaGUgTmV0d2F2ZSBjYXJkIGlzIGxpdHRsZS1lbmRpYW4sIHNvIHdvbid0IHdvcmsgZm9yIGJpZyBlbmRpYW4KICAqIHN5c3RlbXMuCkBAIC0zNjQsNiArMzU1LDE3IEBACiAgICAgcmV0dXJuICZwcml2LT5pd19zdGF0czsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBuZXR3YXZlX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCSAJPSBuZXR3YXZlX29wZW4sCisJLm5kb19zdG9wCQk9IG5ldHdhdmVfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IG5ldHdhdmVfc3RhcnRfeG1pdCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IHNldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gbmV0d2F2ZV93YXRjaGRvZywKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogLyoKICAqIEZ1bmN0aW9uIG5ldHdhdmVfYXR0YWNoICh2b2lkKQogICoKQEAgLTQxMiwxNyArNDE0LDEyIEBACiAgICAgc3Bpbl9sb2NrX2luaXQoJnByaXYtPnNwaW5sb2NrKTsKIAogICAgIC8qIE5ldHdhdmUgc3BlY2lmaWMgZW50cmllcyBpbiB0aGUgZGV2aWNlIHN0cnVjdHVyZSAqLwotICAgIGRldi0+aGFyZF9zdGFydF94bWl0ID0gJm5ldHdhdmVfc3RhcnRfeG1pdDsKLSAgICBkZXYtPmdldF9zdGF0cyAgPSAmbmV0d2F2ZV9nZXRfc3RhdHM7Ci0gICAgZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSAmc2V0X211bHRpY2FzdF9saXN0OworICAgIGRldi0+bmV0ZGV2X29wcyA9ICZuZXR3YXZlX25ldGRldl9vcHM7CiAgICAgLyogd2lyZWxlc3MgZXh0ZW5zaW9ucyAqLwotICAgIGRldi0+d2lyZWxlc3NfaGFuZGxlcnMgPSAoc3RydWN0IGl3X2hhbmRsZXJfZGVmICopJm5ldHdhdmVfaGFuZGxlcl9kZWY7CisgICAgZGV2LT53aXJlbGVzc19oYW5kbGVycyA9ICZuZXR3YXZlX2hhbmRsZXJfZGVmOwogCi0gICAgZGV2LT50eF90aW1lb3V0ID0gJm5ldHdhdmVfd2F0Y2hkb2c7CiAgICAgZGV2LT53YXRjaGRvZ190aW1lbyA9IFRYX1RJTUVPVVQ7CiAKLSAgICBkZXYtPm9wZW4gPSAmbmV0d2F2ZV9vcGVuOwotICAgIGRldi0+c3RvcCA9ICZuZXR3YXZlX2Nsb3NlOwogICAgIGxpbmstPmlycS5JbnN0YW5jZSA9IGRldjsKIAogICAgIHJldHVybiBuZXR3YXZlX3BjbWNpYV9jb25maWcoIGxpbmspOwpAQCAtOTg4LDcgKzk4NSw3IEBACiAJcmV0dXJuIDE7CiAgICAgfQogCi0gICAgcHJpdi0+c3RhdHMudHhfYnl0ZXMgKz0gbGVuOworICAgIGRldi0+c3RhdHMudHhfYnl0ZXMgKz0gbGVuOwogCiAgICAgREVCVUcoMywgIlRyYW5zbWl0dGluZyB3aXRoIFNQQ1EgJXggU1BVICV4IExJRiAleCBJU1BMUSAleFxuIiwKIAkgIHJlYWRiKHJhbUJhc2UgKyBORVRXQVZFX0VSRUdfU1BDUSksCkBAIC0xMTA3LDExICsxMTA0LDExIEBACiAJICAgIHJzZXIgPSByZWFkYihyYW1CYXNlICsgTkVUV0FWRV9FUkVHX1JTRVIpOwkJCQogCSAgICAKIAkgICAgaWYgKHJzZXIgJiAweDA0KSB7Ci0JCSsrcHJpdi0+c3RhdHMucnhfZHJvcHBlZDsgCi0JCSsrcHJpdi0+c3RhdHMucnhfY3JjX2Vycm9yczsKKwkJKytkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQ7CisJCSsrZGV2LT5zdGF0cy5yeF9jcmNfZXJyb3JzOwogCSAgICB9CiAJICAgIGlmIChyc2VyICYgMHgwMikKLQkJKytwcml2LT5zdGF0cy5yeF9mcmFtZV9lcnJvcnM7CisJCSsrZGV2LT5zdGF0cy5yeF9mcmFtZV9lcnJvcnM7CiAJCQkKIAkgICAgLyogQ2xlYXIgdGhlIFJ4RXJyIGJpdCBpbiBSU0VSLiBSU0VSKzQgaXMgdGhlCiAJICAgICAqIHdyaXRlIHBhcnQuIEFsc28gY2xlYXIgdGhlIFJ4Q1JDICgweDA0KSBhbmQgCkBAIC0xMTI1LDggKzExMjIsOCBAQAogCSAgICB3YWl0X1dPQyhpb2Jhc2UpOwogCSAgICB3cml0ZWIoMHg0MCwgcmFtQmFzZSArIE5FVFdBVkVfRVJFR19BU0NDKTsKIAotCSAgICAvKiBSZW1lbWJlciB0byBjb3VudCB1cCBwcml2LT5zdGF0cyBvbiBlcnJvciBwYWNrZXRzICovCi0JICAgICsrcHJpdi0+c3RhdHMucnhfZXJyb3JzOworCSAgICAvKiBSZW1lbWJlciB0byBjb3VudCB1cCBkZXYtPnN0YXRzIG9uIGVycm9yIHBhY2tldHMgKi8KKwkgICAgKytkZXYtPnN0YXRzLnJ4X2Vycm9yczsKIAl9CiAJLyogVHhETiAqLwogCWlmIChzdGF0dXMgJiAweDIwKSB7CkBAIC0xMTQwLDE3ICsxMTM3LDE3IEBACiAJCS8qIFRyYW5zbWl0dGluZyB3YXMgb2theSwgY2xlYXIgYml0cyAqLwogCQl3YWl0X1dPQyhpb2Jhc2UpOwogCQl3cml0ZWIoMHgyZiwgcmFtQmFzZSArIE5FVFdBVkVfRVJFR19UU0VSICsgNCk7Ci0JCSsrcHJpdi0+c3RhdHMudHhfcGFja2V0czsKKwkJKytkZXYtPnN0YXRzLnR4X3BhY2tldHM7CiAJICAgIH0KIAkJCQogCSAgICBpZiAodHhTdGF0dXMgJiAweGQwKSB7CiAJCWlmICh0eFN0YXR1cyAmIDB4ODApIHsKLQkJICAgICsrcHJpdi0+c3RhdHMuY29sbGlzaW9uczsgLyogQmVjYXVzZSBvZiAvcHJvYy9uZXQvZGV2Ki8KLQkJICAgIC8qICsrcHJpdi0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnM7ICovCisJCSAgICArK2Rldi0+c3RhdHMuY29sbGlzaW9uczsgLyogQmVjYXVzZSBvZiAvcHJvYy9uZXQvZGV2Ki8KKwkJICAgIC8qICsrZGV2LT5zdGF0cy50eF9hYm9ydGVkX2Vycm9yczsgKi8KIAkJICAgIC8qIHByaW50aygiQ29sbGlzaW9uLiAlbGRcbiIsIGppZmZpZXMgLSBkZXYtPnRyYW5zX3N0YXJ0KTsgKi8KIAkJfQogCQlpZiAodHhTdGF0dXMgJiAweDQwKSAKLQkJICAgICsrcHJpdi0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnM7CisJCSAgICArK2Rldi0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnM7CiAJCS8qIDB4ODAgVHhHVSBUcmFuc21pdCBnaXZldXAgLSBuaW5lIHRpbWVzIGFuZCBubyBsdWNrCiAJCSAqIDB4NDAgVHhOT0FQIE5vIGFjY2VzcyBwb2ludC4gRGlzY2FyZGVkIHBhY2tldC4KIAkJICogMHgxMCBUeEVyciBUcmFuc21pdCBlcnJvci4gQWx3YXlzIHNldCB3aGVuIApAQCAtMTE2Myw3ICsxMTYwLDcgQEAKIAkJLyogQ2xlYXIgb3V0IFR4R1UsIFR4Tk9BUCwgVHhFcnIgYW5kIFR4VHJ5cyAqLwogCQl3YWl0X1dPQyhpb2Jhc2UpOwogCQl3cml0ZWIoMHhkZiAmIHR4U3RhdHVzLCByYW1CYXNlK05FVFdBVkVfRVJFR19UU0VSKzQpOwotCQkrK3ByaXYtPnN0YXRzLnR4X2Vycm9yczsKKwkJKytkZXYtPnN0YXRzLnR4X2Vycm9yczsKIAkgICAgfQogCSAgICBERUJVRygzLCAiTmV3IHN0YXR1cyBpcyBUU0VSICV4IEFTUiAleFxuIiwKIAkJICByZWFkYihyYW1CYXNlICsgTkVUV0FWRV9FUkVHX1RTRVIpLApAQCAtMTE5Nyw0MCArMTE5NCw2IEBACiAgICAgbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwogfSAvKiBuZXR3YXZlX3dhdGNoZG9nICovCiAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqbmV0d2F2ZV9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikgewotICAgIG5ldHdhdmVfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0KLSAgICB1cGRhdGVfc3RhdHMoZGV2KTsKLQotICAgIERFQlVHKDIsICJuZXR3YXZlOiBTUENRICV4IFNQVSAleCBMSUYgJXggSVNQTFEgJXggTUhTICV4IHJ4dHggJXgiCi0JICAiICV4IHR4ICV4ICV4ICV4ICV4XG4iLCAKLQkgIHJlYWRiKHByaXYtPnJhbUJhc2UgKyBORVRXQVZFX0VSRUdfU1BDUSksCi0JICByZWFkYihwcml2LT5yYW1CYXNlICsgTkVUV0FWRV9FUkVHX1NQVSksCi0JICByZWFkYihwcml2LT5yYW1CYXNlICsgTkVUV0FWRV9FUkVHX0xJRiksCi0JICByZWFkYihwcml2LT5yYW1CYXNlICsgTkVUV0FWRV9FUkVHX0lTUExRKSwKLQkgIHJlYWRiKHByaXYtPnJhbUJhc2UgKyBORVRXQVZFX0VSRUdfTUhTKSwKLQkgIHJlYWRiKHByaXYtPnJhbUJhc2UgKyBORVRXQVZFX0VSRUdfRUMgKyAweGUpLAotCSAgcmVhZGIocHJpdi0+cmFtQmFzZSArIE5FVFdBVkVfRVJFR19FQyArIDB4ZiksCi0JICByZWFkYihwcml2LT5yYW1CYXNlICsgTkVUV0FWRV9FUkVHX0VDICsgMHgxOCksCi0JICByZWFkYihwcml2LT5yYW1CYXNlICsgTkVUV0FWRV9FUkVHX0VDICsgMHgxOSksCi0JICByZWFkYihwcml2LT5yYW1CYXNlICsgTkVUV0FWRV9FUkVHX0VDICsgMHgxYSksCi0JICByZWFkYihwcml2LT5yYW1CYXNlICsgTkVUV0FWRV9FUkVHX0VDICsgMHgxYikpOwotCi0gICAgcmV0dXJuICZwcml2LT5zdGF0czsKLX0KLQotc3RhdGljIHZvaWQgdXBkYXRlX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIHsKLSAgICAvL3Vuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0vKiAgICAgbmV0d2F2ZV9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsgKi8KLQotICAgIC8vc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnNwaW5sb2NrLCBmbGFncyk7Ci0KLS8qICAgIHByaXYtPnN0YXRzLnJ4X3BhY2tldHMgPSByZWFkYihwcml2LT5yYW1CYXNlICsgMHgxOGUpOyAKLSAgICBwcml2LT5zdGF0cy50eF9wYWNrZXRzID0gcmVhZGIocHJpdi0+cmFtQmFzZSArIDB4MThmKTsgKi8KLQotICAgIC8vc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+c3BpbmxvY2ssIGZsYWdzKTsKLX0KLQogc3RhdGljIGludCBuZXR3YXZlX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAgICAgbmV0d2F2ZV9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTEyNzQsNyArMTIzNyw3IEBACiAJaWYgKHNrYiA9PSBOVUxMKSB7CiAJICAgIERFQlVHKDEsICJuZXR3YXZlX3J4OiBDb3VsZCBub3QgYWxsb2NhdGUgYW4gc2tfYnVmZiBvZiAiCiAJCSAgImxlbmd0aCAlZFxuIiwgcmN2TGVuKTsKLQkgICAgKytwcml2LT5zdGF0cy5yeF9kcm9wcGVkOyAKKwkgICAgKytkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQ7CiAJICAgIC8qIFRlbGwgdGhlIGFkYXB0ZXIgdG8gc2tpcCB0aGUgcGFja2V0ICovCiAJICAgIHdhaXRfV09DKGlvYmFzZSk7CiAJICAgIHdyaXRlYihORVRXQVZFX0NNRF9TUlAsIHJhbUJhc2UgKyBORVRXQVZFX0VSRUdfQ0IgKyAwKTsKQEAgLTEzMDcsOCArMTI3MCw4IEBACiAJLyogUXVldWUgcGFja2V0IGZvciBuZXR3b3JrIGxheWVyICovCiAJbmV0aWZfcngoc2tiKTsKIAotCXByaXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKLQlwcml2LT5zdGF0cy5yeF9ieXRlcyArPSByY3ZMZW47CisJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSByY3ZMZW47CiAKIAkvKiBHb3QgdGhlIHBhY2tldCwgdGVsbCB0aGUgYWRhcHRlciB0byBza2lwIGl0ICovCiAJd2FpdF9XT0MoaW9iYXNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDQxMWViCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9LY29uZmlnCkBAIC0wLDAgKzEsMTIwIEBACitjb25maWcgSEVSTUVTCisJdHJpc3RhdGUgIkhlcm1lcyBjaGlwc2V0IDgwMi4xMWIgc3VwcG9ydCAoT3Jpbm9jby9QcmlzbTIvU3ltYm9sKSIKKwlkZXBlbmRzIG9uIChQUENfUE1BQyB8fCBQQ0kgfHwgUENNQ0lBKSAmJiBXTEFOXzgwMjExCisJc2VsZWN0IFdJUkVMRVNTX0VYVAorCXNlbGVjdCBGV19MT0FERVIKKwlzZWxlY3QgQ1JZUFRPCisJc2VsZWN0IENSWVBUT19NSUNIQUVMX01JQworCS0tLWhlbHAtLS0KKwkgIEEgZHJpdmVyIGZvciA4MDIuMTFiIHdpcmVsZXNzIGNhcmRzIGJhc2VkIG9uIHRoZSAiSGVybWVzIiBvcgorCSAgSW50ZXJzaWwgSEZBMzg0eCAoUHJpc20gMikgTUFDIGNvbnRyb2xsZXIuICBUaGlzIGluY2x1ZGVzIHRoZSB2YXN0CisJICBtYWpvcml0eSBvZiB0aGUgUENNQ0lBIDgwMi4xMWIgY2FyZHMgKHdoaWNoIGFyZSBuZWFybHkgYWxsIHJlYmFkZ2VzKQorCSAgLSBleGNlcHQgZm9yIHRoZSBDaXNjby9BaXJvbmV0IGNhcmRzLiAgQ2FyZHMgc3VwcG9ydGVkIGluY2x1ZGUgdGhlCisJICBBcHBsZSBBaXJwb3J0IChub3QgYSBQQ01DSUEgY2FyZCksIFdhdmVsYW5JRUVFL09yaW5vY28sCisJICBDYWJsZXRyb24vRW50ZXJhU3lzIFJvYW1hYm91dCwgRUxTQSBBaXJMYW5jZXIsIE1FTENPIEJ1ZmZhbG8sIEF2YXlhLAorCSAgSUJNIEhpZ2ggUmF0ZSBXaXJlbGVzcywgRmFycmFsb24gU3l5bGluZSwgU2Ftc3VuZyBNYWdpY0xBTiwgTmV0Z2VhcgorCSAgTUE0MDEsIExpbmtTeXMgV1BDLTExLCBELUxpbmsgRFdMLTY1MCwgM0NvbSBBaXJDb25uZWN0LCBJbnRlbAorCSAgSVBXMjAxMSwgYW5kIFN5bWJvbCBTcGVjdHJ1bTI0IEhpZ2ggUmF0ZSBhbW9uZ3N0IG90aGVycy4KKworCSAgVGhpcyBvcHRpb24gaW5jbHVkZXMgdGhlIGd1dHMgb2YgdGhlIGRyaXZlciwgYnV0IGluIG9yZGVyIHRvCisJICBhY3R1YWxseSB1c2UgYSBjYXJkIHlvdSB3aWxsIGFsc28gbmVlZCB0byBlbmFibGUgc3VwcG9ydCBmb3IgUENNQ0lBCisJICBIZXJtZXMgY2FyZHMsIFBMWDkwNTIgYmFzZWQgUENJIGFkYXB0b3JzIG9yIHRoZSBBcHBsZSBBaXJwb3J0IGJlbG93LgorCisJICBZb3Ugd2lsbCBhbHNvIHZlcnkgbGlrZWx5IGFsc28gbmVlZCB0aGUgV2lyZWxlc3MgVG9vbHMgaW4gb3JkZXIgdG8KKwkgIGNvbmZpZ3VyZSB5b3VyIGNhcmQgYW5kIHRoYXQgL2V0Yy9wY21jaWEvd2lyZWxlc3Mub3B0cyB3b3JrcyA6CisJICA8aHR0cDovL3d3dy5ocGwuaHAuY29tL3BlcnNvbmFsL0plYW5fVG91cnJpbGhlcy9MaW51eC9Ub29scy5odG1sPgorCitjb25maWcgSEVSTUVTX0NBQ0hFX0ZXX09OX0lOSVQKKwlib29sICJDYWNoZSBIZXJtZXMgZmlybXdhcmUgb24gZHJpdmVyIGluaXRpYWxpc2F0aW9uIgorCWRlcGVuZHMgb24gSEVSTUVTCisJZGVmYXVsdCB5CisJLS0taGVscC0tLQorCSAgU2F5IFkgdG8gY2FjaGUgYW55IGZpcm13YXJlIHJlcXVpcmVkIGJ5IHRoZSBIZXJtZXMgZHJpdmVycworCSAgb24gc3RhcnR1cC4gIFRoZSBmaXJtd2FyZSB3aWxsIHJlbWFpbiBjYWNoZWQgdW50aWwgdGhlCisJICBkcml2ZXIgaXMgdW5sb2FkZWQuICBUaGUgY2FjaGUgdXNlcyA2NEsgb2YgUkFNLgorCisJICBPdGhlcndpc2UgbG9hZCB0aGUgZmlybXdhcmUgZnJvbSB1c2Vyc3BhY2UgYXMgcmVxdWlyZWQuICBJbgorCSAgdGhpcyBjYXNlIHRoZSBkcml2ZXIgc2hvdWxkIGJlIHVubG9hZGVkIGFuZCByZXN0YXJ0ZWQKKwkgIHdoZW5ldmVyIHRoZSBmaXJtd2FyZSBpcyBjaGFuZ2VkLgorCisJICBJZiB5b3UgYXJlIG5vdCBzdXJlLCBzYXkgWS4KKworY29uZmlnIEFQUExFX0FJUlBPUlQKKwl0cmlzdGF0ZSAiQXBwbGUgQWlycG9ydCBzdXBwb3J0IChidWlsdC1pbikiCisJZGVwZW5kcyBvbiBQUENfUE1BQyAmJiBIRVJNRVMKKwloZWxwCisJICBTYXkgWSBoZXJlIHRvIHN1cHBvcnQgdGhlIEFpcnBvcnQgODAyLjExYiB3aXJlbGVzcyBFdGhlcm5ldCBoYXJkd2FyZQorCSAgYnVpbHQgaW50byB0aGUgTWFjaW50b3NoIGlCb29rIGFuZCBvdGhlciByZWNlbnQgUG93ZXJQQy1iYXNlZAorCSAgTWFjaW50b3NoIG1hY2hpbmVzLiBUaGlzIGlzIGVzc2VudGlhbGx5IGEgTHVjZW50IE9yaW5vY28gY2FyZCB3aXRoCisJICBhIG5vbi1zdGFuZGFyZCBpbnRlcmZhY2UuCisKKwkgIFRoaXMgZHJpdmVyIGRvZXMgbm90IHN1cHBvcnQgdGhlIEFpcnBvcnQgRXh0cmVtZSAoODAyLjExYi9nKS4gVXNlCisJICB0aGUgQkNNNDN4eCBkcml2ZXIgZm9yIEFpcnBvcnQgRXh0cmVtZSBjYXJkcy4KKworY29uZmlnIFBMWF9IRVJNRVMKKwl0cmlzdGF0ZSAiSGVybWVzIGluIFBMWDkwNTIgYmFzZWQgUENJIGFkYXB0b3Igc3VwcG9ydCAoTmV0Z2VhciBNQTMwMSBldGMuKSIKKwlkZXBlbmRzIG9uIFBDSSAmJiBIRVJNRVMKKwloZWxwCisJICBFbmFibGUgc3VwcG9ydCBmb3IgUENNQ0lBIGNhcmRzIHN1cHBvcnRlZCBieSB0aGUgIkhlcm1lcyIgKGFrYQorCSAgb3Jpbm9jbykgZHJpdmVyIHdoZW4gdXNlZCBpbiBQTFg5MDUyIGJhc2VkIFBDSSBhZGFwdG9ycy4gIFRoZXNlCisJICBhZGFwdG9ycyBhcmUgbm90IGEgZnVsbCBQQ01DSUEgY29udHJvbGxlciBidXQgYWN0IGFzIGEgbW9yZSBsaW1pdGVkCisJICBQQ0kgPC0+IFBDTUNJQSBicmlkZ2UuICBTZXZlcmFsIHZlbmRvcnMgc2VsbCBzdWNoIGFkYXB0b3JzIHNvIHRoYXQKKwkgIDgwMi4xMWIgUENNQ0lBIGNhcmRzIGNhbiBiZSB1c2VkIGluIGRlc2t0b3AgbWFjaGluZXMuICBUaGUgTmV0Z2VhcgorCSAgTUEzMDEgaXMgc3VjaCBhbiBhZGFwdG9yLgorCitjb25maWcgVE1EX0hFUk1FUworCXRyaXN0YXRlICJIZXJtZXMgaW4gVE1ENzE2MCBiYXNlZCBQQ0kgYWRhcHRvciBzdXBwb3J0IgorCWRlcGVuZHMgb24gUENJICYmIEhFUk1FUworCWhlbHAKKwkgIEVuYWJsZSBzdXBwb3J0IGZvciBQQ01DSUEgY2FyZHMgc3VwcG9ydGVkIGJ5IHRoZSAiSGVybWVzIiAoYWthCisJICBvcmlub2NvKSBkcml2ZXIgd2hlbiB1c2VkIGluIFRNRDcxNjAgYmFzZWQgUENJIGFkYXB0b3JzLiAgVGhlc2UKKwkgIGFkYXB0b3JzIGFyZSBub3QgYSBmdWxsIFBDTUNJQSBjb250cm9sbGVyIGJ1dCBhY3QgYXMgYSBtb3JlIGxpbWl0ZWQKKwkgIFBDSSA8LT4gUENNQ0lBIGJyaWRnZS4gIFNldmVyYWwgdmVuZG9ycyBzZWxsIHN1Y2ggYWRhcHRvcnMgc28gdGhhdAorCSAgODAyLjExYiBQQ01DSUEgY2FyZHMgY2FuIGJlIHVzZWQgaW4gZGVza3RvcCBtYWNoaW5lcy4KKworY29uZmlnIE5PUlRFTF9IRVJNRVMKKwl0cmlzdGF0ZSAiTm9ydGVsIGVtb2JpbGl0eSBQQ0kgYWRhcHRvciBzdXBwb3J0IgorCWRlcGVuZHMgb24gUENJICYmIEhFUk1FUworCWhlbHAKKwkgIEVuYWJsZSBzdXBwb3J0IGZvciBQQ01DSUEgY2FyZHMgc3VwcG9ydGVkIGJ5IHRoZSAiSGVybWVzIiAoYWthCisJICBvcmlub2NvKSBkcml2ZXIgd2hlbiB1c2VkIGluIE5vcnRlbCBlbW9iaWxpdHkgUENJIGFkYXB0b3JzLiAgVGhlc2UKKwkgIGFkYXB0b3JzIGFyZSBub3QgZnVsbCBQQ01DSUEgY29udHJvbGxlcnMsIGJ1dCBhY3QgYXMgYSBtb3JlIGxpbWl0ZWQKKwkgIFBDSSA8LT4gUENNQ0lBIGJyaWRnZS4KKworY29uZmlnIFBDSV9IRVJNRVMKKwl0cmlzdGF0ZSAiUHJpc20gMi41IFBDSSA4MDIuMTFiIGFkYXB0b3Igc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFBDSSAmJiBIRVJNRVMKKwloZWxwCisJICBFbmFibGUgc3VwcG9ydCBmb3IgUENJIGFuZCBtaW5pLVBDSSA4MDIuMTFiIHdpcmVsZXNzIE5JQ3MgYmFzZWQgb24KKwkgIHRoZSBQcmlzbSAyLjUgY2hpcHNldC4gIFRoZXNlIGFyZSB0cnVlIFBDSSBjYXJkcywgbm90IHRoZSA4MDIuMTFiCisJICBQQ01DSUEgY2FyZHMgYnVuZGxlZCB3aXRoIFBDSTwtPlBDTUNJQSBhZGFwdG9ycyB3aGljaCBhcmUgYWxzbworCSAgY29tbW9uLiAgU29tZSBvZiB0aGUgYnVpbHQtaW4gd2lyZWxlc3MgYWRhcHRvcnMgaW4gbGFwdG9wcyBhcmUgb2YKKwkgIHRoaXMgdmFyaWV0eS4KKworY29uZmlnIFBDTUNJQV9IRVJNRVMKKwl0cmlzdGF0ZSAiSGVybWVzIFBDTUNJQSBjYXJkIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBQQ01DSUEgJiYgSEVSTUVTCisJLS0taGVscC0tLQorCSAgQSBkcml2ZXIgZm9yICJIZXJtZXMiIGNoaXBzZXQgYmFzZWQgUENNQ0lBIHdpcmVsZXNzIGFkYXB0b3JzLCBzdWNoCisJICBhcyB0aGUgTHVjZW50IFdhdmVsYW5JRUVFL09yaW5vY28gY2FyZHMgYW5kIHRoZWlyIE9FTSAoQ2FibGV0cm9uLworCSAgRW50ZXJhU3lzIFJvYW1BYm91dCA4MDIuMTEsIEVMU0EgQWlybGFuY2VyLCBNZWxjbyBCdWZmYWxvIGFuZAorCSAgb3RoZXJzKS4gIEl0IHNob3VsZCBhbHNvIGJlIHVzYWJsZSBvbiB2YXJpb3VzIFByaXNtIElJIGJhc2VkIGNhcmRzCisJICBzdWNoIGFzIHRoZSBMaW5rc3lzLCBELUxpbmsgYW5kIEZhcmFsbG9uIFNreWxpbmUuICBJdCBzaG91bGQgYWxzbworCSAgd29yayBvbiBTeW1ib2wgY2FyZHMgc3VjaCBhcyB0aGUgM0NvbSBBaXJDb25uZWN0IGFuZCBFcmljc3NvbiBXTEFOLgorCisJICBZb3Ugd2lsbCB2ZXJ5IGxpa2VseSBuZWVkIHRoZSBXaXJlbGVzcyBUb29scyBpbiBvcmRlciB0bworCSAgY29uZmlndXJlIHlvdXIgY2FyZCBhbmQgdGhhdCAvZXRjL3BjbWNpYS93aXJlbGVzcy5vcHRzIHdvcmtzOgorCSAgPGh0dHA6Ly93d3cuaHBsLmhwLmNvbS9wZXJzb25hbC9KZWFuX1RvdXJyaWxoZXMvTGludXgvVG9vbHMuaHRtbD4uCisKK2NvbmZpZyBQQ01DSUFfU1BFQ1RSVU0KKwl0cmlzdGF0ZSAiU3ltYm9sIFNwZWN0cnVtMjQgVHJpbG9neSBQQ01DSUEgY2FyZCBzdXBwb3J0IgorCWRlcGVuZHMgb24gUENNQ0lBICYmIEhFUk1FUworCS0tLWhlbHAtLS0KKworCSAgVGhpcyBpcyBhIGRyaXZlciBmb3IgODAyLjExYiBjYXJkcyB1c2luZyBSQU0tbG9hZGFibGUgU3ltYm9sCisJICBmaXJtd2FyZSwgc3VjaCBhcyBTeW1ib2wgV2lyZWxlc3MgTmV0d29ya2VyIExBNDEwMCwgQ29tcGFjdEZsYXNoCisJICBjYXJkcyBieSBTb2NrZXQgQ29tbXVuaWNhdGlvbnMgYW5kIEludGVsIFBSTy9XaXJlbGVzcyAyMDExQi4KKworCSAgVGhpcyBkcml2ZXIgcmVxdWlyZXMgZmlybXdhcmUgZG93bmxvYWQgb24gc3RhcnR1cC4gIFV0aWxpdGllcworCSAgZm9yIGRvd25sb2FkaW5nIFN5bWJvbCBmaXJtd2FyZSBhcmUgYXZhaWxhYmxlIGF0CisJICA8aHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9vcmlub2NvLz4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vTWFrZWZpbGUgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL01ha2VmaWxlCmluZGV4IDc5MTM2NmUuLjFmYzc0MDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9NYWtlZmlsZQpAQCAtMSw4ICsxLDkgQEAKICMKICMgTWFrZWZpbGUgZm9yIHRoZSBvcmlub2NvIHdpcmVsZXNzIGRldmljZSBkcml2ZXJzLgogIworb3Jpbm9jby1vYmpzIDo9IG1haW4ubyBmdy5vIGh3Lm8gbWljLm8gc2Nhbi5vIHdleHQubyBoZXJtZXNfZGxkLm8gaGVybWVzLm8KIAotb2JqLSQoQ09ORklHX0hFUk1FUykJCSs9IG9yaW5vY28ubyBoZXJtZXMubyBoZXJtZXNfZGxkLm8KK29iai0kKENPTkZJR19IRVJNRVMpCQkrPSBvcmlub2NvLm8KIG9iai0kKENPTkZJR19QQ01DSUFfSEVSTUVTKQkrPSBvcmlub2NvX2NzLm8KIG9iai0kKENPTkZJR19BUFBMRV9BSVJQT1JUKQkrPSBhaXJwb3J0Lm8KIG9iai0kKENPTkZJR19QTFhfSEVSTUVTKQkrPSBvcmlub2NvX3BseC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2FpcnBvcnQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vYWlycG9ydC5jCmluZGV4IDI4ZjFjYWUuLjhjNDA2NWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vYWlycG9ydC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vYWlycG9ydC5jCkBAIC0zLDEwICszLDEwIEBACiAgKiBBIGRyaXZlciBmb3IgIkhlcm1lcyIgY2hpcHNldCBiYXNlZCBBcHBsZSBBaXJwb3J0IHdpcmVsZXNzCiAgKiBjYXJkLgogICoKLSAqIENvcHlyaWdodCBub3RpY2UgJiByZWxlYXNlIG5vdGVzIGluIGZpbGUgb3Jpbm9jby5jCi0gKiAKKyAqIENvcHlyaWdodCBub3RpY2UgJiByZWxlYXNlIG5vdGVzIGluIGZpbGUgbWFpbi5jCisgKgogICogTm90ZSBzcGVjaWZpYyB0byBhaXJwb3J0IHN0dWI6Ci0gKiAKKyAqCiAgKiAgMC4wNSA6IGZpcnN0IHZlcnNpb24gb2YgdGhlIG5ldyBzcGxpdCBkcml2ZXIKICAqICAwLjA2IDogZml4IHBvc3NpYmxlIGhhbmcgb24gcG93ZXJ1cCwgYWRkIHNsZWVwIHN1cHBvcnQKICAqLwpAQCAtNjAsNyArNjAsOCBAQAogCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CiAKIAlkaXNhYmxlX2lycShkZXYtPmlycSk7Ci0JcG1hY19jYWxsX2ZlYXR1cmUoUE1BQ19GVFJfQUlSUE9SVF9FTkFCTEUsIG1hY2lvX2dldF9vZl9ub2RlKG1kZXYpLCAwLCAwKTsKKwlwbWFjX2NhbGxfZmVhdHVyZShQTUFDX0ZUUl9BSVJQT1JUX0VOQUJMRSwKKwkJCSAgbWFjaW9fZ2V0X29mX25vZGUobWRldiksIDAsIDApOwogCiAJcmV0dXJuIDA7CiB9CkBAIC03NSw3ICs3Niw4IEBACiAKIAlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEFpcnBvcnQgd2FraW5nIHVwXG4iLCBkZXYtPm5hbWUpOwogCi0JcG1hY19jYWxsX2ZlYXR1cmUoUE1BQ19GVFJfQUlSUE9SVF9FTkFCTEUsIG1hY2lvX2dldF9vZl9ub2RlKG1kZXYpLCAwLCAxKTsKKwlwbWFjX2NhbGxfZmVhdHVyZShQTUFDX0ZUUl9BSVJQT1JUX0VOQUJMRSwKKwkJCSAgbWFjaW9fZ2V0X29mX25vZGUobWRldiksIDAsIDEpOwogCW1zbGVlcCgyMDApOwogCiAJZW5hYmxlX2lycShkZXYtPmlycSk7CkBAIC05Myw3ICs5NSw3IEBACiAKIAlwcml2LT5od191bmF2YWlsYWJsZS0tOwogCi0JaWYgKHByaXYtPm9wZW4gJiYgKCEgcHJpdi0+aHdfdW5hdmFpbGFibGUpKSB7CisJaWYgKHByaXYtPm9wZW4gJiYgKCFwcml2LT5od191bmF2YWlsYWJsZSkpIHsKIAkJZXJyID0gX19vcmlub2NvX3VwKGRldik7CiAJCWlmIChlcnIpCiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCByZXN0YXJ0aW5nIGNhcmQgb24gUEJPT0tfV0FLRVxuIiwKQEAgLTEyNyw3ICsxMjksOCBAQAogCiAJbWFjaW9fcmVsZWFzZV9yZXNvdXJjZShtZGV2LCAwKTsKIAotCXBtYWNfY2FsbF9mZWF0dXJlKFBNQUNfRlRSX0FJUlBPUlRfRU5BQkxFLCBtYWNpb19nZXRfb2Zfbm9kZShtZGV2KSwgMCwgMCk7CisJcG1hY19jYWxsX2ZlYXR1cmUoUE1BQ19GVFJfQUlSUE9SVF9FTkFCTEUsCisJCQkgIG1hY2lvX2dldF9vZl9ub2RlKG1kZXYpLCAwLCAwKTsKIAlzc2xlZXAoMSk7CiAKIAltYWNpb19zZXRfZHJ2ZGF0YShtZGV2LCBOVUxMKTsKQEAgLTE1Myw5ICsxNTYsMTEgQEAKIAkgKiBvZmYuICovCiAJZGlzYWJsZV9pcnEoZGV2LT5pcnEpOwogCi0JcG1hY19jYWxsX2ZlYXR1cmUoUE1BQ19GVFJfQUlSUE9SVF9FTkFCTEUsIG1hY2lvX2dldF9vZl9ub2RlKGNhcmQtPm1kZXYpLCAwLCAwKTsKKwlwbWFjX2NhbGxfZmVhdHVyZShQTUFDX0ZUUl9BSVJQT1JUX0VOQUJMRSwKKwkJCSAgbWFjaW9fZ2V0X29mX25vZGUoY2FyZC0+bWRldiksIDAsIDApOwogCXNzbGVlcCgxKTsKLQlwbWFjX2NhbGxfZmVhdHVyZShQTUFDX0ZUUl9BSVJQT1JUX0VOQUJMRSwgbWFjaW9fZ2V0X29mX25vZGUoY2FyZC0+bWRldiksIDAsIDEpOworCXBtYWNfY2FsbF9mZWF0dXJlKFBNQUNfRlRSX0FJUlBPUlRfRU5BQkxFLAorCQkJICBtYWNpb19nZXRfb2Zfbm9kZShjYXJkLT5tZGV2KSwgMCwgMSk7CiAJc3NsZWVwKDEpOwogCiAJZW5hYmxlX2lycShkZXYtPmlycSk7CkBAIC0xODIsNyArMTg3LDcgQEAKIAkvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgcHJpdmF0ZSBkZXZpY2Utc3BlY2lmaWMgZGF0YSAqLwogCWRldiA9IGFsbG9jX29yaW5vY29kZXYoc2l6ZW9mKCpjYXJkKSwgJm1kZXYtPm9mZGV2LmRldiwKIAkJCSAgICAgICBhaXJwb3J0X2hhcmRfcmVzZXQsIE5VTEwpOwotCWlmICghIGRldikgeworCWlmICghZGV2KSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbm5vdCBhbGxvY2F0ZSBuZXR3b3JrIGRldmljZVxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KQEAgLTIxNCw5ICsyMTksMTAgQEAKIAl9CiAKIAloZXJtZXNfc3RydWN0X2luaXQoaHcsIGNhcmQtPnZhZGRyLCBIRVJNRVNfMTZCSVRfUkVHU1BBQ0lORyk7Ci0JCQorCiAJLyogUG93ZXIgdXAgY2FyZCAqLwotCXBtYWNfY2FsbF9mZWF0dXJlKFBNQUNfRlRSX0FJUlBPUlRfRU5BQkxFLCBtYWNpb19nZXRfb2Zfbm9kZShtZGV2KSwgMCwgMSk7CisJcG1hY19jYWxsX2ZlYXR1cmUoUE1BQ19GVFJfQUlSUE9SVF9FTkFCTEUsCisJCQkgIG1hY2lvX2dldF9vZl9ub2RlKG1kZXYpLCAwLCAxKTsKIAlzc2xlZXAoMSk7CiAKIAkvKiBSZXNldCBpdCBiZWZvcmUgd2UgZ2V0IHRoZSBpbnRlcnJ1cHQgKi8KQEAgLTI0OCw3ICsyNTQsNyBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIHRoZSBBcHBsZSBBaXJwb3J0IHdpcmVsZXNzIGNhcmQuIik7CiBNT0RVTEVfTElDRU5TRSgiRHVhbCBNUEwvR1BMIik7CiAKLXN0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGFpcnBvcnRfbWF0Y2hbXSA9IAorc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgYWlycG9ydF9tYXRjaFtdID0KIHsKIAl7CiAJLm5hbWUgCQk9ICJyYWRpbyIsCkBAIC0yNTYsMTAgKzI2Miw5IEBACiAJe30sCiB9OwogCi1NT0RVTEVfREVWSUNFX1RBQkxFIChvZiwgYWlycG9ydF9tYXRjaCk7CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBhaXJwb3J0X21hdGNoKTsKIAotc3RhdGljIHN0cnVjdCBtYWNpb19kcml2ZXIgYWlycG9ydF9kcml2ZXIgPSAKLXsKK3N0YXRpYyBzdHJ1Y3QgbWFjaW9fZHJpdmVyIGFpcnBvcnRfZHJpdmVyID0gewogCS5uYW1lIAkJPSBEUklWRVJfTkFNRSwKIAkubWF0Y2hfdGFibGUJPSBhaXJwb3J0X21hdGNoLAogCS5wcm9iZQkJPSBhaXJwb3J0X2F0dGFjaCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vZncuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vZncuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDg0YjQzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9mdy5jCkBAIC0wLDAgKzEsMzkwIEBACisvKiBGaXJtd2FyZSBmaWxlIHJlYWRpbmcgYW5kIGRvd25sb2FkIGhlbHBlcnMKKyAqCisgKiBTZWUgY29weXJpZ2h0IG5vdGljZSBpbiBtYWluLmMKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisKKyNpbmNsdWRlICJoZXJtZXMuaCIKKyNpbmNsdWRlICJoZXJtZXNfZGxkLmgiCisjaW5jbHVkZSAib3Jpbm9jby5oIgorCisjaW5jbHVkZSAiZncuaCIKKworLyogRW5kIG1hcmtlcnMgKGZvciBTeW1ib2wgZmlybXdhcmUgb25seSkgKi8KKyNkZWZpbmUgVEVYVF9FTkQJMHgxQQkJLyogRW5kIG9mIHRleHQgaGVhZGVyICovCisKK3N0cnVjdCBmd19pbmZvIHsKKwljaGFyICpwcmlfZnc7CisJY2hhciAqc3RhX2Z3OworCWNoYXIgKmFwX2Z3OworCXUzMiBwZGFfYWRkcjsKKwl1MTYgcGRhX3NpemU7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGZ3X2luZm8gb3Jpbm9jb19md1tdID0geworCXsgTlVMTCwgImFnZXJlX3N0YV9mdy5iaW4iLCAiYWdlcmVfYXBfZncuYmluIiwgMHgwMDM5MDAwMCwgMTAwMCB9LAorCXsgTlVMTCwgInByaXNtX3N0YV9mdy5iaW4iLCAicHJpc21fYXBfZncuYmluIiwgMCwgMTAyNCB9LAorCXsgInN5bWJvbF9zcDI0dF9wcmltX2Z3IiwgInN5bWJvbF9zcDI0dF9zZWNfZnciLCBOVUxMLCAweDAwMDAzMTAwLCA1MTIgfQorfTsKKworLyogU3RydWN0dXJlIHVzZWQgdG8gYWNjZXNzIGZpZWxkcyBpbiBGVworICogTWFrZSBzdXJlIExFIGRlY29kaW5nIG1hY3JvcyBhcmUgdXNlZAorICovCitzdHJ1Y3Qgb3Jpbm9jb19md19oZWFkZXIgeworCWNoYXIgaGRyX3ZlcnNbNl07ICAgICAgIC8qIEFTQ0lJIHN0cmluZyBmb3IgaGVhZGVyIHZlcnNpb24gKi8KKwlfX2xlMTYgaGVhZGVyc2l6ZTsgICAgICAvKiBUb3RhbCBsZW5ndGggb2YgaGVhZGVyICovCisJX19sZTMyIGVudHJ5X3BvaW50OyAgICAgLyogTklDIGVudHJ5IHBvaW50ICovCisJX19sZTMyIGJsb2NrczsgICAgICAgICAgLyogTnVtYmVyIG9mIGJsb2NrcyB0byBwcm9ncmFtICovCisJX19sZTMyIGJsb2NrX29mZnNldDsgICAgLyogT2Zmc2V0IG9mIGJsb2NrIGRhdGEgZnJvbSBlb2YgaGVhZGVyICovCisJX19sZTMyIHBkcl9vZmZzZXQ7ICAgICAgLyogT2Zmc2V0IHRvIFBEUiBkYXRhIGZyb20gZW9mIGhlYWRlciAqLworCV9fbGUzMiBwcmlfb2Zmc2V0OyAgICAgIC8qIE9mZnNldCB0byBwcmltYXJ5IHBsdWcgZGF0YSAqLworCV9fbGUzMiBjb21wYXRfb2Zmc2V0OyAgIC8qIE9mZnNldCB0byBjb21wYXRpYmlsaXR5IGRhdGEqLworCWNoYXIgc2lnbmF0dXJlWzBdOyAgICAgIC8qIEZXIHNpZ25hdHVyZSBsZW5ndGggaGVhZGVyc2l6ZS0yMCAqLworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qIENoZWNrIHRoZSByYW5nZSBvZiB2YXJpb3VzIGhlYWRlciBlbnRyaWVzLiBSZXR1cm4gYSBwb2ludGVyIHRvIGEKKyAqIGRlc2NyaXB0aW9uIG9mIHRoZSBwcm9ibGVtLCBvciBOVUxMIGlmIGV2ZXJ5dGhpbmcgY2hlY2tzIG91dC4gKi8KK3N0YXRpYyBjb25zdCBjaGFyICp2YWxpZGF0ZV9mdyhjb25zdCBzdHJ1Y3Qgb3Jpbm9jb19md19oZWFkZXIgKmhkciwgc2l6ZV90IGxlbikKK3sKKwl1MTYgaGRyc2l6ZTsKKworCWlmIChsZW4gPCBzaXplb2YoKmhkcikpCisJCXJldHVybiAiaW1hZ2UgdG9vIHNtYWxsIjsKKwlpZiAobWVtY21wKGhkci0+aGRyX3ZlcnMsICJIRlciLCAzKSAhPSAwKQorCQlyZXR1cm4gImZvcm1hdCBub3QgcmVjb2duaXNlZCI7CisKKwloZHJzaXplID0gbGUxNl90b19jcHUoaGRyLT5oZWFkZXJzaXplKTsKKwlpZiAoaGRyc2l6ZSA+IGxlbikKKwkJcmV0dXJuICJiYWQgaGVhZGVyc2l6ZSI7CisJaWYgKChoZHJzaXplICsgbGUzMl90b19jcHUoaGRyLT5ibG9ja19vZmZzZXQpKSA+IGxlbikKKwkJcmV0dXJuICJiYWQgYmxvY2sgb2Zmc2V0IjsKKwlpZiAoKGhkcnNpemUgKyBsZTMyX3RvX2NwdShoZHItPnBkcl9vZmZzZXQpKSA+IGxlbikKKwkJcmV0dXJuICJiYWQgUERSIG9mZnNldCI7CisJaWYgKChoZHJzaXplICsgbGUzMl90b19jcHUoaGRyLT5wcmlfb2Zmc2V0KSkgPiBsZW4pCisJCXJldHVybiAiYmFkIFBSSSBvZmZzZXQiOworCWlmICgoaGRyc2l6ZSArIGxlMzJfdG9fY3B1KGhkci0+Y29tcGF0X29mZnNldCkpID4gbGVuKQorCQlyZXR1cm4gImJhZCBjb21wYXQgb2Zmc2V0IjsKKworCS8qIFRPRE86IGNvbnNpZGVyIGFkZGluZyBhIGNoZWNrc3VtIG9yIENSQyB0byB0aGUgZmlybXdhcmUgZm9ybWF0ICovCisJcmV0dXJuIE5VTEw7Cit9CisKKyNpZiBkZWZpbmVkKENPTkZJR19IRVJNRVNfQ0FDSEVfRldfT05fSU5JVCkgfHwgZGVmaW5lZChDT05GSUdfUE1fU0xFRVApCitzdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqCitvcmlub2NvX2NhY2hlZF9md19nZXQoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwgYm9vbCBwcmltYXJ5KQoreworCWlmIChwcmltYXJ5KQorCQlyZXR1cm4gcHJpdi0+Y2FjaGVkX3ByaV9mdzsKKwllbHNlCisJCXJldHVybiBwcml2LT5jYWNoZWRfZnc7Cit9CisjZWxzZQorI2RlZmluZSBvcmlub2NvX2NhY2hlZF9md19nZXQocHJpdiwgcHJpbWFyeSkgKE5VTEwpCisjZW5kaWYKKworLyogRG93bmxvYWQgZWl0aGVyIFNUQSBvciBBUCBmaXJtd2FyZSBpbnRvIHRoZSBjYXJkLiAqLworc3RhdGljIGludAorb3Jpbm9jb19kbF9maXJtd2FyZShzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LAorCQkgICAgY29uc3Qgc3RydWN0IGZ3X2luZm8gKmZ3LAorCQkgICAgaW50IGFwKQoreworCS8qIFBsdWcgRGF0YSBBcmVhIChQREEpICovCisJX19sZTE2ICpwZGE7CisKKwloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmd19lbnRyeTsKKwljb25zdCBzdHJ1Y3Qgb3Jpbm9jb19md19oZWFkZXIgKmhkcjsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpmaXJzdF9ibG9jazsKKwljb25zdCB2b2lkICplbmQ7CisJY29uc3QgY2hhciAqZmlybXdhcmU7CisJY29uc3QgY2hhciAqZndfZXJyOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwcml2LT5uZGV2OworCWludCBlcnIgPSAwOworCisJcGRhID0ga3phbGxvYyhmdy0+cGRhX3NpemUsIEdGUF9LRVJORUwpOworCWlmICghcGRhKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChhcCkKKwkJZmlybXdhcmUgPSBmdy0+YXBfZnc7CisJZWxzZQorCQlmaXJtd2FyZSA9IGZ3LT5zdGFfZnc7CisKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEF0dGVtcHRpbmcgdG8gZG93bmxvYWQgZmlybXdhcmUgJXNcbiIsCisJICAgICAgIGRldi0+bmFtZSwgZmlybXdhcmUpOworCisJLyogUmVhZCBjdXJyZW50IHBsdWcgZGF0YSAqLworCWVyciA9IGhlcm1lc19yZWFkX3BkYShodywgcGRhLCBmdy0+cGRhX2FkZHIsIGZ3LT5wZGFfc2l6ZSwgMCk7CisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBSZWFkIFBEQSByZXR1cm5lZCAlZFxuIiwgZGV2LT5uYW1lLCBlcnIpOworCWlmIChlcnIpCisJCWdvdG8gZnJlZTsKKworCWlmICghb3Jpbm9jb19jYWNoZWRfZndfZ2V0KHByaXYsIGZhbHNlKSkgeworCQllcnIgPSByZXF1ZXN0X2Zpcm13YXJlKCZmd19lbnRyeSwgZmlybXdhcmUsIHByaXYtPmRldik7CisKKwkJaWYgKGVycikgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IGZpbmQgZmlybXdhcmUgJXNcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBmaXJtd2FyZSk7CisJCQllcnIgPSAtRU5PRU5UOworCQkJZ290byBmcmVlOworCQl9CisJfSBlbHNlCisJCWZ3X2VudHJ5ID0gb3Jpbm9jb19jYWNoZWRfZndfZ2V0KHByaXYsIGZhbHNlKTsKKworCWhkciA9IChjb25zdCBzdHJ1Y3Qgb3Jpbm9jb19md19oZWFkZXIgKikgZndfZW50cnktPmRhdGE7CisKKwlmd19lcnIgPSB2YWxpZGF0ZV9mdyhoZHIsIGZ3X2VudHJ5LT5zaXplKTsKKwlpZiAoZndfZXJyKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBJbnZhbGlkIGZpcm13YXJlIGltYWdlIGRldGVjdGVkICglcykuICIKKwkJICAgICAgICJBYm9ydGluZyBkb3dubG9hZFxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgZndfZXJyKTsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBhYm9ydDsKKwl9CisKKwkvKiBFbmFibGUgYXV4IHBvcnQgdG8gYWxsb3cgcHJvZ3JhbW1pbmcgKi8KKwllcnIgPSBoZXJtZXNpX3Byb2dyYW1faW5pdChodywgbGUzMl90b19jcHUoaGRyLT5lbnRyeV9wb2ludCkpOworCXByaW50ayhLRVJOX0RFQlVHICIlczogUHJvZ3JhbSBpbml0IHJldHVybmVkICVkXG4iLCBkZXYtPm5hbWUsIGVycik7CisJaWYgKGVyciAhPSAwKQorCQlnb3RvIGFib3J0OworCisJLyogUHJvZ3JhbSBkYXRhICovCisJZmlyc3RfYmxvY2sgPSAoZndfZW50cnktPmRhdGEgKworCQkgICAgICAgbGUxNl90b19jcHUoaGRyLT5oZWFkZXJzaXplKSArCisJCSAgICAgICBsZTMyX3RvX2NwdShoZHItPmJsb2NrX29mZnNldCkpOworCWVuZCA9IGZ3X2VudHJ5LT5kYXRhICsgZndfZW50cnktPnNpemU7CisKKwllcnIgPSBoZXJtZXNfcHJvZ3JhbShodywgZmlyc3RfYmxvY2ssIGVuZCk7CisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBQcm9ncmFtIHJldHVybmVkICVkXG4iLCBkZXYtPm5hbWUsIGVycik7CisJaWYgKGVyciAhPSAwKQorCQlnb3RvIGFib3J0OworCisJLyogVXBkYXRlIHByb2R1Y3Rpb24gZGF0YSAqLworCWZpcnN0X2Jsb2NrID0gKGZ3X2VudHJ5LT5kYXRhICsKKwkJICAgICAgIGxlMTZfdG9fY3B1KGhkci0+aGVhZGVyc2l6ZSkgKworCQkgICAgICAgbGUzMl90b19jcHUoaGRyLT5wZHJfb2Zmc2V0KSk7CisKKwllcnIgPSBoZXJtZXNfYXBwbHlfcGRhX3dpdGhfZGVmYXVsdHMoaHcsIGZpcnN0X2Jsb2NrLCBlbmQsIHBkYSwKKwkJCQkJICAgICAmcGRhW2Z3LT5wZGFfc2l6ZSAvIHNpemVvZigqcGRhKV0pOworCXByaW50ayhLRVJOX0RFQlVHICIlczogQXBwbHkgUERBIHJldHVybmVkICVkXG4iLCBkZXYtPm5hbWUsIGVycik7CisJaWYgKGVycikKKwkJZ290byBhYm9ydDsKKworCS8qIFRlbGwgY2FyZCB3ZSd2ZSBmaW5pc2hlZCAqLworCWVyciA9IGhlcm1lc2lfcHJvZ3JhbV9lbmQoaHcpOworCXByaW50ayhLRVJOX0RFQlVHICIlczogUHJvZ3JhbSBlbmQgcmV0dXJuZWQgJWRcbiIsIGRldi0+bmFtZSwgZXJyKTsKKwlpZiAoZXJyICE9IDApCisJCWdvdG8gYWJvcnQ7CisKKwkvKiBDaGVjayBpZiB3ZSdyZSBydW5uaW5nICovCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBoZXJtZXNfcHJlc2VudCByZXR1cm5lZCAlZFxuIiwKKwkgICAgICAgZGV2LT5uYW1lLCBoZXJtZXNfcHJlc2VudChodykpOworCithYm9ydDoKKwkvKiBJZiB3ZSByZXF1ZXN0ZWQgdGhlIGZpcm13YXJlLCByZWxlYXNlIGl0LiAqLworCWlmICghb3Jpbm9jb19jYWNoZWRfZndfZ2V0KHByaXYsIGZhbHNlKSkKKwkJcmVsZWFzZV9maXJtd2FyZShmd19lbnRyeSk7CisKK2ZyZWU6CisJa2ZyZWUocGRhKTsKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogUHJvY2VzcyBhIGZpcm13YXJlIGltYWdlIC0gc3RvcCB0aGUgY2FyZCwgbG9hZCB0aGUgZmlybXdhcmUsIHJlc2V0CisgKiB0aGUgY2FyZCBhbmQgbWFrZSBzdXJlIGl0IHJlc3BvbmRzLiAgRm9yIHRoZSBzZWNvbmRhcnkgZmlybXdhcmUgdGFrZQorICogY2FyZSBvZiB0aGUgUERBIC0gcmVhZCBpdCBhbmQgdGhlbiB3cml0ZSBpdCBvbiB0b3Agb2YgdGhlIGZpcm13YXJlLgorICovCitzdGF0aWMgaW50CitzeW1ib2xfZGxfaW1hZ2Uoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwgY29uc3Qgc3RydWN0IGZ3X2luZm8gKmZ3LAorCQljb25zdCB1bnNpZ25lZCBjaGFyICppbWFnZSwgY29uc3Qgdm9pZCAqZW5kLAorCQlpbnQgc2Vjb25kYXJ5KQoreworCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKKwlpbnQgcmV0ID0gMDsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpwdHI7CisJY29uc3QgdW5zaWduZWQgY2hhciAqZmlyc3RfYmxvY2s7CisKKwkvKiBQbHVnIERhdGEgQXJlYSAoUERBKSAqLworCV9fbGUxNiAqcGRhID0gTlVMTDsKKworCS8qIEJpbmFyeSBibG9jayBiZWdpbnMgYWZ0ZXIgdGhlIDB4MUEgbWFya2VyICovCisJcHRyID0gaW1hZ2U7CisJd2hpbGUgKCpwdHIrKyAhPSBURVhUX0VORCk7CisJZmlyc3RfYmxvY2sgPSBwdHI7CisKKwkvKiBSZWFkIHRoZSBQREEgZnJvbSBFRVBST00gKi8KKwlpZiAoc2Vjb25kYXJ5KSB7CisJCXBkYSA9IGt6YWxsb2MoZnctPnBkYV9zaXplLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFwZGEpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQlyZXQgPSBoZXJtZXNfcmVhZF9wZGEoaHcsIHBkYSwgZnctPnBkYV9hZGRyLCBmdy0+cGRhX3NpemUsIDEpOworCQlpZiAocmV0KQorCQkJZ290byBmcmVlOworCX0KKworCS8qIFN0b3AgdGhlIGZpcm13YXJlLCBzbyB0aGF0IGl0IGNhbiBiZSBzYWZlbHkgcmV3cml0dGVuICovCisJaWYgKHByaXYtPnN0b3BfZncpIHsKKwkJcmV0ID0gcHJpdi0+c3RvcF9mdyhwcml2LCAxKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZnJlZTsKKwl9CisKKwkvKiBQcm9ncmFtIHRoZSBhZGFwdGVyIHdpdGggbmV3IGZpcm13YXJlICovCisJcmV0ID0gaGVybWVzX3Byb2dyYW0oaHcsIGZpcnN0X2Jsb2NrLCBlbmQpOworCWlmIChyZXQpCisJCWdvdG8gZnJlZTsKKworCS8qIFdyaXRlIHRoZSBQREEgdG8gdGhlIGFkYXB0ZXIgKi8KKwlpZiAoc2Vjb25kYXJ5KSB7CisJCXNpemVfdCBsZW4gPSBoZXJtZXNfYmxvY2tzX2xlbmd0aChmaXJzdF9ibG9jaywgZW5kKTsKKwkJcHRyID0gZmlyc3RfYmxvY2sgKyBsZW47CisJCXJldCA9IGhlcm1lc19hcHBseV9wZGEoaHcsIHB0ciwgZW5kLCBwZGEsCisJCQkJICAgICAgICZwZGFbZnctPnBkYV9zaXplIC8gc2l6ZW9mKCpwZGEpXSk7CisJCWtmcmVlKHBkYSk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKworCS8qIFJ1biB0aGUgZmlybXdhcmUgKi8KKwlpZiAocHJpdi0+c3RvcF9mdykgeworCQlyZXQgPSBwcml2LT5zdG9wX2Z3KHByaXYsIDApOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBSZXNldCBoZXJtZXMgY2hpcCBhbmQgbWFrZSBzdXJlIGl0IHJlc3BvbmRzICovCisJcmV0ID0gaGVybWVzX2luaXQoaHcpOworCisJLyogaGVybWVzX3Jlc2V0KCkgc2hvdWxkIHJldHVybiAwIHdpdGggdGhlIHNlY29uZGFyeSBmaXJtd2FyZSAqLworCWlmIChzZWNvbmRhcnkgJiYgcmV0ICE9IDApCisJCXJldHVybiAtRU5PREVWOworCisJLyogQW5kIHRoaXMgc2hvdWxkIHdvcmsgd2l0aCBhbnkgZmlybXdhcmUgKi8KKwlpZiAoIWhlcm1lc19wcmVzZW50KGh3KSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXR1cm4gMDsKKworZnJlZToKKwlrZnJlZShwZGEpOworCXJldHVybiByZXQ7Cit9CisKKworLyoKKyAqIERvd25sb2FkIHRoZSBmaXJtd2FyZSBpbnRvIHRoZSBjYXJkLCB0aGlzIGFsc28gZG9lcyBhIFBDTUNJQSBzb2Z0CisgKiByZXNldCBvbiB0aGUgY2FyZCwgdG8gbWFrZSBzdXJlIGl0J3MgaW4gYSBzYW5lIHN0YXRlLgorICovCitzdGF0aWMgaW50CitzeW1ib2xfZGxfZmlybXdhcmUoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwKKwkJICAgY29uc3Qgc3RydWN0IGZ3X2luZm8gKmZ3KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwcml2LT5uZGV2OworCWludCByZXQ7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmd19lbnRyeTsKKworCWlmICghb3Jpbm9jb19jYWNoZWRfZndfZ2V0KHByaXYsIHRydWUpKSB7CisJCWlmIChyZXF1ZXN0X2Zpcm13YXJlKCZmd19lbnRyeSwgZnctPnByaV9mdywgcHJpdi0+ZGV2KSAhPSAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgZmluZCBmaXJtd2FyZTogJXNcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBmdy0+cHJpX2Z3KTsKKwkJCXJldHVybiAtRU5PRU5UOworCQl9CisJfSBlbHNlCisJCWZ3X2VudHJ5ID0gb3Jpbm9jb19jYWNoZWRfZndfZ2V0KHByaXYsIHRydWUpOworCisJLyogTG9hZCBwcmltYXJ5IGZpcm13YXJlICovCisJcmV0ID0gc3ltYm9sX2RsX2ltYWdlKHByaXYsIGZ3LCBmd19lbnRyeS0+ZGF0YSwKKwkJCSAgICAgIGZ3X2VudHJ5LT5kYXRhICsgZndfZW50cnktPnNpemUsIDApOworCisJaWYgKCFvcmlub2NvX2NhY2hlZF9md19nZXQocHJpdiwgdHJ1ZSkpCisJCXJlbGVhc2VfZmlybXdhcmUoZndfZW50cnkpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogUHJpbWFyeSBmaXJtd2FyZSBkb3dubG9hZCBmYWlsZWRcbiIsCisJCSAgICAgICBkZXYtPm5hbWUpOworCQlyZXR1cm4gcmV0OworCX0KKworCWlmICghb3Jpbm9jb19jYWNoZWRfZndfZ2V0KHByaXYsIGZhbHNlKSkgeworCQlpZiAocmVxdWVzdF9maXJtd2FyZSgmZndfZW50cnksIGZ3LT5zdGFfZncsIHByaXYtPmRldikgIT0gMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IGZpbmQgZmlybXdhcmU6ICVzXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgZnctPnN0YV9mdyk7CisJCQlyZXR1cm4gLUVOT0VOVDsKKwkJfQorCX0gZWxzZQorCQlmd19lbnRyeSA9IG9yaW5vY29fY2FjaGVkX2Z3X2dldChwcml2LCBmYWxzZSk7CisKKwkvKiBMb2FkIHNlY29uZGFyeSBmaXJtd2FyZSAqLworCXJldCA9IHN5bWJvbF9kbF9pbWFnZShwcml2LCBmdywgZndfZW50cnktPmRhdGEsCisJCQkgICAgICBmd19lbnRyeS0+ZGF0YSArIGZ3X2VudHJ5LT5zaXplLCAxKTsKKwlpZiAoIW9yaW5vY29fY2FjaGVkX2Z3X2dldChwcml2LCBmYWxzZSkpCisJCXJlbGVhc2VfZmlybXdhcmUoZndfZW50cnkpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogU2Vjb25kYXJ5IGZpcm13YXJlIGRvd25sb2FkIGZhaWxlZFxuIiwKKwkJICAgICAgIGRldi0+bmFtZSk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworaW50IG9yaW5vY29fZG93bmxvYWQoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKK3sKKwlpbnQgZXJyID0gMDsKKwkvKiBSZWxvYWQgZmlybXdhcmUgKi8KKwlzd2l0Y2ggKHByaXYtPmZpcm13YXJlX3R5cGUpIHsKKwljYXNlIEZJUk1XQVJFX1RZUEVfQUdFUkU6CisJCS8qIGNhc2UgRklSTVdBUkVfVFlQRV9JTlRFUlNJTDogKi8KKwkJZXJyID0gb3Jpbm9jb19kbF9maXJtd2FyZShwcml2LAorCQkJCQkgICZvcmlub2NvX2Z3W3ByaXYtPmZpcm13YXJlX3R5cGVdLCAwKTsKKwkJYnJlYWs7CisKKwljYXNlIEZJUk1XQVJFX1RZUEVfU1lNQk9MOgorCQllcnIgPSBzeW1ib2xfZGxfZmlybXdhcmUocHJpdiwKKwkJCQkJICZvcmlub2NvX2Z3W3ByaXYtPmZpcm13YXJlX3R5cGVdKTsKKwkJYnJlYWs7CisJY2FzZSBGSVJNV0FSRV9UWVBFX0lOVEVSU0lMOgorCQlicmVhazsKKwl9CisJLyogVE9ETzogaWYgd2UgZmFpbCB3ZSBwcm9iYWJseSBuZWVkIHRvIHJlaW5pdGlhbGlzZQorCSAqIHRoZSBkcml2ZXIgKi8KKworCXJldHVybiBlcnI7Cit9CisKKyNpZiBkZWZpbmVkKENPTkZJR19IRVJNRVNfQ0FDSEVfRldfT05fSU5JVCkgfHwgZGVmaW5lZChDT05GSUdfUE1fU0xFRVApCit2b2lkIG9yaW5vY29fY2FjaGVfZncoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwgaW50IGFwKQoreworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZndfZW50cnkgPSBOVUxMOworCWNvbnN0IGNoYXIgKnByaV9mdzsKKwljb25zdCBjaGFyICpmdzsKKworCXByaV9mdyA9IG9yaW5vY29fZndbcHJpdi0+ZmlybXdhcmVfdHlwZV0ucHJpX2Z3OworCWlmIChhcCkKKwkJZncgPSBvcmlub2NvX2Z3W3ByaXYtPmZpcm13YXJlX3R5cGVdLmFwX2Z3OworCWVsc2UKKwkJZncgPSBvcmlub2NvX2Z3W3ByaXYtPmZpcm13YXJlX3R5cGVdLnN0YV9mdzsKKworCWlmIChwcmlfZncpIHsKKwkJaWYgKHJlcXVlc3RfZmlybXdhcmUoJmZ3X2VudHJ5LCBwcmlfZncsIHByaXYtPmRldikgPT0gMCkKKwkJCXByaXYtPmNhY2hlZF9wcmlfZncgPSBmd19lbnRyeTsKKwl9CisKKwlpZiAoZncpIHsKKwkJaWYgKHJlcXVlc3RfZmlybXdhcmUoJmZ3X2VudHJ5LCBmdywgcHJpdi0+ZGV2KSA9PSAwKQorCQkJcHJpdi0+Y2FjaGVkX2Z3ID0gZndfZW50cnk7CisJfQorfQorCit2b2lkIG9yaW5vY29fdW5jYWNoZV9mdyhzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KQoreworCWlmIChwcml2LT5jYWNoZWRfcHJpX2Z3KQorCQlyZWxlYXNlX2Zpcm13YXJlKHByaXYtPmNhY2hlZF9wcmlfZncpOworCWlmIChwcml2LT5jYWNoZWRfZncpCisJCXJlbGVhc2VfZmlybXdhcmUocHJpdi0+Y2FjaGVkX2Z3KTsKKworCXByaXYtPmNhY2hlZF9wcmlfZncgPSBOVUxMOworCXByaXYtPmNhY2hlZF9mdyA9IE5VTEw7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vZncuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vZncuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWZjMjZkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9mdy5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qIEZpcm13YXJlIGZpbGUgcmVhZGluZyBhbmQgZG93bmxvYWQgaGVscGVycworICoKKyAqIFNlZSBjb3B5cmlnaHQgbm90aWNlIGluIG1haW4uYworICovCisjaWZuZGVmIF9PUklOT0NPX0ZXX0hfCisjZGVmaW5lIF9PUklOT0NPX0ZXX0hfCisKKy8qIEZvcndhcmQgZGVjbGF0aW9ucyAqLworc3RydWN0IG9yaW5vY29fcHJpdmF0ZTsKKworaW50IG9yaW5vY29fZG93bmxvYWQoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdik7CisKKyNpZiBkZWZpbmVkKENPTkZJR19IRVJNRVNfQ0FDSEVfRldfT05fSU5JVCkgfHwgZGVmaW5lZChDT05GSUdfUE1fU0xFRVApCit2b2lkIG9yaW5vY29fY2FjaGVfZncoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwgaW50IGFwKTsKK3ZvaWQgb3Jpbm9jb191bmNhY2hlX2Z3KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpOworI2Vsc2UKKyNkZWZpbmUgb3Jpbm9jb19jYWNoZV9mdyhwcml2LCBhcCkgZG8geyB9IHdoaWxlKDApCisjZGVmaW5lIG9yaW5vY29fdW5jYWNoZV9mdyhwcml2KSBkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKKworI2VuZGlmIC8qIF9PUklOT0NPX0ZXX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2hlcm1lcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9oZXJtZXMuYwppbmRleCBiZmEzNzUzLi5mMmM5MThjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2hlcm1lcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vaGVybWVzLmMKQEAgLTE1LDcgKzE1LDcgQEAKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDAsIERhdmlkIEdpYnNvbiwgTGludXhjYXJlIEF1c3RyYWxpYS4KICAqIChDKSBDb3B5cmlnaHQgRGF2aWQgR2lic29uLCBJQk0gQ29ycC4gMjAwMS0yMDAzLgotICogCisgKgogICogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZQogICogVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbgogICogY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UKQEAgLTQ1LDExICs0NSw2IEBACiAKICNpbmNsdWRlICJoZXJtZXMuaCIKIAotTU9EVUxFX0RFU0NSSVBUSU9OKCJMb3ctbGV2ZWwgZHJpdmVyIGhlbHBlciBmb3IgTHVjZW50IEhlcm1lcyBjaGlwc2V0IGFuZCBQcmlzbSBJSSBIRkEzODR4IHdpcmVsZXNzIE1BQyBjb250cm9sbGVyIik7Ci1NT0RVTEVfQVVUSE9SKCJQYXZlbCBSb3NraW4gPHByb3NraUBnbnUub3JnPiIKLQkiICYgRGF2aWQgR2lic29uIDxoZXJtZXNAZ2lic29uLmRyb3BiZWFyLmlkLmF1PiIpOwotTU9EVUxFX0xJQ0VOU0UoIkR1YWwgTVBML0dQTCIpOwotCiAvKiBUaGVzZSBhcmUgbWF4aW11bSB0aW1lb3V0cy4gTW9zdCBvZnRlbiwgY2FyZCB3aWwgcmVhY3QgbXVjaCBmYXN0ZXIgKi8KICNkZWZpbmUgQ01EX0JVU1lfVElNRU9VVCAoMTAwKSAvKiBJbiBpdGVyYXRpb25zIG9mIH4xdXMgKi8KICNkZWZpbmUgQ01EX0lOSVRfVElNRU9VVCAoNTAwMDApIC8qIGluIGl0ZXJhdGlvbnMgb2YgfjEwdXMgKi8KQEAgLTYxLDEzICs1NiwxMyBAQAogICovCiAKICNkZWZpbmUgRE1TRyhzdHVmZi4uLikgZG8ge3ByaW50ayhLRVJOX0RFQlVHICJoZXJtZXMgQCAlcDogIiAsIGh3LT5pb2Jhc2UpOyBcCi0JCQlwcmludGsoc3R1ZmYpO30gd2hpbGUgKDApCisJCQlwcmludGsoc3R1ZmYpOyB9IHdoaWxlICgwKQogCiAjdW5kZWYgSEVSTUVTX0RFQlVHCiAjaWZkZWYgSEVSTUVTX0RFQlVHCiAjaW5jbHVkZSA8c3RkYXJnLmg+CiAKLSNkZWZpbmUgREVCVUcobHZsLCBzdHVmZi4uLikgaWYgKCAobHZsKSA8PSBIRVJNRVNfREVCVUcpIERNU0coc3R1ZmYpCisjZGVmaW5lIERFQlVHKGx2bCwgc3R1ZmYuLi4pIGlmICgobHZsKSA8PSBIRVJNRVNfREVCVUcpIERNU0coc3R1ZmYpCiAKICNlbHNlIC8qICEgSEVSTUVTX0RFQlVHICovCiAKQEAgLTk1LDIwICs5MCwxOSBAQAogCiAJLyogRmlyc3Qgd2FpdCBmb3IgdGhlIGNvbW1hbmQgcmVnaXN0ZXIgdG8gdW5idXN5ICovCiAJcmVnID0gaGVybWVzX3JlYWRfcmVnbihodywgQ01EKTsKLQl3aGlsZSAoIChyZWcgJiBIRVJNRVNfQ01EX0JVU1kpICYmIGsgKSB7CisJd2hpbGUgKChyZWcgJiBIRVJNRVNfQ01EX0JVU1kpICYmIGspIHsKIAkJay0tOwogCQl1ZGVsYXkoMSk7CiAJCXJlZyA9IGhlcm1lc19yZWFkX3JlZ24oaHcsIENNRCk7CiAJfQotCWlmIChyZWcgJiBIRVJNRVNfQ01EX0JVU1kpIHsKKwlpZiAocmVnICYgSEVSTUVTX0NNRF9CVVNZKQogCQlyZXR1cm4gLUVCVVNZOwotCX0KIAogCWhlcm1lc193cml0ZV9yZWduKGh3LCBQQVJBTTIsIHBhcmFtMik7CiAJaGVybWVzX3dyaXRlX3JlZ24oaHcsIFBBUkFNMSwgcGFyYW0xKTsKIAloZXJtZXNfd3JpdGVfcmVnbihodywgUEFSQU0wLCBwYXJhbTApOwogCWhlcm1lc193cml0ZV9yZWduKGh3LCBDTUQsIGNtZCk7Ci0JCisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTkxLDIzICsxODUsMjMgQEAKIAloZXJtZXNfd3JpdGVfcmVnbihodywgRVZBQ0ssIDB4ZmZmZik7CiAKIAkvKiBOb3JtYWxseSBpdCdzIGEgImNhbid0IGhhcHBlbiIgZm9yIHRoZSBjb21tYW5kIHJlZ2lzdGVyIHRvCi0gICAgICAgICAgIGJlIGJ1c3kgd2hlbiB3ZSBnbyB0byBpc3N1ZSBhIGNvbW1hbmQgYmVjYXVzZSB3ZSBhcmUKLSAgICAgICAgICAgc2VyaWFsaXppbmcgYWxsIGNvbW1hbmRzLiAgSG93ZXZlciB3ZSB3YW50IHRvIGhhdmUgc29tZQotICAgICAgICAgICBjaGFuY2Ugb2YgcmVzZXR0aW5nIHRoZSBjYXJkIGV2ZW4gaWYgaXQgZ2V0cyBpbnRvIGEgc3R1cGlkCi0gICAgICAgICAgIHN0YXRlLCBzbyB3ZSBhY3R1YWxseSB3YWl0IHRvIHNlZSBpZiB0aGUgY29tbWFuZCByZWdpc3RlcgotICAgICAgICAgICB3aWxsIHVuYnVzeSBpdHNlbGYgaGVyZS4gKi8KKwkgICBiZSBidXN5IHdoZW4gd2UgZ28gdG8gaXNzdWUgYSBjb21tYW5kIGJlY2F1c2Ugd2UgYXJlCisJICAgc2VyaWFsaXppbmcgYWxsIGNvbW1hbmRzLiAgSG93ZXZlciB3ZSB3YW50IHRvIGhhdmUgc29tZQorCSAgIGNoYW5jZSBvZiByZXNldHRpbmcgdGhlIGNhcmQgZXZlbiBpZiBpdCBnZXRzIGludG8gYSBzdHVwaWQKKwkgICBzdGF0ZSwgc28gd2UgYWN0dWFsbHkgd2FpdCB0byBzZWUgaWYgdGhlIGNvbW1hbmQgcmVnaXN0ZXIKKwkgICB3aWxsIHVuYnVzeSBpdHNlbGYgaGVyZS4gKi8KIAlrID0gQ01EX0JVU1lfVElNRU9VVDsKIAlyZWcgPSBoZXJtZXNfcmVhZF9yZWduKGh3LCBDTUQpOwogCXdoaWxlIChrICYmIChyZWcgJiBIRVJNRVNfQ01EX0JVU1kpKSB7Ci0JCWlmIChyZWcgPT0gMHhmZmZmKSAvKiBTcGVjaWFsIGNhc2UgLSB0aGUgY2FyZCBoYXMgcHJvYmFibHkgYmVlbiByZW1vdmVkLAotCQkJCSAgICAgIHNvIGRvbid0IHdhaXQgZm9yIHRoZSB0aW1lb3V0ICovCisJCWlmIChyZWcgPT0gMHhmZmZmKSAvKiBTcGVjaWFsIGNhc2UgLSB0aGUgY2FyZCBoYXMgcHJvYmFibHkgYmVlbgorCQkJCSAgICAgIHJlbW92ZWQsIHNvIGRvbid0IHdhaXQgZm9yIHRoZSB0aW1lb3V0ICovCiAJCQlyZXR1cm4gLUVOT0RFVjsKIAogCQlrLS07CiAJCXVkZWxheSgxKTsKIAkJcmVnID0gaGVybWVzX3JlYWRfcmVnbihodywgQ01EKTsKIAl9Ci0JCisKIAkvKiBObyBuZWVkIHRvIGV4cGxpY2l0bHkgaGFuZGxlIHRoZSB0aW1lb3V0IC0gaWYgd2UndmUgdGltZWQKIAkgICBvdXQgaGVybWVzX2lzc3VlX2NtZCgpIHdpbGwgcHJvYmFibHkgcmV0dXJuIC1FQlVTWSBiZWxvdyAqLwogCkBAIC0yMjgsNyArMjIyLDEwIEBACiAvKiBJc3N1ZSBhIGNvbW1hbmQgdG8gdGhlIGNoaXAsIGFuZCAoYnVzeSEpIHdhaXQgZm9yIGl0IHRvCiAgKiBjb21wbGV0ZS4KICAqCi0gKiBSZXR1cm5zOiA8IDAgb24gaW50ZXJuYWwgZXJyb3IsIDAgb24gc3VjY2VzcywgPiAwIG9uIGVycm9yIHJldHVybmVkIGJ5IHRoZSBmaXJtd2FyZQorICogUmV0dXJuczoKKyAqICAgICA8IDAgb24gaW50ZXJuYWwgZXJyb3IKKyAqICAgICAgIDAgb24gc3VjY2VzcworICogICAgID4gMCBvbiBlcnJvciByZXR1cm5lZCBieSB0aGUgZmlybXdhcmUKICAqCiAgKiBDYWxsYWJsZSBmcm9tIGFueSBjb250ZXh0LCBidXQgbG9ja2luZyBpcyB5b3VyIHByb2JsZW0uICovCiBpbnQgaGVybWVzX2RvY21kX3dhaXQoaGVybWVzX3QgKmh3LCB1MTYgY21kLCB1MTYgcGFybTAsCkBAIC0yNDEsMTMgKzIzOCwxMyBAQAogCiAJZXJyID0gaGVybWVzX2lzc3VlX2NtZChodywgY21kLCBwYXJtMCwgMCwgMCk7CiAJaWYgKGVycikgewotCQlpZiAoISBoZXJtZXNfcHJlc2VudChodykpIHsKKwkJaWYgKCFoZXJtZXNfcHJlc2VudChodykpIHsKIAkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCiAJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiaGVybWVzIEAgJXA6ICIKIAkJCQkgICAgICAgIkNhcmQgcmVtb3ZlZCB3aGlsZSBpc3N1aW5nIGNvbW1hbmQgIgogCQkJCSAgICAgICAiMHglMDR4LlxuIiwgaHctPmlvYmFzZSwgY21kKTsKIAkJCWVyciA9IC1FTk9ERVY7Ci0JCX0gZWxzZSAKKwkJfSBlbHNlCiAJCQlpZiAobmV0X3JhdGVsaW1pdCgpKQogCQkJCXByaW50ayhLRVJOX0VSUiAiaGVybWVzIEAgJXA6ICIKIAkJCQkgICAgICAgIkVycm9yICVkIGlzc3VpbmcgY29tbWFuZCAweCUwNHguXG4iLApAQCAtMjU3LDIxICsyNTQsMjEgQEAKIAogCXJlZyA9IGhlcm1lc19yZWFkX3JlZ24oaHcsIEVWU1RBVCk7CiAJayA9IENNRF9DT01QTF9USU1FT1VUOwotCXdoaWxlICggKCEgKHJlZyAmIEhFUk1FU19FVl9DTUQpKSAmJiBrKSB7CisJd2hpbGUgKCghKHJlZyAmIEhFUk1FU19FVl9DTUQpKSAmJiBrKSB7CiAJCWstLTsKIAkJdWRlbGF5KDEwKTsKIAkJcmVnID0gaGVybWVzX3JlYWRfcmVnbihodywgRVZTVEFUKTsKIAl9CiAKLQlpZiAoISBoZXJtZXNfcHJlc2VudChodykpIHsKKwlpZiAoIWhlcm1lc19wcmVzZW50KGh3KSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJoZXJtZXMgQCAlcDogQ2FyZCByZW1vdmVkICIKIAkJICAgICAgICJ3aGlsZSB3YWl0aW5nIGZvciBjb21tYW5kIDB4JTA0eCBjb21wbGV0aW9uLlxuIiwKIAkJICAgICAgIGh3LT5pb2Jhc2UsIGNtZCk7CiAJCWVyciA9IC1FTk9ERVY7CiAJCWdvdG8gb3V0OwogCX0KLQkJCi0JaWYgKCEgKHJlZyAmIEhFUk1FU19FVl9DTUQpKSB7CisKKwlpZiAoIShyZWcgJiBIRVJNRVNfRVZfQ01EKSkgewogCQlwcmludGsoS0VSTl9FUlIgImhlcm1lcyBAICVwOiBUaW1lb3V0IHdhaXRpbmcgZm9yICIKIAkJICAgICAgICJjb21tYW5kIDB4JTA0eCBjb21wbGV0aW9uLlxuIiwgaHctPmlvYmFzZSwgY21kKTsKIAkJZXJyID0gLUVUSU1FRE9VVDsKQEAgLTMwMSwzMSArMjk4LDMwIEBACiAJaW50IGVyciA9IDA7CiAJaW50IGs7CiAJdTE2IHJlZzsKLQkKLQlpZiAoIChzaXplIDwgSEVSTUVTX0FMTE9DX0xFTl9NSU4pIHx8IChzaXplID4gSEVSTUVTX0FMTE9DX0xFTl9NQVgpICkKKworCWlmICgoc2l6ZSA8IEhFUk1FU19BTExPQ19MRU5fTUlOKSB8fCAoc2l6ZSA+IEhFUk1FU19BTExPQ19MRU5fTUFYKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAllcnIgPSBoZXJtZXNfZG9jbWRfd2FpdChodywgSEVSTUVTX0NNRF9BTExPQywgc2l6ZSwgTlVMTCk7Ci0JaWYgKGVycikgeworCWlmIChlcnIpCiAJCXJldHVybiBlcnI7Ci0JfQogCiAJcmVnID0gaGVybWVzX3JlYWRfcmVnbihodywgRVZTVEFUKTsKIAlrID0gQUxMT0NfQ09NUExfVElNRU9VVDsKLQl3aGlsZSAoICghIChyZWcgJiBIRVJNRVNfRVZfQUxMT0MpKSAmJiBrKSB7CisJd2hpbGUgKCghKHJlZyAmIEhFUk1FU19FVl9BTExPQykpICYmIGspIHsKIAkJay0tOwogCQl1ZGVsYXkoMTApOwogCQlyZWcgPSBoZXJtZXNfcmVhZF9yZWduKGh3LCBFVlNUQVQpOwogCX0KLQkKLQlpZiAoISBoZXJtZXNfcHJlc2VudChodykpIHsKKworCWlmICghaGVybWVzX3ByZXNlbnQoaHcpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgImhlcm1lcyBAICVwOiAiCiAJCSAgICAgICAiQ2FyZCByZW1vdmVkIHdhaXRpbmcgZm9yIGZyYW1lIGFsbG9jYXRpb24uXG4iLAogCQkgICAgICAgaHctPmlvYmFzZSk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KLQkJCi0JaWYgKCEgKHJlZyAmIEhFUk1FU19FVl9BTExPQykpIHsKKworCWlmICghKHJlZyAmIEhFUk1FU19FVl9BTExPQykpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJoZXJtZXMgQCAlcDogIgogCQkgICAgICAgIlRpbWVvdXQgd2FpdGluZyBmb3IgZnJhbWUgYWxsb2NhdGlvblxuIiwKIAkJICAgICAgIGh3LT5pb2Jhc2UpOwpAQCAtMzM0LDE0ICszMzAsMTcgQEAKIAogCSpmaWQgPSBoZXJtZXNfcmVhZF9yZWduKGh3LCBBTExPQ0ZJRCk7CiAJaGVybWVzX3dyaXRlX3JlZ24oaHcsIEVWQUNLLCBIRVJNRVNfRVZfQUxMT0MpOwotCQorCiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKGhlcm1lc19hbGxvY2F0ZSk7CiAKIC8qIFNldCB1cCBhIEJBUCB0byByZWFkIGEgcGFydGljdWxhciBjaHVuayBvZiBkYXRhIGZyb20gY2FyZCdzIGludGVybmFsIGJ1ZmZlci4KICAqCi0gKiBSZXR1cm5zOiA8IDAgb24gaW50ZXJuYWwgZmFpbHVyZSAoZXJybm8pLCAwIG9uIHN1Y2Nlc3MsID4wIG9uIGVycm9yCisgKiBSZXR1cm5zOgorICogICAgIDwgMCBvbiBpbnRlcm5hbCBmYWlsdXJlIChlcnJubykKKyAqICAgICAgIDAgb24gc3VjY2VzcworICogICAgID4gMCBvbiBlcnJvcgogICogZnJvbSBmaXJtd2FyZQogICoKICAqIENhbGxhYmxlIGZyb20gYW55IGNvbnRleHQgKi8KQEAgLTM1Myw3ICszNTIsNyBAQAogCXUxNiByZWc7CiAKIAkvKiBQYXJhbm9pYS4uICovCi0JaWYgKCAob2Zmc2V0ID4gSEVSTUVTX0JBUF9PRkZTRVRfTUFYKSB8fCAob2Zmc2V0ICUgMikgKQorCWlmICgob2Zmc2V0ID4gSEVSTUVTX0JBUF9PRkZTRVRfTUFYKSB8fCAob2Zmc2V0ICUgMikpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJayA9IEhFUk1FU19CQVBfQlVTWV9USU1FT1VUOwpAQCAtMzc0LDcgKzM3Myw3IEBACiAJLyogV2FpdCBmb3IgdGhlIEJBUCB0byBiZSByZWFkeSAqLwogCWsgPSBIRVJNRVNfQkFQX0JVU1lfVElNRU9VVDsKIAlyZWcgPSBoZXJtZXNfcmVhZF9yZWcoaHcsIG9yZWcpOwotCXdoaWxlICggKHJlZyAmIChIRVJNRVNfT0ZGU0VUX0JVU1kgfCBIRVJNRVNfT0ZGU0VUX0VSUikpICYmIGspIHsKKwl3aGlsZSAoKHJlZyAmIChIRVJNRVNfT0ZGU0VUX0JVU1kgfCBIRVJNRVNfT0ZGU0VUX0VSUikpICYmIGspIHsKIAkJay0tOwogCQl1ZGVsYXkoMSk7CiAJCXJlZyA9IGhlcm1lc19yZWFkX3JlZyhodywgb3JlZyk7CkBAIC0zODYsOSArMzg1LDggQEAKIAkJICAgICAgIChyZWcgJiBIRVJNRVNfT0ZGU0VUX0JVU1kpID8gInRpbWVvdXQiIDogImVycm9yIiwKIAkJICAgICAgIHJlZywgaWQsIG9mZnNldCk7CiAKLQkJaWYgKHJlZyAmIEhFUk1FU19PRkZTRVRfQlVTWSkgeworCQlpZiAocmVnICYgSEVSTUVTX09GRlNFVF9CVVNZKQogCQkJcmV0dXJuIC1FVElNRURPVVQ7Ci0JCX0KIAogCQlyZXR1cm4gLUVJTzsJCS8qIGVycm9yIG9yIHdyb25nIG9mZnNldCAqLwogCX0KQEAgLTQwMCw3ICszOTgsMTAgQEAKICAqIEJBUC4gU3luY2hyb25pemF0aW9uL3NlcmlhbGl6YXRpb24gaXMgdGhlIGNhbGxlcidzIHByb2JsZW0uICBsZW4KICAqIG11c3QgYmUgZXZlbi4KICAqCi0gKiBSZXR1cm5zOiA8IDAgb24gaW50ZXJuYWwgZmFpbHVyZSAoZXJybm8pLCAwIG9uIHN1Y2Nlc3MsID4gMCBvbiBlcnJvciBmcm9tIGZpcm13YXJlCisgKiBSZXR1cm5zOgorICogICAgIDwgMCBvbiBpbnRlcm5hbCBmYWlsdXJlIChlcnJubykKKyAqICAgICAgIDAgb24gc3VjY2VzcworICogICAgID4gMCBvbiBlcnJvciBmcm9tIGZpcm13YXJlCiAgKi8KIGludCBoZXJtZXNfYmFwX3ByZWFkKGhlcm1lc190ICpodywgaW50IGJhcCwgdm9pZCAqYnVmLCBpbnQgbGVuLAogCQkgICAgIHUxNiBpZCwgdTE2IG9mZnNldCkKQEAgLTQwOCw3ICs0MDksNyBAQAogCWludCBkcmVnID0gYmFwID8gSEVSTUVTX0RBVEExIDogSEVSTUVTX0RBVEEwOwogCWludCBlcnIgPSAwOwogCi0JaWYgKCAobGVuIDwgMCkgfHwgKGxlbiAlIDIpICkKKwlpZiAoKGxlbiA8IDApIHx8IChsZW4gJSAyKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAllcnIgPSBoZXJtZXNfYmFwX3NlZWsoaHcsIGJhcCwgaWQsIG9mZnNldCk7CkBAIC00MjYsNyArNDI3LDEwIEBACiAvKiBXcml0ZSBhIGJsb2NrIG9mIGRhdGEgdG8gdGhlIGNoaXAncyBidWZmZXIsIHZpYSB0aGUKICAqIEJBUC4gU3luY2hyb25pemF0aW9uL3NlcmlhbGl6YXRpb24gaXMgdGhlIGNhbGxlcidzIHByb2JsZW0uCiAgKgotICogUmV0dXJuczogPCAwIG9uIGludGVybmFsIGZhaWx1cmUgKGVycm5vKSwgMCBvbiBzdWNjZXNzLCA+IDAgb24gZXJyb3IgZnJvbSBmaXJtd2FyZQorICogUmV0dXJuczoKKyAqICAgICA8IDAgb24gaW50ZXJuYWwgZmFpbHVyZSAoZXJybm8pCisgKiAgICAgICAwIG9uIHN1Y2Nlc3MKKyAqICAgICA+IDAgb24gZXJyb3IgZnJvbSBmaXJtd2FyZQogICovCiBpbnQgaGVybWVzX2JhcF9wd3JpdGUoaGVybWVzX3QgKmh3LCBpbnQgYmFwLCBjb25zdCB2b2lkICpidWYsIGludCBsZW4sCiAJCSAgICAgIHUxNiBpZCwgdTE2IG9mZnNldCkKQEAgLTQ0MCwxMSArNDQ0LDExIEBACiAJZXJyID0gaGVybWVzX2JhcF9zZWVrKGh3LCBiYXAsIGlkLCBvZmZzZXQpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwotCQorCiAJLyogQWN0dWFsbHkgZG8gdGhlIHRyYW5zZmVyICovCiAJaGVybWVzX3dyaXRlX2J5dGVzKGh3LCBkcmVnLCBidWYsIGxlbik7CiAKLSBvdXQ6CQorIG91dDoKIAlyZXR1cm4gZXJyOwogfQogRVhQT1JUX1NZTUJPTChoZXJtZXNfYmFwX3B3cml0ZSk7CkBAIC00NjUsNyArNDY5LDcgQEAKIAl1MTYgcmxlbmd0aCwgcnR5cGU7CiAJdW5zaWduZWQgbndvcmRzOwogCi0JaWYgKCAoYnVmc2l6ZSA8IDApIHx8IChidWZzaXplICUgMikgKQorCWlmICgoYnVmc2l6ZSA8IDApIHx8IChidWZzaXplICUgMikpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJZXJyID0gaGVybWVzX2RvY21kX3dhaXQoaHcsIEhFUk1FU19DTURfQUNDRVNTLCByaWQsIE5VTEwpOwpAQCAtNDc4LDcgKzQ4Miw3IEBACiAKIAlybGVuZ3RoID0gaGVybWVzX3JlYWRfcmVnKGh3LCBkcmVnKTsKIAotCWlmICghIHJsZW5ndGgpCisJaWYgKCFybGVuZ3RoKQogCQlyZXR1cm4gLUVOT0RBVEE7CiAKIAlydHlwZSA9IGhlcm1lc19yZWFkX3JlZyhodywgZHJlZyk7CkBAIC01MDMsNyArNTA3LDcgQEAKIH0KIEVYUE9SVF9TWU1CT0woaGVybWVzX3JlYWRfbHR2KTsKIAotaW50IGhlcm1lc193cml0ZV9sdHYoaGVybWVzX3QgKmh3LCBpbnQgYmFwLCB1MTYgcmlkLCAKK2ludCBoZXJtZXNfd3JpdGVfbHR2KGhlcm1lc190ICpodywgaW50IGJhcCwgdTE2IHJpZCwKIAkJICAgICB1MTYgbGVuZ3RoLCBjb25zdCB2b2lkICp2YWx1ZSkKIHsKIAlpbnQgZHJlZyA9IGJhcCA/IEhFUk1FU19EQVRBMSA6IEhFUk1FU19EQVRBMDsKQEAgLTUzMCwxNSArNTM0LDMgQEAKIAlyZXR1cm4gZXJyOwogfQogRVhQT1JUX1NZTUJPTChoZXJtZXNfd3JpdGVfbHR2KTsKLQotc3RhdGljIGludCBfX2luaXQgaW5pdF9oZXJtZXModm9pZCkKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGV4aXRfaGVybWVzKHZvaWQpCi17Ci19Ci0KLW1vZHVsZV9pbml0KGluaXRfaGVybWVzKTsKLW1vZHVsZV9leGl0KGV4aXRfaGVybWVzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vaGVybWVzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2hlcm1lcy5oCmluZGV4IDhiMTNjOGYuLmM3OGM0NDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vaGVybWVzLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9oZXJtZXMuaApAQCAtMTUsNyArMTUsOCBAQAogICogQ29weXJpZ2h0IChDKSAyMDAwLCBEYXZpZCBHaWJzb24sIExpbnV4Y2FyZSBBdXN0cmFsaWEuCiAgKiAoQykgQ29weXJpZ2h0IERhdmlkIEdpYnNvbiwgSUJNIENvcnAuIDIwMDEtMjAwMy4KICAqCi0gKiBQb3J0aW9ucyB0YWtlbiBmcm9tIGhmYTM4NHguaCwgQ29weXJpZ2h0IChDKSAxOTk5IEFic29sdXRlVmFsdWUgU3lzdGVtcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogUG9ydGlvbnMgdGFrZW4gZnJvbSBoZmEzODR4LmguCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogVGhpcyBmaWxlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBHUEwsIHZlcnNpb24gMi4KICAqLwpAQCAtMzEsNyArMzIsNyBAQAogKi8KIAogI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogLyoKICAqIExpbWl0cyBhbmQgY29uc3RhbnRzCkBAIC0yMDMsNyArMjA0LDcgQEAKIAlfX2xlMzIgc3dfc3VwcG9ydDsKIAl1OCByZXRyeV9jb3VudDsKIAl1OCB0eF9yYXRlOwotCV9fbGUxNiB0eF9jb250cm9sOwkKKwlfX2xlMTYgdHhfY29udHJvbDsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAjZGVmaW5lIEhFUk1FU19UWFNUQVRfUkVUUllFUlIJCSgweDAwMDEpCkBAIC0yOTgsNyArMjk5LDcgQEAKIAkvKiBiaXRzOiAwLWVzcywgMS1pYnNzLCA0LXByaXZhY3kgW3dlcF0gKi8KIAlfX2xlMTYgZXNzaWRfbGVuOwkvKiBFU1NJRCBsZW5ndGggKi8KIAl1OCBlc3NpZFszMl07CQkvKiBFU1NJRCBvZiB0aGUgbmV0d29yayAqLwotICAgIAlfX2xlMTYgcmF0ZXNbNV07CS8qIEJpdCByYXRlIHN1cHBvcnRlZCAqLworCV9fbGUxNiByYXRlc1s1XTsJLyogQml0IHJhdGUgc3VwcG9ydGVkICovCiAJX19sZTE2IGJhc2ljX3JhdGVzOwkvKiBCYXNpYyByYXRlcyBiaXRtYXNrICovCiAJdTggdW5rbm93bjJbNl07CQkvKiBBbHdheXMgRkY6RkY6RkY6RkY6MDA6MDAgKi8KIAl1OCB1bmtub3duM1s4XTsJCS8qIEFsd2F5cyAwLCBhcHBlYXJlZCBpbiBmL3cgMy45MS02OCAqLwpAQCAtMzQ0LDE0ICszNDUsMTQgQEAKIAl1OAlkYXRhWzMxNl07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotI2RlZmluZSBIRVJNRVNfTElOS1NUQVRVU19OT1RfQ09OTkVDVEVEICAgKDB4MDAwMCkgIAorI2RlZmluZSBIRVJNRVNfTElOS1NUQVRVU19OT1RfQ09OTkVDVEVEICAgKDB4MDAwMCkKICNkZWZpbmUgSEVSTUVTX0xJTktTVEFUVVNfQ09OTkVDVEVEICAgICAgICgweDAwMDEpCiAjZGVmaW5lIEhFUk1FU19MSU5LU1RBVFVTX0RJU0NPTk5FQ1RFRCAgICAoMHgwMDAyKQogI2RlZmluZSBIRVJNRVNfTElOS1NUQVRVU19BUF9DSEFOR0UgICAgICAgKDB4MDAwMykKICNkZWZpbmUgSEVSTUVTX0xJTktTVEFUVVNfQVBfT1VUX09GX1JBTkdFICgweDAwMDQpCiAjZGVmaW5lIEhFUk1FU19MSU5LU1RBVFVTX0FQX0lOX1JBTkdFICAgICAoMHgwMDA1KQogI2RlZmluZSBIRVJNRVNfTElOS1NUQVRVU19BU1NPQ19GQUlMRUQgICAgKDB4MDAwNikKLSAgCisKIHN0cnVjdCBoZXJtZXNfbGlua3N0YXR1cyB7CiAJX19sZTE2IGxpbmtzdGF0dXM7ICAgICAgICAgLyogTGluayBzdGF0dXMgKi8KIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwpAQCAtMzg0LDExICszODUsMTIgQEAKIAogLyogUmVnaXN0ZXIgYWNjZXNzIGNvbnZlbmllbmNlIG1hY3JvcyAqLwogI2RlZmluZSBoZXJtZXNfcmVhZF9yZWcoaHcsIG9mZikgXAotCShpb3JlYWQxNigoaHcpLT5pb2Jhc2UgKyAoIChvZmYpIDw8IChodyktPnJlZ19zcGFjaW5nICkpKQorCShpb3JlYWQxNigoaHcpLT5pb2Jhc2UgKyAoKG9mZikgPDwgKGh3KS0+cmVnX3NwYWNpbmcpKSkKICNkZWZpbmUgaGVybWVzX3dyaXRlX3JlZyhodywgb2ZmLCB2YWwpIFwKIAkoaW93cml0ZTE2KCh2YWwpLCAoaHcpLT5pb2Jhc2UgKyAoKG9mZikgPDwgKGh3KS0+cmVnX3NwYWNpbmcpKSkKICNkZWZpbmUgaGVybWVzX3JlYWRfcmVnbihodywgbmFtZSkgaGVybWVzX3JlYWRfcmVnKChodyksIEhFUk1FU18jI25hbWUpCi0jZGVmaW5lIGhlcm1lc193cml0ZV9yZWduKGh3LCBuYW1lLCB2YWwpIGhlcm1lc193cml0ZV9yZWcoKGh3KSwgSEVSTUVTXyMjbmFtZSwgKHZhbCkpCisjZGVmaW5lIGhlcm1lc193cml0ZV9yZWduKGh3LCBuYW1lLCB2YWwpIFwKKwloZXJtZXNfd3JpdGVfcmVnKChodyksIEhFUk1FU18jI25hbWUsICh2YWwpKQogCiAvKiBGdW5jdGlvbiBwcm90b3R5cGVzICovCiB2b2lkIGhlcm1lc19zdHJ1Y3RfaW5pdChoZXJtZXNfdCAqaHcsIHZvaWQgX19pb21lbSAqYWRkcmVzcywgaW50IHJlZ19zcGFjaW5nKTsKQEAgLTQzMCw3ICs0MzIsNyBAQAogCiBzdGF0aWMgaW5saW5lIGludCBoZXJtZXNfZGlzYWJsZV9wb3J0KGhlcm1lc190ICpodywgaW50IHBvcnQpCiB7Ci0JcmV0dXJuIGhlcm1lc19kb2NtZF93YWl0KGh3LCBIRVJNRVNfQ01EX0RJU0FCTEUgfCAocG9ydCA8PCA4KSwgCisJcmV0dXJuIGhlcm1lc19kb2NtZF93YWl0KGh3LCBIRVJNRVNfQ01EX0RJU0FCTEUgfCAocG9ydCA8PCA4KSwKIAkJCQkgMCwgTlVMTCk7CiB9CiAKQEAgLTQ0MSwxMSArNDQzLDEyIEBACiAJcmV0dXJuIGhlcm1lc19kb2NtZF93YWl0KGh3LCBIRVJNRVNfQ01EX0lOUVVJUkUsIHJpZCwgTlVMTCk7CiB9CiAKLSNkZWZpbmUgSEVSTUVTX0JZVEVTX1RPX1JFQ0xFTihuKSAoICgoKG4pKzEpLzIpICsgMSApCi0jZGVmaW5lIEhFUk1FU19SRUNMRU5fVE9fQllURVMobikgKCAoKG4pLTEpICogMiApCisjZGVmaW5lIEhFUk1FU19CWVRFU19UT19SRUNMRU4obikgKCgoKG4pKzEpLzIpICsgMSkKKyNkZWZpbmUgSEVSTUVTX1JFQ0xFTl9UT19CWVRFUyhuKSAoKChuKS0xKSAqIDIpCiAKIC8qIE5vdGUgdGhhdCBmb3IgdGhlIG5leHQgdHdvLCB0aGUgY291bnQgaXMgaW4gMTYtYml0IHdvcmRzLCBub3QgYnl0ZXMgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBoZXJtZXNfcmVhZF93b3JkcyhzdHJ1Y3QgaGVybWVzICpodywgaW50IG9mZiwgdm9pZCAqYnVmLCB1bnNpZ25lZCBjb3VudCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBoZXJtZXNfcmVhZF93b3JkcyhzdHJ1Y3QgaGVybWVzICpodywgaW50IG9mZiwKKwkJCQkgICAgIHZvaWQgKmJ1ZiwgdW5zaWduZWQgY291bnQpCiB7CiAJb2ZmID0gb2ZmIDw8IGh3LT5yZWdfc3BhY2luZzsKIAlpb3JlYWQxNl9yZXAoaHctPmlvYmFzZSArIG9mZiwgYnVmLCBjb3VudCk7CkBAIC00NjAsNyArNDYzLDggQEAKIAkJaW93cml0ZTgoYnVmW2NvdW50IC0gMV0sIGh3LT5pb2Jhc2UgKyBvZmYpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgaGVybWVzX2NsZWFyX3dvcmRzKHN0cnVjdCBoZXJtZXMgKmh3LCBpbnQgb2ZmLCB1bnNpZ25lZCBjb3VudCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBoZXJtZXNfY2xlYXJfd29yZHMoc3RydWN0IGhlcm1lcyAqaHcsIGludCBvZmYsCisJCQkJICAgICAgdW5zaWduZWQgY291bnQpCiB7CiAJdW5zaWduZWQgaTsKIApAQCAtNDcxLDkgKzQ3NSwxMCBAQAogfQogCiAjZGVmaW5lIEhFUk1FU19SRUFEX1JFQ09SRChodywgYmFwLCByaWQsIGJ1ZikgXAotCShoZXJtZXNfcmVhZF9sdHYoKGh3KSwoYmFwKSwocmlkKSwgc2l6ZW9mKCpidWYpLCBOVUxMLCAoYnVmKSkpCisJKGhlcm1lc19yZWFkX2x0digoaHcpLCAoYmFwKSwgKHJpZCksIHNpemVvZigqYnVmKSwgTlVMTCwgKGJ1ZikpKQogI2RlZmluZSBIRVJNRVNfV1JJVEVfUkVDT1JEKGh3LCBiYXAsIHJpZCwgYnVmKSBcCi0JKGhlcm1lc193cml0ZV9sdHYoKGh3KSwoYmFwKSwocmlkKSxIRVJNRVNfQllURVNfVE9fUkVDTEVOKHNpemVvZigqYnVmKSksKGJ1ZikpKQorCShoZXJtZXNfd3JpdGVfbHR2KChodyksIChiYXApLCAocmlkKSwgXAorCQkJICBIRVJNRVNfQllURVNfVE9fUkVDTEVOKHNpemVvZigqYnVmKSksIChidWYpKSkKIAogc3RhdGljIGlubGluZSBpbnQgaGVybWVzX3JlYWRfd29yZHJlYyhoZXJtZXNfdCAqaHcsIGludCBiYXAsIHUxNiByaWQsIHUxNiAqd29yZCkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vaGVybWVzX2RsZC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9oZXJtZXNfZGxkLmMKaW5kZXggZDhjNjI2ZS4uYTliYTE5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9oZXJtZXNfZGxkLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9oZXJtZXNfZGxkLmMKQEAgLTEsMTMgKzEsNyBAQAogLyoKLSAqIEhlcm1lcyBkb3dubG9hZCBoZWxwZXIgZHJpdmVyLgorICogSGVybWVzIGRvd25sb2FkIGhlbHBlci4KICAqCi0gKiBUaGlzIGNvdWxkIGJlIGVudGlyZWx5IG1lcmdlZCBpbnRvIGhlcm1lcy5jLgotICoKLSAqIEknbSBrZWVwaW5nIGl0IHNlcGFyYXRlIHRvIG1pbmltaXNlIHRoZSBhbW91bnQgb2YgbWVyZ2luZyBiZXR3ZWVuCi0gKiBrZXJuZWwgdXBncmFkZXMuIEl0IGFsc28gbWVhbnMgdGhlIG1lbW9yeSBvdmVyaGVhZCBmb3IgZHJpdmVycyB0aGF0Ci0gKiBkb24ndCBuZWVkIGZpcm13YXJlIGRvd25sb2FkIGxvdy4KLSAqCi0gKiBUaGlzIGRyaXZlcjoKKyAqIFRoaXMgaGVscGVyOgogICogIC0gaXMgY2FwYWJsZSBvZiB3cml0aW5nIHRvIHRoZSB2b2xhdGlsZSBhcmVhIG9mIHRoZSBoZXJtZXMgZGV2aWNlCiAgKiAgLSBpcyBjdXJyZW50bHkgbm90IGNhcGFibGUgb2Ygd3JpdGluZyB0byBub24tdm9sYXRpbGUgYXJlYXMKICAqICAtIHByb3ZpZGUgaGVscGVycyB0byBpZGVudGlmeSBhbmQgdXBkYXRlIHBsdWdpbiBkYXRhCkBAIC01MCwxMCArNDQsNiBAQAogI2luY2x1ZGUgImhlcm1lcy5oIgogI2luY2x1ZGUgImhlcm1lc19kbGQuaCIKIAotTU9EVUxFX0RFU0NSSVBUSU9OKCJEb3dubG9hZCBoZWxwZXIgZm9yIEx1Y2VudCBIZXJtZXMgY2hpcHNldCIpOwotTU9EVUxFX0FVVEhPUigiRGF2aWQgS2lscm95IDxraWxyb3lkQGdtYWlsLmNvbT4iKTsKLU1PRFVMRV9MSUNFTlNFKCJEdWFsIE1QTC9HUEwiKTsKLQogI2RlZmluZSBQRlggImhlcm1lc19kbGQ6ICIKIAogLyoKQEAgLTgxLDE4ICs3MSw2IEBACiAjZGVmaW5lIEJMT0NLX0VORAkweEZGRkZGRkZGCS8qIExhc3QgaW1hZ2UgYmxvY2sgKi8KICNkZWZpbmUgVEVYVF9FTkQJMHgxQQkJLyogRW5kIG9mIHRleHQgaGVhZGVyICovCiAKLS8qCi0gKiBQREEgPT0gUHJvZHVjdGlvbiBEYXRhIEFyZWEKLSAqCi0gKiBJbiBwcmluY2lwbGUsIHRoZSBtYXguIHNpemUgb2YgdGhlIFBEQSBpcyBpcyA0MDk2IHdvcmRzLiBDdXJyZW50bHksCi0gKiBob3dldmVyLCBvbmx5IGFib3V0IDUwMCBieXRlcyBvZiB0aGlzIGFyZWEgYXJlIHVzZWQuCi0gKgotICogU29tZSBVU0IgaW1wbGVtZW50YXRpb25zIGNhbid0IGhhbmRsZSBzaXplcyBpbiBleGNlc3Mgb2YgMTAxNi4gTm90ZQotICogdGhhdCBQREEgaXMgbm90IGFjdHVhbGx5IHVzZWQgaW4gdGhvc2UgVVNCIGVudmlyb25tZW50cywgYnV0IG1heSBiZQotICogcmV0cmlldmVkIGJ5IGNvbW1vbiBjb2RlLgotICovCi0jZGVmaW5lIE1BWF9QREFfU0laRQkxMDAwCi0KIC8qIExpbWl0IHRoZSBhbW91dCB3ZSB0cnkgdG8gZG93bmxvYWQgaW4gYSBzaW5nbGUgc2hvdC4KICAqIFNpemUgaXMgaW4gYnl0ZXMuCiAgKi8KQEAgLTIyOCwxMyArMjA2LDE0IEBACiAgKiBTY2FuIFBEUiBmb3IgdGhlIHJlY29yZCB3aXRoIHRoZSBzcGVjaWZpZWQgUkVDT1JEX0lELgogICogSWYgaXQncyBub3QgZm91bmQsIHJldHVybiBOVUxMLgogICovCi1zdGF0aWMgc3RydWN0IHBkciAqCi1oZXJtZXNfZmluZF9wZHIoc3RydWN0IHBkciAqZmlyc3RfcGRyLCB1MzIgcmVjb3JkX2lkKQorc3RhdGljIGNvbnN0IHN0cnVjdCBwZHIgKgoraGVybWVzX2ZpbmRfcGRyKGNvbnN0IHN0cnVjdCBwZHIgKmZpcnN0X3BkciwgdTMyIHJlY29yZF9pZCwgY29uc3Qgdm9pZCAqZW5kKQogewotCXN0cnVjdCBwZHIgKnBkciA9IGZpcnN0X3BkcjsKLQl2b2lkICplbmQgPSAodm9pZCAqKWZpcnN0X3BkciArIE1BWF9QREFfU0laRTsKKwljb25zdCBzdHJ1Y3QgcGRyICpwZHIgPSBmaXJzdF9wZHI7CiAKLQl3aGlsZSAoKCh2b2lkICopcGRyIDwgZW5kKSAmJgorCWVuZCAtPSBzaXplb2Yoc3RydWN0IHBkcik7CisKKwl3aGlsZSAoKCh2b2lkICopIHBkciA8PSBlbmQpICYmCiAJICAgICAgIChwZHJfaWQocGRyKSAhPSBQRElfRU5EKSkgewogCQkvKgogCQkgKiBQRFIgYXJlYSBpcyBjdXJyZW50bHkgbm90IHRlcm1pbmF0ZWQgYnkgUERJX0VORC4KQEAgLTI1NCwxMiArMjMzLDE1IEBACiB9CiAKIC8qIFNjYW4gcHJvZHVjdGlvbiBkYXRhIGl0ZW1zIGZvciBhIHBhcnRpY3VsYXIgZW50cnkgKi8KLXN0YXRpYyBzdHJ1Y3QgcGRpICoKLWhlcm1lc19maW5kX3BkaShzdHJ1Y3QgcGRpICpmaXJzdF9wZGksIHUzMiByZWNvcmRfaWQpCitzdGF0aWMgY29uc3Qgc3RydWN0IHBkaSAqCitoZXJtZXNfZmluZF9wZGkoY29uc3Qgc3RydWN0IHBkaSAqZmlyc3RfcGRpLCB1MzIgcmVjb3JkX2lkLCBjb25zdCB2b2lkICplbmQpCiB7Ci0Jc3RydWN0IHBkaSAqcGRpID0gZmlyc3RfcGRpOworCWNvbnN0IHN0cnVjdCBwZGkgKnBkaSA9IGZpcnN0X3BkaTsKIAotCXdoaWxlIChwZGlfaWQocGRpKSAhPSBQRElfRU5EKSB7CisJZW5kIC09IHNpemVvZihzdHJ1Y3QgcGRpKTsKKworCXdoaWxlICgoKHZvaWQgKikgcGRpIDw9IGVuZCkgJiYKKwkgICAgICAgKHBkaV9pZChwZGkpICE9IFBESV9FTkQpKSB7CiAKIAkJLyogSWYgdGhlIHJlY29yZCBJRCBtYXRjaGVzLCB3ZSBhcmUgZG9uZSAqLwogCQlpZiAocGRpX2lkKHBkaSkgPT0gcmVjb3JkX2lkKQpAQCAtMjcyLDEyICsyNTQsMTMgQEAKIAogLyogUHJvY2VzcyBvbmUgUGx1ZyBEYXRhIEl0ZW0gLSBmaW5kIGNvcnJlc3BvbmRpbmcgUERSIGFuZCBwbHVnIGl0ICovCiBzdGF0aWMgaW50Ci1oZXJtZXNfcGx1Z19wZGkoaGVybWVzX3QgKmh3LCBzdHJ1Y3QgcGRyICpmaXJzdF9wZHIsIGNvbnN0IHN0cnVjdCBwZGkgKnBkaSkKK2hlcm1lc19wbHVnX3BkaShoZXJtZXNfdCAqaHcsIGNvbnN0IHN0cnVjdCBwZHIgKmZpcnN0X3BkciwKKwkJY29uc3Qgc3RydWN0IHBkaSAqcGRpLCBjb25zdCB2b2lkICpwZHJfZW5kKQogewotCXN0cnVjdCBwZHIgKnBkcjsKKwljb25zdCBzdHJ1Y3QgcGRyICpwZHI7CiAKIAkvKiBGaW5kIHRoZSBQRFIgY29ycmVzcG9uZGluZyB0byB0aGlzIFBESSAqLwotCXBkciA9IGhlcm1lc19maW5kX3BkcihmaXJzdF9wZHIsIHBkaV9pZChwZGkpKTsKKwlwZHIgPSBoZXJtZXNfZmluZF9wZHIoZmlyc3RfcGRyLCBwZGlfaWQocGRpKSwgcGRyX2VuZCk7CiAKIAkvKiBObyBtYXRjaCBpcyBmb3VuZCwgc2FmZSB0byBpZ25vcmUgKi8KIAlpZiAoIXBkcikKQEAgLTM0Nyw3ICszMzAsNiBAQAogCiAJcmV0dXJuIDA7CiB9Ci1FWFBPUlRfU1lNQk9MKGhlcm1lc19yZWFkX3BkYSk7CiAKIC8qIFBhcnNlIFBEQSBhbmQgd3JpdGUgdGhlIHJlY29yZHMgaW50byB0aGUgYWRhcHRlcgogICoKQEAgLTM1NiwxOCArMzM4LDIyIEBACiAgKi8KIGludCBoZXJtZXNfYXBwbHlfcGRhKGhlcm1lc190ICpodywKIAkJICAgICBjb25zdCBjaGFyICpmaXJzdF9wZHIsCi0JCSAgICAgY29uc3QgX19sZTE2ICpwZGEpCisJCSAgICAgY29uc3Qgdm9pZCAqcGRyX2VuZCwKKwkJICAgICBjb25zdCBfX2xlMTYgKnBkYSwKKwkJICAgICBjb25zdCB2b2lkICpwZGFfZW5kKQogewogCWludCByZXQ7CiAJY29uc3Qgc3RydWN0IHBkaSAqcGRpOwotCXN0cnVjdCBwZHIgKnBkcjsKKwljb25zdCBzdHJ1Y3QgcGRyICpwZHI7CiAKLQlwZHIgPSAoc3RydWN0IHBkciAqKSBmaXJzdF9wZHI7CisJcGRyID0gKGNvbnN0IHN0cnVjdCBwZHIgKikgZmlyc3RfcGRyOworCXBkYV9lbmQgLT0gc2l6ZW9mKHN0cnVjdCBwZGkpOwogCiAJLyogR28gdGhyb3VnaCBldmVyeSBQREkgYW5kIHBsdWcgdGhlbSBpbnRvIHRoZSBhZGFwdGVyICovCiAJcGRpID0gKGNvbnN0IHN0cnVjdCBwZGkgKikgKHBkYSArIDIpOwotCXdoaWxlIChwZGlfaWQocGRpKSAhPSBQRElfRU5EKSB7Ci0JCXJldCA9IGhlcm1lc19wbHVnX3BkaShodywgcGRyLCBwZGkpOworCXdoaWxlICgoKHZvaWQgKikgcGRpIDw9IHBkYV9lbmQpICYmCisJICAgICAgIChwZGlfaWQocGRpKSAhPSBQRElfRU5EKSkgeworCQlyZXQgPSBoZXJtZXNfcGx1Z19wZGkoaHcsIHBkciwgcGRpLCBwZHJfZW5kKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiAKQEAgLTM3NiwyMSArMzYyLDIzIEBACiAJfQogCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTChoZXJtZXNfYXBwbHlfcGRhKTsKIAogLyogSWRlbnRpZnkgdGhlIHRvdGFsIG51bWJlciBvZiBieXRlcyBpbiBhbGwgYmxvY2tzCiAgKiBpbmNsdWRpbmcgdGhlIGhlYWRlciBkYXRhLgogICovCiBzaXplX3QKLWhlcm1lc19ibG9ja3NfbGVuZ3RoKGNvbnN0IGNoYXIgKmZpcnN0X2Jsb2NrKQoraGVybWVzX2Jsb2Nrc19sZW5ndGgoY29uc3QgY2hhciAqZmlyc3RfYmxvY2ssIGNvbnN0IHZvaWQgKmVuZCkKIHsKIAljb25zdCBzdHJ1Y3QgZGJsb2NrICpibGsgPSAoY29uc3Qgc3RydWN0IGRibG9jayAqKSBmaXJzdF9ibG9jazsKIAlpbnQgdG90YWxfbGVuID0gMDsKIAlpbnQgbGVuOwogCisJZW5kIC09IHNpemVvZigqYmxrKTsKKwogCS8qIFNraXAgYWxsIGJsb2NrcyB0byBsb2NhdGUgUGx1ZyBEYXRhIFJlZmVyZW5jZXMKIAkgKiAoU3BlY3RydW0gQ1MpICovCi0Jd2hpbGUgKGRibG9ja19hZGRyKGJsaykgIT0gQkxPQ0tfRU5EKSB7CisJd2hpbGUgKCgodm9pZCAqKSBibGsgPD0gZW5kKSAmJgorCSAgICAgICAoZGJsb2NrX2FkZHIoYmxrKSAhPSBCTE9DS19FTkQpKSB7CiAJCWxlbiA9IGRibG9ja19sZW4oYmxrKTsKIAkJdG90YWxfbGVuICs9IHNpemVvZigqYmxrKSArIGxlbjsKIAkJYmxrID0gKHN0cnVjdCBkYmxvY2sgKikgJmJsay0+ZGF0YVtsZW5dOwpAQCAtMzk4LDcgKzM4Niw2IEBACiAKIAlyZXR1cm4gdG90YWxfbGVuOwogfQotRVhQT1JUX1NZTUJPTChoZXJtZXNfYmxvY2tzX2xlbmd0aCk7CiAKIC8qKiogSGVybWVzIHByb2dyYW1taW5nICoqKi8KIApAQCAtNDUyLDcgKzQzOSw2IEBACiAKIAlyZXR1cm4gZXJyOwogfQotRVhQT1JUX1NZTUJPTChoZXJtZXNpX3Byb2dyYW1faW5pdCk7CiAKIC8qIERvbmUgcHJvZ3JhbW1pbmcgZGF0YSAoSGVybWVzIEkpCiAgKgpAQCAtNDg4LDEwICs0NzQsOSBAQAogCiAJcmV0dXJuIHJjID8gcmMgOiBlcnI7CiB9Ci1FWFBPUlRfU1lNQk9MKGhlcm1lc2lfcHJvZ3JhbV9lbmQpOwogCiAvKiBQcm9ncmFtIHRoZSBkYXRhIGJsb2NrcyAqLwotaW50IGhlcm1lc19wcm9ncmFtKGhlcm1lc190ICpodywgY29uc3QgY2hhciAqZmlyc3RfYmxvY2ssIGNvbnN0IGNoYXIgKmVuZCkKK2ludCBoZXJtZXNfcHJvZ3JhbShoZXJtZXNfdCAqaHcsIGNvbnN0IGNoYXIgKmZpcnN0X2Jsb2NrLCBjb25zdCB2b2lkICplbmQpCiB7CiAJY29uc3Qgc3RydWN0IGRibG9jayAqYmxrOwogCXUzMiBibGthZGRyOwpAQCAtNTAzLDE0ICs0ODgsMTQgQEAKIAogCWJsayA9IChjb25zdCBzdHJ1Y3QgZGJsb2NrICopIGZpcnN0X2Jsb2NrOwogCi0JaWYgKChjb25zdCBjaGFyICopIGJsayA+IChlbmQgLSBzaXplb2YoKmJsaykpKQorCWlmICgodm9pZCAqKSBibGsgPiAoZW5kIC0gc2l6ZW9mKCpibGspKSkKIAkJcmV0dXJuIC1FSU87CiAKIAlibGthZGRyID0gZGJsb2NrX2FkZHIoYmxrKTsKIAlibGtsZW4gPSBkYmxvY2tfbGVuKGJsayk7CiAKIAl3aGlsZSAoKGJsa2FkZHIgIT0gQkxPQ0tfRU5EKSAmJgotCSAgICAgICAoKChjb25zdCBjaGFyICopIGJsayArIGJsa2xlbikgPD0gZW5kKSkgeworCSAgICAgICAoKCh2b2lkICopIGJsayArIGJsa2xlbikgPD0gZW5kKSkgewogCQlwcmludGsoS0VSTl9ERUJVRyBQRlgKIAkJICAgICAgICJQcm9ncmFtbWluZyBibG9jayBvZiBsZW5ndGggJWQgdG8gYWRkcmVzcyAweCUwOHhcbiIsCiAJCSAgICAgICBibGtsZW4sIGJsa2FkZHIpOwpAQCAtNTQyLDcgKzUyNyw3IEBACiAjZW5kaWYKIAkJYmxrID0gKGNvbnN0IHN0cnVjdCBkYmxvY2sgKikgJmJsay0+ZGF0YVtibGtsZW5dOwogCi0JCWlmICgoY29uc3QgY2hhciAqKSBibGsgPiAoZW5kIC0gc2l6ZW9mKCpibGspKSkKKwkJaWYgKCh2b2lkICopIGJsayA+IChlbmQgLSBzaXplb2YoKmJsaykpKQogCQkJcmV0dXJuIC1FSU87CiAKIAkJYmxrYWRkciA9IGRibG9ja19hZGRyKGJsayk7CkBAIC01NTAsMTkgKzUzNSw2IEBACiAJfQogCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTChoZXJtZXNfcHJvZ3JhbSk7Ci0KLXN0YXRpYyBpbnQgX19pbml0IGluaXRfaGVybWVzX2RsZCh2b2lkKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9oZXJtZXNfZGxkKHZvaWQpCi17Ci19Ci0KLW1vZHVsZV9pbml0KGluaXRfaGVybWVzX2RsZCk7Ci1tb2R1bGVfZXhpdChleGl0X2hlcm1lc19kbGQpOwogCiAvKioqIERlZmF1bHQgcGx1Z2dpbmcgZGF0YSBmb3IgSGVybWVzIEkgKioqLwogLyogVmFsdWVzIGZyb20gd2xfbGttXzcxOC9oY2YvZGhmLmMgKi8KQEAgLTU3Myw5ICs1NDUsOSBAQAogCV9fbGUxNiBpZDsJCQkJCQkJXAogCXU4IHZhbFtsZW5ndGhdOwkJCQkJCQlcCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBkZWZhdWx0X3Bkcl9kYXRhXyMjcGlkID0gewkJCVwKLQlfX2NvbnN0YW50X2NwdV90b19sZTE2KChzaXplb2YoZGVmYXVsdF9wZHJfZGF0YV8jI3BpZCkvCQlcCisJY3B1X3RvX2xlMTYoKHNpemVvZihkZWZhdWx0X3Bkcl9kYXRhXyMjcGlkKS8JCQlcCiAJCQkJc2l6ZW9mKF9fbGUxNikpIC0gMSksCQkJXAotCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYocGlkKSwJCQkJCVwKKwljcHVfdG9fbGUxNihwaWQpLAkJCQkJCVwKIAlkYXRhCQkJCQkJCQlcCiB9CiAKQEAgLTY0NCwxNyArNjE2LDIwIEBACiAgKi8KIGludCBoZXJtZXNfYXBwbHlfcGRhX3dpdGhfZGVmYXVsdHMoaGVybWVzX3QgKmh3LAogCQkJCSAgIGNvbnN0IGNoYXIgKmZpcnN0X3BkciwKLQkJCQkgICBjb25zdCBfX2xlMTYgKnBkYSkKKwkJCQkgICBjb25zdCB2b2lkICpwZHJfZW5kLAorCQkJCSAgIGNvbnN0IF9fbGUxNiAqcGRhLAorCQkJCSAgIGNvbnN0IHZvaWQgKnBkYV9lbmQpCiB7CiAJY29uc3Qgc3RydWN0IHBkciAqcGRyID0gKGNvbnN0IHN0cnVjdCBwZHIgKikgZmlyc3RfcGRyOwotCXN0cnVjdCBwZGkgKmZpcnN0X3BkaSA9IChzdHJ1Y3QgcGRpICopICZwZGFbMl07Ci0Jc3RydWN0IHBkaSAqcGRpOwotCXN0cnVjdCBwZGkgKmRlZmF1bHRfcGRpID0gTlVMTDsKLQlzdHJ1Y3QgcGRpICpvdXRkb29yX3BkaTsKLQl2b2lkICplbmQgPSAodm9pZCAqKWZpcnN0X3BkciArIE1BWF9QREFfU0laRTsKKwljb25zdCBzdHJ1Y3QgcGRpICpmaXJzdF9wZGkgPSAoY29uc3Qgc3RydWN0IHBkaSAqKSAmcGRhWzJdOworCWNvbnN0IHN0cnVjdCBwZGkgKnBkaTsKKwljb25zdCBzdHJ1Y3QgcGRpICpkZWZhdWx0X3BkaSA9IE5VTEw7CisJY29uc3Qgc3RydWN0IHBkaSAqb3V0ZG9vcl9wZGk7CiAJaW50IHJlY29yZF9pZDsKIAotCXdoaWxlICgoKHZvaWQgKilwZHIgPCBlbmQpICYmCisJcGRyX2VuZCAtPSBzaXplb2Yoc3RydWN0IHBkcik7CisKKwl3aGlsZSAoKCh2b2lkICopIHBkciA8PSBwZHJfZW5kKSAmJgogCSAgICAgICAocGRyX2lkKHBkcikgIT0gUERJX0VORCkpIHsKIAkJLyoKIAkJICogRm9yIHNwZWN0cnVtX2NzIGZpcm13YXJlcywKQEAgLTY2Niw3ICs2NDEsNyBAQAogCQkJYnJlYWs7CiAJCXJlY29yZF9pZCA9IHBkcl9pZChwZHIpOwogCi0JCXBkaSA9IGhlcm1lc19maW5kX3BkaShmaXJzdF9wZGksIHJlY29yZF9pZCk7CisJCXBkaSA9IGhlcm1lc19maW5kX3BkaShmaXJzdF9wZGksIHJlY29yZF9pZCwgcGRhX2VuZCk7CiAJCWlmIChwZGkpCiAJCQlwcmludGsoS0VSTl9ERUJVRyBQRlggIkZvdW5kIHJlY29yZCAweCUwNHggYXQgJXBcbiIsCiAJCQkgICAgICAgcmVjb3JkX2lkLCBwZGkpOwpAQCAtNjc0LDcgKzY0OSw4IEBACiAJCXN3aXRjaCAocmVjb3JkX2lkKSB7CiAJCWNhc2UgMHgxMTA6IC8qIE1vZGVtIFJFRkRBQyB2YWx1ZXMgKi8KIAkJY2FzZSAweDEyMDogLyogTW9kZW0gVkdEQUMgdmFsdWVzICovCi0JCQlvdXRkb29yX3BkaSA9IGhlcm1lc19maW5kX3BkaShmaXJzdF9wZGksIHJlY29yZF9pZCArIDEpOworCQkJb3V0ZG9vcl9wZGkgPSBoZXJtZXNfZmluZF9wZGkoZmlyc3RfcGRpLCByZWNvcmRfaWQgKyAxLAorCQkJCQkJICAgICAgcGRhX2VuZCk7CiAJCQlkZWZhdWx0X3BkaSA9IE5VTEw7CiAJCQlpZiAob3V0ZG9vcl9wZGkpIHsKIAkJCQlwZGkgPSBvdXRkb29yX3BkaTsKQEAgLTcxNSw3ICs2OTEsOCBAQAogCiAJCWlmIChwZGkpIHsKIAkJCS8qIExlbmd0aHMgb2YgdGhlIGRhdGEgaW4gUERJIGFuZCBQRFIgbXVzdCBtYXRjaCAqLwotCQkJaWYgKHBkaV9sZW4ocGRpKSA9PSBwZHJfbGVuKHBkcikpIHsKKwkJCWlmICgocGRpX2xlbihwZGkpID09IHBkcl9sZW4ocGRyKSkgJiYKKwkJCSAgICAoKHZvaWQgKikgcGRpLT5kYXRhICsgcGRpX2xlbihwZGkpIDwgcGRhX2VuZCkpIHsKIAkJCQkvKiBkbyB0aGUgYWN0dWFsIHBsdWdnaW5nICovCiAJCQkJaGVybWVzX2F1eF9zZXRhZGRyKGh3LCBwZHJfYWRkcihwZHIpKTsKIAkJCQloZXJtZXNfd3JpdGVfYnl0ZXMoaHcsIEhFUk1FU19BVVhEQVRBLApAQCAtNzI3LDQgKzcwNCwzIEBACiAJfQogCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTChoZXJtZXNfYXBwbHlfcGRhX3dpdGhfZGVmYXVsdHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9oZXJtZXNfZGxkLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2hlcm1lc19kbGQuaAppbmRleCA2ZmNiMjYyLi41ODNhNWJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2hlcm1lc19kbGQuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2hlcm1lc19kbGQuaApAQCAtMjksNyArMjksNyBAQAogCiBpbnQgaGVybWVzaV9wcm9ncmFtX2luaXQoaGVybWVzX3QgKmh3LCB1MzIgb2Zmc2V0KTsKIGludCBoZXJtZXNpX3Byb2dyYW1fZW5kKGhlcm1lc190ICpodyk7Ci1pbnQgaGVybWVzX3Byb2dyYW0oaGVybWVzX3QgKmh3LCBjb25zdCBjaGFyICpmaXJzdF9ibG9jaywgY29uc3QgY2hhciAqZW5kKTsKK2ludCBoZXJtZXNfcHJvZ3JhbShoZXJtZXNfdCAqaHcsIGNvbnN0IGNoYXIgKmZpcnN0X2Jsb2NrLCBjb25zdCB2b2lkICplbmQpOwogCiBpbnQgaGVybWVzX3JlYWRfcGRhKGhlcm1lc190ICpodywKIAkJICAgIF9fbGUxNiAqcGRhLApAQCAtMzgsMTEgKzM4LDE1IEBACiAJCSAgICBpbnQgdXNlX2VlcHJvbSk7CiBpbnQgaGVybWVzX2FwcGx5X3BkYShoZXJtZXNfdCAqaHcsCiAJCSAgICAgY29uc3QgY2hhciAqZmlyc3RfcGRyLAotCQkgICAgIGNvbnN0IF9fbGUxNiAqcGRhKTsKKwkJICAgICBjb25zdCB2b2lkICpwZHJfZW5kLAorCQkgICAgIGNvbnN0IF9fbGUxNiAqcGRhLAorCQkgICAgIGNvbnN0IHZvaWQgKnBkYV9lbmQpOwogaW50IGhlcm1lc19hcHBseV9wZGFfd2l0aF9kZWZhdWx0cyhoZXJtZXNfdCAqaHcsCiAJCQkJICAgY29uc3QgY2hhciAqZmlyc3RfcGRyLAotCQkJCSAgIGNvbnN0IF9fbGUxNiAqcGRhKTsKKwkJCQkgICBjb25zdCB2b2lkICpwZHJfZW5kLAorCQkJCSAgIGNvbnN0IF9fbGUxNiAqcGRhLAorCQkJCSAgIGNvbnN0IHZvaWQgKnBkYV9lbmQpOwogCi1zaXplX3QgaGVybWVzX2Jsb2Nrc19sZW5ndGgoY29uc3QgY2hhciAqZmlyc3RfYmxvY2spOworc2l6ZV90IGhlcm1lc19ibG9ja3NfbGVuZ3RoKGNvbnN0IGNoYXIgKmZpcnN0X2Jsb2NrLCBjb25zdCB2b2lkICplbmQpOwogCiAjZW5kaWYgLyogX0hFUk1FU19ETERfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9ody5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9ody5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4MTQyOGQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2h3LmMKQEAgLTAsMCArMSw1ODYgQEAKKy8qIEVuY2Fwc3VsYXRlIGJhc2ljIHNldHRpbmcgY2hhbmdlcyBhbmQgcmV0cmlldmFsIG9uIEhlcm1lcyBoYXJkd2FyZQorICoKKyAqIFNlZSBjb3B5cmlnaHQgbm90aWNlIGluIG1haW4uYworICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CisjaW5jbHVkZSA8bGludXgvaWVlZTgwMjExLmg+CisjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KKworI2luY2x1ZGUgImhlcm1lcy5oIgorI2luY2x1ZGUgImhlcm1lc19yaWQuaCIKKyNpbmNsdWRlICJvcmlub2NvLmgiCisKKyNpbmNsdWRlICJody5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBEYXRhIHRhYmxlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFRoaXMgdGFibGVzIGdpdmVzIHRoZSBhY3R1YWwgbWVhbmluZ3Mgb2YgdGhlIGJpdHJhdGUgSURzIHJldHVybmVkCisgKiBieSB0aGUgZmlybXdhcmUuICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHsKKwlpbnQgYml0cmF0ZTsgLyogaW4gMTAwcyBvZiBraWxvYml0cyAqLworCWludCBhdXRvbWF0aWM7CisJdTE2IGFnZXJlX3R4cmF0ZWN0cmw7CisJdTE2IGludGVyc2lsX3R4cmF0ZWN0cmw7Cit9IGJpdHJhdGVfdGFibGVbXSA9IHsKKwl7MTEwLCAxLCAgMywgMTV9LCAvKiBFbnRyeSAwIGlzIHRoZSBkZWZhdWx0ICovCisJezEwLCAgMCwgIDEsICAxfSwKKwl7MTAsICAxLCAgMSwgIDF9LAorCXsyMCwgIDAsICAyLCAgMn0sCisJezIwLCAgMSwgIDYsICAzfSwKKwl7NTUsICAwLCAgNCwgIDR9LAorCXs1NSwgIDEsICA3LCAgN30sCisJezExMCwgMCwgIDUsICA4fSwKK307CisjZGVmaW5lIEJJVFJBVEVfVEFCTEVfU0laRSBBUlJBWV9TSVpFKGJpdHJhdGVfdGFibGUpCisKK2ludCBvcmlub2NvX2dldF9iaXRyYXRlbW9kZShpbnQgYml0cmF0ZSwgaW50IGF1dG9tYXRpYykKK3sKKwlpbnQgcmF0ZW1vZGUgPSAtMTsKKwlpbnQgaTsKKworCWlmICgoYml0cmF0ZSAhPSAxMCkgJiYgKGJpdHJhdGUgIT0gMjApICYmCisJICAgIChiaXRyYXRlICE9IDU1KSAmJiAoYml0cmF0ZSAhPSAxMTApKQorCQlyZXR1cm4gcmF0ZW1vZGU7CisKKwlmb3IgKGkgPSAwOyBpIDwgQklUUkFURV9UQUJMRV9TSVpFOyBpKyspIHsKKwkJaWYgKChiaXRyYXRlX3RhYmxlW2ldLmJpdHJhdGUgPT0gYml0cmF0ZSkgJiYKKwkJICAgIChiaXRyYXRlX3RhYmxlW2ldLmF1dG9tYXRpYyA9PSBhdXRvbWF0aWMpKSB7CisJCQlyYXRlbW9kZSA9IGk7CisJCQlicmVhazsKKwkJfQorCX0KKwlyZXR1cm4gcmF0ZW1vZGU7Cit9CisKK3ZvaWQgb3Jpbm9jb19nZXRfcmF0ZW1vZGVfY2ZnKGludCByYXRlbW9kZSwgaW50ICpiaXRyYXRlLCBpbnQgKmF1dG9tYXRpYykKK3sKKwlCVUdfT04oKHJhdGVtb2RlIDwgMCkgfHwgKHJhdGVtb2RlID49IEJJVFJBVEVfVEFCTEVfU0laRSkpOworCisJKmJpdHJhdGUgPSBiaXRyYXRlX3RhYmxlW3JhdGVtb2RlXS5iaXRyYXRlICogMTAwMDAwOworCSphdXRvbWF0aWMgPSBiaXRyYXRlX3RhYmxlW3JhdGVtb2RlXS5hdXRvbWF0aWM7Cit9CisKKy8qIEdldCB0c2MgZnJvbSB0aGUgZmlybXdhcmUgKi8KK2ludCBvcmlub2NvX2h3X2dldF90a2lwX2l2KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsIGludCBrZXksIHU4ICp0c2MpCit7CisJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OworCWludCBlcnIgPSAwOworCXU4IHRzY19hcnJbNF1bSVdfRU5DT0RFX1NFUV9NQVhfU0laRV07CisKKwlpZiAoKGtleSA8IDApIHx8IChrZXkgPiA0KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwllcnIgPSBoZXJtZXNfcmVhZF9sdHYoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NVUlJFTlRfVEtJUF9JViwKKwkJCSAgICAgIHNpemVvZih0c2NfYXJyKSwgTlVMTCwgJnRzY19hcnIpOworCWlmICghZXJyKQorCQltZW1jcHkodHNjLCAmdHNjX2FycltrZXldWzBdLCBzaXplb2YodHNjX2FyclswXSkpOworCisJcmV0dXJuIGVycjsKK30KKworaW50IF9fb3Jpbm9jb19od19zZXRfYml0cmF0ZShzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KQoreworCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKKwlpbnQgcmF0ZW1vZGUgPSBwcml2LT5iaXRyYXRlbW9kZTsKKwlpbnQgZXJyID0gMDsKKworCWlmIChyYXRlbW9kZSA+PSBCSVRSQVRFX1RBQkxFX1NJWkUpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogQlVHOiBJbnZhbGlkIGJpdHJhdGUgbW9kZSAlZFxuIiwKKwkJICAgICAgIHByaXYtPm5kZXYtPm5hbWUsIHJhdGVtb2RlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3dpdGNoIChwcml2LT5maXJtd2FyZV90eXBlKSB7CisJY2FzZSBGSVJNV0FSRV9UWVBFX0FHRVJFOgorCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCisJCQkJSEVSTUVTX1JJRF9DTkZUWFJBVEVDT05UUk9MLAorCQkJCWJpdHJhdGVfdGFibGVbcmF0ZW1vZGVdLmFnZXJlX3R4cmF0ZWN0cmwpOworCQlicmVhazsKKwljYXNlIEZJUk1XQVJFX1RZUEVfSU5URVJTSUw6CisJY2FzZSBGSVJNV0FSRV9UWVBFX1NZTUJPTDoKKwkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCUhFUk1FU19SSURfQ05GVFhSQVRFQ09OVFJPTCwKKwkJCQliaXRyYXRlX3RhYmxlW3JhdGVtb2RlXS5pbnRlcnNpbF90eHJhdGVjdHJsKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworaW50IG9yaW5vY29faHdfZ2V0X2FjdF9iaXRyYXRlKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsIGludCAqYml0cmF0ZSkKK3sKKwloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CisJaW50IGk7CisJaW50IGVyciA9IDA7CisJdTE2IHZhbDsKKworCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCSAgSEVSTUVTX1JJRF9DVVJSRU5UVFhSQVRFLCAmdmFsKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJc3dpdGNoIChwcml2LT5maXJtd2FyZV90eXBlKSB7CisJY2FzZSBGSVJNV0FSRV9UWVBFX0FHRVJFOiAvKiBMdWNlbnQgc3R5bGUgcmF0ZSAqLworCQkvKiBOb3RlIDogaW4gTHVjZW50IGZpcm13YXJlLCB0aGUgcmV0dXJuIHZhbHVlIG9mCisJCSAqIEhFUk1FU19SSURfQ1VSUkVOVFRYUkFURSBpcyB0aGUgYml0cmF0ZSBpbiBNYi9zLAorCQkgKiBhbmQgdGhlcmVmb3JlIGlzIHRvdGFsbHkgZGlmZmVyZW50IGZyb20gdGhlCisJCSAqIGVuY29kaW5nIG9mIEhFUk1FU19SSURfQ05GVFhSQVRFQ09OVFJPTC4KKwkJICogRG9uJ3QgZm9yZ2V0IHRoYXQgNk1iL3MgaXMgcmVhbGx5IDUuNU1iL3MgKi8KKwkJaWYgKHZhbCA9PSA2KQorCQkJKmJpdHJhdGUgPSA1NTAwMDAwOworCQllbHNlCisJCQkqYml0cmF0ZSA9IHZhbCAqIDEwMDAwMDA7CisJCWJyZWFrOworCWNhc2UgRklSTVdBUkVfVFlQRV9JTlRFUlNJTDogLyogSW50ZXJzaWwgc3R5bGUgcmF0ZSAqLworCWNhc2UgRklSTVdBUkVfVFlQRV9TWU1CT0w6IC8qIFN5bWJvbCBzdHlsZSByYXRlICovCisJCWZvciAoaSA9IDA7IGkgPCBCSVRSQVRFX1RBQkxFX1NJWkU7IGkrKykKKwkJCWlmIChiaXRyYXRlX3RhYmxlW2ldLmludGVyc2lsX3R4cmF0ZWN0cmwgPT0gdmFsKQorCQkJCWJyZWFrOworCisJCWlmIChpID49IEJJVFJBVEVfVEFCTEVfU0laRSkKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBVbmFibGUgdG8gZGV0ZXJtaW5lIGN1cnJlbnQgYml0cmF0ZSAoMHglMDRoeClcbiIsCisJCQkgICAgICAgcHJpdi0+bmRldi0+bmFtZSwgdmFsKTsKKworCQkqYml0cmF0ZSA9IGJpdHJhdGVfdGFibGVbaV0uYml0cmF0ZSAqIDEwMDAwMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworLyogU2V0IGZpeGVkIEFQIGFkZHJlc3MgKi8KK2ludCBfX29yaW5vY29faHdfc2V0X3dhcChzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KQoreworCWludCByb2FtaW5nX2ZsYWc7CisJaW50IGVyciA9IDA7CisJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OworCisJc3dpdGNoIChwcml2LT5maXJtd2FyZV90eXBlKSB7CisJY2FzZSBGSVJNV0FSRV9UWVBFX0FHRVJFOgorCQkvKiBub3Qgc3VwcG9ydGVkICovCisJCWJyZWFrOworCWNhc2UgRklSTVdBUkVfVFlQRV9JTlRFUlNJTDoKKwkJaWYgKHByaXYtPmJzc2lkX2ZpeGVkKQorCQkJcm9hbWluZ19mbGFnID0gMjsKKwkJZWxzZQorCQkJcm9hbWluZ19mbGFnID0gMTsKKworCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCisJCQkJCSAgIEhFUk1FU19SSURfQ05GUk9BTUlOR01PREUsCisJCQkJCSAgIHJvYW1pbmdfZmxhZyk7CisJCWJyZWFrOworCWNhc2UgRklSTVdBUkVfVFlQRV9TWU1CT0w6CisJCWVyciA9IEhFUk1FU19XUklURV9SRUNPUkQoaHcsIFVTRVJfQkFQLAorCQkJCQkgIEhFUk1FU19SSURfQ05GTUFOREFUT1JZQlNTSURfU1lNQk9MLAorCQkJCQkgICZwcml2LT5kZXNpcmVkX2Jzc2lkKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiBlcnI7Cit9CisKKy8qIENoYW5nZSB0aGUgV0VQIGtleXMgYW5kL29yIHRoZSBjdXJyZW50IGtleXMuICBDYW4gYmUgY2FsbGVkCisgKiBlaXRoZXIgZnJvbSBfX29yaW5vY29faHdfc2V0dXBfZW5jKCkgb3IgZGlyZWN0bHkgZnJvbQorICogb3Jpbm9jb19pb2N0bF9zZXRpd2VuY29kZSgpLiAgSW4gdGhlIGxhdGVyIGNhc2UgdGhlIGFzc29jaWF0aW9uCisgKiB3aXRoIHRoZSBBUCBpcyBub3QgYnJva2VuIChpZiB0aGUgZmlybXdhcmUgY2FuIGhhbmRsZSBpdCksCisgKiB3aGljaCBpcyBuZWVkZWQgZm9yIDgwMi4xeCBpbXBsZW1lbnRhdGlvbnMuICovCitpbnQgX19vcmlub2NvX2h3X3NldHVwX3dlcGtleXMoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKK3sKKwloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CisJaW50IGVyciA9IDA7CisKKwlzd2l0Y2ggKHByaXYtPmZpcm13YXJlX3R5cGUpIHsKKwljYXNlIEZJUk1XQVJFX1RZUEVfQUdFUkU6CisJCWVyciA9IEhFUk1FU19XUklURV9SRUNPUkQoaHcsIFVTRVJfQkFQLAorCQkJCQkgIEhFUk1FU19SSURfQ05GV0VQS0VZU19BR0VSRSwKKwkJCQkJICAmcHJpdi0+a2V5cyk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCisJCQkJCSAgIEhFUk1FU19SSURfQ05GVFhLRVlfQUdFUkUsCisJCQkJCSAgIHByaXYtPnR4X2tleSk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCQlicmVhazsKKwljYXNlIEZJUk1XQVJFX1RZUEVfSU5URVJTSUw6CisJY2FzZSBGSVJNV0FSRV9UWVBFX1NZTUJPTDoKKwkJeworCQkJaW50IGtleWxlbjsKKwkJCWludCBpOworCisJCQkvKiBGb3JjZSB1bmlmb3JtIGtleSBsZW5ndGggdG8gd29yayBhcm91bmQKKwkJCSAqIGZpcm13YXJlIGJ1Z3MgKi8KKwkJCWtleWxlbiA9IGxlMTZfdG9fY3B1KHByaXYtPmtleXNbcHJpdi0+dHhfa2V5XS5sZW4pOworCisJCQlpZiAoa2V5bGVuID4gTEFSR0VfS0VZX1NJWkUpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBCVUc6IEtleSAlZCBoYXMgb3ZlcnNpemUgbGVuZ3RoICVkLlxuIiwKKwkJCQkgICAgICAgcHJpdi0+bmRldi0+bmFtZSwgcHJpdi0+dHhfa2V5LCBrZXlsZW4pOworCQkJCXJldHVybiAtRTJCSUc7CisJCQl9CisKKwkJCS8qIFdyaXRlIGFsbCA0IGtleXMgKi8KKwkJCWZvciAoaSA9IDA7IGkgPCBPUklOT0NPX01BWF9LRVlTOyBpKyspIHsKKwkJCQllcnIgPSBoZXJtZXNfd3JpdGVfbHR2KGh3LCBVU0VSX0JBUCwKKwkJCQkJCUhFUk1FU19SSURfQ05GREVGQVVMVEtFWTAgKyBpLAorCQkJCQkJSEVSTUVTX0JZVEVTX1RPX1JFQ0xFTihrZXlsZW4pLAorCQkJCQkJcHJpdi0+a2V5c1tpXS5kYXRhKTsKKwkJCQlpZiAoZXJyKQorCQkJCQlyZXR1cm4gZXJyOworCQkJfQorCisJCQkvKiBXcml0ZSB0aGUgaW5kZXggb2YgdGhlIGtleSB1c2VkIGluIHRyYW5zbWlzc2lvbiAqLworCQkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCQkJSEVSTUVTX1JJRF9DTkZXRVBERUZBVUxUS0VZSUQsCisJCQkJCQlwcml2LT50eF9rZXkpOworCQkJaWYgKGVycikKKwkJCQlyZXR1cm4gZXJyOworCQl9CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCitpbnQgX19vcmlub2NvX2h3X3NldHVwX2VuYyhzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KQoreworCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKKwlpbnQgZXJyID0gMDsKKwlpbnQgbWFzdGVyX3dlcF9mbGFnOworCWludCBhdXRoX2ZsYWc7CisJaW50IGVuY19mbGFnOworCisJLyogU2V0dXAgV0VQIGtleXMgZm9yIFdFUCBhbmQgV1BBICovCisJaWYgKHByaXYtPmVuY29kZV9hbGcpCisJCV9fb3Jpbm9jb19od19zZXR1cF93ZXBrZXlzKHByaXYpOworCisJaWYgKHByaXYtPndlcF9yZXN0cmljdCkKKwkJYXV0aF9mbGFnID0gSEVSTUVTX0FVVEhfU0hBUkVEX0tFWTsKKwllbHNlCisJCWF1dGhfZmxhZyA9IEhFUk1FU19BVVRIX09QRU47CisKKwlpZiAocHJpdi0+d3BhX2VuYWJsZWQpCisJCWVuY19mbGFnID0gMjsKKwllbHNlIGlmIChwcml2LT5lbmNvZGVfYWxnID09IElXX0VOQ09ERV9BTEdfV0VQKQorCQllbmNfZmxhZyA9IDE7CisJZWxzZQorCQllbmNfZmxhZyA9IDA7CisKKwlzd2l0Y2ggKHByaXYtPmZpcm13YXJlX3R5cGUpIHsKKwljYXNlIEZJUk1XQVJFX1RZUEVfQUdFUkU6IC8qIEFnZXJlIHN0eWxlIFdFUCAqLworCQlpZiAocHJpdi0+ZW5jb2RlX2FsZyA9PSBJV19FTkNPREVfQUxHX1dFUCkgeworCQkJLyogRW5hYmxlIHRoZSBzaGFyZWQta2V5IGF1dGhlbnRpY2F0aW9uLiAqLworCQkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCQlIRVJNRVNfUklEX0NORkFVVEhFTlRJQ0FUSU9OX0FHRVJFLAorCQkJCQlhdXRoX2ZsYWcpOworCQl9CisJCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKKwkJCQkJICAgSEVSTUVTX1JJRF9DTkZXRVBFTkFCTEVEX0FHRVJFLAorCQkJCQkgICBlbmNfZmxhZyk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCisJCWlmIChwcml2LT5oYXNfd3BhKSB7CisJCQkvKiBTZXQgV1BBIGtleSBtYW5hZ2VtZW50ICovCisJCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCisJCQkJICBIRVJNRVNfUklEX0NORlNFVFdQQUFVVEhNR01UU1VJVEVfQUdFUkUsCisJCQkJICBwcml2LT5rZXlfbWdtdCk7CisJCQlpZiAoZXJyKQorCQkJCXJldHVybiBlcnI7CisJCX0KKworCQlicmVhazsKKworCWNhc2UgRklSTVdBUkVfVFlQRV9JTlRFUlNJTDogLyogSW50ZXJzaWwgc3R5bGUgV0VQICovCisJY2FzZSBGSVJNV0FSRV9UWVBFX1NZTUJPTDogLyogU3ltYm9sIHN0eWxlIFdFUCAqLworCQlpZiAocHJpdi0+ZW5jb2RlX2FsZyA9PSBJV19FTkNPREVfQUxHX1dFUCkgeworCQkJaWYgKHByaXYtPndlcF9yZXN0cmljdCB8fAorCQkJICAgIChwcml2LT5maXJtd2FyZV90eXBlID09IEZJUk1XQVJFX1RZUEVfU1lNQk9MKSkKKwkJCQltYXN0ZXJfd2VwX2ZsYWcgPSBIRVJNRVNfV0VQX1BSSVZBQ1lfSU5WT0tFRCB8CisJCQkJCQkgIEhFUk1FU19XRVBfRVhDTF9VTkVOQ1JZUFRFRDsKKwkJCWVsc2UKKwkJCQltYXN0ZXJfd2VwX2ZsYWcgPSBIRVJNRVNfV0VQX1BSSVZBQ1lfSU5WT0tFRDsKKworCQkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCQkJICAgSEVSTUVTX1JJRF9DTkZBVVRIRU5USUNBVElPTiwKKwkJCQkJCSAgIGF1dGhfZmxhZyk7CisJCQlpZiAoZXJyKQorCQkJCXJldHVybiBlcnI7CisJCX0gZWxzZQorCQkJbWFzdGVyX3dlcF9mbGFnID0gMDsKKworCQlpZiAocHJpdi0+aXdfbW9kZSA9PSBJV19NT0RFX01PTklUT1IpCisJCQltYXN0ZXJfd2VwX2ZsYWcgfD0gSEVSTUVTX1dFUF9IT1NUX0RFQ1JZUFQ7CisKKwkJLyogTWFzdGVyIFdFUCBzZXR0aW5nIDogb24vb2ZmICovCisJCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKKwkJCQkJICAgSEVSTUVTX1JJRF9DTkZXRVBGTEFHU19JTlRFUlNJTCwKKwkJCQkJICAgbWFzdGVyX3dlcF9mbGFnKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIGtleSBtdXN0IGJlIDMyIGJ5dGVzLCBpbmNsdWRpbmcgdGhlIHR4IGFuZCByeCBNSUMga2V5cy4KKyAqIHJzYyBtdXN0IGJlIDggYnl0ZXMKKyAqIHRzYyBtdXN0IGJlIDggYnl0ZXMgb3IgTlVMTAorICovCitpbnQgX19vcmlub2NvX2h3X3NldF90a2lwX2tleShoZXJtZXNfdCAqaHcsIGludCBrZXlfaWR4LCBpbnQgc2V0X3R4LAorCQkJICAgICAgdTggKmtleSwgdTggKnJzYywgdTggKnRzYykKK3sKKwlzdHJ1Y3QgeworCQlfX2xlMTYgaWR4OworCQl1OCByc2NbSVdfRU5DT0RFX1NFUV9NQVhfU0laRV07CisJCXU4IGtleVtUS0lQX0tFWUxFTl07CisJCXU4IHR4X21pY1tNSUNfS0VZTEVOXTsKKwkJdTggcnhfbWljW01JQ19LRVlMRU5dOworCQl1OCB0c2NbSVdfRU5DT0RFX1NFUV9NQVhfU0laRV07CisJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgYnVmOworCWludCByZXQ7CisJaW50IGVycjsKKwlpbnQgazsKKwl1MTYgeG1pdHRpbmc7CisKKwlrZXlfaWR4ICY9IDB4MzsKKworCWlmIChzZXRfdHgpCisJCWtleV9pZHggfD0gMHg4MDAwOworCisJYnVmLmlkeCA9IGNwdV90b19sZTE2KGtleV9pZHgpOworCW1lbWNweShidWYua2V5LCBrZXksCisJICAgICAgIHNpemVvZihidWYua2V5KSArIHNpemVvZihidWYudHhfbWljKSArIHNpemVvZihidWYucnhfbWljKSk7CisKKwlpZiAocnNjID09IE5VTEwpCisJCW1lbXNldChidWYucnNjLCAwLCBzaXplb2YoYnVmLnJzYykpOworCWVsc2UKKwkJbWVtY3B5KGJ1Zi5yc2MsIHJzYywgc2l6ZW9mKGJ1Zi5yc2MpKTsKKworCWlmICh0c2MgPT0gTlVMTCkgeworCQltZW1zZXQoYnVmLnRzYywgMCwgc2l6ZW9mKGJ1Zi50c2MpKTsKKwkJYnVmLnRzY1s0XSA9IDB4MTA7CisJfSBlbHNlIHsKKwkJbWVtY3B5KGJ1Zi50c2MsIHRzYywgc2l6ZW9mKGJ1Zi50c2MpKTsKKwl9CisKKwkvKiBXYWl0IHVwdG8gMTAwbXMgZm9yIHR4IHF1ZXVlIHRvIGVtcHR5ICovCisJayA9IDEwMDsKKwlkbyB7CisJCWstLTsKKwkJdWRlbGF5KDEwMDApOworCQlyZXQgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9UWFFVRVVFRU1QVFksCisJCQkJCSAgJnhtaXR0aW5nKTsKKwkJaWYgKHJldCkKKwkJCWJyZWFrOworCX0gd2hpbGUgKChrID4gMCkgJiYgeG1pdHRpbmcpOworCisJaWYgKGsgPT0gMCkKKwkJcmV0ID0gLUVUSU1FRE9VVDsKKworCWVyciA9IEhFUk1FU19XUklURV9SRUNPUkQoaHcsIFVTRVJfQkFQLAorCQkJCSAgSEVSTUVTX1JJRF9DTkZBRERERUZBVUxUVEtJUEtFWV9BR0VSRSwKKwkJCQkgICZidWYpOworCisJcmV0dXJuIHJldCA/IHJldCA6IGVycjsKK30KKworaW50IG9yaW5vY29fY2xlYXJfdGtpcF9rZXkoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwgaW50IGtleV9pZHgpCit7CisJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OworCWludCBlcnI7CisKKwltZW1zZXQoJnByaXYtPnRraXBfa2V5W2tleV9pZHhdLCAwLCBzaXplb2YocHJpdi0+dGtpcF9rZXlba2V5X2lkeF0pKTsKKwllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCisJCQkJICAgSEVSTUVTX1JJRF9DTkZSRU1ERUZBVUxUVEtJUEtFWV9BR0VSRSwKKwkJCQkgICBrZXlfaWR4KTsKKwlpZiAoZXJyKQorCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogRXJyb3IgJWQgY2xlYXJpbmcgVEtJUCBrZXkgJWRcbiIsCisJCSAgICAgICBwcml2LT5uZGV2LT5uYW1lLCBlcnIsIGtleV9pZHgpOworCXJldHVybiBlcnI7Cit9CisKK2ludCBfX29yaW5vY29faHdfc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsCisJCQkJICAgIHN0cnVjdCBkZXZfYWRkcl9saXN0ICptY19saXN0LAorCQkJCSAgICBpbnQgbWNfY291bnQsIGludCBwcm9taXNjKQoreworCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKKwlpbnQgZXJyID0gMDsKKworCWlmIChwcm9taXNjICE9IHByaXYtPnByb21pc2N1b3VzKSB7CisJCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKKwkJCQkJICAgSEVSTUVTX1JJRF9DTkZQUk9NSVNDVU9VU01PREUsCisJCQkJCSAgIHByb21pc2MpOworCQlpZiAoZXJyKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIFBST01JU0NVT1VTTU9ERSB0byAxLlxuIiwKKwkJCSAgICAgICBwcml2LT5uZGV2LT5uYW1lLCBlcnIpOworCQl9IGVsc2UKKwkJCXByaXYtPnByb21pc2N1b3VzID0gcHJvbWlzYzsKKwl9CisKKwkvKiBJZiB3ZSdyZSBub3QgaW4gcHJvbWlzY3VvdXMgbW9kZSwgdGhlbiB3ZSBuZWVkIHRvIHNldCB0aGUKKwkgKiBncm91cCBhZGRyZXNzIGlmIGVpdGhlciB3ZSB3YW50IHRvIG11bHRpY2FzdCwgb3IgaWYgd2Ugd2VyZQorCSAqIG11bHRpY2FzdGluZyBhbmQgd2FudCB0byBzdG9wICovCisJaWYgKCFwcm9taXNjICYmIChtY19jb3VudCB8fCBwcml2LT5tY19jb3VudCkpIHsKKwkJc3RydWN0IGRldl9tY19saXN0ICpwID0gbWNfbGlzdDsKKwkJc3RydWN0IGhlcm1lc19tdWx0aWNhc3QgbWNsaXN0OworCQlpbnQgaTsKKworCQlmb3IgKGkgPSAwOyBpIDwgbWNfY291bnQ7IGkrKykgeworCQkJLyogcGFyYW5vaWE6IGlzIGxpc3Qgc2hvcnRlciB0aGFuIG1jX2NvdW50PyAqLworCQkJQlVHX09OKCFwKTsKKwkJCS8qIHBhcmFub2lhOiBiYWQgYWRkcmVzcyBzaXplIGluIGxpc3Q/ICovCisJCQlCVUdfT04ocC0+ZG1pX2FkZHJsZW4gIT0gRVRIX0FMRU4pOworCisJCQltZW1jcHkobWNsaXN0LmFkZHJbaV0sIHAtPmRtaV9hZGRyLCBFVEhfQUxFTik7CisJCQlwID0gcC0+bmV4dDsKKwkJfQorCisJCWlmIChwKQorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IE11bHRpY2FzdCBsaXN0IGlzICIKKwkJCSAgICAgICAibG9uZ2VyIHRoYW4gbWNfY291bnRcbiIsIHByaXYtPm5kZXYtPm5hbWUpOworCisJCWVyciA9IGhlcm1lc193cml0ZV9sdHYoaHcsIFVTRVJfQkFQLAorCQkJCSAgIEhFUk1FU19SSURfQ05GR1JPVVBBRERSRVNTRVMsCisJCQkJICAgSEVSTUVTX0JZVEVTX1RPX1JFQ0xFTihtY19jb3VudCAqIEVUSF9BTEVOKSwKKwkJCQkgICAmbWNsaXN0KTsKKwkJaWYgKGVycikKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgbXVsdGljYXN0IGxpc3QuXG4iLAorCQkJICAgICAgIHByaXYtPm5kZXYtPm5hbWUsIGVycik7CisJCWVsc2UKKwkJCXByaXYtPm1jX2NvdW50ID0gbWNfY291bnQ7CisJfQorCXJldHVybiBlcnI7Cit9CisKKy8qIFJldHVybiA6IDwgMCAtPiBlcnJvciBjb2RlIDsgPj0gMCAtPiBsZW5ndGggKi8KK2ludCBvcmlub2NvX2h3X2dldF9lc3NpZChzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LCBpbnQgKmFjdGl2ZSwKKwkJCSBjaGFyIGJ1ZltJV19FU1NJRF9NQVhfU0laRSsxXSkKK3sKKwloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CisJaW50IGVyciA9IDA7CisJc3RydWN0IGhlcm1lc19pZHN0cmluZyBlc3NpZGJ1ZjsKKwljaGFyICpwID0gKGNoYXIgKikoJmVzc2lkYnVmLnZhbCk7CisJaW50IGxlbjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCisJCXJldHVybiAtRUJVU1k7CisKKwlpZiAoc3RybGVuKHByaXYtPmRlc2lyZWRfZXNzaWQpID4gMCkgeworCQkvKiBXZSByZWFkIHRoZSBkZXNpcmVkIFNTSUQgZnJvbSB0aGUgaGFyZHdhcmUgcmF0aGVyCisJCSAgIHRoYW4gZnJvbSBwcml2LT5kZXNpcmVkX2Vzc2lkLCBqdXN0IGluIGNhc2UgdGhlCisJCSAgIGZpcm13YXJlIGlzIGFsbG93ZWQgdG8gY2hhbmdlIGl0IG9uIHVzLiBJJ20gbm90CisJCSAgIHN1cmUgYWJvdXQgdGhpcyAqLworCQkvKiBNeSBndWVzcyBpcyB0aGF0IHRoZSBPV05TU0lEIHNob3VsZCBhbHdheXMgYmUgd2hhdGV2ZXIKKwkJICogd2Ugc2V0IHRvIHRoZSBjYXJkLCB3aGVyZWFzIENVUlJFTlRfU1NJRCBpcyB0aGUgb25lIHRoYXQKKwkJICogbWF5IGNoYW5nZS4uLiAtIEplYW4gSUkgKi8KKwkJdTE2IHJpZDsKKworCQkqYWN0aXZlID0gMTsKKworCQlyaWQgPSAocHJpdi0+cG9ydF90eXBlID09IDMpID8gSEVSTUVTX1JJRF9DTkZPV05TU0lEIDoKKwkJCUhFUk1FU19SSURfQ05GREVTSVJFRFNTSUQ7CisKKwkJZXJyID0gaGVybWVzX3JlYWRfbHR2KGh3LCBVU0VSX0JBUCwgcmlkLCBzaXplb2YoZXNzaWRidWYpLAorCQkJCSAgICAgIE5VTEwsICZlc3NpZGJ1Zik7CisJCWlmIChlcnIpCisJCQlnb3RvIGZhaWxfdW5sb2NrOworCX0gZWxzZSB7CisJCSphY3RpdmUgPSAwOworCisJCWVyciA9IGhlcm1lc19yZWFkX2x0dihodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ1VSUkVOVFNTSUQsCisJCQkJICAgICAgc2l6ZW9mKGVzc2lkYnVmKSwgTlVMTCwgJmVzc2lkYnVmKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZmFpbF91bmxvY2s7CisJfQorCisJbGVuID0gbGUxNl90b19jcHUoZXNzaWRidWYubGVuKTsKKwlCVUdfT04obGVuID4gSVdfRVNTSURfTUFYX1NJWkUpOworCisJbWVtc2V0KGJ1ZiwgMCwgSVdfRVNTSURfTUFYX1NJWkUpOworCW1lbWNweShidWYsIHAsIGxlbik7CisJZXJyID0gbGVuOworCisgZmFpbF91bmxvY2s6CisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKworCXJldHVybiBlcnI7Cit9CisKK2ludCBvcmlub2NvX2h3X2dldF9mcmVxKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCit7CisJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OworCWludCBlcnIgPSAwOworCXUxNiBjaGFubmVsOworCWludCBmcmVxID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCisJCXJldHVybiAtRUJVU1k7CisKKwllcnIgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DVVJSRU5UQ0hBTk5FTCwKKwkJCQkgICZjaGFubmVsKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCS8qIEludGVyc2lsIGZpcm13YXJlIDEuMy41IHJldHVybnMgMCB3aGVuIHRoZSBpbnRlcmZhY2UgaXMgZG93biAqLworCWlmIChjaGFubmVsID09IDApIHsKKwkJZXJyID0gLUVCVVNZOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoKGNoYW5uZWwgPCAxKSB8fCAoY2hhbm5lbCA+IE5VTV9DSEFOTkVMUykpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IENoYW5uZWwgb3V0IG9mIHJhbmdlICglZCkhXG4iLAorCQkgICAgICAgcHJpdi0+bmRldi0+bmFtZSwgY2hhbm5lbCk7CisJCWVyciA9IC1FQlVTWTsKKwkJZ290byBvdXQ7CisKKwl9CisJZnJlcSA9IGllZWU4MDIxMV9kc3NzX2NoYW5fdG9fZnJlcShjaGFubmVsKTsKKworIG91dDoKKwlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworCisJaWYgKGVyciA+IDApCisJCWVyciA9IC1FQlVTWTsKKwlyZXR1cm4gZXJyID8gZXJyIDogZnJlcTsKK30KKworaW50IG9yaW5vY29faHdfZ2V0X2JpdHJhdGVsaXN0KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsCisJCQkgICAgICAgaW50ICpudW1yYXRlcywgczMyICpyYXRlcywgaW50IG1heCkKK3sKKwloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CisJc3RydWN0IGhlcm1lc19pZHN0cmluZyBsaXN0OworCXVuc2lnbmVkIGNoYXIgKnAgPSAodW5zaWduZWQgY2hhciAqKSZsaXN0LnZhbDsKKwlpbnQgZXJyID0gMDsKKwlpbnQgbnVtOworCWludCBpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWVyciA9IGhlcm1lc19yZWFkX2x0dihodywgVVNFUl9CQVAsIEhFUk1FU19SSURfU1VQUE9SVEVEREFUQVJBVEVTLAorCQkJICAgICAgc2l6ZW9mKGxpc3QpLCBOVUxMLCAmbGlzdCk7CisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwludW0gPSBsZTE2X3RvX2NwdShsaXN0Lmxlbik7CisJKm51bXJhdGVzID0gbnVtOworCW51bSA9IG1pbihudW0sIG1heCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspCisJCXJhdGVzW2ldID0gKHBbaV0gJiAweDdmKSAqIDUwMDAwMDsgLyogY29udmVydCB0byBicHMgKi8KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9ody5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9ody5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjM2YyM2EKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2h3LmgKQEAgLTAsMCArMSw0NyBAQAorLyogRW5jYXBzdWxhdGUgYmFzaWMgc2V0dGluZyBjaGFuZ2VzIG9uIEhlcm1lcyBoYXJkd2FyZQorICoKKyAqIFNlZSBjb3B5cmlnaHQgbm90aWNlIGluIG1haW4uYworICovCisjaWZuZGVmIF9PUklOT0NPX0hXX0hfCisjZGVmaW5lIF9PUklOT0NPX0hXX0hfCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CisKKy8qIEhhcmR3YXJlIEJBUHMgKi8KKyNkZWZpbmUgVVNFUl9CQVAgMAorI2RlZmluZSBJUlFfQkFQICAxCisKKy8qIFdFUCBrZXkgc2l6ZXMgKi8KKyNkZWZpbmUgU01BTExfS0VZX1NJWkUgNQorI2RlZmluZSBMQVJHRV9LRVlfU0laRSAxMworCisvKiBOdW1iZXIgb2Ygc3VwcG9ydGVkIGNoYW5uZWxzICovCisjZGVmaW5lIE5VTV9DSEFOTkVMUyAxNAorCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9ucyAqLworc3RydWN0IG9yaW5vY29fcHJpdmF0ZTsKK3N0cnVjdCBkZXZfYWRkcl9saXN0OworCitpbnQgb3Jpbm9jb19nZXRfYml0cmF0ZW1vZGUoaW50IGJpdHJhdGUsIGludCBhdXRvbWF0aWMpOwordm9pZCBvcmlub2NvX2dldF9yYXRlbW9kZV9jZmcoaW50IHJhdGVtb2RlLCBpbnQgKmJpdHJhdGUsIGludCAqYXV0b21hdGljKTsKKworaW50IG9yaW5vY29faHdfZ2V0X3RraXBfaXYoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwgaW50IGtleSwgdTggKnRzYyk7CitpbnQgX19vcmlub2NvX2h3X3NldF9iaXRyYXRlKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpOworaW50IG9yaW5vY29faHdfZ2V0X2FjdF9iaXRyYXRlKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsIGludCAqYml0cmF0ZSk7CitpbnQgX19vcmlub2NvX2h3X3NldF93YXAoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdik7CitpbnQgX19vcmlub2NvX2h3X3NldHVwX3dlcGtleXMoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdik7CitpbnQgX19vcmlub2NvX2h3X3NldHVwX2VuYyhzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KTsKK2ludCBfX29yaW5vY29faHdfc2V0X3RraXBfa2V5KGhlcm1lc190ICpodywgaW50IGtleV9pZHgsIGludCBzZXRfdHgsCisJCQkgICAgICB1OCAqa2V5LCB1OCAqcnNjLCB1OCAqdHNjKTsKK2ludCBvcmlub2NvX2NsZWFyX3RraXBfa2V5KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsIGludCBrZXlfaWR4KTsKK2ludCBfX29yaW5vY29faHdfc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsCisJCQkJICAgIHN0cnVjdCBkZXZfYWRkcl9saXN0ICptY19saXN0LAorCQkJCSAgICBpbnQgbWNfY291bnQsIGludCBwcm9taXNjKTsKK2ludCBvcmlub2NvX2h3X2dldF9lc3NpZChzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LCBpbnQgKmFjdGl2ZSwKKwkJCSBjaGFyIGJ1ZltJV19FU1NJRF9NQVhfU0laRSsxXSk7CitpbnQgb3Jpbm9jb19od19nZXRfZnJlcShzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KTsKK2ludCBvcmlub2NvX2h3X2dldF9iaXRyYXRlbGlzdChzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LAorCQkJICAgICAgIGludCAqbnVtcmF0ZXMsIHMzMiAqcmF0ZXMsIGludCBtYXgpOworCisjZW5kaWYgLyogX09SSU5PQ09fSFdfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ1NTkzYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vbWFpbi5jCkBAIC0wLDAgKzEsMjY2NyBAQAorLyogbWFpbi5jIC0gKGZvcm1lcmx5IGtub3duIGFzIGRsZHdkX2NzLmMsIG9yaW5vY29fY3MuYyBhbmQgb3Jpbm9jby5jKQorICoKKyAqIEEgZHJpdmVyIGZvciBIZXJtZXMgb3IgUHJpc20gMiBjaGlwc2V0IGJhc2VkIFBDTUNJQSB3aXJlbGVzcworICogYWRhcHRvcnMsIHdpdGggTHVjZW50L0FnZXJlLCBJbnRlcnNpbCBvciBTeW1ib2wgZmlybXdhcmUuCisgKgorICogQ3VycmVudCBtYWludGFpbmVycyAoYXMgb2YgMjkgU2VwdGVtYmVyIDIwMDMpIGFyZToKKyAqIAlQYXZlbCBSb3NraW4gPHByb3NraSBBVCBnbnUub3JnPgorICogYW5kCURhdmlkIEdpYnNvbiA8aGVybWVzIEFUIGdpYnNvbi5kcm9wYmVhci5pZC5hdT4KKyAqCisgKiAoQykgQ29weXJpZ2h0IERhdmlkIEdpYnNvbiwgSUJNIENvcnBvcmF0aW9uIDIwMDEtMjAwMy4KKyAqIENvcHlyaWdodCAoQykgMjAwMCBEYXZpZCBHaWJzb24sIExpbnV4Y2FyZSBBdXN0cmFsaWEuCisgKglXaXRoIHNvbWUgaGVscCBmcm9tIDoKKyAqIENvcHlyaWdodCAoQykgMjAwMSBKZWFuIFRvdXJyaWxoZXMsIEhQIExhYnMKKyAqIENvcHlyaWdodCAoQykgMjAwMSBCZW5qYW1pbiBIZXJyZW5zY2htaWR0CisgKgorICogQmFzZWQgb24gZHVtbXlfY3MuYyAxLjI3IDIwMDAvMDYvMTIgMjE6Mjc6MjUKKyAqCisgKiBQb3J0aW9ucyBiYXNlZCBvbiB3dmxhbl9jcy5jIDEuMC42LCBDb3B5cmlnaHQgQW5kcmVhcyBOZXVoYXVzIDxhbmR5CisgKiBBVCBmYXN0YS5maC1kb3J0bXVuZC5kZT4KKyAqICAgICAgaHR0cDovL3d3dy5zdHVkLmZoLWRvcnRtdW5kLmRlL35hbmR5L3d2bGFuLworICoKKyAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UKKyAqIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4KKyAqIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlCisgKiBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyAqCisgKiBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiCisgKiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlCisgKiB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiBUaGUgaW5pdGlhbCBkZXZlbG9wZXIgb2YgdGhlIG9yaWdpbmFsIGNvZGUgaXMgRGF2aWQgQS4gSGluZHMKKyAqIDxkYWhpbmRzIEFUIHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4uICBQb3J0aW9ucyBjcmVhdGVkIGJ5IERhdmlkCisgKiBBLiBIaW5kcyBhcmUgQ29weXJpZ2h0IChDKSAxOTk5IERhdmlkIEEuIEhpbmRzLiAgQWxsIFJpZ2h0cworICogUmVzZXJ2ZWQuCisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUKKyAqIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgKHRoZSAiR1BMIiksIGluCisgKiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZCBvZiB0aGUKKyAqIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxsb3cgdGhlIHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlCisgKiBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR1BMIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZSB5b3VyCisgKiB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyIGRlY2lzaW9uIGJ5CisgKiBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZSBhbmQKKyAqIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTC4gIElmIHlvdSBkbyBub3QgZGVsZXRlIHRoZQorICogcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlCisgKiB1bmRlciBlaXRoZXIgdGhlIE1QTCBvciB0aGUgR1BMLiAgKi8KKworLyoKKyAqIFRPRE8KKyAqCW8gSGFuZGxlIGRlLWVuY2Fwc3VsYXRpb24gd2l0aGluIG5ldHdvcmsgbGF5ZXIsIHByb3ZpZGUgODAyLjExCisgKgkgIGhlYWRlcnMgKHBhdGNoIGZyb20gVGhvbWFzICdEZW50JyBNaXJsYWNoZXIpCisgKglvIEZpeCBwb3NzaWJsZSByYWNlcyBpbiBTUFkgaGFuZGxpbmcuCisgKglvIERpc2Nvbm5lY3Qgd2lyZWxlc3MgZXh0ZW5zaW9ucyBmcm9tIGZ1bmRhbWVudGFsIGNvbmZpZ3VyYXRpb24uCisgKglvIChtYXliZSkgU29mdHdhcmUgV0VQIHN1cHBvcnQgKHBhdGNoIGZyb20gU3Rhbm8gTWVkdW5hKS4KKyAqCW8gKG1heWJlKSBVc2UgbXVsdGlwbGUgVHggYnVmZmVycyAtIGRyaXZlciBoYW5kbGluZyBxdWV1ZQorICoJICByYXRoZXIgdGhhbiBmaXJtd2FyZS4KKyAqLworCisvKiBMb2NraW5nIGFuZCBzeW5jaHJvbml6YXRpb246CisgKgorICogVGhlIGJhc2ljIHByaW5jaXBsZSBpcyB0aGF0IGV2ZXJ5dGhpbmcgaXMgc2VyaWFsaXplZCB0aHJvdWdoIGEKKyAqIHNpbmdsZSBzcGlubG9jaywgcHJpdi0+bG9jay4gIFRoZSBsb2NrIGlzIHVzZWQgaW4gdXNlciwgYmggYW5kIGlycQorICogY29udGV4dCwgc28gd2hlbiB0YWtlbiBvdXRzaWRlIGhhcmRpcnEgY29udGV4dCBpdCBzaG91bGQgYWx3YXlzIGJlCisgKiB0YWtlbiB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQuICBUaGUgbG9jayBwcm90ZWN0cyBib3RoIHRoZQorICogaGFyZHdhcmUgYW5kIHRoZSBzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlLgorICoKKyAqIEFub3RoZXIgZmxhZywgcHJpdi0+aHdfdW5hdmFpbGFibGUgaW5kaWNhdGVzIHRoYXQgdGhlIGhhcmR3YXJlIGlzCisgKiB1bmF2YWlsYWJsZSBmb3IgYW4gZXh0ZW5kZWQgcGVyaW9kIG9mIHRpbWUgKGUuZy4gc3VzcGVuZGVkLCBvciBpbgorICogdGhlIG1pZGRsZSBvZiBhIGhhcmQgcmVzZXQpLiAgVGhpcyBmbGFnIGlzIHByb3RlY3RlZCBieSB0aGUKKyAqIHNwaW5sb2NrLiAgQWxsIGNvZGUgd2hpY2ggdG91Y2hlcyB0aGUgaGFyZHdhcmUgc2hvdWxkIGNoZWNrIHRoZQorICogZmxhZyBhZnRlciB0YWtpbmcgdGhlIGxvY2ssIGFuZCBpZiBpdCBpcyBzZXQsIGdpdmUgdXAgb24gd2hhdGV2ZXIKKyAqIHRoZXkgYXJlIGRvaW5nIGFuZCBkcm9wIHRoZSBsb2NrIGFnYWluLiAgVGhlIG9yaW5vY29fbG9jaygpCisgKiBmdW5jdGlvbiBoYW5kbGVzIHRoaXMgKGl0IHVubG9ja3MgYW5kIHJldHVybnMgLUVCVVNZIGlmCisgKiBod191bmF2YWlsYWJsZSBpcyBub24temVybykuCisgKi8KKworI2RlZmluZSBEUklWRVJfTkFNRSAib3Jpbm9jbyIKKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgorI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KKyNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2llZWU4MDIxMS5oPgorI2luY2x1ZGUgPG5ldC9pd19oYW5kbGVyLmg+CisKKyNpbmNsdWRlICJoZXJtZXNfcmlkLmgiCisjaW5jbHVkZSAiaGVybWVzX2RsZC5oIgorI2luY2x1ZGUgImh3LmgiCisjaW5jbHVkZSAic2Nhbi5oIgorI2luY2x1ZGUgIm1pYy5oIgorI2luY2x1ZGUgImZ3LmgiCisjaW5jbHVkZSAid2V4dC5oIgorI2luY2x1ZGUgIm1haW4uaCIKKworI2luY2x1ZGUgIm9yaW5vY28uaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogTW9kdWxlIGluZm9ybWF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitNT0RVTEVfQVVUSE9SKCJQYXZlbCBSb3NraW4gPHByb3NraUBnbnUub3JnPiAmICIKKwkgICAgICAiRGF2aWQgR2lic29uIDxoZXJtZXNAZ2lic29uLmRyb3BiZWFyLmlkLmF1PiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIEx1Y2VudCBPcmlub2NvLCBQcmlzbSBJSSBiYXNlZCAiCisJCSAgICJhbmQgc2ltaWxhciB3aXJlbGVzcyBjYXJkcyIpOworTU9EVUxFX0xJQ0VOU0UoIkR1YWwgTVBML0dQTCIpOworCisvKiBMZXZlbCBvZiBkZWJ1Z2dpbmcuIFVzZWQgaW4gdGhlIG1hY3JvcyBpbiBvcmlub2NvLmggKi8KKyNpZmRlZiBPUklOT0NPX0RFQlVHCitpbnQgb3Jpbm9jb19kZWJ1ZyA9IE9SSU5PQ09fREVCVUc7CitFWFBPUlRfU1lNQk9MKG9yaW5vY29fZGVidWcpOworbW9kdWxlX3BhcmFtKG9yaW5vY29fZGVidWcsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKG9yaW5vY29fZGVidWcsICJEZWJ1ZyBsZXZlbCIpOworI2VuZGlmCisKK3N0YXRpYyBpbnQgc3VwcHJlc3NfbGlua3N0YXR1czsgLyogPSAwICovCittb2R1bGVfcGFyYW0oc3VwcHJlc3NfbGlua3N0YXR1cywgYm9vbCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHN1cHByZXNzX2xpbmtzdGF0dXMsICJEb24ndCBsb2cgbGluayBzdGF0dXMgY2hhbmdlcyIpOworCitzdGF0aWMgaW50IGlnbm9yZV9kaXNjb25uZWN0OyAvKiA9IDAgKi8KK21vZHVsZV9wYXJhbShpZ25vcmVfZGlzY29ubmVjdCwgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoaWdub3JlX2Rpc2Nvbm5lY3QsCisJCSAiRG9uJ3QgcmVwb3J0IGxvc3QgbGluayB0byB0aGUgbmV0d29yayBsYXllciIpOworCitpbnQgZm9yY2VfbW9uaXRvcjsgLyogPSAwICovCittb2R1bGVfcGFyYW0oZm9yY2VfbW9uaXRvciwgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZm9yY2VfbW9uaXRvciwgIkFsbG93IG1vbml0b3IgbW9kZSBmb3IgYWxsIGZpcm13YXJlIHZlcnNpb25zIik7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEludGVybmFsIGNvbnN0YW50cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogODAyLjIgTExDL1NOQVAgaGVhZGVyIHVzZWQgZm9yIEV0aGVybmV0IGVuY2Fwc3VsYXRpb24gb3ZlciA4MDIuMTEgKi8KK3N0YXRpYyBjb25zdCB1OCBlbmNhcHNfaGRyW10gPSB7MHhhYSwgMHhhYSwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMH07CisjZGVmaW5lIEVOQ0FQU19PVkVSSEVBRAkJKHNpemVvZihlbmNhcHNfaGRyKSArIDIpCisKKyNkZWZpbmUgT1JJTk9DT19NSU5fTVRVCQkyNTYKKyNkZWZpbmUgT1JJTk9DT19NQVhfTVRVCQkoSUVFRTgwMjExX01BWF9EQVRBX0xFTiAtIEVOQ0FQU19PVkVSSEVBRCkKKworI2RlZmluZSBTWU1CT0xfTUFYX1ZFUl9MRU4JKDE0KQorI2RlZmluZSBNQVhfSVJRTE9PUFNfUEVSX0lSUQkxMAorI2RlZmluZSBNQVhfSVJRTE9PUFNfUEVSX0pJRkZZCSgyMDAwMC9IWikgLyogQmFzZWQgb24gYSBndWVzdGltYXRlIG9mCisJCQkJCSAgICAqIGhvdyBtYW55IGV2ZW50cyB0aGUKKwkJCQkJICAgICogZGV2aWNlIGNvdWxkCisJCQkJCSAgICAqIGxlZ2l0aW1hdGVseSBnZW5lcmF0ZSAqLworI2RlZmluZSBUWF9OSUNCVUZfU0laRV9CVUcJMTU4NQkJLyogQnVnIGluIFN5bWJvbCBmaXJtd2FyZSAqLworCisjZGVmaW5lIERVTU1ZX0ZJRAkJMHhGRkZGCisKKy8qI2RlZmluZSBNQVhfTVVMVElDQVNUKHByaXYpCShwcml2LT5maXJtd2FyZV90eXBlID09IEZJUk1XQVJFX1RZUEVfQUdFUkUgPyBcCisgIEhFUk1FU19NQVhfTVVMVElDQVNUIDogMCkqLworI2RlZmluZSBNQVhfTVVMVElDQVNUKHByaXYpCShIRVJNRVNfTUFYX01VTFRJQ0FTVCkKKworI2RlZmluZSBPUklOT0NPX0lOVEVOCSAJKEhFUk1FU19FVl9SWCB8IEhFUk1FU19FVl9BTExPQyBcCisJCQkJIHwgSEVSTUVTX0VWX1RYIHwgSEVSTUVTX0VWX1RYRVhDIFwKKwkJCQkgfCBIRVJNRVNfRVZfV1RFUlIgfCBIRVJNRVNfRVZfSU5GTyBcCisJCQkJIHwgSEVSTUVTX0VWX0lORkRST1ApCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgb3Jpbm9jb19ldGh0b29sX29wczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogRGF0YSB0eXBlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBCZWdpbm5pbmcgb2YgdGhlIFR4IGRlc2NyaXB0b3IsIHVzZWQgaW4gVHhFeGMgaGFuZGxpbmcgKi8KK3N0cnVjdCBoZXJtZXNfdHhleGNfZGF0YSB7CisJc3RydWN0IGhlcm1lc190eF9kZXNjcmlwdG9yIGRlc2M7CisJX19sZTE2IGZyYW1lX2N0bDsKKwlfX2xlMTYgZHVyYXRpb25faWQ7CisJdTggYWRkcjFbRVRIX0FMRU5dOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qIFJ4IGZyYW1lIGhlYWRlciBleGNlcHQgY29tcGF0aWJpbGl0eSA4MDIuMyBoZWFkZXIgKi8KK3N0cnVjdCBoZXJtZXNfcnhfZGVzY3JpcHRvciB7CisJLyogQ29udHJvbCAqLworCV9fbGUxNiBzdGF0dXM7CisJX19sZTMyIHRpbWU7CisJdTggc2lsZW5jZTsKKwl1OCBzaWduYWw7CisJdTggcmF0ZTsKKwl1OCByeGZsb3c7CisJX19sZTMyIHJlc2VydmVkOworCisJLyogODAyLjExIGhlYWRlciAqLworCV9fbGUxNiBmcmFtZV9jdGw7CisJX19sZTE2IGR1cmF0aW9uX2lkOworCXU4IGFkZHIxW0VUSF9BTEVOXTsKKwl1OCBhZGRyMltFVEhfQUxFTl07CisJdTggYWRkcjNbRVRIX0FMRU5dOworCV9fbGUxNiBzZXFfY3RsOworCXU4IGFkZHI0W0VUSF9BTEVOXTsKKworCS8qIERhdGEgbGVuZ3RoICovCisJX19sZTE2IGRhdGFfbGVuOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBvcmlub2NvX3J4X2RhdGEgeworCXN0cnVjdCBoZXJtZXNfcnhfZGVzY3JpcHRvciAqZGVzYzsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEZ1bmN0aW9uIHByb3RvdHlwZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQgX19vcmlub2NvX3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogSW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit2b2lkIHNldF9wb3J0X3R5cGUoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKK3sKKwlzd2l0Y2ggKHByaXYtPml3X21vZGUpIHsKKwljYXNlIElXX01PREVfSU5GUkE6CisJCXByaXYtPnBvcnRfdHlwZSA9IDE7CisJCXByaXYtPmNyZWF0ZWlic3MgPSAwOworCQlicmVhazsKKwljYXNlIElXX01PREVfQURIT0M6CisJCWlmIChwcml2LT5wcmVmZXJfcG9ydDMpIHsKKwkJCXByaXYtPnBvcnRfdHlwZSA9IDM7CisJCQlwcml2LT5jcmVhdGVpYnNzID0gMDsKKwkJfSBlbHNlIHsKKwkJCXByaXYtPnBvcnRfdHlwZSA9IHByaXYtPmlic3NfcG9ydDsKKwkJCXByaXYtPmNyZWF0ZWlic3MgPSAxOworCQl9CisJCWJyZWFrOworCWNhc2UgSVdfTU9ERV9NT05JVE9SOgorCQlwcml2LT5wb3J0X3R5cGUgPSAzOworCQlwcml2LT5jcmVhdGVpYnNzID0gMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogSW52YWxpZCBwcml2LT5pd19tb2RlIGluIHNldF9wb3J0X3R5cGUoKVxuIiwKKwkJICAgICAgIHByaXYtPm5kZXYtPm5hbWUpOworCX0KK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogRGV2aWNlIG1ldGhvZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IG9yaW5vY29fb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGVycjsKKworCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQorCQlyZXR1cm4gLUVCVVNZOworCisJZXJyID0gX19vcmlub2NvX3VwKGRldik7CisKKwlpZiAoIWVycikKKwkJcHJpdi0+b3BlbiA9IDE7CisKKwlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBvcmlub2NvX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgZXJyID0gMDsKKworCS8qIFdlIG11c3RuJ3QgdXNlIG9yaW5vY29fbG9jaygpIGhlcmUsIGJlY2F1c2Ugd2UgbmVlZCB0byBiZQorCSAgIGFibGUgdG8gY2xvc2UgdGhlIGludGVyZmFjZSBldmVuIGlmIGh3X3VuYXZhaWxhYmxlIGlzIHNldAorCSAgIChlLmcuIGFzIHdlJ3JlIHJlbGVhc2VkIGFmdGVyIGEgUEMgQ2FyZCByZW1vdmFsKSAqLworCXNwaW5fbG9ja19pcnEoJnByaXYtPmxvY2spOworCisJcHJpdi0+b3BlbiA9IDA7CisKKwllcnIgPSBfX29yaW5vY29fZG93bihkZXYpOworCisJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5sb2NrKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqb3Jpbm9jb19nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCXJldHVybiAmcHJpdi0+c3RhdHM7Cit9CisKK3N0YXRpYyB2b2lkIG9yaW5vY29fc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogb3Jpbm9jb19zZXRfbXVsdGljYXN0X2xpc3QoKSAiCisJCSAgICAgICAiY2FsbGVkIHdoZW4gaHdfdW5hdmFpbGFibGVcbiIsIGRldi0+bmFtZSk7CisJCXJldHVybjsKKwl9CisKKwlfX29yaW5vY29fc2V0X211bHRpY2FzdF9saXN0KGRldik7CisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKK30KKworc3RhdGljIGludCBvcmlub2NvX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisKKwlpZiAoKG5ld19tdHUgPCBPUklOT0NPX01JTl9NVFUpIHx8IChuZXdfbXR1ID4gT1JJTk9DT19NQVhfTVRVKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBNVFUgKyBlbmNhcHN1bGF0aW9uICsgaGVhZGVyIGxlbmd0aCAqLworCWlmICgobmV3X210dSArIEVOQ0FQU19PVkVSSEVBRCArIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcikpID4KKwkgICAgIChwcml2LT5uaWNidWZfc2l6ZSAtIEVUSF9ITEVOKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkZXYtPm10dSA9IG5ld19tdHU7CisKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogVHggcGF0aCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IG9yaW5vY29feG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZwcml2LT5zdGF0czsKKwloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CisJaW50IGVyciA9IDA7CisJdTE2IHR4ZmlkID0gcHJpdi0+dHhmaWQ7CisJc3RydWN0IGV0aGhkciAqZWg7CisJaW50IHR4X2NvbnRyb2w7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghbmV0aWZfcnVubmluZyhkZXYpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IFR4IG9uIHN0b3BwZWQgZGV2aWNlIVxuIiwKKwkJICAgICAgIGRldi0+bmFtZSk7CisJCXJldHVybiBORVRERVZfVFhfQlVTWTsKKwl9CisKKwlpZiAobmV0aWZfcXVldWVfc3RvcHBlZChkZXYpKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogVHggd2hpbGUgdHJhbnNtaXR0ZXIgYnVzeSFcbiIsCisJCSAgICAgICBkZXYtPm5hbWUpOworCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CisJfQorCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogb3Jpbm9jb194bWl0KCkgY2FsbGVkIHdoaWxlIGh3X3VuYXZhaWxhYmxlXG4iLAorCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOworCX0KKworCWlmICghbmV0aWZfY2Fycmllcl9vayhkZXYpIHx8IChwcml2LT5pd19tb2RlID09IElXX01PREVfTU9OSVRPUikpIHsKKwkJLyogT29wcywgdGhlIGZpcm13YXJlIGhhc24ndCBlc3RhYmxpc2hlZCBhIGNvbm5lY3Rpb24sCisJCSAgIHNpbGVudGx5IGRyb3AgdGhlIHBhY2tldCAodGhpcyBzZWVtcyB0byBiZSB0aGUKKwkJICAgc2FmZXN0IGFwcHJvYWNoKS4gKi8KKwkJZ290byBkcm9wOworCX0KKworCS8qIENoZWNrIHBhY2tldCBsZW5ndGggKi8KKwlpZiAoc2tiLT5sZW4gPCBFVEhfSExFTikKKwkJZ290byBkcm9wOworCisJdHhfY29udHJvbCA9IEhFUk1FU19UWENUUkxfVFhfT0sgfCBIRVJNRVNfVFhDVFJMX1RYX0VYOworCisJaWYgKHByaXYtPmVuY29kZV9hbGcgPT0gSVdfRU5DT0RFX0FMR19US0lQKQorCQl0eF9jb250cm9sIHw9IChwcml2LT50eF9rZXkgPDwgSEVSTUVTX01JQ19LRVlfSURfU0hJRlQpIHwKKwkJCUhFUk1FU19UWENUUkxfTUlDOworCisJaWYgKHByaXYtPmhhc19hbHRfdHhjbnRsKSB7CisJCS8qIFdQQSBlbmFibGVkIGZpcm13YXJlcyBoYXZlIHR4X2NudGwgYXQgdGhlIGVuZCBvZgorCQkgKiB0aGUgODAyLjExIGhlYWRlci4gIFNvIHdyaXRlIHplcm9lZCBkZXNjcmlwdG9yIGFuZAorCQkgKiA4MDIuMTEgaGVhZGVyIGF0IHRoZSBzYW1lIHRpbWUKKwkJICovCisJCWNoYXIgZGVzY1tIRVJNRVNfODAyXzNfT0ZGU0VUXTsKKwkJX19sZTE2ICp0eGNudGwgPSAoX19sZTE2ICopICZkZXNjW0hFUk1FU19UWENOVEwyX09GRlNFVF07CisKKwkJbWVtc2V0KCZkZXNjLCAwLCBzaXplb2YoZGVzYykpOworCisJCSp0eGNudGwgPSBjcHVfdG9fbGUxNih0eF9jb250cm9sKTsKKwkJZXJyID0gaGVybWVzX2JhcF9wd3JpdGUoaHcsIFVTRVJfQkFQLCAmZGVzYywgc2l6ZW9mKGRlc2MpLAorCQkJCQl0eGZpZCwgMCk7CisJCWlmIChlcnIpIHsKKwkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgd3JpdGluZyBUeCAiCisJCQkJICAgICAgICJkZXNjcmlwdG9yIHRvIEJBUFxuIiwgZGV2LT5uYW1lLCBlcnIpOworCQkJZ290byBidXN5OworCQl9CisJfSBlbHNlIHsKKwkJc3RydWN0IGhlcm1lc190eF9kZXNjcmlwdG9yIGRlc2M7CisKKwkJbWVtc2V0KCZkZXNjLCAwLCBzaXplb2YoZGVzYykpOworCisJCWRlc2MudHhfY29udHJvbCA9IGNwdV90b19sZTE2KHR4X2NvbnRyb2wpOworCQllcnIgPSBoZXJtZXNfYmFwX3B3cml0ZShodywgVVNFUl9CQVAsICZkZXNjLCBzaXplb2YoZGVzYyksCisJCQkJCXR4ZmlkLCAwKTsKKwkJaWYgKGVycikgeworCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCB3cml0aW5nIFR4ICIKKwkJCQkgICAgICAgImRlc2NyaXB0b3IgdG8gQkFQXG4iLCBkZXYtPm5hbWUsIGVycik7CisJCQlnb3RvIGJ1c3k7CisJCX0KKworCQkvKiBDbGVhciB0aGUgODAyLjExIGhlYWRlciBhbmQgZGF0YSBsZW5ndGggZmllbGRzIC0gc29tZQorCQkgKiBmaXJtd2FyZXMgKGUuZy4gTHVjZW50L0FnZXJlIDgueHgpIGFwcGVhciB0byBnZXQgY29uZnVzZWQKKwkJICogaWYgdGhpcyBpc24ndCBkb25lLiAqLworCQloZXJtZXNfY2xlYXJfd29yZHMoaHcsIEhFUk1FU19EQVRBMCwKKwkJCQkgICBIRVJNRVNfODAyXzNfT0ZGU0VUIC0gSEVSTUVTXzgwMl8xMV9PRkZTRVQpOworCX0KKworCWVoID0gKHN0cnVjdCBldGhoZHIgKilza2ItPmRhdGE7CisKKwkvKiBFbmNhcHN1bGF0ZSBFdGhlcm5ldC1JSSBmcmFtZXMgKi8KKwlpZiAobnRvaHMoZWgtPmhfcHJvdG8pID4gRVRIX0RBVEFfTEVOKSB7IC8qIEV0aGVybmV0LUlJIGZyYW1lICovCisJCXN0cnVjdCBoZWFkZXJfc3RydWN0IHsKKwkJCXN0cnVjdCBldGhoZHIgZXRoOwkvKiA4MDIuMyBoZWFkZXIgKi8KKwkJCXU4IGVuY2FwWzZdOwkJLyogODAyLjIgaGVhZGVyICovCisJCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGhkcjsKKworCQkvKiBTdHJpcCBkZXN0aW5hdGlvbiBhbmQgc291cmNlIGZyb20gdGhlIGRhdGEgKi8KKwkJc2tiX3B1bGwoc2tiLCAyICogRVRIX0FMRU4pOworCisJCS8qIEFuZCBtb3ZlIHRoZW0gdG8gYSBzZXBhcmF0ZSBoZWFkZXIgKi8KKwkJbWVtY3B5KCZoZHIuZXRoLCBlaCwgMiAqIEVUSF9BTEVOKTsKKwkJaGRyLmV0aC5oX3Byb3RvID0gaHRvbnMoc2l6ZW9mKGVuY2Fwc19oZHIpICsgc2tiLT5sZW4pOworCQltZW1jcHkoaGRyLmVuY2FwLCBlbmNhcHNfaGRyLCBzaXplb2YoZW5jYXBzX2hkcikpOworCisJCS8qIEluc2VydCB0aGUgU05BUCBoZWFkZXIgKi8KKwkJaWYgKHNrYl9oZWFkcm9vbShza2IpIDwgc2l6ZW9mKGhkcikpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICIlczogTm90IGVub3VnaCBoZWFkcm9vbSBmb3IgODAyLjIgaGVhZGVycyAlZFxuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUsIHNrYl9oZWFkcm9vbShza2IpKTsKKwkJCWdvdG8gZHJvcDsKKwkJfQorCQllaCA9IChzdHJ1Y3QgZXRoaGRyICopIHNrYl9wdXNoKHNrYiwgc2l6ZW9mKGhkcikpOworCQltZW1jcHkoZWgsICZoZHIsIHNpemVvZihoZHIpKTsKKwl9CisKKwllcnIgPSBoZXJtZXNfYmFwX3B3cml0ZShodywgVVNFUl9CQVAsIHNrYi0+ZGF0YSwgc2tiLT5sZW4sCisJCQkJdHhmaWQsIEhFUk1FU184MDJfM19PRkZTRVQpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgd3JpdGluZyBwYWNrZXQgdG8gQkFQXG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOworCQlnb3RvIGJ1c3k7CisJfQorCisJLyogQ2FsY3VsYXRlIE1pY2hhZWwgTUlDICovCisJaWYgKHByaXYtPmVuY29kZV9hbGcgPT0gSVdfRU5DT0RFX0FMR19US0lQKSB7CisJCXU4IG1pY19idWZbTUlDSEFFTF9NSUNfTEVOICsgMV07CisJCXU4ICptaWM7CisJCXNpemVfdCBvZmZzZXQ7CisJCXNpemVfdCBsZW47CisKKwkJaWYgKHNrYi0+bGVuICUgMikgeworCQkJLyogTUlDIHN0YXJ0IGlzIG9uIGFuIG9kZCBib3VuZGFyeSAqLworCQkJbWljX2J1ZlswXSA9IHNrYi0+ZGF0YVtza2ItPmxlbiAtIDFdOworCQkJbWljID0gJm1pY19idWZbMV07CisJCQlvZmZzZXQgPSBza2ItPmxlbiAtIDE7CisJCQlsZW4gPSBNSUNIQUVMX01JQ19MRU4gKyAxOworCQl9IGVsc2UgeworCQkJbWljID0gJm1pY19idWZbMF07CisJCQlvZmZzZXQgPSBza2ItPmxlbjsKKwkJCWxlbiA9IE1JQ0hBRUxfTUlDX0xFTjsKKwkJfQorCisJCW9yaW5vY29fbWljKHByaXYtPnR4X3RmbV9taWMsCisJCQkgICAgcHJpdi0+dGtpcF9rZXlbcHJpdi0+dHhfa2V5XS50eF9taWMsCisJCQkgICAgZWgtPmhfZGVzdCwgZWgtPmhfc291cmNlLCAwIC8qIHByaW9yaXR5ICovLAorCQkJICAgIHNrYi0+ZGF0YSArIEVUSF9ITEVOLCBza2ItPmxlbiAtIEVUSF9ITEVOLCBtaWMpOworCisJCS8qIFdyaXRlIHRoZSBNSUMgKi8KKwkJZXJyID0gaGVybWVzX2JhcF9wd3JpdGUoaHcsIFVTRVJfQkFQLCAmbWljX2J1ZlswXSwgbGVuLAorCQkJCQl0eGZpZCwgSEVSTUVTXzgwMl8zX09GRlNFVCArIG9mZnNldCk7CisJCWlmIChlcnIpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHdyaXRpbmcgTUlDIHRvIEJBUFxuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CisJCQlnb3RvIGJ1c3k7CisJCX0KKwl9CisKKwkvKiBGaW5hbGx5LCB3ZSBhY3R1YWxseSBpbml0aWF0ZSB0aGUgc2VuZCAqLworCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKworCWVyciA9IGhlcm1lc19kb2NtZF93YWl0KGh3LCBIRVJNRVNfQ01EX1RYIHwgSEVSTUVTX0NNRF9SRUNMLAorCQkJCXR4ZmlkLCBOVUxMKTsKKwlpZiAoZXJyKSB7CisJCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CisJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCB0cmFuc21pdHRpbmcgcGFja2V0XG4iLAorCQkJCWRldi0+bmFtZSwgZXJyKTsKKwkJZ290byBidXN5OworCX0KKworCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCXN0YXRzLT50eF9ieXRlcyArPSBIRVJNRVNfODAyXzNfT0ZGU0VUICsgc2tiLT5sZW47CisJZ290byBvazsKKworIGRyb3A6CisJc3RhdHMtPnR4X2Vycm9ycysrOworCXN0YXRzLT50eF9kcm9wcGVkKys7CisKKyBvazoKKwlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworCWRldl9rZnJlZV9za2Ioc2tiKTsKKwlyZXR1cm4gTkVUREVWX1RYX09LOworCisgYnVzeToKKwlpZiAoZXJyID09IC1FSU8pCisJCXNjaGVkdWxlX3dvcmsoJnByaXYtPnJlc2V0X3dvcmspOworCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CisJcmV0dXJuIE5FVERFVl9UWF9CVVNZOworfQorCitzdGF0aWMgdm9pZCBfX29yaW5vY29fZXZfYWxsb2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaGVybWVzX3QgKmh3KQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXUxNiBmaWQgPSBoZXJtZXNfcmVhZF9yZWduKGh3LCBBTExPQ0ZJRCk7CisKKwlpZiAoZmlkICE9IHByaXYtPnR4ZmlkKSB7CisJCWlmIChmaWQgIT0gRFVNTVlfRklEKQorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IEFsbG9jYXRlIGV2ZW50IG9uIHVuZXhwZWN0ZWQgZmlkICglMDRYKVxuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUsIGZpZCk7CisJCXJldHVybjsKKwl9CisKKwloZXJtZXNfd3JpdGVfcmVnbihodywgQUxMT0NGSUQsIERVTU1ZX0ZJRCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fb3Jpbm9jb19ldl90eChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBoZXJtZXNfdCAqaHcpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJnByaXYtPnN0YXRzOworCisJc3RhdHMtPnR4X3BhY2tldHMrKzsKKworCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKKworCWhlcm1lc193cml0ZV9yZWduKGh3LCBUWENPTVBMRklELCBEVU1NWV9GSUQpOworfQorCitzdGF0aWMgdm9pZCBfX29yaW5vY29fZXZfdHhleGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaGVybWVzX3QgKmh3KQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZwcml2LT5zdGF0czsKKwl1MTYgZmlkID0gaGVybWVzX3JlYWRfcmVnbihodywgVFhDT01QTEZJRCk7CisJdTE2IHN0YXR1czsKKwlzdHJ1Y3QgaGVybWVzX3R4ZXhjX2RhdGEgaGRyOworCWludCBlcnIgPSAwOworCisJaWYgKGZpZCA9PSBEVU1NWV9GSUQpCisJCXJldHVybjsgLyogTm90aGluZydzIHJlYWxseSBoYXBwZW5lZCAqLworCisJLyogUmVhZCBwYXJ0IG9mIHRoZSBmcmFtZSBoZWFkZXIgLSB3ZSBuZWVkIHN0YXR1cyBhbmQgYWRkcjEgKi8KKwllcnIgPSBoZXJtZXNfYmFwX3ByZWFkKGh3LCBJUlFfQkFQLCAmaGRyLAorCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgaGVybWVzX3R4ZXhjX2RhdGEpLAorCQkJICAgICAgIGZpZCwgMCk7CisKKwloZXJtZXNfd3JpdGVfcmVnbihodywgVFhDT01QTEZJRCwgRFVNTVlfRklEKTsKKwlzdGF0cy0+dHhfZXJyb3JzKys7CisKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBVbmFibGUgdG8gcmVhZCBkZXNjcmlwdG9yIG9uIFR4IGVycm9yICIKKwkJICAgICAgICIoRklEPSUwNFggZXJyb3IgJWQpXG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBmaWQsIGVycik7CisJCXJldHVybjsKKwl9CisKKwlERUJVRygxLCAiJXM6IFR4IGVycm9yLCBlcnIgJWQgKEZJRD0lMDRYKVxuIiwgZGV2LT5uYW1lLAorCSAgICAgIGVyciwgZmlkKTsKKworCS8qIFdlIHByb2R1Y2UgYSBUWERST1AgZXZlbnQgb25seSBmb3IgcmV0cnkgb3IgbGlmZXRpbWUKKwkgKiBleGNlZWRlZCwgYmVjYXVzZSB0aGF0J3MgdGhlIG9ubHkgc3RhdHVzIHRoYXQgcmVhbGx5IG1lYW4KKwkgKiB0aGF0IHRoaXMgcGFydGljdWxhciBub2RlIHdlbnQgYXdheS4KKwkgKiBPdGhlciBlcnJvcnMgbWVhbnMgdGhhdCAqd2UqIHNjcmV3ZWQgdXAuIC0gSmVhbiBJSSAqLworCXN0YXR1cyA9IGxlMTZfdG9fY3B1KGhkci5kZXNjLnN0YXR1cyk7CisJaWYgKHN0YXR1cyAmIChIRVJNRVNfVFhTVEFUX1JFVFJZRVJSIHwgSEVSTUVTX1RYU1RBVF9BR0VERVJSKSkgeworCQl1bmlvbiBpd3JlcV9kYXRhCXdycXU7CisKKwkJLyogQ29weSA4MDIuMTEgZGVzdCBhZGRyZXNzLgorCQkgKiBXZSB1c2UgdGhlIDgwMi4xMSBoZWFkZXIgYmVjYXVzZSB0aGUgZnJhbWUgbWF5CisJCSAqIG5vdCBiZSA4MDIuMyBvciBtYXkgYmUgbWFuZ2xlZC4uLgorCQkgKiBJbiBBZC1Ib2MgbW9kZSwgaXQgd2lsbCBiZSB0aGUgbm9kZSBhZGRyZXNzLgorCQkgKiBJbiBtYW5hZ2VkIG1vZGUsIGl0IHdpbGwgYmUgbW9zdCBsaWtlbHkgdGhlIEFQIGFkZHIKKwkJICogVXNlciBzcGFjZSB3aWxsIGZpZ3VyZSBvdXQgaG93IHRvIGNvbnZlcnQgaXQgdG8KKwkJICogd2hhdGV2ZXIgaXQgbmVlZHMgKElQIGFkZHJlc3Mgb3IgZWxzZSkuCisJCSAqIC0gSmVhbiBJSSAqLworCQltZW1jcHkod3JxdS5hZGRyLnNhX2RhdGEsIGhkci5hZGRyMSwgRVRIX0FMRU4pOworCQl3cnF1LmFkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOworCisJCS8qIFNlbmQgZXZlbnQgdG8gdXNlciBzcGFjZSAqLworCQl3aXJlbGVzc19zZW5kX2V2ZW50KGRldiwgSVdFVlRYRFJPUCwgJndycXUsIE5VTEwpOworCX0KKworCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKK30KKworc3RhdGljIHZvaWQgb3Jpbm9jb190eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJnByaXYtPnN0YXRzOworCXN0cnVjdCBoZXJtZXMgKmh3ID0gJnByaXYtPmh3OworCisJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFR4IHRpbWVvdXQhICIKKwkgICAgICAgIkFMTE9DRklEPSUwNHgsIFRYQ09NUExGSUQ9JTA0eCwgRVZTVEFUPSUwNHhcbiIsCisJICAgICAgIGRldi0+bmFtZSwgaGVybWVzX3JlYWRfcmVnbihodywgQUxMT0NGSUQpLAorCSAgICAgICBoZXJtZXNfcmVhZF9yZWduKGh3LCBUWENPTVBMRklEKSwgaGVybWVzX3JlYWRfcmVnbihodywgRVZTVEFUKSk7CisKKwlzdGF0cy0+dHhfZXJyb3JzKys7CisKKwlzY2hlZHVsZV93b3JrKCZwcml2LT5yZXNldF93b3JrKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogUnggcGF0aCAoZGF0YSBmcmFtZXMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBEb2VzIHRoZSBmcmFtZSBoYXZlIGEgU05BUCBoZWFkZXIgaW5kaWNhdGluZyBpdCBzaG91bGQgYmUKKyAqIGRlLWVuY2Fwc3VsYXRlZCB0byBFdGhlcm5ldC1JST8gKi8KK3N0YXRpYyBpbmxpbmUgaW50IGlzX2V0aGVyc25hcCh2b2lkICpfaGRyKQoreworCXU4ICpoZHIgPSBfaGRyOworCisJLyogV2UgZGUtZW5jYXBzdWxhdGUgYWxsIHBhY2tldHMgd2hpY2gsIGEpIGhhdmUgU05BUCBoZWFkZXJzCisJICogKGkuZS4gU1NBUD1EU0FQPTB4YWEgYW5kIENUUkw9MHgzIGluIHRoZSA4MDIuMiBMTEMgaGVhZGVyCisJICogYW5kIHdoZXJlIGIpIHRoZSBPVUkgb2YgdGhlIFNOQVAgaGVhZGVyIGlzIDAwOjAwOjAwIG9yCisJICogMDA6MDA6ZjggLSB3ZSBuZWVkIGJvdGggYmVjYXVzZSBkaWZmZXJlbnQgQVBzIGFwcGVhciB0byB1c2UKKwkgKiBkaWZmZXJlbnQgT1VJcyBmb3Igc29tZSByZWFzb24gKi8KKwlyZXR1cm4gKG1lbWNtcChoZHIsICZlbmNhcHNfaGRyLCA1KSA9PSAwKQorCQkmJiAoKGhkcls1XSA9PSAweDAwKSB8fCAoaGRyWzVdID09IDB4ZjgpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG9yaW5vY29fc3B5X2dhdGhlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1X2NoYXIgKm1hYywKKwkJCQkgICAgICBpbnQgbGV2ZWwsIGludCBub2lzZSkKK3sKKwlzdHJ1Y3QgaXdfcXVhbGl0eSB3c3RhdHM7CisJd3N0YXRzLmxldmVsID0gbGV2ZWwgLSAweDk1OworCXdzdGF0cy5ub2lzZSA9IG5vaXNlIC0gMHg5NTsKKwl3c3RhdHMucXVhbCA9IChsZXZlbCA+IG5vaXNlKSA/IChsZXZlbCAtIG5vaXNlKSA6IDA7CisJd3N0YXRzLnVwZGF0ZWQgPSBJV19RVUFMX0FMTF9VUERBVEVEIHwgSVdfUVVBTF9EQk07CisJLyogVXBkYXRlIHNweSByZWNvcmRzICovCisJd2lyZWxlc3Nfc3B5X3VwZGF0ZShkZXYsIG1hYywgJndzdGF0cyk7Cit9CisKK3N0YXRpYyB2b2lkIG9yaW5vY29fc3RhdF9nYXRoZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCXN0cnVjdCBoZXJtZXNfcnhfZGVzY3JpcHRvciAqZGVzYykKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCS8qIFVzaW5nIHNweSBzdXBwb3J0IHdpdGggbG90cyBvZiBSeCBwYWNrZXRzLCBsaWtlIGluIGFuCisJICogaW5mcmFzdHJ1Y3R1cmUgKEFQKSwgd2lsbCByZWFsbHkgc2xvdyBkb3duIGV2ZXJ5dGhpbmcsIGJlY2F1c2UKKwkgKiB0aGUgTUFDIGFkZHJlc3MgbXVzdCBiZSBjb21wYXJlZCB0byBlYWNoIGVudHJ5IG9mIHRoZSBzcHkgbGlzdC4KKwkgKiBJZiB0aGUgdXNlciByZWFsbHkgYXNrcyBmb3IgaXQgKHNldCBzb21lIGFkZHJlc3MgaW4gdGhlCisJICogc3B5IGxpc3QpLCB3ZSBkbyBpdCwgYnV0IGhlIHdpbGwgcGF5IHRoZSBwcmljZS4KKwkgKiBOb3RlIHRoYXQgdG8gZ2V0IGhlcmUsIHlvdSBuZWVkIGJvdGggV0lSRUxFU1NfU1BZCisJICogY29tcGlsZWQgaW4gQU5EIHNvbWUgYWRkcmVzc2VzIGluIHRoZSBsaXN0ICEhIQorCSAqLworCS8qIE5vdGUgOiBnY2Mgd2lsbCBvcHRpbWlzZSB0aGUgd2hvbGUgc2VjdGlvbiBhd2F5IGlmCisJICogV0lSRUxFU1NfU1BZIGlzIG5vdCBkZWZpbmVkLi4uIC0gSmVhbiBJSSAqLworCWlmIChTUFlfTlVNQkVSKHByaXYpKSB7CisJCW9yaW5vY29fc3B5X2dhdGhlcihkZXYsIHNrYl9tYWNfaGVhZGVyKHNrYikgKyBFVEhfQUxFTiwKKwkJCQkgICBkZXNjLT5zaWduYWwsIGRlc2MtPnNpbGVuY2UpOworCX0KK30KKworLyoKKyAqIG9yaW5vY29fcnhfbW9uaXRvciAtIGhhbmRsZSByZWNlaXZlZCBtb25pdG9yIGZyYW1lcy4KKyAqCisgKiBBcmd1bWVudHM6CisgKglkZXYJCW5ldHdvcmsgZGV2aWNlCisgKglyeGZpZAkJcmVjZWl2ZWQgRklECisgKglkZXNjCQlyeCBkZXNjcmlwdG9yIG9mIHRoZSBmcmFtZQorICoKKyAqIENhbGwgY29udGV4dDogaW50ZXJydXB0CisgKi8KK3N0YXRpYyB2b2lkIG9yaW5vY29fcnhfbW9uaXRvcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgcnhmaWQsCisJCQkgICAgICAgc3RydWN0IGhlcm1lc19yeF9kZXNjcmlwdG9yICpkZXNjKQoreworCXUzMiBoZHJsZW4gPSAzMDsJLyogcmV0dXJuIGZ1bGwgaGVhZGVyIGJ5IGRlZmF1bHQgKi8KKwl1MzIgZGF0YWxlbiA9IDA7CisJdTE2IGZjOworCWludCBlcnI7CisJaW50IGxlbjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZwcml2LT5zdGF0czsKKwloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CisKKwlsZW4gPSBsZTE2X3RvX2NwdShkZXNjLT5kYXRhX2xlbik7CisKKwkvKiBEZXRlcm1pbmUgdGhlIHNpemUgb2YgdGhlIGhlYWRlciBhbmQgdGhlIGRhdGEgKi8KKwlmYyA9IGxlMTZfdG9fY3B1KGRlc2MtPmZyYW1lX2N0bCk7CisJc3dpdGNoIChmYyAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSB7CisJY2FzZSBJRUVFODAyMTFfRlRZUEVfREFUQToKKwkJaWYgKChmYyAmIElFRUU4MDIxMV9GQ1RMX1RPRFMpCisJCSAgICAmJiAoZmMgJiBJRUVFODAyMTFfRkNUTF9GUk9NRFMpKQorCQkJaGRybGVuID0gMzA7CisJCWVsc2UKKwkJCWhkcmxlbiA9IDI0OworCQlkYXRhbGVuID0gbGVuOworCQlicmVhazsKKwljYXNlIElFRUU4MDIxMV9GVFlQRV9NR01UOgorCQloZHJsZW4gPSAyNDsKKwkJZGF0YWxlbiA9IGxlbjsKKwkJYnJlYWs7CisJY2FzZSBJRUVFODAyMTFfRlRZUEVfQ1RMOgorCQlzd2l0Y2ggKGZjICYgSUVFRTgwMjExX0ZDVExfU1RZUEUpIHsKKwkJY2FzZSBJRUVFODAyMTFfU1RZUEVfUFNQT0xMOgorCQljYXNlIElFRUU4MDIxMV9TVFlQRV9SVFM6CisJCWNhc2UgSUVFRTgwMjExX1NUWVBFX0NGRU5EOgorCQljYXNlIElFRUU4MDIxMV9TVFlQRV9DRkVOREFDSzoKKwkJCWhkcmxlbiA9IDE2OworCQkJYnJlYWs7CisJCWNhc2UgSUVFRTgwMjExX1NUWVBFX0NUUzoKKwkJY2FzZSBJRUVFODAyMTFfU1RZUEVfQUNLOgorCQkJaGRybGVuID0gMTA7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBVbmtub3duIGZyYW1lIHR5cGUgKi8KKwkJYnJlYWs7CisJfQorCisJLyogc2FuaXR5IGNoZWNrIHRoZSBsZW5ndGggKi8KKwlpZiAoZGF0YWxlbiA+IElFRUU4MDIxMV9NQVhfREFUQV9MRU4gKyAxMikgeworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IG92ZXJzaXplZCBtb25pdG9yIGZyYW1lLCAiCisJCSAgICAgICAiZGF0YSBsZW5ndGggPSAlZFxuIiwgZGV2LT5uYW1lLCBkYXRhbGVuKTsKKwkJc3RhdHMtPnJ4X2xlbmd0aF9lcnJvcnMrKzsKKwkJZ290byB1cGRhdGVfc3RhdHM7CisJfQorCisJc2tiID0gZGV2X2FsbG9jX3NrYihoZHJsZW4gKyBkYXRhbGVuKTsKKwlpZiAoIXNrYikgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogQ2Fubm90IGFsbG9jYXRlIHNrYiBmb3IgbW9uaXRvciBmcmFtZVxuIiwKKwkJICAgICAgIGRldi0+bmFtZSk7CisJCWdvdG8gdXBkYXRlX3N0YXRzOworCX0KKworCS8qIENvcHkgdGhlIDgwMi4xMSBoZWFkZXIgdG8gdGhlIHNrYiAqLworCW1lbWNweShza2JfcHV0KHNrYiwgaGRybGVuKSwgJihkZXNjLT5mcmFtZV9jdGwpLCBoZHJsZW4pOworCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7CisKKwkvKiBJZiBhbnksIGNvcHkgdGhlIGRhdGEgZnJvbSB0aGUgY2FyZCB0byB0aGUgc2tiICovCisJaWYgKGRhdGFsZW4gPiAwKSB7CisJCWVyciA9IGhlcm1lc19iYXBfcHJlYWQoaHcsIElSUV9CQVAsIHNrYl9wdXQoc2tiLCBkYXRhbGVuKSwKKwkJCQkgICAgICAgQUxJR04oZGF0YWxlbiwgMiksIHJ4ZmlkLAorCQkJCSAgICAgICBIRVJNRVNfODAyXzJfT0ZGU0VUKTsKKwkJaWYgKGVycikgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogZXJyb3IgJWQgcmVhZGluZyBtb25pdG9yIGZyYW1lXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKKwkJCWdvdG8gZHJvcDsKKwkJfQorCX0KKworCXNrYi0+ZGV2ID0gZGV2OworCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKKwlza2ItPnBrdF90eXBlID0gUEFDS0VUX09USEVSSE9TVDsKKwlza2ItPnByb3RvY29sID0gY3B1X3RvX2JlMTYoRVRIX1BfODAyXzIpOworCisJc3RhdHMtPnJ4X3BhY2tldHMrKzsKKwlzdGF0cy0+cnhfYnl0ZXMgKz0gc2tiLT5sZW47CisKKwluZXRpZl9yeChza2IpOworCXJldHVybjsKKworIGRyb3A6CisJZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKKyB1cGRhdGVfc3RhdHM6CisJc3RhdHMtPnJ4X2Vycm9ycysrOworCXN0YXRzLT5yeF9kcm9wcGVkKys7Cit9CisKK3N0YXRpYyB2b2lkIF9fb3Jpbm9jb19ldl9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBoZXJtZXNfdCAqaHcpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJnByaXYtPnN0YXRzOworCXN0cnVjdCBpd19zdGF0aXN0aWNzICp3c3RhdHMgPSAmcHJpdi0+d3N0YXRzOworCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOworCXUxNiByeGZpZCwgc3RhdHVzOworCWludCBsZW5ndGg7CisJc3RydWN0IGhlcm1lc19yeF9kZXNjcmlwdG9yICpkZXNjOworCXN0cnVjdCBvcmlub2NvX3J4X2RhdGEgKnJ4X2RhdGE7CisJaW50IGVycjsKKworCWRlc2MgPSBrbWFsbG9jKHNpemVvZigqZGVzYyksIEdGUF9BVE9NSUMpOworCWlmICghZGVzYykgeworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCSAgICAgICAiJXM6IENhbid0IGFsbG9jYXRlIHNwYWNlIGZvciBSWCBkZXNjcmlwdG9yXG4iLAorCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJZ290byB1cGRhdGVfc3RhdHM7CisJfQorCisJcnhmaWQgPSBoZXJtZXNfcmVhZF9yZWduKGh3LCBSWEZJRCk7CisKKwllcnIgPSBoZXJtZXNfYmFwX3ByZWFkKGh3LCBJUlFfQkFQLCBkZXNjLCBzaXplb2YoKmRlc2MpLAorCQkJICAgICAgIHJ4ZmlkLCAwKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGVycm9yICVkIHJlYWRpbmcgUnggZGVzY3JpcHRvci4gIgorCQkgICAgICAgIkZyYW1lIGRyb3BwZWQuXG4iLCBkZXYtPm5hbWUsIGVycik7CisJCWdvdG8gdXBkYXRlX3N0YXRzOworCX0KKworCXN0YXR1cyA9IGxlMTZfdG9fY3B1KGRlc2MtPnN0YXR1cyk7CisKKwlpZiAoc3RhdHVzICYgSEVSTUVTX1JYU1RBVF9CQURDUkMpIHsKKwkJREVCVUcoMSwgIiVzOiBCYWQgQ1JDIG9uIFJ4LiBGcmFtZSBkcm9wcGVkLlxuIiwKKwkJICAgICAgZGV2LT5uYW1lKTsKKwkJc3RhdHMtPnJ4X2NyY19lcnJvcnMrKzsKKwkJZ290byB1cGRhdGVfc3RhdHM7CisJfQorCisJLyogSGFuZGxlIGZyYW1lcyBpbiBtb25pdG9yIG1vZGUgKi8KKwlpZiAocHJpdi0+aXdfbW9kZSA9PSBJV19NT0RFX01PTklUT1IpIHsKKwkJb3Jpbm9jb19yeF9tb25pdG9yKGRldiwgcnhmaWQsIGRlc2MpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoc3RhdHVzICYgSEVSTUVTX1JYU1RBVF9VTkRFQ1JZUFRBQkxFKSB7CisJCURFQlVHKDEsICIlczogVW5kZWNyeXB0YWJsZSBmcmFtZSBvbiBSeC4gRnJhbWUgZHJvcHBlZC5cbiIsCisJCSAgICAgIGRldi0+bmFtZSk7CisJCXdzdGF0cy0+ZGlzY2FyZC5jb2RlKys7CisJCWdvdG8gdXBkYXRlX3N0YXRzOworCX0KKworCWxlbmd0aCA9IGxlMTZfdG9fY3B1KGRlc2MtPmRhdGFfbGVuKTsKKworCS8qIFNhbml0eSBjaGVja3MgKi8KKwlpZiAobGVuZ3RoIDwgMykgeyAvKiBObyBmb3IgZXZlbiBhbiA4MDIuMiBMTEMgaGVhZGVyICovCisJCS8qIEF0IGxlYXN0IG9uIFN5bWJvbCBmaXJtd2FyZSB3aXRoIFBDRiB3ZSBnZXQgcXVpdGUgYQorCQkgICBsb3Qgb2YgdGhlc2UgbGVnaXRpbWF0ZWx5IC0gUG9sbCBmcmFtZXMgd2l0aCBubworCQkgICBkYXRhLiAqLworCQlnb3RvIG91dDsKKwl9CisJaWYgKGxlbmd0aCA+IElFRUU4MDIxMV9NQVhfREFUQV9MRU4pIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IE92ZXJzaXplZCBmcmFtZSByZWNlaXZlZCAoJWQgYnl0ZXMpXG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBsZW5ndGgpOworCQlzdGF0cy0+cnhfbGVuZ3RoX2Vycm9ycysrOworCQlnb3RvIHVwZGF0ZV9zdGF0czsKKwl9CisKKwkvKiBQYXlsb2FkIHNpemUgZG9lcyBub3QgaW5jbHVkZSBNaWNoYWVsIE1JQy4gSW5jcmVhc2UgcGF5bG9hZAorCSAqIHNpemUgdG8gcmVhZCBpdCB0b2dldGhlciB3aXRoIHRoZSBkYXRhLiAqLworCWlmIChzdGF0dXMgJiBIRVJNRVNfUlhTVEFUX01JQykKKwkJbGVuZ3RoICs9IE1JQ0hBRUxfTUlDX0xFTjsKKworCS8qIFdlIG5lZWQgc3BhY2UgZm9yIHRoZSBwYWNrZXQgZGF0YSBpdHNlbGYsIHBsdXMgYW4gZXRoZXJuZXQKKwkgICBoZWFkZXIsIHBsdXMgMiBieXRlcyBzbyB3ZSBjYW4gYWxpZ24gdGhlIElQIGhlYWRlciBvbiBhCisJICAgMzJiaXQgYm91bmRhcnksIHBsdXMgMSBieXRlIHNvIHdlIGNhbiByZWFkIGluIG9kZCBsZW5ndGgKKwkgICBwYWNrZXRzIGZyb20gdGhlIGNhcmQsIHdoaWNoIGhhcyBhbiBJTyBncmFudWxhcml0eSBvZiAxNgorCSAgIGJpdHMgKi8KKwlza2IgPSBkZXZfYWxsb2Nfc2tiKGxlbmd0aCtFVEhfSExFTisyKzEpOworCWlmICghc2tiKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBDYW4ndCBhbGxvY2F0ZSBza2IgZm9yIFJ4XG4iLAorCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJZ290byB1cGRhdGVfc3RhdHM7CisJfQorCisJLyogV2UnbGwgcHJlcGVuZCB0aGUgaGVhZGVyLCBzbyByZXNlcnZlIHNwYWNlIGZvciBpdC4gIFRoZSB3b3JzdAorCSAgIGNhc2UgaXMgbm8gZGVjYXBzdWxhdGlvbiwgd2hlbiA4MDIuMyBoZWFkZXIgaXMgcHJlcGVuZGVkIGFuZAorCSAgIG5vdGhpbmcgaXMgcmVtb3ZlZC4gIDIgaXMgZm9yIGFsaWduaW5nIHRoZSBJUCBoZWFkZXIuICAqLworCXNrYl9yZXNlcnZlKHNrYiwgRVRIX0hMRU4gKyAyKTsKKworCWVyciA9IGhlcm1lc19iYXBfcHJlYWQoaHcsIElSUV9CQVAsIHNrYl9wdXQoc2tiLCBsZW5ndGgpLAorCQkJICAgICAgIEFMSUdOKGxlbmd0aCwgMiksIHJ4ZmlkLAorCQkJICAgICAgIEhFUk1FU184MDJfMl9PRkZTRVQpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZXJyb3IgJWQgcmVhZGluZyBmcmFtZS4gIgorCQkgICAgICAgIkZyYW1lIGRyb3BwZWQuXG4iLCBkZXYtPm5hbWUsIGVycik7CisJCWdvdG8gZHJvcDsKKwl9CisKKwkvKiBBZGQgZGVzYyBhbmQgc2tiIHRvIHJ4IHF1ZXVlICovCisJcnhfZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCpyeF9kYXRhKSwgR0ZQX0FUT01JQyk7CisJaWYgKCFyeF9kYXRhKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBDYW4ndCBhbGxvY2F0ZSBSWCBwYWNrZXRcbiIsCisJCQlkZXYtPm5hbWUpOworCQlnb3RvIGRyb3A7CisJfQorCXJ4X2RhdGEtPmRlc2MgPSBkZXNjOworCXJ4X2RhdGEtPnNrYiA9IHNrYjsKKwlsaXN0X2FkZF90YWlsKCZyeF9kYXRhLT5saXN0LCAmcHJpdi0+cnhfbGlzdCk7CisJdGFza2xldF9zY2hlZHVsZSgmcHJpdi0+cnhfdGFza2xldCk7CisKKwlyZXR1cm47CisKK2Ryb3A6CisJZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKK3VwZGF0ZV9zdGF0czoKKwlzdGF0cy0+cnhfZXJyb3JzKys7CisJc3RhdHMtPnJ4X2Ryb3BwZWQrKzsKK291dDoKKwlrZnJlZShkZXNjKTsKK30KKworc3RhdGljIHZvaWQgb3Jpbm9jb19yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkgICAgICAgc3RydWN0IGhlcm1lc19yeF9kZXNjcmlwdG9yICpkZXNjLAorCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmcHJpdi0+c3RhdHM7CisJdTE2IHN0YXR1cywgZmM7CisJaW50IGxlbmd0aDsKKwlzdHJ1Y3QgZXRoaGRyICpoZHI7CisKKwlzdGF0dXMgPSBsZTE2X3RvX2NwdShkZXNjLT5zdGF0dXMpOworCWxlbmd0aCA9IGxlMTZfdG9fY3B1KGRlc2MtPmRhdGFfbGVuKTsKKwlmYyA9IGxlMTZfdG9fY3B1KGRlc2MtPmZyYW1lX2N0bCk7CisKKwkvKiBDYWxjdWxhdGUgYW5kIGNoZWNrIE1JQyAqLworCWlmIChzdGF0dXMgJiBIRVJNRVNfUlhTVEFUX01JQykgeworCQlpbnQga2V5X2lkID0gKChzdGF0dXMgJiBIRVJNRVNfUlhTVEFUX01JQ19LRVlfSUQpID4+CisJCQkgICAgICBIRVJNRVNfTUlDX0tFWV9JRF9TSElGVCk7CisJCXU4IG1pY1tNSUNIQUVMX01JQ19MRU5dOworCQl1OCAqcnhtaWM7CisJCXU4ICpzcmMgPSAoZmMgJiBJRUVFODAyMTFfRkNUTF9GUk9NRFMpID8KKwkJCWRlc2MtPmFkZHIzIDogZGVzYy0+YWRkcjI7CisKKwkJLyogRXh0cmFjdCBNaWNoYWVsIE1JQyBmcm9tIHBheWxvYWQgKi8KKwkJcnhtaWMgPSBza2ItPmRhdGEgKyBza2ItPmxlbiAtIE1JQ0hBRUxfTUlDX0xFTjsKKworCQlza2JfdHJpbShza2IsIHNrYi0+bGVuIC0gTUlDSEFFTF9NSUNfTEVOKTsKKwkJbGVuZ3RoIC09IE1JQ0hBRUxfTUlDX0xFTjsKKworCQlvcmlub2NvX21pYyhwcml2LT5yeF90Zm1fbWljLAorCQkJICAgIHByaXYtPnRraXBfa2V5W2tleV9pZF0ucnhfbWljLAorCQkJICAgIGRlc2MtPmFkZHIxLAorCQkJICAgIHNyYywKKwkJCSAgICAwLCAvKiBwcmlvcml0eSBvciBRb1M/ICovCisJCQkgICAgc2tiLT5kYXRhLAorCQkJICAgIHNrYi0+bGVuLAorCQkJICAgICZtaWNbMF0pOworCisJCWlmIChtZW1jbXAobWljLCByeG1pYywKKwkJCSAgIE1JQ0hBRUxfTUlDX0xFTikpIHsKKwkJCXVuaW9uIGl3cmVxX2RhdGEgd3JxdTsKKwkJCXN0cnVjdCBpd19taWNoYWVsbWljZmFpbHVyZSB3eG1pYzsKKworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6ICIKKwkJCSAgICAgICAiSW52YWxpZCBNaWNoYWVsIE1JQyBpbiBkYXRhIGZyYW1lIGZyb20gJXBNLCAiCisJCQkgICAgICAgInVzaW5nIGtleSAlaVxuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUsIHNyYywga2V5X2lkKTsKKworCQkJLyogVE9ETzogdXBkYXRlIHN0YXRzICovCisKKwkJCS8qIE5vdGlmeSB1c2Vyc3BhY2UgKi8KKwkJCW1lbXNldCgmd3htaWMsIDAsIHNpemVvZih3eG1pYykpOworCQkJd3htaWMuZmxhZ3MgPSBrZXlfaWQgJiBJV19NSUNGQUlMVVJFX0tFWV9JRDsKKwkJCXd4bWljLmZsYWdzIHw9IChkZXNjLT5hZGRyMVswXSAmIDEpID8KKwkJCQlJV19NSUNGQUlMVVJFX0dST1VQIDogSVdfTUlDRkFJTFVSRV9QQUlSV0lTRTsKKwkJCXd4bWljLnNyY19hZGRyLnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKKwkJCW1lbWNweSh3eG1pYy5zcmNfYWRkci5zYV9kYXRhLCBzcmMsIEVUSF9BTEVOKTsKKworCQkJKHZvaWQpIG9yaW5vY29faHdfZ2V0X3RraXBfaXYocHJpdiwga2V5X2lkLAorCQkJCQkJICAgICAgJnd4bWljLnRzY1swXSk7CisKKwkJCW1lbXNldCgmd3JxdSwgMCwgc2l6ZW9mKHdycXUpKTsKKwkJCXdycXUuZGF0YS5sZW5ndGggPSBzaXplb2Yod3htaWMpOworCQkJd2lyZWxlc3Nfc2VuZF9ldmVudChkZXYsIElXRVZNSUNIQUVMTUlDRkFJTFVSRSwgJndycXUsCisJCQkJCSAgICAoY2hhciAqKSAmd3htaWMpOworCisJCQlnb3RvIGRyb3A7CisJCX0KKwl9CisKKwkvKiBIYW5kbGUgZGVjYXBzdWxhdGlvbgorCSAqIEluIG1vc3QgY2FzZXMsIHRoZSBmaXJtd2FyZSB0ZWxsIHVzIGFib3V0IFNOQVAgZnJhbWVzLgorCSAqIEZvciBzb21lIHJlYXNvbiwgdGhlIFNOQVAgZnJhbWVzIHNlbnQgYnkgTGlua1N5cyBBUHMKKwkgKiBhcmUgbm90IHByb3Blcmx5IHJlY29nbmlzZWQgYnkgbW9zdCBmaXJtd2FyZXMuCisJICogU28sIGNoZWNrIG91cnNlbHZlcyAqLworCWlmIChsZW5ndGggPj0gRU5DQVBTX09WRVJIRUFEICYmCisJICAgICgoKHN0YXR1cyAmIEhFUk1FU19SWFNUQVRfTVNHVFlQRSkgPT0gSEVSTUVTX1JYU1RBVF8xMDQyKSB8fAorCSAgICAgKChzdGF0dXMgJiBIRVJNRVNfUlhTVEFUX01TR1RZUEUpID09IEhFUk1FU19SWFNUQVRfVFVOTkVMKSB8fAorCSAgICAgaXNfZXRoZXJzbmFwKHNrYi0+ZGF0YSkpKSB7CisJCS8qIFRoZXNlIGluZGljYXRlIGEgU05BUCB3aXRoaW4gODAyLjIgTExDIHdpdGhpbgorCQkgICA4MDIuMTEgZnJhbWUgd2hpY2ggd2UnbGwgbmVlZCB0byBkZS1lbmNhcHN1bGF0ZSB0bworCQkgICB0aGUgb3JpZ2luYWwgRXRoZXJuZXRJSSBmcmFtZS4gKi8KKwkJaGRyID0gKHN0cnVjdCBldGhoZHIgKilza2JfcHVzaChza2IsCisJCQkJCQlFVEhfSExFTiAtIEVOQ0FQU19PVkVSSEVBRCk7CisJfSBlbHNlIHsKKwkJLyogODAyLjMgZnJhbWUgLSBwcmVwZW5kIDgwMi4zIGhlYWRlciBhcyBpcyAqLworCQloZHIgPSAoc3RydWN0IGV0aGhkciAqKXNrYl9wdXNoKHNrYiwgRVRIX0hMRU4pOworCQloZHItPmhfcHJvdG8gPSBodG9ucyhsZW5ndGgpOworCX0KKwltZW1jcHkoaGRyLT5oX2Rlc3QsIGRlc2MtPmFkZHIxLCBFVEhfQUxFTik7CisJaWYgKGZjICYgSUVFRTgwMjExX0ZDVExfRlJPTURTKQorCQltZW1jcHkoaGRyLT5oX3NvdXJjZSwgZGVzYy0+YWRkcjMsIEVUSF9BTEVOKTsKKwllbHNlCisJCW1lbWNweShoZHItPmhfc291cmNlLCBkZXNjLT5hZGRyMiwgRVRIX0FMRU4pOworCisJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTsKKwlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CisJaWYgKGZjICYgSUVFRTgwMjExX0ZDVExfVE9EUykKKwkJc2tiLT5wa3RfdHlwZSA9IFBBQ0tFVF9PVEhFUkhPU1Q7CisKKwkvKiBQcm9jZXNzIHRoZSB3aXJlbGVzcyBzdGF0cyBpZiBuZWVkZWQgKi8KKwlvcmlub2NvX3N0YXRfZ2F0aGVyKGRldiwgc2tiLCBkZXNjKTsKKworCS8qIFBhc3MgdGhlIHBhY2tldCB0byB0aGUgbmV0d29ya2luZyBzdGFjayAqLworCW5ldGlmX3J4KHNrYik7CisJc3RhdHMtPnJ4X3BhY2tldHMrKzsKKwlzdGF0cy0+cnhfYnl0ZXMgKz0gbGVuZ3RoOworCisJcmV0dXJuOworCisgZHJvcDoKKwlkZXZfa2ZyZWVfc2tiKHNrYik7CisJc3RhdHMtPnJ4X2Vycm9ycysrOworCXN0YXRzLT5yeF9kcm9wcGVkKys7Cit9CisKK3N0YXRpYyB2b2lkIG9yaW5vY29fcnhfaXNyX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKikgZGF0YTsKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgb3Jpbm9jb19yeF9kYXRhICpyeF9kYXRhLCAqdGVtcDsKKwlzdHJ1Y3QgaGVybWVzX3J4X2Rlc2NyaXB0b3IgKmRlc2M7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogb3Jpbm9jb19yeCByZXF1aXJlcyB0aGUgZHJpdmVyIGxvY2ssIGFuZCB3ZSBhbHNvIG5lZWQgdG8KKwkgKiBwcm90ZWN0IHByaXYtPnJ4X2xpc3QsIHNvIGp1c3QgaG9sZCB0aGUgbG9jayBvdmVyIHRoZQorCSAqIGxvdC4KKwkgKgorCSAqIElmIG9yaW5vY29fbG9jayBmYWlscywgd2UndmUgdW5wbHVnZ2VkIHRoZSBjYXJkLiBJbiB0aGlzCisJICogY2FzZSBqdXN0IGFib3J0LiAqLworCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQorCQlyZXR1cm47CisKKwkvKiBleHRyYWN0IGRlc2MgYW5kIHNrYiBmcm9tIHF1ZXVlICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJ4X2RhdGEsIHRlbXAsICZwcml2LT5yeF9saXN0LCBsaXN0KSB7CisJCWRlc2MgPSByeF9kYXRhLT5kZXNjOworCQlza2IgPSByeF9kYXRhLT5za2I7CisJCWxpc3RfZGVsKCZyeF9kYXRhLT5saXN0KTsKKwkJa2ZyZWUocnhfZGF0YSk7CisKKwkJb3Jpbm9jb19yeChkZXYsIGRlc2MsIHNrYik7CisKKwkJa2ZyZWUoZGVzYyk7CisJfQorCisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogUnggcGF0aCAoaW5mbyBmcmFtZXMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZCBwcmludF9saW5rc3RhdHVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiBzdGF0dXMpCit7CisJY2hhciAqczsKKworCWlmIChzdXBwcmVzc19saW5rc3RhdHVzKQorCQlyZXR1cm47CisKKwlzd2l0Y2ggKHN0YXR1cykgeworCWNhc2UgSEVSTUVTX0xJTktTVEFUVVNfTk9UX0NPTk5FQ1RFRDoKKwkJcyA9ICJOb3QgQ29ubmVjdGVkIjsKKwkJYnJlYWs7CisJY2FzZSBIRVJNRVNfTElOS1NUQVRVU19DT05ORUNURUQ6CisJCXMgPSAiQ29ubmVjdGVkIjsKKwkJYnJlYWs7CisJY2FzZSBIRVJNRVNfTElOS1NUQVRVU19ESVNDT05ORUNURUQ6CisJCXMgPSAiRGlzY29ubmVjdGVkIjsKKwkJYnJlYWs7CisJY2FzZSBIRVJNRVNfTElOS1NUQVRVU19BUF9DSEFOR0U6CisJCXMgPSAiQVAgQ2hhbmdlZCI7CisJCWJyZWFrOworCWNhc2UgSEVSTUVTX0xJTktTVEFUVVNfQVBfT1VUX09GX1JBTkdFOgorCQlzID0gIkFQIE91dCBvZiBSYW5nZSI7CisJCWJyZWFrOworCWNhc2UgSEVSTUVTX0xJTktTVEFUVVNfQVBfSU5fUkFOR0U6CisJCXMgPSAiQVAgSW4gUmFuZ2UiOworCQlicmVhazsKKwljYXNlIEhFUk1FU19MSU5LU1RBVFVTX0FTU09DX0ZBSUxFRDoKKwkJcyA9ICJBc3NvY2lhdGlvbiBGYWlsZWQiOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlzID0gIlVOS05PV04iOworCX0KKworCXByaW50ayhLRVJOX0RFQlVHICIlczogTmV3IGxpbmsgc3RhdHVzOiAlcyAoJTA0eClcbiIsCisJICAgICAgIGRldi0+bmFtZSwgcywgc3RhdHVzKTsKK30KKworLyogU2VhcmNoIHNjYW4gcmVzdWx0cyBmb3IgcmVxdWVzdGVkIEJTU0lELCBqb2luIGl0IGlmIGZvdW5kICovCitzdGF0aWMgdm9pZCBvcmlub2NvX2pvaW5fYXAoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IG9yaW5vY29fcHJpdmF0ZSwgam9pbl93b3JrKTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+bmRldjsKKwlzdHJ1Y3QgaGVybWVzICpodyA9ICZwcml2LT5odzsKKwlpbnQgZXJyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGpvaW5fcmVxIHsKKwkJdTggYnNzaWRbRVRIX0FMRU5dOworCQlfX2xlMTYgY2hhbm5lbDsKKwl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSByZXE7CisJY29uc3QgaW50IGF0b21fbGVuID0gb2Zmc2V0b2Yoc3RydWN0IHByaXNtMl9zY2FuX2FwaW5mbywgYXRpbSk7CisJc3RydWN0IHByaXNtMl9zY2FuX2FwaW5mbyAqYXRvbSA9IE5VTEw7CisJaW50IG9mZnNldCA9IDQ7CisJaW50IGZvdW5kID0gMDsKKwl1OCAqYnVmOworCXUxNiBsZW47CisKKwkvKiBBbGxvY2F0ZSBidWZmZXIgZm9yIHNjYW4gcmVzdWx0cyAqLworCWJ1ZiA9IGttYWxsb2MoTUFYX1NDQU5fTEVOLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuOworCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCisJCWdvdG8gZmFpbF9sb2NrOworCisJLyogU2FuaXR5IGNoZWNrcyBpbiBjYXNlIHVzZXIgY2hhbmdlZCBzb21ldGhpbmcgaW4gdGhlIG1lYW50aW1lICovCisJaWYgKCFwcml2LT5ic3NpZF9maXhlZCkKKwkJZ290byBvdXQ7CisKKwlpZiAoc3RybGVuKHByaXYtPmRlc2lyZWRfZXNzaWQpID09IDApCisJCWdvdG8gb3V0OworCisJLyogUmVhZCBzY2FuIHJlc3VsdHMgZnJvbSB0aGUgZmlybXdhcmUgKi8KKwllcnIgPSBoZXJtZXNfcmVhZF9sdHYoaHcsIFVTRVJfQkFQLAorCQkJICAgICAgSEVSTUVTX1JJRF9TQ0FOUkVTVUxUU1RBQkxFLAorCQkJICAgICAgTUFYX1NDQU5fTEVOLCAmbGVuLCBidWYpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IHJlYWQgc2NhbiByZXN1bHRzXG4iLAorCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJZ290byBvdXQ7CisJfQorCisJbGVuID0gSEVSTUVTX1JFQ0xFTl9UT19CWVRFUyhsZW4pOworCisJLyogR28gdGhyb3VnaCB0aGUgc2NhbiByZXN1bHRzIGxvb2tpbmcgZm9yIHRoZSBjaGFubmVsIG9mIHRoZSBBUAorCSAqIHdlIHdlcmUgcmVxdWVzdGVkIHRvIGpvaW4gKi8KKwlmb3IgKDsgb2Zmc2V0ICsgYXRvbV9sZW4gPD0gbGVuOyBvZmZzZXQgKz0gYXRvbV9sZW4pIHsKKwkJYXRvbSA9IChzdHJ1Y3QgcHJpc20yX3NjYW5fYXBpbmZvICopIChidWYgKyBvZmZzZXQpOworCQlpZiAobWVtY21wKCZhdG9tLT5ic3NpZCwgcHJpdi0+ZGVzaXJlZF9ic3NpZCwgRVRIX0FMRU4pID09IDApIHsKKwkJCWZvdW5kID0gMTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKCFmb3VuZCkgeworCQlERUJVRygxLCAiJXM6IFJlcXVlc3RlZCBBUCBub3QgZm91bmQgaW4gc2NhbiByZXN1bHRzXG4iLAorCQkgICAgICBkZXYtPm5hbWUpOworCQlnb3RvIG91dDsKKwl9CisKKwltZW1jcHkocmVxLmJzc2lkLCBwcml2LT5kZXNpcmVkX2Jzc2lkLCBFVEhfQUxFTik7CisJcmVxLmNoYW5uZWwgPSBhdG9tLT5jaGFubmVsOwkvKiBib3RoIGFyZSBsaXR0bGUtZW5kaWFuICovCisJZXJyID0gSEVSTUVTX1dSSVRFX1JFQ09SRChodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ05GSk9JTlJFUVVFU1QsCisJCQkJICAmcmVxKTsKKwlpZiAoZXJyKQorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciBpc3N1aW5nIGpvaW4gcmVxdWVzdFxuIiwgZGV2LT5uYW1lKTsKKworIG91dDoKKwlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworCisgZmFpbF9sb2NrOgorCWtmcmVlKGJ1Zik7Cit9CisKKy8qIFNlbmQgbmV3IEJTU0lEIHRvIHVzZXJzcGFjZSAqLworc3RhdGljIHZvaWQgb3Jpbm9jb19zZW5kX2Jzc2lkX3dldmVudChzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwcml2LT5uZGV2OworCXN0cnVjdCBoZXJtZXMgKmh3ID0gJnByaXYtPmh3OworCXVuaW9uIGl3cmVxX2RhdGEgd3JxdTsKKwlpbnQgZXJyOworCisJZXJyID0gaGVybWVzX3JlYWRfbHR2KGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DVVJSRU5UQlNTSUQsCisJCQkgICAgICBFVEhfQUxFTiwgTlVMTCwgd3JxdS5hcF9hZGRyLnNhX2RhdGEpOworCWlmIChlcnIgIT0gMCkKKwkJcmV0dXJuOworCisJd3JxdS5hcF9hZGRyLnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKKworCS8qIFNlbmQgZXZlbnQgdG8gdXNlciBzcGFjZSAqLworCXdpcmVsZXNzX3NlbmRfZXZlbnQoZGV2LCBTSU9DR0lXQVAsICZ3cnF1LCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQgb3Jpbm9jb19zZW5kX2Fzc29jcmVxaWVfd2V2ZW50KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXYtPm5kZXY7CisJc3RydWN0IGhlcm1lcyAqaHcgPSAmcHJpdi0+aHc7CisJdW5pb24gaXdyZXFfZGF0YSB3cnF1OworCWludCBlcnI7CisJdTggYnVmWzg4XTsKKwl1OCAqaWU7CisKKwlpZiAoIXByaXYtPmhhc193cGEpCisJCXJldHVybjsKKworCWVyciA9IGhlcm1lc19yZWFkX2x0dihodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ1VSUkVOVF9BU1NPQ19SRVFfSU5GTywKKwkJCSAgICAgIHNpemVvZihidWYpLCBOVUxMLCAmYnVmKTsKKwlpZiAoZXJyICE9IDApCisJCXJldHVybjsKKworCWllID0gb3Jpbm9jb19nZXRfd3BhX2llKGJ1Ziwgc2l6ZW9mKGJ1ZikpOworCWlmIChpZSkgeworCQlpbnQgcmVtID0gc2l6ZW9mKGJ1ZikgLSAoaWUgLSAmYnVmWzBdKTsKKwkJd3JxdS5kYXRhLmxlbmd0aCA9IGllWzFdICsgMjsKKwkJaWYgKHdycXUuZGF0YS5sZW5ndGggPiByZW0pCisJCQl3cnF1LmRhdGEubGVuZ3RoID0gcmVtOworCisJCWlmICh3cnF1LmRhdGEubGVuZ3RoKQorCQkJLyogU2VuZCBldmVudCB0byB1c2VyIHNwYWNlICovCisJCQl3aXJlbGVzc19zZW5kX2V2ZW50KGRldiwgSVdFVkFTU09DUkVRSUUsICZ3cnF1LCBpZSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBvcmlub2NvX3NlbmRfYXNzb2NyZXNwaWVfd2V2ZW50KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXYtPm5kZXY7CisJc3RydWN0IGhlcm1lcyAqaHcgPSAmcHJpdi0+aHc7CisJdW5pb24gaXdyZXFfZGF0YSB3cnF1OworCWludCBlcnI7CisJdTggYnVmWzg4XTsgLyogVE9ETzogdmVyaWZ5IG1heCBzaXplIG9yIElXX0dFTkVSSUNfSUVfTUFYICovCisJdTggKmllOworCisJaWYgKCFwcml2LT5oYXNfd3BhKQorCQlyZXR1cm47CisKKwllcnIgPSBoZXJtZXNfcmVhZF9sdHYoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NVUlJFTlRfQVNTT0NfUkVTUF9JTkZPLAorCQkJICAgICAgc2l6ZW9mKGJ1ZiksIE5VTEwsICZidWYpOworCWlmIChlcnIgIT0gMCkKKwkJcmV0dXJuOworCisJaWUgPSBvcmlub2NvX2dldF93cGFfaWUoYnVmLCBzaXplb2YoYnVmKSk7CisJaWYgKGllKSB7CisJCWludCByZW0gPSBzaXplb2YoYnVmKSAtIChpZSAtICZidWZbMF0pOworCQl3cnF1LmRhdGEubGVuZ3RoID0gaWVbMV0gKyAyOworCQlpZiAod3JxdS5kYXRhLmxlbmd0aCA+IHJlbSkKKwkJCXdycXUuZGF0YS5sZW5ndGggPSByZW07CisKKwkJaWYgKHdycXUuZGF0YS5sZW5ndGgpCisJCQkvKiBTZW5kIGV2ZW50IHRvIHVzZXIgc3BhY2UgKi8KKwkJCXdpcmVsZXNzX3NlbmRfZXZlbnQoZGV2LCBJV0VWQVNTT0NSRVNQSUUsICZ3cnF1LCBpZSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBvcmlub2NvX3NlbmRfd2V2ZW50cyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlLCB3ZXZlbnRfd29yayk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQorCQlyZXR1cm47CisKKwlvcmlub2NvX3NlbmRfYXNzb2NyZXFpZV93ZXZlbnQocHJpdik7CisJb3Jpbm9jb19zZW5kX2Fzc29jcmVzcGllX3dldmVudChwcml2KTsKKwlvcmlub2NvX3NlbmRfYnNzaWRfd2V2ZW50KHByaXYpOworCisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgX19vcmlub2NvX2V2X2luZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaGVybWVzX3QgKmh3KQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXUxNiBpbmZvZmlkOworCXN0cnVjdCB7CisJCV9fbGUxNiBsZW47CisJCV9fbGUxNiB0eXBlOworCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGluZm87CisJaW50IGxlbiwgdHlwZTsKKwlpbnQgZXJyOworCisJLyogVGhpcyBpcyBhbiBhbnN3ZXIgdG8gYW4gSU5RVUlSRSBjb21tYW5kIHRoYXQgd2UgZGlkIGVhcmxpZXIsCisJICogb3IgYW4gaW5mb3JtYXRpb24gImV2ZW50IiBnZW5lcmF0ZWQgYnkgdGhlIGNhcmQKKwkgKiBUaGUgY29udHJvbGxlciByZXR1cm4gdG8gdXMgYSBwc2V1ZG8gZnJhbWUgY29udGFpbmluZworCSAqIHRoZSBpbmZvcm1hdGlvbiBpbiBxdWVzdGlvbiAtIEplYW4gSUkgKi8KKwlpbmZvZmlkID0gaGVybWVzX3JlYWRfcmVnbihodywgSU5GT0ZJRCk7CisKKwkvKiBSZWFkIHRoZSBpbmZvIGZyYW1lIGhlYWRlciAtIGRvbid0IHRyeSB0b28gaGFyZCAqLworCWVyciA9IGhlcm1lc19iYXBfcHJlYWQoaHcsIElSUV9CQVAsICZpbmZvLCBzaXplb2YoaW5mbyksCisJCQkgICAgICAgaW5mb2ZpZCwgMCk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBlcnJvciAlZCByZWFkaW5nIGluZm8gZnJhbWUuICIKKwkJICAgICAgICJGcmFtZSBkcm9wcGVkLlxuIiwgZGV2LT5uYW1lLCBlcnIpOworCQlyZXR1cm47CisJfQorCisJbGVuID0gSEVSTUVTX1JFQ0xFTl9UT19CWVRFUyhsZTE2X3RvX2NwdShpbmZvLmxlbikpOworCXR5cGUgPSBsZTE2X3RvX2NwdShpbmZvLnR5cGUpOworCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBIRVJNRVNfSU5RX1RBTExJRVM6IHsKKwkJc3RydWN0IGhlcm1lc190YWxsaWVzX2ZyYW1lIHRhbGxpZXM7CisJCXN0cnVjdCBpd19zdGF0aXN0aWNzICp3c3RhdHMgPSAmcHJpdi0+d3N0YXRzOworCisJCWlmIChsZW4gPiBzaXplb2YodGFsbGllcykpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBUYWxsaWVzIGZyYW1lIHRvbyBsb25nICglZCBieXRlcylcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBsZW4pOworCQkJbGVuID0gc2l6ZW9mKHRhbGxpZXMpOworCQl9CisKKwkJZXJyID0gaGVybWVzX2JhcF9wcmVhZChodywgSVJRX0JBUCwgJnRhbGxpZXMsIGxlbiwKKwkJCQkgICAgICAgaW5mb2ZpZCwgc2l6ZW9mKGluZm8pKTsKKwkJaWYgKGVycikKKwkJCWJyZWFrOworCisJCS8qIEluY3JlbWVudCBvdXIgdmFyaW91cyBjb3VudGVycyAqLworCQkvKiB3c3RhdHMtPmRpc2NhcmQubndpZCAtIG5vIHdyb25nIEJTU0lEIHN0dWZmICovCisJCXdzdGF0cy0+ZGlzY2FyZC5jb2RlICs9CisJCQlsZTE2X3RvX2NwdSh0YWxsaWVzLlJ4V0VQVW5kZWNyeXB0YWJsZSk7CisJCWlmIChsZW4gPT0gc2l6ZW9mKHRhbGxpZXMpKQorCQkJd3N0YXRzLT5kaXNjYXJkLmNvZGUgKz0KKwkJCQlsZTE2X3RvX2NwdSh0YWxsaWVzLlJ4RGlzY2FyZHNfV0VQSUNWRXJyb3IpICsKKwkJCQlsZTE2X3RvX2NwdSh0YWxsaWVzLlJ4RGlzY2FyZHNfV0VQRXhjbHVkZWQpOworCQl3c3RhdHMtPmRpc2NhcmQubWlzYyArPQorCQkJbGUxNl90b19jcHUodGFsbGllcy5UeERpc2NhcmRzV3JvbmdTQSk7CisJCXdzdGF0cy0+ZGlzY2FyZC5mcmFnbWVudCArPQorCQkJbGUxNl90b19jcHUodGFsbGllcy5SeE1zZ0luQmFkTXNnRnJhZ21lbnRzKTsKKwkJd3N0YXRzLT5kaXNjYXJkLnJldHJpZXMgKz0KKwkJCWxlMTZfdG9fY3B1KHRhbGxpZXMuVHhSZXRyeUxpbWl0RXhjZWVkZWQpOworCQkvKiB3c3RhdHMtPm1pc3MuYmVhY29uIC0gbm8gbWF0Y2ggKi8KKwl9CisJYnJlYWs7CisJY2FzZSBIRVJNRVNfSU5RX0xJTktTVEFUVVM6IHsKKwkJc3RydWN0IGhlcm1lc19saW5rc3RhdHVzIGxpbmtzdGF0dXM7CisJCXUxNiBuZXdzdGF0dXM7CisJCWludCBjb25uZWN0ZWQ7CisKKwkJaWYgKHByaXYtPml3X21vZGUgPT0gSVdfTU9ERV9NT05JVE9SKQorCQkJYnJlYWs7CisKKwkJaWYgKGxlbiAhPSBzaXplb2YobGlua3N0YXR1cykpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBVbmV4cGVjdGVkIHNpemUgZm9yIGxpbmtzdGF0dXMgZnJhbWUgKCVkIGJ5dGVzKVxuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUsIGxlbik7CisJCQlicmVhazsKKwkJfQorCisJCWVyciA9IGhlcm1lc19iYXBfcHJlYWQoaHcsIElSUV9CQVAsICZsaW5rc3RhdHVzLCBsZW4sCisJCQkJICAgICAgIGluZm9maWQsIHNpemVvZihpbmZvKSk7CisJCWlmIChlcnIpCisJCQlicmVhazsKKwkJbmV3c3RhdHVzID0gbGUxNl90b19jcHUobGlua3N0YXR1cy5saW5rc3RhdHVzKTsKKworCQkvKiBTeW1ib2wgZmlybXdhcmUgdXNlcyAib3V0IG9mIHJhbmdlIiB0byBzaWduYWwgdGhhdAorCQkgKiB0aGUgaG9zdHNjYW4gZnJhbWUgY2FuIGJlIHJlcXVlc3RlZC4gICovCisJCWlmIChuZXdzdGF0dXMgPT0gSEVSTUVTX0xJTktTVEFUVVNfQVBfT1VUX09GX1JBTkdFICYmCisJCSAgICBwcml2LT5maXJtd2FyZV90eXBlID09IEZJUk1XQVJFX1RZUEVfU1lNQk9MICYmCisJCSAgICBwcml2LT5oYXNfaG9zdHNjYW4gJiYgcHJpdi0+c2Nhbl9pbnByb2dyZXNzKSB7CisJCQloZXJtZXNfaW5xdWlyZShodywgSEVSTUVTX0lOUV9IT1NUU0NBTl9TWU1CT0wpOworCQkJYnJlYWs7CisJCX0KKworCQljb25uZWN0ZWQgPSAobmV3c3RhdHVzID09IEhFUk1FU19MSU5LU1RBVFVTX0NPTk5FQ1RFRCkKKwkJCXx8IChuZXdzdGF0dXMgPT0gSEVSTUVTX0xJTktTVEFUVVNfQVBfQ0hBTkdFKQorCQkJfHwgKG5ld3N0YXR1cyA9PSBIRVJNRVNfTElOS1NUQVRVU19BUF9JTl9SQU5HRSk7CisKKwkJaWYgKGNvbm5lY3RlZCkKKwkJCW5ldGlmX2NhcnJpZXJfb24oZGV2KTsKKwkJZWxzZSBpZiAoIWlnbm9yZV9kaXNjb25uZWN0KQorCQkJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKKworCQlpZiAobmV3c3RhdHVzICE9IHByaXYtPmxhc3RfbGlua3N0YXR1cykgeworCQkJcHJpdi0+bGFzdF9saW5rc3RhdHVzID0gbmV3c3RhdHVzOworCQkJcHJpbnRfbGlua3N0YXR1cyhkZXYsIG5ld3N0YXR1cyk7CisJCQkvKiBUaGUgaW5mbyBmcmFtZSBjb250YWlucyBvbmx5IG9uZSB3b3JkIHdoaWNoIGlzIHRoZQorCQkJICogc3RhdHVzIChzZWUgaGVybWVzLmgpLiBUaGUgc3RhdHVzIGlzIHByZXR0eSBib3JpbmcKKwkJCSAqIGluIGl0c2VsZiwgdGhhdCdzIHdoeSB3ZSBleHBvcnQgdGhlIG5ldyBCU1NJRC4uLgorCQkJICogSmVhbiBJSSAqLworCQkJc2NoZWR1bGVfd29yaygmcHJpdi0+d2V2ZW50X3dvcmspOworCQl9CisJfQorCWJyZWFrOworCWNhc2UgSEVSTUVTX0lOUV9TQ0FOOgorCQlpZiAoIXByaXYtPnNjYW5faW5wcm9ncmVzcyAmJiBwcml2LT5ic3NpZF9maXhlZCAmJgorCQkgICAgcHJpdi0+ZmlybXdhcmVfdHlwZSA9PSBGSVJNV0FSRV9UWVBFX0lOVEVSU0lMKSB7CisJCQlzY2hlZHVsZV93b3JrKCZwcml2LT5qb2luX3dvcmspOworCQkJYnJlYWs7CisJCX0KKwkJLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBIRVJNRVNfSU5RX0hPU1RTQ0FOOgorCWNhc2UgSEVSTUVTX0lOUV9IT1NUU0NBTl9TWU1CT0w6IHsKKwkJLyogUmVzdWx0IG9mIGEgc2Nhbm5pbmcuIENvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0CisJCSAqIGNlbGxzIGluIHRoZSB2aWNpbml0eSAtIEplYW4gSUkgKi8KKwkJdW5pb24gaXdyZXFfZGF0YQl3cnF1OworCQl1bnNpZ25lZCBjaGFyICpidWY7CisKKwkJLyogU2NhbiBpcyBubyBsb25nZXIgaW4gcHJvZ3Jlc3MgKi8KKwkJcHJpdi0+c2Nhbl9pbnByb2dyZXNzID0gMDsKKworCQkvKiBTYW5pdHkgY2hlY2sgKi8KKwkJaWYgKGxlbiA+IDQwOTYpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBTY2FuIHJlc3VsdHMgdG9vIGxhcmdlICglZCBieXRlcylcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBsZW4pOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBBbGxvY2F0ZSBidWZmZXIgZm9yIHJlc3VsdHMgKi8KKwkJYnVmID0ga21hbGxvYyhsZW4sIEdGUF9BVE9NSUMpOworCQlpZiAoYnVmID09IE5VTEwpCisJCQkvKiBObyBtZW1vcnksIHNvIGNhbid0IHByaW50aygpLi4uICovCisJCQlicmVhazsKKworCQkvKiBSZWFkIHNjYW4gZGF0YSAqLworCQllcnIgPSBoZXJtZXNfYmFwX3ByZWFkKGh3LCBJUlFfQkFQLCAodm9pZCAqKSBidWYsIGxlbiwKKwkJCQkgICAgICAgaW5mb2ZpZCwgc2l6ZW9mKGluZm8pKTsKKwkJaWYgKGVycikgeworCQkJa2ZyZWUoYnVmKTsKKwkJCWJyZWFrOworCQl9CisKKyNpZmRlZiBPUklOT0NPX0RFQlVHCisJCXsKKwkJCWludAlpOworCQkJcHJpbnRrKEtFUk5fREVCVUcgIlNjYW4gcmVzdWx0IFslMDJYIiwgYnVmWzBdKTsKKwkJCWZvciAoaSA9IDE7IGkgPCAobGVuICogMik7IGkrKykKKwkJCQlwcmludGsoIjolMDJYIiwgYnVmW2ldKTsKKwkJCXByaW50aygiXVxuIik7CisJCX0KKyNlbmRpZgkvKiBPUklOT0NPX0RFQlVHICovCisKKwkJaWYgKG9yaW5vY29fcHJvY2Vzc19zY2FuX3Jlc3VsdHMocHJpdiwgYnVmLCBsZW4pID09IDApIHsKKwkJCS8qIFNlbmQgYW4gZW1wdHkgZXZlbnQgdG8gdXNlciBzcGFjZS4KKwkJCSAqIFdlIGRvbid0IHNlbmQgdGhlIHJlY2VpdmVkIGRhdGEgb24gdGhlIGV2ZW50IGJlY2F1c2UKKwkJCSAqIGl0IHdvdWxkIHJlcXVpcmUgdXMgdG8gZG8gY29tcGxleCB0cmFuc2NvZGluZywgYW5kCisJCQkgKiB3ZSB3YW50IHRvIG1pbmltaXNlIHRoZSB3b3JrIGRvbmUgaW4gdGhlIGlycSBoYW5kbGVyCisJCQkgKiBVc2UgYSByZXF1ZXN0IHRvIGV4dHJhY3QgdGhlIGRhdGEgLSBKZWFuIElJICovCisJCQl3cnF1LmRhdGEubGVuZ3RoID0gMDsKKwkJCXdycXUuZGF0YS5mbGFncyA9IDA7CisJCQl3aXJlbGVzc19zZW5kX2V2ZW50KGRldiwgU0lPQ0dJV1NDQU4sICZ3cnF1LCBOVUxMKTsKKwkJfQorCQlrZnJlZShidWYpOworCX0KKwlicmVhazsKKwljYXNlIEhFUk1FU19JTlFfQ0hBTk5FTElORk86CisJeworCQlzdHJ1Y3QgYWdlcmVfZXh0X3NjYW5faW5mbyAqYnNzOworCisJCWlmICghcHJpdi0+c2Nhbl9pbnByb2dyZXNzKSB7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEdvdCBjaGFuaW5mbyB3aXRob3V0IHNjYW4sICIKKwkJCSAgICAgICAibGVuPSVkXG4iLCBkZXYtPm5hbWUsIGxlbik7CisJCQlicmVhazsKKwkJfQorCisJCS8qIEFuIGVtcHR5IHJlc3VsdCBpbmRpY2F0ZXMgdGhhdCB0aGUgc2NhbiBpcyBjb21wbGV0ZSAqLworCQlpZiAobGVuID09IDApIHsKKwkJCXVuaW9uIGl3cmVxX2RhdGEJd3JxdTsKKworCQkJLyogU2NhbiBpcyBubyBsb25nZXIgaW4gcHJvZ3Jlc3MgKi8KKwkJCXByaXYtPnNjYW5faW5wcm9ncmVzcyA9IDA7CisKKwkJCXdycXUuZGF0YS5sZW5ndGggPSAwOworCQkJd3JxdS5kYXRhLmZsYWdzID0gMDsKKwkJCXdpcmVsZXNzX3NlbmRfZXZlbnQoZGV2LCBTSU9DR0lXU0NBTiwgJndycXUsIE5VTEwpOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBTYW5pdHkgY2hlY2sgKi8KKwkJZWxzZSBpZiAobGVuID4gc2l6ZW9mKCpic3MpKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkgICAgICAgIiVzOiBFeHQgc2NhbiByZXN1bHRzIHRvbyBsYXJnZSAoJWQgYnl0ZXMpLiAiCisJCQkgICAgICAgIlRydW5jYXRpbmcgcmVzdWx0cyB0byAlemQgYnl0ZXMuXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgbGVuLCBzaXplb2YoKmJzcykpOworCQkJbGVuID0gc2l6ZW9mKCpic3MpOworCQl9IGVsc2UgaWYgKGxlbiA8IChvZmZzZXRvZihzdHJ1Y3QgYWdlcmVfZXh0X3NjYW5faW5mbywKKwkJCQkJICAgZGF0YSkgKyAyKSkgeworCQkJLyogRHJvcCB0aGlzIHJlc3VsdCBub3cgc28gd2UgZG9uJ3QgaGF2ZSB0bworCQkJICoga2VlcCBjaGVja2luZyBsYXRlciAqLworCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJICAgICAgICIlczogRXh0IHNjYW4gcmVzdWx0cyB0b28gc2hvcnQgKCVkIGJ5dGVzKVxuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUsIGxlbik7CisJCQlicmVhazsKKwkJfQorCisJCWJzcyA9IGttYWxsb2Moc2l6ZW9mKCpic3MpLCBHRlBfQVRPTUlDKTsKKwkJaWYgKGJzcyA9PSBOVUxMKQorCQkJYnJlYWs7CisKKwkJLyogUmVhZCBzY2FuIGRhdGEgKi8KKwkJZXJyID0gaGVybWVzX2JhcF9wcmVhZChodywgSVJRX0JBUCwgKHZvaWQgKikgYnNzLCBsZW4sCisJCQkJICAgICAgIGluZm9maWQsIHNpemVvZihpbmZvKSk7CisJCWlmIChlcnIpIHsKKwkJCWtmcmVlKGJzcyk7CisJCQlicmVhazsKKwkJfQorCisJCW9yaW5vY29fYWRkX2V4dF9zY2FuX3Jlc3VsdChwcml2LCBic3MpOworCisJCWtmcmVlKGJzcyk7CisJCWJyZWFrOworCX0KKwljYXNlIEhFUk1FU19JTlFfU0VDX1NUQVRfQUdFUkU6CisJCS8qIFNlY3VyaXR5IHN0YXR1cyAoQWdlcmUgc3BlY2lmaWMpICovCisJCS8qIElnbm9yZSB0aGlzIGZyYW1lIGZvciBub3cgKi8KKwkJaWYgKHByaXYtPmZpcm13YXJlX3R5cGUgPT0gRklSTVdBUkVfVFlQRV9BR0VSRSkKKwkJCWJyZWFrOworCQkvKiBmYWxsIHRocm91Z2ggKi8KKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFVua25vd24gaW5mb3JtYXRpb24gZnJhbWUgcmVjZWl2ZWQ6ICIKKwkJICAgICAgICJ0eXBlIDB4JTA0eCwgbGVuZ3RoICVkXG4iLCBkZXYtPm5hbWUsIHR5cGUsIGxlbik7CisJCS8qIFdlIGRvbid0IGFjdHVhbGx5IGRvIGFueXRoaW5nIGFib3V0IGl0ICovCisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgX19vcmlub2NvX2V2X2luZmRyb3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaGVybWVzX3QgKmh3KQoreworCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCXByaW50ayhLRVJOX0RFQlVHICIlczogSW5mb3JtYXRpb24gZnJhbWUgbG9zdC5cbiIsIGRldi0+bmFtZSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEludGVybmFsIGhhcmR3YXJlIGNvbnRyb2wgcm91dGluZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW50IF9fb3Jpbm9jb191cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBoZXJtZXMgKmh3ID0gJnByaXYtPmh3OworCWludCBlcnI7CisKKwluZXRpZl9jYXJyaWVyX29mZihkZXYpOyAvKiBqdXN0IHRvIG1ha2Ugc3VyZSAqLworCisJZXJyID0gX19vcmlub2NvX3Byb2dyYW1fcmlkcyhkZXYpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgY29uZmlndXJpbmcgY2FyZFxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwkvKiBGaXJlIHRoaW5ncyB1cCBhZ2FpbiAqLworCWhlcm1lc19zZXRfaXJxbWFzayhodywgT1JJTk9DT19JTlRFTik7CisJZXJyID0gaGVybWVzX2VuYWJsZV9wb3J0KGh3LCAwKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIGVuYWJsaW5nIE1BQyBwb3J0XG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woX19vcmlub2NvX3VwKTsKKworaW50IF9fb3Jpbm9jb19kb3duKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGhlcm1lcyAqaHcgPSAmcHJpdi0+aHc7CisJaW50IGVycjsKKworCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKworCWlmICghcHJpdi0+aHdfdW5hdmFpbGFibGUpIHsKKwkJaWYgKCFwcml2LT5icm9rZW5fZGlzYWJsZXBvcnQpIHsKKwkJCWVyciA9IGhlcm1lc19kaXNhYmxlX3BvcnQoaHcsIDApOworCQkJaWYgKGVycikgeworCQkJCS8qIFNvbWUgZmlybXdhcmVzIChlLmcuIEludGVyc2lsIDEuMy54KSBzZWVtCisJCQkJICogdG8gaGF2ZSBwcm9ibGVtcyBkaXNhYmxpbmcgdGhlIHBvcnQsIG9oCisJCQkJICogd2VsbCwgdG9vIGJhZC4gKi8KKwkJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogRXJyb3IgJWQgZGlzYWJsaW5nIE1BQyBwb3J0XG4iLAorCQkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CisJCQkJcHJpdi0+YnJva2VuX2Rpc2FibGVwb3J0ID0gMTsKKwkJCX0KKwkJfQorCQloZXJtZXNfc2V0X2lycW1hc2soaHcsIDApOworCQloZXJtZXNfd3JpdGVfcmVnbihodywgRVZBQ0ssIDB4ZmZmZik7CisJfQorCisJLyogZmlybXdhcmUgd2lsbCBoYXZlIHRvIHJlYXNzb2NpYXRlICovCisJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKKwlwcml2LT5sYXN0X2xpbmtzdGF0dXMgPSAweGZmZmY7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woX19vcmlub2NvX2Rvd24pOworCitzdGF0aWMgaW50IG9yaW5vY29fYWxsb2NhdGVfZmlkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGhlcm1lcyAqaHcgPSAmcHJpdi0+aHc7CisJaW50IGVycjsKKworCWVyciA9IGhlcm1lc19hbGxvY2F0ZShodywgcHJpdi0+bmljYnVmX3NpemUsICZwcml2LT50eGZpZCk7CisJaWYgKGVyciA9PSAtRUlPICYmIHByaXYtPm5pY2J1Zl9zaXplID4gVFhfTklDQlVGX1NJWkVfQlVHKSB7CisJCS8qIFRyeSB3b3JrYXJvdW5kIGZvciBvbGQgU3ltYm9sIGZpcm13YXJlIGJ1ZyAqLworCQlwcml2LT5uaWNidWZfc2l6ZSA9IFRYX05JQ0JVRl9TSVpFX0JVRzsKKwkJZXJyID0gaGVybWVzX2FsbG9jYXRlKGh3LCBwcml2LT5uaWNidWZfc2l6ZSwgJnByaXYtPnR4ZmlkKTsKKworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZmlybXdhcmUgQUxMT0MgYnVnIGRldGVjdGVkICIKKwkJICAgICAgICIob2xkIFN5bWJvbCBmaXJtd2FyZT8pLiBXb3JrIGFyb3VuZCAlc1xuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgZXJyID8gImZhaWxlZCEiIDogIm9rLiIpOworCX0KKworCXJldHVybiBlcnI7Cit9CisKK2ludCBvcmlub2NvX3JlaW5pdF9maXJtd2FyZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBoZXJtZXMgKmh3ID0gJnByaXYtPmh3OworCWludCBlcnI7CisKKwllcnIgPSBoZXJtZXNfaW5pdChodyk7CisJaWYgKHByaXYtPmRvX2Z3X2Rvd25sb2FkICYmICFlcnIpIHsKKwkJZXJyID0gb3Jpbm9jb19kb3dubG9hZChwcml2KTsKKwkJaWYgKGVycikKKwkJCXByaXYtPmRvX2Z3X2Rvd25sb2FkID0gMDsKKwl9CisJaWYgKCFlcnIpCisJCWVyciA9IG9yaW5vY29fYWxsb2NhdGVfZmlkKGRldik7CisKKwlyZXR1cm4gZXJyOworfQorRVhQT1JUX1NZTUJPTChvcmlub2NvX3JlaW5pdF9maXJtd2FyZSk7CisKK2ludCBfX29yaW5vY29fcHJvZ3JhbV9yaWRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OworCWludCBlcnI7CisJc3RydWN0IGhlcm1lc19pZHN0cmluZyBpZGJ1ZjsKKworCS8qIFNldCB0aGUgTUFDIGFkZHJlc3MgKi8KKwllcnIgPSBoZXJtZXNfd3JpdGVfbHR2KGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DTkZPV05NQUNBRERSLAorCQkJICAgICAgIEhFUk1FU19CWVRFU19UT19SRUNMRU4oRVRIX0FMRU4pLCBkZXYtPmRldl9hZGRyKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgTUFDIGFkZHJlc3NcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJLyogU2V0IHVwIHRoZSBsaW5rIG1vZGUgKi8KKwllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ05GUE9SVFRZUEUsCisJCQkJICAgcHJpdi0+cG9ydF90eXBlKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgcG9ydCB0eXBlXG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKwkvKiBTZXQgdGhlIGNoYW5uZWwvZnJlcXVlbmN5ICovCisJaWYgKHByaXYtPmNoYW5uZWwgIT0gMCAmJiBwcml2LT5pd19tb2RlICE9IElXX01PREVfSU5GUkEpIHsKKwkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCQkgICBIRVJNRVNfUklEX0NORk9XTkNIQU5ORUwsCisJCQkJCSAgIHByaXYtPmNoYW5uZWwpOworCQlpZiAoZXJyKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIGNoYW5uZWwgJWRcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBlcnIsIHByaXYtPmNoYW5uZWwpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCX0KKworCWlmIChwcml2LT5oYXNfaWJzcykgeworCQl1MTYgY3JlYXRlaWJzczsKKworCQlpZiAoKHN0cmxlbihwcml2LT5kZXNpcmVkX2Vzc2lkKSA9PSAwKSAmJiAocHJpdi0+Y3JlYXRlaWJzcykpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBUaGlzIGZpcm13YXJlIHJlcXVpcmVzIGFuICIKKwkJCSAgICAgICAiRVNTSUQgaW4gSUJTUy1BZC1Ib2MgbW9kZS5cbiIsIGRldi0+bmFtZSk7CisJCQkvKiBXaXRoIHd2bGFuX2NzLCBpbiB0aGlzIGNhc2UsIHdlIHdvdWxkIGNyYXNoLgorCQkJICogaG9wZWZ1bGx5LCB0aGlzIGRyaXZlciB3aWxsIGJlaGF2ZSBiZXR0ZXIuLi4KKwkJCSAqIEplYW4gSUkgKi8KKwkJCWNyZWF0ZWlic3MgPSAwOworCQl9IGVsc2UgeworCQkJY3JlYXRlaWJzcyA9IHByaXYtPmNyZWF0ZWlic3M7CisJCX0KKworCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCisJCQkJCSAgIEhFUk1FU19SSURfQ05GQ1JFQVRFSUJTUywKKwkJCQkJICAgY3JlYXRlaWJzcyk7CisJCWlmIChlcnIpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgQ1JFQVRFSUJTU1xuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CisJCQlyZXR1cm4gZXJyOworCQl9CisJfQorCisJLyogU2V0IHRoZSBkZXNpcmVkIEJTU0lEICovCisJZXJyID0gX19vcmlub2NvX2h3X3NldF93YXAocHJpdik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIEFQIGFkZHJlc3NcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCS8qIFNldCB0aGUgZGVzaXJlZCBFU1NJRCAqLworCWlkYnVmLmxlbiA9IGNwdV90b19sZTE2KHN0cmxlbihwcml2LT5kZXNpcmVkX2Vzc2lkKSk7CisJbWVtY3B5KCZpZGJ1Zi52YWwsIHByaXYtPmRlc2lyZWRfZXNzaWQsIHNpemVvZihpZGJ1Zi52YWwpKTsKKwkvKiBXaW5YUCB3YW50cyBwYXJ0bmVyIHRvIGNvbmZpZ3VyZSBPV05TU0lEIGV2ZW4gaW4gSUJTUyBtb2RlLiAoamltYykgKi8KKwllcnIgPSBoZXJtZXNfd3JpdGVfbHR2KGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DTkZPV05TU0lELAorCQkJSEVSTUVTX0JZVEVTX1RPX1JFQ0xFTihzdHJsZW4ocHJpdi0+ZGVzaXJlZF9lc3NpZCkrMiksCisJCQkmaWRidWYpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyBPV05TU0lEXG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKwllcnIgPSBoZXJtZXNfd3JpdGVfbHR2KGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DTkZERVNJUkVEU1NJRCwKKwkJCUhFUk1FU19CWVRFU19UT19SRUNMRU4oc3RybGVuKHByaXYtPmRlc2lyZWRfZXNzaWQpKzIpLAorCQkJJmlkYnVmKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgREVTSVJFRFNTSURcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJLyogU2V0IHRoZSBzdGF0aW9uIG5hbWUgKi8KKwlpZGJ1Zi5sZW4gPSBjcHVfdG9fbGUxNihzdHJsZW4ocHJpdi0+bmljaykpOworCW1lbWNweSgmaWRidWYudmFsLCBwcml2LT5uaWNrLCBzaXplb2YoaWRidWYudmFsKSk7CisJZXJyID0gaGVybWVzX3dyaXRlX2x0dihodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ05GT1dOTkFNRSwKKwkJCSAgICAgICBIRVJNRVNfQllURVNfVE9fUkVDTEVOKHN0cmxlbihwcml2LT5uaWNrKSsyKSwKKwkJCSAgICAgICAmaWRidWYpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyBuaWNrbmFtZVxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwkvKiBTZXQgQVAgZGVuc2l0eSAqLworCWlmIChwcml2LT5oYXNfc2Vuc2l0aXZpdHkpIHsKKwkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCQkgICBIRVJNRVNfUklEX0NORlNZU1RFTVNDQUxFLAorCQkJCQkgICBwcml2LT5hcF9kZW5zaXR5KTsKKwkJaWYgKGVycikgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IEVycm9yICVkIHNldHRpbmcgU1lTVEVNU0NBTEUuICIKKwkJCSAgICAgICAiRGlzYWJsaW5nIHNlbnNpdGl2aXR5IGNvbnRyb2xcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOworCisJCQlwcml2LT5oYXNfc2Vuc2l0aXZpdHkgPSAwOworCQl9CisJfQorCisJLyogU2V0IFJUUyB0aHJlc2hvbGQgKi8KKwllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ05GUlRTVEhSRVNIT0xELAorCQkJCSAgIHByaXYtPnJ0c190aHJlc2gpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyBSVFMgdGhyZXNob2xkXG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCS8qIFNldCBmcmFnbWVudGF0aW9uIHRocmVzaG9sZCBvciBNV08gcm9idXN0bmVzcyAqLworCWlmIChwcml2LT5oYXNfbXdvKQorCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCisJCQkJCSAgIEhFUk1FU19SSURfQ05GTVdPUk9CVVNUX0FHRVJFLAorCQkJCQkgICBwcml2LT5td29fcm9idXN0KTsKKwllbHNlCisJCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKKwkJCQkJICAgSEVSTUVTX1JJRF9DTkZGUkFHTUVOVEFUSU9OVEhSRVNIT0xELAorCQkJCQkgICBwcml2LT5mcmFnX3RocmVzaCk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIGZyYWdtZW50YXRpb25cbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJLyogU2V0IGJpdHJhdGUgKi8KKwllcnIgPSBfX29yaW5vY29faHdfc2V0X2JpdHJhdGUocHJpdik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIGJpdHJhdGVcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJLyogU2V0IHBvd2VyIG1hbmFnZW1lbnQgKi8KKwlpZiAocHJpdi0+aGFzX3BtKSB7CisJCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKKwkJCQkJICAgSEVSTUVTX1JJRF9DTkZQTUVOQUJMRUQsCisJCQkJCSAgIHByaXYtPnBtX29uKTsKKwkJaWYgKGVycikgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyB1cCBQTVxuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CisJCQlyZXR1cm4gZXJyOworCQl9CisKKwkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCQkgICBIRVJNRVNfUklEX0NORk1VTFRJQ0FTVFJFQ0VJVkUsCisJCQkJCSAgIHByaXYtPnBtX21jYXN0KTsKKwkJaWYgKGVycikgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyB1cCBQTVxuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CisJCQlyZXR1cm4gZXJyOworCQl9CisJCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKKwkJCQkJICAgSEVSTUVTX1JJRF9DTkZNQVhTTEVFUERVUkFUSU9OLAorCQkJCQkgICBwcml2LT5wbV9wZXJpb2QpOworCQlpZiAoZXJyKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIHVwIFBNXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKKwkJCXJldHVybiBlcnI7CisJCX0KKwkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCQkgICBIRVJNRVNfUklEX0NORlBNSE9MRE9WRVJEVVJBVElPTiwKKwkJCQkJICAgcHJpdi0+cG1fdGltZW91dCk7CisJCWlmIChlcnIpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgdXAgUE1cbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCX0KKworCS8qIFNldCBwcmVhbWJsZSAtIG9ubHkgZm9yIFN5bWJvbCBzbyBmYXIuLi4gKi8KKwlpZiAocHJpdi0+aGFzX3ByZWFtYmxlKSB7CisJCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKKwkJCQkJICAgSEVSTUVTX1JJRF9DTkZQUkVBTUJMRV9TWU1CT0wsCisJCQkJCSAgIHByaXYtPnByZWFtYmxlKTsKKwkJaWYgKGVycikgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyBwcmVhbWJsZVxuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CisJCQlyZXR1cm4gZXJyOworCQl9CisJfQorCisJLyogU2V0IHVwIGVuY3J5cHRpb24gKi8KKwlpZiAocHJpdi0+aGFzX3dlcCB8fCBwcml2LT5oYXNfd3BhKSB7CisJCWVyciA9IF9fb3Jpbm9jb19od19zZXR1cF9lbmMocHJpdik7CisJCWlmIChlcnIpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIGFjdGl2YXRpbmcgZW5jcnlwdGlvblxuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CisJCQlyZXR1cm4gZXJyOworCQl9CisJfQorCisJaWYgKHByaXYtPml3X21vZGUgPT0gSVdfTU9ERV9NT05JVE9SKSB7CisJCS8qIEVuYWJsZSBtb25pdG9yIG1vZGUgKi8KKwkJZGV2LT50eXBlID0gQVJQSFJEX0lFRUU4MDIxMTsKKwkJZXJyID0gaGVybWVzX2RvY21kX3dhaXQoaHcsIEhFUk1FU19DTURfVEVTVCB8CisJCQkJCSAgICBIRVJNRVNfVEVTVF9NT05JVE9SLCAwLCBOVUxMKTsKKwl9IGVsc2UgeworCQkvKiBEaXNhYmxlIG1vbml0b3IgbW9kZSAqLworCQlkZXYtPnR5cGUgPSBBUlBIUkRfRVRIRVI7CisJCWVyciA9IGhlcm1lc19kb2NtZF93YWl0KGh3LCBIRVJNRVNfQ01EX1RFU1QgfAorCQkJCQkgICAgSEVSTUVTX1RFU1RfU1RPUCwgMCwgTlVMTCk7CisJfQorCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwkvKiBTZXQgcHJvbWlzY3VpdHkgLyBtdWx0aWNhc3QqLworCXByaXYtPnByb21pc2N1b3VzID0gMDsKKwlwcml2LT5tY19jb3VudCA9IDA7CisKKwkvKiBGSVhNRTogd2hhdCBhYm91dCBuZXRpZl90eF9sb2NrICovCisJX19vcmlub2NvX3NldF9tdWx0aWNhc3RfbGlzdChkZXYpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIEZJWE1FOiByZXR1cm4gaW50PyAqLworc3RhdGljIHZvaWQKK19fb3Jpbm9jb19zZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgZXJyID0gMDsKKwlpbnQgcHJvbWlzYywgbWNfY291bnQ7CisKKwkvKiBUaGUgSGVybWVzIGRvZXNuJ3Qgc2VlbSB0byBoYXZlIGFuIGFsbG11bHRpIG1vZGUsIHNvIHdlIGdvCisJICogaW50byBwcm9taXNjdW91cyBtb2RlIGFuZCBsZXQgdGhlIHVwcGVyIGxldmVscyBkZWFsLiAqLworCWlmICgoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB8fCAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgfHwKKwkgICAgKGRldi0+bWNfY291bnQgPiBNQVhfTVVMVElDQVNUKHByaXYpKSkgeworCQlwcm9taXNjID0gMTsKKwkJbWNfY291bnQgPSAwOworCX0gZWxzZSB7CisJCXByb21pc2MgPSAwOworCQltY19jb3VudCA9IGRldi0+bWNfY291bnQ7CisJfQorCisJZXJyID0gX19vcmlub2NvX2h3X3NldF9tdWx0aWNhc3RfbGlzdChwcml2LCBkZXYtPm1jX2xpc3QsIG1jX2NvdW50LAorCQkJCQkgICAgICBwcm9taXNjKTsKK30KKworLyogVGhpcyBtdXN0IGJlIGNhbGxlZCBmcm9tIHVzZXIgY29udGV4dCwgd2l0aG91dCBsb2NrcyBoZWxkIC0gdXNlCisgKiBzY2hlZHVsZV93b3JrKCkgKi8KK3ZvaWQgb3Jpbm9jb19yZXNldChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlLCByZXNldF93b3JrKTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+bmRldjsKKwlzdHJ1Y3QgaGVybWVzICpodyA9ICZwcml2LT5odzsKKwlpbnQgZXJyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJLyogV2hlbiB0aGUgaGFyZHdhcmUgYmVjb21lcyBhdmFpbGFibGUgYWdhaW4sIHdoYXRldmVyCisJCSAqIGRldGVjdHMgdGhhdCBpcyByZXNwb25zaWJsZSBmb3IgcmUtaW5pdGlhbGl6aW5nCisJCSAqIGl0LiBTbyBubyBuZWVkIGZvciBhbnl0aGluZyBmdXJ0aGVyICovCisJCXJldHVybjsKKworCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKworCS8qIFNodXQgb2ZmIGludGVycnVwdHMuICBEZXBlbmRpbmcgb24gd2hhdCBzdGF0ZSB0aGUgaGFyZHdhcmUKKwkgKiBpcyBpbiwgdGhpcyBtaWdodCBub3Qgd29yaywgYnV0IHdlJ2xsIHRyeSBhbnl3YXkgKi8KKwloZXJtZXNfc2V0X2lycW1hc2soaHcsIDApOworCWhlcm1lc193cml0ZV9yZWduKGh3LCBFVkFDSywgMHhmZmZmKTsKKworCXByaXYtPmh3X3VuYXZhaWxhYmxlKys7CisJcHJpdi0+bGFzdF9saW5rc3RhdHVzID0gMHhmZmZmOyAvKiBmaXJtd2FyZSB3aWxsIGhhdmUgdG8gcmVhc3NvY2lhdGUgKi8KKwluZXRpZl9jYXJyaWVyX29mZihkZXYpOworCisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKworCS8qIFNjYW5uaW5nIHN1cHBvcnQ6IENsZWFudXAgb2YgZHJpdmVyIHN0cnVjdCAqLworCW9yaW5vY29fY2xlYXJfc2Nhbl9yZXN1bHRzKHByaXYsIDApOworCXByaXYtPnNjYW5faW5wcm9ncmVzcyA9IDA7CisKKwlpZiAocHJpdi0+aGFyZF9yZXNldCkgeworCQllcnIgPSAoKnByaXYtPmhhcmRfcmVzZXQpKHByaXYpOworCQlpZiAoZXJyKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBvcmlub2NvX3Jlc2V0OiBFcnJvciAlZCAiCisJCQkgICAgICAgInBlcmZvcm1pbmcgaGFyZCByZXNldFxuIiwgZGV2LT5uYW1lLCBlcnIpOworCQkJZ290byBkaXNhYmxlOworCQl9CisJfQorCisJZXJyID0gb3Jpbm9jb19yZWluaXRfZmlybXdhcmUoZGV2KTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IG9yaW5vY29fcmVzZXQ6IEVycm9yICVkIHJlLWluaXRpYWxpemluZyBmaXJtd2FyZVxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKKwkJZ290byBkaXNhYmxlOworCX0KKworCS8qIFRoaXMgaGFzIHRvIGJlIGNhbGxlZCBmcm9tIHVzZXIgY29udGV4dCAqLworCXNwaW5fbG9ja19pcnEoJnByaXYtPmxvY2spOworCisJcHJpdi0+aHdfdW5hdmFpbGFibGUtLTsKKworCS8qIHByaXYtPm9wZW4gb3IgcHJpdi0+aHdfdW5hdmFpbGFibGUgbWlnaHQgaGF2ZSBjaGFuZ2VkIHdoaWxlCisJICogd2UgZHJvcHBlZCB0aGUgbG9jayAqLworCWlmIChwcml2LT5vcGVuICYmICghcHJpdi0+aHdfdW5hdmFpbGFibGUpKSB7CisJCWVyciA9IF9fb3Jpbm9jb191cChkZXYpOworCQlpZiAoZXJyKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBvcmlub2NvX3Jlc2V0OiBFcnJvciAlZCByZWVuYWJsaW5nIGNhcmRcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOworCQl9IGVsc2UKKwkJCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCX0KKworCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+bG9jayk7CisKKwlyZXR1cm47CisgZGlzYWJsZToKKwloZXJtZXNfc2V0X2lycW1hc2soaHcsIDApOworCW5ldGlmX2RldmljZV9kZXRhY2goZGV2KTsKKwlwcmludGsoS0VSTl9FUlIgIiVzOiBEZXZpY2UgaGFzIGJlZW4gZGlzYWJsZWQhXG4iLCBkZXYtPm5hbWUpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBJbnRlcnJ1cHQgaGFuZGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkIF9fb3Jpbm9jb19ldl90aWNrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGhlcm1lc190ICpodykKK3sKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFRJQ0tcbiIsIGRldi0+bmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fb3Jpbm9jb19ldl93dGVycihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBoZXJtZXNfdCAqaHcpCit7CisJLyogVGhpcyBzZWVtcyB0byBoYXBwZW4gYSBmYWlyIGJpdCB1bmRlciBsb2FkLCBidXQgaWdub3JpbmcgaXQKKwkgICBzZWVtcyB0byB3b3JrIGZpbmUuLi4qLworCXByaW50ayhLRVJOX0RFQlVHICIlczogTUFDIGNvbnRyb2xsZXIgZXJyb3IgKFdURVJSKS4gSWdub3JpbmcuXG4iLAorCSAgICAgICBkZXYtPm5hbWUpOworfQorCitpcnFyZXR1cm5fdCBvcmlub2NvX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGRldl9pZDsKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CisJaW50IGNvdW50ID0gTUFYX0lSUUxPT1BTX1BFUl9JUlE7CisJdTE2IGV2c3RhdCwgZXZlbnRzOworCS8qIFRoZXNlIGFyZSB1c2VkIHRvIGRldGVjdCBhIHJ1bmF3YXkgaW50ZXJydXB0IHNpdHVhdGlvbi4KKwkgKgorCSAqIElmIHdlIGdldCBtb3JlIHRoYW4gTUFYX0lSUUxPT1BTX1BFUl9KSUZGWSBpdGVyYXRpb25zIGluIGEgamlmZnksCisJICogd2UgcGFuaWMgYW5kIHNodXQgZG93biB0aGUgaGFyZHdhcmUKKwkgKi8KKwkvKiBqaWZmaWVzIHZhbHVlIHRoZSBsYXN0IHRpbWUgd2Ugd2VyZSBjYWxsZWQgKi8KKwlzdGF0aWMgaW50IGxhc3RfaXJxX2ppZmZ5OyAvKiA9IDAgKi8KKwlzdGF0aWMgaW50IGxvb3BzX3RoaXNfamlmZnk7IC8qID0gMCAqLworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkgeworCQkvKiBJZiBodyBpcyB1bmF2YWlsYWJsZSAtIHdlIGRvbid0IGtub3cgaWYgdGhlIGlycSB3YXMKKwkJICogZm9yIHVzIG9yIG5vdCAqLworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorCisJZXZzdGF0ID0gaGVybWVzX3JlYWRfcmVnbihodywgRVZTVEFUKTsKKwlldmVudHMgPSBldnN0YXQgJiBody0+aW50ZW47CisJaWYgKCFldmVudHMpIHsKKwkJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKwkJcmV0dXJuIElSUV9OT05FOworCX0KKworCWlmIChqaWZmaWVzICE9IGxhc3RfaXJxX2ppZmZ5KQorCQlsb29wc190aGlzX2ppZmZ5ID0gMDsKKwlsYXN0X2lycV9qaWZmeSA9IGppZmZpZXM7CisKKwl3aGlsZSAoZXZlbnRzICYmIGNvdW50LS0pIHsKKwkJaWYgKCsrbG9vcHNfdGhpc19qaWZmeSA+IE1BWF9JUlFMT09QU19QRVJfSklGRlkpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBJUlEgaGFuZGxlciBpcyBsb29waW5nIHRvbyAiCisJCQkgICAgICAgIm11Y2ghIFJlc2V0dGluZy5cbiIsIGRldi0+bmFtZSk7CisJCQkvKiBEaXNhYmxlIGludGVycnVwdHMgZm9yIG5vdyAqLworCQkJaGVybWVzX3NldF9pcnFtYXNrKGh3LCAwKTsKKwkJCXNjaGVkdWxlX3dvcmsoJnByaXYtPnJlc2V0X3dvcmspOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBDaGVjayB0aGUgY2FyZCBoYXNuJ3QgYmVlbiByZW1vdmVkICovCisJCWlmICghaGVybWVzX3ByZXNlbnQoaHcpKSB7CisJCQlERUJVRygwLCAib3Jpbm9jb19pbnRlcnJ1cHQoKTogY2FyZCByZW1vdmVkXG4iKTsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKGV2ZW50cyAmIEhFUk1FU19FVl9USUNLKQorCQkJX19vcmlub2NvX2V2X3RpY2soZGV2LCBodyk7CisJCWlmIChldmVudHMgJiBIRVJNRVNfRVZfV1RFUlIpCisJCQlfX29yaW5vY29fZXZfd3RlcnIoZGV2LCBodyk7CisJCWlmIChldmVudHMgJiBIRVJNRVNfRVZfSU5GRFJPUCkKKwkJCV9fb3Jpbm9jb19ldl9pbmZkcm9wKGRldiwgaHcpOworCQlpZiAoZXZlbnRzICYgSEVSTUVTX0VWX0lORk8pCisJCQlfX29yaW5vY29fZXZfaW5mbyhkZXYsIGh3KTsKKwkJaWYgKGV2ZW50cyAmIEhFUk1FU19FVl9SWCkKKwkJCV9fb3Jpbm9jb19ldl9yeChkZXYsIGh3KTsKKwkJaWYgKGV2ZW50cyAmIEhFUk1FU19FVl9UWEVYQykKKwkJCV9fb3Jpbm9jb19ldl90eGV4YyhkZXYsIGh3KTsKKwkJaWYgKGV2ZW50cyAmIEhFUk1FU19FVl9UWCkKKwkJCV9fb3Jpbm9jb19ldl90eChkZXYsIGh3KTsKKwkJaWYgKGV2ZW50cyAmIEhFUk1FU19FVl9BTExPQykKKwkJCV9fb3Jpbm9jb19ldl9hbGxvYyhkZXYsIGh3KTsKKworCQloZXJtZXNfd3JpdGVfcmVnbihodywgRVZBQ0ssIGV2c3RhdCk7CisKKwkJZXZzdGF0ID0gaGVybWVzX3JlYWRfcmVnbihodywgRVZTVEFUKTsKKwkJZXZlbnRzID0gZXZzdGF0ICYgaHctPmludGVuOworCX07CisKKwlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KK0VYUE9SVF9TWU1CT0wob3Jpbm9jb19pbnRlcnJ1cHQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBQb3dlciBtYW5hZ2VtZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWYgZGVmaW5lZChDT05GSUdfUE1fU0xFRVApICYmICFkZWZpbmVkKENPTkZJR19IRVJNRVNfQ0FDSEVfRldfT05fSU5JVCkKK3N0YXRpYyBpbnQgb3Jpbm9jb19wbV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5vdGlmaWVyLAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgcG1fZXZlbnQsCisJCQkgICAgICAgdm9pZCAqdW51c2VkKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBjb250YWluZXJfb2Yobm90aWZpZXIsCisJCQkJCQkgICAgc3RydWN0IG9yaW5vY29fcHJpdmF0ZSwKKwkJCQkJCSAgICBwbV9ub3RpZmllcik7CisKKwkvKiBBbGwgd2UgbmVlZCB0byBkbyBpcyBjYWNoZSB0aGUgZmlybXdhcmUgYmVmb3JlIHN1c3BlbmQsIGFuZAorCSAqIHJlbGVhc2UgaXQgd2hlbiB3ZSBjb21lIG91dC4KKwkgKgorCSAqIE9ubHkgbmVlZCB0byBkbyB0aGlzIGlmIHdlJ3JlIGRvd25sb2FkaW5nIGZpcm13YXJlLiAqLworCWlmICghcHJpdi0+ZG9fZndfZG93bmxvYWQpCisJCXJldHVybiBOT1RJRllfRE9ORTsKKworCXN3aXRjaCAocG1fZXZlbnQpIHsKKwljYXNlIFBNX0hJQkVSTkFUSU9OX1BSRVBBUkU6CisJY2FzZSBQTV9TVVNQRU5EX1BSRVBBUkU6CisJCW9yaW5vY29fY2FjaGVfZncocHJpdiwgMCk7CisJCWJyZWFrOworCisJY2FzZSBQTV9QT1NUX1JFU1RPUkU6CisJCS8qIFJlc3RvcmUgZnJvbSBoaWJlcm5hdGlvbiBmYWlsZWQuIFdlIG5lZWQgdG8gY2xlYW4KKwkJICogdXAgaW4gZXhhY3RseSB0aGUgc2FtZSB3YXksIHNvIGZhbGwgdGhyb3VnaC4gKi8KKwljYXNlIFBNX1BPU1RfSElCRVJOQVRJT046CisJY2FzZSBQTV9QT1NUX1NVU1BFTkQ6CisJCW9yaW5vY29fdW5jYWNoZV9mdyhwcml2KTsKKwkJYnJlYWs7CisKKwljYXNlIFBNX1JFU1RPUkVfUFJFUEFSRToKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gTk9USUZZX0RPTkU7Cit9CisKK3N0YXRpYyB2b2lkIG9yaW5vY29fcmVnaXN0ZXJfcG1fbm90aWZpZXIoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKK3sKKwlwcml2LT5wbV9ub3RpZmllci5ub3RpZmllcl9jYWxsID0gb3Jpbm9jb19wbV9ub3RpZmllcjsKKwlyZWdpc3Rlcl9wbV9ub3RpZmllcigmcHJpdi0+cG1fbm90aWZpZXIpOworfQorCitzdGF0aWMgdm9pZCBvcmlub2NvX3VucmVnaXN0ZXJfcG1fbm90aWZpZXIoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKK3sKKwl1bnJlZ2lzdGVyX3BtX25vdGlmaWVyKCZwcml2LT5wbV9ub3RpZmllcik7Cit9CisjZWxzZSAvKiAhUE1fU0xFRVAgfHwgSEVSTUVTX0NBQ0hFX0ZXX09OX0lOSVQgKi8KKyNkZWZpbmUgb3Jpbm9jb19yZWdpc3Rlcl9wbV9ub3RpZmllcihwcml2KSBkbyB7IH0gd2hpbGUoMCkKKyNkZWZpbmUgb3Jpbm9jb191bnJlZ2lzdGVyX3BtX25vdGlmaWVyKHByaXYpIGRvIHsgfSB3aGlsZSgwKQorI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEluaXRpYWxpemF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RydWN0IGNvbXBfaWQgeworCXUxNiBpZCwgdmFyaWFudCwgbWFqb3IsIG1pbm9yOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0YXRpYyBpbmxpbmUgZnd0eXBlX3QgZGV0ZXJtaW5lX2Zpcm13YXJlX3R5cGUoc3RydWN0IGNvbXBfaWQgKm5pY19pZCkKK3sKKwlpZiAobmljX2lkLT5pZCA8IDB4ODAwMCkKKwkJcmV0dXJuIEZJUk1XQVJFX1RZUEVfQUdFUkU7CisJZWxzZSBpZiAobmljX2lkLT5pZCA9PSAweDgwMDAgJiYgbmljX2lkLT5tYWpvciA9PSAwKQorCQlyZXR1cm4gRklSTVdBUkVfVFlQRV9TWU1CT0w7CisJZWxzZQorCQlyZXR1cm4gRklSTVdBUkVfVFlQRV9JTlRFUlNJTDsKK30KKworLyogU2V0IHByaXYtPmZpcm13YXJlIHR5cGUsIGRldGVybWluZSBmaXJtd2FyZSBwcm9wZXJ0aWVzICovCitzdGF0aWMgaW50IGRldGVybWluZV9maXJtd2FyZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKKwlpbnQgZXJyOworCXN0cnVjdCBjb21wX2lkIG5pY19pZCwgc3RhX2lkOworCXVuc2lnbmVkIGludCBmaXJtdmVyOworCWNoYXIgdG1wW1NZTUJPTF9NQVhfVkVSX0xFTisxXSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDIpKSk7CisKKwkvKiBHZXQgdGhlIGhhcmR3YXJlIHZlcnNpb24gKi8KKwllcnIgPSBIRVJNRVNfUkVBRF9SRUNPUkQoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX05JQ0lELCAmbmljX2lkKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCByZWFkIGhhcmR3YXJlIGlkZW50aXR5OiBlcnJvciAlZFxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlsZTE2X3RvX2NwdXMoJm5pY19pZC5pZCk7CisJbGUxNl90b19jcHVzKCZuaWNfaWQudmFyaWFudCk7CisJbGUxNl90b19jcHVzKCZuaWNfaWQubWFqb3IpOworCWxlMTZfdG9fY3B1cygmbmljX2lkLm1pbm9yKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEhhcmR3YXJlIGlkZW50aXR5ICUwNHg6JTA0eDolMDR4OiUwNHhcbiIsCisJICAgICAgIGRldi0+bmFtZSwgbmljX2lkLmlkLCBuaWNfaWQudmFyaWFudCwKKwkgICAgICAgbmljX2lkLm1ham9yLCBuaWNfaWQubWlub3IpOworCisJcHJpdi0+ZmlybXdhcmVfdHlwZSA9IGRldGVybWluZV9maXJtd2FyZV90eXBlKCZuaWNfaWQpOworCisJLyogR2V0IHRoZSBmaXJtd2FyZSB2ZXJzaW9uICovCisJZXJyID0gSEVSTUVTX1JFQURfUkVDT1JEKGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9TVEFJRCwgJnN0YV9pZCk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgcmVhZCBzdGF0aW9uIGlkZW50aXR5OiBlcnJvciAlZFxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlsZTE2X3RvX2NwdXMoJnN0YV9pZC5pZCk7CisJbGUxNl90b19jcHVzKCZzdGFfaWQudmFyaWFudCk7CisJbGUxNl90b19jcHVzKCZzdGFfaWQubWFqb3IpOworCWxlMTZfdG9fY3B1cygmc3RhX2lkLm1pbm9yKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFN0YXRpb24gaWRlbnRpdHkgICUwNHg6JTA0eDolMDR4OiUwNHhcbiIsCisJICAgICAgIGRldi0+bmFtZSwgc3RhX2lkLmlkLCBzdGFfaWQudmFyaWFudCwKKwkgICAgICAgc3RhX2lkLm1ham9yLCBzdGFfaWQubWlub3IpOworCisJc3dpdGNoIChzdGFfaWQuaWQpIHsKKwljYXNlIDB4MTU6CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IFByaW1hcnkgZmlybXdhcmUgaXMgYWN0aXZlXG4iLAorCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJY2FzZSAweDE0YjoKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogVGVydGlhcnkgZmlybXdhcmUgaXMgYWN0aXZlXG4iLAorCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJY2FzZSAweDFmOgkvKiBJbnRlcnNpbCwgQWdlcmUsIFN5bWJvbCBTcGVjdHJ1bTI0ICovCisJY2FzZSAweDIxOgkvKiBTeW1ib2wgU3BlY3RydW0yNCBUcmlsb2d5ICovCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX05PVElDRSAiJXM6IFVua25vd24gc3RhdGlvbiBJRCwgcGxlYXNlIHJlcG9ydFxuIiwKKwkJICAgICAgIGRldi0+bmFtZSk7CisJCWJyZWFrOworCX0KKworCS8qIERlZmF1bHQgY2FwYWJpbGl0aWVzICovCisJcHJpdi0+aGFzX3NlbnNpdGl2aXR5ID0gMTsKKwlwcml2LT5oYXNfbXdvID0gMDsKKwlwcml2LT5oYXNfcHJlYW1ibGUgPSAwOworCXByaXYtPmhhc19wb3J0MyA9IDE7CisJcHJpdi0+aGFzX2lic3MgPSAxOworCXByaXYtPmhhc193ZXAgPSAwOworCXByaXYtPmhhc19iaWdfd2VwID0gMDsKKwlwcml2LT5oYXNfYWx0X3R4Y250bCA9IDA7CisJcHJpdi0+aGFzX2V4dF9zY2FuID0gMDsKKwlwcml2LT5oYXNfd3BhID0gMDsKKwlwcml2LT5kb19md19kb3dubG9hZCA9IDA7CisKKwkvKiBEZXRlcm1pbmUgY2FwYWJpbGl0aWVzIGZyb20gdGhlIGZpcm13YXJlIHZlcnNpb24gKi8KKwlzd2l0Y2ggKHByaXYtPmZpcm13YXJlX3R5cGUpIHsKKwljYXNlIEZJUk1XQVJFX1RZUEVfQUdFUkU6CisJCS8qIEx1Y2VudCBXYXZlbGFuIElFRUUsIEx1Y2VudCBPcmlub2NvLCBDYWJsZXRyb24gUm9hbUFib3V0LAorCQkgICBFTFNBLCBNZWxjbywgSFAsIElCTSwgRGVsbCAxMTUwLCBDb21wYXEgMTEwLzIxMCAqLworCQlzbnByaW50Zihwcml2LT5md19uYW1lLCBzaXplb2YocHJpdi0+ZndfbmFtZSkgLSAxLAorCQkJICJMdWNlbnQvQWdlcmUgJWQuJTAyZCIsIHN0YV9pZC5tYWpvciwgc3RhX2lkLm1pbm9yKTsKKworCQlmaXJtdmVyID0gKCh1bnNpZ25lZCBsb25nKXN0YV9pZC5tYWpvciA8PCAxNikgfCBzdGFfaWQubWlub3I7CisKKwkJcHJpdi0+aGFzX2lic3MgPSAoZmlybXZlciA+PSAweDYwMDA2KTsKKwkJcHJpdi0+aGFzX3dlcCA9IChmaXJtdmVyID49IDB4NDAwMjApOworCQlwcml2LT5oYXNfYmlnX3dlcCA9IDE7IC8qIEZJWE1FOiB0aGlzIGlzIHdyb25nIC0gaG93IGRvIHdlIHRlbGwKKwkJCQkJICBHb2xkIGNhcmRzIGZyb20gdGhlIG90aGVycz8gKi8KKwkJcHJpdi0+aGFzX213byA9IChmaXJtdmVyID49IDB4NjAwMDApOworCQlwcml2LT5oYXNfcG0gPSAoZmlybXZlciA+PSAweDQwMDIwKTsgLyogRG9uJ3Qgd29yayBpbiA3LjUyID8gKi8KKwkJcHJpdi0+aWJzc19wb3J0ID0gMTsKKwkJcHJpdi0+aGFzX2hvc3RzY2FuID0gKGZpcm12ZXIgPj0gMHg4MDAwYSk7CisJCXByaXYtPmRvX2Z3X2Rvd25sb2FkID0gMTsKKwkJcHJpdi0+YnJva2VuX21vbml0b3IgPSAoZmlybXZlciA+PSAweDgwMDAwKTsKKwkJcHJpdi0+aGFzX2FsdF90eGNudGwgPSAoZmlybXZlciA+PSAweDkwMDAwKTsgLyogQWxsIDkueCA/ICovCisJCXByaXYtPmhhc19leHRfc2NhbiA9IChmaXJtdmVyID49IDB4OTAwMDApOyAvKiBBbGwgOS54ID8gKi8KKwkJcHJpdi0+aGFzX3dwYSA9IChmaXJtdmVyID49IDB4OTAwMmEpOworCQkvKiBUZXN0ZWQgd2l0aCBBZ2VyZSBmaXJtd2FyZSA6CisJCSAqCTEuMTYgOyA0LjA4IDsgNC41MiA7IDYuMDQgOyA2LjE2IDsgNy4yOCA9PiBKZWFuIElJCisJCSAqIFRlc3RlZCBDYWJsZVRyb24gZmlybXdhcmUgOiA0LjMyID0+IEFudG9uICovCisJCWJyZWFrOworCWNhc2UgRklSTVdBUkVfVFlQRV9TWU1CT0w6CisJCS8qIFN5bWJvbCAsIDNDb20gQWlyQ29ubmVjdCwgSW50ZWwsIEVyaWNzc29uIFdMQU4gKi8KKwkJLyogSW50ZWwgTUFDIDogMDA6MDI6QjM6KiAqLworCQkvKiAzQ29tIE1BQyA6IDAwOjUwOkRBOiogKi8KKwkJbWVtc2V0KHRtcCwgMCwgc2l6ZW9mKHRtcCkpOworCQkvKiBHZXQgdGhlIFN5bWJvbCBmaXJtd2FyZSB2ZXJzaW9uICovCisJCWVyciA9IGhlcm1lc19yZWFkX2x0dihodywgVVNFUl9CQVAsCisJCQkJICAgICAgSEVSTUVTX1JJRF9TRUNPTkRBUllWRVJTSU9OX1NZTUJPTCwKKwkJCQkgICAgICBTWU1CT0xfTUFYX1ZFUl9MRU4sIE5VTEwsICZ0bXApOworCQlpZiAoZXJyKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkgICAgICAgIiVzOiBFcnJvciAlZCByZWFkaW5nIFN5bWJvbCBmaXJtd2FyZSBpbmZvLiAiCisJCQkgICAgICAgIldpbGRseSBndWVzc2luZyBjYXBhYmlsaXRpZXMuLi5cbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOworCQkJZmlybXZlciA9IDA7CisJCQl0bXBbMF0gPSAnXDAnOworCQl9IGVsc2UgeworCQkJLyogVGhlIGZpcm13YXJlIHJldmlzaW9uIGlzIGEgc3RyaW5nLCB0aGUgZm9ybWF0IGlzCisJCQkgKiBzb21ldGhpbmcgbGlrZSA6ICJWMi4yMC0wMSIuCisJCQkgKiBRdWljayBhbmQgZGlydHkgcGFyc2luZy4uLiAtIEplYW4gSUkKKwkJCSAqLworCQkJZmlybXZlciA9ICgodG1wWzFdIC0gJzAnKSA8PCAxNikKKwkJCQl8ICgodG1wWzNdIC0gJzAnKSA8PCAxMikKKwkJCQl8ICgodG1wWzRdIC0gJzAnKSA8PCA4KQorCQkJCXwgKCh0bXBbNl0gLSAnMCcpIDw8IDQpCisJCQkJfCAodG1wWzddIC0gJzAnKTsKKworCQkJdG1wW1NZTUJPTF9NQVhfVkVSX0xFTl0gPSAnXDAnOworCQl9CisKKwkJc25wcmludGYocHJpdi0+ZndfbmFtZSwgc2l6ZW9mKHByaXYtPmZ3X25hbWUpIC0gMSwKKwkJCSAiU3ltYm9sICVzIiwgdG1wKTsKKworCQlwcml2LT5oYXNfaWJzcyA9IChmaXJtdmVyID49IDB4MjAwMDApOworCQlwcml2LT5oYXNfd2VwID0gKGZpcm12ZXIgPj0gMHgxNTAxMik7CisJCXByaXYtPmhhc19iaWdfd2VwID0gKGZpcm12ZXIgPj0gMHgyMDAwMCk7CisJCXByaXYtPmhhc19wbSA9IChmaXJtdmVyID49IDB4MjAwMDAgJiYgZmlybXZlciA8IDB4MjIwMDApIHx8CisJCQkgICAgICAgKGZpcm12ZXIgPj0gMHgyOTAwMCAmJiBmaXJtdmVyIDwgMHgzMDAwMCkgfHwKKwkJCSAgICAgICBmaXJtdmVyID49IDB4MzEwMDA7CisJCXByaXYtPmhhc19wcmVhbWJsZSA9IChmaXJtdmVyID49IDB4MjAwMDApOworCQlwcml2LT5pYnNzX3BvcnQgPSA0OworCisJCS8qIFN5bWJvbCBmaXJtd2FyZSBpcyBmb3VuZCBvbiB2YXJpb3VzIGNhcmRzLCBidXQKKwkJICogdGhlcmUgaGFzIGJlZW4gbm8gYXR0ZW1wdCB0byBjaGVjayBmaXJtd2FyZQorCQkgKiBkb3dubG9hZCBvbiBub24tc3BlY3RydW1fY3MgYmFzZWQgY2FyZHMuCisJCSAqCisJCSAqIEdpdmVuIHRoYXQgdGhlIEFnZXJlIGZpcm13YXJlIGRvd25sb2FkIHdvcmtzCisJCSAqIGRpZmZlcmVudGx5LCB3ZSBzaG91bGQgYXZvaWQgZG9pbmcgYSBmaXJtd2FyZQorCQkgKiBkb3dubG9hZCB3aXRoIHRoZSBTeW1ib2wgYWxnb3JpdGhtIG9uIG5vbi1zcGVjdHJ1bQorCQkgKiBjYXJkcy4KKwkJICoKKwkJICogRm9yIG5vdyB3ZSBjYW4gaWRlbnRpZnkgYSBzcGVjdHJ1bV9jcyBiYXNlZCBjYXJkCisJCSAqIGJlY2F1c2UgaXQgaGFzIGEgZmlybXdhcmUgcmVzZXQgZnVuY3Rpb24uCisJCSAqLworCQlwcml2LT5kb19md19kb3dubG9hZCA9IChwcml2LT5zdG9wX2Z3ICE9IE5VTEwpOworCisJCXByaXYtPmJyb2tlbl9kaXNhYmxlcG9ydCA9IChmaXJtdmVyID09IDB4MjUwMTMpIHx8CisJCQkJKGZpcm12ZXIgPj0gMHgzMDAwMCAmJiBmaXJtdmVyIDw9IDB4MzEwMDApOworCQlwcml2LT5oYXNfaG9zdHNjYW4gPSAoZmlybXZlciA+PSAweDMxMDAxKSB8fAorCQkJCSAgICAgKGZpcm12ZXIgPj0gMHgyOTA1NyAmJiBmaXJtdmVyIDwgMHgzMDAwMCk7CisJCS8qIFRlc3RlZCB3aXRoIEludGVsIGZpcm13YXJlIDogMHgyMDAxNSA9PiBKZWFuIElJICovCisJCS8qIFRlc3RlZCB3aXRoIDNDb20gZmlybXdhcmUgOiAweDE1MDEyICYgMHgyMjAwMSA9PiBKZWFuIElJICovCisJCWJyZWFrOworCWNhc2UgRklSTVdBUkVfVFlQRV9JTlRFUlNJTDoKKwkJLyogRC1MaW5rLCBMaW5rc3lzLCBBZHRyb24sIFpvb21BaXIsIGFuZCBtYW55IG90aGVycy4uLgorCQkgKiBTYW1zdW5nLCBDb21wYXEgMTAwLzIwMCBhbmQgUHJveGltIGFyZSBzbGlnaHRseQorCQkgKiBkaWZmZXJlbnQgYW5kIGxlc3Mgd2VsbCB0ZXN0ZWQgKi8KKwkJLyogRC1MaW5rIE1BQyA6IDAwOjQwOjA1OiogKi8KKwkJLyogQWRkdHJvbiBNQUMgOiAwMDo5MDpEMToqICovCisJCXNucHJpbnRmKHByaXYtPmZ3X25hbWUsIHNpemVvZihwcml2LT5md19uYW1lKSAtIDEsCisJCQkgIkludGVyc2lsICVkLiVkLiVkIiwgc3RhX2lkLm1ham9yLCBzdGFfaWQubWlub3IsCisJCQkgc3RhX2lkLnZhcmlhbnQpOworCisJCWZpcm12ZXIgPSAoKHVuc2lnbmVkIGxvbmcpc3RhX2lkLm1ham9yIDw8IDE2KSB8CisJCQkoKHVuc2lnbmVkIGxvbmcpc3RhX2lkLm1pbm9yIDw8IDgpIHwgc3RhX2lkLnZhcmlhbnQ7CisKKwkJcHJpdi0+aGFzX2lic3MgPSAoZmlybXZlciA+PSAweDAwMDcwMCk7IC8qIEZJWE1FICovCisJCXByaXYtPmhhc19iaWdfd2VwID0gcHJpdi0+aGFzX3dlcCA9IChmaXJtdmVyID49IDB4MDAwODAwKTsKKwkJcHJpdi0+aGFzX3BtID0gKGZpcm12ZXIgPj0gMHgwMDA3MDApOworCQlwcml2LT5oYXNfaG9zdHNjYW4gPSAoZmlybXZlciA+PSAweDAxMDMwMSk7CisKKwkJaWYgKGZpcm12ZXIgPj0gMHgwMDA4MDApCisJCQlwcml2LT5pYnNzX3BvcnQgPSAwOworCQllbHNlIHsKKwkJCXByaW50ayhLRVJOX05PVElDRSAiJXM6IEludGVyc2lsIGZpcm13YXJlIGVhcmxpZXIgIgorCQkJICAgICAgICJ0aGFuIHYwLjgueCAtIHNldmVyYWwgZmVhdHVyZXMgbm90IHN1cHBvcnRlZFxuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUpOworCQkJcHJpdi0+aWJzc19wb3J0ID0gMTsKKwkJfQorCQlicmVhazsKKwl9CisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBGaXJtd2FyZSBkZXRlcm1pbmVkIGFzICVzXG4iLCBkZXYtPm5hbWUsCisJICAgICAgIHByaXYtPmZ3X25hbWUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3Jpbm9jb19pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OworCWludCBlcnIgPSAwOworCXN0cnVjdCBoZXJtZXNfaWRzdHJpbmcgbmlja2J1ZjsKKwl1MTYgcmVjbGVuOworCWludCBsZW47CisKKwkvKiBObyBuZWVkIHRvIGxvY2ssIHRoZSBod191bmF2YWlsYWJsZSBmbGFnIGlzIGFscmVhZHkgc2V0IGluCisJICogYWxsb2Nfb3Jpbm9jb2RldigpICovCisJcHJpdi0+bmljYnVmX3NpemUgPSBJRUVFODAyMTFfTUFYX0ZSQU1FX0xFTiArIEVUSF9ITEVOOworCisJLyogSW5pdGlhbGl6ZSB0aGUgZmlybXdhcmUgKi8KKwllcnIgPSBoZXJtZXNfaW5pdChodyk7CisJaWYgKGVyciAhPSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBpbml0aWFsaXplIGZpcm13YXJlIChlcnIgPSAlZClcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CisJCWdvdG8gb3V0OworCX0KKworCWVyciA9IGRldGVybWluZV9maXJtd2FyZShkZXYpOworCWlmIChlcnIgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBJbmNvbXBhdGlibGUgZmlybXdhcmUsIGFib3J0aW5nXG4iLAorCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKHByaXYtPmRvX2Z3X2Rvd25sb2FkKSB7CisjaWZkZWYgQ09ORklHX0hFUk1FU19DQUNIRV9GV19PTl9JTklUCisJCW9yaW5vY29fY2FjaGVfZncocHJpdiwgMCk7CisjZW5kaWYKKworCQllcnIgPSBvcmlub2NvX2Rvd25sb2FkKHByaXYpOworCQlpZiAoZXJyKQorCQkJcHJpdi0+ZG9fZndfZG93bmxvYWQgPSAwOworCisJCS8qIENoZWNrIGZpcm13YXJlIHZlcnNpb24gYWdhaW4gKi8KKwkJZXJyID0gZGV0ZXJtaW5lX2Zpcm13YXJlKGRldik7CisJCWlmIChlcnIgIT0gMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogSW5jb21wYXRpYmxlIGZpcm13YXJlLCBhYm9ydGluZ1xuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwlpZiAocHJpdi0+aGFzX3BvcnQzKQorCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEFkLWhvYyBkZW1vIG1vZGUgc3VwcG9ydGVkXG4iLAorCQkgICAgICAgZGV2LT5uYW1lKTsKKwlpZiAocHJpdi0+aGFzX2lic3MpCisJCXByaW50ayhLRVJOX0RFQlVHICIlczogSUVFRSBzdGFuZGFyZCBJQlNTIGFkLWhvYyBtb2RlIHN1cHBvcnRlZFxuIiwKKwkJICAgICAgIGRldi0+bmFtZSk7CisJaWYgKHByaXYtPmhhc193ZXApIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBXRVAgc3VwcG9ydGVkLCAlcy1iaXQga2V5XG4iLCBkZXYtPm5hbWUsCisJCSAgICAgICBwcml2LT5oYXNfYmlnX3dlcCA/ICIxMDQiIDogIjQwIik7CisJfQorCWlmIChwcml2LT5oYXNfd3BhKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogV1BBLVBTSyBzdXBwb3J0ZWRcbiIsIGRldi0+bmFtZSk7CisJCWlmIChvcmlub2NvX21pY19pbml0KHByaXYpKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBGYWlsZWQgdG8gc2V0dXAgTUlDIGNyeXB0byAiCisJCQkgICAgICAgImFsZ29yaXRobS4gRGlzYWJsaW5nIFdQQSBzdXBwb3J0XG4iLCBkZXYtPm5hbWUpOworCQkJcHJpdi0+aGFzX3dwYSA9IDA7CisJCX0KKwl9CisKKwkvKiBOb3cgd2UgaGF2ZSB0aGUgZmlybXdhcmUgY2FwYWJpbGl0aWVzLCBhbGxvY2F0ZSBhcHByb3BpYXRlCisJICogc2l6ZWQgc2NhbiBidWZmZXJzICovCisJaWYgKG9yaW5vY29fYnNzX2RhdGFfYWxsb2NhdGUocHJpdikpCisJCWdvdG8gb3V0OworCW9yaW5vY29fYnNzX2RhdGFfaW5pdChwcml2KTsKKworCS8qIEdldCB0aGUgTUFDIGFkZHJlc3MgKi8KKwllcnIgPSBoZXJtZXNfcmVhZF9sdHYoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NORk9XTk1BQ0FERFIsCisJCQkgICAgICBFVEhfQUxFTiwgTlVMTCwgZGV2LT5kZXZfYWRkcik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZmFpbGVkIHRvIHJlYWQgTUFDIGFkZHJlc3MhXG4iLAorCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJZ290byBvdXQ7CisJfQorCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBNQUMgYWRkcmVzcyAlcE1cbiIsCisJICAgICAgIGRldi0+bmFtZSwgZGV2LT5kZXZfYWRkcik7CisKKwkvKiBHZXQgdGhlIHN0YXRpb24gbmFtZSAqLworCWVyciA9IGhlcm1lc19yZWFkX2x0dihodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ05GT1dOTkFNRSwKKwkJCSAgICAgIHNpemVvZihuaWNrYnVmKSwgJnJlY2xlbiwgJm5pY2tidWYpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIHJlYWQgc3RhdGlvbiBuYW1lXG4iLAorCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJZ290byBvdXQ7CisJfQorCWlmIChuaWNrYnVmLmxlbikKKwkJbGVuID0gbWluKElXX0VTU0lEX01BWF9TSVpFLCAoaW50KWxlMTZfdG9fY3B1KG5pY2tidWYubGVuKSk7CisJZWxzZQorCQlsZW4gPSBtaW4oSVdfRVNTSURfTUFYX1NJWkUsIDIgKiByZWNsZW4pOworCW1lbWNweShwcml2LT5uaWNrLCAmbmlja2J1Zi52YWwsIGxlbik7CisJcHJpdi0+bmlja1tsZW5dID0gJ1wwJzsKKworCXByaW50ayhLRVJOX0RFQlVHICIlczogU3RhdGlvbiBuYW1lIFwiJXNcIlxuIiwgZGV2LT5uYW1lLCBwcml2LT5uaWNrKTsKKworCWVyciA9IG9yaW5vY29fYWxsb2NhdGVfZmlkKGRldik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgTklDIGJ1ZmZlciFcbiIsCisJCSAgICAgICBkZXYtPm5hbWUpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBHZXQgYWxsb3dlZCBjaGFubmVscyAqLworCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NIQU5ORUxMSVNULAorCQkJCSAgJnByaXYtPmNoYW5uZWxfbWFzayk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gcmVhZCBjaGFubmVsIGxpc3QhXG4iLAorCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogR2V0IGluaXRpYWwgQVAgZGVuc2l0eSAqLworCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NORlNZU1RFTVNDQUxFLAorCQkJCSAgJnByaXYtPmFwX2RlbnNpdHkpOworCWlmIChlcnIgfHwgcHJpdi0+YXBfZGVuc2l0eSA8IDEgfHwgcHJpdi0+YXBfZGVuc2l0eSA+IDMpCisJCXByaXYtPmhhc19zZW5zaXRpdml0eSA9IDA7CisKKwkvKiBHZXQgaW5pdGlhbCBSVFMgdGhyZXNob2xkICovCisJZXJyID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ05GUlRTVEhSRVNIT0xELAorCQkJCSAgJnByaXYtPnJ0c190aHJlc2gpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIHJlYWQgUlRTIHRocmVzaG9sZCFcbiIsCisJCSAgICAgICBkZXYtPm5hbWUpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBHZXQgaW5pdGlhbCBmcmFnbWVudGF0aW9uIHNldHRpbmdzICovCisJaWYgKHByaXYtPmhhc19td28pCisJCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCQkgIEhFUk1FU19SSURfQ05GTVdPUk9CVVNUX0FHRVJFLAorCQkJCQkgICZwcml2LT5td29fcm9idXN0KTsKKwllbHNlCisJCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCQkgIEhFUk1FU19SSURfQ05GRlJBR01FTlRBVElPTlRIUkVTSE9MRCwKKwkJCQkJICAmcHJpdi0+ZnJhZ190aHJlc2gpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIHJlYWQgZnJhZ21lbnRhdGlvbiBzZXR0aW5ncyFcbiIsCisJCSAgICAgICBkZXYtPm5hbWUpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBQb3dlciBtYW5hZ2VtZW50IHNldHVwICovCisJaWYgKHByaXYtPmhhc19wbSkgeworCQlwcml2LT5wbV9vbiA9IDA7CisJCXByaXYtPnBtX21jYXN0ID0gMTsKKwkJZXJyID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsCisJCQkJCSAgSEVSTUVTX1JJRF9DTkZNQVhTTEVFUERVUkFUSU9OLAorCQkJCQkgICZwcml2LT5wbV9wZXJpb2QpOworCQlpZiAoZXJyKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gcmVhZCBwb3dlciBtYW5hZ2VtZW50IHBlcmlvZCFcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJCWdvdG8gb3V0OworCQl9CisJCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCQkgIEhFUk1FU19SSURfQ05GUE1IT0xET1ZFUkRVUkFUSU9OLAorCQkJCQkgICZwcml2LT5wbV90aW1lb3V0KTsKKwkJaWYgKGVycikgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIHJlYWQgcG93ZXIgbWFuYWdlbWVudCB0aW1lb3V0IVxuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwkvKiBQcmVhbWJsZSBzZXR1cCAqLworCWlmIChwcml2LT5oYXNfcHJlYW1ibGUpIHsKKwkJZXJyID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsCisJCQkJCSAgSEVSTUVTX1JJRF9DTkZQUkVBTUJMRV9TWU1CT0wsCisJCQkJCSAgJnByaXYtPnByZWFtYmxlKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gb3V0OworCX0KKworCS8qIFNldCB1cCB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uICovCisJcHJpdi0+aXdfbW9kZSA9IElXX01PREVfSU5GUkE7CisJLyogQnkgZGVmYXVsdCB1c2UgSUVFRS9JQlNTIGFkLWhvYyBtb2RlIGlmIHdlIGhhdmUgaXQgKi8KKwlwcml2LT5wcmVmZXJfcG9ydDMgPSBwcml2LT5oYXNfcG9ydDMgJiYgKCFwcml2LT5oYXNfaWJzcyk7CisJc2V0X3BvcnRfdHlwZShwcml2KTsKKwlwcml2LT5jaGFubmVsID0gMDsgLyogdXNlIGZpcm13YXJlIGRlZmF1bHQgKi8KKworCXByaXYtPnByb21pc2N1b3VzID0gMDsKKwlwcml2LT5lbmNvZGVfYWxnID0gSVdfRU5DT0RFX0FMR19OT05FOworCXByaXYtPnR4X2tleSA9IDA7CisJcHJpdi0+d3BhX2VuYWJsZWQgPSAwOworCXByaXYtPnRraXBfY21fYWN0aXZlID0gMDsKKwlwcml2LT5rZXlfbWdtdCA9IDA7CisJcHJpdi0+d3BhX2llX2xlbiA9IDA7CisJcHJpdi0+d3BhX2llID0gTlVMTDsKKworCS8qIE1ha2UgdGhlIGhhcmR3YXJlIGF2YWlsYWJsZSwgYXMgbG9uZyBhcyBpdCBoYXNuJ3QgYmVlbgorCSAqIHJlbW92ZWQgZWxzZXdoZXJlIChlLmcuIGJ5IFBDTUNJQSBob3QgdW5wbHVnKSAqLworCXNwaW5fbG9ja19pcnEoJnByaXYtPmxvY2spOworCXByaXYtPmh3X3VuYXZhaWxhYmxlLS07CisJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5sb2NrKTsKKworCXByaW50ayhLRVJOX0RFQlVHICIlczogcmVhZHlcbiIsIGRldi0+bmFtZSk7CisKKyBvdXQ6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBvcmlub2NvX25ldGRldl9vcHMgPSB7CisJLm5kb19pbml0CQk9IG9yaW5vY29faW5pdCwKKwkubmRvX29wZW4JCT0gb3Jpbm9jb19vcGVuLAorCS5uZG9fc3RvcAkJPSBvcmlub2NvX3N0b3AsCisJLm5kb19zdGFydF94bWl0CQk9IG9yaW5vY29feG1pdCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdAk9IG9yaW5vY29fc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fY2hhbmdlX210dQkJPSBvcmlub2NvX2NoYW5nZV9tdHUsCisJLm5kb190eF90aW1lb3V0CQk9IG9yaW5vY29fdHhfdGltZW91dCwKKwkubmRvX2dldF9zdGF0cwkJPSBvcmlub2NvX2dldF9zdGF0cywKK307CisKK3N0cnVjdCBuZXRfZGV2aWNlCisqYWxsb2Nfb3Jpbm9jb2RldihpbnQgc2l6ZW9mX2NhcmQsCisJCSAgc3RydWN0IGRldmljZSAqZGV2aWNlLAorCQkgIGludCAoKmhhcmRfcmVzZXQpKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKiksCisJCSAgaW50ICgqc3RvcF9mdykoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqLCBpbnQpKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdjsKKworCWRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlKSArIHNpemVvZl9jYXJkKTsKKwlpZiAoIWRldikKKwkJcmV0dXJuIE5VTEw7CisJcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJcHJpdi0+bmRldiA9IGRldjsKKwlpZiAoc2l6ZW9mX2NhcmQpCisJCXByaXYtPmNhcmQgPSAodm9pZCAqKSgodW5zaWduZWQgbG9uZylwcml2CisJCQkJICAgICAgKyBzaXplb2Yoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSkpOworCWVsc2UKKwkJcHJpdi0+Y2FyZCA9IE5VTEw7CisJcHJpdi0+ZGV2ID0gZGV2aWNlOworCisJLyogU2V0dXAgLyBvdmVycmlkZSBuZXRfZGV2aWNlIGZpZWxkcyAqLworCWRldi0+bmV0ZGV2X29wcyA9ICZvcmlub2NvX25ldGRldl9vcHM7CisJZGV2LT53YXRjaGRvZ190aW1lbyA9IEhaOyAvKiAxIHNlY29uZCB0aW1lb3V0ICovCisJZGV2LT5ldGh0b29sX29wcyA9ICZvcmlub2NvX2V0aHRvb2xfb3BzOworCWRldi0+d2lyZWxlc3NfaGFuZGxlcnMgPSAmb3Jpbm9jb19oYW5kbGVyX2RlZjsKKyNpZmRlZiBXSVJFTEVTU19TUFkKKwlwcml2LT53aXJlbGVzc19kYXRhLnNweV9kYXRhID0gJnByaXYtPnNweV9kYXRhOworCWRldi0+d2lyZWxlc3NfZGF0YSA9ICZwcml2LT53aXJlbGVzc19kYXRhOworI2VuZGlmCisJLyogd2UgdXNlIHRoZSBkZWZhdWx0IGV0aF9tYWNfYWRkciBmb3Igc2V0dGluZyB0aGUgTUFDIGFkZHIgKi8KKworCS8qIFJlc2VydmUgc3BhY2UgaW4gc2tiIGZvciB0aGUgU05BUCBoZWFkZXIgKi8KKwlkZXYtPmhhcmRfaGVhZGVyX2xlbiArPSBFTkNBUFNfT1ZFUkhFQUQ7CisKKwkvKiBTZXQgdXAgZGVmYXVsdCBjYWxsYmFja3MgKi8KKwlwcml2LT5oYXJkX3Jlc2V0ID0gaGFyZF9yZXNldDsKKwlwcml2LT5zdG9wX2Z3ID0gc3RvcF9mdzsKKworCXNwaW5fbG9ja19pbml0KCZwcml2LT5sb2NrKTsKKwlwcml2LT5vcGVuID0gMDsKKwlwcml2LT5od191bmF2YWlsYWJsZSA9IDE7IC8qIG9yaW5vY29faW5pdCgpIG11c3QgY2xlYXIgdGhpcworCQkJCSAgICogYmVmb3JlIGFueXRoaW5nIGVsc2UgdG91Y2hlcyB0aGUKKwkJCQkgICAqIGhhcmR3YXJlICovCisJSU5JVF9XT1JLKCZwcml2LT5yZXNldF93b3JrLCBvcmlub2NvX3Jlc2V0KTsKKwlJTklUX1dPUksoJnByaXYtPmpvaW5fd29yaywgb3Jpbm9jb19qb2luX2FwKTsKKwlJTklUX1dPUksoJnByaXYtPndldmVudF93b3JrLCBvcmlub2NvX3NlbmRfd2V2ZW50cyk7CisKKwlJTklUX0xJU1RfSEVBRCgmcHJpdi0+cnhfbGlzdCk7CisJdGFza2xldF9pbml0KCZwcml2LT5yeF90YXNrbGV0LCBvcmlub2NvX3J4X2lzcl90YXNrbGV0LAorCQkgICAgICh1bnNpZ25lZCBsb25nKSBkZXYpOworCisJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKKwlwcml2LT5sYXN0X2xpbmtzdGF0dXMgPSAweGZmZmY7CisKKyNpZiBkZWZpbmVkKENPTkZJR19IRVJNRVNfQ0FDSEVfRldfT05fSU5JVCkgfHwgZGVmaW5lZChDT05GSUdfUE1fU0xFRVApCisJcHJpdi0+Y2FjaGVkX3ByaV9mdyA9IE5VTEw7CisJcHJpdi0+Y2FjaGVkX2Z3ID0gTlVMTDsKKyNlbmRpZgorCisJLyogUmVnaXN0ZXIgUE0gbm90aWZpZXJzICovCisJb3Jpbm9jb19yZWdpc3Rlcl9wbV9ub3RpZmllcihwcml2KTsKKworCXJldHVybiBkZXY7Cit9CitFWFBPUlRfU1lNQk9MKGFsbG9jX29yaW5vY29kZXYpOworCit2b2lkIGZyZWVfb3Jpbm9jb2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBvcmlub2NvX3J4X2RhdGEgKnJ4X2RhdGEsICp0ZW1wOworCisJLyogSWYgdGhlIHRhc2tsZXQgaXMgc2NoZWR1bGVkIHdoZW4gd2UgY2FsbCB0YXNrbGV0X2tpbGwgaXQKKwkgKiB3aWxsIHJ1biBvbmUgZmluYWwgdGltZS4gSG93ZXZlciB0aGUgdGFza2xldCB3aWxsIG9ubHkKKwkgKiBkcmFpbiBwcml2LT5yeF9saXN0IGlmIHRoZSBodyBpcyBzdGlsbCBhdmFpbGFibGUuICovCisJdGFza2xldF9raWxsKCZwcml2LT5yeF90YXNrbGV0KTsKKworCS8qIEV4cGxpY2l0bHkgZHJhaW4gcHJpdi0+cnhfbGlzdCAqLworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyeF9kYXRhLCB0ZW1wLCAmcHJpdi0+cnhfbGlzdCwgbGlzdCkgeworCQlsaXN0X2RlbCgmcnhfZGF0YS0+bGlzdCk7CisKKwkJZGV2X2tmcmVlX3NrYihyeF9kYXRhLT5za2IpOworCQlrZnJlZShyeF9kYXRhLT5kZXNjKTsKKwkJa2ZyZWUocnhfZGF0YSk7CisJfQorCisJb3Jpbm9jb191bnJlZ2lzdGVyX3BtX25vdGlmaWVyKHByaXYpOworCW9yaW5vY29fdW5jYWNoZV9mdyhwcml2KTsKKworCXByaXYtPndwYV9pZV9sZW4gPSAwOworCWtmcmVlKHByaXYtPndwYV9pZSk7CisJb3Jpbm9jb19taWNfZnJlZShwcml2KTsKKwlvcmlub2NvX2Jzc19kYXRhX2ZyZWUocHJpdik7CisJZnJlZV9uZXRkZXYoZGV2KTsKK30KK0VYUE9SVF9TWU1CT0woZnJlZV9vcmlub2NvZGV2KTsKKworc3RhdGljIHZvaWQgb3Jpbm9jb19nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCXN0cnVjdCBldGh0b29sX2RydmluZm8gKmluZm8pCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisKKwlzdHJuY3B5KGluZm8tPmRyaXZlciwgRFJJVkVSX05BTUUsIHNpemVvZihpbmZvLT5kcml2ZXIpIC0gMSk7CisJc3RybmNweShpbmZvLT52ZXJzaW9uLCBEUklWRVJfVkVSU0lPTiwgc2l6ZW9mKGluZm8tPnZlcnNpb24pIC0gMSk7CisJc3RybmNweShpbmZvLT5md192ZXJzaW9uLCBwcml2LT5md19uYW1lLCBzaXplb2YoaW5mby0+ZndfdmVyc2lvbikgLSAxKTsKKwlpZiAoZGV2LT5kZXYucGFyZW50KQorCQlzdHJuY3B5KGluZm8tPmJ1c19pbmZvLCBkZXZfbmFtZShkZXYtPmRldi5wYXJlbnQpLAorCQkJc2l6ZW9mKGluZm8tPmJ1c19pbmZvKSAtIDEpOworCWVsc2UKKwkJc25wcmludGYoaW5mby0+YnVzX2luZm8sIHNpemVvZihpbmZvLT5idXNfaW5mbykgLSAxLAorCQkJICJQQ01DSUEgJXAiLCBwcml2LT5ody5pb2Jhc2UpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG9yaW5vY29fZXRodG9vbF9vcHMgPSB7CisJLmdldF9kcnZpbmZvID0gb3Jpbm9jb19nZXRfZHJ2aW5mbywKKwkuZ2V0X2xpbmsgPSBldGh0b29sX29wX2dldF9saW5rLAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogTW9kdWxlIGluaXRpYWxpemF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBDYW4ndCBiZSBkZWNsYXJlZCAiY29uc3QiIG9yIHRoZSB3aG9sZSBfX2luaXRkYXRhIHNlY3Rpb24gd2lsbAorICogYmVjb21lIGNvbnN0ICovCitzdGF0aWMgY2hhciB2ZXJzaW9uW10gX19pbml0ZGF0YSA9IERSSVZFUl9OQU1FICIgIiBEUklWRVJfVkVSU0lPTgorCSIgKERhdmlkIEdpYnNvbiA8aGVybWVzQGdpYnNvbi5kcm9wYmVhci5pZC5hdT4sICIKKwkiUGF2ZWwgUm9za2luIDxwcm9za2lAZ251Lm9yZz4sIGV0IGFsKSI7CisKK3N0YXRpYyBpbnQgX19pbml0IGluaXRfb3Jpbm9jbyh2b2lkKQoreworCXByaW50ayhLRVJOX0RFQlVHICIlc1xuIiwgdmVyc2lvbik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBleGl0X29yaW5vY28odm9pZCkKK3sKK30KKworbW9kdWxlX2luaXQoaW5pdF9vcmlub2NvKTsKK21vZHVsZV9leGl0KGV4aXRfb3Jpbm9jbyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL21haW4uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vbWFpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmMmJhZTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL21haW4uaApAQCAtMCwwICsxLDYzIEBACisvKiBFeHBvcnRzIGZyb20gbWFpbiB0byBoZWxwZXIgbW9kdWxlcworICoKKyAqIFNlZSBjb3B5cmlnaHQgbm90aWNlIGluIG1haW4uYworICovCisjaWZuZGVmIF9PUklOT0NPX01BSU5fSF8KKyNkZWZpbmUgX09SSU5PQ09fTUFJTl9IXworCisjaW5jbHVkZSA8bGludXgvaWVlZTgwMjExLmg+CisjaW5jbHVkZSAib3Jpbm9jby5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBDb21waWxlIHRpbWUgY29uZmlndXJhdGlvbiBhbmQgY29tcGF0aWJpbGl0eSBzdHVmZiAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFdlIGRvIHRoaXMgdGhpcyB3YXkgdG8gYXZvaWQgaWZkZWZzIGluIHRoZSBhY3R1YWwgY29kZSAqLworI2lmZGVmIFdJUkVMRVNTX1NQWQorI2RlZmluZSBTUFlfTlVNQkVSKHByaXYpCShwcml2LT5zcHlfZGF0YS5zcHlfbnVtYmVyKQorI2Vsc2UKKyNkZWZpbmUgU1BZX05VTUJFUihwcml2KQkwCisjZW5kaWYgLyogV0lSRUxFU1NfU1BZICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogRXhwb3J0IG1vZHVsZSBwYXJhbWV0ZXIgKi8KK2V4dGVybiBpbnQgZm9yY2VfbW9uaXRvcjsKKworLyogRm9yd2FyZCBkZWNsYXJhdGlvbnMgKi8KK3N0cnVjdCBuZXRfZGV2aWNlOworc3RydWN0IHdvcmtfc3RydWN0OworCit2b2lkIHNldF9wb3J0X3R5cGUoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdik7CitpbnQgX19vcmlub2NvX3Byb2dyYW1fcmlkcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3ZvaWQgb3Jpbm9jb19yZXNldChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOworCisKKy8qIEluZm9ybWF0aW9uIGVsZW1lbnQgaGVscGVycyAtIGZpbmQgYSBob21lIGZvciB0aGVzZS4uLiAqLworc3RhdGljIGlubGluZSB1OCAqb3Jpbm9jb19nZXRfaWUodTggKmRhdGEsIHNpemVfdCBsZW4sCisJCQkJIGVudW0gaWVlZTgwMjExX2VpZCBlaWQpCit7CisJdTggKnAgPSBkYXRhOworCXdoaWxlICgocCArIDIpIDwgKGRhdGEgKyBsZW4pKSB7CisJCWlmIChwWzBdID09IGVpZCkKKwkJCXJldHVybiBwOworCQlwICs9IHBbMV0gKyAyOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworI2RlZmluZSBXUEFfT1VJX1RZUEUJIlx4MDBceDUwXHhGMlx4MDEiCisjZGVmaW5lIFdQQV9TRUxFQ1RPUl9MRU4gNAorc3RhdGljIGlubGluZSB1OCAqb3Jpbm9jb19nZXRfd3BhX2llKHU4ICpkYXRhLCBzaXplX3QgbGVuKQoreworCXU4ICpwID0gZGF0YTsKKwl3aGlsZSAoKHAgKyAyICsgV1BBX1NFTEVDVE9SX0xFTikgPCAoZGF0YSArIGxlbikpIHsKKwkJaWYgKChwWzBdID09IFdMQU5fRUlEX0dFTkVSSUMpICYmCisJCSAgICAobWVtY21wKCZwWzJdLCBXUEFfT1VJX1RZUEUsIFdQQV9TRUxFQ1RPUl9MRU4pID09IDApKQorCQkJcmV0dXJuIHA7CisJCXAgKz0gcFsxXSArIDI7CisJfQorCXJldHVybiBOVUxMOworfQorCisjZW5kaWYgLyogX09SSU5PQ09fTUFJTl9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9taWMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vbWljLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzAzZTdmNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vbWljLmMKQEAgLTAsMCArMSw3OSBAQAorLyogT3Jpbm9jbyBNSUMgaGVscGVycworICoKKyAqIFNlZSBjb3B5cmlnaHQgbm90aWNlIGluIG1haW4uYworICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgorCisjaW5jbHVkZSAib3Jpbm9jby5oIgorI2luY2x1ZGUgIm1pYy5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBNaWNoYWVsIE1JQyBjcnlwdG8gc2V0dXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgb3Jpbm9jb19taWNfaW5pdChzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KQoreworCXByaXYtPnR4X3RmbV9taWMgPSBjcnlwdG9fYWxsb2NfaGFzaCgibWljaGFlbF9taWMiLCAwLCAwKTsKKwlpZiAoSVNfRVJSKHByaXYtPnR4X3RmbV9taWMpKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJvcmlub2NvX21pY19pbml0OiBjb3VsZCBub3QgYWxsb2NhdGUgIgorCQkgICAgICAgImNyeXB0byBBUEkgbWljaGFlbF9taWNcbiIpOworCQlwcml2LT50eF90Zm1fbWljID0gTlVMTDsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcHJpdi0+cnhfdGZtX21pYyA9IGNyeXB0b19hbGxvY19oYXNoKCJtaWNoYWVsX21pYyIsIDAsIDApOworCWlmIChJU19FUlIocHJpdi0+cnhfdGZtX21pYykpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIm9yaW5vY29fbWljX2luaXQ6IGNvdWxkIG5vdCBhbGxvY2F0ZSAiCisJCSAgICAgICAiY3J5cHRvIEFQSSBtaWNoYWVsX21pY1xuIik7CisJCXByaXYtPnJ4X3RmbV9taWMgPSBOVUxMOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBvcmlub2NvX21pY19mcmVlKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCit7CisJaWYgKHByaXYtPnR4X3RmbV9taWMpCisJCWNyeXB0b19mcmVlX2hhc2gocHJpdi0+dHhfdGZtX21pYyk7CisJaWYgKHByaXYtPnJ4X3RmbV9taWMpCisJCWNyeXB0b19mcmVlX2hhc2gocHJpdi0+cnhfdGZtX21pYyk7Cit9CisKK2ludCBvcmlub2NvX21pYyhzdHJ1Y3QgY3J5cHRvX2hhc2ggKnRmbV9taWNoYWVsLCB1OCAqa2V5LAorCQl1OCAqZGEsIHU4ICpzYSwgdTggcHJpb3JpdHksCisJCXU4ICpkYXRhLCBzaXplX3QgZGF0YV9sZW4sIHU4ICptaWMpCit7CisJc3RydWN0IGhhc2hfZGVzYyBkZXNjOworCXN0cnVjdCBzY2F0dGVybGlzdCBzZ1syXTsKKwl1OCBoZHJbRVRIX0hMRU4gKyAyXTsgLyogc2l6ZSBvZiBoZWFkZXIgKyBwYWRkaW5nICovCisKKwlpZiAodGZtX21pY2hhZWwgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJvcmlub2NvX21pYzogdGZtX21pY2hhZWwgPT0gTlVMTFxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKiBDb3B5IGhlYWRlciBpbnRvIGJ1ZmZlci4gV2UgbmVlZCB0aGUgcGFkZGluZyBvbiB0aGUgZW5kIHplcm9lZCAqLworCW1lbWNweSgmaGRyWzBdLCBkYSwgRVRIX0FMRU4pOworCW1lbWNweSgmaGRyW0VUSF9BTEVOXSwgc2EsIEVUSF9BTEVOKTsKKwloZHJbRVRIX0FMRU4qMl0gPSBwcmlvcml0eTsKKwloZHJbRVRIX0FMRU4qMisxXSA9IDA7CisJaGRyW0VUSF9BTEVOKjIrMl0gPSAwOworCWhkcltFVEhfQUxFTioyKzNdID0gMDsKKworCS8qIFVzZSBzY2F0dGVyIGdhdGhlciB0byBNSUMgaGVhZGVyIGFuZCBkYXRhIGluIG9uZSBnbyAqLworCXNnX2luaXRfdGFibGUoc2csIDIpOworCXNnX3NldF9idWYoJnNnWzBdLCBoZHIsIHNpemVvZihoZHIpKTsKKwlzZ19zZXRfYnVmKCZzZ1sxXSwgZGF0YSwgZGF0YV9sZW4pOworCisJaWYgKGNyeXB0b19oYXNoX3NldGtleSh0Zm1fbWljaGFlbCwga2V5LCBNSUNfS0VZTEVOKSkKKwkJcmV0dXJuIC0xOworCisJZGVzYy50Zm0gPSB0Zm1fbWljaGFlbDsKKwlkZXNjLmZsYWdzID0gMDsKKwlyZXR1cm4gY3J5cHRvX2hhc2hfZGlnZXN0KCZkZXNjLCBzZywgZGF0YV9sZW4gKyBzaXplb2YoaGRyKSwKKwkJCQkgIG1pYyk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL21pYy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9taWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGQwNWJjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9taWMuaApAQCAtMCwwICsxLDIyIEBACisvKiBPcmlub2NvIE1JQyBoZWxwZXJzCisgKgorICogU2VlIGNvcHlyaWdodCBub3RpY2UgaW4gbWFpbi5jCisgKi8KKyNpZm5kZWYgX09SSU5PQ09fTUlDX0hfCisjZGVmaW5lIF9PUklOT0NPX01JQ19IXworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2RlZmluZSBNSUNIQUVMX01JQ19MRU4gOAorCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9ucyAqLworc3RydWN0IG9yaW5vY29fcHJpdmF0ZTsKK3N0cnVjdCBjcnlwdG9faGFzaDsKKworaW50IG9yaW5vY29fbWljX2luaXQoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdik7Cit2b2lkIG9yaW5vY29fbWljX2ZyZWUoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdik7CitpbnQgb3Jpbm9jb19taWMoc3RydWN0IGNyeXB0b19oYXNoICp0Zm1fbWljaGFlbCwgdTggKmtleSwKKwkJdTggKmRhLCB1OCAqc2EsIHU4IHByaW9yaXR5LAorCQl1OCAqZGF0YSwgc2l6ZV90IGRhdGFfbGVuLCB1OCAqbWljKTsKKworI2VuZGlmIC8qIE9SSU5PQ09fTUlDX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jby5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2N2QxYTkuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2MTU5ICswLDAgQEAKLS8qIG9yaW5vY28uYyAtIChmb3JtZXJseSBrbm93biBhcyBkbGR3ZF9jcy5jIGFuZCBvcmlub2NvX2NzLmMpCi0gKgotICogQSBkcml2ZXIgZm9yIEhlcm1lcyBvciBQcmlzbSAyIGNoaXBzZXQgYmFzZWQgUENNQ0lBIHdpcmVsZXNzCi0gKiBhZGFwdG9ycywgd2l0aCBMdWNlbnQvQWdlcmUsIEludGVyc2lsIG9yIFN5bWJvbCBmaXJtd2FyZS4KLSAqCi0gKiBDdXJyZW50IG1haW50YWluZXJzIChhcyBvZiAyOSBTZXB0ZW1iZXIgMjAwMykgYXJlOgotICogCVBhdmVsIFJvc2tpbiA8cHJvc2tpIEFUIGdudS5vcmc+Ci0gKiBhbmQJRGF2aWQgR2lic29uIDxoZXJtZXMgQVQgZ2lic29uLmRyb3BiZWFyLmlkLmF1PgotICoKLSAqIChDKSBDb3B5cmlnaHQgRGF2aWQgR2lic29uLCBJQk0gQ29ycG9yYXRpb24gMjAwMS0yMDAzLgotICogQ29weXJpZ2h0IChDKSAyMDAwIERhdmlkIEdpYnNvbiwgTGludXhjYXJlIEF1c3RyYWxpYS4KLSAqCVdpdGggc29tZSBoZWxwIGZyb20gOgotICogQ29weXJpZ2h0IChDKSAyMDAxIEplYW4gVG91cnJpbGhlcywgSFAgTGFicwotICogQ29weXJpZ2h0IChDKSAyMDAxIEJlbmphbWluIEhlcnJlbnNjaG1pZHQKLSAqCi0gKiBCYXNlZCBvbiBkdW1teV9jcy5jIDEuMjcgMjAwMC8wNi8xMiAyMToyNzoyNQotICoKLSAqIFBvcnRpb25zIGJhc2VkIG9uIHd2bGFuX2NzLmMgMS4wLjYsIENvcHlyaWdodCBBbmRyZWFzIE5ldWhhdXMgPGFuZHkKLSAqIEFUIGZhc3RhLmZoLWRvcnRtdW5kLmRlPgotICogICAgICBodHRwOi8vd3d3LnN0dWQuZmgtZG9ydG11bmQuZGUvfmFuZHkvd3ZsYW4vCi0gKgotICogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZQotICogVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbgotICogY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UKLSAqIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLwotICoKLSAqIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIKLSAqIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUKLSAqIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICoKLSAqIFRoZSBpbml0aWFsIGRldmVsb3BlciBvZiB0aGUgb3JpZ2luYWwgY29kZSBpcyBEYXZpZCBBLiBIaW5kcwotICogPGRhaGluZHMgQVQgdXNlcnMuc291cmNlZm9yZ2UubmV0Pi4gIFBvcnRpb25zIGNyZWF0ZWQgYnkgRGF2aWQKLSAqIEEuIEhpbmRzIGFyZSBDb3B5cmlnaHQgKEMpIDE5OTkgRGF2aWQgQS4gSGluZHMuICBBbGwgUmlnaHRzCi0gKiBSZXNlcnZlZC4KLSAqCi0gKiBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZQotICogdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiAodGhlICJHUEwiKSwgaW4KLSAqIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRoZQotICogYWJvdmUuICBJZiB5b3Ugd2lzaCB0byBhbGxvdyB0aGUgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUKLSAqIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHUEwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8gdXNlIHlvdXIKLSAqIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBNUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24gYnkKLSAqIGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlIGFuZAotICogb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMLiAgSWYgeW91IGRvIG5vdCBkZWxldGUgdGhlCi0gKiBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUKLSAqIHVuZGVyIGVpdGhlciB0aGUgTVBMIG9yIHRoZSBHUEwuICAqLwotCi0vKgotICogVE9ETwotICoJbyBIYW5kbGUgZGUtZW5jYXBzdWxhdGlvbiB3aXRoaW4gbmV0d29yayBsYXllciwgcHJvdmlkZSA4MDIuMTEKLSAqCSAgaGVhZGVycyAocGF0Y2ggZnJvbSBUaG9tYXMgJ0RlbnQnIE1pcmxhY2hlcikKLSAqCW8gRml4IHBvc3NpYmxlIHJhY2VzIGluIFNQWSBoYW5kbGluZy4KLSAqCW8gRGlzY29ubmVjdCB3aXJlbGVzcyBleHRlbnNpb25zIGZyb20gZnVuZGFtZW50YWwgY29uZmlndXJhdGlvbi4KLSAqCW8gKG1heWJlKSBTb2Z0d2FyZSBXRVAgc3VwcG9ydCAocGF0Y2ggZnJvbSBTdGFubyBNZWR1bmEpLgotICoJbyAobWF5YmUpIFVzZSBtdWx0aXBsZSBUeCBidWZmZXJzIC0gZHJpdmVyIGhhbmRsaW5nIHF1ZXVlCi0gKgkgIHJhdGhlciB0aGFuIGZpcm13YXJlLgotICovCi0KLS8qIExvY2tpbmcgYW5kIHN5bmNocm9uaXphdGlvbjoKLSAqCi0gKiBUaGUgYmFzaWMgcHJpbmNpcGxlIGlzIHRoYXQgZXZlcnl0aGluZyBpcyBzZXJpYWxpemVkIHRocm91Z2ggYQotICogc2luZ2xlIHNwaW5sb2NrLCBwcml2LT5sb2NrLiAgVGhlIGxvY2sgaXMgdXNlZCBpbiB1c2VyLCBiaCBhbmQgaXJxCi0gKiBjb250ZXh0LCBzbyB3aGVuIHRha2VuIG91dHNpZGUgaGFyZGlycSBjb250ZXh0IGl0IHNob3VsZCBhbHdheXMgYmUKLSAqIHRha2VuIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZC4gIFRoZSBsb2NrIHByb3RlY3RzIGJvdGggdGhlCi0gKiBoYXJkd2FyZSBhbmQgdGhlIHN0cnVjdCBvcmlub2NvX3ByaXZhdGUuCi0gKgotICogQW5vdGhlciBmbGFnLCBwcml2LT5od191bmF2YWlsYWJsZSBpbmRpY2F0ZXMgdGhhdCB0aGUgaGFyZHdhcmUgaXMKLSAqIHVuYXZhaWxhYmxlIGZvciBhbiBleHRlbmRlZCBwZXJpb2Qgb2YgdGltZSAoZS5nLiBzdXNwZW5kZWQsIG9yIGluCi0gKiB0aGUgbWlkZGxlIG9mIGEgaGFyZCByZXNldCkuICBUaGlzIGZsYWcgaXMgcHJvdGVjdGVkIGJ5IHRoZQotICogc3BpbmxvY2suICBBbGwgY29kZSB3aGljaCB0b3VjaGVzIHRoZSBoYXJkd2FyZSBzaG91bGQgY2hlY2sgdGhlCi0gKiBmbGFnIGFmdGVyIHRha2luZyB0aGUgbG9jaywgYW5kIGlmIGl0IGlzIHNldCwgZ2l2ZSB1cCBvbiB3aGF0ZXZlcgotICogdGhleSBhcmUgZG9pbmcgYW5kIGRyb3AgdGhlIGxvY2sgYWdhaW4uICBUaGUgb3Jpbm9jb19sb2NrKCkKLSAqIGZ1bmN0aW9uIGhhbmRsZXMgdGhpcyAoaXQgdW5sb2NrcyBhbmQgcmV0dXJucyAtRUJVU1kgaWYKLSAqIGh3X3VuYXZhaWxhYmxlIGlzIG5vbi16ZXJvKS4KLSAqLwotCi0jZGVmaW5lIERSSVZFUl9OQU1FICJvcmlub2NvIgotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+Ci0jaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KLSNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+Ci0jaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+Ci0jaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KLSNpbmNsdWRlIDxsaW51eC9pZWVlODAyMTEuaD4KLSNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgotCi0jaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KLQotI2luY2x1ZGUgImhlcm1lc19yaWQuaCIKLSNpbmNsdWRlICJoZXJtZXNfZGxkLmgiCi0jaW5jbHVkZSAib3Jpbm9jby5oIgotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBNb2R1bGUgaW5mb3JtYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLU1PRFVMRV9BVVRIT1IoIlBhdmVsIFJvc2tpbiA8cHJvc2tpQGdudS5vcmc+ICYgRGF2aWQgR2lic29uIDxoZXJtZXNAZ2lic29uLmRyb3BiZWFyLmlkLmF1PiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIEx1Y2VudCBPcmlub2NvLCBQcmlzbSBJSSBiYXNlZCBhbmQgc2ltaWxhciB3aXJlbGVzcyBjYXJkcyIpOwotTU9EVUxFX0xJQ0VOU0UoIkR1YWwgTVBML0dQTCIpOwotCi0vKiBMZXZlbCBvZiBkZWJ1Z2dpbmcuIFVzZWQgaW4gdGhlIG1hY3JvcyBpbiBvcmlub2NvLmggKi8KLSNpZmRlZiBPUklOT0NPX0RFQlVHCi1pbnQgb3Jpbm9jb19kZWJ1ZyA9IE9SSU5PQ09fREVCVUc7Ci1tb2R1bGVfcGFyYW0ob3Jpbm9jb19kZWJ1ZywgaW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0Mob3Jpbm9jb19kZWJ1ZywgIkRlYnVnIGxldmVsIik7Ci1FWFBPUlRfU1lNQk9MKG9yaW5vY29fZGVidWcpOwotI2VuZGlmCi0KLXN0YXRpYyBpbnQgc3VwcHJlc3NfbGlua3N0YXR1czsgLyogPSAwICovCi1tb2R1bGVfcGFyYW0oc3VwcHJlc3NfbGlua3N0YXR1cywgYm9vbCwgMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHN1cHByZXNzX2xpbmtzdGF0dXMsICJEb24ndCBsb2cgbGluayBzdGF0dXMgY2hhbmdlcyIpOwotc3RhdGljIGludCBpZ25vcmVfZGlzY29ubmVjdDsgLyogPSAwICovCi1tb2R1bGVfcGFyYW0oaWdub3JlX2Rpc2Nvbm5lY3QsIGludCwgMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGlnbm9yZV9kaXNjb25uZWN0LCAiRG9uJ3QgcmVwb3J0IGxvc3QgbGluayB0byB0aGUgbmV0d29yayBsYXllciIpOwotCi1zdGF0aWMgaW50IGZvcmNlX21vbml0b3I7IC8qID0gMCAqLwotbW9kdWxlX3BhcmFtKGZvcmNlX21vbml0b3IsIGludCwgMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGZvcmNlX21vbml0b3IsICJBbGxvdyBtb25pdG9yIG1vZGUgZm9yIGFsbCBmaXJtd2FyZSB2ZXJzaW9ucyIpOwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBDb21waWxlIHRpbWUgY29uZmlndXJhdGlvbiBhbmQgY29tcGF0aWJpbGl0eSBzdHVmZiAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIFdlIGRvIHRoaXMgdGhpcyB3YXkgdG8gYXZvaWQgaWZkZWZzIGluIHRoZSBhY3R1YWwgY29kZSAqLwotI2lmZGVmIFdJUkVMRVNTX1NQWQotI2RlZmluZSBTUFlfTlVNQkVSKHByaXYpCShwcml2LT5zcHlfZGF0YS5zcHlfbnVtYmVyKQotI2Vsc2UKLSNkZWZpbmUgU1BZX05VTUJFUihwcml2KQkwCi0jZW5kaWYgLyogV0lSRUxFU1NfU1BZICovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIEludGVybmFsIGNvbnN0YW50cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogODAyLjIgTExDL1NOQVAgaGVhZGVyIHVzZWQgZm9yIEV0aGVybmV0IGVuY2Fwc3VsYXRpb24gb3ZlciA4MDIuMTEgKi8KLXN0YXRpYyBjb25zdCB1OCBlbmNhcHNfaGRyW10gPSB7MHhhYSwgMHhhYSwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMH07Ci0jZGVmaW5lIEVOQ0FQU19PVkVSSEVBRAkJKHNpemVvZihlbmNhcHNfaGRyKSArIDIpCi0KLSNkZWZpbmUgT1JJTk9DT19NSU5fTVRVCQkyNTYKLSNkZWZpbmUgT1JJTk9DT19NQVhfTVRVCQkoSUVFRTgwMjExX01BWF9EQVRBX0xFTiAtIEVOQ0FQU19PVkVSSEVBRCkKLQotI2RlZmluZSBTWU1CT0xfTUFYX1ZFUl9MRU4JKDE0KQotI2RlZmluZSBVU0VSX0JBUAkJMAotI2RlZmluZSBJUlFfQkFQCQkJMQotI2RlZmluZSBNQVhfSVJRTE9PUFNfUEVSX0lSUQkxMAotI2RlZmluZSBNQVhfSVJRTE9PUFNfUEVSX0pJRkZZCSgyMDAwMC9IWikgLyogQmFzZWQgb24gYSBndWVzdGltYXRlIG9mCi0JCQkJCSAgICAqIGhvdyBtYW55IGV2ZW50cyB0aGUKLQkJCQkJICAgICogZGV2aWNlIGNvdWxkCi0JCQkJCSAgICAqIGxlZ2l0aW1hdGVseSBnZW5lcmF0ZSAqLwotI2RlZmluZSBTTUFMTF9LRVlfU0laRQkJNQotI2RlZmluZSBMQVJHRV9LRVlfU0laRQkJMTMKLSNkZWZpbmUgVFhfTklDQlVGX1NJWkVfQlVHCTE1ODUJCS8qIEJ1ZyBpbiBTeW1ib2wgZmlybXdhcmUgKi8KLQotI2RlZmluZSBEVU1NWV9GSUQJCTB4RkZGRgotCi0vKiNkZWZpbmUgTUFYX01VTFRJQ0FTVChwcml2KQkocHJpdi0+ZmlybXdhcmVfdHlwZSA9PSBGSVJNV0FSRV9UWVBFX0FHRVJFID8gXAotICBIRVJNRVNfTUFYX01VTFRJQ0FTVCA6IDApKi8KLSNkZWZpbmUgTUFYX01VTFRJQ0FTVChwcml2KQkoSEVSTUVTX01BWF9NVUxUSUNBU1QpCi0KLSNkZWZpbmUgT1JJTk9DT19JTlRFTgkgCShIRVJNRVNfRVZfUlggfCBIRVJNRVNfRVZfQUxMT0MgXAotCQkJCSB8IEhFUk1FU19FVl9UWCB8IEhFUk1FU19FVl9UWEVYQyBcCi0JCQkJIHwgSEVSTUVTX0VWX1dURVJSIHwgSEVSTUVTX0VWX0lORk8gXAotCQkJCSB8IEhFUk1FU19FVl9JTkZEUk9QICkKLQotI2RlZmluZSBNQVhfUklEX0xFTiAxMDI0Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYgb3Jpbm9jb19oYW5kbGVyX2RlZjsKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgb3Jpbm9jb19ldGh0b29sX29wczsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogRGF0YSB0YWJsZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBUaGUgZnJlcXVlbmN5IG9mIGVhY2ggY2hhbm5lbCBpbiBNSHogKi8KLXN0YXRpYyBjb25zdCBsb25nIGNoYW5uZWxfZnJlcXVlbmN5W10gPSB7Ci0JMjQxMiwgMjQxNywgMjQyMiwgMjQyNywgMjQzMiwgMjQzNywgMjQ0MiwKLQkyNDQ3LCAyNDUyLCAyNDU3LCAyNDYyLCAyNDY3LCAyNDcyLCAyNDg0Ci19OwotI2RlZmluZSBOVU1fQ0hBTk5FTFMgQVJSQVlfU0laRShjaGFubmVsX2ZyZXF1ZW5jeSkKLQotLyogVGhpcyB0YWJsZXMgZ2l2ZXMgdGhlIGFjdHVhbCBtZWFuaW5ncyBvZiB0aGUgYml0cmF0ZSBJRHMgcmV0dXJuZWQKLSAqIGJ5IHRoZSBmaXJtd2FyZS4gKi8KLXN0YXRpYyBzdHJ1Y3QgewotCWludCBiaXRyYXRlOyAvKiBpbiAxMDBzIG9mIGtpbG9iaXRzICovCi0JaW50IGF1dG9tYXRpYzsKLQl1MTYgYWdlcmVfdHhyYXRlY3RybDsKLQl1MTYgaW50ZXJzaWxfdHhyYXRlY3RybDsKLX0gYml0cmF0ZV90YWJsZVtdID0gewotCXsxMTAsIDEsICAzLCAxNX0sIC8qIEVudHJ5IDAgaXMgdGhlIGRlZmF1bHQgKi8KLQl7MTAsICAwLCAgMSwgIDF9LAotCXsxMCwgIDEsICAxLCAgMX0sCi0JezIwLCAgMCwgIDIsICAyfSwKLQl7MjAsICAxLCAgNiwgIDN9LAotCXs1NSwgIDAsICA0LCAgNH0sCi0JezU1LCAgMSwgIDcsICA3fSwKLQl7MTEwLCAwLCAgNSwgIDh9LAotfTsKLSNkZWZpbmUgQklUUkFURV9UQUJMRV9TSVpFIEFSUkFZX1NJWkUoYml0cmF0ZV90YWJsZSkKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogRGF0YSB0eXBlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBCZWdpbm5pbmcgb2YgdGhlIFR4IGRlc2NyaXB0b3IsIHVzZWQgaW4gVHhFeGMgaGFuZGxpbmcgKi8KLXN0cnVjdCBoZXJtZXNfdHhleGNfZGF0YSB7Ci0Jc3RydWN0IGhlcm1lc190eF9kZXNjcmlwdG9yIGRlc2M7Ci0JX19sZTE2IGZyYW1lX2N0bDsKLQlfX2xlMTYgZHVyYXRpb25faWQ7Ci0JdTggYWRkcjFbRVRIX0FMRU5dOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qIFJ4IGZyYW1lIGhlYWRlciBleGNlcHQgY29tcGF0aWJpbGl0eSA4MDIuMyBoZWFkZXIgKi8KLXN0cnVjdCBoZXJtZXNfcnhfZGVzY3JpcHRvciB7Ci0JLyogQ29udHJvbCAqLwotCV9fbGUxNiBzdGF0dXM7Ci0JX19sZTMyIHRpbWU7Ci0JdTggc2lsZW5jZTsKLQl1OCBzaWduYWw7Ci0JdTggcmF0ZTsKLQl1OCByeGZsb3c7Ci0JX19sZTMyIHJlc2VydmVkOwotCi0JLyogODAyLjExIGhlYWRlciAqLwotCV9fbGUxNiBmcmFtZV9jdGw7Ci0JX19sZTE2IGR1cmF0aW9uX2lkOwotCXU4IGFkZHIxW0VUSF9BTEVOXTsKLQl1OCBhZGRyMltFVEhfQUxFTl07Ci0JdTggYWRkcjNbRVRIX0FMRU5dOwotCV9fbGUxNiBzZXFfY3RsOwotCXU4IGFkZHI0W0VUSF9BTEVOXTsKLQotCS8qIERhdGEgbGVuZ3RoICovCi0JX19sZTE2IGRhdGFfbGVuOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIEZ1bmN0aW9uIHByb3RvdHlwZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIGludCBfX29yaW5vY29fcHJvZ3JhbV9yaWRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIHZvaWQgX19vcmlub2NvX3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogTWljaGFlbCBNSUMgY3J5cHRvIHNldHVwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2RlZmluZSBNSUNIQUVMX01JQ19MRU4gOAotc3RhdGljIGludCBvcmlub2NvX21pY19pbml0KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCi17Ci0JcHJpdi0+dHhfdGZtX21pYyA9IGNyeXB0b19hbGxvY19oYXNoKCJtaWNoYWVsX21pYyIsIDAsIDApOwotCWlmIChJU19FUlIocHJpdi0+dHhfdGZtX21pYykpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIm9yaW5vY29fbWljX2luaXQ6IGNvdWxkIG5vdCBhbGxvY2F0ZSAiCi0JCSAgICAgICAiY3J5cHRvIEFQSSBtaWNoYWVsX21pY1xuIik7Ci0JCXByaXYtPnR4X3RmbV9taWMgPSBOVUxMOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlwcml2LT5yeF90Zm1fbWljID0gY3J5cHRvX2FsbG9jX2hhc2goIm1pY2hhZWxfbWljIiwgMCwgMCk7Ci0JaWYgKElTX0VSUihwcml2LT5yeF90Zm1fbWljKSkgewotCQlwcmludGsoS0VSTl9ERUJVRyAib3Jpbm9jb19taWNfaW5pdDogY291bGQgbm90IGFsbG9jYXRlICIKLQkJICAgICAgICJjcnlwdG8gQVBJIG1pY2hhZWxfbWljXG4iKTsKLQkJcHJpdi0+cnhfdGZtX21pYyA9IE5VTEw7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBvcmlub2NvX21pY19mcmVlKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCi17Ci0JaWYgKHByaXYtPnR4X3RmbV9taWMpCi0JCWNyeXB0b19mcmVlX2hhc2gocHJpdi0+dHhfdGZtX21pYyk7Ci0JaWYgKHByaXYtPnJ4X3RmbV9taWMpCi0JCWNyeXB0b19mcmVlX2hhc2gocHJpdi0+cnhfdGZtX21pYyk7Ci19Ci0KLXN0YXRpYyBpbnQgbWljaGFlbF9taWMoc3RydWN0IGNyeXB0b19oYXNoICp0Zm1fbWljaGFlbCwgdTggKmtleSwKLQkJICAgICAgIHU4ICpkYSwgdTggKnNhLCB1OCBwcmlvcml0eSwKLQkJICAgICAgIHU4ICpkYXRhLCBzaXplX3QgZGF0YV9sZW4sIHU4ICptaWMpCi17Ci0Jc3RydWN0IGhhc2hfZGVzYyBkZXNjOwotCXN0cnVjdCBzY2F0dGVybGlzdCBzZ1syXTsKLQl1OCBoZHJbRVRIX0hMRU4gKyAyXTsgLyogc2l6ZSBvZiBoZWFkZXIgKyBwYWRkaW5nICovCi0KLQlpZiAodGZtX21pY2hhZWwgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJtaWNoYWVsX21pYzogdGZtX21pY2hhZWwgPT0gTlVMTFxuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQkvKiBDb3B5IGhlYWRlciBpbnRvIGJ1ZmZlci4gV2UgbmVlZCB0aGUgcGFkZGluZyBvbiB0aGUgZW5kIHplcm9lZCAqLwotCW1lbWNweSgmaGRyWzBdLCBkYSwgRVRIX0FMRU4pOwotCW1lbWNweSgmaGRyW0VUSF9BTEVOXSwgc2EsIEVUSF9BTEVOKTsKLQloZHJbRVRIX0FMRU4qMl0gPSBwcmlvcml0eTsKLQloZHJbRVRIX0FMRU4qMisxXSA9IDA7Ci0JaGRyW0VUSF9BTEVOKjIrMl0gPSAwOwotCWhkcltFVEhfQUxFTioyKzNdID0gMDsKLQotCS8qIFVzZSBzY2F0dGVyIGdhdGhlciB0byBNSUMgaGVhZGVyIGFuZCBkYXRhIGluIG9uZSBnbyAqLwotCXNnX2luaXRfdGFibGUoc2csIDIpOwotCXNnX3NldF9idWYoJnNnWzBdLCBoZHIsIHNpemVvZihoZHIpKTsKLQlzZ19zZXRfYnVmKCZzZ1sxXSwgZGF0YSwgZGF0YV9sZW4pOwotCi0JaWYgKGNyeXB0b19oYXNoX3NldGtleSh0Zm1fbWljaGFlbCwga2V5LCBNSUNfS0VZTEVOKSkKLQkJcmV0dXJuIC0xOwotCi0JZGVzYy50Zm0gPSB0Zm1fbWljaGFlbDsKLQlkZXNjLmZsYWdzID0gMDsKLQlyZXR1cm4gY3J5cHRvX2hhc2hfZGlnZXN0KCZkZXNjLCBzZywgZGF0YV9sZW4gKyBzaXplb2YoaGRyKSwKLQkJCQkgIG1pYyk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIEludGVybmFsIGhlbHBlciBmdW5jdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIGlubGluZSB2b2lkIHNldF9wb3J0X3R5cGUoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKLXsKLQlzd2l0Y2ggKHByaXYtPml3X21vZGUpIHsKLQljYXNlIElXX01PREVfSU5GUkE6Ci0JCXByaXYtPnBvcnRfdHlwZSA9IDE7Ci0JCXByaXYtPmNyZWF0ZWlic3MgPSAwOwotCQlicmVhazsKLQljYXNlIElXX01PREVfQURIT0M6Ci0JCWlmIChwcml2LT5wcmVmZXJfcG9ydDMpIHsKLQkJCXByaXYtPnBvcnRfdHlwZSA9IDM7Ci0JCQlwcml2LT5jcmVhdGVpYnNzID0gMDsKLQkJfSBlbHNlIHsKLQkJCXByaXYtPnBvcnRfdHlwZSA9IHByaXYtPmlic3NfcG9ydDsKLQkJCXByaXYtPmNyZWF0ZWlic3MgPSAxOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgSVdfTU9ERV9NT05JVE9SOgotCQlwcml2LT5wb3J0X3R5cGUgPSAzOwotCQlwcml2LT5jcmVhdGVpYnNzID0gMDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogSW52YWxpZCBwcml2LT5pd19tb2RlIGluIHNldF9wb3J0X3R5cGUoKVxuIiwKLQkJICAgICAgIHByaXYtPm5kZXYtPm5hbWUpOwotCX0KLX0KLQotI2RlZmluZSBPUklOT0NPX01BWF9CU1NfQ09VTlQJNjQKLXN0YXRpYyBpbnQgb3Jpbm9jb19ic3NfZGF0YV9hbGxvY2F0ZShzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KQotewotCWlmIChwcml2LT5ic3NfeGJzc19kYXRhKQotCQlyZXR1cm4gMDsKLQotCWlmIChwcml2LT5oYXNfZXh0X3NjYW4pCi0JCXByaXYtPmJzc194YnNzX2RhdGEgPSBremFsbG9jKE9SSU5PQ09fTUFYX0JTU19DT1VOVCAqCi0JCQkJCSAgICAgIHNpemVvZihzdHJ1Y3QgeGJzc19lbGVtZW50KSwKLQkJCQkJICAgICAgR0ZQX0tFUk5FTCk7Ci0JZWxzZQotCQlwcml2LT5ic3NfeGJzc19kYXRhID0ga3phbGxvYyhPUklOT0NPX01BWF9CU1NfQ09VTlQgKgotCQkJCQkgICAgICBzaXplb2Yoc3RydWN0IGJzc19lbGVtZW50KSwKLQkJCQkJICAgICAgR0ZQX0tFUk5FTCk7Ci0KLQlpZiAoIXByaXYtPmJzc194YnNzX2RhdGEpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiT3V0IG9mIG1lbW9yeSBhbGxvY2F0aW5nIGJlYWNvbnMiKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBvcmlub2NvX2Jzc19kYXRhX2ZyZWUoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKLXsKLQlrZnJlZShwcml2LT5ic3NfeGJzc19kYXRhKTsKLQlwcml2LT5ic3NfeGJzc19kYXRhID0gTlVMTDsKLX0KLQotI2RlZmluZSBQUklWX0JTUwkoKHN0cnVjdCBic3NfZWxlbWVudCAqKXByaXYtPmJzc194YnNzX2RhdGEpCi0jZGVmaW5lIFBSSVZfWEJTUwkoKHN0cnVjdCB4YnNzX2VsZW1lbnQgKilwcml2LT5ic3NfeGJzc19kYXRhKQotc3RhdGljIHZvaWQgb3Jpbm9jb19ic3NfZGF0YV9pbml0KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCi17Ci0JaW50IGk7Ci0KLQlJTklUX0xJU1RfSEVBRCgmcHJpdi0+YnNzX2ZyZWVfbGlzdCk7Ci0JSU5JVF9MSVNUX0hFQUQoJnByaXYtPmJzc19saXN0KTsKLQlpZiAocHJpdi0+aGFzX2V4dF9zY2FuKQotCQlmb3IgKGkgPSAwOyBpIDwgT1JJTk9DT19NQVhfQlNTX0NPVU5UOyBpKyspCi0JCQlsaXN0X2FkZF90YWlsKCYoUFJJVl9YQlNTW2ldLmxpc3QpLAotCQkJCSAgICAgICZwcml2LT5ic3NfZnJlZV9saXN0KTsKLQllbHNlCi0JCWZvciAoaSA9IDA7IGkgPCBPUklOT0NPX01BWF9CU1NfQ09VTlQ7IGkrKykKLQkJCWxpc3RfYWRkX3RhaWwoJihQUklWX0JTU1tpXS5saXN0KSwKLQkJCQkgICAgICAmcHJpdi0+YnNzX2ZyZWVfbGlzdCk7Ci0KLX0KLQotc3RhdGljIGlubGluZSB1OCAqb3Jpbm9jb19nZXRfaWUodTggKmRhdGEsIHNpemVfdCBsZW4sCi0JCQkJIGVudW0gaWVlZTgwMjExX2VpZCBlaWQpCi17Ci0JdTggKnAgPSBkYXRhOwotCXdoaWxlICgocCArIDIpIDwgKGRhdGEgKyBsZW4pKSB7Ci0JCWlmIChwWzBdID09IGVpZCkKLQkJCXJldHVybiBwOwotCQlwICs9IHBbMV0gKyAyOwotCX0KLQlyZXR1cm4gTlVMTDsKLX0KLQotI2RlZmluZSBXUEFfT1VJX1RZUEUJIlx4MDBceDUwXHhGMlx4MDEiCi0jZGVmaW5lIFdQQV9TRUxFQ1RPUl9MRU4gNAotc3RhdGljIGlubGluZSB1OCAqb3Jpbm9jb19nZXRfd3BhX2llKHU4ICpkYXRhLCBzaXplX3QgbGVuKQotewotCXU4ICpwID0gZGF0YTsKLQl3aGlsZSAoKHAgKyAyICsgV1BBX1NFTEVDVE9SX0xFTikgPCAoZGF0YSArIGxlbikpIHsKLQkJaWYgKChwWzBdID09IFdMQU5fRUlEX0dFTkVSSUMpICYmCi0JCSAgICAobWVtY21wKCZwWzJdLCBXUEFfT1VJX1RZUEUsIFdQQV9TRUxFQ1RPUl9MRU4pID09IDApKQotCQkJcmV0dXJuIHA7Ci0JCXAgKz0gcFsxXSArIDI7Ci0JfQotCXJldHVybiBOVUxMOwotfQotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIERvd25sb2FkIGZ1bmN0aW9uYWxpdHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RydWN0IGZ3X2luZm8gewotCWNoYXIgKnByaV9mdzsKLQljaGFyICpzdGFfZnc7Ci0JY2hhciAqYXBfZnc7Ci0JdTMyIHBkYV9hZGRyOwotCXUxNiBwZGFfc2l6ZTsKLX07Ci0KLWNvbnN0IHN0YXRpYyBzdHJ1Y3QgZndfaW5mbyBvcmlub2NvX2Z3W10gPSB7Ci0JeyBOVUxMLCAiYWdlcmVfc3RhX2Z3LmJpbiIsICJhZ2VyZV9hcF9mdy5iaW4iLCAweDAwMzkwMDAwLCAxMDAwIH0sCi0JeyBOVUxMLCAicHJpc21fc3RhX2Z3LmJpbiIsICJwcmlzbV9hcF9mdy5iaW4iLCAwLCAxMDI0IH0sCi0JeyAic3ltYm9sX3NwMjR0X3ByaW1fZnciLCAic3ltYm9sX3NwMjR0X3NlY19mdyIsIE5VTEwsIDB4MDAwMDMxMDAsIDUxMiB9Ci19OwotCi0vKiBTdHJ1Y3R1cmUgdXNlZCB0byBhY2Nlc3MgZmllbGRzIGluIEZXCi0gKiBNYWtlIHN1cmUgTEUgZGVjb2RpbmcgbWFjcm9zIGFyZSB1c2VkCi0gKi8KLXN0cnVjdCBvcmlub2NvX2Z3X2hlYWRlciB7Ci0JY2hhciBoZHJfdmVyc1s2XTsgICAgICAgLyogQVNDSUkgc3RyaW5nIGZvciBoZWFkZXIgdmVyc2lvbiAqLwotCV9fbGUxNiBoZWFkZXJzaXplOyAgICAgIC8qIFRvdGFsIGxlbmd0aCBvZiBoZWFkZXIgKi8KLQlfX2xlMzIgZW50cnlfcG9pbnQ7ICAgICAvKiBOSUMgZW50cnkgcG9pbnQgKi8KLQlfX2xlMzIgYmxvY2tzOyAgICAgICAgICAvKiBOdW1iZXIgb2YgYmxvY2tzIHRvIHByb2dyYW0gKi8KLQlfX2xlMzIgYmxvY2tfb2Zmc2V0OyAgICAvKiBPZmZzZXQgb2YgYmxvY2sgZGF0YSBmcm9tIGVvZiBoZWFkZXIgKi8KLQlfX2xlMzIgcGRyX29mZnNldDsgICAgICAvKiBPZmZzZXQgdG8gUERSIGRhdGEgZnJvbSBlb2YgaGVhZGVyICovCi0JX19sZTMyIHByaV9vZmZzZXQ7ICAgICAgLyogT2Zmc2V0IHRvIHByaW1hcnkgcGx1ZyBkYXRhICovCi0JX19sZTMyIGNvbXBhdF9vZmZzZXQ7ICAgLyogT2Zmc2V0IHRvIGNvbXBhdGliaWxpdHkgZGF0YSovCi0JY2hhciBzaWduYXR1cmVbMF07ICAgICAgLyogRlcgc2lnbmF0dXJlIGxlbmd0aCBoZWFkZXJzaXplLTIwICovCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyogRG93bmxvYWQgZWl0aGVyIFNUQSBvciBBUCBmaXJtd2FyZSBpbnRvIHRoZSBjYXJkLiAqLwotc3RhdGljIGludAotb3Jpbm9jb19kbF9maXJtd2FyZShzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LAotCQkgICAgY29uc3Qgc3RydWN0IGZ3X2luZm8gKmZ3LAotCQkgICAgaW50IGFwKQotewotCS8qIFBsdWcgRGF0YSBBcmVhIChQREEpICovCi0JX19sZTE2ICpwZGE7Ci0KLQloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7Ci0JY29uc3Qgc3RydWN0IGZpcm13YXJlICpmd19lbnRyeTsKLQljb25zdCBzdHJ1Y3Qgb3Jpbm9jb19md19oZWFkZXIgKmhkcjsKLQljb25zdCB1bnNpZ25lZCBjaGFyICpmaXJzdF9ibG9jazsKLQljb25zdCB1bnNpZ25lZCBjaGFyICplbmQ7Ci0JY29uc3QgY2hhciAqZmlybXdhcmU7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXYtPm5kZXY7Ci0JaW50IGVyciA9IDA7Ci0KLQlwZGEgPSBremFsbG9jKGZ3LT5wZGFfc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFwZGEpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JaWYgKGFwKQotCQlmaXJtd2FyZSA9IGZ3LT5hcF9mdzsKLQllbHNlCi0JCWZpcm13YXJlID0gZnctPnN0YV9mdzsKLQotCXByaW50ayhLRVJOX0RFQlVHICIlczogQXR0ZW1wdGluZyB0byBkb3dubG9hZCBmaXJtd2FyZSAlc1xuIiwKLQkgICAgICAgZGV2LT5uYW1lLCBmaXJtd2FyZSk7Ci0KLQkvKiBSZWFkIGN1cnJlbnQgcGx1ZyBkYXRhICovCi0JZXJyID0gaGVybWVzX3JlYWRfcGRhKGh3LCBwZGEsIGZ3LT5wZGFfYWRkciwgZnctPnBkYV9zaXplLCAwKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFJlYWQgUERBIHJldHVybmVkICVkXG4iLCBkZXYtPm5hbWUsIGVycik7Ci0JaWYgKGVycikKLQkJZ290byBmcmVlOwotCi0JaWYgKCFwcml2LT5jYWNoZWRfZncpIHsKLQkJZXJyID0gcmVxdWVzdF9maXJtd2FyZSgmZndfZW50cnksIGZpcm13YXJlLCBwcml2LT5kZXYpOwotCi0JCWlmIChlcnIpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCBmaW5kIGZpcm13YXJlICVzXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgZmlybXdhcmUpOwotCQkJZXJyID0gLUVOT0VOVDsKLQkJCWdvdG8gZnJlZTsKLQkJfQotCX0gZWxzZQotCQlmd19lbnRyeSA9IHByaXYtPmNhY2hlZF9mdzsKLQotCWhkciA9IChjb25zdCBzdHJ1Y3Qgb3Jpbm9jb19md19oZWFkZXIgKikgZndfZW50cnktPmRhdGE7Ci0KLQkvKiBFbmFibGUgYXV4IHBvcnQgdG8gYWxsb3cgcHJvZ3JhbW1pbmcgKi8KLQllcnIgPSBoZXJtZXNpX3Byb2dyYW1faW5pdChodywgbGUzMl90b19jcHUoaGRyLT5lbnRyeV9wb2ludCkpOwotCXByaW50ayhLRVJOX0RFQlVHICIlczogUHJvZ3JhbSBpbml0IHJldHVybmVkICVkXG4iLCBkZXYtPm5hbWUsIGVycik7Ci0JaWYgKGVyciAhPSAwKQotCQlnb3RvIGFib3J0OwotCi0JLyogUHJvZ3JhbSBkYXRhICovCi0JZmlyc3RfYmxvY2sgPSAoZndfZW50cnktPmRhdGEgKwotCQkgICAgICAgbGUxNl90b19jcHUoaGRyLT5oZWFkZXJzaXplKSArCi0JCSAgICAgICBsZTMyX3RvX2NwdShoZHItPmJsb2NrX29mZnNldCkpOwotCWVuZCA9IGZ3X2VudHJ5LT5kYXRhICsgZndfZW50cnktPnNpemU7Ci0KLQllcnIgPSBoZXJtZXNfcHJvZ3JhbShodywgZmlyc3RfYmxvY2ssIGVuZCk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBQcm9ncmFtIHJldHVybmVkICVkXG4iLCBkZXYtPm5hbWUsIGVycik7Ci0JaWYgKGVyciAhPSAwKQotCQlnb3RvIGFib3J0OwotCi0JLyogVXBkYXRlIHByb2R1Y3Rpb24gZGF0YSAqLwotCWZpcnN0X2Jsb2NrID0gKGZ3X2VudHJ5LT5kYXRhICsKLQkJICAgICAgIGxlMTZfdG9fY3B1KGhkci0+aGVhZGVyc2l6ZSkgKwotCQkgICAgICAgbGUzMl90b19jcHUoaGRyLT5wZHJfb2Zmc2V0KSk7Ci0KLQllcnIgPSBoZXJtZXNfYXBwbHlfcGRhX3dpdGhfZGVmYXVsdHMoaHcsIGZpcnN0X2Jsb2NrLCBwZGEpOwotCXByaW50ayhLRVJOX0RFQlVHICIlczogQXBwbHkgUERBIHJldHVybmVkICVkXG4iLCBkZXYtPm5hbWUsIGVycik7Ci0JaWYgKGVycikKLQkJZ290byBhYm9ydDsKLQotCS8qIFRlbGwgY2FyZCB3ZSd2ZSBmaW5pc2hlZCAqLwotCWVyciA9IGhlcm1lc2lfcHJvZ3JhbV9lbmQoaHcpOwotCXByaW50ayhLRVJOX0RFQlVHICIlczogUHJvZ3JhbSBlbmQgcmV0dXJuZWQgJWRcbiIsIGRldi0+bmFtZSwgZXJyKTsKLQlpZiAoZXJyICE9IDApCi0JCWdvdG8gYWJvcnQ7Ci0KLQkvKiBDaGVjayBpZiB3ZSdyZSBydW5uaW5nICovCi0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBoZXJtZXNfcHJlc2VudCByZXR1cm5lZCAlZFxuIiwKLQkgICAgICAgZGV2LT5uYW1lLCBoZXJtZXNfcHJlc2VudChodykpOwotCi1hYm9ydDoKLQkvKiBJZiB3ZSByZXF1ZXN0ZWQgdGhlIGZpcm13YXJlLCByZWxlYXNlIGl0LiAqLwotCWlmICghcHJpdi0+Y2FjaGVkX2Z3KQotCQlyZWxlYXNlX2Zpcm13YXJlKGZ3X2VudHJ5KTsKLQotZnJlZToKLQlrZnJlZShwZGEpOwotCXJldHVybiBlcnI7Ci19Ci0KLS8qIEVuZCBtYXJrZXJzICovCi0jZGVmaW5lIFRFWFRfRU5ECTB4MUEJCS8qIEVuZCBvZiB0ZXh0IGhlYWRlciAqLwotCi0vKgotICogUHJvY2VzcyBhIGZpcm13YXJlIGltYWdlIC0gc3RvcCB0aGUgY2FyZCwgbG9hZCB0aGUgZmlybXdhcmUsIHJlc2V0Ci0gKiB0aGUgY2FyZCBhbmQgbWFrZSBzdXJlIGl0IHJlc3BvbmRzLiAgRm9yIHRoZSBzZWNvbmRhcnkgZmlybXdhcmUgdGFrZQotICogY2FyZSBvZiB0aGUgUERBIC0gcmVhZCBpdCBhbmQgdGhlbiB3cml0ZSBpdCBvbiB0b3Agb2YgdGhlIGZpcm13YXJlLgotICovCi1zdGF0aWMgaW50Ci1zeW1ib2xfZGxfaW1hZ2Uoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwgY29uc3Qgc3RydWN0IGZ3X2luZm8gKmZ3LAotCQljb25zdCB1bnNpZ25lZCBjaGFyICppbWFnZSwgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kLAotCQlpbnQgc2Vjb25kYXJ5KQotewotCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKLQlpbnQgcmV0ID0gMDsKLQljb25zdCB1bnNpZ25lZCBjaGFyICpwdHI7Ci0JY29uc3QgdW5zaWduZWQgY2hhciAqZmlyc3RfYmxvY2s7Ci0KLQkvKiBQbHVnIERhdGEgQXJlYSAoUERBKSAqLwotCV9fbGUxNiAqcGRhID0gTlVMTDsKLQotCS8qIEJpbmFyeSBibG9jayBiZWdpbnMgYWZ0ZXIgdGhlIDB4MUEgbWFya2VyICovCi0JcHRyID0gaW1hZ2U7Ci0Jd2hpbGUgKCpwdHIrKyAhPSBURVhUX0VORCk7Ci0JZmlyc3RfYmxvY2sgPSBwdHI7Ci0KLQkvKiBSZWFkIHRoZSBQREEgZnJvbSBFRVBST00gKi8KLQlpZiAoc2Vjb25kYXJ5KSB7Ci0JCXBkYSA9IGt6YWxsb2MoZnctPnBkYV9zaXplLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFwZGEpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQotCQlyZXQgPSBoZXJtZXNfcmVhZF9wZGEoaHcsIHBkYSwgZnctPnBkYV9hZGRyLCBmdy0+cGRhX3NpemUsIDEpOwotCQlpZiAocmV0KQotCQkJZ290byBmcmVlOwotCX0KLQotCS8qIFN0b3AgdGhlIGZpcm13YXJlLCBzbyB0aGF0IGl0IGNhbiBiZSBzYWZlbHkgcmV3cml0dGVuICovCi0JaWYgKHByaXYtPnN0b3BfZncpIHsKLQkJcmV0ID0gcHJpdi0+c3RvcF9mdyhwcml2LCAxKTsKLQkJaWYgKHJldCkKLQkJCWdvdG8gZnJlZTsKLQl9Ci0KLQkvKiBQcm9ncmFtIHRoZSBhZGFwdGVyIHdpdGggbmV3IGZpcm13YXJlICovCi0JcmV0ID0gaGVybWVzX3Byb2dyYW0oaHcsIGZpcnN0X2Jsb2NrLCBlbmQpOwotCWlmIChyZXQpCi0JCWdvdG8gZnJlZTsKLQotCS8qIFdyaXRlIHRoZSBQREEgdG8gdGhlIGFkYXB0ZXIgKi8KLQlpZiAoc2Vjb25kYXJ5KSB7Ci0JCXNpemVfdCBsZW4gPSBoZXJtZXNfYmxvY2tzX2xlbmd0aChmaXJzdF9ibG9jayk7Ci0JCXB0ciA9IGZpcnN0X2Jsb2NrICsgbGVuOwotCQlyZXQgPSBoZXJtZXNfYXBwbHlfcGRhKGh3LCBwdHIsIHBkYSk7Ci0JCWtmcmVlKHBkYSk7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwotCX0KLQotCS8qIFJ1biB0aGUgZmlybXdhcmUgKi8KLQlpZiAocHJpdi0+c3RvcF9mdykgewotCQlyZXQgPSBwcml2LT5zdG9wX2Z3KHByaXYsIDApOwotCQlpZiAocmV0KQotCQkJcmV0dXJuIHJldDsKLQl9Ci0KLQkvKiBSZXNldCBoZXJtZXMgY2hpcCBhbmQgbWFrZSBzdXJlIGl0IHJlc3BvbmRzICovCi0JcmV0ID0gaGVybWVzX2luaXQoaHcpOwotCi0JLyogaGVybWVzX3Jlc2V0KCkgc2hvdWxkIHJldHVybiAwIHdpdGggdGhlIHNlY29uZGFyeSBmaXJtd2FyZSAqLwotCWlmIChzZWNvbmRhcnkgJiYgcmV0ICE9IDApCi0JCXJldHVybiAtRU5PREVWOwotCi0JLyogQW5kIHRoaXMgc2hvdWxkIHdvcmsgd2l0aCBhbnkgZmlybXdhcmUgKi8KLQlpZiAoIWhlcm1lc19wcmVzZW50KGh3KSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlyZXR1cm4gMDsKLQotZnJlZToKLQlrZnJlZShwZGEpOwotCXJldHVybiByZXQ7Ci19Ci0KLQotLyoKLSAqIERvd25sb2FkIHRoZSBmaXJtd2FyZSBpbnRvIHRoZSBjYXJkLCB0aGlzIGFsc28gZG9lcyBhIFBDTUNJQSBzb2Z0Ci0gKiByZXNldCBvbiB0aGUgY2FyZCwgdG8gbWFrZSBzdXJlIGl0J3MgaW4gYSBzYW5lIHN0YXRlLgotICovCi1zdGF0aWMgaW50Ci1zeW1ib2xfZGxfZmlybXdhcmUoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwKLQkJICAgY29uc3Qgc3RydWN0IGZ3X2luZm8gKmZ3KQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwcml2LT5uZGV2OwotCWludCByZXQ7Ci0JY29uc3Qgc3RydWN0IGZpcm13YXJlICpmd19lbnRyeTsKLQotCWlmICghcHJpdi0+Y2FjaGVkX3ByaV9mdykgewotCQlpZiAocmVxdWVzdF9maXJtd2FyZSgmZndfZW50cnksIGZ3LT5wcmlfZncsIHByaXYtPmRldikgIT0gMCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IGZpbmQgZmlybXdhcmU6ICVzXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgZnctPnByaV9mdyk7Ci0JCQlyZXR1cm4gLUVOT0VOVDsKLQkJfQotCX0gZWxzZQotCQlmd19lbnRyeSA9IHByaXYtPmNhY2hlZF9wcmlfZnc7Ci0KLQkvKiBMb2FkIHByaW1hcnkgZmlybXdhcmUgKi8KLQlyZXQgPSBzeW1ib2xfZGxfaW1hZ2UocHJpdiwgZncsIGZ3X2VudHJ5LT5kYXRhLAotCQkJICAgICAgZndfZW50cnktPmRhdGEgKyBmd19lbnRyeS0+c2l6ZSwgMCk7Ci0KLQlpZiAoIXByaXYtPmNhY2hlZF9wcmlfZncpCi0JCXJlbGVhc2VfZmlybXdhcmUoZndfZW50cnkpOwotCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogUHJpbWFyeSBmaXJtd2FyZSBkb3dubG9hZCBmYWlsZWRcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCWlmICghcHJpdi0+Y2FjaGVkX2Z3KSB7Ci0JCWlmIChyZXF1ZXN0X2Zpcm13YXJlKCZmd19lbnRyeSwgZnctPnN0YV9mdywgcHJpdi0+ZGV2KSAhPSAwKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgZmluZCBmaXJtd2FyZTogJXNcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBmdy0+c3RhX2Z3KTsKLQkJCXJldHVybiAtRU5PRU5UOwotCQl9Ci0JfSBlbHNlCi0JCWZ3X2VudHJ5ID0gcHJpdi0+Y2FjaGVkX2Z3OwotCi0JLyogTG9hZCBzZWNvbmRhcnkgZmlybXdhcmUgKi8KLQlyZXQgPSBzeW1ib2xfZGxfaW1hZ2UocHJpdiwgZncsIGZ3X2VudHJ5LT5kYXRhLAotCQkJICAgICAgZndfZW50cnktPmRhdGEgKyBmd19lbnRyeS0+c2l6ZSwgMSk7Ci0JaWYgKCFwcml2LT5jYWNoZWRfZncpCi0JCXJlbGVhc2VfZmlybXdhcmUoZndfZW50cnkpOwotCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogU2Vjb25kYXJ5IGZpcm13YXJlIGRvd25sb2FkIGZhaWxlZFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBvcmlub2NvX2Rvd25sb2FkKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCi17Ci0JaW50IGVyciA9IDA7Ci0JLyogUmVsb2FkIGZpcm13YXJlICovCi0Jc3dpdGNoIChwcml2LT5maXJtd2FyZV90eXBlKSB7Ci0JY2FzZSBGSVJNV0FSRV9UWVBFX0FHRVJFOgotCQkvKiBjYXNlIEZJUk1XQVJFX1RZUEVfSU5URVJTSUw6ICovCi0JCWVyciA9IG9yaW5vY29fZGxfZmlybXdhcmUocHJpdiwKLQkJCQkJICAmb3Jpbm9jb19md1twcml2LT5maXJtd2FyZV90eXBlXSwgMCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBGSVJNV0FSRV9UWVBFX1NZTUJPTDoKLQkJZXJyID0gc3ltYm9sX2RsX2Zpcm13YXJlKHByaXYsCi0JCQkJCSAmb3Jpbm9jb19md1twcml2LT5maXJtd2FyZV90eXBlXSk7Ci0JCWJyZWFrOwotCWNhc2UgRklSTVdBUkVfVFlQRV9JTlRFUlNJTDoKLQkJYnJlYWs7Ci0JfQotCS8qIFRPRE86IGlmIHdlIGZhaWwgd2UgcHJvYmFibHkgbmVlZCB0byByZWluaXRpYWxpc2UKLQkgKiB0aGUgZHJpdmVyICovCi0KLQlyZXR1cm4gZXJyOwotfQotCi0jaWYgZGVmaW5lZChDT05GSUdfSEVSTUVTX0NBQ0hFX0ZXX09OX0lOSVQpIHx8IGRlZmluZWQoQ09ORklHX1BNX1NMRUVQKQotc3RhdGljIHZvaWQgb3Jpbm9jb19jYWNoZV9mdyhzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LCBpbnQgYXApCi17Ci0JY29uc3Qgc3RydWN0IGZpcm13YXJlICpmd19lbnRyeSA9IE5VTEw7Ci0JY29uc3QgY2hhciAqcHJpX2Z3OwotCWNvbnN0IGNoYXIgKmZ3OwotCi0JcHJpX2Z3ID0gb3Jpbm9jb19md1twcml2LT5maXJtd2FyZV90eXBlXS5wcmlfZnc7Ci0JaWYgKGFwKQotCQlmdyA9IG9yaW5vY29fZndbcHJpdi0+ZmlybXdhcmVfdHlwZV0uYXBfZnc7Ci0JZWxzZQotCQlmdyA9IG9yaW5vY29fZndbcHJpdi0+ZmlybXdhcmVfdHlwZV0uc3RhX2Z3OwotCi0JaWYgKHByaV9mdykgewotCQlpZiAocmVxdWVzdF9maXJtd2FyZSgmZndfZW50cnksIHByaV9mdywgcHJpdi0+ZGV2KSA9PSAwKQotCQkJcHJpdi0+Y2FjaGVkX3ByaV9mdyA9IGZ3X2VudHJ5OwotCX0KLQotCWlmIChmdykgewotCQlpZiAocmVxdWVzdF9maXJtd2FyZSgmZndfZW50cnksIGZ3LCBwcml2LT5kZXYpID09IDApCi0JCQlwcml2LT5jYWNoZWRfZncgPSBmd19lbnRyeTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIG9yaW5vY29fdW5jYWNoZV9mdyhzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KQotewotCWlmIChwcml2LT5jYWNoZWRfcHJpX2Z3KQotCQlyZWxlYXNlX2Zpcm13YXJlKHByaXYtPmNhY2hlZF9wcmlfZncpOwotCWlmIChwcml2LT5jYWNoZWRfZncpCi0JCXJlbGVhc2VfZmlybXdhcmUocHJpdi0+Y2FjaGVkX2Z3KTsKLQotCXByaXYtPmNhY2hlZF9wcmlfZncgPSBOVUxMOwotCXByaXYtPmNhY2hlZF9mdyA9IE5VTEw7Ci19Ci0jZWxzZQotI2RlZmluZSBvcmlub2NvX2NhY2hlX2Z3KHByaXYsIGFwKQotI2RlZmluZSBvcmlub2NvX3VuY2FjaGVfZncocHJpdikKLSNlbmRpZgotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBEZXZpY2UgbWV0aG9kcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyBpbnQgb3Jpbm9jb19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgZXJyOwotCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCXJldHVybiAtRUJVU1k7Ci0KLQllcnIgPSBfX29yaW5vY29fdXAoZGV2KTsKLQotCWlmICghIGVycikKLQkJcHJpdi0+b3BlbiA9IDE7Ci0KLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBvcmlub2NvX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgZXJyID0gMDsKLQotCS8qIFdlIG11c3RuJ3QgdXNlIG9yaW5vY29fbG9jaygpIGhlcmUsIGJlY2F1c2Ugd2UgbmVlZCB0byBiZQotCSAgIGFibGUgdG8gY2xvc2UgdGhlIGludGVyZmFjZSBldmVuIGlmIGh3X3VuYXZhaWxhYmxlIGlzIHNldAotCSAgIChlLmcuIGFzIHdlJ3JlIHJlbGVhc2VkIGFmdGVyIGEgUEMgQ2FyZCByZW1vdmFsKSAqLwotCXNwaW5fbG9ja19pcnEoJnByaXYtPmxvY2spOwotCi0JcHJpdi0+b3BlbiA9IDA7Ci0KLQllcnIgPSBfX29yaW5vY29fZG93bihkZXYpOwotCi0Jc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5sb2NrKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqb3Jpbm9jb19nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQkKLQlyZXR1cm4gJnByaXYtPnN0YXRzOwotfQotCi1zdGF0aWMgc3RydWN0IGl3X3N0YXRpc3RpY3MgKm9yaW5vY29fZ2V0X3dpcmVsZXNzX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OwotCXN0cnVjdCBpd19zdGF0aXN0aWNzICp3c3RhdHMgPSAmcHJpdi0+d3N0YXRzOwotCWludCBlcnI7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmICghIG5ldGlmX2RldmljZV9wcmVzZW50KGRldikpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGdldF93aXJlbGVzc19zdGF0cygpIGNhbGxlZCB3aGlsZSBkZXZpY2Ugbm90IHByZXNlbnRcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUpOwotCQlyZXR1cm4gTlVMTDsgLyogRklYTUU6IENhbiB3ZSBkbyBiZXR0ZXIgdGhhbiB0aGlzPyAqLwotCX0KLQotCS8qIElmIGJ1c3ksIHJldHVybiB0aGUgb2xkIHN0YXRzLiAgUmV0dXJuaW5nIE5VTEwgbWF5IGNhdXNlCi0JICogdGhlIGludGVyZmFjZSB0byBkaXNhcHBlYXIgZnJvbSAvcHJvYy9uZXQvd2lyZWxlc3MgKi8KLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKLQkJcmV0dXJuIHdzdGF0czsKLQotCS8qIFdlIGNhbid0IHJlYWxseSB3YWl0IGZvciB0aGUgdGFsbGllcyBpbnF1aXJ5IGNvbW1hbmQgdG8KLQkgKiBjb21wbGV0ZSwgc28gd2UganVzdCB1c2UgdGhlIHByZXZpb3VzIHJlc3VsdHMgYW5kIHRyaWdnZXIKLQkgKiBhIG5ldyB0YWxsaWVzIGlucXVpcnkgY29tbWFuZCBmb3IgbmV4dCB0aW1lIC0gSmVhbiBJSSAqLwotCS8qIEZJWE1FOiBSZWFsbHkgd2Ugc2hvdWxkIHdhaXQgZm9yIHRoZSBpbnF1aXJ5IHRvIGNvbWUgYmFjayAtCi0JICogYXMgaXQgaXMgdGhlIHN0YXRzIHdlIGdpdmUgZG9uJ3QgbWFrZSBhIHdob2xlIGxvdCBvZiBzZW5zZS4KLQkgKiBVbmZvcnR1bmF0ZWx5LCBpdCdzIG5vdCBjbGVhciBob3cgdG8gZG8gdGhhdCB3aXRoaW4gdGhlCi0JICogd2lyZWxlc3MgZXh0ZW5zaW9ucyBmcmFtZXdvcms6IEkgdGhpbmsgd2UncmUgaW4gdXNlcgotCSAqIGNvbnRleHQsIGJ1dCBhIGxvY2sgc2VlbXMgdG8gYmUgaGVsZCBieSB0aGUgdGltZSB3ZSBnZXQgaW4KLQkgKiBoZXJlIHNvIHdlJ3JlIG5vdCBzYWZlIHRvIHNsZWVwIGhlcmUuICovCi0JaGVybWVzX2lucXVpcmUoaHcsIEhFUk1FU19JTlFfVEFMTElFUyk7Ci0KLQlpZiAocHJpdi0+aXdfbW9kZSA9PSBJV19NT0RFX0FESE9DKSB7Ci0JCW1lbXNldCgmd3N0YXRzLT5xdWFsLCAwLCBzaXplb2Yod3N0YXRzLT5xdWFsKSk7Ci0JCS8qIElmIGEgc3B5IGFkZHJlc3MgaXMgZGVmaW5lZCwgd2UgcmVwb3J0IHN0YXRzIG9mIHRoZQotCQkgKiBmaXJzdCBzcHkgYWRkcmVzcyAtIEplYW4gSUkgKi8KLQkJaWYgKFNQWV9OVU1CRVIocHJpdikpIHsKLQkJCXdzdGF0cy0+cXVhbC5xdWFsID0gcHJpdi0+c3B5X2RhdGEuc3B5X3N0YXRbMF0ucXVhbDsKLQkJCXdzdGF0cy0+cXVhbC5sZXZlbCA9IHByaXYtPnNweV9kYXRhLnNweV9zdGF0WzBdLmxldmVsOwotCQkJd3N0YXRzLT5xdWFsLm5vaXNlID0gcHJpdi0+c3B5X2RhdGEuc3B5X3N0YXRbMF0ubm9pc2U7Ci0JCQl3c3RhdHMtPnF1YWwudXBkYXRlZCA9IHByaXYtPnNweV9kYXRhLnNweV9zdGF0WzBdLnVwZGF0ZWQ7Ci0JCX0KLQl9IGVsc2UgewotCQlzdHJ1Y3QgewotCQkJX19sZTE2IHF1YWwsIHNpZ25hbCwgbm9pc2UsIHVudXNlZDsKLQkJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgY3E7Ci0KLQkJZXJyID0gSEVSTUVTX1JFQURfUkVDT1JEKGh3LCBVU0VSX0JBUCwKLQkJCQkJIEhFUk1FU19SSURfQ09NTVNRVUFMSVRZLCAmY3EpOwotCi0JCWlmICghZXJyKSB7Ci0JCQl3c3RhdHMtPnF1YWwucXVhbCA9IChpbnQpbGUxNl90b19jcHUoY3EucXVhbCk7Ci0JCQl3c3RhdHMtPnF1YWwubGV2ZWwgPSAoaW50KWxlMTZfdG9fY3B1KGNxLnNpZ25hbCkgLSAweDk1OwotCQkJd3N0YXRzLT5xdWFsLm5vaXNlID0gKGludClsZTE2X3RvX2NwdShjcS5ub2lzZSkgLSAweDk1OwotCQkJd3N0YXRzLT5xdWFsLnVwZGF0ZWQgPSBJV19RVUFMX0FMTF9VUERBVEVEIHwgSVdfUVVBTF9EQk07Ci0JCX0KLQl9Ci0KLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCXJldHVybiB3c3RhdHM7Ci19Ci0KLXN0YXRpYyB2b2lkIG9yaW5vY29fc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogb3Jpbm9jb19zZXRfbXVsdGljYXN0X2xpc3QoKSAiCi0JCSAgICAgICAiY2FsbGVkIHdoZW4gaHdfdW5hdmFpbGFibGVcbiIsIGRldi0+bmFtZSk7Ci0JCXJldHVybjsKLQl9Ci0KLQlfX29yaW5vY29fc2V0X211bHRpY2FzdF9saXN0KGRldik7Ci0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLX0KLQotc3RhdGljIGludCBvcmlub2NvX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlpZiAoIChuZXdfbXR1IDwgT1JJTk9DT19NSU5fTVRVKSB8fCAobmV3X210dSA+IE9SSU5PQ09fTUFYX01UVSkgKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCS8qIE1UVSArIGVuY2Fwc3VsYXRpb24gKyBoZWFkZXIgbGVuZ3RoICovCi0JaWYgKCAobmV3X210dSArIEVOQ0FQU19PVkVSSEVBRCArIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcikpID4KLQkgICAgIChwcml2LT5uaWNidWZfc2l6ZSAtIEVUSF9ITEVOKSApCi0JCXJldHVybiAtRUlOVkFMOwotCi0JZGV2LT5tdHUgPSBuZXdfbXR1OwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIFR4IHBhdGggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIGludCBvcmlub2NvX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmcHJpdi0+c3RhdHM7Ci0JaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OwotCWludCBlcnIgPSAwOwotCXUxNiB0eGZpZCA9IHByaXYtPnR4ZmlkOwotCXN0cnVjdCBldGhoZHIgKmVoOwotCWludCB0eF9jb250cm9sOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAoISBuZXRpZl9ydW5uaW5nKGRldikpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogVHggb24gc3RvcHBlZCBkZXZpY2UhXG4iLAotCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwotCX0KLQkKLQlpZiAobmV0aWZfcXVldWVfc3RvcHBlZChkZXYpKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogVHggd2hpbGUgdHJhbnNtaXR0ZXIgYnVzeSFcbiIsIAotCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwotCX0KLQkKLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBvcmlub2NvX3htaXQoKSBjYWxsZWQgd2hpbGUgaHdfdW5hdmFpbGFibGVcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUpOwotCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7Ci0JfQotCi0JaWYgKCEgbmV0aWZfY2Fycmllcl9vayhkZXYpIHx8IChwcml2LT5pd19tb2RlID09IElXX01PREVfTU9OSVRPUikpIHsKLQkJLyogT29wcywgdGhlIGZpcm13YXJlIGhhc24ndCBlc3RhYmxpc2hlZCBhIGNvbm5lY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgc2lsZW50bHkgZHJvcCB0aGUgcGFja2V0ICh0aGlzIHNlZW1zIHRvIGJlIHRoZQotICAgICAgICAgICAgICAgICAgIHNhZmVzdCBhcHByb2FjaCkuICovCi0JCWdvdG8gZHJvcDsKLQl9Ci0KLQkvKiBDaGVjayBwYWNrZXQgbGVuZ3RoICovCi0JaWYgKHNrYi0+bGVuIDwgRVRIX0hMRU4pCi0JCWdvdG8gZHJvcDsKLQotCXR4X2NvbnRyb2wgPSBIRVJNRVNfVFhDVFJMX1RYX09LIHwgSEVSTUVTX1RYQ1RSTF9UWF9FWDsKLQotCWlmIChwcml2LT5lbmNvZGVfYWxnID09IElXX0VOQ09ERV9BTEdfVEtJUCkKLQkJdHhfY29udHJvbCB8PSAocHJpdi0+dHhfa2V5IDw8IEhFUk1FU19NSUNfS0VZX0lEX1NISUZUKSB8Ci0JCQlIRVJNRVNfVFhDVFJMX01JQzsKLQotCWlmIChwcml2LT5oYXNfYWx0X3R4Y250bCkgewotCQkvKiBXUEEgZW5hYmxlZCBmaXJtd2FyZXMgaGF2ZSB0eF9jbnRsIGF0IHRoZSBlbmQgb2YKLQkJICogdGhlIDgwMi4xMSBoZWFkZXIuICBTbyB3cml0ZSB6ZXJvZWQgZGVzY3JpcHRvciBhbmQKLQkJICogODAyLjExIGhlYWRlciBhdCB0aGUgc2FtZSB0aW1lCi0JCSAqLwotCQljaGFyIGRlc2NbSEVSTUVTXzgwMl8zX09GRlNFVF07Ci0JCV9fbGUxNiAqdHhjbnRsID0gKF9fbGUxNiAqKSAmZGVzY1tIRVJNRVNfVFhDTlRMMl9PRkZTRVRdOwotCi0JCW1lbXNldCgmZGVzYywgMCwgc2l6ZW9mKGRlc2MpKTsKLQotCQkqdHhjbnRsID0gY3B1X3RvX2xlMTYodHhfY29udHJvbCk7Ci0JCWVyciA9IGhlcm1lc19iYXBfcHdyaXRlKGh3LCBVU0VSX0JBUCwgJmRlc2MsIHNpemVvZihkZXNjKSwKLQkJCQkJdHhmaWQsIDApOwotCQlpZiAoZXJyKSB7Ci0JCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHdyaXRpbmcgVHggIgotCQkJCSAgICAgICAiZGVzY3JpcHRvciB0byBCQVBcbiIsIGRldi0+bmFtZSwgZXJyKTsKLQkJCWdvdG8gYnVzeTsKLQkJfQotCX0gZWxzZSB7Ci0JCXN0cnVjdCBoZXJtZXNfdHhfZGVzY3JpcHRvciBkZXNjOwotCi0JCW1lbXNldCgmZGVzYywgMCwgc2l6ZW9mKGRlc2MpKTsKLQotCQlkZXNjLnR4X2NvbnRyb2wgPSBjcHVfdG9fbGUxNih0eF9jb250cm9sKTsKLQkJZXJyID0gaGVybWVzX2JhcF9wd3JpdGUoaHcsIFVTRVJfQkFQLCAmZGVzYywgc2l6ZW9mKGRlc2MpLAotCQkJCQl0eGZpZCwgMCk7Ci0JCWlmIChlcnIpIHsKLQkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgd3JpdGluZyBUeCAiCi0JCQkJICAgICAgICJkZXNjcmlwdG9yIHRvIEJBUFxuIiwgZGV2LT5uYW1lLCBlcnIpOwotCQkJZ290byBidXN5OwotCQl9Ci0KLQkJLyogQ2xlYXIgdGhlIDgwMi4xMSBoZWFkZXIgYW5kIGRhdGEgbGVuZ3RoIGZpZWxkcyAtIHNvbWUKLQkJICogZmlybXdhcmVzIChlLmcuIEx1Y2VudC9BZ2VyZSA4Lnh4KSBhcHBlYXIgdG8gZ2V0IGNvbmZ1c2VkCi0JCSAqIGlmIHRoaXMgaXNuJ3QgZG9uZS4gKi8KLQkJaGVybWVzX2NsZWFyX3dvcmRzKGh3LCBIRVJNRVNfREFUQTAsCi0JCQkJICAgSEVSTUVTXzgwMl8zX09GRlNFVCAtIEhFUk1FU184MDJfMTFfT0ZGU0VUKTsKLQl9Ci0KLQllaCA9IChzdHJ1Y3QgZXRoaGRyICopc2tiLT5kYXRhOwotCi0JLyogRW5jYXBzdWxhdGUgRXRoZXJuZXQtSUkgZnJhbWVzICovCi0JaWYgKG50b2hzKGVoLT5oX3Byb3RvKSA+IEVUSF9EQVRBX0xFTikgeyAvKiBFdGhlcm5ldC1JSSBmcmFtZSAqLwotCQlzdHJ1Y3QgaGVhZGVyX3N0cnVjdCB7Ci0JCQlzdHJ1Y3QgZXRoaGRyIGV0aDsJLyogODAyLjMgaGVhZGVyICovCi0JCQl1OCBlbmNhcFs2XTsJCS8qIDgwMi4yIGhlYWRlciAqLwotCQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBoZHI7Ci0KLQkJLyogU3RyaXAgZGVzdGluYXRpb24gYW5kIHNvdXJjZSBmcm9tIHRoZSBkYXRhICovCi0JCXNrYl9wdWxsKHNrYiwgMiAqIEVUSF9BTEVOKTsKLQotCQkvKiBBbmQgbW92ZSB0aGVtIHRvIGEgc2VwYXJhdGUgaGVhZGVyICovCi0JCW1lbWNweSgmaGRyLmV0aCwgZWgsIDIgKiBFVEhfQUxFTik7Ci0JCWhkci5ldGguaF9wcm90byA9IGh0b25zKHNpemVvZihlbmNhcHNfaGRyKSArIHNrYi0+bGVuKTsKLQkJbWVtY3B5KGhkci5lbmNhcCwgZW5jYXBzX2hkciwgc2l6ZW9mKGVuY2Fwc19oZHIpKTsKLQotCQkvKiBJbnNlcnQgdGhlIFNOQVAgaGVhZGVyICovCi0JCWlmIChza2JfaGVhZHJvb20oc2tiKSA8IHNpemVvZihoZHIpKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIKLQkJCSAgICAgICAiJXM6IE5vdCBlbm91Z2ggaGVhZHJvb20gZm9yIDgwMi4yIGhlYWRlcnMgJWRcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBza2JfaGVhZHJvb20oc2tiKSk7Ci0JCQlnb3RvIGRyb3A7Ci0JCX0KLQkJZWggPSAoc3RydWN0IGV0aGhkciAqKSBza2JfcHVzaChza2IsIHNpemVvZihoZHIpKTsKLQkJbWVtY3B5KGVoLCAmaGRyLCBzaXplb2YoaGRyKSk7Ci0JfQotCi0JZXJyID0gaGVybWVzX2JhcF9wd3JpdGUoaHcsIFVTRVJfQkFQLCBza2ItPmRhdGEsIHNrYi0+bGVuLAotCQkJCXR4ZmlkLCBIRVJNRVNfODAyXzNfT0ZGU0VUKTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHdyaXRpbmcgcGFja2V0IHRvIEJBUFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkJZ290byBidXN5OwotCX0KLQotCS8qIENhbGN1bGF0ZSBNaWNoYWVsIE1JQyAqLwotCWlmIChwcml2LT5lbmNvZGVfYWxnID09IElXX0VOQ09ERV9BTEdfVEtJUCkgewotCQl1OCBtaWNfYnVmW01JQ0hBRUxfTUlDX0xFTiArIDFdOwotCQl1OCAqbWljOwotCQlzaXplX3Qgb2Zmc2V0OwotCQlzaXplX3QgbGVuOwotCi0JCWlmIChza2ItPmxlbiAlIDIpIHsKLQkJCS8qIE1JQyBzdGFydCBpcyBvbiBhbiBvZGQgYm91bmRhcnkgKi8KLQkJCW1pY19idWZbMF0gPSBza2ItPmRhdGFbc2tiLT5sZW4gLSAxXTsKLQkJCW1pYyA9ICZtaWNfYnVmWzFdOwotCQkJb2Zmc2V0ID0gc2tiLT5sZW4gLSAxOwotCQkJbGVuID0gTUlDSEFFTF9NSUNfTEVOICsgMTsKLQkJfSBlbHNlIHsKLQkJCW1pYyA9ICZtaWNfYnVmWzBdOwotCQkJb2Zmc2V0ID0gc2tiLT5sZW47Ci0JCQlsZW4gPSBNSUNIQUVMX01JQ19MRU47Ci0JCX0KLQotCQltaWNoYWVsX21pYyhwcml2LT50eF90Zm1fbWljLAotCQkJICAgIHByaXYtPnRraXBfa2V5W3ByaXYtPnR4X2tleV0udHhfbWljLAotCQkJICAgIGVoLT5oX2Rlc3QsIGVoLT5oX3NvdXJjZSwgMCAvKiBwcmlvcml0eSAqLywKLQkJCSAgICBza2ItPmRhdGEgKyBFVEhfSExFTiwgc2tiLT5sZW4gLSBFVEhfSExFTiwgbWljKTsKLQotCQkvKiBXcml0ZSB0aGUgTUlDICovCi0JCWVyciA9IGhlcm1lc19iYXBfcHdyaXRlKGh3LCBVU0VSX0JBUCwgJm1pY19idWZbMF0sIGxlbiwKLQkJCQkJdHhmaWQsIEhFUk1FU184MDJfM19PRkZTRVQgKyBvZmZzZXQpOwotCQlpZiAoZXJyKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCB3cml0aW5nIE1JQyB0byBCQVBcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCQkJZ290byBidXN5OwotCQl9Ci0JfQotCi0JLyogRmluYWxseSwgd2UgYWN0dWFsbHkgaW5pdGlhdGUgdGhlIHNlbmQgKi8KLQluZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0KLQllcnIgPSBoZXJtZXNfZG9jbWRfd2FpdChodywgSEVSTUVTX0NNRF9UWCB8IEhFUk1FU19DTURfUkVDTCwKLQkJCQl0eGZpZCwgTlVMTCk7Ci0JaWYgKGVycikgewotCQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwotCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgdHJhbnNtaXR0aW5nIHBhY2tldFxuIiwKLQkJCQlkZXYtPm5hbWUsIGVycik7Ci0JCWdvdG8gYnVzeTsKLQl9Ci0KLQlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKLQlzdGF0cy0+dHhfYnl0ZXMgKz0gSEVSTUVTXzgwMl8zX09GRlNFVCArIHNrYi0+bGVuOwotCWdvdG8gb2s7Ci0KLSBkcm9wOgotCXN0YXRzLT50eF9lcnJvcnMrKzsKLQlzdGF0cy0+dHhfZHJvcHBlZCsrOwotCi0gb2s6Ci0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JcmV0dXJuIE5FVERFVl9UWF9PSzsKLQotIGJ1c3k6Ci0JaWYgKGVyciA9PSAtRUlPKQotCQlzY2hlZHVsZV93b3JrKCZwcml2LT5yZXNldF93b3JrKTsKLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCXJldHVybiBORVRERVZfVFhfQlVTWTsKLX0KLQotc3RhdGljIHZvaWQgX19vcmlub2NvX2V2X2FsbG9jKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGhlcm1lc190ICpodykKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1MTYgZmlkID0gaGVybWVzX3JlYWRfcmVnbihodywgQUxMT0NGSUQpOwotCi0JaWYgKGZpZCAhPSBwcml2LT50eGZpZCkgewotCQlpZiAoZmlkICE9IERVTU1ZX0ZJRCkKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBBbGxvY2F0ZSBldmVudCBvbiB1bmV4cGVjdGVkIGZpZCAoJTA0WClcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBmaWQpOwotCQlyZXR1cm47Ci0JfQotCi0JaGVybWVzX3dyaXRlX3JlZ24oaHcsIEFMTE9DRklELCBEVU1NWV9GSUQpOwotfQotCi1zdGF0aWMgdm9pZCBfX29yaW5vY29fZXZfdHgoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaGVybWVzX3QgKmh3KQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZwcml2LT5zdGF0czsKLQotCXN0YXRzLT50eF9wYWNrZXRzKys7Ci0KLQluZXRpZl93YWtlX3F1ZXVlKGRldik7Ci0KLQloZXJtZXNfd3JpdGVfcmVnbihodywgVFhDT01QTEZJRCwgRFVNTVlfRklEKTsKLX0KLQotc3RhdGljIHZvaWQgX19vcmlub2NvX2V2X3R4ZXhjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGhlcm1lc190ICpodykKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmcHJpdi0+c3RhdHM7Ci0JdTE2IGZpZCA9IGhlcm1lc19yZWFkX3JlZ24oaHcsIFRYQ09NUExGSUQpOwotCXUxNiBzdGF0dXM7Ci0Jc3RydWN0IGhlcm1lc190eGV4Y19kYXRhIGhkcjsKLQlpbnQgZXJyID0gMDsKLQotCWlmIChmaWQgPT0gRFVNTVlfRklEKQotCQlyZXR1cm47IC8qIE5vdGhpbmcncyByZWFsbHkgaGFwcGVuZWQgKi8KLQotCS8qIFJlYWQgcGFydCBvZiB0aGUgZnJhbWUgaGVhZGVyIC0gd2UgbmVlZCBzdGF0dXMgYW5kIGFkZHIxICovCi0JZXJyID0gaGVybWVzX2JhcF9wcmVhZChodywgSVJRX0JBUCwgJmhkciwKLQkJCSAgICAgICBzaXplb2Yoc3RydWN0IGhlcm1lc190eGV4Y19kYXRhKSwKLQkJCSAgICAgICBmaWQsIDApOwotCi0JaGVybWVzX3dyaXRlX3JlZ24oaHcsIFRYQ09NUExGSUQsIERVTU1ZX0ZJRCk7Ci0Jc3RhdHMtPnR4X2Vycm9ycysrOwotCi0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogVW5hYmxlIHRvIHJlYWQgZGVzY3JpcHRvciBvbiBUeCBlcnJvciAiCi0JCSAgICAgICAiKEZJRD0lMDRYIGVycm9yICVkKVxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgZmlkLCBlcnIpOwotCQlyZXR1cm47Ci0JfQotCQotCURFQlVHKDEsICIlczogVHggZXJyb3IsIGVyciAlZCAoRklEPSUwNFgpXG4iLCBkZXYtPm5hbWUsCi0JICAgICAgZXJyLCBmaWQpOwotICAgIAotCS8qIFdlIHByb2R1Y2UgYSBUWERST1AgZXZlbnQgb25seSBmb3IgcmV0cnkgb3IgbGlmZXRpbWUKLQkgKiBleGNlZWRlZCwgYmVjYXVzZSB0aGF0J3MgdGhlIG9ubHkgc3RhdHVzIHRoYXQgcmVhbGx5IG1lYW4KLQkgKiB0aGF0IHRoaXMgcGFydGljdWxhciBub2RlIHdlbnQgYXdheS4KLQkgKiBPdGhlciBlcnJvcnMgbWVhbnMgdGhhdCAqd2UqIHNjcmV3ZWQgdXAuIC0gSmVhbiBJSSAqLwotCXN0YXR1cyA9IGxlMTZfdG9fY3B1KGhkci5kZXNjLnN0YXR1cyk7Ci0JaWYgKHN0YXR1cyAmIChIRVJNRVNfVFhTVEFUX1JFVFJZRVJSIHwgSEVSTUVTX1RYU1RBVF9BR0VERVJSKSkgewotCQl1bmlvbiBpd3JlcV9kYXRhCXdycXU7Ci0KLQkJLyogQ29weSA4MDIuMTEgZGVzdCBhZGRyZXNzLgotCQkgKiBXZSB1c2UgdGhlIDgwMi4xMSBoZWFkZXIgYmVjYXVzZSB0aGUgZnJhbWUgbWF5Ci0JCSAqIG5vdCBiZSA4MDIuMyBvciBtYXkgYmUgbWFuZ2xlZC4uLgotCQkgKiBJbiBBZC1Ib2MgbW9kZSwgaXQgd2lsbCBiZSB0aGUgbm9kZSBhZGRyZXNzLgotCQkgKiBJbiBtYW5hZ2VkIG1vZGUsIGl0IHdpbGwgYmUgbW9zdCBsaWtlbHkgdGhlIEFQIGFkZHIKLQkJICogVXNlciBzcGFjZSB3aWxsIGZpZ3VyZSBvdXQgaG93IHRvIGNvbnZlcnQgaXQgdG8KLQkJICogd2hhdGV2ZXIgaXQgbmVlZHMgKElQIGFkZHJlc3Mgb3IgZWxzZSkuCi0JCSAqIC0gSmVhbiBJSSAqLwotCQltZW1jcHkod3JxdS5hZGRyLnNhX2RhdGEsIGhkci5hZGRyMSwgRVRIX0FMRU4pOwotCQl3cnF1LmFkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOwotCi0JCS8qIFNlbmQgZXZlbnQgdG8gdXNlciBzcGFjZSAqLwotCQl3aXJlbGVzc19zZW5kX2V2ZW50KGRldiwgSVdFVlRYRFJPUCwgJndycXUsIE5VTEwpOwotCX0KLQotCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKLX0KLQotc3RhdGljIHZvaWQgb3Jpbm9jb190eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJnByaXYtPnN0YXRzOwotCXN0cnVjdCBoZXJtZXMgKmh3ID0gJnByaXYtPmh3OwotCi0JcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFR4IHRpbWVvdXQhICIKLQkgICAgICAgIkFMTE9DRklEPSUwNHgsIFRYQ09NUExGSUQ9JTA0eCwgRVZTVEFUPSUwNHhcbiIsCi0JICAgICAgIGRldi0+bmFtZSwgaGVybWVzX3JlYWRfcmVnbihodywgQUxMT0NGSUQpLAotCSAgICAgICBoZXJtZXNfcmVhZF9yZWduKGh3LCBUWENPTVBMRklEKSwgaGVybWVzX3JlYWRfcmVnbihodywgRVZTVEFUKSk7Ci0KLQlzdGF0cy0+dHhfZXJyb3JzKys7Ci0KLQlzY2hlZHVsZV93b3JrKCZwcml2LT5yZXNldF93b3JrKTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogUnggcGF0aCAoZGF0YSBmcmFtZXMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBEb2VzIHRoZSBmcmFtZSBoYXZlIGEgU05BUCBoZWFkZXIgaW5kaWNhdGluZyBpdCBzaG91bGQgYmUKLSAqIGRlLWVuY2Fwc3VsYXRlZCB0byBFdGhlcm5ldC1JST8gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGlzX2V0aGVyc25hcCh2b2lkICpfaGRyKQotewotCXU4ICpoZHIgPSBfaGRyOwotCi0JLyogV2UgZGUtZW5jYXBzdWxhdGUgYWxsIHBhY2tldHMgd2hpY2gsIGEpIGhhdmUgU05BUCBoZWFkZXJzCi0JICogKGkuZS4gU1NBUD1EU0FQPTB4YWEgYW5kIENUUkw9MHgzIGluIHRoZSA4MDIuMiBMTEMgaGVhZGVyCi0JICogYW5kIHdoZXJlIGIpIHRoZSBPVUkgb2YgdGhlIFNOQVAgaGVhZGVyIGlzIDAwOjAwOjAwIG9yCi0JICogMDA6MDA6ZjggLSB3ZSBuZWVkIGJvdGggYmVjYXVzZSBkaWZmZXJlbnQgQVBzIGFwcGVhciB0byB1c2UKLQkgKiBkaWZmZXJlbnQgT1VJcyBmb3Igc29tZSByZWFzb24gKi8KLQlyZXR1cm4gKG1lbWNtcChoZHIsICZlbmNhcHNfaGRyLCA1KSA9PSAwKQotCQkmJiAoIChoZHJbNV0gPT0gMHgwMCkgfHwgKGhkcls1XSA9PSAweGY4KSApOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgb3Jpbm9jb19zcHlfZ2F0aGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVfY2hhciAqbWFjLAotCQkJCSAgICAgIGludCBsZXZlbCwgaW50IG5vaXNlKQotewotCXN0cnVjdCBpd19xdWFsaXR5IHdzdGF0czsKLQl3c3RhdHMubGV2ZWwgPSBsZXZlbCAtIDB4OTU7Ci0Jd3N0YXRzLm5vaXNlID0gbm9pc2UgLSAweDk1OwotCXdzdGF0cy5xdWFsID0gKGxldmVsID4gbm9pc2UpID8gKGxldmVsIC0gbm9pc2UpIDogMDsKLQl3c3RhdHMudXBkYXRlZCA9IElXX1FVQUxfQUxMX1VQREFURUQgfCBJV19RVUFMX0RCTTsKLQkvKiBVcGRhdGUgc3B5IHJlY29yZHMgKi8KLQl3aXJlbGVzc19zcHlfdXBkYXRlKGRldiwgbWFjLCAmd3N0YXRzKTsKLX0KLQotc3RhdGljIHZvaWQgb3Jpbm9jb19zdGF0X2dhdGhlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCXN0cnVjdCBza19idWZmICpza2IsCi0JCQkJc3RydWN0IGhlcm1lc19yeF9kZXNjcmlwdG9yICpkZXNjKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JLyogVXNpbmcgc3B5IHN1cHBvcnQgd2l0aCBsb3RzIG9mIFJ4IHBhY2tldHMsIGxpa2UgaW4gYW4KLQkgKiBpbmZyYXN0cnVjdHVyZSAoQVApLCB3aWxsIHJlYWxseSBzbG93IGRvd24gZXZlcnl0aGluZywgYmVjYXVzZQotCSAqIHRoZSBNQUMgYWRkcmVzcyBtdXN0IGJlIGNvbXBhcmVkIHRvIGVhY2ggZW50cnkgb2YgdGhlIHNweSBsaXN0LgotCSAqIElmIHRoZSB1c2VyIHJlYWxseSBhc2tzIGZvciBpdCAoc2V0IHNvbWUgYWRkcmVzcyBpbiB0aGUKLQkgKiBzcHkgbGlzdCksIHdlIGRvIGl0LCBidXQgaGUgd2lsbCBwYXkgdGhlIHByaWNlLgotCSAqIE5vdGUgdGhhdCB0byBnZXQgaGVyZSwgeW91IG5lZWQgYm90aCBXSVJFTEVTU19TUFkKLQkgKiBjb21waWxlZCBpbiBBTkQgc29tZSBhZGRyZXNzZXMgaW4gdGhlIGxpc3QgISEhCi0JICovCi0JLyogTm90ZSA6IGdjYyB3aWxsIG9wdGltaXNlIHRoZSB3aG9sZSBzZWN0aW9uIGF3YXkgaWYKLQkgKiBXSVJFTEVTU19TUFkgaXMgbm90IGRlZmluZWQuLi4gLSBKZWFuIElJICovCi0JaWYgKFNQWV9OVU1CRVIocHJpdikpIHsKLQkJb3Jpbm9jb19zcHlfZ2F0aGVyKGRldiwgc2tiX21hY19oZWFkZXIoc2tiKSArIEVUSF9BTEVOLAotCQkJCSAgIGRlc2MtPnNpZ25hbCwgZGVzYy0+c2lsZW5jZSk7Ci0JfQotfQotCi0vKgotICogb3Jpbm9jb19yeF9tb25pdG9yIC0gaGFuZGxlIHJlY2VpdmVkIG1vbml0b3IgZnJhbWVzLgotICoKLSAqIEFyZ3VtZW50czoKLSAqCWRldgkJbmV0d29yayBkZXZpY2UKLSAqCXJ4ZmlkCQlyZWNlaXZlZCBGSUQKLSAqCWRlc2MJCXJ4IGRlc2NyaXB0b3Igb2YgdGhlIGZyYW1lCi0gKgotICogQ2FsbCBjb250ZXh0OiBpbnRlcnJ1cHQKLSAqLwotc3RhdGljIHZvaWQgb3Jpbm9jb19yeF9tb25pdG9yKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiByeGZpZCwKLQkJCSAgICAgICBzdHJ1Y3QgaGVybWVzX3J4X2Rlc2NyaXB0b3IgKmRlc2MpCi17Ci0JdTMyIGhkcmxlbiA9IDMwOwkvKiByZXR1cm4gZnVsbCBoZWFkZXIgYnkgZGVmYXVsdCAqLwotCXUzMiBkYXRhbGVuID0gMDsKLQl1MTYgZmM7Ci0JaW50IGVycjsKLQlpbnQgbGVuOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJnByaXYtPnN0YXRzOwotCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKLQotCWxlbiA9IGxlMTZfdG9fY3B1KGRlc2MtPmRhdGFfbGVuKTsKLQotCS8qIERldGVybWluZSB0aGUgc2l6ZSBvZiB0aGUgaGVhZGVyIGFuZCB0aGUgZGF0YSAqLwotCWZjID0gbGUxNl90b19jcHUoZGVzYy0+ZnJhbWVfY3RsKTsKLQlzd2l0Y2ggKGZjICYgSUVFRTgwMjExX0ZDVExfRlRZUEUpIHsKLQljYXNlIElFRUU4MDIxMV9GVFlQRV9EQVRBOgotCQlpZiAoKGZjICYgSUVFRTgwMjExX0ZDVExfVE9EUykKLQkJICAgICYmIChmYyAmIElFRUU4MDIxMV9GQ1RMX0ZST01EUykpCi0JCQloZHJsZW4gPSAzMDsKLQkJZWxzZQotCQkJaGRybGVuID0gMjQ7Ci0JCWRhdGFsZW4gPSBsZW47Ci0JCWJyZWFrOwotCWNhc2UgSUVFRTgwMjExX0ZUWVBFX01HTVQ6Ci0JCWhkcmxlbiA9IDI0OwotCQlkYXRhbGVuID0gbGVuOwotCQlicmVhazsKLQljYXNlIElFRUU4MDIxMV9GVFlQRV9DVEw6Ci0JCXN3aXRjaCAoZmMgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkgewotCQljYXNlIElFRUU4MDIxMV9TVFlQRV9QU1BPTEw6Ci0JCWNhc2UgSUVFRTgwMjExX1NUWVBFX1JUUzoKLQkJY2FzZSBJRUVFODAyMTFfU1RZUEVfQ0ZFTkQ6Ci0JCWNhc2UgSUVFRTgwMjExX1NUWVBFX0NGRU5EQUNLOgotCQkJaGRybGVuID0gMTY7Ci0JCQlicmVhazsKLQkJY2FzZSBJRUVFODAyMTFfU1RZUEVfQ1RTOgotCQljYXNlIElFRUU4MDIxMV9TVFlQRV9BQ0s6Ci0JCQloZHJsZW4gPSAxMDsKLQkJCWJyZWFrOwotCQl9Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCS8qIFVua25vd24gZnJhbWUgdHlwZSAqLwotCQlicmVhazsKLQl9Ci0KLQkvKiBzYW5pdHkgY2hlY2sgdGhlIGxlbmd0aCAqLwotCWlmIChkYXRhbGVuID4gSUVFRTgwMjExX01BWF9EQVRBX0xFTiArIDEyKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogb3ZlcnNpemVkIG1vbml0b3IgZnJhbWUsICIKLQkJICAgICAgICJkYXRhIGxlbmd0aCA9ICVkXG4iLCBkZXYtPm5hbWUsIGRhdGFsZW4pOwotCQlzdGF0cy0+cnhfbGVuZ3RoX2Vycm9ycysrOwotCQlnb3RvIHVwZGF0ZV9zdGF0czsKLQl9Ci0KLQlza2IgPSBkZXZfYWxsb2Nfc2tiKGhkcmxlbiArIGRhdGFsZW4pOwotCWlmICghc2tiKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBDYW5ub3QgYWxsb2NhdGUgc2tiIGZvciBtb25pdG9yIGZyYW1lXG4iLAotCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJZ290byB1cGRhdGVfc3RhdHM7Ci0JfQotCi0JLyogQ29weSB0aGUgODAyLjExIGhlYWRlciB0byB0aGUgc2tiICovCi0JbWVtY3B5KHNrYl9wdXQoc2tiLCBoZHJsZW4pLCAmKGRlc2MtPmZyYW1lX2N0bCksIGhkcmxlbik7Ci0Jc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsKLQotCS8qIElmIGFueSwgY29weSB0aGUgZGF0YSBmcm9tIHRoZSBjYXJkIHRvIHRoZSBza2IgKi8KLQlpZiAoZGF0YWxlbiA+IDApIHsKLQkJZXJyID0gaGVybWVzX2JhcF9wcmVhZChodywgSVJRX0JBUCwgc2tiX3B1dChza2IsIGRhdGFsZW4pLAotCQkJCSAgICAgICBBTElHTihkYXRhbGVuLCAyKSwgcnhmaWQsCi0JCQkJICAgICAgIEhFUk1FU184MDJfMl9PRkZTRVQpOwotCQlpZiAoZXJyKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBlcnJvciAlZCByZWFkaW5nIG1vbml0b3IgZnJhbWVcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCQkJZ290byBkcm9wOwotCQl9Ci0JfQotCi0Jc2tiLT5kZXYgPSBkZXY7Ci0Jc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwotCXNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfT1RIRVJIT1NUOwotCXNrYi0+cHJvdG9jb2wgPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QXzgwMl8yKTsKLQkKLQlzdGF0cy0+cnhfcGFja2V0cysrOwotCXN0YXRzLT5yeF9ieXRlcyArPSBza2ItPmxlbjsKLQotCW5ldGlmX3J4KHNrYik7Ci0JcmV0dXJuOwotCi0gZHJvcDoKLQlkZXZfa2ZyZWVfc2tiX2lycShza2IpOwotIHVwZGF0ZV9zdGF0czoKLQlzdGF0cy0+cnhfZXJyb3JzKys7Ci0Jc3RhdHMtPnJ4X2Ryb3BwZWQrKzsKLX0KLQotLyogR2V0IHRzYyBmcm9tIHRoZSBmaXJtd2FyZSAqLwotc3RhdGljIGludCBvcmlub2NvX2h3X2dldF90a2lwX2l2KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsIGludCBrZXksCi0JCQkJICB1OCAqdHNjKQotewotCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKLQlpbnQgZXJyID0gMDsKLQl1OCB0c2NfYXJyWzRdW0lXX0VOQ09ERV9TRVFfTUFYX1NJWkVdOwotCi0JaWYgKChrZXkgPCAwKSB8fCAoa2V5ID4gNCkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JZXJyID0gaGVybWVzX3JlYWRfbHR2KGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DVVJSRU5UX1RLSVBfSVYsCi0JCQkgICAgICBzaXplb2YodHNjX2FyciksIE5VTEwsICZ0c2NfYXJyKTsKLQlpZiAoIWVycikKLQkJbWVtY3B5KHRzYywgJnRzY19hcnJba2V5XVswXSwgc2l6ZW9mKHRzY19hcnJbMF0pKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fb3Jpbm9jb19ldl9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBoZXJtZXNfdCAqaHcpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJnByaXYtPnN0YXRzOwotCXN0cnVjdCBpd19zdGF0aXN0aWNzICp3c3RhdHMgPSAmcHJpdi0+d3N0YXRzOwotCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOwotCXUxNiByeGZpZCwgc3RhdHVzOwotCWludCBsZW5ndGg7Ci0Jc3RydWN0IGhlcm1lc19yeF9kZXNjcmlwdG9yICpkZXNjOwotCXN0cnVjdCBvcmlub2NvX3J4X2RhdGEgKnJ4X2RhdGE7Ci0JaW50IGVycjsKLQotCWRlc2MgPSBrbWFsbG9jKHNpemVvZigqZGVzYyksIEdGUF9BVE9NSUMpOwotCWlmICghZGVzYykgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiJXM6IENhbid0IGFsbG9jYXRlIHNwYWNlIGZvciBSWCBkZXNjcmlwdG9yXG4iLAotCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJZ290byB1cGRhdGVfc3RhdHM7Ci0JfQotCi0JcnhmaWQgPSBoZXJtZXNfcmVhZF9yZWduKGh3LCBSWEZJRCk7Ci0KLQllcnIgPSBoZXJtZXNfYmFwX3ByZWFkKGh3LCBJUlFfQkFQLCBkZXNjLCBzaXplb2YoKmRlc2MpLAotCQkJICAgICAgIHJ4ZmlkLCAwKTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGVycm9yICVkIHJlYWRpbmcgUnggZGVzY3JpcHRvci4gIgotCQkgICAgICAgIkZyYW1lIGRyb3BwZWQuXG4iLCBkZXYtPm5hbWUsIGVycik7Ci0JCWdvdG8gdXBkYXRlX3N0YXRzOwotCX0KLQotCXN0YXR1cyA9IGxlMTZfdG9fY3B1KGRlc2MtPnN0YXR1cyk7Ci0KLQlpZiAoc3RhdHVzICYgSEVSTUVTX1JYU1RBVF9CQURDUkMpIHsKLQkJREVCVUcoMSwgIiVzOiBCYWQgQ1JDIG9uIFJ4LiBGcmFtZSBkcm9wcGVkLlxuIiwKLQkJICAgICAgZGV2LT5uYW1lKTsKLQkJc3RhdHMtPnJ4X2NyY19lcnJvcnMrKzsKLQkJZ290byB1cGRhdGVfc3RhdHM7Ci0JfQotCi0JLyogSGFuZGxlIGZyYW1lcyBpbiBtb25pdG9yIG1vZGUgKi8KLQlpZiAocHJpdi0+aXdfbW9kZSA9PSBJV19NT0RFX01PTklUT1IpIHsKLQkJb3Jpbm9jb19yeF9tb25pdG9yKGRldiwgcnhmaWQsIGRlc2MpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAoc3RhdHVzICYgSEVSTUVTX1JYU1RBVF9VTkRFQ1JZUFRBQkxFKSB7Ci0JCURFQlVHKDEsICIlczogVW5kZWNyeXB0YWJsZSBmcmFtZSBvbiBSeC4gRnJhbWUgZHJvcHBlZC5cbiIsCi0JCSAgICAgIGRldi0+bmFtZSk7Ci0JCXdzdGF0cy0+ZGlzY2FyZC5jb2RlKys7Ci0JCWdvdG8gdXBkYXRlX3N0YXRzOwotCX0KLQotCWxlbmd0aCA9IGxlMTZfdG9fY3B1KGRlc2MtPmRhdGFfbGVuKTsKLQotCS8qIFNhbml0eSBjaGVja3MgKi8KLQlpZiAobGVuZ3RoIDwgMykgeyAvKiBObyBmb3IgZXZlbiBhbiA4MDIuMiBMTEMgaGVhZGVyICovCi0JCS8qIEF0IGxlYXN0IG9uIFN5bWJvbCBmaXJtd2FyZSB3aXRoIFBDRiB3ZSBnZXQgcXVpdGUgYQotICAgICAgICAgICAgICAgICAgIGxvdCBvZiB0aGVzZSBsZWdpdGltYXRlbHkgLSBQb2xsIGZyYW1lcyB3aXRoIG5vCi0gICAgICAgICAgICAgICAgICAgZGF0YS4gKi8KLQkJZ290byBvdXQ7Ci0JfQotCWlmIChsZW5ndGggPiBJRUVFODAyMTFfTUFYX0RBVEFfTEVOKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBPdmVyc2l6ZWQgZnJhbWUgcmVjZWl2ZWQgKCVkIGJ5dGVzKVxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgbGVuZ3RoKTsKLQkJc3RhdHMtPnJ4X2xlbmd0aF9lcnJvcnMrKzsKLQkJZ290byB1cGRhdGVfc3RhdHM7Ci0JfQotCi0JLyogUGF5bG9hZCBzaXplIGRvZXMgbm90IGluY2x1ZGUgTWljaGFlbCBNSUMuIEluY3JlYXNlIHBheWxvYWQKLQkgKiBzaXplIHRvIHJlYWQgaXQgdG9nZXRoZXIgd2l0aCB0aGUgZGF0YS4gKi8KLQlpZiAoc3RhdHVzICYgSEVSTUVTX1JYU1RBVF9NSUMpCi0JCWxlbmd0aCArPSBNSUNIQUVMX01JQ19MRU47Ci0KLQkvKiBXZSBuZWVkIHNwYWNlIGZvciB0aGUgcGFja2V0IGRhdGEgaXRzZWxmLCBwbHVzIGFuIGV0aGVybmV0Ci0JICAgaGVhZGVyLCBwbHVzIDIgYnl0ZXMgc28gd2UgY2FuIGFsaWduIHRoZSBJUCBoZWFkZXIgb24gYQotCSAgIDMyYml0IGJvdW5kYXJ5LCBwbHVzIDEgYnl0ZSBzbyB3ZSBjYW4gcmVhZCBpbiBvZGQgbGVuZ3RoCi0JICAgcGFja2V0cyBmcm9tIHRoZSBjYXJkLCB3aGljaCBoYXMgYW4gSU8gZ3JhbnVsYXJpdHkgb2YgMTYKLQkgICBiaXRzICovICAKLQlza2IgPSBkZXZfYWxsb2Nfc2tiKGxlbmd0aCtFVEhfSExFTisyKzEpOwotCWlmICghc2tiKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBDYW4ndCBhbGxvY2F0ZSBza2IgZm9yIFJ4XG4iLAotCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJZ290byB1cGRhdGVfc3RhdHM7Ci0JfQotCi0JLyogV2UnbGwgcHJlcGVuZCB0aGUgaGVhZGVyLCBzbyByZXNlcnZlIHNwYWNlIGZvciBpdC4gIFRoZSB3b3JzdAotCSAgIGNhc2UgaXMgbm8gZGVjYXBzdWxhdGlvbiwgd2hlbiA4MDIuMyBoZWFkZXIgaXMgcHJlcGVuZGVkIGFuZAotCSAgIG5vdGhpbmcgaXMgcmVtb3ZlZC4gIDIgaXMgZm9yIGFsaWduaW5nIHRoZSBJUCBoZWFkZXIuICAqLwotCXNrYl9yZXNlcnZlKHNrYiwgRVRIX0hMRU4gKyAyKTsKLQotCWVyciA9IGhlcm1lc19iYXBfcHJlYWQoaHcsIElSUV9CQVAsIHNrYl9wdXQoc2tiLCBsZW5ndGgpLAotCQkJICAgICAgIEFMSUdOKGxlbmd0aCwgMiksIHJ4ZmlkLAotCQkJICAgICAgIEhFUk1FU184MDJfMl9PRkZTRVQpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogZXJyb3IgJWQgcmVhZGluZyBmcmFtZS4gIgotCQkgICAgICAgIkZyYW1lIGRyb3BwZWQuXG4iLCBkZXYtPm5hbWUsIGVycik7Ci0JCWdvdG8gZHJvcDsKLQl9Ci0KLQkvKiBBZGQgZGVzYyBhbmQgc2tiIHRvIHJ4IHF1ZXVlICovCi0JcnhfZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCpyeF9kYXRhKSwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFyeF9kYXRhKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBDYW4ndCBhbGxvY2F0ZSBSWCBwYWNrZXRcbiIsCi0JCQlkZXYtPm5hbWUpOwotCQlnb3RvIGRyb3A7Ci0JfQotCXJ4X2RhdGEtPmRlc2MgPSBkZXNjOwotCXJ4X2RhdGEtPnNrYiA9IHNrYjsKLQlsaXN0X2FkZF90YWlsKCZyeF9kYXRhLT5saXN0LCAmcHJpdi0+cnhfbGlzdCk7Ci0JdGFza2xldF9zY2hlZHVsZSgmcHJpdi0+cnhfdGFza2xldCk7Ci0KLQlyZXR1cm47Ci0KLWRyb3A6Ci0JZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKLXVwZGF0ZV9zdGF0czoKLQlzdGF0cy0+cnhfZXJyb3JzKys7Ci0Jc3RhdHMtPnJ4X2Ryb3BwZWQrKzsKLW91dDoKLQlrZnJlZShkZXNjKTsKLX0KLQotc3RhdGljIHZvaWQgb3Jpbm9jb19yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkgICAgICAgc3RydWN0IGhlcm1lc19yeF9kZXNjcmlwdG9yICpkZXNjLAotCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmcHJpdi0+c3RhdHM7Ci0JdTE2IHN0YXR1cywgZmM7Ci0JaW50IGxlbmd0aDsKLQlzdHJ1Y3QgZXRoaGRyICpoZHI7Ci0KLQlzdGF0dXMgPSBsZTE2X3RvX2NwdShkZXNjLT5zdGF0dXMpOwotCWxlbmd0aCA9IGxlMTZfdG9fY3B1KGRlc2MtPmRhdGFfbGVuKTsKLQlmYyA9IGxlMTZfdG9fY3B1KGRlc2MtPmZyYW1lX2N0bCk7Ci0KLQkvKiBDYWxjdWxhdGUgYW5kIGNoZWNrIE1JQyAqLwotCWlmIChzdGF0dXMgJiBIRVJNRVNfUlhTVEFUX01JQykgewotCQlpbnQga2V5X2lkID0gKChzdGF0dXMgJiBIRVJNRVNfUlhTVEFUX01JQ19LRVlfSUQpID4+Ci0JCQkgICAgICBIRVJNRVNfTUlDX0tFWV9JRF9TSElGVCk7Ci0JCXU4IG1pY1tNSUNIQUVMX01JQ19MRU5dOwotCQl1OCAqcnhtaWM7Ci0JCXU4ICpzcmMgPSAoZmMgJiBJRUVFODAyMTFfRkNUTF9GUk9NRFMpID8KLQkJCWRlc2MtPmFkZHIzIDogZGVzYy0+YWRkcjI7Ci0KLQkJLyogRXh0cmFjdCBNaWNoYWVsIE1JQyBmcm9tIHBheWxvYWQgKi8KLQkJcnhtaWMgPSBza2ItPmRhdGEgKyBza2ItPmxlbiAtIE1JQ0hBRUxfTUlDX0xFTjsKLQotCQlza2JfdHJpbShza2IsIHNrYi0+bGVuIC0gTUlDSEFFTF9NSUNfTEVOKTsKLQkJbGVuZ3RoIC09IE1JQ0hBRUxfTUlDX0xFTjsKLQotCQltaWNoYWVsX21pYyhwcml2LT5yeF90Zm1fbWljLAotCQkJICAgIHByaXYtPnRraXBfa2V5W2tleV9pZF0ucnhfbWljLAotCQkJICAgIGRlc2MtPmFkZHIxLAotCQkJICAgIHNyYywKLQkJCSAgICAwLCAvKiBwcmlvcml0eSBvciBRb1M/ICovCi0JCQkgICAgc2tiLT5kYXRhLAotCQkJICAgIHNrYi0+bGVuLAotCQkJICAgICZtaWNbMF0pOwotCi0JCWlmIChtZW1jbXAobWljLCByeG1pYywKLQkJCSAgIE1JQ0hBRUxfTUlDX0xFTikpIHsKLQkJCXVuaW9uIGl3cmVxX2RhdGEgd3JxdTsKLQkJCXN0cnVjdCBpd19taWNoYWVsbWljZmFpbHVyZSB3eG1pYzsKLQotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6ICIKLQkJCSAgICAgICAiSW52YWxpZCBNaWNoYWVsIE1JQyBpbiBkYXRhIGZyYW1lIGZyb20gJXBNLCAiCi0JCQkgICAgICAgInVzaW5nIGtleSAlaVxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIHNyYywga2V5X2lkKTsKLQotCQkJLyogVE9ETzogdXBkYXRlIHN0YXRzICovCi0KLQkJCS8qIE5vdGlmeSB1c2Vyc3BhY2UgKi8KLQkJCW1lbXNldCgmd3htaWMsIDAsIHNpemVvZih3eG1pYykpOwotCQkJd3htaWMuZmxhZ3MgPSBrZXlfaWQgJiBJV19NSUNGQUlMVVJFX0tFWV9JRDsKLQkJCXd4bWljLmZsYWdzIHw9IChkZXNjLT5hZGRyMVswXSAmIDEpID8KLQkJCQlJV19NSUNGQUlMVVJFX0dST1VQIDogSVdfTUlDRkFJTFVSRV9QQUlSV0lTRTsKLQkJCXd4bWljLnNyY19hZGRyLnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKLQkJCW1lbWNweSh3eG1pYy5zcmNfYWRkci5zYV9kYXRhLCBzcmMsIEVUSF9BTEVOKTsKLQotCQkJKHZvaWQpIG9yaW5vY29faHdfZ2V0X3RraXBfaXYocHJpdiwga2V5X2lkLAotCQkJCQkJICAgICAgJnd4bWljLnRzY1swXSk7Ci0KLQkJCW1lbXNldCgmd3JxdSwgMCwgc2l6ZW9mKHdycXUpKTsKLQkJCXdycXUuZGF0YS5sZW5ndGggPSBzaXplb2Yod3htaWMpOwotCQkJd2lyZWxlc3Nfc2VuZF9ldmVudChkZXYsIElXRVZNSUNIQUVMTUlDRkFJTFVSRSwgJndycXUsCi0JCQkJCSAgICAoY2hhciAqKSAmd3htaWMpOwotCi0JCQlnb3RvIGRyb3A7Ci0JCX0KLQl9Ci0KLQkvKiBIYW5kbGUgZGVjYXBzdWxhdGlvbgotCSAqIEluIG1vc3QgY2FzZXMsIHRoZSBmaXJtd2FyZSB0ZWxsIHVzIGFib3V0IFNOQVAgZnJhbWVzLgotCSAqIEZvciBzb21lIHJlYXNvbiwgdGhlIFNOQVAgZnJhbWVzIHNlbnQgYnkgTGlua1N5cyBBUHMKLQkgKiBhcmUgbm90IHByb3Blcmx5IHJlY29nbmlzZWQgYnkgbW9zdCBmaXJtd2FyZXMuCi0JICogU28sIGNoZWNrIG91cnNlbHZlcyAqLwotCWlmIChsZW5ndGggPj0gRU5DQVBTX09WRVJIRUFEICYmCi0JICAgICgoKHN0YXR1cyAmIEhFUk1FU19SWFNUQVRfTVNHVFlQRSkgPT0gSEVSTUVTX1JYU1RBVF8xMDQyKSB8fAotCSAgICAgKChzdGF0dXMgJiBIRVJNRVNfUlhTVEFUX01TR1RZUEUpID09IEhFUk1FU19SWFNUQVRfVFVOTkVMKSB8fAotCSAgICAgaXNfZXRoZXJzbmFwKHNrYi0+ZGF0YSkpKSB7Ci0JCS8qIFRoZXNlIGluZGljYXRlIGEgU05BUCB3aXRoaW4gODAyLjIgTExDIHdpdGhpbgotCQkgICA4MDIuMTEgZnJhbWUgd2hpY2ggd2UnbGwgbmVlZCB0byBkZS1lbmNhcHN1bGF0ZSB0bwotCQkgICB0aGUgb3JpZ2luYWwgRXRoZXJuZXRJSSBmcmFtZS4gKi8KLQkJaGRyID0gKHN0cnVjdCBldGhoZHIgKilza2JfcHVzaChza2IsIEVUSF9ITEVOIC0gRU5DQVBTX09WRVJIRUFEKTsKLQl9IGVsc2UgewotCQkvKiA4MDIuMyBmcmFtZSAtIHByZXBlbmQgODAyLjMgaGVhZGVyIGFzIGlzICovCi0JCWhkciA9IChzdHJ1Y3QgZXRoaGRyICopc2tiX3B1c2goc2tiLCBFVEhfSExFTik7Ci0JCWhkci0+aF9wcm90byA9IGh0b25zKGxlbmd0aCk7Ci0JfQotCW1lbWNweShoZHItPmhfZGVzdCwgZGVzYy0+YWRkcjEsIEVUSF9BTEVOKTsKLQlpZiAoZmMgJiBJRUVFODAyMTFfRkNUTF9GUk9NRFMpCi0JCW1lbWNweShoZHItPmhfc291cmNlLCBkZXNjLT5hZGRyMywgRVRIX0FMRU4pOwotCWVsc2UKLQkJbWVtY3B5KGhkci0+aF9zb3VyY2UsIGRlc2MtPmFkZHIyLCBFVEhfQUxFTik7Ci0KLQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYpOwotCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKLQlpZiAoZmMgJiBJRUVFODAyMTFfRkNUTF9UT0RTKQotCQlza2ItPnBrdF90eXBlID0gUEFDS0VUX09USEVSSE9TVDsKLQkKLQkvKiBQcm9jZXNzIHRoZSB3aXJlbGVzcyBzdGF0cyBpZiBuZWVkZWQgKi8KLQlvcmlub2NvX3N0YXRfZ2F0aGVyKGRldiwgc2tiLCBkZXNjKTsKLQotCS8qIFBhc3MgdGhlIHBhY2tldCB0byB0aGUgbmV0d29ya2luZyBzdGFjayAqLwotCW5ldGlmX3J4KHNrYik7Ci0Jc3RhdHMtPnJ4X3BhY2tldHMrKzsKLQlzdGF0cy0+cnhfYnl0ZXMgKz0gbGVuZ3RoOwotCi0JcmV0dXJuOwotCi0gZHJvcDoKLQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0Jc3RhdHMtPnJ4X2Vycm9ycysrOwotCXN0YXRzLT5yeF9kcm9wcGVkKys7Ci19Ci0KLXN0YXRpYyB2b2lkIG9yaW5vY29fcnhfaXNyX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKikgZGF0YTsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3Qgb3Jpbm9jb19yeF9kYXRhICpyeF9kYXRhLCAqdGVtcDsKLQlzdHJ1Y3QgaGVybWVzX3J4X2Rlc2NyaXB0b3IgKmRlc2M7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JLyogb3Jpbm9jb19yeCByZXF1aXJlcyB0aGUgZHJpdmVyIGxvY2ssIGFuZCB3ZSBhbHNvIG5lZWQgdG8KLQkgKiBwcm90ZWN0IHByaXYtPnJ4X2xpc3QsIHNvIGp1c3QgaG9sZCB0aGUgbG9jayBvdmVyIHRoZQotCSAqIGxvdC4KLQkgKgotCSAqIElmIG9yaW5vY29fbG9jayBmYWlscywgd2UndmUgdW5wbHVnZ2VkIHRoZSBjYXJkLiBJbiB0aGlzCi0JICogY2FzZSBqdXN0IGFib3J0LiAqLwotCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQotCQlyZXR1cm47Ci0KLQkvKiBleHRyYWN0IGRlc2MgYW5kIHNrYiBmcm9tIHF1ZXVlICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJ4X2RhdGEsIHRlbXAsICZwcml2LT5yeF9saXN0LCBsaXN0KSB7Ci0JCWRlc2MgPSByeF9kYXRhLT5kZXNjOwotCQlza2IgPSByeF9kYXRhLT5za2I7Ci0JCWxpc3RfZGVsKCZyeF9kYXRhLT5saXN0KTsKLQkJa2ZyZWUocnhfZGF0YSk7Ci0KLQkJb3Jpbm9jb19yeChkZXYsIGRlc2MsIHNrYik7Ci0KLQkJa2ZyZWUoZGVzYyk7Ci0JfQotCi0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogUnggcGF0aCAoaW5mbyBmcmFtZXMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdGF0aWMgdm9pZCBwcmludF9saW5rc3RhdHVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiBzdGF0dXMpCi17Ci0JY2hhciAqIHM7Ci0KLQlpZiAoc3VwcHJlc3NfbGlua3N0YXR1cykKLQkJcmV0dXJuOwotCi0Jc3dpdGNoIChzdGF0dXMpIHsKLQljYXNlIEhFUk1FU19MSU5LU1RBVFVTX05PVF9DT05ORUNURUQ6Ci0JCXMgPSAiTm90IENvbm5lY3RlZCI7Ci0JCWJyZWFrOwotCWNhc2UgSEVSTUVTX0xJTktTVEFUVVNfQ09OTkVDVEVEOgotCQlzID0gIkNvbm5lY3RlZCI7Ci0JCWJyZWFrOwotCWNhc2UgSEVSTUVTX0xJTktTVEFUVVNfRElTQ09OTkVDVEVEOgotCQlzID0gIkRpc2Nvbm5lY3RlZCI7Ci0JCWJyZWFrOwotCWNhc2UgSEVSTUVTX0xJTktTVEFUVVNfQVBfQ0hBTkdFOgotCQlzID0gIkFQIENoYW5nZWQiOwotCQlicmVhazsKLQljYXNlIEhFUk1FU19MSU5LU1RBVFVTX0FQX09VVF9PRl9SQU5HRToKLQkJcyA9ICJBUCBPdXQgb2YgUmFuZ2UiOwotCQlicmVhazsKLQljYXNlIEhFUk1FU19MSU5LU1RBVFVTX0FQX0lOX1JBTkdFOgotCQlzID0gIkFQIEluIFJhbmdlIjsKLQkJYnJlYWs7Ci0JY2FzZSBIRVJNRVNfTElOS1NUQVRVU19BU1NPQ19GQUlMRUQ6Ci0JCXMgPSAiQXNzb2NpYXRpb24gRmFpbGVkIjsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcyA9ICJVTktOT1dOIjsKLQl9Ci0JCi0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBOZXcgbGluayBzdGF0dXM6ICVzICglMDR4KVxuIiwKLQkgICAgICAgZGV2LT5uYW1lLCBzLCBzdGF0dXMpOwotfQotCi0vKiBTZWFyY2ggc2NhbiByZXN1bHRzIGZvciByZXF1ZXN0ZWQgQlNTSUQsIGpvaW4gaXQgaWYgZm91bmQgKi8KLXN0YXRpYyB2b2lkIG9yaW5vY29fam9pbl9hcChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9Ci0JCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlLCBqb2luX3dvcmspOwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwcml2LT5uZGV2OwotCXN0cnVjdCBoZXJtZXMgKmh3ID0gJnByaXYtPmh3OwotCWludCBlcnI7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3Qgam9pbl9yZXEgewotCQl1OCBic3NpZFtFVEhfQUxFTl07Ci0JCV9fbGUxNiBjaGFubmVsOwotCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHJlcTsKLQljb25zdCBpbnQgYXRvbV9sZW4gPSBvZmZzZXRvZihzdHJ1Y3QgcHJpc20yX3NjYW5fYXBpbmZvLCBhdGltKTsKLQlzdHJ1Y3QgcHJpc20yX3NjYW5fYXBpbmZvICphdG9tID0gTlVMTDsKLQlpbnQgb2Zmc2V0ID0gNDsKLQlpbnQgZm91bmQgPSAwOwotCXU4ICpidWY7Ci0JdTE2IGxlbjsKLQotCS8qIEFsbG9jYXRlIGJ1ZmZlciBmb3Igc2NhbiByZXN1bHRzICovCi0JYnVmID0ga21hbGxvYyhNQVhfU0NBTl9MRU4sIEdGUF9LRVJORUwpOwotCWlmICghIGJ1ZikKLQkJcmV0dXJuOwotCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCWdvdG8gZmFpbF9sb2NrOwotCi0JLyogU2FuaXR5IGNoZWNrcyBpbiBjYXNlIHVzZXIgY2hhbmdlZCBzb21ldGhpbmcgaW4gdGhlIG1lYW50aW1lICovCi0JaWYgKCEgcHJpdi0+YnNzaWRfZml4ZWQpCi0JCWdvdG8gb3V0OwotCi0JaWYgKHN0cmxlbihwcml2LT5kZXNpcmVkX2Vzc2lkKSA9PSAwKQotCQlnb3RvIG91dDsKLQotCS8qIFJlYWQgc2NhbiByZXN1bHRzIGZyb20gdGhlIGZpcm13YXJlICovCi0JZXJyID0gaGVybWVzX3JlYWRfbHR2KGh3LCBVU0VSX0JBUCwKLQkJCSAgICAgIEhFUk1FU19SSURfU0NBTlJFU1VMVFNUQUJMRSwKLQkJCSAgICAgIE1BWF9TQ0FOX0xFTiwgJmxlbiwgYnVmKTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCByZWFkIHNjYW4gcmVzdWx0c1xuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWxlbiA9IEhFUk1FU19SRUNMRU5fVE9fQllURVMobGVuKTsKLQotCS8qIEdvIHRocm91Z2ggdGhlIHNjYW4gcmVzdWx0cyBsb29raW5nIGZvciB0aGUgY2hhbm5lbCBvZiB0aGUgQVAKLQkgKiB3ZSB3ZXJlIHJlcXVlc3RlZCB0byBqb2luICovCi0JZm9yICg7IG9mZnNldCArIGF0b21fbGVuIDw9IGxlbjsgb2Zmc2V0ICs9IGF0b21fbGVuKSB7Ci0JCWF0b20gPSAoc3RydWN0IHByaXNtMl9zY2FuX2FwaW5mbyAqKSAoYnVmICsgb2Zmc2V0KTsKLQkJaWYgKG1lbWNtcCgmYXRvbS0+YnNzaWQsIHByaXYtPmRlc2lyZWRfYnNzaWQsIEVUSF9BTEVOKSA9PSAwKSB7Ci0JCQlmb3VuZCA9IDE7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCWlmICghIGZvdW5kKSB7Ci0JCURFQlVHKDEsICIlczogUmVxdWVzdGVkIEFQIG5vdCBmb3VuZCBpbiBzY2FuIHJlc3VsdHNcbiIsCi0JCSAgICAgIGRldi0+bmFtZSk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCW1lbWNweShyZXEuYnNzaWQsIHByaXYtPmRlc2lyZWRfYnNzaWQsIEVUSF9BTEVOKTsKLQlyZXEuY2hhbm5lbCA9IGF0b20tPmNoYW5uZWw7CS8qIGJvdGggYXJlIGxpdHRsZS1lbmRpYW4gKi8KLQllcnIgPSBIRVJNRVNfV1JJVEVfUkVDT1JEKGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DTkZKT0lOUkVRVUVTVCwKLQkJCQkgICZyZXEpOwotCWlmIChlcnIpCi0JCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yIGlzc3Vpbmcgam9pbiByZXF1ZXN0XG4iLCBkZXYtPm5hbWUpOwotCi0gb3V0OgotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0KLSBmYWlsX2xvY2s6Ci0Ja2ZyZWUoYnVmKTsKLX0KLQotLyogU2VuZCBuZXcgQlNTSUQgdG8gdXNlcnNwYWNlICovCi1zdGF0aWMgdm9pZCBvcmlub2NvX3NlbmRfYnNzaWRfd2V2ZW50KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXYtPm5kZXY7Ci0Jc3RydWN0IGhlcm1lcyAqaHcgPSAmcHJpdi0+aHc7Ci0JdW5pb24gaXdyZXFfZGF0YSB3cnF1OwotCWludCBlcnI7Ci0KLQllcnIgPSBoZXJtZXNfcmVhZF9sdHYoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NVUlJFTlRCU1NJRCwKLQkJCSAgICAgIEVUSF9BTEVOLCBOVUxMLCB3cnF1LmFwX2FkZHIuc2FfZGF0YSk7Ci0JaWYgKGVyciAhPSAwKQotCQlyZXR1cm47Ci0KLQl3cnF1LmFwX2FkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOwotCi0JLyogU2VuZCBldmVudCB0byB1c2VyIHNwYWNlICovCi0Jd2lyZWxlc3Nfc2VuZF9ldmVudChkZXYsIFNJT0NHSVdBUCwgJndycXUsIE5VTEwpOwotfQotCi1zdGF0aWMgdm9pZCBvcmlub2NvX3NlbmRfYXNzb2NyZXFpZV93ZXZlbnQoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+bmRldjsKLQlzdHJ1Y3QgaGVybWVzICpodyA9ICZwcml2LT5odzsKLQl1bmlvbiBpd3JlcV9kYXRhIHdycXU7Ci0JaW50IGVycjsKLQl1OCBidWZbODhdOwotCXU4ICppZTsKLQotCWlmICghcHJpdi0+aGFzX3dwYSkKLQkJcmV0dXJuOwotCi0JZXJyID0gaGVybWVzX3JlYWRfbHR2KGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DVVJSRU5UX0FTU09DX1JFUV9JTkZPLAotCQkJICAgICAgc2l6ZW9mKGJ1ZiksIE5VTEwsICZidWYpOwotCWlmIChlcnIgIT0gMCkKLQkJcmV0dXJuOwotCi0JaWUgPSBvcmlub2NvX2dldF93cGFfaWUoYnVmLCBzaXplb2YoYnVmKSk7Ci0JaWYgKGllKSB7Ci0JCWludCByZW0gPSBzaXplb2YoYnVmKSAtIChpZSAtICZidWZbMF0pOwotCQl3cnF1LmRhdGEubGVuZ3RoID0gaWVbMV0gKyAyOwotCQlpZiAod3JxdS5kYXRhLmxlbmd0aCA+IHJlbSkKLQkJCXdycXUuZGF0YS5sZW5ndGggPSByZW07Ci0KLQkJaWYgKHdycXUuZGF0YS5sZW5ndGgpCi0JCQkvKiBTZW5kIGV2ZW50IHRvIHVzZXIgc3BhY2UgKi8KLQkJCXdpcmVsZXNzX3NlbmRfZXZlbnQoZGV2LCBJV0VWQVNTT0NSRVFJRSwgJndycXUsIGllKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIG9yaW5vY29fc2VuZF9hc3NvY3Jlc3BpZV93ZXZlbnQoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+bmRldjsKLQlzdHJ1Y3QgaGVybWVzICpodyA9ICZwcml2LT5odzsKLQl1bmlvbiBpd3JlcV9kYXRhIHdycXU7Ci0JaW50IGVycjsKLQl1OCBidWZbODhdOyAvKiBUT0RPOiB2ZXJpZnkgbWF4IHNpemUgb3IgSVdfR0VORVJJQ19JRV9NQVggKi8KLQl1OCAqaWU7Ci0KLQlpZiAoIXByaXYtPmhhc193cGEpCi0JCXJldHVybjsKLQotCWVyciA9IGhlcm1lc19yZWFkX2x0dihodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ1VSUkVOVF9BU1NPQ19SRVNQX0lORk8sCi0JCQkgICAgICBzaXplb2YoYnVmKSwgTlVMTCwgJmJ1Zik7Ci0JaWYgKGVyciAhPSAwKQotCQlyZXR1cm47Ci0KLQlpZSA9IG9yaW5vY29fZ2V0X3dwYV9pZShidWYsIHNpemVvZihidWYpKTsKLQlpZiAoaWUpIHsKLQkJaW50IHJlbSA9IHNpemVvZihidWYpIC0gKGllIC0gJmJ1ZlswXSk7Ci0JCXdycXUuZGF0YS5sZW5ndGggPSBpZVsxXSArIDI7Ci0JCWlmICh3cnF1LmRhdGEubGVuZ3RoID4gcmVtKQotCQkJd3JxdS5kYXRhLmxlbmd0aCA9IHJlbTsKLQotCQlpZiAod3JxdS5kYXRhLmxlbmd0aCkKLQkJCS8qIFNlbmQgZXZlbnQgdG8gdXNlciBzcGFjZSAqLwotCQkJd2lyZWxlc3Nfc2VuZF9ldmVudChkZXYsIElXRVZBU1NPQ1JFU1BJRSwgJndycXUsIGllKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIG9yaW5vY29fc2VuZF93ZXZlbnRzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0KLQkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBvcmlub2NvX3ByaXZhdGUsIHdldmVudF93b3JrKTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCXJldHVybjsKLQotCW9yaW5vY29fc2VuZF9hc3NvY3JlcWllX3dldmVudChwcml2KTsKLQlvcmlub2NvX3NlbmRfYXNzb2NyZXNwaWVfd2V2ZW50KHByaXYpOwotCW9yaW5vY29fc2VuZF9ic3NpZF93ZXZlbnQocHJpdik7Ci0KLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgb3Jpbm9jb19jbGVhcl9zY2FuX3Jlc3VsdHMoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwKLQkJCQkJICAgICAgdW5zaWduZWQgbG9uZyBzY2FuX2FnZSkKLXsKLQlpZiAocHJpdi0+aGFzX2V4dF9zY2FuKSB7Ci0JCXN0cnVjdCB4YnNzX2VsZW1lbnQgKmJzczsKLQkJc3RydWN0IHhic3NfZWxlbWVudCAqdG1wX2JzczsKLQotCQkvKiBCbG93IGF3YXkgY3VycmVudCBsaXN0IG9mIHNjYW4gcmVzdWx0cyAqLwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoYnNzLCB0bXBfYnNzLCAmcHJpdi0+YnNzX2xpc3QsIGxpc3QpIHsKLQkJCWlmICghc2Nhbl9hZ2UgfHwKLQkJCSAgICB0aW1lX2FmdGVyKGppZmZpZXMsIGJzcy0+bGFzdF9zY2FubmVkICsgc2Nhbl9hZ2UpKSB7Ci0JCQkJbGlzdF9tb3ZlX3RhaWwoJmJzcy0+bGlzdCwKLQkJCQkJICAgICAgICZwcml2LT5ic3NfZnJlZV9saXN0KTsKLQkJCQkvKiBEb24ndCBibG93IGF3YXkgLT5saXN0LCBqdXN0IEJTUyBkYXRhICovCi0JCQkJbWVtc2V0KCZic3MtPmJzcywgMCwgc2l6ZW9mKGJzcy0+YnNzKSk7Ci0JCQkJYnNzLT5sYXN0X3NjYW5uZWQgPSAwOwotCQkJfQotCQl9Ci0JfSBlbHNlIHsKLQkJc3RydWN0IGJzc19lbGVtZW50ICpic3M7Ci0JCXN0cnVjdCBic3NfZWxlbWVudCAqdG1wX2JzczsKLQotCQkvKiBCbG93IGF3YXkgY3VycmVudCBsaXN0IG9mIHNjYW4gcmVzdWx0cyAqLwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoYnNzLCB0bXBfYnNzLCAmcHJpdi0+YnNzX2xpc3QsIGxpc3QpIHsKLQkJCWlmICghc2Nhbl9hZ2UgfHwKLQkJCSAgICB0aW1lX2FmdGVyKGppZmZpZXMsIGJzcy0+bGFzdF9zY2FubmVkICsgc2Nhbl9hZ2UpKSB7Ci0JCQkJbGlzdF9tb3ZlX3RhaWwoJmJzcy0+bGlzdCwKLQkJCQkJICAgICAgICZwcml2LT5ic3NfZnJlZV9saXN0KTsKLQkJCQkvKiBEb24ndCBibG93IGF3YXkgLT5saXN0LCBqdXN0IEJTUyBkYXRhICovCi0JCQkJbWVtc2V0KCZic3MtPmJzcywgMCwgc2l6ZW9mKGJzcy0+YnNzKSk7Ci0JCQkJYnNzLT5sYXN0X3NjYW5uZWQgPSAwOwotCQkJfQotCQl9Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBvcmlub2NvX2FkZF9leHRfc2Nhbl9yZXN1bHQoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwKLQkJCQkJc3RydWN0IGFnZXJlX2V4dF9zY2FuX2luZm8gKmF0b20pCi17Ci0Jc3RydWN0IHhic3NfZWxlbWVudCAqYnNzID0gTlVMTDsKLQlpbnQgZm91bmQgPSAwOwotCi0JLyogVHJ5IHRvIHVwZGF0ZSBhbiBleGlzdGluZyBic3MgZmlyc3QgKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJzcywgJnByaXYtPmJzc19saXN0LCBsaXN0KSB7Ci0JCWlmIChjb21wYXJlX2V0aGVyX2FkZHIoYnNzLT5ic3MuYnNzaWQsIGF0b20tPmJzc2lkKSkKLQkJCWNvbnRpbnVlOwotCQkvKiBFU1NJRCBsZW5ndGhzICovCi0JCWlmIChic3MtPmJzcy5kYXRhWzFdICE9IGF0b20tPmRhdGFbMV0pCi0JCQljb250aW51ZTsKLQkJaWYgKG1lbWNtcCgmYnNzLT5ic3MuZGF0YVsyXSwgJmF0b20tPmRhdGFbMl0sCi0JCQkgICBhdG9tLT5kYXRhWzFdKSkKLQkJCWNvbnRpbnVlOwotCQlmb3VuZCA9IDE7Ci0JCWJyZWFrOwotCX0KLQotCS8qIEdyYWIgYSBic3Mgb2ZmIHRoZSBmcmVlIGxpc3QgKi8KLQlpZiAoIWZvdW5kICYmICFsaXN0X2VtcHR5KCZwcml2LT5ic3NfZnJlZV9saXN0KSkgewotCQlic3MgPSBsaXN0X2VudHJ5KHByaXYtPmJzc19mcmVlX2xpc3QubmV4dCwKLQkJCQkgc3RydWN0IHhic3NfZWxlbWVudCwgbGlzdCk7Ci0JCWxpc3RfZGVsKHByaXYtPmJzc19mcmVlX2xpc3QubmV4dCk7Ci0KLQkJbGlzdF9hZGRfdGFpbCgmYnNzLT5saXN0LCAmcHJpdi0+YnNzX2xpc3QpOwotCX0KLQotCWlmIChic3MpIHsKLQkJLyogQWx3YXlzIHVwZGF0ZSB0aGUgQlNTIHRvIGdldCBsYXRlc3QgYmVhY29uIGluZm8gKi8KLQkJbWVtY3B5KCZic3MtPmJzcywgYXRvbSwgc2l6ZW9mKGJzcy0+YnNzKSk7Ci0JCWJzcy0+bGFzdF9zY2FubmVkID0gamlmZmllczsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19wcm9jZXNzX3NjYW5fcmVzdWx0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCQl1bnNpZ25lZCBjaGFyICpidWYsCi0JCQkJCWludCBsZW4pCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50CQkJb2Zmc2V0OwkJLyogSW4gdGhlIHNjYW4gZGF0YSAqLwotCXVuaW9uIGhlcm1lc19zY2FuX2luZm8gKmF0b207Ci0JaW50CQkJYXRvbV9sZW47Ci0KLQlzd2l0Y2ggKHByaXYtPmZpcm13YXJlX3R5cGUpIHsKLQljYXNlIEZJUk1XQVJFX1RZUEVfQUdFUkU6Ci0JCWF0b21fbGVuID0gc2l6ZW9mKHN0cnVjdCBhZ2VyZV9zY2FuX2FwaW5mbyk7Ci0JCW9mZnNldCA9IDA7Ci0JCWJyZWFrOwotCWNhc2UgRklSTVdBUkVfVFlQRV9TWU1CT0w6Ci0JCS8qIExhY2sgb2YgZG9jdW1lbnRhdGlvbiBuZWNlc3NpdGF0ZXMgdGhpcyBoYWNrLgotCQkgKiBEaWZmZXJlbnQgZmlybXdhcmVzIGhhdmUgNjggb3IgNzYgYnl0ZSBsb25nIGF0b21zLgotCQkgKiBXZSB0cnkgbW9kdWxvIGZpcnN0LiAgSWYgdGhlIGxlbmd0aCBkaXZpZGVzIGJ5IGJvdGgsCi0JCSAqIHdlIGNoZWNrIHdoYXQgd291bGQgYmUgdGhlIGNoYW5uZWwgaW4gdGhlIHNlY29uZAotCQkgKiBmcmFtZSBmb3IgYSA2OC1ieXRlIGF0b20uICA3Ni1ieXRlIGF0b21zIGhhdmUgMCB0aGVyZS4KLQkJICogVmFsaWQgY2hhbm5lbCBjYW5ub3QgYmUgMC4gICovCi0JCWlmIChsZW4gJSA3NikKLQkJCWF0b21fbGVuID0gNjg7Ci0JCWVsc2UgaWYgKGxlbiAlIDY4KQotCQkJYXRvbV9sZW4gPSA3NjsKLQkJZWxzZSBpZiAobGVuID49IDEyOTIgJiYgYnVmWzY4XSA9PSAwKQotCQkJYXRvbV9sZW4gPSA3NjsKLQkJZWxzZQotCQkJYXRvbV9sZW4gPSA2ODsKLQkJb2Zmc2V0ID0gMDsKLQkJYnJlYWs7Ci0JY2FzZSBGSVJNV0FSRV9UWVBFX0lOVEVSU0lMOgotCQlvZmZzZXQgPSA0OwotCQlpZiAocHJpdi0+aGFzX2hvc3RzY2FuKSB7Ci0JCQlhdG9tX2xlbiA9IGxlMTZfdG9fY3B1cCgoX19sZTE2ICopYnVmKTsKLQkJCS8qIFNhbml0eSBjaGVjayBmb3IgYXRvbV9sZW4gKi8KLQkJCWlmIChhdG9tX2xlbiA8IHNpemVvZihzdHJ1Y3QgcHJpc20yX3NjYW5fYXBpbmZvKSkgewotCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEludmFsaWQgYXRvbV9sZW4gaW4gc2NhbiAiCi0JCQkJICAgICAgICJkYXRhOiAlZFxuIiwgZGV2LT5uYW1lLCBhdG9tX2xlbik7Ci0JCQkJcmV0dXJuIC1FSU87Ci0JCQl9Ci0JCX0gZWxzZQotCQkJYXRvbV9sZW4gPSBvZmZzZXRvZihzdHJ1Y3QgcHJpc20yX3NjYW5fYXBpbmZvLCBhdGltKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCX0KLQotCS8qIENoZWNrIHRoYXQgd2UgZ290IGFuIHdob2xlIG51bWJlciBvZiBhdG9tcyAqLwotCWlmICgobGVuIC0gb2Zmc2V0KSAlIGF0b21fbGVuKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IFVuZXhwZWN0ZWQgc2NhbiBkYXRhIGxlbmd0aCAlZCwgIgotCQkgICAgICAgImF0b21fbGVuICVkLCBvZmZzZXQgJWRcbiIsIGRldi0+bmFtZSwgbGVuLAotCQkgICAgICAgYXRvbV9sZW4sIG9mZnNldCk7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCW9yaW5vY29fY2xlYXJfc2Nhbl9yZXN1bHRzKHByaXYsIG1zZWNzX3RvX2ppZmZpZXMoMTUwMDApKTsKLQotCS8qIFJlYWQgdGhlIGVudHJpZXMgb25lIGJ5IG9uZSAqLwotCWZvciAoOyBvZmZzZXQgKyBhdG9tX2xlbiA8PSBsZW47IG9mZnNldCArPSBhdG9tX2xlbikgewotCQlpbnQgZm91bmQgPSAwOwotCQlzdHJ1Y3QgYnNzX2VsZW1lbnQgKmJzcyA9IE5VTEw7Ci0KLQkJLyogR2V0IG5leHQgYXRvbSAqLwotCQlhdG9tID0gKHVuaW9uIGhlcm1lc19zY2FuX2luZm8gKikgKGJ1ZiArIG9mZnNldCk7Ci0KLQkJLyogVHJ5IHRvIHVwZGF0ZSBhbiBleGlzdGluZyBic3MgZmlyc3QgKi8KLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShic3MsICZwcml2LT5ic3NfbGlzdCwgbGlzdCkgewotCQkJaWYgKGNvbXBhcmVfZXRoZXJfYWRkcihic3MtPmJzcy5hLmJzc2lkLCBhdG9tLT5hLmJzc2lkKSkKLQkJCQljb250aW51ZTsKLQkJCWlmIChsZTE2X3RvX2NwdShic3MtPmJzcy5hLmVzc2lkX2xlbikgIT0KLQkJCSAgICAgIGxlMTZfdG9fY3B1KGF0b20tPmEuZXNzaWRfbGVuKSkKLQkJCQljb250aW51ZTsKLQkJCWlmIChtZW1jbXAoYnNzLT5ic3MuYS5lc3NpZCwgYXRvbS0+YS5lc3NpZCwKLQkJCSAgICAgIGxlMTZfdG9fY3B1KGF0b20tPmEuZXNzaWRfbGVuKSkpCi0JCQkJY29udGludWU7Ci0JCQlmb3VuZCA9IDE7Ci0JCQlicmVhazsKLQkJfQotCi0JCS8qIEdyYWIgYSBic3Mgb2ZmIHRoZSBmcmVlIGxpc3QgKi8KLQkJaWYgKCFmb3VuZCAmJiAhbGlzdF9lbXB0eSgmcHJpdi0+YnNzX2ZyZWVfbGlzdCkpIHsKLQkJCWJzcyA9IGxpc3RfZW50cnkocHJpdi0+YnNzX2ZyZWVfbGlzdC5uZXh0LAotCQkJCQkgc3RydWN0IGJzc19lbGVtZW50LCBsaXN0KTsKLQkJCWxpc3RfZGVsKHByaXYtPmJzc19mcmVlX2xpc3QubmV4dCk7Ci0KLQkJCWxpc3RfYWRkX3RhaWwoJmJzcy0+bGlzdCwgJnByaXYtPmJzc19saXN0KTsKLQkJfQotCi0JCWlmIChic3MpIHsKLQkJCS8qIEFsd2F5cyB1cGRhdGUgdGhlIEJTUyB0byBnZXQgbGF0ZXN0IGJlYWNvbiBpbmZvICovCi0JCQltZW1jcHkoJmJzcy0+YnNzLCBhdG9tLCBzaXplb2YoYnNzLT5ic3MpKTsKLQkJCWJzcy0+bGFzdF9zY2FubmVkID0gamlmZmllczsKLQkJfQotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBfX29yaW5vY29fZXZfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBoZXJtZXNfdCAqaHcpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JdTE2IGluZm9maWQ7Ci0Jc3RydWN0IHsKLQkJX19sZTE2IGxlbjsKLQkJX19sZTE2IHR5cGU7Ci0JfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgaW5mbzsKLQlpbnQgbGVuLCB0eXBlOwotCWludCBlcnI7Ci0KLQkvKiBUaGlzIGlzIGFuIGFuc3dlciB0byBhbiBJTlFVSVJFIGNvbW1hbmQgdGhhdCB3ZSBkaWQgZWFybGllciwKLQkgKiBvciBhbiBpbmZvcm1hdGlvbiAiZXZlbnQiIGdlbmVyYXRlZCBieSB0aGUgY2FyZAotCSAqIFRoZSBjb250cm9sbGVyIHJldHVybiB0byB1cyBhIHBzZXVkbyBmcmFtZSBjb250YWluaW5nCi0JICogdGhlIGluZm9ybWF0aW9uIGluIHF1ZXN0aW9uIC0gSmVhbiBJSSAqLwotCWluZm9maWQgPSBoZXJtZXNfcmVhZF9yZWduKGh3LCBJTkZPRklEKTsKLQotCS8qIFJlYWQgdGhlIGluZm8gZnJhbWUgaGVhZGVyIC0gZG9uJ3QgdHJ5IHRvbyBoYXJkICovCi0JZXJyID0gaGVybWVzX2JhcF9wcmVhZChodywgSVJRX0JBUCwgJmluZm8sIHNpemVvZihpbmZvKSwKLQkJCSAgICAgICBpbmZvZmlkLCAwKTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGVycm9yICVkIHJlYWRpbmcgaW5mbyBmcmFtZS4gIgotCQkgICAgICAgIkZyYW1lIGRyb3BwZWQuXG4iLCBkZXYtPm5hbWUsIGVycik7Ci0JCXJldHVybjsKLQl9Ci0JCi0JbGVuID0gSEVSTUVTX1JFQ0xFTl9UT19CWVRFUyhsZTE2X3RvX2NwdShpbmZvLmxlbikpOwotCXR5cGUgPSBsZTE2X3RvX2NwdShpbmZvLnR5cGUpOwotCi0Jc3dpdGNoICh0eXBlKSB7Ci0JY2FzZSBIRVJNRVNfSU5RX1RBTExJRVM6IHsKLQkJc3RydWN0IGhlcm1lc190YWxsaWVzX2ZyYW1lIHRhbGxpZXM7Ci0JCXN0cnVjdCBpd19zdGF0aXN0aWNzICp3c3RhdHMgPSAmcHJpdi0+d3N0YXRzOwotCQkKLQkJaWYgKGxlbiA+IHNpemVvZih0YWxsaWVzKSkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFRhbGxpZXMgZnJhbWUgdG9vIGxvbmcgKCVkIGJ5dGVzKVxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIGxlbik7Ci0JCQlsZW4gPSBzaXplb2YodGFsbGllcyk7Ci0JCX0KLQkJCi0JCWVyciA9IGhlcm1lc19iYXBfcHJlYWQoaHcsIElSUV9CQVAsICZ0YWxsaWVzLCBsZW4sCi0JCQkJICAgICAgIGluZm9maWQsIHNpemVvZihpbmZvKSk7Ci0JCWlmIChlcnIpCi0JCQlicmVhazsKLQkJCi0JCS8qIEluY3JlbWVudCBvdXIgdmFyaW91cyBjb3VudGVycyAqLwotCQkvKiB3c3RhdHMtPmRpc2NhcmQubndpZCAtIG5vIHdyb25nIEJTU0lEIHN0dWZmICovCi0JCXdzdGF0cy0+ZGlzY2FyZC5jb2RlICs9Ci0JCQlsZTE2X3RvX2NwdSh0YWxsaWVzLlJ4V0VQVW5kZWNyeXB0YWJsZSk7Ci0JCWlmIChsZW4gPT0gc2l6ZW9mKHRhbGxpZXMpKSAgCi0JCQl3c3RhdHMtPmRpc2NhcmQuY29kZSArPQotCQkJCWxlMTZfdG9fY3B1KHRhbGxpZXMuUnhEaXNjYXJkc19XRVBJQ1ZFcnJvcikgKwotCQkJCWxlMTZfdG9fY3B1KHRhbGxpZXMuUnhEaXNjYXJkc19XRVBFeGNsdWRlZCk7Ci0JCXdzdGF0cy0+ZGlzY2FyZC5taXNjICs9Ci0JCQlsZTE2X3RvX2NwdSh0YWxsaWVzLlR4RGlzY2FyZHNXcm9uZ1NBKTsKLQkJd3N0YXRzLT5kaXNjYXJkLmZyYWdtZW50ICs9Ci0JCQlsZTE2X3RvX2NwdSh0YWxsaWVzLlJ4TXNnSW5CYWRNc2dGcmFnbWVudHMpOwotCQl3c3RhdHMtPmRpc2NhcmQucmV0cmllcyArPQotCQkJbGUxNl90b19jcHUodGFsbGllcy5UeFJldHJ5TGltaXRFeGNlZWRlZCk7Ci0JCS8qIHdzdGF0cy0+bWlzcy5iZWFjb24gLSBubyBtYXRjaCAqLwotCX0KLQlicmVhazsKLQljYXNlIEhFUk1FU19JTlFfTElOS1NUQVRVUzogewotCQlzdHJ1Y3QgaGVybWVzX2xpbmtzdGF0dXMgbGlua3N0YXR1czsKLQkJdTE2IG5ld3N0YXR1czsKLQkJaW50IGNvbm5lY3RlZDsKLQotCQlpZiAocHJpdi0+aXdfbW9kZSA9PSBJV19NT0RFX01PTklUT1IpCi0JCQlicmVhazsKLQotCQlpZiAobGVuICE9IHNpemVvZihsaW5rc3RhdHVzKSkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFVuZXhwZWN0ZWQgc2l6ZSBmb3IgbGlua3N0YXR1cyBmcmFtZSAoJWQgYnl0ZXMpXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgbGVuKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJZXJyID0gaGVybWVzX2JhcF9wcmVhZChodywgSVJRX0JBUCwgJmxpbmtzdGF0dXMsIGxlbiwKLQkJCQkgICAgICAgaW5mb2ZpZCwgc2l6ZW9mKGluZm8pKTsKLQkJaWYgKGVycikKLQkJCWJyZWFrOwotCQluZXdzdGF0dXMgPSBsZTE2X3RvX2NwdShsaW5rc3RhdHVzLmxpbmtzdGF0dXMpOwotCi0JCS8qIFN5bWJvbCBmaXJtd2FyZSB1c2VzICJvdXQgb2YgcmFuZ2UiIHRvIHNpZ25hbCB0aGF0Ci0JCSAqIHRoZSBob3N0c2NhbiBmcmFtZSBjYW4gYmUgcmVxdWVzdGVkLiAgKi8KLQkJaWYgKG5ld3N0YXR1cyA9PSBIRVJNRVNfTElOS1NUQVRVU19BUF9PVVRfT0ZfUkFOR0UgJiYKLQkJICAgIHByaXYtPmZpcm13YXJlX3R5cGUgPT0gRklSTVdBUkVfVFlQRV9TWU1CT0wgJiYKLQkJICAgIHByaXYtPmhhc19ob3N0c2NhbiAmJiBwcml2LT5zY2FuX2lucHJvZ3Jlc3MpIHsKLQkJCWhlcm1lc19pbnF1aXJlKGh3LCBIRVJNRVNfSU5RX0hPU1RTQ0FOX1NZTUJPTCk7Ci0JCQlicmVhazsKLQkJfQotCi0JCWNvbm5lY3RlZCA9IChuZXdzdGF0dXMgPT0gSEVSTUVTX0xJTktTVEFUVVNfQ09OTkVDVEVEKQotCQkJfHwgKG5ld3N0YXR1cyA9PSBIRVJNRVNfTElOS1NUQVRVU19BUF9DSEFOR0UpCi0JCQl8fCAobmV3c3RhdHVzID09IEhFUk1FU19MSU5LU1RBVFVTX0FQX0lOX1JBTkdFKTsKLQotCQlpZiAoY29ubmVjdGVkKQotCQkJbmV0aWZfY2Fycmllcl9vbihkZXYpOwotCQllbHNlIGlmICghaWdub3JlX2Rpc2Nvbm5lY3QpCi0JCQluZXRpZl9jYXJyaWVyX29mZihkZXYpOwotCi0JCWlmIChuZXdzdGF0dXMgIT0gcHJpdi0+bGFzdF9saW5rc3RhdHVzKSB7Ci0JCQlwcml2LT5sYXN0X2xpbmtzdGF0dXMgPSBuZXdzdGF0dXM7Ci0JCQlwcmludF9saW5rc3RhdHVzKGRldiwgbmV3c3RhdHVzKTsKLQkJCS8qIFRoZSBpbmZvIGZyYW1lIGNvbnRhaW5zIG9ubHkgb25lIHdvcmQgd2hpY2ggaXMgdGhlCi0JCQkgKiBzdGF0dXMgKHNlZSBoZXJtZXMuaCkuIFRoZSBzdGF0dXMgaXMgcHJldHR5IGJvcmluZwotCQkJICogaW4gaXRzZWxmLCB0aGF0J3Mgd2h5IHdlIGV4cG9ydCB0aGUgbmV3IEJTU0lELi4uCi0JCQkgKiBKZWFuIElJICovCi0JCQlzY2hlZHVsZV93b3JrKCZwcml2LT53ZXZlbnRfd29yayk7Ci0JCX0KLQl9Ci0JYnJlYWs7Ci0JY2FzZSBIRVJNRVNfSU5RX1NDQU46Ci0JCWlmICghcHJpdi0+c2Nhbl9pbnByb2dyZXNzICYmIHByaXYtPmJzc2lkX2ZpeGVkICYmCi0JCSAgICBwcml2LT5maXJtd2FyZV90eXBlID09IEZJUk1XQVJFX1RZUEVfSU5URVJTSUwpIHsKLQkJCXNjaGVkdWxlX3dvcmsoJnByaXYtPmpvaW5fd29yayk7Ci0JCQlicmVhazsKLQkJfQotCQkvKiBmYWxsIHRocm91Z2ggKi8KLQljYXNlIEhFUk1FU19JTlFfSE9TVFNDQU46Ci0JY2FzZSBIRVJNRVNfSU5RX0hPU1RTQ0FOX1NZTUJPTDogewotCQkvKiBSZXN1bHQgb2YgYSBzY2FubmluZy4gQ29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQKLQkJICogY2VsbHMgaW4gdGhlIHZpY2luaXR5IC0gSmVhbiBJSSAqLwotCQl1bmlvbiBpd3JlcV9kYXRhCXdycXU7Ci0JCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKLQotCQkvKiBTY2FuIGlzIG5vIGxvbmdlciBpbiBwcm9ncmVzcyAqLwotCQlwcml2LT5zY2FuX2lucHJvZ3Jlc3MgPSAwOwotCi0JCS8qIFNhbml0eSBjaGVjayAqLwotCQlpZiAobGVuID4gNDA5NikgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFNjYW4gcmVzdWx0cyB0b28gbGFyZ2UgKCVkIGJ5dGVzKVxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIGxlbik7Ci0JCQlicmVhazsKLQkJfQotCi0JCS8qIEFsbG9jYXRlIGJ1ZmZlciBmb3IgcmVzdWx0cyAqLwotCQlidWYgPSBrbWFsbG9jKGxlbiwgR0ZQX0FUT01JQyk7Ci0JCWlmIChidWYgPT0gTlVMTCkKLQkJCS8qIE5vIG1lbW9yeSwgc28gY2FuJ3QgcHJpbnRrKCkuLi4gKi8KLQkJCWJyZWFrOwotCi0JCS8qIFJlYWQgc2NhbiBkYXRhICovCi0JCWVyciA9IGhlcm1lc19iYXBfcHJlYWQoaHcsIElSUV9CQVAsICh2b2lkICopIGJ1ZiwgbGVuLAotCQkJCSAgICAgICBpbmZvZmlkLCBzaXplb2YoaW5mbykpOwotCQlpZiAoZXJyKSB7Ci0JCQlrZnJlZShidWYpOwotCQkJYnJlYWs7Ci0JCX0KLQotI2lmZGVmIE9SSU5PQ09fREVCVUcKLQkJewotCQkJaW50CWk7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiU2NhbiByZXN1bHQgWyUwMlgiLCBidWZbMF0pOwotCQkJZm9yKGkgPSAxOyBpIDwgKGxlbiAqIDIpOyBpKyspCi0JCQkJcHJpbnRrKCI6JTAyWCIsIGJ1ZltpXSk7Ci0JCQlwcmludGsoIl1cbiIpOwotCQl9Ci0jZW5kaWYJLyogT1JJTk9DT19ERUJVRyAqLwotCi0JCWlmIChvcmlub2NvX3Byb2Nlc3Nfc2Nhbl9yZXN1bHRzKGRldiwgYnVmLCBsZW4pID09IDApIHsKLQkJCS8qIFNlbmQgYW4gZW1wdHkgZXZlbnQgdG8gdXNlciBzcGFjZS4KLQkJCSAqIFdlIGRvbid0IHNlbmQgdGhlIHJlY2VpdmVkIGRhdGEgb24gdGhlIGV2ZW50IGJlY2F1c2UKLQkJCSAqIGl0IHdvdWxkIHJlcXVpcmUgdXMgdG8gZG8gY29tcGxleCB0cmFuc2NvZGluZywgYW5kCi0JCQkgKiB3ZSB3YW50IHRvIG1pbmltaXNlIHRoZSB3b3JrIGRvbmUgaW4gdGhlIGlycSBoYW5kbGVyCi0JCQkgKiBVc2UgYSByZXF1ZXN0IHRvIGV4dHJhY3QgdGhlIGRhdGEgLSBKZWFuIElJICovCi0JCQl3cnF1LmRhdGEubGVuZ3RoID0gMDsKLQkJCXdycXUuZGF0YS5mbGFncyA9IDA7Ci0JCQl3aXJlbGVzc19zZW5kX2V2ZW50KGRldiwgU0lPQ0dJV1NDQU4sICZ3cnF1LCBOVUxMKTsKLQkJfQotCQlrZnJlZShidWYpOwotCX0KLQlicmVhazsKLQljYXNlIEhFUk1FU19JTlFfQ0hBTk5FTElORk86Ci0JewotCQlzdHJ1Y3QgYWdlcmVfZXh0X3NjYW5faW5mbyAqYnNzOwotCi0JCWlmICghcHJpdi0+c2Nhbl9pbnByb2dyZXNzKSB7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEdvdCBjaGFuaW5mbyB3aXRob3V0IHNjYW4sICIKLQkJCSAgICAgICAibGVuPSVkXG4iLCBkZXYtPm5hbWUsIGxlbik7Ci0JCQlicmVhazsKLQkJfQotCi0JCS8qIEFuIGVtcHR5IHJlc3VsdCBpbmRpY2F0ZXMgdGhhdCB0aGUgc2NhbiBpcyBjb21wbGV0ZSAqLwotCQlpZiAobGVuID09IDApIHsKLQkJCXVuaW9uIGl3cmVxX2RhdGEJd3JxdTsKLQotCQkJLyogU2NhbiBpcyBubyBsb25nZXIgaW4gcHJvZ3Jlc3MgKi8KLQkJCXByaXYtPnNjYW5faW5wcm9ncmVzcyA9IDA7Ci0KLQkJCXdycXUuZGF0YS5sZW5ndGggPSAwOwotCQkJd3JxdS5kYXRhLmZsYWdzID0gMDsKLQkJCXdpcmVsZXNzX3NlbmRfZXZlbnQoZGV2LCBTSU9DR0lXU0NBTiwgJndycXUsIE5VTEwpOwotCQkJYnJlYWs7Ci0JCX0KLQotCQkvKiBTYW5pdHkgY2hlY2sgKi8KLQkJZWxzZSBpZiAobGVuID4gc2l6ZW9mKCpic3MpKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkgICAgICAgIiVzOiBFeHQgc2NhbiByZXN1bHRzIHRvbyBsYXJnZSAoJWQgYnl0ZXMpLiAiCi0JCQkgICAgICAgIlRydW5jYXRpbmcgcmVzdWx0cyB0byAlemQgYnl0ZXMuXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgbGVuLCBzaXplb2YoKmJzcykpOwotCQkJbGVuID0gc2l6ZW9mKCpic3MpOwotCQl9IGVsc2UgaWYgKGxlbiA8IChvZmZzZXRvZihzdHJ1Y3QgYWdlcmVfZXh0X3NjYW5faW5mbywKLQkJCQkJICAgZGF0YSkgKyAyKSkgewotCQkJLyogRHJvcCB0aGlzIHJlc3VsdCBub3cgc28gd2UgZG9uJ3QgaGF2ZSB0bwotCQkJICoga2VlcCBjaGVja2luZyBsYXRlciAqLwotCQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJICAgICAgICIlczogRXh0IHNjYW4gcmVzdWx0cyB0b28gc2hvcnQgKCVkIGJ5dGVzKVxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIGxlbik7Ci0JCQlicmVhazsKLQkJfQotCi0JCWJzcyA9IGttYWxsb2Moc2l6ZW9mKCpic3MpLCBHRlBfQVRPTUlDKTsKLQkJaWYgKGJzcyA9PSBOVUxMKQotCQkJYnJlYWs7Ci0KLQkJLyogUmVhZCBzY2FuIGRhdGEgKi8KLQkJZXJyID0gaGVybWVzX2JhcF9wcmVhZChodywgSVJRX0JBUCwgKHZvaWQgKikgYnNzLCBsZW4sCi0JCQkJICAgICAgIGluZm9maWQsIHNpemVvZihpbmZvKSk7Ci0JCWlmIChlcnIpIHsKLQkJCWtmcmVlKGJzcyk7Ci0JCQlicmVhazsKLQkJfQotCi0JCW9yaW5vY29fYWRkX2V4dF9zY2FuX3Jlc3VsdChwcml2LCBic3MpOwotCi0JCWtmcmVlKGJzcyk7Ci0JCWJyZWFrOwotCX0KLQljYXNlIEhFUk1FU19JTlFfU0VDX1NUQVRfQUdFUkU6Ci0JCS8qIFNlY3VyaXR5IHN0YXR1cyAoQWdlcmUgc3BlY2lmaWMpICovCi0JCS8qIElnbm9yZSB0aGlzIGZyYW1lIGZvciBub3cgKi8KLQkJaWYgKHByaXYtPmZpcm13YXJlX3R5cGUgPT0gRklSTVdBUkVfVFlQRV9BR0VSRSkKLQkJCWJyZWFrOwotCQkvKiBmYWxsIHRocm91Z2ggKi8KLQlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFVua25vd24gaW5mb3JtYXRpb24gZnJhbWUgcmVjZWl2ZWQ6ICIKLQkJICAgICAgICJ0eXBlIDB4JTA0eCwgbGVuZ3RoICVkXG4iLCBkZXYtPm5hbWUsIHR5cGUsIGxlbik7Ci0JCS8qIFdlIGRvbid0IGFjdHVhbGx5IGRvIGFueXRoaW5nIGFib3V0IGl0ICovCi0JCWJyZWFrOwotCX0KLX0KLQotc3RhdGljIHZvaWQgX19vcmlub2NvX2V2X2luZmRyb3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaGVybWVzX3QgKmh3KQotewotCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczogSW5mb3JtYXRpb24gZnJhbWUgbG9zdC5cbiIsIGRldi0+bmFtZSk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIEludGVybmFsIGhhcmR3YXJlIGNvbnRyb2wgcm91dGluZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotaW50IF9fb3Jpbm9jb191cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBoZXJtZXMgKmh3ID0gJnByaXYtPmh3OwotCWludCBlcnI7Ci0KLQluZXRpZl9jYXJyaWVyX29mZihkZXYpOyAvKiBqdXN0IHRvIG1ha2Ugc3VyZSAqLwotCi0JZXJyID0gX19vcmlub2NvX3Byb2dyYW1fcmlkcyhkZXYpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgY29uZmlndXJpbmcgY2FyZFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQkvKiBGaXJlIHRoaW5ncyB1cCBhZ2FpbiAqLwotCWhlcm1lc19zZXRfaXJxbWFzayhodywgT1JJTk9DT19JTlRFTik7Ci0JZXJyID0gaGVybWVzX2VuYWJsZV9wb3J0KGh3LCAwKTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIGVuYWJsaW5nIE1BQyBwb3J0XG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCQlyZXR1cm4gZXJyOwotCX0KLQotCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IF9fb3Jpbm9jb19kb3duKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IGhlcm1lcyAqaHcgPSAmcHJpdi0+aHc7Ci0JaW50IGVycjsKLQotCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLQotCWlmICghIHByaXYtPmh3X3VuYXZhaWxhYmxlKSB7Ci0JCWlmICghIHByaXYtPmJyb2tlbl9kaXNhYmxlcG9ydCkgewotCQkJZXJyID0gaGVybWVzX2Rpc2FibGVfcG9ydChodywgMCk7Ci0JCQlpZiAoZXJyKSB7Ci0JCQkJLyogU29tZSBmaXJtd2FyZXMgKGUuZy4gSW50ZXJzaWwgMS4zLngpIHNlZW0KLQkJCQkgKiB0byBoYXZlIHByb2JsZW1zIGRpc2FibGluZyB0aGUgcG9ydCwgb2gKLQkJCQkgKiB3ZWxsLCB0b28gYmFkLiAqLwotCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBFcnJvciAlZCBkaXNhYmxpbmcgTUFDIHBvcnRcbiIsCi0JCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkJCQlwcml2LT5icm9rZW5fZGlzYWJsZXBvcnQgPSAxOwotCQkJfQotCQl9Ci0JCWhlcm1lc19zZXRfaXJxbWFzayhodywgMCk7Ci0JCWhlcm1lc193cml0ZV9yZWduKGh3LCBFVkFDSywgMHhmZmZmKTsKLQl9Ci0JCi0JLyogZmlybXdhcmUgd2lsbCBoYXZlIHRvIHJlYXNzb2NpYXRlICovCi0JbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKLQlwcml2LT5sYXN0X2xpbmtzdGF0dXMgPSAweGZmZmY7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBvcmlub2NvX2FsbG9jYXRlX2ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBoZXJtZXMgKmh3ID0gJnByaXYtPmh3OwotCWludCBlcnI7Ci0KLQllcnIgPSBoZXJtZXNfYWxsb2NhdGUoaHcsIHByaXYtPm5pY2J1Zl9zaXplLCAmcHJpdi0+dHhmaWQpOwotCWlmIChlcnIgPT0gLUVJTyAmJiBwcml2LT5uaWNidWZfc2l6ZSA+IFRYX05JQ0JVRl9TSVpFX0JVRykgewotCQkvKiBUcnkgd29ya2Fyb3VuZCBmb3Igb2xkIFN5bWJvbCBmaXJtd2FyZSBidWcgKi8KLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGZpcm13YXJlIEFMTE9DIGJ1ZyBkZXRlY3RlZCAiCi0JCSAgICAgICAiKG9sZCBTeW1ib2wgZmlybXdhcmU/KS4gVHJ5aW5nIHRvIHdvcmsgYXJvdW5kLi4uICIsCi0JCSAgICAgICBkZXYtPm5hbWUpOwotCQkKLQkJcHJpdi0+bmljYnVmX3NpemUgPSBUWF9OSUNCVUZfU0laRV9CVUc7Ci0JCWVyciA9IGhlcm1lc19hbGxvY2F0ZShodywgcHJpdi0+bmljYnVmX3NpemUsICZwcml2LT50eGZpZCk7Ci0JCWlmIChlcnIpCi0JCQlwcmludGsoImZhaWxlZCFcbiIpOwotCQllbHNlCi0JCQlwcmludGsoIm9rLlxuIik7Ci0JfQotCi0JcmV0dXJuIGVycjsKLX0KLQotaW50IG9yaW5vY29fcmVpbml0X2Zpcm13YXJlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IGhlcm1lcyAqaHcgPSAmcHJpdi0+aHc7Ci0JaW50IGVycjsKLQotCWVyciA9IGhlcm1lc19pbml0KGh3KTsKLQlpZiAocHJpdi0+ZG9fZndfZG93bmxvYWQgJiYgIWVycikgewotCQllcnIgPSBvcmlub2NvX2Rvd25sb2FkKHByaXYpOwotCQlpZiAoZXJyKQotCQkJcHJpdi0+ZG9fZndfZG93bmxvYWQgPSAwOwotCX0KLQlpZiAoIWVycikKLQkJZXJyID0gb3Jpbm9jb19hbGxvY2F0ZV9maWQoZGV2KTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgX19vcmlub2NvX2h3X3NldF9iaXRyYXRlKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCi17Ci0JaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OwotCWludCBlcnIgPSAwOwotCi0JaWYgKHByaXYtPmJpdHJhdGVtb2RlID49IEJJVFJBVEVfVEFCTEVfU0laRSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBCVUc6IEludmFsaWQgYml0cmF0ZSBtb2RlICVkXG4iLAotCQkgICAgICAgcHJpdi0+bmRldi0+bmFtZSwgcHJpdi0+Yml0cmF0ZW1vZGUpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlzd2l0Y2ggKHByaXYtPmZpcm13YXJlX3R5cGUpIHsKLQljYXNlIEZJUk1XQVJFX1RZUEVfQUdFUkU6Ci0JCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKLQkJCQkJICAgSEVSTUVTX1JJRF9DTkZUWFJBVEVDT05UUk9MLAotCQkJCQkgICBiaXRyYXRlX3RhYmxlW3ByaXYtPmJpdHJhdGVtb2RlXS5hZ2VyZV90eHJhdGVjdHJsKTsKLQkJYnJlYWs7Ci0JY2FzZSBGSVJNV0FSRV9UWVBFX0lOVEVSU0lMOgotCWNhc2UgRklSTVdBUkVfVFlQRV9TWU1CT0w6Ci0JCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKLQkJCQkJICAgSEVSTUVTX1JJRF9DTkZUWFJBVEVDT05UUk9MLAotCQkJCQkgICBiaXRyYXRlX3RhYmxlW3ByaXYtPmJpdHJhdGVtb2RlXS5pbnRlcnNpbF90eHJhdGVjdHJsKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJQlVHKCk7Ci0JfQotCi0JcmV0dXJuIGVycjsKLX0KLQotLyogU2V0IGZpeGVkIEFQIGFkZHJlc3MgKi8KLXN0YXRpYyBpbnQgX19vcmlub2NvX2h3X3NldF93YXAoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKLXsKLQlpbnQgcm9hbWluZ19mbGFnOwotCWludCBlcnIgPSAwOwotCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKLQotCXN3aXRjaCAocHJpdi0+ZmlybXdhcmVfdHlwZSkgewotCWNhc2UgRklSTVdBUkVfVFlQRV9BR0VSRToKLQkJLyogbm90IHN1cHBvcnRlZCAqLwotCQlicmVhazsKLQljYXNlIEZJUk1XQVJFX1RZUEVfSU5URVJTSUw6Ci0JCWlmIChwcml2LT5ic3NpZF9maXhlZCkKLQkJCXJvYW1pbmdfZmxhZyA9IDI7Ci0JCWVsc2UKLQkJCXJvYW1pbmdfZmxhZyA9IDE7Ci0KLQkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAotCQkJCQkgICBIRVJNRVNfUklEX0NORlJPQU1JTkdNT0RFLAotCQkJCQkgICByb2FtaW5nX2ZsYWcpOwotCQlicmVhazsKLQljYXNlIEZJUk1XQVJFX1RZUEVfU1lNQk9MOgotCQllcnIgPSBIRVJNRVNfV1JJVEVfUkVDT1JEKGh3LCBVU0VSX0JBUCwKLQkJCQkJICBIRVJNRVNfUklEX0NORk1BTkRBVE9SWUJTU0lEX1NZTUJPTCwKLQkJCQkJICAmcHJpdi0+ZGVzaXJlZF9ic3NpZCk7Ci0JCWJyZWFrOwotCX0KLQlyZXR1cm4gZXJyOwotfQotCi0vKiBDaGFuZ2UgdGhlIFdFUCBrZXlzIGFuZC9vciB0aGUgY3VycmVudCBrZXlzLiAgQ2FuIGJlIGNhbGxlZAotICogZWl0aGVyIGZyb20gX19vcmlub2NvX2h3X3NldHVwX2VuYygpIG9yIGRpcmVjdGx5IGZyb20KLSAqIG9yaW5vY29faW9jdGxfc2V0aXdlbmNvZGUoKS4gIEluIHRoZSBsYXRlciBjYXNlIHRoZSBhc3NvY2lhdGlvbgotICogd2l0aCB0aGUgQVAgaXMgbm90IGJyb2tlbiAoaWYgdGhlIGZpcm13YXJlIGNhbiBoYW5kbGUgaXQpLAotICogd2hpY2ggaXMgbmVlZGVkIGZvciA4MDIuMXggaW1wbGVtZW50YXRpb25zLiAqLwotc3RhdGljIGludCBfX29yaW5vY29faHdfc2V0dXBfd2Vwa2V5cyhzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KQotewotCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKLQlpbnQgZXJyID0gMDsKLQotCXN3aXRjaCAocHJpdi0+ZmlybXdhcmVfdHlwZSkgewotCWNhc2UgRklSTVdBUkVfVFlQRV9BR0VSRToKLQkJZXJyID0gSEVSTUVTX1dSSVRFX1JFQ09SRChodywgVVNFUl9CQVAsCi0JCQkJCSAgSEVSTUVTX1JJRF9DTkZXRVBLRVlTX0FHRVJFLAotCQkJCQkgICZwcml2LT5rZXlzKTsKLQkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7Ci0JCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKLQkJCQkJICAgSEVSTUVTX1JJRF9DTkZUWEtFWV9BR0VSRSwKLQkJCQkJICAgcHJpdi0+dHhfa2V5KTsKLQkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7Ci0JCWJyZWFrOwotCWNhc2UgRklSTVdBUkVfVFlQRV9JTlRFUlNJTDoKLQljYXNlIEZJUk1XQVJFX1RZUEVfU1lNQk9MOgotCQl7Ci0JCQlpbnQga2V5bGVuOwotCQkJaW50IGk7Ci0KLQkJCS8qIEZvcmNlIHVuaWZvcm0ga2V5IGxlbmd0aCB0byB3b3JrIGFyb3VuZCBmaXJtd2FyZSBidWdzICovCi0JCQlrZXlsZW4gPSBsZTE2X3RvX2NwdShwcml2LT5rZXlzW3ByaXYtPnR4X2tleV0ubGVuKTsKLQkJCQotCQkJaWYgKGtleWxlbiA+IExBUkdFX0tFWV9TSVpFKSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSICIlczogQlVHOiBLZXkgJWQgaGFzIG92ZXJzaXplIGxlbmd0aCAlZC5cbiIsCi0JCQkJICAgICAgIHByaXYtPm5kZXYtPm5hbWUsIHByaXYtPnR4X2tleSwga2V5bGVuKTsKLQkJCQlyZXR1cm4gLUUyQklHOwotCQkJfQotCi0JCQkvKiBXcml0ZSBhbGwgNCBrZXlzICovCi0JCQlmb3IoaSA9IDA7IGkgPCBPUklOT0NPX01BWF9LRVlTOyBpKyspIHsKLQkJCQllcnIgPSBoZXJtZXNfd3JpdGVfbHR2KGh3LCBVU0VSX0JBUCwKLQkJCQkJCSAgICAgICBIRVJNRVNfUklEX0NORkRFRkFVTFRLRVkwICsgaSwKLQkJCQkJCSAgICAgICBIRVJNRVNfQllURVNfVE9fUkVDTEVOKGtleWxlbiksCi0JCQkJCQkgICAgICAgcHJpdi0+a2V5c1tpXS5kYXRhKTsKLQkJCQlpZiAoZXJyKQotCQkJCQlyZXR1cm4gZXJyOwotCQkJfQotCi0JCQkvKiBXcml0ZSB0aGUgaW5kZXggb2YgdGhlIGtleSB1c2VkIGluIHRyYW5zbWlzc2lvbiAqLwotCQkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAotCQkJCQkJICAgSEVSTUVTX1JJRF9DTkZXRVBERUZBVUxUS0VZSUQsCi0JCQkJCQkgICBwcml2LT50eF9rZXkpOwotCQkJaWYgKGVycikKLQkJCQlyZXR1cm4gZXJyOwotCQl9Ci0JCWJyZWFrOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IF9fb3Jpbm9jb19od19zZXR1cF9lbmMoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKLXsKLQloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7Ci0JaW50IGVyciA9IDA7Ci0JaW50IG1hc3Rlcl93ZXBfZmxhZzsKLQlpbnQgYXV0aF9mbGFnOwotCWludCBlbmNfZmxhZzsKLQotCS8qIFNldHVwIFdFUCBrZXlzIGZvciBXRVAgYW5kIFdQQSAqLwotCWlmIChwcml2LT5lbmNvZGVfYWxnKQotCQlfX29yaW5vY29faHdfc2V0dXBfd2Vwa2V5cyhwcml2KTsKLQotCWlmIChwcml2LT53ZXBfcmVzdHJpY3QpCi0JCWF1dGhfZmxhZyA9IEhFUk1FU19BVVRIX1NIQVJFRF9LRVk7Ci0JZWxzZQotCQlhdXRoX2ZsYWcgPSBIRVJNRVNfQVVUSF9PUEVOOwotCi0JaWYgKHByaXYtPndwYV9lbmFibGVkKQotCQllbmNfZmxhZyA9IDI7Ci0JZWxzZSBpZiAocHJpdi0+ZW5jb2RlX2FsZyA9PSBJV19FTkNPREVfQUxHX1dFUCkKLQkJZW5jX2ZsYWcgPSAxOwotCWVsc2UKLQkJZW5jX2ZsYWcgPSAwOwotCi0Jc3dpdGNoIChwcml2LT5maXJtd2FyZV90eXBlKSB7Ci0JY2FzZSBGSVJNV0FSRV9UWVBFX0FHRVJFOiAvKiBBZ2VyZSBzdHlsZSBXRVAgKi8KLQkJaWYgKHByaXYtPmVuY29kZV9hbGcgPT0gSVdfRU5DT0RFX0FMR19XRVApIHsKLQkJCS8qIEVuYWJsZSB0aGUgc2hhcmVkLWtleSBhdXRoZW50aWNhdGlvbi4gKi8KLQkJCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKLQkJCQkJCSAgIEhFUk1FU19SSURfQ05GQVVUSEVOVElDQVRJT05fQUdFUkUsCi0JCQkJCQkgICBhdXRoX2ZsYWcpOwotCQl9Ci0JCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKLQkJCQkJICAgSEVSTUVTX1JJRF9DTkZXRVBFTkFCTEVEX0FHRVJFLAotCQkJCQkgICBlbmNfZmxhZyk7Ci0JCWlmIChlcnIpCi0JCQlyZXR1cm4gZXJyOwotCi0JCWlmIChwcml2LT5oYXNfd3BhKSB7Ci0JCQkvKiBTZXQgV1BBIGtleSBtYW5hZ2VtZW50ICovCi0JCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCi0JCQkJICBIRVJNRVNfUklEX0NORlNFVFdQQUFVVEhNR01UU1VJVEVfQUdFUkUsCi0JCQkJICBwcml2LT5rZXlfbWdtdCk7Ci0JCQlpZiAoZXJyKQotCQkJCXJldHVybiBlcnI7Ci0JCX0KLQotCQlicmVhazsKLQotCWNhc2UgRklSTVdBUkVfVFlQRV9JTlRFUlNJTDogLyogSW50ZXJzaWwgc3R5bGUgV0VQICovCi0JY2FzZSBGSVJNV0FSRV9UWVBFX1NZTUJPTDogLyogU3ltYm9sIHN0eWxlIFdFUCAqLwotCQlpZiAocHJpdi0+ZW5jb2RlX2FsZyA9PSBJV19FTkNPREVfQUxHX1dFUCkgewotCQkJaWYgKHByaXYtPndlcF9yZXN0cmljdCB8fAotCQkJICAgIChwcml2LT5maXJtd2FyZV90eXBlID09IEZJUk1XQVJFX1RZUEVfU1lNQk9MKSkKLQkJCQltYXN0ZXJfd2VwX2ZsYWcgPSBIRVJNRVNfV0VQX1BSSVZBQ1lfSU5WT0tFRCB8Ci0JCQkJCQkgIEhFUk1FU19XRVBfRVhDTF9VTkVOQ1JZUFRFRDsKLQkJCWVsc2UKLQkJCQltYXN0ZXJfd2VwX2ZsYWcgPSBIRVJNRVNfV0VQX1BSSVZBQ1lfSU5WT0tFRDsKLQotCQkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAotCQkJCQkJICAgSEVSTUVTX1JJRF9DTkZBVVRIRU5USUNBVElPTiwKLQkJCQkJCSAgIGF1dGhfZmxhZyk7Ci0JCQlpZiAoZXJyKQotCQkJCXJldHVybiBlcnI7Ci0JCX0gZWxzZQotCQkJbWFzdGVyX3dlcF9mbGFnID0gMDsKLQotCQlpZiAocHJpdi0+aXdfbW9kZSA9PSBJV19NT0RFX01PTklUT1IpCi0JCQltYXN0ZXJfd2VwX2ZsYWcgfD0gSEVSTUVTX1dFUF9IT1NUX0RFQ1JZUFQ7Ci0KLQkJLyogTWFzdGVyIFdFUCBzZXR0aW5nIDogb24vb2ZmICovCi0JCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKLQkJCQkJICAgSEVSTUVTX1JJRF9DTkZXRVBGTEFHU19JTlRFUlNJTCwKLQkJCQkJICAgbWFzdGVyX3dlcF9mbGFnKTsKLQkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7CQotCi0JCWJyZWFrOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKiBrZXkgbXVzdCBiZSAzMiBieXRlcywgaW5jbHVkaW5nIHRoZSB0eCBhbmQgcnggTUlDIGtleXMuCi0gKiByc2MgbXVzdCBiZSA4IGJ5dGVzCi0gKiB0c2MgbXVzdCBiZSA4IGJ5dGVzIG9yIE5VTEwKLSAqLwotc3RhdGljIGludCBfX29yaW5vY29faHdfc2V0X3RraXBfa2V5KGhlcm1lc190ICpodywgaW50IGtleV9pZHgsIGludCBzZXRfdHgsCi0JCQkJICAgICB1OCAqa2V5LCB1OCAqcnNjLCB1OCAqdHNjKQotewotCXN0cnVjdCB7Ci0JCV9fbGUxNiBpZHg7Ci0JCXU4IHJzY1tJV19FTkNPREVfU0VRX01BWF9TSVpFXTsKLQkJdTgga2V5W1RLSVBfS0VZTEVOXTsKLQkJdTggdHhfbWljW01JQ19LRVlMRU5dOwotCQl1OCByeF9taWNbTUlDX0tFWUxFTl07Ci0JCXU4IHRzY1tJV19FTkNPREVfU0VRX01BWF9TSVpFXTsKLQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBidWY7Ci0JaW50IHJldDsKLQlpbnQgZXJyOwotCWludCBrOwotCXUxNiB4bWl0dGluZzsKLQotCWtleV9pZHggJj0gMHgzOwotCi0JaWYgKHNldF90eCkKLQkJa2V5X2lkeCB8PSAweDgwMDA7Ci0KLQlidWYuaWR4ID0gY3B1X3RvX2xlMTYoa2V5X2lkeCk7Ci0JbWVtY3B5KGJ1Zi5rZXksIGtleSwKLQkgICAgICAgc2l6ZW9mKGJ1Zi5rZXkpICsgc2l6ZW9mKGJ1Zi50eF9taWMpICsgc2l6ZW9mKGJ1Zi5yeF9taWMpKTsKLQotCWlmIChyc2MgPT0gTlVMTCkKLQkJbWVtc2V0KGJ1Zi5yc2MsIDAsIHNpemVvZihidWYucnNjKSk7Ci0JZWxzZQotCQltZW1jcHkoYnVmLnJzYywgcnNjLCBzaXplb2YoYnVmLnJzYykpOwotCi0JaWYgKHRzYyA9PSBOVUxMKSB7Ci0JCW1lbXNldChidWYudHNjLCAwLCBzaXplb2YoYnVmLnRzYykpOwotCQlidWYudHNjWzRdID0gMHgxMDsKLQl9IGVsc2UgewotCQltZW1jcHkoYnVmLnRzYywgdHNjLCBzaXplb2YoYnVmLnRzYykpOwotCX0KLQotCS8qIFdhaXQgdXB0byAxMDBtcyBmb3IgdHggcXVldWUgdG8gZW1wdHkgKi8KLQlrID0gMTAwOwotCWRvIHsKLQkJay0tOwotCQl1ZGVsYXkoMTAwMCk7Ci0JCXJldCA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX1RYUVVFVUVFTVBUWSwKLQkJCQkJICAmeG1pdHRpbmcpOwotCQlpZiAocmV0KQotCQkJYnJlYWs7Ci0JfSB3aGlsZSAoKGsgPiAwKSAmJiB4bWl0dGluZyk7Ci0KLQlpZiAoayA9PSAwKQotCQlyZXQgPSAtRVRJTUVET1VUOwotCi0JZXJyID0gSEVSTUVTX1dSSVRFX1JFQ09SRChodywgVVNFUl9CQVAsCi0JCQkJICBIRVJNRVNfUklEX0NORkFERERFRkFVTFRUS0lQS0VZX0FHRVJFLAotCQkJCSAgJmJ1Zik7Ci0KLQlyZXR1cm4gcmV0ID8gcmV0IDogZXJyOwotfQotCi1zdGF0aWMgaW50IG9yaW5vY29fY2xlYXJfdGtpcF9rZXkoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwKLQkJCQkgIGludCBrZXlfaWR4KQotewotCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKLQlpbnQgZXJyOwotCi0JbWVtc2V0KCZwcml2LT50a2lwX2tleVtrZXlfaWR4XSwgMCwgc2l6ZW9mKHByaXYtPnRraXBfa2V5W2tleV9pZHhdKSk7Ci0JZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAotCQkJCSAgIEhFUk1FU19SSURfQ05GUkVNREVGQVVMVFRLSVBLRVlfQUdFUkUsCi0JCQkJICAga2V5X2lkeCk7Ci0JaWYgKGVycikKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IEVycm9yICVkIGNsZWFyaW5nIFRLSVAga2V5ICVkXG4iLAotCQkgICAgICAgcHJpdi0+bmRldi0+bmFtZSwgZXJyLCBrZXlfaWR4KTsKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IF9fb3Jpbm9jb19wcm9ncmFtX3JpZHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7Ci0JaW50IGVycjsKLQlzdHJ1Y3QgaGVybWVzX2lkc3RyaW5nIGlkYnVmOwotCi0JLyogU2V0IHRoZSBNQUMgYWRkcmVzcyAqLwotCWVyciA9IGhlcm1lc193cml0ZV9sdHYoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NORk9XTk1BQ0FERFIsCi0JCQkgICAgICAgSEVSTUVTX0JZVEVTX1RPX1JFQ0xFTihFVEhfQUxFTiksIGRldi0+ZGV2X2FkZHIpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyBNQUMgYWRkcmVzc1xuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQkvKiBTZXQgdXAgdGhlIGxpbmsgbW9kZSAqLwotCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DTkZQT1JUVFlQRSwKLQkJCQkgICBwcml2LT5wb3J0X3R5cGUpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyBwb3J0IHR5cGVcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIGVycik7Ci0JCXJldHVybiBlcnI7Ci0JfQotCS8qIFNldCB0aGUgY2hhbm5lbC9mcmVxdWVuY3kgKi8KLQlpZiAocHJpdi0+Y2hhbm5lbCAhPSAwICYmIHByaXYtPml3X21vZGUgIT0gSVdfTU9ERV9JTkZSQSkgewotCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCi0JCQkJCSAgIEhFUk1FU19SSURfQ05GT1dOQ0hBTk5FTCwKLQkJCQkJICAgcHJpdi0+Y2hhbm5lbCk7Ci0JCWlmIChlcnIpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgY2hhbm5lbCAlZFxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIGVyciwgcHJpdi0+Y2hhbm5lbCk7Ci0JCQlyZXR1cm4gZXJyOwotCQl9Ci0JfQotCi0JaWYgKHByaXYtPmhhc19pYnNzKSB7Ci0JCXUxNiBjcmVhdGVpYnNzOwotCi0JCWlmICgoc3RybGVuKHByaXYtPmRlc2lyZWRfZXNzaWQpID09IDApICYmIChwcml2LT5jcmVhdGVpYnNzKSkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFRoaXMgZmlybXdhcmUgcmVxdWlyZXMgYW4gIgotCQkJICAgICAgICJFU1NJRCBpbiBJQlNTLUFkLUhvYyBtb2RlLlxuIiwgZGV2LT5uYW1lKTsKLQkJCS8qIFdpdGggd3ZsYW5fY3MsIGluIHRoaXMgY2FzZSwgd2Ugd291bGQgY3Jhc2guCi0JCQkgKiBob3BlZnVsbHksIHRoaXMgZHJpdmVyIHdpbGwgYmVoYXZlIGJldHRlci4uLgotCQkJICogSmVhbiBJSSAqLwotCQkJY3JlYXRlaWJzcyA9IDA7Ci0JCX0gZWxzZSB7Ci0JCQljcmVhdGVpYnNzID0gcHJpdi0+Y3JlYXRlaWJzczsKLQkJfQotCQkKLQkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAotCQkJCQkgICBIRVJNRVNfUklEX0NORkNSRUFURUlCU1MsCi0JCQkJCSAgIGNyZWF0ZWlic3MpOwotCQlpZiAoZXJyKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIENSRUFURUlCU1NcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCQkJcmV0dXJuIGVycjsKLQkJfQotCX0KLQotCS8qIFNldCB0aGUgZGVzaXJlZCBCU1NJRCAqLwotCWVyciA9IF9fb3Jpbm9jb19od19zZXRfd2FwKHByaXYpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyBBUCBhZGRyZXNzXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCQlyZXR1cm4gZXJyOwotCX0KLQkvKiBTZXQgdGhlIGRlc2lyZWQgRVNTSUQgKi8KLQlpZGJ1Zi5sZW4gPSBjcHVfdG9fbGUxNihzdHJsZW4ocHJpdi0+ZGVzaXJlZF9lc3NpZCkpOwotCW1lbWNweSgmaWRidWYudmFsLCBwcml2LT5kZXNpcmVkX2Vzc2lkLCBzaXplb2YoaWRidWYudmFsKSk7Ci0JLyogV2luWFAgd2FudHMgcGFydG5lciB0byBjb25maWd1cmUgT1dOU1NJRCBldmVuIGluIElCU1MgbW9kZS4gKGppbWMpICovCi0JZXJyID0gaGVybWVzX3dyaXRlX2x0dihodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ05GT1dOU1NJRCwKLQkJCSAgICAgICBIRVJNRVNfQllURVNfVE9fUkVDTEVOKHN0cmxlbihwcml2LT5kZXNpcmVkX2Vzc2lkKSsyKSwKLQkJCSAgICAgICAmaWRidWYpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyBPV05TU0lEXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCQlyZXR1cm4gZXJyOwotCX0KLQllcnIgPSBoZXJtZXNfd3JpdGVfbHR2KGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DTkZERVNJUkVEU1NJRCwKLQkJCSAgICAgICBIRVJNRVNfQllURVNfVE9fUkVDTEVOKHN0cmxlbihwcml2LT5kZXNpcmVkX2Vzc2lkKSsyKSwKLQkJCSAgICAgICAmaWRidWYpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyBERVNJUkVEU1NJRFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQkvKiBTZXQgdGhlIHN0YXRpb24gbmFtZSAqLwotCWlkYnVmLmxlbiA9IGNwdV90b19sZTE2KHN0cmxlbihwcml2LT5uaWNrKSk7Ci0JbWVtY3B5KCZpZGJ1Zi52YWwsIHByaXYtPm5pY2ssIHNpemVvZihpZGJ1Zi52YWwpKTsKLQllcnIgPSBoZXJtZXNfd3JpdGVfbHR2KGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DTkZPV05OQU1FLAotCQkJICAgICAgIEhFUk1FU19CWVRFU19UT19SRUNMRU4oc3RybGVuKHByaXYtPm5pY2spKzIpLAotCQkJICAgICAgICZpZGJ1Zik7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIG5pY2tuYW1lXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCQlyZXR1cm4gZXJyOwotCX0KLQotCS8qIFNldCBBUCBkZW5zaXR5ICovCi0JaWYgKHByaXYtPmhhc19zZW5zaXRpdml0eSkgewotCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCi0JCQkJCSAgIEhFUk1FU19SSURfQ05GU1lTVEVNU0NBTEUsCi0JCQkJCSAgIHByaXYtPmFwX2RlbnNpdHkpOwotCQlpZiAoZXJyKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogRXJyb3IgJWQgc2V0dGluZyBTWVNURU1TQ0FMRS4gICIKLQkJCSAgICAgICAiRGlzYWJsaW5nIHNlbnNpdGl2aXR5IGNvbnRyb2xcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCi0JCQlwcml2LT5oYXNfc2Vuc2l0aXZpdHkgPSAwOwotCQl9Ci0JfQotCi0JLyogU2V0IFJUUyB0aHJlc2hvbGQgKi8KLQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ05GUlRTVEhSRVNIT0xELAotCQkJCSAgIHByaXYtPnJ0c190aHJlc2gpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyBSVFMgdGhyZXNob2xkXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCQlyZXR1cm4gZXJyOwotCX0KLQotCS8qIFNldCBmcmFnbWVudGF0aW9uIHRocmVzaG9sZCBvciBNV08gcm9idXN0bmVzcyAqLwotCWlmIChwcml2LT5oYXNfbXdvKQotCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCi0JCQkJCSAgIEhFUk1FU19SSURfQ05GTVdPUk9CVVNUX0FHRVJFLAotCQkJCQkgICBwcml2LT5td29fcm9idXN0KTsKLQllbHNlCi0JCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKLQkJCQkJICAgSEVSTUVTX1JJRF9DTkZGUkFHTUVOVEFUSU9OVEhSRVNIT0xELAotCQkJCQkgICBwcml2LT5mcmFnX3RocmVzaCk7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIGZyYWdtZW50YXRpb25cbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIGVycik7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0JLyogU2V0IGJpdHJhdGUgKi8KLQllcnIgPSBfX29yaW5vY29faHdfc2V0X2JpdHJhdGUocHJpdik7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIGJpdHJhdGVcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIGVycik7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0JLyogU2V0IHBvd2VyIG1hbmFnZW1lbnQgKi8KLQlpZiAocHJpdi0+aGFzX3BtKSB7Ci0JCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKLQkJCQkJICAgSEVSTUVTX1JJRF9DTkZQTUVOQUJMRUQsCi0JCQkJCSAgIHByaXYtPnBtX29uKTsKLQkJaWYgKGVycikgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyB1cCBQTVxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7Ci0JCQlyZXR1cm4gZXJyOwotCQl9Ci0KLQkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAotCQkJCQkgICBIRVJNRVNfUklEX0NORk1VTFRJQ0FTVFJFQ0VJVkUsCi0JCQkJCSAgIHByaXYtPnBtX21jYXN0KTsKLQkJaWYgKGVycikgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyB1cCBQTVxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7Ci0JCQlyZXR1cm4gZXJyOwotCQl9Ci0JCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKLQkJCQkJICAgSEVSTUVTX1JJRF9DTkZNQVhTTEVFUERVUkFUSU9OLAotCQkJCQkgICBwcml2LT5wbV9wZXJpb2QpOwotCQlpZiAoZXJyKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIHVwIFBNXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkJCXJldHVybiBlcnI7Ci0JCX0KLQkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAotCQkJCQkgICBIRVJNRVNfUklEX0NORlBNSE9MRE9WRVJEVVJBVElPTiwKLQkJCQkJICAgcHJpdi0+cG1fdGltZW91dCk7Ci0JCWlmIChlcnIpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgdXAgUE1cbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCQkJcmV0dXJuIGVycjsKLQkJfQotCX0KLQotCS8qIFNldCBwcmVhbWJsZSAtIG9ubHkgZm9yIFN5bWJvbCBzbyBmYXIuLi4gKi8KLQlpZiAocHJpdi0+aGFzX3ByZWFtYmxlKSB7Ci0JCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKLQkJCQkJICAgSEVSTUVTX1JJRF9DTkZQUkVBTUJMRV9TWU1CT0wsCi0JCQkJCSAgIHByaXYtPnByZWFtYmxlKTsKLQkJaWYgKGVycikgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyBwcmVhbWJsZVxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7Ci0JCQlyZXR1cm4gZXJyOwotCQl9Ci0JfQotCi0JLyogU2V0IHVwIGVuY3J5cHRpb24gKi8KLQlpZiAocHJpdi0+aGFzX3dlcCB8fCBwcml2LT5oYXNfd3BhKSB7Ci0JCWVyciA9IF9fb3Jpbm9jb19od19zZXR1cF9lbmMocHJpdik7Ci0JCWlmIChlcnIpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIGFjdGl2YXRpbmcgZW5jcnlwdGlvblxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7Ci0JCQlyZXR1cm4gZXJyOwotCQl9Ci0JfQotCi0JaWYgKHByaXYtPml3X21vZGUgPT0gSVdfTU9ERV9NT05JVE9SKSB7Ci0JCS8qIEVuYWJsZSBtb25pdG9yIG1vZGUgKi8KLQkJZGV2LT50eXBlID0gQVJQSFJEX0lFRUU4MDIxMTsKLQkJZXJyID0gaGVybWVzX2RvY21kX3dhaXQoaHcsIEhFUk1FU19DTURfVEVTVCB8IAotCQkJCQkgICAgSEVSTUVTX1RFU1RfTU9OSVRPUiwgMCwgTlVMTCk7Ci0JfSBlbHNlIHsKLQkJLyogRGlzYWJsZSBtb25pdG9yIG1vZGUgKi8KLQkJZGV2LT50eXBlID0gQVJQSFJEX0VUSEVSOwotCQllcnIgPSBoZXJtZXNfZG9jbWRfd2FpdChodywgSEVSTUVTX0NNRF9URVNUIHwKLQkJCQkJICAgIEhFUk1FU19URVNUX1NUT1AsIDAsIE5VTEwpOwotCX0KLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JLyogU2V0IHByb21pc2N1aXR5IC8gbXVsdGljYXN0Ki8KLQlwcml2LT5wcm9taXNjdW91cyA9IDA7Ci0JcHJpdi0+bWNfY291bnQgPSAwOwotCi0JLyogRklYTUU6IHdoYXQgYWJvdXQgbmV0aWZfdHhfbG9jayAqLwotCV9fb3Jpbm9jb19zZXRfbXVsdGljYXN0X2xpc3QoZGV2KTsKLQotCXJldHVybiAwOwotfQotCi0vKiBGSVhNRTogcmV0dXJuIGludD8gKi8KLXN0YXRpYyB2b2lkCi1fX29yaW5vY29fc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OwotCWludCBlcnIgPSAwOwotCWludCBwcm9taXNjLCBtY19jb3VudDsKLQotCS8qIFRoZSBIZXJtZXMgZG9lc24ndCBzZWVtIHRvIGhhdmUgYW4gYWxsbXVsdGkgbW9kZSwgc28gd2UgZ28KLQkgKiBpbnRvIHByb21pc2N1b3VzIG1vZGUgYW5kIGxldCB0aGUgdXBwZXIgbGV2ZWxzIGRlYWwuICovCi0JaWYgKCAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB8fCAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgfHwKLQkgICAgIChkZXYtPm1jX2NvdW50ID4gTUFYX01VTFRJQ0FTVChwcml2KSkgKSB7Ci0JCXByb21pc2MgPSAxOwotCQltY19jb3VudCA9IDA7Ci0JfSBlbHNlIHsKLQkJcHJvbWlzYyA9IDA7Ci0JCW1jX2NvdW50ID0gZGV2LT5tY19jb3VudDsKLQl9Ci0KLQlpZiAocHJvbWlzYyAhPSBwcml2LT5wcm9taXNjdW91cykgewotCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCi0JCQkJCSAgIEhFUk1FU19SSURfQ05GUFJPTUlTQ1VPVVNNT0RFLAotCQkJCQkgICBwcm9taXNjKTsKLQkJaWYgKGVycikgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyBQUk9NSVNDVU9VU01PREUgdG8gMS5cbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCQl9IGVsc2UgCi0JCQlwcml2LT5wcm9taXNjdW91cyA9IHByb21pc2M7Ci0JfQotCi0JLyogSWYgd2UncmUgbm90IGluIHByb21pc2N1b3VzIG1vZGUsIHRoZW4gd2UgbmVlZCB0byBzZXQgdGhlCi0JICogZ3JvdXAgYWRkcmVzcyBpZiBlaXRoZXIgd2Ugd2FudCB0byBtdWx0aWNhc3QsIG9yIGlmIHdlIHdlcmUKLQkgKiBtdWx0aWNhc3RpbmcgYW5kIHdhbnQgdG8gc3RvcCAqLwotCWlmICghIHByb21pc2MgJiYgKG1jX2NvdW50IHx8IHByaXYtPm1jX2NvdW50KSApIHsKLQkJc3RydWN0IGRldl9tY19saXN0ICpwID0gZGV2LT5tY19saXN0OwotCQlzdHJ1Y3QgaGVybWVzX211bHRpY2FzdCBtY2xpc3Q7Ci0JCWludCBpOwotCi0JCWZvciAoaSA9IDA7IGkgPCBtY19jb3VudDsgaSsrKSB7Ci0JCQkvKiBwYXJhbm9pYTogaXMgbGlzdCBzaG9ydGVyIHRoYW4gbWNfY291bnQ/ICovCi0JCQlCVUdfT04oISBwKTsKLQkJCS8qIHBhcmFub2lhOiBiYWQgYWRkcmVzcyBzaXplIGluIGxpc3Q/ICovCi0JCQlCVUdfT04ocC0+ZG1pX2FkZHJsZW4gIT0gRVRIX0FMRU4pOwotCQkJCi0JCQltZW1jcHkobWNsaXN0LmFkZHJbaV0sIHAtPmRtaV9hZGRyLCBFVEhfQUxFTik7Ci0JCQlwID0gcC0+bmV4dDsKLQkJfQotCQkKLQkJaWYgKHApCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogTXVsdGljYXN0IGxpc3QgaXMgIgotCQkJICAgICAgICJsb25nZXIgdGhhbiBtY19jb3VudFxuIiwgZGV2LT5uYW1lKTsKLQotCQllcnIgPSBoZXJtZXNfd3JpdGVfbHR2KGh3LCBVU0VSX0JBUCwKLQkJCQkgICBIRVJNRVNfUklEX0NORkdST1VQQUREUkVTU0VTLAotCQkJCSAgIEhFUk1FU19CWVRFU19UT19SRUNMRU4obWNfY291bnQgKiBFVEhfQUxFTiksCi0JCQkJICAgJm1jbGlzdCk7Ci0JCWlmIChlcnIpCi0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIG11bHRpY2FzdCBsaXN0LlxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7Ci0JCWVsc2UKLQkJCXByaXYtPm1jX2NvdW50ID0gbWNfY291bnQ7Ci0JfQotfQotCi0vKiBUaGlzIG11c3QgYmUgY2FsbGVkIGZyb20gdXNlciBjb250ZXh0LCB3aXRob3V0IGxvY2tzIGhlbGQgLSB1c2UKLSAqIHNjaGVkdWxlX3dvcmsoKSAqLwotc3RhdGljIHZvaWQgb3Jpbm9jb19yZXNldChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9Ci0JCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlLCByZXNldF93b3JrKTsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+bmRldjsKLQlzdHJ1Y3QgaGVybWVzICpodyA9ICZwcml2LT5odzsKLQlpbnQgZXJyOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKLQkJLyogV2hlbiB0aGUgaGFyZHdhcmUgYmVjb21lcyBhdmFpbGFibGUgYWdhaW4sIHdoYXRldmVyCi0JCSAqIGRldGVjdHMgdGhhdCBpcyByZXNwb25zaWJsZSBmb3IgcmUtaW5pdGlhbGl6aW5nCi0JCSAqIGl0LiBTbyBubyBuZWVkIGZvciBhbnl0aGluZyBmdXJ0aGVyICovCi0JCXJldHVybjsKLQotCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLQotCS8qIFNodXQgb2ZmIGludGVycnVwdHMuICBEZXBlbmRpbmcgb24gd2hhdCBzdGF0ZSB0aGUgaGFyZHdhcmUKLQkgKiBpcyBpbiwgdGhpcyBtaWdodCBub3Qgd29yaywgYnV0IHdlJ2xsIHRyeSBhbnl3YXkgKi8KLQloZXJtZXNfc2V0X2lycW1hc2soaHcsIDApOwotCWhlcm1lc193cml0ZV9yZWduKGh3LCBFVkFDSywgMHhmZmZmKTsKLQotCXByaXYtPmh3X3VuYXZhaWxhYmxlKys7Ci0JcHJpdi0+bGFzdF9saW5rc3RhdHVzID0gMHhmZmZmOyAvKiBmaXJtd2FyZSB3aWxsIGhhdmUgdG8gcmVhc3NvY2lhdGUgKi8KLQluZXRpZl9jYXJyaWVyX29mZihkZXYpOwotCi0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQotIAkvKiBTY2FubmluZyBzdXBwb3J0OiBDbGVhbnVwIG9mIGRyaXZlciBzdHJ1Y3QgKi8KLQlvcmlub2NvX2NsZWFyX3NjYW5fcmVzdWx0cyhwcml2LCAwKTsKLQlwcml2LT5zY2FuX2lucHJvZ3Jlc3MgPSAwOwotCi0JaWYgKHByaXYtPmhhcmRfcmVzZXQpIHsKLQkJZXJyID0gKCpwcml2LT5oYXJkX3Jlc2V0KShwcml2KTsKLQkJaWYgKGVycikgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogb3Jpbm9jb19yZXNldDogRXJyb3IgJWQgIgotCQkJICAgICAgICJwZXJmb3JtaW5nIGhhcmQgcmVzZXRcbiIsIGRldi0+bmFtZSwgZXJyKTsKLQkJCWdvdG8gZGlzYWJsZTsKLQkJfQotCX0KLQotCWVyciA9IG9yaW5vY29fcmVpbml0X2Zpcm13YXJlKGRldik7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBvcmlub2NvX3Jlc2V0OiBFcnJvciAlZCByZS1pbml0aWFsaXppbmcgZmlybXdhcmVcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIGVycik7Ci0JCWdvdG8gZGlzYWJsZTsKLQl9Ci0KLQlzcGluX2xvY2tfaXJxKCZwcml2LT5sb2NrKTsgLyogVGhpcyBoYXMgdG8gYmUgY2FsbGVkIGZyb20gdXNlciBjb250ZXh0ICovCi0KLQlwcml2LT5od191bmF2YWlsYWJsZS0tOwotCi0JLyogcHJpdi0+b3BlbiBvciBwcml2LT5od191bmF2YWlsYWJsZSBtaWdodCBoYXZlIGNoYW5nZWQgd2hpbGUKLQkgKiB3ZSBkcm9wcGVkIHRoZSBsb2NrICovCi0JaWYgKHByaXYtPm9wZW4gJiYgKCEgcHJpdi0+aHdfdW5hdmFpbGFibGUpKSB7Ci0JCWVyciA9IF9fb3Jpbm9jb191cChkZXYpOwotCQlpZiAoZXJyKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBvcmlub2NvX3Jlc2V0OiBFcnJvciAlZCByZWVuYWJsaW5nIGNhcmRcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCQl9IGVsc2UKLQkJCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwotCX0KLQotCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+bG9jayk7Ci0KLQlyZXR1cm47Ci0gZGlzYWJsZToKLQloZXJtZXNfc2V0X2lycW1hc2soaHcsIDApOwotCW5ldGlmX2RldmljZV9kZXRhY2goZGV2KTsKLQlwcmludGsoS0VSTl9FUlIgIiVzOiBEZXZpY2UgaGFzIGJlZW4gZGlzYWJsZWQhXG4iLCBkZXYtPm5hbWUpOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBJbnRlcnJ1cHQgaGFuZGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyB2b2lkIF9fb3Jpbm9jb19ldl90aWNrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGhlcm1lc190ICpodykKLXsKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFRJQ0tcbiIsIGRldi0+bmFtZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fb3Jpbm9jb19ldl93dGVycihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBoZXJtZXNfdCAqaHcpCi17Ci0JLyogVGhpcyBzZWVtcyB0byBoYXBwZW4gYSBmYWlyIGJpdCB1bmRlciBsb2FkLCBidXQgaWdub3JpbmcgaXQKLQkgICBzZWVtcyB0byB3b3JrIGZpbmUuLi4qLwotCXByaW50ayhLRVJOX0RFQlVHICIlczogTUFDIGNvbnRyb2xsZXIgZXJyb3IgKFdURVJSKS4gSWdub3JpbmcuXG4iLAotCSAgICAgICBkZXYtPm5hbWUpOwotfQotCi1pcnFyZXR1cm5fdCBvcmlub2NvX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGRldl9pZDsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7Ci0JaW50IGNvdW50ID0gTUFYX0lSUUxPT1BTX1BFUl9JUlE7Ci0JdTE2IGV2c3RhdCwgZXZlbnRzOwotCS8qIFRoZXNlIGFyZSB1c2VkIHRvIGRldGVjdCBhIHJ1bmF3YXkgaW50ZXJydXB0IHNpdHVhdGlvbiAqLwotCS8qIElmIHdlIGdldCBtb3JlIHRoYW4gTUFYX0lSUUxPT1BTX1BFUl9KSUZGWSBpdGVyYXRpb25zIGluIGEgamlmZnksCi0JICogd2UgcGFuaWMgYW5kIHNodXQgZG93biB0aGUgaGFyZHdhcmUgKi8KLQlzdGF0aWMgaW50IGxhc3RfaXJxX2ppZmZ5ID0gMDsgLyogamlmZmllcyB2YWx1ZSB0aGUgbGFzdCB0aW1lCi0JCQkJCSogd2Ugd2VyZSBjYWxsZWQgKi8KLQlzdGF0aWMgaW50IGxvb3BzX3RoaXNfamlmZnkgPSAwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkgewotCQkvKiBJZiBodyBpcyB1bmF2YWlsYWJsZSAtIHdlIGRvbid0IGtub3cgaWYgdGhlIGlycSB3YXMKLQkJICogZm9yIHVzIG9yIG5vdCAqLwotCQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci0JfQotCi0JZXZzdGF0ID0gaGVybWVzX3JlYWRfcmVnbihodywgRVZTVEFUKTsKLQlldmVudHMgPSBldnN0YXQgJiBody0+aW50ZW47Ci0JaWYgKCEgZXZlbnRzKSB7Ci0JCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0JCXJldHVybiBJUlFfTk9ORTsKLQl9Ci0JCi0JaWYgKGppZmZpZXMgIT0gbGFzdF9pcnFfamlmZnkpCi0JCWxvb3BzX3RoaXNfamlmZnkgPSAwOwotCWxhc3RfaXJxX2ppZmZ5ID0gamlmZmllczsKLQotCXdoaWxlIChldmVudHMgJiYgY291bnQtLSkgewotCQlpZiAoKytsb29wc190aGlzX2ppZmZ5ID4gTUFYX0lSUUxPT1BTX1BFUl9KSUZGWSkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IElSUSBoYW5kbGVyIGlzIGxvb3BpbmcgdG9vICIKLQkJCSAgICAgICAibXVjaCEgUmVzZXR0aW5nLlxuIiwgZGV2LT5uYW1lKTsKLQkJCS8qIERpc2FibGUgaW50ZXJydXB0cyBmb3Igbm93ICovCi0JCQloZXJtZXNfc2V0X2lycW1hc2soaHcsIDApOwotCQkJc2NoZWR1bGVfd29yaygmcHJpdi0+cmVzZXRfd29yayk7Ci0JCQlicmVhazsKLQkJfQotCi0JCS8qIENoZWNrIHRoZSBjYXJkIGhhc24ndCBiZWVuIHJlbW92ZWQgKi8KLQkJaWYgKCEgaGVybWVzX3ByZXNlbnQoaHcpKSB7Ci0JCQlERUJVRygwLCAib3Jpbm9jb19pbnRlcnJ1cHQoKTogY2FyZCByZW1vdmVkXG4iKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJaWYgKGV2ZW50cyAmIEhFUk1FU19FVl9USUNLKQotCQkJX19vcmlub2NvX2V2X3RpY2soZGV2LCBodyk7Ci0JCWlmIChldmVudHMgJiBIRVJNRVNfRVZfV1RFUlIpCi0JCQlfX29yaW5vY29fZXZfd3RlcnIoZGV2LCBodyk7Ci0JCWlmIChldmVudHMgJiBIRVJNRVNfRVZfSU5GRFJPUCkKLQkJCV9fb3Jpbm9jb19ldl9pbmZkcm9wKGRldiwgaHcpOwotCQlpZiAoZXZlbnRzICYgSEVSTUVTX0VWX0lORk8pCi0JCQlfX29yaW5vY29fZXZfaW5mbyhkZXYsIGh3KTsKLQkJaWYgKGV2ZW50cyAmIEhFUk1FU19FVl9SWCkKLQkJCV9fb3Jpbm9jb19ldl9yeChkZXYsIGh3KTsKLQkJaWYgKGV2ZW50cyAmIEhFUk1FU19FVl9UWEVYQykKLQkJCV9fb3Jpbm9jb19ldl90eGV4YyhkZXYsIGh3KTsKLQkJaWYgKGV2ZW50cyAmIEhFUk1FU19FVl9UWCkKLQkJCV9fb3Jpbm9jb19ldl90eChkZXYsIGh3KTsKLQkJaWYgKGV2ZW50cyAmIEhFUk1FU19FVl9BTExPQykKLQkJCV9fb3Jpbm9jb19ldl9hbGxvYyhkZXYsIGh3KTsKLQkJCi0JCWhlcm1lc193cml0ZV9yZWduKGh3LCBFVkFDSywgZXZzdGF0KTsKLQotCQlldnN0YXQgPSBoZXJtZXNfcmVhZF9yZWduKGh3LCBFVlNUQVQpOwotCQlldmVudHMgPSBldnN0YXQgJiBody0+aW50ZW47Ci0JfTsKLQotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0JcmV0dXJuIElSUV9IQU5ETEVEOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBQb3dlciBtYW5hZ2VtZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaWYgZGVmaW5lZChDT05GSUdfUE1fU0xFRVApICYmICFkZWZpbmVkKENPTkZJR19IRVJNRVNfQ0FDSEVfRldfT05fSU5JVCkKLXN0YXRpYyBpbnQgb3Jpbm9jb19wbV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5vdGlmaWVyLAotCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgcG1fZXZlbnQsCi0JCQkgICAgICAgdm9pZCAqdW51c2VkKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBjb250YWluZXJfb2Yobm90aWZpZXIsCi0JCQkJCQkgICAgc3RydWN0IG9yaW5vY29fcHJpdmF0ZSwKLQkJCQkJCSAgICBwbV9ub3RpZmllcik7Ci0KLQkvKiBBbGwgd2UgbmVlZCB0byBkbyBpcyBjYWNoZSB0aGUgZmlybXdhcmUgYmVmb3JlIHN1c3BlbmQsIGFuZAotCSAqIHJlbGVhc2UgaXQgd2hlbiB3ZSBjb21lIG91dC4KLQkgKgotCSAqIE9ubHkgbmVlZCB0byBkbyB0aGlzIGlmIHdlJ3JlIGRvd25sb2FkaW5nIGZpcm13YXJlLiAqLwotCWlmICghcHJpdi0+ZG9fZndfZG93bmxvYWQpCi0JCXJldHVybiBOT1RJRllfRE9ORTsKLQotCXN3aXRjaCAocG1fZXZlbnQpIHsKLQljYXNlIFBNX0hJQkVSTkFUSU9OX1BSRVBBUkU6Ci0JY2FzZSBQTV9TVVNQRU5EX1BSRVBBUkU6Ci0JCW9yaW5vY29fY2FjaGVfZncocHJpdiwgMCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBQTV9QT1NUX1JFU1RPUkU6Ci0JCS8qIFJlc3RvcmUgZnJvbSBoaWJlcm5hdGlvbiBmYWlsZWQuIFdlIG5lZWQgdG8gY2xlYW4KLQkJICogdXAgaW4gZXhhY3RseSB0aGUgc2FtZSB3YXksIHNvIGZhbGwgdGhyb3VnaC4gKi8KLQljYXNlIFBNX1BPU1RfSElCRVJOQVRJT046Ci0JY2FzZSBQTV9QT1NUX1NVU1BFTkQ6Ci0JCW9yaW5vY29fdW5jYWNoZV9mdyhwcml2KTsKLQkJYnJlYWs7Ci0KLQljYXNlIFBNX1JFU1RPUkVfUFJFUEFSRToKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gTk9USUZZX0RPTkU7Ci19Ci0KLXN0YXRpYyB2b2lkIG9yaW5vY29fcmVnaXN0ZXJfcG1fbm90aWZpZXIoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKLXsKLQlwcml2LT5wbV9ub3RpZmllci5ub3RpZmllcl9jYWxsID0gb3Jpbm9jb19wbV9ub3RpZmllcjsKLQlyZWdpc3Rlcl9wbV9ub3RpZmllcigmcHJpdi0+cG1fbm90aWZpZXIpOwotfQotCi1zdGF0aWMgdm9pZCBvcmlub2NvX3VucmVnaXN0ZXJfcG1fbm90aWZpZXIoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKLXsKLQl1bnJlZ2lzdGVyX3BtX25vdGlmaWVyKCZwcml2LT5wbV9ub3RpZmllcik7Ci19Ci0jZWxzZSAvKiAhUE1fU0xFRVAgfHwgSEVSTUVTX0NBQ0hFX0ZXX09OX0lOSVQgKi8KLSNkZWZpbmUgb3Jpbm9jb19yZWdpc3Rlcl9wbV9ub3RpZmllcihwcml2KSBkbyB7IH0gd2hpbGUoMCkKLSNkZWZpbmUgb3Jpbm9jb191bnJlZ2lzdGVyX3BtX25vdGlmaWVyKHByaXYpIGRvIHsgfSB3aGlsZSgwKQotI2VuZGlmCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIEluaXRpYWxpemF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RydWN0IGNvbXBfaWQgewotCXUxNiBpZCwgdmFyaWFudCwgbWFqb3IsIG1pbm9yOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0YXRpYyBpbmxpbmUgZnd0eXBlX3QgZGV0ZXJtaW5lX2Zpcm13YXJlX3R5cGUoc3RydWN0IGNvbXBfaWQgKm5pY19pZCkKLXsKLQlpZiAobmljX2lkLT5pZCA8IDB4ODAwMCkKLQkJcmV0dXJuIEZJUk1XQVJFX1RZUEVfQUdFUkU7Ci0JZWxzZSBpZiAobmljX2lkLT5pZCA9PSAweDgwMDAgJiYgbmljX2lkLT5tYWpvciA9PSAwKQotCQlyZXR1cm4gRklSTVdBUkVfVFlQRV9TWU1CT0w7Ci0JZWxzZQotCQlyZXR1cm4gRklSTVdBUkVfVFlQRV9JTlRFUlNJTDsKLX0KLQotLyogU2V0IHByaXYtPmZpcm13YXJlIHR5cGUsIGRldGVybWluZSBmaXJtd2FyZSBwcm9wZXJ0aWVzICovCi1zdGF0aWMgaW50IGRldGVybWluZV9maXJtd2FyZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKLQlpbnQgZXJyOwotCXN0cnVjdCBjb21wX2lkIG5pY19pZCwgc3RhX2lkOwotCXVuc2lnbmVkIGludCBmaXJtdmVyOwotCWNoYXIgdG1wW1NZTUJPTF9NQVhfVkVSX0xFTisxXSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDIpKSk7Ci0KLQkvKiBHZXQgdGhlIGhhcmR3YXJlIHZlcnNpb24gKi8KLQllcnIgPSBIRVJNRVNfUkVBRF9SRUNPUkQoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX05JQ0lELCAmbmljX2lkKTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCByZWFkIGhhcmR3YXJlIGlkZW50aXR5OiBlcnJvciAlZFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlsZTE2X3RvX2NwdXMoJm5pY19pZC5pZCk7Ci0JbGUxNl90b19jcHVzKCZuaWNfaWQudmFyaWFudCk7Ci0JbGUxNl90b19jcHVzKCZuaWNfaWQubWFqb3IpOwotCWxlMTZfdG9fY3B1cygmbmljX2lkLm1pbm9yKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEhhcmR3YXJlIGlkZW50aXR5ICUwNHg6JTA0eDolMDR4OiUwNHhcbiIsCi0JICAgICAgIGRldi0+bmFtZSwgbmljX2lkLmlkLCBuaWNfaWQudmFyaWFudCwKLQkgICAgICAgbmljX2lkLm1ham9yLCBuaWNfaWQubWlub3IpOwotCi0JcHJpdi0+ZmlybXdhcmVfdHlwZSA9IGRldGVybWluZV9maXJtd2FyZV90eXBlKCZuaWNfaWQpOwotCi0JLyogR2V0IHRoZSBmaXJtd2FyZSB2ZXJzaW9uICovCi0JZXJyID0gSEVSTUVTX1JFQURfUkVDT1JEKGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9TVEFJRCwgJnN0YV9pZCk7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgcmVhZCBzdGF0aW9uIGlkZW50aXR5OiBlcnJvciAlZFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlsZTE2X3RvX2NwdXMoJnN0YV9pZC5pZCk7Ci0JbGUxNl90b19jcHVzKCZzdGFfaWQudmFyaWFudCk7Ci0JbGUxNl90b19jcHVzKCZzdGFfaWQubWFqb3IpOwotCWxlMTZfdG9fY3B1cygmc3RhX2lkLm1pbm9yKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFN0YXRpb24gaWRlbnRpdHkgICUwNHg6JTA0eDolMDR4OiUwNHhcbiIsCi0JICAgICAgIGRldi0+bmFtZSwgc3RhX2lkLmlkLCBzdGFfaWQudmFyaWFudCwKLQkgICAgICAgc3RhX2lkLm1ham9yLCBzdGFfaWQubWlub3IpOwotCi0Jc3dpdGNoIChzdGFfaWQuaWQpIHsKLQljYXNlIDB4MTU6Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IFByaW1hcnkgZmlybXdhcmUgaXMgYWN0aXZlXG4iLAotCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JY2FzZSAweDE0YjoKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogVGVydGlhcnkgZmlybXdhcmUgaXMgYWN0aXZlXG4iLAotCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JY2FzZSAweDFmOgkvKiBJbnRlcnNpbCwgQWdlcmUsIFN5bWJvbCBTcGVjdHJ1bTI0ICovCi0JY2FzZSAweDIxOgkvKiBTeW1ib2wgU3BlY3RydW0yNCBUcmlsb2d5ICovCi0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX05PVElDRSAiJXM6IFVua25vd24gc3RhdGlvbiBJRCwgcGxlYXNlIHJlcG9ydFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCWJyZWFrOwotCX0KLQotCS8qIERlZmF1bHQgY2FwYWJpbGl0aWVzICovCi0JcHJpdi0+aGFzX3NlbnNpdGl2aXR5ID0gMTsKLQlwcml2LT5oYXNfbXdvID0gMDsKLQlwcml2LT5oYXNfcHJlYW1ibGUgPSAwOwotCXByaXYtPmhhc19wb3J0MyA9IDE7Ci0JcHJpdi0+aGFzX2lic3MgPSAxOwotCXByaXYtPmhhc193ZXAgPSAwOwotCXByaXYtPmhhc19iaWdfd2VwID0gMDsKLQlwcml2LT5oYXNfYWx0X3R4Y250bCA9IDA7Ci0JcHJpdi0+aGFzX2V4dF9zY2FuID0gMDsKLQlwcml2LT5oYXNfd3BhID0gMDsKLQlwcml2LT5kb19md19kb3dubG9hZCA9IDA7Ci0KLQkvKiBEZXRlcm1pbmUgY2FwYWJpbGl0aWVzIGZyb20gdGhlIGZpcm13YXJlIHZlcnNpb24gKi8KLQlzd2l0Y2ggKHByaXYtPmZpcm13YXJlX3R5cGUpIHsKLQljYXNlIEZJUk1XQVJFX1RZUEVfQUdFUkU6Ci0JCS8qIEx1Y2VudCBXYXZlbGFuIElFRUUsIEx1Y2VudCBPcmlub2NvLCBDYWJsZXRyb24gUm9hbUFib3V0LAotCQkgICBFTFNBLCBNZWxjbywgSFAsIElCTSwgRGVsbCAxMTUwLCBDb21wYXEgMTEwLzIxMCAqLwotCQlzbnByaW50Zihwcml2LT5md19uYW1lLCBzaXplb2YocHJpdi0+ZndfbmFtZSkgLSAxLAotCQkJICJMdWNlbnQvQWdlcmUgJWQuJTAyZCIsIHN0YV9pZC5tYWpvciwgc3RhX2lkLm1pbm9yKTsKLQotCQlmaXJtdmVyID0gKCh1bnNpZ25lZCBsb25nKXN0YV9pZC5tYWpvciA8PCAxNikgfCBzdGFfaWQubWlub3I7Ci0KLQkJcHJpdi0+aGFzX2lic3MgPSAoZmlybXZlciA+PSAweDYwMDA2KTsKLQkJcHJpdi0+aGFzX3dlcCA9IChmaXJtdmVyID49IDB4NDAwMjApOwotCQlwcml2LT5oYXNfYmlnX3dlcCA9IDE7IC8qIEZJWE1FOiB0aGlzIGlzIHdyb25nIC0gaG93IGRvIHdlIHRlbGwKLQkJCQkJICBHb2xkIGNhcmRzIGZyb20gdGhlIG90aGVycz8gKi8KLQkJcHJpdi0+aGFzX213byA9IChmaXJtdmVyID49IDB4NjAwMDApOwotCQlwcml2LT5oYXNfcG0gPSAoZmlybXZlciA+PSAweDQwMDIwKTsgLyogRG9uJ3Qgd29yayBpbiA3LjUyID8gKi8KLQkJcHJpdi0+aWJzc19wb3J0ID0gMTsKLQkJcHJpdi0+aGFzX2hvc3RzY2FuID0gKGZpcm12ZXIgPj0gMHg4MDAwYSk7Ci0JCXByaXYtPmRvX2Z3X2Rvd25sb2FkID0gMTsKLQkJcHJpdi0+YnJva2VuX21vbml0b3IgPSAoZmlybXZlciA+PSAweDgwMDAwKTsKLQkJcHJpdi0+aGFzX2FsdF90eGNudGwgPSAoZmlybXZlciA+PSAweDkwMDAwKTsgLyogQWxsIDkueCA/ICovCi0JCXByaXYtPmhhc19leHRfc2NhbiA9IChmaXJtdmVyID49IDB4OTAwMDApOyAvKiBBbGwgOS54ID8gKi8KLQkJcHJpdi0+aGFzX3dwYSA9IChmaXJtdmVyID49IDB4OTAwMmEpOwotCQkvKiBUZXN0ZWQgd2l0aCBBZ2VyZSBmaXJtd2FyZSA6Ci0JCSAqCTEuMTYgOyA0LjA4IDsgNC41MiA7IDYuMDQgOyA2LjE2IDsgNy4yOCA9PiBKZWFuIElJCi0JCSAqIFRlc3RlZCBDYWJsZVRyb24gZmlybXdhcmUgOiA0LjMyID0+IEFudG9uICovCi0JCWJyZWFrOwotCWNhc2UgRklSTVdBUkVfVFlQRV9TWU1CT0w6Ci0JCS8qIFN5bWJvbCAsIDNDb20gQWlyQ29ubmVjdCwgSW50ZWwsIEVyaWNzc29uIFdMQU4gKi8KLQkJLyogSW50ZWwgTUFDIDogMDA6MDI6QjM6KiAqLwotCQkvKiAzQ29tIE1BQyA6IDAwOjUwOkRBOiogKi8KLQkJbWVtc2V0KHRtcCwgMCwgc2l6ZW9mKHRtcCkpOwotCQkvKiBHZXQgdGhlIFN5bWJvbCBmaXJtd2FyZSB2ZXJzaW9uICovCi0JCWVyciA9IGhlcm1lc19yZWFkX2x0dihodywgVVNFUl9CQVAsCi0JCQkJICAgICAgSEVSTUVTX1JJRF9TRUNPTkRBUllWRVJTSU9OX1NZTUJPTCwKLQkJCQkgICAgICBTWU1CT0xfTUFYX1ZFUl9MRU4sIE5VTEwsICZ0bXApOwotCQlpZiAoZXJyKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkgICAgICAgIiVzOiBFcnJvciAlZCByZWFkaW5nIFN5bWJvbCBmaXJtd2FyZSBpbmZvLiBXaWxkbHkgZ3Vlc3NpbmcgY2FwYWJpbGl0aWVzLi4uXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkJCWZpcm12ZXIgPSAwOwotCQkJdG1wWzBdID0gJ1wwJzsKLQkJfSBlbHNlIHsKLQkJCS8qIFRoZSBmaXJtd2FyZSByZXZpc2lvbiBpcyBhIHN0cmluZywgdGhlIGZvcm1hdCBpcwotCQkJICogc29tZXRoaW5nIGxpa2UgOiAiVjIuMjAtMDEiLgotCQkJICogUXVpY2sgYW5kIGRpcnR5IHBhcnNpbmcuLi4gLSBKZWFuIElJCi0JCQkgKi8KLQkJCWZpcm12ZXIgPSAoKHRtcFsxXSAtICcwJykgPDwgMTYpIHwgKCh0bXBbM10gLSAnMCcpIDw8IDEyKQotCQkJCXwgKCh0bXBbNF0gLSAnMCcpIDw8IDgpIHwgKCh0bXBbNl0gLSAnMCcpIDw8IDQpCi0JCQkJfCAodG1wWzddIC0gJzAnKTsKLQotCQkJdG1wW1NZTUJPTF9NQVhfVkVSX0xFTl0gPSAnXDAnOwotCQl9Ci0KLQkJc25wcmludGYocHJpdi0+ZndfbmFtZSwgc2l6ZW9mKHByaXYtPmZ3X25hbWUpIC0gMSwKLQkJCSAiU3ltYm9sICVzIiwgdG1wKTsKLQotCQlwcml2LT5oYXNfaWJzcyA9IChmaXJtdmVyID49IDB4MjAwMDApOwotCQlwcml2LT5oYXNfd2VwID0gKGZpcm12ZXIgPj0gMHgxNTAxMik7Ci0JCXByaXYtPmhhc19iaWdfd2VwID0gKGZpcm12ZXIgPj0gMHgyMDAwMCk7Ci0JCXByaXYtPmhhc19wbSA9IChmaXJtdmVyID49IDB4MjAwMDAgJiYgZmlybXZlciA8IDB4MjIwMDApIHx8IAotCQkJICAgICAgIChmaXJtdmVyID49IDB4MjkwMDAgJiYgZmlybXZlciA8IDB4MzAwMDApIHx8Ci0JCQkgICAgICAgZmlybXZlciA+PSAweDMxMDAwOwotCQlwcml2LT5oYXNfcHJlYW1ibGUgPSAoZmlybXZlciA+PSAweDIwMDAwKTsKLQkJcHJpdi0+aWJzc19wb3J0ID0gNDsKLQotCQkvKiBTeW1ib2wgZmlybXdhcmUgaXMgZm91bmQgb24gdmFyaW91cyBjYXJkcywgYnV0Ci0JCSAqIHRoZXJlIGhhcyBiZWVuIG5vIGF0dGVtcHQgdG8gY2hlY2sgZmlybXdhcmUKLQkJICogZG93bmxvYWQgb24gbm9uLXNwZWN0cnVtX2NzIGJhc2VkIGNhcmRzLgotCQkgKgotCQkgKiBHaXZlbiB0aGF0IHRoZSBBZ2VyZSBmaXJtd2FyZSBkb3dubG9hZCB3b3JrcwotCQkgKiBkaWZmZXJlbnRseSwgd2Ugc2hvdWxkIGF2b2lkIGRvaW5nIGEgZmlybXdhcmUKLQkJICogZG93bmxvYWQgd2l0aCB0aGUgU3ltYm9sIGFsZ29yaXRobSBvbiBub24tc3BlY3RydW0KLQkJICogY2FyZHMuCi0JCSAqCi0JCSAqIEZvciBub3cgd2UgY2FuIGlkZW50aWZ5IGEgc3BlY3RydW1fY3MgYmFzZWQgY2FyZAotCQkgKiBiZWNhdXNlIGl0IGhhcyBhIGZpcm13YXJlIHJlc2V0IGZ1bmN0aW9uLgotCQkgKi8KLQkJcHJpdi0+ZG9fZndfZG93bmxvYWQgPSAocHJpdi0+c3RvcF9mdyAhPSBOVUxMKTsKLQotIAkJcHJpdi0+YnJva2VuX2Rpc2FibGVwb3J0ID0gKGZpcm12ZXIgPT0gMHgyNTAxMykgfHwKLSAJCQkJCSAgIChmaXJtdmVyID49IDB4MzAwMDAgJiYgZmlybXZlciA8PSAweDMxMDAwKTsKLQkJcHJpdi0+aGFzX2hvc3RzY2FuID0gKGZpcm12ZXIgPj0gMHgzMTAwMSkgfHwKLQkJCQkgICAgIChmaXJtdmVyID49IDB4MjkwNTcgJiYgZmlybXZlciA8IDB4MzAwMDApOwotCQkvKiBUZXN0ZWQgd2l0aCBJbnRlbCBmaXJtd2FyZSA6IDB4MjAwMTUgPT4gSmVhbiBJSSAqLwotCQkvKiBUZXN0ZWQgd2l0aCAzQ29tIGZpcm13YXJlIDogMHgxNTAxMiAmIDB4MjIwMDEgPT4gSmVhbiBJSSAqLwotCQlicmVhazsKLQljYXNlIEZJUk1XQVJFX1RZUEVfSU5URVJTSUw6Ci0JCS8qIEQtTGluaywgTGlua3N5cywgQWR0cm9uLCBab29tQWlyLCBhbmQgbWFueSBvdGhlcnMuLi4KLQkJICogU2Ftc3VuZywgQ29tcGFxIDEwMC8yMDAgYW5kIFByb3hpbSBhcmUgc2xpZ2h0bHkKLQkJICogZGlmZmVyZW50IGFuZCBsZXNzIHdlbGwgdGVzdGVkICovCi0JCS8qIEQtTGluayBNQUMgOiAwMDo0MDowNToqICovCi0JCS8qIEFkZHRyb24gTUFDIDogMDA6OTA6RDE6KiAqLwotCQlzbnByaW50Zihwcml2LT5md19uYW1lLCBzaXplb2YocHJpdi0+ZndfbmFtZSkgLSAxLAotCQkJICJJbnRlcnNpbCAlZC4lZC4lZCIsIHN0YV9pZC5tYWpvciwgc3RhX2lkLm1pbm9yLAotCQkJIHN0YV9pZC52YXJpYW50KTsKLQotCQlmaXJtdmVyID0gKCh1bnNpZ25lZCBsb25nKXN0YV9pZC5tYWpvciA8PCAxNikgfAotCQkJKCh1bnNpZ25lZCBsb25nKXN0YV9pZC5taW5vciA8PCA4KSB8IHN0YV9pZC52YXJpYW50OwotCi0JCXByaXYtPmhhc19pYnNzID0gKGZpcm12ZXIgPj0gMHgwMDA3MDApOyAvKiBGSVhNRSAqLwotCQlwcml2LT5oYXNfYmlnX3dlcCA9IHByaXYtPmhhc193ZXAgPSAoZmlybXZlciA+PSAweDAwMDgwMCk7Ci0JCXByaXYtPmhhc19wbSA9IChmaXJtdmVyID49IDB4MDAwNzAwKTsKLQkJcHJpdi0+aGFzX2hvc3RzY2FuID0gKGZpcm12ZXIgPj0gMHgwMTAzMDEpOwotCi0JCWlmIChmaXJtdmVyID49IDB4MDAwODAwKQotCQkJcHJpdi0+aWJzc19wb3J0ID0gMDsKLQkJZWxzZSB7Ci0JCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiBJbnRlcnNpbCBmaXJtd2FyZSBlYXJsaWVyICIKLQkJCSAgICAgICAidGhhbiB2MC44LnggLSBzZXZlcmFsIGZlYXR1cmVzIG5vdCBzdXBwb3J0ZWRcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJCXByaXYtPmlic3NfcG9ydCA9IDE7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCXByaW50ayhLRVJOX0RFQlVHICIlczogRmlybXdhcmUgZGV0ZXJtaW5lZCBhcyAlc1xuIiwgZGV2LT5uYW1lLAotCSAgICAgICBwcml2LT5md19uYW1lKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG9yaW5vY29faW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKLQlpbnQgZXJyID0gMDsKLQlzdHJ1Y3QgaGVybWVzX2lkc3RyaW5nIG5pY2tidWY7Ci0JdTE2IHJlY2xlbjsKLQlpbnQgbGVuOwotCi0JLyogTm8gbmVlZCB0byBsb2NrLCB0aGUgaHdfdW5hdmFpbGFibGUgZmxhZyBpcyBhbHJlYWR5IHNldCBpbgotCSAqIGFsbG9jX29yaW5vY29kZXYoKSAqLwotCXByaXYtPm5pY2J1Zl9zaXplID0gSUVFRTgwMjExX01BWF9GUkFNRV9MRU4gKyBFVEhfSExFTjsKLQotCS8qIEluaXRpYWxpemUgdGhlIGZpcm13YXJlICovCi0JZXJyID0gaGVybWVzX2luaXQoaHcpOwotCWlmIChlcnIgIT0gMCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gaW5pdGlhbGl6ZSBmaXJtd2FyZSAoZXJyID0gJWQpXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQllcnIgPSBkZXRlcm1pbmVfZmlybXdhcmUoZGV2KTsKLQlpZiAoZXJyICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogSW5jb21wYXRpYmxlIGZpcm13YXJlLCBhYm9ydGluZ1xuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWlmIChwcml2LT5kb19md19kb3dubG9hZCkgewotI2lmZGVmIENPTkZJR19IRVJNRVNfQ0FDSEVfRldfT05fSU5JVAotCQlvcmlub2NvX2NhY2hlX2Z3KHByaXYsIDApOwotI2VuZGlmCi0KLQkJZXJyID0gb3Jpbm9jb19kb3dubG9hZChwcml2KTsKLQkJaWYgKGVycikKLQkJCXByaXYtPmRvX2Z3X2Rvd25sb2FkID0gMDsKLQotCQkvKiBDaGVjayBmaXJtd2FyZSB2ZXJzaW9uIGFnYWluICovCi0JCWVyciA9IGRldGVybWluZV9maXJtd2FyZShkZXYpOwotCQlpZiAoZXJyICE9IDApIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEluY29tcGF0aWJsZSBmaXJtd2FyZSwgYWJvcnRpbmdcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JfQotCi0JaWYgKHByaXYtPmhhc19wb3J0MykKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBBZC1ob2MgZGVtbyBtb2RlIHN1cHBvcnRlZFxuIiwgZGV2LT5uYW1lKTsKLQlpZiAocHJpdi0+aGFzX2lic3MpCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczogSUVFRSBzdGFuZGFyZCBJQlNTIGFkLWhvYyBtb2RlIHN1cHBvcnRlZFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7Ci0JaWYgKHByaXYtPmhhc193ZXApIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBXRVAgc3VwcG9ydGVkLCAiLCBkZXYtPm5hbWUpOwotCQlpZiAocHJpdi0+aGFzX2JpZ193ZXApCi0JCQlwcmludGsoIjEwNC1iaXQga2V5XG4iKTsKLQkJZWxzZQotCQkJcHJpbnRrKCI0MC1iaXQga2V5XG4iKTsKLQl9Ci0JaWYgKHByaXYtPmhhc193cGEpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBXUEEtUFNLIHN1cHBvcnRlZFxuIiwgZGV2LT5uYW1lKTsKLQkJaWYgKG9yaW5vY29fbWljX2luaXQocHJpdikpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEZhaWxlZCB0byBzZXR1cCBNSUMgY3J5cHRvICIKLQkJCSAgICAgICAiYWxnb3JpdGhtLiBEaXNhYmxpbmcgV1BBIHN1cHBvcnRcbiIsIGRldi0+bmFtZSk7Ci0JCQlwcml2LT5oYXNfd3BhID0gMDsKLQkJfQotCX0KLQotCS8qIE5vdyB3ZSBoYXZlIHRoZSBmaXJtd2FyZSBjYXBhYmlsaXRpZXMsIGFsbG9jYXRlIGFwcHJvcGlhdGUKLQkgKiBzaXplZCBzY2FuIGJ1ZmZlcnMgKi8KLQlpZiAob3Jpbm9jb19ic3NfZGF0YV9hbGxvY2F0ZShwcml2KSkKLQkJZ290byBvdXQ7Ci0Jb3Jpbm9jb19ic3NfZGF0YV9pbml0KHByaXYpOwotCi0JLyogR2V0IHRoZSBNQUMgYWRkcmVzcyAqLwotCWVyciA9IGhlcm1lc19yZWFkX2x0dihodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ05GT1dOTUFDQUREUiwKLQkJCSAgICAgIEVUSF9BTEVOLCBOVUxMLCBkZXYtPmRldl9hZGRyKTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBmYWlsZWQgdG8gcmVhZCBNQUMgYWRkcmVzcyFcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IE1BQyBhZGRyZXNzICVwTVxuIiwKLQkgICAgICAgZGV2LT5uYW1lLCBkZXYtPmRldl9hZGRyKTsKLQotCS8qIEdldCB0aGUgc3RhdGlvbiBuYW1lICovCi0JZXJyID0gaGVybWVzX3JlYWRfbHR2KGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DTkZPV05OQU1FLAotCQkJICAgICAgc2l6ZW9mKG5pY2tidWYpLCAmcmVjbGVuLCAmbmlja2J1Zik7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gcmVhZCBzdGF0aW9uIG5hbWVcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUpOwotCQlnb3RvIG91dDsKLQl9Ci0JaWYgKG5pY2tidWYubGVuKQotCQlsZW4gPSBtaW4oSVdfRVNTSURfTUFYX1NJWkUsIChpbnQpbGUxNl90b19jcHUobmlja2J1Zi5sZW4pKTsKLQllbHNlCi0JCWxlbiA9IG1pbihJV19FU1NJRF9NQVhfU0laRSwgMiAqIHJlY2xlbik7Ci0JbWVtY3B5KHByaXYtPm5pY2ssICZuaWNrYnVmLnZhbCwgbGVuKTsKLQlwcml2LT5uaWNrW2xlbl0gPSAnXDAnOwotCi0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBTdGF0aW9uIG5hbWUgXCIlc1wiXG4iLCBkZXYtPm5hbWUsIHByaXYtPm5pY2spOwotCi0JZXJyID0gb3Jpbm9jb19hbGxvY2F0ZV9maWQoZGV2KTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBOSUMgYnVmZmVyIVxuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCS8qIEdldCBhbGxvd2VkIGNoYW5uZWxzICovCi0JZXJyID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ0hBTk5FTExJU1QsCi0JCQkJICAmcHJpdi0+Y2hhbm5lbF9tYXNrKTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byByZWFkIGNoYW5uZWwgbGlzdCFcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQkvKiBHZXQgaW5pdGlhbCBBUCBkZW5zaXR5ICovCi0JZXJyID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ05GU1lTVEVNU0NBTEUsCi0JCQkJICAmcHJpdi0+YXBfZGVuc2l0eSk7Ci0JaWYgKGVyciB8fCBwcml2LT5hcF9kZW5zaXR5IDwgMSB8fCBwcml2LT5hcF9kZW5zaXR5ID4gMykgewotCQlwcml2LT5oYXNfc2Vuc2l0aXZpdHkgPSAwOwotCX0KLQotCS8qIEdldCBpbml0aWFsIFJUUyB0aHJlc2hvbGQgKi8KLQllcnIgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DTkZSVFNUSFJFU0hPTEQsCi0JCQkJICAmcHJpdi0+cnRzX3RocmVzaCk7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gcmVhZCBSVFMgdGhyZXNob2xkIVxuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCS8qIEdldCBpbml0aWFsIGZyYWdtZW50YXRpb24gc2V0dGluZ3MgKi8KLQlpZiAocHJpdi0+aGFzX213bykKLQkJZXJyID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsCi0JCQkJCSAgSEVSTUVTX1JJRF9DTkZNV09ST0JVU1RfQUdFUkUsCi0JCQkJCSAgJnByaXYtPm13b19yb2J1c3QpOwotCWVsc2UKLQkJZXJyID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ05GRlJBR01FTlRBVElPTlRIUkVTSE9MRCwKLQkJCQkJICAmcHJpdi0+ZnJhZ190aHJlc2gpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIHJlYWQgZnJhZ21lbnRhdGlvbiBzZXR0aW5ncyFcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQkvKiBQb3dlciBtYW5hZ2VtZW50IHNldHVwICovCi0JaWYgKHByaXYtPmhhc19wbSkgewotCQlwcml2LT5wbV9vbiA9IDA7Ci0JCXByaXYtPnBtX21jYXN0ID0gMTsKLQkJZXJyID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsCi0JCQkJCSAgSEVSTUVTX1JJRF9DTkZNQVhTTEVFUERVUkFUSU9OLAotCQkJCQkgICZwcml2LT5wbV9wZXJpb2QpOwotCQlpZiAoZXJyKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gcmVhZCBwb3dlciBtYW5hZ2VtZW50IHBlcmlvZCFcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAotCQkJCQkgIEhFUk1FU19SSURfQ05GUE1IT0xET1ZFUkRVUkFUSU9OLAotCQkJCQkgICZwcml2LT5wbV90aW1lb3V0KTsKLQkJaWYgKGVycikgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIHJlYWQgcG93ZXIgbWFuYWdlbWVudCB0aW1lb3V0IVxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUpOwotCQkJZ290byBvdXQ7Ci0JCX0KLQl9Ci0KLQkvKiBQcmVhbWJsZSBzZXR1cCAqLwotCWlmIChwcml2LT5oYXNfcHJlYW1ibGUpIHsKLQkJZXJyID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsCi0JCQkJCSAgSEVSTUVTX1JJRF9DTkZQUkVBTUJMRV9TWU1CT0wsCi0JCQkJCSAgJnByaXYtPnByZWFtYmxlKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gb3V0OwotCX0KLQkJCi0JLyogU2V0IHVwIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gKi8KLQlwcml2LT5pd19tb2RlID0gSVdfTU9ERV9JTkZSQTsKLQkvKiBCeSBkZWZhdWx0IHVzZSBJRUVFL0lCU1MgYWQtaG9jIG1vZGUgaWYgd2UgaGF2ZSBpdCAqLwotCXByaXYtPnByZWZlcl9wb3J0MyA9IHByaXYtPmhhc19wb3J0MyAmJiAoISBwcml2LT5oYXNfaWJzcyk7Ci0Jc2V0X3BvcnRfdHlwZShwcml2KTsKLQlwcml2LT5jaGFubmVsID0gMDsgLyogdXNlIGZpcm13YXJlIGRlZmF1bHQgKi8KLQotCXByaXYtPnByb21pc2N1b3VzID0gMDsKLQlwcml2LT5lbmNvZGVfYWxnID0gSVdfRU5DT0RFX0FMR19OT05FOwotCXByaXYtPnR4X2tleSA9IDA7Ci0JcHJpdi0+d3BhX2VuYWJsZWQgPSAwOwotCXByaXYtPnRraXBfY21fYWN0aXZlID0gMDsKLQlwcml2LT5rZXlfbWdtdCA9IDA7Ci0JcHJpdi0+d3BhX2llX2xlbiA9IDA7Ci0JcHJpdi0+d3BhX2llID0gTlVMTDsKLQotCS8qIE1ha2UgdGhlIGhhcmR3YXJlIGF2YWlsYWJsZSwgYXMgbG9uZyBhcyBpdCBoYXNuJ3QgYmVlbgotCSAqIHJlbW92ZWQgZWxzZXdoZXJlIChlLmcuIGJ5IFBDTUNJQSBob3QgdW5wbHVnKSAqLwotCXNwaW5fbG9ja19pcnEoJnByaXYtPmxvY2spOwotCXByaXYtPmh3X3VuYXZhaWxhYmxlLS07Ci0Jc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5sb2NrKTsKLQotCXByaW50ayhLRVJOX0RFQlVHICIlczogcmVhZHlcbiIsIGRldi0+bmFtZSk7Ci0KLSBvdXQ6Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RydWN0IG5ldF9kZXZpY2UKLSphbGxvY19vcmlub2NvZGV2KGludCBzaXplb2ZfY2FyZCwKLQkJICBzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsCi0JCSAgaW50ICgqaGFyZF9yZXNldCkoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqKSwKLQkJICBpbnQgKCpzdG9wX2Z3KShzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICosIGludCkpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2OwotCi0JZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUpICsgc2l6ZW9mX2NhcmQpOwotCWlmICghIGRldikKLQkJcmV0dXJuIE5VTEw7Ci0JcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JcHJpdi0+bmRldiA9IGRldjsKLQlpZiAoc2l6ZW9mX2NhcmQpCi0JCXByaXYtPmNhcmQgPSAodm9pZCAqKSgodW5zaWduZWQgbG9uZylwcml2Ci0JCQkJICAgICAgKyBzaXplb2Yoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSkpOwotCWVsc2UKLQkJcHJpdi0+Y2FyZCA9IE5VTEw7Ci0JcHJpdi0+ZGV2ID0gZGV2aWNlOwotCi0JLyogU2V0dXAgLyBvdmVycmlkZSBuZXRfZGV2aWNlIGZpZWxkcyAqLwotCWRldi0+aW5pdCA9IG9yaW5vY29faW5pdDsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IG9yaW5vY29feG1pdDsKLQlkZXYtPnR4X3RpbWVvdXQgPSBvcmlub2NvX3R4X3RpbWVvdXQ7Ci0JZGV2LT53YXRjaGRvZ190aW1lbyA9IEhaOyAvKiAxIHNlY29uZCB0aW1lb3V0ICovCi0JZGV2LT5nZXRfc3RhdHMgPSBvcmlub2NvX2dldF9zdGF0czsKLQlkZXYtPmV0aHRvb2xfb3BzID0gJm9yaW5vY29fZXRodG9vbF9vcHM7Ci0JZGV2LT53aXJlbGVzc19oYW5kbGVycyA9IChzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYgKikmb3Jpbm9jb19oYW5kbGVyX2RlZjsKLSNpZmRlZiBXSVJFTEVTU19TUFkKLQlwcml2LT53aXJlbGVzc19kYXRhLnNweV9kYXRhID0gJnByaXYtPnNweV9kYXRhOwotCWRldi0+d2lyZWxlc3NfZGF0YSA9ICZwcml2LT53aXJlbGVzc19kYXRhOwotI2VuZGlmCi0JZGV2LT5jaGFuZ2VfbXR1ID0gb3Jpbm9jb19jaGFuZ2VfbXR1OwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gb3Jpbm9jb19zZXRfbXVsdGljYXN0X2xpc3Q7Ci0JLyogd2UgdXNlIHRoZSBkZWZhdWx0IGV0aF9tYWNfYWRkciBmb3Igc2V0dGluZyB0aGUgTUFDIGFkZHIgKi8KLQotCS8qIFJlc2VydmUgc3BhY2UgaW4gc2tiIGZvciB0aGUgU05BUCBoZWFkZXIgKi8KLQlkZXYtPmhhcmRfaGVhZGVyX2xlbiArPSBFTkNBUFNfT1ZFUkhFQUQ7Ci0KLQkvKiBTZXQgdXAgZGVmYXVsdCBjYWxsYmFja3MgKi8KLQlkZXYtPm9wZW4gPSBvcmlub2NvX29wZW47Ci0JZGV2LT5zdG9wID0gb3Jpbm9jb19zdG9wOwotCXByaXYtPmhhcmRfcmVzZXQgPSBoYXJkX3Jlc2V0OwotCXByaXYtPnN0b3BfZncgPSBzdG9wX2Z3OwotCi0Jc3Bpbl9sb2NrX2luaXQoJnByaXYtPmxvY2spOwotCXByaXYtPm9wZW4gPSAwOwotCXByaXYtPmh3X3VuYXZhaWxhYmxlID0gMTsgLyogb3Jpbm9jb19pbml0KCkgbXVzdCBjbGVhciB0aGlzCi0JCQkJICAgKiBiZWZvcmUgYW55dGhpbmcgZWxzZSB0b3VjaGVzIHRoZQotCQkJCSAgICogaGFyZHdhcmUgKi8KLQlJTklUX1dPUksoJnByaXYtPnJlc2V0X3dvcmssIG9yaW5vY29fcmVzZXQpOwotCUlOSVRfV09SSygmcHJpdi0+am9pbl93b3JrLCBvcmlub2NvX2pvaW5fYXApOwotCUlOSVRfV09SSygmcHJpdi0+d2V2ZW50X3dvcmssIG9yaW5vY29fc2VuZF93ZXZlbnRzKTsKLQotCUlOSVRfTElTVF9IRUFEKCZwcml2LT5yeF9saXN0KTsKLQl0YXNrbGV0X2luaXQoJnByaXYtPnJ4X3Rhc2tsZXQsIG9yaW5vY29fcnhfaXNyX3Rhc2tsZXQsCi0JCSAgICAgKHVuc2lnbmVkIGxvbmcpIGRldik7Ci0KLQluZXRpZl9jYXJyaWVyX29mZihkZXYpOwotCXByaXYtPmxhc3RfbGlua3N0YXR1cyA9IDB4ZmZmZjsKLQotCXByaXYtPmNhY2hlZF9wcmlfZncgPSBOVUxMOwotCXByaXYtPmNhY2hlZF9mdyA9IE5VTEw7Ci0KLQkvKiBSZWdpc3RlciBQTSBub3RpZmllcnMgKi8KLQlvcmlub2NvX3JlZ2lzdGVyX3BtX25vdGlmaWVyKHByaXYpOwotCi0JcmV0dXJuIGRldjsKLX0KLQotdm9pZCBmcmVlX29yaW5vY29kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3Qgb3Jpbm9jb19yeF9kYXRhICpyeF9kYXRhLCAqdGVtcDsKLQotCS8qIElmIHRoZSB0YXNrbGV0IGlzIHNjaGVkdWxlZCB3aGVuIHdlIGNhbGwgdGFza2xldF9raWxsIGl0Ci0JICogd2lsbCBydW4gb25lIGZpbmFsIHRpbWUuIEhvd2V2ZXIgdGhlIHRhc2tsZXQgd2lsbCBvbmx5Ci0JICogZHJhaW4gcHJpdi0+cnhfbGlzdCBpZiB0aGUgaHcgaXMgc3RpbGwgYXZhaWxhYmxlLiAqLwotCXRhc2tsZXRfa2lsbCgmcHJpdi0+cnhfdGFza2xldCk7Ci0KLQkvKiBFeHBsaWNpdGx5IGRyYWluIHByaXYtPnJ4X2xpc3QgKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnhfZGF0YSwgdGVtcCwgJnByaXYtPnJ4X2xpc3QsIGxpc3QpIHsKLQkJbGlzdF9kZWwoJnJ4X2RhdGEtPmxpc3QpOwotCi0JCWRldl9rZnJlZV9za2IocnhfZGF0YS0+c2tiKTsKLQkJa2ZyZWUocnhfZGF0YS0+ZGVzYyk7Ci0JCWtmcmVlKHJ4X2RhdGEpOwotCX0KLQotCW9yaW5vY29fdW5yZWdpc3Rlcl9wbV9ub3RpZmllcihwcml2KTsKLQlvcmlub2NvX3VuY2FjaGVfZncocHJpdik7Ci0KLQlwcml2LT53cGFfaWVfbGVuID0gMDsKLQlrZnJlZShwcml2LT53cGFfaWUpOwotCW9yaW5vY29fbWljX2ZyZWUocHJpdik7Ci0Jb3Jpbm9jb19ic3NfZGF0YV9mcmVlKHByaXYpOwotCWZyZWVfbmV0ZGV2KGRldik7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIFdpcmVsZXNzIGV4dGVuc2lvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogUmV0dXJuIDogPCAwIC0+IGVycm9yIGNvZGUgOyA+PSAwIC0+IGxlbmd0aCAqLwotc3RhdGljIGludCBvcmlub2NvX2h3X2dldF9lc3NpZChzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LCBpbnQgKmFjdGl2ZSwKLQkJCQljaGFyIGJ1ZltJV19FU1NJRF9NQVhfU0laRSsxXSkKLXsKLQloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7Ci0JaW50IGVyciA9IDA7Ci0Jc3RydWN0IGhlcm1lc19pZHN0cmluZyBlc3NpZGJ1ZjsKLQljaGFyICpwID0gKGNoYXIgKikoJmVzc2lkYnVmLnZhbCk7Ci0JaW50IGxlbjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCXJldHVybiAtRUJVU1k7Ci0KLQlpZiAoc3RybGVuKHByaXYtPmRlc2lyZWRfZXNzaWQpID4gMCkgewotCQkvKiBXZSByZWFkIHRoZSBkZXNpcmVkIFNTSUQgZnJvbSB0aGUgaGFyZHdhcmUgcmF0aGVyCi0JCSAgIHRoYW4gZnJvbSBwcml2LT5kZXNpcmVkX2Vzc2lkLCBqdXN0IGluIGNhc2UgdGhlCi0JCSAgIGZpcm13YXJlIGlzIGFsbG93ZWQgdG8gY2hhbmdlIGl0IG9uIHVzLiBJJ20gbm90Ci0JCSAgIHN1cmUgYWJvdXQgdGhpcyAqLwotCQkvKiBNeSBndWVzcyBpcyB0aGF0IHRoZSBPV05TU0lEIHNob3VsZCBhbHdheXMgYmUgd2hhdGV2ZXIKLQkJICogd2Ugc2V0IHRvIHRoZSBjYXJkLCB3aGVyZWFzIENVUlJFTlRfU1NJRCBpcyB0aGUgb25lIHRoYXQKLQkJICogbWF5IGNoYW5nZS4uLiAtIEplYW4gSUkgKi8KLQkJdTE2IHJpZDsKLQotCQkqYWN0aXZlID0gMTsKLQotCQlyaWQgPSAocHJpdi0+cG9ydF90eXBlID09IDMpID8gSEVSTUVTX1JJRF9DTkZPV05TU0lEIDoKLQkJCUhFUk1FU19SSURfQ05GREVTSVJFRFNTSUQ7Ci0JCQotCQllcnIgPSBoZXJtZXNfcmVhZF9sdHYoaHcsIFVTRVJfQkFQLCByaWQsIHNpemVvZihlc3NpZGJ1ZiksCi0JCQkJICAgICAgTlVMTCwgJmVzc2lkYnVmKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gZmFpbF91bmxvY2s7Ci0JfSBlbHNlIHsKLQkJKmFjdGl2ZSA9IDA7Ci0KLQkJZXJyID0gaGVybWVzX3JlYWRfbHR2KGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DVVJSRU5UU1NJRCwKLQkJCQkgICAgICBzaXplb2YoZXNzaWRidWYpLCBOVUxMLCAmZXNzaWRidWYpOwotCQlpZiAoZXJyKQotCQkJZ290byBmYWlsX3VubG9jazsKLQl9Ci0KLQlsZW4gPSBsZTE2X3RvX2NwdShlc3NpZGJ1Zi5sZW4pOwotCUJVR19PTihsZW4gPiBJV19FU1NJRF9NQVhfU0laRSk7Ci0KLQltZW1zZXQoYnVmLCAwLCBJV19FU1NJRF9NQVhfU0laRSk7Ci0JbWVtY3B5KGJ1ZiwgcCwgbGVuKTsKLQllcnIgPSBsZW47Ci0KLSBmYWlsX3VubG9jazoKLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCi0JcmV0dXJuIGVycjsgICAgICAgCi19Ci0KLXN0YXRpYyBsb25nIG9yaW5vY29faHdfZ2V0X2ZyZXEoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKLXsKLQkKLQloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7Ci0JaW50IGVyciA9IDA7Ci0JdTE2IGNoYW5uZWw7Ci0JbG9uZyBmcmVxID0gMDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCXJldHVybiAtRUJVU1k7Ci0JCi0JZXJyID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ1VSUkVOVENIQU5ORUwsICZjaGFubmVsKTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dDsKLQotCS8qIEludGVyc2lsIGZpcm13YXJlIDEuMy41IHJldHVybnMgMCB3aGVuIHRoZSBpbnRlcmZhY2UgaXMgZG93biAqLwotCWlmIChjaGFubmVsID09IDApIHsKLQkJZXJyID0gLUVCVVNZOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAoIChjaGFubmVsIDwgMSkgfHwgKGNoYW5uZWwgPiBOVU1fQ0hBTk5FTFMpICkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogQ2hhbm5lbCBvdXQgb2YgcmFuZ2UgKCVkKSFcbiIsCi0JCSAgICAgICBwcml2LT5uZGV2LT5uYW1lLCBjaGFubmVsKTsKLQkJZXJyID0gLUVCVVNZOwotCQlnb3RvIG91dDsKLQotCX0KLQlmcmVxID0gY2hhbm5lbF9mcmVxdWVuY3lbY2hhbm5lbC0xXSAqIDEwMDAwMDsKLQotIG91dDoKLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCi0JaWYgKGVyciA+IDApCi0JCWVyciA9IC1FQlVTWTsKLQlyZXR1cm4gZXJyID8gZXJyIDogZnJlcTsKLX0KLQotc3RhdGljIGludCBvcmlub2NvX2h3X2dldF9iaXRyYXRlbGlzdChzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LAotCQkJCSAgICAgIGludCAqbnVtcmF0ZXMsIHMzMiAqcmF0ZXMsIGludCBtYXgpCi17Ci0JaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OwotCXN0cnVjdCBoZXJtZXNfaWRzdHJpbmcgbGlzdDsKLQl1bnNpZ25lZCBjaGFyICpwID0gKHVuc2lnbmVkIGNoYXIgKikmbGlzdC52YWw7Ci0JaW50IGVyciA9IDA7Ci0JaW50IG51bTsKLQlpbnQgaTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCXJldHVybiAtRUJVU1k7Ci0KLQllcnIgPSBoZXJtZXNfcmVhZF9sdHYoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX1NVUFBPUlRFRERBVEFSQVRFUywKLQkJCSAgICAgIHNpemVvZihsaXN0KSwgTlVMTCwgJmxpc3QpOwotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0KLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCQotCW51bSA9IGxlMTZfdG9fY3B1KGxpc3QubGVuKTsKLQkqbnVtcmF0ZXMgPSBudW07Ci0JbnVtID0gbWluKG51bSwgbWF4KTsKLQotCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykgewotCQlyYXRlc1tpXSA9IChwW2ldICYgMHg3ZikgKiA1MDAwMDA7IC8qIGNvbnZlcnQgdG8gYnBzICovCi0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRuYW1lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJIGNoYXIgKm5hbWUsCi0JCQkJIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBudW1yYXRlczsKLQlpbnQgZXJyOwotCi0JZXJyID0gb3Jpbm9jb19od19nZXRfYml0cmF0ZWxpc3QocHJpdiwgJm51bXJhdGVzLCBOVUxMLCAwKTsKLQotCWlmICghZXJyICYmIChudW1yYXRlcyA+IDIpKQotCQlzdHJjcHkobmFtZSwgIklFRUUgODAyLjExYiIpOwotCWVsc2UKLQkJc3RyY3B5KG5hbWUsICJJRUVFIDgwMi4xMS1EUyIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9zZXR3YXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCXN0cnVjdCBzb2NrYWRkciAqYXBfYWRkciwKLQkJCQljaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgZXJyID0gLUVJTlBST0dSRVNTOwkJLyogQ2FsbCBjb21taXQgaGFuZGxlciAqLwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RhdGljIGNvbnN0IHU4IG9mZl9hZGRyW10gPSB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfTsKLQlzdGF0aWMgY29uc3QgdTggYW55X2FkZHJbXSA9IHsgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiB9OwotCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCXJldHVybiAtRUJVU1k7Ci0KLQkvKiBFbmFibGUgYXV0b21hdGljIHJvYW1pbmcgLSBubyBzYW5pdHkgY2hlY2tzIGFyZSBuZWVkZWQgKi8KLQlpZiAobWVtY21wKCZhcF9hZGRyLT5zYV9kYXRhLCBvZmZfYWRkciwgRVRIX0FMRU4pID09IDAgfHwKLQkgICAgbWVtY21wKCZhcF9hZGRyLT5zYV9kYXRhLCBhbnlfYWRkciwgRVRIX0FMRU4pID09IDApIHsKLQkJcHJpdi0+YnNzaWRfZml4ZWQgPSAwOwotCQltZW1zZXQocHJpdi0+ZGVzaXJlZF9ic3NpZCwgMCwgRVRIX0FMRU4pOwotCi0JCS8qICJvZmYiIG1lYW5zIGtlZXAgZXhpc3RpbmcgY29ubmVjdGlvbiAqLwotCQlpZiAoYXBfYWRkci0+c2FfZGF0YVswXSA9PSAwKSB7Ci0JCQlfX29yaW5vY29faHdfc2V0X3dhcChwcml2KTsKLQkJCWVyciA9IDA7Ci0JCX0KLQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKHByaXYtPmZpcm13YXJlX3R5cGUgPT0gRklSTVdBUkVfVFlQRV9BR0VSRSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogTHVjZW50L0FnZXJlIGZpcm13YXJlIGRvZXNuJ3QgIgotCQkgICAgICAgInN1cHBvcnQgbWFudWFsIHJvYW1pbmdcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUpOwotCQllcnIgPSAtRU9QTk9UU1VQUDsKLQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKHByaXYtPml3X21vZGUgIT0gSVdfTU9ERV9JTkZSQSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogTWFudWFsIHJvYW1pbmcgc3VwcG9ydGVkIG9ubHkgaW4gIgotCQkgICAgICAgIm1hbmFnZWQgbW9kZVxuIiwgZGV2LT5uYW1lKTsKLQkJZXJyID0gLUVPUE5PVFNVUFA7Ci0JCWdvdG8gb3V0OwotCX0KLQotCS8qIEludGVyc2lsIGZpcm13YXJlIGhhbmdzIHdpdGhvdXQgRGVzaXJlZCBFU1NJRCAqLwotCWlmIChwcml2LT5maXJtd2FyZV90eXBlID09IEZJUk1XQVJFX1RZUEVfSU5URVJTSUwgJiYKLQkgICAgc3RybGVuKHByaXYtPmRlc2lyZWRfZXNzaWQpID09IDApIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IERlc2lyZWQgRVNTSUQgbXVzdCBiZSBzZXQgZm9yICIKLQkJICAgICAgICJtYW51YWwgcm9hbWluZ1xuIiwgZGV2LT5uYW1lKTsKLQkJZXJyID0gLUVPUE5PVFNVUFA7Ci0JCWdvdG8gb3V0OwotCX0KLQotCS8qIEZpbmFsbHksIGVuYWJsZSBtYW51YWwgcm9hbWluZyAqLwotCXByaXYtPmJzc2lkX2ZpeGVkID0gMTsKLQltZW1jcHkocHJpdi0+ZGVzaXJlZF9ic3NpZCwgJmFwX2FkZHItPnNhX2RhdGEsIEVUSF9BTEVOKTsKLQotIG91dDoKLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXR3YXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCXN0cnVjdCBzb2NrYWRkciAqYXBfYWRkciwKLQkJCQljaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKLQlpbnQgZXJyID0gMDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCXJldHVybiAtRUJVU1k7Ci0KLQlhcF9hZGRyLT5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7Ci0JZXJyID0gaGVybWVzX3JlYWRfbHR2KGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DVVJSRU5UQlNTSUQsCi0JCQkgICAgICBFVEhfQUxFTiwgTlVMTCwgYXBfYWRkci0+c2FfZGF0YSk7Ci0KLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBvcmlub2NvX2lvY3RsX3NldG1vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgdTMyICptb2RlLAotCQkJCSBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgZXJyID0gLUVJTlBST0dSRVNTOwkJLyogQ2FsbCBjb21taXQgaGFuZGxlciAqLwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAocHJpdi0+aXdfbW9kZSA9PSAqbW9kZSkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCXN3aXRjaCAoKm1vZGUpIHsKLQljYXNlIElXX01PREVfQURIT0M6Ci0JCWlmICghcHJpdi0+aGFzX2lic3MgJiYgIXByaXYtPmhhc19wb3J0MykKLQkJCWVyciA9IC1FT1BOT1RTVVBQOwotCQlicmVhazsKLQotCWNhc2UgSVdfTU9ERV9JTkZSQToKLQkJYnJlYWs7Ci0KLQljYXNlIElXX01PREVfTU9OSVRPUjoKLQkJaWYgKHByaXYtPmJyb2tlbl9tb25pdG9yICYmICFmb3JjZV9tb25pdG9yKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogTW9uaXRvciBtb2RlIHN1cHBvcnQgaXMgIgotCQkJICAgICAgICJidWdneSBpbiB0aGlzIGZpcm13YXJlLCBub3QgZW5hYmxpbmdcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJCWVyciA9IC1FT1BOT1RTVVBQOwotCQl9Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJZXJyID0gLUVPUE5PVFNVUFA7Ci0JCWJyZWFrOwotCX0KLQotCWlmIChlcnIgPT0gLUVJTlBST0dSRVNTKSB7Ci0JCXByaXYtPml3X21vZGUgPSAqbW9kZTsKLQkJc2V0X3BvcnRfdHlwZShwcml2KTsKLQl9Ci0KLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2dldG1vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgdTMyICptb2RlLAotCQkJCSBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCSptb2RlID0gcHJpdi0+aXdfbW9kZTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2dldGl3cmFuZ2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgICAgc3RydWN0IGl3X3BvaW50ICpycnEsCi0JCQkJICAgIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBlcnIgPSAwOwotCXN0cnVjdCBpd19yYW5nZSAqcmFuZ2UgPSAoc3RydWN0IGl3X3JhbmdlICopIGV4dHJhOwotCWludCBudW1yYXRlczsKLQlpbnQgaSwgazsKLQotCXJycS0+bGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBpd19yYW5nZSk7Ci0JbWVtc2V0KHJhbmdlLCAwLCBzaXplb2Yoc3RydWN0IGl3X3JhbmdlKSk7Ci0KLQlyYW5nZS0+d2VfdmVyc2lvbl9jb21waWxlZCA9IFdJUkVMRVNTX0VYVDsKLQlyYW5nZS0+d2VfdmVyc2lvbl9zb3VyY2UgPSAyMjsKLQotCS8qIFNldCBhdmFpbGFibGUgY2hhbm5lbHMvZnJlcXVlbmNpZXMgKi8KLQlyYW5nZS0+bnVtX2NoYW5uZWxzID0gTlVNX0NIQU5ORUxTOwotCWsgPSAwOwotCWZvciAoaSA9IDA7IGkgPCBOVU1fQ0hBTk5FTFM7IGkrKykgewotCQlpZiAocHJpdi0+Y2hhbm5lbF9tYXNrICYgKDEgPDwgaSkpIHsKLQkJCXJhbmdlLT5mcmVxW2tdLmkgPSBpICsgMTsKLQkJCXJhbmdlLT5mcmVxW2tdLm0gPSBjaGFubmVsX2ZyZXF1ZW5jeVtpXSAqIDEwMDAwMDsKLQkJCXJhbmdlLT5mcmVxW2tdLmUgPSAxOwotCQkJaysrOwotCQl9Ci0JCQotCQlpZiAoayA+PSBJV19NQVhfRlJFUVVFTkNJRVMpCi0JCQlicmVhazsKLQl9Ci0JcmFuZ2UtPm51bV9mcmVxdWVuY3kgPSBrOwotCXJhbmdlLT5zZW5zaXRpdml0eSA9IDM7Ci0KLQlpZiAocHJpdi0+aGFzX3dlcCkgewotCQlyYW5nZS0+bWF4X2VuY29kaW5nX3Rva2VucyA9IE9SSU5PQ09fTUFYX0tFWVM7Ci0JCXJhbmdlLT5lbmNvZGluZ19zaXplWzBdID0gU01BTExfS0VZX1NJWkU7Ci0JCXJhbmdlLT5udW1fZW5jb2Rpbmdfc2l6ZXMgPSAxOwotCi0JCWlmIChwcml2LT5oYXNfYmlnX3dlcCkgewotCQkJcmFuZ2UtPmVuY29kaW5nX3NpemVbMV0gPSBMQVJHRV9LRVlfU0laRTsKLQkJCXJhbmdlLT5udW1fZW5jb2Rpbmdfc2l6ZXMgPSAyOwotCQl9Ci0JfQotCi0JaWYgKHByaXYtPmhhc193cGEpCi0JCXJhbmdlLT5lbmNfY2FwYSA9IElXX0VOQ19DQVBBX1dQQSB8IElXX0VOQ19DQVBBX0NJUEhFUl9US0lQOwotCi0JaWYgKChwcml2LT5pd19tb2RlID09IElXX01PREVfQURIT0MpICYmICghU1BZX05VTUJFUihwcml2KSkpewotCQkvKiBRdWFsaXR5IHN0YXRzIG1lYW5pbmdsZXNzIGluIGFkLWhvYyBtb2RlICovCi0JfSBlbHNlIHsKLQkJcmFuZ2UtPm1heF9xdWFsLnF1YWwgPSAweDhiIC0gMHgyZjsKLQkJcmFuZ2UtPm1heF9xdWFsLmxldmVsID0gMHgyZiAtIDB4OTUgLSAxOwotCQlyYW5nZS0+bWF4X3F1YWwubm9pc2UgPSAweDJmIC0gMHg5NSAtIDE7Ci0JCS8qIE5lZWQgdG8gZ2V0IGJldHRlciB2YWx1ZXMgKi8KLQkJcmFuZ2UtPmF2Z19xdWFsLnF1YWwgPSAweDI0OwotCQlyYW5nZS0+YXZnX3F1YWwubGV2ZWwgPSAweEMyOwotCQlyYW5nZS0+YXZnX3F1YWwubm9pc2UgPSAweDlFOwotCX0KLQotCWVyciA9IG9yaW5vY29faHdfZ2V0X2JpdHJhdGVsaXN0KHByaXYsICZudW1yYXRlcywKLQkJCQkJIHJhbmdlLT5iaXRyYXRlLCBJV19NQVhfQklUUkFURVMpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0JcmFuZ2UtPm51bV9iaXRyYXRlcyA9IG51bXJhdGVzOwotCi0JLyogU2V0IGFuIGluZGljYXRpb24gb2YgdGhlIG1heCBUQ1AgdGhyb3VnaHB1dCBpbiBiaXQvcyB0aGF0IHdlIGNhbgotCSAqIGV4cGVjdCB1c2luZyB0aGlzIGludGVyZmFjZS4gTWF5IGJlIHVzZSBmb3IgUW9TIHN0dWZmLi4uCi0JICogSmVhbiBJSSAqLwotCWlmIChudW1yYXRlcyA+IDIpCi0JCXJhbmdlLT50aHJvdWdocHV0ID0gNSAqIDEwMDAgKiAxMDAwOwkvKiB+NSBNYi9zICovCi0JZWxzZQotCQlyYW5nZS0+dGhyb3VnaHB1dCA9IDEuNSAqIDEwMDAgKiAxMDAwOwkvKiB+MS41IE1iL3MgKi8KLQotCXJhbmdlLT5taW5fcnRzID0gMDsKLQlyYW5nZS0+bWF4X3J0cyA9IDIzNDc7Ci0JcmFuZ2UtPm1pbl9mcmFnID0gMjU2OwotCXJhbmdlLT5tYXhfZnJhZyA9IDIzNDY7Ci0KLQlyYW5nZS0+bWluX3BtcCA9IDA7Ci0JcmFuZ2UtPm1heF9wbXAgPSA2NTUzNTAwMDsKLQlyYW5nZS0+bWluX3BtdCA9IDA7Ci0JcmFuZ2UtPm1heF9wbXQgPSA2NTUzNSAqIDEwMDA7CS8qID8/PyAqLwotCXJhbmdlLT5wbXBfZmxhZ3MgPSBJV19QT1dFUl9QRVJJT0Q7Ci0JcmFuZ2UtPnBtdF9mbGFncyA9IElXX1BPV0VSX1RJTUVPVVQ7Ci0JcmFuZ2UtPnBtX2NhcGEgPSBJV19QT1dFUl9QRVJJT0QgfCBJV19QT1dFUl9USU1FT1VUIHwgSVdfUE9XRVJfVU5JQ0FTVF9SOwotCi0JcmFuZ2UtPnJldHJ5X2NhcGEgPSBJV19SRVRSWV9MSU1JVCB8IElXX1JFVFJZX0xJRkVUSU1FOwotCXJhbmdlLT5yZXRyeV9mbGFncyA9IElXX1JFVFJZX0xJTUlUOwotCXJhbmdlLT5yX3RpbWVfZmxhZ3MgPSBJV19SRVRSWV9MSUZFVElNRTsKLQlyYW5nZS0+bWluX3JldHJ5ID0gMDsKLQlyYW5nZS0+bWF4X3JldHJ5ID0gNjU1MzU7CS8qID8/PyAqLwotCXJhbmdlLT5taW5fcl90aW1lID0gMDsKLQlyYW5nZS0+bWF4X3JfdGltZSA9IDY1NTM1ICogMTAwMDsJLyogPz8/ICovCi0KLQlpZiAocHJpdi0+ZmlybXdhcmVfdHlwZSA9PSBGSVJNV0FSRV9UWVBFX0FHRVJFKQotCQlyYW5nZS0+c2Nhbl9jYXBhID0gSVdfU0NBTl9DQVBBX0VTU0lEOwotCWVsc2UKLQkJcmFuZ2UtPnNjYW5fY2FwYSA9IElXX1NDQU5fQ0FQQV9OT05FOwotCi0JLyogRXZlbnQgY2FwYWJpbGl0eSAoa2VybmVsKSAqLwotCUlXX0VWRU5UX0NBUEFfU0VUX0tFUk5FTChyYW5nZS0+ZXZlbnRfY2FwYSk7Ci0JLyogRXZlbnQgY2FwYWJpbGl0eSAoZHJpdmVyKSAqLwotCUlXX0VWRU5UX0NBUEFfU0VUKHJhbmdlLT5ldmVudF9jYXBhLCBTSU9DR0lXVEhSU1BZKTsKLQlJV19FVkVOVF9DQVBBX1NFVChyYW5nZS0+ZXZlbnRfY2FwYSwgU0lPQ0dJV0FQKTsKLQlJV19FVkVOVF9DQVBBX1NFVChyYW5nZS0+ZXZlbnRfY2FwYSwgU0lPQ0dJV1NDQU4pOwotCUlXX0VWRU5UX0NBUEFfU0VUKHJhbmdlLT5ldmVudF9jYXBhLCBJV0VWVFhEUk9QKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG9yaW5vY29faW9jdGxfc2V0aXdlbmNvZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJICAgICBzdHJ1Y3QgaXdfcG9pbnQgKmVycSwKLQkJCQkgICAgIGNoYXIgKmtleWJ1ZikKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgaW5kZXggPSAoZXJxLT5mbGFncyAmIElXX0VOQ09ERV9JTkRFWCkgLSAxOwotCWludCBzZXRpbmRleCA9IHByaXYtPnR4X2tleTsKLQlpbnQgZW5jb2RlX2FsZyA9IHByaXYtPmVuY29kZV9hbGc7Ci0JaW50IHJlc3RyaWN0ZWQgPSBwcml2LT53ZXBfcmVzdHJpY3Q7Ci0JdTE2IHhsZW4gPSAwOwotCWludCBlcnIgPSAtRUlOUFJPR1JFU1M7CQkvKiBDYWxsIGNvbW1pdCBoYW5kbGVyICovCi0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmICghIHByaXYtPmhhc193ZXApCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQotCWlmIChlcnEtPnBvaW50ZXIpIHsKLQkJLyogV2UgYWN0dWFsbHkgaGF2ZSBhIGtleSB0byBzZXQgLSBjaGVjayBpdHMgbGVuZ3RoICovCi0JCWlmIChlcnEtPmxlbmd0aCA+IExBUkdFX0tFWV9TSVpFKQotCQkJcmV0dXJuIC1FMkJJRzsKLQotCQlpZiAoIChlcnEtPmxlbmd0aCA+IFNNQUxMX0tFWV9TSVpFKSAmJiAhcHJpdi0+aGFzX2JpZ193ZXAgKQotCQkJcmV0dXJuIC1FMkJJRzsKLQl9Ci0KLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCS8qIENsZWFyIGFueSBUS0lQIGtleSB3ZSBoYXZlICovCi0JaWYgKChwcml2LT5oYXNfd3BhKSAmJiAocHJpdi0+ZW5jb2RlX2FsZyA9PSBJV19FTkNPREVfQUxHX1RLSVApKQotCQkodm9pZCkgb3Jpbm9jb19jbGVhcl90a2lwX2tleShwcml2LCBzZXRpbmRleCk7Ci0KLQlpZiAoZXJxLT5sZW5ndGggPiAwKSB7Ci0JCWlmICgoaW5kZXggPCAwKSB8fCAoaW5kZXggPj0gT1JJTk9DT19NQVhfS0VZUykpCi0JCQlpbmRleCA9IHByaXYtPnR4X2tleTsKLQotCQkvKiBBZGp1c3Qga2V5IGxlbmd0aCB0byBhIHN1cHBvcnRlZCB2YWx1ZSAqLwotCQlpZiAoZXJxLT5sZW5ndGggPiBTTUFMTF9LRVlfU0laRSkgewotCQkJeGxlbiA9IExBUkdFX0tFWV9TSVpFOwotCQl9IGVsc2UgaWYgKGVycS0+bGVuZ3RoID4gMCkgewotCQkJeGxlbiA9IFNNQUxMX0tFWV9TSVpFOwotCQl9IGVsc2UKLQkJCXhsZW4gPSAwOwotCi0JCS8qIFN3aXRjaCBvbiBXRVAgaWYgb2ZmICovCi0JCWlmICgoZW5jb2RlX2FsZyAhPSBJV19FTkNPREVfQUxHX1dFUCkgJiYgKHhsZW4gPiAwKSkgewotCQkJc2V0aW5kZXggPSBpbmRleDsKLQkJCWVuY29kZV9hbGcgPSBJV19FTkNPREVfQUxHX1dFUDsKLQkJfQotCX0gZWxzZSB7Ci0JCS8qIEltcG9ydGFudCBub3RlIDogaWYgdGhlIHVzZXIgZG8gIml3Y29uZmlnIGV0aDAgZW5jIG9mZiIsCi0JCSAqIHdlIHdpbGwgYXJyaXZlIHRoZXJlIHdpdGggYW4gaW5kZXggb2YgLTEuIFRoaXMgaXMgdmFsaWQKLQkJICogYnV0IG5lZWQgdG8gYmUgdGFrZW4gY2FyZSBvZmYuLi4gSmVhbiBJSSAqLwotCQlpZiAoKGluZGV4IDwgMCkgfHwgKGluZGV4ID49IE9SSU5PQ09fTUFYX0tFWVMpKSB7Ci0JCQlpZigoaW5kZXggIT0gLTEpIHx8IChlcnEtPmZsYWdzID09IDApKSB7Ci0JCQkJZXJyID0gLUVJTlZBTDsKLQkJCQlnb3RvIG91dDsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCS8qIFNldCB0aGUgaW5kZXggOiBDaGVjayB0aGF0IHRoZSBrZXkgaXMgdmFsaWQgKi8KLQkJCWlmKHByaXYtPmtleXNbaW5kZXhdLmxlbiA9PSAwKSB7Ci0JCQkJZXJyID0gLUVJTlZBTDsKLQkJCQlnb3RvIG91dDsKLQkJCX0KLQkJCXNldGluZGV4ID0gaW5kZXg7Ci0JCX0KLQl9Ci0KLQlpZiAoZXJxLT5mbGFncyAmIElXX0VOQ09ERV9ESVNBQkxFRCkKLQkJZW5jb2RlX2FsZyA9IElXX0VOQ09ERV9BTEdfTk9ORTsKLQlpZiAoZXJxLT5mbGFncyAmIElXX0VOQ09ERV9PUEVOKQotCQlyZXN0cmljdGVkID0gMDsKLQlpZiAoZXJxLT5mbGFncyAmIElXX0VOQ09ERV9SRVNUUklDVEVEKQotCQlyZXN0cmljdGVkID0gMTsKLQotCWlmIChlcnEtPnBvaW50ZXIgJiYgZXJxLT5sZW5ndGggPiAwKSB7Ci0JCXByaXYtPmtleXNbaW5kZXhdLmxlbiA9IGNwdV90b19sZTE2KHhsZW4pOwotCQltZW1zZXQocHJpdi0+a2V5c1tpbmRleF0uZGF0YSwgMCwKLQkJICAgICAgIHNpemVvZihwcml2LT5rZXlzW2luZGV4XS5kYXRhKSk7Ci0JCW1lbWNweShwcml2LT5rZXlzW2luZGV4XS5kYXRhLCBrZXlidWYsIGVycS0+bGVuZ3RoKTsKLQl9Ci0JcHJpdi0+dHhfa2V5ID0gc2V0aW5kZXg7Ci0KLQkvKiBUcnkgZmFzdCBrZXkgY2hhbmdlIGlmIGNvbm5lY3RlZCBhbmQgb25seSBrZXlzIGFyZSBjaGFuZ2VkICovCi0JaWYgKChwcml2LT5lbmNvZGVfYWxnID09IGVuY29kZV9hbGcpICYmCi0JICAgIChwcml2LT53ZXBfcmVzdHJpY3QgPT0gcmVzdHJpY3RlZCkgJiYKLQkgICAgbmV0aWZfY2Fycmllcl9vayhkZXYpKSB7Ci0JCWVyciA9IF9fb3Jpbm9jb19od19zZXR1cF93ZXBrZXlzKHByaXYpOwotCQkvKiBObyBuZWVkIHRvIGNvbW1pdCBpZiBzdWNjZXNzZnVsICovCi0JCWdvdG8gb3V0OwotCX0KLQotCXByaXYtPmVuY29kZV9hbGcgPSBlbmNvZGVfYWxnOwotCXByaXYtPndlcF9yZXN0cmljdCA9IHJlc3RyaWN0ZWQ7Ci0KLSBvdXQ6Ci0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRpd2VuY29kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgICAgIHN0cnVjdCBpd19wb2ludCAqZXJxLAotCQkJCSAgICAgY2hhciAqa2V5YnVmKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBpbmRleCA9IChlcnEtPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYKSAtIDE7Ci0JdTE2IHhsZW4gPSAwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAoISBwcml2LT5oYXNfd2VwKQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0KLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCWlmICgoaW5kZXggPCAwKSB8fCAoaW5kZXggPj0gT1JJTk9DT19NQVhfS0VZUykpCi0JCWluZGV4ID0gcHJpdi0+dHhfa2V5OwotCi0JZXJxLT5mbGFncyA9IDA7Ci0JaWYgKCFwcml2LT5lbmNvZGVfYWxnKQotCQllcnEtPmZsYWdzIHw9IElXX0VOQ09ERV9ESVNBQkxFRDsKLQllcnEtPmZsYWdzIHw9IGluZGV4ICsgMTsKLQotCWlmIChwcml2LT53ZXBfcmVzdHJpY3QpCi0JCWVycS0+ZmxhZ3MgfD0gSVdfRU5DT0RFX1JFU1RSSUNURUQ7Ci0JZWxzZQotCQllcnEtPmZsYWdzIHw9IElXX0VOQ09ERV9PUEVOOwotCi0JeGxlbiA9IGxlMTZfdG9fY3B1KHByaXYtPmtleXNbaW5kZXhdLmxlbik7Ci0KLQllcnEtPmxlbmd0aCA9IHhsZW47Ci0KLQltZW1jcHkoa2V5YnVmLCBwcml2LT5rZXlzW2luZGV4XS5kYXRhLCBPUklOT0NPX01BWF9LRVlfU0laRSk7Ci0KLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG9yaW5vY29faW9jdGxfc2V0ZXNzaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJICBzdHJ1Y3QgaXdfcG9pbnQgKmVycSwKLQkJCQkgIGNoYXIgKmVzc2lkYnVmKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQkvKiBOb3RlIDogRVNTSUQgaXMgaWdub3JlZCBpbiBBZC1Ib2MgZGVtbyBtb2RlLCBidXQgd2UgY2FuIHNldCBpdAotCSAqIGFueXdheS4uLiAtIEplYW4gSUkgKi8KLQotCS8qIEh1bS4uLiBTaG91bGQgbm90IHVzZSBXaXJlbGVzcyBFeHRlbnNpb24gY29uc3RhbnQgKG1heSBjaGFuZ2UpLAotCSAqIHNob3VsZCB1c2Ugb3VyIG93bi4uLiAtIEplYW4gSUkgKi8KLQlpZiAoZXJxLT5sZW5ndGggPiBJV19FU1NJRF9NQVhfU0laRSkKLQkJcmV0dXJuIC1FMkJJRzsKLQotCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JLyogTlVMTCB0aGUgc3RyaW5nIChmb3IgTlVMTCB0ZXJtaW5hdGlvbiAmIEVTU0lEID0gQU5ZKSAtIEplYW4gSUkgKi8KLQltZW1zZXQocHJpdi0+ZGVzaXJlZF9lc3NpZCwgMCwgc2l6ZW9mKHByaXYtPmRlc2lyZWRfZXNzaWQpKTsKLQotCS8qIElmIG5vdCBBTlksIGdldCB0aGUgbmV3IEVTU0lEICovCi0JaWYgKGVycS0+ZmxhZ3MpIHsKLQkJbWVtY3B5KHByaXYtPmRlc2lyZWRfZXNzaWQsIGVzc2lkYnVmLCBlcnEtPmxlbmd0aCk7Ci0JfQotCi0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQotCXJldHVybiAtRUlOUFJPR1JFU1M7CQkvKiBDYWxsIGNvbW1pdCBoYW5kbGVyICovCi19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRlc3NpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgIHN0cnVjdCBpd19wb2ludCAqZXJxLAotCQkJCSAgY2hhciAqZXNzaWRidWYpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IGFjdGl2ZTsKLQlpbnQgZXJyID0gMDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgewotCQllcnIgPSBvcmlub2NvX2h3X2dldF9lc3NpZChwcml2LCAmYWN0aXZlLCBlc3NpZGJ1Zik7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQkJZXJxLT5sZW5ndGggPSBlcnI7Ci0JfSBlbHNlIHsKLQkJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCQlyZXR1cm4gLUVCVVNZOwotCQltZW1jcHkoZXNzaWRidWYsIHByaXYtPmRlc2lyZWRfZXNzaWQsIElXX0VTU0lEX01BWF9TSVpFKTsKLQkJZXJxLT5sZW5ndGggPSBzdHJsZW4ocHJpdi0+ZGVzaXJlZF9lc3NpZCk7Ci0JCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0JfQotCi0JZXJxLT5mbGFncyA9IDE7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBvcmlub2NvX2lvY3RsX3NldG5pY2soc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgc3RydWN0IGl3X3BvaW50ICpucnEsCi0JCQkJIGNoYXIgKm5pY2tidWYpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmIChucnEtPmxlbmd0aCA+IElXX0VTU0lEX01BWF9TSVpFKQotCQlyZXR1cm4gLUUyQklHOwotCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCXJldHVybiAtRUJVU1k7Ci0KLQltZW1zZXQocHJpdi0+bmljaywgMCwgc2l6ZW9mKHByaXYtPm5pY2spKTsKLQltZW1jcHkocHJpdi0+bmljaywgbmlja2J1ZiwgbnJxLT5sZW5ndGgpOwotCi0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQotCXJldHVybiAtRUlOUFJPR1JFU1M7CQkvKiBDYWxsIGNvbW1pdCBoYW5kbGVyICovCi19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRuaWNrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJIHN0cnVjdCBpd19wb2ludCAqbnJxLAotCQkJCSBjaGFyICpuaWNrYnVmKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCW1lbWNweShuaWNrYnVmLCBwcml2LT5uaWNrLCBJV19FU1NJRF9NQVhfU0laRSk7Ci0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQotCW5ycS0+bGVuZ3RoID0gc3RybGVuKHByaXYtPm5pY2spOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9zZXRmcmVxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJIHN0cnVjdCBpd19mcmVxICpmcnEsCi0JCQkJIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBjaGFuID0gLTE7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgZXJyID0gLUVJTlBST0dSRVNTOwkJLyogQ2FsbCBjb21taXQgaGFuZGxlciAqLwotCi0JLyogSW4gaW5mcmFzdHJ1Y3R1cmUgbW9kZSB0aGUgQVAgc2V0cyB0aGUgY2hhbm5lbCAqLwotCWlmIChwcml2LT5pd19tb2RlID09IElXX01PREVfSU5GUkEpCi0JCXJldHVybiAtRUJVU1k7Ci0KLQlpZiAoIChmcnEtPmUgPT0gMCkgJiYgKGZycS0+bSA8PSAxMDAwKSApIHsKLQkJLyogU2V0dGluZyBieSBjaGFubmVsIG51bWJlciAqLwotCQljaGFuID0gZnJxLT5tOwotCX0gZWxzZSB7Ci0JCS8qIFNldHRpbmcgYnkgZnJlcXVlbmN5IC0gc2VhcmNoIHRoZSB0YWJsZSAqLwotCQlpbnQgbXVsdCA9IDE7Ci0JCWludCBpOwotCi0JCWZvciAoaSA9IDA7IGkgPCAoNiAtIGZycS0+ZSk7IGkrKykKLQkJCW11bHQgKj0gMTA7Ci0KLQkJZm9yIChpID0gMDsgaSA8IE5VTV9DSEFOTkVMUzsgaSsrKQotCQkJaWYgKGZycS0+bSA9PSAoY2hhbm5lbF9mcmVxdWVuY3lbaV0gKiBtdWx0KSkKLQkJCQljaGFuID0gaSsxOwotCX0KLQotCWlmICggKGNoYW4gPCAxKSB8fCAoY2hhbiA+IE5VTV9DSEFOTkVMUykgfHwKLQkgICAgICEgKHByaXYtPmNoYW5uZWxfbWFzayAmICgxIDw8IChjaGFuLTEpKSApICkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCXByaXYtPmNoYW5uZWwgPSBjaGFuOwotCWlmIChwcml2LT5pd19tb2RlID09IElXX01PREVfTU9OSVRPUikgewotCQkvKiBGYXN0IGNoYW5uZWwgY2hhbmdlIC0gbm8gY29tbWl0IGlmIHN1Y2Nlc3NmdWwgKi8KLQkJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OwotCQllcnIgPSBoZXJtZXNfZG9jbWRfd2FpdChodywgSEVSTUVTX0NNRF9URVNUIHwKLQkJCQkJICAgIEhFUk1FU19URVNUX1NFVF9DSEFOTkVMLAotCQkJCQljaGFuLCBOVUxMKTsKLQl9Ci0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRmcmVxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJIHN0cnVjdCBpd19mcmVxICpmcnEsCi0JCQkJIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCB0bXA7Ci0KLQkvKiBMb2NraW5nIGRvbmUgaW4gdGhlcmUgKi8KLQl0bXAgPSBvcmlub2NvX2h3X2dldF9mcmVxKHByaXYpOwotCWlmICh0bXAgPCAwKSB7Ci0JCXJldHVybiB0bXA7Ci0JfQotCi0JZnJxLT5tID0gdG1wOwotCWZycS0+ZSA9IDE7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2dldHNlbnMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgc3RydWN0IGl3X3BhcmFtICpzcnEsCi0JCQkJIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKLQl1MTYgdmFsOwotCWludCBlcnI7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmICghcHJpdi0+aGFzX3NlbnNpdGl2aXR5KQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0KLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKLQkJcmV0dXJuIC1FQlVTWTsKLQllcnIgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwKLQkJCQkgIEhFUk1FU19SSURfQ05GU1lTVEVNU0NBTEUsICZ2YWwpOwotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0KLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0Jc3JxLT52YWx1ZSA9IHZhbDsKLQlzcnEtPmZpeGVkID0gMDsgLyogYXV0byAqLwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9zZXRzZW5zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJIHN0cnVjdCBpd19wYXJhbSAqc3JxLAotCQkJCSBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgdmFsID0gc3JxLT52YWx1ZTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKCFwcml2LT5oYXNfc2Vuc2l0aXZpdHkpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQotCWlmICgodmFsIDwgMSkgfHwgKHZhbCA+IDMpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQkKLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKLQkJcmV0dXJuIC1FQlVTWTsKLQlwcml2LT5hcF9kZW5zaXR5ID0gdmFsOwotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0KLQlyZXR1cm4gLUVJTlBST0dSRVNTOwkJLyogQ2FsbCBjb21taXQgaGFuZGxlciAqLwotfQotCi1zdGF0aWMgaW50IG9yaW5vY29faW9jdGxfc2V0cnRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQlzdHJ1Y3QgaXdfcGFyYW0gKnJycSwKLQkJCQljaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgdmFsID0gcnJxLT52YWx1ZTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKHJycS0+ZGlzYWJsZWQpCi0JCXZhbCA9IDIzNDc7Ci0KLQlpZiAoICh2YWwgPCAwKSB8fCAodmFsID4gMjM0NykgKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JcHJpdi0+cnRzX3RocmVzaCA9IHZhbDsKLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCi0JcmV0dXJuIC1FSU5QUk9HUkVTUzsJCS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KLX0KLQotc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2dldHJ0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJc3RydWN0IGl3X3BhcmFtICpycnEsCi0JCQkJY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlycnEtPnZhbHVlID0gcHJpdi0+cnRzX3RocmVzaDsKLQlycnEtPmRpc2FibGVkID0gKHJycS0+dmFsdWUgPT0gMjM0Nyk7Ci0JcnJxLT5maXhlZCA9IDE7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBvcmlub2NvX2lvY3RsX3NldGZyYWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgc3RydWN0IGl3X3BhcmFtICpmcnEsCi0JCQkJIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBlcnIgPSAtRUlOUFJPR1JFU1M7CQkvKiBDYWxsIGNvbW1pdCBoYW5kbGVyICovCi0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JaWYgKHByaXYtPmhhc19td28pIHsKLQkJaWYgKGZycS0+ZGlzYWJsZWQpCi0JCQlwcml2LT5td29fcm9idXN0ID0gMDsKLQkJZWxzZSB7Ci0JCQlpZiAoZnJxLT5maXhlZCkKLQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogRml4ZWQgZnJhZ21lbnRhdGlvbiBpcyAiCi0JCQkJICAgICAgICJub3Qgc3VwcG9ydGVkIG9uIHRoaXMgZmlybXdhcmUuICIKLQkJCQkgICAgICAgIlVzaW5nIE1XTyByb2J1c3QgaW5zdGVhZC5cbiIsIGRldi0+bmFtZSk7Ci0JCQlwcml2LT5td29fcm9idXN0ID0gMTsKLQkJfQotCX0gZWxzZSB7Ci0JCWlmIChmcnEtPmRpc2FibGVkKQotCQkJcHJpdi0+ZnJhZ190aHJlc2ggPSAyMzQ2OwotCQllbHNlIHsKLQkJCWlmICggKGZycS0+dmFsdWUgPCAyNTYpIHx8IChmcnEtPnZhbHVlID4gMjM0NikgKQotCQkJCWVyciA9IC1FSU5WQUw7Ci0JCQllbHNlCi0JCQkJcHJpdi0+ZnJhZ190aHJlc2ggPSBmcnEtPnZhbHVlICYgfjB4MTsgLyogbXVzdCBiZSBldmVuICovCi0JCX0KLQl9Ci0KLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2dldGZyYWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgc3RydWN0IGl3X3BhcmFtICpmcnEsCi0JCQkJIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKLQlpbnQgZXJyOwotCXUxNiB2YWw7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQotCQlyZXR1cm4gLUVCVVNZOwotCQotCWlmIChwcml2LT5oYXNfbXdvKSB7Ci0JCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAotCQkJCQkgIEhFUk1FU19SSURfQ05GTVdPUk9CVVNUX0FHRVJFLAotCQkJCQkgICZ2YWwpOwotCQlpZiAoZXJyKQotCQkJdmFsID0gMDsKLQotCQlmcnEtPnZhbHVlID0gdmFsID8gMjM0NyA6IDA7Ci0JCWZycS0+ZGlzYWJsZWQgPSAhIHZhbDsKLQkJZnJxLT5maXhlZCA9IDA7Ci0JfSBlbHNlIHsKLQkJZXJyID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ05GRlJBR01FTlRBVElPTlRIUkVTSE9MRCwKLQkJCQkJICAmdmFsKTsKLQkJaWYgKGVycikKLQkJCXZhbCA9IDA7Ci0KLQkJZnJxLT52YWx1ZSA9IHZhbDsKLQkJZnJxLT5kaXNhYmxlZCA9ICh2YWwgPj0gMjM0Nik7Ci0JCWZycS0+Zml4ZWQgPSAxOwotCX0KLQotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0JCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBvcmlub2NvX2lvY3RsX3NldHJhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgc3RydWN0IGl3X3BhcmFtICpycnEsCi0JCQkJIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCByYXRlbW9kZSA9IC0xOwotCWludCBiaXRyYXRlOyAvKiAxMDBzIG9mIGtpbG9iaXRzICovCi0JaW50IGk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQkKLQkvKiBBcyB0aGUgdXNlciBzcGFjZSBkb2Vzbid0IGtub3cgb3VyIGhpZ2hlc3QgcmF0ZSwgaXQgdXNlcyAtMQotCSAqIHRvIGFzayB1cyB0byBzZXQgdGhlIGhpZ2hlc3QgcmF0ZS4gIFRlc3QgaXQgdXNpbmcgIml3Y29uZmlnCi0JICogZXRoWCByYXRlIGF1dG8iIC0gSmVhbiBJSSAqLwotCWlmIChycnEtPnZhbHVlID09IC0xKQotCQliaXRyYXRlID0gMTEwOwotCWVsc2UgewotCQlpZiAocnJxLT52YWx1ZSAlIDEwMDAwMCkKLQkJCXJldHVybiAtRUlOVkFMOwotCQliaXRyYXRlID0gcnJxLT52YWx1ZSAvIDEwMDAwMDsKLQl9Ci0KLQlpZiAoIChiaXRyYXRlICE9IDEwKSAmJiAoYml0cmF0ZSAhPSAyMCkgJiYKLQkgICAgIChiaXRyYXRlICE9IDU1KSAmJiAoYml0cmF0ZSAhPSAxMTApICkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQklUUkFURV9UQUJMRV9TSVpFOyBpKyspCi0JCWlmICggKGJpdHJhdGVfdGFibGVbaV0uYml0cmF0ZSA9PSBiaXRyYXRlKSAmJgotCQkgICAgIChiaXRyYXRlX3RhYmxlW2ldLmF1dG9tYXRpYyA9PSAhIHJycS0+Zml4ZWQpICkgewotCQkJcmF0ZW1vZGUgPSBpOwotCQkJYnJlYWs7Ci0JCX0KLQkKLQlpZiAocmF0ZW1vZGUgPT0gLTEpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCXJldHVybiAtRUJVU1k7Ci0JcHJpdi0+Yml0cmF0ZW1vZGUgPSByYXRlbW9kZTsKLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCi0JcmV0dXJuIC1FSU5QUk9HUkVTUzsKLX0KLQotc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2dldHJhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgc3RydWN0IGl3X3BhcmFtICpycnEsCi0JCQkJIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKLQlpbnQgZXJyID0gMDsKLQlpbnQgcmF0ZW1vZGU7Ci0JaW50IGk7Ci0JdTE2IHZhbDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCXJldHVybiAtRUJVU1k7Ci0KLQlyYXRlbW9kZSA9IHByaXYtPmJpdHJhdGVtb2RlOwotCi0JQlVHX09OKChyYXRlbW9kZSA8IDApIHx8IChyYXRlbW9kZSA+PSBCSVRSQVRFX1RBQkxFX1NJWkUpKTsKLQotCXJycS0+dmFsdWUgPSBiaXRyYXRlX3RhYmxlW3JhdGVtb2RlXS5iaXRyYXRlICogMTAwMDAwOwotCXJycS0+Zml4ZWQgPSAhIGJpdHJhdGVfdGFibGVbcmF0ZW1vZGVdLmF1dG9tYXRpYzsKLQlycnEtPmRpc2FibGVkID0gMDsKLQotCS8qIElmIHRoZSBpbnRlcmZhY2UgaXMgcnVubmluZyB3ZSB0cnkgdG8gZmluZCBtb3JlIGFib3V0IHRoZQotCSAgIGN1cnJlbnQgbW9kZSAqLwotCWlmIChuZXRpZl9ydW5uaW5nKGRldikpIHsKLQkJZXJyID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsCi0JCQkJCSAgSEVSTUVTX1JJRF9DVVJSRU5UVFhSQVRFLCAmdmFsKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gb3V0OwotCQkKLQkJc3dpdGNoIChwcml2LT5maXJtd2FyZV90eXBlKSB7Ci0JCWNhc2UgRklSTVdBUkVfVFlQRV9BR0VSRTogLyogTHVjZW50IHN0eWxlIHJhdGUgKi8KLQkJCS8qIE5vdGUgOiBpbiBMdWNlbnQgZmlybXdhcmUsIHRoZSByZXR1cm4gdmFsdWUgb2YKLQkJCSAqIEhFUk1FU19SSURfQ1VSUkVOVFRYUkFURSBpcyB0aGUgYml0cmF0ZSBpbiBNYi9zLAotCQkJICogYW5kIHRoZXJlZm9yZSBpcyB0b3RhbGx5IGRpZmZlcmVudCBmcm9tIHRoZQotCQkJICogZW5jb2Rpbmcgb2YgSEVSTUVTX1JJRF9DTkZUWFJBVEVDT05UUk9MLgotCQkJICogRG9uJ3QgZm9yZ2V0IHRoYXQgNk1iL3MgaXMgcmVhbGx5IDUuNU1iL3MgKi8KLQkJCWlmICh2YWwgPT0gNikKLQkJCQlycnEtPnZhbHVlID0gNTUwMDAwMDsKLQkJCWVsc2UKLQkJCQlycnEtPnZhbHVlID0gdmFsICogMTAwMDAwMDsKLQkJCWJyZWFrOwotCQljYXNlIEZJUk1XQVJFX1RZUEVfSU5URVJTSUw6IC8qIEludGVyc2lsIHN0eWxlIHJhdGUgKi8KLQkJY2FzZSBGSVJNV0FSRV9UWVBFX1NZTUJPTDogLyogU3ltYm9sIHN0eWxlIHJhdGUgKi8KLQkJCWZvciAoaSA9IDA7IGkgPCBCSVRSQVRFX1RBQkxFX1NJWkU7IGkrKykKLQkJCQlpZiAoYml0cmF0ZV90YWJsZVtpXS5pbnRlcnNpbF90eHJhdGVjdHJsID09IHZhbCkgewotCQkJCQlyYXRlbW9kZSA9IGk7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWlmIChpID49IEJJVFJBVEVfVEFCTEVfU0laRSkKLQkJCQlwcmludGsoS0VSTl9JTkZPICIlczogVW5hYmxlIHRvIGRldGVybWluZSBjdXJyZW50IGJpdHJhdGUgKDB4JTA0aHgpXG4iLAotCQkJCSAgICAgICBkZXYtPm5hbWUsIHZhbCk7Ci0KLQkJCXJycS0+dmFsdWUgPSBiaXRyYXRlX3RhYmxlW3JhdGVtb2RlXS5iaXRyYXRlICogMTAwMDAwOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlCVUcoKTsKLQkJfQotCX0KLQotIG91dDoKLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBvcmlub2NvX2lvY3RsX3NldHBvd2VyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSAgc3RydWN0IGl3X3BhcmFtICpwcnEsCi0JCQkJICBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgZXJyID0gLUVJTlBST0dSRVNTOwkJLyogQ2FsbCBjb21taXQgaGFuZGxlciAqLwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCWlmIChwcnEtPmRpc2FibGVkKSB7Ci0JCXByaXYtPnBtX29uID0gMDsKLQl9IGVsc2UgewotCQlzd2l0Y2ggKHBycS0+ZmxhZ3MgJiBJV19QT1dFUl9NT0RFKSB7Ci0JCWNhc2UgSVdfUE9XRVJfVU5JQ0FTVF9SOgotCQkJcHJpdi0+cG1fbWNhc3QgPSAwOwotCQkJcHJpdi0+cG1fb24gPSAxOwotCQkJYnJlYWs7Ci0JCWNhc2UgSVdfUE9XRVJfQUxMX1I6Ci0JCQlwcml2LT5wbV9tY2FzdCA9IDE7Ci0JCQlwcml2LT5wbV9vbiA9IDE7Ci0JCQlicmVhazsKLQkJY2FzZSBJV19QT1dFUl9PTjoKLQkJCS8qIE5vIGZsYWdzIDogYnV0IHdlIG1heSBoYXZlIGEgdmFsdWUgLSBKZWFuIElJICovCi0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWVyciA9IC1FSU5WQUw7Ci0JCQlnb3RvIG91dDsKLQkJfQotCQkKLQkJaWYgKHBycS0+ZmxhZ3MgJiBJV19QT1dFUl9USU1FT1VUKSB7Ci0JCQlwcml2LT5wbV9vbiA9IDE7Ci0JCQlwcml2LT5wbV90aW1lb3V0ID0gcHJxLT52YWx1ZSAvIDEwMDA7Ci0JCX0KLQkJaWYgKHBycS0+ZmxhZ3MgJiBJV19QT1dFUl9QRVJJT0QpIHsKLQkJCXByaXYtPnBtX29uID0gMTsKLQkJCXByaXYtPnBtX3BlcmlvZCA9IHBycS0+dmFsdWUgLyAxMDAwOwotCQl9Ci0JCS8qIEl0J3MgdmFsaWQgdG8gbm90IGhhdmUgYSB2YWx1ZSBpZiB3ZSBhcmUganVzdCB0b2dnbGluZwotCQkgKiB0aGUgZmxhZ3MuLi4gSmVhbiBJSSAqLwotCQlpZighcHJpdi0+cG1fb24pIHsKLQkJCWVyciA9IC1FSU5WQUw7Ci0JCQlnb3RvIG91dDsKLQkJfQkJCQotCX0KLQotIG91dDoKLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2dldHBvd2VyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSAgc3RydWN0IGl3X3BhcmFtICpwcnEsCi0JCQkJICBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7Ci0JaW50IGVyciA9IDA7Ci0JdTE2IGVuYWJsZSwgcGVyaW9kLCB0aW1lb3V0LCBtY2FzdDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCXJldHVybiAtRUJVU1k7Ci0JCi0JZXJyID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ05GUE1FTkFCTEVELCAmZW5hYmxlKTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dDsKLQotCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAotCQkJCSAgSEVSTUVTX1JJRF9DTkZNQVhTTEVFUERVUkFUSU9OLCAmcGVyaW9kKTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dDsKLQotCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NORlBNSE9MRE9WRVJEVVJBVElPTiwgJnRpbWVvdXQpOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0OwotCi0JZXJyID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ05GTVVMVElDQVNUUkVDRUlWRSwgJm1jYXN0KTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dDsKLQotCXBycS0+ZGlzYWJsZWQgPSAhZW5hYmxlOwotCS8qIE5vdGUgOiBieSBkZWZhdWx0LCBkaXNwbGF5IHRoZSBwZXJpb2QgKi8KLQlpZiAoKHBycS0+ZmxhZ3MgJiBJV19QT1dFUl9UWVBFKSA9PSBJV19QT1dFUl9USU1FT1VUKSB7Ci0JCXBycS0+ZmxhZ3MgPSBJV19QT1dFUl9USU1FT1VUOwotCQlwcnEtPnZhbHVlID0gdGltZW91dCAqIDEwMDA7Ci0JfSBlbHNlIHsKLQkJcHJxLT5mbGFncyA9IElXX1BPV0VSX1BFUklPRDsKLQkJcHJxLT52YWx1ZSA9IHBlcmlvZCAqIDEwMDA7Ci0JfQotCWlmIChtY2FzdCkKLQkJcHJxLT5mbGFncyB8PSBJV19QT1dFUl9BTExfUjsKLQllbHNlCi0JCXBycS0+ZmxhZ3MgfD0gSVdfUE9XRVJfVU5JQ0FTVF9SOwotCi0gb3V0OgotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IG9yaW5vY29faW9jdGxfc2V0X2VuY29kZWV4dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSAgICAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LAotCQkJCSAgICAgICBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgaXdfcG9pbnQgKmVuY29kaW5nID0gJndycXUtPmVuY29kaW5nOwotCXN0cnVjdCBpd19lbmNvZGVfZXh0ICpleHQgPSAoc3RydWN0IGl3X2VuY29kZV9leHQgKilleHRyYTsKLQlpbnQgaWR4LCBhbGcgPSBleHQtPmFsZywgc2V0X2tleSA9IDE7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgZXJyID0gLUVJTlZBTDsKLQl1MTYga2V5X2xlbjsKLQotCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JLyogRGV0ZXJtaW5lIGFuZCB2YWxpZGF0ZSB0aGUga2V5IGluZGV4ICovCi0JaWR4ID0gZW5jb2RpbmctPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYOwotCWlmIChpZHgpIHsKLQkJaWYgKChpZHggPCAxKSB8fCAoaWR4ID4gNCkpCi0JCQlnb3RvIG91dDsKLQkJaWR4LS07Ci0JfSBlbHNlCi0JCWlkeCA9IHByaXYtPnR4X2tleTsKLQotCWlmIChlbmNvZGluZy0+ZmxhZ3MgJiBJV19FTkNPREVfRElTQUJMRUQpCi0JICAgIGFsZyA9IElXX0VOQ09ERV9BTEdfTk9ORTsKLQotCWlmIChwcml2LT5oYXNfd3BhICYmIChhbGcgIT0gSVdfRU5DT0RFX0FMR19US0lQKSkgewotCQkvKiBDbGVhciBhbnkgVEtJUCBUWCBrZXkgd2UgaGFkICovCi0JCSh2b2lkKSBvcmlub2NvX2NsZWFyX3RraXBfa2V5KHByaXYsIHByaXYtPnR4X2tleSk7Ci0JfQotCi0JaWYgKGV4dC0+ZXh0X2ZsYWdzICYgSVdfRU5DT0RFX0VYVF9TRVRfVFhfS0VZKSB7Ci0JCXByaXYtPnR4X2tleSA9IGlkeDsKLQkJc2V0X2tleSA9ICgoYWxnID09IElXX0VOQ09ERV9BTEdfVEtJUCkgfHwKLQkJCSAgIChleHQtPmtleV9sZW4gPiAwKSkgPyAxIDogMDsKLQl9Ci0KLQlpZiAoc2V0X2tleSkgewotCQkvKiBTZXQgdGhlIHJlcXVlc3RlZCBrZXkgZmlyc3QgKi8KLQkJc3dpdGNoIChhbGcpIHsKLQkJY2FzZSBJV19FTkNPREVfQUxHX05PTkU6Ci0JCQlwcml2LT5lbmNvZGVfYWxnID0gYWxnOwotCQkJcHJpdi0+a2V5c1tpZHhdLmxlbiA9IDA7Ci0JCQlicmVhazsKLQotCQljYXNlIElXX0VOQ09ERV9BTEdfV0VQOgotCQkJaWYgKGV4dC0+a2V5X2xlbiA+IFNNQUxMX0tFWV9TSVpFKQotCQkJCWtleV9sZW4gPSBMQVJHRV9LRVlfU0laRTsKLQkJCWVsc2UgaWYgKGV4dC0+a2V5X2xlbiA+IDApCi0JCQkJa2V5X2xlbiA9IFNNQUxMX0tFWV9TSVpFOwotCQkJZWxzZQotCQkJCWdvdG8gb3V0OwotCi0JCQlwcml2LT5lbmNvZGVfYWxnID0gYWxnOwotCQkJcHJpdi0+a2V5c1tpZHhdLmxlbiA9IGNwdV90b19sZTE2KGtleV9sZW4pOwotCi0JCQlrZXlfbGVuID0gbWluKGV4dC0+a2V5X2xlbiwga2V5X2xlbik7Ci0KLQkJCW1lbXNldChwcml2LT5rZXlzW2lkeF0uZGF0YSwgMCwgT1JJTk9DT19NQVhfS0VZX1NJWkUpOwotCQkJbWVtY3B5KHByaXYtPmtleXNbaWR4XS5kYXRhLCBleHQtPmtleSwga2V5X2xlbik7Ci0JCQlicmVhazsKLQotCQljYXNlIElXX0VOQ09ERV9BTEdfVEtJUDoKLQkJewotCQkJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OwotCQkJdTggKnRraXBfaXYgPSBOVUxMOwotCi0JCQlpZiAoIXByaXYtPmhhc193cGEgfHwKLQkJCSAgICAoZXh0LT5rZXlfbGVuID4gc2l6ZW9mKHByaXYtPnRraXBfa2V5WzBdKSkpCi0JCQkJZ290byBvdXQ7Ci0KLQkJCXByaXYtPmVuY29kZV9hbGcgPSBhbGc7Ci0JCQltZW1zZXQoJnByaXYtPnRraXBfa2V5W2lkeF0sIDAsCi0JCQkgICAgICAgc2l6ZW9mKHByaXYtPnRraXBfa2V5W2lkeF0pKTsKLQkJCW1lbWNweSgmcHJpdi0+dGtpcF9rZXlbaWR4XSwgZXh0LT5rZXksIGV4dC0+a2V5X2xlbik7Ci0KLQkJCWlmIChleHQtPmV4dF9mbGFncyAmIElXX0VOQ09ERV9FWFRfUlhfU0VRX1ZBTElEKQotCQkJCXRraXBfaXYgPSAmZXh0LT5yeF9zZXFbMF07Ci0KLQkJCWVyciA9IF9fb3Jpbm9jb19od19zZXRfdGtpcF9rZXkoaHcsIGlkeCwKLQkJCQkgZXh0LT5leHRfZmxhZ3MgJiBJV19FTkNPREVfRVhUX1NFVF9UWF9LRVksCi0JCQkJICh1OCAqKSAmcHJpdi0+dGtpcF9rZXlbaWR4XSwKLQkJCQkgdGtpcF9pdiwgTlVMTCk7Ci0JCQlpZiAoZXJyKQotCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgVEtJUCBrZXkiCi0JCQkJICAgICAgICJcbiIsIGRldi0+bmFtZSwgZXJyKTsKLQotCQkJZ290byBvdXQ7Ci0JCX0KLQkJZGVmYXVsdDoKLQkJCWdvdG8gb3V0OwotCQl9Ci0JfQotCWVyciA9IC1FSU5QUk9HUkVTUzsKLSBvdXQ6Ci0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRfZW5jb2RlZXh0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJICAgICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsCi0JCQkJICAgICAgIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBpd19wb2ludCAqZW5jb2RpbmcgPSAmd3JxdS0+ZW5jb2Rpbmc7Ci0Jc3RydWN0IGl3X2VuY29kZV9leHQgKmV4dCA9IChzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqKWV4dHJhOwotCWludCBpZHgsIG1heF9rZXlfbGVuOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGVycjsKLQotCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JZXJyID0gLUVJTlZBTDsKLQltYXhfa2V5X2xlbiA9IGVuY29kaW5nLT5sZW5ndGggLSBzaXplb2YoKmV4dCk7Ci0JaWYgKG1heF9rZXlfbGVuIDwgMCkKLQkJZ290byBvdXQ7Ci0KLQlpZHggPSBlbmNvZGluZy0+ZmxhZ3MgJiBJV19FTkNPREVfSU5ERVg7Ci0JaWYgKGlkeCkgewotCQlpZiAoKGlkeCA8IDEpIHx8IChpZHggPiA0KSkKLQkJCWdvdG8gb3V0OwotCQlpZHgtLTsKLQl9IGVsc2UKLQkJaWR4ID0gcHJpdi0+dHhfa2V5OwotCi0JZW5jb2RpbmctPmZsYWdzID0gaWR4ICsgMTsKLQltZW1zZXQoZXh0LCAwLCBzaXplb2YoKmV4dCkpOwotCi0JZXh0LT5hbGcgPSBwcml2LT5lbmNvZGVfYWxnOwotCXN3aXRjaCAocHJpdi0+ZW5jb2RlX2FsZykgewotCWNhc2UgSVdfRU5DT0RFX0FMR19OT05FOgotCQlleHQtPmtleV9sZW4gPSAwOwotCQllbmNvZGluZy0+ZmxhZ3MgfD0gSVdfRU5DT0RFX0RJU0FCTEVEOwotCQlicmVhazsKLQljYXNlIElXX0VOQ09ERV9BTEdfV0VQOgotCQlleHQtPmtleV9sZW4gPSBtaW5fdCh1MTYsIGxlMTZfdG9fY3B1KHByaXYtPmtleXNbaWR4XS5sZW4pLAotCQkJCSAgICAgbWF4X2tleV9sZW4pOwotCQltZW1jcHkoZXh0LT5rZXksIHByaXYtPmtleXNbaWR4XS5kYXRhLCBleHQtPmtleV9sZW4pOwotCQllbmNvZGluZy0+ZmxhZ3MgfD0gSVdfRU5DT0RFX0VOQUJMRUQ7Ci0JCWJyZWFrOwotCWNhc2UgSVdfRU5DT0RFX0FMR19US0lQOgotCQlleHQtPmtleV9sZW4gPSBtaW5fdCh1MTYsIHNpemVvZihzdHJ1Y3Qgb3Jpbm9jb190a2lwX2tleSksCi0JCQkJICAgICBtYXhfa2V5X2xlbik7Ci0JCW1lbWNweShleHQtPmtleSwgJnByaXYtPnRraXBfa2V5W2lkeF0sIGV4dC0+a2V5X2xlbik7Ci0JCWVuY29kaW5nLT5mbGFncyB8PSBJV19FTkNPREVfRU5BQkxFRDsKLQkJYnJlYWs7Ci0JfQotCi0JZXJyID0gMDsKLSBvdXQ6Ci0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9zZXRfYXV0aChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKLQlzdHJ1Y3QgaXdfcGFyYW0gKnBhcmFtID0gJndycXUtPnBhcmFtOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldCA9IC1FSU5QUk9HUkVTUzsKLQotCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQotCQlyZXR1cm4gLUVCVVNZOwotCi0Jc3dpdGNoIChwYXJhbS0+ZmxhZ3MgJiBJV19BVVRIX0lOREVYKSB7Ci0JY2FzZSBJV19BVVRIX1dQQV9WRVJTSU9OOgotCWNhc2UgSVdfQVVUSF9DSVBIRVJfUEFJUldJU0U6Ci0JY2FzZSBJV19BVVRIX0NJUEhFUl9HUk9VUDoKLQljYXNlIElXX0FVVEhfUlhfVU5FTkNSWVBURURfRUFQT0w6Ci0JY2FzZSBJV19BVVRIX1BSSVZBQ1lfSU5WT0tFRDoKLQljYXNlIElXX0FVVEhfRFJPUF9VTkVOQ1JZUFRFRDoKLQkJLyoKLQkJICogb3Jpbm9jbyBkb2VzIG5vdCB1c2UgdGhlc2UgcGFyYW1ldGVycwotCQkgKi8KLQkJYnJlYWs7Ci0KLQljYXNlIElXX0FVVEhfS0VZX01HTVQ6Ci0JCS8qIHdsX2xrbSBpbXBsaWVzIHZhbHVlIDIgPT0gUFNLIGZvciBIZXJtZXMgSQotCQkgKiB3aGljaCB0aWVzIGluIHdpdGggV0VYVAotCQkgKiBubyBvdGhlciBoaW50cyB0aG8gOigKLQkJICovCi0JCXByaXYtPmtleV9tZ210ID0gcGFyYW0tPnZhbHVlOwotCQlicmVhazsKLQotCWNhc2UgSVdfQVVUSF9US0lQX0NPVU5URVJNRUFTVVJFUzoKLQkJLyogV2hlbiBjb3VudGVybWVhc3VyZXMgYXJlIGVuYWJsZWQsIHNodXQgZG93biB0aGUKLQkJICogY2FyZDsgd2hlbiBkaXNhYmxlZCwgcmUtZW5hYmxlIHRoZSBjYXJkLiBUaGlzIG11c3QKLQkJICogdGFrZSBlZmZlY3QgaW1tZWRpYXRlbHkuCi0JCSAqCi0JCSAqIFRPRE86IE1ha2Ugc3VyZSB0aGF0IHRoZSBFQVBPTCBtZXNzYWdlIGlzIGdldHRpbmcKLQkJICogICAgICAgb3V0IGJlZm9yZSBjYXJkIGRpc2FibGVkCi0JCSAqLwotCQlpZiAocGFyYW0tPnZhbHVlKSB7Ci0JCQlwcml2LT50a2lwX2NtX2FjdGl2ZSA9IDE7Ci0JCQlyZXQgPSBoZXJtZXNfZW5hYmxlX3BvcnQoaHcsIDApOwotCQl9IGVsc2UgewotCQkJcHJpdi0+dGtpcF9jbV9hY3RpdmUgPSAwOwotCQkJcmV0ID0gaGVybWVzX2Rpc2FibGVfcG9ydChodywgMCk7Ci0JCX0KLQkJYnJlYWs7Ci0KLQljYXNlIElXX0FVVEhfODAyMTFfQVVUSF9BTEc6Ci0JCWlmIChwYXJhbS0+dmFsdWUgJiBJV19BVVRIX0FMR19TSEFSRURfS0VZKQotCQkJcHJpdi0+d2VwX3Jlc3RyaWN0ID0gMTsKLQkJZWxzZSBpZiAocGFyYW0tPnZhbHVlICYgSVdfQVVUSF9BTEdfT1BFTl9TWVNURU0pCi0JCQlwcml2LT53ZXBfcmVzdHJpY3QgPSAwOwotCQllbHNlCi0JCQlyZXQgPSAtRUlOVkFMOwotCQlicmVhazsKLQotCWNhc2UgSVdfQVVUSF9XUEFfRU5BQkxFRDoKLQkJaWYgKHByaXYtPmhhc193cGEpIHsKLQkJCXByaXYtPndwYV9lbmFibGVkID0gcGFyYW0tPnZhbHVlID8gMSA6IDA7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAocGFyYW0tPnZhbHVlKQotCQkJCXJldCA9IC1FT1BOT1RTVVBQOwotCQkJLyogZWxzZSBzaWxlbnRseSBhY2NlcHQgZGlzYWJsZSBvZiBXUEEgKi8KLQkJCXByaXYtPndwYV9lbmFibGVkID0gMDsKLQkJfQotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCXJldCA9IC1FT1BOT1RTVVBQOwotCX0KLQotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2dldF9hdXRoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IGl3X3BhcmFtICpwYXJhbSA9ICZ3cnF1LT5wYXJhbTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByZXQgPSAwOwotCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCXJldHVybiAtRUJVU1k7Ci0KLQlzd2l0Y2ggKHBhcmFtLT5mbGFncyAmIElXX0FVVEhfSU5ERVgpIHsKLQljYXNlIElXX0FVVEhfS0VZX01HTVQ6Ci0JCXBhcmFtLT52YWx1ZSA9IHByaXYtPmtleV9tZ210OwotCQlicmVhazsKLQotCWNhc2UgSVdfQVVUSF9US0lQX0NPVU5URVJNRUFTVVJFUzoKLQkJcGFyYW0tPnZhbHVlID0gcHJpdi0+dGtpcF9jbV9hY3RpdmU7Ci0JCWJyZWFrOwotCi0JY2FzZSBJV19BVVRIXzgwMjExX0FVVEhfQUxHOgotCQlpZiAocHJpdi0+d2VwX3Jlc3RyaWN0KQotCQkJcGFyYW0tPnZhbHVlID0gSVdfQVVUSF9BTEdfU0hBUkVEX0tFWTsKLQkJZWxzZQotCQkJcGFyYW0tPnZhbHVlID0gSVdfQVVUSF9BTEdfT1BFTl9TWVNURU07Ci0JCWJyZWFrOwotCi0JY2FzZSBJV19BVVRIX1dQQV9FTkFCTEVEOgotCQlwYXJhbS0+dmFsdWUgPSBwcml2LT53cGFfZW5hYmxlZDsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlyZXQgPSAtRU9QTk9UU1VQUDsKLQl9Ci0KLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9zZXRfZ2VuaWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXU4ICpidWY7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCS8qIGN1dCBvZmYgYXQgSUVFRTgwMjExX01BWF9EQVRBX0xFTiAqLwotCWlmICgod3JxdS0+ZGF0YS5sZW5ndGggPiBJRUVFODAyMTFfTUFYX0RBVEFfTEVOKSB8fAotCSAgICAod3JxdS0+ZGF0YS5sZW5ndGggJiYgKGV4dHJhID09IE5VTEwpKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAod3JxdS0+ZGF0YS5sZW5ndGgpIHsKLQkJYnVmID0ga21hbGxvYyh3cnF1LT5kYXRhLmxlbmd0aCwgR0ZQX0tFUk5FTCk7Ci0JCWlmIChidWYgPT0gTlVMTCkKLQkJCXJldHVybiAtRU5PTUVNOwotCi0JCW1lbWNweShidWYsIGV4dHJhLCB3cnF1LT5kYXRhLmxlbmd0aCk7Ci0JfSBlbHNlCi0JCWJ1ZiA9IE5VTEw7Ci0KLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkgewotCQlrZnJlZShidWYpOwotCQlyZXR1cm4gLUVCVVNZOwotCX0KLQotCWtmcmVlKHByaXYtPndwYV9pZSk7Ci0JcHJpdi0+d3BhX2llID0gYnVmOwotCXByaXYtPndwYV9pZV9sZW4gPSB3cnF1LT5kYXRhLmxlbmd0aDsKLQotCWlmIChwcml2LT53cGFfaWUpIHsKLQkJLyogTG9va3MgbGlrZSB3bF9sa20gd2FudHMgdG8gY2hlY2sgdGhlIGF1dGggYWxnLCBhbmQKLQkJICogc29tZWhvdyBwYXNzIGl0IHRvIHRoZSBmaXJtd2FyZS4KLQkJICogSW5zdGVhZCBpdCBqdXN0IGNhbGxzIHRoZSBrZXkgbWdtdCByaWQKLQkJICogICAtIHdlIGRvIHRoaXMgaW4gc2V0IGF1dGguCi0JCSAqLwotCX0KLQotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRfZ2VuaWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGVyciA9IDA7Ci0KLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCWlmICgocHJpdi0+d3BhX2llX2xlbiA9PSAwKSB8fCAocHJpdi0+d3BhX2llID09IE5VTEwpKSB7Ci0JCXdycXUtPmRhdGEubGVuZ3RoID0gMDsKLQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKHdycXUtPmRhdGEubGVuZ3RoIDwgcHJpdi0+d3BhX2llX2xlbikgewotCQllcnIgPSAtRTJCSUc7Ci0JCWdvdG8gb3V0OwotCX0KLQotCXdycXUtPmRhdGEubGVuZ3RoID0gcHJpdi0+d3BhX2llX2xlbjsKLQltZW1jcHkoZXh0cmEsIHByaXYtPndwYV9pZSwgcHJpdi0+d3BhX2llX2xlbik7Ci0KLW91dDoKLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9zZXRfbWxtZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKLQlzdHJ1Y3QgaXdfbWxtZSAqbWxtZSA9IChzdHJ1Y3QgaXdfbWxtZSAqKWV4dHJhOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldCA9IDA7Ci0KLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCXN3aXRjaCAobWxtZS0+Y21kKSB7Ci0JY2FzZSBJV19NTE1FX0RFQVVUSDoKLQkJLyogc2lsZW50bHkgaWdub3JlICovCi0JCWJyZWFrOwotCi0JY2FzZSBJV19NTE1FX0RJU0FTU09DOgotCXsKLQkJc3RydWN0IHsKLQkJCXU4IGFkZHJbRVRIX0FMRU5dOwotCQkJX19sZTE2IHJlYXNvbl9jb2RlOwotCQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBidWY7Ci0KLQkJbWVtY3B5KGJ1Zi5hZGRyLCBtbG1lLT5hZGRyLnNhX2RhdGEsIEVUSF9BTEVOKTsKLQkJYnVmLnJlYXNvbl9jb2RlID0gY3B1X3RvX2xlMTYobWxtZS0+cmVhc29uX2NvZGUpOwotCQlyZXQgPSBIRVJNRVNfV1JJVEVfUkVDT1JEKGh3LCBVU0VSX0JBUCwKLQkJCQkJICBIRVJNRVNfUklEX0NORkRJU0FTU09DSUFURSwKLQkJCQkJICAmYnVmKTsKLQkJYnJlYWs7Ci0JfQotCWRlZmF1bHQ6Ci0JCXJldCA9IC1FT1BOT1RTVVBQOwotCX0KLQotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2dldHJldHJ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSAgc3RydWN0IGl3X3BhcmFtICpycnEsCi0JCQkJICBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7Ci0JaW50IGVyciA9IDA7Ci0JdTE2IHNob3J0X2xpbWl0LCBsb25nX2xpbWl0LCBsaWZldGltZTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCXJldHVybiAtRUJVU1k7Ci0JCi0JZXJyID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsIEhFUk1FU19SSURfU0hPUlRSRVRSWUxJTUlULAotCQkJCSAgJnNob3J0X2xpbWl0KTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dDsKLQotCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0xPTkdSRVRSWUxJTUlULAotCQkJCSAgJmxvbmdfbGltaXQpOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0OwotCi0JZXJyID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsIEhFUk1FU19SSURfTUFYVFJBTlNNSVRMSUZFVElNRSwKLQkJCQkgICZsaWZldGltZSk7Ci0JaWYgKGVycikKLQkJZ290byBvdXQ7Ci0KLQlycnEtPmRpc2FibGVkID0gMDsJCS8qIENhbid0IGJlIGRpc2FibGVkICovCi0KLQkvKiBOb3RlIDogYnkgZGVmYXVsdCwgZGlzcGxheSB0aGUgcmV0cnkgbnVtYmVyICovCi0JaWYgKChycnEtPmZsYWdzICYgSVdfUkVUUllfVFlQRSkgPT0gSVdfUkVUUllfTElGRVRJTUUpIHsKLQkJcnJxLT5mbGFncyA9IElXX1JFVFJZX0xJRkVUSU1FOwotCQlycnEtPnZhbHVlID0gbGlmZXRpbWUgKiAxMDAwOwkvKiA/Pz8gKi8KLQl9IGVsc2UgewotCQkvKiBCeSBkZWZhdWx0LCBkaXNwbGF5IHRoZSBtaW4gbnVtYmVyICovCi0JCWlmICgocnJxLT5mbGFncyAmIElXX1JFVFJZX0xPTkcpKSB7Ci0JCQlycnEtPmZsYWdzID0gSVdfUkVUUllfTElNSVQgfCBJV19SRVRSWV9MT05HOwotCQkJcnJxLT52YWx1ZSA9IGxvbmdfbGltaXQ7Ci0JCX0gZWxzZSB7Ci0JCQlycnEtPmZsYWdzID0gSVdfUkVUUllfTElNSVQ7Ci0JCQlycnEtPnZhbHVlID0gc2hvcnRfbGltaXQ7Ci0JCQlpZihzaG9ydF9saW1pdCAhPSBsb25nX2xpbWl0KQotCQkJCXJycS0+ZmxhZ3MgfD0gSVdfUkVUUllfU0hPUlQ7Ci0JCX0KLQl9Ci0KLSBvdXQ6Ci0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgICAgICAgdm9pZCAqd3JxdSwKLQkJCSAgICAgICBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCWlmICghIGNhcGFibGUoQ0FQX05FVF9BRE1JTikpCi0JCXJldHVybiAtRVBFUk07Ci0KLQlpZiAoaW5mby0+Y21kID09IChTSU9DSVdGSVJTVFBSSVYgKyAweDEpKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogRm9yY2luZyByZXNldCFcbiIsIGRldi0+bmFtZSk7Ci0KLQkJLyogRmlybXdhcmUgcmVzZXQgKi8KLQkJb3Jpbm9jb19yZXNldCgmcHJpdi0+cmVzZXRfd29yayk7Ci0JfSBlbHNlIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBGb3JjZSBzY2hlZHVsaW5nIHJlc2V0IVxuIiwgZGV2LT5uYW1lKTsKLQotCQlzY2hlZHVsZV93b3JrKCZwcml2LT5yZXNldF93b3JrKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBvcmlub2NvX2lvY3RsX3NldGlic3Nwb3J0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSAgICAgdm9pZCAqd3JxdSwKLQkJCQkgICAgIGNoYXIgKmV4dHJhKQotCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IHZhbCA9ICooIChpbnQgKikgZXh0cmEgKTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCXJldHVybiAtRUJVU1k7Ci0KLQlwcml2LT5pYnNzX3BvcnQgPSB2YWwgOwotCi0JLyogQWN0dWFsbHkgdXBkYXRlIHRoZSBtb2RlIHdlIGFyZSB1c2luZyAqLwotCXNldF9wb3J0X3R5cGUocHJpdik7Ci0KLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCXJldHVybiAtRUlOUFJPR1JFU1M7CQkvKiBDYWxsIGNvbW1pdCBoYW5kbGVyICovCi19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRpYnNzcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgICAgIHZvaWQgKndycXUsCi0JCQkJICAgICBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgKnZhbCA9IChpbnQgKikgZXh0cmE7Ci0KLQkqdmFsID0gcHJpdi0+aWJzc19wb3J0OwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG9yaW5vY29faW9jdGxfc2V0cG9ydDMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJICB2b2lkICp3cnF1LAotCQkJCSAgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IHZhbCA9ICooIChpbnQgKikgZXh0cmEgKTsKLQlpbnQgZXJyID0gMDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCXJldHVybiAtRUJVU1k7Ci0KLQlzd2l0Y2ggKHZhbCkgewotCWNhc2UgMDogLyogVHJ5IHRvIGRvIElFRUUgYWQtaG9jIG1vZGUgKi8KLQkJaWYgKCEgcHJpdi0+aGFzX2lic3MpIHsKLQkJCWVyciA9IC1FSU5WQUw7Ci0JCQlicmVhazsKLQkJfQotCQlwcml2LT5wcmVmZXJfcG9ydDMgPSAwOwotCQkJCi0JCWJyZWFrOwotCi0JY2FzZSAxOiAvKiBUcnkgdG8gZG8gTHVjZW50IHByb3ByaWV0YXJ5IGFkLWhvYyBtb2RlICovCi0JCWlmICghIHByaXYtPmhhc19wb3J0MykgewotCQkJZXJyID0gLUVJTlZBTDsKLQkJCWJyZWFrOwotCQl9Ci0JCXByaXYtPnByZWZlcl9wb3J0MyA9IDE7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJZXJyID0gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoISBlcnIpIHsKLQkJLyogQWN0dWFsbHkgdXBkYXRlIHRoZSBtb2RlIHdlIGFyZSB1c2luZyAqLwotCQlzZXRfcG9ydF90eXBlKHByaXYpOwotCQllcnIgPSAtRUlOUFJPR1JFU1M7Ci0JfQotCi0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRwb3J0MyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgIHZvaWQgKndycXUsCi0JCQkJICBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgKnZhbCA9IChpbnQgKikgZXh0cmE7Ci0KLQkqdmFsID0gcHJpdi0+cHJlZmVyX3BvcnQzOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG9yaW5vY29faW9jdGxfc2V0cHJlYW1ibGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJICAgICB2b2lkICp3cnF1LAotCQkJCSAgICAgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgdmFsOwotCi0JaWYgKCEgcHJpdi0+aGFzX3ByZWFtYmxlKQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0KLQkvKiA4MDIuMTFiIGhhcyByZWNlbnRseSBkZWZpbmVkIHNvbWUgc2hvcnQgcHJlYW1ibGUuCi0JICogQmFzaWNhbGx5LCB0aGUgUGh5IGhlYWRlciBoYXMgYmVlbiByZWR1Y2VkIGluIHNpemUuCi0JICogVGhpcyBpbmNyZWFzZSBwZXJmb3JtYW5jZSwgZXNwZWNpYWxseSBhdCBoaWdoIHJhdGVzCi0JICogKHRoZSBwcmVhbWJsZSBpcyB0cmFuc21pdHRlZCBhdCAxTWIvcyksIHVuZm9ydHVuYXRlbHkKLQkgKiB0aGlzIGdpdmUgY29tcGF0aWJpbGl0eSB0cm91Ymxlcy4uLiAtIEplYW4gSUkgKi8KLQl2YWwgPSAqKCAoaW50ICopIGV4dHJhICk7Ci0KLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCWlmICh2YWwpCi0JCXByaXYtPnByZWFtYmxlID0gMTsKLQllbHNlCi0JCXByaXYtPnByZWFtYmxlID0gMDsKLQotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0KLQlyZXR1cm4gLUVJTlBST0dSRVNTOwkJLyogQ2FsbCBjb21taXQgaGFuZGxlciAqLwotfQotCi1zdGF0aWMgaW50IG9yaW5vY29faW9jdGxfZ2V0cHJlYW1ibGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJICAgICB2b2lkICp3cnF1LAotCQkJCSAgICAgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50ICp2YWwgPSAoaW50ICopIGV4dHJhOwotCi0JaWYgKCEgcHJpdi0+aGFzX3ByZWFtYmxlKQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0KLQkqdmFsID0gcHJpdi0+cHJlYW1ibGU7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIGlvY3RsIGludGVyZmFjZSB0byBoZXJtZXNfcmVhZF9sdHYoKQotICogVG8gdXNlIHdpdGggaXdwcml2LCBwYXNzIHRoZSBSSUQgYXMgdGhlIHRva2VuIGFyZ3VtZW50LCBlLmcuCi0gKiBpd3ByaXYgZ2V0X3JpZCBbMHhmYzAwXQotICogQXQgbGVhc3QgV2lyZWxlc3MgVG9vbHMgMjUgaXMgcmVxdWlyZWQgdG8gdXNlIGl3cHJpdi4KLSAqIEZvciBXaXJlbGVzcyBUb29scyAyNSBhbmQgMjYgYXBwZW5kICJkdW1teSIgYXJlIHRoZSBlbmQuICovCi1zdGF0aWMgaW50IG9yaW5vY29faW9jdGxfZ2V0cmlkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQlzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsCi0JCQkJY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OwotCWludCByaWQgPSBkYXRhLT5mbGFnczsKLQl1MTYgbGVuZ3RoOwotCWludCBlcnI7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCS8qIEl0J3MgYSAiZ2V0IiBmdW5jdGlvbiwgYnV0IHdlIGRvbid0IHdhbnQgdXNlcnMgdG8gYWNjZXNzIHRoZQotCSAqIFdFUCBrZXkgYW5kIG90aGVyIHJhdyBmaXJtd2FyZSBkYXRhICovCi0JaWYgKCEgY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKLQkJcmV0dXJuIC1FUEVSTTsKLQotCWlmIChyaWQgPCAweGZjMDAgfHwgcmlkID4gMHhmZmZmKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JZXJyID0gaGVybWVzX3JlYWRfbHR2KGh3LCBVU0VSX0JBUCwgcmlkLCBNQVhfUklEX0xFTiwgJmxlbmd0aCwKLQkJCSAgICAgIGV4dHJhKTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dDsKLQotCWRhdGEtPmxlbmd0aCA9IG1pbl90KHUxNiwgSEVSTUVTX1JFQ0xFTl9UT19CWVRFUyhsZW5ndGgpLAotCQkJICAgICBNQVhfUklEX0xFTik7Ci0KLSBvdXQ6Ci0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQlyZXR1cm4gZXJyOwotfQotCi0vKiBUcmlnZ2VyIGEgc2NhbiAobG9vayBmb3Igb3RoZXIgY2VsbHMgaW4gdGhlIHZpY2luaXR5KSAqLwotc3RhdGljIGludCBvcmlub2NvX2lvY3RsX3NldHNjYW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgc3RydWN0IGl3X3BvaW50ICpzcnEsCi0JCQkJIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKLQlzdHJ1Y3QgaXdfc2Nhbl9yZXEgKnNpID0gKHN0cnVjdCBpd19zY2FuX3JlcSAqKSBleHRyYTsKLQlpbnQgZXJyID0gMDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JLyogTm90ZSA6IHlvdSBtYXkgaGF2ZSByZWFsaXNlZCB0aGF0LCBhcyB0aGlzIGlzIGEgU0VUIG9wZXJhdGlvbiwKLQkgKiB0aGlzIGlzIHByaXZpbGVnZWQgYW5kIHRoZXJlZm9yZSBhIG5vcm1hbCB1c2VyIGNhbid0Ci0JICogcGVyZm9ybSBzY2FubmluZy4KLQkgKiBUaGlzIGlzIG5vdCBhbiBlcnJvciwgd2hpbGUgdGhlIGRldmljZSBwZXJmb3JtIHNjYW5uaW5nLAotCSAqIHRyYWZmaWMgZG9lc24ndCBmbG93LCBzbyBpdCdzIGEgcGVyZmVjdCBEb1MuLi4KLQkgKiBKZWFuIElJICovCi0KLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCS8qIFNjYW5uaW5nIHdpdGggcG9ydCAwIGRpc2FibGVkIHdvdWxkIGZhaWwgKi8KLQlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkgewotCQllcnIgPSAtRU5FVERPV047Ci0JCWdvdG8gb3V0OwotCX0KLQotCS8qIEluIG1vbml0b3IgbW9kZSwgdGhlIHNjYW4gcmVzdWx0cyBhcmUgYWx3YXlzIGVtcHR5LgotCSAqIFByb2JlIHJlc3BvbnNlcyBhcmUgcGFzc2VkIHRvIHRoZSBkcml2ZXIgYXMgcmVjZWl2ZWQKLQkgKiBmcmFtZXMgYW5kIGNvdWxkIGJlIHByb2Nlc3NlZCBpbiBzb2Z0d2FyZS4gKi8KLQlpZiAocHJpdi0+aXdfbW9kZSA9PSBJV19NT0RFX01PTklUT1IpIHsKLQkJZXJyID0gLUVPUE5PVFNVUFA7Ci0JCWdvdG8gb3V0OwotCX0KLQotCS8qIE5vdGUgOiBiZWNhdXNlIHdlIGRvbid0IGxvY2sgb3V0IHRoZSBpcnEgaGFuZGxlciwgdGhlIHdheQotCSAqIHdlIGFjY2VzcyBzY2FuIHZhcmlhYmxlcyBpbiBwcml2IGlzIGNyaXRpY2FsLgotCSAqCW8gc2Nhbl9pbnByb2dyZXNzIDogbm90IHRvdWNoZWQgYnkgaXJxIGhhbmRsZXIKLQkgKglvIHNjYW5fbW9kZSA6IG5vdCB0b3VjaGVkIGJ5IGlycSBoYW5kbGVyCi0JICogQmVmb3JlIG1vZGlmeWluZyBhbnl0aGluZyBvbiB0aG9zZSB2YXJpYWJsZXMsIHBsZWFzZSB0aGluayBoYXJkICEKLQkgKiBKZWFuIElJICovCi0KLQkvKiBTYXZlIGZsYWdzICovCi0JcHJpdi0+c2Nhbl9tb2RlID0gc3JxLT5mbGFnczsKLQotCS8qIEFsd2F5cyB0cmlnZ2VyIHNjYW5uaW5nLCBldmVuIGlmIGl0J3MgaW4gcHJvZ3Jlc3MuCi0JICogVGhpcyB3YXksIGlmIHRoZSBpbmZvIGZyYW1lIGdldCBsb3N0LCB3ZSB3aWxsIHJlY292ZXIgc29tZXdoYXQKLQkgKiBncmFjZWZ1bGx5ICAtIEplYW4gSUkgKi8KLQotCWlmIChwcml2LT5oYXNfaG9zdHNjYW4pIHsKLQkJc3dpdGNoIChwcml2LT5maXJtd2FyZV90eXBlKSB7Ci0JCWNhc2UgRklSTVdBUkVfVFlQRV9TWU1CT0w6Ci0JCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCi0JCQkJCQkgICBIRVJNRVNfUklEX0NORkhPU1RTQ0FOX1NZTUJPTCwKLQkJCQkJCSAgIEhFUk1FU19IT1NUU0NBTl9TWU1CT0xfT05DRSB8Ci0JCQkJCQkgICBIRVJNRVNfSE9TVFNDQU5fU1lNQk9MX0JDQVNUKTsKLQkJCWJyZWFrOwotCQljYXNlIEZJUk1XQVJFX1RZUEVfSU5URVJTSUw6IHsKLQkJCV9fbGUxNiByZXFbM107Ci0KLQkJCXJlcVswXSA9IGNwdV90b19sZTE2KDB4M2ZmZik7CS8qIEFsbCBjaGFubmVscyAqLwotCQkJcmVxWzFdID0gY3B1X3RvX2xlMTYoMHgwMDAxKTsJLyogcmF0ZSAxIE1icHMgKi8KLQkJCXJlcVsyXSA9IDA7CQkJLyogQW55IEVTU0lEICovCi0JCQllcnIgPSBIRVJNRVNfV1JJVEVfUkVDT1JEKGh3LCBVU0VSX0JBUCwKLQkJCQkJCSAgSEVSTUVTX1JJRF9DTkZIT1NUU0NBTiwgJnJlcSk7Ci0JCX0KLQkJYnJlYWs7Ci0JCWNhc2UgRklSTVdBUkVfVFlQRV9BR0VSRToKLQkJCWlmIChwcml2LT5zY2FuX21vZGUgJiBJV19TQ0FOX1RISVNfRVNTSUQpIHsKLQkJCQlzdHJ1Y3QgaGVybWVzX2lkc3RyaW5nIGlkYnVmOwotCQkJCXNpemVfdCBsZW4gPSBtaW4oc2l6ZW9mKGlkYnVmLnZhbCksCi0JCQkJCQkgKHNpemVfdCkgc2ktPmVzc2lkX2xlbik7Ci0JCQkJaWRidWYubGVuID0gY3B1X3RvX2xlMTYobGVuKTsKLQkJCQltZW1jcHkoaWRidWYudmFsLCBzaS0+ZXNzaWQsIGxlbik7Ci0KLQkJCQllcnIgPSBoZXJtZXNfd3JpdGVfbHR2KGh3LCBVU0VSX0JBUCwKLQkJCQkJICAgICAgIEhFUk1FU19SSURfQ05GU0NBTlNTSURfQUdFUkUsCi0JCQkJCSAgICAgICBIRVJNRVNfQllURVNfVE9fUkVDTEVOKGxlbiArIDIpLAotCQkJCQkgICAgICAgJmlkYnVmKTsKLQkJCX0gZWxzZQotCQkJCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKLQkJCQkJCSAgIEhFUk1FU19SSURfQ05GU0NBTlNTSURfQUdFUkUsCi0JCQkJCQkgICAwKTsJLyogQW55IEVTU0lEICovCi0JCQlpZiAoZXJyKQotCQkJCWJyZWFrOwotCi0JCQlpZiAocHJpdi0+aGFzX2V4dF9zY2FuKSB7Ci0JCQkJLyogQ2xlYXIgc2NhbiByZXN1bHRzIGF0IHRoZSBzdGFydCBvZgotCQkJCSAqIGFuIGV4dGVuZGVkIHNjYW4gKi8KLQkJCQlvcmlub2NvX2NsZWFyX3NjYW5fcmVzdWx0cyhwcml2LAotCQkJCQkJbXNlY3NfdG9famlmZmllcygxNTAwMCkpOwotCi0JCQkJLyogVE9ETzogSXMgdGhpcyBhdmFpbGFibGUgb24gb2xkZXIgZmlybXdhcmU/Ci0JCQkJICogICBDYW4gd2UgdXNlIGl0IHRvIHNjYW4gc3BlY2lmaWMgY2hhbm5lbHMKLQkJCQkgKiAgIGZvciBJV19TQ0FOX1RISVNfRlJFUT8gKi8KLQkJCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCi0JCQkJCQlIRVJNRVNfUklEX0NORlNDQU5DSEFOTkVMUzJHSFosCi0JCQkJCQkweDdGRkYpOwotCQkJCWlmIChlcnIpCi0JCQkJCWdvdG8gb3V0OwotCi0JCQkJZXJyID0gaGVybWVzX2lucXVpcmUoaHcsCi0JCQkJCQkgICAgIEhFUk1FU19JTlFfQ0hBTk5FTElORk8pOwotCQkJfSBlbHNlCi0JCQkJZXJyID0gaGVybWVzX2lucXVpcmUoaHcsIEhFUk1FU19JTlFfU0NBTik7Ci0JCQlicmVhazsKLQkJfQotCX0gZWxzZQotCQllcnIgPSBoZXJtZXNfaW5xdWlyZShodywgSEVSTUVTX0lOUV9TQ0FOKTsKLQotCS8qIE9uZSBtb3JlIGNsaWVudCAqLwotCWlmICghIGVycikKLQkJcHJpdi0+c2Nhbl9pbnByb2dyZXNzID0gMTsKLQotIG91dDoKLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCXJldHVybiBlcnI7Ci19Ci0KLSNkZWZpbmUgTUFYX0NVU1RPTV9MRU4gNjQKLQotLyogVHJhbnNsYXRlIHNjYW4gZGF0YSByZXR1cm5lZCBmcm9tIHRoZSBjYXJkIHRvIGEgY2FyZCBpbmRlcGVuZGFudAotICogZm9ybWF0IHRoYXQgdGhlIFdpcmVsZXNzIFRvb2xzIHdpbGwgdW5kZXJzdGFuZCAtIEplYW4gSUkgKi8KLXN0YXRpYyBpbmxpbmUgY2hhciAqb3Jpbm9jb190cmFuc2xhdGVfc2NhbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCQkgICBjaGFyICpjdXJyZW50X2V2LAotCQkJCQkgICBjaGFyICplbmRfYnVmLAotCQkJCQkgICB1bmlvbiBoZXJtZXNfc2Nhbl9pbmZvICpic3MsCi0JCQkJCSAgIHVuc2lnbmVkIGxvbmcgbGFzdF9zY2FubmVkKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXUxNgkJCWNhcGFiaWxpdGllczsKLQl1MTYJCQljaGFubmVsOwotCXN0cnVjdCBpd19ldmVudAkJaXdlOwkJLyogVGVtcG9yYXJ5IGJ1ZmZlciAqLwotCWNoYXIgY3VzdG9tW01BWF9DVVNUT01fTEVOXTsKLQotCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7Ci0KLQkvKiBGaXJzdCBlbnRyeSAqTVVTVCogYmUgdGhlIEFQIE1BQyBhZGRyZXNzICovCi0JaXdlLmNtZCA9IFNJT0NHSVdBUDsKLQlpd2UudS5hcF9hZGRyLnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKLQltZW1jcHkoaXdlLnUuYXBfYWRkci5zYV9kYXRhLCBic3MtPmEuYnNzaWQsIEVUSF9BTEVOKTsKLQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKLQkJCQkJICAmaXdlLCBJV19FVl9BRERSX0xFTik7Ci0KLQkvKiBPdGhlciBlbnRyaWVzIHdpbGwgYmUgZGlzcGxheWVkIGluIHRoZSBvcmRlciB3ZSBnaXZlIHRoZW0gKi8KLQotCS8qIEFkZCB0aGUgRVNTSUQgKi8KLQlpd2UudS5kYXRhLmxlbmd0aCA9IGxlMTZfdG9fY3B1KGJzcy0+YS5lc3NpZF9sZW4pOwotCWlmIChpd2UudS5kYXRhLmxlbmd0aCA+IDMyKQotCQlpd2UudS5kYXRhLmxlbmd0aCA9IDMyOwotCWl3ZS5jbWQgPSBTSU9DR0lXRVNTSUQ7Ci0JaXdlLnUuZGF0YS5mbGFncyA9IDE7Ci0JY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCi0JCQkJCSAgJml3ZSwgYnNzLT5hLmVzc2lkKTsKLQotCS8qIEFkZCBtb2RlICovCi0JaXdlLmNtZCA9IFNJT0NHSVdNT0RFOwotCWNhcGFiaWxpdGllcyA9IGxlMTZfdG9fY3B1KGJzcy0+YS5jYXBhYmlsaXRpZXMpOwotCWlmIChjYXBhYmlsaXRpZXMgJiAoV0xBTl9DQVBBQklMSVRZX0VTUyB8IFdMQU5fQ0FQQUJJTElUWV9JQlNTKSkgewotCQlpZiAoY2FwYWJpbGl0aWVzICYgV0xBTl9DQVBBQklMSVRZX0VTUykKLQkJCWl3ZS51Lm1vZGUgPSBJV19NT0RFX01BU1RFUjsKLQkJZWxzZQotCQkJaXdlLnUubW9kZSA9IElXX01PREVfQURIT0M7Ci0JCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAotCQkJCQkJICAmaXdlLCBJV19FVl9VSU5UX0xFTik7Ci0JfQotCi0JY2hhbm5lbCA9IGJzcy0+cy5jaGFubmVsOwotCWlmICgoY2hhbm5lbCA+PSAxKSAmJiAoY2hhbm5lbCA8PSBOVU1fQ0hBTk5FTFMpKSB7Ci0JCS8qIEFkZCBjaGFubmVsIGFuZCBmcmVxdWVuY3kgKi8KLQkJaXdlLmNtZCA9IFNJT0NHSVdGUkVROwotCQlpd2UudS5mcmVxLm0gPSBjaGFubmVsOwotCQlpd2UudS5mcmVxLmUgPSAwOwotCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKLQkJCQkJCSAgJml3ZSwgSVdfRVZfRlJFUV9MRU4pOwotCi0JCWl3ZS51LmZyZXEubSA9IGNoYW5uZWxfZnJlcXVlbmN5W2NoYW5uZWwtMV0gKiAxMDAwMDA7Ci0JCWl3ZS51LmZyZXEuZSA9IDE7Ci0JCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAotCQkJCQkJICAmaXdlLCBJV19FVl9GUkVRX0xFTik7Ci0JfQotCi0JLyogQWRkIHF1YWxpdHkgc3RhdGlzdGljcy4gbGV2ZWwgYW5kIG5vaXNlIGluIGRCLiBObyBsaW5rIHF1YWxpdHkgKi8KLQlpd2UuY21kID0gSVdFVlFVQUw7Ci0JaXdlLnUucXVhbC51cGRhdGVkID0gSVdfUVVBTF9EQk0gfCBJV19RVUFMX1FVQUxfSU5WQUxJRDsKLQlpd2UudS5xdWFsLmxldmVsID0gKF9fdTgpIGxlMTZfdG9fY3B1KGJzcy0+YS5sZXZlbCkgLSAweDk1OwotCWl3ZS51LnF1YWwubm9pc2UgPSAoX191OCkgbGUxNl90b19jcHUoYnNzLT5hLm5vaXNlKSAtIDB4OTU7Ci0JLyogV2lyZWxlc3MgdG9vbHMgcHJpb3IgdG8gMjcucHJlMjIgd2lsbCBzaG93IGxpbmsgcXVhbGl0eQotCSAqIGFueXdheSwgc28gd2UgcHJvdmlkZSBhIHJlYXNvbmFibGUgdmFsdWUuICovCi0JaWYgKGl3ZS51LnF1YWwubGV2ZWwgPiBpd2UudS5xdWFsLm5vaXNlKQotCQlpd2UudS5xdWFsLnF1YWwgPSBpd2UudS5xdWFsLmxldmVsIC0gaXdlLnUucXVhbC5ub2lzZTsKLQllbHNlCi0JCWl3ZS51LnF1YWwucXVhbCA9IDA7Ci0JY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCi0JCQkJCSAgJml3ZSwgSVdfRVZfUVVBTF9MRU4pOwotCi0JLyogQWRkIGVuY3J5cHRpb24gY2FwYWJpbGl0eSAqLwotCWl3ZS5jbWQgPSBTSU9DR0lXRU5DT0RFOwotCWlmIChjYXBhYmlsaXRpZXMgJiBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWSkKLQkJaXdlLnUuZGF0YS5mbGFncyA9IElXX0VOQ09ERV9FTkFCTEVEIHwgSVdfRU5DT0RFX05PS0VZOwotCWVsc2UKLQkJaXdlLnUuZGF0YS5mbGFncyA9IElXX0VOQ09ERV9ESVNBQkxFRDsKLQlpd2UudS5kYXRhLmxlbmd0aCA9IDA7Ci0JY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCi0JCQkJCSAgJml3ZSwgTlVMTCk7Ci0KLQkvKiBCaXQgcmF0ZSBpcyBub3QgYXZhaWxhYmxlIGluIEx1Y2VudC9BZ2VyZSBmaXJtd2FyZXMgKi8KLQlpZiAocHJpdi0+ZmlybXdhcmVfdHlwZSAhPSBGSVJNV0FSRV9UWVBFX0FHRVJFKSB7Ci0JCWNoYXIgKmN1cnJlbnRfdmFsID0gY3VycmVudF9ldiArIGl3ZV9zdHJlYW1fbGNwX2xlbihpbmZvKTsKLQkJaW50IGk7Ci0JCWludCBzdGVwOwotCi0JCWlmIChwcml2LT5maXJtd2FyZV90eXBlID09IEZJUk1XQVJFX1RZUEVfU1lNQk9MKQotCQkJc3RlcCA9IDI7Ci0JCWVsc2UKLQkJCXN0ZXAgPSAxOwotCi0JCWl3ZS5jbWQgPSBTSU9DR0lXUkFURTsKLQkJLyogVGhvc2UgdHdvIGZsYWdzIGFyZSBpZ25vcmVkLi4uICovCi0JCWl3ZS51LmJpdHJhdGUuZml4ZWQgPSBpd2UudS5iaXRyYXRlLmRpc2FibGVkID0gMDsKLQkJLyogTWF4IDEwIHZhbHVlcyAqLwotCQlmb3IgKGkgPSAwOyBpIDwgMTA7IGkgKz0gc3RlcCkgewotCQkJLyogTlVMTCB0ZXJtaW5hdGVkICovCi0JCQlpZiAoYnNzLT5wLnJhdGVzW2ldID09IDB4MCkKLQkJCQlicmVhazsKLQkJCS8qIEJpdCByYXRlIGdpdmVuIGluIDUwMCBrYi9zIHVuaXRzICgrIDB4ODApICovCi0JCQlpd2UudS5iaXRyYXRlLnZhbHVlID0KLQkJCQkoKGJzcy0+cC5yYXRlc1tpXSAmIDB4N2YpICogNTAwMDAwKTsKLQkJCWN1cnJlbnRfdmFsID0gaXdlX3N0cmVhbV9hZGRfdmFsdWUoaW5mbywgY3VycmVudF9ldiwKLQkJCQkJCQkgICBjdXJyZW50X3ZhbCwKLQkJCQkJCQkgICBlbmRfYnVmLCAmaXdlLAotCQkJCQkJCSAgIElXX0VWX1BBUkFNX0xFTik7Ci0JCX0KLQkJLyogQ2hlY2sgaWYgd2UgYWRkZWQgYW55IGV2ZW50ICovCi0JCWlmICgoY3VycmVudF92YWwgLSBjdXJyZW50X2V2KSA+IGl3ZV9zdHJlYW1fbGNwX2xlbihpbmZvKSkKLQkJCWN1cnJlbnRfZXYgPSBjdXJyZW50X3ZhbDsKLQl9Ci0KLQkvKiBCZWFjb24gaW50ZXJ2YWwgKi8KLQlpd2UuY21kID0gSVdFVkNVU1RPTTsKLQlpd2UudS5kYXRhLmxlbmd0aCA9IHNucHJpbnRmKGN1c3RvbSwgTUFYX0NVU1RPTV9MRU4sCi0JCQkJICAgICAiYmNuX2ludD0lZCIsCi0JCQkJICAgICBsZTE2X3RvX2NwdShic3MtPmEuYmVhY29uX2ludGVydikpOwotCWlmIChpd2UudS5kYXRhLmxlbmd0aCkKLQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCi0JCQkJCQkgICZpd2UsIGN1c3RvbSk7Ci0KLQkvKiBDYXBhYmlsaXRlcyAqLwotCWl3ZS5jbWQgPSBJV0VWQ1VTVE9NOwotCWl3ZS51LmRhdGEubGVuZ3RoID0gc25wcmludGYoY3VzdG9tLCBNQVhfQ1VTVE9NX0xFTiwKLQkJCQkgICAgICJjYXBhYj0weCUwNHgiLAotCQkJCSAgICAgY2FwYWJpbGl0aWVzKTsKLQlpZiAoaXdlLnUuZGF0YS5sZW5ndGgpCi0JCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAotCQkJCQkJICAmaXdlLCBjdXN0b20pOwotCi0JLyogQWRkIEVYVFJBOiBBZ2UgdG8gZGlzcGxheSBzZWNvbmRzIHNpbmNlIGxhc3QgYmVhY29uL3Byb2JlIHJlc3BvbnNlCi0JICogZm9yIGdpdmVuIG5ldHdvcmsuICovCi0JaXdlLmNtZCA9IElXRVZDVVNUT007Ci0JaXdlLnUuZGF0YS5sZW5ndGggPSBzbnByaW50ZihjdXN0b20sIE1BWF9DVVNUT01fTEVOLAotCQkJCSAgICAgIiBMYXN0IGJlYWNvbjogJWRtcyBhZ28iLAotCQkJCSAgICAgamlmZmllc190b19tc2VjcyhqaWZmaWVzIC0gbGFzdF9zY2FubmVkKSk7Ci0JaWYgKGl3ZS51LmRhdGEubGVuZ3RoKQotCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKLQkJCQkJCSAgJml3ZSwgY3VzdG9tKTsKLQotCXJldHVybiBjdXJyZW50X2V2OwotfQotCi1zdGF0aWMgaW5saW5lIGNoYXIgKm9yaW5vY29fdHJhbnNsYXRlX2V4dF9zY2FuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJCSAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCQkgICAgICAgY2hhciAqY3VycmVudF9ldiwKLQkJCQkJICAgICAgIGNoYXIgKmVuZF9idWYsCi0JCQkJCSAgICAgICBzdHJ1Y3QgYWdlcmVfZXh0X3NjYW5faW5mbyAqYnNzLAotCQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBsYXN0X3NjYW5uZWQpCi17Ci0JdTE2CQkJY2FwYWJpbGl0aWVzOwotCXUxNgkJCWNoYW5uZWw7Ci0Jc3RydWN0IGl3X2V2ZW50CQlpd2U7CQkvKiBUZW1wb3JhcnkgYnVmZmVyICovCi0JY2hhciBjdXN0b21bTUFYX0NVU1RPTV9MRU5dOwotCXU4ICppZTsKLQotCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7Ci0KLQkvKiBGaXJzdCBlbnRyeSAqTVVTVCogYmUgdGhlIEFQIE1BQyBhZGRyZXNzICovCi0JaXdlLmNtZCA9IFNJT0NHSVdBUDsKLQlpd2UudS5hcF9hZGRyLnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKLQltZW1jcHkoaXdlLnUuYXBfYWRkci5zYV9kYXRhLCBic3MtPmJzc2lkLCBFVEhfQUxFTik7Ci0JY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCi0JCQkJCSAgJml3ZSwgSVdfRVZfQUREUl9MRU4pOwotCi0JLyogT3RoZXIgZW50cmllcyB3aWxsIGJlIGRpc3BsYXllZCBpbiB0aGUgb3JkZXIgd2UgZ2l2ZSB0aGVtICovCi0KLQkvKiBBZGQgdGhlIEVTU0lEICovCi0JaWUgPSBic3MtPmRhdGE7Ci0JaXdlLnUuZGF0YS5sZW5ndGggPSBpZVsxXTsKLQlpZiAoaXdlLnUuZGF0YS5sZW5ndGgpIHsKLQkJaWYgKGl3ZS51LmRhdGEubGVuZ3RoID4gMzIpCi0JCQlpd2UudS5kYXRhLmxlbmd0aCA9IDMyOwotCQlpd2UuY21kID0gU0lPQ0dJV0VTU0lEOwotCQlpd2UudS5kYXRhLmZsYWdzID0gMTsKLQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCi0JCQkJCQkgICZpd2UsICZpZVsyXSk7Ci0JfQotCi0JLyogQWRkIG1vZGUgKi8KLQljYXBhYmlsaXRpZXMgPSBsZTE2X3RvX2NwdShic3MtPmNhcGFiaWxpdGllcyk7Ci0JaWYgKGNhcGFiaWxpdGllcyAmIChXTEFOX0NBUEFCSUxJVFlfRVNTIHwgV0xBTl9DQVBBQklMSVRZX0lCU1MpKSB7Ci0JCWl3ZS5jbWQgPSBTSU9DR0lXTU9ERTsKLQkJaWYgKGNhcGFiaWxpdGllcyAmIFdMQU5fQ0FQQUJJTElUWV9FU1MpCi0JCQlpd2UudS5tb2RlID0gSVdfTU9ERV9NQVNURVI7Ci0JCWVsc2UKLQkJCWl3ZS51Lm1vZGUgPSBJV19NT0RFX0FESE9DOwotCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKLQkJCQkJCSAgJml3ZSwgSVdfRVZfVUlOVF9MRU4pOwotCX0KLQotCWllID0gb3Jpbm9jb19nZXRfaWUoYnNzLT5kYXRhLCBzaXplb2YoYnNzLT5kYXRhKSwgV0xBTl9FSURfRFNfUEFSQU1TKTsKLQljaGFubmVsID0gaWUgPyBpZVsyXSA6IDA7Ci0JaWYgKChjaGFubmVsID49IDEpICYmIChjaGFubmVsIDw9IE5VTV9DSEFOTkVMUykpIHsKLQkJLyogQWRkIGNoYW5uZWwgYW5kIGZyZXF1ZW5jeSAqLwotCQlpd2UuY21kID0gU0lPQ0dJV0ZSRVE7Ci0JCWl3ZS51LmZyZXEubSA9IGNoYW5uZWw7Ci0JCWl3ZS51LmZyZXEuZSA9IDA7Ci0JCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAotCQkJCQkJICAmaXdlLCBJV19FVl9GUkVRX0xFTik7Ci0KLQkJaXdlLnUuZnJlcS5tID0gY2hhbm5lbF9mcmVxdWVuY3lbY2hhbm5lbC0xXSAqIDEwMDAwMDsKLQkJaXdlLnUuZnJlcS5lID0gMTsKLQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCi0JCQkJCQkgICZpd2UsIElXX0VWX0ZSRVFfTEVOKTsKLQl9Ci0KLQkvKiBBZGQgcXVhbGl0eSBzdGF0aXN0aWNzLiBsZXZlbCBhbmQgbm9pc2UgaW4gZEIuIE5vIGxpbmsgcXVhbGl0eSAqLwotCWl3ZS5jbWQgPSBJV0VWUVVBTDsKLQlpd2UudS5xdWFsLnVwZGF0ZWQgPSBJV19RVUFMX0RCTSB8IElXX1FVQUxfUVVBTF9JTlZBTElEOwotCWl3ZS51LnF1YWwubGV2ZWwgPSBic3MtPmxldmVsIC0gMHg5NTsKLQlpd2UudS5xdWFsLm5vaXNlID0gYnNzLT5ub2lzZSAtIDB4OTU7Ci0JLyogV2lyZWxlc3MgdG9vbHMgcHJpb3IgdG8gMjcucHJlMjIgd2lsbCBzaG93IGxpbmsgcXVhbGl0eQotCSAqIGFueXdheSwgc28gd2UgcHJvdmlkZSBhIHJlYXNvbmFibGUgdmFsdWUuICovCi0JaWYgKGl3ZS51LnF1YWwubGV2ZWwgPiBpd2UudS5xdWFsLm5vaXNlKQotCQlpd2UudS5xdWFsLnF1YWwgPSBpd2UudS5xdWFsLmxldmVsIC0gaXdlLnUucXVhbC5ub2lzZTsKLQllbHNlCi0JCWl3ZS51LnF1YWwucXVhbCA9IDA7Ci0JY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCi0JCQkJCSAgJml3ZSwgSVdfRVZfUVVBTF9MRU4pOwotCi0JLyogQWRkIGVuY3J5cHRpb24gY2FwYWJpbGl0eSAqLwotCWl3ZS5jbWQgPSBTSU9DR0lXRU5DT0RFOwotCWlmIChjYXBhYmlsaXRpZXMgJiBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWSkKLQkJaXdlLnUuZGF0YS5mbGFncyA9IElXX0VOQ09ERV9FTkFCTEVEIHwgSVdfRU5DT0RFX05PS0VZOwotCWVsc2UKLQkJaXdlLnUuZGF0YS5mbGFncyA9IElXX0VOQ09ERV9ESVNBQkxFRDsKLQlpd2UudS5kYXRhLmxlbmd0aCA9IDA7Ci0JY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCi0JCQkJCSAgJml3ZSwgTlVMTCk7Ci0KLQkvKiBXUEEgSUUgKi8KLQlpZSA9IG9yaW5vY29fZ2V0X3dwYV9pZShic3MtPmRhdGEsIHNpemVvZihic3MtPmRhdGEpKTsKLQlpZiAoaWUpIHsKLQkJaXdlLmNtZCA9IElXRVZHRU5JRTsKLQkJaXdlLnUuZGF0YS5sZW5ndGggPSBpZVsxXSArIDI7Ci0JCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAotCQkJCQkJICAmaXdlLCBpZSk7Ci0JfQotCi0JLyogUlNOIElFICovCi0JaWUgPSBvcmlub2NvX2dldF9pZShic3MtPmRhdGEsIHNpemVvZihic3MtPmRhdGEpLCBXTEFOX0VJRF9SU04pOwotCWlmIChpZSkgewotCQlpd2UuY21kID0gSVdFVkdFTklFOwotCQlpd2UudS5kYXRhLmxlbmd0aCA9IGllWzFdICsgMjsKLQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCi0JCQkJCQkgICZpd2UsIGllKTsKLQl9Ci0KLQlpZSA9IG9yaW5vY29fZ2V0X2llKGJzcy0+ZGF0YSwgc2l6ZW9mKGJzcy0+ZGF0YSksIFdMQU5fRUlEX1NVUFBfUkFURVMpOwotCWlmIChpZSkgewotCQljaGFyICpwID0gY3VycmVudF9ldiArIGl3ZV9zdHJlYW1fbGNwX2xlbihpbmZvKTsKLQkJaW50IGk7Ci0KLQkJaXdlLmNtZCA9IFNJT0NHSVdSQVRFOwotCQkvKiBUaG9zZSB0d28gZmxhZ3MgYXJlIGlnbm9yZWQuLi4gKi8KLQkJaXdlLnUuYml0cmF0ZS5maXhlZCA9IGl3ZS51LmJpdHJhdGUuZGlzYWJsZWQgPSAwOwotCi0JCWZvciAoaSA9IDI7IGkgPCAoaWVbMV0gKyAyKTsgaSsrKSB7Ci0JCQlpd2UudS5iaXRyYXRlLnZhbHVlID0gKChpZVtpXSAmIDB4N0YpICogNTAwMDAwKTsKLQkJCXAgPSBpd2Vfc3RyZWFtX2FkZF92YWx1ZShpbmZvLCBjdXJyZW50X2V2LCBwLCBlbmRfYnVmLAotCQkJCQkJICZpd2UsIElXX0VWX1BBUkFNX0xFTik7Ci0JCX0KLQkJLyogQ2hlY2sgaWYgd2UgYWRkZWQgYW55IGV2ZW50ICovCi0JCWlmIChwID4gKGN1cnJlbnRfZXYgKyBpd2Vfc3RyZWFtX2xjcF9sZW4oaW5mbykpKQotCQkJY3VycmVudF9ldiA9IHA7Ci0JfQotCi0JLyogVGltZXN0YW1wICovCi0JaXdlLmNtZCA9IElXRVZDVVNUT007Ci0JaXdlLnUuZGF0YS5sZW5ndGggPQotCQlzbnByaW50ZihjdXN0b20sIE1BWF9DVVNUT01fTEVOLCAidHNmPSUwMTZsbHgiLAotCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpIGxlNjRfdG9fY3B1KGJzcy0+dGltZXN0YW1wKSk7Ci0JaWYgKGl3ZS51LmRhdGEubGVuZ3RoKQotCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKLQkJCQkJCSAgJml3ZSwgY3VzdG9tKTsKLQotCS8qIEJlYWNvbiBpbnRlcnZhbCAqLwotCWl3ZS5jbWQgPSBJV0VWQ1VTVE9NOwotCWl3ZS51LmRhdGEubGVuZ3RoID0gc25wcmludGYoY3VzdG9tLCBNQVhfQ1VTVE9NX0xFTiwKLQkJCQkgICAgICJiY25faW50PSVkIiwKLQkJCQkgICAgIGxlMTZfdG9fY3B1KGJzcy0+YmVhY29uX2ludGVydmFsKSk7Ci0JaWYgKGl3ZS51LmRhdGEubGVuZ3RoKQotCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKLQkJCQkJCSAgJml3ZSwgY3VzdG9tKTsKLQotCS8qIENhcGFiaWxpdGVzICovCi0JaXdlLmNtZCA9IElXRVZDVVNUT007Ci0JaXdlLnUuZGF0YS5sZW5ndGggPSBzbnByaW50ZihjdXN0b20sIE1BWF9DVVNUT01fTEVOLAotCQkJCSAgICAgImNhcGFiPTB4JTA0eCIsCi0JCQkJICAgICBjYXBhYmlsaXRpZXMpOwotCWlmIChpd2UudS5kYXRhLmxlbmd0aCkKLQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCi0JCQkJCQkgICZpd2UsIGN1c3RvbSk7Ci0KLQkvKiBBZGQgRVhUUkE6IEFnZSB0byBkaXNwbGF5IHNlY29uZHMgc2luY2UgbGFzdCBiZWFjb24vcHJvYmUgcmVzcG9uc2UKLQkgKiBmb3IgZ2l2ZW4gbmV0d29yay4gKi8KLQlpd2UuY21kID0gSVdFVkNVU1RPTTsKLQlpd2UudS5kYXRhLmxlbmd0aCA9IHNucHJpbnRmKGN1c3RvbSwgTUFYX0NVU1RPTV9MRU4sCi0JCQkJICAgICAiIExhc3QgYmVhY29uOiAlZG1zIGFnbyIsCi0JCQkJICAgICBqaWZmaWVzX3RvX21zZWNzKGppZmZpZXMgLSBsYXN0X3NjYW5uZWQpKTsKLQlpZiAoaXdlLnUuZGF0YS5sZW5ndGgpCi0JCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAotCQkJCQkJICAmaXdlLCBjdXN0b20pOwotCi0JcmV0dXJuIGN1cnJlbnRfZXY7Ci19Ci0KLS8qIFJldHVybiByZXN1bHRzIG9mIGEgc2NhbiAqLwotc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2dldHNjYW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgc3RydWN0IGl3X3BvaW50ICpzcnEsCi0JCQkJIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBlcnIgPSAwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JY2hhciAqY3VycmVudF9ldiA9IGV4dHJhOwotCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCXJldHVybiAtRUJVU1k7Ci0KLQlpZiAocHJpdi0+c2Nhbl9pbnByb2dyZXNzKSB7Ci0JCS8qIEltcG9ydGFudCBub3RlIDogd2UgZG9uJ3Qgd2FudCB0byBibG9jayB0aGUgY2FsbGVyCi0JCSAqIHVudGlsIHJlc3VsdHMgYXJlIHJlYWR5IGZvciB2YXJpb3VzIHJlYXNvbnMuCi0JCSAqIEZpcnN0LCBtYW5hZ2luZyB3YWl0IHF1ZXVlcyBpcyBjb21wbGV4IGFuZCByYWN5LgotCQkgKiBTZWNvbmQsIHdlIGdyYWIgc29tZSBydG5ldGxpbmsgbG9jayBiZWZvcmUgY29tbWluZwotCQkgKiBoZXJlIChpbiBkZXZfaW9jdGwoKSkuCi0JCSAqIFRoaXJkLCB3ZSBnZW5lcmF0ZSBhbiBXaXJlbGVzcyBFdmVudCwgc28gdGhlCi0JCSAqIGNhbGxlciBjYW4gd2FpdCBpdHNlbGYgb24gdGhhdCAtIEplYW4gSUkgKi8KLQkJZXJyID0gLUVBR0FJTjsKLQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKHByaXYtPmhhc19leHRfc2NhbikgewotCQlzdHJ1Y3QgeGJzc19lbGVtZW50ICpic3M7Ci0KLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShic3MsICZwcml2LT5ic3NfbGlzdCwgbGlzdCkgewotCQkJLyogVHJhbnNsYXRlIHRoaXMgZW50cnkgdG8gV0UgZm9ybWF0ICovCi0JCQljdXJyZW50X2V2ID0KLQkJCQlvcmlub2NvX3RyYW5zbGF0ZV9leHRfc2NhbihkZXYsIGluZm8sCi0JCQkJCQkJICAgY3VycmVudF9ldiwKLQkJCQkJCQkgICBleHRyYSArIHNycS0+bGVuZ3RoLAotCQkJCQkJCSAgICZic3MtPmJzcywKLQkJCQkJCQkgICBic3MtPmxhc3Rfc2Nhbm5lZCk7Ci0KLQkJCS8qIENoZWNrIGlmIHRoZXJlIGlzIHNwYWNlIGZvciBvbmUgbW9yZSBlbnRyeSAqLwotCQkJaWYgKChleHRyYSArIHNycS0+bGVuZ3RoIC0gY3VycmVudF9ldikKLQkJCSAgICA8PSBJV19FVl9BRERSX0xFTikgewotCQkJCS8qIEFzayB1c2VyIHNwYWNlIHRvIHRyeSBhZ2FpbiB3aXRoIGEKLQkJCQkgKiBiaWdnZXIgYnVmZmVyICovCi0JCQkJZXJyID0gLUUyQklHOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCQl9Ci0KLQl9IGVsc2UgewotCQlzdHJ1Y3QgYnNzX2VsZW1lbnQgKmJzczsKLQotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJzcywgJnByaXYtPmJzc19saXN0LCBsaXN0KSB7Ci0JCQkvKiBUcmFuc2xhdGUgdGhpcyBlbnRyeSB0byBXRSBmb3JtYXQgKi8KLQkJCWN1cnJlbnRfZXYgPSBvcmlub2NvX3RyYW5zbGF0ZV9zY2FuKGRldiwgaW5mbywKLQkJCQkJCQkgICAgY3VycmVudF9ldiwKLQkJCQkJCQkgICAgZXh0cmEgKyBzcnEtPmxlbmd0aCwKLQkJCQkJCQkgICAgJmJzcy0+YnNzLAotCQkJCQkJCSAgICBic3MtPmxhc3Rfc2Nhbm5lZCk7Ci0KLQkJCS8qIENoZWNrIGlmIHRoZXJlIGlzIHNwYWNlIGZvciBvbmUgbW9yZSBlbnRyeSAqLwotCQkJaWYgKChleHRyYSArIHNycS0+bGVuZ3RoIC0gY3VycmVudF9ldikKLQkJCSAgICA8PSBJV19FVl9BRERSX0xFTikgewotCQkJCS8qIEFzayB1c2VyIHNwYWNlIHRvIHRyeSBhZ2FpbiB3aXRoIGEKLQkJCQkgKiBiaWdnZXIgYnVmZmVyICovCi0JCQkJZXJyID0gLUUyQklHOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCQl9Ci0JfQotCi0Jc3JxLT5sZW5ndGggPSAoY3VycmVudF9ldiAtIGV4dHJhKTsKLQlzcnEtPmZsYWdzID0gKF9fdTE2KSBwcml2LT5zY2FuX21vZGU7Ci0KLW91dDoKLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCXJldHVybiBlcnI7Ci19Ci0KLS8qIENvbW1pdCBoYW5kbGVyLCBjYWxsZWQgYWZ0ZXIgc2V0IG9wZXJhdGlvbnMgKi8KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9jb21taXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCXZvaWQgKndycXUsCi0JCQkJY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IGhlcm1lcyAqaHcgPSAmcHJpdi0+aHc7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgZXJyID0gMDsKLQotCWlmICghcHJpdi0+b3BlbikKLQkJcmV0dXJuIDA7Ci0KLQlpZiAocHJpdi0+YnJva2VuX2Rpc2FibGVwb3J0KSB7Ci0JCW9yaW5vY29fcmVzZXQoJnByaXYtPnJlc2V0X3dvcmspOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKLQkJcmV0dXJuIGVycjsKLQotCWVyciA9IGhlcm1lc19kaXNhYmxlX3BvcnQoaHcsIDApOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFVuYWJsZSB0byBkaXNhYmxlIHBvcnQgIgotCQkgICAgICAgIndoaWxlIHJlY29uZmlndXJpbmcgY2FyZFxuIiwgZGV2LT5uYW1lKTsKLQkJcHJpdi0+YnJva2VuX2Rpc2FibGVwb3J0ID0gMTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JZXJyID0gX19vcmlub2NvX3Byb2dyYW1fcmlkcyhkZXYpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFVuYWJsZSB0byByZWNvbmZpZ3VyZSBjYXJkXG4iLAotCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JZXJyID0gaGVybWVzX2VuYWJsZV9wb3J0KGh3LCAwKTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBVbmFibGUgdG8gZW5hYmxlIHBvcnQgd2hpbGUgcmVjb25maWd1cmluZyBjYXJkXG4iLAotCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0gb3V0OgotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFJlc2V0dGluZyBpbnN0ZWFkLi4uXG4iLCBkZXYtPm5hbWUpOwotCQlzY2hlZHVsZV93b3JrKCZwcml2LT5yZXNldF93b3JrKTsKLQkJZXJyID0gMDsKLQl9Ci0KLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaXdfcHJpdl9hcmdzIG9yaW5vY29fcHJpdnRhYltdID0gewotCXsgU0lPQ0lXRklSU1RQUklWICsgMHgwLCAwLCAwLCAiZm9yY2VfcmVzZXQiIH0sCi0JeyBTSU9DSVdGSVJTVFBSSVYgKyAweDEsIDAsIDAsICJjYXJkX3Jlc2V0IiB9LAotCXsgU0lPQ0lXRklSU1RQUklWICsgMHgyLCBJV19QUklWX1RZUEVfSU5UIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwKLQkgIDAsICJzZXRfcG9ydDMiIH0sCi0JeyBTSU9DSVdGSVJTVFBSSVYgKyAweDMsIDAsIElXX1BSSVZfVFlQRV9JTlQgfCBJV19QUklWX1NJWkVfRklYRUQgfCAxLAotCSAgImdldF9wb3J0MyIgfSwKLQl7IFNJT0NJV0ZJUlNUUFJJViArIDB4NCwgSVdfUFJJVl9UWVBFX0lOVCB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDEsCi0JICAwLCAic2V0X3ByZWFtYmxlIiB9LAotCXsgU0lPQ0lXRklSU1RQUklWICsgMHg1LCAwLCBJV19QUklWX1RZUEVfSU5UIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwKLQkgICJnZXRfcHJlYW1ibGUiIH0sCi0JeyBTSU9DSVdGSVJTVFBSSVYgKyAweDYsIElXX1BSSVZfVFlQRV9JTlQgfCBJV19QUklWX1NJWkVfRklYRUQgfCAxLAotCSAgMCwgInNldF9pYnNzcG9ydCIgfSwKLQl7IFNJT0NJV0ZJUlNUUFJJViArIDB4NywgMCwgSVdfUFJJVl9UWVBFX0lOVCB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDEsCi0JICAiZ2V0X2lic3Nwb3J0IiB9LAotCXsgU0lPQ0lXRklSU1RQUklWICsgMHg5LCAwLCBJV19QUklWX1RZUEVfQllURSB8IE1BWF9SSURfTEVOLAotCSAgImdldF9yaWQiIH0sCi19OwotCi0KLS8qCi0gKiBTdHJ1Y3R1cmVzIHRvIGV4cG9ydCB0aGUgV2lyZWxlc3MgSGFuZGxlcnMKLSAqLwotCi0jZGVmaW5lIFNURF9JV19IQU5ETEVSKGlkLCBmdW5jKSBcCi0JW0lXX0lPQ1RMX0lEWChpZCldID0gKGl3X2hhbmRsZXIpIGZ1bmMKLXN0YXRpYyBjb25zdCBpd19oYW5kbGVyCW9yaW5vY29faGFuZGxlcltdID0gewotCVNURF9JV19IQU5ETEVSKFNJT0NTSVdDT01NSVQsCW9yaW5vY29faW9jdGxfY29tbWl0KSwKLQlTVERfSVdfSEFORExFUihTSU9DR0lXTkFNRSwJb3Jpbm9jb19pb2N0bF9nZXRuYW1lKSwKLQlTVERfSVdfSEFORExFUihTSU9DU0lXRlJFUSwJb3Jpbm9jb19pb2N0bF9zZXRmcmVxKSwKLQlTVERfSVdfSEFORExFUihTSU9DR0lXRlJFUSwJb3Jpbm9jb19pb2N0bF9nZXRmcmVxKSwKLQlTVERfSVdfSEFORExFUihTSU9DU0lXTU9ERSwJb3Jpbm9jb19pb2N0bF9zZXRtb2RlKSwKLQlTVERfSVdfSEFORExFUihTSU9DR0lXTU9ERSwJb3Jpbm9jb19pb2N0bF9nZXRtb2RlKSwKLQlTVERfSVdfSEFORExFUihTSU9DU0lXU0VOUywJb3Jpbm9jb19pb2N0bF9zZXRzZW5zKSwKLQlTVERfSVdfSEFORExFUihTSU9DR0lXU0VOUywJb3Jpbm9jb19pb2N0bF9nZXRzZW5zKSwKLQlTVERfSVdfSEFORExFUihTSU9DR0lXUkFOR0UsCW9yaW5vY29faW9jdGxfZ2V0aXdyYW5nZSksCi0JU1REX0lXX0hBTkRMRVIoU0lPQ1NJV1NQWSwJaXdfaGFuZGxlcl9zZXRfc3B5KSwKLQlTVERfSVdfSEFORExFUihTSU9DR0lXU1BZLAlpd19oYW5kbGVyX2dldF9zcHkpLAotCVNURF9JV19IQU5ETEVSKFNJT0NTSVdUSFJTUFksCWl3X2hhbmRsZXJfc2V0X3RocnNweSksCi0JU1REX0lXX0hBTkRMRVIoU0lPQ0dJV1RIUlNQWSwJaXdfaGFuZGxlcl9nZXRfdGhyc3B5KSwKLQlTVERfSVdfSEFORExFUihTSU9DU0lXQVAsCW9yaW5vY29faW9jdGxfc2V0d2FwKSwKLQlTVERfSVdfSEFORExFUihTSU9DR0lXQVAsCW9yaW5vY29faW9jdGxfZ2V0d2FwKSwKLQlTVERfSVdfSEFORExFUihTSU9DU0lXU0NBTiwJb3Jpbm9jb19pb2N0bF9zZXRzY2FuKSwKLQlTVERfSVdfSEFORExFUihTSU9DR0lXU0NBTiwJb3Jpbm9jb19pb2N0bF9nZXRzY2FuKSwKLQlTVERfSVdfSEFORExFUihTSU9DU0lXRVNTSUQsCW9yaW5vY29faW9jdGxfc2V0ZXNzaWQpLAotCVNURF9JV19IQU5ETEVSKFNJT0NHSVdFU1NJRCwJb3Jpbm9jb19pb2N0bF9nZXRlc3NpZCksCi0JU1REX0lXX0hBTkRMRVIoU0lPQ1NJV05JQ0tOLAlvcmlub2NvX2lvY3RsX3NldG5pY2spLAotCVNURF9JV19IQU5ETEVSKFNJT0NHSVdOSUNLTiwJb3Jpbm9jb19pb2N0bF9nZXRuaWNrKSwKLQlTVERfSVdfSEFORExFUihTSU9DU0lXUkFURSwJb3Jpbm9jb19pb2N0bF9zZXRyYXRlKSwKLQlTVERfSVdfSEFORExFUihTSU9DR0lXUkFURSwJb3Jpbm9jb19pb2N0bF9nZXRyYXRlKSwKLQlTVERfSVdfSEFORExFUihTSU9DU0lXUlRTLAlvcmlub2NvX2lvY3RsX3NldHJ0cyksCi0JU1REX0lXX0hBTkRMRVIoU0lPQ0dJV1JUUywJb3Jpbm9jb19pb2N0bF9nZXRydHMpLAotCVNURF9JV19IQU5ETEVSKFNJT0NTSVdGUkFHLAlvcmlub2NvX2lvY3RsX3NldGZyYWcpLAotCVNURF9JV19IQU5ETEVSKFNJT0NHSVdGUkFHLAlvcmlub2NvX2lvY3RsX2dldGZyYWcpLAotCVNURF9JV19IQU5ETEVSKFNJT0NHSVdSRVRSWSwJb3Jpbm9jb19pb2N0bF9nZXRyZXRyeSksCi0JU1REX0lXX0hBTkRMRVIoU0lPQ1NJV0VOQ09ERSwJb3Jpbm9jb19pb2N0bF9zZXRpd2VuY29kZSksCi0JU1REX0lXX0hBTkRMRVIoU0lPQ0dJV0VOQ09ERSwJb3Jpbm9jb19pb2N0bF9nZXRpd2VuY29kZSksCi0JU1REX0lXX0hBTkRMRVIoU0lPQ1NJV1BPV0VSLAlvcmlub2NvX2lvY3RsX3NldHBvd2VyKSwKLQlTVERfSVdfSEFORExFUihTSU9DR0lXUE9XRVIsCW9yaW5vY29faW9jdGxfZ2V0cG93ZXIpLAotCVNURF9JV19IQU5ETEVSKFNJT0NTSVdHRU5JRSwJb3Jpbm9jb19pb2N0bF9zZXRfZ2VuaWUpLAotCVNURF9JV19IQU5ETEVSKFNJT0NHSVdHRU5JRSwJb3Jpbm9jb19pb2N0bF9nZXRfZ2VuaWUpLAotCVNURF9JV19IQU5ETEVSKFNJT0NTSVdNTE1FLAlvcmlub2NvX2lvY3RsX3NldF9tbG1lKSwKLQlTVERfSVdfSEFORExFUihTSU9DU0lXQVVUSCwJb3Jpbm9jb19pb2N0bF9zZXRfYXV0aCksCi0JU1REX0lXX0hBTkRMRVIoU0lPQ0dJV0FVVEgsCW9yaW5vY29faW9jdGxfZ2V0X2F1dGgpLAotCVNURF9JV19IQU5ETEVSKFNJT0NTSVdFTkNPREVFWFQsIG9yaW5vY29faW9jdGxfc2V0X2VuY29kZWV4dCksCi0JU1REX0lXX0hBTkRMRVIoU0lPQ0dJV0VOQ09ERUVYVCwgb3Jpbm9jb19pb2N0bF9nZXRfZW5jb2RlZXh0KSwKLX07Ci0KLQotLyoKLSAgQWRkZWQgdHlwZWNhc3Rpbmcgc2luY2Ugd2Ugbm8gbG9uZ2VyIHVzZSBpd3JlcV9kYXRhIC0tIE1vdXN0YWZhCi0gKi8KLXN0YXRpYyBjb25zdCBpd19oYW5kbGVyCW9yaW5vY29fcHJpdmF0ZV9oYW5kbGVyW10gPSB7Ci0JWzBdID0gKGl3X2hhbmRsZXIpIG9yaW5vY29faW9jdGxfcmVzZXQsCi0JWzFdID0gKGl3X2hhbmRsZXIpIG9yaW5vY29faW9jdGxfcmVzZXQsCi0JWzJdID0gKGl3X2hhbmRsZXIpIG9yaW5vY29faW9jdGxfc2V0cG9ydDMsCi0JWzNdID0gKGl3X2hhbmRsZXIpIG9yaW5vY29faW9jdGxfZ2V0cG9ydDMsCi0JWzRdID0gKGl3X2hhbmRsZXIpIG9yaW5vY29faW9jdGxfc2V0cHJlYW1ibGUsCi0JWzVdID0gKGl3X2hhbmRsZXIpIG9yaW5vY29faW9jdGxfZ2V0cHJlYW1ibGUsCi0JWzZdID0gKGl3X2hhbmRsZXIpIG9yaW5vY29faW9jdGxfc2V0aWJzc3BvcnQsCi0JWzddID0gKGl3X2hhbmRsZXIpIG9yaW5vY29faW9jdGxfZ2V0aWJzc3BvcnQsCi0JWzldID0gKGl3X2hhbmRsZXIpIG9yaW5vY29faW9jdGxfZ2V0cmlkLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBpd19oYW5kbGVyX2RlZiBvcmlub2NvX2hhbmRsZXJfZGVmID0gewotCS5udW1fc3RhbmRhcmQgPSBBUlJBWV9TSVpFKG9yaW5vY29faGFuZGxlciksCi0JLm51bV9wcml2YXRlID0gQVJSQVlfU0laRShvcmlub2NvX3ByaXZhdGVfaGFuZGxlciksCi0JLm51bV9wcml2YXRlX2FyZ3MgPSBBUlJBWV9TSVpFKG9yaW5vY29fcHJpdnRhYiksCi0JLnN0YW5kYXJkID0gb3Jpbm9jb19oYW5kbGVyLAotCS5wcml2YXRlID0gb3Jpbm9jb19wcml2YXRlX2hhbmRsZXIsCi0JLnByaXZhdGVfYXJncyA9IG9yaW5vY29fcHJpdnRhYiwKLQkuZ2V0X3dpcmVsZXNzX3N0YXRzID0gb3Jpbm9jb19nZXRfd2lyZWxlc3Nfc3RhdHMsCi19OwotCi1zdGF0aWMgdm9pZCBvcmlub2NvX2dldF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqaW5mbykKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCXN0cm5jcHkoaW5mby0+ZHJpdmVyLCBEUklWRVJfTkFNRSwgc2l6ZW9mKGluZm8tPmRyaXZlcikgLSAxKTsKLQlzdHJuY3B5KGluZm8tPnZlcnNpb24sIERSSVZFUl9WRVJTSU9OLCBzaXplb2YoaW5mby0+dmVyc2lvbikgLSAxKTsKLQlzdHJuY3B5KGluZm8tPmZ3X3ZlcnNpb24sIHByaXYtPmZ3X25hbWUsIHNpemVvZihpbmZvLT5md192ZXJzaW9uKSAtIDEpOwotCWlmIChkZXYtPmRldi5wYXJlbnQpCi0JCXN0cm5jcHkoaW5mby0+YnVzX2luZm8sIGRldl9uYW1lKGRldi0+ZGV2LnBhcmVudCksCi0JCQlzaXplb2YoaW5mby0+YnVzX2luZm8pIC0gMSk7Ci0JZWxzZQotCQlzbnByaW50ZihpbmZvLT5idXNfaW5mbywgc2l6ZW9mKGluZm8tPmJ1c19pbmZvKSAtIDEsCi0JCQkgIlBDTUNJQSAlcCIsIHByaXYtPmh3LmlvYmFzZSk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgb3Jpbm9jb19ldGh0b29sX29wcyA9IHsKLQkuZ2V0X2RydmluZm8gPSBvcmlub2NvX2dldF9kcnZpbmZvLAotCS5nZXRfbGluayA9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCi19OwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBNb2R1bGUgaW5pdGlhbGl6YXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLUVYUE9SVF9TWU1CT0woYWxsb2Nfb3Jpbm9jb2Rldik7Ci1FWFBPUlRfU1lNQk9MKGZyZWVfb3Jpbm9jb2Rldik7Ci0KLUVYUE9SVF9TWU1CT0woX19vcmlub2NvX3VwKTsKLUVYUE9SVF9TWU1CT0woX19vcmlub2NvX2Rvd24pOwotRVhQT1JUX1NZTUJPTChvcmlub2NvX3JlaW5pdF9maXJtd2FyZSk7Ci0KLUVYUE9SVF9TWU1CT0wob3Jpbm9jb19pbnRlcnJ1cHQpOwotCi0vKiBDYW4ndCBiZSBkZWNsYXJlZCAiY29uc3QiIG9yIHRoZSB3aG9sZSBfX2luaXRkYXRhIHNlY3Rpb24gd2lsbAotICogYmVjb21lIGNvbnN0ICovCi1zdGF0aWMgY2hhciB2ZXJzaW9uW10gX19pbml0ZGF0YSA9IERSSVZFUl9OQU1FICIgIiBEUklWRVJfVkVSU0lPTgotCSIgKERhdmlkIEdpYnNvbiA8aGVybWVzQGdpYnNvbi5kcm9wYmVhci5pZC5hdT4sICIKLQkiUGF2ZWwgUm9za2luIDxwcm9za2lAZ251Lm9yZz4sIGV0IGFsKSI7Ci0KLXN0YXRpYyBpbnQgX19pbml0IGluaXRfb3Jpbm9jbyh2b2lkKQotewotCXByaW50ayhLRVJOX0RFQlVHICIlc1xuIiwgdmVyc2lvbik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBleGl0X29yaW5vY28odm9pZCkKLXsKLX0KLQotbW9kdWxlX2luaXQoaW5pdF9vcmlub2NvKTsKLW1vZHVsZV9leGl0KGV4aXRfb3Jpbm9jbyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY28uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jby5oCmluZGV4IDAwNzUwYzguLjhlNWE3MmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jby5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jby5oCkBAIC0xLDUgKzEsNSBAQAogLyogb3Jpbm9jby5oCi0gKiAKKyAqCiAgKiBDb21tb24gZGVmaW5pdGlvbnMgdG8gYWxsIHBpZWNlcyBvZiB0aGUgdmFyaW91cyBvcmlub2NvCiAgKiBkcml2ZXJzCiAgKi8KQEAgLTE4LDkgKzE4LDkgQEAKICNpbmNsdWRlICJoZXJtZXMuaCIKIAogLyogVG8gZW5hYmxlIGRlYnVnIG1lc3NhZ2VzICovCi0vLyNkZWZpbmUgT1JJTk9DT19ERUJVRwkJMworLyojZGVmaW5lIE9SSU5PQ09fREVCVUcJCTMqLwogCi0jZGVmaW5lIFdJUkVMRVNTX1NQWQkJLy8gZW5hYmxlIGl3c3B5IHN1cHBvcnQKKyNkZWZpbmUgV0lSRUxFU1NfU1BZCQkvKiBlbmFibGUgaXdzcHkgc3VwcG9ydCAqLwogCiAjZGVmaW5lIE1BWF9TQ0FOX0xFTgkJNDA5NgogCkBAIC01OSwxNCArNTksNiBAQAogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIH07CiAKLXN0cnVjdCBoZXJtZXNfcnhfZGVzY3JpcHRvcjsKLQotc3RydWN0IG9yaW5vY29fcnhfZGF0YSB7Ci0Jc3RydWN0IGhlcm1lc19yeF9kZXNjcmlwdG9yICpkZXNjOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotfTsKLQogc3RydWN0IGZpcm13YXJlOwogCiBzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlIHsKQEAgLTgzLDcgKzc1LDYgQEAKIAkvKiBJbnRlcnJ1cHQgdGFza2xldHMgKi8KIAlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgcnhfdGFza2xldDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHJ4X2xpc3Q7Ci0Jc3RydWN0IG9yaW5vY29fcnhfZGF0YSAqcnhfZGF0YTsKIAogCS8qIGRyaXZlciBzdGF0ZSAqLwogCWludCBvcGVuOwpAQCAtMTMwLDcgKzEyMSw3IEBACiAJdTE2IGVuY29kZV9hbGcsIHdlcF9yZXN0cmljdCwgdHhfa2V5OwogCXN0cnVjdCBvcmlub2NvX2tleSBrZXlzW09SSU5PQ09fTUFYX0tFWVNdOwogCWludCBiaXRyYXRlbW9kZTsKLSAJY2hhciBuaWNrW0lXX0VTU0lEX01BWF9TSVpFKzFdOworCWNoYXIgbmlja1tJV19FU1NJRF9NQVhfU0laRSsxXTsKIAljaGFyIGRlc2lyZWRfZXNzaWRbSVdfRVNTSURfTUFYX1NJWkUrMV07CiAJY2hhciBkZXNpcmVkX2Jzc2lkW0VUSF9BTEVOXTsKIAlpbnQgYnNzaWRfZml4ZWQ7CkBAIC0xNDAsNyArMTMxLDcgQEAKIAl1MTYgcG1fb24sIHBtX21jYXN0LCBwbV9wZXJpb2QsIHBtX3RpbWVvdXQ7CiAJdTE2IHByZWFtYmxlOwogI2lmZGVmIFdJUkVMRVNTX1NQWQotIAlzdHJ1Y3QgaXdfc3B5X2RhdGEgc3B5X2RhdGE7IC8qIGl3c3B5IHN1cHBvcnQgKi8KKwlzdHJ1Y3QgaXdfc3B5X2RhdGEgc3B5X2RhdGE7IC8qIGl3c3B5IHN1cHBvcnQgKi8KIAlzdHJ1Y3QgaXdfcHVibGljX2RhdGEJd2lyZWxlc3NfZGF0YTsKICNlbmRpZgogCkBAIC0xNjgsMTYgKzE1OSwyMSBAQAogCXVuc2lnbmVkIGludCB0a2lwX2NtX2FjdGl2ZToxOwogCXVuc2lnbmVkIGludCBrZXlfbWdtdDozOwogCisjaWYgZGVmaW5lZChDT05GSUdfSEVSTUVTX0NBQ0hFX0ZXX09OX0lOSVQpIHx8IGRlZmluZWQoQ09ORklHX1BNX1NMRUVQKQogCS8qIENhY2hlZCBpbiBtZW1vcnkgZmlybXdhcmUgdG8gdXNlIGR1cmluZyAtPnJlc3VtZS4gKi8KIAljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmNhY2hlZF9wcmlfZnc7CiAJY29uc3Qgc3RydWN0IGZpcm13YXJlICpjYWNoZWRfZnc7CisjZW5kaWYKIAogCXN0cnVjdCBub3RpZmllcl9ibG9jayBwbV9ub3RpZmllcjsKIH07CiAKICNpZmRlZiBPUklOT0NPX0RFQlVHCiBleHRlcm4gaW50IG9yaW5vY29fZGVidWc7Ci0jZGVmaW5lIERFQlVHKG4sIGFyZ3MuLi4pIGRvIHsgaWYgKG9yaW5vY29fZGVidWc+KG4pKSBwcmludGsoS0VSTl9ERUJVRyBhcmdzKTsgfSB3aGlsZSgwKQorI2RlZmluZSBERUJVRyhuLCBhcmdzLi4uKSBkbyB7IFwKKwlpZiAob3Jpbm9jb19kZWJ1ZyA+IChuKSkgXAorCQlwcmludGsoS0VSTl9ERUJVRyBhcmdzKTsgXAorfSB3aGlsZSAoMCkKICNlbHNlCiAjZGVmaW5lIERFQlVHKG4sIGFyZ3MuLi4pIGRvIHsgfSB3aGlsZSAoMCkKICNlbmRpZgkvKiBPUklOT0NPX0RFQlVHICovCkBAIC0xOTQsNyArMTkwLDcgQEAKIGV4dGVybiBpbnQgX19vcmlub2NvX3VwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogZXh0ZXJuIGludCBfX29yaW5vY29fZG93bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIGV4dGVybiBpbnQgb3Jpbm9jb19yZWluaXRfZmlybXdhcmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1leHRlcm4gaXJxcmV0dXJuX3Qgb3Jpbm9jb19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqIGRldl9pZCk7CitleHRlcm4gaXJxcmV0dXJuX3Qgb3Jpbm9jb19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogTG9ja2luZyBhbmQgc3luY2hyb25pemF0aW9uIGZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX2NzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fY3MuYwppbmRleCAwYjMyMjE1Li5iMzgxYWVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fY3MuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fY3MuYwpAQCAtNiw4ICs2LDggQEAKICAqIEl0IHNob3VsZCBhbHNvIGJlIHVzYWJsZSBvbiB2YXJpb3VzIFByaXNtIElJIGJhc2VkIGNhcmRzIHN1Y2ggYXMgdGhlCiAgKiBMaW5rc3lzLCBELUxpbmsgYW5kIEZhcmFsbG9uIFNreWxpbmUuIEl0IHNob3VsZCBhbHNvIHdvcmsgb24gU3ltYm9sCiAgKiBjYXJkcyBzdWNoIGFzIHRoZSAzQ29tIEFpckNvbm5lY3QgYW5kIEVyaWNzc29uIFdMQU4uCi0gKiAKLSAqIENvcHlyaWdodCBub3RpY2UgJiByZWxlYXNlIG5vdGVzIGluIGZpbGUgb3Jpbm9jby5jCisgKgorICogQ29weXJpZ2h0IG5vdGljZSAmIHJlbGVhc2Ugbm90ZXMgaW4gZmlsZSBtYWluLmMKICAqLwogCiAjZGVmaW5lIERSSVZFUl9OQU1FICJvcmlub2NvX2NzIgpAQCAtMzAsNyArMzAsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiBNT0RVTEVfQVVUSE9SKCJEYXZpZCBHaWJzb24gPGhlcm1lc0BnaWJzb24uZHJvcGJlYXIuaWQuYXU+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgUENNQ0lBIEx1Y2VudCBPcmlub2NvLCBQcmlzbSBJSSBiYXNlZCBhbmQgc2ltaWxhciB3aXJlbGVzcyBjYXJkcyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIFBDTUNJQSBMdWNlbnQgT3Jpbm9jbywiCisJCSAgICIgUHJpc20gSUkgYmFzZWQgYW5kIHNpbWlsYXIgd2lyZWxlc3MgY2FyZHMiKTsKIE1PRFVMRV9MSUNFTlNFKCJEdWFsIE1QTC9HUEwiKTsKIAogLyogTW9kdWxlIHBhcmFtZXRlcnMgKi8KQEAgLTUzLDggKzU0LDggQEAKIAogCS8qIFVzZWQgdG8gaGFuZGxlIGhhcmQgcmVzZXQgKi8KIAkvKiB5dWNrLCB3ZSBuZWVkIHRoaXMgaGFjayB0byB3b3JrIGFyb3VuZCB0aGUgaW5zYW5pdHkgb2YgdGhlCi0gICAgICAgICAqIFBDTUNJQSBsYXllciAqLwotCXVuc2lnbmVkIGxvbmcgaGFyZF9yZXNldF9pbl9wcm9ncmVzczsgCisJICogUENNQ0lBIGxheWVyICovCisJdW5zaWduZWQgbG9uZyBoYXJkX3Jlc2V0X2luX3Byb2dyZXNzOwogfTsKIAogCkBAIC05OCw3ICs5OSw3IEBACiAgKiBUaGlzIGNyZWF0ZXMgYW4gImluc3RhbmNlIiBvZiB0aGUgZHJpdmVyLCBhbGxvY2F0aW5nIGxvY2FsIGRhdGEKICAqIHN0cnVjdHVyZXMgZm9yIG9uZSBkZXZpY2UuICBUaGUgZGV2aWNlIGlzIHJlZ2lzdGVyZWQgd2l0aCBDYXJkCiAgKiBTZXJ2aWNlcy4KLSAqIAorICoKICAqIFRoZSBkZXZfbGluayBzdHJ1Y3R1cmUgaXMgaW5pdGlhbGl6ZWQsIGJ1dCB3ZSBkb24ndCBhY3R1YWxseQogICogY29uZmlndXJlIHRoZSBjYXJkIGF0IHRoaXMgcG9pbnQgLS0gd2Ugd2FpdCB1bnRpbCB3ZSByZWNlaXZlIGEgY2FyZAogICogaW5zZXJ0aW9uIGV2ZW50LiAgKi8KQEAgLTExMSw3ICsxMTIsNyBAQAogCiAJZGV2ID0gYWxsb2Nfb3Jpbm9jb2RldihzaXplb2YoKmNhcmQpLCAmaGFuZGxlX3RvX2RldihsaW5rKSwKIAkJCSAgICAgICBvcmlub2NvX2NzX2hhcmRfcmVzZXQsIE5VTEwpOwotCWlmICghIGRldikKKwlpZiAoIWRldikKIAkJcmV0dXJuIC1FTk9NRU07CiAJcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJY2FyZCA9IHByaXYtPmNhcmQ7CkBAIC0xMjQsNyArMTI1LDcgQEAKIAlsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0RZTkFNSUNfU0hBUklORyB8IElSUV9IQU5ETEVfUFJFU0VOVDsKIAlsaW5rLT5pcnEuSVJRSW5mbzEgPSBJUlFfTEVWRUxfSUQ7CiAJbGluay0+aXJxLkhhbmRsZXIgPSBvcmlub2NvX2ludGVycnVwdDsKLQlsaW5rLT5pcnEuSW5zdGFuY2UgPSBkZXY7IAorCWxpbmstPmlycS5JbnN0YW5jZSA9IGRldjsKIAogCS8qIEdlbmVyYWwgc29ja2V0IGNvbmZpZ3VyYXRpb24gZGVmYXVsdHMgY2FuIGdvIGhlcmUuICBJbiB0aGlzCiAJICogY2xpZW50LCB3ZSBhc3N1bWUgdmVyeSBsaXR0bGUsIGFuZCByZWx5IG9uIHRoZSBDSVMgZm9yCkBAIC0xNjIsOCArMTYzLDEwIEBACiAgKi8KIAogI2RlZmluZSBDU19DSEVDSyhmbiwgcmV0KSBkbyB7IFwKLQkJbGFzdF9mbiA9IChmbik7IGlmICgobGFzdF9yZXQgPSAocmV0KSkgIT0gMCkgZ290byBjc19mYWlsZWQ7IFwKLQl9IHdoaWxlICgwKQorCWxhc3RfZm4gPSAoZm4pOyBcCisJaWYgKChsYXN0X3JldCA9IChyZXQpKSAhPSAwKSBcCisJCWdvdG8gY3NfZmFpbGVkOyBcCit9IHdoaWxlICgwKQogCiBzdGF0aWMgaW50IG9yaW5vY29fY3NfY29uZmlnX2NoZWNrKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwKIAkJCQkgICBjaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZmcsCkBAIC0zMDcsOCArMzEwLDggQEAKIAkgKiBpbml0aWFsaXplZCBhbmQgYXJyYW5nZWQgaW4gYSBsaW5rZWQgbGlzdCBhdCBsaW5rLT5kZXZfbm9kZS4gKi8KIAlzdHJjcHkoY2FyZC0+bm9kZS5kZXZfbmFtZSwgZGV2LT5uYW1lKTsKIAlsaW5rLT5kZXZfbm9kZSA9ICZjYXJkLT5ub2RlOyAvKiBsaW5rLT5kZXZfbm9kZSBiZWluZyBub24tTlVMTCBpcyBhbHNvCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VkIHRvIGluZGljYXRlIHRoYXQgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRfZGV2aWNlIGhhcyBiZWVuIHJlZ2lzdGVyZWQgKi8KKwkJCQkgICAgICAgKiB1c2VkIHRvIGluZGljYXRlIHRoYXQgdGhlCisJCQkJICAgICAgICogbmV0X2RldmljZSBoYXMgYmVlbiByZWdpc3RlcmVkICovCiAKIAkvKiBGaW5hbGx5LCByZXBvcnQgd2hhdCB3ZSd2ZSBkb25lICovCiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAiIERSSVZFUl9OQU1FICIgYXQgJXMsIGlycSAlZCwgaW8gIgpAQCAtMzU5LDcgKzM2Miw3IEBACiAJLyogVGhpcyBpcyBwcm9iYWJseSByYWN5LCBidXQgSSBjYW4ndCB0aGluayBvZgogCSAgIGEgYmV0dGVyIHdheSwgc2hvcnQgb2YgcmV3cml0aW5nIHRoZSBQQ01DSUEKIAkgICBsYXllciB0byBub3Qgc3VjayA6LSggKi8KLQlpZiAoISB0ZXN0X2JpdCgwLCAmY2FyZC0+aGFyZF9yZXNldF9pbl9wcm9ncmVzcykpIHsKKwlpZiAoIXRlc3RfYml0KDAsICZjYXJkLT5oYXJkX3Jlc2V0X2luX3Byb2dyZXNzKSkgewogCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCiAJCWVyciA9IF9fb3Jpbm9jb19kb3duKGRldik7CkBAIC0zODQsNyArMzg3LDcgQEAKIAlpbnQgZXJyID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaWYgKCEgdGVzdF9iaXQoMCwgJmNhcmQtPmhhcmRfcmVzZXRfaW5fcHJvZ3Jlc3MpKSB7CisJaWYgKCF0ZXN0X2JpdCgwLCAmY2FyZC0+aGFyZF9yZXNldF9pbl9wcm9ncmVzcykpIHsKIAkJZXJyID0gb3Jpbm9jb19yZWluaXRfZmlybXdhcmUoZGV2KTsKIAkJaWYgKGVycikgewogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgcmUtaW5pdGlhbGl6aW5nIGZpcm13YXJlXG4iLApAQCAtMzk3LDcgKzQwMCw3IEBACiAJCW5ldGlmX2RldmljZV9hdHRhY2goZGV2KTsKIAkJcHJpdi0+aHdfdW5hdmFpbGFibGUtLTsKIAotCQlpZiAocHJpdi0+b3BlbiAmJiAhIHByaXYtPmh3X3VuYXZhaWxhYmxlKSB7CisJCWlmIChwcml2LT5vcGVuICYmICFwcml2LT5od191bmF2YWlsYWJsZSkgewogCQkJZXJyID0gX19vcmlub2NvX3VwKGRldik7CiAJCQlpZiAoZXJyKQogCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHJlc3RhcnRpbmcgY2FyZFxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb19ub3J0ZWwuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb19ub3J0ZWwuYwppbmRleCAyZmM4NjU5Li5iMDE3MjYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fbm9ydGVsLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX25vcnRlbC5jCkBAIC05LDEyICs5LDEyIEBACiAgKgogICogU29tZSBvZiB0aGlzIGNvZGUgaXMgYm9ycm93ZWQgZnJvbSBvcmlub2NvX3BseC5jCiAgKglDb3B5cmlnaHQgKEMpIDIwMDEgRGFuaWVsIEJhcmxvdwotICogU29tZSBvZiB0aGlzIGNvZGUgaXMgYm9ycm93ZWQgZnJvbSBvcmlub2NvX3BjaS5jIAorICogU29tZSBvZiB0aGlzIGNvZGUgaXMgYm9ycm93ZWQgZnJvbSBvcmlub2NvX3BjaS5jCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIEplYW4gVG91cnJpbGhlcwogICogU29tZSBvZiB0aGlzIGNvZGUgaXMgImluc3BpcmVkIiBieSBsaW51eC13bGFuLW5nLTAuMS4xMCwgYnV0IG5vdGhpbmcKICAqIGhhcyBiZWVuIGNvcGllZCBmcm9tIGl0LiBsaW51eC13bGFuLW5nLTAuMS4xMCBpcyBvcmlnaW5hbGx5IDoKICAqCUNvcHlyaWdodCAoQykgMTk5OSBBYnNvbHV0ZVZhbHVlIFN5c3RlbXMsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiAKKyAqCiAgKiBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlCiAgKiBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluCiAgKiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZQpAQCAtMTAzLDkgKzEwMyw4IEBACiAJaW93cml0ZTE2KDB4OCwgY2FyZC0+YnJpZGdlX2lvICsgMik7CiAJZm9yIChpID0gMDsgaSA8IDMwOyBpKyspIHsKIAkJbWRlbGF5KDMwKTsKLQkJaWYgKGlvcmVhZDE2KGNhcmQtPmJyaWRnZV9pbykgJiAweDEwKSB7CisJCWlmIChpb3JlYWQxNihjYXJkLT5icmlkZ2VfaW8pICYgMHgxMCkKIAkJCWJyZWFrOwotCQl9CiAJfQogCWlmIChpID09IDMwKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggImJyZzEgdGltZWQgb3V0XG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb19wY2kuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb19wY2kuYwppbmRleCA0ZWJkNjM4Li43OGNhZmZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fcGNpLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX3BjaS5jCkBAIC0xLDUgKzEsNSBAQAogLyogb3Jpbm9jb19wY2kuYwotICogCisgKgogICogRHJpdmVyIGZvciBQcmlzbSAyLjUvMyBkZXZpY2VzIHRoYXQgaGF2ZSBhIGRpcmVjdCBQQ0kgaW50ZXJmYWNlCiAgKiAoaS5lLiB0aGVzZSBhcmUgbm90IFBDTUNJQSBjYXJkcyBpbiBhIFBDTUNJQS10by1QQ0kgYnJpZGdlKS4KICAqIFRoZSBjYXJkIGNvbnRhaW5zIG9ubHkgb25lIFBDSSByZWdpb24sIHdoaWNoIGNvbnRhaW5zIGFsbCB0aGUgdXN1YWwKQEAgLTIzNyw3ICsyMzcsOCBAQAogCSIgKFBhdmVsIFJvc2tpbiA8cHJvc2tpQGdudS5vcmc+LCIKIAkiIERhdmlkIEdpYnNvbiA8aGVybWVzQGdpYnNvbi5kcm9wYmVhci5pZC5hdT4gJiIKIAkiIEplYW4gVG91cnJpbGhlcyA8anRAaHBsLmhwLmNvbT4pIjsKLU1PRFVMRV9BVVRIT1IoIlBhdmVsIFJvc2tpbiA8cHJvc2tpQGdudS5vcmc+ICYgRGF2aWQgR2lic29uIDxoZXJtZXNAZ2lic29uLmRyb3BiZWFyLmlkLmF1PiIpOworTU9EVUxFX0FVVEhPUigiUGF2ZWwgUm9za2luIDxwcm9za2lAZ251Lm9yZz4gJiIKKwkgICAgICAiIERhdmlkIEdpYnNvbiA8aGVybWVzQGdpYnNvbi5kcm9wYmVhci5pZC5hdT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciB3aXJlbGVzcyBMQU4gY2FyZHMgdXNpbmcgZGlyZWN0IFBDSSBpbnRlcmZhY2UiKTsKIE1PRFVMRV9MSUNFTlNFKCJEdWFsIE1QTC9HUEwiKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX3BjaS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX3BjaS5oCmluZGV4IGY0ZTVlMDYuLmM2NTViNGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb19wY2kuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fcGNpLmgKQEAgLTEsMTAgKzEsMTAgQEAKIC8qIG9yaW5vY29fcGNpLmgKLSAqIAorICoKICAqIENvbW1vbiBjb2RlIGZvciBhbGwgT3Jpbm9jbyBkcml2ZXJzIGZvciBQQ0kgZGV2aWNlcywgaW5jbHVkaW5nCiAgKiBib3RoIG5hdGl2ZSBQQ0kgYW5kIFBDTUNJQS10by1QQ0kgYnJpZGdlcy4KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIFBhdmVsIFJvc2tpbi4KLSAqIFNlZSBvcmlub2NvLmMgZm9yIGxpY2Vuc2UuCisgKiBTZWUgbWFpbi5jIGZvciBsaWNlbnNlLgogICovCiAKICNpZm5kZWYgX09SSU5PQ09fUENJX0gKQEAgLTM3LDExICszNywxMSBAQAogCWlmIChlcnIpCiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBlcnJvciAlZCBicmluZ2luZyBpbnRlcmZhY2UgZG93biAiCiAJCSAgICAgICAiZm9yIHN1c3BlbmRcbiIsIGRldi0+bmFtZSwgZXJyKTsKLQkKKwogCW5ldGlmX2RldmljZV9kZXRhY2goZGV2KTsKIAogCXByaXYtPmh3X3VuYXZhaWxhYmxlKys7Ci0JCisKIAlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwogCiAJZnJlZV9pcnEocGRldi0+aXJxLCBkZXYpOwpAQCAtOTAsMTMgKzkwLDEzIEBACiAKIAlwcml2LT5od191bmF2YWlsYWJsZS0tOwogCi0JaWYgKHByaXYtPm9wZW4gJiYgKCEgcHJpdi0+aHdfdW5hdmFpbGFibGUpKSB7CisJaWYgKHByaXYtPm9wZW4gJiYgKCFwcml2LT5od191bmF2YWlsYWJsZSkpIHsKIAkJZXJyID0gX19vcmlub2NvX3VwKGRldik7CiAJCWlmIChlcnIpCiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCByZXN0YXJ0aW5nIGNhcmQgb24gcmVzdW1lXG4iLAogCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKIAl9Ci0JCisKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb19wbHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb19wbHguYwppbmRleCBlZjc2MTg1Li5hMmE0NDcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fcGx4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX3BseC5jCkBAIC0xNDYsOSArMTQ2LDggQEAKIAl9OwogCiAJcHJpbnRrKEtFUk5fREVCVUcgUEZYICJDSVM6ICIpOwotCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCiAJCXByaW50aygiJTAyWDoiLCBpb3JlYWQ4KGNhcmQtPmF0dHJfaW8gKyAoaSA8PCAxKSkpOwotCX0KIAlwcmludGsoIlxuIik7CiAKIAkvKiBWZXJpZnkgd2hldGhlciBhIHN1cHBvcnRlZCBQQyBjYXJkIGlzIHByZXNlbnQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb190bWQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb190bWQuYwppbmRleCBlZGUyNGVjLi5jZGEwZTZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fdG1kLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX3RtZC5jCkBAIC0xLDcgKzEsNyBAQAogLyogb3Jpbm9jb190bWQuYwogICoKICAqIERyaXZlciBmb3IgUHJpc20gSUkgZGV2aWNlcyB3aGljaCB3b3VsZCB1c3VhbGx5IGJlIGRyaXZlbiBieSBvcmlub2NvX2NzLAotICogYnV0IGFyZSBjb25uZWN0ZWQgdG8gdGhlIFBDSSBidXMgYnkgYSBUTUQ3MTYwLiAKKyAqIGJ1dCBhcmUgY29ubmVjdGVkIHRvIHRoZSBQQ0kgYnVzIGJ5IGEgVE1ENzE2MC4KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDMgSm9lcmcgRG9yY2hhaW4gPGpvZXJnIEFUIGRvcmNoYWluLm5ldD4KICAqIGJhc2VkIGhlYXZpbHkgdXBvbiBvcmlub2NvX3BseC5jIENvcHlyaWdodCAoQykgMjAwMSBEYW5pZWwgQmFybG93CkBAIC0yNyw3ICsyNyw3IEBACiAgKiBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUKICAqIHVuZGVyIGVpdGhlciB0aGUgTVBMIG9yIHRoZSBHUEwuCiAgKgotICogVGhlIGFjdHVhbCBkcml2aW5nIGlzIGRvbmUgYnkgb3Jpbm9jby5jLCB0aGlzIGlzIGp1c3QgcmVzb3VyY2UKKyAqIFRoZSBhY3R1YWwgZHJpdmluZyBpcyBkb25lIGJ5IG1haW4uYywgdGhpcyBpcyBqdXN0IHJlc291cmNlCiAgKiBhbGxvY2F0aW9uIHN0dWZmLgogICoKICAqIFRoaXMgZHJpdmVyIGlzIG1vZGVsZWQgYWZ0ZXIgdGhlIG9yaW5vY29fcGx4IGRyaXZlci4gVGhlIG1haW4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vc2Nhbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9zY2FuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODlkNjk5ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vc2Nhbi5jCkBAIC0wLDAgKzEsMjMzIEBACisvKiBIZWxwZXJzIGZvciBtYW5hZ2luZyBzY2FuIHF1ZXVlcworICoKKyAqIFNlZSBjb3B5cmlnaHQgbm90aWNlIGluIG1haW4uYworICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorCisjaW5jbHVkZSAiaGVybWVzLmgiCisjaW5jbHVkZSAib3Jpbm9jby5oIgorCisjaW5jbHVkZSAic2Nhbi5oIgorCisjZGVmaW5lIE9SSU5PQ09fTUFYX0JTU19DT1VOVAk2NAorCisjZGVmaW5lIFBSSVZfQlNTCSgoc3RydWN0IGJzc19lbGVtZW50ICopcHJpdi0+YnNzX3hic3NfZGF0YSkKKyNkZWZpbmUgUFJJVl9YQlNTCSgoc3RydWN0IHhic3NfZWxlbWVudCAqKXByaXYtPmJzc194YnNzX2RhdGEpCisKK2ludCBvcmlub2NvX2Jzc19kYXRhX2FsbG9jYXRlKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCit7CisJaWYgKHByaXYtPmJzc194YnNzX2RhdGEpCisJCXJldHVybiAwOworCisJaWYgKHByaXYtPmhhc19leHRfc2NhbikKKwkJcHJpdi0+YnNzX3hic3NfZGF0YSA9IGt6YWxsb2MoT1JJTk9DT19NQVhfQlNTX0NPVU5UICoKKwkJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCB4YnNzX2VsZW1lbnQpLAorCQkJCQkgICAgICBHRlBfS0VSTkVMKTsKKwllbHNlCisJCXByaXYtPmJzc194YnNzX2RhdGEgPSBremFsbG9jKE9SSU5PQ09fTUFYX0JTU19DT1VOVCAqCisJCQkJCSAgICAgIHNpemVvZihzdHJ1Y3QgYnNzX2VsZW1lbnQpLAorCQkJCQkgICAgICBHRlBfS0VSTkVMKTsKKworCWlmICghcHJpdi0+YnNzX3hic3NfZGF0YSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJPdXQgb2YgbWVtb3J5IGFsbG9jYXRpbmcgYmVhY29ucyIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgb3Jpbm9jb19ic3NfZGF0YV9mcmVlKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCit7CisJa2ZyZWUocHJpdi0+YnNzX3hic3NfZGF0YSk7CisJcHJpdi0+YnNzX3hic3NfZGF0YSA9IE5VTEw7Cit9CisKK3ZvaWQgb3Jpbm9jb19ic3NfZGF0YV9pbml0KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCit7CisJaW50IGk7CisKKwlJTklUX0xJU1RfSEVBRCgmcHJpdi0+YnNzX2ZyZWVfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJnByaXYtPmJzc19saXN0KTsKKwlpZiAocHJpdi0+aGFzX2V4dF9zY2FuKQorCQlmb3IgKGkgPSAwOyBpIDwgT1JJTk9DT19NQVhfQlNTX0NPVU5UOyBpKyspCisJCQlsaXN0X2FkZF90YWlsKCYoUFJJVl9YQlNTW2ldLmxpc3QpLAorCQkJCSAgICAgICZwcml2LT5ic3NfZnJlZV9saXN0KTsKKwllbHNlCisJCWZvciAoaSA9IDA7IGkgPCBPUklOT0NPX01BWF9CU1NfQ09VTlQ7IGkrKykKKwkJCWxpc3RfYWRkX3RhaWwoJihQUklWX0JTU1tpXS5saXN0KSwKKwkJCQkgICAgICAmcHJpdi0+YnNzX2ZyZWVfbGlzdCk7CisKK30KKwordm9pZCBvcmlub2NvX2NsZWFyX3NjYW5fcmVzdWx0cyhzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LAorCQkJCXVuc2lnbmVkIGxvbmcgc2Nhbl9hZ2UpCit7CisJaWYgKHByaXYtPmhhc19leHRfc2NhbikgeworCQlzdHJ1Y3QgeGJzc19lbGVtZW50ICpic3M7CisJCXN0cnVjdCB4YnNzX2VsZW1lbnQgKnRtcF9ic3M7CisKKwkJLyogQmxvdyBhd2F5IGN1cnJlbnQgbGlzdCBvZiBzY2FuIHJlc3VsdHMgKi8KKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGJzcywgdG1wX2JzcywgJnByaXYtPmJzc19saXN0LCBsaXN0KSB7CisJCQlpZiAoIXNjYW5fYWdlIHx8CisJCQkgICAgdGltZV9hZnRlcihqaWZmaWVzLCBic3MtPmxhc3Rfc2Nhbm5lZCArIHNjYW5fYWdlKSkgeworCQkJCWxpc3RfbW92ZV90YWlsKCZic3MtPmxpc3QsCisJCQkJCSAgICAgICAmcHJpdi0+YnNzX2ZyZWVfbGlzdCk7CisJCQkJLyogRG9uJ3QgYmxvdyBhd2F5IC0+bGlzdCwganVzdCBCU1MgZGF0YSAqLworCQkJCW1lbXNldCgmYnNzLT5ic3MsIDAsIHNpemVvZihic3MtPmJzcykpOworCQkJCWJzcy0+bGFzdF9zY2FubmVkID0gMDsKKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCXN0cnVjdCBic3NfZWxlbWVudCAqYnNzOworCQlzdHJ1Y3QgYnNzX2VsZW1lbnQgKnRtcF9ic3M7CisKKwkJLyogQmxvdyBhd2F5IGN1cnJlbnQgbGlzdCBvZiBzY2FuIHJlc3VsdHMgKi8KKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGJzcywgdG1wX2JzcywgJnByaXYtPmJzc19saXN0LCBsaXN0KSB7CisJCQlpZiAoIXNjYW5fYWdlIHx8CisJCQkgICAgdGltZV9hZnRlcihqaWZmaWVzLCBic3MtPmxhc3Rfc2Nhbm5lZCArIHNjYW5fYWdlKSkgeworCQkJCWxpc3RfbW92ZV90YWlsKCZic3MtPmxpc3QsCisJCQkJCSAgICAgICAmcHJpdi0+YnNzX2ZyZWVfbGlzdCk7CisJCQkJLyogRG9uJ3QgYmxvdyBhd2F5IC0+bGlzdCwganVzdCBCU1MgZGF0YSAqLworCQkJCW1lbXNldCgmYnNzLT5ic3MsIDAsIHNpemVvZihic3MtPmJzcykpOworCQkJCWJzcy0+bGFzdF9zY2FubmVkID0gMDsKKwkJCX0KKwkJfQorCX0KK30KKwordm9pZCBvcmlub2NvX2FkZF9leHRfc2Nhbl9yZXN1bHQoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwKKwkJCQkgc3RydWN0IGFnZXJlX2V4dF9zY2FuX2luZm8gKmF0b20pCit7CisJc3RydWN0IHhic3NfZWxlbWVudCAqYnNzID0gTlVMTDsKKwlpbnQgZm91bmQgPSAwOworCisJLyogVHJ5IHRvIHVwZGF0ZSBhbiBleGlzdGluZyBic3MgZmlyc3QgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJzcywgJnByaXYtPmJzc19saXN0LCBsaXN0KSB7CisJCWlmIChjb21wYXJlX2V0aGVyX2FkZHIoYnNzLT5ic3MuYnNzaWQsIGF0b20tPmJzc2lkKSkKKwkJCWNvbnRpbnVlOworCQkvKiBFU1NJRCBsZW5ndGhzICovCisJCWlmIChic3MtPmJzcy5kYXRhWzFdICE9IGF0b20tPmRhdGFbMV0pCisJCQljb250aW51ZTsKKwkJaWYgKG1lbWNtcCgmYnNzLT5ic3MuZGF0YVsyXSwgJmF0b20tPmRhdGFbMl0sCisJCQkgICBhdG9tLT5kYXRhWzFdKSkKKwkJCWNvbnRpbnVlOworCQlmb3VuZCA9IDE7CisJCWJyZWFrOworCX0KKworCS8qIEdyYWIgYSBic3Mgb2ZmIHRoZSBmcmVlIGxpc3QgKi8KKwlpZiAoIWZvdW5kICYmICFsaXN0X2VtcHR5KCZwcml2LT5ic3NfZnJlZV9saXN0KSkgeworCQlic3MgPSBsaXN0X2VudHJ5KHByaXYtPmJzc19mcmVlX2xpc3QubmV4dCwKKwkJCQkgc3RydWN0IHhic3NfZWxlbWVudCwgbGlzdCk7CisJCWxpc3RfZGVsKHByaXYtPmJzc19mcmVlX2xpc3QubmV4dCk7CisKKwkJbGlzdF9hZGRfdGFpbCgmYnNzLT5saXN0LCAmcHJpdi0+YnNzX2xpc3QpOworCX0KKworCWlmIChic3MpIHsKKwkJLyogQWx3YXlzIHVwZGF0ZSB0aGUgQlNTIHRvIGdldCBsYXRlc3QgYmVhY29uIGluZm8gKi8KKwkJbWVtY3B5KCZic3MtPmJzcywgYXRvbSwgc2l6ZW9mKGJzcy0+YnNzKSk7CisJCWJzcy0+bGFzdF9zY2FubmVkID0gamlmZmllczsKKwl9Cit9CisKK2ludCBvcmlub2NvX3Byb2Nlc3Nfc2Nhbl9yZXN1bHRzKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsCisJCQkJIHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKwkJCQkgaW50IGxlbikKK3sKKwlpbnQJCQlvZmZzZXQ7CQkvKiBJbiB0aGUgc2NhbiBkYXRhICovCisJdW5pb24gaGVybWVzX3NjYW5faW5mbyAqYXRvbTsKKwlpbnQJCQlhdG9tX2xlbjsKKworCXN3aXRjaCAocHJpdi0+ZmlybXdhcmVfdHlwZSkgeworCWNhc2UgRklSTVdBUkVfVFlQRV9BR0VSRToKKwkJYXRvbV9sZW4gPSBzaXplb2Yoc3RydWN0IGFnZXJlX3NjYW5fYXBpbmZvKTsKKwkJb2Zmc2V0ID0gMDsKKwkJYnJlYWs7CisJY2FzZSBGSVJNV0FSRV9UWVBFX1NZTUJPTDoKKwkJLyogTGFjayBvZiBkb2N1bWVudGF0aW9uIG5lY2Vzc2l0YXRlcyB0aGlzIGhhY2suCisJCSAqIERpZmZlcmVudCBmaXJtd2FyZXMgaGF2ZSA2OCBvciA3NiBieXRlIGxvbmcgYXRvbXMuCisJCSAqIFdlIHRyeSBtb2R1bG8gZmlyc3QuICBJZiB0aGUgbGVuZ3RoIGRpdmlkZXMgYnkgYm90aCwKKwkJICogd2UgY2hlY2sgd2hhdCB3b3VsZCBiZSB0aGUgY2hhbm5lbCBpbiB0aGUgc2Vjb25kCisJCSAqIGZyYW1lIGZvciBhIDY4LWJ5dGUgYXRvbS4gIDc2LWJ5dGUgYXRvbXMgaGF2ZSAwIHRoZXJlLgorCQkgKiBWYWxpZCBjaGFubmVsIGNhbm5vdCBiZSAwLiAgKi8KKwkJaWYgKGxlbiAlIDc2KQorCQkJYXRvbV9sZW4gPSA2ODsKKwkJZWxzZSBpZiAobGVuICUgNjgpCisJCQlhdG9tX2xlbiA9IDc2OworCQllbHNlIGlmIChsZW4gPj0gMTI5MiAmJiBidWZbNjhdID09IDApCisJCQlhdG9tX2xlbiA9IDc2OworCQllbHNlCisJCQlhdG9tX2xlbiA9IDY4OworCQlvZmZzZXQgPSAwOworCQlicmVhazsKKwljYXNlIEZJUk1XQVJFX1RZUEVfSU5URVJTSUw6CisJCW9mZnNldCA9IDQ7CisJCWlmIChwcml2LT5oYXNfaG9zdHNjYW4pIHsKKwkJCWF0b21fbGVuID0gbGUxNl90b19jcHVwKChfX2xlMTYgKilidWYpOworCQkJLyogU2FuaXR5IGNoZWNrIGZvciBhdG9tX2xlbiAqLworCQkJaWYgKGF0b21fbGVuIDwgc2l6ZW9mKHN0cnVjdCBwcmlzbTJfc2Nhbl9hcGluZm8pKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICIlczogSW52YWxpZCBhdG9tX2xlbiBpbiBzY2FuICIKKwkJCQkgICAgICAgImRhdGE6ICVkXG4iLCBwcml2LT5uZGV2LT5uYW1lLAorCQkJCSAgICAgICBhdG9tX2xlbik7CisJCQkJcmV0dXJuIC1FSU87CisJCQl9CisJCX0gZWxzZQorCQkJYXRvbV9sZW4gPSBvZmZzZXRvZihzdHJ1Y3QgcHJpc20yX3NjYW5fYXBpbmZvLCBhdGltKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KKworCS8qIENoZWNrIHRoYXQgd2UgZ290IGFuIHdob2xlIG51bWJlciBvZiBhdG9tcyAqLworCWlmICgobGVuIC0gb2Zmc2V0KSAlIGF0b21fbGVuKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IFVuZXhwZWN0ZWQgc2NhbiBkYXRhIGxlbmd0aCAlZCwgIgorCQkgICAgICAgImF0b21fbGVuICVkLCBvZmZzZXQgJWRcbiIsIHByaXYtPm5kZXYtPm5hbWUsIGxlbiwKKwkJICAgICAgIGF0b21fbGVuLCBvZmZzZXQpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlvcmlub2NvX2NsZWFyX3NjYW5fcmVzdWx0cyhwcml2LCBtc2Vjc190b19qaWZmaWVzKDE1MDAwKSk7CisKKwkvKiBSZWFkIHRoZSBlbnRyaWVzIG9uZSBieSBvbmUgKi8KKwlmb3IgKDsgb2Zmc2V0ICsgYXRvbV9sZW4gPD0gbGVuOyBvZmZzZXQgKz0gYXRvbV9sZW4pIHsKKwkJaW50IGZvdW5kID0gMDsKKwkJc3RydWN0IGJzc19lbGVtZW50ICpic3MgPSBOVUxMOworCisJCS8qIEdldCBuZXh0IGF0b20gKi8KKwkJYXRvbSA9ICh1bmlvbiBoZXJtZXNfc2Nhbl9pbmZvICopIChidWYgKyBvZmZzZXQpOworCisJCS8qIFRyeSB0byB1cGRhdGUgYW4gZXhpc3RpbmcgYnNzIGZpcnN0ICovCisJCWxpc3RfZm9yX2VhY2hfZW50cnkoYnNzLCAmcHJpdi0+YnNzX2xpc3QsIGxpc3QpIHsKKwkJCWlmIChjb21wYXJlX2V0aGVyX2FkZHIoYnNzLT5ic3MuYS5ic3NpZCwgYXRvbS0+YS5ic3NpZCkpCisJCQkJY29udGludWU7CisJCQlpZiAobGUxNl90b19jcHUoYnNzLT5ic3MuYS5lc3NpZF9sZW4pICE9CisJCQkgICAgICBsZTE2X3RvX2NwdShhdG9tLT5hLmVzc2lkX2xlbikpCisJCQkJY29udGludWU7CisJCQlpZiAobWVtY21wKGJzcy0+YnNzLmEuZXNzaWQsIGF0b20tPmEuZXNzaWQsCisJCQkgICAgICBsZTE2X3RvX2NwdShhdG9tLT5hLmVzc2lkX2xlbikpKQorCQkJCWNvbnRpbnVlOworCQkJZm91bmQgPSAxOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBHcmFiIGEgYnNzIG9mZiB0aGUgZnJlZSBsaXN0ICovCisJCWlmICghZm91bmQgJiYgIWxpc3RfZW1wdHkoJnByaXYtPmJzc19mcmVlX2xpc3QpKSB7CisJCQlic3MgPSBsaXN0X2VudHJ5KHByaXYtPmJzc19mcmVlX2xpc3QubmV4dCwKKwkJCQkJIHN0cnVjdCBic3NfZWxlbWVudCwgbGlzdCk7CisJCQlsaXN0X2RlbChwcml2LT5ic3NfZnJlZV9saXN0Lm5leHQpOworCisJCQlsaXN0X2FkZF90YWlsKCZic3MtPmxpc3QsICZwcml2LT5ic3NfbGlzdCk7CisJCX0KKworCQlpZiAoYnNzKSB7CisJCQkvKiBBbHdheXMgdXBkYXRlIHRoZSBCU1MgdG8gZ2V0IGxhdGVzdCBiZWFjb24gaW5mbyAqLworCQkJbWVtY3B5KCZic3MtPmJzcywgYXRvbSwgc2l6ZW9mKGJzcy0+YnNzKSk7CisJCQlic3MtPmxhc3Rfc2Nhbm5lZCA9IGppZmZpZXM7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vc2Nhbi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9zY2FuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjMxOWY3NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vc2Nhbi5oCkBAIC0wLDAgKzEsMjkgQEAKKy8qIEhlbHBlcnMgZm9yIG1hbmFnaW5nIHNjYW4gcXVldWVzCisgKgorICogU2VlIGNvcHlyaWdodCBub3RpY2UgaW4gbWFpbi5jCisgKi8KKyNpZm5kZWYgX09SSU5PQ09fU0NBTl9IXworI2RlZmluZSBfT1JJTk9DT19TQ0FOX0hfCisKKy8qIEZvcndhcmQgZGVjbGFyYXRpb25zICovCitzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlOworc3RydWN0IGFnZXJlX2V4dF9zY2FuX2luZm87CisKKy8qIFNldHVwIGFuZCBmcmVlIG1lbW9yeSBmb3Igc2NhbiByZXN1bHRzICovCitpbnQgb3Jpbm9jb19ic3NfZGF0YV9hbGxvY2F0ZShzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KTsKK3ZvaWQgb3Jpbm9jb19ic3NfZGF0YV9mcmVlKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpOwordm9pZCBvcmlub2NvX2Jzc19kYXRhX2luaXQoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdik7CisKKy8qIEFkZCBzY2FuIHJlc3VsdHMgKi8KK3ZvaWQgb3Jpbm9jb19hZGRfZXh0X3NjYW5fcmVzdWx0KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsCisJCQkJIHN0cnVjdCBhZ2VyZV9leHRfc2Nhbl9pbmZvICphdG9tKTsKK2ludCBvcmlub2NvX3Byb2Nlc3Nfc2Nhbl9yZXN1bHRzKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKmRldiwKKwkJCQkgdW5zaWduZWQgY2hhciAqYnVmLAorCQkJCSBpbnQgbGVuKTsKKworLyogQ2xlYXIgc2NhbiByZXN1bHRzICovCit2b2lkIG9yaW5vY29fY2xlYXJfc2Nhbl9yZXN1bHRzKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsCisJCQkJdW5zaWduZWQgbG9uZyBzY2FuX2FnZSk7CisKKworI2VuZGlmIC8qIF9PUklOT0NPX1NDQU5fSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vc3BlY3RydW1fY3MuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vc3BlY3RydW1fY3MuYwppbmRleCBiMmNhMmUzLi4zOGU1MTk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL3NwZWN0cnVtX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9zcGVjdHJ1bV9jcy5jCkBAIC00LDcgKzQsNyBAQAogICogQ29tbXVuaWNhdGlvbnMgYW5kIEludGVsIFBSTy9XaXJlbGVzcyAyMDExQi4KICAqCiAgKiBUaGUgZHJpdmVyIGltcGxlbWVudHMgU3ltYm9sIGZpcm13YXJlIGRvd25sb2FkLiAgVGhlIHJlc3QgaXMgaGFuZGxlZAotICogaW4gaGVybWVzLmMgYW5kIG9yaW5vY28uYy4KKyAqIGluIGhlcm1lcy5jIGFuZCBtYWluLmMuCiAgKgogICogVXRpbGl0aWVzIGZvciBkb3dubG9hZGluZyB0aGUgU3ltYm9sIGZpcm13YXJlIGFyZSBhdmFpbGFibGUgYXQKICAqIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvb3Jpbm9jby8KQEAgLTE1LDcgKzE1LDcgQEAKICAqIFBvcnRpb25zIGJhc2VkIG9uIFNwZWN0cnVtMjR0RG5sZC5jIGZyb20gb3JpZ2luYWwgc3BlY3RydW0yNCBkcml2ZXI6CiAgKiAJQ29weXJpZ2h0IChDKSBTeW1ib2wgVGVjaG5vbG9naWVzLgogICoKLSAqIFNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGZpbGUgb3Jpbm9jby5jLgorICogU2VlIGNvcHlyaWdodCBub3RpY2UgaW4gZmlsZSBtYWluLmMuCiAgKi8KIAogI2RlZmluZSBEUklWRVJfTkFNRSAic3BlY3RydW1fY3MiCkBAIC0xMzMsNyArMTMzLDcgQEAKIAl1ZGVsYXkoMTAwMCk7CiAJcmV0dXJuIDA7CiAKLSAgICAgIGNzX2ZhaWxlZDoKK2NzX2ZhaWxlZDoKIAljc19lcnJvcihsaW5rLCBsYXN0X2ZuLCBsYXN0X3JldCk7CiAJcmV0dXJuIC1FTk9ERVY7CiB9CkBAIC0xNzEsNyArMTcxLDcgQEAKICAqIFRoaXMgY3JlYXRlcyBhbiAiaW5zdGFuY2UiIG9mIHRoZSBkcml2ZXIsIGFsbG9jYXRpbmcgbG9jYWwgZGF0YQogICogc3RydWN0dXJlcyBmb3Igb25lIGRldmljZS4gIFRoZSBkZXZpY2UgaXMgcmVnaXN0ZXJlZCB3aXRoIENhcmQKICAqIFNlcnZpY2VzLgotICogCisgKgogICogVGhlIGRldl9saW5rIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZCwgYnV0IHdlIGRvbid0IGFjdHVhbGx5CiAgKiBjb25maWd1cmUgdGhlIGNhcmQgYXQgdGhpcyBwb2ludCAtLSB3ZSB3YWl0IHVudGlsIHdlIHJlY2VpdmUgYSBjYXJkCiAgKiBpbnNlcnRpb24gZXZlbnQuICAqLwpAQCAtMTg1LDcgKzE4NSw3IEBACiAJZGV2ID0gYWxsb2Nfb3Jpbm9jb2RldihzaXplb2YoKmNhcmQpLCAmaGFuZGxlX3RvX2RldihsaW5rKSwKIAkJCSAgICAgICBzcGVjdHJ1bV9jc19oYXJkX3Jlc2V0LAogCQkJICAgICAgIHNwZWN0cnVtX2NzX3N0b3BfZmlybXdhcmUpOwotCWlmICghIGRldikKKwlpZiAoIWRldikKIAkJcmV0dXJuIC1FTk9NRU07CiAJcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJY2FyZCA9IHByaXYtPmNhcmQ7CkBAIC0xOTgsNyArMTk4LDcgQEAKIAlsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0RZTkFNSUNfU0hBUklORyB8IElSUV9IQU5ETEVfUFJFU0VOVDsKIAlsaW5rLT5pcnEuSVJRSW5mbzEgPSBJUlFfTEVWRUxfSUQ7CiAJbGluay0+aXJxLkhhbmRsZXIgPSBvcmlub2NvX2ludGVycnVwdDsKLQlsaW5rLT5pcnEuSW5zdGFuY2UgPSBkZXY7IAorCWxpbmstPmlycS5JbnN0YW5jZSA9IGRldjsKIAogCS8qIEdlbmVyYWwgc29ja2V0IGNvbmZpZ3VyYXRpb24gZGVmYXVsdHMgY2FuIGdvIGhlcmUuICBJbiB0aGlzCiAJICogY2xpZW50LCB3ZSBhc3N1bWUgdmVyeSBsaXR0bGUsIGFuZCByZWx5IG9uIHRoZSBDSVMgZm9yCkBAIC0zNjcsOSArMzY3LDggQEAKIAljYXJkLT5ub2RlLm1ham9yID0gY2FyZC0+bm9kZS5taW5vciA9IDA7CiAKIAkvKiBSZXNldCBjYXJkICovCi0JaWYgKHNwZWN0cnVtX2NzX2hhcmRfcmVzZXQocHJpdikgIT0gMCkgeworCWlmIChzcGVjdHJ1bV9jc19oYXJkX3Jlc2V0KHByaXYpICE9IDApCiAJCWdvdG8gZmFpbGVkOwotCX0KIAogCVNFVF9ORVRERVZfREVWKGRldiwgJmhhbmRsZV90b19kZXYobGluaykpOwogCS8qIFRlbGwgdGhlIHN0YWNrIHdlIGV4aXN0ICovCkBAIC0zODIsOCArMzgxLDggQEAKIAkgKiBpbml0aWFsaXplZCBhbmQgYXJyYW5nZWQgaW4gYSBsaW5rZWQgbGlzdCBhdCBsaW5rLT5kZXZfbm9kZS4gKi8KIAlzdHJjcHkoY2FyZC0+bm9kZS5kZXZfbmFtZSwgZGV2LT5uYW1lKTsKIAlsaW5rLT5kZXZfbm9kZSA9ICZjYXJkLT5ub2RlOyAvKiBsaW5rLT5kZXZfbm9kZSBiZWluZyBub24tTlVMTCBpcyBhbHNvCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VkIHRvIGluZGljYXRlIHRoYXQgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRfZGV2aWNlIGhhcyBiZWVuIHJlZ2lzdGVyZWQgKi8KKwkJCQkgICAgICAgKiB1c2VkIHRvIGluZGljYXRlIHRoYXQgdGhlCisJCQkJICAgICAgICogbmV0X2RldmljZSBoYXMgYmVlbiByZWdpc3RlcmVkICovCiAKIAkvKiBGaW5hbGx5LCByZXBvcnQgd2hhdCB3ZSd2ZSBkb25lICovCiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAiIERSSVZFUl9OQU1FICIgYXQgJXMsIGlycSAlZCwgaW8gIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby93ZXh0LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL3dleHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjA4MTQyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby93ZXh0LmMKQEAgLTAsMCArMSwyMzI1IEBACisvKiBXaXJlbGVzcyBleHRlbnNpb25zIHN1cHBvcnQuCisgKgorICogU2VlIGNvcHlyaWdodCBub3RpY2UgaW4gbWFpbi5jCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KKyNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2llZWU4MDIxMS5oPgorI2luY2x1ZGUgPG5ldC9pd19oYW5kbGVyLmg+CisKKyNpbmNsdWRlICJoZXJtZXMuaCIKKyNpbmNsdWRlICJoZXJtZXNfcmlkLmgiCisjaW5jbHVkZSAib3Jpbm9jby5oIgorCisjaW5jbHVkZSAiaHcuaCIKKyNpbmNsdWRlICJtaWMuaCIKKyNpbmNsdWRlICJzY2FuLmgiCisjaW5jbHVkZSAibWFpbi5oIgorCisjaW5jbHVkZSAid2V4dC5oIgorCisjZGVmaW5lIE1BWF9SSURfTEVOIDEwMjQKKworc3RhdGljIHN0cnVjdCBpd19zdGF0aXN0aWNzICpvcmlub2NvX2dldF93aXJlbGVzc19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKKwlzdHJ1Y3QgaXdfc3RhdGlzdGljcyAqd3N0YXRzID0gJnByaXYtPndzdGF0czsKKwlpbnQgZXJyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KGRldikpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGdldF93aXJlbGVzc19zdGF0cygpIGNhbGxlZCB3aGlsZSBkZXZpY2Ugbm90IHByZXNlbnRcbiIsCisJCSAgICAgICBkZXYtPm5hbWUpOworCQlyZXR1cm4gTlVMTDsgLyogRklYTUU6IENhbiB3ZSBkbyBiZXR0ZXIgdGhhbiB0aGlzPyAqLworCX0KKworCS8qIElmIGJ1c3ksIHJldHVybiB0aGUgb2xkIHN0YXRzLiAgUmV0dXJuaW5nIE5VTEwgbWF5IGNhdXNlCisJICogdGhlIGludGVyZmFjZSB0byBkaXNhcHBlYXIgZnJvbSAvcHJvYy9uZXQvd2lyZWxlc3MgKi8KKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJcmV0dXJuIHdzdGF0czsKKworCS8qIFdlIGNhbid0IHJlYWxseSB3YWl0IGZvciB0aGUgdGFsbGllcyBpbnF1aXJ5IGNvbW1hbmQgdG8KKwkgKiBjb21wbGV0ZSwgc28gd2UganVzdCB1c2UgdGhlIHByZXZpb3VzIHJlc3VsdHMgYW5kIHRyaWdnZXIKKwkgKiBhIG5ldyB0YWxsaWVzIGlucXVpcnkgY29tbWFuZCBmb3IgbmV4dCB0aW1lIC0gSmVhbiBJSSAqLworCS8qIEZJWE1FOiBSZWFsbHkgd2Ugc2hvdWxkIHdhaXQgZm9yIHRoZSBpbnF1aXJ5IHRvIGNvbWUgYmFjayAtCisJICogYXMgaXQgaXMgdGhlIHN0YXRzIHdlIGdpdmUgZG9uJ3QgbWFrZSBhIHdob2xlIGxvdCBvZiBzZW5zZS4KKwkgKiBVbmZvcnR1bmF0ZWx5LCBpdCdzIG5vdCBjbGVhciBob3cgdG8gZG8gdGhhdCB3aXRoaW4gdGhlCisJICogd2lyZWxlc3MgZXh0ZW5zaW9ucyBmcmFtZXdvcms6IEkgdGhpbmsgd2UncmUgaW4gdXNlcgorCSAqIGNvbnRleHQsIGJ1dCBhIGxvY2sgc2VlbXMgdG8gYmUgaGVsZCBieSB0aGUgdGltZSB3ZSBnZXQgaW4KKwkgKiBoZXJlIHNvIHdlJ3JlIG5vdCBzYWZlIHRvIHNsZWVwIGhlcmUuICovCisJaGVybWVzX2lucXVpcmUoaHcsIEhFUk1FU19JTlFfVEFMTElFUyk7CisKKwlpZiAocHJpdi0+aXdfbW9kZSA9PSBJV19NT0RFX0FESE9DKSB7CisJCW1lbXNldCgmd3N0YXRzLT5xdWFsLCAwLCBzaXplb2Yod3N0YXRzLT5xdWFsKSk7CisJCS8qIElmIGEgc3B5IGFkZHJlc3MgaXMgZGVmaW5lZCwgd2UgcmVwb3J0IHN0YXRzIG9mIHRoZQorCQkgKiBmaXJzdCBzcHkgYWRkcmVzcyAtIEplYW4gSUkgKi8KKwkJaWYgKFNQWV9OVU1CRVIocHJpdikpIHsKKwkJCXdzdGF0cy0+cXVhbC5xdWFsID0gcHJpdi0+c3B5X2RhdGEuc3B5X3N0YXRbMF0ucXVhbDsKKwkJCXdzdGF0cy0+cXVhbC5sZXZlbCA9IHByaXYtPnNweV9kYXRhLnNweV9zdGF0WzBdLmxldmVsOworCQkJd3N0YXRzLT5xdWFsLm5vaXNlID0gcHJpdi0+c3B5X2RhdGEuc3B5X3N0YXRbMF0ubm9pc2U7CisJCQl3c3RhdHMtPnF1YWwudXBkYXRlZCA9CisJCQkJcHJpdi0+c3B5X2RhdGEuc3B5X3N0YXRbMF0udXBkYXRlZDsKKwkJfQorCX0gZWxzZSB7CisJCXN0cnVjdCB7CisJCQlfX2xlMTYgcXVhbCwgc2lnbmFsLCBub2lzZSwgdW51c2VkOworCQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBjcTsKKworCQllcnIgPSBIRVJNRVNfUkVBRF9SRUNPUkQoaHcsIFVTRVJfQkFQLAorCQkJCQkgSEVSTUVTX1JJRF9DT01NU1FVQUxJVFksICZjcSk7CisKKwkJaWYgKCFlcnIpIHsKKwkJCXdzdGF0cy0+cXVhbC5xdWFsID0gKGludClsZTE2X3RvX2NwdShjcS5xdWFsKTsKKwkJCXdzdGF0cy0+cXVhbC5sZXZlbCA9IChpbnQpbGUxNl90b19jcHUoY3Euc2lnbmFsKSAtIDB4OTU7CisJCQl3c3RhdHMtPnF1YWwubm9pc2UgPSAoaW50KWxlMTZfdG9fY3B1KGNxLm5vaXNlKSAtIDB4OTU7CisJCQl3c3RhdHMtPnF1YWwudXBkYXRlZCA9CisJCQkJSVdfUVVBTF9BTExfVVBEQVRFRCB8IElXX1FVQUxfREJNOworCQl9CisJfQorCisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKwlyZXR1cm4gd3N0YXRzOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBXaXJlbGVzcyBleHRlbnNpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRuYW1lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJIGNoYXIgKm5hbWUsCisJCQkJIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBudW1yYXRlczsKKwlpbnQgZXJyOworCisJZXJyID0gb3Jpbm9jb19od19nZXRfYml0cmF0ZWxpc3QocHJpdiwgJm51bXJhdGVzLCBOVUxMLCAwKTsKKworCWlmICghZXJyICYmIChudW1yYXRlcyA+IDIpKQorCQlzdHJjcHkobmFtZSwgIklFRUUgODAyLjExYiIpOworCWVsc2UKKwkJc3RyY3B5KG5hbWUsICJJRUVFIDgwMi4xMS1EUyIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9zZXR3YXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCXN0cnVjdCBzb2NrYWRkciAqYXBfYWRkciwKKwkJCQljaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgZXJyID0gLUVJTlBST0dSRVNTOwkJLyogQ2FsbCBjb21taXQgaGFuZGxlciAqLworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RhdGljIGNvbnN0IHU4IG9mZl9hZGRyW10gPSB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfTsKKwlzdGF0aWMgY29uc3QgdTggYW55X2FkZHJbXSA9IHsgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiB9OworCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCisJCXJldHVybiAtRUJVU1k7CisKKwkvKiBFbmFibGUgYXV0b21hdGljIHJvYW1pbmcgLSBubyBzYW5pdHkgY2hlY2tzIGFyZSBuZWVkZWQgKi8KKwlpZiAobWVtY21wKCZhcF9hZGRyLT5zYV9kYXRhLCBvZmZfYWRkciwgRVRIX0FMRU4pID09IDAgfHwKKwkgICAgbWVtY21wKCZhcF9hZGRyLT5zYV9kYXRhLCBhbnlfYWRkciwgRVRIX0FMRU4pID09IDApIHsKKwkJcHJpdi0+YnNzaWRfZml4ZWQgPSAwOworCQltZW1zZXQocHJpdi0+ZGVzaXJlZF9ic3NpZCwgMCwgRVRIX0FMRU4pOworCisJCS8qICJvZmYiIG1lYW5zIGtlZXAgZXhpc3RpbmcgY29ubmVjdGlvbiAqLworCQlpZiAoYXBfYWRkci0+c2FfZGF0YVswXSA9PSAwKSB7CisJCQlfX29yaW5vY29faHdfc2V0X3dhcChwcml2KTsKKwkJCWVyciA9IDA7CisJCX0KKwkJZ290byBvdXQ7CisJfQorCisJaWYgKHByaXYtPmZpcm13YXJlX3R5cGUgPT0gRklSTVdBUkVfVFlQRV9BR0VSRSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogTHVjZW50L0FnZXJlIGZpcm13YXJlIGRvZXNuJ3QgIgorCQkgICAgICAgInN1cHBvcnQgbWFudWFsIHJvYW1pbmdcbiIsCisJCSAgICAgICBkZXYtPm5hbWUpOworCQllcnIgPSAtRU9QTk9UU1VQUDsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKHByaXYtPml3X21vZGUgIT0gSVdfTU9ERV9JTkZSQSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogTWFudWFsIHJvYW1pbmcgc3VwcG9ydGVkIG9ubHkgaW4gIgorCQkgICAgICAgIm1hbmFnZWQgbW9kZVxuIiwgZGV2LT5uYW1lKTsKKwkJZXJyID0gLUVPUE5PVFNVUFA7CisJCWdvdG8gb3V0OworCX0KKworCS8qIEludGVyc2lsIGZpcm13YXJlIGhhbmdzIHdpdGhvdXQgRGVzaXJlZCBFU1NJRCAqLworCWlmIChwcml2LT5maXJtd2FyZV90eXBlID09IEZJUk1XQVJFX1RZUEVfSU5URVJTSUwgJiYKKwkgICAgc3RybGVuKHByaXYtPmRlc2lyZWRfZXNzaWQpID09IDApIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IERlc2lyZWQgRVNTSUQgbXVzdCBiZSBzZXQgZm9yICIKKwkJICAgICAgICJtYW51YWwgcm9hbWluZ1xuIiwgZGV2LT5uYW1lKTsKKwkJZXJyID0gLUVPUE5PVFNVUFA7CisJCWdvdG8gb3V0OworCX0KKworCS8qIEZpbmFsbHksIGVuYWJsZSBtYW51YWwgcm9hbWluZyAqLworCXByaXYtPmJzc2lkX2ZpeGVkID0gMTsKKwltZW1jcHkocHJpdi0+ZGVzaXJlZF9ic3NpZCwgJmFwX2FkZHItPnNhX2RhdGEsIEVUSF9BTEVOKTsKKworIG91dDoKKwlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXR3YXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCXN0cnVjdCBzb2NrYWRkciAqYXBfYWRkciwKKwkJCQljaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKKwlpbnQgZXJyID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCisJCXJldHVybiAtRUJVU1k7CisKKwlhcF9hZGRyLT5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7CisJZXJyID0gaGVybWVzX3JlYWRfbHR2KGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DVVJSRU5UQlNTSUQsCisJCQkgICAgICBFVEhfQUxFTiwgTlVMTCwgYXBfYWRkci0+c2FfZGF0YSk7CisKKwlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBvcmlub2NvX2lvY3RsX3NldG1vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgdTMyICptb2RlLAorCQkJCSBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgZXJyID0gLUVJTlBST0dSRVNTOwkJLyogQ2FsbCBjb21taXQgaGFuZGxlciAqLworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAocHJpdi0+aXdfbW9kZSA9PSAqbW9kZSkKKwkJcmV0dXJuIDA7CisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCXN3aXRjaCAoKm1vZGUpIHsKKwljYXNlIElXX01PREVfQURIT0M6CisJCWlmICghcHJpdi0+aGFzX2lic3MgJiYgIXByaXYtPmhhc19wb3J0MykKKwkJCWVyciA9IC1FT1BOT1RTVVBQOworCQlicmVhazsKKworCWNhc2UgSVdfTU9ERV9JTkZSQToKKwkJYnJlYWs7CisKKwljYXNlIElXX01PREVfTU9OSVRPUjoKKwkJaWYgKHByaXYtPmJyb2tlbl9tb25pdG9yICYmICFmb3JjZV9tb25pdG9yKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogTW9uaXRvciBtb2RlIHN1cHBvcnQgaXMgIgorCQkJICAgICAgICJidWdneSBpbiB0aGlzIGZpcm13YXJlLCBub3QgZW5hYmxpbmdcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJCWVyciA9IC1FT1BOT1RTVVBQOworCQl9CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZXJyID0gLUVPUE5PVFNVUFA7CisJCWJyZWFrOworCX0KKworCWlmIChlcnIgPT0gLUVJTlBST0dSRVNTKSB7CisJCXByaXYtPml3X21vZGUgPSAqbW9kZTsKKwkJc2V0X3BvcnRfdHlwZShwcml2KTsKKwl9CisKKwlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2dldG1vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgdTMyICptb2RlLAorCQkJCSBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCSptb2RlID0gcHJpdi0+aXdfbW9kZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2dldGl3cmFuZ2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICAgc3RydWN0IGl3X3BvaW50ICpycnEsCisJCQkJICAgIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBlcnIgPSAwOworCXN0cnVjdCBpd19yYW5nZSAqcmFuZ2UgPSAoc3RydWN0IGl3X3JhbmdlICopIGV4dHJhOworCWludCBudW1yYXRlczsKKwlpbnQgaSwgazsKKworCXJycS0+bGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBpd19yYW5nZSk7CisJbWVtc2V0KHJhbmdlLCAwLCBzaXplb2Yoc3RydWN0IGl3X3JhbmdlKSk7CisKKwlyYW5nZS0+d2VfdmVyc2lvbl9jb21waWxlZCA9IFdJUkVMRVNTX0VYVDsKKwlyYW5nZS0+d2VfdmVyc2lvbl9zb3VyY2UgPSAyMjsKKworCS8qIFNldCBhdmFpbGFibGUgY2hhbm5lbHMvZnJlcXVlbmNpZXMgKi8KKwlyYW5nZS0+bnVtX2NoYW5uZWxzID0gTlVNX0NIQU5ORUxTOworCWsgPSAwOworCWZvciAoaSA9IDA7IGkgPCBOVU1fQ0hBTk5FTFM7IGkrKykgeworCQlpZiAocHJpdi0+Y2hhbm5lbF9tYXNrICYgKDEgPDwgaSkpIHsKKwkJCXJhbmdlLT5mcmVxW2tdLmkgPSBpICsgMTsKKwkJCXJhbmdlLT5mcmVxW2tdLm0gPSAoaWVlZTgwMjExX2Rzc3NfY2hhbl90b19mcmVxKGkgKyAxKSAqCisJCQkJCSAgICAxMDAwMDApOworCQkJcmFuZ2UtPmZyZXFba10uZSA9IDE7CisJCQlrKys7CisJCX0KKworCQlpZiAoayA+PSBJV19NQVhfRlJFUVVFTkNJRVMpCisJCQlicmVhazsKKwl9CisJcmFuZ2UtPm51bV9mcmVxdWVuY3kgPSBrOworCXJhbmdlLT5zZW5zaXRpdml0eSA9IDM7CisKKwlpZiAocHJpdi0+aGFzX3dlcCkgeworCQlyYW5nZS0+bWF4X2VuY29kaW5nX3Rva2VucyA9IE9SSU5PQ09fTUFYX0tFWVM7CisJCXJhbmdlLT5lbmNvZGluZ19zaXplWzBdID0gU01BTExfS0VZX1NJWkU7CisJCXJhbmdlLT5udW1fZW5jb2Rpbmdfc2l6ZXMgPSAxOworCisJCWlmIChwcml2LT5oYXNfYmlnX3dlcCkgeworCQkJcmFuZ2UtPmVuY29kaW5nX3NpemVbMV0gPSBMQVJHRV9LRVlfU0laRTsKKwkJCXJhbmdlLT5udW1fZW5jb2Rpbmdfc2l6ZXMgPSAyOworCQl9CisJfQorCisJaWYgKHByaXYtPmhhc193cGEpCisJCXJhbmdlLT5lbmNfY2FwYSA9IElXX0VOQ19DQVBBX1dQQSB8IElXX0VOQ19DQVBBX0NJUEhFUl9US0lQOworCisJaWYgKChwcml2LT5pd19tb2RlID09IElXX01PREVfQURIT0MpICYmICghU1BZX05VTUJFUihwcml2KSkpIHsKKwkJLyogUXVhbGl0eSBzdGF0cyBtZWFuaW5nbGVzcyBpbiBhZC1ob2MgbW9kZSAqLworCX0gZWxzZSB7CisJCXJhbmdlLT5tYXhfcXVhbC5xdWFsID0gMHg4YiAtIDB4MmY7CisJCXJhbmdlLT5tYXhfcXVhbC5sZXZlbCA9IDB4MmYgLSAweDk1IC0gMTsKKwkJcmFuZ2UtPm1heF9xdWFsLm5vaXNlID0gMHgyZiAtIDB4OTUgLSAxOworCQkvKiBOZWVkIHRvIGdldCBiZXR0ZXIgdmFsdWVzICovCisJCXJhbmdlLT5hdmdfcXVhbC5xdWFsID0gMHgyNDsKKwkJcmFuZ2UtPmF2Z19xdWFsLmxldmVsID0gMHhDMjsKKwkJcmFuZ2UtPmF2Z19xdWFsLm5vaXNlID0gMHg5RTsKKwl9CisKKwllcnIgPSBvcmlub2NvX2h3X2dldF9iaXRyYXRlbGlzdChwcml2LCAmbnVtcmF0ZXMsCisJCQkJCSByYW5nZS0+Yml0cmF0ZSwgSVdfTUFYX0JJVFJBVEVTKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCXJhbmdlLT5udW1fYml0cmF0ZXMgPSBudW1yYXRlczsKKworCS8qIFNldCBhbiBpbmRpY2F0aW9uIG9mIHRoZSBtYXggVENQIHRocm91Z2hwdXQgaW4gYml0L3MgdGhhdCB3ZSBjYW4KKwkgKiBleHBlY3QgdXNpbmcgdGhpcyBpbnRlcmZhY2UuIE1heSBiZSB1c2UgZm9yIFFvUyBzdHVmZi4uLgorCSAqIEplYW4gSUkgKi8KKwlpZiAobnVtcmF0ZXMgPiAyKQorCQlyYW5nZS0+dGhyb3VnaHB1dCA9IDUgKiAxMDAwICogMTAwMDsJLyogfjUgTWIvcyAqLworCWVsc2UKKwkJcmFuZ2UtPnRocm91Z2hwdXQgPSAxLjUgKiAxMDAwICogMTAwMDsJLyogfjEuNSBNYi9zICovCisKKwlyYW5nZS0+bWluX3J0cyA9IDA7CisJcmFuZ2UtPm1heF9ydHMgPSAyMzQ3OworCXJhbmdlLT5taW5fZnJhZyA9IDI1NjsKKwlyYW5nZS0+bWF4X2ZyYWcgPSAyMzQ2OworCisJcmFuZ2UtPm1pbl9wbXAgPSAwOworCXJhbmdlLT5tYXhfcG1wID0gNjU1MzUwMDA7CisJcmFuZ2UtPm1pbl9wbXQgPSAwOworCXJhbmdlLT5tYXhfcG10ID0gNjU1MzUgKiAxMDAwOwkvKiA/Pz8gKi8KKwlyYW5nZS0+cG1wX2ZsYWdzID0gSVdfUE9XRVJfUEVSSU9EOworCXJhbmdlLT5wbXRfZmxhZ3MgPSBJV19QT1dFUl9USU1FT1VUOworCXJhbmdlLT5wbV9jYXBhID0gKElXX1BPV0VSX1BFUklPRCB8IElXX1BPV0VSX1RJTUVPVVQgfAorCQkJICBJV19QT1dFUl9VTklDQVNUX1IpOworCisJcmFuZ2UtPnJldHJ5X2NhcGEgPSBJV19SRVRSWV9MSU1JVCB8IElXX1JFVFJZX0xJRkVUSU1FOworCXJhbmdlLT5yZXRyeV9mbGFncyA9IElXX1JFVFJZX0xJTUlUOworCXJhbmdlLT5yX3RpbWVfZmxhZ3MgPSBJV19SRVRSWV9MSUZFVElNRTsKKwlyYW5nZS0+bWluX3JldHJ5ID0gMDsKKwlyYW5nZS0+bWF4X3JldHJ5ID0gNjU1MzU7CS8qID8/PyAqLworCXJhbmdlLT5taW5fcl90aW1lID0gMDsKKwlyYW5nZS0+bWF4X3JfdGltZSA9IDY1NTM1ICogMTAwMDsJLyogPz8/ICovCisKKwlpZiAocHJpdi0+ZmlybXdhcmVfdHlwZSA9PSBGSVJNV0FSRV9UWVBFX0FHRVJFKQorCQlyYW5nZS0+c2Nhbl9jYXBhID0gSVdfU0NBTl9DQVBBX0VTU0lEOworCWVsc2UKKwkJcmFuZ2UtPnNjYW5fY2FwYSA9IElXX1NDQU5fQ0FQQV9OT05FOworCisJLyogRXZlbnQgY2FwYWJpbGl0eSAoa2VybmVsKSAqLworCUlXX0VWRU5UX0NBUEFfU0VUX0tFUk5FTChyYW5nZS0+ZXZlbnRfY2FwYSk7CisJLyogRXZlbnQgY2FwYWJpbGl0eSAoZHJpdmVyKSAqLworCUlXX0VWRU5UX0NBUEFfU0VUKHJhbmdlLT5ldmVudF9jYXBhLCBTSU9DR0lXVEhSU1BZKTsKKwlJV19FVkVOVF9DQVBBX1NFVChyYW5nZS0+ZXZlbnRfY2FwYSwgU0lPQ0dJV0FQKTsKKwlJV19FVkVOVF9DQVBBX1NFVChyYW5nZS0+ZXZlbnRfY2FwYSwgU0lPQ0dJV1NDQU4pOworCUlXX0VWRU5UX0NBUEFfU0VUKHJhbmdlLT5ldmVudF9jYXBhLCBJV0VWVFhEUk9QKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9yaW5vY29faW9jdGxfc2V0aXdlbmNvZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICAgICBzdHJ1Y3QgaXdfcG9pbnQgKmVycSwKKwkJCQkgICAgIGNoYXIgKmtleWJ1ZikKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgaW5kZXggPSAoZXJxLT5mbGFncyAmIElXX0VOQ09ERV9JTkRFWCkgLSAxOworCWludCBzZXRpbmRleCA9IHByaXYtPnR4X2tleTsKKwlpbnQgZW5jb2RlX2FsZyA9IHByaXYtPmVuY29kZV9hbGc7CisJaW50IHJlc3RyaWN0ZWQgPSBwcml2LT53ZXBfcmVzdHJpY3Q7CisJdTE2IHhsZW4gPSAwOworCWludCBlcnIgPSAtRUlOUFJPR1JFU1M7CQkvKiBDYWxsIGNvbW1pdCBoYW5kbGVyICovCisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghcHJpdi0+aGFzX3dlcCkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJaWYgKGVycS0+cG9pbnRlcikgeworCQkvKiBXZSBhY3R1YWxseSBoYXZlIGEga2V5IHRvIHNldCAtIGNoZWNrIGl0cyBsZW5ndGggKi8KKwkJaWYgKGVycS0+bGVuZ3RoID4gTEFSR0VfS0VZX1NJWkUpCisJCQlyZXR1cm4gLUUyQklHOworCisJCWlmICgoZXJxLT5sZW5ndGggPiBTTUFMTF9LRVlfU0laRSkgJiYgIXByaXYtPmhhc19iaWdfd2VwKQorCQkJcmV0dXJuIC1FMkJJRzsKKwl9CisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCS8qIENsZWFyIGFueSBUS0lQIGtleSB3ZSBoYXZlICovCisJaWYgKChwcml2LT5oYXNfd3BhKSAmJiAocHJpdi0+ZW5jb2RlX2FsZyA9PSBJV19FTkNPREVfQUxHX1RLSVApKQorCQkodm9pZCkgb3Jpbm9jb19jbGVhcl90a2lwX2tleShwcml2LCBzZXRpbmRleCk7CisKKwlpZiAoZXJxLT5sZW5ndGggPiAwKSB7CisJCWlmICgoaW5kZXggPCAwKSB8fCAoaW5kZXggPj0gT1JJTk9DT19NQVhfS0VZUykpCisJCQlpbmRleCA9IHByaXYtPnR4X2tleTsKKworCQkvKiBBZGp1c3Qga2V5IGxlbmd0aCB0byBhIHN1cHBvcnRlZCB2YWx1ZSAqLworCQlpZiAoZXJxLT5sZW5ndGggPiBTTUFMTF9LRVlfU0laRSkKKwkJCXhsZW4gPSBMQVJHRV9LRVlfU0laRTsKKwkJZWxzZSBpZiAoZXJxLT5sZW5ndGggPiAwKQorCQkJeGxlbiA9IFNNQUxMX0tFWV9TSVpFOworCQllbHNlCisJCQl4bGVuID0gMDsKKworCQkvKiBTd2l0Y2ggb24gV0VQIGlmIG9mZiAqLworCQlpZiAoKGVuY29kZV9hbGcgIT0gSVdfRU5DT0RFX0FMR19XRVApICYmICh4bGVuID4gMCkpIHsKKwkJCXNldGluZGV4ID0gaW5kZXg7CisJCQllbmNvZGVfYWxnID0gSVdfRU5DT0RFX0FMR19XRVA7CisJCX0KKwl9IGVsc2UgeworCQkvKiBJbXBvcnRhbnQgbm90ZSA6IGlmIHRoZSB1c2VyIGRvICJpd2NvbmZpZyBldGgwIGVuYyBvZmYiLAorCQkgKiB3ZSB3aWxsIGFycml2ZSB0aGVyZSB3aXRoIGFuIGluZGV4IG9mIC0xLiBUaGlzIGlzIHZhbGlkCisJCSAqIGJ1dCBuZWVkIHRvIGJlIHRha2VuIGNhcmUgb2ZmLi4uIEplYW4gSUkgKi8KKwkJaWYgKChpbmRleCA8IDApIHx8IChpbmRleCA+PSBPUklOT0NPX01BWF9LRVlTKSkgeworCQkJaWYgKChpbmRleCAhPSAtMSkgfHwgKGVycS0+ZmxhZ3MgPT0gMCkpIHsKKwkJCQllcnIgPSAtRUlOVkFMOworCQkJCWdvdG8gb3V0OworCQkJfQorCQl9IGVsc2UgeworCQkJLyogU2V0IHRoZSBpbmRleCA6IENoZWNrIHRoYXQgdGhlIGtleSBpcyB2YWxpZCAqLworCQkJaWYgKHByaXYtPmtleXNbaW5kZXhdLmxlbiA9PSAwKSB7CisJCQkJZXJyID0gLUVJTlZBTDsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJCXNldGluZGV4ID0gaW5kZXg7CisJCX0KKwl9CisKKwlpZiAoZXJxLT5mbGFncyAmIElXX0VOQ09ERV9ESVNBQkxFRCkKKwkJZW5jb2RlX2FsZyA9IElXX0VOQ09ERV9BTEdfTk9ORTsKKwlpZiAoZXJxLT5mbGFncyAmIElXX0VOQ09ERV9PUEVOKQorCQlyZXN0cmljdGVkID0gMDsKKwlpZiAoZXJxLT5mbGFncyAmIElXX0VOQ09ERV9SRVNUUklDVEVEKQorCQlyZXN0cmljdGVkID0gMTsKKworCWlmIChlcnEtPnBvaW50ZXIgJiYgZXJxLT5sZW5ndGggPiAwKSB7CisJCXByaXYtPmtleXNbaW5kZXhdLmxlbiA9IGNwdV90b19sZTE2KHhsZW4pOworCQltZW1zZXQocHJpdi0+a2V5c1tpbmRleF0uZGF0YSwgMCwKKwkJICAgICAgIHNpemVvZihwcml2LT5rZXlzW2luZGV4XS5kYXRhKSk7CisJCW1lbWNweShwcml2LT5rZXlzW2luZGV4XS5kYXRhLCBrZXlidWYsIGVycS0+bGVuZ3RoKTsKKwl9CisJcHJpdi0+dHhfa2V5ID0gc2V0aW5kZXg7CisKKwkvKiBUcnkgZmFzdCBrZXkgY2hhbmdlIGlmIGNvbm5lY3RlZCBhbmQgb25seSBrZXlzIGFyZSBjaGFuZ2VkICovCisJaWYgKChwcml2LT5lbmNvZGVfYWxnID09IGVuY29kZV9hbGcpICYmCisJICAgIChwcml2LT53ZXBfcmVzdHJpY3QgPT0gcmVzdHJpY3RlZCkgJiYKKwkgICAgbmV0aWZfY2Fycmllcl9vayhkZXYpKSB7CisJCWVyciA9IF9fb3Jpbm9jb19od19zZXR1cF93ZXBrZXlzKHByaXYpOworCQkvKiBObyBuZWVkIHRvIGNvbW1pdCBpZiBzdWNjZXNzZnVsICovCisJCWdvdG8gb3V0OworCX0KKworCXByaXYtPmVuY29kZV9hbGcgPSBlbmNvZGVfYWxnOworCXByaXYtPndlcF9yZXN0cmljdCA9IHJlc3RyaWN0ZWQ7CisKKyBvdXQ6CisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRpd2VuY29kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICAgIHN0cnVjdCBpd19wb2ludCAqZXJxLAorCQkJCSAgICAgY2hhciAqa2V5YnVmKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBpbmRleCA9IChlcnEtPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYKSAtIDE7CisJdTE2IHhsZW4gPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIXByaXYtPmhhc193ZXApCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQorCQlyZXR1cm4gLUVCVVNZOworCisJaWYgKChpbmRleCA8IDApIHx8IChpbmRleCA+PSBPUklOT0NPX01BWF9LRVlTKSkKKwkJaW5kZXggPSBwcml2LT50eF9rZXk7CisKKwllcnEtPmZsYWdzID0gMDsKKwlpZiAoIXByaXYtPmVuY29kZV9hbGcpCisJCWVycS0+ZmxhZ3MgfD0gSVdfRU5DT0RFX0RJU0FCTEVEOworCWVycS0+ZmxhZ3MgfD0gaW5kZXggKyAxOworCisJaWYgKHByaXYtPndlcF9yZXN0cmljdCkKKwkJZXJxLT5mbGFncyB8PSBJV19FTkNPREVfUkVTVFJJQ1RFRDsKKwllbHNlCisJCWVycS0+ZmxhZ3MgfD0gSVdfRU5DT0RFX09QRU47CisKKwl4bGVuID0gbGUxNl90b19jcHUocHJpdi0+a2V5c1tpbmRleF0ubGVuKTsKKworCWVycS0+bGVuZ3RoID0geGxlbjsKKworCW1lbWNweShrZXlidWYsIHByaXYtPmtleXNbaW5kZXhdLmRhdGEsIE9SSU5PQ09fTUFYX0tFWV9TSVpFKTsKKworCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9zZXRlc3NpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgIHN0cnVjdCBpd19wb2ludCAqZXJxLAorCQkJCSAgY2hhciAqZXNzaWRidWYpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qIE5vdGUgOiBFU1NJRCBpcyBpZ25vcmVkIGluIEFkLUhvYyBkZW1vIG1vZGUsIGJ1dCB3ZSBjYW4gc2V0IGl0CisJICogYW55d2F5Li4uIC0gSmVhbiBJSSAqLworCisJLyogSHVtLi4uIFNob3VsZCBub3QgdXNlIFdpcmVsZXNzIEV4dGVuc2lvbiBjb25zdGFudCAobWF5IGNoYW5nZSksCisJICogc2hvdWxkIHVzZSBvdXIgb3duLi4uIC0gSmVhbiBJSSAqLworCWlmIChlcnEtPmxlbmd0aCA+IElXX0VTU0lEX01BWF9TSVpFKQorCQlyZXR1cm4gLUUyQklHOworCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCisJCXJldHVybiAtRUJVU1k7CisKKwkvKiBOVUxMIHRoZSBzdHJpbmcgKGZvciBOVUxMIHRlcm1pbmF0aW9uICYgRVNTSUQgPSBBTlkpIC0gSmVhbiBJSSAqLworCW1lbXNldChwcml2LT5kZXNpcmVkX2Vzc2lkLCAwLCBzaXplb2YocHJpdi0+ZGVzaXJlZF9lc3NpZCkpOworCisJLyogSWYgbm90IEFOWSwgZ2V0IHRoZSBuZXcgRVNTSUQgKi8KKwlpZiAoZXJxLT5mbGFncykKKwkJbWVtY3B5KHByaXYtPmRlc2lyZWRfZXNzaWQsIGVzc2lkYnVmLCBlcnEtPmxlbmd0aCk7CisKKwlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworCisJcmV0dXJuIC1FSU5QUk9HUkVTUzsJCS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KK30KKworc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2dldGVzc2lkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgc3RydWN0IGl3X3BvaW50ICplcnEsCisJCQkJICBjaGFyICplc3NpZGJ1ZikKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgYWN0aXZlOworCWludCBlcnIgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CisJCWVyciA9IG9yaW5vY29faHdfZ2V0X2Vzc2lkKHByaXYsICZhY3RpdmUsIGVzc2lkYnVmKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCQllcnEtPmxlbmd0aCA9IGVycjsKKwl9IGVsc2UgeworCQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJCXJldHVybiAtRUJVU1k7CisJCW1lbWNweShlc3NpZGJ1ZiwgcHJpdi0+ZGVzaXJlZF9lc3NpZCwgSVdfRVNTSURfTUFYX1NJWkUpOworCQllcnEtPmxlbmd0aCA9IHN0cmxlbihwcml2LT5kZXNpcmVkX2Vzc2lkKTsKKwkJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKwl9CisKKwllcnEtPmZsYWdzID0gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9yaW5vY29faW9jdGxfc2V0bmljayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSBzdHJ1Y3QgaXdfcG9pbnQgKm5ycSwKKwkJCQkgY2hhciAqbmlja2J1ZikKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKG5ycS0+bGVuZ3RoID4gSVdfRVNTSURfTUFYX1NJWkUpCisJCXJldHVybiAtRTJCSUc7CisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCW1lbXNldChwcml2LT5uaWNrLCAwLCBzaXplb2YocHJpdi0+bmljaykpOworCW1lbWNweShwcml2LT5uaWNrLCBuaWNrYnVmLCBucnEtPmxlbmd0aCk7CisKKwlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworCisJcmV0dXJuIC1FSU5QUk9HUkVTUzsJCS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KK30KKworc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2dldG5pY2soc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgc3RydWN0IGl3X3BvaW50ICpucnEsCisJCQkJIGNoYXIgKm5pY2tidWYpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQorCQlyZXR1cm4gLUVCVVNZOworCisJbWVtY3B5KG5pY2tidWYsIHByaXYtPm5pY2ssIElXX0VTU0lEX01BWF9TSVpFKTsKKwlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworCisJbnJxLT5sZW5ndGggPSBzdHJsZW4ocHJpdi0+bmljayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvcmlub2NvX2lvY3RsX3NldGZyZXEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgc3RydWN0IGl3X2ZyZXEgKmZycSwKKwkJCQkgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJaW50IGNoYW4gPSAtMTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBlcnIgPSAtRUlOUFJPR1JFU1M7CQkvKiBDYWxsIGNvbW1pdCBoYW5kbGVyICovCisKKwkvKiBJbiBpbmZyYXN0cnVjdHVyZSBtb2RlIHRoZSBBUCBzZXRzIHRoZSBjaGFubmVsICovCisJaWYgKHByaXYtPml3X21vZGUgPT0gSVdfTU9ERV9JTkZSQSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWlmICgoZnJxLT5lID09IDApICYmIChmcnEtPm0gPD0gMTAwMCkpIHsKKwkJLyogU2V0dGluZyBieSBjaGFubmVsIG51bWJlciAqLworCQljaGFuID0gZnJxLT5tOworCX0gZWxzZSB7CisJCS8qIFNldHRpbmcgYnkgZnJlcXVlbmN5ICovCisJCWludCBkZW5vbSA9IDE7CisJCWludCBpOworCisJCS8qIENhbGN1bGF0ZSBkZW5vbWluYXRvciB0byByZXNjYWxlIHRvIE1IeiAqLworCQlmb3IgKGkgPSAwOyBpIDwgKDYgLSBmcnEtPmUpOyBpKyspCisJCQlkZW5vbSAqPSAxMDsKKworCQljaGFuID0gaWVlZTgwMjExX2ZyZXFfdG9fZHNzc19jaGFuKGZycS0+bSAvIGRlbm9tKTsKKwl9CisKKwlpZiAoKGNoYW4gPCAxKSB8fCAoY2hhbiA+IE5VTV9DSEFOTkVMUykgfHwKKwkgICAgICEocHJpdi0+Y2hhbm5lbF9tYXNrICYgKDEgPDwgKGNoYW4tMSkpKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCXByaXYtPmNoYW5uZWwgPSBjaGFuOworCWlmIChwcml2LT5pd19tb2RlID09IElXX01PREVfTU9OSVRPUikgeworCQkvKiBGYXN0IGNoYW5uZWwgY2hhbmdlIC0gbm8gY29tbWl0IGlmIHN1Y2Nlc3NmdWwgKi8KKwkJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OworCQllcnIgPSBoZXJtZXNfZG9jbWRfd2FpdChodywgSEVSTUVTX0NNRF9URVNUIHwKKwkJCQkJICAgIEhFUk1FU19URVNUX1NFVF9DSEFOTkVMLAorCQkJCQljaGFuLCBOVUxMKTsKKwl9CisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRmcmVxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJIHN0cnVjdCBpd19mcmVxICpmcnEsCisJCQkJIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCB0bXA7CisKKwkvKiBMb2NraW5nIGRvbmUgaW4gdGhlcmUgKi8KKwl0bXAgPSBvcmlub2NvX2h3X2dldF9mcmVxKHByaXYpOworCWlmICh0bXAgPCAwKQorCQlyZXR1cm4gdG1wOworCisJZnJxLT5tID0gdG1wICogMTAwMDAwOworCWZycS0+ZSA9IDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2dldHNlbnMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgc3RydWN0IGl3X3BhcmFtICpzcnEsCisJCQkJIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKKwl1MTYgdmFsOworCWludCBlcnI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghcHJpdi0+aGFzX3NlbnNpdGl2aXR5KQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKwllcnIgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwKKwkJCQkgIEhFUk1FU19SSURfQ05GU1lTVEVNU0NBTEUsICZ2YWwpOworCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJc3JxLT52YWx1ZSA9IHZhbDsKKwlzcnEtPmZpeGVkID0gMDsgLyogYXV0byAqLworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9zZXRzZW5zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJIHN0cnVjdCBpd19wYXJhbSAqc3JxLAorCQkJCSBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgdmFsID0gc3JxLT52YWx1ZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKCFwcml2LT5oYXNfc2Vuc2l0aXZpdHkpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCWlmICgodmFsIDwgMSkgfHwgKHZhbCA+IDMpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQorCQlyZXR1cm4gLUVCVVNZOworCXByaXYtPmFwX2RlbnNpdHkgPSB2YWw7CisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKworCXJldHVybiAtRUlOUFJPR1JFU1M7CQkvKiBDYWxsIGNvbW1pdCBoYW5kbGVyICovCit9CisKK3N0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9zZXRydHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCXN0cnVjdCBpd19wYXJhbSAqcnJxLAorCQkJCWNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCB2YWwgPSBycnEtPnZhbHVlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAocnJxLT5kaXNhYmxlZCkKKwkJdmFsID0gMjM0NzsKKworCWlmICgodmFsIDwgMCkgfHwgKHZhbCA+IDIzNDcpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQorCQlyZXR1cm4gLUVCVVNZOworCisJcHJpdi0+cnRzX3RocmVzaCA9IHZhbDsKKwlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworCisJcmV0dXJuIC1FSU5QUk9HUkVTUzsJCS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KK30KKworc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2dldHJ0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJc3RydWN0IGl3X3BhcmFtICpycnEsCisJCQkJY2hhciAqZXh0cmEpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisKKwlycnEtPnZhbHVlID0gcHJpdi0+cnRzX3RocmVzaDsKKwlycnEtPmRpc2FibGVkID0gKHJycS0+dmFsdWUgPT0gMjM0Nyk7CisJcnJxLT5maXhlZCA9IDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvcmlub2NvX2lvY3RsX3NldGZyYWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgc3RydWN0IGl3X3BhcmFtICpmcnEsCisJCQkJIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBlcnIgPSAtRUlOUFJPR1JFU1M7CQkvKiBDYWxsIGNvbW1pdCBoYW5kbGVyICovCisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQorCQlyZXR1cm4gLUVCVVNZOworCisJaWYgKHByaXYtPmhhc19td28pIHsKKwkJaWYgKGZycS0+ZGlzYWJsZWQpCisJCQlwcml2LT5td29fcm9idXN0ID0gMDsKKwkJZWxzZSB7CisJCQlpZiAoZnJxLT5maXhlZCkKKwkJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogRml4ZWQgZnJhZ21lbnRhdGlvbiAiCisJCQkJICAgICAgICJpcyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgZmlybXdhcmUuICIKKwkJCQkgICAgICAgIlVzaW5nIE1XTyByb2J1c3QgaW5zdGVhZC5cbiIsCisJCQkJICAgICAgIGRldi0+bmFtZSk7CisJCQlwcml2LT5td29fcm9idXN0ID0gMTsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChmcnEtPmRpc2FibGVkKQorCQkJcHJpdi0+ZnJhZ190aHJlc2ggPSAyMzQ2OworCQllbHNlIHsKKwkJCWlmICgoZnJxLT52YWx1ZSA8IDI1NikgfHwgKGZycS0+dmFsdWUgPiAyMzQ2KSkKKwkJCQllcnIgPSAtRUlOVkFMOworCQkJZWxzZQorCQkJCS8qIG11c3QgYmUgZXZlbiAqLworCQkJCXByaXYtPmZyYWdfdGhyZXNoID0gZnJxLT52YWx1ZSAmIH4weDE7CisJCX0KKwl9CisKKwlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2dldGZyYWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgc3RydWN0IGl3X3BhcmFtICpmcnEsCisJCQkJIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKKwlpbnQgZXJyOworCXUxNiB2YWw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQorCQlyZXR1cm4gLUVCVVNZOworCisJaWYgKHByaXYtPmhhc19td28pIHsKKwkJZXJyID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsCisJCQkJCSAgSEVSTUVTX1JJRF9DTkZNV09ST0JVU1RfQUdFUkUsCisJCQkJCSAgJnZhbCk7CisJCWlmIChlcnIpCisJCQl2YWwgPSAwOworCisJCWZycS0+dmFsdWUgPSB2YWwgPyAyMzQ3IDogMDsKKwkJZnJxLT5kaXNhYmxlZCA9ICF2YWw7CisJCWZycS0+Zml4ZWQgPSAwOworCX0gZWxzZSB7CisJCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCQkgIEhFUk1FU19SSURfQ05GRlJBR01FTlRBVElPTlRIUkVTSE9MRCwKKwkJCQkJICAmdmFsKTsKKwkJaWYgKGVycikKKwkJCXZhbCA9IDA7CisKKwkJZnJxLT52YWx1ZSA9IHZhbDsKKwkJZnJxLT5kaXNhYmxlZCA9ICh2YWwgPj0gMjM0Nik7CisJCWZycS0+Zml4ZWQgPSAxOworCX0KKworCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IG9yaW5vY29faW9jdGxfc2V0cmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSBzdHJ1Y3QgaXdfcGFyYW0gKnJycSwKKwkJCQkgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJaW50IHJhdGVtb2RlOworCWludCBiaXRyYXRlOyAvKiAxMDBzIG9mIGtpbG9iaXRzICovCisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qIEFzIHRoZSB1c2VyIHNwYWNlIGRvZXNuJ3Qga25vdyBvdXIgaGlnaGVzdCByYXRlLCBpdCB1c2VzIC0xCisJICogdG8gYXNrIHVzIHRvIHNldCB0aGUgaGlnaGVzdCByYXRlLiAgVGVzdCBpdCB1c2luZyAiaXdjb25maWcKKwkgKiBldGhYIHJhdGUgYXV0byIgLSBKZWFuIElJICovCisJaWYgKHJycS0+dmFsdWUgPT0gLTEpCisJCWJpdHJhdGUgPSAxMTA7CisJZWxzZSB7CisJCWlmIChycnEtPnZhbHVlICUgMTAwMDAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWJpdHJhdGUgPSBycnEtPnZhbHVlIC8gMTAwMDAwOworCX0KKworCXJhdGVtb2RlID0gb3Jpbm9jb19nZXRfYml0cmF0ZW1vZGUoYml0cmF0ZSwgIXJycS0+Zml4ZWQpOworCisJaWYgKHJhdGVtb2RlID09IC0xKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQorCQlyZXR1cm4gLUVCVVNZOworCXByaXYtPmJpdHJhdGVtb2RlID0gcmF0ZW1vZGU7CisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKworCXJldHVybiAtRUlOUFJPR1JFU1M7Cit9CisKK3N0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRyYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJIHN0cnVjdCBpd19wYXJhbSAqcnJxLAorCQkJCSBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgZXJyID0gMDsKKwlpbnQgYml0cmF0ZSwgYXV0b21hdGljOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCW9yaW5vY29fZ2V0X3JhdGVtb2RlX2NmZyhwcml2LT5iaXRyYXRlbW9kZSwgJmJpdHJhdGUsICZhdXRvbWF0aWMpOworCisJLyogSWYgdGhlIGludGVyZmFjZSBpcyBydW5uaW5nIHdlIHRyeSB0byBmaW5kIG1vcmUgYWJvdXQgdGhlCisJICAgY3VycmVudCBtb2RlICovCisJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJZXJyID0gb3Jpbm9jb19od19nZXRfYWN0X2JpdHJhdGUocHJpdiwgJmJpdHJhdGUpOworCisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKworCXJycS0+dmFsdWUgPSBiaXRyYXRlOworCXJycS0+Zml4ZWQgPSAhYXV0b21hdGljOworCXJycS0+ZGlzYWJsZWQgPSAwOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBvcmlub2NvX2lvY3RsX3NldHBvd2VyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgc3RydWN0IGl3X3BhcmFtICpwcnEsCisJCQkJICBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgZXJyID0gLUVJTlBST0dSRVNTOwkJLyogQ2FsbCBjb21taXQgaGFuZGxlciAqLworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWlmIChwcnEtPmRpc2FibGVkKSB7CisJCXByaXYtPnBtX29uID0gMDsKKwl9IGVsc2UgeworCQlzd2l0Y2ggKHBycS0+ZmxhZ3MgJiBJV19QT1dFUl9NT0RFKSB7CisJCWNhc2UgSVdfUE9XRVJfVU5JQ0FTVF9SOgorCQkJcHJpdi0+cG1fbWNhc3QgPSAwOworCQkJcHJpdi0+cG1fb24gPSAxOworCQkJYnJlYWs7CisJCWNhc2UgSVdfUE9XRVJfQUxMX1I6CisJCQlwcml2LT5wbV9tY2FzdCA9IDE7CisJCQlwcml2LT5wbV9vbiA9IDE7CisJCQlicmVhazsKKwkJY2FzZSBJV19QT1dFUl9PTjoKKwkJCS8qIE5vIGZsYWdzIDogYnV0IHdlIG1heSBoYXZlIGEgdmFsdWUgLSBKZWFuIElJICovCisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCWlmIChwcnEtPmZsYWdzICYgSVdfUE9XRVJfVElNRU9VVCkgeworCQkJcHJpdi0+cG1fb24gPSAxOworCQkJcHJpdi0+cG1fdGltZW91dCA9IHBycS0+dmFsdWUgLyAxMDAwOworCQl9CisJCWlmIChwcnEtPmZsYWdzICYgSVdfUE9XRVJfUEVSSU9EKSB7CisJCQlwcml2LT5wbV9vbiA9IDE7CisJCQlwcml2LT5wbV9wZXJpb2QgPSBwcnEtPnZhbHVlIC8gMTAwMDsKKwkJfQorCQkvKiBJdCdzIHZhbGlkIHRvIG5vdCBoYXZlIGEgdmFsdWUgaWYgd2UgYXJlIGp1c3QgdG9nZ2xpbmcKKwkJICogdGhlIGZsYWdzLi4uIEplYW4gSUkgKi8KKwkJaWYgKCFwcml2LT5wbV9vbikgeworCQkJZXJyID0gLUVJTlZBTDsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisgb3V0OgorCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IG9yaW5vY29faW9jdGxfZ2V0cG93ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICBzdHJ1Y3QgaXdfcGFyYW0gKnBycSwKKwkJCQkgIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKKwlpbnQgZXJyID0gMDsKKwl1MTYgZW5hYmxlLCBwZXJpb2QsIHRpbWVvdXQsIG1jYXN0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCSAgSEVSTUVTX1JJRF9DTkZQTUVOQUJMRUQsICZlbmFibGUpOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCisJZXJyID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsCisJCQkJICBIRVJNRVNfUklEX0NORk1BWFNMRUVQRFVSQVRJT04sICZwZXJpb2QpOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCisJZXJyID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsCisJCQkJICBIRVJNRVNfUklEX0NORlBNSE9MRE9WRVJEVVJBVElPTiwgJnRpbWVvdXQpOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCisJZXJyID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsCisJCQkJICBIRVJNRVNfUklEX0NORk1VTFRJQ0FTVFJFQ0VJVkUsICZtY2FzdCk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwlwcnEtPmRpc2FibGVkID0gIWVuYWJsZTsKKwkvKiBOb3RlIDogYnkgZGVmYXVsdCwgZGlzcGxheSB0aGUgcGVyaW9kICovCisJaWYgKChwcnEtPmZsYWdzICYgSVdfUE9XRVJfVFlQRSkgPT0gSVdfUE9XRVJfVElNRU9VVCkgeworCQlwcnEtPmZsYWdzID0gSVdfUE9XRVJfVElNRU9VVDsKKwkJcHJxLT52YWx1ZSA9IHRpbWVvdXQgKiAxMDAwOworCX0gZWxzZSB7CisJCXBycS0+ZmxhZ3MgPSBJV19QT1dFUl9QRVJJT0Q7CisJCXBycS0+dmFsdWUgPSBwZXJpb2QgKiAxMDAwOworCX0KKwlpZiAobWNhc3QpCisJCXBycS0+ZmxhZ3MgfD0gSVdfUE9XRVJfQUxMX1I7CisJZWxzZQorCQlwcnEtPmZsYWdzIHw9IElXX1BPV0VSX1VOSUNBU1RfUjsKKworIG91dDoKKwlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBvcmlub2NvX2lvY3RsX3NldF9lbmNvZGVleHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwKKwkJCQkgICAgICAgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGl3X3BvaW50ICplbmNvZGluZyA9ICZ3cnF1LT5lbmNvZGluZzsKKwlzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqZXh0ID0gKHN0cnVjdCBpd19lbmNvZGVfZXh0ICopZXh0cmE7CisJaW50IGlkeCwgYWxnID0gZXh0LT5hbGcsIHNldF9rZXkgPSAxOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGVyciA9IC1FSU5WQUw7CisJdTE2IGtleV9sZW47CisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCS8qIERldGVybWluZSBhbmQgdmFsaWRhdGUgdGhlIGtleSBpbmRleCAqLworCWlkeCA9IGVuY29kaW5nLT5mbGFncyAmIElXX0VOQ09ERV9JTkRFWDsKKwlpZiAoaWR4KSB7CisJCWlmICgoaWR4IDwgMSkgfHwgKGlkeCA+IDQpKQorCQkJZ290byBvdXQ7CisJCWlkeC0tOworCX0gZWxzZQorCQlpZHggPSBwcml2LT50eF9rZXk7CisKKwlpZiAoZW5jb2RpbmctPmZsYWdzICYgSVdfRU5DT0RFX0RJU0FCTEVEKQorCQlhbGcgPSBJV19FTkNPREVfQUxHX05PTkU7CisKKwlpZiAocHJpdi0+aGFzX3dwYSAmJiAoYWxnICE9IElXX0VOQ09ERV9BTEdfVEtJUCkpIHsKKwkJLyogQ2xlYXIgYW55IFRLSVAgVFgga2V5IHdlIGhhZCAqLworCQkodm9pZCkgb3Jpbm9jb19jbGVhcl90a2lwX2tleShwcml2LCBwcml2LT50eF9rZXkpOworCX0KKworCWlmIChleHQtPmV4dF9mbGFncyAmIElXX0VOQ09ERV9FWFRfU0VUX1RYX0tFWSkgeworCQlwcml2LT50eF9rZXkgPSBpZHg7CisJCXNldF9rZXkgPSAoKGFsZyA9PSBJV19FTkNPREVfQUxHX1RLSVApIHx8CisJCQkgICAoZXh0LT5rZXlfbGVuID4gMCkpID8gMSA6IDA7CisJfQorCisJaWYgKHNldF9rZXkpIHsKKwkJLyogU2V0IHRoZSByZXF1ZXN0ZWQga2V5IGZpcnN0ICovCisJCXN3aXRjaCAoYWxnKSB7CisJCWNhc2UgSVdfRU5DT0RFX0FMR19OT05FOgorCQkJcHJpdi0+ZW5jb2RlX2FsZyA9IGFsZzsKKwkJCXByaXYtPmtleXNbaWR4XS5sZW4gPSAwOworCQkJYnJlYWs7CisKKwkJY2FzZSBJV19FTkNPREVfQUxHX1dFUDoKKwkJCWlmIChleHQtPmtleV9sZW4gPiBTTUFMTF9LRVlfU0laRSkKKwkJCQlrZXlfbGVuID0gTEFSR0VfS0VZX1NJWkU7CisJCQllbHNlIGlmIChleHQtPmtleV9sZW4gPiAwKQorCQkJCWtleV9sZW4gPSBTTUFMTF9LRVlfU0laRTsKKwkJCWVsc2UKKwkJCQlnb3RvIG91dDsKKworCQkJcHJpdi0+ZW5jb2RlX2FsZyA9IGFsZzsKKwkJCXByaXYtPmtleXNbaWR4XS5sZW4gPSBjcHVfdG9fbGUxNihrZXlfbGVuKTsKKworCQkJa2V5X2xlbiA9IG1pbihleHQtPmtleV9sZW4sIGtleV9sZW4pOworCisJCQltZW1zZXQocHJpdi0+a2V5c1tpZHhdLmRhdGEsIDAsIE9SSU5PQ09fTUFYX0tFWV9TSVpFKTsKKwkJCW1lbWNweShwcml2LT5rZXlzW2lkeF0uZGF0YSwgZXh0LT5rZXksIGtleV9sZW4pOworCQkJYnJlYWs7CisKKwkJY2FzZSBJV19FTkNPREVfQUxHX1RLSVA6CisJCXsKKwkJCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKKwkJCXU4ICp0a2lwX2l2ID0gTlVMTDsKKworCQkJaWYgKCFwcml2LT5oYXNfd3BhIHx8CisJCQkgICAgKGV4dC0+a2V5X2xlbiA+IHNpemVvZihwcml2LT50a2lwX2tleVswXSkpKQorCQkJCWdvdG8gb3V0OworCisJCQlwcml2LT5lbmNvZGVfYWxnID0gYWxnOworCQkJbWVtc2V0KCZwcml2LT50a2lwX2tleVtpZHhdLCAwLAorCQkJICAgICAgIHNpemVvZihwcml2LT50a2lwX2tleVtpZHhdKSk7CisJCQltZW1jcHkoJnByaXYtPnRraXBfa2V5W2lkeF0sIGV4dC0+a2V5LCBleHQtPmtleV9sZW4pOworCisJCQlpZiAoZXh0LT5leHRfZmxhZ3MgJiBJV19FTkNPREVfRVhUX1JYX1NFUV9WQUxJRCkKKwkJCQl0a2lwX2l2ID0gJmV4dC0+cnhfc2VxWzBdOworCisJCQllcnIgPSBfX29yaW5vY29faHdfc2V0X3RraXBfa2V5KGh3LCBpZHgsCisJCQkJIGV4dC0+ZXh0X2ZsYWdzICYgSVdfRU5DT0RFX0VYVF9TRVRfVFhfS0VZLAorCQkJCSAodTggKikgJnByaXYtPnRraXBfa2V5W2lkeF0sCisJCQkJIHRraXBfaXYsIE5VTEwpOworCQkJaWYgKGVycikKKwkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIFRLSVAga2V5IgorCQkJCSAgICAgICAiXG4iLCBkZXYtPm5hbWUsIGVycik7CisKKwkJCWdvdG8gb3V0OworCQl9CisJCWRlZmF1bHQ6CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKwllcnIgPSAtRUlOUFJPR1JFU1M7Cisgb3V0OgorCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IG9yaW5vY29faW9jdGxfZ2V0X2VuY29kZWV4dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgICAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LAorCQkJCSAgICAgICBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaXdfcG9pbnQgKmVuY29kaW5nID0gJndycXUtPmVuY29kaW5nOworCXN0cnVjdCBpd19lbmNvZGVfZXh0ICpleHQgPSAoc3RydWN0IGl3X2VuY29kZV9leHQgKilleHRyYTsKKwlpbnQgaWR4LCBtYXhfa2V5X2xlbjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBlcnI7CisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWVyciA9IC1FSU5WQUw7CisJbWF4X2tleV9sZW4gPSBlbmNvZGluZy0+bGVuZ3RoIC0gc2l6ZW9mKCpleHQpOworCWlmIChtYXhfa2V5X2xlbiA8IDApCisJCWdvdG8gb3V0OworCisJaWR4ID0gZW5jb2RpbmctPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYOworCWlmIChpZHgpIHsKKwkJaWYgKChpZHggPCAxKSB8fCAoaWR4ID4gNCkpCisJCQlnb3RvIG91dDsKKwkJaWR4LS07CisJfSBlbHNlCisJCWlkeCA9IHByaXYtPnR4X2tleTsKKworCWVuY29kaW5nLT5mbGFncyA9IGlkeCArIDE7CisJbWVtc2V0KGV4dCwgMCwgc2l6ZW9mKCpleHQpKTsKKworCWV4dC0+YWxnID0gcHJpdi0+ZW5jb2RlX2FsZzsKKwlzd2l0Y2ggKHByaXYtPmVuY29kZV9hbGcpIHsKKwljYXNlIElXX0VOQ09ERV9BTEdfTk9ORToKKwkJZXh0LT5rZXlfbGVuID0gMDsKKwkJZW5jb2RpbmctPmZsYWdzIHw9IElXX0VOQ09ERV9ESVNBQkxFRDsKKwkJYnJlYWs7CisJY2FzZSBJV19FTkNPREVfQUxHX1dFUDoKKwkJZXh0LT5rZXlfbGVuID0gbWluX3QodTE2LCBsZTE2X3RvX2NwdShwcml2LT5rZXlzW2lkeF0ubGVuKSwKKwkJCQkgICAgIG1heF9rZXlfbGVuKTsKKwkJbWVtY3B5KGV4dC0+a2V5LCBwcml2LT5rZXlzW2lkeF0uZGF0YSwgZXh0LT5rZXlfbGVuKTsKKwkJZW5jb2RpbmctPmZsYWdzIHw9IElXX0VOQ09ERV9FTkFCTEVEOworCQlicmVhazsKKwljYXNlIElXX0VOQ09ERV9BTEdfVEtJUDoKKwkJZXh0LT5rZXlfbGVuID0gbWluX3QodTE2LCBzaXplb2Yoc3RydWN0IG9yaW5vY29fdGtpcF9rZXkpLAorCQkJCSAgICAgbWF4X2tleV9sZW4pOworCQltZW1jcHkoZXh0LT5rZXksICZwcml2LT50a2lwX2tleVtpZHhdLCBleHQtPmtleV9sZW4pOworCQllbmNvZGluZy0+ZmxhZ3MgfD0gSVdfRU5DT0RFX0VOQUJMRUQ7CisJCWJyZWFrOworCX0KKworCWVyciA9IDA7Cisgb3V0OgorCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IG9yaW5vY29faW9jdGxfc2V0X2F1dGgoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CisJc3RydWN0IGl3X3BhcmFtICpwYXJhbSA9ICZ3cnF1LT5wYXJhbTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQgPSAtRUlOUFJPR1JFU1M7CisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCXN3aXRjaCAocGFyYW0tPmZsYWdzICYgSVdfQVVUSF9JTkRFWCkgeworCWNhc2UgSVdfQVVUSF9XUEFfVkVSU0lPTjoKKwljYXNlIElXX0FVVEhfQ0lQSEVSX1BBSVJXSVNFOgorCWNhc2UgSVdfQVVUSF9DSVBIRVJfR1JPVVA6CisJY2FzZSBJV19BVVRIX1JYX1VORU5DUllQVEVEX0VBUE9MOgorCWNhc2UgSVdfQVVUSF9QUklWQUNZX0lOVk9LRUQ6CisJY2FzZSBJV19BVVRIX0RST1BfVU5FTkNSWVBURUQ6CisJCS8qCisJCSAqIG9yaW5vY28gZG9lcyBub3QgdXNlIHRoZXNlIHBhcmFtZXRlcnMKKwkJICovCisJCWJyZWFrOworCisJY2FzZSBJV19BVVRIX0tFWV9NR01UOgorCQkvKiB3bF9sa20gaW1wbGllcyB2YWx1ZSAyID09IFBTSyBmb3IgSGVybWVzIEkKKwkJICogd2hpY2ggdGllcyBpbiB3aXRoIFdFWFQKKwkJICogbm8gb3RoZXIgaGludHMgdGhvIDooCisJCSAqLworCQlwcml2LT5rZXlfbWdtdCA9IHBhcmFtLT52YWx1ZTsKKwkJYnJlYWs7CisKKwljYXNlIElXX0FVVEhfVEtJUF9DT1VOVEVSTUVBU1VSRVM6CisJCS8qIFdoZW4gY291bnRlcm1lYXN1cmVzIGFyZSBlbmFibGVkLCBzaHV0IGRvd24gdGhlCisJCSAqIGNhcmQ7IHdoZW4gZGlzYWJsZWQsIHJlLWVuYWJsZSB0aGUgY2FyZC4gVGhpcyBtdXN0CisJCSAqIHRha2UgZWZmZWN0IGltbWVkaWF0ZWx5LgorCQkgKgorCQkgKiBUT0RPOiBNYWtlIHN1cmUgdGhhdCB0aGUgRUFQT0wgbWVzc2FnZSBpcyBnZXR0aW5nCisJCSAqICAgICAgIG91dCBiZWZvcmUgY2FyZCBkaXNhYmxlZAorCQkgKi8KKwkJaWYgKHBhcmFtLT52YWx1ZSkgeworCQkJcHJpdi0+dGtpcF9jbV9hY3RpdmUgPSAxOworCQkJcmV0ID0gaGVybWVzX2VuYWJsZV9wb3J0KGh3LCAwKTsKKwkJfSBlbHNlIHsKKwkJCXByaXYtPnRraXBfY21fYWN0aXZlID0gMDsKKwkJCXJldCA9IGhlcm1lc19kaXNhYmxlX3BvcnQoaHcsIDApOworCQl9CisJCWJyZWFrOworCisJY2FzZSBJV19BVVRIXzgwMjExX0FVVEhfQUxHOgorCQlpZiAocGFyYW0tPnZhbHVlICYgSVdfQVVUSF9BTEdfU0hBUkVEX0tFWSkKKwkJCXByaXYtPndlcF9yZXN0cmljdCA9IDE7CisJCWVsc2UgaWYgKHBhcmFtLT52YWx1ZSAmIElXX0FVVEhfQUxHX09QRU5fU1lTVEVNKQorCQkJcHJpdi0+d2VwX3Jlc3RyaWN0ID0gMDsKKwkJZWxzZQorCQkJcmV0ID0gLUVJTlZBTDsKKwkJYnJlYWs7CisKKwljYXNlIElXX0FVVEhfV1BBX0VOQUJMRUQ6CisJCWlmIChwcml2LT5oYXNfd3BhKSB7CisJCQlwcml2LT53cGFfZW5hYmxlZCA9IHBhcmFtLT52YWx1ZSA/IDEgOiAwOworCQl9IGVsc2UgeworCQkJaWYgKHBhcmFtLT52YWx1ZSkKKwkJCQlyZXQgPSAtRU9QTk9UU1VQUDsKKwkJCS8qIGVsc2Ugc2lsZW50bHkgYWNjZXB0IGRpc2FibGUgb2YgV1BBICovCisJCQlwcml2LT53cGFfZW5hYmxlZCA9IDA7CisJCX0KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXQgPSAtRU9QTk9UU1VQUDsKKwl9CisKKwlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRfYXV0aChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBpd19wYXJhbSAqcGFyYW0gPSAmd3JxdS0+cGFyYW07CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQorCQlyZXR1cm4gLUVCVVNZOworCisJc3dpdGNoIChwYXJhbS0+ZmxhZ3MgJiBJV19BVVRIX0lOREVYKSB7CisJY2FzZSBJV19BVVRIX0tFWV9NR01UOgorCQlwYXJhbS0+dmFsdWUgPSBwcml2LT5rZXlfbWdtdDsKKwkJYnJlYWs7CisKKwljYXNlIElXX0FVVEhfVEtJUF9DT1VOVEVSTUVBU1VSRVM6CisJCXBhcmFtLT52YWx1ZSA9IHByaXYtPnRraXBfY21fYWN0aXZlOworCQlicmVhazsKKworCWNhc2UgSVdfQVVUSF84MDIxMV9BVVRIX0FMRzoKKwkJaWYgKHByaXYtPndlcF9yZXN0cmljdCkKKwkJCXBhcmFtLT52YWx1ZSA9IElXX0FVVEhfQUxHX1NIQVJFRF9LRVk7CisJCWVsc2UKKwkJCXBhcmFtLT52YWx1ZSA9IElXX0FVVEhfQUxHX09QRU5fU1lTVEVNOworCQlicmVhazsKKworCWNhc2UgSVdfQVVUSF9XUEFfRU5BQkxFRDoKKwkJcGFyYW0tPnZhbHVlID0gcHJpdi0+d3BhX2VuYWJsZWQ7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0ID0gLUVPUE5PVFNVUFA7CisJfQorCisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG9yaW5vY29faW9jdGxfc2V0X2dlbmllKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1OCAqYnVmOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKiBjdXQgb2ZmIGF0IElFRUU4MDIxMV9NQVhfREFUQV9MRU4gKi8KKwlpZiAoKHdycXUtPmRhdGEubGVuZ3RoID4gSUVFRTgwMjExX01BWF9EQVRBX0xFTikgfHwKKwkgICAgKHdycXUtPmRhdGEubGVuZ3RoICYmIChleHRyYSA9PSBOVUxMKSkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHdycXUtPmRhdGEubGVuZ3RoKSB7CisJCWJ1ZiA9IGttYWxsb2Mod3JxdS0+ZGF0YS5sZW5ndGgsIEdGUF9LRVJORUwpOworCQlpZiAoYnVmID09IE5VTEwpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQltZW1jcHkoYnVmLCBleHRyYSwgd3JxdS0+ZGF0YS5sZW5ndGgpOworCX0gZWxzZQorCQlidWYgPSBOVUxMOworCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApIHsKKwkJa2ZyZWUoYnVmKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlrZnJlZShwcml2LT53cGFfaWUpOworCXByaXYtPndwYV9pZSA9IGJ1ZjsKKwlwcml2LT53cGFfaWVfbGVuID0gd3JxdS0+ZGF0YS5sZW5ndGg7CisKKwlpZiAocHJpdi0+d3BhX2llKSB7CisJCS8qIExvb2tzIGxpa2Ugd2xfbGttIHdhbnRzIHRvIGNoZWNrIHRoZSBhdXRoIGFsZywgYW5kCisJCSAqIHNvbWVob3cgcGFzcyBpdCB0byB0aGUgZmlybXdhcmUuCisJCSAqIEluc3RlYWQgaXQganVzdCBjYWxscyB0aGUga2V5IG1nbXQgcmlkCisJCSAqICAgLSB3ZSBkbyB0aGlzIGluIHNldCBhdXRoLgorCQkgKi8KKwl9CisKKwlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9yaW5vY29faW9jdGxfZ2V0X2dlbmllKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBlcnIgPSAwOworCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCisJCXJldHVybiAtRUJVU1k7CisKKwlpZiAoKHByaXYtPndwYV9pZV9sZW4gPT0gMCkgfHwgKHByaXYtPndwYV9pZSA9PSBOVUxMKSkgeworCQl3cnF1LT5kYXRhLmxlbmd0aCA9IDA7CisJCWdvdG8gb3V0OworCX0KKworCWlmICh3cnF1LT5kYXRhLmxlbmd0aCA8IHByaXYtPndwYV9pZV9sZW4pIHsKKwkJZXJyID0gLUUyQklHOworCQlnb3RvIG91dDsKKwl9CisKKwl3cnF1LT5kYXRhLmxlbmd0aCA9IHByaXYtPndwYV9pZV9sZW47CisJbWVtY3B5KGV4dHJhLCBwcml2LT53cGFfaWUsIHByaXYtPndwYV9pZV9sZW4pOworCitvdXQ6CisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IG9yaW5vY29faW9jdGxfc2V0X21sbWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CisJc3RydWN0IGl3X21sbWUgKm1sbWUgPSAoc3RydWN0IGl3X21sbWUgKilleHRyYTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQgPSAwOworCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCisJCXJldHVybiAtRUJVU1k7CisKKwlzd2l0Y2ggKG1sbWUtPmNtZCkgeworCWNhc2UgSVdfTUxNRV9ERUFVVEg6CisJCS8qIHNpbGVudGx5IGlnbm9yZSAqLworCQlicmVhazsKKworCWNhc2UgSVdfTUxNRV9ESVNBU1NPQzoKKwl7CisJCXN0cnVjdCB7CisJCQl1OCBhZGRyW0VUSF9BTEVOXTsKKwkJCV9fbGUxNiByZWFzb25fY29kZTsKKwkJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgYnVmOworCisJCW1lbWNweShidWYuYWRkciwgbWxtZS0+YWRkci5zYV9kYXRhLCBFVEhfQUxFTik7CisJCWJ1Zi5yZWFzb25fY29kZSA9IGNwdV90b19sZTE2KG1sbWUtPnJlYXNvbl9jb2RlKTsKKwkJcmV0ID0gSEVSTUVTX1dSSVRFX1JFQ09SRChodywgVVNFUl9CQVAsCisJCQkJCSAgSEVSTUVTX1JJRF9DTkZESVNBU1NPQ0lBVEUsCisJCQkJCSAgJmJ1Zik7CisJCWJyZWFrOworCX0KKwlkZWZhdWx0OgorCQlyZXQgPSAtRU9QTk9UU1VQUDsKKwl9CisKKwlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRyZXRyeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgIHN0cnVjdCBpd19wYXJhbSAqcnJxLAorCQkJCSAgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OworCWludCBlcnIgPSAwOworCXUxNiBzaG9ydF9saW1pdCwgbG9uZ19saW1pdCwgbGlmZXRpbWU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQorCQlyZXR1cm4gLUVCVVNZOworCisJZXJyID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsIEhFUk1FU19SSURfU0hPUlRSRVRSWUxJTUlULAorCQkJCSAgJnNob3J0X2xpbWl0KTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0xPTkdSRVRSWUxJTUlULAorCQkJCSAgJmxvbmdfbGltaXQpOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCisJZXJyID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsIEhFUk1FU19SSURfTUFYVFJBTlNNSVRMSUZFVElNRSwKKwkJCQkgICZsaWZldGltZSk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwlycnEtPmRpc2FibGVkID0gMDsJCS8qIENhbid0IGJlIGRpc2FibGVkICovCisKKwkvKiBOb3RlIDogYnkgZGVmYXVsdCwgZGlzcGxheSB0aGUgcmV0cnkgbnVtYmVyICovCisJaWYgKChycnEtPmZsYWdzICYgSVdfUkVUUllfVFlQRSkgPT0gSVdfUkVUUllfTElGRVRJTUUpIHsKKwkJcnJxLT5mbGFncyA9IElXX1JFVFJZX0xJRkVUSU1FOworCQlycnEtPnZhbHVlID0gbGlmZXRpbWUgKiAxMDAwOwkvKiA/Pz8gKi8KKwl9IGVsc2UgeworCQkvKiBCeSBkZWZhdWx0LCBkaXNwbGF5IHRoZSBtaW4gbnVtYmVyICovCisJCWlmICgocnJxLT5mbGFncyAmIElXX1JFVFJZX0xPTkcpKSB7CisJCQlycnEtPmZsYWdzID0gSVdfUkVUUllfTElNSVQgfCBJV19SRVRSWV9MT05HOworCQkJcnJxLT52YWx1ZSA9IGxvbmdfbGltaXQ7CisJCX0gZWxzZSB7CisJCQlycnEtPmZsYWdzID0gSVdfUkVUUllfTElNSVQ7CisJCQlycnEtPnZhbHVlID0gc2hvcnRfbGltaXQ7CisJCQlpZiAoc2hvcnRfbGltaXQgIT0gbG9uZ19saW1pdCkKKwkJCQlycnEtPmZsYWdzIHw9IElXX1JFVFJZX1NIT1JUOworCQl9CisJfQorCisgb3V0OgorCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IG9yaW5vY29faW9jdGxfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICAgICAgIHZvaWQgKndycXUsCisJCQkgICAgICAgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisKKwlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCisJCXJldHVybiAtRVBFUk07CisKKwlpZiAoaW5mby0+Y21kID09IChTSU9DSVdGSVJTVFBSSVYgKyAweDEpKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogRm9yY2luZyByZXNldCFcbiIsIGRldi0+bmFtZSk7CisKKwkJLyogRmlybXdhcmUgcmVzZXQgKi8KKwkJb3Jpbm9jb19yZXNldCgmcHJpdi0+cmVzZXRfd29yayk7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBGb3JjZSBzY2hlZHVsaW5nIHJlc2V0IVxuIiwgZGV2LT5uYW1lKTsKKworCQlzY2hlZHVsZV93b3JrKCZwcml2LT5yZXNldF93b3JrKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvcmlub2NvX2lvY3RsX3NldGlic3Nwb3J0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgICAgdm9pZCAqd3JxdSwKKwkJCQkgICAgIGNoYXIgKmV4dHJhKQorCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJaW50IHZhbCA9ICooKGludCAqKSBleHRyYSk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQorCQlyZXR1cm4gLUVCVVNZOworCisJcHJpdi0+aWJzc19wb3J0ID0gdmFsIDsKKworCS8qIEFjdHVhbGx5IHVwZGF0ZSB0aGUgbW9kZSB3ZSBhcmUgdXNpbmcgKi8KKwlzZXRfcG9ydF90eXBlKHByaXYpOworCisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKwlyZXR1cm4gLUVJTlBST0dSRVNTOwkJLyogQ2FsbCBjb21taXQgaGFuZGxlciAqLworfQorCitzdGF0aWMgaW50IG9yaW5vY29faW9jdGxfZ2V0aWJzc3BvcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICAgICB2b2lkICp3cnF1LAorCQkJCSAgICAgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJaW50ICp2YWwgPSAoaW50ICopIGV4dHJhOworCisJKnZhbCA9IHByaXYtPmlic3NfcG9ydDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvcmlub2NvX2lvY3RsX3NldHBvcnQzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgdm9pZCAqd3JxdSwKKwkJCQkgIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCB2YWwgPSAqKChpbnQgKikgZXh0cmEpOworCWludCBlcnIgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCXN3aXRjaCAodmFsKSB7CisJY2FzZSAwOiAvKiBUcnkgdG8gZG8gSUVFRSBhZC1ob2MgbW9kZSAqLworCQlpZiAoIXByaXYtPmhhc19pYnNzKSB7CisJCQllcnIgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKwkJcHJpdi0+cHJlZmVyX3BvcnQzID0gMDsKKworCQlicmVhazsKKworCWNhc2UgMTogLyogVHJ5IHRvIGRvIEx1Y2VudCBwcm9wcmlldGFyeSBhZC1ob2MgbW9kZSAqLworCQlpZiAoIXByaXYtPmhhc19wb3J0MykgeworCQkJZXJyID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisJCXByaXYtPnByZWZlcl9wb3J0MyA9IDE7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZXJyID0gLUVJTlZBTDsKKwl9CisKKwlpZiAoIWVycikgeworCQkvKiBBY3R1YWxseSB1cGRhdGUgdGhlIG1vZGUgd2UgYXJlIHVzaW5nICovCisJCXNldF9wb3J0X3R5cGUocHJpdik7CisJCWVyciA9IC1FSU5QUk9HUkVTUzsKKwl9CisKKwlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2dldHBvcnQzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgdm9pZCAqd3JxdSwKKwkJCQkgIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCAqdmFsID0gKGludCAqKSBleHRyYTsKKworCSp2YWwgPSBwcml2LT5wcmVmZXJfcG9ydDM7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9zZXRwcmVhbWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICAgIHZvaWQgKndycXUsCisJCQkJICAgICBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCB2YWw7CisKKwlpZiAoIXByaXYtPmhhc19wcmVhbWJsZSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJLyogODAyLjExYiBoYXMgcmVjZW50bHkgZGVmaW5lZCBzb21lIHNob3J0IHByZWFtYmxlLgorCSAqIEJhc2ljYWxseSwgdGhlIFBoeSBoZWFkZXIgaGFzIGJlZW4gcmVkdWNlZCBpbiBzaXplLgorCSAqIFRoaXMgaW5jcmVhc2UgcGVyZm9ybWFuY2UsIGVzcGVjaWFsbHkgYXQgaGlnaCByYXRlcworCSAqICh0aGUgcHJlYW1ibGUgaXMgdHJhbnNtaXR0ZWQgYXQgMU1iL3MpLCB1bmZvcnR1bmF0ZWx5CisJICogdGhpcyBnaXZlIGNvbXBhdGliaWxpdHkgdHJvdWJsZXMuLi4gLSBKZWFuIElJICovCisJdmFsID0gKigoaW50ICopIGV4dHJhKTsKKworCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQorCQlyZXR1cm4gLUVCVVNZOworCisJaWYgKHZhbCkKKwkJcHJpdi0+cHJlYW1ibGUgPSAxOworCWVsc2UKKwkJcHJpdi0+cHJlYW1ibGUgPSAwOworCisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKworCXJldHVybiAtRUlOUFJPR1JFU1M7CQkvKiBDYWxsIGNvbW1pdCBoYW5kbGVyICovCit9CisKK3N0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRwcmVhbWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICAgIHZvaWQgKndycXUsCisJCQkJICAgICBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgKnZhbCA9IChpbnQgKikgZXh0cmE7CisKKwlpZiAoIXByaXYtPmhhc19wcmVhbWJsZSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJKnZhbCA9IHByaXYtPnByZWFtYmxlOworCXJldHVybiAwOworfQorCisvKiBpb2N0bCBpbnRlcmZhY2UgdG8gaGVybWVzX3JlYWRfbHR2KCkKKyAqIFRvIHVzZSB3aXRoIGl3cHJpdiwgcGFzcyB0aGUgUklEIGFzIHRoZSB0b2tlbiBhcmd1bWVudCwgZS5nLgorICogaXdwcml2IGdldF9yaWQgWzB4ZmMwMF0KKyAqIEF0IGxlYXN0IFdpcmVsZXNzIFRvb2xzIDI1IGlzIHJlcXVpcmVkIHRvIHVzZSBpd3ByaXYuCisgKiBGb3IgV2lyZWxlc3MgVG9vbHMgMjUgYW5kIDI2IGFwcGVuZCAiZHVtbXkiIGFyZSB0aGUgZW5kLiAqLworc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2dldHJpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJc3RydWN0IGl3X3BvaW50ICpkYXRhLAorCQkJCWNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKKwlpbnQgcmlkID0gZGF0YS0+ZmxhZ3M7CisJdTE2IGxlbmd0aDsKKwlpbnQgZXJyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKiBJdCdzIGEgImdldCIgZnVuY3Rpb24sIGJ1dCB3ZSBkb24ndCB3YW50IHVzZXJzIHRvIGFjY2VzcyB0aGUKKwkgKiBXRVAga2V5IGFuZCBvdGhlciByYXcgZmlybXdhcmUgZGF0YSAqLworCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKKwkJcmV0dXJuIC1FUEVSTTsKKworCWlmIChyaWQgPCAweGZjMDAgfHwgcmlkID4gMHhmZmZmKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQorCQlyZXR1cm4gLUVCVVNZOworCisJZXJyID0gaGVybWVzX3JlYWRfbHR2KGh3LCBVU0VSX0JBUCwgcmlkLCBNQVhfUklEX0xFTiwgJmxlbmd0aCwKKwkJCSAgICAgIGV4dHJhKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCWRhdGEtPmxlbmd0aCA9IG1pbl90KHUxNiwgSEVSTUVTX1JFQ0xFTl9UT19CWVRFUyhsZW5ndGgpLAorCQkJICAgICBNQVhfUklEX0xFTik7CisKKyBvdXQ6CisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKwlyZXR1cm4gZXJyOworfQorCisvKiBUcmlnZ2VyIGEgc2NhbiAobG9vayBmb3Igb3RoZXIgY2VsbHMgaW4gdGhlIHZpY2luaXR5KSAqLworc3RhdGljIGludCBvcmlub2NvX2lvY3RsX3NldHNjYW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgc3RydWN0IGl3X3BvaW50ICpzcnEsCisJCQkJIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKKwlzdHJ1Y3QgaXdfc2Nhbl9yZXEgKnNpID0gKHN0cnVjdCBpd19zY2FuX3JlcSAqKSBleHRyYTsKKwlpbnQgZXJyID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogTm90ZSA6IHlvdSBtYXkgaGF2ZSByZWFsaXNlZCB0aGF0LCBhcyB0aGlzIGlzIGEgU0VUIG9wZXJhdGlvbiwKKwkgKiB0aGlzIGlzIHByaXZpbGVnZWQgYW5kIHRoZXJlZm9yZSBhIG5vcm1hbCB1c2VyIGNhbid0CisJICogcGVyZm9ybSBzY2FubmluZy4KKwkgKiBUaGlzIGlzIG5vdCBhbiBlcnJvciwgd2hpbGUgdGhlIGRldmljZSBwZXJmb3JtIHNjYW5uaW5nLAorCSAqIHRyYWZmaWMgZG9lc24ndCBmbG93LCBzbyBpdCdzIGEgcGVyZmVjdCBEb1MuLi4KKwkgKiBKZWFuIElJICovCisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCS8qIFNjYW5uaW5nIHdpdGggcG9ydCAwIGRpc2FibGVkIHdvdWxkIGZhaWwgKi8KKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkgeworCQllcnIgPSAtRU5FVERPV047CisJCWdvdG8gb3V0OworCX0KKworCS8qIEluIG1vbml0b3IgbW9kZSwgdGhlIHNjYW4gcmVzdWx0cyBhcmUgYWx3YXlzIGVtcHR5LgorCSAqIFByb2JlIHJlc3BvbnNlcyBhcmUgcGFzc2VkIHRvIHRoZSBkcml2ZXIgYXMgcmVjZWl2ZWQKKwkgKiBmcmFtZXMgYW5kIGNvdWxkIGJlIHByb2Nlc3NlZCBpbiBzb2Z0d2FyZS4gKi8KKwlpZiAocHJpdi0+aXdfbW9kZSA9PSBJV19NT0RFX01PTklUT1IpIHsKKwkJZXJyID0gLUVPUE5PVFNVUFA7CisJCWdvdG8gb3V0OworCX0KKworCS8qIE5vdGUgOiBiZWNhdXNlIHdlIGRvbid0IGxvY2sgb3V0IHRoZSBpcnEgaGFuZGxlciwgdGhlIHdheQorCSAqIHdlIGFjY2VzcyBzY2FuIHZhcmlhYmxlcyBpbiBwcml2IGlzIGNyaXRpY2FsLgorCSAqCW8gc2Nhbl9pbnByb2dyZXNzIDogbm90IHRvdWNoZWQgYnkgaXJxIGhhbmRsZXIKKwkgKglvIHNjYW5fbW9kZSA6IG5vdCB0b3VjaGVkIGJ5IGlycSBoYW5kbGVyCisJICogQmVmb3JlIG1vZGlmeWluZyBhbnl0aGluZyBvbiB0aG9zZSB2YXJpYWJsZXMsIHBsZWFzZSB0aGluayBoYXJkICEKKwkgKiBKZWFuIElJICovCisKKwkvKiBTYXZlIGZsYWdzICovCisJcHJpdi0+c2Nhbl9tb2RlID0gc3JxLT5mbGFnczsKKworCS8qIEFsd2F5cyB0cmlnZ2VyIHNjYW5uaW5nLCBldmVuIGlmIGl0J3MgaW4gcHJvZ3Jlc3MuCisJICogVGhpcyB3YXksIGlmIHRoZSBpbmZvIGZyYW1lIGdldCBsb3N0LCB3ZSB3aWxsIHJlY292ZXIgc29tZXdoYXQKKwkgKiBncmFjZWZ1bGx5ICAtIEplYW4gSUkgKi8KKworCWlmIChwcml2LT5oYXNfaG9zdHNjYW4pIHsKKwkJc3dpdGNoIChwcml2LT5maXJtd2FyZV90eXBlKSB7CisJCWNhc2UgRklSTVdBUkVfVFlQRV9TWU1CT0w6CisJCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCisJCQkJCQlIRVJNRVNfUklEX0NORkhPU1RTQ0FOX1NZTUJPTCwKKwkJCQkJCUhFUk1FU19IT1NUU0NBTl9TWU1CT0xfT05DRSB8CisJCQkJCQlIRVJNRVNfSE9TVFNDQU5fU1lNQk9MX0JDQVNUKTsKKwkJCWJyZWFrOworCQljYXNlIEZJUk1XQVJFX1RZUEVfSU5URVJTSUw6IHsKKwkJCV9fbGUxNiByZXFbM107CisKKwkJCXJlcVswXSA9IGNwdV90b19sZTE2KDB4M2ZmZik7CS8qIEFsbCBjaGFubmVscyAqLworCQkJcmVxWzFdID0gY3B1X3RvX2xlMTYoMHgwMDAxKTsJLyogcmF0ZSAxIE1icHMgKi8KKwkJCXJlcVsyXSA9IDA7CQkJLyogQW55IEVTU0lEICovCisJCQllcnIgPSBIRVJNRVNfV1JJVEVfUkVDT1JEKGh3LCBVU0VSX0JBUCwKKwkJCQkJCSAgSEVSTUVTX1JJRF9DTkZIT1NUU0NBTiwgJnJlcSk7CisJCX0KKwkJYnJlYWs7CisJCWNhc2UgRklSTVdBUkVfVFlQRV9BR0VSRToKKwkJCWlmIChwcml2LT5zY2FuX21vZGUgJiBJV19TQ0FOX1RISVNfRVNTSUQpIHsKKwkJCQlzdHJ1Y3QgaGVybWVzX2lkc3RyaW5nIGlkYnVmOworCQkJCXNpemVfdCBsZW4gPSBtaW4oc2l6ZW9mKGlkYnVmLnZhbCksCisJCQkJCQkgKHNpemVfdCkgc2ktPmVzc2lkX2xlbik7CisJCQkJaWRidWYubGVuID0gY3B1X3RvX2xlMTYobGVuKTsKKwkJCQltZW1jcHkoaWRidWYudmFsLCBzaS0+ZXNzaWQsIGxlbik7CisKKwkJCQllcnIgPSBoZXJtZXNfd3JpdGVfbHR2KGh3LCBVU0VSX0JBUCwKKwkJCQkJICAgICAgIEhFUk1FU19SSURfQ05GU0NBTlNTSURfQUdFUkUsCisJCQkJCSAgICAgICBIRVJNRVNfQllURVNfVE9fUkVDTEVOKGxlbiArIDIpLAorCQkJCQkgICAgICAgJmlkYnVmKTsKKwkJCX0gZWxzZQorCQkJCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKKwkJCQkJCSAgIEhFUk1FU19SSURfQ05GU0NBTlNTSURfQUdFUkUsCisJCQkJCQkgICAwKTsJLyogQW55IEVTU0lEICovCisJCQlpZiAoZXJyKQorCQkJCWJyZWFrOworCisJCQlpZiAocHJpdi0+aGFzX2V4dF9zY2FuKSB7CisJCQkJLyogQ2xlYXIgc2NhbiByZXN1bHRzIGF0IHRoZSBzdGFydCBvZgorCQkJCSAqIGFuIGV4dGVuZGVkIHNjYW4gKi8KKwkJCQlvcmlub2NvX2NsZWFyX3NjYW5fcmVzdWx0cyhwcml2LAorCQkJCQkJbXNlY3NfdG9famlmZmllcygxNTAwMCkpOworCisJCQkJLyogVE9ETzogSXMgdGhpcyBhdmFpbGFibGUgb24gb2xkZXIgZmlybXdhcmU/CisJCQkJICogICBDYW4gd2UgdXNlIGl0IHRvIHNjYW4gc3BlY2lmaWMgY2hhbm5lbHMKKwkJCQkgKiAgIGZvciBJV19TQ0FOX1RISVNfRlJFUT8gKi8KKwkJCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCisJCQkJCQlIRVJNRVNfUklEX0NORlNDQU5DSEFOTkVMUzJHSFosCisJCQkJCQkweDdGRkYpOworCQkJCWlmIChlcnIpCisJCQkJCWdvdG8gb3V0OworCisJCQkJZXJyID0gaGVybWVzX2lucXVpcmUoaHcsCisJCQkJCQkgICAgIEhFUk1FU19JTlFfQ0hBTk5FTElORk8pOworCQkJfSBlbHNlCisJCQkJZXJyID0gaGVybWVzX2lucXVpcmUoaHcsIEhFUk1FU19JTlFfU0NBTik7CisJCQlicmVhazsKKwkJfQorCX0gZWxzZQorCQllcnIgPSBoZXJtZXNfaW5xdWlyZShodywgSEVSTUVTX0lOUV9TQ0FOKTsKKworCS8qIE9uZSBtb3JlIGNsaWVudCAqLworCWlmICghZXJyKQorCQlwcml2LT5zY2FuX2lucHJvZ3Jlc3MgPSAxOworCisgb3V0OgorCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CisJcmV0dXJuIGVycjsKK30KKworI2RlZmluZSBNQVhfQ1VTVE9NX0xFTiA2NAorCisvKiBUcmFuc2xhdGUgc2NhbiBkYXRhIHJldHVybmVkIGZyb20gdGhlIGNhcmQgdG8gYSBjYXJkIGluZGVwZW5kYW50CisgKiBmb3JtYXQgdGhhdCB0aGUgV2lyZWxlc3MgVG9vbHMgd2lsbCB1bmRlcnN0YW5kIC0gSmVhbiBJSSAqLworc3RhdGljIGlubGluZSBjaGFyICpvcmlub2NvX3RyYW5zbGF0ZV9zY2FuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJCSAgIGNoYXIgKmN1cnJlbnRfZXYsCisJCQkJCSAgIGNoYXIgKmVuZF9idWYsCisJCQkJCSAgIHVuaW9uIGhlcm1lc19zY2FuX2luZm8gKmJzcywKKwkJCQkJICAgdW5zaWduZWQgbG9uZyBsYXN0X3NjYW5uZWQpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJdTE2CQkJY2FwYWJpbGl0aWVzOworCXUxNgkJCWNoYW5uZWw7CisJc3RydWN0IGl3X2V2ZW50CQlpd2U7CQkvKiBUZW1wb3JhcnkgYnVmZmVyICovCisJY2hhciBjdXN0b21bTUFYX0NVU1RPTV9MRU5dOworCisJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKKworCS8qIEZpcnN0IGVudHJ5ICpNVVNUKiBiZSB0aGUgQVAgTUFDIGFkZHJlc3MgKi8KKwlpd2UuY21kID0gU0lPQ0dJV0FQOworCWl3ZS51LmFwX2FkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOworCW1lbWNweShpd2UudS5hcF9hZGRyLnNhX2RhdGEsIGJzcy0+YS5ic3NpZCwgRVRIX0FMRU4pOworCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAorCQkJCQkgICZpd2UsIElXX0VWX0FERFJfTEVOKTsKKworCS8qIE90aGVyIGVudHJpZXMgd2lsbCBiZSBkaXNwbGF5ZWQgaW4gdGhlIG9yZGVyIHdlIGdpdmUgdGhlbSAqLworCisJLyogQWRkIHRoZSBFU1NJRCAqLworCWl3ZS51LmRhdGEubGVuZ3RoID0gbGUxNl90b19jcHUoYnNzLT5hLmVzc2lkX2xlbik7CisJaWYgKGl3ZS51LmRhdGEubGVuZ3RoID4gMzIpCisJCWl3ZS51LmRhdGEubGVuZ3RoID0gMzI7CisJaXdlLmNtZCA9IFNJT0NHSVdFU1NJRDsKKwlpd2UudS5kYXRhLmZsYWdzID0gMTsKKwljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKKwkJCQkJICAmaXdlLCBic3MtPmEuZXNzaWQpOworCisJLyogQWRkIG1vZGUgKi8KKwlpd2UuY21kID0gU0lPQ0dJV01PREU7CisJY2FwYWJpbGl0aWVzID0gbGUxNl90b19jcHUoYnNzLT5hLmNhcGFiaWxpdGllcyk7CisJaWYgKGNhcGFiaWxpdGllcyAmIChXTEFOX0NBUEFCSUxJVFlfRVNTIHwgV0xBTl9DQVBBQklMSVRZX0lCU1MpKSB7CisJCWlmIChjYXBhYmlsaXRpZXMgJiBXTEFOX0NBUEFCSUxJVFlfRVNTKQorCQkJaXdlLnUubW9kZSA9IElXX01PREVfTUFTVEVSOworCQllbHNlCisJCQlpd2UudS5tb2RlID0gSVdfTU9ERV9BREhPQzsKKwkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCisJCQkJCQkgICZpd2UsIElXX0VWX1VJTlRfTEVOKTsKKwl9CisKKwljaGFubmVsID0gYnNzLT5zLmNoYW5uZWw7CisJaWYgKChjaGFubmVsID49IDEpICYmIChjaGFubmVsIDw9IE5VTV9DSEFOTkVMUykpIHsKKwkJLyogQWRkIGNoYW5uZWwgYW5kIGZyZXF1ZW5jeSAqLworCQlpd2UuY21kID0gU0lPQ0dJV0ZSRVE7CisJCWl3ZS51LmZyZXEubSA9IGNoYW5uZWw7CisJCWl3ZS51LmZyZXEuZSA9IDA7CisJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAorCQkJCQkJICAmaXdlLCBJV19FVl9GUkVRX0xFTik7CisKKwkJaXdlLnUuZnJlcS5tID0gaWVlZTgwMjExX2Rzc3NfY2hhbl90b19mcmVxKGNoYW5uZWwpICogMTAwMDAwOworCQlpd2UudS5mcmVxLmUgPSAxOworCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKKwkJCQkJCSAgJml3ZSwgSVdfRVZfRlJFUV9MRU4pOworCX0KKworCS8qIEFkZCBxdWFsaXR5IHN0YXRpc3RpY3MuIGxldmVsIGFuZCBub2lzZSBpbiBkQi4gTm8gbGluayBxdWFsaXR5ICovCisJaXdlLmNtZCA9IElXRVZRVUFMOworCWl3ZS51LnF1YWwudXBkYXRlZCA9IElXX1FVQUxfREJNIHwgSVdfUVVBTF9RVUFMX0lOVkFMSUQ7CisJaXdlLnUucXVhbC5sZXZlbCA9IChfX3U4KSBsZTE2X3RvX2NwdShic3MtPmEubGV2ZWwpIC0gMHg5NTsKKwlpd2UudS5xdWFsLm5vaXNlID0gKF9fdTgpIGxlMTZfdG9fY3B1KGJzcy0+YS5ub2lzZSkgLSAweDk1OworCS8qIFdpcmVsZXNzIHRvb2xzIHByaW9yIHRvIDI3LnByZTIyIHdpbGwgc2hvdyBsaW5rIHF1YWxpdHkKKwkgKiBhbnl3YXksIHNvIHdlIHByb3ZpZGUgYSByZWFzb25hYmxlIHZhbHVlLiAqLworCWlmIChpd2UudS5xdWFsLmxldmVsID4gaXdlLnUucXVhbC5ub2lzZSkKKwkJaXdlLnUucXVhbC5xdWFsID0gaXdlLnUucXVhbC5sZXZlbCAtIGl3ZS51LnF1YWwubm9pc2U7CisJZWxzZQorCQlpd2UudS5xdWFsLnF1YWwgPSAwOworCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAorCQkJCQkgICZpd2UsIElXX0VWX1FVQUxfTEVOKTsKKworCS8qIEFkZCBlbmNyeXB0aW9uIGNhcGFiaWxpdHkgKi8KKwlpd2UuY21kID0gU0lPQ0dJV0VOQ09ERTsKKwlpZiAoY2FwYWJpbGl0aWVzICYgV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1kpCisJCWl3ZS51LmRhdGEuZmxhZ3MgPSBJV19FTkNPREVfRU5BQkxFRCB8IElXX0VOQ09ERV9OT0tFWTsKKwllbHNlCisJCWl3ZS51LmRhdGEuZmxhZ3MgPSBJV19FTkNPREVfRElTQUJMRUQ7CisJaXdlLnUuZGF0YS5sZW5ndGggPSAwOworCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAorCQkJCQkgICZpd2UsIE5VTEwpOworCisJLyogQml0IHJhdGUgaXMgbm90IGF2YWlsYWJsZSBpbiBMdWNlbnQvQWdlcmUgZmlybXdhcmVzICovCisJaWYgKHByaXYtPmZpcm13YXJlX3R5cGUgIT0gRklSTVdBUkVfVFlQRV9BR0VSRSkgeworCQljaGFyICpjdXJyZW50X3ZhbCA9IGN1cnJlbnRfZXYgKyBpd2Vfc3RyZWFtX2xjcF9sZW4oaW5mbyk7CisJCWludCBpOworCQlpbnQgc3RlcDsKKworCQlpZiAocHJpdi0+ZmlybXdhcmVfdHlwZSA9PSBGSVJNV0FSRV9UWVBFX1NZTUJPTCkKKwkJCXN0ZXAgPSAyOworCQllbHNlCisJCQlzdGVwID0gMTsKKworCQlpd2UuY21kID0gU0lPQ0dJV1JBVEU7CisJCS8qIFRob3NlIHR3byBmbGFncyBhcmUgaWdub3JlZC4uLiAqLworCQlpd2UudS5iaXRyYXRlLmZpeGVkID0gaXdlLnUuYml0cmF0ZS5kaXNhYmxlZCA9IDA7CisJCS8qIE1heCAxMCB2YWx1ZXMgKi8KKwkJZm9yIChpID0gMDsgaSA8IDEwOyBpICs9IHN0ZXApIHsKKwkJCS8qIE5VTEwgdGVybWluYXRlZCAqLworCQkJaWYgKGJzcy0+cC5yYXRlc1tpXSA9PSAweDApCisJCQkJYnJlYWs7CisJCQkvKiBCaXQgcmF0ZSBnaXZlbiBpbiA1MDAga2IvcyB1bml0cyAoKyAweDgwKSAqLworCQkJaXdlLnUuYml0cmF0ZS52YWx1ZSA9CisJCQkJKChic3MtPnAucmF0ZXNbaV0gJiAweDdmKSAqIDUwMDAwMCk7CisJCQljdXJyZW50X3ZhbCA9IGl3ZV9zdHJlYW1fYWRkX3ZhbHVlKGluZm8sIGN1cnJlbnRfZXYsCisJCQkJCQkJICAgY3VycmVudF92YWwsCisJCQkJCQkJICAgZW5kX2J1ZiwgJml3ZSwKKwkJCQkJCQkgICBJV19FVl9QQVJBTV9MRU4pOworCQl9CisJCS8qIENoZWNrIGlmIHdlIGFkZGVkIGFueSBldmVudCAqLworCQlpZiAoKGN1cnJlbnRfdmFsIC0gY3VycmVudF9ldikgPiBpd2Vfc3RyZWFtX2xjcF9sZW4oaW5mbykpCisJCQljdXJyZW50X2V2ID0gY3VycmVudF92YWw7CisJfQorCisJLyogQmVhY29uIGludGVydmFsICovCisJaXdlLmNtZCA9IElXRVZDVVNUT007CisJaXdlLnUuZGF0YS5sZW5ndGggPSBzbnByaW50ZihjdXN0b20sIE1BWF9DVVNUT01fTEVOLAorCQkJCSAgICAgImJjbl9pbnQ9JWQiLAorCQkJCSAgICAgbGUxNl90b19jcHUoYnNzLT5hLmJlYWNvbl9pbnRlcnYpKTsKKwlpZiAoaXdlLnUuZGF0YS5sZW5ndGgpCisJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAorCQkJCQkJICAmaXdlLCBjdXN0b20pOworCisJLyogQ2FwYWJpbGl0ZXMgKi8KKwlpd2UuY21kID0gSVdFVkNVU1RPTTsKKwlpd2UudS5kYXRhLmxlbmd0aCA9IHNucHJpbnRmKGN1c3RvbSwgTUFYX0NVU1RPTV9MRU4sCisJCQkJICAgICAiY2FwYWI9MHglMDR4IiwKKwkJCQkgICAgIGNhcGFiaWxpdGllcyk7CisJaWYgKGl3ZS51LmRhdGEubGVuZ3RoKQorCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKKwkJCQkJCSAgJml3ZSwgY3VzdG9tKTsKKworCS8qIEFkZCBFWFRSQTogQWdlIHRvIGRpc3BsYXkgc2Vjb25kcyBzaW5jZSBsYXN0IGJlYWNvbi9wcm9iZSByZXNwb25zZQorCSAqIGZvciBnaXZlbiBuZXR3b3JrLiAqLworCWl3ZS5jbWQgPSBJV0VWQ1VTVE9NOworCWl3ZS51LmRhdGEubGVuZ3RoID0gc25wcmludGYoY3VzdG9tLCBNQVhfQ1VTVE9NX0xFTiwKKwkJCQkgICAgICIgTGFzdCBiZWFjb246ICVkbXMgYWdvIiwKKwkJCQkgICAgIGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtIGxhc3Rfc2Nhbm5lZCkpOworCWlmIChpd2UudS5kYXRhLmxlbmd0aCkKKwkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCisJCQkJCQkgICZpd2UsIGN1c3RvbSk7CisKKwlyZXR1cm4gY3VycmVudF9ldjsKK30KKworc3RhdGljIGlubGluZSBjaGFyICpvcmlub2NvX3RyYW5zbGF0ZV9leHRfc2NhbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCQkgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkJICAgICAgIGNoYXIgKmN1cnJlbnRfZXYsCisJCQkJCSAgICAgICBjaGFyICplbmRfYnVmLAorCQkJCQkgICAgICAgc3RydWN0IGFnZXJlX2V4dF9zY2FuX2luZm8gKmJzcywKKwkJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgbGFzdF9zY2FubmVkKQoreworCXUxNgkJCWNhcGFiaWxpdGllczsKKwl1MTYJCQljaGFubmVsOworCXN0cnVjdCBpd19ldmVudAkJaXdlOwkJLyogVGVtcG9yYXJ5IGJ1ZmZlciAqLworCWNoYXIgY3VzdG9tW01BWF9DVVNUT01fTEVOXTsKKwl1OCAqaWU7CisKKwltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOworCisJLyogRmlyc3QgZW50cnkgKk1VU1QqIGJlIHRoZSBBUCBNQUMgYWRkcmVzcyAqLworCWl3ZS5jbWQgPSBTSU9DR0lXQVA7CisJaXdlLnUuYXBfYWRkci5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7CisJbWVtY3B5KGl3ZS51LmFwX2FkZHIuc2FfZGF0YSwgYnNzLT5ic3NpZCwgRVRIX0FMRU4pOworCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAorCQkJCQkgICZpd2UsIElXX0VWX0FERFJfTEVOKTsKKworCS8qIE90aGVyIGVudHJpZXMgd2lsbCBiZSBkaXNwbGF5ZWQgaW4gdGhlIG9yZGVyIHdlIGdpdmUgdGhlbSAqLworCisJLyogQWRkIHRoZSBFU1NJRCAqLworCWllID0gYnNzLT5kYXRhOworCWl3ZS51LmRhdGEubGVuZ3RoID0gaWVbMV07CisJaWYgKGl3ZS51LmRhdGEubGVuZ3RoKSB7CisJCWlmIChpd2UudS5kYXRhLmxlbmd0aCA+IDMyKQorCQkJaXdlLnUuZGF0YS5sZW5ndGggPSAzMjsKKwkJaXdlLmNtZCA9IFNJT0NHSVdFU1NJRDsKKwkJaXdlLnUuZGF0YS5mbGFncyA9IDE7CisJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAorCQkJCQkJICAmaXdlLCAmaWVbMl0pOworCX0KKworCS8qIEFkZCBtb2RlICovCisJY2FwYWJpbGl0aWVzID0gbGUxNl90b19jcHUoYnNzLT5jYXBhYmlsaXRpZXMpOworCWlmIChjYXBhYmlsaXRpZXMgJiAoV0xBTl9DQVBBQklMSVRZX0VTUyB8IFdMQU5fQ0FQQUJJTElUWV9JQlNTKSkgeworCQlpd2UuY21kID0gU0lPQ0dJV01PREU7CisJCWlmIChjYXBhYmlsaXRpZXMgJiBXTEFOX0NBUEFCSUxJVFlfRVNTKQorCQkJaXdlLnUubW9kZSA9IElXX01PREVfTUFTVEVSOworCQllbHNlCisJCQlpd2UudS5tb2RlID0gSVdfTU9ERV9BREhPQzsKKwkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCisJCQkJCQkgICZpd2UsIElXX0VWX1VJTlRfTEVOKTsKKwl9CisKKwlpZSA9IG9yaW5vY29fZ2V0X2llKGJzcy0+ZGF0YSwgc2l6ZW9mKGJzcy0+ZGF0YSksIFdMQU5fRUlEX0RTX1BBUkFNUyk7CisJY2hhbm5lbCA9IGllID8gaWVbMl0gOiAwOworCWlmICgoY2hhbm5lbCA+PSAxKSAmJiAoY2hhbm5lbCA8PSBOVU1fQ0hBTk5FTFMpKSB7CisJCS8qIEFkZCBjaGFubmVsIGFuZCBmcmVxdWVuY3kgKi8KKwkJaXdlLmNtZCA9IFNJT0NHSVdGUkVROworCQlpd2UudS5mcmVxLm0gPSBjaGFubmVsOworCQlpd2UudS5mcmVxLmUgPSAwOworCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKKwkJCQkJCSAgJml3ZSwgSVdfRVZfRlJFUV9MRU4pOworCisJCWl3ZS51LmZyZXEubSA9IGllZWU4MDIxMV9kc3NzX2NoYW5fdG9fZnJlcShjaGFubmVsKSAqIDEwMDAwMDsKKwkJaXdlLnUuZnJlcS5lID0gMTsKKwkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCisJCQkJCQkgICZpd2UsIElXX0VWX0ZSRVFfTEVOKTsKKwl9CisKKwkvKiBBZGQgcXVhbGl0eSBzdGF0aXN0aWNzLiBsZXZlbCBhbmQgbm9pc2UgaW4gZEIuIE5vIGxpbmsgcXVhbGl0eSAqLworCWl3ZS5jbWQgPSBJV0VWUVVBTDsKKwlpd2UudS5xdWFsLnVwZGF0ZWQgPSBJV19RVUFMX0RCTSB8IElXX1FVQUxfUVVBTF9JTlZBTElEOworCWl3ZS51LnF1YWwubGV2ZWwgPSBic3MtPmxldmVsIC0gMHg5NTsKKwlpd2UudS5xdWFsLm5vaXNlID0gYnNzLT5ub2lzZSAtIDB4OTU7CisJLyogV2lyZWxlc3MgdG9vbHMgcHJpb3IgdG8gMjcucHJlMjIgd2lsbCBzaG93IGxpbmsgcXVhbGl0eQorCSAqIGFueXdheSwgc28gd2UgcHJvdmlkZSBhIHJlYXNvbmFibGUgdmFsdWUuICovCisJaWYgKGl3ZS51LnF1YWwubGV2ZWwgPiBpd2UudS5xdWFsLm5vaXNlKQorCQlpd2UudS5xdWFsLnF1YWwgPSBpd2UudS5xdWFsLmxldmVsIC0gaXdlLnUucXVhbC5ub2lzZTsKKwllbHNlCisJCWl3ZS51LnF1YWwucXVhbCA9IDA7CisJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCisJCQkJCSAgJml3ZSwgSVdfRVZfUVVBTF9MRU4pOworCisJLyogQWRkIGVuY3J5cHRpb24gY2FwYWJpbGl0eSAqLworCWl3ZS5jbWQgPSBTSU9DR0lXRU5DT0RFOworCWlmIChjYXBhYmlsaXRpZXMgJiBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWSkKKwkJaXdlLnUuZGF0YS5mbGFncyA9IElXX0VOQ09ERV9FTkFCTEVEIHwgSVdfRU5DT0RFX05PS0VZOworCWVsc2UKKwkJaXdlLnUuZGF0YS5mbGFncyA9IElXX0VOQ09ERV9ESVNBQkxFRDsKKwlpd2UudS5kYXRhLmxlbmd0aCA9IDA7CisJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCisJCQkJCSAgJml3ZSwgTlVMTCk7CisKKwkvKiBXUEEgSUUgKi8KKwlpZSA9IG9yaW5vY29fZ2V0X3dwYV9pZShic3MtPmRhdGEsIHNpemVvZihic3MtPmRhdGEpKTsKKwlpZiAoaWUpIHsKKwkJaXdlLmNtZCA9IElXRVZHRU5JRTsKKwkJaXdlLnUuZGF0YS5sZW5ndGggPSBpZVsxXSArIDI7CisJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAorCQkJCQkJICAmaXdlLCBpZSk7CisJfQorCisJLyogUlNOIElFICovCisJaWUgPSBvcmlub2NvX2dldF9pZShic3MtPmRhdGEsIHNpemVvZihic3MtPmRhdGEpLCBXTEFOX0VJRF9SU04pOworCWlmIChpZSkgeworCQlpd2UuY21kID0gSVdFVkdFTklFOworCQlpd2UudS5kYXRhLmxlbmd0aCA9IGllWzFdICsgMjsKKwkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCisJCQkJCQkgICZpd2UsIGllKTsKKwl9CisKKwlpZSA9IG9yaW5vY29fZ2V0X2llKGJzcy0+ZGF0YSwgc2l6ZW9mKGJzcy0+ZGF0YSksIFdMQU5fRUlEX1NVUFBfUkFURVMpOworCWlmIChpZSkgeworCQljaGFyICpwID0gY3VycmVudF9ldiArIGl3ZV9zdHJlYW1fbGNwX2xlbihpbmZvKTsKKwkJaW50IGk7CisKKwkJaXdlLmNtZCA9IFNJT0NHSVdSQVRFOworCQkvKiBUaG9zZSB0d28gZmxhZ3MgYXJlIGlnbm9yZWQuLi4gKi8KKwkJaXdlLnUuYml0cmF0ZS5maXhlZCA9IGl3ZS51LmJpdHJhdGUuZGlzYWJsZWQgPSAwOworCisJCWZvciAoaSA9IDI7IGkgPCAoaWVbMV0gKyAyKTsgaSsrKSB7CisJCQlpd2UudS5iaXRyYXRlLnZhbHVlID0gKChpZVtpXSAmIDB4N0YpICogNTAwMDAwKTsKKwkJCXAgPSBpd2Vfc3RyZWFtX2FkZF92YWx1ZShpbmZvLCBjdXJyZW50X2V2LCBwLCBlbmRfYnVmLAorCQkJCQkJICZpd2UsIElXX0VWX1BBUkFNX0xFTik7CisJCX0KKwkJLyogQ2hlY2sgaWYgd2UgYWRkZWQgYW55IGV2ZW50ICovCisJCWlmIChwID4gKGN1cnJlbnRfZXYgKyBpd2Vfc3RyZWFtX2xjcF9sZW4oaW5mbykpKQorCQkJY3VycmVudF9ldiA9IHA7CisJfQorCisJLyogVGltZXN0YW1wICovCisJaXdlLmNtZCA9IElXRVZDVVNUT007CisJaXdlLnUuZGF0YS5sZW5ndGggPQorCQlzbnByaW50ZihjdXN0b20sIE1BWF9DVVNUT01fTEVOLCAidHNmPSUwMTZsbHgiLAorCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpIGxlNjRfdG9fY3B1KGJzcy0+dGltZXN0YW1wKSk7CisJaWYgKGl3ZS51LmRhdGEubGVuZ3RoKQorCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKKwkJCQkJCSAgJml3ZSwgY3VzdG9tKTsKKworCS8qIEJlYWNvbiBpbnRlcnZhbCAqLworCWl3ZS5jbWQgPSBJV0VWQ1VTVE9NOworCWl3ZS51LmRhdGEubGVuZ3RoID0gc25wcmludGYoY3VzdG9tLCBNQVhfQ1VTVE9NX0xFTiwKKwkJCQkgICAgICJiY25faW50PSVkIiwKKwkJCQkgICAgIGxlMTZfdG9fY3B1KGJzcy0+YmVhY29uX2ludGVydmFsKSk7CisJaWYgKGl3ZS51LmRhdGEubGVuZ3RoKQorCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKKwkJCQkJCSAgJml3ZSwgY3VzdG9tKTsKKworCS8qIENhcGFiaWxpdGVzICovCisJaXdlLmNtZCA9IElXRVZDVVNUT007CisJaXdlLnUuZGF0YS5sZW5ndGggPSBzbnByaW50ZihjdXN0b20sIE1BWF9DVVNUT01fTEVOLAorCQkJCSAgICAgImNhcGFiPTB4JTA0eCIsCisJCQkJICAgICBjYXBhYmlsaXRpZXMpOworCWlmIChpd2UudS5kYXRhLmxlbmd0aCkKKwkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCisJCQkJCQkgICZpd2UsIGN1c3RvbSk7CisKKwkvKiBBZGQgRVhUUkE6IEFnZSB0byBkaXNwbGF5IHNlY29uZHMgc2luY2UgbGFzdCBiZWFjb24vcHJvYmUgcmVzcG9uc2UKKwkgKiBmb3IgZ2l2ZW4gbmV0d29yay4gKi8KKwlpd2UuY21kID0gSVdFVkNVU1RPTTsKKwlpd2UudS5kYXRhLmxlbmd0aCA9IHNucHJpbnRmKGN1c3RvbSwgTUFYX0NVU1RPTV9MRU4sCisJCQkJICAgICAiIExhc3QgYmVhY29uOiAlZG1zIGFnbyIsCisJCQkJICAgICBqaWZmaWVzX3RvX21zZWNzKGppZmZpZXMgLSBsYXN0X3NjYW5uZWQpKTsKKwlpZiAoaXdlLnUuZGF0YS5sZW5ndGgpCisJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAorCQkJCQkJICAmaXdlLCBjdXN0b20pOworCisJcmV0dXJuIGN1cnJlbnRfZXY7Cit9CisKKy8qIFJldHVybiByZXN1bHRzIG9mIGEgc2NhbiAqLworc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2dldHNjYW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgc3RydWN0IGl3X3BvaW50ICpzcnEsCisJCQkJIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBlcnIgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJY2hhciAqY3VycmVudF9ldiA9IGV4dHJhOworCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCisJCXJldHVybiAtRUJVU1k7CisKKwlpZiAocHJpdi0+c2Nhbl9pbnByb2dyZXNzKSB7CisJCS8qIEltcG9ydGFudCBub3RlIDogd2UgZG9uJ3Qgd2FudCB0byBibG9jayB0aGUgY2FsbGVyCisJCSAqIHVudGlsIHJlc3VsdHMgYXJlIHJlYWR5IGZvciB2YXJpb3VzIHJlYXNvbnMuCisJCSAqIEZpcnN0LCBtYW5hZ2luZyB3YWl0IHF1ZXVlcyBpcyBjb21wbGV4IGFuZCByYWN5LgorCQkgKiBTZWNvbmQsIHdlIGdyYWIgc29tZSBydG5ldGxpbmsgbG9jayBiZWZvcmUgY29tbWluZworCQkgKiBoZXJlIChpbiBkZXZfaW9jdGwoKSkuCisJCSAqIFRoaXJkLCB3ZSBnZW5lcmF0ZSBhbiBXaXJlbGVzcyBFdmVudCwgc28gdGhlCisJCSAqIGNhbGxlciBjYW4gd2FpdCBpdHNlbGYgb24gdGhhdCAtIEplYW4gSUkgKi8KKwkJZXJyID0gLUVBR0FJTjsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKHByaXYtPmhhc19leHRfc2NhbikgeworCQlzdHJ1Y3QgeGJzc19lbGVtZW50ICpic3M7CisKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShic3MsICZwcml2LT5ic3NfbGlzdCwgbGlzdCkgeworCQkJLyogVHJhbnNsYXRlIHRoaXMgZW50cnkgdG8gV0UgZm9ybWF0ICovCisJCQljdXJyZW50X2V2ID0KKwkJCQlvcmlub2NvX3RyYW5zbGF0ZV9leHRfc2NhbihkZXYsIGluZm8sCisJCQkJCQkJICAgY3VycmVudF9ldiwKKwkJCQkJCQkgICBleHRyYSArIHNycS0+bGVuZ3RoLAorCQkJCQkJCSAgICZic3MtPmJzcywKKwkJCQkJCQkgICBic3MtPmxhc3Rfc2Nhbm5lZCk7CisKKwkJCS8qIENoZWNrIGlmIHRoZXJlIGlzIHNwYWNlIGZvciBvbmUgbW9yZSBlbnRyeSAqLworCQkJaWYgKChleHRyYSArIHNycS0+bGVuZ3RoIC0gY3VycmVudF9ldikKKwkJCSAgICA8PSBJV19FVl9BRERSX0xFTikgeworCQkJCS8qIEFzayB1c2VyIHNwYWNlIHRvIHRyeSBhZ2FpbiB3aXRoIGEKKwkJCQkgKiBiaWdnZXIgYnVmZmVyICovCisJCQkJZXJyID0gLUUyQklHOworCQkJCWdvdG8gb3V0OworCQkJfQorCQl9CisKKwl9IGVsc2UgeworCQlzdHJ1Y3QgYnNzX2VsZW1lbnQgKmJzczsKKworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJzcywgJnByaXYtPmJzc19saXN0LCBsaXN0KSB7CisJCQkvKiBUcmFuc2xhdGUgdGhpcyBlbnRyeSB0byBXRSBmb3JtYXQgKi8KKwkJCWN1cnJlbnRfZXYgPSBvcmlub2NvX3RyYW5zbGF0ZV9zY2FuKGRldiwgaW5mbywKKwkJCQkJCQkgICAgY3VycmVudF9ldiwKKwkJCQkJCQkgICAgZXh0cmEgKyBzcnEtPmxlbmd0aCwKKwkJCQkJCQkgICAgJmJzcy0+YnNzLAorCQkJCQkJCSAgICBic3MtPmxhc3Rfc2Nhbm5lZCk7CisKKwkJCS8qIENoZWNrIGlmIHRoZXJlIGlzIHNwYWNlIGZvciBvbmUgbW9yZSBlbnRyeSAqLworCQkJaWYgKChleHRyYSArIHNycS0+bGVuZ3RoIC0gY3VycmVudF9ldikKKwkJCSAgICA8PSBJV19FVl9BRERSX0xFTikgeworCQkJCS8qIEFzayB1c2VyIHNwYWNlIHRvIHRyeSBhZ2FpbiB3aXRoIGEKKwkJCQkgKiBiaWdnZXIgYnVmZmVyICovCisJCQkJZXJyID0gLUUyQklHOworCQkJCWdvdG8gb3V0OworCQkJfQorCQl9CisJfQorCisJc3JxLT5sZW5ndGggPSAoY3VycmVudF9ldiAtIGV4dHJhKTsKKwlzcnEtPmZsYWdzID0gKF9fdTE2KSBwcml2LT5zY2FuX21vZGU7CisKK291dDoKKwlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworCXJldHVybiBlcnI7Cit9CisKKy8qIENvbW1pdCBoYW5kbGVyLCBjYWxsZWQgYWZ0ZXIgc2V0IG9wZXJhdGlvbnMgKi8KK3N0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9jb21taXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCXZvaWQgKndycXUsCisJCQkJY2hhciAqZXh0cmEpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGhlcm1lcyAqaHcgPSAmcHJpdi0+aHc7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgZXJyID0gMDsKKworCWlmICghcHJpdi0+b3BlbikKKwkJcmV0dXJuIDA7CisKKwlpZiAocHJpdi0+YnJva2VuX2Rpc2FibGVwb3J0KSB7CisJCW9yaW5vY29fcmVzZXQoJnByaXYtPnJlc2V0X3dvcmspOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IGhlcm1lc19kaXNhYmxlX3BvcnQoaHcsIDApOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFVuYWJsZSB0byBkaXNhYmxlIHBvcnQgIgorCQkgICAgICAgIndoaWxlIHJlY29uZmlndXJpbmcgY2FyZFxuIiwgZGV2LT5uYW1lKTsKKwkJcHJpdi0+YnJva2VuX2Rpc2FibGVwb3J0ID0gMTsKKwkJZ290byBvdXQ7CisJfQorCisJZXJyID0gX19vcmlub2NvX3Byb2dyYW1fcmlkcyhkZXYpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFVuYWJsZSB0byByZWNvbmZpZ3VyZSBjYXJkXG4iLAorCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJZ290byBvdXQ7CisJfQorCisJZXJyID0gaGVybWVzX2VuYWJsZV9wb3J0KGh3LCAwKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBVbmFibGUgdG8gZW5hYmxlIHBvcnQgd2hpbGUgcmVjb25maWd1cmluZyBjYXJkXG4iLAorCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJZ290byBvdXQ7CisJfQorCisgb3V0OgorCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFJlc2V0dGluZyBpbnN0ZWFkLi4uXG4iLCBkZXYtPm5hbWUpOworCQlzY2hlZHVsZV93b3JrKCZwcml2LT5yZXNldF93b3JrKTsKKwkJZXJyID0gMDsKKwl9CisKKwlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaXdfcHJpdl9hcmdzIG9yaW5vY29fcHJpdnRhYltdID0geworCXsgU0lPQ0lXRklSU1RQUklWICsgMHgwLCAwLCAwLCAiZm9yY2VfcmVzZXQiIH0sCisJeyBTSU9DSVdGSVJTVFBSSVYgKyAweDEsIDAsIDAsICJjYXJkX3Jlc2V0IiB9LAorCXsgU0lPQ0lXRklSU1RQUklWICsgMHgyLCBJV19QUklWX1RZUEVfSU5UIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwKKwkgIDAsICJzZXRfcG9ydDMiIH0sCisJeyBTSU9DSVdGSVJTVFBSSVYgKyAweDMsIDAsIElXX1BSSVZfVFlQRV9JTlQgfCBJV19QUklWX1NJWkVfRklYRUQgfCAxLAorCSAgImdldF9wb3J0MyIgfSwKKwl7IFNJT0NJV0ZJUlNUUFJJViArIDB4NCwgSVdfUFJJVl9UWVBFX0lOVCB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDEsCisJICAwLCAic2V0X3ByZWFtYmxlIiB9LAorCXsgU0lPQ0lXRklSU1RQUklWICsgMHg1LCAwLCBJV19QUklWX1RZUEVfSU5UIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwKKwkgICJnZXRfcHJlYW1ibGUiIH0sCisJeyBTSU9DSVdGSVJTVFBSSVYgKyAweDYsIElXX1BSSVZfVFlQRV9JTlQgfCBJV19QUklWX1NJWkVfRklYRUQgfCAxLAorCSAgMCwgInNldF9pYnNzcG9ydCIgfSwKKwl7IFNJT0NJV0ZJUlNUUFJJViArIDB4NywgMCwgSVdfUFJJVl9UWVBFX0lOVCB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDEsCisJICAiZ2V0X2lic3Nwb3J0IiB9LAorCXsgU0lPQ0lXRklSU1RQUklWICsgMHg5LCAwLCBJV19QUklWX1RZUEVfQllURSB8IE1BWF9SSURfTEVOLAorCSAgImdldF9yaWQiIH0sCit9OworCisKKy8qCisgKiBTdHJ1Y3R1cmVzIHRvIGV4cG9ydCB0aGUgV2lyZWxlc3MgSGFuZGxlcnMKKyAqLworCisjZGVmaW5lIFNURF9JV19IQU5ETEVSKGlkLCBmdW5jKSBcCisJW0lXX0lPQ1RMX0lEWChpZCldID0gKGl3X2hhbmRsZXIpIGZ1bmMKK3N0YXRpYyBjb25zdCBpd19oYW5kbGVyCW9yaW5vY29faGFuZGxlcltdID0geworCVNURF9JV19IQU5ETEVSKFNJT0NTSVdDT01NSVQsCW9yaW5vY29faW9jdGxfY29tbWl0KSwKKwlTVERfSVdfSEFORExFUihTSU9DR0lXTkFNRSwJb3Jpbm9jb19pb2N0bF9nZXRuYW1lKSwKKwlTVERfSVdfSEFORExFUihTSU9DU0lXRlJFUSwJb3Jpbm9jb19pb2N0bF9zZXRmcmVxKSwKKwlTVERfSVdfSEFORExFUihTSU9DR0lXRlJFUSwJb3Jpbm9jb19pb2N0bF9nZXRmcmVxKSwKKwlTVERfSVdfSEFORExFUihTSU9DU0lXTU9ERSwJb3Jpbm9jb19pb2N0bF9zZXRtb2RlKSwKKwlTVERfSVdfSEFORExFUihTSU9DR0lXTU9ERSwJb3Jpbm9jb19pb2N0bF9nZXRtb2RlKSwKKwlTVERfSVdfSEFORExFUihTSU9DU0lXU0VOUywJb3Jpbm9jb19pb2N0bF9zZXRzZW5zKSwKKwlTVERfSVdfSEFORExFUihTSU9DR0lXU0VOUywJb3Jpbm9jb19pb2N0bF9nZXRzZW5zKSwKKwlTVERfSVdfSEFORExFUihTSU9DR0lXUkFOR0UsCW9yaW5vY29faW9jdGxfZ2V0aXdyYW5nZSksCisJU1REX0lXX0hBTkRMRVIoU0lPQ1NJV1NQWSwJaXdfaGFuZGxlcl9zZXRfc3B5KSwKKwlTVERfSVdfSEFORExFUihTSU9DR0lXU1BZLAlpd19oYW5kbGVyX2dldF9zcHkpLAorCVNURF9JV19IQU5ETEVSKFNJT0NTSVdUSFJTUFksCWl3X2hhbmRsZXJfc2V0X3RocnNweSksCisJU1REX0lXX0hBTkRMRVIoU0lPQ0dJV1RIUlNQWSwJaXdfaGFuZGxlcl9nZXRfdGhyc3B5KSwKKwlTVERfSVdfSEFORExFUihTSU9DU0lXQVAsCW9yaW5vY29faW9jdGxfc2V0d2FwKSwKKwlTVERfSVdfSEFORExFUihTSU9DR0lXQVAsCW9yaW5vY29faW9jdGxfZ2V0d2FwKSwKKwlTVERfSVdfSEFORExFUihTSU9DU0lXU0NBTiwJb3Jpbm9jb19pb2N0bF9zZXRzY2FuKSwKKwlTVERfSVdfSEFORExFUihTSU9DR0lXU0NBTiwJb3Jpbm9jb19pb2N0bF9nZXRzY2FuKSwKKwlTVERfSVdfSEFORExFUihTSU9DU0lXRVNTSUQsCW9yaW5vY29faW9jdGxfc2V0ZXNzaWQpLAorCVNURF9JV19IQU5ETEVSKFNJT0NHSVdFU1NJRCwJb3Jpbm9jb19pb2N0bF9nZXRlc3NpZCksCisJU1REX0lXX0hBTkRMRVIoU0lPQ1NJV05JQ0tOLAlvcmlub2NvX2lvY3RsX3NldG5pY2spLAorCVNURF9JV19IQU5ETEVSKFNJT0NHSVdOSUNLTiwJb3Jpbm9jb19pb2N0bF9nZXRuaWNrKSwKKwlTVERfSVdfSEFORExFUihTSU9DU0lXUkFURSwJb3Jpbm9jb19pb2N0bF9zZXRyYXRlKSwKKwlTVERfSVdfSEFORExFUihTSU9DR0lXUkFURSwJb3Jpbm9jb19pb2N0bF9nZXRyYXRlKSwKKwlTVERfSVdfSEFORExFUihTSU9DU0lXUlRTLAlvcmlub2NvX2lvY3RsX3NldHJ0cyksCisJU1REX0lXX0hBTkRMRVIoU0lPQ0dJV1JUUywJb3Jpbm9jb19pb2N0bF9nZXRydHMpLAorCVNURF9JV19IQU5ETEVSKFNJT0NTSVdGUkFHLAlvcmlub2NvX2lvY3RsX3NldGZyYWcpLAorCVNURF9JV19IQU5ETEVSKFNJT0NHSVdGUkFHLAlvcmlub2NvX2lvY3RsX2dldGZyYWcpLAorCVNURF9JV19IQU5ETEVSKFNJT0NHSVdSRVRSWSwJb3Jpbm9jb19pb2N0bF9nZXRyZXRyeSksCisJU1REX0lXX0hBTkRMRVIoU0lPQ1NJV0VOQ09ERSwJb3Jpbm9jb19pb2N0bF9zZXRpd2VuY29kZSksCisJU1REX0lXX0hBTkRMRVIoU0lPQ0dJV0VOQ09ERSwJb3Jpbm9jb19pb2N0bF9nZXRpd2VuY29kZSksCisJU1REX0lXX0hBTkRMRVIoU0lPQ1NJV1BPV0VSLAlvcmlub2NvX2lvY3RsX3NldHBvd2VyKSwKKwlTVERfSVdfSEFORExFUihTSU9DR0lXUE9XRVIsCW9yaW5vY29faW9jdGxfZ2V0cG93ZXIpLAorCVNURF9JV19IQU5ETEVSKFNJT0NTSVdHRU5JRSwJb3Jpbm9jb19pb2N0bF9zZXRfZ2VuaWUpLAorCVNURF9JV19IQU5ETEVSKFNJT0NHSVdHRU5JRSwJb3Jpbm9jb19pb2N0bF9nZXRfZ2VuaWUpLAorCVNURF9JV19IQU5ETEVSKFNJT0NTSVdNTE1FLAlvcmlub2NvX2lvY3RsX3NldF9tbG1lKSwKKwlTVERfSVdfSEFORExFUihTSU9DU0lXQVVUSCwJb3Jpbm9jb19pb2N0bF9zZXRfYXV0aCksCisJU1REX0lXX0hBTkRMRVIoU0lPQ0dJV0FVVEgsCW9yaW5vY29faW9jdGxfZ2V0X2F1dGgpLAorCVNURF9JV19IQU5ETEVSKFNJT0NTSVdFTkNPREVFWFQsIG9yaW5vY29faW9jdGxfc2V0X2VuY29kZWV4dCksCisJU1REX0lXX0hBTkRMRVIoU0lPQ0dJV0VOQ09ERUVYVCwgb3Jpbm9jb19pb2N0bF9nZXRfZW5jb2RlZXh0KSwKK307CisKKworLyoKKyAgQWRkZWQgdHlwZWNhc3Rpbmcgc2luY2Ugd2Ugbm8gbG9uZ2VyIHVzZSBpd3JlcV9kYXRhIC0tIE1vdXN0YWZhCisgKi8KK3N0YXRpYyBjb25zdCBpd19oYW5kbGVyCW9yaW5vY29fcHJpdmF0ZV9oYW5kbGVyW10gPSB7CisJWzBdID0gKGl3X2hhbmRsZXIpIG9yaW5vY29faW9jdGxfcmVzZXQsCisJWzFdID0gKGl3X2hhbmRsZXIpIG9yaW5vY29faW9jdGxfcmVzZXQsCisJWzJdID0gKGl3X2hhbmRsZXIpIG9yaW5vY29faW9jdGxfc2V0cG9ydDMsCisJWzNdID0gKGl3X2hhbmRsZXIpIG9yaW5vY29faW9jdGxfZ2V0cG9ydDMsCisJWzRdID0gKGl3X2hhbmRsZXIpIG9yaW5vY29faW9jdGxfc2V0cHJlYW1ibGUsCisJWzVdID0gKGl3X2hhbmRsZXIpIG9yaW5vY29faW9jdGxfZ2V0cHJlYW1ibGUsCisJWzZdID0gKGl3X2hhbmRsZXIpIG9yaW5vY29faW9jdGxfc2V0aWJzc3BvcnQsCisJWzddID0gKGl3X2hhbmRsZXIpIG9yaW5vY29faW9jdGxfZ2V0aWJzc3BvcnQsCisJWzldID0gKGl3X2hhbmRsZXIpIG9yaW5vY29faW9jdGxfZ2V0cmlkLAorfTsKKworY29uc3Qgc3RydWN0IGl3X2hhbmRsZXJfZGVmIG9yaW5vY29faGFuZGxlcl9kZWYgPSB7CisJLm51bV9zdGFuZGFyZCA9IEFSUkFZX1NJWkUob3Jpbm9jb19oYW5kbGVyKSwKKwkubnVtX3ByaXZhdGUgPSBBUlJBWV9TSVpFKG9yaW5vY29fcHJpdmF0ZV9oYW5kbGVyKSwKKwkubnVtX3ByaXZhdGVfYXJncyA9IEFSUkFZX1NJWkUob3Jpbm9jb19wcml2dGFiKSwKKwkuc3RhbmRhcmQgPSBvcmlub2NvX2hhbmRsZXIsCisJLnByaXZhdGUgPSBvcmlub2NvX3ByaXZhdGVfaGFuZGxlciwKKwkucHJpdmF0ZV9hcmdzID0gb3Jpbm9jb19wcml2dGFiLAorCS5nZXRfd2lyZWxlc3Nfc3RhdHMgPSBvcmlub2NvX2dldF93aXJlbGVzc19zdGF0cywKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL3dleHQuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vd2V4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0NzlmNGUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL3dleHQuaApAQCAtMCwwICsxLDEzIEBACisvKiBXaXJlbGVzcyBleHRlbnNpb25zIHN1cHBvcnQuCisgKgorICogU2VlIGNvcHlyaWdodCBub3RpY2UgaW4gbWFpbi5jCisgKi8KKyNpZm5kZWYgX09SSU5PQ09fV0VYVF9IXworI2RlZmluZSBfT1JJTk9DT19XRVhUX0hfCisKKyNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgorCisvKiBTdHJ1Y3R1cmUgZGVmaW5pbmcgYWxsIG91ciBXRVhUIGhhbmRsZXJzICovCitleHRlcm4gY29uc3Qgc3RydWN0IGl3X2hhbmRsZXJfZGVmIG9yaW5vY29faGFuZGxlcl9kZWY7CisKKyNlbmRpZiAvKiBfT1JJTk9DT19XRVhUX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9LY29uZmlnCmluZGV4IGQzNDY5ZDAuLmNmYzVmNDFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvS2NvbmZpZwpAQCAtNjEsMyArNjEsMTMgQEAKIAkgIGh0dHA6Ly9wcmlzbTU0Lm9yZy8KIAogCSAgSWYgeW91IGNob29zZSB0byBidWlsZCBhIG1vZHVsZSwgaXQnbGwgYmUgY2FsbGVkIHA1NHBjaS4KKworY29uZmlnIFA1NF9TUEkKKwl0cmlzdGF0ZSAiUHJpc201NCBTUEkgKHN0bGM0NXh4KSBzdXBwb3J0IgorCWRlcGVuZHMgb24gUDU0X0NPTU1PTiAmJiBTUElfTUFTVEVSCisJLS0taGVscC0tLQorCSAgVGhpcyBkcml2ZXIgaXMgZm9yIHN0bGM0NTUwIG9yIHN0bGM0NTYwIGJhc2VkIHdpcmVsZXNzIGNoaXBzLgorCSAgVGhpcyBkcml2ZXIgaXMgZXhwZXJpbWVudGFsLCB1bnRlc3RlZCBhbmQgd2lsbCBwcm9iYWJseSBvbmx5IHdvcmsgb24KKwkgIE5va2lhJ3MgTjgwMC9OODEwIFBvcnRhYmxlIEludGVybmV0IFRhYmxldC4KKworCSAgSWYgeW91IGNob29zZSB0byBidWlsZCBhIG1vZHVsZSwgaXQnbGwgYmUgY2FsbGVkIHA1NHNwaS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9NYWtlZmlsZQppbmRleCA0ZmE5Y2U3Li5jMjA1MGRlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9NYWtlZmlsZQpAQCAtMSwzICsxLDQgQEAKIG9iai0kKENPTkZJR19QNTRfQ09NTU9OKQkrPSBwNTRjb21tb24ubwogb2JqLSQoQ09ORklHX1A1NF9VU0IpCQkrPSBwNTR1c2Iubwogb2JqLSQoQ09ORklHX1A1NF9QQ0kpCQkrPSBwNTRwY2kubworb2JqLSQoQ09ORklHX1A1NF9TUEkpCQkrPSBwNTRzcGkubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NC5oCmluZGV4IGFiNzllMzIuLjJkZGE1ZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTQuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0LmgKQEAgLTE0LDYgKzE0LDEwIEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCisjaWZkZWYgQ09ORklHX01BQzgwMjExX0xFRFMKKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0xFRFMgKi8KKwogZW51bSBwNTRfY29udHJvbF9mcmFtZV90eXBlcyB7CiAJUDU0X0NPTlRST0xfVFlQRV9TRVRVUCA9IDAsCiAJUDU0X0NPTlRST0xfVFlQRV9TQ0FOLApAQCAtNDQsNiArNDgsMTggQEAKIAlQNTRfQ09OVFJPTF9UWVBFX0JUX09QVElPTlMgPSAzNQogfTsKIAorLyogcHJvdmlkZSAxNiBieXRlcyBmb3IgdGhlIHRyYW5zcG9ydCBiYWNrLWVuZCAqLworI2RlZmluZSBQNTRfVFhfSU5GT19EQVRBX1NJWkUJCTE2CisKKy8qIHN0b3JlZCBpbiBpZWVlODAyMTFfdHhfaW5mbydzIHJhdGVfZHJpdmVyX2RhdGEgKi8KK3N0cnVjdCBwNTRfdHhfaW5mbyB7CisJdTMyIHN0YXJ0X2FkZHI7CisJdTMyIGVuZF9hZGRyOworCXZvaWQgKmRhdGFbUDU0X1RYX0lORk9fREFUQV9TSVpFIC8gc2l6ZW9mKHZvaWQgKildOworfTsKKworI2RlZmluZSBQNTRfTUFYX0NUUkxfRlJBTUVfTEVOCQkweDEwMDAKKwogI2RlZmluZSBQNTRfSERSX0ZMQUdfQ09OVFJPTAkJQklUKDE1KQogI2RlZmluZSBQNTRfSERSX0ZMQUdfQ09OVFJPTF9PUFNFVAkoQklUKDE1KSArIEJJVCgwKSkKIApAQCAtNzUsNiArOTEsMTQgQEAKIAlzMTYgbG9uZ2Jvd191bmsyOwogfTsKIAorc3RydWN0IHA1NF9jYWxfZGF0YWJhc2UgeworCXNpemVfdCBlbnRyaWVzOworCXNpemVfdCBlbnRyeV9zaXplOworCXNpemVfdCBvZmZzZXQ7CisJc2l6ZV90IGxlbjsKKwl1OCBkYXRhWzBdOworfTsKKwogI2RlZmluZSBFRVBST01fUkVBREJBQ0tfTEVOIDB4M2ZjCiAKICNkZWZpbmUgSVNMMzhYWF9ERVZfRklSTVdBUkVfQUREUiAweDIwMDAwCkBAIC04NCw2ICsxMDgsMjkgQEAKICNkZWZpbmUgRldfTE04NyAweDRjNGQzODM3CiAjZGVmaW5lIEZXX0xNMjAgMHg0YzRkMzIzMAogCitlbnVtIGZ3X3N0YXRlIHsKKwlGV19TVEFURV9PRkYsCisJRldfU1RBVEVfQk9PVElORywKKwlGV19TVEFURV9SRUFEWSwKKwlGV19TVEFURV9SRVNFVCwKKwlGV19TVEFURV9SRVNFVFRJTkcsCit9OworCisjaWZkZWYgQ09ORklHX01BQzgwMjExX0xFRFMKKworI2RlZmluZSBQNTRfTEVEX01BWF9OQU1FX0xFTiAzMQorCitzdHJ1Y3QgcDU0X2xlZF9kZXYgeworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3X2RldjsKKwlzdHJ1Y3QgbGVkX2NsYXNzZGV2IGxlZF9kZXY7CisJY2hhciBuYW1lW1A1NF9MRURfTUFYX05BTUVfTEVOICsgMV07CisKKwl1bnNpZ25lZCBpbnQgaW5kZXg7CisJdW5zaWduZWQgaW50IHJlZ2lzdGVyZWQ7Cit9OworCisjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0xFRFMgKi8KKwogc3RydWN0IHA1NF9jb21tb24gewogCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3OwogCXUzMiByeF9zdGFydDsKQEAgLTk5LDExICsxNDYsMTIgQEAKIAlzdHJ1Y3QgbXV0ZXggY29uZl9tdXRleDsKIAl1OCBtYWNfYWRkcltFVEhfQUxFTl07CiAJdTggYnNzaWRbRVRIX0FMRU5dOworCXU4IHJ4X2RpdmVyc2l0eV9tYXNrOworCXU4IHR4X2RpdmVyc2l0eV9tYXNrOwogCXN0cnVjdCBwZGFfaXFfYXV0b2NhbF9lbnRyeSAqaXFfYXV0b2NhbDsKIAl1bnNpZ25lZCBpbnQgaXFfYXV0b2NhbF9sZW47Ci0Jc3RydWN0IHBkYV9jaGFubmVsX291dHB1dF9saW1pdCAqb3V0cHV0X2xpbWl0OwotCXVuc2lnbmVkIGludCBvdXRwdXRfbGltaXRfbGVuOwotCXN0cnVjdCBwZGFfcGFfY3VydmVfZGF0YSAqY3VydmVfZGF0YTsKKwlzdHJ1Y3QgcDU0X2NhbF9kYXRhYmFzZSAqb3V0cHV0X2xpbWl0OworCXN0cnVjdCBwNTRfY2FsX2RhdGFiYXNlICpjdXJ2ZV9kYXRhOwogCXN0cnVjdCBwNTRfcnNzaV9saW5lYXJfYXBwcm94aW1hdGlvbiByc3NpY2FsX2RiW0lFRUU4MDIxMV9OVU1fQkFORFNdOwogCXVuc2lnbmVkIGludCBmaWx0ZXJfZmxhZ3M7CiAJYm9vbCB1c2Vfc2hvcnRfc2xvdDsKQEAgLTExNSw3ICsxNjMsNyBAQAogCXVuc2lnbmVkIGludCBvdXRwdXRfcG93ZXI7CiAJdTMyIHRzZl9sb3czMjsKIAl1MzIgdHNmX2hpZ2gzMjsKLQl1NjQgYmFzaWNfcmF0ZV9tYXNrOworCXUzMiBiYXNpY19yYXRlX21hc2s7CiAJdTE2IHdha2V1cF90aW1lcjsKIAl1MTYgYWlkOwogCXN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfc3RhdHMgdHhfc3RhdHNbOF07CkBAIC0xMjgsMTMgKzE3NiwyMSBAQAogCXN0cnVjdCBjb21wbGV0aW9uIGVlcHJvbV9jb21wOwogCXU4IHByaXZhY3lfY2FwczsKIAl1OCByeF9rZXljYWNoZV9zaXplOworCS8qIExFRCBtYW5hZ2VtZW50ICovCisJI2lmZGVmIENPTkZJR19NQUM4MDIxMV9MRURTCisJc3RydWN0IHA1NF9sZWRfZGV2IGFzc29jX2xlZDsKKwlzdHJ1Y3QgcDU0X2xlZF9kZXYgdHhfbGVkOworCSNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfTEVEUyAqLworCXUxNiBzb2Z0bGVkX3N0YXRlOwkJLyogYml0IGZpZWxkIG9mIGdsb3dpbmcgTEVEcyAqLwogfTsKIAogaW50IHA1NF9yeChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpOwogdm9pZCBwNTRfZnJlZV9za2Ioc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGludCBwNTRfcGFyc2VfZmlybXdhcmUoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KTsKK2ludCBwNTRfcGFyc2VfZWVwcm9tKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgdm9pZCAqZWVwcm9tLCBpbnQgbGVuKTsKIGludCBwNTRfcmVhZF9lZXByb20oc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KTsKIHN0cnVjdCBpZWVlODAyMTFfaHcgKnA1NF9pbml0X2NvbW1vbihzaXplX3QgcHJpdl9kYXRhX2xlbik7CitpbnQgcDU0X3JlZ2lzdGVyX2NvbW1vbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHN0cnVjdCBkZXZpY2UgKnBkZXYpOwogdm9pZCBwNTRfZnJlZV9jb21tb24oc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KTsKIAogI2VuZGlmIC8qIFA1NF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0Y29tbW9uLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0Y29tbW9uLmMKaW5kZXggZjE3MDEwNi4uMGE5ODk4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NGNvbW1vbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRjb21tb24uYwpAQCAtMjEsNiArMjEsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAKICNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfTEVEUworI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KKyNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfTEVEUyAqLwogCiAjaW5jbHVkZSAicDU0LmgiCiAjaW5jbHVkZSAicDU0Y29tbW9uLmgiCkBAIC0yMzksMTEgKzI0MiwxMSBAQAogCiAJaWYgKHByaXYtPmZ3X3ZhciA+PSAweDMwMCkgewogCQkvKiBGaXJtd2FyZSBzdXBwb3J0cyBRb1MsIHVzZSBpdCEgKi8KLQkJcHJpdi0+dHhfc3RhdHNbNF0ubGltaXQgPSAzOwkJLyogQUNfVk8gKi8KLQkJcHJpdi0+dHhfc3RhdHNbNV0ubGltaXQgPSA0OwkJLyogQUNfVkkgKi8KLQkJcHJpdi0+dHhfc3RhdHNbNl0ubGltaXQgPSAzOwkJLyogQUNfQkUgKi8KLQkJcHJpdi0+dHhfc3RhdHNbN10ubGltaXQgPSAyOwkJLyogQUNfQksgKi8KLQkJZGV2LT5xdWV1ZXMgPSA0OworCQlwcml2LT50eF9zdGF0c1tQNTRfUVVFVUVfQUNfVk9dLmxpbWl0ID0gMzsKKwkJcHJpdi0+dHhfc3RhdHNbUDU0X1FVRVVFX0FDX1ZJXS5saW1pdCA9IDQ7CisJCXByaXYtPnR4X3N0YXRzW1A1NF9RVUVVRV9BQ19CRV0ubGltaXQgPSAzOworCQlwcml2LT50eF9zdGF0c1tQNTRfUVVFVUVfQUNfQktdLmxpbWl0ID0gMjsKKwkJZGV2LT5xdWV1ZXMgPSBQNTRfUVVFVUVfQUNfTlVNOwogCX0KIAogCWlmICghbW9kcGFyYW1fbm9od2NyeXB0KQpAQCAtMjcyLDEzICsyNzUsMTkgQEAKIAl1bnNpZ25lZCBpbnQgaSwgajsKIAl2b2lkICpzb3VyY2UsICp0YXJnZXQ7CiAKLQlwcml2LT5jdXJ2ZV9kYXRhID0ga21hbGxvYyhjZF9sZW4sIEdGUF9LRVJORUwpOworCXByaXYtPmN1cnZlX2RhdGEgPSBrbWFsbG9jKHNpemVvZigqcHJpdi0+Y3VydmVfZGF0YSkgKyBjZF9sZW4sCisJCQkJICAgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwcml2LT5jdXJ2ZV9kYXRhKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCW1lbWNweShwcml2LT5jdXJ2ZV9kYXRhLCBjdXJ2ZV9kYXRhLCBzaXplb2YoKmN1cnZlX2RhdGEpKTsKKwlwcml2LT5jdXJ2ZV9kYXRhLT5lbnRyaWVzID0gY3VydmVfZGF0YS0+Y2hhbm5lbHM7CisJcHJpdi0+Y3VydmVfZGF0YS0+ZW50cnlfc2l6ZSA9IHNpemVvZihfX2xlMTYpICsKKwkJc2l6ZW9mKCpkc3QpICogY3VydmVfZGF0YS0+cG9pbnRzX3Blcl9jaGFubmVsOworCXByaXYtPmN1cnZlX2RhdGEtPm9mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBwZGFfcGFfY3VydmVfZGF0YSwgZGF0YSk7CisJcHJpdi0+Y3VydmVfZGF0YS0+bGVuID0gY2RfbGVuOworCW1lbWNweShwcml2LT5jdXJ2ZV9kYXRhLT5kYXRhLCBjdXJ2ZV9kYXRhLCBzaXplb2YoKmN1cnZlX2RhdGEpKTsKIAlzb3VyY2UgPSBjdXJ2ZV9kYXRhLT5kYXRhOwotCXRhcmdldCA9IHByaXYtPmN1cnZlX2RhdGEtPmRhdGE7CisJdGFyZ2V0ID0gKChzdHJ1Y3QgcGRhX3BhX2N1cnZlX2RhdGEgKikgcHJpdi0+Y3VydmVfZGF0YS0+ZGF0YSktPmRhdGE7CiAJZm9yIChpID0gMDsgaSA8IGN1cnZlX2RhdGEtPmNoYW5uZWxzOyBpKyspIHsKIAkJX19sZTE2ICpmcmVxID0gc291cmNlOwogCQlzb3VyY2UgKz0gc2l6ZW9mKF9fbGUxNik7CkBAIC0zMTgsMTMgKzMyNywxOSBAQAogCXVuc2lnbmVkIGludCBpLCBqOwogCXZvaWQgKnNvdXJjZSwgKnRhcmdldDsKIAotCXByaXYtPmN1cnZlX2RhdGEgPSBrbWFsbG9jKGNkX2xlbiwgR0ZQX0tFUk5FTCk7CisJcHJpdi0+Y3VydmVfZGF0YSA9IGt6YWxsb2MoY2RfbGVuICsgc2l6ZW9mKCpwcml2LT5jdXJ2ZV9kYXRhKSwKKwkJCQkgICBHRlBfS0VSTkVMKTsKIAlpZiAoIXByaXYtPmN1cnZlX2RhdGEpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JbWVtY3B5KHByaXYtPmN1cnZlX2RhdGEsIGN1cnZlX2RhdGEsIHNpemVvZigqY3VydmVfZGF0YSkpOworCXByaXYtPmN1cnZlX2RhdGEtPmVudHJpZXMgPSBjdXJ2ZV9kYXRhLT5jaGFubmVsczsKKwlwcml2LT5jdXJ2ZV9kYXRhLT5lbnRyeV9zaXplID0gc2l6ZW9mKF9fbGUxNikgKworCQlzaXplb2YoKmRzdCkgKiBjdXJ2ZV9kYXRhLT5wb2ludHNfcGVyX2NoYW5uZWw7CisJcHJpdi0+Y3VydmVfZGF0YS0+b2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHBkYV9wYV9jdXJ2ZV9kYXRhLCBkYXRhKTsKKwlwcml2LT5jdXJ2ZV9kYXRhLT5sZW4gPSBjZF9sZW47CisJbWVtY3B5KHByaXYtPmN1cnZlX2RhdGEtPmRhdGEsIGN1cnZlX2RhdGEsIHNpemVvZigqY3VydmVfZGF0YSkpOwogCXNvdXJjZSA9IGN1cnZlX2RhdGEtPmRhdGE7Ci0JdGFyZ2V0ID0gcHJpdi0+Y3VydmVfZGF0YS0+ZGF0YTsKKwl0YXJnZXQgPSAoKHN0cnVjdCBwZGFfcGFfY3VydmVfZGF0YSAqKSBwcml2LT5jdXJ2ZV9kYXRhLT5kYXRhKS0+ZGF0YTsKIAlmb3IgKGkgPSAwOyBpIDwgY3VydmVfZGF0YS0+Y2hhbm5lbHM7IGkrKykgewogCQlfX2xlMTYgKmZyZXEgPSBzb3VyY2U7CiAJCXNvdXJjZSArPSBzaXplb2YoX19sZTE2KTsKQEAgLTM3Niw3ICszOTEsMTAyIEBACiAJfQogfQogCi1zdGF0aWMgaW50IHA1NF9wYXJzZV9lZXByb20oc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCB2b2lkICplZXByb20sIGludCBsZW4pCitzdGF0aWMgdm9pZCBwNTRfcGFyc2VfZGVmYXVsdF9jb3VudHJ5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKKwkJCQkgICAgICB2b2lkICpkYXRhLCBpbnQgbGVuKQoreworCXN0cnVjdCBwZGFfY291bnRyeSAqY291bnRyeTsKKworCWlmIChsZW4gIT0gc2l6ZW9mKCpjb3VudHJ5KSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmb3VuZCBwb3NzaWJsZSBpbnZhbGlkIGRlZmF1bHQgY291bnRyeSAiCisJCQkJImVlcHJvbSBlbnRyeS4gKGVudHJ5IHNpemU6ICVkKVxuIiwKKwkJICAgICAgIHdpcGh5X25hbWUoZGV2LT53aXBoeSksIGxlbik7CisKKwkJcHJpbnRfaGV4X2R1bXBfYnl0ZXMoImNvdW50cnk6IiwgRFVNUF9QUkVGSVhfTk9ORSwKKwkJCQkgICAgIGRhdGEsIGxlbik7CisKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogcGxlYXNlIHJlcG9ydCB0aGlzIGlzc3VlLlxuIiwKKwkJCXdpcGh5X25hbWUoZGV2LT53aXBoeSkpOworCQlyZXR1cm47CisJfQorCisJY291bnRyeSA9IChzdHJ1Y3QgcGRhX2NvdW50cnkgKikgZGF0YTsKKwlpZiAoY291bnRyeS0+ZmxhZ3MgPT0gUERSX0NPVU5UUllfQ0VSVF9DT0RFX1BTRVVETykKKwkJcmVndWxhdG9yeV9oaW50KGRldi0+d2lwaHksIGNvdW50cnktPmFscGhhMik7CisJZWxzZSB7CisJCS8qIFRPRE86CisJCSAqIHdyaXRlIGEgc2hhcmVkL2NvbW1vbiBmdW5jdGlvbiB0aGF0IGNvbnZlcnRzCisJCSAqICJSZWd1bGF0b3J5IGRvbWFpbiBjb2RlcyIgKDgwMi4xMS0yMDA3IDE0LjguMi4yKQorCQkgKiBpbnRvIElTTy9JRUMgMzE2Ni0xIGFscGhhMiBmb3IgcmVndWxhdG9yeV9oaW50LgorCQkgKi8KKwl9Cit9CisKK3N0YXRpYyBpbnQgcDU0X2NvbnZlcnRfb3V0cHV0X2xpbWl0cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsCisJCQkJICAgICB1OCAqZGF0YSwgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKKworCWlmIChsZW4gPCAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChkYXRhWzBdICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogdW5rbm93biBvdXRwdXQgcG93ZXIgZGIgcmV2aXNpb246JXhcbiIsCisJCSAgICAgICB3aXBoeV9uYW1lKGRldi0+d2lwaHkpLCBkYXRhWzBdKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKDIgKyBkYXRhWzFdICogc2l6ZW9mKHN0cnVjdCBwZGFfY2hhbm5lbF9vdXRwdXRfbGltaXQpID4gbGVuKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXByaXYtPm91dHB1dF9saW1pdCA9IGttYWxsb2MoZGF0YVsxXSAqCisJCXNpemVvZihzdHJ1Y3QgcGRhX2NoYW5uZWxfb3V0cHV0X2xpbWl0KSArCisJCXNpemVvZigqcHJpdi0+b3V0cHV0X2xpbWl0KSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIXByaXYtPm91dHB1dF9saW1pdCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwcml2LT5vdXRwdXRfbGltaXQtPm9mZnNldCA9IDA7CisJcHJpdi0+b3V0cHV0X2xpbWl0LT5lbnRyaWVzID0gZGF0YVsxXTsKKwlwcml2LT5vdXRwdXRfbGltaXQtPmVudHJ5X3NpemUgPQorCQlzaXplb2Yoc3RydWN0IHBkYV9jaGFubmVsX291dHB1dF9saW1pdCk7CisJcHJpdi0+b3V0cHV0X2xpbWl0LT5sZW4gPSBwcml2LT5vdXRwdXRfbGltaXQtPmVudHJ5X3NpemUgKgorCQkJCSAgcHJpdi0+b3V0cHV0X2xpbWl0LT5lbnRyaWVzICsKKwkJCQkgIHByaXYtPm91dHB1dF9saW1pdC0+b2Zmc2V0OworCisJbWVtY3B5KHByaXYtPm91dHB1dF9saW1pdC0+ZGF0YSwgJmRhdGFbMl0sCisJICAgICAgIGRhdGFbMV0gKiBzaXplb2Yoc3RydWN0IHBkYV9jaGFubmVsX291dHB1dF9saW1pdCkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcDU0X2NhbF9kYXRhYmFzZSAqcDU0X2NvbnZlcnRfZGIoc3RydWN0IHBkYV9jdXN0b21fd3JhcHBlciAqc3JjLAorCQkJCQkgICAgICAgc2l6ZV90IHRvdGFsX2xlbikKK3sKKwlzdHJ1Y3QgcDU0X2NhbF9kYXRhYmFzZSAqZHN0OworCXNpemVfdCBwYXlsb2FkX2xlbiwgZW50cmllcywgZW50cnlfc2l6ZSwgb2Zmc2V0OworCisJcGF5bG9hZF9sZW4gPSBsZTE2X3RvX2NwdShzcmMtPmxlbik7CisJZW50cmllcyA9IGxlMTZfdG9fY3B1KHNyYy0+ZW50cmllcyk7CisJZW50cnlfc2l6ZSA9IGxlMTZfdG9fY3B1KHNyYy0+ZW50cnlfc2l6ZSk7CisJb2Zmc2V0ID0gbGUxNl90b19jcHUoc3JjLT5vZmZzZXQpOworCWlmICgoKGVudHJpZXMgKiBlbnRyeV9zaXplICsgb2Zmc2V0KSAhPSBwYXlsb2FkX2xlbikgfHwKKwkgICAgIChwYXlsb2FkX2xlbiArIHNpemVvZigqc3JjKSAhPSB0b3RhbF9sZW4pKQorCQlyZXR1cm4gTlVMTDsKKworCWRzdCA9IGttYWxsb2Moc2l6ZW9mKCpkc3QpICsgcGF5bG9hZF9sZW4sIEdGUF9LRVJORUwpOworCWlmICghZHN0KQorCQlyZXR1cm4gTlVMTDsKKworCWRzdC0+ZW50cmllcyA9IGVudHJpZXM7CisJZHN0LT5lbnRyeV9zaXplID0gZW50cnlfc2l6ZTsKKwlkc3QtPm9mZnNldCA9IG9mZnNldDsKKwlkc3QtPmxlbiA9IHBheWxvYWRfbGVuOworCisJbWVtY3B5KGRzdC0+ZGF0YSwgc3JjLT5kYXRhLCBwYXlsb2FkX2xlbik7CisJcmV0dXJuIGRzdDsKK30KKworaW50IHA1NF9wYXJzZV9lZXByb20oc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCB2b2lkICplZXByb20sIGludCBsZW4pCiB7CiAJc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7CiAJc3RydWN0IGVlcHJvbV9wZGFfd3JhcCAqd3JhcCA9IE5VTEw7CkBAIC00MDEsMzAgKzUxMSwxNyBAQAogCiAJCXN3aXRjaCAobGUxNl90b19jcHUoZW50cnktPmNvZGUpKSB7CiAJCWNhc2UgUERSX01BQ19BRERSRVNTOgorCQkJaWYgKGRhdGFfbGVuICE9IEVUSF9BTEVOKQorCQkJCWJyZWFrOwogCQkJU0VUX0lFRUU4MDIxMV9QRVJNX0FERFIoZGV2LCBlbnRyeS0+ZGF0YSk7CiAJCQlicmVhazsKIAkJY2FzZSBQRFJfUFJJU01fUEFfQ0FMX09VVFBVVF9QT1dFUl9MSU1JVFM6Ci0JCQlpZiAoZGF0YV9sZW4gPCAyKSB7Ci0JCQkJZXJyID0gLUVJTlZBTDsKKwkJCWlmIChwcml2LT5vdXRwdXRfbGltaXQpCisJCQkJYnJlYWs7CisJCQllcnIgPSBwNTRfY29udmVydF9vdXRwdXRfbGltaXRzKGRldiwgZW50cnktPmRhdGEsCisJCQkJCQkJZGF0YV9sZW4pOworCQkJaWYgKGVycikKIAkJCQlnb3RvIGVycjsKLQkJCX0KLQotCQkJaWYgKDIgKyBlbnRyeS0+ZGF0YVsxXSpzaXplb2YoKnByaXYtPm91dHB1dF9saW1pdCkgPiBkYXRhX2xlbikgewotCQkJCWVyciA9IC1FSU5WQUw7Ci0JCQkJZ290byBlcnI7Ci0JCQl9Ci0KLQkJCXByaXYtPm91dHB1dF9saW1pdCA9IGttYWxsb2MoZW50cnktPmRhdGFbMV0gKgotCQkJCXNpemVvZigqcHJpdi0+b3V0cHV0X2xpbWl0KSwgR0ZQX0tFUk5FTCk7Ci0KLQkJCWlmICghcHJpdi0+b3V0cHV0X2xpbWl0KSB7Ci0JCQkJZXJyID0gLUVOT01FTTsKLQkJCQlnb3RvIGVycjsKLQkJCX0KLQotCQkJbWVtY3B5KHByaXYtPm91dHB1dF9saW1pdCwgJmVudHJ5LT5kYXRhWzJdLAotCQkJICAgICAgIGVudHJ5LT5kYXRhWzFdKnNpemVvZigqcHJpdi0+b3V0cHV0X2xpbWl0KSk7Ci0JCQlwcml2LT5vdXRwdXRfbGltaXRfbGVuID0gZW50cnktPmRhdGFbMV07CiAJCQlicmVhazsKIAkJY2FzZSBQRFJfUFJJU01fUEFfQ0FMX0NVUlZFX0RBVEE6IHsKIAkJCXN0cnVjdCBwZGFfcGFfY3VydmVfZGF0YSAqY3VydmVfZGF0YSA9CkBAIC00NjMsNiArNTYwLDkgQEAKIAkJCW1lbWNweShwcml2LT5pcV9hdXRvY2FsLCBlbnRyeS0+ZGF0YSwgZGF0YV9sZW4pOwogCQkJcHJpdi0+aXFfYXV0b2NhbF9sZW4gPSBkYXRhX2xlbiAvIHNpemVvZihzdHJ1Y3QgcGRhX2lxX2F1dG9jYWxfZW50cnkpOwogCQkJYnJlYWs7CisJCWNhc2UgUERSX0RFRkFVTFRfQ09VTlRSWToKKwkJCXA1NF9wYXJzZV9kZWZhdWx0X2NvdW50cnkoZGV2LCBlbnRyeS0+ZGF0YSwgZGF0YV9sZW4pOworCQkJYnJlYWs7CiAJCWNhc2UgUERSX0lOVEVSRkFDRV9MSVNUOgogCQkJdG1wID0gZW50cnktPmRhdGE7CiAJCQl3aGlsZSAoKHU4ICopdG1wIDwgZW50cnktPmRhdGEgKyBkYXRhX2xlbikgewpAQCAtNDczLDYgKzU3Myw4IEBACiAJCQl9CiAJCQlicmVhazsKIAkJY2FzZSBQRFJfSEFSRFdBUkVfUExBVEZPUk1fQ09NUE9ORU5UX0lEOgorCQkJaWYgKGRhdGFfbGVuIDwgMikKKwkJCQlicmVhazsKIAkJCXByaXYtPnZlcnNpb24gPSAqKHU4ICopKGVudHJ5LT5kYXRhICsgMSk7CiAJCQlicmVhazsKIAkJY2FzZSBQRFJfUlNTSV9MSU5FQVJfQVBQUk9YSU1BVElPTjoKQEAgLTQ4MSw2ICs1ODMsMzQgQEAKIAkJCXA1NF9wYXJzZV9yc3NpY2FsKGRldiwgZW50cnktPmRhdGEsIGRhdGFfbGVuLAogCQkJCQkgIGxlMTZfdG9fY3B1KGVudHJ5LT5jb2RlKSk7CiAJCQlicmVhazsKKwkJY2FzZSBQRFJfUlNTSV9MSU5FQVJfQVBQUk9YSU1BVElPTl9DVVNUT006IHsKKwkJCV9fbGUxNiAqc3JjID0gKHZvaWQgKikgZW50cnktPmRhdGE7CisJCQlzMTYgKmRzdCA9ICh2b2lkICopICZwcml2LT5yc3NpY2FsX2RiOworCQkJaW50IGk7CisKKwkJCWlmIChkYXRhX2xlbiAhPSBzaXplb2YocHJpdi0+cnNzaWNhbF9kYikpIHsKKwkJCQllcnIgPSAtRUlOVkFMOworCQkJCWdvdG8gZXJyOworCQkJfQorCQkJZm9yIChpID0gMDsgaSA8IHNpemVvZihwcml2LT5yc3NpY2FsX2RiKSAvCisJCQkJCXNpemVvZigqc3JjKTsgaSsrKQorCQkJCSooZHN0KyspID0gKHMxNikgbGUxNl90b19jcHUoKihzcmMrKykpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgUERSX1BSSVNNX1BBX0NBTF9PVVRQVVRfUE9XRVJfTElNSVRTX0NVU1RPTTogeworCQkJc3RydWN0IHBkYV9jdXN0b21fd3JhcHBlciAqcGRhID0gKHZvaWQgKikgZW50cnktPmRhdGE7CisJCQlpZiAocHJpdi0+b3V0cHV0X2xpbWl0IHx8IGRhdGFfbGVuIDwgc2l6ZW9mKCpwZGEpKQorCQkJCWJyZWFrOworCQkJcHJpdi0+b3V0cHV0X2xpbWl0ID0gcDU0X2NvbnZlcnRfZGIocGRhLCBkYXRhX2xlbik7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBQRFJfUFJJU01fUEFfQ0FMX0NVUlZFX0RBVEFfQ1VTVE9NOiB7CisJCQlzdHJ1Y3QgcGRhX2N1c3RvbV93cmFwcGVyICpwZGEgPSAodm9pZCAqKSBlbnRyeS0+ZGF0YTsKKwkJCWlmIChwcml2LT5jdXJ2ZV9kYXRhIHx8IGRhdGFfbGVuIDwgc2l6ZW9mKCpwZGEpKQorCQkJCWJyZWFrOworCQkJcHJpdi0+Y3VydmVfZGF0YSA9IHA1NF9jb252ZXJ0X2RiKHBkYSwgZGF0YV9sZW4pOworCQkJfQorCQkJYnJlYWs7CiAJCWNhc2UgUERSX0VORDoKIAkJCS8qIG1ha2UgaXQgb3ZlcnJ1biAqLwogCQkJZW50cnlfbGVuID0gbGVuOwpAQCAtNDk3LDcgKzYyNyw2IEBACiAJCWNhc2UgUERSX1VURjhfT0VNX05BTUU6CiAJCWNhc2UgUERSX1VURjhfUFJPRFVDVF9OQU1FOgogCQljYXNlIFBEUl9DT1VOVFJZX0xJU1Q6Ci0JCWNhc2UgUERSX0RFRkFVTFRfQ09VTlRSWToKIAkJY2FzZSBQRFJfQU5URU5OQV9HQUlOOgogCQljYXNlIFBEUl9QUklTTV9JTkRJR09fUEFfQ0FMSUJSQVRJT05fREFUQToKIAkJY2FzZSBQRFJfUkVHVUxBVE9SWV9QT1dFUl9MSU1JVFM6CkBAIC01MjUsMTIgKzY1NCwxNiBAQAogCX0KIAogCXByaXYtPnJ4aHcgPSBzeW50aCAmIFBEUl9TWU5USF9GUk9OVEVORF9NQVNLOwotCWlmIChwcml2LT5yeGh3ID09IDQpCisJaWYgKHByaXYtPnJ4aHcgPT0gUERSX1NZTlRIX0ZST05URU5EX1hCT1cpCiAJCXA1NF9pbml0X3hib3dfc3ludGgoZGV2KTsKIAlpZiAoIShzeW50aCAmIFBEUl9TWU5USF8yNF9HSFpfRElTQUJMRUQpKQogCQlkZXYtPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXSA9ICZiYW5kXzJHSHo7CiAJaWYgKCEoc3ludGggJiBQRFJfU1lOVEhfNV9HSFpfRElTQUJMRUQpKQogCQlkZXYtPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXSA9ICZiYW5kXzVHSHo7CisJaWYgKChzeW50aCAmIFBEUl9TWU5USF9SWF9ESVZfTUFTSykgPT0gUERSX1NZTlRIX1JYX0RJVl9TVVBQT1JURUQpCisJCXByaXYtPnJ4X2RpdmVyc2l0eV9tYXNrID0gMzsKKwlpZiAoKHN5bnRoICYgUERSX1NZTlRIX1RYX0RJVl9NQVNLKSA9PSBQRFJfU1lOVEhfVFhfRElWX1NVUFBPUlRFRCkKKwkJcHJpdi0+dHhfZGl2ZXJzaXR5X21hc2sgPSAzOwogCiAJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGRldi0+d2lwaHktPnBlcm1fYWRkcikpIHsKIAkJdTggcGVybV9hZGRyW0VUSF9BTEVOXTsKQEAgLTU2OCwxMyArNzAxLDIxIEBACiAJCXdpcGh5X25hbWUoZGV2LT53aXBoeSkpOwogCXJldHVybiBlcnI7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChwNTRfcGFyc2VfZWVwcm9tKTsKIAogc3RhdGljIGludCBwNTRfcnNzaV90b19kYm0oc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBpbnQgcnNzaSkKIHsKIAlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKIAlpbnQgYmFuZCA9IGRldi0+Y29uZi5jaGFubmVsLT5iYW5kOwogCi0JcmV0dXJuICgocnNzaSAqIHByaXYtPnJzc2ljYWxfZGJbYmFuZF0ubXVsKSAvIDY0ICsKKwlpZiAocHJpdi0+cnhodyAhPSBQRFJfU1lOVEhfRlJPTlRFTkRfTE9OR0JPVykKKwkJcmV0dXJuICgocnNzaSAqIHByaXYtPnJzc2ljYWxfZGJbYmFuZF0ubXVsKSAvIDY0ICsKKwkJCSBwcml2LT5yc3NpY2FsX2RiW2JhbmRdLmFkZCkgLyA0OworCWVsc2UKKwkJLyoKKwkJICogVE9ETzogZmluZCB0aGUgY29ycmVjdCBmb3JtdWxhCisJCSAqLworCQlyZXR1cm4gKChyc3NpICogcHJpdi0+cnNzaWNhbF9kYltiYW5kXS5tdWwpIC8gNjQgKwogCQkJIHByaXYtPnJzc2ljYWxfZGJbYmFuZF0uYWRkKSAvIDQ7CiB9CiAKQEAgLTU5NywxMCArNzM4LDcgQEAKIAkJcmV0dXJuIDA7CiAKIAlpZiAoIShoZHItPmZsYWdzICYgY3B1X3RvX2xlMTYoUDU0X0hEUl9GTEFHX0RBVEFfSU5fRkNTX0dPT0QpKSkgewotCQlpZiAocHJpdi0+ZmlsdGVyX2ZsYWdzICYgRklGX0ZDU0ZBSUwpCi0JCQlyeF9zdGF0dXMuZmxhZyB8PSBSWF9GTEFHX0ZBSUxFRF9GQ1NfQ1JDOwotCQllbHNlCi0JCQlyZXR1cm4gMDsKKwkJcmV0dXJuIDA7CiAJfQogCiAJaWYgKGhkci0+ZGVjcnlwdF9zdGF0dXMgPT0gUDU0X0RFQ1JZUFRfT0spCkBAIC02NTUsNyArNzkzLDggQEAKIAkJcmV0dXJuIDsKIAogCWZvciAoaSA9IDA7IGkgPCBkZXYtPnF1ZXVlczsgaSsrKQotCQlpZiAocHJpdi0+dHhfc3RhdHNbaSArIDRdLmxlbiA8IHByaXYtPnR4X3N0YXRzW2kgKyA0XS5saW1pdCkKKwkJaWYgKHByaXYtPnR4X3N0YXRzW2kgKyBQNTRfUVVFVUVfREFUQV0ubGVuIDwKKwkJICAgIHByaXYtPnR4X3N0YXRzW2kgKyBQNTRfUVVFVUVfREFUQV0ubGltaXQpCiAJCQlpZWVlODAyMTFfd2FrZV9xdWV1ZShkZXYsIGkpOwogfQogCkBAIC02NjMsNyArODAyLDcgQEAKIHsKIAlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm87Ci0Jc3RydWN0IG1lbXJlY29yZCAqcmFuZ2U7CisJc3RydWN0IHA1NF90eF9pbmZvICpyYW5nZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUzMiBmcmVlZCA9IDAsIGxhc3RfYWRkciA9IHByaXYtPnJ4X3N0YXJ0OwogCkBAIC02ODEsMTggKzgyMCwxOCBAQAogCXJhbmdlID0gKHZvaWQgKilpbmZvLT5yYXRlX2RyaXZlcl9kYXRhOwogCWlmIChza2ItPnByZXYgIT0gKHN0cnVjdCBza19idWZmICopJnByaXYtPnR4X3F1ZXVlKSB7CiAJCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqbmk7Ci0JCXN0cnVjdCBtZW1yZWNvcmQgKm1yOworCQlzdHJ1Y3QgcDU0X3R4X2luZm8gKm1yOwogCiAJCW5pID0gSUVFRTgwMjExX1NLQl9DQihza2ItPnByZXYpOwotCQltciA9IChzdHJ1Y3QgbWVtcmVjb3JkICopbmktPnJhdGVfZHJpdmVyX2RhdGE7CisJCW1yID0gKHN0cnVjdCBwNTRfdHhfaW5mbyAqKW5pLT5yYXRlX2RyaXZlcl9kYXRhOwogCQlsYXN0X2FkZHIgPSBtci0+ZW5kX2FkZHI7CiAJfQogCWlmIChza2ItPm5leHQgIT0gKHN0cnVjdCBza19idWZmICopJnByaXYtPnR4X3F1ZXVlKSB7CiAJCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqbmk7Ci0JCXN0cnVjdCBtZW1yZWNvcmQgKm1yOworCQlzdHJ1Y3QgcDU0X3R4X2luZm8gKm1yOwogCiAJCW5pID0gSUVFRTgwMjExX1NLQl9DQihza2ItPm5leHQpOwotCQltciA9IChzdHJ1Y3QgbWVtcmVjb3JkICopbmktPnJhdGVfZHJpdmVyX2RhdGE7CisJCW1yID0gKHN0cnVjdCBwNTRfdHhfaW5mbyAqKW5pLT5yYXRlX2RyaXZlcl9kYXRhOwogCQlmcmVlZCA9IG1yLT5zdGFydF9hZGRyIC0gbGFzdF9hZGRyOwogCX0gZWxzZQogCQlmcmVlZCA9IHByaXYtPnJ4X2VuZCAtIGxhc3RfYWRkcjsKQEAgLTczNSw3ICs4NzQsNyBAQAogCXN0cnVjdCBwNTRfZnJhbWVfc2VudCAqcGF5bG9hZCA9IChzdHJ1Y3QgcDU0X2ZyYW1lX3NlbnQgKikgaGRyLT5kYXRhOwogCXN0cnVjdCBza19idWZmICplbnRyeTsKIAl1MzIgYWRkciA9IGxlMzJfdG9fY3B1KGhkci0+cmVxX2lkKSAtIHByaXYtPmhlYWRyb29tOwotCXN0cnVjdCBtZW1yZWNvcmQgKnJhbmdlID0gTlVMTDsKKwlzdHJ1Y3QgcDU0X3R4X2luZm8gKnJhbmdlID0gTlVMTDsKIAl1MzIgZnJlZWQgPSAwOwogCXUzMiBsYXN0X2FkZHIgPSBwcml2LT5yeF9zdGFydDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNzU4LDEwICs4OTcsMTAgQEAKIAogCQlpZiAoZW50cnktPm5leHQgIT0gKHN0cnVjdCBza19idWZmICopJnByaXYtPnR4X3F1ZXVlKSB7CiAJCQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKm5pOwotCQkJc3RydWN0IG1lbXJlY29yZCAqbXI7CisJCQlzdHJ1Y3QgcDU0X3R4X2luZm8gKm1yOwogCiAJCQluaSA9IElFRUU4MDIxMV9TS0JfQ0IoZW50cnktPm5leHQpOwotCQkJbXIgPSAoc3RydWN0IG1lbXJlY29yZCAqKW5pLT5yYXRlX2RyaXZlcl9kYXRhOworCQkJbXIgPSAoc3RydWN0IHA1NF90eF9pbmZvICopbmktPnJhdGVfZHJpdmVyX2RhdGE7CiAJCQlmcmVlZCA9IG1yLT5zdGFydF9hZGRyIC0gbGFzdF9hZGRyOwogCQl9IGVsc2UKIAkJCWZyZWVkID0gcHJpdi0+cnhfZW5kIC0gbGFzdF9hZGRyOwpAQCAtNzc2LDkgKzkxNSwxNiBAQAogCQlwcml2LT50eF9zdGF0c1tlbnRyeV9kYXRhLT5od19xdWV1ZV0ubGVuLS07CiAJCXByaXYtPnN0YXRzLmRvdDExQUNLRmFpbHVyZUNvdW50ICs9IHBheWxvYWQtPnRyaWVzIC0gMTsKIAotCQlpZiAodW5saWtlbHkoZW50cnkgPT0gcHJpdi0+Y2FjaGVkX2JlYWNvbikpIHsKKwkJLyoKKwkJICogRnJhbWVzIGluIFA1NF9RVUVVRV9GV1NDQU4gYW5kIFA1NF9RVUVVRV9CRUFDT04gYXJlCisJCSAqIGdlbmVyYXRlZCBieSB0aGUgZHJpdmVyLiBUaGVyZWZvcmUgdHhfc3RhdHVzIGlzIGJvZ3VzCisJCSAqIGFuZCB3ZSBkb24ndCB3YW50IHRvIGNvbmZ1c2UgdGhlIG1hYzgwMjExIHN0YWNrLgorCQkgKi8KKwkJaWYgKHVubGlrZWx5KGVudHJ5X2RhdGEtPmh3X3F1ZXVlIDwgUDU0X1FVRVVFX0ZXU0NBTikpIHsKKwkJCWlmIChlbnRyeV9kYXRhLT5od19xdWV1ZSA9PSBQNTRfUVVFVUVfQkVBQ09OKQorCQkJCXByaXYtPmNhY2hlZF9iZWFjb24gPSBOVUxMOworCiAJCQlrZnJlZV9za2IoZW50cnkpOwotCQkJcHJpdi0+Y2FjaGVkX2JlYWNvbiA9IE5VTEw7CiAJCQlnb3RvIG91dDsKIAkJfQogCkBAIC05NzEsOCArMTExNyw4IEBACiAgKiBjYW4gZmluZCBzb21lIHVudXNlZCBtZW1vcnkgdG8gdXBsb2FkIG91ciBwYWNrZXRzIHRvLiBIb3dldmVyLCBkYXRhIHRoYXQgd2UKICAqIHdhbnQgdGhlIGNhcmQgdG8gVFggbmVlZHMgdG8gc3RheSBpbnRhY3QgdW50aWwgdGhlIGNhcmQgaGFzIHRvbGQgdXMgdGhhdAogICogaXQgaXMgZG9uZSB3aXRoIGl0LiBUaGlzIGZ1bmN0aW9uIGZpbmRzIGVtcHR5IHBsYWNlcyB3ZSBjYW4gdXBsb2FkIHRvIGFuZAotICogbWFya3MgYWxsb2NhdGVkIGFyZWFzIGFzIHJlc2VydmVkIGlmIG5lY2Vzc2FyeS4gcDU0X3J4X2ZyYW1lX3NlbnQgZnJlZXMKLSAqIGFsbG9jYXRlZCBhcmVhcy4KKyAqIG1hcmtzIGFsbG9jYXRlZCBhcmVhcyBhcyByZXNlcnZlZCBpZiBuZWNlc3NhcnkuIHA1NF9yeF9mcmFtZV9zZW50IG9yCisgKiBwNTRfZnJlZV9za2IgZnJlZXMgYWxsb2NhdGVkIGFyZWFzLgogICovCiBzdGF0aWMgaW50IHA1NF9hc3NpZ25fYWRkcmVzcyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgICAgICAgc3RydWN0IHA1NF9oZHIgKmRhdGEsIHUzMiBsZW4pCkBAIC05ODEsNyArMTEyNyw3IEBACiAJc3RydWN0IHNrX2J1ZmYgKmVudHJ5OwogCXN0cnVjdCBza19idWZmICp0YXJnZXRfc2tiID0gTlVMTDsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm87Ci0Jc3RydWN0IG1lbXJlY29yZCAqcmFuZ2U7CisJc3RydWN0IHA1NF90eF9pbmZvICpyYW5nZTsKIAl1MzIgbGFzdF9hZGRyID0gcHJpdi0+cnhfc3RhcnQ7CiAJdTMyIGxhcmdlc3RfaG9sZSA9IDA7CiAJdTMyIHRhcmdldF9hZGRyID0gcHJpdi0+cnhfc3RhcnQ7CkBAIC0xMDYzLDI1ICsxMjA5LDI5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqcDU0X2FsbG9jX3NrYihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsCi0JCXUxNiBoZHJfZmxhZ3MsIHUxNiBsZW4sIHUxNiB0eXBlLCBnZnBfdCBtZW1mbGFncykKK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqcDU0X2FsbG9jX3NrYihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHUxNiBoZHJfZmxhZ3MsCisJCQkJICAgICB1MTYgcGF5bG9hZF9sZW4sIHUxNiB0eXBlLCBnZnBfdCBtZW1mbGFncykKIHsKIAlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKIAlzdHJ1Y3QgcDU0X2hkciAqaGRyOwogCXN0cnVjdCBza19idWZmICpza2I7CisJc2l6ZV90IGZyYW1lX2xlbiA9IHNpemVvZigqaGRyKSArIHBheWxvYWRfbGVuOwogCi0Jc2tiID0gX19kZXZfYWxsb2Nfc2tiKGxlbiArIHByaXYtPnR4X2hkcl9sZW4sIG1lbWZsYWdzKTsKKwlpZiAoZnJhbWVfbGVuID4gUDU0X01BWF9DVFJMX0ZSQU1FX0xFTikKKwkJcmV0dXJuIE5VTEw7CisKKwlza2IgPSBfX2Rldl9hbGxvY19za2IocHJpdi0+dHhfaGRyX2xlbiArIGZyYW1lX2xlbiwgbWVtZmxhZ3MpOwogCWlmICghc2tiKQogCQlyZXR1cm4gTlVMTDsKIAlza2JfcmVzZXJ2ZShza2IsIHByaXYtPnR4X2hkcl9sZW4pOwogCiAJaGRyID0gKHN0cnVjdCBwNTRfaGRyICopIHNrYl9wdXQoc2tiLCBzaXplb2YoKmhkcikpOwogCWhkci0+ZmxhZ3MgPSBjcHVfdG9fbGUxNihoZHJfZmxhZ3MpOwotCWhkci0+bGVuID0gY3B1X3RvX2xlMTYobGVuIC0gc2l6ZW9mKCpoZHIpKTsKKwloZHItPmxlbiA9IGNwdV90b19sZTE2KHBheWxvYWRfbGVuKTsKIAloZHItPnR5cGUgPSBjcHVfdG9fbGUxNih0eXBlKTsKIAloZHItPnRyaWVzID0gaGRyLT5ydHNfdHJpZXMgPSAwOwogCi0JaWYgKHVubGlrZWx5KHA1NF9hc3NpZ25fYWRkcmVzcyhkZXYsIHNrYiwgaGRyLCBsZW4pKSkgeworCWlmIChwNTRfYXNzaWduX2FkZHJlc3MoZGV2LCBza2IsIGhkciwgZnJhbWVfbGVuKSkgewogCQlrZnJlZV9za2Ioc2tiKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQpAQCAtMTA5MSw3ICsxMjQxLDYgQEAKIGludCBwNTRfcmVhZF9lZXByb20oc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQogewogCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OwotCXN0cnVjdCBwNTRfaGRyICpoZHIgPSBOVUxMOwogCXN0cnVjdCBwNTRfZWVwcm9tX2xtODYgKmVlcHJvbV9oZHI7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzaXplX3QgZWVwcm9tX3NpemUgPSAweDIwMjAsIG9mZnNldCA9IDAsIGJsb2Nrc2l6ZSwgbWF4YmxvY2tzaXplOwpAQCAtMTEwNCw5ICsxMjUzLDkgQEAKIAllbHNlCiAJCW1heGJsb2Nrc2l6ZSAtPSAweDQ7CiAKLQlza2IgPSBwNTRfYWxsb2Nfc2tiKGRldiwgUDU0X0hEUl9GTEFHX0NPTlRST0wsIHNpemVvZigqaGRyKSArCi0JCQkgICAgc2l6ZW9mKCplZXByb21faGRyKSArIG1heGJsb2Nrc2l6ZSwKLQkJCSAgICBQNTRfQ09OVFJPTF9UWVBFX0VFUFJPTV9SRUFEQkFDSywgR0ZQX0tFUk5FTCk7CisJc2tiID0gcDU0X2FsbG9jX3NrYihkZXYsIFA1NF9IRFJfRkxBR19DT05UUk9MLCBzaXplb2YoKmVlcHJvbV9oZHIpICsKKwkJCSAgICBtYXhibG9ja3NpemUsIFA1NF9DT05UUk9MX1RZUEVfRUVQUk9NX1JFQURCQUNLLAorCQkJICAgIEdGUF9LRVJORUwpOwogCWlmICghc2tiKQogCQlnb3RvIGZyZWU7CiAJcHJpdi0+ZWVwcm9tID0ga3phbGxvYyhFRVBST01fUkVBREJBQ0tfTEVOLCBHRlBfS0VSTkVMKTsKQEAgLTExNjIsOSArMTMxMSw4IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgcDU0X3RpbSAqdGltOwogCi0Jc2tiID0gcDU0X2FsbG9jX3NrYihkZXYsIFA1NF9IRFJfRkxBR19DT05UUk9MX09QU0VULAotCQkgICAgICBzaXplb2Yoc3RydWN0IHA1NF9oZHIpICsgc2l6ZW9mKCp0aW0pLAotCQkgICAgICBQNTRfQ09OVFJPTF9UWVBFX1RJTSwgR0ZQX0FUT01JQyk7CisJc2tiID0gcDU0X2FsbG9jX3NrYihkZXYsIFA1NF9IRFJfRkxBR19DT05UUk9MX09QU0VULCBzaXplb2YoKnRpbSksCisJCQkgICAgUDU0X0NPTlRST0xfVFlQRV9USU0sIEdGUF9BVE9NSUMpOwogCWlmICghc2tiKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMTE4MSw5ICsxMzI5LDggQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBwNTRfc3RhX3VubG9jayAqc3RhOwogCi0Jc2tiID0gcDU0X2FsbG9jX3NrYihkZXYsIFA1NF9IRFJfRkxBR19DT05UUk9MX09QU0VULAotCQlzaXplb2Yoc3RydWN0IHA1NF9oZHIpICsgc2l6ZW9mKCpzdGEpLAotCQlQNTRfQ09OVFJPTF9UWVBFX1BTTV9TVEFfVU5MT0NLLCBHRlBfQVRPTUlDKTsKKwlza2IgPSBwNTRfYWxsb2Nfc2tiKGRldiwgUDU0X0hEUl9GTEFHX0NPTlRST0xfT1BTRVQsIHNpemVvZigqc3RhKSwKKwkJCSAgICBQNTRfQ09OVFJPTF9UWVBFX1BTTV9TVEFfVU5MT0NLLCBHRlBfQVRPTUlDKTsKIAlpZiAoIXNrYikKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTEyMjMsOSArMTM3MCw4IEBACiAJc3RydWN0IHA1NF9oZHIgKmhkcjsKIAlzdHJ1Y3QgcDU0X3R4Y2FuY2VsICpjYW5jZWw7CiAKLQlza2IgPSBwNTRfYWxsb2Nfc2tiKGRldiwgUDU0X0hEUl9GTEFHX0NPTlRST0xfT1BTRVQsCi0JCXNpemVvZihzdHJ1Y3QgcDU0X2hkcikgKyBzaXplb2YoKmNhbmNlbCksCi0JCVA1NF9DT05UUk9MX1RZUEVfVFhDQU5DRUwsIEdGUF9BVE9NSUMpOworCXNrYiA9IHA1NF9hbGxvY19za2IoZGV2LCBQNTRfSERSX0ZMQUdfQ09OVFJPTF9PUFNFVCwgc2l6ZW9mKCpjYW5jZWwpLAorCQkJICAgIFA1NF9DT05UUk9MX1RZUEVfVFhDQU5DRUwsIEdGUF9BVE9NSUMpOwogCWlmICghc2tiKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMTI0Miw0NiArMTM4OCw3MyBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7CiAJc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7Ci0JaW50IHJldCA9IDA7Ci0KLQlpZiAodW5saWtlbHkoaWVlZTgwMjExX2lzX21nbXQoaGRyLT5mcmFtZV9jb250cm9sKSkpIHsKLQkJaWYgKGllZWU4MDIxMV9pc19iZWFjb24oaGRyLT5mcmFtZV9jb250cm9sKSkgewotCQkJKmFpZCA9IDA7Ci0JCQkqcXVldWUgPSAwOwotCQkJKmV4dHJhX2xlbiA9IElFRUU4MDIxMV9NQVhfVElNX0xFTjsKLQkJCSpmbGFncyA9IFA1NF9IRFJfRkxBR19EQVRBX09VVF9USU1FU1RBTVA7Ci0JCQlyZXR1cm4gMDsKLQkJfSBlbHNlIGlmIChpZWVlODAyMTFfaXNfcHJvYmVfcmVzcChoZHItPmZyYW1lX2NvbnRyb2wpKSB7Ci0JCQkqYWlkID0gMDsKLQkJCSpxdWV1ZSA9IDI7Ci0JCQkqZmxhZ3MgPSBQNTRfSERSX0ZMQUdfREFUQV9PVVRfVElNRVNUQU1QIHwKLQkJCQkgUDU0X0hEUl9GTEFHX0RBVEFfT1VUX05PQ0FOQ0VMOwotCQkJcmV0dXJuIDA7Ci0JCX0gZWxzZSB7Ci0JCQkqcXVldWUgPSAyOwotCQkJcmV0ID0gMDsKLQkJfQotCX0gZWxzZSB7Ci0JCSpxdWV1ZSArPSA0OwotCQlyZXQgPSAxOwotCX0KKwlpbnQgcmV0ID0gMTsKIAogCXN3aXRjaCAocHJpdi0+bW9kZSkgeworCWNhc2UgTkw4MDIxMV9JRlRZUEVfTU9OSVRPUjoKKwkJLyoKKwkJICogV2UgaGF2ZSB0byBzZXQgUDU0X0hEUl9GTEFHX0RBVEFfT1VUX1BST01JU0MgZm9yCisJCSAqIGV2ZXJ5IGZyYW1lIGluIHByb21pc2N1b3VzL21vbml0b3IgbW9kZS4KKwkJICogc2VlIFNUU1c0NXgwQyBMTUFDIEFQSSAtIHBhZ2UgMTIuCisJCSAqLworCQkqYWlkID0gMDsKKwkJKmZsYWdzID0gUDU0X0hEUl9GTEFHX0RBVEFfT1VUX1BST01JU0M7CisJCSpxdWV1ZSArPSBQNTRfUVVFVUVfREFUQTsKKwkJYnJlYWs7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgogCQkqYWlkID0gMTsKKwkJaWYgKHVubGlrZWx5KGllZWU4MDIxMV9pc19tZ210KGhkci0+ZnJhbWVfY29udHJvbCkpKSB7CisJCQkqcXVldWUgPSBQNTRfUVVFVUVfTUdNVDsKKwkJCXJldCA9IDA7CisJCX0gZWxzZQorCQkJKnF1ZXVlICs9IFA1NF9RVUVVRV9EQVRBOwogCQlicmVhazsKIAljYXNlIE5MODAyMTFfSUZUWVBFX0FQOgogCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOgogCQlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX1NFTkRfQUZURVJfRFRJTSkgewogCQkJKmFpZCA9IDA7Ci0JCQkqcXVldWUgPSAzOworCQkJKnF1ZXVlID0gUDU0X1FVRVVFX0NBQjsKIAkJCXJldHVybiAwOwogCQl9CisKKwkJaWYgKHVubGlrZWx5KGllZWU4MDIxMV9pc19tZ210KGhkci0+ZnJhbWVfY29udHJvbCkpKSB7CisJCQlpZiAoaWVlZTgwMjExX2lzX3Byb2JlX3Jlc3AoaGRyLT5mcmFtZV9jb250cm9sKSkgeworCQkJCSphaWQgPSAwOworCQkJCSpxdWV1ZSA9IFA1NF9RVUVVRV9NR01UOworCQkJCSpmbGFncyA9IFA1NF9IRFJfRkxBR19EQVRBX09VVF9USU1FU1RBTVAgfAorCQkJCQkgUDU0X0hEUl9GTEFHX0RBVEFfT1VUX05PQ0FOQ0VMOworCQkJCXJldHVybiAwOworCQkJfSBlbHNlIGlmIChpZWVlODAyMTFfaXNfYmVhY29uKGhkci0+ZnJhbWVfY29udHJvbCkpIHsKKwkJCQkqYWlkID0gMDsKKworCQkJCWlmIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfSU5KRUNURUQpIHsKKwkJCQkJLyoKKwkJCQkJICogSW5qZWN0aW5nIGJlYWNvbnMgb24gdG9wIG9mIGEgQVAgaXMKKwkJCQkJICogbm90IGEgZ29vZCBpZGVhLi4uIG5ldmVydGhlbGVzcywKKwkJCQkJICogaXQgc2hvdWxkIGJlIGRvYWJsZS4KKwkJCQkJICovCisKKwkJCQkJKnF1ZXVlICs9IFA1NF9RVUVVRV9EQVRBOworCQkJCQlyZXR1cm4gMTsKKwkJCQl9CisKKwkJCQkqZmxhZ3MgPSBQNTRfSERSX0ZMQUdfREFUQV9PVVRfVElNRVNUQU1QOworCQkJCSpxdWV1ZSA9IFA1NF9RVUVVRV9CRUFDT047CisJCQkJKmV4dHJhX2xlbiA9IElFRUU4MDIxMV9NQVhfVElNX0xFTjsKKwkJCQlyZXR1cm4gMDsKKwkJCX0gZWxzZSB7CisJCQkJKnF1ZXVlID0gUDU0X1FVRVVFX01HTVQ7CisJCQkJcmV0ID0gMDsKKwkJCX0KKwkJfSBlbHNlCisJCQkqcXVldWUgKz0gUDU0X1FVRVVFX0RBVEE7CisKIAkJaWYgKGluZm8tPmNvbnRyb2wuc3RhKQogCQkJKmFpZCA9IGluZm8tPmNvbnRyb2wuc3RhLT5haWQ7CiAJCWVsc2UKIAkJCSpmbGFncyB8PSBQNTRfSERSX0ZMQUdfREFUQV9PVVRfTk9DQU5DRUw7CisJCWJyZWFrOwogCX0KIAlyZXR1cm4gcmV0OwogfQpAQCAtMTMwMyw3ICsxNDc2LDcgQEAKIHN0YXRpYyBpbnQgcDU0X3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9zdGF0cyAqY3VycmVudF9xdWV1ZSA9IE5VTEw7CisJc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9zdGF0cyAqY3VycmVudF9xdWV1ZTsKIAlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKIAlzdHJ1Y3QgcDU0X2hkciAqaGRyOwogCXN0cnVjdCBwNTRfdHhfZGF0YSAqdHhoZHI7CkBAIC0xNDQ2LDE1ICsxNjE5LDE3IEBACiAJfQogCXR4aGRyLT5jcnlwdF9vZmZzZXQgPSBjcnlwdF9vZmZzZXQ7CiAJdHhoZHItPmh3X3F1ZXVlID0gcXVldWU7Ci0JaWYgKGN1cnJlbnRfcXVldWUpCi0JCXR4aGRyLT5iYWNrbG9nID0gY3VycmVudF9xdWV1ZS0+bGVuOwotCWVsc2UKLQkJdHhoZHItPmJhY2tsb2cgPSAwOworCXR4aGRyLT5iYWNrbG9nID0gY3VycmVudF9xdWV1ZS0+bGVuOwogCW1lbXNldCh0eGhkci0+ZHVyYXRpb25zLCAwLCBzaXplb2YodHhoZHItPmR1cmF0aW9ucykpOwotCXR4aGRyLT50eF9hbnRlbm5hID0gKGluZm8tPmFudGVubmFfc2VsX3R4ID09IDApID8KLQkJMiA6IGluZm8tPmFudGVubmFfc2VsX3R4IC0gMTsKLQl0eGhkci0+b3V0cHV0X3Bvd2VyID0gcHJpdi0+b3V0cHV0X3Bvd2VyOwotCXR4aGRyLT5jdHNfcmF0ZSA9IGN0c19yYXRlOworCXR4aGRyLT50eF9hbnRlbm5hID0gKChpbmZvLT5hbnRlbm5hX3NlbF90eCA9PSAwKSA/CisJCTIgOiBpbmZvLT5hbnRlbm5hX3NlbF90eCAtIDEpICYgcHJpdi0+dHhfZGl2ZXJzaXR5X21hc2s7CisJaWYgKHByaXYtPnJ4aHcgPT0gUERSX1NZTlRIX0ZST05URU5EX0xPTkdCT1cpIHsKKwkJdHhoZHItPmxvbmdib3cuY3RzX3JhdGUgPSBjdHNfcmF0ZTsKKwkJdHhoZHItPmxvbmdib3cub3V0cHV0X3Bvd2VyID0gY3B1X3RvX2xlMTYocHJpdi0+b3V0cHV0X3Bvd2VyKTsKKwl9IGVsc2UgeworCQl0eGhkci0+bm9ybWFsLm91dHB1dF9wb3dlciA9IHByaXYtPm91dHB1dF9wb3dlcjsKKwkJdHhoZHItPm5vcm1hbC5jdHNfcmF0ZSA9IGN0c19yYXRlOworCX0KIAlpZiAocGFkZGluZykKIAkJdHhoZHItPmFsaWduWzBdID0gcGFkZGluZzsKIApAQCAtMTQ2NywxNCArMTY0MiwxMiBAQAogCXF1ZXVlX2RlbGF5ZWRfd29yayhkZXYtPndvcmtxdWV1ZSwgJnByaXYtPndvcmssCiAJCQkgICBtc2Vjc190b19qaWZmaWVzKFA1NF9UWF9GUkFNRV9MSUZFVElNRSkpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAogIGVycjoKIAlza2JfcHVsbChza2IsIHNpemVvZigqaGRyKSArIHNpemVvZigqdHhoZHIpICsgcGFkZGluZyk7Ci0JaWYgKGN1cnJlbnRfcXVldWUpIHsKLQkJY3VycmVudF9xdWV1ZS0+bGVuLS07Ci0JCWN1cnJlbnRfcXVldWUtPmNvdW50LS07Ci0JfQorCWN1cnJlbnRfcXVldWUtPmxlbi0tOworCWN1cnJlbnRfcXVldWUtPmNvdW50LS07CiAJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwogfQogCkBAIC0xNDg1LDkgKzE2NTgsOCBAQAogCXN0cnVjdCBwNTRfc2V0dXBfbWFjICpzZXR1cDsKIAl1MTYgbW9kZTsKIAotCXNrYiA9IHA1NF9hbGxvY19za2IoZGV2LCBQNTRfSERSX0ZMQUdfQ09OVFJPTF9PUFNFVCwgc2l6ZW9mKCpzZXR1cCkgKwotCQkJICAgIHNpemVvZihzdHJ1Y3QgcDU0X2hkciksIFA1NF9DT05UUk9MX1RZUEVfU0VUVVAsCi0JCQkgICAgR0ZQX0FUT01JQyk7CisJc2tiID0gcDU0X2FsbG9jX3NrYihkZXYsIFA1NF9IRFJfRkxBR19DT05UUk9MX09QU0VULCBzaXplb2YoKnNldHVwKSwKKwkJCSAgICBQNTRfQ09OVFJPTF9UWVBFX1NFVFVQLCBHRlBfQVRPTUlDKTsKIAlpZiAoIXNrYikKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTE1MDQsMTkgKzE2NzYsMjkgQEAKIAkJY2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOgogCQkJbW9kZSA9IFA1NF9GSUxURVJfVFlQRV9JQlNTOwogCQkJYnJlYWs7CisJCWNhc2UgTkw4MDIxMV9JRlRZUEVfTU9OSVRPUjoKKwkJCW1vZGUgPSBQNTRfRklMVEVSX1RZUEVfUFJPTUlTQ1VPVVM7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCW1vZGUgPSBQNTRfRklMVEVSX1RZUEVfTk9ORTsKKwkJCW1vZGUgPSBQNTRfRklMVEVSX1RZUEVfSElCRVJOQVRFOwogCQkJYnJlYWs7CiAJCX0KLQkJaWYgKHByaXYtPmZpbHRlcl9mbGFncyAmIEZJRl9QUk9NSVNDX0lOX0JTUykKKworCQkvKgorCQkgKiAiVFJBTlNQQVJFTlQgYW5kIFBST01JU0NVT1VTIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCisJCSAqIFNUU1c0NVgwQyBMTUFDIEFQSSAtIHBhZ2UgMTIKKwkJICovCisJCWlmICgoKHByaXYtPmZpbHRlcl9mbGFncyAmIEZJRl9QUk9NSVNDX0lOX0JTUykgfHwKKwkJICAgICAocHJpdi0+ZmlsdGVyX2ZsYWdzICYgRklGX09USEVSX0JTUykpICYmCisJCSAgICAobW9kZSAhPSBQNTRfRklMVEVSX1RZUEVfUFJPTUlTQ1VPVVMpKQogCQkJbW9kZSB8PSBQNTRfRklMVEVSX1RZUEVfVFJBTlNQQVJFTlQ7CiAJfSBlbHNlCi0JCW1vZGUgPSBQNTRfRklMVEVSX1RZUEVfUlhfRElTQUJMRUQ7CisJCW1vZGUgPSBQNTRfRklMVEVSX1RZUEVfSElCRVJOQVRFOwogCiAJc2V0dXAtPm1hY19tb2RlID0gY3B1X3RvX2xlMTYobW9kZSk7CiAJbWVtY3B5KHNldHVwLT5tYWNfYWRkciwgcHJpdi0+bWFjX2FkZHIsIEVUSF9BTEVOKTsKIAltZW1jcHkoc2V0dXAtPmJzc2lkLCBwcml2LT5ic3NpZCwgRVRIX0FMRU4pOwotCXNldHVwLT5yeF9hbnRlbm5hID0gMjsgLyogYXV0b21hdGljICovCisJc2V0dXAtPnJ4X2FudGVubmEgPSAyICYgcHJpdi0+cnhfZGl2ZXJzaXR5X21hc2s7IC8qIGF1dG9tYXRpYyAqLwogCXNldHVwLT5yeF9hbGlnbiA9IDA7CiAJaWYgKHByaXYtPmZ3X3ZhciA8IDB4NTAwKSB7CiAJCXNldHVwLT52MS5iYXNpY19yYXRlX21hc2sgPSBjcHVfdG9fbGUzMihwcml2LT5iYXNpY19yYXRlX21hc2spOwpAQCAtMTU0OSw3OSArMTczMSwxMzcgQEAKIHsKIAlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXN0cnVjdCBwNTRfc2NhbiAqY2hhbjsKKwlzdHJ1Y3QgcDU0X2hkciAqaGRyOworCXN0cnVjdCBwNTRfc2Nhbl9oZWFkICpoZWFkOworCXN0cnVjdCBwNTRfaXFfYXV0b2NhbF9lbnRyeSAqaXFfYXV0b2NhbDsKKwl1bmlvbiBwNTRfc2Nhbl9ib2R5X3VuaW9uICpib2R5OworCXN0cnVjdCBwNTRfc2Nhbl90YWlsX3JhdGUgKnJhdGU7CisJc3RydWN0IHBkYV9yc3NpX2NhbF9lbnRyeSAqcnNzaTsKIAl1bnNpZ25lZCBpbnQgaTsKIAl2b2lkICplbnRyeTsKLQlfX2xlMTYgZnJlcSA9IGNwdV90b19sZTE2KGRldi0+Y29uZi5jaGFubmVsLT5jZW50ZXJfZnJlcSk7CiAJaW50IGJhbmQgPSBkZXYtPmNvbmYuY2hhbm5lbC0+YmFuZDsKKwlfX2xlMTYgZnJlcSA9IGNwdV90b19sZTE2KGRldi0+Y29uZi5jaGFubmVsLT5jZW50ZXJfZnJlcSk7CiAKLQlza2IgPSBwNTRfYWxsb2Nfc2tiKGRldiwgUDU0X0hEUl9GTEFHX0NPTlRST0xfT1BTRVQsIHNpemVvZigqY2hhbikgKwotCQkJICAgIHNpemVvZihzdHJ1Y3QgcDU0X2hkciksIFA1NF9DT05UUk9MX1RZUEVfU0NBTiwKLQkJCSAgICBHRlBfQVRPTUlDKTsKKwlza2IgPSBwNTRfYWxsb2Nfc2tiKGRldiwgUDU0X0hEUl9GTEFHX0NPTlRST0xfT1BTRVQsIHNpemVvZigqaGVhZCkgKworCQkJICAgIDIgKyBzaXplb2YoKmlxX2F1dG9jYWwpICsgc2l6ZW9mKCpib2R5KSArCisJCQkgICAgc2l6ZW9mKCpyYXRlKSArIDIgKiBzaXplb2YoKnJzc2kpLAorCQkJICAgIFA1NF9DT05UUk9MX1RZUEVfU0NBTiwgR0ZQX0FUT01JQyk7CiAJaWYgKCFza2IpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JY2hhbiA9IChzdHJ1Y3QgcDU0X3NjYW4gKikgc2tiX3B1dChza2IsIHNpemVvZigqY2hhbikpOwotCW1lbXNldChjaGFuLT5wYWRkaW5nMSwgMCwgc2l6ZW9mKGNoYW4tPnBhZGRpbmcxKSk7Ci0JY2hhbi0+bW9kZSA9IGNwdV90b19sZTE2KG1vZGUpOwotCWNoYW4tPmR3ZWxsID0gY3B1X3RvX2xlMTYoZHdlbGwpOworCWhlYWQgPSAoc3RydWN0IHA1NF9zY2FuX2hlYWQgKikgc2tiX3B1dChza2IsIHNpemVvZigqaGVhZCkpOworCW1lbXNldChoZWFkLT5zY2FuX3BhcmFtcywgMCwgc2l6ZW9mKGhlYWQtPnNjYW5fcGFyYW1zKSk7CisJaGVhZC0+bW9kZSA9IGNwdV90b19sZTE2KG1vZGUpOworCWhlYWQtPmR3ZWxsID0gY3B1X3RvX2xlMTYoZHdlbGwpOworCWhlYWQtPmZyZXEgPSBmcmVxOwogCisJaWYgKHByaXYtPnJ4aHcgPT0gUERSX1NZTlRIX0ZST05URU5EX0xPTkdCT1cpIHsKKwkJX19sZTE2ICpwYV9wb3dlcl9wb2ludHMgPSAoX19sZTE2ICopIHNrYl9wdXQoc2tiLCAyKTsKKwkJKnBhX3Bvd2VyX3BvaW50cyA9IGNwdV90b19sZTE2KDB4MGMpOworCX0KKworCWlxX2F1dG9jYWwgPSAodm9pZCAqKSBza2JfcHV0KHNrYiwgc2l6ZW9mKCppcV9hdXRvY2FsKSk7CiAJZm9yIChpID0gMDsgaSA8IHByaXYtPmlxX2F1dG9jYWxfbGVuOyBpKyspIHsKIAkJaWYgKHByaXYtPmlxX2F1dG9jYWxbaV0uZnJlcSAhPSBmcmVxKQogCQkJY29udGludWU7CiAKLQkJbWVtY3B5KCZjaGFuLT5pcV9hdXRvY2FsLCAmcHJpdi0+aXFfYXV0b2NhbFtpXSwKLQkJICAgICAgIHNpemVvZigqcHJpdi0+aXFfYXV0b2NhbCkpOworCQltZW1jcHkoaXFfYXV0b2NhbCwgJnByaXYtPmlxX2F1dG9jYWxbaV0ucGFyYW1zLAorCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBwNTRfaXFfYXV0b2NhbF9lbnRyeSkpOwogCQlicmVhazsKIAl9CiAJaWYgKGkgPT0gcHJpdi0+aXFfYXV0b2NhbF9sZW4pCiAJCWdvdG8gZXJyOwogCi0JZm9yIChpID0gMDsgaSA8IHByaXYtPm91dHB1dF9saW1pdF9sZW47IGkrKykgewotCQlpZiAocHJpdi0+b3V0cHV0X2xpbWl0W2ldLmZyZXEgIT0gZnJlcSkKKwlpZiAocHJpdi0+cnhodyA9PSBQRFJfU1lOVEhfRlJPTlRFTkRfTE9OR0JPVykKKwkJYm9keSA9ICh2b2lkICopIHNrYl9wdXQoc2tiLCBzaXplb2YoYm9keS0+bG9uZ2JvdykpOworCWVsc2UKKwkJYm9keSA9ICh2b2lkICopIHNrYl9wdXQoc2tiLCBzaXplb2YoYm9keS0+bm9ybWFsKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcHJpdi0+b3V0cHV0X2xpbWl0LT5lbnRyaWVzOyBpKyspIHsKKwkJX19sZTE2ICplbnRyeV9mcmVxID0gKHZvaWQgKikgKHByaXYtPm91dHB1dF9saW1pdC0+ZGF0YSArCisJCQkJICAgICBwcml2LT5vdXRwdXRfbGltaXQtPmVudHJ5X3NpemUgKiBpKTsKKworCQlpZiAoKmVudHJ5X2ZyZXEgIT0gZnJlcSkKIAkJCWNvbnRpbnVlOwogCi0JCWNoYW4tPnZhbF9iYXJrZXIgPSAweDM4OwotCQljaGFuLT52YWxfYnBzayA9IGNoYW4tPmR1cF9icHNrID0KLQkJCXByaXYtPm91dHB1dF9saW1pdFtpXS52YWxfYnBzazsKLQkJY2hhbi0+dmFsX3Fwc2sgPSBjaGFuLT5kdXBfcXBzayA9Ci0JCQlwcml2LT5vdXRwdXRfbGltaXRbaV0udmFsX3Fwc2s7Ci0JCWNoYW4tPnZhbF8xNnFhbSA9IGNoYW4tPmR1cF8xNnFhbSA9Ci0JCQlwcml2LT5vdXRwdXRfbGltaXRbaV0udmFsXzE2cWFtOwotCQljaGFuLT52YWxfNjRxYW0gPSBjaGFuLT5kdXBfNjRxYW0gPQotCQkJcHJpdi0+b3V0cHV0X2xpbWl0W2ldLnZhbF82NHFhbTsKKwkJaWYgKHByaXYtPnJ4aHcgPT0gUERSX1NZTlRIX0ZST05URU5EX0xPTkdCT1cpIHsKKwkJCW1lbWNweSgmYm9keS0+bG9uZ2Jvdy5wb3dlcl9saW1pdHMsCisJCQkgICAgICAgKHZvaWQgKikgZW50cnlfZnJlcSArIHNpemVvZihfX2xlMTYpLAorCQkJICAgICAgIHByaXYtPm91dHB1dF9saW1pdC0+ZW50cnlfc2l6ZSk7CisJCX0gZWxzZSB7CisJCQlzdHJ1Y3QgcGRhX2NoYW5uZWxfb3V0cHV0X2xpbWl0ICpsaW1pdHMgPQorCQkJICAgICAgICh2b2lkICopIGVudHJ5X2ZyZXE7CisKKwkJCWJvZHktPm5vcm1hbC52YWxfYmFya2VyID0gMHgzODsKKwkJCWJvZHktPm5vcm1hbC52YWxfYnBzayA9IGJvZHktPm5vcm1hbC5kdXBfYnBzayA9CisJCQkJbGltaXRzLT52YWxfYnBzazsKKwkJCWJvZHktPm5vcm1hbC52YWxfcXBzayA9IGJvZHktPm5vcm1hbC5kdXBfcXBzayA9CisJCQkJbGltaXRzLT52YWxfcXBzazsKKwkJCWJvZHktPm5vcm1hbC52YWxfMTZxYW0gPSBib2R5LT5ub3JtYWwuZHVwXzE2cWFtID0KKwkJCQlsaW1pdHMtPnZhbF8xNnFhbTsKKwkJCWJvZHktPm5vcm1hbC52YWxfNjRxYW0gPSBib2R5LT5ub3JtYWwuZHVwXzY0cWFtID0KKwkJCQlsaW1pdHMtPnZhbF82NHFhbTsKKwkJfQogCQlicmVhazsKIAl9Ci0JaWYgKGkgPT0gcHJpdi0+b3V0cHV0X2xpbWl0X2xlbikKKwlpZiAoaSA9PSBwcml2LT5vdXRwdXRfbGltaXQtPmVudHJpZXMpCiAJCWdvdG8gZXJyOwogCi0JZW50cnkgPSBwcml2LT5jdXJ2ZV9kYXRhLT5kYXRhOwotCWZvciAoaSA9IDA7IGkgPCBwcml2LT5jdXJ2ZV9kYXRhLT5jaGFubmVsczsgaSsrKSB7CisJZW50cnkgPSAodm9pZCAqKShwcml2LT5jdXJ2ZV9kYXRhLT5kYXRhICsgcHJpdi0+Y3VydmVfZGF0YS0+b2Zmc2V0KTsKKwlmb3IgKGkgPSAwOyBpIDwgcHJpdi0+Y3VydmVfZGF0YS0+ZW50cmllczsgaSsrKSB7CiAJCWlmICgqKChfX2xlMTYgKillbnRyeSkgIT0gZnJlcSkgewotCQkJZW50cnkgKz0gc2l6ZW9mKF9fbGUxNik7Ci0JCQllbnRyeSArPSBzaXplb2Yoc3RydWN0IHA1NF9wYV9jdXJ2ZV9kYXRhX3NhbXBsZSkgKgotCQkJCSBwcml2LT5jdXJ2ZV9kYXRhLT5wb2ludHNfcGVyX2NoYW5uZWw7CisJCQllbnRyeSArPSBwcml2LT5jdXJ2ZV9kYXRhLT5lbnRyeV9zaXplOwogCQkJY29udGludWU7CiAJCX0KIAotCQllbnRyeSArPSBzaXplb2YoX19sZTE2KTsKLQkJY2hhbi0+cGFfcG9pbnRzX3Blcl9jdXJ2ZSA9IDg7Ci0JCW1lbXNldChjaGFuLT5jdXJ2ZV9kYXRhLCAwLCBzaXplb2YoKmNoYW4tPmN1cnZlX2RhdGEpKTsKLQkJbWVtY3B5KGNoYW4tPmN1cnZlX2RhdGEsIGVudHJ5LAotCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBwNTRfcGFfY3VydmVfZGF0YV9zYW1wbGUpICoKLQkJICAgICAgIG1pbigodTgpOCwgcHJpdi0+Y3VydmVfZGF0YS0+cG9pbnRzX3Blcl9jaGFubmVsKSk7CisJCWlmIChwcml2LT5yeGh3ID09IFBEUl9TWU5USF9GUk9OVEVORF9MT05HQk9XKSB7CisJCQltZW1jcHkoJmJvZHktPmxvbmdib3cuY3VydmVfZGF0YSwKKwkJCQkodm9pZCAqKSBlbnRyeSArIHNpemVvZihfX2xlMTYpLAorCQkJCXByaXYtPmN1cnZlX2RhdGEtPmVudHJ5X3NpemUpOworCQl9IGVsc2UgeworCQkJc3RydWN0IHA1NF9zY2FuX2JvZHkgKmNoYW4gPSAmYm9keS0+bm9ybWFsOworCQkJc3RydWN0IHBkYV9wYV9jdXJ2ZV9kYXRhICpjdXJ2ZV9kYXRhID0KKwkJCQkodm9pZCAqKSBwcml2LT5jdXJ2ZV9kYXRhLT5kYXRhOworCisJCQllbnRyeSArPSBzaXplb2YoX19sZTE2KTsKKwkJCWNoYW4tPnBhX3BvaW50c19wZXJfY3VydmUgPSA4OworCQkJbWVtc2V0KGNoYW4tPmN1cnZlX2RhdGEsIDAsIHNpemVvZigqY2hhbi0+Y3VydmVfZGF0YSkpOworCQkJbWVtY3B5KGNoYW4tPmN1cnZlX2RhdGEsIGVudHJ5LAorCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgcDU0X3BhX2N1cnZlX2RhdGFfc2FtcGxlKSAqCisJCQkgICAgICAgbWluKCh1OCk4LCBjdXJ2ZV9kYXRhLT5wb2ludHNfcGVyX2NoYW5uZWwpKTsKKwkJfQogCQlicmVhazsKIAl9CisJaWYgKGkgPT0gcHJpdi0+Y3VydmVfZGF0YS0+ZW50cmllcykKKwkJZ290byBlcnI7CiAKLQlpZiAocHJpdi0+ZndfdmFyIDwgMHg1MDApIHsKLQkJY2hhbi0+djFfcnNzaS5tdWwgPSBjcHVfdG9fbGUxNihwcml2LT5yc3NpY2FsX2RiW2JhbmRdLm11bCk7Ci0JCWNoYW4tPnYxX3Jzc2kuYWRkID0gY3B1X3RvX2xlMTYocHJpdi0+cnNzaWNhbF9kYltiYW5kXS5hZGQpOwotCX0gZWxzZSB7Ci0JCWNoYW4tPnYyLnJzc2kubXVsID0gY3B1X3RvX2xlMTYocHJpdi0+cnNzaWNhbF9kYltiYW5kXS5tdWwpOwotCQljaGFuLT52Mi5yc3NpLmFkZCA9IGNwdV90b19sZTE2KHByaXYtPnJzc2ljYWxfZGJbYmFuZF0uYWRkKTsKLQkJY2hhbi0+djIuYmFzaWNfcmF0ZV9tYXNrID0gY3B1X3RvX2xlMzIocHJpdi0+YmFzaWNfcmF0ZV9tYXNrKTsKLQkJbWVtc2V0KGNoYW4tPnYyLnJ0c19yYXRlcywgMCwgOCk7CisJaWYgKChwcml2LT5md192YXIgPj0gMHg1MDApICYmIChwcml2LT5md192YXIgPCAweDUwOSkpIHsKKwkJcmF0ZSA9ICh2b2lkICopIHNrYl9wdXQoc2tiLCBzaXplb2YoKnJhdGUpKTsKKwkJcmF0ZS0+YmFzaWNfcmF0ZV9tYXNrID0gY3B1X3RvX2xlMzIocHJpdi0+YmFzaWNfcmF0ZV9tYXNrKTsKKwkJZm9yIChpID0gMDsgaSA8IHNpemVvZihyYXRlLT5ydHNfcmF0ZXMpOyBpKyspCisJCQlyYXRlLT5ydHNfcmF0ZXNbaV0gPSBpOwogCX0KKworCXJzc2kgPSAoc3RydWN0IHBkYV9yc3NpX2NhbF9lbnRyeSAqKSBza2JfcHV0KHNrYiwgc2l6ZW9mKCpyc3NpKSk7CisJcnNzaS0+bXVsID0gY3B1X3RvX2xlMTYocHJpdi0+cnNzaWNhbF9kYltiYW5kXS5tdWwpOworCXJzc2ktPmFkZCA9IGNwdV90b19sZTE2KHByaXYtPnJzc2ljYWxfZGJbYmFuZF0uYWRkKTsKKwlpZiAocHJpdi0+cnhodyA9PSBQRFJfU1lOVEhfRlJPTlRFTkRfTE9OR0JPVykgeworCQkvKiBMb25nYm93IGZyb250ZW5kIG5lZWRzIGV2ZXIgbW9yZSAqLworCQlyc3NpID0gKHZvaWQgKikgc2tiX3B1dChza2IsIHNpemVvZigqcnNzaSkpOworCQlyc3NpLT5tdWwgPSBjcHVfdG9fbGUxNihwcml2LT5yc3NpY2FsX2RiW2JhbmRdLmxvbmdib3dfdW5rbik7CisJCXJzc2ktPmFkZCA9IGNwdV90b19sZTE2KHByaXYtPnJzc2ljYWxfZGJbYmFuZF0ubG9uZ2Jvd191bmsyKTsKKwl9CisKKwlpZiAocHJpdi0+ZndfdmFyID49IDB4NTA5KSB7CisJCXJhdGUgPSAodm9pZCAqKSBza2JfcHV0KHNrYiwgc2l6ZW9mKCpyYXRlKSk7CisJCXJhdGUtPmJhc2ljX3JhdGVfbWFzayA9IGNwdV90b19sZTMyKHByaXYtPmJhc2ljX3JhdGVfbWFzayk7CisJCWZvciAoaSA9IDA7IGkgPCBzaXplb2YocmF0ZS0+cnRzX3JhdGVzKTsgaSsrKQorCQkJcmF0ZS0+cnRzX3JhdGVzW2ldID0gaTsKKwl9CisKKwloZHIgPSAoc3RydWN0IHA1NF9oZHIgKikgc2tiLT5kYXRhOworCWhkci0+bGVuID0gY3B1X3RvX2xlMTYoc2tiLT5sZW4gLSBzaXplb2YoKmhkcikpOworCiAJcHJpdi0+dHgoZGV2LCBza2IpOwogCXJldHVybiAwOwogCkBAIC0xNjMxLDIzICsxODcxLDIyIEBACiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLXN0YXRpYyBpbnQgcDU0X3NldF9sZWRzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgaW50IG1vZGUsIGludCBsaW5rLCBpbnQgYWN0KQorc3RhdGljIGludCBwNTRfc2V0X2xlZHMoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQogewogCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OwogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IHA1NF9sZWQgKmxlZDsKIAotCXNrYiA9IHA1NF9hbGxvY19za2IoZGV2LCBQNTRfSERSX0ZMQUdfQ09OVFJPTF9PUFNFVCwgc2l6ZW9mKCpsZWQpICsKLQkJCXNpemVvZihzdHJ1Y3QgcDU0X2hkciksCVA1NF9DT05UUk9MX1RZUEVfTEVELAotCQkJR0ZQX0FUT01JQyk7CisJc2tiID0gcDU0X2FsbG9jX3NrYihkZXYsIFA1NF9IRFJfRkxBR19DT05UUk9MX09QU0VULCBzaXplb2YoKmxlZCksCisJCQkgICAgUDU0X0NPTlRST0xfVFlQRV9MRUQsIEdGUF9BVE9NSUMpOwogCWlmICghc2tiKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWxlZCA9IChzdHJ1Y3QgcDU0X2xlZCAqKXNrYl9wdXQoc2tiLCBzaXplb2YoKmxlZCkpOwotCWxlZC0+bW9kZSA9IGNwdV90b19sZTE2KG1vZGUpOwotCWxlZC0+bGVkX3Blcm1hbmVudCA9IGNwdV90b19sZTE2KGxpbmspOwotCWxlZC0+bGVkX3RlbXBvcmFyeSA9IGNwdV90b19sZTE2KGFjdCk7Ci0JbGVkLT5kdXJhdGlvbiA9IGNwdV90b19sZTE2KDEwMDApOworCWxlZCA9IChzdHJ1Y3QgcDU0X2xlZCAqKSBza2JfcHV0KHNrYiwgc2l6ZW9mKCpsZWQpKTsKKwlsZWQtPmZsYWdzID0gY3B1X3RvX2xlMTYoMHgwMDAzKTsKKwlsZWQtPm1hc2tbMF0gPSBsZWQtPm1hc2tbMV0gPSBjcHVfdG9fbGUxNihwcml2LT5zb2Z0bGVkX3N0YXRlKTsKKwlsZWQtPmRlbGF5WzBdID0gY3B1X3RvX2xlMTYoMSk7CisJbGVkLT5kZWxheVsxXSA9IGNwdV90b19sZTE2KDApOwogCXByaXYtPnR4KGRldiwgc2tiKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTE2NjYsOSArMTkwNSw4IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgcDU0X2VkY2YgKmVkY2Y7CiAKLQlza2IgPSBwNTRfYWxsb2Nfc2tiKGRldiwgUDU0X0hEUl9GTEFHX0NPTlRST0xfT1BTRVQsIHNpemVvZigqZWRjZikgKwotCQkJc2l6ZW9mKHN0cnVjdCBwNTRfaGRyKSwgUDU0X0NPTlRST0xfVFlQRV9EQ0ZJTklULAotCQkJR0ZQX0FUT01JQyk7CisJc2tiID0gcDU0X2FsbG9jX3NrYihkZXYsIFA1NF9IRFJfRkxBR19DT05UUk9MX09QU0VULCBzaXplb2YoKmVkY2YpLAorCQkJICAgIFA1NF9DT05UUk9MX1RZUEVfRENGSU5JVCwgR0ZQX0FUT01JQyk7CiAJaWYgKCFza2IpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC0xNjkyLDYgKzE5MzAsNDIgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBwNTRfc2V0X3BzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKK3sKKwlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBwNTRfcHNtICpwc207CisJdTE2IG1vZGU7CisJaW50IGk7CisKKwlpZiAoZGV2LT5jb25mLmZsYWdzICYgSUVFRTgwMjExX0NPTkZfUFMpCisJCW1vZGUgPSBQNTRfUFNNIHwgUDU0X1BTTV9EVElNIHwgUDU0X1BTTV9NQ0JDOworCWVsc2UKKwkJbW9kZSA9IFA1NF9QU01fQ0FNOworCisJc2tiID0gcDU0X2FsbG9jX3NrYihkZXYsIFA1NF9IRFJfRkxBR19DT05UUk9MX09QU0VULCBzaXplb2YoKnBzbSksCisJCQkgICAgUDU0X0NPTlRST0xfVFlQRV9QU00sIEdGUF9BVE9NSUMpOworCWlmICghc2tiKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXBzbSA9IChzdHJ1Y3QgcDU0X3BzbSAqKXNrYl9wdXQoc2tiLCBzaXplb2YoKnBzbSkpOworCXBzbS0+bW9kZSA9IGNwdV90b19sZTE2KG1vZGUpOworCXBzbS0+YWlkID0gY3B1X3RvX2xlMTYocHJpdi0+YWlkKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwc20tPmludGVydmFscyk7IGkrKykgeworCQlwc20tPmludGVydmFsc1tpXS5pbnRlcnZhbCA9CisJCQljcHVfdG9fbGUxNihkZXYtPmNvbmYubGlzdGVuX2ludGVydmFsKTsKKwkJcHNtLT5pbnRlcnZhbHNbaV0ucGVyaW9kcyA9IGNwdV90b19sZTE2KDEpOworCX0KKworCXBzbS0+YmVhY29uX3Jzc2lfc2tpcF9tYXggPSA2MDsKKwlwc20tPnJzc2lfZGVsdGFfdGhyZXNob2xkID0gMDsKKwlwc20tPm5yID0gMDsKKworCXByaXYtPnR4KGRldiwgc2tiKTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHA1NF9iZWFjb25fdGltKHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJLyoKQEAgLTE3OTYsNiArMjA3MCw5IEBACiAKIAlxdWV1ZV9kZWxheWVkX3dvcmsoZGV2LT53b3JrcXVldWUsICZwcml2LT53b3JrLCAwKTsKIAorCXByaXYtPnNvZnRsZWRfc3RhdGUgPSAwOworCWVyciA9IHA1NF9zZXRfbGVkcyhkZXYpOworCiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5jb25mX211dGV4KTsKIAlyZXR1cm4gZXJyOwpAQCAtMTgwOCw2ICsyMDg1LDkgQEAKIAogCW11dGV4X2xvY2soJnByaXYtPmNvbmZfbXV0ZXgpOwogCXByaXYtPm1vZGUgPSBOTDgwMjExX0lGVFlQRV9VTlNQRUNJRklFRDsKKwlwcml2LT5zb2Z0bGVkX3N0YXRlID0gMDsKKwlwNTRfc2V0X2xlZHMoZGV2KTsKKwogCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcHJpdi0+d29yayk7CiAJaWYgKHByaXYtPmNhY2hlZF9iZWFjb24pCiAJCXA1NF90eF9jYW5jZWwoZGV2LCBwcml2LT5jYWNoZWRfYmVhY29uKTsKQEAgLTE4NDUsNyArMjEyNSw2IEBACiAKIAltZW1jcHkocHJpdi0+bWFjX2FkZHIsIGNvbmYtPm1hY19hZGRyLCBFVEhfQUxFTik7CiAJcDU0X3NldHVwX21hYyhkZXYpOwotCXA1NF9zZXRfbGVkcyhkZXYsIDEsIDAsIDApOwogCW11dGV4X3VubG9jaygmcHJpdi0+Y29uZl9tdXRleCk7CiAJcmV0dXJuIDA7CiB9CkBAIC0xODg0LDYgKzIxNjMsMTEgQEAKIAkJaWYgKHJldCkKIAkJCWdvdG8gb3V0OwogCX0KKwlpZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9QUykgeworCQlyZXQgPSBwNTRfc2V0X3BzKGRldik7CisJCWlmIChyZXQpCisJCQlnb3RvIG91dDsKKwl9CiAKIG91dDoKIAltdXRleF91bmxvY2soJnByaXYtPmNvbmZfbXV0ZXgpOwpAQCAtMTkyMCw4ICsyMjA0LDYgQEAKIAkJCWdvdG8gb3V0OwogCX0KIAotCXJldCA9IHA1NF9zZXRfbGVkcyhkZXYsIDEsICFpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihwcml2LT5ic3NpZCksIDApOwotCiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5jb25mX211dGV4KTsKIAlyZXR1cm4gcmV0OwpAQCAtMTkzNSwxMiArMjIxNywxMSBAQAogCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OwogCiAJKnRvdGFsX2ZsYWdzICY9IEZJRl9QUk9NSVNDX0lOX0JTUyB8Ci0JCQkoKnRvdGFsX2ZsYWdzICYgRklGX1BST01JU0NfSU5fQlNTKSA/Ci0JCQkJRklGX0ZDU0ZBSUwgOiAwOworCQkJRklGX09USEVSX0JTUzsKIAogCXByaXYtPmZpbHRlcl9mbGFncyA9ICp0b3RhbF9mbGFnczsKIAotCWlmIChjaGFuZ2VkX2ZsYWdzICYgRklGX1BST01JU0NfSU5fQlNTKQorCWlmIChjaGFuZ2VkX2ZsYWdzICYgKEZJRl9QUk9NSVNDX0lOX0JTUyB8IEZJRl9PVEhFUl9CU1MpKQogCQlwNTRfc2V0dXBfbWFjKGRldik7CiB9CiAKQEAgLTE5NjcsMTAgKzIyNDgsOCBAQAogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IHA1NF94Ym93X3N5bnRoICp4Ym93OwogCi0Jc2tiID0gcDU0X2FsbG9jX3NrYihkZXYsIFA1NF9IRFJfRkxBR19DT05UUk9MX09QU0VULCBzaXplb2YoKnhib3cpICsKLQkJCSAgICBzaXplb2Yoc3RydWN0IHA1NF9oZHIpLAotCQkJICAgIFA1NF9DT05UUk9MX1RZUEVfWEJPV19TWU5USF9DRkcsCi0JCQkgICAgR0ZQX0tFUk5FTCk7CisJc2tiID0gcDU0X2FsbG9jX3NrYihkZXYsIFA1NF9IRFJfRkxBR19DT05UUk9MX09QU0VULCBzaXplb2YoKnhib3cpLAorCQkJICAgIFA1NF9DT05UUk9MX1RZUEVfWEJPV19TWU5USF9DRkcsIEdGUF9LRVJORUwpOwogCWlmICghc2tiKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMTk5OSw3ICsyMjc4LDcgQEAKIAkgKiAgICAgIDIuIGNhbmNlbCBzdHVjayBmcmFtZXMgLyByZXNldCB0aGUgZGV2aWNlIGlmIG5lY2Vzc2FyeS4KIAkgKi8KIAotCXNrYiA9IHA1NF9hbGxvY19za2IoZGV2LCBQNTRfSERSX0ZMQUdfQ09OVFJPTCwgc2l6ZW9mKHN0cnVjdCBwNTRfaGRyKSArCisJc2tiID0gcDU0X2FsbG9jX3NrYihkZXYsIFA1NF9IRFJfRkxBR19DT05UUk9MLAogCQkJICAgIHNpemVvZihzdHJ1Y3QgcDU0X3N0YXRpc3RpY3MpLAogCQkJICAgIFA1NF9DT05UUk9MX1RZUEVfU1RBVF9SRUFEQkFDSywgR0ZQX0tFUk5FTCk7CiAJaWYgKCFza2IpCkBAIC0yMDIyLDggKzIzMDEsOCBAQAogewogCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OwogCi0JbWVtY3B5KHN0YXRzLCAmcHJpdi0+dHhfc3RhdHNbNF0sIHNpemVvZihzdGF0c1swXSkgKiBkZXYtPnF1ZXVlcyk7Ci0KKwltZW1jcHkoc3RhdHMsICZwcml2LT50eF9zdGF0c1tQNTRfUVVFVUVfREFUQV0sCisJICAgICAgIHNpemVvZihzdGF0c1swXSkgKiBkZXYtPnF1ZXVlcyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIwNTksNyArMjMzOCw3IEBACiB9CiAKIHN0YXRpYyBpbnQgcDU0X3NldF9rZXkoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBlbnVtIHNldF9rZXlfY21kIGNtZCwKLQkJICAgICAgIGNvbnN0IHU4ICpsb2NhbF9hZGRyZXNzLCBjb25zdCB1OCAqYWRkcmVzcywKKwkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCiAJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXkpCiB7CiAJc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7CkBAIC0yMTEwLDkgKzIzODksOCBAQAogCX0KIAogCW11dGV4X2xvY2soJnByaXYtPmNvbmZfbXV0ZXgpOwotCXNrYiA9IHA1NF9hbGxvY19za2IoZGV2LCBQNTRfSERSX0ZMQUdfQ09OVFJPTF9PUFNFVCwgc2l6ZW9mKCpyeGtleSkgKwotCQkJc2l6ZW9mKHN0cnVjdCBwNTRfaGRyKSwJUDU0X0NPTlRST0xfVFlQRV9SWF9LRVlDQUNIRSwKLQkJCUdGUF9BVE9NSUMpOworCXNrYiA9IHA1NF9hbGxvY19za2IoZGV2LCBQNTRfSERSX0ZMQUdfQ09OVFJPTF9PUFNFVCwgc2l6ZW9mKCpyeGtleSksCisJCQkgICAgUDU0X0NPTlRST0xfVFlQRV9SWF9LRVlDQUNIRSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFza2IpIHsKIAkJbXV0ZXhfdW5sb2NrKCZwcml2LT5jb25mX211dGV4KTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0yMTIzLDggKzI0MDEsOCBAQAogCXJ4a2V5LT5lbnRyeSA9IGtleS0+a2V5aWR4OwogCXJ4a2V5LT5rZXlfaWQgPSBrZXktPmtleWlkeDsKIAlyeGtleS0+a2V5X3R5cGUgPSBhbGdvOwotCWlmIChhZGRyZXNzKQotCQltZW1jcHkocnhrZXktPm1hYywgYWRkcmVzcywgRVRIX0FMRU4pOworCWlmIChzdGEpCisJCW1lbWNweShyeGtleS0+bWFjLCBzdGEtPmFkZHIsIEVUSF9BTEVOKTsKIAllbHNlCiAJCW1lbXNldChyeGtleS0+bWFjLCB+MCwgRVRIX0FMRU4pOwogCWlmIChrZXktPmFsZyAhPSBBTEdfVEtJUCkgewpAQCAtMjE0Miw2ICsyNDIwLDk2IEBACiAJcmV0dXJuIDA7CiB9CiAKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfTEVEUworc3RhdGljIHZvaWQgcDU0X2xlZF9icmlnaHRuZXNzX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfZGV2LAorCQkJCSAgIGVudW0gbGVkX2JyaWdodG5lc3MgYnJpZ2h0bmVzcykKK3sKKwlzdHJ1Y3QgcDU0X2xlZF9kZXYgKmxlZCA9IGNvbnRhaW5lcl9vZihsZWRfZGV2LCBzdHJ1Y3QgcDU0X2xlZF9kZXYsCisJCQkJCSAgICAgICBsZWRfZGV2KTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYgPSBsZWQtPmh3X2RldjsKKwlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKKwlpbnQgZXJyOworCisJLyogRG9uJ3QgdG9nZ2xlIHRoZSBMRUQsIHdoZW4gdGhlIGRldmljZSBpcyBkb3duLiAqLworCWlmIChwcml2LT5tb2RlID09IE5MODAyMTFfSUZUWVBFX1VOU1BFQ0lGSUVEKQorCQlyZXR1cm4gOworCisJaWYgKGJyaWdodG5lc3MgIT0gTEVEX09GRikKKwkJcHJpdi0+c29mdGxlZF9zdGF0ZSB8PSBCSVQobGVkLT5pbmRleCk7CisJZWxzZQorCQlwcml2LT5zb2Z0bGVkX3N0YXRlICY9IH5CSVQobGVkLT5pbmRleCk7CisKKwllcnIgPSBwNTRfc2V0X2xlZHMoZGV2KTsKKwlpZiAoZXJyICYmIG5ldF9yYXRlbGltaXQoKSkKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIHVwZGF0ZSAlcyBMRUQuXG4iLAorCQkJd2lwaHlfbmFtZShkZXYtPndpcGh5KSwgbGVkX2Rldi0+bmFtZSk7Cit9CisKK3N0YXRpYyBpbnQgcDU0X3JlZ2lzdGVyX2xlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsCisJCQkgICAgc3RydWN0IHA1NF9sZWRfZGV2ICpsZWQsCisJCQkgICAgdW5zaWduZWQgaW50IGxlZF9pbmRleCwKKwkJCSAgICBjaGFyICpuYW1lLCBjaGFyICp0cmlnZ2VyKQoreworCWludCBlcnI7CisKKwlpZiAobGVkLT5yZWdpc3RlcmVkKQorCQlyZXR1cm4gLUVFWElTVDsKKworCXNucHJpbnRmKGxlZC0+bmFtZSwgc2l6ZW9mKGxlZC0+bmFtZSksICJwNTQtJXM6OiVzIiwKKwkJIHdpcGh5X25hbWUoZGV2LT53aXBoeSksIG5hbWUpOworCWxlZC0+aHdfZGV2ID0gZGV2OworCWxlZC0+aW5kZXggPSBsZWRfaW5kZXg7CisJbGVkLT5sZWRfZGV2Lm5hbWUgPSBsZWQtPm5hbWU7CisJbGVkLT5sZWRfZGV2LmRlZmF1bHRfdHJpZ2dlciA9IHRyaWdnZXI7CisJbGVkLT5sZWRfZGV2LmJyaWdodG5lc3Nfc2V0ID0gcDU0X2xlZF9icmlnaHRuZXNzX3NldDsKKworCWVyciA9IGxlZF9jbGFzc2Rldl9yZWdpc3Rlcih3aXBoeV9kZXYoZGV2LT53aXBoeSksICZsZWQtPmxlZF9kZXYpOworCWlmIChlcnIpCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEZhaWxlZCB0byByZWdpc3RlciAlcyBMRUQuXG4iLAorCQkJd2lwaHlfbmFtZShkZXYtPndpcGh5KSwgbmFtZSk7CisJZWxzZQorCQlsZWQtPnJlZ2lzdGVyZWQgPSAxOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBwNTRfaW5pdF9sZWRzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKK3sKKwlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKKwlpbnQgZXJyOworCisJLyoKKwkgKiBUT0RPOgorCSAqIEZpZ3VyZSBvdXQgaWYgdGhlIEVFUFJPTSBjb250YWlucyBzb21lIGhpbnRzIGFib3V0IHRoZSBudW1iZXIKKwkgKiBvZiBhdmFpbGFibGUvcHJvZ3JhbW1hYmxlIExFRHMgb2YgdGhlIGRldmljZS4KKwkgKiBCdXQgZm9yIG5vdywgd2UgY2FuIGFzc3VtZSB0aGF0IHdlIGhhdmUgdHdvIHByb2dyYW1tYWJsZSBMRURzLgorCSAqLworCisJZXJyID0gcDU0X3JlZ2lzdGVyX2xlZChkZXYsICZwcml2LT5hc3NvY19sZWQsIDAsICJhc3NvYyIsCisJCQkgICAgICAgaWVlZTgwMjExX2dldF9hc3NvY19sZWRfbmFtZShkZXYpKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gcDU0X3JlZ2lzdGVyX2xlZChkZXYsICZwcml2LT50eF9sZWQsIDEsICJ0eCIsCisJCQkgICAgICAgaWVlZTgwMjExX2dldF90eF9sZWRfbmFtZShkZXYpKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gcDU0X3NldF9sZWRzKGRldik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgcDU0X3VucmVnaXN0ZXJfbGVkcyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCit7CisJc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7CisKKwlpZiAocHJpdi0+dHhfbGVkLnJlZ2lzdGVyZWQpCisJCWxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKCZwcml2LT50eF9sZWQubGVkX2Rldik7CisJaWYgKHByaXYtPmFzc29jX2xlZC5yZWdpc3RlcmVkKQorCQlsZWRfY2xhc3NkZXZfdW5yZWdpc3RlcigmcHJpdi0+YXNzb2NfbGVkLmxlZF9kZXYpOworfQorI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9MRURTICovCisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX29wcyBwNTRfb3BzID0gewogCS50eAkJCT0gcDU0X3R4LAogCS5zdGFydAkJCT0gcDU0X3N0YXJ0LApAQCAtMjE3NSw2ICsyNTQzLDggQEAKIAlwcml2LT5iYXNpY19yYXRlX21hc2sgPSAweDE1ZjsKIAlza2JfcXVldWVfaGVhZF9pbml0KCZwcml2LT50eF9xdWV1ZSk7CiAJZGV2LT5mbGFncyA9IElFRUU4MDIxMV9IV19SWF9JTkNMVURFU19GQ1MgfAorCQkgICAgIElFRUU4MDIxMV9IV19TVVBQT1JUU19QUyB8CisJCSAgICAgSUVFRTgwMjExX0hXX1BTX05VTExGVU5DX1NUQUNLIHwKIAkJICAgICBJRUVFODAyMTFfSFdfU0lHTkFMX0RCTSB8CiAJCSAgICAgSUVFRTgwMjExX0hXX05PSVNFX0RCTTsKIApAQCAtMjE4NCwxMSArMjU1NCwxMSBAQAogCQkJCSAgICAgIEJJVChOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKTsKIAogCWRldi0+Y2hhbm5lbF9jaGFuZ2VfdGltZSA9IDEwMDA7CS8qIFRPRE86IGZpbmQgYWN0dWFsIHZhbHVlICovCi0JcHJpdi0+dHhfc3RhdHNbMF0ubGltaXQgPSAxOwkJLyogQmVhY29uIHF1ZXVlICovCi0JcHJpdi0+dHhfc3RhdHNbMV0ubGltaXQgPSAxOwkJLyogUHJvYmUgcXVldWUgZm9yIEhXIHNjYW4gKi8KLQlwcml2LT50eF9zdGF0c1syXS5saW1pdCA9IDM7CQkvKiBxdWV1ZSBmb3IgTUxNRXMgKi8KLQlwcml2LT50eF9zdGF0c1szXS5saW1pdCA9IDM7CQkvKiBCcm9hZGNhc3QgLyBNQyBxdWV1ZSAqLwotCXByaXYtPnR4X3N0YXRzWzRdLmxpbWl0ID0gNTsJCS8qIERhdGEgKi8KKwlwcml2LT50eF9zdGF0c1tQNTRfUVVFVUVfQkVBQ09OXS5saW1pdCA9IDE7CisJcHJpdi0+dHhfc3RhdHNbUDU0X1FVRVVFX0ZXU0NBTl0ubGltaXQgPSAxOworCXByaXYtPnR4X3N0YXRzW1A1NF9RVUVVRV9NR01UXS5saW1pdCA9IDM7CisJcHJpdi0+dHhfc3RhdHNbUDU0X1FVRVVFX0NBQl0ubGltaXQgPSAzOworCXByaXYtPnR4X3N0YXRzW1A1NF9RVUVVRV9EQVRBXS5saW1pdCA9IDU7CiAJZGV2LT5xdWV1ZXMgPSAxOwogCXByaXYtPm5vaXNlID0gLTk0OwogCS8qCkBAIC0yMjEyLDEyICsyNTgyLDM3IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChwNTRfaW5pdF9jb21tb24pOwogCitpbnQgcDU0X3JlZ2lzdGVyX2NvbW1vbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHN0cnVjdCBkZXZpY2UgKnBkZXYpCit7CisJaW50IGVycjsKKworCWVyciA9IGllZWU4MDIxMV9yZWdpc3Rlcl9odyhkZXYpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycihwZGV2LCAiQ2Fubm90IHJlZ2lzdGVyIGRldmljZSAoJWQpLlxuIiwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwkjaWZkZWYgQ09ORklHX01BQzgwMjExX0xFRFMKKwllcnIgPSBwNTRfaW5pdF9sZWRzKGRldik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwkjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0xFRFMgKi8KKworCWRldl9pbmZvKHBkZXYsICJpcyByZWdpc3RlcmVkIGFzICclcydcbiIsIHdpcGh5X25hbWUoZGV2LT53aXBoeSkpOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwocDU0X3JlZ2lzdGVyX2NvbW1vbik7CisKIHZvaWQgcDU0X2ZyZWVfY29tbW9uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKIHsKIAlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKIAlrZnJlZShwcml2LT5pcV9hdXRvY2FsKTsKIAlrZnJlZShwcml2LT5vdXRwdXRfbGltaXQpOwogCWtmcmVlKHByaXYtPmN1cnZlX2RhdGEpOworCisJI2lmZGVmIENPTkZJR19NQUM4MDIxMV9MRURTCisJcDU0X3VucmVnaXN0ZXJfbGVkcyhkZXYpOworCSNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfTEVEUyAqLwogfQogRVhQT1JUX1NZTUJPTF9HUEwocDU0X2ZyZWVfY29tbW9uKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NGNvbW1vbi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NGNvbW1vbi5oCmluZGV4IGY1NzI5ZGUuLjc1ZWFkN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRjb21tb24uaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0Y29tbW9uLmgKQEAgLTI2LDEyICsyNiwxNyBAQAogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogI2RlZmluZSBQRFJfU1lOVEhfRlJPTlRFTkRfTUFTSwkJMHgwMDA3CisjZGVmaW5lIFBEUl9TWU5USF9GUk9OVEVORF9EVUVUVEUzCTB4MDAwMQorI2RlZmluZSBQRFJfU1lOVEhfRlJPTlRFTkRfRFVFVFRFMgkweDAwMDIKKyNkZWZpbmUgUERSX1NZTlRIX0ZST05URU5EX0ZSSVNCRUUJMHgwMDAzCisjZGVmaW5lIFBEUl9TWU5USF9GUk9OVEVORF9YQk9XCQkweDAwMDQKKyNkZWZpbmUgUERSX1NZTlRIX0ZST05URU5EX0xPTkdCT1cJMHgwMDA1CiAjZGVmaW5lIFBEUl9TWU5USF9JUV9DQUxfTUFTSwkJMHgwMDE4CiAjZGVmaW5lIFBEUl9TWU5USF9JUV9DQUxfUEFfREVURUNUT1IJMHgwMDAwCiAjZGVmaW5lIFBEUl9TWU5USF9JUV9DQUxfRElTQUJMRUQJMHgwMDA4CiAjZGVmaW5lIFBEUl9TWU5USF9JUV9DQUxfWklGCQkweDAwMTAKICNkZWZpbmUgUERSX1NZTlRIX0ZBQV9TV0lUQ0hfTUFTSwkweDAwMjAKLSNkZWZpbmUgUERSX1NZTlRIX0ZBQV9TV0lUQ0hfRU5BQkxFRAkweDAwMDEKKyNkZWZpbmUgUERSX1NZTlRIX0ZBQV9TV0lUQ0hfRU5BQkxFRAkweDAwMjAKICNkZWZpbmUgUERSX1NZTlRIXzI0X0dIWl9NQVNLCQkweDAwNDAKICNkZWZpbmUgUERSX1NZTlRIXzI0X0dIWl9ESVNBQkxFRAkweDAwNDAKICNkZWZpbmUgUERSX1NZTlRIXzVfR0haX01BU0sJCTB4MDA4MApAQCAtMTI1LDkgKzEzMCwxMyBAQAogCXU4IGRhdGFbMF07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAorc3RydWN0IHA1NF9pcV9hdXRvY2FsX2VudHJ5IHsKKwlfX2xlMTYgaXFfcGFyYW1bNF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwogc3RydWN0IHBkYV9pcV9hdXRvY2FsX2VudHJ5IHsKICAgICAgICAgX19sZTE2IGZyZXE7Ci0gICAgICAgIF9fbGUxNiBpcV9wYXJhbVs0XTsKKwlzdHJ1Y3QgcDU0X2lxX2F1dG9jYWxfZW50cnkgcGFyYW1zOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIHN0cnVjdCBwZGFfY2hhbm5lbF9vdXRwdXRfbGltaXQgewpAQCAtMTgwLDYgKzE4OSwzNSBAQAogCV9fbGUxNiBhZGQ7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAorc3RydWN0IHBkYV9jb3VudHJ5IHsKKwl1OCByZWdkb21haW47CisJdTggYWxwaGEyWzJdOworCXU4IGZsYWdzOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qCisgKiBXYXJuaW5nOiBMb25nYm93J3Mgc3RydWN0dXJlcyBhcmUgYm9ndXMuCisgKi8KK3N0cnVjdCBwNTRfY2hhbm5lbF9vdXRwdXRfbGltaXRfbG9uZ2JvdyB7CisJX19sZTE2IHJmX3Bvd2VyX3BvaW50c1sxMl07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IHA1NF9wYV9jdXJ2ZV9kYXRhX3NhbXBsZV9sb25nYm93IHsKKwlfX2xlMTYgcmZfcG93ZXI7CisJX19sZTE2IHBhX2RldGVjdG9yOworCXN0cnVjdCB7CisJCV9fbGUxNiBkYXRhWzRdOworCX0gcG9pbnRzWzNdIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgcGRhX2N1c3RvbV93cmFwcGVyIHsKKwlfX2xlMTYgZW50cmllczsKKwlfX2xlMTYgZW50cnlfc2l6ZTsKKwlfX2xlMTYgb2Zmc2V0OworCV9fbGUxNiBsZW47CisJdTggZGF0YVswXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCiAvKgogICogdGhpcyBkZWZpbmVzIHRoZSBQRFIgY29kZXMgdXNlZCB0byBidWlsZCBQREFzIGFzIGRlZmluZWQgaW4gZG9jdW1lbnQKICAqIG51bWJlciA1NTMxNTUuIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIG1pcnJvcnMgdmVyc2lvbiAxLjEgb2YgdGhlCkBAIC0yMjUsOCArMjYzLDEzIEBACiAvKiByZXNlcnZlZCByYW5nZSAoMHgyMDAwIC0gMHg3ZmZmKSAqLwogCiAvKiBjdXN0b21lciByYW5nZSAoMHg4MDAwIC0gMHhmZmZmKSAqLwotI2RlZmluZSBQRFJfQkFTRUJBTkRfUkVHSVNURVJTCQkJMHg4MDAwCi0jZGVmaW5lIFBEUl9QRVJfQ0hBTk5FTF9CQVNFQkFORF9SRUdJU1RFUlMJMHg4MDAxCisjZGVmaW5lIFBEUl9CQVNFQkFORF9SRUdJU1RFUlMJCQkJMHg4MDAwCisjZGVmaW5lIFBEUl9QRVJfQ0hBTk5FTF9CQVNFQkFORF9SRUdJU1RFUlMJCTB4ODAwMQorCisvKiB1c2VkIGJ5IG91ciBtb2RpZmljYXRlZCBlZXByb20gaW1hZ2UgKi8KKyNkZWZpbmUgUERSX1JTU0lfTElORUFSX0FQUFJPWElNQVRJT05fQ1VTVE9NCQkweERFQUQKKyNkZWZpbmUgUERSX1BSSVNNX1BBX0NBTF9PVVRQVVRfUE9XRVJfTElNSVRTX0NVU1RPTQkweEJFRUYKKyNkZWZpbmUgUERSX1BSSVNNX1BBX0NBTF9DVVJWRV9EQVRBX0NVU1RPTQkJMHhCMDVECiAKIC8qIFBEUiBkZWZpbml0aW9ucyBmb3IgZGVmYXVsdCBjb3VudHJ5ICYgY291bnRyeSBsaXN0ICovCiAjZGVmaW5lIFBEUl9DT1VOVFJZX0NFUlRfQ09ERQkJMHg4MApAQCAtMjQxLDEyICsyODQsNiBAQAogI2RlZmluZSBQRFJfQ09VTlRSWV9DRVJUX0lPRE9PUl9PVVRET09SCTB4MzAKICNkZWZpbmUgUERSX0NPVU5UUllfQ0VSVF9JTkRFWAkJMHgwRgogCi0vKiBzdG9yZWQgaW4gc2tiLT5jYiAqLwotc3RydWN0IG1lbXJlY29yZCB7Ci0JdTMyIHN0YXJ0X2FkZHI7Ci0JdTMyIGVuZF9hZGRyOwotfTsKLQogc3RydWN0IHA1NF9lZXByb21fbG04NiB7CiAJdW5pb24gewogCQlzdHJ1Y3QgewpAQCAtMzI5LDcgKzM2Niw3IEBACiAJdTggcGFkZGluZzsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi1lbnVtICBwNTRfdHhfZGF0YV9jcnlwdCB7CitlbnVtIHA1NF90eF9kYXRhX2NyeXB0IHsKIAlQNTRfQ1JZUFRPX05PTkUgPSAwLAogCVA1NF9DUllQVE9fV0VQLAogCVA1NF9DUllQVE9fVEtJUCwKQEAgLTM0MCw2ICszNzcsMjMgQEAKIAlQNTRfQ1JZUFRPX0FFU0NDTVAKIH07CiAKK2VudW0gcDU0X3R4X2RhdGFfcXVldWUgeworCVA1NF9RVUVVRV9CRUFDT04JPSAwLAorCVA1NF9RVUVVRV9GV1NDQU4JPSAxLAorCVA1NF9RVUVVRV9NR01UCQk9IDIsCisJUDU0X1FVRVVFX0NBQgkJPSAzLAorCVA1NF9RVUVVRV9EQVRBCQk9IDQsCisKKwlQNTRfUVVFVUVfQUNfTlVNCT0gNCwKKwlQNTRfUVVFVUVfQUNfVk8JCT0gNCwKKwlQNTRfUVVFVUVfQUNfVkkJCT0gNSwKKwlQNTRfUVVFVUVfQUNfQkUJCT0gNiwKKwlQNTRfUVVFVUVfQUNfQksJCT0gNywKKworCS8qIGtlZXAgbGFzdCAqLworCVA1NF9RVUVVRV9OVU0JCT0gOCwKK307CisKIHN0cnVjdCBwNTRfdHhfZGF0YSB7CiAJdTggcmF0ZXNldFs4XTsKIAl1OCBydHNfcmF0ZV9pZHg7CkBAIC0zNTEsOSArNDA1LDE4IEBACiAJdTggYmFja2xvZzsKIAlfX2xlMTYgZHVyYXRpb25zWzRdOwogCXU4IHR4X2FudGVubmE7Ci0JdTggb3V0cHV0X3Bvd2VyOwotCXU4IGN0c19yYXRlOwotCXU4IHVuYWxsb2MyWzNdOworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXU4IGN0c19yYXRlOworCQkJX19sZTE2IG91dHB1dF9wb3dlcjsKKwkJfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBsb25nYm93OworCQlzdHJ1Y3QgeworCQkJdTggb3V0cHV0X3Bvd2VyOworCQkJdTggY3RzX3JhdGU7CisJCQl1OCB1bmFsbG9jOworCQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBub3JtYWw7CisJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisJdTggdW5hbGxvYzJbMl07CiAJdTggYWxpZ25bMF07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIApAQCAtNDE0LDExICs0NzcsMTQgQEAKICNkZWZpbmUgUDU0X1NDQU5fQUNUSVZFIEJJVCgyKQogI2RlZmluZSBQNTRfU0NBTl9GSUxURVIgQklUKDMpCiAKLXN0cnVjdCBwNTRfc2NhbiB7CitzdHJ1Y3QgcDU0X3NjYW5faGVhZCB7CiAJX19sZTE2IG1vZGU7CiAJX19sZTE2IGR3ZWxsOwotCXU4IHBhZGRpbmcxWzIwXTsKLQlzdHJ1Y3QgcGRhX2lxX2F1dG9jYWxfZW50cnkgaXFfYXV0b2NhbDsKKwl1OCBzY2FuX3BhcmFtc1syMF07CisJX19sZTE2IGZyZXE7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IHA1NF9zY2FuX2JvZHkgewogCXU4IHBhX3BvaW50c19wZXJfY3VydmU7CiAJdTggdmFsX2JhcmtlcjsKIAl1OCB2YWxfYnBzazsKQEAgLTQzMCwyNSArNDk2LDI4IEBACiAJdTggZHVwX3Fwc2s7CiAJdTggZHVwXzE2cWFtOwogCXU4IGR1cF82NHFhbTsKLQl1bmlvbiB7Ci0JCXN0cnVjdCBwZGFfcnNzaV9jYWxfZW50cnkgdjFfcnNzaTsKLQotCQlzdHJ1Y3QgewotCQkJX19sZTMyIGJhc2ljX3JhdGVfbWFzazsKLQkJCXU4IHJ0c19yYXRlc1s4XTsKLQkJCXN0cnVjdCBwZGFfcnNzaV9jYWxfZW50cnkgcnNzaTsKLQkJfSB2MiBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0JfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotI2RlZmluZSBQNTRfU0NBTl9WMV9MRU4gMHg3MAotI2RlZmluZSBQNTRfU0NBTl9WMl9MRU4gMHg3Yworc3RydWN0IHA1NF9zY2FuX2JvZHlfbG9uZ2JvdyB7CisJc3RydWN0IHA1NF9jaGFubmVsX291dHB1dF9saW1pdF9sb25nYm93IHBvd2VyX2xpbWl0czsKKwlzdHJ1Y3QgcDU0X3BhX2N1cnZlX2RhdGFfc2FtcGxlX2xvbmdib3cgY3VydmVfZGF0YVs4XTsKKwlfX2xlMTYgdW5rbls2XTsJCS8qIG1heWJlIG1vcmUgcG93ZXJfbGltaXRzIG9yIHJhdGVfbWFzayAqLworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3VuaW9uIHA1NF9zY2FuX2JvZHlfdW5pb24geworCXN0cnVjdCBwNTRfc2Nhbl9ib2R5IG5vcm1hbDsKKwlzdHJ1Y3QgcDU0X3NjYW5fYm9keV9sb25nYm93IGxvbmdib3c7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IHA1NF9zY2FuX3RhaWxfcmF0ZSB7CisJX19sZTMyIGJhc2ljX3JhdGVfbWFzazsKKwl1OCBydHNfcmF0ZXNbOF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogc3RydWN0IHA1NF9sZWQgewotCV9fbGUxNiBtb2RlOwotCV9fbGUxNiBsZWRfdGVtcG9yYXJ5OwotCV9fbGUxNiBsZWRfcGVybWFuZW50OwotCV9fbGUxNiBkdXJhdGlvbjsKKwlfX2xlMTYgZmxhZ3M7CisJX19sZTE2IG1hc2tbMl07CisJX19sZTE2IGRlbGF5WzJdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIHN0cnVjdCBwNTRfZWRjZiB7CkBAIC01MTEsNiArNTgwLDcgQEAKIAlfX2xlMTYgcGVyaW9kczsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCisjZGVmaW5lIFA1NF9QU01fQ0FNCQkJMAogI2RlZmluZSBQNTRfUFNNCQkJCUJJVCgwKQogI2RlZmluZSBQNTRfUFNNX0RUSU0JCQlCSVQoMSkKICNkZWZpbmUgUDU0X1BTTV9NQ0JDCQkJQklUKDIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0cGNpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0cGNpLmMKaW5kZXggYWEzNjdhMC4uZTM1NjlhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHBjaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRwY2kuYwpAQCAtNzksNiArNzksMTIgQEAKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCisJaWYgKHByaXYtPmNvbW1vbi5md19pbnRlcmZhY2UgIT0gRldfTE04NikgeworCQlkZXZfZXJyKCZwcml2LT5wZGV2LT5kZXYsICJ3cm9uZyBmaXJtd2FyZSwgIgorCQkJInBsZWFzZSBnZXQgYSBMTTg2KFBDSSkgZmlybXdhcmUgYSB0cnkgYWdhaW4uXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCiAJZGF0YSA9IChfX2xlMzIgKikgcHJpdi0+ZmlybXdhcmUtPmRhdGE7CiAJcmVtYWlucyA9IHByaXYtPmZpcm13YXJlLT5zaXplOwogCWRldmljZV9hZGRyID0gSVNMMzhYWF9ERVZfRklSTVdBUkVfQUREUjsKQEAgLTQwNyw4ICs0MTMsNyBAQAogCWVyciA9IHJlcXVlc3RfaXJxKHByaXYtPnBkZXYtPmlycSwgJnA1NHBfaW50ZXJydXB0LAogCQkJICBJUlFGX1NIQVJFRCwgInA1NHBjaSIsIGRldik7CiAJaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gcmVnaXN0ZXIgSVJRIGhhbmRsZXJcbiIsCi0JCSAgICAgICB3aXBoeV9uYW1lKGRldi0+d2lwaHkpKTsKKwkJZGV2X2VycigmcHJpdi0+cGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIElSUSBoYW5kbGVyXG4iKTsKIAkJcmV0dXJuIGVycjsKIAl9CiAKQEAgLTQ3MCwzMCArNDc1LDI2IEBACiAKIAllcnIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKIAlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXMgKHA1NHBjaSk6IENhbm5vdCBlbmFibGUgbmV3IFBDSSBkZXZpY2VcbiIsCi0JCSAgICAgICBwY2lfbmFtZShwZGV2KSk7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbm5vdCBlbmFibGUgbmV3IFBDSSBkZXZpY2VcbiIpOwogCQlyZXR1cm4gZXJyOwogCX0KIAogCW1lbV9hZGRyID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApOwogCW1lbV9sZW4gPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApOwogCWlmIChtZW1fbGVuIDwgc2l6ZW9mKHN0cnVjdCBwNTRwX2NzcikpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlcyAocDU0cGNpKTogVG9vIHNob3J0IFBDSSByZXNvdXJjZXNcbiIsCi0JCSAgICAgICBwY2lfbmFtZShwZGV2KSk7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIlRvbyBzaG9ydCBQQ0kgcmVzb3VyY2VzXG4iKTsKIAkJZ290byBlcnJfZGlzYWJsZV9kZXY7CiAJfQogCiAJZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCAicDU0cGNpIik7CiAJaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzIChwNTRwY2kpOiBDYW5ub3Qgb2J0YWluIFBDSSByZXNvdXJjZXNcbiIsCi0JCSAgICAgICBwY2lfbmFtZShwZGV2KSk7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbm5vdCBvYnRhaW4gUENJIHJlc291cmNlc1xuIik7CiAJCWdvdG8gZXJyX2Rpc2FibGVfZGV2OwogCX0KIAogCWlmIChwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV8zMkJJVF9NQVNLKSB8fAogCSAgICBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXMgKHA1NHBjaSk6IE5vIHN1aXRhYmxlIERNQSBhdmFpbGFibGVcbiIsCi0JCSAgICAgICBwY2lfbmFtZShwZGV2KSk7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIk5vIHN1aXRhYmxlIERNQSBhdmFpbGFibGVcbiIpOwogCQlnb3RvIGVycl9mcmVlX3JlZzsKIAl9CiAKQEAgLTUwNSw4ICs1MDYsNyBAQAogCiAJZGV2ID0gcDU0X2luaXRfY29tbW9uKHNpemVvZigqcHJpdikpOwogCWlmICghZGV2KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXMgKHA1NHBjaSk6IGllZWU4MDIxMSBhbGxvYyBmYWlsZWRcbiIsCi0JCSAgICAgICBwY2lfbmFtZShwZGV2KSk7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImllZWU4MDIxMSBhbGxvYyBmYWlsZWRcbiIpOwogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGVycl9mcmVlX3JlZzsKIAl9CkBAIC01MTksMTcgKzUxOSwxNSBAQAogCiAJcHJpdi0+bWFwID0gaW9yZW1hcChtZW1fYWRkciwgbWVtX2xlbik7CiAJaWYgKCFwcml2LT5tYXApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlcyAocDU0cGNpKTogQ2Fubm90IG1hcCBkZXZpY2UgbWVtb3J5XG4iLAotCQkgICAgICAgcGNpX25hbWUocGRldikpOwotCQllcnIgPSAtRUlOVkFMOwkvLyBUT0RPOiB1c2UgYSBiZXR0ZXIgZXJyb3IgY29kZT8KKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2Fubm90IG1hcCBkZXZpY2UgbWVtb3J5XG4iKTsKKwkJZXJyID0gLUVOT01FTTsKIAkJZ290byBlcnJfZnJlZV9kZXY7CiAJfQogCiAJcHJpdi0+cmluZ19jb250cm9sID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocGRldiwgc2l6ZW9mKCpwcml2LT5yaW5nX2NvbnRyb2wpLAogCQkJCQkJICAmcHJpdi0+cmluZ19jb250cm9sX2RtYSk7CiAJaWYgKCFwcml2LT5yaW5nX2NvbnRyb2wpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlcyAocDU0cGNpKTogQ2Fubm90IGFsbG9jYXRlIHJpbmdzXG4iLAotCQkgICAgICAgcGNpX25hbWUocGRldikpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW5ub3QgYWxsb2NhdGUgcmluZ3NcbiIpOwogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGVycl9pb3VubWFwOwogCX0KQEAgLTU0Myw4ICs1NDEsNyBAQAogCWVyciA9IHJlcXVlc3RfZmlybXdhcmUoJnByaXYtPmZpcm13YXJlLCAiaXNsMzg4NnBjaSIsCiAJCQkgICAgICAgJnByaXYtPnBkZXYtPmRldik7CiAJaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzIChwNTRwY2kpOiBjYW5ub3QgZmluZCBmaXJtd2FyZSAiCi0JCQkiKGlzbDM4ODZwY2kpXG4iLCBwY2lfbmFtZShwcml2LT5wZGV2KSk7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbm5vdCBmaW5kIGZpcm13YXJlIChpc2wzODg2cGNpKVxuIik7CiAJCWVyciA9IHJlcXVlc3RfZmlybXdhcmUoJnByaXYtPmZpcm13YXJlLCAiaXNsMzg4NiIsCiAJCQkJICAgICAgICZwcml2LT5wZGV2LT5kZXYpOwogCQlpZiAoZXJyKQpAQCAtNTU5LDEyICs1NTYsOSBAQAogCWlmIChlcnIpCiAJCWdvdG8gZXJyX2ZyZWVfY29tbW9uOwogCi0JZXJyID0gaWVlZTgwMjExX3JlZ2lzdGVyX2h3KGRldik7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzIChwNTRwY2kpOiBDYW5ub3QgcmVnaXN0ZXIgbmV0ZGV2aWNlXG4iLAotCQkgICAgICAgcGNpX25hbWUocGRldikpOworCWVyciA9IHA1NF9yZWdpc3Rlcl9jb21tb24oZGV2LCAmcGRldi0+ZGV2KTsKKwlpZiAoZXJyKQogCQlnb3RvIGVycl9mcmVlX2NvbW1vbjsKLQl9CiAKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHNwaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHNwaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiMjIyYWEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0c3BpLmMKQEAgLTAsMCArMSw3NjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ2hyaXN0aWFuIExhbXBhcnRlciA8Y2h1bmtlZXlAd2ViLmRlPgorICogQ29weXJpZ2h0IDIwMDggICAgICAgSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KKyAqCisgKiBUaGlzIGRyaXZlciBpcyBhIHBvcnQgZnJvbSBzdGxjNDV4eDoKKyAqCUNvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorCisjaW5jbHVkZSAicDU0c3BpLmgiCisjaW5jbHVkZSAicDU0c3BpX2VlcHJvbS5oIgorI2luY2x1ZGUgInA1NC5oIgorCisjaW5jbHVkZSAicDU0Y29tbW9uLmgiCisKK01PRFVMRV9GSVJNV0FSRSgiMzgyNi5hcm0iKTsKK01PRFVMRV9BTElBUygic3RsYzQ1eHgiKTsKKworLyoKKyAqIGdwaW9zIHNob3VsZCBiZSBoYW5kbGVkIGluIGJvYXJkIGZpbGVzIGFuZCBwcm92aWRlZCB2aWEgcGxhdGZvcm0gZGF0YSwKKyAqIGJ1dCBiZWNhdXNlIGl0J3MgY3VycmVudGx5IGltcG9zc2libGUgZm9yIHA1NHNwaSB0byBoYXZlIGEgaGVhZGVyIGZpbGUKKyAqIGluIGluY2x1ZGUvbGludXgsIGxldCdzIHVzZSBtb2R1bGUgcGFyYW1hdGVycyBmb3Igbm93CisgKi8KKworc3RhdGljIGludCBwNTRzcGlfZ3Bpb19wb3dlciA9IDk3OworbW9kdWxlX3BhcmFtKHA1NHNwaV9ncGlvX3Bvd2VyLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhwNTRzcGlfZ3Bpb19wb3dlciwgImdwaW8gbnVtYmVyIGZvciBwb3dlciBsaW5lIik7CisKK3N0YXRpYyBpbnQgcDU0c3BpX2dwaW9faXJxID0gODc7Cittb2R1bGVfcGFyYW0ocDU0c3BpX2dwaW9faXJxLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhwNTRzcGlfZ3Bpb19pcnEsICJncGlvIG51bWJlciBmb3IgaXJxIGxpbmUiKTsKKworc3RhdGljIHZvaWQgcDU0c3BpX3NwaV9yZWFkKHN0cnVjdCBwNTRzX3ByaXYgKnByaXYsIHU4IGFkZHJlc3MsCisJCQkgICAgICB2b2lkICpidWYsIHNpemVfdCBsZW4pCit7CisJc3RydWN0IHNwaV90cmFuc2ZlciB0WzJdOworCXN0cnVjdCBzcGlfbWVzc2FnZSBtOworCV9fbGUxNiBhZGRyOworCisJLyogV2UgZmlyc3QgcHVzaCB0aGUgYWRkcmVzcyAqLworCWFkZHIgPSBjcHVfdG9fbGUxNihhZGRyZXNzIDw8IDggfCBTUElfQURSU19SRUFEX0JJVF8xNSk7CisKKwlzcGlfbWVzc2FnZV9pbml0KCZtKTsKKwltZW1zZXQodCwgMCwgc2l6ZW9mKHQpKTsKKworCXRbMF0udHhfYnVmID0gJmFkZHI7CisJdFswXS5sZW4gPSBzaXplb2YoYWRkcik7CisJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnRbMF0sICZtKTsKKworCXRbMV0ucnhfYnVmID0gYnVmOworCXRbMV0ubGVuID0gbGVuOworCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ0WzFdLCAmbSk7CisKKwlzcGlfc3luYyhwcml2LT5zcGksICZtKTsKK30KKworCitzdGF0aWMgdm9pZCBwNTRzcGlfc3BpX3dyaXRlKHN0cnVjdCBwNTRzX3ByaXYgKnByaXYsIHU4IGFkZHJlc3MsCisJCQkgICAgIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3Qgc3BpX3RyYW5zZmVyIHRbM107CisJc3RydWN0IHNwaV9tZXNzYWdlIG07CisJX19sZTE2IGFkZHI7CisKKwkvKiBXZSBmaXJzdCBwdXNoIHRoZSBhZGRyZXNzICovCisJYWRkciA9IGNwdV90b19sZTE2KGFkZHJlc3MgPDwgOCk7CisKKwlzcGlfbWVzc2FnZV9pbml0KCZtKTsKKwltZW1zZXQodCwgMCwgc2l6ZW9mKHQpKTsKKworCXRbMF0udHhfYnVmID0gJmFkZHI7CisJdFswXS5sZW4gPSBzaXplb2YoYWRkcik7CisJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnRbMF0sICZtKTsKKworCXRbMV0udHhfYnVmID0gYnVmOworCXRbMV0ubGVuID0gbGVuOworCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ0WzFdLCAmbSk7CisKKwlpZiAobGVuICUgMikgeworCQlfX2xlMTYgbGFzdF93b3JkOworCQlsYXN0X3dvcmQgPSBjcHVfdG9fbGUxNigoKHU4ICopYnVmKVtsZW4gLSAxXSk7CisKKwkJdFsyXS50eF9idWYgPSAmbGFzdF93b3JkOworCQl0WzJdLmxlbiA9IHNpemVvZihsYXN0X3dvcmQpOworCQlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmdFsyXSwgJm0pOworCX0KKworCXNwaV9zeW5jKHByaXYtPnNwaSwgJm0pOworfQorCitzdGF0aWMgdTE2IHA1NHNwaV9yZWFkMTYoc3RydWN0IHA1NHNfcHJpdiAqcHJpdiwgdTggYWRkcikKK3sKKwlfX2xlMTYgdmFsOworCisJcDU0c3BpX3NwaV9yZWFkKHByaXYsIGFkZHIsICZ2YWwsIHNpemVvZih2YWwpKTsKKworCXJldHVybiBsZTE2X3RvX2NwdSh2YWwpOworfQorCitzdGF0aWMgdTMyIHA1NHNwaV9yZWFkMzIoc3RydWN0IHA1NHNfcHJpdiAqcHJpdiwgdTggYWRkcikKK3sKKwlfX2xlMzIgdmFsOworCisJcDU0c3BpX3NwaV9yZWFkKHByaXYsIGFkZHIsICZ2YWwsIHNpemVvZih2YWwpKTsKKworCXJldHVybiBsZTMyX3RvX2NwdSh2YWwpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcDU0c3BpX3dyaXRlMTYoc3RydWN0IHA1NHNfcHJpdiAqcHJpdiwgdTggYWRkciwgX19sZTE2IHZhbCkKK3sKKwlwNTRzcGlfc3BpX3dyaXRlKHByaXYsIGFkZHIsICZ2YWwsIHNpemVvZih2YWwpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHA1NHNwaV93cml0ZTMyKHN0cnVjdCBwNTRzX3ByaXYgKnByaXYsIHU4IGFkZHIsIF9fbGUzMiB2YWwpCit7CisJcDU0c3BpX3NwaV93cml0ZShwcml2LCBhZGRyLCAmdmFsLCBzaXplb2YodmFsKSk7Cit9CisKK3N0cnVjdCBwNTRzcGlfc3BpX3JlZyB7CisJdTE2IGFkZHJlc3M7CQkvKiBfX2xlMTYgPyAqLworCXUxNiBsZW5ndGg7CisJY2hhciAqbmFtZTsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcDU0c3BpX3NwaV9yZWcgcDU0c3BpX3JlZ2lzdGVyc19hcnJheVtdID0KK3sKKwl7IFNQSV9BRFJTX0FSTV9JTlRFUlJVUFRTLAkzMiwgIkFSTV9JTlQgICAgICIgfSwKKwl7IFNQSV9BRFJTX0FSTV9JTlRfRU4sCQkzMiwgIkFSTV9JTlRfRU5BICIgfSwKKwl7IFNQSV9BRFJTX0hPU1RfSU5URVJSVVBUUywJMzIsICJIT1NUX0lOVCAgICAiIH0sCisJeyBTUElfQURSU19IT1NUX0lOVF9FTiwJCTMyLCAiSE9TVF9JTlRfRU5BIiB9LAorCXsgU1BJX0FEUlNfSE9TVF9JTlRfQUNLLAkzMiwgIkhPU1RfSU5UX0FDSyIgfSwKKwl7IFNQSV9BRFJTX0dFTl9QVVJQXzEsCQkzMiwgIkdQMV9DT01NICAgICIgfSwKKwl7IFNQSV9BRFJTX0dFTl9QVVJQXzIsCQkzMiwgIkdQMl9DT01NICAgICIgfSwKKwl7IFNQSV9BRFJTX0RFVl9DVFJMX1NUQVQsCTMyLCAiREVWX0NUUkxfU1RBIiB9LAorCXsgU1BJX0FEUlNfRE1BX0RBVEEsCQkxNiwgIkRNQV9EQVRBICAgICIgfSwKKwl7IFNQSV9BRFJTX0RNQV9XUklURV9DVFJMLAkxNiwgIkRNQV9XUl9DVFJMICIgfSwKKwl7IFNQSV9BRFJTX0RNQV9XUklURV9MRU4sCTE2LCAiRE1BX1dSX0xFTiAgIiB9LAorCXsgU1BJX0FEUlNfRE1BX1dSSVRFX0JBU0UsCTMyLCAiRE1BX1dSX0JBU0UgIiB9LAorCXsgU1BJX0FEUlNfRE1BX1JFQURfQ1RSTCwJMTYsICJETUFfUkRfQ1RSTCAiIH0sCisJeyBTUElfQURSU19ETUFfUkVBRF9MRU4sCTE2LCAiRE1BX1JEX0xFTiAgIiB9LAorCXsgU1BJX0FEUlNfRE1BX1dSSVRFX0JBU0UsCTMyLCAiRE1BX1JEX0JBU0UgIiB9Cit9OworCitzdGF0aWMgaW50IHA1NHNwaV93YWl0X2JpdChzdHJ1Y3QgcDU0c19wcml2ICpwcml2LCB1MTYgcmVnLCBfX2xlMzIgYml0cykKK3sKKwlpbnQgaTsKKwlfX2xlMzIgYnVmZmVyOworCisJZm9yIChpID0gMDsgaSA8IDIwMDA7IGkrKykgeworCQlwNTRzcGlfc3BpX3JlYWQocHJpdiwgcmVnLCAmYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7CisJCWlmIChidWZmZXIgPT0gYml0cykKKwkJCXJldHVybiAxOworCisJCW1zbGVlcCgxKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcDU0c3BpX3JlcXVlc3RfZmlybXdhcmUoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQoreworCXN0cnVjdCBwNTRzX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CisJaW50IHJldDsKKworCS8qIEZJWE1FOiBzaG91bGQgZHJpdmVyIHVzZSBpdCdzIG93biBzdHJ1Y3QgZGV2aWNlPyAqLworCXJldCA9IHJlcXVlc3RfZmlybXdhcmUoJnByaXYtPmZpcm13YXJlLCAiMzgyNi5hcm0iLCAmcHJpdi0+c3BpLT5kZXYpOworCisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmcHJpdi0+c3BpLT5kZXYsICJyZXF1ZXN0X2Zpcm13YXJlKCkgZmFpbGVkOiAlZCIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gcDU0X3BhcnNlX2Zpcm13YXJlKGRldiwgcHJpdi0+ZmlybXdhcmUpOworCWlmIChyZXQpIHsKKwkJcmVsZWFzZV9maXJtd2FyZShwcml2LT5maXJtd2FyZSk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcDU0c3BpX3JlcXVlc3RfZWVwcm9tKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKK3sKKwlzdHJ1Y3QgcDU0c19wcml2ICpwcml2ID0gZGV2LT5wcml2OworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZWVwcm9tOworCWludCByZXQ7CisKKwkvKgorCSAqIGFsbG93IHVzZXJzIHRvIGN1c3RvbWl6ZSB0aGVpciBlZXByb20uCisJICovCisKKwlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZlZXByb20sICIzODI2LmVlcHJvbSIsICZwcml2LT5zcGktPmRldik7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2luZm8oJnByaXYtPnNwaS0+ZGV2LCAibG9hZGluZyBkZWZhdWx0IGVlcHJvbS4uLlxuIik7CisJCXJldCA9IHA1NF9wYXJzZV9lZXByb20oZGV2LCAodm9pZCAqKSBwNTRzcGlfZWVwcm9tLAorCQkJCSAgICAgICBzaXplb2YocDU0c3BpX2VlcHJvbSkpOworCX0gZWxzZSB7CisJCWRldl9pbmZvKCZwcml2LT5zcGktPmRldiwgImxvYWRpbmcgdXNlciBlZXByb20uLi5cbiIpOworCQlyZXQgPSBwNTRfcGFyc2VfZWVwcm9tKGRldiwgKHZvaWQgKikgZWVwcm9tLT5kYXRhLAorCQkJCSAgICAgICAoaW50KWVlcHJvbS0+c2l6ZSk7CisJCXJlbGVhc2VfZmlybXdhcmUoZWVwcm9tKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBwNTRzcGlfdXBsb2FkX2Zpcm13YXJlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKK3sKKwlzdHJ1Y3QgcDU0c19wcml2ICpwcml2ID0gZGV2LT5wcml2OworCXVuc2lnbmVkIGxvbmcgZndfbGVuLCBmd19hZGRyOworCWxvbmcgX2Z3X2xlbjsKKworCS8qIHN0b3AgdGhlIGRldmljZSAqLworCXA1NHNwaV93cml0ZTE2KHByaXYsIFNQSV9BRFJTX0RFVl9DVFJMX1NUQVQsIGNwdV90b19sZTE2KAorCQkgICAgICAgU1BJX0NUUkxfU1RBVF9IT1NUX09WRVJSSURFIHwgU1BJX0NUUkxfU1RBVF9IT1NUX1JFU0VUIHwKKwkJICAgICAgIFNQSV9DVFJMX1NUQVRfU1RBUlRfSEFMVEVEKSk7CisKKwltc2xlZXAoVEFSR0VUX0JPT1RfU0xFRVApOworCisJcDU0c3BpX3dyaXRlMTYocHJpdiwgU1BJX0FEUlNfREVWX0NUUkxfU1RBVCwgY3B1X3RvX2xlMTYoCisJCSAgICAgICBTUElfQ1RSTF9TVEFUX0hPU1RfT1ZFUlJJREUgfAorCQkgICAgICAgU1BJX0NUUkxfU1RBVF9TVEFSVF9IQUxURUQpKTsKKworCW1zbGVlcChUQVJHRVRfQk9PVF9TTEVFUCk7CisKKwlmd19hZGRyID0gSVNMMzhYWF9ERVZfRklSTVdBUkVfQUREUjsKKwlmd19sZW4gPSBwcml2LT5maXJtd2FyZS0+c2l6ZTsKKworCXdoaWxlIChmd19sZW4gPiAwKSB7CisJCV9md19sZW4gPSBtaW5fdChsb25nLCBmd19sZW4sIFNQSV9NQVhfUEFDS0VUX1NJWkUpOworCisJCXA1NHNwaV93cml0ZTE2KHByaXYsIFNQSV9BRFJTX0RNQV9XUklURV9DVFJMLAorCQkJICAgICAgIGNwdV90b19sZTE2KFNQSV9ETUFfV1JJVEVfQ1RSTF9FTkFCTEUpKTsKKworCQlpZiAocDU0c3BpX3dhaXRfYml0KHByaXYsIFNQSV9BRFJTX0RNQV9XUklURV9DVFJMLAorCQkJCSAgICBjcHVfdG9fbGUzMihIT1NUX0FMTE9XRUQpKSA9PSAwKSB7CisJCQlkZXZfZXJyKCZwcml2LT5zcGktPmRldiwgImZ3X3VwbG9hZCBub3QgYWxsb3dlZCAiCisJCQkJInRvIERNQSB3cml0ZS4iKTsKKwkJCXJldHVybiAtRUFHQUlOOworCQl9CisKKwkJcDU0c3BpX3dyaXRlMTYocHJpdiwgU1BJX0FEUlNfRE1BX1dSSVRFX0xFTiwKKwkJCSAgICAgICBjcHVfdG9fbGUxNihfZndfbGVuKSk7CisJCXA1NHNwaV93cml0ZTMyKHByaXYsIFNQSV9BRFJTX0RNQV9XUklURV9CQVNFLAorCQkJICAgICAgIGNwdV90b19sZTMyKGZ3X2FkZHIpKTsKKworCQlwNTRzcGlfc3BpX3dyaXRlKHByaXYsIFNQSV9BRFJTX0RNQV9EQVRBLAorCQkJCSAmcHJpdi0+ZmlybXdhcmUtPmRhdGEsIF9md19sZW4pOworCisJCWZ3X2xlbiAtPSBfZndfbGVuOworCQlmd19hZGRyICs9IF9md19sZW47CisKKwkJLyogRklYTUU6IEkgdGhpbmsgdGhpcyBkb2Vzbid0IHdvcmsgaWYgZmlybXdhcmUgaXMgbGFyZ2UsCisJCSAqIHRoaXMgbG9vcCBnb2VzIHRvIHNlY29uZCByb3VuZC4gZnctPmRhdGEgaXMgbm90CisJCSAqIGluY3JlYXNlZCBhdCBhbGwhICovCisJfQorCisJQlVHX09OKGZ3X2xlbiAhPSAwKTsKKworCS8qIGVuYWJsZSBob3N0IGludGVycnVwdHMgKi8KKwlwNTRzcGlfd3JpdGUzMihwcml2LCBTUElfQURSU19IT1NUX0lOVF9FTiwKKwkJICAgICAgIGNwdV90b19sZTMyKFNQSV9IT1NUX0lOVFNfREVGQVVMVCkpOworCisJLyogYm9vdCB0aGUgZGV2aWNlICovCisJcDU0c3BpX3dyaXRlMTYocHJpdiwgU1BJX0FEUlNfREVWX0NUUkxfU1RBVCwgY3B1X3RvX2xlMTYoCisJCSAgICAgICBTUElfQ1RSTF9TVEFUX0hPU1RfT1ZFUlJJREUgfCBTUElfQ1RSTF9TVEFUX0hPU1RfUkVTRVQgfAorCQkgICAgICAgU1BJX0NUUkxfU1RBVF9SQU1fQk9PVCkpOworCisJbXNsZWVwKFRBUkdFVF9CT09UX1NMRUVQKTsKKworCXA1NHNwaV93cml0ZTE2KHByaXYsIFNQSV9BRFJTX0RFVl9DVFJMX1NUQVQsIGNwdV90b19sZTE2KAorCQkgICAgICAgU1BJX0NUUkxfU1RBVF9IT1NUX09WRVJSSURFIHwgU1BJX0NUUkxfU1RBVF9SQU1fQk9PVCkpOworCW1zbGVlcChUQVJHRVRfQk9PVF9TTEVFUCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHA1NHNwaV9wb3dlcl9vZmYoc3RydWN0IHA1NHNfcHJpdiAqcHJpdikKK3sKKwlkaXNhYmxlX2lycShncGlvX3RvX2lycShwNTRzcGlfZ3Bpb19pcnEpKTsKKwlncGlvX3NldF92YWx1ZShwNTRzcGlfZ3Bpb19wb3dlciwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIHA1NHNwaV9wb3dlcl9vbihzdHJ1Y3QgcDU0c19wcml2ICpwcml2KQoreworCWdwaW9fc2V0X3ZhbHVlKHA1NHNwaV9ncGlvX3Bvd2VyLCAxKTsKKwllbmFibGVfaXJxKGdwaW9fdG9faXJxKHA1NHNwaV9ncGlvX2lycSkpOworCisJLyoKKwkgKiBuZWVkIHRvIHdhaXQgYSB3aGlsZSBiZWZvcmUgZGV2aWNlIGNhbiBiZSBhY2Nlc3NlZCwgdGhlIGxlbmdodAorCSAqIGlzIGp1c3QgYSBndWVzcworCSAqLworCW1zbGVlcCgxMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwNTRzcGlfaW50X2FjayhzdHJ1Y3QgcDU0c19wcml2ICpwcml2LCB1MzIgdmFsKQoreworCXA1NHNwaV93cml0ZTMyKHByaXYsIFNQSV9BRFJTX0hPU1RfSU5UX0FDSywgY3B1X3RvX2xlMzIodmFsKSk7Cit9CisKK3N0YXRpYyB2b2lkIHA1NHNwaV93YWtldXAoc3RydWN0IHA1NHNfcHJpdiAqcHJpdikKK3sKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CisJdTMyIGludHM7CisKKwkvKiB3YWtlIHRoZSBjaGlwICovCisJcDU0c3BpX3dyaXRlMzIocHJpdiwgU1BJX0FEUlNfQVJNX0lOVEVSUlVQVFMsCisJCSAgICAgICBjcHVfdG9fbGUzMihTUElfVEFSR0VUX0lOVF9XQUtFVVApKTsKKworCS8qIEFuZCB3YWl0IGZvciB0aGUgUkVBRFkgaW50ZXJydXB0ICovCisJdGltZW91dCA9IGppZmZpZXMgKyBIWjsKKworCWludHMgPSAgcDU0c3BpX3JlYWQzMihwcml2LCBTUElfQURSU19IT1NUX0lOVEVSUlVQVFMpOworCXdoaWxlICghKGludHMgJiBTUElfSE9TVF9JTlRfUkVBRFkpKSB7CisJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKQorCQkJCWdvdG8gb3V0OworCQlpbnRzID0gcDU0c3BpX3JlYWQzMihwcml2LCBTUElfQURSU19IT1NUX0lOVEVSUlVQVFMpOworCX0KKworCXA1NHNwaV9pbnRfYWNrKHByaXYsIFNQSV9IT1NUX0lOVF9SRUFEWSk7CisKK291dDoKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwNTRzcGlfc2xlZXAoc3RydWN0IHA1NHNfcHJpdiAqcHJpdikKK3sKKwlwNTRzcGlfd3JpdGUzMihwcml2LCBTUElfQURSU19BUk1fSU5URVJSVVBUUywKKwkJICAgICAgIGNwdV90b19sZTMyKFNQSV9UQVJHRVRfSU5UX1NMRUVQKSk7Cit9CisKK3N0YXRpYyB2b2lkIHA1NHNwaV9pbnRfcmVhZHkoc3RydWN0IHA1NHNfcHJpdiAqcHJpdikKK3sKKwlwNTRzcGlfd3JpdGUzMihwcml2LCBTUElfQURSU19IT1NUX0lOVF9FTiwgY3B1X3RvX2xlMzIoCisJCSAgICAgICBTUElfSE9TVF9JTlRfVVBEQVRFIHwgU1BJX0hPU1RfSU5UX1NXX1VQREFURSkpOworCisJc3dpdGNoIChwcml2LT5md19zdGF0ZSkgeworCWNhc2UgRldfU1RBVEVfQk9PVElORzoKKwkJcHJpdi0+Zndfc3RhdGUgPSBGV19TVEFURV9SRUFEWTsKKwkJY29tcGxldGUoJnByaXYtPmZ3X2NvbXApOworCQlicmVhazsKKwljYXNlIEZXX1NUQVRFX1JFU0VUVElORzoKKwkJcHJpdi0+Zndfc3RhdGUgPSBGV19TVEFURV9SRUFEWTsKKwkJLyogVE9ETzogcmVpbml0aWFsaXplIHN0YXRlICovCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIGludCBwNTRzcGlfcngoc3RydWN0IHA1NHNfcHJpdiAqcHJpdikKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXUxNiBsZW47CisKKwlwNTRzcGlfd2FrZXVwKHByaXYpOworCisJLyogZHVtbXkgcmVhZCB0byBmbHVzaCBTUEkgRE1BIGNvbnRyb2xsZXIgYnVnICovCisJcDU0c3BpX3JlYWQxNihwcml2LCBTUElfQURSU19HRU5fUFVSUF8xKTsKKworCWxlbiA9IHA1NHNwaV9yZWFkMTYocHJpdiwgU1BJX0FEUlNfRE1BX0RBVEEpOworCisJaWYgKGxlbiA9PSAwKSB7CisJCWRldl9lcnIoJnByaXYtPnNwaS0+ZGV2LCAicnggcmVxdWVzdCBvZiB6ZXJvIGJ5dGVzIik7CisJCXJldHVybiAwOworCX0KKworCXNrYiA9IGRldl9hbGxvY19za2IobGVuKTsKKwlpZiAoIXNrYikgeworCQlkZXZfZXJyKCZwcml2LT5zcGktPmRldiwgImNvdWxkIG5vdCBhbGxvYyBza2IiKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcDU0c3BpX3NwaV9yZWFkKHByaXYsIFNQSV9BRFJTX0RNQV9EQVRBLCBza2JfcHV0KHNrYiwgbGVuKSwgbGVuKTsKKwlwNTRzcGlfc2xlZXAocHJpdik7CisKKwlpZiAocDU0X3J4KHByaXYtPmh3LCBza2IpID09IDApCisJCWRldl9rZnJlZV9za2Ioc2tiKTsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpcnFyZXR1cm5fdCBwNTRzcGlfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmNvbmZpZykKK3sKKwlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gY29uZmlnOworCXN0cnVjdCBwNTRzX3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoJnNwaS0+ZGV2KTsKKworCXF1ZXVlX3dvcmsocHJpdi0+aHctPndvcmtxdWV1ZSwgJnByaXYtPndvcmspOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IHA1NHNwaV90eF9mcmFtZShzdHJ1Y3QgcDU0c19wcml2ICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBwNTRfaGRyICpoZHIgPSAoc3RydWN0IHA1NF9oZHIgKikgc2tiLT5kYXRhOworCXN0cnVjdCBwNTRzX2RtYV9yZWdzIGRtYV9yZWdzOworCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKKwlpbnQgcmV0ID0gMDsKKwl1MzIgaW50czsKKworCXA1NHNwaV93YWtldXAocHJpdik7CisKKwlkbWFfcmVncy5jbWQgPSBjcHVfdG9fbGUxNihTUElfRE1BX1dSSVRFX0NUUkxfRU5BQkxFKTsKKwlkbWFfcmVncy5sZW4gPSBjcHVfdG9fbGUxNihza2ItPmxlbik7CisJZG1hX3JlZ3MuYWRkciA9IGhkci0+cmVxX2lkOworCisJcDU0c3BpX3NwaV93cml0ZShwcml2LCBTUElfQURSU19ETUFfV1JJVEVfQ1RSTCwgJmRtYV9yZWdzLAorCQkJICAgc2l6ZW9mKGRtYV9yZWdzKSk7CisKKwlwNTRzcGlfc3BpX3dyaXRlKHByaXYsIFNQSV9BRFJTX0RNQV9EQVRBLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKKworCXRpbWVvdXQgPSBqaWZmaWVzICsgMiAqIEhaOworCWludHMgPSBwNTRzcGlfcmVhZDMyKHByaXYsIFNQSV9BRFJTX0hPU1RfSU5URVJSVVBUUyk7CisJd2hpbGUgKCEoaW50cyAmIFNQSV9IT1NUX0lOVF9XUl9SRUFEWSkpIHsKKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpIHsKKwkJCWRldl9lcnIoJnByaXYtPnNwaS0+ZGV2LCAiV1JfUkVBRFkgdGltZW91dCIpOworCQkJcmV0ID0gLTE7CisJCQlnb3RvIG91dDsKKwkJfQorCQlpbnRzID0gcDU0c3BpX3JlYWQzMihwcml2LCBTUElfQURSU19IT1NUX0lOVEVSUlVQVFMpOworCX0KKworCXA1NHNwaV9pbnRfYWNrKHByaXYsIFNQSV9IT1NUX0lOVF9XUl9SRUFEWSk7CisJcDU0c3BpX3NsZWVwKHByaXYpOworCitvdXQ6CisJaWYgKEZSRUVfQUZURVJfVFgoc2tiKSkKKwkJcDU0X2ZyZWVfc2tiKHByaXYtPmh3LCBza2IpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcDU0c3BpX3dxX3R4KHN0cnVjdCBwNTRzX3ByaXYgKnByaXYpCit7CisJc3RydWN0IHA1NHNfdHhfaW5mbyAqZW50cnk7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm87CisJc3RydWN0IHA1NF90eF9pbmZvICptaW5mbzsKKwlzdHJ1Y3QgcDU0c190eF9pbmZvICpkaW5mbzsKKwlpbnQgcmV0ID0gMDsKKworCXNwaW5fbG9ja19iaCgmcHJpdi0+dHhfbG9jayk7CisKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJnByaXYtPnR4X3BlbmRpbmcpKSB7CisJCWVudHJ5ID0gbGlzdF9lbnRyeShwcml2LT50eF9wZW5kaW5nLm5leHQsCisJCQkJICAgc3RydWN0IHA1NHNfdHhfaW5mbywgdHhfbGlzdCk7CisKKwkJbGlzdF9kZWxfaW5pdCgmZW50cnktPnR4X2xpc3QpOworCisJCXNwaW5fdW5sb2NrX2JoKCZwcml2LT50eF9sb2NrKTsKKworCQlkaW5mbyA9IGNvbnRhaW5lcl9vZigodm9pZCAqKSBlbnRyeSwgc3RydWN0IHA1NHNfdHhfaW5mbywKKwkJCQkgICAgIHR4X2xpc3QpOworCQltaW5mbyA9IGNvbnRhaW5lcl9vZigodm9pZCAqKSBkaW5mbywgc3RydWN0IHA1NF90eF9pbmZvLAorCQkJCSAgICAgZGF0YSk7CisJCWluZm8gPSBjb250YWluZXJfb2YoKHZvaWQgKikgbWluZm8sIHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbywKKwkJCQkgICAgcmF0ZV9kcml2ZXJfZGF0YSk7CisJCXNrYiA9IGNvbnRhaW5lcl9vZigodm9pZCAqKSBpbmZvLCBzdHJ1Y3Qgc2tfYnVmZiwgY2IpOworCisJCXJldCA9IHA1NHNwaV90eF9mcmFtZShwcml2LCBza2IpOworCisJCXNwaW5fbG9ja19iaCgmcHJpdi0+dHhfbG9jayk7CisKKwkJaWYgKHJldCA8IDApIHsKKwkJCXA1NF9mcmVlX3NrYihwcml2LT5odywgc2tiKTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCitvdXQ6CisJc3Bpbl91bmxvY2tfYmgoJnByaXYtPnR4X2xvY2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHA1NHNwaV9vcF90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IHA1NHNfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisJc3RydWN0IHA1NF90eF9pbmZvICptaSA9IChzdHJ1Y3QgcDU0X3R4X2luZm8gKikgaW5mby0+cmF0ZV9kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgcDU0c190eF9pbmZvICpkaSA9IChzdHJ1Y3QgcDU0c190eF9pbmZvICopIG1pLT5kYXRhOworCisJQlVJTERfQlVHX09OKHNpemVvZigqZGkpID4gc2l6ZW9mKChtaS0+ZGF0YSkpKTsKKworCXNwaW5fbG9ja19iaCgmcHJpdi0+dHhfbG9jayk7CisJbGlzdF9hZGRfdGFpbCgmZGktPnR4X2xpc3QsICZwcml2LT50eF9wZW5kaW5nKTsKKwlzcGluX3VubG9ja19iaCgmcHJpdi0+dHhfbG9jayk7CisKKwlxdWV1ZV93b3JrKHByaXYtPmh3LT53b3JrcXVldWUsICZwcml2LT53b3JrKTsKK30KKworc3RhdGljIHZvaWQgcDU0c3BpX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBwNTRzX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHA1NHNfcHJpdiwgd29yayk7CisJdTMyIGludHM7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKKworCWlmIChwcml2LT5md19zdGF0ZSA9PSBGV19TVEFURV9PRkYgJiYKKwkgICAgcHJpdi0+Zndfc3RhdGUgPT0gRldfU1RBVEVfUkVTRVQpCisJCWdvdG8gb3V0OworCisJaW50cyA9IHA1NHNwaV9yZWFkMzIocHJpdiwgU1BJX0FEUlNfSE9TVF9JTlRFUlJVUFRTKTsKKworCWlmIChpbnRzICYgU1BJX0hPU1RfSU5UX1JFQURZKSB7CisJCXA1NHNwaV9pbnRfcmVhZHkocHJpdik7CisJCXA1NHNwaV9pbnRfYWNrKHByaXYsIFNQSV9IT1NUX0lOVF9SRUFEWSk7CisJfQorCisJaWYgKHByaXYtPmZ3X3N0YXRlICE9IEZXX1NUQVRFX1JFQURZKQorCQlnb3RvIG91dDsKKworCWlmIChpbnRzICYgU1BJX0hPU1RfSU5UX1VQREFURSkgeworCQlwNTRzcGlfaW50X2Fjayhwcml2LCBTUElfSE9TVF9JTlRfVVBEQVRFKTsKKwkJcmV0ID0gcDU0c3BpX3J4KHByaXYpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gb3V0OworCX0KKwlpZiAoaW50cyAmIFNQSV9IT1NUX0lOVF9TV19VUERBVEUpIHsKKwkJcDU0c3BpX2ludF9hY2socHJpdiwgU1BJX0hPU1RfSU5UX1NXX1VQREFURSk7CisJCXJldCA9IHA1NHNwaV9yeChwcml2KTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBwNTRzcGlfd3FfdHgocHJpdik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJaW50cyA9IHA1NHNwaV9yZWFkMzIocHJpdiwgU1BJX0FEUlNfSE9TVF9JTlRFUlJVUFRTKTsKKworb3V0OgorCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOworfQorCitzdGF0aWMgaW50IHA1NHNwaV9vcF9zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCit7CisJc3RydWN0IHA1NHNfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CisJaW50IHJldCA9IDA7CisKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZwcml2LT5tdXRleCkpIHsKKwkJcmV0ID0gLUVJTlRSOworCQlnb3RvIG91dDsKKwl9CisKKwlwcml2LT5md19zdGF0ZSA9IEZXX1NUQVRFX0JPT1RJTkc7CisKKwlwNTRzcGlfcG93ZXJfb24ocHJpdik7CisKKwlyZXQgPSBwNTRzcGlfdXBsb2FkX2Zpcm13YXJlKGRldik7CisJaWYgKHJldCA8IDApIHsKKwkJcDU0c3BpX3Bvd2VyX29mZihwcml2KTsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKworCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOworCisJdGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXMoMjAwMCk7CisJdGltZW91dCA9IHdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZV90aW1lb3V0KCZwcml2LT5md19jb21wLAorCQkJCQkJCSAgICB0aW1lb3V0KTsKKwlpZiAoIXRpbWVvdXQpIHsKKwkJZGV2X2VycigmcHJpdi0+c3BpLT5kZXYsICJmaXJtd2FyZSBib290IGZhaWxlZCIpOworCQlwNTRzcGlfcG93ZXJfb2ZmKHByaXYpOworCQlyZXQgPSAtMTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmcHJpdi0+bXV0ZXgpKSB7CisJCXJldCA9IC1FSU5UUjsKKwkJcDU0c3BpX3Bvd2VyX29mZihwcml2KTsKKwkJZ290byBvdXQ7CisJfQorCisJV0FSTl9PTihwcml2LT5md19zdGF0ZSAhPSBGV19TVEFURV9SRUFEWSk7CisKK291dF91bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBwNTRzcGlfb3Bfc3RvcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCit7CisJc3RydWN0IHA1NHNfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKKworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnByaXYtPm11dGV4KSkgeworCQkvKiBGSVhNRTogaG93IHRvIGhhbmRsZSB0aGlzIGVycm9yPyAqLworCQlyZXR1cm47CisJfQorCisJV0FSTl9PTihwcml2LT5md19zdGF0ZSAhPSBGV19TVEFURV9SRUFEWSk7CisKKwljYW5jZWxfd29ya19zeW5jKCZwcml2LT53b3JrKTsKKworCXA1NHNwaV9wb3dlcl9vZmYocHJpdik7CisJc3Bpbl9sb2NrX2JoKCZwcml2LT50eF9sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmcHJpdi0+dHhfcGVuZGluZyk7CisJc3Bpbl91bmxvY2tfYmgoJnByaXYtPnR4X2xvY2spOworCisJcHJpdi0+Zndfc3RhdGUgPSBGV19TVEFURV9PRkY7CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHA1NHNwaV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCBwNTRzX3ByaXYgKnByaXYgPSBOVUxMOworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3OworCWludCByZXQgPSAtRUlOVkFMOworCisJaHcgPSBwNTRfaW5pdF9jb21tb24oc2l6ZW9mKCpwcml2KSk7CisJaWYgKCFodykgeworCQlkZXZfZXJyKCZwcml2LT5zcGktPmRldiwgImNvdWxkIG5vdCBhbGxvYyBpZWVlODAyMTFfaHciKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcHJpdiA9IGh3LT5wcml2OworCXByaXYtPmh3ID0gaHc7CisJZGV2X3NldF9kcnZkYXRhKCZzcGktPmRldiwgcHJpdik7CisJcHJpdi0+c3BpID0gc3BpOworCisJc3BpLT5iaXRzX3Blcl93b3JkID0gMTY7CisJc3BpLT5tYXhfc3BlZWRfaHogPSAyNDAwMDAwMDsKKworCXJldCA9IHNwaV9zZXR1cChzcGkpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJnByaXYtPnNwaS0+ZGV2LCAic3BpX3NldHVwIGZhaWxlZCIpOworCQlnb3RvIGVycl9mcmVlX2NvbW1vbjsKKwl9CisKKwlyZXQgPSBncGlvX3JlcXVlc3QocDU0c3BpX2dwaW9fcG93ZXIsICJwNTRzcGkgcG93ZXIiKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZwcml2LT5zcGktPmRldiwgInBvd2VyIEdQSU8gcmVxdWVzdCBmYWlsZWQ6ICVkIiwgcmV0KTsKKwkJZ290byBlcnJfZnJlZV9jb21tb247CisJfQorCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KHA1NHNwaV9ncGlvX2lycSwgInA1NHNwaSBpcnEiKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZwcml2LT5zcGktPmRldiwgImlycSBHUElPIHJlcXVlc3QgZmFpbGVkOiAlZCIsIHJldCk7CisJCWdvdG8gZXJyX2ZyZWVfY29tbW9uOworCX0KKworCWdwaW9fZGlyZWN0aW9uX291dHB1dChwNTRzcGlfZ3Bpb19wb3dlciwgMCk7CisJZ3Bpb19kaXJlY3Rpb25faW5wdXQocDU0c3BpX2dwaW9faXJxKTsKKworCXJldCA9IHJlcXVlc3RfaXJxKGdwaW9fdG9faXJxKHA1NHNwaV9ncGlvX2lycSksCisJCQkgIHA1NHNwaV9pbnRlcnJ1cHQsIElSUUZfRElTQUJMRUQsICJwNTRzcGkiLAorCQkJICBwcml2LT5zcGkpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJnByaXYtPnNwaS0+ZGV2LCAicmVxdWVzdF9pcnEoKSBmYWlsZWQiKTsKKwkJZ290byBlcnJfZnJlZV9jb21tb247CisJfQorCisJc2V0X2lycV90eXBlKGdwaW9fdG9faXJxKHA1NHNwaV9ncGlvX2lycSksCisJCSAgICAgSVJRX1RZUEVfRURHRV9SSVNJTkcpOworCisJZGlzYWJsZV9pcnEoZ3Bpb190b19pcnEocDU0c3BpX2dwaW9faXJxKSk7CisKKwlJTklUX1dPUksoJnByaXYtPndvcmssIHA1NHNwaV93b3JrKTsKKwlpbml0X2NvbXBsZXRpb24oJnByaXYtPmZ3X2NvbXApOworCUlOSVRfTElTVF9IRUFEKCZwcml2LT50eF9wZW5kaW5nKTsKKwltdXRleF9pbml0KCZwcml2LT5tdXRleCk7CisJU0VUX0lFRUU4MDIxMV9ERVYoaHcsICZzcGktPmRldik7CisJcHJpdi0+Y29tbW9uLm9wZW4gPSBwNTRzcGlfb3Bfc3RhcnQ7CisJcHJpdi0+Y29tbW9uLnN0b3AgPSBwNTRzcGlfb3Bfc3RvcDsKKwlwcml2LT5jb21tb24udHggPSBwNTRzcGlfb3BfdHg7CisKKwlyZXQgPSBwNTRzcGlfcmVxdWVzdF9maXJtd2FyZShodyk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyX2ZyZWVfY29tbW9uOworCisJcmV0ID0gcDU0c3BpX3JlcXVlc3RfZWVwcm9tKGh3KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9mcmVlX2NvbW1vbjsKKworCXJldCA9IHA1NF9yZWdpc3Rlcl9jb21tb24oaHcsICZwcml2LT5zcGktPmRldik7CisJaWYgKHJldCkKKwkJZ290byBlcnJfZnJlZV9jb21tb247CisKKwlyZXR1cm4gMDsKKworZXJyX2ZyZWVfY29tbW9uOgorCXA1NF9mcmVlX2NvbW1vbihwcml2LT5odyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgcDU0c3BpX3JlbW92ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCBwNTRzX3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoJnNwaS0+ZGV2KTsKKworCWllZWU4MDIxMV91bnJlZ2lzdGVyX2h3KHByaXYtPmh3KTsKKworCWZyZWVfaXJxKGdwaW9fdG9faXJxKHA1NHNwaV9ncGlvX2lycSksIHNwaSk7CisKKwlncGlvX2ZyZWUocDU0c3BpX2dwaW9fcG93ZXIpOworCWdwaW9fZnJlZShwNTRzcGlfZ3Bpb19pcnEpOworCXJlbGVhc2VfZmlybXdhcmUocHJpdi0+ZmlybXdhcmUpOworCisJbXV0ZXhfZGVzdHJveSgmcHJpdi0+bXV0ZXgpOworCisJcDU0X2ZyZWVfY29tbW9uKHByaXYtPmh3KTsKKwlpZWVlODAyMTFfZnJlZV9odyhwcml2LT5odyk7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgc3RydWN0IHNwaV9kcml2ZXIgcDU0c3BpX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkvKiB1c2UgY3gzMTEweCBuYW1lIGJlY2F1c2UgYm9hcmQtbjgwMC5jIHVzZXMgdGhhdCBmb3IgdGhlCisJCSAqIFNQSSBwb3J0ICovCisJCS5uYW1lCQk9ICJjeDMxMTB4IiwKKwkJLmJ1cwkJPSAmc3BpX2J1c190eXBlLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJfSwKKworCS5wcm9iZQkJPSBwNTRzcGlfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChwNTRzcGlfcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHA1NHNwaV9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IHNwaV9yZWdpc3Rlcl9kcml2ZXIoJnA1NHNwaV9kcml2ZXIpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIHJlZ2lzdGVyIFNQSSBkcml2ZXI6ICVkIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHA1NHNwaV9leGl0KHZvaWQpCit7CisJc3BpX3VucmVnaXN0ZXJfZHJpdmVyKCZwNTRzcGlfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQocDU0c3BpX2luaXQpOworbW9kdWxlX2V4aXQocDU0c3BpX2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJDaHJpc3RpYW4gTGFtcGFydGVyIDxjaHVua2VleUB3ZWIuZGU+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0c3BpLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0c3BpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ZiZThkOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRzcGkuaApAQCAtMCwwICsxLDEyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBDaHJpc3RpYW4gTGFtcGFydGVyIDxjaHVua2VleUB3ZWIuZGU+CisgKgorICogVGhpcyBkcml2ZXIgaXMgYSBwb3J0IGZyb20gc3RsYzQ1eHg6CisgKglDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSBVU0EKKyAqLworCisjaWZuZGVmIFA1NFNQSV9ICisjZGVmaW5lIFA1NFNQSV9ICisKKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KKworI2luY2x1ZGUgInA1NC5oIgorCisvKiBCaXQgMTUgaXMgcmVhZC93cml0ZSBiaXQ7IE9OID0gUkVBRCwgT0ZGID0gV1JJVEUgKi8KKyNkZWZpbmUgU1BJX0FEUlNfUkVBRF9CSVRfMTUJCTB4ODAwMAorCisjZGVmaW5lIFNQSV9BRFJTX0FSTV9JTlRFUlJVUFRTCQkweDAwCisjZGVmaW5lIFNQSV9BRFJTX0FSTV9JTlRfRU4JCTB4MDQKKworI2RlZmluZSBTUElfQURSU19IT1NUX0lOVEVSUlVQVFMJMHgwOAorI2RlZmluZSBTUElfQURSU19IT1NUX0lOVF9FTgkJMHgwYworI2RlZmluZSBTUElfQURSU19IT1NUX0lOVF9BQ0sJCTB4MTAKKworI2RlZmluZSBTUElfQURSU19HRU5fUFVSUF8xCQkweDE0CisjZGVmaW5lIFNQSV9BRFJTX0dFTl9QVVJQXzIJCTB4MTgKKworI2RlZmluZSBTUElfQURSU19ERVZfQ1RSTF9TVEFUCQkweDI2ICAgIC8qIGhpZ2ggd29yZCAqLworCisjZGVmaW5lIFNQSV9BRFJTX0RNQV9EQVRBCQkweDI4CisKKyNkZWZpbmUgU1BJX0FEUlNfRE1BX1dSSVRFX0NUUkwJCTB4MmMKKyNkZWZpbmUgU1BJX0FEUlNfRE1BX1dSSVRFX0xFTgkJMHgyZQorI2RlZmluZSBTUElfQURSU19ETUFfV1JJVEVfQkFTRQkJMHgzMAorCisjZGVmaW5lIFNQSV9BRFJTX0RNQV9SRUFEX0NUUkwJCTB4MzQKKyNkZWZpbmUgU1BJX0FEUlNfRE1BX1JFQURfTEVOCQkweDM2CisjZGVmaW5lIFNQSV9BRFJTX0RNQV9SRUFEX0JBU0UJCTB4MzgKKworI2RlZmluZSBTUElfQ1RSTF9TVEFUX0hPU1RfT1ZFUlJJREUJMHg4MDAwCisjZGVmaW5lIFNQSV9DVFJMX1NUQVRfU1RBUlRfSEFMVEVECTB4NDAwMAorI2RlZmluZSBTUElfQ1RSTF9TVEFUX1JBTV9CT09UCQkweDIwMDAKKyNkZWZpbmUgU1BJX0NUUkxfU1RBVF9IT1NUX1JFU0VUCTB4MTAwMAorI2RlZmluZSBTUElfQ1RSTF9TVEFUX0hPU1RfQ1BVX0VOCTB4MDgwMAorCisjZGVmaW5lIFNQSV9ETUFfV1JJVEVfQ1RSTF9FTkFCTEUJMHgwMDAxCisjZGVmaW5lIFNQSV9ETUFfUkVBRF9DVFJMX0VOQUJMRQkweDAwMDEKKyNkZWZpbmUgSE9TVF9BTExPV0VECQkJKDEgPDwgNykKKworI2RlZmluZSBTUElfVElNRU9VVAkJCTEwMCAgICAgICAgIC8qIG1zZWMgKi8KKworI2RlZmluZSBTUElfTUFYX1RYX1BBQ0tFVFMJCTMyCisKKyNkZWZpbmUgU1BJX01BWF9QQUNLRVRfU0laRQkJMzI3NjcKKworI2RlZmluZSBTUElfVEFSR0VUX0lOVF9XQUtFVVAJCTB4MDAwMDAwMDEKKyNkZWZpbmUgU1BJX1RBUkdFVF9JTlRfU0xFRVAJCTB4MDAwMDAwMDIKKyNkZWZpbmUgU1BJX1RBUkdFVF9JTlRfUkRET05FCQkweDAwMDAwMDA0CisKKyNkZWZpbmUgU1BJX1RBUkdFVF9JTlRfQ1RTCQkweDAwMDA0MDAwCisjZGVmaW5lIFNQSV9UQVJHRVRfSU5UX0RSCQkweDAwMDA4MDAwCisKKyNkZWZpbmUgU1BJX0hPU1RfSU5UX1JFQURZCQkweDAwMDAwMDAxCisjZGVmaW5lIFNQSV9IT1NUX0lOVF9XUl9SRUFEWQkJMHgwMDAwMDAwMgorI2RlZmluZSBTUElfSE9TVF9JTlRfU1dfVVBEQVRFCQkweDAwMDAwMDA0CisjZGVmaW5lIFNQSV9IT1NUX0lOVF9VUERBVEUJCTB4MTAwMDAwMDAKKworLyogY2xlYXIgdG8gc2VuZCAqLworI2RlZmluZSBTUElfSE9TVF9JTlRfQ1IJCQkweDAwMDA0MDAwCisKKy8qIGRhdGEgcmVhZHkgKi8KKyNkZWZpbmUgU1BJX0hPU1RfSU5UX0RSCQkJMHgwMDAwODAwMAorCisjZGVmaW5lIFNQSV9IT1NUX0lOVFNfREVGQVVMVCAJCQkJCQkgICAgXAorCShTUElfSE9TVF9JTlRfUkVBRFkgfCBTUElfSE9TVF9JTlRfVVBEQVRFIHwgU1BJX0hPU1RfSU5UX1NXX1VQREFURSkKKworI2RlZmluZSBUQVJHRVRfQk9PVF9TTEVFUCA1MAorCitzdHJ1Y3QgcDU0c19kbWFfcmVncyB7CisJX19sZTE2IGNtZDsKKwlfX2xlMTYgbGVuOworCV9fbGUzMiBhZGRyOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBwNTRzX3R4X2luZm8geworCXN0cnVjdCBsaXN0X2hlYWQgdHhfbGlzdDsKK307CisKK3N0cnVjdCBwNTRzX3ByaXYgeworCS8qIHA1NF9jb21tb24gaGFzIHRvIGJlIHRoZSBmaXJzdCBlbnRyeSAqLworCXN0cnVjdCBwNTRfY29tbW9uIGNvbW1vbjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKKwlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpOworCisJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CisKKwlzdHJ1Y3QgbXV0ZXggbXV0ZXg7CisJc3RydWN0IGNvbXBsZXRpb24gZndfY29tcDsKKworCXNwaW5sb2NrX3QgdHhfbG9jazsKKworCS8qIHByb3RlY3RlZCBieSB0eF9sb2NrICovCisJc3RydWN0IGxpc3RfaGVhZCB0eF9wZW5kaW5nOworCisJZW51bSBmd19zdGF0ZSBmd19zdGF0ZTsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZpcm13YXJlOworfTsKKworI2VuZGlmIC8qIFA1NFNQSV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0c3BpX2VlcHJvbS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHNwaV9lZXByb20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWExMDUwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHNwaV9lZXByb20uaApAQCAtMCwwICsxLDY3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMyBDb25leGFudCBBbWVyaWNhcyBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgTm9raWEgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAyMDA4IEpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+CisgKiBDb3B5cmlnaHQgMjAwOCBDaHJpc3RpYW4gTGFtcGFydGVyIDxjaHVua2VleUB3ZWIuZGU+CisgKgorICogYmFzZWQgb246CisgKiAgLSBjeDMxMTB4J3MgcGRhLmggZnJvbSBOb2tpYQorICogIC0gY3gzMTEwLXRyYW5zZmVyLmxvZyBieSBKb2hhbm5lcyBCZXJnCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEgVVNBCisgKi8KKworI2lmbmRlZiBQNTRTUElfRUVQUk9NX0gKKyNkZWZpbmUgUDU0U1BJX0VFUFJPTV9ICisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHA1NHNwaV9lZXByb21bXSA9IHsKKworLyogc3RydWN0IGVlcHJvbV9wZGFfd3JhcCAqLworMHg0NywgMHg0ZCwgMHg1NSwgMHhhYSwJLyogbWFnaWMgKi8KKzB4MDAsIDB4MDAsCQkvKiBwYWQgKi8KKzB4MDAsIDB4MDAsCQkvKiBlZXByb21fcGRhX2RhdGFfd3JhcCBsZW5ndGggKi8KKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCS8qIGFybSBvcGNvZGUgKi8KKworLyogYm9ndXMgTUFDIGFkZHJlc3MgKi8KKzB4MDQsIDB4MDAsIDB4MDEsIDB4MDEsCQkvKiBQRFJfTUFDX0FERFJFU1MgKi8KKwkweDAwLCAweDAyLCAweGVlLCAweGMwLCAweGZmLCAweGVlLAorCisvKiBzdHJ1Y3QgYm9vdHJlY19leHBfaWYgKi8KKzB4MDYsIDB4MDAsIDB4MDEsIDB4MTAsCQkvKiBQRFJfSU5URVJGQUNFX0xJU1QgKi8KKwkweDAwLCAweDAwLAkJCS8qIHJvbGUgKi8KKwkweDBmLCAweDAwLAkJCS8qIGlmX2lkICovCisJMHg4NSwgMHgwMCwJCQkvKiB2YXJpYW50ID0gTG9uZ2JvdyBSRiwgMkdIeiAqLworCTB4MDEsIDB4MDAsCQkJLyogYnRtX2NvbXBhdCAqLworCTB4MWYsIDB4MDAsCQkJLyogdG9wX2NvbXBhdCAqLworCisweDAzLCAweDAwLCAweDAyLCAweDEwLAkJLyogUERSX0hBUkRXQVJFX1BMQVRGT1JNX0NPTVBPTkVOVF9JRCAqLworCTB4MDMsIDB4MjAsIDB4MDAsIDB4NDMsCisKKy8qIHN0cnVjdCBwZGFfY291bnRyeVs2XSAqLworMHgwZCwgMHgwMCwgMHgwNywgMHgxMCwJCS8qIFBEUl9DT1VOVFJZX0xJU1QgKi8KKwkweDEwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDMxLCAweDAwLCAweDAwLCAweDAwLAorCTB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwKKworLyogc3RydWN0IHBkYV9jb3VudHJ5ICovCisweDAzLCAweDAwLCAweDA4LCAweDEwLAkJLyogUERSX0RFRkFVTFRfQ09VTlRSWSAqLworCTB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsCQkvKiBFVFNJICovCisKKzB4MDMsIDB4MDAsIDB4MDAsIDB4MTEsCQkvKiBQRFJfQU5URU5OQV9HQUlOICovCisJMHgwOCwgMHgwOCwgMHgwOCwgMHgwOCwKKworMHgwOSwgMHgwMCwgMHhhZCwgMHhkZSwJCS8qIFBEUl9SU1NJX0xJTkVBUl9BUFBST1hJTUFUSU9OX0NVU1RPTSAqLworCTB4MGEsIDB4MDEsIDB4NzIsIDB4ZmUsIDB4MWEsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKworLyogc3RydWN0IHBkYV9jdXN0b21fd3JhcHBlciAqLworMHgxMCwgMHgwNiwgMHg1ZCwgMHhiMCwJCS8qIFBEUl9QUklTTV9QQV9DQUxfQ1VSVkVfREFUQV9DVVNUT00gKi8KKwkweDBkLCAweDAwLCAweGVlLCAweDAwLAkJLyogMTMgZW50cmllcywgMjM4IGJ5dGVzIHBlciBlbnRyeSAqLworCTB4MDAsIDB4MDAsIDB4MTYsIDB4MGMsCQkvKiBubyBvZmZzZXQsIDMwOTQgdG90YWwgbGVuICovCisJCS8qIDI0MTIgTUh6ICovCisJCTB4NmMsIDB4MDksCisJCQkweDEwLCAweDAxLCAweDlhLCAweDg0LAorCQkJCTB4YWEsIDB4OGEsIDB4YWEsIDB4OGEsIDB4YWEsIDB4OGEsIDB4YWEsIDB4OGEsCisJCQkJMHgzYywgMHhiNiwgMHgzYywgMHhiNiwgMHgzYywgMHhiNiwgMHgzYywgMHhiNiwKKwkJCQkweDNjLCAweGI2LCAweDNjLCAweGI2LCAweDNjLCAweGI2LCAweDNjLCAweGI2LAorCQkJMHhmMCwgMHgwMCwgMHg5NCwgMHg2YywKKwkJCQkweDk5LCAweDgyLCAweDk5LCAweDgyLCAweDk5LCAweDgyLCAweDk5LCAweDgyLAorCQkJCTB4MmIsIDB4YWUsIDB4MmIsIDB4YWUsIDB4MmIsIDB4YWUsIDB4MmIsIDB4YWUsCisJCQkJMHgyYiwgMHhhZSwgMHgyYiwgMHhhZSwgMHgyYiwgMHhhZSwgMHgyYiwgMHhhZSwKKwkJCTB4ZDAsIDB4MDAsIDB4YWEsIDB4NWEsCisJCQkJMHg4OCwgMHg3YSwgMHg4OCwgMHg3YSwgMHg4OCwgMHg3YSwgMHg4OCwgMHg3YSwKKwkJCQkweDFhLCAweGE2LCAweDFhLCAweGE2LCAweDFhLCAweGE2LCAweDFhLCAweGE2LAorCQkJCTB4MWEsIDB4YTYsIDB4MWEsIDB4YTYsIDB4MWEsIDB4YTYsIDB4MWEsIDB4YTYsCisJCQkweGEwLCAweDAwLCAweGYzLCAweDQ3LAorCQkJCTB4NmUsIDB4NmUsIDB4NmUsIDB4NmUsIDB4NmUsIDB4NmUsIDB4NmUsIDB4NmUsCisJCQkJMHgwMCwgMHg5YSwgMHgwMCwgMHg5YSwgMHgwMCwgMHg5YSwgMHgwMCwgMHg5YSwKKwkJCQkweDAwLCAweDlhLCAweDAwLCAweDlhLCAweDAwLCAweDlhLCAweDAwLCAweDlhLAorCQkJMHg1MCwgMHgwMCwgMHg1OSwgMHgzNiwKKwkJCQkweDQzLCAweDVhLCAweDQzLCAweDVhLCAweDQzLCAweDVhLCAweDQzLCAweDVhLAorCQkJCTB4ZDUsIDB4ODUsIDB4ZDUsIDB4ODUsIDB4ZDUsIDB4ODUsIDB4ZDUsIDB4ODUsCisJCQkJMHhkNSwgMHg4NSwgMHhkNSwgMHg4NSwgMHhkNSwgMHg4NSwgMHhkNSwgMHg4NSwKKwkJCTB4MDAsIDB4MDAsIDB4ZTQsIDB4MmQsCisJCQkJMHgxOCwgMHg0NiwgMHgxOCwgMHg0NiwgMHgxOCwgMHg0NiwgMHgxOCwgMHg0NiwKKwkJCQkweGFhLCAweDcxLCAweGFhLCAweDcxLCAweGFhLCAweDcxLCAweGFhLCAweDcxLAorCQkJCTB4YWEsIDB4NzEsIDB4YWEsIDB4NzEsIDB4YWEsIDB4NzEsIDB4YWEsIDB4NzEsCisJCQkweDAwLCAweDgwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg4MCwgMHg4MCwgMHgwMCwKKworCQkvKiAyNDE3IE1IeiAqLworCQkweDcxLCAweDA5LAorCQkJMHgxMCwgMHgwMSwgMHhiOSwgMHg4MywKKwkJCQkweDdkLCAweDhhLCAweDdkLCAweDhhLCAweDdkLCAweDhhLCAweDdkLCAweDhhLAorCQkJCTB4MGYsIDB4YjYsIDB4MGYsIDB4YjYsIDB4MGYsIDB4YjYsIDB4MGYsIDB4YjYsCisJCQkJMHgwZiwgMHhiNiwgMHgwZiwgMHhiNiwgMHgwZiwgMHhiNiwgMHgwZiwgMHhiNiwKKwkJCTB4ZjAsIDB4MDAsIDB4MmUsIDB4NmMsCisJCQkJMHg2OCwgMHg4MiwgMHg2OCwgMHg4MiwgMHg2OCwgMHg4MiwgMHg2OCwgMHg4MiwKKwkJCQkweGZhLCAweGFkLCAweGZhLCAweGFkLCAweGZhLCAweGFkLCAweGZhLCAweGFkLAorCQkJCTB4ZmEsIDB4YWQsIDB4ZmEsIDB4YWQsIDB4ZmEsIDB4YWQsIDB4ZmEsIDB4YWQsCisJCQkweGQwLCAweDAwLCAweDhkLCAweDVhLAorCQkJCTB4NTIsIDB4N2EsIDB4NTIsIDB4N2EsIDB4NTIsIDB4N2EsIDB4NTIsIDB4N2EsCisJCQkJMHhlNCwgMHhhNSwgMHhlNCwgMHhhNSwgMHhlNCwgMHhhNSwgMHhlNCwgMHhhNSwKKwkJCQkweGU0LCAweGE1LCAweGU0LCAweGE1LCAweGU0LCAweGE1LCAweGU0LCAweGE1LAorCQkJMHhhMCwgMHgwMCwgMHgwYSwgMHg0OCwKKwkJCQkweDMyLCAweDZlLCAweDMyLCAweDZlLCAweDMyLCAweDZlLCAweDMyLCAweDZlLAorCQkJCTB4YzQsIDB4OTksIDB4YzQsIDB4OTksIDB4YzQsIDB4OTksIDB4YzQsIDB4OTksCisJCQkJMHhjNCwgMHg5OSwgMHhjNCwgMHg5OSwgMHhjNCwgMHg5OSwgMHhjNCwgMHg5OSwKKwkJCTB4NTAsIDB4MDAsIDB4N2MsIDB4MzYsCisJCQkJMHhmYywgMHg1OSwgMHhmYywgMHg1OSwgMHhmYywgMHg1OSwgMHhmYywgMHg1OSwKKwkJCQkweDhlLCAweDg1LCAweDhlLCAweDg1LCAweDhlLCAweDg1LCAweDhlLCAweDg1LAorCQkJCTB4OGUsIDB4ODUsIDB4OGUsIDB4ODUsIDB4OGUsIDB4ODUsIDB4OGUsIDB4ODUsCisJCQkweDAwLCAweDAwLCAweGY1LCAweDJkLAorCQkJCTB4YzYsIDB4NDUsIDB4YzYsIDB4NDUsIDB4YzYsIDB4NDUsIDB4YzYsIDB4NDUsCisJCQkJMHg1OCwgMHg3MSwgMHg1OCwgMHg3MSwgMHg1OCwgMHg3MSwgMHg1OCwgMHg3MSwKKwkJCQkweDU4LCAweDcxLCAweDU4LCAweDcxLCAweDU4LCAweDcxLCAweDU4LCAweDcxLAorCQkJMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4ODAsIDB4ODAsIDB4MDAsCisKKwkJLyogMjQyMiBNSHogKi8KKwkJMHg3NiwgMHgwOSwKKwkJCTB4MTAsIDB4MDEsIDB4YjksIDB4ODMsCisJCQkJMHg3ZCwgMHg4YSwgMHg3ZCwgMHg4YSwgMHg3ZCwgMHg4YSwgMHg3ZCwgMHg4YSwKKwkJCQkweDBmLCAweGI2LCAweDBmLCAweGI2LCAweDBmLCAweGI2LCAweDBmLCAweGI2LAorCQkJCTB4MGYsIDB4YjYsIDB4MGYsIDB4YjYsIDB4MGYsIDB4YjYsIDB4MGYsIDB4YjYsCisJCQkweGYwLCAweDAwLCAweDJlLCAweDZjLAorCQkJCTB4NjgsIDB4ODIsIDB4NjgsIDB4ODIsIDB4NjgsIDB4ODIsIDB4NjgsIDB4ODIsCisJCQkJMHhmYSwgMHhhZCwgMHhmYSwgMHhhZCwgMHhmYSwgMHhhZCwgMHhmYSwgMHhhZCwKKwkJCQkweGZhLCAweGFkLCAweGZhLCAweGFkLCAweGZhLCAweGFkLCAweGZhLCAweGFkLAorCQkJMHhkMCwgMHgwMCwgMHg4ZCwgMHg1YSwKKwkJCQkweDUyLCAweDdhLCAweDUyLCAweDdhLCAweDUyLCAweDdhLCAweDUyLCAweDdhLAorCQkJCTB4ZTQsIDB4YTUsIDB4ZTQsIDB4YTUsIDB4ZTQsIDB4YTUsIDB4ZTQsIDB4YTUsCisJCQkJMHhlNCwgMHhhNSwgMHhlNCwgMHhhNSwgMHhlNCwgMHhhNSwgMHhlNCwgMHhhNSwKKwkJCTB4YTAsIDB4MDAsIDB4MGEsIDB4NDgsCisJCQkJMHgzMiwgMHg2ZSwgMHgzMiwgMHg2ZSwgMHgzMiwgMHg2ZSwgMHgzMiwgMHg2ZSwKKwkJCQkweGM0LCAweDk5LCAweGM0LCAweDk5LCAweGM0LCAweDk5LCAweGM0LCAweDk5LAorCQkJCTB4YzQsIDB4OTksIDB4YzQsIDB4OTksIDB4YzQsIDB4OTksIDB4YzQsIDB4OTksCisJCQkweDUwLCAweDAwLCAweDdjLCAweDM2LAorCQkJCTB4ZmMsIDB4NTksIDB4ZmMsIDB4NTksIDB4ZmMsIDB4NTksIDB4ZmMsIDB4NTksCisJCQkJMHg4ZSwgMHg4NSwgMHg4ZSwgMHg4NSwgMHg4ZSwgMHg4NSwgMHg4ZSwgMHg4NSwKKwkJCQkweDhlLCAweDg1LCAweDhlLCAweDg1LCAweDhlLCAweDg1LCAweDhlLCAweDg1LAorCQkJMHgwMCwgMHgwMCwgMHhmNSwgMHgyZCwKKwkJCQkweGM2LCAweDQ1LCAweGM2LCAweDQ1LCAweGM2LCAweDQ1LCAweGM2LCAweDQ1LAorCQkJCTB4NTgsIDB4NzEsIDB4NTgsIDB4NzEsIDB4NTgsIDB4NzEsIDB4NTgsIDB4NzEsCisJCQkJMHg1OCwgMHg3MSwgMHg1OCwgMHg3MSwgMHg1OCwgMHg3MSwgMHg1OCwgMHg3MSwKKwkJCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkweDAwLCAweDgwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDgwLCAweDgwLCAweDAwLAorCisJCS8qIDI0MjcgTUh6ICovCisJCTB4N2IsIDB4MDksCisJCQkweDEwLCAweDAxLCAweDQ4LCAweDgzLAorCQkJCTB4NjcsIDB4OGEsIDB4NjcsIDB4OGEsIDB4NjcsIDB4OGEsIDB4NjcsIDB4OGEsCisJCQkJMHhmOSwgMHhiNSwgMHhmOSwgMHhiNSwgMHhmOSwgMHhiNSwgMHhmOSwgMHhiNSwKKwkJCQkweGY5LCAweGI1LCAweGY5LCAweGI1LCAweGY5LCAweGI1LCAweGY5LCAweGI1LAorCQkJMHhmMCwgMHgwMCwgMHhmYiwgMHg2YiwKKwkJCQkweDUwLCAweDgyLCAweDUwLCAweDgyLCAweDUwLCAweDgyLCAweDUwLCAweDgyLAorCQkJCTB4ZTIsIDB4YWQsIDB4ZTIsIDB4YWQsIDB4ZTIsIDB4YWQsIDB4ZTIsIDB4YWQsCisJCQkJMHhlMiwgMHhhZCwgMHhlMiwgMHhhZCwgMHhlMiwgMHhhZCwgMHhlMiwgMHhhZCwKKwkJCTB4ZDAsIDB4MDAsIDB4N2UsIDB4NWEsCisJCQkJMHgzOCwgMHg3YSwgMHgzOCwgMHg3YSwgMHgzOCwgMHg3YSwgMHgzOCwgMHg3YSwKKwkJCQkweGNhLCAweGE1LCAweGNhLCAweGE1LCAweGNhLCAweGE1LCAweGNhLCAweGE1LAorCQkJCTB4Y2EsIDB4YTUsIDB4Y2EsIDB4YTUsIDB4Y2EsIDB4YTUsIDB4Y2EsIDB4YTUsCisJCQkweGEwLCAweDAwLCAweDE1LCAweDQ4LAorCQkJCTB4MTQsIDB4NmUsIDB4MTQsIDB4NmUsIDB4MTQsIDB4NmUsIDB4MTQsIDB4NmUsCisJCQkJMHhhNiwgMHg5OSwgMHhhNiwgMHg5OSwgMHhhNiwgMHg5OSwgMHhhNiwgMHg5OSwKKwkJCQkweGE2LCAweDk5LCAweGE2LCAweDk5LCAweGE2LCAweDk5LCAweGE2LCAweDk5LAorCQkJMHg1MCwgMHgwMCwgMHg4ZSwgMHgzNiwKKwkJCQkweGQ5LCAweDU5LCAweGQ5LCAweDU5LCAweGQ5LCAweDU5LCAweGQ5LCAweDU5LAorCQkJCTB4NmIsIDB4ODUsIDB4NmIsIDB4ODUsIDB4NmIsIDB4ODUsIDB4NmIsIDB4ODUsCisJCQkJMHg2YiwgMHg4NSwgMHg2YiwgMHg4NSwgMHg2YiwgMHg4NSwgMHg2YiwgMHg4NSwKKwkJCTB4MDAsIDB4MDAsIDB4ZmUsIDB4MmQsCisJCQkJMHg5ZCwgMHg0NSwgMHg5ZCwgMHg0NSwgMHg5ZCwgMHg0NSwgMHg5ZCwgMHg0NSwKKwkJCQkweDJmLCAweDcxLCAweDJmLCAweDcxLCAweDJmLCAweDcxLCAweDJmLCAweDcxLAorCQkJCTB4MmYsIDB4NzEsIDB4MmYsIDB4NzEsIDB4MmYsIDB4NzEsIDB4MmYsIDB4NzEsCisJCQkweDAwLCAweDgwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg4MCwgMHg4MCwgMHgwMCwKKworCQkvKiAyNDMyIE1IeiAqLworCQkweDgwLCAweDA5LAorCQkJMHgxMCwgMHgwMSwgMHhkNywgMHg4MiwKKwkJCQkweDUxLCAweDhhLCAweDUxLCAweDhhLCAweDUxLCAweDhhLCAweDUxLCAweDhhLAorCQkJCTB4ZTMsIDB4YjUsIDB4ZTMsIDB4YjUsIDB4ZTMsIDB4YjUsIDB4ZTMsIDB4YjUsCisJCQkJMHhlMywgMHhiNSwgMHhlMywgMHhiNSwgMHhlMywgMHhiNSwgMHhlMywgMHhiNSwKKwkJCTB4ZjAsIDB4MDAsIDB4YzgsIDB4NmIsCisJCQkJMHgzNywgMHg4MiwgMHgzNywgMHg4MiwgMHgzNywgMHg4MiwgMHgzNywgMHg4MiwKKwkJCQkweGM5LCAweGFkLCAweGM5LCAweGFkLCAweGM5LCAweGFkLCAweGM5LCAweGFkLAorCQkJCTB4YzksIDB4YWQsIDB4YzksIDB4YWQsIDB4YzksIDB4YWQsIDB4YzksIDB4YWQsCisJCQkweGQwLCAweDAwLCAweDZmLCAweDVhLAorCQkJCTB4MWQsIDB4N2EsIDB4MWQsIDB4N2EsIDB4MWQsIDB4N2EsIDB4MWQsIDB4N2EsCisJCQkJMHhhZiwgMHhhNSwgMHhhZiwgMHhhNSwgMHhhZiwgMHhhNSwgMHhhZiwgMHhhNSwKKwkJCQkweGFmLCAweGE1LCAweGFmLCAweGE1LCAweGFmLCAweGE1LCAweGFmLCAweGE1LAorCQkJMHhhMCwgMHgwMCwgMHgyMCwgMHg0OCwKKwkJCQkweGY2LCAweDZkLCAweGY2LCAweDZkLCAweGY2LCAweDZkLCAweGY2LCAweDZkLAorCQkJCTB4ODgsIDB4OTksIDB4ODgsIDB4OTksIDB4ODgsIDB4OTksIDB4ODgsIDB4OTksCisJCQkJMHg4OCwgMHg5OSwgMHg4OCwgMHg5OSwgMHg4OCwgMHg5OSwgMHg4OCwgMHg5OSwKKwkJCTB4NTAsIDB4MDAsIDB4OWYsIDB4MzYsCisJCQkJMHhiNSwgMHg1OSwgMHhiNSwgMHg1OSwgMHhiNSwgMHg1OSwgMHhiNSwgMHg1OSwKKwkJCQkweDQ3LCAweDg1LCAweDQ3LCAweDg1LCAweDQ3LCAweDg1LCAweDQ3LCAweDg1LAorCQkJCTB4NDcsIDB4ODUsIDB4NDcsIDB4ODUsIDB4NDcsIDB4ODUsIDB4NDcsIDB4ODUsCisJCQkweDAwLCAweDAwLCAweDA2LCAweDJlLAorCQkJCTB4NzQsIDB4NDUsIDB4NzQsIDB4NDUsIDB4NzQsIDB4NDUsIDB4NzQsIDB4NDUsCisJCQkJMHgwNiwgMHg3MSwgMHgwNiwgMHg3MSwgMHgwNiwgMHg3MSwgMHgwNiwgMHg3MSwKKwkJCQkweDA2LCAweDcxLCAweDA2LCAweDcxLCAweDA2LCAweDcxLCAweDA2LCAweDcxLAorCQkJMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4ODAsIDB4ODAsIDB4MDAsCisKKwkJLyogMjQzNyBNSHogKi8KKwkJMHg4NSwgMHgwOSwKKwkJCTB4MTAsIDB4MDEsIDB4NjcsIDB4ODIsCisJCQkJMHgzYSwgMHg4YSwgMHgzYSwgMHg4YSwgMHgzYSwgMHg4YSwgMHgzYSwgMHg4YSwKKwkJCQkweGNjLCAweGI1LCAweGNjLCAweGI1LCAweGNjLCAweGI1LCAweGNjLCAweGI1LAorCQkJCTB4Y2MsIDB4YjUsIDB4Y2MsIDB4YjUsIDB4Y2MsIDB4YjUsIDB4Y2MsIDB4YjUsCisJCQkweGYwLCAweDAwLCAweDk1LCAweDZiLAorCQkJCTB4MWYsIDB4ODIsIDB4MWYsIDB4ODIsIDB4MWYsIDB4ODIsIDB4MWYsIDB4ODIsCisJCQkJMHhiMSwgMHhhZCwgMHhiMSwgMHhhZCwgMHhiMSwgMHhhZCwgMHhiMSwgMHhhZCwKKwkJCQkweGIxLCAweGFkLCAweGIxLCAweGFkLCAweGIxLCAweGFkLCAweGIxLCAweGFkLAorCQkJMHhkMCwgMHgwMCwgMHg2MSwgMHg1YSwKKwkJCQkweDAyLCAweDdhLCAweDAyLCAweDdhLCAweDAyLCAweDdhLCAweDAyLCAweDdhLAorCQkJCTB4OTQsIDB4YTUsIDB4OTQsIDB4YTUsIDB4OTQsIDB4YTUsIDB4OTQsIDB4YTUsCisJCQkJMHg5NCwgMHhhNSwgMHg5NCwgMHhhNSwgMHg5NCwgMHhhNSwgMHg5NCwgMHhhNSwKKwkJCTB4YTAsIDB4MDAsIDB4MmMsIDB4NDgsCisJCQkJMHhkOCwgMHg2ZCwgMHhkOCwgMHg2ZCwgMHhkOCwgMHg2ZCwgMHhkOCwgMHg2ZCwKKwkJCQkweDZhLCAweDk5LCAweDZhLCAweDk5LCAweDZhLCAweDk5LCAweDZhLCAweDk5LAorCQkJCTB4NmEsIDB4OTksIDB4NmEsIDB4OTksIDB4NmEsIDB4OTksIDB4NmEsIDB4OTksCisJCQkweDUwLCAweDAwLCAweGIxLCAweDM2LAorCQkJCTB4OTIsIDB4NTksIDB4OTIsIDB4NTksIDB4OTIsIDB4NTksIDB4OTIsIDB4NTksCisJCQkJMHgyNCwgMHg4NSwgMHgyNCwgMHg4NSwgMHgyNCwgMHg4NSwgMHgyNCwgMHg4NSwKKwkJCQkweDI0LCAweDg1LCAweDI0LCAweDg1LCAweDI0LCAweDg1LCAweDI0LCAweDg1LAorCQkJMHgwMCwgMHgwMCwgMHgwZiwgMHgyZSwKKwkJCQkweDRiLCAweDQ1LCAweDRiLCAweDQ1LCAweDRiLCAweDQ1LCAweDRiLCAweDQ1LAorCQkJCTB4ZGQsIDB4NzAsIDB4ZGQsIDB4NzAsIDB4ZGQsIDB4NzAsIDB4ZGQsIDB4NzAsCisJCQkJMHhkZCwgMHg3MCwgMHhkZCwgMHg3MCwgMHhkZCwgMHg3MCwgMHhkZCwgMHg3MCwKKwkJCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkweDAwLCAweDgwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDgwLCAweDgwLCAweDAwLAorCisJCS8qIDI0NDIgTUh6ICovCisJCTB4OGEsIDB4MDksCisJCQkweDEwLCAweDAxLCAweGY2LCAweDgxLAorCQkJCTB4MjQsIDB4OGEsIDB4MjQsIDB4OGEsIDB4MjQsIDB4OGEsIDB4MjQsIDB4OGEsCisJCQkJMHhiNiwgMHhiNSwgMHhiNiwgMHhiNSwgMHhiNiwgMHhiNSwgMHhiNiwgMHhiNSwKKwkJCQkweGI2LCAweGI1LCAweGI2LCAweGI1LCAweGI2LCAweGI1LCAweGI2LCAweGI1LAorCQkJMHhmMCwgMHgwMCwgMHg2MiwgMHg2YiwKKwkJCQkweDA2LCAweDgyLCAweDA2LCAweDgyLCAweDA2LCAweDgyLCAweDA2LCAweDgyLAorCQkJCTB4OTgsIDB4YWQsIDB4OTgsIDB4YWQsIDB4OTgsIDB4YWQsIDB4OTgsIDB4YWQsCisJCQkJMHg5OCwgMHhhZCwgMHg5OCwgMHhhZCwgMHg5OCwgMHhhZCwgMHg5OCwgMHhhZCwKKwkJCTB4ZDAsIDB4MDAsIDB4NTIsIDB4NWEsCisJCQkJMHhlNywgMHg3OSwgMHhlNywgMHg3OSwgMHhlNywgMHg3OSwgMHhlNywgMHg3OSwKKwkJCQkweDc5LCAweGE1LCAweDc5LCAweGE1LCAweDc5LCAweGE1LCAweDc5LCAweGE1LAorCQkJCTB4NzksIDB4YTUsIDB4NzksIDB4YTUsIDB4NzksIDB4YTUsIDB4NzksIDB4YTUsCisJCQkweGEwLCAweDAwLCAweDM3LCAweDQ4LAorCQkJCTB4YmEsIDB4NmQsIDB4YmEsIDB4NmQsIDB4YmEsIDB4NmQsIDB4YmEsIDB4NmQsCisJCQkJMHg0YywgMHg5OSwgMHg0YywgMHg5OSwgMHg0YywgMHg5OSwgMHg0YywgMHg5OSwKKwkJCQkweDRjLCAweDk5LCAweDRjLCAweDk5LCAweDRjLCAweDk5LCAweDRjLCAweDk5LAorCQkJMHg1MCwgMHgwMCwgMHhjMiwgMHgzNiwKKwkJCQkweDZlLCAweDU5LCAweDZlLCAweDU5LCAweDZlLCAweDU5LCAweDZlLCAweDU5LAorCQkJCTB4MDAsIDB4ODUsIDB4MDAsIDB4ODUsIDB4MDAsIDB4ODUsIDB4MDAsIDB4ODUsCisJCQkJMHgwMCwgMHg4NSwgMHgwMCwgMHg4NSwgMHgwMCwgMHg4NSwgMHgwMCwgMHg4NSwKKwkJCTB4MDAsIDB4MDAsIDB4MTcsIDB4MmUsCisJCQkJMHgyMiwgMHg0NSwgMHgyMiwgMHg0NSwgMHgyMiwgMHg0NSwgMHgyMiwgMHg0NSwKKwkJCQkweGI0LCAweDcwLCAweGI0LCAweDcwLCAweGI0LCAweDcwLCAweGI0LCAweDcwLAorCQkJCTB4YjQsIDB4NzAsIDB4YjQsIDB4NzAsIDB4YjQsIDB4NzAsIDB4YjQsIDB4NzAsCisJCQkweDAwLCAweDgwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg4MCwgMHg4MCwgMHgwMCwKKworCQkvKiAyNDQ3IE1IeiAqLworCQkweDhmLCAweDA5LAorCQkJMHgxMCwgMHgwMSwgMHg3NSwgMHg4MywKKwkJCQkweDYxLCAweDhhLCAweDYxLCAweDhhLCAweDYxLCAweDhhLCAweDYxLCAweDhhLAorCQkJCTB4ZjMsIDB4YjUsIDB4ZjMsIDB4YjUsIDB4ZjMsIDB4YjUsIDB4ZjMsIDB4YjUsCisJCQkJMHhmMywgMHhiNSwgMHhmMywgMHhiNSwgMHhmMywgMHhiNSwgMHhmMywgMHhiNSwKKwkJCTB4ZjAsIDB4MDAsIDB4NGIsIDB4NmMsCisJCQkJMHgzZiwgMHg4MiwgMHgzZiwgMHg4MiwgMHgzZiwgMHg4MiwgMHgzZiwgMHg4MiwKKwkJCQkweGQxLCAweGFkLCAweGQxLCAweGFkLCAweGQxLCAweGFkLCAweGQxLCAweGFkLAorCQkJCTB4ZDEsIDB4YWQsIDB4ZDEsIDB4YWQsIDB4ZDEsIDB4YWQsIDB4ZDEsIDB4YWQsCisJCQkweGQwLCAweDAwLCAweGRhLCAweDVhLAorCQkJCTB4MWMsIDB4N2EsIDB4MWMsIDB4N2EsIDB4MWMsIDB4N2EsIDB4MWMsIDB4N2EsCisJCQkJMHhhZSwgMHhhNSwgMHhhZSwgMHhhNSwgMHhhZSwgMHhhNSwgMHhhZSwgMHhhNSwKKwkJCQkweGFlLCAweGE1LCAweGFlLCAweGE1LCAweGFlLCAweGE1LCAweGFlLCAweGE1LAorCQkJMHhhMCwgMHgwMCwgMHg2ZCwgMHg0OCwKKwkJCQkweGU5LCAweDZkLCAweGU5LCAweDZkLCAweGU5LCAweDZkLCAweGU5LCAweDZkLAorCQkJCTB4N2IsIDB4OTksIDB4N2IsIDB4OTksIDB4N2IsIDB4OTksIDB4N2IsIDB4OTksCisJCQkJMHg3YiwgMHg5OSwgMHg3YiwgMHg5OSwgMHg3YiwgMHg5OSwgMHg3YiwgMHg5OSwKKwkJCTB4NTAsIDB4MDAsIDB4YzYsIDB4MzYsCisJCQkJMHg5MiwgMHg1OSwgMHg5MiwgMHg1OSwgMHg5MiwgMHg1OSwgMHg5MiwgMHg1OSwKKwkJCQkweDI0LCAweDg1LCAweDI0LCAweDg1LCAweDI0LCAweDg1LCAweDI0LCAweDg1LAorCQkJCTB4MjQsIDB4ODUsIDB4MjQsIDB4ODUsIDB4MjQsIDB4ODUsIDB4MjQsIDB4ODUsCisJCQkweDAwLCAweDAwLCAweDE1LCAweDJlLAorCQkJCTB4M2MsIDB4NDUsIDB4M2MsIDB4NDUsIDB4M2MsIDB4NDUsIDB4M2MsIDB4NDUsCisJCQkJMHhjZSwgMHg3MCwgMHhjZSwgMHg3MCwgMHhjZSwgMHg3MCwgMHhjZSwgMHg3MCwKKwkJCQkweGNlLCAweDcwLCAweGNlLCAweDcwLCAweGNlLCAweDcwLCAweGNlLCAweDcwLAorCQkJMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4ODAsIDB4ODAsIDB4MDAsCisKKwkJLyogMjQ1MiBNSHogKi8KKwkJMHg5NCwgMHgwOSwKKwkJCTB4MTAsIDB4MDEsIDB4ZjQsIDB4ODQsCisJCQkJMHg5ZSwgMHg4YSwgMHg5ZSwgMHg4YSwgMHg5ZSwgMHg4YSwgMHg5ZSwgMHg4YSwKKwkJCQkweDMwLCAweGI2LCAweDMwLCAweGI2LCAweDMwLCAweGI2LCAweDMwLCAweGI2LAorCQkJCTB4MzAsIDB4YjYsIDB4MzAsIDB4YjYsIDB4MzAsIDB4YjYsIDB4MzAsIDB4YjYsCisJCQkweGYwLCAweDAwLCAweDM0LCAweDZkLAorCQkJCTB4NzcsIDB4ODIsIDB4NzcsIDB4ODIsIDB4NzcsIDB4ODIsIDB4NzcsIDB4ODIsCisJCQkJMHgwOSwgMHhhZSwgMHgwOSwgMHhhZSwgMHgwOSwgMHhhZSwgMHgwOSwgMHhhZSwKKwkJCQkweDA5LCAweGFlLCAweDA5LCAweGFlLCAweDA5LCAweGFlLCAweDA5LCAweGFlLAorCQkJMHhkMCwgMHgwMCwgMHg2MiwgMHg1YiwKKwkJCQkweDUwLCAweDdhLCAweDUwLCAweDdhLCAweDUwLCAweDdhLCAweDUwLCAweDdhLAorCQkJCTB4ZTIsIDB4YTUsIDB4ZTIsIDB4YTUsIDB4ZTIsIDB4YTUsIDB4ZTIsIDB4YTUsCisJCQkJMHhlMiwgMHhhNSwgMHhlMiwgMHhhNSwgMHhlMiwgMHhhNSwgMHhlMiwgMHhhNSwKKwkJCTB4YTAsIDB4MDAsIDB4YTIsIDB4NDgsCisJCQkJMHgxNywgMHg2ZSwgMHgxNywgMHg2ZSwgMHgxNywgMHg2ZSwgMHgxNywgMHg2ZSwKKwkJCQkweGE5LCAweDk5LCAweGE5LCAweDk5LCAweGE5LCAweDk5LCAweGE5LCAweDk5LAorCQkJCTB4YTksIDB4OTksIDB4YTksIDB4OTksIDB4YTksIDB4OTksIDB4YTksIDB4OTksCisJCQkweDUwLCAweDAwLCAweGM5LCAweDM2LAorCQkJCTB4YjcsIDB4NTksIDB4YjcsIDB4NTksIDB4YjcsIDB4NTksIDB4YjcsIDB4NTksCisJCQkJMHg0OSwgMHg4NSwgMHg0OSwgMHg4NSwgMHg0OSwgMHg4NSwgMHg0OSwgMHg4NSwKKwkJCQkweDQ5LCAweDg1LCAweDQ5LCAweDg1LCAweDQ5LCAweDg1LCAweDQ5LCAweDg1LAorCQkJMHgwMCwgMHgwMCwgMHgxMiwgMHgyZSwKKwkJCQkweDU3LCAweDQ1LCAweDU3LCAweDQ1LCAweDU3LCAweDQ1LCAweDU3LCAweDQ1LAorCQkJCTB4ZTksIDB4NzAsIDB4ZTksIDB4NzAsIDB4ZTksIDB4NzAsIDB4ZTksIDB4NzAsCisJCQkJMHhlOSwgMHg3MCwgMHhlOSwgMHg3MCwgMHhlOSwgMHg3MCwgMHhlOSwgMHg3MCwKKwkJCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkweDAwLCAweDgwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDgwLCAweDgwLCAweDAwLAorCisJCS8qIDI0NTIgTUh6ICovCisJCTB4OTksIDB4MDksCisJCQkweDEwLCAweDAxLCAweDc0LCAweDg2LAorCQkJCTB4ZGIsIDB4OGEsIDB4ZGIsIDB4OGEsIDB4ZGIsIDB4OGEsIDB4ZGIsIDB4OGEsCisJCQkJMHg2ZCwgMHhiNiwgMHg2ZCwgMHhiNiwgMHg2ZCwgMHhiNiwgMHg2ZCwgMHhiNiwKKwkJCQkweDZkLCAweGI2LCAweDZkLCAweGI2LCAweDZkLCAweGI2LCAweDZkLCAweGI2LAorCQkJMHhmMCwgMHgwMCwgMHgxZSwgMHg2ZSwKKwkJCQkweGIwLCAweDgyLCAweGIwLCAweDgyLCAweGIwLCAweDgyLCAweGIwLCAweDgyLAorCQkJCTB4NDIsIDB4YWUsIDB4NDIsIDB4YWUsIDB4NDIsIDB4YWUsIDB4NDIsIDB4YWUsCisJCQkJMHg0MiwgMHhhZSwgMHg0MiwgMHhhZSwgMHg0MiwgMHhhZSwgMHg0MiwgMHhhZSwKKwkJCTB4ZDAsIDB4MDAsIDB4ZWIsIDB4NWIsCisJCQkJMHg4NSwgMHg3YSwgMHg4NSwgMHg3YSwgMHg4NSwgMHg3YSwgMHg4NSwgMHg3YSwKKwkJCQkweDE3LCAweGE2LCAweDE3LCAweGE2LCAweDE3LCAweGE2LCAweDE3LCAweGE2LAorCQkJCTB4MTcsIDB4YTYsIDB4MTcsIDB4YTYsIDB4MTcsIDB4YTYsIDB4MTcsIDB4YTYsCisJCQkweGEwLCAweDAwLCAweGQ4LCAweDQ4LAorCQkJCTB4NDYsIDB4NmUsIDB4NDYsIDB4NmUsIDB4NDYsIDB4NmUsIDB4NDYsIDB4NmUsCisJCQkJMHhkOCwgMHg5OSwgMHhkOCwgMHg5OSwgMHhkOCwgMHg5OSwgMHhkOCwgMHg5OSwKKwkJCQkweGQ4LCAweDk5LCAweGQ4LCAweDk5LCAweGQ4LCAweDk5LCAweGQ4LCAweDk5LAorCQkJMHg1MCwgMHgwMCwgMHhjZCwgMHgzNiwKKwkJCQkweGRiLCAweDU5LCAweGRiLCAweDU5LCAweGRiLCAweDU5LCAweGRiLCAweDU5LAorCQkJCTB4NmQsIDB4ODUsIDB4NmQsIDB4ODUsIDB4NmQsIDB4ODUsIDB4NmQsIDB4ODUsCisJCQkJMHg2ZCwgMHg4NSwgMHg2ZCwgMHg4NSwgMHg2ZCwgMHg4NSwgMHg2ZCwgMHg4NSwKKwkJCTB4MDAsIDB4MDAsIDB4MTAsIDB4MmUsCisJCQkJMHg3MSwgMHg0NSwgMHg3MSwgMHg0NSwgMHg3MSwgMHg0NSwgMHg3MSwgMHg0NSwKKwkJCQkweDAzLCAweDcxLCAweDAzLCAweDcxLCAweDAzLCAweDcxLCAweDAzLCAweDcxLAorCQkJCTB4MDMsIDB4NzEsIDB4MDMsIDB4NzEsIDB4MDMsIDB4NzEsIDB4MDMsIDB4NzEsCisJCQkweDAwLCAweDgwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg4MCwgMHg4MCwgMHgwMCwKKworCQkvKiAyNTU3IE1IeiAqLworCQkweDllLCAweDA5LAorCQkJMHgxMCwgMHgwMSwgMHhmMywgMHg4NywKKwkJCQkweDE3LCAweDhiLCAweDE3LCAweDhiLCAweDE3LCAweDhiLCAweDE3LCAweDhiLAorCQkJCTB4YTksIDB4YjYsIDB4YTksIDB4YjYsIDB4YTksIDB4YjYsIDB4YTksIDB4YjYsCisJCQkJMHhhOSwgMHhiNiwgMHhhOSwgMHhiNiwgMHhhOSwgMHhiNiwgMHhhOSwgMHhiNiwKKwkJCTB4ZjAsIDB4MDAsIDB4MDcsIDB4NmYsCisJCQkJMHhlOSwgMHg4MiwgMHhlOSwgMHg4MiwgMHhlOSwgMHg4MiwgMHhlOSwgMHg4MiwKKwkJCQkweDdiLCAweGFlLCAweDdiLCAweGFlLCAweDdiLCAweGFlLCAweDdiLCAweGFlLAorCQkJCTB4N2IsIDB4YWUsIDB4N2IsIDB4YWUsIDB4N2IsIDB4YWUsIDB4N2IsIDB4YWUsCisJCQkweGQwLCAweDAwLCAweDczLCAweDVjLAorCQkJCTB4YmEsIDB4N2EsIDB4YmEsIDB4N2EsIDB4YmEsIDB4N2EsIDB4YmEsIDB4N2EsCisJCQkJMHg0YywgMHhhNiwgMHg0YywgMHhhNiwgMHg0YywgMHhhNiwgMHg0YywgMHhhNiwKKwkJCQkweDRjLCAweGE2LCAweDRjLCAweGE2LCAweDRjLCAweGE2LCAweDRjLCAweGE2LAorCQkJMHhhMCwgMHgwMCwgMHgwZCwgMHg0OSwKKwkJCQkweDc0LCAweDZlLCAweDc0LCAweDZlLCAweDc0LCAweDZlLCAweDc0LCAweDZlLAorCQkJCTB4MDYsIDB4OWEsIDB4MDYsIDB4OWEsIDB4MDYsIDB4OWEsIDB4MDYsIDB4OWEsCisJCQkJMHgwNiwgMHg5YSwgMHgwNiwgMHg5YSwgMHgwNiwgMHg5YSwgMHgwNiwgMHg5YSwKKwkJCTB4NTAsIDB4MDAsIDB4ZDEsIDB4MzYsCisJCQkJMHhmZiwgMHg1OSwgMHhmZiwgMHg1OSwgMHhmZiwgMHg1OSwgMHhmZiwgMHg1OSwKKwkJCQkweDkxLCAweDg1LCAweDkxLCAweDg1LCAweDkxLCAweDg1LCAweDkxLCAweDg1LAorCQkJCTB4OTEsIDB4ODUsIDB4OTEsIDB4ODUsIDB4OTEsIDB4ODUsIDB4OTEsIDB4ODUsCisJCQkweDAwLCAweDAwLCAweDBlLCAweDJlLAorCQkJCTB4OGIsIDB4NDUsIDB4OGIsIDB4NDUsIDB4OGIsIDB4NDUsIDB4OGIsIDB4NDUsCisJCQkJMHgxZCwgMHg3MSwgMHgxZCwgMHg3MSwgMHgxZCwgMHg3MSwgMHgxZCwgMHg3MSwKKwkJCQkweDFkLCAweDcxLCAweDFkLCAweDcxLCAweDFkLCAweDcxLCAweDFkLCAweDcxLAorCQkJMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4ODAsIDB4ODAsIDB4MDAsCisKKwkJLyogMjU2MiBNSHogKi8KKwkJMHhhMywgMHgwOSwKKwkJCTB4MTAsIDB4MDEsIDB4NzIsIDB4ODksCisJCQkJMHg1NCwgMHg4YiwgMHg1NCwgMHg4YiwgMHg1NCwgMHg4YiwgMHg1NCwgMHg4YiwKKwkJCQkweGU2LCAweGI2LCAweGU2LCAweGI2LCAweGU2LCAweGI2LCAweGU2LCAweGI2LAorCQkJCTB4ZTYsIDB4YjYsIDB4ZTYsIDB4YjYsIDB4ZTYsIDB4YjYsIDB4ZTYsIDB4YjYsCisJCQkweGYwLCAweDAwLCAweGYwLCAweDZmLAorCQkJCTB4MjEsIDB4ODMsIDB4MjEsIDB4ODMsIDB4MjEsIDB4ODMsIDB4MjEsIDB4ODMsCisJCQkJMHhiMywgMHhhZSwgMHhiMywgMHhhZSwgMHhiMywgMHhhZSwgMHhiMywgMHhhZSwKKwkJCQkweGIzLCAweGFlLCAweGIzLCAweGFlLCAweGIzLCAweGFlLCAweGIzLCAweGFlLAorCQkJMHhkMCwgMHgwMCwgMHhmYiwgMHg1YywKKwkJCQkweGVlLCAweDdhLCAweGVlLCAweDdhLCAweGVlLCAweDdhLCAweGVlLCAweDdhLAorCQkJCTB4ODAsIDB4YTYsIDB4ODAsIDB4YTYsIDB4ODAsIDB4YTYsIDB4ODAsIDB4YTYsCisJCQkJMHg4MCwgMHhhNiwgMHg4MCwgMHhhNiwgMHg4MCwgMHhhNiwgMHg4MCwgMHhhNiwKKwkJCTB4YTAsIDB4MDAsIDB4NDMsIDB4NDksCisJCQkJMHhhMywgMHg2ZSwgMHhhMywgMHg2ZSwgMHhhMywgMHg2ZSwgMHhhMywgMHg2ZSwKKwkJCQkweDM1LCAweDlhLCAweDM1LCAweDlhLCAweDM1LCAweDlhLCAweDM1LCAweDlhLAorCQkJCTB4MzUsIDB4OWEsIDB4MzUsIDB4OWEsIDB4MzUsIDB4OWEsIDB4MzUsIDB4OWEsCisJCQkweDUwLCAweDAwLCAweGQ0LCAweDM2LAorCQkJCTB4MjQsIDB4NWEsIDB4MjQsIDB4NWEsIDB4MjQsIDB4NWEsIDB4MjQsIDB4NWEsCisJCQkJMHhiNiwgMHg4NSwgMHhiNiwgMHg4NSwgMHhiNiwgMHg4NSwgMHhiNiwgMHg4NSwKKwkJCQkweGI2LCAweDg1LCAweGI2LCAweDg1LCAweGI2LCAweDg1LCAweGI2LCAweDg1LAorCQkJMHgwMCwgMHgwMCwgMHgwYiwgMHgyZSwKKwkJCQkweGE2LCAweDQ1LCAweGE2LCAweDQ1LCAweGE2LCAweDQ1LCAweGE2LCAweDQ1LAorCQkJCTB4MzgsIDB4NzEsIDB4MzgsIDB4NzEsIDB4MzgsIDB4NzEsIDB4MzgsIDB4NzEsCisJCQkJMHgzOCwgMHg3MSwgMHgzOCwgMHg3MSwgMHgzOCwgMHg3MSwgMHgzOCwgMHg3MSwKKwkJCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkweDAwLCAweDgwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDgwLCAweDgwLCAweDAwLAorCisJCS8qIDI1NzIgTUh6ICovCisJCTB4YTgsIDB4MDksCisJCQkweDEwLCAweDAxLCAweGYxLCAweDhhLAorCQkJCTB4OTEsIDB4OGIsIDB4OTEsIDB4OGIsIDB4OTEsIDB4OGIsIDB4OTEsIDB4OGIsCisJCQkJMHgyMywgMHhiNywgMHgyMywgMHhiNywgMHgyMywgMHhiNywgMHgyMywgMHhiNywKKwkJCQkweDIzLCAweGI3LCAweDIzLCAweGI3LCAweDIzLCAweGI3LCAweDIzLCAweGI3LAorCQkJMHhmMCwgMHgwMCwgMHhkOSwgMHg3MCwKKwkJCQkweDVhLCAweDgzLCAweDVhLCAweDgzLCAweDVhLCAweDgzLCAweDVhLCAweDgzLAorCQkJCTB4ZWMsIDB4YWUsIDB4ZWMsIDB4YWUsIDB4ZWMsIDB4YWUsIDB4ZWMsIDB4YWUsCisJCQkJMHhlYywgMHhhZSwgMHhlYywgMHhhZSwgMHhlYywgMHhhZSwgMHhlYywgMHhhZSwKKwkJCTB4ZDAsIDB4MDAsIDB4ODMsIDB4NWQsCisJCQkJMHgyMywgMHg3YiwgMHgyMywgMHg3YiwgMHgyMywgMHg3YiwgMHgyMywgMHg3YiwKKwkJCQkweGI1LCAweGE2LCAweGI1LCAweGE2LCAweGI1LCAweGE2LCAweGI1LCAweGE2LAorCQkJCTB4YjUsIDB4YTYsIDB4YjUsIDB4YTYsIDB4YjUsIDB4YTYsIDB4YjUsIDB4YTYsCisJCQkweGEwLCAweDAwLCAweDc4LCAweDQ5LAorCQkJCTB4ZDEsIDB4NmUsIDB4ZDEsIDB4NmUsIDB4ZDEsIDB4NmUsIDB4ZDEsIDB4NmUsCisJCQkJMHg2MywgMHg5YSwgMHg2MywgMHg5YSwgMHg2MywgMHg5YSwgMHg2MywgMHg5YSwKKwkJCQkweDYzLCAweDlhLCAweDYzLCAweDlhLCAweDYzLCAweDlhLCAweDYzLCAweDlhLAorCQkJMHg1MCwgMHgwMCwgMHhkOCwgMHgzNiwKKwkJCQkweDQ4LCAweDVhLCAweDQ4LCAweDVhLCAweDQ4LCAweDVhLCAweDQ4LCAweDVhLAorCQkJCTB4ZGEsIDB4ODUsIDB4ZGEsIDB4ODUsIDB4ZGEsIDB4ODUsIDB4ZGEsIDB4ODUsCisJCQkJMHhkYSwgMHg4NSwgMHhkYSwgMHg4NSwgMHhkYSwgMHg4NSwgMHhkYSwgMHg4NSwKKwkJCTB4MDAsIDB4MDAsIDB4MDksIDB4MmUsCisJCQkJMHhjMCwgMHg0NSwgMHhjMCwgMHg0NSwgMHhjMCwgMHg0NSwgMHhjMCwgMHg0NSwKKwkJCQkweDUyLCAweDcxLCAweDUyLCAweDcxLCAweDUyLCAweDcxLCAweDUyLCAweDcxLAorCQkJCTB4NTIsIDB4NzEsIDB4NTIsIDB4NzEsIDB4NTIsIDB4NzEsIDB4NTIsIDB4NzEsCisJCQkweDAwLCAweDgwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg4MCwgMHg4MCwgMHgwMCwKKworLyoKKyAqIE5vdCByZWFsbHkgc3VyZSBpZiB0aGlzIGlzIGFjdHVhbGx5IHRoZSBwb3dlcl9saW1pdCBkYXRhYmFzZSwKKyAqIGl0IGxvb2tzIGEgYml0ICJyZWxhdGVkIiB0byBQRFJfUFJJU01fWklGX1RYX0lRX0NBTElCUkFUSU9OCisgKi8KKy8qIHN0cnVjdCBwZGFfY3VzdG9tX3dyYXBwZXIgKi8KKzB4YWUsIDB4MDAsIDB4ZWYsIDB4YmUsICAgICAgLyogUERSX1BSSVNNX1BBX0NBTF9PVVRQVVRfUE9XRVJfTElNSVRTX0NVU1RPTSAqLworCTB4MGQsIDB4MDAsIDB4MWEsIDB4MDAsCQkvKiAxMyBlbnRyaWVzLCAyNiBieXRlcyBwZXIgZW50cnkgKi8KKwkweDAwLCAweDAwLCAweDUyLCAweDAxLAkJLyogbm8gb2Zmc2V0LCAzMzggYnl0ZXMgdG90YWwgKi8KKworCQkvKiAyNDEyIE1IeiAqLworCQkweDZjLCAweDA5LAorCQkJMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwKKwkJCTB4ZTAsIDB4MDAsIDB4ZTAsIDB4MDAsIDB4ZTAsIDB4MDAsIDB4ZTAsIDB4MDAsCisJCQkweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLAorCisJCS8qIDI0MTcgTUh6ICovCisJCTB4NzEsIDB4MDksCisJCQkweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLAorCQkJMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwKKwkJCTB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsCisKKwkJLyogMjQyMiBNSHogKi8KKwkJMHg3NiwgMHgwOSwKKwkJCTB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsCisJCQkweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGYwLCAweDAwLAorCQkJMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwKKworCQkvKiAyNDI3IE1IeiAqLworCQkweDdiLCAweDA5LAorCQkJMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwKKwkJCTB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsCisJCQkweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLAorCisJCS8qIDI0MzIgTUh6ICovCisJCTB4ODAsIDB4MDksCisJCQkweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLAorCQkJMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwKKwkJCTB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsCisKKwkJLyogMjQzNyBNSHogKi8KKwkJMHg4NSwgMHgwOSwKKwkJCTB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsCisJCQkweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGYwLCAweDAwLAorCQkJMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwKKworCQkvKiAyNDQyIE1IeiAqLworCQkweDhhLCAweDA5LAorCQkJMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwKKwkJCTB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsCisJCQkweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLAorCisJCS8qIDI0NDcgTUh6ICovCisJCTB4OGYsIDB4MDksCisJCQkweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLAorCQkJMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwKKwkJCTB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsCisKKwkJLyogMjQ1MiBNSHogKi8KKwkJMHg5NCwgMHgwOSwKKwkJCTB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsCisJCQkweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGYwLCAweDAwLAorCQkJMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwKKworCQkvKiAyNDU3IE1IeiAqLworCQkweDk5LCAweDA5LAorCQkJMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwKKwkJCTB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsCisJCQkweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLAorCisJCS8qIDI0NjIgTUh6ICovCisJCTB4OWUsIDB4MDksCisJCQkweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLAorCQkJMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwKKwkJCTB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsCisKKwkJLyogMjQ2NyBNSHogKi8KKwkJMHhhMywgMHgwOSwKKwkJCTB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsCisJCQkweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGYwLCAweDAwLAorCQkJMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwKKworCQkvKiAyNDcyIE1IeiAqLworCQkweGE4LCAweDA5LAorCQkJMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwKKwkJCTB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsCisJCQkweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLAorCisvKiBzdHJ1Y3QgcGRhX2lxX2F1dG9jYWxfZW50cnlbMTNdICovCisweDQyLCAweDAwLCAweDA2LCAweDE5LAkJLyogUERSX1BSSVNNX1pJRl9UWF9JUV9DQUxJQlJBVElPTiAqLworCS8qIDI0MTIgTUh6ICovCisJMHg2YywgMHgwOSwgMHgyNiwgMHgwMCwgMHhmOCwgMHhmZiwgMHhmNywgMHhmZiwgMHhmZiwgMHgwMCwKKwkvKiAyNDE3IE1IeiAqLworCTB4NzEsIDB4MDksIDB4MjYsIDB4MDAsIDB4ZjgsIDB4ZmYsIDB4ZjcsIDB4ZmYsIDB4ZmYsIDB4MDAsCisJLyogMjQyMiBNSHogKi8KKwkweDc2LCAweDA5LCAweDI2LCAweDAwLCAweGY4LCAweGZmLCAweGY3LCAweGZmLCAweGZmLCAweDAwLAorCS8qIDI0MjcgTUh6ICovCisJMHg3YiwgMHgwOSwgMHgyNiwgMHgwMCwgMHhmOCwgMHhmZiwgMHhmNywgMHhmZiwgMHhmZiwgMHgwMCwKKwkvKiAyNDMyIE1IeiAqLworCTB4ODAsIDB4MDksIDB4MjUsIDB4MDAsIDB4ZjcsIDB4ZmYsIDB4ZjcsIDB4ZmYsIDB4ZmYsIDB4MDAsCisJLyogMjQzNyBNSHogKi8KKwkweDg1LCAweDA5LCAweDI1LCAweDAwLCAweGY3LCAweGZmLCAweGY3LCAweGZmLCAweGZmLCAweDAwLAorCS8qIDI0NDIgTUh6ICovCisJMHg4YSwgMHgwOSwgMHgyNSwgMHgwMCwgMHhmNywgMHhmZiwgMHhmNywgMHhmZiwgMHhmZiwgMHgwMCwKKwkvKiAyNDQ3IE1IeiAqLworCTB4OGYsIDB4MDksIDB4MjUsIDB4MDAsIDB4ZjcsIDB4ZmYsIDB4ZjcsIDB4ZmYsIDB4ZmYsIDB4MDAsCisJLyogMjQ1MiBNSHogKi8KKwkweDk0LCAweDA5LCAweDI1LCAweDAwLCAweGY3LCAweGZmLCAweGY3LCAweGZmLCAweGZmLCAweDAwLAorCS8qIDI0NTcgTUh6ICovCisJMHg5OSwgMHgwOSwgMHgyNSwgMHgwMCwgMHhmNSwgMHhmZiwgMHhmOSwgMHhmZiwgMHgwMCwgMHgwMSwKKwkvKiAyNDYyIE1IeiAqLworCTB4OWUsIDB4MDksIDB4MjUsIDB4MDAsIDB4ZjUsIDB4ZmYsIDB4ZjksIDB4ZmYsIDB4MDAsIDB4MDEsCisJLyogMjQ2NyBNSHogKi8KKwkweGEzLCAweDA5LCAweDI1LCAweDAwLCAweGY1LCAweGZmLCAweGY5LCAweGZmLCAweDAwLCAweDAxLAorCS8qIDI0NzIgTUh6ICovCisJMHhhOCwgMHgwOSwgMHgyNSwgMHgwMCwgMHhmNSwgMHhmZiwgMHhmOSwgMHhmZiwgMHgwMCwgMHgwMSwKKworMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwJCS8qIFBEUl9FTkQgKi8KKwkweGE4LCAweGY1CQkJLyogYm9ndXMgZGF0YSAqLworfTsKKworI2VuZGlmIC8qIFA1NFNQSV9FRVBST01fSCAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0dXNiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0dXNiLmMKaW5kZXggNWRlMmViZi4uZGE2NjQwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHVzYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTR1c2IuYwpAQCAtNDI0LDkgKzQyNCw0NiBAQAogCQkJICAgIGRhdGEsIGxlbiwgJmFsZW4sIDIwMDApOwogfQogCitzdGF0aWMgY29uc3QgY2hhciBwNTR1X3JvbWJvb3RfMzg4N1tdID0gIn5+fn4iOworc3RhdGljIGNvbnN0IGNoYXIgcDU0dV9maXJtd2FyZV91cGxvYWRfMzg4N1tdID0gIjxcciI7CisKK3N0YXRpYyBpbnQgcDU0dV9kZXZpY2VfcmVzZXRfMzg4NyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCit7CisJc3RydWN0IHA1NHVfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKKwlpbnQgcmV0LCBsb2NrID0gKHByaXYtPmludGYtPmNvbmRpdGlvbiAhPSBVU0JfSU5URVJGQUNFX0JJTkRJTkcpOworCXU4IGJ1Zls0XTsKKworCWlmIChsb2NrKSB7CisJCXJldCA9IHVzYl9sb2NrX2RldmljZV9mb3JfcmVzZXQocHJpdi0+dWRldiwgcHJpdi0+aW50Zik7CisJCWlmIChyZXQgPCAwKSB7CisJCQlkZXZfZXJyKCZwcml2LT51ZGV2LT5kZXYsICIocDU0dXNiKSB1bmFibGUgdG8gbG9jayAiCisJCQkJIiBkZXZpY2UgZm9yIHJlc2V0OiAlZFxuIiwgcmV0KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKKwlyZXQgPSB1c2JfcmVzZXRfZGV2aWNlKHByaXYtPnVkZXYpOworCWlmIChsb2NrKQorCQl1c2JfdW5sb2NrX2RldmljZShwcml2LT51ZGV2KTsKKworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcHJpdi0+dWRldi0+ZGV2LCAiKHA1NHVzYikgdW5hYmxlIHRvIHJlc2V0ICIKKwkJCSJkZXZpY2U6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCW1lbWNweSgmYnVmLCBwNTR1X3JvbWJvb3RfMzg4Nywgc2l6ZW9mKGJ1ZikpOworCXJldCA9IHA1NHVfYnVsa19tc2cocHJpdiwgUDU0VV9QSVBFX0RBVEEsCisJCQkgICAgYnVmLCBzaXplb2YoYnVmKSk7CisJaWYgKHJldCkKKwkJZGV2X2VycigmcHJpdi0+dWRldi0+ZGV2LCAiKHA1NHVzYikgdW5hYmxlIHRvIGp1bXAgdG8gIgorCQkJImJvb3QgUk9NOiAlZFxuIiwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKIHN0YXRpYyBpbnQgcDU0dV91cGxvYWRfZmlybXdhcmVfMzg4NyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCiB7Ci0Jc3RhdGljIGNoYXIgc3RhcnRfc3RyaW5nW10gPSAifn5+fjxcciI7CiAJc3RydWN0IHA1NHVfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKIAljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3X2VudHJ5ID0gTlVMTDsKIAlpbnQgZXJyLCBhbGVuOwpAQCAtNDQ1LDEyICs0ODIsOSBAQAogCQlnb3RvIGVycl9idWZhbGxvYzsKIAl9CiAKLQltZW1jcHkoYnVmLCBzdGFydF9zdHJpbmcsIDQpOwotCWVyciA9IHA1NHVfYnVsa19tc2cocHJpdiwgUDU0VV9QSVBFX0RBVEEsIGJ1ZiwgNCk7Ci0JaWYgKGVycikgewotCQlkZXZfZXJyKCZwcml2LT51ZGV2LT5kZXYsICIocDU0dXNiKSByZXNldCBmYWlsZWQhICglZClcbiIsIGVycik7CisJZXJyID0gcDU0dV9kZXZpY2VfcmVzZXRfMzg4NyhkZXYpOworCWlmIChlcnIpCiAJCWdvdG8gZXJyX3Jlc2V0OwotCX0KIAogCWVyciA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3X2VudHJ5LCAiaXNsMzg4N3VzYiIsICZwcml2LT51ZGV2LT5kZXYpOwogCWlmIChlcnIpIHsKQEAgLTQ2NiwxNSArNTAwLDIyIEBACiAJaWYgKGVycikKIAkJZ290byBlcnJfdXBsb2FkX2ZhaWxlZDsKIAorCWlmIChwcml2LT5jb21tb24uZndfaW50ZXJmYWNlICE9IEZXX0xNODcpIHsKKwkJZGV2X2VycigmcHJpdi0+dWRldi0+ZGV2LCAid3JvbmcgZmlybXdhcmUsICIKKwkJCSJwbGVhc2UgZ2V0IGEgTE04NyBmaXJtd2FyZSBhbmQgdHJ5IGFnYWluLlxuIik7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gZXJyX3VwbG9hZF9mYWlsZWQ7CisJfQorCiAJbGVmdCA9IGJsb2NrX3NpemUgPSBtaW4oKHNpemVfdClQNTRVX0ZXX0JMT0NLLCBmd19lbnRyeS0+c2l6ZSk7Ci0Jc3RyY3B5KGJ1Ziwgc3RhcnRfc3RyaW5nKTsKLQlsZWZ0IC09IHN0cmxlbihzdGFydF9zdHJpbmcpOwotCXRtcCArPSBzdHJsZW4oc3RhcnRfc3RyaW5nKTsKKwlzdHJjcHkoYnVmLCBwNTR1X2Zpcm13YXJlX3VwbG9hZF8zODg3KTsKKwlsZWZ0IC09IHN0cmxlbihwNTR1X2Zpcm13YXJlX3VwbG9hZF8zODg3KTsKKwl0bXAgKz0gc3RybGVuKHA1NHVfZmlybXdhcmVfdXBsb2FkXzM4ODcpOwogCiAJZGF0YSA9IGZ3X2VudHJ5LT5kYXRhOwogCXJlbWFpbnMgPSBmd19lbnRyeS0+c2l6ZTsKIAotCWhkciA9IChzdHJ1Y3QgeDJfaGVhZGVyICopKGJ1ZiArIHN0cmxlbihzdGFydF9zdHJpbmcpKTsKKwloZHIgPSAoc3RydWN0IHgyX2hlYWRlciAqKShidWYgKyBzdHJsZW4ocDU0dV9maXJtd2FyZV91cGxvYWRfMzg4NykpOwogCW1lbWNweShoZHItPnNpZ25hdHVyZSwgWDJfU0lHTkFUVVJFLCBYMl9TSUdOQVRVUkVfU0laRSk7CiAJaGRyLT5md19sb2FkX2FkZHIgPSBjcHVfdG9fbGUzMihJU0wzOFhYX0RFVl9GSVJNV0FSRV9BRERSKTsKIAloZHItPmZ3X2xlbmd0aCA9IGNwdV90b19sZTMyKGZ3X2VudHJ5LT5zaXplKTsKQEAgLTYxNiw2ICs2NTcsMTQgQEAKIAkJcmV0dXJuIGVycjsKIAl9CiAKKwlpZiAocHJpdi0+Y29tbW9uLmZ3X2ludGVyZmFjZSAhPSBGV19MTTg2KSB7CisJCWRldl9lcnIoJnByaXYtPnVkZXYtPmRldiwgIndyb25nIGZpcm13YXJlLCAiCisJCQkicGxlYXNlIGdldCBhIExNODYoVVNCKSBmaXJtd2FyZSBhbmQgdHJ5IGFnYWluLlxuIik7CisJCWtmcmVlKGJ1Zik7CisJCXJlbGVhc2VfZmlybXdhcmUoZndfZW50cnkpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKICNkZWZpbmUgUDU0VV9XUklURSh0eXBlLCBhZGRyLCBkYXRhKSBcCiAJZG8ge1wKIAkJZXJyID0gcDU0dV93cml0ZShwcml2LCBidWYsIHR5cGUsXApAQCAtODc2LDYgKzkyNSw5IEBACiAJU0VUX0lFRUU4MDIxMV9ERVYoZGV2LCAmaW50Zi0+ZGV2KTsKIAl1c2Jfc2V0X2ludGZkYXRhKGludGYsIGRldik7CiAJcHJpdi0+dWRldiA9IHVkZXY7CisJcHJpdi0+aW50ZiA9IGludGY7CisJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmcHJpdi0+cnhfcXVldWUpOworCWluaXRfdXNiX2FuY2hvcigmcHJpdi0+c3VibWl0dGVkKTsKIAogCXVzYl9nZXRfZGV2KHVkZXYpOwogCkBAIC05MTgsMjAgKzk3MCwxNSBAQAogCWlmIChlcnIpCiAJCWdvdG8gZXJyX2ZyZWVfZGV2OwogCi0Jc2tiX3F1ZXVlX2hlYWRfaW5pdCgmcHJpdi0+cnhfcXVldWUpOwotCWluaXRfdXNiX2FuY2hvcigmcHJpdi0+c3VibWl0dGVkKTsKLQogCXA1NHVfb3BlbihkZXYpOwogCWVyciA9IHA1NF9yZWFkX2VlcHJvbShkZXYpOwogCXA1NHVfc3RvcChkZXYpOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyX2ZyZWVfZGV2OwogCi0JZXJyID0gaWVlZTgwMjExX3JlZ2lzdGVyX2h3KGRldik7Ci0JaWYgKGVycikgewotCQlkZXZfZXJyKCZ1ZGV2LT5kZXYsICIocDU0dXNiKSBDYW5ub3QgcmVnaXN0ZXIgbmV0ZGV2aWNlXG4iKTsKKwllcnIgPSBwNTRfcmVnaXN0ZXJfY29tbW9uKGRldiwgJnVkZXYtPmRldik7CisJaWYgKGVycikKIAkJZ290byBlcnJfZnJlZV9kZXY7Ci0JfQogCiAJcmV0dXJuIDA7CiAKQEAgLTk1OCwxMSArMTAwNSwyNCBAQAogCWllZWU4MDIxMV9mcmVlX2h3KGRldik7CiB9CiAKK3N0YXRpYyBpbnQgcDU0dV9wcmVfcmVzZXQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcDU0dV9wb3N0X3Jlc2V0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXJldHVybiAwOworfQorCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgcDU0dV9kcml2ZXIgPSB7CiAJLm5hbWUJPSAicDU0dXNiIiwKIAkuaWRfdGFibGUgPSBwNTR1X3RhYmxlLAogCS5wcm9iZSA9IHA1NHVfcHJvYmUsCiAJLmRpc2Nvbm5lY3QgPSBwNTR1X2Rpc2Nvbm5lY3QsCisJLnByZV9yZXNldCA9IHA1NHVfcHJlX3Jlc2V0LAorCS5wb3N0X3Jlc2V0ID0gcDU0dV9wb3N0X3Jlc2V0LAorCS5zb2Z0X3VuYmluZCA9IDEsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBwNTR1X2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTR1c2IuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTR1c2IuaAppbmRleCA1NGVlNzM4Li44YmM1ODk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0dXNiLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHVzYi5oCkBAIC0xMjYsNiArMTI2LDcgQEAKIHN0cnVjdCBwNTR1X3ByaXYgewogCXN0cnVjdCBwNTRfY29tbW9uIGNvbW1vbjsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZjsKIAllbnVtIHsKIAkJUDU0VV9ORVQyMjgwID0gMCwKIAkJUDU0VV8zODg3CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbF9pb2N0bC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xfaW9jdGwuYwppbmRleCA1N2ExNTBhLi40Yzk3YzZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbF9pb2N0bC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNsX2lvY3RsLmMKQEAgLTI5ODEsNyArMjk4MSw4IEBACiAJCXVuaW9uIGl3cmVxX2RhdGEgKnV3cnEsIGNoYXIgKmV4dHJhKQogewogCWlzbHBjaV9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7Ci0JdTMyIHUsIG9pZCA9IE9JRF9JTkxfQ09ORklHOworCXUzMiB1OworCWVudW0gb2lkX251bV90IG9pZCA9IE9JRF9JTkxfQ09ORklHOwogCiAJZG93bl93cml0ZSgmcHJpdi0+bWliX3NlbSk7CiAJbWd0X2dldChwcml2LCBPSURfSU5MX0NPTkZJRywgJnUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfZGV2LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9kZXYuYwppbmRleCA5MTk2ODI1Li4xNjZlZDk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9kZXYuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9kZXYuYwpAQCAtNDMsNyArNDMsNiBAQAogCiBzdGF0aWMgaW50IHByaXNtNTRfYnJpbmdfZG93bihpc2xwY2lfcHJpdmF0ZSAqKTsKIHN0YXRpYyBpbnQgaXNscGNpX2FsbG9jX21lbW9yeShpc2xwY2lfcHJpdmF0ZSAqKTsKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqaXNscGNpX3N0YXRpc3RpY3Moc3RydWN0IG5ldF9kZXZpY2UgKik7CiAKIC8qIFRlbXBvcmFyeSBkdW1teSBNQUMgYWRkcmVzcyB0byB1c2UgdW50aWwgZmlybXdhcmUgaXMgbG9hZGVkLgogICogVGhlIGlkZWEgdGhlcmUgaXMgdGhhdCBzb21lIHRvb2xzIChzdWNoIGFzIG5hbWVpZikgbWF5IHF1ZXJ5CkBAIC02MTQsMTggKzYxMyw2IEBACiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKgotaXNscGNpX3N0YXRpc3RpY3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCi17Ci0JaXNscGNpX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKLQotI2lmIFZFUkJPU0UgPiBTSE9XX0VSUk9SX01FU1NBR0VTCi0JREVCVUcoU0hPV19GVU5DVElPTl9DQUxMUywgImlzbHBjaV9zdGF0aXN0aWNzXG4iKTsKLSNlbmRpZgotCi0JcmV0dXJuICZwcml2LT5zdGF0aXN0aWNzOwotfQotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgTmV0d29yayBkZXZpY2UgY29uZmlndXJhdGlvbiBmdW5jdGlvbnMKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTgwNCwxMCArNzkxLDIyIEBACiAJc3RyY3B5KGluZm8tPnZlcnNpb24sIERSVl9WRVJTSU9OKTsKIH0KIAotc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBpc2xwY2lfZXRodG9vbF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGlzbHBjaV9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X2RydmluZm8gPSBpc2xwY2lfZXRodG9vbF9nZXRfZHJ2aW5mbywKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaXNscGNpX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuIAkJPSBpc2xwY2lfb3BlbiwKKwkubmRvX3N0b3AJCT0gaXNscGNpX2Nsb3NlLAorCS5uZG9fZG9faW9jdGwJCT0gcHJpc201NF9pb2N0bCwKKwkubmRvX3N0YXJ0X3htaXQJCT0gaXNscGNpX2V0aF90cmFuc21pdCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gaXNscGNpX2V0aF90eF90aW1lb3V0LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IHByaXNtNTRfc2V0X21hY19hZGRyZXNzLAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCiBzdHJ1Y3QgbmV0X2RldmljZSAqCiBpc2xwY2lfc2V0dXAoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CkBAIC04MjcsMjUgKzgyNiwxNiBAQAogCW5kZXYtPmlycSA9IHBkZXYtPmlycTsKIAogCS8qIGluaXRpYWxpemUgdGhlIGZ1bmN0aW9uIHBvaW50ZXJzICovCi0JbmRldi0+b3BlbiA9ICZpc2xwY2lfb3BlbjsKLQluZGV2LT5zdG9wID0gJmlzbHBjaV9jbG9zZTsKLQluZGV2LT5nZXRfc3RhdHMgPSAmaXNscGNpX3N0YXRpc3RpY3M7Ci0JbmRldi0+ZG9faW9jdGwgPSAmcHJpc201NF9pb2N0bDsKLQluZGV2LT53aXJlbGVzc19oYW5kbGVycyA9Ci0JICAgIChzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYgKikgJnByaXNtNTRfaGFuZGxlcl9kZWY7CisJbmRldi0+bmV0ZGV2X29wcyA9ICZpc2xwY2lfbmV0ZGV2X29wczsKKwluZGV2LT53aXJlbGVzc19oYW5kbGVycyA9ICZwcmlzbTU0X2hhbmRsZXJfZGVmOwogCW5kZXYtPmV0aHRvb2xfb3BzID0gJmlzbHBjaV9ldGh0b29sX29wczsKIAotCW5kZXYtPmhhcmRfc3RhcnRfeG1pdCA9ICZpc2xwY2lfZXRoX3RyYW5zbWl0OwogCS8qIG5kZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9ICZpc2xwY2lfc2V0X211bHRpY2FzdF9saXN0OyAqLwogCW5kZXYtPmFkZHJfbGVuID0gRVRIX0FMRU47Ci0JbmRldi0+c2V0X21hY19hZGRyZXNzID0gJnByaXNtNTRfc2V0X21hY19hZGRyZXNzOwogCS8qIEdldCBhIG5vbi16ZXJvIGR1bW15IE1BQyBhZGRyZXNzIGZvciBuYW1laWYuIEplYW4gSUkgKi8KIAltZW1jcHkobmRldi0+ZGV2X2FkZHIsIGR1bW15X21hYywgNik7CiAKLSNpZmRlZiBIQVZFX1RYX1RJTUVPVVQKIAluZGV2LT53YXRjaGRvZ190aW1lbyA9IElTTFBDSV9UWF9USU1FT1VUOwotCW5kZXYtPnR4X3RpbWVvdXQgPSAmaXNscGNpX2V0aF90eF90aW1lb3V0OwotI2VuZGlmCiAKIAkvKiBhbGxvY2F0ZSBhIHByaXZhdGUgZGV2aWNlIHN0cnVjdHVyZSB0byB0aGUgbmV0d29yayBkZXZpY2UgICovCiAJcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfZGV2LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9kZXYuaAppbmRleCA4ZTU1YTVmLi5jNGQwZjE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9kZXYuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9kZXYuaApAQCAtMTU4LDkgKzE1OCw2IEBACiAJZG1hX2FkZHJfdCBwY2lfbWFwX3R4X2FkZHJlc3NbSVNMMzhYWF9DQl9UWF9RU0laRV07CiAJZG1hX2FkZHJfdCBwY2lfbWFwX3J4X2FkZHJlc3NbSVNMMzhYWF9DQl9SWF9RU0laRV07CiAKLQkvKiBkcml2ZXIgbmV0d29yayBpbnRlcmZhY2UgbWVtYmVycyAqLwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRpc3RpY3M7Ci0KIAkvKiB3YWl0IGZvciBhIHJlc2V0IGludGVycnVwdCAqLwogCXdhaXRfcXVldWVfaGVhZF90IHJlc2V0X2RvbmU7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2V0aC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfZXRoLmMKaW5kZXggZTQzYmFlOS4uZWYzZWY0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfZXRoLmMKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KIAogI2luY2x1ZGUgInByaXNtY29tcGF0LmgiCiAjaW5jbHVkZSAiaXNsXzM4eHguaCIKQEAgLTIzMCw4ICsyMzEsOCBAQAogCiAJLyogc2V0IHRoZSB0cmFuc21pc3Npb24gdGltZSAqLwogCW5kZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKLQlwcml2LT5zdGF0aXN0aWNzLnR4X3BhY2tldHMrKzsKLQlwcml2LT5zdGF0aXN0aWNzLnR4X2J5dGVzICs9IHNrYi0+bGVuOworCW5kZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwluZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKIAogCS8qIHRyaWdnZXIgdGhlIGRldmljZSAqLwogCWlzbHBjaV90cmlnZ2VyKHByaXYpOwpAQCAtMjQyLDcgKzI0Myw3IEBACiAJcmV0dXJuIDA7CiAKICAgICAgIGRyb3BfZnJlZToKLQlwcml2LT5zdGF0aXN0aWNzLnR4X2Ryb3BwZWQrKzsKKwluZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+c2xvY2ssIGZsYWdzKTsKIAlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJcmV0dXJuIGVycjsKQEAgLTQwNyw4ICs0MDgsOCBAQAogCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBuZGV2KTsKIAl9CiAJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwotCXByaXYtPnN0YXRpc3RpY3MucnhfcGFja2V0cysrOwotCXByaXYtPnN0YXRpc3RpY3MucnhfYnl0ZXMgKz0gc2l6ZTsKKwluZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJbmRldi0+c3RhdHMucnhfYnl0ZXMgKz0gc2l6ZTsKIAogCS8qIGRlbGl2ZXIgdGhlIHNrYiB0byB0aGUgbmV0d29yayBsYXllciAqLwogI2lmZGVmIElTTFBDSV9FVEhfREVCVUcKQEAgLTQ3MSw4ICs0NzIsOCBAQAogCQl3bWIoKTsKIAogCQkvKiBpbmNyZW1lbnQgdGhlIGRyaXZlciByZWFkIHBvaW50ZXIgKi8KLQkJYWRkX2xlMzJwKCZjb250cm9sX2Jsb2NrLT4KLQkJCSAgZHJpdmVyX2N1cnJfZnJhZ1tJU0wzOFhYX0NCX1JYX0RBVEFfTFFdLCAxKTsKKwkJbGUzMl9hZGRfY3B1KCZjb250cm9sX2Jsb2NrLT4KKwkJCSAgICAgZHJpdmVyX2N1cnJfZnJhZ1tJU0wzOFhYX0NCX1JYX0RBVEFfTFFdLCAxKTsKIAl9CiAKIAkvKiB0cmlnZ2VyIHRoZSBkZXZpY2UgKi8KQEAgLTQ5NiwxMCArNDk3LDkgQEAKIGlzbHBjaV9ldGhfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKIHsKIAlpc2xwY2lfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0aXN0aWNzID0gJnByaXYtPnN0YXRpc3RpY3M7CiAKIAkvKiBpbmNyZW1lbnQgdGhlIHRyYW5zbWl0IGVycm9yIGNvdW50ZXIgKi8KLQlzdGF0aXN0aWNzLT50eF9lcnJvcnMrKzsKKwluZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKIAogCWlmICghcHJpdi0+cmVzZXRfdGFza19wZW5kaW5nKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX21ndC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfbWd0LmgKaW5kZXggZjkxYTg4Zi4uODdhMTczNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfbWd0LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfbWd0LmgKQEAgLTg1LDEyICs4NSw2IEBACiAjZGVmaW5lIFBJTUZPUl9GTEFHX0FQUExJQ19PUklHSU4gICAgICAgICAgICAgICAweDAxCiAjZGVmaW5lIFBJTUZPUl9GTEFHX0xJVFRMRV9FTkRJQU4gICAgICAgICAgICAgICAweDAyCiAKLXN0YXRpYyBpbmxpbmUgdm9pZAotYWRkX2xlMzJwKF9fbGUzMiAqIGxlX251bWJlciwgdTMyIGFkZCkKLXsKLQkqbGVfbnVtYmVyID0gY3B1X3RvX2xlMzIobGUzMl90b19jcHVwKGxlX251bWJlcikgKyBhZGQpOwotfQotCiB2b2lkIGRpc3BsYXlfYnVmZmVyKGNoYXIgKiwgaW50KTsKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvb2lkX21ndC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9vaWRfbWd0LmMKaW5kZXggNTdhNGFjMy4uMTE4N2U2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9vaWRfbWd0LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9vaWRfbWd0LmMKQEAgLTY5OCw3ICs2OTgsNyBAQAogbWd0X2NvbW1pdChpc2xwY2lfcHJpdmF0ZSAqcHJpdikKIHsKIAlpbnQgcnZhbHVlOwotCXUzMiB1OworCWVudW0gb2lkX251bV90IHU7CiAKIAlpZiAoaXNscGNpX2dldF9zdGF0ZShwcml2KSA8IFBSVl9TVEFURV9JTklUKQogCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JheV9jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmF5X2NzLmMKaW5kZXggOTllYzdkNi4uZmE5MGQxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmF5X2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmF5X2NzLmMKQEAgLTgsNyArOCw3IEBACiAgKiBDb3B5cmlnaHQgKGMpIDE5OTggIENvcmV5IFRob21hcyAoY29yZXlAd29ybGQuc3RkLmNvbSkKICAqCiAgKiBUaGlzIGRyaXZlciBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9ubHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIAorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvbmx5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKgogICogSXQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKQEAgLTI3LDcgKzI3LDcgQEAKICAqCiAgKiBEYW5pZWxlIEJlbGx1Y2NpIDxiZWxsdWNkYUB0aXNjYWxpLml0PiAtIDA3LzEwLzIwMDMKICAqIC0gQXVkaXQgY29weV90b191c2VyIGluIGlvY3RsKFNJT0NHSVdFU1NJRCkKLSAqIAorICoKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtNjUsOCArNjUsOCBAQAogLyogV2FybmluZyA6IHRoZXNlIHN0dWZmIHdpbGwgc2xvdyBkb3duIHRoZSBkcml2ZXIuLi4gKi8KICNkZWZpbmUgV0lSRUxFU1NfU1BZCQkvKiBFbmFibGUgc3B5aW5nIGFkZHJlc3NlcyAqLwogLyogRGVmaW5pdGlvbnMgd2UgbmVlZCBmb3Igc3B5ICovCi10eXBlZGVmIHN0cnVjdCBpd19zdGF0aXN0aWNzCWl3X3N0YXRzOwotdHlwZWRlZiB1X2NoYXIJbWFjX2FkZHJbRVRIX0FMRU5dOwkvKiBIYXJkd2FyZSBhZGRyZXNzICovCit0eXBlZGVmIHN0cnVjdCBpd19zdGF0aXN0aWNzIGl3X3N0YXRzOwordHlwZWRlZiB1X2NoYXIgbWFjX2FkZHJbRVRIX0FMRU5dOwkvKiBIYXJkd2FyZSBhZGRyZXNzICovCiAKICNpbmNsdWRlICJyYXljdGwuaCIKICNpbmNsdWRlICJyYXlfY3MuaCIKQEAgLTg2LDcgKzg2LDcgQEAKIHN0YXRpYyBpbnQgcGNfZGVidWcgPSBQQ01DSUFfREVCVUc7CiBtb2R1bGVfcGFyYW0ocGNfZGVidWcsIGludCwgMCk7CiAvKiAjZGVmaW5lIERFQlVHKG4sIGFyZ3MuLi4pIGlmIChwY19kZWJ1Zz4obikpIHByaW50ayhLRVJOX0RFQlVHIGFyZ3MpOyAqLwotI2RlZmluZSBERUJVRyhuLCBhcmdzLi4uKSBpZiAocGNfZGVidWc+KG4pKSBwcmludGsoYXJncyk7CisjZGVmaW5lIERFQlVHKG4sIGFyZ3MuLi4pIGlmIChwY19kZWJ1ZyA+IChuKSkgcHJpbnRrKGFyZ3MpOwogI2Vsc2UKICNkZWZpbmUgREVCVUcobiwgYXJncy4uLikKICNlbmRpZgpAQCAtMTA4LDEyICsxMDgsMTIgQEAKIHN0YXRpYyB2b2lkIHNldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIHJheV91cGRhdGVfbXVsdGlfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgYWxsKTsKIHN0YXRpYyBpbnQgdHJhbnNsYXRlX2ZyYW1lKHJheV9kZXZfdCAqbG9jYWwsIHN0cnVjdCB0eF9tc2cgX19pb21lbSAqcHR4LAotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBsZW4pOwotc3RhdGljIHZvaWQgcmF5X2J1aWxkX2hlYWRlcihyYXlfZGV2X3QgKmxvY2FsLCBzdHJ1Y3QgdHhfbXNnIF9faW9tZW0gKnB0eCwgVUNIQVIgbXNnX3R5cGUsCi0gICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqZGF0YSk7CisJCQkgICB1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgbGVuKTsKK3N0YXRpYyB2b2lkIHJheV9idWlsZF9oZWFkZXIocmF5X2Rldl90ICpsb2NhbCwgc3RydWN0IHR4X21zZyBfX2lvbWVtICpwdHgsCisJCQkgICAgIFVDSEFSIG1zZ190eXBlLCB1bnNpZ25lZCBjaGFyICpkYXRhKTsKIHN0YXRpYyB2b2lkIHVudHJhbnNsYXRlKHJheV9kZXZfdCAqbG9jYWwsIHN0cnVjdCBza19idWZmICpza2IsIGludCBsZW4pOwotc3RhdGljIGl3X3N0YXRzICogcmF5X2dldF93aXJlbGVzc19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqCWRldik7Ci1zdGF0aWMgY29uc3Qgc3RydWN0IGl3X2hhbmRsZXJfZGVmCXJheV9oYW5kbGVyX2RlZjsKK3N0YXRpYyBpd19zdGF0cyAqcmF5X2dldF93aXJlbGVzc19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYgcmF5X2hhbmRsZXJfZGVmOwogCiAvKioqKiogUHJvdG90eXBlcyBmb3IgcmF5bGluayBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgaW50IGFzY190b19pbnQoY2hhciBhKTsKQEAgLTEyNCw3ICsxMjQsNyBAQAogc3RhdGljIGludCBnZXRfZnJlZV90eF9jY3MocmF5X2Rldl90ICpsb2NhbCk7CiBzdGF0aWMgdm9pZCBpbml0X3N0YXJ0dXBfcGFyYW1zKHJheV9kZXZfdCAqbG9jYWwpOwogc3RhdGljIGludCBwYXJzZV9hZGRyKGNoYXIgKmluX3N0ciwgVUNIQVIgKm91dCk7Ci1zdGF0aWMgaW50IHJheV9od194bWl0KHVuc2lnbmVkIGNoYXIqIGRhdGEsIGludCBsZW4sIHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsIFVDSEFSIHR5cGUpOworc3RhdGljIGludCByYXlfaHdfeG1pdCh1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgbGVuLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBVQ0hBUiB0eXBlKTsKIHN0YXRpYyBpbnQgcmF5X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IGludGVycnVwdF9lY2YocmF5X2Rldl90ICpsb2NhbCwgaW50IGNjcyk7CiBzdGF0aWMgdm9pZCByYXlfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CkBAIC0xMzIsMTcgKzEzMiwxNyBAQAogc3RhdGljIHZvaWQgdmVyaWZ5X2RsX3N0YXJ0dXAodV9sb25nKTsKIAogLyogUHJvdG90eXBlcyBmb3IgaW50ZXJycHQgdGltZSBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpcnFyZXR1cm5fdCByYXlfaW50ZXJydXB0IChpbnQgcmVnLCB2b2lkICpkZXZfaWQpOworc3RhdGljIGlycXJldHVybl90IHJheV9pbnRlcnJ1cHQoaW50IHJlZywgdm9pZCAqZGV2X2lkKTsKIHN0YXRpYyB2b2lkIGNsZWFyX2ludGVycnVwdChyYXlfZGV2X3QgKmxvY2FsKTsKLXN0YXRpYyB2b2lkIHJ4X2RlYXV0aGVudGljYXRlKHJheV9kZXZfdCAqbG9jYWwsIHN0cnVjdCByY3MgX19pb21lbSAqcHJjcywgCi0gICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBwa3RfYWRkciwgaW50IHJ4X2xlbik7CitzdGF0aWMgdm9pZCByeF9kZWF1dGhlbnRpY2F0ZShyYXlfZGV2X3QgKmxvY2FsLCBzdHJ1Y3QgcmNzIF9faW9tZW0gKnByY3MsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgcGt0X2FkZHIsIGludCByeF9sZW4pOwogc3RhdGljIGludCBjb3B5X2Zyb21fcnhfYnVmZihyYXlfZGV2X3QgKmxvY2FsLCBVQ0hBUiAqZGVzdCwgaW50IHBrdF9hZGRyLCBpbnQgbGVuKTsKIHN0YXRpYyB2b2lkIHJheV9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCByYXlfZGV2X3QgKmxvY2FsLCBzdHJ1Y3QgcmNzIF9faW9tZW0gKnByY3MpOwogc3RhdGljIHZvaWQgcmVsZWFzZV9mcmFnX2NoYWluKHJheV9kZXZfdCAqbG9jYWwsIHN0cnVjdCByY3MgX19pb21lbSAqcHJjcyk7CiBzdGF0aWMgdm9pZCByeF9hdXRoZW50aWNhdGUocmF5X2Rldl90ICpsb2NhbCwgc3RydWN0IHJjcyBfX2lvbWVtICpwcmNzLAotICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHBrdF9hZGRyLCBpbnQgcnhfbGVuKTsKLXN0YXRpYyB2b2lkIHJ4X2RhdGEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHJjcyBfX2lvbWVtICpwcmNzLCB1bnNpZ25lZCBpbnQgcGt0X2FkZHIsIAotICAgICAgICAgICAgIGludCByeF9sZW4pOworCQkJICAgIHVuc2lnbmVkIGludCBwa3RfYWRkciwgaW50IHJ4X2xlbik7CitzdGF0aWMgdm9pZCByeF9kYXRhKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCByY3MgX19pb21lbSAqcHJjcywKKwkJICAgIHVuc2lnbmVkIGludCBwa3RfYWRkciwgaW50IHJ4X2xlbik7CiBzdGF0aWMgdm9pZCBhc3NvY2lhdGUocmF5X2Rldl90ICpsb2NhbCk7CiAKIC8qIENhcmQgY29tbWFuZCBmdW5jdGlvbnMgKi8KQEAgLTIxOSw4MiArMjE5LDk3IEBACiBtb2R1bGVfcGFyYW0ocmF5X21lbV9zcGVlZCwgaW50LCAwKTsKIAogc3RhdGljIFVDSEFSIGI1X2RlZmF1bHRfc3RhcnR1cF9wYXJtc1tdID0gewotICAgIDAsICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogQWRob2Mgc3RhdGlvbiAqLwotICAgJ0wnLCdJJywnTicsJ1UnLCdYJywgMCwgIDAsICAwLCAgLyogMzIgY2hhciBFU1NJRCAqLwotICAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLAotICAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLAotICAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLAotICAgIDEsICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQWN0aXZlIHNjYW4sIENBIE1vZGUgKi8KLSAgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAgICAgICAgIC8qIE5vIGRlZmF1bHQgTUFDIGFkZHIgICovCi0gICAgMHg3ZiwgMHhmZiwgICAgICAgICAgICAgICAgICAgICAvKiBGcmFnIHRocmVzaG9sZCAqLwotICAgIDB4MDAsIDB4ODAsICAgICAgICAgICAgICAgICAgICAgLyogSG9wIHRpbWUgMTI4IEt1cyovCi0gICAgMHgwMSwgMHgwMCwgICAgICAgICAgICAgICAgICAgICAvKiBCZWFjb24gcGVyaW9kIDI1NiBLdXMgKi8KLSAgICAweDAxLCAweDA3LCAweGEzLCAgICAgICAgICAgICAgIC8qIERUSU0sIHJldHJpZXMsIGFjayB0aW1lb3V0Ki8KLSAgICAweDFkLCAweDgyLCAweDRlLCAgICAgICAgICAgICAgIC8qIFNJRlMsIERJRlMsIFBJRlMgKi8KLSAgICAweDdmLCAweGZmLCAgICAgICAgICAgICAgICAgICAgIC8qIFJUUyB0aHJlc2hvbGQgKi8KLSAgICAweDA0LCAweGUyLCAweDM4LCAweEE0LCAgICAgICAgIC8qIHNjYW5fZHdlbGwsIG1heF9zY2FuX2R3ZWxsICovCi0gICAgMHgwNSwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhc3NvYyByZXNwIHRpbWVvdXQgdGhyZXNoICovCi0gICAgMHgwOCwgMHgwMiwgMHgwOCwgICAgICAgICAgICAgICAvKiBhZGhvYywgaW5mcmEsIHN1cGVyIGN5Y2xlIG1heCovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQcm9taXNjdW91cyBtb2RlICovCi0gICAgMHgwYywgMHgwYmQsICAgICAgICAgICAgICAgICAgICAvKiBVbmlxdWUgd29yZCAqLwotICAgIDB4MzIsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2xvdCB0aW1lICovCi0gICAgMHhmZiwgMHhmZiwgICAgICAgICAgICAgICAgICAgICAvKiByb2FtLWxvdyBzbnIsIGxvdyBzbnIgY291bnQgKi8KLSAgICAweDA1LCAweGZmLCAgICAgICAgICAgICAgICAgICAgIC8qIEluZnJhLCBhZGhvYyBtaXNzZWQgYmNuIHRocmVzaCAqLwotICAgIDB4MDEsIDB4MGIsIDB4NGYsICAgICAgICAgICAgICAgLyogVVNBLCBob3AgcGF0dGVybiwgaG9wIHBhdCBsZW5ndGggKi8KKwkwLCAwLAkJCS8qIEFkaG9jIHN0YXRpb24gKi8KKwknTCcsICdJJywgJ04nLCAnVScsICdYJywgMCwgMCwgMCwJLyogMzIgY2hhciBFU1NJRCAqLworCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKwkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCTEsIDAsCQkJLyogQWN0aXZlIHNjYW4sIENBIE1vZGUgKi8KKwkwLCAwLCAwLCAwLCAwLCAwLAkvKiBObyBkZWZhdWx0IE1BQyBhZGRyICAqLworCTB4N2YsIDB4ZmYsCQkvKiBGcmFnIHRocmVzaG9sZCAqLworCTB4MDAsIDB4ODAsCQkvKiBIb3AgdGltZSAxMjggS3VzICovCisJMHgwMSwgMHgwMCwJCS8qIEJlYWNvbiBwZXJpb2QgMjU2IEt1cyAqLworCTB4MDEsIDB4MDcsIDB4YTMsCS8qIERUSU0sIHJldHJpZXMsIGFjayB0aW1lb3V0ICovCisJMHgxZCwgMHg4MiwgMHg0ZSwJLyogU0lGUywgRElGUywgUElGUyAqLworCTB4N2YsIDB4ZmYsCQkvKiBSVFMgdGhyZXNob2xkICovCisJMHgwNCwgMHhlMiwgMHgzOCwgMHhBNCwJLyogc2Nhbl9kd2VsbCwgbWF4X3NjYW5fZHdlbGwgKi8KKwkweDA1LAkJCS8qIGFzc29jIHJlc3AgdGltZW91dCB0aHJlc2ggKi8KKwkweDA4LCAweDAyLCAweDA4LAkvKiBhZGhvYywgaW5mcmEsIHN1cGVyIGN5Y2xlIG1heCAqLworCTAsCQkJLyogUHJvbWlzY3VvdXMgbW9kZSAqLworCTB4MGMsIDB4MGJkLAkJLyogVW5pcXVlIHdvcmQgKi8KKwkweDMyLAkJCS8qIFNsb3QgdGltZSAqLworCTB4ZmYsIDB4ZmYsCQkvKiByb2FtLWxvdyBzbnIsIGxvdyBzbnIgY291bnQgKi8KKwkweDA1LCAweGZmLAkJLyogSW5mcmEsIGFkaG9jIG1pc3NlZCBiY24gdGhyZXNoICovCisJMHgwMSwgMHgwYiwgMHg0ZiwJLyogVVNBLCBob3AgcGF0dGVybiwgaG9wIHBhdCBsZW5ndGggKi8KIC8qIGI0IC0gYjUgZGlmZmVyZW5jZXMgc3RhcnQgaGVyZSAqLwotICAgIDB4MDAsIDB4M2YsICAgICAgICAgICAgICAgICAgICAgLyogQ1cgbWF4ICovCi0gICAgMHgwMCwgMHgwZiwgICAgICAgICAgICAgICAgICAgICAvKiBDVyBtaW4gKi8KLSAgICAweDA0LCAweDA4LCAgICAgICAgICAgICAgICAgICAgIC8qIE5vaXNlIGdhaW4sIGxpbWl0IG9mZnNldCAqLwotICAgIDB4MjgsIDB4MjgsICAgICAgICAgICAgICAgICAgICAgLyogZGV0IHJzc2ksIG1lZCBidXN5IG9mZnNldHMgKi8KLSAgICA3LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRldCBzeW5jIHRocmVzaCAqLwotICAgIDAsIDIsIDIsICAgICAgICAgICAgICAgICAgICAgICAgLyogdGVzdCBtb2RlLCBtaW4sIG1heCAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWxsb3cgYnJvYWRjYXN0IFNTSUQgcHJvYmUgcmVzcCAqLwotICAgIDAsIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcHJpdmFjeSBtdXN0IHN0YXJ0LCBjYW4gam9pbiAqLwotICAgIDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAgICAgICAgICAgLyogYmFzaWMgcmF0ZSBzZXQgKi8KKwkweDAwLCAweDNmLAkJLyogQ1cgbWF4ICovCisJMHgwMCwgMHgwZiwJCS8qIENXIG1pbiAqLworCTB4MDQsIDB4MDgsCQkvKiBOb2lzZSBnYWluLCBsaW1pdCBvZmZzZXQgKi8KKwkweDI4LCAweDI4LAkJLyogZGV0IHJzc2ksIG1lZCBidXN5IG9mZnNldHMgKi8KKwk3LAkJCS8qIGRldCBzeW5jIHRocmVzaCAqLworCTAsIDIsIDIsCQkvKiB0ZXN0IG1vZGUsIG1pbiwgbWF4ICovCisJMCwJCQkvKiBhbGxvdyBicm9hZGNhc3QgU1NJRCBwcm9iZSByZXNwICovCisJMCwgMCwJCQkvKiBwcml2YWN5IG11c3Qgc3RhcnQsIGNhbiBqb2luICovCisJMiwgMCwgMCwgMCwgMCwgMCwgMCwgMAkvKiBiYXNpYyByYXRlIHNldCAqLwogfTsKIAogc3RhdGljIFVDSEFSIGI0X2RlZmF1bHRfc3RhcnR1cF9wYXJtc1tdID0gewotICAgIDAsICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogQWRob2Mgc3RhdGlvbiAqLwotICAgJ0wnLCdJJywnTicsJ1UnLCdYJywgMCwgIDAsICAwLCAgLyogMzIgY2hhciBFU1NJRCAqLwotICAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLAotICAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLAotICAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLAotICAgIDEsICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQWN0aXZlIHNjYW4sIENBIE1vZGUgKi8KLSAgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAgICAgICAgIC8qIE5vIGRlZmF1bHQgTUFDIGFkZHIgICovCi0gICAgMHg3ZiwgMHhmZiwgICAgICAgICAgICAgICAgICAgICAvKiBGcmFnIHRocmVzaG9sZCAqLwotICAgIDB4MDIsIDB4MDAsICAgICAgICAgICAgICAgICAgICAgLyogSG9wIHRpbWUgKi8KLSAgICAweDAwLCAweDAxLCAgICAgICAgICAgICAgICAgICAgIC8qIEJlYWNvbiBwZXJpb2QgKi8KLSAgICAweDAxLCAweDA3LCAweGEzLCAgICAgICAgICAgICAgIC8qIERUSU0sIHJldHJpZXMsIGFjayB0aW1lb3V0Ki8KLSAgICAweDFkLCAweDgyLCAweGNlLCAgICAgICAgICAgICAgIC8qIFNJRlMsIERJRlMsIFBJRlMgKi8KLSAgICAweDdmLCAweGZmLCAgICAgICAgICAgICAgICAgICAgIC8qIFJUUyB0aHJlc2hvbGQgKi8KLSAgICAweGZiLCAweDFlLCAweGM3LCAweDVjLCAgICAgICAgIC8qIHNjYW5fZHdlbGwsIG1heF9zY2FuX2R3ZWxsICovCi0gICAgMHgwNSwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhc3NvYyByZXNwIHRpbWVvdXQgdGhyZXNoICovCi0gICAgMHgwNCwgMHgwMiwgMHg0LCAgICAgICAgICAgICAgICAvKiBhZGhvYywgaW5mcmEsIHN1cGVyIGN5Y2xlIG1heCovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQcm9taXNjdW91cyBtb2RlICovCi0gICAgMHgwYywgMHgwYmQsICAgICAgICAgICAgICAgICAgICAvKiBVbmlxdWUgd29yZCAqLwotICAgIDB4NGUsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2xvdCB0aW1lIChUQkQgc2VlbXMgd3JvbmcpKi8KLSAgICAweGZmLCAweGZmLCAgICAgICAgICAgICAgICAgICAgIC8qIHJvYW0tbG93IHNuciwgbG93IHNuciBjb3VudCAqLwotICAgIDB4MDUsIDB4ZmYsICAgICAgICAgICAgICAgICAgICAgLyogSW5mcmEsIGFkaG9jIG1pc3NlZCBiY24gdGhyZXNoICovCi0gICAgMHgwMSwgMHgwYiwgMHg0ZSwgICAgICAgICAgICAgICAvKiBVU0EsIGhvcCBwYXR0ZXJuLCBob3AgcGF0IGxlbmd0aCAqLworCTAsIDAsCQkJLyogQWRob2Mgc3RhdGlvbiAqLworCSdMJywgJ0knLCAnTicsICdVJywgJ1gnLCAwLCAwLCAwLAkvKiAzMiBjaGFyIEVTU0lEICovCisJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKwkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJMSwgMCwJCQkvKiBBY3RpdmUgc2NhbiwgQ0EgTW9kZSAqLworCTAsIDAsIDAsIDAsIDAsIDAsCS8qIE5vIGRlZmF1bHQgTUFDIGFkZHIgICovCisJMHg3ZiwgMHhmZiwJCS8qIEZyYWcgdGhyZXNob2xkICovCisJMHgwMiwgMHgwMCwJCS8qIEhvcCB0aW1lICovCisJMHgwMCwgMHgwMSwJCS8qIEJlYWNvbiBwZXJpb2QgKi8KKwkweDAxLCAweDA3LCAweGEzLAkvKiBEVElNLCByZXRyaWVzLCBhY2sgdGltZW91dCAqLworCTB4MWQsIDB4ODIsIDB4Y2UsCS8qIFNJRlMsIERJRlMsIFBJRlMgKi8KKwkweDdmLCAweGZmLAkJLyogUlRTIHRocmVzaG9sZCAqLworCTB4ZmIsIDB4MWUsIDB4YzcsIDB4NWMsCS8qIHNjYW5fZHdlbGwsIG1heF9zY2FuX2R3ZWxsICovCisJMHgwNSwJCQkvKiBhc3NvYyByZXNwIHRpbWVvdXQgdGhyZXNoICovCisJMHgwNCwgMHgwMiwgMHg0LAkvKiBhZGhvYywgaW5mcmEsIHN1cGVyIGN5Y2xlIG1heCAqLworCTAsCQkJLyogUHJvbWlzY3VvdXMgbW9kZSAqLworCTB4MGMsIDB4MGJkLAkJLyogVW5pcXVlIHdvcmQgKi8KKwkweDRlLAkJCS8qIFNsb3QgdGltZSAoVEJEIHNlZW1zIHdyb25nKSAqLworCTB4ZmYsIDB4ZmYsCQkvKiByb2FtLWxvdyBzbnIsIGxvdyBzbnIgY291bnQgKi8KKwkweDA1LCAweGZmLAkJLyogSW5mcmEsIGFkaG9jIG1pc3NlZCBiY24gdGhyZXNoICovCisJMHgwMSwgMHgwYiwgMHg0ZSwJLyogVVNBLCBob3AgcGF0dGVybiwgaG9wIHBhdCBsZW5ndGggKi8KIC8qIGI0IC0gYjUgZGlmZmVyZW5jZXMgc3RhcnQgaGVyZSAqLwotICAgIDB4M2YsIDB4MGYsICAgICAgICAgICAgICAgICAgICAgLyogQ1cgbWF4LCBtaW4gKi8KLSAgICAweDA0LCAweDA4LCAgICAgICAgICAgICAgICAgICAgIC8qIE5vaXNlIGdhaW4sIGxpbWl0IG9mZnNldCAqLwotICAgIDB4MjgsIDB4MjgsICAgICAgICAgICAgICAgICAgICAgLyogZGV0IHJzc2ksIG1lZCBidXN5IG9mZnNldHMgKi8KLSAgICA3LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRldCBzeW5jIHRocmVzaCAqLwotICAgIDAsIDIsIDIgICAgICAgICAgICAgICAgICAgICAgICAgLyogdGVzdCBtb2RlLCBtaW4sIG1heCovCisJMHgzZiwgMHgwZiwJCS8qIENXIG1heCwgbWluICovCisJMHgwNCwgMHgwOCwJCS8qIE5vaXNlIGdhaW4sIGxpbWl0IG9mZnNldCAqLworCTB4MjgsIDB4MjgsCQkvKiBkZXQgcnNzaSwgbWVkIGJ1c3kgb2Zmc2V0cyAqLworCTcsCQkJLyogZGV0IHN5bmMgdGhyZXNoICovCisJMCwgMiwgMgkJCS8qIHRlc3QgbW9kZSwgbWluLCBtYXggKi8KIH07CisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGV0aDJfbGxjW10gPSB7MHhhYSwgMHhhYSwgMywgMCwgMCwgMH07CitzdGF0aWMgdW5zaWduZWQgY2hhciBldGgyX2xsY1tdID0geyAweGFhLCAweGFhLCAzLCAwLCAwLCAwIH07CiAKIHN0YXRpYyBjaGFyIGhvcF9wYXR0ZXJuX2xlbmd0aFtdID0geyAxLAotCSAgICAgVVNBX0hPUF9NT0QsICAgICAgICAgICAgIEVVUk9QRV9IT1BfTU9ELAotCSAgICAgSkFQQU5fSE9QX01PRCwgICAgICAgICAgIEtPUkVBX0hPUF9NT0QsCi0JICAgICBTUEFJTl9IT1BfTU9ELCAgICAgICAgICAgRlJBTkNFX0hPUF9NT0QsCi0JICAgICBJU1JBRUxfSE9QX01PRCwgICAgICAgICAgQVVTVFJBTElBX0hPUF9NT0QsCi0JICAgICBKQVBBTl9URVNUX0hPUF9NT0QKKwlVU0FfSE9QX01PRCwgRVVST1BFX0hPUF9NT0QsCisJSkFQQU5fSE9QX01PRCwgS09SRUFfSE9QX01PRCwKKwlTUEFJTl9IT1BfTU9ELCBGUkFOQ0VfSE9QX01PRCwKKwlJU1JBRUxfSE9QX01PRCwgQVVTVFJBTElBX0hPUF9NT0QsCisJSkFQQU5fVEVTVF9IT1BfTU9ECiB9OwogCi1zdGF0aWMgY2hhciByY3NpZFtdID0gIlJheWxpbmsvV2ViR2VhciB3aXJlbGVzcyBMQU4gLSBDb3JleSA8VGhvbWFzIGNvcmV5QHdvcmxkLnN0ZC5jb20+IjsKK3N0YXRpYyBjaGFyIHJjc2lkW10gPQorICAgICJSYXlsaW5rL1dlYkdlYXIgd2lyZWxlc3MgTEFOIC0gQ29yZXkgPFRob21hcyBjb3JleUB3b3JsZC5zdGQuY29tPiI7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgcmF5X25ldGRldl9vcHMgPSB7CisJLm5kb19pbml0IAkJPSByYXlfZGV2X2luaXQsCisJLm5kb19vcGVuIAkJPSByYXlfb3BlbiwKKwkubmRvX3N0b3AgCQk9IHJheV9kZXZfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IHJheV9kZXZfc3RhcnRfeG1pdCwKKwkubmRvX3NldF9jb25maWcJCT0gcmF5X2Rldl9jb25maWcsCisJLm5kb19nZXRfc3RhdHMJCT0gcmF5X2dldF9zdGF0cywKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IHNldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgIHJheV9hdHRhY2goKSBjcmVhdGVzIGFuICJpbnN0YW5jZSIgb2YgdGhlIGRyaXZlciwgYWxsb2NhdGluZwpAQCAtMzA2LDcxICszMjEsNjYgQEAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIHN0YXRpYyBpbnQgcmF5X3Byb2JlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKIHsKLSAgICByYXlfZGV2X3QgKmxvY2FsOwotICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJcmF5X2Rldl90ICpsb2NhbDsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCi0gICAgREVCVUcoMSwgInJheV9hdHRhY2goKVxuIik7CisJREVCVUcoMSwgInJheV9hdHRhY2goKVxuIik7CiAKLSAgICAvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgcHJpdmF0ZSBkZXZpY2Utc3BlY2lmaWMgZGF0YSAqLwotICAgIGRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihyYXlfZGV2X3QpKTsKLSAgICBpZiAoIWRldikKLQkgICAgZ290byBmYWlsX2FsbG9jX2RldjsKKwkvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgcHJpdmF0ZSBkZXZpY2Utc3BlY2lmaWMgZGF0YSAqLworCWRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihyYXlfZGV2X3QpKTsKKwlpZiAoIWRldikKKwkJZ290byBmYWlsX2FsbG9jX2RldjsKIAotICAgIGxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKLSAgICBsb2NhbC0+ZmluZGVyID0gcF9kZXY7CisJbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOworCWxvY2FsLT5maW5kZXIgPSBwX2RldjsKIAotICAgIC8qIFRoZSBpbyBzdHJ1Y3R1cmUgZGVzY3JpYmVzIElPIHBvcnQgbWFwcGluZy4gTm9uZSB1c2VkIGhlcmUgKi8KLSAgICBwX2Rldi0+aW8uTnVtUG9ydHMxID0gMDsKLSAgICBwX2Rldi0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKLSAgICBwX2Rldi0+aW8uSU9BZGRyTGluZXMgPSA1OworCS8qIFRoZSBpbyBzdHJ1Y3R1cmUgZGVzY3JpYmVzIElPIHBvcnQgbWFwcGluZy4gTm9uZSB1c2VkIGhlcmUgKi8KKwlwX2Rldi0+aW8uTnVtUG9ydHMxID0gMDsKKwlwX2Rldi0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKKwlwX2Rldi0+aW8uSU9BZGRyTGluZXMgPSA1OwogCi0gICAgLyogSW50ZXJydXB0IHNldHVwLiBGb3IgUENNQ0lBLCBkcml2ZXIgdGFrZXMgd2hhdCdzIGdpdmVuICovCi0gICAgcF9kZXYtPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRFlOQU1JQ19TSEFSSU5HIHwgSVJRX0hBTkRMRV9QUkVTRU5UOwotICAgIHBfZGV2LT5pcnEuSVJRSW5mbzEgPSBJUlFfTEVWRUxfSUQ7Ci0gICAgcF9kZXYtPmlycS5IYW5kbGVyID0gJnJheV9pbnRlcnJ1cHQ7CisJLyogSW50ZXJydXB0IHNldHVwLiBGb3IgUENNQ0lBLCBkcml2ZXIgdGFrZXMgd2hhdCdzIGdpdmVuICovCisJcF9kZXYtPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRFlOQU1JQ19TSEFSSU5HIHwgSVJRX0hBTkRMRV9QUkVTRU5UOworCXBfZGV2LT5pcnEuSVJRSW5mbzEgPSBJUlFfTEVWRUxfSUQ7CisJcF9kZXYtPmlycS5IYW5kbGVyID0gJnJheV9pbnRlcnJ1cHQ7CiAKLSAgICAvKiBHZW5lcmFsIHNvY2tldCBjb25maWd1cmF0aW9uICovCi0gICAgcF9kZXYtPmNvbmYuQXR0cmlidXRlcyA9IENPTkZfRU5BQkxFX0lSUTsKLSAgICBwX2Rldi0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87Ci0gICAgcF9kZXYtPmNvbmYuQ29uZmlnSW5kZXggPSAxOworCS8qIEdlbmVyYWwgc29ja2V0IGNvbmZpZ3VyYXRpb24gKi8KKwlwX2Rldi0+Y29uZi5BdHRyaWJ1dGVzID0gQ09ORl9FTkFCTEVfSVJROworCXBfZGV2LT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKKwlwX2Rldi0+Y29uZi5Db25maWdJbmRleCA9IDE7CiAKLSAgICBwX2Rldi0+cHJpdiA9IGRldjsKLSAgICBwX2Rldi0+aXJxLkluc3RhbmNlID0gZGV2OwotICAgIAotICAgIGxvY2FsLT5maW5kZXIgPSBwX2RldjsKLSAgICBsb2NhbC0+Y2FyZF9zdGF0dXMgPSBDQVJEX0lOU0VSVEVEOwotICAgIGxvY2FsLT5hdXRoZW50aWNhdGlvbl9zdGF0ZSA9IFVOQVVUSEVOVElDQVRFRDsKLSAgICBsb2NhbC0+bnVtX211bHRpID0gMDsKLSAgICBERUJVRygyLCJyYXlfYXR0YWNoIHBfZGV2ID0gJXAsICBkZXYgPSAlcCwgIGxvY2FsID0gJXAsIGludHIgPSAlcFxuIiwKLSAgICAgICAgICBwX2RldixkZXYsbG9jYWwsJnJheV9pbnRlcnJ1cHQpOworCXBfZGV2LT5wcml2ID0gZGV2OworCXBfZGV2LT5pcnEuSW5zdGFuY2UgPSBkZXY7CiAKLSAgICAvKiBSYXlsaW5rIGVudHJpZXMgaW4gdGhlIGRldmljZSBzdHJ1Y3R1cmUgKi8KLSAgICBkZXYtPmhhcmRfc3RhcnRfeG1pdCA9ICZyYXlfZGV2X3N0YXJ0X3htaXQ7Ci0gICAgZGV2LT5zZXRfY29uZmlnID0gJnJheV9kZXZfY29uZmlnOwotICAgIGRldi0+Z2V0X3N0YXRzICA9ICZyYXlfZ2V0X3N0YXRzOwotICAgIFNFVF9FVEhUT09MX09QUyhkZXYsICZuZXRkZXZfZXRodG9vbF9vcHMpOwotICAgIGRldi0+d2lyZWxlc3NfaGFuZGxlcnMgPSAmcmF5X2hhbmRsZXJfZGVmOworCWxvY2FsLT5maW5kZXIgPSBwX2RldjsKKwlsb2NhbC0+Y2FyZF9zdGF0dXMgPSBDQVJEX0lOU0VSVEVEOworCWxvY2FsLT5hdXRoZW50aWNhdGlvbl9zdGF0ZSA9IFVOQVVUSEVOVElDQVRFRDsKKwlsb2NhbC0+bnVtX211bHRpID0gMDsKKwlERUJVRygyLCAicmF5X2F0dGFjaCBwX2RldiA9ICVwLCAgZGV2ID0gJXAsICBsb2NhbCA9ICVwLCBpbnRyID0gJXBcbiIsCisJICAgICAgcF9kZXYsIGRldiwgbG9jYWwsICZyYXlfaW50ZXJydXB0KTsKKworCS8qIFJheWxpbmsgZW50cmllcyBpbiB0aGUgZGV2aWNlIHN0cnVjdHVyZSAqLworCWRldi0+bmV0ZGV2X29wcyA9ICZyYXlfbmV0ZGV2X29wczsKKwlTRVRfRVRIVE9PTF9PUFMoZGV2LCAmbmV0ZGV2X2V0aHRvb2xfb3BzKTsKKwlkZXYtPndpcmVsZXNzX2hhbmRsZXJzID0gJnJheV9oYW5kbGVyX2RlZjsKICNpZmRlZiBXSVJFTEVTU19TUFkKLSAgICBsb2NhbC0+d2lyZWxlc3NfZGF0YS5zcHlfZGF0YSA9ICZsb2NhbC0+c3B5X2RhdGE7Ci0gICAgZGV2LT53aXJlbGVzc19kYXRhID0gJmxvY2FsLT53aXJlbGVzc19kYXRhOwotI2VuZGlmCS8qIFdJUkVMRVNTX1NQWSAqLworCWxvY2FsLT53aXJlbGVzc19kYXRhLnNweV9kYXRhID0gJmxvY2FsLT5zcHlfZGF0YTsKKwlkZXYtPndpcmVsZXNzX2RhdGEgPSAmbG9jYWwtPndpcmVsZXNzX2RhdGE7CisjZW5kaWYgLyogV0lSRUxFU1NfU1BZICovCiAKLSAgICBkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9ICZzZXRfbXVsdGljYXN0X2xpc3Q7CiAKLSAgICBERUJVRygyLCJyYXlfY3MgcmF5X2F0dGFjaCBjYWxsaW5nIGV0aGVyX3NldHVwLilcbiIpOwotICAgIGRldi0+aW5pdCA9ICZyYXlfZGV2X2luaXQ7Ci0gICAgZGV2LT5vcGVuID0gJnJheV9vcGVuOwotICAgIGRldi0+c3RvcCA9ICZyYXlfZGV2X2Nsb3NlOwotICAgIG5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwlERUJVRygyLCAicmF5X2NzIHJheV9hdHRhY2ggY2FsbGluZyBldGhlcl9zZXR1cC4pXG4iKTsKKwluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAKLSAgICBpbml0X3RpbWVyKCZsb2NhbC0+dGltZXIpOworCWluaXRfdGltZXIoJmxvY2FsLT50aW1lcik7CiAKLSAgICB0aGlzX2RldmljZSA9IHBfZGV2OwotICAgIHJldHVybiByYXlfY29uZmlnKHBfZGV2KTsKKwl0aGlzX2RldmljZSA9IHBfZGV2OworCXJldHVybiByYXlfY29uZmlnKHBfZGV2KTsKIAogZmFpbF9hbGxvY19kZXY6Ci0gICAgcmV0dXJuIC1FTk9NRU07CisJcmV0dXJuIC1FTk9NRU07CiB9IC8qIHJheV9hdHRhY2ggKi8KKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgIFRoaXMgZGVsZXRlcyBhIGRyaXZlciAiaW5zdGFuY2UiLiAgVGhlIGRldmljZSBpcyBkZS1yZWdpc3RlcmVkCiAgICAgd2l0aCBDYXJkIFNlcnZpY2VzLiAgSWYgaXQgaGFzIGJlZW4gcmVsZWFzZWQsIGFsbCBsb2NhbCBkYXRhCkBAIC0zNzksMjUgKzM4OSwyNyBAQAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogc3RhdGljIHZvaWQgcmF5X2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotICAgIHJheV9kZXZfdCAqbG9jYWw7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwlyYXlfZGV2X3QgKmxvY2FsOwogCi0gICAgREVCVUcoMSwgInJheV9kZXRhY2goMHglcClcbiIsIGxpbmspOworCURFQlVHKDEsICJyYXlfZGV0YWNoKDB4JXApXG4iLCBsaW5rKTsKIAotICAgIHRoaXNfZGV2aWNlID0gTlVMTDsKLSAgICBkZXYgPSBsaW5rLT5wcml2OworCXRoaXNfZGV2aWNlID0gTlVMTDsKKwlkZXYgPSBsaW5rLT5wcml2OwogCi0gICAgcmF5X3JlbGVhc2UobGluayk7CisJcmF5X3JlbGVhc2UobGluayk7CiAKLSAgICBsb2NhbCA9IG5ldGRldl9wcml2KGRldik7Ci0gICAgZGVsX3RpbWVyKCZsb2NhbC0+dGltZXIpOworCWxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlkZWxfdGltZXIoJmxvY2FsLT50aW1lcik7CiAKLSAgICBpZiAobGluay0+cHJpdikgewotCWlmIChsaW5rLT5kZXZfbm9kZSkgdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKLSAgICAgICAgZnJlZV9uZXRkZXYoZGV2KTsKLSAgICB9Ci0gICAgREVCVUcoMiwicmF5X2NzIHJheV9kZXRhY2ggZW5kaW5nXG4iKTsKKwlpZiAobGluay0+cHJpdikgeworCQlpZiAobGluay0+ZGV2X25vZGUpCisJCQl1bnJlZ2lzdGVyX25ldGRldihkZXYpOworCQlmcmVlX25ldGRldihkZXYpOworCX0KKwlERUJVRygyLCAicmF5X2NzIHJheV9kZXRhY2ggZW5kaW5nXG4iKTsKIH0gLyogcmF5X2RldGFjaCAqLworCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgcmF5X2NvbmZpZygpIGlzIHJ1biBhZnRlciBhIENBUkRfSU5TRVJUSU9OIGV2ZW50CiAgICAgaXMgcmVjZWl2ZWQsIHRvIGNvbmZpZ3VyZSB0aGUgUENNQ0lBIHNvY2tldCwgYW5kIHRvIG1ha2UgdGhlCkBAIC00MDgsOTIgKzQyMCwxMDEgQEAKICNkZWZpbmUgTUFYX1RVUExFX1NJWkUgMTI4CiBzdGF0aWMgaW50IHJheV9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0gICAgaW50IGxhc3RfZm4gPSAwLCBsYXN0X3JldCA9IDA7Ci0gICAgaW50IGk7Ci0gICAgd2luX3JlcV90IHJlcTsKLSAgICBtZW1yZXFfdCBtZW07Ci0gICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKWxpbmstPnByaXY7Ci0gICAgcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7CisJaW50IGxhc3RfZm4gPSAwLCBsYXN0X3JldCA9IDA7CisJaW50IGk7CisJd2luX3JlcV90IHJlcTsKKwltZW1yZXFfdCBtZW07CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKWxpbmstPnByaXY7CisJcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7CiAKLSAgICBERUJVRygxLCAicmF5X2NvbmZpZygweCVwKVxuIiwgbGluayk7CisJREVCVUcoMSwgInJheV9jb25maWcoMHglcClcbiIsIGxpbmspOwogCi0gICAgLyogRGV0ZXJtaW5lIGNhcmQgdHlwZSBhbmQgZmlybXdhcmUgdmVyc2lvbiAqLwotICAgIHByaW50ayhLRVJOX0lORk8gInJheV9jcyBEZXRlY3RlZDogJXMlcyVzJXNcbiIsCi0JICAgbGluay0+cHJvZF9pZFswXSA/IGxpbmstPnByb2RfaWRbMF0gOiAiICIsCi0JICAgbGluay0+cHJvZF9pZFsxXSA/IGxpbmstPnByb2RfaWRbMV0gOiAiICIsCi0JICAgbGluay0+cHJvZF9pZFsyXSA/IGxpbmstPnByb2RfaWRbMl0gOiAiICIsCi0JICAgbGluay0+cHJvZF9pZFszXSA/IGxpbmstPnByb2RfaWRbM10gOiAiICIpOworCS8qIERldGVybWluZSBjYXJkIHR5cGUgYW5kIGZpcm13YXJlIHZlcnNpb24gKi8KKwlwcmludGsoS0VSTl9JTkZPICJyYXlfY3MgRGV0ZWN0ZWQ6ICVzJXMlcyVzXG4iLAorCSAgICAgICBsaW5rLT5wcm9kX2lkWzBdID8gbGluay0+cHJvZF9pZFswXSA6ICIgIiwKKwkgICAgICAgbGluay0+cHJvZF9pZFsxXSA/IGxpbmstPnByb2RfaWRbMV0gOiAiICIsCisJICAgICAgIGxpbmstPnByb2RfaWRbMl0gPyBsaW5rLT5wcm9kX2lkWzJdIDogIiAiLAorCSAgICAgICBsaW5rLT5wcm9kX2lkWzNdID8gbGluay0+cHJvZF9pZFszXSA6ICIgIik7CiAKLSAgICAvKiBOb3cgYWxsb2NhdGUgYW4gaW50ZXJydXB0IGxpbmUuICBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdAotICAgICAgIGFjdHVhbGx5IGFzc2lnbiBhIGhhbmRsZXIgdG8gdGhlIGludGVycnVwdC4KLSAgICAqLwotICAgIENTX0NIRUNLKFJlcXVlc3RJUlEsIHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKSk7Ci0gICAgZGV2LT5pcnEgPSBsaW5rLT5pcnEuQXNzaWduZWRJUlE7Ci0gICAgCi0gICAgLyogVGhpcyBhY3R1YWxseSBjb25maWd1cmVzIHRoZSBQQ01DSUEgc29ja2V0IC0tIHNldHRpbmcgdXAKLSAgICAgICB0aGUgSS9PIHdpbmRvd3MgYW5kIHRoZSBpbnRlcnJ1cHQgbWFwcGluZy4KLSAgICAqLwotICAgIENTX0NIRUNLKFJlcXVlc3RDb25maWd1cmF0aW9uLCBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKSk7CisJLyogTm93IGFsbG9jYXRlIGFuIGludGVycnVwdCBsaW5lLiAgTm90ZSB0aGF0IHRoaXMgZG9lcyBub3QKKwkgICBhY3R1YWxseSBhc3NpZ24gYSBoYW5kbGVyIHRvIHRoZSBpbnRlcnJ1cHQuCisJICovCisJQ1NfQ0hFQ0soUmVxdWVzdElSUSwgcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpKTsKKwlkZXYtPmlycSA9IGxpbmstPmlycS5Bc3NpZ25lZElSUTsKKworCS8qIFRoaXMgYWN0dWFsbHkgY29uZmlndXJlcyB0aGUgUENNQ0lBIHNvY2tldCAtLSBzZXR0aW5nIHVwCisJICAgdGhlIEkvTyB3aW5kb3dzIGFuZCB0aGUgaW50ZXJydXB0IG1hcHBpbmcuCisJICovCisJQ1NfQ0hFQ0soUmVxdWVzdENvbmZpZ3VyYXRpb24sCisJCSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKSk7CiAKIC8qKiogU2V0IHVwIDMyayB3aW5kb3cgZm9yIHNoYXJlZCBtZW1vcnkgKHRyYW5zbWl0IGFuZCBjb250cm9sKSAqKioqKioqKioqKiovCi0gICAgcmVxLkF0dHJpYnV0ZXMgPSBXSU5fREFUQV9XSURUSF84IHwgV0lOX01FTU9SWV9UWVBFX0NNIHwgV0lOX0VOQUJMRSB8IFdJTl9VU0VfV0FJVDsKLSAgICByZXEuQmFzZSA9IDA7Ci0gICAgcmVxLlNpemUgPSAweDgwMDA7Ci0gICAgcmVxLkFjY2Vzc1NwZWVkID0gcmF5X21lbV9zcGVlZDsKLSAgICBDU19DSEVDSyhSZXF1ZXN0V2luZG93LCBwY21jaWFfcmVxdWVzdF93aW5kb3coJmxpbmssICZyZXEsICZsaW5rLT53aW4pKTsKLSAgICBtZW0uQ2FyZE9mZnNldCA9IDB4MDAwMDsgbWVtLlBhZ2UgPSAwOwotICAgIENTX0NIRUNLKE1hcE1lbVBhZ2UsIHBjbWNpYV9tYXBfbWVtX3BhZ2UobGluay0+d2luLCAmbWVtKSk7Ci0gICAgbG9jYWwtPnNyYW0gPSBpb3JlbWFwKHJlcS5CYXNlLHJlcS5TaXplKTsKKwlyZXEuQXR0cmlidXRlcyA9CisJICAgIFdJTl9EQVRBX1dJRFRIXzggfCBXSU5fTUVNT1JZX1RZUEVfQ00gfCBXSU5fRU5BQkxFIHwgV0lOX1VTRV9XQUlUOworCXJlcS5CYXNlID0gMDsKKwlyZXEuU2l6ZSA9IDB4ODAwMDsKKwlyZXEuQWNjZXNzU3BlZWQgPSByYXlfbWVtX3NwZWVkOworCUNTX0NIRUNLKFJlcXVlc3RXaW5kb3csIHBjbWNpYV9yZXF1ZXN0X3dpbmRvdygmbGluaywgJnJlcSwgJmxpbmstPndpbikpOworCW1lbS5DYXJkT2Zmc2V0ID0gMHgwMDAwOworCW1lbS5QYWdlID0gMDsKKwlDU19DSEVDSyhNYXBNZW1QYWdlLCBwY21jaWFfbWFwX21lbV9wYWdlKGxpbmstPndpbiwgJm1lbSkpOworCWxvY2FsLT5zcmFtID0gaW9yZW1hcChyZXEuQmFzZSwgcmVxLlNpemUpOwogCiAvKioqIFNldCB1cCAxNmsgd2luZG93IGZvciBzaGFyZWQgbWVtb3J5IChyZWNlaXZlIGJ1ZmZlcikgKioqKioqKioqKioqKioqLwotICAgIHJlcS5BdHRyaWJ1dGVzID0gV0lOX0RBVEFfV0lEVEhfOCB8IFdJTl9NRU1PUllfVFlQRV9DTSB8IFdJTl9FTkFCTEUgfCBXSU5fVVNFX1dBSVQ7Ci0gICAgcmVxLkJhc2UgPSAwOwotICAgIHJlcS5TaXplID0gMHg0MDAwOwotICAgIHJlcS5BY2Nlc3NTcGVlZCA9IHJheV9tZW1fc3BlZWQ7Ci0gICAgQ1NfQ0hFQ0soUmVxdWVzdFdpbmRvdywgcGNtY2lhX3JlcXVlc3Rfd2luZG93KCZsaW5rLCAmcmVxLCAmbG9jYWwtPnJtZW1faGFuZGxlKSk7Ci0gICAgbWVtLkNhcmRPZmZzZXQgPSAweDgwMDA7IG1lbS5QYWdlID0gMDsKLSAgICBDU19DSEVDSyhNYXBNZW1QYWdlLCBwY21jaWFfbWFwX21lbV9wYWdlKGxvY2FsLT5ybWVtX2hhbmRsZSwgJm1lbSkpOwotICAgIGxvY2FsLT5ybWVtID0gaW9yZW1hcChyZXEuQmFzZSxyZXEuU2l6ZSk7CisJcmVxLkF0dHJpYnV0ZXMgPQorCSAgICBXSU5fREFUQV9XSURUSF84IHwgV0lOX01FTU9SWV9UWVBFX0NNIHwgV0lOX0VOQUJMRSB8IFdJTl9VU0VfV0FJVDsKKwlyZXEuQmFzZSA9IDA7CisJcmVxLlNpemUgPSAweDQwMDA7CisJcmVxLkFjY2Vzc1NwZWVkID0gcmF5X21lbV9zcGVlZDsKKwlDU19DSEVDSyhSZXF1ZXN0V2luZG93LAorCQkgcGNtY2lhX3JlcXVlc3Rfd2luZG93KCZsaW5rLCAmcmVxLCAmbG9jYWwtPnJtZW1faGFuZGxlKSk7CisJbWVtLkNhcmRPZmZzZXQgPSAweDgwMDA7CisJbWVtLlBhZ2UgPSAwOworCUNTX0NIRUNLKE1hcE1lbVBhZ2UsIHBjbWNpYV9tYXBfbWVtX3BhZ2UobG9jYWwtPnJtZW1faGFuZGxlLCAmbWVtKSk7CisJbG9jYWwtPnJtZW0gPSBpb3JlbWFwKHJlcS5CYXNlLCByZXEuU2l6ZSk7CiAKIC8qKiogU2V0IHVwIHdpbmRvdyBmb3IgYXR0cmlidXRlIG1lbW9yeSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgICByZXEuQXR0cmlidXRlcyA9IFdJTl9EQVRBX1dJRFRIXzggfCBXSU5fTUVNT1JZX1RZUEVfQU0gfCBXSU5fRU5BQkxFIHwgV0lOX1VTRV9XQUlUOwotICAgIHJlcS5CYXNlID0gMDsKLSAgICByZXEuU2l6ZSA9IDB4MTAwMDsKLSAgICByZXEuQWNjZXNzU3BlZWQgPSByYXlfbWVtX3NwZWVkOwotICAgIENTX0NIRUNLKFJlcXVlc3RXaW5kb3csIHBjbWNpYV9yZXF1ZXN0X3dpbmRvdygmbGluaywgJnJlcSwgJmxvY2FsLT5hbWVtX2hhbmRsZSkpOwotICAgIG1lbS5DYXJkT2Zmc2V0ID0gMHgwMDAwOyBtZW0uUGFnZSA9IDA7Ci0gICAgQ1NfQ0hFQ0soTWFwTWVtUGFnZSwgcGNtY2lhX21hcF9tZW1fcGFnZShsb2NhbC0+YW1lbV9oYW5kbGUsICZtZW0pKTsKLSAgICBsb2NhbC0+YW1lbSA9IGlvcmVtYXAocmVxLkJhc2UscmVxLlNpemUpOworCXJlcS5BdHRyaWJ1dGVzID0KKwkgICAgV0lOX0RBVEFfV0lEVEhfOCB8IFdJTl9NRU1PUllfVFlQRV9BTSB8IFdJTl9FTkFCTEUgfCBXSU5fVVNFX1dBSVQ7CisJcmVxLkJhc2UgPSAwOworCXJlcS5TaXplID0gMHgxMDAwOworCXJlcS5BY2Nlc3NTcGVlZCA9IHJheV9tZW1fc3BlZWQ7CisJQ1NfQ0hFQ0soUmVxdWVzdFdpbmRvdywKKwkJIHBjbWNpYV9yZXF1ZXN0X3dpbmRvdygmbGluaywgJnJlcSwgJmxvY2FsLT5hbWVtX2hhbmRsZSkpOworCW1lbS5DYXJkT2Zmc2V0ID0gMHgwMDAwOworCW1lbS5QYWdlID0gMDsKKwlDU19DSEVDSyhNYXBNZW1QYWdlLCBwY21jaWFfbWFwX21lbV9wYWdlKGxvY2FsLT5hbWVtX2hhbmRsZSwgJm1lbSkpOworCWxvY2FsLT5hbWVtID0gaW9yZW1hcChyZXEuQmFzZSwgcmVxLlNpemUpOwogCi0gICAgREVCVUcoMywicmF5X2NvbmZpZyBzcmFtPSVwXG4iLGxvY2FsLT5zcmFtKTsKLSAgICBERUJVRygzLCJyYXlfY29uZmlnIHJtZW09JXBcbiIsbG9jYWwtPnJtZW0pOwotICAgIERFQlVHKDMsInJheV9jb25maWcgYW1lbT0lcFxuIixsb2NhbC0+YW1lbSk7Ci0gICAgaWYgKHJheV9pbml0KGRldikgPCAwKSB7Ci0gICAgICAgIHJheV9yZWxlYXNlKGxpbmspOwotICAgICAgICByZXR1cm4gLUVOT0RFVjsKLSAgICB9CisJREVCVUcoMywgInJheV9jb25maWcgc3JhbT0lcFxuIiwgbG9jYWwtPnNyYW0pOworCURFQlVHKDMsICJyYXlfY29uZmlnIHJtZW09JXBcbiIsIGxvY2FsLT5ybWVtKTsKKwlERUJVRygzLCAicmF5X2NvbmZpZyBhbWVtPSVwXG4iLCBsb2NhbC0+YW1lbSk7CisJaWYgKHJheV9pbml0KGRldikgPCAwKSB7CisJCXJheV9yZWxlYXNlKGxpbmspOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CiAKLSAgICBTRVRfTkVUREVWX0RFVihkZXYsICZoYW5kbGVfdG9fZGV2KGxpbmspKTsKLSAgICBpID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7Ci0gICAgaWYgKGkgIT0gMCkgewotICAgICAgICBwcmludGsoInJheV9jb25maWcgcmVnaXN0ZXJfbmV0ZGV2KCkgZmFpbGVkXG4iKTsKLSAgICAgICAgcmF5X3JlbGVhc2UobGluayk7Ci0gICAgICAgIHJldHVybiBpOwotICAgIH0KKwlTRVRfTkVUREVWX0RFVihkZXYsICZoYW5kbGVfdG9fZGV2KGxpbmspKTsKKwlpID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CisJaWYgKGkgIT0gMCkgeworCQlwcmludGsoInJheV9jb25maWcgcmVnaXN0ZXJfbmV0ZGV2KCkgZmFpbGVkXG4iKTsKKwkJcmF5X3JlbGVhc2UobGluayk7CisJCXJldHVybiBpOworCX0KIAotICAgIHN0cmNweShsb2NhbC0+bm9kZS5kZXZfbmFtZSwgZGV2LT5uYW1lKTsKLSAgICBsaW5rLT5kZXZfbm9kZSA9ICZsb2NhbC0+bm9kZTsKKwlzdHJjcHkobG9jYWwtPm5vZGUuZGV2X25hbWUsIGRldi0+bmFtZSk7CisJbGluay0+ZGV2X25vZGUgPSAmbG9jYWwtPm5vZGU7CiAKLSAgICBwcmludGsoS0VSTl9JTkZPICIlczogUmF5TGluaywgaXJxICVkLCBod19hZGRyICVwTVxuIiwKLSAgICAgICBkZXYtPm5hbWUsIGRldi0+aXJxLCBkZXYtPmRldl9hZGRyKTsKKwlwcmludGsoS0VSTl9JTkZPICIlczogUmF5TGluaywgaXJxICVkLCBod19hZGRyICVwTVxuIiwKKwkgICAgICAgZGV2LT5uYW1lLCBkZXYtPmlycSwgZGV2LT5kZXZfYWRkcik7CiAKLSAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKIAogY3NfZmFpbGVkOgotICAgIGNzX2Vycm9yKGxpbmssIGxhc3RfZm4sIGxhc3RfcmV0KTsKKwljc19lcnJvcihsaW5rLCBsYXN0X2ZuLCBsYXN0X3JldCk7CiAKLSAgICByYXlfcmVsZWFzZShsaW5rKTsKLSAgICByZXR1cm4gLUVOT0RFVjsKKwlyYXlfcmVsZWFzZShsaW5rKTsKKwlyZXR1cm4gLUVOT0RFVjsKIH0gLyogcmF5X2NvbmZpZyAqLwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBjY3MgX19pb21lbSAqY2NzX2Jhc2UocmF5X2Rldl90ICpkZXYpCkBAIC01MTYsMjY3ICs1MzcsMjc4IEBACiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiBzdGF0aWMgaW50IHJheV9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0gICAgaW50IGk7Ci0gICAgVUNIQVIgKnA7Ci0gICAgc3RydWN0IGNjcyBfX2lvbWVtICpwY2NzOwotICAgIHJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwotICAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKLSAgICBERUJVRygxLCAicmF5X2luaXQoMHglcClcbiIsIGRldik7Ci0gICAgaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgewotICAgICAgICBERUJVRygwLCJyYXlfaW5pdCAtIGRldmljZSBub3QgcHJlc2VudFxuIik7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9CisJaW50IGk7CisJVUNIQVIgKnA7CisJc3RydWN0IGNjcyBfX2lvbWVtICpwY2NzOworCXJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKKwlERUJVRygxLCAicmF5X2luaXQoMHglcClcbiIsIGRldik7CisJaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgeworCQlERUJVRygwLCAicmF5X2luaXQgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOworCQlyZXR1cm4gLTE7CisJfQogCi0gICAgbG9jYWwtPm5ldF90eXBlID0gbmV0X3R5cGU7Ci0gICAgbG9jYWwtPnN0YV90eXBlID0gVFlQRV9TVEE7CisJbG9jYWwtPm5ldF90eXBlID0gbmV0X3R5cGU7CisJbG9jYWwtPnN0YV90eXBlID0gVFlQRV9TVEE7CiAKLSAgICAvKiBDb3B5IHRoZSBzdGFydHVwIHJlc3VsdHMgdG8gbG9jYWwgbWVtb3J5ICovCi0gICAgbWVtY3B5X2Zyb21pbygmbG9jYWwtPnN0YXJ0dXBfcmVzLCBsb2NhbC0+c3JhbSArIEVDRl9UT19IT1NUX0JBU0UsXAotICAgICAgICAgICBzaXplb2Yoc3RydWN0IHN0YXJ0dXBfcmVzXzYpKTsKKwkvKiBDb3B5IHRoZSBzdGFydHVwIHJlc3VsdHMgdG8gbG9jYWwgbWVtb3J5ICovCisJbWVtY3B5X2Zyb21pbygmbG9jYWwtPnN0YXJ0dXBfcmVzLCBsb2NhbC0+c3JhbSArIEVDRl9UT19IT1NUX0JBU0UsCisJCSAgICAgIHNpemVvZihzdHJ1Y3Qgc3RhcnR1cF9yZXNfNikpOwogCi0gICAgLyogQ2hlY2sgUG93ZXIgdXAgdGVzdCBzdGF0dXMgYW5kIGdldCBtYWMgYWRkcmVzcyBmcm9tIGNhcmQgKi8KLSAgICBpZiAobG9jYWwtPnN0YXJ0dXBfcmVzLnN0YXJ0dXBfd29yZCAhPSAweDgwKSB7Ci0gICAgcHJpbnRrKEtFUk5fSU5GTyAicmF5X2luaXQgRVJST1IgY2FyZCBzdGF0dXMgPSAlMnhcbiIsCi0gICAgICAgICAgIGxvY2FsLT5zdGFydHVwX3Jlcy5zdGFydHVwX3dvcmQpOwotICAgICAgICBsb2NhbC0+Y2FyZF9zdGF0dXMgPSBDQVJEX0lOSVRfRVJST1I7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9CisJLyogQ2hlY2sgUG93ZXIgdXAgdGVzdCBzdGF0dXMgYW5kIGdldCBtYWMgYWRkcmVzcyBmcm9tIGNhcmQgKi8KKwlpZiAobG9jYWwtPnN0YXJ0dXBfcmVzLnN0YXJ0dXBfd29yZCAhPSAweDgwKSB7CisJCXByaW50ayhLRVJOX0lORk8gInJheV9pbml0IEVSUk9SIGNhcmQgc3RhdHVzID0gJTJ4XG4iLAorCQkgICAgICAgbG9jYWwtPnN0YXJ0dXBfcmVzLnN0YXJ0dXBfd29yZCk7CisJCWxvY2FsLT5jYXJkX3N0YXR1cyA9IENBUkRfSU5JVF9FUlJPUjsKKwkJcmV0dXJuIC0xOworCX0KIAotICAgIGxvY2FsLT5md192ZXIgPSBsb2NhbC0+c3RhcnR1cF9yZXMuZmlybXdhcmVfdmVyc2lvblswXTsKLSAgICBsb2NhbC0+ZndfYmxkID0gbG9jYWwtPnN0YXJ0dXBfcmVzLmZpcm13YXJlX3ZlcnNpb25bMV07Ci0gICAgbG9jYWwtPmZ3X3ZhciA9IGxvY2FsLT5zdGFydHVwX3Jlcy5maXJtd2FyZV92ZXJzaW9uWzJdOwotICAgIERFQlVHKDEsInJheV9pbml0IGZpcm13YXJlIHZlcnNpb24gJWQuJWQgXG4iLGxvY2FsLT5md192ZXIsIGxvY2FsLT5md19ibGQpOworCWxvY2FsLT5md192ZXIgPSBsb2NhbC0+c3RhcnR1cF9yZXMuZmlybXdhcmVfdmVyc2lvblswXTsKKwlsb2NhbC0+ZndfYmxkID0gbG9jYWwtPnN0YXJ0dXBfcmVzLmZpcm13YXJlX3ZlcnNpb25bMV07CisJbG9jYWwtPmZ3X3ZhciA9IGxvY2FsLT5zdGFydHVwX3Jlcy5maXJtd2FyZV92ZXJzaW9uWzJdOworCURFQlVHKDEsICJyYXlfaW5pdCBmaXJtd2FyZSB2ZXJzaW9uICVkLiVkIFxuIiwgbG9jYWwtPmZ3X3ZlciwKKwkgICAgICBsb2NhbC0+ZndfYmxkKTsKIAotICAgIGxvY2FsLT50aWJfbGVuZ3RoID0gMHgyMDsKLSAgICBpZiAoKGxvY2FsLT5md192ZXIgPT0gNSkgJiYgKGxvY2FsLT5md19ibGQgPj0gMzApKQotICAgICAgICBsb2NhbC0+dGliX2xlbmd0aCA9IGxvY2FsLT5zdGFydHVwX3Jlcy50aWJfbGVuZ3RoOwotICAgIERFQlVHKDIsInJheV9pbml0IHRpYl9sZW5ndGggPSAweCUwMnhcbiIsIGxvY2FsLT50aWJfbGVuZ3RoKTsKLSAgICAvKiBJbml0aWFsaXplIENDUydzIHRvIGJ1ZmZlciBmcmVlIHN0YXRlICovCi0gICAgcGNjcyA9IGNjc19iYXNlKGxvY2FsKTsKLSAgICBmb3IgKGk9MDsgIGk8TlVNQkVSX09GX0NDUzsgIGkrKykgewotICAgICAgICB3cml0ZWIoQ0NTX0JVRkZFUl9GUkVFLCAmKHBjY3MrKyktPmJ1ZmZlcl9zdGF0dXMpOwotICAgIH0KLSAgICBpbml0X3N0YXJ0dXBfcGFyYW1zKGxvY2FsKTsKKwlsb2NhbC0+dGliX2xlbmd0aCA9IDB4MjA7CisJaWYgKChsb2NhbC0+ZndfdmVyID09IDUpICYmIChsb2NhbC0+ZndfYmxkID49IDMwKSkKKwkJbG9jYWwtPnRpYl9sZW5ndGggPSBsb2NhbC0+c3RhcnR1cF9yZXMudGliX2xlbmd0aDsKKwlERUJVRygyLCAicmF5X2luaXQgdGliX2xlbmd0aCA9IDB4JTAyeFxuIiwgbG9jYWwtPnRpYl9sZW5ndGgpOworCS8qIEluaXRpYWxpemUgQ0NTJ3MgdG8gYnVmZmVyIGZyZWUgc3RhdGUgKi8KKwlwY2NzID0gY2NzX2Jhc2UobG9jYWwpOworCWZvciAoaSA9IDA7IGkgPCBOVU1CRVJfT0ZfQ0NTOyBpKyspIHsKKwkJd3JpdGViKENDU19CVUZGRVJfRlJFRSwgJihwY2NzKyspLT5idWZmZXJfc3RhdHVzKTsKKwl9CisJaW5pdF9zdGFydHVwX3BhcmFtcyhsb2NhbCk7CiAKLSAgICAvKiBjb3B5IG1hYyBhZGRyZXNzIHRvIHN0YXJ0dXAgcGFyYW1ldGVycyAqLwotICAgIGlmIChwYXJzZV9hZGRyKHBoeV9hZGRyLCBsb2NhbC0+c3Bhcm0uYjQuYV9tYWNfYWRkcikpCi0gICAgewotICAgICAgICBwID0gbG9jYWwtPnNwYXJtLmI0LmFfbWFjX2FkZHI7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIG1lbWNweSgmbG9jYWwtPnNwYXJtLmI0LmFfbWFjX2FkZHIsCi0gICAgICAgICAgICAgICAmbG9jYWwtPnN0YXJ0dXBfcmVzLnN0YXRpb25fYWRkciwgQUREUkxFTik7Ci0gICAgICAgIHAgPSBsb2NhbC0+c3Bhcm0uYjQuYV9tYWNfYWRkcjsKLSAgICB9CisJLyogY29weSBtYWMgYWRkcmVzcyB0byBzdGFydHVwIHBhcmFtZXRlcnMgKi8KKwlpZiAocGFyc2VfYWRkcihwaHlfYWRkciwgbG9jYWwtPnNwYXJtLmI0LmFfbWFjX2FkZHIpKSB7CisJCXAgPSBsb2NhbC0+c3Bhcm0uYjQuYV9tYWNfYWRkcjsKKwl9IGVsc2UgeworCQltZW1jcHkoJmxvY2FsLT5zcGFybS5iNC5hX21hY19hZGRyLAorCQkgICAgICAgJmxvY2FsLT5zdGFydHVwX3Jlcy5zdGF0aW9uX2FkZHIsIEFERFJMRU4pOworCQlwID0gbG9jYWwtPnNwYXJtLmI0LmFfbWFjX2FkZHI7CisJfQogCi0gICAgY2xlYXJfaW50ZXJydXB0KGxvY2FsKTsgLyogQ2xlYXIgYW55IGludGVycnVwdCBmcm9tIHRoZSBjYXJkICovCi0gICAgbG9jYWwtPmNhcmRfc3RhdHVzID0gQ0FSRF9BV0FJVElOR19QQVJBTTsKLSAgICBERUJVRygyLCJyYXlfaW5pdCBlbmRpbmdcbiIpOwotICAgIHJldHVybiAwOworCWNsZWFyX2ludGVycnVwdChsb2NhbCk7CS8qIENsZWFyIGFueSBpbnRlcnJ1cHQgZnJvbSB0aGUgY2FyZCAqLworCWxvY2FsLT5jYXJkX3N0YXR1cyA9IENBUkRfQVdBSVRJTkdfUEFSQU07CisJREVCVUcoMiwgInJheV9pbml0IGVuZGluZ1xuIik7CisJcmV0dXJuIDA7CiB9IC8qIHJheV9pbml0ICovCisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIC8qIERvd25sb2FkIHN0YXJ0dXAgcGFyYW1ldGVycyB0byB0aGUgY2FyZCBhbmQgY29tbWFuZCBpdCB0byByZWFkIHRoZW0gICAgICAgKi8KIHN0YXRpYyBpbnQgZGxfc3RhcnR1cF9wYXJhbXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLSAgICBpbnQgY2NzaW5kZXg7Ci0gICAgcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7Ci0gICAgc3RydWN0IGNjcyBfX2lvbWVtICpwY2NzOwotICAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKKwlpbnQgY2NzaW5kZXg7CisJcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGNjcyBfX2lvbWVtICpwY2NzOworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKIAotICAgIERFQlVHKDEsImRsX3N0YXJ0dXBfcGFyYW1zIGVudGVyZWRcbiIpOwotICAgIGlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKLSAgICAgICAgREVCVUcoMiwicmF5X2NzIGRsX3N0YXJ0dXBfcGFyYW1zIC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICAKLSAgICAvKiBDb3B5IHBhcmFtZXRlcnMgdG8gaG9zdCB0byBFQ0YgYXJlYSAqLwotICAgIGlmIChsb2NhbC0+ZndfdmVyID09IDB4NTUpIAotICAgICAgICBtZW1jcHlfdG9pbyhsb2NhbC0+c3JhbSArIEhPU1RfVE9fRUNGX0JBU0UsICZsb2NhbC0+c3Bhcm0uYjQsCi0gICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IGI0X3N0YXJ0dXBfcGFyYW1zKSk7Ci0gICAgZWxzZQotICAgICAgICBtZW1jcHlfdG9pbyhsb2NhbC0+c3JhbSArIEhPU1RfVE9fRUNGX0JBU0UsICZsb2NhbC0+c3Bhcm0uYjUsCi0gICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IGI1X3N0YXJ0dXBfcGFyYW1zKSk7CisJREVCVUcoMSwgImRsX3N0YXJ0dXBfcGFyYW1zIGVudGVyZWRcbiIpOworCWlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKKwkJREVCVUcoMiwgInJheV9jcyBkbF9zdGFydHVwX3BhcmFtcyAtIGRldmljZSBub3QgcHJlc2VudFxuIik7CisJCXJldHVybiAtMTsKKwl9CiAKLSAgICAKLSAgICAvKiBGaWxsIGluIHRoZSBDQ1MgZmllbGRzIGZvciB0aGUgRUNGICovCi0gICAgaWYgKChjY3NpbmRleCA9IGdldF9mcmVlX2Njcyhsb2NhbCkpIDwgMCkgcmV0dXJuIC0xOwotICAgIGxvY2FsLT5kbF9wYXJhbV9jY3MgPSBjY3NpbmRleDsKLSAgICBwY2NzID0gY2NzX2Jhc2UobG9jYWwpICsgY2NzaW5kZXg7Ci0gICAgd3JpdGViKENDU19ET1dOTE9BRF9TVEFSVFVQX1BBUkFNUywgJnBjY3MtPmNtZCk7Ci0gICAgREVCVUcoMiwiZGxfc3RhcnR1cF9wYXJhbXMgc3RhcnQgY2NzaW5kZXggPSAlZFxuIiwgbG9jYWwtPmRsX3BhcmFtX2Njcyk7Ci0gICAgLyogSW50ZXJydXB0IHRoZSBmaXJtd2FyZSB0byBwcm9jZXNzIHRoZSBjb21tYW5kICovCi0gICAgaWYgKGludGVycnVwdF9lY2YobG9jYWwsIGNjc2luZGV4KSkgewotICAgICAgICBwcmludGsoS0VSTl9JTkZPICJyYXkgZGxfc3RhcnR1cF9wYXJhbXMgZmFpbGVkIC0gIgotICAgICAgICAgICAiRUNGIG5vdCByZWFkeSBmb3IgaW50clxuIik7Ci0gICAgICAgIGxvY2FsLT5jYXJkX3N0YXR1cyA9IENBUkRfRExfUEFSQU1fRVJST1I7Ci0gICAgICAgIHdyaXRlYihDQ1NfQlVGRkVSX0ZSRUUsICYocGNjcysrKS0+YnVmZmVyX3N0YXR1cyk7Ci0gICAgICAgIHJldHVybiAtMjsKLSAgICB9Ci0gICAgbG9jYWwtPmNhcmRfc3RhdHVzID0gQ0FSRF9ETF9QQVJBTTsKLSAgICAvKiBTdGFydCBrZXJuZWwgdGltZXIgdG8gd2FpdCBmb3IgZGwgc3RhcnR1cCB0byBjb21wbGV0ZS4gKi8KLSAgICBsb2NhbC0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBIWi8yOwotICAgIGxvY2FsLT50aW1lci5kYXRhID0gKGxvbmcpbG9jYWw7Ci0gICAgbG9jYWwtPnRpbWVyLmZ1bmN0aW9uID0gJnZlcmlmeV9kbF9zdGFydHVwOwotICAgIGFkZF90aW1lcigmbG9jYWwtPnRpbWVyKTsKLSAgICBERUJVRygyLCJyYXlfY3MgZGxfc3RhcnR1cF9wYXJhbXMgc3RhcnRlZCB0aW1lciBmb3IgdmVyaWZ5X2RsX3N0YXJ0dXBcbiIpOwotICAgIHJldHVybiAwOworCS8qIENvcHkgcGFyYW1ldGVycyB0byBob3N0IHRvIEVDRiBhcmVhICovCisJaWYgKGxvY2FsLT5md192ZXIgPT0gMHg1NSkKKwkJbWVtY3B5X3RvaW8obG9jYWwtPnNyYW0gKyBIT1NUX1RPX0VDRl9CQVNFLCAmbG9jYWwtPnNwYXJtLmI0LAorCQkJICAgIHNpemVvZihzdHJ1Y3QgYjRfc3RhcnR1cF9wYXJhbXMpKTsKKwllbHNlCisJCW1lbWNweV90b2lvKGxvY2FsLT5zcmFtICsgSE9TVF9UT19FQ0ZfQkFTRSwgJmxvY2FsLT5zcGFybS5iNSwKKwkJCSAgICBzaXplb2Yoc3RydWN0IGI1X3N0YXJ0dXBfcGFyYW1zKSk7CisKKwkvKiBGaWxsIGluIHRoZSBDQ1MgZmllbGRzIGZvciB0aGUgRUNGICovCisJaWYgKChjY3NpbmRleCA9IGdldF9mcmVlX2Njcyhsb2NhbCkpIDwgMCkKKwkJcmV0dXJuIC0xOworCWxvY2FsLT5kbF9wYXJhbV9jY3MgPSBjY3NpbmRleDsKKwlwY2NzID0gY2NzX2Jhc2UobG9jYWwpICsgY2NzaW5kZXg7CisJd3JpdGViKENDU19ET1dOTE9BRF9TVEFSVFVQX1BBUkFNUywgJnBjY3MtPmNtZCk7CisJREVCVUcoMiwgImRsX3N0YXJ0dXBfcGFyYW1zIHN0YXJ0IGNjc2luZGV4ID0gJWRcbiIsCisJICAgICAgbG9jYWwtPmRsX3BhcmFtX2Njcyk7CisJLyogSW50ZXJydXB0IHRoZSBmaXJtd2FyZSB0byBwcm9jZXNzIHRoZSBjb21tYW5kICovCisJaWYgKGludGVycnVwdF9lY2YobG9jYWwsIGNjc2luZGV4KSkgeworCQlwcmludGsoS0VSTl9JTkZPICJyYXkgZGxfc3RhcnR1cF9wYXJhbXMgZmFpbGVkIC0gIgorCQkgICAgICAgIkVDRiBub3QgcmVhZHkgZm9yIGludHJcbiIpOworCQlsb2NhbC0+Y2FyZF9zdGF0dXMgPSBDQVJEX0RMX1BBUkFNX0VSUk9SOworCQl3cml0ZWIoQ0NTX0JVRkZFUl9GUkVFLCAmKHBjY3MrKyktPmJ1ZmZlcl9zdGF0dXMpOworCQlyZXR1cm4gLTI7CisJfQorCWxvY2FsLT5jYXJkX3N0YXR1cyA9IENBUkRfRExfUEFSQU07CisJLyogU3RhcnQga2VybmVsIHRpbWVyIHRvIHdhaXQgZm9yIGRsIHN0YXJ0dXAgdG8gY29tcGxldGUuICovCisJbG9jYWwtPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgSFogLyAyOworCWxvY2FsLT50aW1lci5kYXRhID0gKGxvbmcpbG9jYWw7CisJbG9jYWwtPnRpbWVyLmZ1bmN0aW9uID0gJnZlcmlmeV9kbF9zdGFydHVwOworCWFkZF90aW1lcigmbG9jYWwtPnRpbWVyKTsKKwlERUJVRygyLAorCSAgICAgICJyYXlfY3MgZGxfc3RhcnR1cF9wYXJhbXMgc3RhcnRlZCB0aW1lciBmb3IgdmVyaWZ5X2RsX3N0YXJ0dXBcbiIpOworCXJldHVybiAwOwogfSAvKiBkbF9zdGFydHVwX3BhcmFtcyAqLworCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiBzdGF0aWMgdm9pZCBpbml0X3N0YXJ0dXBfcGFyYW1zKHJheV9kZXZfdCAqbG9jYWwpCiB7Ci0gICAgaW50IGk7IAorCWludCBpOwogCi0gICAgaWYgKGNvdW50cnkgPiBKQVBBTl9URVNUKSBjb3VudHJ5ID0gVVNBOwotICAgIGVsc2UKLSAgICAgICAgaWYgKGNvdW50cnkgPCBVU0EpIGNvdW50cnkgPSBVU0E7Ci0gICAgLyogc3RydWN0dXJlIGZvciBob3AgdGltZSBhbmQgYmVhY29uIHBlcmlvZCBpcyBkZWZpbmVkIGhlcmUgdXNpbmcgCi0gICAgICogTmV3IDgwMi4xMUQ2LjEgZm9ybWF0LiAgQ2FyZCBmaXJtd2FyZSBpcyBzdGlsbCB1c2luZyBvbGQgZm9ybWF0Ci0gICAgICogdW50aWwgdmVyc2lvbiA2LgotICAgICAqICAgIEJlZm9yZSAgICAgICAgICAgICAgICAgICAgQWZ0ZXIKLSAgICAgKiAgICBhX2hvcF90aW1lIG1zIGJ5dGUgICAgICAgIGFfaG9wX3RpbWUgbXMgYnl0ZQotICAgICAqICAgIGFfaG9wX3RpbWUgMnMgYnl0ZSAgICAgICAgYV9ob3BfdGltZSBscyBieXRlCi0gICAgICogICAgYV9ob3BfdGltZSBscyBieXRlICAgICAgICBhX2JlYWNvbl9wZXJpb2QgbXMgYnl0ZQotICAgICAqICAgIGFfYmVhY29uX3BlcmlvZCAgICAgICAgICAgYV9iZWFjb25fcGVyaW9kIGxzIGJ5dGUKLSAgICAgKgotICAgICAqICAgIGFfaG9wX3RpbWUgPSB1UyAgICAgICAgICAgYV9ob3BfdGltZSA9IEt1UwotICAgICAqICAgIGFfYmVhY29uX3BlcmlvZCA9IGhvcHMgICAgYV9iZWFjb25fcGVyaW9kID0gS3VTCi0gICAgICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA2NG1zID0gMDEwMDAwICovCi0gICAgaWYgKGxvY2FsLT5md192ZXIgPT0gMHg1NSkgIHsKLSAgICAgICAgbWVtY3B5KChVQ0hBUiAqKSZsb2NhbC0+c3Bhcm0uYjQsIGI0X2RlZmF1bHRfc3RhcnR1cF9wYXJtcywgCi0gICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IGI0X3N0YXJ0dXBfcGFyYW1zKSk7Ci0gICAgICAgIC8qIFRyYW5zbGF0ZSBzYW5lIGt1cyBpbnB1dCB2YWx1ZXMgdG8gb2xkIGJ1aWxkIDQvNSBmb3JtYXQgKi8KLSAgICAgICAgLyogaSA9IGhvcCB0aW1lIGluIHVTIHRydW5jYXRlZCB0byAzIGJ5dGVzICovCi0gICAgICAgIGkgPSAoaG9wX2R3ZWxsICogMTAyNCkgJiAweGZmZmZmZjsKLSAgICAgICAgbG9jYWwtPnNwYXJtLmI0LmFfaG9wX3RpbWVbMF0gPSAoaSA+PiAxNikgJiAweGZmOwotICAgICAgICBsb2NhbC0+c3Bhcm0uYjQuYV9ob3BfdGltZVsxXSA9IChpID4+IDgpICYgMHhmZjsKLSAgICAgICAgbG9jYWwtPnNwYXJtLmI0LmFfYmVhY29uX3BlcmlvZFswXSA9IDA7Ci0gICAgICAgIGxvY2FsLT5zcGFybS5iNC5hX2JlYWNvbl9wZXJpb2RbMV0gPQotICAgICAgICAgICAgKChiZWFjb25fcGVyaW9kL2hvcF9kd2VsbCkgLSAxKSAmIDB4ZmY7Ci0gICAgICAgIGxvY2FsLT5zcGFybS5iNC5hX2N1cnJfY291bnRyeV9jb2RlID0gY291bnRyeTsKLSAgICAgICAgbG9jYWwtPnNwYXJtLmI0LmFfaG9wX3BhdHRlcm5fbGVuZ3RoID0gCi0gICAgICAgICAgICBob3BfcGF0dGVybl9sZW5ndGhbKGludCljb3VudHJ5XSAtIDE7Ci0gICAgICAgIGlmIChiYykKLSAgICAgICAgewotICAgICAgICAgICAgbG9jYWwtPnNwYXJtLmI0LmFfYWNrX3RpbWVvdXQgPSAweDUwOwotICAgICAgICAgICAgbG9jYWwtPnNwYXJtLmI0LmFfc2lmcyA9IDB4M2Y7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSB7ICAgIC8qIFZlcnNpb24gNSB1c2VzIHJlYWwga3VzIHZhbHVlcyAqLwotICAgICAgICBtZW1jcHkoKFVDSEFSICopJmxvY2FsLT5zcGFybS5iNSwgYjVfZGVmYXVsdF9zdGFydHVwX3Bhcm1zLCAKLSAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgYjVfc3RhcnR1cF9wYXJhbXMpKTsKKwlpZiAoY291bnRyeSA+IEpBUEFOX1RFU1QpCisJCWNvdW50cnkgPSBVU0E7CisJZWxzZSBpZiAoY291bnRyeSA8IFVTQSkKKwkJY291bnRyeSA9IFVTQTsKKwkvKiBzdHJ1Y3R1cmUgZm9yIGhvcCB0aW1lIGFuZCBiZWFjb24gcGVyaW9kIGlzIGRlZmluZWQgaGVyZSB1c2luZworCSAqIE5ldyA4MDIuMTFENi4xIGZvcm1hdC4gIENhcmQgZmlybXdhcmUgaXMgc3RpbGwgdXNpbmcgb2xkIGZvcm1hdAorCSAqIHVudGlsIHZlcnNpb24gNi4KKwkgKiAgICBCZWZvcmUgICAgICAgICAgICAgICAgICAgIEFmdGVyCisJICogICAgYV9ob3BfdGltZSBtcyBieXRlICAgICAgICBhX2hvcF90aW1lIG1zIGJ5dGUKKwkgKiAgICBhX2hvcF90aW1lIDJzIGJ5dGUgICAgICAgIGFfaG9wX3RpbWUgbHMgYnl0ZQorCSAqICAgIGFfaG9wX3RpbWUgbHMgYnl0ZSAgICAgICAgYV9iZWFjb25fcGVyaW9kIG1zIGJ5dGUKKwkgKiAgICBhX2JlYWNvbl9wZXJpb2QgICAgICAgICAgIGFfYmVhY29uX3BlcmlvZCBscyBieXRlCisJICoKKwkgKiAgICBhX2hvcF90aW1lID0gdVMgICAgICAgICAgIGFfaG9wX3RpbWUgPSBLdVMKKwkgKiAgICBhX2JlYWNvbl9wZXJpb2QgPSBob3BzICAgIGFfYmVhY29uX3BlcmlvZCA9IEt1UworCSAqLy8qIDY0bXMgPSAwMTAwMDAgKi8KKwlpZiAobG9jYWwtPmZ3X3ZlciA9PSAweDU1KSB7CisJCW1lbWNweSgoVUNIQVIgKikgJmxvY2FsLT5zcGFybS5iNCwgYjRfZGVmYXVsdF9zdGFydHVwX3Bhcm1zLAorCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBiNF9zdGFydHVwX3BhcmFtcykpOworCQkvKiBUcmFuc2xhdGUgc2FuZSBrdXMgaW5wdXQgdmFsdWVzIHRvIG9sZCBidWlsZCA0LzUgZm9ybWF0ICovCisJCS8qIGkgPSBob3AgdGltZSBpbiB1UyB0cnVuY2F0ZWQgdG8gMyBieXRlcyAqLworCQlpID0gKGhvcF9kd2VsbCAqIDEwMjQpICYgMHhmZmZmZmY7CisJCWxvY2FsLT5zcGFybS5iNC5hX2hvcF90aW1lWzBdID0gKGkgPj4gMTYpICYgMHhmZjsKKwkJbG9jYWwtPnNwYXJtLmI0LmFfaG9wX3RpbWVbMV0gPSAoaSA+PiA4KSAmIDB4ZmY7CisJCWxvY2FsLT5zcGFybS5iNC5hX2JlYWNvbl9wZXJpb2RbMF0gPSAwOworCQlsb2NhbC0+c3Bhcm0uYjQuYV9iZWFjb25fcGVyaW9kWzFdID0KKwkJICAgICgoYmVhY29uX3BlcmlvZCAvIGhvcF9kd2VsbCkgLSAxKSAmIDB4ZmY7CisJCWxvY2FsLT5zcGFybS5iNC5hX2N1cnJfY291bnRyeV9jb2RlID0gY291bnRyeTsKKwkJbG9jYWwtPnNwYXJtLmI0LmFfaG9wX3BhdHRlcm5fbGVuZ3RoID0KKwkJICAgIGhvcF9wYXR0ZXJuX2xlbmd0aFsoaW50KWNvdW50cnldIC0gMTsKKwkJaWYgKGJjKSB7CisJCQlsb2NhbC0+c3Bhcm0uYjQuYV9hY2tfdGltZW91dCA9IDB4NTA7CisJCQlsb2NhbC0+c3Bhcm0uYjQuYV9zaWZzID0gMHgzZjsKKwkJfQorCX0gZWxzZSB7IC8qIFZlcnNpb24gNSB1c2VzIHJlYWwga3VzIHZhbHVlcyAqLworCQltZW1jcHkoKFVDSEFSICopICZsb2NhbC0+c3Bhcm0uYjUsIGI1X2RlZmF1bHRfc3RhcnR1cF9wYXJtcywKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgYjVfc3RhcnR1cF9wYXJhbXMpKTsKIAotICAgICAgICBsb2NhbC0+c3Bhcm0uYjUuYV9ob3BfdGltZVswXSA9IChob3BfZHdlbGwgPj4gOCkgJiAweGZmOwotICAgICAgICBsb2NhbC0+c3Bhcm0uYjUuYV9ob3BfdGltZVsxXSA9IGhvcF9kd2VsbCAmIDB4ZmY7Ci0gICAgICAgIGxvY2FsLT5zcGFybS5iNS5hX2JlYWNvbl9wZXJpb2RbMF0gPSAoYmVhY29uX3BlcmlvZCA+PiA4KSAmIDB4ZmY7Ci0gICAgICAgIGxvY2FsLT5zcGFybS5iNS5hX2JlYWNvbl9wZXJpb2RbMV0gPSBiZWFjb25fcGVyaW9kICYgMHhmZjsKLSAgICAgICAgaWYgKHBzbSkKLSAgICAgICAgICAgIGxvY2FsLT5zcGFybS5iNS5hX3Bvd2VyX21ndF9zdGF0ZSA9IDE7Ci0gICAgICAgIGxvY2FsLT5zcGFybS5iNS5hX2N1cnJfY291bnRyeV9jb2RlID0gY291bnRyeTsKLSAgICAgICAgbG9jYWwtPnNwYXJtLmI1LmFfaG9wX3BhdHRlcm5fbGVuZ3RoID0gCi0gICAgICAgICAgICBob3BfcGF0dGVybl9sZW5ndGhbKGludCljb3VudHJ5XTsKLSAgICB9Ci0gICAgCi0gICAgbG9jYWwtPnNwYXJtLmI0LmFfbmV0d29ya190eXBlID0gbmV0X3R5cGUgJiAweDAxOwotICAgIGxvY2FsLT5zcGFybS5iNC5hX2FjdGluZ19hc19hcF9zdGF0dXMgPSBUWVBFX1NUQTsKKwkJbG9jYWwtPnNwYXJtLmI1LmFfaG9wX3RpbWVbMF0gPSAoaG9wX2R3ZWxsID4+IDgpICYgMHhmZjsKKwkJbG9jYWwtPnNwYXJtLmI1LmFfaG9wX3RpbWVbMV0gPSBob3BfZHdlbGwgJiAweGZmOworCQlsb2NhbC0+c3Bhcm0uYjUuYV9iZWFjb25fcGVyaW9kWzBdID0KKwkJICAgIChiZWFjb25fcGVyaW9kID4+IDgpICYgMHhmZjsKKwkJbG9jYWwtPnNwYXJtLmI1LmFfYmVhY29uX3BlcmlvZFsxXSA9IGJlYWNvbl9wZXJpb2QgJiAweGZmOworCQlpZiAocHNtKQorCQkJbG9jYWwtPnNwYXJtLmI1LmFfcG93ZXJfbWd0X3N0YXRlID0gMTsKKwkJbG9jYWwtPnNwYXJtLmI1LmFfY3Vycl9jb3VudHJ5X2NvZGUgPSBjb3VudHJ5OworCQlsb2NhbC0+c3Bhcm0uYjUuYV9ob3BfcGF0dGVybl9sZW5ndGggPQorCQkgICAgaG9wX3BhdHRlcm5fbGVuZ3RoWyhpbnQpY291bnRyeV07CisJfQogCi0gICAgaWYgKGVzc2lkICE9IE5VTEwpCi0gICAgICAgIHN0cm5jcHkobG9jYWwtPnNwYXJtLmI0LmFfY3VycmVudF9lc3NfaWQsIGVzc2lkLCBFU1NJRF9TSVpFKTsKLX0gLyogaW5pdF9zdGFydHVwX3BhcmFtcyAqLyAKKwlsb2NhbC0+c3Bhcm0uYjQuYV9uZXR3b3JrX3R5cGUgPSBuZXRfdHlwZSAmIDB4MDE7CisJbG9jYWwtPnNwYXJtLmI0LmFfYWN0aW5nX2FzX2FwX3N0YXR1cyA9IFRZUEVfU1RBOworCisJaWYgKGVzc2lkICE9IE5VTEwpCisJCXN0cm5jcHkobG9jYWwtPnNwYXJtLmI0LmFfY3VycmVudF9lc3NfaWQsIGVzc2lkLCBFU1NJRF9TSVpFKTsKK30gLyogaW5pdF9zdGFydHVwX3BhcmFtcyAqLworCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiBzdGF0aWMgdm9pZCB2ZXJpZnlfZGxfc3RhcnR1cCh1X2xvbmcgZGF0YSkKIHsKLSAgICByYXlfZGV2X3QgKmxvY2FsID0gKHJheV9kZXZfdCAqKWRhdGE7Ci0gICAgc3RydWN0IGNjcyBfX2lvbWVtICpwY2NzID0gY2NzX2Jhc2UobG9jYWwpICsgbG9jYWwtPmRsX3BhcmFtX2NjczsKLSAgICBVQ0hBUiBzdGF0dXM7Ci0gICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOworCXJheV9kZXZfdCAqbG9jYWwgPSAocmF5X2Rldl90ICopIGRhdGE7CisJc3RydWN0IGNjcyBfX2lvbWVtICpwY2NzID0gY2NzX2Jhc2UobG9jYWwpICsgbG9jYWwtPmRsX3BhcmFtX2NjczsKKwlVQ0hBUiBzdGF0dXM7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOwogCi0gICAgaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgewotICAgICAgICBERUJVRygyLCJyYXlfY3MgdmVyaWZ5X2RsX3N0YXJ0dXAgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorCWlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKKwkJREVCVUcoMiwgInJheV9jcyB2ZXJpZnlfZGxfc3RhcnR1cCAtIGRldmljZSBub3QgcHJlc2VudFxuIik7CisJCXJldHVybjsKKwl9CiAjaWZkZWYgUENNQ0lBX0RFQlVHCi0gICAgaWYgKHBjX2RlYnVnID4gMikgewotICAgIGludCBpOwotICAgIHByaW50ayhLRVJOX0RFQlVHICJ2ZXJpZnlfZGxfc3RhcnR1cCBwYXJhbWV0ZXJzIHNlbnQgdmlhIGNjcyAlZDpcbiIsCi0gICAgICAgICAgIGxvY2FsLT5kbF9wYXJhbV9jY3MpOwotICAgICAgICBmb3IgKGk9MDsgaTxzaXplb2Yoc3RydWN0IGI1X3N0YXJ0dXBfcGFyYW1zKTsgaSsrKSB7Ci0gICAgICAgICAgICBwcmludGsoIiAlMngiLCAodW5zaWduZWQgaW50KSByZWFkYihsb2NhbC0+c3JhbSArIEhPU1RfVE9fRUNGX0JBU0UgKyBpKSk7Ci0gICAgICAgIH0KLSAgICBwcmludGsoIlxuIik7Ci0gICAgfQorCWlmIChwY19kZWJ1ZyA+IDIpIHsKKwkJaW50IGk7CisJCXByaW50ayhLRVJOX0RFQlVHCisJCSAgICAgICAidmVyaWZ5X2RsX3N0YXJ0dXAgcGFyYW1ldGVycyBzZW50IHZpYSBjY3MgJWQ6XG4iLAorCQkgICAgICAgbG9jYWwtPmRsX3BhcmFtX2Njcyk7CisJCWZvciAoaSA9IDA7IGkgPCBzaXplb2Yoc3RydWN0IGI1X3N0YXJ0dXBfcGFyYW1zKTsgaSsrKSB7CisJCQlwcmludGsoIiAlMngiLAorCQkJICAgICAgICh1bnNpZ25lZCBpbnQpcmVhZGIobG9jYWwtPnNyYW0gKworCQkJCQkJICAgSE9TVF9UT19FQ0ZfQkFTRSArIGkpKTsKKwkJfQorCQlwcmludGsoIlxuIik7CisJfQogI2VuZGlmCiAKLSAgICBzdGF0dXMgPSByZWFkYigmcGNjcy0+YnVmZmVyX3N0YXR1cyk7Ci0gICAgaWYgKHN0YXR1cyE9IENDU19CVUZGRVJfRlJFRSkKLSAgICB7Ci0gICAgICAgIHByaW50ayhLRVJOX0lORk8gIkRvd25sb2FkIHN0YXJ0dXAgcGFyYW1zIGZhaWxlZC4gIFN0YXR1cyA9ICVkXG4iLAotICAgICAgICAgICBzdGF0dXMpOwotICAgICAgICBsb2NhbC0+Y2FyZF9zdGF0dXMgPSBDQVJEX0RMX1BBUkFNX0VSUk9SOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChsb2NhbC0+c3Bhcm0uYjQuYV9uZXR3b3JrX3R5cGUgPT0gQURIT0MpCi0gICAgICAgIHN0YXJ0X25ldCgodV9sb25nKWxvY2FsKTsKLSAgICBlbHNlCi0gICAgICAgIGpvaW5fbmV0KCh1X2xvbmcpbG9jYWwpOworCXN0YXR1cyA9IHJlYWRiKCZwY2NzLT5idWZmZXJfc3RhdHVzKTsKKwlpZiAoc3RhdHVzICE9IENDU19CVUZGRVJfRlJFRSkgeworCQlwcmludGsoS0VSTl9JTkZPCisJCSAgICAgICAiRG93bmxvYWQgc3RhcnR1cCBwYXJhbXMgZmFpbGVkLiAgU3RhdHVzID0gJWRcbiIsCisJCSAgICAgICBzdGF0dXMpOworCQlsb2NhbC0+Y2FyZF9zdGF0dXMgPSBDQVJEX0RMX1BBUkFNX0VSUk9SOworCQlyZXR1cm47CisJfQorCWlmIChsb2NhbC0+c3Bhcm0uYjQuYV9uZXR3b3JrX3R5cGUgPT0gQURIT0MpCisJCXN0YXJ0X25ldCgodV9sb25nKSBsb2NhbCk7CisJZWxzZQorCQlqb2luX25ldCgodV9sb25nKSBsb2NhbCk7CiAKLSAgICByZXR1cm47CisJcmV0dXJuOwogfSAvKiBlbmQgdmVyaWZ5X2RsX3N0YXJ0dXAgKi8KKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogLyogQ29tbWFuZCBjYXJkIHRvIHN0YXJ0IGEgbmV0d29yayAqLwogc3RhdGljIHZvaWQgc3RhcnRfbmV0KHVfbG9uZyBkYXRhKQogewotICAgIHJheV9kZXZfdCAqbG9jYWwgPSAocmF5X2Rldl90ICopZGF0YTsKLSAgICBzdHJ1Y3QgY2NzIF9faW9tZW0gKnBjY3M7Ci0gICAgaW50IGNjc2luZGV4OwotICAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKLSAgICBpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7Ci0gICAgICAgIERFQlVHKDIsInJheV9jcyBzdGFydF9uZXQgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIC8qIEZpbGwgaW4gdGhlIENDUyBmaWVsZHMgZm9yIHRoZSBFQ0YgKi8KLSAgICBpZiAoKGNjc2luZGV4ID0gZ2V0X2ZyZWVfY2NzKGxvY2FsKSkgPCAwKSByZXR1cm47Ci0gICAgcGNjcyA9IGNjc19iYXNlKGxvY2FsKSArIGNjc2luZGV4OwotICAgIHdyaXRlYihDQ1NfU1RBUlRfTkVUV09SSywgJnBjY3MtPmNtZCk7Ci0gICAgd3JpdGViKDAsICZwY2NzLT52YXIuc3RhcnRfbmV0d29yay51cGRhdGVfcGFyYW0pOwotICAgIC8qIEludGVycnVwdCB0aGUgZmlybXdhcmUgdG8gcHJvY2VzcyB0aGUgY29tbWFuZCAqLwotICAgIGlmIChpbnRlcnJ1cHRfZWNmKGxvY2FsLCBjY3NpbmRleCkpIHsKLSAgICAgICAgREVCVUcoMSwicmF5IHN0YXJ0IG5ldCBmYWlsZWQgLSBjYXJkIG5vdCByZWFkeSBmb3IgaW50clxuIik7Ci0gICAgICAgIHdyaXRlYihDQ1NfQlVGRkVSX0ZSRUUsICYocGNjcysrKS0+YnVmZmVyX3N0YXR1cyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbG9jYWwtPmNhcmRfc3RhdHVzID0gQ0FSRF9ET0lOR19BQ1E7Ci0gICAgcmV0dXJuOworCXJheV9kZXZfdCAqbG9jYWwgPSAocmF5X2Rldl90ICopIGRhdGE7CisJc3RydWN0IGNjcyBfX2lvbWVtICpwY2NzOworCWludCBjY3NpbmRleDsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7CisJaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgeworCQlERUJVRygyLCAicmF5X2NzIHN0YXJ0X25ldCAtIGRldmljZSBub3QgcHJlc2VudFxuIik7CisJCXJldHVybjsKKwl9CisJLyogRmlsbCBpbiB0aGUgQ0NTIGZpZWxkcyBmb3IgdGhlIEVDRiAqLworCWlmICgoY2NzaW5kZXggPSBnZXRfZnJlZV9jY3MobG9jYWwpKSA8IDApCisJCXJldHVybjsKKwlwY2NzID0gY2NzX2Jhc2UobG9jYWwpICsgY2NzaW5kZXg7CisJd3JpdGViKENDU19TVEFSVF9ORVRXT1JLLCAmcGNjcy0+Y21kKTsKKwl3cml0ZWIoMCwgJnBjY3MtPnZhci5zdGFydF9uZXR3b3JrLnVwZGF0ZV9wYXJhbSk7CisJLyogSW50ZXJydXB0IHRoZSBmaXJtd2FyZSB0byBwcm9jZXNzIHRoZSBjb21tYW5kICovCisJaWYgKGludGVycnVwdF9lY2YobG9jYWwsIGNjc2luZGV4KSkgeworCQlERUJVRygxLCAicmF5IHN0YXJ0IG5ldCBmYWlsZWQgLSBjYXJkIG5vdCByZWFkeSBmb3IgaW50clxuIik7CisJCXdyaXRlYihDQ1NfQlVGRkVSX0ZSRUUsICYocGNjcysrKS0+YnVmZmVyX3N0YXR1cyk7CisJCXJldHVybjsKKwl9CisJbG9jYWwtPmNhcmRfc3RhdHVzID0gQ0FSRF9ET0lOR19BQ1E7CisJcmV0dXJuOwogfSAvKiBlbmQgc3RhcnRfbmV0ICovCisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIC8qIENvbW1hbmQgY2FyZCB0byBqb2luIGEgbmV0d29yayAqLwogc3RhdGljIHZvaWQgam9pbl9uZXQodV9sb25nIGRhdGEpCiB7Ci0gICAgcmF5X2Rldl90ICpsb2NhbCA9IChyYXlfZGV2X3QgKilkYXRhOworCXJheV9kZXZfdCAqbG9jYWwgPSAocmF5X2Rldl90ICopIGRhdGE7CiAKLSAgICBzdHJ1Y3QgY2NzIF9faW9tZW0gKnBjY3M7Ci0gICAgaW50IGNjc2luZGV4OwotICAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKLSAgICAKLSAgICBpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7Ci0gICAgICAgIERFQlVHKDIsInJheV9jcyBqb2luX25ldCAtIGRldmljZSBub3QgcHJlc2VudFxuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLyogRmlsbCBpbiB0aGUgQ0NTIGZpZWxkcyBmb3IgdGhlIEVDRiAqLwotICAgIGlmICgoY2NzaW5kZXggPSBnZXRfZnJlZV9jY3MobG9jYWwpKSA8IDApIHJldHVybjsKLSAgICBwY2NzID0gY2NzX2Jhc2UobG9jYWwpICsgY2NzaW5kZXg7Ci0gICAgd3JpdGViKENDU19KT0lOX05FVFdPUkssICZwY2NzLT5jbWQpOwotICAgIHdyaXRlYigwLCAmcGNjcy0+dmFyLmpvaW5fbmV0d29yay51cGRhdGVfcGFyYW0pOwotICAgIHdyaXRlYigwLCAmcGNjcy0+dmFyLmpvaW5fbmV0d29yay5uZXRfaW5pdGlhdGVkKTsKLSAgICAvKiBJbnRlcnJ1cHQgdGhlIGZpcm13YXJlIHRvIHByb2Nlc3MgdGhlIGNvbW1hbmQgKi8KLSAgICBpZiAoaW50ZXJydXB0X2VjZihsb2NhbCwgY2NzaW5kZXgpKSB7Ci0gICAgICAgIERFQlVHKDEsInJheSBqb2luIG5ldCBmYWlsZWQgLSBjYXJkIG5vdCByZWFkeSBmb3IgaW50clxuIik7Ci0gICAgICAgIHdyaXRlYihDQ1NfQlVGRkVSX0ZSRUUsICYocGNjcysrKS0+YnVmZmVyX3N0YXR1cyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbG9jYWwtPmNhcmRfc3RhdHVzID0gQ0FSRF9ET0lOR19BQ1E7Ci0gICAgcmV0dXJuOworCXN0cnVjdCBjY3MgX19pb21lbSAqcGNjczsKKwlpbnQgY2NzaW5kZXg7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOworCisJaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgeworCQlERUJVRygyLCAicmF5X2NzIGpvaW5fbmV0IC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKKwkJcmV0dXJuOworCX0KKwkvKiBGaWxsIGluIHRoZSBDQ1MgZmllbGRzIGZvciB0aGUgRUNGICovCisJaWYgKChjY3NpbmRleCA9IGdldF9mcmVlX2Njcyhsb2NhbCkpIDwgMCkKKwkJcmV0dXJuOworCXBjY3MgPSBjY3NfYmFzZShsb2NhbCkgKyBjY3NpbmRleDsKKwl3cml0ZWIoQ0NTX0pPSU5fTkVUV09SSywgJnBjY3MtPmNtZCk7CisJd3JpdGViKDAsICZwY2NzLT52YXIuam9pbl9uZXR3b3JrLnVwZGF0ZV9wYXJhbSk7CisJd3JpdGViKDAsICZwY2NzLT52YXIuam9pbl9uZXR3b3JrLm5ldF9pbml0aWF0ZWQpOworCS8qIEludGVycnVwdCB0aGUgZmlybXdhcmUgdG8gcHJvY2VzcyB0aGUgY29tbWFuZCAqLworCWlmIChpbnRlcnJ1cHRfZWNmKGxvY2FsLCBjY3NpbmRleCkpIHsKKwkJREVCVUcoMSwgInJheSBqb2luIG5ldCBmYWlsZWQgLSBjYXJkIG5vdCByZWFkeSBmb3IgaW50clxuIik7CisJCXdyaXRlYihDQ1NfQlVGRkVSX0ZSRUUsICYocGNjcysrKS0+YnVmZmVyX3N0YXR1cyk7CisJCXJldHVybjsKKwl9CisJbG9jYWwtPmNhcmRfc3RhdHVzID0gQ0FSRF9ET0lOR19BQ1E7CisJcmV0dXJuOwogfQorCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICBBZnRlciBhIGNhcmQgaXMgcmVtb3ZlZCwgcmF5X3JlbGVhc2UoKSB3aWxsIHVucmVnaXN0ZXIgdGhlIG5ldAogICAgIGRldmljZSwgYW5kIHJlbGVhc2UgdGhlIFBDTUNJQSBjb25maWd1cmF0aW9uLiAgSWYgdGhlIGRldmljZSBpcwpAQCAtNzg0LDI1ICs4MTYsMjcgQEAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIHN0YXRpYyB2b2lkIHJheV9yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OyAKLSAgICByYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKLSAgICBpbnQgaTsKLSAgICAKLSAgICBERUJVRygxLCAicmF5X3JlbGVhc2UoMHglcClcbiIsIGxpbmspOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OworCXJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBpOwogCi0gICAgZGVsX3RpbWVyKCZsb2NhbC0+dGltZXIpOworCURFQlVHKDEsICJyYXlfcmVsZWFzZSgweCVwKVxuIiwgbGluayk7CiAKLSAgICBpb3VubWFwKGxvY2FsLT5zcmFtKTsKLSAgICBpb3VubWFwKGxvY2FsLT5ybWVtKTsKLSAgICBpb3VubWFwKGxvY2FsLT5hbWVtKTsKLSAgICAvKiBEbyBib3RoZXIgY2hlY2tpbmcgdG8gc2VlIGlmIHRoZXNlIHN1Y2NlZWQgb3Igbm90ICovCi0gICAgaSA9IHBjbWNpYV9yZWxlYXNlX3dpbmRvdyhsb2NhbC0+YW1lbV9oYW5kbGUpOwotICAgIGlmICggaSAhPSAwICkgREVCVUcoMCwiUmVsZWFzZVdpbmRvdyhsb2NhbC0+YW1lbSkgcmV0ID0gJXhcbiIsaSk7Ci0gICAgaSA9IHBjbWNpYV9yZWxlYXNlX3dpbmRvdyhsb2NhbC0+cm1lbV9oYW5kbGUpOwotICAgIGlmICggaSAhPSAwICkgREVCVUcoMCwiUmVsZWFzZVdpbmRvdyhsb2NhbC0+cm1lbSkgcmV0ID0gJXhcbiIsaSk7Ci0gICAgcGNtY2lhX2Rpc2FibGVfZGV2aWNlKGxpbmspOworCWRlbF90aW1lcigmbG9jYWwtPnRpbWVyKTsKIAotICAgIERFQlVHKDIsInJheV9yZWxlYXNlIGVuZGluZ1xuIik7CisJaW91bm1hcChsb2NhbC0+c3JhbSk7CisJaW91bm1hcChsb2NhbC0+cm1lbSk7CisJaW91bm1hcChsb2NhbC0+YW1lbSk7CisJLyogRG8gYm90aGVyIGNoZWNraW5nIHRvIHNlZSBpZiB0aGVzZSBzdWNjZWVkIG9yIG5vdCAqLworCWkgPSBwY21jaWFfcmVsZWFzZV93aW5kb3cobG9jYWwtPmFtZW1faGFuZGxlKTsKKwlpZiAoaSAhPSAwKQorCQlERUJVRygwLCAiUmVsZWFzZVdpbmRvdyhsb2NhbC0+YW1lbSkgcmV0ID0gJXhcbiIsIGkpOworCWkgPSBwY21jaWFfcmVsZWFzZV93aW5kb3cobG9jYWwtPnJtZW1faGFuZGxlKTsKKwlpZiAoaSAhPSAwKQorCQlERUJVRygwLCAiUmVsZWFzZVdpbmRvdyhsb2NhbC0+cm1lbSkgcmV0ID0gJXhcbiIsIGkpOworCXBjbWNpYV9kaXNhYmxlX2RldmljZShsaW5rKTsKKworCURFQlVHKDIsICJyYXlfcmVsZWFzZSBlbmRpbmdcbiIpOwogfQogCiBzdGF0aWMgaW50IHJheV9zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQpAQCAtODMxLDIzNiArODY1LDI0MiBAQAogc3RhdGljIGludCByYXlfZGV2X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKICNpZmRlZiBSQVlfSU1NRURJQVRFX0lOSVQKLSAgICBpbnQgaTsKLSNlbmRpZgkvKiBSQVlfSU1NRURJQVRFX0lOSVQgKi8KLSAgICByYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKLSAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7CisJaW50IGk7CisjZW5kaWYgLyogUkFZX0lNTUVESUFURV9JTklUICovCisJcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOwogCi0gICAgREVCVUcoMSwicmF5X2Rldl9pbml0KGRldj0lcClcbiIsZGV2KTsKLSAgICBpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7Ci0gICAgICAgIERFQlVHKDIsInJheV9kZXZfaW5pdCAtIGRldmljZSBub3QgcHJlc2VudFxuIik7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9CisJREVCVUcoMSwgInJheV9kZXZfaW5pdChkZXY9JXApXG4iLCBkZXYpOworCWlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKKwkJREVCVUcoMiwgInJheV9kZXZfaW5pdCAtIGRldmljZSBub3QgcHJlc2VudFxuIik7CisJCXJldHVybiAtMTsKKwl9CiAjaWZkZWYgUkFZX0lNTUVESUFURV9JTklUCi0gICAgLyogRG93bmxvYWQgc3RhcnR1cCBwYXJhbWV0ZXJzICovCi0gICAgaWYgKCAoaSA9IGRsX3N0YXJ0dXBfcGFyYW1zKGRldikpIDwgMCkKLSAgICB7Ci0gICAgICAgIHByaW50ayhLRVJOX0lORk8gInJheV9kZXZfaW5pdCBkbF9zdGFydHVwX3BhcmFtcyBmYWlsZWQgLSAiCi0gICAgICAgICAgICJyZXR1cm5zIDB4JXhcbiIsaSk7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0jZWxzZQkvKiBSQVlfSU1NRURJQVRFX0lOSVQgKi8KLSAgICAvKiBQb3N0cG9uZSB0aGUgY2FyZCBpbml0IHNvIHRoYXQgd2UgY2FuIHN0aWxsIGNvbmZpZ3VyZSB0aGUgY2FyZCwKLSAgICAgKiBmb3IgZXhhbXBsZSB1c2luZyB0aGUgV2lyZWxlc3MgRXh0ZW5zaW9ucy4gVGhlIGluaXQgd2lsbCBoYXBwZW4KLSAgICAgKiBpbiByYXlfb3BlbigpIC0gSmVhbiBJSSAqLwotICAgIERFQlVHKDEsInJheV9kZXZfaW5pdDogcG9zdHBvbmluZyBjYXJkIGluaXQgdG8gcmF5X29wZW4oKSA7IFN0YXR1cyA9ICVkXG4iLAotCSAgbG9jYWwtPmNhcmRfc3RhdHVzKTsKLSNlbmRpZgkvKiBSQVlfSU1NRURJQVRFX0lOSVQgKi8KKwkvKiBEb3dubG9hZCBzdGFydHVwIHBhcmFtZXRlcnMgKi8KKwlpZiAoKGkgPSBkbF9zdGFydHVwX3BhcmFtcyhkZXYpKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAicmF5X2Rldl9pbml0IGRsX3N0YXJ0dXBfcGFyYW1zIGZhaWxlZCAtICIKKwkJICAgICAgICJyZXR1cm5zIDB4JXhcbiIsIGkpOworCQlyZXR1cm4gLTE7CisJfQorI2Vsc2UgLyogUkFZX0lNTUVESUFURV9JTklUICovCisJLyogUG9zdHBvbmUgdGhlIGNhcmQgaW5pdCBzbyB0aGF0IHdlIGNhbiBzdGlsbCBjb25maWd1cmUgdGhlIGNhcmQsCisJICogZm9yIGV4YW1wbGUgdXNpbmcgdGhlIFdpcmVsZXNzIEV4dGVuc2lvbnMuIFRoZSBpbml0IHdpbGwgaGFwcGVuCisJICogaW4gcmF5X29wZW4oKSAtIEplYW4gSUkgKi8KKwlERUJVRygxLAorCSAgICAgICJyYXlfZGV2X2luaXQ6IHBvc3Rwb25pbmcgY2FyZCBpbml0IHRvIHJheV9vcGVuKCkgOyBTdGF0dXMgPSAlZFxuIiwKKwkgICAgICBsb2NhbC0+Y2FyZF9zdGF0dXMpOworI2VuZGlmIC8qIFJBWV9JTU1FRElBVEVfSU5JVCAqLwogCi0gICAgLyogY29weSBtYWMgYW5kIGJyb2FkY2FzdCBhZGRyZXNzZXMgdG8gbGludXggZGV2aWNlICovCi0gICAgbWVtY3B5KCZkZXYtPmRldl9hZGRyLCAmbG9jYWwtPnNwYXJtLmI0LmFfbWFjX2FkZHIsIEFERFJMRU4pOwotICAgIG1lbXNldChkZXYtPmJyb2FkY2FzdCwgMHhmZiwgRVRIX0FMRU4pOworCS8qIGNvcHkgbWFjIGFuZCBicm9hZGNhc3QgYWRkcmVzc2VzIHRvIGxpbnV4IGRldmljZSAqLworCW1lbWNweSgmZGV2LT5kZXZfYWRkciwgJmxvY2FsLT5zcGFybS5iNC5hX21hY19hZGRyLCBBRERSTEVOKTsKKwltZW1zZXQoZGV2LT5icm9hZGNhc3QsIDB4ZmYsIEVUSF9BTEVOKTsKIAotICAgIERFQlVHKDIsInJheV9kZXZfaW5pdCBlbmRpbmdcbiIpOwotICAgIHJldHVybiAwOworCURFQlVHKDIsICJyYXlfZGV2X2luaXQgZW5kaW5nXG4iKTsKKwlyZXR1cm4gMDsKIH0KKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogc3RhdGljIGludCByYXlfZGV2X2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZtYXAgKm1hcCkKIHsKLSAgICByYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKLSAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7Ci0gICAgLyogRHVtbXkgcm91dGluZSB0byBzYXRpc2Z5IGRldmljZSBzdHJ1Y3R1cmUgKi8KLSAgICBERUJVRygxLCJyYXlfZGV2X2NvbmZpZyhkZXY9JXAsaWZtYXA9JXApXG4iLGRldixtYXApOwotICAgIGlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKLSAgICAgICAgREVCVUcoMiwicmF5X2Rldl9jb25maWcgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQorCXJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKKwkvKiBEdW1teSByb3V0aW5lIHRvIHNhdGlzZnkgZGV2aWNlIHN0cnVjdHVyZSAqLworCURFQlVHKDEsICJyYXlfZGV2X2NvbmZpZyhkZXY9JXAsaWZtYXA9JXApXG4iLCBkZXYsIG1hcCk7CisJaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgeworCQlERUJVRygyLCAicmF5X2Rldl9jb25maWcgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOworCQlyZXR1cm4gLTE7CisJfQogCi0gICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiB9CisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIHN0YXRpYyBpbnQgcmF5X2Rldl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0gICAgcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7Ci0gICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOwotICAgIHNob3J0IGxlbmd0aCA9IHNrYi0+bGVuOworCXJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKKwlzaG9ydCBsZW5ndGggPSBza2ItPmxlbjsKIAotICAgIGlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKLSAgICAgICAgREVCVUcoMiwicmF5X2Rldl9zdGFydF94bWl0IC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICBERUJVRygzLCJyYXlfZGV2X3N0YXJ0X3htaXQoc2tiPSVwLCBkZXY9JXApXG4iLHNrYixkZXYpOwotICAgIGlmIChsb2NhbC0+YXV0aGVudGljYXRpb25fc3RhdGUgPT0gTkVFRF9UT19BVVRIKSB7Ci0gICAgICAgIERFQlVHKDAsInJheV9jcyBTZW5kaW5nIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3QuXG4iKTsKLSAgICAgICAgaWYgKCFidWlsZF9hdXRoX2ZyYW1lIChsb2NhbCwgbG9jYWwtPmF1dGhfaWQsIE9QRU5fQVVUSF9SRVFVRVNUKSkgewotICAgICAgICAgICAgbG9jYWwtPmF1dGhlbnRpY2F0aW9uX3N0YXRlID0gQVVUSEVOVElDQVRFRDsKLSAgICAgICAgICAgIG5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLSAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICB9Ci0gICAgfQorCWlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKKwkJREVCVUcoMiwgInJheV9kZXZfc3RhcnRfeG1pdCAtIGRldmljZSBub3QgcHJlc2VudFxuIik7CisJCXJldHVybiAtMTsKKwl9CisJREVCVUcoMywgInJheV9kZXZfc3RhcnRfeG1pdChza2I9JXAsIGRldj0lcClcbiIsIHNrYiwgZGV2KTsKKwlpZiAobG9jYWwtPmF1dGhlbnRpY2F0aW9uX3N0YXRlID09IE5FRURfVE9fQVVUSCkgeworCQlERUJVRygwLCAicmF5X2NzIFNlbmRpbmcgYXV0aGVudGljYXRpb24gcmVxdWVzdC5cbiIpOworCQlpZiAoIWJ1aWxkX2F1dGhfZnJhbWUobG9jYWwsIGxvY2FsLT5hdXRoX2lkLCBPUEVOX0FVVEhfUkVRVUVTVCkpIHsKKwkJCWxvY2FsLT5hdXRoZW50aWNhdGlvbl9zdGF0ZSA9IEFVVEhFTlRJQ0FURUQ7CisJCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KIAotICAgIGlmIChsZW5ndGggPCBFVEhfWkxFTikKLSAgICB7Ci0gICAgCWlmIChza2JfcGFkdG8oc2tiLCBFVEhfWkxFTikpCi0gICAgCQlyZXR1cm4gMDsKLSAgICAJbGVuZ3RoID0gRVRIX1pMRU47Ci0gICAgfQotICAgIHN3aXRjaCAocmF5X2h3X3htaXQoIHNrYi0+ZGF0YSwgbGVuZ3RoLCBkZXYsIERBVEFfVFlQRSkpIHsKLSAgICAgICAgY2FzZSBYTUlUX05PX0NDUzoKLSAgICAgICAgY2FzZSBYTUlUX05FRURfQVVUSDoKLQkgICAgbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIGNhc2UgWE1JVF9OT19JTlRSOgotICAgICAgICBjYXNlIFhNSVRfTVNHX0JBRDoKLSAgICAgICAgY2FzZSBYTUlUX09LOgotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7Ci0gICAgICAgICAgICBkZXZfa2ZyZWVfc2tiKHNrYik7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgcmV0dXJuIDA7CisJaWYgKGxlbmd0aCA8IEVUSF9aTEVOKSB7CisJCWlmIChza2JfcGFkdG8oc2tiLCBFVEhfWkxFTikpCisJCQlyZXR1cm4gMDsKKwkJbGVuZ3RoID0gRVRIX1pMRU47CisJfQorCXN3aXRjaCAocmF5X2h3X3htaXQoc2tiLT5kYXRhLCBsZW5ndGgsIGRldiwgREFUQV9UWVBFKSkgeworCWNhc2UgWE1JVF9OT19DQ1M6CisJY2FzZSBYTUlUX05FRURfQVVUSDoKKwkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCQlyZXR1cm4gMTsKKwljYXNlIFhNSVRfTk9fSU5UUjoKKwljYXNlIFhNSVRfTVNHX0JBRDoKKwljYXNlIFhNSVRfT0s6CisJZGVmYXVsdDoKKwkJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAwOwogfSAvKiByYXlfZGV2X3N0YXJ0X3htaXQgKi8KKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotc3RhdGljIGludCByYXlfaHdfeG1pdCh1bnNpZ25lZCBjaGFyKiBkYXRhLCBpbnQgbGVuLCBzdHJ1Y3QgbmV0X2RldmljZSogZGV2LCAKLSAgICAgICAgICAgICAgICBVQ0hBUiBtc2dfdHlwZSkKK3N0YXRpYyBpbnQgcmF5X2h3X3htaXQodW5zaWduZWQgY2hhciAqZGF0YSwgaW50IGxlbiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJICAgICAgIFVDSEFSIG1zZ190eXBlKQogewotICAgIHJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwotICAgIHN0cnVjdCBjY3MgX19pb21lbSAqcGNjczsKLSAgICBpbnQgY2NzaW5kZXg7Ci0gICAgaW50IG9mZnNldDsKLSAgICBzdHJ1Y3QgdHhfbXNnIF9faW9tZW0gKnB0eDsgLyogQWRkcmVzcyBvZiB4bWl0IGJ1ZmZlciBpbiBQQyBzcGFjZSAqLwotICAgIHNob3J0IGludCBhZGRyOyAgICAgLyogQWRkcmVzcyBvZiB4bWl0IGJ1ZmZlciBpbiBjYXJkIHNwYWNlICovCi0gICAgCi0gICAgREVCVUcoMywicmF5X2h3X3htaXQoZGF0YT0lcCwgbGVuPSVkLCBkZXY9JXApXG4iLGRhdGEsbGVuLGRldik7Ci0gICAgaWYgKGxlbiArIFRYX0hFQURFUl9MRU5HVEggPiBUWF9CVUZfU0laRSkKLSAgICB7Ci0gICAgICAgIHByaW50ayhLRVJOX0lORk8gInJheV9od194bWl0IHBhY2tldCB0b28gbGFyZ2U6ICVkIGJ5dGVzXG4iLGxlbik7Ci0gICAgICAgIHJldHVybiBYTUlUX01TR19CQUQ7Ci0gICAgfQorCXJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBjY3MgX19pb21lbSAqcGNjczsKKwlpbnQgY2NzaW5kZXg7CisJaW50IG9mZnNldDsKKwlzdHJ1Y3QgdHhfbXNnIF9faW9tZW0gKnB0eDsJLyogQWRkcmVzcyBvZiB4bWl0IGJ1ZmZlciBpbiBQQyBzcGFjZSAqLworCXNob3J0IGludCBhZGRyOwkJLyogQWRkcmVzcyBvZiB4bWl0IGJ1ZmZlciBpbiBjYXJkIHNwYWNlICovCisKKwlERUJVRygzLCAicmF5X2h3X3htaXQoZGF0YT0lcCwgbGVuPSVkLCBkZXY9JXApXG4iLCBkYXRhLCBsZW4sIGRldik7CisJaWYgKGxlbiArIFRYX0hFQURFUl9MRU5HVEggPiBUWF9CVUZfU0laRSkgeworCQlwcmludGsoS0VSTl9JTkZPICJyYXlfaHdfeG1pdCBwYWNrZXQgdG9vIGxhcmdlOiAlZCBieXRlc1xuIiwKKwkJICAgICAgIGxlbik7CisJCXJldHVybiBYTUlUX01TR19CQUQ7CisJfQogCXN3aXRjaCAoY2NzaW5kZXggPSBnZXRfZnJlZV90eF9jY3MobG9jYWwpKSB7CiAJY2FzZSBFQ0NTQlVTWToKLQkJREVCVUcoMiwicmF5X2h3X3htaXQgdHhfY2NzIHRhYmxlIGJ1c3lcbiIpOworCQlERUJVRygyLCAicmF5X2h3X3htaXQgdHhfY2NzIHRhYmxlIGJ1c3lcbiIpOwogCWNhc2UgRUNDU0ZVTEw6Ci0gICAgICAgIERFQlVHKDIsInJheV9od194bWl0IE5vIGZyZWUgdHggY2NzXG4iKTsKKwkJREVCVUcoMiwgInJheV9od194bWl0IE5vIGZyZWUgdHggY2NzXG4iKTsKIAljYXNlIEVDQVJER09ORToKLQluZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0gICAgICAgIHJldHVybiBYTUlUX05PX0NDUzsKKwkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCQlyZXR1cm4gWE1JVF9OT19DQ1M7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQotICAgIGFkZHIgPSBUWF9CVUZfQkFTRSArIChjY3NpbmRleCA8PCAxMSk7CisJYWRkciA9IFRYX0JVRl9CQVNFICsgKGNjc2luZGV4IDw8IDExKTsKIAotICAgIGlmIChtc2dfdHlwZSA9PSBEQVRBX1RZUEUpIHsKLSAgICAgICAgbG9jYWwtPnN0YXRzLnR4X2J5dGVzICs9IGxlbjsKLSAgICAgICAgbG9jYWwtPnN0YXRzLnR4X3BhY2tldHMrKzsKLSAgICB9CisJaWYgKG1zZ190eXBlID09IERBVEFfVFlQRSkgeworCQlsb2NhbC0+c3RhdHMudHhfYnl0ZXMgKz0gbGVuOworCQlsb2NhbC0+c3RhdHMudHhfcGFja2V0cysrOworCX0KIAotICAgIHB0eCA9IGxvY2FsLT5zcmFtICsgYWRkcjsKKwlwdHggPSBsb2NhbC0+c3JhbSArIGFkZHI7CiAKLSAgICByYXlfYnVpbGRfaGVhZGVyKGxvY2FsLCBwdHgsIG1zZ190eXBlLCBkYXRhKTsKLSAgICBpZiAodHJhbnNsYXRlKSB7Ci0gICAgICAgIG9mZnNldCA9IHRyYW5zbGF0ZV9mcmFtZShsb2NhbCwgcHR4LCBkYXRhLCBsZW4pOwotICAgIH0KLSAgICBlbHNlIHsgLyogRW5jYXBzdWxhdGUgZnJhbWUgKi8KLSAgICAgICAgLyogVEJEIFRJQiBsZW5ndGggd2lsbCBtb3ZlIGFkZHJlc3Mgb2YgcHR4LT52YXIgKi8KLSAgICAgICAgbWVtY3B5X3RvaW8oJnB0eC0+dmFyLCBkYXRhLCBsZW4pOwotICAgICAgICBvZmZzZXQgPSAwOwotICAgIH0KKwlyYXlfYnVpbGRfaGVhZGVyKGxvY2FsLCBwdHgsIG1zZ190eXBlLCBkYXRhKTsKKwlpZiAodHJhbnNsYXRlKSB7CisJCW9mZnNldCA9IHRyYW5zbGF0ZV9mcmFtZShsb2NhbCwgcHR4LCBkYXRhLCBsZW4pOworCX0gZWxzZSB7IC8qIEVuY2Fwc3VsYXRlIGZyYW1lICovCisJCS8qIFRCRCBUSUIgbGVuZ3RoIHdpbGwgbW92ZSBhZGRyZXNzIG9mIHB0eC0+dmFyICovCisJCW1lbWNweV90b2lvKCZwdHgtPnZhciwgZGF0YSwgbGVuKTsKKwkJb2Zmc2V0ID0gMDsKKwl9CiAKLSAgICAvKiBmaWxsIGluIHRoZSBDQ1MgKi8KLSAgICBwY2NzID0gY2NzX2Jhc2UobG9jYWwpICsgY2NzaW5kZXg7Ci0gICAgbGVuICs9IFRYX0hFQURFUl9MRU5HVEggKyBvZmZzZXQ7Ci0gICAgd3JpdGViKENDU19UWF9SRVFVRVNULCAmcGNjcy0+Y21kKTsKLSAgICB3cml0ZWIoYWRkciA+PiA4LCAmcGNjcy0+dmFyLnR4X3JlcXVlc3QudHhfZGF0YV9wdHJbMF0pOwotICAgIHdyaXRlYihsb2NhbC0+dGliX2xlbmd0aCwgJnBjY3MtPnZhci50eF9yZXF1ZXN0LnR4X2RhdGFfcHRyWzFdKTsKLSAgICB3cml0ZWIobGVuID4+IDgsICZwY2NzLT52YXIudHhfcmVxdWVzdC50eF9kYXRhX2xlbmd0aFswXSk7Ci0gICAgd3JpdGViKGxlbiAmIDB4ZmYsICZwY2NzLT52YXIudHhfcmVxdWVzdC50eF9kYXRhX2xlbmd0aFsxXSk7CisJLyogZmlsbCBpbiB0aGUgQ0NTICovCisJcGNjcyA9IGNjc19iYXNlKGxvY2FsKSArIGNjc2luZGV4OworCWxlbiArPSBUWF9IRUFERVJfTEVOR1RIICsgb2Zmc2V0OworCXdyaXRlYihDQ1NfVFhfUkVRVUVTVCwgJnBjY3MtPmNtZCk7CisJd3JpdGViKGFkZHIgPj4gOCwgJnBjY3MtPnZhci50eF9yZXF1ZXN0LnR4X2RhdGFfcHRyWzBdKTsKKwl3cml0ZWIobG9jYWwtPnRpYl9sZW5ndGgsICZwY2NzLT52YXIudHhfcmVxdWVzdC50eF9kYXRhX3B0clsxXSk7CisJd3JpdGViKGxlbiA+PiA4LCAmcGNjcy0+dmFyLnR4X3JlcXVlc3QudHhfZGF0YV9sZW5ndGhbMF0pOworCXdyaXRlYihsZW4gJiAweGZmLCAmcGNjcy0+dmFyLnR4X3JlcXVlc3QudHhfZGF0YV9sZW5ndGhbMV0pOwogLyogVEJEIHN0aWxsIG5lZWQgcHNtX2NhbT8gKi8KLSAgICB3cml0ZWIoUFNNX0NBTSwgJnBjY3MtPnZhci50eF9yZXF1ZXN0LnBvd19zYXZfbW9kZSk7Ci0gICAgd3JpdGViKGxvY2FsLT5uZXRfZGVmYXVsdF90eF9yYXRlLCAmcGNjcy0+dmFyLnR4X3JlcXVlc3QudHhfcmF0ZSk7Ci0gICAgd3JpdGViKDAsICZwY2NzLT52YXIudHhfcmVxdWVzdC5hbnRlbm5hKTsKLSAgICBERUJVRygzLCJyYXlfaHdfeG1pdCBkZWZhdWx0X3R4X3JhdGUgPSAweCV4XG4iLFwKLSAgICAgICAgICBsb2NhbC0+bmV0X2RlZmF1bHRfdHhfcmF0ZSk7CisJd3JpdGViKFBTTV9DQU0sICZwY2NzLT52YXIudHhfcmVxdWVzdC5wb3dfc2F2X21vZGUpOworCXdyaXRlYihsb2NhbC0+bmV0X2RlZmF1bHRfdHhfcmF0ZSwgJnBjY3MtPnZhci50eF9yZXF1ZXN0LnR4X3JhdGUpOworCXdyaXRlYigwLCAmcGNjcy0+dmFyLnR4X3JlcXVlc3QuYW50ZW5uYSk7CisJREVCVUcoMywgInJheV9od194bWl0IGRlZmF1bHRfdHhfcmF0ZSA9IDB4JXhcbiIsCisJICAgICAgbG9jYWwtPm5ldF9kZWZhdWx0X3R4X3JhdGUpOwogCi0gICAgLyogSW50ZXJydXB0IHRoZSBmaXJtd2FyZSB0byBwcm9jZXNzIHRoZSBjb21tYW5kICovCi0gICAgaWYgKGludGVycnVwdF9lY2YobG9jYWwsIGNjc2luZGV4KSkgewotICAgICAgICBERUJVRygyLCJyYXlfaHdfeG1pdCBmYWlsZWQgLSBFQ0Ygbm90IHJlYWR5IGZvciBpbnRyXG4iKTsKKwkvKiBJbnRlcnJ1cHQgdGhlIGZpcm13YXJlIHRvIHByb2Nlc3MgdGhlIGNvbW1hbmQgKi8KKwlpZiAoaW50ZXJydXB0X2VjZihsb2NhbCwgY2NzaW5kZXgpKSB7CisJCURFQlVHKDIsICJyYXlfaHdfeG1pdCBmYWlsZWQgLSBFQ0Ygbm90IHJlYWR5IGZvciBpbnRyXG4iKTsKIC8qIFRCRCB2ZXJ5IGluZWZmaWNpZW50IHRvIGNvcHkgcGFja2V0IHRvIGJ1ZmZlciwgYW5kIHRoZW4gbm90CiAgICBzZW5kIGl0LCBidXQgdGhlIGFsdGVybmF0aXZlIGlzIHRvIHF1ZXVlIHRoZSBtZXNzYWdlcyBhbmQgdGhhdAogICAgd29uJ3QgYmUgZG9uZSBmb3IgYSB3aGlsZS4gIE1heWJlIHNldCB0YnVzeSB1bnRpbCBhIENDUyBpcyBmcmVlPwogKi8KLSAgICAgICAgd3JpdGViKENDU19CVUZGRVJfRlJFRSwgJnBjY3MtPmJ1ZmZlcl9zdGF0dXMpOwotICAgICAgICByZXR1cm4gWE1JVF9OT19JTlRSOwotICAgIH0KLSAgICByZXR1cm4gWE1JVF9PSzsKKwkJd3JpdGViKENDU19CVUZGRVJfRlJFRSwgJnBjY3MtPmJ1ZmZlcl9zdGF0dXMpOworCQlyZXR1cm4gWE1JVF9OT19JTlRSOworCX0KKwlyZXR1cm4gWE1JVF9PSzsKIH0gLyogZW5kIHJheV9od194bWl0ICovCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi1zdGF0aWMgaW50IHRyYW5zbGF0ZV9mcmFtZShyYXlfZGV2X3QgKmxvY2FsLCBzdHJ1Y3QgdHhfbXNnIF9faW9tZW0gKnB0eCwgdW5zaWduZWQgY2hhciAqZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgaW50IGxlbikKLXsKLSAgICBfX2JlMTYgcHJvdG8gPSAoKHN0cnVjdCBldGhoZHIgKilkYXRhKS0+aF9wcm90bzsKLSAgICBpZiAobnRvaHMocHJvdG8pID49IDE1MzYpIHsgLyogRElYIElJIGV0aGVybmV0IGZyYW1lICovCi0gICAgICAgIERFQlVHKDMsInJheV9jcyB0cmFuc2xhdGVfZnJhbWUgRElYIElJXG4iKTsKLSAgICAgICAgLyogQ29weSBMTEMgaGVhZGVyIHRvIGNhcmQgYnVmZmVyICovCi0gICAgICAgIG1lbWNweV90b2lvKCZwdHgtPnZhciwgZXRoMl9sbGMsIHNpemVvZihldGgyX2xsYykpOwotICAgICAgICBtZW1jcHlfdG9pbyggKCh2b2lkIF9faW9tZW0gKikmcHR4LT52YXIpICsgc2l6ZW9mKGV0aDJfbGxjKSwgKFVDSEFSICopJnByb3RvLCAyKTsKLSAgICAgICAgaWYgKHByb3RvID09IGh0b25zKEVUSF9QX0FBUlApIHx8IHByb3RvID09IGh0b25zKEVUSF9QX0lQWCkpIHsKLSAgICAgICAgICAgIC8qIFRoaXMgaXMgdGhlIHNlbGVjdGl2ZSB0cmFuc2xhdGlvbiB0YWJsZSwgb25seSAyIGVudHJpZXMgKi8KLSAgICAgICAgICAgIHdyaXRlYigweGY4LCAmKChzdHJ1Y3Qgc25hcGhkcl90IF9faW9tZW0gKilwdHgtPnZhciktPm9yZ1szXSk7Ci0gICAgICAgIH0KLSAgICAgICAgLyogQ29weSBib2R5IG9mIGV0aGVybmV0IHBhY2tldCB3aXRob3V0IGV0aGVybmV0IGhlYWRlciAqLwotICAgICAgICBtZW1jcHlfdG9pbygodm9pZCBfX2lvbWVtICopJnB0eC0+dmFyICsgc2l6ZW9mKHN0cnVjdCBzbmFwaGRyX3QpLCBcCi0gICAgICAgICAgICAgICAgICAgIGRhdGEgKyBFVEhfSExFTiwgIGxlbiAtIEVUSF9ITEVOKTsKLSAgICAgICAgcmV0dXJuIChpbnQpIHNpemVvZihzdHJ1Y3Qgc25hcGhkcl90KSAtIEVUSF9ITEVOOwotICAgIH0KLSAgICBlbHNlIHsgLyogYWxyZWFkeSAgODAyIHR5cGUsIGFuZCBwcm90byBpcyBsZW5ndGggKi8KLSAgICAgICAgREVCVUcoMywicmF5X2NzIHRyYW5zbGF0ZV9mcmFtZSA4MDJcbiIpOwotICAgICAgICBpZiAocHJvdG8gPT0gaHRvbnMoMHhmZmZmKSkgeyAvKiBldmlsIG5ldHdhcmUgSVBYIDgwMi4zIHdpdGhvdXQgTExDICovCi0gICAgICAgIERFQlVHKDMsInJheV9jcyB0cmFuc2xhdGVfZnJhbWUgZXZpbCBJUFhcbiIpOwotICAgICAgICAgICAgbWVtY3B5X3RvaW8oJnB0eC0+dmFyLCBkYXRhICsgRVRIX0hMRU4sICBsZW4gLSBFVEhfSExFTik7Ci0gICAgICAgICAgICByZXR1cm4gMCAtIEVUSF9ITEVOOwotICAgICAgICB9Ci0gICAgICAgIG1lbWNweV90b2lvKCZwdHgtPnZhciwgZGF0YSArIEVUSF9ITEVOLCAgbGVuIC0gRVRIX0hMRU4pOwotICAgICAgICByZXR1cm4gMCAtIEVUSF9ITEVOOwotICAgIH0KLSAgICAvKiBUQkQgZG8gb3RoZXIgZnJhbWUgdHlwZXMgKi8KLX0gLyogZW5kIHRyYW5zbGF0ZV9mcmFtZSAqLwotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotc3RhdGljIHZvaWQgcmF5X2J1aWxkX2hlYWRlcihyYXlfZGV2X3QgKmxvY2FsLCBzdHJ1Y3QgdHhfbXNnIF9faW9tZW0gKnB0eCwgVUNIQVIgbXNnX3R5cGUsCi0gICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqZGF0YSkKLXsKLSAgICB3cml0ZWIoUFJPVE9DT0xfVkVSIHwgbXNnX3R5cGUsICZwdHgtPm1hYy5mcmFtZV9jdGxfMSk7Ci0vKioqIElFRUUgODAyLjExIEFkZHJlc3MgZmllbGQgYXNzaWdubWVudHMgKioqKioqKioqKioqKgotICAgICAgICAgICAgICAgIFRPRFMgRlJPTURTICAgYWRkcl8xICAgICBhZGRyXzIgICAgICAgICAgYWRkcl8zICAgYWRkcl80Ci1BZGhvYyAgICAgICAgICAgMCAgICAwICAgICAgICBkZXN0ICAgICAgIHNyYyAodGVybWluYWwpICBCU1NJRCAgICBOL0EKLUFQIHRvIFRlcm1pbmFsICAwICAgIDEgICAgICAgIGRlc3QgICAgICAgQVAoQlNTSUQpICAgICAgIHNvdXJjZSAgIE4vQQotVGVybWluYWwgdG8gQVAgIDEgICAgMCAgICAgICAgQVAoQlNTSUQpICBzcmMgKHRlcm1pbmFsKSAgZGVzdCAgICAgTi9BCi1BUCB0byBBUCAgICAgICAgMSAgICAxICAgICAgICBkZXN0IEFQICAgIHNyYyBBUCAgICAgICAgICBkZXN0ICAgICBzb3VyY2UgICAgICAKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gICAgaWYgKGxvY2FsLT5uZXRfdHlwZSA9PSBBREhPQykgeyAgIAotICAgICAgICB3cml0ZWIoMCwgJnB0eC0+bWFjLmZyYW1lX2N0bF8yKTsKLSAgICAgICAgbWVtY3B5X3RvaW8ocHR4LT5tYWMuYWRkcl8xLCAoKHN0cnVjdCBldGhoZHIgKilkYXRhKS0+aF9kZXN0LCAyICogQUREUkxFTik7Ci0gICAgICAgIG1lbWNweV90b2lvKHB0eC0+bWFjLmFkZHJfMywgbG9jYWwtPmJzc19pZCwgQUREUkxFTik7Ci0gICAgfQotICAgIGVsc2UgLyogaW5mcmFzdHJ1Y3R1cmUgKi8KLSAgICB7Ci0gICAgICAgIGlmIChsb2NhbC0+c3Bhcm0uYjQuYV9hY3RpbmdfYXNfYXBfc3RhdHVzKQotICAgICAgICB7Ci0gICAgICAgICAgICB3cml0ZWIoRkMyX0ZST01fRFMsICZwdHgtPm1hYy5mcmFtZV9jdGxfMik7Ci0gICAgICAgICAgICBtZW1jcHlfdG9pbyhwdHgtPm1hYy5hZGRyXzEsICgoc3RydWN0IGV0aGhkciAqKWRhdGEpLT5oX2Rlc3QsIEFERFJMRU4pOwotICAgICAgICAgICAgbWVtY3B5X3RvaW8ocHR4LT5tYWMuYWRkcl8yLCBsb2NhbC0+YnNzX2lkLCA2KTsKLSAgICAgICAgICAgIG1lbWNweV90b2lvKHB0eC0+bWFjLmFkZHJfMywgKChzdHJ1Y3QgZXRoaGRyICopZGF0YSktPmhfc291cmNlLCBBRERSTEVOKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIC8qIFRlcm1pbmFsICovCi0gICAgICAgIHsKLSAgICAgICAgICAgIHdyaXRlYihGQzJfVE9fRFMsICZwdHgtPm1hYy5mcmFtZV9jdGxfMik7Ci0gICAgICAgICAgICBtZW1jcHlfdG9pbyhwdHgtPm1hYy5hZGRyXzEsIGxvY2FsLT5ic3NfaWQsIEFERFJMRU4pOwotICAgICAgICAgICAgbWVtY3B5X3RvaW8ocHR4LT5tYWMuYWRkcl8yLCAoKHN0cnVjdCBldGhoZHIgKilkYXRhKS0+aF9zb3VyY2UsIEFERFJMRU4pOwotICAgICAgICAgICAgbWVtY3B5X3RvaW8ocHR4LT5tYWMuYWRkcl8zLCAoKHN0cnVjdCBldGhoZHIgKilkYXRhKS0+aF9kZXN0LCBBRERSTEVOKTsKLSAgICAgICAgfQotICAgIH0KLX0gLyogZW5kIGVuY2Fwc3VsYXRlX2ZyYW1lICovCiAKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KK3N0YXRpYyBpbnQgdHJhbnNsYXRlX2ZyYW1lKHJheV9kZXZfdCAqbG9jYWwsIHN0cnVjdCB0eF9tc2cgX19pb21lbSAqcHR4LAorCQkJICAgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IGxlbikKK3sKKwlfX2JlMTYgcHJvdG8gPSAoKHN0cnVjdCBldGhoZHIgKilkYXRhKS0+aF9wcm90bzsKKwlpZiAobnRvaHMocHJvdG8pID49IDE1MzYpIHsgLyogRElYIElJIGV0aGVybmV0IGZyYW1lICovCisJCURFQlVHKDMsICJyYXlfY3MgdHJhbnNsYXRlX2ZyYW1lIERJWCBJSVxuIik7CisJCS8qIENvcHkgTExDIGhlYWRlciB0byBjYXJkIGJ1ZmZlciAqLworCQltZW1jcHlfdG9pbygmcHR4LT52YXIsIGV0aDJfbGxjLCBzaXplb2YoZXRoMl9sbGMpKTsKKwkJbWVtY3B5X3RvaW8oKCh2b2lkIF9faW9tZW0gKikmcHR4LT52YXIpICsgc2l6ZW9mKGV0aDJfbGxjKSwKKwkJCSAgICAoVUNIQVIgKikgJnByb3RvLCAyKTsKKwkJaWYgKHByb3RvID09IGh0b25zKEVUSF9QX0FBUlApIHx8IHByb3RvID09IGh0b25zKEVUSF9QX0lQWCkpIHsKKwkJCS8qIFRoaXMgaXMgdGhlIHNlbGVjdGl2ZSB0cmFuc2xhdGlvbiB0YWJsZSwgb25seSAyIGVudHJpZXMgKi8KKwkJCXdyaXRlYigweGY4LAorCQkJICAgICAgICYoKHN0cnVjdCBzbmFwaGRyX3QgX19pb21lbSAqKXB0eC0+dmFyKS0+b3JnWzNdKTsKKwkJfQorCQkvKiBDb3B5IGJvZHkgb2YgZXRoZXJuZXQgcGFja2V0IHdpdGhvdXQgZXRoZXJuZXQgaGVhZGVyICovCisJCW1lbWNweV90b2lvKCh2b2lkIF9faW9tZW0gKikmcHR4LT52YXIgKworCQkJICAgIHNpemVvZihzdHJ1Y3Qgc25hcGhkcl90KSwgZGF0YSArIEVUSF9ITEVOLAorCQkJICAgIGxlbiAtIEVUSF9ITEVOKTsKKwkJcmV0dXJuIChpbnQpc2l6ZW9mKHN0cnVjdCBzbmFwaGRyX3QpIC0gRVRIX0hMRU47CisJfSBlbHNlIHsgLyogYWxyZWFkeSAgODAyIHR5cGUsIGFuZCBwcm90byBpcyBsZW5ndGggKi8KKwkJREVCVUcoMywgInJheV9jcyB0cmFuc2xhdGVfZnJhbWUgODAyXG4iKTsKKwkJaWYgKHByb3RvID09IGh0b25zKDB4ZmZmZikpIHsgLyogZXZpbCBuZXR3YXJlIElQWCA4MDIuMyB3aXRob3V0IExMQyAqLworCQkJREVCVUcoMywgInJheV9jcyB0cmFuc2xhdGVfZnJhbWUgZXZpbCBJUFhcbiIpOworCQkJbWVtY3B5X3RvaW8oJnB0eC0+dmFyLCBkYXRhICsgRVRIX0hMRU4sIGxlbiAtIEVUSF9ITEVOKTsKKwkJCXJldHVybiAwIC0gRVRIX0hMRU47CisJCX0KKwkJbWVtY3B5X3RvaW8oJnB0eC0+dmFyLCBkYXRhICsgRVRIX0hMRU4sIGxlbiAtIEVUSF9ITEVOKTsKKwkJcmV0dXJuIDAgLSBFVEhfSExFTjsKKwl9CisJLyogVEJEIGRvIG90aGVyIGZyYW1lIHR5cGVzICovCit9IC8qIGVuZCB0cmFuc2xhdGVfZnJhbWUgKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworc3RhdGljIHZvaWQgcmF5X2J1aWxkX2hlYWRlcihyYXlfZGV2X3QgKmxvY2FsLCBzdHJ1Y3QgdHhfbXNnIF9faW9tZW0gKnB0eCwKKwkJCSAgICAgVUNIQVIgbXNnX3R5cGUsIHVuc2lnbmVkIGNoYXIgKmRhdGEpCit7CisJd3JpdGViKFBST1RPQ09MX1ZFUiB8IG1zZ190eXBlLCAmcHR4LT5tYWMuZnJhbWVfY3RsXzEpOworLyoqKiBJRUVFIDgwMi4xMSBBZGRyZXNzIGZpZWxkIGFzc2lnbm1lbnRzICoqKioqKioqKioqKioKKwkJVE9EUwlGUk9NRFMJYWRkcl8xCQlhZGRyXzIJCWFkZHJfMwlhZGRyXzQKK0FkaG9jCQkwCTAJZGVzdAkJc3JjICh0ZXJtaW5hbCkJQlNTSUQJTi9BCitBUCB0byBUZXJtaW5hbAkwCTEJZGVzdAkJQVAoQlNTSUQpCXNvdXJjZQlOL0EKK1Rlcm1pbmFsIHRvIEFQCTEJMAlBUChCU1NJRCkJc3JjICh0ZXJtaW5hbCkJZGVzdAlOL0EKK0FQIHRvIEFQCTEJMQlkZXN0IEFQCQlzcmMgQVAJCWRlc3QJc291cmNlCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCWlmIChsb2NhbC0+bmV0X3R5cGUgPT0gQURIT0MpIHsKKwkJd3JpdGViKDAsICZwdHgtPm1hYy5mcmFtZV9jdGxfMik7CisJCW1lbWNweV90b2lvKHB0eC0+bWFjLmFkZHJfMSwgKChzdHJ1Y3QgZXRoaGRyICopZGF0YSktPmhfZGVzdCwKKwkJCSAgICAyICogQUREUkxFTik7CisJCW1lbWNweV90b2lvKHB0eC0+bWFjLmFkZHJfMywgbG9jYWwtPmJzc19pZCwgQUREUkxFTik7CisJfSBlbHNlIHsgLyogaW5mcmFzdHJ1Y3R1cmUgKi8KKworCQlpZiAobG9jYWwtPnNwYXJtLmI0LmFfYWN0aW5nX2FzX2FwX3N0YXR1cykgeworCQkJd3JpdGViKEZDMl9GUk9NX0RTLCAmcHR4LT5tYWMuZnJhbWVfY3RsXzIpOworCQkJbWVtY3B5X3RvaW8ocHR4LT5tYWMuYWRkcl8xLAorCQkJCSAgICAoKHN0cnVjdCBldGhoZHIgKilkYXRhKS0+aF9kZXN0LCBBRERSTEVOKTsKKwkJCW1lbWNweV90b2lvKHB0eC0+bWFjLmFkZHJfMiwgbG9jYWwtPmJzc19pZCwgNik7CisJCQltZW1jcHlfdG9pbyhwdHgtPm1hYy5hZGRyXzMsCisJCQkJICAgICgoc3RydWN0IGV0aGhkciAqKWRhdGEpLT5oX3NvdXJjZSwgQUREUkxFTik7CisJCX0gZWxzZSB7IC8qIFRlcm1pbmFsICovCisKKwkJCXdyaXRlYihGQzJfVE9fRFMsICZwdHgtPm1hYy5mcmFtZV9jdGxfMik7CisJCQltZW1jcHlfdG9pbyhwdHgtPm1hYy5hZGRyXzEsIGxvY2FsLT5ic3NfaWQsIEFERFJMRU4pOworCQkJbWVtY3B5X3RvaW8ocHR4LT5tYWMuYWRkcl8yLAorCQkJCSAgICAoKHN0cnVjdCBldGhoZHIgKilkYXRhKS0+aF9zb3VyY2UsIEFERFJMRU4pOworCQkJbWVtY3B5X3RvaW8ocHR4LT5tYWMuYWRkcl8zLAorCQkJCSAgICAoKHN0cnVjdCBldGhoZHIgKilkYXRhKS0+aF9kZXN0LCBBRERSTEVOKTsKKwkJfQorCX0KK30gLyogZW5kIGVuY2Fwc3VsYXRlX2ZyYW1lICovCiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIApAQCAtMTA3MSw3ICsxMTExLDcgQEAKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBuZXRkZXZfZXRodG9vbF9vcHMgPSB7Ci0JLmdldF9kcnZpbmZvCQk9IG5ldGRldl9nZXRfZHJ2aW5mbywKKwkuZ2V0X2RydmluZm8gPSBuZXRkZXZfZ2V0X2RydmluZm8sCiB9OwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KQEAgLTEwODEsOSArMTEyMSw3IEBACiAgKiBXaXJlbGVzcyBIYW5kbGVyIDogZ2V0IHByb3RvY29sIG5hbWUKICAqLwogc3RhdGljIGludCByYXlfZ2V0X25hbWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQljaGFyICpjd3JxLAotCQkJY2hhciAqZXh0cmEpCisJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLCBjaGFyICpjd3JxLCBjaGFyICpleHRyYSkKIHsKIAlzdHJjcHkoY3dycSwgIklFRUUgODAyLjExLUZIIik7CiAJcmV0dXJuIDA7CkBAIC0xMDk1LDE0ICsxMTMzLDEzIEBACiAgKi8KIHN0YXRpYyBpbnQgcmF5X3NldF9mcmVxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJc3RydWN0IGl3X2ZyZXEgKmZ3cnEsCi0JCQljaGFyICpleHRyYSkKKwkJCXN0cnVjdCBpd19mcmVxICpmd3JxLCBjaGFyICpleHRyYSkKIHsKIAlyYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgZXJyID0gLUVJTlBST0dSRVNTOwkJLyogQ2FsbCBjb21taXQgaGFuZGxlciAqLworCWludCBlcnIgPSAtRUlOUFJPR1JFU1M7CS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KIAogCS8qIFJlamVjdCBpZiBjYXJkIGlzIGFscmVhZHkgaW5pdGlhbGlzZWQgKi8KLQlpZihsb2NhbC0+Y2FyZF9zdGF0dXMgIT0gQ0FSRF9BV0FJVElOR19QQVJBTSkKKwlpZiAobG9jYWwtPmNhcmRfc3RhdHVzICE9IENBUkRfQVdBSVRJTkdfUEFSQU0pCiAJCXJldHVybiAtRUJVU1k7CiAKIAkvKiBTZXR0aW5nIGJ5IGNoYW5uZWwgbnVtYmVyICovCkBAIC0xMTEzLDE1ICsxMTUwLDE0IEBACiAKIAlyZXR1cm4gZXJyOwogfQotIAorCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKgogICogV2lyZWxlc3MgSGFuZGxlciA6IGdldCBmcmVxdWVuY3kKICAqLwogc3RhdGljIGludCByYXlfZ2V0X2ZyZXEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQlzdHJ1Y3QgaXdfZnJlcSAqZndycSwKLQkJCWNoYXIgKmV4dHJhKQorCQkJc3RydWN0IGl3X2ZyZXEgKmZ3cnEsIGNoYXIgKmV4dHJhKQogewogCXJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwogCkBAIC0xMTM2LDIyICsxMTcyLDIxIEBACiAgKi8KIHN0YXRpYyBpbnQgcmF5X3NldF9lc3NpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgc3RydWN0IGl3X3BvaW50ICpkd3JxLAotCQkJIGNoYXIgKmV4dHJhKQorCQkJIHN0cnVjdCBpd19wb2ludCAqZHdycSwgY2hhciAqZXh0cmEpCiB7CiAJcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7CiAKIAkvKiBSZWplY3QgaWYgY2FyZCBpcyBhbHJlYWR5IGluaXRpYWxpc2VkICovCi0JaWYobG9jYWwtPmNhcmRfc3RhdHVzICE9IENBUkRfQVdBSVRJTkdfUEFSQU0pCisJaWYgKGxvY2FsLT5jYXJkX3N0YXR1cyAhPSBDQVJEX0FXQUlUSU5HX1BBUkFNKQogCQlyZXR1cm4gLUVCVVNZOwogCiAJLyogQ2hlY2sgaWYgd2UgYXNrZWQgZm9yIGBhbnknICovCi0JaWYoZHdycS0+ZmxhZ3MgPT0gMCkgeworCWlmIChkd3JxLT5mbGFncyA9PSAwKSB7CiAJCS8qIENvcmV5IDogY2FuIHlvdSBkbyB0aGF0ID8gKi8KIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCX0gZWxzZSB7CiAJCS8qIENoZWNrIHRoZSBzaXplIG9mIHRoZSBzdHJpbmcgKi8KLQkJaWYoZHdycS0+bGVuZ3RoID4gSVdfRVNTSURfTUFYX1NJWkUpIHsKKwkJaWYgKGR3cnEtPmxlbmd0aCA+IElXX0VTU0lEX01BWF9TSVpFKSB7CiAJCQlyZXR1cm4gLUUyQklHOwogCQl9CiAKQEAgLTExNjAsNyArMTE5NSw3IEBACiAJCW1lbWNweShsb2NhbC0+c3Bhcm0uYjUuYV9jdXJyZW50X2Vzc19pZCwgZXh0cmEsIGR3cnEtPmxlbmd0aCk7CiAJfQogCi0JcmV0dXJuIC1FSU5QUk9HUkVTUzsJCS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KKwlyZXR1cm4gLUVJTlBST0dSRVNTOwkvKiBDYWxsIGNvbW1pdCBoYW5kbGVyICovCiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTExNjksOCArMTIwNCw3IEBACiAgKi8KIHN0YXRpYyBpbnQgcmF5X2dldF9lc3NpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgc3RydWN0IGl3X3BvaW50ICpkd3JxLAotCQkJIGNoYXIgKmV4dHJhKQorCQkJIHN0cnVjdCBpd19wb2ludCAqZHdycSwgY2hhciAqZXh0cmEpCiB7CiAJcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7CiAKQEAgLTExNzksNyArMTIxMyw3IEBACiAKIAkvKiBQdXNoIGl0IG91dCAhICovCiAJZHdycS0+bGVuZ3RoID0gc3RybGVuKGV4dHJhKTsKLQlkd3JxLT5mbGFncyA9IDE7IC8qIGFjdGl2ZSAqLworCWR3cnEtPmZsYWdzID0gMTsJLyogYWN0aXZlICovCiAKIAlyZXR1cm4gMDsKIH0KQEAgLTExODksOSArMTIyMyw4IEBACiAgKiBXaXJlbGVzcyBIYW5kbGVyIDogZ2V0IEFQIGFkZHJlc3MKICAqLwogc3RhdGljIGludCByYXlfZ2V0X3dhcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCXN0cnVjdCBzb2NrYWRkciAqYXdycSwKLQkJCWNoYXIgKmV4dHJhKQorCQkgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJICAgICAgIHN0cnVjdCBzb2NrYWRkciAqYXdycSwgY2hhciAqZXh0cmEpCiB7CiAJcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7CiAKQEAgLTEyMDcsMjUgKzEyNDAsMjQgQEAKICAqLwogc3RhdGljIGludCByYXlfc2V0X3JhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQlzdHJ1Y3QgaXdfcGFyYW0gKnZ3cnEsCi0JCQljaGFyICpleHRyYSkKKwkJCXN0cnVjdCBpd19wYXJhbSAqdndycSwgY2hhciAqZXh0cmEpCiB7CiAJcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7CiAKIAkvKiBSZWplY3QgaWYgY2FyZCBpcyBhbHJlYWR5IGluaXRpYWxpc2VkICovCi0JaWYobG9jYWwtPmNhcmRfc3RhdHVzICE9IENBUkRfQVdBSVRJTkdfUEFSQU0pCisJaWYgKGxvY2FsLT5jYXJkX3N0YXR1cyAhPSBDQVJEX0FXQUlUSU5HX1BBUkFNKQogCQlyZXR1cm4gLUVCVVNZOwogCiAJLyogQ2hlY2sgaWYgcmF0ZSBpcyBpbiByYW5nZSAqLwotCWlmKCh2d3JxLT52YWx1ZSAhPSAxMDAwMDAwKSAmJiAodndycS0+dmFsdWUgIT0gMjAwMDAwMCkpCisJaWYgKCh2d3JxLT52YWx1ZSAhPSAxMDAwMDAwKSAmJiAodndycS0+dmFsdWUgIT0gMjAwMDAwMCkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyogSGFjayBmb3IgMS41IE1iL3MgaW5zdGVhZCBvZiAyIE1iL3MgKi8KLQlpZigobG9jYWwtPmZ3X3ZlciA9PSAweDU1KSAmJgkJLyogUGxlYXNlIGNoZWNrICovCi0JICAgKHZ3cnEtPnZhbHVlID09IDIwMDAwMDApKQorCWlmICgobG9jYWwtPmZ3X3ZlciA9PSAweDU1KSAmJgkvKiBQbGVhc2UgY2hlY2sgKi8KKwkgICAgKHZ3cnEtPnZhbHVlID09IDIwMDAwMDApKQogCQlsb2NhbC0+bmV0X2RlZmF1bHRfdHhfcmF0ZSA9IDM7CiAJZWxzZQotCQlsb2NhbC0+bmV0X2RlZmF1bHRfdHhfcmF0ZSA9IHZ3cnEtPnZhbHVlLzUwMDAwMDsKKwkJbG9jYWwtPm5ldF9kZWZhdWx0X3R4X3JhdGUgPSB2d3JxLT52YWx1ZSAvIDUwMDAwMDsKIAogCXJldHVybiAwOwogfQpAQCAtMTIzNiwxNiArMTI2OCwxNSBAQAogICovCiBzdGF0aWMgaW50IHJheV9nZXRfcmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCXN0cnVjdCBpd19wYXJhbSAqdndycSwKLQkJCWNoYXIgKmV4dHJhKQorCQkJc3RydWN0IGl3X3BhcmFtICp2d3JxLCBjaGFyICpleHRyYSkKIHsKIAlyYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotCWlmKGxvY2FsLT5uZXRfZGVmYXVsdF90eF9yYXRlID09IDMpCi0JCXZ3cnEtPnZhbHVlID0gMjAwMDAwMDsJCS8qIEh1bS4uLiAqLworCWlmIChsb2NhbC0+bmV0X2RlZmF1bHRfdHhfcmF0ZSA9PSAzKQorCQl2d3JxLT52YWx1ZSA9IDIwMDAwMDA7CS8qIEh1bS4uLiAqLwogCWVsc2UKIAkJdndycS0+dmFsdWUgPSBsb2NhbC0+bmV0X2RlZmF1bHRfdHhfcmF0ZSAqIDUwMDAwMDsKLQl2d3JxLT5maXhlZCA9IDA7CQkvKiBXZSBhcmUgaW4gYXV0byBtb2RlICovCisJdndycS0+Zml4ZWQgPSAwOwkvKiBXZSBhcmUgaW4gYXV0byBtb2RlICovCiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEyNTYsNDMgKzEyODcsNDAgQEAKICAqLwogc3RhdGljIGludCByYXlfc2V0X3J0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJICAgICAgIHN0cnVjdCBpd19wYXJhbSAqdndycSwKLQkJICAgICAgIGNoYXIgKmV4dHJhKQorCQkgICAgICAgc3RydWN0IGl3X3BhcmFtICp2d3JxLCBjaGFyICpleHRyYSkKIHsKIAlyYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgcnRociA9IHZ3cnEtPnZhbHVlOwogCiAJLyogUmVqZWN0IGlmIGNhcmQgaXMgYWxyZWFkeSBpbml0aWFsaXNlZCAqLwotCWlmKGxvY2FsLT5jYXJkX3N0YXR1cyAhPSBDQVJEX0FXQUlUSU5HX1BBUkFNKQorCWlmIChsb2NhbC0+Y2FyZF9zdGF0dXMgIT0gQ0FSRF9BV0FJVElOR19QQVJBTSkKIAkJcmV0dXJuIC1FQlVTWTsKIAogCS8qIGlmKHdycS0+dS5ydHMuZml4ZWQgPT0gMCkgd2Ugc2hvdWxkIGNvbXBsYWluICovCi0JaWYodndycS0+ZGlzYWJsZWQpCisJaWYgKHZ3cnEtPmRpc2FibGVkKQogCQlydGhyID0gMzI3Njc7CiAJZWxzZSB7Ci0JCWlmKChydGhyIDwgMCkgfHwgKHJ0aHIgPiAyMzQ3KSkgLyogV2hhdCdzIHRoZSBtYXggcGFja2V0IHNpemUgPz8/ICovCisJCWlmICgocnRociA8IDApIHx8IChydGhyID4gMjM0NykpICAgLyogV2hhdCdzIHRoZSBtYXggcGFja2V0IHNpemUgPz8/ICovCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJbG9jYWwtPnNwYXJtLmI1LmFfcnRzX3RocmVzaG9sZFswXSA9IChydGhyID4+IDgpICYgMHhGRjsKIAlsb2NhbC0+c3Bhcm0uYjUuYV9ydHNfdGhyZXNob2xkWzFdID0gcnRociAmIDB4RkY7CiAKLQlyZXR1cm4gLUVJTlBST0dSRVNTOwkJLyogQ2FsbCBjb21taXQgaGFuZGxlciAqLworCXJldHVybiAtRUlOUFJPR1JFU1M7CS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKgogICogV2lyZWxlc3MgSGFuZGxlciA6IGdldCBSVFMgdGhyZXNob2xkCiAgKi8KIHN0YXRpYyBpbnQgcmF5X2dldF9ydHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCSAgICAgICBzdHJ1Y3QgaXdfcGFyYW0gKnZ3cnEsCi0JCSAgICAgICBjaGFyICpleHRyYSkKKwkJICAgICAgIHN0cnVjdCBpd19wYXJhbSAqdndycSwgY2hhciAqZXh0cmEpCiB7CiAJcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7CiAKIAl2d3JxLT52YWx1ZSA9IChsb2NhbC0+c3Bhcm0uYjUuYV9ydHNfdGhyZXNob2xkWzBdIDw8IDgpCi0JCSsgbG9jYWwtPnNwYXJtLmI1LmFfcnRzX3RocmVzaG9sZFsxXTsKKwkgICAgKyBsb2NhbC0+c3Bhcm0uYjUuYV9ydHNfdGhyZXNob2xkWzFdOwogCXZ3cnEtPmRpc2FibGVkID0gKHZ3cnEtPnZhbHVlID09IDMyNzY3KTsKIAl2d3JxLT5maXhlZCA9IDE7CiAKQEAgLTEzMDUsMjcgKzEzMzMsMjYgQEAKICAqLwogc3RhdGljIGludCByYXlfc2V0X2ZyYWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQlzdHJ1Y3QgaXdfcGFyYW0gKnZ3cnEsCi0JCQljaGFyICpleHRyYSkKKwkJCXN0cnVjdCBpd19wYXJhbSAqdndycSwgY2hhciAqZXh0cmEpCiB7CiAJcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7CiAJaW50IGZ0aHIgPSB2d3JxLT52YWx1ZTsKIAogCS8qIFJlamVjdCBpZiBjYXJkIGlzIGFscmVhZHkgaW5pdGlhbGlzZWQgKi8KLQlpZihsb2NhbC0+Y2FyZF9zdGF0dXMgIT0gQ0FSRF9BV0FJVElOR19QQVJBTSkKKwlpZiAobG9jYWwtPmNhcmRfc3RhdHVzICE9IENBUkRfQVdBSVRJTkdfUEFSQU0pCiAJCXJldHVybiAtRUJVU1k7CiAKIAkvKiBpZih3cnEtPnUuZnJhZy5maXhlZCA9PSAwKSBzaG91bGQgY29tcGxhaW4gKi8KLQlpZih2d3JxLT5kaXNhYmxlZCkKKwlpZiAodndycS0+ZGlzYWJsZWQpCiAJCWZ0aHIgPSAzMjc2NzsKIAllbHNlIHsKLQkJaWYoKGZ0aHIgPCAyNTYpIHx8IChmdGhyID4gMjM0NykpIC8qIFRvIGNoZWNrIG91dCAhICovCisJCWlmICgoZnRociA8IDI1NikgfHwgKGZ0aHIgPiAyMzQ3KSkJLyogVG8gY2hlY2sgb3V0ICEgKi8KIAkJCXJldHVybiAtRUlOVkFMOwogCX0KIAlsb2NhbC0+c3Bhcm0uYjUuYV9mcmFnX3RocmVzaG9sZFswXSA9IChmdGhyID4+IDgpICYgMHhGRjsKIAlsb2NhbC0+c3Bhcm0uYjUuYV9mcmFnX3RocmVzaG9sZFsxXSA9IGZ0aHIgJiAweEZGOwogCi0JcmV0dXJuIC1FSU5QUk9HUkVTUzsJCS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KKwlyZXR1cm4gLUVJTlBST0dSRVNTOwkvKiBDYWxsIGNvbW1pdCBoYW5kbGVyICovCiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTEzMzQsMTMgKzEzNjEsMTIgQEAKICAqLwogc3RhdGljIGludCByYXlfZ2V0X2ZyYWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQlzdHJ1Y3QgaXdfcGFyYW0gKnZ3cnEsCi0JCQljaGFyICpleHRyYSkKKwkJCXN0cnVjdCBpd19wYXJhbSAqdndycSwgY2hhciAqZXh0cmEpCiB7CiAJcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7CiAKIAl2d3JxLT52YWx1ZSA9IChsb2NhbC0+c3Bhcm0uYjUuYV9mcmFnX3RocmVzaG9sZFswXSA8PCA4KQotCQkrIGxvY2FsLT5zcGFybS5iNS5hX2ZyYWdfdGhyZXNob2xkWzFdOworCSAgICArIGxvY2FsLT5zcGFybS5iNS5hX2ZyYWdfdGhyZXNob2xkWzFdOwogCXZ3cnEtPmRpc2FibGVkID0gKHZ3cnEtPnZhbHVlID09IDMyNzY3KTsKIAl2d3JxLT5maXhlZCA9IDE7CiAKQEAgLTEzNTIsMjMgKzEzNzgsMjAgQEAKICAqIFdpcmVsZXNzIEhhbmRsZXIgOiBzZXQgTW9kZSBvZiBPcGVyYXRpb24KICAqLwogc3RhdGljIGludCByYXlfc2V0X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQlfX3UzMiAqdXdycSwKLQkJCWNoYXIgKmV4dHJhKQorCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywgX191MzIgKnV3cnEsIGNoYXIgKmV4dHJhKQogewogCXJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBlcnIgPSAtRUlOUFJPR1JFU1M7CQkvKiBDYWxsIGNvbW1pdCBoYW5kbGVyICovCisJaW50IGVyciA9IC1FSU5QUk9HUkVTUzsJLyogQ2FsbCBjb21taXQgaGFuZGxlciAqLwogCWNoYXIgY2FyZF9tb2RlID0gMTsKIAogCS8qIFJlamVjdCBpZiBjYXJkIGlzIGFscmVhZHkgaW5pdGlhbGlzZWQgKi8KLQlpZihsb2NhbC0+Y2FyZF9zdGF0dXMgIT0gQ0FSRF9BV0FJVElOR19QQVJBTSkKKwlpZiAobG9jYWwtPmNhcmRfc3RhdHVzICE9IENBUkRfQVdBSVRJTkdfUEFSQU0pCiAJCXJldHVybiAtRUJVU1k7CiAKLQlzd2l0Y2ggKCp1d3JxKQotCXsKKwlzd2l0Y2ggKCp1d3JxKSB7CiAJY2FzZSBJV19NT0RFX0FESE9DOgogCQljYXJkX21vZGUgPSAwOwotCQkvLyBGYWxsIHRocm91Z2gKKwkJLyogRmFsbCB0aHJvdWdoICovCiAJY2FzZSBJV19NT0RFX0lORlJBOgogCQlsb2NhbC0+c3Bhcm0uYjUuYV9uZXR3b3JrX3R5cGUgPSBjYXJkX21vZGU7CiAJCWJyZWFrOwpAQCAtMTM4NCwxMyArMTQwNywxMSBAQAogICogV2lyZWxlc3MgSGFuZGxlciA6IGdldCBNb2RlIG9mIE9wZXJhdGlvbgogICovCiBzdGF0aWMgaW50IHJheV9nZXRfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCV9fdTMyICp1d3JxLAotCQkJY2hhciAqZXh0cmEpCisJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLCBfX3UzMiAqdXdycSwgY2hhciAqZXh0cmEpCiB7CiAJcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7CiAKLQlpZihsb2NhbC0+c3Bhcm0uYjUuYV9uZXR3b3JrX3R5cGUpCisJaWYgKGxvY2FsLT5zcGFybS5iNS5hX25ldHdvcmtfdHlwZSkKIAkJKnV3cnEgPSBJV19NT0RFX0lORlJBOwogCWVsc2UKIAkJKnV3cnEgPSBJV19NT0RFX0FESE9DOwpAQCAtMTQwNCwxMiArMTQyNSwxMSBAQAogICovCiBzdGF0aWMgaW50IHJheV9nZXRfcmFuZ2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJIHN0cnVjdCBpd19wb2ludCAqZHdycSwKLQkJCSBjaGFyICpleHRyYSkKKwkJCSBzdHJ1Y3QgaXdfcG9pbnQgKmR3cnEsIGNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBpd19yYW5nZSAqcmFuZ2UgPSAoc3RydWN0IGl3X3JhbmdlICopIGV4dHJhOworCXN0cnVjdCBpd19yYW5nZSAqcmFuZ2UgPSAoc3RydWN0IGl3X3JhbmdlICopZXh0cmE7CiAKLQltZW1zZXQoKGNoYXIgKikgcmFuZ2UsIDAsIHNpemVvZihzdHJ1Y3QgaXdfcmFuZ2UpKTsKKwltZW1zZXQoKGNoYXIgKilyYW5nZSwgMCwgc2l6ZW9mKHN0cnVjdCBpd19yYW5nZSkpOwogCiAJLyogU2V0IHRoZSBsZW5ndGggKHZlcnkgaW1wb3J0YW50IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5KSAqLwogCWR3cnEtPmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgaXdfcmFuZ2UpOwpAQCAtMTQyMCw3ICsxNDQwLDcgQEAKIAogCS8qIFNldCBpbmZvcm1hdGlvbiBpbiB0aGUgcmFuZ2Ugc3RydWN0ICovCiAJcmFuZ2UtPnRocm91Z2hwdXQgPSAxLjEgKiAxMDAwICogMTAwMDsJLyogUHV0IHRoZSByaWdodCBudW1iZXIgaGVyZSAqLwotCXJhbmdlLT5udW1fY2hhbm5lbHMgPSBob3BfcGF0dGVybl9sZW5ndGhbKGludCljb3VudHJ5XTsgCisJcmFuZ2UtPm51bV9jaGFubmVscyA9IGhvcF9wYXR0ZXJuX2xlbmd0aFsoaW50KWNvdW50cnldOwogCXJhbmdlLT5udW1fZnJlcXVlbmN5ID0gMDsKIAlyYW5nZS0+bWF4X3F1YWwucXVhbCA9IDA7CiAJcmFuZ2UtPm1heF9xdWFsLmxldmVsID0gMjU1OwkvKiBXaGF0J3MgdGhlIGNvcnJlY3QgdmFsdWUgPyAqLwpAQCAtMTQzNyw4ICsxNDU3LDcgQEAKICAqLwogc3RhdGljIGludCByYXlfc2V0X2ZyYW1pbmcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LAotCQkJICAgY2hhciAqZXh0cmEpCisJCQkgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKIHsKIAl0cmFuc2xhdGUgPSAqKGV4dHJhKTsJLyogU2V0IGZyYW1pbmcgbW9kZSAqLwogCkBAIC0xNDUxLDggKzE0NzAsNyBAQAogICovCiBzdGF0aWMgaW50IHJheV9nZXRfZnJhbWluZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsCi0JCQkgICBjaGFyICpleHRyYSkKKwkJCSAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewogCSooZXh0cmEpID0gdHJhbnNsYXRlOwogCkBAIC0xNDY1LDggKzE0ODMsNyBAQAogICovCiBzdGF0aWMgaW50IHJheV9nZXRfY291bnRyeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsCi0JCQkgICBjaGFyICpleHRyYSkKKwkJCSAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewogCSooZXh0cmEpID0gY291bnRyeTsKIApAQCAtMTQ3NywxMSArMTQ5NCwxMCBAQAogLyoKICAqIENvbW1pdCBoYW5kbGVyIDogY2FsbGVkIGFmdGVyIGEgYnVuY2ggb2YgU0VUIG9wZXJhdGlvbnMKICAqLwotc3RhdGljIGludCByYXlfY29tbWl0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCSAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCS8qIE5VTEwgKi8KLQkJICAgICAgdm9pZCAqendycSwJCQkvKiBOVUxMICovCi0JCSAgICAgIGNoYXIgKmV4dHJhKQkJCS8qIE5VTEwgKi8KLXsKK3N0YXRpYyBpbnQgcmF5X2NvbW1pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAkvKiBOVUxMICovCisJCSAgICAgIHZvaWQgKnp3cnEsCS8qIE5VTEwgKi8KKwkJICAgICAgY2hhciAqZXh0cmEpCit7IC8qIE5VTEwgKi8KIAlyZXR1cm4gMDsKIH0KIApAQCAtMTQ4OSwzMyArMTUwNSwzNCBAQAogLyoKICAqIFN0YXRzIGhhbmRsZXIgOiByZXR1cm4gV2lyZWxlc3MgU3RhdHMKICAqLwotc3RhdGljIGl3X3N0YXRzICogcmF5X2dldF93aXJlbGVzc19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqCWRldikKK3N0YXRpYyBpd19zdGF0cyAqcmF5X2dldF93aXJlbGVzc19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotICByYXlfZGV2X3QgKglsb2NhbCA9IG5ldGRldl9wcml2KGRldik7Ci0gIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKLSAgc3RydWN0IHN0YXR1cyBfX2lvbWVtICpwID0gbG9jYWwtPnNyYW0gKyBTVEFUVVNfQkFTRTsKKwlyYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7CisJc3RydWN0IHN0YXR1cyBfX2lvbWVtICpwID0gbG9jYWwtPnNyYW0gKyBTVEFUVVNfQkFTRTsKIAotICBpZihsb2NhbCA9PSAocmF5X2Rldl90ICopIE5VTEwpCi0gICAgcmV0dXJuIChpd19zdGF0cyAqKSBOVUxMOworCWlmIChsb2NhbCA9PSAocmF5X2Rldl90ICopIE5VTEwpCisJCXJldHVybiAoaXdfc3RhdHMgKikgTlVMTDsKIAotICBsb2NhbC0+d3N0YXRzLnN0YXR1cyA9IGxvY2FsLT5jYXJkX3N0YXR1czsKKwlsb2NhbC0+d3N0YXRzLnN0YXR1cyA9IGxvY2FsLT5jYXJkX3N0YXR1czsKICNpZmRlZiBXSVJFTEVTU19TUFkKLSAgaWYoKGxvY2FsLT5zcHlfZGF0YS5zcHlfbnVtYmVyID4gMCkgJiYgKGxvY2FsLT5zcGFybS5iNS5hX25ldHdvcmtfdHlwZSA9PSAwKSkKLSAgICB7Ci0gICAgICAvKiBHZXQgaXQgZnJvbSB0aGUgZmlyc3Qgbm9kZSBpbiBzcHkgbGlzdCAqLwotICAgICAgbG9jYWwtPndzdGF0cy5xdWFsLnF1YWwgPSBsb2NhbC0+c3B5X2RhdGEuc3B5X3N0YXRbMF0ucXVhbDsKLSAgICAgIGxvY2FsLT53c3RhdHMucXVhbC5sZXZlbCA9IGxvY2FsLT5zcHlfZGF0YS5zcHlfc3RhdFswXS5sZXZlbDsKLSAgICAgIGxvY2FsLT53c3RhdHMucXVhbC5ub2lzZSA9IGxvY2FsLT5zcHlfZGF0YS5zcHlfc3RhdFswXS5ub2lzZTsKLSAgICAgIGxvY2FsLT53c3RhdHMucXVhbC51cGRhdGVkID0gbG9jYWwtPnNweV9kYXRhLnNweV9zdGF0WzBdLnVwZGF0ZWQ7Ci0gICAgfQorCWlmICgobG9jYWwtPnNweV9kYXRhLnNweV9udW1iZXIgPiAwKQorCSAgICAmJiAobG9jYWwtPnNwYXJtLmI1LmFfbmV0d29ya190eXBlID09IDApKSB7CisJCS8qIEdldCBpdCBmcm9tIHRoZSBmaXJzdCBub2RlIGluIHNweSBsaXN0ICovCisJCWxvY2FsLT53c3RhdHMucXVhbC5xdWFsID0gbG9jYWwtPnNweV9kYXRhLnNweV9zdGF0WzBdLnF1YWw7CisJCWxvY2FsLT53c3RhdHMucXVhbC5sZXZlbCA9IGxvY2FsLT5zcHlfZGF0YS5zcHlfc3RhdFswXS5sZXZlbDsKKwkJbG9jYWwtPndzdGF0cy5xdWFsLm5vaXNlID0gbG9jYWwtPnNweV9kYXRhLnNweV9zdGF0WzBdLm5vaXNlOworCQlsb2NhbC0+d3N0YXRzLnF1YWwudXBkYXRlZCA9CisJCSAgICBsb2NhbC0+c3B5X2RhdGEuc3B5X3N0YXRbMF0udXBkYXRlZDsKKwl9CiAjZW5kaWYgLyogV0lSRUxFU1NfU1BZICovCiAKLSAgaWYocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSB7Ci0gICAgbG9jYWwtPndzdGF0cy5xdWFsLm5vaXNlID0gcmVhZGIoJnAtPnJ4bm9pc2UpOwotICAgIGxvY2FsLT53c3RhdHMucXVhbC51cGRhdGVkIHw9IDQ7Ci0gIH0KKwlpZiAocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSB7CisJCWxvY2FsLT53c3RhdHMucXVhbC5ub2lzZSA9IHJlYWRiKCZwLT5yeG5vaXNlKTsKKwkJbG9jYWwtPndzdGF0cy5xdWFsLnVwZGF0ZWQgfD0gNDsKKwl9CiAKLSAgcmV0dXJuICZsb2NhbC0+d3N0YXRzOworCXJldHVybiAmbG9jYWwtPndzdGF0czsKIH0gLyogZW5kIHJheV9nZXRfd2lyZWxlc3Nfc3RhdHMgKi8KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMTUyMywxMTU5ICsxNTQwLDEyNjQgQEAKICAqIFN0cnVjdHVyZXMgdG8gZXhwb3J0IHRoZSBXaXJlbGVzcyBIYW5kbGVycwogICovCiAKLXN0YXRpYyBjb25zdCBpd19oYW5kbGVyCXJheV9oYW5kbGVyW10gPSB7Ci0JW1NJT0NTSVdDT01NSVQtU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIHJheV9jb21taXQsCi0JW1NJT0NHSVdOQU1FICAtU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIHJheV9nZXRfbmFtZSwKLQlbU0lPQ1NJV0ZSRVEgIC1TSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgcmF5X3NldF9mcmVxLAotCVtTSU9DR0lXRlJFUSAgLVNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSByYXlfZ2V0X2ZyZXEsCi0JW1NJT0NTSVdNT0RFICAtU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIHJheV9zZXRfbW9kZSwKLQlbU0lPQ0dJV01PREUgIC1TSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgcmF5X2dldF9tb2RlLAotCVtTSU9DR0lXUkFOR0UgLVNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSByYXlfZ2V0X3JhbmdlLAorc3RhdGljIGNvbnN0IGl3X2hhbmRsZXIgcmF5X2hhbmRsZXJbXSA9IHsKKwlbU0lPQ1NJV0NPTU1JVCAtIFNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSByYXlfY29tbWl0LAorCVtTSU9DR0lXTkFNRSAtIFNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSByYXlfZ2V0X25hbWUsCisJW1NJT0NTSVdGUkVRIC0gU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIHJheV9zZXRfZnJlcSwKKwlbU0lPQ0dJV0ZSRVEgLSBTSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgcmF5X2dldF9mcmVxLAorCVtTSU9DU0lXTU9ERSAtIFNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSByYXlfc2V0X21vZGUsCisJW1NJT0NHSVdNT0RFIC0gU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIHJheV9nZXRfbW9kZSwKKwlbU0lPQ0dJV1JBTkdFIC0gU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIHJheV9nZXRfcmFuZ2UsCiAjaWZkZWYgV0lSRUxFU1NfU1BZCi0gCVtTSU9DU0lXU1BZICAgLVNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSBpd19oYW5kbGVyX3NldF9zcHksCi0JW1NJT0NHSVdTUFkgICAtU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIGl3X2hhbmRsZXJfZ2V0X3NweSwKLQlbU0lPQ1NJV1RIUlNQWS1TSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgaXdfaGFuZGxlcl9zZXRfdGhyc3B5LAotCVtTSU9DR0lXVEhSU1BZLVNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSBpd19oYW5kbGVyX2dldF90aHJzcHksCi0jZW5kaWYJLyogV0lSRUxFU1NfU1BZICovCi0JW1NJT0NHSVdBUCAgICAtU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIHJheV9nZXRfd2FwLAotCVtTSU9DU0lXRVNTSUQgLVNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSByYXlfc2V0X2Vzc2lkLAotCVtTSU9DR0lXRVNTSUQgLVNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSByYXlfZ2V0X2Vzc2lkLAotCVtTSU9DU0lXUkFURSAgLVNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSByYXlfc2V0X3JhdGUsCi0JW1NJT0NHSVdSQVRFICAtU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIHJheV9nZXRfcmF0ZSwKLQlbU0lPQ1NJV1JUUyAgIC1TSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgcmF5X3NldF9ydHMsCi0JW1NJT0NHSVdSVFMgICAtU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIHJheV9nZXRfcnRzLAotCVtTSU9DU0lXRlJBRyAgLVNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSByYXlfc2V0X2ZyYWcsCi0JW1NJT0NHSVdGUkFHICAtU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIHJheV9nZXRfZnJhZywKKwlbU0lPQ1NJV1NQWSAtIFNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSBpd19oYW5kbGVyX3NldF9zcHksCisJW1NJT0NHSVdTUFkgLSBTSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgaXdfaGFuZGxlcl9nZXRfc3B5LAorCVtTSU9DU0lXVEhSU1BZIC0gU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIGl3X2hhbmRsZXJfc2V0X3RocnNweSwKKwlbU0lPQ0dJV1RIUlNQWSAtIFNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSBpd19oYW5kbGVyX2dldF90aHJzcHksCisjZW5kaWYgLyogV0lSRUxFU1NfU1BZICovCisJW1NJT0NHSVdBUCAtIFNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSByYXlfZ2V0X3dhcCwKKwlbU0lPQ1NJV0VTU0lEIC0gU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIHJheV9zZXRfZXNzaWQsCisJW1NJT0NHSVdFU1NJRCAtIFNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSByYXlfZ2V0X2Vzc2lkLAorCVtTSU9DU0lXUkFURSAtIFNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSByYXlfc2V0X3JhdGUsCisJW1NJT0NHSVdSQVRFIC0gU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIHJheV9nZXRfcmF0ZSwKKwlbU0lPQ1NJV1JUUyAtIFNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSByYXlfc2V0X3J0cywKKwlbU0lPQ0dJV1JUUyAtIFNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSByYXlfZ2V0X3J0cywKKwlbU0lPQ1NJV0ZSQUcgLSBTSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgcmF5X3NldF9mcmFnLAorCVtTSU9DR0lXRlJBRyAtIFNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSByYXlfZ2V0X2ZyYWcsCiB9OwogCi0jZGVmaW5lIFNJT0NTSVBGUkFNSU5HCVNJT0NJV0ZJUlNUUFJJVgkJLyogU2V0IGZyYW1pbmcgbW9kZSAqLworI2RlZmluZSBTSU9DU0lQRlJBTUlORwlTSU9DSVdGSVJTVFBSSVYJLyogU2V0IGZyYW1pbmcgbW9kZSAqLwogI2RlZmluZSBTSU9DR0lQRlJBTUlORwlTSU9DSVdGSVJTVFBSSVYgKyAxCS8qIEdldCBmcmFtaW5nIG1vZGUgKi8KICNkZWZpbmUgU0lPQ0dJUENPVU5UUlkJU0lPQ0lXRklSU1RQUklWICsgMwkvKiBHZXQgY291bnRyeSBjb2RlICovCiAKLXN0YXRpYyBjb25zdCBpd19oYW5kbGVyCXJheV9wcml2YXRlX2hhbmRsZXJbXSA9IHsKK3N0YXRpYyBjb25zdCBpd19oYW5kbGVyIHJheV9wcml2YXRlX2hhbmRsZXJbXSA9IHsKIAlbMF0gPSAoaXdfaGFuZGxlcikgcmF5X3NldF9mcmFtaW5nLAogCVsxXSA9IChpd19oYW5kbGVyKSByYXlfZ2V0X2ZyYW1pbmcsCiAJWzNdID0gKGl3X2hhbmRsZXIpIHJheV9nZXRfY291bnRyeSwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaXdfcHJpdl9hcmdzCXJheV9wcml2YXRlX2FyZ3NbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaXdfcHJpdl9hcmdzIHJheV9wcml2YXRlX2FyZ3NbXSA9IHsKIC8qIGNtZCwJCXNldF9hcmdzLAlnZXRfYXJncywJbmFtZSAqLwoteyBTSU9DU0lQRlJBTUlORywgSVdfUFJJVl9UWVBFX0JZVEUgfCBJV19QUklWX1NJWkVfRklYRUQgfCAxLCAwLCAic2V0X2ZyYW1pbmciIH0sCi17IFNJT0NHSVBGUkFNSU5HLCAwLCBJV19QUklWX1RZUEVfQllURSB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDEsICJnZXRfZnJhbWluZyIgfSwKLXsgU0lPQ0dJUENPVU5UUlksIDAsIElXX1BSSVZfVFlQRV9CWVRFIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwgImdldF9jb3VudHJ5IiB9LAorCXtTSU9DU0lQRlJBTUlORywgSVdfUFJJVl9UWVBFX0JZVEUgfCBJV19QUklWX1NJWkVfRklYRUQgfCAxLCAwLAorCSAic2V0X2ZyYW1pbmcifSwKKwl7U0lPQ0dJUEZSQU1JTkcsIDAsIElXX1BSSVZfVFlQRV9CWVRFIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwKKwkgImdldF9mcmFtaW5nIn0sCisJe1NJT0NHSVBDT1VOVFJZLCAwLCBJV19QUklWX1RZUEVfQllURSB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDEsCisJICJnZXRfY291bnRyeSJ9LAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBpd19oYW5kbGVyX2RlZglyYXlfaGFuZGxlcl9kZWYgPQotewotCS5udW1fc3RhbmRhcmQJPSBBUlJBWV9TSVpFKHJheV9oYW5kbGVyKSwKLQkubnVtX3ByaXZhdGUJPSBBUlJBWV9TSVpFKHJheV9wcml2YXRlX2hhbmRsZXIpLAorc3RhdGljIGNvbnN0IHN0cnVjdCBpd19oYW5kbGVyX2RlZiByYXlfaGFuZGxlcl9kZWYgPSB7CisJLm51bV9zdGFuZGFyZCA9IEFSUkFZX1NJWkUocmF5X2hhbmRsZXIpLAorCS5udW1fcHJpdmF0ZSA9IEFSUkFZX1NJWkUocmF5X3ByaXZhdGVfaGFuZGxlciksCiAJLm51bV9wcml2YXRlX2FyZ3MgPSBBUlJBWV9TSVpFKHJheV9wcml2YXRlX2FyZ3MpLAotCS5zdGFuZGFyZAk9IHJheV9oYW5kbGVyLAotCS5wcml2YXRlCT0gcmF5X3ByaXZhdGVfaGFuZGxlciwKLQkucHJpdmF0ZV9hcmdzCT0gcmF5X3ByaXZhdGVfYXJncywKKwkuc3RhbmRhcmQgPSByYXlfaGFuZGxlciwKKwkucHJpdmF0ZSA9IHJheV9wcml2YXRlX2hhbmRsZXIsCisJLnByaXZhdGVfYXJncyA9IHJheV9wcml2YXRlX2FyZ3MsCiAJLmdldF93aXJlbGVzc19zdGF0cyA9IHJheV9nZXRfd2lyZWxlc3Nfc3RhdHMsCiB9OwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiBzdGF0aWMgaW50IHJheV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0gICAgcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7Ci0gICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbms7Ci0gICAgbGluayA9IGxvY2FsLT5maW5kZXI7Ci0gICAgCi0gICAgREVCVUcoMSwgInJheV9vcGVuKCclcycpXG4iLCBkZXYtPm5hbWUpOworCXJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rOworCWxpbmsgPSBsb2NhbC0+ZmluZGVyOwogCi0gICAgaWYgKGxpbmstPm9wZW4gPT0gMCkKLQkgICAgbG9jYWwtPm51bV9tdWx0aSA9IDA7Ci0gICAgbGluay0+b3BlbisrOworCURFQlVHKDEsICJyYXlfb3BlbignJXMnKVxuIiwgZGV2LT5uYW1lKTsKIAotICAgIC8qIElmIHRoZSBjYXJkIGlzIG5vdCBzdGFydGVkLCB0aW1lIHRvIHN0YXJ0IGl0ICEgLSBKZWFuIElJICovCi0gICAgaWYobG9jYWwtPmNhcmRfc3RhdHVzID09IENBUkRfQVdBSVRJTkdfUEFSQU0pIHsKLQlpbnQgaTsKKwlpZiAobGluay0+b3BlbiA9PSAwKQorCQlsb2NhbC0+bnVtX211bHRpID0gMDsKKwlsaW5rLT5vcGVuKys7CiAKLQlERUJVRygxLCJyYXlfb3BlbjogZG9pbmcgaW5pdCBub3cgIVxuIik7CisJLyogSWYgdGhlIGNhcmQgaXMgbm90IHN0YXJ0ZWQsIHRpbWUgdG8gc3RhcnQgaXQgISAtIEplYW4gSUkgKi8KKwlpZiAobG9jYWwtPmNhcmRfc3RhdHVzID09IENBUkRfQVdBSVRJTkdfUEFSQU0pIHsKKwkJaW50IGk7CiAKLQkvKiBEb3dubG9hZCBzdGFydHVwIHBhcmFtZXRlcnMgKi8KLQlpZiAoIChpID0gZGxfc3RhcnR1cF9wYXJhbXMoZGV2KSkgPCAwKQotCSAgewotCSAgICBwcmludGsoS0VSTl9JTkZPICJyYXlfZGV2X2luaXQgZGxfc3RhcnR1cF9wYXJhbXMgZmFpbGVkIC0gIgotCQkgICAicmV0dXJucyAweCV4XG4iLGkpOwotCSAgICByZXR1cm4gLTE7Ci0JICB9Ci0gICAgIH0KKwkJREVCVUcoMSwgInJheV9vcGVuOiBkb2luZyBpbml0IG5vdyAhXG4iKTsKIAotICAgIGlmIChzbmlmZmVyKSBuZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0gICAgZWxzZSAgICAgICAgIG5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CisJCS8qIERvd25sb2FkIHN0YXJ0dXAgcGFyYW1ldGVycyAqLworCQlpZiAoKGkgPSBkbF9zdGFydHVwX3BhcmFtcyhkZXYpKSA8IDApIHsKKwkJCXByaW50ayhLRVJOX0lORk8KKwkJCSAgICAgICAicmF5X2Rldl9pbml0IGRsX3N0YXJ0dXBfcGFyYW1zIGZhaWxlZCAtICIKKwkJCSAgICAgICAicmV0dXJucyAweCV4XG4iLCBpKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KIAotICAgIERFQlVHKDIsInJheV9vcGVuIGVuZGluZ1xuIik7Ci0gICAgcmV0dXJuIDA7CisJaWYgKHNuaWZmZXIpCisJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwllbHNlCisJCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CisKKwlERUJVRygyLCAicmF5X29wZW4gZW5kaW5nXG4iKTsKKwlyZXR1cm4gMDsKIH0gLyogZW5kIHJheV9vcGVuICovCisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIHN0YXRpYyBpbnQgcmF5X2Rldl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotICAgIHJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwotICAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rOwotICAgIGxpbmsgPSBsb2NhbC0+ZmluZGVyOworCXJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rOworCWxpbmsgPSBsb2NhbC0+ZmluZGVyOwogCi0gICAgREVCVUcoMSwgInJheV9kZXZfY2xvc2UoJyVzJylcbiIsIGRldi0+bmFtZSk7CisJREVCVUcoMSwgInJheV9kZXZfY2xvc2UoJyVzJylcbiIsIGRldi0+bmFtZSk7CiAKLSAgICBsaW5rLT5vcGVuLS07Ci0gICAgbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCWxpbmstPm9wZW4tLTsKKwluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAKLSAgICAvKiBJbiBoZXJlLCB3ZSBzaG91bGQgc3RvcCB0aGUgaGFyZHdhcmUgKHN0b3AgY2FyZCBmcm9tIGJlZWluZyBhY3RpdmUpCi0gICAgICogYW5kIHNldCBsb2NhbC0+Y2FyZF9zdGF0dXMgdG8gQ0FSRF9BV0FJVElOR19QQVJBTSwgc28gdGhhdCB3aGlsZSB0aGUKLSAgICAgKiBjYXJkIGlzIGNsb3NlZCB3ZSBjYW4gY2hhZ2UgaXRzIGNvbmZpZ3VyYXRpb24uCi0gICAgICogUHJvYmFibHkgYWxzbyBuZWVkIGEgQ09SIHJlc2V0IHRvIGdldCBzYW5lIHN0YXRlIC0gSmVhbiBJSSAqLworCS8qIEluIGhlcmUsIHdlIHNob3VsZCBzdG9wIHRoZSBoYXJkd2FyZSAoc3RvcCBjYXJkIGZyb20gYmVlaW5nIGFjdGl2ZSkKKwkgKiBhbmQgc2V0IGxvY2FsLT5jYXJkX3N0YXR1cyB0byBDQVJEX0FXQUlUSU5HX1BBUkFNLCBzbyB0aGF0IHdoaWxlIHRoZQorCSAqIGNhcmQgaXMgY2xvc2VkIHdlIGNhbiBjaGFnZSBpdHMgY29uZmlndXJhdGlvbi4KKwkgKiBQcm9iYWJseSBhbHNvIG5lZWQgYSBDT1IgcmVzZXQgdG8gZ2V0IHNhbmUgc3RhdGUgLSBKZWFuIElJICovCiAKLSAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKIH0gLyogZW5kIHJheV9kZXZfY2xvc2UgKi8KKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotc3RhdGljIHZvaWQgcmF5X3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIHsKLSAgICBERUJVRygxLCJyYXlfcmVzZXQgZW50ZXJlZFxuIik7Ci0gICAgcmV0dXJuOworc3RhdGljIHZvaWQgcmF5X3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJREVCVUcoMSwgInJheV9yZXNldCBlbnRlcmVkXG4iKTsKKwlyZXR1cm47CiB9CisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIC8qIENhdXNlIGEgZmlybXdhcmUgaW50ZXJydXB0IGlmIGl0IGlzIHJlYWR5IGZvciBvbmUgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qIFJldHVybiBub256ZXJvIGlmIG5vdCByZWFkeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIHN0YXRpYyBpbnQgaW50ZXJydXB0X2VjZihyYXlfZGV2X3QgKmxvY2FsLCBpbnQgY2NzKQogewotICAgIGludCBpID0gNTA7Ci0gICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOworCWludCBpID0gNTA7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOwogCi0gICAgaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgewotICAgICAgICBERUJVRygyLCJyYXlfY3MgaW50ZXJydXB0X2VjZiAtIGRldmljZSBub3QgcHJlc2VudFxuIik7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0gICAgREVCVUcoMiwiaW50ZXJydXB0X2VjZihsb2NhbD0lcCwgY2NzID0gMHgleFxuIixsb2NhbCxjY3MpOworCWlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKKwkJREVCVUcoMiwgInJheV9jcyBpbnRlcnJ1cHRfZWNmIC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKwlERUJVRygyLCAiaW50ZXJydXB0X2VjZihsb2NhbD0lcCwgY2NzID0gMHgleFxuIiwgbG9jYWwsIGNjcyk7CiAKLSAgICB3aGlsZSAoIGkgJiYgCi0gICAgICAgICAgICAocmVhZGIobG9jYWwtPmFtZW0gKyBDSVNfT0ZGU0VUICsgRUNGX0lOVFJfT0ZGU0VUKSAmIEVDRl9JTlRSX1NFVCkpCi0gICAgICAgIGktLTsKLSAgICBpZiAoaSA9PSAwKSB7Ci0gICAgICAgIERFQlVHKDIsInJheV9jcyBpbnRlcnJ1cHRfZWNmIGNhcmQgbm90IHJlYWR5IGZvciBpbnRlcnJ1cHRcbiIpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQorCXdoaWxlIChpICYmCisJICAgICAgIChyZWFkYihsb2NhbC0+YW1lbSArIENJU19PRkZTRVQgKyBFQ0ZfSU5UUl9PRkZTRVQpICYKKwkJRUNGX0lOVFJfU0VUKSkKKwkJaS0tOworCWlmIChpID09IDApIHsKKwkJREVCVUcoMiwgInJheV9jcyBpbnRlcnJ1cHRfZWNmIGNhcmQgbm90IHJlYWR5IGZvciBpbnRlcnJ1cHRcbiIpOworCQlyZXR1cm4gLTE7CisJfQogCS8qIEZpbGwgdGhlIG1haWxib3gsIHRoZW4ga2ljayB0aGUgY2FyZCAqLwotICAgIHdyaXRlYihjY3MsIGxvY2FsLT5zcmFtICsgU0NCX0JBU0UpOwotICAgIHdyaXRlYihFQ0ZfSU5UUl9TRVQsIGxvY2FsLT5hbWVtICsgQ0lTX09GRlNFVCArIEVDRl9JTlRSX09GRlNFVCk7Ci0gICAgcmV0dXJuIDA7CisJd3JpdGViKGNjcywgbG9jYWwtPnNyYW0gKyBTQ0JfQkFTRSk7CisJd3JpdGViKEVDRl9JTlRSX1NFVCwgbG9jYWwtPmFtZW0gKyBDSVNfT0ZGU0VUICsgRUNGX0lOVFJfT0ZGU0VUKTsKKwlyZXR1cm4gMDsKIH0gLyogaW50ZXJydXB0X2VjZiAqLworCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAvKiBHZXQgbmV4dCBmcmVlIHRyYW5zbWl0IENDUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiBSZXR1cm4gLSBpbmRleCBvZiBjdXJyZW50IHR4IGNjcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiBzdGF0aWMgaW50IGdldF9mcmVlX3R4X2NjcyhyYXlfZGV2X3QgKmxvY2FsKQogewotICAgIGludCBpOwotICAgIHN0cnVjdCBjY3MgX19pb21lbSAqcGNjcyA9IGNjc19iYXNlKGxvY2FsKTsKLSAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7CisJaW50IGk7CisJc3RydWN0IGNjcyBfX2lvbWVtICpwY2NzID0gY2NzX2Jhc2UobG9jYWwpOworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKIAotICAgIGlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKLSAgICAgICAgREVCVUcoMiwicmF5X2NzIGdldF9mcmVlX3R4X2NjcyAtIGRldmljZSBub3QgcHJlc2VudFxuIik7Ci0gICAgICAgIHJldHVybiBFQ0FSREdPTkU7Ci0gICAgfQorCWlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKKwkJREVCVUcoMiwgInJheV9jcyBnZXRfZnJlZV90eF9jY3MgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOworCQlyZXR1cm4gRUNBUkRHT05FOworCX0KIAotICAgIGlmICh0ZXN0X2FuZF9zZXRfYml0KDAsJmxvY2FsLT50eF9jY3NfbG9jaykpIHsKLSAgICAgICAgREVCVUcoMSwicmF5X2NzIHR4X2Njc19sb2NrIGJ1c3lcbiIpOwotICAgICAgICByZXR1cm4gRUNDU0JVU1k7Ci0gICAgfSAKKwlpZiAodGVzdF9hbmRfc2V0X2JpdCgwLCAmbG9jYWwtPnR4X2Njc19sb2NrKSkgeworCQlERUJVRygxLCAicmF5X2NzIHR4X2Njc19sb2NrIGJ1c3lcbiIpOworCQlyZXR1cm4gRUNDU0JVU1k7CisJfQogCi0gICAgZm9yIChpPTA7IGkgPCBOVU1CRVJfT0ZfVFhfQ0NTOyBpKyspIHsKLSAgICAgICAgaWYgKHJlYWRiKCYocGNjcytpKS0+YnVmZmVyX3N0YXR1cykgPT0gQ0NTX0JVRkZFUl9GUkVFKSB7Ci0gICAgICAgICAgICB3cml0ZWIoQ0NTX0JVRkZFUl9CVVNZLCAmKHBjY3MraSktPmJ1ZmZlcl9zdGF0dXMpOwotICAgICAgICAgICAgd3JpdGViKENDU19FTkRfTElTVCwgJihwY2NzK2kpLT5saW5rKTsKKwlmb3IgKGkgPSAwOyBpIDwgTlVNQkVSX09GX1RYX0NDUzsgaSsrKSB7CisJCWlmIChyZWFkYigmKHBjY3MgKyBpKS0+YnVmZmVyX3N0YXR1cykgPT0gQ0NTX0JVRkZFUl9GUkVFKSB7CisJCQl3cml0ZWIoQ0NTX0JVRkZFUl9CVVNZLCAmKHBjY3MgKyBpKS0+YnVmZmVyX3N0YXR1cyk7CisJCQl3cml0ZWIoQ0NTX0VORF9MSVNULCAmKHBjY3MgKyBpKS0+bGluayk7CiAJCQlsb2NhbC0+dHhfY2NzX2xvY2sgPSAwOwotICAgICAgICAgICAgcmV0dXJuIGk7Ci0gICAgICAgIH0KLSAgICB9CisJCQlyZXR1cm4gaTsKKwkJfQorCX0KIAlsb2NhbC0+dHhfY2NzX2xvY2sgPSAwOwotICAgIERFQlVHKDIsInJheV9jcyBFUlJPUiBubyBmcmVlIHR4IENDUyBmb3IgcmF5bGluayBjYXJkXG4iKTsKLSAgICByZXR1cm4gRUNDU0ZVTEw7CisJREVCVUcoMiwgInJheV9jcyBFUlJPUiBubyBmcmVlIHR4IENDUyBmb3IgcmF5bGluayBjYXJkXG4iKTsKKwlyZXR1cm4gRUNDU0ZVTEw7CiB9IC8qIGdldF9mcmVlX3R4X2NjcyAqLworCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAvKiBHZXQgbmV4dCBmcmVlIENDUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiBSZXR1cm4gLSBpbmRleCBvZiBjdXJyZW50IGNjcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiBzdGF0aWMgaW50IGdldF9mcmVlX2NjcyhyYXlfZGV2X3QgKmxvY2FsKQogewotICAgIGludCBpOwotICAgIHN0cnVjdCBjY3MgX19pb21lbSAqcGNjcyA9IGNjc19iYXNlKGxvY2FsKTsKLSAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7CisJaW50IGk7CisJc3RydWN0IGNjcyBfX2lvbWVtICpwY2NzID0gY2NzX2Jhc2UobG9jYWwpOworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKIAotICAgIGlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKLSAgICAgICAgREVCVUcoMiwicmF5X2NzIGdldF9mcmVlX2NjcyAtIGRldmljZSBub3QgcHJlc2VudFxuIik7Ci0gICAgICAgIHJldHVybiBFQ0FSREdPTkU7Ci0gICAgfQotICAgIGlmICh0ZXN0X2FuZF9zZXRfYml0KDAsJmxvY2FsLT5jY3NfbG9jaykpIHsKLSAgICAgICAgREVCVUcoMSwicmF5X2NzIGNjc19sb2NrIGJ1c3lcbiIpOwotICAgICAgICByZXR1cm4gRUNDU0JVU1k7Ci0gICAgfSAKKwlpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7CisJCURFQlVHKDIsICJyYXlfY3MgZ2V0X2ZyZWVfY2NzIC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKKwkJcmV0dXJuIEVDQVJER09ORTsKKwl9CisJaWYgKHRlc3RfYW5kX3NldF9iaXQoMCwgJmxvY2FsLT5jY3NfbG9jaykpIHsKKwkJREVCVUcoMSwgInJheV9jcyBjY3NfbG9jayBidXN5XG4iKTsKKwkJcmV0dXJuIEVDQ1NCVVNZOworCX0KIAotICAgIGZvciAoaSA9IE5VTUJFUl9PRl9UWF9DQ1M7IGkgPCBOVU1CRVJfT0ZfQ0NTOyBpKyspIHsKLSAgICAgICAgaWYgKHJlYWRiKCYocGNjcytpKS0+YnVmZmVyX3N0YXR1cykgPT0gQ0NTX0JVRkZFUl9GUkVFKSB7Ci0gICAgICAgICAgICB3cml0ZWIoQ0NTX0JVRkZFUl9CVVNZLCAmKHBjY3MraSktPmJ1ZmZlcl9zdGF0dXMpOwotICAgICAgICAgICAgd3JpdGViKENDU19FTkRfTElTVCwgJihwY2NzK2kpLT5saW5rKTsKKwlmb3IgKGkgPSBOVU1CRVJfT0ZfVFhfQ0NTOyBpIDwgTlVNQkVSX09GX0NDUzsgaSsrKSB7CisJCWlmIChyZWFkYigmKHBjY3MgKyBpKS0+YnVmZmVyX3N0YXR1cykgPT0gQ0NTX0JVRkZFUl9GUkVFKSB7CisJCQl3cml0ZWIoQ0NTX0JVRkZFUl9CVVNZLCAmKHBjY3MgKyBpKS0+YnVmZmVyX3N0YXR1cyk7CisJCQl3cml0ZWIoQ0NTX0VORF9MSVNULCAmKHBjY3MgKyBpKS0+bGluayk7CiAJCQlsb2NhbC0+Y2NzX2xvY2sgPSAwOwotICAgICAgICAgICAgcmV0dXJuIGk7Ci0gICAgICAgIH0KLSAgICB9CisJCQlyZXR1cm4gaTsKKwkJfQorCX0KIAlsb2NhbC0+Y2NzX2xvY2sgPSAwOwotICAgIERFQlVHKDEsInJheV9jcyBFUlJPUiBubyBmcmVlIENDUyBmb3IgcmF5bGluayBjYXJkXG4iKTsKLSAgICByZXR1cm4gRUNDU0ZVTEw7CisJREVCVUcoMSwgInJheV9jcyBFUlJPUiBubyBmcmVlIENDUyBmb3IgcmF5bGluayBjYXJkXG4iKTsKKwlyZXR1cm4gRUNDU0ZVTEw7CiB9IC8qIGdldF9mcmVlX2NjcyAqLworCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiBzdGF0aWMgdm9pZCBhdXRoZW50aWNhdGVfdGltZW91dCh1X2xvbmcgZGF0YSkKIHsKLSAgICByYXlfZGV2X3QgKmxvY2FsID0gKHJheV9kZXZfdCAqKWRhdGE7Ci0gICAgZGVsX3RpbWVyKCZsb2NhbC0+dGltZXIpOwotICAgIHByaW50ayhLRVJOX0lORk8gInJheV9jcyBBdXRoZW50aWNhdGlvbiB3aXRoIGFjY2VzcyBwb2ludCBmYWlsZWQiCi0gICAgICAgIiAtIHRpbWVvdXRcbiIpOwotICAgIGpvaW5fbmV0KCh1X2xvbmcpbG9jYWwpOworCXJheV9kZXZfdCAqbG9jYWwgPSAocmF5X2Rldl90ICopIGRhdGE7CisJZGVsX3RpbWVyKCZsb2NhbC0+dGltZXIpOworCXByaW50ayhLRVJOX0lORk8gInJheV9jcyBBdXRoZW50aWNhdGlvbiB3aXRoIGFjY2VzcyBwb2ludCBmYWlsZWQiCisJICAgICAgICIgLSB0aW1lb3V0XG4iKTsKKwlqb2luX25ldCgodV9sb25nKSBsb2NhbCk7CiB9CisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIHN0YXRpYyBpbnQgYXNjX3RvX2ludChjaGFyIGEpCiB7Ci0gICAgaWYgKGEgPCAnMCcpIHJldHVybiAtMTsKLSAgICBpZiAoYSA8PSAnOScpIHJldHVybiAoYSAtICcwJyk7Ci0gICAgaWYgKGEgPCAnQScpIHJldHVybiAtMTsKLSAgICBpZiAoYSA8PSAnRicpIHJldHVybiAoMTAgKyBhIC0gJ0EnKTsKLSAgICBpZiAoYSA8ICdhJykgcmV0dXJuIC0xOwotICAgIGlmIChhIDw9ICdmJykgcmV0dXJuICgxMCArIGEgLSAnYScpOwotICAgIHJldHVybiAtMTsKKwlpZiAoYSA8ICcwJykKKwkJcmV0dXJuIC0xOworCWlmIChhIDw9ICc5JykKKwkJcmV0dXJuIChhIC0gJzAnKTsKKwlpZiAoYSA8ICdBJykKKwkJcmV0dXJuIC0xOworCWlmIChhIDw9ICdGJykKKwkJcmV0dXJuICgxMCArIGEgLSAnQScpOworCWlmIChhIDwgJ2EnKQorCQlyZXR1cm4gLTE7CisJaWYgKGEgPD0gJ2YnKQorCQlyZXR1cm4gKDEwICsgYSAtICdhJyk7CisJcmV0dXJuIC0xOwogfQorCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiBzdGF0aWMgaW50IHBhcnNlX2FkZHIoY2hhciAqaW5fc3RyLCBVQ0hBUiAqb3V0KQogewotICAgIGludCBsZW47Ci0gICAgaW50IGksaixrOwotICAgIGludCBzdGF0dXM7Ci0gICAgCi0gICAgaWYgKGluX3N0ciA9PSBOVUxMKSByZXR1cm4gMDsKLSAgICBpZiAoKGxlbiA9IHN0cmxlbihpbl9zdHIpKSA8IDIpIHJldHVybiAwOwotICAgIG1lbXNldChvdXQsIDAsIEFERFJMRU4pOworCWludCBsZW47CisJaW50IGksIGosIGs7CisJaW50IHN0YXR1czsKIAotICAgIHN0YXR1cyA9IDE7Ci0gICAgaiA9IGxlbiAtIDE7Ci0gICAgaWYgKGogPiAxMikgaiA9IDEyOwotICAgIGkgPSA1OwotICAgIAotICAgIHdoaWxlIChqID4gMCkKLSAgICB7Ci0gICAgICAgIGlmICgoayA9IGFzY190b19pbnQoaW5fc3RyW2otLV0pKSAhPSAtMSkgb3V0W2ldID0gazsKLSAgICAgICAgZWxzZSByZXR1cm4gMDsKKwlpZiAoaW5fc3RyID09IE5VTEwpCisJCXJldHVybiAwOworCWlmICgobGVuID0gc3RybGVuKGluX3N0cikpIDwgMikKKwkJcmV0dXJuIDA7CisJbWVtc2V0KG91dCwgMCwgQUREUkxFTik7CiAKLSAgICAgICAgaWYgKGogPT0gMCkgYnJlYWs7Ci0gICAgICAgIGlmICgoayA9IGFzY190b19pbnQoaW5fc3RyW2otLV0pKSAhPSAtMSkgb3V0W2ldICs9IGsgPDwgNDsKLSAgICAgICAgZWxzZSByZXR1cm4gMDsKLSAgICAgICAgaWYgKCFpLS0pIGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gc3RhdHVzOworCXN0YXR1cyA9IDE7CisJaiA9IGxlbiAtIDE7CisJaWYgKGogPiAxMikKKwkJaiA9IDEyOworCWkgPSA1OworCisJd2hpbGUgKGogPiAwKSB7CisJCWlmICgoayA9IGFzY190b19pbnQoaW5fc3RyW2otLV0pKSAhPSAtMSkKKwkJCW91dFtpXSA9IGs7CisJCWVsc2UKKwkJCXJldHVybiAwOworCisJCWlmIChqID09IDApCisJCQlicmVhazsKKwkJaWYgKChrID0gYXNjX3RvX2ludChpbl9zdHJbai0tXSkpICE9IC0xKQorCQkJb3V0W2ldICs9IGsgPDwgNDsKKwkJZWxzZQorCQkJcmV0dXJuIDA7CisJCWlmICghaS0tKQorCQkJYnJlYWs7CisJfQorCXJldHVybiBzdGF0dXM7CiB9CisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqcmF5X2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotICAgIHJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwotICAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKLSAgICBzdHJ1Y3Qgc3RhdHVzIF9faW9tZW0gKnAgPSBsb2NhbC0+c3JhbSArIFNUQVRVU19CQVNFOwotICAgIGlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKLSAgICAgICAgREVCVUcoMiwicmF5X2NzIG5ldF9kZXZpY2Vfc3RhdHMgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOwotICAgICAgICByZXR1cm4gJmxvY2FsLT5zdGF0czsKLSAgICB9Ci0gICAgaWYgKHJlYWRiKCZwLT5tcnhfb3ZlcmZsb3dfZm9yX2hvc3QpKQotICAgIHsKLSAgICAgICAgbG9jYWwtPnN0YXRzLnJ4X292ZXJfZXJyb3JzICs9IHN3YWIxNihyZWFkdygmcC0+bXJ4X292ZXJmbG93KSk7Ci0gICAgICAgIHdyaXRlYigwLCZwLT5tcnhfb3ZlcmZsb3cpOwotICAgICAgICB3cml0ZWIoMCwmcC0+bXJ4X292ZXJmbG93X2Zvcl9ob3N0KTsKLSAgICB9Ci0gICAgaWYgKHJlYWRiKCZwLT5tcnhfY2hlY2tzdW1fZXJyb3JfZm9yX2hvc3QpKQotICAgIHsKLSAgICAgICAgbG9jYWwtPnN0YXRzLnJ4X2NyY19lcnJvcnMgKz0gc3dhYjE2KHJlYWR3KCZwLT5tcnhfY2hlY2tzdW1fZXJyb3IpKTsKLSAgICAgICAgd3JpdGViKDAsJnAtPm1yeF9jaGVja3N1bV9lcnJvcik7Ci0gICAgICAgIHdyaXRlYigwLCZwLT5tcnhfY2hlY2tzdW1fZXJyb3JfZm9yX2hvc3QpOwotICAgIH0KLSAgICBpZiAocmVhZGIoJnAtPnJ4X2hlY19lcnJvcl9mb3JfaG9zdCkpCi0gICAgewotICAgICAgICBsb2NhbC0+c3RhdHMucnhfZnJhbWVfZXJyb3JzICs9IHN3YWIxNihyZWFkdygmcC0+cnhfaGVjX2Vycm9yKSk7Ci0gICAgICAgIHdyaXRlYigwLCZwLT5yeF9oZWNfZXJyb3IpOwotICAgICAgICB3cml0ZWIoMCwmcC0+cnhfaGVjX2Vycm9yX2Zvcl9ob3N0KTsKLSAgICB9Ci0gICAgcmV0dXJuICZsb2NhbC0+c3RhdHM7CisJcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOworCXN0cnVjdCBzdGF0dXMgX19pb21lbSAqcCA9IGxvY2FsLT5zcmFtICsgU1RBVFVTX0JBU0U7CisJaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgeworCQlERUJVRygyLCAicmF5X2NzIG5ldF9kZXZpY2Vfc3RhdHMgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOworCQlyZXR1cm4gJmxvY2FsLT5zdGF0czsKKwl9CisJaWYgKHJlYWRiKCZwLT5tcnhfb3ZlcmZsb3dfZm9yX2hvc3QpKSB7CisJCWxvY2FsLT5zdGF0cy5yeF9vdmVyX2Vycm9ycyArPSBzd2FiMTYocmVhZHcoJnAtPm1yeF9vdmVyZmxvdykpOworCQl3cml0ZWIoMCwgJnAtPm1yeF9vdmVyZmxvdyk7CisJCXdyaXRlYigwLCAmcC0+bXJ4X292ZXJmbG93X2Zvcl9ob3N0KTsKKwl9CisJaWYgKHJlYWRiKCZwLT5tcnhfY2hlY2tzdW1fZXJyb3JfZm9yX2hvc3QpKSB7CisJCWxvY2FsLT5zdGF0cy5yeF9jcmNfZXJyb3JzICs9CisJCSAgICBzd2FiMTYocmVhZHcoJnAtPm1yeF9jaGVja3N1bV9lcnJvcikpOworCQl3cml0ZWIoMCwgJnAtPm1yeF9jaGVja3N1bV9lcnJvcik7CisJCXdyaXRlYigwLCAmcC0+bXJ4X2NoZWNrc3VtX2Vycm9yX2Zvcl9ob3N0KTsKKwl9CisJaWYgKHJlYWRiKCZwLT5yeF9oZWNfZXJyb3JfZm9yX2hvc3QpKSB7CisJCWxvY2FsLT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMgKz0gc3dhYjE2KHJlYWR3KCZwLT5yeF9oZWNfZXJyb3IpKTsKKwkJd3JpdGViKDAsICZwLT5yeF9oZWNfZXJyb3IpOworCQl3cml0ZWIoMCwgJnAtPnJ4X2hlY19lcnJvcl9mb3JfaG9zdCk7CisJfQorCXJldHVybiAmbG9jYWwtPnN0YXRzOwogfQorCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi1zdGF0aWMgdm9pZCByYXlfdXBkYXRlX3Bhcm0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgVUNIQVIgb2JqaWQsIFVDSEFSICp2YWx1ZSwgaW50IGxlbikKK3N0YXRpYyB2b2lkIHJheV91cGRhdGVfcGFybShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBVQ0hBUiBvYmppZCwgVUNIQVIgKnZhbHVlLAorCQkJICAgIGludCBsZW4pCiB7Ci0gICAgcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7Ci0gICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOwotICAgIGludCBjY3NpbmRleDsKLSAgICBpbnQgaTsKLSAgICBzdHJ1Y3QgY2NzIF9faW9tZW0gKnBjY3M7CisJcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOworCWludCBjY3NpbmRleDsKKwlpbnQgaTsKKwlzdHJ1Y3QgY2NzIF9faW9tZW0gKnBjY3M7CiAKLSAgICBpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7Ci0gICAgICAgIERFQlVHKDIsInJheV91cGRhdGVfcGFybSAtIGRldmljZSBub3QgcHJlc2VudFxuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisJaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgeworCQlERUJVRygyLCAicmF5X3VwZGF0ZV9wYXJtIC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKKwkJcmV0dXJuOworCX0KIAotICAgIGlmICgoY2NzaW5kZXggPSBnZXRfZnJlZV9jY3MobG9jYWwpKSA8IDApCi0gICAgewotICAgICAgICBERUJVRygwLCJyYXlfdXBkYXRlX3Bhcm0gLSBObyBmcmVlIGNjc1xuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgcGNjcyA9IGNjc19iYXNlKGxvY2FsKSArIGNjc2luZGV4OwotICAgIHdyaXRlYihDQ1NfVVBEQVRFX1BBUkFNUywgJnBjY3MtPmNtZCk7Ci0gICAgd3JpdGViKG9iamlkLCAmcGNjcy0+dmFyLnVwZGF0ZV9wYXJhbS5vYmplY3RfaWQpOwotICAgIHdyaXRlYigxLCAmcGNjcy0+dmFyLnVwZGF0ZV9wYXJhbS5udW1iZXJfb2JqZWN0cyk7Ci0gICAgd3JpdGViKDAsICZwY2NzLT52YXIudXBkYXRlX3BhcmFtLmZhaWx1cmVfY2F1c2UpOwotICAgIGZvciAoaT0wOyBpPGxlbjsgaSsrKSB7Ci0gICAgICAgIHdyaXRlYih2YWx1ZVtpXSwgbG9jYWwtPnNyYW0gKyBIT1NUX1RPX0VDRl9CQVNFKTsKLSAgICB9Ci0gICAgLyogSW50ZXJydXB0IHRoZSBmaXJtd2FyZSB0byBwcm9jZXNzIHRoZSBjb21tYW5kICovCi0gICAgaWYgKGludGVycnVwdF9lY2YobG9jYWwsIGNjc2luZGV4KSkgewotICAgICAgICBERUJVRygwLCJyYXlfY3MgYXNzb2NpYXRlIGZhaWxlZCAtIEVDRiBub3QgcmVhZHkgZm9yIGludHJcbiIpOwotICAgICAgICB3cml0ZWIoQ0NTX0JVRkZFUl9GUkVFLCAmKHBjY3MrKyktPmJ1ZmZlcl9zdGF0dXMpOwotICAgIH0KKwlpZiAoKGNjc2luZGV4ID0gZ2V0X2ZyZWVfY2NzKGxvY2FsKSkgPCAwKSB7CisJCURFQlVHKDAsICJyYXlfdXBkYXRlX3Bhcm0gLSBObyBmcmVlIGNjc1xuIik7CisJCXJldHVybjsKKwl9CisJcGNjcyA9IGNjc19iYXNlKGxvY2FsKSArIGNjc2luZGV4OworCXdyaXRlYihDQ1NfVVBEQVRFX1BBUkFNUywgJnBjY3MtPmNtZCk7CisJd3JpdGViKG9iamlkLCAmcGNjcy0+dmFyLnVwZGF0ZV9wYXJhbS5vYmplY3RfaWQpOworCXdyaXRlYigxLCAmcGNjcy0+dmFyLnVwZGF0ZV9wYXJhbS5udW1iZXJfb2JqZWN0cyk7CisJd3JpdGViKDAsICZwY2NzLT52YXIudXBkYXRlX3BhcmFtLmZhaWx1cmVfY2F1c2UpOworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworCQl3cml0ZWIodmFsdWVbaV0sIGxvY2FsLT5zcmFtICsgSE9TVF9UT19FQ0ZfQkFTRSk7CisJfQorCS8qIEludGVycnVwdCB0aGUgZmlybXdhcmUgdG8gcHJvY2VzcyB0aGUgY29tbWFuZCAqLworCWlmIChpbnRlcnJ1cHRfZWNmKGxvY2FsLCBjY3NpbmRleCkpIHsKKwkJREVCVUcoMCwgInJheV9jcyBhc3NvY2lhdGUgZmFpbGVkIC0gRUNGIG5vdCByZWFkeSBmb3IgaW50clxuIik7CisJCXdyaXRlYihDQ1NfQlVGRkVSX0ZSRUUsICYocGNjcysrKS0+YnVmZmVyX3N0YXR1cyk7CisJfQogfQorCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiBzdGF0aWMgdm9pZCByYXlfdXBkYXRlX211bHRpX2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGFsbCkKIHsKLSAgICBzdHJ1Y3QgZGV2X21jX2xpc3QgKmRtaSwgKipkbWlwOwotICAgIGludCBjY3NpbmRleDsKLSAgICBzdHJ1Y3QgY2NzIF9faW9tZW0gKnBjY3M7Ci0gICAgaW50IGkgPSAwOwotICAgIHJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwotICAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKLSAgICB2b2lkIF9faW9tZW0gKnAgPSBsb2NhbC0+c3JhbSArIEhPU1RfVE9fRUNGX0JBU0U7CisJc3RydWN0IGRldl9tY19saXN0ICpkbWksICoqZG1pcDsKKwlpbnQgY2NzaW5kZXg7CisJc3RydWN0IGNjcyBfX2lvbWVtICpwY2NzOworCWludCBpID0gMDsKKwlyYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7CisJdm9pZCBfX2lvbWVtICpwID0gbG9jYWwtPnNyYW0gKyBIT1NUX1RPX0VDRl9CQVNFOwogCi0gICAgaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgewotICAgICAgICBERUJVRygyLCJyYXlfdXBkYXRlX211bHRpX2xpc3QgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGVsc2UgCi0gICAgICAgIERFQlVHKDIsInJheV91cGRhdGVfbXVsdGlfbGlzdCglcClcbiIsZGV2KTsKLSAgICBpZiAoKGNjc2luZGV4ID0gZ2V0X2ZyZWVfY2NzKGxvY2FsKSkgPCAwKQotICAgIHsKLSAgICAgICAgREVCVUcoMSwicmF5X3VwZGF0ZV9tdWx0aSAtIE5vIGZyZWUgY2NzXG4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBwY2NzID0gY2NzX2Jhc2UobG9jYWwpICsgY2NzaW5kZXg7Ci0gICAgd3JpdGViKENDU19VUERBVEVfTVVMVElDQVNUX0xJU1QsICZwY2NzLT5jbWQpOworCWlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKKwkJREVCVUcoMiwgInJheV91cGRhdGVfbXVsdGlfbGlzdCAtIGRldmljZSBub3QgcHJlc2VudFxuIik7CisJCXJldHVybjsKKwl9IGVsc2UKKwkJREVCVUcoMiwgInJheV91cGRhdGVfbXVsdGlfbGlzdCglcClcbiIsIGRldik7CisJaWYgKChjY3NpbmRleCA9IGdldF9mcmVlX2Njcyhsb2NhbCkpIDwgMCkgeworCQlERUJVRygxLCAicmF5X3VwZGF0ZV9tdWx0aSAtIE5vIGZyZWUgY2NzXG4iKTsKKwkJcmV0dXJuOworCX0KKwlwY2NzID0gY2NzX2Jhc2UobG9jYWwpICsgY2NzaW5kZXg7CisJd3JpdGViKENDU19VUERBVEVfTVVMVElDQVNUX0xJU1QsICZwY2NzLT5jbWQpOwogCi0gICAgaWYgKGFsbCkgewotICAgICAgICB3cml0ZWIoMHhmZiwgJnBjY3MtPnZhcik7Ci0gICAgICAgIGxvY2FsLT5udW1fbXVsdGkgPSAweGZmOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgLyogQ29weSB0aGUga2VybmVsJ3MgbGlzdCBvZiBNQyBhZGRyZXNzZXMgdG8gY2FyZCAqLwotICAgICAgICBmb3IgKGRtaXA9JmRldi0+bWNfbGlzdDsgKGRtaT0qZG1pcCkhPU5VTEw7IGRtaXA9JmRtaS0+bmV4dCkgewotICAgICAgICAgICAgbWVtY3B5X3RvaW8ocCwgZG1pLT5kbWlfYWRkciwgRVRIX0FMRU4pOwotICAgICAgICAgICAgREVCVUcoMSwicmF5X3VwZGF0ZV9tdWx0aSBhZGQgYWRkciAlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnhcbiIsZG1pLT5kbWlfYWRkclswXSxkbWktPmRtaV9hZGRyWzFdLGRtaS0+ZG1pX2FkZHJbMl0sZG1pLT5kbWlfYWRkclszXSxkbWktPmRtaV9hZGRyWzRdLGRtaS0+ZG1pX2FkZHJbNV0pOwotICAgICAgICAgICAgcCArPSBFVEhfQUxFTjsKLSAgICAgICAgICAgIGkrKzsKLSAgICAgICAgfQotICAgICAgICBpZiAoaSA+IDI1Ni9BRERSTEVOKSBpID0gMjU2L0FERFJMRU47Ci0gICAgICAgIHdyaXRlYigoVUNIQVIpaSwgJnBjY3MtPnZhcik7Ci0gICAgICAgIERFQlVHKDEsInJheV9jcyB1cGRhdGVfbXVsdGkgJWQgYWRkcmVzc2VzIGluIGxpc3RcbiIsIGkpOwotICAgICAgICAvKiBJbnRlcnJ1cHQgdGhlIGZpcm13YXJlIHRvIHByb2Nlc3MgdGhlIGNvbW1hbmQgKi8KLSAgICAgICAgbG9jYWwtPm51bV9tdWx0aSA9IGk7Ci0gICAgfQotICAgIGlmIChpbnRlcnJ1cHRfZWNmKGxvY2FsLCBjY3NpbmRleCkpIHsKLSAgICAgICAgREVCVUcoMSwicmF5X2NzIHVwZGF0ZV9tdWx0aSBmYWlsZWQgLSBFQ0Ygbm90IHJlYWR5IGZvciBpbnRyXG4iKTsKLSAgICAgICAgd3JpdGViKENDU19CVUZGRVJfRlJFRSwgJihwY2NzKyspLT5idWZmZXJfc3RhdHVzKTsKLSAgICB9CisJaWYgKGFsbCkgeworCQl3cml0ZWIoMHhmZiwgJnBjY3MtPnZhcik7CisJCWxvY2FsLT5udW1fbXVsdGkgPSAweGZmOworCX0gZWxzZSB7CisJCS8qIENvcHkgdGhlIGtlcm5lbCdzIGxpc3Qgb2YgTUMgYWRkcmVzc2VzIHRvIGNhcmQgKi8KKwkJZm9yIChkbWlwID0gJmRldi0+bWNfbGlzdDsgKGRtaSA9ICpkbWlwKSAhPSBOVUxMOworCQkgICAgIGRtaXAgPSAmZG1pLT5uZXh0KSB7CisJCQltZW1jcHlfdG9pbyhwLCBkbWktPmRtaV9hZGRyLCBFVEhfQUxFTik7CisJCQlERUJVRygxLAorCQkJICAgICAgInJheV91cGRhdGVfbXVsdGkgYWRkIGFkZHIgJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4XG4iLAorCQkJICAgICAgZG1pLT5kbWlfYWRkclswXSwgZG1pLT5kbWlfYWRkclsxXSwKKwkJCSAgICAgIGRtaS0+ZG1pX2FkZHJbMl0sIGRtaS0+ZG1pX2FkZHJbM10sCisJCQkgICAgICBkbWktPmRtaV9hZGRyWzRdLCBkbWktPmRtaV9hZGRyWzVdKTsKKwkJCXAgKz0gRVRIX0FMRU47CisJCQlpKys7CisJCX0KKwkJaWYgKGkgPiAyNTYgLyBBRERSTEVOKQorCQkJaSA9IDI1NiAvIEFERFJMRU47CisJCXdyaXRlYigoVUNIQVIpIGksICZwY2NzLT52YXIpOworCQlERUJVRygxLCAicmF5X2NzIHVwZGF0ZV9tdWx0aSAlZCBhZGRyZXNzZXMgaW4gbGlzdFxuIiwgaSk7CisJCS8qIEludGVycnVwdCB0aGUgZmlybXdhcmUgdG8gcHJvY2VzcyB0aGUgY29tbWFuZCAqLworCQlsb2NhbC0+bnVtX211bHRpID0gaTsKKwl9CisJaWYgKGludGVycnVwdF9lY2YobG9jYWwsIGNjc2luZGV4KSkgeworCQlERUJVRygxLAorCQkgICAgICAicmF5X2NzIHVwZGF0ZV9tdWx0aSBmYWlsZWQgLSBFQ0Ygbm90IHJlYWR5IGZvciBpbnRyXG4iKTsKKwkJd3JpdGViKENDU19CVUZGRVJfRlJFRSwgJihwY2NzKyspLT5idWZmZXJfc3RhdHVzKTsKKwl9CiB9IC8qIGVuZCByYXlfdXBkYXRlX211bHRpX2xpc3QgKi8KKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogc3RhdGljIHZvaWQgc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0gICAgcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7Ci0gICAgVUNIQVIgcHJvbWlzYzsKKwlyYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlVQ0hBUiBwcm9taXNjOwogCi0gICAgREVCVUcoMiwicmF5X2NzIHNldF9tdWx0aWNhc3RfbGlzdCglcClcbiIsZGV2KTsKKwlERUJVRygyLCAicmF5X2NzIHNldF9tdWx0aWNhc3RfbGlzdCglcClcbiIsIGRldik7CiAKLSAgICBpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKQotICAgIHsKLSAgICAgICAgaWYgKGxvY2FsLT5zcGFybS5iNS5hX3Byb21pc2N1b3VzX21vZGUgPT0gMCkgewotICAgICAgICAgICAgREVCVUcoMSwicmF5X2NzIHNldF9tdWx0aWNhc3RfbGlzdCBwcm9taXNjIG9uXG4iKTsKLSAgICAgICAgICAgIGxvY2FsLT5zcGFybS5iNS5hX3Byb21pc2N1b3VzX21vZGUgPSAxOwotICAgICAgICAgICAgcHJvbWlzYyA9IDE7Ci0gICAgICAgICAgICByYXlfdXBkYXRlX3Bhcm0oZGV2LCAgT0JKSURfcHJvbWlzY3VvdXNfbW9kZSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcm9taXNjLCBzaXplb2YocHJvbWlzYykpOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICBpZiAobG9jYWwtPnNwYXJtLmI1LmFfcHJvbWlzY3VvdXNfbW9kZSA9PSAxKSB7Ci0gICAgICAgICAgICBERUJVRygxLCJyYXlfY3Mgc2V0X211bHRpY2FzdF9saXN0IHByb21pc2Mgb2ZmXG4iKTsKLSAgICAgICAgICAgIGxvY2FsLT5zcGFybS5iNS5hX3Byb21pc2N1b3VzX21vZGUgPSAwOwotICAgICAgICAgICAgcHJvbWlzYyA9IDA7Ci0gICAgICAgICAgICByYXlfdXBkYXRlX3Bhcm0oZGV2LCAgT0JKSURfcHJvbWlzY3VvdXNfbW9kZSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcm9taXNjLCBzaXplb2YocHJvbWlzYykpOwotICAgICAgICB9Ci0gICAgfQorCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKKwkJaWYgKGxvY2FsLT5zcGFybS5iNS5hX3Byb21pc2N1b3VzX21vZGUgPT0gMCkgeworCQkJREVCVUcoMSwgInJheV9jcyBzZXRfbXVsdGljYXN0X2xpc3QgcHJvbWlzYyBvblxuIik7CisJCQlsb2NhbC0+c3Bhcm0uYjUuYV9wcm9taXNjdW91c19tb2RlID0gMTsKKwkJCXByb21pc2MgPSAxOworCQkJcmF5X3VwZGF0ZV9wYXJtKGRldiwgT0JKSURfcHJvbWlzY3VvdXNfbW9kZSwKKwkJCQkJJnByb21pc2MsIHNpemVvZihwcm9taXNjKSk7CisJCX0KKwl9IGVsc2UgeworCQlpZiAobG9jYWwtPnNwYXJtLmI1LmFfcHJvbWlzY3VvdXNfbW9kZSA9PSAxKSB7CisJCQlERUJVRygxLCAicmF5X2NzIHNldF9tdWx0aWNhc3RfbGlzdCBwcm9taXNjIG9mZlxuIik7CisJCQlsb2NhbC0+c3Bhcm0uYjUuYV9wcm9taXNjdW91c19tb2RlID0gMDsKKwkJCXByb21pc2MgPSAwOworCQkJcmF5X3VwZGF0ZV9wYXJtKGRldiwgT0JKSURfcHJvbWlzY3VvdXNfbW9kZSwKKwkJCQkJJnByb21pc2MsIHNpemVvZihwcm9taXNjKSk7CisJCX0KKwl9CiAKLSAgICBpZiAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgcmF5X3VwZGF0ZV9tdWx0aV9saXN0KGRldiwgMSk7Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgaWYgKGxvY2FsLT5udW1fbXVsdGkgIT0gZGV2LT5tY19jb3VudCkgcmF5X3VwZGF0ZV9tdWx0aV9saXN0KGRldiwgMCk7Ci0gICAgfQorCWlmIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKQorCQlyYXlfdXBkYXRlX211bHRpX2xpc3QoZGV2LCAxKTsKKwllbHNlIHsKKwkJaWYgKGxvY2FsLT5udW1fbXVsdGkgIT0gZGV2LT5tY19jb3VudCkKKwkJCXJheV91cGRhdGVfbXVsdGlfbGlzdChkZXYsIDApOworCX0KIH0gLyogZW5kIHNldF9tdWx0aWNhc3RfbGlzdCAqLworCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKiBBbGwgcm91dGluZXMgYmVsb3cgaGVyZSBhcmUgcnVuIGF0IGludGVycnVwdCB0aW1lLgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogc3RhdGljIGlycXJldHVybl90IHJheV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewotICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilkZXZfaWQ7Ci0gICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbms7Ci0gICAgcmF5X2Rldl90ICpsb2NhbDsKLSAgICBzdHJ1Y3QgY2NzIF9faW9tZW0gKnBjY3M7Ci0gICAgc3RydWN0IHJjcyBfX2lvbWVtICpwcmNzOwotICAgIFVDSEFSIHJjc2luZGV4OwotICAgIFVDSEFSIHRtcDsKLSAgICBVQ0hBUiBjbWQ7Ci0gICAgVUNIQVIgc3RhdHVzOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilkZXZfaWQ7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbms7CisJcmF5X2Rldl90ICpsb2NhbDsKKwlzdHJ1Y3QgY2NzIF9faW9tZW0gKnBjY3M7CisJc3RydWN0IHJjcyBfX2lvbWVtICpwcmNzOworCVVDSEFSIHJjc2luZGV4OworCVVDSEFSIHRtcDsKKwlVQ0hBUiBjbWQ7CisJVUNIQVIgc3RhdHVzOwogCi0gICAgaWYgKGRldiA9PSBOVUxMKSAvKiBOb3RlIHRoYXQgd2Ugd2FudCBpbnRlcnJ1cHRzIHdpdGggZGV2LT5zdGFydCA9PSAwICovCi0JcmV0dXJuIElSUV9OT05FOworCWlmIChkZXYgPT0gTlVMTCkJLyogTm90ZSB0aGF0IHdlIHdhbnQgaW50ZXJydXB0cyB3aXRoIGRldi0+c3RhcnQgPT0gMCAqLworCQlyZXR1cm4gSVJRX05PTkU7CiAKLSAgICBERUJVRyg0LCJyYXlfY3M6IGludGVycnVwdCBmb3IgKmRldj0lcFxuIixkZXYpOworCURFQlVHKDQsICJyYXlfY3M6IGludGVycnVwdCBmb3IgKmRldj0lcFxuIiwgZGV2KTsKIAotICAgIGxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKLSAgICBsaW5rID0gKHN0cnVjdCBwY21jaWFfZGV2aWNlICopbG9jYWwtPmZpbmRlcjsKLSAgICBpZiAoIXBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkgewotICAgICAgICBERUJVRygyLCJyYXlfY3MgaW50ZXJydXB0IGZyb20gZGV2aWNlIG5vdCBwcmVzZW50IG9yIHN1c3BlbmRlZC5cbiIpOwotICAgICAgICByZXR1cm4gSVJRX05PTkU7Ci0gICAgfQotICAgIHJjc2luZGV4ID0gcmVhZGIoJigoc3RydWN0IHNjYiBfX2lvbWVtICopKGxvY2FsLT5zcmFtKSktPnJjc19pbmRleCk7CisJbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOworCWxpbmsgPSAoc3RydWN0IHBjbWNpYV9kZXZpY2UgKilsb2NhbC0+ZmluZGVyOworCWlmICghcGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSB7CisJCURFQlVHKDIsCisJCSAgICAgICJyYXlfY3MgaW50ZXJydXB0IGZyb20gZGV2aWNlIG5vdCBwcmVzZW50IG9yIHN1c3BlbmRlZC5cbiIpOworCQlyZXR1cm4gSVJRX05PTkU7CisJfQorCXJjc2luZGV4ID0gcmVhZGIoJigoc3RydWN0IHNjYiBfX2lvbWVtICopKGxvY2FsLT5zcmFtKSktPnJjc19pbmRleCk7CiAKLSAgICBpZiAocmNzaW5kZXggPj0gKE5VTUJFUl9PRl9DQ1MgKyBOVU1CRVJfT0ZfUkNTKSkKLSAgICB7Ci0gICAgICAgIERFQlVHKDEsInJheV9jcyBpbnRlcnJ1cHQgYmFkIHJjc2luZGV4ID0gMHgleFxuIixyY3NpbmRleCk7Ci0gICAgICAgIGNsZWFyX2ludGVycnVwdChsb2NhbCk7Ci0gICAgICAgIHJldHVybiBJUlFfSEFORExFRDsKLSAgICB9Ci0gICAgaWYgKHJjc2luZGV4IDwgTlVNQkVSX09GX0NDUykgLyogSWYgaXQncyBhIHJldHVybmVkIENDUyAqLwotICAgIHsKLSAgICAgICAgcGNjcyA9IGNjc19iYXNlKGxvY2FsKSArIHJjc2luZGV4OwotICAgICAgICBjbWQgPSByZWFkYigmcGNjcy0+Y21kKTsKLSAgICAgICAgc3RhdHVzID0gcmVhZGIoJnBjY3MtPmJ1ZmZlcl9zdGF0dXMpOwotICAgICAgICBzd2l0Y2ggKGNtZCkKLSAgICAgICAgewotICAgICAgICBjYXNlIENDU19ET1dOTE9BRF9TVEFSVFVQX1BBUkFNUzogLyogSGFwcGVucyBpbiBmaXJtd2FyZSBzb21lZGF5ICovCi0gICAgICAgICAgICBkZWxfdGltZXIoJmxvY2FsLT50aW1lcik7Ci0gICAgICAgICAgICBpZiAoc3RhdHVzID09IENDU19DT01NQU5EX0NPTVBMRVRFKSB7Ci0gICAgICAgICAgICAgICAgREVCVUcoMSwicmF5X2NzIGludGVycnVwdCBkb3dubG9hZF9zdGFydHVwX3BhcmFtZXRlcnMgT0tcbiIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgREVCVUcoMSwicmF5X2NzIGludGVycnVwdCBkb3dubG9hZF9zdGFydHVwX3BhcmFtZXRlcnMgZmFpbFxuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDQ1NfVVBEQVRFX1BBUkFNUzoKLSAgICAgICAgICAgIERFQlVHKDEsInJheV9jcyBpbnRlcnJ1cHQgdXBkYXRlIHBhcmFtcyBkb25lXG4iKTsKLSAgICAgICAgICAgIGlmIChzdGF0dXMgIT0gQ0NTX0NPTU1BTkRfQ09NUExFVEUpIHsKLSAgICAgICAgICAgICAgICB0bXAgPSByZWFkYigmcGNjcy0+dmFyLnVwZGF0ZV9wYXJhbS5mYWlsdXJlX2NhdXNlKTsKLSAgICAgICAgICAgIERFQlVHKDAsInJheV9jcyBpbnRlcnJ1cHQgdXBkYXRlIHBhcmFtcyBmYWlsZWQgLSByZWFzb24gJWRcbiIsdG1wKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENDU19SRVBPUlRfUEFSQU1TOgotICAgICAgICAgICAgREVCVUcoMSwicmF5X2NzIGludGVycnVwdCByZXBvcnQgcGFyYW1zIGRvbmVcbiIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ0NTX1VQREFURV9NVUxUSUNBU1RfTElTVDogLyogTm90ZSB0aGF0IHRoaXMgQ0NTIGlzbid0IHJldHVybmVkICovCi0gICAgICAgICAgICBERUJVRygxLCJyYXlfY3MgaW50ZXJydXB0IENDUyBVcGRhdGUgTXVsdGljYXN0IExpc3QgZG9uZVxuIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDQ1NfVVBEQVRFX1BPV0VSX1NBVklOR1NfTU9ERToKLSAgICAgICAgICAgIERFQlVHKDEsInJheV9jcyBpbnRlcnJ1cHQgdXBkYXRlIHBvd2VyIHNhdmUgbW9kZSBkb25lXG4iKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENDU19TVEFSVF9ORVRXT1JLOgotICAgICAgICBjYXNlIENDU19KT0lOX05FVFdPUks6Ci0gICAgICAgICAgICBpZiAoc3RhdHVzID09IENDU19DT01NQU5EX0NPTVBMRVRFKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHJlYWRiKCZwY2NzLT52YXIuc3RhcnRfbmV0d29yay5uZXRfaW5pdGlhdGVkKSA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgIERFQlVHKDAsInJheV9jcyBpbnRlcnJ1cHQgbmV0d29yayBcIiVzXCIgc3RhcnRlZFxuIixcCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsLT5zcGFybS5iNC5hX2N1cnJlbnRfZXNzX2lkKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIERFQlVHKDAsInJheV9jcyBpbnRlcnJ1cHQgbmV0d29yayBcIiVzXCIgam9pbmVkXG4iLFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWwtPnNwYXJtLmI0LmFfY3VycmVudF9lc3NfaWQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtZW1jcHlfZnJvbWlvKCZsb2NhbC0+YnNzX2lkLHBjY3MtPnZhci5zdGFydF9uZXR3b3JrLmJzc2lkLEFERFJMRU4pOworCWlmIChyY3NpbmRleCA+PSAoTlVNQkVSX09GX0NDUyArIE5VTUJFUl9PRl9SQ1MpKSB7CisJCURFQlVHKDEsICJyYXlfY3MgaW50ZXJydXB0IGJhZCByY3NpbmRleCA9IDB4JXhcbiIsIHJjc2luZGV4KTsKKwkJY2xlYXJfaW50ZXJydXB0KGxvY2FsKTsKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCX0KKwlpZiAocmNzaW5kZXggPCBOVU1CRVJfT0ZfQ0NTKSB7IC8qIElmIGl0J3MgYSByZXR1cm5lZCBDQ1MgKi8KKwkJcGNjcyA9IGNjc19iYXNlKGxvY2FsKSArIHJjc2luZGV4OworCQljbWQgPSByZWFkYigmcGNjcy0+Y21kKTsKKwkJc3RhdHVzID0gcmVhZGIoJnBjY3MtPmJ1ZmZlcl9zdGF0dXMpOworCQlzd2l0Y2ggKGNtZCkgeworCQljYXNlIENDU19ET1dOTE9BRF9TVEFSVFVQX1BBUkFNUzoJLyogSGFwcGVucyBpbiBmaXJtd2FyZSBzb21lZGF5ICovCisJCQlkZWxfdGltZXIoJmxvY2FsLT50aW1lcik7CisJCQlpZiAoc3RhdHVzID09IENDU19DT01NQU5EX0NPTVBMRVRFKSB7CisJCQkJREVCVUcoMSwKKwkJCQkgICAgICAicmF5X2NzIGludGVycnVwdCBkb3dubG9hZF9zdGFydHVwX3BhcmFtZXRlcnMgT0tcbiIpOworCQkJfSBlbHNlIHsKKwkJCQlERUJVRygxLAorCQkJCSAgICAgICJyYXlfY3MgaW50ZXJydXB0IGRvd25sb2FkX3N0YXJ0dXBfcGFyYW1ldGVycyBmYWlsXG4iKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIENDU19VUERBVEVfUEFSQU1TOgorCQkJREVCVUcoMSwgInJheV9jcyBpbnRlcnJ1cHQgdXBkYXRlIHBhcmFtcyBkb25lXG4iKTsKKwkJCWlmIChzdGF0dXMgIT0gQ0NTX0NPTU1BTkRfQ09NUExFVEUpIHsKKwkJCQl0bXAgPQorCQkJCSAgICByZWFkYigmcGNjcy0+dmFyLnVwZGF0ZV9wYXJhbS4KKwkJCQkJICBmYWlsdXJlX2NhdXNlKTsKKwkJCQlERUJVRygwLAorCQkJCSAgICAgICJyYXlfY3MgaW50ZXJydXB0IHVwZGF0ZSBwYXJhbXMgZmFpbGVkIC0gcmVhc29uICVkXG4iLAorCQkJCSAgICAgIHRtcCk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBDQ1NfUkVQT1JUX1BBUkFNUzoKKwkJCURFQlVHKDEsICJyYXlfY3MgaW50ZXJydXB0IHJlcG9ydCBwYXJhbXMgZG9uZVxuIik7CisJCQlicmVhazsKKwkJY2FzZSBDQ1NfVVBEQVRFX01VTFRJQ0FTVF9MSVNUOgkvKiBOb3RlIHRoYXQgdGhpcyBDQ1MgaXNuJ3QgcmV0dXJuZWQgKi8KKwkJCURFQlVHKDEsCisJCQkgICAgICAicmF5X2NzIGludGVycnVwdCBDQ1MgVXBkYXRlIE11bHRpY2FzdCBMaXN0IGRvbmVcbiIpOworCQkJYnJlYWs7CisJCWNhc2UgQ0NTX1VQREFURV9QT1dFUl9TQVZJTkdTX01PREU6CisJCQlERUJVRygxLAorCQkJICAgICAgInJheV9jcyBpbnRlcnJ1cHQgdXBkYXRlIHBvd2VyIHNhdmUgbW9kZSBkb25lXG4iKTsKKwkJCWJyZWFrOworCQljYXNlIENDU19TVEFSVF9ORVRXT1JLOgorCQljYXNlIENDU19KT0lOX05FVFdPUks6CisJCQlpZiAoc3RhdHVzID09IENDU19DT01NQU5EX0NPTVBMRVRFKSB7CisJCQkJaWYgKHJlYWRiCisJCQkJICAgICgmcGNjcy0+dmFyLnN0YXJ0X25ldHdvcmsubmV0X2luaXRpYXRlZCkgPT0KKwkJCQkgICAgMSkgeworCQkJCQlERUJVRygwLAorCQkJCQkgICAgICAicmF5X2NzIGludGVycnVwdCBuZXR3b3JrIFwiJXNcIiBzdGFydGVkXG4iLAorCQkJCQkgICAgICBsb2NhbC0+c3Bhcm0uYjQuYV9jdXJyZW50X2Vzc19pZCk7CisJCQkJfSBlbHNlIHsKKwkJCQkJREVCVUcoMCwKKwkJCQkJICAgICAgInJheV9jcyBpbnRlcnJ1cHQgbmV0d29yayBcIiVzXCIgam9pbmVkXG4iLAorCQkJCQkgICAgICBsb2NhbC0+c3Bhcm0uYjQuYV9jdXJyZW50X2Vzc19pZCk7CisJCQkJfQorCQkJCW1lbWNweV9mcm9taW8oJmxvY2FsLT5ic3NfaWQsCisJCQkJCSAgICAgIHBjY3MtPnZhci5zdGFydF9uZXR3b3JrLmJzc2lkLAorCQkJCQkgICAgICBBRERSTEVOKTsKIAotICAgICAgICAgICAgICAgIGlmIChsb2NhbC0+ZndfdmVyID09IDB4NTUpIGxvY2FsLT5uZXRfZGVmYXVsdF90eF9yYXRlID0gMzsKLSAgICAgICAgICAgICAgICBlbHNlIGxvY2FsLT5uZXRfZGVmYXVsdF90eF9yYXRlID0gCi0gICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGIoJnBjY3MtPnZhci5zdGFydF9uZXR3b3JrLm5ldF9kZWZhdWx0X3R4X3JhdGUpOwotICAgICAgICAgICAgICAgIGxvY2FsLT5lbmNyeXB0aW9uID0gcmVhZGIoJnBjY3MtPnZhci5zdGFydF9uZXR3b3JrLmVuY3J5cHRpb24pOwotICAgICAgICAgICAgICAgIGlmICghc25pZmZlciAmJiAobG9jYWwtPm5ldF90eXBlID09IElORlJBKQotICAgICAgICAgICAgICAgICAgICAmJiAhKGxvY2FsLT5zcGFybS5iNC5hX2FjdGluZ19hc19hcF9zdGF0dXMpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dGhlbnRpY2F0ZShsb2NhbCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGxvY2FsLT5jYXJkX3N0YXR1cyA9IENBUkRfQUNRX0NPTVBMRVRFOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgbG9jYWwtPmNhcmRfc3RhdHVzID0gQ0FSRF9BQ1FfRkFJTEVEOworCQkJCWlmIChsb2NhbC0+ZndfdmVyID09IDB4NTUpCisJCQkJCWxvY2FsLT5uZXRfZGVmYXVsdF90eF9yYXRlID0gMzsKKwkJCQllbHNlCisJCQkJCWxvY2FsLT5uZXRfZGVmYXVsdF90eF9yYXRlID0KKwkJCQkJICAgIHJlYWRiKCZwY2NzLT52YXIuc3RhcnRfbmV0d29yay4KKwkJCQkJCSAgbmV0X2RlZmF1bHRfdHhfcmF0ZSk7CisJCQkJbG9jYWwtPmVuY3J5cHRpb24gPQorCQkJCSAgICByZWFkYigmcGNjcy0+dmFyLnN0YXJ0X25ldHdvcmsuZW5jcnlwdGlvbik7CisJCQkJaWYgKCFzbmlmZmVyICYmIChsb2NhbC0+bmV0X3R5cGUgPT0gSU5GUkEpCisJCQkJICAgICYmICEobG9jYWwtPnNwYXJtLmI0LmFfYWN0aW5nX2FzX2FwX3N0YXR1cykpIHsKKwkJCQkJYXV0aGVudGljYXRlKGxvY2FsKTsKKwkJCQl9CisJCQkJbG9jYWwtPmNhcmRfc3RhdHVzID0gQ0FSRF9BQ1FfQ09NUExFVEU7CisJCQl9IGVsc2UgeworCQkJCWxvY2FsLT5jYXJkX3N0YXR1cyA9IENBUkRfQUNRX0ZBSUxFRDsKIAotICAgICAgICAgICAgICAgIGRlbF90aW1lcigmbG9jYWwtPnRpbWVyKTsKLSAgICAgICAgICAgICAgICBsb2NhbC0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBIWio1OwotICAgICAgICAgICAgICAgIGxvY2FsLT50aW1lci5kYXRhID0gKGxvbmcpbG9jYWw7Ci0gICAgICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSBDQ1NfU1RBUlRfTkVUV09SSykgewotICAgICAgICAgICAgICAgICAgICBERUJVRygwLCJyYXlfY3MgaW50ZXJydXB0IG5ldHdvcmsgXCIlc1wiIHN0YXJ0IGZhaWxlZFxuIixcCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsLT5zcGFybS5iNC5hX2N1cnJlbnRfZXNzX2lkKTsKLSAgICAgICAgICAgICAgICAgICAgbG9jYWwtPnRpbWVyLmZ1bmN0aW9uID0gJnN0YXJ0X25ldDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIERFQlVHKDAsInJheV9jcyBpbnRlcnJ1cHQgbmV0d29yayBcIiVzXCIgam9pbiBmYWlsZWRcbiIsXAotICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbC0+c3Bhcm0uYjQuYV9jdXJyZW50X2Vzc19pZCk7Ci0gICAgICAgICAgICAgICAgICAgIGxvY2FsLT50aW1lci5mdW5jdGlvbiA9ICZqb2luX25ldDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYWRkX3RpbWVyKCZsb2NhbC0+dGltZXIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ0NTX1NUQVJUX0FTU09DSUFUSU9OOgotICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSBDQ1NfQ09NTUFORF9DT01QTEVURSkgewotICAgICAgICAgICAgICAgIGxvY2FsLT5jYXJkX3N0YXR1cyA9IENBUkRfQVNTT0NfQ09NUExFVEU7Ci0gICAgICAgICAgICAgICAgREVCVUcoMCwicmF5X2NzIGFzc29jaWF0aW9uIHN1Y2Nlc3NmdWxcbiIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIERFQlVHKDAsInJheV9jcyBhc3NvY2lhdGlvbiBmYWlsZWQsXG4iKTsKLSAgICAgICAgICAgICAgICBsb2NhbC0+Y2FyZF9zdGF0dXMgPSBDQVJEX0FTU09DX0ZBSUxFRDsKLSAgICAgICAgICAgICAgICBqb2luX25ldCgodV9sb25nKWxvY2FsKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENDU19UWF9SRVFVRVNUOgotICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSBDQ1NfQ09NTUFORF9DT01QTEVURSkgewotICAgICAgICAgICAgICAgIERFQlVHKDMsInJheV9jcyBpbnRlcnJ1cHQgdHggcmVxdWVzdCBjb21wbGV0ZVxuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBERUJVRygxLCJyYXlfY3MgaW50ZXJydXB0IHR4IHJlcXVlc3QgZmFpbGVkXG4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghc25pZmZlcikgbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKLSAgICAgICAgICAgIG5ldGlmX3dha2VfcXVldWUoZGV2KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENDU19URVNUX01FTU9SWToKLSAgICAgICAgICAgIERFQlVHKDEsInJheV9jcyBpbnRlcnJ1cHQgbWVtIHRlc3QgZG9uZVxuIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDQ1NfU0hVVERPV046Ci0gICAgICAgICAgICBERUJVRygxLCJyYXlfY3MgaW50ZXJydXB0IFVuZXhwZWN0ZWQgQ0NTIHJldHVybmVkIC0gU2h1dGRvd25cbiIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ0NTX0RVTVBfTUVNT1JZOgotICAgICAgICAgICAgREVCVUcoMSwicmF5X2NzIGludGVycnVwdCBkdW1wIG1lbW9yeSBkb25lXG4iKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENDU19TVEFSVF9USU1FUjoKLSAgICAgICAgICAgIERFQlVHKDIsInJheV9jcyBpbnRlcnJ1cHQgRElORyAtIHJheWxpbmsgdGltZXIgZXhwaXJlZFxuIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIERFQlVHKDEsInJheV9jcyBpbnRlcnJ1cHQgVW5leHBlY3RlZCBDQ1MgMHgleCByZXR1cm5lZCAweCV4XG4iLFwKLSAgICAgICAgICAgICAgICAgIHJjc2luZGV4LCBjbWQpOwotICAgICAgICB9Ci0gICAgICAgIHdyaXRlYihDQ1NfQlVGRkVSX0ZSRUUsICZwY2NzLT5idWZmZXJfc3RhdHVzKTsKLSAgICB9Ci0gICAgZWxzZSAvKiBJdCdzIGFuIFJDUyAqLwotICAgIHsKLSAgICAgICAgcHJjcyA9IHJjc19iYXNlKGxvY2FsKSArIHJjc2luZGV4OwotICAgIAotICAgICAgICBzd2l0Y2ggKHJlYWRiKCZwcmNzLT5pbnRlcnJ1cHRfaWQpKQotICAgICAgICB7Ci0gICAgICAgIGNhc2UgUFJPQ0VTU19SWF9QQUNLRVQ6Ci0gICAgICAgICAgICByYXlfcngoZGV2LCBsb2NhbCwgcHJjcyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBSRUpPSU5fTkVUX0NPTVBMRVRFOgotICAgICAgICAgICAgREVCVUcoMSwicmF5X2NzIGludGVycnVwdCByZWpvaW4gbmV0IGNvbXBsZXRlXG4iKTsKLSAgICAgICAgICAgIGxvY2FsLT5jYXJkX3N0YXR1cyA9IENBUkRfQUNRX0NPTVBMRVRFOwotICAgICAgICAgICAgLyogZG8gd2UgbmVlZCB0byBjbGVhciB0eCBidWZmZXJzIENDUydzPyAqLwotICAgICAgICAgICAgaWYgKGxvY2FsLT5zcGFybS5iNC5hX25ldHdvcmtfdHlwZSA9PSBBREhPQykgewotICAgICAgICAgICAgICAgIGlmICghc25pZmZlcikgbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIG1lbWNweV9mcm9taW8oJmxvY2FsLT5ic3NfaWQsIHByY3MtPnZhci5yZWpvaW5fbmV0X2NvbXBsZXRlLmJzc2lkLCBBRERSTEVOKTsKLSAgICAgICAgICAgICAgICBERUJVRygxLCJyYXlfY3MgbmV3IEJTU0lEID0gJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4XG4iLFwKLSAgICAgICAgICAgICAgICAgICAgICBsb2NhbC0+YnNzX2lkWzBdLCBsb2NhbC0+YnNzX2lkWzFdLCBsb2NhbC0+YnNzX2lkWzJdLFwKLSAgICAgICAgICAgICAgICAgICAgICBsb2NhbC0+YnNzX2lkWzNdLCBsb2NhbC0+YnNzX2lkWzRdLCBsb2NhbC0+YnNzX2lkWzVdKTsKLSAgICAgICAgICAgICAgICBpZiAoIXNuaWZmZXIpIGF1dGhlbnRpY2F0ZShsb2NhbCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBST0FNSU5HX0lOSVRJQVRFRDoKLSAgICAgICAgICAgIERFQlVHKDEsInJheV9jcyBpbnRlcnJ1cHQgcm9hbWluZyBpbml0aWF0ZWRcbiIpOyAKLSAgICAgICAgICAgIG5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLSAgICAgICAgICAgIGxvY2FsLT5jYXJkX3N0YXR1cyA9IENBUkRfRE9JTkdfQUNROwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSkFQQU5fQ0FMTF9TSUdOX1JYRDoKLSAgICAgICAgICAgIERFQlVHKDEsInJheV9jcyBpbnRlcnJ1cHQgamFwYW4gY2FsbCBzaWduIHJ4XG4iKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgREVCVUcoMSwicmF5X2NzIFVuZXhwZWN0ZWQgaW50ZXJydXB0IGZvciBSQ1MgMHgleCBjbWQgPSAweCV4XG4iLFwKLSAgICAgICAgICAgICAgICAgIHJjc2luZGV4LCAodW5zaWduZWQgaW50KSByZWFkYigmcHJjcy0+aW50ZXJydXB0X2lkKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICB3cml0ZWIoQ0NTX0JVRkZFUl9GUkVFLCAmcHJjcy0+YnVmZmVyX3N0YXR1cyk7Ci0gICAgfQotICAgIGNsZWFyX2ludGVycnVwdChsb2NhbCk7Ci0gICAgcmV0dXJuIElSUV9IQU5ETEVEOworCQkJCWRlbF90aW1lcigmbG9jYWwtPnRpbWVyKTsKKwkJCQlsb2NhbC0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBIWiAqIDU7CisJCQkJbG9jYWwtPnRpbWVyLmRhdGEgPSAobG9uZylsb2NhbDsKKwkJCQlpZiAoc3RhdHVzID09IENDU19TVEFSVF9ORVRXT1JLKSB7CisJCQkJCURFQlVHKDAsCisJCQkJCSAgICAgICJyYXlfY3MgaW50ZXJydXB0IG5ldHdvcmsgXCIlc1wiIHN0YXJ0IGZhaWxlZFxuIiwKKwkJCQkJICAgICAgbG9jYWwtPnNwYXJtLmI0LmFfY3VycmVudF9lc3NfaWQpOworCQkJCQlsb2NhbC0+dGltZXIuZnVuY3Rpb24gPSAmc3RhcnRfbmV0OworCQkJCX0gZWxzZSB7CisJCQkJCURFQlVHKDAsCisJCQkJCSAgICAgICJyYXlfY3MgaW50ZXJydXB0IG5ldHdvcmsgXCIlc1wiIGpvaW4gZmFpbGVkXG4iLAorCQkJCQkgICAgICBsb2NhbC0+c3Bhcm0uYjQuYV9jdXJyZW50X2Vzc19pZCk7CisJCQkJCWxvY2FsLT50aW1lci5mdW5jdGlvbiA9ICZqb2luX25ldDsKKwkJCQl9CisJCQkJYWRkX3RpbWVyKCZsb2NhbC0+dGltZXIpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgQ0NTX1NUQVJUX0FTU09DSUFUSU9OOgorCQkJaWYgKHN0YXR1cyA9PSBDQ1NfQ09NTUFORF9DT01QTEVURSkgeworCQkJCWxvY2FsLT5jYXJkX3N0YXR1cyA9IENBUkRfQVNTT0NfQ09NUExFVEU7CisJCQkJREVCVUcoMCwgInJheV9jcyBhc3NvY2lhdGlvbiBzdWNjZXNzZnVsXG4iKTsKKwkJCX0gZWxzZSB7CisJCQkJREVCVUcoMCwgInJheV9jcyBhc3NvY2lhdGlvbiBmYWlsZWQsXG4iKTsKKwkJCQlsb2NhbC0+Y2FyZF9zdGF0dXMgPSBDQVJEX0FTU09DX0ZBSUxFRDsKKwkJCQlqb2luX25ldCgodV9sb25nKSBsb2NhbCk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBDQ1NfVFhfUkVRVUVTVDoKKwkJCWlmIChzdGF0dXMgPT0gQ0NTX0NPTU1BTkRfQ09NUExFVEUpIHsKKwkJCQlERUJVRygzLAorCQkJCSAgICAgICJyYXlfY3MgaW50ZXJydXB0IHR4IHJlcXVlc3QgY29tcGxldGVcbiIpOworCQkJfSBlbHNlIHsKKwkJCQlERUJVRygxLAorCQkJCSAgICAgICJyYXlfY3MgaW50ZXJydXB0IHR4IHJlcXVlc3QgZmFpbGVkXG4iKTsKKwkJCX0KKwkJCWlmICghc25pZmZlcikKKwkJCQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOworCQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOworCQkJYnJlYWs7CisJCWNhc2UgQ0NTX1RFU1RfTUVNT1JZOgorCQkJREVCVUcoMSwgInJheV9jcyBpbnRlcnJ1cHQgbWVtIHRlc3QgZG9uZVxuIik7CisJCQlicmVhazsKKwkJY2FzZSBDQ1NfU0hVVERPV046CisJCQlERUJVRygxLAorCQkJICAgICAgInJheV9jcyBpbnRlcnJ1cHQgVW5leHBlY3RlZCBDQ1MgcmV0dXJuZWQgLSBTaHV0ZG93blxuIik7CisJCQlicmVhazsKKwkJY2FzZSBDQ1NfRFVNUF9NRU1PUlk6CisJCQlERUJVRygxLCAicmF5X2NzIGludGVycnVwdCBkdW1wIG1lbW9yeSBkb25lXG4iKTsKKwkJCWJyZWFrOworCQljYXNlIENDU19TVEFSVF9USU1FUjoKKwkJCURFQlVHKDIsCisJCQkgICAgICAicmF5X2NzIGludGVycnVwdCBESU5HIC0gcmF5bGluayB0aW1lciBleHBpcmVkXG4iKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJREVCVUcoMSwKKwkJCSAgICAgICJyYXlfY3MgaW50ZXJydXB0IFVuZXhwZWN0ZWQgQ0NTIDB4JXggcmV0dXJuZWQgMHgleFxuIiwKKwkJCSAgICAgIHJjc2luZGV4LCBjbWQpOworCQl9CisJCXdyaXRlYihDQ1NfQlVGRkVSX0ZSRUUsICZwY2NzLT5idWZmZXJfc3RhdHVzKTsKKwl9IGVsc2UgeyAvKiBJdCdzIGFuIFJDUyAqLworCisJCXByY3MgPSByY3NfYmFzZShsb2NhbCkgKyByY3NpbmRleDsKKworCQlzd2l0Y2ggKHJlYWRiKCZwcmNzLT5pbnRlcnJ1cHRfaWQpKSB7CisJCWNhc2UgUFJPQ0VTU19SWF9QQUNLRVQ6CisJCQlyYXlfcngoZGV2LCBsb2NhbCwgcHJjcyk7CisJCQlicmVhazsKKwkJY2FzZSBSRUpPSU5fTkVUX0NPTVBMRVRFOgorCQkJREVCVUcoMSwgInJheV9jcyBpbnRlcnJ1cHQgcmVqb2luIG5ldCBjb21wbGV0ZVxuIik7CisJCQlsb2NhbC0+Y2FyZF9zdGF0dXMgPSBDQVJEX0FDUV9DT01QTEVURTsKKwkJCS8qIGRvIHdlIG5lZWQgdG8gY2xlYXIgdHggYnVmZmVycyBDQ1Mncz8gKi8KKwkJCWlmIChsb2NhbC0+c3Bhcm0uYjQuYV9uZXR3b3JrX3R5cGUgPT0gQURIT0MpIHsKKwkJCQlpZiAoIXNuaWZmZXIpCisJCQkJCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CisJCQl9IGVsc2UgeworCQkJCW1lbWNweV9mcm9taW8oJmxvY2FsLT5ic3NfaWQsCisJCQkJCSAgICAgIHByY3MtPnZhci5yZWpvaW5fbmV0X2NvbXBsZXRlLgorCQkJCQkgICAgICBic3NpZCwgQUREUkxFTik7CisJCQkJREVCVUcoMSwKKwkJCQkgICAgICAicmF5X2NzIG5ldyBCU1NJRCA9ICUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeFxuIiwKKwkJCQkgICAgICBsb2NhbC0+YnNzX2lkWzBdLCBsb2NhbC0+YnNzX2lkWzFdLAorCQkJCSAgICAgIGxvY2FsLT5ic3NfaWRbMl0sIGxvY2FsLT5ic3NfaWRbM10sCisJCQkJICAgICAgbG9jYWwtPmJzc19pZFs0XSwgbG9jYWwtPmJzc19pZFs1XSk7CisJCQkJaWYgKCFzbmlmZmVyKQorCQkJCQlhdXRoZW50aWNhdGUobG9jYWwpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgUk9BTUlOR19JTklUSUFURUQ6CisJCQlERUJVRygxLCAicmF5X2NzIGludGVycnVwdCByb2FtaW5nIGluaXRpYXRlZFxuIik7CisJCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisJCQlsb2NhbC0+Y2FyZF9zdGF0dXMgPSBDQVJEX0RPSU5HX0FDUTsKKwkJCWJyZWFrOworCQljYXNlIEpBUEFOX0NBTExfU0lHTl9SWEQ6CisJCQlERUJVRygxLCAicmF5X2NzIGludGVycnVwdCBqYXBhbiBjYWxsIHNpZ24gcnhcbiIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlERUJVRygxLAorCQkJICAgICAgInJheV9jcyBVbmV4cGVjdGVkIGludGVycnVwdCBmb3IgUkNTIDB4JXggY21kID0gMHgleFxuIiwKKwkJCSAgICAgIHJjc2luZGV4LAorCQkJICAgICAgKHVuc2lnbmVkIGludClyZWFkYigmcHJjcy0+aW50ZXJydXB0X2lkKSk7CisJCQlicmVhazsKKwkJfQorCQl3cml0ZWIoQ0NTX0JVRkZFUl9GUkVFLCAmcHJjcy0+YnVmZmVyX3N0YXR1cyk7CisJfQorCWNsZWFyX2ludGVycnVwdChsb2NhbCk7CisJcmV0dXJuIElSUV9IQU5ETEVEOwogfSAvKiByYXlfaW50ZXJydXB0ICovCisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLXN0YXRpYyB2b2lkIHJheV9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCByYXlfZGV2X3QgKmxvY2FsLCBzdHJ1Y3QgcmNzIF9faW9tZW0gKnByY3MpCitzdGF0aWMgdm9pZCByYXlfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgcmF5X2Rldl90ICpsb2NhbCwKKwkJICAgc3RydWN0IHJjcyBfX2lvbWVtICpwcmNzKQogewotICAgIGludCByeF9sZW47Ci0gICAgdW5zaWduZWQgaW50IHBrdF9hZGRyOwotICAgIHZvaWQgX19pb21lbSAqcG1zZzsKLSAgICBERUJVRyg0LCJyYXlfcnggcHJvY2VzcyByeCBwYWNrZXRcbiIpOworCWludCByeF9sZW47CisJdW5zaWduZWQgaW50IHBrdF9hZGRyOworCXZvaWQgX19pb21lbSAqcG1zZzsKKwlERUJVRyg0LCAicmF5X3J4IHByb2Nlc3MgcnggcGFja2V0XG4iKTsKIAotICAgIC8qIENhbGN1bGF0ZSBhZGRyZXNzIG9mIHBhY2tldCB3aXRoaW4gUnggYnVmZmVyICovCi0gICAgcGt0X2FkZHIgPSAoKHJlYWRiKCZwcmNzLT52YXIucnhfcGFja2V0LnJ4X2RhdGFfcHRyWzBdKSA8PCA4KQotICAgICAgICAgICAgICAgICsgcmVhZGIoJnByY3MtPnZhci5yeF9wYWNrZXQucnhfZGF0YV9wdHJbMV0pKSAmIFJYX0JVRkZfRU5EOwotICAgIC8qIExlbmd0aCBvZiBmaXJzdCBwYWNrZXQgZnJhZ21lbnQgKi8KLSAgICByeF9sZW4gPSAocmVhZGIoJnByY3MtPnZhci5yeF9wYWNrZXQucnhfZGF0YV9sZW5ndGhbMF0pIDw8IDgpCi0gICAgICAgICsgcmVhZGIoJnByY3MtPnZhci5yeF9wYWNrZXQucnhfZGF0YV9sZW5ndGhbMV0pOworCS8qIENhbGN1bGF0ZSBhZGRyZXNzIG9mIHBhY2tldCB3aXRoaW4gUnggYnVmZmVyICovCisJcGt0X2FkZHIgPSAoKHJlYWRiKCZwcmNzLT52YXIucnhfcGFja2V0LnJ4X2RhdGFfcHRyWzBdKSA8PCA4KQorCQkgICAgKyByZWFkYigmcHJjcy0+dmFyLnJ4X3BhY2tldC5yeF9kYXRhX3B0clsxXSkpICYgUlhfQlVGRl9FTkQ7CisJLyogTGVuZ3RoIG9mIGZpcnN0IHBhY2tldCBmcmFnbWVudCAqLworCXJ4X2xlbiA9IChyZWFkYigmcHJjcy0+dmFyLnJ4X3BhY2tldC5yeF9kYXRhX2xlbmd0aFswXSkgPDwgOCkKKwkgICAgKyByZWFkYigmcHJjcy0+dmFyLnJ4X3BhY2tldC5yeF9kYXRhX2xlbmd0aFsxXSk7CiAKLSAgICBsb2NhbC0+bGFzdF9yc2wgPSByZWFkYigmcHJjcy0+dmFyLnJ4X3BhY2tldC5yeF9zaWdfbGV2KTsKLSAgICBwbXNnID0gbG9jYWwtPnJtZW0gKyBwa3RfYWRkcjsKLSAgICBzd2l0Y2gocmVhZGIocG1zZykpCi0gICAgewotICAgIGNhc2UgREFUQV9UWVBFOgotICAgICAgICBERUJVRyg0LCJyYXlfcnggZGF0YSB0eXBlXG4iKTsKLSAgICAgICAgcnhfZGF0YShkZXYsIHByY3MsIHBrdF9hZGRyLCByeF9sZW4pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEFVVEhFTlRJQ19UWVBFOgotICAgICAgICBERUJVRyg0LCJyYXlfcnggYXV0aGVudGljIHR5cGVcbiIpOwotICAgICAgICBpZiAoc25pZmZlcikgcnhfZGF0YShkZXYsIHByY3MsIHBrdF9hZGRyLCByeF9sZW4pOwotICAgICAgICBlbHNlIHJ4X2F1dGhlbnRpY2F0ZShsb2NhbCwgcHJjcywgcGt0X2FkZHIsIHJ4X2xlbik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgREVBVVRIRU5USUNfVFlQRToKLSAgICAgICAgREVCVUcoNCwicmF5X3J4IGRlYXV0aCB0eXBlXG4iKTsKLSAgICAgICAgaWYgKHNuaWZmZXIpIHJ4X2RhdGEoZGV2LCBwcmNzLCBwa3RfYWRkciwgcnhfbGVuKTsKLSAgICAgICAgZWxzZSByeF9kZWF1dGhlbnRpY2F0ZShsb2NhbCwgcHJjcywgcGt0X2FkZHIsIHJ4X2xlbik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTlVMTF9NU0dfVFlQRToKLSAgICAgICAgREVCVUcoMywicmF5X2NzIHJ4IE5VTEwgbXNnXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBCRUFDT05fVFlQRToKLSAgICAgICAgREVCVUcoNCwicmF5X3J4IGJlYWNvbiB0eXBlXG4iKTsKLSAgICAgICAgaWYgKHNuaWZmZXIpIHJ4X2RhdGEoZGV2LCBwcmNzLCBwa3RfYWRkciwgcnhfbGVuKTsKKwlsb2NhbC0+bGFzdF9yc2wgPSByZWFkYigmcHJjcy0+dmFyLnJ4X3BhY2tldC5yeF9zaWdfbGV2KTsKKwlwbXNnID0gbG9jYWwtPnJtZW0gKyBwa3RfYWRkcjsKKwlzd2l0Y2ggKHJlYWRiKHBtc2cpKSB7CisJY2FzZSBEQVRBX1RZUEU6CisJCURFQlVHKDQsICJyYXlfcnggZGF0YSB0eXBlXG4iKTsKKwkJcnhfZGF0YShkZXYsIHByY3MsIHBrdF9hZGRyLCByeF9sZW4pOworCQlicmVhazsKKwljYXNlIEFVVEhFTlRJQ19UWVBFOgorCQlERUJVRyg0LCAicmF5X3J4IGF1dGhlbnRpYyB0eXBlXG4iKTsKKwkJaWYgKHNuaWZmZXIpCisJCQlyeF9kYXRhKGRldiwgcHJjcywgcGt0X2FkZHIsIHJ4X2xlbik7CisJCWVsc2UKKwkJCXJ4X2F1dGhlbnRpY2F0ZShsb2NhbCwgcHJjcywgcGt0X2FkZHIsIHJ4X2xlbik7CisJCWJyZWFrOworCWNhc2UgREVBVVRIRU5USUNfVFlQRToKKwkJREVCVUcoNCwgInJheV9yeCBkZWF1dGggdHlwZVxuIik7CisJCWlmIChzbmlmZmVyKQorCQkJcnhfZGF0YShkZXYsIHByY3MsIHBrdF9hZGRyLCByeF9sZW4pOworCQllbHNlCisJCQlyeF9kZWF1dGhlbnRpY2F0ZShsb2NhbCwgcHJjcywgcGt0X2FkZHIsIHJ4X2xlbik7CisJCWJyZWFrOworCWNhc2UgTlVMTF9NU0dfVFlQRToKKwkJREVCVUcoMywgInJheV9jcyByeCBOVUxMIG1zZ1xuIik7CisJCWJyZWFrOworCWNhc2UgQkVBQ09OX1RZUEU6CisJCURFQlVHKDQsICJyYXlfcnggYmVhY29uIHR5cGVcbiIpOworCQlpZiAoc25pZmZlcikKKwkJCXJ4X2RhdGEoZGV2LCBwcmNzLCBwa3RfYWRkciwgcnhfbGVuKTsKIAotICAgICAgICBjb3B5X2Zyb21fcnhfYnVmZihsb2NhbCwgKFVDSEFSICopJmxvY2FsLT5sYXN0X2JjbiwgcGt0X2FkZHIsIAotICAgICAgICAgICAgICAgICAgICAgICAgICByeF9sZW4gPCBzaXplb2Yoc3RydWN0IGJlYWNvbl9yeCkgPyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcnhfbGVuIDogc2l6ZW9mKHN0cnVjdCBiZWFjb25fcngpKTsKKwkJY29weV9mcm9tX3J4X2J1ZmYobG9jYWwsIChVQ0hBUiAqKSAmbG9jYWwtPmxhc3RfYmNuLCBwa3RfYWRkciwKKwkJCQkgIHJ4X2xlbiA8IHNpemVvZihzdHJ1Y3QgYmVhY29uX3J4KSA/CisJCQkJICByeF9sZW4gOiBzaXplb2Yoc3RydWN0IGJlYWNvbl9yeCkpOwogCi0JbG9jYWwtPmJlYWNvbl9yeGVkID0gMTsKLSAgICAgICAgLyogR2V0IHRoZSBzdGF0aXN0aWNzIHNvIHRoZSBjYXJkIGNvdW50ZXJzIG5ldmVyIG92ZXJmbG93ICovCi0gICAgICAgIHJheV9nZXRfc3RhdHMoZGV2KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIERFQlVHKDAsInJheV9jcyB1bmtub3duIHBrdCB0eXBlICUyeFxuIiwgKHVuc2lnbmVkIGludCkgcmVhZGIocG1zZykpOwotICAgICAgICBicmVhazsKLSAgICB9CisJCWxvY2FsLT5iZWFjb25fcnhlZCA9IDE7CisJCS8qIEdldCB0aGUgc3RhdGlzdGljcyBzbyB0aGUgY2FyZCBjb3VudGVycyBuZXZlciBvdmVyZmxvdyAqLworCQlyYXlfZ2V0X3N0YXRzKGRldik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCURFQlVHKDAsICJyYXlfY3MgdW5rbm93biBwa3QgdHlwZSAlMnhcbiIsCisJCSAgICAgICh1bnNpZ25lZCBpbnQpcmVhZGIocG1zZykpOworCQlicmVhazsKKwl9CiAKIH0gLyogZW5kIHJheV9yeCAqLworCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi1zdGF0aWMgdm9pZCByeF9kYXRhKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCByY3MgX19pb21lbSAqcHJjcywgdW5zaWduZWQgaW50IHBrdF9hZGRyLCAKLSAgICAgICAgICAgICBpbnQgcnhfbGVuKQorc3RhdGljIHZvaWQgcnhfZGF0YShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcmNzIF9faW9tZW0gKnByY3MsCisJCSAgICB1bnNpZ25lZCBpbnQgcGt0X2FkZHIsIGludCByeF9sZW4pCiB7Ci0gICAgc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7Ci0gICAgc3RydWN0IHJjcyBfX2lvbWVtICpwcmNzbGluayA9IHByY3M7Ci0gICAgcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7Ci0gICAgVUNIQVIgKnJ4X3B0cjsKLSAgICBpbnQgdG90YWxfbGVuOwotICAgIGludCB0bXA7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7CisJc3RydWN0IHJjcyBfX2lvbWVtICpwcmNzbGluayA9IHByY3M7CisJcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7CisJVUNIQVIgKnJ4X3B0cjsKKwlpbnQgdG90YWxfbGVuOworCWludCB0bXA7CiAjaWZkZWYgV0lSRUxFU1NfU1BZCi0gICAgaW50IHNpZ2xldiA9IGxvY2FsLT5sYXN0X3JzbDsKLSAgICB1X2NoYXIgbGlua3NyY2FkZHJbRVRIX0FMRU5dOwkvKiBPdGhlciBlbmQgb2YgdGhlIHdpcmVsZXNzIGxpbmsgKi8KKwlpbnQgc2lnbGV2ID0gbG9jYWwtPmxhc3RfcnNsOworCXVfY2hhciBsaW5rc3JjYWRkcltFVEhfQUxFTl07CS8qIE90aGVyIGVuZCBvZiB0aGUgd2lyZWxlc3MgbGluayAqLwogI2VuZGlmCiAKLSAgICBpZiAoIXNuaWZmZXIpIHsKLSAgICAgICAgaWYgKHRyYW5zbGF0ZSkgeworCWlmICghc25pZmZlcikgeworCQlpZiAodHJhbnNsYXRlKSB7CiAvKiBUQkQgbGVuZ3RoIG5lZWRzIGZpeGluZyBmb3IgdHJhbnNsYXRlZCBoZWFkZXIgKi8KLSAgICAgICAgICAgIGlmIChyeF9sZW4gPCAoRVRIX0hMRU4gKyBSWF9NQUNfSEVBREVSX0xFTkdUSCkgfHwKLSAgICAgICAgICAgICAgICByeF9sZW4gPiAoZGV2LT5tdHUgKyBSWF9NQUNfSEVBREVSX0xFTkdUSCArIEVUSF9ITEVOICsgRkNTX0xFTikpIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIERFQlVHKDAsInJheV9jcyBpbnZhbGlkIHBhY2tldCBsZW5ndGggJWQgcmVjZWl2ZWQgXG4iLHJ4X2xlbik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgLyogZW5jYXBzdWxhdGVkIGV0aGVybmV0ICovIHsKLSAgICAgICAgICAgIGlmIChyeF9sZW4gPCAoRVRIX0hMRU4gKyBSWF9NQUNfSEVBREVSX0xFTkdUSCkgfHwKLSAgICAgICAgICAgICAgICByeF9sZW4gPiAoZGV2LT5tdHUgKyBSWF9NQUNfSEVBREVSX0xFTkdUSCArIEVUSF9ITEVOICsgRkNTX0xFTikpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgREVCVUcoMCwicmF5X2NzIGludmFsaWQgcGFja2V0IGxlbmd0aCAlZCByZWNlaXZlZCBcbiIscnhfbGVuKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgREVCVUcoNCwicmF5X2NzIHJ4X2RhdGEgcGFja2V0XG4iKTsKLSAgICAvKiBJZiBmcmFnbWVudGVkIHBhY2tldCwgdmVyaWZ5IHNpemVzIG9mIGZyYWdtZW50cyBhZGQgdXAgKi8KLSAgICBpZiAocmVhZGIoJnByY3MtPnZhci5yeF9wYWNrZXQubmV4dF9mcmFnX3Jjc19pbmRleCkgIT0gMHhGRikgewotICAgICAgICBERUJVRygxLCJyYXlfY3MgcngnZWQgZnJhZ21lbnRcbiIpOwotICAgICAgICB0bXAgPSAocmVhZGIoJnByY3MtPnZhci5yeF9wYWNrZXQudG90YWxwYWNrZXRsZW5ndGhbMF0pIDw8IDgpCi0gICAgICAgICAgICArICByZWFkYigmcHJjcy0+dmFyLnJ4X3BhY2tldC50b3RhbHBhY2tldGxlbmd0aFsxXSk7Ci0gICAgICAgIHRvdGFsX2xlbiA9IHRtcDsKLSAgICAgICAgcHJjc2xpbmsgPSBwcmNzOwotICAgICAgICBkbyB7Ci0gICAgICAgICAgICB0bXAgLT0gKHJlYWRiKCZwcmNzbGluay0+dmFyLnJ4X3BhY2tldC5yeF9kYXRhX2xlbmd0aFswXSkgPDwgOCkKLSAgICAgICAgICAgICAgICArICAgcmVhZGIoJnByY3NsaW5rLT52YXIucnhfcGFja2V0LnJ4X2RhdGFfbGVuZ3RoWzFdKTsKLSAgICAgICAgICAgIGlmIChyZWFkYigmcHJjc2xpbmstPnZhci5yeF9wYWNrZXQubmV4dF9mcmFnX3Jjc19pbmRleCkgPT0gMHhGRgotICAgICAgICAgICAgICAgIHx8IHRtcCA8IDApIGJyZWFrOwotICAgICAgICAgICAgcHJjc2xpbmsgPSByY3NfYmFzZShsb2NhbCkKLSAgICAgICAgICAgICAgICArIHJlYWRiKCZwcmNzbGluay0+bGlua19maWVsZCk7Ci0gICAgICAgIH0gd2hpbGUgKDEpOworCQkJaWYgKHJ4X2xlbiA8IChFVEhfSExFTiArIFJYX01BQ19IRUFERVJfTEVOR1RIKSB8fAorCQkJICAgIHJ4X2xlbiA+CisJCQkgICAgKGRldi0+bXR1ICsgUlhfTUFDX0hFQURFUl9MRU5HVEggKyBFVEhfSExFTiArCisJCQkgICAgIEZDU19MRU4pKSB7CisJCQkJREVCVUcoMCwKKwkJCQkgICAgICAicmF5X2NzIGludmFsaWQgcGFja2V0IGxlbmd0aCAlZCByZWNlaXZlZCBcbiIsCisJCQkJICAgICAgcnhfbGVuKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCX0gZWxzZSB7IC8qIGVuY2Fwc3VsYXRlZCBldGhlcm5ldCAqLwogCi0gICAgICAgIGlmICh0bXAgPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBERUJVRygwLCJyYXlfY3MgcnhfZGF0YSBmcmFnbWVudCBsZW5ndGhzIGRvbid0IGFkZCB1cFxuIik7Ci0gICAgICAgICAgICBsb2NhbC0+c3RhdHMucnhfZHJvcHBlZCsrOyAKLSAgICAgICAgICAgIHJlbGVhc2VfZnJhZ19jaGFpbihsb2NhbCwgcHJjcyk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSB7IC8qIFNpbmdsZSB1bmZyYWdtZW50ZWQgcGFja2V0ICovCi0gICAgICAgIHRvdGFsX2xlbiA9IHJ4X2xlbjsKLSAgICB9CisJCQlpZiAocnhfbGVuIDwgKEVUSF9ITEVOICsgUlhfTUFDX0hFQURFUl9MRU5HVEgpIHx8CisJCQkgICAgcnhfbGVuID4KKwkJCSAgICAoZGV2LT5tdHUgKyBSWF9NQUNfSEVBREVSX0xFTkdUSCArIEVUSF9ITEVOICsKKwkJCSAgICAgRkNTX0xFTikpIHsKKwkJCQlERUJVRygwLAorCQkJCSAgICAgICJyYXlfY3MgaW52YWxpZCBwYWNrZXQgbGVuZ3RoICVkIHJlY2VpdmVkIFxuIiwKKwkJCQkgICAgICByeF9sZW4pOworCQkJCXJldHVybjsKKwkJCX0KKwkJfQorCX0KKwlERUJVRyg0LCAicmF5X2NzIHJ4X2RhdGEgcGFja2V0XG4iKTsKKwkvKiBJZiBmcmFnbWVudGVkIHBhY2tldCwgdmVyaWZ5IHNpemVzIG9mIGZyYWdtZW50cyBhZGQgdXAgKi8KKwlpZiAocmVhZGIoJnByY3MtPnZhci5yeF9wYWNrZXQubmV4dF9mcmFnX3Jjc19pbmRleCkgIT0gMHhGRikgeworCQlERUJVRygxLCAicmF5X2NzIHJ4J2VkIGZyYWdtZW50XG4iKTsKKwkJdG1wID0gKHJlYWRiKCZwcmNzLT52YXIucnhfcGFja2V0LnRvdGFscGFja2V0bGVuZ3RoWzBdKSA8PCA4KQorCQkgICAgKyByZWFkYigmcHJjcy0+dmFyLnJ4X3BhY2tldC50b3RhbHBhY2tldGxlbmd0aFsxXSk7CisJCXRvdGFsX2xlbiA9IHRtcDsKKwkJcHJjc2xpbmsgPSBwcmNzOworCQlkbyB7CisJCQl0bXAgLT0KKwkJCSAgICAocmVhZGIoJnByY3NsaW5rLT52YXIucnhfcGFja2V0LnJ4X2RhdGFfbGVuZ3RoWzBdKQorCQkJICAgICA8PCA4KQorCQkJICAgICsgcmVhZGIoJnByY3NsaW5rLT52YXIucnhfcGFja2V0LnJ4X2RhdGFfbGVuZ3RoWzFdKTsKKwkJCWlmIChyZWFkYigmcHJjc2xpbmstPnZhci5yeF9wYWNrZXQubmV4dF9mcmFnX3Jjc19pbmRleCkKKwkJCSAgICA9PSAweEZGIHx8IHRtcCA8IDApCisJCQkJYnJlYWs7CisJCQlwcmNzbGluayA9IHJjc19iYXNlKGxvY2FsKQorCQkJICAgICsgcmVhZGIoJnByY3NsaW5rLT5saW5rX2ZpZWxkKTsKKwkJfSB3aGlsZSAoMSk7CiAKLSAgICBza2IgPSBkZXZfYWxsb2Nfc2tiKCB0b3RhbF9sZW4rNSApOwotICAgIGlmIChza2IgPT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIERFQlVHKDAsInJheV9jcyByeF9kYXRhIGNvdWxkIG5vdCBhbGxvY2F0ZSBza2JcbiIpOwotICAgICAgICBsb2NhbC0+c3RhdHMucnhfZHJvcHBlZCsrOyAKLSAgICAgICAgaWYgKHJlYWRiKCZwcmNzLT52YXIucnhfcGFja2V0Lm5leHRfZnJhZ19yY3NfaW5kZXgpICE9IDB4RkYpCi0gICAgICAgICAgICByZWxlYXNlX2ZyYWdfY2hhaW4obG9jYWwsIHByY3MpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIHNrYl9yZXNlcnZlKCBza2IsIDIpOyAgIC8qIEFsaWduIElQIG9uIDE2IGJ5dGUgKFRCRCBjaGVjayB0aGlzKSovCisJCWlmICh0bXAgPCAwKSB7CisJCQlERUJVRygwLAorCQkJICAgICAgInJheV9jcyByeF9kYXRhIGZyYWdtZW50IGxlbmd0aHMgZG9uJ3QgYWRkIHVwXG4iKTsKKwkJCWxvY2FsLT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCQlyZWxlYXNlX2ZyYWdfY2hhaW4obG9jYWwsIHByY3MpOworCQkJcmV0dXJuOworCQl9CisJfSBlbHNlIHsgLyogU2luZ2xlIHVuZnJhZ21lbnRlZCBwYWNrZXQgKi8KKwkJdG90YWxfbGVuID0gcnhfbGVuOworCX0KIAotICAgIERFQlVHKDQsInJheV9jcyByeF9kYXRhIHRvdGFsX2xlbiA9ICV4LCByeF9sZW4gPSAleFxuIix0b3RhbF9sZW4scnhfbGVuKTsKKwlza2IgPSBkZXZfYWxsb2Nfc2tiKHRvdGFsX2xlbiArIDUpOworCWlmIChza2IgPT0gTlVMTCkgeworCQlERUJVRygwLCAicmF5X2NzIHJ4X2RhdGEgY291bGQgbm90IGFsbG9jYXRlIHNrYlxuIik7CisJCWxvY2FsLT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCWlmIChyZWFkYigmcHJjcy0+dmFyLnJ4X3BhY2tldC5uZXh0X2ZyYWdfcmNzX2luZGV4KSAhPSAweEZGKQorCQkJcmVsZWFzZV9mcmFnX2NoYWluKGxvY2FsLCBwcmNzKTsKKwkJcmV0dXJuOworCX0KKwlza2JfcmVzZXJ2ZShza2IsIDIpOwkvKiBBbGlnbiBJUCBvbiAxNiBieXRlIChUQkQgY2hlY2sgdGhpcykgKi8KKworCURFQlVHKDQsICJyYXlfY3MgcnhfZGF0YSB0b3RhbF9sZW4gPSAleCwgcnhfbGVuID0gJXhcbiIsIHRvdGFsX2xlbiwKKwkgICAgICByeF9sZW4pOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqLwotICAgIC8qIFJlc2VydmUgZW5vdWdoIHJvb20gZm9yIHRoZSB3aG9sZSBkYW1uIHBhY2tldC4gKi8KLSAgICByeF9wdHIgPSBza2JfcHV0KCBza2IsIHRvdGFsX2xlbik7Ci0gICAgLyogQ29weSB0aGUgd2hvbGUgcGFja2V0IHRvIHNrX2J1ZmYgKi8KLSAgICByeF9wdHIgKz0gY29weV9mcm9tX3J4X2J1ZmYobG9jYWwsIHJ4X3B0ciwgcGt0X2FkZHIgJiBSWF9CVUZGX0VORCwgcnhfbGVuKTsKLSAgICAvKiBHZXQgc291cmNlIGFkZHJlc3MgKi8KKwkvKiBSZXNlcnZlIGVub3VnaCByb29tIGZvciB0aGUgd2hvbGUgZGFtbiBwYWNrZXQuICovCisJcnhfcHRyID0gc2tiX3B1dChza2IsIHRvdGFsX2xlbik7CisJLyogQ29weSB0aGUgd2hvbGUgcGFja2V0IHRvIHNrX2J1ZmYgKi8KKwlyeF9wdHIgKz0KKwkgICAgY29weV9mcm9tX3J4X2J1ZmYobG9jYWwsIHJ4X3B0ciwgcGt0X2FkZHIgJiBSWF9CVUZGX0VORCwgcnhfbGVuKTsKKwkvKiBHZXQgc291cmNlIGFkZHJlc3MgKi8KICNpZmRlZiBXSVJFTEVTU19TUFkKLSAgICBza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhX29mZnNldChza2IsIG9mZnNldG9mKHN0cnVjdCBtYWNfaGVhZGVyLCBhZGRyXzIpLAotCQkJCSAgICAgbGlua3NyY2FkZHIsIEVUSF9BTEVOKTsKKwlza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhX29mZnNldChza2IsCisJCQkJCSBvZmZzZXRvZihzdHJ1Y3QgbWFjX2hlYWRlciwgYWRkcl8yKSwKKwkJCQkJIGxpbmtzcmNhZGRyLCBFVEhfQUxFTik7CiAjZW5kaWYKLSAgICAvKiBOb3csIGRlYWwgd2l0aCBlbmNhcHN1bGF0aW9uL3RyYW5zbGF0aW9uL3NuaWZmZXIgKi8KLSAgICBpZiAoIXNuaWZmZXIpIHsKLSAgICAgICAgaWYgKCF0cmFuc2xhdGUpIHsgCi0gICAgICAgICAgICAvKiBFbmNhcHN1bGF0ZWQgZXRoZXJuZXQsIHNvIGp1c3QgbG9wIG9mZiA4MDIuMTEgTUFDIGhlYWRlciAqLworCS8qIE5vdywgZGVhbCB3aXRoIGVuY2Fwc3VsYXRpb24vdHJhbnNsYXRpb24vc25pZmZlciAqLworCWlmICghc25pZmZlcikgeworCQlpZiAoIXRyYW5zbGF0ZSkgeworCQkJLyogRW5jYXBzdWxhdGVkIGV0aGVybmV0LCBzbyBqdXN0IGxvcCBvZmYgODAyLjExIE1BQyBoZWFkZXIgKi8KIC8qIFRCRCByZXNlcnZlICAgICAgICAgICAgc2tiX3Jlc2VydmUoIHNrYiwgUlhfTUFDX0hFQURFUl9MRU5HVEgpOyAqLwotICAgICAgICAgICAgc2tiX3B1bGwoIHNrYiwgUlhfTUFDX0hFQURFUl9MRU5HVEgpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgLyogRG8gdHJhbnNsYXRpb24gKi8KLSAgICAgICAgICAgIHVudHJhbnNsYXRlKGxvY2FsLCBza2IsIHRvdGFsX2xlbik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSAKLSAgICB7ICAvKiBzbmlmZmVyIG1vZGUsIHNvIGp1c3QgcGFzcyB3aG9sZSBwYWNrZXQgKi8gIH07CisJCQlza2JfcHVsbChza2IsIFJYX01BQ19IRUFERVJfTEVOR1RIKTsKKwkJfSBlbHNlIHsKKwkJCS8qIERvIHRyYW5zbGF0aW9uICovCisJCQl1bnRyYW5zbGF0ZShsb2NhbCwgc2tiLCB0b3RhbF9sZW4pOworCQl9CisJfSBlbHNlIHsgLyogc25pZmZlciBtb2RlLCBzbyBqdXN0IHBhc3Mgd2hvbGUgcGFja2V0ICovCisJfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgICAvKiBOb3cgcGljayB1cCB0aGUgcmVzdCBvZiB0aGUgZnJhZ21lbnRzIGlmIGFueSAqLwotICAgIHRtcCA9IDE3OyAKLSAgICBpZiAocmVhZGIoJnByY3MtPnZhci5yeF9wYWNrZXQubmV4dF9mcmFnX3Jjc19pbmRleCkgIT0gMHhGRikgewotICAgICAgICBwcmNzbGluayA9IHByY3M7Ci0gICAgICAgIERFQlVHKDEsInJheV9jcyByeF9kYXRhIGluIGZyYWdtZW50IGxvb3BcbiIpOwotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBwcmNzbGluayA9IHJjc19iYXNlKGxvY2FsKQotICAgICAgICAgICAgICAgICsgcmVhZGIoJnByY3NsaW5rLT52YXIucnhfcGFja2V0Lm5leHRfZnJhZ19yY3NfaW5kZXgpOwotICAgICAgICAgICAgcnhfbGVuID0gKCggcmVhZGIoJnByY3NsaW5rLT52YXIucnhfcGFja2V0LnJ4X2RhdGFfbGVuZ3RoWzBdKSA8PCA4KQotICAgICAgICAgICAgICAgICAgICAgICsgcmVhZGIoJnByY3NsaW5rLT52YXIucnhfcGFja2V0LnJ4X2RhdGFfbGVuZ3RoWzFdKSkKLSAgICAgICAgICAgICAgICAmIFJYX0JVRkZfRU5EOwotICAgICAgICAgICAgcGt0X2FkZHIgPSAoKCByZWFkYigmcHJjc2xpbmstPnZhci5yeF9wYWNrZXQucnhfZGF0YV9wdHJbMF0pIDw8IDgpCi0gICAgICAgICAgICAgICAgICAgICAgICArIHJlYWRiKCZwcmNzbGluay0+dmFyLnJ4X3BhY2tldC5yeF9kYXRhX3B0clsxXSkpCi0gICAgICAgICAgICAgICAgJiBSWF9CVUZGX0VORDsKKwkvKiBOb3cgcGljayB1cCB0aGUgcmVzdCBvZiB0aGUgZnJhZ21lbnRzIGlmIGFueSAqLworCXRtcCA9IDE3OworCWlmIChyZWFkYigmcHJjcy0+dmFyLnJ4X3BhY2tldC5uZXh0X2ZyYWdfcmNzX2luZGV4KSAhPSAweEZGKSB7CisJCXByY3NsaW5rID0gcHJjczsKKwkJREVCVUcoMSwgInJheV9jcyByeF9kYXRhIGluIGZyYWdtZW50IGxvb3BcbiIpOworCQlkbyB7CisJCQlwcmNzbGluayA9IHJjc19iYXNlKGxvY2FsKQorCQkJICAgICsKKwkJCSAgICByZWFkYigmcHJjc2xpbmstPnZhci5yeF9wYWNrZXQubmV4dF9mcmFnX3Jjc19pbmRleCk7CisJCQlyeF9sZW4gPQorCQkJICAgICgocmVhZGIoJnByY3NsaW5rLT52YXIucnhfcGFja2V0LnJ4X2RhdGFfbGVuZ3RoWzBdKQorCQkJICAgICAgPDwgOCkKKwkJCSAgICAgKworCQkJICAgICByZWFkYigmcHJjc2xpbmstPnZhci5yeF9wYWNrZXQucnhfZGF0YV9sZW5ndGhbMV0pKQorCQkJICAgICYgUlhfQlVGRl9FTkQ7CisJCQlwa3RfYWRkciA9CisJCQkgICAgKChyZWFkYigmcHJjc2xpbmstPnZhci5yeF9wYWNrZXQucnhfZGF0YV9wdHJbMF0pIDw8CisJCQkgICAgICA4KQorCQkJICAgICArIHJlYWRiKCZwcmNzbGluay0+dmFyLnJ4X3BhY2tldC5yeF9kYXRhX3B0clsxXSkpCisJCQkgICAgJiBSWF9CVUZGX0VORDsKIAotICAgICAgICAgICAgcnhfcHRyICs9IGNvcHlfZnJvbV9yeF9idWZmKGxvY2FsLCByeF9wdHIsIHBrdF9hZGRyLCByeF9sZW4pOworCQkJcnhfcHRyICs9CisJCQkgICAgY29weV9mcm9tX3J4X2J1ZmYobG9jYWwsIHJ4X3B0ciwgcGt0X2FkZHIsIHJ4X2xlbik7CiAKLSAgICAgICAgfSB3aGlsZSAodG1wLS0gJiYgCi0gICAgICAgICAgICAgICAgIHJlYWRiKCZwcmNzbGluay0+dmFyLnJ4X3BhY2tldC5uZXh0X2ZyYWdfcmNzX2luZGV4KSAhPSAweEZGKTsKLSAgICAgICAgcmVsZWFzZV9mcmFnX2NoYWluKGxvY2FsLCBwcmNzKTsKLSAgICB9CisJCX0gd2hpbGUgKHRtcC0tICYmCisJCQkgcmVhZGIoJnByY3NsaW5rLT52YXIucnhfcGFja2V0Lm5leHRfZnJhZ19yY3NfaW5kZXgpICE9CisJCQkgMHhGRik7CisJCXJlbGVhc2VfZnJhZ19jaGFpbihsb2NhbCwgcHJjcyk7CisJfQogCi0gICAgc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYixkZXYpOwotICAgIG5ldGlmX3J4KHNrYik7Ci0gICAgbG9jYWwtPnN0YXRzLnJ4X3BhY2tldHMrKzsKLSAgICBsb2NhbC0+c3RhdHMucnhfYnl0ZXMgKz0gdG90YWxfbGVuOworCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7CisJbmV0aWZfcngoc2tiKTsKKwlsb2NhbC0+c3RhdHMucnhfcGFja2V0cysrOworCWxvY2FsLT5zdGF0cy5yeF9ieXRlcyArPSB0b3RhbF9sZW47CiAKLSAgICAvKiBHYXRoZXIgc2lnbmFsIHN0cmVuZ3RoIHBlciBhZGRyZXNzICovCisJLyogR2F0aGVyIHNpZ25hbCBzdHJlbmd0aCBwZXIgYWRkcmVzcyAqLwogI2lmZGVmIFdJUkVMRVNTX1NQWQotICAgIC8qIEZvciB0aGUgQWNjZXNzIFBvaW50IG9yIHRoZSBub2RlIGhhdmluZyBzdGFydGVkIHRoZSBhZC1ob2MgbmV0Ci0gICAgICogbm90ZSA6IGFkLWhvYyB3b3JrIG9ubHkgaW4gc29tZSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucywgYnV0IHdlCi0gICAgICoga2x1ZGdlIGluIHJheV9nZXRfd2lyZWxlc3Nfc3RhdHMuLi4gKi8KLSAgICBpZighbWVtY21wKGxpbmtzcmNhZGRyLCBsb2NhbC0+YnNzX2lkLCBFVEhfQUxFTikpCi0gICAgICB7Ci0JLyogVXBkYXRlIHN0YXRpc3RpY3MgKi8KLQkvKmxvY2FsLT53c3RhdHMucXVhbC5xdWFsID0gbm9uZSA/ICovCi0JbG9jYWwtPndzdGF0cy5xdWFsLmxldmVsID0gc2lnbGV2OwotCS8qbG9jYWwtPndzdGF0cy5xdWFsLm5vaXNlID0gbm9uZSA/ICovCi0JbG9jYWwtPndzdGF0cy5xdWFsLnVwZGF0ZWQgPSAweDI7Ci0gICAgICB9Ci0gICAgLyogTm93LCB1cGRhdGUgdGhlIHNweSBzdHVmZiAqLwotICAgIHsKLQlzdHJ1Y3QgaXdfcXVhbGl0eSB3c3RhdHM7Ci0Jd3N0YXRzLmxldmVsID0gc2lnbGV2OwotCS8qIHdzdGF0cy5ub2lzZSA9IG5vbmUgPyAqLwotCS8qIHdzdGF0cy5xdWFsID0gbm9uZSA/ICovCi0Jd3N0YXRzLnVwZGF0ZWQgPSAweDI7Ci0JLyogVXBkYXRlIHNweSByZWNvcmRzICovCi0Jd2lyZWxlc3Nfc3B5X3VwZGF0ZShkZXYsIGxpbmtzcmNhZGRyLCAmd3N0YXRzKTsKLSAgICB9Ci0jZW5kaWYJLyogV0lSRUxFU1NfU1BZICovCisJLyogRm9yIHRoZSBBY2Nlc3MgUG9pbnQgb3IgdGhlIG5vZGUgaGF2aW5nIHN0YXJ0ZWQgdGhlIGFkLWhvYyBuZXQKKwkgKiBub3RlIDogYWQtaG9jIHdvcmsgb25seSBpbiBzb21lIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zLCBidXQgd2UKKwkgKiBrbHVkZ2UgaW4gcmF5X2dldF93aXJlbGVzc19zdGF0cy4uLiAqLworCWlmICghbWVtY21wKGxpbmtzcmNhZGRyLCBsb2NhbC0+YnNzX2lkLCBFVEhfQUxFTikpIHsKKwkJLyogVXBkYXRlIHN0YXRpc3RpY3MgKi8KKwkJLypsb2NhbC0+d3N0YXRzLnF1YWwucXVhbCA9IG5vbmUgPyAqLworCQlsb2NhbC0+d3N0YXRzLnF1YWwubGV2ZWwgPSBzaWdsZXY7CisJCS8qbG9jYWwtPndzdGF0cy5xdWFsLm5vaXNlID0gbm9uZSA/ICovCisJCWxvY2FsLT53c3RhdHMucXVhbC51cGRhdGVkID0gMHgyOworCX0KKwkvKiBOb3csIHVwZGF0ZSB0aGUgc3B5IHN0dWZmICovCisJeworCQlzdHJ1Y3QgaXdfcXVhbGl0eSB3c3RhdHM7CisJCXdzdGF0cy5sZXZlbCA9IHNpZ2xldjsKKwkJLyogd3N0YXRzLm5vaXNlID0gbm9uZSA/ICovCisJCS8qIHdzdGF0cy5xdWFsID0gbm9uZSA/ICovCisJCXdzdGF0cy51cGRhdGVkID0gMHgyOworCQkvKiBVcGRhdGUgc3B5IHJlY29yZHMgKi8KKwkJd2lyZWxlc3Nfc3B5X3VwZGF0ZShkZXYsIGxpbmtzcmNhZGRyLCAmd3N0YXRzKTsKKwl9CisjZW5kaWYgLyogV0lSRUxFU1NfU1BZICovCiB9IC8qIGVuZCByeF9kYXRhICovCisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIHN0YXRpYyB2b2lkIHVudHJhbnNsYXRlKHJheV9kZXZfdCAqbG9jYWwsIHN0cnVjdCBza19idWZmICpza2IsIGludCBsZW4pCiB7Ci0gICAgc25hcGhkcl90ICpwc25hcCA9IChzbmFwaGRyX3QgKikoc2tiLT5kYXRhICsgUlhfTUFDX0hFQURFUl9MRU5HVEgpOwotICAgIHN0cnVjdCBpZWVlODAyMTFfaGRyICpwbWFjID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOwotICAgIF9fYmUxNiB0eXBlID0gKihfX2JlMTYgKilwc25hcC0+ZXRoZXJ0eXBlOwotICAgIGludCBkZWx0YTsKLSAgICBzdHJ1Y3QgZXRoaGRyICpwZXRoOwotICAgIFVDSEFSIHNyY2FkZHJbQUREUkxFTl07Ci0gICAgVUNIQVIgZGVzdGFkZHJbQUREUkxFTl07Ci0gICAgc3RhdGljIFVDSEFSIG9yZ19icmlkZ2VbM10gPSB7MCwgMCwgMHhmOH07Ci0gICAgc3RhdGljIFVDSEFSIG9yZ18xMDQyWzNdID0gezAsIDAsIDB9OworCXNuYXBoZHJfdCAqcHNuYXAgPSAoc25hcGhkcl90ICopIChza2ItPmRhdGEgKyBSWF9NQUNfSEVBREVSX0xFTkdUSCk7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKnBtYWMgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7CisJX19iZTE2IHR5cGUgPSAqKF9fYmUxNiAqKSBwc25hcC0+ZXRoZXJ0eXBlOworCWludCBkZWx0YTsKKwlzdHJ1Y3QgZXRoaGRyICpwZXRoOworCVVDSEFSIHNyY2FkZHJbQUREUkxFTl07CisJVUNIQVIgZGVzdGFkZHJbQUREUkxFTl07CisJc3RhdGljIFVDSEFSIG9yZ19icmlkZ2VbM10gPSB7IDAsIDAsIDB4ZjggfTsKKwlzdGF0aWMgVUNIQVIgb3JnXzEwNDJbM10gPSB7IDAsIDAsIDAgfTsKIAotICAgIG1lbWNweShkZXN0YWRkciwgaWVlZTgwMjExX2dldF9EQShwbWFjKSwgQUREUkxFTik7Ci0gICAgbWVtY3B5KHNyY2FkZHIsIGllZWU4MDIxMV9nZXRfU0EocG1hYyksIEFERFJMRU4pOworCW1lbWNweShkZXN0YWRkciwgaWVlZTgwMjExX2dldF9EQShwbWFjKSwgQUREUkxFTik7CisJbWVtY3B5KHNyY2FkZHIsIGllZWU4MDIxMV9nZXRfU0EocG1hYyksIEFERFJMRU4pOwogCiAjaWZkZWYgUENNQ0lBX0RFQlVHCi0gICAgaWYgKHBjX2RlYnVnID4gMykgewotICAgIGludCBpOwotICAgIHByaW50ayhLRVJOX0RFQlVHICJza2ItPmRhdGEgYmVmb3JlIHVudHJhbnNsYXRlIik7Ci0gICAgZm9yIChpPTA7aTw2NDtpKyspIAotICAgICAgICBwcmludGsoIiUwMnggIixza2ItPmRhdGFbaV0pOwotICAgIHByaW50aygiXG4iIEtFUk5fREVCVUcgInR5cGUgPSAlMDh4LCB4c2FwID0gJTAyeCUwMnglMDJ4LCBvcmcgPSAlMDJ4MDJ4MDJ4XG4iLAotICAgICAgICAgICBudG9ocyh0eXBlKSwKLQkgICBwc25hcC0+ZHNhcCwgcHNuYXAtPnNzYXAsIHBzbmFwLT5jdHJsLAotCSAgIHBzbmFwLT5vcmdbMF0sIHBzbmFwLT5vcmdbMV0sIHBzbmFwLT5vcmdbMl0pOwotICAgIHByaW50ayhLRVJOX0RFQlVHICJ1bnRyYW5zbGF0ZSBza2ItPmRhdGEgPSAlcFxuIixza2ItPmRhdGEpOwotICAgIH0KKwlpZiAocGNfZGVidWcgPiAzKSB7CisJCWludCBpOworCQlwcmludGsoS0VSTl9ERUJVRyAic2tiLT5kYXRhIGJlZm9yZSB1bnRyYW5zbGF0ZSIpOworCQlmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykKKwkJCXByaW50aygiJTAyeCAiLCBza2ItPmRhdGFbaV0pOworCQlwcmludGsoIlxuIiBLRVJOX0RFQlVHCisJCSAgICAgICAidHlwZSA9ICUwOHgsIHhzYXAgPSAlMDJ4JTAyeCUwMngsIG9yZyA9ICUwMngwMngwMnhcbiIsCisJCSAgICAgICBudG9ocyh0eXBlKSwgcHNuYXAtPmRzYXAsIHBzbmFwLT5zc2FwLCBwc25hcC0+Y3RybCwKKwkJICAgICAgIHBzbmFwLT5vcmdbMF0sIHBzbmFwLT5vcmdbMV0sIHBzbmFwLT5vcmdbMl0pOworCQlwcmludGsoS0VSTl9ERUJVRyAidW50cmFuc2xhdGUgc2tiLT5kYXRhID0gJXBcbiIsIHNrYi0+ZGF0YSk7CisJfQogI2VuZGlmCiAKLSAgICBpZiAocHNuYXAtPmRzYXAgIT0gMHhhYSB8fCBwc25hcC0+c3NhcCAhPSAweGFhIHx8IHBzbmFwLT5jdHJsICE9IDMpIHsKLSAgICAgICAgLyogbm90IGEgc25hcCB0eXBlIHNvIGxlYXZlIGl0IGFsb25lICovCi0gICAgICAgIERFQlVHKDMsInJheV9jcyB1bnRyYW5zbGF0ZSBOT1QgU05BUCAlMDJ4ICUwMnggJTAyeFxuIiwKLQkJcHNuYXAtPmRzYXAsIHBzbmFwLT5zc2FwLCBwc25hcC0+Y3RybCk7CisJaWYgKHBzbmFwLT5kc2FwICE9IDB4YWEgfHwgcHNuYXAtPnNzYXAgIT0gMHhhYSB8fCBwc25hcC0+Y3RybCAhPSAzKSB7CisJCS8qIG5vdCBhIHNuYXAgdHlwZSBzbyBsZWF2ZSBpdCBhbG9uZSAqLworCQlERUJVRygzLCAicmF5X2NzIHVudHJhbnNsYXRlIE5PVCBTTkFQICUwMnggJTAyeCAlMDJ4XG4iLAorCQkgICAgICBwc25hcC0+ZHNhcCwgcHNuYXAtPnNzYXAsIHBzbmFwLT5jdHJsKTsKIAotICAgICAgICBkZWx0YSA9IFJYX01BQ19IRUFERVJfTEVOR1RIIC0gRVRIX0hMRU47Ci0gICAgICAgIHBldGggPSAoc3RydWN0IGV0aGhkciAqKShza2ItPmRhdGEgKyBkZWx0YSk7Ci0gICAgICAgIHBldGgtPmhfcHJvdG8gPSBodG9ucyhsZW4gLSBSWF9NQUNfSEVBREVSX0xFTkdUSCk7Ci0gICAgfQotICAgIGVsc2UgeyAvKiBJdHMgYSBTTkFQICovCi0gICAgICAgIGlmIChtZW1jbXAocHNuYXAtPm9yZywgb3JnX2JyaWRnZSwgMykgPT0gMCkgeyAvKiBFdGhlcklJIGFuZCBudWtlIHRoZSBMTEMgICovCi0gICAgICAgIERFQlVHKDMsInJheV9jcyB1bnRyYW5zbGF0ZSBCcmlkZ2UgZW5jYXBcbiIpOwotICAgICAgICAgICAgZGVsdGEgPSBSWF9NQUNfSEVBREVSX0xFTkdUSCAKLSAgICAgICAgICAgICAgICArIHNpemVvZihzdHJ1Y3Qgc25hcGhkcl90KSAtIEVUSF9ITEVOOwotICAgICAgICAgICAgcGV0aCA9IChzdHJ1Y3QgZXRoaGRyICopKHNrYi0+ZGF0YSArIGRlbHRhKTsKLSAgICAgICAgICAgIHBldGgtPmhfcHJvdG8gPSB0eXBlOwotCX0gZWxzZSBpZiAobWVtY21wKHBzbmFwLT5vcmcsIG9yZ18xMDQyLCAzKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChudG9ocyh0eXBlKSkgewotICAgICAgICAgICAgICAgIGNhc2UgRVRIX1BfSVBYOgotICAgICAgICAgICAgICAgIGNhc2UgRVRIX1BfQUFSUDoKLSAgICAgICAgICAgICAgICAgICAgREVCVUcoMywicmF5X2NzIHVudHJhbnNsYXRlIFJGQyBJUFgvQUFSUFxuIik7Ci0gICAgICAgICAgICAgICAgICAgIGRlbHRhID0gUlhfTUFDX0hFQURFUl9MRU5HVEggLSBFVEhfSExFTjsKLSAgICAgICAgICAgICAgICAgICAgcGV0aCA9IChzdHJ1Y3QgZXRoaGRyICopKHNrYi0+ZGF0YSArIGRlbHRhKTsKLSAgICAgICAgICAgICAgICAgICAgcGV0aC0+aF9wcm90byA9IGh0b25zKGxlbiAtIFJYX01BQ19IRUFERVJfTEVOR1RIKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgREVCVUcoMywicmF5X2NzIHVudHJhbnNsYXRlIFJGQyBkZWZhdWx0XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgZGVsdGEgPSBSWF9NQUNfSEVBREVSX0xFTkdUSCArIAotICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBzbmFwaGRyX3QpIC0gRVRIX0hMRU47Ci0gICAgICAgICAgICAgICAgICAgIHBldGggPSAoc3RydWN0IGV0aGhkciAqKShza2ItPmRhdGEgKyBkZWx0YSk7Ci0gICAgICAgICAgICAgICAgICAgIHBldGgtPmhfcHJvdG8gPSB0eXBlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0JfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBwcmludGsoInJheV9jcyB1bnRyYW5zbGF0ZSB2ZXJ5IGNvbmZ1c2VkIGJ5IHBhY2tldFxuIik7Ci0gICAgICAgICAgICAgICAgZGVsdGEgPSBSWF9NQUNfSEVBREVSX0xFTkdUSCAtIEVUSF9ITEVOOwotICAgICAgICAgICAgICAgIHBldGggPSAoc3RydWN0IGV0aGhkciAqKShza2ItPmRhdGEgKyBkZWx0YSk7Ci0gICAgICAgICAgICAgICAgcGV0aC0+aF9wcm90byA9IHR5cGU7CisJCWRlbHRhID0gUlhfTUFDX0hFQURFUl9MRU5HVEggLSBFVEhfSExFTjsKKwkJcGV0aCA9IChzdHJ1Y3QgZXRoaGRyICopKHNrYi0+ZGF0YSArIGRlbHRhKTsKKwkJcGV0aC0+aF9wcm90byA9IGh0b25zKGxlbiAtIFJYX01BQ19IRUFERVJfTEVOR1RIKTsKKwl9IGVsc2UgeyAvKiBJdHMgYSBTTkFQICovCisJCWlmIChtZW1jbXAocHNuYXAtPm9yZywgb3JnX2JyaWRnZSwgMykgPT0gMCkgeworCQkvKiBFdGhlcklJIGFuZCBudWtlIHRoZSBMTEMgKi8KKwkJCURFQlVHKDMsICJyYXlfY3MgdW50cmFuc2xhdGUgQnJpZGdlIGVuY2FwXG4iKTsKKwkJCWRlbHRhID0gUlhfTUFDX0hFQURFUl9MRU5HVEgKKwkJCSAgICArIHNpemVvZihzdHJ1Y3Qgc25hcGhkcl90KSAtIEVUSF9ITEVOOworCQkJcGV0aCA9IChzdHJ1Y3QgZXRoaGRyICopKHNrYi0+ZGF0YSArIGRlbHRhKTsKKwkJCXBldGgtPmhfcHJvdG8gPSB0eXBlOworCQl9IGVsc2UgaWYgKG1lbWNtcChwc25hcC0+b3JnLCBvcmdfMTA0MiwgMykgPT0gMCkgeworCQkJc3dpdGNoIChudG9ocyh0eXBlKSkgeworCQkJY2FzZSBFVEhfUF9JUFg6CisJCQljYXNlIEVUSF9QX0FBUlA6CisJCQkJREVCVUcoMywgInJheV9jcyB1bnRyYW5zbGF0ZSBSRkMgSVBYL0FBUlBcbiIpOworCQkJCWRlbHRhID0gUlhfTUFDX0hFQURFUl9MRU5HVEggLSBFVEhfSExFTjsKKwkJCQlwZXRoID0gKHN0cnVjdCBldGhoZHIgKikoc2tiLT5kYXRhICsgZGVsdGEpOworCQkJCXBldGgtPmhfcHJvdG8gPQorCQkJCSAgICBodG9ucyhsZW4gLSBSWF9NQUNfSEVBREVSX0xFTkdUSCk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCURFQlVHKDMsICJyYXlfY3MgdW50cmFuc2xhdGUgUkZDIGRlZmF1bHRcbiIpOworCQkJCWRlbHRhID0gUlhfTUFDX0hFQURFUl9MRU5HVEggKworCQkJCSAgICBzaXplb2Yoc3RydWN0IHNuYXBoZHJfdCkgLSBFVEhfSExFTjsKKwkJCQlwZXRoID0gKHN0cnVjdCBldGhoZHIgKikoc2tiLT5kYXRhICsgZGVsdGEpOworCQkJCXBldGgtPmhfcHJvdG8gPSB0eXBlOworCQkJCWJyZWFrOworCQkJfQorCQl9IGVsc2UgeworCQkJcHJpbnRrKCJyYXlfY3MgdW50cmFuc2xhdGUgdmVyeSBjb25mdXNlZCBieSBwYWNrZXRcbiIpOworCQkJZGVsdGEgPSBSWF9NQUNfSEVBREVSX0xFTkdUSCAtIEVUSF9ITEVOOworCQkJcGV0aCA9IChzdHJ1Y3QgZXRoaGRyICopKHNrYi0+ZGF0YSArIGRlbHRhKTsKKwkJCXBldGgtPmhfcHJvdG8gPSB0eXBlOworCQl9CiAJfQotICAgIH0KIC8qIFRCRCByZXNlcnZlICBza2JfcmVzZXJ2ZShza2IsIGRlbHRhKTsgKi8KLSAgICBza2JfcHVsbChza2IsIGRlbHRhKTsKLSAgICBERUJVRygzLCJ1bnRyYW5zbGF0ZSBhZnRlciBza2JfcHVsbCglZCksIHNrYi0+ZGF0YSA9ICVwXG4iLGRlbHRhLHNrYi0+ZGF0YSk7Ci0gICAgbWVtY3B5KHBldGgtPmhfZGVzdCwgZGVzdGFkZHIsIEFERFJMRU4pOwotICAgIG1lbWNweShwZXRoLT5oX3NvdXJjZSwgc3JjYWRkciwgQUREUkxFTik7CisJc2tiX3B1bGwoc2tiLCBkZWx0YSk7CisJREVCVUcoMywgInVudHJhbnNsYXRlIGFmdGVyIHNrYl9wdWxsKCVkKSwgc2tiLT5kYXRhID0gJXBcbiIsIGRlbHRhLAorCSAgICAgIHNrYi0+ZGF0YSk7CisJbWVtY3B5KHBldGgtPmhfZGVzdCwgZGVzdGFkZHIsIEFERFJMRU4pOworCW1lbWNweShwZXRoLT5oX3NvdXJjZSwgc3JjYWRkciwgQUREUkxFTik7CiAjaWZkZWYgUENNQ0lBX0RFQlVHCi0gICAgaWYgKHBjX2RlYnVnID4gMykgewotICAgIGludCBpOwotICAgIHByaW50ayhLRVJOX0RFQlVHICJza2ItPmRhdGEgYWZ0ZXIgdW50cmFuc2xhdGU6Iik7Ci0gICAgZm9yIChpPTA7aTw2NDtpKyspCi0gICAgICAgIHByaW50aygiJTAyeCAiLHNrYi0+ZGF0YVtpXSk7Ci0gICAgcHJpbnRrKCJcbiIpOwotICAgIH0KKwlpZiAocGNfZGVidWcgPiAzKSB7CisJCWludCBpOworCQlwcmludGsoS0VSTl9ERUJVRyAic2tiLT5kYXRhIGFmdGVyIHVudHJhbnNsYXRlOiIpOworCQlmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykKKwkJCXByaW50aygiJTAyeCAiLCBza2ItPmRhdGFbaV0pOworCQlwcmludGsoIlxuIik7CisJfQogI2VuZGlmCiB9IC8qIGVuZCB1bnRyYW5zbGF0ZSAqLworCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAvKiBDb3B5IGRhdGEgZnJvbSBjaXJjdWxhciByZWNlaXZlIGJ1ZmZlciB0byBQQyBtZW1vcnkuCiAgKiBkZXN0ICAgICA9IGRlc3RpbmF0aW9uIGFkZHJlc3MgaW4gUEMgbWVtb3J5CiAgKiBwa3RfYWRkciA9IHNvdXJjZSBhZGRyZXNzIGluIHJlY2VpdmUgYnVmZmVyCiAgKiBsZW4gICAgICA9IGxlbmd0aCBvZiBwYWNrZXQgdG8gY29weQogICovCi1zdGF0aWMgaW50IGNvcHlfZnJvbV9yeF9idWZmKHJheV9kZXZfdCAqbG9jYWwsIFVDSEFSICpkZXN0LCBpbnQgcGt0X2FkZHIsIGludCBsZW5ndGgpCitzdGF0aWMgaW50IGNvcHlfZnJvbV9yeF9idWZmKHJheV9kZXZfdCAqbG9jYWwsIFVDSEFSICpkZXN0LCBpbnQgcGt0X2FkZHIsCisJCQkgICAgIGludCBsZW5ndGgpCiB7Ci0gICAgaW50IHdyYXBfYnl0ZXMgPSAocGt0X2FkZHIgKyBsZW5ndGgpIC0gKFJYX0JVRkZfRU5EICsgMSk7Ci0gICAgaWYgKHdyYXBfYnl0ZXMgPD0gMCkKLSAgICB7Ci0gICAgICAgIG1lbWNweV9mcm9taW8oZGVzdCxsb2NhbC0+cm1lbSArIHBrdF9hZGRyLGxlbmd0aCk7Ci0gICAgfQotICAgIGVsc2UgLyogUGFja2V0IHdyYXBwZWQgaW4gY2lyY3VsYXIgYnVmZmVyICovCi0gICAgewotICAgICAgICBtZW1jcHlfZnJvbWlvKGRlc3QsbG9jYWwtPnJtZW0rcGt0X2FkZHIsbGVuZ3RoIC0gd3JhcF9ieXRlcyk7Ci0gICAgICAgIG1lbWNweV9mcm9taW8oZGVzdCArIGxlbmd0aCAtIHdyYXBfYnl0ZXMsIGxvY2FsLT5ybWVtLCB3cmFwX2J5dGVzKTsKLSAgICB9Ci0gICAgcmV0dXJuIGxlbmd0aDsKLX0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLXN0YXRpYyB2b2lkIHJlbGVhc2VfZnJhZ19jaGFpbihyYXlfZGV2X3QgKmxvY2FsLCBzdHJ1Y3QgcmNzIF9faW9tZW0gKiBwcmNzKQotewotICAgIHN0cnVjdCByY3MgX19pb21lbSAqcHJjc2xpbmsgPSBwcmNzOwotICAgIGludCB0bXAgPSAxNzsKLSAgICB1bnNpZ25lZCByY3NpbmRleCA9IHJlYWRiKCZwcmNzLT52YXIucnhfcGFja2V0Lm5leHRfZnJhZ19yY3NfaW5kZXgpOworCWludCB3cmFwX2J5dGVzID0gKHBrdF9hZGRyICsgbGVuZ3RoKSAtIChSWF9CVUZGX0VORCArIDEpOworCWlmICh3cmFwX2J5dGVzIDw9IDApIHsKKwkJbWVtY3B5X2Zyb21pbyhkZXN0LCBsb2NhbC0+cm1lbSArIHBrdF9hZGRyLCBsZW5ndGgpOworCX0gZWxzZSB7IC8qIFBhY2tldCB3cmFwcGVkIGluIGNpcmN1bGFyIGJ1ZmZlciAqLwogCi0gICAgd2hpbGUgKHRtcC0tKSB7Ci0gICAgICAgIHdyaXRlYihDQ1NfQlVGRkVSX0ZSRUUsICZwcmNzbGluay0+YnVmZmVyX3N0YXR1cyk7Ci0gICAgICAgIGlmIChyY3NpbmRleCA+PSAoTlVNQkVSX09GX0NDUyArIE5VTUJFUl9PRl9SQ1MpKSB7Ci0gICAgICAgICAgICBERUJVRygxLCJyYXlfY3MgaW50ZXJydXB0IGJhZCByY3NpbmRleCA9IDB4JXhcbiIscmNzaW5kZXgpOwotICAgICAgICAgICAgYnJlYWs7ICAgICAgCi0gICAgICAgIH0gICAKLSAgICAgICAgcHJjc2xpbmsgPSByY3NfYmFzZShsb2NhbCkgKyByY3NpbmRleDsKLSAgICAgICAgcmNzaW5kZXggPSByZWFkYigmcHJjc2xpbmstPnZhci5yeF9wYWNrZXQubmV4dF9mcmFnX3Jjc19pbmRleCk7Ci0gICAgfQotICAgIHdyaXRlYihDQ1NfQlVGRkVSX0ZSRUUsICZwcmNzbGluay0+YnVmZmVyX3N0YXR1cyk7CisJCW1lbWNweV9mcm9taW8oZGVzdCwgbG9jYWwtPnJtZW0gKyBwa3RfYWRkciwKKwkJCSAgICAgIGxlbmd0aCAtIHdyYXBfYnl0ZXMpOworCQltZW1jcHlfZnJvbWlvKGRlc3QgKyBsZW5ndGggLSB3cmFwX2J5dGVzLCBsb2NhbC0+cm1lbSwKKwkJCSAgICAgIHdyYXBfYnl0ZXMpOworCX0KKwlyZXR1cm4gbGVuZ3RoOwogfQorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCitzdGF0aWMgdm9pZCByZWxlYXNlX2ZyYWdfY2hhaW4ocmF5X2Rldl90ICpsb2NhbCwgc3RydWN0IHJjcyBfX2lvbWVtICpwcmNzKQoreworCXN0cnVjdCByY3MgX19pb21lbSAqcHJjc2xpbmsgPSBwcmNzOworCWludCB0bXAgPSAxNzsKKwl1bnNpZ25lZCByY3NpbmRleCA9IHJlYWRiKCZwcmNzLT52YXIucnhfcGFja2V0Lm5leHRfZnJhZ19yY3NfaW5kZXgpOworCisJd2hpbGUgKHRtcC0tKSB7CisJCXdyaXRlYihDQ1NfQlVGRkVSX0ZSRUUsICZwcmNzbGluay0+YnVmZmVyX3N0YXR1cyk7CisJCWlmIChyY3NpbmRleCA+PSAoTlVNQkVSX09GX0NDUyArIE5VTUJFUl9PRl9SQ1MpKSB7CisJCQlERUJVRygxLCAicmF5X2NzIGludGVycnVwdCBiYWQgcmNzaW5kZXggPSAweCV4XG4iLAorCQkJICAgICAgcmNzaW5kZXgpOworCQkJYnJlYWs7CisJCX0KKwkJcHJjc2xpbmsgPSByY3NfYmFzZShsb2NhbCkgKyByY3NpbmRleDsKKwkJcmNzaW5kZXggPSByZWFkYigmcHJjc2xpbmstPnZhci5yeF9wYWNrZXQubmV4dF9mcmFnX3Jjc19pbmRleCk7CisJfQorCXdyaXRlYihDQ1NfQlVGRkVSX0ZSRUUsICZwcmNzbGluay0+YnVmZmVyX3N0YXR1cyk7Cit9CisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIHN0YXRpYyB2b2lkIGF1dGhlbnRpY2F0ZShyYXlfZGV2X3QgKmxvY2FsKQogewotICAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKLSAgICBERUJVRygwLCJyYXlfY3MgU3RhcnRpbmcgYXV0aGVudGljYXRpb24uXG4iKTsKLSAgICBpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7Ci0gICAgICAgIERFQlVHKDIsInJheV9jcyBhdXRoZW50aWNhdGUgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKKwlERUJVRygwLCAicmF5X2NzIFN0YXJ0aW5nIGF1dGhlbnRpY2F0aW9uLlxuIik7CisJaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgeworCQlERUJVRygyLCAicmF5X2NzIGF1dGhlbnRpY2F0ZSAtIGRldmljZSBub3QgcHJlc2VudFxuIik7CisJCXJldHVybjsKKwl9CiAKLSAgICBkZWxfdGltZXIoJmxvY2FsLT50aW1lcik7Ci0gICAgaWYgKGJ1aWxkX2F1dGhfZnJhbWUobG9jYWwsIGxvY2FsLT5ic3NfaWQsIE9QRU5fQVVUSF9SRVFVRVNUKSkgewotICAgICAgICBsb2NhbC0+dGltZXIuZnVuY3Rpb24gPSAmam9pbl9uZXQ7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICBsb2NhbC0+dGltZXIuZnVuY3Rpb24gPSAmYXV0aGVudGljYXRlX3RpbWVvdXQ7Ci0gICAgfQotICAgIGxvY2FsLT50aW1lci5leHBpcmVzID0gamlmZmllcyArIEhaKjI7Ci0gICAgbG9jYWwtPnRpbWVyLmRhdGEgPSAobG9uZylsb2NhbDsKLSAgICBhZGRfdGltZXIoJmxvY2FsLT50aW1lcik7Ci0gICAgbG9jYWwtPmF1dGhlbnRpY2F0aW9uX3N0YXRlID0gQVdBSVRJTkdfUkVTUE9OU0U7CisJZGVsX3RpbWVyKCZsb2NhbC0+dGltZXIpOworCWlmIChidWlsZF9hdXRoX2ZyYW1lKGxvY2FsLCBsb2NhbC0+YnNzX2lkLCBPUEVOX0FVVEhfUkVRVUVTVCkpIHsKKwkJbG9jYWwtPnRpbWVyLmZ1bmN0aW9uID0gJmpvaW5fbmV0OworCX0gZWxzZSB7CisJCWxvY2FsLT50aW1lci5mdW5jdGlvbiA9ICZhdXRoZW50aWNhdGVfdGltZW91dDsKKwl9CisJbG9jYWwtPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgSFogKiAyOworCWxvY2FsLT50aW1lci5kYXRhID0gKGxvbmcpbG9jYWw7CisJYWRkX3RpbWVyKCZsb2NhbC0+dGltZXIpOworCWxvY2FsLT5hdXRoZW50aWNhdGlvbl9zdGF0ZSA9IEFXQUlUSU5HX1JFU1BPTlNFOwogfSAvKiBlbmQgYXV0aGVudGljYXRlICovCisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIHN0YXRpYyB2b2lkIHJ4X2F1dGhlbnRpY2F0ZShyYXlfZGV2X3QgKmxvY2FsLCBzdHJ1Y3QgcmNzIF9faW9tZW0gKnByY3MsCi0gICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcGt0X2FkZHIsIGludCByeF9sZW4pCisJCQkgICAgdW5zaWduZWQgaW50IHBrdF9hZGRyLCBpbnQgcnhfbGVuKQogewotICAgIFVDSEFSIGJ1ZmZbMjU2XTsKLSAgICBzdHJ1Y3QgcnhfbXNnICptc2cgPSAoc3RydWN0IHJ4X21zZyAqKWJ1ZmY7Ci0gICAgCi0gICAgZGVsX3RpbWVyKCZsb2NhbC0+dGltZXIpOworCVVDSEFSIGJ1ZmZbMjU2XTsKKwlzdHJ1Y3QgcnhfbXNnICptc2cgPSAoc3RydWN0IHJ4X21zZyAqKWJ1ZmY7CiAKLSAgICBjb3B5X2Zyb21fcnhfYnVmZihsb2NhbCwgYnVmZiwgcGt0X2FkZHIsIHJ4X2xlbiAmIDB4ZmYpOwotICAgIC8qIGlmIHdlIGFyZSB0cnlpbmcgdG8gZ2V0IGF1dGhlbnRpY2F0ZWQgKi8KLSAgICBpZiAobG9jYWwtPnNwYXJtLmI0LmFfbmV0d29ya190eXBlID09IEFESE9DKSB7Ci0gICAgICAgIERFQlVHKDEsInJheV9jcyByeF9hdXRoIHZhcj0gJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnhcbiIsIG1zZy0+dmFyWzBdLG1zZy0+dmFyWzFdLG1zZy0+dmFyWzJdLG1zZy0+dmFyWzNdLG1zZy0+dmFyWzRdLG1zZy0+dmFyWzVdKTsKLSAgICAgICAgaWYgKG1zZy0+dmFyWzJdID09IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgREVCVUcoMCwicmF5X2NzIFNlbmRpbmcgYXV0aGVudGljYXRpb24gcmVzcG9uc2UuXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFidWlsZF9hdXRoX2ZyYW1lIChsb2NhbCwgbXNnLT5tYWMuYWRkcl8yLCBPUEVOX0FVVEhfUkVTUE9OU0UpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbC0+YXV0aGVudGljYXRpb25fc3RhdGUgPSBORUVEX1RPX0FVVEg7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtZW1jcHkobG9jYWwtPmF1dGhfaWQsIG1zZy0+bWFjLmFkZHJfMiwgQUREUkxFTik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIC8qIEluZnJhc3RydWN0dXJlIG5ldHdvcmsgKi8KLSAgICB7Ci0gICAgICAgIGlmIChsb2NhbC0+YXV0aGVudGljYXRpb25fc3RhdGUgPT0gQVdBSVRJTkdfUkVTUE9OU0UpIHsKLSAgICAgICAgICAgIC8qIFZlcmlmeSBhdXRoZW50aWNhdGlvbiBzZXF1ZW5jZSAjMiBhbmQgc3VjY2VzcyAqLwotICAgICAgICAgICAgaWYgKG1zZy0+dmFyWzJdID09IDIpIHsKLSAgICAgICAgICAgICAgICBpZiAoKG1zZy0+dmFyWzNdIHwgbXNnLT52YXJbNF0pID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgREVCVUcoMSwiQXV0aGVudGljYXRpb24gc3VjY2Vzc2Z1bFxuIik7Ci0gICAgICAgICAgICAgICAgICAgIGxvY2FsLT5jYXJkX3N0YXR1cyA9IENBUkRfQVVUSF9DT01QTEVURTsKLSAgICAgICAgICAgICAgICAgICAgYXNzb2NpYXRlKGxvY2FsKTsKLSAgICAgICAgICAgICAgICAgICAgbG9jYWwtPmF1dGhlbnRpY2F0aW9uX3N0YXRlID0gQVVUSEVOVElDQVRFRDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIERFQlVHKDAsIkF1dGhlbnRpY2F0aW9uIHJlZnVzZWRcbiIpOwotICAgICAgICAgICAgICAgICAgICBsb2NhbC0+Y2FyZF9zdGF0dXMgPSBDQVJEX0FVVEhfUkVGVVNFRDsKLSAgICAgICAgICAgICAgICAgICAgam9pbl9uZXQoKHVfbG9uZylsb2NhbCk7Ci0gICAgICAgICAgICAgICAgICAgIGxvY2FsLT5hdXRoZW50aWNhdGlvbl9zdGF0ZSA9IFVOQVVUSEVOVElDQVRFRDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9CisJZGVsX3RpbWVyKCZsb2NhbC0+dGltZXIpOworCisJY29weV9mcm9tX3J4X2J1ZmYobG9jYWwsIGJ1ZmYsIHBrdF9hZGRyLCByeF9sZW4gJiAweGZmKTsKKwkvKiBpZiB3ZSBhcmUgdHJ5aW5nIHRvIGdldCBhdXRoZW50aWNhdGVkICovCisJaWYgKGxvY2FsLT5zcGFybS5iNC5hX25ldHdvcmtfdHlwZSA9PSBBREhPQykgeworCQlERUJVRygxLCAicmF5X2NzIHJ4X2F1dGggdmFyPSAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeFxuIiwKKwkJICAgICAgbXNnLT52YXJbMF0sIG1zZy0+dmFyWzFdLCBtc2ctPnZhclsyXSwgbXNnLT52YXJbM10sCisJCSAgICAgIG1zZy0+dmFyWzRdLCBtc2ctPnZhcls1XSk7CisJCWlmIChtc2ctPnZhclsyXSA9PSAxKSB7CisJCQlERUJVRygwLCAicmF5X2NzIFNlbmRpbmcgYXV0aGVudGljYXRpb24gcmVzcG9uc2UuXG4iKTsKKwkJCWlmICghYnVpbGRfYXV0aF9mcmFtZQorCQkJICAgIChsb2NhbCwgbXNnLT5tYWMuYWRkcl8yLCBPUEVOX0FVVEhfUkVTUE9OU0UpKSB7CisJCQkJbG9jYWwtPmF1dGhlbnRpY2F0aW9uX3N0YXRlID0gTkVFRF9UT19BVVRIOworCQkJCW1lbWNweShsb2NhbC0+YXV0aF9pZCwgbXNnLT5tYWMuYWRkcl8yLAorCQkJCSAgICAgICBBRERSTEVOKTsKKwkJCX0KKwkJfQorCX0gZWxzZSB7IC8qIEluZnJhc3RydWN0dXJlIG5ldHdvcmsgKi8KKworCQlpZiAobG9jYWwtPmF1dGhlbnRpY2F0aW9uX3N0YXRlID09IEFXQUlUSU5HX1JFU1BPTlNFKSB7CisJCQkvKiBWZXJpZnkgYXV0aGVudGljYXRpb24gc2VxdWVuY2UgIzIgYW5kIHN1Y2Nlc3MgKi8KKwkJCWlmIChtc2ctPnZhclsyXSA9PSAyKSB7CisJCQkJaWYgKChtc2ctPnZhclszXSB8IG1zZy0+dmFyWzRdKSA9PSAwKSB7CisJCQkJCURFQlVHKDEsICJBdXRoZW50aWNhdGlvbiBzdWNjZXNzZnVsXG4iKTsKKwkJCQkJbG9jYWwtPmNhcmRfc3RhdHVzID0gQ0FSRF9BVVRIX0NPTVBMRVRFOworCQkJCQlhc3NvY2lhdGUobG9jYWwpOworCQkJCQlsb2NhbC0+YXV0aGVudGljYXRpb25fc3RhdGUgPQorCQkJCQkgICAgQVVUSEVOVElDQVRFRDsKKwkJCQl9IGVsc2UgeworCQkJCQlERUJVRygwLCAiQXV0aGVudGljYXRpb24gcmVmdXNlZFxuIik7CisJCQkJCWxvY2FsLT5jYXJkX3N0YXR1cyA9IENBUkRfQVVUSF9SRUZVU0VEOworCQkJCQlqb2luX25ldCgodV9sb25nKSBsb2NhbCk7CisJCQkJCWxvY2FsLT5hdXRoZW50aWNhdGlvbl9zdGF0ZSA9CisJCQkJCSAgICBVTkFVVEhFTlRJQ0FURUQ7CisJCQkJfQorCQkJfQorCQl9CisJfQogCiB9IC8qIGVuZCByeF9hdXRoZW50aWNhdGUgKi8KKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogc3RhdGljIHZvaWQgYXNzb2NpYXRlKHJheV9kZXZfdCAqbG9jYWwpCiB7Ci0gICAgc3RydWN0IGNjcyBfX2lvbWVtICpwY2NzOwotICAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKLSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKLSAgICBpbnQgY2NzaW5kZXg7Ci0gICAgaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgewotICAgICAgICBERUJVRygyLCJyYXlfY3MgYXNzb2NpYXRlIC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvKiBJZiBubyB0eCBidWZmZXJzIGF2YWlsYWJsZSwgcmV0dXJuKi8KLSAgICBpZiAoKGNjc2luZGV4ID0gZ2V0X2ZyZWVfY2NzKGxvY2FsKSkgPCAwKQotICAgIHsKKwlzdHJ1Y3QgY2NzIF9faW9tZW0gKnBjY3M7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OworCWludCBjY3NpbmRleDsKKwlpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7CisJCURFQlVHKDIsICJyYXlfY3MgYXNzb2NpYXRlIC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKKwkJcmV0dXJuOworCX0KKwkvKiBJZiBubyB0eCBidWZmZXJzIGF2YWlsYWJsZSwgcmV0dXJuICovCisJaWYgKChjY3NpbmRleCA9IGdldF9mcmVlX2Njcyhsb2NhbCkpIDwgMCkgewogLyogVEJEIHNob3VsZCBuZXZlciBiZSBoZXJlIGJ1dC4uLiB3aGF0IGlmIHdlIGFyZT8gKi8KLSAgICAgICAgREVCVUcoMSwicmF5X2NzIGFzc29jaWF0ZSAtIE5vIGZyZWUgY2NzXG4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBERUJVRygxLCJyYXlfY3MgU3RhcnRpbmcgYXNzb2NpYXRpb24gd2l0aCBhY2Nlc3MgcG9pbnRcbiIpOwotICAgIHBjY3MgPSBjY3NfYmFzZShsb2NhbCkgKyBjY3NpbmRleDsKLSAgICAvKiBmaWxsIGluIHRoZSBDQ1MgKi8KLSAgICB3cml0ZWIoQ0NTX1NUQVJUX0FTU09DSUFUSU9OLCAmcGNjcy0+Y21kKTsKLSAgICAvKiBJbnRlcnJ1cHQgdGhlIGZpcm13YXJlIHRvIHByb2Nlc3MgdGhlIGNvbW1hbmQgKi8KLSAgICBpZiAoaW50ZXJydXB0X2VjZihsb2NhbCwgY2NzaW5kZXgpKSB7Ci0gICAgICAgIERFQlVHKDEsInJheV9jcyBhc3NvY2lhdGUgZmFpbGVkIC0gRUNGIG5vdCByZWFkeSBmb3IgaW50clxuIik7Ci0gICAgICAgIHdyaXRlYihDQ1NfQlVGRkVSX0ZSRUUsICYocGNjcysrKS0+YnVmZmVyX3N0YXR1cyk7CisJCURFQlVHKDEsICJyYXlfY3MgYXNzb2NpYXRlIC0gTm8gZnJlZSBjY3NcbiIpOworCQlyZXR1cm47CisJfQorCURFQlVHKDEsICJyYXlfY3MgU3RhcnRpbmcgYXNzb2NpYXRpb24gd2l0aCBhY2Nlc3MgcG9pbnRcbiIpOworCXBjY3MgPSBjY3NfYmFzZShsb2NhbCkgKyBjY3NpbmRleDsKKwkvKiBmaWxsIGluIHRoZSBDQ1MgKi8KKwl3cml0ZWIoQ0NTX1NUQVJUX0FTU09DSUFUSU9OLCAmcGNjcy0+Y21kKTsKKwkvKiBJbnRlcnJ1cHQgdGhlIGZpcm13YXJlIHRvIHByb2Nlc3MgdGhlIGNvbW1hbmQgKi8KKwlpZiAoaW50ZXJydXB0X2VjZihsb2NhbCwgY2NzaW5kZXgpKSB7CisJCURFQlVHKDEsICJyYXlfY3MgYXNzb2NpYXRlIGZhaWxlZCAtIEVDRiBub3QgcmVhZHkgZm9yIGludHJcbiIpOworCQl3cml0ZWIoQ0NTX0JVRkZFUl9GUkVFLCAmKHBjY3MrKyktPmJ1ZmZlcl9zdGF0dXMpOwogCi0gICAgICAgIGRlbF90aW1lcigmbG9jYWwtPnRpbWVyKTsKLSAgICAgICAgbG9jYWwtPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgSFoqMjsKLSAgICAgICAgbG9jYWwtPnRpbWVyLmRhdGEgPSAobG9uZylsb2NhbDsKLSAgICAgICAgbG9jYWwtPnRpbWVyLmZ1bmN0aW9uID0gJmpvaW5fbmV0OwotICAgICAgICBhZGRfdGltZXIoJmxvY2FsLT50aW1lcik7Ci0gICAgICAgIGxvY2FsLT5jYXJkX3N0YXR1cyA9IENBUkRfQVNTT0NfRkFJTEVEOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICghc25pZmZlcikgbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKKwkJZGVsX3RpbWVyKCZsb2NhbC0+dGltZXIpOworCQlsb2NhbC0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBIWiAqIDI7CisJCWxvY2FsLT50aW1lci5kYXRhID0gKGxvbmcpbG9jYWw7CisJCWxvY2FsLT50aW1lci5mdW5jdGlvbiA9ICZqb2luX25ldDsKKwkJYWRkX3RpbWVyKCZsb2NhbC0+dGltZXIpOworCQlsb2NhbC0+Y2FyZF9zdGF0dXMgPSBDQVJEX0FTU09DX0ZBSUxFRDsKKwkJcmV0dXJuOworCX0KKwlpZiAoIXNuaWZmZXIpCisJCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CiAKIH0gLyogZW5kIGFzc29jaWF0ZSAqLworCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi1zdGF0aWMgdm9pZCByeF9kZWF1dGhlbnRpY2F0ZShyYXlfZGV2X3QgKmxvY2FsLCBzdHJ1Y3QgcmNzIF9faW9tZW0gKnByY3MsIAotICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcGt0X2FkZHIsIGludCByeF9sZW4pCitzdGF0aWMgdm9pZCByeF9kZWF1dGhlbnRpY2F0ZShyYXlfZGV2X3QgKmxvY2FsLCBzdHJ1Y3QgcmNzIF9faW9tZW0gKnByY3MsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgcGt0X2FkZHIsIGludCByeF9sZW4pCiB7CiAvKiAgVUNIQVIgYnVmZlsyNTZdOwogICAgIHN0cnVjdCByeF9tc2cgKm1zZyA9IChzdHJ1Y3QgcnhfbXNnICopYnVmZjsKICovCi0gICAgREVCVUcoMCwiRGVhdXRoZW50aWNhdGlvbiBmcmFtZSByZWNlaXZlZFxuIik7Ci0gICAgbG9jYWwtPmF1dGhlbnRpY2F0aW9uX3N0YXRlID0gVU5BVVRIRU5USUNBVEVEOwotICAgIC8qIE5lZWQgdG8gcmVhdXRoZW50aWNhdGUgb3IgcmVqb2luIGRlcGVuZGluZyBvbiByZWFzb24gY29kZSAqLworCURFQlVHKDAsICJEZWF1dGhlbnRpY2F0aW9uIGZyYW1lIHJlY2VpdmVkXG4iKTsKKwlsb2NhbC0+YXV0aGVudGljYXRpb25fc3RhdGUgPSBVTkFVVEhFTlRJQ0FURUQ7CisJLyogTmVlZCB0byByZWF1dGhlbnRpY2F0ZSBvciByZWpvaW4gZGVwZW5kaW5nIG9uIHJlYXNvbiBjb2RlICovCiAvKiAgY29weV9mcm9tX3J4X2J1ZmYobG9jYWwsIGJ1ZmYsIHBrdF9hZGRyLCByeF9sZW4gJiAweGZmKTsKICAqLwogfQorCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiBzdGF0aWMgdm9pZCBjbGVhcl9pbnRlcnJ1cHQocmF5X2Rldl90ICpsb2NhbCkKIHsKLSAgICB3cml0ZWIoMCwgbG9jYWwtPmFtZW0gKyBDSVNfT0ZGU0VUICsgSENTX0lOVFJfT0ZGU0VUKTsKKwl3cml0ZWIoMCwgbG9jYWwtPmFtZW0gKyBDSVNfT0ZGU0VUICsgSENTX0lOVFJfT0ZGU0VUKTsKIH0KKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiAjZGVmaW5lIE1BWERBVEEgKFBBR0VfU0laRSAtIDgwKQogCiBzdGF0aWMgY2hhciAqY2FyZF9zdGF0dXNbXSA9IHsKLSAgICAiQ2FyZCBpbnNlcnRlZCAtIHVuaW5pdGlhbGl6ZWQiLCAgICAgLyogMCAqLwotICAgICJDYXJkIG5vdCBkb3dubG9hZGVkIiwgICAgICAgICAgICAgICAvKiAxICovCi0gICAgIldhaXRpbmcgZm9yIGRvd25sb2FkIHBhcmFtZXRlcnMiLCAgIC8qIDIgKi8KLSAgICAiQ2FyZCBkb2luZyBhY3F1aXNpdGlvbiIsICAgICAgICAgICAgLyogMyAqLwotICAgICJBY3F1aXNpdGlvbiBjb21wbGV0ZSIsICAgICAgICAgICAgICAvKiA0ICovCi0gICAgIkF1dGhlbnRpY2F0aW9uIGNvbXBsZXRlIiwgICAgICAgICAgIC8qIDUgKi8KLSAgICAiQXNzb2NpYXRpb24gY29tcGxldGUiLCAgICAgICAgICAgICAgLyogNiAqLwotICAgICI/Pz8iLCAiPz8/IiwgIj8/PyIsICI/Pz8iLCAgICAgICAgICAvKiA3IDggOSAxMCB1bmRlZmluZWQgKi8KLSAgICAiQ2FyZCBpbml0IGVycm9yIiwgICAgICAgICAgICAgICAgICAgLyogMTEgKi8KLSAgICAiRG93bmxvYWQgcGFyYW1ldGVycyBlcnJvciIsICAgICAgICAgLyogMTIgKi8KLSAgICAiPz8/IiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTMgKi8KLSAgICAiQWNxdWlzaXRpb24gZmFpbGVkIiwgICAgICAgICAgICAgICAgLyogMTQgKi8KLSAgICAiQXV0aGVudGljYXRpb24gcmVmdXNlZCIsICAgICAgICAgICAgLyogMTUgKi8KLSAgICAiQXNzb2NpYXRpb24gZmFpbGVkIiAgICAgICAgICAgICAgICAgLyogMTYgKi8KKwkiQ2FyZCBpbnNlcnRlZCAtIHVuaW5pdGlhbGl6ZWQiLAkvKiAwICovCisJIkNhcmQgbm90IGRvd25sb2FkZWQiLAkJCS8qIDEgKi8KKwkiV2FpdGluZyBmb3IgZG93bmxvYWQgcGFyYW1ldGVycyIsCS8qIDIgKi8KKwkiQ2FyZCBkb2luZyBhY3F1aXNpdGlvbiIsCQkvKiAzICovCisJIkFjcXVpc2l0aW9uIGNvbXBsZXRlIiwJCQkvKiA0ICovCisJIkF1dGhlbnRpY2F0aW9uIGNvbXBsZXRlIiwJCS8qIDUgKi8KKwkiQXNzb2NpYXRpb24gY29tcGxldGUiLAkJCS8qIDYgKi8KKwkiPz8/IiwgIj8/PyIsICI/Pz8iLCAiPz8/IiwJCS8qIDcgOCA5IDEwIHVuZGVmaW5lZCAqLworCSJDYXJkIGluaXQgZXJyb3IiLAkJCS8qIDExICovCisJIkRvd25sb2FkIHBhcmFtZXRlcnMgZXJyb3IiLAkJLyogMTIgKi8KKwkiPz8/IiwJCQkJCS8qIDEzICovCisJIkFjcXVpc2l0aW9uIGZhaWxlZCIsCQkJLyogMTQgKi8KKwkiQXV0aGVudGljYXRpb24gcmVmdXNlZCIsCQkvKiAxNSAqLworCSJBc3NvY2lhdGlvbiBmYWlsZWQiCQkJLyogMTYgKi8KIH07CiAKLXN0YXRpYyBjaGFyICpuZXR0eXBlW10gPSB7IkFkaG9jIiwgIkluZnJhICJ9Owotc3RhdGljIGNoYXIgKmZyYW1pbmdbXSA9IHsiRW5jYXBzdWxhdGlvbiIsICJUcmFuc2xhdGlvbiJ9CitzdGF0aWMgY2hhciAqbmV0dHlwZVtdID0geyAiQWRob2MiLCAiSW5mcmEgIiB9Oworc3RhdGljIGNoYXIgKmZyYW1pbmdbXSA9IHsgIkVuY2Fwc3VsYXRpb24iLCAiVHJhbnNsYXRpb24iIH0KKwogOwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogc3RhdGljIGludCByYXlfY3NfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKIC8qIFByaW50IGN1cnJlbnQgdmFsdWVzIHdoaWNoIGFyZSBub3QgYXZhaWxhYmxlIHZpYSBvdGhlciBtZWFucwotICogZWcgaWZjb25maWcgCisgKiBlZyBpZmNvbmZpZwogICovCi0gICAgaW50IGk7Ci0gICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbms7Ci0gICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLSAgICByYXlfZGV2X3QgKmxvY2FsOwotICAgIFVDSEFSICpwOwotICAgIHN0cnVjdCBmcmVxX2hvcF9lbGVtZW50ICpwZmg7Ci0gICAgVUNIQVIgY1szM107CisJaW50IGk7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbms7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwlyYXlfZGV2X3QgKmxvY2FsOworCVVDSEFSICpwOworCXN0cnVjdCBmcmVxX2hvcF9lbGVtZW50ICpwZmg7CisJVUNIQVIgY1szM107CiAKLSAgICBsaW5rID0gdGhpc19kZXZpY2U7Ci0gICAgaWYgKCFsaW5rKQotICAgIAlyZXR1cm4gMDsKLSAgICBkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilsaW5rLT5wcml2OwotICAgIGlmICghZGV2KQotICAgIAlyZXR1cm4gMDsKLSAgICBsb2NhbCA9IG5ldGRldl9wcml2KGRldik7Ci0gICAgaWYgKCFsb2NhbCkKLSAgICAJcmV0dXJuIDA7CisJbGluayA9IHRoaXNfZGV2aWNlOworCWlmICghbGluaykKKwkJcmV0dXJuIDA7CisJZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopbGluay0+cHJpdjsKKwlpZiAoIWRldikKKwkJcmV0dXJuIDA7CisJbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOworCWlmICghbG9jYWwpCisJCXJldHVybiAwOwogCi0gICAgc2VxX3B1dHMobSwgIlJheWxpbmsgV2lyZWxlc3MgTEFOIGRyaXZlciBzdGF0dXNcbiIpOwotICAgIHNlcV9wcmludGYobSwgIiVzXG4iLCByY3NpZCk7Ci0gICAgLyogYnVpbGQgNCBkb2VzIG5vdCByZXBvcnQgdmVyc2lvbiwgYW5kIGZpZWxkIGlzIDB4NTUgYWZ0ZXIgbWVtdGVzdCAqLwotICAgIHNlcV9wdXRzKG0sICJGaXJtd2FyZSB2ZXJzaW9uICAgICA9ICIpOwotICAgIGlmIChsb2NhbC0+ZndfdmVyID09IDB4NTUpCi0gICAgICAgIHNlcV9wdXRzKG0sICI0IC0gVXNlIGR1bXBfY2lzIGZvciBtb3JlIGRldGFpbHNcbiIpOwotICAgIGVsc2UKLSAgICAgICAgc2VxX3ByaW50ZihtLCAiJTJkLiUwMmQuJTAyZFxuIiwKLSAgICAgICAgICAgICAgICAgICBsb2NhbC0+ZndfdmVyLCBsb2NhbC0+ZndfYmxkLCBsb2NhbC0+ZndfdmFyKTsKKwlzZXFfcHV0cyhtLCAiUmF5bGluayBXaXJlbGVzcyBMQU4gZHJpdmVyIHN0YXR1c1xuIik7CisJc2VxX3ByaW50ZihtLCAiJXNcbiIsIHJjc2lkKTsKKwkvKiBidWlsZCA0IGRvZXMgbm90IHJlcG9ydCB2ZXJzaW9uLCBhbmQgZmllbGQgaXMgMHg1NSBhZnRlciBtZW10ZXN0ICovCisJc2VxX3B1dHMobSwgIkZpcm13YXJlIHZlcnNpb24gICAgID0gIik7CisJaWYgKGxvY2FsLT5md192ZXIgPT0gMHg1NSkKKwkJc2VxX3B1dHMobSwgIjQgLSBVc2UgZHVtcF9jaXMgZm9yIG1vcmUgZGV0YWlsc1xuIik7CisJZWxzZQorCQlzZXFfcHJpbnRmKG0sICIlMmQuJTAyZC4lMDJkXG4iLAorCQkJICAgbG9jYWwtPmZ3X3ZlciwgbG9jYWwtPmZ3X2JsZCwgbG9jYWwtPmZ3X3Zhcik7CiAKLSAgICBmb3IgKGk9MDsgaTwzMjsgaSsrKSBjW2ldID0gbG9jYWwtPnNwYXJtLmI1LmFfY3VycmVudF9lc3NfaWRbaV07Ci0gICAgY1szMl0gPSAwOwotICAgIHNlcV9wcmludGYobSwgIiVzIG5ldHdvcmsgRVNTSUQgPSBcIiVzXCJcbiIsCi0gICAgICAgICAgICAgICAgICAgbmV0dHlwZVtsb2NhbC0+c3Bhcm0uYjUuYV9uZXR3b3JrX3R5cGVdLCBjKTsKKwlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykKKwkJY1tpXSA9IGxvY2FsLT5zcGFybS5iNS5hX2N1cnJlbnRfZXNzX2lkW2ldOworCWNbMzJdID0gMDsKKwlzZXFfcHJpbnRmKG0sICIlcyBuZXR3b3JrIEVTU0lEID0gXCIlc1wiXG4iLAorCQkgICBuZXR0eXBlW2xvY2FsLT5zcGFybS5iNS5hX25ldHdvcmtfdHlwZV0sIGMpOwogCi0gICAgcCA9IGxvY2FsLT5ic3NfaWQ7Ci0gICAgc2VxX3ByaW50ZihtLCAiQlNTSUQgICAgICAgICAgICAgICAgPSAlcE1cbiIsIHApOworCXAgPSBsb2NhbC0+YnNzX2lkOworCXNlcV9wcmludGYobSwgIkJTU0lEICAgICAgICAgICAgICAgID0gJXBNXG4iLCBwKTsKIAotICAgIHNlcV9wcmludGYobSwgIkNvdW50cnkgY29kZSAgICAgICAgID0gJWRcbiIsCi0gICAgICAgICAgICAgICAgICAgbG9jYWwtPnNwYXJtLmI1LmFfY3Vycl9jb3VudHJ5X2NvZGUpOworCXNlcV9wcmludGYobSwgIkNvdW50cnkgY29kZSAgICAgICAgID0gJWRcbiIsCisJCSAgIGxvY2FsLT5zcGFybS5iNS5hX2N1cnJfY291bnRyeV9jb2RlKTsKIAotICAgIGkgPSBsb2NhbC0+Y2FyZF9zdGF0dXM7Ci0gICAgaWYgKGkgPCAwKSBpID0gMTA7Ci0gICAgaWYgKGkgPiAxNikgaSA9IDEwOwotICAgIHNlcV9wcmludGYobSwgIkNhcmQgc3RhdHVzICAgICAgICAgID0gJXNcbiIsIGNhcmRfc3RhdHVzW2ldKTsKKwlpID0gbG9jYWwtPmNhcmRfc3RhdHVzOworCWlmIChpIDwgMCkKKwkJaSA9IDEwOworCWlmIChpID4gMTYpCisJCWkgPSAxMDsKKwlzZXFfcHJpbnRmKG0sICJDYXJkIHN0YXR1cyAgICAgICAgICA9ICVzXG4iLCBjYXJkX3N0YXR1c1tpXSk7CiAKLSAgICBzZXFfcHJpbnRmKG0sICJGcmFtaW5nIG1vZGUgICAgICAgICA9ICVzXG4iLGZyYW1pbmdbdHJhbnNsYXRlXSk7CisJc2VxX3ByaW50ZihtLCAiRnJhbWluZyBtb2RlICAgICAgICAgPSAlc1xuIiwgZnJhbWluZ1t0cmFuc2xhdGVdKTsKIAotICAgIHNlcV9wcmludGYobSwgIkxhc3QgcGt0IHNpZ25hbCBsdmwgID0gJWRcbiIsIGxvY2FsLT5sYXN0X3JzbCk7CisJc2VxX3ByaW50ZihtLCAiTGFzdCBwa3Qgc2lnbmFsIGx2bCAgPSAlZFxuIiwgbG9jYWwtPmxhc3RfcnNsKTsKIAotICAgIGlmIChsb2NhbC0+YmVhY29uX3J4ZWQpIHsKLQkvKiBQdWxsIHNvbWUgZmllbGRzIG91dCBvZiBsYXN0IGJlYWNvbiByZWNlaXZlZCAqLwotCXNlcV9wcmludGYobSwgIkJlYWNvbiBJbnRlcnZhbCAgICAgID0gJWQgS3VzXG4iLAotCQkgICAgICAgbG9jYWwtPmxhc3RfYmNuLmJlYWNvbl9pbnR2bFswXQotCQkgICAgICAgKyAyNTYgKiBsb2NhbC0+bGFzdF9iY24uYmVhY29uX2ludHZsWzFdKTsKLSAgICAKLSAgICBwID0gbG9jYWwtPmxhc3RfYmNuLmVsZW1lbnRzOwotICAgIGlmIChwWzBdID09IENfRVNTSURfRUxFTUVOVF9JRCkgcCArPSBwWzFdICsgMjsKLSAgICBlbHNlIHsKLSAgICAgICAgc2VxX3ByaW50ZihtLCAiUGFyc2UgYmVhY29uIGZhaWxlZCBhdCBlc3NpZCBlbGVtZW50IGlkID0gJWRcbiIscFswXSk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KKwlpZiAobG9jYWwtPmJlYWNvbl9yeGVkKSB7CisJCS8qIFB1bGwgc29tZSBmaWVsZHMgb3V0IG9mIGxhc3QgYmVhY29uIHJlY2VpdmVkICovCisJCXNlcV9wcmludGYobSwgIkJlYWNvbiBJbnRlcnZhbCAgICAgID0gJWQgS3VzXG4iLAorCQkJICAgbG9jYWwtPmxhc3RfYmNuLmJlYWNvbl9pbnR2bFswXQorCQkJICAgKyAyNTYgKiBsb2NhbC0+bGFzdF9iY24uYmVhY29uX2ludHZsWzFdKTsKIAotICAgIGlmIChwWzBdID09IENfU1VQUE9SVEVEX1JBVEVTX0VMRU1FTlRfSUQpIHsKLSAgICAgICAgc2VxX3B1dHMobSwgIlN1cHBvcnRlZCByYXRlIGNvZGVzID0gIik7Ci0gICAgICAgIGZvciAoaT0yOyBpPHBbMV0gKyAyOyBpKyspIAotICAgICAgICAgICAgc2VxX3ByaW50ZihtLCAiMHglMDJ4ICIsIHBbaV0pOwotICAgICAgICBzZXFfcHV0YyhtLCAnXG4nKTsKLSAgICAgICAgcCArPSBwWzFdICsgMjsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIHNlcV9wdXRzKG0sICJQYXJzZSBiZWFjb24gZmFpbGVkIGF0IHJhdGVzIGVsZW1lbnRcbiIpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9CisJCXAgPSBsb2NhbC0+bGFzdF9iY24uZWxlbWVudHM7CisJCWlmIChwWzBdID09IENfRVNTSURfRUxFTUVOVF9JRCkKKwkJCXAgKz0gcFsxXSArIDI7CisJCWVsc2UgeworCQkJc2VxX3ByaW50ZihtLAorCQkJCSAgICJQYXJzZSBiZWFjb24gZmFpbGVkIGF0IGVzc2lkIGVsZW1lbnQgaWQgPSAlZFxuIiwKKwkJCQkgICBwWzBdKTsKKwkJCXJldHVybiAwOworCQl9CiAKLQlpZiAocFswXSA9PSBDX0ZIX1BBUkFNX1NFVF9FTEVNRU5UX0lEKSB7Ci0JICAgIHBmaCA9IChzdHJ1Y3QgZnJlcV9ob3BfZWxlbWVudCAqKXA7Ci0JICAgIHNlcV9wcmludGYobSwgIkhvcCBkd2VsbCAgICAgICAgICAgID0gJWQgS3VzXG4iLAotCQkJICAgcGZoLT5kd2VsbF90aW1lWzBdICsgMjU2ICogcGZoLT5kd2VsbF90aW1lWzFdKTsKLQkgICAgc2VxX3ByaW50ZihtLCAiSG9wIHNldCAgICAgICAgICAgICAgPSAlZCBcbiIsIHBmaC0+aG9wX3NldCk7Ci0JICAgIHNlcV9wcmludGYobSwgIkhvcCBwYXR0ZXJuICAgICAgICAgID0gJWQgXG4iLCBwZmgtPmhvcF9wYXR0ZXJuKTsKLQkgICAgc2VxX3ByaW50ZihtLCAiSG9wIGluZGV4ICAgICAgICAgICAgPSAlZCBcbiIsIHBmaC0+aG9wX2luZGV4KTsKLQkgICAgcCArPSBwWzFdICsgMjsKKwkJaWYgKHBbMF0gPT0gQ19TVVBQT1JURURfUkFURVNfRUxFTUVOVF9JRCkgeworCQkJc2VxX3B1dHMobSwgIlN1cHBvcnRlZCByYXRlIGNvZGVzID0gIik7CisJCQlmb3IgKGkgPSAyOyBpIDwgcFsxXSArIDI7IGkrKykKKwkJCQlzZXFfcHJpbnRmKG0sICIweCUwMnggIiwgcFtpXSk7CisJCQlzZXFfcHV0YyhtLCAnXG4nKTsKKwkJCXAgKz0gcFsxXSArIDI7CisJCX0gZWxzZSB7CisJCQlzZXFfcHV0cyhtLCAiUGFyc2UgYmVhY29uIGZhaWxlZCBhdCByYXRlcyBlbGVtZW50XG4iKTsKKwkJCXJldHVybiAwOworCQl9CisKKwkJaWYgKHBbMF0gPT0gQ19GSF9QQVJBTV9TRVRfRUxFTUVOVF9JRCkgeworCQkJcGZoID0gKHN0cnVjdCBmcmVxX2hvcF9lbGVtZW50ICopcDsKKwkJCXNlcV9wcmludGYobSwgIkhvcCBkd2VsbCAgICAgICAgICAgID0gJWQgS3VzXG4iLAorCQkJCSAgIHBmaC0+ZHdlbGxfdGltZVswXSArCisJCQkJICAgMjU2ICogcGZoLT5kd2VsbF90aW1lWzFdKTsKKwkJCXNlcV9wcmludGYobSwgIkhvcCBzZXQgICAgICAgICAgICAgID0gJWQgXG4iLAorCQkJCSAgIHBmaC0+aG9wX3NldCk7CisJCQlzZXFfcHJpbnRmKG0sICJIb3AgcGF0dGVybiAgICAgICAgICA9ICVkIFxuIiwKKwkJCQkgICBwZmgtPmhvcF9wYXR0ZXJuKTsKKwkJCXNlcV9wcmludGYobSwgIkhvcCBpbmRleCAgICAgICAgICAgID0gJWQgXG4iLAorCQkJCSAgIHBmaC0+aG9wX2luZGV4KTsKKwkJCXAgKz0gcFsxXSArIDI7CisJCX0gZWxzZSB7CisJCQlzZXFfcHV0cyhtLAorCQkJCSAiUGFyc2UgYmVhY29uIGZhaWxlZCBhdCBGSCBwYXJhbSBlbGVtZW50XG4iKTsKKwkJCXJldHVybiAwOworCQl9CisJfSBlbHNlIHsKKwkJc2VxX3B1dHMobSwgIk5vIGJlYWNvbnMgcmVjZWl2ZWRcbiIpOwogCX0KLQllbHNlIHsKLQkgICAgc2VxX3B1dHMobSwgIlBhcnNlIGJlYWNvbiBmYWlsZWQgYXQgRkggcGFyYW0gZWxlbWVudFxuIik7Ci0JICAgIHJldHVybiAwOwotCX0KLSAgICB9IGVsc2UgewotCXNlcV9wdXRzKG0sICJObyBiZWFjb25zIHJlY2VpdmVkXG4iKTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgcmF5X2NzX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKQEAgLTI2ODQsNzQgKzI4MDYsNzcgQEAKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcmF5X2NzX3Byb2NfZm9wcyA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLm9wZW4JCT0gcmF5X2NzX3Byb2Nfb3BlbiwKLQkucmVhZAkJPSBzZXFfcmVhZCwKLQkubGxzZWVrCQk9IHNlcV9sc2VlaywKLQkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5vcGVuID0gcmF5X2NzX3Byb2Nfb3BlbiwKKwkucmVhZCA9IHNlcV9yZWFkLAorCS5sbHNlZWsgPSBzZXFfbHNlZWssCisJLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZSwKIH07CiAjZW5kaWYKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIHN0YXRpYyBpbnQgYnVpbGRfYXV0aF9mcmFtZShyYXlfZGV2X3QgKmxvY2FsLCBVQ0hBUiAqZGVzdCwgaW50IGF1dGhfdHlwZSkKIHsKLSAgICBpbnQgYWRkcjsKLSAgICBzdHJ1Y3QgY2NzIF9faW9tZW0gKnBjY3M7Ci0gICAgc3RydWN0IHR4X21zZyBfX2lvbWVtICpwdHg7Ci0gICAgaW50IGNjc2luZGV4OworCWludCBhZGRyOworCXN0cnVjdCBjY3MgX19pb21lbSAqcGNjczsKKwlzdHJ1Y3QgdHhfbXNnIF9faW9tZW0gKnB0eDsKKwlpbnQgY2NzaW5kZXg7CiAKLSAgICAvKiBJZiBubyB0eCBidWZmZXJzIGF2YWlsYWJsZSwgcmV0dXJuICovCi0gICAgaWYgKChjY3NpbmRleCA9IGdldF9mcmVlX3R4X2Njcyhsb2NhbCkpIDwgMCkKLSAgICB7Ci0gICAgICAgIERFQlVHKDEsInJheV9jcyBzZW5kIGF1dGhlbnRpY2F0ZSAtIE5vIGZyZWUgdHggY2NzXG4iKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KKwkvKiBJZiBubyB0eCBidWZmZXJzIGF2YWlsYWJsZSwgcmV0dXJuICovCisJaWYgKChjY3NpbmRleCA9IGdldF9mcmVlX3R4X2Njcyhsb2NhbCkpIDwgMCkgeworCQlERUJVRygxLCAicmF5X2NzIHNlbmQgYXV0aGVudGljYXRlIC0gTm8gZnJlZSB0eCBjY3NcbiIpOworCQlyZXR1cm4gLTE7CisJfQogCi0gICAgcGNjcyA9IGNjc19iYXNlKGxvY2FsKSArIGNjc2luZGV4OworCXBjY3MgPSBjY3NfYmFzZShsb2NhbCkgKyBjY3NpbmRleDsKIAotICAgIC8qIEFkZHJlc3MgaW4gY2FyZCBzcGFjZSAqLwotICAgIGFkZHIgPSBUWF9CVUZfQkFTRSArIChjY3NpbmRleCA8PCAxMSk7Ci0gICAgLyogZmlsbCBpbiB0aGUgQ0NTICovCi0gICAgd3JpdGViKENDU19UWF9SRVFVRVNULCAmcGNjcy0+Y21kKTsKLSAgICB3cml0ZWIoYWRkciA+PiA4LCBwY2NzLT52YXIudHhfcmVxdWVzdC50eF9kYXRhX3B0cik7Ci0gICAgd3JpdGViKDB4MjAsIHBjY3MtPnZhci50eF9yZXF1ZXN0LnR4X2RhdGFfcHRyICsgMSk7Ci0gICAgd3JpdGViKFRYX0FVVEhFTlRJQ0FURV9MRU5HVEhfTVNCLCBwY2NzLT52YXIudHhfcmVxdWVzdC50eF9kYXRhX2xlbmd0aCk7Ci0gICAgd3JpdGViKFRYX0FVVEhFTlRJQ0FURV9MRU5HVEhfTFNCLHBjY3MtPnZhci50eF9yZXF1ZXN0LnR4X2RhdGFfbGVuZ3RoICsgMSk7Ci0gICAgd3JpdGViKDAsICZwY2NzLT52YXIudHhfcmVxdWVzdC5wb3dfc2F2X21vZGUpOworCS8qIEFkZHJlc3MgaW4gY2FyZCBzcGFjZSAqLworCWFkZHIgPSBUWF9CVUZfQkFTRSArIChjY3NpbmRleCA8PCAxMSk7CisJLyogZmlsbCBpbiB0aGUgQ0NTICovCisJd3JpdGViKENDU19UWF9SRVFVRVNULCAmcGNjcy0+Y21kKTsKKwl3cml0ZWIoYWRkciA+PiA4LCBwY2NzLT52YXIudHhfcmVxdWVzdC50eF9kYXRhX3B0cik7CisJd3JpdGViKDB4MjAsIHBjY3MtPnZhci50eF9yZXF1ZXN0LnR4X2RhdGFfcHRyICsgMSk7CisJd3JpdGViKFRYX0FVVEhFTlRJQ0FURV9MRU5HVEhfTVNCLCBwY2NzLT52YXIudHhfcmVxdWVzdC50eF9kYXRhX2xlbmd0aCk7CisJd3JpdGViKFRYX0FVVEhFTlRJQ0FURV9MRU5HVEhfTFNCLAorCSAgICAgICBwY2NzLT52YXIudHhfcmVxdWVzdC50eF9kYXRhX2xlbmd0aCArIDEpOworCXdyaXRlYigwLCAmcGNjcy0+dmFyLnR4X3JlcXVlc3QucG93X3Nhdl9tb2RlKTsKIAotICAgIHB0eCA9IGxvY2FsLT5zcmFtICsgYWRkcjsKLSAgICAvKiBmaWxsIGluIHRoZSBtYWMgaGVhZGVyICovCi0gICAgd3JpdGViKFBST1RPQ09MX1ZFUiB8IEFVVEhFTlRJQ19UWVBFLCAmcHR4LT5tYWMuZnJhbWVfY3RsXzEpOwotICAgIHdyaXRlYigwLCAmcHR4LT5tYWMuZnJhbWVfY3RsXzIpOworCXB0eCA9IGxvY2FsLT5zcmFtICsgYWRkcjsKKwkvKiBmaWxsIGluIHRoZSBtYWMgaGVhZGVyICovCisJd3JpdGViKFBST1RPQ09MX1ZFUiB8IEFVVEhFTlRJQ19UWVBFLCAmcHR4LT5tYWMuZnJhbWVfY3RsXzEpOworCXdyaXRlYigwLCAmcHR4LT5tYWMuZnJhbWVfY3RsXzIpOwogCi0gICAgbWVtY3B5X3RvaW8ocHR4LT5tYWMuYWRkcl8xLCBkZXN0LCBBRERSTEVOKTsKLSAgICBtZW1jcHlfdG9pbyhwdHgtPm1hYy5hZGRyXzIsIGxvY2FsLT5zcGFybS5iNC5hX21hY19hZGRyLCBBRERSTEVOKTsKLSAgICBtZW1jcHlfdG9pbyhwdHgtPm1hYy5hZGRyXzMsIGxvY2FsLT5ic3NfaWQsIEFERFJMRU4pOworCW1lbWNweV90b2lvKHB0eC0+bWFjLmFkZHJfMSwgZGVzdCwgQUREUkxFTik7CisJbWVtY3B5X3RvaW8ocHR4LT5tYWMuYWRkcl8yLCBsb2NhbC0+c3Bhcm0uYjQuYV9tYWNfYWRkciwgQUREUkxFTik7CisJbWVtY3B5X3RvaW8ocHR4LT5tYWMuYWRkcl8zLCBsb2NhbC0+YnNzX2lkLCBBRERSTEVOKTsKIAotICAgIC8qIEZpbGwgaW4gbXNnIGJvZHkgd2l0aCBwcm90b2NvbCAwMCAwMCwgc2VxdWVuY2UgMDEgMDAgLHN0YXR1cyAwMCAwMCAqLwotICAgIG1lbXNldF9pbyhwdHgtPnZhciwgMCwgNik7Ci0gICAgd3JpdGViKGF1dGhfdHlwZSAmIDB4ZmYsIHB0eC0+dmFyICsgMik7CisJLyogRmlsbCBpbiBtc2cgYm9keSB3aXRoIHByb3RvY29sIDAwIDAwLCBzZXF1ZW5jZSAwMSAwMCAsc3RhdHVzIDAwIDAwICovCisJbWVtc2V0X2lvKHB0eC0+dmFyLCAwLCA2KTsKKwl3cml0ZWIoYXV0aF90eXBlICYgMHhmZiwgcHR4LT52YXIgKyAyKTsKIAotICAgIC8qIEludGVycnVwdCB0aGUgZmlybXdhcmUgdG8gcHJvY2VzcyB0aGUgY29tbWFuZCAqLwotICAgIGlmIChpbnRlcnJ1cHRfZWNmKGxvY2FsLCBjY3NpbmRleCkpIHsKLSAgICAgICAgREVCVUcoMSwicmF5X2NzIHNlbmQgYXV0aGVudGljYXRpb24gcmVxdWVzdCBmYWlsZWQgLSBFQ0Ygbm90IHJlYWR5IGZvciBpbnRyXG4iKTsKLSAgICAgICAgd3JpdGViKENDU19CVUZGRVJfRlJFRSwgJihwY2NzKyspLT5idWZmZXJfc3RhdHVzKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICByZXR1cm4gMDsKKwkvKiBJbnRlcnJ1cHQgdGhlIGZpcm13YXJlIHRvIHByb2Nlc3MgdGhlIGNvbW1hbmQgKi8KKwlpZiAoaW50ZXJydXB0X2VjZihsb2NhbCwgY2NzaW5kZXgpKSB7CisJCURFQlVHKDEsCisJCSAgICAgICJyYXlfY3Mgc2VuZCBhdXRoZW50aWNhdGlvbiByZXF1ZXN0IGZhaWxlZCAtIEVDRiBub3QgcmVhZHkgZm9yIGludHJcbiIpOworCQl3cml0ZWIoQ0NTX0JVRkZFUl9GUkVFLCAmKHBjY3MrKyktPmJ1ZmZlcl9zdGF0dXMpOworCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiAwOwogfSAvKiBFbmQgYnVpbGRfYXV0aF9mcmFtZSAqLwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKIHN0YXRpYyB2b2lkIHJheWNzX3dyaXRlKGNvbnN0IGNoYXIgKm5hbWUsIHdyaXRlX3Byb2NfdCAqdywgdm9pZCAqZGF0YSkKIHsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKiBlbnRyeSA9IGNyZWF0ZV9wcm9jX2VudHJ5KG5hbWUsIFNfSUZSRUcgfCBTX0lXVVNSLCBOVUxMKTsKKwlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmVudHJ5ID0KKwkgICAgY3JlYXRlX3Byb2NfZW50cnkobmFtZSwgU19JRlJFRyB8IFNfSVdVU1IsIE5VTEwpOwogCWlmIChlbnRyeSkgewogCQllbnRyeS0+d3JpdGVfcHJvYyA9IHc7CiAJCWVudHJ5LT5kYXRhID0gZGF0YTsKIAl9CiB9CiAKLXN0YXRpYyBpbnQgd3JpdGVfZXNzaWQoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgY291bnQsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IHdyaXRlX2Vzc2lkKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAorCQkgICAgICAgdW5zaWduZWQgbG9uZyBjb3VudCwgdm9pZCAqZGF0YSkKIHsKIAlzdGF0aWMgY2hhciBwcm9jX2Vzc2lkWzMzXTsKIAlpbnQgbGVuID0gY291bnQ7CkBAIC0yNzY1LDcgKzI4OTAsOCBAQAogCXJldHVybiBjb3VudDsKIH0KIAotc3RhdGljIGludCB3cml0ZV9pbnQoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgY291bnQsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IHdyaXRlX2ludChzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKKwkJICAgICB1bnNpZ25lZCBsb25nIGNvdW50LCB2b2lkICpkYXRhKQogewogCXN0YXRpYyBjaGFyIHByb2NfbnVtYmVyWzEwXTsKIAljaGFyICpwOwpAQCAtMjc4NSw3ICsyOTExLDcgQEAKIAkJdW5zaWduZWQgaW50IGMgPSAqcCAtICcwJzsKIAkJaWYgKGMgPiA5KQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCW5yID0gbnIqMTAgKyBjOworCQluciA9IG5yICogMTAgKyBjOwogCQlwKys7CiAJfSB3aGlsZSAoLS1sZW4pOwogCSooaW50ICopZGF0YSA9IG5yOwpAQCAtMjc5Nyw1NSArMjkyMyw1OCBAQAogCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4MDFhNiwgMHgwMDAwKSwKIAlQQ01DSUFfREVWSUNFX05VTEwsCiB9OworCiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjbWNpYSwgcmF5X2lkcyk7CiAKIHN0YXRpYyBzdHJ1Y3QgcGNtY2lhX2RyaXZlciByYXlfZHJpdmVyID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkuZHJ2CQk9IHsKLQkJLm5hbWUJPSAicmF5X2NzIiwKLQl9LAotCS5wcm9iZQkJPSByYXlfcHJvYmUsCi0JLnJlbW92ZQkJPSByYXlfZGV0YWNoLAotCS5pZF90YWJsZSAgICAgICA9IHJheV9pZHMsCi0JLnN1c3BlbmQJPSByYXlfc3VzcGVuZCwKLQkucmVzdW1lCQk9IHJheV9yZXN1bWUsCisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLmRydiA9IHsKKwkJLm5hbWUgPSAicmF5X2NzIiwKKwkJfSwKKwkucHJvYmUgPSByYXlfcHJvYmUsCisJLnJlbW92ZSA9IHJheV9kZXRhY2gsCisJLmlkX3RhYmxlID0gcmF5X2lkcywKKwkuc3VzcGVuZCA9IHJheV9zdXNwZW5kLAorCS5yZXN1bWUgPSByYXlfcmVzdW1lLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgaW5pdF9yYXlfY3Modm9pZCkKIHsKLSAgICBpbnQgcmM7Ci0gICAgCi0gICAgREVCVUcoMSwgIiVzXG4iLCByY3NpZCk7Ci0gICAgcmMgPSBwY21jaWFfcmVnaXN0ZXJfZHJpdmVyKCZyYXlfZHJpdmVyKTsKLSAgICBERUJVRygxLCAicmF5bGluayBpbml0X21vZHVsZSByZWdpc3Rlcl9wY21jaWFfZHJpdmVyIHJldHVybnMgMHgleFxuIixyYyk7CisJaW50IHJjOworCisJREVCVUcoMSwgIiVzXG4iLCByY3NpZCk7CisJcmMgPSBwY21jaWFfcmVnaXN0ZXJfZHJpdmVyKCZyYXlfZHJpdmVyKTsKKwlERUJVRygxLCAicmF5bGluayBpbml0X21vZHVsZSByZWdpc3Rlcl9wY21jaWFfZHJpdmVyIHJldHVybnMgMHgleFxuIiwKKwkgICAgICByYyk7CiAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwotICAgIHByb2NfbWtkaXIoImRyaXZlci9yYXlfY3MiLCBOVUxMKTsKKwlwcm9jX21rZGlyKCJkcml2ZXIvcmF5X2NzIiwgTlVMTCk7CiAKLSAgICBwcm9jX2NyZWF0ZSgiZHJpdmVyL3JheV9jcy9yYXlfY3MiLCAwLCBOVUxMLCAmcmF5X2NzX3Byb2NfZm9wcyk7Ci0gICAgcmF5Y3Nfd3JpdGUoImRyaXZlci9yYXlfY3MvZXNzaWQiLCB3cml0ZV9lc3NpZCwgTlVMTCk7Ci0gICAgcmF5Y3Nfd3JpdGUoImRyaXZlci9yYXlfY3MvbmV0X3R5cGUiLCB3cml0ZV9pbnQsICZuZXRfdHlwZSk7Ci0gICAgcmF5Y3Nfd3JpdGUoImRyaXZlci9yYXlfY3MvdHJhbnNsYXRlIiwgd3JpdGVfaW50LCAmdHJhbnNsYXRlKTsKKwlwcm9jX2NyZWF0ZSgiZHJpdmVyL3JheV9jcy9yYXlfY3MiLCAwLCBOVUxMLCAmcmF5X2NzX3Byb2NfZm9wcyk7CisJcmF5Y3Nfd3JpdGUoImRyaXZlci9yYXlfY3MvZXNzaWQiLCB3cml0ZV9lc3NpZCwgTlVMTCk7CisJcmF5Y3Nfd3JpdGUoImRyaXZlci9yYXlfY3MvbmV0X3R5cGUiLCB3cml0ZV9pbnQsICZuZXRfdHlwZSk7CisJcmF5Y3Nfd3JpdGUoImRyaXZlci9yYXlfY3MvdHJhbnNsYXRlIiwgd3JpdGVfaW50LCAmdHJhbnNsYXRlKTsKICNlbmRpZgotICAgIGlmICh0cmFuc2xhdGUgIT0gMCkgdHJhbnNsYXRlID0gMTsKLSAgICByZXR1cm4gMDsKKwlpZiAodHJhbnNsYXRlICE9IDApCisJCXRyYW5zbGF0ZSA9IDE7CisJcmV0dXJuIDA7CiB9IC8qIGluaXRfcmF5X2NzICovCiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAogc3RhdGljIHZvaWQgX19leGl0IGV4aXRfcmF5X2NzKHZvaWQpCiB7Ci0gICAgREVCVUcoMCwgInJheV9jczogY2xlYW51cF9tb2R1bGVcbiIpOworCURFQlVHKDAsICJyYXlfY3M6IGNsZWFudXBfbW9kdWxlXG4iKTsKIAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCi0gICAgcmVtb3ZlX3Byb2NfZW50cnkoImRyaXZlci9yYXlfY3MvcmF5X2NzIiwgTlVMTCk7Ci0gICAgcmVtb3ZlX3Byb2NfZW50cnkoImRyaXZlci9yYXlfY3MvZXNzaWQiLCBOVUxMKTsKLSAgICByZW1vdmVfcHJvY19lbnRyeSgiZHJpdmVyL3JheV9jcy9uZXRfdHlwZSIsIE5VTEwpOwotICAgIHJlbW92ZV9wcm9jX2VudHJ5KCJkcml2ZXIvcmF5X2NzL3RyYW5zbGF0ZSIsIE5VTEwpOwotICAgIHJlbW92ZV9wcm9jX2VudHJ5KCJkcml2ZXIvcmF5X2NzIiwgTlVMTCk7CisJcmVtb3ZlX3Byb2NfZW50cnkoImRyaXZlci9yYXlfY3MvcmF5X2NzIiwgTlVMTCk7CisJcmVtb3ZlX3Byb2NfZW50cnkoImRyaXZlci9yYXlfY3MvZXNzaWQiLCBOVUxMKTsKKwlyZW1vdmVfcHJvY19lbnRyeSgiZHJpdmVyL3JheV9jcy9uZXRfdHlwZSIsIE5VTEwpOworCXJlbW92ZV9wcm9jX2VudHJ5KCJkcml2ZXIvcmF5X2NzL3RyYW5zbGF0ZSIsIE5VTEwpOworCXJlbW92ZV9wcm9jX2VudHJ5KCJkcml2ZXIvcmF5X2NzIiwgTlVMTCk7CiAjZW5kaWYKIAotICAgIHBjbWNpYV91bnJlZ2lzdGVyX2RyaXZlcigmcmF5X2RyaXZlcik7CisJcGNtY2lhX3VucmVnaXN0ZXJfZHJpdmVyKCZyYXlfZHJpdmVyKTsKIH0gLyogZXhpdF9yYXlfY3MgKi8KIAogbW9kdWxlX2luaXQoaW5pdF9yYXlfY3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvcm5kaXNfd2xhbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvcm5kaXNfd2xhbi5jCmluZGV4IGVkOTNhYzQuLmRiOTFkYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JuZGlzX3dsYW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ybmRpc193bGFuLmMKQEAgLTkwLDQ0ICs5MCw0NCBAQAogCiAKIC8qIHZhcmlvdXMgUk5ESVMgT0lEIGRlZnMgKi8KLSNkZWZpbmUgT0lEX0dFTl9MSU5LX1NQRUVECQkJY2NwdTIoMHgwMDAxMDEwNykKLSNkZWZpbmUgT0lEX0dFTl9STkRJU19DT05GSUdfUEFSQU1FVEVSCQljY3B1MigweDAwMDEwMjFiKQorI2RlZmluZSBPSURfR0VOX0xJTktfU1BFRUQJCQljcHVfdG9fbGUzMigweDAwMDEwMTA3KQorI2RlZmluZSBPSURfR0VOX1JORElTX0NPTkZJR19QQVJBTUVURVIJCWNwdV90b19sZTMyKDB4MDAwMTAyMWIpCiAKLSNkZWZpbmUgT0lEX0dFTl9YTUlUX09LCQkJCWNjcHUyKDB4MDAwMjAxMDEpCi0jZGVmaW5lIE9JRF9HRU5fUkNWX09LCQkJCWNjcHUyKDB4MDAwMjAxMDIpCi0jZGVmaW5lIE9JRF9HRU5fWE1JVF9FUlJPUgkJCWNjcHUyKDB4MDAwMjAxMDMpCi0jZGVmaW5lIE9JRF9HRU5fUkNWX0VSUk9SCQkJY2NwdTIoMHgwMDAyMDEwNCkKLSNkZWZpbmUgT0lEX0dFTl9SQ1ZfTk9fQlVGRkVSCQkJY2NwdTIoMHgwMDAyMDEwNSkKKyNkZWZpbmUgT0lEX0dFTl9YTUlUX09LCQkJCWNwdV90b19sZTMyKDB4MDAwMjAxMDEpCisjZGVmaW5lIE9JRF9HRU5fUkNWX09LCQkJCWNwdV90b19sZTMyKDB4MDAwMjAxMDIpCisjZGVmaW5lIE9JRF9HRU5fWE1JVF9FUlJPUgkJCWNwdV90b19sZTMyKDB4MDAwMjAxMDMpCisjZGVmaW5lIE9JRF9HRU5fUkNWX0VSUk9SCQkJY3B1X3RvX2xlMzIoMHgwMDAyMDEwNCkKKyNkZWZpbmUgT0lEX0dFTl9SQ1ZfTk9fQlVGRkVSCQkJY3B1X3RvX2xlMzIoMHgwMDAyMDEwNSkKIAotI2RlZmluZSBPSURfODAyXzNfUEVSTUFORU5UX0FERFJFU1MJCWNjcHUyKDB4MDEwMTAxMDEpCi0jZGVmaW5lIE9JRF84MDJfM19DVVJSRU5UX0FERFJFU1MJCWNjcHUyKDB4MDEwMTAxMDIpCi0jZGVmaW5lIE9JRF84MDJfM19NVUxUSUNBU1RfTElTVAkJY2NwdTIoMHgwMTAxMDEwMykKLSNkZWZpbmUgT0lEXzgwMl8zX01BWElNVU1fTElTVF9TSVpFCQljY3B1MigweDAxMDEwMTA0KQorI2RlZmluZSBPSURfODAyXzNfUEVSTUFORU5UX0FERFJFU1MJCWNwdV90b19sZTMyKDB4MDEwMTAxMDEpCisjZGVmaW5lIE9JRF84MDJfM19DVVJSRU5UX0FERFJFU1MJCWNwdV90b19sZTMyKDB4MDEwMTAxMDIpCisjZGVmaW5lIE9JRF84MDJfM19NVUxUSUNBU1RfTElTVAkJY3B1X3RvX2xlMzIoMHgwMTAxMDEwMykKKyNkZWZpbmUgT0lEXzgwMl8zX01BWElNVU1fTElTVF9TSVpFCQljcHVfdG9fbGUzMigweDAxMDEwMTA0KQogCi0jZGVmaW5lIE9JRF84MDJfMTFfQlNTSUQJCQljY3B1MigweDBkMDEwMTAxKQotI2RlZmluZSBPSURfODAyXzExX1NTSUQJCQkJY2NwdTIoMHgwZDAxMDEwMikKLSNkZWZpbmUgT0lEXzgwMl8xMV9JTkZSQVNUUlVDVFVSRV9NT0RFCQljY3B1MigweDBkMDEwMTA4KQotI2RlZmluZSBPSURfODAyXzExX0FERF9XRVAJCQljY3B1MigweDBkMDEwMTEzKQotI2RlZmluZSBPSURfODAyXzExX1JFTU9WRV9XRVAJCQljY3B1MigweDBkMDEwMTE0KQotI2RlZmluZSBPSURfODAyXzExX0RJU0FTU09DSUFURQkJCWNjcHUyKDB4MGQwMTAxMTUpCi0jZGVmaW5lIE9JRF84MDJfMTFfQVVUSEVOVElDQVRJT05fTU9ERQkJY2NwdTIoMHgwZDAxMDExOCkKLSNkZWZpbmUgT0lEXzgwMl8xMV9QUklWQUNZX0ZJTFRFUgkJY2NwdTIoMHgwZDAxMDExOSkKLSNkZWZpbmUgT0lEXzgwMl8xMV9CU1NJRF9MSVNUX1NDQU4JCWNjcHUyKDB4MGQwMTAxMWEpCi0jZGVmaW5lIE9JRF84MDJfMTFfRU5DUllQVElPTl9TVEFUVVMJCWNjcHUyKDB4MGQwMTAxMWIpCi0jZGVmaW5lIE9JRF84MDJfMTFfQUREX0tFWQkJCWNjcHUyKDB4MGQwMTAxMWQpCi0jZGVmaW5lIE9JRF84MDJfMTFfUkVNT1ZFX0tFWQkJCWNjcHUyKDB4MGQwMTAxMWUpCi0jZGVmaW5lIE9JRF84MDJfMTFfQVNTT0NJQVRJT05fSU5GT1JNQVRJT04JY2NwdTIoMHgwZDAxMDExZikKLSNkZWZpbmUgT0lEXzgwMl8xMV9QTUtJRAkJCWNjcHUyKDB4MGQwMTAxMjMpCi0jZGVmaW5lIE9JRF84MDJfMTFfTkVUV09SS19UWVBFU19TVVBQT1JURUQJY2NwdTIoMHgwZDAxMDIwMykKLSNkZWZpbmUgT0lEXzgwMl8xMV9ORVRXT1JLX1RZUEVfSU5fVVNFCQljY3B1MigweDBkMDEwMjA0KQotI2RlZmluZSBPSURfODAyXzExX1RYX1BPV0VSX0xFVkVMCQljY3B1MigweDBkMDEwMjA1KQotI2RlZmluZSBPSURfODAyXzExX1JTU0kJCQkJY2NwdTIoMHgwZDAxMDIwNikKLSNkZWZpbmUgT0lEXzgwMl8xMV9SU1NJX1RSSUdHRVIJCQljY3B1MigweDBkMDEwMjA3KQotI2RlZmluZSBPSURfODAyXzExX0ZSQUdNRU5UQVRJT05fVEhSRVNIT0xECWNjcHUyKDB4MGQwMTAyMDkpCi0jZGVmaW5lIE9JRF84MDJfMTFfUlRTX1RIUkVTSE9MRAkJY2NwdTIoMHgwZDAxMDIwYSkKLSNkZWZpbmUgT0lEXzgwMl8xMV9TVVBQT1JURURfUkFURVMJCWNjcHUyKDB4MGQwMTAyMGUpCi0jZGVmaW5lIE9JRF84MDJfMTFfQ09ORklHVVJBVElPTgkJY2NwdTIoMHgwZDAxMDIxMSkKLSNkZWZpbmUgT0lEXzgwMl8xMV9CU1NJRF9MSVNUCQkJY2NwdTIoMHgwZDAxMDIxNykKKyNkZWZpbmUgT0lEXzgwMl8xMV9CU1NJRAkJCWNwdV90b19sZTMyKDB4MGQwMTAxMDEpCisjZGVmaW5lIE9JRF84MDJfMTFfU1NJRAkJCQljcHVfdG9fbGUzMigweDBkMDEwMTAyKQorI2RlZmluZSBPSURfODAyXzExX0lORlJBU1RSVUNUVVJFX01PREUJCWNwdV90b19sZTMyKDB4MGQwMTAxMDgpCisjZGVmaW5lIE9JRF84MDJfMTFfQUREX1dFUAkJCWNwdV90b19sZTMyKDB4MGQwMTAxMTMpCisjZGVmaW5lIE9JRF84MDJfMTFfUkVNT1ZFX1dFUAkJCWNwdV90b19sZTMyKDB4MGQwMTAxMTQpCisjZGVmaW5lIE9JRF84MDJfMTFfRElTQVNTT0NJQVRFCQkJY3B1X3RvX2xlMzIoMHgwZDAxMDExNSkKKyNkZWZpbmUgT0lEXzgwMl8xMV9BVVRIRU5USUNBVElPTl9NT0RFCQljcHVfdG9fbGUzMigweDBkMDEwMTE4KQorI2RlZmluZSBPSURfODAyXzExX1BSSVZBQ1lfRklMVEVSCQljcHVfdG9fbGUzMigweDBkMDEwMTE5KQorI2RlZmluZSBPSURfODAyXzExX0JTU0lEX0xJU1RfU0NBTgkJY3B1X3RvX2xlMzIoMHgwZDAxMDExYSkKKyNkZWZpbmUgT0lEXzgwMl8xMV9FTkNSWVBUSU9OX1NUQVRVUwkJY3B1X3RvX2xlMzIoMHgwZDAxMDExYikKKyNkZWZpbmUgT0lEXzgwMl8xMV9BRERfS0VZCQkJY3B1X3RvX2xlMzIoMHgwZDAxMDExZCkKKyNkZWZpbmUgT0lEXzgwMl8xMV9SRU1PVkVfS0VZCQkJY3B1X3RvX2xlMzIoMHgwZDAxMDExZSkKKyNkZWZpbmUgT0lEXzgwMl8xMV9BU1NPQ0lBVElPTl9JTkZPUk1BVElPTgljcHVfdG9fbGUzMigweDBkMDEwMTFmKQorI2RlZmluZSBPSURfODAyXzExX1BNS0lECQkJY3B1X3RvX2xlMzIoMHgwZDAxMDEyMykKKyNkZWZpbmUgT0lEXzgwMl8xMV9ORVRXT1JLX1RZUEVTX1NVUFBPUlRFRAljcHVfdG9fbGUzMigweDBkMDEwMjAzKQorI2RlZmluZSBPSURfODAyXzExX05FVFdPUktfVFlQRV9JTl9VU0UJCWNwdV90b19sZTMyKDB4MGQwMTAyMDQpCisjZGVmaW5lIE9JRF84MDJfMTFfVFhfUE9XRVJfTEVWRUwJCWNwdV90b19sZTMyKDB4MGQwMTAyMDUpCisjZGVmaW5lIE9JRF84MDJfMTFfUlNTSQkJCQljcHVfdG9fbGUzMigweDBkMDEwMjA2KQorI2RlZmluZSBPSURfODAyXzExX1JTU0lfVFJJR0dFUgkJCWNwdV90b19sZTMyKDB4MGQwMTAyMDcpCisjZGVmaW5lIE9JRF84MDJfMTFfRlJBR01FTlRBVElPTl9USFJFU0hPTEQJY3B1X3RvX2xlMzIoMHgwZDAxMDIwOSkKKyNkZWZpbmUgT0lEXzgwMl8xMV9SVFNfVEhSRVNIT0xECQljcHVfdG9fbGUzMigweDBkMDEwMjBhKQorI2RlZmluZSBPSURfODAyXzExX1NVUFBPUlRFRF9SQVRFUwkJY3B1X3RvX2xlMzIoMHgwZDAxMDIwZSkKKyNkZWZpbmUgT0lEXzgwMl8xMV9DT05GSUdVUkFUSU9OCQljcHVfdG9fbGUzMigweDBkMDEwMjExKQorI2RlZmluZSBPSURfODAyXzExX0JTU0lEX0xJU1QJCQljcHVfdG9fbGUzMigweDBkMDEwMjE3KQogCiAKIC8qIFR5cGljYWwgbm9pc2UvbWF4aW11bSBzaWduYWwgbGV2ZWwgdmFsdWVzIHRha2VuIGZyb20gbmRpc3dyYXBwZXIgaXdfbmRpcy5oICovCkBAIC0xNDQsOCArMTQ0LDggQEAKIAogCiAvKiBjb2RlcyBmb3IgInN0YXR1cyIgZmllbGQgb2YgY29tcGxldGlvbiBtZXNzYWdlcyAqLwotI2RlZmluZSBSTkRJU19TVEFUVVNfQURBUFRFUl9OT1RfUkVBRFkJCWNjcHUyKDB4YzAwMTAwMTEpCi0jZGVmaW5lIFJORElTX1NUQVRVU19BREFQVEVSX05PVF9PUEVOCQljY3B1MigweGMwMDEwMDEyKQorI2RlZmluZSBSTkRJU19TVEFUVVNfQURBUFRFUl9OT1RfUkVBRFkJCWNwdV90b19sZTMyKDB4YzAwMTAwMTEpCisjZGVmaW5lIFJORElTX1NUQVRVU19BREFQVEVSX05PVF9PUEVOCQljcHVfdG9fbGUzMigweGMwMDEwMDEyKQogCiAKIC8qIE5ESVMgZGF0YSBzdHJ1Y3R1cmVzLiBUYWtlbiBmcm9tIHdwYV9zdXBwbGljYW50IGRyaXZlcl9uZGlzLmMKQEAgLTM2OSw5ICszNjksNiBAQAogfTsKIAogCi1zdGF0aWMgY29uc3QgaW50IGZyZXFfY2hhbltdID0geyAyNDEyLCAyNDE3LCAyNDIyLCAyNDI3LCAyNDMyLCAyNDM3LCAyNDQyLAotCQkJCTI0NDcsIDI0NTIsIDI0NTcsIDI0NjIsIDI0NjcsIDI0NzIsIDI0ODQgfTsKLQogc3RhdGljIGNvbnN0IGludCByYXRlc184MDIxMWdbOF0gPSB7IDYsIDksIDEyLCAxOCwgMjQsIDM2LCA0OCwgNTQgfTsKIAogc3RhdGljIGNvbnN0IGludCBiY200MzIwX3Bvd2VyX291dHB1dFs0XSA9IHsgMjUsIDUwLCA3NSwgMTAwIH07CkBAIC00NDUsNyArNDQyLDcgQEAKIAogCW1lbXNldCh1LmdldCwgMCwgc2l6ZW9mICp1LmdldCk7CiAJdS5nZXQtPm1zZ190eXBlID0gUk5ESVNfTVNHX1FVRVJZOwotCXUuZ2V0LT5tc2dfbGVuID0gY2NwdTIoc2l6ZW9mICp1LmdldCk7CisJdS5nZXQtPm1zZ19sZW4gPSBjcHVfdG9fbGUzMihzaXplb2YgKnUuZ2V0KTsKIAl1LmdldC0+b2lkID0gb2lkOwogCiAJcmV0ID0gcm5kaXNfY29tbWFuZChkZXYsIHUuaGVhZGVyLCBidWZsZW4pOwpAQCAtNDk0LDggKzQ5MSw4IEBACiAJdS5zZXQtPm1zZ19sZW4gPSBjcHVfdG9fbGUzMihzaXplb2YoKnUuc2V0KSArIGxlbik7CiAJdS5zZXQtPm9pZCA9IG9pZDsKIAl1LnNldC0+bGVuID0gY3B1X3RvX2xlMzIobGVuKTsKLQl1LnNldC0+b2Zmc2V0ID0gY2NwdTIoc2l6ZW9mKCp1LnNldCkgLSA4KTsKLQl1LnNldC0+aGFuZGxlID0gY2NwdTIoMCk7CisJdS5zZXQtPm9mZnNldCA9IGNwdV90b19sZTMyKHNpemVvZigqdS5zZXQpIC0gOCk7CisJdS5zZXQtPmhhbmRsZSA9IGNwdV90b19sZTMyKDApOwogCW1lbWNweSh1LmJ1ZiArIHNpemVvZigqdS5zZXQpLCBkYXRhLCBsZW4pOwogCiAJcmV0ID0gcm5kaXNfY29tbWFuZChkZXYsIHUuaGVhZGVyLCBidWZsZW4pOwpAQCAtNjQwLDggKzYzNyw4IEBACiBzdGF0aWMgaW50IGZyZXFfdG9fZHNjb25maWcoc3RydWN0IGl3X2ZyZXEgKmZyZXEsIHVuc2lnbmVkIGludCAqZHNjb25maWcpCiB7CiAJaWYgKGZyZXEtPm0gPCAxMDAwICYmIGZyZXEtPmUgPT0gMCkgewotCQlpZiAoZnJlcS0+bSA+PSAxICYmIGZyZXEtPm0gPD0gQVJSQVlfU0laRShmcmVxX2NoYW4pKQotCQkJKmRzY29uZmlnID0gZnJlcV9jaGFuW2ZyZXEtPm0gLSAxXSAqIDEwMDA7CisJCWlmIChmcmVxLT5tID49IDEgJiYgZnJlcS0+bSA8PSAxNCkKKwkJCSpkc2NvbmZpZyA9IGllZWU4MDIxMV9kc3NzX2NoYW5fdG9fZnJlcShmcmVxLT5tKSAqIDEwMDA7CiAJCWVsc2UKIAkJCXJldHVybiAtMTsKIAl9IGVsc2UgewpAQCAtMTE3OCwxMSArMTE3NSwxMSBAQAogCQlyYW5nZS0+dGhyb3VnaHB1dCA9IDExICogMTAwMCAqIDEwMDAgLyAyOwogCX0KIAotCXJhbmdlLT5udW1fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKGZyZXFfY2hhbik7CisJcmFuZ2UtPm51bV9jaGFubmVscyA9IDE0OwogCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZnJlcV9jaGFuKSAmJiBpIDwgSVdfTUFYX0ZSRVFVRU5DSUVTOyBpKyspIHsKKwlmb3IgKGkgPSAwOyAoaSA8IDE0KSAmJiAoaSA8IElXX01BWF9GUkVRVUVOQ0lFUyk7IGkrKykgewogCQlyYW5nZS0+ZnJlcVtpXS5pID0gaSArIDE7Ci0JCXJhbmdlLT5mcmVxW2ldLm0gPSBmcmVxX2NoYW5baV0gKiAxMDAwMDA7CisJCXJhbmdlLT5mcmVxW2ldLm0gPSBpZWVlODAyMTFfZHNzc19jaGFuX3RvX2ZyZXEoaSArIDEpICogMTAwMDAwOwogCQlyYW5nZS0+ZnJlcVtpXS5lID0gMTsKIAl9CiAJcmFuZ2UtPm51bV9mcmVxdWVuY3kgPSBpOwpAQCAtMTYzMyw3ICsxNjMwLDcgQEAKIAlkZXZkYmcodXNiZGV2LCAiU0lPQ1NJV1NDQU4iKTsKIAogCWlmICh3cnF1LT5kYXRhLmZsYWdzID09IDApIHsKLQkJdG1wID0gY2NwdTIoMSk7CisJCXRtcCA9IGNwdV90b19sZTMyKDEpOwogCQlyZXQgPSBybmRpc19zZXRfb2lkKHVzYmRldiwgT0lEXzgwMl8xMV9CU1NJRF9MSVNUX1NDQU4sICZ0bXAsCiAJCQkJCQkJCXNpemVvZih0bXApKTsKIAkJZXZ0LmRhdGEuZmxhZ3MgPSAwOwpAQCAtMjQzMSw3ICsyNDI4LDcgQEAKIAkJLyogU2VuZCBzY2FuIE9JRC4gVXNlIG9mIGJvdGggT0lEcyBpcyByZXF1aXJlZCB0byBnZXQgZGV2aWNlCiAJCSAqIHdvcmtpbmcuCiAJCSAqLwotCQl0bXAgPSBjY3B1MigxKTsKKwkJdG1wID0gY3B1X3RvX2xlMzIoMSk7CiAJCXJuZGlzX3NldF9vaWQodXNiZGV2LCBPSURfODAyXzExX0JTU0lEX0xJU1RfU0NBTiwgJnRtcCwKIAkJCQkJCQkJc2l6ZW9mKHRtcCkpOwogCkBAIC0yNTI3LDYgKzI1MjQsMTcgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyogc2FtZSBhcyBybmRpc19uZXRkZXZfb3BzIGJ1dCB3aXRoIGxvY2FsIG11bHRpY2FzdCBoYW5kbGVyICovCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHJuZGlzX3dleHRfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gdXNibmV0X29wZW4sCisJLm5kb19zdG9wCQk9IHVzYm5ldF9zdG9wLAorCS5uZG9fc3RhcnRfeG1pdAkJPSB1c2JuZXRfc3RhcnRfeG1pdCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gdXNibmV0X3R4X3RpbWVvdXQsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gcm5kaXNfd2V4dF9zZXRfbXVsdGljYXN0X2xpc3QsCit9OworCiAKIHN0YXRpYyBpbnQgcm5kaXNfd2V4dF9iaW5kKHN0cnVjdCB1c2JuZXQgKnVzYmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCiB7CkBAIC0yNTYyLDcgKzI1NzAsOCBAQAogCSAqIHJuZGlzX2hvc3Qgd2FudHMgdG8gYXZvaWQgYWxsIE9JRCBhcyBtdWNoIGFzIHBvc3NpYmxlCiAJICogc28gZG8gcHJvbWlzYy9tdWx0aWNhc3QgaGFuZGxpbmcgaW4gcm5kaXNfd2V4dC4KIAkgKi8KLQl1c2JkZXYtPm5ldC0+c2V0X211bHRpY2FzdF9saXN0ID0gcm5kaXNfd2V4dF9zZXRfbXVsdGljYXN0X2xpc3Q7CisJdXNiZGV2LT5uZXQtPm5ldGRldl9vcHMgPSAmcm5kaXNfd2V4dF9uZXRkZXZfb3BzOworCiAJdG1wID0gUk5ESVNfUEFDS0VUX1RZUEVfRElSRUNURUQgfCBSTkRJU19QQUNLRVRfVFlQRV9CUk9BRENBU1Q7CiAJcmV0dmFsID0gcm5kaXNfc2V0X29pZCh1c2JkZXYsIE9JRF9HRU5fQ1VSUkVOVF9QQUNLRVRfRklMVEVSLCAmdG1wLAogCQkJCQkJCQlzaXplb2YodG1wKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9LY29uZmlnCmluZGV4IDE3OGIzMTMuLmJmYzVkOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9LY29uZmlnCkBAIC05NywxMCArOTcsMTEgQEAKIAogY29uZmlnIFJUMlgwMF9MSUJfUkZLSUxMCiAJYm9vbGVhbgotCWRlZmF1bHQgeSBpZiAoUlQyWDAwX0xJQj15ICYmIFJGS0lMTD15KSB8fCAoUlQyWDAwX0xJQj1tICYmIFJGS0lMTCE9bikKKwlkZWZhdWx0IHkgaWYgKFJUMlgwMF9MSUI9eSAmJiBJTlBVVD15KSB8fCAoUlQyWDAwX0xJQj1tICYmIElOUFVUIT1uKQorCXNlbGVjdCBJTlBVVF9QT0xMREVWCiAKLWNvbW1lbnQgInJ0MngwMCByZmtpbGwgc3VwcG9ydCBkaXNhYmxlZCBkdWUgdG8gbW9kdWxhcml6ZWQgUkZLSUxMIGFuZCBidWlsdC1pbiBydDJ4MDAiCi0JZGVwZW5kcyBvbiBSVDJYMDBfTElCPXkgJiYgUkZLSUxMPW0KK2NvbW1lbnQgInJ0MngwMCByZmtpbGwgc3VwcG9ydCBkaXNhYmxlZCBkdWUgdG8gbW9kdWxhcml6ZWQgSU5QVVQgYW5kIGJ1aWx0LWluIHJ0MngwMCIKKwlkZXBlbmRzIG9uIFJUMlgwMF9MSUI9eSAmJiBJTlBVVD1tCiAKIGNvbmZpZyBSVDJYMDBfTElCX0xFRFMKIAlib29sZWFuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvTWFrZWZpbGUKaW5kZXggOTE3Y2I0Zi4uZjIyZDgwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9NYWtlZmlsZQpAQCAtMiw2ICsyLDcgQEAKIHJ0MngwMGxpYi15CQkJCSs9IHJ0MngwMG1hYy5vCiBydDJ4MDBsaWIteQkJCQkrPSBydDJ4MDBjb25maWcubwogcnQyeDAwbGliLXkJCQkJKz0gcnQyeDAwcXVldWUubworcnQyeDAwbGliLXkJCQkJKz0gcnQyeDAwbGluay5vCiBydDJ4MDBsaWItJChDT05GSUdfUlQyWDAwX0xJQl9ERUJVR0ZTKQkrPSBydDJ4MDBkZWJ1Zy5vCiBydDJ4MDBsaWItJChDT05GSUdfUlQyWDAwX0xJQl9DUllQVE8pCSs9IHJ0MngwMGNyeXB0by5vCiBydDJ4MDBsaWItJChDT05GSUdfUlQyWDAwX0xJQl9SRktJTEwpCSs9IHJ0MngwMHJma2lsbC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNDAwcGNpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNDAwcGNpLmMKaW5kZXggNmE5Nzc2Ny4uMGYwODc3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjQwMHBjaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI0MDBwY2kuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0JQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOCBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAorCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDkgcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKIAk8aHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tPgogCiAJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTExNCw5ICsxMTQsNiBAQAogewogCXUzMiByZWc7CiAKLQlpZiAoIXdvcmQpCi0JCXJldHVybjsKLQogCW11dGV4X2xvY2soJnJ0MngwMGRldi0+Y3NyX211dGV4KTsKIAogCS8qCkBAIC01MjQsNiArNTIxLDMyIEBACiAJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgQ1NSMTIsIHJlZyk7CiB9CiAKK3N0YXRpYyB2b2lkIHJ0MjQwMHBjaV9jb25maWdfcHMoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCQlzdHJ1Y3QgcnQyeDAwbGliX2NvbmYgKmxpYmNvbmYpCit7CisJZW51bSBkZXZfc3RhdGUgc3RhdGUgPQorCSAgICAobGliY29uZi0+Y29uZi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9QUykgPworCQlTVEFURV9TTEVFUCA6IFNUQVRFX0FXQUtFOworCXUzMiByZWc7CisKKwlpZiAoc3RhdGUgPT0gU1RBVEVfU0xFRVApIHsKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBDU1IyMCwgJnJlZyk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBDU1IyMF9ERUxBWV9BRlRFUl9UQkNOLAorCQkJCSAgIChsaWJjb25mLT5jb25mLT5iZWFjb25faW50IC0gMjApICogMTYpOworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQ1NSMjBfVEJDTl9CRUZPUkVfV0FLRVVQLAorCQkJCSAgIGxpYmNvbmYtPmNvbmYtPmxpc3Rlbl9pbnRlcnZhbCAtIDEpOworCisJCS8qIFdlIG11c3QgZmlyc3QgZGlzYWJsZSBhdXRvd2FrZSBiZWZvcmUgaXQgY2FuIGJlIGVuYWJsZWQgKi8KKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIENTUjIwX0FVVE9XQUtFLCAwKTsKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgQ1NSMjAsIHJlZyk7CisKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIENTUjIwX0FVVE9XQUtFLCAxKTsKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgQ1NSMjAsIHJlZyk7CisJfQorCisJcnQyeDAwZGV2LT5vcHMtPmxpYi0+c2V0X2RldmljZV9zdGF0ZShydDJ4MDBkZXYsIHN0YXRlKTsKK30KKwogc3RhdGljIHZvaWQgcnQyNDAwcGNpX2NvbmZpZyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAogCQkJICAgICBzdHJ1Y3QgcnQyeDAwbGliX2NvbmYgKmxpYmNvbmYsCiAJCQkgICAgIGNvbnN0IHVuc2lnbmVkIGludCBmbGFncykKQEAgLTUzNyw2ICs1NjAsOCBAQAogCQlydDI0MDBwY2lfY29uZmlnX3JldHJ5X2xpbWl0KHJ0MngwMGRldiwgbGliY29uZik7CiAJaWYgKGZsYWdzICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0JFQUNPTl9JTlRFUlZBTCkKIAkJcnQyNDAwcGNpX2NvbmZpZ19kdXJhdGlvbihydDJ4MDBkZXYsIGxpYmNvbmYpOworCWlmIChmbGFncyAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9QUykKKwkJcnQyNDAwcGNpX2NvbmZpZ19wcyhydDJ4MDBkZXYsIGxpYmNvbmYpOwogfQogCiBzdGF0aWMgdm9pZCBydDI0MDBwY2lfY29uZmlnX2N3KHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCkBAIC01NzIsMzUgKzU5NywzNyBAQAogCXF1YWwtPmZhbHNlX2NjYSA9IGJicDsKIH0KIAotc3RhdGljIHZvaWQgcnQyNDAwcGNpX3Jlc2V0X3R1bmVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCitzdGF0aWMgaW5saW5lIHZvaWQgcnQyNDAwcGNpX3NldF92Z2Moc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCQkgICAgIHN0cnVjdCBsaW5rX3F1YWwgKnF1YWwsIHU4IHZnY19sZXZlbCkKIHsKLQlydDI0MDBwY2lfYmJwX3dyaXRlKHJ0MngwMGRldiwgMTMsIDB4MDgpOwotCXJ0MngwMGRldi0+bGluay52Z2NfbGV2ZWwgPSAweDA4OworCXJ0MjQwMHBjaV9iYnBfd3JpdGUocnQyeDAwZGV2LCAxMywgdmdjX2xldmVsKTsKKwlxdWFsLT52Z2NfbGV2ZWwgPSB2Z2NfbGV2ZWw7CisJcXVhbC0+dmdjX2xldmVsX3JlZyA9IHZnY19sZXZlbDsKIH0KIAotc3RhdGljIHZvaWQgcnQyNDAwcGNpX2xpbmtfdHVuZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKK3N0YXRpYyB2b2lkIHJ0MjQwMHBjaV9yZXNldF90dW5lcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJCSAgc3RydWN0IGxpbmtfcXVhbCAqcXVhbCkKIHsKLQl1OCByZWc7CisJcnQyNDAwcGNpX3NldF92Z2MocnQyeDAwZGV2LCBxdWFsLCAweDA4KTsKK30KIAorc3RhdGljIHZvaWQgcnQyNDAwcGNpX2xpbmtfdHVuZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCQkgc3RydWN0IGxpbmtfcXVhbCAqcXVhbCwgY29uc3QgdTMyIGNvdW50KQorewogCS8qCiAJICogVGhlIGxpbmsgdHVuZXIgc2hvdWxkIG5vdCBydW4gbG9uZ2VyIHRoZW4gNjAgc2Vjb25kcywKIAkgKiBhbmQgc2hvdWxkIHJ1biBvbmNlIGV2ZXJ5IDIgc2Vjb25kcy4KIAkgKi8KLQlpZiAocnQyeDAwZGV2LT5saW5rLmNvdW50ID4gNjAgfHwgIShydDJ4MDBkZXYtPmxpbmsuY291bnQgJiAxKSkKKwlpZiAoY291bnQgPiA2MCB8fCAhKGNvdW50ICYgMSkpCiAJCXJldHVybjsKIAogCS8qCiAJICogQmFzZSByMTMgbGluayB0dW5pbmcgb24gdGhlIGZhbHNlIGNjYSBjb3VudC4KIAkgKi8KLQlydDI0MDBwY2lfYmJwX3JlYWQocnQyeDAwZGV2LCAxMywgJnJlZyk7Ci0KLQlpZiAocnQyeDAwZGV2LT5saW5rLnF1YWwuZmFsc2VfY2NhID4gNTEyICYmIHJlZyA8IDB4MjApIHsKLQkJcnQyNDAwcGNpX2JicF93cml0ZShydDJ4MDBkZXYsIDEzLCArK3JlZyk7Ci0JCXJ0MngwMGRldi0+bGluay52Z2NfbGV2ZWwgPSByZWc7Ci0JfSBlbHNlIGlmIChydDJ4MDBkZXYtPmxpbmsucXVhbC5mYWxzZV9jY2EgPCAxMDAgJiYgcmVnID4gMHgwOCkgewotCQlydDI0MDBwY2lfYmJwX3dyaXRlKHJ0MngwMGRldiwgMTMsIC0tcmVnKTsKLQkJcnQyeDAwZGV2LT5saW5rLnZnY19sZXZlbCA9IHJlZzsKLQl9CisJaWYgKChxdWFsLT5mYWxzZV9jY2EgPiA1MTIpICYmIChxdWFsLT52Z2NfbGV2ZWwgPCAweDIwKSkKKwkJcnQyNDAwcGNpX3NldF92Z2MocnQyeDAwZGV2LCBxdWFsLCArK3F1YWwtPnZnY19sZXZlbCk7CisJZWxzZSBpZiAoKHF1YWwtPmZhbHNlX2NjYSA8IDEwMCkgJiYgKHF1YWwtPnZnY19sZXZlbCA+IDB4MDgpKQorCQlydDI0MDBwY2lfc2V0X3ZnYyhydDJ4MDBkZXYsIHF1YWwsIC0tcXVhbC0+dmdjX2xldmVsKTsKIH0KIAogLyoKQEAgLTkwNCwyMSArOTMxLDEwIEBACiAKIHN0YXRpYyB2b2lkIHJ0MjQwMHBjaV9kaXNhYmxlX3JhZGlvKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCiB7Ci0JdTMyIHJlZzsKLQorCS8qCisJICogRGlzYWJsZSBwb3dlcgorCSAqLwogCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFBXUkNTUjAsIDApOwotCi0JLyoKLQkgKiBEaXNhYmxlIHN5bmNocm9uaXNhdGlvbi4KLQkgKi8KLQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBDU1IxNCwgMCk7Ci0KLQkvKgotCSAqIENhbmNlbCBSWCBhbmQgVFguCi0JICovCi0JcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBUWENTUjAsICZyZWcpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWENTUjBfQUJPUlQsIDEpOwotCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYQ1NSMCwgcmVnKTsKIH0KIAogc3RhdGljIGludCBydDI0MDBwY2lfc2V0X3N0YXRlKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCkBAIC0xMTE1LDYgKzExMzEsMjAgQEAKIAlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWENTUjAsIHJlZyk7CiB9CiAKK3N0YXRpYyB2b2lkIHJ0MjQwMHBjaV9raWxsX3R4X3F1ZXVlKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkJICAgIGNvbnN0IGVudW0gZGF0YV9xdWV1ZV9xaWQgcWlkKQoreworCXUzMiByZWc7CisKKwlpZiAocWlkID09IFFJRF9CRUFDT04pIHsKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgQ1NSMTQsIDApOworCX0gZWxzZSB7CisJCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgVFhDU1IwLCAmcmVnKTsKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYQ1NSMF9BQk9SVCwgMSk7CisJCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYQ1NSMCwgcmVnKTsKKwl9Cit9CisKIC8qCiAgKiBSWCBjb250cm9sIGhhbmRsZXJzCiAgKi8KQEAgLTEzNjUsNyArMTM5NSw5IEBACiAJdmFsdWUgPSBydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLCBFRVBST01fQU5URU5OQV9MRURfTU9ERSk7CiAKIAlydDI0MDBwY2lfaW5pdF9sZWQocnQyeDAwZGV2LCAmcnQyeDAwZGV2LT5sZWRfcmFkaW8sIExFRF9UWVBFX1JBRElPKTsKLQlpZiAodmFsdWUgPT0gTEVEX01PREVfVFhSWF9BQ1RJVklUWSkKKwlpZiAodmFsdWUgPT0gTEVEX01PREVfVFhSWF9BQ1RJVklUWSB8fAorCSAgICB2YWx1ZSA9PSBMRURfTU9ERV9ERUZBVUxUIHx8CisJICAgIHZhbHVlID09IExFRF9NT0RFX0FTVVMpCiAJCXJ0MjQwMHBjaV9pbml0X2xlZChydDJ4MDBkZXYsICZydDJ4MDBkZXYtPmxlZF9xdWFsLAogCQkJCSAgIExFRF9UWVBFX0FDVElWSVRZKTsKICNlbmRpZiAvKiBDT05GSUdfUlQyWDAwX0xJQl9MRURTICovCkBAIC0xNDE5LDcgKzE0NTEsOSBAQAogCSAqIEluaXRpYWxpemUgYWxsIGh3IGZpZWxkcy4KIAkgKi8KIAlydDJ4MDBkZXYtPmh3LT5mbGFncyA9IElFRUU4MDIxMV9IV19IT1NUX0JST0FEQ0FTVF9QU19CVUZGRVJJTkcgfAotCQkJICAgICAgIElFRUU4MDIxMV9IV19TSUdOQUxfREJNOworCQkJICAgICAgIElFRUU4MDIxMV9IV19TSUdOQUxfREJNIHwKKwkJCSAgICAgICBJRUVFODAyMTFfSFdfU1VQUE9SVFNfUFMgfAorCQkJICAgICAgIElFRUU4MDIxMV9IV19QU19OVUxMRlVOQ19TVEFDSzsKIAlydDJ4MDBkZXYtPmh3LT5leHRyYV90eF9oZWFkcm9vbSA9IDA7CiAKIAlTRVRfSUVFRTgwMjExX0RFVihydDJ4MDBkZXYtPmh3LCBydDJ4MDBkZXYtPmRldik7CkBAIC0xNTcyLDYgKzE2MDYsNyBAQAogCS53cml0ZV90eF9kYXRhCQk9IHJ0MngwMHBjaV93cml0ZV90eF9kYXRhLAogCS53cml0ZV9iZWFjb24JCT0gcnQyNDAwcGNpX3dyaXRlX2JlYWNvbiwKIAkua2lja190eF9xdWV1ZQkJPSBydDI0MDBwY2lfa2lja190eF9xdWV1ZSwKKwkua2lsbF90eF9xdWV1ZQkJPSBydDI0MDBwY2lfa2lsbF90eF9xdWV1ZSwKIAkuZmlsbF9yeGRvbmUJCT0gcnQyNDAwcGNpX2ZpbGxfcnhkb25lLAogCS5jb25maWdfZmlsdGVyCQk9IHJ0MjQwMHBjaV9jb25maWdfZmlsdGVyLAogCS5jb25maWdfaW50ZgkJPSBydDI0MDBwY2lfY29uZmlnX2ludGYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNDAwcGNpLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNDAwcGNpLmgKaW5kZXggOWFlZmRhNC4uZWMzYjAwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjQwMHBjaS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI0MDBwY2kuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0JQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOCBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAorCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDkgcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKIAk8aHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tPgogCiAJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTQ4LDggKzQ4LDggQEAKICNkZWZpbmUgRUVQUk9NX1NJWkUJCQkweDAxMDAKICNkZWZpbmUgQkJQX0JBU0UJCQkweDAwMDAKICNkZWZpbmUgQkJQX1NJWkUJCQkweDAwMjAKLSNkZWZpbmUgUkZfQkFTRQkJCQkweDAwMDAKLSNkZWZpbmUgUkZfU0laRQkJCQkweDAwMTAKKyNkZWZpbmUgUkZfQkFTRQkJCQkweDAwMDQKKyNkZWZpbmUgUkZfU0laRQkJCQkweDAwMGMKIAogLyoKICAqIE51bWJlciBvZiBUWCBxdWV1ZXMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNTAwcGNpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNTAwcGNpLmMKaW5kZXggZDNiYzIxOC4uMjc2YTgyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHBjaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI1MDBwY2kuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0JQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOCBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAorCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDkgcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKIAk8aHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tPgogCiAJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTExNCw5ICsxMTQsNiBAQAogewogCXUzMiByZWc7CiAKLQlpZiAoIXdvcmQpCi0JCXJldHVybjsKLQogCW11dGV4X2xvY2soJnJ0MngwMGRldi0+Y3NyX211dGV4KTsKIAogCS8qCkBAIC01NzMsNiArNTcwLDMyIEBACiAJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgQ1NSMTIsIHJlZyk7CiB9CiAKK3N0YXRpYyB2b2lkIHJ0MjUwMHBjaV9jb25maWdfcHMoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCQlzdHJ1Y3QgcnQyeDAwbGliX2NvbmYgKmxpYmNvbmYpCit7CisJZW51bSBkZXZfc3RhdGUgc3RhdGUgPQorCSAgICAobGliY29uZi0+Y29uZi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9QUykgPworCQlTVEFURV9TTEVFUCA6IFNUQVRFX0FXQUtFOworCXUzMiByZWc7CisKKwlpZiAoc3RhdGUgPT0gU1RBVEVfU0xFRVApIHsKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBDU1IyMCwgJnJlZyk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBDU1IyMF9ERUxBWV9BRlRFUl9UQkNOLAorCQkJCSAgIChsaWJjb25mLT5jb25mLT5iZWFjb25faW50IC0gMjApICogMTYpOworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQ1NSMjBfVEJDTl9CRUZPUkVfV0FLRVVQLAorCQkJCSAgIGxpYmNvbmYtPmNvbmYtPmxpc3Rlbl9pbnRlcnZhbCAtIDEpOworCisJCS8qIFdlIG11c3QgZmlyc3QgZGlzYWJsZSBhdXRvd2FrZSBiZWZvcmUgaXQgY2FuIGJlIGVuYWJsZWQgKi8KKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIENTUjIwX0FVVE9XQUtFLCAwKTsKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgQ1NSMjAsIHJlZyk7CisKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIENTUjIwX0FVVE9XQUtFLCAxKTsKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgQ1NSMjAsIHJlZyk7CisJfQorCisJcnQyeDAwZGV2LT5vcHMtPmxpYi0+c2V0X2RldmljZV9zdGF0ZShydDJ4MDBkZXYsIHN0YXRlKTsKK30KKwogc3RhdGljIHZvaWQgcnQyNTAwcGNpX2NvbmZpZyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAogCQkJICAgICBzdHJ1Y3QgcnQyeDAwbGliX2NvbmYgKmxpYmNvbmYsCiAJCQkgICAgIGNvbnN0IHVuc2lnbmVkIGludCBmbGFncykKQEAgLTU4OCw2ICs2MTEsOCBAQAogCQlydDI1MDBwY2lfY29uZmlnX3JldHJ5X2xpbWl0KHJ0MngwMGRldiwgbGliY29uZik7CiAJaWYgKGZsYWdzICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0JFQUNPTl9JTlRFUlZBTCkKIAkJcnQyNTAwcGNpX2NvbmZpZ19kdXJhdGlvbihydDJ4MDBkZXYsIGxpYmNvbmYpOworCWlmIChmbGFncyAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9QUykKKwkJcnQyNTAwcGNpX2NvbmZpZ19wcyhydDJ4MDBkZXYsIGxpYmNvbmYpOwogfQogCiAvKgpAQCAtNjExLDI5ICs2MzYsMzMgQEAKIAlxdWFsLT5mYWxzZV9jY2EgPSBydDJ4MDBfZ2V0X2ZpZWxkMzIocmVnLCBDTlQzX0ZBTFNFX0NDQSk7CiB9CiAKLXN0YXRpYyB2b2lkIHJ0MjUwMHBjaV9yZXNldF90dW5lcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQorc3RhdGljIGlubGluZSB2b2lkIHJ0MjUwMHBjaV9zZXRfdmdjKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkJICAgICBzdHJ1Y3QgbGlua19xdWFsICpxdWFsLCB1OCB2Z2NfbGV2ZWwpCiB7Ci0JcnQyNTAwcGNpX2JicF93cml0ZShydDJ4MDBkZXYsIDE3LCAweDQ4KTsKLQlydDJ4MDBkZXYtPmxpbmsudmdjX2xldmVsID0gMHg0ODsKKwlpZiAocXVhbC0+dmdjX2xldmVsX3JlZyAhPSB2Z2NfbGV2ZWwpIHsKKwkJcnQyNTAwcGNpX2JicF93cml0ZShydDJ4MDBkZXYsIDE3LCB2Z2NfbGV2ZWwpOworCQlxdWFsLT52Z2NfbGV2ZWxfcmVnID0gdmdjX2xldmVsOworCX0KIH0KIAotc3RhdGljIHZvaWQgcnQyNTAwcGNpX2xpbmtfdHVuZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKK3N0YXRpYyB2b2lkIHJ0MjUwMHBjaV9yZXNldF90dW5lcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJCSAgc3RydWN0IGxpbmtfcXVhbCAqcXVhbCkKIHsKLQlpbnQgcnNzaSA9IHJ0MngwMF9nZXRfbGlua19yc3NpKCZydDJ4MDBkZXYtPmxpbmspOwotCXU4IHIxNzsKKwlydDI1MDBwY2lfc2V0X3ZnYyhydDJ4MDBkZXYsIHF1YWwsIDB4NDgpOworfQogCitzdGF0aWMgdm9pZCBydDI1MDBwY2lfbGlua190dW5lcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJCSBzdHJ1Y3QgbGlua19xdWFsICpxdWFsLCBjb25zdCB1MzIgY291bnQpCit7CiAJLyoKIAkgKiBUbyBwcmV2ZW50IGNvbGxpc2lvbnMgd2l0aCBNQUMgQVNJQyBvbiBjaGlwc2V0cwogCSAqIHVwIHRvIHZlcnNpb24gQyB0aGUgbGluayB0dW5pbmcgc2hvdWxkIGhhbHQgYWZ0ZXIgMjAKIAkgKiBzZWNvbmRzIHdoaWxlIGJlaW5nIGFzc29jaWF0ZWQuCiAJICovCiAJaWYgKHJ0MngwMF9yZXYoJnJ0MngwMGRldi0+Y2hpcCkgPCBSVDI1NjBfVkVSU0lPTl9EICYmCi0JICAgIHJ0MngwMGRldi0+aW50Zl9hc3NvY2lhdGVkICYmCi0JICAgIHJ0MngwMGRldi0+bGluay5jb3VudCA+IDIwKQorCSAgICBydDJ4MDBkZXYtPmludGZfYXNzb2NpYXRlZCAmJiBjb3VudCA+IDIwKQogCQlyZXR1cm47CiAKLQlydDI1MDBwY2lfYmJwX3JlYWQocnQyeDAwZGV2LCAxNywgJnIxNyk7Ci0KIAkvKgogCSAqIENoaXBzZXQgdmVyc2lvbnMgQyBhbmQgbG93ZXIgc2hvdWxkIGRpcmVjdGx5IGNvbnRpbnVlCiAJICogdG8gdGhlIGR5bmFtaWMgQ0NBIHR1bmluZy4gQ2hpcHNldCB2ZXJzaW9uIEQgYW5kIGhpZ2hlcgpAQCAtNjQ5LDI5ICs2NzgsMjUgQEAKIAkgKiB0aGVuIGNvcnJ1cHQgdGhlIFIxNyB0dW5pbmcuIFRvIHJlbWlkeSB0aGlzIHRoZSB0dW5pbmcgc2hvdWxkCiAJICogYmUgc3RvcHBlZCAoV2hpbGUgbWFraW5nIHN1cmUgdGhlIFIxNyB2YWx1ZSB3aWxsIG5vdCBleGNlZWQgbGltaXRzKQogCSAqLwotCWlmIChyc3NpIDwgLTgwICYmIHJ0MngwMGRldi0+bGluay5jb3VudCA+IDIwKSB7Ci0JCWlmIChyMTcgPj0gMHg0MSkgewotCQkJcjE3ID0gcnQyeDAwZGV2LT5saW5rLnZnY19sZXZlbDsKLQkJCXJ0MjUwMHBjaV9iYnBfd3JpdGUocnQyeDAwZGV2LCAxNywgcjE3KTsKLQkJfQorCWlmIChxdWFsLT5yc3NpIDwgLTgwICYmIGNvdW50ID4gMjApIHsKKwkJaWYgKHF1YWwtPnZnY19sZXZlbF9yZWcgPj0gMHg0MSkKKwkJCXJ0MjUwMHBjaV9zZXRfdmdjKHJ0MngwMGRldiwgcXVhbCwgcXVhbC0+dmdjX2xldmVsKTsKIAkJcmV0dXJuOwogCX0KIAogCS8qCiAJICogU3BlY2lhbCBiaWctUjE3IGZvciBzaG9ydCBkaXN0YW5jZQogCSAqLwotCWlmIChyc3NpID49IC01OCkgewotCQlpZiAocjE3ICE9IDB4NTApCi0JCQlydDI1MDBwY2lfYmJwX3dyaXRlKHJ0MngwMGRldiwgMTcsIDB4NTApOworCWlmIChxdWFsLT5yc3NpID49IC01OCkgeworCQlydDI1MDBwY2lfc2V0X3ZnYyhydDJ4MDBkZXYsIHF1YWwsIDB4NTApOwogCQlyZXR1cm47CiAJfQogCiAJLyoKIAkgKiBTcGVjaWFsIG1pZC1SMTcgZm9yIG1pZGRsZSBkaXN0YW5jZQogCSAqLwotCWlmIChyc3NpID49IC03NCkgewotCQlpZiAocjE3ICE9IDB4NDEpCi0JCQlydDI1MDBwY2lfYmJwX3dyaXRlKHJ0MngwMGRldiwgMTcsIDB4NDEpOworCWlmIChxdWFsLT5yc3NpID49IC03NCkgeworCQlydDI1MDBwY2lfc2V0X3ZnYyhydDJ4MDBkZXYsIHF1YWwsIDB4NDEpOwogCQlyZXR1cm47CiAJfQogCkBAIC02NzksOCArNzA0LDggQEAKIAkgKiBMZWF2ZSBzaG9ydCBvciBtaWRkbGUgZGlzdGFuY2UgY29uZGl0aW9uLCByZXN0b3JlIHIxNwogCSAqIHRvIHRoZSBkeW5hbWljIHR1bmluZyByYW5nZS4KIAkgKi8KLQlpZiAocjE3ID49IDB4NDEpIHsKLQkJcnQyNTAwcGNpX2JicF93cml0ZShydDJ4MDBkZXYsIDE3LCBydDJ4MDBkZXYtPmxpbmsudmdjX2xldmVsKTsKKwlpZiAocXVhbC0+dmdjX2xldmVsX3JlZyA+PSAweDQxKSB7CisJCXJ0MjUwMHBjaV9zZXRfdmdjKHJ0MngwMGRldiwgcXVhbCwgcXVhbC0+dmdjX2xldmVsKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtNjkwLDEyICs3MTUsMTIgQEAKIAkgKiBSMTcgaXMgaW5zaWRlIHRoZSBkeW5hbWljIHR1bmluZyByYW5nZSwKIAkgKiBzdGFydCB0dW5pbmcgdGhlIGxpbmsgYmFzZWQgb24gdGhlIGZhbHNlIGNjYSBjb3VudGVyLgogCSAqLwotCWlmIChydDJ4MDBkZXYtPmxpbmsucXVhbC5mYWxzZV9jY2EgPiA1MTIgJiYgcjE3IDwgMHg0MCkgewotCQlydDI1MDBwY2lfYmJwX3dyaXRlKHJ0MngwMGRldiwgMTcsICsrcjE3KTsKLQkJcnQyeDAwZGV2LT5saW5rLnZnY19sZXZlbCA9IHIxNzsKLQl9IGVsc2UgaWYgKHJ0MngwMGRldi0+bGluay5xdWFsLmZhbHNlX2NjYSA8IDEwMCAmJiByMTcgPiAweDMyKSB7Ci0JCXJ0MjUwMHBjaV9iYnBfd3JpdGUocnQyeDAwZGV2LCAxNywgLS1yMTcpOwotCQlydDJ4MDBkZXYtPmxpbmsudmdjX2xldmVsID0gcjE3OworCWlmIChxdWFsLT5mYWxzZV9jY2EgPiA1MTIgJiYgcXVhbC0+dmdjX2xldmVsX3JlZyA8IDB4NDApIHsKKwkJcnQyNTAwcGNpX3NldF92Z2MocnQyeDAwZGV2LCBxdWFsLCArK3F1YWwtPnZnY19sZXZlbF9yZWcpOworCQlxdWFsLT52Z2NfbGV2ZWwgPSBxdWFsLT52Z2NfbGV2ZWxfcmVnOworCX0gZWxzZSBpZiAocXVhbC0+ZmFsc2VfY2NhIDwgMTAwICYmIHF1YWwtPnZnY19sZXZlbF9yZWcgPiAweDMyKSB7CisJCXJ0MjUwMHBjaV9zZXRfdmdjKHJ0MngwMGRldiwgcXVhbCwgLS1xdWFsLT52Z2NfbGV2ZWxfcmVnKTsKKwkJcXVhbC0+dmdjX2xldmVsID0gcXVhbC0+dmdjX2xldmVsX3JlZzsKIAl9CiB9CiAKQEAgLTEwNjUsMjEgKzEwOTAsMTAgQEAKIAogc3RhdGljIHZvaWQgcnQyNTAwcGNpX2Rpc2FibGVfcmFkaW8oc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKIHsKLQl1MzIgcmVnOwotCisJLyoKKwkgKiBEaXNhYmxlIHBvd2VyCisJICovCiAJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgUFdSQ1NSMCwgMCk7Ci0KLQkvKgotCSAqIERpc2FibGUgc3luY2hyb25pc2F0aW9uLgotCSAqLwotCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIENTUjE0LCAwKTsKLQotCS8qCi0JICogQ2FuY2VsIFJYIGFuZCBUWC4KLQkgKi8KLQlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFRYQ1NSMCwgJnJlZyk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYQ1NSMF9BQk9SVCwgMSk7Ci0JcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhDU1IwLCByZWcpOwogfQogCiBzdGF0aWMgaW50IHJ0MjUwMHBjaV9zZXRfc3RhdGUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKQEAgLTEyMDUsNyArMTIxOSw3IEBACiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzBfVElNRVNUQU1QLAogCQkJICAgdGVzdF9iaXQoRU5UUllfVFhEX1JFUV9USU1FU1RBTVAsICZ0eGRlc2MtPmZsYWdzKSk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzBfT0ZETSwKLQkJCSAgIHRlc3RfYml0KEVOVFJZX1RYRF9PRkRNX1JBVEUsICZ0eGRlc2MtPmZsYWdzKSk7CisJCQkgICAodHhkZXNjLT5yYXRlX21vZGUgPT0gUkFURV9NT0RFX09GRE0pKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMF9DSVBIRVJfT1dORVIsIDEpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cwX0lGUywgdHhkZXNjLT5pZnMpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cwX1JFVFJZX01PREUsCkBAIC0xMjc1LDYgKzEyODksMjAgQEAKIAlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWENTUjAsIHJlZyk7CiB9CiAKK3N0YXRpYyB2b2lkIHJ0MjUwMHBjaV9raWxsX3R4X3F1ZXVlKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkJICAgIGNvbnN0IGVudW0gZGF0YV9xdWV1ZV9xaWQgcWlkKQoreworCXUzMiByZWc7CisKKwlpZiAocWlkID09IFFJRF9CRUFDT04pIHsKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgQ1NSMTQsIDApOworCX0gZWxzZSB7CisJCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgVFhDU1IwLCAmcmVnKTsKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYQ1NSMF9BQk9SVCwgMSk7CisJCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYQ1NSMCwgcmVnKTsKKwl9Cit9CisKIC8qCiAgKiBSWCBjb250cm9sIGhhbmRsZXJzCiAgKi8KQEAgLTE1MjQsNyArMTU1Miw5IEBACiAJdmFsdWUgPSBydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLCBFRVBST01fQU5URU5OQV9MRURfTU9ERSk7CiAKIAlydDI1MDBwY2lfaW5pdF9sZWQocnQyeDAwZGV2LCAmcnQyeDAwZGV2LT5sZWRfcmFkaW8sIExFRF9UWVBFX1JBRElPKTsKLQlpZiAodmFsdWUgPT0gTEVEX01PREVfVFhSWF9BQ1RJVklUWSkKKwlpZiAodmFsdWUgPT0gTEVEX01PREVfVFhSWF9BQ1RJVklUWSB8fAorCSAgICB2YWx1ZSA9PSBMRURfTU9ERV9ERUZBVUxUIHx8CisJICAgIHZhbHVlID09IExFRF9NT0RFX0FTVVMpCiAJCXJ0MjUwMHBjaV9pbml0X2xlZChydDJ4MDBkZXYsICZydDJ4MDBkZXYtPmxlZF9xdWFsLAogCQkJCSAgIExFRF9UWVBFX0FDVElWSVRZKTsKICNlbmRpZiAvKiBDT05GSUdfUlQyWDAwX0xJQl9MRURTICovCkBAIC0xNzIxLDcgKzE3NTEsOSBAQAogCSAqIEluaXRpYWxpemUgYWxsIGh3IGZpZWxkcy4KIAkgKi8KIAlydDJ4MDBkZXYtPmh3LT5mbGFncyA9IElFRUU4MDIxMV9IV19IT1NUX0JST0FEQ0FTVF9QU19CVUZGRVJJTkcgfAotCQkJICAgICAgIElFRUU4MDIxMV9IV19TSUdOQUxfREJNOworCQkJICAgICAgIElFRUU4MDIxMV9IV19TSUdOQUxfREJNIHwKKwkJCSAgICAgICBJRUVFODAyMTFfSFdfU1VQUE9SVFNfUFMgfAorCQkJICAgICAgIElFRUU4MDIxMV9IV19QU19OVUxMRlVOQ19TVEFDSzsKIAogCXJ0MngwMGRldi0+aHctPmV4dHJhX3R4X2hlYWRyb29tID0gMDsKIApAQCAtMTg3Myw2ICsxOTA1LDcgQEAKIAkud3JpdGVfdHhfZGF0YQkJPSBydDJ4MDBwY2lfd3JpdGVfdHhfZGF0YSwKIAkud3JpdGVfYmVhY29uCQk9IHJ0MjUwMHBjaV93cml0ZV9iZWFjb24sCiAJLmtpY2tfdHhfcXVldWUJCT0gcnQyNTAwcGNpX2tpY2tfdHhfcXVldWUsCisJLmtpbGxfdHhfcXVldWUJCT0gcnQyNTAwcGNpX2tpbGxfdHhfcXVldWUsCiAJLmZpbGxfcnhkb25lCQk9IHJ0MjUwMHBjaV9maWxsX3J4ZG9uZSwKIAkuY29uZmlnX2ZpbHRlcgkJPSBydDI1MDBwY2lfY29uZmlnX2ZpbHRlciwKIAkuY29uZmlnX2ludGYJCT0gcnQyNTAwcGNpX2NvbmZpZ19pbnRmLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHBjaS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHBjaS5oCmluZGV4IGUxMzUyNDcuLmNlMmYwNjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI1MDBwY2kuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNTAwcGNpLmgKQEAgLTEsNSArMSw1IEBACiAvKgotCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDggcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKKwlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA5IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CiAJPGh0dHA6Ly9ydDJ4MDAuc2VyaWFsbW9ua2V5LmNvbT4KIAogCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC01OSw4ICs1OSw4IEBACiAjZGVmaW5lIEVFUFJPTV9TSVpFCQkJMHgwMjAwCiAjZGVmaW5lIEJCUF9CQVNFCQkJMHgwMDAwCiAjZGVmaW5lIEJCUF9TSVpFCQkJMHgwMDQwCi0jZGVmaW5lIFJGX0JBU0UJCQkJMHgwMDAwCi0jZGVmaW5lIFJGX1NJWkUJCQkJMHgwMDE0CisjZGVmaW5lIFJGX0JBU0UJCQkJMHgwMDA0CisjZGVmaW5lIFJGX1NJWkUJCQkJMHgwMDEwCiAKIC8qCiAgKiBOdW1iZXIgb2YgVFggcXVldWVzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHVzYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHVzYi5jCmluZGV4IDNlMmFjMmIuLjllNjMwZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI1MDB1c2IuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNTAwdXNiLmMKQEAgLTEsNSArMSw1IEBACiAvKgotCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDggcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKKwlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA5IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CiAJPGh0dHA6Ly9ydDJ4MDAuc2VyaWFsbW9ua2V5LmNvbT4KIAogCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC0yMDQsOSArMjA0LDYgQEAKIHsKIAl1MTYgcmVnOwogCi0JaWYgKCF3b3JkKQotCQlyZXR1cm47Ci0KIAltdXRleF9sb2NrKCZydDJ4MDBkZXYtPmNzcl9tdXRleCk7CiAKIAkvKgpAQCAtMjgwLDYgKzI3NywxOCBAQAogfTsKICNlbmRpZiAvKiBDT05GSUdfUlQyWDAwX0xJQl9ERUJVR0ZTICovCiAKKyNpZmRlZiBDT05GSUdfUlQyWDAwX0xJQl9SRktJTEwKK3N0YXRpYyBpbnQgcnQyNTAwdXNiX3Jma2lsbF9wb2xsKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCit7CisJdTE2IHJlZzsKKworCXJ0MjUwMHVzYl9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgTUFDX0NTUjE5LCAmcmVnKTsKKwlyZXR1cm4gcnQyeDAwX2dldF9maWVsZDMyKHJlZywgTUFDX0NTUjE5X0JJVDcpOworfQorI2Vsc2UKKyNkZWZpbmUgcnQyNTAwdXNiX3Jma2lsbF9wb2xsCU5VTEwKKyNlbmRpZiAvKiBDT05GSUdfUlQyWDAwX0xJQl9SRktJTEwgKi8KKwogI2lmZGVmIENPTkZJR19SVDJYMDBfTElCX0xFRFMKIHN0YXRpYyB2b2lkIHJ0MjUwMHVzYl9icmlnaHRuZXNzX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwKIAkJCQkgICAgIGVudW0gbGVkX2JyaWdodG5lc3MgYnJpZ2h0bmVzcykKQEAgLTYzNCw2ICs2NDMsMzIgQEAKIAlydDI1MDB1c2JfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWFJYX0NTUjE4LCByZWcpOwogfQogCitzdGF0aWMgdm9pZCBydDI1MDB1c2JfY29uZmlnX3BzKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkJc3RydWN0IHJ0MngwMGxpYl9jb25mICpsaWJjb25mKQoreworCWVudW0gZGV2X3N0YXRlIHN0YXRlID0KKwkgICAgKGxpYmNvbmYtPmNvbmYtPmZsYWdzICYgSUVFRTgwMjExX0NPTkZfUFMpID8KKwkJU1RBVEVfU0xFRVAgOiBTVEFURV9BV0FLRTsKKwl1MTYgcmVnOworCisJaWYgKHN0YXRlID09IFNUQVRFX1NMRUVQKSB7CisJCXJ0MjUwMHVzYl9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgTUFDX0NTUjE4LCAmcmVnKTsKKwkJcnQyeDAwX3NldF9maWVsZDE2KCZyZWcsIE1BQ19DU1IxOF9ERUxBWV9BRlRFUl9CRUFDT04sCisJCQkJICAgbGliY29uZi0+Y29uZi0+YmVhY29uX2ludCAtIDIwKTsKKwkJcnQyeDAwX3NldF9maWVsZDE2KCZyZWcsIE1BQ19DU1IxOF9CRUFDT05TX0JFRk9SRV9XQUtFVVAsCisJCQkJICAgbGliY29uZi0+Y29uZi0+bGlzdGVuX2ludGVydmFsIC0gMSk7CisKKwkJLyogV2UgbXVzdCBmaXJzdCBkaXNhYmxlIGF1dG93YWtlIGJlZm9yZSBpdCBjYW4gYmUgZW5hYmxlZCAqLworCQlydDJ4MDBfc2V0X2ZpZWxkMTYoJnJlZywgTUFDX0NTUjE4X0FVVE9fV0FLRSwgMCk7CisJCXJ0MjUwMHVzYl9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIE1BQ19DU1IxOCwgcmVnKTsKKworCQlydDJ4MDBfc2V0X2ZpZWxkMTYoJnJlZywgTUFDX0NTUjE4X0FVVE9fV0FLRSwgMSk7CisJCXJ0MjUwMHVzYl9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIE1BQ19DU1IxOCwgcmVnKTsKKwl9CisKKwlydDJ4MDBkZXYtPm9wcy0+bGliLT5zZXRfZGV2aWNlX3N0YXRlKHJ0MngwMGRldiwgc3RhdGUpOworfQorCiBzdGF0aWMgdm9pZCBydDI1MDB1c2JfY29uZmlnKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCiAJCQkgICAgIHN0cnVjdCBydDJ4MDBsaWJfY29uZiAqbGliY29uZiwKIAkJCSAgICAgY29uc3QgdW5zaWduZWQgaW50IGZsYWdzKQpAQCAtNjQ3LDYgKzY4Miw4IEBACiAJCQkJCSBsaWJjb25mLT5jb25mLT5wb3dlcl9sZXZlbCk7CiAJaWYgKGZsYWdzICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0JFQUNPTl9JTlRFUlZBTCkKIAkJcnQyNTAwdXNiX2NvbmZpZ19kdXJhdGlvbihydDJ4MDBkZXYsIGxpYmNvbmYpOworCWlmIChmbGFncyAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9QUykKKwkJcnQyNTAwdXNiX2NvbmZpZ19wcyhydDJ4MDBkZXYsIGxpYmNvbmYpOwogfQogCiAvKgpAQCAtNjcwLDcgKzcwNyw4IEBACiAJcXVhbC0+ZmFsc2VfY2NhID0gcnQyeDAwX2dldF9maWVsZDE2KHJlZywgU1RBX0NTUjNfRkFMU0VfQ0NBX0VSUk9SKTsKIH0KIAotc3RhdGljIHZvaWQgcnQyNTAwdXNiX3Jlc2V0X3R1bmVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCitzdGF0aWMgdm9pZCBydDI1MDB1c2JfcmVzZXRfdHVuZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCQkgIHN0cnVjdCBsaW5rX3F1YWwgKnF1YWwpCiB7CiAJdTE2IGVlcHJvbTsKIAl1MTYgdmFsdWU7CkBAIC02OTEsNyArNzI5LDcgQEAKIAl2YWx1ZSA9IHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sIEVFUFJPTV9CQlBUVU5FX1ZHQ1VQUEVSKTsKIAlydDI1MDB1c2JfYmJwX3dyaXRlKHJ0MngwMGRldiwgMTcsIHZhbHVlKTsKIAotCXJ0MngwMGRldi0+bGluay52Z2NfbGV2ZWwgPSB2YWx1ZTsKKwlxdWFsLT52Z2NfbGV2ZWwgPSB2YWx1ZTsKIH0KIAogLyoKQEAgLTExNzYsNyArMTIxNCw3IEBACiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzBfVElNRVNUQU1QLAogCQkJICAgdGVzdF9iaXQoRU5UUllfVFhEX1JFUV9USU1FU1RBTVAsICZ0eGRlc2MtPmZsYWdzKSk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzBfT0ZETSwKLQkJCSAgIHRlc3RfYml0KEVOVFJZX1RYRF9PRkRNX1JBVEUsICZ0eGRlc2MtPmZsYWdzKSk7CisJCQkgICAodHhkZXNjLT5yYXRlX21vZGUgPT0gUkFURV9NT0RFX09GRE0pKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMF9ORVdfU0VRLAogCQkJICAgdGVzdF9iaXQoRU5UUllfVFhEX0ZJUlNUX0ZSQUdNRU5ULCAmdHhkZXNjLT5mbGFncykpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cwX0lGUywgdHhkZXNjLT5pZnMpOwpAQCAtMTU2MiwxMiArMTYwMCwyMiBAQAogCXZhbHVlID0gcnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwgRUVQUk9NX0FOVEVOTkFfTEVEX01PREUpOwogCiAJcnQyNTAwdXNiX2luaXRfbGVkKHJ0MngwMGRldiwgJnJ0MngwMGRldi0+bGVkX3JhZGlvLCBMRURfVFlQRV9SQURJTyk7Ci0JaWYgKHZhbHVlID09IExFRF9NT0RFX1RYUlhfQUNUSVZJVFkpCisJaWYgKHZhbHVlID09IExFRF9NT0RFX1RYUlhfQUNUSVZJVFkgfHwKKwkgICAgdmFsdWUgPT0gTEVEX01PREVfREVGQVVMVCB8fAorCSAgICB2YWx1ZSA9PSBMRURfTU9ERV9BU1VTKQogCQlydDI1MDB1c2JfaW5pdF9sZWQocnQyeDAwZGV2LCAmcnQyeDAwZGV2LT5sZWRfcXVhbCwKIAkJCQkgICBMRURfVFlQRV9BQ1RJVklUWSk7CiAjZW5kaWYgLyogQ09ORklHX1JUMlgwMF9MSUJfTEVEUyAqLwogCiAJLyoKKwkgKiBEZXRlY3QgaWYgdGhpcyBkZXZpY2UgaGFzIGFuIGhhcmR3YXJlIGNvbnRyb2xsZWQgcmFkaW8uCisJICovCisjaWZkZWYgQ09ORklHX1JUMlgwMF9MSUJfUkZLSUxMCisJaWYgKHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sIEVFUFJPTV9BTlRFTk5BX0hBUkRXQVJFX1JBRElPKSkKKwkJX19zZXRfYml0KENPTkZJR19TVVBQT1JUX0hXX0JVVFRPTiwgJnJ0MngwMGRldi0+ZmxhZ3MpOworI2VuZGlmIC8qIENPTkZJR19SVDJYMDBfTElCX1JGS0lMTCAqLworCisJLyoKIAkgKiBDaGVjayBpZiB0aGUgQkJQIHR1bmluZyBzaG91bGQgYmUgZGlzYWJsZWQuCiAJICovCiAJcnQyeDAwX2VlcHJvbV9yZWFkKHJ0MngwMGRldiwgRUVQUk9NX05JQywgJmVlcHJvbSk7CkBAIC0xNzUyLDcgKzE4MDAsOSBAQAogCXJ0MngwMGRldi0+aHctPmZsYWdzID0KIAkgICAgSUVFRTgwMjExX0hXX1JYX0lOQ0xVREVTX0ZDUyB8CiAJICAgIElFRUU4MDIxMV9IV19IT1NUX0JST0FEQ0FTVF9QU19CVUZGRVJJTkcgfAotCSAgICBJRUVFODAyMTFfSFdfU0lHTkFMX0RCTTsKKwkgICAgSUVFRTgwMjExX0hXX1NJR05BTF9EQk0gfAorCSAgICBJRUVFODAyMTFfSFdfU1VQUE9SVFNfUFMgfAorCSAgICBJRUVFODAyMTFfSFdfUFNfTlVMTEZVTkNfU1RBQ0s7CiAKIAlydDJ4MDBkZXYtPmh3LT5leHRyYV90eF9oZWFkcm9vbSA9IFRYRF9ERVNDX1NJWkU7CiAKQEAgLTE4MzksNyArMTg4OSw3IEBACiAJX19zZXRfYml0KERSSVZFUl9SRVFVSVJFX1NDSEVEVUxFRCwgJnJ0MngwMGRldi0+ZmxhZ3MpOwogCWlmICghbW9kcGFyYW1fbm9od2NyeXB0KSB7CiAJCV9fc2V0X2JpdChDT05GSUdfU1VQUE9SVF9IV19DUllQVE8sICZydDJ4MDBkZXYtPmZsYWdzKTsKLQkJX19zZXRfYml0KENPTkZJR19DUllQVE9fQ09QWV9JViwgJnJ0MngwMGRldi0+ZmxhZ3MpOworCQlfX3NldF9iaXQoRFJJVkVSX1JFUVVJUkVfQ09QWV9JViwgJnJ0MngwMGRldi0+ZmxhZ3MpOwogCX0KIAlfX3NldF9iaXQoQ09ORklHX0RJU0FCTEVfTElOS19UVU5JTkcsICZydDJ4MDBkZXYtPmZsYWdzKTsKIApAQCAtMTg3Myw2ICsxOTIzLDcgQEAKIAkudW5pbml0aWFsaXplCQk9IHJ0MngwMHVzYl91bmluaXRpYWxpemUsCiAJLmNsZWFyX2VudHJ5CQk9IHJ0MngwMHVzYl9jbGVhcl9lbnRyeSwKIAkuc2V0X2RldmljZV9zdGF0ZQk9IHJ0MjUwMHVzYl9zZXRfZGV2aWNlX3N0YXRlLAorCS5yZmtpbGxfcG9sbAkJPSBydDI1MDB1c2JfcmZraWxsX3BvbGwsCiAJLmxpbmtfc3RhdHMJCT0gcnQyNTAwdXNiX2xpbmtfc3RhdHMsCiAJLnJlc2V0X3R1bmVyCQk9IHJ0MjUwMHVzYl9yZXNldF90dW5lciwKIAkubGlua190dW5lcgkJPSBydDI1MDB1c2JfbGlua190dW5lciwKQEAgLTE4ODEsNiArMTkzMiw3IEBACiAJLndyaXRlX2JlYWNvbgkJPSBydDI1MDB1c2Jfd3JpdGVfYmVhY29uLAogCS5nZXRfdHhfZGF0YV9sZW4JPSBydDI1MDB1c2JfZ2V0X3R4X2RhdGFfbGVuLAogCS5raWNrX3R4X3F1ZXVlCQk9IHJ0MjUwMHVzYl9raWNrX3R4X3F1ZXVlLAorCS5raWxsX3R4X3F1ZXVlCQk9IHJ0MngwMHVzYl9raWxsX3R4X3F1ZXVlLAogCS5maWxsX3J4ZG9uZQkJPSBydDI1MDB1c2JfZmlsbF9yeGRvbmUsCiAJLmNvbmZpZ19zaGFyZWRfa2V5CT0gcnQyNTAwdXNiX2NvbmZpZ19rZXksCiAJLmNvbmZpZ19wYWlyd2lzZV9rZXkJPSBydDI1MDB1c2JfY29uZmlnX2tleSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI1MDB1c2IuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI1MDB1c2IuaAppbmRleCA0MzQ3ZGZkLi41YmM0NmZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNTAwdXNiLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHVzYi5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLQlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA4IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CisJQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOSBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAogCTxodHRwOi8vcnQyeDAwLnNlcmlhbG1vbmtleS5jb20+CiAKIAlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtNTksOCArNTksOCBAQAogI2RlZmluZSBFRVBST01fU0laRQkJCTB4MDA2YQogI2RlZmluZSBCQlBfQkFTRQkJCTB4MDAwMAogI2RlZmluZSBCQlBfU0laRQkJCTB4MDA2MAotI2RlZmluZSBSRl9CQVNFCQkJCTB4MDAwMAotI2RlZmluZSBSRl9TSVpFCQkJCTB4MDAxNAorI2RlZmluZSBSRl9CQVNFCQkJCTB4MDAwNAorI2RlZmluZSBSRl9TSVpFCQkJCTB4MDAxMAogCiAvKgogICogTnVtYmVyIG9mIFRYIHF1ZXVlcy4KQEAgLTE4OSw2ICsxODksMTQgQEAKICAqIE1BQ19DU1IxOTogR1BJTyBjb250cm9sIHJlZ2lzdGVyLgogICovCiAjZGVmaW5lIE1BQ19DU1IxOQkJCTB4MDQyNgorI2RlZmluZSBNQUNfQ1NSMTlfQklUMAkJCUZJRUxEMzIoMHgwMDAxKQorI2RlZmluZSBNQUNfQ1NSMTlfQklUMQkJCUZJRUxEMzIoMHgwMDAyKQorI2RlZmluZSBNQUNfQ1NSMTlfQklUMgkJCUZJRUxEMzIoMHgwMDA0KQorI2RlZmluZSBNQUNfQ1NSMTlfQklUMwkJCUZJRUxEMzIoMHgwMDA4KQorI2RlZmluZSBNQUNfQ1NSMTlfQklUNAkJCUZJRUxEMzIoMHgwMDEwKQorI2RlZmluZSBNQUNfQ1NSMTlfQklUNQkJCUZJRUxEMzIoMHgwMDIwKQorI2RlZmluZSBNQUNfQ1NSMTlfQklUNgkJCUZJRUxEMzIoMHgwMDQwKQorI2RlZmluZSBNQUNfQ1NSMTlfQklUNwkJCUZJRUxEMzIoMHgwMDgwKQogCiAvKgogICogTUFDX0NTUjIwOiBMRUQgY29udHJvbCByZWdpc3Rlci4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDAuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDAuaAppbmRleCAzOWVjZjNiLi44NGJkNmYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLQlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA4IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CisJQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOSBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAogCTxodHRwOi8vcnQyeDAwLnNlcmlhbG1vbmtleS5jb20+CiAKIAlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQtcG9sbGRldi5oPgogCiAjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CiAKQEAgLTQ0LDcgKzQ1LDcgQEAKIC8qCiAgKiBNb2R1bGUgaW5mb3JtYXRpb24uCiAgKi8KLSNkZWZpbmUgRFJWX1ZFUlNJT04JIjIuMi4zIgorI2RlZmluZSBEUlZfVkVSU0lPTgkiMi4zLjAiCiAjZGVmaW5lIERSVl9QUk9KRUNUCSJodHRwOi8vcnQyeDAwLnNlcmlhbG1vbmtleS5jb20iCiAKIC8qCkBAIC0xNzcsNTIgKzE3OCw0MSBAQAogICovCiBzdHJ1Y3QgbGlua19xdWFsIHsKIAkvKgotCSAqIFN0YXRpc3RpY3MgcmVxdWlyZWQgZm9yIExpbmsgdHVuaW5nLgotCSAqIEZvciB0aGUgYXZlcmFnZSBSU1NJIHZhbHVlIHdlIHVzZSB0aGUgIldhbGtpbmcgYXZlcmFnZSIgYXBwcm9hY2guCi0JICogV2hlbiBhZGRpbmcgUlNTSSB0byB0aGUgYXZlcmFnZSB2YWx1ZSB0aGUgZm9sbG93aW5nIGNhbGN1bGF0aW9uCi0JICogaXMgbmVlZGVkOgotCSAqCi0JICogICAgICAgIGF2Z19yc3NpID0gKChhdmdfcnNzaSAqIDcpICsgcnNzaSkgLyA4OwotCSAqCi0JICogVGhlIGFkdmFudGFnZSBvZiB0aGlzIGFwcHJvYWNoIGlzIHRoYXQgd2Ugb25seSBuZWVkIDEgdmFyaWFibGUKLQkgKiB0byBzdG9yZSB0aGUgYXZlcmFnZSBpbiAoTm8gbmVlZCBmb3IgYSBjb3VudCBhbmQgYSB0b3RhbCkuCi0JICogQnV0IG1vcmUgaW1wb3J0YW50bHksIG5vcm1hbCBhdmVyYWdlIHZhbHVlcyB3aWxsIG92ZXIgdGltZQotCSAqIG1vdmUgbGVzcyBhbmQgbGVzcyB0b3dhcmRzIG5ld2x5IGFkZGVkIHZhbHVlcyB0aGlzIHJlc3VsdHMKLQkgKiB0aGF0IHdpdGggbGluayB0dW5pbmcsIHRoZSBkZXZpY2UgY2FuIGhhdmUgYSB2ZXJ5IGdvb2QgUlNTSQotCSAqIGZvciBhIGZldyBtaW51dGVzIGJ1dCB3aGVuIHRoZSBkZXZpY2UgaXMgbW92ZWQgYXdheSBmcm9tIHRoZSBBUAotCSAqIHRoZSBhdmVyYWdlIHdpbGwgbm90IGRlY3JlYXNlIGZhc3QgZW5vdWdoIHRvIGNvbXBlbnNhdGUuCi0JICogVGhlIHdhbGtpbmcgYXZlcmFnZSBjb21wZW5zYXRlcyB0aGlzIGFuZCB3aWxsIG1vdmUgdG93YXJkcwotCSAqIHRoZSBuZXcgdmFsdWVzIGNvcnJlY3RseSBhbGxvd2luZyBhIGVmZmVjdGl2ZSBsaW5rIHR1bmluZy4KKwkgKiBTdGF0aXN0aWNzIHJlcXVpcmVkIGZvciBMaW5rIHR1bmluZyBieSBkcml2ZXIKKwkgKiBUaGUgcnNzaSB2YWx1ZSBpcyBwcm92aWRlZCBieSBydDJ4MDBsaWIgZHVyaW5nIHRoZQorCSAqIGxpbmtfdHVuZXIoKSBjYWxsYmFjayBmdW5jdGlvbi4KKwkgKiBUaGUgZmFsc2VfY2NhIGZpZWxkIGlzIGZpbGxlZCBkdXJpbmcgdGhlIGxpbmtfc3RhdHMoKQorCSAqIGNhbGxiYWNrIGZ1bmN0aW9uIGFuZCBjb3VsZCBiZSB1c2VkIGR1cmluZyB0aGUKKwkgKiBsaW5rX3R1bmVyKCkgY2FsbGJhY2sgZnVuY3Rpb24uCiAJICovCi0JaW50IGF2Z19yc3NpOworCWludCByc3NpOwogCWludCBmYWxzZV9jY2E7CiAKIAkvKgotCSAqIFN0YXRpc3RpY3MgcmVxdWlyZWQgZm9yIFNpZ25hbCBxdWFsaXR5IGNhbGN1bGF0aW9uLgotCSAqIEZvciBjYWxjdWxhdGluZyB0aGUgU2lnbmFsIHF1YWxpdHkgd2UgaGF2ZSB0byBkZXRlcm1pbmUKLQkgKiB0aGUgdG90YWwgbnVtYmVyIG9mIHN1Y2Nlc3MgYW5kIGZhaWxlZCBSWCBhbmQgVFggZnJhbWVzLgotCSAqIEFmdGVyIHRoYXQgd2UgYWxzbyB1c2UgdGhlIGF2ZXJhZ2UgUlNTSSB2YWx1ZSB0byBoZWxwCi0JICogZGV0ZXJtaW5pbmcgdGhlIHNpZ25hbCBxdWFsaXR5LgotCSAqIEZvciB0aGUgY2FsY3VsYXRpb24gd2Ugd2lsbCB1c2UgdGhlIGZvbGxvd2luZyBhbGdvcml0aG06CisJICogVkdDIGxldmVscworCSAqIEhhcmR3YXJlIGRyaXZlciB3aWxsIHR1bmUgdGhlIFZHQyBsZXZlbCBkdXJpbmcgZWFjaCBjYWxsCisJICogdG8gdGhlIGxpbmtfdHVuZXIoKSBjYWxsYmFjayBmdW5jdGlvbi4gVGhpcyB2Z2NfbGV2ZWwgaXMKKwkgKiBpcyBkZXRlcm1pbmVkIGJhc2VkIG9uIHRoZSBsaW5rIHF1YWxpdHkgc3RhdGlzdGljcyBsaWtlCisJICogYXZlcmFnZSBSU1NJIGFuZCB0aGUgZmFsc2UgQ0NBIGNvdW50LgogCSAqCi0JICogICAgICAgICByc3NpX3BlcmNlbnRhZ2UgPSAoYXZnX3Jzc2kgKiAxMDApIC8gcnNzaV9vZmZzZXQKLQkgKiAgICAgICAgIHJ4X3BlcmNlbnRhZ2UgPSAocnhfc3VjY2VzcyAqIDEwMCkgLyByeF90b3RhbAotCSAqICAgICAgICAgdHhfcGVyY2VudGFnZSA9ICh0eF9zdWNjZXNzICogMTAwKSAvIHR4X3RvdGFsCi0JICogICAgICAgICBhdmdfc2lnbmFsID0gKChXRUlHSFRfUlNTSSAqIGF2Z19yc3NpKSArCi0JICogICAgICAgICAgICAgICAgICAgICAgIChXRUlHSFRfVFggKiB0eF9wZXJjZW50YWdlKSArCi0JICogICAgICAgICAgICAgICAgICAgICAgIChXRUlHSFRfUlggKiByeF9wZXJjZW50YWdlKSkgLyAxMDAKLQkgKgotCSAqIFRoaXMgdmFsdWUgc2hvdWxkIHRoZW4gYmUgY2hlY2tlZCB0byBub3QgYmUgZ3JlYXRlZCB0aGVuIDEwMC4KKwkgKiBJbiBzb21lIGNhc2VzIHRoZSBkcml2ZXJzIG5lZWQgdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuCisJICogdGhlIGN1cnJlbnRseSAiZGVzaXJlZCIgVkdDIGxldmVsIGFuZCB0aGUgbGV2ZWwgY29uZmlndXJlZAorCSAqIGluIHRoZSBoYXJkd2FyZS4gVGhlIGxhdHRlciBpcyBpbXBvcnRhbnQgdG8gcmVkdWNlIHRoZQorCSAqIG51bWJlciBvZiBCQlAgcmVnaXN0ZXIgcmVhZHMgdG8gcmVkdWNlIHJlZ2lzdGVyIGFjY2VzcworCSAqIG92ZXJoZWFkLiBGb3IgdGhpcyByZWFzb24gd2Ugc3RvcmUgYm90aCB2YWx1ZXMgaGVyZS4KIAkgKi8KLQlpbnQgcnhfcGVyY2VudGFnZTsKKwl1OCB2Z2NfbGV2ZWw7CisJdTggdmdjX2xldmVsX3JlZzsKKworCS8qCisJICogU3RhdGlzdGljcyByZXF1aXJlZCBmb3IgU2lnbmFsIHF1YWxpdHkgY2FsY3VsYXRpb24uCisJICogVGhlc2UgZmllbGRzIG1pZ2h0IGJlIGNoYW5nZWQgZHVyaW5nIHRoZSBsaW5rX3N0YXRzKCkKKwkgKiBjYWxsYmFjayBmdW5jdGlvbi4KKwkgKi8KIAlpbnQgcnhfc3VjY2VzczsKIAlpbnQgcnhfZmFpbGVkOwotCWludCB0eF9wZXJjZW50YWdlOwogCWludCB0eF9zdWNjZXNzOwogCWludCB0eF9mYWlsZWQ7Ci0jZGVmaW5lIFdFSUdIVF9SU1NJCTIwCi0jZGVmaW5lIFdFSUdIVF9SWAk0MAotI2RlZmluZSBXRUlHSFRfVFgJNDAKIH07CiAKIC8qCkBAIC0yODYsOSArMjc2LDE2IEBACiAJc3RydWN0IGxpbmtfYW50IGFudDsKIAogCS8qCi0JICogQWN0aXZlIFZHQyBsZXZlbAorCSAqIEN1cnJlbnRseSBhY3RpdmUgYXZlcmFnZSBSU1NJIHZhbHVlCiAJICovCi0JaW50IHZnY19sZXZlbDsKKwlpbnQgYXZnX3Jzc2k7CisKKwkvKgorCSAqIEN1cnJlbnRseSBwcmVjYWxjdWxhdGVkIHBlcmNlbnRhZ2VzIG9mIHN1Y2Nlc3NmdWwKKwkgKiBUWCBhbmQgUlggZnJhbWVzLgorCSAqLworCWludCByeF9wZXJjZW50YWdlOworCWludCB0eF9wZXJjZW50YWdlOwogCiAJLyoKIAkgKiBXb3JrIHN0cnVjdHVyZSBmb3Igc2NoZWR1bGluZyBwZXJpb2RpYyBsaW5rIHR1bmluZy4KQEAgLTI5Nyw1NSArMjk0LDYgQEAKIH07CiAKIC8qCi0gKiBTbWFsbCBoZWxwZXIgbWFjcm8gdG8gd29yayB3aXRoIG1vdmluZy93YWxraW5nIGF2ZXJhZ2VzLgotICovCi0jZGVmaW5lIE1PVklOR19BVkVSQUdFKF9fYXZnLCBfX3ZhbCwgX19zYW1wbGVzKSBcCi0JKCAoKChfX2F2ZykgKiAoKF9fc2FtcGxlcykgLSAxKSkgKyAoX192YWwpKSAvIChfX3NhbXBsZXMpICkKLQotLyoKLSAqIFdoZW4gd2UgbGFjayBSU1NJIGluZm9ybWF0aW9uIHJldHVybiBzb21ldGhpbmcgbGVzcyB0aGVuIC04MCB0bwotICogdGVsbCB0aGUgZHJpdmVyIHRvIHR1bmUgdGhlIGRldmljZSB0byBtYXhpbXVtIHNlbnNpdGl2aXR5LgotICovCi0jZGVmaW5lIERFRkFVTFRfUlNTSQkoIC0xMjggKQotCi0vKgotICogTGluayBxdWFsaXR5IGFjY2VzcyBmdW5jdGlvbnMuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IHJ0MngwMF9nZXRfbGlua19yc3NpKHN0cnVjdCBsaW5rICpsaW5rKQotewotCWlmIChsaW5rLT5xdWFsLmF2Z19yc3NpICYmIGxpbmstPnF1YWwucnhfc3VjY2VzcykKLQkJcmV0dXJuIGxpbmstPnF1YWwuYXZnX3Jzc2k7Ci0JcmV0dXJuIERFRkFVTFRfUlNTSTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgcnQyeDAwX2dldF9saW5rX2FudF9yc3NpKHN0cnVjdCBsaW5rICpsaW5rKQotewotCWlmIChsaW5rLT5hbnQucnNzaV9hbnQgJiYgbGluay0+cXVhbC5yeF9zdWNjZXNzKQotCQlyZXR1cm4gbGluay0+YW50LnJzc2lfYW50OwotCXJldHVybiBERUZBVUxUX1JTU0k7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBydDJ4MDBfcmVzZXRfbGlua19hbnRfcnNzaShzdHJ1Y3QgbGluayAqbGluaykKLXsKLQlsaW5rLT5hbnQucnNzaV9hbnQgPSAwOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBydDJ4MDBfZ2V0X2xpbmtfYW50X3Jzc2lfaGlzdG9yeShzdHJ1Y3QgbGluayAqbGluaywKLQkJCQkJCSAgIGVudW0gYW50ZW5uYSBhbnQpCi17Ci0JaWYgKGxpbmstPmFudC5yc3NpX2hpc3RvcnlbYW50IC0gQU5URU5OQV9BXSkKLQkJcmV0dXJuIGxpbmstPmFudC5yc3NpX2hpc3RvcnlbYW50IC0gQU5URU5OQV9BXTsKLQlyZXR1cm4gREVGQVVMVF9SU1NJOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBydDJ4MDBfdXBkYXRlX2FudF9yc3NpKHN0cnVjdCBsaW5rICpsaW5rLCBpbnQgcnNzaSkKLXsKLQlpbnQgb2xkX3Jzc2kgPSBsaW5rLT5hbnQucnNzaV9oaXN0b3J5W2xpbmstPmFudC5hY3RpdmUucnggLSBBTlRFTk5BX0FdOwotCWxpbmstPmFudC5yc3NpX2hpc3RvcnlbbGluay0+YW50LmFjdGl2ZS5yeCAtIEFOVEVOTkFfQV0gPSByc3NpOwotCXJldHVybiBvbGRfcnNzaTsKLX0KLQotLyoKICAqIEludGVyZmFjZSBzdHJ1Y3R1cmUKICAqIFBlciBpbnRlcmZhY2UgY29uZmlndXJhdGlvbiBkZXRhaWxzLCB0aGlzIHN0cnVjdHVyZQogICogaXMgYWxsb2NhdGVkIGFzIHRoZSBwcml2YXRlIGRhdGEgZm9yIGllZWU4MDIxMV92aWYuCkBAIC00NDgsNyArMzk2LDcgQEAKIAlpbnQgYWNrX3RpbWVvdXQ7CiAJaW50IGFja19jb25zdW1lX3RpbWU7CiAKLQl1NjQgYmFzaWNfcmF0ZXM7CisJdTMyIGJhc2ljX3JhdGVzOwogCiAJaW50IHNsb3RfdGltZTsKIApAQCAtNTIwLDkgKzQ2OCwxMCBAQAogCSAqLwogCWludCAoKnByb2JlX2h3KSAoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldik7CiAJY2hhciAqKCpnZXRfZmlybXdhcmVfbmFtZSkgKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpOwotCXUxNiAoKmdldF9maXJtd2FyZV9jcmMpIChjb25zdCB2b2lkICpkYXRhLCBjb25zdCBzaXplX3QgbGVuKTsKLQlpbnQgKCpsb2FkX2Zpcm13YXJlKSAoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwgY29uc3Qgdm9pZCAqZGF0YSwKLQkJCSAgICAgIGNvbnN0IHNpemVfdCBsZW4pOworCWludCAoKmNoZWNrX2Zpcm13YXJlKSAoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCSAgICAgICBjb25zdCB1OCAqZGF0YSwgY29uc3Qgc2l6ZV90IGxlbik7CisJaW50ICgqbG9hZF9maXJtd2FyZSkgKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkgICAgICBjb25zdCB1OCAqZGF0YSwgY29uc3Qgc2l6ZV90IGxlbik7CiAKIAkvKgogCSAqIERldmljZSBpbml0aWFsaXphdGlvbi9kZWluaXRpYWxpemF0aW9uIGhhbmRsZXJzLgpAQCAtNTQ0LDggKzQ5MywxMCBAQAogCWludCAoKnJma2lsbF9wb2xsKSAoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldik7CiAJdm9pZCAoKmxpbmtfc3RhdHMpIChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAogCQkJICAgIHN0cnVjdCBsaW5rX3F1YWwgKnF1YWwpOwotCXZvaWQgKCpyZXNldF90dW5lcikgKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpOwotCXZvaWQgKCpsaW5rX3R1bmVyKSAoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldik7CisJdm9pZCAoKnJlc2V0X3R1bmVyKSAoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCSAgICAgc3RydWN0IGxpbmtfcXVhbCAqcXVhbCk7CisJdm9pZCAoKmxpbmtfdHVuZXIpIChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJICAgIHN0cnVjdCBsaW5rX3F1YWwgKnF1YWwsIGNvbnN0IHUzMiBjb3VudCk7CiAKIAkvKgogCSAqIFRYIGNvbnRyb2wgaGFuZGxlcnMKQEAgLTU1OCw2ICs1MDksOCBAQAogCWludCAoKmdldF90eF9kYXRhX2xlbikgKHN0cnVjdCBxdWV1ZV9lbnRyeSAqZW50cnkpOwogCXZvaWQgKCpraWNrX3R4X3F1ZXVlKSAoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKIAkJCSAgICAgICBjb25zdCBlbnVtIGRhdGFfcXVldWVfcWlkIHF1ZXVlKTsKKwl2b2lkICgqa2lsbF90eF9xdWV1ZSkgKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkgICAgICAgY29uc3QgZW51bSBkYXRhX3F1ZXVlX3FpZCBxdWV1ZSk7CiAKIAkvKgogCSAqIFJYIGNvbnRyb2wgaGFuZGxlcnMKQEAgLTYyNSw3ICs1NzgsNiBAQAogCURFVklDRV9TVEFURV9SRUdJU1RFUkVEX0hXLAogCURFVklDRV9TVEFURV9JTklUSUFMSVpFRCwKIAlERVZJQ0VfU1RBVEVfU1RBUlRFRCwKLQlERVZJQ0VfU1RBVEVfU1RBUlRFRF9TVVNQRU5ELAogCURFVklDRV9TVEFURV9FTkFCTEVEX1JBRElPLAogCURFVklDRV9TVEFURV9ESVNBQkxFRF9SQURJT19IVywKIApAQCAtNjM3LDYgKzU4OSw3IEBACiAJRFJJVkVSX1JFUVVJUkVfQVRJTV9RVUVVRSwKIAlEUklWRVJfUkVRVUlSRV9TQ0hFRFVMRUQsCiAJRFJJVkVSX1JFUVVJUkVfRE1BLAorCURSSVZFUl9SRVFVSVJFX0NPUFlfSVYsCiAKIAkvKgogCSAqIERyaXZlciBmZWF0dXJlcwpAQCAtNjUzLDcgKzYwNiw2IEBACiAJQ09ORklHX0VYVEVSTkFMX0xOQV9CRywKIAlDT05GSUdfRE9VQkxFX0FOVEVOTkEsCiAJQ09ORklHX0RJU0FCTEVfTElOS19UVU5JTkcsCi0JQ09ORklHX0NSWVBUT19DT1BZX0lWLAogfTsKIAogLyoKQEAgLTY4OSw4ICs2NDEsOCBAQAogCXVuc2lnbmVkIGxvbmcgcmZraWxsX3N0YXRlOwogI2RlZmluZSBSRktJTExfU1RBVEVfQUxMT0NBVEVECQkxCiAjZGVmaW5lIFJGS0lMTF9TVEFURV9SRUdJU1RFUkVECQkyCi0Jc3RydWN0IHJma2lsbCAqcmZraWxsOwotCXN0cnVjdCBkZWxheWVkX3dvcmsgcmZraWxsX3dvcms7CisjZGVmaW5lIFJGS0lMTF9TVEFURV9CTE9DS0VECQkzCisJc3RydWN0IGlucHV0X3BvbGxlZF9kZXYgKnJma2lsbF9wb2xsX2RldjsKICNlbmRpZiAvKiBDT05GSUdfUlQyWDAwX0xJQl9SRktJTEwgKi8KIAogCS8qCkBAIC05MTgsNyArODcwLDcgQEAKIAlyZXR1cm4gKGNoaXBzZXQtPnJmID09IGNoaXApOwogfQogCi1zdGF0aWMgaW5saW5lIHUxNiBydDJ4MDBfcmV2KGNvbnN0IHN0cnVjdCBydDJ4MDBfY2hpcCAqY2hpcHNldCkKK3N0YXRpYyBpbmxpbmUgdTMyIHJ0MngwMF9yZXYoY29uc3Qgc3RydWN0IHJ0MngwMF9jaGlwICpjaGlwc2V0KQogewogCXJldHVybiBjaGlwc2V0LT5yZXY7CiB9CkBAIC05ODIsNyArOTM0LDcgQEAKIAkJCQlpbnQgbWNfY291bnQsIHN0cnVjdCBkZXZfYWRkcl9saXN0ICptY19saXN0KTsKICNpZmRlZiBDT05GSUdfUlQyWDAwX0xJQl9DUllQVE8KIGludCBydDJ4MDBtYWNfc2V0X2tleShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgZW51bSBzZXRfa2V5X2NtZCBjbWQsCi0JCSAgICAgIGNvbnN0IHU4ICpsb2NhbF9hZGRyZXNzLCBjb25zdCB1OCAqYWRkcmVzcywKKwkJICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKIAkJICAgICAgc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5KTsKICNlbHNlCiAjZGVmaW5lIHJ0MngwMG1hY19zZXRfa2V5CU5VTEwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBjb25maWcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBjb25maWcuYwppbmRleCBlNjZmYjMxLi45YzJmNTUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwY29uZmlnLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGNvbmZpZy5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLQlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA4IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CisJQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOSBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAogCTxodHRwOi8vcnQyeDAwLnNlcmlhbG1vbmtleS5jb20+CiAKIAlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMzIsNyArMzIsNyBAQAogdm9pZCBydDJ4MDBsaWJfY29uZmlnX2ludGYoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKIAkJCSAgIHN0cnVjdCBydDJ4MDBfaW50ZiAqaW50ZiwKIAkJCSAgIGVudW0gbmw4MDIxMV9pZnR5cGUgdHlwZSwKLQkJCSAgIHU4ICptYWMsIHU4ICpic3NpZCkKKwkJCSAgIGNvbnN0IHU4ICptYWMsIGNvbnN0IHU4ICpic3NpZCkKIHsKIAlzdHJ1Y3QgcnQyeDAwaW50Zl9jb25mIGNvbmY7CiAJdW5zaWduZWQgaW50IGZsYWdzID0gMDsKQEAgLTQyLDYgKzQyLDggQEAKIAlzd2l0Y2ggKHR5cGUpIHsKIAljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgogCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6CisJY2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOgorCWNhc2UgTkw4MDIxMV9JRlRZUEVfV0RTOgogCQljb25mLnN5bmMgPSBUU0ZfU1lOQ19CRUFDT047CiAJCWJyZWFrOwogCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKQEAgLTE1Miw4ICsxNTQsNyBAQAogCSAqLwogCXJ0MngwMGRldi0+b3BzLT5saWItPmNvbmZpZ19hbnQocnQyeDAwZGV2LCBhbnQpOwogCi0JcnQyeDAwbGliX3Jlc2V0X2xpbmtfdHVuZXIocnQyeDAwZGV2KTsKLQlydDJ4MDBfcmVzZXRfbGlua19hbnRfcnNzaSgmcnQyeDAwZGV2LT5saW5rKTsKKwlydDJ4MDBsaW5rX3Jlc2V0X3R1bmVyKHJ0MngwMGRldiwgdHJ1ZSk7CiAKIAltZW1jcHkoYWN0aXZlLCBhbnQsIHNpemVvZigqYW50KSk7CiAKQEAgLTE5MSw3ICsxOTIsNyBAQAogCSAqIHdoaWNoIG1lYW5zIHdlIG5lZWQgdG8gcmVzZXQgdGhlIGxpbmsgdHVuZXIuCiAJICovCiAJaWYgKGllZWU4MDIxMV9mbGFncyAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9DSEFOTkVMKQotCQlydDJ4MDBsaWJfcmVzZXRfbGlua190dW5lcihydDJ4MDBkZXYpOworCQlydDJ4MDBsaW5rX3Jlc2V0X3R1bmVyKHJ0MngwMGRldiwgZmFsc2UpOwogCiAJcnQyeDAwZGV2LT5jdXJyX2JhbmQgPSBjb25mLT5jaGFubmVsLT5iYW5kOwogCXJ0MngwMGRldi0+dHhfcG93ZXIgPSBjb25mLT5wb3dlcl9sZXZlbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBjcnlwdG8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBjcnlwdG8uYwppbmRleCBhZWU5Y2JhLi4wYjQxODQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwY3J5cHRvLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGNyeXB0by5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLQlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA4IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CisJQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOSBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAogCTxodHRwOi8vcnQyeDAwLnNlcmlhbG1vbmtleS5jb20+CiAKIAlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtNDksOSArNDksMTQgQEAKIHZvaWQgcnQyeDAwY3J5cHRvX2NyZWF0ZV90eF9kZXNjcmlwdG9yKHN0cnVjdCBxdWV1ZV9lbnRyeSAqZW50cnksCiAJCQkJICAgICAgIHN0cnVjdCB0eGVudHJ5X2Rlc2MgKnR4ZGVzYykKIHsKKwlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0gZW50cnktPnF1ZXVlLT5ydDJ4MDBkZXY7CiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihlbnRyeS0+c2tiKTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICpod19rZXkgPSB0eF9pbmZvLT5jb250cm9sLmh3X2tleTsKIAorCWlmICghdGVzdF9iaXQoQ09ORklHX1NVUFBPUlRfSFdfQ1JZUFRPLCAmcnQyeDAwZGV2LT5mbGFncykgfHwKKwkgICAgIWh3X2tleSB8fCBlbnRyeS0+c2tiLT5kb19ub3RfZW5jcnlwdCkKKwkJcmV0dXJuOworCiAJX19zZXRfYml0KEVOVFJZX1RYRF9FTkNSWVBULCAmdHhkZXNjLT5mbGFncyk7CiAKIAl0eGRlc2MtPmNpcGhlciA9IHJ0MngwMGNyeXB0b19rZXlfdG9fY2lwaGVyKGh3X2tleSk7CkBAIC02OSwxMSArNzQsMTcgQEAKIAkJX19zZXRfYml0KEVOVFJZX1RYRF9FTkNSWVBUX01NSUMsICZ0eGRlc2MtPmZsYWdzKTsKIH0KIAotdW5zaWduZWQgaW50IHJ0MngwMGNyeXB0b190eF9vdmVyaGVhZChzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8pCit1bnNpZ25lZCBpbnQgcnQyeDAwY3J5cHRvX3R4X292ZXJoZWFkKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CiAJc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5ID0gdHhfaW5mby0+Y29udHJvbC5od19rZXk7CiAJdW5zaWduZWQgaW50IG92ZXJoZWFkID0gMDsKIAorCWlmICghdGVzdF9iaXQoQ09ORklHX1NVUFBPUlRfSFdfQ1JZUFRPLCAmcnQyeDAwZGV2LT5mbGFncykgfHwKKwkgICAgIWtleSB8fCBza2ItPmRvX25vdF9lbmNyeXB0KQorCQlyZXR1cm4gb3ZlcmhlYWQ7CisKIAkvKgogCSAqIEV4dGVuZCBmcmFtZSBsZW5ndGggdG8gaW5jbHVkZSBJVi9FSVYvSUNWL01NSUMsCiAJICogbm90ZSB0aGF0IHRoZXNlIGxlbmd0aHMgc2hvdWxkIG9ubHkgYmUgYWRkZWQgd2hlbgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGRlYnVnLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZGVidWcuYwppbmRleCA1NGRkMTAwLi4wN2QzNzhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZGVidWcuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZGVidWcuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0JQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOCBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAorCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDkgcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKIAk8aHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tPgogCiAJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTEzMCw5ICsxMzAsMTEgQEAKIH07CiAKIHZvaWQgcnQyeDAwZGVidWdfdXBkYXRlX2NyeXB0byhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAotCQkJICAgICAgIGVudW0gY2lwaGVyIGNpcGhlciwgZW51bSByeF9jcnlwdG8gc3RhdHVzKQorCQkJICAgICAgIHN0cnVjdCByeGRvbmVfZW50cnlfZGVzYyAqcnhkZXNjKQogewogCXN0cnVjdCBydDJ4MDBkZWJ1Z19pbnRmICppbnRmID0gcnQyeDAwZGV2LT5kZWJ1Z2ZzX2ludGY7CisJZW51bSBjaXBoZXIgY2lwaGVyID0gcnhkZXNjLT5jaXBoZXI7CisJZW51bSByeF9jcnlwdG8gc3RhdHVzID0gcnhkZXNjLT5jaXBoZXJfc3RhdHVzOwogCiAJaWYgKGNpcGhlciA9PSBDSVBIRVJfVEtJUF9OT19NSUMpCiAJCWNpcGhlciA9IENJUEhFUl9US0lQOwpAQCAtNDMzLDExICs0MzUsMTIgQEAKIAlpZiAoaW5kZXggPj0gZGVidWctPl9fbmFtZS53b3JkX2NvdW50KQkJCVwKIAkJcmV0dXJuIC1FSU5WQUw7CQkJCQlcCiAJCQkJCQkJCVwKKwlpbmRleCArPSAoZGVidWctPl9fbmFtZS53b3JkX2Jhc2UgLwkJCVwKKwkJICBkZWJ1Zy0+X19uYW1lLndvcmRfc2l6ZSk7CQkJXAorCQkJCQkJCQlcCiAJaWYgKGRlYnVnLT5fX25hbWUuZmxhZ3MgJiBSVDJYMDBERUJVR0ZTX09GRlNFVCkJCVwKIAkJaW5kZXggKj0gZGVidWctPl9fbmFtZS53b3JkX3NpemU7CQlcCiAJCQkJCQkJCVwKLQlpbmRleCArPSBkZWJ1Zy0+X19uYW1lLndvcmRfYmFzZTsJCQlcCi0JCQkJCQkJCVwKIAlkZWJ1Zy0+X19uYW1lLnJlYWQoaW50Zi0+cnQyeDAwZGV2LCBpbmRleCwgJnZhbHVlKTsJXAogCQkJCQkJCQlcCiAJc2l6ZSA9IHNwcmludGYobGluZSwgX19mb3JtYXQsIHZhbHVlKTsJCQlcCkBAIC00NzQsMTEgKzQ3NywxMiBAQAogCXNpemUgPSBzdHJsZW4obGluZSk7CQkJCQlcCiAJdmFsdWUgPSBzaW1wbGVfc3RydG91bChsaW5lLCBOVUxMLCAwKTsJCQlcCiAJCQkJCQkJCVwKKwlpbmRleCArPSAoZGVidWctPl9fbmFtZS53b3JkX2Jhc2UgLwkJCVwKKwkJICBkZWJ1Zy0+X19uYW1lLndvcmRfc2l6ZSk7CQkJXAorCQkJCQkJCQlcCiAJaWYgKGRlYnVnLT5fX25hbWUuZmxhZ3MgJiBSVDJYMDBERUJVR0ZTX09GRlNFVCkJCVwKIAkJaW5kZXggKj0gZGVidWctPl9fbmFtZS53b3JkX3NpemU7CQlcCiAJCQkJCQkJCVwKLQlpbmRleCArPSBkZWJ1Zy0+X19uYW1lLndvcmRfYmFzZTsJCQlcCi0JCQkJCQkJCVwKIAlkZWJ1Zy0+X19uYW1lLndyaXRlKGludGYtPnJ0MngwMGRldiwgaW5kZXgsIHZhbHVlKTsJXAogCQkJCQkJCQlcCiAJKm9mZnNldCArPSBzaXplOwkJCQkJXApAQCAtNTQzLDkgKzU0Nyw5IEBACiAJCXJldHVybiBOVUxMOwogCiAJYmxvYi0+ZGF0YSA9IGRhdGE7Ci0JZGF0YSArPSBzcHJpbnRmKGRhdGEsICJkcml2ZXI6ICVzXG4iLCBpbnRmLT5ydDJ4MDBkZXYtPm9wcy0+bmFtZSk7Ci0JZGF0YSArPSBzcHJpbnRmKGRhdGEsICJ2ZXJzaW9uOiAlc1xuIiwgRFJWX1ZFUlNJT04pOwotCWRhdGEgKz0gc3ByaW50ZihkYXRhLCAiY29tcGlsZWQ6ICVzICVzXG4iLCBfX0RBVEVfXywgX19USU1FX18pOworCWRhdGEgKz0gc3ByaW50ZihkYXRhLCAiZHJpdmVyOlx0JXNcbiIsIGludGYtPnJ0MngwMGRldi0+b3BzLT5uYW1lKTsKKwlkYXRhICs9IHNwcmludGYoZGF0YSwgInZlcnNpb246XHQlc1xuIiwgRFJWX1ZFUlNJT04pOworCWRhdGEgKz0gc3ByaW50ZihkYXRhLCAiY29tcGlsZWQ6XHQlcyAlc1xuIiwgX19EQVRFX18sIF9fVElNRV9fKTsKIAlibG9iLT5zaXplID0gc3RybGVuKGJsb2ItPmRhdGEpOwogCiAJcmV0dXJuIGRlYnVnZnNfY3JlYXRlX2Jsb2IobmFtZSwgU19JUlVTUiwgaW50Zi0+ZHJpdmVyX2ZvbGRlciwgYmxvYik7CkBAIC01NjYsMTQgKzU3MCwyNyBAQAogCQlyZXR1cm4gTlVMTDsKIAogCWJsb2ItPmRhdGEgPSBkYXRhOwotCWRhdGEgKz0gc3ByaW50ZihkYXRhLCAicnQgY2hpcDogJTA0eFxuIiwgaW50Zi0+cnQyeDAwZGV2LT5jaGlwLnJ0KTsKLQlkYXRhICs9IHNwcmludGYoZGF0YSwgInJmIGNoaXA6ICUwNHhcbiIsIGludGYtPnJ0MngwMGRldi0+Y2hpcC5yZik7Ci0JZGF0YSArPSBzcHJpbnRmKGRhdGEsICJyZXZpc2lvbjolMDh4XG4iLCBpbnRmLT5ydDJ4MDBkZXYtPmNoaXAucmV2KTsKKwlkYXRhICs9IHNwcmludGYoZGF0YSwgInJ0IGNoaXA6XHQlMDR4XG4iLCBpbnRmLT5ydDJ4MDBkZXYtPmNoaXAucnQpOworCWRhdGEgKz0gc3ByaW50ZihkYXRhLCAicmYgY2hpcDpcdCUwNHhcbiIsIGludGYtPnJ0MngwMGRldi0+Y2hpcC5yZik7CisJZGF0YSArPSBzcHJpbnRmKGRhdGEsICJyZXZpc2lvbjpcdCUwOHhcbiIsIGludGYtPnJ0MngwMGRldi0+Y2hpcC5yZXYpOwogCWRhdGEgKz0gc3ByaW50ZihkYXRhLCAiXG4iKTsKLQlkYXRhICs9IHNwcmludGYoZGF0YSwgImNzciBsZW5ndGg6ICVkXG4iLCBkZWJ1Zy0+Y3NyLndvcmRfY291bnQpOwotCWRhdGEgKz0gc3ByaW50ZihkYXRhLCAiZWVwcm9tIGxlbmd0aDogJWRcbiIsIGRlYnVnLT5lZXByb20ud29yZF9jb3VudCk7Ci0JZGF0YSArPSBzcHJpbnRmKGRhdGEsICJiYnAgbGVuZ3RoOiAlZFxuIiwgZGVidWctPmJicC53b3JkX2NvdW50KTsKLQlkYXRhICs9IHNwcmludGYoZGF0YSwgInJmIGxlbmd0aDogJWRcbiIsIGRlYnVnLT5yZi53b3JkX2NvdW50KTsKKwlkYXRhICs9IHNwcmludGYoZGF0YSwgInJlZ2lzdGVyXHRiYXNlXHR3b3Jkc1x0d29yZHNpemVcbiIpOworCWRhdGEgKz0gc3ByaW50ZihkYXRhLCAiY3NyXHQlZFx0JWRcdCVkXG4iLAorCQkJZGVidWctPmNzci53b3JkX2Jhc2UsCisJCQlkZWJ1Zy0+Y3NyLndvcmRfY291bnQsCisJCQlkZWJ1Zy0+Y3NyLndvcmRfc2l6ZSk7CisJZGF0YSArPSBzcHJpbnRmKGRhdGEsICJlZXByb21cdCVkXHQlZFx0JWRcbiIsCisJCQlkZWJ1Zy0+ZWVwcm9tLndvcmRfYmFzZSwKKwkJCWRlYnVnLT5lZXByb20ud29yZF9jb3VudCwKKwkJCWRlYnVnLT5lZXByb20ud29yZF9zaXplKTsKKwlkYXRhICs9IHNwcmludGYoZGF0YSwgImJicFx0JWRcdCVkXHQlZFxuIiwKKwkJCWRlYnVnLT5iYnAud29yZF9iYXNlLAorCQkJZGVidWctPmJicC53b3JkX2NvdW50LAorCQkJZGVidWctPmJicC53b3JkX3NpemUpOworCWRhdGEgKz0gc3ByaW50ZihkYXRhLCAicmZcdCVkXHQlZFx0JWRcbiIsCisJCQlkZWJ1Zy0+cmYud29yZF9iYXNlLAorCQkJZGVidWctPnJmLndvcmRfY291bnQsCisJCQlkZWJ1Zy0+cmYud29yZF9zaXplKTsKIAlibG9iLT5zaXplID0gc3RybGVuKGJsb2ItPmRhdGEpOwogCiAJcmV0dXJuIGRlYnVnZnNfY3JlYXRlX2Jsb2IobmFtZSwgU19JUlVTUiwgaW50Zi0+ZHJpdmVyX2ZvbGRlciwgYmxvYik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZGVidWcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZWJ1Zy5oCmluZGV4IGE5MjEwNGQuLjAzNWNiYzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZWJ1Zy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZWJ1Zy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLQlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA4IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CisJQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOSBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAogCTxodHRwOi8vcnQyeDAwLnNlcmlhbG1vbmtleS5jb20+CiAKIAlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGRldi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGRldi5jCmluZGV4IDg3YzBmMmMuLjA1Zjk0ZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZXYuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZGV2LmMKQEAgLTEsNSArMSw1IEBACiAvKgotCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDggcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKKwlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA5IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CiAJPGh0dHA6Ly9ydDJ4MDAuc2VyaWFsbW9ua2V5LmNvbT4KIAogCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC0zMCw2MCArMzAsNiBAQAogI2luY2x1ZGUgInJ0MngwMGxpYi5oIgogCiAvKgotICogTGluayB0dW5pbmcgaGFuZGxlcnMKLSAqLwotdm9pZCBydDJ4MDBsaWJfcmVzZXRfbGlua190dW5lcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQotewotCWlmICghdGVzdF9iaXQoREVWSUNFX1NUQVRFX0VOQUJMRURfUkFESU8sICZydDJ4MDBkZXYtPmZsYWdzKSkKLQkJcmV0dXJuOwotCi0JLyoKLQkgKiBSZXNldCBsaW5rIGluZm9ybWF0aW9uLgotCSAqIEJvdGggdGhlIGN1cnJlbnRseSBhY3RpdmUgdmdjIGxldmVsIGFzIHdlbGwgYXMKLQkgKiB0aGUgbGluayB0dW5lciBjb3VudGVyIHNob3VsZCBiZSByZXNldC4gUmVzZXR0aW5nCi0JICogdGhlIGNvdW50ZXIgaXMgaW1wb3J0YW50IGZvciBkZXZpY2VzIHdoZXJlIHRoZQotCSAqIGRldmljZSBzaG91bGQgb25seSBwZXJmb3JtIGxpbmsgdHVuaW5nIGR1cmluZyB0aGUKLQkgKiBmaXJzdCBtaW51dGUgYWZ0ZXIgYmVpbmcgZW5hYmxlZC4KLQkgKi8KLQlydDJ4MDBkZXYtPmxpbmsuY291bnQgPSAwOwotCXJ0MngwMGRldi0+bGluay52Z2NfbGV2ZWwgPSAwOwotCi0JLyoKLQkgKiBSZXNldCB0aGUgbGluayB0dW5lci4KLQkgKi8KLQlydDJ4MDBkZXYtPm9wcy0+bGliLT5yZXNldF90dW5lcihydDJ4MDBkZXYpOwotfQotCi1zdGF0aWMgdm9pZCBydDJ4MDBsaWJfc3RhcnRfbGlua190dW5lcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQotewotCS8qCi0JICogQ2xlYXIgYWxsIChwb3NzaWJseSkgcHJlLWV4aXN0aW5nIHF1YWxpdHkgc3RhdGlzdGljcy4KLQkgKi8KLQltZW1zZXQoJnJ0MngwMGRldi0+bGluay5xdWFsLCAwLCBzaXplb2YocnQyeDAwZGV2LT5saW5rLnF1YWwpKTsKLQotCS8qCi0JICogVGhlIFJYIGFuZCBUWCBwZXJjZW50YWdlIHNob3VsZCBzdGFydCBhdCA1MCUKLQkgKiB0aGlzIHdpbGwgYXNzdXJlIHdlIHdpbGwgZ2V0IGF0IGxlYXN0IGdldCBzb21lCi0JICogZGVjZW50IHZhbHVlIHdoZW4gdGhlIGxpbmsgdHVuZXIgc3RhcnRzLgotCSAqIFRoZSB2YWx1ZSB3aWxsIGJlIGRyb3BwZWQgYW5kIG92ZXJ3cml0dGVuIHdpdGgKLQkgKiB0aGUgY29ycmVjdCAobWVhc3VyZWQgKXZhbHVlIGFueXdheSBkdXJpbmcgdGhlCi0JICogZmlyc3QgcnVuIG9mIHRoZSBsaW5rIHR1bmVyLgotCSAqLwotCXJ0MngwMGRldi0+bGluay5xdWFsLnJ4X3BlcmNlbnRhZ2UgPSA1MDsKLQlydDJ4MDBkZXYtPmxpbmsucXVhbC50eF9wZXJjZW50YWdlID0gNTA7Ci0KLQlydDJ4MDBsaWJfcmVzZXRfbGlua190dW5lcihydDJ4MDBkZXYpOwotCi0JcXVldWVfZGVsYXllZF93b3JrKHJ0MngwMGRldi0+aHctPndvcmtxdWV1ZSwKLQkJCSAgICZydDJ4MDBkZXYtPmxpbmsud29yaywgTElOS19UVU5FX0lOVEVSVkFMKTsKLX0KLQotc3RhdGljIHZvaWQgcnQyeDAwbGliX3N0b3BfbGlua190dW5lcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQotewotCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcnQyeDAwZGV2LT5saW5rLndvcmspOwotfQotCi0vKgogICogUmFkaW8gY29udHJvbCBoYW5kbGVycy4KICAqLwogaW50IHJ0MngwMGxpYl9lbmFibGVfcmFkaW8oc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKQEAgLTEzNyw5ICs4MywxMCBAQAogCQlyZXR1cm47CiAKIAkvKgotCSAqIFN0b3AgdGhlIFRYIHF1ZXVlcy4KKwkgKiBTdG9wIHRoZSBUWCBxdWV1ZXMgaW4gbWFjODAyMTEuCiAJICovCiAJaWVlZTgwMjExX3N0b3BfcXVldWVzKHJ0MngwMGRldi0+aHcpOworCXJ0MngwMHF1ZXVlX3N0b3BfcXVldWVzKHJ0MngwMGRldik7CiAKIAkvKgogCSAqIERpc2FibGUgUlguCkBAIC0xNjEsMjM4ICsxMDgsMTUgQEAKIAkgKiBXaGVuIHdlIGFyZSBkaXNhYmxpbmcgdGhlIFJYLCB3ZSBzaG91bGQgYWxzbyBzdG9wIHRoZSBsaW5rIHR1bmVyLgogCSAqLwogCWlmIChzdGF0ZSA9PSBTVEFURV9SQURJT19SWF9PRkYpCi0JCXJ0MngwMGxpYl9zdG9wX2xpbmtfdHVuZXIocnQyeDAwZGV2KTsKKwkJcnQyeDAwbGlua19zdG9wX3R1bmVyKHJ0MngwMGRldik7CiAKIAlydDJ4MDBkZXYtPm9wcy0+bGliLT5zZXRfZGV2aWNlX3N0YXRlKHJ0MngwMGRldiwgc3RhdGUpOwogCiAJLyoKIAkgKiBXaGVuIHdlIGFyZSBlbmFibGluZyB0aGUgUlgsIHdlIHNob3VsZCBhbHNvIHN0YXJ0IHRoZSBsaW5rIHR1bmVyLgogCSAqLwotCWlmIChzdGF0ZSA9PSBTVEFURV9SQURJT19SWF9PTiAmJgotCSAgICAocnQyeDAwZGV2LT5pbnRmX2FwX2NvdW50IHx8IHJ0MngwMGRldi0+aW50Zl9zdGFfY291bnQpKQotCQlydDJ4MDBsaWJfc3RhcnRfbGlua190dW5lcihydDJ4MDBkZXYpOwotfQotCi1zdGF0aWMgdm9pZCBydDJ4MDBsaWJfZXZhbHVhdGVfYW50ZW5uYV9zYW1wbGUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKLXsKLQlzdHJ1Y3QgYW50ZW5uYV9zZXR1cCBhbnQ7Ci0JaW50IHNhbXBsZV9hID0KLQkgICAgcnQyeDAwX2dldF9saW5rX2FudF9yc3NpX2hpc3RvcnkoJnJ0MngwMGRldi0+bGluaywgQU5URU5OQV9BKTsKLQlpbnQgc2FtcGxlX2IgPQotCSAgICBydDJ4MDBfZ2V0X2xpbmtfYW50X3Jzc2lfaGlzdG9yeSgmcnQyeDAwZGV2LT5saW5rLCBBTlRFTk5BX0IpOwotCi0JbWVtY3B5KCZhbnQsICZydDJ4MDBkZXYtPmxpbmsuYW50LmFjdGl2ZSwgc2l6ZW9mKGFudCkpOwotCi0JLyoKLQkgKiBXZSBhcmUgZG9uZSBzYW1wbGluZy4gTm93IHdlIHNob3VsZCBldmFsdWF0ZSB0aGUgcmVzdWx0cy4KLQkgKi8KLQlydDJ4MDBkZXYtPmxpbmsuYW50LmZsYWdzICY9IH5BTlRFTk5BX01PREVfU0FNUExFOwotCi0JLyoKLQkgKiBEdXJpbmcgdGhlIGxhc3QgcGVyaW9kIHdlIGhhdmUgc2FtcGxlZCB0aGUgUlNTSQotCSAqIGZyb20gYm90aCBhbnRlbm5hJ3MuIEl0IG5vdyBpcyB0aW1lIHRvIGRldGVybWluZQotCSAqIHdoaWNoIGFudGVubmEgZGVtb25zdHJhdGVkIHRoZSBiZXN0IHBlcmZvcm1hbmNlLgotCSAqIFdoZW4gd2UgYXJlIGFscmVhZHkgb24gdGhlIGFudGVubmEgd2l0aCB0aGUgYmVzdAotCSAqIHBlcmZvcm1hbmNlLCB0aGVuIHRoZXJlIHJlYWxseSBpcyBub3RoaW5nIGZvciB1cwotCSAqIGxlZnQgdG8gZG8uCi0JICovCi0JaWYgKHNhbXBsZV9hID09IHNhbXBsZV9iKQotCQlyZXR1cm47Ci0KLQlpZiAocnQyeDAwZGV2LT5saW5rLmFudC5mbGFncyAmIEFOVEVOTkFfUlhfRElWRVJTSVRZKQotCQlhbnQucnggPSAoc2FtcGxlX2EgPiBzYW1wbGVfYikgPyBBTlRFTk5BX0EgOiBBTlRFTk5BX0I7Ci0KLQlpZiAocnQyeDAwZGV2LT5saW5rLmFudC5mbGFncyAmIEFOVEVOTkFfVFhfRElWRVJTSVRZKQotCQlhbnQudHggPSAoc2FtcGxlX2EgPiBzYW1wbGVfYikgPyBBTlRFTk5BX0EgOiBBTlRFTk5BX0I7Ci0KLQlydDJ4MDBsaWJfY29uZmlnX2FudGVubmEocnQyeDAwZGV2LCAmYW50KTsKLX0KLQotc3RhdGljIHZvaWQgcnQyeDAwbGliX2V2YWx1YXRlX2FudGVubmFfZXZhbChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQotewotCXN0cnVjdCBhbnRlbm5hX3NldHVwIGFudDsKLQlpbnQgcnNzaV9jdXJyID0gcnQyeDAwX2dldF9saW5rX2FudF9yc3NpKCZydDJ4MDBkZXYtPmxpbmspOwotCWludCByc3NpX29sZCA9IHJ0MngwMF91cGRhdGVfYW50X3Jzc2koJnJ0MngwMGRldi0+bGluaywgcnNzaV9jdXJyKTsKLQotCW1lbWNweSgmYW50LCAmcnQyeDAwZGV2LT5saW5rLmFudC5hY3RpdmUsIHNpemVvZihhbnQpKTsKLQotCS8qCi0JICogTGVnYWN5IGRyaXZlciBpbmRpY2F0ZXMgdGhhdCB3ZSBzaG91bGQgc3dhcCBhbnRlbm5hJ3MKLQkgKiB3aGVuIHRoZSBkaWZmZXJlbmNlIGluIFJTU0kgaXMgZ3JlYXRlciB0aGF0IDUuIFRoaXMKLQkgKiBhbHNvIHNob3VsZCBiZSBkb25lIHdoZW4gdGhlIFJTU0kgd2FzIGFjdHVhbGx5IGJldHRlcgotCSAqIHRoZW4gdGhlIHByZXZpb3VzIHNhbXBsZS4KLQkgKiBXaGVuIHRoZSBkaWZmZXJlbmNlIGV4Y2VlZHMgdGhlIHRocmVzaG9sZCB3ZSBzaG91bGQKLQkgKiBzYW1wbGUgdGhlIHJzc2kgZnJvbSB0aGUgb3RoZXIgYW50ZW5uYSB0byBtYWtlIGEgdmFsaWQKLQkgKiBjb21wYXJpc29uIGJldHdlZW4gdGhlIDIgYW50ZW5uYXMuCi0JICovCi0JaWYgKGFicyhyc3NpX2N1cnIgLSByc3NpX29sZCkgPCA1KQotCQlyZXR1cm47Ci0KLQlydDJ4MDBkZXYtPmxpbmsuYW50LmZsYWdzIHw9IEFOVEVOTkFfTU9ERV9TQU1QTEU7Ci0KLQlpZiAocnQyeDAwZGV2LT5saW5rLmFudC5mbGFncyAmIEFOVEVOTkFfUlhfRElWRVJTSVRZKQotCQlhbnQucnggPSAoYW50LnJ4ID09IEFOVEVOTkFfQSkgPyBBTlRFTk5BX0IgOiBBTlRFTk5BX0E7Ci0KLQlpZiAocnQyeDAwZGV2LT5saW5rLmFudC5mbGFncyAmIEFOVEVOTkFfVFhfRElWRVJTSVRZKQotCQlhbnQudHggPSAoYW50LnR4ID09IEFOVEVOTkFfQSkgPyBBTlRFTk5BX0IgOiBBTlRFTk5BX0E7Ci0KLQlydDJ4MDBsaWJfY29uZmlnX2FudGVubmEocnQyeDAwZGV2LCAmYW50KTsKLX0KLQotc3RhdGljIHZvaWQgcnQyeDAwbGliX2V2YWx1YXRlX2FudGVubmEoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKLXsKLQkvKgotCSAqIERldGVybWluZSBpZiBzb2Z0d2FyZSBkaXZlcnNpdHkgaXMgZW5hYmxlZCBmb3IKLQkgKiBlaXRoZXIgdGhlIFRYIG9yIFJYIGFudGVubmEgKG9yIGJvdGgpLgotCSAqIEFsd2F5cyBwZXJmb3JtIHRoaXMgY2hlY2sgc2luY2Ugd2l0aGluIHRoZSBsaW5rCi0JICogdHVuZXIgaW50ZXJ2YWwgdGhlIGNvbmZpZ3VyYXRpb24gbWlnaHQgaGF2ZSBjaGFuZ2VkLgotCSAqLwotCXJ0MngwMGRldi0+bGluay5hbnQuZmxhZ3MgJj0gfkFOVEVOTkFfUlhfRElWRVJTSVRZOwotCXJ0MngwMGRldi0+bGluay5hbnQuZmxhZ3MgJj0gfkFOVEVOTkFfVFhfRElWRVJTSVRZOwotCi0JaWYgKHJ0MngwMGRldi0+ZGVmYXVsdF9hbnQucnggPT0gQU5URU5OQV9TV19ESVZFUlNJVFkpCi0JCXJ0MngwMGRldi0+bGluay5hbnQuZmxhZ3MgfD0gQU5URU5OQV9SWF9ESVZFUlNJVFk7Ci0JaWYgKHJ0MngwMGRldi0+ZGVmYXVsdF9hbnQudHggPT0gQU5URU5OQV9TV19ESVZFUlNJVFkpCi0JCXJ0MngwMGRldi0+bGluay5hbnQuZmxhZ3MgfD0gQU5URU5OQV9UWF9ESVZFUlNJVFk7Ci0KLQlpZiAoIShydDJ4MDBkZXYtPmxpbmsuYW50LmZsYWdzICYgQU5URU5OQV9SWF9ESVZFUlNJVFkpICYmCi0JICAgICEocnQyeDAwZGV2LT5saW5rLmFudC5mbGFncyAmIEFOVEVOTkFfVFhfRElWRVJTSVRZKSkgewotCQlydDJ4MDBkZXYtPmxpbmsuYW50LmZsYWdzID0gMDsKLQkJcmV0dXJuOwotCX0KLQotCS8qCi0JICogSWYgd2UgaGF2ZSBvbmx5IHNhbXBsZWQgdGhlIGRhdGEgb3ZlciB0aGUgbGFzdCBwZXJpb2QKLQkgKiB3ZSBzaG91bGQgbm93IGhhcnZlc3QgdGhlIGRhdGEuIE90aGVyd2lzZSBqdXN0IGV2YWx1YXRlCi0JICogdGhlIGRhdGEuIFRoZSBsYXR0ZXIgc2hvdWxkIG9ubHkgYmUgcGVyZm9ybWVkIG9uY2UKLQkgKiBldmVyeSAyIHNlY29uZHMuCi0JICovCi0JaWYgKHJ0MngwMGRldi0+bGluay5hbnQuZmxhZ3MgJiBBTlRFTk5BX01PREVfU0FNUExFKQotCQlydDJ4MDBsaWJfZXZhbHVhdGVfYW50ZW5uYV9zYW1wbGUocnQyeDAwZGV2KTsKLQllbHNlIGlmIChydDJ4MDBkZXYtPmxpbmsuY291bnQgJiAxKQotCQlydDJ4MDBsaWJfZXZhbHVhdGVfYW50ZW5uYV9ldmFsKHJ0MngwMGRldik7Ci19Ci0KLXN0YXRpYyB2b2lkIHJ0MngwMGxpYl91cGRhdGVfbGlua19zdGF0cyhzdHJ1Y3QgbGluayAqbGluaywgaW50IHJzc2kpCi17Ci0JaW50IGF2Z19yc3NpID0gcnNzaTsKLQotCS8qCi0JICogVXBkYXRlIGdsb2JhbCBSU1NJCi0JICovCi0JaWYgKGxpbmstPnF1YWwuYXZnX3Jzc2kpCi0JCWF2Z19yc3NpID0gTU9WSU5HX0FWRVJBR0UobGluay0+cXVhbC5hdmdfcnNzaSwgcnNzaSwgOCk7Ci0JbGluay0+cXVhbC5hdmdfcnNzaSA9IGF2Z19yc3NpOwotCi0JLyoKLQkgKiBVcGRhdGUgYW50ZW5uYSBSU1NJCi0JICovCi0JaWYgKGxpbmstPmFudC5yc3NpX2FudCkKLQkJcnNzaSA9IE1PVklOR19BVkVSQUdFKGxpbmstPmFudC5yc3NpX2FudCwgcnNzaSwgOCk7Ci0JbGluay0+YW50LnJzc2lfYW50ID0gcnNzaTsKLX0KLQotc3RhdGljIHZvaWQgcnQyeDAwbGliX3ByZWNhbGN1bGF0ZV9saW5rX3NpZ25hbChzdHJ1Y3QgbGlua19xdWFsICpxdWFsKQotewotCWlmIChxdWFsLT5yeF9mYWlsZWQgfHwgcXVhbC0+cnhfc3VjY2VzcykKLQkJcXVhbC0+cnhfcGVyY2VudGFnZSA9Ci0JCSAgICAocXVhbC0+cnhfc3VjY2VzcyAqIDEwMCkgLwotCQkgICAgKHF1YWwtPnJ4X2ZhaWxlZCArIHF1YWwtPnJ4X3N1Y2Nlc3MpOwotCWVsc2UKLQkJcXVhbC0+cnhfcGVyY2VudGFnZSA9IDUwOwotCi0JaWYgKHF1YWwtPnR4X2ZhaWxlZCB8fCBxdWFsLT50eF9zdWNjZXNzKQotCQlxdWFsLT50eF9wZXJjZW50YWdlID0KLQkJICAgIChxdWFsLT50eF9zdWNjZXNzICogMTAwKSAvCi0JCSAgICAocXVhbC0+dHhfZmFpbGVkICsgcXVhbC0+dHhfc3VjY2Vzcyk7Ci0JZWxzZQotCQlxdWFsLT50eF9wZXJjZW50YWdlID0gNTA7Ci0KLQlxdWFsLT5yeF9zdWNjZXNzID0gMDsKLQlxdWFsLT5yeF9mYWlsZWQgPSAwOwotCXF1YWwtPnR4X3N1Y2Nlc3MgPSAwOwotCXF1YWwtPnR4X2ZhaWxlZCA9IDA7Ci19Ci0KLXN0YXRpYyBpbnQgcnQyeDAwbGliX2NhbGN1bGF0ZV9saW5rX3NpZ25hbChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAotCQkJCQkgICBpbnQgcnNzaSkKLXsKLQlpbnQgcnNzaV9wZXJjZW50YWdlID0gMDsKLQlpbnQgc2lnbmFsOwotCi0JLyoKLQkgKiBXZSBuZWVkIGEgcG9zaXRpdmUgdmFsdWUgZm9yIHRoZSBSU1NJLgotCSAqLwotCWlmIChyc3NpIDwgMCkKLQkJcnNzaSArPSBydDJ4MDBkZXYtPnJzc2lfb2Zmc2V0OwotCi0JLyoKLQkgKiBDYWxjdWxhdGUgdGhlIGRpZmZlcmVudCBwZXJjZW50YWdlcywKLQkgKiB3aGljaCB3aWxsIGJlIHVzZWQgZm9yIHRoZSBzaWduYWwuCi0JICovCi0JaWYgKHJ0MngwMGRldi0+cnNzaV9vZmZzZXQpCi0JCXJzc2lfcGVyY2VudGFnZSA9IChyc3NpICogMTAwKSAvIHJ0MngwMGRldi0+cnNzaV9vZmZzZXQ7Ci0KLQkvKgotCSAqIEFkZCB0aGUgaW5kaXZpZHVhbCBwZXJjZW50YWdlcyBhbmQgdXNlIHRoZSBXRUlHSFQKLQkgKiBkZWZpbmVzIHRvIGNhbGN1bGF0ZSB0aGUgY3VycmVudCBsaW5rIHNpZ25hbC4KLQkgKi8KLQlzaWduYWwgPSAoKFdFSUdIVF9SU1NJICogcnNzaV9wZXJjZW50YWdlKSArCi0JCSAgKFdFSUdIVF9UWCAqIHJ0MngwMGRldi0+bGluay5xdWFsLnR4X3BlcmNlbnRhZ2UpICsKLQkJICAoV0VJR0hUX1JYICogcnQyeDAwZGV2LT5saW5rLnF1YWwucnhfcGVyY2VudGFnZSkpIC8gMTAwOwotCi0JcmV0dXJuIChzaWduYWwgPiAxMDApID8gMTAwIDogc2lnbmFsOwotfQotCi1zdGF0aWMgdm9pZCBydDJ4MDBsaWJfbGlua190dW5lcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9Ci0JICAgIGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcnQyeDAwX2RldiwgbGluay53b3JrLndvcmspOwotCi0JLyoKLQkgKiBXaGVuIHRoZSByYWRpbyBpcyBzaHV0dGluZyBkb3duIHdlIHNob3VsZAotCSAqIGltbWVkaWF0ZWx5IGNlYXNlIGFsbCBsaW5rIHR1bmluZy4KLQkgKi8KLQlpZiAoIXRlc3RfYml0KERFVklDRV9TVEFURV9FTkFCTEVEX1JBRElPLCAmcnQyeDAwZGV2LT5mbGFncykpCi0JCXJldHVybjsKLQotCS8qCi0JICogVXBkYXRlIHN0YXRpc3RpY3MuCi0JICovCi0JcnQyeDAwZGV2LT5vcHMtPmxpYi0+bGlua19zdGF0cyhydDJ4MDBkZXYsICZydDJ4MDBkZXYtPmxpbmsucXVhbCk7Ci0JcnQyeDAwZGV2LT5sb3dfbGV2ZWxfc3RhdHMuZG90MTFGQ1NFcnJvckNvdW50ICs9Ci0JICAgIHJ0MngwMGRldi0+bGluay5xdWFsLnJ4X2ZhaWxlZDsKLQotCS8qCi0JICogT25seSBwZXJmb3JtIHRoZSBsaW5rIHR1bmluZyB3aGVuIExpbmsgdHVuaW5nCi0JICogaGFzIGJlZW4gZW5hYmxlZCAoVGhpcyBjb3VsZCBoYXZlIGJlZW4gZGlzYWJsZWQgZnJvbSB0aGUgRUVQUk9NKS4KLQkgKi8KLQlpZiAoIXRlc3RfYml0KENPTkZJR19ESVNBQkxFX0xJTktfVFVOSU5HLCAmcnQyeDAwZGV2LT5mbGFncykpCi0JCXJ0MngwMGRldi0+b3BzLT5saWItPmxpbmtfdHVuZXIocnQyeDAwZGV2KTsKLQotCS8qCi0JICogUHJlY2FsY3VsYXRlIGEgcG9ydGlvbiBvZiB0aGUgbGluayBzaWduYWwgd2hpY2ggaXMKLQkgKiBpbiBiYXNlZCBvbiB0aGUgdHgvcnggc3VjY2Vzcy9mYWlsdXJlIGNvdW50ZXJzLgotCSAqLwotCXJ0MngwMGxpYl9wcmVjYWxjdWxhdGVfbGlua19zaWduYWwoJnJ0MngwMGRldi0+bGluay5xdWFsKTsKLQotCS8qCi0JICogU2VuZCBhIHNpZ25hbCB0byB0aGUgbGVkIHRvIHVwZGF0ZSB0aGUgbGVkIHNpZ25hbCBzdHJlbmd0aC4KLQkgKi8KLQlydDJ4MDBsZWRzX2xlZF9xdWFsaXR5KHJ0MngwMGRldiwgcnQyeDAwZGV2LT5saW5rLnF1YWwuYXZnX3Jzc2kpOwotCi0JLyoKLQkgKiBFdmFsdWF0ZSBhbnRlbm5hIHNldHVwLCBtYWtlIHRoaXMgdGhlIGxhc3Qgc3RlcCBzaW5jZSB0aGlzIGNvdWxkCi0JICogcG9zc2libHkgcmVzZXQgc29tZSBzdGF0aXN0aWNzLgotCSAqLwotCXJ0MngwMGxpYl9ldmFsdWF0ZV9hbnRlbm5hKHJ0MngwMGRldik7Ci0KLQkvKgotCSAqIEluY3JlYXNlIHR1bmVyIGNvdW50ZXIsIGFuZCByZXNjaGVkdWxlIHRoZSBuZXh0IGxpbmsgdHVuZXIgcnVuLgotCSAqLwotCXJ0MngwMGRldi0+bGluay5jb3VudCsrOwotCXF1ZXVlX2RlbGF5ZWRfd29yayhydDJ4MDBkZXYtPmh3LT53b3JrcXVldWUsCi0JCQkgICAmcnQyeDAwZGV2LT5saW5rLndvcmssIExJTktfVFVORV9JTlRFUlZBTCk7CisJaWYgKHN0YXRlID09IFNUQVRFX1JBRElPX1JYX09OKQorCQlydDJ4MDBsaW5rX3N0YXJ0X3R1bmVyKHJ0MngwMGRldik7CiB9CiAKIHN0YXRpYyB2b2lkIHJ0MngwMGxpYl9wYWNrZXRmaWx0ZXJfc2NoZWR1bGVkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKQEAgLTQzNCw3ICsxNTgsNyBAQAogCQlyZXR1cm47CiAKIAlpZiAoZGVsYXllZF9mbGFncyAmIERFTEFZRURfVVBEQVRFX0JFQUNPTikKLQkJcnQyeDAwcXVldWVfdXBkYXRlX2JlYWNvbihydDJ4MDBkZXYsIHZpZik7CisJCXJ0MngwMHF1ZXVlX3VwZGF0ZV9iZWFjb24ocnQyeDAwZGV2LCB2aWYsIHRydWUpOwogCiAJaWYgKGRlbGF5ZWRfZmxhZ3MgJiBERUxBWUVEX0NPTkZJR19FUlApCiAJCXJ0MngwMGxpYl9jb25maWdfZXJwKHJ0MngwMGRldiwgaW50ZiwgJmNvbmYpOwpAQCAtNDY3LDcgKzE5MSw5IEBACiAJc3RydWN0IHJ0MngwMF9pbnRmICppbnRmID0gdmlmX3RvX2ludGYodmlmKTsKIAogCWlmICh2aWYtPnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQVAgJiYKLQkgICAgdmlmLT50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FESE9DKQorCSAgICB2aWYtPnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgJiYKKwkgICAgdmlmLT50eXBlICE9IE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQgJiYKKwkgICAgdmlmLT50eXBlICE9IE5MODAyMTFfSUZUWVBFX1dEUykKIAkJcmV0dXJuOwogCiAJLyoKQEAgLTQ5MCw3ICsyMTYsNyBAQAogCQkJCQkJICAgcnQyeDAwbGliX2JlYWNvbmRvbmVfaXRlciwKIAkJCQkJCSAgIHJ0MngwMGRldik7CiAKLQlzY2hlZHVsZV93b3JrKCZydDJ4MDBkZXYtPmludGZfd29yayk7CisJcXVldWVfd29yayhydDJ4MDBkZXYtPmh3LT53b3JrcXVldWUsICZydDJ4MDBkZXYtPmludGZfd29yayk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChydDJ4MDBsaWJfYmVhY29uZG9uZSk7CiAKQEAgLTU5Nyw3ICszMjMsNiBAQAogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cyA9ICZydDJ4MDBkZXYtPnJ4X3N0YXR1czsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwogCWNvbnN0IHN0cnVjdCBydDJ4MDBfcmF0ZSAqcmF0ZTsKIAl1bnNpZ25lZCBpbnQgaGVhZGVyX2xlbmd0aDsKIAl1bnNpZ25lZCBpbnQgYWxpZ247CkBAIC02NjgsMzAgKzM5MywyMiBAQAogCiAJaWYgKGlkeCA8IDApIHsKIAkJV0FSTklORyhydDJ4MDBkZXYsICJGcmFtZSByZWNlaXZlZCB3aXRoIHVucmVjb2duaXplZCBzaWduYWwsIgotCQkJInNpZ25hbD0weCUuMngsIHBsY3A9JWQuXG4iLCByeGRlc2Muc2lnbmFsLAotCQkJISEocnhkZXNjLmRldl9mbGFncyAmIFJYRE9ORV9TSUdOQUxfUExDUCkpOworCQkJInNpZ25hbD0weCUuMngsIHR5cGU9JWQuXG4iLCByeGRlc2Muc2lnbmFsLAorCQkJKHJ4ZGVzYy5kZXZfZmxhZ3MgJiBSWERPTkVfU0lHTkFMX01BU0spKTsKIAkJaWR4ID0gMDsKIAl9CiAKIAkvKgotCSAqIE9ubHkgdXBkYXRlIGxpbmsgc3RhdHVzIGlmIHRoaXMgaXMgYSBiZWFjb24gZnJhbWUgY2Fycnlpbmcgb3VyIGJzc2lkLgorCSAqIFVwZGF0ZSBleHRyYSBjb21wb25lbnRzCiAJICovCi0JaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopZW50cnktPnNrYi0+ZGF0YTsKLQlpZiAoaWVlZTgwMjExX2lzX2JlYWNvbihoZHItPmZyYW1lX2NvbnRyb2wpICYmCi0JICAgIChyeGRlc2MuZGV2X2ZsYWdzICYgUlhET05FX01ZX0JTUykpCi0JCXJ0MngwMGxpYl91cGRhdGVfbGlua19zdGF0cygmcnQyeDAwZGV2LT5saW5rLCByeGRlc2MucnNzaSk7Ci0KLQlydDJ4MDBkZWJ1Z191cGRhdGVfY3J5cHRvKHJ0MngwMGRldiwKLQkJCQkgIHJ4ZGVzYy5jaXBoZXIsCi0JCQkJICByeGRlc2MuY2lwaGVyX3N0YXR1cyk7Ci0KLQlydDJ4MDBkZXYtPmxpbmsucXVhbC5yeF9zdWNjZXNzKys7CisJcnQyeDAwbGlua191cGRhdGVfc3RhdHMocnQyeDAwZGV2LCBlbnRyeS0+c2tiLCAmcnhkZXNjKTsKKwlydDJ4MDBkZWJ1Z191cGRhdGVfY3J5cHRvKHJ0MngwMGRldiwgJnJ4ZGVzYyk7CiAKIAlyeF9zdGF0dXMtPm1hY3RpbWUgPSByeGRlc2MudGltZXN0YW1wOwogCXJ4X3N0YXR1cy0+cmF0ZV9pZHggPSBpZHg7Ci0Jcnhfc3RhdHVzLT5xdWFsID0KLQkgICAgcnQyeDAwbGliX2NhbGN1bGF0ZV9saW5rX3NpZ25hbChydDJ4MDBkZXYsIHJ4ZGVzYy5yc3NpKTsKKwlyeF9zdGF0dXMtPnF1YWwgPSBydDJ4MDBsaW5rX2NhbGN1bGF0ZV9zaWduYWwocnQyeDAwZGV2LCByeGRlc2MucnNzaSk7CiAJcnhfc3RhdHVzLT5zaWduYWwgPSByeGRlc2MucnNzaTsKKwlyeF9zdGF0dXMtPm5vaXNlID0gcnhkZXNjLm5vaXNlOwogCXJ4X3N0YXR1cy0+ZmxhZyA9IHJ4ZGVzYy5mbGFnczsKIAlyeF9zdGF0dXMtPmFudGVubmEgPSBydDJ4MDBkZXYtPmxpbmsuYW50LmFjdGl2ZS5yeDsKIApAQCAtMTA2Nyw3ICs3ODQsOSBAQAogCWlmIChydDJ4MDBkZXYtPm9wcy0+YmNuLT5lbnRyeV9udW0gPiAwKQogCQlydDJ4MDBkZXYtPmh3LT53aXBoeS0+aW50ZXJmYWNlX21vZGVzIHw9CiAJCSAgICBCSVQoTkw4MDIxMV9JRlRZUEVfQURIT0MpIHwKLQkJICAgIEJJVChOTDgwMjExX0lGVFlQRV9BUCk7CisJCSAgICBCSVQoTkw4MDIxMV9JRlRZUEVfQVApIHwKKwkJICAgIEJJVChOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKSB8CisJCSAgICBCSVQoTkw4MDIxMV9JRlRZUEVfV0RTKTsKIAogCS8qCiAJICogTGV0IHRoZSBkcml2ZXIgcHJvYmUgdGhlIGRldmljZSB0byBkZXRlY3QgdGhlIGNhcGFiaWxpdGllcy4KQEAgLTEwODMsNyArODAyLDYgQEAKIAkgKi8KIAlJTklUX1dPUksoJnJ0MngwMGRldi0+aW50Zl93b3JrLCBydDJ4MDBsaWJfaW50Zl9zY2hlZHVsZWQpOwogCUlOSVRfV09SSygmcnQyeDAwZGV2LT5maWx0ZXJfd29yaywgcnQyeDAwbGliX3BhY2tldGZpbHRlcl9zY2hlZHVsZWQpOwotCUlOSVRfREVMQVlFRF9XT1JLKCZydDJ4MDBkZXYtPmxpbmsud29yaywgcnQyeDAwbGliX2xpbmtfdHVuZXIpOwogCiAJLyoKIAkgKiBBbGxvY2F0ZSBxdWV1ZSBhcnJheS4KQEAgLTExMDQsNiArODIyLDcgQEAKIAkvKgogCSAqIFJlZ2lzdGVyIGV4dHJhIGNvbXBvbmVudHMuCiAJICovCisJcnQyeDAwbGlua19yZWdpc3RlcihydDJ4MDBkZXYpOwogCXJ0MngwMGxlZHNfcmVnaXN0ZXIocnQyeDAwZGV2KTsKIAlydDJ4MDByZmtpbGxfYWxsb2NhdGUocnQyeDAwZGV2KTsKIAlydDJ4MDBkZWJ1Z19yZWdpc3RlcihydDJ4MDBkZXYpOwpAQCAtMTE2MywyMyArODgyLDE3IEBACiAjaWZkZWYgQ09ORklHX1BNCiBpbnQgcnQyeDAwbGliX3N1c3BlbmQoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCWludCByZXR2YWw7Ci0KIAlOT1RJQ0UocnQyeDAwZGV2LCAiR29pbmcgdG8gc2xlZXAuXG4iKTsKIAogCS8qCi0JICogT25seSBjb250aW51ZSBpZiBtYWM4MDIxMSBoYXMgb3BlbiBpbnRlcmZhY2VzLgorCSAqIFByZXZlbnQgbWFjODAyMTEgZnJvbSBhY2Nlc3NpbmcgZHJpdmVyIHdoaWxlIHN1c3BlbmRlZC4KIAkgKi8KLQlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChERVZJQ0VfU1RBVEVfUFJFU0VOVCwgJnJ0MngwMGRldi0+ZmxhZ3MpIHx8Ci0JICAgICF0ZXN0X2JpdChERVZJQ0VfU1RBVEVfU1RBUlRFRCwgJnJ0MngwMGRldi0+ZmxhZ3MpKQotCQlnb3RvIGV4aXQ7Ci0KLQlzZXRfYml0KERFVklDRV9TVEFURV9TVEFSVEVEX1NVU1BFTkQsICZydDJ4MDBkZXYtPmZsYWdzKTsKKwlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChERVZJQ0VfU1RBVEVfUFJFU0VOVCwgJnJ0MngwMGRldi0+ZmxhZ3MpKQorCQlyZXR1cm4gMDsKIAogCS8qCi0JICogRGlzYWJsZSByYWRpby4KKwkgKiBDbGVhbnVwIGFzIG11Y2ggYXMgcG9zc2libGUuCiAJICovCi0JcnQyeDAwbGliX3N0b3AocnQyeDAwZGV2KTsKIAlydDJ4MDBsaWJfdW5pbml0aWFsaXplKHJ0MngwMGRldik7CiAKIAkvKgpAQCAtMTE4OCw3ICs5MDEsNiBAQAogCXJ0MngwMGxlZHNfc3VzcGVuZChydDJ4MDBkZXYpOwogCXJ0MngwMGRlYnVnX2RlcmVnaXN0ZXIocnQyeDAwZGV2KTsKIAotZXhpdDoKIAkvKgogCSAqIFNldCBkZXZpY2UgbW9kZSB0byBzbGVlcCBmb3IgcG93ZXIgbWFuYWdlbWVudCwKIAkgKiBvbiBzb21lIGhhcmR3YXJlIHRoaXMgY2FsbCBzZWVtcyB0byBjb25zaXN0ZW50bHkgZmFpbC4KQEAgLTEyMDAsOCArOTEyLDcgQEAKIAkgKiB0aGUgcmFkaW8gYW5kIHRoZSBvdGhlciBjb21wb25lbnRzIGFscmVhZHkgZGlzYWJsZWQgdGhlCiAJICogZGV2aWNlIGlzIGFzIGdvb2QgYXMgZGlzYWJsZWQuCiAJICovCi0JcmV0dmFsID0gcnQyeDAwZGV2LT5vcHMtPmxpYi0+c2V0X2RldmljZV9zdGF0ZShydDJ4MDBkZXYsIFNUQVRFX1NMRUVQKTsKLQlpZiAocmV0dmFsKQorCWlmIChydDJ4MDBkZXYtPm9wcy0+bGliLT5zZXRfZGV2aWNlX3N0YXRlKHJ0MngwMGRldiwgU1RBVEVfU0xFRVApKQogCQlXQVJOSU5HKHJ0MngwMGRldiwgIkRldmljZSBmYWlsZWQgdG8gZW50ZXIgc2xlZXAgc3RhdGUsICIKIAkJCSJjb250aW51ZSBzdXNwZW5kaW5nLlxuIik7CiAKQEAgLTEyMDksMzIgKzkyMCw4IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChydDJ4MDBsaWJfc3VzcGVuZCk7CiAKLXN0YXRpYyB2b2lkIHJ0MngwMGxpYl9yZXN1bWVfaW50Zih2b2lkICpkYXRhLCB1OCAqbWFjLAotCQkJCSAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKLXsKLQlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0gZGF0YTsKLQlzdHJ1Y3QgcnQyeDAwX2ludGYgKmludGYgPSB2aWZfdG9faW50Zih2aWYpOwotCi0Jc3Bpbl9sb2NrKCZpbnRmLT5sb2NrKTsKLQotCXJ0MngwMGxpYl9jb25maWdfaW50ZihydDJ4MDBkZXYsIGludGYsCi0JCQkgICAgICB2aWYtPnR5cGUsIGludGYtPm1hYywgaW50Zi0+YnNzaWQpOwotCi0KLQkvKgotCSAqIE1hc3RlciBvciBBZC1ob2MgbW9kZSByZXF1aXJlIGEgbmV3IGJlYWNvbiB1cGRhdGUuCi0JICovCi0JaWYgKHZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCB8fAotCSAgICB2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCi0JCWludGYtPmRlbGF5ZWRfZmxhZ3MgfD0gREVMQVlFRF9VUERBVEVfQkVBQ09OOwotCi0Jc3Bpbl91bmxvY2soJmludGYtPmxvY2spOwotfQotCiBpbnQgcnQyeDAwbGliX3Jlc3VtZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQogewotCWludCByZXR2YWw7Ci0KIAlOT1RJQ0UocnQyeDAwZGV2LCAiV2FraW5nIHVwLlxuIik7CiAKIAkvKgpAQCAtMTI0NCw2MCArOTMxLDExIEBACiAJcnQyeDAwbGVkc19yZXN1bWUocnQyeDAwZGV2KTsKIAogCS8qCi0JICogT25seSBjb250aW51ZSBpZiBtYWM4MDIxMSBoYWQgb3BlbiBpbnRlcmZhY2VzLgotCSAqLwotCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KERFVklDRV9TVEFURV9TVEFSVEVEX1NVU1BFTkQsICZydDJ4MDBkZXYtPmZsYWdzKSkKLQkJcmV0dXJuIDA7Ci0KLQkvKgotCSAqIFJlaW5pdGlhbGl6ZSBkZXZpY2UgYW5kIGFsbCBhY3RpdmUgaW50ZXJmYWNlcy4KLQkgKi8KLQlyZXR2YWwgPSBydDJ4MDBsaWJfc3RhcnQocnQyeDAwZGV2KTsKLQlpZiAocmV0dmFsKQotCQlnb3RvIGV4aXQ7Ci0KLQkvKgotCSAqIFJlY29uZmlndXJlIGRldmljZS4KLQkgKi8KLQlyZXR2YWwgPSBydDJ4MDBtYWNfY29uZmlnKHJ0MngwMGRldi0+aHcsIH4wKTsKLQlpZiAocmV0dmFsKQotCQlnb3RvIGV4aXQ7Ci0KLQkvKgotCSAqIEl0ZXJhdG9yIG92ZXIgZWFjaCBhY3RpdmUgaW50ZXJmYWNlIHRvCi0JICogcmVjb25maWd1cmUgdGhlIGhhcmR3YXJlLgotCSAqLwotCWllZWU4MDIxMV9pdGVyYXRlX2FjdGl2ZV9pbnRlcmZhY2VzKHJ0MngwMGRldi0+aHcsCi0JCQkJCSAgICBydDJ4MDBsaWJfcmVzdW1lX2ludGYsIHJ0MngwMGRldik7Ci0KLQkvKgogCSAqIFdlIGFyZSByZWFkeSBhZ2FpbiB0byByZWNlaXZlIHJlcXVlc3RzIGZyb20gbWFjODAyMTEuCiAJICovCiAJc2V0X2JpdChERVZJQ0VfU1RBVEVfUFJFU0VOVCwgJnJ0MngwMGRldi0+ZmxhZ3MpOwogCi0JLyoKLQkgKiBJdCBpcyBwb3NzaWJsZSB0aGF0IGR1cmluZyB0aGF0IG1hYzgwMjExIGhhcyBhdHRlbXB0ZWQKLQkgKiB0byBzZW5kIGZyYW1lcyB3aGlsZSB3ZSB3ZXJlIHN1c3BlbmRpbmcgb3IgcmVzdW1pbmcuCi0JICogSW4gdGhhdCBjYXNlIHdlIGhhdmUgZGlzYWJsZWQgdGhlIFRYIHF1ZXVlIGFuZCBzaG91bGQKLQkgKiBub3cgZW5hYmxlIGl0IGFnYWluCi0JICovCi0JaWVlZTgwMjExX3dha2VfcXVldWVzKHJ0MngwMGRldi0+aHcpOwotCi0JLyoKLQkgKiBEdXJpbmcgaW50ZXJmYWNlIGl0ZXJhdGlvbiB3ZSBtaWdodCBoYXZlIGNoYW5nZWQgdGhlCi0JICogZGVsYXllZF9mbGFncywgdGltZSB0byBoYW5kbGVzIHRoZSBldmVudCBieSBjYWxsaW5nCi0JICogdGhlIHdvcmsgaGFuZGxlciBkaXJlY3RseS4KLQkgKi8KLQlydDJ4MDBsaWJfaW50Zl9zY2hlZHVsZWQoJnJ0MngwMGRldi0+aW50Zl93b3JrKTsKLQogCXJldHVybiAwOwotCi1leGl0OgotCXJ0MngwMGxpYl9zdG9wKHJ0MngwMGRldik7Ci0JcnQyeDAwbGliX3VuaW5pdGlhbGl6ZShydDJ4MDBkZXYpOwotCXJ0MngwMGRlYnVnX2RlcmVnaXN0ZXIocnQyeDAwZGV2KTsKLQotCXJldHVybiByZXR2YWw7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChydDJ4MDBsaWJfcmVzdW1lKTsKICNlbmRpZiAvKiBDT05GSUdfUE0gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkdW1wLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZHVtcC5oCmluZGV4IDcxNjljMjIuLmZkZWRiNTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkdW1wLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGR1bXAuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0JQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOCBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAorCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDkgcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKIAk8aHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tPgogCiAJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBmaXJtd2FyZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGZpcm13YXJlLmMKaW5kZXggYmFiMDVhNS4uZDJkZWVhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGZpcm13YXJlLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGZpcm13YXJlLmMKQEAgLTEsNSArMSw1IEBACiAvKgotCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDggcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKKwlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA5IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CiAJPGh0dHA6Ly9ydDJ4MDAuc2VyaWFsbW9ua2V5LmNvbT4KIAogCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC0zNSw3ICszNSw2IEBACiAJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKIAljaGFyICpmd19uYW1lOwogCWludCByZXR2YWw7Ci0JdTE2IGNyYzsKIAogCS8qCiAJICogUmVhZCBjb3JyZWN0IGZpcm13YXJlIGZyb20gaGFyZGRpc2suCkBAIC02MSwxNiArNjAsMjYgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JY3JjID0gcnQyeDAwZGV2LT5vcHMtPmxpYi0+Z2V0X2Zpcm13YXJlX2NyYyhmdy0+ZGF0YSwgZnctPnNpemUpOwotCWlmIChjcmMgIT0gKGZ3LT5kYXRhW2Z3LT5zaXplIC0gMl0gPDwgOCB8IGZ3LT5kYXRhW2Z3LT5zaXplIC0gMV0pKSB7Ci0JCUVSUk9SKHJ0MngwMGRldiwgIkZpcm13YXJlIGNoZWNrc3VtIGVycm9yLlxuIik7Ci0JCXJldHZhbCA9IC1FTk9FTlQ7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KIAlJTkZPKHJ0MngwMGRldiwgIkZpcm13YXJlIGRldGVjdGVkIC0gdmVyc2lvbjogJWQuJWQuXG4iLAogCSAgICAgZnctPmRhdGFbZnctPnNpemUgLSA0XSwgZnctPmRhdGFbZnctPnNpemUgLSAzXSk7CiAKKwlyZXR2YWwgPSBydDJ4MDBkZXYtPm9wcy0+bGliLT5jaGVja19maXJtd2FyZShydDJ4MDBkZXYsIGZ3LT5kYXRhLCBmdy0+c2l6ZSk7CisJc3dpdGNoIChyZXR2YWwpIHsKKwljYXNlIEZXX09LOgorCQlicmVhazsKKwljYXNlIEZXX0JBRF9DUkM6CisJCUVSUk9SKHJ0MngwMGRldiwgIkZpcm13YXJlIGNoZWNrc3VtIGVycm9yLlxuIik7CisJCWdvdG8gZXhpdDsKKwljYXNlIEZXX0JBRF9MRU5HVEg6CisJCUVSUk9SKHJ0MngwMGRldiwKKwkJICAgICAgIkludmFsaWQgZmlybXdhcmUgZmlsZSBsZW5ndGggKGxlbj0lenUpXG4iLCBmdy0+c2l6ZSk7CisJCWdvdG8gZXhpdDsKKwljYXNlIEZXX0JBRF9WRVJTSU9OOgorCQlFUlJPUihydDJ4MDBkZXYsCisJCSAgICAgICJDdXJyZW50IGZpcm13YXJlIGRvZXMgbm90IHN1cHBvcnQgZGV0ZWN0ZWQgY2hpcHNldC5cbiIpOworCQlnb3RvIGV4aXQ7CisJfTsKKwogCXJ0MngwMGRldi0+ZncgPSBmdzsKIAogCXJldHVybiAwOwpAQCAtNzgsNyArODcsNyBAQAogZXhpdDoKIAlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKIAotCXJldHVybiByZXR2YWw7CisJcmV0dXJuIC1FTk9FTlQ7CiB9CiAKIGludCBydDJ4MDBsaWJfbG9hZF9maXJtd2FyZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGxlZHMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBsZWRzLmMKaW5kZXggYTBjZDM1Yi4uNDk2NzFmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGxlZHMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbGVkcy5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLQlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA4IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CisJQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOSBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAogCTxodHRwOi8vcnQyeDAwLnNlcmlhbG1vbmtleS5jb20+CiAKIAlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMTM0LDcgKzEzNCw3IEBACiAJCSBydDJ4MDBkZXYtPm9wcy0+bmFtZSwgd2lwaHlfbmFtZShydDJ4MDBkZXYtPmh3LT53aXBoeSkpOwogCiAJaWYgKHJ0MngwMGRldi0+bGVkX3JhZGlvLmZsYWdzICYgTEVEX0lOSVRJQUxJWkVEKSB7Ci0JCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIiVzOnJhZGlvIiwgZGV2X25hbWUpOworCQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICIlczo6cmFkaW8iLCBkZXZfbmFtZSk7CiAKIAkJcmV0dmFsID0gcnQyeDAwbGVkc19yZWdpc3Rlcl9sZWQocnQyeDAwZGV2LAogCQkJCQkJICZydDJ4MDBkZXYtPmxlZF9yYWRpbywKQEAgLTE0NCw3ICsxNDQsNyBAQAogCX0KIAogCWlmIChydDJ4MDBkZXYtPmxlZF9hc3NvYy5mbGFncyAmIExFRF9JTklUSUFMSVpFRCkgewotCQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICIlczphc3NvYyIsIGRldl9uYW1lKTsKKwkJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiJXM6OmFzc29jIiwgZGV2X25hbWUpOwogCiAJCXJldHZhbCA9IHJ0MngwMGxlZHNfcmVnaXN0ZXJfbGVkKHJ0MngwMGRldiwKIAkJCQkJCSAmcnQyeDAwZGV2LT5sZWRfYXNzb2MsCkBAIC0xNTQsNyArMTU0LDcgQEAKIAl9CiAKIAlpZiAocnQyeDAwZGV2LT5sZWRfcXVhbC5mbGFncyAmIExFRF9JTklUSUFMSVpFRCkgewotCQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICIlczpxdWFsaXR5IiwgZGV2X25hbWUpOworCQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICIlczo6cXVhbGl0eSIsIGRldl9uYW1lKTsKIAogCQlyZXR2YWwgPSBydDJ4MDBsZWRzX3JlZ2lzdGVyX2xlZChydDJ4MDBkZXYsCiAJCQkJCQkgJnJ0MngwMGRldi0+bGVkX3F1YWwsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbGVkcy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGxlZHMuaAppbmRleCA5ZGY0YTQ5YmQuLjEwNDY5NzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBsZWRzLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGxlZHMuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0JQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOCBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAorCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDkgcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKIAk8aHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tPgogCiAJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBsaWIuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBsaWIuaAppbmRleCA4NmNkMjZmLi5hNjMxNjEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbGliLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGxpYi5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLQlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA4IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CisJQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOSBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAogCTxodHRwOi8vcnQyeDAwLnNlcmlhbG1vbmtleS5jb20+CiAKIAlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMzMsNyArMzMsNyBAQAogICogQm90aCB0aGUgbGluayB0dW5lciBhcyB0aGUgcmZraWxsIHdpbGwgYmUgY2FsbGVkIG9uY2UgcGVyIHNlY29uZC4KICAqLwogI2RlZmluZSBMSU5LX1RVTkVfSU5URVJWQUwJKCByb3VuZF9qaWZmaWVzX3JlbGF0aXZlKEhaKSApCi0jZGVmaW5lIFJGS0lMTF9QT0xMX0lOVEVSVkFMCSggcm91bmRfamlmZmllc19yZWxhdGl2ZShIWikgKQorI2RlZmluZSBSRktJTExfUE9MTF9JTlRFUlZBTAkoIDEwMDAgKQogCiAvKgogICogcnQyeDAwX3JhdGU6IFBlciByYXRlIGRldmljZSBpbmZvcm1hdGlvbgpAQCAtNjMsNyArNjMsNiBAQAogaW50IHJ0MngwMGxpYl9lbmFibGVfcmFkaW8oc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldik7CiB2b2lkIHJ0MngwMGxpYl9kaXNhYmxlX3JhZGlvKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpOwogdm9pZCBydDJ4MDBsaWJfdG9nZ2xlX3J4KHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsIGVudW0gZGV2X3N0YXRlIHN0YXRlKTsKLXZvaWQgcnQyeDAwbGliX3Jlc2V0X2xpbmtfdHVuZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldik7CiAKIC8qCiAgKiBJbml0aWFsaXphdGlvbiBoYW5kbGVycy4KQEAgLTc3LDcgKzc2LDcgQEAKIHZvaWQgcnQyeDAwbGliX2NvbmZpZ19pbnRmKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCiAJCQkgICBzdHJ1Y3QgcnQyeDAwX2ludGYgKmludGYsCiAJCQkgICBlbnVtIG5sODAyMTFfaWZ0eXBlIHR5cGUsCi0JCQkgICB1OCAqbWFjLCB1OCAqYnNzaWQpOworCQkJICAgY29uc3QgdTggKm1hYywgY29uc3QgdTggKmJzc2lkKTsKIHZvaWQgcnQyeDAwbGliX2NvbmZpZ19lcnAoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKIAkJCSAgc3RydWN0IHJ0MngwMF9pbnRmICppbnRmLAogCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpjb25mKTsKQEAgLTEyNCw5ICsxMjMsMTEgQEAKICAqIHJ0MngwMHF1ZXVlX3VwZGF0ZV9iZWFjb24gLSBTZW5kIG5ldyBiZWFjb24gZnJvbSBtYWM4MDIxMSB0byBoYXJkd2FyZQogICogQHJ0MngwMGRldjogUG9pbnRlciB0byAmc3RydWN0IHJ0MngwMF9kZXYuCiAgKiBAdmlmOiBJbnRlcmZhY2UgZm9yIHdoaWNoIHRoZSBiZWFjb24gc2hvdWxkIGJlIHVwZGF0ZWQuCisgKiBAZW5hYmxlX2JlYWNvbjogRW5hYmxlIGJlYWNvbmluZwogICovCiBpbnQgcnQyeDAwcXVldWVfdXBkYXRlX2JlYWNvbihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAotCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZik7CisJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJICAgICAgY29uc3QgYm9vbCBlbmFibGVfYmVhY29uKTsKIAogLyoqCiAgKiBydDJ4MDBxdWV1ZV9pbmRleF9pbmMgLSBJbmRleCBpbmNyZW1lbnRhdGlvbiBmdW5jdGlvbgpAQCAtMTQwLDYgKzE0MSwxNSBAQAogdm9pZCBydDJ4MDBxdWV1ZV9pbmRleF9pbmMoc3RydWN0IGRhdGFfcXVldWUgKnF1ZXVlLCBlbnVtIHF1ZXVlX2luZGV4IGluZGV4KTsKIAogLyoqCisgKiBydDJ4MDBxdWV1ZV9zdG9wX3F1ZXVlcyAtIEhhbHQgYWxsIGRhdGEgcXVldWVzCisgKiBAcnQyeDAwZGV2OiBQb2ludGVyIHRvICZzdHJ1Y3QgcnQyeDAwX2Rldi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgbG9vcCB0aHJvdWdoIGFsbCBhdmFpbGFibGUgcXVldWVzIHRvIHN0b3AKKyAqIGFueSBwZW5kaW5nIG91dGdvaW5nIGZyYW1lcy4KKyAqLwordm9pZCBydDJ4MDBxdWV1ZV9zdG9wX3F1ZXVlcyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KTsKKworLyoqCiAgKiBydDJ4MDBxdWV1ZV9pbml0X3F1ZXVlcyAtIEluaXRpYWxpemUgYWxsIGRhdGEgcXVldWVzCiAgKiBAcnQyeDAwZGV2OiBQb2ludGVyIHRvICZzdHJ1Y3QgcnQyeDAwX2Rldi4KICAqCkBAIC0xNTQsNiArMTY0LDgxIEBACiBpbnQgcnQyeDAwcXVldWVfYWxsb2NhdGUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldik7CiB2b2lkIHJ0MngwMHF1ZXVlX2ZyZWUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldik7CiAKKy8qKgorICogcnQyeDAwbGlua191cGRhdGVfc3RhdHMgLSBVcGRhdGUgbGluayBzdGF0aXN0aWNzIGZyb20gUlggZnJhbWUKKyAqIEBydDJ4MDBkZXY6IFBvaW50ZXIgdG8gJnN0cnVjdCBydDJ4MDBfZGV2LgorICogQHNrYjogUmVjZWl2ZWQgZnJhbWUKKyAqIEByeGRlc2M6IFJlY2VpdmVkIGZyYW1lIGRlc2NyaXB0b3IKKyAqCisgKiBVcGRhdGUgbGluayBzdGF0aXN0aWNzIGJhc2VkIG9uIHRoZSBpbmZvcm1hdGlvbiBmcm9tIHRoZQorICogcmVjZWl2ZWQgZnJhbWUgZGVzY3JpcHRvci4KKyAqLwordm9pZCBydDJ4MDBsaW5rX3VwZGF0ZV9zdGF0cyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICAgICBzdHJ1Y3Qgcnhkb25lX2VudHJ5X2Rlc2MgKnJ4ZGVzYyk7CisKKy8qKgorICogcnQyeDAwbGlua19jYWxjdWxhdGVfc2lnbmFsIC0gQ2FsY3VsYXRlIHNpZ25hbCBxdWFsaXR5CisgKiBAcnQyeDAwZGV2OiBQb2ludGVyIHRvICZzdHJ1Y3QgcnQyeDAwX2Rldi4KKyAqIEByc3NpOiBSWCBGcmFtZSBSU1NJCisgKgorICogQ2FsY3VsYXRlIHRoZSBzaWduYWwgcXVhbGl0eSBvZiBhIGZyYW1lIGJhc2VkIG9uIHRoZSByc3NpCisgKiBtZWFzdXJlZCBkdXJpbmcgdGhlIHJlY2VpdmluZyBvZiB0aGUgZnJhbWUgYW5kIHRoZSBnbG9iYWwKKyAqIGxpbmsgcXVhbGl0eSBzdGF0aXN0aWNzIG1lYXN1cmVkIHNpbmNlIHRoZSBzdGFydCBvZiB0aGUKKyAqIGxpbmsgdHVuaW5nLiBUaGUgcmVzdWx0IGlzIGEgdmFsdWUgYmV0d2VlbiAwIGFuZCAxMDAgd2hpY2gKKyAqIGlzIGFuIGluZGljYXRpb24gb2YgdGhlIHNpZ25hbCBxdWFsaXR5LgorICovCitpbnQgcnQyeDAwbGlua19jYWxjdWxhdGVfc2lnbmFsKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsIGludCByc3NpKTsKKworLyoqCisgKiBydDJ4MDBsaW5rX3N0YXJ0X3R1bmVyIC0gU3RhcnQgcGVyaW9kaWMgbGluayB0dW5lciB3b3JrCisgKiBAcnQyeDAwZGV2OiBQb2ludGVyIHRvICZzdHJ1Y3QgcnQyeDAwX2Rldi4KKyAqCisgKiBUaGlzIHN0YXJ0IHRoZSBsaW5rIHR1bmVyIHBlcmlvZGljIHdvcmssIHRoaXMgd29yayB3aWxsCisgKiBiZSBleGVjdXRlZCBwZXJpb2RpY2FsbHkgdW50aWwgJnJ0MngwMGxpbmtfc3RvcF90dW5lciBoYXMKKyAqIGJlZW4gY2FsbGVkLgorICovCit2b2lkIHJ0MngwMGxpbmtfc3RhcnRfdHVuZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldik7CisKKy8qKgorICogcnQyeDAwbGlua19zdG9wX3R1bmVyIC0gU3RvcCBwZXJpb2RpYyBsaW5rIHR1bmVyIHdvcmsKKyAqIEBydDJ4MDBkZXY6IFBvaW50ZXIgdG8gJnN0cnVjdCBydDJ4MDBfZGV2LgorICoKKyAqIEFmdGVyIHRoaXMgZnVuY3Rpb24gY29tcGxldGVkIHRoZSBsaW5rIHR1bmVyIHdpbGwgbm90CisgKiBiZSBydW5uaW5nIHVudGlsICZydDJ4MDBsaW5rX3N0YXJ0X3R1bmVyIGlzIGNhbGxlZC4KKyAqLwordm9pZCBydDJ4MDBsaW5rX3N0b3BfdHVuZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldik7CisKKy8qKgorICogcnQyeDAwbGlua19yZXNldF90dW5lciAtIFJlc2V0IHBlcmlvZGljIGxpbmsgdHVuZXIgd29yaworICogQHJ0MngwMGRldjogUG9pbnRlciB0byAmc3RydWN0IHJ0MngwMF9kZXYuCisgKiBAYW50ZW5uYTogU2hvdWxkIHRoZSBhbnRlbm5hIHR1bmluZyBhbHNvIGJlIHJlc2V0CisgKgorICogVGhlIFZHQyBsaW1pdCBjb25maWd1cmVkIGluIHRoZSBoYXJkd2FyZSB3aWxsIGJlIHJlc2V0IHRvIDAKKyAqIHdoaWNoIGZvcmNlcyB0aGUgZHJpdmVyIHRvIHJlZGlzY292ZXIgdGhlIGNvcnJlY3QgdmFsdWUgZm9yCisgKiB0aGUgY3VycmVudCBhc3NvY2lhdGlvbi4gVGhpcyBpcyBuZWVkZWQgd2hlbiBjb25maWd1cmF0aW9uCisgKiBvcHRpb25zIGhhdmUgY2hhbmdlZCB3aGljaCBjb3VsZCBkcmFzdGljYWxseSBjaGFuZ2UgdGhlCisgKiBTTlIgbGV2ZWwgb3IgbGluayBxdWFsaXR5IChpLmUuIGNoYW5naW5nIHRoZSBhbnRlbm5hIHNldHRpbmcpLgorICoKKyAqIFJlc2V0dGluZyB0aGUgbGluayB0dW5lciB3aWxsIGFsc28gY2F1c2UgdGhlIHBlcmlvZGljIHdvcmsgY291bnRlcgorICogdG8gYmUgcmVzZXQuIEFueSBkcml2ZXIgd2hpY2ggaGFzIGEgZml4ZWQgbGltaXQgb24gdGhlIG51bWJlcgorICogb2Ygcm91bmRzIHRoZSBsaW5rIHR1bmVyIGlzIHN1cHBvc2VkIHRvIHdvcmsgd2lsbCBhY2NlcHQgdGhlCisgKiB0dW5lciBhY3Rpb25zIGFnYWluIGlmIHRoaXMgbGltaXQgd2FzIHByZXZpb3VzbHkgcmVhY2hlZC4KKyAqCisgKiBJZiBAYW50ZW5uYSBpcyBzZXQgdG8gdHJ1ZSBhIHRoZSBzb2Z0d2FyZSBhbnRlbm5hIGRpdmVyc2l0eQorICogdHVuaW5nIHdpbGwgYWxzbyBiZSByZXNldC4KKyAqLwordm9pZCBydDJ4MDBsaW5rX3Jlc2V0X3R1bmVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsIGJvb2wgYW50ZW5uYSk7CisKKy8qKgorICogcnQyeDAwbGlua19yZWdpc3RlciAtIEluaXRpYWxpemUgbGluayB0dW5pbmcgZnVuY3Rpb25hbGl0eQorICogQHJ0MngwMGRldjogUG9pbnRlciB0byAmc3RydWN0IHJ0MngwMF9kZXYuCisgKgorICogSW5pdGlhbGl6ZSB3b3JrIHN0cnVjdHVyZSBhbmQgYWxsIGxpbmsgdHVuaW5nIHJlbGF0ZWQKKyAqIHBhcmFtdGVycy4gVGhpcyB3aWxsIG5vdCBzdGFydCB0aGUgbGluayB0dW5pbmcgcHJvY2VzcyBpdHNlbGYuCisgKi8KK3ZvaWQgcnQyeDAwbGlua19yZWdpc3RlcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KTsKKwogLyoKICAqIEZpcm13YXJlIGhhbmRsZXJzLgogICovCkBAIC0xNzksNyArMjY0LDcgQEAKIHZvaWQgcnQyeDAwZGVidWdfZHVtcF9mcmFtZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAogCQkJICAgIGVudW0gcnQyeDAwX2R1bXBfdHlwZSB0eXBlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIHZvaWQgcnQyeDAwZGVidWdfdXBkYXRlX2NyeXB0byhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAotCQkJICAgICAgIGVudW0gY2lwaGVyIGNpcGhlciwgZW51bSByeF9jcnlwdG8gc3RhdHVzKTsKKwkJCSAgICAgICBzdHJ1Y3Qgcnhkb25lX2VudHJ5X2Rlc2MgKnJ4ZGVzYyk7CiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIHJ0MngwMGRlYnVnX3JlZ2lzdGVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCiB7CkBAIC0xOTYsOCArMjgxLDcgQEAKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHJ0MngwMGRlYnVnX3VwZGF0ZV9jcnlwdG8oc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKLQkJCQkJICAgICBlbnVtIGNpcGhlciBjaXBoZXIsCi0JCQkJCSAgICAgZW51bSByeF9jcnlwdG8gc3RhdHVzKQorCQkJCQkgICAgIHN0cnVjdCByeGRvbmVfZW50cnlfZGVzYyAqcnhkZXNjKQogewogfQogI2VuZGlmIC8qIENPTkZJR19SVDJYMDBfTElCX0RFQlVHRlMgKi8KQEAgLTIwOSw3ICsyOTMsOCBAQAogZW51bSBjaXBoZXIgcnQyeDAwY3J5cHRvX2tleV90b19jaXBoZXIoc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5KTsKIHZvaWQgcnQyeDAwY3J5cHRvX2NyZWF0ZV90eF9kZXNjcmlwdG9yKHN0cnVjdCBxdWV1ZV9lbnRyeSAqZW50cnksCiAJCQkJICAgICAgIHN0cnVjdCB0eGVudHJ5X2Rlc2MgKnR4ZGVzYyk7Ci11bnNpZ25lZCBpbnQgcnQyeDAwY3J5cHRvX3R4X292ZXJoZWFkKHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbyk7Cit1bnNpZ25lZCBpbnQgcnQyeDAwY3J5cHRvX3R4X292ZXJoZWFkKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiB2b2lkIHJ0MngwMGNyeXB0b190eF9jb3B5X2l2KHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBpdl9sZW4pOwogdm9pZCBydDJ4MDBjcnlwdG9fdHhfcmVtb3ZlX2l2KHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBpdl9sZW4pOwogdm9pZCBydDJ4MDBjcnlwdG9fdHhfaW5zZXJ0X2l2KHN0cnVjdCBza19idWZmICpza2IpOwpAQCAtMjI3LDcgKzMxMiw4IEBACiB7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHJ0MngwMGNyeXB0b190eF9vdmVyaGVhZChzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8pCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBydDJ4MDBjcnlwdG9fdHhfb3ZlcmhlYWQoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCQkJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGxpbmsuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBsaW5rLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ViNWNkNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBsaW5rLmMKQEAgLTAsMCArMSw0NzEgQEAKKy8qCisJQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOSBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAorCTxodHRwOi8vcnQyeDAwLnNlcmlhbG1vbmtleS5jb20+CisKKwlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisJdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKwkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisJVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisJYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKwlNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKwlHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisJWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKwlhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKwlGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisJNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisvKgorCU1vZHVsZTogcnQyeDAwbGliCisJQWJzdHJhY3Q6IHJ0MngwMCBnZW5lcmljIGxpbmsgdHVuaW5nIHJvdXRpbmVzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworI2luY2x1ZGUgInJ0MngwMC5oIgorI2luY2x1ZGUgInJ0MngwMGxpYi5oIgorCisvKgorICogV2hlbiB3ZSBsYWNrIFJTU0kgaW5mb3JtYXRpb24gcmV0dXJuIHNvbWV0aGluZyBsZXNzIHRoZW4gLTgwIHRvCisgKiB0ZWxsIHRoZSBkcml2ZXIgdG8gdHVuZSB0aGUgZGV2aWNlIHRvIG1heGltdW0gc2Vuc2l0aXZpdHkuCisgKi8KKyNkZWZpbmUgREVGQVVMVF9SU1NJCQktMTI4CisKKy8qCisgKiBXaGVuIG5vIFRYL1JYIHBlcmNlbnRhZ2UgY291bGQgYmUgY2FsY3VsYXRlZCBkdWUgdG8gbGFjayBvZgorICogZnJhbWVzIG9uIHRoZSBhaXIsIHdlIGZhbGxiYWNrIHRvIGEgcGVyY2VudGFnZSBvZiA1MCUuCisgKiBUaGlzIHdpbGwgYXNzdXJlIHdlIHdpbGwgZ2V0IGF0IGxlYXN0IGdldCBzb21lIGRlY2VudCB2YWx1ZQorICogd2hlbiB0aGUgbGluayB0dW5lciBzdGFydHMuCisgKiBUaGUgdmFsdWUgd2lsbCBiZSBkcm9wcGVkIGFuZCBvdmVyd3JpdHRlbiB3aXRoIHRoZSBjb3JyZWN0IChtZWFzdXJlZCkKKyAqIHZhbHVlIGFueXdheSBkdXJpbmcgdGhlIGZpcnN0IHJ1biBvZiB0aGUgbGluayB0dW5lci4KKyAqLworI2RlZmluZSBERUZBVUxUX1BFUkNFTlRBR0UJNTAKKworLyoKKyAqIFNtYWxsIGhlbHBlciBtYWNybyB0byB3b3JrIHdpdGggbW92aW5nL3dhbGtpbmcgYXZlcmFnZXMuCisgKiBXaGVuIGFkZGluZyBhIHZhbHVlIHRvIHRoZSBhdmVyYWdlIHZhbHVlIHRoZSBmb2xsb3dpbmcgY2FsY3VsYXRpb24KKyAqIGlzIG5lZWRlZDoKKyAqCisgKiAgICAgICAgYXZnX3Jzc2kgPSAoKGF2Z19yc3NpICogNykgKyByc3NpKSAvIDg7CisgKgorICogVGhlIGFkdmFudGFnZSBvZiB0aGlzIGFwcHJvYWNoIGlzIHRoYXQgd2Ugb25seSBuZWVkIDEgdmFyaWFibGUKKyAqIHRvIHN0b3JlIHRoZSBhdmVyYWdlIGluIChObyBuZWVkIGZvciBhIGNvdW50IGFuZCBhIHRvdGFsKS4KKyAqIEJ1dCBtb3JlIGltcG9ydGFudGx5LCBub3JtYWwgYXZlcmFnZSB2YWx1ZXMgd2lsbCBvdmVyIHRpbWUKKyAqIG1vdmUgbGVzcyBhbmQgbGVzcyB0b3dhcmRzIG5ld2x5IGFkZGVkIHZhbHVlcyB0aGlzIHJlc3VsdHMKKyAqIHRoYXQgd2l0aCBsaW5rIHR1bmluZywgdGhlIGRldmljZSBjYW4gaGF2ZSBhIHZlcnkgZ29vZCBSU1NJCisgKiBmb3IgYSBmZXcgbWludXRlcyBidXQgd2hlbiB0aGUgZGV2aWNlIGlzIG1vdmVkIGF3YXkgZnJvbSB0aGUgQVAKKyAqIHRoZSBhdmVyYWdlIHdpbGwgbm90IGRlY3JlYXNlIGZhc3QgZW5vdWdoIHRvIGNvbXBlbnNhdGUuCisgKiBUaGUgd2Fsa2luZyBhdmVyYWdlIGNvbXBlbnNhdGVzIHRoaXMgYW5kIHdpbGwgbW92ZSB0b3dhcmRzCisgKiB0aGUgbmV3IHZhbHVlcyBjb3JyZWN0bHkgYWxsb3dpbmcgYSBlZmZlY3RpdmUgbGluayB0dW5pbmcuCisgKi8KKyNkZWZpbmUgTU9WSU5HX0FWRVJBR0UoX19hdmcsIF9fdmFsLCBfX3NhbXBsZXMpIFwKKwkoICgoKF9fYXZnKSAqICgoX19zYW1wbGVzKSAtIDEpKSArIChfX3ZhbCkpIC8gKF9fc2FtcGxlcykgKQorCisvKgorICogU21hbGwgaGVscGVyIG1hY3JvIGZvciBwZXJjZW50YWdlIGNhbGN1bGF0aW9uCisgKiBUaGlzIGlzIGEgdmVyeSBzaW1wbGUgbWFjcm8gd2l0aCB0aGUgb25seSBjYXRjaCB0aGF0IGl0IHdpbGwKKyAqIHByb2R1Y2UgYSBkZWZhdWx0IHZhbHVlIGluIGNhc2Ugbm8gdG90YWwgdmFsdWUgd2FzIHByb3ZpZGVkLgorICovCisjZGVmaW5lIFBFUkNFTlRBR0UoX192YWx1ZSwgX190b3RhbCkgXAorCSggKF9fdG90YWwpID8gKCgoX192YWx1ZSkgKiAxMDApIC8gKF9fdG90YWwpKSA6IChERUZBVUxUX1BFUkNFTlRBR0UpICkKKworLyoKKyAqIEZvciBjYWxjdWxhdGluZyB0aGUgU2lnbmFsIHF1YWxpdHkgd2UgaGF2ZSBkZXRlcm1pbmVkCisgKiB0aGUgdG90YWwgbnVtYmVyIG9mIHN1Y2Nlc3MgYW5kIGZhaWxlZCBSWCBhbmQgVFggZnJhbWVzLgorICogV2l0aCB0aGUgYWRkaXRpb24gb2YgdGhlIGF2ZXJhZ2UgUlNTSSB2YWx1ZSB3ZSBjYW4gZGV0ZXJtaW5lCisgKiB0aGUgbGluayBxdWFsaXR5IHVzaW5nIHRoZSBmb2xsb3dpbmcgYWxnb3JpdGhtOgorICoKKyAqICAgICAgICAgcnNzaV9wZXJjZW50YWdlID0gKGF2Z19yc3NpICogMTAwKSAvIHJzc2lfb2Zmc2V0CisgKiAgICAgICAgIHJ4X3BlcmNlbnRhZ2UgPSAocnhfc3VjY2VzcyAqIDEwMCkgLyByeF90b3RhbAorICogICAgICAgICB0eF9wZXJjZW50YWdlID0gKHR4X3N1Y2Nlc3MgKiAxMDApIC8gdHhfdG90YWwKKyAqICAgICAgICAgYXZnX3NpZ25hbCA9ICgoV0VJR0hUX1JTU0kgKiBhdmdfcnNzaSkgKworICogICAgICAgICAgICAgICAgICAgICAgIChXRUlHSFRfVFggKiB0eF9wZXJjZW50YWdlKSArCisgKiAgICAgICAgICAgICAgICAgICAgICAgKFdFSUdIVF9SWCAqIHJ4X3BlcmNlbnRhZ2UpKSAvIDEwMAorICoKKyAqIFRoaXMgdmFsdWUgc2hvdWxkIHRoZW4gYmUgY2hlY2tlZCB0byBub3QgYmUgZ3JlYXRlciB0aGVuIDEwMC4KKyAqIFRoaXMgbWVhbnMgdGhlIHZhbHVlcyBvZiBXRUlHSFRfUlNTSSwgV0VJR0hUX1JYLCBXRUlHSFRfVFggbXVzdAorICogc3VtIHVwIHRvIDEwMCBhcyB3ZWxsLgorICovCisjZGVmaW5lIFdFSUdIVF9SU1NJCTIwCisjZGVmaW5lIFdFSUdIVF9SWAk0MAorI2RlZmluZSBXRUlHSFRfVFgJNDAKKworc3RhdGljIGludCBydDJ4MDBsaW5rX2FudGVubmFfZ2V0X2xpbmtfcnNzaShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQoreworCXN0cnVjdCBsaW5rX2FudCAqYW50ID0gJnJ0MngwMGRldi0+bGluay5hbnQ7CisKKwlpZiAoYW50LT5yc3NpX2FudCAmJiBydDJ4MDBkZXYtPmxpbmsucXVhbC5yeF9zdWNjZXNzKQorCQlyZXR1cm4gYW50LT5yc3NpX2FudDsKKwlyZXR1cm4gREVGQVVMVF9SU1NJOworfQorCitzdGF0aWMgaW50IHJ0MngwMGxpbmtfYW50ZW5uYV9nZXRfcnNzaV9oaXN0b3J5KHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkJCSAgICAgICBlbnVtIGFudGVubmEgYW50ZW5uYSkKK3sKKwlzdHJ1Y3QgbGlua19hbnQgKmFudCA9ICZydDJ4MDBkZXYtPmxpbmsuYW50OworCisJaWYgKGFudC0+cnNzaV9oaXN0b3J5W2FudGVubmEgLSBBTlRFTk5BX0FdKQorCQlyZXR1cm4gYW50LT5yc3NpX2hpc3RvcnlbYW50ZW5uYSAtIEFOVEVOTkFfQV07CisJcmV0dXJuIERFRkFVTFRfUlNTSTsKK30KKy8qIFNtYWxsIHdyYXBwZXIgZm9yIHJ0MngwMGxpbmtfYW50ZW5uYV9nZXRfcnNzaV9oaXN0b3J5KCkgKi8KKyNkZWZpbmUgcnQyeDAwbGlua19hbnRlbm5hX2dldF9yc3NpX3J4X2hpc3RvcnkoX19kZXYpIFwKKwlydDJ4MDBsaW5rX2FudGVubmFfZ2V0X3Jzc2lfaGlzdG9yeSgoX19kZXYpLCBcCisJCQkJCSAgICAoX19kZXYpLT5saW5rLmFudC5hY3RpdmUucngpCisjZGVmaW5lIHJ0MngwMGxpbmtfYW50ZW5uYV9nZXRfcnNzaV90eF9oaXN0b3J5KF9fZGV2KSBcCisJcnQyeDAwbGlua19hbnRlbm5hX2dldF9yc3NpX2hpc3RvcnkoKF9fZGV2KSwgXAorCQkJCQkgICAgKF9fZGV2KS0+bGluay5hbnQuYWN0aXZlLnR4KQorCitzdGF0aWMgdm9pZCBydDJ4MDBsaW5rX2FudGVubmFfdXBkYXRlX3Jzc2lfaGlzdG9yeShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJCQkJICAgZW51bSBhbnRlbm5hIGFudGVubmEsCisJCQkJCQkgICBpbnQgcnNzaSkKK3sKKwlzdHJ1Y3QgbGlua19hbnQgKmFudCA9ICZydDJ4MDBkZXYtPmxpbmsuYW50OworCWFudC0+cnNzaV9oaXN0b3J5W2FudC0+YWN0aXZlLnJ4IC0gQU5URU5OQV9BXSA9IHJzc2k7Cit9CisvKiBTbWFsbCB3cmFwcGVyIGZvciBydDJ4MDBsaW5rX2FudGVubmFfZ2V0X3Jzc2lfaGlzdG9yeSgpICovCisjZGVmaW5lIHJ0MngwMGxpbmtfYW50ZW5uYV91cGRhdGVfcnNzaV9yeF9oaXN0b3J5KF9fZGV2LCBfX3Jzc2kpIFwKKwlydDJ4MDBsaW5rX2FudGVubmFfdXBkYXRlX3Jzc2lfaGlzdG9yeSgoX19kZXYpLCBcCisJCQkJCSAgICAgICAoX19kZXYpLT5saW5rLmFudC5hY3RpdmUucngsIFwKKwkJCQkJICAgICAgIChfX3Jzc2kpKQorI2RlZmluZSBydDJ4MDBsaW5rX2FudGVubmFfdXBkYXRlX3Jzc2lfdHhfaGlzdG9yeShfX2RldiwgX19yc3NpKSBcCisJcnQyeDAwbGlua19hbnRlbm5hX3VwZGF0ZV9yc3NpX2hpc3RvcnkoKF9fZGV2KSwgXAorCQkJCQkgICAgICAgKF9fZGV2KS0+bGluay5hbnQuYWN0aXZlLnR4LCBcCisJCQkJCSAgICAgICAoX19yc3NpKSkKKworc3RhdGljIHZvaWQgcnQyeDAwbGlua19hbnRlbm5hX3Jlc2V0KHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCit7CisJcnQyeDAwZGV2LT5saW5rLmFudC5yc3NpX2FudCA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIHJ0MngwMGxpYl9hbnRlbm5hX2RpdmVyc2l0eV9zYW1wbGUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKK3sKKwlzdHJ1Y3QgbGlua19hbnQgKmFudCA9ICZydDJ4MDBkZXYtPmxpbmsuYW50OworCXN0cnVjdCBhbnRlbm5hX3NldHVwIG5ld19hbnQ7CisJaW50IHNhbXBsZV9hID0gcnQyeDAwbGlua19hbnRlbm5hX2dldF9yc3NpX2hpc3RvcnkocnQyeDAwZGV2LCBBTlRFTk5BX0EpOworCWludCBzYW1wbGVfYiA9IHJ0MngwMGxpbmtfYW50ZW5uYV9nZXRfcnNzaV9oaXN0b3J5KHJ0MngwMGRldiwgQU5URU5OQV9CKTsKKworCW1lbWNweSgmbmV3X2FudCwgJmFudC0+YWN0aXZlLCBzaXplb2YobmV3X2FudCkpOworCisJLyoKKwkgKiBXZSBhcmUgZG9uZSBzYW1wbGluZy4gTm93IHdlIHNob3VsZCBldmFsdWF0ZSB0aGUgcmVzdWx0cy4KKwkgKi8KKwlhbnQtPmZsYWdzICY9IH5BTlRFTk5BX01PREVfU0FNUExFOworCisJLyoKKwkgKiBEdXJpbmcgdGhlIGxhc3QgcGVyaW9kIHdlIGhhdmUgc2FtcGxlZCB0aGUgUlNTSQorCSAqIGZyb20gYm90aCBhbnRlbm5hJ3MuIEl0IG5vdyBpcyB0aW1lIHRvIGRldGVybWluZQorCSAqIHdoaWNoIGFudGVubmEgZGVtb25zdHJhdGVkIHRoZSBiZXN0IHBlcmZvcm1hbmNlLgorCSAqIFdoZW4gd2UgYXJlIGFscmVhZHkgb24gdGhlIGFudGVubmEgd2l0aCB0aGUgYmVzdAorCSAqIHBlcmZvcm1hbmNlLCB0aGVuIHRoZXJlIHJlYWxseSBpcyBub3RoaW5nIGZvciB1cworCSAqIGxlZnQgdG8gZG8uCisJICovCisJaWYgKHNhbXBsZV9hID09IHNhbXBsZV9iKQorCQlyZXR1cm47CisKKwlpZiAoYW50LT5mbGFncyAmIEFOVEVOTkFfUlhfRElWRVJTSVRZKQorCQluZXdfYW50LnJ4ID0gKHNhbXBsZV9hID4gc2FtcGxlX2IpID8gQU5URU5OQV9BIDogQU5URU5OQV9COworCisJaWYgKGFudC0+ZmxhZ3MgJiBBTlRFTk5BX1RYX0RJVkVSU0lUWSkKKwkJbmV3X2FudC50eCA9IChzYW1wbGVfYSA+IHNhbXBsZV9iKSA/IEFOVEVOTkFfQSA6IEFOVEVOTkFfQjsKKworCXJ0MngwMGxpYl9jb25maWdfYW50ZW5uYShydDJ4MDBkZXYsICZuZXdfYW50KTsKK30KKworc3RhdGljIHZvaWQgcnQyeDAwbGliX2FudGVubmFfZGl2ZXJzaXR5X2V2YWwoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKK3sKKwlzdHJ1Y3QgbGlua19hbnQgKmFudCA9ICZydDJ4MDBkZXYtPmxpbmsuYW50OworCXN0cnVjdCBhbnRlbm5hX3NldHVwIG5ld19hbnQ7CisJaW50IHJzc2lfY3VycjsKKwlpbnQgcnNzaV9vbGQ7CisKKwltZW1jcHkoJm5ld19hbnQsICZhbnQtPmFjdGl2ZSwgc2l6ZW9mKG5ld19hbnQpKTsKKworCS8qCisJICogR2V0IGN1cnJlbnQgUlNTSSB2YWx1ZSBhbG9uZyB3aXRoIHRoZSBoaXN0b3JpY2FsIHZhbHVlLAorCSAqIGFmdGVyIHRoYXQgdXBkYXRlIHRoZSBoaXN0b3J5IHdpdGggdGhlIGN1cnJlbnQgdmFsdWUuCisJICovCisJcnNzaV9jdXJyID0gcnQyeDAwbGlua19hbnRlbm5hX2dldF9saW5rX3Jzc2kocnQyeDAwZGV2KTsKKwlyc3NpX29sZCA9IHJ0MngwMGxpbmtfYW50ZW5uYV9nZXRfcnNzaV9yeF9oaXN0b3J5KHJ0MngwMGRldik7CisJcnQyeDAwbGlua19hbnRlbm5hX3VwZGF0ZV9yc3NpX3J4X2hpc3RvcnkocnQyeDAwZGV2LCByc3NpX2N1cnIpOworCisJLyoKKwkgKiBMZWdhY3kgZHJpdmVyIGluZGljYXRlcyB0aGF0IHdlIHNob3VsZCBzd2FwIGFudGVubmEncworCSAqIHdoZW4gdGhlIGRpZmZlcmVuY2UgaW4gUlNTSSBpcyBncmVhdGVyIHRoYXQgNS4gVGhpcworCSAqIGFsc28gc2hvdWxkIGJlIGRvbmUgd2hlbiB0aGUgUlNTSSB3YXMgYWN0dWFsbHkgYmV0dGVyCisJICogdGhlbiB0aGUgcHJldmlvdXMgc2FtcGxlLgorCSAqIFdoZW4gdGhlIGRpZmZlcmVuY2UgZXhjZWVkcyB0aGUgdGhyZXNob2xkIHdlIHNob3VsZAorCSAqIHNhbXBsZSB0aGUgcnNzaSBmcm9tIHRoZSBvdGhlciBhbnRlbm5hIHRvIG1ha2UgYSB2YWxpZAorCSAqIGNvbXBhcmlzb24gYmV0d2VlbiB0aGUgMiBhbnRlbm5hcy4KKwkgKi8KKwlpZiAoYWJzKHJzc2lfY3VyciAtIHJzc2lfb2xkKSA8IDUpCisJCXJldHVybjsKKworCWFudC0+ZmxhZ3MgfD0gQU5URU5OQV9NT0RFX1NBTVBMRTsKKworCWlmIChhbnQtPmZsYWdzICYgQU5URU5OQV9SWF9ESVZFUlNJVFkpCisJCW5ld19hbnQucnggPSAobmV3X2FudC5yeCA9PSBBTlRFTk5BX0EpID8gQU5URU5OQV9CIDogQU5URU5OQV9BOworCisJaWYgKGFudC0+ZmxhZ3MgJiBBTlRFTk5BX1RYX0RJVkVSU0lUWSkKKwkJbmV3X2FudC50eCA9IChuZXdfYW50LnR4ID09IEFOVEVOTkFfQSkgPyBBTlRFTk5BX0IgOiBBTlRFTk5BX0E7CisKKwlydDJ4MDBsaWJfY29uZmlnX2FudGVubmEocnQyeDAwZGV2LCAmbmV3X2FudCk7Cit9CisKK3N0YXRpYyB2b2lkIHJ0MngwMGxpYl9hbnRlbm5hX2RpdmVyc2l0eShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQoreworCXN0cnVjdCBsaW5rX2FudCAqYW50ID0gJnJ0MngwMGRldi0+bGluay5hbnQ7CisKKwkvKgorCSAqIERldGVybWluZSBpZiBzb2Z0d2FyZSBkaXZlcnNpdHkgaXMgZW5hYmxlZCBmb3IKKwkgKiBlaXRoZXIgdGhlIFRYIG9yIFJYIGFudGVubmEgKG9yIGJvdGgpLgorCSAqIEFsd2F5cyBwZXJmb3JtIHRoaXMgY2hlY2sgc2luY2Ugd2l0aGluIHRoZSBsaW5rCisJICogdHVuZXIgaW50ZXJ2YWwgdGhlIGNvbmZpZ3VyYXRpb24gbWlnaHQgaGF2ZSBjaGFuZ2VkLgorCSAqLworCWFudC0+ZmxhZ3MgJj0gfkFOVEVOTkFfUlhfRElWRVJTSVRZOworCWFudC0+ZmxhZ3MgJj0gfkFOVEVOTkFfVFhfRElWRVJTSVRZOworCisJaWYgKHJ0MngwMGRldi0+ZGVmYXVsdF9hbnQucnggPT0gQU5URU5OQV9TV19ESVZFUlNJVFkpCisJCWFudC0+ZmxhZ3MgfD0gQU5URU5OQV9SWF9ESVZFUlNJVFk7CisJaWYgKHJ0MngwMGRldi0+ZGVmYXVsdF9hbnQudHggPT0gQU5URU5OQV9TV19ESVZFUlNJVFkpCisJCWFudC0+ZmxhZ3MgfD0gQU5URU5OQV9UWF9ESVZFUlNJVFk7CisKKwlpZiAoIShhbnQtPmZsYWdzICYgQU5URU5OQV9SWF9ESVZFUlNJVFkpICYmCisJICAgICEoYW50LT5mbGFncyAmIEFOVEVOTkFfVFhfRElWRVJTSVRZKSkgeworCQlhbnQtPmZsYWdzID0gMDsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogSWYgd2UgaGF2ZSBvbmx5IHNhbXBsZWQgdGhlIGRhdGEgb3ZlciB0aGUgbGFzdCBwZXJpb2QKKwkgKiB3ZSBzaG91bGQgbm93IGhhcnZlc3QgdGhlIGRhdGEuIE90aGVyd2lzZSBqdXN0IGV2YWx1YXRlCisJICogdGhlIGRhdGEuIFRoZSBsYXR0ZXIgc2hvdWxkIG9ubHkgYmUgcGVyZm9ybWVkIG9uY2UKKwkgKiBldmVyeSAyIHNlY29uZHMuCisJICovCisJaWYgKGFudC0+ZmxhZ3MgJiBBTlRFTk5BX01PREVfU0FNUExFKQorCQlydDJ4MDBsaWJfYW50ZW5uYV9kaXZlcnNpdHlfc2FtcGxlKHJ0MngwMGRldik7CisJZWxzZSBpZiAocnQyeDAwZGV2LT5saW5rLmNvdW50ICYgMSkKKwkJcnQyeDAwbGliX2FudGVubmFfZGl2ZXJzaXR5X2V2YWwocnQyeDAwZGV2KTsKK30KKwordm9pZCBydDJ4MDBsaW5rX3VwZGF0ZV9zdGF0cyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICAgICBzdHJ1Y3Qgcnhkb25lX2VudHJ5X2Rlc2MgKnJ4ZGVzYykKK3sKKwlzdHJ1Y3QgbGluayAqbGluayA9ICZydDJ4MDBkZXYtPmxpbms7CisJc3RydWN0IGxpbmtfcXVhbCAqcXVhbCA9ICZydDJ4MDBkZXYtPmxpbmsucXVhbDsKKwlzdHJ1Y3QgbGlua19hbnQgKmFudCA9ICZydDJ4MDBkZXYtPmxpbmsuYW50OworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7CisJaW50IGF2Z19yc3NpID0gcnhkZXNjLT5yc3NpOworCWludCBhbnRfcnNzaSA9IHJ4ZGVzYy0+cnNzaTsKKworCS8qCisJICogRnJhbWUgd2FzIHJlY2VpdmVkIHN1Y2Nlc3NmdWxseSBzaW5jZSBub24tc3VjY2VzZnVsbAorCSAqIGZyYW1lcyB3b3VsZCBoYXZlIGJlZW4gZHJvcHBlZCBieSB0aGUgaGFyZHdhcmUuCisJICovCisJcXVhbC0+cnhfc3VjY2VzcysrOworCisJLyoKKwkgKiBXZSBhcmUgb25seSBpbnRlcmVzdGVkIGluIHF1YWxpdHkgc3RhdGlzdGljcyBmcm9tCisJICogYmVhY29ucyB3aGljaCBjYW1lIGZyb20gdGhlIEJTUyB3aGljaCB3ZSBhcmUKKwkgKiBhc3NvY2lhdGVkIHdpdGguCisJICovCisJaWYgKCFpZWVlODAyMTFfaXNfYmVhY29uKGhkci0+ZnJhbWVfY29udHJvbCkgfHwKKwkgICAgIShyeGRlc2MtPmRldl9mbGFncyAmIFJYRE9ORV9NWV9CU1MpKQorCQlyZXR1cm47CisKKwkvKgorCSAqIFVwZGF0ZSBnbG9iYWwgUlNTSQorCSAqLworCWlmIChsaW5rLT5hdmdfcnNzaSkKKwkJYXZnX3Jzc2kgPSBNT1ZJTkdfQVZFUkFHRShsaW5rLT5hdmdfcnNzaSwgcnhkZXNjLT5yc3NpLCA4KTsKKwlsaW5rLT5hdmdfcnNzaSA9IGF2Z19yc3NpOworCisJLyoKKwkgKiBVcGRhdGUgYW50ZW5uYSBSU1NJCisJICovCisJaWYgKGFudC0+cnNzaV9hbnQpCisJCWFudF9yc3NpID0gTU9WSU5HX0FWRVJBR0UoYW50LT5yc3NpX2FudCwgcnhkZXNjLT5yc3NpLCA4KTsKKwlhbnQtPnJzc2lfYW50ID0gYW50X3Jzc2k7Cit9CisKK3N0YXRpYyB2b2lkIHJ0MngwMGxpbmtfcHJlY2FsY3VsYXRlX3NpZ25hbChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQoreworCXN0cnVjdCBsaW5rICpsaW5rID0gJnJ0MngwMGRldi0+bGluazsKKwlzdHJ1Y3QgbGlua19xdWFsICpxdWFsID0gJnJ0MngwMGRldi0+bGluay5xdWFsOworCisJbGluay0+cnhfcGVyY2VudGFnZSA9CisJICAgIFBFUkNFTlRBR0UocXVhbC0+cnhfc3VjY2VzcywgcXVhbC0+cnhfZmFpbGVkICsgcXVhbC0+cnhfc3VjY2Vzcyk7CisJbGluay0+dHhfcGVyY2VudGFnZSA9CisJICAgIFBFUkNFTlRBR0UocXVhbC0+dHhfc3VjY2VzcywgcXVhbC0+dHhfZmFpbGVkICsgcXVhbC0+dHhfc3VjY2Vzcyk7Cit9CisKK2ludCBydDJ4MDBsaW5rX2NhbGN1bGF0ZV9zaWduYWwoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwgaW50IHJzc2kpCit7CisJc3RydWN0IGxpbmsgKmxpbmsgPSAmcnQyeDAwZGV2LT5saW5rOworCWludCByc3NpX3BlcmNlbnRhZ2UgPSAwOworCWludCBzaWduYWw7CisKKwkvKgorCSAqIFdlIG5lZWQgYSBwb3NpdGl2ZSB2YWx1ZSBmb3IgdGhlIFJTU0kuCisJICovCisJaWYgKHJzc2kgPCAwKQorCQlyc3NpICs9IHJ0MngwMGRldi0+cnNzaV9vZmZzZXQ7CisKKwkvKgorCSAqIENhbGN1bGF0ZSB0aGUgZGlmZmVyZW50IHBlcmNlbnRhZ2VzLAorCSAqIHdoaWNoIHdpbGwgYmUgdXNlZCBmb3IgdGhlIHNpZ25hbC4KKwkgKi8KKwlyc3NpX3BlcmNlbnRhZ2UgPSBQRVJDRU5UQUdFKHJzc2ksIHJ0MngwMGRldi0+cnNzaV9vZmZzZXQpOworCisJLyoKKwkgKiBBZGQgdGhlIGluZGl2aWR1YWwgcGVyY2VudGFnZXMgYW5kIHVzZSB0aGUgV0VJR0hUCisJICogZGVmaW5lcyB0byBjYWxjdWxhdGUgdGhlIGN1cnJlbnQgbGluayBzaWduYWwuCisJICovCisJc2lnbmFsID0gKChXRUlHSFRfUlNTSSAqIHJzc2lfcGVyY2VudGFnZSkgKworCQkgIChXRUlHSFRfVFggKiBsaW5rLT50eF9wZXJjZW50YWdlKSArCisJCSAgKFdFSUdIVF9SWCAqIGxpbmstPnJ4X3BlcmNlbnRhZ2UpKSAvIDEwMDsKKworCXJldHVybiBtYXhfdChpbnQsIHNpZ25hbCwgMTAwKTsKK30KKwordm9pZCBydDJ4MDBsaW5rX3N0YXJ0X3R1bmVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCit7CisJc3RydWN0IGxpbmsgKmxpbmsgPSAmcnQyeDAwZGV2LT5saW5rOworCisJLyoKKwkgKiBMaW5rIHR1bmluZyBzaG91bGQgb25seSBiZSBwZXJmb3JtZWQgd2hlbgorCSAqIGFuIGFjdGl2ZSBzdGEgb3IgbWFzdGVyIGludGVyZmFjZSBleGlzdHMuCisJICogU2luZ2xlIG1vbml0b3IgbW9kZSBpbnRlcmZhY2VzIHNob3VsZCBuZXZlciBoYXZlCisJICogd29yayB3aXRoIGxpbmsgdHVuZXJzLgorCSAqLworCWlmICghcnQyeDAwZGV2LT5pbnRmX2FwX2NvdW50ICYmICFydDJ4MDBkZXYtPmludGZfc3RhX2NvdW50KQorCQlyZXR1cm47CisKKwlsaW5rLT5yeF9wZXJjZW50YWdlID0gREVGQVVMVF9QRVJDRU5UQUdFOworCWxpbmstPnR4X3BlcmNlbnRhZ2UgPSBERUZBVUxUX1BFUkNFTlRBR0U7CisKKwlydDJ4MDBsaW5rX3Jlc2V0X3R1bmVyKHJ0MngwMGRldiwgZmFsc2UpOworCisJcXVldWVfZGVsYXllZF93b3JrKHJ0MngwMGRldi0+aHctPndvcmtxdWV1ZSwKKwkJCSAgICZsaW5rLT53b3JrLCBMSU5LX1RVTkVfSU5URVJWQUwpOworfQorCit2b2lkIHJ0MngwMGxpbmtfc3RvcF90dW5lcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQoreworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcnQyeDAwZGV2LT5saW5rLndvcmspOworfQorCit2b2lkIHJ0MngwMGxpbmtfcmVzZXRfdHVuZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwgYm9vbCBhbnRlbm5hKQoreworCXN0cnVjdCBsaW5rX3F1YWwgKnF1YWwgPSAmcnQyeDAwZGV2LT5saW5rLnF1YWw7CisKKwlpZiAoIXRlc3RfYml0KERFVklDRV9TVEFURV9FTkFCTEVEX1JBRElPLCAmcnQyeDAwZGV2LT5mbGFncykpCisJCXJldHVybjsKKworCS8qCisJICogUmVzZXQgbGluayBpbmZvcm1hdGlvbi4KKwkgKiBCb3RoIHRoZSBjdXJyZW50bHkgYWN0aXZlIHZnYyBsZXZlbCBhcyB3ZWxsIGFzCisJICogdGhlIGxpbmsgdHVuZXIgY291bnRlciBzaG91bGQgYmUgcmVzZXQuIFJlc2V0dGluZworCSAqIHRoZSBjb3VudGVyIGlzIGltcG9ydGFudCBmb3IgZGV2aWNlcyB3aGVyZSB0aGUKKwkgKiBkZXZpY2Ugc2hvdWxkIG9ubHkgcGVyZm9ybSBsaW5rIHR1bmluZyBkdXJpbmcgdGhlCisJICogZmlyc3QgbWludXRlIGFmdGVyIGJlaW5nIGVuYWJsZWQuCisJICovCisJcnQyeDAwZGV2LT5saW5rLmNvdW50ID0gMDsKKwltZW1zZXQocXVhbCwgMCwgc2l6ZW9mKCpxdWFsKSk7CisKKwkvKgorCSAqIFJlc2V0IHRoZSBsaW5rIHR1bmVyLgorCSAqLworCXJ0MngwMGRldi0+b3BzLT5saWItPnJlc2V0X3R1bmVyKHJ0MngwMGRldiwgcXVhbCk7CisKKwlpZiAoYW50ZW5uYSkKKwkJcnQyeDAwbGlua19hbnRlbm5hX3Jlc2V0KHJ0MngwMGRldik7Cit9CisKK3ZvaWQgcnQyeDAwbGlua19yZXNldF9xdWFsKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCit7CisJc3RydWN0IGxpbmtfcXVhbCAqcXVhbCA9ICZydDJ4MDBkZXYtPmxpbmsucXVhbDsKKworCXF1YWwtPnJ4X3N1Y2Nlc3MgPSAwOworCXF1YWwtPnJ4X2ZhaWxlZCA9IDA7CisJcXVhbC0+dHhfc3VjY2VzcyA9IDA7CisJcXVhbC0+dHhfZmFpbGVkID0gMDsKK30KKworc3RhdGljIHZvaWQgcnQyeDAwbGlua190dW5lcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9CisJICAgIGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcnQyeDAwX2RldiwgbGluay53b3JrLndvcmspOworCXN0cnVjdCBsaW5rICpsaW5rID0gJnJ0MngwMGRldi0+bGluazsKKwlzdHJ1Y3QgbGlua19xdWFsICpxdWFsID0gJnJ0MngwMGRldi0+bGluay5xdWFsOworCisJLyoKKwkgKiBXaGVuIHRoZSByYWRpbyBpcyBzaHV0dGluZyBkb3duIHdlIHNob3VsZAorCSAqIGltbWVkaWF0ZWx5IGNlYXNlIGFsbCBsaW5rIHR1bmluZy4KKwkgKi8KKwlpZiAoIXRlc3RfYml0KERFVklDRV9TVEFURV9FTkFCTEVEX1JBRElPLCAmcnQyeDAwZGV2LT5mbGFncykpCisJCXJldHVybjsKKworCS8qCisJICogVXBkYXRlIHN0YXRpc3RpY3MuCisJICovCisJcnQyeDAwZGV2LT5vcHMtPmxpYi0+bGlua19zdGF0cyhydDJ4MDBkZXYsIHF1YWwpOworCXJ0MngwMGRldi0+bG93X2xldmVsX3N0YXRzLmRvdDExRkNTRXJyb3JDb3VudCArPSBxdWFsLT5yeF9mYWlsZWQ7CisKKwkvKgorCSAqIFVwZGF0ZSBxdWFsaXR5IFJTU0kgZm9yIGxpbmsgdHVuaW5nLAorCSAqIHdoZW4gd2UgaGF2ZSByZWNlaXZlZCBzb21lIGZyYW1lcyBhbmQgd2UgbWFuYWdlZCB0bworCSAqIGNvbGxlY3QgdGhlIFJTU0kgZGF0YSB3ZSBjb3VsZCB1c2UgdGhpcy4gT3RoZXJ3aXNlIHdlCisJICogbXVzdCBmYWxsYmFjayB0byB0aGUgZGVmYXVsdCBSU1NJIHZhbHVlLgorCSAqLworCWlmICghbGluay0+YXZnX3Jzc2kgfHwgIXF1YWwtPnJ4X3N1Y2Nlc3MpCisJCXF1YWwtPnJzc2kgPSBERUZBVUxUX1JTU0k7CisJZWxzZQorCQlxdWFsLT5yc3NpID0gbGluay0+YXZnX3Jzc2k7CisKKwkvKgorCSAqIE9ubHkgcGVyZm9ybSB0aGUgbGluayB0dW5pbmcgd2hlbiBMaW5rIHR1bmluZworCSAqIGhhcyBiZWVuIGVuYWJsZWQgKFRoaXMgY291bGQgaGF2ZSBiZWVuIGRpc2FibGVkIGZyb20gdGhlIEVFUFJPTSkuCisJICovCisJaWYgKCF0ZXN0X2JpdChDT05GSUdfRElTQUJMRV9MSU5LX1RVTklORywgJnJ0MngwMGRldi0+ZmxhZ3MpKQorCQlydDJ4MDBkZXYtPm9wcy0+bGliLT5saW5rX3R1bmVyKHJ0MngwMGRldiwgcXVhbCwgbGluay0+Y291bnQpOworCisJLyoKKwkgKiBQcmVjYWxjdWxhdGUgYSBwb3J0aW9uIG9mIHRoZSBsaW5rIHNpZ25hbCB3aGljaCBpcworCSAqIGluIGJhc2VkIG9uIHRoZSB0eC9yeCBzdWNjZXNzL2ZhaWx1cmUgY291bnRlcnMuCisJICovCisJcnQyeDAwbGlua19wcmVjYWxjdWxhdGVfc2lnbmFsKHJ0MngwMGRldik7CisKKwkvKgorCSAqIFNlbmQgYSBzaWduYWwgdG8gdGhlIGxlZCB0byB1cGRhdGUgdGhlIGxlZCBzaWduYWwgc3RyZW5ndGguCisJICovCisJcnQyeDAwbGVkc19sZWRfcXVhbGl0eShydDJ4MDBkZXYsIGxpbmstPmF2Z19yc3NpKTsKKworCS8qCisJICogRXZhbHVhdGUgYW50ZW5uYSBzZXR1cCwgbWFrZSB0aGlzIHRoZSBsYXN0IHN0ZXAgc2luY2UgdGhpcyBjb3VsZAorCSAqIHBvc3NpYmx5IHJlc2V0IHNvbWUgc3RhdGlzdGljcy4KKwkgKi8KKwlydDJ4MDBsaWJfYW50ZW5uYV9kaXZlcnNpdHkocnQyeDAwZGV2KTsKKworCS8qCisJICogUmVzZXQgdGhlIHF1YWxpdHkgY291bnRlcnMgd2hpY2ggcmVjb3VudGVkIGR1cmluZyBlYWNoIHBlcmlvZC4KKwkgKi8KKwlydDJ4MDBsaW5rX3Jlc2V0X3F1YWwocnQyeDAwZGV2KTsKKworCS8qCisJICogSW5jcmVhc2UgdHVuZXIgY291bnRlciwgYW5kIHJlc2NoZWR1bGUgdGhlIG5leHQgbGluayB0dW5lciBydW4uCisJICovCisJbGluay0+Y291bnQrKzsKKwlxdWV1ZV9kZWxheWVkX3dvcmsocnQyeDAwZGV2LT5ody0+d29ya3F1ZXVlLAorCQkJICAgJmxpbmstPndvcmssIExJTktfVFVORV9JTlRFUlZBTCk7Cit9CisKK3ZvaWQgcnQyeDAwbGlua19yZWdpc3RlcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQoreworCUlOSVRfREVMQVlFRF9XT1JLKCZydDJ4MDBkZXYtPmxpbmsud29yaywgcnQyeDAwbGlua190dW5lcik7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbWFjLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbWFjLmMKaW5kZXggMzhlZGVlNS4uYzQxYTBiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMG1hYy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBtYWMuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0JQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOCBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAorCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDkgcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKIAk8aHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tPgogCiAJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTc5LDggKzc5LDcgQEAKIAkgKiBSVFMvQ1RTIGZyYW1lIHNob3VsZCB1c2UgdGhlIGxlbmd0aCBvZiB0aGUgZnJhbWUgcGx1cyBhbnkKIAkgKiBlbmNyeXB0aW9uIG92ZXJoZWFkIHRoYXQgd2lsbCBiZSBhZGRlZCBieSB0aGUgaGFyZHdhcmUuCiAJICovCi0JaWYgKCFmcmFnX3NrYi0+ZG9fbm90X2VuY3J5cHQpCi0JCWRhdGFfbGVuZ3RoICs9IHJ0MngwMGNyeXB0b190eF9vdmVyaGVhZCh0eF9pbmZvKTsKKwlkYXRhX2xlbmd0aCArPSBydDJ4MDBjcnlwdG9fdHhfb3ZlcmhlYWQocnQyeDAwZGV2LCBza2IpOwogCiAJaWYgKHR4X2luZm8tPmNvbnRyb2wucmF0ZXNbMF0uZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfVVNFX0NUU19QUk9URUNUKQogCQlpZWVlODAyMTFfY3RzdG9zZWxmX2dldChydDJ4MDBkZXYtPmh3LCB0eF9pbmZvLT5jb250cm9sLnZpZiwKQEAgLTIyNiw2ICsyMjUsOCBAQAogCQlicmVhazsKIAljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKKwljYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6CisJY2FzZSBOTDgwMjExX0lGVFlQRV9XRFM6CiAJCS8qCiAJCSAqIFdlIGRvbid0IHN1cHBvcnQgbWl4ZWQgY29tYmluYXRpb25zIG9mCiAJCSAqIHN0YSBhbmQgYXAgaW50ZXJmYWNlcy4KQEAgLTQzMCw4ICs0MzEsMTAgQEAKIAkvKgogCSAqIFVwZGF0ZSB0aGUgYmVhY29uLgogCSAqLwotCWlmIChjb25mLT5jaGFuZ2VkICYgSUVFRTgwMjExX0lGQ0NfQkVBQ09OKQotCQlzdGF0dXMgPSBydDJ4MDBxdWV1ZV91cGRhdGVfYmVhY29uKHJ0MngwMGRldiwgdmlmKTsKKwlpZiAoY29uZi0+Y2hhbmdlZCAmIChJRUVFODAyMTFfSUZDQ19CRUFDT04gfAorCQkJICAgICBJRUVFODAyMTFfSUZDQ19CRUFDT05fRU5BQkxFRCkpCisJCXN0YXR1cyA9IHJ0MngwMHF1ZXVlX3VwZGF0ZV9iZWFjb24ocnQyeDAwZGV2LCB2aWYsCisJCQkJCQkgICBjb25mLT5lbmFibGVfYmVhY29uKTsKIAogCXJldHVybiBzdGF0dXM7CiB9CkBAIC00ODIsMTYgKzQ4NSwzNiBAQAogRVhQT1JUX1NZTUJPTF9HUEwocnQyeDAwbWFjX2NvbmZpZ3VyZV9maWx0ZXIpOwogCiAjaWZkZWYgQ09ORklHX1JUMlgwMF9MSUJfQ1JZUFRPCitzdGF0aWMgdm9pZCBtZW1jcHlfdGtpcChzdHJ1Y3QgcnQyeDAwbGliX2NyeXB0byAqY3J5cHRvLCB1OCAqa2V5LCB1OCBrZXlfbGVuKQoreworCWlmIChrZXlfbGVuID4gTkw4MDIxMV9US0lQX0RBVEFfT0ZGU0VUX0VOQ1JfS0VZKQorCQltZW1jcHkoJmNyeXB0by0+a2V5LAorCQkgICAgICAgJmtleVtOTDgwMjExX1RLSVBfREFUQV9PRkZTRVRfRU5DUl9LRVldLAorCQkgICAgICAgc2l6ZW9mKGNyeXB0by0+a2V5KSk7CisKKwlpZiAoa2V5X2xlbiA+IE5MODAyMTFfVEtJUF9EQVRBX09GRlNFVF9UWF9NSUNfS0VZKQorCQltZW1jcHkoJmNyeXB0by0+dHhfbWljLAorCQkgICAgICAgJmtleVtOTDgwMjExX1RLSVBfREFUQV9PRkZTRVRfVFhfTUlDX0tFWV0sCisJCSAgICAgICBzaXplb2YoY3J5cHRvLT50eF9taWMpKTsKKworCWlmIChrZXlfbGVuID4gTkw4MDIxMV9US0lQX0RBVEFfT0ZGU0VUX1JYX01JQ19LRVkpCisJCW1lbWNweSgmY3J5cHRvLT5yeF9taWMsCisJCSAgICAgICAma2V5W05MODAyMTFfVEtJUF9EQVRBX09GRlNFVF9SWF9NSUNfS0VZXSwKKwkJICAgICAgIHNpemVvZihjcnlwdG8tPnJ4X21pYykpOworfQorCiBpbnQgcnQyeDAwbWFjX3NldF9rZXkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGVudW0gc2V0X2tleV9jbWQgY21kLAotCQkgICAgICBjb25zdCB1OCAqbG9jYWxfYWRkcmVzcywgY29uc3QgdTggKmFkZHJlc3MsCisJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCiAJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSkKIHsKIAlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0gaHctPnByaXY7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YTsKKwlzdHJ1Y3QgcnQyeDAwX2ludGYgKmludGYgPSB2aWZfdG9faW50Zih2aWYpOwogCWludCAoKnNldF9rZXkpIChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAogCQkJc3RydWN0IHJ0MngwMGxpYl9jcnlwdG8gKmNyeXB0bywKIAkJCXN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSk7CiAJc3RydWN0IHJ0MngwMGxpYl9jcnlwdG8gY3J5cHRvOworCXN0YXRpYyBjb25zdCB1OCBiY2FzdF9hZGRyW0VUSF9BTEVOXSA9CisJCXsgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgfTsKIAogCWlmICghdGVzdF9iaXQoREVWSUNFX1NUQVRFX1BSRVNFTlQsICZydDJ4MDBkZXYtPmZsYWdzKSkKIAkJcmV0dXJuIDA7CkBAIC01MDksNDUgKzUzMiwyNSBAQAogCWlmIChydDJ4MDBkZXYtPmludGZfc3RhX2NvdW50KQogCQljcnlwdG8uYnNzaWR4ID0gMDsKIAllbHNlCi0JCWNyeXB0by5ic3NpZHggPQotCQkgICAgbG9jYWxfYWRkcmVzc1s1XSAmIChydDJ4MDBkZXYtPm9wcy0+bWF4X2FwX2ludGYgLSAxKTsKKwkJY3J5cHRvLmJzc2lkeCA9IGludGYtPm1hY1s1XSAmIChydDJ4MDBkZXYtPm9wcy0+bWF4X2FwX2ludGYgLSAxKTsKIAogCWNyeXB0by5jaXBoZXIgPSBydDJ4MDBjcnlwdG9fa2V5X3RvX2NpcGhlcihrZXkpOwogCWlmIChjcnlwdG8uY2lwaGVyID09IENJUEhFUl9OT05FKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKIAljcnlwdG8uY21kID0gY21kOwotCWNyeXB0by5hZGRyZXNzID0gYWRkcmVzczsKIAotCWlmIChjcnlwdG8uY2lwaGVyID09IENJUEhFUl9US0lQKSB7Ci0JCWlmIChrZXktPmtleWxlbiA+IE5MODAyMTFfVEtJUF9EQVRBX09GRlNFVF9FTkNSX0tFWSkKLQkJCW1lbWNweSgmY3J5cHRvLmtleSwKLQkJCSAgICAgICAma2V5LT5rZXlbTkw4MDIxMV9US0lQX0RBVEFfT0ZGU0VUX0VOQ1JfS0VZXSwKLQkJCSAgICAgICBzaXplb2YoY3J5cHRvLmtleSkpOwotCi0JCWlmIChrZXktPmtleWxlbiA+IE5MODAyMTFfVEtJUF9EQVRBX09GRlNFVF9UWF9NSUNfS0VZKQotCQkJbWVtY3B5KCZjcnlwdG8udHhfbWljLAotCQkJICAgICAgICZrZXktPmtleVtOTDgwMjExX1RLSVBfREFUQV9PRkZTRVRfVFhfTUlDX0tFWV0sCi0JCQkgICAgICAgc2l6ZW9mKGNyeXB0by50eF9taWMpKTsKLQotCQlpZiAoa2V5LT5rZXlsZW4gPiBOTDgwMjExX1RLSVBfREFUQV9PRkZTRVRfUlhfTUlDX0tFWSkKLQkJCW1lbWNweSgmY3J5cHRvLnJ4X21pYywKLQkJCSAgICAgICAma2V5LT5rZXlbTkw4MDIxMV9US0lQX0RBVEFfT0ZGU0VUX1JYX01JQ19LRVldLAotCQkJICAgICAgIHNpemVvZihjcnlwdG8ucnhfbWljKSk7Ci0JfSBlbHNlCi0JCW1lbWNweSgmY3J5cHRvLmtleSwgJmtleS0+a2V5WzBdLCBrZXktPmtleWxlbik7Ci0KLQkvKgotCSAqIERpc2NvdmVyIHRoZSBBc3NvY2lhdGlvbiBJRCBmcm9tIG1hYzgwMjExLgotCSAqIFNvbWUgZHJpdmVycyBuZWVkIHRoaXMgaW5mb3JtYXRpb24gd2hlbiB1cGRhdGluZyB0aGUKLQkgKiBoYXJkd2FyZSBrZXkgKGVpdGhlciBhZGRpbmcgb3IgcmVtb3ZpbmcpLgotCSAqLwotCXJjdV9yZWFkX2xvY2soKTsKLQlzdGEgPSBpZWVlODAyMTFfZmluZF9zdGEoaHcsIGFkZHJlc3MpOwotCWlmIChzdGEpCisJaWYgKHN0YSkgeworCQkvKiBzb21lIGRyaXZlcnMgbmVlZCB0aGUgQUlEICovCiAJCWNyeXB0by5haWQgPSBzdGEtPmFpZDsKLQlyY3VfcmVhZF91bmxvY2soKTsKKwkJY3J5cHRvLmFkZHJlc3MgPSBzdGEtPmFkZHI7CisJfSBlbHNlCisJCWNyeXB0by5hZGRyZXNzID0gYmNhc3RfYWRkcjsKIAorCWlmIChjcnlwdG8uY2lwaGVyID09IENJUEhFUl9US0lQKQorCQltZW1jcHlfdGtpcCgmY3J5cHRvLCAma2V5LT5rZXlbMF0sIGtleS0+a2V5bGVuKTsKKwllbHNlCisJCW1lbWNweSgmY3J5cHRvLmtleSwgJmtleS0+a2V5WzBdLCBrZXktPmtleWxlbik7CiAJLyoKIAkgKiBFYWNoIEJTUyBoYXMgYSBtYXhpbXVtIG9mIDQgc2hhcmVkIGtleXMuCiAJICogU2hhcmVkIGtleSBpbmRleCB2YWx1ZXM6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcGNpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcGNpLmMKaW5kZXggZDUyYjIyYi4uZTYxNmMyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHBjaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBwY2kuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0JQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOCBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAorCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDkgcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKIAk8aHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tPgogCiAJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBwY2kuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBwY2kuaAppbmRleCA5YzBhNGQ3Li4xNWExMjQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcGNpLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHBjaS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLQlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA4IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CisJQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOSBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAogCTxodHRwOi8vcnQyeDAwLnNlcmlhbG1vbmtleS5jb20+CiAKIAlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHF1ZXVlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcXVldWUuYwppbmRleCAwNzA5ZGVjLi5hNTY2NGJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcXVldWUuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcXVldWUuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0JQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOCBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAorCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDkgcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKIAk8aHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tPgogCiAJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTE0OCwyMCArMTQ4LDEwNSBAQAogCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiB9CiAKK3N0YXRpYyB2b2lkIHJ0MngwMHF1ZXVlX2NyZWF0ZV90eF9kZXNjcmlwdG9yX3NlcShzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5LAorCQkJCQkJIHN0cnVjdCB0eGVudHJ5X2Rlc2MgKnR4ZGVzYykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKGVudHJ5LT5za2IpOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKillbnRyeS0+c2tiLT5kYXRhOworCXN0cnVjdCBydDJ4MDBfaW50ZiAqaW50ZiA9IHZpZl90b19pbnRmKHR4X2luZm8tPmNvbnRyb2wudmlmKTsKKwl1bnNpZ25lZCBsb25nIGlycWZsYWdzOworCisJaWYgKCEodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0FTU0lHTl9TRVEpIHx8CisJICAgIHVubGlrZWx5KCF0eF9pbmZvLT5jb250cm9sLnZpZikpCisJCXJldHVybjsKKworCS8qCisJICogSGFyZHdhcmUgc2hvdWxkIGluc2VydCBzZXF1ZW5jZSBjb3VudGVyLgorCSAqIEZJWE1FOiBXZSBpbnNlcnQgYSBzb2Z0d2FyZSBzZXF1ZW5jZSBjb3VudGVyIGZpcnN0IGZvcgorCSAqIGhhcmR3YXJlIHRoYXQgZG9lc24ndCBzdXBwb3J0IGhhcmR3YXJlIHNlcXVlbmNlIGNvdW50aW5nLgorCSAqCisJICogVGhpcyBpcyB3cm9uZyBiZWNhdXNlIGJlYWNvbnMgYXJlIG5vdCBnZXR0aW5nIHNlcXVlbmNlCisJICogbnVtYmVycyBhc3NpZ25lZCBwcm9wZXJseS4KKwkgKgorCSAqIEEgc2Vjb25kYXJ5IHByb2JsZW0gZXhpc3RzIGZvciBkcml2ZXJzIHRoYXQgY2Fubm90IHRvZ2dsZQorCSAqIHNlcXVlbmNlIGNvdW50aW5nIHBlci1mcmFtZSwgc2luY2UgdGhvc2Ugd2lsbCBvdmVycmlkZSB0aGUKKwkgKiBzZXF1ZW5jZSBjb3VudGVyIGdpdmVuIGJ5IG1hYzgwMjExLgorCSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZpbnRmLT5zZXFsb2NrLCBpcnFmbGFncyk7CisKKwlpZiAodGVzdF9iaXQoRU5UUllfVFhEX0ZJUlNUX0ZSQUdNRU5ULCAmdHhkZXNjLT5mbGFncykpCisJCWludGYtPnNlcW5vICs9IDB4MTA7CisJaGRyLT5zZXFfY3RybCAmPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfU0NUTF9GUkFHKTsKKwloZHItPnNlcV9jdHJsIHw9IGNwdV90b19sZTE2KGludGYtPnNlcW5vKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmludGYtPnNlcWxvY2ssIGlycWZsYWdzKTsKKworCV9fc2V0X2JpdChFTlRSWV9UWERfR0VORVJBVEVfU0VRLCAmdHhkZXNjLT5mbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIHJ0MngwMHF1ZXVlX2NyZWF0ZV90eF9kZXNjcmlwdG9yX3BsY3Aoc3RydWN0IHF1ZXVlX2VudHJ5ICplbnRyeSwKKwkJCQkJCSAgc3RydWN0IHR4ZW50cnlfZGVzYyAqdHhkZXNjLAorCQkJCQkJICBjb25zdCBzdHJ1Y3QgcnQyeDAwX3JhdGUgKmh3cmF0ZSkKK3sKKwlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0gZW50cnktPnF1ZXVlLT5ydDJ4MDBkZXY7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihlbnRyeS0+c2tiKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X3JhdGUgKnR4cmF0ZSA9ICZ0eF9pbmZvLT5jb250cm9sLnJhdGVzWzBdOworCXVuc2lnbmVkIGludCBkYXRhX2xlbmd0aDsKKwl1bnNpZ25lZCBpbnQgZHVyYXRpb247CisJdW5zaWduZWQgaW50IHJlc2lkdWFsOworCisJLyogRGF0YSBsZW5ndGggKyBDUkMgKyBDcnlwdG8gb3ZlcmhlYWQgKElWL0VJVi9JQ1YvTUlDKSAqLworCWRhdGFfbGVuZ3RoID0gZW50cnktPnNrYi0+bGVuICsgNDsKKwlkYXRhX2xlbmd0aCArPSBydDJ4MDBjcnlwdG9fdHhfb3ZlcmhlYWQocnQyeDAwZGV2LCBlbnRyeS0+c2tiKTsKKworCS8qCisJICogUExDUCBzZXR1cAorCSAqIExlbmd0aCBjYWxjdWxhdGlvbiBkZXBlbmRzIG9uIE9GRE0vQ0NLIHJhdGUuCisJICovCisJdHhkZXNjLT5zaWduYWwgPSBod3JhdGUtPnBsY3A7CisJdHhkZXNjLT5zZXJ2aWNlID0gMHgwNDsKKworCWlmIChod3JhdGUtPmZsYWdzICYgREVWX1JBVEVfT0ZETSkgeworCQl0eGRlc2MtPmxlbmd0aF9oaWdoID0gKGRhdGFfbGVuZ3RoID4+IDYpICYgMHgzZjsKKwkJdHhkZXNjLT5sZW5ndGhfbG93ID0gZGF0YV9sZW5ndGggJiAweDNmOworCX0gZWxzZSB7CisJCS8qCisJCSAqIENvbnZlcnQgbGVuZ3RoIHRvIG1pY3Jvc2Vjb25kcy4KKwkJICovCisJCXJlc2lkdWFsID0gR0VUX0RVUkFUSU9OX1JFUyhkYXRhX2xlbmd0aCwgaHdyYXRlLT5iaXRyYXRlKTsKKwkJZHVyYXRpb24gPSBHRVRfRFVSQVRJT04oZGF0YV9sZW5ndGgsIGh3cmF0ZS0+Yml0cmF0ZSk7CisKKwkJaWYgKHJlc2lkdWFsICE9IDApIHsKKwkJCWR1cmF0aW9uKys7CisKKwkJCS8qCisJCQkgKiBDaGVjayBpZiB3ZSBuZWVkIHRvIHNldCB0aGUgTGVuZ3RoIEV4dGVuc2lvbgorCQkJICovCisJCQlpZiAoaHdyYXRlLT5iaXRyYXRlID09IDExMCAmJiByZXNpZHVhbCA8PSAzMCkKKwkJCQl0eGRlc2MtPnNlcnZpY2UgfD0gMHg4MDsKKwkJfQorCisJCXR4ZGVzYy0+bGVuZ3RoX2hpZ2ggPSAoZHVyYXRpb24gPj4gOCkgJiAweGZmOworCQl0eGRlc2MtPmxlbmd0aF9sb3cgPSBkdXJhdGlvbiAmIDB4ZmY7CisKKwkJLyoKKwkJICogV2hlbiBwcmVhbWJsZSBpcyBlbmFibGVkIHdlIHNob3VsZCBzZXQgdGhlCisJCSAqIHByZWFtYmxlIGJpdCBmb3IgdGhlIHNpZ25hbC4KKwkJICovCisJCWlmICh0eHJhdGUtPmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX1VTRV9TSE9SVF9QUkVBTUJMRSkKKwkJCXR4ZGVzYy0+c2lnbmFsIHw9IDB4MDg7CisJfQorfQorCiBzdGF0aWMgdm9pZCBydDJ4MDBxdWV1ZV9jcmVhdGVfdHhfZGVzY3JpcHRvcihzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5LAogCQkJCQkgICAgIHN0cnVjdCB0eGVudHJ5X2Rlc2MgKnR4ZGVzYykKIHsKIAlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0gZW50cnktPnF1ZXVlLT5ydDJ4MDBkZXY7CiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihlbnRyeS0+c2tiKTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopZW50cnktPnNrYi0+ZGF0YTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X3JhdGUgKnR4cmF0ZSA9ICZ0eF9pbmZvLT5jb250cm9sLnJhdGVzWzBdOwogCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqcmF0ZSA9CiAJICAgIGllZWU4MDIxMV9nZXRfdHhfcmF0ZShydDJ4MDBkZXYtPmh3LCB0eF9pbmZvKTsKIAljb25zdCBzdHJ1Y3QgcnQyeDAwX3JhdGUgKmh3cmF0ZTsKLQl1bnNpZ25lZCBpbnQgZGF0YV9sZW5ndGg7Ci0JdW5zaWduZWQgaW50IGR1cmF0aW9uOwotCXVuc2lnbmVkIGludCByZXNpZHVhbDsKLQl1bnNpZ25lZCBsb25nIGlycWZsYWdzOwogCiAJbWVtc2V0KHR4ZGVzYywgMCwgc2l6ZW9mKCp0eGRlc2MpKTsKIApAQCAtMTczLDI3ICsyNTgsMTIgQEAKIAl0eGRlc2MtPmN3X21heCA9IGVudHJ5LT5xdWV1ZS0+Y3dfbWF4OwogCXR4ZGVzYy0+YWlmcyA9IGVudHJ5LT5xdWV1ZS0+YWlmczsKIAotCS8qIERhdGEgbGVuZ3RoICsgQ1JDICovCi0JZGF0YV9sZW5ndGggPSBlbnRyeS0+c2tiLT5sZW4gKyA0OwotCiAJLyoKIAkgKiBDaGVjayB3aGV0aGVyIHRoaXMgZnJhbWUgaXMgdG8gYmUgYWNrZWQuCiAJICovCiAJaWYgKCEodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSykpCiAJCV9fc2V0X2JpdChFTlRSWV9UWERfQUNLLCAmdHhkZXNjLT5mbGFncyk7CiAKLQlpZiAodGVzdF9iaXQoQ09ORklHX1NVUFBPUlRfSFdfQ1JZUFRPLCAmcnQyeDAwZGV2LT5mbGFncykgJiYKLQkgICAgIWVudHJ5LT5za2ItPmRvX25vdF9lbmNyeXB0KSB7Ci0JCS8qIEFwcGx5IGNyeXB0byBzcGVjaWZpYyBkZXNjcmlwdG9yIGluZm9ybWF0aW9uICovCi0JCXJ0MngwMGNyeXB0b19jcmVhdGVfdHhfZGVzY3JpcHRvcihlbnRyeSwgdHhkZXNjKTsKLQotCQkvKgotCQkgKiBFeHRlbmQgZnJhbWUgbGVuZ3RoIHRvIGluY2x1ZGUgYWxsIGVuY3J5cHRpb24gb3ZlcmhlYWQKLQkJICogdGhhdCB3aWxsIGJlIGFkZGVkIGJ5IHRoZSBoYXJkd2FyZS4KLQkJICovCi0JCWRhdGFfbGVuZ3RoICs9IHJ0MngwMGNyeXB0b190eF9vdmVyaGVhZCh0eF9pbmZvKTsKLQl9Ci0KIAkvKgogCSAqIENoZWNrIGlmIHRoaXMgaXMgYSBSVFMvQ1RTIGZyYW1lCiAJICovCkBAIC0yMzcsODYgKzMwNywyNyBAQAogCSAqIFNldCBpZnMgdG8gSUZTX1NJRlMgd2hlbiB0aGUgdGhpcyBpcyBub3QgdGhlIGZpcnN0IGZyYWdtZW50LAogCSAqIG9yIHRoaXMgZnJhZ21lbnQgY2FtZSBhZnRlciBSVFMvQ1RTLgogCSAqLwotCWlmICh0ZXN0X2JpdChFTlRSWV9UWERfUlRTX0ZSQU1FLCAmdHhkZXNjLT5mbGFncykpIHsKLQkJdHhkZXNjLT5pZnMgPSBJRlNfU0lGUzsKLQl9IGVsc2UgaWYgKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9GSVJTVF9GUkFHTUVOVCkgeworCWlmICgodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0ZJUlNUX0ZSQUdNRU5UKSAmJgorCSAgICAhdGVzdF9iaXQoRU5UUllfVFhEX1JUU19GUkFNRSwgJnR4ZGVzYy0+ZmxhZ3MpKSB7CiAJCV9fc2V0X2JpdChFTlRSWV9UWERfRklSU1RfRlJBR01FTlQsICZ0eGRlc2MtPmZsYWdzKTsKIAkJdHhkZXNjLT5pZnMgPSBJRlNfQkFDS09GRjsKLQl9IGVsc2UgeworCX0gZWxzZQogCQl0eGRlc2MtPmlmcyA9IElGU19TSUZTOwotCX0KIAogCS8qCi0JICogSGFyZHdhcmUgc2hvdWxkIGluc2VydCBzZXF1ZW5jZSBjb3VudGVyLgotCSAqIEZJWE1FOiBXZSBpbnNlcnQgYSBzb2Z0d2FyZSBzZXF1ZW5jZSBjb3VudGVyIGZpcnN0IGZvcgotCSAqIGhhcmR3YXJlIHRoYXQgZG9lc24ndCBzdXBwb3J0IGhhcmR3YXJlIHNlcXVlbmNlIGNvdW50aW5nLgotCSAqCi0JICogVGhpcyBpcyB3cm9uZyBiZWNhdXNlIGJlYWNvbnMgYXJlIG5vdCBnZXR0aW5nIHNlcXVlbmNlCi0JICogbnVtYmVycyBhc3NpZ25lZCBwcm9wZXJseS4KLQkgKgotCSAqIEEgc2Vjb25kYXJ5IHByb2JsZW0gZXhpc3RzIGZvciBkcml2ZXJzIHRoYXQgY2Fubm90IHRvZ2dsZQotCSAqIHNlcXVlbmNlIGNvdW50aW5nIHBlci1mcmFtZSwgc2luY2UgdGhvc2Ugd2lsbCBvdmVycmlkZSB0aGUKLQkgKiBzZXF1ZW5jZSBjb3VudGVyIGdpdmVuIGJ5IG1hYzgwMjExLgotCSAqLwotCWlmICh0eF9pbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfQVNTSUdOX1NFUSkgewotCQlpZiAobGlrZWx5KHR4X2luZm8tPmNvbnRyb2wudmlmKSkgewotCQkJc3RydWN0IHJ0MngwMF9pbnRmICppbnRmOwotCi0JCQlpbnRmID0gdmlmX3RvX2ludGYodHhfaW5mby0+Y29udHJvbC52aWYpOwotCi0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW50Zi0+c2VxbG9jaywgaXJxZmxhZ3MpOwotCi0JCQlpZiAodGVzdF9iaXQoRU5UUllfVFhEX0ZJUlNUX0ZSQUdNRU5ULCAmdHhkZXNjLT5mbGFncykpCi0JCQkJaW50Zi0+c2Vxbm8gKz0gMHgxMDsKLQkJCWhkci0+c2VxX2N0cmwgJj0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX1NDVExfRlJBRyk7Ci0JCQloZHItPnNlcV9jdHJsIHw9IGNwdV90b19sZTE2KGludGYtPnNlcW5vKTsKLQotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW50Zi0+c2VxbG9jaywgaXJxZmxhZ3MpOwotCi0JCQlfX3NldF9iaXQoRU5UUllfVFhEX0dFTkVSQVRFX1NFUSwgJnR4ZGVzYy0+ZmxhZ3MpOwotCQl9Ci0JfQotCi0JLyoKLQkgKiBQTENQIHNldHVwCi0JICogTGVuZ3RoIGNhbGN1bGF0aW9uIGRlcGVuZHMgb24gT0ZETS9DQ0sgcmF0ZS4KKwkgKiBEZXRlcm1pbmUgcmF0ZSBtb2R1bGF0aW9uLgogCSAqLwogCWh3cmF0ZSA9IHJ0MngwMF9nZXRfcmF0ZShyYXRlLT5od192YWx1ZSk7Ci0JdHhkZXNjLT5zaWduYWwgPSBod3JhdGUtPnBsY3A7Ci0JdHhkZXNjLT5zZXJ2aWNlID0gMHgwNDsKKwl0eGRlc2MtPnJhdGVfbW9kZSA9IFJBVEVfTU9ERV9DQ0s7CisJaWYgKGh3cmF0ZS0+ZmxhZ3MgJiBERVZfUkFURV9PRkRNKQorCQl0eGRlc2MtPnJhdGVfbW9kZSA9IFJBVEVfTU9ERV9PRkRNOwogCi0JaWYgKGh3cmF0ZS0+ZmxhZ3MgJiBERVZfUkFURV9PRkRNKSB7Ci0JCV9fc2V0X2JpdChFTlRSWV9UWERfT0ZETV9SQVRFLCAmdHhkZXNjLT5mbGFncyk7Ci0KLQkJdHhkZXNjLT5sZW5ndGhfaGlnaCA9IChkYXRhX2xlbmd0aCA+PiA2KSAmIDB4M2Y7Ci0JCXR4ZGVzYy0+bGVuZ3RoX2xvdyA9IGRhdGFfbGVuZ3RoICYgMHgzZjsKLQl9IGVsc2UgewotCQkvKgotCQkgKiBDb252ZXJ0IGxlbmd0aCB0byBtaWNyb3NlY29uZHMuCi0JCSAqLwotCQlyZXNpZHVhbCA9IEdFVF9EVVJBVElPTl9SRVMoZGF0YV9sZW5ndGgsIGh3cmF0ZS0+Yml0cmF0ZSk7Ci0JCWR1cmF0aW9uID0gR0VUX0RVUkFUSU9OKGRhdGFfbGVuZ3RoLCBod3JhdGUtPmJpdHJhdGUpOwotCi0JCWlmIChyZXNpZHVhbCAhPSAwKSB7Ci0JCQlkdXJhdGlvbisrOwotCi0JCQkvKgotCQkJICogQ2hlY2sgaWYgd2UgbmVlZCB0byBzZXQgdGhlIExlbmd0aCBFeHRlbnNpb24KLQkJCSAqLwotCQkJaWYgKGh3cmF0ZS0+Yml0cmF0ZSA9PSAxMTAgJiYgcmVzaWR1YWwgPD0gMzApCi0JCQkJdHhkZXNjLT5zZXJ2aWNlIHw9IDB4ODA7Ci0JCX0KLQotCQl0eGRlc2MtPmxlbmd0aF9oaWdoID0gKGR1cmF0aW9uID4+IDgpICYgMHhmZjsKLQkJdHhkZXNjLT5sZW5ndGhfbG93ID0gZHVyYXRpb24gJiAweGZmOwotCi0JCS8qCi0JCSAqIFdoZW4gcHJlYW1ibGUgaXMgZW5hYmxlZCB3ZSBzaG91bGQgc2V0IHRoZQotCQkgKiBwcmVhbWJsZSBiaXQgZm9yIHRoZSBzaWduYWwuCi0JCSAqLwotCQlpZiAodHhyYXRlLT5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19VU0VfU0hPUlRfUFJFQU1CTEUpCi0JCQl0eGRlc2MtPnNpZ25hbCB8PSAweDA4OwotCX0KKwkvKgorCSAqIEFwcGx5IFRYIGRlc2NyaXB0b3IgaGFuZGxpbmcgYnkgY29tcG9uZW50cworCSAqLworCXJ0MngwMGNyeXB0b19jcmVhdGVfdHhfZGVzY3JpcHRvcihlbnRyeSwgdHhkZXNjKTsKKwlydDJ4MDBxdWV1ZV9jcmVhdGVfdHhfZGVzY3JpcHRvcl9zZXEoZW50cnksIHR4ZGVzYyk7CisJcnQyeDAwcXVldWVfY3JlYXRlX3R4X2Rlc2NyaXB0b3JfcGxjcChlbnRyeSwgdHhkZXNjLCBod3JhdGUpOwogfQogCiBzdGF0aWMgdm9pZCBydDJ4MDBxdWV1ZV93cml0ZV90eF9kZXNjcmlwdG9yKHN0cnVjdCBxdWV1ZV9lbnRyeSAqZW50cnksCkBAIC00MDMsNyArNDE0LDcgQEAKIAkgKi8KIAlpZiAodGVzdF9iaXQoRU5UUllfVFhEX0VOQ1JZUFQsICZ0eGRlc2MuZmxhZ3MpICYmCiAJICAgICF0ZXN0X2JpdChFTlRSWV9UWERfRU5DUllQVF9JViwgJnR4ZGVzYy5mbGFncykpIHsKLQkJaWYgKHRlc3RfYml0KENPTkZJR19DUllQVE9fQ09QWV9JViwgJnF1ZXVlLT5ydDJ4MDBkZXYtPmZsYWdzKSkKKwkJaWYgKHRlc3RfYml0KERSSVZFUl9SRVFVSVJFX0NPUFlfSVYsICZxdWV1ZS0+cnQyeDAwZGV2LT5mbGFncykpCiAJCQlydDJ4MDBjcnlwdG9fdHhfY29weV9pdihza2IsIGl2X2xlbik7CiAJCWVsc2UKIAkJCXJ0MngwMGNyeXB0b190eF9yZW1vdmVfaXYoc2tiLCBpdl9sZW4pOwpAQCAtNDMyLDcgKzQ0Myw4IEBACiB9CiAKIGludCBydDJ4MDBxdWV1ZV91cGRhdGVfYmVhY29uKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCi0JCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQorCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCSAgICAgIGNvbnN0IGJvb2wgZW5hYmxlX2JlYWNvbikKIHsKIAlzdHJ1Y3QgcnQyeDAwX2ludGYgKmludGYgPSB2aWZfdG9faW50Zih2aWYpOwogCXN0cnVjdCBza2JfZnJhbWVfZGVzYyAqc2tiZGVzYzsKQEAgLTQ0Miw2ICs0NTQsMTEgQEAKIAlpZiAodW5saWtlbHkoIWludGYtPmJlYWNvbikpCiAJCXJldHVybiAtRU5PQlVGUzsKIAorCWlmICghZW5hYmxlX2JlYWNvbikgeworCQlydDJ4MDBkZXYtPm9wcy0+bGliLT5raWxsX3R4X3F1ZXVlKHJ0MngwMGRldiwgUUlEX0JFQUNPTik7CisJCXJldHVybiAwOworCX0KKwogCWludGYtPmJlYWNvbi0+c2tiID0gaWVlZTgwMjExX2JlYWNvbl9nZXQocnQyeDAwZGV2LT5odywgdmlmKTsKIAlpZiAoIWludGYtPmJlYWNvbi0+c2tiKQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTQ5MCw2ICs1MDcsOSBAQAogewogCWludCBhdGltID0gdGVzdF9iaXQoRFJJVkVSX1JFUVVJUkVfQVRJTV9RVUVVRSwgJnJ0MngwMGRldi0+ZmxhZ3MpOwogCisJaWYgKHF1ZXVlID09IFFJRF9SWCkKKwkJcmV0dXJuIHJ0MngwMGRldi0+cng7CisKIAlpZiAocXVldWUgPCBydDJ4MDBkZXYtPm9wcy0+dHhfcXVldWVzICYmIHJ0MngwMGRldi0+dHgpCiAJCXJldHVybiAmcnQyeDAwZGV2LT50eFtxdWV1ZV07CiAKQEAgLTU2Niw2ICs1ODYsMTQgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxdWV1ZS0+bG9jaywgaXJxZmxhZ3MpOwogfQogCit2b2lkIHJ0MngwMHF1ZXVlX3N0b3BfcXVldWVzKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCit7CisJc3RydWN0IGRhdGFfcXVldWUgKnF1ZXVlOworCisJdHhhbGxfcXVldWVfZm9yX2VhY2gocnQyeDAwZGV2LCBxdWV1ZSkKKwkJcnQyeDAwZGV2LT5vcHMtPmxpYi0+a2lsbF90eF9xdWV1ZShydDJ4MDBkZXYsIHF1ZXVlLT5xaWQpOworfQorCiB2b2lkIHJ0MngwMHF1ZXVlX2luaXRfcXVldWVzKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCiB7CiAJc3RydWN0IGRhdGFfcXVldWUgKnF1ZXVlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHF1ZXVlLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcXVldWUuaAppbmRleCAyODI5MzcxLi45N2UyYWIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcXVldWUuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcXVldWUuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0JQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOCBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAorCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDkgcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKIAk8aHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tPgogCiAJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTE1OCw2ICsxNTgsMTQgQEAKIH07CiAKIC8qKgorICogUlhET05FX1NJR05BTF9NQVNLIC0gRGVmaW5lIHRvIG1hc2sgb2ZmIGFsbCAmcnhkb25lX2VudHJ5X2Rlc2NfZmxhZ3MgZmxhZ3MKKyAqIGV4Y2VwdCBmb3IgdGhlIFJYRE9ORV9TSUdOQUxfKiBmbGFncy4gVGhpcyBpcyB1c2VmdWwgdG8gY29udmVydCB0aGUgZGV2X2ZsYWdzCisgKiBmcm9tICZyeGRvbmVfZW50cnlfZGVzYyB0byBhIHNpZ25hbCB2YWx1ZSB0eXBlLgorICovCisjZGVmaW5lIFJYRE9ORV9TSUdOQUxfTUFTSyBcCisgICAgICAgKCBSWERPTkVfU0lHTkFMX1BMQ1AgfCBSWERPTkVfU0lHTkFMX0JJVFJBVEUgKQorCisvKioKICAqIHN0cnVjdCByeGRvbmVfZW50cnlfZGVzYzogUlggRW50cnkgZGVzY3JpcHRvcgogICoKICAqIFN1bW1hcnkgb2YgaW5mb3JtYXRpb24gdGhhdCBoYXMgYmVlbiByZWFkIGZyb20gdGhlIFJYIGZyYW1lIGRlc2NyaXB0b3IuCkBAIC0xNjUsNiArMTczLDcgQEAKICAqIEB0aW1lc3RhbXA6IFJYIFRpbWVzdGFtcAogICogQHNpZ25hbDogU2lnbmFsIG9mIHRoZSByZWNlaXZlZCBmcmFtZS4KICAqIEByc3NpOiBSU1NJIG9mIHRoZSByZWNlaXZlZCBmcmFtZS4KKyAqIEBub2lzZTogTWVhc3VyZWQgbm9pc2UgZHVyaW5nIGZyYW1lIHJlY2VwdGlvbi4KICAqIEBzaXplOiBEYXRhIHNpemUgb2YgdGhlIHJlY2VpdmVkIGZyYW1lLgogICogQGZsYWdzOiBNQUM4MDIxMSByZWNlaXZlIGZsYWdzIChTZWUgJmVudW0gbWFjODAyMTFfcnhfZmxhZ3MpLgogICogQGRldl9mbGFnczogUmFsaW5rIHJlY2VpdmUgZmxhZ3MgKFNlZSAmZW51bSByeGRvbmVfZW50cnlfZGVzY19mbGFncykuCkBAIC0xNzcsNiArMTg2LDcgQEAKIAl1NjQgdGltZXN0YW1wOwogCWludCBzaWduYWw7CiAJaW50IHJzc2k7CisJaW50IG5vaXNlOwogCWludCBzaXplOwogCWludCBmbGFnczsKIAlpbnQgZGV2X2ZsYWdzOwpAQCAtMjIyLDcgKzIzMiw2IEBACiAgKgogICogQEVOVFJZX1RYRF9SVFNfRlJBTUU6IFRoaXMgZnJhbWUgaXMgYSBSVFMgZnJhbWUuCiAgKiBARU5UUllfVFhEX0NUU19GUkFNRTogVGhpcyBmcmFtZSBpcyBhIENUUy10by1zZWxmIGZyYW1lLgotICogQEVOVFJZX1RYRF9PRkRNX1JBVEU6IFRoaXMgZnJhbWUgaXMgc2VuZCBvdXQgd2l0aCBhbiBPRkRNIHJhdGUuCiAgKiBARU5UUllfVFhEX0dFTkVSQVRFX1NFUTogVGhpcyBmcmFtZSByZXF1aXJlcyBzZXF1ZW5jZSBjb3VudGVyLgogICogQEVOVFJZX1RYRF9GSVJTVF9GUkFHTUVOVDogVGhpcyBpcyB0aGUgZmlyc3QgZnJhbWUuCiAgKiBARU5UUllfVFhEX01PUkVfRlJBRzogVGhpcyBmcmFtZSBpcyBmb2xsb3dlZCBieSBhbm90aGVyIGZyYWdtZW50LgpAQCAtMjM4LDcgKzI0Nyw2IEBACiBlbnVtIHR4ZW50cnlfZGVzY19mbGFncyB7CiAJRU5UUllfVFhEX1JUU19GUkFNRSwKIAlFTlRSWV9UWERfQ1RTX0ZSQU1FLAotCUVOVFJZX1RYRF9PRkRNX1JBVEUsCiAJRU5UUllfVFhEX0dFTkVSQVRFX1NFUSwKIAlFTlRSWV9UWERfRklSU1RfRlJBR01FTlQsCiAJRU5UUllfVFhEX01PUkVfRlJBRywKQEAgLTI2Myw2ICsyNzEsNyBAQAogICogQGxlbmd0aF9sb3c6IFBMQ1AgbGVuZ3RoIGxvdyB3b3JkLgogICogQHNpZ25hbDogUExDUCBzaWduYWwuCiAgKiBAc2VydmljZTogUExDUCBzZXJ2aWNlLgorICogQHJhdGVfbW9kZTogUmF0ZSBtb2RlIChTZWUgQGVudW0gcmF0ZV9tb2R1bGF0aW9uKS4KICAqIEByZXRyeV9saW1pdDogTWF4IG51bWJlciBvZiByZXRyaWVzLgogICogQGFpZnM6IEFJRlMgdmFsdWUuCiAgKiBAaWZzOiBJRlMgdmFsdWUuCkBAIC0yODIsNiArMjkxLDggQEAKIAl1MTYgc2lnbmFsOwogCXUxNiBzZXJ2aWNlOwogCisJdTE2IHJhdGVfbW9kZTsKKwogCXNob3J0IHJldHJ5X2xpbWl0OwogCXNob3J0IGFpZnM7CiAJc2hvcnQgaWZzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHJlZy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHJlZy5oCmluZGV4IGMyZmJhN2MuLjg2MTMyMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDByZWcuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcmVnLmgKQEAgLTEsNSArMSw1IEBACiAvKgotCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDggcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKKwlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA5IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CiAJPGh0dHA6Ly9ydDJ4MDAuc2VyaWFsbW9ua2V5LmNvbT4KIAogCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC0xMjUsNiArMTI1LDI2IEBACiB9OwogCiAvKgorICogUmF0ZSBtb2R1bGF0aW9ucworICovCitlbnVtIHJhdGVfbW9kdWxhdGlvbiB7CisJUkFURV9NT0RFX0NDSyA9IDAsCisJUkFURV9NT0RFX09GRE0gPSAxLAorCVJBVEVfTU9ERV9IVF9NSVggPSAyLAorCVJBVEVfTU9ERV9IVF9HUkVFTkZJRUxEID0gMywKK307CisKKy8qCisgKiBGaXJtd2FyZSB2YWxpZGF0aW9uIGVycm9yIGNvZGVzCisgKi8KK2VudW0gZmlybXdhcmVfZXJyb3JzIHsKKwlGV19PSywKKwlGV19CQURfQ1JDLAorCUZXX0JBRF9MRU5HVEgsCisJRldfQkFEX1ZFUlNJT04sCit9OworCisvKgogICogUmVnaXN0ZXIgaGFuZGxlcnMuCiAgKiBXZSBzdG9yZSB0aGUgcG9zaXRpb24gb2YgYSByZWdpc3RlciBmaWVsZCBpbnNpZGUgYSBmaWVsZCBzdHJ1Y3R1cmUsCiAgKiBUaGlzIHdpbGwgc2ltcGxpZnkgdGhlIHByb2Nlc3Mgb2Ygc2V0dGluZyBhbmQgcmVhZGluZyBhIGNlcnRhaW4gZmllbGQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDByZmtpbGwuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDByZmtpbGwuYwppbmRleCAzMjk4Y2FlLi5iNmQ0YzY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcmZraWxsLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHJma2lsbC5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLQlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA4IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CisJQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOSBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAogCTxodHRwOi8vcnQyeDAwLnNlcmlhbG1vbmtleS5jb20+CiAKIAlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMjUsNzMgKzI1LDMwIEBACiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9yZmtpbGwuaD4KIAogI2luY2x1ZGUgInJ0MngwMC5oIgogI2luY2x1ZGUgInJ0MngwMGxpYi5oIgogCi1zdGF0aWMgaW50IHJ0MngwMHJma2lsbF90b2dnbGVfcmFkaW8odm9pZCAqZGF0YSwgZW51bSByZmtpbGxfc3RhdGUgc3RhdGUpCitzdGF0aWMgdm9pZCBydDJ4MDByZmtpbGxfcG9sbChzdHJ1Y3QgaW5wdXRfcG9sbGVkX2RldiAqcG9sbF9kZXYpCiB7Ci0Jc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IGRhdGE7Ci0JaW50IHJldHZhbCA9IDA7Ci0KLQlpZiAodW5saWtlbHkoIXJ0MngwMGRldikpCi0JCXJldHVybiAwOwotCi0JLyoKLQkgKiBPbmx5IGNvbnRpbnVlIGlmIHRoZXJlIGFyZSBlbmFibGVkIGludGVyZmFjZXMuCi0JICovCi0JaWYgKCF0ZXN0X2JpdChERVZJQ0VfU1RBVEVfU1RBUlRFRCwgJnJ0MngwMGRldi0+ZmxhZ3MpKQotCQlyZXR1cm4gMDsKLQotCWlmIChzdGF0ZSA9PSBSRktJTExfU1RBVEVfVU5CTE9DS0VEKSB7Ci0JCUlORk8ocnQyeDAwZGV2LCAiUkZLSUxMIGV2ZW50OiBlbmFibGluZyByYWRpby5cbiIpOwotCQljbGVhcl9iaXQoREVWSUNFX1NUQVRFX0RJU0FCTEVEX1JBRElPX0hXLCAmcnQyeDAwZGV2LT5mbGFncyk7Ci0JCXJldHZhbCA9IHJ0MngwMGxpYl9lbmFibGVfcmFkaW8ocnQyeDAwZGV2KTsKLQl9IGVsc2UgaWYgKHN0YXRlID09IFJGS0lMTF9TVEFURV9TT0ZUX0JMT0NLRUQpIHsKLQkJSU5GTyhydDJ4MDBkZXYsICJSRktJTEwgZXZlbnQ6IGRpc2FibGluZyByYWRpby5cbiIpOwotCQlzZXRfYml0KERFVklDRV9TVEFURV9ESVNBQkxFRF9SQURJT19IVywgJnJ0MngwMGRldi0+ZmxhZ3MpOwotCQlydDJ4MDBsaWJfZGlzYWJsZV9yYWRpbyhydDJ4MDBkZXYpOwotCX0gZWxzZSB7Ci0JCVdBUk5JTkcocnQyeDAwZGV2LCAiUkZLSUxMIGV2ZW50OiB1bmtub3duIHN0YXRlICVkLlxuIiwgc3RhdGUpOwotCX0KLQotCXJldHVybiByZXR2YWw7Ci19Ci0KLXN0YXRpYyBpbnQgcnQyeDAwcmZraWxsX2dldF9zdGF0ZSh2b2lkICpkYXRhLCBlbnVtIHJma2lsbF9zdGF0ZSAqc3RhdGUpCi17Ci0Jc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IGRhdGE7Ci0KLQkvKgotCSAqIHJma2lsbF9wb2xsIHJlcG9ydHMgMSB3aGVuIHRoZSBrZXkgaGFzIGJlZW4gcHJlc3NlZCBhbmQgdGhlCi0JICogcmFkaW8gc2hvdWxkIGJlIGJsb2NrZWQuCi0JICovCi0JKnN0YXRlID0gcnQyeDAwZGV2LT5vcHMtPmxpYi0+cmZraWxsX3BvbGwocnQyeDAwZGV2KSA/Ci0JICAgIFJGS0lMTF9TVEFURV9TT0ZUX0JMT0NLRUQgOiBSRktJTExfU1RBVEVfVU5CTE9DS0VEOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHJ0MngwMHJma2lsbF9wb2xsKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0KLQkgICAgY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBydDJ4MDBfZGV2LCByZmtpbGxfd29yay53b3JrKTsKLQllbnVtIHJma2lsbF9zdGF0ZSBzdGF0ZTsKKwlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0gcG9sbF9kZXYtPnByaXZhdGU7CisJaW50IHN0YXRlLCBvbGRfc3RhdGU7CiAKIAlpZiAoIXRlc3RfYml0KFJGS0lMTF9TVEFURV9SRUdJU1RFUkVELCAmcnQyeDAwZGV2LT5yZmtpbGxfc3RhdGUpIHx8CiAJICAgICF0ZXN0X2JpdChDT05GSUdfU1VQUE9SVF9IV19CVVRUT04sICZydDJ4MDBkZXYtPmZsYWdzKSkKIAkJcmV0dXJuOwogCiAJLyoKLQkgKiBQb2xsIGxhdGVzdCBzdGF0ZSBhbmQgcmVwb3J0IGl0IHRvIHJma2lsbCB3aG8gc2hvdWxkIHNvcnQKLQkgKiBvdXQgaWYgdGhlIHN0YXRlIHNob3VsZCBiZSB0b2dnbGVkIG9yIG5vdC4KKwkgKiBQb2xsIGxhdGVzdCBzdGF0ZSwgaWYgdGhlIHN0YXRlIGlzIGRpZmZlcmVudCB0aGVuIHRoZSBwcmV2aW91cyBzdGF0ZSwKKwkgKiB3ZSBzaG91bGQgZ2VuZXJhdGUgYW4gaW5wdXQgZXZlbnQuCiAJICovCi0JaWYgKCFydDJ4MDByZmtpbGxfZ2V0X3N0YXRlKHJ0MngwMGRldiwgJnN0YXRlKSkKLQkJcmZraWxsX2ZvcmNlX3N0YXRlKHJ0MngwMGRldi0+cmZraWxsLCBzdGF0ZSk7CisJc3RhdGUgPSAhIXJ0MngwMGRldi0+b3BzLT5saWItPnJma2lsbF9wb2xsKHJ0MngwMGRldik7CisJb2xkX3N0YXRlID0gISF0ZXN0X2JpdChSRktJTExfU1RBVEVfQkxPQ0tFRCwgJnJ0MngwMGRldi0+cmZraWxsX3N0YXRlKTsKIAotCXF1ZXVlX2RlbGF5ZWRfd29yayhydDJ4MDBkZXYtPmh3LT53b3JrcXVldWUsCi0JCQkgICAmcnQyeDAwZGV2LT5yZmtpbGxfd29yaywgUkZLSUxMX1BPTExfSU5URVJWQUwpOworCWlmIChvbGRfc3RhdGUgIT0gc3RhdGUpIHsKKwkJaW5wdXRfcmVwb3J0X3N3aXRjaChwb2xsX2Rldi0+aW5wdXQsIFNXX1JGS0lMTF9BTEwsIHN0YXRlKTsKKwkJY2hhbmdlX2JpdChSRktJTExfU1RBVEVfQkxPQ0tFRCwgJnJ0MngwMGRldi0+cmZraWxsX3N0YXRlKTsKKwl9CiB9CiAKIHZvaWQgcnQyeDAwcmZraWxsX3JlZ2lzdGVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCkBAIC0xMDAsOCArNTcsOCBAQAogCSAgICB0ZXN0X2JpdChSRktJTExfU1RBVEVfUkVHSVNURVJFRCwgJnJ0MngwMGRldi0+cmZraWxsX3N0YXRlKSkKIAkJcmV0dXJuOwogCi0JaWYgKHJma2lsbF9yZWdpc3RlcihydDJ4MDBkZXYtPnJma2lsbCkpIHsKLQkJRVJST1IocnQyeDAwZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHJma2lsbCBoYW5kbGVyLlxuIik7CisJaWYgKGlucHV0X3JlZ2lzdGVyX3BvbGxlZF9kZXZpY2UocnQyeDAwZGV2LT5yZmtpbGxfcG9sbF9kZXYpKSB7CisJCUVSUk9SKHJ0MngwMGRldiwgIkZhaWxlZCB0byByZWdpc3RlciBwb2xsZWQgZGV2aWNlLlxuIik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTEwOSwxMCArNjYsMTAgQEAKIAogCS8qCiAJICogRm9yY2UgaW5pdGlhbCBwb2xsIHdoaWNoIHdpbGwgZGV0ZWN0IHRoZSBpbml0aWFsIGRldmljZSBzdGF0ZSwKLQkgKiBhbmQgY29ycmVjdGx5IHNlbmRzIHRoZSBzaWduYWwgdG8gdGhlIHJma2lsbCBsYXllciBhYm91dCB0aGlzCisJICogYW5kIGNvcnJlY3RseSBzZW5kcyB0aGUgc2lnbmFsIHRvIHRoZSBpbnB1dCBsYXllciBhYm91dCB0aGlzCiAJICogc3RhdGUuCiAJICovCi0JcnQyeDAwcmZraWxsX3BvbGwoJnJ0MngwMGRldi0+cmZraWxsX3dvcmsud29yayk7CisJcnQyeDAwcmZraWxsX3BvbGwocnQyeDAwZGV2LT5yZmtpbGxfcG9sbF9kZXYpOwogfQogCiB2b2lkIHJ0MngwMHJma2lsbF91bnJlZ2lzdGVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCkBAIC0xMjEsNTIgKzc4LDUwIEBACiAJICAgICF0ZXN0X2JpdChSRktJTExfU1RBVEVfUkVHSVNURVJFRCwgJnJ0MngwMGRldi0+cmZraWxsX3N0YXRlKSkKIAkJcmV0dXJuOwogCi0JY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZydDJ4MDBkZXYtPnJma2lsbF93b3JrKTsKLQotCXJma2lsbF91bnJlZ2lzdGVyKHJ0MngwMGRldi0+cmZraWxsKTsKKwlpbnB1dF91bnJlZ2lzdGVyX3BvbGxlZF9kZXZpY2UocnQyeDAwZGV2LT5yZmtpbGxfcG9sbF9kZXYpOwogCiAJX19jbGVhcl9iaXQoUkZLSUxMX1NUQVRFX1JFR0lTVEVSRUQsICZydDJ4MDBkZXYtPnJma2lsbF9zdGF0ZSk7CiB9CiAKIHZvaWQgcnQyeDAwcmZraWxsX2FsbG9jYXRlKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCiB7Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gd2lwaHlfZGV2KHJ0MngwMGRldi0+aHctPndpcGh5KTsKKwlzdHJ1Y3QgaW5wdXRfcG9sbGVkX2RldiAqcG9sbF9kZXY7CiAKLQlpZiAodGVzdF9iaXQoUkZLSUxMX1NUQVRFX0FMTE9DQVRFRCwgJnJ0MngwMGRldi0+cmZraWxsX3N0YXRlKSkKKwlpZiAodGVzdF9iaXQoUkZLSUxMX1NUQVRFX0FMTE9DQVRFRCwgJnJ0MngwMGRldi0+cmZraWxsX3N0YXRlKSB8fAorCSAgICAhdGVzdF9iaXQoQ09ORklHX1NVUFBPUlRfSFdfQlVUVE9OLCAmcnQyeDAwZGV2LT5mbGFncykpCiAJCXJldHVybjsKIAotCXJ0MngwMGRldi0+cmZraWxsID0gcmZraWxsX2FsbG9jYXRlKGRldiwgUkZLSUxMX1RZUEVfV0xBTik7Ci0JaWYgKCFydDJ4MDBkZXYtPnJma2lsbCkgewotCQlFUlJPUihydDJ4MDBkZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgcmZraWxsIGhhbmRsZXIuXG4iKTsKKwlwb2xsX2RldiA9IGlucHV0X2FsbG9jYXRlX3BvbGxlZF9kZXZpY2UoKTsKKwlpZiAoIXBvbGxfZGV2KSB7CisJCUVSUk9SKHJ0MngwMGRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBwb2xsZWQgZGV2aWNlLlxuIik7CiAJCXJldHVybjsKIAl9CiAKKwlwb2xsX2Rldi0+cHJpdmF0ZSA9IHJ0MngwMGRldjsKKwlwb2xsX2Rldi0+cG9sbCA9IHJ0MngwMHJma2lsbF9wb2xsOworCXBvbGxfZGV2LT5wb2xsX2ludGVydmFsID0gUkZLSUxMX1BPTExfSU5URVJWQUw7CisKKwlwb2xsX2Rldi0+aW5wdXQtPm5hbWUgPSBydDJ4MDBkZXYtPm9wcy0+bmFtZTsKKwlwb2xsX2Rldi0+aW5wdXQtPnBoeXMgPSB3aXBoeV9uYW1lKHJ0MngwMGRldi0+aHctPndpcGh5KTsKKwlwb2xsX2Rldi0+aW5wdXQtPmlkLmJ1c3R5cGUgPSBCVVNfSE9TVDsKKwlwb2xsX2Rldi0+aW5wdXQtPmlkLnZlbmRvciA9IDB4MTgxNDsKKwlwb2xsX2Rldi0+aW5wdXQtPmlkLnByb2R1Y3QgPSBydDJ4MDBkZXYtPmNoaXAucnQ7CisJcG9sbF9kZXYtPmlucHV0LT5pZC52ZXJzaW9uID0gcnQyeDAwZGV2LT5jaGlwLnJldjsKKwlwb2xsX2Rldi0+aW5wdXQtPmRldi5wYXJlbnQgPSB3aXBoeV9kZXYocnQyeDAwZGV2LT5ody0+d2lwaHkpOworCXBvbGxfZGV2LT5pbnB1dC0+ZXZiaXRbMF0gPSBCSVQoRVZfU1cpOworCXBvbGxfZGV2LT5pbnB1dC0+c3diaXRbMF0gPSBCSVQoU1dfUkZLSUxMX0FMTCk7CisKKwlydDJ4MDBkZXYtPnJma2lsbF9wb2xsX2RldiA9IHBvbGxfZGV2OworCiAJX19zZXRfYml0KFJGS0lMTF9TVEFURV9BTExPQ0FURUQsICZydDJ4MDBkZXYtPnJma2lsbF9zdGF0ZSk7Ci0KLQlydDJ4MDBkZXYtPnJma2lsbC0+bmFtZSA9IHJ0MngwMGRldi0+b3BzLT5uYW1lOwotCXJ0MngwMGRldi0+cmZraWxsLT5kYXRhID0gcnQyeDAwZGV2OwotCXJ0MngwMGRldi0+cmZraWxsLT50b2dnbGVfcmFkaW8gPSBydDJ4MDByZmtpbGxfdG9nZ2xlX3JhZGlvOwotCWlmICh0ZXN0X2JpdChDT05GSUdfU1VQUE9SVF9IV19CVVRUT04sICZydDJ4MDBkZXYtPmZsYWdzKSkgewotCQlydDJ4MDBkZXYtPnJma2lsbC0+Z2V0X3N0YXRlID0gcnQyeDAwcmZraWxsX2dldF9zdGF0ZTsKLQkJcnQyeDAwZGV2LT5yZmtpbGwtPnN0YXRlID0KLQkJCXJ0MngwMGRldi0+b3BzLT5saWItPnJma2lsbF9wb2xsKHJ0MngwMGRldikgPwotCQkJICAgIFJGS0lMTF9TVEFURV9TT0ZUX0JMT0NLRUQgOiBSRktJTExfU1RBVEVfVU5CTE9DS0VEOwotCX0gZWxzZSB7Ci0JCXJ0MngwMGRldi0+cmZraWxsLT5zdGF0ZSA9IFJGS0lMTF9TVEFURV9VTkJMT0NLRUQ7Ci0JfQotCi0JSU5JVF9ERUxBWUVEX1dPUksoJnJ0MngwMGRldi0+cmZraWxsX3dvcmssIHJ0MngwMHJma2lsbF9wb2xsKTsKLQotCXJldHVybjsKIH0KIAogdm9pZCBydDJ4MDByZmtpbGxfZnJlZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQogewotCWlmICghdGVzdF9iaXQoUkZLSUxMX1NUQVRFX0FMTE9DQVRFRCwgJnJ0MngwMGRldi0+cmZraWxsX3N0YXRlKSkKKwlpZiAoIV9fdGVzdF9hbmRfY2xlYXJfYml0KFJGS0lMTF9TVEFURV9BTExPQ0FURUQsCisJCQkJICAmcnQyeDAwZGV2LT5yZmtpbGxfc3RhdGUpKQogCQlyZXR1cm47CiAKLQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnJ0MngwMGRldi0+cmZraWxsX3dvcmspOwotCi0JcmZraWxsX2ZyZWUocnQyeDAwZGV2LT5yZmtpbGwpOwotCXJ0MngwMGRldi0+cmZraWxsID0gTlVMTDsKKwlpbnB1dF9mcmVlX3BvbGxlZF9kZXZpY2UocnQyeDAwZGV2LT5yZmtpbGxfcG9sbF9kZXYpOworCXJ0MngwMGRldi0+cmZraWxsX3BvbGxfZGV2ID0gTlVMTDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDB1c2IuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDB1c2IuYwppbmRleCAwYjI5ZDc2Li43ZDUwY2E4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwdXNiLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHVzYi5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLQlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA4IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CisJQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOSBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAogCTxodHRwOi8vcnQyeDAwLnNlcmlhbG1vbmtleS5jb20+CiAKIAlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMjk2LDYgKzI5Niw0MSBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwocnQyeDAwdXNiX2tpY2tfdHhfcXVldWUpOwogCit2b2lkIHJ0MngwMHVzYl9raWxsX3R4X3F1ZXVlKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkgICAgIGNvbnN0IGVudW0gZGF0YV9xdWV1ZV9xaWQgcWlkKQoreworCXN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZSA9IHJ0MngwMHF1ZXVlX2dldF9xdWV1ZShydDJ4MDBkZXYsIHFpZCk7CisJc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfdXNiICplbnRyeV9wcml2OworCXN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3VzYl9iY24gKmJjbl9wcml2OworCXVuc2lnbmVkIGludCBpOworCWJvb2wga2lsbF9ndWFyZDsKKworCS8qCisJICogV2hlbiBraWxsaW5nIHRoZSBiZWFjb24gcXVldWUsIHdlIG11c3QgYWxzbyBraWxsCisJICogdGhlIGJlYWNvbiBndWFyZCBieXRlLgorCSAqLworCWtpbGxfZ3VhcmQgPQorCSAgICAocWlkID09IFFJRF9CRUFDT04pICYmCisJICAgICh0ZXN0X2JpdChEUklWRVJfUkVRVUlSRV9CRUFDT05fR1VBUkQsICZydDJ4MDBkZXYtPmZsYWdzKSk7CisKKwkvKgorCSAqIENhbmNlbCBhbGwgZW50cmllcy4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgcXVldWUtPmxpbWl0OyBpKyspIHsKKwkJZW50cnlfcHJpdiA9IHF1ZXVlLT5lbnRyaWVzW2ldLnByaXZfZGF0YTsKKwkJdXNiX2tpbGxfdXJiKGVudHJ5X3ByaXYtPnVyYik7CisKKwkJLyoKKwkJICogS2lsbCBndWFyZGlhbiB1cmIgKGlmIHJlcXVpcmVkIGJ5IGRyaXZlcikuCisJCSAqLworCQlpZiAoa2lsbF9ndWFyZCkgeworCQkJYmNuX3ByaXYgPSBxdWV1ZS0+ZW50cmllc1tpXS5wcml2X2RhdGE7CisJCQl1c2Jfa2lsbF91cmIoYmNuX3ByaXYtPmd1YXJkaWFuX3VyYik7CisJCX0KKwl9Cit9CitFWFBPUlRfU1lNQk9MX0dQTChydDJ4MDB1c2Jfa2lsbF90eF9xdWV1ZSk7CisKIC8qCiAgKiBSWCBkYXRhIGhhbmRsZXJzLgogICovCkBAIC0zMzgsMzUgKzM3MywxNCBAQAogICovCiB2b2lkIHJ0MngwMHVzYl9kaXNhYmxlX3JhZGlvKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCiB7Ci0Jc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfdXNiICplbnRyeV9wcml2OwotCXN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3VzYl9iY24gKmJjbl9wcml2OwotCXN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZTsKLQl1bnNpZ25lZCBpbnQgaTsKLQogCXJ0MngwMHVzYl92ZW5kb3JfcmVxdWVzdF9zdyhydDJ4MDBkZXYsIFVTQl9SWF9DT05UUk9MLCAwLCAwLAogCQkJCSAgICBSRUdJU1RFUl9USU1FT1VUKTsKIAogCS8qCi0JICogQ2FuY2VsIGFsbCBxdWV1ZXMuCisJICogVGhlIFVTQiB2ZXJzaW9uIG9mIGtpbGxfdHhfcXVldWUgYWxzbyB3b3JrcworCSAqIG9uIHRoZSBSWCBxdWV1ZS4KIAkgKi8KLQlxdWV1ZV9mb3JfZWFjaChydDJ4MDBkZXYsIHF1ZXVlKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBxdWV1ZS0+bGltaXQ7IGkrKykgewotCQkJZW50cnlfcHJpdiA9IHF1ZXVlLT5lbnRyaWVzW2ldLnByaXZfZGF0YTsKLQkJCXVzYl9raWxsX3VyYihlbnRyeV9wcml2LT51cmIpOwotCQl9Ci0JfQotCi0JLyoKLQkgKiBLaWxsIGd1YXJkaWFuIHVyYiAoaWYgcmVxdWlyZWQgYnkgZHJpdmVyKS4KLQkgKi8KLQlpZiAoIXRlc3RfYml0KERSSVZFUl9SRVFVSVJFX0JFQUNPTl9HVUFSRCwgJnJ0MngwMGRldi0+ZmxhZ3MpKQotCQlyZXR1cm47Ci0KLQlmb3IgKGkgPSAwOyBpIDwgcnQyeDAwZGV2LT5iY24tPmxpbWl0OyBpKyspIHsKLQkJYmNuX3ByaXYgPSBydDJ4MDBkZXYtPmJjbi0+ZW50cmllc1tpXS5wcml2X2RhdGE7Ci0JCWlmIChiY25fcHJpdi0+Z3VhcmRpYW5fdXJiKQotCQkJdXNiX2tpbGxfdXJiKGJjbl9wcml2LT5ndWFyZGlhbl91cmIpOwotCX0KKwlydDJ4MDBkZXYtPm9wcy0+bGliLT5raWxsX3R4X3F1ZXVlKHJ0MngwMGRldiwgUUlEX1JYKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJ0MngwMHVzYl9kaXNhYmxlX3JhZGlvKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHVzYi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHVzYi5oCmluZGV4IDJiZDRhYzguLmJkMmQ1OWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDB1c2IuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwdXNiLmgKQEAgLTEsNSArMSw1IEBACiAvKgotCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDggcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKKwlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA5IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CiAJPGh0dHA6Ly9ydDJ4MDAuc2VyaWFsbW9ua2V5LmNvbT4KIAogCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC00MTksNiArNDE5LDE3IEBACiB2b2lkIHJ0MngwMHVzYl9raWNrX3R4X3F1ZXVlKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCiAJCQkgICAgIGNvbnN0IGVudW0gZGF0YV9xdWV1ZV9xaWQgcWlkKTsKIAorLyoqCisgKiBydDJ4MDB1c2Jfa2lsbF90eF9xdWV1ZSAtIEtpbGwgZGF0YSBxdWV1ZQorICogQHJ0MngwMGRldjogUG9pbnRlciB0byAmc3RydWN0IHJ0MngwMF9kZXYKKyAqIEBxaWQ6IERhdGEgcXVldWUgdG8ga2lsbAorICoKKyAqIFRoaXMgd2lsbCB3YWxrIHRocm91Z2ggYWxsIGVudHJpZXMgb2YgdGhlIHF1ZXVlIGFuZCBraWxsIGFsbAorICogcHJldmlvdXNseSBraWNrZWQgZnJhbWVzIGJlZm9yZSB0aGV5IGNhbiBiZSBzZW5kLgorICovCit2b2lkIHJ0MngwMHVzYl9raWxsX3R4X3F1ZXVlKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkgICAgICBjb25zdCBlbnVtIGRhdGFfcXVldWVfcWlkIHFpZCk7CisKIC8qCiAgKiBEZXZpY2UgaW5pdGlhbGl6YXRpb24gaGFuZGxlcnMuCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDYxcGNpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ2MXBjaS5jCmluZGV4IDk4N2U4OTAuLjJjYThiN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDYxcGNpLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NjFwY2kuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0JQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOCBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAorCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDkgcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKIAk8aHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tPgogCiAJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTEyMyw5ICsxMjMsNiBAQAogewogCXUzMiByZWc7CiAKLQlpZiAoIXdvcmQpCi0JCXJldHVybjsKLQogCW11dGV4X2xvY2soJnJ0MngwMGRldi0+Y3NyX211dGV4KTsKIAogCS8qCkBAIC0xNDYsMTIgKzE0Myw2IEBACiAJbXV0ZXhfdW5sb2NrKCZydDJ4MDBkZXYtPmNzcl9tdXRleCk7CiB9CiAKLSNpZmRlZiBDT05GSUdfUlQyWDAwX0xJQl9MRURTCi0vKgotICogVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNhbGxlZCBmcm9tIHJ0NjFwY2lfbGVkX2JyaWdodG5lc3MoKQotICogbWFrZSBnY2MgaGFwcHkgYnkgcGxhY2luZyB0aGlzIGZ1bmN0aW9uIGluc2lkZSB0aGUKLSAqIHNhbWUgaWZkZWYgc3RhdGVtZW50IGFzIHRoZSBjYWxsZXIuCi0gKi8KIHN0YXRpYyB2b2lkIHJ0NjFwY2lfbWN1X3JlcXVlc3Qoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKIAkJCQljb25zdCB1OCBjb21tYW5kLCBjb25zdCB1OCB0b2tlbiwKIAkJCQljb25zdCB1OCBhcmcwLCBjb25zdCB1OCBhcmcxKQpAQCAtMTgwLDcgKzE3MSw2IEBACiAJbXV0ZXhfdW5sb2NrKCZydDJ4MDBkZXYtPmNzcl9tdXRleCk7CiAKIH0KLSNlbmRpZiAvKiBDT05GSUdfUlQyWDAwX0xJQl9MRURTICovCiAKIHN0YXRpYyB2b2lkIHJ0NjFwY2lfZWVwcm9tcmVnaXN0ZXJfcmVhZChzdHJ1Y3QgZWVwcm9tXzkzY3g2ICplZXByb20pCiB7CkBAIC05NjcsNiArOTU3LDUwIEBACiAJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhSWF9DU1I5LCByZWcpOwogfQogCitzdGF0aWMgdm9pZCBydDYxcGNpX2NvbmZpZ19wcyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJCXN0cnVjdCBydDJ4MDBsaWJfY29uZiAqbGliY29uZikKK3sKKwllbnVtIGRldl9zdGF0ZSBzdGF0ZSA9CisJICAgIChsaWJjb25mLT5jb25mLT5mbGFncyAmIElFRUU4MDIxMV9DT05GX1BTKSA/CisJCVNUQVRFX1NMRUVQIDogU1RBVEVfQVdBS0U7CisJdTMyIHJlZzsKKworCWlmIChzdGF0ZSA9PSBTVEFURV9TTEVFUCkgeworCQlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIE1BQ19DU1IxMSwgJnJlZyk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBNQUNfQ1NSMTFfREVMQVlfQUZURVJfVEJDTiwKKwkJCQkgICBsaWJjb25mLT5jb25mLT5iZWFjb25faW50IC0gMTApOworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgTUFDX0NTUjExX1RCQ05fQkVGT1JFX1dBS0VVUCwKKwkJCQkgICBsaWJjb25mLT5jb25mLT5saXN0ZW5faW50ZXJ2YWwgLSAxKTsKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIE1BQ19DU1IxMV9XQUtFVVBfTEFURU5DWSwgNSk7CisKKwkJLyogV2UgbXVzdCBmaXJzdCBkaXNhYmxlIGF1dG93YWtlIGJlZm9yZSBpdCBjYW4gYmUgZW5hYmxlZCAqLworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgTUFDX0NTUjExX0FVVE9XQUtFLCAwKTsKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgTUFDX0NTUjExLCByZWcpOworCisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBNQUNfQ1NSMTFfQVVUT1dBS0UsIDEpOworCQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBNQUNfQ1NSMTEsIHJlZyk7CisKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgU09GVF9SRVNFVF9DU1IsIDB4MDAwMDAwMDUpOworCQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBJT19DTlRMX0NTUiwgMHgwMDAwMDAxYyk7CisJCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFBDSV9VU0VDX0NTUiwgMHgwMDAwMDA2MCk7CisKKwkJcnQ2MXBjaV9tY3VfcmVxdWVzdChydDJ4MDBkZXYsIE1DVV9TTEVFUCwgMHhmZiwgMCwgMCk7CisJfSBlbHNlIHsKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBNQUNfQ1NSMTEsICZyZWcpOworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgTUFDX0NTUjExX0RFTEFZX0FGVEVSX1RCQ04sIDApOworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgTUFDX0NTUjExX1RCQ05fQkVGT1JFX1dBS0VVUCwgMCk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBNQUNfQ1NSMTFfQVVUT1dBS0UsIDApOworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgTUFDX0NTUjExX1dBS0VVUF9MQVRFTkNZLCAwKTsKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgTUFDX0NTUjExLCByZWcpOworCisJCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFNPRlRfUkVTRVRfQ1NSLCAweDAwMDAwMDA3KTsKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgSU9fQ05UTF9DU1IsIDB4MDAwMDAwMTgpOworCQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBQQ0lfVVNFQ19DU1IsIDB4MDAwMDAwMjApOworCisJCXJ0NjFwY2lfbWN1X3JlcXVlc3QocnQyeDAwZGV2LCBNQ1VfV0FLRVVQLCAweGZmLCAwLCAwKTsKKwl9Cit9CisKIHN0YXRpYyB2b2lkIHJ0NjFwY2lfY29uZmlnKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCiAJCQkgICBzdHJ1Y3QgcnQyeDAwbGliX2NvbmYgKmxpYmNvbmYsCiAJCQkgICBjb25zdCB1bnNpZ25lZCBpbnQgZmxhZ3MpCkBAIC05ODQsNiArMTAxOCw4IEBACiAJCXJ0NjFwY2lfY29uZmlnX3JldHJ5X2xpbWl0KHJ0MngwMGRldiwgbGliY29uZik7CiAJaWYgKGZsYWdzICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0JFQUNPTl9JTlRFUlZBTCkKIAkJcnQ2MXBjaV9jb25maWdfZHVyYXRpb24ocnQyeDAwZGV2LCBsaWJjb25mKTsKKwlpZiAoZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUFMpCisJCXJ0NjFwY2lfY29uZmlnX3BzKHJ0MngwMGRldiwgbGliY29uZik7CiB9CiAKIC8qCkBAIC0xMDA3LDIxICsxMDQzLDI4IEBACiAJcXVhbC0+ZmFsc2VfY2NhID0gcnQyeDAwX2dldF9maWVsZDMyKHJlZywgU1RBX0NTUjFfRkFMU0VfQ0NBX0VSUk9SKTsKIH0KIAotc3RhdGljIHZvaWQgcnQ2MXBjaV9yZXNldF90dW5lcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQorc3RhdGljIGlubGluZSB2b2lkIHJ0NjFwY2lfc2V0X3ZnYyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJCSAgIHN0cnVjdCBsaW5rX3F1YWwgKnF1YWwsIHU4IHZnY19sZXZlbCkKIHsKLQlydDYxcGNpX2JicF93cml0ZShydDJ4MDBkZXYsIDE3LCAweDIwKTsKLQlydDJ4MDBkZXYtPmxpbmsudmdjX2xldmVsID0gMHgyMDsKKwlpZiAocXVhbC0+dmdjX2xldmVsICE9IHZnY19sZXZlbCkgeworCQlydDYxcGNpX2JicF93cml0ZShydDJ4MDBkZXYsIDE3LCB2Z2NfbGV2ZWwpOworCQlxdWFsLT52Z2NfbGV2ZWwgPSB2Z2NfbGV2ZWw7CisJCXF1YWwtPnZnY19sZXZlbF9yZWcgPSB2Z2NfbGV2ZWw7CisJfQogfQogCi1zdGF0aWMgdm9pZCBydDYxcGNpX2xpbmtfdHVuZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKK3N0YXRpYyB2b2lkIHJ0NjFwY2lfcmVzZXRfdHVuZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCQlzdHJ1Y3QgbGlua19xdWFsICpxdWFsKQogewotCWludCByc3NpID0gcnQyeDAwX2dldF9saW5rX3Jzc2koJnJ0MngwMGRldi0+bGluayk7Ci0JdTggcjE3OworCXJ0NjFwY2lfc2V0X3ZnYyhydDJ4MDBkZXYsIHF1YWwsIDB4MjApOworfQorCitzdGF0aWMgdm9pZCBydDYxcGNpX2xpbmtfdHVuZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCSAgICAgICBzdHJ1Y3QgbGlua19xdWFsICpxdWFsLCBjb25zdCB1MzIgY291bnQpCit7CiAJdTggdXBfYm91bmQ7CiAJdTggbG93X2JvdW5kOwogCi0JcnQ2MXBjaV9iYnBfcmVhZChydDJ4MDBkZXYsIDE3LCAmcjE3KTsKLQogCS8qCiAJICogRGV0ZXJtaW5lIHIxNyBib3VuZHMuCiAJICovCkBAIC0xMDUxLDM4ICsxMDk0LDMyIEBACiAJLyoKIAkgKiBTcGVjaWFsIGJpZy1SMTcgZm9yIHZlcnkgc2hvcnQgZGlzdGFuY2UKIAkgKi8KLQlpZiAocnNzaSA+PSAtMzUpIHsKLQkJaWYgKHIxNyAhPSAweDYwKQotCQkJcnQ2MXBjaV9iYnBfd3JpdGUocnQyeDAwZGV2LCAxNywgMHg2MCk7CisJaWYgKHF1YWwtPnJzc2kgPj0gLTM1KSB7CisJCXJ0NjFwY2lfc2V0X3ZnYyhydDJ4MDBkZXYsIHF1YWwsIDB4NjApOwogCQlyZXR1cm47CiAJfQogCiAJLyoKIAkgKiBTcGVjaWFsIGJpZy1SMTcgZm9yIHNob3J0IGRpc3RhbmNlCiAJICovCi0JaWYgKHJzc2kgPj0gLTU4KSB7Ci0JCWlmIChyMTcgIT0gdXBfYm91bmQpCi0JCQlydDYxcGNpX2JicF93cml0ZShydDJ4MDBkZXYsIDE3LCB1cF9ib3VuZCk7CisJaWYgKHF1YWwtPnJzc2kgPj0gLTU4KSB7CisJCXJ0NjFwY2lfc2V0X3ZnYyhydDJ4MDBkZXYsIHF1YWwsIHVwX2JvdW5kKTsKIAkJcmV0dXJuOwogCX0KIAogCS8qCiAJICogU3BlY2lhbCBiaWctUjE3IGZvciBtaWRkbGUtc2hvcnQgZGlzdGFuY2UKIAkgKi8KLQlpZiAocnNzaSA+PSAtNjYpIHsKLQkJbG93X2JvdW5kICs9IDB4MTA7Ci0JCWlmIChyMTcgIT0gbG93X2JvdW5kKQotCQkJcnQ2MXBjaV9iYnBfd3JpdGUocnQyeDAwZGV2LCAxNywgbG93X2JvdW5kKTsKKwlpZiAocXVhbC0+cnNzaSA+PSAtNjYpIHsKKwkJcnQ2MXBjaV9zZXRfdmdjKHJ0MngwMGRldiwgcXVhbCwgbG93X2JvdW5kICsgMHgxMCk7CiAJCXJldHVybjsKIAl9CiAKIAkvKgogCSAqIFNwZWNpYWwgbWlkLVIxNyBmb3IgbWlkZGxlIGRpc3RhbmNlCiAJICovCi0JaWYgKHJzc2kgPj0gLTc0KSB7Ci0JCWxvd19ib3VuZCArPSAweDA4OwotCQlpZiAocjE3ICE9IGxvd19ib3VuZCkKLQkJCXJ0NjFwY2lfYmJwX3dyaXRlKHJ0MngwMGRldiwgMTcsIGxvd19ib3VuZCk7CisJaWYgKHF1YWwtPnJzc2kgPj0gLTc0KSB7CisJCXJ0NjFwY2lfc2V0X3ZnYyhydDJ4MDBkZXYsIHF1YWwsIGxvd19ib3VuZCArIDB4MDgpOwogCQlyZXR1cm47CiAJfQogCkBAIC0xMDkwLDEyICsxMTI3LDEyIEBACiAJICogU3BlY2lhbCBjYXNlOiBDaGFuZ2UgdXBfYm91bmQgYmFzZWQgb24gdGhlIHJzc2kuCiAJICogTG93ZXIgdXBfYm91bmQgd2hlbiByc3NpIGlzIHdlYWtlciB0aGVuIC03NCBkQm0uCiAJICovCi0JdXBfYm91bmQgLT0gMiAqICgtNzQgLSByc3NpKTsKKwl1cF9ib3VuZCAtPSAyICogKC03NCAtIHF1YWwtPnJzc2kpOwogCWlmIChsb3dfYm91bmQgPiB1cF9ib3VuZCkKIAkJdXBfYm91bmQgPSBsb3dfYm91bmQ7CiAKLQlpZiAocjE3ID4gdXBfYm91bmQpIHsKLQkJcnQ2MXBjaV9iYnBfd3JpdGUocnQyeDAwZGV2LCAxNywgdXBfYm91bmQpOworCWlmIChxdWFsLT52Z2NfbGV2ZWwgPiB1cF9ib3VuZCkgeworCQlydDYxcGNpX3NldF92Z2MocnQyeDAwZGV2LCBxdWFsLCB1cF9ib3VuZCk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTExMDUsMTUgKzExNDIsMTAgQEAKIAkgKiByMTcgZG9lcyBub3QgeWV0IGV4Y2VlZCB1cHBlciBsaW1pdCwgY29udGludWUgYW5kIGJhc2UKIAkgKiB0aGUgcjE3IHR1bmluZyBvbiB0aGUgZmFsc2UgQ0NBIGNvdW50LgogCSAqLwotCWlmIChydDJ4MDBkZXYtPmxpbmsucXVhbC5mYWxzZV9jY2EgPiA1MTIgJiYgcjE3IDwgdXBfYm91bmQpIHsKLQkJaWYgKCsrcjE3ID4gdXBfYm91bmQpCi0JCQlyMTcgPSB1cF9ib3VuZDsKLQkJcnQ2MXBjaV9iYnBfd3JpdGUocnQyeDAwZGV2LCAxNywgcjE3KTsKLQl9IGVsc2UgaWYgKHJ0MngwMGRldi0+bGluay5xdWFsLmZhbHNlX2NjYSA8IDEwMCAmJiByMTcgPiBsb3dfYm91bmQpIHsKLQkJaWYgKC0tcjE3IDwgbG93X2JvdW5kKQotCQkJcjE3ID0gbG93X2JvdW5kOwotCQlydDYxcGNpX2JicF93cml0ZShydDJ4MDBkZXYsIDE3LCByMTcpOwotCX0KKwlpZiAoKHF1YWwtPmZhbHNlX2NjYSA+IDUxMikgJiYgKHF1YWwtPnZnY19sZXZlbCA8IHVwX2JvdW5kKSkKKwkJcnQ2MXBjaV9zZXRfdmdjKHJ0MngwMGRldiwgcXVhbCwgKytxdWFsLT52Z2NfbGV2ZWwpOworCWVsc2UgaWYgKChxdWFsLT5mYWxzZV9jY2EgPCAxMDApICYmIChxdWFsLT52Z2NfbGV2ZWwgPiBsb3dfYm91bmQpKQorCQlydDYxcGNpX3NldF92Z2MocnQyeDAwZGV2LCBxdWFsLCAtLXF1YWwtPnZnY19sZXZlbCk7CiB9CiAKIC8qCkBAIC0xMTQxLDI1ICsxMTczLDM3IEBACiAJcmV0dXJuIGZ3X25hbWU7CiB9CiAKLXN0YXRpYyB1MTYgcnQ2MXBjaV9nZXRfZmlybXdhcmVfY3JjKGNvbnN0IHZvaWQgKmRhdGEsIGNvbnN0IHNpemVfdCBsZW4pCitzdGF0aWMgaW50IHJ0NjFwY2lfY2hlY2tfZmlybXdhcmUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCQkgIGNvbnN0IHU4ICpkYXRhLCBjb25zdCBzaXplX3QgbGVuKQogeworCXUxNiBmd19jcmM7CiAJdTE2IGNyYzsKIAogCS8qCi0JICogVXNlIHRoZSBjcmMgaXR1LXQgYWxnb3JpdGhtLgorCSAqIE9ubHkgc3VwcG9ydCA4a2IgZmlybXdhcmUgZmlsZXMuCisJICovCisJaWYgKGxlbiAhPSA4MTkyKQorCQlyZXR1cm4gRldfQkFEX0xFTkdUSDsKKworCS8qCiAJICogVGhlIGxhc3QgMiBieXRlcyBpbiB0aGUgZmlybXdhcmUgYXJyYXkgYXJlIHRoZSBjcmMgY2hlY2tzdW0gaXRzZWxmLAogCSAqIHRoaXMgbWVhbnMgdGhhdCB3ZSBzaG91bGQgbmV2ZXIgcGFzcyB0aG9zZSAyIGJ5dGVzIHRvIHRoZSBjcmMKIAkgKiBhbGdvcml0aG0uCiAJICovCisJZndfY3JjID0gKGRhdGFbbGVuIC0gMl0gPDwgOCB8IGRhdGFbbGVuIC0gMV0pOworCisJLyoKKwkgKiBVc2UgdGhlIGNyYyBpdHUtdCBhbGdvcml0aG0uCisJICovCiAJY3JjID0gY3JjX2l0dV90KDAsIGRhdGEsIGxlbiAtIDIpOwogCWNyYyA9IGNyY19pdHVfdF9ieXRlKGNyYywgMCk7CiAJY3JjID0gY3JjX2l0dV90X2J5dGUoY3JjLCAwKTsKIAotCXJldHVybiBjcmM7CisJcmV0dXJuIChmd19jcmMgPT0gY3JjKSA/IEZXX09LIDogRldfQkFEX0NSQzsKIH0KIAotc3RhdGljIGludCBydDYxcGNpX2xvYWRfZmlybXdhcmUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwgY29uc3Qgdm9pZCAqZGF0YSwKLQkJCQkgY29uc3Qgc2l6ZV90IGxlbikKK3N0YXRpYyBpbnQgcnQ2MXBjaV9sb2FkX2Zpcm13YXJlKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkJIGNvbnN0IHU4ICpkYXRhLCBjb25zdCBzaXplX3QgbGVuKQogewogCWludCBpOwogCXUzMiByZWc7CkBAIC0xNjU2LDI0ICsxNzAwLDEwIEBACiAKIHN0YXRpYyB2b2lkIHJ0NjFwY2lfZGlzYWJsZV9yYWRpbyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQogewotCXUzMiByZWc7Ci0KKwkvKgorCSAqIERpc2FibGUgcG93ZXIKKwkgKi8KIAlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBNQUNfQ1NSMTAsIDB4MDAwMDE4MTgpOwotCi0JLyoKLQkgKiBEaXNhYmxlIHN5bmNocm9uaXNhdGlvbi4KLQkgKi8KLQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWFJYX0NTUjksIDApOwotCi0JLyoKLQkgKiBDYW5jZWwgUlggYW5kIFRYLgotCSAqLwotCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgVFhfQ05UTF9DU1IsICZyZWcpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWF9DTlRMX0NTUl9BQk9SVF9UWF9BQzAsIDEpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWF9DTlRMX0NTUl9BQk9SVF9UWF9BQzEsIDEpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWF9DTlRMX0NTUl9BQk9SVF9UWF9BQzIsIDEpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWF9DTlRMX0NTUl9BQk9SVF9UWF9BQzMsIDEpOwotCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYX0NOVExfQ1NSLCByZWcpOwogfQogCiBzdGF0aWMgaW50IHJ0NjFwY2lfc2V0X3N0YXRlKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsIGVudW0gZGV2X3N0YXRlIHN0YXRlKQpAQCAtMTgxMiw3ICsxODQyLDcgQEAKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMF9USU1FU1RBTVAsCiAJCQkgICB0ZXN0X2JpdChFTlRSWV9UWERfUkVRX1RJTUVTVEFNUCwgJnR4ZGVzYy0+ZmxhZ3MpKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMF9PRkRNLAotCQkJICAgdGVzdF9iaXQoRU5UUllfVFhEX09GRE1fUkFURSwgJnR4ZGVzYy0+ZmxhZ3MpKTsKKwkJCSAgICh0eGRlc2MtPnJhdGVfbW9kZSA9PSBSQVRFX01PREVfT0ZETSkpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cwX0lGUywgdHhkZXNjLT5pZnMpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cwX1JFVFJZX01PREUsCiAJCQkgICB0ZXN0X2JpdChFTlRSWV9UWERfUkVUUllfTU9ERSwgJnR4ZGVzYy0+ZmxhZ3MpKTsKQEAgLTE4OTYsNiArMTkyNiwyNCBAQAogCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYX0NOVExfQ1NSLCByZWcpOwogfQogCitzdGF0aWMgdm9pZCBydDYxcGNpX2tpbGxfdHhfcXVldWUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCQkgIGNvbnN0IGVudW0gZGF0YV9xdWV1ZV9xaWQgcWlkKQoreworCXUzMiByZWc7CisKKwlpZiAocWlkID09IFFJRF9CRUFDT04pIHsKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhSWF9DU1I5LCAwKTsKKwkJcmV0dXJuOworCX0KKworCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgVFhfQ05UTF9DU1IsICZyZWcpOworCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWF9DTlRMX0NTUl9BQk9SVF9UWF9BQzAsIChxaWQgPT0gUUlEX0FDX0JFKSk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYX0NOVExfQ1NSX0FCT1JUX1RYX0FDMSwgKHFpZCA9PSBRSURfQUNfQkspKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhfQ05UTF9DU1JfQUJPUlRfVFhfQUMyLCAocWlkID09IFFJRF9BQ19WSSkpOworCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWF9DTlRMX0NTUl9BQk9SVF9UWF9BQzMsIChxaWQgPT0gUUlEX0FDX1ZPKSk7CisJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhfQ05UTF9DU1IsIHJlZyk7Cit9CisKIC8qCiAgKiBSWCBjb250cm9sIGhhbmRsZXJzCiAgKi8KQEAgLTIxOTUsNyArMjI0Myw4IEBACiAJaWYgKHdvcmQgPT0gMHhmZmZmKSB7CiAJCXJ0MngwMF9zZXRfZmllbGQxNigmd29yZCwgRUVQUk9NX05JQ19FTkFCTEVfRElWRVJTSVRZLCAwKTsKIAkJcnQyeDAwX3NldF9maWVsZDE2KCZ3b3JkLCBFRVBST01fTklDX1RYX0RJVkVSU0lUWSwgMCk7Ci0JCXJ0MngwMF9zZXRfZmllbGQxNigmd29yZCwgRUVQUk9NX05JQ19UWF9SWF9GSVhFRCwgMCk7CisJCXJ0MngwMF9zZXRfZmllbGQxNigmd29yZCwgRUVQUk9NX05JQ19SWF9GSVhFRCwgMCk7CisJCXJ0MngwMF9zZXRfZmllbGQxNigmd29yZCwgRUVQUk9NX05JQ19UWF9GSVhFRCwgMCk7CiAJCXJ0MngwMF9zZXRfZmllbGQxNigmd29yZCwgRUVQUk9NX05JQ19FWFRFUk5BTF9MTkFfQkcsIDApOwogCQlydDJ4MDBfc2V0X2ZpZWxkMTYoJndvcmQsIEVFUFJPTV9OSUNfQ0FSREJVU19BQ0NFTCwgMCk7CiAJCXJ0MngwMF9zZXRfZmllbGQxNigmd29yZCwgRUVQUk9NX05JQ19FWFRFUk5BTF9MTkFfQSwgMCk7CkBAIC0yMzM5LDI0ICsyMzg4LDEwIEBACiAJICovCiAJaWYgKHJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjI1MjkpICYmCiAJICAgICF0ZXN0X2JpdChDT05GSUdfRE9VQkxFX0FOVEVOTkEsICZydDJ4MDBkZXYtPmZsYWdzKSkgewotCQlzd2l0Y2ggKHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sIEVFUFJPTV9OSUNfVFhfUlhfRklYRUQpKSB7Ci0JCWNhc2UgMDoKLQkJCXJ0MngwMGRldi0+ZGVmYXVsdF9hbnQudHggPSBBTlRFTk5BX0I7Ci0JCQlydDJ4MDBkZXYtPmRlZmF1bHRfYW50LnJ4ID0gQU5URU5OQV9BOwotCQkJYnJlYWs7Ci0JCWNhc2UgMToKLQkJCXJ0MngwMGRldi0+ZGVmYXVsdF9hbnQudHggPSBBTlRFTk5BX0I7Ci0JCQlydDJ4MDBkZXYtPmRlZmF1bHRfYW50LnJ4ID0gQU5URU5OQV9COwotCQkJYnJlYWs7Ci0JCWNhc2UgMjoKLQkJCXJ0MngwMGRldi0+ZGVmYXVsdF9hbnQudHggPSBBTlRFTk5BX0E7Ci0JCQlydDJ4MDBkZXYtPmRlZmF1bHRfYW50LnJ4ID0gQU5URU5OQV9BOwotCQkJYnJlYWs7Ci0JCWNhc2UgMzoKLQkJCXJ0MngwMGRldi0+ZGVmYXVsdF9hbnQudHggPSBBTlRFTk5BX0E7Ci0JCQlydDJ4MDBkZXYtPmRlZmF1bHRfYW50LnJ4ID0gQU5URU5OQV9COwotCQkJYnJlYWs7Ci0JCX0KKwkJcnQyeDAwZGV2LT5kZWZhdWx0X2FudC5yeCA9CisJCSAgICBBTlRFTk5BX0EgKyBydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLCBFRVBST01fTklDX1JYX0ZJWEVEKTsKKwkJcnQyeDAwZGV2LT5kZWZhdWx0X2FudC50eCA9CisJCSAgICBBTlRFTk5BX0IgLSBydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLCBFRVBST01fTklDX1RYX0ZJWEVEKTsKIAogCQlpZiAocnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwgRUVQUk9NX05JQ19UWF9ESVZFUlNJVFkpKQogCQkJcnQyeDAwZGV2LT5kZWZhdWx0X2FudC50eCA9IEFOVEVOTkFfU1dfRElWRVJTSVRZOwpAQCAtMjUzNCw3ICsyNTY5LDkgQEAKIAkgKi8KIAlydDJ4MDBkZXYtPmh3LT5mbGFncyA9CiAJICAgIElFRUU4MDIxMV9IV19IT1NUX0JST0FEQ0FTVF9QU19CVUZGRVJJTkcgfAotCSAgICBJRUVFODAyMTFfSFdfU0lHTkFMX0RCTTsKKwkgICAgSUVFRTgwMjExX0hXX1NJR05BTF9EQk0gfAorCSAgICBJRUVFODAyMTFfSFdfU1VQUE9SVFNfUFMgfAorCSAgICBJRUVFODAyMTFfSFdfUFNfTlVMTEZVTkNfU1RBQ0s7CiAJcnQyeDAwZGV2LT5ody0+ZXh0cmFfdHhfaGVhZHJvb20gPSAwOwogCiAJU0VUX0lFRUU4MDIxMV9ERVYocnQyeDAwZGV2LT5odywgcnQyeDAwZGV2LT5kZXYpOwpAQCAtMjYzMyw2ICsyNjcwLDcgQEAKIAlzdHJ1Y3QgcnQyeDAwX2ZpZWxkMzIgZmllbGQ7CiAJaW50IHJldHZhbDsKIAl1MzIgcmVnOworCXUzMiBvZmZzZXQ7CiAKIAkvKgogCSAqIEZpcnN0IHBhc3MgdGhlIGNvbmZpZ3VyYXRpb24gdGhyb3VnaCBydDJ4MDBsaWIsIHRoYXQgd2lsbApAQCAtMjY0NCwyNCArMjY4MiwyMyBAQAogCWlmIChyZXR2YWwpCiAJCXJldHVybiByZXR2YWw7CiAKKwkvKgorCSAqIFdlIG9ubHkgbmVlZCB0byBwZXJmb3JtIGFkZGl0aW9uYWwgcmVnaXN0ZXIgaW5pdGlhbGl6YXRpb24KKwkgKiBmb3IgV01NIHF1ZXVlcy8KKwkgKi8KKwlpZiAocXVldWVfaWR4ID49IDQpCisJCXJldHVybiAwOworCiAJcXVldWUgPSBydDJ4MDBxdWV1ZV9nZXRfcXVldWUocnQyeDAwZGV2LCBxdWV1ZV9pZHgpOwogCiAJLyogVXBkYXRlIFdNTSBUWE9QIHJlZ2lzdGVyICovCi0JaWYgKHF1ZXVlX2lkeCA8IDIpIHsKLQkJZmllbGQuYml0X29mZnNldCA9IHF1ZXVlX2lkeCAqIDE2OwotCQlmaWVsZC5iaXRfbWFzayA9IDB4ZmZmZiA8PCBmaWVsZC5iaXRfb2Zmc2V0OworCW9mZnNldCA9IEFDX1RYT1BfQ1NSMCArIChzaXplb2YodTMyKSAqICghIShxdWV1ZV9pZHggJiAyKSkpOworCWZpZWxkLmJpdF9vZmZzZXQgPSAocXVldWVfaWR4ICYgMSkgKiAxNjsKKwlmaWVsZC5iaXRfbWFzayA9IDB4ZmZmZiA8PCBmaWVsZC5iaXRfb2Zmc2V0OwogCi0JCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgQUNfVFhPUF9DU1IwLCAmcmVnKTsKLQkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIGZpZWxkLCBxdWV1ZS0+dHhvcCk7Ci0JCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIEFDX1RYT1BfQ1NSMCwgcmVnKTsKLQl9IGVsc2UgaWYgKHF1ZXVlX2lkeCA8IDQpIHsKLQkJZmllbGQuYml0X29mZnNldCA9IChxdWV1ZV9pZHggLSAyKSAqIDE2OwotCQlmaWVsZC5iaXRfbWFzayA9IDB4ZmZmZiA8PCBmaWVsZC5iaXRfb2Zmc2V0OwotCi0JCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgQUNfVFhPUF9DU1IxLCAmcmVnKTsKLQkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIGZpZWxkLCBxdWV1ZS0+dHhvcCk7Ci0JCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIEFDX1RYT1BfQ1NSMSwgcmVnKTsKLQl9CisJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBvZmZzZXQsICZyZWcpOworCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBmaWVsZCwgcXVldWUtPnR4b3ApOworCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIG9mZnNldCwgcmVnKTsKIAogCS8qIFVwZGF0ZSBXTU0gcmVnaXN0ZXJzICovCiAJZmllbGQuYml0X29mZnNldCA9IHF1ZXVlX2lkeCAqIDQ7CkBAIC0yNzE3LDcgKzI3NTQsNyBAQAogCS5pcnFfaGFuZGxlcgkJPSBydDYxcGNpX2ludGVycnVwdCwKIAkucHJvYmVfaHcJCT0gcnQ2MXBjaV9wcm9iZV9odywKIAkuZ2V0X2Zpcm13YXJlX25hbWUJPSBydDYxcGNpX2dldF9maXJtd2FyZV9uYW1lLAotCS5nZXRfZmlybXdhcmVfY3JjCT0gcnQ2MXBjaV9nZXRfZmlybXdhcmVfY3JjLAorCS5jaGVja19maXJtd2FyZQkJPSBydDYxcGNpX2NoZWNrX2Zpcm13YXJlLAogCS5sb2FkX2Zpcm13YXJlCQk9IHJ0NjFwY2lfbG9hZF9maXJtd2FyZSwKIAkuaW5pdGlhbGl6ZQkJPSBydDJ4MDBwY2lfaW5pdGlhbGl6ZSwKIAkudW5pbml0aWFsaXplCQk9IHJ0MngwMHBjaV91bmluaXRpYWxpemUsCkBAIC0yNzMyLDYgKzI3NjksNyBAQAogCS53cml0ZV90eF9kYXRhCQk9IHJ0MngwMHBjaV93cml0ZV90eF9kYXRhLAogCS53cml0ZV9iZWFjb24JCT0gcnQ2MXBjaV93cml0ZV9iZWFjb24sCiAJLmtpY2tfdHhfcXVldWUJCT0gcnQ2MXBjaV9raWNrX3R4X3F1ZXVlLAorCS5raWxsX3R4X3F1ZXVlCQk9IHJ0NjFwY2lfa2lsbF90eF9xdWV1ZSwKIAkuZmlsbF9yeGRvbmUJCT0gcnQ2MXBjaV9maWxsX3J4ZG9uZSwKIAkuY29uZmlnX3NoYXJlZF9rZXkJPSBydDYxcGNpX2NvbmZpZ19zaGFyZWRfa2V5LAogCS5jb25maWdfcGFpcndpc2Vfa2V5CT0gcnQ2MXBjaV9jb25maWdfcGFpcndpc2Vfa2V5LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NjFwY2kuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDYxcGNpLmgKaW5kZXggNjVmZTMzMy4uNDFlODk1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NjFwY2kuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ2MXBjaS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLQlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA4IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CisJQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOSBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAogCTxodHRwOi8vcnQyeDAwLnNlcmlhbG1vbmtleS5jb20+CiAKIAlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtNTAsOCArNTAsOCBAQAogI2RlZmluZSBFRVBST01fU0laRQkJCTB4MDEwMAogI2RlZmluZSBCQlBfQkFTRQkJCTB4MDAwMAogI2RlZmluZSBCQlBfU0laRQkJCTB4MDA4MAotI2RlZmluZSBSRl9CQVNFCQkJCTB4MDAwMAotI2RlZmluZSBSRl9TSVpFCQkJCTB4MDAxNAorI2RlZmluZSBSRl9CQVNFCQkJCTB4MDAwNAorI2RlZmluZSBSRl9TSVpFCQkJCTB4MDAxMAogCiAvKgogICogTnVtYmVyIG9mIFRYIHF1ZXVlcy4KQEAgLTg4LDggKzg4LDEwIEBACiAKIC8qCiAgKiBTT0ZUX1JFU0VUX0NTUgorICogRk9SQ0VfQ0xPQ0tfT046IEhvc3QgZm9yY2UgTUFDIGNsb2NrIE9OCiAgKi8KICNkZWZpbmUgU09GVF9SRVNFVF9DU1IJCQkweDAwMTAKKyNkZWZpbmUgU09GVF9SRVNFVF9DU1JfRk9SQ0VfQ0xPQ0tfT04JRklFTEQzMigweDAwMDAwMDAyKQogCiAvKgogICogTUNVX0lOVF9TT1VSQ0VfQ1NSOiBNQ1UgaW50ZXJydXB0IHNvdXJjZS9tYXNrIHJlZ2lzdGVyLgpAQCAtMTA1NCw4ICsxMDU2LDEwIEBACiAKIC8qCiAgKiBJT19DTlRMX0NTUgorICogUkZfUFM6IFNldCBSRiBpbnRlcmZhY2UgdmFsdWUgdG8gcG93ZXIgc2F2ZQogICovCiAjZGVmaW5lIElPX0NOVExfQ1NSCQkJMHgzNDk4CisjZGVmaW5lIElPX0NOVExfQ1NSX1JGX1BTCQlGSUVMRDMyKDB4MDAwMDAwMDQpCiAKIC8qCiAgKiBVQVJUX0lOVF9TT1VSQ0VfQ1NSCkBAIC0xMTg2LDcgKzExOTAsOCBAQAogI2RlZmluZSBFRVBST01fTklDCQkJMHgwMDExCiAjZGVmaW5lIEVFUFJPTV9OSUNfRU5BQkxFX0RJVkVSU0lUWQlGSUVMRDE2KDB4MDAwMSkKICNkZWZpbmUgRUVQUk9NX05JQ19UWF9ESVZFUlNJVFkJCUZJRUxEMTYoMHgwMDAyKQotI2RlZmluZSBFRVBST01fTklDX1RYX1JYX0ZJWEVECQlGSUVMRDE2KDB4MDAwYykKKyNkZWZpbmUgRUVQUk9NX05JQ19SWF9GSVhFRAkJRklFTEQxNigweDAwMDQpCisjZGVmaW5lIEVFUFJPTV9OSUNfVFhfRklYRUQJCUZJRUxEMTYoMHgwMDA4KQogI2RlZmluZSBFRVBST01fTklDX0VYVEVSTkFMX0xOQV9CRwlGSUVMRDE2KDB4MDAxMCkKICNkZWZpbmUgRUVQUk9NX05JQ19DQVJEQlVTX0FDQ0VMCUZJRUxEMTYoMHgwMDIwKQogI2RlZmluZSBFRVBST01fTklDX0VYVEVSTkFMX0xOQV9BCUZJRUxEMTYoMHgwMDQwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NzN1c2IuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDczdXNiLmMKaW5kZXggY2VmZWUxYi4uMjRmZGZkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NzN1c2IuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ3M3VzYi5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLQlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA4IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CisJQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOSBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAogCTxodHRwOi8vcnQyeDAwLnNlcmlhbG1vbmtleS5jb20+CiAKIAlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMTIyLDkgKzEyMiw2IEBACiB7CiAJdTMyIHJlZzsKIAotCWlmICghd29yZCkKLQkJcmV0dXJuOwotCiAJbXV0ZXhfbG9jaygmcnQyeDAwZGV2LT5jc3JfbXV0ZXgpOwogCiAJLyoKQEAgLTE4Niw2ICsxODMsMTggQEAKIH07CiAjZW5kaWYgLyogQ09ORklHX1JUMlgwMF9MSUJfREVCVUdGUyAqLwogCisjaWZkZWYgQ09ORklHX1JUMlgwMF9MSUJfUkZLSUxMCitzdGF0aWMgaW50IHJ0NzN1c2JfcmZraWxsX3BvbGwoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKK3sKKwl1MzIgcmVnOworCisJcnQyeDAwdXNiX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBNQUNfQ1NSMTMsICZyZWcpOworCXJldHVybiBydDJ4MDBfZ2V0X2ZpZWxkMzIocmVnLCBNQUNfQ1NSMTNfQklUNyk7Cit9CisjZWxzZQorI2RlZmluZSBydDczdXNiX3Jma2lsbF9wb2xsCU5VTEwKKyNlbmRpZiAvKiBDT05GSUdfUlQyWDAwX0xJQl9SRktJTEwgKi8KKwogI2lmZGVmIENPTkZJR19SVDJYMDBfTElCX0xFRFMKIHN0YXRpYyB2b2lkIHJ0NzN1c2JfYnJpZ2h0bmVzc19zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsCiAJCQkJICAgZW51bSBsZWRfYnJpZ2h0bmVzcyBicmlnaHRuZXNzKQpAQCAtODQ0LDYgKzg1Myw0NCBAQAogCXJ0MngwMHVzYl9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYUlhfQ1NSOSwgcmVnKTsKIH0KIAorc3RhdGljIHZvaWQgcnQ3M3VzYl9jb25maWdfcHMoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCQlzdHJ1Y3QgcnQyeDAwbGliX2NvbmYgKmxpYmNvbmYpCit7CisJZW51bSBkZXZfc3RhdGUgc3RhdGUgPQorCSAgICAobGliY29uZi0+Y29uZi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9QUykgPworCQlTVEFURV9TTEVFUCA6IFNUQVRFX0FXQUtFOworCXUzMiByZWc7CisKKwlpZiAoc3RhdGUgPT0gU1RBVEVfU0xFRVApIHsKKwkJcnQyeDAwdXNiX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBNQUNfQ1NSMTEsICZyZWcpOworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgTUFDX0NTUjExX0RFTEFZX0FGVEVSX1RCQ04sCisJCQkJICAgbGliY29uZi0+Y29uZi0+YmVhY29uX2ludCAtIDEwKTsKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIE1BQ19DU1IxMV9UQkNOX0JFRk9SRV9XQUtFVVAsCisJCQkJICAgbGliY29uZi0+Y29uZi0+bGlzdGVuX2ludGVydmFsIC0gMSk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBNQUNfQ1NSMTFfV0FLRVVQX0xBVEVOQ1ksIDUpOworCisJCS8qIFdlIG11c3QgZmlyc3QgZGlzYWJsZSBhdXRvd2FrZSBiZWZvcmUgaXQgY2FuIGJlIGVuYWJsZWQgKi8KKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIE1BQ19DU1IxMV9BVVRPV0FLRSwgMCk7CisJCXJ0MngwMHVzYl9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIE1BQ19DU1IxMSwgcmVnKTsKKworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgTUFDX0NTUjExX0FVVE9XQUtFLCAxKTsKKwkJcnQyeDAwdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgTUFDX0NTUjExLCByZWcpOworCisJCXJ0MngwMHVzYl92ZW5kb3JfcmVxdWVzdF9zdyhydDJ4MDBkZXYsIFVTQl9ERVZJQ0VfTU9ERSwgMCwKKwkJCQkJICAgIFVTQl9NT0RFX1NMRUVQLCBSRUdJU1RFUl9USU1FT1VUKTsKKwl9IGVsc2UgeworCQlydDJ4MDB1c2JfdmVuZG9yX3JlcXVlc3Rfc3cocnQyeDAwZGV2LCBVU0JfREVWSUNFX01PREUsIDAsCisJCQkJCSAgICBVU0JfTU9ERV9XQUtFVVAsIFJFR0lTVEVSX1RJTUVPVVQpOworCisJCXJ0MngwMHVzYl9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgTUFDX0NTUjExLCAmcmVnKTsKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIE1BQ19DU1IxMV9ERUxBWV9BRlRFUl9UQkNOLCAwKTsKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIE1BQ19DU1IxMV9UQkNOX0JFRk9SRV9XQUtFVVAsIDApOworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgTUFDX0NTUjExX0FVVE9XQUtFLCAwKTsKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIE1BQ19DU1IxMV9XQUtFVVBfTEFURU5DWSwgMCk7CisJCXJ0MngwMHVzYl9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIE1BQ19DU1IxMSwgcmVnKTsKKwl9Cit9CisKIHN0YXRpYyB2b2lkIHJ0NzN1c2JfY29uZmlnKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCiAJCQkgICBzdHJ1Y3QgcnQyeDAwbGliX2NvbmYgKmxpYmNvbmYsCiAJCQkgICBjb25zdCB1bnNpZ25lZCBpbnQgZmxhZ3MpCkBAIC04NjEsNiArOTA4LDggQEAKIAkJcnQ3M3VzYl9jb25maWdfcmV0cnlfbGltaXQocnQyeDAwZGV2LCBsaWJjb25mKTsKIAlpZiAoZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfQkVBQ09OX0lOVEVSVkFMKQogCQlydDczdXNiX2NvbmZpZ19kdXJhdGlvbihydDJ4MDBkZXYsIGxpYmNvbmYpOworCWlmIChmbGFncyAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9QUykKKwkJcnQ3M3VzYl9jb25maWdfcHMocnQyeDAwZGV2LCBsaWJjb25mKTsKIH0KIAogLyoKQEAgLTg4NCwyMSArOTMzLDI4IEBACiAJcXVhbC0+ZmFsc2VfY2NhID0gcnQyeDAwX2dldF9maWVsZDMyKHJlZywgU1RBX0NTUjFfRkFMU0VfQ0NBX0VSUk9SKTsKIH0KIAotc3RhdGljIHZvaWQgcnQ3M3VzYl9yZXNldF90dW5lcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQorc3RhdGljIGlubGluZSB2b2lkIHJ0NzN1c2Jfc2V0X3ZnYyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJCSAgIHN0cnVjdCBsaW5rX3F1YWwgKnF1YWwsIHU4IHZnY19sZXZlbCkKIHsKLQlydDczdXNiX2JicF93cml0ZShydDJ4MDBkZXYsIDE3LCAweDIwKTsKLQlydDJ4MDBkZXYtPmxpbmsudmdjX2xldmVsID0gMHgyMDsKKwlpZiAocXVhbC0+dmdjX2xldmVsICE9IHZnY19sZXZlbCkgeworCQlydDczdXNiX2JicF93cml0ZShydDJ4MDBkZXYsIDE3LCB2Z2NfbGV2ZWwpOworCQlxdWFsLT52Z2NfbGV2ZWwgPSB2Z2NfbGV2ZWw7CisJCXF1YWwtPnZnY19sZXZlbF9yZWcgPSB2Z2NfbGV2ZWw7CisJfQogfQogCi1zdGF0aWMgdm9pZCBydDczdXNiX2xpbmtfdHVuZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKK3N0YXRpYyB2b2lkIHJ0NzN1c2JfcmVzZXRfdHVuZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCQlzdHJ1Y3QgbGlua19xdWFsICpxdWFsKQogewotCWludCByc3NpID0gcnQyeDAwX2dldF9saW5rX3Jzc2koJnJ0MngwMGRldi0+bGluayk7Ci0JdTggcjE3OworCXJ0NzN1c2Jfc2V0X3ZnYyhydDJ4MDBkZXYsIHF1YWwsIDB4MjApOworfQorCitzdGF0aWMgdm9pZCBydDczdXNiX2xpbmtfdHVuZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCSAgICAgICBzdHJ1Y3QgbGlua19xdWFsICpxdWFsLCBjb25zdCB1MzIgY291bnQpCit7CiAJdTggdXBfYm91bmQ7CiAJdTggbG93X2JvdW5kOwogCi0JcnQ3M3VzYl9iYnBfcmVhZChydDJ4MDBkZXYsIDE3LCAmcjE3KTsKLQogCS8qCiAJICogRGV0ZXJtaW5lIHIxNyBib3VuZHMuCiAJICovCkBAIC05MTEsMTAgKzk2NywxMCBAQAogCQkJdXBfYm91bmQgKz0gMHgxMDsKIAkJfQogCX0gZWxzZSB7Ci0JCWlmIChyc3NpID4gLTgyKSB7CisJCWlmIChxdWFsLT5yc3NpID4gLTgyKSB7CiAJCQlsb3dfYm91bmQgPSAweDFjOwogCQkJdXBfYm91bmQgPSAweDQwOwotCQl9IGVsc2UgaWYgKHJzc2kgPiAtODQpIHsKKwkJfSBlbHNlIGlmIChxdWFsLT5yc3NpID4gLTg0KSB7CiAJCQlsb3dfYm91bmQgPSAweDFjOwogCQkJdXBfYm91bmQgPSAweDIwOwogCQl9IGVsc2UgewpAQCAtOTM4LDM3ICs5OTQsMzIgQEAKIAkvKgogCSAqIFNwZWNpYWwgYmlnLVIxNyBmb3IgdmVyeSBzaG9ydCBkaXN0YW5jZQogCSAqLwotCWlmIChyc3NpID4gLTM1KSB7Ci0JCWlmIChyMTcgIT0gMHg2MCkKLQkJCXJ0NzN1c2JfYmJwX3dyaXRlKHJ0MngwMGRldiwgMTcsIDB4NjApOworCWlmIChxdWFsLT5yc3NpID4gLTM1KSB7CisJCXJ0NzN1c2Jfc2V0X3ZnYyhydDJ4MDBkZXYsIHF1YWwsIDB4NjApOwogCQlyZXR1cm47CiAJfQogCiAJLyoKIAkgKiBTcGVjaWFsIGJpZy1SMTcgZm9yIHNob3J0IGRpc3RhbmNlCiAJICovCi0JaWYgKHJzc2kgPj0gLTU4KSB7Ci0JCWlmIChyMTcgIT0gdXBfYm91bmQpCi0JCQlydDczdXNiX2JicF93cml0ZShydDJ4MDBkZXYsIDE3LCB1cF9ib3VuZCk7CisJaWYgKHF1YWwtPnJzc2kgPj0gLTU4KSB7CisJCXJ0NzN1c2Jfc2V0X3ZnYyhydDJ4MDBkZXYsIHF1YWwsIHVwX2JvdW5kKTsKIAkJcmV0dXJuOwogCX0KIAogCS8qCiAJICogU3BlY2lhbCBiaWctUjE3IGZvciBtaWRkbGUtc2hvcnQgZGlzdGFuY2UKIAkgKi8KLQlpZiAocnNzaSA+PSAtNjYpIHsKLQkJbG93X2JvdW5kICs9IDB4MTA7Ci0JCWlmIChyMTcgIT0gbG93X2JvdW5kKQotCQkJcnQ3M3VzYl9iYnBfd3JpdGUocnQyeDAwZGV2LCAxNywgbG93X2JvdW5kKTsKKwlpZiAocXVhbC0+cnNzaSA+PSAtNjYpIHsKKwkJcnQ3M3VzYl9zZXRfdmdjKHJ0MngwMGRldiwgcXVhbCwgbG93X2JvdW5kICsgMHgxMCk7CiAJCXJldHVybjsKIAl9CiAKIAkvKgogCSAqIFNwZWNpYWwgbWlkLVIxNyBmb3IgbWlkZGxlIGRpc3RhbmNlCiAJICovCi0JaWYgKHJzc2kgPj0gLTc0KSB7Ci0JCWlmIChyMTcgIT0gKGxvd19ib3VuZCArIDB4MTApKQotCQkJcnQ3M3VzYl9iYnBfd3JpdGUocnQyeDAwZGV2LCAxNywgbG93X2JvdW5kICsgMHgwOCk7CisJaWYgKHF1YWwtPnJzc2kgPj0gLTc0KSB7CisJCXJ0NzN1c2Jfc2V0X3ZnYyhydDJ4MDBkZXYsIHF1YWwsIGxvd19ib3VuZCArIDB4MDgpOwogCQlyZXR1cm47CiAJfQogCkBAIC05NzYsMTIgKzEwMjcsMTIgQEAKIAkgKiBTcGVjaWFsIGNhc2U6IENoYW5nZSB1cF9ib3VuZCBiYXNlZCBvbiB0aGUgcnNzaS4KIAkgKiBMb3dlciB1cF9ib3VuZCB3aGVuIHJzc2kgaXMgd2Vha2VyIHRoZW4gLTc0IGRCbS4KIAkgKi8KLQl1cF9ib3VuZCAtPSAyICogKC03NCAtIHJzc2kpOworCXVwX2JvdW5kIC09IDIgKiAoLTc0IC0gcXVhbC0+cnNzaSk7CiAJaWYgKGxvd19ib3VuZCA+IHVwX2JvdW5kKQogCQl1cF9ib3VuZCA9IGxvd19ib3VuZDsKIAotCWlmIChyMTcgPiB1cF9ib3VuZCkgewotCQlydDczdXNiX2JicF93cml0ZShydDJ4MDBkZXYsIDE3LCB1cF9ib3VuZCk7CisJaWYgKHF1YWwtPnZnY19sZXZlbCA+IHVwX2JvdW5kKSB7CisJCXJ0NzN1c2Jfc2V0X3ZnYyhydDJ4MDBkZXYsIHF1YWwsIHVwX2JvdW5kKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtOTkxLDE3ICsxMDQyLDEyIEBACiAJICogcjE3IGRvZXMgbm90IHlldCBleGNlZWQgdXBwZXIgbGltaXQsIGNvbnRpbnVlIGFuZCBiYXNlCiAJICogdGhlIHIxNyB0dW5pbmcgb24gdGhlIGZhbHNlIENDQSBjb3VudC4KIAkgKi8KLQlpZiAocnQyeDAwZGV2LT5saW5rLnF1YWwuZmFsc2VfY2NhID4gNTEyICYmIHIxNyA8IHVwX2JvdW5kKSB7Ci0JCXIxNyArPSA0OwotCQlpZiAocjE3ID4gdXBfYm91bmQpCi0JCQlyMTcgPSB1cF9ib3VuZDsKLQkJcnQ3M3VzYl9iYnBfd3JpdGUocnQyeDAwZGV2LCAxNywgcjE3KTsKLQl9IGVsc2UgaWYgKHJ0MngwMGRldi0+bGluay5xdWFsLmZhbHNlX2NjYSA8IDEwMCAmJiByMTcgPiBsb3dfYm91bmQpIHsKLQkJcjE3IC09IDQ7Ci0JCWlmIChyMTcgPCBsb3dfYm91bmQpCi0JCQlyMTcgPSBsb3dfYm91bmQ7Ci0JCXJ0NzN1c2JfYmJwX3dyaXRlKHJ0MngwMGRldiwgMTcsIHIxNyk7Ci0JfQorCWlmICgocXVhbC0+ZmFsc2VfY2NhID4gNTEyKSAmJiAocXVhbC0+dmdjX2xldmVsIDwgdXBfYm91bmQpKQorCQlydDczdXNiX3NldF92Z2MocnQyeDAwZGV2LCBxdWFsLAorCQkJCW1pbl90KHU4LCBxdWFsLT52Z2NfbGV2ZWwgKyA0LCB1cF9ib3VuZCkpOworCWVsc2UgaWYgKChxdWFsLT5mYWxzZV9jY2EgPCAxMDApICYmIChxdWFsLT52Z2NfbGV2ZWwgPiBsb3dfYm91bmQpKQorCQlydDczdXNiX3NldF92Z2MocnQyeDAwZGV2LCBxdWFsLAorCQkJCW1heF90KHU4LCBxdWFsLT52Z2NfbGV2ZWwgLSA0LCBsb3dfYm91bmQpKTsKIH0KIAogLyoKQEAgLTEwMTIsMjUgKzEwNTgsMzcgQEAKIAlyZXR1cm4gRklSTVdBUkVfUlQyNTcxOwogfQogCi1zdGF0aWMgdTE2IHJ0NzN1c2JfZ2V0X2Zpcm13YXJlX2NyYyhjb25zdCB2b2lkICpkYXRhLCBjb25zdCBzaXplX3QgbGVuKQorc3RhdGljIGludCBydDczdXNiX2NoZWNrX2Zpcm13YXJlKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkJICBjb25zdCB1OCAqZGF0YSwgY29uc3Qgc2l6ZV90IGxlbikKIHsKKwl1MTYgZndfY3JjOwogCXUxNiBjcmM7CiAKIAkvKgotCSAqIFVzZSB0aGUgY3JjIGl0dS10IGFsZ29yaXRobS4KKwkgKiBPbmx5IHN1cHBvcnQgMmtiIGZpcm13YXJlIGZpbGVzLgorCSAqLworCWlmIChsZW4gIT0gMjA0OCkKKwkJcmV0dXJuIEZXX0JBRF9MRU5HVEg7CisKKwkvKgogCSAqIFRoZSBsYXN0IDIgYnl0ZXMgaW4gdGhlIGZpcm13YXJlIGFycmF5IGFyZSB0aGUgY3JjIGNoZWNrc3VtIGl0c2VsZiwKIAkgKiB0aGlzIG1lYW5zIHRoYXQgd2Ugc2hvdWxkIG5ldmVyIHBhc3MgdGhvc2UgMiBieXRlcyB0byB0aGUgY3JjCiAJICogYWxnb3JpdGhtLgogCSAqLworCWZ3X2NyYyA9IChkYXRhW2xlbiAtIDJdIDw8IDggfCBkYXRhW2xlbiAtIDFdKTsKKworCS8qCisJICogVXNlIHRoZSBjcmMgaXR1LXQgYWxnb3JpdGhtLgorCSAqLwogCWNyYyA9IGNyY19pdHVfdCgwLCBkYXRhLCBsZW4gLSAyKTsKIAljcmMgPSBjcmNfaXR1X3RfYnl0ZShjcmMsIDApOwogCWNyYyA9IGNyY19pdHVfdF9ieXRlKGNyYywgMCk7CiAKLQlyZXR1cm4gY3JjOworCXJldHVybiAoZndfY3JjID09IGNyYykgPyBGV19PSyA6IEZXX0JBRF9DUkM7CiB9CiAKLXN0YXRpYyBpbnQgcnQ3M3VzYl9sb2FkX2Zpcm13YXJlKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsIGNvbnN0IHZvaWQgKmRhdGEsCi0JCQkJIGNvbnN0IHNpemVfdCBsZW4pCitzdGF0aWMgaW50IHJ0NzN1c2JfbG9hZF9maXJtd2FyZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJCSBjb25zdCB1OCAqZGF0YSwgY29uc3Qgc2l6ZV90IGxlbikKIHsKIAl1bnNpZ25lZCBpbnQgaTsKIAlpbnQgc3RhdHVzOwpAQCAtMTQ0OSw3ICsxNTA3LDcgQEAKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMF9USU1FU1RBTVAsCiAJCQkgICB0ZXN0X2JpdChFTlRSWV9UWERfUkVRX1RJTUVTVEFNUCwgJnR4ZGVzYy0+ZmxhZ3MpKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMF9PRkRNLAotCQkJICAgdGVzdF9iaXQoRU5UUllfVFhEX09GRE1fUkFURSwgJnR4ZGVzYy0+ZmxhZ3MpKTsKKwkJCSAgICh0eGRlc2MtPnJhdGVfbW9kZSA9PSBSQVRFX01PREVfT0ZETSkpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cwX0lGUywgdHhkZXNjLT5pZnMpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cwX1JFVFJZX01PREUsCiAJCQkgICB0ZXN0X2JpdChFTlRSWV9UWERfUkVUUllfTU9ERSwgJnR4ZGVzYy0+ZmxhZ3MpKTsKQEAgLTE4MTYsNiArMTg3NCwxNCBAQAogCQlfX3NldF9iaXQoQ09ORklHX0ZSQU1FX1RZUEUsICZydDJ4MDBkZXYtPmZsYWdzKTsKIAogCS8qCisJICogRGV0ZWN0IGlmIHRoaXMgZGV2aWNlIGhhcyBhbiBoYXJkd2FyZSBjb250cm9sbGVkIHJhZGlvLgorCSAqLworI2lmZGVmIENPTkZJR19SVDJYMDBfTElCX1JGS0lMTAorCWlmIChydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLCBFRVBST01fQU5URU5OQV9IQVJEV0FSRV9SQURJTykpCisJCV9fc2V0X2JpdChDT05GSUdfU1VQUE9SVF9IV19CVVRUT04sICZydDJ4MDBkZXYtPmZsYWdzKTsKKyNlbmRpZiAvKiBDT05GSUdfUlQyWDAwX0xJQl9SRktJTEwgKi8KKworCS8qCiAJICogUmVhZCBmcmVxdWVuY3kgb2Zmc2V0LgogCSAqLwogCXJ0MngwMF9lZXByb21fcmVhZChydDJ4MDBkZXYsIEVFUFJPTV9GUkVRLCAmZWVwcm9tKTsKQEAgLTIwMjAsNyArMjA4Niw5IEBACiAJICovCiAJcnQyeDAwZGV2LT5ody0+ZmxhZ3MgPQogCSAgICBJRUVFODAyMTFfSFdfSE9TVF9CUk9BRENBU1RfUFNfQlVGRkVSSU5HIHwKLQkgICAgSUVFRTgwMjExX0hXX1NJR05BTF9EQk07CisJICAgIElFRUU4MDIxMV9IV19TSUdOQUxfREJNIHwKKwkgICAgSUVFRTgwMjExX0hXX1NVUFBPUlRTX1BTIHwKKwkgICAgSUVFRTgwMjExX0hXX1BTX05VTExGVU5DX1NUQUNLOwogCXJ0MngwMGRldi0+aHctPmV4dHJhX3R4X2hlYWRyb29tID0gVFhEX0RFU0NfU0laRTsKIAogCVNFVF9JRUVFODAyMTFfREVWKHJ0MngwMGRldi0+aHcsIHJ0MngwMGRldi0+ZGV2KTsKQEAgLTIxMjEsNiArMjE4OSw3IEBACiAJc3RydWN0IHJ0MngwMF9maWVsZDMyIGZpZWxkOwogCWludCByZXR2YWw7CiAJdTMyIHJlZzsKKwl1MzIgb2Zmc2V0OwogCiAJLyoKIAkgKiBGaXJzdCBwYXNzIHRoZSBjb25maWd1cmF0aW9uIHRocm91Z2ggcnQyeDAwbGliLCB0aGF0IHdpbGwKQEAgLTIxMzIsMjQgKzIyMDEsMjMgQEAKIAlpZiAocmV0dmFsKQogCQlyZXR1cm4gcmV0dmFsOwogCisJLyoKKwkgKiBXZSBvbmx5IG5lZWQgdG8gcGVyZm9ybSBhZGRpdGlvbmFsIHJlZ2lzdGVyIGluaXRpYWxpemF0aW9uCisJICogZm9yIFdNTSBxdWV1ZXMvCisJICovCisJaWYgKHF1ZXVlX2lkeCA+PSA0KQorCQlyZXR1cm4gMDsKKwogCXF1ZXVlID0gcnQyeDAwcXVldWVfZ2V0X3F1ZXVlKHJ0MngwMGRldiwgcXVldWVfaWR4KTsKIAogCS8qIFVwZGF0ZSBXTU0gVFhPUCByZWdpc3RlciAqLwotCWlmIChxdWV1ZV9pZHggPCAyKSB7Ci0JCWZpZWxkLmJpdF9vZmZzZXQgPSBxdWV1ZV9pZHggKiAxNjsKLQkJZmllbGQuYml0X21hc2sgPSAweGZmZmYgPDwgZmllbGQuYml0X29mZnNldDsKKwlvZmZzZXQgPSBBQ19UWE9QX0NTUjAgKyAoc2l6ZW9mKHUzMikgKiAoISEocXVldWVfaWR4ICYgMikpKTsKKwlmaWVsZC5iaXRfb2Zmc2V0ID0gKHF1ZXVlX2lkeCAmIDEpICogMTY7CisJZmllbGQuYml0X21hc2sgPSAweGZmZmYgPDwgZmllbGQuYml0X29mZnNldDsKIAotCQlydDJ4MDB1c2JfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIEFDX1RYT1BfQ1NSMCwgJnJlZyk7Ci0JCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBmaWVsZCwgcXVldWUtPnR4b3ApOwotCQlydDJ4MDB1c2JfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBBQ19UWE9QX0NTUjAsIHJlZyk7Ci0JfSBlbHNlIGlmIChxdWV1ZV9pZHggPCA0KSB7Ci0JCWZpZWxkLmJpdF9vZmZzZXQgPSAocXVldWVfaWR4IC0gMikgKiAxNjsKLQkJZmllbGQuYml0X21hc2sgPSAweGZmZmYgPDwgZmllbGQuYml0X29mZnNldDsKLQotCQlydDJ4MDB1c2JfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIEFDX1RYT1BfQ1NSMSwgJnJlZyk7Ci0JCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBmaWVsZCwgcXVldWUtPnR4b3ApOwotCQlydDJ4MDB1c2JfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBBQ19UWE9QX0NTUjEsIHJlZyk7Ci0JfQorCXJ0MngwMHVzYl9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgb2Zmc2V0LCAmcmVnKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgZmllbGQsIHF1ZXVlLT50eG9wKTsKKwlydDJ4MDB1c2JfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBvZmZzZXQsIHJlZyk7CiAKIAkvKiBVcGRhdGUgV01NIHJlZ2lzdGVycyAqLwogCWZpZWxkLmJpdF9vZmZzZXQgPSBxdWV1ZV9pZHggKiA0OwpAQCAtMjE3MCwxMyArMjIzOCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZiAwCi0vKgotICogTWFjODAyMTEgZGVtYW5kcyBnZXRfdHNmIG11c3QgYmUgYXRvbWljLgotICogVGhpcyBpcyBub3QgcG9zc2libGUgZm9yIHJ0NzN1c2Igc2luY2UgYWxsIHJlZ2lzdGVyIGFjY2VzcwotICogZnVuY3Rpb25zIHJlcXVpcmUgc2xlZXBpbmcuIFVudGlsbCBtYWM4MDIxMSBubyBsb25nZXIgbmVlZHMKLSAqIGdldF90c2YgdG8gYmUgYXRvbWljLCB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBkaXNhYmxlZC4KLSAqLwogc3RhdGljIHU2NCBydDczdXNiX2dldF90c2Yoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7CiAJc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IGh3LT5wcml2OwpAQCAtMjE5MCw5ICsyMjUxLDYgQEAKIAogCXJldHVybiB0c2Y7CiB9Ci0jZWxzZQotI2RlZmluZSBydDczdXNiX2dldF90c2YJTlVMTAotI2VuZGlmCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX29wcyBydDczdXNiX21hYzgwMjExX29wcyA9IHsKIAkudHgJCQk9IHJ0MngwMG1hY190eCwKQEAgLTIyMTQsMTIgKzIyNzIsMTMgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnQyeDAwbGliX29wcyBydDczdXNiX3J0MngwMF9vcHMgPSB7CiAJLnByb2JlX2h3CQk9IHJ0NzN1c2JfcHJvYmVfaHcsCiAJLmdldF9maXJtd2FyZV9uYW1lCT0gcnQ3M3VzYl9nZXRfZmlybXdhcmVfbmFtZSwKLQkuZ2V0X2Zpcm13YXJlX2NyYwk9IHJ0NzN1c2JfZ2V0X2Zpcm13YXJlX2NyYywKKwkuY2hlY2tfZmlybXdhcmUJCT0gcnQ3M3VzYl9jaGVja19maXJtd2FyZSwKIAkubG9hZF9maXJtd2FyZQkJPSBydDczdXNiX2xvYWRfZmlybXdhcmUsCiAJLmluaXRpYWxpemUJCT0gcnQyeDAwdXNiX2luaXRpYWxpemUsCiAJLnVuaW5pdGlhbGl6ZQkJPSBydDJ4MDB1c2JfdW5pbml0aWFsaXplLAogCS5jbGVhcl9lbnRyeQkJPSBydDJ4MDB1c2JfY2xlYXJfZW50cnksCiAJLnNldF9kZXZpY2Vfc3RhdGUJPSBydDczdXNiX3NldF9kZXZpY2Vfc3RhdGUsCisJLnJma2lsbF9wb2xsCQk9IHJ0NzN1c2JfcmZraWxsX3BvbGwsCiAJLmxpbmtfc3RhdHMJCT0gcnQ3M3VzYl9saW5rX3N0YXRzLAogCS5yZXNldF90dW5lcgkJPSBydDczdXNiX3Jlc2V0X3R1bmVyLAogCS5saW5rX3R1bmVyCQk9IHJ0NzN1c2JfbGlua190dW5lciwKQEAgLTIyMjgsNiArMjI4Nyw3IEBACiAJLndyaXRlX2JlYWNvbgkJPSBydDczdXNiX3dyaXRlX2JlYWNvbiwKIAkuZ2V0X3R4X2RhdGFfbGVuCT0gcnQ3M3VzYl9nZXRfdHhfZGF0YV9sZW4sCiAJLmtpY2tfdHhfcXVldWUJCT0gcnQ3M3VzYl9raWNrX3R4X3F1ZXVlLAorCS5raWxsX3R4X3F1ZXVlCQk9IHJ0MngwMHVzYl9raWxsX3R4X3F1ZXVlLAogCS5maWxsX3J4ZG9uZQkJPSBydDczdXNiX2ZpbGxfcnhkb25lLAogCS5jb25maWdfc2hhcmVkX2tleQk9IHJ0NzN1c2JfY29uZmlnX3NoYXJlZF9rZXksCiAJLmNvbmZpZ19wYWlyd2lzZV9rZXkJPSBydDczdXNiX2NvbmZpZ19wYWlyd2lzZV9rZXksCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ3M3VzYi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NzN1c2IuaAppbmRleCA0NmUxNDA1Li5jODAxNmY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ3M3VzYi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDczdXNiLmgKQEAgLTEsNSArMSw1IEBACiAvKgotCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDggcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKKwlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA5IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CiAJPGh0dHA6Ly9ydDJ4MDAuc2VyaWFsbW9ua2V5LmNvbT4KIAogCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC01MCw4ICs1MCw4IEBACiAjZGVmaW5lIEVFUFJPTV9TSVpFCQkJMHgwMTAwCiAjZGVmaW5lIEJCUF9CQVNFCQkJMHgwMDAwCiAjZGVmaW5lIEJCUF9TSVpFCQkJMHgwMDgwCi0jZGVmaW5lIFJGX0JBU0UJCQkJMHgwMDAwCi0jZGVmaW5lIFJGX1NJWkUJCQkJMHgwMDE0CisjZGVmaW5lIFJGX0JBU0UJCQkJMHgwMDA0CisjZGVmaW5lIFJGX1NJWkUJCQkJMHgwMDEwCiAKIC8qCiAgKiBOdW1iZXIgb2YgVFggcXVldWVzLgpAQCAtMjY3LDYgKzI2NywxOSBAQAogICogTUFDX0NTUjEzOiBHUElPLgogICovCiAjZGVmaW5lIE1BQ19DU1IxMwkJCTB4MzAzNAorI2RlZmluZSBNQUNfQ1NSMTNfQklUMAkJCUZJRUxEMzIoMHgwMDAwMDAwMSkKKyNkZWZpbmUgTUFDX0NTUjEzX0JJVDEJCQlGSUVMRDMyKDB4MDAwMDAwMDIpCisjZGVmaW5lIE1BQ19DU1IxM19CSVQyCQkJRklFTEQzMigweDAwMDAwMDA0KQorI2RlZmluZSBNQUNfQ1NSMTNfQklUMwkJCUZJRUxEMzIoMHgwMDAwMDAwOCkKKyNkZWZpbmUgTUFDX0NTUjEzX0JJVDQJCQlGSUVMRDMyKDB4MDAwMDAwMTApCisjZGVmaW5lIE1BQ19DU1IxM19CSVQ1CQkJRklFTEQzMigweDAwMDAwMDIwKQorI2RlZmluZSBNQUNfQ1NSMTNfQklUNgkJCUZJRUxEMzIoMHgwMDAwMDA0MCkKKyNkZWZpbmUgTUFDX0NTUjEzX0JJVDcJCQlGSUVMRDMyKDB4MDAwMDAwODApCisjZGVmaW5lIE1BQ19DU1IxM19CSVQ4CQkJRklFTEQzMigweDAwMDAwMTAwKQorI2RlZmluZSBNQUNfQ1NSMTNfQklUOQkJCUZJRUxEMzIoMHgwMDAwMDIwMCkKKyNkZWZpbmUgTUFDX0NTUjEzX0JJVDEwCQkJRklFTEQzMigweDAwMDAwNDAwKQorI2RlZmluZSBNQUNfQ1NSMTNfQklUMTEJCQlGSUVMRDMyKDB4MDAwMDA4MDApCisjZGVmaW5lIE1BQ19DU1IxM19CSVQxMgkJCUZJRUxEMzIoMHgwMDAwMTAwMCkKIAogLyoKICAqIE1BQ19DU1IxNDogTEVEIGNvbnRyb2wgcmVnaXN0ZXIuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4Ny5oCmluZGV4IDNiMWUxYzIuLjk3MThmNjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4Ny5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4Ny5oCkBAIC0xMDAsNiArMTAwLDggQEAKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKIAl1MzIgcnhfY29uZjsKIAlzdHJ1Y3QgdXNiX2FuY2hvciBhbmNob3JlZDsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIHdvcms7CisJc3RydWN0IGllZWU4MDIxMV9odyAqZGV2OwogCXUxNiB0eHB3cl9iYXNlOwogCXU4IGFzaWNfcmV2OwogCXU4IGlzX3J0bDgxODdiOwpAQCAtMTE3LDcgKzExOSw3IEBACiAJc3RydWN0IHsKIAkJX19sZTY0IGJ1ZjsKIAkJc3RydWN0IHNrX2J1ZmZfaGVhZCBxdWV1ZTsKLQl9IGJfdHhfc3RhdHVzOworCX0gYl90eF9zdGF0dXM7IC8qIFRoaXMgcXVldWUgaXMgdXNlZCBieSBib3RoIC1iIGFuZCBub24tYiBkZXZpY2VzICovCiB9OwogCiB2b2lkIHJ0bDgxODdfd3JpdGVfcGh5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgdTggYWRkciwgdTMyIGRhdGEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTg3X2Rldi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTg3X2Rldi5jCmluZGV4IGY0NzQ3YTEuLmZkODE4ODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4N19kZXYuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODdfZGV2LmMKQEAgLTE4OSwyNSArMTg5LDMzIEBACiAJCQkJCSAgc2l6ZW9mKHN0cnVjdCBydGw4MTg3X3R4X2hkcikpOwogCWllZWU4MDIxMV90eF9pbmZvX2NsZWFyX3N0YXR1cyhpbmZvKTsKIAotCWlmICghdXJiLT5zdGF0dXMgJiYKLQkgICAgIShpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfTk9fQUNLKSAmJgotCSAgICBwcml2LT5pc19ydGw4MTg3YikgewotCQlza2JfcXVldWVfdGFpbCgmcHJpdi0+Yl90eF9zdGF0dXMucXVldWUsIHNrYik7CisJaWYgKCEodXJiLT5zdGF0dXMpICYmICEoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSykpIHsKKwkJaWYgKHByaXYtPmlzX3J0bDgxODdiKSB7CisJCQlza2JfcXVldWVfdGFpbCgmcHJpdi0+Yl90eF9zdGF0dXMucXVldWUsIHNrYik7CiAKLQkJLyogcXVldWUgaXMgImZ1bGwiLCBkaXNjYXJkIGxhc3QgaXRlbXMgKi8KLQkJd2hpbGUgKHNrYl9xdWV1ZV9sZW4oJnByaXYtPmJfdHhfc3RhdHVzLnF1ZXVlKSA+IDUpIHsKLQkJCXN0cnVjdCBza19idWZmICpvbGRfc2tiOworCQkJLyogcXVldWUgaXMgImZ1bGwiLCBkaXNjYXJkIGxhc3QgaXRlbXMgKi8KKwkJCXdoaWxlIChza2JfcXVldWVfbGVuKCZwcml2LT5iX3R4X3N0YXR1cy5xdWV1ZSkgPiA1KSB7CisJCQkJc3RydWN0IHNrX2J1ZmYgKm9sZF9za2I7CiAKLQkJCWRldl9kYmcoJnByaXYtPnVkZXYtPmRldiwKLQkJCQkidHJhbnNtaXQgc3RhdHVzIHF1ZXVlIGZ1bGxcbiIpOworCQkJCWRldl9kYmcoJnByaXYtPnVkZXYtPmRldiwKKwkJCQkJInRyYW5zbWl0IHN0YXR1cyBxdWV1ZSBmdWxsXG4iKTsKIAotCQkJb2xkX3NrYiA9IHNrYl9kZXF1ZXVlKCZwcml2LT5iX3R4X3N0YXR1cy5xdWV1ZSk7Ci0JCQlpZWVlODAyMTFfdHhfc3RhdHVzX2lycXNhZmUoaHcsIG9sZF9za2IpOwotCQl9Ci0JfSBlbHNlIHsKLQkJaWYgKCEoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSykgJiYgIXVyYi0+c3RhdHVzKQorCQkJCW9sZF9za2IgPSBza2JfZGVxdWV1ZSgmcHJpdi0+Yl90eF9zdGF0dXMucXVldWUpOworCQkJCWllZWU4MDIxMV90eF9zdGF0dXNfaXJxc2FmZShodywgb2xkX3NrYik7CisJCQl9CisJCQlyZXR1cm47CisJCX0gZWxzZSB7CiAJCQlpbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9BQ0s7CisJCX0KKwl9CisJaWYgKHByaXYtPmlzX3J0bDgxODdiKQogCQlpZWVlODAyMTFfdHhfc3RhdHVzX2lycXNhZmUoaHcsIHNrYik7CisJZWxzZSB7CisJCS8qIFJldHJ5IGluZm9ybWF0aW9uIGZvciB0aGUgUlRJODE4NyBpcyBvbmx5IGF2YWlsYWJsZSBieQorCQkgKiByZWFkaW5nIGEgcmVnaXN0ZXIgaW4gdGhlIGRldmljZS4gV2UgYXJlIGluIGludGVycnVwdCBtb2RlCisJCSAqIGhlcmUsIHRodXMgcXVldWUgdGhlIHNrYiBhbmQgZmluaXNoIG9uIGEgd29yayBxdWV1ZS4gKi8KKwkJc2tiX3F1ZXVlX3RhaWwoJnByaXYtPmJfdHhfc3RhdHVzLnF1ZXVlLCBza2IpOworCQlxdWV1ZV9kZWxheWVkX3dvcmsoaHctPndvcmtxdWV1ZSwgJnByaXYtPndvcmssIDApOwogCX0KIH0KIApAQCAtNDAzLDcgKzQxMSw3IEBACiAJc3RydWN0IHJ0bDgxODdfcnhfaW5mbyAqaW5mbzsKIAlpbnQgcmV0ID0gMDsKIAotCXdoaWxlIChza2JfcXVldWVfbGVuKCZwcml2LT5yeF9xdWV1ZSkgPCA4KSB7CisJd2hpbGUgKHNrYl9xdWV1ZV9sZW4oJnByaXYtPnJ4X3F1ZXVlKSA8IDE2KSB7CiAJCXNrYiA9IF9fZGV2X2FsbG9jX3NrYihSVEw4MTg3X01BWF9SWCwgR0ZQX0tFUk5FTCk7CiAJCWlmICghc2tiKSB7CiAJCQlyZXQgPSAtRU5PTUVNOwpAQCAtNjU3LDcgKzY2NSw3IEBACiAKIAlydGw4MTh4X2lvd3JpdGUzMihwcml2LCAmcHJpdi0+bWFwLT5JTlRfVElNRU9VVCwgMCk7CiAJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5XUEFfQ09ORiwgMCk7Ci0JcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5SQVRFX0ZBTExCQUNLLCAweDgxKTsKKwlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPlJBVEVfRkFMTEJBQ0ssIDApOwogCiAJLy8gVE9ETzogc2V0IFJFU1BfUkFURSBhbmQgQlJTUiBwcm9wZXJseQogCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+UkVTUF9SQVRFLCAoOCA8PCA0KSB8IDApOwpAQCAtNzc3LDkgKzc4NSw2IEBACiAJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5UWF9BR0NfQ1RMLCByZWcpOwogCiAJcnRsODE4eF9pb3dyaXRlMTZfaWR4KHByaXYsIChfX2xlMTYgKikweEZGRTAsIDB4MEZGRiwgMSk7Ci0JcmVnID0gcnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPlJBVEVfRkFMTEJBQ0spOwotCXJlZyB8PSBSVEw4MThYX1JBVEVfRkFMTEJBQ0tfRU5BQkxFOwotCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+UkFURV9GQUxMQkFDSywgcmVnKTsKIAogCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPkJFQUNPTl9JTlRFUlZBTCwgMTAwKTsKIAlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5BVElNX1dORCwgMik7CkBAIC04NjcsNiArODcyLDM0IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIHJ0bDgxODdfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJLyogVGhlIFJUTDgxODcgcmV0dXJucyB0aGUgcmV0cnkgY291bnQgdGhyb3VnaCByZWdpc3RlciAweEZGRkEuIEluCisJICogYWRkaXRpb24sIGl0IGFwcGVhcnMgdG8gYmUgYSBjdW11bGF0aXZlIHJldHJ5IGNvdW50LCBub3QgdGhlCisJICogdmFsdWUgZm9yIHRoZSBjdXJyZW50IFRYIHBhY2tldC4gV2hlbiBtdWx0aXBsZSBUWCBlbnRyaWVzIGFyZQorCSAqIHF1ZXVlZCwgdGhlIHJldHJ5IGNvdW50IHdpbGwgYmUgdmFsaWQgZm9yIHRoZSBsYXN0IG9uZSBpbiB0aGUgcXVldWUuCisJICogVGhlICJlcnJvciIgc2hvdWxkIG5vdCBtYXR0ZXIgZm9yIHB1cnBvc2VzIG9mIHJhdGUgc2V0dGluZy4gKi8KKwlzdHJ1Y3QgcnRsODE4N19wcml2ICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBydGw4MTg3X3ByaXYsCisJCQkJICAgIHdvcmsud29yayk7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvOworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiA9IHByaXYtPmRldjsKKwlzdGF0aWMgdTE2IHJldHJ5OworCXUxNiB0bXA7CisKKwltdXRleF9sb2NrKCZwcml2LT5jb25mX211dGV4KTsKKwl0bXAgPSBydGw4MTh4X2lvcmVhZDE2KHByaXYsIChfX2xlMTYgKikweEZGRkEpOworCXdoaWxlIChza2JfcXVldWVfbGVuKCZwcml2LT5iX3R4X3N0YXR1cy5xdWV1ZSkgPiAwKSB7CisJCXN0cnVjdCBza19idWZmICpvbGRfc2tiOworCisJCW9sZF9za2IgPSBza2JfZGVxdWV1ZSgmcHJpdi0+Yl90eF9zdGF0dXMucXVldWUpOworCQlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihvbGRfc2tiKTsKKwkJaW5mby0+c3RhdHVzLnJhdGVzWzBdLmNvdW50ID0gdG1wIC0gcmV0cnkgKyAxOworCQlpZWVlODAyMTFfdHhfc3RhdHVzX2lycXNhZmUoZGV2LCBvbGRfc2tiKTsKKwl9CisJcmV0cnkgPSB0bXA7CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5jb25mX211dGV4KTsKK30KKwogc3RhdGljIGludCBydGw4MTg3X3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKIHsKIAlzdHJ1Y3QgcnRsODE4N19wcml2ICpwcml2ID0gZGV2LT5wcml2OwpAQCAtODgxLDYgKzkxNCw3IEBACiAJbXV0ZXhfbG9jaygmcHJpdi0+Y29uZl9tdXRleCk7CiAKIAlpbml0X3VzYl9hbmNob3IoJnByaXYtPmFuY2hvcmVkKTsKKwlwcml2LT5kZXYgPSBkZXY7CiAKIAlpZiAocHJpdi0+aXNfcnRsODE4N2IpIHsKIAkJcmVnID0gUlRMODE4WF9SWF9DT05GX01HTVQgfApAQCAtOTQ4LDYgKzk4Miw3IEBACiAJcmVnIHw9IFJUTDgxOFhfQ01EX1RYX0VOQUJMRTsKIAlyZWcgfD0gUlRMODE4WF9DTURfUlhfRU5BQkxFOwogCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+Q01ELCByZWcpOworCUlOSVRfREVMQVlFRF9XT1JLKCZwcml2LT53b3JrLCBydGw4MTg3X3dvcmspOwogCW11dGV4X3VubG9jaygmcHJpdi0+Y29uZl9tdXRleCk7CiAKIAlyZXR1cm4gMDsKQEAgLTk3OCw2ICsxMDEzLDggQEAKIAkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAogCXVzYl9raWxsX2FuY2hvcmVkX3VyYnMoJnByaXYtPmFuY2hvcmVkKTsKKwlpZiAoIXByaXYtPmlzX3J0bDgxODdiKQorCQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnByaXYtPndvcmspOwogCW11dGV4X3VubG9jaygmcHJpdi0+Y29uZl9tdXRleCk7CiB9CiAKQEAgLTk4NiwxOSArMTAyMywyMSBAQAogewogCXN0cnVjdCBydGw4MTg3X3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CiAJaW50IGk7CisJaW50IHJldCA9IC1FT1BOT1RTVVBQOwogCisJbXV0ZXhfbG9jaygmcHJpdi0+Y29uZl9tdXRleCk7CiAJaWYgKHByaXYtPm1vZGUgIT0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUikKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOworCQlnb3RvIGV4aXQ7CiAKIAlzd2l0Y2ggKGNvbmYtPnR5cGUpIHsKIAljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CiAJCXByaXYtPm1vZGUgPSBjb25mLT50eXBlOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJCWdvdG8gZXhpdDsKIAl9CiAKLQltdXRleF9sb2NrKCZwcml2LT5jb25mX211dGV4KTsKKwlyZXQgPSAwOwogCXByaXYtPnZpZiA9IGNvbmYtPnZpZjsKIAogCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+RUVQUk9NX0NNRCwgUlRMODE4WF9FRVBST01fQ01EX0NPTkZJRyk7CkBAIC0xMDA3LDggKzEwNDYsOSBAQAogCQkJCSAoKHU4ICopY29uZi0+bWFjX2FkZHIpW2ldKTsKIAlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkVFUFJPTV9DTUQsIFJUTDgxOFhfRUVQUk9NX0NNRF9OT1JNQUwpOwogCitleGl0OgogCW11dGV4X3VubG9jaygmcHJpdi0+Y29uZl9tdXRleCk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgcnRsODE4N19yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3N0cmlwLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9zdHJpcC5jCmluZGV4IDcwMTVmMjQuLmY5NTIwNDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3N0cmlwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc3RyaXAuYwpAQCAtOTUwLDYgKzk1MCw3IEBACiB9CiAKIHN0YXRpYyB2b2lkICpzdHJpcF9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQorCV9fYWNxdWlyZXMoUkNVKQogewogCXJjdV9yZWFkX2xvY2soKTsKIAlyZXR1cm4gKnBvcyA/IHN0cmlwX2dldF9pZHgoKnBvcyAtIDEpIDogU0VRX1NUQVJUX1RPS0VOOwpAQCAtOTczLDYgKzk3NCw3IEBACiB9CiAKIHN0YXRpYyB2b2lkIHN0cmlwX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQorCV9fcmVsZWFzZXMoUkNVKQogewogCXJjdV9yZWFkX3VubG9jaygpOwogfQpAQCAtMTEyNSw3ICsxMTI3LDcgQEAKIH0KIAogCi1zdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIHN0cmlwX3NlcV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHN0cmlwX3NlcV9vcHMgPSB7CiAJLnN0YXJ0ID0gc3RyaXBfc2VxX3N0YXJ0LAogCS5uZXh0ICA9IHN0cmlwX3NlcV9uZXh0LAogCS5zdG9wICA9IHN0cmlwX3NlcV9zdG9wLApAQCAtMjQ3NSw2ICsyNDc3LDE2IEBACiAJLnJlYnVpbGQgPSBzdHJpcF9yZWJ1aWxkX2hlYWRlciwKIH07CiAKKworc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBzdHJpcF9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiAJPSBzdHJpcF9vcGVuX2xvdywKKwkubmRvX3N0b3AgCT0gc3RyaXBfY2xvc2VfbG93LAorCS5uZG9fc3RhcnRfeG1pdCA9IHN0cmlwX3htaXQsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgPSBzdHJpcF9zZXRfbWFjX2FkZHJlc3MsCisJLm5kb19nZXRfc3RhdHMJPSBzdHJpcF9nZXRfc3RhdHMsCisJLm5kb19jaGFuZ2VfbXR1ID0gc3RyaXBfY2hhbmdlX210dSwKK307CisKIC8qCiAgKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIGJ5IERESSB3aGVuIHRoZQogICogKGR5bmFtaWNhbGx5IGFzc2lnbmVkKSBkZXZpY2UgaXMgcmVnaXN0ZXJlZApAQCAtMjUwMSwxOCArMjUxMyw4IEBACiAJZGV2LT5kZXZfYWRkclswXSA9IDA7CiAJZGV2LT5hZGRyX2xlbiA9IHNpemVvZihNZXRyaWNvbUFkZHJlc3MpOwogCi0JLyoKLQkgKiBQb2ludGVycyB0byBpbnRlcmZhY2Ugc2VydmljZSByb3V0aW5lcy4KLQkgKi8KLQotCWRldi0+b3BlbiA9IHN0cmlwX29wZW5fbG93OwotCWRldi0+c3RvcCA9IHN0cmlwX2Nsb3NlX2xvdzsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IHN0cmlwX3htaXQ7Ci0JZGV2LT5oZWFkZXJfb3BzID0gJnN0cmlwX2hlYWRlcl9vcHM7Ci0KLQlkZXYtPnNldF9tYWNfYWRkcmVzcyA9IHN0cmlwX3NldF9tYWNfYWRkcmVzczsKLQlkZXYtPmdldF9zdGF0cyA9IHN0cmlwX2dldF9zdGF0czsKLQlkZXYtPmNoYW5nZV9tdHUgPSBzdHJpcF9jaGFuZ2VfbXR1OworCWRldi0+aGVhZGVyX29wcyA9ICZzdHJpcF9oZWFkZXJfb3BzLAorCWRldi0+bmV0ZGV2X29wcyA9ICZzdHJpcF9uZXRkZXZfb3BzOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbi5jCmluZGV4IDgzMjY3OTMuLmI3Mjg1NDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuLmMKQEAgLTQwLDExICs0MCwxMSBAQAogICovCiBzdGF0aWMgaW50IF9faW5pdCB3dl9wc2FfdG9faXJxKHU4IGlycXZhbCkKIHsKLQlpbnQgaXJxOworCWludCBpOwogCi0JZm9yIChpcnEgPSAwOyBpcnEgPCBBUlJBWV9TSVpFKGlycXZhbHMpOyBpcnErKykKLQkJaWYgKGlycXZhbHNbaXJxXSA9PSBpcnF2YWwpCi0JCQlyZXR1cm4gaXJxOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGlycXZhbHMpOyBpKyspCisJCWlmIChpcnF2YWxzW2ldID09IGlycXZhbCkKKwkJCXJldHVybiBpOwogCiAJcmV0dXJuIC0xOwogfQpAQCAtNDI4MSw4ICs0MjgxLDcgQEAKIAogCiAJLyogTG9vcCBvbiBhbGwgcG9zc2libGUgYmFzZSBhZGRyZXNzZXMuICovCi0JaSA9IC0xOwotCXdoaWxlICgoaW9bKytpXSAhPSAwKSAmJiAoaSA8IEFSUkFZX1NJWkUoaW8pKSkgeworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGlvKSAmJiBpb1tpXSAhPSAwOyBpKyspIHsKIAkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihuZXRfbG9jYWwpKTsKIAkJaWYgKCFkZXYpCiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW5fY3MuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW5fY3MuYwppbmRleCBkZTcxN2Y4Li5lNTViMzM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbl9jcy5jCkBAIC04MzgsOSArODM4LDggQEAKICAgICB9CiAgIHdoaWxlKCgoc3RhdHVzICYgU1IzX0VYRUNfU1RBVEVfTUFTSykgIT0gU1IzX0VYRUNfSURMRSkgJiYgKHNwaW4tLSA+IDApKTsKIAotICAvKiBJZiB0aGUgaW50ZXJydXB0IGhhc24ndCBiZSBwb3N0ZWQgKi8KLSAgaWYoc3BpbiA8PSAwKQotICAgIHsKKyAgLyogSWYgdGhlIGludGVycnVwdCBoYXNuJ3QgYmVlbiBwb3N0ZWQgKi8KKyAgaWYgKHNwaW4gPCAwKSB7CiAjaWZkZWYgREVCVUdfSU5URVJSVVBUX0VSUk9SCiAgICAgICBwcmludGsoS0VSTl9JTkZPICJ3dl84MjU5M19jbWQ6ICVzIHRpbWVvdXQgKHByZXZpb3VzIGNvbW1hbmQpLCBzdGF0dXMgMHglMDJ4XG4iLAogCSAgICAgc3RyLCBzdGF0dXMpOwpAQCAtMTM1MywyMSArMTM1Miw2IEBACiAgKiBvciB3aXJlbGVzcyBleHRlbnNpb25zCiAgKi8KIAotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyoKLSAqIEdldCB0aGUgY3VycmVudCBldGhlcm5ldCBzdGF0aXN0aWNzLiBUaGlzIG1heSBiZSBjYWxsZWQgd2l0aCB0aGUKLSAqIGNhcmQgb3BlbiBvciBjbG9zZWQuCi0gKiBVc2VkIHdoZW4gdGhlIHVzZXIgcmVhZCAvcHJvYy9uZXQvZGV2Ci0gKi8KLXN0YXRpYyBlbl9zdGF0cwkqCi13YXZlbGFuX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqCWRldikKLXsKLSNpZmRlZiBERUJVR19JT0NUTF9UUkFDRQotICBwcmludGsoS0VSTl9ERUJVRyAiJXM6IDw+d2F2ZWxhbl9nZXRfc3RhdHMoKVxuIiwgZGV2LT5uYW1lKTsKLSNlbmRpZgotCi0gIHJldHVybigmKChuZXRfbG9jYWwgKiluZXRkZXZfcHJpdihkZXYpKS0+c3RhdHMpOwotfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKgpAQCAtMjgxOCw3ICsyODAyLDcgQEAKICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiB3dl9wYWNrZXRfcmVhZCgpOiBjb3VsZCBub3QgYWxsb2Nfc2tiKCVkLCBHRlBfQVRPTUlDKVxuIiwKIAkgICAgIGRldi0+bmFtZSwgc2tzaXplKTsKICNlbmRpZgotICAgICAgbHAtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKyAgICAgIGRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogICAgICAgLyoKICAgICAgICAqIE5vdCBvbmx5IGRvIHdlIHdhbnQgdG8gcmV0dXJuIGhlcmUsIGJ1dCB3ZSBhbHNvIG5lZWQgdG8gZHJvcCB0aGUKICAgICAgICAqIHBhY2tldCBvbiB0aGUgZmxvb3IgdG8gY2xlYXIgdGhlIGludGVycnVwdC4KQEAgLTI4NzgsOCArMjg2Miw4IEBACiAgIG5ldGlmX3J4KHNrYik7CiAKICAgLyogS2VlcCBzdGF0cyB1cCB0byBkYXRlICovCi0gIGxwLT5zdGF0cy5yeF9wYWNrZXRzKys7Ci0gIGxwLT5zdGF0cy5yeF9ieXRlcyArPSBza3NpemU7CisgIGRldi0+c3RhdHMucnhfcGFja2V0cysrOworICBkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNrc2l6ZTsKIAogI2lmZGVmIERFQlVHX1JYX1RSQUNFCiAgIHByaW50ayhLRVJOX0RFQlVHICIlczogPC13dl9wYWNrZXRfcmVhZCgpXG4iLCBkZXYtPm5hbWUpOwpAQCAtMjk4MSwxMyArMjk2NSwxMyBAQAogICAgICAgLyogQ2hlY2sgc3RhdHVzICovCiAgICAgICBpZigoc3RhdHVzICYgUlhfUkNWX09LKSAhPSBSWF9SQ1ZfT0spCiAJewotCSAgbHAtPnN0YXRzLnJ4X2Vycm9ycysrOworCSAgZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkgIGlmKHN0YXR1cyAmIFJYX05PX1NGRCkKLQkgICAgbHAtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycysrOworCSAgICBkZXYtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycysrOwogCSAgaWYoc3RhdHVzICYgUlhfQ1JDX0VSUikKLQkgICAgbHAtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKKwkgICAgZGV2LT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CiAJICBpZihzdGF0dXMgJiBSWF9PVlJSVU4pCi0JICAgIGxwLT5zdGF0cy5yeF9vdmVyX2Vycm9ycysrOworCSAgICBkZXYtPnN0YXRzLnJ4X292ZXJfZXJyb3JzKys7CiAKICNpZmRlZiBERUJVR19SWF9GQUlMCiAJICBwcmludGsoS0VSTl9ERUJVRyAiJXM6IHd2X3BhY2tldF9yY3YoKTogcGFja2V0IG5vdCByZWNlaXZlZCBvaywgc3RhdHVzID0gMHgleFxuIiwKQEAgLTMwNzQsNyArMzA1OCw3IEBACiAgIGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCiAgIC8qIEtlZXAgc3RhdHMgdXAgdG8gZGF0ZSAqLwotICBscC0+c3RhdHMudHhfYnl0ZXMgKz0gbGVuZ3RoOworICBkZXYtPnN0YXRzLnR4X2J5dGVzICs9IGxlbmd0aDsKIAogICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZscC0+c3BpbmxvY2ssIGZsYWdzKTsKIApAQCAtNDEwNyw3ICs0MDkxLDcgQEAKIAkgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogd3ZfaW50ZXJydXB0KCk6IHJlY2VpdmUgYnVmZmVyIG92ZXJmbG93XG4iLAogCQkgICAgIGRldi0+bmFtZSk7CiAjZW5kaWYKLQkgICAgICBscC0+c3RhdHMucnhfb3Zlcl9lcnJvcnMrKzsKKwkgICAgICBkZXYtPnN0YXRzLnJ4X292ZXJfZXJyb3JzKys7CiAJICAgICAgbHAtPm92ZXJydW5uaW5nID0gMTsKICAgICAgIAkgICAgfQogCkBAIC00MTU2LDcgKzQxNDAsNyBAQAogCSAgLyogQ2hlY2sgZm9yIHBvc3NpYmxlIGVycm9ycyAqLwogCSAgaWYoKHR4X3N0YXR1cyAmIFRYX09LKSAhPSBUWF9PSykKIAkgICAgewotCSAgICAgIGxwLT5zdGF0cy50eF9lcnJvcnMrKzsKKwkgICAgICBkZXYtPnN0YXRzLnR4X2Vycm9ycysrOwogCiAJICAgICAgaWYodHhfc3RhdHVzICYgVFhfRlJUTCkKIAkJewpAQCAtNDE3MSwxNCArNDE1NSwxNCBAQAogCQkgIHByaW50ayhLRVJOX0RFQlVHICIlczogd3ZfaW50ZXJydXB0KCk6IERNQSB1bmRlcnJ1blxuIiwKIAkJCSBkZXYtPm5hbWUpOwogI2VuZGlmCi0JCSAgbHAtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CisJCSAgZGV2LT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOwogCQl9CiAJICAgICAgaWYodHhfc3RhdHVzICYgVFhfTE9TVF9DVFMpCiAJCXsKICNpZmRlZiBERUJVR19UWF9GQUlMCiAJCSAgcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB3dl9pbnRlcnJ1cHQoKTogbm8gQ1RTXG4iLCBkZXYtPm5hbWUpOwogI2VuZGlmCi0JCSAgbHAtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7CisJCSAgZGV2LT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOwogCQl9CiAJICAgICAgaWYodHhfc3RhdHVzICYgVFhfTE9TVF9DUlMpCiAJCXsKQEAgLTQxODYsMTQgKzQxNzAsMTQgQEAKIAkJICBwcmludGsoS0VSTl9ERUJVRyAiJXM6IHd2X2ludGVycnVwdCgpOiBubyBjYXJyaWVyXG4iLAogCQkJIGRldi0+bmFtZSk7CiAjZW5kaWYKLQkJICBscC0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKKwkJICBkZXYtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7CiAJCX0KIAkgICAgICBpZih0eF9zdGF0dXMgJiBUWF9IUlRfQkVBVCkKIAkJewogI2lmZGVmIERFQlVHX1RYX0ZBSUwKIAkJICBwcmludGsoS0VSTl9ERUJVRyAiJXM6IHd2X2ludGVycnVwdCgpOiBoZWFydCBiZWF0XG4iLCBkZXYtPm5hbWUpOwogI2VuZGlmCi0JCSAgbHAtPnN0YXRzLnR4X2hlYXJ0YmVhdF9lcnJvcnMrKzsKKwkJICBkZXYtPnN0YXRzLnR4X2hlYXJ0YmVhdF9lcnJvcnMrKzsKIAkJfQogCSAgICAgIGlmKHR4X3N0YXR1cyAmIFRYX0RFRkVSKQogCQl7CkBAIC00MjE3LDE0ICs0MjAxLDE0IEBACiAjZW5kaWYKIAkJICAgICAgaWYoISh0eF9zdGF0dXMgJiBUWF9OQ09MX01BU0spKQogCQkJewotCQkJICBscC0+c3RhdHMuY29sbGlzaW9ucyArPSAweDEwOworCQkJICBkZXYtPnN0YXRzLmNvbGxpc2lvbnMgKz0gMHgxMDsKIAkJCX0KIAkJICAgIH0KIAkJfQogCSAgICB9CS8qIGlmKCEodHhfc3RhdHVzICYgVFhfT0spKSAqLwogCi0JICBscC0+c3RhdHMuY29sbGlzaW9ucyArPSAodHhfc3RhdHVzICYgVFhfTkNPTF9NQVNLKTsKLQkgIGxwLT5zdGF0cy50eF9wYWNrZXRzKys7CisJICBkZXYtPnN0YXRzLmNvbGxpc2lvbnMgKz0gKHR4X3N0YXR1cyAmIFRYX05DT0xfTUFTSyk7CisJICBkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKIAogCSAgbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwogCSAgb3V0YihDUjBfSU5UX0FDSyB8IE9QMF9OT1AsIExDQ1IoYmFzZSkpOwkvKiBBY2tub3dsZWRnZSB0aGUgaW50ZXJydXB0ICovCkBAIC00NDUyLDYgKzQ0MzYsMTkgQEAKICAgcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgd2F2ZWxhbl9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiAJCT0gd2F2ZWxhbl9vcGVuLAorCS5uZG9fc3RvcAkJPSB3YXZlbGFuX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAkJPSB3YXZlbGFuX3BhY2tldF94bWl0LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gd2F2ZWxhbl9zZXRfbXVsdGljYXN0X2xpc3QsCisjaWZkZWYgU0VUX01BQ19BRERSRVNTCisJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSB3YXZlbGFuX3NldF9tYWNfYWRkcmVzcywKKyNlbmRpZgorCS5uZG9fdHhfdGltZW91dAkJPSB3YXZlbGFuX3dhdGNoZG9nLAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qCiAgKiB3YXZlbGFuX2F0dGFjaCgpIGNyZWF0ZXMgYW4gImluc3RhbmNlIiBvZiB0aGUgZHJpdmVyLCBhbGxvY2F0aW5nCkBAIC00NTEyLDE3ICs0NTA5LDcgQEAKICAgbHAtPmRldiA9IGRldjsKIAogICAvKiB3YXZlbGFuIE5FVDMgY2FsbGJhY2tzICovCi0gIGRldi0+b3BlbiA9ICZ3YXZlbGFuX29wZW47Ci0gIGRldi0+c3RvcCA9ICZ3YXZlbGFuX2Nsb3NlOwotICBkZXYtPmhhcmRfc3RhcnRfeG1pdCA9ICZ3YXZlbGFuX3BhY2tldF94bWl0OwotICBkZXYtPmdldF9zdGF0cyA9ICZ3YXZlbGFuX2dldF9zdGF0czsKLSAgZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSAmd2F2ZWxhbl9zZXRfbXVsdGljYXN0X2xpc3Q7Ci0jaWZkZWYgU0VUX01BQ19BRERSRVNTCi0gIGRldi0+c2V0X21hY19hZGRyZXNzID0gJndhdmVsYW5fc2V0X21hY19hZGRyZXNzOwotI2VuZGlmCS8qIFNFVF9NQUNfQUREUkVTUyAqLwotCi0gIC8qIFNldCB0aGUgd2F0Y2hkb2cgdGltZXIgKi8KLSAgZGV2LT50eF90aW1lb3V0CT0gJndhdmVsYW5fd2F0Y2hkb2c7CisgIGRldi0+bmV0ZGV2X29wcyA9ICZ3YXZlbGFuX25ldGRldl9vcHM7CiAgIGRldi0+d2F0Y2hkb2dfdGltZW8JPSBXQVRDSERPR19KSUZGSUVTOwogICBTRVRfRVRIVE9PTF9PUFMoZGV2LCAmb3BzKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbl9jcy5wLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuX2NzLnAuaAppbmRleCA2MjgxOTJkLi43MDZmZDMwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbl9jcy5wLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbl9jcy5wLmgKQEAgLTU3Niw3ICs1NzYsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBUWVBFUyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qIFNob3J0Y3V0cyAqLwotdHlwZWRlZiBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cwllbl9zdGF0czsKIHR5cGVkZWYgc3RydWN0IGl3X3N0YXRpc3RpY3MJaXdfc3RhdHM7CiB0eXBlZGVmIHN0cnVjdCBpd19xdWFsaXR5CWl3X3F1YWw7CiB0eXBlZGVmIHN0cnVjdCBpd19mcmVxCQlpd19mcmVxOwpAQCAtNTkyLDggKzU5MSw2IEBACiAgKiBGb3IgZWFjaCBuZXR3b3JrIGludGVyZmFjZSwgTGludXgga2VlcCBkYXRhIGluIHR3byBzdHJ1Y3R1cmUuICJkZXZpY2UiCiAgKiBrZWVwIHRoZSBnZW5lcmljIGRhdGEgKHNhbWUgZm9ybWF0IGZvciBldmVyeWJvZHkpIGFuZCAibmV0X2xvY2FsIiBrZWVwCiAgKiB0aGUgYWRkaXRpb25hbCBzcGVjaWZpYyBkYXRhLgotICogTm90ZSB0aGF0IHNvbWUgb2YgdGhpcyBzcGVjaWZpYyBkYXRhIGlzIGluIGZhY3QgZ2VuZXJpYyAoZW5fc3RhdHMsIGZvcgotICogZXhhbXBsZSkuCiAgKi8KIHN0cnVjdCBuZXRfbG9jYWwKIHsKQEAgLTYwMSw3ICs1OTgsNiBAQAogICBzdHJ1Y3QgbmV0X2RldmljZSAqCWRldjsJCS8qIFJldmVyc2UgbGluay4uLiAqLwogICBzcGlubG9ja190CXNwaW5sb2NrOwkvKiBTZXJpYWxpemUgYWNjZXNzIHRvIHRoZSBoYXJkd2FyZSAoU01QKSAqLwogICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqCWxpbms7CQkvKiBwY21jaWEgc3RydWN0dXJlICovCi0gIGVuX3N0YXRzCXN0YXRzOwkJLyogRXRoZXJuZXQgaW50ZXJmYWNlIHN0YXRpc3RpY3MgKi8KICAgaW50CQlucmVzZXRzOwkvKiBOdW1iZXIgb2YgaHcgcmVzZXRzICovCiAgIHVfY2hhcgljb25maWd1cmVkOwkvKiBJZiBpdCBpcyBjb25maWd1cmVkICovCiAgIHVfY2hhcglyZWNvbmZpZ184MjU5MzsJLyogTmVlZCB0byByZWNvbmZpZ3VyZSB0aGUgY29udHJvbGxlciAqLwpAQCAtNjk0LDggKzY5MCw2IEBACiBzdGF0aWMgdm9pZAogCXd2X2luaXRfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqKTsJLyogZGlzcGxheSBzdGFydHVwIGluZm8gKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0gSU9DVEwsIFNUQVRTICYgUkVDT05GSUcgLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotc3RhdGljIGVuX3N0YXRzCSoKLQl3YXZlbGFuX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqKTsJLyogR2l2ZSBzdGF0cyAvcHJvYy9uZXQvZGV2ICovCiBzdGF0aWMgaXdfc3RhdHMgKgogCXdhdmVsYW5fZ2V0X3dpcmVsZXNzX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICopOwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUEFDS0VUIFJFQ0VQVElPTiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wzNTAxLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDM1MDEuaAppbmRleCA1OWJiM2E1Li44YmNlMWE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDM1MDEuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDM1MDEuaApAQCAtNjA2LDcgKzYwNiw3IEBACiAJdTgJCQkJcmVnX2RvbWFpbjsKIAl1OAkJCQl2ZXJzaW9uWzJdOwogCXN0cnVjdCB3bDM1MDFfc2Nhbl9jb25maXJtCWJzc19zZXRbMjBdOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIAlzdGF0czsKKwogCXN0cnVjdCBpd19zdGF0aXN0aWNzCQl3c3RhdHM7CiAJc3RydWN0IGl3X3NweV9kYXRhCQlzcHlfZGF0YTsKIAlzdHJ1Y3QgaXdfcHVibGljX2RhdGEJCXdpcmVsZXNzX2RhdGE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDM1MDFfY3MuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMzUwMV9jcy5jCmluZGV4IGM5OWExYjYuLjFmNjRkNjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMzUwMV9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMzUwMV9jcy5jCkBAIC00NCw2ICs0NCw3IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CisjaW5jbHVkZSA8bGludXgvaWVlZTgwMjExLmg+CiAKICNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgogCkBAIC0xMTEsMTIgKzExMiw2IEBACiAgKi8KIHN0YXRpYyBkZXZfaW5mb190IHdsMzUwMV9kZXZfaW5mbyA9ICJ3bDM1MDFfY3MiOwogCi1zdGF0aWMgaW50IHdsMzUwMV9jaGFuMmZyZXFbXSA9IHsKLQlbMF0gID0gMjQxMiwgWzFdICA9IDI0MTcsIFsyXSAgPSAyNDIyLCBbM10gID0gMjQyNywgWzRdID0gMjQzMiwKLQlbNV0gID0gMjQzNywgWzZdICA9IDI0NDIsIFs3XSAgPSAyNDQ3LCBbOF0gID0gMjQ1MiwgWzldID0gMjQ1NywKLQlbMTBdID0gMjQ2MiwgWzExXSA9IDI0NjcsIFsxMl0gPSAyNDcyLCBbMTNdID0gMjQ3NywKLX07Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgewogCWludCByZWdfZG9tYWluOwogCWludCBtaW4sIG1heCwgZGVmbHQ7CkBAIC0xMDA1LDcgKzEwMDAsNyBAQAogCWlmICghc2tiKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBDYW4ndCBhbGxvYyBhIHNrX2J1ZmYgb2Ygc2l6ZSAlZC5cbiIsCiAJCSAgICAgICBkZXYtPm5hbWUsIHBrdF9sZW4pOwotCQl0aGlzLT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCX0gZWxzZSB7CiAJCXNrYi0+ZGV2ID0gZGV2OwogCQlza2JfcmVzZXJ2ZShza2IsIDIpOyAvKiBJUCBoZWFkZXJzIG9uIDE2IGJ5dGVzIGJvdW5kYXJpZXMgKi8KQEAgLTEwMTMsOCArMTAwOCw4IEBACiAJCXdsMzUwMV9yZWNlaXZlKHRoaXMsIHNrYi0+ZGF0YSwgcGt0X2xlbik7CiAJCXNrYl9wdXQoc2tiLCBwa3RfbGVuKTsKIAkJc2tiLT5wcm90b2NvbAk9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTsKLQkJdGhpcy0+c3RhdHMucnhfcGFja2V0cysrOwotCQl0aGlzLT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKKwkJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CiAJCW5ldGlmX3J4KHNrYik7CiAJfQogfQpAQCAtMTMxNiw3ICsxMzExLDcgQEAKIHN0YXRpYyB2b2lkIHdsMzUwMV90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHdsMzUwMV9jYXJkICp0aGlzID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmdGhpcy0+c3RhdHM7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJmRldi0+c3RhdHM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmM7CiAKQEAgLTEzNTEsMTEgKzEzNDYsMTEgQEAKIAlpZiAoZW5hYmxlZCkKIAkJd2wzNTAxX3VuYmxvY2tfaW50ZXJydXB0KHRoaXMpOwogCWlmIChyYykgewotCQkrK3RoaXMtPnN0YXRzLnR4X2Ryb3BwZWQ7CisJCSsrZGV2LT5zdGF0cy50eF9kcm9wcGVkOwogCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJfSBlbHNlIHsKLQkJKyt0aGlzLT5zdGF0cy50eF9wYWNrZXRzOwotCQl0aGlzLT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKKwkJKytkZXYtPnN0YXRzLnR4X3BhY2tldHM7CisJCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CiAJCWtmcmVlX3NrYihza2IpOwogCiAJCWlmICh0aGlzLT50eF9idWZmZXJfY250IDwgMikKQEAgLTE0MDUsMTMgKzE0MDAsNiBAQAogCWdvdG8gb3V0OwogfQogCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKndsMzUwMV9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3Qgd2wzNTAxX2NhcmQgKnRoaXMgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JcmV0dXJuICZ0aGlzLT5zdGF0czsKLX0KLQogc3RhdGljIHN0cnVjdCBpd19zdGF0aXN0aWNzICp3bDM1MDFfZ2V0X3dpcmVsZXNzX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHdsMzUwMV9jYXJkICp0aGlzID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTE1MTAsNyArMTQ5OCw3IEBACiB7CiAJc3RydWN0IHdsMzUwMV9jYXJkICp0aGlzID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotCXdycXUtPmZyZXEubSA9IHdsMzUwMV9jaGFuMmZyZXFbdGhpcy0+Y2hhbiAtIDFdICogMTAwMDAwOworCXdycXUtPmZyZXEubSA9IGllZWU4MDIxMV9kc3NzX2NoYW5fdG9fZnJlcSh0aGlzLT5jaGFuKSAqIDEwMDAwMDsKIAl3cnF1LT5mcmVxLmUgPSAxOwogCXJldHVybiAwOwogfQpAQCAtMTg5NSw2ICsxODgzLDE2IEBACiAJLmdldF93aXJlbGVzc19zdGF0cyA9IHdsMzUwMV9nZXRfd2lyZWxlc3Nfc3RhdHMsCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHdsMzUwMV9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSB3bDM1MDFfb3BlbiwKKwkubmRvX3N0b3AJCT0gd2wzNTAxX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAkJPSB3bDM1MDFfaGFyZF9zdGFydF94bWl0LAorCS5uZG9fdHhfdGltZW91dAkJPSB3bDM1MDFfdHhfdGltZW91dCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogLyoqCiAgKiB3bDM1MDFfYXR0YWNoIC0gY3JlYXRlcyBhbiAiaW5zdGFuY2UiIG9mIHRoZSBkcml2ZXIKICAqCkBAIC0xOTI3LDE3ICsxOTI1LDE2IEBACiAJZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCB3bDM1MDFfY2FyZCkpOwogCWlmICghZGV2KQogCQlnb3RvIG91dF9saW5rOwotCWRldi0+b3BlbgkJPSB3bDM1MDFfb3BlbjsKLQlkZXYtPnN0b3AJCT0gd2wzNTAxX2Nsb3NlOwotCWRldi0+aGFyZF9zdGFydF94bWl0CT0gd2wzNTAxX2hhcmRfc3RhcnRfeG1pdDsKLQlkZXYtPnR4X3RpbWVvdXQJCT0gd2wzNTAxX3R4X3RpbWVvdXQ7CisKKworCWRldi0+bmV0ZGV2X29wcwkJPSAmd2wzNTAxX25ldGRldl9vcHM7CiAJZGV2LT53YXRjaGRvZ190aW1lbwk9IDUgKiBIWjsKLQlkZXYtPmdldF9zdGF0cwkJPSB3bDM1MDFfZ2V0X3N0YXRzOworCiAJdGhpcyA9IG5ldGRldl9wcml2KGRldik7CiAJdGhpcy0+d2lyZWxlc3NfZGF0YS5zcHlfZGF0YSA9ICZ0aGlzLT5zcHlfZGF0YTsKIAl0aGlzLT5wX2RldiA9IHBfZGV2OwogCWRldi0+d2lyZWxlc3NfZGF0YQk9ICZ0aGlzLT53aXJlbGVzc19kYXRhOwotCWRldi0+d2lyZWxlc3NfaGFuZGxlcnMJPSAoc3RydWN0IGl3X2hhbmRsZXJfZGVmICopJndsMzUwMV9oYW5kbGVyX2RlZjsKKwlkZXYtPndpcmVsZXNzX2hhbmRsZXJzCT0gJndsMzUwMV9oYW5kbGVyX2RlZjsKIAlTRVRfRVRIVE9PTF9PUFMoZGV2LCAmb3BzKTsKIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJcF9kZXYtPnByaXYgPSBwX2Rldi0+aXJxLkluc3RhbmNlID0gZGV2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjAxLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMDEuYwppbmRleCBiNDVjMjdkLi45YjI0NGM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMDEuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMDEuYwpAQCAtMzI4LDggKzMyOCw4IEBACiAJCQltZW1jcHkoc2tiX3B1dChza2IsIDIpLCAmZGF0YVtkYXRhbGVuLTI0XSwgMik7CiAJCQltZW1jcHkoc2tiX3B1dChza2IsIGxlbiksIGRhdGEsIGxlbik7CiAJCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCB6ZC0+ZGV2KTsKLQkJCXpkLT5zdGF0cy5yeF9wYWNrZXRzKys7Ci0JCQl6ZC0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CisJCQl6ZC0+ZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJCQl6ZC0+ZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKIAkJCW5ldGlmX3J4KHNrYik7CiAJCQlnb3RvIHJlc3VibWl0OwogCQl9CkBAIC0zODQsOCArMzg0LDggQEAKIAkJCW1lbWNweShza2JfcHV0KHNrYiwgbGVuKSwgZGF0YSs4LCBsZW4pOwogCQl9CiAJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIHpkLT5kZXYpOwotCQl6ZC0+c3RhdHMucnhfcGFja2V0cysrOwotCQl6ZC0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CisJCXpkLT5kZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwkJemQtPmRldi0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CiAJCW5ldGlmX3J4KHNrYik7CiAJfQogcmVzdWJtaXQ6CkBAIC03ODcsNyArNzg3LDcgQEAKIAlzdHJ1Y3QgdXJiICp1cmIgPSB6ZC0+dHhfdXJiOwogCiAJaWYgKCF6ZC0+bWFjX2VuYWJsZWQgfHwgemQtPm1vbml0b3IpIHsKLQkJemQtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKKwkJZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7CiAJCWtmcmVlX3NrYihza2IpOwogCQlyZXR1cm4gMDsKIAl9CkBAIC04MTcsMTIgKzgxNywxMiBAQAogCiAJZXJyID0gdXNiX3N1Ym1pdF91cmIoemQtPnR4X3VyYiwgR0ZQX0FUT01JQyk7CiAJaWYgKGVycikgewotCQl6ZC0+c3RhdHMudHhfZXJyb3JzKys7CisJCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CiAJCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CiAJCXJldHVybiBlcnI7CiAJfQotCXpkLT5zdGF0cy50eF9wYWNrZXRzKys7Ci0JemQtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOworCWRldi0+c3RhdHMudHhfcGFja2V0cysrOworCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CiAJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAJa2ZyZWVfc2tiKHNrYik7CiAKQEAgLTgzOCw3ICs4MzgsNyBAQAogCWRldl93YXJuKCZ6ZC0+dXNiLT5kZXYsICIlczogVFggdGltZW91dCwgc2hvb3RpbmcgZG93biB1cmJcbiIsCiAJICAgIGRldi0+bmFtZSk7CiAJdXNiX3VubGlua191cmIoemQtPnR4X3VyYik7Ci0JemQtPnN0YXRzLnR4X2Vycm9ycysrOworCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CiAJLyogUmVzdGFydCB0aGUgdGltZW91dCB0byBxdWlldCB0aGUgd2F0Y2hkb2c6ICovCiAJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiB9CkBAIC04NjEsMTMgKzg2MSw2IEBACiAJcmV0dXJuIHpkMTIwMV9tYWNfcmVzZXQoemQpOwogfQogCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnpkMTIwMV9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgemQxMjAxICp6ZCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlyZXR1cm4gJnpkLT5zdGF0czsKLX0KLQogc3RhdGljIHN0cnVjdCBpd19zdGF0aXN0aWNzICp6ZDEyMDFfZ2V0X3dpcmVsZXNzX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHpkMTIwMSAqemQgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtOTE5LDEwICs5MTIsOSBAQAogCWlmIChmcmVxLT5lID09IDApCiAJCWNoYW5uZWwgPSBmcmVxLT5tOwogCWVsc2UgewotCQlpZiAoZnJlcS0+bSA+PSAyNDgyKQotCQkJY2hhbm5lbCA9IDE0OwotCQlpZiAoZnJlcS0+bSA+PSAyNDA3KQotCQkJY2hhbm5lbCA9IChmcmVxLT5tLTI0MDcpLzU7CisJCWNoYW5uZWwgPSBpZWVlODAyMTFfZnJlcV90b19kc3NzX2NoYW4oZnJlcS0+bSk7CisJCWlmIChjaGFubmVsIDwgMCkKKwkJCWNoYW5uZWwgPSAwOwogCX0KIAogCWVyciA9IHpkMTIwMV9zZXRjb25maWcxNih6ZCwgWkQxMjAxX1JJRF9DTkZPV05DSEFOTkVMLCBjaGFubmVsKTsKQEAgLTE3MjUsNiArMTcxNywxOCBAQAogCS5nZXRfd2lyZWxlc3Nfc3RhdHMJPSB6ZDEyMDFfZ2V0X3dpcmVsZXNzX3N0YXRzLAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB6ZDEyMDFfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gemQxMjAxX25ldF9vcGVuLAorCS5uZG9fc3RvcAkJPSB6ZDEyMDFfbmV0X3N0b3AsCisJLm5kb19zdGFydF94bWl0CQk9IHpkMTIwMV9oYXJkX3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0CQk9IHpkMTIwMV90eF90aW1lb3V0LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gemQxMjAxX3NldF9tdWx0aWNhc3QsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSB6ZDEyMDFfc2V0X21hY19hZGRyZXNzLAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCiBzdGF0aWMgaW50IHpkMTIwMV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLAogCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQogewpAQCAtMTc3NywxNiArMTc4MSw5IEBACiAJaWYgKGVycikKIAkJZ290byBlcnJfc3RhcnQ7CiAKLQlkZXYtPm9wZW4gPSB6ZDEyMDFfbmV0X29wZW47Ci0JZGV2LT5zdG9wID0gemQxMjAxX25ldF9zdG9wOwotCWRldi0+Z2V0X3N0YXRzID0gemQxMjAxX2dldF9zdGF0czsKLQlkZXYtPndpcmVsZXNzX2hhbmRsZXJzID0KLQkgICAgKHN0cnVjdCBpd19oYW5kbGVyX2RlZiAqKSZ6ZDEyMDFfaXdfaGFuZGxlcnM7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSB6ZDEyMDFfaGFyZF9zdGFydF94bWl0OworCWRldi0+bmV0ZGV2X29wcyA9ICZ6ZDEyMDFfbmV0ZGV2X29wczsKKwlkZXYtPndpcmVsZXNzX2hhbmRsZXJzID0gJnpkMTIwMV9pd19oYW5kbGVyczsKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gWkQxMjAxX1RYX1RJTUVPVVQ7Ci0JZGV2LT50eF90aW1lb3V0ID0gemQxMjAxX3R4X3RpbWVvdXQ7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSB6ZDEyMDFfc2V0X211bHRpY2FzdDsKLQlkZXYtPnNldF9tYWNfYWRkcmVzcyA9IHpkMTIwMV9zZXRfbWFjX2FkZHJlc3M7CiAJc3RyY3B5KGRldi0+bmFtZSwgIndsYW4lZCIpOwogCiAJZXJyID0gemQxMjAxX2dldGNvbmZpZyh6ZCwgWkQxMjAxX1JJRF9DTkZPV05NQUNBRERSLCAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIwMS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjAxLmgKaW5kZXggMjM1ZjBlZS4uZGQ3ZWExZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjAxLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjAxLmgKQEAgLTI2LDcgKzI2LDYgQEAKIAlzdHJ1Y3QgdXNiX2RldmljZQkqdXNiOwogCWludAkJCXJlbW92ZWQ7CiAJc3RydWN0IG5ldF9kZXZpY2UJKmRldjsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKIAlzdHJ1Y3QgaXdfc3RhdGlzdGljcwlpd3N0YXRzOwogCiAJaW50CQkJZW5kcF9pbjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX2NoaXAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX2NoaXAuYwppbmRleCBmMTUxOTE0Li4yYzgxM2Q4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9jaGlwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfY2hpcC5jCkBAIC0xNjE2LDMgKzE2MTYsMjQgQEAKIAogCXJldHVybiB6ZF9pb3dyaXRlMzJhKGNoaXAsIGlvcmVxcywgQVJSQVlfU0laRShpb3JlcXMpKTsKIH0KKwordTY0IHpkX2NoaXBfZ2V0X3RzZihzdHJ1Y3QgemRfY2hpcCAqY2hpcCkKK3sKKwlpbnQgcjsKKwlzdGF0aWMgY29uc3QgemRfYWRkcl90IGF3X3B0X2JpX2FkZHJbXSA9CisJCXsgQ1JfVFNGX0xPV19QQVJULCBDUl9UU0ZfSElHSF9QQVJUIH07CisJdTMyIHZhbHVlc1syXTsKKwl1NjQgdHNmOworCisJbXV0ZXhfbG9jaygmY2hpcC0+bXV0ZXgpOworCXIgPSB6ZF9pb3JlYWQzMnZfbG9ja2VkKGNoaXAsIHZhbHVlcywgKGNvbnN0IHpkX2FkZHJfdCAqKWF3X3B0X2JpX2FkZHIsCisJICAgICAgICAgICAgICAgICAgICAgICAgQVJSQVlfU0laRShhd19wdF9iaV9hZGRyKSk7CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5tdXRleCk7CisJaWYgKHIpCisJCXJldHVybiAwOworCisJdHNmID0gdmFsdWVzWzFdOworCXRzZiA9ICh0c2YgPDwgMzIpIHwgdmFsdWVzWzBdOworCisJcmV0dXJuIHRzZjsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX2NoaXAuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX2NoaXAuaAppbmRleCBmOGMwNjFhLi5lZTQyNzUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9jaGlwLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfY2hpcC5oCkBAIC05NTAsNCArOTUwLDYgQEAKIGludCB6ZF9jaGlwX3NldF9tdWx0aWNhc3RfaGFzaChzdHJ1Y3QgemRfY2hpcCAqY2hpcCwKIAkgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB6ZF9tY19oYXNoICpoYXNoKTsKIAordTY0IHpkX2NoaXBfZ2V0X3RzZihzdHJ1Y3QgemRfY2hpcCAqY2hpcCk7CisKICNlbmRpZiAvKiBfWkRfQ0hJUF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9kZWYuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX2RlZi5oCmluZGV4IDUyMDBkYjQuLjZhYzU5N2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX2RlZi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX2RlZi5oCkBAIC0zMyw4ICszMywxMyBAQAogI2lmZGVmIERFQlVHCiAjICBkZWZpbmUgZGV2X2RiZ19mKGRldiwgZm10LCBhcmdzLi4uKSBcCiAJICBkZXZfcHJpbnRrX2YoS0VSTl9ERUJVRywgZGV2LCBmbXQsICMjIGFyZ3MpCisjICBkZWZpbmUgZGV2X2RiZ19mX2xpbWl0KGRldiwgZm10LCBhcmdzLi4uKSBkbyB7IFwKKwlpZiAobmV0X3JhdGVsaW1pdCgpKSBcCisJCWRldl9wcmludGtfZihLRVJOX0RFQlVHLCBkZXYsIGZtdCwgIyMgYXJncyk7IFwKK30gd2hpbGUgKDApCiAjZWxzZQogIyAgZGVmaW5lIGRldl9kYmdfZihkZXYsIGZtdCwgYXJncy4uLikgZG8geyAodm9pZCkoZGV2KTsgfSB3aGlsZSAoMCkKKyMgIGRlZmluZSBkZXZfZGJnX2ZfbGltaXQoZGV2LCBmbXQsIGFyZ3MuLi4pIGRvIHsgKHZvaWQpKGRldik7IH0gd2hpbGUgKDApCiAjZW5kaWYgLyogREVCVUcgKi8KIAogI2lmZGVmIERFQlVHCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9tYWMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX21hYy5jCmluZGV4IDg0NzA1N2QuLmMzYTUxMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX21hYy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX21hYy5jCkBAIC0xNzAsMTAgKzE3MCwxMCBAQAogCQlnb3RvIGRpc2FibGVfaW50OwogCiAJciA9IHpkX3JlZzJhbHBoYTIobWFjLT5yZWdkb21haW4sIGFscGhhMik7Ci0JaWYgKCFyKQotCQlyZWd1bGF0b3J5X2hpbnQoaHctPndpcGh5LCBhbHBoYTIpOworCWlmIChyKQorCQlnb3RvIGRpc2FibGVfaW50OwogCi0JciA9IDA7CisJciA9IHJlZ3VsYXRvcnlfaGludChody0+d2lwaHksIGFscGhhMik7CiBkaXNhYmxlX2ludDoKIAl6ZF9jaGlwX2Rpc2FibGVfaW50KGNoaXApOwogb3V0OgpAQCAtNzcyLDEzICs3NzIsMjMgQEAKIAkJCWlmICghYmVhY29uKQogCQkJCXJldHVybiAtRU5PTUVNOwogCQkJciA9IHpkX21hY19jb25maWdfYmVhY29uKGh3LCBiZWFjb24pOwotCQkJaWYgKHIgPCAwKQotCQkJCXJldHVybiByOwotCQkJciA9IHpkX3NldF9iZWFjb25faW50ZXJ2YWwoJm1hYy0+Y2hpcCwgQkNOX01PREVfSUJTUyB8Ci0JCQkJCWh3LT5jb25mLmJlYWNvbl9pbnQpOwotCQkJaWYgKHIgPCAwKQotCQkJCXJldHVybiByOwogCQkJa2ZyZWVfc2tiKGJlYWNvbik7CisKKwkJCWlmIChyIDwgMCkKKwkJCQlyZXR1cm4gcjsKKwkJfQorCisJCWlmIChjb25mLT5jaGFuZ2VkICYgSUVFRTgwMjExX0lGQ0NfQkVBQ09OX0VOQUJMRUQpIHsKKwkJCXUzMiBpbnRlcnZhbDsKKworCQkJaWYgKGNvbmYtPmVuYWJsZV9iZWFjb24pCisJCQkJaW50ZXJ2YWwgPSBCQ05fTU9ERV9JQlNTIHwgaHctPmNvbmYuYmVhY29uX2ludDsKKwkJCWVsc2UKKwkJCQlpbnRlcnZhbCA9IDA7CisKKwkJCXIgPSB6ZF9zZXRfYmVhY29uX2ludGVydmFsKCZtYWMtPmNoaXAsIGludGVydmFsKTsKKwkJCWlmIChyIDwgMCkKKwkJCQlyZXR1cm4gcjsKIAkJfQogCX0gZWxzZQogCQlhc3NvY2lhdGVkID0gaXNfdmFsaWRfZXRoZXJfYWRkcihjb25mLT5ic3NpZCk7CkBAIC03OTcsMTAgKzgwNyw5IEBACiAJc3RydWN0IHpkX21hYyAqbWFjID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB6ZF9tYWMsIHByb2Nlc3NfaW50cik7CiAKIAlpbnRfc3RhdHVzID0gbGUxNl90b19jcHUoKihfX2xlMTYgKikobWFjLT5pbnRyX2J1ZmZlcis0KSk7Ci0JaWYgKGludF9zdGF0dXMgJiBJTlRfQ0ZHX05FWFRfQkNOKSB7Ci0JCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCQlkZXZfZGJnX2YoemRfbWFjX2RldihtYWMpLCAiSU5UX0NGR19ORVhUX0JDTlxuIik7Ci0JfSBlbHNlCisJaWYgKGludF9zdGF0dXMgJiBJTlRfQ0ZHX05FWFRfQkNOKQorCQlkZXZfZGJnX2ZfbGltaXQoemRfbWFjX2RldihtYWMpLCAiSU5UX0NGR19ORVhUX0JDTlxuIik7CisJZWxzZQogCQlkZXZfZGJnX2YoemRfbWFjX2RldihtYWMpLCAiVW5zdXBwb3J0ZWQgaW50ZXJydXB0XG4iKTsKIAogCXpkX2NoaXBfZW5hYmxlX2h3aW50KCZtYWMtPmNoaXApOwpAQCAtOTMwLDYgKzkzOSwxMiBAQAogCX0KIH0KIAorc3RhdGljIHU2NCB6ZF9vcF9nZXRfdHNmKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCB6ZF9tYWMgKm1hYyA9IHpkX2h3X21hYyhodyk7CisJcmV0dXJuIHpkX2NoaXBfZ2V0X3RzZigmbWFjLT5jaGlwKTsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzIHpkX29wcyA9IHsKIAkudHgJCQk9IHpkX29wX3R4LAogCS5zdGFydAkJCT0gemRfb3Bfc3RhcnQsCkBAIC05NDAsNiArOTU1LDcgQEAKIAkuY29uZmlnX2ludGVyZmFjZQk9IHpkX29wX2NvbmZpZ19pbnRlcmZhY2UsCiAJLmNvbmZpZ3VyZV9maWx0ZXIJPSB6ZF9vcF9jb25maWd1cmVfZmlsdGVyLAogCS5ic3NfaW5mb19jaGFuZ2VkCT0gemRfb3BfYnNzX2luZm9fY2hhbmdlZCwKKwkuZ2V0X3RzZgkJPSB6ZF9vcF9nZXRfdHNmLAogfTsKIAogc3RydWN0IGllZWU4MDIxMV9odyAqemRfbWFjX2FsbG9jX2h3KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQpAQCAtOTcxLDcgKzk4Nyw3IEBACiAJaHctPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXSA9ICZtYWMtPmJhbmQ7CiAKIAlody0+ZmxhZ3MgPSBJRUVFODAyMTFfSFdfUlhfSU5DTFVERVNfRkNTIHwKLQkJICAgIElFRUU4MDIxMV9IV19TSUdOQUxfREI7CisJCSAgICBJRUVFODAyMTFfSFdfU0lHTkFMX1VOU1BFQzsKIAogCWh3LT53aXBoeS0+aW50ZXJmYWNlX21vZGVzID0KIAkJQklUKE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpIHwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3hlbi1uZXRmcm9udC5jIGIvZHJpdmVycy9uZXQveGVuLW5ldGZyb250LmMKaW5kZXggY2Q2MTg0ZS4uOWYxMDJhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQveGVuLW5ldGZyb250LmMKKysrIGIvZHJpdmVycy9uZXQveGVuLW5ldGZyb250LmMKQEAgLTE5Niw3ICsxOTYsNyBAQAogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilkYXRhOwogCXN0cnVjdCBuZXRmcm9udF9pbmZvICpucCA9IG5ldGRldl9wcml2KGRldik7Ci0JbmV0aWZfcnhfc2NoZWR1bGUoJm5wLT5uYXBpKTsKKwluYXBpX3NjaGVkdWxlKCZucC0+bmFwaSk7CiB9CiAKIHN0YXRpYyBpbnQgbmV0ZnJvbnRfdHhfc2xvdF9hdmFpbGFibGUoc3RydWN0IG5ldGZyb250X2luZm8gKm5wKQpAQCAtMzI4LDcgKzMyOCw3IEBACiAJCXhlbm5ldF9hbGxvY19yeF9idWZmZXJzKGRldik7CiAJCW5wLT5yeC5zcmluZy0+cnNwX2V2ZW50ID0gbnAtPnJ4LnJzcF9jb25zICsgMTsKIAkJaWYgKFJJTkdfSEFTX1VOQ09OU1VNRURfUkVTUE9OU0VTKCZucC0+cngpKQotCQkJbmV0aWZfcnhfc2NoZWR1bGUoJm5wLT5uYXBpKTsKKwkJCW5hcGlfc2NoZWR1bGUoJm5wLT5uYXBpKTsKIAl9CiAJc3Bpbl91bmxvY2tfYmgoJm5wLT5yeF9sb2NrKTsKIApAQCAtOTc5LDcgKzk3OSw3IEBACiAKIAkJUklOR19GSU5BTF9DSEVDS19GT1JfUkVTUE9OU0VTKCZucC0+cngsIG1vcmVfdG9fZG8pOwogCQlpZiAoIW1vcmVfdG9fZG8pCi0JCQlfX25ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQkJX19uYXBpX2NvbXBsZXRlKG5hcGkpOwogCiAJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAl9CkBAIC0xMzE3LDcgKzEzMTcsNyBAQAogCQl4ZW5uZXRfdHhfYnVmX2djKGRldik7CiAJCS8qIFVuZGVyIHR4X2xvY2s6IHByb3RlY3RzIGFjY2VzcyB0byByeCBzaGFyZWQtcmluZyBpbmRleGVzLiAqLwogCQlpZiAoUklOR19IQVNfVU5DT05TVU1FRF9SRVNQT05TRVMoJm5wLT5yeCkpCi0JCQluZXRpZl9yeF9zY2hlZHVsZSgmbnAtPm5hcGkpOworCQkJbmFwaV9zY2hlZHVsZSgmbnAtPm5hcGkpOwogCX0KIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5wLT50eF9sb2NrLCBmbGFncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC94dHNvbmljLmMgYi9kcml2ZXJzL25ldC94dHNvbmljLmMKaW5kZXggMDNhM2YzNC4uYTEyYTcyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQveHRzb25pYy5jCisrKyBiL2RyaXZlcnMvbmV0L3h0c29uaWMuYwpAQCAtMTgzLDcgKzE4Myw3IEBACiAKIAlpZiAobHAtPmRlc2NyaXB0b3JzID09IE5VTEwpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogY291bGRuJ3QgYWxsb2MgRE1BIG1lbW9yeSBmb3IgIgotCQkJCSIgZGVzY3JpcHRvcnMuXG4iLCBscC0+ZGV2aWNlLT5idXNfaWQpOworCQkJCSIgZGVzY3JpcHRvcnMuXG4iLCBkZXZfbmFtZShscC0+ZGV2aWNlKSk7CiAJCWdvdG8gb3V0OwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQveWVsbG93ZmluLmMgYi9kcml2ZXJzL25ldC95ZWxsb3dmaW4uYwppbmRleCAyZjE2NDVkLi43NDc3ZmZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC95ZWxsb3dmaW4uYworKysgYi9kcml2ZXJzL25ldC95ZWxsb3dmaW4uYwpAQCAtMTA3LDkgKzEwNyw5IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKIC8qIFRoZXNlIGlkZW50aWZ5IHRoZSBkcml2ZXIgYmFzZSB2ZXJzaW9uIGFuZCBtYXkgbm90IGJlIHJlbW92ZWQuICovCi1zdGF0aWMgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0ZGF0YSA9Ci1LRVJOX0lORk8gRFJWX05BTUUgIi5jOnYxLjA1ICAxLzA5LzIwMDEgIFdyaXR0ZW4gYnkgRG9uYWxkIEJlY2tlciA8YmVja2VyQHNjeWxkLmNvbT5cbiIKLUtFUk5fSU5GTyAiICAodW5vZmZpY2lhbCAyLjQueCBwb3J0LCAiIERSVl9WRVJTSU9OICIsICIgRFJWX1JFTERBVEUgIilcbiI7CitzdGF0aWMgY29uc3QgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0Y29uc3QgPQorICBLRVJOX0lORk8gRFJWX05BTUUgIi5jOnYxLjA1ICAxLzA5LzIwMDEgIFdyaXR0ZW4gYnkgRG9uYWxkIEJlY2tlciA8YmVja2VyQHNjeWxkLmNvbT5cbiIKKyAgS0VSTl9JTkZPICIgICh1bm9mZmljaWFsIDIuNC54IHBvcnQsICIgRFJWX1ZFUlNJT04gIiwgIiBEUlZfUkVMREFURSAiKVxuIjsKIAogTU9EVUxFX0FVVEhPUigiRG9uYWxkIEJlY2tlciA8YmVja2VyQHNjeWxkLmNvbT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiUGFja2V0IEVuZ2luZXMgWWVsbG93ZmluIEctTklDIEdpZ2FiaXQgRXRoZXJuZXQgZHJpdmVyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC96bmV0LmMgYi9kcml2ZXJzL25ldC96bmV0LmMKaW5kZXggZjBiMTVjOS4uMGE2OTkyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvem5ldC5jCisrKyBiL2RyaXZlcnMvbmV0L3puZXQuYwpAQCAtMzU4LDYgKzM1OCwxNyBAQAogCSAqIG11bHRpY2FzdCBhZGRyZXNzIGNvbmZpZ3VyZWQgaXNuJ3QgZXF1YWwgdG8gSUZGX0FMTE1VTFRJICovCiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgem5ldF9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSB6bmV0X29wZW4sCisJLm5kb19zdG9wCQk9IHpuZXRfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IHpuZXRfc2VuZF9wYWNrZXQsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSB6bmV0X3NldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gem5ldF90eF90aW1lb3V0LAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCiAvKiBUaGUgWi1Ob3RlIHByb2JlIGlzIHByZXR0eSBlYXN5LiAgVGhlIE5FVElEQkxLIGV4aXN0cyBpbiB0aGUgc2FmZS10by1wcm9iZQogICAgQklPUyBhcmVhLiAgV2UganVzdCBzY2FuIGZvciB0aGUgc2lnbmF0dXJlLCBhbmQgcHVsbCB0aGUgdml0YWwgcGFyYW1ldGVycwogICAgb3V0IG9mIHRoZSBzdHJ1Y3R1cmUuICovCkBAIC00NDAsMTEgKzQ1MSw3IEBACiAJem5ldC0+dHhfZW5kID0gem5ldC0+dHhfc3RhcnQgKyB6bmV0LT50eF9idWZfbGVuOwogCiAJLyogVGhlIFpORVQtc3BlY2lmaWMgZW50cmllcyBpbiB0aGUgZGV2aWNlIHN0cnVjdHVyZS4gKi8KLQlkZXYtPm9wZW4gPSAmem5ldF9vcGVuOwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gJnpuZXRfc2VuZF9wYWNrZXQ7Ci0JZGV2LT5zdG9wID0gJnpuZXRfY2xvc2U7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSAmem5ldF9zZXRfbXVsdGljYXN0X2xpc3Q7Ci0JZGV2LT50eF90aW1lb3V0ID0gem5ldF90eF90aW1lb3V0OworCWRldi0+bmV0ZGV2X29wcyA9ICZ6bmV0X25ldGRldl9vcHM7CiAJZGV2LT53YXRjaGRvZ190aW1lbyA9IFRYX1RJTUVPVVQ7CiAJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJaWYgKGVycikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BxcGhwX3N5c2ZzLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwcXBocF9zeXNmcy5jCmluZGV4IGExM2FiZjUuLjg0NTBmNGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BxcGhwX3N5c2ZzLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9jcHFwaHBfc3lzZnMuYwpAQCAtMjI1LDcgKzIyNSw4IEBACiAKIHZvaWQgY3BxaHBfY3JlYXRlX2RlYnVnZnNfZmlsZXMoc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwpCiB7Ci0JY3RybC0+ZGVudHJ5ID0gZGVidWdmc19jcmVhdGVfZmlsZShjdHJsLT5wY2lfZGV2LT5kZXYuYnVzX2lkLCBTX0lSVUdPLCByb290LCBjdHJsLCAmZGVidWdfb3BzKTsKKwljdHJsLT5kZW50cnkgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKGRldl9uYW1lKCZjdHJsLT5wY2lfZGV2LT5kZXYpLAorCQkJCQkgICBTX0lSVUdPLCByb290LCBjdHJsLCAmZGVidWdfb3BzKTsKIH0KIAogdm9pZCBjcHFocF9yZW1vdmVfZGVidWdmc19maWxlcyhzdHJ1Y3QgY29udHJvbGxlciAqY3RybCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2ludHJfcmVtYXBwaW5nLmMgYi9kcml2ZXJzL3BjaS9pbnRyX3JlbWFwcGluZy5jCmluZGV4IDQ1ZWZmYzUuLmI3MjFjMmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2ludHJfcmVtYXBwaW5nLmMKKysrIGIvZHJpdmVycy9wY2kvaW50cl9yZW1hcHBpbmcuYwpAQCAtMjAsNyArMjAsNyBAQAogCXU4ICBpcnRlX21hc2s7CiB9OwogCi0jaWZkZWYgQ09ORklHX1NQQVJTRV9JUlEKKyNpZmRlZiBDT05GSUdfR0VORVJJQ19IQVJESVJRUwogc3RhdGljIHN0cnVjdCBpcnFfMl9pb21tdSAqZ2V0X29uZV9mcmVlX2lycV8yX2lvbW11KGludCBjcHUpCiB7CiAJc3RydWN0IGlycV8yX2lvbW11ICppb21tdTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9nZW5lcmljLmMgYi9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfZ2VuZXJpYy5jCmluZGV4IGZjMWRlNDYuLjkwMDEzMzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9nZW5lcmljLmMKKysrIGIvZHJpdmVycy9wY21jaWEvYXUxMDAwX2dlbmVyaWMuYwpAQCAtNDY4LDEzICs0NjgsMTMgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgYXUxeDAwX2Rydl9wY21jaWFfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK2ludCBhdTF4MDBfZHJ2X3BjbWNpYV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBza3RfZGV2X2luZm8gKnNpbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHNrdF9kZXZfaW5mbyAqc2luZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCWludCBpOwogCiAJbXV0ZXhfbG9jaygmcGNtY2lhX3NvY2tldHNfbG9jayk7Ci0JZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKIAogCWZvciAoaSA9IDA7IGkgPCBzaW5mby0+bnNrdDsgaSsrKSB7CiAJCXN0cnVjdCBhdTEwMDBfcGNtY2lhX3NvY2tldCAqc2t0ID0gUENNQ0lBX1NPQ0tFVChpKTsKQEAgLTQ5OCwxMyArNDk4LDEzIEBACiAgKiBQQ01DSUEgIkRyaXZlciIgQVBJCiAgKi8KIAotc3RhdGljIGludCBhdTF4MDBfZHJ2X3BjbWNpYV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGF1MXgwMF9kcnZfcGNtY2lhX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlpbnQgaSwgcmV0ID0gLUVOT0RFVjsKIAogCW11dGV4X2xvY2soJnBjbWNpYV9zb2NrZXRzX2xvY2spOwogCWZvciAoaT0wOyBpIDwgQVJSQVlfU0laRShhdTF4MDBfcGNtY2lhX2h3X2luaXQpOyBpKyspIHsKLQkJcmV0ID0gYXUxeDAwX3BjbWNpYV9od19pbml0W2ldKGRldik7CisJCXJldCA9IGF1MXgwMF9wY21jaWFfaHdfaW5pdFtpXSgmZGV2LT5kZXYpOwogCQlpZiAocmV0ID09IDApCiAJCQlicmVhazsKIAl9CkBAIC01MTIsMTQgKzUxMiwyNiBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgYXUxeDAwX2Rydl9wY21jaWFfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsCisJCQkJICAgICBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoJmRldi0+ZGV2LCBzdGF0ZSk7Cit9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBhdTF4MDBfcGNtY2lhX2RyaXZlciA9IHsKK3N0YXRpYyBpbnQgYXUxeDAwX2Rydl9wY21jaWFfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfcmVzdW1lKCZkZXYtPmRldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGF1MXgwMF9wY21jaWFfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCQk9ICJhdTF4MDAtcGNtY2lhIiwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCX0sCiAJLnByb2JlCQk9IGF1MXgwMF9kcnZfcGNtY2lhX3Byb2JlLAogCS5yZW1vdmUJCT0gYXUxeDAwX2Rydl9wY21jaWFfcmVtb3ZlLAotCS5uYW1lCQk9ICJhdTF4MDAtcGNtY2lhIiwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKLQkuc3VzcGVuZAk9IHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBwY21jaWFfc29ja2V0X2Rldl9yZXN1bWUsCisJLnN1c3BlbmQgCT0gYXUxeDAwX2Rydl9wY21jaWFfc3VzcGVuZCwKKwkucmVzdW1lIAk9IGF1MXgwMF9kcnZfcGNtY2lhX3Jlc3VtZSwKIH07CiAKIApAQCAtNTMzLDggKzU0NSw3IEBACiBzdGF0aWMgaW50IF9faW5pdCBhdTF4MDBfcGNtY2lhX2luaXQodm9pZCkKIHsKIAlpbnQgZXJyb3IgPSAwOwotCWlmICgoZXJyb3IgPSBkcml2ZXJfcmVnaXN0ZXIoJmF1MXgwMF9wY21jaWFfZHJpdmVyKSkpCi0JCXJldHVybiBlcnJvcjsKKwllcnJvciA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmYXUxeDAwX3BjbWNpYV9kcml2ZXIpOwogCXJldHVybiBlcnJvcjsKIH0KIApAQCAtNTQ0LDcgKzU1NSw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIF9fZXhpdCBhdTF4MDBfcGNtY2lhX2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmYXUxeDAwX3BjbWNpYV9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZhdTF4MDBfcGNtY2lhX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KGF1MXgwMF9wY21jaWFfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9pODIzNjUuYyBiL2RyaXZlcnMvcGNtY2lhL2k4MjM2NS5jCmluZGV4IDcxNjUzYWIuLjQwZDQ5NTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2k4MjM2NS5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2k4MjM2NS5jCkBAIC0xMjM4LDYgKzEyMzgsMTYgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBpODIzNjVfZHJ2X3BjbWNpYV9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwKKwkJCQkgICAgIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYsIHN0YXRlKTsKK30KKworc3RhdGljIGludCBpODIzNjVfZHJ2X3BjbWNpYV9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXJldHVybiBwY21jaWFfc29ja2V0X2Rldl9yZXN1bWUoJmRldi0+ZGV2KTsKK30KIHN0YXRpYyBzdHJ1Y3QgcGNjYXJkX29wZXJhdGlvbnMgcGNpY19vcGVyYXRpb25zID0gewogCS5pbml0CQkJPSBwY2ljX2luaXQsCiAJLmdldF9zdGF0dXMJCT0gcGNpY19nZXRfc3RhdHVzLApAQCAtMTI0OCwxMSArMTI1OCwxMyBAQAogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGk4MjM2NV9kcml2ZXIgPSB7Ci0JLm5hbWUgPSAiaTgyMzY1IiwKLQkuYnVzID0gJnBsYXRmb3JtX2J1c190eXBlLAotCS5zdXNwZW5kID0gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCwKLQkucmVzdW1lID0gcGNtY2lhX3NvY2tldF9kZXZfcmVzdW1lLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaTgyMzY1X2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJpODIzNjUiLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJfSwKKwkuc3VzcGVuZCAJPSBpODIzNjVfZHJ2X3BjbWNpYV9zdXNwZW5kLAorCS5yZXN1bWUgCT0gaTgyMzY1X2Rydl9wY21jaWFfcmVzdW1lLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmk4MjM2NV9kZXZpY2U7CkBAIC0xMjYxLDcgKzEyNzMsNyBAQAogewogICAgIGludCBpLCByZXQ7CiAKLSAgICByZXQgPSBkcml2ZXJfcmVnaXN0ZXIoJmk4MjM2NV9kcml2ZXIpOworICAgIHJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmaTgyMzY1X2RyaXZlcik7CiAgICAgaWYgKHJldCkKIAlnb3RvIGVycl9vdXQ7CiAKQEAgLTEzMzcsNyArMTM0OSw3IEBACiAJcG5wX2Rpc2FibGVfZGV2KGk4MjM2NV9wbnBkZXYpOwogI2VuZGlmCiBlcnJfZHJpdmVyX3VucmVnaXN0ZXI6Ci0gICAgZHJpdmVyX3VucmVnaXN0ZXIoJmk4MjM2NV9kcml2ZXIpOworICAgIHBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZpODIzNjVfZHJpdmVyKTsKIGVycl9vdXQ6CiAgICAgcmV0dXJuIHJldDsKIH0gLyogaW5pdF9pODIzNjUgKi8KQEAgLTEzNjUsNyArMTM3Nyw3IEBACiAgICAgaWYgKGk4MjM2NV9wbnBkZXYpCiAgICAgCQlwbnBfZGlzYWJsZV9kZXYoaTgyMzY1X3BucGRldik7CiAjZW5kaWYKLSAgICBkcml2ZXJfdW5yZWdpc3RlcigmaTgyMzY1X2RyaXZlcik7CisgICAgcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmk4MjM2NV9kcml2ZXIpOwogfSAvKiBleGl0X2k4MjM2NSAqLwogCiBtb2R1bGVfaW5pdChpbml0X2k4MjM2NSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9tMzJyX2NmYy5jIGIvZHJpdmVycy9wY21jaWEvbTMycl9jZmMuYwppbmRleCAyYWI0ZjIyLi42MmI0ZWNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9tMzJyX2NmYy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL20zMnJfY2ZjLmMKQEAgLTY5NiwxMyArNjk2LDI1IEBACiAJLnNldF9tZW1fbWFwCQk9IHBjY19zZXRfbWVtX21hcCwKIH07CiAKK3N0YXRpYyBpbnQgY2ZjX2Rydl9wY21jaWFfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsCisJCQkJICAgICBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoJmRldi0+ZGV2LCBzdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQgY2ZjX2Rydl9wY21jaWFfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfcmVzdW1lKCZkZXYtPmRldik7Cit9CiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHBjY19kcml2ZXIgPSB7Ci0JLm5hbWUgPSAiY2ZjIiwKLQkuYnVzID0gJnBsYXRmb3JtX2J1c190eXBlLAotCS5zdXNwZW5kID0gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCwKLQkucmVzdW1lID0gcGNtY2lhX3NvY2tldF9kZXZfcmVzdW1lLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcGNjX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQkJPSAiY2ZjIiwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCX0sCisJLnN1c3BlbmQgCT0gY2ZjX2Rydl9wY21jaWFfc3VzcGVuZCwKKwkucmVzdW1lIAk9IGNmY19kcnZfcGNtY2lhX3Jlc3VtZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBjY19kZXZpY2UgPSB7CkBAIC03MTYsMTMgKzcyOCwxMyBAQAogewogCWludCBpLCByZXQ7CiAKLQlyZXQgPSBkcml2ZXJfcmVnaXN0ZXIoJnBjY19kcml2ZXIpOworCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmcGNjX2RyaXZlcik7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAogCXJldCA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcGNjX2RldmljZSk7CiAJaWYgKHJldCl7Ci0JCWRyaXZlcl91bnJlZ2lzdGVyKCZwY2NfZHJpdmVyKTsKKwkJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnBjY19kcml2ZXIpOwogCQlyZXR1cm4gcmV0OwogCX0KIApAQCAtNzU0LDcgKzc2Niw3IEBACiAJaWYgKHBjY19zb2NrZXRzID09IDApIHsKIAkJcHJpbnRrKCJzb2NrZXQgaXMgbm90IGZvdW5kLlxuIik7CiAJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKCZwY2NfZGV2aWNlKTsKLQkJZHJpdmVyX3VucmVnaXN0ZXIoJnBjY19kcml2ZXIpOworCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmcGNjX2RyaXZlcik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApAQCAtODAyLDcgKzgxNCw3IEBACiAJaWYgKHBvbGxfaW50ZXJ2YWwgIT0gMCkKIAkJZGVsX3RpbWVyX3N5bmMoJnBvbGxfdGltZXIpOwogCi0JZHJpdmVyX3VucmVnaXN0ZXIoJnBjY19kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZwY2NfZHJpdmVyKTsKIH0gLyogZXhpdF9tMzJyX3BjYyAqLwogCiBtb2R1bGVfaW5pdChpbml0X20zMnJfcGNjKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL20zMnJfcGNjLmMgYi9kcml2ZXJzL3BjbWNpYS9tMzJyX3BjYy5jCmluZGV4IDJmMTA4YzIuLjEyMDM0YjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL20zMnJfcGNjLmMKKysrIGIvZHJpdmVycy9wY21jaWEvbTMycl9wY2MuYwpAQCAtNjcyLDEzICs2NzIsMjUgQEAKIAkuc2V0X21lbV9tYXAJCT0gcGNjX3NldF9tZW1fbWFwLAogfTsKIAorc3RhdGljIGludCBwY2NfZHJ2X3BjbWNpYV9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwKKwkJCQkgICAgIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYsIHN0YXRlKTsKK30KKworc3RhdGljIGludCBwY2NfZHJ2X3BjbWNpYV9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXJldHVybiBwY21jaWFfc29ja2V0X2Rldl9yZXN1bWUoJmRldi0+ZGV2KTsKK30KIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgcGNjX2RyaXZlciA9IHsKLQkubmFtZSA9ICJwY2MiLAotCS5idXMgPSAmcGxhdGZvcm1fYnVzX3R5cGUsCi0JLnN1c3BlbmQgPSBwY21jaWFfc29ja2V0X2Rldl9zdXNwZW5kLAotCS5yZXN1bWUgPSBwY21jaWFfc29ja2V0X2Rldl9yZXN1bWUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBwY2NfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCQk9ICJwY2MiLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJfSwKKwkuc3VzcGVuZCAJPSBwY2NfZHJ2X3BjbWNpYV9zdXNwZW5kLAorCS5yZXN1bWUgCT0gcGNjX2Rydl9wY21jaWFfcmVzdW1lLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGNjX2RldmljZSA9IHsKQEAgLTY5MiwxMyArNzA0LDEzIEBACiB7CiAJaW50IGksIHJldDsKIAotCXJldCA9IGRyaXZlcl9yZWdpc3RlcigmcGNjX2RyaXZlcik7CisJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZwY2NfZHJpdmVyKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCiAJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZwY2NfZGV2aWNlKTsKIAlpZiAocmV0KXsKLQkJZHJpdmVyX3VucmVnaXN0ZXIoJnBjY19kcml2ZXIpOworCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmcGNjX2RyaXZlcik7CiAJCXJldHVybiByZXQ7CiAJfQogCkBAIC03MTUsNyArNzI3LDcgQEAKIAlpZiAocGNjX3NvY2tldHMgPT0gMCkgewogCQlwcmludGsoInNvY2tldCBpcyBub3QgZm91bmQuXG4iKTsKIAkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoJnBjY19kZXZpY2UpOwotCQlkcml2ZXJfdW5yZWdpc3RlcigmcGNjX2RyaXZlcik7CisJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZwY2NfZHJpdmVyKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCkBAIC03NjMsNyArNzc1LDcgQEAKIAlpZiAocG9sbF9pbnRlcnZhbCAhPSAwKQogCQlkZWxfdGltZXJfc3luYygmcG9sbF90aW1lcik7CiAKLQlkcml2ZXJfdW5yZWdpc3RlcigmcGNjX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnBjY19kcml2ZXIpOwogfSAvKiBleGl0X20zMnJfcGNjICovCiAKIG1vZHVsZV9pbml0KGluaXRfbTMycl9wY2MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcnNyY19tZ3IuYyBiL2RyaXZlcnMvcGNtY2lhL3JzcmNfbWdyLmMKaW5kZXggYzBlMmFmYy4uZTU5MmUwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcnNyY19tZ3IuYworKysgYi9kcml2ZXJzL3BjbWNpYS9yc3JjX21nci5jCkBAIC0xNTMsNyArMTUzLDcgQEAKIAkJdW5zaWduZWQgbG9uZyBhbGlnbiwgc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpCiB7CiAJc3RydWN0IHJlc291cmNlICpyZXMgPSBtYWtlX3Jlc291cmNlKDAsIG51bSwgSU9SRVNPVVJDRV9JTywKLQkJCQkJICAgICBzLT5kZXYuYnVzX2lkKTsKKwkJCQkJICAgICBkZXZfbmFtZSgmcy0+ZGV2KSk7CiAJc3RydWN0IHBjbWNpYV9hbGlnbl9kYXRhIGRhdGE7CiAJdW5zaWduZWQgbG9uZyBtaW4gPSBiYXNlOwogCWludCByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9zYTExMDBfZ2VuZXJpYy5jIGIvZHJpdmVycy9wY21jaWEvc2ExMTAwX2dlbmVyaWMuYwppbmRleCBjNWIyYTQ0Li5kOGRhNWFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9zYTExMDBfZ2VuZXJpYy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3NhMTEwMF9nZW5lcmljLmMKQEAgLTY1LDcgKzY1LDcgQEAKICNlbmRpZgogfTsKIAotc3RhdGljIGludCBzYTExeDBfZHJ2X3BjbWNpYV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHNhMTF4MF9kcnZfcGNtY2lhX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlpbnQgaSwgcmV0ID0gLUVOT0RFVjsKIApAQCAtNzMsNyArNzMsNyBAQAogCSAqIEluaXRpYWxpc2UgYW55ICJvbi1ib2FyZCIgUENNQ0lBIHNvY2tldHMuCiAJICovCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2ExMXgwX3BjbWNpYV9od19pbml0KTsgaSsrKSB7Ci0JCXJldCA9IHNhMTF4MF9wY21jaWFfaHdfaW5pdFtpXShkZXYpOworCQlyZXQgPSBzYTExeDBfcGNtY2lhX2h3X2luaXRbaV0oJmRldi0+ZGV2KTsKIAkJaWYgKHJldCA9PSAwKQogCQkJYnJlYWs7CiAJfQpAQCAtODEsMTMgKzgxLDMxIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHNhMTF4MF9wY21jaWFfZHJpdmVyID0geworc3RhdGljIGludCBzYTExeDBfZHJ2X3BjbWNpYV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXJldHVybiBzb2NfY29tbW9uX2Rydl9wY21jaWFfcmVtb3ZlKCZkZXYtPmRldik7Cit9CisKK3N0YXRpYyBpbnQgc2ExMXgwX2Rydl9wY21jaWFfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsCisJCQkJICAgICBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoJmRldi0+ZGV2LCBzdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQgc2ExMXgwX2Rydl9wY21jaWFfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfcmVzdW1lKCZkZXYtPmRldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNhMTF4MF9wY21jaWFfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCQk9ICJzYTExeDAtcGNtY2lhIiwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCX0sCiAJLnByb2JlCQk9IHNhMTF4MF9kcnZfcGNtY2lhX3Byb2JlLAotCS5yZW1vdmUJCT0gc29jX2NvbW1vbl9kcnZfcGNtY2lhX3JlbW92ZSwKLQkubmFtZQkJPSAic2ExMXgwLXBjbWNpYSIsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCi0JLnN1c3BlbmQgCT0gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCwKLQkucmVzdW1lIAk9IHBjbWNpYV9zb2NrZXRfZGV2X3Jlc3VtZSwKKwkucmVtb3ZlCQk9IHNhMTF4MF9kcnZfcGNtY2lhX3JlbW92ZSwKKwkuc3VzcGVuZCAJPSBzYTExeDBfZHJ2X3BjbWNpYV9zdXNwZW5kLAorCS5yZXN1bWUgCT0gc2ExMXgwX2Rydl9wY21jaWFfcmVzdW1lLAogfTsKIAogLyogc2ExMXgwX3BjbWNpYV9pbml0KCkKQEAgLTEwMCw3ICsxMTgsNyBAQAogICovCiBzdGF0aWMgaW50IF9faW5pdCBzYTExeDBfcGNtY2lhX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZzYTExeDBfcGNtY2lhX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmc2ExMXgwX3BjbWNpYV9kcml2ZXIpOwogfQogCiAvKiBzYTExeDBfcGNtY2lhX2V4aXQoKQpAQCAtMTEwLDcgKzEyOCw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIF9fZXhpdCBzYTExeDBfcGNtY2lhX2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3Rlcigmc2ExMXgwX3BjbWNpYV9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzYTExeDBfcGNtY2lhX2RyaXZlcik7CiB9CiAKIE1PRFVMRV9BVVRIT1IoIkpvaG4gRG9yc2V5IDxqb2huK0Bjcy5jbXUuZWR1PiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvdGNpYy5jIGIvZHJpdmVycy9wY21jaWEvdGNpYy5jCmluZGV4IDJhNjEzZTkuLjlhZDk3ZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3RjaWMuYworKysgYi9kcml2ZXJzL3BjbWNpYS90Y2ljLmMKQEAgLTM2MywxMyArMzYzLDI1IEBACiAgICAgcmV0dXJuIGlkOwogfQogCitzdGF0aWMgaW50IHRjaWNfZHJ2X3BjbWNpYV9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwKKwkJCQkgICAgIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYsIHN0YXRlKTsKK30KKworc3RhdGljIGludCB0Y2ljX2Rydl9wY21jaWFfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfcmVzdW1lKCZkZXYtPmRldik7Cit9CiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHRjaWNfZHJpdmVyID0gewotCS5uYW1lID0gInRjaWMtcGNtY2lhIiwKLQkuYnVzID0gJnBsYXRmb3JtX2J1c190eXBlLAotCS5zdXNwZW5kID0gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCwKLQkucmVzdW1lID0gcGNtY2lhX3NvY2tldF9kZXZfcmVzdW1lLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdGNpY19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAidGNpYy1wY21jaWEiLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJfSwKKwkuc3VzcGVuZCAJPSB0Y2ljX2Rydl9wY21jaWFfc3VzcGVuZCwKKwkucmVzdW1lIAk9IHRjaWNfZHJ2X3BjbWNpYV9yZXN1bWUsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB0Y2ljX2RldmljZSA9IHsKQEAgLTM4Myw3ICszOTUsNyBAQAogICAgIGludCBpLCBzb2NrLCByZXQgPSAwOwogICAgIHVfaW50IG1hc2ssIHNjYW47CiAKLSAgICBpZiAoZHJpdmVyX3JlZ2lzdGVyKCZ0Y2ljX2RyaXZlcikpCisgICAgaWYgKHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmdGNpY19kcml2ZXIpKQogCXJldHVybiAtMTsKICAgICAKICAgICBwcmludGsoS0VSTl9JTkZPICJEYXRhYm9vayBUQ0lDLTIgUENNQ0lBIHByb2JlOiAiKTsKQEAgLTM5MSw3ICs0MDMsNyBAQAogCiAgICAgaWYgKCFyZXF1ZXN0X3JlZ2lvbih0Y2ljX2Jhc2UsIDE2LCAidGNpYy0yIikpIHsKIAlwcmludGsoImNvdWxkIG5vdCBhbGxvY2F0ZSBwb3J0cyxcbiAiKTsKLQlkcml2ZXJfdW5yZWdpc3RlcigmdGNpY19kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ0Y2ljX2RyaXZlcik7CiAJcmV0dXJuIC1FTk9ERVY7CiAgICAgfQogICAgIGVsc2UgewpAQCAtNDE0LDcgKzQyNiw3IEBACiAgICAgaWYgKHNvY2sgPT0gMCkgewogCXByaW50aygibm90IGZvdW5kLlxuIik7CiAJcmVsZWFzZV9yZWdpb24odGNpY19iYXNlLCAxNik7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJnRjaWNfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdGNpY19kcml2ZXIpOwogCXJldHVybiAtRU5PREVWOwogICAgIH0KIApAQCAtNTQyLDcgKzU1NCw3IEBACiAgICAgfQogCiAgICAgcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoJnRjaWNfZGV2aWNlKTsKLSAgICBkcml2ZXJfdW5yZWdpc3RlcigmdGNpY19kcml2ZXIpOworICAgIHBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ0Y2ljX2RyaXZlcik7CiB9IC8qIGV4aXRfdGNpYyAqLwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3ZyYzQxNzFfY2FyZC5jIGIvZHJpdmVycy9wY21jaWEvdnJjNDE3MV9jYXJkLmMKaW5kZXggYjJjNDEyNC4uNjU5NDIxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvdnJjNDE3MV9jYXJkLmMKKysrIGIvZHJpdmVycy9wY21jaWEvdnJjNDE3MV9jYXJkLmMKQEAgLTcwNCwyNCArNzA0LDM3IEBACiAKIF9fc2V0dXAoInZyYzQxNzFfY2FyZD0iLCB2cmM0MTcxX2NhcmRfc2V0dXApOwogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgdnJjNDE3MV9jYXJkX2RyaXZlciA9IHsKLQkubmFtZQkJPSB2cmM0MTcxX2NhcmRfbmFtZSwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKLQkuc3VzcGVuZAk9IHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBwY21jaWFfc29ja2V0X2Rldl9yZXN1bWUsCitzdGF0aWMgaW50IHZyYzQxNzFfY2FyZF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwKKwkJCQkgICAgIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYsIHN0YXRlKTsKK30KKworc3RhdGljIGludCB2cmM0MTcxX2NhcmRfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfcmVzdW1lKCZkZXYtPmRldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHZyYzQxNzFfY2FyZF9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJCT0gdnJjNDE3MV9jYXJkX25hbWUsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwl9LAorCS5zdXNwZW5kCT0gdnJjNDE3MV9jYXJkX3N1c3BlbmQsCisJLnJlc3VtZQkJPSB2cmM0MTcxX2NhcmRfcmVzdW1lLAogfTsKIAogc3RhdGljIGludCBfX2RldmluaXQgdnJjNDE3MV9jYXJkX2luaXQodm9pZCkKIHsKIAlpbnQgcmV0dmFsOwogCi0JcmV0dmFsID0gZHJpdmVyX3JlZ2lzdGVyKCZ2cmM0MTcxX2NhcmRfZHJpdmVyKTsKKwlyZXR2YWwgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnZyYzQxNzFfY2FyZF9kcml2ZXIpOwogCWlmIChyZXR2YWwgPCAwKQogCQlyZXR1cm4gcmV0dmFsOwogCiAJcmV0dmFsID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZ2cmM0MTcxX2NhcmRfZGV2aWNlKTsKIAlpZiAocmV0dmFsIDwgMCkgewotCQlkcml2ZXJfdW5yZWdpc3RlcigmdnJjNDE3MV9jYXJkX2RyaXZlcik7CisJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ2cmM0MTcxX2NhcmRfZHJpdmVyKTsKIAkJcmV0dXJuIHJldHZhbDsKIAl9CiAKQEAgLTczNSwxMSArNzQ4LDEyIEBACiAJaWYgKHJldHZhbCA8IDApIHsKIAkJdnJjNDE3MV9yZW1vdmVfc29ja2V0cygpOwogCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcigmdnJjNDE3MV9jYXJkX2RldmljZSk7Ci0JCWRyaXZlcl91bnJlZ2lzdGVyKCZ2cmM0MTcxX2NhcmRfZHJpdmVyKTsKKwkJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnZyYzQxNzFfY2FyZF9kcml2ZXIpOwogCQlyZXR1cm4gcmV0dmFsOwogCX0KIAotCXByaW50ayhLRVJOX0lORk8gIiVzLCBjb25uZWN0ZWQgdG8gSVJRICVkXG4iLCB2cmM0MTcxX2NhcmRfZHJpdmVyLm5hbWUsIHZyYzQxNzFfaXJxKTsKKwlwcmludGsoS0VSTl9JTkZPICIlcywgY29ubmVjdGVkIHRvIElSUSAlZFxuIiwKKwkJdnJjNDE3MV9jYXJkX2RyaXZlci5kcml2ZXIubmFtZSwgdnJjNDE3MV9pcnEpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC03NDksNyArNzYzLDcgQEAKIAlmcmVlX2lycSh2cmM0MTcxX2lycSwgdnJjNDE3MV9zb2NrZXRzKTsKIAl2cmM0MTcxX3JlbW92ZV9zb2NrZXRzKCk7CiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoJnZyYzQxNzFfY2FyZF9kZXZpY2UpOwotCWRyaXZlcl91bnJlZ2lzdGVyKCZ2cmM0MTcxX2NhcmRfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdnJjNDE3MV9jYXJkX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KHZyYzQxNzFfY2FyZF9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L3NvbnktbGFwdG9wLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9zb255LWxhcHRvcC5jCmluZGV4IDUzNzk1OWQuLmJjODk5NmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L3NvbnktbGFwdG9wLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvc29ueS1sYXB0b3AuYwpAQCAtMTkxNywxMiArMTkxNyw3IEBACiAKIHN0YXRpYyBpbnQgc29ueXBpX21pc2NfZmFzeW5jKGludCBmZCwgc3RydWN0IGZpbGUgKmZpbHAsIGludCBvbikKIHsKLQlpbnQgcmV0dmFsOwotCi0JcmV0dmFsID0gZmFzeW5jX2hlbHBlcihmZCwgZmlscCwgb24sICZzb255cGlfY29tcGF0LmZpZm9fYXN5bmMpOwotCWlmIChyZXR2YWwgPCAwKQotCQlyZXR1cm4gcmV0dmFsOwotCXJldHVybiAwOworCXJldHVybiBmYXN5bmNfaGVscGVyKGZkLCBmaWxwLCBvbiwgJnNvbnlwaV9jb21wYXQuZmlmb19hc3luYyk7CiB9CiAKIHN0YXRpYyBpbnQgc29ueXBpX21pc2NfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmFwaWRpby9yaW8tZHJpdmVyLmMgYi9kcml2ZXJzL3JhcGlkaW8vcmlvLWRyaXZlci5jCmluZGV4IGFkZGI4N2MuLjMyMjJmYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmFwaWRpby9yaW8tZHJpdmVyLmMKKysrIGIvZHJpdmVycy9yYXBpZGlvL3Jpby1kcml2ZXIuYwpAQCAtMTkzLDcgKzE5Myw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlIHJpb19idXMgPSB7Ci0JLmJ1c19pZCA9ICJyYXBpZGlvIiwKKwkuaW5pdF9uYW1lID0gInJhcGlkaW8iLAogfTsKIAogc3RydWN0IGJ1c190eXBlIHJpb19idXNfdHlwZSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1hdDkxc2FtOS5jIGIvZHJpdmVycy9ydGMvcnRjLWF0OTFzYW05LmMKaW5kZXggZDVlNGU2My4uODZjNjFmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWF0OTFzYW05LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWF0OTFzYW05LmMKQEAgLTM1MSw3ICszNTEsNyBAQAogCS8qIHJlZ2lzdGVyIGlycSBoYW5kbGVyIGFmdGVyIHdlIGtub3cgd2hhdCBuYW1lIHdlJ2xsIHVzZSAqLwogCXJldCA9IHJlcXVlc3RfaXJxKEFUOTFfSURfU1lTLCBhdDkxX3J0Y19pbnRlcnJ1cHQsCiAJCQkJSVJRRl9ESVNBQkxFRCB8IElSUUZfU0hBUkVELAotCQkJCXJ0Yy0+cnRjZGV2LT5kZXYuYnVzX2lkLCBydGMpOworCQkJCWRldl9uYW1lKCZydGMtPnJ0Y2Rldi0+ZGV2KSwgcnRjKTsKIAlpZiAocmV0KSB7CiAJCWRldl9kYmcoJnBkZXYtPmRldiwgImNhbid0IHNoYXJlIElSUSAlZD9cbiIsIEFUOTFfSURfU1lTKTsKIAkJcnRjX2RldmljZV91bnJlZ2lzdGVyKHJ0Yy0+cnRjZGV2KTsKQEAgLTM2Niw3ICszNjYsNyBAQAogCiAJaWYgKGdwYnJfcmVhZGwocnRjKSA9PSAwKQogCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiJXM6IFNFVCBUSU1FIVxuIiwKLQkJCQlydGMtPnJ0Y2Rldi0+ZGV2LmJ1c19pZCk7CisJCQkJZGV2X25hbWUoJnJ0Yy0+cnRjZGV2LT5kZXYpKTsKIAogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtb21hcC5jIGIvZHJpdmVycy9ydGMvcnRjLW9tYXAuYwppbmRleCAyY2JlYjA3Li5iZDFjZThlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtb21hcC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1vbWFwLmMKQEAgLTM3NywxMyArMzc3LDEzIEBACiAKIAkvKiBoYW5kbGUgcGVyaW9kaWMgYW5kIGFsYXJtIGlycXMgKi8KIAlpZiAocmVxdWVzdF9pcnEob21hcF9ydGNfdGltZXIsIHJ0Y19pcnEsIElSUUZfRElTQUJMRUQsCi0JCQlydGMtPmRldi5idXNfaWQsIHJ0YykpIHsKKwkJCWRldl9uYW1lKCZydGMtPmRldiksIHJ0YykpIHsKIAkJcHJfZGVidWcoIiVzOiBSVEMgdGltZXIgaW50ZXJydXB0IElSUSVkIGFscmVhZHkgY2xhaW1lZFxuIiwKIAkJCXBkZXYtPm5hbWUsIG9tYXBfcnRjX3RpbWVyKTsKIAkJZ290byBmYWlsMDsKIAl9CiAJaWYgKHJlcXVlc3RfaXJxKG9tYXBfcnRjX2FsYXJtLCBydGNfaXJxLCBJUlFGX0RJU0FCTEVELAotCQkJcnRjLT5kZXYuYnVzX2lkLCBydGMpKSB7CisJCQlkZXZfbmFtZSgmcnRjLT5kZXYpLCBydGMpKSB7CiAJCXByX2RlYnVnKCIlczogUlRDIGFsYXJtIGludGVycnVwdCBJUlElZCBhbHJlYWR5IGNsYWltZWRcbiIsCiAJCQlwZGV2LT5uYW1lLCBvbWFwX3J0Y19hbGFybSk7CiAJCWdvdG8gZmFpbDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtc2guYyBiL2RyaXZlcnMvcnRjL3J0Yy1zaC5jCmluZGV4IDFjM2ZjNmIuLjQ4OThmN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1zaC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1zaC5jCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5jbHVkZSA8YXNtL3J0Yy5oPgogCiAjZGVmaW5lIERSVl9OQU1FCSJzaC1ydGMiCi0jZGVmaW5lIERSVl9WRVJTSU9OCSIwLjIuMCIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JIjAuMi4xIgogCiAjZGVmaW5lIFJUQ19SRUcocikJKChyKSAqIHJ0Y19yZWdfc2l6ZSkKIApAQCAtOTksNTYgKzk5LDUxIEBACiAJdW5zaWduZWQgc2hvcnQgcGVyaW9kaWNfZnJlcTsKIH07CiAKLXN0YXRpYyBpcnFyZXR1cm5fdCBzaF9ydGNfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3N0YXRpYyBpbnQgX19zaF9ydGNfaW50ZXJydXB0KHN0cnVjdCBzaF9ydGMgKnJ0YykKIHsKLQlzdHJ1Y3Qgc2hfcnRjICpydGMgPSBkZXZfaWQ7Ci0JdW5zaWduZWQgaW50IHRtcDsKLQotCXNwaW5fbG9jaygmcnRjLT5sb2NrKTsKKwl1bnNpZ25lZCBpbnQgdG1wLCBwZW5kaW5nOwogCiAJdG1wID0gcmVhZGIocnRjLT5yZWdiYXNlICsgUkNSMSk7CisJcGVuZGluZyA9IHRtcCAmIFJDUjFfQ0Y7CiAJdG1wICY9IH5SQ1IxX0NGOwogCXdyaXRlYih0bXAsIHJ0Yy0+cmVnYmFzZSArIFJDUjEpOwogCiAJLyogVXNlcnMgaGF2ZSByZXF1ZXN0ZWQgT25lIHggU2Vjb25kIElSUSAqLwotCWlmIChydGMtPnBlcmlvZGljX2ZyZXEgJiBQRl9PWFMpCisJaWYgKHBlbmRpbmcgJiYgcnRjLT5wZXJpb2RpY19mcmVxICYgUEZfT1hTKQogCQlydGNfdXBkYXRlX2lycShydGMtPnJ0Y19kZXYsIDEsIFJUQ19VRiB8IFJUQ19JUlFGKTsKIAotCXNwaW5fdW5sb2NrKCZydGMtPmxvY2spOwotCi0JcmV0dXJuIElSUV9IQU5ETEVEOworCXJldHVybiBwZW5kaW5nOwogfQogCi1zdGF0aWMgaXJxcmV0dXJuX3Qgc2hfcnRjX2FsYXJtKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3N0YXRpYyBpbnQgX19zaF9ydGNfYWxhcm0oc3RydWN0IHNoX3J0YyAqcnRjKQogewotCXN0cnVjdCBzaF9ydGMgKnJ0YyA9IGRldl9pZDsKLQl1bnNpZ25lZCBpbnQgdG1wOwotCi0Jc3Bpbl9sb2NrKCZydGMtPmxvY2spOworCXVuc2lnbmVkIGludCB0bXAsIHBlbmRpbmc7CiAKIAl0bXAgPSByZWFkYihydGMtPnJlZ2Jhc2UgKyBSQ1IxKTsKKwlwZW5kaW5nID0gdG1wICYgUkNSMV9BRjsKIAl0bXAgJj0gfihSQ1IxX0FGIHwgUkNSMV9BSUUpOwotCQl3cml0ZWIodG1wLCBydGMtPnJlZ2Jhc2UgKyBSQ1IxKTsKKwl3cml0ZWIodG1wLCBydGMtPnJlZ2Jhc2UgKyBSQ1IxKTsKIAotCXJ0Y191cGRhdGVfaXJxKHJ0Yy0+cnRjX2RldiwgMSwgUlRDX0FGIHwgUlRDX0lSUUYpOworCWlmIChwZW5kaW5nKQorCQlydGNfdXBkYXRlX2lycShydGMtPnJ0Y19kZXYsIDEsIFJUQ19BRiB8IFJUQ19JUlFGKTsKIAotCXNwaW5fdW5sb2NrKCZydGMtPmxvY2spOwotCi0JcmV0dXJuIElSUV9IQU5ETEVEOworCXJldHVybiBwZW5kaW5nOwogfQogCi1zdGF0aWMgaXJxcmV0dXJuX3Qgc2hfcnRjX3BlcmlvZGljKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3N0YXRpYyBpbnQgX19zaF9ydGNfcGVyaW9kaWMoc3RydWN0IHNoX3J0YyAqcnRjKQogewotCXN0cnVjdCBzaF9ydGMgKnJ0YyA9IGRldl9pZDsKIAlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjX2RldiA9IHJ0Yy0+cnRjX2RldjsKLQl1bnNpZ25lZCBpbnQgdG1wOwotCi0Jc3Bpbl9sb2NrKCZydGMtPmxvY2spOworCXN0cnVjdCBydGNfdGFzayAqaXJxX3Rhc2s7CisJdW5zaWduZWQgaW50IHRtcCwgcGVuZGluZzsKIAogCXRtcCA9IHJlYWRiKHJ0Yy0+cmVnYmFzZSArIFJDUjIpOworCXBlbmRpbmcgPSB0bXAgJiBSQ1IyX1BFRjsKIAl0bXAgJj0gflJDUjJfUEVGOwogCXdyaXRlYih0bXAsIHJ0Yy0+cmVnYmFzZSArIFJDUjIpOwogCisJaWYgKCFwZW5kaW5nKQorCQlyZXR1cm4gMDsKKwogCS8qIEhhbGYgcGVyaW9kIGVuYWJsZWQgdGhhbiBvbmUgc2tpcHBlZCBhbmQgdGhlIG5leHQgbm90aWZpZWQgKi8KIAlpZiAoKHJ0Yy0+cGVyaW9kaWNfZnJlcSAmIFBGX0hQKSAmJiAocnRjLT5wZXJpb2RpY19mcmVxICYgUEZfQ09VTlQpKQogCQlydGMtPnBlcmlvZGljX2ZyZXEgJj0gflBGX0NPVU5UOwpAQCAtMTU3LDE2ICsxNTIsNjUgQEAKIAkJCXJ0Yy0+cGVyaW9kaWNfZnJlcSB8PSBQRl9DT1VOVDsKIAkJaWYgKHJ0Yy0+cGVyaW9kaWNfZnJlcSAmIFBGX0tPVSkgewogCQkJc3Bpbl9sb2NrKCZydGNfZGV2LT5pcnFfdGFza19sb2NrKTsKLQkJCWlmIChydGNfZGV2LT5pcnFfdGFzaykKLQkJCQlydGNfZGV2LT5pcnFfdGFzay0+ZnVuYyhydGNfZGV2LT5pcnFfdGFzay0+cHJpdmF0ZV9kYXRhKTsKKwkJCWlycV90YXNrID0gcnRjX2Rldi0+aXJxX3Rhc2s7CisJCQlpZiAoaXJxX3Rhc2spCisJCQkJaXJxX3Rhc2stPmZ1bmMoaXJxX3Rhc2stPnByaXZhdGVfZGF0YSk7CiAJCQlzcGluX3VubG9jaygmcnRjX2Rldi0+aXJxX3Rhc2tfbG9jayk7CiAJCX0gZWxzZQogCQkJcnRjX3VwZGF0ZV9pcnEocnRjLT5ydGNfZGV2LCAxLCBSVENfUEYgfCBSVENfSVJRRik7CiAJfQogCisJcmV0dXJuIHBlbmRpbmc7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBzaF9ydGNfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3Qgc2hfcnRjICpydGMgPSBkZXZfaWQ7CisJaW50IHJldDsKKworCXNwaW5fbG9jaygmcnRjLT5sb2NrKTsKKwlyZXQgPSBfX3NoX3J0Y19pbnRlcnJ1cHQocnRjKTsKIAlzcGluX3VubG9jaygmcnRjLT5sb2NrKTsKIAotCXJldHVybiBJUlFfSEFORExFRDsKKwlyZXR1cm4gSVJRX1JFVFZBTChyZXQpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3Qgc2hfcnRjX2FsYXJtKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3Qgc2hfcnRjICpydGMgPSBkZXZfaWQ7CisJaW50IHJldDsKKworCXNwaW5fbG9jaygmcnRjLT5sb2NrKTsKKwlyZXQgPSBfX3NoX3J0Y19hbGFybShydGMpOworCXNwaW5fdW5sb2NrKCZydGMtPmxvY2spOworCisJcmV0dXJuIElSUV9SRVRWQUwocmV0KTsKK30KKworc3RhdGljIGlycXJldHVybl90IHNoX3J0Y19wZXJpb2RpYyhpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IHNoX3J0YyAqcnRjID0gZGV2X2lkOworCWludCByZXQ7CisKKwlzcGluX2xvY2soJnJ0Yy0+bG9jayk7CisJcmV0ID0gX19zaF9ydGNfcGVyaW9kaWMocnRjKTsKKwlzcGluX3VubG9jaygmcnRjLT5sb2NrKTsKKworCXJldHVybiBJUlFfUkVUVkFMKHJldCk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBzaF9ydGNfc2hhcmVkKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3Qgc2hfcnRjICpydGMgPSBkZXZfaWQ7CisJaW50IHJldDsKKworCXNwaW5fbG9jaygmcnRjLT5sb2NrKTsKKwlyZXQgPSBfX3NoX3J0Y19pbnRlcnJ1cHQocnRjKTsKKwlyZXQgfD0gX19zaF9ydGNfYWxhcm0ocnRjKTsKKwlyZXQgfD0gX19zaF9ydGNfcGVyaW9kaWMocnRjKTsKKwlzcGluX3VubG9jaygmcnRjLT5sb2NrKTsKKworCXJldHVybiBJUlFfUkVUVkFMKHJldCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzaF9ydGNfc2V0cGllKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGVuYWJsZSkKQEAgLTI3NSw2ICszMTksMjUgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIHNoX3J0Y19zZXRjaWUoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgZW5hYmxlKQoreworCXN0cnVjdCBzaF9ydGMgKnJ0YyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXVuc2lnbmVkIGludCB0bXA7CisKKwlzcGluX2xvY2tfaXJxKCZydGMtPmxvY2spOworCisJdG1wID0gcmVhZGIocnRjLT5yZWdiYXNlICsgUkNSMSk7CisKKwlpZiAoIWVuYWJsZSkKKwkJdG1wICY9IH5SQ1IxX0NJRTsKKwllbHNlCisJCXRtcCB8PSBSQ1IxX0NJRTsKKworCXdyaXRlYih0bXAsIHJ0Yy0+cmVnYmFzZSArIFJDUjEpOworCisJc3Bpbl91bmxvY2tfaXJxKCZydGMtPmxvY2spOworfQorCiBzdGF0aWMgaW50IHNoX3J0Y19pb2N0bChzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXN0cnVjdCBzaF9ydGMgKnJ0YyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwpAQCAtMjkxLDkgKzM1NCwxMSBAQAogCQlicmVhazsKIAljYXNlIFJUQ19VSUVfT0ZGOgogCQlydGMtPnBlcmlvZGljX2ZyZXEgJj0gflBGX09YUzsKKwkJc2hfcnRjX3NldGNpZShkZXYsIDApOwogCQlicmVhazsKIAljYXNlIFJUQ19VSUVfT046CiAJCXJ0Yy0+cGVyaW9kaWNfZnJlcSB8PSBQRl9PWFM7CisJCXNoX3J0Y19zZXRjaWUoZGV2LCAxKTsKIAkJYnJlYWs7CiAJY2FzZSBSVENfSVJRUF9SRUFEOgogCQlyZXQgPSBwdXRfdXNlcihydGMtPnJ0Y19kZXYtPmlycV9mcmVxLApAQCAtMzU2LDE4ICs0MjEsMTcgQEAKIAkJdG0tPnRtX3NlYy0tOwogI2VuZGlmCiAKKwkvKiBvbmx5IGtlZXAgdGhlIGNhcnJ5IGludGVycnVwdCBlbmFibGVkIGlmIFVJRSBpcyBvbiAqLworCWlmICghKHJ0Yy0+cGVyaW9kaWNfZnJlcSAmIFBGX09YUykpCisJCXNoX3J0Y19zZXRjaWUoZGV2LCAwKTsKKwogCWRldl9kYmcoZGV2LCAiJXM6IHRtIGlzIHNlY3M9JWQsIG1pbnM9JWQsIGhvdXJzPSVkLCAiCiAJCSJtZGF5PSVkLCBtb249JWQsIHllYXI9JWQsIHdkYXk9JWRcbiIsCiAJCV9fZnVuY19fLAogCQl0bS0+dG1fc2VjLCB0bS0+dG1fbWluLCB0bS0+dG1faG91ciwKIAkJdG0tPnRtX21kYXksIHRtLT50bV9tb24gKyAxLCB0bS0+dG1feWVhciwgdG0tPnRtX3dkYXkpOwogCi0JaWYgKHJ0Y192YWxpZF90bSh0bSkgPCAwKSB7Ci0JCWRldl9lcnIoZGV2LCAiaW52YWxpZCBkYXRlXG4iKTsKLQkJcnRjX3RpbWVfdG9fdG0oMCwgdG0pOwotCX0KLQotCXJldHVybiAwOworCXJldHVybiBydGNfdmFsaWRfdG0odG0pOwogfQogCiBzdGF0aWMgaW50IHNoX3J0Y19zZXRfdGltZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfdGltZSAqdG0pCkBAIC01NzIsNyArNjM2LDcgQEAKIHsKIAlzdHJ1Y3Qgc2hfcnRjICpydGM7CiAJc3RydWN0IHJlc291cmNlICpyZXM7Ci0JdW5zaWduZWQgaW50IHRtcDsKKwlzdHJ1Y3QgcnRjX3RpbWUgcjsKIAlpbnQgcmV0OwogCiAJcnRjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNoX3J0YyksIEdGUF9LRVJORUwpOwpAQCAtNTg1LDI2ICs2NDksMTIgQEAKIAlyZXQgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwogCWlmICh1bmxpa2VseShyZXQgPD0gMCkpIHsKIAkJcmV0ID0gLUVOT0VOVDsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiTm8gSVJRIGZvciBwZXJpb2RcbiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJObyBJUlEgcmVzb3VyY2VcbiIpOwogCQlnb3RvIGVycl9iYWRyZXM7CiAJfQogCXJ0Yy0+cGVyaW9kaWNfaXJxID0gcmV0OwotCi0JcmV0ID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAxKTsKLQlpZiAodW5saWtlbHkocmV0IDw9IDApKSB7Ci0JCXJldCA9IC1FTk9FTlQ7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIk5vIElSUSBmb3IgY2FycnlcbiIpOwotCQlnb3RvIGVycl9iYWRyZXM7Ci0JfQotCXJ0Yy0+Y2FycnlfaXJxID0gcmV0OwotCi0JcmV0ID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAyKTsKLQlpZiAodW5saWtlbHkocmV0IDw9IDApKSB7Ci0JCXJldCA9IC1FTk9FTlQ7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIk5vIElSUSBmb3IgYWxhcm1cbiIpOwotCQlnb3RvIGVycl9iYWRyZXM7Ci0JfQotCXJ0Yy0+YWxhcm1faXJxID0gcmV0OworCXJ0Yy0+Y2FycnlfaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAxKTsKKwlydGMtPmFsYXJtX2lycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMik7CiAKIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JTywgMCk7CiAJaWYgKHVubGlrZWx5KHJlcyA9PSBOVUxMKSkgewpAQCAtNjQ2LDQ3ICs2OTYsNjYgQEAKIAl9CiAKIAlydGMtPnJ0Y19kZXYtPm1heF91c2VyX2ZyZXEgPSAyNTY7Ci0JcnRjLT5ydGNfZGV2LT5pcnFfZnJlcSA9IDE7Ci0JcnRjLT5wZXJpb2RpY19mcmVxID0gMHg2MDsKIAogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHJ0Yyk7CiAKLQkvKiByZWdpc3RlciBwZXJpb2RpYy9jYXJyeS9hbGFybSBpcnFzICovCi0JcmV0ID0gcmVxdWVzdF9pcnEocnRjLT5wZXJpb2RpY19pcnEsIHNoX3J0Y19wZXJpb2RpYywgSVJRRl9ESVNBQkxFRCwKLQkJCSAgInNoLXJ0YyBwZXJpb2QiLCBydGMpOwotCWlmICh1bmxpa2VseShyZXQpKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwKLQkJCSJyZXF1ZXN0IHBlcmlvZCBJUlEgZmFpbGVkIHdpdGggJWQsIElSUSAlZFxuIiwgcmV0LAotCQkJcnRjLT5wZXJpb2RpY19pcnEpOwotCQlnb3RvIGVycl91bm1hcDsKKwlpZiAocnRjLT5jYXJyeV9pcnEgPD0gMCkgeworCQkvKiByZWdpc3RlciBzaGFyZWQgcGVyaW9kaWMvY2FycnkvYWxhcm0gaXJxICovCisJCXJldCA9IHJlcXVlc3RfaXJxKHJ0Yy0+cGVyaW9kaWNfaXJxLCBzaF9ydGNfc2hhcmVkLAorCQkJCSAgSVJRRl9ESVNBQkxFRCwgInNoLXJ0YyIsIHJ0Yyk7CisJCWlmICh1bmxpa2VseShyZXQpKSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkJInJlcXVlc3QgSVJRIGZhaWxlZCB3aXRoICVkLCBJUlEgJWRcbiIsIHJldCwKKwkJCQlydGMtPnBlcmlvZGljX2lycSk7CisJCQlnb3RvIGVycl91bm1hcDsKKwkJfQorCX0gZWxzZSB7CisJCS8qIHJlZ2lzdGVyIHBlcmlvZGljL2NhcnJ5L2FsYXJtIGlycXMgKi8KKwkJcmV0ID0gcmVxdWVzdF9pcnEocnRjLT5wZXJpb2RpY19pcnEsIHNoX3J0Y19wZXJpb2RpYywKKwkJCQkgIElSUUZfRElTQUJMRUQsICJzaC1ydGMgcGVyaW9kIiwgcnRjKTsKKwkJaWYgKHVubGlrZWx5KHJldCkpIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCQkicmVxdWVzdCBwZXJpb2QgSVJRIGZhaWxlZCB3aXRoICVkLCBJUlEgJWRcbiIsCisJCQkJcmV0LCBydGMtPnBlcmlvZGljX2lycSk7CisJCQlnb3RvIGVycl91bm1hcDsKKwkJfQorCisJCXJldCA9IHJlcXVlc3RfaXJxKHJ0Yy0+Y2FycnlfaXJxLCBzaF9ydGNfaW50ZXJydXB0LAorCQkJCSAgSVJRRl9ESVNBQkxFRCwgInNoLXJ0YyBjYXJyeSIsIHJ0Yyk7CisJCWlmICh1bmxpa2VseShyZXQpKSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkJInJlcXVlc3QgY2FycnkgSVJRIGZhaWxlZCB3aXRoICVkLCBJUlEgJWRcbiIsCisJCQkJcmV0LCBydGMtPmNhcnJ5X2lycSk7CisJCQlmcmVlX2lycShydGMtPnBlcmlvZGljX2lycSwgcnRjKTsKKwkJCWdvdG8gZXJyX3VubWFwOworCQl9CisKKwkJcmV0ID0gcmVxdWVzdF9pcnEocnRjLT5hbGFybV9pcnEsIHNoX3J0Y19hbGFybSwKKwkJCQkgIElSUUZfRElTQUJMRUQsICJzaC1ydGMgYWxhcm0iLCBydGMpOworCQlpZiAodW5saWtlbHkocmV0KSkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJCSJyZXF1ZXN0IGFsYXJtIElSUSBmYWlsZWQgd2l0aCAlZCwgSVJRICVkXG4iLAorCQkJCXJldCwgcnRjLT5hbGFybV9pcnEpOworCQkJZnJlZV9pcnEocnRjLT5jYXJyeV9pcnEsIHJ0Yyk7CisJCQlmcmVlX2lycShydGMtPnBlcmlvZGljX2lycSwgcnRjKTsKKwkJCWdvdG8gZXJyX3VubWFwOworCQl9CiAJfQogCi0JcmV0ID0gcmVxdWVzdF9pcnEocnRjLT5jYXJyeV9pcnEsIHNoX3J0Y19pbnRlcnJ1cHQsIElSUUZfRElTQUJMRUQsCi0JCQkgICJzaC1ydGMgY2FycnkiLCBydGMpOwotCWlmICh1bmxpa2VseShyZXQpKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwKLQkJCSJyZXF1ZXN0IGNhcnJ5IElSUSBmYWlsZWQgd2l0aCAlZCwgSVJRICVkXG4iLCByZXQsCi0JCQlydGMtPmNhcnJ5X2lycSk7Ci0JCWZyZWVfaXJxKHJ0Yy0+cGVyaW9kaWNfaXJxLCBydGMpOwotCQlnb3RvIGVycl91bm1hcDsKKwkvKiBldmVyeXRoaW5nIGRpc2FibGVkIGJ5IGRlZmF1bHQgKi8KKwlydGMtPnBlcmlvZGljX2ZyZXEgPSAwOworCXJ0Yy0+cnRjX2Rldi0+aXJxX2ZyZXEgPSAwOworCXNoX3J0Y19zZXRwaWUoJnBkZXYtPmRldiwgMCk7CisJc2hfcnRjX3NldGFpZSgmcGRldi0+ZGV2LCAwKTsKKwlzaF9ydGNfc2V0Y2llKCZwZGV2LT5kZXYsIDApOworCisJLyogcmVzZXQgcnRjIHRvIGVwb2NoIDAgaWYgdGltZSBpcyBpbnZhbGlkICovCisJaWYgKHJ0Y19yZWFkX3RpbWUocnRjLT5ydGNfZGV2LCAmcikgPCAwKSB7CisJCXJ0Y190aW1lX3RvX3RtKDAsICZyKTsKKwkJcnRjX3NldF90aW1lKHJ0Yy0+cnRjX2RldiwgJnIpOwogCX0KIAotCXJldCA9IHJlcXVlc3RfaXJxKHJ0Yy0+YWxhcm1faXJxLCBzaF9ydGNfYWxhcm0sIElSUUZfRElTQUJMRUQsCi0JCQkgICJzaC1ydGMgYWxhcm0iLCBydGMpOwotCWlmICh1bmxpa2VseShyZXQpKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwKLQkJCSJyZXF1ZXN0IGFsYXJtIElSUSBmYWlsZWQgd2l0aCAlZCwgSVJRICVkXG4iLCByZXQsCi0JCQlydGMtPmFsYXJtX2lycSk7Ci0JCWZyZWVfaXJxKHJ0Yy0+Y2FycnlfaXJxLCBydGMpOwotCQlmcmVlX2lycShydGMtPnBlcmlvZGljX2lycSwgcnRjKTsKLQkJZ290byBlcnJfdW5tYXA7Ci0JfQotCi0JdG1wID0gcmVhZGIocnRjLT5yZWdiYXNlICsgUkNSMSk7Ci0JdG1wICY9IH5SQ1IxX0NGOwotCXRtcCB8PSBSQ1IxX0NJRTsKLQl3cml0ZWIodG1wLCBydGMtPnJlZ2Jhc2UgKyBSQ1IxKTsKLQorCWRldmljZV9pbml0X3dha2V1cCgmcGRldi0+ZGV2LCAxKTsKIAlyZXR1cm4gMDsKIAogZXJyX3VubWFwOgpAQCAtNzA4LDEwICs3NzcsMTMgQEAKIAogCXNoX3J0Y19zZXRwaWUoJnBkZXYtPmRldiwgMCk7CiAJc2hfcnRjX3NldGFpZSgmcGRldi0+ZGV2LCAwKTsKKwlzaF9ydGNfc2V0Y2llKCZwZGV2LT5kZXYsIDApOwogCi0JZnJlZV9pcnEocnRjLT5jYXJyeV9pcnEsIHJ0Yyk7CiAJZnJlZV9pcnEocnRjLT5wZXJpb2RpY19pcnEsIHJ0Yyk7Ci0JZnJlZV9pcnEocnRjLT5hbGFybV9pcnEsIHJ0Yyk7CisJaWYgKHJ0Yy0+Y2FycnlfaXJxID4gMCkgeworCQlmcmVlX2lycShydGMtPmNhcnJ5X2lycSwgcnRjKTsKKwkJZnJlZV9pcnEocnRjLT5hbGFybV9pcnEsIHJ0Yyk7CisJfQogCiAJcmVsZWFzZV9yZXNvdXJjZShydGMtPnJlcyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy10d2w0MDMwLmMgYi9kcml2ZXJzL3J0Yy9ydGMtdHdsNDAzMC5jCmluZGV4IGFkMzVmNzYuLmE2MzQxZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy10d2w0MDMwLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXR3bDQwMzAuYwpAQCAtNDI2LDcgKzQyNiw3IEBACiAKIAlyZXQgPSByZXF1ZXN0X2lycShpcnEsIHR3bDQwMzBfcnRjX2ludGVycnVwdCwKIAkJCQlJUlFGX1RSSUdHRVJfUklTSU5HLAotCQkJCXJ0Yy0+ZGV2LmJ1c19pZCwgcnRjKTsKKwkJCQlkZXZfbmFtZSgmcnRjLT5kZXYpLCBydGMpOwogCWlmIChyZXQgPCAwKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIklSUSBpcyBub3QgZnJlZS5cbiIpOwogCQlnb3RvIG91dDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvTWFrZWZpbGUgYi9kcml2ZXJzL3MzOTAvTWFrZWZpbGUKaW5kZXggZDBlYWU1OS4uOTViY2NmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvczM5MC9NYWtlZmlsZQpAQCAtMiw5ICsyLDYgQEAKICMgTWFrZWZpbGUgZm9yIHRoZSBTLzM5MCBzcGVjaWZpYyBkZXZpY2UgZHJpdmVycwogIwogCi1DRkxBR1Nfc3lzaW5mby5vICs9IC1JaW5jbHVkZS9tYXRoLWVtdSAtSWFyY2gvczM5MC9tYXRoLWVtdSAtdwotCi1vYmoteSArPSBzMzkwbWFjaC5vIHN5c2luZm8ubwogb2JqLXkgKz0gY2lvLyBibG9jay8gY2hhci8gY3J5cHRvLyBuZXQvIHNjc2kvIGt2bS8KIAogZHJpdmVycy15ICs9IGRyaXZlcnMvczM5MC9idWlsdC1pbi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYwppbmRleCAwOGMyM2E5Li4yZmQ2NGU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMKQEAgLTksNiArOSw5IEBACiAgKgogICovCiAKKyNkZWZpbmUgS01TR19DT01QT05FTlQgImRhc2QiCisjZGVmaW5lIHByX2ZtdChmbXQpIEtNU0dfQ09NUE9ORU5UICI6ICIgZm10CisKICNpbmNsdWRlIDxsaW51eC9rbW9kLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgpAQCAtMjIsNiArMjUsNyBAQAogI2luY2x1ZGUgPGFzbS9lYmNkaWMuaD4KICNpbmNsdWRlIDxhc20vaWRhbHMuaD4KICNpbmNsdWRlIDxhc20vdG9kY2xrLmg+CisjaW5jbHVkZSA8YXNtL2l0Y3cuaD4KIAogLyogVGhpcyBpcyB1Z2x5Li4uICovCiAjZGVmaW5lIFBSSU5US19IRUFERVIgImRhc2Q6IgpAQCAtMjIxLDcgKzIyNSw3IEBACiAJCQlyZXR1cm4gcmM7CiAJfQogCS8qIHJlZ2lzdGVyICdkZXZpY2UnIGRlYnVnIGFyZWEsIHVzZWQgZm9yIGFsbCBEQkZfREVWX1hYWCBjYWxscyAqLwotCWRldmljZS0+ZGVidWdfYXJlYSA9IGRlYnVnX3JlZ2lzdGVyKGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksIDEsIDEsCisJZGV2aWNlLT5kZWJ1Z19hcmVhID0gZGVidWdfcmVnaXN0ZXIoZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwgNCwgMSwKIAkJCQkJICAgIDggKiBzaXplb2YobG9uZykpOwogCWRlYnVnX3JlZ2lzdGVyX3ZpZXcoZGV2aWNlLT5kZWJ1Z19hcmVhLCAmZGVidWdfc3ByaW50Zl92aWV3KTsKIAlkZWJ1Z19zZXRfbGV2ZWwoZGV2aWNlLT5kZWJ1Z19hcmVhLCBEQkZfV0FSTklORyk7CkBAIC03NjIsNyArNzY2LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJZGV2aWNlID0gY3FyLT5zdGFydGRldjsKIAlpZiAoc3RybmNtcCgoY2hhciAqKSAmY3FyLT5tYWdpYywgZGV2aWNlLT5kaXNjaXBsaW5lLT5lYmNuYW1lLCA0KSkgewotCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwKKwkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLAogCQkJICAgICIgZGFzZF9jY3dfcmVxIDB4JTA4eCBtYWdpYyBkb2Vzbid0IG1hdGNoIgogCQkJICAgICIgZGlzY2lwbGluZSAweCUwOHgiLAogCQkJICAgIGNxci0+bWFnaWMsCkBAIC03ODIsNiArNzg2LDcgQEAKIHsKIAlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZTsKIAlpbnQgcmV0cmllcywgcmM7CisJY2hhciBlcnJvcnN0cmluZ1tFUlJPUkxFTkdUSF07CiAKIAkvKiBDaGVjayB0aGUgY3FyICovCiAJcmMgPSBkYXNkX2NoZWNrX2NxcihjcXIpOwpAQCAtODE1LDEwICs4MjAsMTAgQEAKIAkJCQkgICAgICAiZGV2aWNlIGJ1c3ksIHJldHJ5IGxhdGVyIik7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsCi0JCQkJICAgICJsaW5lICVkIHVua25vd24gUkM9JWQsIHBsZWFzZSAiCi0JCQkJICAgICJyZXBvcnQgdG8gbGludXgzOTBAZGUuaWJtLmNvbSIsCi0JCQkJICAgIF9fTElORV9fLCByYyk7CisJCQkvKiBpbnRlcm5hbCBlcnJvciAxMCAtIHVua25vd24gcmMqLworCQkJc25wcmludGYoZXJyb3JzdHJpbmcsIEVSUk9STEVOR1RILCAiMTAgJWQiLCByYyk7CisJCQlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwgIkFuIGVycm9yIG9jY3VycmVkIGluIHRoZSAiCisJCQkJIkRBU0QgZGV2aWNlIGRyaXZlciwgcmVhc29uPSVzXG4iLCBlcnJvcnN0cmluZyk7CiAJCQlCVUcoKTsKIAkJCWJyZWFrOwogCQl9CkBAIC04MzYsNiArODQxLDcgQEAKIHsKIAlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZTsKIAlpbnQgcmM7CisJY2hhciBlcnJvcnN0cmluZ1tFUlJPUkxFTkdUSF07CiAKIAkvKiBDaGVjayB0aGUgY3FyICovCiAJcmMgPSBkYXNkX2NoZWNrX2NxcihjcXIpOwpAQCAtODQzLDE3ICs4NDksMjMgQEAKIAkJcmV0dXJuIHJjOwogCWRldmljZSA9IChzdHJ1Y3QgZGFzZF9kZXZpY2UgKikgY3FyLT5zdGFydGRldjsKIAlpZiAoY3FyLT5yZXRyaWVzIDwgMCkgewotCQlERVZfTUVTU0FHRShLRVJOX0RFQlVHLCBkZXZpY2UsCi0JCQkgICAgInN0YXJ0X0lPOiByZXF1ZXN0ICVwICglMDJ4LyVpKSAtIG5vIHJldHJ5IGxlZnQuIiwKLQkJCSAgICBjcXIsIGNxci0+c3RhdHVzLCBjcXItPnJldHJpZXMpOworCQkvKiBpbnRlcm5hbCBlcnJvciAxNCAtIHN0YXJ0X0lPIHJ1biBvdXQgb2YgcmV0cmllcyAqLworCQlzcHJpbnRmKGVycm9yc3RyaW5nLCAiMTQgJXAiLCBjcXIpOworCQlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwgIkFuIGVycm9yIG9jY3VycmVkIGluIHRoZSBEQVNEICIKKwkJCSJkZXZpY2UgZHJpdmVyLCByZWFzb249JXNcbiIsIGVycm9yc3RyaW5nKTsKIAkJY3FyLT5zdGF0dXMgPSBEQVNEX0NRUl9FUlJPUjsKIAkJcmV0dXJuIC1FSU87CiAJfQogCWNxci0+c3RhcnRjbGsgPSBnZXRfY2xvY2soKTsKIAljcXItPnN0YXJ0dGltZSA9IGppZmZpZXM7CiAJY3FyLT5yZXRyaWVzLS07Ci0JcmMgPSBjY3dfZGV2aWNlX3N0YXJ0KGRldmljZS0+Y2RldiwgY3FyLT5jcGFkZHIsIChsb25nKSBjcXIsCi0JCQkgICAgICBjcXItPmxwbSwgMCk7CisJaWYgKGNxci0+Y3Btb2RlID09IDEpIHsKKwkJcmMgPSBjY3dfZGV2aWNlX3RtX3N0YXJ0KGRldmljZS0+Y2RldiwgY3FyLT5jcGFkZHIsCisJCQkJCSAobG9uZykgY3FyLCBjcXItPmxwbSk7CisJfSBlbHNlIHsKKwkJcmMgPSBjY3dfZGV2aWNlX3N0YXJ0KGRldmljZS0+Y2RldiwgY3FyLT5jcGFkZHIsCisJCQkJICAgICAgKGxvbmcpIGNxciwgY3FyLT5scG0sIDApOworCX0KIAlzd2l0Y2ggKHJjKSB7CiAJY2FzZSAwOgogCQljcXItPnN0YXR1cyA9IERBU0RfQ1FSX0lOX0lPOwpAQCAtODYyLDExICs4NzQsMTEgQEAKIAkJCSAgICAgIGNxcik7CiAJCWJyZWFrOwogCWNhc2UgLUVCVVNZOgotCQlEQkZfREVWX0VWRU5UKERCRl9FUlIsIGRldmljZSwgIiVzIiwKKwkJREJGX0RFVl9FVkVOVChEQkZfREVCVUcsIGRldmljZSwgIiVzIiwKIAkJCSAgICAgICJzdGFydF9JTzogZGV2aWNlIGJ1c3ksIHJldHJ5IGxhdGVyIik7CiAJCWJyZWFrOwogCWNhc2UgLUVUSU1FRE9VVDoKLQkJREJGX0RFVl9FVkVOVChEQkZfRVJSLCBkZXZpY2UsICIlcyIsCisJCURCRl9ERVZfRVZFTlQoREJGX0RFQlVHLCBkZXZpY2UsICIlcyIsCiAJCQkgICAgICAic3RhcnRfSU86IHJlcXVlc3QgdGltZW91dCwgcmV0cnkgbGF0ZXIiKTsKIAkJYnJlYWs7CiAJY2FzZSAtRUFDQ0VTOgpAQCAtODc2LDE5ICs4ODgsMjQgQEAKIAkJICogRG8gYSByZXRyeSB3aXRoIGFsbCBhdmFpbGFibGUgcGF0aGVzLgogCQkgKi8KIAkJY3FyLT5scG0gPSBMUE1fQU5ZUEFUSDsKLQkJREJGX0RFVl9FVkVOVChEQkZfRVJSLCBkZXZpY2UsICIlcyIsCisJCURCRl9ERVZfRVZFTlQoREJGX0RFQlVHLCBkZXZpY2UsICIlcyIsCiAJCQkgICAgICAic3RhcnRfSU86IHNlbGVjdGVkIHBhdGhlcyBnb25lLCIKIAkJCSAgICAgICIgcmV0cnkgb24gYWxsIHBhdGhlcyIpOwogCQlicmVhazsKIAljYXNlIC1FTk9ERVY6CisJCURCRl9ERVZfRVZFTlQoREJGX0RFQlVHLCBkZXZpY2UsICIlcyIsCisJCQkgICAgICAic3RhcnRfSU86IC1FTk9ERVYgZGV2aWNlIGdvbmUsIHJldHJ5Iik7CisJCWJyZWFrOwogCWNhc2UgLUVJTzoKLQkJREJGX0RFVl9FVkVOVChEQkZfRVJSLCBkZXZpY2UsICIlcyIsCi0JCQkgICAgICAic3RhcnRfSU86IGRldmljZSBnb25lLCByZXRyeSIpOworCQlEQkZfREVWX0VWRU5UKERCRl9ERUJVRywgZGV2aWNlLCAiJXMiLAorCQkJICAgICAgInN0YXJ0X0lPOiAtRUlPIGRldmljZSBnb25lLCByZXRyeSIpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlERVZfTUVTU0FHRShLRVJOX0VSUiwgZGV2aWNlLAotCQkJICAgICJsaW5lICVkIHVua25vd24gUkM9JWQsIHBsZWFzZSByZXBvcnQiCi0JCQkgICAgIiB0byBsaW51eDM5MEBkZS5pYm0uY29tIiwgX19MSU5FX18sIHJjKTsKKwkJLyogaW50ZXJuYWwgZXJyb3IgMTEgLSB1bmtub3duIHJjICovCisJCXNucHJpbnRmKGVycm9yc3RyaW5nLCBFUlJPUkxFTkdUSCwgIjExICVkIiwgcmMpOworCQlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCSJBbiBlcnJvciBvY2N1cnJlZCBpbiB0aGUgREFTRCBkZXZpY2UgZHJpdmVyLCAiCisJCQkicmVhc29uPSVzXG4iLCBlcnJvcnN0cmluZyk7CiAJCUJVRygpOwogCQlicmVhazsKIAl9CkBAIC05NDUsNyArOTYyLDcgQEAKIAkJcmV0dXJuOwogCWNxciA9IChzdHJ1Y3QgZGFzZF9jY3dfcmVxICopIGludHBhcm07CiAJaWYgKGNxci0+c3RhdHVzICE9IERBU0RfQ1FSX0lOX0lPKSB7Ci0JCU1FU1NBR0UoS0VSTl9ERUJVRywKKwkJREJGX0VWRU5UKERCRl9ERUJVRywKIAkJCSJpbnZhbGlkIHN0YXR1cyBpbiBoYW5kbGVfa2lsbGVkX3JlcXVlc3Q6ICIKIAkJCSJidXNfaWQgJXMsIHN0YXR1cyAlMDJ4IiwKIAkJCWRldl9uYW1lKCZjZGV2LT5kZXYpLCBjcXItPnN0YXR1cyk7CkBAIC05NTYsOCArOTczLDggQEAKIAlpZiAoZGV2aWNlID09IE5VTEwgfHwKIAkgICAgZGV2aWNlICE9IGRhc2RfZGV2aWNlX2Zyb21fY2Rldl9sb2NrZWQoY2RldikgfHwKIAkgICAgc3RybmNtcChkZXZpY2UtPmRpc2NpcGxpbmUtPmViY25hbWUsIChjaGFyICopICZjcXItPm1hZ2ljLCA0KSkgewotCQlNRVNTQUdFKEtFUk5fREVCVUcsICJpbnZhbGlkIGRldmljZSBpbiByZXF1ZXN0OiBidXNfaWQgJXMiLAotCQkJZGV2X25hbWUoJmNkZXYtPmRldikpOworCQlEQkZfREVWX0VWRU5UKERCRl9ERUJVRywgZGV2aWNlLCAiaW52YWxpZCBkZXZpY2UgaW4gcmVxdWVzdDogIgorCQkJICAgICAgImJ1c19pZCAlcyIsIGRldl9uYW1lKCZjZGV2LT5kZXYpKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtOTk2LDExICsxMDEzLDExIEBACiAJCWNhc2UgLUVJTzoKIAkJCWJyZWFrOwogCQljYXNlIC1FVElNRURPVVQ6Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HIiVzKCVzKTogcmVxdWVzdCB0aW1lZCBvdXRcbiIsCisJCQlEQkZfRVZFTlQoREJGX1dBUk5JTkcsICIlcyglcyk6IHJlcXVlc3QgdGltZWQgb3V0XG4iLAogCQkJICAgICAgIF9fZnVuY19fLCBkZXZfbmFtZSgmY2Rldi0+ZGV2KSk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCXByaW50ayhLRVJOX1dBUk5JTkciJXMoJXMpOiB1bmtub3duIGVycm9yICVsZFxuIiwKKwkJCURCRl9FVkVOVChEQkZfV0FSTklORywgIiVzKCVzKTogdW5rbm93biBlcnJvciAlbGRcbiIsCiAJCQkgICAgICAgX19mdW5jX18sIGRldl9uYW1lKCZjZGV2LT5kZXYpLCBQVFJfRVJSKGlyYikpOwogCQl9CiAJCWRhc2RfaGFuZGxlX2tpbGxlZF9yZXF1ZXN0KGNkZXYsIGludHBhcm0pOwpAQCAtMTAwOSwxNSArMTAyNiwxMSBAQAogCiAJbm93ID0gZ2V0X2Nsb2NrKCk7CiAKLQlEQkZfRVZFTlQoREJGX0VSUiwgIkludGVycnVwdDogYnVzX2lkICVzIENTL0RTICUwNHggaXAgJTA4eCIsCi0JCSAgZGV2X25hbWUoJmNkZXYtPmRldiksICgoaXJiLT5zY3N3LmNtZC5jc3RhdCA8PCA4KSB8Ci0JCSAgaXJiLT5zY3N3LmNtZC5kc3RhdCksICh1bnNpZ25lZCBpbnQpIGludHBhcm0pOwotCiAJLyogY2hlY2sgZm9yIHVuc29saWNpdGVkIGludGVycnVwdHMgKi8KIAljcXIgPSAoc3RydWN0IGRhc2RfY2N3X3JlcSAqKSBpbnRwYXJtOwotCWlmICghY3FyIHx8ICgoaXJiLT5zY3N3LmNtZC5jYyA9PSAxKSAmJgotCQkgICAgIChpcmItPnNjc3cuY21kLmZjdGwgJiBTQ1NXX0ZDVExfU1RBUlRfRlVOQykgJiYKLQkJICAgICAoaXJiLT5zY3N3LmNtZC5zdGN0bCAmIFNDU1dfU1RDVExfU1RBVFVTX1BFTkQpKSkgeworCWlmICghY3FyIHx8ICgoc2Nzd19jYygmaXJiLT5zY3N3KSA9PSAxKSAmJgorCQkgICAgIChzY3N3X2ZjdGwoJmlyYi0+c2NzdykgJiBTQ1NXX0ZDVExfU1RBUlRfRlVOQykgJiYKKwkJICAgICAoc2Nzd19zdGN0bCgmaXJiLT5zY3N3KSAmIFNDU1dfU1RDVExfU1RBVFVTX1BFTkQpKSkgewogCQlpZiAoY3FyICYmIGNxci0+c3RhdHVzID09IERBU0RfQ1FSX0lOX0lPKQogCQkJY3FyLT5zdGF0dXMgPSBEQVNEX0NRUl9RVUVVRUQ7CiAJCWRldmljZSA9IGRhc2RfZGV2aWNlX2Zyb21fY2Rldl9sb2NrZWQoY2Rldik7CkBAIC0xMDMzLDE0ICsxMDQ2LDE0IEBACiAJZGV2aWNlID0gKHN0cnVjdCBkYXNkX2RldmljZSAqKSBjcXItPnN0YXJ0ZGV2OwogCWlmICghZGV2aWNlIHx8CiAJICAgIHN0cm5jbXAoZGV2aWNlLT5kaXNjaXBsaW5lLT5lYmNuYW1lLCAoY2hhciAqKSAmY3FyLT5tYWdpYywgNCkpIHsKLQkJTUVTU0FHRShLRVJOX0RFQlVHLCAiaW52YWxpZCBkZXZpY2UgaW4gcmVxdWVzdDogYnVzX2lkICVzIiwKLQkJCWRldl9uYW1lKCZjZGV2LT5kZXYpKTsKKwkJREJGX0RFVl9FVkVOVChEQkZfREVCVUcsIGRldmljZSwgImludmFsaWQgZGV2aWNlIGluIHJlcXVlc3Q6ICIKKwkJCSAgICAgICJidXNfaWQgJXMiLCBkZXZfbmFtZSgmY2Rldi0+ZGV2KSk7CiAJCXJldHVybjsKIAl9CiAKIAkvKiBDaGVjayBmb3IgY2xlYXIgcGVuZGluZyAqLwogCWlmIChjcXItPnN0YXR1cyA9PSBEQVNEX0NRUl9DTEVBUl9QRU5ESU5HICYmCi0JICAgIGlyYi0+c2Nzdy5jbWQuZmN0bCAmIFNDU1dfRkNUTF9DTEVBUl9GVU5DKSB7CisJICAgIHNjc3dfZmN0bCgmaXJiLT5zY3N3KSAmIFNDU1dfRkNUTF9DTEVBUl9GVU5DKSB7CiAJCWNxci0+c3RhdHVzID0gREFTRF9DUVJfQ0xFQVJFRDsKIAkJZGFzZF9kZXZpY2VfY2xlYXJfdGltZXIoZGV2aWNlKTsKIAkJd2FrZV91cCgmZGFzZF9mbHVzaF93cSk7CkBAIC0xMDQ4LDE5ICsxMDYxLDE3IEBACiAJCXJldHVybjsKIAl9CiAKLSAJLyogY2hlY2sgc3RhdHVzIC0gdGhlIHJlcXVlc3QgbWlnaHQgaGF2ZSBiZWVuIGtpbGxlZCBieSBkeW4gZGV0YWNoICovCisJLyogY2hlY2sgc3RhdHVzIC0gdGhlIHJlcXVlc3QgbWlnaHQgaGF2ZSBiZWVuIGtpbGxlZCBieSBkeW4gZGV0YWNoICovCiAJaWYgKGNxci0+c3RhdHVzICE9IERBU0RfQ1FSX0lOX0lPKSB7Ci0JCU1FU1NBR0UoS0VSTl9ERUJVRywKLQkJCSJpbnZhbGlkIHN0YXR1czogYnVzX2lkICVzLCBzdGF0dXMgJTAyeCIsCi0JCQlkZXZfbmFtZSgmY2Rldi0+ZGV2KSwgY3FyLT5zdGF0dXMpOworCQlEQkZfREVWX0VWRU5UKERCRl9ERUJVRywgZGV2aWNlLCAiaW52YWxpZCBzdGF0dXM6IGJ1c19pZCAlcywgIgorCQkJICAgICAgInN0YXR1cyAlMDJ4IiwgZGV2X25hbWUoJmNkZXYtPmRldiksIGNxci0+c3RhdHVzKTsKIAkJcmV0dXJuOwogCX0KLQlEQkZfREVWX0VWRU5UKERCRl9ERUJVRywgZGV2aWNlLCAiSW50OiBDUy9EUyAweCUwNHggZm9yIGNxciAlcCIsCi0JCSAgICAgICgoaXJiLT5zY3N3LmNtZC5jc3RhdCA8PCA4KSB8IGlyYi0+c2Nzdy5jbWQuZHN0YXQpLCBjcXIpOworCiAJbmV4dCA9IE5VTEw7CiAJZXhwaXJlcyA9IDA7Ci0JaWYgKGlyYi0+c2Nzdy5jbWQuZHN0YXQgPT0gKERFVl9TVEFUX0NITl9FTkQgfCBERVZfU1RBVF9ERVZfRU5EKSAmJgotCSAgICBpcmItPnNjc3cuY21kLmNzdGF0ID09IDAgJiYgIWlyYi0+ZXN3LmVzdzAuZXJ3LmNvbnMpIHsKKwlpZiAoc2Nzd19kc3RhdCgmaXJiLT5zY3N3KSA9PSAoREVWX1NUQVRfQ0hOX0VORCB8IERFVl9TVEFUX0RFVl9FTkQpICYmCisJICAgIHNjc3dfY3N0YXQoJmlyYi0+c2NzdykgPT0gMCkgewogCQkvKiByZXF1ZXN0IHdhcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5ICovCiAJCWNxci0+c3RhdHVzID0gREFTRF9DUVJfU1VDQ0VTUzsKIAkJY3FyLT5zdG9wY2xrID0gbm93OwpAQCAtMTA3MSwxOCArMTA4MiwyMyBAQAogCQl9CiAJfSBlbHNlIHsgIC8qIGVycm9yICovCiAJCW1lbWNweSgmY3FyLT5pcmIsIGlyYiwgc2l6ZW9mKHN0cnVjdCBpcmIpKTsKKwkJLyogbG9nIHNlbnNlIGZvciBldmVyeSBmYWlsZWQgSS9PIHRvIHMzOTAgZGVidWdmZWF0dXJlICovCisJCWRhc2RfbG9nX3NlbnNlX2RiZihjcXIsIGlyYik7CiAJCWlmIChkZXZpY2UtPmZlYXR1cmVzICYgREFTRF9GRUFUVVJFX0VSUExPRykgewogCQkJZGFzZF9sb2dfc2Vuc2UoY3FyLCBpcmIpOwogCQl9CisKIAkJLyoKIAkJICogSWYgd2UgZG9uJ3Qgd2FudCBjb21wbGV4IEVSUCBmb3IgdGhpcyByZXF1ZXN0LCB0aGVuIGp1c3QKIAkJICogcmVzZXQgdGhpcyBhbmQgcmV0cnkgaXQgaW4gdGhlIGZhc3RwYXRoCiAJCSAqLwogCQlpZiAoIXRlc3RfYml0KERBU0RfQ1FSX0ZMQUdTX1VTRV9FUlAsICZjcXItPmZsYWdzKSAmJgogCQkgICAgY3FyLT5yZXRyaWVzID4gMCkgewotCQkJREVWX01FU1NBR0UoS0VSTl9ERUJVRywgZGV2aWNlLAotCQkJCSAgICAiZGVmYXVsdCBFUlAgaW4gZmFzdHBhdGggKCVpIHJldHJpZXMgbGVmdCkiLAotCQkJCSAgICBjcXItPnJldHJpZXMpOworCQkJaWYgKGNxci0+bHBtID09IExQTV9BTllQQVRIKQorCQkJCURCRl9ERVZfRVZFTlQoREJGX0RFQlVHLCBkZXZpY2UsCisJCQkJCSAgICAgICJkZWZhdWx0IEVSUCBpbiBmYXN0cGF0aCAiCisJCQkJCSAgICAgICIoJWkgcmV0cmllcyBsZWZ0KSIsCisJCQkJCSAgICAgIGNxci0+cmV0cmllcyk7CiAJCQljcXItPmxwbSAgICA9IExQTV9BTllQQVRIOwogCQkJY3FyLT5zdGF0dXMgPSBEQVNEX0NRUl9RVUVVRUQ7CiAJCQluZXh0ID0gY3FyOwpAQCAtMTA5MywxMCArMTEwOSw2IEBACiAJICAgICghZGV2aWNlLT5zdG9wcGVkKSkgewogCQlpZiAoZGV2aWNlLT5kaXNjaXBsaW5lLT5zdGFydF9JTyhuZXh0KSA9PSAwKQogCQkJZXhwaXJlcyA9IG5leHQtPmV4cGlyZXM7Ci0JCWVsc2UKLQkJCURFVl9NRVNTQUdFKEtFUk5fREVCVUcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkludGVycnVwdCBmYXN0cGF0aCAiCi0JCQkJICAgICJmYWlsZWQhIik7CiAJfQogCWlmIChleHBpcmVzICE9IDApCiAJCWRhc2RfZGV2aWNlX3NldF90aW1lcihkZXZpY2UsIGV4cGlyZXMpOwpAQCAtMTE2OSw2ICsxMTgxLDcgQEAKIAlzdHJ1Y3QgZGFzZF9ibG9jayAqYmxvY2s7CiAJdm9pZCAoKmNhbGxiYWNrKShzdHJ1Y3QgZGFzZF9jY3dfcmVxICosIHZvaWQgKmRhdGEpOwogCXZvaWQgKmNhbGxiYWNrX2RhdGE7CisJY2hhciBlcnJvcnN0cmluZ1tFUlJPUkxFTkdUSF07CiAKIAlsaXN0X2Zvcl9lYWNoX3NhZmUobCwgbiwgZmluYWxfcXVldWUpIHsKIAkJY3FyID0gbGlzdF9lbnRyeShsLCBzdHJ1Y3QgZGFzZF9jY3dfcmVxLCBkZXZsaXN0KTsKQEAgLTExODksMTAgKzEyMDIsMTEgQEAKIAkJCWNxci0+c3RhdHVzID0gREFTRF9DUVJfVEVSTUlOQVRFRDsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJREVWX01FU1NBR0UoS0VSTl9FUlIsIGRldmljZSwKLQkJCQkgICAgIndyb25nIGNxciBzdGF0dXMgaW4gX19kYXNkX3Byb2Nlc3NfZmluYWxfcXVldWUgIgotCQkJCSAgICAiZm9yIGNxciAlcCwgc3RhdHVzICV4IiwKLQkJCQkgICAgY3FyLCBjcXItPnN0YXR1cyk7CisJCQkvKiBpbnRlcm5hbCBlcnJvciAxMiAtIHdyb25nIGNxciBzdGF0dXMqLworCQkJc25wcmludGYoZXJyb3JzdHJpbmcsIEVSUk9STEVOR1RILCAiMTIgJXAgJXgwMiIsIGNxciwgY3FyLT5zdGF0dXMpOworCQkJZGV2X2VycigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJIkFuIGVycm9yIG9jY3VycmVkIGluIHRoZSBEQVNEIGRldmljZSBkcml2ZXIsICIKKwkJCQkicmVhc29uPSVzXG4iLCBlcnJvcnN0cmluZyk7CiAJCQlCVUcoKTsKIAkJfQogCQlpZiAoY3FyLT5jYWxsYmFjayAhPSBOVUxMKQpAQCAtMTIxNywxOCArMTIzMSwxNyBAQAogCSAgICAodGltZV9hZnRlcl9lcShqaWZmaWVzLCBjcXItPmV4cGlyZXMgKyBjcXItPnN0YXJ0dGltZSkpKSB7CiAJCWlmIChkZXZpY2UtPmRpc2NpcGxpbmUtPnRlcm1fSU8oY3FyKSAhPSAwKSB7CiAJCQkvKiBIbXBmLCB0cnkgYWdhaW4gaW4gNSBzZWMgKi8KLQkJCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsCi0JCQkJICAgICJpbnRlcm5hbCBlcnJvciAtIHRpbWVvdXQgKCVpcykgZXhwaXJlZCAiCi0JCQkJICAgICJmb3IgY3FyICVwLCB0ZXJtaW5hdGlvbiBmYWlsZWQsICIKLQkJCQkgICAgInJldHJ5aW5nIGluIDVzIiwKLQkJCQkgICAgKGNxci0+ZXhwaXJlcy9IWiksIGNxcik7CisJCQlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkiY3FyICVwIHRpbWVkIG91dCAoJWlzKSBidXQgY2Fubm90IGJlICIKKwkJCQkiZW5kZWQsIHJldHJ5aW5nIGluIDUgc1xuIiwKKwkJCQljcXIsIChjcXItPmV4cGlyZXMvSFopKTsKIAkJCWNxci0+ZXhwaXJlcyArPSA1KkhaOwogCQkJZGFzZF9kZXZpY2Vfc2V0X3RpbWVyKGRldmljZSwgNSpIWik7CiAJCX0gZWxzZSB7Ci0JCQlERVZfTUVTU0FHRShLRVJOX0VSUiwgZGV2aWNlLAotCQkJCSAgICAiaW50ZXJuYWwgZXJyb3IgLSB0aW1lb3V0ICglaXMpIGV4cGlyZWQgIgotCQkJCSAgICAiZm9yIGNxciAlcCAoJWkgcmV0cmllcyBsZWZ0KSIsCi0JCQkJICAgIChjcXItPmV4cGlyZXMvSFopLCBjcXIsIGNxci0+cmV0cmllcyk7CisJCQlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkiY3FyICVwIHRpbWVkIG91dCAoJWlzKSwgJWkgcmV0cmllcyAiCisJCQkJInJlbWFpbmluZ1xuIiwgY3FyLCAoY3FyLT5leHBpcmVzL0haKSwKKwkJCQljcXItPnJldHJpZXMpOwogCQl9CiAJfQogfQpAQCAtMTI5MCwxMCArMTMwMyw5IEBACiAJCQlyYyA9IGRldmljZS0+ZGlzY2lwbGluZS0+dGVybV9JTyhjcXIpOwogCQkJaWYgKHJjKSB7CiAJCQkJLyogdW5hYmxlIHRvIHRlcm1pbmF0ZSByZXF1ZXVzdCAqLwotCQkJCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsCi0JCQkJCSAgICAiZGFzZCBmbHVzaCBjY3dfcXVldWUgaXMgdW5hYmxlICIKLQkJCQkJICAgICIgdG8gdGVybWluYXRlIHJlcXVlc3QgJXAiLAotCQkJCQkgICAgY3FyKTsKKwkJCQlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkJIkZsdXNoaW5nIHRoZSBEQVNEIHJlcXVlc3QgcXVldWUgIgorCQkJCQkiZmFpbGVkIGZvciByZXF1ZXN0ICVwXG4iLCBjcXIpOwogCQkJCS8qIHN0b3AgZmx1c2ggcHJvY2Vzc2luZyAqLwogCQkJCWdvdG8gZmluaXNoZWQ7CiAJCQl9CkBAIC0xNTM3LDEwICsxNTQ5LDkgQEAKIAkJLyogcmVxdWVzdCBpbiBJTyAtIHRlcm1pbmF0ZSBJTyBhbmQgcmVsZWFzZSBhZ2FpbiAqLwogCQlyYyA9IGRldmljZS0+ZGlzY2lwbGluZS0+dGVybV9JTyhjcXIpOwogCQlpZiAocmMpIHsKLQkJCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsCi0JCQkJICAgICJkYXNkX2NhbmNlbF9yZXEgaXMgdW5hYmxlICIKLQkJCQkgICAgIiB0byB0ZXJtaW5hdGUgcmVxdWVzdCAlcCwgcmMgPSAlZCIsCi0JCQkJICAgIGNxciwgcmMpOworCQkJZGV2X2VycigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJIkNhbmNlbGxpbmcgcmVxdWVzdCAlcCBmYWlsZWQgd2l0aCByYz0lZFxuIiwKKwkJCQljcXIsIHJjKTsKIAkJfSBlbHNlIHsKIAkJCWNxci0+c3RvcGNsayA9IGdldF9jbG9jaygpOwogCQkJcmMgPSAxOwpAQCAtMTYxNyw3ICsxNjI4LDcgQEAKIAlpZiAoY3FyLT5zdGF0dXMgPT0gREFTRF9DUVJfRE9ORSkKIAkJREJGX0RFVl9FVkVOVChEQkZfTk9USUNFLCBkZXZpY2UsICIlcyIsICJFUlAgc3VjY2Vzc2Z1bCIpOwogCWVsc2UKLQkJREVWX01FU1NBR0UoS0VSTl9FUlIsIGRldmljZSwgIiVzIiwgIkVSUCB1bnN1Y2Nlc3NmdWwiKTsKKwkJZGV2X2VycigmZGV2aWNlLT5jZGV2LT5kZXYsICJFUlAgZmFpbGVkIGZvciB0aGUgREFTRFxuIik7CiAJZXJwX2ZuID0gZGV2aWNlLT5kaXNjaXBsaW5lLT5lcnBfcG9zdGFjdGlvbihjcXIpOwogCWVycF9mbihjcXIpOwogfQpAQCAtMTk5MSw4ICsyMDAyLDExIEBACiAJYmxrX3F1ZXVlX21heF9zZWN0b3JzKGJsb2NrLT5yZXF1ZXN0X3F1ZXVlLCBtYXgpOwogCWJsa19xdWV1ZV9tYXhfcGh5c19zZWdtZW50cyhibG9jay0+cmVxdWVzdF9xdWV1ZSwgLTFMKTsKIAlibGtfcXVldWVfbWF4X2h3X3NlZ21lbnRzKGJsb2NrLT5yZXF1ZXN0X3F1ZXVlLCAtMUwpOwotCWJsa19xdWV1ZV9tYXhfc2VnbWVudF9zaXplKGJsb2NrLT5yZXF1ZXN0X3F1ZXVlLCAtMUwpOwotCWJsa19xdWV1ZV9zZWdtZW50X2JvdW5kYXJ5KGJsb2NrLT5yZXF1ZXN0X3F1ZXVlLCAtMUwpOworCS8qIHdpdGggcGFnZSBzaXplZCBzZWdtZW50cyB3ZSBjYW4gdHJhbnNsYXRlIGVhY2ggc2VnZW1lbnQgaW50bworCSAqIG9uZSBpZGF3L3RpZGF3CisJICovCisJYmxrX3F1ZXVlX21heF9zZWdtZW50X3NpemUoYmxvY2stPnJlcXVlc3RfcXVldWUsIFBBR0VfU0laRSk7CisJYmxrX3F1ZXVlX3NlZ21lbnRfYm91bmRhcnkoYmxvY2stPnJlcXVlc3RfcXVldWUsIFBBR0VfU0laRSAtIDEpOwogCWJsa19xdWV1ZV9vcmRlcmVkKGJsb2NrLT5yZXF1ZXN0X3F1ZXVlLCBRVUVVRV9PUkRFUkVEX0RSQUlOLCBOVUxMKTsKIH0KIApAQCAtMjA0Myw4ICsyMDU3LDkgQEAKIAl9CiAKIAlpZiAoZGFzZF9wcm9iZW9ubHkpIHsKLQkJREVWX01FU1NBR0UoS0VSTl9JTkZPLCBiYXNlLCAiJXMiLAotCQkJICAgICJObyBhY2Nlc3MgdG8gZGV2aWNlIGR1ZSB0byBwcm9iZW9ubHkgbW9kZSIpOworCQlkZXZfaW5mbygmYmFzZS0+Y2Rldi0+ZGV2LAorCQkJICJBY2Nlc3NpbmcgdGhlIERBU0QgZmFpbGVkIGJlY2F1c2UgaXQgaXMgaW4gIgorCQkJICJwcm9iZW9ubHkgbW9kZVxuIik7CiAJCXJjID0gLUVQRVJNOwogCQlnb3RvIG91dDsKIAl9CkBAIC0yMTAxLDcgKzIxMTYsOCBAQAogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkub3BlbgkJPSBkYXNkX29wZW4sCiAJLnJlbGVhc2UJPSBkYXNkX3JlbGVhc2UsCi0JLmxvY2tlZF9pb2N0bAk9IGRhc2RfaW9jdGwsCisJLmlvY3RsCQk9IGRhc2RfaW9jdGwsCisJLmNvbXBhdF9pb2N0bAk9IGRhc2RfaW9jdGwsCiAJLmdldGdlbwkJPSBkYXNkX2dldGdlbywKIH07CiAKQEAgLTIxNDMsMTQgKzIxNTksMTQgQEAKIAogCXJldCA9IGNjd19kZXZpY2Vfc2V0X29wdGlvbnMoY2RldiwgQ0NXREVWX0RPX1BBVEhHUk9VUCk7CiAJaWYgKHJldCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCURCRl9FVkVOVChEQkZfV0FSTklORywKIAkJICAgICAgICJkYXNkX2dlbmVyaWNfcHJvYmU6IGNvdWxkIG5vdCBzZXQgY2N3LWRldmljZSBvcHRpb25zICIKIAkJICAgICAgICJmb3IgJXNcbiIsIGRldl9uYW1lKCZjZGV2LT5kZXYpKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAJcmV0ID0gZGFzZF9hZGRfc3lzZnNfZmlsZXMoY2Rldik7CiAJaWYgKHJldCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCURCRl9FVkVOVChEQkZfV0FSTklORywKIAkJICAgICAgICJkYXNkX2dlbmVyaWNfcHJvYmU6IGNvdWxkIG5vdCBhZGQgc3lzZnMgZW50cmllcyAiCiAJCSAgICAgICAiZm9yICVzXG4iLCBkZXZfbmFtZSgmY2Rldi0+ZGV2KSk7CiAJCXJldHVybiByZXQ7CkBAIC0yMTY2LDkgKzIxODIsNyBAQAogCSAgICAoZGFzZF9hdXRvZGV0ZWN0ICYmIGRhc2RfYnVzaWRfa25vd24oZGV2X25hbWUoJmNkZXYtPmRldikpICE9IDApKQogCQlyZXQgPSBjY3dfZGV2aWNlX3NldF9vbmxpbmUoY2Rldik7CiAJaWYgKHJldCkKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgImRhc2RfZ2VuZXJpY19wcm9iZTogY291bGQgbm90IGluaXRpYWxseSAiCi0JCSAgICAgICAib25saW5lIGNjdy1kZXZpY2UgJXM7IHJldHVybiBjb2RlOiAlZFxuIiwKKwkJcHJfd2FybmluZygiJXM6IFNldHRpbmcgdGhlIERBU0Qgb25saW5lIGZhaWxlZCB3aXRoIHJjPSVkXG4iLAogCQkgICAgICAgZGV2X25hbWUoJmNkZXYtPmRldiksIHJldCk7CiAJcmV0dXJuIDA7CiB9CkBAIC0yMjMyLDEwICsyMjQ2LDkgQEAKIAlkaXNjaXBsaW5lID0gYmFzZV9kaXNjaXBsaW5lOwogCWlmIChkZXZpY2UtPmZlYXR1cmVzICYgREFTRF9GRUFUVVJFX1VTRURJQUcpIHsKIAkgIAlpZiAoIWRhc2RfZGlhZ19kaXNjaXBsaW5lX3BvaW50ZXIpIHsKLQkJICAgICAgICBwcmludGsgKEtFUk5fV0FSTklORwotCQkJCSJkYXNkX2dlbmVyaWMgY291bGRuJ3Qgb25saW5lIGRldmljZSAlcyAiCi0JCQkJIi0gZGlzY2lwbGluZSBESUFHIG5vdCBhdmFpbGFibGVcbiIsCi0JCQkJZGV2X25hbWUoJmNkZXYtPmRldikpOworCQkJcHJfd2FybmluZygiJXMgU2V0dGluZyB0aGUgREFTRCBvbmxpbmUgZmFpbGVkIGJlY2F1c2UgIgorCQkJCSAgICJvZiBtaXNzaW5nIERJQUcgZGlzY2lwbGluZVxuIiwKKwkJCQkgICBkZXZfbmFtZSgmY2Rldi0+ZGV2KSk7CiAJCQlkYXNkX2RlbGV0ZV9kZXZpY2UoZGV2aWNlKTsKIAkJCXJldHVybiAtRU5PREVWOwogCQl9CkBAIC0yMjU2LDEwICsyMjY5LDkgQEAKIAkvKiBjaGVja19kZXZpY2Ugd2lsbCBhbGxvY2F0ZSBibG9jayBkZXZpY2UgaWYgbmVjZXNzYXJ5ICovCiAJcmMgPSBkaXNjaXBsaW5lLT5jaGVja19kZXZpY2UoZGV2aWNlKTsKIAlpZiAocmMpIHsKLQkJcHJpbnRrIChLRVJOX1dBUk5JTkcKLQkJCSJkYXNkX2dlbmVyaWMgY291bGRuJ3Qgb25saW5lIGRldmljZSAlcyAiCi0JCQkid2l0aCBkaXNjaXBsaW5lICVzIHJjPSVpXG4iLAotCQkJZGV2X25hbWUoJmNkZXYtPmRldiksIGRpc2NpcGxpbmUtPm5hbWUsIHJjKTsKKwkJcHJfd2FybmluZygiJXMgU2V0dGluZyB0aGUgREFTRCBvbmxpbmUgd2l0aCBkaXNjaXBsaW5lICVzICIKKwkJCSAgICJmYWlsZWQgd2l0aCByYz0laVxuIiwKKwkJCSAgIGRldl9uYW1lKCZjZGV2LT5kZXYpLCBkaXNjaXBsaW5lLT5uYW1lLCByYyk7CiAJCW1vZHVsZV9wdXQoZGlzY2lwbGluZS0+b3duZXIpOwogCQltb2R1bGVfcHV0KGJhc2VfZGlzY2lwbGluZS0+b3duZXIpOwogCQlkYXNkX2RlbGV0ZV9kZXZpY2UoZGV2aWNlKTsKQEAgLTIyNjgsOSArMjI4MCw4IEBACiAKIAlkYXNkX3NldF90YXJnZXRfc3RhdGUoZGV2aWNlLCBEQVNEX1NUQVRFX09OTElORSk7CiAJaWYgKGRldmljZS0+c3RhdGUgPD0gREFTRF9TVEFURV9LTk9XTikgewotCQlwcmludGsgKEtFUk5fV0FSTklORwotCQkJImRhc2RfZ2VuZXJpYyBkaXNjaXBsaW5lIG5vdCBmb3VuZCBmb3IgJXNcbiIsCi0JCQlkZXZfbmFtZSgmY2Rldi0+ZGV2KSk7CisJCXByX3dhcm5pbmcoIiVzIFNldHRpbmcgdGhlIERBU0Qgb25saW5lIGZhaWxlZCBiZWNhdXNlIG9mIGEgIgorCQkJICAgIm1pc3NpbmcgZGlzY2lwbGluZVxuIiwgZGV2X25hbWUoJmNkZXYtPmRldikpOwogCQlyYyA9IC1FTk9ERVY7CiAJCWRhc2Rfc2V0X3RhcmdldF9zdGF0ZShkZXZpY2UsIERBU0RfU1RBVEVfTkVXKTsKIAkJaWYgKGRldmljZS0+YmxvY2spCkBAIC0yMzE0LDEzICsyMzI1LDEzIEBACiAJCW9wZW5fY291bnQgPSBhdG9taWNfcmVhZCgmZGV2aWNlLT5ibG9jay0+b3Blbl9jb3VudCk7CiAJCWlmIChvcGVuX2NvdW50ID4gbWF4X2NvdW50KSB7CiAJCQlpZiAob3Blbl9jb3VudCA+IDApCi0JCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ2FuJ3Qgb2ZmbGluZSBkYXNkICIKLQkJCQkgICAgICAgImRldmljZSB3aXRoIG9wZW4gY291bnQgPSAlaS5cbiIsCi0JCQkJICAgICAgIG9wZW5fY291bnQpOworCQkJCXByX3dhcm5pbmcoIiVzOiBUaGUgREFTRCBjYW5ub3QgYmUgc2V0IG9mZmxpbmUgIgorCQkJCQkgICAid2l0aCBvcGVuIGNvdW50ICVpXG4iLAorCQkJCQkgICBkZXZfbmFtZSgmY2Rldi0+ZGV2KSwgb3Blbl9jb3VudCk7CiAJCQllbHNlCi0JCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXMiLAotCQkJCSAgICAgICAiQ2FuJ3Qgb2ZmbGluZSBkYXNkIGRldmljZSBkdWUgIgotCQkJCSAgICAgICAidG8gaW50ZXJuYWwgdXNlXG4iKTsKKwkJCQlwcl93YXJuaW5nKCIlczogVGhlIERBU0QgY2Fubm90IGJlIHNldCBvZmZsaW5lICIKKwkJCQkJICAgIndoaWxlIGl0IGlzIGluIHVzZVxuIiwKKwkJCQkJICAgZGV2X25hbWUoJmNkZXYtPmRldikpOwogCQkJY2xlYXJfYml0KERBU0RfRkxBR19PRkZMSU5FLCAmZGV2aWNlLT5mbGFncyk7CiAJCQlkYXNkX3B1dF9kZXZpY2UoZGV2aWNlKTsKIAkJCXJldHVybiAtRUJVU1k7CkBAIC0yMzkzLDggKzI0MDQsMTAgQEAKIAljcXIgPSBkYXNkX3NtYWxsb2NfcmVxdWVzdChtYWdpYywgMSAvKiBSREMgKi8sIHJkY19idWZmZXJfc2l6ZSwgZGV2aWNlKTsKIAogCWlmIChJU19FUlIoY3FyKSkgewotCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCSAgICAiQ291bGQgbm90IGFsbG9jYXRlIFJEQyByZXF1ZXN0Iik7CisJCS8qIGludGVybmFsIGVycm9yIDEzIC0gQWxsb2NhdGluZyB0aGUgUkRDIHJlcXVlc3QgZmFpbGVkKi8KKwkJZGV2X2VycigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkgIkFuIGVycm9yIG9jY3VycmVkIGluIHRoZSBEQVNEIGRldmljZSBkcml2ZXIsICIKKwkJCSAicmVhc29uPSVzXG4iLCAiMTMiKTsKIAkJcmV0dXJuIGNxcjsKIAl9CiAKQEAgLTI0MzEsNiArMjQ0NCw0MCBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoZGFzZF9nZW5lcmljX3JlYWRfZGV2X2NoYXJzKTsKIAorLyoKKyAqICAgSW4gY29tbWFuZCBtb2RlIGFuZCB0cmFuc3BvcnQgbW9kZSB3ZSBuZWVkIHRvIGxvb2sgZm9yIHNlbnNlCisgKiAgIGRhdGEgaW4gZGlmZmVyZW50IHBsYWNlcy4gVGhlIHNlbnNlIGRhdGEgaXRzZWxmIGlzIGFsbHdheXMKKyAqICAgYW4gYXJyYXkgb2YgMzIgYnl0ZXMsIHNvIHdlIGNhbiB1bmlmeSB0aGUgc2Vuc2UgZGF0YSBhY2Nlc3MKKyAqICAgZm9yIGJvdGggbW9kZXMuCisgKi8KK2NoYXIgKmRhc2RfZ2V0X3NlbnNlKHN0cnVjdCBpcmIgKmlyYikKK3sKKwlzdHJ1Y3QgdHNiICp0c2IgPSBOVUxMOworCWNoYXIgKnNlbnNlID0gTlVMTDsKKworCWlmIChzY3N3X2lzX3RtKCZpcmItPnNjc3cpICYmIChpcmItPnNjc3cudG0uZmN4cyA9PSAweDAxKSkgeworCQlpZiAoaXJiLT5zY3N3LnRtLnRjdykKKwkJCXRzYiA9IHRjd19nZXRfdHNiKChzdHJ1Y3QgdGN3ICopKHVuc2lnbmVkIGxvbmcpCisJCQkJCSAgaXJiLT5zY3N3LnRtLnRjdyk7CisJCWlmICh0c2IgJiYgdHNiLT5sZW5ndGggPT0gNjQgJiYgdHNiLT5mbGFncykKKwkJCXN3aXRjaCAodHNiLT5mbGFncyAmIDB4MDcpIHsKKwkJCWNhc2UgMToJLyogdHNhX2lvc3RhdCAqLworCQkJCXNlbnNlID0gdHNiLT50c2EuaW9zdGF0LnNlbnNlOworCQkJCWJyZWFrOworCQkJY2FzZSAyOiAvKiB0c2FfZGRwYyAqLworCQkJCXNlbnNlID0gdHNiLT50c2EuZGRwYy5zZW5zZTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJLyogY3VycmVudGx5IHdlIGRvbid0IHVzZSBpbnRlcnJvZ2F0ZSBkYXRhICovCisJCQkJYnJlYWs7CisJCQl9CisJfSBlbHNlIGlmIChpcmItPmVzdy5lc3cwLmVydy5jb25zKSB7CisJCXNlbnNlID0gaXJiLT5lY3c7CisJfQorCXJldHVybiBzZW5zZTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGRhc2RfZ2V0X3NlbnNlKTsKKwogc3RhdGljIGludCBfX2luaXQgZGFzZF9pbml0KHZvaWQpCiB7CiAJaW50IHJjOwpAQCAtMjQ3Miw3ICsyNTE5LDcgQEAKIAogCXJldHVybiAwOwogZmFpbGVkOgotCU1FU1NBR0UoS0VSTl9JTkZPLCAiJXMiLCAiaW5pdGlhbGl6YXRpb24gbm90IHBlcmZvcm1lZCBkdWUgdG8gZXJyb3JzIik7CisJcHJfaW5mbygiVGhlIERBU0QgZGV2aWNlIGRyaXZlciBjb3VsZCBub3QgYmUgaW5pdGlhbGl6ZWRcbiIpOwogCWRhc2RfZXhpdCgpOwogCXJldHVybiByYzsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkXzM5OTBfZXJwLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF8zOTkwX2VycC5jCmluZGV4IGQ4MmFhZDUuLjI3OTkxYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkXzM5OTBfZXJwLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfMzk5MF9lcnAuYwpAQCAtNyw2ICs3LDggQEAKICAqCiAgKi8KIAorI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAiZGFzZCIKKwogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGFzbS9pZGFscy5oPgpAQCAtNzUsNyArNzcsNyBAQAogCXN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlID0gZXJwLT5zdGFydGRldjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JREVWX01FU1NBR0UoS0VSTl9JTkZPLCBkZXZpY2UsCisJREJGX0RFVl9FVkVOVChEQkZfSU5GTywgZGV2aWNlLAogCQkgICAgImJsb2NraW5nIHJlcXVlc3QgcXVldWUgZm9yICVpcyIsIGV4cGlyZXMvSFopOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoZ2V0X2Njd2Rldl9sb2NrKGRldmljZS0+Y2RldiksIGZsYWdzKTsKQEAgLTExNCw5ICsxMTYsOSBAQAogCX0gZWxzZSB7CiAKIAkJLyogaXNzdWUgYSBtZXNzYWdlIGFuZCB3YWl0IGZvciAnZGV2aWNlIHJlYWR5JyBpbnRlcnJ1cHQgKi8KLQkJREVWX01FU1NBR0UoS0VSTl9FUlIsIGRldmljZSwgIiVzIiwKKwkJZGV2X2VycigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkgICAgImlzIG9mZmxpbmUgb3Igbm90IGluc3RhbGxlZCAtICIKLQkJCSAgICAiSU5URVJWRU5USU9OIFJFUVVJUkVEISEiKTsKKwkJCSAgICAiSU5URVJWRU5USU9OIFJFUVVJUkVEISFcbiIpOwogCiAJCWRhc2RfMzk5MF9lcnBfYmxvY2tfcXVldWUoZXJwLCA2MCpIWik7CiAJfQpAQCAtMTU4LDcgKzE2MCw3IEBACiAKIAlpZiAoKGVycC0+bHBtICYgb3BtKSAhPSAweDAwKSB7CiAKLQkJREVWX01FU1NBR0UoS0VSTl9ERUJVRywgZGV2aWNlLAorCQlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsCiAJCQkgICAgInRyeSBhbHRlcm5hdGUgbHBtPSV4IChscHVtPSV4IC8gb3BtPSV4KSIsCiAJCQkgICAgZXJwLT5scG0sIGVycC0+aXJiLmVzdy5lc3cwLnN1YmxvZy5scHVtLCBvcG0pOwogCkBAIC0xNjYsMTAgKzE2OCw5IEBACiAJCWVycC0+c3RhdHVzID0gREFTRF9DUVJfRklMTEVEOwogCQllcnAtPnJldHJpZXMgPSAxMDsKIAl9IGVsc2UgewotCQlERVZfTUVTU0FHRShLRVJOX0VSUiwgZGV2aWNlLAotCQkJICAgICJObyBhbHRlcm5hdGUgY2hhbm5lbCBwYXRoIGxlZnQgKGxwdW09JXggLyAiCi0JCQkgICAgIm9wbT0leCkgLT4gcGVybWFuZW50IGVycm9yIiwKLQkJCSAgICBlcnAtPmlyYi5lc3cuZXN3MC5zdWJsb2cubHB1bSwgb3BtKTsKKwkJZGV2X2VycigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkiVGhlIERBU0QgY2Fubm90IGJlIHJlYWNoZWQgb24gYW55IHBhdGggKGxwdW09JXgiCisJCQkiL29wbT0leClcbiIsIGVycC0+aXJiLmVzdy5lc3cwLnN1YmxvZy5scHVtLCBvcG0pOwogCiAJCS8qIHBvc3QgcmVxdWVzdCB3aXRoIHBlcm1hbmVudCBlcnJvciAqLwogCQllcnAtPnN0YXR1cyA9IERBU0RfQ1FSX0ZBSUxFRDsKQEAgLTIwNCw4ICsyMDUsOCBAQAogCQkJCQkgIHNpemVvZihzdHJ1Y3QgRENUTF9kYXRhKSwKIAkJCQkJICBkZXZpY2UpOwogCWlmIChJU19FUlIoZGN0bF9jcXIpKSB7Ci0JCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsICIlcyIsCi0JCQkgICAgIlVuYWJsZSB0byBhbGxvY2F0ZSBEQ1RMLUNRUiIpOworCQlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCSAgICAiVW5hYmxlIHRvIGFsbG9jYXRlIERDVEwtQ1FSXG4iKTsKIAkJZXJwLT5zdGF0dXMgPSBEQVNEX0NRUl9GQUlMRUQ7CiAJCXJldHVybiBlcnA7CiAJfQpAQCAtMjk0LDcgKzI5NSw3IEBACiAJLyogaW50ZXJydXB0ICh0aGlzIGVuYWJsZXMgZWFzaWVyIGVucXVlaW5nIG9mIHRoZSBjcXIpCSAgICAqLwogCWlmIChlcnAtPmZ1bmN0aW9uICE9IGRhc2RfMzk5MF9lcnBfYWN0aW9uXzQpIHsKIAotCQlERVZfTUVTU0FHRShLRVJOX0lORk8sIGRldmljZSwgIiVzIiwKKwkJREJGX0RFVl9FVkVOVChEQkZfSU5GTywgZGV2aWNlLCAiJXMiLAogCQkJICAgICJkYXNkXzM5OTBfZXJwX2FjdGlvbl80OiBmaXJzdCB0aW1lIHJldHJ5Iik7CiAKIAkJZXJwLT5yZXRyaWVzID0gMjU2OwpAQCAtMzAzLDcgKzMwNCw3IEBACiAJfSBlbHNlIHsKIAkJaWYgKHNlbnNlICYmIChzZW5zZVsyNV0gPT0gMHgxRCkpIHsgLyogc3RhdGUgY2hhbmdlIHBlbmRpbmcgKi8KIAotCQkJREVWX01FU1NBR0UoS0VSTl9JTkZPLCBkZXZpY2UsCisJCQlEQkZfREVWX0VWRU5UKERCRl9JTkZPLCBkZXZpY2UsCiAJCQkJICAgICJ3YWl0aW5nIGZvciBzdGF0ZSBjaGFuZ2UgcGVuZGluZyAiCiAJCQkJICAgICJpbnRlcnJ1cHQsICVkIHJldHJpZXMgbGVmdCIsCiAJCQkJICAgIGVycC0+cmV0cmllcyk7CkBAIC0zMTEsMTUgKzMxMiwxNCBAQAogCQkJZGFzZF8zOTkwX2VycF9ibG9ja19xdWV1ZShlcnAsIDMwKkhaKTsKIAogCQl9IGVsc2UgaWYgKHNlbnNlICYmIChzZW5zZVsyNV0gPT0gMHgxRSkpIHsJLyogYnVzeSAqLwotCQkJREVWX01FU1NBR0UoS0VSTl9JTkZPLCBkZXZpY2UsCisJCQlEQkZfREVWX0VWRU5UKERCRl9JTkZPLCBkZXZpY2UsCiAJCQkJICAgICJidXN5IC0gcmVkcml2aW5nIHJlcXVlc3QgbGF0ZXIsICIKIAkJCQkgICAgIiVkIHJldHJpZXMgbGVmdCIsCiAJCQkJICAgIGVycC0+cmV0cmllcyk7CiAgICAgICAgICAgICAgICAgICAgICAgICBkYXNkXzM5OTBfZXJwX2Jsb2NrX3F1ZXVlKGVycCwgSFopOwogCQl9IGVsc2UgewotCiAJCQkvKiBubyBzdGF0ZSBjaGFuZ2UgcGVuZGluZyAtIHJldHJ5ICovCi0JCQlERVZfTUVTU0FHRSAoS0VSTl9JTkZPLCBkZXZpY2UsCisJCQlEQkZfREVWX0VWRU5UKERCRl9JTkZPLCBkZXZpY2UsCiAJCQkJICAgICAicmVkcml2aW5nIHJlcXVlc3QgaW1tZWRpYXRlbHksICIKIAkJCQkgICAgICIlZCByZXRyaWVzIGxlZnQiLAogCQkJCSAgICAgZXJwLT5yZXRyaWVzKTsKQEAgLTM4NCw2ICszODQsNyBAQAogCXN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlID0gZXJwLT5zdGFydGRldjsKIAljaGFyIG1zZ19mb3JtYXQgPSAoc2Vuc2VbN10gJiAweEYwKTsKIAljaGFyIG1zZ19ubyA9IChzZW5zZVs3XSAmIDB4MEYpOworCWNoYXIgZXJyb3JzdHJpbmdbRVJST1JMRU5HVEhdOwogCiAJc3dpdGNoIChtc2dfZm9ybWF0KSB7CiAJY2FzZSAweDAwOgkJLyogRm9ybWF0IDAgLSBQcm9ncmFtIG9yIFN5c3RlbSBDaGVja3MgKi8KQEAgLTM5NCw5NSArMzk1LDk3IEBACiAJCQljYXNlIDB4MDA6CS8qIE5vIE1lc3NhZ2UgKi8KIAkJCQlicmVhazsKIAkJCWNhc2UgMHgwMToKLQkJCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkJICAgICJGT1JNQVQgMCAtIEludmFsaWQgQ29tbWFuZCIpOworCQkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkJICAgICJGT1JNQVQgMCAtIEludmFsaWQgQ29tbWFuZFxuIik7CiAJCQkJYnJlYWs7CiAJCQljYXNlIDB4MDI6Ci0JCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCQkgICAgIkZPUk1BVCAwIC0gSW52YWxpZCBDb21tYW5kICIKLQkJCQkJICAgICJTZXF1ZW5jZSIpOworCQkJCQkgICAgIlNlcXVlbmNlXG4iKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgMHgwMzoKLQkJCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJCSAgICAiRk9STUFUIDAgLSBDQ1cgQ291bnQgbGVzcyB0aGFuICIKLQkJCQkJICAgICJyZXF1aXJlZCIpOworCQkJCQkgICAgInJlcXVpcmVkXG4iKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgMHgwNDoKLQkJCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkJICAgICJGT1JNQVQgMCAtIEludmFsaWQgUGFyYW1ldGVyIik7CisJCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCQkgICAgIkZPUk1BVCAwIC0gSW52YWxpZCBQYXJhbWV0ZXJcbiIpOwogCQkJCWJyZWFrOwogCQkJY2FzZSAweDA1OgotCQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCQkgICAgIkZPUk1BVCAwIC0gRGlhZ25vc3RpYyBvZiBTZXBlY2lhbCIKLQkJCQkJICAgICIgQ29tbWFuZCBWaW9sYXRlcyBGaWxlIE1hc2siKTsKKwkJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJCSAgICAiRk9STUFUIDAgLSBEaWFnbm9zdGljIG9mIFNwZWNpYWwiCisJCQkJCSAgICAiIENvbW1hbmQgVmlvbGF0ZXMgRmlsZSBNYXNrXG4iKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgMHgwNzoKLQkJCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJCSAgICAiRk9STUFUIDAgLSBDaGFubmVsIFJldHVybmVkIHdpdGggIgotCQkJCQkgICAgIkluY29ycmVjdCByZXRyeSBDQ1ciKTsKKwkJCQkJICAgICJJbmNvcnJlY3QgcmV0cnkgQ0NXXG4iKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgMHgwODoKLQkJCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkJICAgICJGT1JNQVQgMCAtIFJlc2V0IE5vdGlmaWNhdGlvbiIpOworCQkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkJICAgICJGT1JNQVQgMCAtIFJlc2V0IE5vdGlmaWNhdGlvblxuIik7CiAJCQkJYnJlYWs7CiAJCQljYXNlIDB4MDk6Ci0JCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJCSAgICAiRk9STUFUIDAgLSBTdG9yYWdlIFBhdGggUmVzdGFydCIpOworCQkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkJICJGT1JNQVQgMCAtIFN0b3JhZ2UgUGF0aCBSZXN0YXJ0XG4iKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgMHgwQToKLQkJCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwKKwkJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJCSAgICAiRk9STUFUIDAgLSBDaGFubmVsIHJlcXVlc3RlZCAiCi0JCQkJCSAgICAiLi4uICUwMngiLCBzZW5zZVs4XSk7CisJCQkJCSAgICAiLi4uICUwMnhcbiIsIHNlbnNlWzhdKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgMHgwQjoKLQkJCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJCSAgICAiRk9STUFUIDAgLSBJbnZhbGlkIERlZmVjdGl2ZS8iCi0JCQkJCSAgICAiQWx0ZXJuYXRlIFRyYWNrIFBvaW50ZXIiKTsKKwkJCQkJICAgICJBbHRlcm5hdGUgVHJhY2sgUG9pbnRlclxuIik7CiAJCQkJYnJlYWs7CiAJCQljYXNlIDB4MEM6Ci0JCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCQkgICAgIkZPUk1BVCAwIC0gRFBTIEluc3RhbGxhdGlvbiAiCi0JCQkJCSAgICAiQ2hlY2siKTsKKwkJCQkJICAgICJDaGVja1xuIik7CiAJCQkJYnJlYWs7CiAJCQljYXNlIDB4MEU6Ci0JCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCQkgICAgIkZPUk1BVCAwIC0gQ29tbWFuZCBJbnZhbGlkIG9uICIKLQkJCQkJICAgICJTZWNvbmRhcnkgQWRkcmVzcyIpOworCQkJCQkgICAgIlNlY29uZGFyeSBBZGRyZXNzXG4iKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgMHgwRjoKLQkJCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwKKwkJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJCSAgICAiRk9STUFUIDAgLSBTdGF0dXMgTm90IEFzICIKLQkJCQkJICAgICJSZXF1aXJlZDogcmVhc29uICUwMngiLCBzZW5zZVs4XSk7CisJCQkJCSAgICAiUmVxdWlyZWQ6IHJlYXNvbiAlMDJ4XG4iLAorCQkJCQkgc2Vuc2VbOF0pOwogCQkJCWJyZWFrOwogCQkJZGVmYXVsdDoKLQkJCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkJICAgICJGT1JNQVQgMCAtIFJlc2V2ZWQiKTsKKwkJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJCSAgICAiRk9STUFUIDAgLSBSZXNlcnZlZFxuIik7CiAJCQl9CiAJCX0gZWxzZSB7CiAJCQlzd2l0Y2ggKG1zZ19ubykgewogCQkJY2FzZSAweDAwOgkvKiBObyBNZXNzYWdlICovCiAJCQkJYnJlYWs7CiAJCQljYXNlIDB4MDE6Ci0JCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJCSAgICAiRk9STUFUIDAgLSBEZXZpY2UgRXJyb3IgU291cmNlIik7CisJCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCQkgIkZPUk1BVCAwIC0gRGV2aWNlIEVycm9yICIKKwkJCQkJICJTb3VyY2VcbiIpOwogCQkJCWJyZWFrOwogCQkJY2FzZSAweDAyOgotCQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCQkgICAgIkZPUk1BVCAwIC0gUmVzZXJ2ZWQiKTsKKwkJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJCSAgICAiRk9STUFUIDAgLSBSZXNlcnZlZFxuIik7CiAJCQkJYnJlYWs7CiAJCQljYXNlIDB4MDM6Ci0JCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsCisJCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCQkgICAgIkZPUk1BVCAwIC0gRGV2aWNlIEZlbmNlZCAtICIKLQkJCQkJICAgICJkZXZpY2UgPSAlMDJ4Iiwgc2Vuc2VbNF0pOworCQkJCQkgICAgImRldmljZSA9ICUwMnhcbiIsIHNlbnNlWzRdKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgMHgwNDoKLQkJCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJCSAgICAiRk9STUFUIDAgLSBEYXRhIFBpbm5lZCBmb3IgIgotCQkJCQkgICAgIkRldmljZSIpOworCQkJCQkgICAgIkRldmljZVxuIik7CiAJCQkJYnJlYWs7CiAJCQlkZWZhdWx0OgotCQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCQkgICAgIkZPUk1BVCAwIC0gUmVzZXJ2ZWQiKTsKKwkJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJCSAgICAiRk9STUFUIDAgLSBSZXNlcnZlZFxuIik7CiAJCQl9CiAJCX0KIAkJYnJlYWs7CkBAIC00OTIsMzQ4ICs0OTUsMzUyIEBACiAJCWNhc2UgMHgwMDoJLyogTm8gTWVzc2FnZSAqLwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwMToKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIDEgLSBEZXZpY2UgU3RhdHVzIDEgbm90IGFzICIKLQkJCQkgICAgImV4cGVjdGVkIik7CisJCQkJICAgICJleHBlY3RlZFxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDAzOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgMSAtIEluZGV4IG1pc3NpbmciKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCAxIC0gSW5kZXggbWlzc2luZ1xuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDA0OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgMSAtIEludGVycnVwdGlvbiBjYW5ub3QgYmUgcmVzZXQiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgIkZPUk1BVCAxIC0gSW50ZXJydXB0aW9uIGNhbm5vdCBiZSAiCisJCQkJICJyZXNldFxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDA1OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgMSAtIERldmljZSBkaWQgbm90IHJlc3BvbmQgdG8gIgotCQkJCSAgICAic2VsZWN0aW9uIik7CisJCQkJICAgICJzZWxlY3Rpb25cbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwNjoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIDEgLSBEZXZpY2UgY2hlY2stMiBlcnJvciBvciBTZXQgIgotCQkJCSAgICAiU2VjdG9yIGlzIG5vdCBjb21wbGV0ZSIpOworCQkJCSAgICAiU2VjdG9yIGlzIG5vdCBjb21wbGV0ZVxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDA3OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgMSAtIEhlYWQgYWRkcmVzcyBkb2VzIG5vdCAiCi0JCQkJICAgICJjb21wYXJlIik7CisJCQkJICAgICJjb21wYXJlXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDg6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCAxIC0gRGV2aWNlIHN0YXR1cyAxIG5vdCB2YWxpZCIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAgICAiRk9STUFUIDEgLSBEZXZpY2Ugc3RhdHVzIDEgbm90IHZhbGlkXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDk6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCAxIC0gRGV2aWNlIG5vdCByZWFkeSIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAgICAiRk9STUFUIDEgLSBEZXZpY2Ugbm90IHJlYWR5XG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MEE6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCAxIC0gVHJhY2sgcGh5c2ljYWwgYWRkcmVzcyBkaWQgIgotCQkJCSAgICAibm90IGNvbXBhcmUiKTsKKwkJCQkgICAgIm5vdCBjb21wYXJlXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MEI6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCAxIC0gTWlzc2luZyBkZXZpY2UgYWRkcmVzcyBiaXQiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCAxIC0gTWlzc2luZyBkZXZpY2UgYWRkcmVzcyBiaXRcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwQzoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIDEgLSBEcml2ZSBtb3RvciBzd2l0Y2ggaXMgb2ZmIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgMSAtIERyaXZlIG1vdG9yIHN3aXRjaCBpcyBvZmZcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwRDoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIDEgLSBTZWVrIGluY29tcGxldGUiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCAxIC0gU2VlayBpbmNvbXBsZXRlXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MEU6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCAxIC0gQ3lsaW5kZXIgYWRkcmVzcyBkaWQgbm90ICIKLQkJCQkgICAgImNvbXBhcmUiKTsKKwkJCQkgICAgImNvbXBhcmVcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwRjoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIDEgLSBPZmZzZXQgYWN0aXZlIGNhbm5vdCBiZSAiCi0JCQkJICAgICJyZXNldCIpOworCQkJCSAgICAicmVzZXRcbiIpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCAxIC0gUmVzZXJ2ZWQiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCAxIC0gUmVzZXJ2ZWRcbiIpOwogCQl9CiAJCWJyZWFrOwogCiAJY2FzZSAweDIwOgkJLyogRm9ybWF0IDIgLSAzOTkwIEVxdWlwbWVudCBDaGVja3MgKi8KIAkJc3dpdGNoIChtc2dfbm8pIHsKIAkJY2FzZSAweDA4OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgMiAtIDM5OTAgY2hlY2stMiBlcnJvciIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAgICAiRk9STUFUIDIgLSAzOTkwIGNoZWNrLTIgZXJyb3JcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwRToKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIDIgLSBTdXBwb3J0IGZhY2lsaXR5IGVycm9ycyIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAgICAiRk9STUFUIDIgLSBTdXBwb3J0IGZhY2lsaXR5IGVycm9yc1xuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDBGOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsCi0JCQkJICAgICJGT1JNQVQgMiAtIE1pY3JvY29kZSBkZXRlY3RlZCBlcnJvciAlMDJ4IiwKLQkJCQkgICAgc2Vuc2VbOF0pOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAiRk9STUFUIDIgLSBNaWNyb2NvZGUgZGV0ZWN0ZWQgZXJyb3IgIgorCQkJCSAiJTAyeFxuIiwKKwkJCQkgc2Vuc2VbOF0pOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCAyIC0gUmVzZXJ2ZWQiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCAyIC0gUmVzZXJ2ZWRcbiIpOwogCQl9CiAJCWJyZWFrOwogCiAJY2FzZSAweDMwOgkJLyogRm9ybWF0IDMgLSAzOTkwIENvbnRyb2wgQ2hlY2tzICovCiAJCXN3aXRjaCAobXNnX25vKSB7CiAJCWNhc2UgMHgwRjoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIDMgLSBBbGxlZ2lhbmNlIHRlcm1pbmF0ZWQiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCAzIC0gQWxsZWdpYW5jZSB0ZXJtaW5hdGVkXG4iKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgMyAtIFJlc2VydmVkIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgMyAtIFJlc2VydmVkXG4iKTsKIAkJfQogCQlicmVhazsKIAogCWNhc2UgMHg0MDoJCS8qIEZvcm1hdCA0IC0gRGF0YSBDaGVja3MgKi8KIAkJc3dpdGNoIChtc2dfbm8pIHsKIAkJY2FzZSAweDAwOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgNCAtIEhvbWUgYWRkcmVzcyBhcmVhIGVycm9yIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgNCAtIEhvbWUgYWRkcmVzcyBhcmVhIGVycm9yXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDE6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCA0IC0gQ291bnQgYXJlYSBlcnJvciIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAgICAiRk9STUFUIDQgLSBDb3VudCBhcmVhIGVycm9yXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDI6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCA0IC0gS2V5IGFyZWEgZXJyb3IiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCA0IC0gS2V5IGFyZWEgZXJyb3JcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwMzoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIDQgLSBEYXRhIGFyZWEgZXJyb3IiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCA0IC0gRGF0YSBhcmVhIGVycm9yXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDQ6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCA0IC0gTm8gc3luYyBieXRlIGluIGhvbWUgYWRkcmVzcyAiCi0JCQkJICAgICJhcmVhIik7CisJCQkJICAgICJhcmVhXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDU6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCA0IC0gTm8gc3luYyBieXRlIGluIGNvdW50IGFkZHJlc3MgIgotCQkJCSAgICAiYXJlYSIpOworCQkJCSAgICAiYXJlYVxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDA2OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgNCAtIE5vIHN5bmMgYnl0ZSBpbiBrZXkgYXJlYSIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAgICAiRk9STUFUIDQgLSBObyBzeW5jIGJ5dGUgaW4ga2V5IGFyZWFcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwNzoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIDQgLSBObyBzeW5jIGJ5dGUgaW4gZGF0YSBhcmVhIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgNCAtIE5vIHN5bmMgYnl0ZSBpbiBkYXRhIGFyZWFcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwODoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIDQgLSBIb21lIGFkZHJlc3MgYXJlYSBlcnJvcjsgIgotCQkJCSAgICAib2Zmc2V0IGFjdGl2ZSIpOworCQkJCSAgICAib2Zmc2V0IGFjdGl2ZVxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDA5OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgNCAtIENvdW50IGFyZWEgZXJyb3I7IG9mZnNldCAiCi0JCQkJICAgICJhY3RpdmUiKTsKKwkJCQkgICAgImFjdGl2ZVxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDBBOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgNCAtIEtleSBhcmVhIGVycm9yOyBvZmZzZXQgIgotCQkJCSAgICAiYWN0aXZlIik7CisJCQkJICAgICJhY3RpdmVcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwQjoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIDQgLSBEYXRhIGFyZWEgZXJyb3I7ICIKLQkJCQkgICAgIm9mZnNldCBhY3RpdmUiKTsKKwkJCQkgICAgIm9mZnNldCBhY3RpdmVcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwQzoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIDQgLSBObyBzeW5jIGJ5dGUgaW4gaG9tZSAiCi0JCQkJICAgICJhZGRyZXNzIGFyZWE7IG9mZnNldCBhY3RpdmUiKTsKKwkJCQkgICAgImFkZHJlc3MgYXJlYTsgb2Zmc2V0IGFjdGl2ZVxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDBEOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgNCAtIE5vIHN5biBieXRlIGluIGNvdW50ICIKLQkJCQkgICAgImFkZHJlc3MgYXJlYTsgb2Zmc2V0IGFjdGl2ZSIpOworCQkJCSAgICAiYWRkcmVzcyBhcmVhOyBvZmZzZXQgYWN0aXZlXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MEU6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCA0IC0gTm8gc3luYyBieXRlIGluIGtleSBhcmVhOyAiCi0JCQkJICAgICJvZmZzZXQgYWN0aXZlIik7CisJCQkJICAgICJvZmZzZXQgYWN0aXZlXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MEY6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCA0IC0gTm8gc3luIGJ5dGUgaW4gZGF0YSBhcmVhOyAiCi0JCQkJICAgICJvZmZzZXQgYWN0aXZlIik7CisJCQkJICAgICJvZmZzZXQgYWN0aXZlXG4iKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgNCAtIFJlc2VydmVkIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgNCAtIFJlc2VydmVkXG4iKTsKIAkJfQogCQlicmVhazsKIAogCWNhc2UgMHg1MDogIC8qIEZvcm1hdCA1IC0gRGF0YSBDaGVjayB3aXRoIGRpc3BsYWNlbWVudCBpbmZvcm1hdGlvbiAqLwogCQlzd2l0Y2ggKG1zZ19ubykgewogCQljYXNlIDB4MDA6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCA1IC0gRGF0YSBDaGVjayBpbiB0aGUgIgotCQkJCSAgICAiaG9tZSBhZGRyZXNzIGFyZWEiKTsKKwkJCQkgICAgImhvbWUgYWRkcmVzcyBhcmVhXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDE6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCA1IC0gRGF0YSBDaGVjayBpbiB0aGUgY291bnQgYXJlYSIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAiRk9STUFUIDUgLSBEYXRhIENoZWNrIGluIHRoZSBjb3VudCAiCisJCQkJICJhcmVhXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDI6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCA1IC0gRGF0YSBDaGVjayBpbiB0aGUga2V5IGFyZWEiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCA1IC0gRGF0YSBDaGVjayBpbiB0aGUga2V5IGFyZWFcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwMzoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIDUgLSBEYXRhIENoZWNrIGluIHRoZSBkYXRhIGFyZWEiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgIkZPUk1BVCA1IC0gRGF0YSBDaGVjayBpbiB0aGUgZGF0YSAiCisJCQkJICJhcmVhXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDg6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCA1IC0gRGF0YSBDaGVjayBpbiB0aGUgIgotCQkJCSAgICAiaG9tZSBhZGRyZXNzIGFyZWE7IG9mZnNldCBhY3RpdmUiKTsKKwkJCQkgICAgImhvbWUgYWRkcmVzcyBhcmVhOyBvZmZzZXQgYWN0aXZlXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDk6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCA1IC0gRGF0YSBDaGVjayBpbiB0aGUgY291bnQgYXJlYTsgIgotCQkJCSAgICAib2Zmc2V0IGFjdGl2ZSIpOworCQkJCSAgICAib2Zmc2V0IGFjdGl2ZVxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDBBOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgNSAtIERhdGEgQ2hlY2sgaW4gdGhlIGtleSBhcmVhOyAiCi0JCQkJICAgICJvZmZzZXQgYWN0aXZlIik7CisJCQkJICAgICJvZmZzZXQgYWN0aXZlXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MEI6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCA1IC0gRGF0YSBDaGVjayBpbiB0aGUgZGF0YSBhcmVhOyAiCi0JCQkJICAgICJvZmZzZXQgYWN0aXZlIik7CisJCQkJICAgICJvZmZzZXQgYWN0aXZlXG4iKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgNSAtIFJlc2VydmVkIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgNSAtIFJlc2VydmVkXG4iKTsKIAkJfQogCQlicmVhazsKIAogCWNhc2UgMHg2MDogIC8qIEZvcm1hdCA2IC0gVXNhZ2UgU3RhdGlzdGljcy9PdmVycnVuIEVycm9ycyAqLwogCQlzd2l0Y2ggKG1zZ19ubykgewogCQljYXNlIDB4MDA6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCA2IC0gT3ZlcnJ1biBvbiBjaGFubmVsIEEiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCA2IC0gT3ZlcnJ1biBvbiBjaGFubmVsIEFcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwMToKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIDYgLSBPdmVycnVuIG9uIGNoYW5uZWwgQiIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAgICAiRk9STUFUIDYgLSBPdmVycnVuIG9uIGNoYW5uZWwgQlxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDAyOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgNiAtIE92ZXJydW4gb24gY2hhbm5lbCBDIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgNiAtIE92ZXJydW4gb24gY2hhbm5lbCBDXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDM6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCA2IC0gT3ZlcnJ1biBvbiBjaGFubmVsIEQiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCA2IC0gT3ZlcnJ1biBvbiBjaGFubmVsIERcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwNDoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIDYgLSBPdmVycnVuIG9uIGNoYW5uZWwgRSIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAgICAiRk9STUFUIDYgLSBPdmVycnVuIG9uIGNoYW5uZWwgRVxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDA1OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgNiAtIE92ZXJydW4gb24gY2hhbm5lbCBGIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgNiAtIE92ZXJydW4gb24gY2hhbm5lbCBGXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDY6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCA2IC0gT3ZlcnJ1biBvbiBjaGFubmVsIEciKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCA2IC0gT3ZlcnJ1biBvbiBjaGFubmVsIEdcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwNzoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIDYgLSBPdmVycnVuIG9uIGNoYW5uZWwgSCIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAgICAiRk9STUFUIDYgLSBPdmVycnVuIG9uIGNoYW5uZWwgSFxuIik7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIDYgLSBSZXNlcnZlZCIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAgICAiRk9STUFUIDYgLSBSZXNlcnZlZFxuIik7CiAJCX0KIAkJYnJlYWs7CiAKIAljYXNlIDB4NzA6ICAvKiBGb3JtYXQgNyAtIERldmljZSBDb25uZWN0aW9uIENvbnRyb2wgQ2hlY2tzICovCiAJCXN3aXRjaCAobXNnX25vKSB7CiAJCWNhc2UgMHgwMDoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIDcgLSBSQ0MgaW5pdGlhdGVkIGJ5IGEgY29ubmVjdGlvbiAiCi0JCQkJICAgICJjaGVjayBhbGVydCIpOworCQkJCSAgICAiY2hlY2sgYWxlcnRcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwMToKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIDcgLSBSQ0MgMSBzZXF1ZW5jZSBub3QgIgotCQkJCSAgICAic3VjY2Vzc2Z1bCIpOworCQkJCSAgICAic3VjY2Vzc2Z1bFxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDAyOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgNyAtIFJDQyAxIGFuZCBSQ0MgMiBzZXF1ZW5jZXMgbm90ICIKLQkJCQkgICAgInN1Y2Nlc3NmdWwiKTsKKwkJCQkgICAgInN1Y2Nlc3NmdWxcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwMzoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIDcgLSBJbnZhbGlkIHRhZy1pbiBkdXJpbmcgIgotCQkJCSAgICAic2VsZWN0aW9uIHNlcXVlbmNlIik7CisJCQkJICAgICJzZWxlY3Rpb24gc2VxdWVuY2VcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwNDoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIDcgLSBleHRyYSBSQ0MgcmVxdWlyZWQiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCA3IC0gZXh0cmEgUkNDIHJlcXVpcmVkXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDU6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCA3IC0gSW52YWxpZCBEQ0Mgc2VsZWN0aW9uICIKLQkJCQkgICAgInJlc3BvbnNlIG9yIHRpbWVvdXQiKTsKKwkJCQkgICAgInJlc3BvbnNlIG9yIHRpbWVvdXRcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwNjoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIDcgLSBNaXNzaW5nIGVuZCBvcGVyYXRpb247IGRldmljZSAiCi0JCQkJICAgICJ0cmFuc2ZlciBjb21wbGV0ZSIpOworCQkJCSAgICAidHJhbnNmZXIgY29tcGxldGVcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwNzoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIDcgLSBNaXNzaW5nIGVuZCBvcGVyYXRpb247IGRldmljZSAiCi0JCQkJICAgICJ0cmFuc2ZlciBpbmNvbXBsZXRlIik7CisJCQkJICAgICJ0cmFuc2ZlciBpbmNvbXBsZXRlXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDg6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCA3IC0gSW52YWxpZCB0YWctaW4gZm9yIGFuICIKLQkJCQkgICAgImltbWVkaWF0ZSBjb21tYW5kIHNlcXVlbmNlIik7CisJCQkJICAgICJpbW1lZGlhdGUgY29tbWFuZCBzZXF1ZW5jZVxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDA5OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgNyAtIEludmFsaWQgdGFnLWluIGZvciBhbiAiCi0JCQkJICAgICJleHRlbmRlZCBjb21tYW5kIHNlcXVlbmNlIik7CisJCQkJICAgICJleHRlbmRlZCBjb21tYW5kIHNlcXVlbmNlXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MEE6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCA3IC0gMzk5MCBtaWNyb2NvZGUgdGltZSBvdXQgd2hlbiAiCi0JCQkJICAgICJzdG9wcGluZyBzZWxlY3Rpb24iKTsKKwkJCQkgICAgInN0b3BwaW5nIHNlbGVjdGlvblxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDBCOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgNyAtIE5vIHJlc3BvbnNlIHRvIHNlbGVjdGlvbiAiCi0JCQkJICAgICJhZnRlciBhIHBvbGwgaW50ZXJydXB0aW9uIik7CisJCQkJICAgICJhZnRlciBhIHBvbGwgaW50ZXJydXB0aW9uXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MEM6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCA3IC0gUGVybWFuZW50IHBhdGggZXJyb3IgKERBU0QgIgotCQkJCSAgICAiY29udHJvbGxlciBub3QgYXZhaWxhYmxlKSIpOworCQkJCSAgICAiY29udHJvbGxlciBub3QgYXZhaWxhYmxlKVxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDBEOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgNyAtIERBU0QgY29udHJvbGxlciBub3QgYXZhaWxhYmxlIgotCQkJCSAgICAiIG9uIGRpc2Nvbm5lY3RlZCBjb21tYW5kIGNoYWluIik7CisJCQkJICAgICIgb24gZGlzY29ubmVjdGVkIGNvbW1hbmQgY2hhaW5cbiIpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCA3IC0gUmVzZXJ2ZWQiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCA3IC0gUmVzZXJ2ZWRcbiIpOwogCQl9CiAJCWJyZWFrOwogCkBAIC04NDEsNTIgKzg0OCw1MiBAQAogCQlzd2l0Y2ggKG1zZ19ubykgewogCQljYXNlIDB4MDA6CS8qIE5vIE1lc3NhZ2UgKi8KIAkJY2FzZSAweDAxOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgOCAtIEVycm9yIGNvcnJlY3Rpb24gY29kZSAiCi0JCQkJICAgICJoYXJkd2FyZSBmYXVsdCIpOworCQkJCSAgICAiaGFyZHdhcmUgZmF1bHRcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwMzoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIDggLSBVbmV4cGVjdGVkIGVuZCBvcGVyYXRpb24gIgotCQkJCSAgICAicmVzcG9uc2UgY29kZSIpOworCQkJCSAgICAicmVzcG9uc2UgY29kZVxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDA0OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgOCAtIEVuZCBvcGVyYXRpb24gd2l0aCB0cmFuc2ZlciAiCi0JCQkJICAgICJjb3VudCBub3QgemVybyIpOworCQkJCSAgICAiY291bnQgbm90IHplcm9cbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwNToKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIDggLSBFbmQgb3BlcmF0aW9uIHdpdGggdHJhbnNmZXIgIgotCQkJCSAgICAiY291bnQgemVybyIpOworCQkJCSAgICAiY291bnQgemVyb1xuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDA2OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgOCAtIERQUyBjaGVja3MgYWZ0ZXIgYSBzeXN0ZW0gIgotCQkJCSAgICAicmVzZXQgb3Igc2VsZWN0aXZlIHJlc2V0Iik7CisJCQkJICAgICJyZXNldCBvciBzZWxlY3RpdmUgcmVzZXRcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwNzoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIDggLSBEUFMgY2Fubm90IGJlIGZpbGxlZCIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAgICAiRk9STUFUIDggLSBEUFMgY2Fubm90IGJlIGZpbGxlZFxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDA4OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgOCAtIFNob3J0IGJ1c3kgdGltZS1vdXQgZHVyaW5nICIKLQkJCQkgICAgImRldmljZSBzZWxlY3Rpb24iKTsKKwkJCQkgICAgImRldmljZSBzZWxlY3Rpb25cbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwOToKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIDggLSBEQVNEIGNvbnRyb2xsZXIgZmFpbGVkIHRvICIKLQkJCQkgICAgInNldCBvciByZXNldCB0aGUgbG9uZyBidXN5IGxhdGNoIik7CisJCQkJICAgICJzZXQgb3IgcmVzZXQgdGhlIGxvbmcgYnVzeSBsYXRjaFxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDBBOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgOCAtIE5vIGludGVycnVwdGlvbiBmcm9tIGRldmljZSAiCi0JCQkJICAgICJkdXJpbmcgYSBjb21tYW5kIGNoYWluIik7CisJCQkJICAgICJkdXJpbmcgYSBjb21tYW5kIGNoYWluXG4iKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgOCAtIFJlc2VydmVkIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgOCAtIFJlc2VydmVkXG4iKTsKIAkJfQogCQlicmVhazsKIApAQCAtODk1LDk3ICs5MDIsMTAwIEBACiAJCWNhc2UgMHgwMDoKIAkJCWJyZWFrOwkvKiBObyBNZXNzYWdlICovCiAJCWNhc2UgMHgwNjoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIDkgLSBEZXZpY2UgY2hlY2stMiBlcnJvciIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAgICAiRk9STUFUIDkgLSBEZXZpY2UgY2hlY2stMiBlcnJvclxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDA3OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgOSAtIEhlYWQgYWRkcmVzcyBkaWQgbm90IGNvbXBhcmUiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgIkZPUk1BVCA5IC0gSGVhZCBhZGRyZXNzIGRpZCBub3QgIgorCQkJCSAiY29tcGFyZVxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDBBOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgOSAtIFRyYWNrIHBoeXNpY2FsIGFkZHJlc3MgZGlkICIKLQkJCQkgICAgIm5vdCBjb21wYXJlIHdoaWxlIG9yaWVudGVkIik7CisJCQkJICAgICJub3QgY29tcGFyZSB3aGlsZSBvcmllbnRlZFxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDBFOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgOSAtIEN5bGluZGVyIGFkZHJlc3MgZGlkIG5vdCAiCi0JCQkJICAgICJjb21wYXJlIik7CisJCQkJICAgICJjb21wYXJlXG4iKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgOSAtIFJlc2VydmVkIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgOSAtIFJlc2VydmVkXG4iKTsKIAkJfQogCQlicmVhazsKIAogCWNhc2UgMHhGMDoJCS8qIEZvcm1hdCBGIC0gQ2FjaGUgU3RvcmFnZSBDaGVja3MgKi8KIAkJc3dpdGNoIChtc2dfbm8pIHsKIAkJY2FzZSAweDAwOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgRiAtIE9wZXJhdGlvbiBUZXJtaW5hdGVkIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgRiAtIE9wZXJhdGlvbiBUZXJtaW5hdGVkXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDE6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCBGIC0gU3Vic3lzdGVtIFByb2Nlc3NpbmcgRXJyb3IiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCBGIC0gU3Vic3lzdGVtIFByb2Nlc3NpbmcgRXJyb3JcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwMjoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIEYgLSBDYWNoZSBvciBub252b2xhdGlsZSBzdG9yYWdlICIKLQkJCQkgICAgImVxdWlwbWVudCBmYWlsdXJlIik7CisJCQkJICAgICJlcXVpcG1lbnQgZmFpbHVyZVxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDA0OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgRiAtIENhY2hpbmcgdGVybWluYXRlZCIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAgICAiRk9STUFUIEYgLSBDYWNoaW5nIHRlcm1pbmF0ZWRcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwNjoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIEYgLSBDYWNoZSBmYXN0IHdyaXRlIGFjY2VzcyBub3QgIgotCQkJCSAgICAiYXV0aG9yaXplZCIpOworCQkJCSAgICAiYXV0aG9yaXplZFxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDA3OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgRiAtIFRyYWNrIGZvcm1hdCBpbmNvcnJlY3QiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCBGIC0gVHJhY2sgZm9ybWF0IGluY29ycmVjdFxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDA5OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgRiAtIENhY2hpbmcgcmVpbml0aWF0ZWQiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCBGIC0gQ2FjaGluZyByZWluaXRpYXRlZFxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDBBOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgRiAtIE5vbnZvbGF0aWxlIHN0b3JhZ2UgIgotCQkJCSAgICAidGVybWluYXRlZCIpOworCQkJCSAgICAidGVybWluYXRlZFxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDBCOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgRiAtIFZvbHVtZSBpcyBzdXNwZW5kZWQgZHVwbGV4Iik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgRiAtIFZvbHVtZSBpcyBzdXNwZW5kZWQgZHVwbGV4XG4iKTsKIAkJCS8qIGNhbGwgZXh0ZW5kZWQgZXJyb3IgcmVwb3J0aW5nIChFRVIpICovCiAJCQlkYXNkX2Vlcl93cml0ZShkZXZpY2UsIGVycC0+cmVmZXJzLAogCQkJCSAgICAgICBEQVNEX0VFUl9QUFJDU1VTUEVORCk7CiAJCQlicmVhazsKIAkJY2FzZSAweDBDOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgRiAtIFN1YnN5c3RlbSBzdGF0dXMgY29ubm90IGJlICIKLQkJCQkgICAgImRldGVybWluZWQiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCBGIC0gU3Vic3lzdGVtIHN0YXR1cyBjYW5ub3QgYmUgIgorCQkJCSAgICAiZGV0ZXJtaW5lZFxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDBEOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgRiAtIENhY2hpbmcgc3RhdHVzIHJlc2V0IHRvICIKLQkJCQkgICAgImRlZmF1bHQiKTsKKwkJCQkgICAgImRlZmF1bHRcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwRToKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIEYgLSBEQVNEIEZhc3QgV3JpdGUgaW5oaWJpdGVkIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgRiAtIERBU0QgRmFzdCBXcml0ZSBpbmhpYml0ZWRcbiIpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCBEIC0gUmVzZXJ2ZWQiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCBEIC0gUmVzZXJ2ZWRcbiIpOwogCQl9CiAJCWJyZWFrOwogCi0JZGVmYXVsdDoJLyogdW5rbm93biBtZXNzYWdlIGZvcm1hdCAtIHNob3VsZCBub3QgaGFwcGVuICovCi0JICAgICAgICBERVZfTUVTU0FHRSAoS0VSTl9XQVJOSU5HLCBkZXZpY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmtub3duIG1lc3NhZ2UgZm9ybWF0ICUwMngiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2dfZm9ybWF0KTsKKwlkZWZhdWx0OgkvKiB1bmtub3duIG1lc3NhZ2UgZm9ybWF0IC0gc2hvdWxkIG5vdCBoYXBwZW4KKwkJCSAgIGludGVybmFsIGVycm9yIDAzIC0gdW5rbm93biBtZXNzYWdlIGZvcm1hdCAqLworCQlzbnByaW50ZihlcnJvcnN0cmluZywgRVJST1JMRU5HVEgsICIwMyAleDAyIiwgbXNnX2Zvcm1hdCk7CisJCWRldl9lcnIoJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJICJBbiBlcnJvciBvY2N1cnJlZCBpbiB0aGUgREFTRCBkZXZpY2UgZHJpdmVyLCAiCisJCQkgInJlYXNvbj0lc1xuIiwgZXJyb3JzdHJpbmcpOwogCQlicmVhazsKIAl9CQkJLyogZW5kIHN3aXRjaCBtZXNzYWdlIGZvcm1hdCAqLwogCkBAIC0xMDE1LDcgKzEwMjUsNyBAQAogCS8qIGVudiBkYXRhIHByZXNlbnQgKEFDVElPTiAxMCAtIHJldHJ5IHNob3VsZCB3b3JrKSAqLwogCWlmIChzZW5zZVsyXSAmIFNOUzJfRU5WX0RBVEFfUFJFU0VOVCkgewogCi0JCURFVl9NRVNTQUdFKEtFUk5fREVCVUcsIGRldmljZSwgIiVzIiwKKwkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiJXMiLAogCQkJICAgICJDb21tYW5kIFJlamVjdCAtIGVudmlyb25tZW50YWwgZGF0YSBwcmVzZW50Iik7CiAKIAkJZGFzZF8zOTkwX2hhbmRsZV9lbnZfZGF0YShlcnAsIHNlbnNlKTsKQEAgLTEwMjMsOSArMTAzMywxMCBAQAogCQllcnAtPnJldHJpZXMgPSA1OwogCiAJfSBlbHNlIHsKLQkJLyogZmF0YWwgZXJyb3IgLSAgc2V0IHN0YXR1cyB0byBGQUlMRUQgKi8KLQkJREVWX01FU1NBR0UoS0VSTl9FUlIsIGRldmljZSwgIiVzIiwKLQkJCSAgICAiQ29tbWFuZCBSZWplY3QgLSBGYXRhbCBlcnJvciIpOworCQkvKiBmYXRhbCBlcnJvciAtICBzZXQgc3RhdHVzIHRvIEZBSUxFRAorCQkgICBpbnRlcm5hbCBlcnJvciAwOSAtIENvbW1hbmQgUmVqZWN0ICovCisJCWRldl9lcnIoJmRldmljZS0+Y2Rldi0+ZGV2LCAiQW4gZXJyb3Igb2NjdXJyZWQgaW4gdGhlIERBU0QgIgorCQkJImRldmljZSBkcml2ZXIsIHJlYXNvbj0lc1xuIiwgIjA5Iik7CiAKIAkJZXJwID0gZGFzZF8zOTkwX2VycF9jbGVhbnVwKGVycCwgREFTRF9DUVJfRkFJTEVEKTsKIAl9CkBAIC0xMDYxLDcgKzEwNzIsNyBAQAogCX0gZWxzZSB7CiAKIAkJLyogaXNzdWUgYSBtZXNzYWdlIGFuZCB3YWl0IGZvciAnZGV2aWNlIHJlYWR5JyBpbnRlcnJ1cHQgKi8KLQkJREVWX01FU1NBR0UoS0VSTl9ERUJVRywgZGV2aWNlLCAiJXMiLAorCQlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCiAJCQkgICAgImJ1cyBvdXQgcGFyaXR5IGVycm9yIG9yIEJPUEMgcmVxdWVzdGVkIGJ5ICIKIAkJCSAgICAiY2hhbm5lbCIpOwogCkBAIC0xMDkzLDIxICsxMTA0LDE5IEBACiAJZXJwLT5mdW5jdGlvbiA9IGRhc2RfMzk5MF9lcnBfZXF1aXBfY2hlY2s7CiAKIAlpZiAoc2Vuc2VbMV0gJiBTTlMxX1dSSVRFX0lOSElCSVRFRCkgeworCQlkZXZfaW5mbygmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkgICAgIldyaXRlIGluaGliaXRlZCBwYXRoIGVuY291bnRlcmVkXG4iKTsKIAotCQlERVZfTUVTU0FHRShLRVJOX0RFQlVHLCBkZXZpY2UsICIlcyIsCi0JCQkgICAgIldyaXRlIGluaGliaXRlZCBwYXRoIGVuY291bnRlcmVkIik7Ci0KLQkJLyogdmFyeSBwYXRoIG9mZmxpbmUgKi8KLQkJREVWX01FU1NBR0UoS0VSTl9FUlIsIGRldmljZSwgIiVzIiwKLQkJCSAgICAiUGF0aCBzaG91bGQgYmUgdmFyaWVkIG9mZi1saW5lLiAiCi0JCQkgICAgIlRoaXMgaXMgbm90IGltcGxlbWVudGVkIHlldCBcbiAtIHBsZWFzZSByZXBvcnQgIgotCQkJICAgICJ0byBsaW51eDM5MEBkZS5pYm0uY29tIik7CisJCS8qIHZhcnkgcGF0aCBvZmZsaW5lCisJCSAgIGludGVybmFsIGVycm9yIDA0IC0gUGF0aCBzaG91bGQgYmUgdmFyaWVkIG9mZi1saW5lLiovCisJCWRldl9lcnIoJmRldmljZS0+Y2Rldi0+ZGV2LCAiQW4gZXJyb3Igb2NjdXJyZWQgaW4gdGhlIERBU0QgIgorCQkJImRldmljZSBkcml2ZXIsIHJlYXNvbj0lc1xuIiwgIjA0Iik7CiAKIAkJZXJwID0gZGFzZF8zOTkwX2VycF9hY3Rpb25fMShlcnApOwogCiAJfSBlbHNlIGlmIChzZW5zZVsyXSAmIFNOUzJfRU5WX0RBVEFfUFJFU0VOVCkgewogCi0JCURFVl9NRVNTQUdFKEtFUk5fREVCVUcsIGRldmljZSwgIiVzIiwKKwkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiJXMiLAogCQkJICAgICJFcXVpcG1lbnQgQ2hlY2sgLSAiICJlbnZpcm9ubWVudGFsIGRhdGEgcHJlc2VudCIpOwogCiAJCWRhc2RfMzk5MF9oYW5kbGVfZW52X2RhdGEoZXJwLCBzZW5zZSk7CkBAIC0xMTE2LDcgKzExMjUsNyBAQAogCiAJfSBlbHNlIGlmIChzZW5zZVsxXSAmIFNOUzFfUEVSTV9FUlIpIHsKIAotCQlERVZfTUVTU0FHRShLRVJOX0RFQlVHLCBkZXZpY2UsICIlcyIsCisJCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKIAkJCSAgICAiRXF1aXBtZW50IENoZWNrIC0gcmV0cnkgZXhoYXVzdGVkIG9yICIKIAkJCSAgICAidW5kZXNpcmFibGUiKTsKIApAQCAtMTEyNSw3ICsxMTM0LDcgQEAKIAl9IGVsc2UgewogCQkvKiBhbGwgb3RoZXIgZXF1aXBtZW50IGNoZWNrcyAtIEFjdGlvbiA1ICovCiAJCS8qIHJlc3QgaXMgZG9uZSB3aGVuIHJldHJpZXMgPT0gMCAqLwotCQlERVZfTUVTU0FHRShLRVJOX0RFQlVHLCBkZXZpY2UsICIlcyIsCisJCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKIAkJCSAgICAiRXF1aXBtZW50IGNoZWNrIG9yIHByb2Nlc3NpbmcgZXJyb3IiKTsKIAogCQllcnAgPSBkYXNkXzM5OTBfZXJwX2FjdGlvbl81KGVycCk7CkBAIC0xMTU2LDkgKzExNjUsOSBAQAogCWlmIChzZW5zZVsyXSAmIFNOUzJfQ09SUkVDVEFCTEUpIHsJLyogY29ycmVjdGFibGUgZGF0YSBjaGVjayAqLwogCiAJCS8qIGlzc3VlIG1lc3NhZ2UgdGhhdCB0aGUgZGF0YSBoYXMgYmVlbiBjb3JyZWN0ZWQgKi8KLQkJREVWX01FU1NBR0UoS0VSTl9FTUVSRywgZGV2aWNlLCAiJXMiLAorCQlkZXZfZW1lcmcoJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJICAgICJEYXRhIHJlY292ZXJlZCBkdXJpbmcgcmV0cnkgd2l0aCBQQ0kgIgotCQkJICAgICJmZXRjaCBtb2RlIGFjdGl2ZSIpOworCQkJICAgICJmZXRjaCBtb2RlIGFjdGl2ZVxuIik7CiAKIAkJLyogbm90IHBvc3NpYmxlIHRvIGhhbmRsZSB0aGlzIHNpdHVhdGlvbiBpbiBMaW51eCAqLwogCQlwYW5pYygiTm8gd2F5IHRvIGluZm9ybSBhcHBsaWNhdGlvbiBhYm91dCB0aGUgcG9zc2libHkgIgpAQCAtMTE2Niw3ICsxMTc1LDcgQEAKIAogCX0gZWxzZSBpZiAoc2Vuc2VbMl0gJiBTTlMyX0VOVl9EQVRBX1BSRVNFTlQpIHsKIAotCQlERVZfTUVTU0FHRShLRVJOX0RFQlVHLCBkZXZpY2UsICIlcyIsCisJCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKIAkJCSAgICAiVW5jb3JyZWN0YWJsZSBkYXRhIGNoZWNrIHJlY292ZXJlZCBzZWNvbmRhcnkgIgogCQkJICAgICJhZGRyIG9mIGR1cGxleCBwYWlyIik7CiAKQEAgLTExNzQsNyArMTE4Myw3IEBACiAKIAl9IGVsc2UgaWYgKHNlbnNlWzFdICYgU05TMV9QRVJNX0VSUikgewogCi0JCURFVl9NRVNTQUdFKEtFUk5fREVCVUcsIGRldmljZSwgIiVzIiwKKwkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiJXMiLAogCQkJICAgICJVbmNvcnJlY3RhYmxlIGRhdGEgY2hlY2sgd2l0aCBpbnRlcm5hbCAiCiAJCQkgICAgInJldHJ5IGV4aGF1c3RlZCIpOwogCkBAIC0xMTgyLDcgKzExOTEsNyBAQAogCiAJfSBlbHNlIHsKIAkJLyogYWxsIG90aGVyIGRhdGEgY2hlY2tzICovCi0JCURFVl9NRVNTQUdFKEtFUk5fREVCVUcsIGRldmljZSwgIiVzIiwKKwkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiJXMiLAogCQkJICAgICJVbmNvcnJlY3RhYmxlIGRhdGEgY2hlY2sgd2l0aCByZXRyeSBjb3VudCAiCiAJCQkgICAgImV4aGF1c3RlZC4uLiIpOwogCkBAIC0xMjEyLDcgKzEyMjEsNyBAQAogCiAJZXJwLT5mdW5jdGlvbiA9IGRhc2RfMzk5MF9lcnBfb3ZlcnJ1bjsKIAotCURFVl9NRVNTQUdFKEtFUk5fREVCVUcsIGRldmljZSwgIiVzIiwKKwlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCiAJCSAgICAiT3ZlcnJ1biAtIHNlcnZpY2Ugb3ZlcnJ1biBvciBvdmVycnVuIgogCQkgICAgIiBlcnJvciByZXF1ZXN0ZWQgYnkgY2hhbm5lbCIpOwogCkBAIC0xMjQzLDcgKzEyNTIsNyBAQAogCiAJaWYgKHNlbnNlWzJdICYgU05TMl9FTlZfREFUQV9QUkVTRU5UKSB7CiAKLQkJREVWX01FU1NBR0UoS0VSTl9ERUJVRywgZGV2aWNlLCAiJXMiLAorCQlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCiAJCQkgICAgIlRyYWNrIGZvcm1hdCBlcnJvciB3aGVuIGRlc3RhZ2luZyBvciAiCiAJCQkgICAgInN0YWdpbmcgZGF0YSIpOwogCkBAIC0xMjUyLDggKzEyNjEsMTAgQEAKIAkJZXJwID0gZGFzZF8zOTkwX2VycF9hY3Rpb25fNChlcnAsIHNlbnNlKTsKIAogCX0gZWxzZSB7Ci0JCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsICIlcyIsCi0JCQkgICAgIkludmFsaWQgVHJhY2sgRm9ybWF0IC0gRmF0YWwgZXJyb3IiKTsKKwkJLyogaW50ZXJuYWwgZXJyb3IgMDYgLSBUaGUgdHJhY2sgZm9ybWF0IGlzIG5vdCB2YWxpZCovCisJCWRldl9lcnIoJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJIkFuIGVycm9yIG9jY3VycmVkIGluIHRoZSBEQVNEIGRldmljZSBkcml2ZXIsICIKKwkJCSJyZWFzb249JXNcbiIsICIwNiIpOwogCiAJCWVycCA9IGRhc2RfMzk5MF9lcnBfY2xlYW51cChlcnAsIERBU0RfQ1FSX0ZBSUxFRCk7CiAJfQpAQCAtMTI3OSw4ICsxMjkwLDggQEAKIAogCXN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlID0gZGVmYXVsdF9lcnAtPnN0YXJ0ZGV2OwogCi0JREVWX01FU1NBR0UoS0VSTl9FUlIsIGRldmljZSwgIiVzIiwKLQkJICAgICJFbmQtb2YtQ3lsaW5kZXIgLSBtdXN0IG5ldmVyIGhhcHBlbiIpOworCWRldl9lcnIoJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkiVGhlIGN5bGluZGVyIGRhdGEgZm9yIGFjY2Vzc2luZyB0aGUgREFTRCBpcyBpbmNvbnNpc3RlbnRcbiIpOwogCiAJLyogaW1wbGVtZW50IGFjdGlvbiA3IC0gQlVHICovCiAJcmV0dXJuIGRhc2RfMzk5MF9lcnBfY2xlYW51cChkZWZhdWx0X2VycCwgREFTRF9DUVJfRkFJTEVEKTsKQEAgLTEzMDYsNyArMTMxNyw3IEBACiAKIAllcnAtPmZ1bmN0aW9uID0gZGFzZF8zOTkwX2VycF9lbnZfZGF0YTsKIAotCURFVl9NRVNTQUdFKEtFUk5fREVCVUcsIGRldmljZSwgIiVzIiwgIkVudmlyb25tZW50YWwgZGF0YSBwcmVzZW50Iik7CisJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiJXMiLCAiRW52aXJvbm1lbnRhbCBkYXRhIHByZXNlbnQiKTsKIAogCWRhc2RfMzk5MF9oYW5kbGVfZW52X2RhdGEoZXJwLCBzZW5zZSk7CiAKQEAgLTEzMzksOCArMTM1MCw4IEBACiAKIAlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSA9IGRlZmF1bHRfZXJwLT5zdGFydGRldjsKIAotCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsICIlcyIsCi0JCSAgICAiTm8gUmVjb3JkIEZvdW5kIC0gRmF0YWwgZXJyb3IgIik7CisJZGV2X2VycigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCSAgICAiVGhlIHNwZWNpZmllZCByZWNvcmQgd2FzIG5vdCBmb3VuZFxuIik7CiAKIAlyZXR1cm4gZGFzZF8zOTkwX2VycF9jbGVhbnVwKGRlZmF1bHRfZXJwLCBEQVNEX0NRUl9GQUlMRUQpOwogCkBAIC0xMzY1LDcgKzEzNzYsOCBAQAogCiAJc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UgPSBlcnAtPnN0YXJ0ZGV2OwogCi0JREVWX01FU1NBR0UoS0VSTl9FUlIsIGRldmljZSwgIiVzIiwgIkZpbGUgUHJvdGVjdGVkIik7CisJZGV2X2VycigmZGV2aWNlLT5jZGV2LT5kZXYsICJBY2Nlc3NpbmcgdGhlIERBU0QgZmFpbGVkIGJlY2F1c2Ugb2YgIgorCQkiYSBoYXJkd2FyZSBlcnJvclxuIik7CiAKIAlyZXR1cm4gZGFzZF8zOTkwX2VycF9jbGVhbnVwKGVycCwgREFTRF9DUVJfRkFJTEVEKTsKIApAQCAtMTM5NCw3ICsxNDA2LDcgQEAKIAlpZiAoY3FyLT5ibG9jayAmJgogCSAgICAoY3FyLT5ibG9jay0+YmFzZSAhPSBjcXItPnN0YXJ0ZGV2KSkgewogCQlpZiAoY3FyLT5zdGFydGRldi0+ZmVhdHVyZXMgJiBEQVNEX0ZFQVRVUkVfRVJQTE9HKSB7Ci0JCQlERVZfTUVTU0FHRShLRVJOX0VSUiwgY3FyLT5zdGFydGRldiwKKwkJCURCRl9ERVZfRVZFTlQoREJGX0VSUiwgY3FyLT5zdGFydGRldiwKIAkJCQkgICAgIkVSUCBvbiBhbGlhcyBkZXZpY2UgZm9yIHJlcXVlc3QgJXAsIgogCQkJCSAgICAiIHJlY292ZXIgb24gYmFzZSBkZXZpY2UgJXMiLCBjcXIsCiAJCQkJICAgIGRldl9uYW1lKCZjcXItPmJsb2NrLT5iYXNlLT5jZGV2LT5kZXYpKTsKQEAgLTE1MTEsNyArMTUyMyw3IEBACiAJZXJwLT5yZXRyaWVzID0gMjU2OwogCWVycC0+ZnVuY3Rpb24gPSBkYXNkXzM5OTBfZXJwX2FjdGlvbl8xMF8zMjsKIAotCURFVl9NRVNTQUdFKEtFUk5fREVCVUcsIGRldmljZSwgIiVzIiwgIlBlcmZvcm0gbG9nZ2luZyByZXF1ZXN0ZWQiKTsKKwlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsICJQZXJmb3JtIGxvZ2dpbmcgcmVxdWVzdGVkIik7CiAKIAlyZXR1cm4gZXJwOwogCkBAIC0xNTQ5LDcgKzE1NjEsNyBAQAogCWNoYXIgKkxPX2RhdGE7CQkvKiBMT19lY2tkX2RhdGFfdCAqLwogCXN0cnVjdCBjY3cxICpjY3csICpvbGRjY3c7CiAKLQlERVZfTUVTU0FHRShLRVJOX0RFQlVHLCBkZXZpY2UsICIlcyIsCisJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiJXMiLAogCQkgICAgIldyaXRlIG5vdCBmaW5pc2hlZCBiZWNhdXNlIG9mIHVuZXhwZWN0ZWQgY29uZGl0aW9uIik7CiAKIAlkZWZhdWx0X2VycC0+ZnVuY3Rpb24gPSBkYXNkXzM5OTBfZXJwX2FjdGlvbl8xQl8zMjsKQEAgLTE1NjEsMTAgKzE1NzMsMTYgQEAKIAkJY3FyID0gY3FyLT5yZWZlcnM7CiAJfQogCisJaWYgKHNjc3dfaXNfdG0oJmNxci0+aXJiLnNjc3cpKSB7CisJCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCSAgICAgICIzMiBiaXQgc2Vuc2UsIGFjdGlvbiAxQiBpcyBub3QgZGVmaW5lZCIKKwkJCSAgICAgICIgaW4gdHJhbnNwb3J0IG1vZGUgLSBqdXN0IHJldHJ5Iik7CisJCXJldHVybiBkZWZhdWx0X2VycDsKKwl9CisKIAkvKiBmb3IgaW1wcmVjaXNlIGVuZGluZyBqdXN0IGRvIGRlZmF1bHQgZXJwICovCiAJaWYgKHNlbnNlWzFdICYgMHgwMSkgewotCi0JCURFVl9NRVNTQUdFKEtFUk5fREVCVUcsIGRldmljZSwgIiVzIiwKKwkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiJXMiLAogCQkJICAgICJJbXByZWNpc2UgZW5kaW5nIGlzIHNldCAtIGp1c3QgcmV0cnkiKTsKIAogCQlyZXR1cm4gZGVmYXVsdF9lcnA7CkBAIC0xNTc1LDggKzE1OTMsNyBAQAogCWNwYSA9IGRlZmF1bHRfZXJwLT5yZWZlcnMtPmlyYi5zY3N3LmNtZC5jcGE7CiAKIAlpZiAoY3BhID09IDApIHsKLQotCQlERVZfTUVTU0FHRShLRVJOX0RFQlVHLCBkZXZpY2UsICIlcyIsCisJCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKIAkJCSAgICAiVW5hYmxlIHRvIGRldGVybWluZSBhZGRyZXNzIG9mIHRoZSBDQ1cgIgogCQkJICAgICJ0byBiZSByZXN0YXJ0ZWQiKTsKIApAQCAtMTU5MCw3ICsxNjA3LDkgQEAKIAkJCQkgICAgIHNpemVvZihzdHJ1Y3QgTE9fZWNrZF9kYXRhKSwgZGV2aWNlKTsKIAogCWlmIChJU19FUlIoZXJwKSkgewotCQlERVZfTUVTU0FHRShLRVJOX0VSUiwgZGV2aWNlLCAiJXMiLCAiVW5hYmxlIHRvIGFsbG9jYXRlIEVSUCIpOworCQkvKiBpbnRlcm5hbCBlcnJvciAwMSAtIFVuYWJsZSB0byBhbGxvY2F0ZSBFUlAgKi8KKwkJZGV2X2VycigmZGV2aWNlLT5jZGV2LT5kZXYsICJBbiBlcnJvciBvY2N1cnJlZCBpbiB0aGUgREFTRCAiCisJCQkiZGV2aWNlIGRyaXZlciwgcmVhc29uPSVzXG4iLCAiMDEiKTsKIAkJcmV0dXJuIGRhc2RfMzk5MF9lcnBfY2xlYW51cChkZWZhdWx0X2VycCwgREFTRF9DUVJfRkFJTEVEKTsKIAl9CiAKQEAgLTE1OTksNyArMTYxOCw3IEBACiAJb2xkY2N3ID0gY3FyLT5jcGFkZHI7CiAJaWYgKG9sZGNjdy0+Y21kX2NvZGUgPT0gREFTRF9FQ0tEX0NDV19QRlgpIHsKIAkJUEZYX2RhdGEgPSBjcXItPmRhdGE7Ci0JCW1lbWNweShERV9kYXRhLCAmUEZYX2RhdGEtPmRlZmluZV9leHRlbmQsCisJCW1lbWNweShERV9kYXRhLCAmUEZYX2RhdGEtPmRlZmluZV9leHRlbnQsCiAJCSAgICAgICBzaXplb2Yoc3RydWN0IERFX2Vja2RfZGF0YSkpOwogCX0gZWxzZQogCQltZW1jcHkoREVfZGF0YSwgY3FyLT5kYXRhLCBzaXplb2Yoc3RydWN0IERFX2Vja2RfZGF0YSkpOwpAQCAtMTYwOCwxMCArMTYyNyw3IEBACiAJTE9fZGF0YSA9IGVycC0+ZGF0YSArIHNpemVvZihzdHJ1Y3QgREVfZWNrZF9kYXRhKTsKIAogCWlmICgoc2Vuc2VbM10gPT0gMHgwMSkgJiYgKExPX2RhdGFbMV0gJiAweDAxKSkgewotCi0JCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsICIlcyIsCi0JCQkgICAgIkJVRyAtIHRoaXMgc2hvdWxkIG5vdCBoYXBwZW4iKTsKLQorCQkvKiBzaG91bGQgbm90ICovCiAJCXJldHVybiBkYXNkXzM5OTBfZXJwX2NsZWFudXAoZGVmYXVsdF9lcnAsIERBU0RfQ1FSX0ZBSUxFRCk7CiAJfQogCkBAIC0xNzAxLDcgKzE3MTcsNyBAQAogCWNoYXIgKkxPX2RhdGE7CQkvKiBzdHJ1Y3QgTE9fZWNrZF9kYXRhICovCiAJc3RydWN0IGNjdzEgKmNjdzsKIAotCURFVl9NRVNTQUdFKEtFUk5fREVCVUcsIGRldmljZSwgIiVzIiwKKwlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCiAJCSAgICAiV3JpdGUgbm90IGZpbmlzaGVkIGJlY2F1c2Ugb2YgdW5leHBlY3RlZCBjb25kaXRpb24iCiAJCSAgICAiIC0gZm9sbG93IG9uIik7CiAKQEAgLTE3MTIsMTAgKzE3MjgsMTYgQEAKIAkJY3FyID0gY3FyLT5yZWZlcnM7CiAJfQogCisJaWYgKHNjc3dfaXNfdG0oJmNxci0+aXJiLnNjc3cpKSB7CisJCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCSAgICAgICIzMiBiaXQgc2Vuc2UsIGFjdGlvbiAxQiwgdXBkYXRlLCIKKwkJCSAgICAgICIgaW4gdHJhbnNwb3J0IG1vZGUgLSBqdXN0IHJldHJ5Iik7CisJCXJldHVybiBwcmV2aW91c19lcnA7CisJfQorCiAJLyogZm9yIGltcHJlY2lzZSBlbmRpbmcganVzdCBkbyBkZWZhdWx0IGVycCAqLwogCWlmIChzZW5zZVsxXSAmIDB4MDEpIHsKLQotCQlERVZfTUVTU0FHRShLRVJOX0RFQlVHLCBkZXZpY2UsICIlcyIsCisJCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKIAkJCSAgICAiSW1wcmVjaXNlIGVuZGluZyBpcyBzZXQgLSBqdXN0IHJldHJ5Iik7CiAKIAkJcHJldmlvdXNfZXJwLT5zdGF0dXMgPSBEQVNEX0NRUl9GSUxMRUQ7CkBAIC0xNzI4LDEwICsxNzUwLDEwIEBACiAJY3BhID0gcHJldmlvdXNfZXJwLT5pcmIuc2Nzdy5jbWQuY3BhOwogCiAJaWYgKGNwYSA9PSAwKSB7Ci0KLQkJREVWX01FU1NBR0UoS0VSTl9ERUJVRywgZGV2aWNlLCAiJXMiLAotCQkJICAgICJVbmFibGUgdG8gZGV0ZXJtaW5lIGFkZHJlc3Mgb2YgdGhlIENDVyAiCi0JCQkgICAgInRvIGJlIHJlc3RhcnRlZCIpOworCQkvKiBpbnRlcm5hbCBlcnJvciAwMiAtCisJCSAgIFVuYWJsZSB0byBkZXRlcm1pbmUgYWRkcmVzcyBvZiB0aGUgQ0NXIHRvIGJlIHJlc3RhcnRlZCAqLworCQlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwgIkFuIGVycm9yIG9jY3VycmVkIGluIHRoZSBEQVNEICIKKwkJCSJkZXZpY2UgZHJpdmVyLCByZWFzb249JXNcbiIsICIwMiIpOwogCiAJCXByZXZpb3VzX2VycC0+c3RhdHVzID0gREFTRF9DUVJfRkFJTEVEOwogCkBAIC0xNzQ0LDEwICsxNzY2LDcgQEAKIAlMT19kYXRhID0gZXJwLT5kYXRhICsgc2l6ZW9mKHN0cnVjdCBERV9lY2tkX2RhdGEpOwogCiAJaWYgKChzZW5zZVszXSA9PSAweDAxKSAmJiAoTE9fZGF0YVsxXSAmIDB4MDEpKSB7Ci0KLQkJREVWX01FU1NBR0UoS0VSTl9FUlIsIGRldmljZSwgIiVzIiwKLQkJCSAgICAiQlVHIC0gdGhpcyBzaG91bGQgbm90IGhhcHBlbiIpOwotCisJCS8qIHNob3VsZCBub3QgaGFwcGVuICovCiAJCXByZXZpb3VzX2VycC0+c3RhdHVzID0gREFTRF9DUVJfRkFJTEVEOwogCiAJCXJldHVybiBwcmV2aW91c19lcnA7CkBAIC0xOTM1LDE0ICsxOTU0LDEzIEBACiAKIAlpZiAoKHNlbnNlWzI1XSAmIERBU0RfU0VOU0VfQklUXzEpICYmIChzZW5zZVsyNl0gJiBEQVNEX1NFTlNFX0JJVF8yKSkgewogCi0JCS8qIHNldCB0byBzdXNwZW5kZWQgZHVwbGV4IHN0YXRlIHRoZW4gcmVzdGFydCAqLworCQkvKiBzZXQgdG8gc3VzcGVuZGVkIGR1cGxleCBzdGF0ZSB0aGVuIHJlc3RhcnQKKwkJICAgaW50ZXJuYWwgZXJyb3IgMDUgLSBTZXQgZGV2aWNlIHRvIHN1c3BlbmRlZCBkdXBsZXggc3RhdGUKKwkJICAgc2hvdWxkIGJlIGRvbmUgKi8KIAkJc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UgPSBlcnAtPnN0YXJ0ZGV2OwotCi0JCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsICIlcyIsCi0JCQkgICAgIlNldCBkZXZpY2UgdG8gc3VzcGVuZGVkIGR1cGxleCBzdGF0ZSBzaG91bGQgYmUgIgotCQkJICAgICJkb25lIVxuIgotCQkJICAgICJUaGlzIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQgKGZvciBjb21wb3VuZCBFUlApIgotCQkJICAgICIgLSBwbGVhc2UgcmVwb3J0IHRvIGxpbnV4MzkwQGRlLmlibS5jb20iKTsKKwkJZGV2X2VycigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkiQW4gZXJyb3Igb2NjdXJyZWQgaW4gdGhlIERBU0QgZGV2aWNlIGRyaXZlciwgIgorCQkJInJlYXNvbj0lc1xuIiwgIjA1Iik7CiAKIAl9CiAKQEAgLTIwMTIsMTUgKzIwMzAsMTQgQEAKIHsKIAkvKiBwcmludCBtZXNzYWdlIGFjY29yZGluZyB0byBsb2cgb3IgbWVzc2FnZSB0byBvcGVyYXRvciBtb2RlICovCiAJaWYgKChzZW5zZVsyNF0gJiBEQVNEX1NJTV9NU0dfVE9fT1ApIHx8IChzZW5zZVsxXSAmIDB4MTApKSB7Ci0KIAkJLyogcHJpbnQgU0lNIFNSQyBmcm9tIFJlZkNvZGUgKi8KLQkJREVWX01FU1NBR0UoS0VSTl9FUlIsIGRldmljZSwgIlNJTSAtIFNSQzogIgotCQkJICAgICIlMDJ4JTAyeCUwMnglMDJ4Iiwgc2Vuc2VbMjJdLAorCQlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwgIlNJTSAtIFNSQzogIgorCQkJICAgICIlMDJ4JTAyeCUwMnglMDJ4XG4iLCBzZW5zZVsyMl0sCiAJCQkgICAgc2Vuc2VbMjNdLCBzZW5zZVsxMV0sIHNlbnNlWzEyXSk7CiAJfSBlbHNlIGlmIChzZW5zZVsyNF0gJiBEQVNEX1NJTV9MT0cpIHsKIAkJLyogcHJpbnQgU0lNIFNSQyBSZWZjb2RlICovCi0JCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiU0lNIC0gU1JDOiAiCi0JCQkgICAgIiUwMnglMDJ4JTAyeCUwMngiLCBzZW5zZVsyMl0sCisJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwgImxvZyBTSU0gLSBTUkM6ICIKKwkJCSAgICAiJTAyeCUwMnglMDJ4JTAyeFxuIiwgc2Vuc2VbMjJdLAogCQkJICAgIHNlbnNlWzIzXSwgc2Vuc2VbMTFdLCBzZW5zZVsxMl0pOwogCX0KIH0KQEAgLTIwNjMsMTQgKzIwODAsMTQgQEAKIAkJc3dpdGNoIChzZW5zZVsyNV0pIHsKIAogCQljYXNlIDB4MDA6CS8qIHN1Y2Nlc3MgLSB1c2UgZGVmYXVsdCBFUlAgZm9yIHJldHJpZXMgKi8KLQkJICAgICAgICBERVZfTUVTU0FHRShLRVJOX0RFQlVHLCBkZXZpY2UsICIlcyIsCisJCQlEQkZfREVWX0VWRU5UKERCRl9ERUJVRywgZGV2aWNlLCAiJXMiLAogCQkJCSAgICAiRVJQIGNhbGxlZCBmb3Igc3VjY2Vzc2Z1bCByZXF1ZXN0IgogCQkJCSAgICAiIC0ganVzdCByZXRyeSIpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSAweDAxOgkvKiBmYXRhbCBlcnJvciAqLwotCQkJREVWX01FU1NBR0UoS0VSTl9FUlIsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIlJldHJ5IG5vdCByZWNvbW1lbmRlZCAtIEZhdGFsIGVycm9yIik7CisJCQlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkVSUCBmYWlsZWQgZm9yIHRoZSBEQVNEXG4iKTsKIAogCQkJZXJwID0gZGFzZF8zOTkwX2VycF9jbGVhbnVwKGVycCwgREFTRF9DUVJfRkFJTEVEKTsKIAkJCWJyZWFrOwpAQCAtMjA4MCwxMyArMjA5NywxMCBAQAogCQkJZXJwID0gZGFzZF8zOTkwX2VycF9pbnRfcmVxKGVycCk7CiAJCQlicmVhazsKIAotCQljYXNlIDB4MEY6ICAvKiBsZW5ndGggbWlzbWF0Y2ggZHVyaW5nIHVwZGF0ZSB3cml0ZSBjb21tYW5kICovCi0JCQlERVZfTUVTU0FHRShLRVJOX0VSUiwgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAidXBkYXRlIHdyaXRlIGNvbW1hbmQgZXJyb3IgLSBzaG91bGQgbm90ICIKLQkJCQkgICAgImhhcHBlbjtcbiIKLQkJCQkgICAgIlBsZWFzZSBzZW5kIHRoaXMgbWVzc2FnZSB0b2dldGhlciB3aXRoICIKLQkJCQkgICAgInRoZSBhYm92ZSBzZW5zZSBkYXRhIHRvIGxpbnV4MzkwQGRlLiIKLQkJCQkgICAgImlibS5jb20iKTsKKwkJY2FzZSAweDBGOiAgLyogbGVuZ3RoIG1pc21hdGNoIGR1cmluZyB1cGRhdGUgd3JpdGUgY29tbWFuZAorCQkJICAgICAgIGludGVybmFsIGVycm9yIDA4IC0gdXBkYXRlIHdyaXRlIGNvbW1hbmQgZXJyb3IqLworCQkJZGV2X2VycigmZGV2aWNlLT5jZGV2LT5kZXYsICJBbiBlcnJvciBvY2N1cnJlZCBpbiB0aGUgIgorCQkJCSJEQVNEIGRldmljZSBkcml2ZXIsIHJlYXNvbj0lc1xuIiwgIjA4Iik7CiAKIAkJCWVycCA9IGRhc2RfMzk5MF9lcnBfY2xlYW51cChlcnAsIERBU0RfQ1FSX0ZBSUxFRCk7CiAJCQlicmVhazsKQEAgLTIwOTUsMTMgKzIxMDksMTIgQEAKIAkJCWVycCA9IGRhc2RfMzk5MF9lcnBfYWN0aW9uXzEwXzMyKGVycCwgc2Vuc2UpOwogCQkJYnJlYWs7CiAKLQkJY2FzZSAweDE1OgkvKiBuZXh0IHRyYWNrIG91dHNpZGUgZGVmaW5lZCBleHRlbmQgKi8KLQkJCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJuZXh0IHRyYWNrIG91dHNpZGUgZGVmaW5lZCBleHRlbmQgLSAiCi0JCQkJICAgICJzaG91bGQgbm90IGhhcHBlbjtcbiIKLQkJCQkgICAgIlBsZWFzZSBzZW5kIHRoaXMgbWVzc2FnZSB0b2dldGhlciB3aXRoICIKLQkJCQkgICAgInRoZSBhYm92ZSBzZW5zZSBkYXRhIHRvIGxpbnV4MzkwQGRlLiIKLQkJCQkgICAgImlibS5jb20iKTsKKwkJY2FzZSAweDE1OgkvKiBuZXh0IHRyYWNrIG91dHNpZGUgZGVmaW5lZCBleHRlbmQKKwkJCQkgICBpbnRlcm5hbCBlcnJvciAwNyAtIFRoZSBuZXh0IHRyYWNrIGlzIG5vdAorCQkJCSAgIHdpdGhpbiB0aGUgZGVmaW5lZCBzdG9yYWdlIGV4dGVudCAqLworCQkJZGV2X2VycigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJIkFuIGVycm9yIG9jY3VycmVkIGluIHRoZSBEQVNEIGRldmljZSBkcml2ZXIsICIKKwkJCQkicmVhc29uPSVzXG4iLCAiMDciKTsKIAogCQkJZXJwID0gZGFzZF8zOTkwX2VycF9jbGVhbnVwKGVycCwgREFTRF9DUVJfRkFJTEVEKTsKIAkJCWJyZWFrOwpAQCAtMjExMiw5ICsyMTI1LDkgQEAKIAkJCWJyZWFrOwogCiAJCWNhc2UgMHgxQzoJLyogaW52YWxpZCBkYXRhICovCi0JCQlERVZfTUVTU0FHRShLRVJOX0VNRVJHLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfZW1lcmcoJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRGF0YSByZWNvdmVyZWQgZHVyaW5nIHJldHJ5IHdpdGggUENJICIKLQkJCQkgICAgImZldGNoIG1vZGUgYWN0aXZlIik7CisJCQkJICAgICJmZXRjaCBtb2RlIGFjdGl2ZVxuIik7CiAKIAkJCS8qIG5vdCBwb3NzaWJsZSB0byBoYW5kbGUgdGhpcyBzaXR1YXRpb24gaW4gTGludXggKi8KIAkJCXBhbmljCkBAIC0yMTIzLDcgKzIxMzYsNyBAQAogCQkJYnJlYWs7CiAKIAkJY2FzZSAweDFEOgkvKiBzdGF0ZS1jaGFuZ2UgcGVuZGluZyAqLwotCQkJREVWX01FU1NBR0UoS0VSTl9ERUJVRywgZGV2aWNlLCAiJXMiLAorCQkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiJXMiLAogCQkJCSAgICAiQSBTdGF0ZSBjaGFuZ2UgcGVuZGluZyBjb25kaXRpb24gZXhpc3RzICIKIAkJCQkgICAgImZvciB0aGUgc3Vic3lzdGVtIG9yIGRldmljZSIpOwogCkBAIC0yMTMxLDcgKzIxNDQsNyBAQAogCQkJYnJlYWs7CiAKIAkJY2FzZSAweDFFOgkvKiBidXN5ICovCi0gICAgICAgICAgICAgICAgICAgICAgICBERVZfTUVTU0FHRShLRVJOX0RFQlVHLCBkZXZpY2UsICIlcyIsCisJCQlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCiAJCQkJICAgICJCdXN5IGNvbmRpdGlvbiBleGlzdHMgIgogCQkJCSAgICAiZm9yIHRoZSBzdWJzeXN0ZW0gb3IgZGV2aWNlIik7CiAgICAgICAgICAgICAgICAgICAgICAgICBlcnAgPSBkYXNkXzM5OTBfZXJwX2FjdGlvbl80KGVycCwgc2Vuc2UpOwpAQCAtMjE3MSw5ICsyMTg0LDkgQEAKIHsKIAlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSA9IGVycC0+c3RhcnRkZXY7CiAKLQlpZiAoZXJwLT5yZWZlcnMtPmlyYi5zY3N3LmNtZC5jc3RhdCAmIChTQ0hOX1NUQVRfSU5URl9DVFJMX0NISworCWlmIChzY3N3X2NzdGF0KCZlcnAtPnJlZmVycy0+aXJiLnNjc3cpICYgKFNDSE5fU1RBVF9JTlRGX0NUUkxfQ0hLCiAJCQkJCSAgIHwgU0NITl9TVEFUX0NITl9DVFJMX0NISykpIHsKLQkJREVWX01FU1NBR0UoS0VSTl9ERUJVRywgZGV2aWNlLCAiJXMiLAorCQlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCiAJCQkgICAgImNoYW5uZWwgb3IgaW50ZXJmYWNlIGNvbnRyb2wgY2hlY2siKTsKIAkJZXJwID0gZGFzZF8zOTkwX2VycF9hY3Rpb25fNChlcnAsIE5VTEwpOwogCX0KQEAgLTIxOTMsMjEgKzIyMDYsMjMgQEAKICAqICAgZXJwX25ldwkJY29udGVucyB3YXMgcG9zc2libHkgbW9kaWZpZWQKICAqLwogc3RhdGljIHN0cnVjdCBkYXNkX2Njd19yZXEgKgotZGFzZF8zOTkwX2VycF9pbnNwZWN0KHN0cnVjdCBkYXNkX2Njd19yZXEgKiBlcnApCitkYXNkXzM5OTBfZXJwX2luc3BlY3Qoc3RydWN0IGRhc2RfY2N3X3JlcSAqZXJwKQogewogCiAJc3RydWN0IGRhc2RfY2N3X3JlcSAqZXJwX25ldyA9IE5VTEw7Ci0JLyogc2Vuc2UgZGF0YSBhcmUgbG9jYXRlZCBpbiB0aGUgcmVmZXJzIHJlY29yZCBvZiB0aGUgKi8KLQkvKiBhbHJlYWR5IHNldCB1cCBuZXcgRVJQICEJCQkgICAgICAqLwotCWNoYXIgKnNlbnNlID0gZXJwLT5yZWZlcnMtPmlyYi5lY3c7CisJY2hhciAqc2Vuc2U7CiAKIAkvKiBpZiB0aGlzIHByb2JsZW0gb2NjdXJlZCBvbiBhbiBhbGlhcyByZXRyeSBvbiBiYXNlICovCiAJZXJwX25ldyA9IGRhc2RfMzk5MF9lcnBfaW5zcGVjdF9hbGlhcyhlcnApOwogCWlmIChlcnBfbmV3KQogCQlyZXR1cm4gZXJwX25ldzsKIAotCS8qIGNoZWNrIGlmIG5vIGNvbmN1cnJlbnQgc2VucyBpcyBhdmFpbGFibGUgKi8KLQlpZiAoIWVycC0+cmVmZXJzLT5pcmIuZXN3LmVzdzAuZXJ3LmNvbnMpCisJLyogc2Vuc2UgZGF0YSBhcmUgbG9jYXRlZCBpbiB0aGUgcmVmZXJzIHJlY29yZCBvZiB0aGUKKwkgKiBhbHJlYWR5IHNldCB1cCBuZXcgRVJQICEKKwkgKiBjaGVjayBpZiBjb25jdXJyZW50IHNlbnMgaXMgYXZhaWxhYmxlCisJICovCisJc2Vuc2UgPSBkYXNkX2dldF9zZW5zZSgmZXJwLT5yZWZlcnMtPmlyYik7CisJaWYgKCFzZW5zZSkKIAkJZXJwX25ldyA9IGRhc2RfMzk5MF9lcnBfY29udHJvbF9jaGVjayhlcnApOwogCS8qIGRpc3Rpbmd1aXNoIGJldHdlZW4gMjQgYW5kIDMyIGJ5dGUgc2Vuc2UgZGF0YSAqLwogCWVsc2UgaWYgKHNlbnNlWzI3XSAmIERBU0RfU0VOU0VfQklUXzApIHsKQEAgLTIyMzEsNyArMjI0NiwxMSBAQAogICogREVTQ1JJUFRJT04KICAqICAgVGhpcyBmdW50aW9uIGFkZHMgYW4gYWRkaXRpb25hbCByZXF1ZXN0IGJsb2NrIChFUlApIHRvIHRoZSBoZWFkIG9mCiAgKiAgIHRoZSBnaXZlbiBjcXIgKG9yIGVycCkuCi0gKiAgIFRoaXMgZXJwIGlzIGluaXRpYWxpemVkIGFzIGFuIGRlZmF1bHQgZXJwIChyZXRyeSBUSUMpCisgKiAgIEZvciBhIGNvbW1hbmQgbW9kZSBjcXIgdGhlIGVycCBpcyBpbml0aWFsaXplZCBhcyBhbiBkZWZhdWx0IGVycAorICogICAocmV0cnkgVElDKS4KKyAqICAgRm9yIHRyYW5zcG9ydCBtb2RlIHdlIG1ha2UgYSBjb3B5IG9mIHRoZSBvcmlnaW5hbCBUQ1cgKHBvaW50cyB0bworICogICB0aGUgb3JpZ2luYWwgVENDQiwgVElEQUxzLCBldGMuKSBidXQgZ2l2ZSBpdCBhIGZyZXNoCisgKiAgIFRTQiBzbyB0aGUgb3JpZ2luYWwgc2Vuc2UgZGF0YSB3aWxsIG5vdCBiZSBjaGFuZ2VkLgogICoKICAqIFBBUkFNRVRFUgogICogICBjcXIJCWhlYWQgb2YgdGhlIGN1cnJlbnQgRVJQLWNoYWluIChvciBzaW5nbGUgY3FyIGlmCkBAIC0yMjM5LDI1ICsyMjU4LDM1IEBACiAgKiBSRVRVUk4gVkFMVUVTCiAgKiAgIGVycAkJcG9pbnRlciB0byBuZXcgRVJQLWNoYWluIGhlYWQKICAqLwotc3RhdGljIHN0cnVjdCBkYXNkX2Njd19yZXEgKgotZGFzZF8zOTkwX2VycF9hZGRfZXJwKHN0cnVjdCBkYXNkX2Njd19yZXEgKiBjcXIpCitzdGF0aWMgc3RydWN0IGRhc2RfY2N3X3JlcSAqZGFzZF8zOTkwX2VycF9hZGRfZXJwKHN0cnVjdCBkYXNkX2Njd19yZXEgKmNxcikKIHsKIAogCXN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlID0gY3FyLT5zdGFydGRldjsKIAlzdHJ1Y3QgY2N3MSAqY2N3OworCXN0cnVjdCBkYXNkX2Njd19yZXEgKmVycDsKKwlpbnQgY3BsZW5ndGgsIGRhdGFzaXplOworCXN0cnVjdCB0Y3cgKnRjdzsKKwlzdHJ1Y3QgdHNiICp0c2I7CisKKwlpZiAoY3FyLT5jcG1vZGUgPT0gMSkgeworCQljcGxlbmd0aCA9IDA7CisJCWRhdGFzaXplID0gc2l6ZW9mKHN0cnVjdCB0Y3cpICsgc2l6ZW9mKHN0cnVjdCB0c2IpOworCX0gZWxzZSB7CisJCWNwbGVuZ3RoID0gMjsKKwkJZGF0YXNpemUgPSAwOworCX0KIAogCS8qIGFsbG9jYXRlIGFkZGl0aW9uYWwgcmVxdWVzdCBibG9jayAqLwotCXN0cnVjdCBkYXNkX2Njd19yZXEgKmVycDsKLQotCWVycCA9IGRhc2RfYWxsb2NfZXJwX3JlcXVlc3QoKGNoYXIgKikgJmNxci0+bWFnaWMsIDIsIDAsIGRldmljZSk7CisJZXJwID0gZGFzZF9hbGxvY19lcnBfcmVxdWVzdCgoY2hhciAqKSAmY3FyLT5tYWdpYywKKwkJCQkgICAgIGNwbGVuZ3RoLCBkYXRhc2l6ZSwgZGV2aWNlKTsKIAlpZiAoSVNfRVJSKGVycCkpIHsKICAgICAgICAgICAgICAgICBpZiAoY3FyLT5yZXRyaWVzIDw9IDApIHsKLQkJICAgICAgICBERVZfTUVTU0FHRShLRVJOX0VSUiwgZGV2aWNlLCAiJXMiLAorCQkJREJGX0RFVl9FVkVOVChEQkZfRVJSLCBkZXZpY2UsICIlcyIsCiAJCQkJICAgICJVbmFibGUgdG8gYWxsb2NhdGUgRVJQIHJlcXVlc3QiKTsKIAkJCWNxci0+c3RhdHVzID0gREFTRF9DUVJfRkFJTEVEOwogICAgICAgICAgICAgICAgICAgICAgICAgY3FyLT5zdG9wY2xrID0gZ2V0X2Nsb2NrICgpOwogCQl9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgREVWX01FU1NBR0UgKEtFUk5fRVJSLCBkZXZpY2UsCisJCQlEQkZfREVWX0VWRU5UKERCRl9FUlIsIGRldmljZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVW5hYmxlIHRvIGFsbG9jYXRlIEVSUCByZXF1ZXN0ICIKIAkJCQkgICAgICIoJWkgcmV0cmllcyBsZWZ0KSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3FyLT5yZXRyaWVzKTsKQEAgLTIyNjYsMTMgKzIyOTUsMjQgQEAKIAkJcmV0dXJuIGNxcjsKIAl9CiAKLQkvKiBpbml0aWFsaXplIHJlcXVlc3Qgd2l0aCBkZWZhdWx0IFRJQyB0byBjdXJyZW50IEVSUC9DUVIgKi8KLQljY3cgPSBlcnAtPmNwYWRkcjsKLQljY3ctPmNtZF9jb2RlID0gQ0NXX0NNRF9OT09QOwotCWNjdy0+ZmxhZ3MgPSBDQ1dfRkxBR19DQzsKLQljY3crKzsKLQljY3ctPmNtZF9jb2RlID0gQ0NXX0NNRF9USUM7Ci0JY2N3LT5jZGEgICAgICA9IChsb25nKShjcXItPmNwYWRkcik7CisJaWYgKGNxci0+Y3Btb2RlID09IDEpIHsKKwkJLyogbWFrZSBhIHNoYWxsb3cgY29weSBvZiB0aGUgb3JpZ2luYWwgdGN3IGJ1dCBzZXQgbmV3IHRzYiAqLworCQllcnAtPmNwbW9kZSA9IDE7CisJCWVycC0+Y3BhZGRyID0gZXJwLT5kYXRhOworCQl0Y3cgPSBlcnAtPmRhdGE7CisJCXRzYiA9IChzdHJ1Y3QgdHNiICopICZ0Y3dbMV07CisJCSp0Y3cgPSAqKChzdHJ1Y3QgdGN3ICopY3FyLT5jcGFkZHIpOworCQl0Y3ctPnRzYiA9IChsb25nKXRzYjsKKwl9IGVsc2UgeworCQkvKiBpbml0aWFsaXplIHJlcXVlc3Qgd2l0aCBkZWZhdWx0IFRJQyB0byBjdXJyZW50IEVSUC9DUVIgKi8KKwkJY2N3ID0gZXJwLT5jcGFkZHI7CisJCWNjdy0+Y21kX2NvZGUgPSBDQ1dfQ01EX05PT1A7CisJCWNjdy0+ZmxhZ3MgPSBDQ1dfRkxBR19DQzsKKwkJY2N3Kys7CisJCWNjdy0+Y21kX2NvZGUgPSBDQ1dfQ01EX1RJQzsKKwkJY2N3LT5jZGEgICAgICA9IChsb25nKShjcXItPmNwYWRkcik7CisJfQorCiAJZXJwLT5mdW5jdGlvbiA9IGRhc2RfMzk5MF9lcnBfYWRkX2VycDsKIAllcnAtPnJlZmVycyAgID0gY3FyOwogCWVycC0+c3RhcnRkZXYgPSBkZXZpY2U7CkBAIC0yMjgyLDcgKzIzMjIsNiBAQAogCWVycC0+ZXhwaXJlcyAgPSAwOwogCWVycC0+cmV0cmllcyAgPSAyNTY7CiAJZXJwLT5idWlsZGNsayA9IGdldF9jbG9jaygpOwotCiAJZXJwLT5zdGF0dXMgPSBEQVNEX0NRUl9GSUxMRUQ7CiAKIAlyZXR1cm4gZXJwOwpAQCAtMjM0MCwyOCArMjM3OSwzMyBAQAogICogICBtYXRjaAkJJ2Jvb2xlYW4nIGZvciBtYXRjaCBmb3VuZAogICoJCQlyZXR1cm5zIDEgaWYgbWF0Y2ggZm91bmQsIG90aGVyd2lzZSAwLgogICovCi1zdGF0aWMgaW50Ci1kYXNkXzM5OTBfZXJwX2Vycm9yX21hdGNoKHN0cnVjdCBkYXNkX2Njd19yZXEgKmNxcjEsIHN0cnVjdCBkYXNkX2Njd19yZXEgKmNxcjIpCitzdGF0aWMgaW50IGRhc2RfMzk5MF9lcnBfZXJyb3JfbWF0Y2goc3RydWN0IGRhc2RfY2N3X3JlcSAqY3FyMSwKKwkJCQkgICAgIHN0cnVjdCBkYXNkX2Njd19yZXEgKmNxcjIpCiB7CisJY2hhciAqc2Vuc2UxLCAqc2Vuc2UyOwogCiAJaWYgKGNxcjEtPnN0YXJ0ZGV2ICE9IGNxcjItPnN0YXJ0ZGV2KQogCQlyZXR1cm4gMDsKIAotCWlmIChjcXIxLT5pcmIuZXN3LmVzdzAuZXJ3LmNvbnMgIT0gY3FyMi0+aXJiLmVzdy5lc3cwLmVydy5jb25zKQotCQlyZXR1cm4gMDsKKwlzZW5zZTEgPSBkYXNkX2dldF9zZW5zZSgmY3FyMS0+aXJiKTsKKwlzZW5zZTIgPSBkYXNkX2dldF9zZW5zZSgmY3FyMi0+aXJiKTsKIAotCWlmICgoY3FyMS0+aXJiLmVzdy5lc3cwLmVydy5jb25zID09IDApICYmCi0JICAgIChjcXIyLT5pcmIuZXN3LmVzdzAuZXJ3LmNvbnMgPT0gMCkpCXsKLQkJaWYgKChjcXIxLT5pcmIuc2Nzdy5jbWQuY3N0YXQgJiAoU0NITl9TVEFUX0lOVEZfQ1RSTF9DSEsgfAotCQkJCQkgICAgIFNDSE5fU1RBVF9DSE5fQ1RSTF9DSEspKSA9PQotCQkgICAgKGNxcjItPmlyYi5zY3N3LmNtZC5jc3RhdCAmIChTQ0hOX1NUQVRfSU5URl9DVFJMX0NISyB8Ci0JCQkJCSAgICAgU0NITl9TVEFUX0NITl9DVFJMX0NISykpKQorCS8qIG9uZSByZXF1ZXN0IGhhcyBzZW5zZSBkYXRhLCB0aGUgb3RoZXIgbm90IC0+IG5vIG1hdGNoLCByZXR1cm4gMCAqLworCWlmICghc2Vuc2UxICE9ICFzZW5zZTIpCisJCXJldHVybiAwOworCS8qIG5vIHNlbnNlIGRhdGEgaW4gYm90aCBjYXNlcyAtPiBjaGVjayBjc3RhdCBmb3IgSUZDQyAqLworCWlmICghc2Vuc2UxICYmICFzZW5zZTIpCXsKKwkJaWYgKChzY3N3X2NzdGF0KCZjcXIxLT5pcmIuc2NzdykgJiAoU0NITl9TVEFUX0lOVEZfQ1RSTF9DSEsgfAorCQkJCQkJICAgIFNDSE5fU1RBVF9DSE5fQ1RSTF9DSEspKSA9PQorCQkgICAgKHNjc3dfY3N0YXQoJmNxcjItPmlyYi5zY3N3KSAmIChTQ0hOX1NUQVRfSU5URl9DVFJMX0NISyB8CisJCQkJCQkgICAgU0NITl9TVEFUX0NITl9DVFJMX0NISykpKQogCQkJcmV0dXJuIDE7IC8qIG1hdGNoIHdpdGggaWZjYyovCiAJfQogCS8qIGNoZWNrIHNlbnNlIGRhdGE7IGJ5dGUgMC0yLDI1LDI3ICovCi0JaWYgKCEoKG1lbWNtcCAoY3FyMS0+aXJiLmVjdywgY3FyMi0+aXJiLmVjdywgMykgPT0gMCkgJiYKLQkgICAgICAoY3FyMS0+aXJiLmVjd1syN10gPT0gY3FyMi0+aXJiLmVjd1syN10pICYmCi0JICAgICAgKGNxcjEtPmlyYi5lY3dbMjVdID09IGNxcjItPmlyYi5lY3dbMjVdKSkpIHsKKwlpZiAoIShzZW5zZTEgJiYgc2Vuc2UyICYmCisJICAgICAgKG1lbWNtcChzZW5zZTEsIHNlbnNlMiwgMykgPT0gMCkgJiYKKwkgICAgICAoc2Vuc2UxWzI3XSA9PSBzZW5zZTJbMjddKSAmJgorCSAgICAgIChzZW5zZTFbMjVdID09IHNlbnNlMlsyNV0pKSkgewogCiAJCXJldHVybiAwOwkvKiBzZW5zZSBkb2Vzbid0IG1hdGNoICovCiAJfQpAQCAtMjQzNCw3ICsyNDc4LDcgQEAKIHsKIAogCXN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlID0gZXJwLT5zdGFydGRldjsKLQljaGFyICpzZW5zZSA9IGVycC0+aXJiLmVjdzsKKwljaGFyICpzZW5zZSA9IGRhc2RfZ2V0X3NlbnNlKCZlcnAtPmlyYik7CiAKIAkvKiBjaGVjayBmb3IgMjQgYnl0ZSBzZW5zZSBFUlAgKi8KIAlpZiAoKGVycC0+ZnVuY3Rpb24gPT0gZGFzZF8zOTkwX2VycF9idXNfb3V0KSB8fApAQCAtMjQ0OSw3ICsyNDkzLDcgQEAKIAkJLyogcHJlcGFyZSBlcnAgZm9yIHJldHJ5IG9uIGRpZmZlcmVudCBjaGFubmVsIHBhdGggKi8KIAkJZXJwID0gZGFzZF8zOTkwX2VycF9hY3Rpb25fMShlcnApOwogCi0JCWlmICghKHNlbnNlWzJdICYgREFTRF9TRU5TRV9CSVRfMCkpIHsKKwkJaWYgKHNlbnNlICYmICEoc2Vuc2VbMl0gJiBEQVNEX1NFTlNFX0JJVF8wKSkgewogCiAJCQkvKiBpc3N1ZSBhIERpYWdub3N0aWMgQ29udHJvbCBjb21tYW5kIHdpdGggYW4KIAkJCSAqIEluaGliaXQgV3JpdGUgc3ViY29tbWFuZCAqLwpAQCAtMjQ3MSw3ICsyNTE1LDcgQEAKIAkJCQkJYnJlYWs7CiAJCQkJfQogCQkJZGVmYXVsdDoKLQkJCQlERVZfTUVTU0FHRShLRVJOX0RFQlVHLCBkZXZpY2UsCisJCQkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLAogCQkJCQkgICAgImludmFsaWQgc3ViY29tbWFuZCBtb2RpZmllciAweCV4ICIKIAkJCQkJICAgICJmb3IgRGlhZ25vc3RpYyBDb250cm9sIENvbW1hbmQiLAogCQkJCQkgICAgc2Vuc2VbMjVdKTsKQEAgLTI0NzksMTkgKzI1MjMsMjEgQEAKIAkJfQogCiAJCS8qIGNoZWNrIGZvciAzMiBieXRlIHNlbnNlIEVSUCAqLwotCX0gZWxzZSBpZiAoKGVycC0+ZnVuY3Rpb24gPT0gZGFzZF8zOTkwX2VycF9jb21wb3VuZF9yZXRyeSkgfHwKLQkJICAgKGVycC0+ZnVuY3Rpb24gPT0gZGFzZF8zOTkwX2VycF9jb21wb3VuZF9wYXRoKSB8fAotCQkgICAoZXJwLT5mdW5jdGlvbiA9PSBkYXNkXzM5OTBfZXJwX2NvbXBvdW5kX2NvZGUpIHx8Ci0JCSAgIChlcnAtPmZ1bmN0aW9uID09IGRhc2RfMzk5MF9lcnBfY29tcG91bmRfY29uZmlnKSkgeworCX0gZWxzZSBpZiAoc2Vuc2UgJiYKKwkJICAgKChlcnAtPmZ1bmN0aW9uID09IGRhc2RfMzk5MF9lcnBfY29tcG91bmRfcmV0cnkpIHx8CisJCSAgICAoZXJwLT5mdW5jdGlvbiA9PSBkYXNkXzM5OTBfZXJwX2NvbXBvdW5kX3BhdGgpIHx8CisJCSAgICAoZXJwLT5mdW5jdGlvbiA9PSBkYXNkXzM5OTBfZXJwX2NvbXBvdW5kX2NvZGUpIHx8CisJCSAgICAoZXJwLT5mdW5jdGlvbiA9PSBkYXNkXzM5OTBfZXJwX2NvbXBvdW5kX2NvbmZpZykpKSB7CiAKIAkJZXJwID0gZGFzZF8zOTkwX2VycF9jb21wb3VuZChlcnAsIHNlbnNlKTsKIAogCX0gZWxzZSB7Ci0JCS8qIE5vIHJldHJ5IGxlZnQgYW5kIG5vIGFkZGl0aW9uYWwgc3BlY2lhbCBoYW5kbGluZyAqLwotCQkvKm5lY2Vzc2FyeSAqLwotCQlERVZfTUVTU0FHRShLRVJOX0VSUiwgZGV2aWNlLAotCQkJICAgICJubyByZXRyaWVzIGxlZnQgZm9yIGVycCAlcCAtICIKLQkJCSAgICAic2V0IHN0YXR1cyB0byBGQUlMRUQiLCBlcnApOworCQkvKgorCQkgKiBObyByZXRyeSBsZWZ0IGFuZCBubyBhZGRpdGlvbmFsIHNwZWNpYWwgaGFuZGxpbmcKKwkJICogbmVjZXNzYXJ5CisJCSAqLworCQlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCSJFUlAgJXAgaGFzIHJ1biBvdXQgb2YgcmV0cmllcyBhbmQgZmFpbGVkXG4iLCBlcnApOwogCiAJCWVycC0+c3RhdHVzID0gREFTRF9DUVJfRkFJTEVEOwogCX0KQEAgLTI1NDgsMjQgKzI1OTQsMjUgQEAKIAogCWlmIChlcnAtPnJldHJpZXMgPiAwKSB7CiAKLQkJY2hhciAqc2Vuc2UgPSBlcnAtPnJlZmVycy0+aXJiLmVjdzsKKwkJY2hhciAqc2Vuc2UgPSBkYXNkX2dldF9zZW5zZSgmZXJwLT5yZWZlcnMtPmlyYik7CiAKIAkJLyogY2hlY2sgZm9yIHNwZWNpYWwgcmV0cmllcyAqLwotCQlpZiAoZXJwLT5mdW5jdGlvbiA9PSBkYXNkXzM5OTBfZXJwX2FjdGlvbl80KSB7CisJCWlmIChzZW5zZSAmJiBlcnAtPmZ1bmN0aW9uID09IGRhc2RfMzk5MF9lcnBfYWN0aW9uXzQpIHsKIAogCQkJZXJwID0gZGFzZF8zOTkwX2VycF9hY3Rpb25fNChlcnAsIHNlbnNlKTsKIAotCQl9IGVsc2UgaWYgKGVycC0+ZnVuY3Rpb24gPT0gZGFzZF8zOTkwX2VycF9hY3Rpb25fMUJfMzIpIHsKKwkJfSBlbHNlIGlmIChzZW5zZSAmJgorCQkJICAgZXJwLT5mdW5jdGlvbiA9PSBkYXNkXzM5OTBfZXJwX2FjdGlvbl8xQl8zMikgewogCiAJCQllcnAgPSBkYXNkXzM5OTBfdXBkYXRlXzFCKGVycCwgc2Vuc2UpOwogCi0JCX0gZWxzZSBpZiAoZXJwLT5mdW5jdGlvbiA9PSBkYXNkXzM5OTBfZXJwX2ludF9yZXEpIHsKKwkJfSBlbHNlIGlmIChzZW5zZSAmJiBlcnAtPmZ1bmN0aW9uID09IGRhc2RfMzk5MF9lcnBfaW50X3JlcSkgewogCiAJCQllcnAgPSBkYXNkXzM5OTBfZXJwX2ludF9yZXEoZXJwKTsKIAogCQl9IGVsc2UgewogCQkJLyogc2ltcGxlIHJldHJ5CSAgKi8KLQkJCURFVl9NRVNTQUdFKEtFUk5fREVCVUcsIGRldmljZSwKKwkJCURCRl9ERVZfRVZFTlQoREJGX0RFQlVHLCBkZXZpY2UsCiAJCQkJICAgICIlaSByZXRyaWVzIGxlZnQgZm9yIGVycCAlcCIsCiAJCQkJICAgIGVycC0+cmV0cmllcywgZXJwKTsKIApAQCAtMjYwOSwyNCArMjY1NiwyNCBAQAogCiAJaWYgKGRldmljZS0+ZmVhdHVyZXMgJiBEQVNEX0ZFQVRVUkVfRVJQTE9HKSB7CiAJCS8qIHByaW50IGN1cnJlbnQgZXJwX2NoYWluICovCi0JCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsICIlcyIsCi0JCQkgICAgIkVSUCBjaGFpbiBhdCBCRUdJTk5JTkcgb2YgRVJQLUFDVElPTiIpOworCQlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCSAgICAiRVJQIGNoYWluIGF0IEJFR0lOTklORyBvZiBFUlAtQUNUSU9OXG4iKTsKIAkJZm9yICh0ZW1wX2VycCA9IGNxcjsKIAkJICAgICB0ZW1wX2VycCAhPSBOVUxMOyB0ZW1wX2VycCA9IHRlbXBfZXJwLT5yZWZlcnMpIHsKIAotCQkJREVWX01FU1NBR0UoS0VSTl9FUlIsIGRldmljZSwKLQkJCQkgICAgIiAgIGVycCAlcCAoJTAyeCkgcmVmZXJzIHRvICVwIiwKKwkJCWRldl9lcnIoJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAgICAiRVJQICVwICglMDJ4KSByZWZlcnMgdG8gJXBcbiIsCiAJCQkJICAgIHRlbXBfZXJwLCB0ZW1wX2VycC0+c3RhdHVzLAogCQkJCSAgICB0ZW1wX2VycC0+cmVmZXJzKTsKIAkJfQogCX0KIAogCS8qIGRvdWJsZS1jaGVjayBpZiBjdXJyZW50IGVycC9jcXIgd2FzIHN1Y2Nlc3NmdWwgKi8KLQlpZiAoKGNxci0+aXJiLnNjc3cuY21kLmNzdGF0ID09IDB4MDApICYmCi0JICAgIChjcXItPmlyYi5zY3N3LmNtZC5kc3RhdCA9PQorCWlmICgoc2Nzd19jc3RhdCgmY3FyLT5pcmIuc2NzdykgPT0gMHgwMCkgJiYKKwkgICAgKHNjc3dfZHN0YXQoJmNxci0+aXJiLnNjc3cpID09CiAJICAgICAoREVWX1NUQVRfQ0hOX0VORCB8IERFVl9TVEFUX0RFVl9FTkQpKSkgewogCi0JCURFVl9NRVNTQUdFKEtFUk5fREVCVUcsIGRldmljZSwKKwkJREJGX0RFVl9FVkVOVChEQkZfREVCVUcsIGRldmljZSwKIAkJCSAgICAiRVJQIGNhbGxlZCBmb3Igc3VjY2Vzc2Z1bCByZXF1ZXN0ICVwIgogCQkJICAgICIgLSBOTyBFUlAgbmVjZXNzYXJ5IiwgY3FyKTsKIApAQCAtMjY0OCwxMyArMjY5NSwxMyBAQAogCiAJaWYgKGRldmljZS0+ZmVhdHVyZXMgJiBEQVNEX0ZFQVRVUkVfRVJQTE9HKSB7CiAJCS8qIHByaW50IGN1cnJlbnQgZXJwX2NoYWluICovCi0JCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsICIlcyIsCi0JCQkgICAgIkVSUCBjaGFpbiBhdCBFTkQgb2YgRVJQLUFDVElPTiIpOworCQlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCSAgICAiRVJQIGNoYWluIGF0IEVORCBvZiBFUlAtQUNUSU9OXG4iKTsKIAkJZm9yICh0ZW1wX2VycCA9IGVycDsKIAkJICAgICB0ZW1wX2VycCAhPSBOVUxMOyB0ZW1wX2VycCA9IHRlbXBfZXJwLT5yZWZlcnMpIHsKIAotCQkJREVWX01FU1NBR0UoS0VSTl9FUlIsIGRldmljZSwKLQkJCQkgICAgIiAgIGVycCAlcCAoJTAyeCkgcmVmZXJzIHRvICVwIiwKKwkJCWRldl9lcnIoJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAgICAiRVJQICVwICglMDJ4KSByZWZlcnMgdG8gJXBcbiIsCiAJCQkJICAgIHRlbXBfZXJwLCB0ZW1wX2VycC0+c3RhdHVzLAogCQkJCSAgICB0ZW1wX2VycC0+cmVmZXJzKTsKIAkJfQpAQCAtMjY2Nyw2ICsyNzE0LDggQEAKIAkJbGlzdF9hZGRfdGFpbCgmZXJwLT5ibG9ja2xpc3QsICZjcXItPmJsb2NrbGlzdCk7CiAJfQogCisKKwogCXJldHVybiBlcnA7CiAKIH0JCQkJLyogZW5kIGRhc2RfMzk5MF9lcnBfYWN0aW9uICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9hbGlhcy5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfYWxpYXMuYwppbmRleCAyMDY3NmNkLi41YjdiYmM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9hbGlhcy5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2FsaWFzLmMKQEAgLTUsNiArNSw4IEBACiAgKiBBdXRob3Iocyk6IFN0ZWZhbiBXZWluaHViZXIgPHdlaW5AZGUuaWJtLmNvbT4KICAqLwogCisjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJkYXNkIgorCiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGFzbS9lYmNkaWMuaD4KICNpbmNsdWRlICJkYXNkX2ludC5oIgpAQCAtNTAzLDcgKzUwNSw3IEBACiAJICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmxjdS0+bG9jaywgZmxhZ3MpOwogCWlmIChyYyB8fCAobGN1LT5mbGFncyAmIE5FRURfVUFDX1VQREFURSkpIHsKLQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICJjb3VsZCBub3QgdXBkYXRlIgorCQlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICJjb3VsZCBub3QgdXBkYXRlIgogCQkJICAgICIgYWxpYXMgZGF0YSBpbiBsY3UgKHJjID0gJWQpLCByZXRyeSBsYXRlciIsIHJjKTsKIAkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZsY3UtPnJ1YWNfZGF0YS5kd29yaywgMzAqSFopOwogCX0gZWxzZSB7CkBAIC02NDYsMTQgKzY0OCwxNiBAQAogewogCXN0cnVjdCBkYXNkX2Njd19yZXEgKmNxcjsKIAlpbnQgcmMgPSAwOworCXN0cnVjdCBjY3cxICpjY3c7CiAKIAljcXIgPSBsY3UtPnJzdV9jcXI7CiAJc3RybmNweSgoY2hhciAqKSAmY3FyLT5tYWdpYywgIkVDS0QiLCA0KTsKIAlBU0NFQkMoKGNoYXIgKikgJmNxci0+bWFnaWMsIDQpOwotCWNxci0+Y3BhZGRyLT5jbWRfY29kZSA9IERBU0RfRUNLRF9DQ1dfUlNDSzsKLQljcXItPmNwYWRkci0+ZmxhZ3MgPSAwIDsKLQljcXItPmNwYWRkci0+Y291bnQgPSAxNjsKLQljcXItPmNwYWRkci0+Y2RhID0gKF9fdTMyKShhZGRyX3QpIGNxci0+ZGF0YTsKKwljY3cgPSBjcXItPmNwYWRkcjsKKwljY3ctPmNtZF9jb2RlID0gREFTRF9FQ0tEX0NDV19SU0NLOworCWNjdy0+ZmxhZ3MgPSAwIDsKKwljY3ctPmNvdW50ID0gMTY7CisJY2N3LT5jZGEgPSAoX191MzIpKGFkZHJfdCkgY3FyLT5kYXRhOwogCSgoY2hhciAqKWNxci0+ZGF0YSlbMF0gPSByZWFzb247CiAKIAljbGVhcl9iaXQoREFTRF9DUVJfRkxBR1NfVVNFX0VSUCwgJmNxci0+ZmxhZ3MpOwpAQCAtODU1LDE2ICs4NTksMjUgQEAKIAlzdHJ1Y3QgYWxpYXNfbGN1ICpsY3U7CiAJY2hhciByZWFzb247CiAJc3RydWN0IGRhc2RfZWNrZF9wcml2YXRlICpwcml2YXRlOworCWNoYXIgKnNlbnNlOwogCiAJcHJpdmF0ZSA9IChzdHJ1Y3QgZGFzZF9lY2tkX3ByaXZhdGUgKikgZGV2aWNlLT5wcml2YXRlOwogCi0JcmVhc29uID0gaXJiLT5lY3dbOF07Ci0JREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyAleCIsCi0JCSAgICAiZWNrZCBoYW5kbGUgc3VtbWFyeSB1bml0IGNoZWNrOiByZWFzb24iLCByZWFzb24pOworCXNlbnNlID0gZGFzZF9nZXRfc2Vuc2UoaXJiKTsKKwlpZiAoc2Vuc2UpIHsKKwkJcmVhc29uID0gc2Vuc2VbOF07CisJCURCRl9ERVZfRVZFTlQoREJGX05PVElDRSwgZGV2aWNlLCAiJXMgJXgiLAorCQkJICAgICJlY2tkIGhhbmRsZSBzdW1tYXJ5IHVuaXQgY2hlY2s6IHJlYXNvbiIsIHJlYXNvbik7CisJfSBlbHNlIHsKKwkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJICAgICJlY2tkIGhhbmRsZSBzdW1tYXJ5IHVuaXQgY2hlY2s6IgorCQkJICAgICIgbm8gcmVhc29uIGNvZGUgYXZhaWxhYmxlIik7CisJCXJldHVybjsKKwl9CiAKIAlsY3UgPSBwcml2YXRlLT5sY3U7CiAJaWYgKCFsY3UpIHsKLQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKIAkJCSAgICAiZGV2aWNlIG5vdCByZWFkeSB0byBoYW5kbGUgc3VtbWFyeSIKIAkJCSAgICAiIHVuaXQgY2hlY2sgKG5vIGxjdSBzdHJ1Y3R1cmUpIik7CiAJCXJldHVybjsKQEAgLTg3Nyw3ICs4OTAsNyBAQAogCSAqIHRoZSBuZXh0IGludGVycnVwdCBvbiBhIGRpZmZlcmVudCBkZXZpY2UKIAkgKi8KIAlpZiAobGlzdF9lbXB0eSgmZGV2aWNlLT5hbGlhc19saXN0KSkgewotCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiJXMiLAogCQkJICAgICJkZXZpY2UgaXMgaW4gb2ZmbGluZSBwcm9jZXNzaW5nLCIKIAkJCSAgICAiIGRvbid0IGRvIHN1bW1hcnkgdW5pdCBjaGVjayBoYW5kbGluZyIpOwogCQlzcGluX3VubG9jaygmbGN1LT5sb2NrKTsKQEAgLTg4NSw3ICs4OTgsNyBAQAogCX0KIAlpZiAobGN1LT5zdWNfZGF0YS5kZXZpY2UpIHsKIAkJLyogYWxyZWFkeSBzY2hlZHVsZWQgb3IgcnVubmluZyAqLwotCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiJXMiLAogCQkJICAgICJwcmV2aW91cyBpbnN0YW5jZSBvZiBzdW1tYXJ5IHVuaXQgY2hlY2sgd29ya2VyIgogCQkJICAgICIgc3RpbGwgcGVuZGluZyIpOwogCQlzcGluX3VubG9jaygmbGN1LT5sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Rldm1hcC5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGV2bWFwLmMKaW5kZXggMzQzMzk5MC4uZTc3NjY2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGV2bWFwLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGV2bWFwLmMKQEAgLTEzLDYgKzEzLDggQEAKICAqCiAgKi8KIAorI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAiZGFzZCIKKwogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtNjcsNiArNjksOCBAQAogaW50IGRhc2RfYXV0b2RldGVjdCA9IDA7CS8qIGlzIHRydWUsIHdoZW4gYXV0b2RldGVjdGlvbiBpcyBhY3RpdmUgKi8KIGludCBkYXNkX25vcGF2ID0gMDsJCS8qIGlzIHRydWUsIHdoZW4gUEFWIGlzIGRpc2FibGVkICovCiBFWFBPUlRfU1lNQk9MX0dQTChkYXNkX25vcGF2KTsKK2ludCBkYXNkX25vZmN4OwkJCS8qIGRpc2FibGUgSGlnaCBQZXJmb3JtYW5jZSBGaWNvbiAqLworRVhQT1JUX1NZTUJPTF9HUEwoZGFzZF9ub2ZjeCk7CiAKIC8qCiAgKiBjaGFyICpkYXNkW10gaXMgaW50ZW5kZWQgdG8gaG9sZCB0aGUgcmFuZ2VzIHN1cHBsaWVkIGJ5IHRoZSBkYXNkPSBzdGF0ZW1lbnQKQEAgLTEyNSw2ICsxMjksNyBAQAogICogUmVhZCBhIGRldmljZSBidXNpZC9kZXZubyBmcm9tIGEgc3RyaW5nLgogICovCiBzdGF0aWMgaW50CisKIGRhc2RfYnVzaWQoY2hhciAqKnN0ciwgaW50ICppZDAsIGludCAqaWQxLCBpbnQgKmRldm5vKQogewogCWludCB2YWwsIG9sZF9zdHlsZTsKQEAgLTEzMiw4ICsxMzcsNyBAQAogCS8qIEludGVycHJldCBpcGxkZXYgYnVzaWQgKi8KIAlpZiAoc3RybmNtcChEQVNEX0lQTERFViwgKnN0ciwgc3RybGVuKERBU0RfSVBMREVWKSkgPT0gMCkgewogCQlpZiAoaXBsX2luZm8udHlwZSAhPSBJUExfVFlQRV9DQ1cpIHsKLQkJCU1FU1NBR0UoS0VSTl9FUlIsICIlcyIsICJpcGwgZGV2aWNlIGlzIG5vdCBhIGNjdyAiCi0JCQkJImRldmljZSIpOworCQkJcHJfZXJyKCJUaGUgSVBMIGRldmljZSBpcyBub3QgYSBDQ1cgZGV2aWNlXG4iKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCSppZDAgPSAwOwpAQCAtMjA5LDkgKzIxMyw4IEBACiAJCWVsc2UgaWYgKGxlbiA9PSA4ICYmICFzdHJuY21wKHN0ciwgImZhaWxmYXN0IiwgOCkpCiAJCQlmZWF0dXJlcyB8PSBEQVNEX0ZFQVRVUkVfRkFJTEZBU1Q7CiAJCWVsc2UgewotCQkJTUVTU0FHRShLRVJOX1dBUk5JTkcsCi0JCQkJInVuc3VwcG9ydGVkIGZlYXR1cmU6ICUqcywgIgotCQkJCSJpZ25vcmluZyBzZXR0aW5nIiwgbGVuLCBzdHIpOworCQkJcHJfd2FybmluZygiJSpzIGlzIG5vdCBhIHN1cHBvcnRlZCBkZXZpY2Ugb3B0aW9uXG4iLAorCQkJCSAgIGxlbiwgc3RyKTsKIAkJCXJjID0gLUVJTlZBTDsKIAkJfQogCQlzdHIgKz0gbGVuOwpAQCAtMjIwLDggKzIyMyw4IEBACiAJCXN0cisrOwogCX0KIAlpZiAoKnN0ciAhPSAnKScpIHsKLQkJTUVTU0FHRShLRVJOX1dBUk5JTkcsICIlcyIsCi0JCQkibWlzc2luZyAnKScgaW4gZGFzZCBwYXJhbWV0ZXIgc3RyaW5nXG4iKTsKKwkJcHJfd2FybmluZygiQSBjbG9zaW5nIHBhcmVudGhlc2lzICcpJyBpcyBtaXNzaW5nIGluIHRoZSAiCisJCQkgICAiZGFzZD0gcGFyYW1ldGVyXG4iKTsKIAkJcmMgPSAtRUlOVkFMOwogCX0gZWxzZQogCQlzdHIrKzsKQEAgLTI1MywyNSArMjU2LDI5IEBACiAgICAgICAgIH0KIAlpZiAoc3RybmNtcCgiYXV0b2RldGVjdCIsIHBhcnNlc3RyaW5nLCBsZW5ndGgpID09IDApIHsKIAkJZGFzZF9hdXRvZGV0ZWN0ID0gMTsKLQkJTUVTU0FHRSAoS0VSTl9JTkZPLCAiJXMiLAotCQkJICJ0dXJuaW5nIHRvIGF1dG9kZXRlY3Rpb24gbW9kZSIpOworCQlwcl9pbmZvKCJUaGUgYXV0b2RldGVjdGlvbiBtb2RlIGhhcyBiZWVuIGFjdGl2YXRlZFxuIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc2lkdWFsX3N0cjsKICAgICAgICAgfQogCWlmIChzdHJuY21wKCJwcm9iZW9ubHkiLCBwYXJzZXN0cmluZywgbGVuZ3RoKSA9PSAwKSB7CiAJCWRhc2RfcHJvYmVvbmx5ID0gMTsKLQkJTUVTU0FHRShLRVJOX0lORk8sICIlcyIsCi0JCQkidHVybmluZyB0byBwcm9iZW9ubHkgbW9kZSIpOworCQlwcl9pbmZvKCJUaGUgcHJvYmVvbmx5IG1vZGUgaGFzIGJlZW4gYWN0aXZhdGVkXG4iKTsKICAgICAgICAgICAgICAgICByZXR1cm4gcmVzaWR1YWxfc3RyOwogICAgICAgICB9CiAJaWYgKHN0cm5jbXAoIm5vcGF2IiwgcGFyc2VzdHJpbmcsIGxlbmd0aCkgPT0gMCkgewogCQlpZiAoTUFDSElORV9JU19WTSkKLQkJCU1FU1NBR0UoS0VSTl9JTkZPLCAiJXMiLCAiJ25vcGF2JyBub3Qgc3VwcG9ydGVkIG9uIFZNIik7CisJCQlwcl9pbmZvKCInbm9wYXYnIGlzIG5vdCBzdXBwb3J0ZWQgb24gei9WTVxuIik7CiAJCWVsc2UgewogCQkJZGFzZF9ub3BhdiA9IDE7Ci0JCQlNRVNTQUdFKEtFUk5fSU5GTywgIiVzIiwgImRpc2FibGUgUEFWIG1vZGUiKTsKKwkJCXByX2luZm8oIlBBViBzdXBwb3J0IGhhcyBiZSBkZWFjdGl2YXRlZFxuIik7CiAJCX0KIAkJcmV0dXJuIHJlc2lkdWFsX3N0cjsKIAl9CisJaWYgKHN0cm5jbXAoIm5vZmN4IiwgcGFyc2VzdHJpbmcsIGxlbmd0aCkgPT0gMCkgeworCQlkYXNkX25vZmN4ID0gMTsKKwkJcHJfaW5mbygiSGlnaCBQZXJmb3JtYW5jZSBGSUNPTiBzdXBwb3J0IGhhcyBiZWVuICIKKwkJCSJkZWFjdGl2YXRlZFxuIik7CisJCXJldHVybiByZXNpZHVhbF9zdHI7CisJfQogCWlmIChzdHJuY21wKCJmaXhlZGJ1ZmZlcnMiLCBwYXJzZXN0cmluZywgbGVuZ3RoKSA9PSAwKSB7CiAJCWlmIChkYXNkX3BhZ2VfY2FjaGUpCiAJCQlyZXR1cm4gcmVzaWR1YWxfc3RyOwpAQCAtMjgwLDEwICsyODcsMTAgQEAKIAkJCQkJICBQQUdFX1NJWkUsIFNMQUJfQ0FDSEVfRE1BLAogCQkJCQkgIE5VTEwpOwogCQlpZiAoIWRhc2RfcGFnZV9jYWNoZSkKLQkJCU1FU1NBR0UoS0VSTl9XQVJOSU5HLCAiJXMiLCAiRmFpbGVkIHRvIGNyZWF0ZSBzbGFiLCAiCisJCQlEQkZfRVZFTlQoREJGX1dBUk5JTkcsICIlcyIsICJGYWlsZWQgdG8gY3JlYXRlIHNsYWIsICIKIAkJCQkiZml4ZWQgYnVmZmVyIG1vZGUgZGlzYWJsZWQuIik7CiAJCWVsc2UKLQkJCU1FU1NBR0UgKEtFUk5fSU5GTywgIiVzIiwKKwkJCURCRl9FVkVOVChEQkZfSU5GTywgIiVzIiwKIAkJCQkgInR1cm5pbmcgb24gZml4ZWQgYnVmZmVyIG1vZGUiKTsKICAgICAgICAgICAgICAgICByZXR1cm4gcmVzaWR1YWxfc3RyOwogICAgICAgICB9CkBAIC0zMjEsNyArMzI4LDcgQEAKIAkgICAgKGZyb21faWQwICE9IHRvX2lkMCB8fCBmcm9tX2lkMSAhPSB0b19pZDEgfHwgZnJvbSA+IHRvKSkKIAkJcmMgPSAtRUlOVkFMOwogCWlmIChyYykgewotCQlNRVNTQUdFKEtFUk5fRVJSLCAiSW52YWxpZCBkZXZpY2UgcmFuZ2UgJXMiLCBwYXJzZXN0cmluZyk7CisJCXByX2VycigiJXMgaXMgbm90IGEgdmFsaWQgZGV2aWNlIHJhbmdlXG4iLCBwYXJzZXN0cmluZyk7CiAJCXJldHVybiBFUlJfUFRSKHJjKTsKIAl9CiAJZmVhdHVyZXMgPSBkYXNkX2ZlYXR1cmVfbGlzdChzdHIsICZzdHIpOwpAQCAtMzQwLDggKzM0Nyw4IEBACiAJCXJldHVybiBzdHIgKyAxOwogCWlmICgqc3RyID09ICdcMCcpCiAJCXJldHVybiBzdHI7Ci0JTUVTU0FHRShLRVJOX1dBUk5JTkcsCi0JCSJqdW5rIGF0IGVuZCBvZiBkYXNkIHBhcmFtZXRlciBzdHJpbmc6ICVzXG4iLCBzdHIpOworCXByX3dhcm5pbmcoIlRoZSBkYXNkPSBwYXJhbWV0ZXIgdmFsdWUgJXMgaGFzIGFuIGludmFsaWQgZW5kaW5nXG4iLAorCQkgICBzdHIpOwogCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kaWFnLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kaWFnLmMKaW5kZXggZWYyYTU2OS4uYjlhN2Y3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGlhZy5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2RpYWcuYwpAQCAtOCw2ICs4LDggQEAKICAqCiAgKi8KIAorI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAiZGFzZCIKKwogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KQEAgLTE0NCw4ICsxNDYsOCBAQAogCW1kc2tfdGVybV9pbyhkZXZpY2UpOwogCXJjID0gbWRza19pbml0X2lvKGRldmljZSwgZGV2aWNlLT5ibG9jay0+YnBfYmxvY2ssIDAsIE5VTEwpOwogCWlmIChyYykKLQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICJESUFHIEVSUCB1bnN1Y2Nlc3NmdWwsICIKLQkJCSAgICAicmM9JWQiLCByYyk7CisJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwgIkRJQUcgRVJQIGZhaWxlZCB3aXRoICIKKwkJCSAgICAicmM9JWRcbiIsIHJjKTsKIH0KIAogLyogU3RhcnQgYSBnaXZlbiByZXF1ZXN0IGF0IHRoZSBkZXZpY2UuIFJldHVybiB6ZXJvIG9uIHN1Y2Nlc3MsIG5vbi16ZXJvCkBAIC0xNjAsNyArMTYyLDcgQEAKIAogCWRldmljZSA9IGNxci0+c3RhcnRkZXY7CiAJaWYgKGNxci0+cmV0cmllcyA8IDApIHsKLQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICJESUFHIHN0YXJ0X0lPOiByZXF1ZXN0ICVwICIKKwkJREJGX0RFVl9FVkVOVChEQkZfRVJSLCBkZXZpY2UsICJESUFHIHN0YXJ0X0lPOiByZXF1ZXN0ICVwICIKIAkJCSAgICAiLSBubyByZXRyeSBsZWZ0KSIsIGNxcik7CiAJCWNxci0+c3RhdHVzID0gREFTRF9DUVJfRVJST1I7CiAJCXJldHVybiAtRUlPOwpAQCAtMTk1LDcgKzE5Nyw3IEBACiAJCWJyZWFrOwogCWRlZmF1bHQ6IC8qIEVycm9yIGNvbmRpdGlvbiAqLwogCQljcXItPnN0YXR1cyA9IERBU0RfQ1FSX1FVRVVFRDsKLQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICJkaWEyNTAgcmV0dXJuZWQgcmM9JWQiLCByYyk7CisJCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgImRpYTI1MCByZXR1cm5lZCByYz0lZCIsIHJjKTsKIAkJZGFzZF9kaWFnX2VycChkZXZpY2UpOwogCQlyYyA9IC1FSU87CiAJCWJyZWFrOwpAQCAtMjQzLDEzICsyNDUsMTQgQEAKIAkJcmV0dXJuOwogCX0KIAlpZiAoIWlwKSB7CQkvKiBubyBpbnRwYXJtOiB1bnNvbGljaXRlZCBpbnRlcnJ1cHQgKi8KLQkJTUVTU0FHRShLRVJOX0RFQlVHLCAiJXMiLCAiY2F1Z2h0IHVuc29saWNpdGVkIGludGVycnVwdCIpOworCQlEQkZfRVZFTlQoREJGX05PVElDRSwgIiVzIiwgImNhdWdodCB1bnNvbGljaXRlZCAiCisJCQkgICAgICAiaW50ZXJydXB0Iik7CiAJCXJldHVybjsKIAl9CiAJY3FyID0gKHN0cnVjdCBkYXNkX2Njd19yZXEgKikgaXA7CiAJZGV2aWNlID0gKHN0cnVjdCBkYXNkX2RldmljZSAqKSBjcXItPnN0YXJ0ZGV2OwogCWlmIChzdHJuY21wKGRldmljZS0+ZGlzY2lwbGluZS0+ZWJjbmFtZSwgKGNoYXIgKikgJmNxci0+bWFnaWMsIDQpKSB7Ci0JCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLAorCQlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsCiAJCQkgICAgIiBtYWdpYyBudW1iZXIgb2YgZGFzZF9jY3dfcmVxIDB4JTA4WCBkb2Vzbid0IgogCQkJICAgICIgbWF0Y2ggZGlzY2lwbGluZSAweCUwOFgiLAogCQkJICAgIGNxci0+bWFnaWMsICooaW50ICopICgmZGV2aWNlLT5kaXNjaXBsaW5lLT5uYW1lKSk7CkBAIC0yODEsMTUgKzI4NCwxMSBAQAogCQkJCXJjID0gZGFzZF9zdGFydF9kaWFnKG5leHQpOwogCQkJCWlmIChyYyA9PSAwKQogCQkJCQlleHBpcmVzID0gbmV4dC0+ZXhwaXJlczsKLQkJCQllbHNlIGlmIChyYyAhPSAtRUFDQ0VTKQotCQkJCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkJCSAgICAiSW50ZXJydXB0IGZhc3RwYXRoICIKLQkJCQkJCSAgICAiZmFpbGVkISIpOwogCQkJfQogCQl9CiAJfSBlbHNlIHsKIAkJY3FyLT5zdGF0dXMgPSBEQVNEX0NRUl9RVUVVRUQ7Ci0JCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiaW50ZXJydXB0IHN0YXR1cyBmb3IgIgorCQlEQkZfREVWX0VWRU5UKERCRl9ERUJVRywgZGV2aWNlLCAiaW50ZXJydXB0IHN0YXR1cyBmb3IgIgogCQkJICAgICJyZXF1ZXN0ICVwIHdhcyAlZCAoJWQgcmV0cmllcyBsZWZ0KSIsIGNxciwgc3RhdHVzLAogCQkJICAgIGNxci0+cmV0cmllcyk7CiAJCWRhc2RfZGlhZ19lcnAoZGV2aWNlKTsKQEAgLTMyMiw4ICszMjEsOSBAQAogCWlmIChwcml2YXRlID09IE5VTEwpIHsKIAkJcHJpdmF0ZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkYXNkX2RpYWdfcHJpdmF0ZSksR0ZQX0tFUk5FTCk7CiAJCWlmIChwcml2YXRlID09IE5VTEwpIHsKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSJtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQgZm9yIHByaXZhdGUgZGF0YSIpOworCQkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJCSJBbGxvY2F0aW5nIG1lbW9yeSBmb3IgcHJpdmF0ZSBEQVNEIGRhdGEgIgorCQkJCSAgICAgICJmYWlsZWRcbiIpOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KIAkJY2N3X2RldmljZV9nZXRfaWQoZGV2aWNlLT5jZGV2LCAmcHJpdmF0ZS0+ZGV2X2lkKTsKQEAgLTMzMSw3ICszMzEsNyBAQAogCX0KIAlibG9jayA9IGRhc2RfYWxsb2NfYmxvY2soKTsKIAlpZiAoSVNfRVJSKGJsb2NrKSkgewotCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiJXMiLAogCQkJICAgICJjb3VsZCBub3QgYWxsb2NhdGUgZGFzZCBibG9jayBzdHJ1Y3R1cmUiKTsKIAkJZGV2aWNlLT5wcml2YXRlID0gTlVMTDsKIAkJa2ZyZWUocHJpdmF0ZSk7CkBAIC0zNDcsNyArMzQ3LDcgQEAKIAogCXJjID0gZGlhZzIxMCgoc3RydWN0IGRpYWcyMTAgKikgcmRjX2RhdGEpOwogCWlmIChyYykgewotCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgImZhaWxlZCB0byByZXRyaWV2ZSBkZXZpY2UgIgorCQlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICJmYWlsZWQgdG8gcmV0cmlldmUgZGV2aWNlICIKIAkJCSAgICAiaW5mb3JtYXRpb24gKHJjPSVkKSIsIHJjKTsKIAkJcmMgPSAtRU9QTk9UU1VQUDsKIAkJZ290byBvdXQ7CkBAIC0zNjIsOCArMzYyLDggQEAKIAkJcHJpdmF0ZS0+cHRfYmxvY2sgPSAyOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgInVuc3VwcG9ydGVkIGRldmljZSBjbGFzcyAiCi0JCQkgICAgIihjbGFzcz0lZCkiLCBwcml2YXRlLT5yZGNfZGF0YS52ZGV2X2NsYXNzKTsKKwkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LCAiRGV2aWNlIHR5cGUgJWQgaXMgbm90IHN1cHBvcnRlZCAiCisJCQkgICAgImluIERJQUcgbW9kZVxuIiwgcHJpdmF0ZS0+cmRjX2RhdGEudmRldl9jbGFzcyk7CiAJCXJjID0gLUVPUE5PVFNVUFA7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTM4MCw3ICszODAsNyBAQAogCS8qIGZpZ3VyZSBvdXQgYmxvY2tzaXplIG9mIGRldmljZSAqLwogCWxhYmVsID0gKHN0cnVjdCB2dG9jX2Ntc19sYWJlbCAqKSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJaWYgKGxhYmVsID09IE5VTEwpICB7Ci0JCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCiAJCQkgICAgIk5vIG1lbW9yeSB0byBhbGxvY2F0ZSBpbml0aWFsaXphdGlvbiByZXF1ZXN0Iik7CiAJCXJjID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CkBAIC00MDQsOCArNDA0LDggQEAKIAkJcHJpdmF0ZS0+aW9iLmZsYWdhID0gREFTRF9ESUFHX0ZMQUdBX0RFRkFVTFQ7CiAJCXJjID0gZGlhMjUwKCZwcml2YXRlLT5pb2IsIFJXX0JJTyk7CiAJCWlmIChyYyA9PSAzKSB7Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkiRElBRyBjYWxsIGZhaWxlZCIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSJBIDY0LWJpdCBESUFHIGNhbGwgZmFpbGVkXG4iKTsKIAkJCXJjID0gLUVPUE5PVFNVUFA7CiAJCQlnb3RvIG91dF9sYWJlbDsKIAkJfQpAQCAtNDE0LDggKzQxNCw4IEBACiAJCQlicmVhazsKIAl9CiAJaWYgKGJzaXplID4gUEFHRV9TSVpFKSB7Ci0JCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiZGV2aWNlIGFjY2VzcyBmYWlsZWQgIgotCQkJICAgICIocmM9JWQpIiwgcmMpOworCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsICJBY2Nlc3NpbmcgdGhlIERBU0QgZmFpbGVkIGJlY2F1c2UiCisJCQkgIiBvZiBhbiBpbmNvcnJlY3QgZm9ybWF0IChyYz0lZClcbiIsIHJjKTsKIAkJcmMgPSAtRUlPOwogCQlnb3RvIG91dF9sYWJlbDsKIAl9CkBAIC00MzMsMTUgKzQzMywxNSBAQAogCQlibG9jay0+czJiX3NoaWZ0Kys7CiAJcmMgPSBtZHNrX2luaXRfaW8oZGV2aWNlLCBibG9jay0+YnBfYmxvY2ssIDAsIE5VTEwpOwogCWlmIChyYykgewotCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIkRJQUcgaW5pdGlhbGl6YXRpb24gIgotCQkJImZhaWxlZCAocmM9JWQpIiwgcmMpOworCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsICJESUFHIGluaXRpYWxpemF0aW9uICIKKwkJCSJmYWlsZWQgd2l0aCByYz0lZFxuIiwgcmMpOwogCQlyYyA9IC1FSU87CiAJfSBlbHNlIHsKLQkJREVWX01FU1NBR0UoS0VSTl9JTkZPLCBkZXZpY2UsCi0JCQkgICAgIiglbGQgQi9ibGspOiAlbGRrQiIsCi0JCQkgICAgKHVuc2lnbmVkIGxvbmcpIGJsb2NrLT5icF9ibG9jaywKLQkJCSAgICAodW5zaWduZWQgbG9uZykgKGJsb2NrLT5ibG9ja3MgPDwKLQkJCQlibG9jay0+czJiX3NoaWZ0KSA+PiAxKTsKKwkJZGV2X2luZm8oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJICJOZXcgREFTRCB3aXRoICVsZCBieXRlL2Jsb2NrLCB0b3RhbCBzaXplICVsZCBLQlxuIiwKKwkJCSAodW5zaWduZWQgbG9uZykgYmxvY2stPmJwX2Jsb2NrLAorCQkJICh1bnNpZ25lZCBsb25nKSAoYmxvY2stPmJsb2NrcyA8PAorCQkJCQkgIGJsb2NrLT5zMmJfc2hpZnQpID4+IDEpOwogCX0KIG91dF9sYWJlbDoKIAlmcmVlX3BhZ2UoKGxvbmcpIGxhYmVsKTsKQEAgLTU5NSw3ICs1OTUsNyBAQAogZGFzZF9kaWFnX2R1bXBfc2Vuc2Uoc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBkYXNkX2Njd19yZXEgKiByZXEsCiAJCSAgICAgc3RydWN0IGlyYiAqc3RhdCkKIHsKLQlERVZfTUVTU0FHRShLRVJOX0VSUiwgZGV2aWNlLCAiJXMiLAorCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKIAkJICAgICJkdW1wIHNlbnNlIG5vdCBhdmFpbGFibGUgZm9yIERJQUcgZGF0YSIpOwogfQogCkBAIC02MjEsMTAgKzYyMSw4IEBACiBkYXNkX2RpYWdfaW5pdCh2b2lkKQogewogCWlmICghTUFDSElORV9JU19WTSkgewotCQlNRVNTQUdFX0xPRyhLRVJOX0lORk8sCi0JCQkgICAgIk1hY2hpbmUgaXMgbm90IFZNOiAlcyAiCi0JCQkgICAgImRpc2NpcGxpbmUgbm90IGluaXRpYWxpemluZyIsCi0JCQkgICAgZGFzZF9kaWFnX2Rpc2NpcGxpbmUubmFtZSk7CisJCXByX2luZm8oIkRpc2NpcGxpbmUgJXMgY2Fubm90IGJlIHVzZWQgd2l0aG91dCB6L1ZNXG4iLAorCQkJZGFzZF9kaWFnX2Rpc2NpcGxpbmUubmFtZSk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAlBU0NFQkMoZGFzZF9kaWFnX2Rpc2NpcGxpbmUuZWJjbmFtZSwgNCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmMKaW5kZXggYmRiODc5OS4uMjEyNTQ3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuYwpAQCAtMTEsNiArMTEsOCBAQAogICoKICAqLwogCisjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJkYXNkIgorCiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpAQCAtMjcsOSArMjksMTIgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9jaW8uaD4KICNpbmNsdWRlIDxhc20vY2N3ZGV2Lmg+CisjaW5jbHVkZSA8YXNtL2l0Y3cuaD4KIAogI2luY2x1ZGUgImRhc2RfaW50LmgiCiAjaW5jbHVkZSAiZGFzZF9lY2tkLmgiCisjaW5jbHVkZSAiLi4vY2lvL2Noc2MuaCIKKwogCiAjaWZkZWYgUFJJTlRLX0hFQURFUgogI3VuZGVmIFBSSU5US19IRUFERVIKQEAgLTg0LDcgKzg5LDcgQEAKIAkvKiBzZXQgRUNLRCBzcGVjaWZpYyBjY3ctZGV2aWNlIG9wdGlvbnMgKi8KIAlyZXQgPSBjY3dfZGV2aWNlX3NldF9vcHRpb25zKGNkZXYsIENDV0RFVl9BTExPV19GT1JDRSk7CiAJaWYgKHJldCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCURCRl9FVkVOVChEQkZfV0FSTklORywKIAkJICAgICAgICJkYXNkX2Vja2RfcHJvYmU6IGNvdWxkIG5vdCBzZXQgY2N3LWRldmljZSBvcHRpb25zICIKIAkJICAgICAgICJmb3IgJXNcbiIsIGRldl9uYW1lKCZjZGV2LT5kZXYpKTsKIAkJcmV0dXJuIHJldDsKQEAgLTE1OSw2ICsxNjQsMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgc2V0X2NoX3Qoc3RydWN0IGNoX3QgKmdlbywgX191MzIgY3lsLCBfX3U4IGhlYWQpCit7CisJZ2VvLT5jeWwgPSAoX191MTYpIGN5bDsKKwlnZW8tPmhlYWQgPSBjeWwgPj4gMTY7CisJZ2VvLT5oZWFkIDw8PSA0OworCWdlby0+aGVhZCB8PSBoZWFkOworfQorCiBzdGF0aWMgaW50CiBjaGVja19YUkMgKHN0cnVjdCBjY3cxICAgICAgICAgKmRlX2NjdywKICAgICAgICAgICAgc3RydWN0IERFX2Vja2RfZGF0YSAqZGF0YSwKQEAgLTE4NiwxMSArMTk5LDEyIEBACiB9CiAKIHN0YXRpYyBpbnQKLWRlZmluZV9leHRlbnQoc3RydWN0IGNjdzEgKiBjY3csIHN0cnVjdCBERV9lY2tkX2RhdGEgKiBkYXRhLCBpbnQgdHJrLAotCSAgICAgIGludCB0b3RyaywgaW50IGNtZCwgc3RydWN0IGRhc2RfZGV2aWNlICogZGV2aWNlKQorZGVmaW5lX2V4dGVudChzdHJ1Y3QgY2N3MSAqY2N3LCBzdHJ1Y3QgREVfZWNrZF9kYXRhICpkYXRhLCB1bnNpZ25lZCBpbnQgdHJrLAorCSAgICAgIHVuc2lnbmVkIGludCB0b3RyaywgaW50IGNtZCwgc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UpCiB7CiAJc3RydWN0IGRhc2RfZWNrZF9wcml2YXRlICpwcml2YXRlOwotCXN0cnVjdCBjaF90IGdlbywgYmVnLCBlbmQ7CisJdTMyIGJlZ2N5bCwgZW5kY3lsOworCXUxNiBoZWFkcywgYmVnaGVhZCwgZW5kaGVhZDsKIAlpbnQgcmMgPSAwOwogCiAJcHJpdmF0ZSA9IChzdHJ1Y3QgZGFzZF9lY2tkX3ByaXZhdGUgKikgZGV2aWNlLT5wcml2YXRlOwpAQCAtMjM2LDcgKzI1MCw4IEBACiAJCXJjID0gY2hlY2tfWFJDIChjY3csIGRhdGEsIGRldmljZSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsICJ1bmtub3duIG9wY29kZSAweCV4IiwgY21kKTsKKwkJZGV2X2VycigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkiMHgleCBpcyBub3QgYSBrbm93biBjb21tYW5kXG4iLCBjbWQpOwogCQlicmVhazsKIAl9CiAKQEAgLTI0OCwyNyArMjYzLDI0IEBACiAJICAgICYmICEocHJpdmF0ZS0+dXNlc19jZGwgJiYgdHJrIDwgMikpCiAJCWRhdGEtPmdhX2V4dGVuZGVkIHw9IDB4NDA7IC8qIFJlZ3VsYXIgRGF0YSBGb3JtYXQgTW9kZSAqLwogCi0JZ2VvLmN5bCA9IHByaXZhdGUtPnJkY19kYXRhLm5vX2N5bDsKLQlnZW8uaGVhZCA9IHByaXZhdGUtPnJkY19kYXRhLnRya19wZXJfY3lsOwotCWJlZy5jeWwgPSB0cmsgLyBnZW8uaGVhZDsKLQliZWcuaGVhZCA9IHRyayAlIGdlby5oZWFkOwotCWVuZC5jeWwgPSB0b3RyayAvIGdlby5oZWFkOwotCWVuZC5oZWFkID0gdG90cmsgJSBnZW8uaGVhZDsKKwloZWFkcyA9IHByaXZhdGUtPnJkY19kYXRhLnRya19wZXJfY3lsOworCWJlZ2N5bCA9IHRyayAvIGhlYWRzOworCWJlZ2hlYWQgPSB0cmsgJSBoZWFkczsKKwllbmRjeWwgPSB0b3RyayAvIGhlYWRzOworCWVuZGhlYWQgPSB0b3RyayAlIGhlYWRzOwogCiAJLyogY2hlY2sgZm9yIHNlcXVlbnRpYWwgcHJlc3RhZ2UgLSBlbmhhbmNlIGN5bGluZGVyIHJhbmdlICovCiAJaWYgKGRhdGEtPmF0dHJpYnV0ZXMub3BlcmF0aW9uID09IERBU0RfU0VRX1BSRVNUQUdFIHx8CiAJICAgIGRhdGEtPmF0dHJpYnV0ZXMub3BlcmF0aW9uID09IERBU0RfU0VRX0FDQ0VTUykgewogCi0JCWlmIChlbmQuY3lsICsgcHJpdmF0ZS0+YXR0cmliLm5yX2N5bCA8IGdlby5jeWwpCi0JCQllbmQuY3lsICs9IHByaXZhdGUtPmF0dHJpYi5ucl9jeWw7CisJCWlmIChlbmRjeWwgKyBwcml2YXRlLT5hdHRyaWIubnJfY3lsIDwgcHJpdmF0ZS0+cmVhbF9jeWwpCisJCQllbmRjeWwgKz0gcHJpdmF0ZS0+YXR0cmliLm5yX2N5bDsKIAkJZWxzZQotCQkJZW5kLmN5bCA9IChnZW8uY3lsIC0gMSk7CisJCQllbmRjeWwgPSAocHJpdmF0ZS0+cmVhbF9jeWwgLSAxKTsKIAl9CiAKLQlkYXRhLT5iZWdfZXh0LmN5bCA9IGJlZy5jeWw7Ci0JZGF0YS0+YmVnX2V4dC5oZWFkID0gYmVnLmhlYWQ7Ci0JZGF0YS0+ZW5kX2V4dC5jeWwgPSBlbmQuY3lsOwotCWRhdGEtPmVuZF9leHQuaGVhZCA9IGVuZC5oZWFkOworCXNldF9jaF90KCZkYXRhLT5iZWdfZXh0LCBiZWdjeWwsIGJlZ2hlYWQpOworCXNldF9jaF90KCZkYXRhLT5lbmRfZXh0LCBlbmRjeWwsIGVuZGhlYWQpOwogCXJldHVybiByYzsKIH0KIApAQCAtMjgzLDI5ICsyOTUsMTQ1IEBACiAJCXJldHVybiAwOwogCiAJLyogc3dpdGNoIG9uIFN5c3RlbSBUaW1lIFN0YW1wIC0gbmVlZGVkIGZvciBYUkMgU3VwcG9ydCAqLwotCXBmeGRhdGEtPmRlZmluZV9leHRlbmQuZ2FfZXh0ZW5kZWQgfD0gMHgwODsgLyogJ1RpbWUgU3RhbXAgVmFsaWQnICAgKi8KLQlwZnhkYXRhLT5kZWZpbmVfZXh0ZW5kLmdhX2V4dGVuZGVkIHw9IDB4MDI7IC8qICdFeHRlbmRlZCBQYXJhbWV0ZXInICovCisJcGZ4ZGF0YS0+ZGVmaW5lX2V4dGVudC5nYV9leHRlbmRlZCB8PSAweDA4OyAvKiAnVGltZSBTdGFtcCBWYWxpZCcgICAqLworCXBmeGRhdGEtPmRlZmluZV9leHRlbnQuZ2FfZXh0ZW5kZWQgfD0gMHgwMjsgLyogJ0V4dGVuZGVkIFBhcmFtZXRlcicgKi8KIAlwZnhkYXRhLT52YWxpZGl0eS50aW1lX3N0YW1wID0gMTsJICAgIC8qICdUaW1lIFN0YW1wIFZhbGlkJyAgICovCiAKLQlyYyA9IGdldF9zeW5jX2Nsb2NrKCZwZnhkYXRhLT5kZWZpbmVfZXh0ZW5kLmVwX3N5c190aW1lKTsKKwlyYyA9IGdldF9zeW5jX2Nsb2NrKCZwZnhkYXRhLT5kZWZpbmVfZXh0ZW50LmVwX3N5c190aW1lKTsKIAkvKiBJZ25vcmUgcmV0dXJuIGNvZGUgaWYgc3luYyBjbG9jayBpcyBzd2l0Y2hlZCBvZmYuICovCiAJaWYgKHJjID09IC1FTk9TWVMgfHwgcmMgPT0gLUVBQ0NFUykKIAkJcmMgPSAwOwogCXJldHVybiByYzsKIH0KIAotc3RhdGljIGludCBwcmVmaXgoc3RydWN0IGNjdzEgKmNjdywgc3RydWN0IFBGWF9lY2tkX2RhdGEgKnBmeGRhdGEsIGludCB0cmssCi0JCSAgaW50IHRvdHJrLCBpbnQgY21kLCBzdHJ1Y3QgZGFzZF9kZXZpY2UgKmJhc2VkZXYsCi0JCSAgc3RydWN0IGRhc2RfZGV2aWNlICpzdGFydGRldikKK3N0YXRpYyB2b2lkIGZpbGxfTFJFX2RhdGEoc3RydWN0IExSRV9lY2tkX2RhdGEgKmRhdGEsIHVuc2lnbmVkIGludCB0cmssCisJCQkgIHVuc2lnbmVkIGludCByZWNfb25fdHJrLCBpbnQgY291bnQsIGludCBjbWQsCisJCQkgIHN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlLCB1bnNpZ25lZCBpbnQgcmVjbGVuLAorCQkJICB1bnNpZ25lZCBpbnQgdGxmKQoreworCXN0cnVjdCBkYXNkX2Vja2RfcHJpdmF0ZSAqcHJpdmF0ZTsKKwlpbnQgc2VjdG9yOworCWludCBkbiwgZDsKKworCXByaXZhdGUgPSAoc3RydWN0IGRhc2RfZWNrZF9wcml2YXRlICopIGRldmljZS0+cHJpdmF0ZTsKKworCW1lbXNldChkYXRhLCAwLCBzaXplb2YoKmRhdGEpKTsKKwlzZWN0b3IgPSAwOworCWlmIChyZWNfb25fdHJrKSB7CisJCXN3aXRjaCAocHJpdmF0ZS0+cmRjX2RhdGEuZGV2X3R5cGUpIHsKKwkJY2FzZSAweDMzOTA6CisJCQlkbiA9IGNlaWxfcXVvdChyZWNsZW4gKyA2LCAyMzIpOworCQkJZCA9IDkgKyBjZWlsX3F1b3QocmVjbGVuICsgNiAqIChkbiArIDEpLCAzNCk7CisJCQlzZWN0b3IgPSAoNDkgKyAocmVjX29uX3RyayAtIDEpICogKDEwICsgZCkpIC8gODsKKwkJCWJyZWFrOworCQljYXNlIDB4MzM4MDoKKwkJCWQgPSA3ICsgY2VpbF9xdW90KHJlY2xlbiArIDEyLCAzMik7CisJCQlzZWN0b3IgPSAoMzkgKyAocmVjX29uX3RyayAtIDEpICogKDggKyBkKSkgLyA3OworCQkJYnJlYWs7CisJCX0KKwl9CisJZGF0YS0+c2VjdG9yID0gc2VjdG9yOworCS8qIG5vdGU6IG1lYW5pbmcgb2YgY291bnQgZGVwZW5kcyBvbiB0aGUgb3BlcmF0aW9uCisJICoJIGZvciByZWNvcmQgYmFzZWQgSS9PIGl0J3MgdGhlIG51bWJlciBvZiByZWNvcmRzLCBidXQgZm9yCisJICoJIHRyYWNrIGJhc2VkIEkvTyBpdCdzIHRoZSBudW1iZXIgb2YgdHJhY2tzCisJICovCisJZGF0YS0+Y291bnQgPSBjb3VudDsKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgREFTRF9FQ0tEX0NDV19XUklURV9IT01FX0FERFJFU1M6CisJCWRhdGEtPm9wZXJhdGlvbi5vcmllbnRhdGlvbiA9IDB4MzsKKwkJZGF0YS0+b3BlcmF0aW9uLm9wZXJhdGlvbiA9IDB4MDM7CisJCWJyZWFrOworCWNhc2UgREFTRF9FQ0tEX0NDV19SRUFEX0hPTUVfQUREUkVTUzoKKwkJZGF0YS0+b3BlcmF0aW9uLm9yaWVudGF0aW9uID0gMHgzOworCQlkYXRhLT5vcGVyYXRpb24ub3BlcmF0aW9uID0gMHgxNjsKKwkJYnJlYWs7CisJY2FzZSBEQVNEX0VDS0RfQ0NXX1dSSVRFX1JFQ09SRF9aRVJPOgorCQlkYXRhLT5vcGVyYXRpb24ub3JpZW50YXRpb24gPSAweDE7CisJCWRhdGEtPm9wZXJhdGlvbi5vcGVyYXRpb24gPSAweDAzOworCQlkYXRhLT5jb3VudCsrOworCQlicmVhazsKKwljYXNlIERBU0RfRUNLRF9DQ1dfUkVBRF9SRUNPUkRfWkVSTzoKKwkJZGF0YS0+b3BlcmF0aW9uLm9yaWVudGF0aW9uID0gMHgzOworCQlkYXRhLT5vcGVyYXRpb24ub3BlcmF0aW9uID0gMHgxNjsKKwkJZGF0YS0+Y291bnQrKzsKKwkJYnJlYWs7CisJY2FzZSBEQVNEX0VDS0RfQ0NXX1dSSVRFOgorCWNhc2UgREFTRF9FQ0tEX0NDV19XUklURV9NVDoKKwljYXNlIERBU0RfRUNLRF9DQ1dfV1JJVEVfS0Q6CisJY2FzZSBEQVNEX0VDS0RfQ0NXX1dSSVRFX0tEX01UOgorCQlkYXRhLT5hdXhpbGlhcnkubGVuZ3RoX3ZhbGlkID0gMHgxOworCQlkYXRhLT5sZW5ndGggPSByZWNsZW47CisJCWRhdGEtPm9wZXJhdGlvbi5vcGVyYXRpb24gPSAweDAxOworCQlicmVhazsKKwljYXNlIERBU0RfRUNLRF9DQ1dfV1JJVEVfQ0tEOgorCWNhc2UgREFTRF9FQ0tEX0NDV19XUklURV9DS0RfTVQ6CisJCWRhdGEtPmF1eGlsaWFyeS5sZW5ndGhfdmFsaWQgPSAweDE7CisJCWRhdGEtPmxlbmd0aCA9IHJlY2xlbjsKKwkJZGF0YS0+b3BlcmF0aW9uLm9wZXJhdGlvbiA9IDB4MDM7CisJCWJyZWFrOworCWNhc2UgREFTRF9FQ0tEX0NDV19XUklURV9UUkFDS19EQVRBOgorCQlkYXRhLT5hdXhpbGlhcnkubGVuZ3RoX3ZhbGlkID0gMHgxOworCQlkYXRhLT5sZW5ndGggPSByZWNsZW47CS8qIG5vdCB0bGYsIGFzIG9uZSBtaWdodCB0aGluayAqLworCQlkYXRhLT5vcGVyYXRpb24ub3BlcmF0aW9uID0gMHgzRjsKKwkJZGF0YS0+ZXh0ZW5kZWRfb3BlcmF0aW9uID0gMHgyMzsKKwkJYnJlYWs7CisJY2FzZSBEQVNEX0VDS0RfQ0NXX1JFQUQ6CisJY2FzZSBEQVNEX0VDS0RfQ0NXX1JFQURfTVQ6CisJY2FzZSBEQVNEX0VDS0RfQ0NXX1JFQURfS0Q6CisJY2FzZSBEQVNEX0VDS0RfQ0NXX1JFQURfS0RfTVQ6CisJCWRhdGEtPmF1eGlsaWFyeS5sZW5ndGhfdmFsaWQgPSAweDE7CisJCWRhdGEtPmxlbmd0aCA9IHJlY2xlbjsKKwkJZGF0YS0+b3BlcmF0aW9uLm9wZXJhdGlvbiA9IDB4MDY7CisJCWJyZWFrOworCWNhc2UgREFTRF9FQ0tEX0NDV19SRUFEX0NLRDoKKwljYXNlIERBU0RfRUNLRF9DQ1dfUkVBRF9DS0RfTVQ6CisJCWRhdGEtPmF1eGlsaWFyeS5sZW5ndGhfdmFsaWQgPSAweDE7CisJCWRhdGEtPmxlbmd0aCA9IHJlY2xlbjsKKwkJZGF0YS0+b3BlcmF0aW9uLm9wZXJhdGlvbiA9IDB4MTY7CisJCWJyZWFrOworCWNhc2UgREFTRF9FQ0tEX0NDV19SRUFEX0NPVU5UOgorCQlkYXRhLT5vcGVyYXRpb24ub3BlcmF0aW9uID0gMHgwNjsKKwkJYnJlYWs7CisJY2FzZSBEQVNEX0VDS0RfQ0NXX1JFQURfVFJBQ0tfREFUQToKKwkJZGF0YS0+YXV4aWxpYXJ5Lmxlbmd0aF92YWxpZCA9IDB4MTsKKwkJZGF0YS0+bGVuZ3RoID0gdGxmOworCQlkYXRhLT5vcGVyYXRpb24ub3BlcmF0aW9uID0gMHgwQzsKKwkJYnJlYWs7CisJY2FzZSBEQVNEX0VDS0RfQ0NXX0VSQVNFOgorCQlkYXRhLT5sZW5ndGggPSByZWNsZW47CisJCWRhdGEtPmF1eGlsaWFyeS5sZW5ndGhfdmFsaWQgPSAweDE7CisJCWRhdGEtPm9wZXJhdGlvbi5vcGVyYXRpb24gPSAweDBiOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlEQkZfREVWX0VWRU5UKERCRl9FUlIsIGRldmljZSwKKwkJCSAgICAiZmlsbCBMUkUgdW5rbm93biBvcGNvZGUgMHgleCIsIGNtZCk7CisJCUJVRygpOworCX0KKwlzZXRfY2hfdCgmZGF0YS0+c2Vla19hZGRyLAorCQkgdHJrIC8gcHJpdmF0ZS0+cmRjX2RhdGEudHJrX3Blcl9jeWwsCisJCSB0cmsgJSBwcml2YXRlLT5yZGNfZGF0YS50cmtfcGVyX2N5bCk7CisJZGF0YS0+c2VhcmNoX2FyZy5jeWwgPSBkYXRhLT5zZWVrX2FkZHIuY3lsOworCWRhdGEtPnNlYXJjaF9hcmcuaGVhZCA9IGRhdGEtPnNlZWtfYWRkci5oZWFkOworCWRhdGEtPnNlYXJjaF9hcmcucmVjb3JkID0gcmVjX29uX3RyazsKK30KKworc3RhdGljIGludCBwcmVmaXhfTFJFKHN0cnVjdCBjY3cxICpjY3csIHN0cnVjdCBQRlhfZWNrZF9kYXRhICpwZnhkYXRhLAorCQkgICAgICB1bnNpZ25lZCBpbnQgdHJrLCB1bnNpZ25lZCBpbnQgdG90cmssIGludCBjbWQsCisJCSAgICAgIHN0cnVjdCBkYXNkX2RldmljZSAqYmFzZWRldiwgc3RydWN0IGRhc2RfZGV2aWNlICpzdGFydGRldiwKKwkJICAgICAgdW5zaWduZWQgY2hhciBmb3JtYXQsIHVuc2lnbmVkIGludCByZWNfb25fdHJrLCBpbnQgY291bnQsCisJCSAgICAgIHVuc2lnbmVkIGludCBibGtzaXplLCB1bnNpZ25lZCBpbnQgdGxmKQogewogCXN0cnVjdCBkYXNkX2Vja2RfcHJpdmF0ZSAqYmFzZXByaXYsICpzdGFydHByaXY7Ci0Jc3RydWN0IERFX2Vja2RfZGF0YSAqZGF0YTsKLQlzdHJ1Y3QgY2hfdCBnZW8sIGJlZywgZW5kOworCXN0cnVjdCBERV9lY2tkX2RhdGEgKmRlZGF0YTsKKwlzdHJ1Y3QgTFJFX2Vja2RfZGF0YSAqbHJlZGF0YTsKKwl1MzIgYmVnY3lsLCBlbmRjeWw7CisJdTE2IGhlYWRzLCBiZWdoZWFkLCBlbmRoZWFkOwogCWludCByYyA9IDA7CiAKIAliYXNlcHJpdiA9IChzdHJ1Y3QgZGFzZF9lY2tkX3ByaXZhdGUgKikgYmFzZWRldi0+cHJpdmF0ZTsKIAlzdGFydHByaXYgPSAoc3RydWN0IGRhc2RfZWNrZF9wcml2YXRlICopIHN0YXJ0ZGV2LT5wcml2YXRlOwotCWRhdGEgPSAmcGZ4ZGF0YS0+ZGVmaW5lX2V4dGVuZDsKKwlkZWRhdGEgPSAmcGZ4ZGF0YS0+ZGVmaW5lX2V4dGVudDsKKwlscmVkYXRhID0gJnBmeGRhdGEtPmxvY2F0ZV9yZWNvcmQ7CiAKIAljY3ctPmNtZF9jb2RlID0gREFTRF9FQ0tEX0NDV19QRlg7CiAJY2N3LT5mbGFncyA9IDA7CkBAIC0zMTQsMTAgKzQ0MiwxNiBAQAogCiAJbWVtc2V0KHBmeGRhdGEsIDAsIHNpemVvZigqcGZ4ZGF0YSkpOwogCS8qIHByZWZpeCBkYXRhICovCi0JcGZ4ZGF0YS0+Zm9ybWF0ID0gMDsKKwlpZiAoZm9ybWF0ID4gMSkgeworCQlEQkZfREVWX0VWRU5UKERCRl9FUlIsIGJhc2VkZXYsCisJCQkgICAgICAiUEZYIExSRSB1bmtub3duIGZvcm1hdCAweCV4IiwgZm9ybWF0KTsKKwkJQlVHKCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlwZnhkYXRhLT5mb3JtYXQgPSBmb3JtYXQ7CiAJcGZ4ZGF0YS0+YmFzZV9hZGRyZXNzID0gYmFzZXByaXYtPm5lZC0+dW5pdF9hZGRyOwogCXBmeGRhdGEtPmJhc2VfbHNzID0gYmFzZXByaXYtPm5lZC0+SUQ7Ci0JcGZ4ZGF0YS0+dmFsaWRpdHkuZGVmaW5lX2V4dGVuZCA9IDE7CisJcGZ4ZGF0YS0+dmFsaWRpdHkuZGVmaW5lX2V4dGVudCA9IDE7CiAKIAkvKiBwcml2YXRlIHVpZCBpcyBrZXB0IHVwIHRvIGRhdGUsIGNvbmZfZGF0YSBtYXkgYmUgb3V0ZGF0ZWQgKi8KIAlpZiAoc3RhcnRwcml2LT51aWQudHlwZSAhPSBVQV9CQVNFX0RFVklDRSkgewpAQCAtMzM3LDcwICs0NzEsOTQgQEAKIAljYXNlIERBU0RfRUNLRF9DQ1dfUkVBRF9LRDoKIAljYXNlIERBU0RfRUNLRF9DQ1dfUkVBRF9LRF9NVDoKIAljYXNlIERBU0RfRUNLRF9DQ1dfUkVBRF9DT1VOVDoKLQkJZGF0YS0+bWFzay5wZXJtID0gMHgxOwotCQlkYXRhLT5hdHRyaWJ1dGVzLm9wZXJhdGlvbiA9IGJhc2Vwcml2LT5hdHRyaWIub3BlcmF0aW9uOworCQlkZWRhdGEtPm1hc2sucGVybSA9IDB4MTsKKwkJZGVkYXRhLT5hdHRyaWJ1dGVzLm9wZXJhdGlvbiA9IGJhc2Vwcml2LT5hdHRyaWIub3BlcmF0aW9uOworCQlicmVhazsKKwljYXNlIERBU0RfRUNLRF9DQ1dfUkVBRF9UUkFDS19EQVRBOgorCQlkZWRhdGEtPm1hc2sucGVybSA9IDB4MTsKKwkJZGVkYXRhLT5hdHRyaWJ1dGVzLm9wZXJhdGlvbiA9IGJhc2Vwcml2LT5hdHRyaWIub3BlcmF0aW9uOworCQlkZWRhdGEtPmJsa19zaXplID0gMDsKIAkJYnJlYWs7CiAJY2FzZSBEQVNEX0VDS0RfQ0NXX1dSSVRFOgogCWNhc2UgREFTRF9FQ0tEX0NDV19XUklURV9NVDoKIAljYXNlIERBU0RfRUNLRF9DQ1dfV1JJVEVfS0Q6CiAJY2FzZSBEQVNEX0VDS0RfQ0NXX1dSSVRFX0tEX01UOgotCQlkYXRhLT5tYXNrLnBlcm0gPSAweDAyOwotCQlkYXRhLT5hdHRyaWJ1dGVzLm9wZXJhdGlvbiA9IGJhc2Vwcml2LT5hdHRyaWIub3BlcmF0aW9uOworCQlkZWRhdGEtPm1hc2sucGVybSA9IDB4MDI7CisJCWRlZGF0YS0+YXR0cmlidXRlcy5vcGVyYXRpb24gPSBiYXNlcHJpdi0+YXR0cmliLm9wZXJhdGlvbjsKIAkJcmMgPSBjaGVja19YUkNfb25fcHJlZml4KHBmeGRhdGEsIGJhc2VkZXYpOwogCQlicmVhazsKIAljYXNlIERBU0RfRUNLRF9DQ1dfV1JJVEVfQ0tEOgogCWNhc2UgREFTRF9FQ0tEX0NDV19XUklURV9DS0RfTVQ6Ci0JCWRhdGEtPmF0dHJpYnV0ZXMub3BlcmF0aW9uID0gREFTRF9CWVBBU1NfQ0FDSEU7CisJCWRlZGF0YS0+YXR0cmlidXRlcy5vcGVyYXRpb24gPSBEQVNEX0JZUEFTU19DQUNIRTsKIAkJcmMgPSBjaGVja19YUkNfb25fcHJlZml4KHBmeGRhdGEsIGJhc2VkZXYpOwogCQlicmVhazsKIAljYXNlIERBU0RfRUNLRF9DQ1dfRVJBU0U6CiAJY2FzZSBEQVNEX0VDS0RfQ0NXX1dSSVRFX0hPTUVfQUREUkVTUzoKIAljYXNlIERBU0RfRUNLRF9DQ1dfV1JJVEVfUkVDT1JEX1pFUk86Ci0JCWRhdGEtPm1hc2sucGVybSA9IDB4MzsKLQkJZGF0YS0+bWFzay5hdXRoID0gMHgxOwotCQlkYXRhLT5hdHRyaWJ1dGVzLm9wZXJhdGlvbiA9IERBU0RfQllQQVNTX0NBQ0hFOworCQlkZWRhdGEtPm1hc2sucGVybSA9IDB4MzsKKwkJZGVkYXRhLT5tYXNrLmF1dGggPSAweDE7CisJCWRlZGF0YS0+YXR0cmlidXRlcy5vcGVyYXRpb24gPSBEQVNEX0JZUEFTU19DQUNIRTsKKwkJcmMgPSBjaGVja19YUkNfb25fcHJlZml4KHBmeGRhdGEsIGJhc2VkZXYpOworCQlicmVhazsKKwljYXNlIERBU0RfRUNLRF9DQ1dfV1JJVEVfVFJBQ0tfREFUQToKKwkJZGVkYXRhLT5tYXNrLnBlcm0gPSAweDAyOworCQlkZWRhdGEtPmF0dHJpYnV0ZXMub3BlcmF0aW9uID0gYmFzZXByaXYtPmF0dHJpYi5vcGVyYXRpb247CisJCWRlZGF0YS0+YmxrX3NpemUgPSBibGtzaXplOwogCQlyYyA9IGNoZWNrX1hSQ19vbl9wcmVmaXgocGZ4ZGF0YSwgYmFzZWRldik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBiYXNlZGV2LCAidW5rbm93biBvcGNvZGUgMHgleCIsIGNtZCk7Ci0JCWJyZWFrOworCQlEQkZfREVWX0VWRU5UKERCRl9FUlIsIGJhc2VkZXYsCisJCQkgICAgIlBGWCBMUkUgdW5rbm93biBvcGNvZGUgMHgleCIsIGNtZCk7CisJCUJVRygpOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlkYXRhLT5hdHRyaWJ1dGVzLm1vZGUgPSAweDM7CS8qIEVDS0QgKi8KKwlkZWRhdGEtPmF0dHJpYnV0ZXMubW9kZSA9IDB4MzsJLyogRUNLRCAqLwogCiAJaWYgKChiYXNlcHJpdi0+cmRjX2RhdGEuY3VfdHlwZSA9PSAweDIxMDUgfHwKIAkgICAgIGJhc2Vwcml2LT5yZGNfZGF0YS5jdV90eXBlID09IDB4MjEwNyB8fAogCSAgICAgYmFzZXByaXYtPnJkY19kYXRhLmN1X3R5cGUgPT0gMHgxNzUwKQogCSAgICAmJiAhKGJhc2Vwcml2LT51c2VzX2NkbCAmJiB0cmsgPCAyKSkKLQkJZGF0YS0+Z2FfZXh0ZW5kZWQgfD0gMHg0MDsgLyogUmVndWxhciBEYXRhIEZvcm1hdCBNb2RlICovCisJCWRlZGF0YS0+Z2FfZXh0ZW5kZWQgfD0gMHg0MDsgLyogUmVndWxhciBEYXRhIEZvcm1hdCBNb2RlICovCiAKLQlnZW8uY3lsID0gYmFzZXByaXYtPnJkY19kYXRhLm5vX2N5bDsKLQlnZW8uaGVhZCA9IGJhc2Vwcml2LT5yZGNfZGF0YS50cmtfcGVyX2N5bDsKLQliZWcuY3lsID0gdHJrIC8gZ2VvLmhlYWQ7Ci0JYmVnLmhlYWQgPSB0cmsgJSBnZW8uaGVhZDsKLQllbmQuY3lsID0gdG90cmsgLyBnZW8uaGVhZDsKLQllbmQuaGVhZCA9IHRvdHJrICUgZ2VvLmhlYWQ7CisJaGVhZHMgPSBiYXNlcHJpdi0+cmRjX2RhdGEudHJrX3Blcl9jeWw7CisJYmVnY3lsID0gdHJrIC8gaGVhZHM7CisJYmVnaGVhZCA9IHRyayAlIGhlYWRzOworCWVuZGN5bCA9IHRvdHJrIC8gaGVhZHM7CisJZW5kaGVhZCA9IHRvdHJrICUgaGVhZHM7CiAKIAkvKiBjaGVjayBmb3Igc2VxdWVudGlhbCBwcmVzdGFnZSAtIGVuaGFuY2UgY3lsaW5kZXIgcmFuZ2UgKi8KLQlpZiAoZGF0YS0+YXR0cmlidXRlcy5vcGVyYXRpb24gPT0gREFTRF9TRVFfUFJFU1RBR0UgfHwKLQkgICAgZGF0YS0+YXR0cmlidXRlcy5vcGVyYXRpb24gPT0gREFTRF9TRVFfQUNDRVNTKSB7CisJaWYgKGRlZGF0YS0+YXR0cmlidXRlcy5vcGVyYXRpb24gPT0gREFTRF9TRVFfUFJFU1RBR0UgfHwKKwkgICAgZGVkYXRhLT5hdHRyaWJ1dGVzLm9wZXJhdGlvbiA9PSBEQVNEX1NFUV9BQ0NFU1MpIHsKIAotCQlpZiAoZW5kLmN5bCArIGJhc2Vwcml2LT5hdHRyaWIubnJfY3lsIDwgZ2VvLmN5bCkKLQkJCWVuZC5jeWwgKz0gYmFzZXByaXYtPmF0dHJpYi5ucl9jeWw7CisJCWlmIChlbmRjeWwgKyBiYXNlcHJpdi0+YXR0cmliLm5yX2N5bCA8IGJhc2Vwcml2LT5yZWFsX2N5bCkKKwkJCWVuZGN5bCArPSBiYXNlcHJpdi0+YXR0cmliLm5yX2N5bDsKIAkJZWxzZQotCQkJZW5kLmN5bCA9IChnZW8uY3lsIC0gMSk7CisJCQllbmRjeWwgPSAoYmFzZXByaXYtPnJlYWxfY3lsIC0gMSk7CiAJfQogCi0JZGF0YS0+YmVnX2V4dC5jeWwgPSBiZWcuY3lsOwotCWRhdGEtPmJlZ19leHQuaGVhZCA9IGJlZy5oZWFkOwotCWRhdGEtPmVuZF9leHQuY3lsID0gZW5kLmN5bDsKLQlkYXRhLT5lbmRfZXh0LmhlYWQgPSBlbmQuaGVhZDsKKwlzZXRfY2hfdCgmZGVkYXRhLT5iZWdfZXh0LCBiZWdjeWwsIGJlZ2hlYWQpOworCXNldF9jaF90KCZkZWRhdGEtPmVuZF9leHQsIGVuZGN5bCwgZW5kaGVhZCk7CisKKwlpZiAoZm9ybWF0ID09IDEpIHsKKwkJZmlsbF9MUkVfZGF0YShscmVkYXRhLCB0cmssIHJlY19vbl90cmssIGNvdW50LCBjbWQsCisJCQkgICAgICBiYXNlZGV2LCBibGtzaXplLCB0bGYpOworCX0KKwogCXJldHVybiByYzsKIH0KIAorc3RhdGljIGludCBwcmVmaXgoc3RydWN0IGNjdzEgKmNjdywgc3RydWN0IFBGWF9lY2tkX2RhdGEgKnBmeGRhdGEsCisJCSAgdW5zaWduZWQgaW50IHRyaywgdW5zaWduZWQgaW50IHRvdHJrLCBpbnQgY21kLAorCQkgIHN0cnVjdCBkYXNkX2RldmljZSAqYmFzZWRldiwgc3RydWN0IGRhc2RfZGV2aWNlICpzdGFydGRldikKK3sKKwlyZXR1cm4gcHJlZml4X0xSRShjY3csIHBmeGRhdGEsIHRyaywgdG90cmssIGNtZCwgYmFzZWRldiwgc3RhcnRkZXYsCisJCQkgIDAsIDAsIDAsIDAsIDApOworfQorCiBzdGF0aWMgdm9pZAotbG9jYXRlX3JlY29yZChzdHJ1Y3QgY2N3MSAqY2N3LCBzdHJ1Y3QgTE9fZWNrZF9kYXRhICpkYXRhLCBpbnQgdHJrLAotCSAgICAgIGludCByZWNfb25fdHJrLCBpbnQgbm9fcmVjLCBpbnQgY21kLAorbG9jYXRlX3JlY29yZChzdHJ1Y3QgY2N3MSAqY2N3LCBzdHJ1Y3QgTE9fZWNrZF9kYXRhICpkYXRhLCB1bnNpZ25lZCBpbnQgdHJrLAorCSAgICAgIHVuc2lnbmVkIGludCByZWNfb25fdHJrLCBpbnQgbm9fcmVjLCBpbnQgY21kLAogCSAgICAgIHN0cnVjdCBkYXNkX2RldmljZSAqIGRldmljZSwgaW50IHJlY2xlbikKIHsKIAlzdHJ1Y3QgZGFzZF9lY2tkX3ByaXZhdGUgKnByaXZhdGU7CkBAIC00OTEsMTIgKzY0OSwxNCBAQAogCQlkYXRhLT5vcGVyYXRpb24ub3BlcmF0aW9uID0gMHgwYjsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJREVWX01FU1NBR0UoS0VSTl9FUlIsIGRldmljZSwgInVua25vd24gb3Bjb2RlIDB4JXgiLCBjbWQpOworCQlEQkZfREVWX0VWRU5UKERCRl9FUlIsIGRldmljZSwgInVua25vd24gbG9jYXRlIHJlY29yZCAiCisJCQkgICAgICAib3Bjb2RlIDB4JXgiLCBjbWQpOwogCX0KLQlkYXRhLT5zZWVrX2FkZHIuY3lsID0gZGF0YS0+c2VhcmNoX2FyZy5jeWwgPQotCQl0cmsgLyBwcml2YXRlLT5yZGNfZGF0YS50cmtfcGVyX2N5bDsKLQlkYXRhLT5zZWVrX2FkZHIuaGVhZCA9IGRhdGEtPnNlYXJjaF9hcmcuaGVhZCA9Ci0JCXRyayAlIHByaXZhdGUtPnJkY19kYXRhLnRya19wZXJfY3lsOworCXNldF9jaF90KCZkYXRhLT5zZWVrX2FkZHIsCisJCSB0cmsgLyBwcml2YXRlLT5yZGNfZGF0YS50cmtfcGVyX2N5bCwKKwkJIHRyayAlIHByaXZhdGUtPnJkY19kYXRhLnRya19wZXJfY3lsKTsKKwlkYXRhLT5zZWFyY2hfYXJnLmN5bCA9IGRhdGEtPnNlZWtfYWRkci5jeWw7CisJZGF0YS0+c2VhcmNoX2FyZy5oZWFkID0gZGF0YS0+c2Vla19hZGRyLmhlYWQ7CiAJZGF0YS0+c2VhcmNoX2FyZy5yZWNvcmQgPSByZWNfb25fdHJrOwogfQogCkBAIC01ODUsOCArNzQ1LDggQEAKIAljcXIgPSBkYXNkX3NtYWxsb2NfcmVxdWVzdCgiRUNLRCIsIDEgLyogUkNEICovLCBjaXctPmNvdW50LCBkZXZpY2UpOwogCiAJaWYgKElTX0VSUihjcXIpKSB7Ci0JCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJICAgICJDb3VsZCBub3QgYWxsb2NhdGUgUkNEIHJlcXVlc3QiKTsKKwkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJICAgICAgIkNvdWxkIG5vdCBhbGxvY2F0ZSBSQ0QgcmVxdWVzdCIpOwogCQlyZXR1cm4gY3FyOwogCX0KIApAQCAtNzM2LDE0ICs4OTYsMTYgQEAKIAkJCXJjID0gZGFzZF9lY2tkX3JlYWRfY29uZl9scG0oZGV2aWNlLCAmY29uZl9kYXRhLAogCQkJCQkJICAgICAmY29uZl9sZW4sIGxwbSk7CiAJCQlpZiAocmMgJiYgcmMgIT0gLUVPUE5PVFNVUFApIHsJLyogLUVPUE5PVFNVUFAgaXMgb2sgKi8KLQkJCQlNRVNTQUdFKEtFUk5fV0FSTklORywKLQkJCQkJIlJlYWQgY29uZmlndXJhdGlvbiBkYXRhIHJldHVybmVkICIKLQkJCQkJImVycm9yICVkIiwgcmMpOworCQkJCURCRl9FVkVOVChEQkZfV0FSTklORywKKwkJCQkJICAiUmVhZCBjb25maWd1cmF0aW9uIGRhdGEgcmV0dXJuZWQgIgorCQkJCQkgICJlcnJvciAlZCBmb3IgZGV2aWNlOiAlcyIsIHJjLAorCQkJCQkgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOwogCQkJCXJldHVybiByYzsKIAkJCX0KIAkJCWlmIChjb25mX2RhdGEgPT0gTlVMTCkgewotCQkJCU1FU1NBR0UoS0VSTl9XQVJOSU5HLCAiJXMiLCAiTm8gY29uZmlndXJhdGlvbiAiCi0JCQkJCSJkYXRhIHJldHJpZXZlZCIpOworCQkJCURCRl9FVkVOVChEQkZfV0FSTklORywgIk5vIGNvbmZpZ3VyYXRpb24gIgorCQkJCQkgICJkYXRhIHJldHJpZXZlZCBmb3IgZGV2aWNlOiAlcyIsCisJCQkJCSAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CiAJCQkJY29udGludWU7CS8qIG5vIGVycm9yICovCiAJCQl9CiAJCQkvKiBzYXZlIGZpcnN0IHZhbGlkIGNvbmZpZ3VyYXRpb24gZGF0YSAqLwpAQCAtNzkwLDggKzk1Miw5IEBACiAJCQkJICAgIHNpemVvZihzdHJ1Y3QgZGFzZF9yc3NkX2ZlYXR1cmVzKSksCiAJCQkJICAgZGV2aWNlKTsKIAlpZiAoSVNfRVJSKGNxcikpIHsKLQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkgICAgIkNvdWxkIG5vdCBhbGxvY2F0ZSBpbml0aWFsaXphdGlvbiByZXF1ZXN0Iik7CisJCURCRl9FVkVOVChEQkZfV0FSTklORywgIkNvdWxkIG5vdCBhbGxvY2F0ZSBpbml0aWFsaXphdGlvbiAiCisJCQkgICJyZXF1ZXN0IGZvciBkZXZpY2U6ICVzIiwKKwkJCSAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CiAJCXJldHVybiBQVFJfRVJSKGNxcik7CiAJfQogCWNxci0+c3RhcnRkZXYgPSBkZXZpY2U7CkBAIC04NDAsNyArMTAwMyw4IEBACiAvKgogICogQnVpbGQgQ1AgZm9yIFBlcmZvcm0gU3Vic3lzdGVtIEZ1bmN0aW9uIC0gU1NDLgogICovCi1zdGF0aWMgc3RydWN0IGRhc2RfY2N3X3JlcSAqZGFzZF9lY2tkX2J1aWxkX3BzZl9zc2Moc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UpCitzdGF0aWMgc3RydWN0IGRhc2RfY2N3X3JlcSAqZGFzZF9lY2tkX2J1aWxkX3BzZl9zc2Moc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UsCisJCQkJCQkgICAgaW50IGVuYWJsZV9wYXYpCiB7CiAJc3RydWN0IGRhc2RfY2N3X3JlcSAqY3FyOwogCXN0cnVjdCBkYXNkX3BzZl9zc2NfZGF0YSAqcHNmX3NzY19kYXRhOwpAQCAtODUxLDE1ICsxMDE1LDE3IEBACiAJCQkJICBkZXZpY2UpOwogCiAJaWYgKElTX0VSUihjcXIpKSB7Ci0JCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCiAJCQkgICAiQ291bGQgbm90IGFsbG9jYXRlIFBTRi1TU0MgcmVxdWVzdCIpOwogCQlyZXR1cm4gY3FyOwogCX0KIAlwc2Zfc3NjX2RhdGEgPSAoc3RydWN0IGRhc2RfcHNmX3NzY19kYXRhICopY3FyLT5kYXRhOwogCXBzZl9zc2NfZGF0YS0+b3JkZXIgPSBQU0ZfT1JERVJfU1NDOwotCXBzZl9zc2NfZGF0YS0+c3Vib3JkZXIgPSAweDg4OwotCXBzZl9zc2NfZGF0YS0+cmVzZXJ2ZWRbMF0gPSAweDg4OwotCisJcHNmX3NzY19kYXRhLT5zdWJvcmRlciA9IDB4NDA7CisJaWYgKGVuYWJsZV9wYXYpIHsKKwkJcHNmX3NzY19kYXRhLT5zdWJvcmRlciB8PSAweDg4OworCQlwc2Zfc3NjX2RhdGEtPnJlc2VydmVkWzBdID0gMHg4ODsKKwl9CiAJY2N3ID0gY3FyLT5jcGFkZHI7CiAJY2N3LT5jbWRfY29kZSA9IERBU0RfRUNLRF9DQ1dfUFNGOwogCWNjdy0+Y2RhID0gKF9fdTMyKShhZGRyX3QpcHNmX3NzY19kYXRhOwpAQCAtODgwLDEyICsxMDQ2LDEyIEBACiAgKiBjYWxsIG1pZ2h0IGNoYW5nZSBiZWhhdmlvdXIgb2YgREFTRCBkZXZpY2VzLgogICovCiBzdGF0aWMgaW50Ci1kYXNkX2Vja2RfcHNmX3NzYyhzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSkKK2Rhc2RfZWNrZF9wc2Zfc3NjKHN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlLCBpbnQgZW5hYmxlX3BhdikKIHsKIAlzdHJ1Y3QgZGFzZF9jY3dfcmVxICpjcXI7CiAJaW50IHJjOwogCi0JY3FyID0gZGFzZF9lY2tkX2J1aWxkX3BzZl9zc2MoZGV2aWNlKTsKKwljcXIgPSBkYXNkX2Vja2RfYnVpbGRfcHNmX3NzYyhkZXZpY2UsIGVuYWJsZV9wYXYpOwogCWlmIChJU19FUlIoY3FyKSkKIAkJcmV0dXJuIFBUUl9FUlIoY3FyKTsKIApAQCAtOTA0LDE5ICsxMDcwLDIwIEBACiB7CiAJaW50IHJjOwogCXN0cnVjdCBkYXNkX2Vja2RfcHJpdmF0ZSAqcHJpdmF0ZTsKKwlpbnQgZW5hYmxlX3BhdjsKIAotCS8qIEN1cnJlbnRseSBQQVYgaXMgdGhlIG9ubHkgcmVhc29uIHRvICd2YWxpZGF0ZScgc2VydmVyIG9uIExQQVIgKi8KIAlpZiAoZGFzZF9ub3BhdiB8fCBNQUNISU5FX0lTX1ZNKQotCQlyZXR1cm4gMDsKLQotCXJjID0gZGFzZF9lY2tkX3BzZl9zc2MoZGV2aWNlKTsKKwkJZW5hYmxlX3BhdiA9IDA7CisJZWxzZQorCQllbmFibGVfcGF2ID0gMTsKKwlyYyA9IGRhc2RfZWNrZF9wc2Zfc3NjKGRldmljZSwgZW5hYmxlX3Bhdik7CiAJLyogbWF5IGJlIHJlcXVlc3RlZCBmZWF0dXJlIGlzIG5vdCBhdmFpbGFibGUgb24gc2VydmVyLAogCSAqIHRoZXJlZm9yZSBqdXN0IHJlcG9ydCBlcnJvciBhbmQgZ28gYWhlYWQgKi8KIAlwcml2YXRlID0gKHN0cnVjdCBkYXNkX2Vja2RfcHJpdmF0ZSAqKSBkZXZpY2UtPnByaXZhdGU7Ci0JREVWX01FU1NBR0UoS0VSTl9JTkZPLCBkZXZpY2UsCi0JCSAgICAiUFNGLVNTQyBvbiBzdG9yYWdlIHN1YnN5c3RlbSAlcy4lcy4lMDR4IHJldHVybmVkIHJjPSVkIiwKLQkJICAgIHByaXZhdGUtPnVpZC52ZW5kb3IsIHByaXZhdGUtPnVpZC5zZXJpYWwsCi0JCSAgICBwcml2YXRlLT51aWQuc3NpZCwgcmMpOworCURCRl9FVkVOVChEQkZfV0FSTklORywgIlBTRi1TU0Mgb24gc3RvcmFnZSBzdWJzeXN0ZW0gJXMuJXMuJTA0eCAiCisJCSAgInJldHVybmVkIHJjPSVkIGZvciBkZXZpY2U6ICVzIiwKKwkJICBwcml2YXRlLT51aWQudmVuZG9yLCBwcml2YXRlLT51aWQuc2VyaWFsLAorCQkgIHByaXZhdGUtPnVpZC5zc2lkLCByYywgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CiAJLyogUkUtUmVhZCBDb25maWd1cmF0aW9uIERhdGEgKi8KIAlyZXR1cm4gZGFzZF9lY2tkX3JlYWRfY29uZihkZXZpY2UpOwogfQpAQCAtOTM4LDkgKzExMDUsOSBAQAogCQlwcml2YXRlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRhc2RfZWNrZF9wcml2YXRlKSwKIAkJCQkgIEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKIAkJaWYgKHByaXZhdGUgPT0gTlVMTCkgewotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQgZm9yIHByaXZhdGUgIgotCQkJCSAgICAiZGF0YSIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAiQWxsb2NhdGluZyBtZW1vcnkgZm9yIHByaXZhdGUgREFTRCBkYXRhICIKKwkJCQkgImZhaWxlZFxuIik7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCQlkZXZpY2UtPnByaXZhdGUgPSAodm9pZCAqKSBwcml2YXRlOwpAQCAtOTY1LDggKzExMzIsOSBAQAogCWlmIChwcml2YXRlLT51aWQudHlwZSA9PSBVQV9CQVNFX0RFVklDRSkgewogCQlibG9jayA9IGRhc2RfYWxsb2NfYmxvY2soKTsKIAkJaWYgKElTX0VSUihibG9jaykpIHsKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiY291bGQgbm90IGFsbG9jYXRlIGRhc2QgYmxvY2sgc3RydWN0dXJlIik7CisJCQlEQkZfRVZFTlQoREJGX1dBUk5JTkcsICJjb3VsZCBub3QgYWxsb2NhdGUgZGFzZCAiCisJCQkJICAiYmxvY2sgc3RydWN0dXJlIGZvciBkZXZpY2U6ICVzIiwKKwkJCQkgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOwogCQkJcmMgPSBQVFJfRVJSKGJsb2NrKTsKIAkJCWdvdG8gb3V0X2VycjE7CiAJCX0KQEAgLTk5NywyMCArMTE2NSwyNyBAQAogCW1lbXNldChyZGNfZGF0YSwgMCwgc2l6ZW9mKHJkY19kYXRhKSk7CiAJcmMgPSBkYXNkX2dlbmVyaWNfcmVhZF9kZXZfY2hhcnMoZGV2aWNlLCAiRUNLRCIsICZyZGNfZGF0YSwgNjQpOwogCWlmIChyYykgewotCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwKLQkJCSAgICAiUmVhZCBkZXZpY2UgY2hhcmFjdGVyaXN0aWNzIHJldHVybmVkICIKLQkJCSAgICAicmM9JWQiLCByYyk7CisJCURCRl9FVkVOVChEQkZfV0FSTklORywKKwkJCSAgIlJlYWQgZGV2aWNlIGNoYXJhY3RlcmlzdGljcyBmYWlsZWQsIHJjPSVkIGZvciAiCisJCQkgICJkZXZpY2U6ICVzIiwgcmMsIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOwogCQlnb3RvIG91dF9lcnIzOwogCX0KLQlERVZfTUVTU0FHRShLRVJOX0lORk8sIGRldmljZSwKLQkJICAgICIlMDRYLyUwMlgoQ1U6JTA0WC8lMDJYKSBDeWw6JWQgSGVhZDolZCBTZWM6JWQiLAotCQkgICAgcHJpdmF0ZS0+cmRjX2RhdGEuZGV2X3R5cGUsCi0JCSAgICBwcml2YXRlLT5yZGNfZGF0YS5kZXZfbW9kZWwsCi0JCSAgICBwcml2YXRlLT5yZGNfZGF0YS5jdV90eXBlLAotCQkgICAgcHJpdmF0ZS0+cmRjX2RhdGEuY3VfbW9kZWwubW9kZWwsCi0JCSAgICBwcml2YXRlLT5yZGNfZGF0YS5ub19jeWwsCi0JCSAgICBwcml2YXRlLT5yZGNfZGF0YS50cmtfcGVyX2N5bCwKLQkJICAgIHByaXZhdGUtPnJkY19kYXRhLnNlY19wZXJfdHJrKTsKKwkvKiBmaW5kIHRoZSB2YWlsZCBjeWxpbmRlciBzaXplICovCisJaWYgKHByaXZhdGUtPnJkY19kYXRhLm5vX2N5bCA9PSBMVl9DT01QQVRfQ1lMICYmCisJICAgIHByaXZhdGUtPnJkY19kYXRhLmxvbmdfbm9fY3lsKQorCQlwcml2YXRlLT5yZWFsX2N5bCA9IHByaXZhdGUtPnJkY19kYXRhLmxvbmdfbm9fY3lsOworCWVsc2UKKwkJcHJpdmF0ZS0+cmVhbF9jeWwgPSBwcml2YXRlLT5yZGNfZGF0YS5ub19jeWw7CisKKwlkZXZfaW5mbygmZGV2aWNlLT5jZGV2LT5kZXYsICJOZXcgREFTRCAlMDRYLyUwMlggKENVICUwNFgvJTAyWCkgIgorCQkgIndpdGggJWQgY3lsaW5kZXJzLCAlZCBoZWFkcywgJWQgc2VjdG9yc1xuIiwKKwkJIHByaXZhdGUtPnJkY19kYXRhLmRldl90eXBlLAorCQkgcHJpdmF0ZS0+cmRjX2RhdGEuZGV2X21vZGVsLAorCQkgcHJpdmF0ZS0+cmRjX2RhdGEuY3VfdHlwZSwKKwkJIHByaXZhdGUtPnJkY19kYXRhLmN1X21vZGVsLm1vZGVsLAorCQkgICAgcHJpdmF0ZS0+cmVhbF9jeWwsCisJCSBwcml2YXRlLT5yZGNfZGF0YS50cmtfcGVyX2N5bCwKKwkJIHByaXZhdGUtPnJkY19kYXRhLnNlY19wZXJfdHJrKTsKIAlyZXR1cm4gMDsKIAogb3V0X2VycjM6CkBAIC0xMTUxLDE0ICsxMzI2LDEyIEBACiAJc3RhdHVzID0gcHJpdmF0ZS0+aW5pdF9jcXJfc3RhdHVzOwogCXByaXZhdGUtPmluaXRfY3FyX3N0YXR1cyA9IC0xOwogCWlmIChzdGF0dXMgIT0gREFTRF9DUVJfRE9ORSkgewotCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCSAgICAidm9sdW1lIGFuYWx5c2lzIHJldHVybmVkIHVuZm9ybWF0dGVkIGRpc2siKTsKKwkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJICAgICJUaGUgREFTRCBpcyBub3QgZm9ybWF0dGVkXG4iKTsKIAkJcmV0dXJuIC1FTUVESVVNVFlQRTsKIAl9CiAKIAlwcml2YXRlLT51c2VzX2NkbCA9IDE7Ci0JLyogQ2FsY3VsYXRlIG51bWJlciBvZiBibG9ja3MvcmVjb3JkcyBwZXIgdHJhY2suICovCi0JYmxrX3Blcl90cmsgPSByZWNzX3Blcl90cmFjaygmcHJpdmF0ZS0+cmRjX2RhdGEsIDAsIGJsb2NrLT5icF9ibG9jayk7CiAJLyogQ2hlY2sgVHJhY2sgMCBmb3IgQ29tcGF0aWJsZSBEaXNrIExheW91dCAqLwogCWNvdW50X2FyZWEgPSBOVUxMOwogCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKQEAgLTExODIsOCArMTM1NSw4IEBACiAJCQljb3VudF9hcmVhID0gJnByaXZhdGUtPmNvdW50X2FyZWFbMF07CiAJfSBlbHNlIHsKIAkJaWYgKHByaXZhdGUtPmNvdW50X2FyZWFbM10ucmVjb3JkID09IDEpCi0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIlRyayAwOiBubyByZWNvcmRzIGFmdGVyIFZUT0MhIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICJUcmFjayAwIGhhcyBubyByZWNvcmRzIGZvbGxvd2luZyB0aGUgVlRPQ1xuIik7CiAJfQogCWlmIChjb3VudF9hcmVhICE9IE5VTEwgJiYgY291bnRfYXJlYS0+a2wgPT0gMCkgewogCQkvKiB3ZSBmb3VuZCBub3R0aGluZyB2aW9sYXRpbmcgb3VyIGRpc2sgbGF5b3V0ICovCkBAIC0xMTkxLDggKzEzNjQsOCBAQAogCQkJYmxvY2stPmJwX2Jsb2NrID0gY291bnRfYXJlYS0+ZGw7CiAJfQogCWlmIChibG9jay0+YnBfYmxvY2sgPT0gMCkgewotCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCSAgICAiVm9sdW1lIGhhcyBpbmNvbXBhdGlibGUgZGlzayBsYXlvdXQiKTsKKwkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJICJUaGUgZGlzayBsYXlvdXQgb2YgdGhlIERBU0QgaXMgbm90IHN1cHBvcnRlZFxuIik7CiAJCXJldHVybiAtRU1FRElVTVRZUEU7CiAJfQogCWJsb2NrLT5zMmJfc2hpZnQgPSAwOwkvKiBiaXRzIHRvIHNoaWZ0IDUxMiB0byBnZXQgYSBibG9jayAqLwpAQCAtMTIwMCwxOSArMTM3MywxOSBAQAogCQlibG9jay0+czJiX3NoaWZ0Kys7CiAKIAlibGtfcGVyX3RyayA9IHJlY3NfcGVyX3RyYWNrKCZwcml2YXRlLT5yZGNfZGF0YSwgMCwgYmxvY2stPmJwX2Jsb2NrKTsKLQlibG9jay0+YmxvY2tzID0gKHByaXZhdGUtPnJkY19kYXRhLm5vX2N5bCAqCisJYmxvY2stPmJsb2NrcyA9IChwcml2YXRlLT5yZWFsX2N5bCAqCiAJCQkgIHByaXZhdGUtPnJkY19kYXRhLnRya19wZXJfY3lsICoKIAkJCSAgYmxrX3Blcl90cmspOwogCi0JREVWX01FU1NBR0UoS0VSTl9JTkZPLCBkZXZpY2UsCi0JCSAgICAiKCVka0IgYmxrcyk6ICVka0IgYXQgJWRrQi90cmsgJXMiLAotCQkgICAgKGJsb2NrLT5icF9ibG9jayA+PiAxMCksCi0JCSAgICAoKHByaXZhdGUtPnJkY19kYXRhLm5vX2N5bCAqCi0JCSAgICAgIHByaXZhdGUtPnJkY19kYXRhLnRya19wZXJfY3lsICoKLQkJICAgICAgYmxrX3Blcl90cmsgKiAoYmxvY2stPmJwX2Jsb2NrID4+IDkpKSA+PiAxKSwKLQkJICAgICgoYmxrX3Blcl90cmsgKiBibG9jay0+YnBfYmxvY2spID4+IDEwKSwKLQkJICAgIHByaXZhdGUtPnVzZXNfY2RsID8KLQkJICAgICJjb21wYXRpYmxlIGRpc2sgbGF5b3V0IiA6ICJsaW51eCBkaXNrIGxheW91dCIpOworCWRldl9pbmZvKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJICJEQVNEIHdpdGggJWQgS0IvYmxvY2ssICVkIEtCIHRvdGFsIHNpemUsICVkIEtCL3RyYWNrLCAiCisJCSAiJXNcbiIsIChibG9jay0+YnBfYmxvY2sgPj4gMTApLAorCQkgKChwcml2YXRlLT5yZWFsX2N5bCAqCisJCSAgIHByaXZhdGUtPnJkY19kYXRhLnRya19wZXJfY3lsICoKKwkJICAgYmxrX3Blcl90cmsgKiAoYmxvY2stPmJwX2Jsb2NrID4+IDkpKSA+PiAxKSwKKwkJICgoYmxrX3Blcl90cmsgKiBibG9jay0+YnBfYmxvY2spID4+IDEwKSwKKwkJIHByaXZhdGUtPnVzZXNfY2RsID8KKwkJICJjb21wYXRpYmxlIGRpc2sgbGF5b3V0IiA6ICJsaW51eCBkaXNrIGxheW91dCIpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMjYyLDMxICsxNDM1LDM1IEBACiAJc3RydWN0IGVja2RfY291bnQgKmVjdDsKIAlzdHJ1Y3QgY2N3MSAqY2N3OwogCXZvaWQgKmRhdGE7Ci0JaW50IHJwdCwgY3lsLCBoZWFkOworCWludCBycHQ7CisJc3RydWN0IGNoX3QgYWRkcmVzczsKIAlpbnQgY3BsZW5ndGgsIGRhdGFzaXplOwogCWludCBpOworCWludCBpbnRlbnNpdHkgPSAwOworCWludCByMF9wZXJtOwogCiAJcHJpdmF0ZSA9IChzdHJ1Y3QgZGFzZF9lY2tkX3ByaXZhdGUgKikgZGV2aWNlLT5wcml2YXRlOwogCXJwdCA9IHJlY3NfcGVyX3RyYWNrKCZwcml2YXRlLT5yZGNfZGF0YSwgMCwgZmRhdGEtPmJsa3NpemUpOwotCWN5bCA9IGZkYXRhLT5zdGFydF91bml0IC8gcHJpdmF0ZS0+cmRjX2RhdGEudHJrX3Blcl9jeWw7Ci0JaGVhZCA9IGZkYXRhLT5zdGFydF91bml0ICUgcHJpdmF0ZS0+cmRjX2RhdGEudHJrX3Blcl9jeWw7CisJc2V0X2NoX3QoJmFkZHJlc3MsCisJCSBmZGF0YS0+c3RhcnRfdW5pdCAvIHByaXZhdGUtPnJkY19kYXRhLnRya19wZXJfY3lsLAorCQkgZmRhdGEtPnN0YXJ0X3VuaXQgJSBwcml2YXRlLT5yZGNfZGF0YS50cmtfcGVyX2N5bCk7CiAKIAkvKiBTYW5pdHkgY2hlY2tzLiAqLwogCWlmIChmZGF0YS0+c3RhcnRfdW5pdCA+PQotCSAgICAocHJpdmF0ZS0+cmRjX2RhdGEubm9fY3lsICogcHJpdmF0ZS0+cmRjX2RhdGEudHJrX3Blcl9jeWwpKSB7Ci0JCURFVl9NRVNTQUdFKEtFUk5fSU5GTywgZGV2aWNlLCAiVHJhY2sgbm8gJWQgdG9vIGJpZyEiLAotCQkJICAgIGZkYXRhLT5zdGFydF91bml0KTsKKwkgICAgKHByaXZhdGUtPnJlYWxfY3lsICogcHJpdmF0ZS0+cmRjX2RhdGEudHJrX3Blcl9jeWwpKSB7CisJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwgIlN0YXJ0IHRyYWNrIG51bWJlciAlZCB1c2VkIGluICIKKwkJCSAiZm9ybWF0dGluZyBpcyB0b28gYmlnXG4iLCBmZGF0YS0+c3RhcnRfdW5pdCk7CiAJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCX0KIAlpZiAoZmRhdGEtPnN0YXJ0X3VuaXQgPiBmZGF0YS0+c3RvcF91bml0KSB7Ci0JCURFVl9NRVNTQUdFKEtFUk5fSU5GTywgZGV2aWNlLCAiVHJhY2sgJWQgcmVhY2hlZCEgZW5kaW5nLiIsCi0JCQkgICAgZmRhdGEtPnN0YXJ0X3VuaXQpOworCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsICJTdGFydCB0cmFjayAlZCB1c2VkIGluICIKKwkJCSAiZm9ybWF0dGluZyBleGNlZWRzIGVuZCB0cmFja1xuIiwgZmRhdGEtPnN0YXJ0X3VuaXQpOwogCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIAl9CiAJaWYgKGRhc2RfY2hlY2tfYmxvY2tzaXplKGZkYXRhLT5ibGtzaXplKSAhPSAwKSB7Ci0JCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLAotCQkJICAgICJJbnZhbGlkIGJsb2Nrc2l6ZSAlZC4uLnRlcm1pbmF0aW5nISIsCi0JCQkgICAgZmRhdGEtPmJsa3NpemUpOworCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkgIlRoZSBEQVNEIGNhbm5vdCBiZSBmb3JtYXR0ZWQgd2l0aCBibG9jayBzaXplICVkXG4iLAorCQkJIGZkYXRhLT5ibGtzaXplKTsKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiAJfQogCkBAIC0xMjk2LDkgKzE0NzMsMTcgQEAKIAkgKiAgIEJpdCAxOiB3cml0ZSBob21lIGFkZHJlc3MsIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkCiAJICogICBCaXQgMjogaW52YWxpZGF0ZSB0cmFja3MKIAkgKiAgIEJpdCAzOiB1c2UgT1MvMzkwIGNvbXBhdGlibGUgZGlzayBsYXlvdXQgKGNkbCkKKwkgKiAgIEJpdCA0OiBkbyBub3QgYWxsb3cgc3RvcmFnZSBzdWJzeXN0ZW0gdG8gbW9kaWZ5IHJlY29yZCB6ZXJvCiAJICogT25seSBzb21lIGJpdCBjb21iaW5hdGlvbnMgZG8gbWFrZSBzZW5zZS4KIAkgKi8KLQlzd2l0Y2ggKGZkYXRhLT5pbnRlbnNpdHkpIHsKKwlpZiAoZmRhdGEtPmludGVuc2l0eSAmIDB4MTApIHsKKwkJcjBfcGVybSA9IDA7CisJCWludGVuc2l0eSA9IGZkYXRhLT5pbnRlbnNpdHkgJiB+MHgxMDsKKwl9IGVsc2UgeworCQlyMF9wZXJtID0gMTsKKwkJaW50ZW5zaXR5ID0gZmRhdGEtPmludGVuc2l0eTsKKwl9CisJc3dpdGNoIChpbnRlbnNpdHkpIHsKIAljYXNlIDB4MDA6CS8qIE5vcm1hbCBmb3JtYXQgKi8KIAljYXNlIDB4MDg6CS8qIE5vcm1hbCBmb3JtYXQsIHVzZSBjZGwuICovCiAJCWNwbGVuZ3RoID0gMiArIHJwdDsKQEAgLTEzMjIsOCArMTUwNyw4IEBACiAJCQlzaXplb2Yoc3RydWN0IGVja2RfY291bnQpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIkludmFsaWQgZmxhZ3MgMHgleC4iLAotCQkJICAgIGZkYXRhLT5pbnRlbnNpdHkpOworCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsICJBbiBJL08gY29udHJvbCBjYWxsIHVzZWQgIgorCQkJICJpbmNvcnJlY3QgZmxhZ3MgMHgleFxuIiwgZmRhdGEtPmludGVuc2l0eSk7CiAJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCX0KIAkvKiBBbGxvY2F0ZSB0aGUgZm9ybWF0IGNjdyByZXF1ZXN0LiAqLwpAQCAtMTMzNSwxMSArMTUyMCwxNCBAQAogCWRhdGEgPSBmY3AtPmRhdGE7CiAJY2N3ID0gZmNwLT5jcGFkZHI7CiAKLQlzd2l0Y2ggKGZkYXRhLT5pbnRlbnNpdHkgJiB+MHgwOCkgeworCXN3aXRjaCAoaW50ZW5zaXR5ICYgfjB4MDgpIHsKIAljYXNlIDB4MDA6IC8qIE5vcm1hbCBmb3JtYXQuICovCiAJCWRlZmluZV9leHRlbnQoY2N3KyssIChzdHJ1Y3QgREVfZWNrZF9kYXRhICopIGRhdGEsCiAJCQkgICAgICBmZGF0YS0+c3RhcnRfdW5pdCwgZmRhdGEtPnN0YXJ0X3VuaXQsCiAJCQkgICAgICBEQVNEX0VDS0RfQ0NXX1dSSVRFX0NLRCwgZGV2aWNlKTsKKwkJLyogZ3JhbnQgc3Vic3lzdGVtIHBlcm1pc3Npb24gdG8gZm9ybWF0IFIwICovCisJCWlmIChyMF9wZXJtKQorCQkJKChzdHJ1Y3QgREVfZWNrZF9kYXRhICopZGF0YSktPmdhX2V4dGVuZGVkIHw9IDB4MDQ7CiAJCWRhdGEgKz0gc2l6ZW9mKHN0cnVjdCBERV9lY2tkX2RhdGEpOwogCQljY3dbLTFdLmZsYWdzIHw9IENDV19GTEFHX0NDOwogCQlsb2NhdGVfcmVjb3JkKGNjdysrLCAoc3RydWN0IExPX2Vja2RfZGF0YSAqKSBkYXRhLApAQCAtMTM3MywxMSArMTU2MSwxMSBAQAogCQlkYXRhICs9IHNpemVvZihzdHJ1Y3QgTE9fZWNrZF9kYXRhKTsKIAkJYnJlYWs7CiAJfQotCWlmIChmZGF0YS0+aW50ZW5zaXR5ICYgMHgwMSkgewkvKiB3cml0ZSByZWNvcmQgemVybyAqLworCWlmIChpbnRlbnNpdHkgJiAweDAxKSB7CS8qIHdyaXRlIHJlY29yZCB6ZXJvICovCiAJCWVjdCA9IChzdHJ1Y3QgZWNrZF9jb3VudCAqKSBkYXRhOwogCQlkYXRhICs9IHNpemVvZihzdHJ1Y3QgZWNrZF9jb3VudCk7Ci0JCWVjdC0+Y3lsID0gY3lsOwotCQllY3QtPmhlYWQgPSBoZWFkOworCQllY3QtPmN5bCA9IGFkZHJlc3MuY3lsOworCQllY3QtPmhlYWQgPSBhZGRyZXNzLmhlYWQ7CiAJCWVjdC0+cmVjb3JkID0gMDsKIAkJZWN0LT5rbCA9IDA7CiAJCWVjdC0+ZGwgPSA4OwpAQCAtMTM4OCwxMSArMTU3NiwxMSBAQAogCQljY3ctPmNkYSA9IChfX3UzMikoYWRkcl90KSBlY3Q7CiAJCWNjdysrOwogCX0KLQlpZiAoKGZkYXRhLT5pbnRlbnNpdHkgJiB+MHgwOCkgJiAweDA0KSB7CS8qIGVyYXNlIHRyYWNrICovCisJaWYgKChpbnRlbnNpdHkgJiB+MHgwOCkgJiAweDA0KSB7CS8qIGVyYXNlIHRyYWNrICovCiAJCWVjdCA9IChzdHJ1Y3QgZWNrZF9jb3VudCAqKSBkYXRhOwogCQlkYXRhICs9IHNpemVvZihzdHJ1Y3QgZWNrZF9jb3VudCk7Ci0JCWVjdC0+Y3lsID0gY3lsOwotCQllY3QtPmhlYWQgPSBoZWFkOworCQllY3QtPmN5bCA9IGFkZHJlc3MuY3lsOworCQllY3QtPmhlYWQgPSBhZGRyZXNzLmhlYWQ7CiAJCWVjdC0+cmVjb3JkID0gMTsKIAkJZWN0LT5rbCA9IDA7CiAJCWVjdC0+ZGwgPSAwOwpAQCAtMTQwNSwyMCArMTU5MywyMCBAQAogCQlmb3IgKGkgPSAwOyBpIDwgcnB0OyBpKyspIHsKIAkJCWVjdCA9IChzdHJ1Y3QgZWNrZF9jb3VudCAqKSBkYXRhOwogCQkJZGF0YSArPSBzaXplb2Yoc3RydWN0IGVja2RfY291bnQpOwotCQkJZWN0LT5jeWwgPSBjeWw7Ci0JCQllY3QtPmhlYWQgPSBoZWFkOworCQkJZWN0LT5jeWwgPSBhZGRyZXNzLmN5bDsKKwkJCWVjdC0+aGVhZCA9IGFkZHJlc3MuaGVhZDsKIAkJCWVjdC0+cmVjb3JkID0gaSArIDE7CiAJCQllY3QtPmtsID0gMDsKIAkJCWVjdC0+ZGwgPSBmZGF0YS0+Ymxrc2l6ZTsKIAkJCS8qIENoZWNrIGZvciBzcGVjaWFsIHRyYWNrcyAwLTEgd2hlbiBmb3JtYXR0aW5nIENETCAqLwotCQkJaWYgKChmZGF0YS0+aW50ZW5zaXR5ICYgMHgwOCkgJiYKKwkJCWlmICgoaW50ZW5zaXR5ICYgMHgwOCkgJiYKIAkJCSAgICBmZGF0YS0+c3RhcnRfdW5pdCA9PSAwKSB7CiAJCQkJaWYgKGkgPCAzKSB7CiAJCQkJCWVjdC0+a2wgPSA0OwogCQkJCQllY3QtPmRsID0gc2l6ZXNfdHJrMFtpXSAtIDQ7CiAJCQkJfQogCQkJfQotCQkJaWYgKChmZGF0YS0+aW50ZW5zaXR5ICYgMHgwOCkgJiYKKwkJCWlmICgoaW50ZW5zaXR5ICYgMHgwOCkgJiYKIAkJCSAgICBmZGF0YS0+c3RhcnRfdW5pdCA9PSAxKSB7CiAJCQkJZWN0LT5rbCA9IDQ0OwogCQkJCWVjdC0+ZGwgPSBMQUJFTF9TSVpFIC0gNDQ7CkBAIC0xNDc5LDU3ICsxNjY3LDY5IEBACiAJCQkJCQkgICBzdHJ1Y3QgaXJiICppcmIpCiB7CiAJY2hhciBtYXNrOworCWNoYXIgKnNlbnNlID0gTlVMTDsKIAogCS8qIGZpcnN0IG9mIGFsbCBjaGVjayBmb3Igc3RhdGUgY2hhbmdlIHBlbmRpbmcgaW50ZXJydXB0ICovCiAJbWFzayA9IERFVl9TVEFUX0FUVEVOVElPTiB8IERFVl9TVEFUX0RFVl9FTkQgfCBERVZfU1RBVF9VTklUX0VYQ0VQOwotCWlmICgoaXJiLT5zY3N3LmNtZC5kc3RhdCAmIG1hc2spID09IG1hc2spIHsKKwlpZiAoKHNjc3dfZHN0YXQoJmlyYi0+c2NzdykgJiBtYXNrKSA9PSBtYXNrKSB7CiAJCWRhc2RfZ2VuZXJpY19oYW5kbGVfc3RhdGVfY2hhbmdlKGRldmljZSk7CiAJCXJldHVybjsKIAl9CiAKIAkvKiBzdW1tYXJ5IHVuaXQgY2hlY2sgKi8KLQlpZiAoKGlyYi0+c2Nzdy5jbWQuZHN0YXQgJiBERVZfU1RBVF9VTklUX0NIRUNLKSAmJgorCWlmICgoc2Nzd19kc3RhdCgmaXJiLT5zY3N3KSAmIERFVl9TVEFUX1VOSVRfQ0hFQ0spICYmCiAJICAgIChpcmItPmVjd1s3XSA9PSAweDBEKSkgewogCQlkYXNkX2FsaWFzX2hhbmRsZV9zdW1tYXJ5X3VuaXRfY2hlY2soZGV2aWNlLCBpcmIpOwogCQlyZXR1cm47CiAJfQogCi0KKwlzZW5zZSA9IGRhc2RfZ2V0X3NlbnNlKGlyYik7CiAJLyogc2VydmljZSBpbmZvcm1hdGlvbiBtZXNzYWdlIFNJTSAqLwotCWlmIChpcmItPmVzdy5lc3cwLmVydy5jb25zICYmICEoaXJiLT5lY3dbMjddICYgREFTRF9TRU5TRV9CSVRfMCkgJiYKLQkgICAgKChpcmItPmVjd1s2XSAmIERBU0RfU0lNX1NFTlNFKSA9PSBEQVNEX1NJTV9TRU5TRSkpIHsKLQkJZGFzZF8zOTkwX2VycF9oYW5kbGVfc2ltKGRldmljZSwgaXJiLT5lY3cpOworCWlmIChzZW5zZSAmJiAhKHNlbnNlWzI3XSAmIERBU0RfU0VOU0VfQklUXzApICYmCisJICAgICgoc2Vuc2VbNl0gJiBEQVNEX1NJTV9TRU5TRSkgPT0gREFTRF9TSU1fU0VOU0UpKSB7CisJCWRhc2RfMzk5MF9lcnBfaGFuZGxlX3NpbShkZXZpY2UsIHNlbnNlKTsKIAkJZGFzZF9zY2hlZHVsZV9kZXZpY2VfYmgoZGV2aWNlKTsKIAkJcmV0dXJuOwogCX0KIAotCWlmICgoaXJiLT5zY3N3LmNtZC5jYyA9PSAxKSAmJgotCSAgICAoaXJiLT5zY3N3LmNtZC5mY3RsICYgU0NTV19GQ1RMX1NUQVJUX0ZVTkMpICYmCi0JICAgIChpcmItPnNjc3cuY21kLmFjdGwgJiBTQ1NXX0FDVExfU1RBUlRfUEVORCkgJiYKLQkgICAgKGlyYi0+c2Nzdy5jbWQuc3RjdGwgJiBTQ1NXX1NUQ1RMX1NUQVRVU19QRU5EKSkgeworCWlmICgoc2Nzd19jYygmaXJiLT5zY3N3KSA9PSAxKSAmJgorCSAgICAoc2Nzd19mY3RsKCZpcmItPnNjc3cpICYgU0NTV19GQ1RMX1NUQVJUX0ZVTkMpICYmCisJICAgIChzY3N3X2FjdGwoJmlyYi0+c2NzdykgJiBTQ1NXX0FDVExfU1RBUlRfUEVORCkgJiYKKwkgICAgKHNjc3dfc3RjdGwoJmlyYi0+c2NzdykgJiBTQ1NXX1NUQ1RMX1NUQVRVU19QRU5EKSkgewogCQkvKiBmYWtlIGlyYiBkbyBub3RoaW5nLCB0aGV5IGFyZSBoYW5kbGVkIGVsc2V3aGVyZSAqLwogCQlkYXNkX3NjaGVkdWxlX2RldmljZV9iaChkZXZpY2UpOwogCQlyZXR1cm47CiAJfQogCi0JaWYgKCEoaXJiLT5lc3cuZXN3MC5lcncuY29ucykpIHsKKwlpZiAoIXNlbnNlKSB7CiAJCS8qIGp1c3QgcmVwb3J0IG90aGVyIHVuc29saWNpdGVkIGludGVycnVwdHMgKi8KLQkJREVWX01FU1NBR0UoS0VSTl9FUlIsIGRldmljZSwgIiVzIiwKKwkJREJGX0RFVl9FVkVOVChEQkZfRVJSLCBkZXZpY2UsICIlcyIsCiAJCQkgICAgInVuc29saWNpdGVkIGludGVycnVwdCByZWNlaXZlZCIpOwogCX0gZWxzZSB7Ci0JCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsICIlcyIsCisJCURCRl9ERVZfRVZFTlQoREJGX0VSUiwgZGV2aWNlLCAiJXMiLAogCQkJICAgICJ1bnNvbGljaXRlZCBpbnRlcnJ1cHQgcmVjZWl2ZWQgIgogCQkJICAgICIoc2Vuc2UgYXZhaWxhYmxlKSIpOwotCQlkZXZpY2UtPmRpc2NpcGxpbmUtPmR1bXBfc2Vuc2UoZGV2aWNlLCBOVUxMLCBpcmIpOworCQlkZXZpY2UtPmRpc2NpcGxpbmUtPmR1bXBfc2Vuc2VfZGJmKGRldmljZSwgTlVMTCwgaXJiLAorCQkJCQkJICAgInVuc29saWNpdGVkIik7CiAJfQogCiAJZGFzZF9zY2hlZHVsZV9kZXZpY2VfYmgoZGV2aWNlKTsKIAlyZXR1cm47CiB9OwogCi1zdGF0aWMgc3RydWN0IGRhc2RfY2N3X3JlcSAqZGFzZF9lY2tkX2J1aWxkX2NwKHN0cnVjdCBkYXNkX2RldmljZSAqc3RhcnRkZXYsCisKK3N0YXRpYyBzdHJ1Y3QgZGFzZF9jY3dfcmVxICpkYXNkX2Vja2RfYnVpbGRfY3BfY21kX3NpbmdsZSgKKwkJCQkJICAgICAgIHN0cnVjdCBkYXNkX2RldmljZSAqc3RhcnRkZXYsCiAJCQkJCSAgICAgICBzdHJ1Y3QgZGFzZF9ibG9jayAqYmxvY2ssCi0JCQkJCSAgICAgICBzdHJ1Y3QgcmVxdWVzdCAqcmVxKQorCQkJCQkgICAgICAgc3RydWN0IHJlcXVlc3QgKnJlcSwKKwkJCQkJICAgICAgIHNlY3Rvcl90IGZpcnN0X3JlYywKKwkJCQkJICAgICAgIHNlY3Rvcl90IGxhc3RfcmVjLAorCQkJCQkgICAgICAgc2VjdG9yX3QgZmlyc3RfdHJrLAorCQkJCQkgICAgICAgc2VjdG9yX3QgbGFzdF90cmssCisJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgZmlyc3Rfb2ZmcywKKwkJCQkJICAgICAgIHVuc2lnbmVkIGludCBsYXN0X29mZnMsCisJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgYmxrX3Blcl90cmssCisJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgYmxrc2l6ZSkKIHsKIAlzdHJ1Y3QgZGFzZF9lY2tkX3ByaXZhdGUgKnByaXZhdGU7CiAJdW5zaWduZWQgbG9uZyAqaWRhd3M7CkBAIC0xNTM5LDExICsxNzM5LDkgQEAKIAlzdHJ1Y3QgcmVxX2l0ZXJhdG9yIGl0ZXI7CiAJc3RydWN0IGJpb192ZWMgKmJ2OwogCWNoYXIgKmRzdDsKLQl1bnNpZ25lZCBpbnQgYmxrc2l6ZSwgYmxrX3Blcl90cmssIG9mZjsKKwl1bnNpZ25lZCBpbnQgb2ZmOwogCWludCBjb3VudCwgY2lkYXcsIGNwbGVuZ3RoLCBkYXRhc2l6ZTsKLQlzZWN0b3JfdCByZWNpZCwgZmlyc3RfcmVjLCBsYXN0X3JlYzsKLQlzZWN0b3JfdCBmaXJzdF90cmssIGxhc3RfdHJrOwotCXVuc2lnbmVkIGludCBmaXJzdF9vZmZzLCBsYXN0X29mZnM7CisJc2VjdG9yX3QgcmVjaWQ7CiAJdW5zaWduZWQgY2hhciBjbWQsIHJjbWQ7CiAJaW50IHVzZV9wcmVmaXg7CiAJc3RydWN0IGRhc2RfZGV2aWNlICpiYXNlZGV2OwpAQCAtMTU1NiwxNSArMTc1NCw3IEBACiAJCWNtZCA9IERBU0RfRUNLRF9DQ1dfV1JJVEVfTVQ7CiAJZWxzZQogCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKLQkvKiBDYWxjdWxhdGUgbnVtYmVyIG9mIGJsb2Nrcy9yZWNvcmRzIHBlciB0cmFjay4gKi8KLQlibGtzaXplID0gYmxvY2stPmJwX2Jsb2NrOwotCWJsa19wZXJfdHJrID0gcmVjc19wZXJfdHJhY2soJnByaXZhdGUtPnJkY19kYXRhLCAwLCBibGtzaXplKTsKLQkvKiBDYWxjdWxhdGUgcmVjb3JkIGlkIG9mIGZpcnN0IGFuZCBsYXN0IGJsb2NrLiAqLwotCWZpcnN0X3JlYyA9IGZpcnN0X3RyayA9IHJlcS0+c2VjdG9yID4+IGJsb2NrLT5zMmJfc2hpZnQ7Ci0JZmlyc3Rfb2ZmcyA9IHNlY3Rvcl9kaXYoZmlyc3RfdHJrLCBibGtfcGVyX3Ryayk7Ci0JbGFzdF9yZWMgPSBsYXN0X3RyayA9Ci0JCShyZXEtPnNlY3RvciArIHJlcS0+bnJfc2VjdG9ycyAtIDEpID4+IGJsb2NrLT5zMmJfc2hpZnQ7Ci0JbGFzdF9vZmZzID0gc2VjdG9yX2RpdihsYXN0X3RyaywgYmxrX3Blcl90cmspOworCiAJLyogQ2hlY2sgc3RydWN0IGJpbyBhbmQgY291bnQgdGhlIG51bWJlciBvZiBibG9ja3MgZm9yIHRoZSByZXF1ZXN0LiAqLwogCWNvdW50ID0gMDsKIAljaWRhdyA9IDA7CkBAIC0xNzE0LDYgKzE5MDQsNDk3IEBACiAJcmV0dXJuIGNxcjsKIH0KIAorc3RhdGljIHN0cnVjdCBkYXNkX2Njd19yZXEgKmRhc2RfZWNrZF9idWlsZF9jcF9jbWRfdHJhY2soCisJCQkJCSAgICAgICBzdHJ1Y3QgZGFzZF9kZXZpY2UgKnN0YXJ0ZGV2LAorCQkJCQkgICAgICAgc3RydWN0IGRhc2RfYmxvY2sgKmJsb2NrLAorCQkJCQkgICAgICAgc3RydWN0IHJlcXVlc3QgKnJlcSwKKwkJCQkJICAgICAgIHNlY3Rvcl90IGZpcnN0X3JlYywKKwkJCQkJICAgICAgIHNlY3Rvcl90IGxhc3RfcmVjLAorCQkJCQkgICAgICAgc2VjdG9yX3QgZmlyc3RfdHJrLAorCQkJCQkgICAgICAgc2VjdG9yX3QgbGFzdF90cmssCisJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgZmlyc3Rfb2ZmcywKKwkJCQkJICAgICAgIHVuc2lnbmVkIGludCBsYXN0X29mZnMsCisJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgYmxrX3Blcl90cmssCisJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgYmxrc2l6ZSkKK3sKKwlzdHJ1Y3QgZGFzZF9lY2tkX3ByaXZhdGUgKnByaXZhdGU7CisJdW5zaWduZWQgbG9uZyAqaWRhd3M7CisJc3RydWN0IGRhc2RfY2N3X3JlcSAqY3FyOworCXN0cnVjdCBjY3cxICpjY3c7CisJc3RydWN0IHJlcV9pdGVyYXRvciBpdGVyOworCXN0cnVjdCBiaW9fdmVjICpidjsKKwljaGFyICpkc3QsICppZGF3X2RzdDsKKwl1bnNpZ25lZCBpbnQgY2lkYXcsIGNwbGVuZ3RoLCBkYXRhc2l6ZTsKKwl1bnNpZ25lZCBpbnQgdGxmOworCXNlY3Rvcl90IHJlY2lkOworCXVuc2lnbmVkIGNoYXIgY21kOworCXN0cnVjdCBkYXNkX2RldmljZSAqYmFzZWRldjsKKwl1bnNpZ25lZCBpbnQgdHJrY291bnQsIGNvdW50LCBjb3VudF90b190cmtfZW5kOworCXVuc2lnbmVkIGludCBpZGF3X2xlbiwgc2VnX2xlbiwgcGFydF9sZW4sIGxlbl90b190cmFja19lbmQ7CisJdW5zaWduZWQgY2hhciBuZXdfdHJhY2ssIGVuZF9pZGF3OworCXNlY3Rvcl90IHRya2lkOworCXVuc2lnbmVkIGludCByZWNvZmZzOworCisJYmFzZWRldiA9IGJsb2NrLT5iYXNlOworCXByaXZhdGUgPSAoc3RydWN0IGRhc2RfZWNrZF9wcml2YXRlICopIGJhc2VkZXYtPnByaXZhdGU7CisJaWYgKHJxX2RhdGFfZGlyKHJlcSkgPT0gUkVBRCkKKwkJY21kID0gREFTRF9FQ0tEX0NDV19SRUFEX1RSQUNLX0RBVEE7CisJZWxzZSBpZiAocnFfZGF0YV9kaXIocmVxKSA9PSBXUklURSkKKwkJY21kID0gREFTRF9FQ0tEX0NDV19XUklURV9UUkFDS19EQVRBOworCWVsc2UKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisKKwkvKiBUcmFjayBiYXNlZCBJL08gbmVlZHMgSURBV3MgZm9yIGVhY2ggcGFnZSwgYW5kIG5vdCBqdXN0IGZvcgorCSAqIDY0IGJpdCBhZGRyZXNzZXMuIFdlIG5lZWQgYWRkaXRpb25hbCBpZGFscyBmb3IgcGFnZXMKKwkgKiB0aGF0IGdldCBmaWxsZWQgZnJvbSB0d28gdHJhY2tzLCBzbyB3ZSB1c2UgdGhlIG51bWJlcgorCSAqIG9mIHJlY29yZHMgYXMgdXBwZXIgbGltaXQuCisJICovCisJY2lkYXcgPSBsYXN0X3JlYyAtIGZpcnN0X3JlYyArIDE7CisJdHJrY291bnQgPSBsYXN0X3RyayAtIGZpcnN0X3RyayArIDE7CisKKwkvKiAxeCBwcmVmaXggKyBvbmUgcmVhZC93cml0ZSBjY3cgcGVyIHRyYWNrICovCisJY3BsZW5ndGggPSAxICsgdHJrY291bnQ7CisKKwkvKiBvbiAzMS1iaXQgd2UgbmVlZCBzcGFjZSBmb3IgdHdvIDMyIGJpdCBhZGRyZXNzZXMgcGVyIHBhZ2UKKwkgKiBvbiA2NC1iaXQgb25lIDY0IGJpdCBhZGRyZXNzCisJICovCisJZGF0YXNpemUgPSBzaXplb2Yoc3RydWN0IFBGWF9lY2tkX2RhdGEpICsKKwkJY2lkYXcgKiBzaXplb2YodW5zaWduZWQgbG9uZyBsb25nKTsKKworCS8qIEFsbG9jYXRlIHRoZSBjY3cgcmVxdWVzdC4gKi8KKwljcXIgPSBkYXNkX3NtYWxsb2NfcmVxdWVzdChkYXNkX2Vja2RfZGlzY2lwbGluZS5uYW1lLAorCQkJCSAgIGNwbGVuZ3RoLCBkYXRhc2l6ZSwgc3RhcnRkZXYpOworCWlmIChJU19FUlIoY3FyKSkKKwkJcmV0dXJuIGNxcjsKKwljY3cgPSBjcXItPmNwYWRkcjsKKwkvKiB0cmFuc2ZlciBsZW5ndGggZmFjdG9yOiBob3cgbWFueSBieXRlcyB0byByZWFkIGZyb20gdGhlIGxhc3QgdHJhY2sgKi8KKwlpZiAoZmlyc3RfdHJrID09IGxhc3RfdHJrKQorCQl0bGYgPSBsYXN0X29mZnMgLSBmaXJzdF9vZmZzICsgMTsKKwllbHNlCisJCXRsZiA9IGxhc3Rfb2ZmcyArIDE7CisJdGxmICo9IGJsa3NpemU7CisKKwlpZiAocHJlZml4X0xSRShjY3crKywgY3FyLT5kYXRhLCBmaXJzdF90cmssCisJCSAgICAgICBsYXN0X3RyaywgY21kLCBiYXNlZGV2LCBzdGFydGRldiwKKwkJICAgICAgIDEgLyogZm9ybWF0ICovLCBmaXJzdF9vZmZzICsgMSwKKwkJICAgICAgIHRya2NvdW50LCBibGtzaXplLAorCQkgICAgICAgdGxmKSA9PSAtRUFHQUlOKSB7CisJCS8qIENsb2NrIG5vdCBpbiBzeW5jIGFuZCBYUkMgaXMgZW5hYmxlZC4KKwkJICogVHJ5IGFnYWluIGxhdGVyLgorCQkgKi8KKwkJZGFzZF9zZnJlZV9yZXF1ZXN0KGNxciwgc3RhcnRkZXYpOworCQlyZXR1cm4gRVJSX1BUUigtRUFHQUlOKTsKKwl9CisKKwkvKgorCSAqIFRoZSB0cmFuc2xhdGlvbiBvZiByZXF1ZXN0IGludG8gY2N3IHByb2dyYW1zIG11c3QgbWVldCB0aGUKKwkgKiBmb2xsb3dpbmcgY29uZGl0aW9uczoKKwkgKiAtIGFsbCBpZGF3cyBidXQgdGhlIGZpcnN0IGFuZCB0aGUgbGFzdCBtdXN0IGFkZHJlc3MgZnVsbCBwYWdlcworCSAqICAgKG9yIDJLIGJsb2NrcyBvbiAzMS1iaXQpCisJICogLSB0aGUgc2NvcGUgb2YgYSBjY3cgYW5kIGl0J3MgaWRhbCBlbmRzIHdpdGggdGhlIHRyYWNrIGJvdW5kYXJpZXMKKwkgKi8KKwlpZGF3cyA9ICh1bnNpZ25lZCBsb25nICopIChjcXItPmRhdGEgKyBzaXplb2Yoc3RydWN0IFBGWF9lY2tkX2RhdGEpKTsKKwlyZWNpZCA9IGZpcnN0X3JlYzsKKwluZXdfdHJhY2sgPSAxOworCWVuZF9pZGF3ID0gMDsKKwlsZW5fdG9fdHJhY2tfZW5kID0gMDsKKwlpZGF3X2RzdCA9IDA7CisJaWRhd19sZW4gPSAwOworCXJxX2Zvcl9lYWNoX3NlZ21lbnQoYnYsIHJlcSwgaXRlcikgeworCQlkc3QgPSBwYWdlX2FkZHJlc3MoYnYtPmJ2X3BhZ2UpICsgYnYtPmJ2X29mZnNldDsKKwkJc2VnX2xlbiA9IGJ2LT5idl9sZW47CisJCXdoaWxlIChzZWdfbGVuKSB7CisJCQlpZiAobmV3X3RyYWNrKSB7CisJCQkJdHJraWQgPSByZWNpZDsKKwkJCQlyZWNvZmZzID0gc2VjdG9yX2Rpdih0cmtpZCwgYmxrX3Blcl90cmspOworCQkJCWNvdW50X3RvX3Rya19lbmQgPSBibGtfcGVyX3RyayAtIHJlY29mZnM7CisJCQkJY291bnQgPSBtaW4oKGxhc3RfcmVjIC0gcmVjaWQgKyAxKSwKKwkJCQkJICAgIChzZWN0b3JfdCljb3VudF90b190cmtfZW5kKTsKKwkJCQlsZW5fdG9fdHJhY2tfZW5kID0gY291bnQgKiBibGtzaXplOworCQkJCWNjd1stMV0uZmxhZ3MgfD0gQ0NXX0ZMQUdfQ0M7CisJCQkJY2N3LT5jbWRfY29kZSA9IGNtZDsKKwkJCQljY3ctPmNvdW50ID0gbGVuX3RvX3RyYWNrX2VuZDsKKwkJCQljY3ctPmNkYSA9IChfX3UzMikoYWRkcl90KWlkYXdzOworCQkJCWNjdy0+ZmxhZ3MgPSBDQ1dfRkxBR19JREE7CisJCQkJY2N3Kys7CisJCQkJcmVjaWQgKz0gY291bnQ7CisJCQkJbmV3X3RyYWNrID0gMDsKKwkJCX0KKwkJCS8qIElmIHdlIHN0YXJ0IGEgbmV3IGlkYXcsIGV2ZXJ5dGhpbmcgaXMgZmluZSBhbmQgdGhlCisJCQkgKiBzdGFydCBvZiB0aGUgbmV3IGlkYXcgaXMgdGhlIHN0YXJ0IG9mIHRoaXMgc2VnbWVudC4KKwkJCSAqIElmIHdlIGNvbnRpbnVlIGFuIGlkYXcsIHdlIG11c3QgbWFrZSBzdXJlIHRoYXQgdGhlCisJCQkgKiBjdXJyZW50IHNlZ21lbnQgYmVnaW5zIHdoZXJlIHRoZSBzbyBmYXIgYWNjdW11bGF0ZWQKKwkJCSAqIGlkYXcgZW5kcworCQkJICovCisJCQlpZiAoIWlkYXdfZHN0KQorCQkJCWlkYXdfZHN0ID0gZHN0OworCQkJaWYgKChpZGF3X2RzdCArIGlkYXdfbGVuKSAhPSBkc3QpIHsKKwkJCQlkYXNkX3NmcmVlX3JlcXVlc3QoY3FyLCBzdGFydGRldik7CisJCQkJcmV0dXJuIEVSUl9QVFIoLUVSQU5HRSk7CisJCQl9CisJCQlwYXJ0X2xlbiA9IG1pbihzZWdfbGVuLCBsZW5fdG9fdHJhY2tfZW5kKTsKKwkJCXNlZ19sZW4gLT0gcGFydF9sZW47CisJCQlkc3QgKz0gcGFydF9sZW47CisJCQlpZGF3X2xlbiArPSBwYXJ0X2xlbjsKKwkJCWxlbl90b190cmFja19lbmQgLT0gcGFydF9sZW47CisJCQkvKiBjb2xsZWN0ZWQgbWVtb3J5IGFyZWEgZW5kcyBvbiBhbiBJREFfQkxPQ0sgYm9yZGVyLAorCQkJICogLT4gY3JlYXRlIGFuIGlkYXcKKwkJCSAqIGlkYWxfY3JlYXRlX3dvcmRzIHdpbGwgaGFuZGxlIGNhc2VzIHdoZXJlIGlkYXdfbGVuCisJCQkgKiBpcyBsYXJnZXIgdGhlbiBJREFfQkxPQ0tfU0laRQorCQkJICovCisJCQlpZiAoIShfX3BhKGlkYXdfZHN0ICsgaWRhd19sZW4pICYgKElEQV9CTE9DS19TSVpFLTEpKSkKKwkJCQllbmRfaWRhdyA9IDE7CisJCQkvKiBXZSBhbHNvIG5lZWQgdG8gZW5kIHRoZSBpZGF3IGF0IHRyYWNrIGVuZCAqLworCQkJaWYgKCFsZW5fdG9fdHJhY2tfZW5kKSB7CisJCQkJbmV3X3RyYWNrID0gMTsKKwkJCQllbmRfaWRhdyA9IDE7CisJCQl9CisJCQlpZiAoZW5kX2lkYXcpIHsKKwkJCQlpZGF3cyA9IGlkYWxfY3JlYXRlX3dvcmRzKGlkYXdzLCBpZGF3X2RzdCwKKwkJCQkJCQkgIGlkYXdfbGVuKTsKKwkJCQlpZGF3X2RzdCA9IDA7CisJCQkJaWRhd19sZW4gPSAwOworCQkJCWVuZF9pZGF3ID0gMDsKKwkJCX0KKwkJfQorCX0KKworCWlmIChibGtfbm9yZXRyeV9yZXF1ZXN0KHJlcSkgfHwKKwkgICAgYmxvY2stPmJhc2UtPmZlYXR1cmVzICYgREFTRF9GRUFUVVJFX0ZBSUxGQVNUKQorCQlzZXRfYml0KERBU0RfQ1FSX0ZMQUdTX0ZBSUxGQVNULCAmY3FyLT5mbGFncyk7CisJY3FyLT5zdGFydGRldiA9IHN0YXJ0ZGV2OworCWNxci0+bWVtZGV2ID0gc3RhcnRkZXY7CisJY3FyLT5ibG9jayA9IGJsb2NrOworCWNxci0+ZXhwaXJlcyA9IDUgKiA2MCAqIEhaOwkvKiA1IG1pbnV0ZXMgKi8KKwljcXItPmxwbSA9IHByaXZhdGUtPnBhdGhfZGF0YS5wcG07CisJY3FyLT5yZXRyaWVzID0gMjU2OworCWNxci0+YnVpbGRjbGsgPSBnZXRfY2xvY2soKTsKKwljcXItPnN0YXR1cyA9IERBU0RfQ1FSX0ZJTExFRDsKKwlyZXR1cm4gY3FyOworfQorCitzdGF0aWMgaW50IHByZXBhcmVfaXRjdyhzdHJ1Y3QgaXRjdyAqaXRjdywKKwkJCXVuc2lnbmVkIGludCB0cmssIHVuc2lnbmVkIGludCB0b3RyaywgaW50IGNtZCwKKwkJCXN0cnVjdCBkYXNkX2RldmljZSAqYmFzZWRldiwKKwkJCXN0cnVjdCBkYXNkX2RldmljZSAqc3RhcnRkZXYsCisJCQl1bnNpZ25lZCBpbnQgcmVjX29uX3RyaywgaW50IGNvdW50LAorCQkJdW5zaWduZWQgaW50IGJsa3NpemUsCisJCQl1bnNpZ25lZCBpbnQgdG90YWxfZGF0YV9zaXplLAorCQkJdW5zaWduZWQgaW50IHRsZiwKKwkJCXVuc2lnbmVkIGludCBibGtfcGVyX3RyaykKK3sKKwlzdHJ1Y3QgUEZYX2Vja2RfZGF0YSBwZnhkYXRhOworCXN0cnVjdCBkYXNkX2Vja2RfcHJpdmF0ZSAqYmFzZXByaXYsICpzdGFydHByaXY7CisJc3RydWN0IERFX2Vja2RfZGF0YSAqZGVkYXRhOworCXN0cnVjdCBMUkVfZWNrZF9kYXRhICpscmVkYXRhOworCXN0cnVjdCBkY3cgKmRjdzsKKworCXUzMiBiZWdjeWwsIGVuZGN5bDsKKwl1MTYgaGVhZHMsIGJlZ2hlYWQsIGVuZGhlYWQ7CisJdTggcGZ4X2NtZDsKKworCWludCByYyA9IDA7CisJaW50IHNlY3RvciA9IDA7CisJaW50IGRuLCBkOworCisKKwkvKiBzZXR1cCBwcmVmaXggZGF0YSAqLworCWJhc2Vwcml2ID0gKHN0cnVjdCBkYXNkX2Vja2RfcHJpdmF0ZSAqKSBiYXNlZGV2LT5wcml2YXRlOworCXN0YXJ0cHJpdiA9IChzdHJ1Y3QgZGFzZF9lY2tkX3ByaXZhdGUgKikgc3RhcnRkZXYtPnByaXZhdGU7CisJZGVkYXRhID0gJnBmeGRhdGEuZGVmaW5lX2V4dGVudDsKKwlscmVkYXRhID0gJnBmeGRhdGEubG9jYXRlX3JlY29yZDsKKworCW1lbXNldCgmcGZ4ZGF0YSwgMCwgc2l6ZW9mKHBmeGRhdGEpKTsKKwlwZnhkYXRhLmZvcm1hdCA9IDE7IC8qIFBGWCB3aXRoIExSRSAqLworCXBmeGRhdGEuYmFzZV9hZGRyZXNzID0gYmFzZXByaXYtPm5lZC0+dW5pdF9hZGRyOworCXBmeGRhdGEuYmFzZV9sc3MgPSBiYXNlcHJpdi0+bmVkLT5JRDsKKwlwZnhkYXRhLnZhbGlkaXR5LmRlZmluZV9leHRlbnQgPSAxOworCisJLyogcHJpdmF0ZSB1aWQgaXMga2VwdCB1cCB0byBkYXRlLCBjb25mX2RhdGEgbWF5IGJlIG91dGRhdGVkICovCisJaWYgKHN0YXJ0cHJpdi0+dWlkLnR5cGUgIT0gVUFfQkFTRV9ERVZJQ0UpIHsKKwkJcGZ4ZGF0YS52YWxpZGl0eS52ZXJpZnlfYmFzZSA9IDE7CisJCWlmIChzdGFydHByaXYtPnVpZC50eXBlID09IFVBX0hZUEVSX1BBVl9BTElBUykKKwkJCXBmeGRhdGEudmFsaWRpdHkuaHlwZXJfcGF2ID0gMTsKKwl9CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgREFTRF9FQ0tEX0NDV19SRUFEX1RSQUNLX0RBVEE6CisJCWRlZGF0YS0+bWFzay5wZXJtID0gMHgxOworCQlkZWRhdGEtPmF0dHJpYnV0ZXMub3BlcmF0aW9uID0gYmFzZXByaXYtPmF0dHJpYi5vcGVyYXRpb247CisJCWRlZGF0YS0+YmxrX3NpemUgPSBibGtzaXplOworCQlkZWRhdGEtPmdhX2V4dGVuZGVkIHw9IDB4NDI7CisJCWxyZWRhdGEtPm9wZXJhdGlvbi5vcmllbnRhdGlvbiA9IDB4MDsKKwkJbHJlZGF0YS0+b3BlcmF0aW9uLm9wZXJhdGlvbiA9IDB4MEM7CisJCWxyZWRhdGEtPmF1eGlsaWFyeS5jaGVja19ieXRlcyA9IDB4MDE7CisJCXBmeF9jbWQgPSBEQVNEX0VDS0RfQ0NXX1BGWF9SRUFEOworCQlicmVhazsKKwljYXNlIERBU0RfRUNLRF9DQ1dfV1JJVEVfVFJBQ0tfREFUQToKKwkJZGVkYXRhLT5tYXNrLnBlcm0gPSAweDAyOworCQlkZWRhdGEtPmF0dHJpYnV0ZXMub3BlcmF0aW9uID0gYmFzZXByaXYtPmF0dHJpYi5vcGVyYXRpb247CisJCWRlZGF0YS0+YmxrX3NpemUgPSBibGtzaXplOworCQlyYyA9IGNoZWNrX1hSQ19vbl9wcmVmaXgoJnBmeGRhdGEsIGJhc2VkZXYpOworCQlkZWRhdGEtPmdhX2V4dGVuZGVkIHw9IDB4NDI7CisJCWxyZWRhdGEtPm9wZXJhdGlvbi5vcmllbnRhdGlvbiA9IDB4MDsKKwkJbHJlZGF0YS0+b3BlcmF0aW9uLm9wZXJhdGlvbiA9IDB4M0Y7CisJCWxyZWRhdGEtPmV4dGVuZGVkX29wZXJhdGlvbiA9IDB4MjM7CisJCWxyZWRhdGEtPmF1eGlsaWFyeS5jaGVja19ieXRlcyA9IDB4MjsKKwkJcGZ4X2NtZCA9IERBU0RfRUNLRF9DQ1dfUEZYOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlEQkZfREVWX0VWRU5UKERCRl9FUlIsIGJhc2VkZXYsCisJCQkgICAgICAicHJlcGFyZSBpdGN3LCB1bmtub3duIG9wY29kZSAweCV4IiwgY21kKTsKKwkJQlVHKCk7CisJCWJyZWFrOworCX0KKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCWRlZGF0YS0+YXR0cmlidXRlcy5tb2RlID0gMHgzOwkvKiBFQ0tEICovCisKKwloZWFkcyA9IGJhc2Vwcml2LT5yZGNfZGF0YS50cmtfcGVyX2N5bDsKKwliZWdjeWwgPSB0cmsgLyBoZWFkczsKKwliZWdoZWFkID0gdHJrICUgaGVhZHM7CisJZW5kY3lsID0gdG90cmsgLyBoZWFkczsKKwllbmRoZWFkID0gdG90cmsgJSBoZWFkczsKKworCS8qIGNoZWNrIGZvciBzZXF1ZW50aWFsIHByZXN0YWdlIC0gZW5oYW5jZSBjeWxpbmRlciByYW5nZSAqLworCWlmIChkZWRhdGEtPmF0dHJpYnV0ZXMub3BlcmF0aW9uID09IERBU0RfU0VRX1BSRVNUQUdFIHx8CisJICAgIGRlZGF0YS0+YXR0cmlidXRlcy5vcGVyYXRpb24gPT0gREFTRF9TRVFfQUNDRVNTKSB7CisKKwkJaWYgKGVuZGN5bCArIGJhc2Vwcml2LT5hdHRyaWIubnJfY3lsIDwgYmFzZXByaXYtPnJlYWxfY3lsKQorCQkJZW5kY3lsICs9IGJhc2Vwcml2LT5hdHRyaWIubnJfY3lsOworCQllbHNlCisJCQllbmRjeWwgPSAoYmFzZXByaXYtPnJlYWxfY3lsIC0gMSk7CisJfQorCisJc2V0X2NoX3QoJmRlZGF0YS0+YmVnX2V4dCwgYmVnY3lsLCBiZWdoZWFkKTsKKwlzZXRfY2hfdCgmZGVkYXRhLT5lbmRfZXh0LCBlbmRjeWwsIGVuZGhlYWQpOworCisJZGVkYXRhLT5lcF9mb3JtYXQgPSAweDIwOyAvKiByZWNvcmRzIHBlciB0cmFjayBpcyB2YWxpZCAqLworCWRlZGF0YS0+ZXBfcmVjX3Blcl90cmFjayA9IGJsa19wZXJfdHJrOworCisJaWYgKHJlY19vbl90cmspIHsKKwkJc3dpdGNoIChiYXNlcHJpdi0+cmRjX2RhdGEuZGV2X3R5cGUpIHsKKwkJY2FzZSAweDMzOTA6CisJCQlkbiA9IGNlaWxfcXVvdChibGtzaXplICsgNiwgMjMyKTsKKwkJCWQgPSA5ICsgY2VpbF9xdW90KGJsa3NpemUgKyA2ICogKGRuICsgMSksIDM0KTsKKwkJCXNlY3RvciA9ICg0OSArIChyZWNfb25fdHJrIC0gMSkgKiAoMTAgKyBkKSkgLyA4OworCQkJYnJlYWs7CisJCWNhc2UgMHgzMzgwOgorCQkJZCA9IDcgKyBjZWlsX3F1b3QoYmxrc2l6ZSArIDEyLCAzMik7CisJCQlzZWN0b3IgPSAoMzkgKyAocmVjX29uX3RyayAtIDEpICogKDggKyBkKSkgLyA3OworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlscmVkYXRhLT5hdXhpbGlhcnkubGVuZ3RoX3ZhbGlkID0gMTsKKwlscmVkYXRhLT5hdXhpbGlhcnkubGVuZ3RoX3Njb3BlID0gMTsKKwlscmVkYXRhLT5hdXhpbGlhcnkuaW1iZWRkZWRfY2N3X3ZhbGlkID0gMTsKKwlscmVkYXRhLT5sZW5ndGggPSB0bGY7CisJbHJlZGF0YS0+aW1iZWRkZWRfY2N3ID0gY21kOworCWxyZWRhdGEtPmNvdW50ID0gY291bnQ7CisJbHJlZGF0YS0+c2VjdG9yID0gc2VjdG9yOworCXNldF9jaF90KCZscmVkYXRhLT5zZWVrX2FkZHIsIGJlZ2N5bCwgYmVnaGVhZCk7CisJbHJlZGF0YS0+c2VhcmNoX2FyZy5jeWwgPSBscmVkYXRhLT5zZWVrX2FkZHIuY3lsOworCWxyZWRhdGEtPnNlYXJjaF9hcmcuaGVhZCA9IGxyZWRhdGEtPnNlZWtfYWRkci5oZWFkOworCWxyZWRhdGEtPnNlYXJjaF9hcmcucmVjb3JkID0gcmVjX29uX3RyazsKKworCWRjdyA9IGl0Y3dfYWRkX2RjdyhpdGN3LCBwZnhfY21kLCAwLAorCQkgICAgICZwZnhkYXRhLCBzaXplb2YocGZ4ZGF0YSksIHRvdGFsX2RhdGFfc2l6ZSk7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGFzZF9jY3dfcmVxICpkYXNkX2Vja2RfYnVpbGRfY3BfdHBtX3RyYWNrKAorCQkJCQkgICAgICAgc3RydWN0IGRhc2RfZGV2aWNlICpzdGFydGRldiwKKwkJCQkJICAgICAgIHN0cnVjdCBkYXNkX2Jsb2NrICpibG9jaywKKwkJCQkJICAgICAgIHN0cnVjdCByZXF1ZXN0ICpyZXEsCisJCQkJCSAgICAgICBzZWN0b3JfdCBmaXJzdF9yZWMsCisJCQkJCSAgICAgICBzZWN0b3JfdCBsYXN0X3JlYywKKwkJCQkJICAgICAgIHNlY3Rvcl90IGZpcnN0X3RyaywKKwkJCQkJICAgICAgIHNlY3Rvcl90IGxhc3RfdHJrLAorCQkJCQkgICAgICAgdW5zaWduZWQgaW50IGZpcnN0X29mZnMsCisJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgbGFzdF9vZmZzLAorCQkJCQkgICAgICAgdW5zaWduZWQgaW50IGJsa19wZXJfdHJrLAorCQkJCQkgICAgICAgdW5zaWduZWQgaW50IGJsa3NpemUpCit7CisJc3RydWN0IGRhc2RfZWNrZF9wcml2YXRlICpwcml2YXRlOworCXN0cnVjdCBkYXNkX2Njd19yZXEgKmNxcjsKKwlzdHJ1Y3QgcmVxX2l0ZXJhdG9yIGl0ZXI7CisJc3RydWN0IGJpb192ZWMgKmJ2OworCWNoYXIgKmRzdDsKKwl1bnNpZ25lZCBpbnQgdHJrY291bnQsIGN0aWRhdzsKKwl1bnNpZ25lZCBjaGFyIGNtZDsKKwlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmJhc2VkZXY7CisJdW5zaWduZWQgaW50IHRsZjsKKwlzdHJ1Y3QgaXRjdyAqaXRjdzsKKwlzdHJ1Y3QgdGlkYXcgKmxhc3RfdGlkYXcgPSBOVUxMOworCWludCBpdGN3X29wOworCXNpemVfdCBpdGN3X3NpemU7CisKKwliYXNlZGV2ID0gYmxvY2stPmJhc2U7CisJcHJpdmF0ZSA9IChzdHJ1Y3QgZGFzZF9lY2tkX3ByaXZhdGUgKikgYmFzZWRldi0+cHJpdmF0ZTsKKwlpZiAocnFfZGF0YV9kaXIocmVxKSA9PSBSRUFEKSB7CisJCWNtZCA9IERBU0RfRUNLRF9DQ1dfUkVBRF9UUkFDS19EQVRBOworCQlpdGN3X29wID0gSVRDV19PUF9SRUFEOworCX0gZWxzZSBpZiAocnFfZGF0YV9kaXIocmVxKSA9PSBXUklURSkgeworCQljbWQgPSBEQVNEX0VDS0RfQ0NXX1dSSVRFX1RSQUNLX0RBVEE7CisJCWl0Y3dfb3AgPSBJVENXX09QX1dSSVRFOworCX0gZWxzZQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCS8qIHRyYWNrYmFzZWQgSS9PIG5lZWRzIGFkZHJlc3MgYWxsIG1lbW9yeSB2aWEgVElEQVdzLAorCSAqIG5vdCBqdXN0IGZvciA2NCBiaXQgYWRkcmVzc2VzLiBUaGlzIGFsbG93cyB1cyB0byBtYXAKKwkgKiBlYWNoIHNlZ21lbnQgZGlyZWN0bHkgdG8gb25lIHRpZGF3LgorCSAqLworCXRya2NvdW50ID0gbGFzdF90cmsgLSBmaXJzdF90cmsgKyAxOworCWN0aWRhdyA9IDA7CisJcnFfZm9yX2VhY2hfc2VnbWVudChidiwgcmVxLCBpdGVyKSB7CisJCSsrY3RpZGF3OworCX0KKworCS8qIEFsbG9jYXRlIHRoZSBjY3cgcmVxdWVzdC4gKi8KKwlpdGN3X3NpemUgPSBpdGN3X2NhbGNfc2l6ZSgwLCBjdGlkYXcsIDApOworCWNxciA9IGRhc2Rfc21hbGxvY19yZXF1ZXN0KGRhc2RfZWNrZF9kaXNjaXBsaW5lLm5hbWUsCisJCQkJICAgMCwgaXRjd19zaXplLCBzdGFydGRldik7CisJaWYgKElTX0VSUihjcXIpKQorCQlyZXR1cm4gY3FyOworCisJY3FyLT5jcG1vZGUgPSAxOworCWNxci0+c3RhcnRkZXYgPSBzdGFydGRldjsKKwljcXItPm1lbWRldiA9IHN0YXJ0ZGV2OworCWNxci0+YmxvY2sgPSBibG9jazsKKwljcXItPmV4cGlyZXMgPSAxMDAqSFo7CisJY3FyLT5idWlsZGNsayA9IGdldF9jbG9jaygpOworCWNxci0+c3RhdHVzID0gREFTRF9DUVJfRklMTEVEOworCWNxci0+cmV0cmllcyA9IDEwOworCisJLyogdHJhbnNmZXIgbGVuZ3RoIGZhY3RvcjogaG93IG1hbnkgYnl0ZXMgdG8gcmVhZCBmcm9tIHRoZSBsYXN0IHRyYWNrICovCisJaWYgKGZpcnN0X3RyayA9PSBsYXN0X3RyaykKKwkJdGxmID0gbGFzdF9vZmZzIC0gZmlyc3Rfb2ZmcyArIDE7CisJZWxzZQorCQl0bGYgPSBsYXN0X29mZnMgKyAxOworCXRsZiAqPSBibGtzaXplOworCisJaXRjdyA9IGl0Y3dfaW5pdChjcXItPmRhdGEsIGl0Y3dfc2l6ZSwgaXRjd19vcCwgMCwgY3RpZGF3LCAwKTsKKwljcXItPmNwYWRkciA9IGl0Y3dfZ2V0X3RjdyhpdGN3KTsKKworCWlmIChwcmVwYXJlX2l0Y3coaXRjdywgZmlyc3RfdHJrLCBsYXN0X3RyaywKKwkJCSBjbWQsIGJhc2VkZXYsIHN0YXJ0ZGV2LAorCQkJIGZpcnN0X29mZnMgKyAxLAorCQkJIHRya2NvdW50LCBibGtzaXplLAorCQkJIChsYXN0X3JlYyAtIGZpcnN0X3JlYyArIDEpICogYmxrc2l6ZSwKKwkJCSB0bGYsIGJsa19wZXJfdHJrKSA9PSAtRUFHQUlOKSB7CisJCS8qIENsb2NrIG5vdCBpbiBzeW5jIGFuZCBYUkMgaXMgZW5hYmxlZC4KKwkJICogVHJ5IGFnYWluIGxhdGVyLgorCQkgKi8KKwkJZGFzZF9zZnJlZV9yZXF1ZXN0KGNxciwgc3RhcnRkZXYpOworCQlyZXR1cm4gRVJSX1BUUigtRUFHQUlOKTsKKwl9CisKKwkvKgorCSAqIEEgdGlkYXcgY2FuIGFkZHJlc3MgNGsgb2YgbWVtb3J5LCBidXQgbXVzdCBub3QgY3Jvc3MgcGFnZSBib3VuZGFyaWVzCisJICogV2UgY2FuIGxldCB0aGUgYmxvY2sgbGF5ZXIgaGFuZGxlIHRoaXMgYnkgc2V0dGluZworCSAqIGJsa19xdWV1ZV9zZWdtZW50X2JvdW5kYXJ5IHRvIHBhZ2UgYm91bmRhcmllcyBhbmQKKwkgKiBibGtfbWF4X3NlZ21lbnRfc2l6ZSB0byBwYWdlIHNpemUgd2hlbiBzZXR0aW5nIHVwIHRoZSByZXF1ZXN0IHF1ZXVlLgorCSAqLworCXJxX2Zvcl9lYWNoX3NlZ21lbnQoYnYsIHJlcSwgaXRlcikgeworCQlkc3QgPSBwYWdlX2FkZHJlc3MoYnYtPmJ2X3BhZ2UpICsgYnYtPmJ2X29mZnNldDsKKwkJbGFzdF90aWRhdyA9IGl0Y3dfYWRkX3RpZGF3KGl0Y3csIDB4MDAsIGRzdCwgYnYtPmJ2X2xlbik7CisJCWlmIChJU19FUlIobGFzdF90aWRhdykpCisJCQlyZXR1cm4gKHN0cnVjdCBkYXNkX2Njd19yZXEgKilsYXN0X3RpZGF3OworCX0KKworCWxhc3RfdGlkYXctPmZsYWdzIHw9IDB4ODA7CisJaXRjd19maW5hbGl6ZShpdGN3KTsKKworCWlmIChibGtfbm9yZXRyeV9yZXF1ZXN0KHJlcSkgfHwKKwkgICAgYmxvY2stPmJhc2UtPmZlYXR1cmVzICYgREFTRF9GRUFUVVJFX0ZBSUxGQVNUKQorCQlzZXRfYml0KERBU0RfQ1FSX0ZMQUdTX0ZBSUxGQVNULCAmY3FyLT5mbGFncyk7CisJY3FyLT5zdGFydGRldiA9IHN0YXJ0ZGV2OworCWNxci0+bWVtZGV2ID0gc3RhcnRkZXY7CisJY3FyLT5ibG9jayA9IGJsb2NrOworCWNxci0+ZXhwaXJlcyA9IDUgKiA2MCAqIEhaOwkvKiA1IG1pbnV0ZXMgKi8KKwljcXItPmxwbSA9IHByaXZhdGUtPnBhdGhfZGF0YS5wcG07CisJY3FyLT5yZXRyaWVzID0gMjU2OworCWNxci0+YnVpbGRjbGsgPSBnZXRfY2xvY2soKTsKKwljcXItPnN0YXR1cyA9IERBU0RfQ1FSX0ZJTExFRDsKKwlyZXR1cm4gY3FyOworfQorCitzdGF0aWMgc3RydWN0IGRhc2RfY2N3X3JlcSAqZGFzZF9lY2tkX2J1aWxkX2NwKHN0cnVjdCBkYXNkX2RldmljZSAqc3RhcnRkZXYsCisJCQkJCSAgICAgICBzdHJ1Y3QgZGFzZF9ibG9jayAqYmxvY2ssCisJCQkJCSAgICAgICBzdHJ1Y3QgcmVxdWVzdCAqcmVxKQoreworCWludCB0cG0sIGNtZHJ0ZCwgY21kd3RkOworCWludCB1c2VfcHJlZml4OworCisJc3RydWN0IGRhc2RfZWNrZF9wcml2YXRlICpwcml2YXRlOworCWludCBmY3hfaW5fY3NzLCBmY3hfaW5fZ25lcSwgZmN4X2luX2ZlYXR1cmVzOworCXN0cnVjdCBkYXNkX2RldmljZSAqYmFzZWRldjsKKwlzZWN0b3JfdCBmaXJzdF9yZWMsIGxhc3RfcmVjOworCXNlY3Rvcl90IGZpcnN0X3RyaywgbGFzdF90cms7CisJdW5zaWduZWQgaW50IGZpcnN0X29mZnMsIGxhc3Rfb2ZmczsKKwl1bnNpZ25lZCBpbnQgYmxrX3Blcl90cmssIGJsa3NpemU7CisJaW50IGNkbHNwZWNpYWw7CisJc3RydWN0IGRhc2RfY2N3X3JlcSAqY3FyOworCisJYmFzZWRldiA9IGJsb2NrLT5iYXNlOworCXByaXZhdGUgPSAoc3RydWN0IGRhc2RfZWNrZF9wcml2YXRlICopIGJhc2VkZXYtPnByaXZhdGU7CisKKwkvKiBDYWxjdWxhdGUgbnVtYmVyIG9mIGJsb2Nrcy9yZWNvcmRzIHBlciB0cmFjay4gKi8KKwlibGtzaXplID0gYmxvY2stPmJwX2Jsb2NrOworCWJsa19wZXJfdHJrID0gcmVjc19wZXJfdHJhY2soJnByaXZhdGUtPnJkY19kYXRhLCAwLCBibGtzaXplKTsKKwkvKiBDYWxjdWxhdGUgcmVjb3JkIGlkIG9mIGZpcnN0IGFuZCBsYXN0IGJsb2NrLiAqLworCWZpcnN0X3JlYyA9IGZpcnN0X3RyayA9IHJlcS0+c2VjdG9yID4+IGJsb2NrLT5zMmJfc2hpZnQ7CisJZmlyc3Rfb2ZmcyA9IHNlY3Rvcl9kaXYoZmlyc3RfdHJrLCBibGtfcGVyX3Ryayk7CisJbGFzdF9yZWMgPSBsYXN0X3RyayA9CisJCShyZXEtPnNlY3RvciArIHJlcS0+bnJfc2VjdG9ycyAtIDEpID4+IGJsb2NrLT5zMmJfc2hpZnQ7CisJbGFzdF9vZmZzID0gc2VjdG9yX2RpdihsYXN0X3RyaywgYmxrX3Blcl90cmspOworCWNkbHNwZWNpYWwgPSAocHJpdmF0ZS0+dXNlc19jZGwgJiYgZmlyc3RfcmVjIDwgMipibGtfcGVyX3Ryayk7CisKKwkvKiBpcyB0cmFuc3BvcnQgbW9kZSBzdXBwb3J0ZWQgPyAqLworCWZjeF9pbl9jc3MgPSBjc3NfZ2VuZXJhbF9jaGFyYWN0ZXJpc3RpY3MuZmN4OworCWZjeF9pbl9nbmVxID0gcHJpdmF0ZS0+Z25lcS0+cmVzZXJ2ZWQyWzddICYgMHgwNDsKKwlmY3hfaW5fZmVhdHVyZXMgPSBwcml2YXRlLT5mZWF0dXJlcy5mZWF0dXJlWzQwXSAmIDB4ODA7CisJdHBtID0gZmN4X2luX2NzcyAmJiBmY3hfaW5fZ25lcSAmJiBmY3hfaW5fZmVhdHVyZXM7CisKKwkvKiBpcyByZWFkIHRyYWNrIGRhdGEgYW5kIHdyaXRlIHRyYWNrIGRhdGEgaW4gY29tbWFuZCBtb2RlIHN1cHBvcnRlZD8gKi8KKwljbWRydGQgPSBwcml2YXRlLT5mZWF0dXJlcy5mZWF0dXJlWzldICYgMHgyMDsKKwljbWR3dGQgPSBwcml2YXRlLT5mZWF0dXJlcy5mZWF0dXJlWzEyXSAmIDB4NDA7CisJdXNlX3ByZWZpeCA9IHByaXZhdGUtPmZlYXR1cmVzLmZlYXR1cmVbOF0gJiAweDAxOworCisJY3FyID0gTlVMTDsKKwlpZiAoY2Rsc3BlY2lhbCB8fCBkYXNkX3BhZ2VfY2FjaGUpIHsKKwkJLyogZG8gbm90aGluZywganVzdCBmYWxsIHRocm91Z2ggdG8gdGhlIGNtZCBtb2RlIHNpbmdsZSBjYXNlICovCisJfSBlbHNlIGlmICghZGFzZF9ub2ZjeCAmJiB0cG0gJiYgKGZpcnN0X3RyayA9PSBsYXN0X3RyaykpIHsKKwkJY3FyID0gZGFzZF9lY2tkX2J1aWxkX2NwX3RwbV90cmFjayhzdGFydGRldiwgYmxvY2ssIHJlcSwKKwkJCQkJCSAgICBmaXJzdF9yZWMsIGxhc3RfcmVjLAorCQkJCQkJICAgIGZpcnN0X3RyaywgbGFzdF90cmssCisJCQkJCQkgICAgZmlyc3Rfb2ZmcywgbGFzdF9vZmZzLAorCQkJCQkJICAgIGJsa19wZXJfdHJrLCBibGtzaXplKTsKKwkJaWYgKElTX0VSUihjcXIpICYmIFBUUl9FUlIoY3FyKSAhPSAtRUFHQUlOKQorCQkJY3FyID0gTlVMTDsKKwl9IGVsc2UgaWYgKHVzZV9wcmVmaXggJiYKKwkJICAgKCgocnFfZGF0YV9kaXIocmVxKSA9PSBSRUFEKSAmJiBjbWRydGQpIHx8CisJCSAgICAoKHJxX2RhdGFfZGlyKHJlcSkgPT0gV1JJVEUpICYmIGNtZHd0ZCkpKSB7CisJCWNxciA9IGRhc2RfZWNrZF9idWlsZF9jcF9jbWRfdHJhY2soc3RhcnRkZXYsIGJsb2NrLCByZXEsCisJCQkJCQkgICBmaXJzdF9yZWMsIGxhc3RfcmVjLAorCQkJCQkJICAgZmlyc3RfdHJrLCBsYXN0X3RyaywKKwkJCQkJCSAgIGZpcnN0X29mZnMsIGxhc3Rfb2ZmcywKKwkJCQkJCSAgIGJsa19wZXJfdHJrLCBibGtzaXplKTsKKwkJaWYgKElTX0VSUihjcXIpICYmIFBUUl9FUlIoY3FyKSAhPSAtRUFHQUlOKQorCQkJY3FyID0gTlVMTDsKKwl9CisJaWYgKCFjcXIpCisJCWNxciA9IGRhc2RfZWNrZF9idWlsZF9jcF9jbWRfc2luZ2xlKHN0YXJ0ZGV2LCBibG9jaywgcmVxLAorCQkJCQkJICAgIGZpcnN0X3JlYywgbGFzdF9yZWMsCisJCQkJCQkgICAgZmlyc3RfdHJrLCBsYXN0X3RyaywKKwkJCQkJCSAgICBmaXJzdF9vZmZzLCBsYXN0X29mZnMsCisJCQkJCQkgICAgYmxrX3Blcl90cmssIGJsa3NpemUpOworCXJldHVybiBjcXI7Cit9CisKIHN0YXRpYyBpbnQKIGRhc2RfZWNrZF9mcmVlX2NwKHN0cnVjdCBkYXNkX2Njd19yZXEgKmNxciwgc3RydWN0IHJlcXVlc3QgKnJlcSkKIHsKQEAgLTE3NjcsNyArMjQ0OCw3IEBACiB9CiAKIC8qCi0gKiBNb2RpZnkgY2N3IGNoYWluIGluIGNxciBzbyBpdCBjYW4gYmUgc3RhcnRlZCBvbiBhIGJhc2UgZGV2aWNlLgorICogTW9kaWZ5IGNjdy90Y3cgaW4gY3FyIHNvIGl0IGNhbiBiZSBzdGFydGVkIG9uIGEgYmFzZSBkZXZpY2UuCiAgKgogICogTm90ZSB0aGF0IHRoaXMgaXMgbm90IGVub3VnaCB0byByZXN0YXJ0IHRoZSBjcXIhCiAgKiBFaXRoZXIgcmVzZXQgY3FyLT5zdGFydGRldiBhcyB3ZWxsIChzdW1tYXJ5IHVuaXQgY2hlY2sgaGFuZGxpbmcpCkBAIC0xNzc3LDEzICsyNDU4LDI0IEBACiB7CiAJc3RydWN0IGNjdzEgKmNjdzsKIAlzdHJ1Y3QgUEZYX2Vja2RfZGF0YSAqcGZ4ZGF0YTsKKwlzdHJ1Y3QgdGN3ICp0Y3c7CisJc3RydWN0IHRjY2IgKnRjY2I7CisJc3RydWN0IGRjdyAqZGN3OwogCi0JY2N3ID0gY3FyLT5jcGFkZHI7Ci0JcGZ4ZGF0YSA9IGNxci0+ZGF0YTsKLQotCWlmIChjY3ctPmNtZF9jb2RlID09IERBU0RfRUNLRF9DQ1dfUEZYKSB7CisJaWYgKGNxci0+Y3Btb2RlID09IDEpIHsKKwkJdGN3ID0gY3FyLT5jcGFkZHI7CisJCXRjY2IgPSB0Y3dfZ2V0X3RjY2IodGN3KTsKKwkJZGN3ID0gKHN0cnVjdCBkY3cgKikmdGNjYi0+dGNhWzBdOworCQlwZnhkYXRhID0gKHN0cnVjdCBQRlhfZWNrZF9kYXRhICopJmRjdy0+Y2RbMF07CiAJCXBmeGRhdGEtPnZhbGlkaXR5LnZlcmlmeV9iYXNlID0gMDsKIAkJcGZ4ZGF0YS0+dmFsaWRpdHkuaHlwZXJfcGF2ID0gMDsKKwl9IGVsc2UgeworCQljY3cgPSBjcXItPmNwYWRkcjsKKwkJcGZ4ZGF0YSA9IGNxci0+ZGF0YTsKKwkJaWYgKGNjdy0+Y21kX2NvZGUgPT0gREFTRF9FQ0tEX0NDV19QRlgpIHsKKwkJCXBmeGRhdGEtPnZhbGlkaXR5LnZlcmlmeV9iYXNlID0gMDsKKwkJCXBmeGRhdGEtPnZhbGlkaXR5Lmh5cGVyX3BhdiA9IDA7CisJCX0KIAl9CiB9CiAKQEAgLTE4NjEsNiArMjU1Myw3IEBACiB7CiAJc3RydWN0IGRhc2RfY2N3X3JlcSAqY3FyOwogCWludCByYzsKKwlzdHJ1Y3QgY2N3MSAqY2N3OwogCiAJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQogCQlyZXR1cm4gLUVBQ0NFUzsKQEAgLTE4NjgsMTQgKzI1NjEsMTUgQEAKIAljcXIgPSBkYXNkX3NtYWxsb2NfcmVxdWVzdChkYXNkX2Vja2RfZGlzY2lwbGluZS5uYW1lLAogCQkJCSAgIDEsIDMyLCBkZXZpY2UpOwogCWlmIChJU19FUlIoY3FyKSkgewotCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiJXMiLAogCQkJICAgICJDb3VsZCBub3QgYWxsb2NhdGUgaW5pdGlhbGl6YXRpb24gcmVxdWVzdCIpOwogCQlyZXR1cm4gUFRSX0VSUihjcXIpOwogCX0KLQljcXItPmNwYWRkci0+Y21kX2NvZGUgPSBEQVNEX0VDS0RfQ0NXX1JFTEVBU0U7Ci0gICAgICAgIGNxci0+Y3BhZGRyLT5mbGFncyB8PSBDQ1dfRkxBR19TTEk7Ci0gICAgICAgIGNxci0+Y3BhZGRyLT5jb3VudCA9IDMyOwotCWNxci0+Y3BhZGRyLT5jZGEgPSAoX191MzIpKGFkZHJfdCkgY3FyLT5kYXRhOworCWNjdyA9IGNxci0+Y3BhZGRyOworCWNjdy0+Y21kX2NvZGUgPSBEQVNEX0VDS0RfQ0NXX1JFTEVBU0U7CisJY2N3LT5mbGFncyB8PSBDQ1dfRkxBR19TTEk7CisJY2N3LT5jb3VudCA9IDMyOworCWNjdy0+Y2RhID0gKF9fdTMyKShhZGRyX3QpIGNxci0+ZGF0YTsKIAljcXItPnN0YXJ0ZGV2ID0gZGV2aWNlOwogCWNxci0+bWVtZGV2ID0gZGV2aWNlOwogCWNsZWFyX2JpdChEQVNEX0NRUl9GTEFHU19VU0VfRVJQLCAmY3FyLT5mbGFncyk7CkBAIC0xOTAyLDYgKzI1OTYsNyBAQAogewogCXN0cnVjdCBkYXNkX2Njd19yZXEgKmNxcjsKIAlpbnQgcmM7CisJc3RydWN0IGNjdzEgKmNjdzsKIAogCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKIAkJcmV0dXJuIC1FQUNDRVM7CkBAIC0xOTA5LDE0ICsyNjA0LDE1IEBACiAJY3FyID0gZGFzZF9zbWFsbG9jX3JlcXVlc3QoZGFzZF9lY2tkX2Rpc2NpcGxpbmUubmFtZSwKIAkJCQkgICAxLCAzMiwgZGV2aWNlKTsKIAlpZiAoSVNfRVJSKGNxcikpIHsKLQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKIAkJCSAgICAiQ291bGQgbm90IGFsbG9jYXRlIGluaXRpYWxpemF0aW9uIHJlcXVlc3QiKTsKIAkJcmV0dXJuIFBUUl9FUlIoY3FyKTsKIAl9Ci0JY3FyLT5jcGFkZHItPmNtZF9jb2RlID0gREFTRF9FQ0tEX0NDV19SRVNFUlZFOwotICAgICAgICBjcXItPmNwYWRkci0+ZmxhZ3MgfD0gQ0NXX0ZMQUdfU0xJOwotICAgICAgICBjcXItPmNwYWRkci0+Y291bnQgPSAzMjsKLQljcXItPmNwYWRkci0+Y2RhID0gKF9fdTMyKShhZGRyX3QpIGNxci0+ZGF0YTsKKwljY3cgPSBjcXItPmNwYWRkcjsKKwljY3ctPmNtZF9jb2RlID0gREFTRF9FQ0tEX0NDV19SRVNFUlZFOworCWNjdy0+ZmxhZ3MgfD0gQ0NXX0ZMQUdfU0xJOworCWNjdy0+Y291bnQgPSAzMjsKKwljY3ctPmNkYSA9IChfX3UzMikoYWRkcl90KSBjcXItPmRhdGE7CiAJY3FyLT5zdGFydGRldiA9IGRldmljZTsKIAljcXItPm1lbWRldiA9IGRldmljZTsKIAljbGVhcl9iaXQoREFTRF9DUVJfRkxBR1NfVVNFX0VSUCwgJmNxci0+ZmxhZ3MpOwpAQCAtMTk0Miw2ICsyNjM4LDcgQEAKIHsKIAlzdHJ1Y3QgZGFzZF9jY3dfcmVxICpjcXI7CiAJaW50IHJjOworCXN0cnVjdCBjY3cxICpjY3c7CiAKIAlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCiAJCXJldHVybiAtRUFDQ0VTOwpAQCAtMTk0OSwxNCArMjY0NiwxNSBAQAogCWNxciA9IGRhc2Rfc21hbGxvY19yZXF1ZXN0KGRhc2RfZWNrZF9kaXNjaXBsaW5lLm5hbWUsCiAJCQkJICAgMSwgMzIsIGRldmljZSk7CiAJaWYgKElTX0VSUihjcXIpKSB7Ci0JCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCiAJCQkgICAgIkNvdWxkIG5vdCBhbGxvY2F0ZSBpbml0aWFsaXphdGlvbiByZXF1ZXN0Iik7CiAJCXJldHVybiBQVFJfRVJSKGNxcik7CiAJfQotCWNxci0+Y3BhZGRyLT5jbWRfY29kZSA9IERBU0RfRUNLRF9DQ1dfU0xDSzsKLSAgICAgICAgY3FyLT5jcGFkZHItPmZsYWdzIHw9IENDV19GTEFHX1NMSTsKLSAgICAgICAgY3FyLT5jcGFkZHItPmNvdW50ID0gMzI7Ci0JY3FyLT5jcGFkZHItPmNkYSA9IChfX3UzMikoYWRkcl90KSBjcXItPmRhdGE7CisJY2N3ID0gY3FyLT5jcGFkZHI7CisJY2N3LT5jbWRfY29kZSA9IERBU0RfRUNLRF9DQ1dfU0xDSzsKKwljY3ctPmZsYWdzIHw9IENDV19GTEFHX1NMSTsKKwljY3ctPmNvdW50ID0gMzI7CisJY2N3LT5jZGEgPSAoX191MzIpKGFkZHJfdCkgY3FyLT5kYXRhOwogCWNxci0+c3RhcnRkZXYgPSBkZXZpY2U7CiAJY3FyLT5tZW1kZXYgPSBkZXZpY2U7CiAJY2xlYXJfYml0KERBU0RfQ1FSX0ZMQUdTX1VTRV9FUlAsICZjcXItPmZsYWdzKTsKQEAgLTE5OTAsNyArMjY4OCw3IEBACiAJCQkJICAgIHNpemVvZihzdHJ1Y3QgZGFzZF9yc3NkX3BlcmZfc3RhdHNfdCkpLAogCQkJCSAgIGRldmljZSk7CiAJaWYgKElTX0VSUihjcXIpKSB7Ci0JCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCiAJCQkgICAgIkNvdWxkIG5vdCBhbGxvY2F0ZSBpbml0aWFsaXphdGlvbiByZXF1ZXN0Iik7CiAJCXJldHVybiBQVFJfRVJSKGNxcik7CiAJfQpAQCAtMjA4MCw5ICsyNzc4LDkgQEAKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJcHJpdmF0ZS0+YXR0cmliID0gYXR0cmliOwogCi0JREVWX01FU1NBR0UoS0VSTl9JTkZPLCBkZXZpY2UsCi0JCSAgICAiY2FjaGUgb3BlcmF0aW9uIG1vZGUgc2V0IHRvICV4ICglaSBjeWxpbmRlciBwcmVzdGFnZSkiLAotCQkgICAgcHJpdmF0ZS0+YXR0cmliLm9wZXJhdGlvbiwgcHJpdmF0ZS0+YXR0cmliLm5yX2N5bCk7CisJZGV2X2luZm8oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkgIlRoZSBEQVNEIGNhY2hlIG1vZGUgd2FzIHNldCB0byAleCAoJWkgY3lsaW5kZXIgcHJlc3RhZ2UpXG4iLAorCQkgcHJpdmF0ZS0+YXR0cmliLm9wZXJhdGlvbiwgcHJpdmF0ZS0+YXR0cmliLm5yX2N5bCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIxMzMsNyArMjgzMSw3IEBACiAJLyogc2V0dXAgQ0NXcyBmb3IgUFNGICsgUlNTRCAqLwogCWNxciA9IGRhc2Rfc21hbGxvY19yZXF1ZXN0KCJFQ0tEIiwgMiAsIDAsIGRldmljZSk7CiAJaWYgKElTX0VSUihjcXIpKSB7Ci0JCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCiAJCQkiQ291bGQgbm90IGFsbG9jYXRlIGluaXRpYWxpemF0aW9uIHJlcXVlc3QiKTsKIAkJcmMgPSBQVFJfRVJSKGNxcik7CiAJCWdvdG8gb3V0X2ZyZWU7CkBAIC0yMjQyLDExICsyOTQwLDU0IEBACiAJcmV0dXJuIGxlbjsKIH0KIAorc3RhdGljIHZvaWQKK2Rhc2RfZWNrZF9kdW1wX3NlbnNlX2RiZihzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSwgc3RydWN0IGRhc2RfY2N3X3JlcSAqcmVxLAorCQkJIHN0cnVjdCBpcmIgKmlyYiwgY2hhciAqcmVhc29uKQoreworCXU2NCAqc2Vuc2U7CisJaW50IHNsOworCXN0cnVjdCB0c2IgKnRzYjsKKworCXNlbnNlID0gTlVMTDsKKwl0c2IgPSBOVUxMOworCWlmIChyZXEgJiYgc2Nzd19pc190bSgmcmVxLT5pcmIuc2NzdykpIHsKKwkJaWYgKGlyYi0+c2Nzdy50bS50Y3cpCisJCQl0c2IgPSB0Y3dfZ2V0X3RzYigKKwkJCQkoc3RydWN0IHRjdyAqKSh1bnNpZ25lZCBsb25nKWlyYi0+c2Nzdy50bS50Y3cpOworCQlpZiAodHNiICYmIChpcmItPnNjc3cudG0uZmN4cyA9PSAweDAxKSkgeworCQkJc3dpdGNoICh0c2ItPmZsYWdzICYgMHgwNykgeworCQkJY2FzZSAxOgkvKiB0c2FfaW9zdGF0ICovCisJCQkJc2Vuc2UgPSAodTY0ICopdHNiLT50c2EuaW9zdGF0LnNlbnNlOworCQkJYnJlYWs7CisJCQljYXNlIDI6IC8qIHRzX2RkcGMgKi8KKwkJCQlzZW5zZSA9ICh1NjQgKil0c2ItPnRzYS5kZHBjLnNlbnNlOworCQkJYnJlYWs7CisJCQljYXNlIDM6IC8qIHRzYV9pbnRyZyAqLworCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQlpZiAoaXJiLT5lc3cuZXN3MC5lcncuY29ucykKKwkJCXNlbnNlID0gKHU2NCAqKWlyYi0+ZWN3OworCX0KKwlpZiAoc2Vuc2UpIHsKKwkJZm9yIChzbCA9IDA7IHNsIDwgNDsgc2wrKykgeworCQkJREJGX0RFVl9FVkVOVChEQkZfRU1FUkcsIGRldmljZSwKKwkJCQkgICAgICAiJXM6ICUwMTZsbHggJTAxNmxseCAlMDE2bGx4ICUwMTZsbHgiLAorCQkJCSAgICAgIHJlYXNvbiwgc2Vuc2VbMF0sIHNlbnNlWzFdLCBzZW5zZVsyXSwKKwkJCQkgICAgICBzZW5zZVszXSk7CisJCX0KKwl9IGVsc2UgeworCQlEQkZfREVWX0VWRU5UKERCRl9FTUVSRywgZGV2aWNlLCAiJXMiLAorCQkJICAgICAgIlNPUlJZIC0gTk8gVkFMSUQgU0VOU0UgQVZBSUxBQkxFXG4iKTsKKwl9Cit9CisKIC8qCiAgKiBQcmludCBzZW5zZSBkYXRhIGFuZCByZWxhdGVkIGNoYW5uZWwgcHJvZ3JhbS4KICAqIFBhcnRzIGFyZSBwcmludGVkIGJlY2F1c2UgcHJpbnRrIGJ1ZmZlciBpcyBvbmx5IDEwMjQgYnl0ZXMuCiAgKi8KLXN0YXRpYyB2b2lkIGRhc2RfZWNrZF9kdW1wX3NlbnNlKHN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlLAorc3RhdGljIHZvaWQgZGFzZF9lY2tkX2R1bXBfc2Vuc2VfY2N3KHN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlLAogCQkJCSBzdHJ1Y3QgZGFzZF9jY3dfcmVxICpyZXEsIHN0cnVjdCBpcmIgKmlyYikKIHsKIAljaGFyICpwYWdlOwpAQCAtMjI1NSw4ICsyOTk2LDggQEAKIAogCXBhZ2UgPSAoY2hhciAqKSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0FUT01JQyk7CiAJaWYgKHBhZ2UgPT0gTlVMTCkgewotCQlERVZfTUVTU0FHRShLRVJOX0VSUiwgZGV2aWNlLCAiICVzIiwKLQkJCSAgICAiTm8gbWVtb3J5IHRvIGR1bXAgc2Vuc2UgZGF0YSIpOworCQlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQkgICAgICAiTm8gbWVtb3J5IHRvIGR1bXAgc2Vuc2UgZGF0YVxuIik7CiAJCXJldHVybjsKIAl9CiAJLyogZHVtcCB0aGUgc2Vuc2UgZGF0YSAqLwpAQCAtMjI2NSw3ICszMDA2LDcgQEAKIAkJICAgICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CiAJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgS0VSTl9FUlIgUFJJTlRLX0hFQURFUgogCQkgICAgICAgIiBpbiByZXE6ICVwIENTOiAweCUwMlggRFM6IDB4JTAyWFxuIiwgcmVxLAotCQkgICAgICAgaXJiLT5zY3N3LmNtZC5jc3RhdCwgaXJiLT5zY3N3LmNtZC5kc3RhdCk7CisJCSAgICAgICBzY3N3X2NzdGF0KCZpcmItPnNjc3cpLCBzY3N3X2RzdGF0KCZpcmItPnNjc3cpKTsKIAlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCBLRVJOX0VSUiBQUklOVEtfSEVBREVSCiAJCSAgICAgICAiIGRldmljZSAlczogRmFpbGluZyBDQ1c6ICVwXG4iLAogCQkgICAgICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwKQEAgLTIzNDEsNiArMzA4MiwxNDcgQEAKIAlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIHBhZ2UpOwogfQogCisKKy8qCisgKiBQcmludCBzZW5zZSBkYXRhIGZyb20gYSB0Y3cuCisgKi8KK3N0YXRpYyB2b2lkIGRhc2RfZWNrZF9kdW1wX3NlbnNlX3RjdyhzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSwKKwkJCQkgc3RydWN0IGRhc2RfY2N3X3JlcSAqcmVxLCBzdHJ1Y3QgaXJiICppcmIpCit7CisJY2hhciAqcGFnZTsKKwlpbnQgbGVuLCBzbCwgc2N0LCByZXNpZHVhbDsKKworCXN0cnVjdCB0c2IgKnRzYjsKKwl1OCAqc2Vuc2U7CisKKworCXBhZ2UgPSAoY2hhciAqKSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0FUT01JQyk7CisJaWYgKHBhZ2UgPT0gTlVMTCkgeworCQlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICIgJXMiLAorCQkJICAgICJObyBtZW1vcnkgdG8gZHVtcCBzZW5zZSBkYXRhIik7CisJCXJldHVybjsKKwl9CisJLyogZHVtcCB0aGUgc2Vuc2UgZGF0YSAqLworCWxlbiA9IHNwcmludGYocGFnZSwgIEtFUk5fRVJSIFBSSU5US19IRUFERVIKKwkJICAgICAgIiBJL08gc3RhdHVzIHJlcG9ydCBmb3IgZGV2aWNlICVzOlxuIiwKKwkJICAgICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CisJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgS0VSTl9FUlIgUFJJTlRLX0hFQURFUgorCQkgICAgICAgIiBpbiByZXE6ICVwIENTOiAweCUwMlggRFM6IDB4JTAyWCAiCisJCSAgICAgICAiZmN4czogMHglMDJYIHNjaHhzOiAweCUwMlhcbiIsIHJlcSwKKwkJICAgICAgIHNjc3dfY3N0YXQoJmlyYi0+c2NzdyksIHNjc3dfZHN0YXQoJmlyYi0+c2NzdyksCisJCSAgICAgICBpcmItPnNjc3cudG0uZmN4cywgaXJiLT5zY3N3LnRtLnNjaHhzKTsKKwlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCBLRVJOX0VSUiBQUklOVEtfSEVBREVSCisJCSAgICAgICAiIGRldmljZSAlczogRmFpbGluZyBUQ1c6ICVwXG4iLAorCQkgICAgICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwKKwkJICAgICAgICh2b2lkICopIChhZGRyX3QpIGlyYi0+c2Nzdy50bS50Y3cpOworCisJdHNiID0gTlVMTDsKKwlzZW5zZSA9IE5VTEw7CisJaWYgKGlyYi0+c2Nzdy50bS50Y3cpCisJCXRzYiA9IHRjd19nZXRfdHNiKAorCQkJKHN0cnVjdCB0Y3cgKikodW5zaWduZWQgbG9uZylpcmItPnNjc3cudG0udGN3KTsKKworCWlmICh0c2IgJiYgKGlyYi0+c2Nzdy50bS5mY3hzID09IDB4MDEpKSB7CisJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sIEtFUk5fRVJSIFBSSU5US19IRUFERVIKKwkJCSAgICAgICAiIHRzYi0+bGVuZ3RoICVkXG4iLCB0c2ItPmxlbmd0aCk7CisJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sIEtFUk5fRVJSIFBSSU5US19IRUFERVIKKwkJCSAgICAgICAiIHRzYi0+ZmxhZ3MgJXhcbiIsIHRzYi0+ZmxhZ3MpOworCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCBLRVJOX0VSUiBQUklOVEtfSEVBREVSCisJCQkgICAgICAgIiB0c2ItPmRjd19vZmZzZXQgJWRcbiIsIHRzYi0+ZGN3X29mZnNldCk7CisJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sIEtFUk5fRVJSIFBSSU5US19IRUFERVIKKwkJCSAgICAgICAiIHRzYi0+Y291bnQgJWRcbiIsIHRzYi0+Y291bnQpOworCQlyZXNpZHVhbCA9IHRzYi0+Y291bnQgLSAyODsKKwkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgS0VSTl9FUlIgUFJJTlRLX0hFQURFUgorCQkJICAgICAgICIgcmVzaWR1YWwgJWRcbiIsIHJlc2lkdWFsKTsKKworCQlzd2l0Y2ggKHRzYi0+ZmxhZ3MgJiAweDA3KSB7CisJCWNhc2UgMToJLyogdHNhX2lvc3RhdCAqLworCQkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgS0VSTl9FUlIgUFJJTlRLX0hFQURFUgorCQkJICAgICAgICIgdHNiLT50c2EuaW9zdGF0LmRldl90aW1lICVkXG4iLAorCQkJCSAgICAgICB0c2ItPnRzYS5pb3N0YXQuZGV2X3RpbWUpOworCQkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgS0VSTl9FUlIgUFJJTlRLX0hFQURFUgorCQkJICAgICAgICIgdHNiLT50c2EuaW9zdGF0LmRlZl90aW1lICVkXG4iLAorCQkJCSAgICAgICB0c2ItPnRzYS5pb3N0YXQuZGVmX3RpbWUpOworCQkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgS0VSTl9FUlIgUFJJTlRLX0hFQURFUgorCQkJICAgICAgICIgdHNiLT50c2EuaW9zdGF0LnF1ZXVlX3RpbWUgJWRcbiIsCisJCQkJICAgICAgIHRzYi0+dHNhLmlvc3RhdC5xdWV1ZV90aW1lKTsKKwkJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sIEtFUk5fRVJSIFBSSU5US19IRUFERVIKKwkJCSAgICAgICAiIHRzYi0+dHNhLmlvc3RhdC5kZXZfYnVzeV90aW1lICVkXG4iLAorCQkJCSAgICAgICB0c2ItPnRzYS5pb3N0YXQuZGV2X2J1c3lfdGltZSk7CisJCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCBLRVJOX0VSUiBQUklOVEtfSEVBREVSCisJCQkgICAgICAgIiB0c2ItPnRzYS5pb3N0YXQuZGV2X2FjdF90aW1lICVkXG4iLAorCQkJCSAgICAgICB0c2ItPnRzYS5pb3N0YXQuZGV2X2FjdF90aW1lKTsKKwkJCXNlbnNlID0gdHNiLT50c2EuaW9zdGF0LnNlbnNlOworCQkJYnJlYWs7CisJCWNhc2UgMjogLyogdHNfZGRwYyAqLworCQkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgS0VSTl9FUlIgUFJJTlRLX0hFQURFUgorCQkJICAgICAgICIgdHNiLT50c2EuZGRwYy5yYyAlZFxuIiwgdHNiLT50c2EuZGRwYy5yYyk7CisJCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCBLRVJOX0VSUiBQUklOVEtfSEVBREVSCisJCQkgICAgICAgIiB0c2ItPnRzYS5kZHBjLnJjcTogICIpOworCQkJZm9yIChzbCA9IDA7IHNsIDwgMTY7IHNsKyspIHsKKwkJCQlmb3IgKHNjdCA9IDA7IHNjdCA8IDg7IHNjdCsrKSB7CisJCQkJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICIgJTAyeCIsCisJCQkJCQkgICAgICAgdHNiLT50c2EuZGRwYy5yY3Fbc2xdKTsKKwkJCQl9CisJCQkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIlxuIik7CisJCQl9CisJCQlzZW5zZSA9IHRzYi0+dHNhLmRkcGMuc2Vuc2U7CisJCQlicmVhazsKKwkJY2FzZSAzOiAvKiB0c2FfaW50cmcgKi8KKwkJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sIEtFUk5fRVJSIFBSSU5US19IRUFERVIKKwkJCQkgICAgICAiIHRzYi0+dHNhLmludHJnLjogbm90IHN1cHBvcnRldCB5ZXQgXG4iKTsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKHNlbnNlKSB7CisJCQlmb3IgKHNsID0gMDsgc2wgPCA0OyBzbCsrKSB7CisJCQkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwKKwkJCQkJICAgICAgIEtFUk5fRVJSIFBSSU5US19IRUFERVIKKwkJCQkJICAgICAgICIgU2Vuc2UoaGV4KSAlMmQtJTJkOiIsCisJCQkJCSAgICAgICAoOCAqIHNsKSwgKCg4ICogc2wpICsgNykpOworCQkJCWZvciAoc2N0ID0gMDsgc2N0IDwgODsgc2N0KyspIHsKKwkJCQkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIiAlMDJ4IiwKKwkJCQkJCSAgICAgICBzZW5zZVs4ICogc2wgKyBzY3RdKTsKKwkJCQl9CisJCQkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIlxuIik7CisJCQl9CisKKwkJCWlmIChzZW5zZVsyN10gJiBEQVNEX1NFTlNFX0JJVF8wKSB7CisJCQkJLyogMjQgQnl0ZSBTZW5zZSBEYXRhICovCisJCQkJc3ByaW50ZihwYWdlICsgbGVuLCBLRVJOX0VSUiBQUklOVEtfSEVBREVSCisJCQkJCSIgMjQgQnl0ZTogJXggTVNHICV4LCAiCisJCQkJCSIlcyBNU0diIHRvIFNZU09QXG4iLAorCQkJCQlzZW5zZVs3XSA+PiA0LCBzZW5zZVs3XSAmIDB4MGYsCisJCQkJCXNlbnNlWzFdICYgMHgxMCA/ICIiIDogIm5vIik7CisJCQl9IGVsc2UgeworCQkJCS8qIDMyIEJ5dGUgU2Vuc2UgRGF0YSAqLworCQkJCXNwcmludGYocGFnZSArIGxlbiwgS0VSTl9FUlIgUFJJTlRLX0hFQURFUgorCQkJCQkiIDMyIEJ5dGU6IEZvcm1hdDogJXggIgorCQkJCQkiRXhjZXB0aW9uIGNsYXNzICV4XG4iLAorCQkJCQlzZW5zZVs2XSAmIDB4MGYsIHNlbnNlWzIyXSA+PiA0KTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXNwcmludGYocGFnZSArIGxlbiwgS0VSTl9FUlIgUFJJTlRLX0hFQURFUgorCQkJCSIgU09SUlkgLSBOTyBWQUxJRCBTRU5TRSBBVkFJTEFCTEVcbiIpOworCQl9CisJfSBlbHNlIHsKKwkJc3ByaW50ZihwYWdlICsgbGVuLCBLRVJOX0VSUiBQUklOVEtfSEVBREVSCisJCQkiIFNPUlJZIC0gTk8gVFNCIERBVEEgQVZBSUxBQkxFXG4iKTsKKwl9CisJcHJpbnRrKCIlcyIsIHBhZ2UpOworCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgcGFnZSk7Cit9CisKK3N0YXRpYyB2b2lkIGRhc2RfZWNrZF9kdW1wX3NlbnNlKHN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlLAorCQkJCSBzdHJ1Y3QgZGFzZF9jY3dfcmVxICpyZXEsIHN0cnVjdCBpcmIgKmlyYikKK3sKKwlpZiAocmVxICYmIHNjc3dfaXNfdG0oJnJlcS0+aXJiLnNjc3cpKQorCQlkYXNkX2Vja2RfZHVtcF9zZW5zZV90Y3coZGV2aWNlLCByZXEsIGlyYik7CisJZWxzZQorCQlkYXNkX2Vja2RfZHVtcF9zZW5zZV9jY3coZGV2aWNlLCByZXEsIGlyYik7Cit9CisKKwogLyoKICAqIG1heF9ibG9ja3MgaXMgZGVwZW5kZW50IG9uIHRoZSBhbW91bnQgb2Ygc3RvcmFnZSB0aGF0IGlzIGF2YWlsYWJsZQogICogaW4gdGhlIHN0YXRpYyBpbyBidWZmZXIgZm9yIGVhY2ggZGV2aWNlLiBDdXJyZW50bHkgZWFjaCBkZXZpY2UgaGFzCkBAIC0yMzc1LDYgKzMyNTcsNyBAQAogCS5idWlsZF9jcCA9IGRhc2RfZWNrZF9idWlsZF9hbGlhc19jcCwKIAkuZnJlZV9jcCA9IGRhc2RfZWNrZF9mcmVlX2FsaWFzX2NwLAogCS5kdW1wX3NlbnNlID0gZGFzZF9lY2tkX2R1bXBfc2Vuc2UsCisJLmR1bXBfc2Vuc2VfZGJmID0gZGFzZF9lY2tkX2R1bXBfc2Vuc2VfZGJmLAogCS5maWxsX2luZm8gPSBkYXNkX2Vja2RfZmlsbF9pbmZvLAogCS5pb2N0bCA9IGRhc2RfZWNrZF9pb2N0bCwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmggYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmgKaW5kZXggMjQ3NmY4Ny4uYWQ0NWJjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5oCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuaApAQCAtMzgsOCArMzgsMTEgQEAKICNkZWZpbmUgREFTRF9FQ0tEX0NDV19SRUxFQVNFCQkgMHg5NAogI2RlZmluZSBEQVNEX0VDS0RfQ0NXX1JFQURfQ0tEX01UCSAweDllCiAjZGVmaW5lIERBU0RfRUNLRF9DQ1dfV1JJVEVfQ0tEX01UCSAweDlkCisjZGVmaW5lIERBU0RfRUNLRF9DQ1dfV1JJVEVfVFJBQ0tfREFUQQkgMHhBNQorI2RlZmluZSBEQVNEX0VDS0RfQ0NXX1JFQURfVFJBQ0tfREFUQQkgMHhBNgogI2RlZmluZSBEQVNEX0VDS0RfQ0NXX1JFU0VSVkUJCSAweEI0CiAjZGVmaW5lIERBU0RfRUNLRF9DQ1dfUEZYCQkgMHhFNworI2RlZmluZSBEQVNEX0VDS0RfQ0NXX1BGWF9SRUFECQkgMHhFQQogI2RlZmluZSBEQVNEX0VDS0RfQ0NXX1JTQ0sJCSAweEY5CiAKIC8qCkBAIC00OCw2ICs1MSwxMSBAQAogI2RlZmluZSBQU0ZfT1JERVJfUFJTU0QgMHgxOAogI2RlZmluZSBQU0ZfT1JERVJfU1NDCTB4MUQKIAorLyoKKyAqIFNpemUgdGhhdCBpcyByZXBvcnRldCBmb3IgbGFyZ2Ugdm9sdW1lcyBpbiB0aGUgb2xkIDE2LWJpdCBub19jeWwgZmllbGQKKyAqLworI2RlZmluZSBMVl9DT01QQVRfQ1lMIDB4RkZGRQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFNFQ1RJT046IFR5cGUgRGVmaW5pdGlvbnMKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMTE4LDcgKzEyNiw5IEBACiAJdW5zaWduZWQgbG9uZyBsb25nIGVwX3N5c190aW1lOyAvKiBFeHQgUGFyYW1ldGVyIC0gU3lzdGVtIFRpbWUgU3RhbXAgKi8KIAlfX3U4IGVwX2Zvcm1hdDsgICAgICAgIC8qIEV4dGVuZGVkIFBhcmFtZXRlciBmb3JtYXQgYnl0ZSAgICAgICAqLwogCV9fdTggZXBfcHJpbzsgICAgICAgICAgLyogRXh0ZW5kZWQgUGFyYW1ldGVyIHByaW9yaXR5IEkvTyBieXRlICovCi0JX191OCBlcF9yZXNlcnZlZFs2XTsgICAvKiBFeHRlbmRlZCBQYXJhbWV0ZXIgUmVzZXJ2ZWQgICAgICAgICAgKi8KKwlfX3U4IGVwX3Jlc2VydmVkMTsgICAgIC8qIEV4dGVuZGVkIFBhcmFtZXRlciBSZXNlcnZlZAkgICAgICAgKi8KKwlfX3U4IGVwX3JlY19wZXJfdHJhY2s7IC8qIE51bWJlciBvZiByZWNvcmRzIG9uIGEgdHJhY2sJICAgICAgICovCisJX191OCBlcF9yZXNlcnZlZFs0XTsgICAvKiBFeHRlbmRlZCBQYXJhbWV0ZXIgUmVzZXJ2ZWQJICAgICAgICovCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogc3RydWN0IExPX2Vja2RfZGF0YSB7CkBAIC0xMzksMTEgKzE0OSwzNyBAQAogCV9fdTE2IGxlbmd0aDsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCitzdHJ1Y3QgTFJFX2Vja2RfZGF0YSB7CisJc3RydWN0IHsKKwkJdW5zaWduZWQgY2hhciBvcmllbnRhdGlvbjoyOworCQl1bnNpZ25lZCBjaGFyIG9wZXJhdGlvbjo2OworCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIG9wZXJhdGlvbjsKKwlzdHJ1Y3QgeworCQl1bnNpZ25lZCBjaGFyIGxlbmd0aF92YWxpZDoxOworCQl1bnNpZ25lZCBjaGFyIGxlbmd0aF9zY29wZToxOworCQl1bnNpZ25lZCBjaGFyIGltYmVkZGVkX2Njd192YWxpZDoxOworCQl1bnNpZ25lZCBjaGFyIGNoZWNrX2J5dGVzOjI7CisJCXVuc2lnbmVkIGNoYXIgaW1iZWRkZWRfY291bnRfdmFsaWQ6MTsKKwkJdW5zaWduZWQgY2hhciByZXNlcnZlZDoxOworCQl1bnNpZ25lZCBjaGFyIHJlYWRfY291bnRfc3VmZml4OjE7CisJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgYXV4aWxpYXJ5OworCV9fdTggaW1iZWRkZWRfY2N3OworCV9fdTggY291bnQ7CisJc3RydWN0IGNoX3Qgc2Vla19hZGRyOworCXN0cnVjdCBjaHJfdCBzZWFyY2hfYXJnOworCV9fdTggc2VjdG9yOworCV9fdTE2IGxlbmd0aDsKKwlfX3U4IGltYmVkZGVkX2NvdW50OworCV9fdTggZXh0ZW5kZWRfb3BlcmF0aW9uOworCV9fdTE2IGV4dGVuZGVkX3BhcmFtZXRlcl9sZW5ndGg7CisJX191OCBleHRlbmRlZF9wYXJhbWV0ZXJbMF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwogLyogUHJlZml4IGRhdGEgZm9yIGZvcm1hdCAweDAwIGFuZCAweDAxICovCiBzdHJ1Y3QgUEZYX2Vja2RfZGF0YSB7CiAJdW5zaWduZWQgY2hhciBmb3JtYXQ7CiAJc3RydWN0IHsKLQkJdW5zaWduZWQgY2hhciBkZWZpbmVfZXh0ZW5kOjE7CisJCXVuc2lnbmVkIGNoYXIgZGVmaW5lX2V4dGVudDoxOwogCQl1bnNpZ25lZCBjaGFyIHRpbWVfc3RhbXA6MTsKIAkJdW5zaWduZWQgY2hhciB2ZXJpZnlfYmFzZToxOwogCQl1bnNpZ25lZCBjaGFyIGh5cGVyX3BhdjoxOwpAQCAtMTUzLDkgKzE4OSw4IEBACiAJX191OCBhdXg7CiAJX191OCBiYXNlX2xzczsKIAlfX3U4IHJlc2VydmVkWzddOwotCXN0cnVjdCBERV9lY2tkX2RhdGEgZGVmaW5lX2V4dGVuZDsKLQlzdHJ1Y3QgTE9fZWNrZF9kYXRhIGxvY2F0ZV9yZWNvcmQ7Ci0JX191OCBMT19leHRlbmRlZF9kYXRhWzRdOworCXN0cnVjdCBERV9lY2tkX2RhdGEgZGVmaW5lX2V4dGVudDsKKwlzdHJ1Y3QgTFJFX2Vja2RfZGF0YSBsb2NhdGVfcmVjb3JkOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIHN0cnVjdCBkYXNkX2Vja2RfY2hhcmFjdGVyaXN0aWNzIHsKQEAgLTIyOCw3ICsyNjMsOCBAQAogCV9fdTggZmFjdG9yNzsKIAlfX3U4IGZhY3Rvcjg7CiAJX191OCByZXNlcnZlZDJbM107Ci0JX191OCByZXNlcnZlZDNbMTBdOworCV9fdTggcmVzZXJ2ZWQzWzZdOworCV9fdTMyIGxvbmdfbm9fY3lsOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIC8qIGVsZW1lbnRzIG9mIHRoZSBjb25maWd1cmF0aW9uIGRhdGEgKi8KQEAgLTQwNiw2ICs0NDIsNyBAQAogCWludCB1c2VzX2NkbDsKIAlzdHJ1Y3QgYXR0cmliX2RhdGFfdCBhdHRyaWI7CS8qIGUuZy4gY2FjaGUgb3BlcmF0aW9ucyAqLwogCXN0cnVjdCBkYXNkX3Jzc2RfZmVhdHVyZXMgZmVhdHVyZXM7CisJdTMyIHJlYWxfY3lsOwogCiAJLyogYWxpYXMgbWFuYWdlbW5ldCAqLwogCXN0cnVjdCBkYXNkX3VpZCB1aWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lZXIuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vlci5jCmluZGV4IGY4ZTA1Y2UuLmMyNGM4YzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vlci5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vlci5jCkBAIC02LDYgKzYsOCBAQAogICogIEF1dGhvcihzKTogU3RlZmFuIFdlaW5odWJlciA8d2VpbkBkZS5pYm0uY29tPgogICovCiAKKyNkZWZpbmUgS01TR19DT01QT05FTlQgImRhc2QiCisKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTI5NywxMSArMjk5LDEyIEBACiAJc3RydWN0IGRhc2RfZWVyX2hlYWRlciBoZWFkZXI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgZWVyYnVmZmVyICplZXJiOworCWNoYXIgKnNlbnNlOwogCiAJLyogZ28gdGhyb3VnaCBjcXIgY2hhaW4gYW5kIGNvdW50IHRoZSB2YWxpZCBzZW5zZSBkYXRhIHNldHMgKi8KIAlkYXRhX3NpemUgPSAwOwogCWZvciAodGVtcF9jcXIgPSBjcXI7IHRlbXBfY3FyOyB0ZW1wX2NxciA9IHRlbXBfY3FyLT5yZWZlcnMpCi0JCWlmICh0ZW1wX2Nxci0+aXJiLmVzdy5lc3cwLmVydy5jb25zKQorCQlpZiAoZGFzZF9nZXRfc2Vuc2UoJnRlbXBfY3FyLT5pcmIpKQogCQkJZGF0YV9zaXplICs9IDMyOwogCiAJaGVhZGVyLnRvdGFsX3NpemUgPSBzaXplb2YoaGVhZGVyKSArIGRhdGFfc2l6ZSArIDQ7IC8qICJFT1IiICovCkBAIC0zMTYsOSArMzE5LDExIEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeShlZXJiLCAmYnVmZmVybGlzdCwgbGlzdCkgewogCQlkYXNkX2Vlcl9zdGFydF9yZWNvcmQoZWVyYiwgaGVhZGVyLnRvdGFsX3NpemUpOwogCQlkYXNkX2Vlcl93cml0ZV9idWZmZXIoZWVyYiwgKGNoYXIgKikgJmhlYWRlciwgc2l6ZW9mKGhlYWRlcikpOwotCQlmb3IgKHRlbXBfY3FyID0gY3FyOyB0ZW1wX2NxcjsgdGVtcF9jcXIgPSB0ZW1wX2Nxci0+cmVmZXJzKQotCQkJaWYgKHRlbXBfY3FyLT5pcmIuZXN3LmVzdzAuZXJ3LmNvbnMpCi0JCQkJZGFzZF9lZXJfd3JpdGVfYnVmZmVyKGVlcmIsIGNxci0+aXJiLmVjdywgMzIpOworCQlmb3IgKHRlbXBfY3FyID0gY3FyOyB0ZW1wX2NxcjsgdGVtcF9jcXIgPSB0ZW1wX2Nxci0+cmVmZXJzKSB7CisJCQlzZW5zZSA9IGRhc2RfZ2V0X3NlbnNlKCZ0ZW1wX2Nxci0+aXJiKTsKKwkJCWlmIChzZW5zZSkKKwkJCQlkYXNkX2Vlcl93cml0ZV9idWZmZXIoZWVyYiwgc2Vuc2UsIDMyKTsKKwkJfQogCQlkYXNkX2Vlcl93cml0ZV9idWZmZXIoZWVyYiwgIkVPUiIsIDQpOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZidWZmZXJsb2NrLCBmbGFncyk7CkBAIC00NTEsNiArNDU2LDcgQEAKIHsKIAlzdHJ1Y3QgZGFzZF9jY3dfcmVxICpjcXI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgY2N3MSAqY2N3OwogCiAJaWYgKGRldmljZS0+ZWVyX2NxcikKIAkJcmV0dXJuIDA7CkBAIC00NjgsMTAgKzQ3NCwxMSBAQAogCWNxci0+ZXhwaXJlcyA9IDEwICogSFo7CiAJY2xlYXJfYml0KERBU0RfQ1FSX0ZMQUdTX1VTRV9FUlAsICZjcXItPmZsYWdzKTsKIAotCWNxci0+Y3BhZGRyLT5jbWRfY29kZSA9IERBU0RfRUNLRF9DQ1dfU05TUzsKLQljcXItPmNwYWRkci0+Y291bnQgPSBTTlNTX0RBVEFfU0laRTsKLQljcXItPmNwYWRkci0+ZmxhZ3MgPSAwOwotCWNxci0+Y3BhZGRyLT5jZGEgPSAoX191MzIpKGFkZHJfdCkgY3FyLT5kYXRhOworCWNjdyA9IGNxci0+Y3BhZGRyOworCWNjdy0+Y21kX2NvZGUgPSBEQVNEX0VDS0RfQ0NXX1NOU1M7CisJY2N3LT5jb3VudCA9IFNOU1NfREFUQV9TSVpFOworCWNjdy0+ZmxhZ3MgPSAwOworCWNjdy0+Y2RhID0gKF9fdTMyKShhZGRyX3QpIGNxci0+ZGF0YTsKIAogCWNxci0+YnVpbGRjbGsgPSBnZXRfY2xvY2soKTsKIAljcXItPnN0YXR1cyA9IERBU0RfQ1FSX0ZJTExFRDsKQEAgLTUzNCw3ICs1NDEsNyBAQAogCWlmIChlZXJiLT5idWZmZXJfcGFnZV9jb3VudCA8IDEgfHwKIAkgICAgZWVyYi0+YnVmZmVyX3BhZ2VfY291bnQgPiBJTlRfTUFYIC8gUEFHRV9TSVpFKSB7CiAJCWtmcmVlKGVlcmIpOwotCQlNRVNTQUdFKEtFUk5fV0FSTklORywgImNhbid0IG9wZW4gZGV2aWNlIHNpbmNlIG1vZHVsZSAiCisJCURCRl9FVkVOVChEQkZfV0FSTklORywgImNhbid0IG9wZW4gZGV2aWNlIHNpbmNlIG1vZHVsZSAiCiAJCQkicGFyYW1ldGVyIGVlcl9wYWdlcyBpcyBzbWFsbGVyIHRoYW4gMSBvciIKIAkJCSIgYmlnZ2VyIHRoYW4gJWQiLCAoaW50KShJTlRfTUFYIC8gUEFHRV9TSVpFKSk7CiAJCXVubG9ja19rZXJuZWwoKTsKQEAgLTY4Nyw3ICs2OTQsNyBAQAogCWlmIChyYykgewogCQlrZnJlZShkYXNkX2Vlcl9kZXYpOwogCQlkYXNkX2Vlcl9kZXYgPSBOVUxMOwotCQlNRVNTQUdFKEtFUk5fRVJSLCAiJXMiLCAiZGFzZF9lZXJfaW5pdCBjb3VsZCBub3QgIgorCQlEQkZfRVZFTlQoREJGX0VSUiwgIiVzIiwgImRhc2RfZWVyX2luaXQgY291bGQgbm90ICIKIAkJICAgICAgICJyZWdpc3RlciBtaXNjIGRldmljZSIpOwogCQlyZXR1cm4gcmM7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZXJwLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lcnAuYwppbmRleCA4ZjEwMDAwLi5kOTcwY2UyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lcnAuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lcnAuYwpAQCAtOSw2ICs5LDggQEAKICAqCiAgKi8KIAorI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAiZGFzZCIKKwogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogCkBAIC05MSwxNCArOTMsMTQgQEAKIAogICAgICAgICAvKiBqdXN0IHJldHJ5IC0gdGhlcmUgaXMgbm90aGluZyB0byBzYXZlIC4uLiBJIGdvdCBubyBzZW5zZSBkYXRhLi4uLiAqLwogICAgICAgICBpZiAoY3FyLT5yZXRyaWVzID4gMCkgewotCQlERVZfTUVTU0FHRSAoS0VSTl9ERUJVRywgZGV2aWNlLAorCQlEQkZfREVWX0VWRU5UKERCRl9ERUJVRywgZGV2aWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVmYXVsdCBFUlAgY2FsbGVkICglaSByZXRyaWVzIGxlZnQpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3FyLT5yZXRyaWVzKTsKIAkJY3FyLT5scG0gICAgPSBMUE1fQU5ZUEFUSDsKIAkJY3FyLT5zdGF0dXMgPSBEQVNEX0NRUl9GSUxMRUQ7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgREVWX01FU1NBR0UgKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJICAgICAiZGVmYXVsdCBFUlAgY2FsbGVkIChOTyByZXRyeSBsZWZ0KSIpOworCQlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCSJkZWZhdWx0IEVSUCBoYXMgcnVuIG91dCBvZiByZXRyaWVzIGFuZCBmYWlsZWRcbiIpOwogCQljcXItPnN0YXR1cyA9IERBU0RfQ1FSX0ZBSUxFRDsKIAkJY3FyLT5zdG9wY2xrID0gZ2V0X2Nsb2NrKCk7CiAgICAgICAgIH0KQEAgLTE2Miw4ICsxNjQsMjEgQEAKIAkJZGV2aWNlLT5kaXNjaXBsaW5lLT5kdW1wX3NlbnNlKGRldmljZSwgY3FyLCBpcmIpOwogfQogCit2b2lkCitkYXNkX2xvZ19zZW5zZV9kYmYoc3RydWN0IGRhc2RfY2N3X3JlcSAqY3FyLCBzdHJ1Y3QgaXJiICppcmIpCit7CisJc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2U7CisKKwlkZXZpY2UgPSBjcXItPnN0YXJ0ZGV2OworCS8qIGR1bXAgc2Vuc2UgZGF0YSB0byBzMzkwIGRlYnVnZmVhdHVyZSovCisJaWYgKGRldmljZS0+ZGlzY2lwbGluZSAmJiBkZXZpY2UtPmRpc2NpcGxpbmUtPmR1bXBfc2Vuc2VfZGJmKQorCQlkZXZpY2UtPmRpc2NpcGxpbmUtPmR1bXBfc2Vuc2VfZGJmKGRldmljZSwgY3FyLCBpcmIsICJsb2ciKTsKK30KK0VYUE9SVF9TWU1CT0woZGFzZF9sb2dfc2Vuc2VfZGJmKTsKKwogRVhQT1JUX1NZTUJPTChkYXNkX2RlZmF1bHRfZXJwX2FjdGlvbik7CiBFWFBPUlRfU1lNQk9MKGRhc2RfZGVmYXVsdF9lcnBfcG9zdGFjdGlvbik7CiBFWFBPUlRfU1lNQk9MKGRhc2RfYWxsb2NfZXJwX3JlcXVlc3QpOwogRVhQT1JUX1NZTUJPTChkYXNkX2ZyZWVfZXJwX3JlcXVlc3QpOwogRVhQT1JUX1NZTUJPTChkYXNkX2xvZ19zZW5zZSk7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2ZiYS5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZmJhLmMKaW5kZXggZjFkMTc2MC4uYTNlYjZmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZmJhLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZmJhLmMKQEAgLTYsNiArNiw4IEBACiAgKgogICovCiAKKyNkZWZpbmUgS01TR19DT01QT05FTlQgImRhc2QiCisKICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxhc20vZGVidWcuaD4KQEAgLTEyOCwxNyArMTMwLDE4IEBACiAJCXByaXZhdGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZGFzZF9mYmFfcHJpdmF0ZSksCiAJCQkJICBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CiAJCWlmIChwcml2YXRlID09IE5VTEwpIHsKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAibWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkIGZvciBwcml2YXRlICIKLQkJCQkgICAgImRhdGEiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgIkFsbG9jYXRpbmcgbWVtb3J5IGZvciBwcml2YXRlIERBU0QgIgorCQkJCSAiZGF0YSBmYWlsZWRcbiIpOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KIAkJZGV2aWNlLT5wcml2YXRlID0gKHZvaWQgKikgcHJpdmF0ZTsKIAl9CiAJYmxvY2sgPSBkYXNkX2FsbG9jX2Jsb2NrKCk7CiAJaWYgKElTX0VSUihibG9jaykpIHsKLQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkgICAgImNvdWxkIG5vdCBhbGxvY2F0ZSBkYXNkIGJsb2NrIHN0cnVjdHVyZSIpOworCQlEQkZfRVZFTlQoREJGX1dBUk5JTkcsICJjb3VsZCBub3QgYWxsb2NhdGUgZGFzZCBibG9jayAiCisJCQkgICJzdHJ1Y3R1cmUgZm9yIGRldmljZTogJXMiLAorCQkJICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKIAkJZGV2aWNlLT5wcml2YXRlID0gTlVMTDsKIAkJa2ZyZWUocHJpdmF0ZSk7CiAJCXJldHVybiBQVFJfRVJSKGJsb2NrKTsKQEAgLTE1MCw5ICsxNTMsOSBAQAogCXJkY19kYXRhID0gKHZvaWQgKikgJihwcml2YXRlLT5yZGNfZGF0YSk7CiAJcmMgPSBkYXNkX2dlbmVyaWNfcmVhZF9kZXZfY2hhcnMoZGV2aWNlLCAiRkJBICIsICZyZGNfZGF0YSwgMzIpOwogCWlmIChyYykgewotCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwKLQkJCSAgICAiUmVhZCBkZXZpY2UgY2hhcmFjdGVyaXN0aWNzIHJldHVybmVkIGVycm9yICVkIiwKLQkJCSAgICByYyk7CisJCURCRl9FVkVOVChEQkZfV0FSTklORywgIlJlYWQgZGV2aWNlIGNoYXJhY3RlcmlzdGljcyByZXR1cm5lZCAiCisJCQkgICJlcnJvciAlZCBmb3IgZGV2aWNlOiAlcyIsCisJCQkgIHJjLCBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKIAkJZGV2aWNlLT5ibG9jayA9IE5VTEw7CiAJCWRhc2RfZnJlZV9ibG9jayhibG9jayk7CiAJCWRldmljZS0+cHJpdmF0ZSA9IE5VTEw7CkBAIC0xNjAsMTUgKzE2MywxNiBAQAogCQlyZXR1cm4gcmM7CiAJfQogCi0JREVWX01FU1NBR0UoS0VSTl9JTkZPLCBkZXZpY2UsCi0JCSAgICAiJTA0WC8lMDJYKENVOiUwNFgvJTAyWCkgJWRNQiBhdCglZCBCL2JsaykiLAotCQkgICAgY2Rldi0+aWQuZGV2X3R5cGUsCi0JCSAgICBjZGV2LT5pZC5kZXZfbW9kZWwsCi0JCSAgICBjZGV2LT5pZC5jdV90eXBlLAotCQkgICAgY2Rldi0+aWQuY3VfbW9kZWwsCi0JCSAgICAoKHByaXZhdGUtPnJkY19kYXRhLmJsa19iZHNhICoKLQkJICAgICAgKHByaXZhdGUtPnJkY19kYXRhLmJsa19zaXplID4+IDkpKSA+PiAxMSksCi0JCSAgICBwcml2YXRlLT5yZGNfZGF0YS5ibGtfc2l6ZSk7CisJZGV2X2luZm8oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkgIk5ldyBGQkEgREFTRCAlMDRYLyUwMlggKENVICUwNFgvJTAyWCkgd2l0aCAlZCBNQiAiCisJCSAiYW5kICVkIEIvYmxrXG4iLAorCQkgY2Rldi0+aWQuZGV2X3R5cGUsCisJCSBjZGV2LT5pZC5kZXZfbW9kZWwsCisJCSBjZGV2LT5pZC5jdV90eXBlLAorCQkgY2Rldi0+aWQuY3VfbW9kZWwsCisJCSAoKHByaXZhdGUtPnJkY19kYXRhLmJsa19iZHNhICoKKwkJICAgKHByaXZhdGUtPnJkY19kYXRhLmJsa19zaXplID4+IDkpKSA+PiAxMSksCisJCSBwcml2YXRlLT5yZGNfZGF0YS5ibGtfc2l6ZSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE4MCw3ICsxODQsNyBAQAogCXByaXZhdGUgPSAoc3RydWN0IGRhc2RfZmJhX3ByaXZhdGUgKikgYmxvY2stPmJhc2UtPnByaXZhdGU7CiAJcmMgPSBkYXNkX2NoZWNrX2Jsb2Nrc2l6ZShwcml2YXRlLT5yZGNfZGF0YS5ibGtfc2l6ZSk7CiAJaWYgKHJjKSB7Ci0JCURFVl9NRVNTQUdFKEtFUk5fSU5GTywgYmxvY2stPmJhc2UsICJ1bmtub3duIGJsb2Nrc2l6ZSAlZCIsCisJCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGJsb2NrLT5iYXNlLCAidW5rbm93biBibG9ja3NpemUgJWQiLAogCQkJICAgIHByaXZhdGUtPnJkY19kYXRhLmJsa19zaXplKTsKIAkJcmV0dXJuIHJjOwogCX0KQEAgLTIxNSw3ICsyMTksNyBAQAogCWlmIChjcXItPmZ1bmN0aW9uID09IGRhc2RfZGVmYXVsdF9lcnBfYWN0aW9uKQogCQlyZXR1cm4gZGFzZF9kZWZhdWx0X2VycF9wb3N0YWN0aW9uOwogCi0JREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBjcXItPnN0YXJ0ZGV2LCAidW5rbm93biBFUlAgYWN0aW9uICVwIiwKKwlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBjcXItPnN0YXJ0ZGV2LCAidW5rbm93biBFUlAgYWN0aW9uICVwIiwKIAkJICAgIGNxci0+ZnVuY3Rpb24pOwogCXJldHVybiBOVUxMOwogfQpAQCAtMjMzLDkgKzIzNyw5IEBACiAJfQogCiAJLyogY2hlY2sgZm9yIHVuc29saWNpdGVkIGludGVycnVwdHMgKi8KLQlERVZfTUVTU0FHRShLRVJOX0RFQlVHLCBkZXZpY2UsICIlcyIsCisJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiJXMiLAogCQkgICAgInVuc29saWNpdGVkIGludGVycnVwdCByZWNlaXZlZCIpOwotCWRldmljZS0+ZGlzY2lwbGluZS0+ZHVtcF9zZW5zZShkZXZpY2UsIE5VTEwsIGlyYik7CisJZGV2aWNlLT5kaXNjaXBsaW5lLT5kdW1wX3NlbnNlX2RiZihkZXZpY2UsIE5VTEwsIGlyYiwgInVuc29saWNpdGVkIik7CiAJZGFzZF9zY2hlZHVsZV9kZXZpY2VfYmgoZGV2aWNlKTsKIAlyZXR1cm47CiB9OwpAQCAtNDM3LDYgKzQ0MSwyNSBAQAogfQogCiBzdGF0aWMgdm9pZAorZGFzZF9mYmFfZHVtcF9zZW5zZV9kYmYoc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBkYXNkX2Njd19yZXEgKnJlcSwKKwkJCSBzdHJ1Y3QgaXJiICppcmIsIGNoYXIgKnJlYXNvbikKK3sKKwlpbnQgc2w7CisJaWYgKGlyYi0+ZXN3LmVzdzAuZXJ3LmNvbnMpIHsKKwkJZm9yIChzbCA9IDA7IHNsIDwgNDsgc2wrKykgeworCQkJREJGX0RFVl9FVkVOVChEQkZfRU1FUkcsIGRldmljZSwKKwkJCQkgICAgICAiJXM6ICUwOHggJTA4eCAlMDh4ICUwOHgiLAorCQkJCSAgICAgIHJlYXNvbiwgaXJiLT5lY3dbOCAqIDBdLCBpcmItPmVjd1s4ICogMV0sCisJCQkJICAgICAgaXJiLT5lY3dbOCAqIDJdLCBpcmItPmVjd1s4ICogM10pOworCQl9CisJfSBlbHNlIHsKKwkJREJGX0RFVl9FVkVOVChEQkZfRU1FUkcsIGRldmljZSwgIiVzIiwKKwkJCSAgICAgICJTT1JSWSAtIE5PIFZBTElEIFNFTlNFIEFWQUlMQUJMRVxuIik7CisJfQorfQorCisKK3N0YXRpYyB2b2lkCiBkYXNkX2ZiYV9kdW1wX3NlbnNlKHN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3QgZGFzZF9jY3dfcmVxICogcmVxLAogCQkgICAgc3RydWN0IGlyYiAqaXJiKQogewpAQCAtNDQ2LDcgKzQ2OSw3IEBACiAKIAlwYWdlID0gKGNoYXIgKikgZ2V0X3plcm9lZF9wYWdlKEdGUF9BVE9NSUMpOwogCWlmIChwYWdlID09IE5VTEwpIHsKLQkJREVWX01FU1NBR0UoS0VSTl9FUlIsIGRldmljZSwgIiAlcyIsCisJCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKIAkJCSAgICAiTm8gbWVtb3J5IHRvIGR1bXAgc2Vuc2UgZGF0YSIpOwogCQlyZXR1cm47CiAJfQpAQCAtNDc2LDggKzQ5OSw3IEBACiAJICAgICAgICBsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCBLRVJOX0VSUiBQUklOVEtfSEVBREVSCiAJCQkgICAgICAgIiBTT1JSWSAtIE5PIFZBTElEIFNFTlNFIEFWQUlMQUJMRVxuIik7CiAJfQotCU1FU1NBR0VfTE9HKEtFUk5fRVJSLCAiJXMiLAotCQkgICAgcGFnZSArIHNpemVvZihLRVJOX0VSUiBQUklOVEtfSEVBREVSKSk7CisJcHJpbnRrKEtFUk5fRVJSICIlcyIsIHBhZ2UpOwogCiAJLyogZHVtcCB0aGUgQ2hhbm5lbCBQcm9ncmFtICovCiAJLyogcHJpbnQgZmlyc3QgQ0NXcyAobWF4aW11bSA4KSAqLwpAQCAtNDk4LDggKzUyMCw3IEBACiAJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJcbiIpOwogCQlhY3QrKzsKIAl9Ci0JTUVTU0FHRV9MT0coS0VSTl9FUlIsICIlcyIsCi0JCSAgICBwYWdlICsgc2l6ZW9mKEtFUk5fRVJSIFBSSU5US19IRUFERVIpKTsKKwlwcmludGsoS0VSTl9FUlIgIiVzIiwgcGFnZSk7CiAKIAogCS8qIHByaW50IGZhaWxpbmcgQ0NXIGFyZWEgKi8KQEAgLTU0MCw4ICs1NjEsNyBAQAogCQlhY3QrKzsKIAl9CiAJaWYgKGxlbiA+IDApCi0JCU1FU1NBR0VfTE9HKEtFUk5fRVJSLCAiJXMiLAotCQkJICAgIHBhZ2UgKyBzaXplb2YoS0VSTl9FUlIgUFJJTlRLX0hFQURFUikpOworCQlwcmludGsoS0VSTl9FUlIgIiVzIiwgcGFnZSk7CiAJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBwYWdlKTsKIH0KIApAQCAtNTc2LDYgKzU5Niw3IEBACiAJLmJ1aWxkX2NwID0gZGFzZF9mYmFfYnVpbGRfY3AsCiAJLmZyZWVfY3AgPSBkYXNkX2ZiYV9mcmVlX2NwLAogCS5kdW1wX3NlbnNlID0gZGFzZF9mYmFfZHVtcF9zZW5zZSwKKwkuZHVtcF9zZW5zZV9kYmYgPSBkYXNkX2ZiYV9kdW1wX3NlbnNlX2RiZiwKIAkuZmlsbF9pbmZvID0gZGFzZF9mYmFfZmlsbF9pbmZvLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZ2VuaGQuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2dlbmhkLmMKaW5kZXggZTk5ZDU2Ni4uZDMxOTgzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZ2VuaGQuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9nZW5oZC5jCkBAIC0xMSw2ICsxMSw4IEBACiAgKgogICovCiAKKyNkZWZpbmUgS01TR19DT01QT05FTlQgImRhc2QiCisKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa3BnLmg+CkBAIC0xNjMsOSArMTY1LDggQEAKIAkvKiBSZWdpc3RlciB0byBzdGF0aWMgZGFzZCBtYWpvciA5NCAqLwogCXJjID0gcmVnaXN0ZXJfYmxrZGV2KERBU0RfTUFKT1IsICJkYXNkIik7CiAJaWYgKHJjICE9IDApIHsKLQkJTUVTU0FHRShLRVJOX1dBUk5JTkcsCi0JCQkiQ291bGRuJ3QgcmVnaXN0ZXIgc3VjY2Vzc2Z1bGx5IHRvICIKLQkJCSJtYWpvciBubyAlZCIsIERBU0RfTUFKT1IpOworCQlwcl93YXJuaW5nKCJSZWdpc3RlcmluZyB0aGUgZGV2aWNlIGRyaXZlciB3aXRoIG1ham9yIG51bWJlciAiCisJCQkgICAiJWQgZmFpbGVkXG4iLCBEQVNEX01BSk9SKTsKIAkJcmV0dXJuIHJjOwogCX0KIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2ludC5oIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfaW50LmgKaW5kZXggNGEzOTA4NC4uYzFlNDg3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfaW50LmgKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfaW50LmgKQEAgLTExMiw2ICsxMTIsOSBAQAogCQkJCWRfZGF0YSk7IFwKIH0gd2hpbGUoMCkKIAorLyogbGltaXQgc2l6ZSBmb3IgYW4gZXJyb3JzdHJpbmcgKi8KKyNkZWZpbmUgRVJST1JMRU5HVEggMzAKKwogLyogZGVmaW5pdGlvbiBvZiBkYmYgZGVidWcgbGV2ZWxzICovCiAjZGVmaW5lCURCRl9FTUVSRwkwCS8qIHN5c3RlbSBpcyB1bnVzYWJsZQkJCSovCiAjZGVmaW5lCURCRl9BTEVSVAkxCS8qIGFjdGlvbiBtdXN0IGJlIHRha2VuIGltbWVkaWF0ZWx5CSovCkBAIC0xNTcsNyArMTYwLDggQEAKIAlzdHJ1Y3QgZGFzZF9ibG9jayAqYmxvY2s7CS8qIHRoZSBvcmlnaW5hdGluZyBibG9jayBkZXZpY2UgKi8KIAlzdHJ1Y3QgZGFzZF9kZXZpY2UgKm1lbWRldjsJLyogdGhlIGRldmljZSB1c2VkIHRvIGFsbG9jYXRlIHRoaXMgKi8KIAlzdHJ1Y3QgZGFzZF9kZXZpY2UgKnN0YXJ0ZGV2OwkvKiBkZXZpY2UgdGhlIHJlcXVlc3QgaXMgc3RhcnRlZCBvbiAqLwotCXN0cnVjdCBjY3cxICpjcGFkZHI7CQkvKiBhZGRyZXNzIG9mIGNoYW5uZWwgcHJvZ3JhbSAqLworCXZvaWQgKmNwYWRkcjsJCQkvKiBhZGRyZXNzIG9mIGNjdyBvciB0Y3cgKi8KKwl1bnNpZ25lZCBjaGFyIGNwbW9kZTsJCS8qIDAgPSBjbWQgbW9kZSwgMSA9IGl0Y3cgKi8KIAljaGFyIHN0YXR1czsJCQkvKiBzdGF0dXMgb2YgdGhpcyByZXF1ZXN0ICovCiAJc2hvcnQgcmV0cmllczsJCQkvKiBBIHJldHJ5IGNvdW50ZXIgKi8KIAl1bnNpZ25lZCBsb25nIGZsYWdzOyAgICAgICAgCS8qIGZsYWdzIG9mIHRoaXMgcmVxdWVzdCAqLwpAQCAtMjgwLDYgKzI4NCw4IEBACiAJZGFzZF9lcnBfZm5fdCgqZXJwX3Bvc3RhY3Rpb24pIChzdHJ1Y3QgZGFzZF9jY3dfcmVxICopOwogCXZvaWQgKCpkdW1wX3NlbnNlKSAoc3RydWN0IGRhc2RfZGV2aWNlICosIHN0cnVjdCBkYXNkX2Njd19yZXEgKiwKIAkJCSAgICBzdHJ1Y3QgaXJiICopOworCXZvaWQgKCpkdW1wX3NlbnNlX2RiZikgKHN0cnVjdCBkYXNkX2RldmljZSAqLCBzdHJ1Y3QgZGFzZF9jY3dfcmVxICosCisJCQkgICAgc3RydWN0IGlyYiAqLCBjaGFyICopOwogCiAJdm9pZCAoKmhhbmRsZV91bnNvbGljaXRlZF9pbnRlcnJ1cHQpIChzdHJ1Y3QgZGFzZF9kZXZpY2UgKiwKIAkJCQkJICAgICAgc3RydWN0IGlyYiAqKTsKQEAgLTM3OCw3ICszODQsNyBAQAogCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXY7CiAJYXRvbWljX3Qgb3Blbl9jb3VudDsKIAotCXVuc2lnbmVkIGxvbmcgYmxvY2tzOwkgICAvKiBzaXplIG9mIHZvbHVtZSBpbiBibG9ja3MgKi8KKwl1bnNpZ25lZCBsb25nIGxvbmcgYmxvY2tzOyAvKiBzaXplIG9mIHZvbHVtZSBpbiBibG9ja3MgKi8KIAl1bnNpZ25lZCBpbnQgYnBfYmxvY2s7CSAgIC8qIGJ5dGVzIHBlciBibG9jayAqLwogCXVuc2lnbmVkIGludCBzMmJfc2hpZnQ7CSAgIC8qIGxvZzIgKGJwX2Jsb2NrLzUxMikgKi8KIApAQCAtNTczLDEyICs1NzksMTQgQEAKIHZvaWQgZGFzZF9nZW5lcmljX2hhbmRsZV9zdGF0ZV9jaGFuZ2Uoc3RydWN0IGRhc2RfZGV2aWNlICopOwogCiBpbnQgZGFzZF9nZW5lcmljX3JlYWRfZGV2X2NoYXJzKHN0cnVjdCBkYXNkX2RldmljZSAqLCBjaGFyICosIHZvaWQgKiosIGludCk7CitjaGFyICpkYXNkX2dldF9zZW5zZShzdHJ1Y3QgaXJiICopOwogCiAvKiBleHRlcm5hbHMgaW4gZGFzZF9kZXZtYXAuYyAqLwogZXh0ZXJuIGludCBkYXNkX21heF9kZXZpbmRleDsKIGV4dGVybiBpbnQgZGFzZF9wcm9iZW9ubHk7CiBleHRlcm4gaW50IGRhc2RfYXV0b2RldGVjdDsKIGV4dGVybiBpbnQgZGFzZF9ub3BhdjsKK2V4dGVybiBpbnQgZGFzZF9ub2ZjeDsKIAogaW50IGRhc2RfZGV2bWFwX2luaXQodm9pZCk7CiB2b2lkIGRhc2RfZGV2bWFwX2V4aXQodm9pZCk7CkBAIC02MjMsNiArNjMxLDcgQEAKIAkJCQkJICAgIHN0cnVjdCBkYXNkX2RldmljZSAqKTsKIHZvaWQgZGFzZF9mcmVlX2VycF9yZXF1ZXN0KHN0cnVjdCBkYXNkX2Njd19yZXEgKiwgc3RydWN0IGRhc2RfZGV2aWNlICopOwogdm9pZCBkYXNkX2xvZ19zZW5zZShzdHJ1Y3QgZGFzZF9jY3dfcmVxICosIHN0cnVjdCBpcmIgKik7Cit2b2lkIGRhc2RfbG9nX3NlbnNlX2RiZihzdHJ1Y3QgZGFzZF9jY3dfcmVxICpjcXIsIHN0cnVjdCBpcmIgKmlyYik7CiAKIC8qIGV4dGVybmFscyBpbiBkYXNkXzM5OTBfZXJwLmMgKi8KIHN0cnVjdCBkYXNkX2Njd19yZXEgKmRhc2RfMzk5MF9lcnBfYWN0aW9uKHN0cnVjdCBkYXNkX2Njd19yZXEgKik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9pb2N0bC5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfaW9jdGwuYwppbmRleCBiODJkODE2Li40Y2UzZjcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9pb2N0bC5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2lvY3RsLmMKQEAgLTksNiArOSw5IEBACiAgKgogICogaS9vIGNvbnRyb2xzIGZvciB0aGUgZGFzZCBkcml2ZXIuCiAgKi8KKworI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAiZGFzZCIKKwogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KQEAgLTk0LDcgKzk3LDggQEAKIAlpZiAoIWNhcGFibGUgKENBUF9TWVNfQURNSU4pKQogCQlyZXR1cm4gLUVBQ0NFUzsKIAotCURFVl9NRVNTQUdFKEtFUk5fREVCVUcsIGJhc2UsICIlcyIsICJRdWllc2NlIElPIG9uIGRldmljZSIpOworCWRldl9pbmZvKCZiYXNlLT5jZGV2LT5kZXYsICJUaGUgREFTRCBoYXMgYmVlbiBwdXQgaW4gdGhlIHF1aWVzY2UgIgorCQkgInN0YXRlXG4iKTsKIAlzcGluX2xvY2tfaXJxc2F2ZShnZXRfY2N3ZGV2X2xvY2soYmFzZS0+Y2RldiksIGZsYWdzKTsKIAliYXNlLT5zdG9wcGVkIHw9IERBU0RfU1RPUFBFRF9RVUlFU0NFOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoZ2V0X2Njd2Rldl9sb2NrKGJhc2UtPmNkZXYpLCBmbGFncyk7CkBAIC0xMDMsNyArMTA3LDcgQEAKIAogCiAvKgotICogUXVpZXNjZSBkZXZpY2UuCisgKiBSZXN1bWUgZGV2aWNlLgogICovCiBzdGF0aWMgaW50IGRhc2RfaW9jdGxfcmVzdW1lKHN0cnVjdCBkYXNkX2Jsb2NrICpibG9jaykKIHsKQEAgLTExNCw3ICsxMTgsOCBAQAogCWlmICghY2FwYWJsZSAoQ0FQX1NZU19BRE1JTikpCiAJCXJldHVybiAtRUFDQ0VTOwogCi0JREVWX01FU1NBR0UoS0VSTl9ERUJVRywgYmFzZSwgIiVzIiwgInJlc3VtZSBJTyBvbiBkZXZpY2UiKTsKKwlkZXZfaW5mbygmYmFzZS0+Y2Rldi0+ZGV2LCAiSS9PIG9wZXJhdGlvbnMgaGF2ZSBiZWVuIHJlc3VtZWQgIgorCQkgIm9uIHRoZSBEQVNEXG4iKTsKIAlzcGluX2xvY2tfaXJxc2F2ZShnZXRfY2N3ZGV2X2xvY2soYmFzZS0+Y2RldiksIGZsYWdzKTsKIAliYXNlLT5zdG9wcGVkICY9IH5EQVNEX1NUT1BQRURfUVVJRVNDRTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKGdldF9jY3dkZXZfbG9jayhiYXNlLT5jZGV2KSwgZmxhZ3MpOwpAQCAtMTQwLDEzICsxNDUsMTMgQEAKIAkJcmV0dXJuIC1FUEVSTTsKIAogCWlmIChiYXNlLT5zdGF0ZSAhPSBEQVNEX1NUQVRFX0JBU0lDKSB7Ci0JCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgYmFzZSwgIiVzIiwKLQkJCSAgICAiZGFzZF9mb3JtYXQ6IGRldmljZSBpcyBub3QgZGlzYWJsZWQhICIpOworCQlkZXZfd2FybigmYmFzZS0+Y2Rldi0+ZGV2LAorCQkJICJUaGUgREFTRCBjYW5ub3QgYmUgZm9ybWF0dGVkIHdoaWxlIGl0IGlzIGVuYWJsZWRcbiIpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAogCURCRl9ERVZfRVZFTlQoREJGX05PVElDRSwgYmFzZSwKLQkJICAgICAgImZvcm1hdHRpbmcgdW5pdHMgJWQgdG8gJWQgKCVkIEIgYmxvY2tzKSBmbGFncyAlZCIsCisJCSAgICAgICJmb3JtYXR0aW5nIHVuaXRzICV1IHRvICV1ICgldSBCIGJsb2NrcykgZmxhZ3MgJXUiLAogCQkgICAgICBmZGF0YS0+c3RhcnRfdW5pdCwKIAkJICAgICAgZmRhdGEtPnN0b3BfdW5pdCwgZmRhdGEtPmJsa3NpemUsIGZkYXRhLT5pbnRlbnNpdHkpOwogCkBAIC0xNjksMTAgKzE3NCw5IEBACiAJCWRhc2Rfc2ZyZWVfcmVxdWVzdChjcXIsIGNxci0+bWVtZGV2KTsKIAkJaWYgKHJjKSB7CiAJCQlpZiAocmMgIT0gLUVSRVNUQVJUU1lTKQotCQkJCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBiYXNlLAotCQkJCQkgICAgIiBGb3JtYXR0aW5nIG9mIHVuaXQgJWQgZmFpbGVkICIKLQkJCQkJICAgICJ3aXRoIHJjID0gJWQiLAotCQkJCQkgICAgZmRhdGEtPnN0YXJ0X3VuaXQsIHJjKTsKKwkJCQlkZXZfZXJyKCZiYXNlLT5jZGV2LT5kZXYsCisJCQkJCSJGb3JtYXR0aW5nIHVuaXQgJWQgZmFpbGVkIHdpdGggIgorCQkJCQkicmM9JWRcbiIsIGZkYXRhLT5zdGFydF91bml0LCByYyk7CiAJCQlyZXR1cm4gcmM7CiAJCX0KIAkJZmRhdGEtPnN0YXJ0X3VuaXQrKzsKQEAgLTE5OSw4ICsyMDMsOSBAQAogCWlmIChjb3B5X2Zyb21fdXNlcigmZmRhdGEsIGFyZ3AsIHNpemVvZihzdHJ1Y3QgZm9ybWF0X2RhdGFfdCkpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAlpZiAoYmRldiAhPSBiZGV2LT5iZF9jb250YWlucykgewotCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGJsb2NrLT5iYXNlLCAiJXMiLAotCQkJICAgICJDYW5ub3QgbG93LWxldmVsIGZvcm1hdCBhIHBhcnRpdGlvbiIpOworCQlkZXZfd2FybigmYmxvY2stPmJhc2UtPmNkZXYtPmRldiwKKwkJCSAiVGhlIHNwZWNpZmllZCBEQVNEIGlzIGEgcGFydGl0aW9uIGFuZCBjYW5ub3QgYmUgIgorCQkJICJmb3JtYXR0ZWRcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJcmV0dXJuIGRhc2RfZm9ybWF0KGJsb2NrLCAmZmRhdGEpOwpAQCAtMzY1LDkgKzM3MCw5IEBACiAJcmV0dXJuIHJldDsKIH0KIAotaW50Ci1kYXNkX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSwKLQkgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBpbnQKK2Rhc2RfZG9faW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlLAorCSAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXN0cnVjdCBkYXNkX2Jsb2NrICpibG9jayA9IGJkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKIAl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKQEAgLTQyMCwzICs0MjUsMTQgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogfQorCitpbnQgZGFzZF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUsCisJICAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCWludCByYzsKKworCWxvY2tfa2VybmVsKCk7CisJcmMgPSBkYXNkX2RvX2lvY3RsKGJkZXYsIG1vZGUsIGNtZCwgYXJnKTsKKwl1bmxvY2tfa2VybmVsKCk7CisJcmV0dXJuIHJjOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfcHJvYy5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfcHJvYy5jCmluZGV4IGJmNmZkMzQuLjIwODBiYTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX3Byb2MuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9wcm9jLmMKQEAgLTExLDYgKzExLDggQEAKICAqCiAgKi8KIAorI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAiZGFzZCIKKwogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CkBAIC0xMTIsNyArMTE0LDcgQEAKIAkJCXNlcV9wcmludGYobSwgIm4vZgkgIik7CiAJCWVsc2UKIAkJCXNlcV9wcmludGYobSwKLQkJCQkgICAiYXQgYmxvY2tzaXplOiAlZCwgJWxkIGJsb2NrcywgJWxkIE1CIiwKKwkJCQkgICAiYXQgYmxvY2tzaXplOiAlZCwgJWxsZCBibG9ja3MsICVsbGQgTUIiLAogCQkJCSAgIGJsb2NrLT5icF9ibG9jaywgYmxvY2stPmJsb2NrcywKIAkJCQkgICAoKGJsb2NrLT5icF9ibG9jayA+PiA5KSAqCiAJCQkJICAgIGJsb2NrLT5ibG9ja3MpID4+IDExKTsKQEAgLTI2Nyw3ICsyNjksNyBAQAogCWJ1ZmZlciA9IGRhc2RfZ2V0X3VzZXJfc3RyaW5nKHVzZXJfYnVmLCB1c2VyX2xlbik7CiAJaWYgKElTX0VSUihidWZmZXIpKQogCQlyZXR1cm4gUFRSX0VSUihidWZmZXIpOwotCU1FU1NBR0VfTE9HKEtFUk5fSU5GTywgIi9wcm9jL2Rhc2Qvc3RhdGljdGljczogJyVzJyIsIGJ1ZmZlcik7CisJREJGX0VWRU5UKERCRl9ERUJVRywgIi9wcm9jL2Rhc2Qvc3RhdGljdGljczogJyVzJ1xuIiwgYnVmZmVyKTsKIAogCS8qIGNoZWNrIGZvciB2YWxpZCB2ZXJicyAqLwogCWZvciAoc3RyID0gYnVmZmVyOyBpc3NwYWNlKCpzdHIpOyBzdHIrKyk7CkBAIC0yNzcsMzMgKzI3OSwzMyBAQAogCQlpZiAoc3RyY21wKHN0ciwgIm9uIikgPT0gMCkgewogCQkJLyogc3dpdGNoIG9uIHN0YXRpc3RpY3MgcHJvZmlsaW5nICovCiAJCQlkYXNkX3Byb2ZpbGVfbGV2ZWwgPSBEQVNEX1BST0ZJTEVfT047Ci0JCQlNRVNTQUdFKEtFUk5fSU5GTywgIiVzIiwgIlN0YXRpc3RpY3Mgc3dpdGNoZWQgb24iKTsKKwkJCXByX2luZm8oIlRoZSBzdGF0aXN0aWNzIGZlYXR1cmUgaGFzIGJlZW4gc3dpdGNoZWQgIgorCQkJCSJvblxuIik7CiAJCX0gZWxzZSBpZiAoc3RyY21wKHN0ciwgIm9mZiIpID09IDApIHsKIAkJCS8qIHN3aXRjaCBvZmYgYW5kIHJlc2V0IHN0YXRpc3RpY3MgcHJvZmlsaW5nICovCiAJCQltZW1zZXQoJmRhc2RfZ2xvYmFsX3Byb2ZpbGUsCiAJCQkgICAgICAgMCwgc2l6ZW9mIChzdHJ1Y3QgZGFzZF9wcm9maWxlX2luZm9fdCkpOwogCQkJZGFzZF9wcm9maWxlX2xldmVsID0gREFTRF9QUk9GSUxFX09GRjsKLQkJCU1FU1NBR0UoS0VSTl9JTkZPLCAiJXMiLCAiU3RhdGlzdGljcyBzd2l0Y2hlZCBvZmYiKTsKKwkJCXByX2luZm8oIlRoZSBzdGF0aXN0aWNzIGZlYXR1cmUgaGFzIGJlZW4gc3dpdGNoZWQgIgorCQkJCSJvZmZcbiIpOwogCQl9IGVsc2UKIAkJCWdvdG8gb3V0X2Vycm9yOwogCX0gZWxzZSBpZiAoc3RybmNtcChzdHIsICJyZXNldCIsIDUpID09IDApIHsKIAkJLyogcmVzZXQgdGhlIHN0YXRpc3RpY3MgKi8KIAkJbWVtc2V0KCZkYXNkX2dsb2JhbF9wcm9maWxlLCAwLAogCQkgICAgICAgc2l6ZW9mIChzdHJ1Y3QgZGFzZF9wcm9maWxlX2luZm9fdCkpOwotCQlNRVNTQUdFKEtFUk5fSU5GTywgIiVzIiwgIlN0YXRpc3RpY3MgcmVzZXQiKTsKKwkJcHJfaW5mbygiVGhlIHN0YXRpc3RpY3MgaGF2ZSBiZWVuIHJlc2V0XG4iKTsKIAl9IGVsc2UKIAkJZ290byBvdXRfZXJyb3I7CiAJa2ZyZWUoYnVmZmVyKTsKIAlyZXR1cm4gdXNlcl9sZW47CiBvdXRfZXJyb3I6Ci0JTUVTU0FHRShLRVJOX1dBUk5JTkcsICIlcyIsCi0JCSIvcHJvYy9kYXNkL3N0YXRpc3RpY3M6IG9ubHkgJ3NldCBvbicsICdzZXQgb2ZmJyAiCi0JCSJhbmQgJ3Jlc2V0JyBhcmUgc3VwcG9ydGVkIHZlcmJzIik7CisJcHJfd2FybmluZygiJXMgaXMgbm90IGEgc3VwcG9ydGVkIHZhbHVlIGZvciAvcHJvYy9kYXNkL3N0YXRpc3RpY3NcbiIsCisJCXN0cik7CiAJa2ZyZWUoYnVmZmVyKTsKIAlyZXR1cm4gLUVJTlZBTDsKICNlbHNlCi0JTUVTU0FHRShLRVJOX1dBUk5JTkcsICIlcyIsCi0JCSIvcHJvYy9kYXNkL3N0YXRpc3RpY3M6IGlzIG5vdCBhY3RpdmF0ZWQgaW4gdGhpcyBrZXJuZWwiKTsKKwlwcl93YXJuaW5nKCIvcHJvYy9kYXNkL3N0YXRpc3RpY3M6IGlzIG5vdCBhY3RpdmF0ZWQgaW4gdGhpcyBrZXJuZWxcbiIpOwogCXJldHVybiB1c2VyX2xlbjsKICNlbmRpZgkJCQkvKiBDT05GSUdfREFTRF9QUk9GSUxFICovCiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlLmggYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlLmgKaW5kZXggZDBkNTY1YS4uYzA3ODA5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZS5oCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGUuaApAQCAtMzI0LDggKzMyNCw2IEBACiAjZW5kaWYKIAogLyogYSBmdW5jdGlvbiBmb3IgZHVtcGluZyBkZXZpY2Ugc2Vuc2UgaW5mbyAqLwotZXh0ZXJuIHZvaWQgdGFwZV9kdW1wX3NlbnNlKHN0cnVjdCB0YXBlX2RldmljZSAqLCBzdHJ1Y3QgdGFwZV9yZXF1ZXN0ICosCi0JCQkgICAgc3RydWN0IGlyYiAqKTsKIGV4dGVybiB2b2lkIHRhcGVfZHVtcF9zZW5zZV9kYmYoc3RydWN0IHRhcGVfZGV2aWNlICosIHN0cnVjdCB0YXBlX3JlcXVlc3QgKiwKIAkJCQlzdHJ1Y3QgaXJiICopOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlXzM0eHguYyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfMzR4eC5jCmluZGV4IDIyY2EzNDMuLjgwN2RlZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfMzR4eC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfMzR4eC5jCkBAIC04LDYgKzgsOCBAQAogICoJCSBNYXJ0aW4gU2Nod2lkZWZza3kgPHNjaHdpZGVmc2t5QGRlLmlibS5jb20+CiAgKi8KIAorI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAidGFwZSIKKwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9iaW8uaD4KQEAgLTE4LDggKzIwLDYgQEAKICNpbmNsdWRlICJ0YXBlLmgiCiAjaW5jbHVkZSAidGFwZV9zdGQuaCIKIAotI2RlZmluZSBQUklOVEtfSEVBREVSICJUQVBFXzM0WFg6ICIKLQogLyoKICAqIFBvaW50ZXIgdG8gZGVidWcgYXJlYS4KICAqLwpAQCAtMjAzLDggKzIwMyw3IEBACiAJCXRhcGVfMzR4eF9zY2hlZHVsZV93b3JrKGRldmljZSwgVE9fTVNFTik7CiAJfSBlbHNlIHsKIAkJREJGX0VWRU5UKDMsICJ1bnNvbC5pcnEhIGRldiBlbmQ6ICUwOHhcbiIsIGRldmljZS0+Y2Rldl9pZCk7Ci0JCVBSSU5UX1dBUk4oIlVuc29saWNpdGVkIElSUSAoRGV2aWNlIEVuZCkgY2F1Z2h0LlxuIik7Ci0JCXRhcGVfZHVtcF9zZW5zZShkZXZpY2UsIE5VTEwsIGlyYik7CisJCXRhcGVfZHVtcF9zZW5zZV9kYmYoZGV2aWNlLCBOVUxMLCBpcmIpOwogCX0KIAlyZXR1cm4gVEFQRV9JT19TVUNDRVNTOwogfQpAQCAtMjI2LDkgKzIyNSw3IEBACiAJCXRhcGVfc3RkX3JlYWRfYmFja3dhcmQoZGV2aWNlLCByZXF1ZXN0KTsKIAkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfcmV0cnkocmVxdWVzdCk7CiAJfQotCWlmIChyZXF1ZXN0LT5vcCAhPSBUT19SQkEpCi0JCVBSSU5UX0VSUigicmVhZF9vcHBvc2l0ZSBjYWxsZWQgd2l0aCBzdGF0ZTolc1xuIiwKLQkJCSAgdGFwZV9vcF92ZXJib3NlW3JlcXVlc3QtPm9wXSk7CisKIAkvKgogCSAqIFdlIHRyaWVkIHRvIHJlYWQgZm9yd2FyZCBhbmQgYmFja3dhcmQsIGJ1dCBoYXQgbm8KIAkgKiBzdWNjZXNzIC0+IGZhaWxlZC4KQEAgLTI0MSwxMyArMjM4LDkgQEAKIAkJICBzdHJ1Y3QgaXJiICppcmIsIGludCBubykKIHsKIAlpZiAocmVxdWVzdC0+b3AgIT0gVE9fQVNTSUdOKSB7Ci0JCVBSSU5UX1dBUk4oIkFuIHVuZXhwZWN0ZWQgY29uZGl0aW9uICMlZCB3YXMgY2F1Z2h0IGluICIKLQkJCSAgICJ0YXBlIGVycm9yIHJlY292ZXJ5LlxuIiwgbm8pOwotCQlQUklOVF9XQVJOKCJQbGVhc2UgcmVwb3J0IHRoaXMgaW5jaWRlbnQuXG4iKTsKLQkJaWYgKHJlcXVlc3QpCi0JCQlQUklOVF9XQVJOKCJPcGVyYXRpb24gb2YgdGFwZTolc1xuIiwKLQkJCQkgICB0YXBlX29wX3ZlcmJvc2VbcmVxdWVzdC0+b3BdKTsKLQkJdGFwZV9kdW1wX3NlbnNlKGRldmljZSwgcmVxdWVzdCwgaXJiKTsKKwkJZGV2X2VycigmZGV2aWNlLT5jZGV2LT5kZXYsICJBbiB1bmV4cGVjdGVkIGNvbmRpdGlvbiAlZCAiCisJCQkib2NjdXJyZWQgaW4gdGFwZSBlcnJvciByZWNvdmVyeVxuIiwgbm8pOworCQl0YXBlX2R1bXBfc2Vuc2VfZGJmKGRldmljZSwgcmVxdWVzdCwgaXJiKTsKIAl9CiAJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FSU8pOwogfQpAQCAtMjYxLDkgKzI1NCw4IEBACiAJCSAgICAgIHN0cnVjdCBpcmIgKmlyYikKIHsKIAlpZiAoaXJiLT5lY3dbM10gPT0gMHg0MCkgewotCQlQUklOVF9XQVJOICgiRGF0YSBvdmVycnVuIGVycm9yIGJldHdlZW4gY29udHJvbC11bml0ICIKLQkJCSAgICAiYW5kIGRyaXZlLiBVc2UgYSBmYXN0ZXIgY2hhbm5lbCBjb25uZWN0aW9uLCAiCi0JCQkgICAgImlmIHBvc3NpYmxlISBcbiIpOworCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiQSBkYXRhIG92ZXJydW4gb2NjdXJyZWQgYmV0d2VlbiIKKwkJCSIgdGhlIGNvbnRyb2wgdW5pdCBhbmQgdGFwZSB1bml0XG4iKTsKIAkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FSU8pOwogCX0KIAlyZXR1cm4gdGFwZV8zNHh4X2VycF9idWcoZGV2aWNlLCByZXF1ZXN0LCBpcmIsIC0xKTsKQEAgLTI4MCw3ICsyNzIsOCBAQAogCQkvKgogCQkgKiBjdSBkZXRlY3RlZCBpbmNvcnJlY3QgYmxvY2staWQgc2VxdWVuY2Ugb24gdGFwZS4KIAkJICovCi0JCVBSSU5UX1dBUk4oIklsbGVnYWwgYmxvY2staWQgc2VxdWVuY2UgZm91bmQhXG4iKTsKKwkJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIlRoZSBibG9jayBJRCBzZXF1ZW5jZSBvbiB0aGUgIgorCQkJInRhcGUgaXMgaW5jb3JyZWN0XG4iKTsKIAkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FSU8pOwogCX0KIAkvKgpAQCAtMzkzLDggKzM4Niw2IEBACiAJCQkvKiBXcml0aW5nIGF0IHBoeXNpY2FsIGVuZCBvZiB2b2x1bWUgKi8KIAkJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAtRU5PU1BDKTsKIAkJZGVmYXVsdDoKLQkJCVBSSU5UX0VSUigiSW52YWxpZCBvcCBpbiAlczolaVxuIiwKLQkJCQkgIF9fZnVuY19fLCBfX0xJTkVfXyk7CiAJCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9mYWlsZWQocmVxdWVzdCwgMCk7CiAJCX0KIAl9CkBAIC00MjAsNyArNDExLDggQEAKIAkJCQkJCQkgaXJiLCAtNCk7CiAKIAkJCS8qIGRhdGEgY2hlY2sgaXMgcGVybWFuZW50LCBDVSByZWNvdmVyeSBoYXMgZmFpbGVkICovCi0JCQlQUklOVF9XQVJOKCJQZXJtYW5lbnQgcmVhZCBlcnJvclxuIik7CisJCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiQSByZWFkIGVycm9yIG9jY3VycmVkICIKKwkJCQkidGhhdCBjYW5ub3QgYmUgcmVjb3ZlcmVkXG4iKTsKIAkJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAtRUlPKTsKIAkJY2FzZSAweDI1OgogCQkJLy8gYSB3cml0ZSBkYXRhIGNoZWNrIG9jY3VycmVkCkBAIC00MzMsMjIgKzQyNSwyNiBAQAogCQkJCQkJCSBpcmIsIC01KTsKIAogCQkJLy8gZGF0YSBjaGVjayBpcyBwZXJtYW5lbnQsIGN1LXJlY292ZXJ5IGhhcyBmYWlsZWQKLQkJCVBSSU5UX1dBUk4oIlBlcm1hbmVudCB3cml0ZSBlcnJvclxuIik7CisJCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiQSB3cml0ZSBlcnJvciBvbiB0aGUgIgorCQkJCSJ0YXBlIGNhbm5vdCBiZSByZWNvdmVyZWRcbiIpOwogCQkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FSU8pOwogCQljYXNlIDB4MjY6CiAJCQkvKiBEYXRhIENoZWNrIChyZWFkIG9wcG9zaXRlKSBvY2N1cnJlZC4gKi8KIAkJCXJldHVybiB0YXBlXzM0eHhfZXJwX3JlYWRfb3Bwb3NpdGUoZGV2aWNlLCByZXF1ZXN0KTsKIAkJY2FzZSAweDI4OgogCQkJLyogSUQtTWFyayBhdCB0YXBlIHN0YXJ0IGNvdWxkbid0IGJlIHdyaXR0ZW4gKi8KLQkJCVBSSU5UX1dBUk4oIklELU1hcmsgY291bGQgbm90IGJlIHdyaXR0ZW4uXG4iKTsKKwkJCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJXcml0aW5nIHRoZSBJRC1tYXJrICIKKwkJCQkiZmFpbGVkXG4iKTsKIAkJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAtRUlPKTsKIAkJY2FzZSAweDMxOgogCQkJLyogVGFwZSB2b2lkLiBUcmllZCB0byByZWFkIGJleW9uZCBlbmQgb2YgZGV2aWNlLiAqLwotCQkJUFJJTlRfV0FSTigiUmVhZCBiZXlvbmQgZW5kIG9mIHJlY29yZGVkIGFyZWEuXG4iKTsKKwkJCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJSZWFkaW5nIHRoZSB0YXBlIGJleW9uZCIKKwkJCQkiIHRoZSBlbmQgb2YgdGhlIHJlY29yZGVkIGFyZWEgZmFpbGVkXG4iKTsKIAkJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAtRU5PU1BDKTsKIAkJY2FzZSAweDQxOgogCQkJLyogUmVjb3JkIHNlcXVlbmNlIGVycm9yLiAqLwotCQkJUFJJTlRfV0FSTigiSW52YWxpZCBibG9jay1pZCBzZXF1ZW5jZSBmb3VuZC5cbiIpOworCQkJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIlRoZSB0YXBlIGNvbnRhaW5zIGFuICIKKwkJCQkiaW5jb3JyZWN0IGJsb2NrIElEIHNlcXVlbmNlXG4iKTsKIAkJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAtRUlPKTsKIAkJZGVmYXVsdDoKIAkJCS8qIGFsbCBkYXRhIGNoZWNrcyBmb3IgMzQ4MCBzaG91bGQgcmVzdWx0IGluIG9uZSBvZgpAQCAtNDcwLDE2ICs0NjYsMTIgQEAKIAlzd2l0Y2ggKHNlbnNlWzNdKSB7CiAJY2FzZSAweDAwOgogCQkvKiBVbml0IGNoZWNrIHdpdGggZXJwYSBjb2RlIDAuIFJlcG9ydCBhbmQgaWdub3JlLiAqLwotCQlQUklOVF9XQVJOKCJOb24tZXJyb3Igc2Vuc2Ugd2FzIGZvdW5kLiAiCi0JCQkgICAiVW5pdC1jaGVjayB3aWxsIGJlIGlnbm9yZWQuXG4iKTsKIAkJcmV0dXJuIFRBUEVfSU9fU1VDQ0VTUzsKIAljYXNlIDB4MjE6CiAJCS8qCiAJCSAqIERhdGEgc3RyZWFtaW5nIG5vdCBvcGVyYXRpb25hbC4gQ1Ugd2lsbCBzd2l0Y2ggdG8KIAkJICogaW50ZXJsb2NrIG1vZGUuIFJlaXNzdWUgdGhlIGNvbW1hbmQuCiAJCSAqLwotCQlQUklOVF9XQVJOKCJEYXRhIHN0cmVhbWluZyBub3Qgb3BlcmF0aW9uYWwuICIKLQkJCSAgICJTd2l0Y2hpbmcgdG8gaW50ZXJsb2NrLW1vZGUuXG4iKTsKIAkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfcmV0cnkocmVxdWVzdCk7CiAJY2FzZSAweDIyOgogCQkvKgpAQCAtNDg3LDExICs0NzksOCBAQAogCQkgKiBlcnJvciBvbiB0aGUgbG93ZXIgaW50ZXJmYWNlLCBpbnRlcm5hbCBwYXRoIG5vdCB1c2FibGUsCiAJCSAqIG9yIGVycm9yIGR1cmluZyBjYXJ0cmlkZ2UgbG9hZC4KIAkJICovCi0JCVBSSU5UX1dBUk4oIkEgcGF0aCBlcXVpcG1lbnQgY2hlY2sgb2NjdXJyZWQuIE9uZSBvZiB0aGUgIgotCQkJICAgImZvbGxvd2luZyBjb25kaXRpb25zIG9jY3VycmVkOlxuIik7Ci0JCVBSSU5UX1dBUk4oImRyaXZlIGFkYXB0ZXIgZXJyb3IsIGJ1ZmZlciBlcnJvciBvbiB0aGUgbG93ZXIgIgotCQkJICAgImludGVyZmFjZSwgaW50ZXJuYWwgcGF0aCBub3QgdXNhYmxlLCBlcnJvciAiCi0JCQkgICAiZHVyaW5nIGNhcnRyaWRnZSBsb2FkLlxuIik7CisJCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJBIHBhdGggZXF1aXBtZW50IGNoZWNrIG9jY3VycmVkIgorCQkJIiBmb3IgdGhlIHRhcGUgZGV2aWNlXG4iKTsKIAkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FSU8pOwogCWNhc2UgMHgyNDoKIAkJLyoKQEAgLTUxNCw3ICs1MDMsNiBAQAogCQkgKiBidXQgdGhlIGhhcmR3YXJlIGlzbid0IGNhcGFibGUgdG8gZG8gaWRyYywgb3IgYSBwZXJmb3JtCiAJCSAqIHN1YnN5c3RlbSBmdW5jIGlzIGlzc3VlZCBhbmQgdGhlIENVIGlzIG5vdCBvbi1saW5lLgogCQkgKi8KLQkJUFJJTlRfV0FSTiAoIkZ1bmN0aW9uIGluY29tcGF0aWJsZS4gVHJ5IHRvIHN3aXRjaCBvZmYgaWRyY1xuIik7CiAJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAtRUlPKTsKIAljYXNlIDB4MmE6CiAJCS8qCkBAIC01NTIsMjMgKzU0MCwyNiBAQAogCQkgKiByZWFkaW5nIHRoZSBmb3JtYXQgaWQgbWFyayBvciB0aGF0IHRoYXQgZm9ybWF0IHNwZWNpZmllZAogCQkgKiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZS4KIAkJICovCi0JCVBSSU5UX1dBUk4oIkRyaXZlIG5vdCBjYXBhYmxlIHByb2Nlc3NpbmcgdGhlIHRhcGUgZm9ybWF0IVxuIik7CisJCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJUaGUgdGFwZSB1bml0IGNhbm5vdCBwcm9jZXNzICIKKwkJCSJ0aGUgdGFwZSBmb3JtYXRcbiIpOwogCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9mYWlsZWQocmVxdWVzdCwgLUVNRURJVU1UWVBFKTsKIAljYXNlIDB4MzA6CiAJCS8qIFRoZSBtZWRpdW0gaXMgd3JpdGUgcHJvdGVjdGVkLiAqLwotCQlQUklOVF9XQVJOKCJNZWRpdW0gaXMgd3JpdGUgcHJvdGVjdGVkIVxuIik7CisJCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJUaGUgdGFwZSBtZWRpdW0gaXMgd3JpdGUtIgorCQkJInByb3RlY3RlZFxuIik7CiAJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAtRUFDQ0VTKTsKIAljYXNlIDB4MzI6CiAJCS8vIFRlbnNpb24gbG9zcy4gV2UgY2Fubm90IHJlY292ZXIgdGhpcywgaXQncyBhbiBJL08gZXJyb3IuCi0JCVBSSU5UX1dBUk4oIlRoZSBkcml2ZSBsb3N0IHRhcGUgdGVuc2lvbi5cbiIpOworCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiVGhlIHRhcGUgZG9lcyBub3QgaGF2ZSB0aGUgIgorCQkJInJlcXVpcmVkIHRhcGUgdGVuc2lvblxuIik7CiAJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAtRUlPKTsKIAljYXNlIDB4MzM6CiAJCS8qCiAJCSAqIExvYWQgRmFpbHVyZS4gVGhlIGNhcnRyaWRnZSB3YXMgbm90IGluc2VydGVkIGNvcnJlY3RseSBvcgogCQkgKiB0aGUgdGFwZSBpcyBub3QgdGhyZWFkZWQgY29ycmVjdGx5LgogCQkgKi8KLQkJUFJJTlRfV0FSTigiQ2FydHJpZGdlIGxvYWQgZmFpbHVyZS4gUmVsb2FkIHRoZSBjYXJ0cmlkZ2UgIgotCQkJICAgImFuZCB0cnkgYWdhaW4uXG4iKTsKKwkJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIlRoZSB0YXBlIHVuaXQgZmFpbGVkIHRvIGxvYWQiCisJCQkiIHRoZSBjYXJ0cmlkZ2VcbiIpOwogCQl0YXBlXzM0eHhfZGVsZXRlX3NiaWRfZnJvbShkZXZpY2UsIDApOwogCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9mYWlsZWQocmVxdWVzdCwgLUVJTyk7CiAJY2FzZSAweDM0OgpAQCAtNTc2LDggKzU2Nyw4IEBACiAJCSAqIFVubG9hZCBmYWlsdXJlLiBUaGUgZHJpdmUgY2Fubm90IG1haW50YWluIHRhcGUgdGVuc2lvbgogCQkgKiBhbmQgY29udHJvbCB0YXBlIG1vdmVtZW50IGR1cmluZyBhbiB1bmxvYWQgb3BlcmF0aW9uLgogCQkgKi8KLQkJUFJJTlRfV0FSTigiRmFpbHVyZSBkdXJpbmcgY2FydHJpZGdlIHVubG9hZC4gIgotCQkJICAgIlBsZWFzZSB0cnkgbWFudWFsbHkuXG4iKTsKKwkJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIkF1dG9tYXRpYyB1bmxvYWRpbmcgb2YgdGhlIHRhcGUiCisJCQkiIGNhcnRyaWRnZSBmYWlsZWRcbiIpOwogCQlpZiAocmVxdWVzdC0+b3AgPT0gVE9fUlVOKQogCQkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FSU8pOwogCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9idWcoZGV2aWNlLCByZXF1ZXN0LCBpcmIsIHNlbnNlWzNdKTsKQEAgLTU4OSw4ICs1ODAsOCBAQAogCQkgKiAtIHRoZSBjYXJ0cmlkZ2UgbG9hZGVyIGRvZXMgbm90IHJlc3BvbmQgY29ycmVjdGx5CiAJCSAqIC0gYSBmYWlsdXJlIG9jY3VycyBkdXJpbmcgYW4gaW5kZXgsIGxvYWQsIG9yIHVubG9hZCBjeWNsZQogCQkgKi8KLQkJUFJJTlRfV0FSTigiRXF1aXBtZW50IGNoZWNrISBQbGVhc2UgY2hlY2sgdGhlIGRyaXZlIGFuZCAiCi0JCQkgICAidGhlIGNhcnRyaWRnZSBsb2FkZXIuXG4iKTsKKwkJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIkFuIGVxdWlwbWVudCBjaGVjayBoYXMgb2NjdXJyZWQiCisJCQkiIG9uIHRoZSB0YXBlIHVuaXRcbiIpOwogCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9mYWlsZWQocmVxdWVzdCwgLUVJTyk7CiAJY2FzZSAweDM2OgogCQlpZiAoZGV2aWNlLT5jZGV2LT5pZC5kcml2ZXJfaW5mbyA9PSB0YXBlXzM0OTApCkBAIC02MDMsNyArNTk0LDggQEAKIAkJICogVGFwZSBsZW5ndGggZXJyb3IuIFRoZSB0YXBlIGlzIHNob3J0ZXIgdGhhbiByZXBvcnRlZCBpbgogCQkgKiB0aGUgYmVnaW5uaW5nLW9mLXRhcGUgZGF0YS4KIAkJICovCi0JCVBSSU5UX1dBUk4oIlRhcGUgbGVuZ3RoIGVycm9yLlxuIik7CisJCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJUaGUgdGFwZSBpbmZvcm1hdGlvbiBzdGF0ZXMgYW4iCisJCQkiIGluY29ycmVjdCBsZW5ndGhcbiIpOwogCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9mYWlsZWQocmVxdWVzdCwgLUVJTyk7CiAJY2FzZSAweDM4OgogCQkvKgpAQCAtNjIwLDEyICs2MTIsMTIgQEAKIAkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FSU8pOwogCWNhc2UgMHgzYToKIAkJLyogRHJpdmUgc3dpdGNoZWQgdG8gbm90IHJlYWR5LiAqLwotCQlQUklOVF9XQVJOKCJEcml2ZSBub3QgcmVhZHkuIFR1cm4gdGhlIHJlYWR5L25vdCByZWFkeSBzd2l0Y2ggIgotCQkJICAgInRvIHJlYWR5IHBvc2l0aW9uIGFuZCB0cnkgYWdhaW4uXG4iKTsKKwkJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIlRoZSB0YXBlIHVuaXQgaXMgbm90IHJlYWR5XG4iKTsKIAkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FSU8pOwogCWNhc2UgMHgzYjoKIAkJLyogTWFudWFsIHJld2luZCBvciB1bmxvYWQuIFRoaXMgY2F1c2VzIGFuIEkvTyBlcnJvci4gKi8KLQkJUFJJTlRfV0FSTigiTWVkaXVtIHdhcyByZXdvdW5kIG9yIHVubG9hZGVkIG1hbnVhbGx5LlxuIik7CisJCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJUaGUgdGFwZSBtZWRpdW0gaGFzIGJlZW4gIgorCQkJInJld291bmQgb3IgdW5sb2FkZWQgbWFudWFsbHlcbiIpOwogCQl0YXBlXzM0eHhfZGVsZXRlX3NiaWRfZnJvbShkZXZpY2UsIDApOwogCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9mYWlsZWQocmVxdWVzdCwgLUVJTyk7CiAJY2FzZSAweDQyOgpAQCAtNjMzLDcgKzYyNSw4IEBACiAJCSAqIERlZ3JhZGVkIG1vZGUuIEEgY29uZGl0aW9uIHRoYXQgY2FuIGNhdXNlIGRlZ3JhZGVkCiAJCSAqIHBlcmZvcm1hbmNlIGlzIGRldGVjdGVkLgogCQkgKi8KLQkJUFJJTlRfV0FSTigiU3Vic3lzdGVtIGlzIHJ1bm5pbmcgaW4gZGVncmFkZWQgbW9kZS5cbiIpOworCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiVGhlIHRhcGUgc3Vic3lzdGVtIGlzIHJ1bm5pbmcgIgorCQkJImluIGRlZ3JhZGVkIG1vZGVcbiIpOwogCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9yZXRyeShyZXF1ZXN0KTsKIAljYXNlIDB4NDM6CiAJCS8qIERyaXZlIG5vdCByZWFkeS4gKi8KQEAgLTY1Miw3ICs2NDUsNiBAQAogCQkJCQlicmVhazsKIAkJCX0KIAkJfQotCQlQUklOVF9XQVJOKCJUaGUgZHJpdmUgaXMgbm90IHJlYWR5LlxuIik7CiAJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAtRU5PTUVESVVNKTsKIAljYXNlIDB4NDQ6CiAJCS8qIExvY2F0ZSBCbG9jayB1bnN1Y2Nlc3NmdWwuICovCkBAIC02NjMsNyArNjU1LDggQEAKIAkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FSU8pOwogCWNhc2UgMHg0NToKIAkJLyogVGhlIGRyaXZlIGlzIGFzc2lnbmVkIHRvIGEgZGlmZmVyZW50IGNoYW5uZWwgcGF0aC4gKi8KLQkJUFJJTlRfV0FSTigiVGhlIGRyaXZlIGlzIGFzc2lnbmVkIGVsc2V3aGVyZS5cbiIpOworCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiVGhlIHRhcGUgdW5pdCBpcyBhbHJlYWR5ICIKKwkJCSJhc3NpZ25lZFxuIik7CiAJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAtRUlPKTsKIAljYXNlIDB4NDY6CiAJCS8qCkBAIC02NzEsMTEgKzY2NCwxMiBAQAogCQkgKiB0aGUgcG93ZXIgc3VwcGx5IG1heSBiZSBzd2l0Y2hlZCBvZmYgb3IKIAkJICogdGhlIGRyaXZlIGFkZHJlc3MgbWF5IG5vdCBiZSBzZXQgY29ycmVjdGx5LgogCQkgKi8KLQkJUFJJTlRfV0FSTigiVGhlIGRyaXZlIGlzIG5vdCBvbi1saW5lLiIpOworCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiVGhlIHRhcGUgdW5pdCBpcyBub3Qgb25saW5lXG4iKTsKIAkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FSU8pOwogCWNhc2UgMHg0NzoKIAkJLyogVm9sdW1lIGZlbmNlZC4gQ1UgcmVwb3J0cyB2b2x1bWUgaW50ZWdyaXR5IGlzIGxvc3QuICovCi0JCVBSSU5UX1dBUk4oIlZvbHVtZSBmZW5jZWQuIFRoZSB2b2x1bWUgaW50ZWdyaXR5IGlzIGxvc3QuXG4iKTsKKwkJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIlRoZSBjb250cm9sIHVuaXQgaGFzIGZlbmNlZCAiCisJCQkiYWNjZXNzIHRvIHRoZSB0YXBlIHZvbHVtZVxuIik7CiAJCXRhcGVfMzR4eF9kZWxldGVfc2JpZF9mcm9tKGRldmljZSwgMCk7CiAJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAtRUlPKTsKIAljYXNlIDB4NDg6CkBAIC02ODMsMjAgKzY3NywyMSBAQAogCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9yZXRyeShyZXF1ZXN0KTsKIAljYXNlIDB4NDk6CiAJCS8qIEJ1cyBvdXQgY2hlY2suIEEgcGFyaXR5IGNoZWNrIGVycm9yIG9uIHRoZSBidXMgd2FzIGZvdW5kLiAqLwotCQlQUklOVF9XQVJOKCJCdXMgb3V0IGNoZWNrLiBBIGRhdGEgdHJhbnNmZXIgb3ZlciB0aGUgYnVzICIKLQkJCSAgICJoYXMgYmVlbiBjb3JydXB0ZWQuXG4iKTsKKwkJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIkEgcGFyaXR5IGVycm9yIG9jY3VycmVkIG9uIHRoZSAiCisJCQkidGFwZSBidXNcbiIpOwogCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9mYWlsZWQocmVxdWVzdCwgLUVJTyk7CiAJY2FzZSAweDRhOgogCQkvKiBDb250cm9sIHVuaXQgZXJwIGZhaWxlZC4gKi8KLQkJUFJJTlRfV0FSTigiVGhlIGNvbnRyb2wgdW5pdCBJL08gZXJyb3IgcmVjb3ZlcnkgZmFpbGVkLlxuIik7CisJCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJJL08gZXJyb3IgcmVjb3ZlcnkgZmFpbGVkIG9uICIKKwkJCSJ0aGUgdGFwZSBjb250cm9sIHVuaXRcbiIpOwogCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9mYWlsZWQocmVxdWVzdCwgLUVJTyk7CiAJY2FzZSAweDRiOgogCQkvKgogCQkgKiBDVSBhbmQgZHJpdmUgaW5jb21wYXRpYmxlLiBUaGUgZHJpdmUgcmVxdWVzdHMgbWljcm8tcHJvZ3JhbQogCQkgKiBwYXRjaGVzLCB3aGljaCBhcmUgbm90IGF2YWlsYWJsZSBvbiB0aGUgQ1UuCiAJCSAqLwotCQlQUklOVF9XQVJOKCJUaGUgZHJpdmUgbmVlZHMgbWljcm9wcm9ncmFtIHBhdGNoZXMgZnJvbSB0aGUgIgotCQkJICAgImNvbnRyb2wgdW5pdCwgd2hpY2ggYXJlIG5vdCBhdmFpbGFibGUuXG4iKTsKKwkJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIlRoZSB0YXBlIHVuaXQgcmVxdWlyZXMgYSAiCisJCQkiZmlybXdhcmUgdXBkYXRlXG4iKTsKIAkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FSU8pOwogCWNhc2UgMHg0YzoKIAkJLyoKQEAgLTcyMSw4ICs3MTYsOCBAQAogCQkJICogdGhlIGJsb2NrIHRvIGJlIHdyaXR0ZW4gaXMgbGFyZ2VyIHRoYW4gYWxsb3dlZCBmb3IKIAkJCSAqIGJ1ZmZlcmVkIG1vZGUuCiAJCQkgKi8KLQkJCVBSSU5UX1dBUk4oIk1heGltdW0gYmxvY2sgc2l6ZSBmb3IgYnVmZmVyZWQgIgotCQkJCSAgICJtb2RlIGV4Y2VlZGVkLlxuIik7CisJCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiVGhlIG1heGltdW0gYmxvY2sgc2l6ZSIKKwkJCQkiIGZvciBidWZmZXJlZCBtb2RlIGlzIGV4Y2VlZGVkXG4iKTsKIAkJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAtRU5PQlVGUyk7CiAJCX0KIAkJLyogVGhpcyBlcnBhIGlzIHJlc2VydmVkIGZvciAzNDgwLiAqLwpAQCAtNzU5LDIyICs3NTQsMjAgQEAKIAkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfcmV0cnkocmVxdWVzdCk7CiAJY2FzZSAweDU1OgogCQkvKiBDaGFubmVsIGludGVyZmFjZSByZWNvdmVyeSAocGVybWFuZW50KS4gKi8KLQkJUFJJTlRfV0FSTigiQSBwZXJtYW5lbnQgY2hhbm5lbCBpbnRlcmZhY2UgZXJyb3Igb2NjdXJyZWQuXG4iKTsKKwkJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIkEgY2hhbm5lbCBpbnRlcmZhY2UgZXJyb3IgY2Fubm90IGJlIgorCQkJIiByZWNvdmVyZWRcbiIpOwogCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9mYWlsZWQocmVxdWVzdCwgLUVJTyk7CiAJY2FzZSAweDU2OgogCQkvKiBDaGFubmVsIHByb3RvY29sIGVycm9yLiAqLwotCQlQUklOVF9XQVJOKCJBIGNoYW5uZWwgcHJvdG9jb2wgZXJyb3Igb2NjdXJyZWQuXG4iKTsKKwkJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIkEgY2hhbm5lbCBwcm90b2NvbCBlcnJvciAiCisJCQkib2NjdXJyZWRcbiIpOwogCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9mYWlsZWQocmVxdWVzdCwgLUVJTyk7CiAJY2FzZSAweDU3OgogCQlpZiAoZGV2aWNlLT5jZGV2LT5pZC5kcml2ZXJfaW5mbyA9PSB0YXBlXzM0ODApIHsKIAkJCS8qIEF0dGVudGlvbiBpbnRlcmNlcHQuICovCi0JCQlQUklOVF9XQVJOKCJBbiBhdHRlbnRpb24gaW50ZXJjZXB0IG9jY3VycmVkLCAiCi0JCQkJICAgIndoaWNoIHdpbGwgYmUgcmVjb3ZlcmVkLlxuIik7CiAJCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9yZXRyeShyZXF1ZXN0KTsKIAkJfSBlbHNlIHsKIAkJCS8qIEdsb2JhbCBzdGF0dXMgaW50ZXJjZXB0LiAqLwotCQkJUFJJTlRfV0FSTigiQW4gZ2xvYmFsIHN0YXR1cyBpbnRlcmNlcHQgd2FzIHJlY2VpdmVkLCAiCi0JCQkJICAgIndoaWNoIHdpbGwgYmUgcmVjb3ZlcmVkLlxuIik7CiAJCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9yZXRyeShyZXF1ZXN0KTsKIAkJfQogCWNhc2UgMHg1YToKQEAgLTc4Miw0MiArNzc1LDMxIEBACiAJCSAqIFRhcGUgbGVuZ3RoIGluY29tcGF0aWJsZS4gVGhlIHRhcGUgaW5zZXJ0ZWQgaXMgdG9vIGxvbmcsCiAJCSAqIHdoaWNoIGNvdWxkIGNhdXNlIGRhbWFnZSB0byB0aGUgdGFwZSBvciB0aGUgZHJpdmUuCiAJCSAqLwotCQlQUklOVF9XQVJOKCJUYXBlIExlbmd0aCBJbmNvbXBhdGlibGVcbiIpOwotCQlQUklOVF9XQVJOKCJUYXBlIGxlbmd0aCBleGNlZWRzIElCTSBlbmhhbmNlZCBjYXBhY2l0eSAiCi0JCQkiY2FydGRyaWRnZSBsZW5ndGggb3IgYSBtZWRpdW1cbiIpOwotCQlQUklOVF9XQVJOKCJ3aXRoIEVDLUNTVCBpZGVudGlmaWNhdGlvbiBtYXJrIGhhcyBiZWVuIG1vdW50ZWQgIgotCQkJImluIGEgZGV2aWNlIHRoYXQgd3JpdGVzXG4iKTsKLQkJUFJJTlRfV0FSTigiMzQ4MCBvciAzNDgwIFhGIGZvcm1hdC5cbiIpOworCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiVGhlIHRhcGUgdW5pdCBkb2VzIG5vdCBzdXBwb3J0ICIKKwkJCSJ0aGUgdGFwZSBsZW5ndGhcbiIpOwogCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9mYWlsZWQocmVxdWVzdCwgLUVJTyk7CiAJY2FzZSAweDViOgogCQkvKiBGb3JtYXQgMzQ4MCBYRiBpbmNvbXBhdGlibGUgKi8KIAkJaWYgKHNlbnNlWzFdICYgU0VOU0VfQkVHSU5OSU5HX09GX1RBUEUpCiAJCQkvKiBUaGUgdGFwZSB3aWxsIGdldCBvdmVyd3JpdHRlbi4gKi8KIAkJCXJldHVybiB0YXBlXzM0eHhfZXJwX3JldHJ5KHJlcXVlc3QpOwotCQlQUklOVF9XQVJOKCJGb3JtYXQgMzQ4MCBYRiBJbmNvbXBhdGlibGVcbiIpOwotCQlQUklOVF9XQVJOKCJNZWRpdW0gaGFzIGJlZW4gY3JlYXRlZCBpbiAzNDgwIGZvcm1hdC4gIgotCQkJIlRvIGNoYW5nZSB0aGUgZm9ybWF0IHdyaXRlc1xuIik7Ci0JCVBSSU5UX1dBUk4oIm11c3QgYmUgaXNzdWVkIGF0IEJPVC5cbiIpOworCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiVGhlIHRhcGUgdW5pdCBkb2VzIG5vdCBzdXBwb3J0IgorCQkJIiBmb3JtYXQgMzQ4MCBYRlxuIik7CiAJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAtRUlPKTsKIAljYXNlIDB4NWM6CiAJCS8qIEZvcm1hdCAzNDgwLTIgWEYgaW5jb21wYXRpYmxlICovCi0JCVBSSU5UX1dBUk4oIkZvcm1hdCAzNDgwLTIgWEYgSW5jb21wYXRpYmxlXG4iKTsKLQkJUFJJTlRfV0FSTigiRGV2aWNlIGNhbiBvbmx5IHJlYWQgMzQ4MCBvciAzNDgwIFhGIGZvcm1hdC5cbiIpOworCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiVGhlIHRhcGUgdW5pdCBkb2VzIG5vdCBzdXBwb3J0IHRhcGUgIgorCQkJImZvcm1hdCAzNDgwLTIgWEZcbiIpOwogCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9mYWlsZWQocmVxdWVzdCwgLUVJTyk7CiAJY2FzZSAweDVkOgogCQkvKiBUYXBlIGxlbmd0aCB2aW9sYXRpb24uICovCi0JCVBSSU5UX1dBUk4oIlRhcGUgTGVuZ3RoIFZpb2xhdGlvblxuIik7Ci0JCVBSSU5UX1dBUk4oIlRoZSBtb3VudGVkIHRhcGUgZXhjZWVkcyBJQk0gRW5oYW5jZWQgQ2FwYWNpdHkgIgotCQkJIkNhcnRkcmlkZ2UgU3lzdGVtIFRhcGUgbGVuZ3RoLlxuIik7Ci0JCVBSSU5UX1dBUk4oIlRoaXMgbWF5IGNhdXNlIGRhbWFnZSB0byB0aGUgZHJpdmUgb3IgdGFwZSB3aGVuICIKLQkJCSJwcm9jZXNzaW5nIHRvIHRoZSBFT1ZcbiIpOworCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiVGhlIHRhcGUgdW5pdCBkb2VzIG5vdCBzdXBwb3J0IgorCQkJIiB0aGUgY3VycmVudCB0YXBlIGxlbmd0aFxuIik7CiAJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAtRU1FRElVTVRZUEUpOwogCWNhc2UgMHg1ZToKIAkJLyogQ29tcGFjdGlvbiBhbGdvcml0aG0gaW5jb21wYXRpYmxlLiAqLwotCQlQUklOVF9XQVJOKCJDb21wYWN0aW9uIEFsZ29yaXRobSBJbmNvbXBhdGlibGVcbiIpOwotCQlQUklOVF9XQVJOKCJUaGUgdm9sdW1lIGlzIHJlY29yZGVkIHVzaW5nIGFuIGluY29tcGF0aWJsZSAiCi0JCQkiY29tcGFjdGlvbiBhbGdvcml0aG0sXG4iKTsKLQkJUFJJTlRfV0FSTigid2hpY2ggaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgZGV2aWNlLlxuIik7CisJCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJUaGUgdGFwZSB1bml0IGRvZXMgbm90IHN1cHBvcnQiCisJCQkiIHRoZSBjb21wYWN0aW9uIGFsZ29yaXRobVxuIik7CiAJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAtRU1FRElVTVRZUEUpOwogCiAJCS8qIFRoZSBmb2xsb3dpbmcgZXJwYXMgc2hvdWxkIGhhdmUgYmVlbiBjb3ZlcmVkIGVhcmxpZXIuICovCkBAIC04NDgsNyArODMwLDYgQEAKIAkgICAgKGlyYi0+c2Nzdy5jbWQuZHN0YXQgJiBERVZfU1RBVF9ERVZfRU5EKSAmJgogCSAgICAocmVxdWVzdC0+b3AgPT0gVE9fV1JJKSkgewogCQkvKiBXcml0ZSBhdCBlbmQgb2Ygdm9sdW1lICovCi0JCVBSSU5UX0lORk8oIkVuZCBvZiB2b2x1bWVcbiIpOyAvKiBYWFggKi8KIAkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FTk9TUEMpOwogCX0KIApAQCAtODY5LDkgKzg1MCw3IEBACiAJfQogCiAJREJGX0VWRU5UKDYsICJ4dW5rbm93bmlycVxuIik7Ci0JUFJJTlRfRVJSKCJVbmV4cGVjdGVkIGludGVycnVwdC5cbiIpOwotCVBSSU5UX0VSUigiQ3VycmVudCBvcCBpczogJXMiLCB0YXBlX29wX3ZlcmJvc2VbcmVxdWVzdC0+b3BdKTsKLQl0YXBlX2R1bXBfc2Vuc2UoZGV2aWNlLCByZXF1ZXN0LCBpcmIpOworCXRhcGVfZHVtcF9zZW5zZV9kYmYoZGV2aWNlLCByZXF1ZXN0LCBpcmIpOwogCXJldHVybiBUQVBFX0lPX1NUT1A7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfMzU5MC5jIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV8zNTkwLmMKaW5kZXggNzE2MDVhMS4uZmMxZDkxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV8zNTkwLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV8zNTkwLmMKQEAgLTgsMTIgKzgsMTUgQEAKICAqCQkgTWFydGluIFNjaHdpZGVmc2t5IDxzY2h3aWRlZnNreUBkZS5pYm0uY29tPgogICovCiAKKyNkZWZpbmUgS01TR19DT01QT05FTlQgInRhcGUiCisKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvYmlvLmg+CiAjaW5jbHVkZSA8YXNtL2ViY2RpYy5oPgogCiAjZGVmaW5lIFRBUEVfREJGX0FSRUEJdGFwZV8zNTkwX2RiZgorI2RlZmluZSBCVUZTSVpFIDUxMgkvKiBzaXplIG9mIGJ1ZmZlcnMgZm9yIGR5bmFtaWMgZ2VuZXJhdGVkIG1lc3NhZ2VzICovCiAKICNpbmNsdWRlICJ0YXBlLmgiCiAjaW5jbHVkZSAidGFwZV9zdGQuaCIKQEAgLTM2LDcgKzM5LDcgQEAKICAqIC0gUmVhZCBBbHRlcm5hdGU6CQkgaW1wbGVtZW50ZWQKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jZGVmaW5lIFBSSU5US19IRUFERVIgIlRBUEVfMzU5MDogIgorI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAidGFwZSIKIAogc3RhdGljIGNvbnN0IGNoYXIgKnRhcGVfMzU5MF9tc2dbVEFQRV8zNTkwX01BWF9NU0ddID0gewogCVsweDAwXSA9ICIiLApAQCAtNjYxLDggKzY2NCw3IEBACiAJCQljY3crKzsKIAkJCWRzdCArPSBUQVBFQkxPQ0tfSFNFQ19TSVpFOwogCQl9Ci0JCWlmIChvZmYgPiBidi0+YnZfbGVuKQotCQkJQlVHKCk7CisJCUJVR19PTihvZmYgPiBidi0+YnZfbGVuKTsKIAl9CiAJY2N3ID0gdGFwZV9jY3dfZW5kKGNjdywgTk9QLCAwLCBOVUxMKTsKIAlEQkZfRVZFTlQoNiwgInhCUkVEY2N3Z1xuIik7CkBAIC03MjYsNyArNzI4LDcgQEAKIAl9CiAJY19pbmZvLT5tZWRpdW1fc3RhdHVzIHw9IFRBUEUzOTBfTUVESVVNX0xPQURFRF9NQVNLOwogCWlmIChzZW5zZS0+ZmxhZ3MgJiBNU0VOU0VfQ1JZUFRfTUFTSykgewotCQlQUklOVF9JTkZPKCJNZWRpdW0gaXMgZW5jcnlwdGVkICglMDR4KVxuIiwgc2Vuc2UtPmZsYWdzKTsKKwkJREJGX0VWRU5UKDYsICJNZWRpdW0gaXMgZW5jcnlwdGVkICglMDR4KVxuIiwgc2Vuc2UtPmZsYWdzKTsKIAkJY19pbmZvLT5tZWRpdW1fc3RhdHVzIHw9IFRBUEUzOTBfTUVESVVNX0VOQ1JZUFRFRF9NQVNLOwogCX0gZWxzZQl7CiAJCURCRl9FVkVOVCg2LCAiTWVkaXVtIGlzIG5vdCBlbmNyeXB0ZWQgJTA0eFxuIiwgc2Vuc2UtPmZsYWdzKTsKQEAgLTg0Nyw4ICs4NDksNyBAQAogCQl0YXBlXzM1OTBfc2NoZWR1bGVfd29yayhkZXZpY2UsIFRPX1JFQURfQVRUTVNHKTsKIAl9IGVsc2UgewogCQlEQkZfRVZFTlQoMywgInVuc29sLmlycSEgZGV2IGVuZDogJTA4eFxuIiwgZGV2aWNlLT5jZGV2X2lkKTsKLQkJUFJJTlRfV0FSTigiVW5zb2xpY2l0ZWQgSVJRIChEZXZpY2UgRW5kKSBjYXVnaHQuXG4iKTsKLQkJdGFwZV9kdW1wX3NlbnNlKGRldmljZSwgTlVMTCwgaXJiKTsKKwkJdGFwZV9kdW1wX3NlbnNlX2RiZihkZXZpY2UsIE5VTEwsIGlyYik7CiAJfQogCS8qIGNoZWNrIG1lZGl1bSBzdGF0ZSAqLwogCXRhcGVfMzU5MF9zY2hlZHVsZV93b3JrKGRldmljZSwgVE9fTVNFTik7CkBAIC04NzYsOCArODc3LDYgQEAKIAljYXNlIFNFTlNFX0JSQV9EUkU6CiAJCXJldHVybiB0YXBlXzM1OTBfZXJwX2ZhaWxlZChkZXZpY2UsIHJlcXVlc3QsIGlyYiwgcmMpOwogCWRlZmF1bHQ6Ci0JCVBSSU5UX0VSUigiVW5rbm93biBCUkEgJXggLSBUaGlzIHNob3VsZCBub3QgaGFwcGVuIVxuIiwKLQkJCSAgc2Vuc2UtPmJyYSk7CiAJCUJVRygpOwogCQlyZXR1cm4gVEFQRV9JT19TVE9QOwogCX0KQEAgLTkxMCw3ICs5MDksOCBAQAogCSAqIHNob3VsZCBwcm9jZWVkIHdpdGggdGhlIG5ldyB0YXBlLi4uIHRoaXMKIAkgKiBzaG91bGQgcHJvYmFibHkgYmUgZG9uZSBpbiB1c2VyIHNwYWNlIQogCSAqLwotCVBSSU5UX1dBUk4oIiglcyk6IFN3YXAgVGFwZSBEZXZpY2UhXG4iLCBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKKwlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiVGhlIHRhcGUgbWVkaXVtIG11c3QgYmUgbG9hZGVkIGludG8gYSAiCisJCSJkaWZmZXJlbnQgdGFwZSB1bml0XG4iKTsKIAlyZXR1cm4gdGFwZV8zNTkwX2VycF9iYXNpYyhkZXZpY2UsIHJlcXVlc3QsIGlyYiwgLUVJTyk7CiB9CiAKQEAgLTk4NSw4ICs5ODUsNiBAQAogCQlyZXR1cm4gdGFwZV8zNTkwX2VycF9mYWlsZWQoZGV2aWNlLCByZXF1ZXN0LCBpcmIsIC1FSU8pOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlQUklOVF9XQVJOKCJyZWFkX29wcG9zaXRlX3JlY292ZXJ5X2NhbGxlZF93aXRoX29wOiAlc1xuIiwKLQkJCSAgIHRhcGVfb3BfdmVyYm9zZVtyZXF1ZXN0LT5vcF0pOwogCQlyZXR1cm4gdGFwZV8zNTkwX2VycF9mYWlsZWQoZGV2aWNlLCByZXF1ZXN0LCBpcmIsIC1FSU8pOwogCX0KIH0KQEAgLTk5OCw1MCArOTk2LDYxIEBACiB0YXBlXzM1OTBfcHJpbnRfbWltX21zZ19mMChzdHJ1Y3QgdGFwZV9kZXZpY2UgKmRldmljZSwgc3RydWN0IGlyYiAqaXJiKQogewogCXN0cnVjdCB0YXBlXzM1OTBfc2Vuc2UgKnNlbnNlOworCWNoYXIgKmV4Y2VwdGlvbiwgKnNlcnZpY2U7CisKKwlleGNlcHRpb24gPSBrbWFsbG9jKEJVRlNJWkUsIEdGUF9BVE9NSUMpOworCXNlcnZpY2UgPSBrbWFsbG9jKEJVRlNJWkUsIEdGUF9BVE9NSUMpOworCisJaWYgKCFleGNlcHRpb24gfHwgIXNlcnZpY2UpCisJCWdvdG8gb3V0X25vbWVtOwogCiAJc2Vuc2UgPSAoc3RydWN0IHRhcGVfMzU5MF9zZW5zZSAqKSBpcmItPmVjdzsKIAkvKiBFeGNlcHRpb24gTWVzc2FnZSAqLwogCXN3aXRjaCAoc2Vuc2UtPmZtdC5mNzAuZW1jKSB7CiAJY2FzZSAweDAyOgotCQlQUklOVF9XQVJOKCIoJXMpOiBEYXRhIGRlZ3JhZGVkXG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CisJCXNucHJpbnRmKGV4Y2VwdGlvbiwgQlVGU0laRSwgIkRhdGEgZGVncmFkZWQiKTsKIAkJYnJlYWs7CiAJY2FzZSAweDAzOgotCQlQUklOVF9XQVJOKCIoJXMpOiBEYXRhIGRlZ3JhZGVkIGluIHBhcnRpb24gJWlcbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLCBzZW5zZS0+Zm10LmY3MC5tcCk7CisJCXNucHJpbnRmKGV4Y2VwdGlvbiwgQlVGU0laRSwgIkRhdGEgZGVncmFkZWQgaW4gcGFydGlvbiAlaSIsCisJCQlzZW5zZS0+Zm10LmY3MC5tcCk7CiAJCWJyZWFrOwogCWNhc2UgMHgwNDoKLQkJUFJJTlRfV0FSTigiKCVzKTogTWVkaXVtIGRlZ3JhZGVkXG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CisJCXNucHJpbnRmKGV4Y2VwdGlvbiwgQlVGU0laRSwgIk1lZGl1bSBkZWdyYWRlZCIpOwogCQlicmVhazsKIAljYXNlIDB4MDU6Ci0JCVBSSU5UX1dBUk4oIiglcyk6IE1lZGl1bSBkZWdyYWRlZCBpbiBwYXJ0aXRpb24gJWlcbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLCBzZW5zZS0+Zm10LmY3MC5tcCk7CisJCXNucHJpbnRmKGV4Y2VwdGlvbiwgQlVGU0laRSwgIk1lZGl1bSBkZWdyYWRlZCBpbiBwYXJ0aXRpb24gJWkiLAorCQkJc2Vuc2UtPmZtdC5mNzAubXApOwogCQlicmVhazsKIAljYXNlIDB4MDY6Ci0JCVBSSU5UX1dBUk4oIiglcyk6IEJsb2NrIDAgRXJyb3JcbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKKwkJc25wcmludGYoZXhjZXB0aW9uLCBCVUZTSVpFLCAiQmxvY2sgMCBFcnJvciIpOwogCQlicmVhazsKIAljYXNlIDB4MDc6Ci0JCVBSSU5UX1dBUk4oIiglcyk6IE1lZGl1bSBFeGNlcHRpb24gMHglMDJ4XG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwgc2Vuc2UtPmZtdC5mNzAubWQpOworCQlzbnByaW50ZihleGNlcHRpb24sIEJVRlNJWkUsICJNZWRpdW0gRXhjZXB0aW9uIDB4JTAyeCIsCisJCQlzZW5zZS0+Zm10LmY3MC5tZCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCVBSSU5UX1dBUk4oIiglcyk6IE1JTSBFeE1zZzogMHglMDJ4XG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwgc2Vuc2UtPmZtdC5mNzAuZW1jKTsKKwkJc25wcmludGYoZXhjZXB0aW9uLCBCVUZTSVpFLCAiMHglMDJ4IiwKKwkJCXNlbnNlLT5mbXQuZjcwLmVtYyk7CiAJCWJyZWFrOwogCX0KIAkvKiBTZXJ2aWNlIE1lc3NhZ2UgKi8KIAlzd2l0Y2ggKHNlbnNlLT5mbXQuZjcwLnNtYykgewogCWNhc2UgMHgwMjoKLQkJUFJJTlRfV0FSTigiKCVzKTogUmVmZXJlbmNlIE1lZGlhIG1haW50ZW5hbmNlIHByb2NlZHVyZSAlaVxuIiwKLQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksIHNlbnNlLT5mbXQuZjcwLm1kKTsKKwkJc25wcmludGYoc2VydmljZSwgQlVGU0laRSwgIlJlZmVyZW5jZSBNZWRpYSBtYWludGVuYW5jZSAiCisJCQkicHJvY2VkdXJlICVpIiwgc2Vuc2UtPmZtdC5mNzAubWQpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlQUklOVF9XQVJOKCIoJXMpOiBNSU0gU2VydmljZU1zZzogMHglMDJ4XG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwgc2Vuc2UtPmZtdC5mNzAuc21jKTsKKwkJc25wcmludGYoc2VydmljZSwgQlVGU0laRSwgIjB4JTAyeCIsCisJCQlzZW5zZS0+Zm10LmY3MC5zbWMpOwogCQlicmVhazsKIAl9CisKKwlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiVGFwZSBtZWRpYSBpbmZvcm1hdGlvbjogZXhjZXB0aW9uICVzLCAiCisJCSJzZXJ2aWNlICVzXG4iLCBleGNlcHRpb24sIHNlcnZpY2UpOworCitvdXRfbm9tZW06CisJa2ZyZWUoZXhjZXB0aW9uKTsKKwlrZnJlZShzZXJ2aWNlKTsKIH0KIAogLyoKQEAgLTEwNTEsMTA4ICsxMDYwLDEwOCBAQAogdGFwZV8zNTkwX3ByaW50X2lvX3NpbV9tc2dfZjEoc3RydWN0IHRhcGVfZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBpcmIgKmlyYikKIHsKIAlzdHJ1Y3QgdGFwZV8zNTkwX3NlbnNlICpzZW5zZTsKKwljaGFyICpleGNlcHRpb24sICpzZXJ2aWNlOworCisJZXhjZXB0aW9uID0ga21hbGxvYyhCVUZTSVpFLCBHRlBfQVRPTUlDKTsKKwlzZXJ2aWNlID0ga21hbGxvYyhCVUZTSVpFLCBHRlBfQVRPTUlDKTsKKworCWlmICghZXhjZXB0aW9uIHx8ICFzZXJ2aWNlKQorCQlnb3RvIG91dF9ub21lbTsKIAogCXNlbnNlID0gKHN0cnVjdCB0YXBlXzM1OTBfc2Vuc2UgKikgaXJiLT5lY3c7CiAJLyogRXhjZXB0aW9uIE1lc3NhZ2UgKi8KIAlzd2l0Y2ggKHNlbnNlLT5mbXQuZjcxLmVtYykgewogCWNhc2UgMHgwMToKLQkJUFJJTlRfV0FSTigiKCVzKTogRWZmZWN0IG9mIGZhaWx1cmUgaXMgdW5rbm93blxuIiwKLQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOworCQlzbnByaW50ZihleGNlcHRpb24sIEJVRlNJWkUsICJFZmZlY3Qgb2YgZmFpbHVyZSBpcyB1bmtub3duIik7CiAJCWJyZWFrOwogCWNhc2UgMHgwMjoKLQkJUFJJTlRfV0FSTigiKCVzKTogQ1UgRXhjZXB0aW9uIC0gbm8gcGVyZm9ybWFuY2UgaW1wYWN0XG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CisJCXNucHJpbnRmKGV4Y2VwdGlvbiwgQlVGU0laRSwgIkNVIEV4Y2VwdGlvbiAtIG5vIHBlcmZvcm1hbmNlICIKKwkJCSJpbXBhY3QiKTsKIAkJYnJlYWs7CiAJY2FzZSAweDAzOgotCQlQUklOVF9XQVJOKCIoJXMpOiBDVSBFeGNlcHRpb24gb24gY2hhbm5lbCBpbnRlcmZhY2UgMHglMDJ4XG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwgc2Vuc2UtPmZtdC5mNzEubWRbMF0pOworCQlzbnByaW50ZihleGNlcHRpb24sIEJVRlNJWkUsICJDVSBFeGNlcHRpb24gb24gY2hhbm5lbCAiCisJCQkiaW50ZXJmYWNlIDB4JTAyeCIsIHNlbnNlLT5mbXQuZjcxLm1kWzBdKTsKIAkJYnJlYWs7CiAJY2FzZSAweDA0OgotCQlQUklOVF9XQVJOKCIoJXMpOiBDVSBFeGNlcHRpb24gb24gZGV2aWNlIHBhdGggMHglMDJ4XG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwgc2Vuc2UtPmZtdC5mNzEubWRbMF0pOworCQlzbnByaW50ZihleGNlcHRpb24sIEJVRlNJWkUsICJDVSBFeGNlcHRpb24gb24gZGV2aWNlIHBhdGggIgorCQkJIjB4JTAyeCIsIHNlbnNlLT5mbXQuZjcxLm1kWzBdKTsKIAkJYnJlYWs7CiAJY2FzZSAweDA1OgotCQlQUklOVF9XQVJOKCIoJXMpOiBDVSBFeGNlcHRpb24gb24gbGlicmFyeSBwYXRoIDB4JTAyeFxuIiwKLQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksIHNlbnNlLT5mbXQuZjcxLm1kWzBdKTsKKwkJc25wcmludGYoZXhjZXB0aW9uLCBCVUZTSVpFLCAiQ1UgRXhjZXB0aW9uIG9uIGxpYnJhcnkgcGF0aCAiCisJCQkiMHglMDJ4Iiwgc2Vuc2UtPmZtdC5mNzEubWRbMF0pOwogCQlicmVhazsKIAljYXNlIDB4MDY6Ci0JCVBSSU5UX1dBUk4oIiglcyk6IENVIEV4Y2VwdGlvbiBvbiBub2RlIDB4JTAyeFxuIiwKLQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksIHNlbnNlLT5mbXQuZjcxLm1kWzBdKTsKKwkJc25wcmludGYoZXhjZXB0aW9uLCBCVUZTSVpFLCAiQ1UgRXhjZXB0aW9uIG9uIG5vZGUgMHglMDJ4IiwKKwkJCXNlbnNlLT5mbXQuZjcxLm1kWzBdKTsKIAkJYnJlYWs7CiAJY2FzZSAweDA3OgotCQlQUklOVF9XQVJOKCIoJXMpOiBDVSBFeGNlcHRpb24gb24gcGFydGl0aW9uIDB4JTAyeFxuIiwKLQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksIHNlbnNlLT5mbXQuZjcxLm1kWzBdKTsKKwkJc25wcmludGYoZXhjZXB0aW9uLCBCVUZTSVpFLCAiQ1UgRXhjZXB0aW9uIG9uIHBhcnRpdGlvbiAiCisJCQkiMHglMDJ4Iiwgc2Vuc2UtPmZtdC5mNzEubWRbMF0pOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlQUklOVF9XQVJOKCIoJXMpOiBTSU0gRXhNc2c6IDB4JTAyeFxuIiwKLQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksIHNlbnNlLT5mbXQuZjcxLmVtYyk7CisJCXNucHJpbnRmKGV4Y2VwdGlvbiwgQlVGU0laRSwgIjB4JTAyeCIsCisJCQlzZW5zZS0+Zm10LmY3MS5lbWMpOwogCX0KIAkvKiBTZXJ2aWNlIE1lc3NhZ2UgKi8KIAlzd2l0Y2ggKHNlbnNlLT5mbXQuZjcxLnNtYykgewogCWNhc2UgMHgwMToKLQkJUFJJTlRfV0FSTigiKCVzKTogUmVwYWlyIGltcGFjdCBpcyB1bmtub3duXG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CisJCXNucHJpbnRmKHNlcnZpY2UsIEJVRlNJWkUsICJSZXBhaXIgaW1wYWN0IGlzIHVua25vd24iKTsKIAkJYnJlYWs7CiAJY2FzZSAweDAyOgotCQlQUklOVF9XQVJOKCIoJXMpOiBSZXBhaXIgd2lsbCBub3QgaW1wYWN0IGN1IHBlcmZvcm1hbmNlXG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CisJCXNucHJpbnRmKHNlcnZpY2UsIEJVRlNJWkUsICJSZXBhaXIgd2lsbCBub3QgaW1wYWN0IGN1ICIKKwkJCSJwZXJmb3JtYW5jZSIpOwogCQlicmVhazsKIAljYXNlIDB4MDM6CiAJCWlmIChzZW5zZS0+Zm10LmY3MS5tZGYgPT0gMCkKLQkJCVBSSU5UX1dBUk4oIiglcyk6IFJlcGFpciB3aWxsIGRpc2FibGUgbm9kZSAiCi0JCQkJICAgIjB4JXggb24gQ1VcbiIsCi0JCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwKLQkJCQkgICBzZW5zZS0+Zm10LmY3MS5tZFsxXSk7CisJCQlzbnByaW50ZihzZXJ2aWNlLCBCVUZTSVpFLCAiUmVwYWlyIHdpbGwgZGlzYWJsZSBub2RlICIKKwkJCQkiMHgleCBvbiBDVSIsIHNlbnNlLT5mbXQuZjcxLm1kWzFdKTsKIAkJZWxzZQotCQkJUFJJTlRfV0FSTigiKCVzKTogUmVwYWlyIHdpbGwgZGlzYWJsZSBub2RlcyAiCi0JCQkJICAgIigweCV4LTB4JXgpIG9uIENVXG4iLAotCQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksCi0JCQkJICAgc2Vuc2UtPmZtdC5mNzEubWRbMV0sIHNlbnNlLT5mbXQuZjcxLm1kWzJdKTsKKwkJCXNucHJpbnRmKHNlcnZpY2UsIEJVRlNJWkUsICJSZXBhaXIgd2lsbCBkaXNhYmxlICIKKwkJCQkibm9kZXMgKDB4JXgtMHgleCkgb24gQ1UiLCBzZW5zZS0+Zm10LmY3MS5tZFsxXSwKKwkJCQlzZW5zZS0+Zm10LmY3MS5tZFsyXSk7CiAJCWJyZWFrOwogCWNhc2UgMHgwNDoKIAkJaWYgKHNlbnNlLT5mbXQuZjcxLm1kZiA9PSAwKQotCQkJUFJJTlRfV0FSTigiKCVzKTogUmVwYWlyIHdpbGwgZGlzYWJsZSBjYW5uZWwgcGF0aCAiCi0JCQkJICAgIjB4JXggb24gQ1VcbiIsCi0JCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwKLQkJCQkgICBzZW5zZS0+Zm10LmY3MS5tZFsxXSk7CisJCQlzbnByaW50ZihzZXJ2aWNlLCBCVUZTSVpFLCAiUmVwYWlyIHdpbGwgZGlzYWJsZSAiCisJCQkJImNoYW5uZWwgcGF0aCAweCV4IG9uIENVIiwKKwkJCQlzZW5zZS0+Zm10LmY3MS5tZFsxXSk7CiAJCWVsc2UKLQkJCVBSSU5UX1dBUk4oIiglcyk6IFJlcGFpciB3aWxsIGRpc2FibGUgY2FubmVsIHBhdGhzICIKLQkJCQkgICAiKDB4JXgtMHgleCkgb24gQ1VcbiIsCi0JCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwKLQkJCQkgICBzZW5zZS0+Zm10LmY3MS5tZFsxXSwgc2Vuc2UtPmZtdC5mNzEubWRbMl0pOworCQkJc25wcmludGYoc2VydmljZSwgQlVGU0laRSwgIlJlcGFpciB3aWxsIGRpc2FibGUgY2FubmVsIgorCQkJCSIgcGF0aHMgKDB4JXgtMHgleCkgb24gQ1UiLAorCQkJCXNlbnNlLT5mbXQuZjcxLm1kWzFdLCBzZW5zZS0+Zm10LmY3MS5tZFsyXSk7CiAJCWJyZWFrOwogCWNhc2UgMHgwNToKIAkJaWYgKHNlbnNlLT5mbXQuZjcxLm1kZiA9PSAwKQotCQkJUFJJTlRfV0FSTigiKCVzKTogUmVwYWlyIHdpbGwgZGlzYWJsZSBkZXZpY2UgcGF0aCAiCi0JCQkJICAgIjB4JXggb24gQ1VcbiIsCi0JCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwKLQkJCQkgICBzZW5zZS0+Zm10LmY3MS5tZFsxXSk7CisJCQlzbnByaW50ZihzZXJ2aWNlLCBCVUZTSVpFLCAiUmVwYWlyIHdpbGwgZGlzYWJsZSBkZXZpY2UiCisJCQkJIiBwYXRoIDB4JXggb24gQ1UiLCBzZW5zZS0+Zm10LmY3MS5tZFsxXSk7CiAJCWVsc2UKLQkJCVBSSU5UX1dBUk4oIiglcyk6IFJlcGFpciB3aWxsIGRpc2FibGUgZGV2aWNlIHBhdGhzICIKLQkJCQkgICAiKDB4JXgtMHgleCkgb24gQ1VcbiIsCi0JCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwKLQkJCQkgICBzZW5zZS0+Zm10LmY3MS5tZFsxXSwgc2Vuc2UtPmZtdC5mNzEubWRbMl0pOworCQkJc25wcmludGYoc2VydmljZSwgQlVGU0laRSwgIlJlcGFpciB3aWxsIGRpc2FibGUgZGV2aWNlIgorCQkJCSIgcGF0aHMgKDB4JXgtMHgleCkgb24gQ1UiLAorCQkJCXNlbnNlLT5mbXQuZjcxLm1kWzFdLCBzZW5zZS0+Zm10LmY3MS5tZFsyXSk7CiAJCWJyZWFrOwogCWNhc2UgMHgwNjoKIAkJaWYgKHNlbnNlLT5mbXQuZjcxLm1kZiA9PSAwKQotCQkJUFJJTlRfV0FSTigiKCVzKTogUmVwYWlyIHdpbGwgZGlzYWJsZSBsaWJyYXJ5IHBhdGggIgotCQkJCSAgICIweCV4IG9uIENVXG4iLAotCQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksCi0JCQkJICAgc2Vuc2UtPmZtdC5mNzEubWRbMV0pOworCQkJc25wcmludGYoc2VydmljZSwgQlVGU0laRSwgIlJlcGFpciB3aWxsIGRpc2FibGUgIgorCQkJCSJsaWJyYXJ5IHBhdGggMHgleCBvbiBDVSIsCisJCQkJc2Vuc2UtPmZtdC5mNzEubWRbMV0pOwogCQllbHNlCi0JCQlQUklOVF9XQVJOKCIoJXMpOiBSZXBhaXIgd2lsbCBkaXNhYmxlIGxpYnJhcnkgcGF0aHMgIgotCQkJCSAgICIoMHgleC0weCV4KSBvbiBDVVxuIiwKLQkJCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLAotCQkJCSAgIHNlbnNlLT5mbXQuZjcxLm1kWzFdLCBzZW5zZS0+Zm10LmY3MS5tZFsyXSk7CisJCQlzbnByaW50ZihzZXJ2aWNlLCBCVUZTSVpFLCAiUmVwYWlyIHdpbGwgZGlzYWJsZSAiCisJCQkJImxpYnJhcnkgcGF0aHMgKDB4JXgtMHgleCkgb24gQ1UiLAorCQkJCXNlbnNlLT5mbXQuZjcxLm1kWzFdLCBzZW5zZS0+Zm10LmY3MS5tZFsyXSk7CiAJCWJyZWFrOwogCWNhc2UgMHgwNzoKLQkJUFJJTlRfV0FSTigiKCVzKTogUmVwYWlyIHdpbGwgZGlzYWJsZSBhY2Nlc3MgdG8gQ1VcbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKKwkJc25wcmludGYoc2VydmljZSwgQlVGU0laRSwgIlJlcGFpciB3aWxsIGRpc2FibGUgYWNjZXNzIHRvIENVIik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCVBSSU5UX1dBUk4oIiglcyk6IFNJTSBTZXJ2aWNlTXNnOiAweCUwMnhcbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLCBzZW5zZS0+Zm10LmY3MS5zbWMpOworCQlzbnByaW50ZihzZXJ2aWNlLCBCVUZTSVpFLCAiMHglMDJ4IiwKKwkJCXNlbnNlLT5mbXQuZjcxLnNtYyk7CiAJfQorCisJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIkkvTyBzdWJzeXN0ZW0gaW5mb3JtYXRpb246IGV4Y2VwdGlvbiIKKwkJIiAlcywgc2VydmljZSAlc1xuIiwgZXhjZXB0aW9uLCBzZXJ2aWNlKTsKK291dF9ub21lbToKKwlrZnJlZShleGNlcHRpb24pOworCWtmcmVlKHNlcnZpY2UpOwogfQogCiAvKgpAQCAtMTE2MiwxMTEgKzExNzEsMTA5IEBACiB0YXBlXzM1OTBfcHJpbnRfZGV2X3NpbV9tc2dfZjIoc3RydWN0IHRhcGVfZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBpcmIgKmlyYikKIHsKIAlzdHJ1Y3QgdGFwZV8zNTkwX3NlbnNlICpzZW5zZTsKKwljaGFyICpleGNlcHRpb24sICpzZXJ2aWNlOworCisJZXhjZXB0aW9uID0ga21hbGxvYyhCVUZTSVpFLCBHRlBfQVRPTUlDKTsKKwlzZXJ2aWNlID0ga21hbGxvYyhCVUZTSVpFLCBHRlBfQVRPTUlDKTsKKworCWlmICghZXhjZXB0aW9uIHx8ICFzZXJ2aWNlKQorCQlnb3RvIG91dF9ub21lbTsKIAogCXNlbnNlID0gKHN0cnVjdCB0YXBlXzM1OTBfc2Vuc2UgKikgaXJiLT5lY3c7CiAJLyogRXhjZXB0aW9uIE1lc3NhZ2UgKi8KIAlzd2l0Y2ggKHNlbnNlLT5mbXQuZjcxLmVtYykgewogCWNhc2UgMHgwMToKLQkJUFJJTlRfV0FSTigiKCVzKTogRWZmZWN0IG9mIGZhaWx1cmUgaXMgdW5rbm93blxuIiwKLQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOworCQlzbnByaW50ZihleGNlcHRpb24sIEJVRlNJWkUsICJFZmZlY3Qgb2YgZmFpbHVyZSBpcyB1bmtub3duIik7CiAJCWJyZWFrOwogCWNhc2UgMHgwMjoKLQkJUFJJTlRfV0FSTigiKCVzKTogRFYgRXhjZXB0aW9uIC0gbm8gcGVyZm9ybWFuY2UgaW1wYWN0XG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CisJCXNucHJpbnRmKGV4Y2VwdGlvbiwgQlVGU0laRSwgIkRWIEV4Y2VwdGlvbiAtIG5vIHBlcmZvcm1hbmNlIgorCQkJIiBpbXBhY3QiKTsKIAkJYnJlYWs7CiAJY2FzZSAweDAzOgotCQlQUklOVF9XQVJOKCIoJXMpOiBEViBFeGNlcHRpb24gb24gY2hhbm5lbCBpbnRlcmZhY2UgMHglMDJ4XG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwgc2Vuc2UtPmZtdC5mNzEubWRbMF0pOworCQlzbnByaW50ZihleGNlcHRpb24sIEJVRlNJWkUsICJEViBFeGNlcHRpb24gb24gY2hhbm5lbCAiCisJCQkiaW50ZXJmYWNlIDB4JTAyeCIsIHNlbnNlLT5mbXQuZjcxLm1kWzBdKTsKIAkJYnJlYWs7CiAJY2FzZSAweDA0OgotCQlQUklOVF9XQVJOKCIoJXMpOiBEViBFeGNlcHRpb24gb24gbG9hZGVyIDB4JTAyeFxuIiwKLQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksIHNlbnNlLT5mbXQuZjcxLm1kWzBdKTsKKwkJc25wcmludGYoZXhjZXB0aW9uLCBCVUZTSVpFLCAiRFYgRXhjZXB0aW9uIG9uIGxvYWRlciAweCUwMngiLAorCQkJc2Vuc2UtPmZtdC5mNzEubWRbMF0pOwogCQlicmVhazsKIAljYXNlIDB4MDU6Ci0JCVBSSU5UX1dBUk4oIiglcyk6IERWIEV4Y2VwdGlvbiBvbiBtZXNzYWdlIGRpc3BsYXkgMHglMDJ4XG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwgc2Vuc2UtPmZtdC5mNzEubWRbMF0pOworCQlzbnByaW50ZihleGNlcHRpb24sIEJVRlNJWkUsICJEViBFeGNlcHRpb24gb24gbWVzc2FnZSBkaXNwbGF5IgorCQkJIiAweCUwMngiLCBzZW5zZS0+Zm10LmY3MS5tZFswXSk7CiAJCWJyZWFrOwogCWNhc2UgMHgwNjoKLQkJUFJJTlRfV0FSTigiKCVzKTogRFYgRXhjZXB0aW9uIGluIHRhcGUgcGF0aFxuIiwKLQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOworCQlzbnByaW50ZihleGNlcHRpb24sIEJVRlNJWkUsICJEViBFeGNlcHRpb24gaW4gdGFwZSBwYXRoIik7CiAJCWJyZWFrOwogCWNhc2UgMHgwNzoKLQkJUFJJTlRfV0FSTigiKCVzKTogRFYgRXhjZXB0aW9uIGluIGRyaXZlXG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CisJCXNucHJpbnRmKGV4Y2VwdGlvbiwgQlVGU0laRSwgIkRWIEV4Y2VwdGlvbiBpbiBkcml2ZSIpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlQUklOVF9XQVJOKCIoJXMpOiBEU0lNIEV4TXNnOiAweCUwMnhcbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLCBzZW5zZS0+Zm10LmY3MS5lbWMpOworCQlzbnByaW50ZihleGNlcHRpb24sIEJVRlNJWkUsICIweCUwMngiLAorCQkJc2Vuc2UtPmZtdC5mNzEuZW1jKTsKIAl9CiAJLyogU2VydmljZSBNZXNzYWdlICovCiAJc3dpdGNoIChzZW5zZS0+Zm10LmY3MS5zbWMpIHsKIAljYXNlIDB4MDE6Ci0JCVBSSU5UX1dBUk4oIiglcyk6IFJlcGFpciBpbXBhY3QgaXMgdW5rbm93blxuIiwKLQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOworCQlzbnByaW50ZihzZXJ2aWNlLCBCVUZTSVpFLCAiUmVwYWlyIGltcGFjdCBpcyB1bmtub3duIik7CiAJCWJyZWFrOwogCWNhc2UgMHgwMjoKLQkJUFJJTlRfV0FSTigiKCVzKTogUmVwYWlyIHdpbGwgbm90IGltcGFjdCBkZXZpY2UgcGVyZm9ybWFuY2VcbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKKwkJc25wcmludGYoc2VydmljZSwgQlVGU0laRSwgIlJlcGFpciB3aWxsIG5vdCBpbXBhY3QgZGV2aWNlICIKKwkJCSJwZXJmb3JtYW5jZSIpOwogCQlicmVhazsKIAljYXNlIDB4MDM6CiAJCWlmIChzZW5zZS0+Zm10LmY3MS5tZGYgPT0gMCkKLQkJCVBSSU5UX1dBUk4oIiglcyk6IFJlcGFpciB3aWxsIGRpc2FibGUgY2hhbm5lbCBwYXRoICIKLQkJCQkgICAiMHgleCBvbiBEVlxuIiwKLQkJCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLAotCQkJCSAgIHNlbnNlLT5mbXQuZjcxLm1kWzFdKTsKKwkJCXNucHJpbnRmKHNlcnZpY2UsIEJVRlNJWkUsICJSZXBhaXIgd2lsbCBkaXNhYmxlICIKKwkJCQkiY2hhbm5lbCBwYXRoIDB4JXggb24gRFYiLAorCQkJCXNlbnNlLT5mbXQuZjcxLm1kWzFdKTsKIAkJZWxzZQotCQkJUFJJTlRfV0FSTigiKCVzKTogUmVwYWlyIHdpbGwgZGlzYWJsZSBjaGFubmVsIHBhdGggIgotCQkJCSAgICIoMHgleC0weCV4KSBvbiBEVlxuIiwKLQkJCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLAotCQkJCSAgIHNlbnNlLT5mbXQuZjcxLm1kWzFdLCBzZW5zZS0+Zm10LmY3MS5tZFsyXSk7CisJCQlzbnByaW50ZihzZXJ2aWNlLCBCVUZTSVpFLCAiUmVwYWlyIHdpbGwgZGlzYWJsZSAiCisJCQkJImNoYW5uZWwgcGF0aCAoMHgleC0weCV4KSBvbiBEViIsCisJCQkJc2Vuc2UtPmZtdC5mNzEubWRbMV0sIHNlbnNlLT5mbXQuZjcxLm1kWzJdKTsKIAkJYnJlYWs7CiAJY2FzZSAweDA0OgogCQlpZiAoc2Vuc2UtPmZtdC5mNzEubWRmID09IDApCi0JCQlQUklOVF9XQVJOKCIoJXMpOiBSZXBhaXIgd2lsbCBkaXNhYmxlIGludGVyZmFjZSAweCV4ICIKLQkJCQkgICAib24gRFZcbiIsCi0JCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwKLQkJCQkgICBzZW5zZS0+Zm10LmY3MS5tZFsxXSk7CisJCQlzbnByaW50ZihzZXJ2aWNlLCBCVUZTSVpFLCAiUmVwYWlyIHdpbGwgZGlzYWJsZSAiCisJCQkJImludGVyZmFjZSAweCV4IG9uIERWIiwgc2Vuc2UtPmZtdC5mNzEubWRbMV0pOwogCQllbHNlCi0JCQlQUklOVF9XQVJOKCIoJXMpOiBSZXBhaXIgd2lsbCBkaXNhYmxlIGludGVyZmFjZXMgIgotCQkJCSAgICIoMHgleC0weCV4KSBvbiBEVlxuIiwKLQkJCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLAotCQkJCSAgIHNlbnNlLT5mbXQuZjcxLm1kWzFdLCBzZW5zZS0+Zm10LmY3MS5tZFsyXSk7CisJCQlzbnByaW50ZihzZXJ2aWNlLCBCVUZTSVpFLCAiUmVwYWlyIHdpbGwgZGlzYWJsZSAiCisJCQkJImludGVyZmFjZXMgKDB4JXgtMHgleCkgb24gRFYiLAorCQkJCXNlbnNlLT5mbXQuZjcxLm1kWzFdLCBzZW5zZS0+Zm10LmY3MS5tZFsyXSk7CiAJCWJyZWFrOwogCWNhc2UgMHgwNToKIAkJaWYgKHNlbnNlLT5mbXQuZjcxLm1kZiA9PSAwKQotCQkJUFJJTlRfV0FSTigiKCVzKTogUmVwYWlyIHdpbGwgZGlzYWJsZSBsb2FkZXIgMHgleCAiCi0JCQkJICAgIm9uIERWXG4iLAotCQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksCi0JCQkJICAgc2Vuc2UtPmZtdC5mNzEubWRbMV0pOworCQkJc25wcmludGYoc2VydmljZSwgQlVGU0laRSwgIlJlcGFpciB3aWxsIGRpc2FibGUgbG9hZGVyIgorCQkJCSIgMHgleCBvbiBEViIsIHNlbnNlLT5mbXQuZjcxLm1kWzFdKTsKIAkJZWxzZQotCQkJUFJJTlRfV0FSTigiKCVzKTogUmVwYWlyIHdpbGwgZGlzYWJsZSBsb2FkZXIgIgotCQkJCSAgICIoMHgleC0weCV4KSBvbiBEVlxuIiwKLQkJCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLAotCQkJCSAgIHNlbnNlLT5mbXQuZjcxLm1kWzFdLCBzZW5zZS0+Zm10LmY3MS5tZFsyXSk7CisJCQlzbnByaW50ZihzZXJ2aWNlLCBCVUZTSVpFLCAiUmVwYWlyIHdpbGwgZGlzYWJsZSBsb2FkZXIiCisJCQkJIiAoMHgleC0weCV4KSBvbiBEViIsCisJCQkJc2Vuc2UtPmZtdC5mNzEubWRbMV0sIHNlbnNlLT5mbXQuZjcxLm1kWzJdKTsKIAkJYnJlYWs7CiAJY2FzZSAweDA3OgotCQlQUklOVF9XQVJOKCIoJXMpOiBSZXBhaXIgd2lsbCBkaXNhYmxlIGFjY2VzcyB0byBEVlxuIiwKLQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOworCQlzbnByaW50ZihzZXJ2aWNlLCBCVUZTSVpFLCAiUmVwYWlyIHdpbGwgZGlzYWJsZSBhY2Nlc3MgdG8gRFYiKTsKIAkJYnJlYWs7CiAJY2FzZSAweDA4OgogCQlpZiAoc2Vuc2UtPmZtdC5mNzEubWRmID09IDApCi0JCQlQUklOVF9XQVJOKCIoJXMpOiBSZXBhaXIgd2lsbCBkaXNhYmxlIG1lc3NhZ2UgIgotCQkJCSAgICJkaXNwbGF5IDB4JXggb24gRFZcbiIsCi0JCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwKLQkJCQkgICBzZW5zZS0+Zm10LmY3MS5tZFsxXSk7CisJCQlzbnByaW50ZihzZXJ2aWNlLCBCVUZTSVpFLCAiUmVwYWlyIHdpbGwgZGlzYWJsZSAiCisJCQkJIm1lc3NhZ2UgZGlzcGxheSAweCV4IG9uIERWIiwKKwkJCQlzZW5zZS0+Zm10LmY3MS5tZFsxXSk7CiAJCWVsc2UKLQkJCVBSSU5UX1dBUk4oIiglcyk6IFJlcGFpciB3aWxsIGRpc2FibGUgbWVzc2FnZSAiCi0JCQkJICAgImRpc3BsYXlzICgweCV4LTB4JXgpIG9uIERWXG4iLAotCQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksCi0JCQkJICAgc2Vuc2UtPmZtdC5mNzEubWRbMV0sIHNlbnNlLT5mbXQuZjcxLm1kWzJdKTsKKwkJCXNucHJpbnRmKHNlcnZpY2UsIEJVRlNJWkUsICJSZXBhaXIgd2lsbCBkaXNhYmxlICIKKwkJCQkibWVzc2FnZSBkaXNwbGF5cyAoMHgleC0weCV4KSBvbiBEViIsCisJCQkJIHNlbnNlLT5mbXQuZjcxLm1kWzFdLCBzZW5zZS0+Zm10LmY3MS5tZFsyXSk7CiAJCWJyZWFrOwogCWNhc2UgMHgwOToKLQkJUFJJTlRfV0FSTigiKCVzKTogQ2xlYW4gRFZcbiIsIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOworCQlzbnByaW50ZihzZXJ2aWNlLCBCVUZTSVpFLCAiQ2xlYW4gRFYiKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJUFJJTlRfV0FSTigiKCVzKTogRFNJTSBTZXJ2aWNlTXNnOiAweCUwMnhcbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLCBzZW5zZS0+Zm10LmY3MS5zbWMpOworCQlzbnByaW50ZihzZXJ2aWNlLCBCVUZTSVpFLCAiMHglMDJ4IiwKKwkJCXNlbnNlLT5mbXQuZjcxLnNtYyk7CiAJfQorCisJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIkRldmljZSBzdWJzeXN0ZW0gaW5mb3JtYXRpb246IGV4Y2VwdGlvbiIKKwkJIiAlcywgc2VydmljZSAlc1xuIiwgZXhjZXB0aW9uLCBzZXJ2aWNlKTsKK291dF9ub21lbToKKwlrZnJlZShleGNlcHRpb24pOworCWtmcmVlKHNlcnZpY2UpOwogfQogCiAvKgpAQCAtMTI4Miw0NiArMTI4OSw0NCBAQAogCQlyZXR1cm47CiAJaWYgKChzZW5zZS0+bWMgPiAwKSAmJiAoc2Vuc2UtPm1jIDwgVEFQRV8zNTkwX01BWF9NU0cpKSB7CiAJCWlmICh0YXBlXzM1OTBfbXNnW3NlbnNlLT5tY10gIT0gTlVMTCkKLQkJCVBSSU5UX1dBUk4oIiglcyk6ICVzXG4iLCBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLAotCQkJCSAgIHRhcGVfMzU5MF9tc2dbc2Vuc2UtPm1jXSk7Ci0JCWVsc2UgewotCQkJUFJJTlRfV0FSTigiKCVzKTogTWVzc2FnZSBDb2RlIDB4JXhcbiIsCi0JCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwgc2Vuc2UtPm1jKTsKLQkJfQorCQkJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIlRoZSB0YXBlIHVuaXQgaGFzICIKKwkJCQkiaXNzdWVkIHNlbnNlIG1lc3NhZ2UgJXNcbiIsCisJCQkJdGFwZV8zNTkwX21zZ1tzZW5zZS0+bWNdKTsKKwkJZWxzZQorCQkJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIlRoZSB0YXBlIHVuaXQgaGFzICIKKwkJCQkiaXNzdWVkIGFuIHVua25vd24gc2Vuc2UgbWVzc2FnZSBjb2RlIDB4JXhcbiIsCisJCQkJc2Vuc2UtPm1jKTsKIAkJcmV0dXJuOwogCX0KIAlpZiAoc2Vuc2UtPm1jID09IDB4ZjApIHsKIAkJLyogU3RhbmRhcmQgTWVkaWEgSW5mb3JtYXRpb24gTWVzc2FnZSAqLwotCQlQUklOVF9XQVJOKCIoJXMpOiBNSU0gU0VWPSVpLCBNQz0lMDJ4LCBFUz0leC8leCwgIgotCQkJICAgIlJDPSUwMngtJTA0eC0lMDJ4XG4iLCBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLAotCQkJICAgc2Vuc2UtPmZtdC5mNzAuc2V2LCBzZW5zZS0+bWMsCi0JCQkgICBzZW5zZS0+Zm10LmY3MC5lbWMsIHNlbnNlLT5mbXQuZjcwLnNtYywKLQkJCSAgIHNlbnNlLT5mbXQuZjcwLnJlZmNvZGUsIHNlbnNlLT5mbXQuZjcwLm1pZCwKLQkJCSAgIHNlbnNlLT5mbXQuZjcwLmZpZCk7CisJCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJNSU0gU0VWPSVpLCBNQz0lMDJ4LCBFUz0leC8leCwgIgorCQkJIlJDPSUwMngtJTA0eC0lMDJ4XG4iLCBzZW5zZS0+Zm10LmY3MC5zZXYsIHNlbnNlLT5tYywKKwkJCXNlbnNlLT5mbXQuZjcwLmVtYywgc2Vuc2UtPmZtdC5mNzAuc21jLAorCQkJc2Vuc2UtPmZtdC5mNzAucmVmY29kZSwgc2Vuc2UtPmZtdC5mNzAubWlkLAorCQkJc2Vuc2UtPmZtdC5mNzAuZmlkKTsKIAkJdGFwZV8zNTkwX3ByaW50X21pbV9tc2dfZjAoZGV2aWNlLCBpcmIpOwogCQlyZXR1cm47CiAJfQogCWlmIChzZW5zZS0+bWMgPT0gMHhmMSkgewogCQkvKiBTdGFuZGFyZCBJL08gU3Vic3lzdGVtIFNlcnZpY2UgSW5mb3JtYXRpb24gTWVzc2FnZSAqLwotCQlQUklOVF9XQVJOKCIoJXMpOiBJT1NJTSBTRVY9JWksIERFVlRZUEU9MzU5MC8lMDJ4LCAiCi0JCQkgICAiTUM9JTAyeCwgRVM9JXgvJXgsIFJFRj0weCUwNHgtMHglMDR4LTB4JTA0eFxuIiwKLQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksIHNlbnNlLT5mbXQuZjcxLnNldiwKLQkJCSAgIGRldmljZS0+Y2Rldi0+aWQuZGV2X21vZGVsLAotCQkJICAgc2Vuc2UtPm1jLCBzZW5zZS0+Zm10LmY3MS5lbWMsCi0JCQkgICBzZW5zZS0+Zm10LmY3MS5zbWMsIHNlbnNlLT5mbXQuZjcxLnJlZmNvZGUxLAotCQkJICAgc2Vuc2UtPmZtdC5mNzEucmVmY29kZTIsIHNlbnNlLT5mbXQuZjcxLnJlZmNvZGUzKTsKKwkJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIklPU0lNIFNFVj0laSwgREVWVFlQRT0zNTkwLyUwMngsIgorCQkJIiBNQz0lMDJ4LCBFUz0leC8leCwgUkVGPTB4JTA0eC0weCUwNHgtMHglMDR4XG4iLAorCQkJc2Vuc2UtPmZtdC5mNzEuc2V2LCBkZXZpY2UtPmNkZXYtPmlkLmRldl9tb2RlbCwKKwkJCXNlbnNlLT5tYywgc2Vuc2UtPmZtdC5mNzEuZW1jLCBzZW5zZS0+Zm10LmY3MS5zbWMsCisJCQlzZW5zZS0+Zm10LmY3MS5yZWZjb2RlMSwgc2Vuc2UtPmZtdC5mNzEucmVmY29kZTIsCisJCQlzZW5zZS0+Zm10LmY3MS5yZWZjb2RlMyk7CiAJCXRhcGVfMzU5MF9wcmludF9pb19zaW1fbXNnX2YxKGRldmljZSwgaXJiKTsKIAkJcmV0dXJuOwogCX0KIAlpZiAoc2Vuc2UtPm1jID09IDB4ZjIpIHsKIAkJLyogU3RhbmRhcmQgRGV2aWNlIFNlcnZpY2UgSW5mb3JtYXRpb24gTWVzc2FnZSAqLwotCQlQUklOVF9XQVJOKCIoJXMpOiBERVZTSU0gU0VWPSVpLCBERVZUWVBFPTM1OTAvJTAyeCwgIgotCQkJICAgIk1DPSUwMngsIEVTPSV4LyV4LCBSRUY9MHglMDR4LTB4JTA0eC0weCUwNHhcbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLCBzZW5zZS0+Zm10LmY3MS5zZXYsCi0JCQkgICBkZXZpY2UtPmNkZXYtPmlkLmRldl9tb2RlbCwKLQkJCSAgIHNlbnNlLT5tYywgc2Vuc2UtPmZtdC5mNzEuZW1jLAotCQkJICAgc2Vuc2UtPmZtdC5mNzEuc21jLCBzZW5zZS0+Zm10LmY3MS5yZWZjb2RlMSwKLQkJCSAgIHNlbnNlLT5mbXQuZjcxLnJlZmNvZGUyLCBzZW5zZS0+Zm10LmY3MS5yZWZjb2RlMyk7CisJCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJERVZTSU0gU0VWPSVpLCBERVZUWVBFPTM1OTAvJTAyeCIKKwkJCSIsIE1DPSUwMngsIEVTPSV4LyV4LCBSRUY9MHglMDR4LTB4JTA0eC0weCUwNHhcbiIsCisJCQlzZW5zZS0+Zm10LmY3MS5zZXYsIGRldmljZS0+Y2Rldi0+aWQuZGV2X21vZGVsLAorCQkJc2Vuc2UtPm1jLCBzZW5zZS0+Zm10LmY3MS5lbWMsIHNlbnNlLT5mbXQuZjcxLnNtYywKKwkJCXNlbnNlLT5mbXQuZjcxLnJlZmNvZGUxLCBzZW5zZS0+Zm10LmY3MS5yZWZjb2RlMiwKKwkJCXNlbnNlLT5mbXQuZjcxLnJlZmNvZGUzKTsKIAkJdGFwZV8zNTkwX3ByaW50X2Rldl9zaW1fbXNnX2YyKGRldmljZSwgaXJiKTsKIAkJcmV0dXJuOwogCX0KQEAgLTEzMjksOCArMTMzNCw4IEBACiAJCS8qIFN0YW5kYXJkIExpYnJhcnkgU2VydmljZSBJbmZvcm1hdGlvbiBNZXNzYWdlICovCiAJCXJldHVybjsKIAl9Ci0JUFJJTlRfV0FSTigiKCVzKTogRGV2aWNlIE1lc3NhZ2UoJXgpXG4iLAotCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLCBzZW5zZS0+bWMpOworCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJUaGUgdGFwZSB1bml0IGhhcyBpc3N1ZWQgYW4gdW5rbm93biAiCisJCSJzZW5zZSBtZXNzYWdlIGNvZGUgJXhcbiIsIHNlbnNlLT5tYyk7CiB9CiAKIHN0YXRpYyBpbnQgdGFwZV8zNTkwX2NyeXB0X2Vycm9yKHN0cnVjdCB0YXBlX2RldmljZSAqZGV2aWNlLApAQCAtMTM1NSw5ICsxMzYwLDggQEAKIAkJLyogTm8gY29ubmVjdGlvbiB0byBFS00gKi8KIAkJcmV0dXJuIHRhcGVfMzU5MF9lcnBfYmFzaWMoZGV2aWNlLCByZXF1ZXN0LCBpcmIsIC1FTk9UQ09OTik7CiAKLQlQUklOVF9FUlIoIiglcyk6IFVuYWJsZSB0byBnZXQgZW5jcnlwdGlvbiBrZXkgZnJvbSBFS01cbiIsIGJ1c19pZCk7Ci0JUFJJTlRfRVJSKCIoJXMpOiBDVT0lMDJYIERSSVZFPSUwNlggRUtNPSUwMlg6JTA0WFxuIiwgYnVzX2lkLCBjdV9yYywKLQkJZHJ2X3JjLCBla21fcmMxLCBla21fcmMyKTsKKwlkZXZfZXJyICgmZGV2aWNlLT5jZGV2LT5kZXYsICJUaGUgdGFwZSB1bml0IGZhaWxlZCB0byBvYnRhaW4gdGhlICIKKwkJImVuY3J5cHRpb24ga2V5IGZyb20gRUtNXG4iKTsKIAogCXJldHVybiB0YXBlXzM1OTBfZXJwX2Jhc2ljKGRldmljZSwgcmVxdWVzdCwgaXJiLCAtRU5PS0VZKTsKIH0KQEAgLTE0NDMsOCArMTQ0Nyw2IEBACiAJCSAqIHByaW50IGFkZGl0aW9uYWwgbXNnIHNpbmNlIGRlZmF1bHQgbXNnCiAJCSAqICJkZXZpY2UgaW50ZXJ2ZW50aW9uIiBpcyBub3QgdmVyeSBtZWFuaW5nZnVsbAogCQkgKi8KLQkJUFJJTlRfV0FSTigiKCVzKTogVGFwZSBvcGVyYXRpb24gd2hlbiBtZWRpdW0gbm90IGxvYWRlZFxuIiwKLQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOwogCQl0YXBlX21lZF9zdGF0ZV9zZXQoZGV2aWNlLCBNU19VTkxPQURFRCk7CiAJCXRhcGVfMzU5MF9zY2hlZHVsZV93b3JrKGRldmljZSwgVE9fQ1JZUFRfT0ZGKTsKIAkJcmV0dXJuIHRhcGVfMzU5MF9lcnBfYmFzaWMoZGV2aWNlLCByZXF1ZXN0LCBpcmIsIC1FTk9NRURJVU0pOwpAQCAtMTQ5MCwxOSArMTQ5MiwxMyBAQAogCQlyZXR1cm4gdGFwZV8zNTkwX2VycF9iYXNpYyhkZXZpY2UsIHJlcXVlc3QsIGlyYiwgLUVOT01FRElVTSk7CiAKIAljYXNlIDB4NjAyMDoKLQkJUFJJTlRfV0FSTigiKCVzKTogQ2FydHJpZGdlIG9mIHdyb25nIHR5cGUgP1xuIiwKLQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOwogCQlyZXR1cm4gdGFwZV8zNTkwX2VycF9iYXNpYyhkZXZpY2UsIHJlcXVlc3QsIGlyYiwgLUVNRURJVU1UWVBFKTsKIAogCWNhc2UgMHg4MDExOgotCQlQUklOVF9XQVJOKCIoJXMpOiBBbm90aGVyIGhvc3QgaGFzIHJlc2VydmVkIHRoZSB0YXBlIGRldmljZVxuIiwKLQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOwogCQlyZXR1cm4gdGFwZV8zNTkwX2VycF9iYXNpYyhkZXZpY2UsIHJlcXVlc3QsIGlyYiwgLUVQRVJNKTsKIAljYXNlIDB4ODAxMzoKLQkJUFJJTlRfV0FSTigiKCVzKTogQW5vdGhlciBob3N0IGhhcyBwcml2aWxlZ2VkIGFjY2VzcyB0byB0aGUgIgotCQkJICAgInRhcGUgZGV2aWNlXG4iLCBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKLQkJUFJJTlRfV0FSTigiKCVzKTogVG8gc29sdmUgdGhlIHByb2JsZW0gdW5sb2FkIHRoZSBjdXJyZW50ICIKLQkJCSAgICJjYXJ0cmlkZ2UhXG4iLCBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKKwkJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIkEgZGlmZmVyZW50IGhvc3QgaGFzIHByaXZpbGVnZWQiCisJCQkiIGFjY2VzcyB0byB0aGUgdGFwZSB1bml0XG4iKTsKIAkJcmV0dXJuIHRhcGVfMzU5MF9lcnBfYmFzaWMoZGV2aWNlLCByZXF1ZXN0LCBpcmIsIC1FUEVSTSk7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIHRhcGVfMzU5MF9lcnBfYmFzaWMoZGV2aWNlLCByZXF1ZXN0LCBpcmIsIC1FSU8pOwpAQCAtMTU1Miw5ICsxNTQ4LDcgQEAKIAl9CiAKIAlEQkZfRVZFTlQoNiwgInh1bmtub3duaXJxXG4iKTsKLQlQUklOVF9FUlIoIlVuZXhwZWN0ZWQgaW50ZXJydXB0LlxuIik7Ci0JUFJJTlRfRVJSKCJDdXJyZW50IG9wIGlzOiAlcyIsIHRhcGVfb3BfdmVyYm9zZVtyZXF1ZXN0LT5vcF0pOwotCXRhcGVfZHVtcF9zZW5zZShkZXZpY2UsIHJlcXVlc3QsIGlyYik7CisJdGFwZV9kdW1wX3NlbnNlX2RiZihkZXZpY2UsIHJlcXVlc3QsIGlyYik7CiAJcmV0dXJuIFRBUEVfSU9fU1RPUDsKIH0KIApAQCAtMTYwOSw3ICsxNjAzLDYgQEAKIAlpZiAocmMpCiAJCWdvdG8gZmFpbF9yZGNfZGF0YTsKIAlpZiAocmRjX2RhdGEtPmRhdGFbMzFdID09IDB4MTMpIHsKLQkJUFJJTlRfSU5GTygiRGV2aWNlIGhhcyBjcnlwdG8gc3VwcG9ydFxuIik7CiAJCWRhdGEtPmNyeXB0X2luZm8uY2FwYWJpbGl0eSB8PSBUQVBFMzkwX0NSWVBUX1NVUFBPUlRFRF9NQVNLOwogCQl0YXBlXzM1OTJfZGlzYWJsZV9jcnlwdChkZXZpY2UpOwogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2Jsb2NrLmMgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2Jsb2NrLmMKaW5kZXggYWUxOGJhZi4uZjMyZTg5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9ibG9jay5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfYmxvY2suYwpAQCAtMTAsNiArMTAsOCBAQAogICoJCSBTdGVmYW4gQmFkZXIgPHNoYmFkZXJAZGUuaWJtLmNvbT4KICAqLwogCisjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJ0YXBlIgorCiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KQEAgLTIzLDggKzI1LDYgQEAKIAogI2luY2x1ZGUgInRhcGUuaCIKIAotI2RlZmluZSBQUklOVEtfSEVBREVSICJUQVBFX0JMT0NLOiAiCi0KICNkZWZpbmUgVEFQRUJMT0NLX01BWF9TRUMJMTAwCiAjZGVmaW5lIFRBUEVCTE9DS19NSU5fUkVRVUVVRQkzCiAKQEAgLTI3OSw4ICsyNzksNiBAQAogCXRhcGVfcHV0X2RldmljZShkZXZpY2UpOwogCiAJaWYgKCFkZXZpY2UtPmJsa19kYXRhLmRpc2spIHsKLQkJUFJJTlRfRVJSKCIoJXMpOiBObyBnZW5kaXNrIHRvIGNsZWFuIHVwIVxuIiwKLQkJCWRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOwogCQlnb3RvIGNsZWFudXBfcXVldWU7CiAJfQogCkBAIC0zMTQsNyArMzEyLDggQEAKIAlpZiAoIWRldmljZS0+YmxrX2RhdGEubWVkaXVtX2NoYW5nZWQpCiAJCXJldHVybiAwOwogCi0JUFJJTlRfSU5GTygiRGV0ZWN0aW5nIG1lZGlhIHNpemUuLi5cbiIpOworCWRldl9pbmZvKCZkZXZpY2UtPmNkZXYtPmRldiwgIkRldGVybWluaW5nIHRoZSBzaXplIG9mIHRoZSByZWNvcmRlZCAiCisJCSJhcmVhLi4uXG4iKTsKIAlyYyA9IHRhcGVfbXRvcChkZXZpY2UsIE1URlNGTSwgMSk7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CkBAIC0zNDEsNyArMzQwLDggQEAKIAlkZXZpY2UtPmJvZiA9IHJjOwogCW5yX29mX2Jsa3MgLT0gcmM7CiAKLQlQUklOVF9JTkZPKCJGb3VuZCAlaSBibG9ja3Mgb24gbWVkaWFcbiIsIG5yX29mX2Jsa3MpOworCWRldl9pbmZvKCZkZXZpY2UtPmNkZXYtPmRldiwgIlRoZSBzaXplIG9mIHRoZSByZWNvcmRlZCBhcmVhIGlzICVpICIKKwkJImJsb2Nrc1xuIiwgbnJfb2ZfYmxrcyk7CiAJc2V0X2NhcGFjaXR5KGRldmljZS0+YmxrX2RhdGEuZGlzaywKIAkJbnJfb2ZfYmxrcyooVEFQRUJMT0NLX0hTRUNfU0laRS81MTIpKTsKIApAQCAtMzc2LDggKzM3Niw4IEBACiAKIAlpZiAoZGV2aWNlLT5yZXF1aXJlZF90YXBlbWFya3MpIHsKIAkJREJGX0VWRU5UKDIsICJUQkxPQ0s6IG1pc3NpbmcgdGFwZW1hcmtzXG4iKTsKLQkJUFJJTlRfRVJSKCJUQkxPQ0s6IFJlZnVzaW5nIHRvIG9wZW4gdGFwZSB3aXRoIG1pc3NpbmciCi0JCQkiIGVuZCBvZiBmaWxlIG1hcmtzLlxuIik7CisJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwgIk9wZW5pbmcgdGhlIHRhcGUgZmFpbGVkIGJlY2F1c2UiCisJCQkiIG9mIG1pc3NpbmcgZW5kLW9mLWZpbGUgbWFya3NcbiIpOwogCQlyYyA9IC1FUEVSTTsKIAkJZ290byBwdXRfZGV2aWNlOwogCX0KQEAgLTQ1Miw3ICs0NTIsNiBAQAogCQkJcmMgPSAtRUlOVkFMOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlQUklOVF9XQVJOKCJpbnZhbGlkIGlvY3RsIDB4JXhcbiIsIGNvbW1hbmQpOwogCQkJcmMgPSAtRUlOVkFMOwogCX0KIApAQCAtNDc0LDcgKzQ3Myw2IEBACiAKIAlpZiAodGFwZWJsb2NrX21ham9yID09IDApCiAJCXRhcGVibG9ja19tYWpvciA9IHJjOwotCVBSSU5UX0lORk8oInRhcGUgZ2V0cyBtYWpvciAlZCBmb3IgYmxvY2sgZGV2aWNlXG4iLCB0YXBlYmxvY2tfbWFqb3IpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2NoYXIuYyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfY2hhci5jCmluZGV4IGJlMGNlMjIuLjMxNTY2YzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfY2hhci5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfY2hhci5jCkBAIC0yNCw4ICsyNCw2IEBACiAjaW5jbHVkZSAidGFwZV9zdGQuaCIKICNpbmNsdWRlICJ0YXBlX2NsYXNzLmgiCiAKLSNkZWZpbmUgUFJJTlRLX0hFQURFUiAiVEFQRV9DSEFSOiAiCi0KICNkZWZpbmUgVEFQRUNIQVJfTUFKT1IJCTAJLyogZ2V0IGR5bmFtaWMgbWFqb3IgKi8KIAogLyoKQEAgLTEwMiw4ICsxMDAsNiBAQAogCWlmIChibG9ja19zaXplID4gTUFYX0JMT0NLU0laRSkgewogCQlEQkZfRVZFTlQoMywgIkludmFsaWQgYmxvY2tzaXplICglemQgPiAlZClcbiIsCiAJCQlibG9ja19zaXplLCBNQVhfQkxPQ0tTSVpFKTsKLQkJUFJJTlRfRVJSKCJJbnZhbGlkIGJsb2Nrc2l6ZSAoJXpkPiAlZClcbiIsCi0JCQlibG9ja19zaXplLCBNQVhfQkxPQ0tTSVpFKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC00ODUsNyArNDgxLDYgQEAKIAkJcmV0dXJuIC0xOwogCiAJdGFwZWNoYXJfbWFqb3IgPSBNQUpPUihkZXYpOwotCVBSSU5UX0lORk8oInRhcGUgZ2V0cyBtYWpvciAlZCBmb3IgY2hhcmFjdGVyIGRldmljZXNcbiIsIE1BSk9SKGRldikpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00OTYsNyArNDkxLDUgQEAKIHZvaWQKIHRhcGVjaGFyX2V4aXQodm9pZCkKIHsKLQlQUklOVF9JTkZPKCJ0YXBlIHJlbGVhc2VzIG1ham9yICVkIGZvciBjaGFyYWN0ZXIgZGV2aWNlc1xuIiwKLQkJdGFwZWNoYXJfbWFqb3IpOwogCXVucmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihNS0RFVih0YXBlY2hhcl9tYWpvciwgMCksIDI1Nik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2NvcmUuYyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfY29yZS5jCmluZGV4IGY5YmI1MWYuLjA4YzA5ZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfY29yZS5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfY29yZS5jCkBAIC0xMSw2ICsxMSw3IEBACiAgKgkJIFN0ZWZhbiBCYWRlciA8c2hiYWRlckBkZS5pYm0uY29tPgogICovCiAKKyNkZWZpbmUgS01TR19DT01QT05FTlQgInRhcGUiCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgkgICAgIC8vIGZvciBrZXJuZWwgcGFyYW1ldGVycwogI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4JICAgICAvLyBmb3IgcmVxdWVzdGluZyBtb2R1bGVzCkBAIC0yNSw3ICsyNiw2IEBACiAjaW5jbHVkZSAidGFwZS5oIgogI2luY2x1ZGUgInRhcGVfc3RkLmgiCiAKLSNkZWZpbmUgUFJJTlRLX0hFQURFUiAiVEFQRV9DT1JFOiAiCiAjZGVmaW5lIExPTkdfQlVTWV9USU1FT1VUIDE4MCAvKiBzZWNvbmRzICovCiAKIHN0YXRpYyB2b2lkIF9fdGFwZV9kb19pcnEgKHN0cnVjdCBjY3dfZGV2aWNlICosIHVuc2lnbmVkIGxvbmcsIHN0cnVjdCBpcmIgKik7CkBAIC0yMTQsMTMgKzIxNCwxMyBAQAogCXN3aXRjaChuZXdzdGF0ZSl7CiAJY2FzZSBNU19VTkxPQURFRDoKIAkJZGV2aWNlLT50YXBlX2dlbmVyaWNfc3RhdHVzIHw9IEdNVF9EUl9PUEVOKH4wKTsKLQkJUFJJTlRfSU5GTygiKCVzKTogVGFwZSBpcyB1bmxvYWRlZFxuIiwKLQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOworCQlkZXZfaW5mbygmZGV2aWNlLT5jZGV2LT5kZXYsICJUaGUgdGFwZSBjYXJ0cmlkZ2UgaGFzIGJlZW4gIgorCQkJInN1Y2Nlc3NmdWxseSB1bmxvYWRlZFxuIik7CiAJCWJyZWFrOwogCWNhc2UgTVNfTE9BREVEOgogCQlkZXZpY2UtPnRhcGVfZ2VuZXJpY19zdGF0dXMgJj0gfkdNVF9EUl9PUEVOKH4wKTsKLQkJUFJJTlRfSU5GTygiKCVzKTogVGFwZSBoYXMgYmVlbiBtb3VudGVkXG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CisJCWRldl9pbmZvKCZkZXZpY2UtPmNkZXYtPmRldiwgIkEgdGFwZSBjYXJ0cmlkZ2UgaGFzIGJlZW4gIgorCQkJIm1vdW50ZWRcbiIpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQkvLyBwcmludCBub3RoaW5nCkBAIC0zMzMsNyArMzMzLDYgQEAKIAkvKiBMZXQgdGhlIGRpc2NpcGxpbmUgaGF2ZSBhIGdvIGF0IHRoZSBkZXZpY2UuICovCiAJZGV2aWNlLT5kaXNjaXBsaW5lID0gZGlzY2lwbGluZTsKIAlpZiAoIXRyeV9tb2R1bGVfZ2V0KGRpc2NpcGxpbmUtPm93bmVyKSkgewotCQlQUklOVF9FUlIoIkNhbm5vdCBnZXQgbW9kdWxlLiBNb2R1bGUgZ29uZS5cbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTM5MSw3ICszOTAsNiBAQAogdGFwZV9nZW5lcmljX29mZmxpbmUoc3RydWN0IHRhcGVfZGV2aWNlICpkZXZpY2UpCiB7CiAJaWYgKCFkZXZpY2UpIHsKLQkJUFJJTlRfRVJSKCJ0YXBlX2dlbmVyaWNfb2ZmbGluZTogbm8gc3VjaCBkZXZpY2VcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKQEAgLTQxMyw5ICs0MTEsNiBAQAogCQkJREJGX0VWRU5UKDMsICIoJTA4eCk6IFNldCBvZmZsaW5lIGZhaWxlZCAiCiAJCQkJIi0gZHJpdmUgaW4gdXNlLlxuIiwKIAkJCQlkZXZpY2UtPmNkZXZfaWQpOwotCQkJUFJJTlRfV0FSTigiKCVzKTogU2V0IG9mZmxpbmUgZmFpbGVkICIKLQkJCQkiLSBkcml2ZSBpbiB1c2UuXG4iLAotCQkJCWRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOwogCQkJc3Bpbl91bmxvY2tfaXJxKGdldF9jY3dkZXZfbG9jayhkZXZpY2UtPmNkZXYpKTsKIAkJCXJldHVybiAtRUJVU1k7CiAJfQpAQCAtNDM1LDE0ICs0MzAsMTEgQEAKIAlkZXZpY2UgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdGFwZV9kZXZpY2UpLCBHRlBfS0VSTkVMKTsKIAlpZiAoZGV2aWNlID09IE5VTEwpIHsKIAkJREJGX0VYQ0VQVElPTigyLCAidGk6bm8gbWVtXG4iKTsKLQkJUFJJTlRfSU5GTyAoImNhbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgIgotCQkJICAgICJ0YXBlIGluZm8gc3RydWN0dXJlXG4iKTsKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAJfQogCWRldmljZS0+bW9kZXNldF9ieXRlID0ga21hbGxvYygxLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CiAJaWYgKGRldmljZS0+bW9kZXNldF9ieXRlID09IE5VTEwpIHsKIAkJREJGX0VYQ0VQVElPTigyLCAidGk6bm8gbWVtXG4iKTsKLQkJUFJJTlRfSU5GTygiY2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciBtb2Rlc2V0IGJ5dGVcbiIpOwogCQlrZnJlZShkZXZpY2UpOwogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAl9CkBAIC00OTAsNyArNDgyLDYgQEAKIAl9IGVsc2UgewogCQlpZiAocmVtYWluIDwgMCkgewogCQkJREJGX0VWRU5UKDQsICJwdXQgZGV2aWNlIHdpdGhvdXQgcmVmZXJlbmNlXG4iKTsKLQkJCVBSSU5UX0VSUigicHV0IGRldmljZSB3aXRob3V0IHJlZmVyZW5jZVxuIik7CiAJCX0gZWxzZSB7CiAJCQlEQkZfRVZFTlQoNCwgInRhcGVfZnJlZV9kZXZpY2UoJXApXG4iLCBkZXZpY2UpOwogCQkJa2ZyZWUoZGV2aWNlLT5tb2Rlc2V0X2J5dGUpOwpAQCAtNTM4LDggKzUyOSw2IEBACiAJcmV0ID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZjZGV2LT5kZXYua29iaiwgJnRhcGVfYXR0cl9ncm91cCk7CiAJaWYgKHJldCkgewogCQl0YXBlX3B1dF9kZXZpY2UoZGV2aWNlKTsKLQkJUFJJTlRfRVJSKCJwcm9iZSBmYWlsZWQgZm9yIHRhcGUgZGV2aWNlICVzXG4iLAotCQkJICBkZXZfbmFtZSgmY2Rldi0+ZGV2KSk7CiAJCXJldHVybiByZXQ7CiAJfQogCWNkZXYtPmRldi5kcml2ZXJfZGF0YSA9IGRldmljZTsKQEAgLTU0Nyw3ICs1MzYsNiBAQAogCWRldmljZS0+Y2RldiA9IGNkZXY7CiAJY2N3X2RldmljZV9nZXRfaWQoY2RldiwgJmRldl9pZCk7CiAJZGV2aWNlLT5jZGV2X2lkID0gZGV2aWRfdG9faW50KCZkZXZfaWQpOwotCVBSSU5UX0lORk8oInRhcGUgZGV2aWNlICVzIGZvdW5kXG4iLCBkZXZfbmFtZSgmY2Rldi0+ZGV2KSk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNTg0LDcgKzU3Miw2IEBACiAKIAlkZXZpY2UgPSBjZGV2LT5kZXYuZHJpdmVyX2RhdGE7CiAJaWYgKCFkZXZpY2UpIHsKLQkJUFJJTlRfRVJSKCJObyBkZXZpY2UgcG9pbnRlciBpbiB0YXBlX2dlbmVyaWNfcmVtb3ZlIVxuIik7CiAJCXJldHVybjsKIAl9CiAJREJGX0xIKDMsICIoJTA4eCk6IHRhcGVfZ2VuZXJpY19yZW1vdmUoJXApXG4iLCBkZXZpY2UtPmNkZXZfaWQsIGNkZXYpOwpAQCAtNjE1LDEwICs2MDIsOCBAQAogCQkJICovCiAJCQlEQkZfRVZFTlQoMywgIiglMDh4KTogRHJpdmUgaW4gdXNlIHZhbmlzaGVkIVxuIiwKIAkJCQlkZXZpY2UtPmNkZXZfaWQpOwotCQkJUFJJTlRfV0FSTigiKCVzKTogRHJpdmUgaW4gdXNlIHZhbmlzaGVkIC0gIgotCQkJCSJleHBlY3QgdHJvdWJsZSFcbiIsCi0JCQkJZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7Ci0JCQlQUklOVF9XQVJOKCJTdGF0ZSB3YXMgJWlcbiIsIGRldmljZS0+dGFwZV9zdGF0ZSk7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsICJBIHRhcGUgdW5pdCB3YXMgZGV0YWNoZWQiCisJCQkJIiB3aGlsZSBpbiB1c2VcbiIpOwogCQkJdGFwZV9zdGF0ZV9zZXQoZGV2aWNlLCBUU19OT1RfT1BFUik7CiAJCQlfX3RhcGVfZGlzY2FyZF9yZXF1ZXN0cyhkZXZpY2UpOwogCQkJc3Bpbl91bmxvY2tfaXJxKGdldF9jY3dkZXZfbG9jayhkZXZpY2UtPmNkZXYpKTsKQEAgLTYzOSw4ICs2MjQsNyBAQAogewogCXN0cnVjdCB0YXBlX3JlcXVlc3QgKnJlcXVlc3Q7CiAKLQlpZiAoZGF0YXNpemUgPiBQQUdFX1NJWkUgfHwgKGNwbGVuZ3RoKnNpemVvZihzdHJ1Y3QgY2N3MSkpID4gUEFHRV9TSVpFKQotCQlCVUcoKTsKKwlCVUdfT04oZGF0YXNpemUgPiBQQUdFX1NJWkUgfHwgKGNwbGVuZ3RoKnNpemVvZihzdHJ1Y3QgY2N3MSkpID4gUEFHRV9TSVpFKTsKIAogCURCRl9MSCg2LCAidGFwZV9hbGxvY19yZXF1ZXN0KCVkLCAlZClcbiIsIGNwbGVuZ3RoLCBkYXRhc2l6ZSk7CiAKQEAgLTc5Nyw4ICs3ODEsNyBAQAogCWRldmljZSA9IChzdHJ1Y3QgdGFwZV9kZXZpY2UgKikgZGF0YTsKIAlzcGluX2xvY2tfaXJxKGdldF9jY3dkZXZfbG9jayhkZXZpY2UtPmNkZXYpKTsKIAlyZXF1ZXN0ID0gbGlzdF9lbnRyeShkZXZpY2UtPnJlcV9xdWV1ZS5uZXh0LCBzdHJ1Y3QgdGFwZV9yZXF1ZXN0LCBsaXN0KTsKLQlpZiAocmVxdWVzdC0+c3RhdHVzICE9IFRBUEVfUkVRVUVTVF9MT05HX0JVU1kpCi0JCUJVRygpOworCUJVR19PTihyZXF1ZXN0LT5zdGF0dXMgIT0gVEFQRV9SRVFVRVNUX0xPTkdfQlVTWSk7CiAJREJGX0xIKDYsICIlMDh4OiBMb25nIGJ1c3kgdGltZW91dC5cbiIsIGRldmljZS0+Y2Rldl9pZCk7CiAJX190YXBlX3N0YXJ0X25leHRfcmVxdWVzdChkZXZpY2UpOwogCWRldmljZS0+bGJfdGltZW91dC5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIHRhcGVfcHV0X2RldmljZShkZXZpY2UpOwpAQCAtODMwLDMwICs4MTMsNiBAQAogfQogCiAvKgotICogV3JpdGUgc2Vuc2UgZGF0YSB0byBjb25zb2xlL2RiZgotICovCi12b2lkCi10YXBlX2R1bXBfc2Vuc2Uoc3RydWN0IHRhcGVfZGV2aWNlKiBkZXZpY2UsIHN0cnVjdCB0YXBlX3JlcXVlc3QgKnJlcXVlc3QsCi0JCXN0cnVjdCBpcmIgKmlyYikKLXsKLQl1bnNpZ25lZCBpbnQgKnNwdHI7Ci0KLQlQUklOVF9JTkZPKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKLQlQUklOVF9JTkZPKCJEU1RBVCA6ICUwMnggIENTVEFUOiAlMDJ4CUNQQTogJTA0eFxuIiwKLQkJICAgaXJiLT5zY3N3LmNtZC5kc3RhdCwgaXJiLT5zY3N3LmNtZC5jc3RhdCwgaXJiLT5zY3N3LmNtZC5jcGEpOwotCVBSSU5UX0lORk8oIkRFVklDRTogJXNcbiIsIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOwotCWlmIChyZXF1ZXN0ICE9IE5VTEwpCi0JCVBSSU5UX0lORk8oIk9QCSAgOiAlc1xuIiwgdGFwZV9vcF92ZXJib3NlW3JlcXVlc3QtPm9wXSk7Ci0KLQlzcHRyID0gKHVuc2lnbmVkIGludCAqKSBpcmItPmVjdzsKLQlQUklOVF9JTkZPKCJTZW5zZSBkYXRhOiAlMDhYICUwOFggJTA4WCAlMDhYIFxuIiwKLQkJICAgc3B0clswXSwgc3B0clsxXSwgc3B0clsyXSwgc3B0clszXSk7Ci0JUFJJTlRfSU5GTygiU2Vuc2UgZGF0YTogJTA4WCAlMDhYICUwOFggJTA4WCBcbiIsCi0JCSAgIHNwdHJbNF0sIHNwdHJbNV0sIHNwdHJbNl0sIHNwdHJbN10pOwotCVBSSU5UX0lORk8oIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKLX0KLQotLyoKICAqIFdyaXRlIHNlbnNlIGRhdGEgdG8gZGJmCiAgKi8KIHZvaWQKQEAgLTEwNTEsOCArMTAxMCw2IEBACiAKIAlkZXZpY2UgPSAoc3RydWN0IHRhcGVfZGV2aWNlICopIGNkZXYtPmRldi5kcml2ZXJfZGF0YTsKIAlpZiAoZGV2aWNlID09IE5VTEwpIHsKLQkJUFJJTlRfRVJSKCJjb3VsZCBub3QgZ2V0IGRldmljZSBzdHJ1Y3R1cmUgZm9yICVzICIKLQkJCSAgImluIGludGVycnVwdFxuIiwgZGV2X25hbWUoJmNkZXYtPmRldikpOwogCQlyZXR1cm47CiAJfQogCXJlcXVlc3QgPSAoc3RydWN0IHRhcGVfcmVxdWVzdCAqKSBpbnRwYXJtOwpAQCAtMTA2NCwxMyArMTAyMSwxMyBAQAogCQkvKiBGSVhNRTogV2hhdCB0byBkbyB3aXRoIHRoZSByZXF1ZXN0PyAqLwogCQlzd2l0Y2ggKFBUUl9FUlIoaXJiKSkgewogCQkJY2FzZSAtRVRJTUVET1VUOgotCQkJCVBSSU5UX1dBUk4oIiglcyk6IFJlcXVlc3QgdGltZWQgb3V0XG4iLAorCQkJCURCRl9MSCgxLCAiKCVzKTogUmVxdWVzdCB0aW1lZCBvdXRcbiIsCiAJCQkJCWRldl9uYW1lKCZjZGV2LT5kZXYpKTsKIAkJCWNhc2UgLUVJTzoKIAkJCQlfX3RhcGVfZW5kX3JlcXVlc3QoZGV2aWNlLCByZXF1ZXN0LCAtRUlPKTsKIAkJCQlicmVhazsKIAkJCWRlZmF1bHQ6Ci0JCQkJUFJJTlRfRVJSKCIoJXMpOiBVbmV4cGVjdGVkIGkvbyBlcnJvciAlbGlcbiIsCisJCQkJREJGX0xIKDEsICIoJXMpOiBVbmV4cGVjdGVkIGkvbyBlcnJvciAlbGlcbiIsCiAJCQkJCWRldl9uYW1lKCZjZGV2LT5kZXYpLAogCQkJCQlQVFJfRVJSKGlyYikpOwogCQl9CkBAIC0xMTgyLDggKzExMzksNiBAQAogCQlkZWZhdWx0OgogCQkJaWYgKHJjID4gMCkgewogCQkJCURCRl9FVkVOVCg2LCAieHVua25vd25yY1xuIik7Ci0JCQkJUFJJTlRfRVJSKCJJbnZhbGlkIHJldHVybiBjb2RlIGZyb20gZGlzY2lwbGluZSAiCi0JCQkJICAJImludGVycnVwdCBmdW5jdGlvbi5cbiIpOwogCQkJCV9fdGFwZV9lbmRfcmVxdWVzdChkZXZpY2UsIHJlcXVlc3QsIC1FSU8pOwogCQkJfSBlbHNlIHsKIAkJCQlfX3RhcGVfZW5kX3JlcXVlc3QoZGV2aWNlLCByZXF1ZXN0LCByYyk7CkBAIC0xMzIzLDcgKzEyNzgsNiBAQAogRVhQT1JUX1NZTUJPTCh0YXBlX21lZF9zdGF0ZV9zZXQpOwogRVhQT1JUX1NZTUJPTCh0YXBlX2FsbG9jX3JlcXVlc3QpOwogRVhQT1JUX1NZTUJPTCh0YXBlX2ZyZWVfcmVxdWVzdCk7Ci1FWFBPUlRfU1lNQk9MKHRhcGVfZHVtcF9zZW5zZSk7CiBFWFBPUlRfU1lNQk9MKHRhcGVfZHVtcF9zZW5zZV9kYmYpOwogRVhQT1JUX1NZTUJPTCh0YXBlX2RvX2lvKTsKIEVYUE9SVF9TWU1CT0wodGFwZV9kb19pb19hc3luYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlX3Byb2MuYyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfcHJvYy5jCmluZGV4IDhhMzc2YWYuLjIwMmY0MjEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlX3Byb2MuYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlX3Byb2MuYwpAQCAtMjAsOCArMjAsNiBAQAogCiAjaW5jbHVkZSAidGFwZS5oIgogCi0jZGVmaW5lIFBSSU5US19IRUFERVIgIlRBUEVfUFJPQzogIgotCiBzdGF0aWMgY29uc3QgY2hhciAqdGFwZV9tZWRfc3RfdmVyYm9zZVtNU19TSVpFXSA9CiB7CiAJW01TX1VOS05PV05dID0gIlVOS05PV04gIiwKQEAgLTEyOCw3ICsxMjYsNiBAQAogCQlwcm9jX2NyZWF0ZSgidGFwZWRldmljZXMiLCBTX0lGUkVHIHwgU19JUlVHTyB8IFNfSVdVU1IsIE5VTEwsCiAJCQkgICAgJnRhcGVfcHJvY19vcHMpOwogCWlmICh0YXBlX3Byb2NfZGV2aWNlcyA9PSBOVUxMKSB7Ci0JCVBSSU5UX1dBUk4oInRhcGU6IENhbm5vdCByZWdpc3RlciBwcm9jZnMgZW50cnkgdGFwZWRldmljZXNcbiIpOwogCQlyZXR1cm47CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9zdGQuYyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfc3RkLmMKaW5kZXggNWJkNTczZC4uMWE5NDIwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9zdGQuYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlX3N0ZC5jCkBAIC0yNiw4ICsyNiw2IEBACiAjaW5jbHVkZSAidGFwZS5oIgogI2luY2x1ZGUgInRhcGVfc3RkLmgiCiAKLSNkZWZpbmUgUFJJTlRLX0hFQURFUiAiVEFQRV9TVEQ6ICIKLQogLyoKICAqIHRhcGVfc3RkX2Fzc2lnbgogICovCkBAIC0zOSwxNiArMzcsMTUgQEAKIAlpbnQgcmM7CiAKIAlyZXF1ZXN0ID0gKHN0cnVjdCB0YXBlX3JlcXVlc3QgKikgZGF0YTsKLQlpZiAoKGRldmljZSA9IHJlcXVlc3QtPmRldmljZSkgPT0gTlVMTCkKLQkJQlVHKCk7CisJZGV2aWNlID0gcmVxdWVzdC0+ZGV2aWNlOworCUJVR19PTighZGV2aWNlKTsKIAogCURCRl9FVkVOVCgzLCAiJTA4eDogQXNzaWdubWVudCB0aW1lb3V0LiBEZXZpY2UgYnVzeS5cbiIsCiAJCQlkZXZpY2UtPmNkZXZfaWQpOwogCXJjID0gdGFwZV9jYW5jZWxfaW8oZGV2aWNlLCByZXF1ZXN0KTsKIAlpZihyYykKLQkJUFJJTlRfRVJSKCIoJXMpOiBBc3NpZ24gdGltZW91dDogQ2FuY2VsIGZhaWxlZCB3aXRoIHJjID0gJWlcbiIsCisJCURCRl9FVkVOVCgzLCAiKCVzKTogQXNzaWduIHRpbWVvdXQ6IENhbmNlbCBmYWlsZWQgd2l0aCByYyA9ICVpXG4iLAogCQkJZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwgcmMpOwotCiB9CiAKIGludApAQCAtODIsOCArNzksNiBAQAogCWRlbF90aW1lcigmdGltZW91dCk7CiAKIAlpZiAocmMgIT0gMCkgewotCQlQUklOVF9XQVJOKCIlczogYXNzaWduIGZhaWxlZCAtIGRldmljZSBtaWdodCBiZSBidXN5XG4iLAotCQkJZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CiAJCURCRl9FVkVOVCgzLCAiJTA4eDogYXNzaWduIGZhaWxlZCAtIGRldmljZSBtaWdodCBiZSBidXN5XG4iLAogCQkJZGV2aWNlLT5jZGV2X2lkKTsKIAl9IGVsc2UgewpAQCAtMTA1LDggKzEwMCw2IEBACiAJaWYgKGRldmljZS0+dGFwZV9zdGF0ZSA9PSBUU19OT1RfT1BFUikgewogCQlEQkZfRVZFTlQoMywgIiglMDh4KTogQ2FuJ3QgdW5hc3NpZ24gZGV2aWNlXG4iLAogCQkJZGV2aWNlLT5jZGV2X2lkKTsKLQkJUFJJTlRfV0FSTigiKCVzKTogQ2FuJ3QgdW5hc3NpZ24gZGV2aWNlIC0gZGV2aWNlIGdvbmVcbiIsCi0JCQlkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC0xMjAsOCArMTEzLDYgQEAKIAogCWlmICgocmMgPSB0YXBlX2RvX2lvKGRldmljZSwgcmVxdWVzdCkpICE9IDApIHsKIAkJREJGX0VWRU5UKDMsICIlMDh4OiBVbmFzc2lnbiBmYWlsZWRcbiIsIGRldmljZS0+Y2Rldl9pZCk7Ci0JCVBSSU5UX1dBUk4oIiVzOiBVbmFzc2lnbiBmYWlsZWRcbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKIAl9IGVsc2UgewogCQlEQkZfRVZFTlQoMywgIiUwOHg6IFRhcGUgdW5hc3NpZ25lZFxuIiwgZGV2aWNlLT5jZGV2X2lkKTsKIAl9CkBAIC0yNDIsOCArMjMzLDYgQEAKIAlpZiAoY291bnQgPiBNQVhfQkxPQ0tTSVpFKSB7CiAJCURCRl9FVkVOVCgzLCAiSW52YWxpZCBibG9jayBzaXplICglZCA+ICVkKSBnaXZlbi5cbiIsCiAJCQljb3VudCwgTUFYX0JMT0NLU0laRSk7Ci0JCVBSSU5UX0VSUigiSW52YWxpZCBibG9jayBzaXplICglZCA+ICVkKSBnaXZlbi5cbiIsCi0JCQljb3VudCwgTUFYX0JMT0NLU0laRSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtNjMzLDE0ICs2MjIsNiBAQAogCiAJaWYgKG10X2NvdW50IDwgMCB8fCBtdF9jb3VudCA+IDEpIHsKIAkJREJGX0VYQ0VQVElPTig2LCAieGNvbSBwYXJtXG4iKTsKLQkJaWYgKCpkZXZpY2UtPm1vZGVzZXRfYnl0ZSAmIDB4MDgpCi0JCQlQUklOVF9JTkZPKCIoJXMpIENvbXByZXNzaW9uIGlzIGN1cnJlbnRseSBvblxuIiwKLQkJCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKLQkJZWxzZQotCQkJUFJJTlRfSU5GTygiKCVzKSBDb21wcmVzc2lvbiBpcyBjdXJyZW50bHkgb2ZmXG4iLAotCQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOwotCQlQUklOVF9JTkZPKCJVc2UgMSB0byBzd2l0Y2ggY29tcHJlc3Npb24gb24sIDAgdG8gIgotCQkJICAgInN3aXRjaCBpdCBvZmZcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJcmVxdWVzdCA9IHRhcGVfYWxsb2NfcmVxdWVzdCgyLCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3pjb3JlLmMgYi9kcml2ZXJzL3MzOTAvY2hhci96Y29yZS5jCmluZGV4IGVlZmM2NjEuLjFiYmFlNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3pjb3JlLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvemNvcmUuYwpAQCAtNSw3ICs1LDcgQEAKICAqCiAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBwbGVhc2UgcmVmZXIgdG8gRG9jdW1lbnRhdGlvbi9zMzkwL3pmY3BkdW1wLnR4dAogICoKLSAqIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwMywyMDA3CisgKiBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDMsMjAwOAogICogQXV0aG9yKHMpOiBNaWNoYWVsIEhvbHpoZXUKICAqLwogCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSA8YXNtL2RlYnVnLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9pcnFmbGFncy5oPgorI2luY2x1ZGUgPGFzbS9jaGVja3N1bS5oPgogI2luY2x1ZGUgInNjbHAuaCIKIAogI2RlZmluZSBUUkFDRSh4Li4uKSBkZWJ1Z19zcHJpbnRmX2V2ZW50KHpjb3JlX2RiZiwgMSwgeCkKQEAgLTQ4LDEyICs0OSwxOSBAQAogCXVuaW9uIHNhdmVfYXJlYQlsY19tYXNrOwogfTsKIAorc3RydWN0IGlwaWJfaW5mbyB7CisJdW5zaWduZWQgbG9uZwlpcGliOworCXUzMgkJY2hlY2tzdW07Cit9ICBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwogc3RhdGljIHN0cnVjdCBzeXNfaW5mbyBzeXNfaW5mbzsKIHN0YXRpYyBzdHJ1Y3QgZGVidWdfaW5mbyAqemNvcmVfZGJmOwogc3RhdGljIGludCBoc2FfYXZhaWxhYmxlOwogc3RhdGljIHN0cnVjdCBkZW50cnkgKnpjb3JlX2RpcjsKIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICp6Y29yZV9maWxlOwogc3RhdGljIHN0cnVjdCBkZW50cnkgKnpjb3JlX21lbW1hcF9maWxlOworc3RhdGljIHN0cnVjdCBkZW50cnkgKnpjb3JlX3JlaXBsX2ZpbGU7CitzdGF0aWMgc3RydWN0IGlwbF9wYXJhbWV0ZXJfYmxvY2sgKmlwbF9ibG9jazsKIAogLyoKICAqIENvcHkgbWVtb3J5IGZyb20gSFNBIHRvIGtlcm5lbCBvciB1c2VyIG1lbW9yeSAobm90IHJlZW50cmFudCk6CkBAIC01MjcsNiArNTM1LDMzIEBACiAJLnJlbGVhc2UJPSB6Y29yZV9tZW1tYXBfcmVsZWFzZSwKIH07CiAKK3N0YXRpYyBzc2l6ZV90IHpjb3JlX3JlaXBsX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAorCQkJCSBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlpZiAoaXBsX2Jsb2NrKSB7CisJCWRpYWczMDgoRElBRzMwOF9TRVQsIGlwbF9ibG9jayk7CisJCWRpYWczMDgoRElBRzMwOF9JUEwsIE5VTEwpOworCX0KKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBpbnQgemNvcmVfcmVpcGxfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6Y29yZV9yZWlwbF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB6Y29yZV9yZWlwbF9mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkud3JpdGUJCT0gemNvcmVfcmVpcGxfd3JpdGUsCisJLm9wZW4JCT0gemNvcmVfcmVpcGxfb3BlbiwKKwkucmVsZWFzZQk9IHpjb3JlX3JlaXBsX3JlbGVhc2UsCit9OworCiAKIHN0YXRpYyB2b2lkIF9faW5pdCBzZXRfczM5MF9sY19tYXNrKHVuaW9uIHNhdmVfYXJlYSAqbWFwKQogewpAQCAtNjQ1LDYgKzY4MCw0MCBAQAogCXJldHVybiAwOwogfQogCisvKgorICogUHJvdmlkZSBJUEwgcGFyYW1ldGVyIGluZm9ybWF0aW9uIGJsb2NrIGZyb20gZWl0aGVyIEhTQSBvciBtZW1vcnkKKyAqIGZvciBmdXR1cmUgcmVpcGwKKyAqLworc3RhdGljIGludCBfX2luaXQgemNvcmVfcmVpcGxfaW5pdCh2b2lkKQoreworCXN0cnVjdCBpcGliX2luZm8gaXBpYl9pbmZvOworCWludCByYzsKKworCXJjID0gbWVtY3B5X2hzYV9rZXJuZWwoJmlwaWJfaW5mbywgX19MQ19EVU1QX1JFSVBMLCBzaXplb2YoaXBpYl9pbmZvKSk7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisJaWYgKGlwaWJfaW5mby5pcGliID09IDApCisJCXJldHVybiAwOworCWlwbF9ibG9jayA9ICh2b2lkICopIF9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTsKKwlpZiAoIWlwbF9ibG9jaykKKwkJcmV0dXJuIC1FTk9NRU07CisJaWYgKGlwaWJfaW5mby5pcGliIDwgWkZDUERVTVBfSFNBX1NJWkUpCisJCXJjID0gbWVtY3B5X2hzYV9rZXJuZWwoaXBsX2Jsb2NrLCBpcGliX2luZm8uaXBpYiwgUEFHRV9TSVpFKTsKKwllbHNlCisJCXJjID0gbWVtY3B5X3JlYWwoaXBsX2Jsb2NrLCBpcGliX2luZm8uaXBpYiwgUEFHRV9TSVpFKTsKKwlpZiAocmMpIHsKKwkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBpcGxfYmxvY2spOworCQlyZXR1cm4gcmM7CisJfQorCWlmIChjc3VtX3BhcnRpYWwoaXBsX2Jsb2NrLCBpcGxfYmxvY2stPmhkci5sZW4sIDApICE9CisJICAgIGlwaWJfaW5mby5jaGVja3N1bSkgeworCQlUUkFDRSgiQ2hlY2tzdW0gZG9lcyBub3QgbWF0Y2hcbiIpOworCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIGlwbF9ibG9jayk7CisJCWlwbF9ibG9jayA9IE5VTEw7CisJfQorCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IF9faW5pdCB6Y29yZV9pbml0KHZvaWQpCiB7CiAJdW5zaWduZWQgY2hhciBhcmNoOwpAQCAtNjkwLDYgKzc1OSwxMCBAQAogCWlmIChyYykKIAkJZ290byBmYWlsOwogCisJcmMgPSB6Y29yZV9yZWlwbF9pbml0KCk7CisJaWYgKHJjKQorCQlnb3RvIGZhaWw7CisKIAl6Y29yZV9kaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoInpjb3JlIiAsIE5VTEwpOwogCWlmICghemNvcmVfZGlyKSB7CiAJCXJjID0gLUVOT01FTTsKQEAgLTcwNyw5ICs3ODAsMTcgQEAKIAkJcmMgPSAtRU5PTUVNOwogCQlnb3RvIGZhaWxfZmlsZTsKIAl9CisJemNvcmVfcmVpcGxfZmlsZSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoInJlaXBsIiwgU19JUlVTUiwgemNvcmVfZGlyLAorCQkJCQkJTlVMTCwgJnpjb3JlX3JlaXBsX2ZvcHMpOworCWlmICghemNvcmVfcmVpcGxfZmlsZSkgeworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gZmFpbF9tZW1tYXBfZmlsZTsKKwl9CiAJaHNhX2F2YWlsYWJsZSA9IDE7CiAJcmV0dXJuIDA7CiAKK2ZhaWxfbWVtbWFwX2ZpbGU6CisJZGVidWdmc19yZW1vdmUoemNvcmVfbWVtbWFwX2ZpbGUpOwogZmFpbF9maWxlOgogCWRlYnVnZnNfcmVtb3ZlKHpjb3JlX2ZpbGUpOwogZmFpbF9kaXI6CkBAIC03MjMsMTAgKzgwNCwxNSBAQAogewogCWRlYnVnX3VucmVnaXN0ZXIoemNvcmVfZGJmKTsKIAlzY2xwX3NkaWFzX2V4aXQoKTsKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIGlwbF9ibG9jayk7CisJZGVidWdmc19yZW1vdmUoemNvcmVfcmVpcGxfZmlsZSk7CisJZGVidWdmc19yZW1vdmUoemNvcmVfbWVtbWFwX2ZpbGUpOworCWRlYnVnZnNfcmVtb3ZlKHpjb3JlX2ZpbGUpOworCWRlYnVnZnNfcmVtb3ZlKHpjb3JlX2Rpcik7CiAJZGlhZzMwOChESUFHMzA4X1JFTF9IU0EsIE5VTEwpOwogfQogCi1NT0RVTEVfQVVUSE9SKCJDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDMsMjAwNyIpOworTU9EVUxFX0FVVEhPUigiQ29weXJpZ2h0IElCTSBDb3JwLiAyMDAzLDIwMDgiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiemNvcmUgbW9kdWxlIGZvciB6ZmNwZHVtcCBzdXBwb3J0Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vTWFrZWZpbGUgYi9kcml2ZXJzL3MzOTAvY2lvL01ha2VmaWxlCmluZGV4IGJkNzliZDEuLmFkYjNkZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zMzkwL2Npby9NYWtlZmlsZQpAQCAtMyw3ICszLDcgQEAKICMKIAogb2JqLXkgKz0gYWlycS5vIGJsYWNrbGlzdC5vIGNoc2MubyBjaW8ubyBjc3MubyBjaHAubyBpZHNldC5vIGlzYy5vIHNjc3cubyBcCi0JZmN4Lm8gaXRjdy5vCisJZmN4Lm8gaXRjdy5vIGNydy5vCiBjY3dfZGV2aWNlLW9ianMgKz0gZGV2aWNlLm8gZGV2aWNlX2ZzbS5vIGRldmljZV9vcHMubwogY2N3X2RldmljZS1vYmpzICs9IGRldmljZV9pZC5vIGRldmljZV9wZ2lkLm8gZGV2aWNlX3N0YXR1cy5vCiBvYmoteSArPSBjY3dfZGV2aWNlLm8gY21mLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vYWlycS5jIGIvZHJpdmVycy9zMzkwL2Npby9haXJxLmMKaW5kZXggZmU2Y2VhMS4uNjVkMmU3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9haXJxLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9haXJxLmMKQEAgLTM0LDggKzM0LDggQEAKIAl2b2lkICpkcnZfZGF0YTsKIH07CiAKLXN0YXRpYyB1bmlvbiBpbmRpY2F0b3JfdCBpbmRpY2F0b3JzW01BWF9JU0NdOwotc3RhdGljIHN0cnVjdCBhaXJxX3QgKmFpcnFzW01BWF9JU0NdW05SX0FJUlFTXTsKK3N0YXRpYyB1bmlvbiBpbmRpY2F0b3JfdCBpbmRpY2F0b3JzW01BWF9JU0MrMV07CitzdGF0aWMgc3RydWN0IGFpcnFfdCAqYWlycXNbTUFYX0lTQysxXVtOUl9BSVJRU107CiAKIHN0YXRpYyBpbnQgcmVnaXN0ZXJfYWlycShzdHJ1Y3QgYWlycV90ICphaXJxLCB1OCBpc2MpCiB7CkBAIC0xMzMsNiArMTMzLDggQEAKIAkJd2hpbGUgKHdvcmQpIHsKIAkJCWlmICh3b3JkICYgSU5ESUNBVE9SX01BU0spIHsKIAkJCQlhaXJxID0gYWlycXNbaXNjXVtpXTsKKwkJCQkvKiBNYWtlIHN1cmUgZ2NjIHJlYWRzIGZyb20gYWlycXMgb25seSBvbmNlLiAqLworCQkJCWJhcnJpZXIoKTsKIAkJCQlpZiAobGlrZWx5KGFpcnEpKQogCQkJCQlhaXJxLT5oYW5kbGVyKCZpbmRpY2F0b3JzW2lzY10uYnl0ZVtpXSwKIAkJCQkJCSAgICAgIGFpcnEtPmRydl9kYXRhKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmMgYi9kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jCmluZGV4IGZlMDBiZTMuLjY1NjVmMDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYwpAQCAtMzM2LDggKzMzNiw3IEBACiAJCSBzaXplX3QgdXNlcl9sZW4sIGxvZmZfdCAqb2Zmc2V0KQogewogCWNoYXIgKmJ1ZjsKLQlzaXplX3QgaTsKLQlzc2l6ZV90IHJjLCByZXQ7CisJc3NpemVfdCByYywgcmV0LCBpOwogCiAJaWYgKCpvZmZzZXQpCiAJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9jY3dncm91cC5jIGIvZHJpdmVycy9zMzkwL2Npby9jY3dncm91cC5jCmluZGV4IDkxOGU2ZmMuLjIyY2U3NjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vY2N3Z3JvdXAuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2Njd2dyb3VwLmMKQEAgLTEwNCw4ICsxMDQsOSBAQAogCXJjID0gZGV2aWNlX3NjaGVkdWxlX2NhbGxiYWNrKGRldiwgY2N3Z3JvdXBfdW5ncm91cF9jYWxsYmFjayk7CiBvdXQ6CiAJaWYgKHJjKSB7Ci0JCS8qIFJlbGVhc2Ugb25vZmYgImxvY2siIHdoZW4gdW5ncm91cGluZyBmYWlsZWQuICovCi0JCWF0b21pY19zZXQoJmdkZXYtPm9ub2ZmLCAwKTsKKwkJaWYgKHJjICE9IC1FQUdBSU4pCisJCQkvKiBSZWxlYXNlIG9ub2ZmICJsb2NrIiB3aGVuIHVuZ3JvdXBpbmcgZmFpbGVkLiAqLworCQkJYXRvbWljX3NldCgmZ2Rldi0+b25vZmYsIDApOwogCQlyZXR1cm4gcmM7CiAJfQogCXJldHVybiBjb3VudDsKQEAgLTMxNCwxNiArMzE1LDMyIEBACiB9CiBFWFBPUlRfU1lNQk9MKGNjd2dyb3VwX2NyZWF0ZV9mcm9tX3N0cmluZyk7CiAKLXN0YXRpYyBpbnQgX19pbml0Ci1pbml0X2Njd2dyb3VwICh2b2lkKQorc3RhdGljIGludCBjY3dncm91cF9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIGFjdGlvbiwKKwkJCSAgICAgdm9pZCAqZGF0YSk7CisKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgY2N3Z3JvdXBfbmIgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSBjY3dncm91cF9ub3RpZmllcgorfTsKKworc3RhdGljIGludCBfX2luaXQgaW5pdF9jY3dncm91cCh2b2lkKQogewotCXJldHVybiBidXNfcmVnaXN0ZXIgKCZjY3dncm91cF9idXNfdHlwZSk7CisJaW50IHJldDsKKworCXJldCA9IGJ1c19yZWdpc3RlcigmY2N3Z3JvdXBfYnVzX3R5cGUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBidXNfcmVnaXN0ZXJfbm90aWZpZXIoJmNjd2dyb3VwX2J1c190eXBlLCAmY2N3Z3JvdXBfbmIpOworCWlmIChyZXQpCisJCWJ1c191bnJlZ2lzdGVyKCZjY3dncm91cF9idXNfdHlwZSk7CisKKwlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBfX2V4aXQKLWNsZWFudXBfY2N3Z3JvdXAgKHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgY2xlYW51cF9jY3dncm91cCh2b2lkKQogewotCWJ1c191bnJlZ2lzdGVyICgmY2N3Z3JvdXBfYnVzX3R5cGUpOworCWJ1c191bnJlZ2lzdGVyX25vdGlmaWVyKCZjY3dncm91cF9idXNfdHlwZSwgJmNjd2dyb3VwX25iKTsKKwlidXNfdW5yZWdpc3RlcigmY2N3Z3JvdXBfYnVzX3R5cGUpOwogfQogCiBtb2R1bGVfaW5pdChpbml0X2Njd2dyb3VwKTsKQEAgLTM5MSwyNyArNDA4LDI4IEBACiAJdW5zaWduZWQgbG9uZyB2YWx1ZTsKIAlpbnQgcmV0OwogCi0JZ2RldiA9IHRvX2Njd2dyb3VwZGV2KGRldik7CiAJaWYgKCFkZXYtPmRyaXZlcikKLQkJcmV0dXJuIGNvdW50OworCQlyZXR1cm4gLUVOT0RFVjsKIAotCWdkcnYgPSB0b19jY3dncm91cGRydiAoZ2Rldi0+ZGV2LmRyaXZlcik7CisJZ2RldiA9IHRvX2Njd2dyb3VwZGV2KGRldik7CisJZ2RydiA9IHRvX2Njd2dyb3VwZHJ2KGRldi0+ZHJpdmVyKTsKKwogCWlmICghdHJ5X21vZHVsZV9nZXQoZ2Rydi0+b3duZXIpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXJldCA9IHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMCwgJnZhbHVlKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKLQlyZXQgPSBjb3VudDsKKwogCWlmICh2YWx1ZSA9PSAxKQotCQljY3dncm91cF9zZXRfb25saW5lKGdkZXYpOworCQlyZXQgPSBjY3dncm91cF9zZXRfb25saW5lKGdkZXYpOwogCWVsc2UgaWYgKHZhbHVlID09IDApCi0JCWNjd2dyb3VwX3NldF9vZmZsaW5lKGdkZXYpOworCQlyZXQgPSBjY3dncm91cF9zZXRfb2ZmbGluZShnZGV2KTsKIAllbHNlCiAJCXJldCA9IC1FSU5WQUw7CiBvdXQ6CiAJbW9kdWxlX3B1dChnZHJ2LT5vd25lcik7Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gKHJldCA9PSAwKSA/IGNvdW50IDogcmV0OwogfQogCiBzdGF0aWMgc3NpemVfdApAQCAtNDUzLDEzICs0NzEsMTggQEAKIAlzdHJ1Y3QgY2N3Z3JvdXBfZGV2aWNlICpnZGV2OwogCXN0cnVjdCBjY3dncm91cF9kcml2ZXIgKmdkcnY7CiAKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfb25saW5lKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdW5ncm91cCk7CisKKwlpZiAoIWRldi0+ZHJpdmVyKQorCQlyZXR1cm4gMDsKKwogCWdkZXYgPSB0b19jY3dncm91cGRldihkZXYpOwogCWdkcnYgPSB0b19jY3dncm91cGRydihkZXYtPmRyaXZlcik7CiAKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfb25saW5lKTsKLQotCWlmIChnZHJ2ICYmIGdkcnYtPnJlbW92ZSkKKwlpZiAoZ2Rydi0+cmVtb3ZlKQogCQlnZHJ2LT5yZW1vdmUoZ2Rldik7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDY4LDkgKzQ5MSwxMyBAQAogCXN0cnVjdCBjY3dncm91cF9kZXZpY2UgKmdkZXY7CiAJc3RydWN0IGNjd2dyb3VwX2RyaXZlciAqZ2RydjsKIAorCWlmICghZGV2LT5kcml2ZXIpCisJCXJldHVybjsKKwogCWdkZXYgPSB0b19jY3dncm91cGRldihkZXYpOwogCWdkcnYgPSB0b19jY3dncm91cGRydihkZXYtPmRyaXZlcik7Ci0JaWYgKGdkcnYgJiYgZ2Rydi0+c2h1dGRvd24pCisKKwlpZiAoZ2Rydi0+c2h1dGRvd24pCiAJCWdkcnYtPnNodXRkb3duKGdkZXYpOwogfQogCkBAIC00ODMsNiArNTEwLDE5IEBACiAJLnNodXRkb3duID0gY2N3Z3JvdXBfc2h1dGRvd24sCiB9OwogCisKK3N0YXRpYyBpbnQgY2N3Z3JvdXBfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBhY3Rpb24sCisJCQkgICAgIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gZGF0YTsKKworCWlmIChhY3Rpb24gPT0gQlVTX05PVElGWV9VTkJJTkRfRFJJVkVSKQorCQlkZXZpY2Vfc2NoZWR1bGVfY2FsbGJhY2soZGV2LCBjY3dncm91cF91bmdyb3VwX2NhbGxiYWNrKTsKKworCXJldHVybiBOT1RJRllfT0s7Cit9CisKKwogLyoqCiAgKiBjY3dncm91cF9kcml2ZXJfcmVnaXN0ZXIoKSAtIHJlZ2lzdGVyIGEgY2N3IGdyb3VwIGRyaXZlcgogICogQGNkcml2ZXI6IGRyaXZlciB0byBiZSByZWdpc3RlcmVkCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2NocC5jIGIvZHJpdmVycy9zMzkwL2Npby9jaHAuYwppbmRleCAxMjQ2ZjYxLi4zZTVmMzA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2NocC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vY2hwLmMKQEAgLTE3LDggKzE3LDggQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGFzbS9jaHBpZC5oPgogI2luY2x1ZGUgPGFzbS9zY2xwLmg+CisjaW5jbHVkZSA8YXNtL2Nydy5oPgogCi0jaW5jbHVkZSAiLi4vczM5MG1hY2guaCIKICNpbmNsdWRlICJjaW8uaCIKICNpbmNsdWRlICJjc3MuaCIKICNpbmNsdWRlICJpb2FzbS5oIgpAQCAtNzA2LDEyICs3MDYsMTIgQEAKIAlzdHJ1Y3QgY2hwX2lkIGNocGlkOwogCWludCByZXQ7CiAKLQlyZXQgPSBzMzkwX3JlZ2lzdGVyX2Nyd19oYW5kbGVyKENSV19SU0NfQ1BBVEgsIGNocF9wcm9jZXNzX2Nydyk7CisJcmV0ID0gY3J3X3JlZ2lzdGVyX2hhbmRsZXIoQ1JXX1JTQ19DUEFUSCwgY2hwX3Byb2Nlc3NfY3J3KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCWNocF93cSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJjaW9fY2hwIik7CiAJaWYgKCFjaHBfd3EpIHsKLQkJczM5MF91bnJlZ2lzdGVyX2Nyd19oYW5kbGVyKENSV19SU0NfQ1BBVEgpOworCQljcndfdW5yZWdpc3Rlcl9oYW5kbGVyKENSV19SU0NfQ1BBVEgpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJSU5JVF9XT1JLKCZjZmdfd29yaywgY2ZnX2Z1bmMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9jaHNjLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2Noc2MuYwppbmRleCBlYmFiNmVhLi44ODNmMTZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2Noc2MuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2Noc2MuYwpAQCAtMTksOCArMTksOCBAQAogI2luY2x1ZGUgPGFzbS9jaW8uaD4KICNpbmNsdWRlIDxhc20vY2hwaWQuaD4KICNpbmNsdWRlIDxhc20vY2hzYy5oPgorI2luY2x1ZGUgPGFzbS9jcncuaD4KIAotI2luY2x1ZGUgIi4uL3MzOTBtYWNoLmgiCiAjaW5jbHVkZSAiY3NzLmgiCiAjaW5jbHVkZSAiY2lvLmgiCiAjaW5jbHVkZSAiY2lvX2RlYnVnLmgiCkBAIC01ODksNiArNTg5LDcgQEAKIAljYXNlIDB4MDEwMjoKIAljYXNlIDB4MDEwMzoKIAkJcmV0ID0gLUVJTlZBTDsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0ID0gY2hzY19lcnJvcl9mcm9tX3Jlc3BvbnNlKHNlY21fYXJlYS0+cmVzcG9uc2UuY29kZSk7CiAJfQpAQCAtODIwLDcgKzgyMSw3IEBACiAJCQkgICAgICAiY2hzYyBtYWNoaW5lIGNoZWNrcyFcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JcmV0ID0gczM5MF9yZWdpc3Rlcl9jcndfaGFuZGxlcihDUldfUlNDX0NTUywgY2hzY19wcm9jZXNzX2Nydyk7CisJcmV0ID0gY3J3X3JlZ2lzdGVyX2hhbmRsZXIoQ1JXX1JTQ19DU1MsIGNoc2NfcHJvY2Vzc19jcncpOwogCWlmIChyZXQpCiAJCWtmcmVlKHNlaV9wYWdlKTsKIAlyZXR1cm4gcmV0OwpAQCAtODI4LDcgKzgyOSw3IEBACiAKIHZvaWQgX19pbml0IGNoc2NfZnJlZV9zZWlfYXJlYSh2b2lkKQogewotCXMzOTBfdW5yZWdpc3Rlcl9jcndfaGFuZGxlcihDUldfUlNDX0NTUyk7CisJY3J3X3VucmVnaXN0ZXJfaGFuZGxlcihDUldfUlNDX0NTUyk7CiAJa2ZyZWUoc2VpX3BhZ2UpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2Noc2Nfc2NoLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2Noc2Nfc2NoLmMKaW5kZXggMGEyZjJlZC4uOTNlY2ExNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9jaHNjX3NjaC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vY2hzY19zY2guYwpAQCAtODQsOCArODQsOCBAQAogCQlrZnJlZShwcml2YXRlKTsKIAl9IGVsc2UgewogCQlzY2gtPnByaXZhdGUgPSBwcml2YXRlOwotCQlpZiAoc2NoLT5kZXYudWV2ZW50X3N1cHByZXNzKSB7Ci0JCQlzY2gtPmRldi51ZXZlbnRfc3VwcHJlc3MgPSAwOworCQlpZiAoZGV2X2dldF91ZXZlbnRfc3VwcHJlc3MoJnNjaC0+ZGV2KSkgeworCQkJZGV2X3NldF91ZXZlbnRfc3VwcHJlc3MoJnNjaC0+ZGV2LCAwKTsKIAkJCWtvYmplY3RfdWV2ZW50KCZzY2gtPmRldi5rb2JqLCBLT0JKX0FERCk7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2Npby5jIGIvZHJpdmVycy9zMzkwL2Npby9jaW8uYwppbmRleCA2NTlmOGE3Li4yYWViYjk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2Npby5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vY2lvLmMKQEAgLTMwLDYgKzMwLDggQEAKICNpbmNsdWRlIDxhc20vaXNjLmg+CiAjaW5jbHVkZSA8YXNtL2NwdS5oPgogI2luY2x1ZGUgPGFzbS9mY3guaD4KKyNpbmNsdWRlIDxhc20vbm1pLmg+CisjaW5jbHVkZSA8YXNtL2Nydy5oPgogI2luY2x1ZGUgImNpby5oIgogI2luY2x1ZGUgImNzcy5oIgogI2luY2x1ZGUgImNoc2MuaCIKQEAgLTM4LDcgKzQwLDYgQEAKICNpbmNsdWRlICJibGFja2xpc3QuaCIKICNpbmNsdWRlICJjaW9fZGVidWcuaCIKICNpbmNsdWRlICJjaHAuaCIKLSNpbmNsdWRlICIuLi9zMzkwbWFjaC5oIgogCiBkZWJ1Z19pbmZvX3QgKmNpb19kZWJ1Z19tc2dfaWQ7CiBkZWJ1Z19pbmZvX3QgKmNpb19kZWJ1Z190cmFjZV9pZDsKQEAgLTQ3MSw2ICs0NzIsNyBAQAogaW50IGNpb19kaXNhYmxlX3N1YmNoYW5uZWwoc3RydWN0IHN1YmNoYW5uZWwgKnNjaCkKIHsKIAljaGFyIGRiZl90eHRbMTVdOworCWludCByZXRyeTsKIAlpbnQgcmV0OwogCiAJQ0lPX1RSQUNFX0VWRU5UICgyLCAiZGlzc2NoIik7CkBAIC00ODEsMTYgKzQ4MywxNyBAQAogCWlmIChjaW9fdXBkYXRlX3NjaGliKHNjaCkpCiAJCXJldHVybiAtRU5PREVWOwogCi0JaWYgKHNjc3dfYWN0bCgmc2NoLT5zY2hpYi5zY3N3KSAhPSAwKQotCQkvKgotCQkgKiB0aGUgZGlzYWJsZSBmdW5jdGlvbiBtdXN0IG5vdCBiZSBjYWxsZWQgd2hpbGUgdGhlcmUgYXJlCi0JCSAqICByZXF1ZXN0cyBwZW5kaW5nIGZvciBjb21wbGV0aW9uICEKLQkJICovCi0JCXJldHVybiAtRUJVU1k7Ci0KIAlzY2gtPmNvbmZpZy5lbmEgPSAwOwotCXJldCA9IGNpb19jb21taXRfY29uZmlnKHNjaCk7CiAKKwlmb3IgKHJldHJ5ID0gMDsgcmV0cnkgPCAzOyByZXRyeSsrKSB7CisJCXJldCA9IGNpb19jb21taXRfY29uZmlnKHNjaCk7CisJCWlmIChyZXQgPT0gLUVCVVNZKSB7CisJCQlzdHJ1Y3QgaXJiIGlyYjsKKwkJCWlmICh0c2NoKHNjaC0+c2NoaWQsICZpcmIpICE9IDApCisJCQkJYnJlYWs7CisJCX0gZWxzZQorCQkJYnJlYWs7CisJfQogCXNwcmludGYgKGRiZl90eHQsICJyZXQ6JWQiLCByZXQpOwogCUNJT19UUkFDRV9FVkVOVCAoMiwgZGJmX3R4dCk7CiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vY3J3LmMgYi9kcml2ZXJzL3MzOTAvY2lvL2Nydy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxNTc2NjUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3MzOTAvY2lvL2Nydy5jCkBAIC0wLDAgKzEsMTU5IEBACisvKgorICogICBDaGFubmVsIHJlcG9ydCBoYW5kbGluZyBjb2RlCisgKgorICogICAgQ29weXJpZ2h0IElCTSBDb3JwLiAyMDAwLDIwMDkKKyAqICAgIEF1dGhvcihzKTogSW5nbyBBZGx1bmcgPGFkbHVuZ0BkZS5pYm0uY29tPiwKKyAqCQkgTWFydGluIFNjaHdpZGVmc2t5IDxzY2h3aWRlZnNreUBkZS5pYm0uY29tPiwKKyAqCQkgQ29ybmVsaWEgSHVjayA8Y29ybmVsaWEuaHVja0BkZS5pYm0uY29tPiwKKyAqCQkgSGVpa28gQ2Fyc3RlbnMgPGhlaWtvLmNhcnN0ZW5zQGRlLmlibS5jb20+LAorICovCisKKyNpbmNsdWRlIDxsaW51eC9zZW1hcGhvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8YXNtL2Nydy5oPgorCitzdGF0aWMgc3RydWN0IHNlbWFwaG9yZSBjcndfc2VtYXBob3JlOworc3RhdGljIERFRklORV9NVVRFWChjcndfaGFuZGxlcl9tdXRleCk7CitzdGF0aWMgY3J3X2hhbmRsZXJfdCBjcndfaGFuZGxlcnNbTlJfUlNDU107CisKKy8qKgorICogY3J3X3JlZ2lzdGVyX2hhbmRsZXIoKSAtIHJlZ2lzdGVyIGEgY2hhbm5lbCByZXBvcnQgd29yZCBoYW5kbGVyCisgKiBAcnNjOiByZXBvcnRpbmcgc291cmNlIGNvZGUgdG8gaGFuZGxlCisgKiBAaGFuZGxlcjogaGFuZGxlciB0byBiZSByZWdpc3RlcmVkCisgKgorICogUmV0dXJucyAlMCBvbiBzdWNjZXNzIGFuZCBhIG5lZ2F0aXZlIGVycm9yIHZhbHVlIG90aGVyd2lzZS4KKyAqLworaW50IGNyd19yZWdpc3Rlcl9oYW5kbGVyKGludCByc2MsIGNyd19oYW5kbGVyX3QgaGFuZGxlcikKK3sKKwlpbnQgcmMgPSAwOworCisJaWYgKChyc2MgPCAwKSB8fCAocnNjID49IE5SX1JTQ1MpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwltdXRleF9sb2NrKCZjcndfaGFuZGxlcl9tdXRleCk7CisJaWYgKGNyd19oYW5kbGVyc1tyc2NdKQorCQlyYyA9IC1FQlVTWTsKKwllbHNlCisJCWNyd19oYW5kbGVyc1tyc2NdID0gaGFuZGxlcjsKKwltdXRleF91bmxvY2soJmNyd19oYW5kbGVyX211dGV4KTsKKwlyZXR1cm4gcmM7Cit9CisKKy8qKgorICogY3J3X3VucmVnaXN0ZXJfaGFuZGxlcigpIC0gdW5yZWdpc3RlciBhIGNoYW5uZWwgcmVwb3J0IHdvcmQgaGFuZGxlcgorICogQHJzYzogcmVwb3J0aW5nIHNvdXJjZSBjb2RlIHRvIGhhbmRsZQorICovCit2b2lkIGNyd191bnJlZ2lzdGVyX2hhbmRsZXIoaW50IHJzYykKK3sKKwlpZiAoKHJzYyA8IDApIHx8IChyc2MgPj0gTlJfUlNDUykpCisJCXJldHVybjsKKwltdXRleF9sb2NrKCZjcndfaGFuZGxlcl9tdXRleCk7CisJY3J3X2hhbmRsZXJzW3JzY10gPSBOVUxMOworCW11dGV4X3VubG9jaygmY3J3X2hhbmRsZXJfbXV0ZXgpOworfQorCisvKgorICogUmV0cmlldmUgQ1JXcyBhbmQgY2FsbCBmdW5jdGlvbiB0byBoYW5kbGUgZXZlbnQuCisgKi8KK3N0YXRpYyBpbnQgY3J3X2NvbGxlY3RfaW5mbyh2b2lkICp1bnVzZWQpCit7CisJc3RydWN0IGNydyBjcndbMl07CisJaW50IGNjb2RlOworCXVuc2lnbmVkIGludCBjaGFpbjsKKwlpbnQgaWdub3JlOworCityZXBlYXQ6CisJaWdub3JlID0gZG93bl9pbnRlcnJ1cHRpYmxlKCZjcndfc2VtYXBob3JlKTsKKwljaGFpbiA9IDA7CisJd2hpbGUgKDEpIHsKKwkJY3J3X2hhbmRsZXJfdCBoYW5kbGVyOworCisJCWlmICh1bmxpa2VseShjaGFpbiA+IDEpKSB7CisJCQlzdHJ1Y3QgY3J3IHRtcF9jcnc7CisKKwkJCXByaW50ayhLRVJOX1dBUk5JTkciJXM6IENvZGUgZG9lcyBub3Qgc3VwcG9ydCBtb3JlICIKKwkJCSAgICAgICAidGhhbiB0d28gY2hhaW5lZCBjcndzOyBwbGVhc2UgcmVwb3J0IHRvICIKKwkJCSAgICAgICAibGludXgzOTBAZGUuaWJtLmNvbSFcbiIsIF9fZnVuY19fKTsKKwkJCWNjb2RlID0gc3RjcncoJnRtcF9jcncpOworCQkJcHJpbnRrKEtFUk5fV0FSTklORyIlczogY3J3IHJlcG9ydHMgc2xjdD0lZCwgb2Zsdz0lZCwgIgorCQkJICAgICAgICJjaG49JWQsIHJzYz0lWCwgYW5jPSVkLCBlcmM9JVgsIHJzaWQ9JVhcbiIsCisJCQkgICAgICAgX19mdW5jX18sIHRtcF9jcncuc2xjdCwgdG1wX2Nydy5vZmx3LAorCQkJICAgICAgIHRtcF9jcncuY2huLCB0bXBfY3J3LnJzYywgdG1wX2Nydy5hbmMsCisJCQkgICAgICAgdG1wX2Nydy5lcmMsIHRtcF9jcncucnNpZCk7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HIiVzOiBUaGlzIHdhcyBjcncgbnVtYmVyICV4IGluIHRoZSAiCisJCQkgICAgICAgImNoYWluXG4iLCBfX2Z1bmNfXywgY2hhaW4pOworCQkJaWYgKGNjb2RlICE9IDApCisJCQkJYnJlYWs7CisJCQljaGFpbiA9IHRtcF9jcncuY2huID8gY2hhaW4gKyAxIDogMDsKKwkJCWNvbnRpbnVlOworCQl9CisJCWNjb2RlID0gc3RjcncoJmNyd1tjaGFpbl0pOworCQlpZiAoY2NvZGUgIT0gMCkKKwkJCWJyZWFrOworCQlwcmludGsoS0VSTl9ERUJVRyAiY3J3X2luZm8gOiBDUlcgcmVwb3J0cyBzbGN0PSVkLCBvZmx3PSVkLCAiCisJCSAgICAgICAiY2huPSVkLCByc2M9JVgsIGFuYz0lZCwgZXJjPSVYLCByc2lkPSVYXG4iLAorCQkgICAgICAgY3J3W2NoYWluXS5zbGN0LCBjcndbY2hhaW5dLm9mbHcsIGNyd1tjaGFpbl0uY2huLAorCQkgICAgICAgY3J3W2NoYWluXS5yc2MsIGNyd1tjaGFpbl0uYW5jLCBjcndbY2hhaW5dLmVyYywKKwkJICAgICAgIGNyd1tjaGFpbl0ucnNpZCk7CisJCS8qIENoZWNrIGZvciBvdmVyZmxvd3MuICovCisJCWlmIChjcndbY2hhaW5dLm9mbHcpIHsKKwkJCWludCBpOworCisJCQlwcl9kZWJ1ZygiJXM6IGNydyBvdmVyZmxvdyBkZXRlY3RlZCFcbiIsIF9fZnVuY19fKTsKKwkJCW11dGV4X2xvY2soJmNyd19oYW5kbGVyX211dGV4KTsKKwkJCWZvciAoaSA9IDA7IGkgPCBOUl9SU0NTOyBpKyspIHsKKwkJCQlpZiAoY3J3X2hhbmRsZXJzW2ldKQorCQkJCQljcndfaGFuZGxlcnNbaV0oTlVMTCwgTlVMTCwgMSk7CisJCQl9CisJCQltdXRleF91bmxvY2soJmNyd19oYW5kbGVyX211dGV4KTsKKwkJCWNoYWluID0gMDsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChjcndbMF0uY2huICYmICFjaGFpbikgeworCQkJY2hhaW4rKzsKKwkJCWNvbnRpbnVlOworCQl9CisJCW11dGV4X2xvY2soJmNyd19oYW5kbGVyX211dGV4KTsKKwkJaGFuZGxlciA9IGNyd19oYW5kbGVyc1tjcndbY2hhaW5dLnJzY107CisJCWlmIChoYW5kbGVyKQorCQkJaGFuZGxlcigmY3J3WzBdLCBjaGFpbiA/ICZjcndbMV0gOiBOVUxMLCAwKTsKKwkJbXV0ZXhfdW5sb2NrKCZjcndfaGFuZGxlcl9tdXRleCk7CisJCS8qIGNoYWluIGlzIGFsd2F5cyAwIG9yIDEgaGVyZS4gKi8KKwkJY2hhaW4gPSBjcndbY2hhaW5dLmNobiA/IGNoYWluICsgMSA6IDA7CisJfQorCWdvdG8gcmVwZWF0OworCXJldHVybiAwOworfQorCit2b2lkIGNyd19oYW5kbGVfY2hhbm5lbF9yZXBvcnQodm9pZCkKK3sKKwl1cCgmY3J3X3NlbWFwaG9yZSk7Cit9CisKKy8qCisgKiBTZXBhcmF0ZSBpbml0Y2FsbCBuZWVkZWQgZm9yIHNlbWFwaG9yZSBpbml0aWFsaXphdGlvbiBzaW5jZQorICogY3J3X2hhbmRsZV9jaGFubmVsX3JlcG9ydCBtaWdodCBiZSBjYWxsZWQgYmVmb3JlIGNyd19tYWNoaW5lX2NoZWNrX2luaXQuCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IGNyd19pbml0X3NlbWFwaG9yZSh2b2lkKQoreworCWluaXRfTVVURVhfTE9DS0VEKCZjcndfc2VtYXBob3JlKTsKKwlyZXR1cm4gMDsKK30KK3B1cmVfaW5pdGNhbGwoY3J3X2luaXRfc2VtYXBob3JlKTsKKworLyoKKyAqIE1hY2hpbmUgY2hlY2tzIGZvciB0aGUgY2hhbm5lbCBzdWJzeXN0ZW0gbXVzdCBiZSBlbmFibGVkCisgKiBhZnRlciB0aGUgY2hhbm5lbCBzdWJzeXN0ZW0gaXMgaW5pdGlhbGl6ZWQKKyAqLworc3RhdGljIGludCBfX2luaXQgY3J3X21hY2hpbmVfY2hlY2tfaW5pdCh2b2lkKQoreworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKKworCXRhc2sgPSBrdGhyZWFkX3J1bihjcndfY29sbGVjdF9pbmZvLCBOVUxMLCAia21jaGVjayIpOworCWlmIChJU19FUlIodGFzaykpCisJCXJldHVybiBQVFJfRVJSKHRhc2spOworCWN0bF9zZXRfYml0KDE0LCAyOCk7CS8qIGVuYWJsZSBjaGFubmVsIHJlcG9ydCBNQ0ggKi8KKwlyZXR1cm4gMDsKK30KK2RldmljZV9pbml0Y2FsbChjcndfbWFjaGluZV9jaGVja19pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vY3NzLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2Nzcy5jCmluZGV4IDgwMTkyODguLjAwODVkODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vY3NzLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9jc3MuYwpAQCAtMTgsOCArMTgsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KICNpbmNsdWRlIDxhc20vaXNjLmg+CisjaW5jbHVkZSA8YXNtL2Nydy5oPgogCi0jaW5jbHVkZSAiLi4vczM5MG1hY2guaCIKICNpbmNsdWRlICJjc3MuaCIKICNpbmNsdWRlICJjaW8uaCIKICNpbmNsdWRlICJjaW9fZGVidWcuaCIKQEAgLTgzLDYgKzgzLDI1IEBACiAJcmV0dXJuIHJjOwogfQogCitzdGF0aWMgaW50IGNhbGxfZm5fYWxsX3NjaChzdHJ1Y3Qgc3ViY2hhbm5lbF9pZCBzY2hpZCwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgY2JfZGF0YSAqY2IgPSBkYXRhOworCXN0cnVjdCBzdWJjaGFubmVsICpzY2g7CisJaW50IHJjID0gMDsKKworCXNjaCA9IGdldF9zdWJjaGFubmVsX2J5X3NjaGlkKHNjaGlkKTsKKwlpZiAoc2NoKSB7CisJCWlmIChjYi0+Zm5fa25vd25fc2NoKQorCQkJcmMgPSBjYi0+Zm5fa25vd25fc2NoKHNjaCwgY2ItPmRhdGEpOworCQlwdXRfZGV2aWNlKCZzY2gtPmRldik7CisJfSBlbHNlIHsKKwkJaWYgKGNiLT5mbl91bmtub3duX3NjaCkKKwkJCXJjID0gY2ItPmZuX3Vua25vd25fc2NoKHNjaGlkLCBjYi0+ZGF0YSk7CisJfQorCisJcmV0dXJuIHJjOworfQorCiBpbnQgZm9yX2VhY2hfc3ViY2hhbm5lbF9zdGFnZWQoaW50ICgqZm5fa25vd24pKHN0cnVjdCBzdWJjaGFubmVsICosIHZvaWQgKiksCiAJCQkgICAgICAgaW50ICgqZm5fdW5rbm93bikoc3RydWN0IHN1YmNoYW5uZWxfaWQsCiAJCQkgICAgICAgdm9pZCAqKSwgdm9pZCAqZGF0YSkKQEAgLTkwLDEzICsxMDksMTcgQEAKIAlzdHJ1Y3QgY2JfZGF0YSBjYjsKIAlpbnQgcmM7CiAKLQljYi5zZXQgPSBpZHNldF9zY2hfbmV3KCk7Ci0JaWYgKCFjYi5zZXQpCi0JCXJldHVybiAtRU5PTUVNOwotCWlkc2V0X2ZpbGwoY2Iuc2V0KTsKIAljYi5kYXRhID0gZGF0YTsKIAljYi5mbl9rbm93bl9zY2ggPSBmbl9rbm93bjsKIAljYi5mbl91bmtub3duX3NjaCA9IGZuX3Vua25vd247CisKKwljYi5zZXQgPSBpZHNldF9zY2hfbmV3KCk7CisJaWYgKCFjYi5zZXQpCisJCS8qIGZhbGwgYmFjayB0byBicnV0ZSBmb3JjZSBzY2FubmluZyBpbiBjYXNlIG9mIG9vbSAqLworCQlyZXR1cm4gZm9yX2VhY2hfc3ViY2hhbm5lbChjYWxsX2ZuX2FsbF9zY2gsICZjYik7CisKKwlpZHNldF9maWxsKGNiLnNldCk7CisKIAkvKiBQcm9jZXNzIHJlZ2lzdGVyZWQgc3ViY2hhbm5lbHMuICovCiAJcmMgPSBidXNfZm9yX2VhY2hfZGV2KCZjc3NfYnVzX3R5cGUsIE5VTEwsICZjYiwgY2FsbF9mbl9rbm93bl9zY2gpOwogCWlmIChyYykKQEAgLTI3Miw3ICsyOTUsNyBAQAogCSAqIHRoZSBzdWJjaGFubmVsIGRyaXZlciBjYW4gZGVjaWRlIGl0c2VsZiB3aGVuIGl0IHdhbnRzIHRvIGluZm9ybQogCSAqIHVzZXJzcGFjZSBvZiBpdHMgZXhpc3RlbmNlLgogCSAqLwotCXNjaC0+ZGV2LnVldmVudF9zdXBwcmVzcyA9IDE7CisJZGV2X3NldF91ZXZlbnRfc3VwcHJlc3MoJnNjaC0+ZGV2LCAxKTsKIAljc3NfdXBkYXRlX3NzZF9pbmZvKHNjaCk7CiAJLyogbWFrZSBpdCBrbm93biB0byB0aGUgc3lzdGVtICovCiAJcmV0ID0gY3NzX3NjaF9kZXZpY2VfcmVnaXN0ZXIoc2NoKTsKQEAgLTI4Nyw3ICszMTAsNyBAQAogCQkgKiBhIGZpdHRpbmcgZHJpdmVyIG1vZHVsZSBtYXkgYmUgbG9hZGVkIGJhc2VkIG9uIHRoZQogCQkgKiBtb2RhbGlhcy4KIAkJICovCi0JCXNjaC0+ZGV2LnVldmVudF9zdXBwcmVzcyA9IDA7CisJCWRldl9zZXRfdWV2ZW50X3N1cHByZXNzKCZzY2gtPmRldiwgMCk7CiAJCWtvYmplY3RfdWV2ZW50KCZzY2gtPmRldi5rb2JqLCBLT0JKX0FERCk7CiAJfQogCXJldHVybiByZXQ7CkBAIC01MTAsNiArNTMzLDE3IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIHZvaWQgcmVwcm9iZV9hZnRlcl9pZGxlKHN0cnVjdCB3b3JrX3N0cnVjdCAqdW51c2VkKQoreworCS8qIE1ha2Ugc3VyZSBpbml0aWFsIHN1YmNoYW5uZWwgc2NhbiBpcyBkb25lLiAqLworCXdhaXRfZXZlbnQoY2N3X2RldmljZV9pbml0X3dxLAorCQkgICBhdG9taWNfcmVhZCgmY2N3X2RldmljZV9pbml0X2NvdW50KSA9PSAwKTsKKwlpZiAobmVlZF9yZXByb2JlKQorCQljc3Nfc2NoZWR1bGVfcmVwcm9iZSgpOworfQorCitzdGF0aWMgREVDTEFSRV9XT1JLKHJlcHJvYmVfaWRsZV93b3JrLCByZXByb2JlX2FmdGVyX2lkbGUpOworCiAvKiBXb3JrIGZ1bmN0aW9uIHVzZWQgdG8gcmVwcm9iZSBhbGwgdW5yZWdpc3RlcmVkIHN1YmNoYW5uZWxzLiAqLwogc3RhdGljIHZvaWQgcmVwcm9iZV9hbGwoc3RydWN0IHdvcmtfc3RydWN0ICp1bnVzZWQpCiB7CkBAIC01MTcsMTAgKzU1MSwxMiBAQAogCiAJQ0lPX01TR19FVkVOVCg0LCAicmVwcm9iZSBzdGFydFxuIik7CiAKLQluZWVkX3JlcHJvYmUgPSAwOwogCS8qIE1ha2Ugc3VyZSBpbml0aWFsIHN1YmNoYW5uZWwgc2NhbiBpcyBkb25lLiAqLwotCXdhaXRfZXZlbnQoY2N3X2RldmljZV9pbml0X3dxLAotCQkgICBhdG9taWNfcmVhZCgmY2N3X2RldmljZV9pbml0X2NvdW50KSA9PSAwKTsKKwlpZiAoYXRvbWljX3JlYWQoJmNjd19kZXZpY2VfaW5pdF9jb3VudCkgIT0gMCkgeworCQlxdWV1ZV93b3JrKGNjd19kZXZpY2Vfd29yaywgJnJlcHJvYmVfaWRsZV93b3JrKTsKKwkJcmV0dXJuOworCX0KKwluZWVkX3JlcHJvYmUgPSAwOwogCXJldCA9IGZvcl9lYWNoX3N1YmNoYW5uZWxfc3RhZ2VkKE5VTEwsIHJlcHJvYmVfc3ViY2hhbm5lbCwgTlVMTCk7CiAKIAlDSU9fTVNHX0VWRU5UKDQsICJyZXByb2JlIGRvbmUgKHJjPSVkLCBuZWVkX3JlcHJvYmU9JWQpXG4iLCByZXQsCkBAIC02MTksNyArNjU1LDcgQEAKIAkJY3NzLT5nbG9iYWxfcGdpZC5wZ2lkX2hpZ2guZXh0X2Nzc2lkLmNzc2lkID0gY3NzLT5jc3NpZDsKIAl9IGVsc2UgewogI2lmZGVmIENPTkZJR19TTVAKLQkJY3NzLT5nbG9iYWxfcGdpZC5wZ2lkX2hpZ2guY3B1X2FkZHIgPSBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKTsKKwkJY3NzLT5nbG9iYWxfcGdpZC5wZ2lkX2hpZ2guY3B1X2FkZHIgPSBzdGFwKCk7CiAjZWxzZQogCQljc3MtPmdsb2JhbF9wZ2lkLnBnaWRfaGlnaC5jcHVfYWRkciA9IDA7CiAjZW5kaWYKQEAgLTc2NSw3ICs4MDEsNyBAQAogCWlmIChyZXQpCiAJCWdvdG8gb3V0OwogCi0JcmV0ID0gczM5MF9yZWdpc3Rlcl9jcndfaGFuZGxlcihDUldfUlNDX1NDSCwgY3NzX3Byb2Nlc3NfY3J3KTsKKwlyZXQgPSBjcndfcmVnaXN0ZXJfaGFuZGxlcihDUldfUlNDX1NDSCwgY3NzX3Byb2Nlc3NfY3J3KTsKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKIApAQCAtODQ1LDcgKzg4MSw3IEBACiBvdXRfYnVzOgogCWJ1c191bnJlZ2lzdGVyKCZjc3NfYnVzX3R5cGUpOwogb3V0OgotCXMzOTBfdW5yZWdpc3Rlcl9jcndfaGFuZGxlcihDUldfUlNDX0NTUyk7CisJY3J3X3VucmVnaXN0ZXJfaGFuZGxlcihDUldfUlNDX0NTUyk7CiAJY2hzY19mcmVlX3NlaV9hcmVhKCk7CiAJa2ZyZWUoc2xvd19zdWJjaGFubmVsX3NldCk7CiAJcHJfYWxlcnQoIlRoZSBDU1MgZGV2aWNlIGRyaXZlciBpbml0aWFsaXphdGlvbiBmYWlsZWQgd2l0aCAiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5jIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuYwppbmRleCAyM2Q1NzUyLi5jNGQyZjY2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5jCkBAIC00NTcsMTIgKzQ1NywxMyBAQAogCXJldHVybiAocmV0ID09IDApID8gLUVOT0RFViA6IHJldDsKIH0KIAotc3RhdGljIHZvaWQgb25saW5lX3N0b3JlX2hhbmRsZV9vZmZsaW5lKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2KQorc3RhdGljIGludCBvbmxpbmVfc3RvcmVfaGFuZGxlX29mZmxpbmUoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYpCiB7CiAJaWYgKGNkZXYtPnByaXZhdGUtPnN0YXRlID09IERFVl9TVEFURV9ESVNDT05ORUNURUQpCiAJCWNjd19kZXZpY2VfcmVtb3ZlX2Rpc2Nvbm5lY3RlZChjZGV2KTsKLQllbHNlIGlmIChjZGV2LT5kcnYgJiYgY2Rldi0+ZHJ2LT5zZXRfb2ZmbGluZSkKLQkJY2N3X2RldmljZV9zZXRfb2ZmbGluZShjZGV2KTsKKwllbHNlIGlmIChjZGV2LT5vbmxpbmUgJiYgY2Rldi0+ZHJ2ICYmIGNkZXYtPmRydi0+c2V0X29mZmxpbmUpCisJCXJldHVybiBjY3dfZGV2aWNlX3NldF9vZmZsaW5lKGNkZXYpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IG9ubGluZV9zdG9yZV9yZWNvZ19hbmRfb25saW5lKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2KQpAQCAtNTMwLDEzICs1MzEsMTAgQEAKIAkJZ290byBvdXQ7CiAJc3dpdGNoIChpKSB7CiAJY2FzZSAwOgotCQlvbmxpbmVfc3RvcmVfaGFuZGxlX29mZmxpbmUoY2Rldik7Ci0JCXJldCA9IGNvdW50OworCQlyZXQgPSBvbmxpbmVfc3RvcmVfaGFuZGxlX29mZmxpbmUoY2Rldik7CiAJCWJyZWFrOwogCWNhc2UgMToKIAkJcmV0ID0gb25saW5lX3N0b3JlX2hhbmRsZV9vbmxpbmUoY2RldiwgZm9yY2UpOwotCQlpZiAoIXJldCkKLQkJCXJldCA9IGNvdW50OwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXQgPSAtRUlOVkFMOwpAQCAtNTQ1LDcgKzU0Myw3IEBACiAJaWYgKGNkZXYtPmRydikKIAkJbW9kdWxlX3B1dChjZGV2LT5kcnYtPm93bmVyKTsKIAlhdG9taWNfc2V0KCZjZGV2LT5wcml2YXRlLT5vbm9mZiwgMCk7Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gKHJldCA8IDApID8gcmV0IDogY291bnQ7CiB9CiAKIHN0YXRpYyBzc2l6ZV90CkBAIC02ODEsMzUgKzY3OSwyMiBAQAogCXJldHVybiBkZXYgPyB0b19jY3dkZXYoZGV2KSA6IE5VTEw7CiB9CiAKLXN0YXRpYyB2b2lkCi1jY3dfZGV2aWNlX2FkZF9jaGFuZ2VkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgY2N3X2RldmljZV9wcml2YXRlICpwcml2OwotCXN0cnVjdCBjY3dfZGV2aWNlICpjZGV2OwotCi0JcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgY2N3X2RldmljZV9wcml2YXRlLCBraWNrX3dvcmspOwotCWNkZXYgPSBwcml2LT5jZGV2OwotCWlmIChkZXZpY2VfYWRkKCZjZGV2LT5kZXYpKSB7Ci0JCXB1dF9kZXZpY2UoJmNkZXYtPmRldik7Ci0JCXJldHVybjsKLQl9Ci0Jc2V0X2JpdCgxLCAmY2Rldi0+cHJpdmF0ZS0+cmVnaXN0ZXJlZCk7Ci19Ci0KLXZvaWQgY2N3X2RldmljZV9kb191bnJlZ19yZXJlZyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit2b2lkIGNjd19kZXZpY2VfZG9fdW5iaW5kX2JpbmQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBjY3dfZGV2aWNlX3ByaXZhdGUgKnByaXY7CiAJc3RydWN0IGNjd19kZXZpY2UgKmNkZXY7CiAJc3RydWN0IHN1YmNoYW5uZWwgKnNjaDsKKwlpbnQgcmV0OwogCiAJcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgY2N3X2RldmljZV9wcml2YXRlLCBraWNrX3dvcmspOwogCWNkZXYgPSBwcml2LT5jZGV2OwogCXNjaCA9IHRvX3N1YmNoYW5uZWwoY2Rldi0+ZGV2LnBhcmVudCk7CiAKLQljY3dfZGV2aWNlX3VucmVnaXN0ZXIoY2Rldik7Ci0JUFJFUEFSRV9XT1JLKCZjZGV2LT5wcml2YXRlLT5raWNrX3dvcmssCi0JCSAgICAgY2N3X2RldmljZV9hZGRfY2hhbmdlZCk7Ci0JcXVldWVfd29yayhjY3dfZGV2aWNlX3dvcmssICZjZGV2LT5wcml2YXRlLT5raWNrX3dvcmspOworCWlmICh0ZXN0X2JpdCgxLCAmY2Rldi0+cHJpdmF0ZS0+cmVnaXN0ZXJlZCkpIHsKKwkJZGV2aWNlX3JlbGVhc2VfZHJpdmVyKCZjZGV2LT5kZXYpOworCQlyZXQgPSBkZXZpY2VfYXR0YWNoKCZjZGV2LT5kZXYpOworCQlXQVJOX09OKHJldCA9PSAtRU5PREVWKTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC03OTksNyArNzg0LDcgQEAKIAkJcmV0dXJuOwogCW90aGVyX3NjaCA9IHRvX3N1YmNoYW5uZWwoY2Rldi0+ZGV2LnBhcmVudCk7CiAJLyogTm90ZTogZGV2aWNlX21vdmUoKSBjaGFuZ2VzIGNkZXYtPmRldi5wYXJlbnQgKi8KLQlyZXQgPSBkZXZpY2VfbW92ZSgmY2Rldi0+ZGV2LCAmc2NoLT5kZXYpOworCXJldCA9IGRldmljZV9tb3ZlKCZjZGV2LT5kZXYsICZzY2gtPmRldiwgRFBNX09SREVSX1BBUkVOVF9CRUZPUkVfREVWKTsKIAlpZiAocmV0KSB7CiAJCUNJT19NU0dfRVZFTlQoMCwgIk1vdmluZyBkaXNjb25uZWN0ZWQgZGV2aWNlIDAuJXguJTA0eCBmYWlsZWQgIgogCQkJICAgICAgIihyZXQ9JWQpIVxuIiwgY2Rldi0+cHJpdmF0ZS0+ZGV2X2lkLnNzaWQsCkBAIC04MzAsNyArODE1LDcgQEAKIAkgKiBUcnkgdG8gbW92ZSB0aGUgY2N3IGRldmljZSB0byBpdHMgbmV3IHN1YmNoYW5uZWwuCiAJICogTm90ZTogZGV2aWNlX21vdmUoKSBjaGFuZ2VzIGNkZXYtPmRldi5wYXJlbnQKIAkgKi8KLQlyZXQgPSBkZXZpY2VfbW92ZSgmY2Rldi0+ZGV2LCAmc2NoLT5kZXYpOworCXJldCA9IGRldmljZV9tb3ZlKCZjZGV2LT5kZXYsICZzY2gtPmRldiwgRFBNX09SREVSX1BBUkVOVF9CRUZPUkVfREVWKTsKIAlpZiAocmV0KSB7CiAJCUNJT19NU0dfRVZFTlQoMCwgIk1vdmluZyBkZXZpY2UgMC4leC4lMDR4IGZyb20gb3JwaGFuYWdlICIKIAkJCSAgICAgICJmYWlsZWQgKHJldD0lZCkhXG4iLApAQCAtODk3LDcgKzg4Miw4IEBACiAJICogY2N3IGRldmljZSBjYW4gdGFrZSBpdHMgcGxhY2Ugb24gdGhlIHN1YmNoYW5uZWwuCiAJICogTm90ZTogZGV2aWNlX21vdmUoKSBjaGFuZ2VzIGNkZXYtPmRldi5wYXJlbnQKIAkgKi8KLQlyZXQgPSBkZXZpY2VfbW92ZSgmY2Rldi0+ZGV2LCAmY3NzLT5wc2V1ZG9fc3ViY2hhbm5lbC0+ZGV2KTsKKwlyZXQgPSBkZXZpY2VfbW92ZSgmY2Rldi0+ZGV2LCAmY3NzLT5wc2V1ZG9fc3ViY2hhbm5lbC0+ZGV2LAorCQlEUE1fT1JERVJfTk9ORSk7CiAJaWYgKHJldCkgewogCQlDSU9fTVNHX0VWRU5UKDAsICJNb3ZpbmcgZGV2aWNlIDAuJXguJTA0eCB0byBvcnBoYW5hZ2UgZmFpbGVkICIKIAkJCSAgICAgICIocmV0PSVkKSFcbiIsIGNkZXYtPnByaXZhdGUtPmRldl9pZC5zc2lkLApAQCAtOTgxLDcgKzk2Nyw3IEBACiAJICogTm93IHdlIGtub3cgdGhpcyBzdWJjaGFubmVsIHdpbGwgc3RheSwgd2UgY2FuIHRocm93CiAJICogb3VyIGRlbGF5ZWQgdWV2ZW50LgogCSAqLwotCXNjaC0+ZGV2LnVldmVudF9zdXBwcmVzcyA9IDA7CisJZGV2X3NldF91ZXZlbnRfc3VwcHJlc3MoJnNjaC0+ZGV2LCAwKTsKIAlrb2JqZWN0X3VldmVudCgmc2NoLT5kZXYua29iaiwgS09CSl9BREQpOwogCS8qIG1ha2UgaXQga25vd24gdG8gdGhlIHN5c3RlbSAqLwogCXJldCA9IGNjd19kZXZpY2VfcmVnaXN0ZXIoY2Rldik7CkBAIC0xMDM0LDggKzEwMjAsNiBAQAogdm9pZAogaW9fc3ViY2hhbm5lbF9yZWNvZ19kb25lKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2KQogewotCXN0cnVjdCBzdWJjaGFubmVsICpzY2g7Ci0KIAlpZiAoY3NzX2luaXRfZG9uZSA9PSAwKSB7CiAJCWNkZXYtPnByaXZhdGUtPmZsYWdzLnJlY29nX2RvbmUgPSAxOwogCQlyZXR1cm47CkBAIC0xMDQ2LDcgKzEwMzAsNiBAQAogCQkvKiBSZW1vdmUgZGV2aWNlIGZvdW5kIG5vdCBvcGVyYXRpb25hbC4gKi8KIAkJaWYgKCFnZXRfZGV2aWNlKCZjZGV2LT5kZXYpKQogCQkJYnJlYWs7Ci0JCXNjaCA9IHRvX3N1YmNoYW5uZWwoY2Rldi0+ZGV2LnBhcmVudCk7CiAJCVBSRVBBUkVfV09SSygmY2Rldi0+cHJpdmF0ZS0+a2lja193b3JrLAogCQkJICAgICBjY3dfZGV2aWNlX2NhbGxfc2NoX3VucmVnaXN0ZXIpOwogCQlxdWV1ZV93b3JrKHNsb3dfcGF0aF93cSwgJmNkZXYtPnByaXZhdGUtPmtpY2tfd29yayk7CkBAIC0xMTI5LDcgKzExMTIsNyBAQAogCSAqIFRyeSB0byBtb3ZlIHRoZSBjY3cgZGV2aWNlIHRvIGl0cyBuZXcgc3ViY2hhbm5lbC4KIAkgKiBOb3RlOiBkZXZpY2VfbW92ZSgpIGNoYW5nZXMgY2Rldi0+ZGV2LnBhcmVudAogCSAqLwotCXJjID0gZGV2aWNlX21vdmUoJmNkZXYtPmRldiwgJnNjaC0+ZGV2KTsKKwlyYyA9IGRldmljZV9tb3ZlKCZjZGV2LT5kZXYsICZzY2gtPmRldiwgRFBNX09SREVSX1BBUkVOVF9CRUZPUkVfREVWKTsKIAltdXRleF91bmxvY2soJnNjaC0+cmVnX211dGV4KTsKIAlpZiAocmMpIHsKIAkJQ0lPX01TR19FVkVOVCgwLCAiTW92aW5nIGRldmljZSAwLiV4LiUwNHggdG8gc3ViY2hhbm5lbCAiCkBAIC0xMjQzLDcgKzEyMjYsNyBAQAogCQkgKiB0aGUgY2N3X2RldmljZSBhbmQgZXhpdC4gVGhpcyBoYXBwZW5zIGZvciBhbGwgZWFybHkKIAkJICogZGV2aWNlcywgZS5nLiB0aGUgY29uc29sZS4KIAkJICovCi0JCXNjaC0+ZGV2LnVldmVudF9zdXBwcmVzcyA9IDA7CisJCWRldl9zZXRfdWV2ZW50X3N1cHByZXNzKCZzY2gtPmRldiwgMCk7CiAJCWtvYmplY3RfdWV2ZW50KCZzY2gtPmRldi5rb2JqLCBLT0JKX0FERCk7CiAJCWNkZXYtPmRldi5ncm91cHMgPSBjY3dkZXZfYXR0cl9ncm91cHM7CiAJCWRldmljZV9pbml0aWFsaXplKCZjZGV2LT5kZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuaCBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmgKaW5kZXggMGYyZTYzZS4uODVlMDE4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuaAorKysgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5oCkBAIC04MCw3ICs4MCw3IEBACiAKIGludCBjY3dfZGV2aWNlX2NhbmNlbF9oYWx0X2NsZWFyKHN0cnVjdCBjY3dfZGV2aWNlICopOwogCi12b2lkIGNjd19kZXZpY2VfZG9fdW5yZWdfcmVyZWcoc3RydWN0IHdvcmtfc3RydWN0ICopOwordm9pZCBjY3dfZGV2aWNlX2RvX3VuYmluZF9iaW5kKHN0cnVjdCB3b3JrX3N0cnVjdCAqKTsKIHZvaWQgY2N3X2RldmljZV9tb3ZlX3RvX29ycGhhbmFnZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7CiBpbnQgY2N3X2RldmljZV9pc19vcnBoYW4oc3RydWN0IGNjd19kZXZpY2UgKik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX2ZzbS5jIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2VfZnNtLmMKaW5kZXggOGRmNWVhYS4uODdiNGJmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2VfZnNtLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2VfZnNtLmMKQEAgLTE5NCw3ICsxOTQsNyBAQAogCSAgICBjZGV2LT5pZC5kZXZfdHlwZSAhPSBjZGV2LT5wcml2YXRlLT5zZW5zZWlkLmRldl90eXBlIHx8CiAJICAgIGNkZXYtPmlkLmRldl9tb2RlbCAhPSBjZGV2LT5wcml2YXRlLT5zZW5zZWlkLmRldl9tb2RlbCkgewogCQlQUkVQQVJFX1dPUksoJmNkZXYtPnByaXZhdGUtPmtpY2tfd29yaywKLQkJCSAgICAgY2N3X2RldmljZV9kb191bnJlZ19yZXJlZyk7CisJCQkgICAgIGNjd19kZXZpY2VfZG9fdW5iaW5kX2JpbmQpOwogCQlxdWV1ZV93b3JrKGNjd19kZXZpY2Vfd29yaywgJmNkZXYtPnByaXZhdGUtPmtpY2tfd29yayk7CiAJCXJldHVybiAwOwogCX0KQEAgLTM2Niw3ICszNjYsNyBAQAogCX0KIAkvKiBEcml2ZXIgZG9lc24ndCB3YW50IGRldmljZSBiYWNrLiAqLwogCWNjd19kZXZpY2Vfc2V0X25vdG9wZXIoY2Rldik7Ci0JUFJFUEFSRV9XT1JLKCZjZGV2LT5wcml2YXRlLT5raWNrX3dvcmssIGNjd19kZXZpY2VfZG9fdW5yZWdfcmVyZWcpOworCVBSRVBBUkVfV09SSygmY2Rldi0+cHJpdmF0ZS0+a2lja193b3JrLCBjY3dfZGV2aWNlX2RvX3VuYmluZF9iaW5kKTsKIAlxdWV1ZV93b3JrKGNjd19kZXZpY2Vfd29yaywgJmNkZXYtPnByaXZhdGUtPmtpY2tfd29yayk7CiB9CiAKQEAgLTcyOCw3ICs3MjgsNyBAQAogewogCXN0cnVjdCBzdWJjaGFubmVsICpzY2g7CiAKLQljZGV2LT5wcml2YXRlLT5zdGF0ZSA9IERFVl9TVEFURV9OT1RfT1BFUjsKKwljY3dfZGV2aWNlX3NldF9ub3RvcGVyKGNkZXYpOwogCXNjaCA9IHRvX3N1YmNoYW5uZWwoY2Rldi0+ZGV2LnBhcmVudCk7CiAJY3NzX3NjaGVkdWxlX2V2YWwoc2NoLT5zY2hpZCk7CiB9CkBAIC0xMDUyLDcgKzEwNTIsNyBAQAogCXNjaCA9IHRvX3N1YmNoYW5uZWwoY2Rldi0+ZGV2LnBhcmVudCk7CiAJLyoKIAkgKiBBbiBpbnRlcnJ1cHQgaW4gc3RhdGUgb2ZmbGluZSBtZWFucyBhIHByZXZpb3VzIGRpc2FibGUgd2FzIG5vdAotCSAqIHN1Y2Nlc3NmdWwuIFRyeSBhZ2Fpbi4KKwkgKiBzdWNjZXNzZnVsIC0gc2hvdWxkIG5vdCBoYXBwZW4sIGJ1dCB3ZSB0cnkgdG8gZGlzYWJsZSBhZ2Fpbi4KIAkgKi8KIAljaW9fZGlzYWJsZV9zdWJjaGFubmVsKHNjaCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9vcHMuYyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX29wcy5jCmluZGV4IGVhYmNjNDIuLjE1MTc1NGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX29wcy5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX29wcy5jCkBAIC02ODAsNyArNjgwLDcgQEAKIAlpZiAoY2Rldi0+cHJpdmF0ZS0+c3RhdGUgIT0gREVWX1NUQVRFX09OTElORSkKIAkJcmV0dXJuIC1FSU87CiAJaWYgKCFzY3N3X2lzX3RtKCZzY2gtPnNjaGliLnNjc3cpIHx8Ci0JICAgICEoc2Nzd19hY3RsKCZzY2gtPnNjaGliLnNjc3cpIHwgU0NTV19BQ1RMX1NUQVJUX1BFTkQpKQorCSAgICAhKHNjc3dfYWN0bCgmc2NoLT5zY2hpYi5zY3N3KSAmIFNDU1dfQUNUTF9TVEFSVF9QRU5EKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJcmV0dXJuIGNpb190bV9pbnRyZyhzY2gpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9xZGlvLmggYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW8uaAppbmRleCA0MmYyYjA5Li4xM2JjYjgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW8uaAorKysgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW8uaApAQCAtMTg2LDYgKzE4Niw5IEBACiAJLyogaW5wdXQgYnVmZmVyIGFja25vd2xlZGdlbWVudCBmbGFnICovCiAJaW50IHBvbGxpbmc7CiAKKwkvKiBmaXJzdCBBQ0snZWQgYnVmZmVyICovCisJaW50IGFja19zdGFydDsKKwogCS8qIGhvdyBtdWNoIHNiYWxzIGFyZSBhY2tub3dsZWRnZWQgd2l0aCBxZWJzbSAqLwogCWludCBhY2tfY291bnQ7CiAKQEAgLTIzNCw3ICsyMzcsNyBAQAogCWludCBmaXJzdF90b19jaGVjazsKIAogCS8qIGZpcnN0X3RvX2NoZWNrIG9mIHRoZSBsYXN0IHRpbWUgKi8KLQlpbnQgbGFzdF9tb3ZlX2Z0YzsKKwlpbnQgbGFzdF9tb3ZlOwogCiAJLyogYmVnaW5uaW5nIHBvc2l0aW9uIGZvciBjYWxsaW5nIHRoZSBwcm9ncmFtICovCiAJaW50IGZpcnN0X3RvX2tpY2s7CkBAIC0yNDQsNyArMjQ3LDYgQEAKIAogCXN0cnVjdCBxZGlvX2lycSAqaXJxX3B0cjsKIAlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgdGFza2xldDsKLQlzcGlubG9ja190IGxvY2s7CiAKIAkvKiBlcnJvciBjb25kaXRpb24gZHVyaW5nIGEgZGF0YSB0cmFuc2ZlciAqLwogCXVuc2lnbmVkIGludCBxZGlvX2Vycm9yOwpAQCAtMzU0LDcgKzM1Niw3IEBACiAJCSAgaW50IGF1dG9fYWNrKTsKIHZvaWQgcWRpb19jaGVja19vdXRib3VuZF9hZnRlcl90aGluaW50KHN0cnVjdCBxZGlvX3EgKnEpOwogaW50IHFkaW9faW5ib3VuZF9xX21vdmVkKHN0cnVjdCBxZGlvX3EgKnEpOwotdm9pZCBxZGlvX2tpY2tfaW5ib3VuZF9oYW5kbGVyKHN0cnVjdCBxZGlvX3EgKnEpOwordm9pZCBxZGlvX2tpY2tfaGFuZGxlcihzdHJ1Y3QgcWRpb19xICpxKTsKIHZvaWQgcWRpb19zdG9wX3BvbGxpbmcoc3RydWN0IHFkaW9fcSAqcSk7CiBpbnQgcWRpb19zaWdhX3N5bmNfcShzdHJ1Y3QgcWRpb19xICpxKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX2RlYnVnLmMgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fZGVidWcuYwppbmRleCBkYTdhZmIwLi5lMzQzNGIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fZGVidWcuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fZGVidWcuYwpAQCAtNjMsOCArNjMsOSBAQAogCXNlcV9wcmludGYobSwgImRldmljZSBzdGF0ZSBpbmRpY2F0b3I6ICVkXG4iLCAqKHUzMiAqKXEtPmlycV9wdHItPmRzY2kpOwogCXNlcV9wcmludGYobSwgIm5yX3VzZWQ6ICVkXG4iLCBhdG9taWNfcmVhZCgmcS0+bnJfYnVmX3VzZWQpKTsKIAlzZXFfcHJpbnRmKG0sICJmdGM6ICVkXG4iLCBxLT5maXJzdF90b19jaGVjayk7Ci0Jc2VxX3ByaW50ZihtLCAibGFzdF9tb3ZlX2Z0YzogJWRcbiIsIHEtPmxhc3RfbW92ZV9mdGMpOworCXNlcV9wcmludGYobSwgImxhc3RfbW92ZTogJWRcbiIsIHEtPmxhc3RfbW92ZSk7CiAJc2VxX3ByaW50ZihtLCAicG9sbGluZzogJWRcbiIsIHEtPnUuaW4ucG9sbGluZyk7CisJc2VxX3ByaW50ZihtLCAiYWNrIHN0YXJ0OiAlZFxuIiwgcS0+dS5pbi5hY2tfc3RhcnQpOwogCXNlcV9wcmludGYobSwgImFjayBjb3VudDogJWRcbiIsIHEtPnUuaW4uYWNrX2NvdW50KTsKIAlzZXFfcHJpbnRmKG0sICJzbHNiIGJ1ZmZlciBzdGF0ZXM6XG4iKTsKIAlzZXFfcHJpbnRmKG0sICJ8MCAgICAgIHw4ICAgICAgfDE2ICAgICB8MjQgICAgIHwzMiAgICAgfDQwICAgICB8NDggICAgIHw1NiAgNjN8XG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19tYWluLmMgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fbWFpbi5jCmluZGV4IDEwY2IwZjguLjllOGEyOTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19tYWluLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX21haW4uYwpAQCAtMzgwLDExICszODAsMTEgQEAKIAogCS8qIHNob3cgdGhlIGNhcmQgdGhhdCB3ZSBhcmUgbm90IHBvbGxpbmcgYW55bW9yZSAqLwogCWlmIChpc19xZWJzbShxKSkgewotCQlzZXRfYnVmX3N0YXRlcyhxLCBxLT5sYXN0X21vdmVfZnRjLCBTTFNCX1BfSU5QVVRfTk9UX0lOSVQsCisJCXNldF9idWZfc3RhdGVzKHEsIHEtPnUuaW4uYWNrX3N0YXJ0LCBTTFNCX1BfSU5QVVRfTk9UX0lOSVQsCiAJCQkgICAgICAgcS0+dS5pbi5hY2tfY291bnQpOwogCQlxLT51LmluLmFja19jb3VudCA9IDA7CiAJfSBlbHNlCi0JCXNldF9idWZfc3RhdGUocSwgcS0+bGFzdF9tb3ZlX2Z0YywgU0xTQl9QX0lOUFVUX05PVF9JTklUKTsKKwkJc2V0X2J1Zl9zdGF0ZShxLCBxLT51LmluLmFja19zdGFydCwgU0xTQl9QX0lOUFVUX05PVF9JTklUKTsKIH0KIAogc3RhdGljIHZvaWQgYW5ub3VuY2VfYnVmZmVyX2Vycm9yKHN0cnVjdCBxZGlvX3EgKnEsIGludCBjb3VudCkKQEAgLTQxOSwxNSArNDE5LDE1IEBACiAJCWlmICghcS0+dS5pbi5wb2xsaW5nKSB7CiAJCQlxLT51LmluLnBvbGxpbmcgPSAxOwogCQkJcS0+dS5pbi5hY2tfY291bnQgPSBjb3VudDsKLQkJCXEtPmxhc3RfbW92ZV9mdGMgPSBxLT5maXJzdF90b19jaGVjazsKKwkJCXEtPnUuaW4uYWNrX3N0YXJ0ID0gcS0+Zmlyc3RfdG9fY2hlY2s7CiAJCQlyZXR1cm47CiAJCX0KIAogCQkvKiBkZWxldGUgdGhlIHByZXZpb3VzIEFDSydzICovCi0JCXNldF9idWZfc3RhdGVzKHEsIHEtPmxhc3RfbW92ZV9mdGMsIFNMU0JfUF9JTlBVVF9OT1RfSU5JVCwKKwkJc2V0X2J1Zl9zdGF0ZXMocSwgcS0+dS5pbi5hY2tfc3RhcnQsIFNMU0JfUF9JTlBVVF9OT1RfSU5JVCwKIAkJCSAgICAgICBxLT51LmluLmFja19jb3VudCk7CiAJCXEtPnUuaW4uYWNrX2NvdW50ID0gY291bnQ7Ci0JCXEtPmxhc3RfbW92ZV9mdGMgPSBxLT5maXJzdF90b19jaGVjazsKKwkJcS0+dS5pbi5hY2tfc3RhcnQgPSBxLT5maXJzdF90b19jaGVjazsKIAkJcmV0dXJuOwogCX0KIApAQCAtNDM5LDE0ICs0MzksMTMgQEAKIAlpZiAocS0+dS5pbi5wb2xsaW5nKSB7CiAJCS8qIHJlc2V0IHRoZSBwcmV2aW91cyBBQ0sgYnV0IGZpcnN0IHNldCB0aGUgbmV3IG9uZSAqLwogCQlzZXRfYnVmX3N0YXRlKHEsIG5ldywgU0xTQl9QX0lOUFVUX0FDSyk7Ci0JCXNldF9idWZfc3RhdGUocSwgcS0+bGFzdF9tb3ZlX2Z0YywgU0xTQl9QX0lOUFVUX05PVF9JTklUKTsKLQl9Ci0JZWxzZSB7CisJCXNldF9idWZfc3RhdGUocSwgcS0+dS5pbi5hY2tfc3RhcnQsIFNMU0JfUF9JTlBVVF9OT1RfSU5JVCk7CisJfSBlbHNlIHsKIAkJcS0+dS5pbi5wb2xsaW5nID0gMTsKLQkJc2V0X2J1Zl9zdGF0ZShxLCBxLT5maXJzdF90b19jaGVjaywgU0xTQl9QX0lOUFVUX0FDSyk7CisJCXNldF9idWZfc3RhdGUocSwgbmV3LCBTTFNCX1BfSU5QVVRfQUNLKTsKIAl9CiAKLQlxLT5sYXN0X21vdmVfZnRjID0gbmV3OworCXEtPnUuaW4uYWNrX3N0YXJ0ID0gbmV3OwogCWNvdW50LS07CiAJaWYgKCFjb3VudCkKIAkJcmV0dXJuOwpAQCAtNDU1LDcgKzQ1NCw3IEBACiAJICogTmVlZCB0byBjaGFuZ2UgYWxsIFBSSU1FRCBidWZmZXJzIHRvIE5PVF9JTklULCBvdGhlcndpc2UKIAkgKiB3ZSdyZSBsb29zaW5nIGluaXRpYXRpdmUgaW4gdGhlIHRoaW5pbnQgY29kZS4KIAkgKi8KLQlzZXRfYnVmX3N0YXRlcyhxLCBuZXh0X2J1ZihxLT5maXJzdF90b19jaGVjayksIFNMU0JfUF9JTlBVVF9OT1RfSU5JVCwKKwlzZXRfYnVmX3N0YXRlcyhxLCBxLT5maXJzdF90b19jaGVjaywgU0xTQl9QX0lOUFVUX05PVF9JTklULAogCQkgICAgICAgY291bnQpOwogfQogCkBAIC01MjMsNyArNTIyLDggQEAKIAogCWJ1Zm5yID0gZ2V0X2luYm91bmRfYnVmZmVyX2Zyb250aWVyKHEpOwogCi0JaWYgKChidWZuciAhPSBxLT5sYXN0X21vdmVfZnRjKSB8fCBxLT5xZGlvX2Vycm9yKSB7CisJaWYgKChidWZuciAhPSBxLT5sYXN0X21vdmUpIHx8IHEtPnFkaW9fZXJyb3IpIHsKKwkJcS0+bGFzdF9tb3ZlID0gYnVmbnI7CiAJCWlmICghbmVlZF9zaWdhX3N5bmMocSkgJiYgIXBjaV9vdXRfc3VwcG9ydGVkKHEpKQogCQkJcS0+dS5pbi50aW1lc3RhbXAgPSBnZXRfdXNlY3MoKTsKIApAQCAtNTcwLDI5ICs1NzAsMzAgQEAKIAl9CiB9CiAKLXZvaWQgcWRpb19raWNrX2luYm91bmRfaGFuZGxlcihzdHJ1Y3QgcWRpb19xICpxKQordm9pZCBxZGlvX2tpY2tfaGFuZGxlcihzdHJ1Y3QgcWRpb19xICpxKQogewotCWludCBjb3VudCwgc3RhcnQsIGVuZDsKLQotCXFkaW9fcGVyZl9zdGF0X2luYygmcGVyZl9zdGF0cy5pbmJvdW5kX2hhbmRsZXIpOwotCi0Jc3RhcnQgPSBxLT5maXJzdF90b19raWNrOwotCWVuZCA9IHEtPmZpcnN0X3RvX2NoZWNrOwotCWlmIChlbmQgPj0gc3RhcnQpCi0JCWNvdW50ID0gZW5kIC0gc3RhcnQ7Ci0JZWxzZQotCQljb3VudCA9IGVuZCArIFFESU9fTUFYX0JVRkZFUlNfUEVSX1EgLSBzdGFydDsKLQotCURCRl9ERVZfRVZFTlQoREJGX0lORk8sIHEtPmlycV9wdHIsICJraWggczolM2QgYzolM2QiLCBzdGFydCwgY291bnQpOworCWludCBzdGFydCA9IHEtPmZpcnN0X3RvX2tpY2s7CisJaW50IGVuZCA9IHEtPmZpcnN0X3RvX2NoZWNrOworCWludCBjb3VudDsKIAogCWlmICh1bmxpa2VseShxLT5pcnFfcHRyLT5zdGF0ZSAhPSBRRElPX0lSUV9TVEFURV9BQ1RJVkUpKQogCQlyZXR1cm47CiAKLQlxLT5oYW5kbGVyKHEtPmlycV9wdHItPmNkZXYsIHEtPnFkaW9fZXJyb3IsIHEtPm5yLAotCQkgICBzdGFydCwgY291bnQsIHEtPmlycV9wdHItPmludF9wYXJtKTsKKwljb3VudCA9IHN1Yl9idWYoZW5kLCBzdGFydCk7CisKKwlpZiAocS0+aXNfaW5wdXRfcSkgeworCQlxZGlvX3BlcmZfc3RhdF9pbmMoJnBlcmZfc3RhdHMuaW5ib3VuZF9oYW5kbGVyKTsKKwkJREJGX0RFVl9FVkVOVChEQkZfSU5GTywgcS0+aXJxX3B0ciwgImtpaCBzOiUzZCBjOiUzZCIsIHN0YXJ0LCBjb3VudCk7CisJfSBlbHNlIHsKKwkJREJGX0RFVl9FVkVOVChEQkZfSU5GTywgcS0+aXJxX3B0ciwgImtvaDogbnI6JTFkIiwgcS0+bnIpOworCQlEQkZfREVWX0VWRU5UKERCRl9JTkZPLCBxLT5pcnFfcHRyLCAiczolM2QgYzolM2QiLCBzdGFydCwgY291bnQpOworCX0KKworCXEtPmhhbmRsZXIocS0+aXJxX3B0ci0+Y2RldiwgcS0+cWRpb19lcnJvciwgcS0+bnIsIHN0YXJ0LCBjb3VudCwKKwkJICAgcS0+aXJxX3B0ci0+aW50X3Bhcm0pOwogCiAJLyogZm9yIHRoZSBuZXh0IHRpbWUgKi8KLQlxLT5maXJzdF90b19raWNrID0gcS0+Zmlyc3RfdG9fY2hlY2s7CisJcS0+Zmlyc3RfdG9fa2ljayA9IGVuZDsKIAlxLT5xZGlvX2Vycm9yID0gMDsKIH0KIApAQCAtNjAzLDcgKzYwNCw3IEBACiAJaWYgKCFxZGlvX2luYm91bmRfcV9tb3ZlZChxKSkKIAkJcmV0dXJuOwogCi0JcWRpb19raWNrX2luYm91bmRfaGFuZGxlcihxKTsKKwlxZGlvX2tpY2tfaGFuZGxlcihxKTsKIAogCWlmICghcWRpb19pbmJvdW5kX3FfZG9uZShxKSkKIAkJLyogbWVhbnMgcG9sbCB0aW1lIGlzIG5vdCB5ZXQgb3ZlciAqLwpAQCAtNjk4LDIxICs2OTksMjEgQEAKIAogCWJ1Zm5yID0gZ2V0X291dGJvdW5kX2J1ZmZlcl9mcm9udGllcihxKTsKIAotCWlmICgoYnVmbnIgIT0gcS0+bGFzdF9tb3ZlX2Z0YykgfHwgcS0+cWRpb19lcnJvcikgewotCQlxLT5sYXN0X21vdmVfZnRjID0gYnVmbnI7CisJaWYgKChidWZuciAhPSBxLT5sYXN0X21vdmUpIHx8IHEtPnFkaW9fZXJyb3IpIHsKKwkJcS0+bGFzdF9tb3ZlID0gYnVmbnI7CiAJCURCRl9ERVZfRVZFTlQoREJGX0lORk8sIHEtPmlycV9wdHIsICJvdXQgbW92ZWQ6JTFkIiwgcS0+bnIpOwogCQlyZXR1cm4gMTsKIAl9IGVsc2UKIAkJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHFkaW9fa2lja19vdXRib3VuZF9xKHN0cnVjdCBxZGlvX3EgKnEpCitzdGF0aWMgaW50IHFkaW9fa2lja19vdXRib3VuZF9xKHN0cnVjdCBxZGlvX3EgKnEpCiB7CiAJdW5zaWduZWQgaW50IGJ1c3lfYml0OwogCWludCBjYzsKIAogCWlmICghbmVlZF9zaWdhX291dChxKSkKLQkJcmV0dXJuOworCQlyZXR1cm4gMDsKIAogCURCRl9ERVZfRVZFTlQoREJGX0lORk8sIHEtPmlycV9wdHIsICJzaWdhLXc6JTFkIiwgcS0+bnIpOwogCXFkaW9fcGVyZl9zdGF0X2luYygmcGVyZl9zdGF0cy5zaWdhX291dCk7CkBAIC03MjQsNzUgKzcyNSwzNyBAQAogCWNhc2UgMjoKIAkJaWYgKGJ1c3lfYml0KSB7CiAJCQlEQkZfRVJST1IoIiU0eCBjYzIgUkVQOiUxZCIsIFNDSF9OTyhxKSwgcS0+bnIpOwotCQkJcS0+cWRpb19lcnJvciA9IGNjIHwgUURJT19FUlJPUl9TSUdBX0JVU1k7Ci0JCX0gZWxzZSB7Ci0JCQlEQkZfREVWX0VWRU5UKERCRl9JTkZPLCBxLT5pcnFfcHRyLCAic2lnYS13IGNjMjolMWQiLAotCQkJCSAgICAgIHEtPm5yKTsKLQkJCXEtPnFkaW9fZXJyb3IgPSBjYzsKLQkJfQorCQkJY2MgfD0gUURJT19FUlJPUl9TSUdBX0JVU1k7CisJCX0gZWxzZQorCQkJREJGX0RFVl9FVkVOVChEQkZfSU5GTywgcS0+aXJxX3B0ciwgInNpZ2EtdyBjYzI6JTFkIiwgcS0+bnIpOwogCQlicmVhazsKIAljYXNlIDE6CiAJY2FzZSAzOgogCQlEQkZfRVJST1IoIiU0eCBTSUdBLVc6JTFkIiwgU0NIX05PKHEpLCBjYyk7Ci0JCXEtPnFkaW9fZXJyb3IgPSBjYzsKIAkJYnJlYWs7CiAJfQotfQotCi1zdGF0aWMgdm9pZCBxZGlvX2tpY2tfb3V0Ym91bmRfaGFuZGxlcihzdHJ1Y3QgcWRpb19xICpxKQotewotCWludCBzdGFydCwgZW5kLCBjb3VudDsKLQotCXN0YXJ0ID0gcS0+Zmlyc3RfdG9fa2ljazsKLQllbmQgPSBxLT5sYXN0X21vdmVfZnRjOwotCWlmIChlbmQgPj0gc3RhcnQpCi0JCWNvdW50ID0gZW5kIC0gc3RhcnQ7Ci0JZWxzZQotCQljb3VudCA9IGVuZCArIFFESU9fTUFYX0JVRkZFUlNfUEVSX1EgLSBzdGFydDsKLQotCURCRl9ERVZfRVZFTlQoREJGX0lORk8sIHEtPmlycV9wdHIsICJraWNrb3V0aDogJTFkIiwgcS0+bnIpOwotCURCRl9ERVZfRVZFTlQoREJGX0lORk8sIHEtPmlycV9wdHIsICJzOiUzZCBjOiUzZCIsIHN0YXJ0LCBjb3VudCk7Ci0KLQlpZiAodW5saWtlbHkocS0+aXJxX3B0ci0+c3RhdGUgIT0gUURJT19JUlFfU1RBVEVfQUNUSVZFKSkKLQkJcmV0dXJuOwotCi0JcS0+aGFuZGxlcihxLT5pcnFfcHRyLT5jZGV2LCBxLT5xZGlvX2Vycm9yLCBxLT5uciwgc3RhcnQsIGNvdW50LAotCQkgICBxLT5pcnFfcHRyLT5pbnRfcGFybSk7Ci0KLQkvKiBmb3IgdGhlIG5leHQgdGltZTogKi8KLQlxLT5maXJzdF90b19raWNrID0gcS0+bGFzdF9tb3ZlX2Z0YzsKLQlxLT5xZGlvX2Vycm9yID0gMDsKKwlyZXR1cm4gY2M7CiB9CiAKIHN0YXRpYyB2b2lkIF9fcWRpb19vdXRib3VuZF9wcm9jZXNzaW5nKHN0cnVjdCBxZGlvX3EgKnEpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQogCXFkaW9fcGVyZl9zdGF0X2luYygmcGVyZl9zdGF0cy50YXNrbGV0X291dGJvdW5kKTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcS0+bG9jaywgZmxhZ3MpOwotCiAJQlVHX09OKGF0b21pY19yZWFkKCZxLT5ucl9idWZfdXNlZCkgPCAwKTsKIAogCWlmIChxZGlvX291dGJvdW5kX3FfbW92ZWQocSkpCi0JCXFkaW9fa2lja19vdXRib3VuZF9oYW5kbGVyKHEpOworCQlxZGlvX2tpY2tfaGFuZGxlcihxKTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnEtPmxvY2ssIGZsYWdzKTsKLQotCWlmIChxdWV1ZV90eXBlKHEpID09IFFESU9fWkZDUF9RRk1UKSB7CisJaWYgKHF1ZXVlX3R5cGUocSkgPT0gUURJT19aRkNQX1FGTVQpCiAJCWlmICghcGNpX291dF9zdXBwb3J0ZWQocSkgJiYgIXFkaW9fb3V0Ym91bmRfcV9kb25lKHEpKQotCQkJdGFza2xldF9zY2hlZHVsZSgmcS0+dGFza2xldCk7Ci0JCXJldHVybjsKLQl9CisJCQlnb3RvIHNjaGVkOwogCiAJLyogYmFpbCBvdXQgZm9yIEhpcGVyU29ja2V0cyB1bmljYXN0IHF1ZXVlcyAqLwogCWlmIChxdWV1ZV90eXBlKHEpID09IFFESU9fSVFESU9fUUZNVCAmJiAhbXVsdGljYXN0X291dGJvdW5kKHEpKQogCQlyZXR1cm47CiAKIAlpZiAoKHF1ZXVlX3R5cGUocSkgPT0gUURJT19JUURJT19RRk1UKSAmJgotCSAgICAoYXRvbWljX3JlYWQoJnEtPm5yX2J1Zl91c2VkKSkgPiBRRElPX0lRRElPX1BPTExfTFZMKSB7Ci0JCXRhc2tsZXRfc2NoZWR1bGUoJnEtPnRhc2tsZXQpOwotCQlyZXR1cm47Ci0JfQorCSAgICAoYXRvbWljX3JlYWQoJnEtPm5yX2J1Zl91c2VkKSkgPiBRRElPX0lRRElPX1BPTExfTFZMKQorCQlnb3RvIHNjaGVkOwogCiAJaWYgKHEtPnUub3V0LnBjaV9vdXRfZW5hYmxlZCkKIAkJcmV0dXJuOwpAQCAtODEwLDYgKzc3MywxMiBAQAogCQkJcWRpb19wZXJmX3N0YXRfaW5jKCZwZXJmX3N0YXRzLmRlYnVnX3RsX291dF90aW1lcik7CiAJCX0KIAl9CisJcmV0dXJuOworCitzY2hlZDoKKwlpZiAodW5saWtlbHkocS0+aXJxX3B0ci0+c3RhdGUgPT0gUURJT19JUlFfU1RBVEVfU1RPUFBFRCkpCisJCXJldHVybjsKKwl0YXNrbGV0X3NjaGVkdWxlKCZxLT50YXNrbGV0KTsKIH0KIAogLyogb3V0Ym91bmQgdGFza2xldCAqLwpAQCAtODIyLDYgKzc5MSw5IEBACiB2b2lkIHFkaW9fb3V0Ym91bmRfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKQogewogCXN0cnVjdCBxZGlvX3EgKnEgPSAoc3RydWN0IHFkaW9fcSAqKWRhdGE7CisKKwlpZiAodW5saWtlbHkocS0+aXJxX3B0ci0+c3RhdGUgPT0gUURJT19JUlFfU1RBVEVfU1RPUFBFRCkpCisJCXJldHVybjsKIAl0YXNrbGV0X3NjaGVkdWxlKCZxLT50YXNrbGV0KTsKIH0KIApAQCAtODYzLDYgKzgzNSw5IEBACiAJaW50IGk7CiAJc3RydWN0IHFkaW9fcSAqcTsKIAorCWlmICh1bmxpa2VseShpcnFfcHRyLT5zdGF0ZSA9PSBRRElPX0lSUV9TVEFURV9TVE9QUEVEKSkKKwkJcmV0dXJuOworCiAJcWRpb19wZXJmX3N0YXRfaW5jKCZwZXJmX3N0YXRzLnBjaV9pbnQpOwogCiAJZm9yX2VhY2hfaW5wdXRfcXVldWUoaXJxX3B0ciwgcSwgaSkKQEAgLTEwNjUsOCArMTA0MCw5IEBACiAgKiBAY2RldjogYXNzb2NpYXRlZCBjY3cgZGV2aWNlCiAgKiBAaG93OiB1c2UgaGFsdCBvciBjbGVhciB0byBzaHV0ZG93bgogICoKLSAqIFRoaXMgZnVuY3Rpb24gY2FsbHMgcWRpb19zaHV0ZG93bigpIGZvciBAY2RldiB3aXRoIG1ldGhvZCBAaG93Ci0gKiBhbmQgb24gc3VjY2VzcyBxZGlvX2ZyZWUoKSBmb3IgQGNkZXYuCisgKiBUaGlzIGZ1bmN0aW9uIGNhbGxzIHFkaW9fc2h1dGRvd24oKSBmb3IgQGNkZXYgd2l0aCBtZXRob2QgQGhvdy4KKyAqIGFuZCBxZGlvX2ZyZWUoKS4gVGhlIHFkaW9fZnJlZSgpIHJldHVybiB2YWx1ZSBpcyBpZ25vcmVkIHNpbmNlCisgKiAhaXJxX3B0ciBpcyBhbHJlYWR5IGNoZWNrZWQuCiAgKi8KIGludCBxZGlvX2NsZWFudXAoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYsIGludCBob3cpCiB7CkBAIC0xMDc3LDggKzEwNTMsOCBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAogCXJjID0gcWRpb19zaHV0ZG93bihjZGV2LCBob3cpOwotCWlmIChyYyA9PSAwKQotCQlyYyA9IHFkaW9fZnJlZShjZGV2KTsKKworCXFkaW9fZnJlZShjZGV2KTsKIAlyZXR1cm4gcmM7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChxZGlvX2NsZWFudXApOwpAQCAtMTA5MCwxMSArMTA2NiwxMSBAQAogCWludCBpOwogCiAJZm9yX2VhY2hfaW5wdXRfcXVldWUoaXJxX3B0ciwgcSwgaSkKLQkJdGFza2xldF9kaXNhYmxlKCZxLT50YXNrbGV0KTsKKwkJdGFza2xldF9raWxsKCZxLT50YXNrbGV0KTsKIAogCWZvcl9lYWNoX291dHB1dF9xdWV1ZShpcnFfcHRyLCBxLCBpKSB7Ci0JCXRhc2tsZXRfZGlzYWJsZSgmcS0+dGFza2xldCk7CiAJCWRlbF90aW1lcigmcS0+dS5vdXQudGltZXIpOworCQl0YXNrbGV0X2tpbGwoJnEtPnRhc2tsZXQpOwogCX0KIH0KIApAQCAtMTExMiw2ICsxMDg4LDcgQEAKIAlpZiAoIWlycV9wdHIpCiAJCXJldHVybiAtRU5PREVWOwogCisJQlVHX09OKGlycXNfZGlzYWJsZWQoKSk7CiAJREJGX0VWRU5UKCJxc2h1dGRvd246JTR4IiwgY2Rldi0+cHJpdmF0ZS0+c2NoaWQuc2NoX25vKTsKIAogCW11dGV4X2xvY2soJmlycV9wdHItPnNldHVwX211dGV4KTsKQEAgLTExMjQsNiArMTEwMSwxMiBAQAogCQlyZXR1cm4gMDsKIAl9CiAKKwkvKgorCSAqIEluZGljYXRlIHRoYXQgdGhlIGRldmljZSBpcyBnb2luZyBkb3duLiBTY2hlZHVsaW5nIHRoZSBxdWV1ZQorCSAqIHRhc2tsZXRzIGlzIGZvcmJpZGRlbiBmcm9tIGhlcmUgb24uCisJICovCisJcWRpb19zZXRfc3RhdGUoaXJxX3B0ciwgUURJT19JUlFfU1RBVEVfU1RPUFBFRCk7CisKIAl0aXFkaW9fcmVtb3ZlX2lucHV0X3F1ZXVlcyhpcnFfcHRyKTsKIAlxZGlvX3NodXRkb3duX3F1ZXVlcyhjZGV2KTsKIAlxZGlvX3NodXRkb3duX2RlYnVnX2VudHJpZXMoaXJxX3B0ciwgY2Rldik7CkBAIC0xNDAzLDkgKzEzODYsOCBAQAogCXN3aXRjaCAoaXJxX3B0ci0+c3RhdGUpIHsKIAljYXNlIFFESU9fSVJRX1NUQVRFX1NUT1BQRUQ6CiAJY2FzZSBRRElPX0lSUV9TVEFURV9FUlI6Ci0JCW11dGV4X3VubG9jaygmaXJxX3B0ci0+c2V0dXBfbXV0ZXgpOwotCQlxZGlvX3NodXRkb3duKGNkZXYsIFFESU9fRkxBR19DTEVBTlVQX1VTSU5HX0NMRUFSKTsKLQkJcmV0dXJuIC1FSU87CisJCXJjID0gLUVJTzsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcWRpb19zZXRfc3RhdGUoaXJxX3B0ciwgUURJT19JUlFfU1RBVEVfQUNUSVZFKTsKIAkJcmMgPSAwOwpAQCAtMTQ0MiwxMCArMTQyNCwxMCBAQAogICogQGJ1Zm5yOiBmaXJzdCBidWZmZXIgdG8gcHJvY2VzcwogICogQGNvdW50OiBob3cgbWFueSBidWZmZXJzIGFyZSBlbXB0aWVkCiAgKi8KLXN0YXRpYyB2b2lkIGhhbmRsZV9pbmJvdW5kKHN0cnVjdCBxZGlvX3EgKnEsIHVuc2lnbmVkIGludCBjYWxsZmxhZ3MsCi0JCQkgICBpbnQgYnVmbnIsIGludCBjb3VudCkKK3N0YXRpYyBpbnQgaGFuZGxlX2luYm91bmQoc3RydWN0IHFkaW9fcSAqcSwgdW5zaWduZWQgaW50IGNhbGxmbGFncywKKwkJCSAgaW50IGJ1Zm5yLCBpbnQgY291bnQpCiB7Ci0JaW50IHVzZWQsIGNjLCBkaWZmOworCWludCB1c2VkLCBkaWZmOwogCiAJaWYgKCFxLT51LmluLnBvbGxpbmcpCiAJCWdvdG8gc2V0OwpAQCAtMTQ1NiwxOSArMTQzOCwxOCBAQAogCQlxLT51LmluLnBvbGxpbmcgPSAwOwogCQlxLT51LmluLmFja19jb3VudCA9IDA7CiAJCWdvdG8gc2V0OwotCX0gZWxzZSBpZiAoYnVmX2luX2JldHdlZW4ocS0+bGFzdF9tb3ZlX2Z0YywgYnVmbnIsIGNvdW50KSkgeworCX0gZWxzZSBpZiAoYnVmX2luX2JldHdlZW4ocS0+dS5pbi5hY2tfc3RhcnQsIGJ1Zm5yLCBjb3VudCkpIHsKIAkJaWYgKGlzX3FlYnNtKHEpKSB7Ci0JCQkvKiBwYXJ0aWFsIG92ZXJ3cml0ZSwganVzdCB1cGRhdGUgbGFzdF9tb3ZlX2Z0YyAqLworCQkJLyogcGFydGlhbCBvdmVyd3JpdGUsIGp1c3QgdXBkYXRlIGFja19zdGFydCAqLwogCQkJZGlmZiA9IGFkZF9idWYoYnVmbnIsIGNvdW50KTsKLQkJCWRpZmYgPSBzdWJfYnVmKGRpZmYsIHEtPmxhc3RfbW92ZV9mdGMpOworCQkJZGlmZiA9IHN1Yl9idWYoZGlmZiwgcS0+dS5pbi5hY2tfc3RhcnQpOwogCQkJcS0+dS5pbi5hY2tfY291bnQgLT0gZGlmZjsKIAkJCWlmIChxLT51LmluLmFja19jb3VudCA8PSAwKSB7CiAJCQkJcS0+dS5pbi5wb2xsaW5nID0gMDsKIAkJCQlxLT51LmluLmFja19jb3VudCA9IDA7Ci0JCQkJLyogVE9ETzogbXVzdCB3ZSBzZXQgbGFzdF9tb3ZlX2Z0YyB0byBzb21ldGhpbmcgbWVhbmluZ2Z1bD8gKi8KIAkJCQlnb3RvIHNldDsKIAkJCX0KLQkJCXEtPmxhc3RfbW92ZV9mdGMgPSBhZGRfYnVmKHEtPmxhc3RfbW92ZV9mdGMsIGRpZmYpOworCQkJcS0+dS5pbi5hY2tfc3RhcnQgPSBhZGRfYnVmKHEtPnUuaW4uYWNrX3N0YXJ0LCBkaWZmKTsKIAkJfQogCQllbHNlCiAJCQkvKiB0aGUgb25seSBBQ0sgd2lsbCBiZSBkZWxldGVkLCBzbyBzdG9wIHBvbGxpbmcgKi8KQEAgLTE0ODMsMTMgKzE0NjQsMTEgQEAKIAogCS8qIG5vIG5lZWQgdG8gc2lnbmFsIGFzIGxvbmcgYXMgdGhlIGFkYXB0ZXIgaGFkIGZyZWUgYnVmZmVycyAqLwogCWlmICh1c2VkKQotCQlyZXR1cm47CisJCXJldHVybiAwOwogCi0JaWYgKG5lZWRfc2lnYV9pbihxKSkgewotCQljYyA9IHFkaW9fc2lnYV9pbnB1dChxKTsKLQkJaWYgKGNjKQotCQkJcS0+cWRpb19lcnJvciA9IGNjOwotCX0KKwlpZiAobmVlZF9zaWdhX2luKHEpKQorCQlyZXR1cm4gcWRpb19zaWdhX2lucHV0KHEpOworCXJldHVybiAwOwogfQogCiAvKioKQEAgLTE0OTksMTEgKzE0NzgsMTEgQEAKICAqIEBidWZucjogZmlyc3QgYnVmZmVyIHRvIHByb2Nlc3MKICAqIEBjb3VudDogaG93IG1hbnkgYnVmZmVycyBhcmUgZmlsbGVkCiAgKi8KLXN0YXRpYyB2b2lkIGhhbmRsZV9vdXRib3VuZChzdHJ1Y3QgcWRpb19xICpxLCB1bnNpZ25lZCBpbnQgY2FsbGZsYWdzLAotCQkJICAgIGludCBidWZuciwgaW50IGNvdW50KQorc3RhdGljIGludCBoYW5kbGVfb3V0Ym91bmQoc3RydWN0IHFkaW9fcSAqcSwgdW5zaWduZWQgaW50IGNhbGxmbGFncywKKwkJCSAgIGludCBidWZuciwgaW50IGNvdW50KQogewogCXVuc2lnbmVkIGNoYXIgc3RhdGU7Ci0JaW50IHVzZWQ7CisJaW50IHVzZWQsIHJjID0gMDsKIAogCXFkaW9fcGVyZl9zdGF0X2luYygmcGVyZl9zdGF0cy5vdXRib3VuZF9oYW5kbGVyKTsKIApAQCAtMTUxOCwyNyArMTQ5NywyNiBAQAogCiAJaWYgKHF1ZXVlX3R5cGUocSkgPT0gUURJT19JUURJT19RRk1UKSB7CiAJCWlmIChtdWx0aWNhc3Rfb3V0Ym91bmQocSkpCi0JCQlxZGlvX2tpY2tfb3V0Ym91bmRfcShxKTsKKwkJCXJjID0gcWRpb19raWNrX291dGJvdW5kX3EocSk7CiAJCWVsc2UKIAkJCWlmICgocS0+aXJxX3B0ci0+c3NxZF9kZXNjLm1td2MgPiAxKSAmJgogCQkJICAgIChjb3VudCA+IDEpICYmCiAJCQkgICAgKGNvdW50IDw9IHEtPmlycV9wdHItPnNzcWRfZGVzYy5tbXdjKSkgewogCQkJCS8qIGV4cGxvaXQgZW5oYW5jZWQgU0lHQSAqLwogCQkJCXEtPnUub3V0LnVzZV9lbmhfc2lnYSA9IDE7Ci0JCQkJcWRpb19raWNrX291dGJvdW5kX3EocSk7CisJCQkJcmMgPSBxZGlvX2tpY2tfb3V0Ym91bmRfcShxKTsKIAkJCX0gZWxzZSB7CiAJCQkJLyoKIAkJCQkqIE9uZSBzaWdhLXcgcGVyIGJ1ZmZlciByZXF1aXJlZCBmb3IgdW5pY2FzdAogCQkJCSogSGlwZXJTb2NrZXRzLgogCQkJCSovCiAJCQkJcS0+dS5vdXQudXNlX2VuaF9zaWdhID0gMDsKLQkJCQl3aGlsZSAoY291bnQtLSkKLQkJCQkJcWRpb19raWNrX291dGJvdW5kX3EocSk7CisJCQkJd2hpbGUgKGNvdW50LS0pIHsKKwkJCQkJcmMgPSBxZGlvX2tpY2tfb3V0Ym91bmRfcShxKTsKKwkJCQkJaWYgKHJjKQorCQkJCQkJZ290byBvdXQ7CisJCQkJfQogCQkJfQotCi0JCS8qIHJlcG9ydCBDQz0yIGNvbmRpdGlvbnMgc3luY2hyb25vdXNseSAqLwotCQlpZiAocS0+cWRpb19lcnJvcikKLQkJCV9fcWRpb19vdXRib3VuZF9wcm9jZXNzaW5nKHEpOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTE1NTAsMTQgKzE1MjgsMTQgQEAKIAkvKiB0cnkgdG8gZmFzdCByZXF1ZXVlIGJ1ZmZlcnMgKi8KIAlnZXRfYnVmX3N0YXRlKHEsIHByZXZfYnVmKGJ1Zm5yKSwgJnN0YXRlLCAwKTsKIAlpZiAoc3RhdGUgIT0gU0xTQl9DVV9PVVRQVVRfUFJJTUVEKQotCQlxZGlvX2tpY2tfb3V0Ym91bmRfcShxKTsKKwkJcmMgPSBxZGlvX2tpY2tfb3V0Ym91bmRfcShxKTsKIAllbHNlIHsKIAkJREJGX0RFVl9FVkVOVChEQkZfSU5GTywgcS0+aXJxX3B0ciwgImZhc3QtcmVxIik7CiAJCXFkaW9fcGVyZl9zdGF0X2luYygmcGVyZl9zdGF0cy5mYXN0X3JlcXVldWUpOwogCX0KIG91dDoKLQkvKiBGaXhtZTogY291bGQgd2FpdCBmb3JldmVyIGlmIGNhbGxlZCBmcm9tIHByb2Nlc3MgY29udGV4dCAqLwogCXRhc2tsZXRfc2NoZWR1bGUoJnEtPnRhc2tsZXQpOworCXJldHVybiByYzsKIH0KIAogLyoqCkBAIC0xNTk2LDE0ICsxNTc0LDEyIEBACiAJCXJldHVybiAtRUJVU1k7CiAKIAlpZiAoY2FsbGZsYWdzICYgUURJT19GTEFHX1NZTkNfSU5QVVQpCi0JCWhhbmRsZV9pbmJvdW5kKGlycV9wdHItPmlucHV0X3FzW3FfbnJdLCBjYWxsZmxhZ3MsIGJ1Zm5yLAotCQkJICAgICAgIGNvdW50KTsKKwkJcmV0dXJuIGhhbmRsZV9pbmJvdW5kKGlycV9wdHItPmlucHV0X3FzW3FfbnJdLAorCQkJCSAgICAgIGNhbGxmbGFncywgYnVmbnIsIGNvdW50KTsKIAllbHNlIGlmIChjYWxsZmxhZ3MgJiBRRElPX0ZMQUdfU1lOQ19PVVRQVVQpCi0JCWhhbmRsZV9vdXRib3VuZChpcnFfcHRyLT5vdXRwdXRfcXNbcV9ucl0sIGNhbGxmbGFncywgYnVmbnIsCi0JCQkJY291bnQpOwotCWVsc2UKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JcmV0dXJuIDA7CisJCXJldHVybiBoYW5kbGVfb3V0Ym91bmQoaXJxX3B0ci0+b3V0cHV0X3FzW3FfbnJdLAorCQkJCSAgICAgICBjYWxsZmxhZ3MsIGJ1Zm5yLCBjb3VudCk7CisJcmV0dXJuIC1FSU5WQUw7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChkb19RRElPKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX3NldHVwLmMgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fc2V0dXAuYwppbmRleCBjMDgzNTZiLi4xOGQ1NGZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fc2V0dXAuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fc2V0dXAuYwpAQCAtMTE3LDcgKzExNyw2IEBACiAJcS0+bWFzayA9IDEgPDwgKDMxIC0gaSk7CiAJcS0+bnIgPSBpOwogCXEtPmhhbmRsZXIgPSBoYW5kbGVyOwotCXNwaW5fbG9ja19pbml0KCZxLT5sb2NrKTsKIH0KIAogc3RhdGljIHZvaWQgc2V0dXBfc3RvcmFnZV9saXN0cyhzdHJ1Y3QgcWRpb19xICpxLCBzdHJ1Y3QgcWRpb19pcnEgKmlycV9wdHIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fdGhpbmludC5jIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX3RoaW5pbnQuYwppbmRleCA4ZTkwZTE0Li5jNjU1ZDAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fdGhpbmludC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb190aGluaW50LmMKQEAgLTMxLDYgKzMxLDcgQEAKIAogLyogbGlzdCBvZiB0aGluIGludGVycnVwdCBpbnB1dCBxdWV1ZXMgKi8KIHN0YXRpYyBMSVNUX0hFQUQodGlxX2xpc3QpOworREVGSU5FX01VVEVYKHRpcV9saXN0X2xvY2spOwogCiAvKiBhZGFwdGVyIGxvY2FsIHN1bW1hcnkgaW5kaWNhdG9yICovCiBzdGF0aWMgdW5zaWduZWQgY2hhciAqdGlxZGlvX2Fsc2k7CkBAIC05NSwxMiArOTYsMTEgQEAKIAlpZiAoIWNzc19xZGlvX29taXRfc3ZzICYmIGlycV9wdHItPnNpZ2FfZmxhZy5zeW5jKQogCQljc3NfcWRpb19vbWl0X3N2cyA9IDE7CiAKLQlmb3JfZWFjaF9pbnB1dF9xdWV1ZShpcnFfcHRyLCBxLCBpKSB7CisJbXV0ZXhfbG9jaygmdGlxX2xpc3RfbG9jayk7CisJZm9yX2VhY2hfaW5wdXRfcXVldWUoaXJxX3B0ciwgcSwgaSkKIAkJbGlzdF9hZGRfcmN1KCZxLT5lbnRyeSwgJnRpcV9saXN0KTsKLQkJc3luY2hyb25pemVfcmN1KCk7Ci0JfQorCW11dGV4X3VubG9jaygmdGlxX2xpc3RfbG9jayk7CiAJeGNoZyhpcnFfcHRyLT5kc2NpLCAxKTsKLQl0YXNrbGV0X3NjaGVkdWxlKCZ0aXFkaW9fdGFza2xldCk7CiB9CiAKIC8qCkBAIC0xMTgsNyArMTE4LDEwIEBACiAJCS8qIGlmIGVzdGFibGlzaCB0cmlnZ2VyZWQgYW4gZXJyb3IgKi8KIAkJaWYgKCFxIHx8ICFxLT5lbnRyeS5wcmV2IHx8ICFxLT5lbnRyeS5uZXh0KQogCQkJY29udGludWU7CisKKwkJbXV0ZXhfbG9jaygmdGlxX2xpc3RfbG9jayk7CiAJCWxpc3RfZGVsX3JjdSgmcS0+ZW50cnkpOworCQltdXRleF91bmxvY2soJnRpcV9saXN0X2xvY2spOwogCQlzeW5jaHJvbml6ZV9yY3UoKTsKIAl9CiB9CkBAIC0xNTUsMTUgKzE1OCwxNSBAQAogCSAqLwogCXFkaW9fY2hlY2tfb3V0Ym91bmRfYWZ0ZXJfdGhpbmludChxKTsKIAotYWdhaW46CiAJaWYgKCFxZGlvX2luYm91bmRfcV9tb3ZlZChxKSkKIAkJcmV0dXJuOwogCi0JcWRpb19raWNrX2luYm91bmRfaGFuZGxlcihxKTsKKwlxZGlvX2tpY2tfaGFuZGxlcihxKTsKIAogCWlmICghdGlxZGlvX2luYm91bmRfcV9kb25lKHEpKSB7CiAJCXFkaW9fcGVyZl9zdGF0X2luYygmcGVyZl9zdGF0cy50aGluaW50X2luYm91bmRfbG9vcCk7Ci0JCWdvdG8gYWdhaW47CisJCWlmIChsaWtlbHkocS0+aXJxX3B0ci0+c3RhdGUgIT0gUURJT19JUlFfU1RBVEVfU1RPUFBFRCkpCisJCQl0YXNrbGV0X3NjaGVkdWxlKCZxLT50YXNrbGV0KTsKIAl9CiAKIAlxZGlvX3N0b3BfcG9sbGluZyhxKTsKQEAgLTE3Myw3ICsxNzYsOCBAQAogCSAqLwogCWlmICghdGlxZGlvX2luYm91bmRfcV9kb25lKHEpKSB7CiAJCXFkaW9fcGVyZl9zdGF0X2luYygmcGVyZl9zdGF0cy50aGluaW50X2luYm91bmRfbG9vcDIpOwotCQlnb3RvIGFnYWluOworCQlpZiAobGlrZWx5KHEtPmlycV9wdHItPnN0YXRlICE9IFFESU9fSVJRX1NUQVRFX1NUT1BQRUQpKQorCQkJdGFza2xldF9zY2hlZHVsZSgmcS0+dGFza2xldCk7CiAJfQogfQogCkBAIC0zNjYsMTAgKzM3MCwxMSBAQAogCiB2b2lkIF9fZXhpdCB0aXFkaW9fdW5yZWdpc3Rlcl90aGluaW50cyh2b2lkKQogewotCXRhc2tsZXRfZGlzYWJsZSgmdGlxZGlvX3Rhc2tsZXQpOworCVdBUk5fT04oIWxpc3RfZW1wdHkoJnRpcV9saXN0KSk7CiAKIAlpZiAodGlxZGlvX2Fsc2kpIHsKIAkJczM5MF91bnJlZ2lzdGVyX2FkYXB0ZXJfaW50ZXJydXB0KHRpcWRpb19hbHNpLCBRRElPX0FJUlFfSVNDKTsKIAkJaXNjX3VucmVnaXN0ZXIoUURJT19BSVJRX0lTQyk7CiAJfQorCXRhc2tsZXRfa2lsbCgmdGlxZGlvX3Rhc2tsZXQpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfYXBpLmMgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9hcGkuYwppbmRleCBjYjIyYjk3Li42NWI2YTk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9hcGkuYworKysgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9hcGkuYwpAQCAtMTI4LDggKzEyOCw3IEBACiAJaWYgKGwgPT0gemRldi0+bGlzdC5wcmV2KQogCQlyZXR1cm47CiAJLyogTW92ZSB6ZGV2IGJlaGluZCBsICovCi0JbGlzdF9kZWwoJnpkZXYtPmxpc3QpOwotCWxpc3RfYWRkKCZ6ZGV2LT5saXN0LCBsKTsKKwlsaXN0X21vdmUoJnpkZXYtPmxpc3QsIGwpOwogfQogCiAvKioKQEAgLTE1Nyw4ICsxNTYsNyBAQAogCWlmIChsID09IHpkZXYtPmxpc3QubmV4dCkKIAkJcmV0dXJuOwogCS8qIE1vdmUgemRldiBiZWZvcmUgbCAqLwotCWxpc3RfZGVsKCZ6ZGV2LT5saXN0KTsKLQlsaXN0X2FkZF90YWlsKCZ6ZGV2LT5saXN0LCBsKTsKKwlsaXN0X21vdmVfdGFpbCgmemRldi0+bGlzdCwgbCk7CiB9CiAKIHN0YXRpYyB2b2lkIHpjcnlwdF9kZXZpY2VfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqa3JlZikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X3BjaXhjYy5jIGIvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfcGNpeGNjLmMKaW5kZXggZTdhMWUyMi4uYzIwZDQ3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfcGNpeGNjLmMKKysrIGIvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfcGNpeGNjLmMKQEAgLTc4MSw4ICs3ODEsNyBAQAogCQkvKiBTaWduYWwgcGVuZGluZy4gKi8KIAkJYXBfY2FuY2VsX21lc3NhZ2UoemRldi0+YXBfZGV2LCAmYXBfbXNnKTsKIG91dF9mcmVlOgotCW1lbXNldChhcF9tc2cubWVzc2FnZSwgMHgwLCBhcF9tc2cubGVuZ3RoKTsKLQlrZnJlZShhcF9tc2cubWVzc2FnZSk7CisJa3pmcmVlKGFwX21zZy5tZXNzYWdlKTsKIAlyZXR1cm4gcmM7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9lYmNkaWMuYyBiL2RyaXZlcnMvczM5MC9lYmNkaWMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTljOThkYS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3MzOTAvZWJjZGljLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNDYgKzAsMCBAQAotLyoKLSAqICBhcmNoL3MzOTAva2VybmVsL2ViY2RpYy5jCi0gKiAgICBFQ0JESUMgLT4gQVNDSUksIEFTQ0lJIC0+IEVDQkRJQyBjb252ZXJzaW9uIHRhYmxlcy4KLSAqCi0gKiAgUzM5MCB2ZXJzaW9uCi0gKiAgICBDb3B5cmlnaHQgKEMpIDE5OTggSUJNIENvcnBvcmF0aW9uCi0gKiAgICBBdXRob3Iocyk6IE1hcnRpbiBTY2h3aWRlZnNreSA8c2Nod2lkZWZza3lAZGUuaWJtLmNvbT4KLSAqLwotCi0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+Ci0KLS8qCi0gKiBBU0NJSSAtPiBFQkNESUMKLSAqLwotX191OCBfYXNjZWJjWzI1Nl0gPQotewotIC8qMDAgIE5MICAgIFNIICAgIFNYICAgIEVYICAgIEVUICAgIE5RICAgIEFLICAgIEJMICovCi0gICAgIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MzcsIDB4MkQsIDB4MkUsIDB4MkYsCi0gLyowOCAgQlMgICAgSFQgICAgTEYgICAgVlQgICAgRkYgICAgQ1IgICAgU08gICAgU0kgKi8KLSAgICAgMHgxNiwgMHgwNSwgMHgxNSwgMHgwQiwgMHgwQywgMHgwRCwgMHgwRSwgMHgwRiwKLSAvKjEwICBETCAgICBEMSAgICBEMiAgICBEMyAgICBENCAgICBOSyAgICBTTiAgICBFQiAqLwotICAgICAweDEwLCAweDExLCAweDEyLCAweDEzLCAweDNDLCAweDE1LCAweDMyLCAweDI2LAotIC8qMTggIENOICAgIEVNICAgIFNCICAgIEVDICAgIEZTICAgIEdTICAgIFJTICAgIFVTICovCi0gICAgIDB4MTgsIDB4MTksIDB4M0YsIDB4MjcsIDB4MUMsIDB4MUQsIDB4MUUsIDB4MUYsCi0gLyoyMCAgU1AgICAgICEgICAgICIgICAgICMgICAgICQgICAgICUgICAgICYgICAgICcgKi8KLSAgICAgMHg0MCwgMHg1QSwgMHg3RiwgMHg3QiwgMHg1QiwgMHg2QywgMHg1MCwgMHg3RCwKLSAvKjI4ICAgKCAgICAgKSAgICAgKiAgICAgKyAgICAgLCAgICAgLSAgICAuICAgICAgLyAqLwotICAgICAweDRELCAweDVELCAweDVDLCAweDRFLCAweDZCLCAweDYwLCAweDRCLCAweDYxLAotIC8qMzAgICAwICAgICAxICAgICAyICAgICAzICAgICA0ICAgICA1ICAgICA2ICAgICA3ICovCi0gICAgIDB4RjAsIDB4RjEsIDB4RjIsIDB4RjMsIDB4RjQsIDB4RjUsIDB4RjYsIDB4RjcsCi0gLyozOCAgIDggICAgIDkgICAgIDogICAgIDsgICAgIDwgICAgID0gICAgID4gICAgID8gKi8KLSAgICAgMHhGOCwgMHhGOSwgMHg3QSwgMHg1RSwgMHg0QywgMHg3RSwgMHg2RSwgMHg2RiwKLSAvKjQwICAgQCAgICAgQSAgICAgQiAgICAgQyAgICAgRCAgICAgRSAgICAgRiAgICAgRyAqLwotICAgICAweDdDLCAweEMxLCAweEMyLCAweEMzLCAweEM0LCAweEM1LCAweEM2LCAweEM3LAotIC8qNDggICBIICAgICBJICAgICBKICAgICBLICAgICBMICAgICBNICAgICBOICAgICBPICovCi0gICAgIDB4QzgsIDB4QzksIDB4RDEsIDB4RDIsIDB4RDMsIDB4RDQsIDB4RDUsIDB4RDYsCi0gLyo1MCAgIFAgICAgIFEgICAgIFIgICAgIFMgICAgIFQgICAgIFUgICAgIFYgICAgIFcgKi8KLSAgICAgMHhENywgMHhEOCwgMHhEOSwgMHhFMiwgMHhFMywgMHhFNCwgMHhFNSwgMHhFNiwKLSAvKjU4ICAgWCAgICAgWSAgICAgWiAgICAgWyAgICAgXCAgICAgXSAgICAgXiAgICAgXyAqLwotICAgICAweEU3LCAweEU4LCAweEU5LCAweEFELCAweEUwLCAweEJELCAweDVGLCAweDZELAotIC8qNjAgICBgICAgICBhICAgICBiICAgICBjICAgICBkICAgICBlICAgICBmICAgICBnICovCi0gICAgIDB4NzksIDB4ODEsIDB4ODIsIDB4ODMsIDB4ODQsIDB4ODUsIDB4ODYsIDB4ODcsCi0gLyo2OCAgIGggICAgIGkgICAgIGogICAgIGsgICAgIGwgICAgIG0gICAgIG4gICAgIG8gKi8KLSAgICAgMHg4OCwgMHg4OSwgMHg5MSwgMHg5MiwgMHg5MywgMHg5NCwgMHg5NSwgMHg5NiwKLSAvKjcwICAgcCAgICAgcSAgICAgciAgICAgcyAgICAgdCAgICAgdSAgICAgdiAgICAgdyAqLwotICAgICAweDk3LCAweDk4LCAweDk5LCAweEEyLCAweEEzLCAweEE0LCAweEE1LCAweEE2LAotIC8qNzggICB4ICAgICB5ICAgICB6ICAgICB7ICAgICB8ICAgICB9ICAgICB+ICAgIERMICovCi0gICAgIDB4QTcsIDB4QTgsIDB4QTksIDB4QzAsIDB4NEYsIDB4RDAsIDB4QTEsIDB4MDcsCi0gICAgIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsCi0gICAgIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsCi0gICAgIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsCi0gICAgIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsCi0gICAgIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsCi0gICAgIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsCi0gICAgIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsCi0gICAgIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsCi0gICAgIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsCi0gICAgIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsCi0gICAgIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsCi0gICAgIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsCi0gICAgIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsCi0gICAgIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsCi0gICAgIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsCi0gICAgIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4RkYKLX07Ci0KLS8qCi0gKiBFQkNESUMgLT4gQVNDSUkKLSAqLwotX191OCBfZWJjYXNjWzI1Nl0gPQotewotIC8qIDB4MDAgICBOVUwgICBTT0ggICBTVFggICBFVFggICpTRUwgICAgSFQgICpSTkwgICBERUwgKi8KLSAgICAgICAgICAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA3LCAweDA5LCAweDA3LCAweDdGLAotIC8qIDB4MDggICAtR0UgIC1TUFMgIC1SUFQgICAgVlQgICAgRkYgICAgQ1IgICAgU08gICAgU0kgKi8KLSAgICAgICAgICAweDA3LCAweDA3LCAweDA3LCAweDBCLCAweDBDLCAweDBELCAweDBFLCAweDBGLAotIC8qIDB4MTAgICBETEUgICBEQzEgICBEQzIgICBEQzMgIC1SRVMgICAtTkwgICAgQlMgIC1QT0MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtRU5QICAtPkxGICAgICAgICAgICAgICovCi0gICAgICAgICAgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMywgMHgwNywgMHgwQSwgMHgwOCwgMHgwNywKLSAvKiAweDE4ICAgQ0FOICAgIEVNICAtVUJTICAtQ1UxICAtSUZTICAtSUdTICAtSVJTICAtSVRCCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLUlVUyAqLwotICAgICAgICAgIDB4MTgsIDB4MTksIDB4MDcsIDB4MDcsIDB4MDcsIDB4MDcsIDB4MDcsIDB4MDcsCi0gLyogMHgyMCAgIC1EUyAgLVNPUyAgICBGUyAgLVdVUyAgLUJZUCAgICBMRiAgIEVUQiAgIEVTQwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1JTlAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAweDA3LCAweDA3LCAweDFDLCAweDA3LCAweDA3LCAweDBBLCAweDE3LCAweDFCLAotIC8qIDB4MjggICAtU0EgIC1TRkUgICAtU00gIC1DU1AgIC1NRkEgICBFTlEgICBBQ0sgICBCRUwKLSAgICAgICAgICAgICAgICAgICAgICAgLVNXICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovIAotICAgICAgICAgIDB4MDcsIDB4MDcsIDB4MDcsIDB4MDcsIDB4MDcsIDB4MDUsIDB4MDYsIDB4MDcsCi0gLyogMHgzMCAgLS0tLSAgLS0tLSAgIFNZTiAgIC1JUiAgIC1QUCAgLVRSTiAgLU5CUyAgIEVPVCAqLwotICAgICAgICAgIDB4MDcsIDB4MDcsIDB4MTYsIDB4MDcsIDB4MDcsIDB4MDcsIDB4MDcsIDB4MDQsCi0gLyogMHgzOCAgLVNCUyAgIC1JVCAgLVJGRiAgLUNVMyAgIERDNCAgIE5BSyAgLS0tLSAgIFNVQiAqLwotICAgICAgICAgIDB4MDcsIDB4MDcsIDB4MDcsIDB4MDcsIDB4MTQsIDB4MTUsIDB4MDcsIDB4MUEsCi0gLyogMHg0MCAgICBTUCAgIFJTUCAgICAgICAgICAggeQgICAgICAgICAgICAgIC0tLS0gICAgICAgKi8KLSAgICAgICAgICAweDIwLCAweEZGLCAweDgzLCAweDg0LCAweDg1LCAweEEwLCAweDA3LCAweDg2LAotIC8qIDB4NDggICAgICAgICAgICAgICAgICAgICAgIC4gICAgIDwgICAgICggICAgICsgICAgIHwgKi8KLSAgICAgICAgICAweDg3LCAweEE0LCAweDlCLCAweDJFLCAweDNDLCAweDI4LCAweDJCLCAweDdDLAotIC8qIDB4NTAgICAgICYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tLS0gKi8KLSAgICAgICAgICAweDI2LCAweDgyLCAweDg4LCAweDg5LCAweDhBLCAweEExLCAweDhDLCAweDA3LAotIC8qIDB4NTggICAgICAgICAgIIHfICAgICAhICAgICAkICAgICAqICAgICApICAgICA7ICAgICAgICovCi0gICAgICAgICAgMHg4RCwgMHhFMSwgMHgyMSwgMHgyNCwgMHgyQSwgMHgyOSwgMHgzQiwgMHhBQSwKLSAvKiAweDYwICAgICAtICAgICAvICAtLS0tICAgICCBxCAgLS0tLSAgLS0tLSAgLS0tLSAgICAgICAqLwotICAgICAgICAgIDB4MkQsIDB4MkYsIDB4MDcsIDB4OEUsIDB4MDcsIDB4MDcsIDB4MDcsIDB4OEYsCi0gLyogMHg2OCAgICAgICAgICAgICAgLS0tLSAgICAgLCAgICAgJSAgICAgXyAgICAgPiAgICAgPyAqLyAKLSAgICAgICAgICAweDgwLCAweEE1LCAweDA3LCAweDJDLCAweDI1LCAweDVGLCAweDNFLCAweDNGLAotIC8qIDB4NzAgIC0tLS0gICAgICAgIC0tLS0gIC0tLS0gIC0tLS0gIC0tLS0gIC0tLS0gIC0tLS0gKi8KLSAgICAgICAgICAweDA3LCAweDkwLCAweDA3LCAweDA3LCAweDA3LCAweDA3LCAweDA3LCAweDA3LAotIC8qIDB4NzggICAgICogICAgIGAgICAgIDogICAgICMgICAgIEAgICAgICcgICAgID0gICAgICIgKi8KLSAgICAgICAgICAweDcwLCAweDYwLCAweDNBLCAweDIzLCAweDQwLCAweDI3LCAweDNELCAweDIyLAotIC8qIDB4ODAgICAgICogICAgIGEgICAgIGIgICAgIGMgICAgIGQgICAgIGUgICAgIGYgICAgIGcgKi8KLSAgICAgICAgICAweDA3LCAweDYxLCAweDYyLCAweDYzLCAweDY0LCAweDY1LCAweDY2LCAweDY3LAotIC8qIDB4ODggICAgIGggICAgIGkgICAgICAgICAgICAgIC0tLS0gIC0tLS0gIC0tLS0gICAgICAgKi8KLSAgICAgICAgICAweDY4LCAweDY5LCAweEFFLCAweEFGLCAweDA3LCAweDA3LCAweDA3LCAweEYxLAotIC8qIDB4OTAgICAgIIGwICAgICBqICAgICBrICAgICBsICAgICBtICAgICBuICAgICBvICAgICBwICovCi0gICAgICAgICAgMHhGOCwgMHg2QSwgMHg2QiwgMHg2QywgMHg2RCwgMHg2RSwgMHg2RiwgMHg3MCwKLSAvKiAweDk4ICAgICBxICAgICByICAgICAgICAgICAgICAgICAgICAtLS0tICAgICAgICAtLS0tICovCi0gICAgICAgICAgMHg3MSwgMHg3MiwgMHhBNiwgMHhBNywgMHg5MSwgMHgwNywgMHg5MiwgMHgwNywKLSAvKiAweEEwICAgICAgICAgICB+ICAgICBzICAgICB0ICAgICB1ICAgICB2ICAgICB3ICAgICB4ICovCi0gICAgICAgICAgMHhFNiwgMHg3RSwgMHg3MywgMHg3NCwgMHg3NSwgMHg3NiwgMHg3NywgMHg3OCwKLSAvKiAweEE4ICAgICB5ICAgICB6ICAgICAgICAgICAgICAtLS0tICAtLS0tICAtLS0tICAtLS0tICovCi0gICAgICAgICAgMHg3OSwgMHg3QSwgMHhBRCwgMHhBQiwgMHgwNywgMHgwNywgMHgwNywgMHgwNywKLSAvKiAweEIwICAgICBeICAgICAgICAgICAgICAgICAgICAtLS0tICAgICCBpyAgLS0tLSAgICAgICAqLwotICAgICAgICAgIDB4NUUsIDB4OUMsIDB4OUQsIDB4RkEsIDB4MDcsIDB4MDcsIDB4MDcsIDB4QUMsCi0gLyogMHhCOCAgICAgICAgLS0tLSAgICAgWyAgICAgXSAgLS0tLSAgLS0tLSAgLS0tLSAgLS0tLSAqLwotICAgICAgICAgIDB4QUIsIDB4MDcsIDB4NUIsIDB4NUQsIDB4MDcsIDB4MDcsIDB4MDcsIDB4MDcsCi0gLyogMHhDMCAgICAgeyAgICAgQSAgICAgQiAgICAgQyAgICAgRCAgICAgRSAgICAgRiAgICAgRyAqLwotICAgICAgICAgIDB4N0IsIDB4NDEsIDB4NDIsIDB4NDMsIDB4NDQsIDB4NDUsIDB4NDYsIDB4NDcsCi0gLyogMHhDOCAgICAgSCAgICAgSSAgLS0tLSAgICAgICAgICAggfYgICAgICAgICAgICAgIC0tLS0gKi8KLSAgICAgICAgICAweDQ4LCAweDQ5LCAweDA3LCAweDkzLCAweDk0LCAweDk1LCAweEEyLCAweDA3LAotIC8qIDB4RDAgICAgIH0gICAgIEogICAgIEsgICAgIEwgICAgIE0gICAgIE4gICAgIE8gICAgIFAgKi8KLSAgICAgICAgICAweDdELCAweDRBLCAweDRCLCAweDRDLCAweDRELCAweDRFLCAweDRGLCAweDUwLAotIC8qIDB4RDggICAgIFEgICAgIFIgIC0tLS0gICAgICAgICAgIIH8ICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgMHg1MSwgMHg1MiwgMHgwNywgMHg5NiwgMHg4MSwgMHg5NywgMHhBMywgMHg5OCwKLSAvKiAweEUwICAgICBcICAgICAgICAgICBTICAgICBUICAgICBVICAgICBWICAgICBXICAgICBYICovCi0gICAgICAgICAgMHg1QywgMHhGNiwgMHg1MywgMHg1NCwgMHg1NSwgMHg1NiwgMHg1NywgMHg1OCwKLSAvKiAweEU4ICAgICBZICAgICBaICAgICAgICAtLS0tICAgICCB1iAgLS0tLSAgLS0tLSAgLS0tLSAqLwotICAgICAgICAgIDB4NTksIDB4NUEsIDB4RkQsIDB4MDcsIDB4OTksIDB4MDcsIDB4MDcsIDB4MDcsCi0gLyogMHhGMCAgICAgMCAgICAgMSAgICAgMiAgICAgMyAgICAgNCAgICAgNSAgICAgNiAgICAgNyAqLwotICAgICAgICAgIDB4MzAsIDB4MzEsIDB4MzIsIDB4MzMsIDB4MzQsIDB4MzUsIDB4MzYsIDB4MzcsCi0gLyogMHhGOCAgICAgOCAgICAgOSAgLS0tLSAgLS0tLSAgICAggdwgIC0tLS0gIC0tLS0gIC0tLS0gKi8KLSAgICAgICAgICAweDM4LCAweDM5LCAweDA3LCAweDA3LCAweDlBLCAweDA3LCAweDA3LCAweDA3Ci19OwotCi0vKgotICogRUJDRElDIChjYXBpdGFscykgLT4gQVNDSUkgKHNtYWxsIGNhc2UpCi0gKi8KLV9fdTggX2ViY2FzY19yZWR1Y2VfY2FzZVsyNTZdID0KLXsKLSAvKiAweDAwICAgTlVMICAgU09IICAgU1RYICAgRVRYICAqU0VMICAgIEhUICAqUk5MICAgREVMICovCi0gICAgICAgICAgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNywgMHgwOSwgMHgwNywgMHg3RiwKLQotIC8qIDB4MDggICAtR0UgIC1TUFMgIC1SUFQgICAgVlQgICAgRkYgICAgQ1IgICAgU08gICAgU0kgKi8KLSAgICAgICAgICAweDA3LCAweDA3LCAweDA3LCAweDBCLCAweDBDLCAweDBELCAweDBFLCAweDBGLAotCi0gLyogMHgxMCAgIERMRSAgIERDMSAgIERDMiAgIERDMyAgLVJFUyAgIC1OTCAgICBCUyAgLVBPQwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1FTlAgIC0+TEYgICAgICAgICAgICAgKi8KLSAgICAgICAgICAweDEwLCAweDExLCAweDEyLCAweDEzLCAweDA3LCAweDBBLCAweDA4LCAweDA3LAotCi0gLyogMHgxOCAgIENBTiAgICBFTSAgLVVCUyAgLUNVMSAgLUlGUyAgLUlHUyAgLUlSUyAgLUlUQgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1JVVMgKi8KLSAgICAgICAgICAweDE4LCAweDE5LCAweDA3LCAweDA3LCAweDA3LCAweDA3LCAweDA3LCAweDA3LAotCi0gLyogMHgyMCAgIC1EUyAgLVNPUyAgICBGUyAgLVdVUyAgLUJZUCAgICBMRiAgIEVUQiAgIEVTQwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1JTlAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAweDA3LCAweDA3LCAweDFDLCAweDA3LCAweDA3LCAweDBBLCAweDE3LCAweDFCLAotCi0gLyogMHgyOCAgIC1TQSAgLVNGRSAgIC1TTSAgLUNTUCAgLU1GQSAgIEVOUSAgIEFDSyAgIEJFTAotICAgICAgICAgICAgICAgICAgICAgICAtU1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gCi0gICAgICAgICAgMHgwNywgMHgwNywgMHgwNywgMHgwNywgMHgwNywgMHgwNSwgMHgwNiwgMHgwNywKLQotIC8qIDB4MzAgIC0tLS0gIC0tLS0gICBTWU4gICAtSVIgICAtUFAgIC1UUk4gIC1OQlMgICBFT1QgKi8KLSAgICAgICAgICAweDA3LCAweDA3LCAweDE2LCAweDA3LCAweDA3LCAweDA3LCAweDA3LCAweDA0LAotCi0gLyogMHgzOCAgLVNCUyAgIC1JVCAgLVJGRiAgLUNVMyAgIERDNCAgIE5BSyAgLS0tLSAgIFNVQiAqLwotICAgICAgICAgIDB4MDcsIDB4MDcsIDB4MDcsIDB4MDcsIDB4MTQsIDB4MTUsIDB4MDcsIDB4MUEsCi0KLSAvKiAweDQwICAgIFNQICAgUlNQICAgICAgICAgICCB5CAgICAgICAgICAgICAgLS0tLSAgICAgICAqLwotICAgICAgICAgIDB4MjAsIDB4RkYsIDB4ODMsIDB4ODQsIDB4ODUsIDB4QTAsIDB4MDcsIDB4ODYsCi0KLSAvKiAweDQ4ICAgICAgICAgICAgICAgICAgICAgICAuICAgICA8ICAgICAoICAgICArICAgICB8ICovCi0gICAgICAgICAgMHg4NywgMHhBNCwgMHg5QiwgMHgyRSwgMHgzQywgMHgyOCwgMHgyQiwgMHg3QywKLQotIC8qIDB4NTAgICAgICYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tLS0gKi8KLSAgICAgICAgICAweDI2LCAweDgyLCAweDg4LCAweDg5LCAweDhBLCAweEExLCAweDhDLCAweDA3LAotCi0gLyogMHg1OCAgICAgICAgICAggd8gICAgICEgICAgICQgICAgICogICAgICkgICAgIDsgICAgICAgKi8KLSAgICAgICAgICAweDhELCAweEUxLCAweDIxLCAweDI0LCAweDJBLCAweDI5LCAweDNCLCAweEFBLAotCi0gLyogMHg2MCAgICAgLSAgICAgLyAgLS0tLSAgICAggcQgIC0tLS0gIC0tLS0gIC0tLS0gICAgICAgKi8KLSAgICAgICAgICAweDJELCAweDJGLCAweDA3LCAweDg0LCAweDA3LCAweDA3LCAweDA3LCAweDhGLAotCi0gLyogMHg2OCAgICAgICAgICAgICAgLS0tLSAgICAgLCAgICAgJSAgICAgXyAgICAgPiAgICAgPyAqLyAKLSAgICAgICAgICAweDgwLCAweEE1LCAweDA3LCAweDJDLCAweDI1LCAweDVGLCAweDNFLCAweDNGLAotCi0gLyogMHg3MCAgLS0tLSAgICAgICAgLS0tLSAgLS0tLSAgLS0tLSAgLS0tLSAgLS0tLSAgLS0tLSAqLwotICAgICAgICAgIDB4MDcsIDB4OTAsIDB4MDcsIDB4MDcsIDB4MDcsIDB4MDcsIDB4MDcsIDB4MDcsCi0KLSAvKiAweDc4ICAgICAqICAgICBgICAgICA6ICAgICAjICAgICBAICAgICAnICAgICA9ICAgICAiICovCi0gICAgICAgICAgMHg3MCwgMHg2MCwgMHgzQSwgMHgyMywgMHg0MCwgMHgyNywgMHgzRCwgMHgyMiwKLQotIC8qIDB4ODAgICAgICogICAgIGEgICAgIGIgICAgIGMgICAgIGQgICAgIGUgICAgIGYgICAgIGcgKi8KLSAgICAgICAgICAweDA3LCAweDYxLCAweDYyLCAweDYzLCAweDY0LCAweDY1LCAweDY2LCAweDY3LAotCi0gLyogMHg4OCAgICAgaCAgICAgaSAgICAgICAgICAgICAgLS0tLSAgLS0tLSAgLS0tLSAgICAgICAqLwotICAgICAgICAgIDB4NjgsIDB4NjksIDB4QUUsIDB4QUYsIDB4MDcsIDB4MDcsIDB4MDcsIDB4RjEsCi0KLSAvKiAweDkwICAgICCBsCAgICAgaiAgICAgayAgICAgbCAgICAgbSAgICAgbiAgICAgbyAgICAgcCAqLwotICAgICAgICAgIDB4RjgsIDB4NkEsIDB4NkIsIDB4NkMsIDB4NkQsIDB4NkUsIDB4NkYsIDB4NzAsCi0KLSAvKiAweDk4ICAgICBxICAgICByICAgICAgICAgICAgICAgICAgICAtLS0tICAgICAgICAtLS0tICovCi0gICAgICAgICAgMHg3MSwgMHg3MiwgMHhBNiwgMHhBNywgMHg5MSwgMHgwNywgMHg5MiwgMHgwNywKLQotIC8qIDB4QTAgICAgICAgICAgIH4gICAgIHMgICAgIHQgICAgIHUgICAgIHYgICAgIHcgICAgIHggKi8KLSAgICAgICAgICAweEU2LCAweDdFLCAweDczLCAweDc0LCAweDc1LCAweDc2LCAweDc3LCAweDc4LAotCi0gLyogMHhBOCAgICAgeSAgICAgeiAgICAgICAgICAgICAgLS0tLSAgLS0tLSAgLS0tLSAgLS0tLSAqLwotICAgICAgICAgIDB4NzksIDB4N0EsIDB4QUQsIDB4QUIsIDB4MDcsIDB4MDcsIDB4MDcsIDB4MDcsCi0KLSAvKiAweEIwICAgICBeICAgICAgICAgICAgICAgICAgICAtLS0tICAgICCBpyAgLS0tLSAgICAgICAqLwotICAgICAgICAgIDB4NUUsIDB4OUMsIDB4OUQsIDB4RkEsIDB4MDcsIDB4MDcsIDB4MDcsIDB4QUMsCi0KLSAvKiAweEI4ICAgICAgICAtLS0tICAgICBbICAgICBdICAtLS0tICAtLS0tICAtLS0tICAtLS0tICovCi0gICAgICAgICAgMHhBQiwgMHgwNywgMHg1QiwgMHg1RCwgMHgwNywgMHgwNywgMHgwNywgMHgwNywKLQotIC8qIDB4QzAgICAgIHsgICAgIEEgICAgIEIgICAgIEMgICAgIEQgICAgIEUgICAgIEYgICAgIEcgKi8KLSAgICAgICAgICAweDdCLCAweDYxLCAweDYyLCAweDYzLCAweDY0LCAweDY1LCAweDY2LCAweDY3LAotCi0gLyogMHhDOCAgICAgSCAgICAgSSAgLS0tLSAgICAgICAgICAggfYgICAgICAgICAgICAgIC0tLS0gKi8KLSAgICAgICAgICAweDY4LCAweDY5LCAweDA3LCAweDkzLCAweDk0LCAweDk1LCAweEEyLCAweDA3LAotCi0gLyogMHhEMCAgICAgfSAgICAgSiAgICAgSyAgICAgTCAgICAgTSAgICAgTiAgICAgTyAgICAgUCAqLwotICAgICAgICAgIDB4N0QsIDB4NkEsIDB4NkIsIDB4NkMsIDB4NkQsIDB4NkUsIDB4NkYsIDB4NzAsCi0KLSAvKiAweEQ4ICAgICBRICAgICBSICAtLS0tICAgICAgICAgICCB/CAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgIDB4NzEsIDB4NzIsIDB4MDcsIDB4OTYsIDB4ODEsIDB4OTcsIDB4QTMsIDB4OTgsCi0KLSAvKiAweEUwICAgICBcICAgICAgICAgICBTICAgICBUICAgICBVICAgICBWICAgICBXICAgICBYICovCi0gICAgICAgICAgMHg1QywgMHhGNiwgMHg3MywgMHg3NCwgMHg3NSwgMHg3NiwgMHg3NywgMHg3OCwKLQotIC8qIDB4RTggICAgIFkgICAgIFogICAgICAgIC0tLS0gICAgIIHWICAtLS0tICAtLS0tICAtLS0tICovCi0gICAgICAgICAgMHg3OSwgMHg3QSwgMHhGRCwgMHgwNywgMHg5NCwgMHgwNywgMHgwNywgMHgwNywKLQotIC8qIDB4RjAgICAgIDAgICAgIDEgICAgIDIgICAgIDMgICAgIDQgICAgIDUgICAgIDYgICAgIDcgKi8KLSAgICAgICAgICAweDMwLCAweDMxLCAweDMyLCAweDMzLCAweDM0LCAweDM1LCAweDM2LCAweDM3LAotCi0gLyogMHhGOCAgICAgOCAgICAgOSAgLS0tLSAgLS0tLSAgICAggdwgIC0tLS0gIC0tLS0gIC0tLS0gKi8KLSAgICAgICAgICAweDM4LCAweDM5LCAweDA3LCAweDA3LCAweDgxLCAweDA3LCAweDA3LCAweDA3Ci19OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9NYWtlZmlsZSBiL2RyaXZlcnMvczM5MC9uZXQvTWFrZWZpbGUKaW5kZXggNjM4MmMwNC4uOTZlZGRiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3MzOTAvbmV0L01ha2VmaWxlCkBAIC04LDcgKzgsNyBAQAogb2JqLSQoQ09ORklHX1NNU0dJVUNWKSArPSBzbXNnaXVjdi5vCiBvYmotJChDT05GSUdfTENTKSArPSBsY3MubyBjdTMwODgubwogb2JqLSQoQ09ORklHX0NMQVcpICs9IGNsYXcubyBjdTMwODgubwotcWV0aC15ICs9IHFldGhfY29yZV9zeXMubyBxZXRoX2NvcmVfbWFpbi5vIHFldGhfY29yZV9tcGMubyBxZXRoX2NvcmVfb2ZmbC5vCitxZXRoLXkgKz0gcWV0aF9jb3JlX3N5cy5vIHFldGhfY29yZV9tYWluLm8gcWV0aF9jb3JlX21wYy5vCiBvYmotJChDT05GSUdfUUVUSCkgKz0gcWV0aC5vCiBxZXRoX2wyLXkgKz0gcWV0aF9sMl9tYWluLm8KIG9iai0kKENPTkZJR19RRVRIX0wyKSArPSBxZXRoX2wyLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvY2xhdy5jIGIvZHJpdmVycy9zMzkwL25ldC9jbGF3LmMKaW5kZXggZjVlNjE4NS4uMzBhNDNjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9jbGF3LmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9jbGF3LmMKQEAgLTYwLDYgKzYwLDkgQEAKICAqICAgIDEuMjUgIEFkZGVkIFBhY2tpbmcgc3VwcG9ydAogICogICAgMS41CiAgKi8KKworI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAiY2xhdyIKKwogI2luY2x1ZGUgPGFzbS9jY3dkZXYuaD4KICNpbmNsdWRlIDxhc20vY2N3Z3JvdXAuaD4KICNpbmNsdWRlIDxhc20vZGVidWcuaD4KQEAgLTk0LDcgKzk3LDcgQEAKICAgIENMQVcgdXNlcyB0aGUgczM5MGRiZiBmaWxlIHN5c3RlbSAgc2VlIGNsYXdfdHJhY2UgYW5kIGNsYXdfc2V0dXAKICovCiAKLQorc3RhdGljIGNoYXIgdmVyc2lvbltdIF9faW5pdGRhdGEgPSAiQ0xBVyBkcml2ZXIiOwogc3RhdGljIGNoYXIgZGVidWdfYnVmZmVyWzI1NV07CiAvKioKICAqIERlYnVnIEZhY2lsaXR5IFN0dWZmCkBAIC0yMDYsMjAgKzIwOSwzMCBAQAogc3RhdGljIGludCBwYWdlc190b19vcmRlcl9vZl9tYWcoaW50IG51bV9vZl9wYWdlcyk7CiBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmNsYXdfcGFja19za2Ioc3RydWN0IGNsYXdfcHJpdmJrICpwcml2cHRyKTsKIC8qIHN5c2ZzIEZ1bmN0aW9ucyAqLwotc3RhdGljIHNzaXplX3QgY2xhd19obmFtZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zik7Ci1zdGF0aWMgc3NpemVfdCBjbGF3X2huYW1lX3dyaXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCitzdGF0aWMgc3NpemVfdCBjbGF3X2huYW1lX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpOworc3RhdGljIHNzaXplX3QgY2xhd19obmFtZV93cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpOwotc3RhdGljIHNzaXplX3QgY2xhd19hZG5hbWVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpOwotc3RhdGljIHNzaXplX3QgY2xhd19hZG5hbWVfd3JpdGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKK3N0YXRpYyBzc2l6ZV90IGNsYXdfYWRuYW1lX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpOworc3RhdGljIHNzaXplX3QgY2xhd19hZG5hbWVfd3JpdGUoc3RydWN0IGRldmljZSAqZGV2LAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KTsKLXN0YXRpYyBzc2l6ZV90IGNsYXdfYXBuYW1lX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKTsKLXN0YXRpYyBzc2l6ZV90IGNsYXdfYXBuYW1lX3dyaXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCitzdGF0aWMgc3NpemVfdCBjbGF3X2FwbmFtZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKTsKK3N0YXRpYyBzc2l6ZV90IGNsYXdfYXBuYW1lX3dyaXRlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCk7Ci1zdGF0aWMgc3NpemVfdCBjbGF3X3didWZmX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKTsKLXN0YXRpYyBzc2l6ZV90IGNsYXdfd2J1ZmZfd3JpdGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKK3N0YXRpYyBzc2l6ZV90IGNsYXdfd2J1ZmZfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zik7CitzdGF0aWMgc3NpemVfdCBjbGF3X3didWZmX3dyaXRlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCk7Ci1zdGF0aWMgc3NpemVfdCBjbGF3X3JidWZmX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKTsKLXN0YXRpYyBzc2l6ZV90IGNsYXdfcmJ1ZmZfd3JpdGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKK3N0YXRpYyBzc2l6ZV90IGNsYXdfcmJ1ZmZfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zik7CitzdGF0aWMgc3NpemVfdCBjbGF3X3JidWZmX3dyaXRlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCk7CiBzdGF0aWMgaW50IGNsYXdfYWRkX2ZpbGVzKHN0cnVjdCBkZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBjbGF3X3JlbW92ZV9maWxlcyhzdHJ1Y3QgZGV2aWNlICpkZXYpOwpAQCAtMjk4LDggKzMxMSw4IEBACiAJaWYgKHJjKSB7CiAJCXByb2JlX2Vycm9yKGNnZGV2KTsKIAkJcHV0X2RldmljZSgmY2dkZXYtPmRldik7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImFkZF9maWxlcyBmYWlsZWQgJXMgJXMgRXhpdCBMaW5lICVkIFxuIiwKLQkJCWRldl9uYW1lKCZjZ2Rldi0+Y2RldlswXS0+ZGV2KSwgX19mdW5jX18sIF9fTElORV9fKTsKKwkJZGV2X2VycigmY2dkZXYtPmRldiwgIkNyZWF0aW5nIHRoZSAvcHJvYyBmaWxlcyBmb3IgYSBuZXciCisJCSIgQ0xBVyBkZXZpY2UgZmFpbGVkXG4iKTsKIAkJQ0xBV19EQkZfVEVYVF8oMiwgc2V0dXAsICJwcm9iZXglZCIsIHJjKTsKIAkJcmV0dXJuIHJjOwogCX0KQEAgLTMzNSw2ICszNDgsOCBAQAogICAgICAgICByYz1jbGF3X2h3X3R4KCBza2IsIGRldiwgMSApOwogICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKGdldF9jY3dkZXZfbG9jayhwX2NoLT5jZGV2KSwgc2F2ZWZsYWdzKTsKIAlDTEFXX0RCRl9URVhUXyg0LCB0cmFjZSwgImNsYXd0eCVkIiwgcmMpOworCWlmIChyYykKKwkJcmMgPSBORVRERVZfVFhfQlVTWTsKICAgICAgICAgcmV0dXJuIHJjOwogfSAgIC8qICBlbmQgb2YgY2xhd190eCAqLwogCkBAIC00OTYsNyArNTExLDggQEAKICAgICAgICAgICAgfihERVZfU1RBVF9DSE5fRU5EIHwgREVWX1NUQVRfREVWX0VORCkpICE9IDB4MDApIHx8CiAgICAgICAgICAgICgoKHByaXZwdHItPmNoYW5uZWxbUkVBRF0uZmxhZyB8CiAJICAgCXByaXZwdHItPmNoYW5uZWxbV1JJVEVdLmZsYWcpICYgQ0xBV19USU1FUikgIT0gMHgwMCkpIHsKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogcmVtb3RlIHNpZGUgaXMgbm90IHJlYWR5XG4iLCBkZXYtPm5hbWUpOworCQlkZXZfaW5mbygmcHJpdnB0ci0+Y2hhbm5lbFtSRUFEXS5jZGV2LT5kZXYsCisJCQkiJXM6IHJlbW90ZSBzaWRlIGlzIG5vdCByZWFkeVxuIiwgZGV2LT5uYW1lKTsKIAkJQ0xBV19EQkZfVEVYVCgyLCB0cmFjZSwgIm5vdHJkeSIpOwogCiAgICAgICAgICAgICAgICAgZm9yICggaSA9IDA7IGkgPCAyOyAgaSsrKSB7CkBAIC01ODIsMTAgKzU5OCw5IEBACiAJQ0xBV19EQkZfVEVYVCg0LCB0cmFjZSwgImNsYXdpcnEiKTsKICAgICAgICAgLyogQnlwYXNzIGFsbCAndW5zb2xpY2l0ZWQgaW50ZXJydXB0cycgKi8KIAlpZiAoIWNkZXYtPmRldi5kcml2ZXJfZGF0YSkgewotICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX1dBUk5JTkcgImNsYXc6IHVuc29saWNpdGVkIGludGVycnVwdCBmb3IgZGV2aWNlOiIKLQkJIAkiJXMgcmVjZWl2ZWQgYy0lMDJ4IGQtJTAyeFxuIiwKLQkJICAgICAgIGRldl9uYW1lKCZjZGV2LT5kZXYpLCBpcmItPnNjc3cuY21kLmNzdGF0LAotCQkgICAgICAgaXJiLT5zY3N3LmNtZC5kc3RhdCk7CisJCWRldl93YXJuKCZjZGV2LT5kZXYsICJBbiB1bmluaXRpYWxpemVkIENMQVcgZGV2aWNlIHJlY2VpdmVkIGFuIgorCQkJIiBJUlEsIGMtJTAyeCBkLSUwMnhcbiIsCisJCQlpcmItPnNjc3cuY21kLmNzdGF0LCBpcmItPnNjc3cuY21kLmRzdGF0KTsKIAkJQ0xBV19EQkZfVEVYVCgyLCB0cmFjZSwgImJhZGlycSIpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtNTk3LDggKzYxMiw3IEBACiAJZWxzZSBpZiAocHJpdnB0ci0+Y2hhbm5lbFtXUklURV0uY2RldiA9PSBjZGV2KQogCQlwX2NoID0gJnByaXZwdHItPmNoYW5uZWxbV1JJVEVdOwogCWVsc2UgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJjbGF3OiBDYW4ndCBkZXRlcm1pbmUgY2hhbm5lbCBmb3IgIgotCQkJImludGVycnVwdCwgZGV2aWNlICVzXG4iLCBkZXZfbmFtZSgmY2Rldi0+ZGV2KSk7CisJCWRldl93YXJuKCZjZGV2LT5kZXYsICJUaGUgZGV2aWNlIGlzIG5vdCBhIENMQVcgZGV2aWNlXG4iKTsKIAkJQ0xBV19EQkZfVEVYVCgyLCB0cmFjZSwgImJhZGNoYW4iKTsKIAkJcmV0dXJuOwogCX0KQEAgLTYxMiw3ICs2MjYsOCBAQAogCiAJLyogQ2hlY2sgZm9yIGdvb2Qgc3ViY2hhbm5lbCByZXR1cm4gY29kZSwgb3RoZXJ3aXNlIGluZm8gbWVzc2FnZSAqLwogCWlmIChpcmItPnNjc3cuY21kLmNzdGF0ICYmICEoaXJiLT5zY3N3LmNtZC5jc3RhdCAmIFNDSE5fU1RBVF9QQ0kpKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHN1YmNoYW5uZWwgY2hlY2sgZm9yIGRldmljZTogJTA0eCAtIgorCQlkZXZfaW5mbygmY2Rldi0+ZGV2LAorCQkJIiVzOiBzdWJjaGFubmVsIGNoZWNrIGZvciBkZXZpY2U6ICUwNHggLSIKIAkJCSIgU2NoIFN0YXQgJTAyeCAgRGV2IFN0YXQgJTAyeCBDUEEgLSAlMDR4XG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgZGV2LT5uYW1lLCBwX2NoLT5kZXZubywKIAkJCWlyYi0+c2Nzdy5jbWQuY3N0YXQsIGlyYi0+c2Nzdy5jbWQuZHN0YXQsCkBAIC02NTEsNyArNjY2LDcgQEAKIAkJCXdha2VfdXAoJnBfY2gtPndhaXQpOyAvKiB3YWtlIGNsYXdfb3BlbiAoUkVBRCkqLwogCQl9IGVsc2UgaWYgKHBfY2gtPmZsYWcgPT0gQ0xBV19XUklURSkgewogCQkJcF9jaC0+Y2xhd19zdGF0ZSA9IENMQVdfU1RBUlRfV1JJVEU7Ci0JCQkvKglzZW5kIFNZU1RFTV9WQUxJREFURQkJCSovCisJCQkvKiAgICAgIHNlbmQgU1lTVEVNX1ZBTElEQVRFICAgICAgICAgICAgICAgICAgICAqLwogCQkJY2xhd19zdHJ0X3JlYWQoZGV2LCBMT0NLX05PKTsKIAkJCWNsYXdfc2VuZF9jb250cm9sKGRldiwKIAkJCQlTWVNURU1fVkFMSURBVEVfUkVRVUVTVCwKQEAgLTY1OSwxMCArNjc0LDkgQEAKIAkJCQlwX2Vudi0+aG9zdF9uYW1lLAogCQkJCXBfZW52LT5hZGFwdGVyX25hbWUpOwogCQl9IGVsc2UgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2xhdzogdW5zb2xpY2l0ZWQgIgotCQkJCSJpbnRlcnJ1cHQgZm9yIGRldmljZToiCi0JCQkJIiVzIHJlY2VpdmVkIGMtJTAyeCBkLSUwMnhcbiIsCi0JCQkJZGV2X25hbWUoJmNkZXYtPmRldiksCisJCQlkZXZfd2FybigmY2Rldi0+ZGV2LCAiVGhlIENMQVcgZGV2aWNlIHJlY2VpdmVkIgorCQkJCSIgYW4gdW5leHBlY3RlZCBJUlEsICIKKwkJCQkiYy0lMDJ4IGQtJTAyeFxuIiwKIAkJCQlpcmItPnNjc3cuY21kLmNzdGF0LAogCQkJCWlyYi0+c2Nzdy5jbWQuZHN0YXQpOwogCQkJcmV0dXJuOwpAQCAtNjc3LDggKzY5MSw4IEBACiAJCQkgICAgKHBfY2gtPmlyYi0+ZWN3WzBdICYgMHg0MCkgPT0gMHg0MCB8fAogCQkJICAgIChwX2NoLT5pcmItPmVjd1swXSkgICAgICAgID09IDApIHsKIAkJCQlwcml2cHRyLT5zdGF0cy5yeF9lcnJvcnMrKzsKLQkJCQlwcmludGsoS0VSTl9JTkZPICIlczogUmVzdGFydCBpcyAiCi0JCQkJCSJyZXF1aXJlZCBhZnRlciByZW1vdGUgIgorCQkJCWRldl9pbmZvKCZjZGV2LT5kZXYsCisJCQkJCSIlczogUmVzdGFydCBpcyByZXF1aXJlZCBhZnRlciByZW1vdGUgIgogCQkJCQkic2lkZSByZWNvdmVycyBcbiIsCiAJCQkJCWRldi0+bmFtZSk7CiAJCQl9CkBAIC03MTMsMTEgKzcyNywxMyBAQAogCQlyZXR1cm47CiAJY2FzZSBDTEFXX1NUQVJUX1dSSVRFOgogCQlpZiAocF9jaC0+aXJiLT5zY3N3LmNtZC5kc3RhdCAmIERFVl9TVEFUX1VOSVRfQ0hFQ0spIHsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBVbml0IENoZWNrIE9jY3VyZWQgaW4gIgorCQkJZGV2X2luZm8oJmNkZXYtPmRldiwKKwkJCQkiJXM6IFVuaXQgQ2hlY2sgT2NjdXJlZCBpbiAiCiAJCQkJIndyaXRlIGNoYW5uZWxcbiIsIGRldi0+bmFtZSk7CiAJCQljbGVhcl9iaXQoMCwgKHZvaWQgKikmcF9jaC0+SU9fYWN0aXZlKTsKIAkJCWlmIChwX2NoLT5pcmItPmVjd1swXSAmIDB4ODApIHsKLQkJCQlwcmludGsoS0VSTl9JTkZPICIlczogUmVzZXR0aW5nIEV2ZW50ICIKKwkJCQlkZXZfaW5mbygmY2Rldi0+ZGV2LAorCQkJCQkiJXM6IFJlc2V0dGluZyBFdmVudCAiCiAJCQkJCSJvY2N1cnJlZDpcbiIsIGRldi0+bmFtZSk7CiAJCQkJaW5pdF90aW1lcigmcF9jaC0+dGltZXIpOwogCQkJCXBfY2gtPnRpbWVyLmZ1bmN0aW9uID0KQEAgLTcyNSw3ICs3NDEsOCBAQAogCQkJCXBfY2gtPnRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylwX2NoOwogCQkJCXBfY2gtPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgMTAqSFo7CiAJCQkJYWRkX3RpbWVyKCZwX2NoLT50aW1lcik7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHdyaXRlIGNvbm5lY3Rpb24gIgorCQkJCWRldl9pbmZvKCZjZGV2LT5kZXYsCisJCQkJCSIlczogd3JpdGUgY29ubmVjdGlvbiAiCiAJCQkJCSJyZXN0YXJ0aW5nXG4iLCBkZXYtPm5hbWUpOwogCQkJfQogCQkJQ0xBV19EQkZfVEVYVCg0LCB0cmFjZSwgInJzdHJ0d3J0Iik7CkBAIC03MzMsOSArNzUwLDEwIEBACiAJCX0KIAkJaWYgKHBfY2gtPmlyYi0+c2Nzdy5jbWQuZHN0YXQgJiBERVZfU1RBVF9VTklUX0VYQ0VQKSB7CiAJCQljbGVhcl9iaXQoMCwgKHZvaWQgKikmcF9jaC0+SU9fYWN0aXZlKTsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBVbml0IEV4Y2VwdGlvbiAiCi0JCQkgICAgICAgIk9jY3VyZWQgaW4gd3JpdGUgY2hhbm5lbFxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUpOworCQkJZGV2X2luZm8oJmNkZXYtPmRldiwKKwkJCQkiJXM6IFVuaXQgRXhjZXB0aW9uICIKKwkJCQkib2NjdXJyZWQgaW4gd3JpdGUgY2hhbm5lbFxuIiwKKwkJCQlkZXYtPm5hbWUpOwogCQl9CiAJCWlmICghKChwX2NoLT5pcmItPnNjc3cuY21kLnN0Y3RsICYgU0NTV19TVENUTF9TRUNfU1RBVFVTKSB8fAogCQkocF9jaC0+aXJiLT5zY3N3LmNtZC5zdGN0bCA9PSBTQ1NXX1NUQ1RMX1NUQVRVU19QRU5EKSB8fApAQCAtNzU3LDggKzc3NSw5IEBACiAJCUNMQVdfREJGX1RFWFQoNCwgdHJhY2UsICJTdFd0RXhpdCIpOwogCQlyZXR1cm47CiAJZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHdyb25nIHNlbGVjdGlvbiBjb2RlIC0gaXJxICIKLQkJCSJzdGF0ZT0lZFxuIiwgZGV2LT5uYW1lLCBwX2NoLT5jbGF3X3N0YXRlKTsKKwkJZGV2X3dhcm4oJmNkZXYtPmRldiwKKwkJCSJUaGUgQ0xBVyBkZXZpY2UgZm9yICVzIHJlY2VpdmVkIGFuIHVuZXhwZWN0ZWQgSVJRXG4iLAorCQkJIGRldi0+bmFtZSk7CiAJCUNMQVdfREJGX1RFWFQoMiwgdHJhY2UsICJiYWRJUlEiKTsKIAkJcmV0dXJuOwogICAgICAgICB9CkBAIC05MTAsOCArOTI5LDEwIEBACiAgICAgICAgIGlmICgoKHByaXZwdHItPmNoYW5uZWxbUkVBRF0ubGFzdF9kc3RhdCB8CiAJCXByaXZwdHItPmNoYW5uZWxbV1JJVEVdLmxhc3RfZHN0YXQpICYKIAkJfihERVZfU1RBVF9DSE5fRU5EIHwgREVWX1NUQVRfREVWX0VORCkpICE9IDB4MDApIHsKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9XQVJOSU5HICIlczogY2hhbm5lbCBwcm9ibGVtcyBkdXJpbmcgY2xvc2UgLSAiCi0JCQkicmVhZDogJTAyeCAtICB3cml0ZTogJTAyeFxuIiwKKwkJZGV2X3dhcm4oJnByaXZwdHItPmNoYW5uZWxbUkVBRF0uY2Rldi0+ZGV2LAorCQkJIkRlYWN0aXZhdGluZyAlcyBjb21wbGV0ZWQgd2l0aCBpbmNvcnJlY3QiCisJCQkiIHN1YmNoYW5uZWwgc3RhdHVzICIKKwkJCSIocmVhZCAlMDJ4LCB3cml0ZSAlMDJ4KVxuIiwKICAgICAgICAgICAgICAgICBkZXYtPm5hbWUsCiAJCXByaXZwdHItPmNoYW5uZWxbUkVBRF0ubGFzdF9kc3RhdCwKIAkJcHJpdnB0ci0+Y2hhbm5lbFtXUklURV0ubGFzdF9kc3RhdCk7CkBAIC0xMDEyLDcgKzEwMzMsNyBAQAogcGFnZXNfdG9fb3JkZXJfb2ZfbWFnKGludCBudW1fb2ZfcGFnZXMpCiB7CiAJaW50CW9yZGVyX29mX21hZz0xOwkJLyogYXNzdW1lIDIgcGFnZXMgKi8KLQlpbnQJbnVtcD0yOworCWludAludW1wOwogCiAJQ0xBV19EQkZfVEVYVF8oNSwgdHJhY2UsICJwYWdlcyVkIiwgbnVtX29mX3BhZ2VzKTsKIAlpZiAobnVtX29mX3BhZ2VzID09IDEpICAge3JldHVybiAwOyB9ICAvKiBtYWduaXR1ZGUgb2YgMCA9IDEgcGFnZSAqLwpAQCAtMTA3Niw4ICsxMDk3LDggQEAKICAgICAgICAgfQogCiAgICAgICAgIGlmICggcHJpdnB0ci0+IHBfcmVhZF9hY3RpdmVfZmlyc3QgPT1OVUxMICkgewotICAgICAgICAgICAgICAgIHByaXZwdHItPiBwX3JlYWRfYWN0aXZlX2ZpcnN0PSBwX2ZpcnN0OyAgLyogICAgc2V0IG5ldyBmaXJzdCAqLwotICAgICAgICAgICAgICAgIHByaXZwdHItPiBwX3JlYWRfYWN0aXZlX2xhc3QgPSBwX2xhc3Q7ICAgLyogICAgc2V0IG5ldyBsYXN0ICAqLworCQlwcml2cHRyLT5wX3JlYWRfYWN0aXZlX2ZpcnN0ID0gcF9maXJzdDsgIC8qICBzZXQgbmV3IGZpcnN0ICovCisJCXByaXZwdHItPnBfcmVhZF9hY3RpdmVfbGFzdCAgPSBwX2xhc3Q7ICAgLyogIHNldCBuZXcgbGFzdCAgKi8KICAgICAgICAgfQogICAgICAgICBlbHNlIHsKIApAQCAtMTExMyw3ICsxMTM0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHByaXZwdHItPnBfcmVhZF9hY3RpdmVfbGFzdC0+cl9USUNfMi5jZGE9CiAJCQkJKF9fdTMyKV9fcGEoJnBfZmlyc3QtPnJlYWQpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAvKiAgICAgIGNoYWluIGluIG5ldyBzZXQgb2YgYmxvY2tzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJLyogICAgICBjaGFpbiBpbiBuZXcgc2V0IG9mIGJsb2NrcyAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgIHByaXZwdHItPnBfcmVhZF9hY3RpdmVfbGFzdC0+bmV4dCA9IHBfZmlyc3Q7CiAgICAgICAgICAgICAgICAgcHJpdnB0ci0+cF9yZWFkX2FjdGl2ZV9sYXN0PXBfbGFzdDsKICAgICAgICAgfSAvKiBlbmQgb2YgaWYgKCBwcml2cHRyLT4gcF9yZWFkX2FjdGl2ZV9maXJzdCA9PU5VTEwpICAqLwpAQCAtMTEzNSwyMSArMTE1NiwxOCBAQAogCQljYXNlIC1FQlVTWTogLyogQlVTWSBpcyBhIHRyYW5zaWVudCBzdGF0ZSBubyBhY3Rpb24gbmVlZGVkICovCiAJCQlicmVhazsKIAkJY2FzZSAtRU5PREVWOgotCQkJcHJpbnRrKEtFUk5fRU1FUkcgIiVzOiBNaXNzaW5nIGRldmljZSBjYWxsZWQgIgotCQkJCSJmb3IgSU8gRU5PREVWXG4iLCBkZXZfbmFtZSgmY2Rldi0+ZGV2KSk7Ci0JCQlicmVhazsKLQkJY2FzZSAtRUlPOgotCQkJcHJpbnRrKEtFUk5fRU1FUkcgIiVzOiBTdGF0dXMgcGVuZGluZy4uLiBFSU8gXG4iLAotCQkJCWRldl9uYW1lKCZjZGV2LT5kZXYpKTsKKwkJCWRldl9lcnIoJmNkZXYtPmRldiwgIlRoZSByZW1vdGUgY2hhbm5lbCBhZGFwdGVyIGlzIG5vdCIKKwkJCQkiIGF2YWlsYWJsZVxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAtRUlOVkFMOgotCQkJcHJpbnRrKEtFUk5fRU1FUkcgIiVzOiBJbnZhbGlkIERldiBTdGF0ZSBFSU5WQUwgXG4iLAotCQkJCWRldl9uYW1lKCZjZGV2LT5kZXYpKTsKKwkJCWRldl9lcnIoJmNkZXYtPmRldiwKKwkJCQkiVGhlIHN0YXR1cyBvZiB0aGUgcmVtb3RlIGNoYW5uZWwgYWRhcHRlciIKKwkJCQkiIGlzIG5vdCB2YWxpZFxuIik7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCXByaW50ayhLRVJOX0VNRVJHICIlczogVW5rbm93biBlcnJvciBpbiAiCi0JCQkJICJEb19JTyAlZFxuIiwgZGV2X25hbWUoJmNkZXYtPmRldiksCi0JCQkgICAgICAgcmV0dXJuX2NvZGUpOworCQkJZGV2X2VycigmY2Rldi0+ZGV2LCAiVGhlIGNvbW1vbiBkZXZpY2UgbGF5ZXIiCisJCQkJIiByZXR1cm5lZCBlcnJvciBjb2RlICVkXG4iLAorCQkJCSAgcmV0dXJuX2NvZGUpOwogCQl9CiAJfQogCUNMQVdfREJGX1RFWFQoNCwgdHJhY2UsICJjY3dyZXQiKTsKQEAgLTExNjMsNDIgKzExODEsMzcgQEAKIGNjd19jaGVja191bml0X2NoZWNrKHN0cnVjdCBjaGJrICogcF9jaCwgdW5zaWduZWQgY2hhciBzZW5zZSApCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBwX2NoLT5uZGV2OworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwX2NoLT5jZGV2LT5kZXY7CiAKIAlDTEFXX0RCRl9URVhUKDQsIHRyYWNlLCAidW5pdGNoZWsiKTsKLSAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFVuaXQgQ2hlY2sgd2l0aCBzZW5zZSBieXRlOjB4JTA0eFxuIiwKLQkgICAgICAgbmRldi0+bmFtZSwgc2Vuc2UpOworCWRldl93YXJuKGRldiwgIlRoZSBjb21tdW5pY2F0aW9uIHBlZXIgb2YgJXMgZGlzY29ubmVjdGVkXG4iLAorCQluZGV2LT5uYW1lKTsKIAotICAgICAgICBpZiAoc2Vuc2UgJiAweDQwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHNlbnNlICYgMHgwMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IEludGVyZmFjZSBkaXNjb25uZWN0IG9yICIKLQkJCQkiU2VsZWN0aXZlIHJlc2V0ICIKLQkJCQkib2NjdXJyZWQgKHJlbW90ZSBzaWRlKVxuIiwgbmRldi0+bmFtZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFN5c3RlbSByZXNldCBvY2N1cmVkIgotCQkJCSIgKHJlbW90ZSBzaWRlKVxuIiwgbmRldi0+bmFtZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHNlbnNlICYgMHgyMCkgewotICAgICAgICAgICAgICAgIGlmIChzZW5zZSAmIDB4MDQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBEYXRhLXN0cmVhbWluZyAiCi0JCQkJInRpbWVvdXQpXG4iLCBuZGV2LT5uYW1lKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSAgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IERhdGEtdHJhbnNmZXIgcGFyaXR5IgotCQkJCSIgZXJyb3JcbiIsIG5kZXYtPm5hbWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChzZW5zZSAmIDB4MTApIHsKLSAgICAgICAgICAgICAgICBpZiAoc2Vuc2UgJiAweDIwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9XQVJOSU5HICIlczogSGFyZHdhcmUgbWFsZnVuY3Rpb24gIgotCQkJCSIocmVtb3RlIHNpZGUpXG4iLCBuZGV2LT5uYW1lKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9XQVJOSU5HICIlczogcmVhZC1kYXRhIHBhcml0eSBlcnJvciAiCi0JCQkJIihyZW1vdGUgc2lkZSlcbiIsIG5kZXYtPm5hbWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfQorCWlmIChzZW5zZSAmIDB4NDApIHsKKwkJaWYgKHNlbnNlICYgMHgwMSkgeworCQkJZGV2X3dhcm4oZGV2LCAiVGhlIHJlbW90ZSBjaGFubmVsIGFkYXB0ZXIgZm9yIgorCQkJCSIgJXMgaGFzIGJlZW4gcmVzZXRcbiIsCisJCQkJbmRldi0+bmFtZSk7CisJCX0KKwl9IGVsc2UgaWYgKHNlbnNlICYgMHgyMCkgeworCQlpZiAoc2Vuc2UgJiAweDA0KSB7CisJCQlkZXZfd2FybihkZXYsICJBIGRhdGEgc3RyZWFtaW5nIHRpbWVvdXQgb2NjdXJyZWQiCisJCQkJIiBmb3IgJXNcbiIsCisJCQkJbmRldi0+bmFtZSk7CisJCX0gZWxzZSBpZiAoc2Vuc2UgJiAweDEwKSB7CisJCQlkZXZfd2FybihkZXYsICJUaGUgcmVtb3RlIGNoYW5uZWwgYWRhcHRlciBmb3IgJXMiCisJCQkJIiBpcyBmYXVsdHlcbiIsCisJCQkJbmRldi0+bmFtZSk7CisJCX0gZWxzZSB7CisJCQlkZXZfd2FybihkZXYsICJBIGRhdGEgdHJhbnNmZXIgcGFyaXR5IGVycm9yIG9jY3VycmVkIgorCQkJCSIgZm9yICVzXG4iLAorCQkJCW5kZXYtPm5hbWUpOworCQl9CisJfSBlbHNlIGlmIChzZW5zZSAmIDB4MTApIHsKKwkJZGV2X3dhcm4oZGV2LCAiQSByZWFkIGRhdGEgcGFyaXR5IGVycm9yIG9jY3VycmVkIgorCQkJIiBmb3IgJXNcbiIsCisJCQluZGV2LT5uYW1lKTsKKwl9CiAKIH0gICAvKiAgICBlbmQgb2YgY2N3X2NoZWNrX3VuaXRfY2hlY2sgICAgKi8KIApAQCAtMTIzNSw3ICsxMjQ4LDcgQEAKIAkJCWJyZWFrOwogCX0KIAotICAgICAgICByZXR1cm4gMDsKKwlyZXR1cm4gcmM7CiB9ICAgIC8qICAgIGVuZCBvZiBmaW5kX2xpbmsgICAgKi8KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgpAQCAtMTM0Nyw3ICsxMzYwLDEwIEBACiAgICAgICAgICAgICAgICAgcHJpdnB0ci0+cF93cml0ZV9mcmVlX2NoYWluPXBfdGhpc19jY3ctPm5leHQ7CiAgICAgICAgICAgICAgICAgcF90aGlzX2Njdy0+bmV4dD1OVUxMOwogICAgICAgICAgICAgICAgIC0tcHJpdnB0ci0+d3JpdGVfZnJlZV9jb3VudDsgLyogLTEgKi8KLSAgICAgICAgICAgICAgICBieXRlc0luVGhpc0J1ZmZlcj1sZW5fb2ZfZGF0YTsKKwkJaWYgKGxlbl9vZl9kYXRhID49IHByaXZwdHItPnBfZW52LT53cml0ZV9zaXplKQorCQkJYnl0ZXNJblRoaXNCdWZmZXIgPSBwcml2cHRyLT5wX2Vudi0+d3JpdGVfc2l6ZTsKKwkJZWxzZQorCQkJYnl0ZXNJblRoaXNCdWZmZXIgPSBsZW5fb2ZfZGF0YTsKICAgICAgICAgICAgICAgICBtZW1jcHkoIHBfdGhpc19jY3ctPnBfYnVmZmVyLHBEYXRhQWRkcmVzcywgYnl0ZXNJblRoaXNCdWZmZXIpOwogICAgICAgICAgICAgICAgIGxlbl9vZl9kYXRhLT1ieXRlc0luVGhpc0J1ZmZlcjsKICAgICAgICAgICAgICAgICBwRGF0YUFkZHJlc3MrPSh1bnNpZ25lZCBsb25nKWJ5dGVzSW5UaGlzQnVmZmVyOwpAQCAtMTM3NSw3ICsxMzkxLDcgQEAKICAgICAgICAgKi8KIAogICAgICAgICBpZiAocF9maXJzdF9jY3chPU5VTEwpIHsKLSAgICAgICAgICAgICAgICAvKiAgICAgIHNldHVwIGVuZGluZyBjY3cgc2VxdWVuY2UgZm9yIHRoaXMgc2VnbWVudCAgICAgICAgICAgICAgKi8KKwkJLyogICAgICBzZXR1cCBlbmRpbmcgY2N3IHNlcXVlbmNlIGZvciB0aGlzIHNlZ21lbnQgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAgcEVuZD1wcml2cHRyLT5wX2VuZF9jY3c7CiAgICAgICAgICAgICAgICAgaWYgKHBFbmQtPndyaXRlMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgcEVuZC0+d3JpdGUxPTB4MDA7ICAgLyogc2Vjb25kIGVuZCBjY3cgaXMgbm93IGFjdGl2ZSAqLwpAQCAtMTY5NywxMCArMTcxMywxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgcF9idWYtPiB3X1RJQ18xLmZsYWdzICAgICAgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgcF9idWYtPiB3X1RJQ18xLmNvdW50ICAgICAgPSAwOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKCh1bnNpZ25lZCBsb25nKXBfYnVmZitwcml2cHRyLT5wX2Vudi0+d3JpdGVfc2l6ZSkgPj0KKwkJCWlmICgoKHVuc2lnbmVkIGxvbmcpcF9idWZmICsKKwkJCQkJICAgIHByaXZwdHItPnBfZW52LT53cml0ZV9zaXplKSA+PQogCQkJICAgKCh1bnNpZ25lZCBsb25nKShwX2J1ZmYrMioKLQkJCQkocHJpdnB0ci0+cF9lbnYtPndyaXRlX3NpemUpIC0xKSAmIFBBR0VfTUFTSykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBfYnVmZj0gcF9idWZmK3ByaXZwdHItPnBfZW52LT53cml0ZV9zaXplOworCQkJICAgIChwcml2cHRyLT5wX2Vudi0+d3JpdGVfc2l6ZSkgLSAxKSAmIFBBR0VfTUFTSykpIHsKKwkJCQlwX2J1ZmYgPSBwX2J1ZmYrcHJpdnB0ci0+cF9lbnYtPndyaXRlX3NpemU7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CkBAIC0xODQwLDE1ICsxODU3LDE2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBwX2J1Zi0+aGVhZGVyLm9wY29kZT0weGZmOwogICAgICAgICAgICAgICAgICAgICAgICAgcF9idWYtPmhlYWRlci5mbGFnPUNMQVdfUEVORElORzsKIAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgodW5zaWduZWQgbG9uZylwX2J1ZmYrcHJpdnB0ci0+cF9lbnYtPnJlYWRfc2l6ZSkgPj0KLQkJCQkoKHVuc2lnbmVkIGxvbmcpKHBfYnVmZisyKihwcml2cHRyLT5wX2Vudi0+cmVhZF9zaXplKSAtMSkKLQkJCQkgJiBQQUdFX01BU0spICkgeworCQkJaWYgKCgodW5zaWduZWQgbG9uZylwX2J1ZmYrcHJpdnB0ci0+cF9lbnYtPnJlYWRfc2l6ZSkgPj0KKwkJCSAgKCh1bnNpZ25lZCBsb25nKShwX2J1ZmYrMioocHJpdnB0ci0+cF9lbnYtPnJlYWRfc2l6ZSkKKwkJCQkgLTEpCisJCQkgICAmIFBBR0VfTUFTSykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcF9idWZmPSBwX2J1ZmYrcHJpdnB0ci0+cF9lbnYtPnJlYWRfc2l6ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwX2J1ZmY9CiAJCQkJKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpCi0JCQkJCShwX2J1ZmYrMioocHJpdnB0ci0+cF9lbnYtPnJlYWRfc2l6ZSkgLTEpCisJCQkJCShwX2J1ZmYrMioocHJpdnB0ci0+cF9lbnYtPnJlYWRfc2l6ZSktMSkKIAkJCQkJICYgUEFHRV9NQVNLKSA7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSAgIC8qIGZvciByZWFkX2J1ZmZlcnMgICAqLwpAQCAtMTg1NiwyNCArMTg3NCwyOCBAQAogICAgICAgICAgIGVsc2UgeyAgLyogcmVhZCBTaXplID49IFBBR0VfU0laRSAgKi8KICAgICAgICAgICAgICAgICBmb3IgKGk9MCA7IGk8IHByaXZwdHItPnBfZW52LT5yZWFkX2J1ZmZlcnMgOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHBfYnVmZiA9ICh2b2lkICopX19nZXRfZnJlZV9wYWdlcyhfX0dGUF9ETUEsCi0JCQkJKGludClwYWdlc190b19vcmRlcl9vZl9tYWcocHJpdnB0ci0+cF9idWZmX3BhZ2VzX3BlcnJlYWQpICk7CisJCQkJKGludClwYWdlc190b19vcmRlcl9vZl9tYWcoCisJCQkJCXByaXZwdHItPnBfYnVmZl9wYWdlc19wZXJyZWFkKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocF9idWZmPT1OVUxMKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpcHJpdnB0ci0+cF9idWZmX2NjdywKLQkJCQkJKGludClwYWdlc190b19vcmRlcl9vZl9tYWcocHJpdnB0ci0+cF9idWZmX2Njd19udW0pKTsKKwkJCQkJKGludClwYWdlc190b19vcmRlcl9vZl9tYWcocHJpdnB0ci0+CisJCQkJCXBfYnVmZl9jY3dfbnVtKSk7CiAJCQkJLyogZnJlZSB0aGUgd3JpdGUgcGFnZXMgICovCiAJICAgICAgICAgICAgICAgICAgICAgICAgcF9idWY9cHJpdnB0ci0+cF9idWZmX3dyaXRlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocF9idWYhPU5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXBfYnVmLT5wX2J1ZmZlciwKLQkJCQkJCShpbnQpcGFnZXNfdG9fb3JkZXJfb2ZfbWFnKAotCQkJCQkJcHJpdnB0ci0+cF9idWZmX3BhZ2VzX3BlcndyaXRlICkpOworCQkJCQlmcmVlX3BhZ2VzKAorCQkJCQkgICAgKHVuc2lnbmVkIGxvbmcpcF9idWYtPnBfYnVmZmVyLAorCQkJCQkgICAgKGludClwYWdlc190b19vcmRlcl9vZl9tYWcoCisJCQkJCSAgICBwcml2cHRyLT5wX2J1ZmZfcGFnZXNfcGVyd3JpdGUpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwX2J1Zj1wX2J1Zi0+bmV4dDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogCQkJCS8qIGZyZWUgYW55IHJlYWQgcGFnZXMgYWxyZWFkeSBhbGxvYyAgKi8KIAkgICAgICAgICAgICAgICAgICAgICAgICBwX2J1Zj1wcml2cHRyLT5wX2J1ZmZfcmVhZDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHBfYnVmIT1OVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZylwX2J1Zi0+cF9idWZmZXIsCi0JCQkJCQkoaW50KXBhZ2VzX3RvX29yZGVyX29mX21hZygKLQkJCQkJCXByaXZwdHItPnBfYnVmZl9wYWdlc19wZXJyZWFkICkpOworCQkJCQlmcmVlX3BhZ2VzKAorCQkJCQkgICAgKHVuc2lnbmVkIGxvbmcpcF9idWYtPnBfYnVmZmVyLAorCQkJCQkgICAgKGludClwYWdlc190b19vcmRlcl9vZl9tYWcoCisJCQkJCSAgICAgcHJpdnB0ci0+cF9idWZmX3BhZ2VzX3BlcnJlYWQpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwX2J1Zj1wX2J1Zi0+bmV4dDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2cHRyLT5wX2J1ZmZfY2N3PU5VTEw7CkBAIC0yMDAzLDcgKzIwMjUsNyBAQAogCXRkZXYgPSAmcHJpdnB0ci0+Y2hhbm5lbFtSRUFEXS5jZGV2LT5kZXY7CiAJbWVtY3B5KCAmdGVtcF9ob3N0X25hbWUsIHBfZW52LT5ob3N0X25hbWUsIDgpOwogICAgICAgICBtZW1jcHkoICZ0ZW1wX3dzX25hbWUsIHBfZW52LT5hZGFwdGVyX25hbWUgLCA4KTsKLSAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IENMQVcgZGV2aWNlICUuOHM6ICIKKwlkZXZfaW5mbyh0ZGV2LCAiJXM6IENMQVcgZGV2aWNlICUuOHM6ICIKIAkJIlJlY2VpdmVkIENvbnRyb2wgUGFja2V0XG4iLAogCQlkZXYtPm5hbWUsIHRlbXBfd3NfbmFtZSk7CiAgICAgICAgIGlmIChwcml2cHRyLT5yZWxlYXNlX3BlbmQ9PTEpIHsKQEAgLTIwMjIsMzIgKzIwNDQsMzAgQEAKIAkJaWYgKHBfY3RsYmstPnZlcnNpb24gIT0gQ0xBV19WRVJTSU9OX0lEKSB7CiAJCQljbGF3X3NuZF9zeXNfdmFsaWRhdGVfcnNwKGRldiwgcF9jdGxiaywKIAkJCQlDTEFXX1JDX1dST05HX1ZFUlNJT04pOwotCQkJcHJpbnRrKCIlczogJWQgaXMgd3JvbmcgdmVyc2lvbiBpZC4gIgotCQkJICAgICAgICJFeHBlY3RlZCAlZFxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIHBfY3RsYmstPnZlcnNpb24sCi0JCQkgICAgICAgQ0xBV19WRVJTSU9OX0lEKTsKKwkJCWRldl93YXJuKHRkZXYsICJUaGUgY29tbXVuaWNhdGlvbiBwZWVyIG9mICVzIgorCQkJCSIgdXNlcyBhbiBpbmNvcnJlY3QgQVBJIHZlcnNpb24gJWRcbiIsCisJCQkJZGV2LT5uYW1lLCBwX2N0bGJrLT52ZXJzaW9uKTsKIAkJfQogCQlwX3N5c3ZhbCA9IChzdHJ1Y3Qgc3lzdmFsICopJihwX2N0bGJrLT5kYXRhKTsKLQkJcHJpbnRrKCIlczogUmVjdiBTeXMgVmFsaWRhdGUgUmVxdWVzdDogIgotCQkgICAgICAgIlZlcnM9JWQsbGlua19pZD0lZCxDb3JyPSVkLFdTIG5hbWU9JS4iCi0JCSAgICAgICAiOHMsSG9zdCBuYW1lPSUuOHNcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIHBfY3RsYmstPnZlcnNpb24sCi0JCSAgICAgICBwX2N0bGJrLT5saW5raWQsCi0JCSAgICAgICBwX2N0bGJrLT5jb3JyZWxhdG9yLAotCQkgICAgICAgcF9zeXN2YWwtPldTX25hbWUsCi0JCSAgICAgICBwX3N5c3ZhbC0+aG9zdF9uYW1lKTsKKwkJZGV2X2luZm8odGRldiwgIiVzOiBSZWN2IFN5cyBWYWxpZGF0ZSBSZXF1ZXN0OiAiCisJCQkiVmVycz0lZCxsaW5rX2lkPSVkLENvcnI9JWQsV1MgbmFtZT0lLjhzLCIKKwkJCSJIb3N0IG5hbWU9JS44c1xuIiwKKwkJCWRldi0+bmFtZSwgcF9jdGxiay0+dmVyc2lvbiwKKwkJCXBfY3RsYmstPmxpbmtpZCwKKwkJCXBfY3RsYmstPmNvcnJlbGF0b3IsCisJCQlwX3N5c3ZhbC0+V1NfbmFtZSwKKwkJCXBfc3lzdmFsLT5ob3N0X25hbWUpOwogCQlpZiAobWVtY21wKHRlbXBfaG9zdF9uYW1lLCBwX3N5c3ZhbC0+aG9zdF9uYW1lLCA4KSkgewogCQkJY2xhd19zbmRfc3lzX3ZhbGlkYXRlX3JzcChkZXYsIHBfY3RsYmssCiAJCQkJQ0xBV19SQ19OQU1FX01JU01BVENIKTsKIAkJCUNMQVdfREJGX1RFWFQoMiwgc2V0dXAsICJIU1RCQUQiKTsKIAkJCUNMQVdfREJGX1RFWFRfKDIsIHNldHVwLCAiJXMiLCBwX3N5c3ZhbC0+aG9zdF9uYW1lKTsKIAkJCUNMQVdfREJGX1RFWFRfKDIsIHNldHVwLCAiJXMiLCB0ZW1wX2hvc3RfbmFtZSk7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogIEhvc3QgbmFtZSBtaXNtYXRjaFxuIiwKLQkJCQlkZXYtPm5hbWUpOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFJlY2VpdmVkIDolczogIgotCQkJCSJleHBlY3RlZCA6JXM6IFxuIiwKLQkJCQlkZXYtPm5hbWUsCisJCQlkZXZfd2Fybih0ZGV2LAorCQkJCSJIb3N0IG5hbWUgJXMgZm9yICVzIGRvZXMgbm90IG1hdGNoIHRoZSIKKwkJCQkiIHJlbW90ZSBhZGFwdGVyIG5hbWUgJXNcbiIsCiAJCQkJcF9zeXN2YWwtPmhvc3RfbmFtZSwKKwkJCQlkZXYtPm5hbWUsCiAJCQkJdGVtcF9ob3N0X25hbWUpOwogCQl9CiAJCWlmIChtZW1jbXAodGVtcF93c19uYW1lLCBwX3N5c3ZhbC0+V1NfbmFtZSwgOCkpIHsKQEAgLTIwNTYsMzUgKzIwNzYsMzggQEAKIAkJCUNMQVdfREJGX1RFWFQoMiwgc2V0dXAsICJXU05CQUQiKTsKIAkJCUNMQVdfREJGX1RFWFRfKDIsIHNldHVwLCAiJXMiLCBwX3N5c3ZhbC0+V1NfbmFtZSk7CiAJCQlDTEFXX0RCRl9URVhUXygyLCBzZXR1cCwgIiVzIiwgdGVtcF93c19uYW1lKTsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBXUyBuYW1lIG1pc21hdGNoXG4iLAotCQkJCWRldi0+bmFtZSk7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogUmVjZWl2ZWQgOiVzOiAiCi0JCQkgICAgICAgImV4cGVjdGVkIDolczogXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwKLQkJCSAgICAgICBwX3N5c3ZhbC0+V1NfbmFtZSwKLQkJCSAgICAgICB0ZW1wX3dzX25hbWUpOworCQkJZGV2X3dhcm4odGRldiwgIkFkYXB0ZXIgbmFtZSAlcyBmb3IgJXMgZG9lcyBub3QgbWF0Y2giCisJCQkJIiB0aGUgcmVtb3RlIGhvc3QgbmFtZSAlc1xuIiwKKwkJCQlwX3N5c3ZhbC0+V1NfbmFtZSwKKwkJCQlkZXYtPm5hbWUsCisJCQkJdGVtcF93c19uYW1lKTsKIAkJfQogCQlpZiAoKHBfc3lzdmFsLT53cml0ZV9mcmFtZV9zaXplIDwgcF9lbnYtPndyaXRlX3NpemUpICYmCiAJCSAgICAocF9lbnYtPnBhY2tpbmcgPT0gMCkpIHsKIAkJCWNsYXdfc25kX3N5c192YWxpZGF0ZV9yc3AoZGV2LCBwX2N0bGJrLAogCQkJCUNMQVdfUkNfSE9TVF9SQ1ZfVE9PX1NNQUxMKTsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBob3N0IHdyaXRlIHNpemUgaXMgdG9vICIKLQkJCQkic21hbGxcbiIsIGRldi0+bmFtZSk7CisJCQlkZXZfd2Fybih0ZGV2LAorCQkJCSJUaGUgbG9jYWwgd3JpdGUgYnVmZmVyIGlzIHNtYWxsZXIgdGhhbiB0aGUiCisJCQkJIiByZW1vdGUgcmVhZCBidWZmZXJcbiIpOwogCQkJQ0xBV19EQkZfVEVYVCgyLCBzZXR1cCwgIndydHN6YmFkIik7CiAJCX0KIAkJaWYgKChwX3N5c3ZhbC0+cmVhZF9mcmFtZV9zaXplIDwgcF9lbnYtPnJlYWRfc2l6ZSkgJiYKIAkJICAgIChwX2Vudi0+cGFja2luZyA9PSAwKSkgewogCQkJY2xhd19zbmRfc3lzX3ZhbGlkYXRlX3JzcChkZXYsIHBfY3RsYmssCiAJCQkJQ0xBV19SQ19IT1NUX1JDVl9UT09fU01BTEwpOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGhvc3QgcmVhZCBzaXplIGlzIHRvbyAiCi0JCQkJInNtYWxsXG4iLCBkZXYtPm5hbWUpOworCQkJZGV2X3dhcm4odGRldiwKKwkJCQkiVGhlIGxvY2FsIHJlYWQgYnVmZmVyIGlzIHNtYWxsZXIgdGhhbiB0aGUiCisJCQkJIiByZW1vdGUgd3JpdGUgYnVmZmVyXG4iKTsKIAkJCUNMQVdfREJGX1RFWFQoMiwgc2V0dXAsICJyZHNpemJhZCIpOwogCQl9CiAJCWNsYXdfc25kX3N5c192YWxpZGF0ZV9yc3AoZGV2LCBwX2N0bGJrLCAwKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IENMQVcgZGV2aWNlICUuOHM6IFN5c3RlbSB2YWxpZGF0ZSAiCi0JCQkiY29tcGxldGVkLlxuIiwgZGV2LT5uYW1lLCB0ZW1wX3dzX25hbWUpOwotCQlwcmludGsoIiVzOiBzeXMgVmFsaWRhdGUgUnNpemU6JWQgV3NpemU6JWRcbiIsIGRldi0+bmFtZSwKLQkJCXBfc3lzdmFsLT5yZWFkX2ZyYW1lX3NpemUsIHBfc3lzdmFsLT53cml0ZV9mcmFtZV9zaXplKTsKKwkJZGV2X2luZm8odGRldiwKKwkJCSJDTEFXIGRldmljZSAlLjhzOiBTeXN0ZW0gdmFsaWRhdGUiCisJCQkiIGNvbXBsZXRlZC5cbiIsIHRlbXBfd3NfbmFtZSk7CisJCWRldl9pbmZvKHRkZXYsCisJCQkiJXM6IHN5cyBWYWxpZGF0ZSBSc2l6ZTolZCBXc2l6ZTolZFxuIiwKKwkJCWRldi0+bmFtZSwgcF9zeXN2YWwtPnJlYWRfZnJhbWVfc2l6ZSwKKwkJCXBfc3lzdmFsLT53cml0ZV9mcmFtZV9zaXplKTsKIAkJcHJpdnB0ci0+c3lzdGVtX3ZhbGlkYXRlX2NvbXAgPSAxOwogCQlpZiAoc3RybmNtcChwX2Vudi0+YXBpX3R5cGUsIFdTX0FQUExfTkFNRV9QQUNLRUQsIDYpID09IDApCiAJCQlwX2Vudi0+cGFja2luZyA9IFBBQ0tJTkdfQVNLOwpAQCAtMjA5Miw4ICsyMTE1LDEwIEBACiAJCWJyZWFrOwogCWNhc2UgU1lTVEVNX1ZBTElEQVRFX1JFU1BPTlNFOgogCQlwX3N5c3ZhbCA9IChzdHJ1Y3Qgc3lzdmFsICopJihwX2N0bGJrLT5kYXRhKTsKLQkJcHJpbnRrKCIlczogUmVjdiBTeXMgVmFsaWRhdGUgUmVzcDogVmVycz0lZCxDb3JyPSVkLFJDPSVkLCIKLQkJCSJXUyBuYW1lPSUuOHMsSG9zdCBuYW1lPSUuOHNcbiIsCisJCWRldl9pbmZvKHRkZXYsCisJCQkiU2V0dGluZ3MgZm9yICVzIHZhbGlkYXRlZCAodmVyc2lvbj0lZCwgIgorCQkJInJlbW90ZSBkZXZpY2U9JWQsIHJjPSVkLCBhZGFwdGVyIG5hbWU9JS44cywgIgorCQkJImhvc3QgbmFtZT0lLjhzKVxuIiwKIAkJCWRldi0+bmFtZSwKIAkJCXBfY3RsYmstPnZlcnNpb24sCiAJCQlwX2N0bGJrLT5jb3JyZWxhdG9yLApAQCAtMjEwMiw0MSArMjEyNywzOSBAQAogCQkJcF9zeXN2YWwtPmhvc3RfbmFtZSk7CiAJCXN3aXRjaCAocF9jdGxiay0+cmMpIHsKIAkJY2FzZSAwOgotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IENMQVcgZGV2aWNlICIKLQkJCQkiJS44czogU3lzdGVtIHZhbGlkYXRlICIKLQkJCQkiY29tcGxldGVkLlxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIHRlbXBfd3NfbmFtZSk7CisJCQlkZXZfaW5mbyh0ZGV2LCAiJXM6IENMQVcgZGV2aWNlICIKKwkJCQkiJS44czogU3lzdGVtIHZhbGlkYXRlIGNvbXBsZXRlZC5cbiIsCisJCQkJZGV2LT5uYW1lLCB0ZW1wX3dzX25hbWUpOwogCQkJaWYgKHByaXZwdHItPnN5c3RlbV92YWxpZGF0ZV9jb21wID09IDApCiAJCQkJY2xhd19zdHJ0X2Nvbm5fcmVxKGRldik7CiAJCQlwcml2cHRyLT5zeXN0ZW1fdmFsaWRhdGVfY29tcCA9IDE7CiAJCQlicmVhazsKIAkJY2FzZSBDTEFXX1JDX05BTUVfTUlTTUFUQ0g6Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogU3lzIFZhbGlkYXRlICIKLQkJCQkiUmVzcCA6IEhvc3QsIFdTIG5hbWUgaXMgIgotCQkJCSJtaXNtYXRjaFxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUpOworCQkJZGV2X3dhcm4odGRldiwgIlZhbGlkYXRpbmcgJXMgZmFpbGVkIGJlY2F1c2Ugb2YiCisJCQkJIiBhIGhvc3Qgb3IgYWRhcHRlciBuYW1lIG1pc21hdGNoXG4iLAorCQkJCWRldi0+bmFtZSk7CiAJCQlicmVhazsKIAkJY2FzZSBDTEFXX1JDX1dST05HX1ZFUlNJT046Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogU3lzIFZhbGlkYXRlICIKLQkJCQkiUmVzcCA6IFdyb25nIHZlcnNpb25cbiIsCisJCQlkZXZfd2Fybih0ZGV2LCAiVmFsaWRhdGluZyAlcyBmYWlsZWQgYmVjYXVzZSBvZiBhIgorCQkJCSIgdmVyc2lvbiBjb25mbGljdFxuIiwKIAkJCQlkZXYtPm5hbWUpOwogCQkJYnJlYWs7CiAJCWNhc2UgQ0xBV19SQ19IT1NUX1JDVl9UT09fU01BTEw6Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogU3lzIFZhbGlkYXRlICIKLQkJCQkiUmVzcCA6IGJhZCBmcmFtZSBzaXplXG4iLAorCQkJZGV2X3dhcm4odGRldiwgIlZhbGlkYXRpbmcgJXMgZmFpbGVkIGJlY2F1c2Ugb2YgYSIKKwkJCQkiIGZyYW1lIHNpemUgY29uZmxpY3RcbiIsCiAJCQkJZGV2LT5uYW1lKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFN5cyBWYWxpZGF0ZSAiCi0JCQkJImVycm9yIGNvZGU9JWQgXG4iLAotCQkJCSBkZXYtPm5hbWUsIHBfY3RsYmstPnJjKTsKKwkJCWRldl93YXJuKHRkZXYsICJUaGUgY29tbXVuaWNhdGlvbiBwZWVyIG9mICVzIHJlamVjdGVkIgorCQkJCSIgdGhlIGNvbm5lY3Rpb25cbiIsCisJCQkJIGRldi0+bmFtZSk7CiAJCQlicmVhazsKIAkJfQogCQlicmVhazsKIAogCWNhc2UgQ09OTkVDVElPTl9SRVFVRVNUOgogCQlwX2Nvbm5lY3QgPSAoc3RydWN0IGNvbm5jbWQgKikmKHBfY3RsYmstPmRhdGEpOwotCQlwcmludGsoS0VSTl9JTkZPICIlczogUmVjdiBDb25uIFJlcTogVmVycz0lZCxsaW5rX2lkPSVkLCIKKwkJZGV2X2luZm8odGRldiwgIiVzOiBSZWN2IENvbm4gUmVxOiBWZXJzPSVkLGxpbmtfaWQ9JWQsIgogCQkJIkNvcnI9JWQsSE9TVCBhcHBsPSUuOHMsV1MgYXBwbD0lLjhzXG4iLAogCQkJZGV2LT5uYW1lLAogCQkJcF9jdGxiay0+dmVyc2lvbiwKQEAgLTIxNDYsMjEgKzIxNjksMjEgQEAKIAkJCXBfY29ubmVjdC0+V1NfbmFtZSk7CiAJCWlmIChwcml2cHRyLT5hY3RpdmVfbGlua19JRCAhPSAwKSB7CiAJCQljbGF3X3NuZF9kaXNjKGRldiwgcF9jdGxiayk7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogQ29ubiBSZXEgZXJyb3IgOiAiCi0JCQkJImFscmVhZHkgbG9naWNhbCBsaW5rIGlzIGFjdGl2ZSBcbiIsCisJCQlkZXZfaW5mbyh0ZGV2LCAiJXMgcmVqZWN0ZWQgYSBjb25uZWN0aW9uIHJlcXVlc3QiCisJCQkJIiBiZWNhdXNlIGl0IGlzIGFscmVhZHkgYWN0aXZlXG4iLAogCQkJCWRldi0+bmFtZSk7CiAJCX0KIAkJaWYgKHBfY3RsYmstPmxpbmtpZCAhPSAxKSB7CiAJCQljbGF3X3NuZF9kaXNjKGRldiwgcF9jdGxiayk7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogQ29ubiBSZXEgZXJyb3IgOiAiCi0JCQkJInJlcSBsb2dpY2FsIGxpbmsgaWQgaXMgbm90IDFcbiIsCisJCQlkZXZfaW5mbyh0ZGV2LCAiJXMgcmVqZWN0ZWQgYSByZXF1ZXN0IHRvIG9wZW4gbXVsdGlwbGUiCisJCQkJIiBjb25uZWN0aW9uc1xuIiwKIAkJCQlkZXYtPm5hbWUpOwogCQl9CiAJCXJjID0gZmluZF9saW5rKGRldiwgcF9jb25uZWN0LT5ob3N0X25hbWUsIHBfY29ubmVjdC0+V1NfbmFtZSk7CiAJCWlmIChyYyAhPSAwKSB7CiAJCQljbGF3X3NuZF9kaXNjKGRldiwgcF9jdGxiayk7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogQ29ubiBSZXNwIGVycm9yOiAiCi0JCQkJInJlcSBhcHBsIG5hbWUgZG9lcyBub3QgbWF0Y2hcbiIsCisJCQlkZXZfaW5mbyh0ZGV2LCAiJXMgcmVqZWN0ZWQgYSBjb25uZWN0aW9uIHJlcXVlc3QiCisJCQkJIiBiZWNhdXNlIG9mIGEgdHlwZSBtaXNtYXRjaFxuIiwKIAkJCQlkZXYtPm5hbWUpOwogCQl9CiAJCWNsYXdfc2VuZF9jb250cm9sKGRldiwKQEAgLTIxNzIsNyArMjE5NSw3IEBACiAJCQlwX2Vudi0+cGFja2luZyA9IFBBQ0tfU0VORDsKIAkJCWNsYXdfc25kX2Nvbm5fcmVxKGRldiwgMCk7CiAJCX0KLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IENMQVcgZGV2aWNlICUuOHM6IENvbm5lY3Rpb24gIgorCQlkZXZfaW5mbyh0ZGV2LCAiJXM6IENMQVcgZGV2aWNlICUuOHM6IENvbm5lY3Rpb24gIgogCQkJImNvbXBsZXRlZCBsaW5rX2lkPSVkLlxuIiwKIAkJCWRldi0+bmFtZSwgdGVtcF93c19uYW1lLAogCQkJcF9jdGxiay0+bGlua2lkKTsKQEAgLTIxODIsNyArMjIwNSw3IEBACiAJCWJyZWFrOwogCWNhc2UgQ09OTkVDVElPTl9SRVNQT05TRToKIAkJcF9jb25uZWN0ID0gKHN0cnVjdCBjb25uY21kICopJihwX2N0bGJrLT5kYXRhKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFJldmMgQ29ubiBSZXNwOiBWZXJzPSVkLGxpbmtfaWQ9JWQsIgorCQlkZXZfaW5mbyh0ZGV2LCAiJXM6IFJlY3YgQ29ubiBSZXNwOiBWZXJzPSVkLGxpbmtfaWQ9JWQsIgogCQkJIkNvcnI9JWQsUkM9JWQsSG9zdCBhcHBsPSUuOHMsIFdTIGFwcGw9JS44c1xuIiwKIAkJCWRldi0+bmFtZSwKIAkJCXBfY3RsYmstPnZlcnNpb24sCkBAIC0yMTkzLDE2ICsyMjE2LDE4IEBACiAJCQlwX2Nvbm5lY3QtPldTX25hbWUpOwogCiAJCWlmIChwX2N0bGJrLT5yYyAhPSAwKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogQ29ubiBSZXNwIGVycm9yOiByYz0lZCBcbiIsCi0JCQkJZGV2LT5uYW1lLCBwX2N0bGJrLT5yYyk7CisJCQlkZXZfd2Fybih0ZGV2LCAiVGhlIGNvbW11bmljYXRpb24gcGVlciBvZiAlcyByZWplY3RlZCIKKwkJCQkiIGEgY29ubmVjdGlvbiByZXF1ZXN0XG4iLAorCQkJCWRldi0+bmFtZSk7CiAJCQlyZXR1cm4gMTsKIAkJfQogCQlyYyA9IGZpbmRfbGluayhkZXYsCiAJCQlwX2Nvbm5lY3QtPmhvc3RfbmFtZSwgcF9jb25uZWN0LT5XU19uYW1lKTsKIAkJaWYgKHJjICE9IDApIHsKIAkJCWNsYXdfc25kX2Rpc2MoZGV2LCBwX2N0bGJrKTsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBDb25uIFJlc3AgZXJyb3I6ICIKLQkJCQkicmVxIGFwcGwgbmFtZSBkb2VzIG5vdCBtYXRjaFxuIiwKKwkJCWRldl93YXJuKHRkZXYsICJUaGUgY29tbXVuaWNhdGlvbiBwZWVyIG9mICVzIgorCQkJCSIgcmVqZWN0ZWQgYSBjb25uZWN0aW9uICIKKwkJCQkicmVxdWVzdCBiZWNhdXNlIG9mIGEgdHlwZSBtaXNtYXRjaFxuIiwKIAkJCQkgZGV2LT5uYW1lKTsKIAkJfQogCQkvKiBzaG91bGQgYmUgdW50aWwgQ09OTkVDVElPTl9DT05GSVJNICovCkBAIC0yMjEwLDcgKzIyMzUsOCBAQAogCQlicmVhazsKIAljYXNlIENPTk5FQ1RJT05fQ09ORklSTToKIAkJcF9jb25uZWN0ID0gKHN0cnVjdCBjb25uY21kICopJihwX2N0bGJrLT5kYXRhKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFJlY3YgQ29ubiBDb25maXJtOlZlcnM9JWQsbGlua19pZD0lZCwiCisJCWRldl9pbmZvKHRkZXYsCisJCQkiJXM6IFJlY3YgQ29ubiBDb25maXJtOlZlcnM9JWQsbGlua19pZD0lZCwiCiAJCQkiQ29ycj0lZCxIb3N0IGFwcGw9JS44cyxXUyBhcHBsPSUuOHNcbiIsCiAJCQlkZXYtPm5hbWUsCiAJCQlwX2N0bGJrLT52ZXJzaW9uLApAQCAtMjIyMSwyMSArMjI0NywyMSBAQAogCQlpZiAocF9jdGxiay0+bGlua2lkID09IC0ocHJpdnB0ci0+YWN0aXZlX2xpbmtfSUQpKSB7CiAJCQlwcml2cHRyLT5hY3RpdmVfbGlua19JRCA9IHBfY3RsYmstPmxpbmtpZDsKIAkJCWlmIChwX2Vudi0+cGFja2luZyA+IFBBQ0tJTkdfQVNLKSB7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IENvbmZpcm1lZCBOb3cgcGFja2luZ1xuIiwKLQkJCQkJZGV2LT5uYW1lKTsKKwkJCQlkZXZfaW5mbyh0ZGV2LAorCQkJCSIlczogQ29uZmlybWVkIE5vdyBwYWNraW5nXG4iLCBkZXYtPm5hbWUpOwogCQkJCXBfZW52LT5wYWNraW5nID0gRE9fUEFDS0VEOwogCQkJfQogCQkJcF9jaCA9ICZwcml2cHRyLT5jaGFubmVsW1dSSVRFXTsKIAkJCXdha2VfdXAoJnBfY2gtPndhaXQpOwogCQl9IGVsc2UgewotCQkgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IENvbm4gY29uZmlybTogIgotCQkJCSJ1bmV4cGVjdGVkIGxpbmtpZD0lZCBcbiIsCisJCQlkZXZfd2Fybih0ZGV2LCAiQWN0aXZhdGluZyAlcyBmYWlsZWQgYmVjYXVzZSBvZiIKKwkJCQkiIGFuIGluY29ycmVjdCBsaW5rIElEPSVkXG4iLAogCQkJCWRldi0+bmFtZSwgcF9jdGxiay0+bGlua2lkKTsKIAkJCWNsYXdfc25kX2Rpc2MoZGV2LCBwX2N0bGJrKTsKIAkJfQogCQlicmVhazsKIAljYXNlIERJU0NPTk5FQ1Q6Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBEaXNjb25uZWN0OiAiCisJCWRldl9pbmZvKHRkZXYsICIlczogRGlzY29ubmVjdDogIgogCQkJIlZlcnM9JWQsbGlua19pZD0lZCxDb3JyPSVkXG4iLAogCQkJZGV2LT5uYW1lLCBwX2N0bGJrLT52ZXJzaW9uLAogCQkJcF9jdGxiay0+bGlua2lkLCBwX2N0bGJrLT5jb3JyZWxhdG9yKTsKQEAgLTIyNDcsMTIgKzIyNzMsMTMgQEAKIAkJCXByaXZwdHItPmFjdGl2ZV9saW5rX0lEID0gMDsKIAkJYnJlYWs7CiAJY2FzZSBDTEFXX0VSUk9SOgotCQlwcmludGsoS0VSTl9JTkZPICIlczogQ0xBVyBFUlJPUiBkZXRlY3RlZFxuIiwKKwkJZGV2X3dhcm4odGRldiwgIlRoZSBjb21tdW5pY2F0aW9uIHBlZXIgb2YgJXMgZmFpbGVkXG4iLAogCQkJZGV2LT5uYW1lKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICBVbmV4cGVjdGVkIGNvbW1hbmQgY29kZT0lZCBcbiIsCi0JCQlkZXYtPm5hbWUsICBwX2N0bGJrLT5jb21tYW5kKTsKKwkJZGV2X3dhcm4odGRldiwgIlRoZSBjb21tdW5pY2F0aW9uIHBlZXIgb2YgJXMgc2VudCIKKwkJCSIgYW4gdW5rbm93biBjb21tYW5kIGNvZGVcbiIsCisJCQlkZXYtPm5hbWUpOwogCQlicmVhazsKICAgICAgICAgfQogCkBAIC0yMjk0LDEyICsyMzIxLDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBtZW1jcHkoJnBfc3lzdmFsLT5ob3N0X25hbWUsIGxvY2FsX25hbWUsIDgpOwogICAgICAgICAgICAgICAgICAgICAgICAgbWVtY3B5KCZwX3N5c3ZhbC0+V1NfbmFtZSwgcmVtb3RlX25hbWUsIDgpOwogCQkJaWYgKHByaXZwdHItPnBfZW52LT5wYWNraW5nID4gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgCXBfc3lzdmFsLT5yZWFkX2ZyYW1lX3NpemU9REVGX1BBQ0tfQlVGU0laRTsKLQkgICAgICAgICAgICAgICAgICAgICAgICBwX3N5c3ZhbC0+d3JpdGVfZnJhbWVfc2l6ZT1ERUZfUEFDS19CVUZTSVpFOworCQkJCXBfc3lzdmFsLT5yZWFkX2ZyYW1lX3NpemUgPSBERUZfUEFDS19CVUZTSVpFOworCQkJCXBfc3lzdmFsLT53cml0ZV9mcmFtZV9zaXplID0gREVGX1BBQ0tfQlVGU0laRTsKIAkJCX0gZWxzZSB7CiAJCQkJLyogaG93IGJpZyBpcyB0aGUgYmlnZ2VzdCBncm91cCBvZiBwYWNrZXRzICovCi0JCQkJcF9zeXN2YWwtPnJlYWRfZnJhbWVfc2l6ZT1wcml2cHRyLT5wX2Vudi0+cmVhZF9zaXplOwotCSAgICAgICAgICAgICAgICAgICAgICAgIHBfc3lzdmFsLT53cml0ZV9mcmFtZV9zaXplPXByaXZwdHItPnBfZW52LT53cml0ZV9zaXplOworCQkJICAgcF9zeXN2YWwtPnJlYWRfZnJhbWVfc2l6ZSA9CisJCQkJcHJpdnB0ci0+cF9lbnYtPnJlYWRfc2l6ZTsKKwkJCSAgIHBfc3lzdmFsLT53cml0ZV9mcmFtZV9zaXplID0KKwkJCQlwcml2cHRyLT5wX2Vudi0+d3JpdGVfc2l6ZTsKIAkJCX0KICAgICAgICAgICAgICAgICAgICAgICAgIG1lbXNldCgmcF9zeXN2YWwtPnJlc2VydmVkLCAweDAwLCA0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjQ4NSw3ICsyNTE0LDYgQEAKIAlwX2RldiA9ICZwcml2cHRyLT5jaGFubmVsW1JFQURdLmNkZXYtPmRldjsKIAlwX2VudiA9IHByaXZwdHItPnBfZW52OwogICAgICAgICBwX3RoaXNfY2N3PXByaXZwdHItPnBfcmVhZF9hY3RpdmVfZmlyc3Q7Ci0gICAgICAgIGk9MDsKIAl3aGlsZSAocF90aGlzX2NjdyE9TlVMTCAmJiBwX3RoaXNfY2N3LT5oZWFkZXIuZmxhZyE9Q0xBV19QRU5ESU5HKSB7CiAJCXBhY2tfb2ZmID0gMDsKIAkJcCA9IDA7CkBAIC0yNTExLDggKzI1MzksMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIG10Y190aGlzX2ZybT0xOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBfdGhpc19jY3ctPmhlYWRlci5sZW5ndGghPQogCQkJCXByaXZwdHItPnBfZW52LT5yZWFkX3NpemUgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiAlczogSW52YWxpZCBmcmFtZSBkZXRlY3RlZCAiCi0JCQkJCSJsZW5ndGggaXMgJTAyeFxuIiAsCisJCQkJZGV2X3dhcm4ocF9kZXYsCisJCQkJCSJUaGUgY29tbXVuaWNhdGlvbiBwZWVyIG9mICVzIgorCQkJCQkiIHNlbnQgYSBmYXVsdHkiCisJCQkJCSIgZnJhbWUgb2YgbGVuZ3RoICUwMnhcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2LT5uYW1lLCBwX3RoaXNfY2N3LT5oZWFkZXIubGVuZ3RoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CkBAIC0yNTQ0LDcgKzI1NzQsNyBAQAogCQkJCWdvdG8gTmV4dEZyYW1lOwogCQkJcF9wYWNrZCA9IHBfdGhpc19jY3ctPnBfYnVmZmVyK3BhY2tfb2ZmOwogCQkJcF9wYWNraCA9IChzdHJ1Y3QgY2xhd3BoICopIHBfcGFja2Q7Ci0JCQlpZiAoKHBfcGFja2gtPmxlbiA9PSAwKSB8fCAvKiBhbGwgZG9uZSB3aXRoIHRoaXMgZnJhbWU/ICovCisJCQlpZiAoKHBfcGFja2gtPmxlbiA9PSAwKSB8fCAvKiBkb25lIHdpdGggdGhpcyBmcmFtZT8gKi8KIAkJCSAgICAocF9wYWNraC0+ZmxhZyAhPSAwKSkKIAkJCQlnb3RvIE5leHRGcmFtZTsKIAkJCWJ5dGVzX3RvX21vdiA9IHBfcGFja2gtPmxlbjsKQEAgLTI1OTQsOSArMjYyNCw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldGlmX3J4KHNrYik7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKwkJCQlkZXZfaW5mbyhwX2RldiwgIkFsbG9jYXRpbmcgYSBidWZmZXIgZm9yIgorCQkJCQkiIGluY29taW5nIGRhdGEgZmFpbGVkXG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpdnB0ci0+c3RhdHMucnhfZHJvcHBlZCsrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9XQVJOSU5HICIlczogJXMoKSBsb3cgb24gbWVtb3J5XG4iLAotCQkJCWRldi0+bmFtZSxfX2Z1bmNfXyk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBwcml2cHRyLT5tdGNfb2Zmc2V0PTA7CiAgICAgICAgICAgICAgICAgICAgICAgICBwcml2cHRyLT5tdGNfbG9naWNhbF9saW5rPS0xOwpAQCAtMjcyMCw4ICsyNzUwLDggQEAKICAgICAgICAgaWYgKHRlc3RfYW5kX3NldF9iaXQoMCwgKHZvaWQgKikmcF9jaC0+SU9fYWN0aXZlKSA9PSAwKSB7CiAgICAgICAgICAgICAgICAgcGFybSA9ICh1bnNpZ25lZCBsb25nKSBwX2NoOwogCQlDTEFXX0RCRl9URVhUKDIsIHRyYWNlLCAiU3RXcnRJTyIpOwotICAgICAgICAgICAgICAgIHJjID0gY2N3X2RldmljZV9zdGFydCAocF9jaC0+Y2RldiwmcF9maXJzdF9jY3ctPndyaXRlLCBwYXJtLAotCQkJCSAgICAgICAweGZmLCAwKTsKKwkJcmMgPSBjY3dfZGV2aWNlX3N0YXJ0KHBfY2gtPmNkZXYsICZwX2ZpcnN0X2Njdy0+d3JpdGUsIHBhcm0sCisJCQkJICAgICAgMHhmZiwgMCk7CiAgICAgICAgICAgICAgICAgaWYgKHJjICE9IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGNjd19jaGVja19yZXR1cm5fY29kZShwX2NoLT5jZGV2LCByYyk7CiAgICAgICAgICAgICAgICAgfQpAQCAtMjgxNiwyMiArMjg0NiwyNiBAQAogICogSW5pdGlhbGl6ZSBldmVyeXRoaW5nIG9mIHRoZSBuZXQgZGV2aWNlIGV4Y2VwdCB0aGUgbmFtZSBhbmQgdGhlCiAgKiBjaGFubmVsIHN0cnVjdHMuCiAgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgY2xhd19uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBjbGF3X29wZW4sCisJLm5kb19zdG9wCQk9IGNsYXdfcmVsZWFzZSwKKwkubmRvX2dldF9zdGF0cwkJPSBjbGF3X3N0YXRzLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBjbGF3X3R4LAorCS5uZG9fY2hhbmdlX210dQkJPSBjbGF3X2NoYW5nZV9tdHUsCit9OworCiBzdGF0aWMgdm9pZAogY2xhd19pbml0X25ldGRldmljZShzdHJ1Y3QgbmV0X2RldmljZSAqIGRldikKIHsKIAlDTEFXX0RCRl9URVhUKDIsIHNldHVwLCAiaW5pdF9kZXYiKTsKIAlDTEFXX0RCRl9URVhUXygyLCBzZXR1cCwgIiVzIiwgZGV2LT5uYW1lKTsKIAlkZXYtPm10dSA9IENMQVdfREVGQVVMVF9NVFVfU0laRTsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGNsYXdfdHg7Ci0JZGV2LT5vcGVuID0gY2xhd19vcGVuOwotCWRldi0+c3RvcCA9IGNsYXdfcmVsZWFzZTsKLQlkZXYtPmdldF9zdGF0cyA9IGNsYXdfc3RhdHM7Ci0JZGV2LT5jaGFuZ2VfbXR1ID0gY2xhd19jaGFuZ2VfbXR1OwogCWRldi0+aGFyZF9oZWFkZXJfbGVuID0gMDsKIAlkZXYtPmFkZHJfbGVuID0gMDsKIAlkZXYtPnR5cGUgPSBBUlBIUkRfU0xJUDsKIAlkZXYtPnR4X3F1ZXVlX2xlbiA9IDEzMDA7CiAJZGV2LT5mbGFncyA9IElGRl9QT0lOVE9QT0lOVCB8IElGRl9OT0FSUDsKKwlkZXYtPm5ldGRldl9vcHMgPSAmY2xhd19uZXRkZXZfb3BzOwogCUNMQVdfREJGX1RFWFQoMiwgc2V0dXAsICJpbml0b2siKTsKIAlyZXR1cm47CiB9CkBAIC0yODgwLDggKzI5MTQsOCBAQAogCWludCByZXQ7CiAJc3RydWN0IGNjd19kZXZfaWQgZGV2X2lkOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiY2xhdzogYWRkIGZvciAlc1xuIiwKLQkgICAgICAgZGV2X25hbWUoJmNnZGV2LT5jZGV2W1JFQURdLT5kZXYpKTsKKwlkZXZfaW5mbygmY2dkZXYtPmRldiwgImFkZCBmb3IgJXNcbiIsCisJCSBkZXZfbmFtZSgmY2dkZXYtPmNkZXZbUkVBRF0tPmRldikpOwogCUNMQVdfREJGX1RFWFQoMiwgc2V0dXAsICJuZXdfZGV2Iik7CiAJcHJpdnB0ciA9IGNnZGV2LT5kZXYuZHJpdmVyX2RhdGE7CiAJY2dkZXYtPmNkZXZbUkVBRF0tPmRldi5kcml2ZXJfZGF0YSA9IHByaXZwdHI7CkBAIC0yODk3LDI5ICsyOTMxLDI4IEBACiAJaWYgKHJldCA9PSAwKQogCQlyZXQgPSBhZGRfY2hhbm5lbChjZ2Rldi0+Y2RldlsxXSwxLHByaXZwdHIpOwogCWlmIChyZXQgIT0gMCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkiYWRkIGNoYW5uZWwgZmFpbGVkIHdpdGggcmV0ID0gJWRcbiIsIHJldCk7CisJCWRldl93YXJuKCZjZ2Rldi0+ZGV2LCAiQ3JlYXRpbmcgYSBDTEFXIGdyb3VwIGRldmljZSIKKwkJCSIgZmFpbGVkIHdpdGggZXJyb3IgY29kZSAlZFxuIiwgcmV0KTsKIAkJZ290byBvdXQ7CiAJfQogCXJldCA9IGNjd19kZXZpY2Vfc2V0X29ubGluZShjZ2Rldi0+Y2RldltSRUFEXSk7CiAJaWYgKHJldCAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCSJjbGF3OiBjY3dfZGV2aWNlX3NldF9vbmxpbmUgJXMgUkVBRCBmYWlsZWQgIgotCQkgICAgICAgIndpdGggcmV0ID0gJWRcbiIsIGRldl9uYW1lKCZjZ2Rldi0+Y2RldltSRUFEXS0+ZGV2KSwKLQkJICAgICAgIHJldCk7CisJCWRldl93YXJuKCZjZ2Rldi0+ZGV2LAorCQkJIlNldHRpbmcgdGhlIHJlYWQgc3ViY2hhbm5lbCBvbmxpbmUiCisJCQkiIGZhaWxlZCB3aXRoIGVycm9yIGNvZGUgJWRcbiIsIHJldCk7CiAJCWdvdG8gb3V0OwogCX0KIAlyZXQgPSBjY3dfZGV2aWNlX3NldF9vbmxpbmUoY2dkZXYtPmNkZXZbV1JJVEVdKTsKIAlpZiAocmV0ICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJImNsYXc6IGNjd19kZXZpY2Vfc2V0X29ubGluZSAlcyBXUklURSBmYWlsZWQgIgotCQkgICAgICAgIndpdGggcmV0ID0gJWRcbiIsIGRldl9uYW1lKCZjZ2Rldi0+Y2RldltXUklURV0tPmRldiksCi0JCSAgICAgICByZXQpOworCQlkZXZfd2FybigmY2dkZXYtPmRldiwKKwkJCSJTZXR0aW5nIHRoZSB3cml0ZSBzdWJjaGFubmVsIG9ubGluZSAiCisJCQkiZmFpbGVkIHdpdGggZXJyb3IgY29kZSAlZFxuIiwgcmV0KTsKIAkJZ290byBvdXQ7CiAJfQogCWRldiA9IGFsbG9jX25ldGRldigwLCJjbGF3JWQiLGNsYXdfaW5pdF9uZXRkZXZpY2UpOwogCWlmICghZGV2KSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOmFsbG9jX25ldGRldiBmYWlsZWRcbiIsX19mdW5jX18pOworCQlkZXZfd2FybigmY2dkZXYtPmRldiwKKwkJCSJBY3RpdmF0aW5nIHRoZSBDTEFXIGRldmljZSBmYWlsZWRcbiIpOwogCQlnb3RvIG91dDsKIAl9CiAJZGV2LT5tbF9wcml2ID0gcHJpdnB0cjsKQEAgLTI5NDcsMTMgKzI5ODAsMTMgQEAKIAlwcml2cHRyLT5jaGFubmVsW1dSSVRFXS5uZGV2ID0gZGV2OwogCXByaXZwdHItPnBfZW52LT5uZGV2ID0gZGV2OwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6cmVhZHNpemU9JWQgIHdyaXRlc2l6ZT0lZCAiCisJZGV2X2luZm8oJmNnZGV2LT5kZXYsICIlczpyZWFkc2l6ZT0lZCAgd3JpdGVzaXplPSVkICIKIAkJInJlYWRidWZmZXI9JWQgd3JpdGVidWZmZXI9JWQgcmVhZD0weCUwNHggd3JpdGU9MHglMDR4XG4iLAogICAgICAgICAgICAgICAgIGRldi0+bmFtZSwgcF9lbnYtPnJlYWRfc2l6ZSwKIAkJcF9lbnYtPndyaXRlX3NpemUsIHBfZW52LT5yZWFkX2J1ZmZlcnMsCiAgICAgICAgICAgICAgICAgcF9lbnYtPndyaXRlX2J1ZmZlcnMsIHBfZW52LT5kZXZub1tSRUFEXSwKIAkJcF9lbnYtPmRldm5vW1dSSVRFXSk7Ci0gICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOmhvc3RfbmFtZTolLjhzLCBhZGFwdGVyX25hbWUgIgorCWRldl9pbmZvKCZjZ2Rldi0+ZGV2LCAiJXM6aG9zdF9uYW1lOiUuOHMsIGFkYXB0ZXJfbmFtZSAiCiAJCSI6JS44cyBhcGlfdHlwZTogJS44c1xuIiwKICAgICAgICAgICAgICAgICBkZXYtPm5hbWUsIHBfZW52LT5ob3N0X25hbWUsCiAJCXBfZW52LT5hZGFwdGVyX25hbWUgLCBwX2Vudi0+YXBpX3R5cGUpOwpAQCAtMjk5Nyw4ICszMDMwLDggQEAKIAluZGV2ID0gcHJpdi0+Y2hhbm5lbFtSRUFEXS5uZGV2OwogCWlmIChuZGV2KSB7CiAJCS8qIENsb3NlIHRoZSBkZXZpY2UgKi8KLQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJIiVzOiBzaHV0aW5nIGRvd24gXG4iLG5kZXYtPm5hbWUpOworCQlkZXZfaW5mbygmY2dkZXYtPmRldiwgIiVzOiBzaHV0dGluZyBkb3duIFxuIiwKKwkJCW5kZXYtPm5hbWUpOwogCQlpZiAobmRldi0+ZmxhZ3MgJiBJRkZfUlVOTklORykKIAkJCXJldCA9IGNsYXdfcmVsZWFzZShuZGV2KTsKIAkJbmRldi0+ZmxhZ3MgJj1+SUZGX1JVTk5JTkc7CkBAIC0zMDIzLDggKzMwNTYsNyBAQAogCUNMQVdfREJGX1RFWFRfKDIsIHNldHVwLCAiJXMiLCBkZXZfbmFtZSgmY2dkZXYtPmRldikpOwogCXByaXYgPSBjZ2Rldi0+ZGV2LmRyaXZlcl9kYXRhOwogCUJVR19PTighcHJpdik7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiY2xhdzogJXMoKSBjYWxsZWQgJXMgd2lsbCBiZSByZW1vdmVkLlxuIiwKLQkJCV9fZnVuY19fLCBkZXZfbmFtZSgmY2dkZXYtPmNkZXZbMF0tPmRldikpOworCWRldl9pbmZvKCZjZ2Rldi0+ZGV2LCAiIHdpbGwgYmUgcmVtb3ZlZC5cbiIpOwogCWlmIChjZ2Rldi0+c3RhdGUgPT0gQ0NXR1JPVVBfT05MSU5FKQogCQljbGF3X3NodXRkb3duX2RldmljZShjZ2Rldik7CiAJY2xhd19yZW1vdmVfZmlsZXMoJmNnZGV2LT5kZXYpOwpAQCAtMzA2Myw3ICszMDk1LDggQEAKIH0KIAogc3RhdGljIHNzaXplX3QKLWNsYXdfaG5hbWVfd3JpdGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCitjbGF3X2huYW1lX3dyaXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBjbGF3X3ByaXZiayAqcHJpdjsKIAlzdHJ1Y3QgY2xhd19lbnYgKiAgcF9lbnY7CkBAIC0zMTAwLDcgKzMxMzMsOCBAQAogfQogCiBzdGF0aWMgc3NpemVfdAotY2xhd19hZG5hbWVfd3JpdGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCitjbGF3X2FkbmFtZV93cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCSBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAlzdHJ1Y3QgY2xhd19wcml2YmsgKnByaXY7CiAJc3RydWN0IGNsYXdfZW52ICogIHBfZW52OwpAQCAtMzEzOCw3ICszMTcyLDggQEAKIH0KIAogc3RhdGljIHNzaXplX3QKLWNsYXdfYXBuYW1lX3dyaXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQorY2xhd19hcG5hbWVfd3JpdGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAlzdHJ1Y3QgY2xhd19wcml2YmsgKnByaXY7CiAJc3RydWN0IGNsYXdfZW52ICogIHBfZW52OwpAQCAtMzE4NSw3ICszMjIwLDggQEAKIH0KIAogc3RhdGljIHNzaXplX3QKLWNsYXdfd2J1ZmZfd3JpdGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCitjbGF3X3didWZmX3dyaXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJc3RydWN0IGNsYXdfcHJpdmJrICpwcml2OwogCXN0cnVjdCBjbGF3X2VudiAqICBwX2VudjsKQEAgLTMyMjYsNyArMzI2Miw4IEBACiB9CiAKIHN0YXRpYyBzc2l6ZV90Ci1jbGF3X3JidWZmX3dyaXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQorY2xhd19yYnVmZl93cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBjbGF3X3ByaXZiayAqcHJpdjsKIAlzdHJ1Y3QgY2xhd19lbnYgKnBfZW52OwpAQCAtMzI4OSw3ICszMzI2LDcgQEAKIHsKIAl1bnJlZ2lzdGVyX2N1MzA4OF9kaXNjaXBsaW5lKCZjbGF3X2dyb3VwX2RyaXZlcik7CiAJY2xhd191bnJlZ2lzdGVyX2RlYnVnX2ZhY2lsaXR5KCk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiY2xhdzogRHJpdmVyIHVubG9hZGVkXG4iKTsKKwlwcl9pbmZvKCJEcml2ZXIgdW5sb2FkZWRcbiIpOwogCiB9CiAKQEAgLTMzMDMsMTIgKzMzNDAsMTIgQEAKIGNsYXdfaW5pdCh2b2lkKQogewogCWludCByZXQgPSAwOwotCXByaW50ayhLRVJOX0lORk8gImNsYXc6IHN0YXJ0aW5nIGRyaXZlclxuIik7CiAKKwlwcl9pbmZvKCJMb2FkaW5nICVzXG4iLCB2ZXJzaW9uKTsKIAlyZXQgPSBjbGF3X3JlZ2lzdGVyX2RlYnVnX2ZhY2lsaXR5KCk7CiAJaWYgKHJldCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJjbGF3OiAlcygpIGRlYnVnX3JlZ2lzdGVyIGZhaWxlZCAlZFxuIiwKLQkJCV9fZnVuY19fLHJldCk7CisJCXByX2VycigiUmVnaXN0ZXJpbmcgd2l0aCB0aGUgUy8zOTAgZGVidWcgZmVhdHVyZSIKKwkJCSIgZmFpbGVkIHdpdGggZXJyb3IgY29kZSAlZFxuIiwgcmV0KTsKIAkJcmV0dXJuIHJldDsKIAl9CiAJQ0xBV19EQkZfVEVYVCgyLCBzZXR1cCwgImluaXRfbW9kIik7CkBAIC0zMzE2LDggKzMzNTMsOCBAQAogCWlmIChyZXQpIHsKIAkJQ0xBV19EQkZfVEVYVCgyLCBzZXR1cCwgImluaXRfYmFkIik7CiAJCWNsYXdfdW5yZWdpc3Rlcl9kZWJ1Z19mYWNpbGl0eSgpOwotCQlwcmludGsoS0VSTl9XQVJOSU5HICJjbGF3OyAlcygpIGN1MzA4OCByZWdpc3RlciBmYWlsZWQgJWRcbiIsCi0JCQlfX2Z1bmNfXyxyZXQpOworCQlwcl9lcnIoIlJlZ2lzdGVyaW5nIHdpdGggdGhlIGN1MzA4OCBkZXZpY2UgZHJpdmVyIGZhaWxlZCAiCisJCQkgICAid2l0aCBlcnJvciBjb2RlICVkXG4iLCByZXQpOwogCX0KIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9jdGNtX2ZzbXMuYyBiL2RyaXZlcnMvczM5MC9uZXQvY3RjbV9mc21zLmMKaW5kZXggZjI5YzcwOC4uNGRlZDlhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9jdGNtX2ZzbXMuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L2N0Y21fZnNtcy5jCkBAIC00MTAsOSArNDEwLDggQEAKIAkJcHJpdi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOwogCQkJCQkJZ290byBhZ2FpbjsKIAl9Ci0JYmxvY2tfbGVuIC09IDI7Ci0JaWYgKGJsb2NrX2xlbiA+IDApIHsKLQkJKigoX191MTYgKilza2ItPmRhdGEpID0gYmxvY2tfbGVuOworCWlmIChibG9ja19sZW4gPiAyKSB7CisJCSooKF9fdTE2ICopc2tiLT5kYXRhKSA9IGJsb2NrX2xlbiAtIDI7CiAJCWN0Y21fdW5wYWNrX3NrYihjaCwgc2tiKTsKIAl9CiAgYWdhaW46CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L2N0Y21fbWFpbi5jIGIvZHJpdmVycy9zMzkwL25ldC9jdGNtX21haW4uYwppbmRleCAyNjc4NTczLi43N2Y0MDMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L2N0Y21fbWFpbi5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvY3RjbV9tYWluLmMKQEAgLTEwNSw3ICsxMDUsOCBAQAogCQkJcmV0dXJuOwogCQl9CiAJCXBza2ItPnByb3RvY29sID0gbnRvaHMoaGVhZGVyLT50eXBlKTsKLQkJaWYgKGhlYWRlci0+bGVuZ3RoIDw9IExMX0hFQURFUl9MRU5HVEgpIHsKKwkJaWYgKChoZWFkZXItPmxlbmd0aCA8PSBMTF9IRUFERVJfTEVOR1RIKSB8fAorCQkgICAgKGxlbiA8PSBMTF9IRUFERVJfTEVOR1RIKSkgewogCQkJaWYgKCEoY2gtPmxvZ2ZsYWdzICYgTE9HX0ZMQUdfSUxMRUdBTFNJWkUpKSB7CiAJCQkJQ1RDTV9EQkZfVEVYVF8oRVJST1IsIENUQ19EQkZfRVJST1IsCiAJCQkJCSIlcyglcyk6IElsbGVnYWwgcGFja2V0IHNpemUgJWQoJWQsJWQpIgpAQCAtMTY3LDExICsxNjgsOSBAQAogCQlpZiAobGVuID4gMCkgewogCQkJc2tiX3B1bGwocHNrYiwgaGVhZGVyLT5sZW5ndGgpOwogCQkJaWYgKHNrYl90YWlscm9vbShwc2tiKSA8IExMX0hFQURFUl9MRU5HVEgpIHsKLQkJCQlpZiAoIShjaC0+bG9nZmxhZ3MgJiBMT0dfRkxBR19PVkVSUlVOKSkgewotCQkJCQlDVENNX0RCRl9ERVZfTkFNRShUUkFDRSwgZGV2LAotCQkJCQkJIk92ZXJydW4gaW4gY3RjbV91bnBhY2tfc2tiIik7Ci0JCQkJCWNoLT5sb2dmbGFncyB8PSBMT0dfRkxBR19PVkVSUlVOOwotCQkJCX0KKwkJCQlDVENNX0RCRl9ERVZfTkFNRShUUkFDRSwgZGV2LAorCQkJCQkiT3ZlcnJ1biBpbiBjdGNtX3VucGFja19za2IiKTsKKwkJCQljaC0+bG9nZmxhZ3MgfD0gTE9HX0ZMQUdfT1ZFUlJVTjsKIAkJCQlyZXR1cm47CiAJCQl9CiAJCQlza2JfcHV0KHBza2IsIExMX0hFQURFUl9MRU5HVEgpOwpAQCAtOTA2LDExICs5MDUsMTEgQEAKIAl9CiAKIAlpZiAoY3RjbV90ZXN0X2FuZF9zZXRfYnVzeShkZXYpKQotCQlyZXR1cm4gLUVCVVNZOworCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiAKIAlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIAlpZiAoY3RjbV90cmFuc21pdF9za2IocHJpdi0+Y2hhbm5lbFtXUklURV0sIHNrYikgIT0gMCkKLQkJcmV0dXJuIDE7CisJCXJldHVybiBORVRERVZfVFhfQlVTWTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTA5OSwxMiArMTA5OCwyNCBAQAogCiBzdHJ1Y3QgbXBjX2dyb3VwICpjdGNtcGNfaW5pdF9tcGNfZ3JvdXAoc3RydWN0IGN0Y21fcHJpdiAqcHJpdik7CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgY3RjbV9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBjdGNtX29wZW4sCisJLm5kb19zdG9wCQk9IGN0Y21fY2xvc2UsCisJLm5kb19nZXRfc3RhdHMJCT0gY3RjbV9zdGF0cywKKwkubmRvX2NoYW5nZV9tdHUJICAgCT0gY3RjbV9jaGFuZ2VfbXR1LAorCS5uZG9fc3RhcnRfeG1pdAkJPSBjdGNtX3R4LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBjdGNtX21wY19uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBjdGNtX29wZW4sCisJLm5kb19zdG9wCQk9IGN0Y21fY2xvc2UsCisJLm5kb19nZXRfc3RhdHMJCT0gY3RjbV9zdGF0cywKKwkubmRvX2NoYW5nZV9tdHUJICAgCT0gY3RjbV9jaGFuZ2VfbXR1LAorCS5uZG9fc3RhcnRfeG1pdAkJPSBjdGNtcGNfdHgsCit9OworCiB2b2lkIHN0YXRpYyBjdGNtX2Rldl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCWRldi0+b3BlbiA9IGN0Y21fb3BlbjsKLQlkZXYtPnN0b3AgPSBjdGNtX2Nsb3NlOwotCWRldi0+Z2V0X3N0YXRzID0gY3RjbV9zdGF0czsKLQlkZXYtPmNoYW5nZV9tdHUgPSBjdGNtX2NoYW5nZV9tdHU7CiAJZGV2LT50eXBlID0gQVJQSFJEX1NMSVA7CiAJZGV2LT50eF9xdWV1ZV9sZW4gPSAxMDA7CiAJZGV2LT5mbGFncyA9IElGRl9QT0lOVE9QT0lOVCB8IElGRl9OT0FSUDsKQEAgLTExNTcsMTIgKzExNjgsMTIgQEAKIAkJZGV2LT5tdHUgPSBNUENfQlVGU0laRV9ERUZBVUxUIC0KIAkJCQlUSF9IRUFERVJfTEVOR1RIIC0gUERVX0hFQURFUl9MRU5HVEg7CiAKLQkJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBjdGNtcGNfdHg7CisJCWRldi0+bmV0ZGV2X29wcyA9ICZjdGNtX21wY19uZXRkZXZfb3BzOwogCQlkZXYtPmhhcmRfaGVhZGVyX2xlbiA9IFRIX0hFQURFUl9MRU5HVEggKyBQRFVfSEVBREVSX0xFTkdUSDsKIAkJcHJpdi0+YnVmZmVyX3NpemUgPSBNUENfQlVGU0laRV9ERUZBVUxUOwogCX0gZWxzZSB7CiAJCWRldi0+bXR1ID0gQ1RDTV9CVUZTSVpFX0RFRkFVTFQgLSBMTF9IRUFERVJfTEVOR1RIIC0gMjsKLQkJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBjdGNtX3R4OworCQlkZXYtPm5ldGRldl9vcHMgPSAmY3RjbV9uZXRkZXZfb3BzOwogCQlkZXYtPmhhcmRfaGVhZGVyX2xlbiA9IExMX0hFQURFUl9MRU5HVEggKyAyOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9jdGNtX21wYy5jIGIvZHJpdmVycy9zMzkwL25ldC9jdGNtX21wYy5jCmluZGV4IDNkYjVmODQuLjc4MWUxOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvY3RjbV9tcGMuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L2N0Y21fbXBjLmMKQEAgLTM5Myw3ICszOTMsNiBAQAogCQl9IGVsc2UgewogCQkJLyogdGhlcmUgYXJlIHByb2JsZW1zLi4uYmFpbCBvdXQJICAgICovCiAJCQkvKiB0aGVyZSBtYXkgYmUgYSBzdGF0ZSBtaXNtYXRjaCBzbyByZXN0YXJ0ICovCi0JCQlncnAtPnBvcnRfcGVyc2lzdCA9IDE7CiAJCQlmc21fZXZlbnQoZ3JwLT5mc20sIE1QQ0dfRVZFTlRfSU5PUCwgZGV2KTsKIAkJCWdycC0+YWxsb2NjaGFuX2NhbGxiYWNrX3JldHJpZXMgPSAwOwogCQl9CkBAIC02OTksMTEgKzY5OCw5IEBACiAJcmV0dXJuOwogCiBkb25lOgotCWlmIChyYyAhPSAwKSB7Ci0JCWdycC0+aW5fc3dlZXAgPSAwOwotCQljdGNtX2NsZWFyX2J1c3lfZG8oZGV2KTsKLQkJZnNtX2V2ZW50KGdycC0+ZnNtLCBNUENHX0VWRU5UX0lOT1AsIGRldik7Ci0JfQorCWdycC0+aW5fc3dlZXAgPSAwOworCWN0Y21fY2xlYXJfYnVzeV9kbyhkZXYpOworCWZzbV9ldmVudChncnAtPmZzbSwgTVBDR19FVkVOVF9JTk9QLCBkZXYpOwogCiAJcmV0dXJuOwogfQpAQCAtMTExOCw3ICsxMTE1LDYgQEAKIAogCQlpZiAodW5saWtlbHkoZnNtX2dldHN0YXRlKGdycC0+ZnNtKSAhPSBNUENHX1NUQVRFX1JFQURZKSkKIAkJCQkJZ290byBkb25lOwotCQlwZHVfbGFzdF9zZWVuID0gMDsKIAkJd2hpbGUgKChwc2tiLT5sZW4gPiAwKSAmJiAhcGR1X2xhc3Rfc2VlbikgewogCQkJY3Vycl9wZHUgPSAoc3RydWN0IHBkdSAqKXBza2ItPmRhdGE7CiAKQEAgLTEzOTYsOCArMTM5Miw3IEBACiAJCQkJQ1RDTV9GVU5UQUlMLCBkZXYtPm5hbWUpOwogCWlmICgoZ3JwLT5zYXZlZF9zdGF0ZSAhPSBNUENHX1NUQVRFX1JFU0VUKSB8fAogCQkvKiBkZWFsbG9jX2NoYW5uZWwgaGFzIGJlZW4gY2FsbGVkICovCi0JCQkoKGdycC0+c2F2ZWRfc3RhdGUgPT0gTVBDR19TVEFURV9SRVNFVCkgJiYKLQkJCQkJCShncnAtPnBvcnRfcGVyc2lzdCA9PSAwKSkpCisJCShncnAtPnBvcnRfcGVyc2lzdCA9PSAwKSkKIAkJZnNtX2RlbHRpbWVyKCZwcml2LT5yZXN0YXJ0X3RpbWVyKTsKIAogCXdjaCA9IHByaXYtPmNoYW5uZWxbV1JJVEVdOwpAQCAtMTkxNywxMCArMTkxMiw4IEBACiAKIAlpZiAocHJpdikKIAkJZ3JwID0gcHJpdi0+bXBjZzsKLQlpZiAoZ3JwID09IE5VTEwpIHsKLQkJZnNtX2V2ZW50KGdycC0+ZnNtLCBNUENHX0VWRU5UX0lOT1AsIGRldik7CisJaWYgKGdycCA9PSBOVUxMKQogCQlyZXR1cm47Ci0JfQogCiAJZm9yIChkaXJlY3Rpb24gPSBSRUFEOyBkaXJlY3Rpb24gPD0gV1JJVEU7IGRpcmVjdGlvbisrKQl7CiAJCXN0cnVjdCBjaGFubmVsICpjaCA9IHByaXYtPmNoYW5uZWxbZGlyZWN0aW9uXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvbGNzLmMgYi9kcml2ZXJzL3MzOTAvbmV0L2xjcy5jCmluZGV4IDQ5YzNiZmEuLmE0NWJjMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvbGNzLmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9sY3MuYwpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luLmg+CiAjaW5jbHVkZSA8bGludXgvaWdtcC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogI2luY2x1ZGUgPG5ldC9hcnAuaD4KICNpbmNsdWRlIDxuZXQvaXAuaD4KIApAQCAtMTI1OSw3ICsxMjYwLDYgQEAKIAlzdHJ1Y3QgaW5fZGV2aWNlICppbjRfZGV2OwogCiAJY2FyZCA9IChzdHJ1Y3QgbGNzX2NhcmQgKikgZGF0YTsKLQlkYWVtb25pemUoInJlZ2lwbSIpOwogCiAJaWYgKCFsY3NfZG9fcnVuX3RocmVhZChjYXJkLCBMQ1NfU0VUX01DX1RIUkVBRCkpCiAJCXJldHVybiAwOwpAQCAtMTU2Miw3ICsxNTYyLDcgQEAKIAlpZiAoc2tiID09IE5VTEwpIHsKIAkJY2FyZC0+c3RhdHMudHhfZHJvcHBlZCsrOwogCQljYXJkLT5zdGF0cy50eF9lcnJvcnMrKzsKLQkJcmV0dXJuIC1FSU87CisJCXJldHVybiAwOwogCX0KIAlpZiAoY2FyZC0+c3RhdGUgIT0gREVWX1NUQVRFX1VQKSB7CiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKQEAgLTE1ODcsNyArMTU4Nyw3IEBACiAJCWNhcmQtPnR4X2J1ZmZlciA9IGxjc19nZXRfYnVmZmVyKCZjYXJkLT53cml0ZSk7CiAJCWlmIChjYXJkLT50eF9idWZmZXIgPT0gTlVMTCkgewogCQkJY2FyZC0+c3RhdHMudHhfZHJvcHBlZCsrOwotCQkJcmMgPSAtRUJVU1k7CisJCQlyYyA9IE5FVERFVl9UWF9CVVNZOwogCQkJZ290byBvdXQ7CiAJCX0KIAkJY2FyZC0+dHhfYnVmZmVyLT5jYWxsYmFjayA9IGxjc190eGJ1ZmZlcl9jYjsKQEAgLTE3NTMsMTEgKzE3NTMsMTAgQEAKIAlzdHJ1Y3QgbGNzX2NhcmQgKmNhcmQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGxjc19jYXJkLCBrZXJuZWxfdGhyZWFkX3N0YXJ0ZXIpOwogCUxDU19EQkZfVEVYVCg1LCB0cmFjZSwgImtybnRocmQiKTsKIAlpZiAobGNzX2RvX3N0YXJ0X3RocmVhZChjYXJkLCBMQ1NfUkVDT1ZFUllfVEhSRUFEKSkKLQkJa2VybmVsX3RocmVhZChsY3NfcmVjb3ZlcnksICh2b2lkICopIGNhcmQsIFNJR0NITEQpOworCQlrdGhyZWFkX3J1bihsY3NfcmVjb3ZlcnksIGNhcmQsICJsY3NfcmVjb3ZlciIpOwogI2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1QKIAlpZiAobGNzX2RvX3N0YXJ0X3RocmVhZChjYXJkLCBMQ1NfU0VUX01DX1RIUkVBRCkpCi0JCWtlcm5lbF90aHJlYWQobGNzX3JlZ2lzdGVyX21jX2FkZHJlc3NlcywKLQkJCQkodm9pZCAqKSBjYXJkLCBTSUdDSExEKTsKKwkJa3RocmVhZF9ydW4obGNzX3JlZ2lzdGVyX21jX2FkZHJlc3NlcywgY2FyZCwgInJlZ2lwbSIpOwogI2VuZGlmCiB9CiAKQEAgLTIxMDEsNiArMjEwMCwyMCBAQAogLyoqCiAgKiBsY3NfbmV3X2RldmljZSB3aWxsIGJlIGNhbGxlZCBieSBzZXR0aW5nIHRoZSBncm91cCBkZXZpY2Ugb25saW5lLgogICovCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGxjc19uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBsY3Nfb3Blbl9kZXZpY2UsCisJLm5kb19zdG9wCQk9IGxjc19zdG9wX2RldmljZSwKKwkubmRvX2dldF9zdGF0cwkJPSBsY3NfZ2V0c3RhdHMsCisJLm5kb19zdGFydF94bWl0CQk9IGxjc19zdGFydF94bWl0LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBsY3NfbWNfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gbGNzX29wZW5fZGV2aWNlLAorCS5uZG9fc3RvcAkJPSBsY3Nfc3RvcF9kZXZpY2UsCisJLm5kb19nZXRfc3RhdHMJCT0gbGNzX2dldHN0YXRzLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBsY3Nfc3RhcnRfeG1pdCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IGxjc19zZXRfbXVsdGljYXN0X2xpc3QsCit9OwogCiBzdGF0aWMgaW50CiBsY3NfbmV3X2RldmljZShzdHJ1Y3QgY2N3Z3JvdXBfZGV2aWNlICpjY3dnZGV2KQpAQCAtMjE2OCwxNCArMjE4MSwxMSBAQAogCQlnb3RvIG91dDsKIAljYXJkLT5kZXYgPSBkZXY7CiAJY2FyZC0+ZGV2LT5tbF9wcml2ID0gY2FyZDsKLQljYXJkLT5kZXYtPm9wZW4gPSBsY3Nfb3Blbl9kZXZpY2U7Ci0JY2FyZC0+ZGV2LT5zdG9wID0gbGNzX3N0b3BfZGV2aWNlOwotCWNhcmQtPmRldi0+aGFyZF9zdGFydF94bWl0ID0gbGNzX3N0YXJ0X3htaXQ7Ci0JY2FyZC0+ZGV2LT5nZXRfc3RhdHMgPSBsY3NfZ2V0c3RhdHM7CisJY2FyZC0+ZGV2LT5uZXRkZXZfb3BzID0gJmxjc19uZXRkZXZfb3BzOwogCW1lbWNweShjYXJkLT5kZXYtPmRldl9hZGRyLCBjYXJkLT5tYWMsIExDU19NQUNfTEVOR1RIKTsKICNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUCiAJaWYgKCFsY3NfY2hlY2tfbXVsdGljYXN0X3N1cHBvcnQoY2FyZCkpCi0JCWNhcmQtPmRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gbGNzX3NldF9tdWx0aWNhc3RfbGlzdDsKKwkJY2FyZC0+ZGV2LT5uZXRkZXZfb3BzID0gJmxjc19tY19uZXRkZXZfb3BzOwogI2VuZGlmCiBuZXRkZXZfb3V0OgogCWxjc19zZXRfYWxsb3dlZF90aHJlYWRzKGNhcmQsMHhmZmZmZmZmZik7CkBAIC0yMjU4LDcgKzIyNjgsNiBAQAogICAgICAgICBpbnQgcmM7CiAKIAljYXJkID0gKHN0cnVjdCBsY3NfY2FyZCAqKSBwdHI7Ci0JZGFlbW9uaXplKCJsY3NfcmVjb3ZlciIpOwogCiAJTENTX0RCRl9URVhUKDQsIHRyYWNlLCAicmVjb3ZlcjEiKTsKIAlpZiAoIWxjc19kb19ydW5fdGhyZWFkKGNhcmQsIExDU19SRUNPVkVSWV9USFJFQUQpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9uZXRpdWN2LmMgYi9kcml2ZXJzL3MzOTAvbmV0L25ldGl1Y3YuYwppbmRleCA5MzBlMmZjLi5iZTcxNmU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L25ldGl1Y3YuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L25ldGl1Y3YuYwpAQCAtMTMxMiw3ICsxMzEyLDcgQEAKIAogCWlmIChuZXRpdWN2X3Rlc3RfYW5kX3NldF9idXN5KGRldikpIHsKIAkJSVVDVl9EQkZfVEVYVChkYXRhLCAyLCAiRUJVU1kgZnJvbSBuZXRpdWN2X3R4XG4iKTsKLQkJcmV0dXJuIC1FQlVTWTsKKwkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwogCX0KIAlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIAlyYyA9IG5ldGl1Y3ZfdHJhbnNtaXRfc2tiKHByaXZwdHItPmNvbm4sIHNrYikgIT0gMDsKQEAgLTE4NzYsMjAgKzE4NzYsMjQgQEAKIC8qKgogICogSW5pdGlhbGl6ZSBhIG5ldCBkZXZpY2UuIChDYWxsZWQgZnJvbSBrZXJuZWwgaW4gYWxsb2NfbmV0ZGV2KCkpCiAgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbmV0aXVjdl9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBuZXRpdWN2X29wZW4sCisJLm5kb19zdG9wCQk9IG5ldGl1Y3ZfY2xvc2UsCisJLm5kb19nZXRfc3RhdHMJCT0gbmV0aXVjdl9zdGF0cywKKwkubmRvX3N0YXJ0X3htaXQJCT0gbmV0aXVjdl90eCwKKwkubmRvX2NoYW5nZV9tdHUJICAgCT0gbmV0aXVjdl9jaGFuZ2VfbXR1LAorfTsKKwogc3RhdGljIHZvaWQgbmV0aXVjdl9zZXR1cF9uZXRkZXZpY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlkZXYtPm10dQkgICAgICAgICA9IE5FVElVQ1ZfTVRVX0RFRkFVTFQ7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgICAgID0gbmV0aXVjdl90eDsKLQlkZXYtPm9wZW4JICAgICAgICAgPSBuZXRpdWN2X29wZW47Ci0JZGV2LT5zdG9wCSAgICAgICAgID0gbmV0aXVjdl9jbG9zZTsKLQlkZXYtPmdldF9zdGF0cwkgICAgICAgICA9IG5ldGl1Y3Zfc3RhdHM7Ci0JZGV2LT5jaGFuZ2VfbXR1ICAgICAgICAgID0gbmV0aXVjdl9jaGFuZ2VfbXR1OwogCWRldi0+ZGVzdHJ1Y3RvciAgICAgICAgICA9IG5ldGl1Y3ZfZnJlZV9uZXRkZXZpY2U7CiAJZGV2LT5oYXJkX2hlYWRlcl9sZW4gICAgID0gTkVUSVVDVl9IRFJMRU47CiAJZGV2LT5hZGRyX2xlbiAgICAgICAgICAgID0gMDsKIAlkZXYtPnR5cGUgICAgICAgICAgICAgICAgPSBBUlBIUkRfU0xJUDsKIAlkZXYtPnR4X3F1ZXVlX2xlbiAgICAgICAgPSBORVRJVUNWX1FVRVVFTEVOX0RFRkFVTFQ7CiAJZGV2LT5mbGFncwkgICAgICAgICA9IElGRl9QT0lOVE9QT0lOVCB8IElGRl9OT0FSUDsKKwlkZXYtPm5ldGRldl9vcHMJCSA9ICZuZXRpdWN2X25ldGRldl9vcHM7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmUuaCBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlLmgKaW5kZXggZTBjNDU1Ny4uNDQ3ZTFkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmUuaAorKysgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZS5oCkBAIC0xMzQsNiArMTM0LDcgQEAKIAl1bnNpZ25lZCBpbnQgc2dfc2tic19yeDsKIAl1bnNpZ25lZCBpbnQgc2dfZnJhZ3Nfcng7CiAJdW5zaWduZWQgaW50IHNnX2FsbG9jX3BhZ2Vfcng7CisJdW5zaWduZWQgaW50IHR4X2NzdW07CiB9OwogCiAvKiBSb3V0aW5nIHN0dWZmICovCkBAIC00MDMsNyArNDA0LDYgQEAKIC8qIHBvc3NpYmxlIHR5cGVzIG9mIHFldGggbGFyZ2Vfc2VuZCBzdXBwb3J0ICovCiBlbnVtIHFldGhfbGFyZ2Vfc2VuZF90eXBlcyB7CiAJUUVUSF9MQVJHRV9TRU5EX05PLAotCVFFVEhfTEFSR0VfU0VORF9FRERQLAogCVFFVEhfTEFSR0VfU0VORF9UU08sCiB9OwogCkBAIC04MzgsMTEgKzgzOCw5IEBACiBpbnQgcWV0aF9nZXRfcHJpb3JpdHlfcXVldWUoc3RydWN0IHFldGhfY2FyZCAqLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBpbnQsIGludCk7CiBpbnQgcWV0aF9nZXRfZWxlbWVudHNfbm8oc3RydWN0IHFldGhfY2FyZCAqLCB2b2lkICosIHN0cnVjdCBza19idWZmICosIGludCk7CiBpbnQgcWV0aF9kb19zZW5kX3BhY2tldF9mYXN0KHN0cnVjdCBxZXRoX2NhcmQgKiwgc3RydWN0IHFldGhfcWRpb19vdXRfcSAqLAotCQkJc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IHFldGhfaGRyICosIGludCwKLQkJCXN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqLCBpbnQsIGludCk7CisJCQlzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3QgcWV0aF9oZHIgKiwgaW50LCBpbnQsIGludCk7CiBpbnQgcWV0aF9kb19zZW5kX3BhY2tldChzdHJ1Y3QgcWV0aF9jYXJkICosIHN0cnVjdCBxZXRoX3FkaW9fb3V0X3EgKiwKLQkJICAgIHN0cnVjdCBza19idWZmICosIHN0cnVjdCBxZXRoX2hkciAqLAotCQkgICAgaW50LCBzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgKik7CisJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3QgcWV0aF9oZHIgKiwgaW50KTsKIGludCBxZXRoX2NvcmVfZ2V0X3N0YXRzX2NvdW50KHN0cnVjdCBuZXRfZGV2aWNlICopOwogdm9pZCBxZXRoX2NvcmVfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKiwKIAkJCQlzdHJ1Y3QgZXRodG9vbF9zdGF0cyAqLCB1NjQgKik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmMgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmMKaW5kZXggZDFiNWJlYi4uYzgyN2Q2OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbWFpbi5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX21haW4uYwpAQCAtMTcsNyArMTcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaXAuaD4KLSNpbmNsdWRlIDxsaW51eC9pcHY2Lmg+CiAjaW5jbHVkZSA8bGludXgvdGNwLmg+CiAjaW5jbHVkZSA8bGludXgvbWlpLmg+CiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgpAQCAtMjYsNyArMjUsNiBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogCiAjaW5jbHVkZSAicWV0aF9jb3JlLmgiCi0jaW5jbHVkZSAicWV0aF9jb3JlX29mZmwuaCIKIAogc3RydWN0IHFldGhfZGJmX2luZm8gcWV0aF9kYmZbUUVUSF9EQkZfSU5GT1NdID0gewogCS8qIGRlZmluZSBkYmYgLSBOYW1lLCBQYWdlcywgQXJlYXMsIE1heGxlbiwgTGV2ZWwsIFZpZXcsIEhhbmRsZSAqLwpAQCAtMjg1LDE3ICsyODMsNiBAQAogCQluZXRpZl90eF9kaXNhYmxlKGNhcmQtPmRldik7CiAJY2FyZC0+b3B0aW9ucy5sYXJnZV9zZW5kID0gdHlwZTsKIAlzd2l0Y2ggKGNhcmQtPm9wdGlvbnMubGFyZ2Vfc2VuZCkgewotCWNhc2UgUUVUSF9MQVJHRV9TRU5EX0VERFA6Ci0JCWlmIChjYXJkLT5pbmZvLnR5cGUgIT0gUUVUSF9DQVJEX1RZUEVfSVFEKSB7Ci0JCQljYXJkLT5kZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9TRyB8Ci0JCQkJCU5FVElGX0ZfSFdfQ1NVTTsKLQkJfSBlbHNlIHsKLQkJCWNhcmQtPmRldi0+ZmVhdHVyZXMgJj0gfihORVRJRl9GX1RTTyB8IE5FVElGX0ZfU0cgfAotCQkJCQkJTkVUSUZfRl9IV19DU1VNKTsKLQkJCWNhcmQtPm9wdGlvbnMubGFyZ2Vfc2VuZCA9IFFFVEhfTEFSR0VfU0VORF9OTzsKLQkJCXJjID0gLUVPUE5PVFNVUFA7Ci0JCX0KLQkJYnJlYWs7CiAJY2FzZSBRRVRIX0xBUkdFX1NFTkRfVFNPOgogCQlpZiAocWV0aF9pc19zdXBwb3J0ZWQoY2FyZCwgSVBBX09VVEJPVU5EX1RTTykpIHsKIAkJCWNhcmQtPmRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU08gfCBORVRJRl9GX1NHIHwKQEAgLTk1Niw3ICs5NDMsNiBAQAogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQlza2IgPSBza2JfZGVxdWV1ZSgmYnVmLT5za2JfbGlzdCk7CiAJfQotCXFldGhfZWRkcF9idWZfcmVsZWFzZV9jb250ZXh0cyhidWYpOwogCWZvciAoaSA9IDA7IGkgPCBRRVRIX01BWF9CVUZGRVJfRUxFTUVOVFMocXVldWUtPmNhcmQpOyArK2kpIHsKIAkJaWYgKGJ1Zi0+YnVmZmVyLT5lbGVtZW50W2ldLmFkZHIgJiYgYnVmLT5pc19oZWFkZXJbaV0pCiAJCQlrbWVtX2NhY2hlX2ZyZWUocWV0aF9jb3JlX2hlYWRlcl9jYWNoZSwKQEAgLTE2OTAsNyArMTY3Niw3IEBACiAJaW50IHJjOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IHFldGhfcmVwbHkgKnJlcGx5ID0gTlVMTDsKLQl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0LCBldmVudF90aW1lb3V0OwogCXN0cnVjdCBxZXRoX2lwYV9jbWQgKmNtZDsKIAogCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDIsICJzZW5kY3RsIik7CkBAIC0xNzE1LDkgKzE3MDEsMTAgQEAKIAlxZXRoX3ByZXBhcmVfY29udHJvbF9kYXRhKGNhcmQsIGxlbiwgaW9iKTsKIAogCWlmIChJU19JUEEoaW9iLT5kYXRhKSkKLQkJdGltZW91dCA9IGppZmZpZXMgKyBRRVRIX0lQQV9USU1FT1VUOworCQlldmVudF90aW1lb3V0ID0gUUVUSF9JUEFfVElNRU9VVDsKIAllbHNlCi0JCXRpbWVvdXQgPSBqaWZmaWVzICsgUUVUSF9USU1FT1VUOworCQlldmVudF90aW1lb3V0ID0gUUVUSF9USU1FT1VUOworCXRpbWVvdXQgPSBqaWZmaWVzICsgZXZlbnRfdGltZW91dDsKIAogCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDYsICJub2lycXBuZCIpOwogCXNwaW5fbG9ja19pcnFzYXZlKGdldF9jY3dkZXZfbG9jayhjYXJkLT53cml0ZS5jY3dkZXYpLCBmbGFncyk7CkBAIC0xNzQ1LDcgKzE3MzIsNyBAQAogCWlmICgoY21kLT5oZHIuY29tbWFuZCA9PSBJUEFfQ01EX1NFVElQKSAmJgogCSAgICAoY21kLT5oZHIucHJvdF92ZXJzaW9uID09IFFFVEhfUFJPVF9JUFY0KSkgewogCQlpZiAoIXdhaXRfZXZlbnRfdGltZW91dChyZXBseS0+d2FpdF9xLAotCQkgICAgYXRvbWljX3JlYWQoJnJlcGx5LT5yZWNlaXZlZCksIHRpbWVvdXQpKQorCQkgICAgYXRvbWljX3JlYWQoJnJlcGx5LT5yZWNlaXZlZCksIGV2ZW50X3RpbWVvdXQpKQogCQkJZ290byB0aW1lX2VycjsKIAl9IGVsc2UgewogCQl3aGlsZSAoIWF0b21pY19yZWFkKCZyZXBseS0+cmVjZWl2ZWQpKSB7CkBAIC0yNjkzLDQwICsyNjgwLDIxIEBACiAJCXN0cnVjdCBxZXRoX3FkaW9fb3V0X2J1ZmZlciAqYnVmZmVyLCB1bnNpZ25lZCBpbnQgcWRpb19lcnIpCiB7CiAJaW50IHNiYWxmMTUgPSBidWZmZXItPmJ1ZmZlci0+ZWxlbWVudFsxNV0uZmxhZ3MgJiAweGZmOwotCWludCBjYyA9IHFkaW9fZXJyICYgMzsKIAogCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDYsICJoZHNuZGVyciIpOwogCXFldGhfY2hlY2tfcWRpb19lcnJvcnMoYnVmZmVyLT5idWZmZXIsIHFkaW9fZXJyLCAicW91dGVyciIpOwotCXN3aXRjaCAoY2MpIHsKLQljYXNlIDA6Ci0JCWlmIChxZGlvX2VycikgewotCQkJUUVUSF9EQkZfVEVYVChUUkFDRSwgMSwgImxua2ZhaWwiKTsKLQkJCVFFVEhfREJGX1RFWFRfKFRSQUNFLCAxLCAiJXMiLCBDQVJEX0JVU19JRChjYXJkKSk7Ci0JCQlRRVRIX0RCRl9URVhUXyhUUkFDRSwgMSwgIiUwNHggJTAyeCIsCi0JCQkJICAgICAgICh1MTYpcWRpb19lcnIsICh1OClzYmFsZjE1KTsKLQkJCXJldHVybiBRRVRIX1NFTkRfRVJST1JfTElOS19GQUlMVVJFOwotCQl9CisKKwlpZiAoIXFkaW9fZXJyKQogCQlyZXR1cm4gUUVUSF9TRU5EX0VSUk9SX05PTkU7Ci0JY2FzZSAyOgotCQlpZiAocWRpb19lcnIgJiBRRElPX0VSUk9SX1NJR0FfQlVTWSkgewotCQkJUUVUSF9EQkZfVEVYVChUUkFDRSwgMSwgIlNJR0FjYzJCIik7Ci0JCQlRRVRIX0RCRl9URVhUXyhUUkFDRSwgMSwgIiVzIiwgQ0FSRF9CVVNfSUQoY2FyZCkpOwotCQkJcmV0dXJuIFFFVEhfU0VORF9FUlJPUl9LSUNLX0lUOwotCQl9Ci0JCWlmICgoc2JhbGYxNSA+PSAxNSkgJiYgKHNiYWxmMTUgPD0gMzEpKQotCQkJcmV0dXJuIFFFVEhfU0VORF9FUlJPUl9SRVRSWTsKLQkJcmV0dXJuIFFFVEhfU0VORF9FUlJPUl9MSU5LX0ZBSUxVUkU7Ci0JCS8qIGxvb2sgYXQgcWRpb19lcnJvciBhbmQgc2JhbGYgMTUgKi8KLQljYXNlIDE6Ci0JCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDEsICJTSUdBY2MxIik7Ci0JCVFFVEhfREJGX1RFWFRfKFRSQUNFLCAxLCAiJXMiLCBDQVJEX0JVU19JRChjYXJkKSk7Ci0JCXJldHVybiBRRVRIX1NFTkRfRVJST1JfTElOS19GQUlMVVJFOwotCWNhc2UgMzoKLQlkZWZhdWx0OgotCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAxLCAiU0lHQWNjMyIpOwotCQlRRVRIX0RCRl9URVhUXyhUUkFDRSwgMSwgIiVzIiwgQ0FSRF9CVVNfSUQoY2FyZCkpOwotCQlyZXR1cm4gUUVUSF9TRU5EX0VSUk9SX0tJQ0tfSVQ7Ci0JfQorCisJaWYgKChzYmFsZjE1ID49IDE1KSAmJiAoc2JhbGYxNSA8PSAzMSkpCisJCXJldHVybiBRRVRIX1NFTkRfRVJST1JfUkVUUlk7CisKKwlRRVRIX0RCRl9URVhUKFRSQUNFLCAxLCAibG5rZmFpbCIpOworCVFFVEhfREJGX1RFWFRfKFRSQUNFLCAxLCAiJXMiLCBDQVJEX0JVU19JRChjYXJkKSk7CisJUUVUSF9EQkZfVEVYVF8oVFJBQ0UsIDEsICIlMDR4ICUwMngiLAorCQkgICAgICAgKHUxNilxZGlvX2VyciwgKHU4KXNiYWxmMTUpOworCXJldHVybiBRRVRIX1NFTkRfRVJST1JfTElOS19GQUlMVVJFOwogfQogCiAvKgpAQCAtMjg2MiwxMCArMjgzMCwxNCBAQAogCQkJcWV0aF9nZXRfbWljcm9zKCkgLQogCQkJcXVldWUtPmNhcmQtPnBlcmZfc3RhdHMub3V0Ym91bmRfZG9fcWRpb19zdGFydF90aW1lOwogCWlmIChyYykgeworCQlxdWV1ZS0+Y2FyZC0+c3RhdHMudHhfZXJyb3JzICs9IGNvdW50OworCQkvKiBpZ25vcmUgdGVtcG9yYXJ5IFNJR0EgZXJyb3JzIHdpdGhvdXQgYnVzeSBjb25kaXRpb24gKi8KKwkJaWYgKHJjID09IFFESU9fRVJST1JfU0lHQV9UQVJHRVQpCisJCQlyZXR1cm47CiAJCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDIsICJmbHVzaGJ1ZiIpOwogCQlRRVRIX0RCRl9URVhUXyhUUkFDRSwgMiwgIiBlcnIlZCIsIHJjKTsKIAkJUUVUSF9EQkZfVEVYVF8oVFJBQ0UsIDIsICIlcyIsIENBUkRfRERFVl9JRChxdWV1ZS0+Y2FyZCkpOwotCQlxdWV1ZS0+Y2FyZC0+c3RhdHMudHhfZXJyb3JzICs9IGNvdW50OworCiAJCS8qIHRoaXMgbXVzdCBub3QgaGFwcGVuIHVuZGVyIG5vcm1hbCBjaXJjdW1zdGFuY2VzLiBpZiBpdAogCQkgKiBoYXBwZW5zIHNvbWV0aGluZyBpcyByZWFsbHkgd3JvbmcgLT4gcmVjb3ZlciAqLwogCQlxZXRoX3NjaGVkdWxlX3JlY292ZXJ5KHF1ZXVlLT5jYXJkKTsKQEAgLTI5NDAsMTMgKzI5MTIsNyBAQAogCX0KIAlmb3IgKGkgPSBmaXJzdF9lbGVtZW50OyBpIDwgKGZpcnN0X2VsZW1lbnQgKyBjb3VudCk7ICsraSkgewogCQlidWZmZXIgPSAmcXVldWUtPmJ1ZnNbaSAlIFFESU9fTUFYX0JVRkZFUlNfUEVSX1FdOwotCQkvKndlIG9ubHkgaGFuZGxlIHRoZSBLSUNLX0lUIGVycm9yIGJ5IGRvaW5nIGEgcmVjb3ZlcnkgKi8KLQkJaWYgKHFldGhfaGFuZGxlX3NlbmRfZXJyb3IoY2FyZCwgYnVmZmVyLCBxZGlvX2Vycm9yKQotCQkJCT09IFFFVEhfU0VORF9FUlJPUl9LSUNLX0lUKXsKLQkJCW5ldGlmX3N0b3BfcXVldWUoY2FyZC0+ZGV2KTsKLQkJCXFldGhfc2NoZWR1bGVfcmVjb3ZlcnkoY2FyZCk7Ci0JCQlyZXR1cm47Ci0JCX0KKwkJcWV0aF9oYW5kbGVfc2VuZF9lcnJvcihjYXJkLCBidWZmZXIsIHFkaW9fZXJyb3IpOwogCQlxZXRoX2NsZWFyX291dHB1dF9idWZmZXIocXVldWUsIGJ1ZmZlcik7CiAJfQogCWF0b21pY19zdWIoY291bnQsICZxdWV1ZS0+dXNlZF9idWZmZXJzKTsKQEAgLTMxODcsMTEgKzMxNTMsOSBAQAogaW50IHFldGhfZG9fc2VuZF9wYWNrZXRfZmFzdChzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLAogCQlzdHJ1Y3QgcWV0aF9xZGlvX291dF9xICpxdWV1ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJc3RydWN0IHFldGhfaGRyICpoZHIsIGludCBlbGVtZW50c19uZWVkZWQsCi0JCXN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqY3R4LCBpbnQgb2Zmc2V0LCBpbnQgaGRfbGVuKQorCQlpbnQgb2Zmc2V0LCBpbnQgaGRfbGVuKQogewogCXN0cnVjdCBxZXRoX3FkaW9fb3V0X2J1ZmZlciAqYnVmZmVyOwotCWludCBidWZmZXJzX25lZWRlZCA9IDA7Ci0JaW50IGZsdXNoX2NudCA9IDA7CiAJaW50IGluZGV4OwogCiAJLyogc3BpbiB1bnRpbCB3ZSBnZXQgdGhlIHF1ZXVlIC4uLiAqLwpAQCAtMzIwNiwyNyArMzE3MCwxMSBAQAogCSAqLwogCWlmIChhdG9taWNfcmVhZCgmYnVmZmVyLT5zdGF0ZSkgIT0gUUVUSF9RRElPX0JVRl9FTVBUWSkKIAkJZ290byBvdXQ7Ci0JaWYgKGN0eCA9PSBOVUxMKQotCQlxdWV1ZS0+bmV4dF9idWZfdG9fZmlsbCA9IChxdWV1ZS0+bmV4dF9idWZfdG9fZmlsbCArIDEpICUKKwlxdWV1ZS0+bmV4dF9idWZfdG9fZmlsbCA9IChxdWV1ZS0+bmV4dF9idWZfdG9fZmlsbCArIDEpICUKIAkJCQkJICBRRElPX01BWF9CVUZGRVJTX1BFUl9ROwotCWVsc2UgewotCQlidWZmZXJzX25lZWRlZCA9IHFldGhfZWRkcF9jaGVja19idWZmZXJzX2Zvcl9jb250ZXh0KHF1ZXVlLAotCQkJCQkJCQkJY3R4KTsKLQkJaWYgKGJ1ZmZlcnNfbmVlZGVkIDwgMCkKLQkJCWdvdG8gb3V0OwotCQlxdWV1ZS0+bmV4dF9idWZfdG9fZmlsbCA9Ci0JCQkocXVldWUtPm5leHRfYnVmX3RvX2ZpbGwgKyBidWZmZXJzX25lZWRlZCkgJQotCQkJUURJT19NQVhfQlVGRkVSU19QRVJfUTsKLQl9CiAJYXRvbWljX3NldCgmcXVldWUtPnN0YXRlLCBRRVRIX09VVF9RX1VOTE9DS0VEKTsKLQlpZiAoY3R4ID09IE5VTEwpIHsKLQkJcWV0aF9maWxsX2J1ZmZlcihxdWV1ZSwgYnVmZmVyLCBza2IsIGhkciwgb2Zmc2V0LCBoZF9sZW4pOwotCQlxZXRoX2ZsdXNoX2J1ZmZlcnMocXVldWUsIGluZGV4LCAxKTsKLQl9IGVsc2UgewotCQlmbHVzaF9jbnQgPSBxZXRoX2VkZHBfZmlsbF9idWZmZXIocXVldWUsIGN0eCwgaW5kZXgpOwotCQlXQVJOX09OKGJ1ZmZlcnNfbmVlZGVkICE9IGZsdXNoX2NudCk7Ci0JCXFldGhfZmx1c2hfYnVmZmVycyhxdWV1ZSwgaW5kZXgsIGZsdXNoX2NudCk7Ci0JfQorCXFldGhfZmlsbF9idWZmZXIocXVldWUsIGJ1ZmZlciwgc2tiLCBoZHIsIG9mZnNldCwgaGRfbGVuKTsKKwlxZXRoX2ZsdXNoX2J1ZmZlcnMocXVldWUsIGluZGV4LCAxKTsKIAlyZXR1cm4gMDsKIG91dDoKIAlhdG9taWNfc2V0KCZxdWV1ZS0+c3RhdGUsIFFFVEhfT1VUX1FfVU5MT0NLRUQpOwpAQCAtMzIzNiw3ICszMTg0LDcgQEAKIAogaW50IHFldGhfZG9fc2VuZF9wYWNrZXQoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgc3RydWN0IHFldGhfcWRpb19vdXRfcSAqcXVldWUsCiAJCXN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBxZXRoX2hkciAqaGRyLAotCQlpbnQgZWxlbWVudHNfbmVlZGVkLCBzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgKmN0eCkKKwkJaW50IGVsZW1lbnRzX25lZWRlZCkKIHsKIAlzdHJ1Y3QgcWV0aF9xZGlvX291dF9idWZmZXIgKmJ1ZmZlcjsKIAlpbnQgc3RhcnRfaW5kZXg7CkBAIC0zMjYyLDUzICszMjEwLDMyIEBACiAJcWV0aF9zd2l0Y2hfdG9fcGFja2luZ19pZl9uZWVkZWQocXVldWUpOwogCWlmIChxdWV1ZS0+ZG9fcGFjaykgewogCQlkb19wYWNrID0gMTsKLQkJaWYgKGN0eCA9PSBOVUxMKSB7Ci0JCQkvKiBkb2VzIHBhY2tldCBmaXQgaW4gY3VycmVudCBidWZmZXI/ICovCi0JCQlpZiAoKFFFVEhfTUFYX0JVRkZFUl9FTEVNRU5UUyhjYXJkKSAtCi0JCQkgICAgYnVmZmVyLT5uZXh0X2VsZW1lbnRfdG9fZmlsbCkgPCBlbGVtZW50c19uZWVkZWQpIHsKLQkJCQkvKiAuLi4gbm8gLT4gc2V0IHN0YXRlIFBSSU1FRCAqLwotCQkJCWF0b21pY19zZXQoJmJ1ZmZlci0+c3RhdGUsCi0JCQkJCVFFVEhfUURJT19CVUZfUFJJTUVEKTsKLQkJCQlmbHVzaF9jb3VudCsrOwotCQkJCXF1ZXVlLT5uZXh0X2J1Zl90b19maWxsID0KLQkJCQkJKHF1ZXVlLT5uZXh0X2J1Zl90b19maWxsICsgMSkgJQotCQkJCQlRRElPX01BWF9CVUZGRVJTX1BFUl9ROwotCQkJCWJ1ZmZlciA9ICZxdWV1ZS0+YnVmc1txdWV1ZS0+bmV4dF9idWZfdG9fZmlsbF07Ci0JCQkJLyogd2UgZGlkIGEgc3RlcCBmb3J3YXJkLCBzbyBjaGVjayBidWZmZXIgc3RhdGUKLQkJCQkgKiBhZ2FpbiAqLwotCQkJCWlmIChhdG9taWNfcmVhZCgmYnVmZmVyLT5zdGF0ZSkgIT0KLQkJCQkJCVFFVEhfUURJT19CVUZfRU1QVFkpewotCQkJCQlxZXRoX2ZsdXNoX2J1ZmZlcnMocXVldWUsIHN0YXJ0X2luZGV4LAorCQkvKiBkb2VzIHBhY2tldCBmaXQgaW4gY3VycmVudCBidWZmZXI/ICovCisJCWlmICgoUUVUSF9NQVhfQlVGRkVSX0VMRU1FTlRTKGNhcmQpIC0KKwkJICAgIGJ1ZmZlci0+bmV4dF9lbGVtZW50X3RvX2ZpbGwpIDwgZWxlbWVudHNfbmVlZGVkKSB7CisJCQkvKiAuLi4gbm8gLT4gc2V0IHN0YXRlIFBSSU1FRCAqLworCQkJYXRvbWljX3NldCgmYnVmZmVyLT5zdGF0ZSwgUUVUSF9RRElPX0JVRl9QUklNRUQpOworCQkJZmx1c2hfY291bnQrKzsKKwkJCXF1ZXVlLT5uZXh0X2J1Zl90b19maWxsID0KKwkJCQkocXVldWUtPm5leHRfYnVmX3RvX2ZpbGwgKyAxKSAlCisJCQkJUURJT19NQVhfQlVGRkVSU19QRVJfUTsKKwkJCWJ1ZmZlciA9ICZxdWV1ZS0+YnVmc1txdWV1ZS0+bmV4dF9idWZfdG9fZmlsbF07CisJCQkvKiB3ZSBkaWQgYSBzdGVwIGZvcndhcmQsIHNvIGNoZWNrIGJ1ZmZlciBzdGF0ZQorCQkJICogYWdhaW4gKi8KKwkJCWlmIChhdG9taWNfcmVhZCgmYnVmZmVyLT5zdGF0ZSkgIT0KKwkJCSAgICBRRVRIX1FESU9fQlVGX0VNUFRZKSB7CisJCQkJcWV0aF9mbHVzaF9idWZmZXJzKHF1ZXVlLCBzdGFydF9pbmRleCwKIAkJCQkJCQkgICBmbHVzaF9jb3VudCk7Ci0JCQkJCWF0b21pY19zZXQoJnF1ZXVlLT5zdGF0ZSwKKwkJCQlhdG9taWNfc2V0KCZxdWV1ZS0+c3RhdGUsCiAJCQkJCQlRRVRIX09VVF9RX1VOTE9DS0VEKTsKLQkJCQkJcmV0dXJuIC1FQlVTWTsKLQkJCQl9Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQkvKiBjaGVjayBpZiB3ZSBoYXZlIGVub3VnaCBlbGVtZW50cyAoaW5jbHVkaW5nIGZvbGxvd2luZwotCQkJICogZnJlZSBidWZmZXJzKSB0byBoYW5kbGUgZWRkcCBjb250ZXh0ICovCi0JCQlpZiAocWV0aF9lZGRwX2NoZWNrX2J1ZmZlcnNfZm9yX2NvbnRleHQocXVldWUsIGN0eCkKLQkJCQk8IDApIHsKLQkJCQlyYyA9IC1FQlVTWTsKLQkJCQlnb3RvIG91dDsKKwkJCQlyZXR1cm4gLUVCVVNZOwogCQkJfQogCQl9CiAJfQotCWlmIChjdHggPT0gTlVMTCkKLQkJdG1wID0gcWV0aF9maWxsX2J1ZmZlcihxdWV1ZSwgYnVmZmVyLCBza2IsIGhkciwgLTEsIDApOwotCWVsc2UgewotCQl0bXAgPSBxZXRoX2VkZHBfZmlsbF9idWZmZXIocXVldWUsIGN0eCwKLQkJCQkJCXF1ZXVlLT5uZXh0X2J1Zl90b19maWxsKTsKLQkJaWYgKHRtcCA8IDApIHsKLQkJCXJjID0gLUVCVVNZOwotCQkJZ290byBvdXQ7Ci0JCX0KLQl9CisJdG1wID0gcWV0aF9maWxsX2J1ZmZlcihxdWV1ZSwgYnVmZmVyLCBza2IsIGhkciwgLTEsIDApOwogCXF1ZXVlLT5uZXh0X2J1Zl90b19maWxsID0gKHF1ZXVlLT5uZXh0X2J1Zl90b19maWxsICsgdG1wKSAlCiAJCQkJICBRRElPX01BWF9CVUZGRVJTX1BFUl9ROwogCWZsdXNoX2NvdW50ICs9IHRtcDsKLW91dDoKIAlpZiAoZmx1c2hfY291bnQpCiAJCXFldGhfZmx1c2hfYnVmZmVycyhxdWV1ZSwgc3RhcnRfaW5kZXgsIGZsdXNoX2NvdW50KTsKIAllbHNlIGlmICghYXRvbWljX3JlYWQoJnF1ZXVlLT5zZXRfcGNpX2ZsYWdzX2NvdW50KSkKQEAgLTQzMjcsNiArNDI1NCw3IEBACiAvKiAzMCAqL3sidHggY291bnQifSwKIAl7InR4IGRvX1FESU8gdGltZSJ9LAogCXsidHggZG9fUURJTyBjb3VudCJ9LAorCXsidHggY3N1bSJ9LAogfTsKIAogaW50IHFldGhfY29yZV9nZXRfc3RhdHNfY291bnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTQzNzgsNiArNDMwNiw3IEBACiAJZGF0YVszMF0gPSBjYXJkLT5wZXJmX3N0YXRzLm91dGJvdW5kX2NudDsKIAlkYXRhWzMxXSA9IGNhcmQtPnBlcmZfc3RhdHMub3V0Ym91bmRfZG9fcWRpb190aW1lOwogCWRhdGFbMzJdID0gY2FyZC0+cGVyZl9zdGF0cy5vdXRib3VuZF9kb19xZGlvX2NudDsKKwlkYXRhWzMzXSA9IGNhcmQtPnBlcmZfc3RhdHMudHhfY3N1bTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHFldGhfY29yZV9nZXRfZXRodG9vbF9zdGF0cyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX29mZmwuYyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX29mZmwuYwppbmRleCA0MDgwMTI2Li5lNjlkZTI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9vZmZsLmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfb2ZmbC5jCkBAIC0xLDY5OSArMCwwIEBACi0vKgotICogIGRyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX29mZmwuYwotICoKLSAqICAgIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwNwotICogICAgQXV0aG9yKHMpOiBUaG9tYXMgU3BhdHppZXIgPHRzcGF0QGRlLmlibS5jb20+LAotICoJCSBGcmFuayBCbGFzY2hrYSA8ZnJhbmsuYmxhc2Noa2FAZGUuaWJtLmNvbT4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9pcC5oPgotI2luY2x1ZGUgPGxpbnV4L2luZXRkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC90Y3AuaD4KLSNpbmNsdWRlIDxuZXQvdGNwLmg+Ci0jaW5jbHVkZSA8bGludXgvc2tidWZmLmg+Ci0KLSNpbmNsdWRlIDxuZXQvaXAuaD4KLSNpbmNsdWRlIDxuZXQvaXA2X2NoZWNrc3VtLmg+Ci0KLSNpbmNsdWRlICJxZXRoX2NvcmUuaCIKLSNpbmNsdWRlICJxZXRoX2NvcmVfbXBjLmgiCi0jaW5jbHVkZSAicWV0aF9jb3JlX29mZmwuaCIKLQotaW50IHFldGhfZWRkcF9jaGVja19idWZmZXJzX2Zvcl9jb250ZXh0KHN0cnVjdCBxZXRoX3FkaW9fb3V0X3EgKnF1ZXVlLAotCQlzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgKmN0eCkKLXsKLQlpbnQgaW5kZXggPSBxdWV1ZS0+bmV4dF9idWZfdG9fZmlsbDsKLQlpbnQgZWxlbWVudHNfbmVlZGVkID0gY3R4LT5udW1fZWxlbWVudHM7Ci0JaW50IGVsZW1lbnRzX2luX2J1ZmZlcjsKLQlpbnQgc2tic19pbl9idWZmZXI7Ci0JaW50IGJ1ZmZlcnNfbmVlZGVkID0gMDsKLQotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDUsICJlZGRwY2JmYyIpOwotCXdoaWxlIChlbGVtZW50c19uZWVkZWQgPiAwKSB7Ci0JCWJ1ZmZlcnNfbmVlZGVkKys7Ci0JCWlmIChhdG9taWNfcmVhZCgmcXVldWUtPmJ1ZnNbaW5kZXhdLnN0YXRlKSAhPQotCQkJCVFFVEhfUURJT19CVUZfRU1QVFkpCi0JCQlyZXR1cm4gLUVCVVNZOwotCi0JCWVsZW1lbnRzX2luX2J1ZmZlciA9IFFFVEhfTUFYX0JVRkZFUl9FTEVNRU5UUyhxdWV1ZS0+Y2FyZCkgLQotCQkJCSAgICAgcXVldWUtPmJ1ZnNbaW5kZXhdLm5leHRfZWxlbWVudF90b19maWxsOwotCQlza2JzX2luX2J1ZmZlciA9IGVsZW1lbnRzX2luX2J1ZmZlciAvIGN0eC0+ZWxlbWVudHNfcGVyX3NrYjsKLQkJZWxlbWVudHNfbmVlZGVkIC09IHNrYnNfaW5fYnVmZmVyICogY3R4LT5lbGVtZW50c19wZXJfc2tiOwotCQlpbmRleCA9IChpbmRleCArIDEpICUgUURJT19NQVhfQlVGRkVSU19QRVJfUTsKLQl9Ci0JcmV0dXJuIGJ1ZmZlcnNfbmVlZGVkOwotfQotCi1zdGF0aWMgdm9pZCBxZXRoX2VkZHBfZnJlZV9jb250ZXh0KHN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqY3R4KQotewotCWludCBpOwotCi0JUUVUSF9EQkZfVEVYVChUUkFDRSwgNSwgImVkZHBmY3R4Iik7Ci0JZm9yIChpID0gMDsgaSA8IGN0eC0+bnVtX3BhZ2VzOyArK2kpCi0JCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyljdHgtPnBhZ2VzW2ldKTsKLQlrZnJlZShjdHgtPnBhZ2VzKTsKLQlrZnJlZShjdHgtPmVsZW1lbnRzKTsKLQlrZnJlZShjdHgpOwotfQotCi0KLXN0YXRpYyB2b2lkIHFldGhfZWRkcF9nZXRfY29udGV4dChzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgKmN0eCkKLXsKLQlhdG9taWNfaW5jKCZjdHgtPnJlZmNudCk7Ci19Ci0KLXZvaWQgcWV0aF9lZGRwX3B1dF9jb250ZXh0KHN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqY3R4KQotewotCWlmIChhdG9taWNfZGVjX3JldHVybigmY3R4LT5yZWZjbnQpID09IDApCi0JCXFldGhfZWRkcF9mcmVlX2NvbnRleHQoY3R4KTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHFldGhfZWRkcF9wdXRfY29udGV4dCk7Ci0KLXZvaWQgcWV0aF9lZGRwX2J1Zl9yZWxlYXNlX2NvbnRleHRzKHN0cnVjdCBxZXRoX3FkaW9fb3V0X2J1ZmZlciAqYnVmKQotewotCXN0cnVjdCBxZXRoX2VkZHBfY29udGV4dF9yZWZlcmVuY2UgKnJlZjsKLQotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDYsICJlZGRwcmN0eCIpOwotCXdoaWxlICghbGlzdF9lbXB0eSgmYnVmLT5jdHhfbGlzdCkpIHsKLQkJcmVmID0gbGlzdF9lbnRyeShidWYtPmN0eF9saXN0Lm5leHQsCi0JCQkJIHN0cnVjdCBxZXRoX2VkZHBfY29udGV4dF9yZWZlcmVuY2UsIGxpc3QpOwotCQlxZXRoX2VkZHBfcHV0X2NvbnRleHQocmVmLT5jdHgpOwotCQlsaXN0X2RlbCgmcmVmLT5saXN0KTsKLQkJa2ZyZWUocmVmKTsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgcWV0aF9lZGRwX2J1Zl9yZWZfY29udGV4dChzdHJ1Y3QgcWV0aF9xZGlvX291dF9idWZmZXIgKmJ1ZiwKLQkJc3RydWN0IHFldGhfZWRkcF9jb250ZXh0ICpjdHgpCi17Ci0Jc3RydWN0IHFldGhfZWRkcF9jb250ZXh0X3JlZmVyZW5jZSAqcmVmOwotCi0JUUVUSF9EQkZfVEVYVChUUkFDRSwgNiwgImVkZHByZmN4Iik7Ci0JcmVmID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHFldGhfZWRkcF9jb250ZXh0X3JlZmVyZW5jZSksIEdGUF9BVE9NSUMpOwotCWlmIChyZWYgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JcWV0aF9lZGRwX2dldF9jb250ZXh0KGN0eCk7Ci0JcmVmLT5jdHggPSBjdHg7Ci0JbGlzdF9hZGRfdGFpbCgmcmVmLT5saXN0LCAmYnVmLT5jdHhfbGlzdCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBxZXRoX2VkZHBfZmlsbF9idWZmZXIoc3RydWN0IHFldGhfcWRpb19vdXRfcSAqcXVldWUsCi0JCXN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqY3R4LCBpbnQgaW5kZXgpCi17Ci0Jc3RydWN0IHFldGhfcWRpb19vdXRfYnVmZmVyICpidWYgPSBOVUxMOwotCXN0cnVjdCBxZGlvX2J1ZmZlciAqYnVmZmVyOwotCWludCBlbGVtZW50cyA9IGN0eC0+bnVtX2VsZW1lbnRzOwotCWludCBlbGVtZW50ID0gMDsKLQlpbnQgZmx1c2hfY250ID0gMDsKLQlpbnQgbXVzdF9yZWZjbnQgPSAxOwotCWludCBpOwotCi0JUUVUSF9EQkZfVEVYVChUUkFDRSwgNSwgImVkZHBmaWJ1Iik7Ci0Jd2hpbGUgKGVsZW1lbnRzID4gMCkgewotCQlidWYgPSAmcXVldWUtPmJ1ZnNbaW5kZXhdOwotCQlpZiAoYXRvbWljX3JlYWQoJmJ1Zi0+c3RhdGUpICE9IFFFVEhfUURJT19CVUZfRU1QVFkpIHsKLQkJCS8qIG5vcm1hbGx5IHRoaXMgc2hvdWxkIG5vdCBoYXBwZW4gc2luY2Ugd2UgY2hlY2tlZCBmb3IKLQkJCSAqIGF2YWlsYWJsZSBlbGVtZW50cyBpbiBxZXRoX2NoZWNrX2VsZW1lbnRzX2Zvcl9jb250ZXh0Ci0JCQkgKi8KLQkJCWlmIChlbGVtZW50ID09IDApCi0JCQkJcmV0dXJuIC1FQlVTWTsKLQkJCWVsc2UgewotCQkJCVFFVEhfREJGX01FU1NBR0UoMiwgImNvdWxkIG9ubHkgcGFydGlhbGx5IGZpbGwiCi0JCQkJCSJlZGRwIGJ1ZmZlciFcbiIpOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCQl9Ci0JCS8qIGNoZWNrIGlmIHRoZSB3aG9sZSBuZXh0IHNrYiBmaXRzIGludG8gY3VycmVudCBidWZmZXIgKi8KLQkJaWYgKChRRVRIX01BWF9CVUZGRVJfRUxFTUVOVFMocXVldWUtPmNhcmQpIC0KLQkJCQkJYnVmLT5uZXh0X2VsZW1lbnRfdG9fZmlsbCkKLQkJCQk8IGN0eC0+ZWxlbWVudHNfcGVyX3NrYil7Ci0JCQkvKiBubyAtPiBnbyB0byBuZXh0IGJ1ZmZlciAqLwotCQkJYXRvbWljX3NldCgmYnVmLT5zdGF0ZSwgUUVUSF9RRElPX0JVRl9QUklNRUQpOwotCQkJaW5kZXggPSAoaW5kZXggKyAxKSAlIFFESU9fTUFYX0JVRkZFUlNfUEVSX1E7Ci0JCQlmbHVzaF9jbnQrKzsKLQkJCS8qIG5ldyBidWZmZXIsIHNvIHdlIGhhdmUgdG8gYWRkIGN0eCB0byBidWZmZXInY3R4X2xpc3QKLQkJCSAqIGFuZCBpbmNyZW1lbnQgY3R4J3MgcmVmY250ICovCi0JCQltdXN0X3JlZmNudCA9IDE7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAobXVzdF9yZWZjbnQpIHsKLQkJCW11c3RfcmVmY250ID0gMDsKLQkJCWlmIChxZXRoX2VkZHBfYnVmX3JlZl9jb250ZXh0KGJ1ZiwgY3R4KSkgewotCQkJCWdvdG8gb3V0X2NoZWNrOwotCQkJfQotCQl9Ci0JCWJ1ZmZlciA9IGJ1Zi0+YnVmZmVyOwotCQkvKiBmaWxsIG9uZSBza2IgaW50byBidWZmZXIgKi8KLQkJZm9yIChpID0gMDsgaSA8IGN0eC0+ZWxlbWVudHNfcGVyX3NrYjsgKytpKSB7Ci0JCQlpZiAoY3R4LT5lbGVtZW50c1tlbGVtZW50XS5sZW5ndGggIT0gMCkgewotCQkJCWJ1ZmZlci0+ZWxlbWVudFtidWYtPm5leHRfZWxlbWVudF90b19maWxsXS4KLQkJCQlhZGRyID0gY3R4LT5lbGVtZW50c1tlbGVtZW50XS5hZGRyOwotCQkJCWJ1ZmZlci0+ZWxlbWVudFtidWYtPm5leHRfZWxlbWVudF90b19maWxsXS4KLQkJCQlsZW5ndGggPSBjdHgtPmVsZW1lbnRzW2VsZW1lbnRdLmxlbmd0aDsKLQkJCQlidWZmZXItPmVsZW1lbnRbYnVmLT5uZXh0X2VsZW1lbnRfdG9fZmlsbF0uCi0JCQkJZmxhZ3MgPSBjdHgtPmVsZW1lbnRzW2VsZW1lbnRdLmZsYWdzOwotCQkJCWJ1Zi0+bmV4dF9lbGVtZW50X3RvX2ZpbGwrKzsKLQkJCX0KLQkJCWVsZW1lbnQrKzsKLQkJCWVsZW1lbnRzLS07Ci0JCX0KLQl9Ci1vdXRfY2hlY2s6Ci0JaWYgKCFxdWV1ZS0+ZG9fcGFjaykgewotCQlRRVRIX0RCRl9URVhUKFRSQUNFLCA2LCAiZmlsbGJmbnAiKTsKLQkJLyogc2V0IHN0YXRlIHRvIFBSSU1FRCAtPiB3aWxsIGJlIGZsdXNoZWQgKi8KLQkJaWYgKGJ1Zi0+bmV4dF9lbGVtZW50X3RvX2ZpbGwgPiAwKSB7Ci0JCQlhdG9taWNfc2V0KCZidWYtPnN0YXRlLCBRRVRIX1FESU9fQlVGX1BSSU1FRCk7Ci0JCQlmbHVzaF9jbnQrKzsKLQkJfQotCX0gZWxzZSB7Ci0JCWlmIChxdWV1ZS0+Y2FyZC0+b3B0aW9ucy5wZXJmb3JtYW5jZV9zdGF0cykKLQkJCXF1ZXVlLT5jYXJkLT5wZXJmX3N0YXRzLnNrYnNfc2VudF9wYWNrKys7Ci0JCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDYsICJmaWxsYmZwYSIpOwotCQlpZiAoYnVmLT5uZXh0X2VsZW1lbnRfdG9fZmlsbCA+PQotCQkJCVFFVEhfTUFYX0JVRkZFUl9FTEVNRU5UUyhxdWV1ZS0+Y2FyZCkpIHsKLQkJCS8qCi0JCQkgKiBwYWNrZWQgYnVmZmVyIGlmIGZ1bGwgLT4gc2V0IHN0YXRlIFBSSU1FRAotCQkJICogLT4gd2lsbCBiZSBmbHVzaGVkCi0JCQkgKi8KLQkJCWF0b21pY19zZXQoJmJ1Zi0+c3RhdGUsIFFFVEhfUURJT19CVUZfUFJJTUVEKTsKLQkJCWZsdXNoX2NudCsrOwotCQl9Ci0JfQotb3V0OgotCXJldHVybiBmbHVzaF9jbnQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHFldGhfZWRkcF9jcmVhdGVfc2VnbWVudF9oZHJzKHN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqY3R4LAotCQlzdHJ1Y3QgcWV0aF9lZGRwX2RhdGEgKmVkZHAsIGludCBkYXRhX2xlbikKLXsKLQl1OCAqcGFnZTsKLQlpbnQgcGFnZV9yZW1haW5kZXI7Ci0JaW50IHBhZ2Vfb2Zmc2V0OwotCWludCBwa3RfbGVuOwotCXN0cnVjdCBxZXRoX2VkZHBfZWxlbWVudCAqZWxlbWVudDsKLQotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDUsICJlZGRwY3JzaCIpOwotCXBhZ2UgPSBjdHgtPnBhZ2VzW2N0eC0+b2Zmc2V0ID4+IFBBR0VfU0hJRlRdOwotCXBhZ2Vfb2Zmc2V0ID0gY3R4LT5vZmZzZXQgJSBQQUdFX1NJWkU7Ci0JZWxlbWVudCA9ICZjdHgtPmVsZW1lbnRzW2N0eC0+bnVtX2VsZW1lbnRzXTsKLQlwa3RfbGVuID0gZWRkcC0+bmhsICsgZWRkcC0+dGhsICsgZGF0YV9sZW47Ci0JLyogRklYTUU6IGxheWVyMiBhbmQgVkxBTiAhISEgKi8KLQlpZiAoZWRkcC0+cWguaGRyLmwyLmlkID09IFFFVEhfSEVBREVSX1RZUEVfTEFZRVIyKQotCQlwa3RfbGVuICs9IEVUSF9ITEVOOwotCWlmIChlZGRwLT5tYWMuaF9wcm90byA9PSBfX2NvbnN0YW50X2h0b25zKEVUSF9QXzgwMjFRKSkKLQkJcGt0X2xlbiArPSBWTEFOX0hMRU47Ci0JLyogZG9lcyBjb21wbGV0ZSBwYWNrZXQgZml0IGluIGN1cnJlbnQgcGFnZSA/ICovCi0JcGFnZV9yZW1haW5kZXIgPSBQQUdFX1NJWkUgLSBwYWdlX29mZnNldDsKLQlpZiAocGFnZV9yZW1haW5kZXIgPCAoc2l6ZW9mKHN0cnVjdCBxZXRoX2hkcikgKyBwa3RfbGVuKSkgewotCQkvKiBubyAtPiBnbyB0byBzdGFydCBvZiBuZXh0IHBhZ2UgKi8KLQkJY3R4LT5vZmZzZXQgKz0gcGFnZV9yZW1haW5kZXI7Ci0JCXBhZ2UgPSBjdHgtPnBhZ2VzW2N0eC0+b2Zmc2V0ID4+IFBBR0VfU0hJRlRdOwotCQlwYWdlX29mZnNldCA9IDA7Ci0JfQotCW1lbWNweShwYWdlICsgcGFnZV9vZmZzZXQsICZlZGRwLT5xaCwgc2l6ZW9mKHN0cnVjdCBxZXRoX2hkcikpOwotCWVsZW1lbnQtPmFkZHIgPSBwYWdlICsgcGFnZV9vZmZzZXQ7Ci0JZWxlbWVudC0+bGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBxZXRoX2hkcik7Ci0JY3R4LT5vZmZzZXQgKz0gc2l6ZW9mKHN0cnVjdCBxZXRoX2hkcik7Ci0JcGFnZV9vZmZzZXQgKz0gc2l6ZW9mKHN0cnVjdCBxZXRoX2hkcik7Ci0JLyogYWRkIG1hYyBoZWFkZXIgKD8pICovCi0JaWYgKGVkZHAtPnFoLmhkci5sMi5pZCA9PSBRRVRIX0hFQURFUl9UWVBFX0xBWUVSMikgewotCQltZW1jcHkocGFnZSArIHBhZ2Vfb2Zmc2V0LCAmZWRkcC0+bWFjLCBFVEhfSExFTik7Ci0JCWVsZW1lbnQtPmxlbmd0aCArPSBFVEhfSExFTjsKLQkJY3R4LT5vZmZzZXQgKz0gRVRIX0hMRU47Ci0JCXBhZ2Vfb2Zmc2V0ICs9IEVUSF9ITEVOOwotCX0KLQkvKiBhZGQgVkxBTiB0YWcgKi8KLQlpZiAoZWRkcC0+bWFjLmhfcHJvdG8gPT0gX19jb25zdGFudF9odG9ucyhFVEhfUF84MDIxUSkpIHsKLQkJbWVtY3B5KHBhZ2UgKyBwYWdlX29mZnNldCwgJmVkZHAtPnZsYW4sIFZMQU5fSExFTik7Ci0JCWVsZW1lbnQtPmxlbmd0aCArPSBWTEFOX0hMRU47Ci0JCWN0eC0+b2Zmc2V0ICs9IFZMQU5fSExFTjsKLQkJcGFnZV9vZmZzZXQgKz0gVkxBTl9ITEVOOwotCX0KLQkvKiBhZGQgbmV0d29yayBoZWFkZXIgKi8KLQltZW1jcHkocGFnZSArIHBhZ2Vfb2Zmc2V0LCAodTggKikmZWRkcC0+bmgsIGVkZHAtPm5obCk7Ci0JZWxlbWVudC0+bGVuZ3RoICs9IGVkZHAtPm5obDsKLQllZGRwLT5uaF9pbl9jdHggPSBwYWdlICsgcGFnZV9vZmZzZXQ7Ci0JY3R4LT5vZmZzZXQgKz0gZWRkcC0+bmhsOwotCXBhZ2Vfb2Zmc2V0ICs9IGVkZHAtPm5obDsKLQkvKiBhZGQgdHJhbnNwb3J0IGhlYWRlciAqLwotCW1lbWNweShwYWdlICsgcGFnZV9vZmZzZXQsICh1OCAqKSZlZGRwLT50aCwgZWRkcC0+dGhsKTsKLQllbGVtZW50LT5sZW5ndGggKz0gZWRkcC0+dGhsOwotCWVkZHAtPnRoX2luX2N0eCA9IHBhZ2UgKyBwYWdlX29mZnNldDsKLQljdHgtPm9mZnNldCArPSBlZGRwLT50aGw7Ci19Ci0KLXN0YXRpYyB2b2lkIHFldGhfZWRkcF9jb3B5X2RhdGFfdGNwKGNoYXIgKmRzdCwgc3RydWN0IHFldGhfZWRkcF9kYXRhICplZGRwLAotCQlpbnQgbGVuLCBfX3dzdW0gKmhjc3VtKQotewotCXN0cnVjdCBza2JfZnJhZ19zdHJ1Y3QgKmZyYWc7Ci0JaW50IGxlZnRfaW5fZnJhZzsKLQlpbnQgY29weV9sZW47Ci0JdTggKnNyYzsKLQotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDUsICJlZGRwY2R0YyIpOwotCWlmIChza2Jfc2hpbmZvKGVkZHAtPnNrYiktPm5yX2ZyYWdzID09IDApIHsKLQkJc2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YV9vZmZzZXQoZWRkcC0+c2tiLCBlZGRwLT5za2Jfb2Zmc2V0LAotCQkJCQkJIGRzdCwgbGVuKTsKLQkJKmhjc3VtID0gY3N1bV9wYXJ0aWFsKGVkZHAtPnNrYi0+ZGF0YSArIGVkZHAtPnNrYl9vZmZzZXQsIGxlbiwKLQkJCQkgICAgICAqaGNzdW0pOwotCQllZGRwLT5za2Jfb2Zmc2V0ICs9IGxlbjsKLQl9IGVsc2UgewotCQl3aGlsZSAobGVuID4gMCkgewotCQkJaWYgKGVkZHAtPmZyYWcgPCAwKSB7Ci0JCQkJLyogd2UncmUgaW4gc2tiLT5kYXRhICovCi0JCQkJbGVmdF9pbl9mcmFnID0gKGVkZHAtPnNrYi0+bGVuIC0KLQkJCQkJCWVkZHAtPnNrYi0+ZGF0YV9sZW4pCi0JCQkJCQktIGVkZHAtPnNrYl9vZmZzZXQ7Ci0JCQkJc3JjID0gZWRkcC0+c2tiLT5kYXRhICsgZWRkcC0+c2tiX29mZnNldDsKLQkJCX0gZWxzZSB7Ci0JCQkJZnJhZyA9ICZza2Jfc2hpbmZvKGVkZHAtPnNrYiktPmZyYWdzWwotCQkJCQllZGRwLT5mcmFnXTsKLQkJCQlsZWZ0X2luX2ZyYWcgPSBmcmFnLT5zaXplIC0gZWRkcC0+ZnJhZ19vZmZzZXQ7Ci0JCQkJc3JjID0gKHU4ICopKChwYWdlX3RvX3BmbihmcmFnLT5wYWdlKSA8PAotCQkJCQlQQUdFX1NISUZUKSArIGZyYWctPnBhZ2Vfb2Zmc2V0ICsKLQkJCQkJZWRkcC0+ZnJhZ19vZmZzZXQpOwotCQkJfQotCQkJaWYgKGxlZnRfaW5fZnJhZyA8PSAwKSB7Ci0JCQkJZWRkcC0+ZnJhZysrOwotCQkJCWVkZHAtPmZyYWdfb2Zmc2V0ID0gMDsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCWNvcHlfbGVuID0gbWluKGxlZnRfaW5fZnJhZywgbGVuKTsKLQkJCW1lbWNweShkc3QsIHNyYywgY29weV9sZW4pOwotCQkJKmhjc3VtID0gY3N1bV9wYXJ0aWFsKHNyYywgY29weV9sZW4sICpoY3N1bSk7Ci0JCQlkc3QgKz0gY29weV9sZW47Ci0JCQllZGRwLT5mcmFnX29mZnNldCArPSBjb3B5X2xlbjsKLQkJCWVkZHAtPnNrYl9vZmZzZXQgKz0gY29weV9sZW47Ci0JCQlsZW4gLT0gY29weV9sZW47Ci0JCX0KLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIHFldGhfZWRkcF9jcmVhdGVfc2VnbWVudF9kYXRhX3RjcChzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgKmN0eCwKLQkJc3RydWN0IHFldGhfZWRkcF9kYXRhICplZGRwLCBpbnQgZGF0YV9sZW4sIF9fd3N1bSBoY3N1bSkKLXsKLQl1OCAqcGFnZTsKLQlpbnQgcGFnZV9yZW1haW5kZXI7Ci0JaW50IHBhZ2Vfb2Zmc2V0OwotCXN0cnVjdCBxZXRoX2VkZHBfZWxlbWVudCAqZWxlbWVudDsKLQlpbnQgZmlyc3RfbGFwID0gMTsKLQotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDUsICJlZGRwY3NkdCIpOwotCXBhZ2UgPSBjdHgtPnBhZ2VzW2N0eC0+b2Zmc2V0ID4+IFBBR0VfU0hJRlRdOwotCXBhZ2Vfb2Zmc2V0ID0gY3R4LT5vZmZzZXQgJSBQQUdFX1NJWkU7Ci0JZWxlbWVudCA9ICZjdHgtPmVsZW1lbnRzW2N0eC0+bnVtX2VsZW1lbnRzXTsKLQl3aGlsZSAoZGF0YV9sZW4pIHsKLQkJcGFnZV9yZW1haW5kZXIgPSBQQUdFX1NJWkUgLSBwYWdlX29mZnNldDsKLQkJaWYgKHBhZ2VfcmVtYWluZGVyIDwgZGF0YV9sZW4pIHsKLQkJCXFldGhfZWRkcF9jb3B5X2RhdGFfdGNwKHBhZ2UgKyBwYWdlX29mZnNldCwgZWRkcCwKLQkJCQkJCXBhZ2VfcmVtYWluZGVyLCAmaGNzdW0pOwotCQkJZWxlbWVudC0+bGVuZ3RoICs9IHBhZ2VfcmVtYWluZGVyOwotCQkJaWYgKGZpcnN0X2xhcCkKLQkJCQllbGVtZW50LT5mbGFncyA9IFNCQUxfRkxBR1NfRklSU1RfRlJBRzsKLQkJCWVsc2UKLQkJCQllbGVtZW50LT5mbGFncyA9IFNCQUxfRkxBR1NfTUlERExFX0ZSQUc7Ci0JCQljdHgtPm51bV9lbGVtZW50cysrOwotCQkJZWxlbWVudCsrOwotCQkJZGF0YV9sZW4gLT0gcGFnZV9yZW1haW5kZXI7Ci0JCQljdHgtPm9mZnNldCArPSBwYWdlX3JlbWFpbmRlcjsKLQkJCXBhZ2UgPSBjdHgtPnBhZ2VzW2N0eC0+b2Zmc2V0ID4+IFBBR0VfU0hJRlRdOwotCQkJcGFnZV9vZmZzZXQgPSAwOwotCQkJZWxlbWVudC0+YWRkciA9IHBhZ2UgKyBwYWdlX29mZnNldDsKLQkJfSBlbHNlIHsKLQkJCXFldGhfZWRkcF9jb3B5X2RhdGFfdGNwKHBhZ2UgKyBwYWdlX29mZnNldCwgZWRkcCwKLQkJCQkJCWRhdGFfbGVuLCAmaGNzdW0pOwotCQkJZWxlbWVudC0+bGVuZ3RoICs9IGRhdGFfbGVuOwotCQkJaWYgKCFmaXJzdF9sYXApCi0JCQkJZWxlbWVudC0+ZmxhZ3MgPSBTQkFMX0ZMQUdTX0xBU1RfRlJBRzsKLQkJCWN0eC0+bnVtX2VsZW1lbnRzKys7Ci0JCQljdHgtPm9mZnNldCArPSBkYXRhX2xlbjsKLQkJCWRhdGFfbGVuID0gMDsKLQkJfQotCQlmaXJzdF9sYXAgPSAwOwotCX0KLQkoKHN0cnVjdCB0Y3BoZHIgKillZGRwLT50aF9pbl9jdHgpLT5jaGVjayA9IGNzdW1fZm9sZChoY3N1bSk7Ci19Ci0KLXN0YXRpYyBfX3dzdW0gcWV0aF9lZGRwX2NoZWNrX3RjcDRfaGRyKHN0cnVjdCBxZXRoX2VkZHBfZGF0YSAqZWRkcCwKLQkJaW50IGRhdGFfbGVuKQotewotCV9fd3N1bSBwaGNzdW07IC8qIHBzZXVkbyBoZWFkZXIgY2hlY2tzdW0gKi8KLQotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDUsICJlZGRwY2t0NCIpOwotCWVkZHAtPnRoLnRjcC5oLmNoZWNrID0gMDsKLQkvKiBjb21wdXRlIHBzZXVkbyBoZWFkZXIgY2hlY2tzdW0gKi8KLQlwaGNzdW0gPSBjc3VtX3RjcHVkcF9ub2ZvbGQoZWRkcC0+bmguaXA0Lmguc2FkZHIsIGVkZHAtPm5oLmlwNC5oLmRhZGRyLAotCQkJCSAgICBlZGRwLT50aGwgKyBkYXRhX2xlbiwgSVBQUk9UT19UQ1AsIDApOwotCS8qIGNvbXB1dGUgY2hlY2tzdW0gb2YgdGNwIGhlYWRlciAqLwotCXJldHVybiBjc3VtX3BhcnRpYWwoJmVkZHAtPnRoLCBlZGRwLT50aGwsIHBoY3N1bSk7Ci19Ci0KLXN0YXRpYyBfX3dzdW0gcWV0aF9lZGRwX2NoZWNrX3RjcDZfaGRyKHN0cnVjdCBxZXRoX2VkZHBfZGF0YSAqZWRkcCwKLQkJaW50IGRhdGFfbGVuKQotewotCV9fYmUzMiBwcm90bzsKLQlfX3dzdW0gcGhjc3VtOyAvKiBwc2V1ZG8gaGVhZGVyIGNoZWNrc3VtICovCi0KLQlRRVRIX0RCRl9URVhUKFRSQUNFLCA1LCAiZWRkcGNrdDYiKTsKLQllZGRwLT50aC50Y3AuaC5jaGVjayA9IDA7Ci0JLyogY29tcHV0ZSBwc2V1ZG8gaGVhZGVyIGNoZWNrc3VtICovCi0JcGhjc3VtID0gY3N1bV9wYXJ0aWFsKCZlZGRwLT5uaC5pcDYuaC5zYWRkciwKLQkJCSAgICAgIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpLCAwKTsKLQlwaGNzdW0gPSBjc3VtX3BhcnRpYWwoJmVkZHAtPm5oLmlwNi5oLmRhZGRyLAotCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkciksIHBoY3N1bSk7Ci0JcHJvdG8gPSBodG9ubChJUFBST1RPX1RDUCk7Ci0JcGhjc3VtID0gY3N1bV9wYXJ0aWFsKCZwcm90bywgc2l6ZW9mKHUzMiksIHBoY3N1bSk7Ci0JcmV0dXJuIHBoY3N1bTsKLX0KLQotc3RhdGljIHN0cnVjdCBxZXRoX2VkZHBfZGF0YSAqcWV0aF9lZGRwX2NyZWF0ZV9lZGRwX2RhdGEoc3RydWN0IHFldGhfaGRyICpxaCwKLQkJdTggKm5oLCB1OCBuaGwsIHU4ICp0aCwgdTggdGhsKQotewotCXN0cnVjdCBxZXRoX2VkZHBfZGF0YSAqZWRkcDsKLQotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDUsICJlZGRwY3JkYSIpOwotCWVkZHAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcWV0aF9lZGRwX2RhdGEpLCBHRlBfQVRPTUlDKTsKLQlpZiAoZWRkcCkgewotCQllZGRwLT5uaGwgPSBuaGw7Ci0JCWVkZHAtPnRobCA9IHRobDsKLQkJbWVtY3B5KCZlZGRwLT5xaCwgcWgsIHNpemVvZihzdHJ1Y3QgcWV0aF9oZHIpKTsKLQkJbWVtY3B5KCZlZGRwLT5uaCwgbmgsIG5obCk7Ci0JCW1lbWNweSgmZWRkcC0+dGgsIHRoLCB0aGwpOwotCQllZGRwLT5mcmFnID0gLTE7IC8qIGluaXRpYWxseSB3ZSdyZSBpbiBza2ItPmRhdGEgKi8KLQl9Ci0JcmV0dXJuIGVkZHA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fcWV0aF9lZGRwX2ZpbGxfY29udGV4dF90Y3Aoc3RydWN0IHFldGhfZWRkcF9jb250ZXh0ICpjdHgsCi0JCXN0cnVjdCBxZXRoX2VkZHBfZGF0YSAqZWRkcCkKLXsKLQlzdHJ1Y3QgdGNwaGRyICp0Y3BoOwotCWludCBkYXRhX2xlbjsKLQlfX3dzdW0gaGNzdW07Ci0KLQlRRVRIX0RCRl9URVhUKFRSQUNFLCA1LCAiZWRkcGZ0Y3AiKTsKLQllZGRwLT5za2Jfb2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCBxZXRoX2hkcikgKyBlZGRwLT5uaGwgKyBlZGRwLT50aGw7Ci0JaWYgKGVkZHAtPnFoLmhkci5sMi5pZCA9PSBRRVRIX0hFQURFUl9UWVBFX0xBWUVSMikgewotCQllZGRwLT5za2Jfb2Zmc2V0ICs9IHNpemVvZihzdHJ1Y3QgZXRoaGRyKTsKLQkJaWYgKGVkZHAtPm1hYy5oX3Byb3RvID09IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfODAyMVEpKQotCQkJZWRkcC0+c2tiX29mZnNldCArPSBWTEFOX0hMRU47Ci0JfQotCXRjcGggPSB0Y3BfaGRyKGVkZHAtPnNrYik7Ci0Jd2hpbGUgKGVkZHAtPnNrYl9vZmZzZXQgPCBlZGRwLT5za2ItPmxlbikgewotCQlkYXRhX2xlbiA9IG1pbigoaW50KXNrYl9zaGluZm8oZWRkcC0+c2tiKS0+Z3NvX3NpemUsCi0JCQkgICAgICAgKGludCkoZWRkcC0+c2tiLT5sZW4gLSBlZGRwLT5za2Jfb2Zmc2V0KSk7Ci0JCS8qIHByZXBhcmUgcWRpbyBoZHIgKi8KLQkJaWYgKGVkZHAtPnFoLmhkci5sMi5pZCA9PSBRRVRIX0hFQURFUl9UWVBFX0xBWUVSMikgewotCQkJZWRkcC0+cWguaGRyLmwyLnBrdF9sZW5ndGggPSBkYXRhX2xlbiArIEVUSF9ITEVOICsKLQkJCQkJCSAgICAgZWRkcC0+bmhsICsgZWRkcC0+dGhsOwotCQkJaWYgKGVkZHAtPm1hYy5oX3Byb3RvID09IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfODAyMVEpKQotCQkJCWVkZHAtPnFoLmhkci5sMi5wa3RfbGVuZ3RoICs9IFZMQU5fSExFTjsKLQkJfSBlbHNlCi0JCQllZGRwLT5xaC5oZHIubDMubGVuZ3RoID0gZGF0YV9sZW4gKyBlZGRwLT5uaGwgKwotCQkJCQkJIGVkZHAtPnRobDsKLQkJLyogcHJlcGFyZSBpcCBoZHIgKi8KLQkJaWYgKGVkZHAtPnNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApKSB7Ci0JCQllZGRwLT5uaC5pcDQuaC50b3RfbGVuID0gaHRvbnMoZGF0YV9sZW4gKyBlZGRwLT5uaGwgKwotCQkJCQkJIGVkZHAtPnRobCk7Ci0JCQllZGRwLT5uaC5pcDQuaC5jaGVjayA9IDA7Ci0JCQllZGRwLT5uaC5pcDQuaC5jaGVjayA9Ci0JCQkJaXBfZmFzdF9jc3VtKCh1OCAqKSZlZGRwLT5uaC5pcDQuaCwKLQkJCQkJCWVkZHAtPm5oLmlwNC5oLmlobCk7Ci0JCX0gZWxzZQotCQkJZWRkcC0+bmguaXA2LmgucGF5bG9hZF9sZW4gPSBodG9ucyhkYXRhX2xlbiArCi0JCQkJCQkJCWVkZHAtPnRobCk7Ci0JCS8qIHByZXBhcmUgdGNwIGhkciAqLwotCQlpZiAoZGF0YV9sZW4gPT0gKGVkZHAtPnNrYi0+bGVuIC0gZWRkcC0+c2tiX29mZnNldCkpIHsKLQkJCS8qIGxhc3Qgc2VnbWVudCAtPiBzZXQgRklOIGFuZCBQU0ggZmxhZ3MgKi8KLQkJCWVkZHAtPnRoLnRjcC5oLmZpbiA9IHRjcGgtPmZpbjsKLQkJCWVkZHAtPnRoLnRjcC5oLnBzaCA9IHRjcGgtPnBzaDsKLQkJfQotCQlpZiAoZWRkcC0+c2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpCi0JCQloY3N1bSA9IHFldGhfZWRkcF9jaGVja190Y3A0X2hkcihlZGRwLCBkYXRhX2xlbik7Ci0JCWVsc2UKLQkJCWhjc3VtID0gcWV0aF9lZGRwX2NoZWNrX3RjcDZfaGRyKGVkZHAsIGRhdGFfbGVuKTsKLQkJLyogZmlsbCB0aGUgbmV4dCBzZWdtZW50IGludG8gdGhlIGNvbnRleHQgKi8KLQkJcWV0aF9lZGRwX2NyZWF0ZV9zZWdtZW50X2hkcnMoY3R4LCBlZGRwLCBkYXRhX2xlbik7Ci0JCXFldGhfZWRkcF9jcmVhdGVfc2VnbWVudF9kYXRhX3RjcChjdHgsIGVkZHAsIGRhdGFfbGVuLCBoY3N1bSk7Ci0JCWlmIChlZGRwLT5za2Jfb2Zmc2V0ID49IGVkZHAtPnNrYi0+bGVuKQotCQkJYnJlYWs7Ci0JCS8qIHByZXBhcmUgaGVhZGVycyBmb3IgbmV4dCByb3VuZCAqLwotCQlpZiAoZWRkcC0+c2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpCi0JCQllZGRwLT5uaC5pcDQuaC5pZCA9IGh0b25zKG50b2hzKGVkZHAtPm5oLmlwNC5oLmlkKSArIDEpOwotCQllZGRwLT50aC50Y3AuaC5zZXEgPSBodG9ubChudG9obChlZGRwLT50aC50Y3AuaC5zZXEpICsKLQkJCWRhdGFfbGVuKTsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgcWV0aF9lZGRwX2ZpbGxfY29udGV4dF90Y3Aoc3RydWN0IHFldGhfZWRkcF9jb250ZXh0ICpjdHgsCi0JCXN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBxZXRoX2hkciAqcWhkcikKLXsKLQlzdHJ1Y3QgcWV0aF9lZGRwX2RhdGEgKmVkZHAgPSBOVUxMOwotCi0JUUVUSF9EQkZfVEVYVChUUkFDRSwgNSwgImVkZHBmaWN4Iik7Ci0JLyogY3JlYXRlIG91ciBzZWdtZW50YXRpb24gaGVhZGVycyBhbmQgY29weSBvcmlnaW5hbCBoZWFkZXJzICovCi0JaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApKQotCQllZGRwID0gcWV0aF9lZGRwX2NyZWF0ZV9lZGRwX2RhdGEocWhkciwKLQkJCQkJCSAgc2tiX25ldHdvcmtfaGVhZGVyKHNrYiksCi0JCQkJCQkgIGlwX2hkcmxlbihza2IpLAotCQkJCQkJICBza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpLAotCQkJCQkJICB0Y3BfaGRybGVuKHNrYikpOwotCWVsc2UKLQkJZWRkcCA9IHFldGhfZWRkcF9jcmVhdGVfZWRkcF9kYXRhKHFoZHIsCi0JCQkJCQkgIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpLAotCQkJCQkJICBzaXplb2Yoc3RydWN0IGlwdjZoZHIpLAotCQkJCQkJICBza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpLAotCQkJCQkJICB0Y3BfaGRybGVuKHNrYikpOwotCi0JaWYgKGVkZHAgPT0gTlVMTCkgewotCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAyLCAiZWRkcGZjbm0iKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCWlmIChxaGRyLT5oZHIubDIuaWQgPT0gUUVUSF9IRUFERVJfVFlQRV9MQVlFUjIpIHsKLQkJc2tiX3NldF9tYWNfaGVhZGVyKHNrYiwgc2l6ZW9mKHN0cnVjdCBxZXRoX2hkcikpOwotCQltZW1jcHkoJmVkZHAtPm1hYywgZXRoX2hkcihza2IpLCBFVEhfSExFTik7Ci0JCWlmIChlZGRwLT5tYWMuaF9wcm90byA9PSBfX2NvbnN0YW50X2h0b25zKEVUSF9QXzgwMjFRKSkgewotCQkJZWRkcC0+dmxhblswXSA9IHNrYi0+cHJvdG9jb2w7Ci0JCQllZGRwLT52bGFuWzFdID0gaHRvbnModmxhbl90eF90YWdfZ2V0KHNrYikpOwotCQl9Ci0JfQotCS8qIHRoZSBuZXh0IGZsYWdzIHdpbGwgb25seSBiZSBzZXQgb24gdGhlIGxhc3Qgc2VnbWVudCAqLwotCWVkZHAtPnRoLnRjcC5oLmZpbiA9IDA7Ci0JZWRkcC0+dGgudGNwLmgucHNoID0gMDsKLQllZGRwLT5za2IgPSBza2I7Ci0JLyogYmVnaW4gc2VnbWVudGF0aW9uIGFuZCBmaWxsIGNvbnRleHQgKi8KLQlfX3FldGhfZWRkcF9maWxsX2NvbnRleHRfdGNwKGN0eCwgZWRkcCk7Ci0Ja2ZyZWUoZWRkcCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHFldGhfZWRkcF9jYWxjX251bV9wYWdlcyhzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgKmN0eCwKLQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGhkcl9sZW4pCi17Ci0JaW50IHNrYnNfcGVyX3BhZ2U7Ci0KLQlRRVRIX0RCRl9URVhUKFRSQUNFLCA1LCAiZWRkcGNhbnAiKTsKLQkvKiBjYW4gd2UgcHV0IG11bHRpcGxlIHNrYnMgaW4gb25lIHBhZ2U/ICovCi0Jc2tic19wZXJfcGFnZSA9IFBBR0VfU0laRSAvIChza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplICsgaGRyX2xlbik7Ci0JaWYgKHNrYnNfcGVyX3BhZ2UgPiAxKSB7Ci0JCWN0eC0+bnVtX3BhZ2VzID0gKHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NlZ3MgKyAxKSAvCi0JCQkJIHNrYnNfcGVyX3BhZ2UgKyAxOwotCQljdHgtPmVsZW1lbnRzX3Blcl9za2IgPSAxOwotCX0gZWxzZSB7Ci0JCS8qIG5vIC0+IGhvdyBtYW55IGVsZW1lbnRzIHBlciBza2I/ICovCi0JCWN0eC0+ZWxlbWVudHNfcGVyX3NrYiA9IChza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplICsgaGRyX2xlbiArCi0JCQkJICAgICBQQUdFX1NJWkUpID4+IFBBR0VfU0hJRlQ7Ci0JCWN0eC0+bnVtX3BhZ2VzID0gY3R4LT5lbGVtZW50c19wZXJfc2tiICoKLQkJCQkgKHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NlZ3MgKyAxKTsKLQl9Ci0JY3R4LT5udW1fZWxlbWVudHMgPSBjdHgtPmVsZW1lbnRzX3Blcl9za2IgKgotCQkJICAgIChza2Jfc2hpbmZvKHNrYiktPmdzb19zZWdzICsgMSk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgKnFldGhfZWRkcF9jcmVhdGVfY29udGV4dF9nZW5lcmljKAotCQlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgaGRyX2xlbikKLXsKLQlzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgKmN0eCA9IE5VTEw7Ci0JdTggKmFkZHI7Ci0JaW50IGk7Ci0KLQlRRVRIX0RCRl9URVhUKFRSQUNFLCA1LCAiY3JlZGRwY2ciKTsKLQkvKiBjcmVhdGUgdGhlIGNvbnRleHQgYW5kIGFsbG9jYXRlIHBhZ2VzICovCi0JY3R4ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHFldGhfZWRkcF9jb250ZXh0KSwgR0ZQX0FUT01JQyk7Ci0JaWYgKGN0eCA9PSBOVUxMKSB7Ci0JCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDIsICJjZWRkcGNuMSIpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JY3R4LT50eXBlID0gUUVUSF9MQVJHRV9TRU5EX0VERFA7Ci0JcWV0aF9lZGRwX2NhbGNfbnVtX3BhZ2VzKGN0eCwgc2tiLCBoZHJfbGVuKTsKLQlpZiAoY3R4LT5lbGVtZW50c19wZXJfc2tiID4gUUVUSF9NQVhfQlVGRkVSX0VMRU1FTlRTKGNhcmQpKSB7Ci0JCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDIsICJjZWRkcGNpcyIpOwotCQlrZnJlZShjdHgpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JY3R4LT5wYWdlcyA9IGtjYWxsb2MoY3R4LT5udW1fcGFnZXMsIHNpemVvZih1OCAqKSwgR0ZQX0FUT01JQyk7Ci0JaWYgKGN0eC0+cGFnZXMgPT0gTlVMTCkgewotCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAyLCAiY2VkZHBjbjIiKTsKLQkJa2ZyZWUoY3R4KTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCWZvciAoaSA9IDA7IGkgPCBjdHgtPm51bV9wYWdlczsgKytpKSB7Ci0JCWFkZHIgPSAodTggKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0FUT01JQyk7Ci0JCWlmIChhZGRyID09IE5VTEwpIHsKLQkJCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDIsICJjZWRkcGNuMyIpOwotCQkJY3R4LT5udW1fcGFnZXMgPSBpOwotCQkJcWV0aF9lZGRwX2ZyZWVfY29udGV4dChjdHgpOwotCQkJcmV0dXJuIE5VTEw7Ci0JCX0KLQkJY3R4LT5wYWdlc1tpXSA9IGFkZHI7Ci0JfQotCWN0eC0+ZWxlbWVudHMgPSBrY2FsbG9jKGN0eC0+bnVtX2VsZW1lbnRzLAotCQkJCXNpemVvZihzdHJ1Y3QgcWV0aF9lZGRwX2VsZW1lbnQpLCBHRlBfQVRPTUlDKTsKLQlpZiAoY3R4LT5lbGVtZW50cyA9PSBOVUxMKSB7Ci0JCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDIsICJjZWRkcGNuNCIpOwotCQlxZXRoX2VkZHBfZnJlZV9jb250ZXh0KGN0eCk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQkvKiByZXNldCBudW1fZWxlbWVudHM7IHdpbGwgYmUgaW5jcmVtZW50ZWQgYWdhaW4gaW4gZmlsbF9idWZmZXIgdG8KLQkgKiByZWZsZWN0IG51bWJlciBvZiBhY3R1YWxseSB1c2VkIGVsZW1lbnRzICovCi0JY3R4LT5udW1fZWxlbWVudHMgPSAwOwotCXJldHVybiBjdHg7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgKnFldGhfZWRkcF9jcmVhdGVfY29udGV4dF90Y3AoCi0JCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIHN0cnVjdCBza19idWZmICpza2IsCi0JCXN0cnVjdCBxZXRoX2hkciAqcWhkcikKLXsKLQlzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgKmN0eCA9IE5VTEw7Ci0KLQlRRVRIX0RCRl9URVhUKFRSQUNFLCA1LCAiY3JlZGRwY3QiKTsKLQlpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpCi0JCWN0eCA9IHFldGhfZWRkcF9jcmVhdGVfY29udGV4dF9nZW5lcmljKGNhcmQsIHNrYiwKLQkJCQkJCShzaXplb2Yoc3RydWN0IHFldGhfaGRyKSArCi0JCQkJCQlpcF9oZHJsZW4oc2tiKSArCi0JCQkJCQl0Y3BfaGRybGVuKHNrYikpKTsKLQllbHNlIGlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQVjYpKQotCQljdHggPSBxZXRoX2VkZHBfY3JlYXRlX2NvbnRleHRfZ2VuZXJpYyhjYXJkLCBza2IsCi0JCQlzaXplb2Yoc3RydWN0IHFldGhfaGRyKSArIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikgKwotCQkJdGNwX2hkcmxlbihza2IpKTsKLQllbHNlCi0JCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDIsICJjZXRjcGludiIpOwotCi0JaWYgKGN0eCA9PSBOVUxMKSB7Ci0JCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDIsICJjcmVkZHBubCIpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JaWYgKHFldGhfZWRkcF9maWxsX2NvbnRleHRfdGNwKGN0eCwgc2tiLCBxaGRyKSkgewotCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAyLCAiY2VkZHB0ZmUiKTsKLQkJcWV0aF9lZGRwX2ZyZWVfY29udGV4dChjdHgpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JYXRvbWljX3NldCgmY3R4LT5yZWZjbnQsIDEpOwotCXJldHVybiBjdHg7Ci19Ci0KLXN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqcWV0aF9lZGRwX2NyZWF0ZV9jb250ZXh0KHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsCi0JCXN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBxZXRoX2hkciAqcWhkciwKLQkJdW5zaWduZWQgY2hhciBza19wcm90b2NvbCkKLXsKLQlRRVRIX0RCRl9URVhUKFRSQUNFLCA1LCAiY3JlZGRwYyIpOwotCXN3aXRjaCAoc2tfcHJvdG9jb2wpIHsKLQljYXNlIElQUFJPVE9fVENQOgotCQlyZXR1cm4gcWV0aF9lZGRwX2NyZWF0ZV9jb250ZXh0X3RjcChjYXJkLCBza2IsIHFoZHIpOwotCWRlZmF1bHQ6Ci0JCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDIsICJlZGRwaW52cCIpOwotCX0KLQlyZXR1cm4gTlVMTDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHFldGhfZWRkcF9jcmVhdGVfY29udGV4dCk7Ci0KLXZvaWQgcWV0aF90c29fZmlsbF9oZWFkZXIoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgc3RydWN0IHFldGhfaGRyICpxaGRyLAotCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXN0cnVjdCBxZXRoX2hkcl90c28gKmhkciA9IChzdHJ1Y3QgcWV0aF9oZHJfdHNvICopcWhkcjsKLQlzdHJ1Y3QgdGNwaGRyICp0Y3BoID0gdGNwX2hkcihza2IpOwotCXN0cnVjdCBpcGhkciAqaXBoID0gaXBfaGRyKHNrYik7Ci0Jc3RydWN0IGlwdjZoZHIgKmlwNmggPSBpcHY2X2hkcihza2IpOwotCi0JUUVUSF9EQkZfVEVYVChUUkFDRSwgNSwgInRzb2ZoZHIiKTsKLQotCS8qZml4IGhlYWRlciB0byBUU08gdmFsdWVzIC4uLiovCi0JaGRyLT5oZHIuaGRyLmwzLmlkID0gUUVUSF9IRUFERVJfVFlQRV9UU087Ci0JLypzZXQgdmFsdWVzIHdoaWNoIGFyZSBmaXggZm9yIHRoZSBmaXJzdCBhcHByb2FjaCAuLi4qLwotCWhkci0+ZXh0Lmhkcl90b3RfbGVuID0gKF9fdTE2KSBzaXplb2Yoc3RydWN0IHFldGhfaGRyX2V4dF90c28pOwotCWhkci0+ZXh0LmltYl9oZHJfbm8gID0gMTsKLQloZHItPmV4dC5oZHJfdHlwZSAgICA9IDE7Ci0JaGRyLT5leHQuaGRyX3ZlcnNpb24gPSAxOwotCWhkci0+ZXh0Lmhkcl9sZW4gICAgID0gMjg7Ci0JLyppbnNlcnQgbm9uLWZpeCB2YWx1ZXMgKi8KLQloZHItPmV4dC5tc3MgPSBza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplOwotCWhkci0+ZXh0LmRnX2hkcl9sZW4gPSAoX191MTYpKGlwaC0+aWhsKjQgKyB0Y3BoLT5kb2ZmKjQpOwotCWhkci0+ZXh0LnBheWxvYWRfbGVuID0gKF9fdTE2KShza2ItPmxlbiAtIGhkci0+ZXh0LmRnX2hkcl9sZW4gLQotCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IHFldGhfaGRyX3RzbykpOwotCXRjcGgtPmNoZWNrID0gMDsKLQlpZiAoc2tiLT5wcm90b2NvbCA9PSBFVEhfUF9JUFY2KSB7Ci0JCWlwNmgtPnBheWxvYWRfbGVuID0gMDsKLQkJdGNwaC0+Y2hlY2sgPSB+Y3N1bV9pcHY2X21hZ2ljKCZpcDZoLT5zYWRkciwgJmlwNmgtPmRhZGRyLAotCQkJCQkgICAgICAgMCwgSVBQUk9UT19UQ1AsIDApOwotCX0gZWxzZSB7Ci0JCS8qT1NBIHdhbnQgdXMgdG8gc2V0IHRoZXNlIHZhbHVlcyAuLi4qLwotCQl0Y3BoLT5jaGVjayA9IH5jc3VtX3RjcHVkcF9tYWdpYyhpcGgtPnNhZGRyLCBpcGgtPmRhZGRyLAotCQkJCQkgMCwgSVBQUk9UT19UQ1AsIDApOwotCQlpcGgtPnRvdF9sZW4gPSAwOwotCQlpcGgtPmNoZWNrID0gMDsKLQl9Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChxZXRoX3Rzb19maWxsX2hlYWRlcik7Ci0KLXZvaWQgcWV0aF90eF9jc3VtKHN0cnVjdCBza19idWZmICpza2IpCi17Ci0JaW50IHRsZW47Ci0JaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApKSB7Ci0JCXRsZW4gPSBudG9ocyhpcF9oZHIoc2tiKS0+dG90X2xlbikgLSAoaXBfaGRyKHNrYiktPmlobCA8PCAyKTsKLQkJc3dpdGNoIChpcF9oZHIoc2tiKS0+cHJvdG9jb2wpIHsKLQkJY2FzZSBJUFBST1RPX1RDUDoKLQkJCXRjcF9oZHIoc2tiKS0+Y2hlY2sgPSAwOwotCQkJdGNwX2hkcihza2IpLT5jaGVjayA9IGNzdW1fdGNwdWRwX21hZ2ljKAotCQkJCWlwX2hkcihza2IpLT5zYWRkciwgaXBfaGRyKHNrYiktPmRhZGRyLAotCQkJCXRsZW4sIGlwX2hkcihza2IpLT5wcm90b2NvbCwKLQkJCQlza2JfY2hlY2tzdW0oc2tiLCBza2JfdHJhbnNwb3J0X29mZnNldChza2IpLAotCQkJCQl0bGVuLCAwKSk7Ci0JCQlicmVhazsKLQkJY2FzZSBJUFBST1RPX1VEUDoKLQkJCXVkcF9oZHIoc2tiKS0+Y2hlY2sgPSAwOwotCQkJdWRwX2hkcihza2IpLT5jaGVjayA9IGNzdW1fdGNwdWRwX21hZ2ljKAotCQkJCWlwX2hkcihza2IpLT5zYWRkciwgaXBfaGRyKHNrYiktPmRhZGRyLAotCQkJCXRsZW4sIGlwX2hkcihza2IpLT5wcm90b2NvbCwKLQkJCQlza2JfY2hlY2tzdW0oc2tiLCBza2JfdHJhbnNwb3J0X29mZnNldChza2IpLAotCQkJCQl0bGVuLCAwKSk7Ci0JCQlicmVhazsKLQkJfQotCX0gZWxzZSBpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUFY2KSkgewotCQlzd2l0Y2ggKGlwdjZfaGRyKHNrYiktPm5leHRoZHIpIHsKLQkJY2FzZSBJUFBST1RPX1RDUDoKLQkJCXRjcF9oZHIoc2tiKS0+Y2hlY2sgPSAwOwotCQkJdGNwX2hkcihza2IpLT5jaGVjayA9IGNzdW1faXB2Nl9tYWdpYygKLQkJCQkmaXB2Nl9oZHIoc2tiKS0+c2FkZHIsICZpcHY2X2hkcihza2IpLT5kYWRkciwKLQkJCQlpcHY2X2hkcihza2IpLT5wYXlsb2FkX2xlbiwKLQkJCQlpcHY2X2hkcihza2IpLT5uZXh0aGRyLAotCQkJCXNrYl9jaGVja3N1bShza2IsIHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYiksCi0JCQkJCWlwdjZfaGRyKHNrYiktPnBheWxvYWRfbGVuLCAwKSk7Ci0JCQlicmVhazsKLQkJY2FzZSBJUFBST1RPX1VEUDoKLQkJCXVkcF9oZHIoc2tiKS0+Y2hlY2sgPSAwOwotCQkJdWRwX2hkcihza2IpLT5jaGVjayA9IGNzdW1faXB2Nl9tYWdpYygKLQkJCQkmaXB2Nl9oZHIoc2tiKS0+c2FkZHIsICZpcHY2X2hkcihza2IpLT5kYWRkciwKLQkJCQlpcHY2X2hkcihza2IpLT5wYXlsb2FkX2xlbiwKLQkJCQlpcHY2X2hkcihza2IpLT5uZXh0aGRyLAotCQkJCXNrYl9jaGVja3N1bShza2IsIHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYiksCi0JCQkJCWlwdjZfaGRyKHNrYiktPnBheWxvYWRfbGVuLCAwKSk7Ci0JCQlicmVhazsKLQkJfQotCX0KLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHFldGhfdHhfY3N1bSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9vZmZsLmggYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9vZmZsLmgKaW5kZXggODZiZjdkZi4uZTY5ZGUyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfb2ZmbC5oCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX29mZmwuaApAQCAtMSw3NiArMCwwIEBACi0vKgotICogIGRyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX29mZmwuaAotICoKLSAqICAgIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwNwotICogICAgQXV0aG9yKHMpOiBUaG9tYXMgU3BhdHppZXIgPHRzcGF0QGRlLmlibS5jb20+LAotICoJCSBGcmFuayBCbGFzY2hrYSA8ZnJhbmsuYmxhc2Noa2FAZGUuaWJtLmNvbT4KLSAqLwotCi0jaWZuZGVmIF9fUUVUSF9DT1JFX09GRkxfSF9fCi0jZGVmaW5lIF9fUUVUSF9DT1JFX09GRkxfSF9fCi0KLXN0cnVjdCBxZXRoX2VkZHBfZWxlbWVudCB7Ci0JdTMyIGZsYWdzOwotCXUzMiBsZW5ndGg7Ci0Jdm9pZCAqYWRkcjsKLX07Ci0KLXN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCB7Ci0JYXRvbWljX3QgcmVmY250OwotCWVudW0gcWV0aF9sYXJnZV9zZW5kX3R5cGVzIHR5cGU7Ci0JaW50IG51bV9wYWdlczsJCQkgICAgLyogIyBvZiBhbGxvY2F0ZWQgcGFnZXMgKi8KLQl1OCAqKnBhZ2VzOwkJCSAgICAvKiBwb2ludGVycyB0byBwYWdlcyAqLwotCWludCBvZmZzZXQ7CQkJICAgIC8qIG9mZnNldCBpbiBjdHggZHVyaW5nIGNyZWF0aW9uICovCi0JaW50IG51bV9lbGVtZW50czsJCSAgICAvKiAjIG9mIHJlcXVpcmVkICdTQkFMRXMnICovCi0Jc3RydWN0IHFldGhfZWRkcF9lbGVtZW50ICplbGVtZW50czsgLyogYXJyYXkgb2YgJ1NCQUxFcycgKi8KLQlpbnQgZWxlbWVudHNfcGVyX3NrYjsJCSAgICAvKiAjIG9mICdTQkFMRXMnIHBlciBza2IgKiovCi19OwotCi1zdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHRfcmVmZXJlbmNlIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0Jc3RydWN0IHFldGhfZWRkcF9jb250ZXh0ICpjdHg7Ci19OwotCi1zdHJ1Y3QgcWV0aF9lZGRwX2RhdGEgewotCXN0cnVjdCBxZXRoX2hkciBxaDsKLQlzdHJ1Y3QgZXRoaGRyIG1hYzsKLQlfX2JlMTYgdmxhblsyXTsKLQl1bmlvbiB7Ci0JCXN0cnVjdCB7Ci0JCQlzdHJ1Y3QgaXBoZHIgaDsKLQkJCXU4IG9wdGlvbnNbNDBdOwotCQl9IGlwNDsKLQkJc3RydWN0IHsKLQkJCXN0cnVjdCBpcHY2aGRyIGg7Ci0JCX0gaXA2OwotCX0gbmg7Ci0JdTggbmhsOwotCXZvaWQgKm5oX2luX2N0eDsJLyogYWRkcmVzcyBvZiBuaCB3aXRoaW4gdGhlIGN0eCAqLwotCXVuaW9uIHsKLQkJc3RydWN0IHsKLQkJCXN0cnVjdCB0Y3BoZHIgaDsKLQkJCXU4IG9wdGlvbnNbNDBdOwotCQl9IHRjcDsKLQl9IHRoOwotCXU4IHRobDsKLQl2b2lkICp0aF9pbl9jdHg7CS8qIGFkZHJlc3Mgb2YgdGggd2l0aGluIHRoZSBjdHggKi8KLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCWludCBza2Jfb2Zmc2V0OwotCWludCBmcmFnOwotCWludCBmcmFnX29mZnNldDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1leHRlcm4gc3RydWN0IHFldGhfZWRkcF9jb250ZXh0ICpxZXRoX2VkZHBfY3JlYXRlX2NvbnRleHQoc3RydWN0IHFldGhfY2FyZCAqLAotCQkgc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IHFldGhfaGRyICosIHVuc2lnbmVkIGNoYXIpOwotZXh0ZXJuIHZvaWQgcWV0aF9lZGRwX3B1dF9jb250ZXh0KHN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqKTsKLWV4dGVybiBpbnQgcWV0aF9lZGRwX2ZpbGxfYnVmZmVyKHN0cnVjdCBxZXRoX3FkaW9fb3V0X3EgKiwKLQkJc3RydWN0IHFldGhfZWRkcF9jb250ZXh0ICosIGludCk7Ci1leHRlcm4gdm9pZCBxZXRoX2VkZHBfYnVmX3JlbGVhc2VfY29udGV4dHMoc3RydWN0IHFldGhfcWRpb19vdXRfYnVmZmVyICopOwotZXh0ZXJuIGludCBxZXRoX2VkZHBfY2hlY2tfYnVmZmVyc19mb3JfY29udGV4dChzdHJ1Y3QgcWV0aF9xZGlvX291dF9xICosCi0JCXN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqKTsKLQotdm9pZCBxZXRoX3Rzb19maWxsX2hlYWRlcihzdHJ1Y3QgcWV0aF9jYXJkICosIHN0cnVjdCBxZXRoX2hkciAqLAotCQlzdHJ1Y3Qgc2tfYnVmZiAqKTsKLXZvaWQgcWV0aF90eF9jc3VtKHN0cnVjdCBza19idWZmICpza2IpOwotCi0jZW5kaWYgLyogX19RRVRIX0NPUkVfRUREUF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX3N5cy5jIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfc3lzLmMKaW5kZXggYzI2ZTg0Mi4uNTY4NDY1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfc3lzLmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfc3lzLmMKQEAgLTQyNyw4ICs0MjcsNiBAQAogCXN3aXRjaCAoY2FyZC0+b3B0aW9ucy5sYXJnZV9zZW5kKSB7CiAJY2FzZSBRRVRIX0xBUkdFX1NFTkRfTk86CiAJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCAibm8iKTsKLQljYXNlIFFFVEhfTEFSR0VfU0VORF9FRERQOgotCQlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgIkVERFAiKTsKIAljYXNlIFFFVEhfTEFSR0VfU0VORF9UU086CiAJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCAiVFNPIik7CiAJZGVmYXVsdDoKQEAgLTQ0OSw4ICs0NDcsNiBAQAogCXRtcCA9IHN0cnNlcCgoY2hhciAqKikgJmJ1ZiwgIlxuIik7CiAJaWYgKCFzdHJjbXAodG1wLCAibm8iKSkgewogCQl0eXBlID0gUUVUSF9MQVJHRV9TRU5EX05POwotCX0gZWxzZSBpZiAoIXN0cmNtcCh0bXAsICJFRERQIikpIHsKLQkJdHlwZSA9IFFFVEhfTEFSR0VfU0VORF9FRERQOwogCX0gZWxzZSBpZiAoIXN0cmNtcCh0bXAsICJUU08iKSkgewogCQl0eXBlID0gUUVUSF9MQVJHRV9TRU5EX1RTTzsKIAl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wyX21haW4uYyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sMl9tYWluLmMKaW5kZXggMDdhYjhhNS4uMTcyMDMxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wyX21haW4uYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDJfbWFpbi5jCkBAIC0yMSw3ICsyMSw2IEBACiAjaW5jbHVkZSA8bGludXgvaXAuaD4KIAogI2luY2x1ZGUgInFldGhfY29yZS5oIgotI2luY2x1ZGUgInFldGhfY29yZV9vZmZsLmgiCiAKIHN0YXRpYyBpbnQgcWV0aF9sMl9zZXRfb2ZmbGluZShzdHJ1Y3QgY2N3Z3JvdXBfZGV2aWNlICopOwogc3RhdGljIGludCBxZXRoX2wyX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKik7CkBAIC0zMjgsNiArMzI3LDEwIEBACiAJc3RydWN0IHFldGhfdmxhbl92aWQgKmlkOwogCiAJUUVUSF9EQkZfVEVYVF8oVFJBQ0UsIDQsICJhaWQ6JWQiLCB2aWQpOworCWlmIChxZXRoX3dhaXRfZm9yX3RocmVhZHMoY2FyZCwgUUVUSF9SRUNPVkVSX1RIUkVBRCkpIHsKKwkJUUVUSF9EQkZfVEVYVChUUkFDRSwgMywgImFpZFJFQyIpOworCQlyZXR1cm47CisJfQogCWlkID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHFldGhfdmxhbl92aWQpLCBHRlBfQVRPTUlDKTsKIAlpZiAoaWQpIHsKIAkJaWQtPnZpZCA9IHZpZDsKQEAgLTM0NCw2ICszNDcsMTAgQEAKIAlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2LT5tbF9wcml2OwogCiAJUUVUSF9EQkZfVEVYVF8oVFJBQ0UsIDQsICJraWQ6JWQiLCB2aWQpOworCWlmIChxZXRoX3dhaXRfZm9yX3RocmVhZHMoY2FyZCwgUUVUSF9SRUNPVkVSX1RIUkVBRCkpIHsKKwkJUUVUSF9EQkZfVEVYVChUUkFDRSwgMywgImtpZFJFQyIpOworCQlyZXR1cm47CisJfQogCXNwaW5fbG9ja19iaCgmY2FyZC0+dmxhbmxvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoaWQsICZjYXJkLT52aWRfbGlzdCwgbGlzdCkgewogCQlpZiAoaWQtPnZpZCA9PSB2aWQpIHsKQEAgLTM3OSw3ICszODYsOCBAQAogCQkJZGV2X2Nsb3NlKGNhcmQtPmRldik7CiAJCQlydG5sX3VubG9jaygpOwogCQl9Ci0JCWlmICghY2FyZC0+dXNlX2hhcmRfc3RvcCkgeworCQlpZiAoIWNhcmQtPnVzZV9oYXJkX3N0b3AgfHwKKwkJCXJlY292ZXJ5X21vZGUpIHsKIAkJCV9fdTggKm1hYyA9ICZjYXJkLT5kZXYtPmRldl9hZGRyWzBdOwogCQkJcmMgPSBxZXRoX2wyX3NlbmRfZGVsbWFjKGNhcmQsIG1hYyk7CiAJCQlRRVRIX0RCRl9URVhUXyhTRVRVUCwgMiwgIkxlcnIlZCIsIHJjKTsKQEAgLTM4OCw3ICszOTYsOCBAQAogCX0KIAlpZiAoY2FyZC0+c3RhdGUgPT0gQ0FSRF9TVEFURV9TT0ZUU0VUVVApIHsKIAkJcWV0aF9sMl9wcm9jZXNzX3ZsYW5zKGNhcmQsIDEpOwotCQlpZiAoIWNhcmQtPnVzZV9oYXJkX3N0b3ApCisJCWlmICghY2FyZC0+dXNlX2hhcmRfc3RvcCB8fAorCQkJcmVjb3ZlcnlfbW9kZSkKIAkJCXFldGhfbDJfZGVsX2FsbF9tYyhjYXJkKTsKIAkJcWV0aF9jbGVhcl9pcGFjbWRfbGlzdChjYXJkKTsKIAkJY2FyZC0+c3RhdGUgPSBDQVJEX1NUQVRFX0hBUkRTRVRVUDsKQEAgLTU5Myw2ICs2MDIsMTAgQEAKIAl9CiAJUUVUSF9EQkZfVEVYVF8oVFJBQ0UsIDMsICIlcyIsIENBUkRfQlVTX0lEKGNhcmQpKTsKIAlRRVRIX0RCRl9IRVgoVFJBQ0UsIDMsIGFkZHItPnNhX2RhdGEsIE9TQV9BRERSX0xFTik7CisJaWYgKHFldGhfd2FpdF9mb3JfdGhyZWFkcyhjYXJkLCBRRVRIX1JFQ09WRVJfVEhSRUFEKSkgeworCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAzLCAic2V0bWNSRUMiKTsKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwl9CiAJcmMgPSBxZXRoX2wyX3NlbmRfZGVsbWFjKGNhcmQsICZjYXJkLT5kZXYtPmRldl9hZGRyWzBdKTsKIAlpZiAoIXJjKQogCQlyYyA9IHFldGhfbDJfc2VuZF9zZXRtYWMoY2FyZCwgYWRkci0+c2FfZGF0YSk7CkBAIC02MDgsNiArNjIxLDkgQEAKIAkJcmV0dXJuIDsKIAogCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDMsICJzZXRtdWx0aSIpOworCWlmIChxZXRoX3RocmVhZHNfcnVubmluZyhjYXJkLCBRRVRIX1JFQ09WRVJfVEhSRUFEKSAmJgorCSAgICAoY2FyZC0+c3RhdGUgIT0gQ0FSRF9TVEFURV9VUCkpCisJCXJldHVybjsKIAlxZXRoX2wyX2RlbF9hbGxfbWMoY2FyZCk7CiAJc3Bpbl9sb2NrX2JoKCZjYXJkLT5tY2xvY2spOwogCWZvciAoZG0gPSBkZXYtPm1jX2xpc3Q7IGRtOyBkbSA9IGRtLT5uZXh0KQpAQCAtNjM0LDggKzY1MCw2IEBACiAJc3RydWN0IHFldGhfcWRpb19vdXRfcSAqcXVldWUgPSBjYXJkLT5xZGlvLm91dF9xcwogCQlbcWV0aF9nZXRfcHJpb3JpdHlfcXVldWUoY2FyZCwgc2tiLCBpcHYsIGNhc3RfdHlwZSldOwogCWludCB0eF9ieXRlcyA9IHNrYi0+bGVuOwotCWVudW0gcWV0aF9sYXJnZV9zZW5kX3R5cGVzIGxhcmdlX3NlbmQgPSBRRVRIX0xBUkdFX1NFTkRfTk87Ci0Jc3RydWN0IHFldGhfZWRkcF9jb250ZXh0ICpjdHggPSBOVUxMOwogCWludCBkYXRhX29mZnNldCA9IC0xOwogCWludCBlbGVtZW50c19uZWVkZWQgPSAwOwogCWludCBoZF9sZW4gPSAwOwpAQCAtNjU1LDE0ICs2NjksMTAgQEAKIAl9CiAJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCi0JaWYgKHNrYl9pc19nc28oc2tiKSkKLQkJbGFyZ2Vfc2VuZCA9IFFFVEhfTEFSR0VfU0VORF9FRERQOwotCiAJaWYgKGNhcmQtPmluZm8udHlwZSA9PSBRRVRIX0NBUkRfVFlQRV9PU04pCiAJCWhkciA9IChzdHJ1Y3QgcWV0aF9oZHIgKilza2ItPmRhdGE7CiAJZWxzZSB7Ci0JCWlmICgoY2FyZC0+aW5mby50eXBlID09IFFFVEhfQ0FSRF9UWVBFX0lRRCkgJiYgKCFsYXJnZV9zZW5kKSAmJgotCQkgICAgKHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgPT0gMCkpIHsKKwkJaWYgKGNhcmQtPmluZm8udHlwZSA9PSBRRVRIX0NBUkRfVFlQRV9JUUQpIHsKIAkJCW5ld19za2IgPSBza2I7CiAJCQlkYXRhX29mZnNldCA9IEVUSF9ITEVOOwogCQkJaGRfbGVuID0gRVRIX0hMRU47CkBAIC02ODksNTkgKzY5OSwyNiBAQAogCQl9CiAJfQogCi0JaWYgKGxhcmdlX3NlbmQgPT0gUUVUSF9MQVJHRV9TRU5EX0VERFApIHsKLQkJY3R4ID0gcWV0aF9lZGRwX2NyZWF0ZV9jb250ZXh0KGNhcmQsIG5ld19za2IsIGhkciwKLQkJCQkJCXNrYi0+c2stPnNrX3Byb3RvY29sKTsKLQkJaWYgKGN0eCA9PSBOVUxMKSB7Ci0JCQlRRVRIX0RCRl9NRVNTQUdFKDIsICJjb3VsZCBub3QgY3JlYXRlIGVkZHAgY29udGV4dFxuIik7Ci0JCQlnb3RvIHR4X2Ryb3A7Ci0JCX0KLQl9IGVsc2UgewotCQllbGVtZW50cyA9IHFldGhfZ2V0X2VsZW1lbnRzX25vKGNhcmQsICh2b2lkICopaGRyLCBuZXdfc2tiLAorCWVsZW1lbnRzID0gcWV0aF9nZXRfZWxlbWVudHNfbm8oY2FyZCwgKHZvaWQgKiloZHIsIG5ld19za2IsCiAJCQkJCQllbGVtZW50c19uZWVkZWQpOwotCQlpZiAoIWVsZW1lbnRzKSB7Ci0JCQlpZiAoZGF0YV9vZmZzZXQgPj0gMCkKLQkJCQlrbWVtX2NhY2hlX2ZyZWUocWV0aF9jb3JlX2hlYWRlcl9jYWNoZSwgaGRyKTsKLQkJCWdvdG8gdHhfZHJvcDsKLQkJfQorCWlmICghZWxlbWVudHMpIHsKKwkJaWYgKGRhdGFfb2Zmc2V0ID49IDApCisJCQlrbWVtX2NhY2hlX2ZyZWUocWV0aF9jb3JlX2hlYWRlcl9jYWNoZSwgaGRyKTsKKwkJZ290byB0eF9kcm9wOwogCX0KIAotCWlmICgobGFyZ2Vfc2VuZCA9PSBRRVRIX0xBUkdFX1NFTkRfTk8pICYmCi0JICAgIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSkKLQkJcWV0aF90eF9jc3VtKG5ld19za2IpOwotCiAJaWYgKGNhcmQtPmluZm8udHlwZSAhPSBRRVRIX0NBUkRfVFlQRV9JUUQpCiAJCXJjID0gcWV0aF9kb19zZW5kX3BhY2tldChjYXJkLCBxdWV1ZSwgbmV3X3NrYiwgaGRyLAotCQkJCQkgZWxlbWVudHMsIGN0eCk7CisJCQkJCSBlbGVtZW50cyk7CiAJZWxzZQogCQlyYyA9IHFldGhfZG9fc2VuZF9wYWNrZXRfZmFzdChjYXJkLCBxdWV1ZSwgbmV3X3NrYiwgaGRyLAotCQkJCQllbGVtZW50cywgY3R4LCBkYXRhX29mZnNldCwgaGRfbGVuKTsKKwkJCQkJZWxlbWVudHMsIGRhdGFfb2Zmc2V0LCBoZF9sZW4pOwogCWlmICghcmMpIHsKIAkJY2FyZC0+c3RhdHMudHhfcGFja2V0cysrOwogCQljYXJkLT5zdGF0cy50eF9ieXRlcyArPSB0eF9ieXRlczsKIAkJaWYgKG5ld19za2IgIT0gc2tiKQogCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQkJaWYgKGNhcmQtPm9wdGlvbnMucGVyZm9ybWFuY2Vfc3RhdHMpIHsKLQkJCWlmIChsYXJnZV9zZW5kICE9IFFFVEhfTEFSR0VfU0VORF9OTykgewotCQkJCWNhcmQtPnBlcmZfc3RhdHMubGFyZ2Vfc2VuZF9ieXRlcyArPSB0eF9ieXRlczsKLQkJCQljYXJkLT5wZXJmX3N0YXRzLmxhcmdlX3NlbmRfY250Kys7Ci0JCQl9Ci0JCQlpZiAoc2tiX3NoaW5mbyhuZXdfc2tiKS0+bnJfZnJhZ3MgPiAwKSB7Ci0JCQkJY2FyZC0+cGVyZl9zdGF0cy5zZ19za2JzX3NlbnQrKzsKLQkJCQkvKiBucl9mcmFncyArIHNrYi0+ZGF0YSAqLwotCQkJCWNhcmQtPnBlcmZfc3RhdHMuc2dfZnJhZ3Nfc2VudCArPQotCQkJCQlza2Jfc2hpbmZvKG5ld19za2IpLT5ucl9mcmFncyArIDE7Ci0JCQl9Ci0JCX0KLQotCQlpZiAoY3R4ICE9IE5VTEwpIHsKLQkJCXFldGhfZWRkcF9wdXRfY29udGV4dChjdHgpOwotCQkJZGV2X2tmcmVlX3NrYl9hbnkobmV3X3NrYik7Ci0JCX0KIAl9IGVsc2UgewotCQlpZiAoY3R4ICE9IE5VTEwpCi0JCQlxZXRoX2VkZHBfcHV0X2NvbnRleHQoY3R4KTsKLQogCQlpZiAoZGF0YV9vZmZzZXQgPj0gMCkKIAkJCWttZW1fY2FjaGVfZnJlZShxZXRoX2NvcmVfaGVhZGVyX2NhY2hlLCBoZHIpOwogCkBAIC04NzgsMzAgKzg1NSw4IEBACiAJcmV0dXJuOwogfQogCi1zdGF0aWMgaW50IHFldGhfbDJfZXRodG9vbF9zZXRfdHNvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQotewotCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXYtPm1sX3ByaXY7Ci0KLQlpZiAoZGF0YSkgewotCQlpZiAoY2FyZC0+b3B0aW9ucy5sYXJnZV9zZW5kID09IFFFVEhfTEFSR0VfU0VORF9OTykgewotCQkJY2FyZC0+b3B0aW9ucy5sYXJnZV9zZW5kID0gUUVUSF9MQVJHRV9TRU5EX0VERFA7Ci0JCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPOwotCQl9Ci0JfSBlbHNlIHsKLQkJZGV2LT5mZWF0dXJlcyAmPSB+TkVUSUZfRl9UU087Ci0JCWNhcmQtPm9wdGlvbnMubGFyZ2Vfc2VuZCA9IFFFVEhfTEFSR0VfU0VORF9OTzsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgcWV0aF9sMl9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X2xpbmsgPSBldGh0b29sX29wX2dldF9saW5rLAotCS5nZXRfdHhfY3N1bSA9IGV0aHRvb2xfb3BfZ2V0X3R4X2NzdW0sCi0JLnNldF90eF9jc3VtID0gZXRodG9vbF9vcF9zZXRfdHhfaHdfY3N1bSwKLQkuZ2V0X3NnID0gZXRodG9vbF9vcF9nZXRfc2csCi0JLnNldF9zZyA9IGV0aHRvb2xfb3Bfc2V0X3NnLAotCS5nZXRfdHNvID0gZXRodG9vbF9vcF9nZXRfdHNvLAotCS5zZXRfdHNvID0gcWV0aF9sMl9ldGh0b29sX3NldF90c28sCiAJLmdldF9zdHJpbmdzID0gcWV0aF9jb3JlX2dldF9zdHJpbmdzLAogCS5nZXRfZXRodG9vbF9zdGF0cyA9IHFldGhfY29yZV9nZXRfZXRodG9vbF9zdGF0cywKIAkuZ2V0X3N0YXRzX2NvdW50ID0gcWV0aF9jb3JlX2dldF9zdGF0c19jb3VudCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sM19tYWluLmMgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDNfbWFpbi5jCmluZGV4IDNkMDQ5MjAuLjBiYTM4MTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sM19tYWluLmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wzX21haW4uYwpAQCAtMTksMTUgKzE5LDE1IEBACiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9taWkuaD4KICNpbmNsdWRlIDxsaW51eC9pcC5oPgotI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lwdjYuaD4KICNpbmNsdWRlIDxsaW51eC9pbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaWdtcC5oPgogCiAjaW5jbHVkZSA8bmV0L2lwLmg+CiAjaW5jbHVkZSA8bmV0L2FycC5oPgorI2luY2x1ZGUgPG5ldC9pcDZfY2hlY2tzdW0uaD4KIAogI2luY2x1ZGUgInFldGhfbDMuaCIKLSNpbmNsdWRlICJxZXRoX2NvcmVfb2ZmbC5oIgogCiBzdGF0aWMgaW50IHFldGhfbDNfc2V0X29mZmxpbmUoc3RydWN0IGNjd2dyb3VwX2RldmljZSAqKTsKIHN0YXRpYyBpbnQgcWV0aF9sM19yZWNvdmVyKHZvaWQgKik7CkBAIC0xMDM4LDcgKzEwMzgsNyBAQAogCXJjID0gcWV0aF9xdWVyeV9zZXRhZGFwdGVycGFybXMoY2FyZCk7CiAJaWYgKHJjKSB7CiAJCVFFVEhfREJGX01FU1NBR0UoMiwgIiVzIGNvdWxkbid0IHNldCBhZGFwdGVyIHBhcmFtZXRlcnM6ICIKLQkJCSIweCV4XG4iLCBjYXJkLT5nZGV2LT5kZXYuYnVzX2lkLCByYyk7CisJCQkiMHgleFxuIiwgZGV2X25hbWUoJmNhcmQtPmdkZXYtPmRldiksIHJjKTsKIAkJcmV0dXJuIHJjOwogCX0KIAlpZiAocWV0aF9hZHBfc3VwcG9ydGVkKGNhcmQsIElQQV9TRVRBRFBfQUxURVJfTUFDX0FERFJFU1MpKSB7CkBAIC0xODM4LDYgKzE4MzgsMTAgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJUUVUSF9EQkZfVEVYVF8oVFJBQ0UsIDQsICJraWQ6JWQiLCB2aWQpOworCWlmIChxZXRoX3dhaXRfZm9yX3RocmVhZHMoY2FyZCwgUUVUSF9SRUNPVkVSX1RIUkVBRCkpIHsKKwkJUUVUSF9EQkZfVEVYVChUUkFDRSwgMywgImtpZFJFQyIpOworCQlyZXR1cm47CisJfQogCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT52bGFubG9jaywgZmxhZ3MpOwogCS8qIHVucmVnaXN0ZXIgSVAgYWRkcmVzc2VzIG9mIHZsYW4gZGV2aWNlICovCiAJcWV0aF9sM19mcmVlX3ZsYW5fYWRkcmVzc2VzKGNhcmQsIHZpZCk7CkBAIC0yMTAxLDYgKzIxMDUsOSBAQAogCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXYtPm1sX3ByaXY7CiAKIAlRRVRIX0RCRl9URVhUKFRSQUNFLCAzLCAic2V0bXVsdGkiKTsKKwlpZiAocWV0aF90aHJlYWRzX3J1bm5pbmcoY2FyZCwgUUVUSF9SRUNPVkVSX1RIUkVBRCkgJiYKKwkgICAgKGNhcmQtPnN0YXRlICE9IENBUkRfU1RBVEVfVVApKQorCQlyZXR1cm47CiAJcWV0aF9sM19kZWxldGVfbWNfYWRkcmVzc2VzKGNhcmQpOwogCXFldGhfbDNfYWRkX211bHRpY2FzdF9pcHY0KGNhcmQpOwogI2lmZGVmIENPTkZJR19RRVRIX0lQVjYKQEAgLTI1NzcsMTIgKzI1ODQsNjMgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIHFldGhfdHNvX2ZpbGxfaGVhZGVyKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsCisJCXN0cnVjdCBxZXRoX2hkciAqcWhkciwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgcWV0aF9oZHJfdHNvICpoZHIgPSAoc3RydWN0IHFldGhfaGRyX3RzbyAqKXFoZHI7CisJc3RydWN0IHRjcGhkciAqdGNwaCA9IHRjcF9oZHIoc2tiKTsKKwlzdHJ1Y3QgaXBoZHIgKmlwaCA9IGlwX2hkcihza2IpOworCXN0cnVjdCBpcHY2aGRyICppcDZoID0gaXB2Nl9oZHIoc2tiKTsKKworCS8qZml4IGhlYWRlciB0byBUU08gdmFsdWVzIC4uLiovCisJaGRyLT5oZHIuaGRyLmwzLmlkID0gUUVUSF9IRUFERVJfVFlQRV9UU087CisJLypzZXQgdmFsdWVzIHdoaWNoIGFyZSBmaXggZm9yIHRoZSBmaXJzdCBhcHByb2FjaCAuLi4qLworCWhkci0+ZXh0Lmhkcl90b3RfbGVuID0gKF9fdTE2KSBzaXplb2Yoc3RydWN0IHFldGhfaGRyX2V4dF90c28pOworCWhkci0+ZXh0LmltYl9oZHJfbm8gID0gMTsKKwloZHItPmV4dC5oZHJfdHlwZSAgICA9IDE7CisJaGRyLT5leHQuaGRyX3ZlcnNpb24gPSAxOworCWhkci0+ZXh0Lmhkcl9sZW4gICAgID0gMjg7CisJLyppbnNlcnQgbm9uLWZpeCB2YWx1ZXMgKi8KKwloZHItPmV4dC5tc3MgPSBza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplOworCWhkci0+ZXh0LmRnX2hkcl9sZW4gPSAoX191MTYpKGlwaC0+aWhsKjQgKyB0Y3BoLT5kb2ZmKjQpOworCWhkci0+ZXh0LnBheWxvYWRfbGVuID0gKF9fdTE2KShza2ItPmxlbiAtIGhkci0+ZXh0LmRnX2hkcl9sZW4gLQorCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IHFldGhfaGRyX3RzbykpOworCXRjcGgtPmNoZWNrID0gMDsKKwlpZiAoc2tiLT5wcm90b2NvbCA9PSBFVEhfUF9JUFY2KSB7CisJCWlwNmgtPnBheWxvYWRfbGVuID0gMDsKKwkJdGNwaC0+Y2hlY2sgPSB+Y3N1bV9pcHY2X21hZ2ljKCZpcDZoLT5zYWRkciwgJmlwNmgtPmRhZGRyLAorCQkJCQkgICAgICAgMCwgSVBQUk9UT19UQ1AsIDApOworCX0gZWxzZSB7CisJCS8qT1NBIHdhbnQgdXMgdG8gc2V0IHRoZXNlIHZhbHVlcyAuLi4qLworCQl0Y3BoLT5jaGVjayA9IH5jc3VtX3RjcHVkcF9tYWdpYyhpcGgtPnNhZGRyLCBpcGgtPmRhZGRyLAorCQkJCQkgMCwgSVBQUk9UT19UQ1AsIDApOworCQlpcGgtPnRvdF9sZW4gPSAwOworCQlpcGgtPmNoZWNrID0gMDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHFldGhfdHhfY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCV9fd3N1bSBjc3VtOworCWludCBvZmZzZXQ7CisKKwlza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiLCBza2ItPmNzdW1fc3RhcnQgLSBza2JfaGVhZHJvb20oc2tiKSk7CisJb2Zmc2V0ID0gc2tiLT5jc3VtX3N0YXJ0IC0gc2tiX2hlYWRyb29tKHNrYik7CisJQlVHX09OKG9mZnNldCA+PSBza2JfaGVhZGxlbihza2IpKTsKKwljc3VtID0gc2tiX2NoZWNrc3VtKHNrYiwgb2Zmc2V0LCBza2ItPmxlbiAtIG9mZnNldCwgMCk7CisKKwlvZmZzZXQgKz0gc2tiLT5jc3VtX29mZnNldDsKKwlCVUdfT04ob2Zmc2V0ICsgc2l6ZW9mKF9fc3VtMTYpID4gc2tiX2hlYWRsZW4oc2tiKSk7CisJKihfX3N1bTE2ICopKHNrYi0+ZGF0YSArIG9mZnNldCkgPSBjc3VtX2ZvbGQoY3N1bSk7Cit9CisKIHN0YXRpYyBpbnQgcWV0aF9sM19oYXJkX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlpbnQgcmM7CiAJdTE2ICp0YWc7CiAJc3RydWN0IHFldGhfaGRyICpoZHIgPSBOVUxMOwogCWludCBlbGVtZW50c19uZWVkZWQgPSAwOworCWludCBlbGVtczsKIAlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2LT5tbF9wcml2OwogCXN0cnVjdCBza19idWZmICpuZXdfc2tiID0gTlVMTDsKIAlpbnQgaXB2ID0gcWV0aF9nZXRfaXBfdmVyc2lvbihza2IpOwpAQCAtMjU5MSw4ICsyNjQ5LDggQEAKIAkJW3FldGhfZ2V0X3ByaW9yaXR5X3F1ZXVlKGNhcmQsIHNrYiwgaXB2LCBjYXN0X3R5cGUpXTsKIAlpbnQgdHhfYnl0ZXMgPSBza2ItPmxlbjsKIAllbnVtIHFldGhfbGFyZ2Vfc2VuZF90eXBlcyBsYXJnZV9zZW5kID0gUUVUSF9MQVJHRV9TRU5EX05POwotCXN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqY3R4ID0gTlVMTDsKIAlpbnQgZGF0YV9vZmZzZXQgPSAtMTsKKwlpbnQgbnJfZnJhZ3M7CiAKIAlpZiAoKGNhcmQtPmluZm8udHlwZSA9PSBRRVRIX0NBUkRfVFlQRV9JUUQpICYmCiAJICAgIChza2ItPnByb3RvY29sICE9IGh0b25zKEVUSF9QX0lQVjYpKSAmJgpAQCAtMjYxNSw2ICsyNjczLDEyIEBACiAKIAlpZiAoc2tiX2lzX2dzbyhza2IpKQogCQlsYXJnZV9zZW5kID0gY2FyZC0+b3B0aW9ucy5sYXJnZV9zZW5kOworCWVsc2UKKwkJaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpIHsKKwkJCXFldGhfdHhfY3N1bShza2IpOworCQkJaWYgKGNhcmQtPm9wdGlvbnMucGVyZm9ybWFuY2Vfc3RhdHMpCisJCQkJY2FyZC0+cGVyZl9zdGF0cy50eF9jc3VtKys7CisJCX0KIAogCWlmICgoY2FyZC0+aW5mby50eXBlID09IFFFVEhfQ0FSRF9UWVBFX0lRRCkgJiYgKCFsYXJnZV9zZW5kKSAmJgogCSAgICAoc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyA9PSAwKSkgewpAQCAtMjY2MSwxMiArMjcyNSwxMyBAQAogCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAogCS8qIGZpeCBoYXJkd2FyZSBsaW1pdGF0aW9uOiBhcyBsb25nIGFzIHdlIGRvIG5vdCBoYXZlIHNiYWwKLQkgKiBjaGFpbmluZyB3ZSBjYW4gbm90IHNlbmQgbG9uZyBmcmFnIGxpc3RzIHNvIHdlIHRlbXBvcmFyeQotCSAqIHN3aXRjaCB0byBFRERQCisJICogY2hhaW5pbmcgd2UgY2FuIG5vdCBzZW5kIGxvbmcgZnJhZyBsaXN0cwogCSAqLwogCWlmICgobGFyZ2Vfc2VuZCA9PSBRRVRIX0xBUkdFX1NFTkRfVFNPKSAmJgotCQkoKHNrYl9zaGluZm8obmV3X3NrYiktPm5yX2ZyYWdzICsgMikgPiAxNikpCi0JCWxhcmdlX3NlbmQgPSBRRVRIX0xBUkdFX1NFTkRfRUREUDsKKwkgICAgKChza2Jfc2hpbmZvKG5ld19za2IpLT5ucl9mcmFncyArIDIpID4gMTYpKSB7CisJCWlmIChza2JfbGluZWFyaXplKG5ld19za2IpKQorCQkJZ290byB0eF9kcm9wOworCX0KIAogCWlmICgobGFyZ2Vfc2VuZCA9PSBRRVRIX0xBUkdFX1NFTkRfVFNPKSAmJgogCSAgICAoY2FzdF90eXBlID09IFJUTl9VTlNQRUMpKSB7CkBAIC0yNjg5LDM3ICsyNzU0LDIyIEBACiAJCX0KIAl9CiAKLQlpZiAobGFyZ2Vfc2VuZCA9PSBRRVRIX0xBUkdFX1NFTkRfRUREUCkgewotCQkvKiBuZXdfc2tiIGlzIG5vdCBvd25lZCBieSBhIHNvY2tldCBzbyB3ZSB1c2Ugc2tiIHRvIGdldAotCQkgKiB0aGUgcHJvdG9jb2wKLQkJICovCi0JCWN0eCA9IHFldGhfZWRkcF9jcmVhdGVfY29udGV4dChjYXJkLCBuZXdfc2tiLCBoZHIsCi0JCQkJCQlza2ItPnNrLT5za19wcm90b2NvbCk7Ci0JCWlmIChjdHggPT0gTlVMTCkgewotCQkJUUVUSF9EQkZfTUVTU0FHRSgyLCAiY291bGQgbm90IGNyZWF0ZSBlZGRwIGNvbnRleHRcbiIpOwotCQkJZ290byB0eF9kcm9wOwotCQl9Ci0JfSBlbHNlIHsKLQkJaW50IGVsZW1zID0gcWV0aF9nZXRfZWxlbWVudHNfbm8oY2FyZCwgKHZvaWQgKiloZHIsIG5ld19za2IsCisJZWxlbXMgPSBxZXRoX2dldF9lbGVtZW50c19ubyhjYXJkLCAodm9pZCAqKWhkciwgbmV3X3NrYiwKIAkJCQkJCSBlbGVtZW50c19uZWVkZWQpOwotCQlpZiAoIWVsZW1zKSB7Ci0JCQlpZiAoZGF0YV9vZmZzZXQgPj0gMCkKLQkJCQlrbWVtX2NhY2hlX2ZyZWUocWV0aF9jb3JlX2hlYWRlcl9jYWNoZSwgaGRyKTsKLQkJCWdvdG8gdHhfZHJvcDsKLQkJfQotCQllbGVtZW50c19uZWVkZWQgKz0gZWxlbXM7CisJaWYgKCFlbGVtcykgeworCQlpZiAoZGF0YV9vZmZzZXQgPj0gMCkKKwkJCWttZW1fY2FjaGVfZnJlZShxZXRoX2NvcmVfaGVhZGVyX2NhY2hlLCBoZHIpOworCQlnb3RvIHR4X2Ryb3A7CiAJfQotCi0JaWYgKChsYXJnZV9zZW5kID09IFFFVEhfTEFSR0VfU0VORF9OTykgJiYKLQkgICAgKG5ld19za2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSkKLQkJcWV0aF90eF9jc3VtKG5ld19za2IpOworCWVsZW1lbnRzX25lZWRlZCArPSBlbGVtczsKKwlucl9mcmFncyA9IHNrYl9zaGluZm8obmV3X3NrYiktPm5yX2ZyYWdzOwogCiAJaWYgKGNhcmQtPmluZm8udHlwZSAhPSBRRVRIX0NBUkRfVFlQRV9JUUQpCiAJCXJjID0gcWV0aF9kb19zZW5kX3BhY2tldChjYXJkLCBxdWV1ZSwgbmV3X3NrYiwgaGRyLAotCQkJCQkgZWxlbWVudHNfbmVlZGVkLCBjdHgpOworCQkJCQkgZWxlbWVudHNfbmVlZGVkKTsKIAllbHNlCiAJCXJjID0gcWV0aF9kb19zZW5kX3BhY2tldF9mYXN0KGNhcmQsIHF1ZXVlLCBuZXdfc2tiLCBoZHIsCi0JCQkJCWVsZW1lbnRzX25lZWRlZCwgY3R4LCBkYXRhX29mZnNldCwgMCk7CisJCQkJCWVsZW1lbnRzX25lZWRlZCwgZGF0YV9vZmZzZXQsIDApOwogCiAJaWYgKCFyYykgewogCQljYXJkLT5zdGF0cy50eF9wYWNrZXRzKys7CkBAIC0yNzMxLDIyICsyNzgxLDEzIEBACiAJCQkJY2FyZC0+cGVyZl9zdGF0cy5sYXJnZV9zZW5kX2J5dGVzICs9IHR4X2J5dGVzOwogCQkJCWNhcmQtPnBlcmZfc3RhdHMubGFyZ2Vfc2VuZF9jbnQrKzsKIAkJCX0KLQkJCWlmIChza2Jfc2hpbmZvKG5ld19za2IpLT5ucl9mcmFncyA+IDApIHsKKwkJCWlmIChucl9mcmFncykgewogCQkJCWNhcmQtPnBlcmZfc3RhdHMuc2dfc2tic19zZW50Kys7CiAJCQkJLyogbnJfZnJhZ3MgKyBza2ItPmRhdGEgKi8KLQkJCQljYXJkLT5wZXJmX3N0YXRzLnNnX2ZyYWdzX3NlbnQgKz0KLQkJCQkJc2tiX3NoaW5mbyhuZXdfc2tiKS0+bnJfZnJhZ3MgKyAxOworCQkJCWNhcmQtPnBlcmZfc3RhdHMuc2dfZnJhZ3Nfc2VudCArPSBucl9mcmFncyArIDE7CiAJCQl9CiAJCX0KLQotCQlpZiAoY3R4ICE9IE5VTEwpIHsKLQkJCXFldGhfZWRkcF9wdXRfY29udGV4dChjdHgpOwotCQkJZGV2X2tmcmVlX3NrYl9hbnkobmV3X3NrYik7Ci0JCX0KIAl9IGVsc2UgewotCQlpZiAoY3R4ICE9IE5VTEwpCi0JCQlxZXRoX2VkZHBfcHV0X2NvbnRleHQoY3R4KTsKLQogCQlpZiAoZGF0YV9vZmZzZXQgPj0gMCkKIAkJCWttZW1fY2FjaGVfZnJlZShxZXRoX2NvcmVfaGVhZGVyX2NhY2hlLCBoZHIpOwogCkBAIC0yODQxLDcgKzI4ODIsNyBAQAogCWlmIChkYXRhKSB7CiAJCWlmIChjYXJkLT5vcHRpb25zLmxhcmdlX3NlbmQgPT0gUUVUSF9MQVJHRV9TRU5EX05PKSB7CiAJCQlpZiAoY2FyZC0+aW5mby50eXBlID09IFFFVEhfQ0FSRF9UWVBFX0lRRCkKLQkJCQljYXJkLT5vcHRpb25zLmxhcmdlX3NlbmQgPSBRRVRIX0xBUkdFX1NFTkRfRUREUDsKKwkJCQlyZXR1cm4gLUVQRVJNOwogCQkJZWxzZQogCQkJCWNhcmQtPm9wdGlvbnMubGFyZ2Vfc2VuZCA9IFFFVEhfTEFSR0VfU0VORF9UU087CiAJCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3MzOTBtYWNoLmggYi9kcml2ZXJzL3MzOTAvczM5MG1hY2guaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDM5ZjhiNi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3MzOTAvczM5MG1hY2guaAorKysgL2Rldi9udWxsCkBAIC0xLDEyMiArMCwwIEBACi0vKgotICogIGRyaXZlcnMvczM5MC9zMzkwbWFjaC5oCi0gKiAgIFMvMzkwIGRhdGEgZGVmaW5pdGlvbnMgZm9yIG1hY2hpbmUgY2hlY2sgcHJvY2Vzc2luZwotICoKLSAqICBTMzkwIHZlcnNpb24KLSAqICAgIENvcHlyaWdodCAoQykgMjAwMCBJQk0gRGV1dHNjaGxhbmQgRW50d2lja2x1bmcgR21iSCwgSUJNIENvcnBvcmF0aW9uCi0gKiAgICBBdXRob3Iocyk6IEluZ28gQWRsdW5nIChhZGx1bmdAZGUuaWJtLmNvbSkKLSAqLwotCi0jaWZuZGVmIF9fczM5MG1hY2hfaAotI2RlZmluZSBfX3MzOTBtYWNoX2gKLQotI2luY2x1ZGUgPGFzbS90eXBlcy5oPgotCi1zdHJ1Y3QgbWNpIHsKLQlfX3UzMiAgIHNkICAgICAgICAgICAgICA6ICAxOyAvKiAwMCBzeXN0ZW0gZGFtYWdlICovCi0JX191MzIgICBwZCAgICAgICAgICAgICAgOiAgMTsgLyogMDEgaW5zdHJ1Y3Rpb24tcHJvY2Vzc2luZyBkYW1hZ2UgKi8KLQlfX3UzMiAgIHNyICAgICAgICAgICAgICA6ICAxOyAvKiAwMiBzeXN0ZW0gcmVjb3ZlcnkgKi8KLQlfX3UzMiAgIHRvX2JlX2RlZmluZWRfMSA6ICAxOyAvKiAwMyAqLwotCV9fdTMyICAgY2QgICAgICAgICAgICAgIDogIDE7IC8qIDA0IHRpbWluZy1mYWNpbGl0eSBkYW1hZ2UgKi8KLQlfX3UzMiAgIGVkICAgICAgICAgICAgICA6ICAxOyAvKiAwNSBleHRlcm5hbCBkYW1hZ2UgKi8KLQlfX3UzMiAgIHRvX2JlX2RlZmluZWRfMiA6ICAxOyAvKiAwNiAqLwotCV9fdTMyICAgZGcgICAgICAgICAgICAgIDogIDE7IC8qIDA3IGRlZ3JhZGF0aW9uICovCi0JX191MzIgICB3ICAgICAgICAgICAgICAgOiAgMTsgLyogMDggd2FybmluZyBwZW5kaW5nICovCi0JX191MzIgICBjcCAgICAgICAgICAgICAgOiAgMTsgLyogMDkgY2hhbm5lbC1yZXBvcnQgcGVuZGluZyAqLwotCV9fdTMyICAgc3AgICAgICAgICAgICAgIDogIDE7IC8qIDEwIHNlcnZpY2UtcHJvY2Vzc29yIGRhbWFnZSAqLwotCV9fdTMyICAgY2sgICAgICAgICAgICAgIDogIDE7IC8qIDExIGNoYW5uZWwtc3Vic3lzdGVtIGRhbWFnZSAqLwotCV9fdTMyICAgdG9fYmVfZGVmaW5lZF8zIDogIDI7IC8qIDEyLTEzICovCi0JX191MzIgICBiICAgICAgICAgICAgICAgOiAgMTsgLyogMTQgYmFja2VkIHVwICovCi0JX191MzIgICB0b19iZV9kZWZpbmVkXzQgOiAgMTsgLyogMTUgKi8KLQlfX3UzMiAgIHNlICAgICAgICAgICAgICA6ICAxOyAvKiAxNiBzdG9yYWdlIGVycm9yIHVuY29ycmVjdGVkICovCi0JX191MzIgICBzYyAgICAgICAgICAgICAgOiAgMTsgLyogMTcgc3RvcmFnZSBlcnJvciBjb3JyZWN0ZWQgKi8KLQlfX3UzMiAgIGtlICAgICAgICAgICAgICA6ICAxOyAvKiAxOCBzdG9yYWdlLWtleSBlcnJvciB1bmNvcnJlY3RlZCAqLwotCV9fdTMyICAgZHMgICAgICAgICAgICAgIDogIDE7IC8qIDE5IHN0b3JhZ2UgZGVncmFkYXRpb24gKi8KLQlfX3UzMiAgIHdwICAgICAgICAgICAgICA6ICAxOyAvKiAyMCBwc3cgbXdwIHZhbGlkaXR5ICovCi0JX191MzIgICBtcyAgICAgICAgICAgICAgOiAgMTsgLyogMjEgcHN3IG1hc2sgYW5kIGtleSB2YWxpZGl0eSAqLwotCV9fdTMyICAgcG0gICAgICAgICAgICAgIDogIDE7IC8qIDIyIHBzdyBwcm9ncmFtIG1hc2sgYW5kIGNjIHZhbGlkaXR5ICovCi0JX191MzIgICBpYSAgICAgICAgICAgICAgOiAgMTsgLyogMjMgcHN3IGluc3RydWN0aW9uIGFkZHJlc3MgdmFsaWRpdHkgKi8KLQlfX3UzMiAgIGZhICAgICAgICAgICAgICA6ICAxOyAvKiAyNCBmYWlsaW5nIHN0b3JhZ2UgYWRkcmVzcyB2YWxpZGl0eSAqLwotCV9fdTMyICAgdG9fYmVfZGVmaW5lZF81IDogIDE7IC8qIDI1ICovCi0JX191MzIgICBlYyAgICAgICAgICAgICAgOiAgMTsgLyogMjYgZXh0ZXJuYWwgZGFtYWdlIGNvZGUgdmFsaWRpdHkgKi8KLQlfX3UzMiAgIGZwICAgICAgICAgICAgICA6ICAxOyAvKiAyNyBmbG9hdGluZyBwb2ludCByZWdpc3RlciB2YWxpZGl0eSAqLwotCV9fdTMyICAgZ3IgICAgICAgICAgICAgIDogIDE7IC8qIDI4IGdlbmVyYWwgcmVnaXN0ZXIgdmFsaWRpdHkgKi8KLQlfX3UzMiAgIGNyICAgICAgICAgICAgICA6ICAxOyAvKiAyOSBjb250cm9sIHJlZ2lzdGVyIHZhbGlkaXR5ICovCi0JX191MzIgICB0b19iZV9kZWZpbmVkXzYgOiAgMTsgLyogMzAgKi8KLQlfX3UzMiAgIHN0ICAgICAgICAgICAgICA6ICAxOyAvKiAzMSBzdG9yYWdlIGxvZ2ljYWwgdmFsaWRpdHkgKi8KLQlfX3UzMiAgIGllICAgICAgICAgICAgICA6ICAxOyAvKiAzMiBpbmRpcmVjdCBzdG9yYWdlIGVycm9yICovCi0JX191MzIgICBhciAgICAgICAgICAgICAgOiAgMTsgLyogMzMgYWNjZXNzIHJlZ2lzdGVyIHZhbGlkaXR5ICovCi0JX191MzIgICBkYSAgICAgICAgICAgICAgOiAgMTsgLyogMzQgZGVsYXllZCBhY2Nlc3MgZXhjZXB0aW9uICovCi0JX191MzIgICB0b19iZV9kZWZpbmVkXzcgOiAgNzsgLyogMzUtNDEgKi8KLQlfX3UzMiAgIHByICAgICAgICAgICAgICA6ICAxOyAvKiA0MiB0b2QgcHJvZ3JhbW1hYmxlIHJlZ2lzdGVyIHZhbGlkaXR5ICovCi0JX191MzIgICBmYyAgICAgICAgICAgICAgOiAgMTsgLyogNDMgZnAgY29udHJvbCByZWdpc3RlciB2YWxpZGl0eSAqLwotCV9fdTMyICAgYXAgICAgICAgICAgICAgIDogIDE7IC8qIDQ0IGFuY2lsbGFyeSByZXBvcnQgKi8KLQlfX3UzMiAgIHRvX2JlX2RlZmluZWRfOCA6ICAxOyAvKiA0NSAqLwotCV9fdTMyICAgY3QgICAgICAgICAgICAgIDogIDE7IC8qIDQ2IGNwdSB0aW1lciB2YWxpZGl0eSAqLwotCV9fdTMyICAgY2MgICAgICAgICAgICAgIDogIDE7IC8qIDQ3IGNsb2NrIGNvbXBhcmF0b3IgdmFsaWRpdHkgKi8KLQlfX3UzMgl0b19iZV9kZWZpbmVkXzkgOiAxNjsgLyogNDctNjMgKi8KLX07Ci0KLS8qCi0gKiBDaGFubmVsIFJlcG9ydCBXb3JkCi0gKi8KLXN0cnVjdCBjcncgewotCV9fdTMyIHJlczEgICAgOiAgMTsgICAvKiByZXNlcnZlZCB6ZXJvICovCi0JX191MzIgc2xjdCAgICA6ICAxOyAgIC8qIHNvbGljaXRlZCAqLwotCV9fdTMyIG9mbHcgICAgOiAgMTsgICAvKiBvdmVyZmxvdyAqLwotCV9fdTMyIGNobiAgICAgOiAgMTsgICAvKiBjaGFpbmVkICovCi0JX191MzIgcnNjICAgICA6ICA0OyAgIC8qIHJlcG9ydGluZyBzb3VyY2UgY29kZSAqLwotCV9fdTMyIGFuYyAgICAgOiAgMTsgICAvKiBhbmNpbGxhcnkgcmVwb3J0ICovCi0JX191MzIgcmVzMiAgICA6ICAxOyAgIC8qIHJlc2VydmVkIHplcm8gKi8KLQlfX3UzMiBlcmMgICAgIDogIDY7ICAgLyogZXJyb3ItcmVjb3ZlcnkgY29kZSAqLwotCV9fdTMyIHJzaWQgICAgOiAxNjsgICAvKiByZXBvcnRpbmctc291cmNlIElEICovCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotdHlwZWRlZiB2b2lkICgqY3J3X2hhbmRsZXJfdCkoc3RydWN0IGNydyAqLCBzdHJ1Y3QgY3J3ICosIGludCk7Ci0KLWV4dGVybiBpbnQgczM5MF9yZWdpc3Rlcl9jcndfaGFuZGxlcihpbnQgcnNjLCBjcndfaGFuZGxlcl90IGhhbmRsZXIpOwotZXh0ZXJuIHZvaWQgczM5MF91bnJlZ2lzdGVyX2Nyd19oYW5kbGVyKGludCByc2MpOwotCi0jZGVmaW5lIE5SX1JTQ1MgMTYKLQotI2RlZmluZSBDUldfUlNDX01PTklUT1IgIDB4MiAgLyogbW9uaXRvcmluZyBmYWNpbGl0eSAqLwotI2RlZmluZSBDUldfUlNDX1NDSCAgICAgIDB4MyAgLyogc3ViY2hhbm5lbCAqLwotI2RlZmluZSBDUldfUlNDX0NQQVRIICAgIDB4NCAgLyogY2hhbm5lbCBwYXRoICovCi0jZGVmaW5lIENSV19SU0NfQ09ORklHICAgMHg5ICAvKiBjb25maWd1cmF0aW9uLWFsZXJ0IGZhY2lsaXR5ICovCi0jZGVmaW5lIENSV19SU0NfQ1NTICAgICAgMHhCICAvKiBjaGFubmVsIHN1YnN5c3RlbSAqLwotCi0jZGVmaW5lIENSV19FUkNfRVZFTlQgICAgMHgwMCAvKiBldmVudCBpbmZvcm1hdGlvbiBwZW5kaW5nICovCi0jZGVmaW5lIENSV19FUkNfQVZBSUwgICAgMHgwMSAvKiBhdmFpbGFibGUgKi8KLSNkZWZpbmUgQ1JXX0VSQ19JTklUICAgICAweDAyIC8qIGluaXRpYWxpemVkICovCi0jZGVmaW5lIENSV19FUkNfVEVSUk9SICAgMHgwMyAvKiB0ZW1wb3JhcnkgZXJyb3IgKi8KLSNkZWZpbmUgQ1JXX0VSQ19JUEFSTSAgICAweDA0IC8qIGluc3RhbGxlZCBwYXJtIGluaXRpYWxpemVkICovCi0jZGVmaW5lIENSV19FUkNfVEVSTSAgICAgMHgwNSAvKiB0ZXJtaW5hbCAqLwotI2RlZmluZSBDUldfRVJDX1BFUlJOICAgIDB4MDYgLyogcGVybS4gZXJyb3IsIGZhYy4gbm90IGluaXQgKi8KLSNkZWZpbmUgQ1JXX0VSQ19QRVJSSSAgICAweDA3IC8qIHBlcm0uIGVycm9yLCBmYWNpbGl0eSBpbml0ICovCi0jZGVmaW5lIENSV19FUkNfUE1PRCAgICAgMHgwOCAvKiBpbnN0YWxsZWQgcGFyYW1ldGVycyBtb2RpZmllZCAqLwotCi1zdGF0aWMgaW5saW5lIGludCBzdGNydyhzdHJ1Y3QgY3J3ICpwY3J3ICkKLXsKLQlpbnQgY2NvZGU7Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkJInN0Y3J3IDAoJTIpXG5cdCIKLQkJImlwbSAlMFxuXHQiCi0JCSJzcmwgJTAsMjhcblx0IgotCQk6ICI9ZCIgKGNjb2RlKSwgIj1tIiAoKnBjcncpCi0JCTogImEiIChwY3J3KQotCQk6ICJjYyIgKTsKLQlyZXR1cm4gY2NvZGU7Ci19Ci0KLSNkZWZpbmUgRURfRVRSX1NZTkMJMTIJLyogRXh0ZXJuYWwgZGFtYWdlIEVUUiBzeW5jIGNoZWNrICovCi0jZGVmaW5lIEVEX0VUUl9TV0lUQ0gJMTMJLyogRXh0ZXJuYWwgZGFtYWdlIEVUUiBzd2l0Y2ggdG8gbG9jYWwgKi8KLQotI2RlZmluZSBFRF9TVFBfU1lOQwk3CS8qIEV4dGVybmFsIGRhbWFnZSBTVFAgc3luYyBjaGVjayAqLwotI2RlZmluZSBFRF9TVFBfSVNMQU5ECTYJLyogRXh0ZXJuYWwgZGFtYWdlIFNUUCBpc2xhbmQgY2hlY2sgKi8KLQotc3RydWN0IHB0X3JlZ3M7Ci0KLXZvaWQgczM5MF9oYW5kbGVfbWNjayh2b2lkKTsKLXZvaWQgczM5MF9kb19tYWNoaW5lX2NoZWNrKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKLSNlbmRpZiAvKiBfX3MzOTBtYWNoICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYTQwMDB0LmMgYi9kcml2ZXJzL3Njc2kvYTQwMDB0LmMKaW5kZXggZDRiZGEyMC4uNjFhZjNkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2E0MDAwdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9hNDAwMHQuYwpAQCAtMzUsNyArMzUsNyBAQAogCiAjZGVmaW5lIEE0MDAwVF9TQ1NJX0FERFIgMHhkZDAwNDAKIAotc3RhdGljIGludCBfX2RldmluaXQgYTQwMDB0X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19kZXZpbml0IGE0MDAwdF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IFNjc2lfSG9zdCAqaG9zdDsKIAlzdHJ1Y3QgTkNSXzcwMF9Ib3N0X1BhcmFtZXRlcnMgKmhvc3RkYXRhOwpAQCAtNjEsNyArNjEsOCBAQAogCWhvc3RkYXRhLT5kY250bF9leHRyYSA9IEVBXzcxMDsKIAogCS8qIGFuZCByZWdpc3RlciB0aGUgY2hpcCAqLwotCWhvc3QgPSBOQ1JfNzAwX2RldGVjdCgmYTQwMDB0X3Njc2lfZHJpdmVyX3RlbXBsYXRlLCBob3N0ZGF0YSwgZGV2KTsKKwlob3N0ID0gTkNSXzcwMF9kZXRlY3QoJmE0MDAwdF9zY3NpX2RyaXZlcl90ZW1wbGF0ZSwgaG9zdGRhdGEsCisJCQkgICAgICAmZGV2LT5kZXYpOwogCWlmICghaG9zdCkgewogCQlwcmludGsoS0VSTl9FUlIgImE0MDAwdC1zY3NpOiBObyBob3N0IGRldGVjdGVkOyAiCiAJCQkJImJvYXJkIGNvbmZpZ3VyYXRpb24gcHJvYmxlbT9cbiIpOwpAQCAtNzgsNyArNzksNyBAQAogCQlnb3RvIG91dF9wdXRfaG9zdDsKIAl9CiAKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBob3N0KTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIGhvc3QpOwogCXNjc2lfc2Nhbl9ob3N0KGhvc3QpOwogCiAJcmV0dXJuIDA7CkBAIC05Myw5ICs5NCw5IEBACiAJcmV0dXJuIC1FTk9ERVY7CiB9CiAKLXN0YXRpYyBfX2RldmV4aXQgaW50IGE0MDAwdF9kZXZpY2VfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBfX2RldmV4aXQgaW50IGE0MDAwdF9kZXZpY2VfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IE5DUl83MDBfSG9zdF9QYXJhbWV0ZXJzICpob3N0ZGF0YSA9IHNob3N0X3ByaXYoaG9zdCk7CiAKIAlzY3NpX3JlbW92ZV9ob3N0KGhvc3QpOwpAQCAtMTA4LDI1ICsxMDksMjcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGE0MDAwdF9zY3NpX2RyaXZlciA9IHsKLQkubmFtZQk9ICJhNDAwMHQtc2NzaSIsCi0JLmJ1cwk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKLQkucHJvYmUJPSBhNDAwMHRfcHJvYmUsCi0JLnJlbW92ZQk9IF9fZGV2ZXhpdF9wKGE0MDAwdF9kZXZpY2VfcmVtb3ZlKSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGE0MDAwdF9zY3NpX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSAgICAgICAgICAgPSAiYTQwMDB0LXNjc2kiLAorCQkub3duZXIgICAgICAgICAgPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZSAgICAgICAgICA9IGE0MDAwdF9wcm9iZSwKKwkucmVtb3ZlICAgICAgICAgPSBfX2RldmV4aXRfcChhNDAwMHRfZGV2aWNlX3JlbW92ZSksCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBhNDAwMHRfc2NzaV9pbml0KHZvaWQpCiB7CiAJaW50IGVycjsKIAotCWVyciA9IGRyaXZlcl9yZWdpc3RlcigmYTQwMDB0X3Njc2lfZHJpdmVyKTsKKwllcnIgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmE0MDAwdF9zY3NpX2RyaXZlcik7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAogCWE0MDAwdF9zY3NpX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoImE0MDAwdC1zY3NpIiwKIAkJCS0xLCBOVUxMLCAwKTsKIAlpZiAoSVNfRVJSKGE0MDAwdF9zY3NpX2RldmljZSkpIHsKLQkJZHJpdmVyX3VucmVnaXN0ZXIoJmE0MDAwdF9zY3NpX2RyaXZlcik7CisJCXBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmYTQwMDB0X3Njc2lfZHJpdmVyKTsKIAkJcmV0dXJuIFBUUl9FUlIoYTQwMDB0X3Njc2lfZGV2aWNlKTsKIAl9CiAKQEAgLTEzNiw3ICsxMzksNyBAQAogc3RhdGljIHZvaWQgX19leGl0IGE0MDAwdF9zY3NpX2V4aXQodm9pZCkKIHsKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihhNDAwMHRfc2NzaV9kZXZpY2UpOwotCWRyaXZlcl91bnJlZ2lzdGVyKCZhNDAwMHRfc2NzaV9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZhNDAwMHRfc2NzaV9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChhNDAwMHRfc2NzaV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hdGFyaV9OQ1I1MzgwLmMgYi9kcml2ZXJzL3Njc2kvYXRhcmlfTkNSNTM4MC5jCmluZGV4IDkzYjYxZjEuLjA0NzFmODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hdGFyaV9OQ1I1MzgwLmMKKysrIGIvZHJpdmVycy9zY3NpL2F0YXJpX05DUjUzODAuYwpAQCAtODQ0LDcgKzg0NCw3IEBACiAgKgogICovCiAKLXN0YXRpYyBpbnQgTkNSNTM4MF9pbml0KHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlLCBpbnQgZmxhZ3MpCitzdGF0aWMgaW50IF9faW5pdCBOQ1I1MzgwX2luaXQoc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UsIGludCBmbGFncykKIHsKIAlpbnQgaTsKIAlTRVRVUF9IT1NUREFUQShpbnN0YW5jZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYXRhcmlfc2NzaS5jIGIvZHJpdmVycy9zY3NpL2F0YXJpX3Njc2kuYwppbmRleCAyMWZlMDdmLi5hZDdhMjNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYXRhcmlfc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9hdGFyaV9zY3NpLmMKQEAgLTU4OSw3ICs1ODksNyBAQAogI2VuZGlmCiAKIAotaW50IGF0YXJpX3Njc2lfZGV0ZWN0KHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKmhvc3QpCitpbnQgX19pbml0IGF0YXJpX3Njc2lfZGV0ZWN0KHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKmhvc3QpCiB7CiAJc3RhdGljIGludCBjYWxsZWQgPSAwOwogCXN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2J2bWU2MDAwX3Njc2kuYyBiL2RyaXZlcnMvc2NzaS9idm1lNjAwMF9zY3NpLmMKaW5kZXggZDg1OGYzZC4uNTc5OWNiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2J2bWU2MDAwX3Njc2kuYworKysgYi9kcml2ZXJzL3Njc2kvYnZtZTYwMDBfc2NzaS5jCkBAIC0zNCw3ICszNCw3IEBACiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqYnZtZTYwMDBfc2NzaV9kZXZpY2U7CiAKIHN0YXRpYyBfX2RldmluaXQgaW50Ci1idm1lNjAwMF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitidm1lNjAwMF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IFNjc2lfSG9zdCAqaG9zdDsKIAlzdHJ1Y3QgTkNSXzcwMF9Ib3N0X1BhcmFtZXRlcnMgKmhvc3RkYXRhOwpAQCAtNTgsNyArNTgsOCBAQAogCWhvc3RkYXRhLT5jdGVzdDdfZXh0cmEgPSBDVEVTVDdfVFQxOwogCiAJLyogYW5kIHJlZ2lzdGVyIHRoZSBjaGlwICovCi0JaG9zdCA9IE5DUl83MDBfZGV0ZWN0KCZidm1lNjAwMF9zY3NpX2RyaXZlcl90ZW1wbGF0ZSwgaG9zdGRhdGEsIGRldik7CisJaG9zdCA9IE5DUl83MDBfZGV0ZWN0KCZidm1lNjAwMF9zY3NpX2RyaXZlcl90ZW1wbGF0ZSwgaG9zdGRhdGEsCisJCQkgICAgICAmZGV2LT5kZXYpOwogCWlmICghaG9zdCkgewogCQlwcmludGsoS0VSTl9FUlIgImJ2bWU2MDAwLXNjc2k6IE5vIGhvc3QgZGV0ZWN0ZWQ7ICIKIAkJCQkiYm9hcmQgY29uZmlndXJhdGlvbiBwcm9ibGVtP1xuIik7CkBAIC03Myw3ICs3NCw3IEBACiAJCWdvdG8gb3V0X3B1dF9ob3N0OwogCX0KIAotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGhvc3QpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgaG9zdCk7CiAJc2NzaV9zY2FuX2hvc3QoaG9zdCk7CiAKIAlyZXR1cm4gMDsKQEAgLTg3LDkgKzg4LDkgQEAKIH0KIAogc3RhdGljIF9fZGV2ZXhpdCBpbnQKLWJ2bWU2MDAwX2RldmljZV9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorYnZtZTYwMDBfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBOQ1JfNzAwX0hvc3RfUGFyYW1ldGVycyAqaG9zdGRhdGEgPSBzaG9zdF9wcml2KGhvc3QpOwogCiAJc2NzaV9yZW1vdmVfaG9zdChob3N0KTsKQEAgLTEwMCwyNSArMTAxLDI3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBidm1lNjAwMF9zY3NpX2RyaXZlciA9IHsKLQkubmFtZQk9ICJidm1lNjAwMC1zY3NpIiwKLQkuYnVzCT0gJnBsYXRmb3JtX2J1c190eXBlLAotCS5wcm9iZQk9IGJ2bWU2MDAwX3Byb2JlLAotCS5yZW1vdmUJPSBfX2RldmV4aXRfcChidm1lNjAwMF9kZXZpY2VfcmVtb3ZlKSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGJ2bWU2MDAwX3Njc2lfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCQk9ICJidm1lNjAwMC1zY3NpIiwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlCQk9IGJ2bWU2MDAwX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AoYnZtZTYwMDBfZGV2aWNlX3JlbW92ZSksCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBidm1lNjAwMF9zY3NpX2luaXQodm9pZCkKIHsKIAlpbnQgZXJyOwogCi0JZXJyID0gZHJpdmVyX3JlZ2lzdGVyKCZidm1lNjAwMF9zY3NpX2RyaXZlcik7CisJZXJyID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZidm1lNjAwMF9zY3NpX2RyaXZlcik7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAogCWJ2bWU2MDAwX3Njc2lfZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgiYnZtZTYwMDAtc2NzaSIsCiAJCQkJCQkJICAgICAgIC0xLCBOVUxMLCAwKTsKIAlpZiAoSVNfRVJSKGJ2bWU2MDAwX3Njc2lfZGV2aWNlKSkgewotCQlkcml2ZXJfdW5yZWdpc3RlcigmYnZtZTYwMDBfc2NzaV9kcml2ZXIpOworCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmYnZtZTYwMDBfc2NzaV9kcml2ZXIpOwogCQlyZXR1cm4gUFRSX0VSUihidm1lNjAwMF9zY3NpX2RldmljZSk7CiAJfQogCkBAIC0xMjgsNyArMTMxLDcgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCBidm1lNjAwMF9zY3NpX2V4aXQodm9pZCkKIHsKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcihidm1lNjAwMF9zY3NpX2RldmljZSk7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJmJ2bWU2MDAwX3Njc2lfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmYnZtZTYwMDBfc2NzaV9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChidm1lNjAwMF9zY3NpX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL212bWUxNnhfc2NzaS5jIGIvZHJpdmVycy9zY3NpL212bWUxNnhfc2NzaS5jCmluZGV4IGIyNjRiNDkuLmI1ZmJmZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tdm1lMTZ4X3Njc2kuYworKysgYi9kcml2ZXJzL3Njc2kvbXZtZTE2eF9zY3NpLmMKQEAgLTM0LDcgKzM0LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICptdm1lMTZ4X3Njc2lfZGV2aWNlOwogCiBzdGF0aWMgX19kZXZpbml0IGludAotbXZtZTE2eF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCittdm1lMTZ4X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICogaG9zdCA9IE5VTEw7CiAJc3RydWN0IE5DUl83MDBfSG9zdF9QYXJhbWV0ZXJzICpob3N0ZGF0YTsKQEAgLTY0LDcgKzY0LDggQEAKIAlob3N0ZGF0YS0+Y3Rlc3Q3X2V4dHJhID0gQ1RFU1Q3X1RUMTsKIAogCS8qIGFuZCByZWdpc3RlciB0aGUgY2hpcCAqLwotCWhvc3QgPSBOQ1JfNzAwX2RldGVjdCgmbXZtZTE2eF9zY3NpX2RyaXZlcl90ZW1wbGF0ZSwgaG9zdGRhdGEsIGRldik7CisJaG9zdCA9IE5DUl83MDBfZGV0ZWN0KCZtdm1lMTZ4X3Njc2lfZHJpdmVyX3RlbXBsYXRlLCBob3N0ZGF0YSwKKwkJCSAgICAgICZkZXYtPmRldik7CiAJaWYgKCFob3N0KSB7CiAJCXByaW50ayhLRVJOX0VSUiAibXZtZTE2eC1zY3NpOiBObyBob3N0IGRldGVjdGVkOyAiCiAJCQkJImJvYXJkIGNvbmZpZ3VyYXRpb24gcHJvYmxlbT9cbiIpOwpAQCAtODgsNyArODksNyBAQAogCQlvdXRfYmUzMigweGZmZjQyMDJjLCB2KTsKIAl9CiAKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBob3N0KTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIGhvc3QpOwogCXNjc2lfc2Nhbl9ob3N0KGhvc3QpOwogCiAJcmV0dXJuIDA7CkBAIC0xMDIsOSArMTAzLDkgQEAKIH0KIAogc3RhdGljIF9fZGV2ZXhpdCBpbnQKLW12bWUxNnhfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCittdm1lMTZ4X2RldmljZV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgTkNSXzcwMF9Ib3N0X1BhcmFtZXRlcnMgKmhvc3RkYXRhID0gc2hvc3RfcHJpdihob3N0KTsKIAogCS8qIERpc2FibGUgc2NzaSBjaGlwIGludHMgKi8KQEAgLTEyMywyNSArMTI0LDI3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBtdm1lMTZ4X3Njc2lfZHJpdmVyID0gewotCS5uYW1lCT0gIm12bWUxNngtc2NzaSIsCi0JLmJ1cwk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKLQkucHJvYmUJPSBtdm1lMTZ4X3Byb2JlLAotCS5yZW1vdmUJPSBfX2RldmV4aXRfcChtdm1lMTZ4X2RldmljZV9yZW1vdmUpLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXZtZTE2eF9zY3NpX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSAgICAgICAgICAgPSAibXZtZTE2eC1zY3NpIiwKKwkJLm93bmVyICAgICAgICAgID0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUgICAgICAgICAgPSBtdm1lMTZ4X3Byb2JlLAorCS5yZW1vdmUgICAgICAgICA9IF9fZGV2ZXhpdF9wKG12bWUxNnhfZGV2aWNlX3JlbW92ZSksCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBtdm1lMTZ4X3Njc2lfaW5pdCh2b2lkKQogewogCWludCBlcnI7CiAKLQllcnIgPSBkcml2ZXJfcmVnaXN0ZXIoJm12bWUxNnhfc2NzaV9kcml2ZXIpOworCWVyciA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmbXZtZTE2eF9zY3NpX2RyaXZlcik7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAogCW12bWUxNnhfc2NzaV9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKCJtdm1lMTZ4LXNjc2kiLAogCQkJCQkJCSAgICAgIC0xLCBOVUxMLCAwKTsKIAlpZiAoSVNfRVJSKG12bWUxNnhfc2NzaV9kZXZpY2UpKSB7Ci0JCWRyaXZlcl91bnJlZ2lzdGVyKCZtdm1lMTZ4X3Njc2lfZHJpdmVyKTsKKwkJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm12bWUxNnhfc2NzaV9kcml2ZXIpOwogCQlyZXR1cm4gUFRSX0VSUihtdm1lMTZ4X3Njc2lfZGV2aWNlKTsKIAl9CiAKQEAgLTE1MSw3ICsxNTQsNyBAQAogc3RhdGljIHZvaWQgX19leGl0IG12bWUxNnhfc2NzaV9leGl0KHZvaWQpCiB7CiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIobXZtZTE2eF9zY3NpX2RldmljZSk7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJm12bWUxNnhfc2NzaV9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZtdm1lMTZ4X3Njc2lfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQobXZtZTE2eF9zY3NpX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuYwppbmRleCA1Zjc3NDE3Li4zZWU0ZWI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuYwpAQCAtNTMzLDEyICs1MzMsOCBAQAogCWV2ZW50LT5ldmVudF9jb2RlID0gZXZlbnRfY29kZTsKIAlldmVudC0+ZXZlbnRfZGF0YSA9IGV2ZW50X2RhdGE7CiAKLQllcnIgPSBubG1zZ19tdWx0aWNhc3Qoc2NzaV9ubF9zb2NrLCBza2IsIDAsIFNDU0lfTkxfR1JQX0ZDX0VWRU5UUywKLQkJCSAgICAgIEdGUF9LRVJORUwpOwotCWlmIChlcnIgJiYgKGVyciAhPSAtRVNSQ0gpKQkvKiBmaWx0ZXIgbm8gcmVjaXBpZW50IGVycm9ycyAqLwotCQkvKiBubG1zZ19tdWx0aWNhc3QgYWxyZWFkeSBrZnJlZV9za2InZCAqLwotCQlnb3RvIHNlbmRfZmFpbDsKLQorCW5sbXNnX211bHRpY2FzdChzY3NpX25sX3NvY2ssIHNrYiwgMCwgU0NTSV9OTF9HUlBfRkNfRVZFTlRTLAorCQkJR0ZQX0tFUk5FTCk7CiAJcmV0dXJuOwogCiBzZW5kX2ZhaWxfc2tiOgpAQCAtNjA3LDEyICs2MDMsOCBAQAogCWV2ZW50LT5ldmVudF9jb2RlID0gRkNIX0VWVF9WRU5ET1JfVU5JUVVFOwogCW1lbWNweSgmZXZlbnQtPmV2ZW50X2RhdGEsIGRhdGFfYnVmLCBkYXRhX2xlbik7CiAKLQllcnIgPSBubG1zZ19tdWx0aWNhc3Qoc2NzaV9ubF9zb2NrLCBza2IsIDAsIFNDU0lfTkxfR1JQX0ZDX0VWRU5UUywKLQkJCSAgICAgIEdGUF9LRVJORUwpOwotCWlmIChlcnIgJiYgKGVyciAhPSAtRVNSQ0gpKQkvKiBmaWx0ZXIgbm8gcmVjaXBpZW50IGVycm9ycyAqLwotCQkvKiBubG1zZ19tdWx0aWNhc3QgYWxyZWFkeSBrZnJlZV9za2InZCAqLwotCQlnb3RvIHNlbmRfdmVuZG9yX2ZhaWw7Ci0KKwlubG1zZ19tdWx0aWNhc3Qoc2NzaV9ubF9zb2NrLCBza2IsIDAsIFNDU0lfTkxfR1JQX0ZDX0VWRU5UUywKKwkJCUdGUF9LRVJORUwpOwogCXJldHVybjsKIAogc2VuZF92ZW5kb3JfZmFpbF9za2I6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jCmluZGV4IDc1YzkyOTcuLjJhZGZhYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jCkBAIC05NjYsMTUgKzk2Niw3IEBACiBzdGF0aWMgaW50CiBpc2NzaV9icm9hZGNhc3Rfc2tiKHN0cnVjdCBza19idWZmICpza2IsIGdmcF90IGdmcCkKIHsKLQlpbnQgcmM7Ci0KLQlyYyA9IG5ldGxpbmtfYnJvYWRjYXN0KG5scywgc2tiLCAwLCAxLCBnZnApOwotCWlmIChyYyA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJpc2NzaTogY2FuIG5vdCBicm9hZGNhc3Qgc2tiICglZClcbiIsIHJjKTsKLQkJcmV0dXJuIHJjOwotCX0KLQotCXJldHVybiAwOworCXJldHVybiBuZXRsaW5rX2Jyb2FkY2FzdChubHMsIHNrYiwgMCwgMSwgZ2ZwKTsKIH0KIAogc3RhdGljIGludApAQCAtMTIwNyw3ICsxMTk5LDcgQEAKIAkgKiB0aGUgdXNlciBhbmQgd2hlbiB0aGUgZGFlbW9uIGlzIHJlc3RhcnRlZCBpdCB3aWxsIGhhbmRsZSBpdAogCSAqLwogCXJjID0gaXNjc2lfYnJvYWRjYXN0X3NrYihza2IsIEdGUF9LRVJORUwpOwotCWlmIChyYyA8IDApCisJaWYgKHJjID09IC1FU1JDSCkKIAkJaXNjc2lfY2xzX3Nlc3Npb25fcHJpbnRrKEtFUk5fRVJSLCBzZXNzaW9uLAogCQkJCQkgIkNhbm5vdCBub3RpZnkgdXNlcnNwYWNlIG9mIHNlc3Npb24gIgogCQkJCQkgImV2ZW50ICV1LiBDaGVjayBpc2NzaSBkYWVtb25cbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2cuYyBiL2RyaXZlcnMvc2NzaS9zZy5jCmluZGV4IDUxNjkyNWQuLmI0ZWYyZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zZy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zZy5jCkBAIC0xMTU0LDcgKzExNTQsNiBAQAogc3RhdGljIGludAogc2dfZmFzeW5jKGludCBmZCwgc3RydWN0IGZpbGUgKmZpbHAsIGludCBtb2RlKQogewotCWludCByZXR2YWw7CiAJU2dfZGV2aWNlICpzZHA7CiAJU2dfZmQgKnNmcDsKIApAQCAtMTE2Myw4ICsxMTYyLDcgQEAKIAlTQ1NJX0xPR19USU1FT1VUKDMsIHByaW50aygic2dfZmFzeW5jOiAlcywgbW9kZT0lZFxuIiwKIAkJCQkgICBzZHAtPmRpc2stPmRpc2tfbmFtZSwgbW9kZSkpOwogCi0JcmV0dmFsID0gZmFzeW5jX2hlbHBlcihmZCwgZmlscCwgbW9kZSwgJnNmcC0+YXN5bmNfcXApOwotCXJldHVybiAocmV0dmFsIDwgMCkgPyByZXR2YWwgOiAwOworCXJldHVybiBmYXN5bmNfaGVscGVyKGZkLCBmaWxwLCBtb2RlLCAmc2ZwLT5hc3luY19xcCk7CiB9CiAKIHN0YXRpYyBpbnQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5jIGIvZHJpdmVycy9zZXJpYWwvc2gtc2NpLmMKaW5kZXggNTU3YjU0YS4uZGJmNTM1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvc2gtc2NpLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc2gtc2NpLmMKQEAgLTEzOSw3ICsxMzksNyBAQAogCX0gd2hpbGUgKCEoc3RhdHVzICYgU0N4U1JfVER4RShwb3J0KSkpOwogCiAJc2NpX2luKHBvcnQsIFNDeFNSKTsgICAgICAgICAgICAvKiBEdW1teSByZWFkICovCi0Jc2NpX291dChwb3J0LCBTQ3hTUiwgU0N4U1JfVER4RV9DTEVBUihwb3J0KSk7CisJc2NpX291dChwb3J0LCBTQ3hTUiwgU0N4U1JfVER4RV9DTEVBUihwb3J0KSAmIH5TQ3hTUl9URU5EKHBvcnQpKTsKIAlzY2lfb3V0KHBvcnQsIFNDeFREUiwgYyk7CiB9CiAjZW5kaWYgLyogQ09ORklHX0NPTlNPTEVfUE9MTCB8fCBDT05GSUdfU0VSSUFMX1NIX1NDSV9DT05TT0xFICovCkBAIC0yNjMsNiArMjYzLDcgQEAKICNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MykgfHwgXAogICAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwKSB8fCBcCiAgICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUpIHx8IFwKKyAgICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NikgfHwgXAogICAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0hYMykKIHN0YXRpYyBpbmxpbmUgdm9pZCBzY2lfaW5pdF9waW5zKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHVuc2lnbmVkIGludCBjZmxhZykKIHsKQEAgLTI4NCw3ICsyODUsOCBAQAogCiAjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYwKSB8fCBcCiAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwKSB8fCBcCi0gICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1KQorICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSkgfHwgXAorICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NikKIHN0YXRpYyBpbmxpbmUgaW50IHNjaWZfdHhyb29tKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CiAJcmV0dXJuIFNDSUZfVFhST09NX01BWCAtIChzY2lfaW4ocG9ydCwgU0NURkRSKSAmIDB4ZmYpOwpAQCAtMTA5NSw2ICsxMDk3LDcgQEAKIAkJCQkgdW5zaWduZWQgY291bnQpCiB7CiAJc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9ICZzZXJpYWxfY29uc29sZV9wb3J0LT5wb3J0OworCXVuc2lnbmVkIHNob3J0IGJpdHM7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewpAQCAtMTEwMyw2ICsxMTA2LDExIEBACiAKIAkJc2NpX3BvbGxfcHV0X2NoYXIocG9ydCwgKnMrKyk7CiAJfQorCisJLyogd2FpdCB1bnRpbCBmaWZvIGlzIGVtcHR5IGFuZCBsYXN0IGJpdCBoYXMgYmVlbiB0cmFuc21pdHRlZCAqLworCWJpdHMgPSBTQ3hTUl9URHhFKHBvcnQpIHwgU0N4U1JfVEVORChwb3J0KTsKKwl3aGlsZSAoKHNjaV9pbihwb3J0LCBTQ3hTUikgJiBiaXRzKSAhPSBiaXRzKQorCQljcHVfcmVsYXgoKTsKIH0KIAogc3RhdGljIGludCBfX2luaXQgc2VyaWFsX2NvbnNvbGVfc2V0dXAoc3RydWN0IGNvbnNvbGUgKmNvLCBjaGFyICpvcHRpb25zKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc2gtc2NpLmggYi9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuaAppbmRleCAwMjJlODlmLi5kMGFhODJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuaAorKysgYi9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuaApAQCAtMSw2ICsxLDYgQEAKICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogCiAjaWYgZGVmaW5lZChDT05GSUdfSDgzMDA3KSB8fCBkZWZpbmVkKENPTkZJR19IODMwNjgpCiAjaW5jbHVkZSA8YXNtL3JlZ3MzMDZ4Lmg+CkBAIC0xMjYsNyArMTI2LDggQEAKICMgZGVmaW5lIFNDU1BUUjEJMHhmZmUxMDAyNAkvKiAxNiBiaXQgU0NJRiAqLwogIyBkZWZpbmUgU0NJRl9PUkVSCTB4MDAwMQkJLyogT3ZlcnJ1biBlcnJvciBiaXQgKi8KICMgZGVmaW5lIFNDU0NSX0lOSVQocG9ydCkJMHgzYQkvKiBUSUU9MCxSSUU9MCxURT0xLFJFPTEsUkVJRT0xICovCi0jZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUpCisjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUpIHx8IFwKKyAgICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NikKICMgZGVmaW5lIFNDU1BUUjAJMHhmZmVhMDAyNAkvKiAxNiBiaXQgU0NJRiAqLwogIyBkZWZpbmUgU0NTUFRSMQkweGZmZWIwMDI0CS8qIDE2IGJpdCBTQ0lGICovCiAjIGRlZmluZSBTQ1NQVFIyCTB4ZmZlYzAwMjQJLyogMTYgYml0IFNDSUYgKi8KQEAgLTE4Miw2ICsxODMsNyBAQAogICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MykgIHx8IFwKICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODApICB8fCBcCiAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1KSAgfHwgXAorICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NikgIHx8IFwKICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSFgzKQogI2RlZmluZSBTQ0lfQ1RSTF9GTEFHU19SRUlFIDB4MDggLyogNzc1MCBTQ0lGICovCiAjZWxzZQpAQCAtNDEzLDcgKzQxNSw4IEBACiBTQ0lGX0ZOUyhTQ0ZDUiwgICAgICAgICAgICAgICAgICAgICAgMHgwYywgIDgsIDB4MTgsIDE2KQogI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MCkgfHwgXAogICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCkgfHwgXAotICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSkKKyAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUpIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYpCiBTQ0lGX0ZOUyhTQ0ZEUiwJCQkgICAgIDB4MGUsIDE2LCAweDFDLCAxNikKIFNDSUZfRk5TKFNDVEZEUiwJCSAgICAgMHgwZSwgMTYsIDB4MUMsIDE2KQogU0NJRl9GTlMoU0NSRkRSLAkJICAgICAweDBlLCAxNiwgMHgyMCwgMTYpCkBAIC02NDQsNyArNjQ3LDggQEAKIAkJcmV0dXJuIGN0cmxfaW53KFNDU1BUUjEpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KIAlyZXR1cm4gMTsKIH0KLSNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSkKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSkgfHwgXAorICAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg2KQogc3RhdGljIGlubGluZSBpbnQgc2NpX3J4ZF9pbihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewogCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlYTAwMDApCkBAIC03NDYsNyArNzUwLDggQEAKICAqLwogCiAjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwKSB8fCBcCi0gICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1KQorICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSkgfHwgXAorICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NikKICNkZWZpbmUgU0NCUlJfVkFMVUUoYnBzLCBjbGspICgoY2xrKzE2KmJwcykvKDE2KmJwcyktMSkKICNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNSkgfHwgXAogICAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIwKSB8fCBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zdW56aWxvZy5jIGIvZHJpdmVycy9zZXJpYWwvc3Vuemlsb2cuYwppbmRleCA0NWEyOTlmLi5lMDlkM2NlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zdW56aWxvZy5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3N1bnppbG9nLmMKQEAgLTE0MzgsMTIgKzE0MzgsMTIgQEAKIAl9IGVsc2UgewogCQlwcmludGsoS0VSTl9JTkZPICIlczogS2V5Ym9hcmQgYXQgTU1JTyAweCVsbHggKGlycSA9ICVkKSAiCiAJCSAgICAgICAiaXMgYSAlc1xuIiwKLQkJICAgICAgIG9wLT5kZXYuYnVzX2lkLAorCQkgICAgICAgZGV2X25hbWUoJm9wLT5kZXYpLAogCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgdXBbMF0ucG9ydC5tYXBiYXNlLAogCQkgICAgICAgb3AtPmlycXNbMF0sIHN1bnppbG9nX3R5cGUoJnVwWzBdLnBvcnQpKTsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IE1vdXNlIGF0IE1NSU8gMHglbGx4IChpcnEgPSAlZCkgIgogCQkgICAgICAgImlzIGEgJXNcbiIsCi0JCSAgICAgICBvcC0+ZGV2LmJ1c19pZCwKKwkJICAgICAgIGRldl9uYW1lKCZvcC0+ZGV2KSwKIAkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHVwWzFdLnBvcnQubWFwYmFzZSwKIAkJICAgICAgIG9wLT5pcnFzWzBdLCBzdW56aWxvZ190eXBlKCZ1cFsxXS5wb3J0KSk7CiAJCWtibV9pbnN0Kys7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NoL2ludGMuYyBiL2RyaXZlcnMvc2gvaW50Yy5jCmluZGV4IDU4ZDI0YzUuLjIyNjlmYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2gvaW50Yy5jCisrKyBiL2RyaXZlcnMvc2gvaW50Yy5jCkBAIC01NjgsNiArNTY4LDEwIEBACiAJaWYgKCFkYXRhWzBdICYmIGRhdGFbMV0pCiAJCXByaW1hcnkgPSAxOwogCisJaWYgKCFkYXRhWzBdICYmICFkYXRhWzFdKQorCQlwcl93YXJuaW5nKCJpbnRjOiBtaXNzaW5nIHVuaXF1ZSBpcnEgbWFzayBmb3IgIgorCQkJICAgImlycSAlZCAodmVjdCAweCUwNHgpXG4iLCBpcnEsIGlycTJldnQoaXJxKSk7CisKIAlkYXRhWzBdID0gZGF0YVswXSA/IGRhdGFbMF0gOiBpbnRjX21hc2tfZGF0YShkZXNjLCBkLCBlbnVtX2lkLCAxKTsKIAlkYXRhWzFdID0gZGF0YVsxXSA/IGRhdGFbMV0gOiBpbnRjX3ByaW9fZGF0YShkZXNjLCBkLCBlbnVtX2lkLCAxKTsKIApAQCAtNjQxLDYgKzY0NSwxNyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdW5zaWduZWQgY2hhciAqaW50Y19ldnQyaXJxX3RhYmxlOworCit1bnNpZ25lZCBpbnQgaW50Y19ldnQyaXJxKHVuc2lnbmVkIGludCB2ZWN0b3IpCit7CisJdW5zaWduZWQgaW50IGlycSA9IGV2dDJpcnEodmVjdG9yKTsKKworCWlmIChpbnRjX2V2dDJpcnFfdGFibGUgJiYgaW50Y19ldnQyaXJxX3RhYmxlW2lycV0pCisJCWlycSA9IGludGNfZXZ0MmlycV90YWJsZVtpcnFdOworCisJcmV0dXJuIGlycTsKK30KIAogdm9pZCBfX2luaXQgcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKHN0cnVjdCBpbnRjX2Rlc2MgKmRlc2MpCiB7CkBAIC03MDUsOCArNzIwLDQwIEBACiAKIAlCVUdfT04oayA+IDI1Nik7IC8qIF9JTlRDX0FERFJfRSgpIGFuZCBfSU5UQ19BRERSX0QoKSBhcmUgOCBiaXRzICovCiAKKwkvKiBrZWVwIHRoZSBmaXJzdCB2ZWN0b3Igb25seSBpZiBzYW1lIGVudW0gaXMgdXNlZCBtdWx0aXBsZSB0aW1lcyAqLwogCWZvciAoaSA9IDA7IGkgPCBkZXNjLT5ucl92ZWN0b3JzOyBpKyspIHsKIAkJc3RydWN0IGludGNfdmVjdCAqdmVjdCA9IGRlc2MtPnZlY3RvcnMgKyBpOworCQlpbnQgZmlyc3RfaXJxID0gZXZ0MmlycSh2ZWN0LT52ZWN0KTsKKworCQlpZiAoIXZlY3QtPmVudW1faWQpCisJCQljb250aW51ZTsKKworCQlmb3IgKGsgPSBpICsgMTsgayA8IGRlc2MtPm5yX3ZlY3RvcnM7IGsrKykgeworCQkJc3RydWN0IGludGNfdmVjdCAqdmVjdDIgPSBkZXNjLT52ZWN0b3JzICsgazsKKworCQkJaWYgKHZlY3QtPmVudW1faWQgIT0gdmVjdDItPmVudW1faWQpCisJCQkJY29udGludWU7CisKKwkJCXZlY3QyLT5lbnVtX2lkID0gMDsKKworCQkJaWYgKCFpbnRjX2V2dDJpcnFfdGFibGUpCisJCQkJaW50Y19ldnQyaXJxX3RhYmxlID0gYWxsb2NfYm9vdG1lbShOUl9JUlFTKTsKKworCQkJaWYgKCFpbnRjX2V2dDJpcnFfdGFibGUpIHsKKwkJCQlwcl93YXJuaW5nKCJpbnRjOiBjYW5ub3QgYWxsb2NhdGUgZXZ0MmlycSFcbiIpOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlpbnRjX2V2dDJpcnFfdGFibGVbZXZ0MmlycSh2ZWN0Mi0+dmVjdCldID0gZmlyc3RfaXJxOworCQl9CisJfQorCisJLyogcmVnaXN0ZXIgdGhlIHZlY3RvcnMgb25lIGJ5IG9uZSAqLworCWZvciAoaSA9IDA7IGkgPCBkZXNjLT5ucl92ZWN0b3JzOyBpKyspIHsKKwkJc3RydWN0IGludGNfdmVjdCAqdmVjdCA9IGRlc2MtPnZlY3RvcnMgKyBpOworCisJCWlmICghdmVjdC0+ZW51bV9pZCkKKwkJCWNvbnRpbnVlOwogCiAJCWludGNfcmVnaXN0ZXJfaXJxKGRlc2MsIGQsIHZlY3QtPmVudW1faWQsIGV2dDJpcnEodmVjdC0+dmVjdCkpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2gvbWFwbGUvbWFwbGUuYyBiL2RyaXZlcnMvc2gvbWFwbGUvbWFwbGUuYwppbmRleCA2M2YwZGUyLi5jYWIxYWI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NoL21hcGxlL21hcGxlLmMKKysrIGIvZHJpdmVycy9zaC9tYXBsZS9tYXBsZS5jCkBAIC0xLDE2ICsxLDEwIEBACiAvKgogICogQ29yZSBtYXBsZSBidXMgZnVuY3Rpb25hbGl0eQogICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQWRyaWFuIE1jTWVuYW1pbgorICogIENvcHlyaWdodCAoQykgMjAwNyAtIDIwMDkgQWRyaWFuIE1jTWVuYW1pbgogICogIENvcHlyaWdodCAoQykgMjAwMSAtIDIwMDggUGF1bCBNdW5kdAotICoKLSAqIEJhc2VkIG9uIDIuNCBjb2RlIGJ5OgotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMSBZQUVHQVNISSBUYWtlc2hpCisgKiAgQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwMSBZQUVHQVNISSBUYWtlc2hpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIE0uIFIuIEJyb3duCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBhdWwgTXVuZHQKLSAqCi0gKiBhbmQgb3RoZXJzLgogICoKICAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCkBAIC0zMiw3ICsyNiw3IEBACiAjaW5jbHVkZSA8bWFjaC9kbWEuaD4KICNpbmNsdWRlIDxtYWNoL3N5c2FzaWMuaD4KIAotTU9EVUxFX0FVVEhPUigiWWFlZ2FzaGkgVGFrZXNoaSwgUGF1bCBNdW5kdCwgTS4gUi4gQnJvd24sIEFkcmlhbiBNY01lbmFtaW4iKTsKK01PRFVMRV9BVVRIT1IoIkFkcmlhbiBNY01lbmFtaW4gPGFkcmlhbkBtY21lbi5kZW1vbi5jby51az4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiTWFwbGUgYnVzIGRyaXZlciBmb3IgRHJlYW1jYXN0Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CiBNT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgie3tTRUdBLCBEcmVhbWNhc3QvTWFwbGV9fSIpOwpAQCAtNDksNyArNDMsNyBAQAogLyogbXV0ZXggdG8gcHJvdGVjdCBxdWV1ZSBvZiB3YWl0aW5nIHBhY2tldHMgKi8KIHN0YXRpYyBERUZJTkVfTVVURVgobWFwbGVfd2xpc3RfbG9jayk7CiAKLXN0YXRpYyBzdHJ1Y3QgbWFwbGVfZHJpdmVyIG1hcGxlX2R1bW15X2RyaXZlcjsKK3N0YXRpYyBzdHJ1Y3QgbWFwbGVfZHJpdmVyIG1hcGxlX3Vuc3VwcG9ydGVkX2RldmljZTsKIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlIG1hcGxlX2J1czsKIHN0YXRpYyBpbnQgc3ViZGV2aWNlX21hcFtNQVBMRV9QT1JUU107CiBzdGF0aWMgdW5zaWduZWQgbG9uZyAqbWFwbGVfc2VuZGJ1ZiwgKm1hcGxlX3NlbmRwdHIsICptYXBsZV9sYXN0cHRyOwpAQCAtNjIsOCArNTYsOSBAQAogCWludCB1bml0OwogfTsKIAotc3RhdGljIGJvb2wgY2hlY2tlZFs0XTsKLXN0YXRpYyBzdHJ1Y3QgbWFwbGVfZGV2aWNlICpiYXNldW5pdHNbNF07CitzdGF0aWMgYm9vbCBjaGVja2VkW01BUExFX1BPUlRTXTsKK3N0YXRpYyBib29sIGVtcHR5W01BUExFX1BPUlRTXTsKK3N0YXRpYyBzdHJ1Y3QgbWFwbGVfZGV2aWNlICpiYXNldW5pdHNbTUFQTEVfUE9SVFNdOwogCiAvKioKICAqIG1hcGxlX2RyaXZlcl9yZWdpc3RlciAtIHJlZ2lzdGVyIGEgbWFwbGUgZHJpdmVyCkBAIC05NywxMiArOTIsMjAgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKG1hcGxlX2RyaXZlcl91bnJlZ2lzdGVyKTsKIAogLyogc2V0IGhhcmR3YXJlIHJlZ2lzdGVycyB0byBlbmFibGUgbmV4dCByb3VuZCBvZiBkbWEgKi8KLXN0YXRpYyB2b2lkIG1hcGxlYnVzX2RtYV9yZXNldCh2b2lkKQorc3RhdGljIHZvaWQgbWFwbGVfZG1hX3Jlc2V0KHZvaWQpCiB7CiAJY3RybF9vdXRsKE1BUExFX01BR0lDLCBNQVBMRV9SRVNFVCk7CiAJLyogc2V0IHRyaWcgdHlwZSB0byAwIGZvciBzb2Z0d2FyZSB0cmlnZ2VyLCAxIGZvciBoYXJkd2FyZSAoVkJMQU5LKSAqLwogCWN0cmxfb3V0bCgxLCBNQVBMRV9UUklHVFlQRSk7Ci0JY3RybF9vdXRsKE1BUExFXzJNQlBTIHwgTUFQTEVfVElNRU9VVCg1MDAwMCksIE1BUExFX1NQRUVEKTsKKwkvKgorCSogTWFwbGUgc3lzdGVtIHJlZ2lzdGVyCisJKiBiaXRzIDMxIC0gMTYJdGltZW91dCBpbiB1bml0cyBvZiAyMG5zZWMKKwkqIGJpdCAxMgloYXJkIHRyaWdnZXIgLSBzZXQgMCB0byBrZWVwIHJlc3BvbmRpbmcgdG8gVkJMQU5LCisJKiBiaXRzIDkgLSA4CXNldCAwMCBmb3IgMiBNYnBzLCAwMSBmb3IgMSBNYnBzCisJKiBiaXRzIDMgLSAwCWRlbGF5IChpbiAxLjNtcykgYmV0d2VlbiBWQkxBTksgYW5kIHN0YXJ0IG9mIERNQQorCSogbWF4IGRlbGF5IGlzIDExCisJKi8KKwljdHJsX291dGwoTUFQTEVfMk1CUFMgfCBNQVBMRV9USU1FT1VUKDB4RkZGRiksIE1BUExFX1NQRUVEKTsKIAljdHJsX291dGwoUEhZU0FERFIobWFwbGVfc2VuZGJ1ZiksIE1BUExFX0RNQUFERFIpOwogCWN0cmxfb3V0bCgxLCBNQVBMRV9FTkFCTEUpOwogfQpAQCAtMTM0LDIxICsxMzcsMTYgQEAKIHsKIAlzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2OwogCXN0cnVjdCBtYXBsZXEgKm1xOwotCWlmICghZGV2KQotCQlyZXR1cm47CisKIAltZGV2ID0gdG9fbWFwbGVfZGV2KGRldik7CiAJbXEgPSBtZGV2LT5tcTsKLQlpZiAobXEpIHsKLQkJaWYgKG1xLT5yZWN2YnVmZGNzcCkKLQkJCWttZW1fY2FjaGVfZnJlZShtYXBsZV9xdWV1ZV9jYWNoZSwgbXEtPnJlY3ZidWZkY3NwKTsKLQkJa2ZyZWUobXEpOwotCQltcSA9IE5VTEw7Ci0JfQorCWttZW1fY2FjaGVfZnJlZShtYXBsZV9xdWV1ZV9jYWNoZSwgbXEtPnJlY3ZidWYpOworCWtmcmVlKG1xKTsKIAlrZnJlZShtZGV2KTsKIH0KIAogLyoqCi0gKiBtYXBsZV9hZGRfcGFja2V0IC0gYWRkIGEgc2luZ2xlIGluc3RydWN0aW9uIHRvIHRoZSBxdWV1ZQorICogbWFwbGVfYWRkX3BhY2tldCAtIGFkZCBhIHNpbmdsZSBpbnN0cnVjdGlvbiB0byB0aGUgbWFwbGUgYnVzIHF1ZXVlCiAgKiBAbWRldjogbWFwbGUgZGV2aWNlCiAgKiBAZnVuY3Rpb246IGZ1bmN0aW9uIG9uIGRldmljZSBiZWluZyBxdWVyaWVkCiAgKiBAY29tbWFuZDogbWFwbGUgY29tbWFuZCB0byBhZGQKQEAgLTE1OCwyMyArMTU2LDEyIEBACiBpbnQgbWFwbGVfYWRkX3BhY2tldChzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2LCB1MzIgZnVuY3Rpb24sIHUzMiBjb21tYW5kLAogCXNpemVfdCBsZW5ndGgsIHZvaWQgKmRhdGEpCiB7Ci0JaW50IGxvY2tpbmcsIHJldCA9IDA7CisJaW50IHJldCA9IDA7CiAJdm9pZCAqc2VuZGJ1ZiA9IE5VTEw7CiAKLQltdXRleF9sb2NrKCZtYXBsZV93bGlzdF9sb2NrKTsKLQkvKiBib3VuY2UgaWYgZGV2aWNlIGFscmVhZHkgbG9ja2VkICovCi0JbG9ja2luZyA9IG11dGV4X2lzX2xvY2tlZCgmbWRldi0+bXEtPm11dGV4KTsKLQlpZiAobG9ja2luZykgewotCQlyZXQgPSAtRUJVU1k7Ci0JCWdvdG8gb3V0OwotCX0KLQotCW11dGV4X2xvY2soJm1kZXYtPm1xLT5tdXRleCk7Ci0KIAlpZiAobGVuZ3RoKSB7Ci0JCXNlbmRidWYgPSBrbWFsbG9jKGxlbmd0aCAqIDQsIEdGUF9LRVJORUwpOworCQlzZW5kYnVmID0ga3phbGxvYyhsZW5ndGggKiA0LCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFzZW5kYnVmKSB7Ci0JCQltdXRleF91bmxvY2soJm1kZXYtPm1xLT5tdXRleCk7CiAJCQlyZXQgPSAtRU5PTUVNOwogCQkJZ290byBvdXQ7CiAJCX0KQEAgLTE4Nyw4NCArMTc0LDM2IEBACiAJCW1lbWNweShzZW5kYnVmICsgNCwgZGF0YSwgKGxlbmd0aCAtIDEpICogNCk7CiAJbWRldi0+bXEtPnNlbmRidWYgPSBzZW5kYnVmOwogCi0JbGlzdF9hZGQoJm1kZXYtPm1xLT5saXN0LCAmbWFwbGVfd2FpdHEpOwotb3V0OgorCW11dGV4X2xvY2soJm1hcGxlX3dsaXN0X2xvY2spOworCWxpc3RfYWRkX3RhaWwoJm1kZXYtPm1xLT5saXN0LCAmbWFwbGVfd2FpdHEpOwogCW11dGV4X3VubG9jaygmbWFwbGVfd2xpc3RfbG9jayk7CitvdXQ6CiAJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG1hcGxlX2FkZF9wYWNrZXQpOwogCi0vKioKLSAqIG1hcGxlX2FkZF9wYWNrZXRfc2xlZXBzIC0gYWRkIGEgc2luZ2xlIGluc3RydWN0aW9uIHRvIHRoZSBxdWV1ZQotICogQG1kZXY6IG1hcGxlIGRldmljZQotICogQGZ1bmN0aW9uOiBmdW5jdGlvbiBvbiBkZXZpY2UgYmVpbmcgcXVlcmllZAotICogQGNvbW1hbmQ6IG1hcGxlIGNvbW1hbmQgdG8gYWRkCi0gKiBAbGVuZ3RoOiBsZW5ndGggb2YgY29tbWFuZCBzdHJpbmcgKGluIDMyIGJpdCB3b3JkcykKLSAqIEBkYXRhOiByZW1haW5kZXIgb2YgY29tbWFuZCBzdHJpbmcKLSAqCi0gKiBTYW1lIGFzIG1hcGxlX2FkZF9wYWNrZXQoKSwgYnV0IHdhaXRzIGZvciB0aGUgbG9jayB0byBiZWNvbWUgZnJlZS4KLSAqLwotaW50IG1hcGxlX2FkZF9wYWNrZXRfc2xlZXBzKHN0cnVjdCBtYXBsZV9kZXZpY2UgKm1kZXYsIHUzMiBmdW5jdGlvbiwKLQl1MzIgY29tbWFuZCwgc2l6ZV90IGxlbmd0aCwgdm9pZCAqZGF0YSkKLXsKLQlpbnQgbG9ja2luZywgcmV0ID0gMDsKLQl2b2lkICpzZW5kYnVmID0gTlVMTDsKLQotCWxvY2tpbmcgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJm1kZXYtPm1xLT5tdXRleCk7Ci0JaWYgKGxvY2tpbmcpIHsKLQkJcmV0ID0gLUVJTzsKLQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKGxlbmd0aCkgewotCQlzZW5kYnVmID0ga21hbGxvYyhsZW5ndGggKiA0LCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFzZW5kYnVmKSB7Ci0JCQltdXRleF91bmxvY2soJm1kZXYtPm1xLT5tdXRleCk7Ci0JCQlyZXQgPSAtRU5PTUVNOwotCQkJZ290byBvdXQ7Ci0JCX0KLQkJKChfX2JlMzIgKilzZW5kYnVmKVswXSA9IGNwdV90b19iZTMyKGZ1bmN0aW9uKTsKLQl9Ci0KLQltZGV2LT5tcS0+Y29tbWFuZCA9IGNvbW1hbmQ7Ci0JbWRldi0+bXEtPmxlbmd0aCA9IGxlbmd0aDsKLQlpZiAobGVuZ3RoID4gMSkKLQkJbWVtY3B5KHNlbmRidWYgKyA0LCBkYXRhLCAobGVuZ3RoIC0gMSkgKiA0KTsKLQltZGV2LT5tcS0+c2VuZGJ1ZiA9IHNlbmRidWY7Ci0KLQltdXRleF9sb2NrKCZtYXBsZV93bGlzdF9sb2NrKTsKLQlsaXN0X2FkZCgmbWRldi0+bXEtPmxpc3QsICZtYXBsZV93YWl0cSk7Ci0JbXV0ZXhfdW5sb2NrKCZtYXBsZV93bGlzdF9sb2NrKTsKLW91dDoKLQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTF9HUEwobWFwbGVfYWRkX3BhY2tldF9zbGVlcHMpOwotCiBzdGF0aWMgc3RydWN0IG1hcGxlcSAqbWFwbGVfYWxsb2NxKHN0cnVjdCBtYXBsZV9kZXZpY2UgKm1kZXYpCiB7CiAJc3RydWN0IG1hcGxlcSAqbXE7CiAKLQltcSA9IGttYWxsb2Moc2l6ZW9mKCptcSksIEdGUF9LRVJORUwpOworCW1xID0ga3phbGxvYyhzaXplb2YoKm1xKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFtcSkKIAkJZ290byBmYWlsZWRfbm9tZW07CiAKKwlJTklUX0xJU1RfSEVBRCgmbXEtPmxpc3QpOwogCW1xLT5kZXYgPSBtZGV2OwotCW1xLT5yZWN2YnVmZGNzcCA9IGttZW1fY2FjaGVfemFsbG9jKG1hcGxlX3F1ZXVlX2NhY2hlLCBHRlBfS0VSTkVMKTsKLQltcS0+cmVjdmJ1ZiA9ICh2b2lkICopIFAyU0VHQUREUihtcS0+cmVjdmJ1ZmRjc3ApOworCW1xLT5yZWN2YnVmID0ga21lbV9jYWNoZV96YWxsb2MobWFwbGVfcXVldWVfY2FjaGUsIEdGUF9LRVJORUwpOwogCWlmICghbXEtPnJlY3ZidWYpCiAJCWdvdG8gZmFpbGVkX3AyOwotCS8qCi0JICogbW9zdCBkZXZpY2VzIGRvIG5vdCBuZWVkIHRoZSBtdXRleCAtIGJ1dAotCSAqIGFueXRoaW5nIHRoYXQgaW5qZWN0cyBibG9jayByZWFkcyBvciB3cml0ZXMKLQkgKiB3aWxsIHJlbHkgb24gaXQKLQkgKi8KLQltdXRleF9pbml0KCZtcS0+bXV0ZXgpOworCW1xLT5yZWN2YnVmLT5idWYgPSAmKChtcS0+cmVjdmJ1Zi0+YnVmeClbMF0pOwogCiAJcmV0dXJuIG1xOwogCiBmYWlsZWRfcDI6CiAJa2ZyZWUobXEpOwogZmFpbGVkX25vbWVtOgorCWRldl9lcnIoJm1kZXYtPmRldiwgImNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGRldmljZSAoJWQsICVkKVxuIiwKKwkJbWRldi0+cG9ydCwgbWRldi0+dW5pdCk7CiAJcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTI3MiwxMiArMjExLDE2IEBACiB7CiAJc3RydWN0IG1hcGxlX2RldmljZSAqbWRldjsKIAorCS8qIHplcm8gdGhpcyBvdXQgdG8gYXZvaWQga29iaiBzdWJzeXN0ZW0KKwkqIHRoaW5raW5nIGl0IGhhcyBhbHJlYWR5IGJlZW4gcmVnaXN0ZXJlZCAqLworCiAJbWRldiA9IGt6YWxsb2Moc2l6ZW9mKCptZGV2KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFtZGV2KQogCQlyZXR1cm4gTlVMTDsKIAogCW1kZXYtPnBvcnQgPSBwb3J0OwogCW1kZXYtPnVuaXQgPSB1bml0OworCiAJbWRldi0+bXEgPSBtYXBsZV9hbGxvY3EobWRldik7CiAKIAlpZiAoIW1kZXYtPm1xKSB7CkBAIC0yODYsMTkgKzIyOSwxNCBAQAogCX0KIAltZGV2LT5kZXYuYnVzID0gJm1hcGxlX2J1c190eXBlOwogCW1kZXYtPmRldi5wYXJlbnQgPSAmbWFwbGVfYnVzOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJm1kZXYtPm1hcGxlX3dhaXQpOwogCXJldHVybiBtZGV2OwogfQogCiBzdGF0aWMgdm9pZCBtYXBsZV9mcmVlX2RldihzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2KQogewotCWlmICghbWRldikKLQkJcmV0dXJuOwotCWlmIChtZGV2LT5tcSkgewotCQlpZiAobWRldi0+bXEtPnJlY3ZidWZkY3NwKQotCQkJa21lbV9jYWNoZV9mcmVlKG1hcGxlX3F1ZXVlX2NhY2hlLAotCQkJCW1kZXYtPm1xLT5yZWN2YnVmZGNzcCk7Ci0JCWtmcmVlKG1kZXYtPm1xKTsKLQl9CisJa21lbV9jYWNoZV9mcmVlKG1hcGxlX3F1ZXVlX2NhY2hlLCBtZGV2LT5tcS0+cmVjdmJ1Zik7CisJa2ZyZWUobWRldi0+bXEpOwogCWtmcmVlKG1kZXYpOwogfQogCkBAIC0zMjAsNyArMjU4LDcgQEAKIAltYXBsZV9sYXN0cHRyID0gbWFwbGVfc2VuZHB0cjsKIAogCSptYXBsZV9zZW5kcHRyKysgPSAocG9ydCA8PCAxNikgfCBsZW4gfCAweDgwMDAwMDAwOwotCSptYXBsZV9zZW5kcHRyKysgPSBQSFlTQUREUihtcS0+cmVjdmJ1Zik7CisJKm1hcGxlX3NlbmRwdHIrKyA9IFBIWVNBRERSKG1xLT5yZWN2YnVmLT5idWYpOwogCSptYXBsZV9zZW5kcHRyKysgPQogCSAgICBtcS0+Y29tbWFuZCB8ICh0byA8PCA4KSB8IChmcm9tIDw8IDE2KSB8IChsZW4gPDwgMjQpOwogCXdoaWxlIChsZW4tLSA+IDApCkBAIC0zMzMsMjAgKzI3MSwyOCBAQAogCWludCBpLCBtYXBsZV9wYWNrZXRzID0gMDsKIAlzdHJ1Y3QgbWFwbGVxICptcSwgKm5tcTsKIAorCWlmICghbWFwbGVfZG1hX2RvbmUoKSkKKwkJcmV0dXJuOworCisJLyogZGlzYWJsZSBETUEgKi8KKwljdHJsX291dGwoMCwgTUFQTEVfRU5BQkxFKTsKKwogCWlmICghbGlzdF9lbXB0eSgmbWFwbGVfc2VudHEpKQotCQlyZXR1cm47CisJCWdvdG8gZmluaXNoOworCiAJbXV0ZXhfbG9jaygmbWFwbGVfd2xpc3RfbG9jayk7Ci0JaWYgKGxpc3RfZW1wdHkoJm1hcGxlX3dhaXRxKSB8fCAhbWFwbGVfZG1hX2RvbmUoKSkgeworCWlmIChsaXN0X2VtcHR5KCZtYXBsZV93YWl0cSkpIHsKIAkJbXV0ZXhfdW5sb2NrKCZtYXBsZV93bGlzdF9sb2NrKTsKLQkJcmV0dXJuOworCQlnb3RvIGZpbmlzaDsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZtYXBsZV93bGlzdF9sb2NrKTsKKwogCW1hcGxlX2xhc3RwdHIgPSBtYXBsZV9zZW5kYnVmOwogCW1hcGxlX3NlbmRwdHIgPSBtYXBsZV9zZW5kYnVmOwotCW11dGV4X2xvY2soJm1hcGxlX3dsaXN0X2xvY2spOworCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG1xLCBubXEsICZtYXBsZV93YWl0cSwgbGlzdCkgewogCQltYXBsZV9idWlsZF9ibG9jayhtcSk7Ci0JCWxpc3RfbW92ZSgmbXEtPmxpc3QsICZtYXBsZV9zZW50cSk7CisJCWxpc3RfZGVsX2luaXQoJm1xLT5saXN0KTsKKwkJbGlzdF9hZGRfdGFpbCgmbXEtPmxpc3QsICZtYXBsZV9zZW50cSk7CiAJCWlmIChtYXBsZV9wYWNrZXRzKysgPiBNQVBMRV9NQVhQQUNLRVRTKQogCQkJYnJlYWs7CiAJfQpAQCAtMzU2LDEwICszMDIsMTMgQEAKIAkJCWRtYV9jYWNoZV9zeW5jKDAsIG1hcGxlX3NlbmRidWYgKyBpICogUEFHRV9TSVpFLAogCQkJCSAgICAgICBQQUdFX1NJWkUsIERNQV9CSURJUkVDVElPTkFMKTsKIAl9CisKK2ZpbmlzaDoKKwltYXBsZV9kbWFfcmVzZXQoKTsKIH0KIAogLyogY2hlY2sgaWYgdGhlcmUgaXMgYSBkcml2ZXIgcmVnaXN0ZXJlZCBsaWtlbHkgdG8gbWF0Y2ggdGhpcyBkZXZpY2UgKi8KLXN0YXRpYyBpbnQgY2hlY2tfbWF0Y2hpbmdfbWFwbGVfZHJpdmVyKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcml2ZXIsCitzdGF0aWMgaW50IG1hcGxlX2NoZWNrX21hdGNoaW5nX2RyaXZlcihzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJpdmVyLAogCQkJCQl2b2lkICpkZXZwdHIpCiB7CiAJc3RydWN0IG1hcGxlX2RyaXZlciAqbWFwbGVfZHJ2OwpAQCAtMzc0LDEwICszMjMsNyBAQAogCiBzdGF0aWMgdm9pZCBtYXBsZV9kZXRhY2hfZHJpdmVyKHN0cnVjdCBtYXBsZV9kZXZpY2UgKm1kZXYpCiB7Ci0JaWYgKCFtZGV2KQotCQlyZXR1cm47CiAJZGV2aWNlX3VucmVnaXN0ZXIoJm1kZXYtPmRldik7Ci0JbWRldiA9IE5VTEw7CiB9CiAKIC8qIHByb2Nlc3MgaW5pdGlhbCBNQVBMRV9DT01NQU5EX0RFVklORk8gZm9yIGVhY2ggZGV2aWNlIG9yIHBvcnQgKi8KQEAgLTM4NSw5ICszMzEsOSBAQAogewogCWNoYXIgKnAsICpyZWN2YnVmOwogCXVuc2lnbmVkIGxvbmcgZnVuY3Rpb247Ci0JaW50IG1hdGNoZWQsIHJldHZhbDsKKwlpbnQgbWF0Y2hlZCwgZXJyb3I7CiAKLQlyZWN2YnVmID0gbWRldi0+bXEtPnJlY3ZidWY7CisJcmVjdmJ1ZiA9IG1kZXYtPm1xLT5yZWN2YnVmLT5idWY7CiAJLyogY29weSB0aGUgZGF0YSBhcyBpbmRpdmlkdWFsIGVsZW1lbnRzIGluCiAJKiBjYXNlIG9mIG1lbW9yeSBvcHRpbWlzYXRpb24gKi8KIAltZW1jcHkoJm1kZXYtPmRldmluZm8uZnVuY3Rpb24sIHJlY3ZidWYgKyA0LCA0KTsKQEAgLTM5NSw3ICszNDEsNiBAQAogCW1lbWNweSgmbWRldi0+ZGV2aW5mby5hcmVhX2NvZGUsIHJlY3ZidWYgKyAyMCwgMSk7CiAJbWVtY3B5KCZtZGV2LT5kZXZpbmZvLmNvbm5lY3Rvcl9kaXJlY3Rpb24sIHJlY3ZidWYgKyAyMSwgMSk7CiAJbWVtY3B5KCZtZGV2LT5kZXZpbmZvLnByb2R1Y3RfbmFtZVswXSwgcmVjdmJ1ZiArIDIyLCAzMCk7Ci0JbWVtY3B5KCZtZGV2LT5kZXZpbmZvLnByb2R1Y3RfbGljZW5jZVswXSwgcmVjdmJ1ZiArIDUyLCA2MCk7CiAJbWVtY3B5KCZtZGV2LT5kZXZpbmZvLnN0YW5kYnlfcG93ZXIsIHJlY3ZidWYgKyAxMTIsIDIpOwogCW1lbWNweSgmbWRldi0+ZGV2aW5mby5tYXhfcG93ZXIsIHJlY3ZidWYgKyAxMTQsIDIpOwogCW1lbWNweShtZGV2LT5wcm9kdWN0X25hbWUsIG1kZXYtPmRldmluZm8ucHJvZHVjdF9uYW1lLCAzMCk7CkBAIC00MTQsNDMgKzM1OSwzOSBAQAogCQllbHNlCiAJCQlicmVhazsKIAotCXByaW50ayhLRVJOX0lORk8gIk1hcGxlIGRldmljZSBkZXRlY3RlZDogJXNcbiIsCi0JCW1kZXYtPnByb2R1Y3RfbmFtZSk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiTWFwbGUgZGV2aWNlOiAlc1xuIiwgbWRldi0+cHJvZHVjdF9saWNlbmNlKTsKLQogCWZ1bmN0aW9uID0gYmUzMl90b19jcHUobWRldi0+ZGV2aW5mby5mdW5jdGlvbik7CiAKKwlkZXZfaW5mbygmbWRldi0+ZGV2LCAiZGV0ZWN0ZWQgJXM6IGZ1bmN0aW9uIDB4JWxYOiBhdCAoJWQsICVkKVxuIiwKKwkJbWRldi0+cHJvZHVjdF9uYW1lLCBmdW5jdGlvbiwgbWRldi0+cG9ydCwgbWRldi0+dW5pdCk7CisKIAlpZiAoZnVuY3Rpb24gPiAweDIwMCkgewogCQkvKiBEbyB0aGlzIHNpbGVudGx5IC0gYXMgbm90IGEgcmVhbCBkZXZpY2UgKi8KIAkJZnVuY3Rpb24gPSAwOwotCQltZGV2LT5kcml2ZXIgPSAmbWFwbGVfZHVtbXlfZHJpdmVyOwotCQlzcHJpbnRmKG1kZXYtPmRldi5idXNfaWQsICIlZDowLnBvcnQiLCBtZGV2LT5wb3J0KTsKKwkJbWRldi0+ZHJpdmVyID0gJm1hcGxlX3Vuc3VwcG9ydGVkX2RldmljZTsKKwkJZGV2X3NldF9uYW1lKCZtZGV2LT5kZXYsICIlZDowLnBvcnQiLCBtZGV2LT5wb3J0KTsKIAl9IGVsc2UgewotCQlwcmludGsoS0VSTl9JTkZPCi0JCQkiTWFwbGUgYnVzIGF0ICglZCwgJWQpOiBGdW5jdGlvbiAweCVsWFxuIiwKLQkJCW1kZXYtPnBvcnQsIG1kZXYtPnVuaXQsIGZ1bmN0aW9uKTsKLQogCQltYXRjaGVkID0KIAkJCWJ1c19mb3JfZWFjaF9kcnYoJm1hcGxlX2J1c190eXBlLCBOVUxMLCBtZGV2LAotCQkJCWNoZWNrX21hdGNoaW5nX21hcGxlX2RyaXZlcik7CisJCQkJbWFwbGVfY2hlY2tfbWF0Y2hpbmdfZHJpdmVyKTsKIAogCQlpZiAobWF0Y2hlZCA9PSAwKSB7CiAJCQkvKiBEcml2ZXIgZG9lcyBub3QgZXhpc3QgeWV0ICovCi0JCQlwcmludGsoS0VSTl9JTkZPCi0JCQkJIk5vIG1hcGxlIGRyaXZlciBmb3VuZC5cbiIpOwotCQkJbWRldi0+ZHJpdmVyID0gJm1hcGxlX2R1bW15X2RyaXZlcjsKKwkJCWRldl9pbmZvKCZtZGV2LT5kZXYsICJubyBkcml2ZXIgZm91bmRcbiIpOworCQkJbWRldi0+ZHJpdmVyID0gJm1hcGxlX3Vuc3VwcG9ydGVkX2RldmljZTsKIAkJfQotCQlzcHJpbnRmKG1kZXYtPmRldi5idXNfaWQsICIlZDowJWQuJWxYIiwgbWRldi0+cG9ydCwKLQkJCW1kZXYtPnVuaXQsIGZ1bmN0aW9uKTsKKwkJZGV2X3NldF9uYW1lKCZtZGV2LT5kZXYsICIlZDowJWQuJWxYIiwgbWRldi0+cG9ydCwKKwkJCSAgICAgbWRldi0+dW5pdCwgZnVuY3Rpb24pOwogCX0KKwogCW1kZXYtPmZ1bmN0aW9uID0gZnVuY3Rpb247CiAJbWRldi0+ZGV2LnJlbGVhc2UgPSAmbWFwbGVfcmVsZWFzZV9kZXZpY2U7Ci0JcmV0dmFsID0gZGV2aWNlX3JlZ2lzdGVyKCZtZGV2LT5kZXYpOwotCWlmIChyZXR2YWwpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTwotCQkiTWFwbGUgYnVzOiBBdHRlbXB0IHRvIHJlZ2lzdGVyIGRldmljZSIKLQkJIiAoJXgsICV4KSBmYWlsZWQuXG4iLAotCQltZGV2LT5wb3J0LCBtZGV2LT51bml0KTsKKworCWF0b21pY19zZXQoJm1kZXYtPmJ1c3ksIDApOworCWVycm9yID0gZGV2aWNlX3JlZ2lzdGVyKCZtZGV2LT5kZXYpOworCWlmIChlcnJvcikgeworCQlkZXZfd2FybigmbWRldi0+ZGV2LCAiY291bGQgbm90IHJlZ2lzdGVyIGRldmljZSBhdCIKKwkJCSIgKCVkLCAlZCksIHdpdGggZXJyb3IgMHglWFxuIiwgbWRldi0+dW5pdCwKKwkJCW1kZXYtPnBvcnQsIGVycm9yKTsKIAkJbWFwbGVfZnJlZV9kZXYobWRldik7CiAJCW1kZXYgPSBOVUxMOwogCQlyZXR1cm47CkBAIC00NjIsNyArNDAzLDcgQEAKICAqIHBvcnQgYW5kIHVuaXQgdGhlbiByZXR1cm4gMSAtIGFsbG93cyBpZGVudGlmaWNhdGlvbgogICogb2Ygd2hpY2ggZGV2aWNlcyBuZWVkIHRvIGJlIGF0dGFjaGVkIG9yIGRldGFjaGVkCiAgKi8KLXN0YXRpYyBpbnQgZGV0YWNoX21hcGxlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsIHZvaWQgKnBvcnRwdHIpCitzdGF0aWMgaW50IGNoZWNrX21hcGxlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsIHZvaWQgKnBvcnRwdHIpCiB7CiAJc3RydWN0IG1hcGxlX2RldmljZV9zcGVjaWZ5ICpkczsKIAlzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2OwpAQCAtNDc3LDIxICs0MTgsMjUgQEAKIHN0YXRpYyBpbnQgc2V0dXBfbWFwbGVfY29tbWFuZHMoc3RydWN0IGRldmljZSAqZGV2aWNlLCB2b2lkICppZ25vcmVkKQogewogCWludCBhZGQ7Ci0Jc3RydWN0IG1hcGxlX2RldmljZSAqbWFwbGVfZGV2ID0gdG9fbWFwbGVfZGV2KGRldmljZSk7Ci0KLQlpZiAoKG1hcGxlX2Rldi0+aW50ZXJ2YWwgPiAwKQotCSAgICAmJiB0aW1lX2FmdGVyKGppZmZpZXMsIG1hcGxlX2Rldi0+d2hlbikpIHsKLQkJLyogYm91bmNlIGlmIHdlIGNhbm5vdCBsb2NrICovCi0JCWFkZCA9IG1hcGxlX2FkZF9wYWNrZXQobWFwbGVfZGV2LAotCQkJYmUzMl90b19jcHUobWFwbGVfZGV2LT5kZXZpbmZvLmZ1bmN0aW9uKSwKKwlzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2ID0gdG9fbWFwbGVfZGV2KGRldmljZSk7CisJaWYgKG1kZXYtPmludGVydmFsID4gMCAmJiBhdG9taWNfcmVhZCgmbWRldi0+YnVzeSkgPT0gMCAmJgorCQl0aW1lX2FmdGVyKGppZmZpZXMsIG1kZXYtPndoZW4pKSB7CisJCS8qIGJvdW5jZSBpZiB3ZSBjYW5ub3QgYWRkICovCisJCWFkZCA9IG1hcGxlX2FkZF9wYWNrZXQobWRldiwKKwkJCWJlMzJfdG9fY3B1KG1kZXYtPmRldmluZm8uZnVuY3Rpb24pLAogCQkJTUFQTEVfQ09NTUFORF9HRVRDT05ELCAxLCBOVUxMKTsKIAkJaWYgKCFhZGQpCi0JCQltYXBsZV9kZXYtPndoZW4gPSBqaWZmaWVzICsgbWFwbGVfZGV2LT5pbnRlcnZhbDsKKwkJCW1kZXYtPndoZW4gPSBqaWZmaWVzICsgbWRldi0+aW50ZXJ2YWw7CiAJfSBlbHNlIHsKIAkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgbWFwbGVfcG5wX3RpbWUpKQotCQkJLyogVGhpcyB3aWxsIGFsc28gYm91bmNlICovCi0JCQltYXBsZV9hZGRfcGFja2V0KG1hcGxlX2RldiwgMCwKLQkJCQlNQVBMRV9DT01NQU5EX0RFVklORk8sIDAsIE5VTEwpOworCQkJLyogRW5zdXJlIHdlIGRvbid0IGhhdmUgYmxvY2sgcmVhZHMgYW5kIGRldmluZm8KKwkJCSogY2FsbHMgaW50ZXJmZXJpbmcgd2l0aCBvbmUgYW5vdGhlciAtIHNvIGZsYWcgdGhlCisJCQkqIGRldmljZSBhcyBidXN5ICovCisJCQlpZiAoYXRvbWljX3JlYWQoJm1kZXYtPmJ1c3kpID09IDApIHsKKwkJCQlhdG9taWNfc2V0KCZtZGV2LT5idXN5LCAxKTsKKwkJCQltYXBsZV9hZGRfcGFja2V0KG1kZXYsIDAsCisJCQkJCU1BUExFX0NPTU1BTkRfREVWSU5GTywgMCwgTlVMTCk7CisJCQl9CiAJfQogCXJldHVybiAwOwogfQpAQCAtNDk5LDI5ICs0NDQsNTAgQEAKIC8qIFZCTEFOSyBib3R0b20gaGFsZiAtIGltcGxlbWVudGVkIHZpYSB3b3JrcXVldWUgKi8KIHN0YXRpYyB2b2lkIG1hcGxlX3ZibGFua19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQlpZiAoIWxpc3RfZW1wdHkoJm1hcGxlX3NlbnRxKSB8fCAhbWFwbGVfZG1hX2RvbmUoKSkKKwlpbnQgeCwgbG9ja2luZzsKKwlzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2OworCisJaWYgKCFtYXBsZV9kbWFfZG9uZSgpKQogCQlyZXR1cm47CiAKIAljdHJsX291dGwoMCwgTUFQTEVfRU5BQkxFKTsKIAorCWlmICghbGlzdF9lbXB0eSgmbWFwbGVfc2VudHEpKQorCQlnb3RvIGZpbmlzaDsKKworCS8qCisJKiBTZXQgdXAgZXNzZW50aWFsIGNvbW1hbmRzIC0gdG8gZmV0Y2ggZGF0YSBhbmQKKwkqIGNoZWNrIGRldmljZXMgYXJlIHN0aWxsIHByZXNlbnQKKwkqLwogCWJ1c19mb3JfZWFjaF9kZXYoJm1hcGxlX2J1c190eXBlLCBOVUxMLCBOVUxMLAotCQkJIHNldHVwX21hcGxlX2NvbW1hbmRzKTsKKwkJc2V0dXBfbWFwbGVfY29tbWFuZHMpOwogCi0JaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgbWFwbGVfcG5wX3RpbWUpKQorCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIG1hcGxlX3BucF90aW1lKSkgeworCQkvKgorCQkqIFNjYW4gdGhlIGVtcHR5IHBvcnRzIC0gYnVzIGlzIGZsYWtleSBhbmQgbWF5IGhhdmUKKwkJKiBtaXMtcmVwb3J0ZWQgZW1wdHluZXNzCisJCSovCisJCWZvciAoeCA9IDA7IHggPCBNQVBMRV9QT1JUUzsgeCsrKSB7CisJCQlpZiAoY2hlY2tlZFt4XSAmJiBlbXB0eVt4XSkgeworCQkJCW1kZXYgPSBiYXNldW5pdHNbeF07CisJCQkJaWYgKCFtZGV2KQorCQkJCQlicmVhazsKKwkJCQlhdG9taWNfc2V0KCZtZGV2LT5idXN5LCAxKTsKKwkJCQlsb2NraW5nID0gbWFwbGVfYWRkX3BhY2tldChtZGV2LCAwLAorCQkJCQlNQVBMRV9DT01NQU5EX0RFVklORk8sIDAsIE5VTEwpOworCQkJCWlmICghbG9ja2luZykKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCiAJCW1hcGxlX3BucF90aW1lID0gamlmZmllcyArIE1BUExFX1BOUF9JTlRFUlZBTDsKLQotCW11dGV4X2xvY2soJm1hcGxlX3dsaXN0X2xvY2spOwotCWlmICghbGlzdF9lbXB0eSgmbWFwbGVfd2FpdHEpICYmIGxpc3RfZW1wdHkoJm1hcGxlX3NlbnRxKSkgewotCQltdXRleF91bmxvY2soJm1hcGxlX3dsaXN0X2xvY2spOwotCQltYXBsZV9zZW5kKCk7Ci0JfSBlbHNlIHsKLQkJbXV0ZXhfdW5sb2NrKCZtYXBsZV93bGlzdF9sb2NrKTsKIAl9CiAKLQltYXBsZWJ1c19kbWFfcmVzZXQoKTsKK2ZpbmlzaDoKKwltYXBsZV9zZW5kKCk7CiB9CiAKLS8qIGhhbmRsZSBkZXZpY2VzIGFkZGVkIHZpYSBob3RwbHVncyAtIHBsYWNpbmcgdGhlbSBvbiBxdWV1ZSBmb3IgREVWSU5GTyovCisvKiBoYW5kbGUgZGV2aWNlcyBhZGRlZCB2aWEgaG90cGx1Z3MgLSBwbGFjaW5nIHRoZW0gb24gcXVldWUgZm9yIERFVklORk8gKi8KIHN0YXRpYyB2b2lkIG1hcGxlX21hcF9zdWJ1bml0cyhzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2LCBpbnQgc3VibWFzaykKIHsKIAlpbnQgcmV0dmFsLCBrLCBkZXZjaGVjazsKQEAgLTUzMyw3ICs0OTksNyBAQAogCQlkcy51bml0ID0gayArIDE7CiAJCXJldHZhbCA9CiAJCSAgICBidXNfZm9yX2VhY2hfZGV2KCZtYXBsZV9idXNfdHlwZSwgTlVMTCwgJmRzLAotCQkJCSAgICAgZGV0YWNoX21hcGxlX2RldmljZSk7CisJCQkJICAgICBjaGVja19tYXBsZV9kZXZpY2UpOwogCQlpZiAocmV0dmFsKSB7CiAJCQlzdWJtYXNrID0gc3VibWFzayA+PiAxOwogCQkJY29udGludWU7CkBAIC01NDMsNiArNTA5LDcgQEAKIAkJCW1kZXZfYWRkID0gbWFwbGVfYWxsb2NfZGV2KG1kZXYtPnBvcnQsIGsgKyAxKTsKIAkJCWlmICghbWRldl9hZGQpCiAJCQkJcmV0dXJuOworCQkJYXRvbWljX3NldCgmbWRldl9hZGQtPmJ1c3ksIDEpOwogCQkJbWFwbGVfYWRkX3BhY2tldChtZGV2X2FkZCwgMCwgTUFQTEVfQ09NTUFORF9ERVZJTkZPLAogCQkJCTAsIE5VTEwpOwogCQkJLyogbWFyayB0aGF0IHdlIGFyZSBjaGVja2luZyBzdWIgZGV2aWNlcyAqLwpAQCAtNTY0LDI3ICs1MzEsNDUgQEAKIH0KIAogLyogaGFuZGxlIGVtcHR5IHBvcnQgb3IgaG90cGx1ZyByZW1vdmFsICovCi1zdGF0aWMgdm9pZCBtYXBsZV9yZXNwb25zZV9ub25lKHN0cnVjdCBtYXBsZV9kZXZpY2UgKm1kZXYsCi0JCQkJc3RydWN0IG1hcGxlcSAqbXEpCitzdGF0aWMgdm9pZCBtYXBsZV9yZXNwb25zZV9ub25lKHN0cnVjdCBtYXBsZV9kZXZpY2UgKm1kZXYpCiB7Ci0JaWYgKG1kZXYtPnVuaXQgIT0gMCkgewotCQlsaXN0X2RlbCgmbXEtPmxpc3QpOwotCQltYXBsZV9jbGVhbl9zdWJtYXAobWRldik7Ci0JCXByaW50ayhLRVJOX0lORk8KLQkJICAgICAgICJNYXBsZSBidXMgZGV2aWNlIGRldGFjaGluZyBhdCAoJWQsICVkKVxuIiwKLQkJICAgICAgIG1kZXYtPnBvcnQsIG1kZXYtPnVuaXQpOworCW1hcGxlX2NsZWFuX3N1Ym1hcChtZGV2KTsKKworCWlmIChsaWtlbHkobWRldi0+dW5pdCAhPSAwKSkgeworCQkvKgorCQkqIEJsb2NrIGRldmljZXMgcGxheSB1cAorCQkqIGFuZCBnaXZlIHRoZSBpbXByZXNzaW9uIHRoZXkgaGF2ZQorCQkqIGJlZW4gcmVtb3ZlZCBldmVuIHdoZW4gc3RpbGwgaW4gcGxhY2Ugb3IKKwkJKiB0cmlwIHRoZSBtdGQgbGF5ZXIgd2hlbiB0aGV5IGhhdmUKKwkJKiByZWFsbHkgZ29uZSAtIHRoaXMgY29kZSB0cmFwcyB0aGF0IGV2ZW50dWFsaXR5CisJCSogYW5kIGVuc3VyZXMgd2UgYXJlbid0IG92ZXJsb2FkZWQgd2l0aCB1c2VsZXNzCisJCSogZXJyb3IgbWVzc2FnZXMKKwkJKi8KKwkJaWYgKG1kZXYtPmNhbl91bmxvYWQpIHsKKwkJCWlmICghbWRldi0+Y2FuX3VubG9hZChtZGV2KSkgeworCQkJCWF0b21pY19zZXQoJm1kZXYtPmJ1c3ksIDIpOworCQkJCXdha2VfdXAoJm1kZXYtPm1hcGxlX3dhaXQpOworCQkJCXJldHVybjsKKwkJCX0KKwkJfQorCisJCWRldl9pbmZvKCZtZGV2LT5kZXYsICJkZXRhY2hpbmcgZGV2aWNlIGF0ICglZCwgJWQpXG4iLAorCQkJbWRldi0+cG9ydCwgbWRldi0+dW5pdCk7CiAJCW1hcGxlX2RldGFjaF9kcml2ZXIobWRldik7CiAJCXJldHVybjsKLQl9Ci0JaWYgKCFzdGFydGVkIHx8ICFmdWxsc2NhbikgewotCQlpZiAoY2hlY2tlZFttZGV2LT5wb3J0XSA9PSBmYWxzZSkgewotCQkJY2hlY2tlZFttZGV2LT5wb3J0XSA9IHRydWU7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJObyBtYXBsZSBkZXZpY2VzIGF0dGFjaGVkIgotCQkJCSIgdG8gcG9ydCAlZFxuIiwgbWRldi0+cG9ydCk7CisJfSBlbHNlIHsKKwkJaWYgKCFzdGFydGVkIHx8ICFmdWxsc2NhbikgeworCQkJaWYgKGNoZWNrZWRbbWRldi0+cG9ydF0gPT0gZmFsc2UpIHsKKwkJCQljaGVja2VkW21kZXYtPnBvcnRdID0gdHJ1ZTsKKwkJCQllbXB0eVttZGV2LT5wb3J0XSA9IHRydWU7CisJCQkJZGV2X2luZm8oJm1kZXYtPmRldiwgIm5vIGRldmljZXMiCisJCQkJCSIgdG8gcG9ydCAlZFxuIiwgbWRldi0+cG9ydCk7CisJCQl9CisJCQlyZXR1cm47CiAJCX0KLQkJcmV0dXJuOwogCX0KLQltYXBsZV9jbGVhbl9zdWJtYXAobWRldik7CisJLyogU29tZSBoYXJkd2FyZSBkZXZpY2VzIGdlbmVyYXRlIGZhbHNlIGRldGFjaCBtZXNzYWdlcyBvbiB1bml0IDAgKi8KKwlhdG9taWNfc2V0KCZtZGV2LT5idXN5LCAwKTsKIH0KIAogLyogcHJlcHJvY2VzcyBob3RwbHVncyBvciBzY2FucyAqLwpAQCAtNTk5LDggKzU4NCwxMSBAQAogCQl9IGVsc2UgewogCQkJaWYgKG1kZXYtPnVuaXQgIT0gMCkKIAkJCQltYXBsZV9hdHRhY2hfZHJpdmVyKG1kZXYpOworCQkJaWYgKG1kZXYtPnVuaXQgPT0gMCkgeworCQkJCWVtcHR5W21kZXYtPnBvcnRdID0gZmFsc2U7CisJCQkJbWFwbGVfYXR0YWNoX2RyaXZlcihtZGV2KTsKKwkJCX0KIAkJfQotCQlyZXR1cm47CiAJfQogCWlmIChtZGV2LT51bml0ID09IDApIHsKIAkJc3VibWFzayA9IHJlY3ZidWZbMl0gJiAweDFGOwpAQCAtNjExLDYgKzU5OSwxNyBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgbWFwbGVfcmVzcG9uc2VfZmlsZWVycihzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2LCB2b2lkICpyZWN2YnVmKQoreworCWlmIChtZGV2LT5maWxlZXJyX2hhbmRsZXIpIHsKKwkJbWRldi0+ZmlsZWVycl9oYW5kbGVyKG1kZXYsIHJlY3ZidWYpOworCQlyZXR1cm47CisJfSBlbHNlCisJCWRldl93YXJuKCZtZGV2LT5kZXYsICJkZXZpY2UgYXQgKCVkLCAlZCkgcmVwb3J0cyIKKwkJCSJmaWxlIGVycm9yIDB4JVhcbiIsIG1kZXYtPnBvcnQsIG1kZXYtPnVuaXQsCisJCQkoKGludCAqKXJlY3ZidWYpWzFdKTsKK30KKwogc3RhdGljIHZvaWQgbWFwbGVfcG9ydF9yZXNjYW4odm9pZCkKIHsKIAlpbnQgaTsKQEAgLTYyMSwxMiArNjIwLDYgQEAKIAkJaWYgKGNoZWNrZWRbaV0gPT0gZmFsc2UpIHsKIAkJCWZ1bGxzY2FuID0gMDsKIAkJCW1kZXYgPSBiYXNldW5pdHNbaV07Ci0JCQkvKgotCQkJICogIHRlc3QgbG9jayBpbiBjYXNlIHNjYW4gaGFzIGZhaWxlZAotCQkJICogIGJ1dCBkZXZpY2UgaXMgc3RpbGwgbG9ja2VkCi0JCQkgKi8KLQkJCWlmIChtdXRleF9pc19sb2NrZWQoJm1kZXYtPm1xLT5tdXRleCkpCi0JCQkJbXV0ZXhfdW5sb2NrKCZtZGV2LT5tcS0+bXV0ZXgpOwogCQkJbWFwbGVfYWRkX3BhY2tldChtZGV2LCAwLCBNQVBMRV9DT01NQU5EX0RFVklORk8sCiAJCQkJMCwgTlVMTCk7CiAJCX0KQEAgLTYzNyw3ICs2MzAsNyBAQAogc3RhdGljIHZvaWQgbWFwbGVfZG1hX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBtYXBsZXEgKm1xLCAqbm1xOwotCXN0cnVjdCBtYXBsZV9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2OwogCWNoYXIgKnJlY3ZidWY7CiAJZW51bSBtYXBsZV9jb2RlIGNvZGU7CiAKQEAgLTY0Niw0MyArNjM5LDU2IEBACiAJY3RybF9vdXRsKDAsIE1BUExFX0VOQUJMRSk7CiAJaWYgKCFsaXN0X2VtcHR5KCZtYXBsZV9zZW50cSkpIHsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG1xLCBubXEsICZtYXBsZV9zZW50cSwgbGlzdCkgewotCQkJcmVjdmJ1ZiA9IG1xLT5yZWN2YnVmOworCQkJbWRldiA9IG1xLT5kZXY7CisJCQlyZWN2YnVmID0gbXEtPnJlY3ZidWYtPmJ1ZjsKKwkJCWRtYV9jYWNoZV9zeW5jKCZtZGV2LT5kZXYsIHJlY3ZidWYsIDB4NDAwLAorCQkJCURNQV9GUk9NX0RFVklDRSk7CiAJCQljb2RlID0gcmVjdmJ1ZlswXTsKLQkJCWRldiA9IG1xLT5kZXY7CiAJCQlrZnJlZShtcS0+c2VuZGJ1Zik7Ci0JCQltdXRleF91bmxvY2soJm1xLT5tdXRleCk7CiAJCQlsaXN0X2RlbF9pbml0KCZtcS0+bGlzdCk7Ci0KIAkJCXN3aXRjaCAoY29kZSkgewogCQkJY2FzZSBNQVBMRV9SRVNQT05TRV9OT05FOgotCQkJCW1hcGxlX3Jlc3BvbnNlX25vbmUoZGV2LCBtcSk7CisJCQkJbWFwbGVfcmVzcG9uc2Vfbm9uZShtZGV2KTsKIAkJCQlicmVhazsKIAogCQkJY2FzZSBNQVBMRV9SRVNQT05TRV9ERVZJTkZPOgotCQkJCW1hcGxlX3Jlc3BvbnNlX2RldmluZm8oZGV2LCByZWN2YnVmKTsKKwkJCQltYXBsZV9yZXNwb25zZV9kZXZpbmZvKG1kZXYsIHJlY3ZidWYpOworCQkJCWF0b21pY19zZXQoJm1kZXYtPmJ1c3ksIDApOwogCQkJCWJyZWFrOwogCiAJCQljYXNlIE1BUExFX1JFU1BPTlNFX0RBVEFUUkY6Ci0JCQkJaWYgKGRldi0+Y2FsbGJhY2spCi0JCQkJCWRldi0+Y2FsbGJhY2sobXEpOworCQkJCWlmIChtZGV2LT5jYWxsYmFjaykKKwkJCQkJbWRldi0+Y2FsbGJhY2sobXEpOworCQkJCWF0b21pY19zZXQoJm1kZXYtPmJ1c3ksIDApOworCQkJCXdha2VfdXAoJm1kZXYtPm1hcGxlX3dhaXQpOwogCQkJCWJyZWFrOwogCiAJCQljYXNlIE1BUExFX1JFU1BPTlNFX0ZJTEVFUlI6CisJCQkJbWFwbGVfcmVzcG9uc2VfZmlsZWVycihtZGV2LCByZWN2YnVmKTsKKwkJCQlhdG9taWNfc2V0KCZtZGV2LT5idXN5LCAwKTsKKwkJCQl3YWtlX3VwKCZtZGV2LT5tYXBsZV93YWl0KTsKKwkJCQlicmVhazsKKwogCQkJY2FzZSBNQVBMRV9SRVNQT05TRV9BR0FJTjoKIAkJCWNhc2UgTUFQTEVfUkVTUE9OU0VfQkFEQ01EOgogCQkJY2FzZSBNQVBMRV9SRVNQT05TRV9CQURGVU5DOgotCQkJCXByaW50ayhLRVJOX0RFQlVHCi0JCQkJICAgICAgICJNYXBsZSBub24tZmF0YWwgZXJyb3IgMHglWFxuIiwKLQkJCQkgICAgICAgY29kZSk7CisJCQkJZGV2X3dhcm4oJm1kZXYtPmRldiwgIm5vbi1mYXRhbCBlcnJvciIKKwkJCQkJIiAweCVYIGF0ICglZCwgJWQpXG4iLCBjb2RlLAorCQkJCQltZGV2LT5wb3J0LCBtZGV2LT51bml0KTsKKwkJCQlhdG9taWNfc2V0KCZtZGV2LT5idXN5LCAwKTsKIAkJCQlicmVhazsKIAogCQkJY2FzZSBNQVBMRV9SRVNQT05TRV9BTExJTkZPOgotCQkJCXByaW50ayhLRVJOX0RFQlVHCi0JCQkJICAgICAgICJNYXBsZSAtIGV4dGVuZGVkIGRldmljZSBpbmZvcm1hdGlvbiIKLQkJCQkJIiBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJCQlkZXZfbm90aWNlKCZtZGV2LT5kZXYsICJleHRlbmRlZCIKKwkJCQkiIGRldmljZSBpbmZvcm1hdGlvbiByZXF1ZXN0IGZvciAoJWQsICVkKSIKKwkJCQkiIGJ1dCBjYWxsIGlzIG5vdCBzdXBwb3J0ZWRcbiIsIG1kZXYtPnBvcnQsCisJCQkJbWRldi0+dW5pdCk7CisJCQkJYXRvbWljX3NldCgmbWRldi0+YnVzeSwgMCk7CiAJCQkJYnJlYWs7CiAKIAkJCWNhc2UgTUFQTEVfUkVTUE9OU0VfT0s6CisJCQkJYXRvbWljX3NldCgmbWRldi0+YnVzeSwgMCk7CisJCQkJd2FrZV91cCgmbWRldi0+bWFwbGVfd2FpdCk7CiAJCQkJYnJlYWs7CiAKIAkJCWRlZmF1bHQ6CkBAIC02OTksMjAgKzcwNSwxOSBAQAogCQlpZiAoIWZ1bGxzY2FuKQogCQkJbWFwbGVfcG9ydF9yZXNjYW4oKTsKIAkJLyogbWFyayB0aGF0IHdlIGhhdmUgYmVlbiB0aHJvdWdoIHRoZSBmaXJzdCBzY2FuICovCi0JCWlmIChzdGFydGVkID09IDApCi0JCQlzdGFydGVkID0gMTsKKwkJc3RhcnRlZCA9IDE7CiAJfQotCW1hcGxlYnVzX2RtYV9yZXNldCgpOworCW1hcGxlX3NlbmQoKTsKIH0KIAotc3RhdGljIGlycXJldHVybl90IG1hcGxlYnVzX2RtYV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQorc3RhdGljIGlycXJldHVybl90IG1hcGxlX2RtYV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewogCS8qIExvYWQgZXZlcnl0aGluZyBpbnRvIHRoZSBib3R0b20gaGFsZiAqLwogCXNjaGVkdWxlX3dvcmsoJm1hcGxlX2RtYV9wcm9jZXNzKTsKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLXN0YXRpYyBpcnFyZXR1cm5fdCBtYXBsZWJ1c192YmxhbmtfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3N0YXRpYyBpcnFyZXR1cm5fdCBtYXBsZV92YmxhbmtfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKIAlzY2hlZHVsZV93b3JrKCZtYXBsZV92YmxhbmtfcHJvY2Vzcyk7CiAJcmV0dXJuIElSUV9IQU5ETEVEOwpAQCAtNzIwLDE0ICs3MjUsMTQgQEAKIAogc3RhdGljIGludCBtYXBsZV9zZXRfZG1hX2ludGVycnVwdF9oYW5kbGVyKHZvaWQpCiB7Ci0JcmV0dXJuIHJlcXVlc3RfaXJxKEhXX0VWRU5UX01BUExFX0RNQSwgbWFwbGVidXNfZG1hX2ludGVycnVwdCwKLQkJSVJRRl9TSEFSRUQsICJtYXBsZSBidXMgRE1BIiwgJm1hcGxlX2R1bW15X2RyaXZlcik7CisJcmV0dXJuIHJlcXVlc3RfaXJxKEhXX0VWRU5UX01BUExFX0RNQSwgbWFwbGVfZG1hX2ludGVycnVwdCwKKwkJSVJRRl9TSEFSRUQsICJtYXBsZSBidXMgRE1BIiwgJm1hcGxlX3Vuc3VwcG9ydGVkX2RldmljZSk7CiB9CiAKIHN0YXRpYyBpbnQgbWFwbGVfc2V0X3ZibGFua19pbnRlcnJ1cHRfaGFuZGxlcih2b2lkKQogewotCXJldHVybiByZXF1ZXN0X2lycShIV19FVkVOVF9WU1lOQywgbWFwbGVidXNfdmJsYW5rX2ludGVycnVwdCwKLQkJSVJRRl9TSEFSRUQsICJtYXBsZSBidXMgVkJMQU5LIiwgJm1hcGxlX2R1bW15X2RyaXZlcik7CisJcmV0dXJuIHJlcXVlc3RfaXJxKEhXX0VWRU5UX1ZTWU5DLCBtYXBsZV92YmxhbmtfaW50ZXJydXB0LAorCQlJUlFGX1NIQVJFRCwgIm1hcGxlIGJ1cyBWQkxBTksiLCAmbWFwbGVfdW5zdXBwb3J0ZWRfZGV2aWNlKTsKIH0KIAogc3RhdGljIGludCBtYXBsZV9nZXRfZG1hX2J1ZmZlcih2b2lkKQpAQCAtNzQwLDcgKzc0NSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbWF0Y2hfbWFwbGVfYnVzX2RyaXZlcihzdHJ1Y3QgZGV2aWNlICpkZXZwdHIsCitzdGF0aWMgaW50IG1hcGxlX21hdGNoX2J1c19kcml2ZXIoc3RydWN0IGRldmljZSAqZGV2cHRyLAogCQkJCSAgc3RydWN0IGRldmljZV9kcml2ZXIgKmRydnB0cikKIHsKIAlzdHJ1Y3QgbWFwbGVfZHJpdmVyICptYXBsZV9kcnYgPSB0b19tYXBsZV9kcml2ZXIoZHJ2cHRyKTsKQEAgLTc2NSwyMiArNzcwLDI0IEBACiB7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbWFwbGVfZHJpdmVyIG1hcGxlX2R1bW15X2RyaXZlciA9IHsKK3N0YXRpYyBzdHJ1Y3QgbWFwbGVfZHJpdmVyIG1hcGxlX3Vuc3VwcG9ydGVkX2RldmljZSA9IHsKIAkuZHJ2ID0gewotCQkubmFtZSA9ICJtYXBsZV9kdW1teV9kcml2ZXIiLAorCQkubmFtZSA9ICJtYXBsZV91bnN1cHBvcnRlZF9kZXZpY2UiLAogCQkuYnVzID0gJm1hcGxlX2J1c190eXBlLAogCX0sCiB9OwotCisvKioKKyAqIG1hcGxlX2J1c190eXBlIC0gY29yZSBtYXBsZSBidXMgc3RydWN0dXJlCisgKi8KIHN0cnVjdCBidXNfdHlwZSBtYXBsZV9idXNfdHlwZSA9IHsKIAkubmFtZSA9ICJtYXBsZSIsCi0JLm1hdGNoID0gbWF0Y2hfbWFwbGVfYnVzX2RyaXZlciwKKwkubWF0Y2ggPSBtYXBsZV9tYXRjaF9idXNfZHJpdmVyLAogCS51ZXZlbnQgPSBtYXBsZV9idXNfdWV2ZW50LAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKG1hcGxlX2J1c190eXBlKTsKIAogc3RhdGljIHN0cnVjdCBkZXZpY2UgbWFwbGVfYnVzID0gewotCS5idXNfaWQgPSAibWFwbGUiLAorCS5pbml0X25hbWUgPSAibWFwbGUiLAogCS5yZWxlYXNlID0gbWFwbGVfYnVzX3JlbGVhc2UsCiB9OwogCkBAIC03ODgsNyArNzk1LDggQEAKIHsKIAlpbnQgcmV0dmFsLCBpOwogCXN0cnVjdCBtYXBsZV9kZXZpY2UgKm1kZXZbTUFQTEVfUE9SVFNdOwotCWN0cmxfb3V0bCgwLCBNQVBMRV9TVEFURSk7CisKKwljdHJsX291dGwoMCwgTUFQTEVfRU5BQkxFKTsKIAogCXJldHZhbCA9IGRldmljZV9yZWdpc3RlcigmbWFwbGVfYnVzKTsKIAlpZiAocmV0dmFsKQpAQCAtNzk4LDM2ICs4MDYsMzMgQEAKIAlpZiAocmV0dmFsKQogCQlnb3RvIGNsZWFudXBfZGV2aWNlOwogCi0JcmV0dmFsID0gZHJpdmVyX3JlZ2lzdGVyKCZtYXBsZV9kdW1teV9kcml2ZXIuZHJ2KTsKKwlyZXR2YWwgPSBkcml2ZXJfcmVnaXN0ZXIoJm1hcGxlX3Vuc3VwcG9ydGVkX2RldmljZS5kcnYpOwogCWlmIChyZXR2YWwpCiAJCWdvdG8gY2xlYW51cF9idXM7CiAKIAkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIG1hcGxlIGJ1cyBkbWEgKi8KIAlyZXR2YWwgPSBtYXBsZV9nZXRfZG1hX2J1ZmZlcigpOwogCWlmIChyZXR2YWwpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTwotCQkgICAgICAgIk1hcGxlIGJ1czogRmFpbGVkIHRvIGFsbG9jYXRlIE1hcGxlIERNQSBidWZmZXJzXG4iKTsKKwkJZGV2X2VycigmbWFwbGVfYnVzLCAiZmFpbGVkIHRvIGFsbG9jYXRlIERNQSBidWZmZXJzXG4iKTsKIAkJZ290byBjbGVhbnVwX2Jhc2ljOwogCX0KIAogCS8qIHNldCB1cCBETUEgaW50ZXJydXB0IGhhbmRsZXIgKi8KIAlyZXR2YWwgPSBtYXBsZV9zZXRfZG1hX2ludGVycnVwdF9oYW5kbGVyKCk7CiAJaWYgKHJldHZhbCkgewotCQlwcmludGsoS0VSTl9JTkZPCi0JCSAgICAgICAiTWFwbGUgYnVzOiBGYWlsZWQgdG8gZ3JhYiBtYXBsZSBETUEgSVJRXG4iKTsKKwkJZGV2X2VycigmbWFwbGVfYnVzLCAiYnVzIGZhaWxlZCB0byBncmFiIG1hcGxlICIKKwkJCSJETUEgSVJRXG4iKTsKIAkJZ290byBjbGVhbnVwX2RtYTsKIAl9CiAKIAkvKiBzZXQgdXAgVkJMQU5LIGludGVycnVwdCBoYW5kbGVyICovCiAJcmV0dmFsID0gbWFwbGVfc2V0X3ZibGFua19pbnRlcnJ1cHRfaGFuZGxlcigpOwogCWlmIChyZXR2YWwpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiTWFwbGUgYnVzOiBGYWlsZWQgdG8gZ3JhYiBWQkxBTksgSVJRXG4iKTsKKwkJZGV2X2VycigmbWFwbGVfYnVzLCAiYnVzIGZhaWxlZCB0byBncmFiIFZCTEFOSyBJUlFcbiIpOwogCQlnb3RvIGNsZWFudXBfaXJxOwogCX0KIAotCW1hcGxlX3F1ZXVlX2NhY2hlID0KLQkgICAga21lbV9jYWNoZV9jcmVhdGUoIm1hcGxlX3F1ZXVlX2NhY2hlIiwgMHg0MDAsIDAsCi0JCQkgICAgICBTTEFCX0hXQ0FDSEVfQUxJR04sIE5VTEwpOworCW1hcGxlX3F1ZXVlX2NhY2hlID0gS01FTV9DQUNIRShtYXBsZV9idWZmZXIsIFNMQUJfSFdDQUNIRV9BTElHTik7CiAKIAlpZiAoIW1hcGxlX3F1ZXVlX2NhY2hlKQogCQlnb3RvIGNsZWFudXBfYm90aGlycXM7CkBAIC04MzgsMjMgKzg0MywyMyBAQAogCS8qIHNldHVwIG1hcGxlIHBvcnRzICovCiAJZm9yIChpID0gMDsgaSA8IE1BUExFX1BPUlRTOyBpKyspIHsKIAkJY2hlY2tlZFtpXSA9IGZhbHNlOworCQllbXB0eVtpXSA9IGZhbHNlOwogCQltZGV2W2ldID0gbWFwbGVfYWxsb2NfZGV2KGksIDApOwotCQliYXNldW5pdHNbaV0gPSBtZGV2W2ldOwogCQlpZiAoIW1kZXZbaV0pIHsKIAkJCXdoaWxlIChpLS0gPiAwKQogCQkJCW1hcGxlX2ZyZWVfZGV2KG1kZXZbaV0pOwogCQkJZ290byBjbGVhbnVwX2NhY2hlOwogCQl9CisJCWJhc2V1bml0c1tpXSA9IG1kZXZbaV07CisJCWF0b21pY19zZXQoJm1kZXZbaV0tPmJ1c3ksIDEpOwogCQltYXBsZV9hZGRfcGFja2V0KG1kZXZbaV0sIDAsIE1BUExFX0NPTU1BTkRfREVWSU5GTywgMCwgTlVMTCk7CiAJCXN1YmRldmljZV9tYXBbaV0gPSAwOwogCX0KIAotCS8qIHNldHVwIG1hcGxlYnVzIGhhcmR3YXJlICovCi0JbWFwbGVidXNfZG1hX3Jlc2V0KCk7Ci0JLyogaW5pdGlhbCBkZXRlY3Rpb24gKi8KKwltYXBsZV9wbnBfdGltZSA9IGppZmZpZXMgKyBIWjsKKwkvKiBwcmVwYXJlIGluaXRpYWwgcXVldWUgKi8KIAltYXBsZV9zZW5kKCk7Ci0JbWFwbGVfcG5wX3RpbWUgPSBqaWZmaWVzOwotCXByaW50ayhLRVJOX0lORk8gIk1hcGxlIGJ1cyBjb3JlIG5vdyByZWdpc3RlcmVkLlxuIik7CisJZGV2X2luZm8oJm1hcGxlX2J1cywgImJ1cyBjb3JlIG5vdyByZWdpc3RlcmVkXG4iKTsKIAogCXJldHVybiAwOwogCkBAIC04NzEsNyArODc2LDcgQEAKIAlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKSBtYXBsZV9zZW5kYnVmLCBNQVBMRV9ETUFfUEFHRVMpOwogCiBjbGVhbnVwX2Jhc2ljOgotCWRyaXZlcl91bnJlZ2lzdGVyKCZtYXBsZV9kdW1teV9kcml2ZXIuZHJ2KTsKKwlkcml2ZXJfdW5yZWdpc3RlcigmbWFwbGVfdW5zdXBwb3J0ZWRfZGV2aWNlLmRydik7CiAKIGNsZWFudXBfYnVzOgogCWJ1c191bnJlZ2lzdGVyKCZtYXBsZV9idXNfdHlwZSk7CkBAIC04ODAsNyArODg1LDcgQEAKIAlkZXZpY2VfdW5yZWdpc3RlcigmbWFwbGVfYnVzKTsKIAogY2xlYW51cDoKLQlwcmludGsoS0VSTl9JTkZPICJNYXBsZSBidXMgcmVnaXN0cmF0aW9uIGZhaWxlZFxuIik7CisJcHJpbnRrKEtFUk5fRVJSICJNYXBsZSBidXMgcmVnaXN0cmF0aW9uIGZhaWxlZFxuIik7CiAJcmV0dXJuIHJldHZhbDsKIH0KIC8qIFB1c2ggaW5pdCB0byBsYXRlciB0byBlbnN1cmUgaGFyZHdhcmUgZ2V0cyBkZXRlY3RlZCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zaC9zdXBlcmh5d2F5L3N1cGVyaHl3YXkuYyBiL2RyaXZlcnMvc2gvc3VwZXJoeXdheS9zdXBlcmh5d2F5LmMKaW5kZXggNGQwMjgyYi4uMmQ5ZTdmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zaC9zdXBlcmh5d2F5L3N1cGVyaHl3YXkuYworKysgYi9kcml2ZXJzL3NoL3N1cGVyaHl3YXkvc3VwZXJoeXdheS5jCkBAIC0yMiw3ICsyMiw3IEBACiBzdGF0aWMgaW50IHN1cGVyaHl3YXlfZGV2aWNlczsKIAogc3RhdGljIHN0cnVjdCBkZXZpY2Ugc3VwZXJoeXdheV9idXNfZGV2aWNlID0gewotCS5idXNfaWQgPSAic3VwZXJoeXdheSIsCisJLmluaXRfbmFtZSA9ICJzdXBlcmh5d2F5IiwKIH07CiAKIHN0YXRpYyB2b2lkIHN1cGVyaHl3YXlfZGV2aWNlX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQpAQCAtODMsNyArODMsNyBAQAogCWRldi0+aWQuaWQJCT0gZGV2LT52Y3IubW9kX2lkOwogCiAJc3ByaW50ZihkZXYtPm5hbWUsICJTdXBlckh5d2F5IGRldmljZSAlMDR4IiwgZGV2LT5pZC5pZCk7Ci0Jc3ByaW50ZihkZXYtPmRldi5idXNfaWQsICIlMDJ4Iiwgc3VwZXJoeXdheV9kZXZpY2VzKTsKKwlkZXZfc2V0X25hbWUoJmRldi0+ZGV2LCAiJTAyeCIsIHN1cGVyaHl3YXlfZGV2aWNlcyk7CiAKIAlzdXBlcmh5d2F5X2RldmljZXMrKzsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvYXRtZWxfc3BpLmMgYi9kcml2ZXJzL3NwaS9hdG1lbF9zcGkuYwppbmRleCA1NmZmM2U2Li4xMmU0NDNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9hdG1lbF9zcGkuYworKysgYi9kcml2ZXJzL3NwaS9hdG1lbF9zcGkuYwpAQCAtMzIyLDcgKzMyMiw3IEBACiAJc3BpID0gbXNnLT5zcGk7CiAKIAlkZXZfZGJnKG1hc3Rlci0+ZGV2LnBhcmVudCwgInN0YXJ0IG1lc3NhZ2UgJXAgZm9yICVzXG4iLAotCQkJbXNnLCBzcGktPmRldi5idXNfaWQpOworCQkJbXNnLCBkZXZfbmFtZSgmc3BpLT5kZXYpKTsKIAogCS8qIHNlbGVjdCBjaGlwIGlmIGl0J3Mgbm90IHN0aWxsIGFjdGl2ZSAqLwogCWlmIChhcy0+c3RheSkgewpAQCAtNjI3LDcgKzYyNyw3IEBACiAJCWlmICghYXNkKQogCQkJcmV0dXJuIC1FTk9NRU07CiAKLQkJcmV0ID0gZ3Bpb19yZXF1ZXN0KG5wY3NfcGluLCBzcGktPmRldi5idXNfaWQpOworCQlyZXQgPSBncGlvX3JlcXVlc3QobnBjc19waW4sIGRldl9uYW1lKCZzcGktPmRldikpOwogCQlpZiAocmV0KSB7CiAJCQlrZnJlZShhc2QpOwogCQkJcmV0dXJuIHJldDsKQEAgLTY2OCw3ICs2NjgsNyBAQAogCWFzID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3Rlcik7CiAKIAlkZXZfZGJnKGNvbnRyb2xsZXIsICJuZXcgbWVzc2FnZSAlcCBzdWJtaXR0ZWQgZm9yICVzXG4iLAotCQkJbXNnLCBzcGktPmRldi5idXNfaWQpOworCQkJbXNnLCBkZXZfbmFtZSgmc3BpLT5kZXYpKTsKIAogCWlmICh1bmxpa2VseShsaXN0X2VtcHR5KCZtc2ctPnRyYW5zZmVycykpKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTgwMyw3ICs4MDMsNyBAQAogCWFzLT5jbGsgPSBjbGs7CiAKIAlyZXQgPSByZXF1ZXN0X2lycShpcnEsIGF0bWVsX3NwaV9pbnRlcnJ1cHQsIDAsCi0JCQlwZGV2LT5kZXYuYnVzX2lkLCBtYXN0ZXIpOworCQkJZGV2X25hbWUoJnBkZXYtPmRldiksIG1hc3Rlcik7CiAJaWYgKHJldCkKIAkJZ290byBvdXRfdW5tYXBfcmVnczsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvbXBjNTJ4eF9wc2Nfc3BpLmMgYi9kcml2ZXJzL3NwaS9tcGM1Mnh4X3BzY19zcGkuYwppbmRleCAzYjk3ODAzLi42OGM3N2E5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9tcGM1Mnh4X3BzY19zcGkuYworKysgYi9kcml2ZXJzL3NwaS9tcGM1Mnh4X3BzY19zcGkuYwpAQCAtNDI5LDcgKzQyOSw3IEBACiAJSU5JVF9MSVNUX0hFQUQoJm1wcy0+cXVldWUpOwogCiAJbXBzLT53b3JrcXVldWUgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgKLQkJbWFzdGVyLT5kZXYucGFyZW50LT5idXNfaWQpOworCQlkZXZfbmFtZShtYXN0ZXItPmRldi5wYXJlbnQpKTsKIAlpZiAobXBzLT53b3JrcXVldWUgPT0gTlVMTCkgewogCQlyZXQgPSAtRUJVU1k7CiAJCWdvdG8gZnJlZV9pcnE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9vbWFwMl9tY3NwaS5jIGIvZHJpdmVycy9zcGkvb21hcDJfbWNzcGkuYwppbmRleCA0NTRhMjcxLi4xYzY1ZTM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9vbWFwMl9tY3NwaS5jCisrKyBiL2RyaXZlcnMvc3BpL29tYXAyX21jc3BpLmMKQEAgLTEwMDMsNyArMTAwMyw3IEBACiAJCWdvdG8gZXJyMTsKIAl9CiAJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oci0+c3RhcnQsIChyLT5lbmQgLSByLT5zdGFydCkgKyAxLAotCQkJcGRldi0+ZGV2LmJ1c19pZCkpIHsKKwkJCWRldl9uYW1lKCZwZGV2LT5kZXYpKSkgewogCQlzdGF0dXMgPSAtRUJVU1k7CiAJCWdvdG8gZXJyMTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9vbWFwX3V3aXJlLmMgYi9kcml2ZXJzL3NwaS9vbWFwX3V3aXJlLmMKaW5kZXggYmFiNmZmMC4uNjBiNTM4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvb21hcF91d2lyZS5jCisrKyBiL2RyaXZlcnMvc3BpL29tYXBfdXdpcmUuYwpAQCAtMjQ1LDcgKzI0NSw3IEBACiAKICNpZmRlZglWRVJCT1NFCiAJCQlwcl9kZWJ1ZygiJXM6IHdyaXRlLSVkID0lMDR4XG4iLAotCQkJCQlzcGktPmRldi5idXNfaWQsIGJpdHMsIHZhbCk7CisJCQkJCWRldl9uYW1lKCZzcGktPmRldiksIGJpdHMsIHZhbCk7CiAjZW5kaWYKIAkJCWlmICh3YWl0X3V3aXJlX2Nzcl9mbGFnKENTUkIsIDAsIDApKQogCQkJCWdvdG8gZWlvOwpAQCAtMzA1LDcgKzMwNSw3IEBACiAJCQlzdGF0dXMgKz0gYnl0ZXM7CiAjaWZkZWYJVkVSQk9TRQogCQkJcHJfZGVidWcoIiVzOiByZWFkLSVkID0lMDR4XG4iLAotCQkJCQlzcGktPmRldi5idXNfaWQsIGJpdHMsIHZhbCk7CisJCQkJCWRldl9uYW1lKCZzcGktPmRldiksIGJpdHMsIHZhbCk7CiAjZW5kaWYKIAogCQl9CkBAIC0zMzEsNyArMzMxLDcgQEAKIAl1d2lyZSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpOwogCiAJaWYgKHNwaS0+Y2hpcF9zZWxlY3QgPiAzKSB7Ci0JCXByX2RlYnVnKCIlczogY3MlZD9cbiIsIHNwaS0+ZGV2LmJ1c19pZCwgc3BpLT5jaGlwX3NlbGVjdCk7CisJCXByX2RlYnVnKCIlczogY3MlZD9cbiIsIGRldl9uYW1lKCZzcGktPmRldiksIHNwaS0+Y2hpcF9zZWxlY3QpOwogCQlzdGF0dXMgPSAtRU5PREVWOwogCQlnb3RvIGRvbmU7CiAJfQpAQCAtMzQzLDcgKzM0Myw3IEBACiAJCWJpdHMgPSA4OwogCiAJaWYgKGJpdHMgPiAxNikgewotCQlwcl9kZWJ1ZygiJXM6IHdvcmRzaXplICVkP1xuIiwgc3BpLT5kZXYuYnVzX2lkLCBiaXRzKTsKKwkJcHJfZGVidWcoIiVzOiB3b3Jkc2l6ZSAlZD9cbiIsIGRldl9uYW1lKCZzcGktPmRldiksIGJpdHMpOwogCQlzdGF0dXMgPSAtRU5PREVWOwogCQlnb3RvIGRvbmU7CiAJfQpAQCAtMzc4LDcgKzM3OCw3IEBACiAJCWh6ID0gdC0+c3BlZWRfaHo7CiAKIAlpZiAoIWh6KSB7Ci0JCXByX2RlYnVnKCIlczogemVybyBzcGVlZD9cbiIsIHNwaS0+ZGV2LmJ1c19pZCk7CisJCXByX2RlYnVnKCIlczogemVybyBzcGVlZD9cbiIsIGRldl9uYW1lKCZzcGktPmRldikpOwogCQlzdGF0dXMgPSAtRUlOVkFMOwogCQlnb3RvIGRvbmU7CiAJfQpAQCAtNDA2LDcgKzQwNiw3IEBACiAJfQogCWlmIChkaXYxX2lkeCA9PSA0KSB7CiAJCXByX2RlYnVnKCIlczogbG93ZXN0IGNsb2NrICVsZCwgbmVlZCAlZFxuIiwKLQkJCXNwaS0+ZGV2LmJ1c19pZCwgcmF0ZSAvIDEwIC8gOCwgaHopOworCQkJZGV2X25hbWUoJnNwaS0+ZGV2KSwgcmF0ZSAvIDEwIC8gOCwgaHopOwogCQlzdGF0dXMgPSAtRURPTTsKIAkJZ290byBkb25lOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL29yaW9uX3NwaS5jIGIvZHJpdmVycy9zcGkvb3Jpb25fc3BpLmMKaW5kZXggMDE0YmVjYi4uYzhiMGJhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvb3Jpb25fc3BpLmMKKysrIGIvZHJpdmVycy9zcGkvb3Jpb25fc3BpLmMKQEAgLTQ5Niw3ICs0OTYsNyBAQAogCX0KIAogCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHItPnN0YXJ0LCAoci0+ZW5kIC0gci0+c3RhcnQpICsgMSwKLQkJCQlwZGV2LT5kZXYuYnVzX2lkKSkgeworCQkJCWRldl9uYW1lKCZwZGV2LT5kZXYpKSkgewogCQlzdGF0dXMgPSAtRUJVU1k7CiAJCWdvdG8gb3V0OwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3B4YTJ4eF9zcGkuYyBiL2RyaXZlcnMvc3BpL3B4YTJ4eF9zcGkuYwppbmRleCBkMGZjNGNhLi5lYzI0ZjJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9weGEyeHhfc3BpLmMKKysrIGIvZHJpdmVycy9zcGkvcHhhMnh4X3NwaS5jCkBAIC0xMzMzLDcgKzEzMzMsNyBAQAogCiAJSU5JVF9XT1JLKCZkcnZfZGF0YS0+cHVtcF9tZXNzYWdlcywgcHVtcF9tZXNzYWdlcyk7CiAJZHJ2X2RhdGEtPndvcmtxdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKAotCQkJCQlkcnZfZGF0YS0+bWFzdGVyLT5kZXYucGFyZW50LT5idXNfaWQpOworCQkJCWRldl9uYW1lKGRydl9kYXRhLT5tYXN0ZXItPmRldi5wYXJlbnQpKTsKIAlpZiAoZHJ2X2RhdGEtPndvcmtxdWV1ZSA9PSBOVUxMKQogCQlyZXR1cm4gLUVCVVNZOwogCkBAIC0xNDYyLDcgKzE0NjIsNyBAQAogCQlkcnZfZGF0YS0+bWFza19zciA9IFNTU1JfVElOVCB8IFNTU1JfUkZTIHwgU1NTUl9URlMgfCBTU1NSX1JPUjsKIAl9CiAKLQlzdGF0dXMgPSByZXF1ZXN0X2lycShzc3AtPmlycSwgc3NwX2ludCwgMCwgZGV2LT5idXNfaWQsIGRydl9kYXRhKTsKKwlzdGF0dXMgPSByZXF1ZXN0X2lycShzc3AtPmlycSwgc3NwX2ludCwgMCwgZGV2X25hbWUoZGV2KSwgZHJ2X2RhdGEpOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCBnZXQgSVJRICVkXG4iLCBzc3AtPmlycSk7CiAJCWdvdG8gb3V0X2Vycm9yX21hc3Rlcl9hbGxvYzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaV9iZmluNXh4LmMgYi9kcml2ZXJzL3NwaS9zcGlfYmZpbjV4eC5jCmluZGV4IDdmZWEzY2YuLjM0MTBiMGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaV9iZmluNXh4LmMKKysrIGIvZHJpdmVycy9zcGkvc3BpX2JmaW41eHguYwpAQCAtMTE2MCw4ICsxMTYwLDggQEAKIAogCS8qIGluaXQgbWVzc2FnZXMgd29ya3F1ZXVlICovCiAJSU5JVF9XT1JLKCZkcnZfZGF0YS0+cHVtcF9tZXNzYWdlcywgcHVtcF9tZXNzYWdlcyk7Ci0JZHJ2X2RhdGEtPndvcmtxdWV1ZSA9Ci0JICAgIGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKGRydl9kYXRhLT5tYXN0ZXItPmRldi5wYXJlbnQtPmJ1c19pZCk7CisJZHJ2X2RhdGEtPndvcmtxdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKAorCQkJCWRldl9uYW1lKGRydl9kYXRhLT5tYXN0ZXItPmRldi5wYXJlbnQpKTsKIAlpZiAoZHJ2X2RhdGEtPndvcmtxdWV1ZSA9PSBOVUxMKQogCQlyZXR1cm4gLUVCVVNZOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGlfZ3Bpby5jIGIvZHJpdmVycy9zcGkvc3BpX2dwaW8uYwppbmRleCBmNWVkOTcyLi5kMjg2NmMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGlfZ3Bpby5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaV9ncGlvLmMKQEAgLTE5MSw3ICsxOTEsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmICghc3BpLT5jb250cm9sbGVyX3N0YXRlKSB7Ci0JCXN0YXR1cyA9IGdwaW9fcmVxdWVzdChjcywgc3BpLT5kZXYuYnVzX2lkKTsKKwkJc3RhdHVzID0gZ3Bpb19yZXF1ZXN0KGNzLCBkZXZfbmFtZSgmc3BpLT5kZXYpKTsKIAkJaWYgKHN0YXR1cykKIAkJCXJldHVybiBzdGF0dXM7CiAJCXN0YXR1cyA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChjcywgc3BpLT5tb2RlICYgU1BJX0NTX0hJR0gpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpX2lteC5jIGIvZHJpdmVycy9zcGkvc3BpX2lteC5jCmluZGV4IDI2OWE1NWUuLjA0ODBkOGJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGlfaW14LmMKKysrIGIvZHJpdmVycy9zcGkvc3BpX2lteC5jCkBAIC0xMzgxLDcgKzEzODEsNyBAQAogCiAJSU5JVF9XT1JLKCZkcnZfZGF0YS0+d29yaywgcHVtcF9tZXNzYWdlcyk7CiAJZHJ2X2RhdGEtPndvcmtxdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKAotCQkJCQlkcnZfZGF0YS0+bWFzdGVyLT5kZXYucGFyZW50LT5idXNfaWQpOworCQkJCWRldl9uYW1lKGRydl9kYXRhLT5tYXN0ZXItPmRldi5wYXJlbnQpKTsKIAlpZiAoZHJ2X2RhdGEtPndvcmtxdWV1ZSA9PSBOVUxMKQogCQlyZXR1cm4gLUVCVVNZOwogCkBAIC0xNTI1LDcgKzE1MjUsOCBAQAogCQlzdGF0dXMgPSAtRU5PREVWOwogCQlnb3RvIGVycl9ub19pcnFyZXM7CiAJfQotCXN0YXR1cyA9IHJlcXVlc3RfaXJxKGlycSwgc3BpX2ludCwgSVJRRl9ESVNBQkxFRCwgZGV2LT5idXNfaWQsIGRydl9kYXRhKTsKKwlzdGF0dXMgPSByZXF1ZXN0X2lycShpcnEsIHNwaV9pbnQsIElSUUZfRElTQUJMRUQsCisJCQkgICAgIGRldl9uYW1lKGRldiksIGRydl9kYXRhKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJwcm9iZSAtIGNhbm5vdCBnZXQgSVJRICglZClcbiIsIHN0YXR1cyk7CiAJCWdvdG8gZXJyX25vX2lycXJlczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaV9tcGM4M3h4LmMgYi9kcml2ZXJzL3NwaS9zcGlfbXBjODN4eC5jCmluZGV4IGFjMGUzZTQuLjQ0YTJiNDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaV9tcGM4M3h4LmMKKysrIGIvZHJpdmVycy9zcGkvc3BpX21wYzgzeHguYwpAQCAtNjM3LDcgKzYzNyw3IEBACiAJSU5JVF9MSVNUX0hFQUQoJm1wYzgzeHhfc3BpLT5xdWV1ZSk7CiAKIAltcGM4M3h4X3NwaS0+d29ya3F1ZXVlID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoCi0JCW1hc3Rlci0+ZGV2LnBhcmVudC0+YnVzX2lkKTsKKwkJZGV2X25hbWUobWFzdGVyLT5kZXYucGFyZW50KSk7CiAJaWYgKG1wYzgzeHhfc3BpLT53b3JrcXVldWUgPT0gTlVMTCkgewogCQlyZXQgPSAtRUJVU1k7CiAJCWdvdG8gZnJlZV9pcnE7CkBAIC02NDksNyArNjQ5LDcgQEAKIAogCXByaW50ayhLRVJOX0lORk8KIAkgICAgICAgIiVzOiBNUEM4M3h4IFNQSSBDb250cm9sbGVyIGRyaXZlciBhdCAweCVwIChpcnEgPSAlZClcbiIsCi0JICAgICAgIGRldi0+ZGV2LmJ1c19pZCwgbXBjODN4eF9zcGktPmJhc2UsIG1wYzgzeHhfc3BpLT5pcnEpOworCSAgICAgICBkZXZfbmFtZSgmZGV2LT5kZXYpLCBtcGM4M3h4X3NwaS0+YmFzZSwgbXBjODN4eF9zcGktPmlycSk7CiAKIAlyZXR1cm4gcmV0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGlfdHh4OS5jIGIvZHJpdmVycy9zcGkvc3BpX3R4eDkuYwppbmRleCAyMjk2ZjM3Li4yOWNiYjA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGlfdHh4OS5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaV90eHg5LmMKQEAgLTQwNCw3ICs0MDQsOCBAQAogCWlmIChyZXQpCiAJCWdvdG8gZXhpdDsKIAotCWMtPndvcmtxdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKG1hc3Rlci0+ZGV2LnBhcmVudC0+YnVzX2lkKTsKKwljLT53b3JrcXVldWUgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgKKwkJCQlkZXZfbmFtZShtYXN0ZXItPmRldi5wYXJlbnQpKTsKIAlpZiAoIWMtPndvcmtxdWV1ZSkKIAkJZ290byBleGl0X2J1c3k7CiAJYy0+bGFzdF9jaGlwc2VsZWN0ID0gLTE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NzYi9NYWtlZmlsZSBiL2RyaXZlcnMvc3NiL01ha2VmaWxlCmluZGV4IDZmMjU1ZTkuLmNmYmI3NGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3NiL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc3NiL01ha2VmaWxlCkBAIC05LDYgKzksNyBAQAogCiAjIGJ1aWx0LWluIGRyaXZlcnMKIHNzYi15CQkJCQkrPSBkcml2ZXJfY2hpcGNvbW1vbi5vCitzc2IteQkJCQkJKz0gZHJpdmVyX2NoaXBjb21tb25fcG11Lm8KIHNzYi0kKENPTkZJR19TU0JfRFJJVkVSX01JUFMpCQkrPSBkcml2ZXJfbWlwc2NvcmUubwogc3NiLSQoQ09ORklHX1NTQl9EUklWRVJfRVhUSUYpCQkrPSBkcml2ZXJfZXh0aWYubwogc3NiLSQoQ09ORklHX1NTQl9EUklWRVJfUENJQ09SRSkJKz0gZHJpdmVyX3BjaWNvcmUubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zc2IvYjQzX3BjaV9icmlkZ2UuYyBiL2RyaXZlcnMvc3NiL2I0M19wY2lfYnJpZGdlLmMKaW5kZXggMmQyN2Q2ZC4uMjdhNjc3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zc2IvYjQzX3BjaV9icmlkZ2UuYworKysgYi9kcml2ZXJzL3NzYi9iNDNfcGNpX2JyaWRnZS5jCkBAIC0yMSw2ICsyMSw3IEBACiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQlJPQURDT00sIDB4NDMwNykgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgMHg0MzExKSB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCAweDQzMTIpIH0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQlJPQURDT00sIDB4NDMxNSkgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgMHg0MzE4KSB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCAweDQzMTkpIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQlJPQURDT00sIDB4NDMyMCkgfSwKQEAgLTI5LDYgKzMwLDcgQEAKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgMHg0MzI1KSB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCAweDQzMjgpIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQlJPQURDT00sIDB4NDMyOSkgfSwKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgMHg0MzJiKSB9LAogCXsgMCwgfSwKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgYjQzX3BjaV9icmlkZ2VfdGJsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3NiL2RyaXZlcl9jaGlwY29tbW9uLmMgYi9kcml2ZXJzL3NzYi9kcml2ZXJfY2hpcGNvbW1vbi5jCmluZGV4IDU3MWY0ZmQuLjk2ODE1MzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3NiL2RyaXZlcl9jaGlwY29tbW9uLmMKKysrIGIvZHJpdmVycy9zc2IvZHJpdmVyX2NoaXBjb21tb24uYwpAQCAtMjYsMTkgKzI2LDYgQEAKIH07CiAKIAotc3RhdGljIGlubGluZSB1MzIgY2hpcGNvX3JlYWQzMihzdHJ1Y3Qgc3NiX2NoaXBjb21tb24gKmNjLAotCQkJCXUxNiBvZmZzZXQpCi17Ci0JcmV0dXJuIHNzYl9yZWFkMzIoY2MtPmRldiwgb2Zmc2V0KTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGNoaXBjb193cml0ZTMyKHN0cnVjdCBzc2JfY2hpcGNvbW1vbiAqY2MsCi0JCQkJICB1MTYgb2Zmc2V0LAotCQkJCSAgdTMyIHZhbHVlKQotewotCXNzYl93cml0ZTMyKGNjLT5kZXYsIG9mZnNldCwgdmFsdWUpOwotfQotCiBzdGF0aWMgaW5saW5lIHUzMiBjaGlwY29fd3JpdGUzMl9tYXNrZWQoc3RydWN0IHNzYl9jaGlwY29tbW9uICpjYywgdTE2IG9mZnNldCwKIAkJCQkJdTMyIG1hc2ssIHUzMiB2YWx1ZSkKIHsKQEAgLTI0Niw2ICsyMzMsNyBAQAogewogCWlmICghY2MtPmRldikKIAkJcmV0dXJuOyAvKiBXZSBkb24ndCBoYXZlIGEgQ2hpcENvbW1vbiAqLworCXNzYl9wbXVfaW5pdChjYyk7CiAJY2hpcGNvX3Bvd2VyY29udHJvbF9pbml0KGNjKTsKIAlzc2JfY2hpcGNvX3NldF9jbG9ja21vZGUoY2MsIFNTQl9DTEtNT0RFX0ZBU1QpOwogCWNhbGNfZmFzdF9wb3dlcnVwX2RlbGF5KGNjKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3NiL2RyaXZlcl9jaGlwY29tbW9uX3BtdS5jIGIvZHJpdmVycy9zc2IvZHJpdmVyX2NoaXBjb21tb25fcG11LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFhZGRlZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3NiL2RyaXZlcl9jaGlwY29tbW9uX3BtdS5jCkBAIC0wLDAgKzEsNTA4IEBACisvKgorICogU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisgKiBCcm9hZGNvbSBDaGlwQ29tbW9uIFBvd2VyIE1hbmFnZW1lbnQgVW5pdCBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSwgTWljaGFlbCBCdWVzY2ggPG1iQGJ1M3NjaC5kZT4KKyAqIENvcHlyaWdodCAyMDA3LCBCcm9hZGNvbSBDb3Jwb3JhdGlvbgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHTlUvR1BMLiBTZWUgQ09QWUlORyBmb3IgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvc3NiL3NzYi5oPgorI2luY2x1ZGUgPGxpbnV4L3NzYi9zc2JfcmVncy5oPgorI2luY2x1ZGUgPGxpbnV4L3NzYi9zc2JfZHJpdmVyX2NoaXBjb21tb24uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSAic3NiX3ByaXZhdGUuaCIKKworc3RhdGljIHUzMiBzc2JfY2hpcGNvX3BsbF9yZWFkKHN0cnVjdCBzc2JfY2hpcGNvbW1vbiAqY2MsIHUzMiBvZmZzZXQpCit7CisJY2hpcGNvX3dyaXRlMzIoY2MsIFNTQl9DSElQQ09fUExMQ1RMX0FERFIsIG9mZnNldCk7CisJcmV0dXJuIGNoaXBjb19yZWFkMzIoY2MsIFNTQl9DSElQQ09fUExMQ1RMX0RBVEEpOworfQorCitzdGF0aWMgdm9pZCBzc2JfY2hpcGNvX3BsbF93cml0ZShzdHJ1Y3Qgc3NiX2NoaXBjb21tb24gKmNjLAorCQkJCSB1MzIgb2Zmc2V0LCB1MzIgdmFsdWUpCit7CisJY2hpcGNvX3dyaXRlMzIoY2MsIFNTQl9DSElQQ09fUExMQ1RMX0FERFIsIG9mZnNldCk7CisJY2hpcGNvX3dyaXRlMzIoY2MsIFNTQl9DSElQQ09fUExMQ1RMX0RBVEEsIHZhbHVlKTsKK30KKworc3RydWN0IHBtdTBfcGxsdGFiX2VudHJ5IHsKKwl1MTYgZnJlcTsJLyogQ3J5c3RhbCBmcmVxdWVuY3kgaW4ga0h6LiovCisJdTggeGY7CQkvKiBDcnlzdGFsIGZyZXF1ZW5jeSB2YWx1ZSBmb3IgUE1VIGNvbnRyb2wgKi8KKwl1OCB3Yl9pbnQ7CisJdTMyIHdiX2ZyYWM7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHBtdTBfcGxsdGFiX2VudHJ5IHBtdTBfcGxsdGFiW10gPSB7CisJeyAuZnJlcSA9IDEyMDAwLCAueGYgPSAgMSwgLndiX2ludCA9IDczLCAud2JfZnJhYyA9IDM0OTUyNSwgfSwKKwl7IC5mcmVxID0gMTMwMDAsIC54ZiA9ICAyLCAud2JfaW50ID0gNjcsIC53Yl9mcmFjID0gNzI1OTM3LCB9LAorCXsgLmZyZXEgPSAxNDQwMCwgLnhmID0gIDMsIC53Yl9pbnQgPSA2MSwgLndiX2ZyYWMgPSAxMTY1MDgsIH0sCisJeyAuZnJlcSA9IDE1MzYwLCAueGYgPSAgNCwgLndiX2ludCA9IDU3LCAud2JfZnJhYyA9IDMwNTgzNCwgfSwKKwl7IC5mcmVxID0gMTYyMDAsIC54ZiA9ICA1LCAud2JfaW50ID0gNTQsIC53Yl9mcmFjID0gMzM2NTc5LCB9LAorCXsgLmZyZXEgPSAxNjgwMCwgLnhmID0gIDYsIC53Yl9pbnQgPSA1MiwgLndiX2ZyYWMgPSAzOTk0NTcsIH0sCisJeyAuZnJlcSA9IDE5MjAwLCAueGYgPSAgNywgLndiX2ludCA9IDQ1LCAud2JfZnJhYyA9IDg3MzgxMywgfSwKKwl7IC5mcmVxID0gMTk4MDAsIC54ZiA9ICA4LCAud2JfaW50ID0gNDQsIC53Yl9mcmFjID0gNDY2MDMzLCB9LAorCXsgLmZyZXEgPSAyMDAwMCwgLnhmID0gIDksIC53Yl9pbnQgPSA0NCwgLndiX2ZyYWMgPSAwLCAgICAgIH0sCisJeyAuZnJlcSA9IDI1MDAwLCAueGYgPSAxMCwgLndiX2ludCA9IDcwLCAud2JfZnJhYyA9IDQxOTQzMCwgfSwKKwl7IC5mcmVxID0gMjYwMDAsIC54ZiA9IDExLCAud2JfaW50ID0gNjcsIC53Yl9mcmFjID0gNzI1OTM3LCB9LAorCXsgLmZyZXEgPSAzMDAwMCwgLnhmID0gMTIsIC53Yl9pbnQgPSA1OCwgLndiX2ZyYWMgPSA2OTkwNTAsIH0sCisJeyAuZnJlcSA9IDM4NDAwLCAueGYgPSAxMywgLndiX2ludCA9IDQ1LCAud2JfZnJhYyA9IDg3MzgxMywgfSwKKwl7IC5mcmVxID0gNDAwMDAsIC54ZiA9IDE0LCAud2JfaW50ID0gNDUsIC53Yl9mcmFjID0gMCwgICAgICB9LAorfTsKKyNkZWZpbmUgU1NCX1BNVTBfREVGQVVMVF9YVEFMRlJFUQkyMDAwMAorCitzdGF0aWMgY29uc3Qgc3RydWN0IHBtdTBfcGxsdGFiX2VudHJ5ICogcG11MF9wbGx0YWJfZmluZF9lbnRyeSh1MzIgY3J5c3RhbGZyZXEpCit7CisJY29uc3Qgc3RydWN0IHBtdTBfcGxsdGFiX2VudHJ5ICplOworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocG11MF9wbGx0YWIpOyBpKyspIHsKKwkJZSA9ICZwbXUwX3BsbHRhYltpXTsKKwkJaWYgKGUtPmZyZXEgPT0gY3J5c3RhbGZyZXEpCisJCQlyZXR1cm4gZTsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworLyogVHVuZSB0aGUgUExMIHRvIHRoZSBjcnlzdGFsIHNwZWVkLiBjcnlzdGFsZnJlcSBpcyBpbiBrSHouICovCitzdGF0aWMgdm9pZCBzc2JfcG11MF9wbGxpbml0X3IwKHN0cnVjdCBzc2JfY2hpcGNvbW1vbiAqY2MsCisJCQkJdTMyIGNyeXN0YWxmcmVxKQoreworCXN0cnVjdCBzc2JfYnVzICpidXMgPSBjYy0+ZGV2LT5idXM7CisJY29uc3Qgc3RydWN0IHBtdTBfcGxsdGFiX2VudHJ5ICplID0gTlVMTDsKKwl1MzIgcG11Y3RsLCB0bXAsIHBsbGN0bDsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWlmICgoYnVzLT5jaGlwX2lkID09IDB4NTM1NCkgJiYgIWNyeXN0YWxmcmVxKSB7CisJCS8qIFRoZSA1MzU0IGNyeXN0YWwgZnJlcSBpcyAyNU1IeiAqLworCQljcnlzdGFsZnJlcSA9IDI1MDAwOworCX0KKwlpZiAoY3J5c3RhbGZyZXEpCisJCWUgPSBwbXUwX3BsbHRhYl9maW5kX2VudHJ5KGNyeXN0YWxmcmVxKTsKKwlpZiAoIWUpCisJCWUgPSBwbXUwX3BsbHRhYl9maW5kX2VudHJ5KFNTQl9QTVUwX0RFRkFVTFRfWFRBTEZSRVEpOworCUJVR19PTighZSk7CisJY3J5c3RhbGZyZXEgPSBlLT5mcmVxOworCWNjLT5wbXUuY3J5c3RhbGZyZXEgPSBlLT5mcmVxOworCisJLyogQ2hlY2sgaWYgdGhlIFBMTCBhbHJlYWR5IGlzIHByb2dyYW1tZWQgdG8gdGhpcyBmcmVxdWVuY3kuICovCisJcG11Y3RsID0gY2hpcGNvX3JlYWQzMihjYywgU1NCX0NISVBDT19QTVVfQ1RMKTsKKwlpZiAoKChwbXVjdGwgJiBTU0JfQ0hJUENPX1BNVV9DVExfWFRBTEZSRVEpID4+IFNTQl9DSElQQ09fUE1VX0NUTF9YVEFMRlJFUV9TSElGVCkgPT0gZS0+eGYpIHsKKwkJLyogV2UncmUgYWxyZWFkeSB0aGVyZS4uLiAqLworCQlyZXR1cm47CisJfQorCisJc3NiX3ByaW50ayhLRVJOX0lORk8gUEZYICJQcm9ncmFtbWluZyBQTEwgdG8gJXUuJTAzdSBNSHpcbiIsCisJCSAgIChjcnlzdGFsZnJlcSAvIDEwMDApLCAoY3J5c3RhbGZyZXEgJSAxMDAwKSk7CisKKwkvKiBGaXJzdCB0dXJuIHRoZSBQTEwgb2ZmLiAqLworCXN3aXRjaCAoYnVzLT5jaGlwX2lkKSB7CisJY2FzZSAweDQzMjg6CisJCWNoaXBjb19tYXNrMzIoY2MsIFNTQl9DSElQQ09fUE1VX01JTlJFU19NU0ssCisJCQkgICAgICB+KDEgPDwgU1NCX1BNVVJFU180MzI4X0JCX1BMTF9QVSkpOworCQljaGlwY29fbWFzazMyKGNjLCBTU0JfQ0hJUENPX1BNVV9NQVhSRVNfTVNLLAorCQkJICAgICAgfigxIDw8IFNTQl9QTVVSRVNfNDMyOF9CQl9QTExfUFUpKTsKKwkJYnJlYWs7CisJY2FzZSAweDUzNTQ6CisJCWNoaXBjb19tYXNrMzIoY2MsIFNTQl9DSElQQ09fUE1VX01JTlJFU19NU0ssCisJCQkgICAgICB+KDEgPDwgU1NCX1BNVVJFU181MzU0X0JCX1BMTF9QVSkpOworCQljaGlwY29fbWFzazMyKGNjLCBTU0JfQ0hJUENPX1BNVV9NQVhSRVNfTVNLLAorCQkJICAgICAgfigxIDw8IFNTQl9QTVVSRVNfNTM1NF9CQl9QTExfUFUpKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJU1NCX1dBUk5fT04oMSk7CisJfQorCWZvciAoaSA9IDE1MDA7IGk7IGktLSkgeworCQl0bXAgPSBjaGlwY29fcmVhZDMyKGNjLCBTU0JfQ0hJUENPX0NMS0NUTFNUKTsKKwkJaWYgKCEodG1wICYgU1NCX0NISVBDT19DTEtDVExTVF9IQVZFSFQpKQorCQkJYnJlYWs7CisJCXVkZWxheSgxMCk7CisJfQorCXRtcCA9IGNoaXBjb19yZWFkMzIoY2MsIFNTQl9DSElQQ09fQ0xLQ1RMU1QpOworCWlmICh0bXAgJiBTU0JfQ0hJUENPX0NMS0NUTFNUX0hBVkVIVCkKKwkJc3NiX3ByaW50ayhLRVJOX0VNRVJHIFBGWCAiRmFpbGVkIHRvIHR1cm4gdGhlIFBMTCBvZmYhXG4iKTsKKworCS8qIFNldCBQRElWIGluIFBMTCBjb250cm9sIDAuICovCisJcGxsY3RsID0gc3NiX2NoaXBjb19wbGxfcmVhZChjYywgU1NCX1BNVTBfUExMQ1RMMCk7CisJaWYgKGNyeXN0YWxmcmVxID49IFNTQl9QTVUwX1BMTENUTDBfUERJVl9GUkVRKQorCQlwbGxjdGwgfD0gU1NCX1BNVTBfUExMQ1RMMF9QRElWX01TSzsKKwllbHNlCisJCXBsbGN0bCAmPSB+U1NCX1BNVTBfUExMQ1RMMF9QRElWX01TSzsKKwlzc2JfY2hpcGNvX3BsbF93cml0ZShjYywgU1NCX1BNVTBfUExMQ1RMMCwgcGxsY3RsKTsKKworCS8qIFNldCBXSUxEIGluIFBMTCBjb250cm9sIDEuICovCisJcGxsY3RsID0gc3NiX2NoaXBjb19wbGxfcmVhZChjYywgU1NCX1BNVTBfUExMQ1RMMSk7CisJcGxsY3RsICY9IH5TU0JfUE1VMF9QTExDVEwxX1NUT1BNT0Q7CisJcGxsY3RsICY9IH4oU1NCX1BNVTBfUExMQ1RMMV9XSUxEX0lNU0sgfCBTU0JfUE1VMF9QTExDVEwxX1dJTERfRk1TSyk7CisJcGxsY3RsIHw9ICgodTMyKWUtPndiX2ludCA8PCBTU0JfUE1VMF9QTExDVEwxX1dJTERfSU1TS19TSElGVCkgJiBTU0JfUE1VMF9QTExDVEwxX1dJTERfSU1TSzsKKwlwbGxjdGwgfD0gKCh1MzIpZS0+d2JfZnJhYyA8PCBTU0JfUE1VMF9QTExDVEwxX1dJTERfRk1TS19TSElGVCkgJiBTU0JfUE1VMF9QTExDVEwxX1dJTERfRk1TSzsKKwlpZiAoZS0+d2JfZnJhYyA9PSAwKQorCQlwbGxjdGwgfD0gU1NCX1BNVTBfUExMQ1RMMV9TVE9QTU9EOworCXNzYl9jaGlwY29fcGxsX3dyaXRlKGNjLCBTU0JfUE1VMF9QTExDVEwxLCBwbGxjdGwpOworCisJLyogU2V0IFdJTEQgaW4gUExMIGNvbnRyb2wgMi4gKi8KKwlwbGxjdGwgPSBzc2JfY2hpcGNvX3BsbF9yZWFkKGNjLCBTU0JfUE1VMF9QTExDVEwyKTsKKwlwbGxjdGwgJj0gflNTQl9QTVUwX1BMTENUTDJfV0lMRF9JTVNLSEk7CisJcGxsY3RsIHw9ICgoKHUzMillLT53Yl9pbnQgPj4gNCkgPDwgU1NCX1BNVTBfUExMQ1RMMl9XSUxEX0lNU0tISV9TSElGVCkgJiBTU0JfUE1VMF9QTExDVEwyX1dJTERfSU1TS0hJOworCXNzYl9jaGlwY29fcGxsX3dyaXRlKGNjLCBTU0JfUE1VMF9QTExDVEwyLCBwbGxjdGwpOworCisJLyogU2V0IHRoZSBjcnlzdGFsZnJlcXVlbmN5IGFuZCB0aGUgZGl2aXNvci4gKi8KKwlwbXVjdGwgPSBjaGlwY29fcmVhZDMyKGNjLCBTU0JfQ0hJUENPX1BNVV9DVEwpOworCXBtdWN0bCAmPSB+U1NCX0NISVBDT19QTVVfQ1RMX0lMUF9ESVY7CisJcG11Y3RsIHw9ICgoKGNyeXN0YWxmcmVxICsgMTI3KSAvIDEyOCAtIDEpIDw8IFNTQl9DSElQQ09fUE1VX0NUTF9JTFBfRElWX1NISUZUKQorCQkJJiBTU0JfQ0hJUENPX1BNVV9DVExfSUxQX0RJVjsKKwlwbXVjdGwgJj0gflNTQl9DSElQQ09fUE1VX0NUTF9YVEFMRlJFUTsKKwlwbXVjdGwgfD0gKCh1MzIpZS0+eGYgPDwgU1NCX0NISVBDT19QTVVfQ1RMX1hUQUxGUkVRX1NISUZUKSAmIFNTQl9DSElQQ09fUE1VX0NUTF9YVEFMRlJFUTsKKwljaGlwY29fd3JpdGUzMihjYywgU1NCX0NISVBDT19QTVVfQ1RMLCBwbXVjdGwpOworfQorCitzdHJ1Y3QgcG11MV9wbGx0YWJfZW50cnkgeworCXUxNiBmcmVxOwkvKiBDcnlzdGFsIGZyZXF1ZW5jeSBpbiBrSHouKi8KKwl1OCB4ZjsJCS8qIENyeXN0YWwgZnJlcXVlbmN5IHZhbHVlIGZvciBQTVUgY29udHJvbCAqLworCXU4IG5kaXZfaW50OworCXUzMiBuZGl2X2ZyYWM7CisJdTggcDFkaXY7CisJdTggcDJkaXY7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHBtdTFfcGxsdGFiX2VudHJ5IHBtdTFfcGxsdGFiW10gPSB7CisJeyAuZnJlcSA9IDEyMDAwLCAueGYgPSAgMSwgLnAxZGl2ID0gMywgLnAyZGl2ID0gMjIsIC5uZGl2X2ludCA9ICAweDksIC5uZGl2X2ZyYWMgPSAweEZGRkZFRiwgfSwKKwl7IC5mcmVxID0gMTMwMDAsIC54ZiA9ICAyLCAucDFkaXYgPSAxLCAucDJkaXYgPSAgNiwgLm5kaXZfaW50ID0gIDB4YiwgLm5kaXZfZnJhYyA9IDB4NDgzNDgzLCB9LAorCXsgLmZyZXEgPSAxNDQwMCwgLnhmID0gIDMsIC5wMWRpdiA9IDEsIC5wMmRpdiA9IDEwLCAubmRpdl9pbnQgPSAgMHhhLCAubmRpdl9mcmFjID0gMHgxQzcxQzcsIH0sCisJeyAuZnJlcSA9IDE1MzYwLCAueGYgPSAgNCwgLnAxZGl2ID0gMSwgLnAyZGl2ID0gIDUsIC5uZGl2X2ludCA9ICAweGIsIC5uZGl2X2ZyYWMgPSAweDc1NTU1NSwgfSwKKwl7IC5mcmVxID0gMTYyMDAsIC54ZiA9ICA1LCAucDFkaXYgPSAxLCAucDJkaXYgPSAxMCwgLm5kaXZfaW50ID0gIDB4NSwgLm5kaXZfZnJhYyA9IDB4NkU5RTA2LCB9LAorCXsgLmZyZXEgPSAxNjgwMCwgLnhmID0gIDYsIC5wMWRpdiA9IDEsIC5wMmRpdiA9IDEwLCAubmRpdl9pbnQgPSAgMHg1LCAubmRpdl9mcmFjID0gMHgzQ0YzQ0YsIH0sCisJeyAuZnJlcSA9IDE5MjAwLCAueGYgPSAgNywgLnAxZGl2ID0gMSwgLnAyZGl2ID0gIDksIC5uZGl2X2ludCA9ICAweDUsIC5uZGl2X2ZyYWMgPSAweDE3QjQyNSwgfSwKKwl7IC5mcmVxID0gMTk4MDAsIC54ZiA9ICA4LCAucDFkaXYgPSAxLCAucDJkaXYgPSAxMSwgLm5kaXZfaW50ID0gIDB4NCwgLm5kaXZfZnJhYyA9IDB4QTU3RUIsICB9LAorCXsgLmZyZXEgPSAyMDAwMCwgLnhmID0gIDksIC5wMWRpdiA9IDEsIC5wMmRpdiA9IDExLCAubmRpdl9pbnQgPSAgMHg0LCAubmRpdl9mcmFjID0gMCwgICAgICAgIH0sCisJeyAuZnJlcSA9IDI0MDAwLCAueGYgPSAxMCwgLnAxZGl2ID0gMywgLnAyZGl2ID0gMTEsIC5uZGl2X2ludCA9ICAweGEsIC5uZGl2X2ZyYWMgPSAwLCAgICAgICAgfSwKKwl7IC5mcmVxID0gMjUwMDAsIC54ZiA9IDExLCAucDFkaXYgPSA1LCAucDJkaXYgPSAxNiwgLm5kaXZfaW50ID0gIDB4YiwgLm5kaXZfZnJhYyA9IDAsICAgICAgICB9LAorCXsgLmZyZXEgPSAyNjAwMCwgLnhmID0gMTIsIC5wMWRpdiA9IDEsIC5wMmRpdiA9ICAyLCAubmRpdl9pbnQgPSAweDEwLCAubmRpdl9mcmFjID0gMHhFQzRFQzQsIH0sCisJeyAuZnJlcSA9IDMwMDAwLCAueGYgPSAxMywgLnAxZGl2ID0gMywgLnAyZGl2ID0gIDgsIC5uZGl2X2ludCA9ICAweGIsIC5uZGl2X2ZyYWMgPSAwLCAgICAgICAgfSwKKwl7IC5mcmVxID0gMzg0MDAsIC54ZiA9IDE0LCAucDFkaXYgPSAxLCAucDJkaXYgPSAgNSwgLm5kaXZfaW50ID0gIDB4NCwgLm5kaXZfZnJhYyA9IDB4OTU1NTU1LCB9LAorCXsgLmZyZXEgPSA0MDAwMCwgLnhmID0gMTUsIC5wMWRpdiA9IDEsIC5wMmRpdiA9ICAyLCAubmRpdl9pbnQgPSAgMHhiLCAubmRpdl9mcmFjID0gMCwgICAgICAgIH0sCit9OworCisjZGVmaW5lIFNTQl9QTVUxX0RFRkFVTFRfWFRBTEZSRVEJMTUzNjAKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwbXUxX3BsbHRhYl9lbnRyeSAqIHBtdTFfcGxsdGFiX2ZpbmRfZW50cnkodTMyIGNyeXN0YWxmcmVxKQoreworCWNvbnN0IHN0cnVjdCBwbXUxX3BsbHRhYl9lbnRyeSAqZTsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBtdTFfcGxsdGFiKTsgaSsrKSB7CisJCWUgPSAmcG11MV9wbGx0YWJbaV07CisJCWlmIChlLT5mcmVxID09IGNyeXN0YWxmcmVxKQorCQkJcmV0dXJuIGU7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qIFR1bmUgdGhlIFBMTCB0byB0aGUgY3J5c3RhbCBzcGVlZC4gY3J5c3RhbGZyZXEgaXMgaW4ga0h6LiAqLworc3RhdGljIHZvaWQgc3NiX3BtdTFfcGxsaW5pdF9yMChzdHJ1Y3Qgc3NiX2NoaXBjb21tb24gKmNjLAorCQkJCXUzMiBjcnlzdGFsZnJlcSkKK3sKKwlzdHJ1Y3Qgc3NiX2J1cyAqYnVzID0gY2MtPmRldi0+YnVzOworCWNvbnN0IHN0cnVjdCBwbXUxX3BsbHRhYl9lbnRyeSAqZSA9IE5VTEw7CisJdTMyIGJ1ZmZlcl9zdHJlbmd0aCA9IDA7CisJdTMyIHRtcCwgcGxsY3RsLCBwbXVjdGw7CisJdW5zaWduZWQgaW50IGk7CisKKwlpZiAoYnVzLT5jaGlwX2lkID09IDB4NDMxMikgeworCQkvKiBXZSBkbyBub3QgdG91Y2ggdGhlIEJDTTQzMTIgUExMIGFuZCBhc3N1bWUKKwkJICogdGhlIGRlZmF1bHQgY3J5c3RhbCBzZXR0aW5ncyB3b3JrIG91dC1vZi10aGUtYm94LiAqLworCQljYy0+cG11LmNyeXN0YWxmcmVxID0gMjAwMDA7CisJCXJldHVybjsKKwl9CisKKwlpZiAoY3J5c3RhbGZyZXEpCisJCWUgPSBwbXUxX3BsbHRhYl9maW5kX2VudHJ5KGNyeXN0YWxmcmVxKTsKKwlpZiAoIWUpCisJCWUgPSBwbXUxX3BsbHRhYl9maW5kX2VudHJ5KFNTQl9QTVUxX0RFRkFVTFRfWFRBTEZSRVEpOworCUJVR19PTighZSk7CisJY3J5c3RhbGZyZXEgPSBlLT5mcmVxOworCWNjLT5wbXUuY3J5c3RhbGZyZXEgPSBlLT5mcmVxOworCisJLyogQ2hlY2sgaWYgdGhlIFBMTCBhbHJlYWR5IGlzIHByb2dyYW1tZWQgdG8gdGhpcyBmcmVxdWVuY3kuICovCisJcG11Y3RsID0gY2hpcGNvX3JlYWQzMihjYywgU1NCX0NISVBDT19QTVVfQ1RMKTsKKwlpZiAoKChwbXVjdGwgJiBTU0JfQ0hJUENPX1BNVV9DVExfWFRBTEZSRVEpID4+IFNTQl9DSElQQ09fUE1VX0NUTF9YVEFMRlJFUV9TSElGVCkgPT0gZS0+eGYpIHsKKwkJLyogV2UncmUgYWxyZWFkeSB0aGVyZS4uLiAqLworCQlyZXR1cm47CisJfQorCisJc3NiX3ByaW50ayhLRVJOX0lORk8gUEZYICJQcm9ncmFtbWluZyBQTEwgdG8gJXUuJTAzdSBNSHpcbiIsCisJCSAgIChjcnlzdGFsZnJlcSAvIDEwMDApLCAoY3J5c3RhbGZyZXEgJSAxMDAwKSk7CisKKwkvKiBGaXJzdCB0dXJuIHRoZSBQTEwgb2ZmLiAqLworCXN3aXRjaCAoYnVzLT5jaGlwX2lkKSB7CisJY2FzZSAweDQzMjU6CisJCWNoaXBjb19tYXNrMzIoY2MsIFNTQl9DSElQQ09fUE1VX01JTlJFU19NU0ssCisJCQkgICAgICB+KCgxIDw8IFNTQl9QTVVSRVNfNDMyNV9CQlBMTF9QV1JTV19QVSkgfAorCQkJCSgxIDw8IFNTQl9QTVVSRVNfNDMyNV9IVF9BVkFJTCkpKTsKKwkJY2hpcGNvX21hc2szMihjYywgU1NCX0NISVBDT19QTVVfTUFYUkVTX01TSywKKwkJCSAgICAgIH4oKDEgPDwgU1NCX1BNVVJFU180MzI1X0JCUExMX1BXUlNXX1BVKSB8CisJCQkJKDEgPDwgU1NCX1BNVVJFU180MzI1X0hUX0FWQUlMKSkpOworCQkvKiBBZGp1c3QgdGhlIEJCUExMIHRvIDIgb24gYWxsIGNoYW5uZWxzIGxhdGVyLiAqLworCQlidWZmZXJfc3RyZW5ndGggPSAweDIyMjIyMjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJU1NCX1dBUk5fT04oMSk7CisJfQorCWZvciAoaSA9IDE1MDA7IGk7IGktLSkgeworCQl0bXAgPSBjaGlwY29fcmVhZDMyKGNjLCBTU0JfQ0hJUENPX0NMS0NUTFNUKTsKKwkJaWYgKCEodG1wICYgU1NCX0NISVBDT19DTEtDVExTVF9IQVZFSFQpKQorCQkJYnJlYWs7CisJCXVkZWxheSgxMCk7CisJfQorCXRtcCA9IGNoaXBjb19yZWFkMzIoY2MsIFNTQl9DSElQQ09fQ0xLQ1RMU1QpOworCWlmICh0bXAgJiBTU0JfQ0hJUENPX0NMS0NUTFNUX0hBVkVIVCkKKwkJc3NiX3ByaW50ayhLRVJOX0VNRVJHIFBGWCAiRmFpbGVkIHRvIHR1cm4gdGhlIFBMTCBvZmYhXG4iKTsKKworCS8qIFNldCBwMWRpdiBhbmQgcDJkaXYuICovCisJcGxsY3RsID0gc3NiX2NoaXBjb19wbGxfcmVhZChjYywgU1NCX1BNVTFfUExMQ1RMMCk7CisJcGxsY3RsICY9IH4oU1NCX1BNVTFfUExMQ1RMMF9QMURJViB8IFNTQl9QTVUxX1BMTENUTDBfUDJESVYpOworCXBsbGN0bCB8PSAoKHUzMillLT5wMWRpdiA8PCBTU0JfUE1VMV9QTExDVEwwX1AxRElWX1NISUZUKSAmIFNTQl9QTVUxX1BMTENUTDBfUDFESVY7CisJcGxsY3RsIHw9ICgodTMyKWUtPnAyZGl2IDw8IFNTQl9QTVUxX1BMTENUTDBfUDJESVZfU0hJRlQpICYgU1NCX1BNVTFfUExMQ1RMMF9QMkRJVjsKKwlzc2JfY2hpcGNvX3BsbF93cml0ZShjYywgU1NCX1BNVTFfUExMQ1RMMCwgcGxsY3RsKTsKKworCS8qIFNldCBuZGl2IGludCBhbmQgbmRpdiBtb2RlICovCisJcGxsY3RsID0gc3NiX2NoaXBjb19wbGxfcmVhZChjYywgU1NCX1BNVTFfUExMQ1RMMik7CisJcGxsY3RsICY9IH4oU1NCX1BNVTFfUExMQ1RMMl9ORElWSU5UIHwgU1NCX1BNVTFfUExMQ1RMMl9ORElWTU9ERSk7CisJcGxsY3RsIHw9ICgodTMyKWUtPm5kaXZfaW50IDw8IFNTQl9QTVUxX1BMTENUTDJfTkRJVklOVF9TSElGVCkgJiBTU0JfUE1VMV9QTExDVEwyX05ESVZJTlQ7CisJcGxsY3RsIHw9ICgxIDw8IFNTQl9QTVUxX1BMTENUTDJfTkRJVk1PREVfU0hJRlQpICYgU1NCX1BNVTFfUExMQ1RMMl9ORElWTU9ERTsKKwlzc2JfY2hpcGNvX3BsbF93cml0ZShjYywgU1NCX1BNVTFfUExMQ1RMMiwgcGxsY3RsKTsKKworCS8qIFNldCBuZGl2IGZyYWMgKi8KKwlwbGxjdGwgPSBzc2JfY2hpcGNvX3BsbF9yZWFkKGNjLCBTU0JfUE1VMV9QTExDVEwzKTsKKwlwbGxjdGwgJj0gflNTQl9QTVUxX1BMTENUTDNfTkRJVkZSQUM7CisJcGxsY3RsIHw9ICgodTMyKWUtPm5kaXZfZnJhYyA8PCBTU0JfUE1VMV9QTExDVEwzX05ESVZGUkFDX1NISUZUKSAmIFNTQl9QTVUxX1BMTENUTDNfTkRJVkZSQUM7CisJc3NiX2NoaXBjb19wbGxfd3JpdGUoY2MsIFNTQl9QTVUxX1BMTENUTDMsIHBsbGN0bCk7CisKKwkvKiBDaGFuZ2UgdGhlIGRyaXZlIHN0cmVuZ3RoLCBpZiByZXF1aXJlZC4gKi8KKwlpZiAoYnVmZmVyX3N0cmVuZ3RoKSB7CisJCXBsbGN0bCA9IHNzYl9jaGlwY29fcGxsX3JlYWQoY2MsIFNTQl9QTVUxX1BMTENUTDUpOworCQlwbGxjdGwgJj0gflNTQl9QTVUxX1BMTENUTDVfQ0xLRFJWOworCQlwbGxjdGwgfD0gKGJ1ZmZlcl9zdHJlbmd0aCA8PCBTU0JfUE1VMV9QTExDVEw1X0NMS0RSVl9TSElGVCkgJiBTU0JfUE1VMV9QTExDVEw1X0NMS0RSVjsKKwkJc3NiX2NoaXBjb19wbGxfd3JpdGUoY2MsIFNTQl9QTVUxX1BMTENUTDUsIHBsbGN0bCk7CisJfQorCisJLyogVHVuZSB0aGUgY3J5c3RhbGZyZXEgYW5kIHRoZSBkaXZpc29yLiAqLworCXBtdWN0bCA9IGNoaXBjb19yZWFkMzIoY2MsIFNTQl9DSElQQ09fUE1VX0NUTCk7CisJcG11Y3RsICY9IH4oU1NCX0NISVBDT19QTVVfQ1RMX0lMUF9ESVYgfCBTU0JfQ0hJUENPX1BNVV9DVExfWFRBTEZSRVEpOworCXBtdWN0bCB8PSAoKCgodTMyKWUtPmZyZXEgKyAxMjcpIC8gMTI4IC0gMSkgPDwgU1NCX0NISVBDT19QTVVfQ1RMX0lMUF9ESVZfU0hJRlQpCisJCQkmIFNTQl9DSElQQ09fUE1VX0NUTF9JTFBfRElWOworCXBtdWN0bCB8PSAoKHUzMillLT54ZiA8PCBTU0JfQ0hJUENPX1BNVV9DVExfWFRBTEZSRVFfU0hJRlQpICYgU1NCX0NISVBDT19QTVVfQ1RMX1hUQUxGUkVROworCWNoaXBjb193cml0ZTMyKGNjLCBTU0JfQ0hJUENPX1BNVV9DVEwsIHBtdWN0bCk7Cit9CisKK3N0YXRpYyB2b2lkIHNzYl9wbXVfcGxsX2luaXQoc3RydWN0IHNzYl9jaGlwY29tbW9uICpjYykKK3sKKwlzdHJ1Y3Qgc3NiX2J1cyAqYnVzID0gY2MtPmRldi0+YnVzOworCXUzMiBjcnlzdGFsZnJlcSA9IDA7IC8qIGluIGtIei4gMCA9IGtlZXAgZGVmYXVsdCBmcmVxLiAqLworCisJaWYgKGJ1cy0+YnVzdHlwZSA9PSBTU0JfQlVTVFlQRV9TU0IpIHsKKwkJLyogVE9ETzogVGhlIHVzZXIgbWF5IG92ZXJyaWRlIHRoZSBjcnlzdGFsIGZyZXF1ZW5jeS4gKi8KKwl9CisKKwlzd2l0Y2ggKGJ1cy0+Y2hpcF9pZCkgeworCWNhc2UgMHg0MzEyOgorCWNhc2UgMHg0MzI1OgorCQlzc2JfcG11MV9wbGxpbml0X3IwKGNjLCBjcnlzdGFsZnJlcSk7CisJCWJyZWFrOworCWNhc2UgMHg0MzI4OgorCWNhc2UgMHg1MzU0OgorCQlzc2JfcG11MF9wbGxpbml0X3IwKGNjLCBjcnlzdGFsZnJlcSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXNzYl9wcmludGsoS0VSTl9FUlIgUEZYCisJCQkgICAiRVJST1I6IFBMTCBpbml0IHVua25vd24gZm9yIGRldmljZSAlMDRYXG4iLAorCQkJICAgYnVzLT5jaGlwX2lkKTsKKwl9Cit9CisKK3N0cnVjdCBwbXVfcmVzX3VwZG93bl90YWJfZW50cnkgeworCXU4IHJlc291cmNlOwkvKiBUaGUgcmVzb3VyY2UgbnVtYmVyICovCisJdTE2IHVwZG93bjsJLyogVGhlIHVwZG93biB2YWx1ZSAqLworfTsKKworZW51bSBwbXVfcmVzX2RlcGVuZF90YWJfdGFzayB7CisJUE1VX1JFU19ERVBfU0VUID0gMSwKKwlQTVVfUkVTX0RFUF9BREQsCisJUE1VX1JFU19ERVBfUkVNT1ZFLAorfTsKKworc3RydWN0IHBtdV9yZXNfZGVwZW5kX3RhYl9lbnRyeSB7CisJdTggcmVzb3VyY2U7CS8qIFRoZSByZXNvdXJjZSBudW1iZXIgKi8KKwl1OCB0YXNrOwkvKiBTRVQgfCBBREQgfCBSRU1PVkUgKi8KKwl1MzIgZGVwZW5kOwkvKiBUaGUgZGVwZW5kIG1hc2sgKi8KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcG11X3Jlc191cGRvd25fdGFiX2VudHJ5IHBtdV9yZXNfdXBkb3duX3RhYl80MzI4YTBbXSA9IHsKKwl7IC5yZXNvdXJjZSA9IFNTQl9QTVVSRVNfNDMyOF9FWFRfU1dJVENIRVJfUFdNLAkJLnVwZG93biA9IDB4MDEwMSwgfSwKKwl7IC5yZXNvdXJjZSA9IFNTQl9QTVVSRVNfNDMyOF9CQl9TV0lUQ0hFUl9QV00sCQkudXBkb3duID0gMHgxRjAxLCB9LAorCXsgLnJlc291cmNlID0gU1NCX1BNVVJFU180MzI4X0JCX1NXSVRDSEVSX0JVUlNULAkudXBkb3duID0gMHgwMTBGLCB9LAorCXsgLnJlc291cmNlID0gU1NCX1BNVVJFU180MzI4X0JCX0VYVF9TV0lUQ0hFUl9CVVJTVCwJLnVwZG93biA9IDB4MDEwMSwgfSwKKwl7IC5yZXNvdXJjZSA9IFNTQl9QTVVSRVNfNDMyOF9JTFBfUkVRVUVTVCwJCS51cGRvd24gPSAweDAyMDIsIH0sCisJeyAucmVzb3VyY2UgPSBTU0JfUE1VUkVTXzQzMjhfUkFESU9fU1dJVENIRVJfUFdNLAkudXBkb3duID0gMHgwRjAxLCB9LAorCXsgLnJlc291cmNlID0gU1NCX1BNVVJFU180MzI4X1JBRElPX1NXSVRDSEVSX0JVUlNULAkudXBkb3duID0gMHgwRjAxLCB9LAorCXsgLnJlc291cmNlID0gU1NCX1BNVVJFU180MzI4X1JPTV9TV0lUQ0gsCQkudXBkb3duID0gMHgwMTAxLCB9LAorCXsgLnJlc291cmNlID0gU1NCX1BNVVJFU180MzI4X1BBX1JFRl9MRE8sCQkudXBkb3duID0gMHgwRjAxLCB9LAorCXsgLnJlc291cmNlID0gU1NCX1BNVVJFU180MzI4X1JBRElPX0xETywJCS51cGRvd24gPSAweDBGMDEsIH0sCisJeyAucmVzb3VyY2UgPSBTU0JfUE1VUkVTXzQzMjhfQUZFX0xETywJCQkudXBkb3duID0gMHgwRjAxLCB9LAorCXsgLnJlc291cmNlID0gU1NCX1BNVVJFU180MzI4X1BMTF9MRE8sCQkJLnVwZG93biA9IDB4MEYwMSwgfSwKKwl7IC5yZXNvdXJjZSA9IFNTQl9QTVVSRVNfNDMyOF9CR19GSUxUQllQLAkJLnVwZG93biA9IDB4MDEwMSwgfSwKKwl7IC5yZXNvdXJjZSA9IFNTQl9QTVVSRVNfNDMyOF9UWF9GSUxUQllQLAkJLnVwZG93biA9IDB4MDEwMSwgfSwKKwl7IC5yZXNvdXJjZSA9IFNTQl9QTVVSRVNfNDMyOF9SWF9GSUxUQllQLAkJLnVwZG93biA9IDB4MDEwMSwgfSwKKwl7IC5yZXNvdXJjZSA9IFNTQl9QTVVSRVNfNDMyOF9YVEFMX1BVLAkJCS51cGRvd24gPSAweDAxMDEsIH0sCisJeyAucmVzb3VyY2UgPSBTU0JfUE1VUkVTXzQzMjhfWFRBTF9FTiwJCQkudXBkb3duID0gMHhBMDAxLCB9LAorCXsgLnJlc291cmNlID0gU1NCX1BNVVJFU180MzI4X0JCX1BMTF9GSUxUQllQLAkJLnVwZG93biA9IDB4MDEwMSwgfSwKKwl7IC5yZXNvdXJjZSA9IFNTQl9QTVVSRVNfNDMyOF9SRl9QTExfRklMVEJZUCwJCS51cGRvd24gPSAweDAxMDEsIH0sCisJeyAucmVzb3VyY2UgPSBTU0JfUE1VUkVTXzQzMjhfQkJfUExMX1BVLAkJLnVwZG93biA9IDB4MDcwMSwgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcG11X3Jlc19kZXBlbmRfdGFiX2VudHJ5IHBtdV9yZXNfZGVwZW5kX3RhYl80MzI4YTBbXSA9IHsKKwl7CisJCS8qIEFkanVzdCBJTFAgUmVxdWVzdCB0byBhdm9pZCBmb3JjaW5nIEVYVC9CQiBpbnRvIGJ1cnN0IG1vZGUuICovCisJCS5yZXNvdXJjZSA9IFNTQl9QTVVSRVNfNDMyOF9JTFBfUkVRVUVTVCwKKwkJLnRhc2sgPSBQTVVfUkVTX0RFUF9TRVQsCisJCS5kZXBlbmQgPSAoKDEgPDwgU1NCX1BNVVJFU180MzI4X0VYVF9TV0lUQ0hFUl9QV00pIHwKKwkJCSAgICgxIDw8IFNTQl9QTVVSRVNfNDMyOF9CQl9TV0lUQ0hFUl9QV00pKSwKKwl9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwbXVfcmVzX3VwZG93bl90YWJfZW50cnkgcG11X3Jlc191cGRvd25fdGFiXzQzMjVhMFtdID0geworCXsgLnJlc291cmNlID0gU1NCX1BNVVJFU180MzI1X1hUQUxfUFUsCQkJLnVwZG93biA9IDB4MTUwMSwgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcG11X3Jlc19kZXBlbmRfdGFiX2VudHJ5IHBtdV9yZXNfZGVwZW5kX3RhYl80MzI1YTBbXSA9IHsKKwl7CisJCS8qIEFkanVzdCBIVC1BdmFpbGFibGUgZGVwZW5kZW5jaWVzLiAqLworCQkucmVzb3VyY2UgPSBTU0JfUE1VUkVTXzQzMjVfSFRfQVZBSUwsCisJCS50YXNrID0gUE1VX1JFU19ERVBfQURELAorCQkuZGVwZW5kID0gKCgxIDw8IFNTQl9QTVVSRVNfNDMyNV9SWF9QV1JTV19QVSkgfAorCQkJICAgKDEgPDwgU1NCX1BNVVJFU180MzI1X1RYX1BXUlNXX1BVKSB8CisJCQkgICAoMSA8PCBTU0JfUE1VUkVTXzQzMjVfTE9HRU5fUFdSU1dfUFUpIHwKKwkJCSAgICgxIDw8IFNTQl9QTVVSRVNfNDMyNV9BRkVfUFdSU1dfUFUpKSwKKwl9LAorfTsKKworc3RhdGljIHZvaWQgc3NiX3BtdV9yZXNvdXJjZXNfaW5pdChzdHJ1Y3Qgc3NiX2NoaXBjb21tb24gKmNjKQoreworCXN0cnVjdCBzc2JfYnVzICpidXMgPSBjYy0+ZGV2LT5idXM7CisJdTMyIG1pbl9tc2sgPSAwLCBtYXhfbXNrID0gMDsKKwl1bnNpZ25lZCBpbnQgaTsKKwljb25zdCBzdHJ1Y3QgcG11X3Jlc191cGRvd25fdGFiX2VudHJ5ICp1cGRvd25fdGFiID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQgdXBkb3duX3RhYl9zaXplOworCWNvbnN0IHN0cnVjdCBwbXVfcmVzX2RlcGVuZF90YWJfZW50cnkgKmRlcGVuZF90YWIgPSBOVUxMOworCXVuc2lnbmVkIGludCBkZXBlbmRfdGFiX3NpemU7CisKKwlzd2l0Y2ggKGJ1cy0+Y2hpcF9pZCkgeworCWNhc2UgMHg0MzEyOgorCQkvKiBXZSBrZWVwIHRoZSBkZWZhdWx0IHNldHRpbmdzOgorCQkgKiBtaW5fbXNrID0gMHhDQkIKKwkJICogbWF4X21zayA9IDB4N0ZGRkYKKwkJICovCisJCWJyZWFrOworCWNhc2UgMHg0MzI1OgorCQkvKiBQb3dlciBPVFAgZG93biBsYXRlci4gKi8KKwkJbWluX21zayA9ICgxIDw8IFNTQl9QTVVSRVNfNDMyNV9DQlVDS19CVVJTVCkgfAorCQkJICAoMSA8PCBTU0JfUE1VUkVTXzQzMjVfTE5MRE8yX1BVKTsKKwkJaWYgKGNoaXBjb19yZWFkMzIoY2MsIFNTQl9DSElQQ09fQ0hJUFNUQVQpICYKKwkJICAgIFNTQl9DSElQQ09fQ0hTVF80MzI1X1BNVVRPUF8yQikKKwkJCW1pbl9tc2sgfD0gKDEgPDwgU1NCX1BNVVJFU180MzI1X0NMRE9fQ0JVQ0tfQlVSU1QpOworCQkvKiBUaGUgUExMIG1heSB0dXJuIG9uLCBpZiBpdCBkZWNpZGVzIHNvLiAqLworCQltYXhfbXNrID0gMHhGRkZGRjsKKwkJdXBkb3duX3RhYiA9IHBtdV9yZXNfdXBkb3duX3RhYl80MzI1YTA7CisJCXVwZG93bl90YWJfc2l6ZSA9IEFSUkFZX1NJWkUocG11X3Jlc191cGRvd25fdGFiXzQzMjVhMCk7CisJCWRlcGVuZF90YWIgPSBwbXVfcmVzX2RlcGVuZF90YWJfNDMyNWEwOworCQlkZXBlbmRfdGFiX3NpemUgPSBBUlJBWV9TSVpFKHBtdV9yZXNfZGVwZW5kX3RhYl80MzI1YTApOworCQlicmVhazsKKwljYXNlIDB4NDMyODoKKwkJbWluX21zayA9ICgxIDw8IFNTQl9QTVVSRVNfNDMyOF9FWFRfU1dJVENIRVJfUFdNKSB8CisJCQkgICgxIDw8IFNTQl9QTVVSRVNfNDMyOF9CQl9TV0lUQ0hFUl9QV00pIHwKKwkJCSAgKDEgPDwgU1NCX1BNVVJFU180MzI4X1hUQUxfRU4pOworCQkvKiBUaGUgUExMIG1heSB0dXJuIG9uLCBpZiBpdCBkZWNpZGVzIHNvLiAqLworCQltYXhfbXNrID0gMHhGRkZGRjsKKwkJdXBkb3duX3RhYiA9IHBtdV9yZXNfdXBkb3duX3RhYl80MzI4YTA7CisJCXVwZG93bl90YWJfc2l6ZSA9IEFSUkFZX1NJWkUocG11X3Jlc191cGRvd25fdGFiXzQzMjhhMCk7CisJCWRlcGVuZF90YWIgPSBwbXVfcmVzX2RlcGVuZF90YWJfNDMyOGEwOworCQlkZXBlbmRfdGFiX3NpemUgPSBBUlJBWV9TSVpFKHBtdV9yZXNfZGVwZW5kX3RhYl80MzI4YTApOworCQlicmVhazsKKwljYXNlIDB4NTM1NDoKKwkJLyogVGhlIFBMTCBtYXkgdHVybiBvbiwgaWYgaXQgZGVjaWRlcyBzby4gKi8KKwkJbWF4X21zayA9IDB4RkZGRkY7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXNzYl9wcmludGsoS0VSTl9FUlIgUEZYCisJCQkgICAiRVJST1I6IFBNVSByZXNvdXJjZSBjb25maWcgdW5rbm93biBmb3IgZGV2aWNlICUwNFhcbiIsCisJCQkgICBidXMtPmNoaXBfaWQpOworCX0KKworCWlmICh1cGRvd25fdGFiKSB7CisJCWZvciAoaSA9IDA7IGkgPCB1cGRvd25fdGFiX3NpemU7IGkrKykgeworCQkJY2hpcGNvX3dyaXRlMzIoY2MsIFNTQl9DSElQQ09fUE1VX1JFU19UQUJTRUwsCisJCQkJICAgICAgIHVwZG93bl90YWJbaV0ucmVzb3VyY2UpOworCQkJY2hpcGNvX3dyaXRlMzIoY2MsIFNTQl9DSElQQ09fUE1VX1JFU19VUEROVE0sCisJCQkJICAgICAgIHVwZG93bl90YWJbaV0udXBkb3duKTsKKwkJfQorCX0KKwlpZiAoZGVwZW5kX3RhYikgeworCQlmb3IgKGkgPSAwOyBpIDwgZGVwZW5kX3RhYl9zaXplOyBpKyspIHsKKwkJCWNoaXBjb193cml0ZTMyKGNjLCBTU0JfQ0hJUENPX1BNVV9SRVNfVEFCU0VMLAorCQkJCSAgICAgICBkZXBlbmRfdGFiW2ldLnJlc291cmNlKTsKKwkJCXN3aXRjaCAoZGVwZW5kX3RhYltpXS50YXNrKSB7CisJCQljYXNlIFBNVV9SRVNfREVQX1NFVDoKKwkJCQljaGlwY29fd3JpdGUzMihjYywgU1NCX0NISVBDT19QTVVfUkVTX0RFUE1TSywKKwkJCQkJICAgICAgIGRlcGVuZF90YWJbaV0uZGVwZW5kKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgUE1VX1JFU19ERVBfQUREOgorCQkJCWNoaXBjb19zZXQzMihjYywgU1NCX0NISVBDT19QTVVfUkVTX0RFUE1TSywKKwkJCQkJICAgICBkZXBlbmRfdGFiW2ldLmRlcGVuZCk7CisJCQkJYnJlYWs7CisJCQljYXNlIFBNVV9SRVNfREVQX1JFTU9WRToKKwkJCQljaGlwY29fbWFzazMyKGNjLCBTU0JfQ0hJUENPX1BNVV9SRVNfREVQTVNLLAorCQkJCQkgICAgICB+KGRlcGVuZF90YWJbaV0uZGVwZW5kKSk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCVNTQl9XQVJOX09OKDEpOworCQkJfQorCQl9CisJfQorCisJLyogU2V0IHRoZSByZXNvdXJjZSBtYXNrcy4gKi8KKwlpZiAobWluX21zaykKKwkJY2hpcGNvX3dyaXRlMzIoY2MsIFNTQl9DSElQQ09fUE1VX01JTlJFU19NU0ssIG1pbl9tc2spOworCWlmIChtYXhfbXNrKQorCQljaGlwY29fd3JpdGUzMihjYywgU1NCX0NISVBDT19QTVVfTUFYUkVTX01TSywgbWF4X21zayk7Cit9CisKK3ZvaWQgc3NiX3BtdV9pbml0KHN0cnVjdCBzc2JfY2hpcGNvbW1vbiAqY2MpCit7CisJc3RydWN0IHNzYl9idXMgKmJ1cyA9IGNjLT5kZXYtPmJ1czsKKwl1MzIgcG11Y2FwOworCisJaWYgKCEoY2MtPmNhcGFiaWxpdGllcyAmIFNTQl9DSElQQ09fQ0FQX1BNVSkpCisJCXJldHVybjsKKworCXBtdWNhcCA9IGNoaXBjb19yZWFkMzIoY2MsIFNTQl9DSElQQ09fUE1VX0NBUCk7CisJY2MtPnBtdS5yZXYgPSAocG11Y2FwICYgU1NCX0NISVBDT19QTVVfQ0FQX1JFVklTSU9OKTsKKworCXNzYl9kcHJpbnRrKEtFUk5fREVCVUcgUEZYICJGb3VuZCByZXYgJXUgUE1VIChjYXBhYmlsaXRpZXMgMHglMDhYKVxuIiwKKwkJICAgIGNjLT5wbXUucmV2LCBwbXVjYXApOworCisJaWYgKGNjLT5wbXUucmV2ID49IDEpIHsKKwkJaWYgKChidXMtPmNoaXBfaWQgPT0gMHg0MzI1KSAmJiAoYnVzLT5jaGlwX3JldiA8IDIpKSB7CisJCQljaGlwY29fbWFzazMyKGNjLCBTU0JfQ0hJUENPX1BNVV9DVEwsCisJCQkJICAgICAgflNTQl9DSElQQ09fUE1VX0NUTF9OT0lMUE9OVyk7CisJCX0gZWxzZSB7CisJCQljaGlwY29fc2V0MzIoY2MsIFNTQl9DSElQQ09fUE1VX0NUTCwKKwkJCQkgICAgIFNTQl9DSElQQ09fUE1VX0NUTF9OT0lMUE9OVyk7CisJCX0KKwl9CisJc3NiX3BtdV9wbGxfaW5pdChjYyk7CisJc3NiX3BtdV9yZXNvdXJjZXNfaW5pdChjYyk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NzYi9wY2kuYyBiL2RyaXZlcnMvc3NiL3BjaS5jCmluZGV4IGQ1Y2RlMDUuLjQwZWE0MTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3NiL3BjaS5jCisrKyBiL2RyaXZlcnMvc3NiL3BjaS5jCkBAIC00NjcsNiArNDY3LDUxIEBACiAJLyogVE9ETyAtIGdldCByZW1haW5pbmcgcmV2IDQgc3R1ZmYgbmVlZGVkICovCiB9CiAKK3N0YXRpYyB2b2lkIHNwcm9tX2V4dHJhY3Rfcjgoc3RydWN0IHNzYl9zcHJvbSAqb3V0LCBjb25zdCB1MTYgKmluKQoreworCWludCBpOworCXUxNiB2OworCisJLyogZXh0cmFjdCB0aGUgTUFDIGFkZHJlc3MgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCXYgPSBpbltTUE9GRihTU0JfU1BST00xX0lMME1BQykgKyBpXTsKKwkJKigoKF9fYmUxNiAqKW91dC0+aWwwbWFjKSArIGkpID0gY3B1X3RvX2JlMTYodik7CisJfQorCVNQRVgoY291bnRyeV9jb2RlLCBTU0JfU1BST004X0NDT0RFLCAweEZGRkYsIDApOworCVNQRVgoYm9hcmRmbGFnc19sbywgU1NCX1NQUk9NOF9CRkxMTywgMHhGRkZGLCAwKTsKKwlTUEVYKGJvYXJkZmxhZ3NfaGksIFNTQl9TUFJPTThfQkZMSEksIDB4RkZGRiwgMCk7CisJU1BFWChhbnRfYXZhaWxhYmxlX2EsIFNTQl9TUFJPTThfQU5UQVZBSUwsIFNTQl9TUFJPTThfQU5UQVZBSUxfQSwKKwkgICAgIFNTQl9TUFJPTThfQU5UQVZBSUxfQV9TSElGVCk7CisJU1BFWChhbnRfYXZhaWxhYmxlX2JnLCBTU0JfU1BST004X0FOVEFWQUlMLCBTU0JfU1BST004X0FOVEFWQUlMX0JHLAorCSAgICAgU1NCX1NQUk9NOF9BTlRBVkFJTF9CR19TSElGVCk7CisJU1BFWChtYXhwd3JfYmcsIFNTQl9TUFJPTThfTUFYUF9CRywgU1NCX1NQUk9NOF9NQVhQX0JHX01BU0ssIDApOworCVNQRVgoaXRzc2lfYmcsIFNTQl9TUFJPTThfTUFYUF9CRywgU1NCX1NQUk9NOF9JVFNTSV9CRywKKwkgICAgIFNTQl9TUFJPTThfSVRTU0lfQkdfU0hJRlQpOworCVNQRVgobWF4cHdyX2EsIFNTQl9TUFJPTThfTUFYUF9BLCBTU0JfU1BST004X01BWFBfQV9NQVNLLCAwKTsKKwlTUEVYKGl0c3NpX2EsIFNTQl9TUFJPTThfTUFYUF9BLCBTU0JfU1BST004X0lUU1NJX0EsCisJICAgICBTU0JfU1BST004X0lUU1NJX0FfU0hJRlQpOworCVNQRVgoZ3BpbzAsIFNTQl9TUFJPTThfR1BJT0EsIFNTQl9TUFJPTThfR1BJT0FfUDAsIDApOworCVNQRVgoZ3BpbzEsIFNTQl9TUFJPTThfR1BJT0EsIFNTQl9TUFJPTThfR1BJT0FfUDEsCisJICAgICBTU0JfU1BST004X0dQSU9BX1AxX1NISUZUKTsKKwlTUEVYKGdwaW8yLCBTU0JfU1BST004X0dQSU9CLCBTU0JfU1BST004X0dQSU9CX1AyLCAwKTsKKwlTUEVYKGdwaW8zLCBTU0JfU1BST004X0dQSU9CLCBTU0JfU1BST004X0dQSU9CX1AzLAorCSAgICAgU1NCX1NQUk9NOF9HUElPQl9QM19TSElGVCk7CisKKwkvKiBFeHRyYWN0IHRoZSBhbnRlbm5hIGdhaW4gdmFsdWVzLiAqLworCVNQRVgoYW50ZW5uYV9nYWluLmdoejI0LmEwLCBTU0JfU1BST004X0FHQUlOMDEsCisJICAgICBTU0JfU1BST004X0FHQUlOMCwgU1NCX1NQUk9NOF9BR0FJTjBfU0hJRlQpOworCVNQRVgoYW50ZW5uYV9nYWluLmdoejI0LmExLCBTU0JfU1BST004X0FHQUlOMDEsCisJICAgICBTU0JfU1BST004X0FHQUlOMSwgU1NCX1NQUk9NOF9BR0FJTjFfU0hJRlQpOworCVNQRVgoYW50ZW5uYV9nYWluLmdoejI0LmEyLCBTU0JfU1BST004X0FHQUlOMjMsCisJICAgICBTU0JfU1BST004X0FHQUlOMiwgU1NCX1NQUk9NOF9BR0FJTjJfU0hJRlQpOworCVNQRVgoYW50ZW5uYV9nYWluLmdoejI0LmEzLCBTU0JfU1BST004X0FHQUlOMjMsCisJICAgICBTU0JfU1BST004X0FHQUlOMywgU1NCX1NQUk9NOF9BR0FJTjNfU0hJRlQpOworCW1lbWNweSgmb3V0LT5hbnRlbm5hX2dhaW4uZ2h6NSwgJm91dC0+YW50ZW5uYV9nYWluLmdoejI0LAorCSAgICAgICBzaXplb2Yob3V0LT5hbnRlbm5hX2dhaW4uZ2h6NSkpOworCisJLyogVE9ETyAtIGdldCByZW1haW5pbmcgcmV2IDggc3R1ZmYgbmVlZGVkICovCit9CisKIHN0YXRpYyBpbnQgc3Byb21fZXh0cmFjdChzdHJ1Y3Qgc3NiX2J1cyAqYnVzLCBzdHJ1Y3Qgc3NiX3Nwcm9tICpvdXQsCiAJCQkgY29uc3QgdTE2ICppbiwgdTE2IHNpemUpCiB7CkBAIC00ODcsMTUgKzUzMiwyNSBAQAogCQlvdXQtPnJldmlzaW9uID0gNDsKIAkJc3Byb21fZXh0cmFjdF9yNDUob3V0LCBpbik7CiAJfSBlbHNlIHsKLQkJaWYgKG91dC0+cmV2aXNpb24gPT0gMCkKLQkJCWdvdG8gdW5zdXBwb3J0ZWQ7Ci0JCWlmIChvdXQtPnJldmlzaW9uID49IDEgJiYgb3V0LT5yZXZpc2lvbiA8PSAzKSB7CisJCXN3aXRjaCAob3V0LT5yZXZpc2lvbikgeworCQljYXNlIDE6CisJCWNhc2UgMjoKKwkJY2FzZSAzOgorCQkJc3Byb21fZXh0cmFjdF9yMTIzKG91dCwgaW4pOworCQkJYnJlYWs7CisJCWNhc2UgNDoKKwkJY2FzZSA1OgorCQkJc3Byb21fZXh0cmFjdF9yNDUob3V0LCBpbik7CisJCQlicmVhazsKKwkJY2FzZSA4OgorCQkJc3Byb21fZXh0cmFjdF9yOChvdXQsIGluKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJc3NiX3ByaW50ayhLRVJOX1dBUk5JTkcgUEZYICJVbnN1cHBvcnRlZCBTUFJPTSIKKwkJCQkgICAiICByZXZpc2lvbiAlZCBkZXRlY3RlZC4gV2lsbCBleHRyYWN0IgorCQkJCSAgICIgdjFcbiIsIG91dC0+cmV2aXNpb24pOwogCQkJc3Byb21fZXh0cmFjdF9yMTIzKG91dCwgaW4pOwogCQl9Ci0JCWlmIChvdXQtPnJldmlzaW9uID09IDQgfHwgb3V0LT5yZXZpc2lvbiA9PSA1KQotCQkJc3Byb21fZXh0cmFjdF9yNDUob3V0LCBpbik7Ci0JCWlmIChvdXQtPnJldmlzaW9uID4gNSkKLQkJCWdvdG8gdW5zdXBwb3J0ZWQ7CiAJfQogCiAJaWYgKG91dC0+Ym9hcmRmbGFnc19sbyA9PSAweEZGRkYpCkBAIC01MDQsMTYgKzU1OSwxMiBAQAogCQlvdXQtPmJvYXJkZmxhZ3NfaGkgPSAwOyAgLyogcGVyIHNwZWNzICovCiAKIAlyZXR1cm4gMDsKLXVuc3VwcG9ydGVkOgotCXNzYl9wcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiVW5zdXBwb3J0ZWQgU1BST00gcmV2aXNpb24gJWQgIgotCQkgICAiZGV0ZWN0ZWQuIFdpbGwgZXh0cmFjdCB2MVxuIiwgb3V0LT5yZXZpc2lvbik7Ci0Jc3Byb21fZXh0cmFjdF9yMTIzKG91dCwgaW4pOwotCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHNzYl9wY2lfc3Byb21fZ2V0KHN0cnVjdCBzc2JfYnVzICpidXMsCiAJCQkgICAgIHN0cnVjdCBzc2Jfc3Byb20gKnNwcm9tKQogeworCWNvbnN0IHN0cnVjdCBzc2Jfc3Byb20gKmZhbGxiYWNrOwogCWludCBlcnIgPSAtRU5PTUVNOwogCXUxNiAqYnVmOwogCkBAIC01MzMsMTIgKzU4NCwyMyBAQAogCQlidXMtPnNwcm9tX3NpemUgPSBTU0JfU1BST01TSVpFX1dPUkRTX1I0OwogCQlzcHJvbV9kb19yZWFkKGJ1cywgYnVmKTsKIAkJZXJyID0gc3Byb21fY2hlY2tfY3JjKGJ1ZiwgYnVzLT5zcHJvbV9zaXplKTsKLQkJaWYgKGVycikKKwkJaWYgKGVycikgeworCQkJLyogQWxsIENSQyBhdHRlbXB0cyBmYWlsZWQuCisJCQkgKiBNYXliZSB0aGVyZSBpcyBubyBTUFJPTSBvbiB0aGUgZGV2aWNlPworCQkJICogSWYgd2UgaGF2ZSBhIGZhbGxiYWNrLCB1c2UgdGhhdC4gKi8KKwkJCWZhbGxiYWNrID0gc3NiX2dldF9mYWxsYmFja19zcHJvbSgpOworCQkJaWYgKGZhbGxiYWNrKSB7CisJCQkJbWVtY3B5KHNwcm9tLCBmYWxsYmFjaywgc2l6ZW9mKCpzcHJvbSkpOworCQkJCWVyciA9IDA7CisJCQkJZ290byBvdXRfZnJlZTsKKwkJCX0KIAkJCXNzYl9wcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiV0FSTklORzogSW52YWxpZCIKIAkJCQkgICAiIFNQUk9NIENSQyAoY29ycnVwdCBTUFJPTSlcbiIpOworCQl9CiAJfQogCWVyciA9IHNwcm9tX2V4dHJhY3QoYnVzLCBzcHJvbSwgYnVmLCBidXMtPnNwcm9tX3NpemUpOwogCitvdXRfZnJlZToKIAlrZnJlZShidWYpOwogb3V0OgogCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NzYi9zcHJvbS5jIGIvZHJpdmVycy9zc2Ivc3Byb20uYwppbmRleCAzNjY4ZWRiLi44OTQzMDE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NzYi9zcHJvbS5jCisrKyBiL2RyaXZlcnMvc3NiL3Nwcm9tLmMKQEAgLTE0LDYgKzE0LDkgQEAKICNpbmNsdWRlICJzc2JfcHJpdmF0ZS5oIgogCiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3NiX3Nwcm9tICpmYWxsYmFja19zcHJvbTsKKworCiBzdGF0aWMgaW50IHNwcm9tMmhleChjb25zdCB1MTYgKnNwcm9tLCBjaGFyICpidWYsIHNpemVfdCBidWZfbGVuLAogCQkgICAgIHNpemVfdCBzcHJvbV9zaXplX3dvcmRzKQogewpAQCAtMTMxLDMgKzEzNCwzNiBAQAogCQlyZXR1cm4gcmVzOwogCXJldHVybiBlcnIgPyBlcnIgOiBjb3VudDsKIH0KKworLyoqCisgKiBzc2JfYXJjaF9zZXRfZmFsbGJhY2tfc3Byb20gLSBTZXQgYSBmYWxsYmFjayBTUFJPTSBmb3IgdXNlIGlmIG5vIFNQUk9NIGlzIGZvdW5kLgorICoKKyAqIEBzcHJvbTogVGhlIFNQUk9NIGRhdGEgc3RydWN0dXJlIHRvIHJlZ2lzdGVyLgorICoKKyAqIFdpdGggdGhpcyBmdW5jdGlvbiB0aGUgYXJjaGl0ZWN0dXJlIGltcGxlbWVudGF0aW9uIG1heSByZWdpc3RlciBhIGZhbGxiYWNrCisgKiBTUFJPTSBkYXRhIHN0cnVjdHVyZS4gVGhlIGZhbGxiYWNrIGlzIG9ubHkgdXNlZCBmb3IgUENJIGJhc2VkIFNTQiBkZXZpY2VzLAorICogd2hlcmUgbm8gdmFsaWQgU1BST00gY2FuIGJlIGZvdW5kIGluIHRoZSBzaGFkb3cgcmVnaXN0ZXJzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZnVsIGZvciB3ZWlyZCBhcmNoaXRlY3R1cmVzIHRoYXQgaGF2ZSBhIGhhbGYtYXNzZWQgU1NCIGRldmljZQorICogaGFyZHdpcmVkIHRvIHRoZWlyIFBDSSBidXMuCisgKgorICogTm90ZSB0aGF0IGl0IGRvZXMgb25seSB3b3JrIHdpdGggUENJIGF0dGFjaGVkIFNTQiBkZXZpY2VzLiBQQ01DSUEgZGV2aWNlcyBjdXJyZW50bHkKKyAqIGRvbid0IHVzZSB0aGlzIGZhbGxiYWNrLgorICogQXJjaGl0ZWN0dXJlcyBtdXN0IHByb3ZpZGUgdGhlIFNQUk9NIGZvciBuYXRpdmUgU1NCIGRldmljZXMgYW55d2F5LAorICogc28gdGhlIGZhbGxiYWNrIGFsc28gaXNuJ3QgdXNlZCBmb3IgbmF0aXZlIGRldmljZXMuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBhdmFpbGFibGUgZm9yIGFyY2hpdGVjdHVyZSBjb2RlLCBvbmx5LiBTbyBpdCBpcyBub3QgZXhwb3J0ZWQuCisgKi8KK2ludCBzc2JfYXJjaF9zZXRfZmFsbGJhY2tfc3Byb20oY29uc3Qgc3RydWN0IHNzYl9zcHJvbSAqc3Byb20pCit7CisJaWYgKGZhbGxiYWNrX3Nwcm9tKQorCQlyZXR1cm4gLUVFWElTVDsKKwlmYWxsYmFja19zcHJvbSA9IHNwcm9tOworCisJcmV0dXJuIDA7Cit9CisKK2NvbnN0IHN0cnVjdCBzc2Jfc3Byb20gKnNzYl9nZXRfZmFsbGJhY2tfc3Byb20odm9pZCkKK3sKKwlyZXR1cm4gZmFsbGJhY2tfc3Byb207Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NzYi9zc2JfcHJpdmF0ZS5oIGIvZHJpdmVycy9zc2Ivc3NiX3ByaXZhdGUuaAppbmRleCBlYmMzMmQ4Li41N2ZhNDgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NzYi9zc2JfcHJpdmF0ZS5oCisrKyBiL2RyaXZlcnMvc3NiL3NzYl9wcml2YXRlLmgKQEAgLTEzMSw2ICsxMzEsNyBAQAogCQkJICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCwKIAkJCSAgICAgaW50ICgqc3Byb21fY2hlY2tfY3JjKShjb25zdCB1MTYgKnNwcm9tLCBzaXplX3Qgc2l6ZSksCiAJCQkgICAgIGludCAoKnNwcm9tX3dyaXRlKShzdHJ1Y3Qgc3NiX2J1cyAqYnVzLCBjb25zdCB1MTYgKnNwcm9tKSk7CitleHRlcm4gY29uc3Qgc3RydWN0IHNzYl9zcHJvbSAqc3NiX2dldF9mYWxsYmFja19zcHJvbSh2b2lkKTsKIAogCiAvKiBjb3JlLmMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvc25kLWdvNzAwNy5jIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9zbmQtZ283MDA3LmMKaW5kZXggYTdkZTQwMS4uY2QxOWJlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9zbmQtZ283MDA3LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9zbmQtZ283MDA3LmMKQEAgLTI0OCwxMCArMjQ4LDExIEBACiAJc3Bpbl9sb2NrX2luaXQoJmdvc25kLT5sb2NrKTsKIAlnb3NuZC0+aHdfcHRyID0gZ29zbmQtPndfaWR4ID0gZ29zbmQtPmF2YWlsID0gMDsKIAlnb3NuZC0+Y2FwdHVyaW5nID0gMDsKLQlnb3NuZC0+Y2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGdvc25kLT5jYXJkID09IE5VTEwpIHsKKwlyZXQgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsCisJCQkgICAgICAmZ29zbmQtPmNhcmQpOworCWlmIChyZXQgPCAwKSB7CiAJCWtmcmVlKGdvc25kKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldHVybiByZXQ7CiAJfQogCXJldCA9IHNuZF9kZXZpY2VfbmV3KGdvc25kLT5jYXJkLCBTTkRSVl9ERVZfTE9XTEVWRUwsIGdvLAogCQkJJmdvNzAwN19zbmRfZGV2aWNlX29wcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3RjL3RjLmMgYi9kcml2ZXJzL3RjL3RjLmMKaW5kZXggZjc3ZjYyYS4uZTViZDQ0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy90Yy90Yy5jCisrKyBiL2RyaXZlcnMvdGMvdGMuYwpAQCAtODYsNyArODYsNyBAQAogCQkJICAgICAgIHNsb3QpOwogCQkJZ290byBvdXRfZXJyOwogCQl9Ci0JCXNwcmludGYodGRldi0+ZGV2LmJ1c19pZCwgInRjJXgiLCBzbG90KTsKKwkJZGV2X3NldF9uYW1lKCZ0ZGV2LT5kZXYsICJ0YyV4Iiwgc2xvdCk7CiAJCXRkZXYtPmJ1cyA9IHRidXM7CiAJCXRkZXYtPmRldi5wYXJlbnQgPSAmdGJ1cy0+ZGV2OwogCQl0ZGV2LT5kZXYuYnVzID0gJnRjX2J1c190eXBlOwpAQCAtMTA0LDcgKzEwNCw3IEBACiAJCXRkZXYtPnZlbmRvcls4XSA9IDA7CiAJCXRkZXYtPm5hbWVbOF0gPSAwOwogCi0JCXByX2luZm8oIiVzOiAlcyAlcyAlc1xuIiwgdGRldi0+ZGV2LmJ1c19pZCwgdGRldi0+dmVuZG9yLAorCQlwcl9pbmZvKCIlczogJXMgJXMgJXNcbiIsIGRldl9uYW1lKCZ0ZGV2LT5kZXYpLCB0ZGV2LT52ZW5kb3IsCiAJCQl0ZGV2LT5uYW1lLCB0ZGV2LT5maXJtd2FyZSk7CiAKIAkJZGV2c2l6ZSA9IHJlYWRiKG1vZHVsZSArIG9mZnNldCArIFRDX1NMT1RfU0laRSk7CkBAIC0xMTgsNyArMTE4LDcgQEAKIAkJfSBlbHNlIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCBwcm92aWRlIHNsb3Qgc3BhY2UgIgogCQkJICAgICAgICIoJWRNaUIgcmVxdWlyZWQsIHVwIHRvICVkTWlCIHN1cHBvcnRlZClcbiIsCi0JCQkgICAgICAgdGRldi0+ZGV2LmJ1c19pZCwgZGV2c2l6ZSA+PiAyMCwKKwkJCSAgICAgICBkZXZfbmFtZSgmdGRldi0+ZGV2KSwgZGV2c2l6ZSA+PiAyMCwKIAkJCSAgICAgICBtYXgoc2xvdHNpemUsIGV4dHNsb3RzaXplKSA+PiAyMCk7CiAJCQlrZnJlZSh0ZGV2KTsKIAkJCWdvdG8gb3V0X2VycjsKQEAgLTE0Niw3ICsxNDYsNyBAQAogCQlyZXR1cm4gMDsKIAogCUlOSVRfTElTVF9IRUFEKCZ0Y19idXMuZGV2aWNlcyk7Ci0Jc3RyY3B5KHRjX2J1cy5kZXYuYnVzX2lkLCAidGMiKTsKKwlkZXZfc2V0X25hbWUoJnRjX2J1cy5kZXYsICJ0YyIpOwogCWRldmljZV9yZWdpc3RlcigmdGNfYnVzLmRldik7CiAKIAlpZiAodGNfYnVzLmluZm8uc2xvdF9zaXplKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Vpby9LY29uZmlnIGIvZHJpdmVycy91aW8vS2NvbmZpZwppbmRleCAwNGI5NTRjLi43Zjg2NTM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Vpby9LY29uZmlnCisrKyBiL2RyaXZlcnMvdWlvL0tjb25maWcKQEAgLTU4LDYgKzU4LDI0IEBACiAKIAkgIElmIHlvdSBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGl0IHdpbGwgYmUgY2FsbGVkIHVpb19zbXguCiAKK2NvbmZpZyBVSU9fQUVDCisJdHJpc3RhdGUgIkFFQyB2aWRlbyB0aW1lc3RhbXAgZGV2aWNlIgorCWRlcGVuZHMgb24gUENJCisJZGVmYXVsdCBuCisJaGVscAorCisJICBVSU8gZHJpdmVyIGZvciB0aGUgQWRyaWVubmUgRWxlY3Ryb25pY3MgQ29ycG9yYXRpb24gUENJIHRpbWUKKwkgIGNvZGUgZGV2aWNlLgorCisJICBUaGlzIGRldmljZSBkaWZmZXJzIGZyb20gb3RoZXIgVUlPIGRldmljZXMgc2luY2UgaXQgdXNlcyBJL08KKwkgIHBvcnRzIGluc3RlYWQgb2YgbWVtb3J5IG1hcHBlZCBJL08uIEluIG9yZGVyIHRvIG1ha2UgaXQKKwkgIHBvc3NpYmxlIGZvciBVSU8gdG8gd29yayB3aXRoIHRoaXMgZGV2aWNlIGEgdXRpbGl0eSwgdWlvcG9ydCwKKwkgIGNhbiBiZSB1c2VkIHRvIHJlYWQgYW5kIHdyaXRlIHRoZSBwb3J0czoKKworCSAgICBnaXQgY2xvbmUgZ2l0Oi8vaWZ1cC5vcmcvcGhpbGlwcy91aW9wb3J0LmdpdAorCisJICBJZiB5b3UgY29tcGlsZSB0aGlzIGFzIGEgbW9kdWxlLCBpdCB3aWxsIGJlIGNhbGxlZCB1aW9fYWVjLgorCiBjb25maWcgVUlPX1NFUkNPUzMKIAl0cmlzdGF0ZSAiQXV0b21hdGEgU2VyY29zIElJSSBQQ0kgY2FyZCBkcml2ZXIiCiAJZGVmYXVsdCBuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Vpby9NYWtlZmlsZSBiL2RyaXZlcnMvdWlvL01ha2VmaWxlCmluZGV4IGU2OTU1ODEuLjVjMjU4NmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdWlvL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdWlvL01ha2VmaWxlCkBAIC0zLDQgKzMsNSBAQAogb2JqLSQoQ09ORklHX1VJT19QRFJWKQkrPSB1aW9fcGRydi5vCiBvYmotJChDT05GSUdfVUlPX1BEUlZfR0VOSVJRKQkrPSB1aW9fcGRydl9nZW5pcnEubwogb2JqLSQoQ09ORklHX1VJT19TTVgpCSs9IHVpb19zbXgubworb2JqLSQoQ09ORklHX1VJT19BRUMpCSs9IHVpb19hZWMubwogb2JqLSQoQ09ORklHX1VJT19TRVJDT1MzKQkrPSB1aW9fc2VyY29zMy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Vpby91aW8uYyBiL2RyaXZlcnMvdWlvL3Vpby5jCmluZGV4IDRjYTg1YTEuLjAzZWZiMDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdWlvL3Vpby5jCisrKyBiL2RyaXZlcnMvdWlvL3Vpby5jCkBAIC02MSw2ICs2MSwxNCBAQAogfTsKICNkZWZpbmUgdG9fbWFwKG1hcCkgY29udGFpbmVyX29mKG1hcCwgc3RydWN0IHVpb19tYXAsIGtvYmopCiAKK3N0YXRpYyBzc2l6ZV90IG1hcF9uYW1lX3Nob3coc3RydWN0IHVpb19tZW0gKm1lbSwgY2hhciAqYnVmKQoreworCWlmICh1bmxpa2VseSghbWVtLT5uYW1lKSkKKwkJbWVtLT5uYW1lID0gIiI7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgbWVtLT5uYW1lKTsKK30KKwogc3RhdGljIHNzaXplX3QgbWFwX2FkZHJfc2hvdyhzdHJ1Y3QgdWlvX21lbSAqbWVtLCBjaGFyICpidWYpCiB7CiAJcmV0dXJuIHNwcmludGYoYnVmLCAiMHglbHhcbiIsIG1lbS0+YWRkcik7CkBAIC04Miw2ICs5MCw4IEBACiAJc3NpemVfdCAoKnN0b3JlKShzdHJ1Y3QgdWlvX21lbSAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CiB9OwogCitzdGF0aWMgc3RydWN0IG1hcF9zeXNmc19lbnRyeSBuYW1lX2F0dHJpYnV0ZSA9CisJX19BVFRSKG5hbWUsIFNfSVJVR08sIG1hcF9uYW1lX3Nob3csIE5VTEwpOwogc3RhdGljIHN0cnVjdCBtYXBfc3lzZnNfZW50cnkgYWRkcl9hdHRyaWJ1dGUgPQogCV9fQVRUUihhZGRyLCBTX0lSVUdPLCBtYXBfYWRkcl9zaG93LCBOVUxMKTsKIHN0YXRpYyBzdHJ1Y3QgbWFwX3N5c2ZzX2VudHJ5IHNpemVfYXR0cmlidXRlID0KQEAgLTkwLDYgKzEwMCw3IEBACiAJX19BVFRSKG9mZnNldCwgU19JUlVHTywgbWFwX29mZnNldF9zaG93LCBOVUxMKTsKIAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHJzW10gPSB7CisJJm5hbWVfYXR0cmlidXRlLmF0dHIsCiAJJmFkZHJfYXR0cmlidXRlLmF0dHIsCiAJJnNpemVfYXR0cmlidXRlLmF0dHIsCiAJJm9mZnNldF9hdHRyaWJ1dGUuYXR0ciwKQEAgLTEzMyw2ICsxNDQsMTQgQEAKIH07CiAjZGVmaW5lIHRvX3BvcnRpbyhwb3J0aW8pIGNvbnRhaW5lcl9vZihwb3J0aW8sIHN0cnVjdCB1aW9fcG9ydGlvLCBrb2JqKQogCitzdGF0aWMgc3NpemVfdCBwb3J0aW9fbmFtZV9zaG93KHN0cnVjdCB1aW9fcG9ydCAqcG9ydCwgY2hhciAqYnVmKQoreworCWlmICh1bmxpa2VseSghcG9ydC0+bmFtZSkpCisJCXBvcnQtPm5hbWUgPSAiIjsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBwb3J0LT5uYW1lKTsKK30KKwogc3RhdGljIHNzaXplX3QgcG9ydGlvX3N0YXJ0X3Nob3coc3RydWN0IHVpb19wb3J0ICpwb3J0LCBjaGFyICpidWYpCiB7CiAJcmV0dXJuIHNwcmludGYoYnVmLCAiMHglbHhcbiIsIHBvcnQtPnN0YXJ0KTsKQEAgLTE1OSw2ICsxNzgsOCBAQAogCXNzaXplX3QgKCpzdG9yZSkoc3RydWN0IHVpb19wb3J0ICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgcG9ydGlvX3N5c2ZzX2VudHJ5IHBvcnRpb19uYW1lX2F0dHJpYnV0ZSA9CisJX19BVFRSKG5hbWUsIFNfSVJVR08sIHBvcnRpb19uYW1lX3Nob3csIE5VTEwpOwogc3RhdGljIHN0cnVjdCBwb3J0aW9fc3lzZnNfZW50cnkgcG9ydGlvX3N0YXJ0X2F0dHJpYnV0ZSA9CiAJX19BVFRSKHN0YXJ0LCBTX0lSVUdPLCBwb3J0aW9fc3RhcnRfc2hvdywgTlVMTCk7CiBzdGF0aWMgc3RydWN0IHBvcnRpb19zeXNmc19lbnRyeSBwb3J0aW9fc2l6ZV9hdHRyaWJ1dGUgPQpAQCAtMTY3LDYgKzE4OCw3IEBACiAJX19BVFRSKHBvcnR0eXBlLCBTX0lSVUdPLCBwb3J0aW9fcG9ydHR5cGVfc2hvdywgTlVMTCk7CiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpwb3J0aW9fYXR0cnNbXSA9IHsKKwkmcG9ydGlvX25hbWVfYXR0cmlidXRlLmF0dHIsCiAJJnBvcnRpb19zdGFydF9hdHRyaWJ1dGUuYXR0ciwKIAkmcG9ydGlvX3NpemVfYXR0cmlidXRlLmF0dHIsCiAJJnBvcnRpb19wb3J0dHlwZV9hdHRyaWJ1dGUuYXR0ciwKQEAgLTY4Niw3ICs3MDgsOCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXJlcXVlc3RlZF9wYWdlcyA9ICh2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQpID4+IFBBR0VfU0hJRlQ7Ci0JYWN0dWFsX3BhZ2VzID0gKGlkZXYtPmluZm8tPm1lbVttaV0uc2l6ZSArIFBBR0VfU0laRSAtMSkgPj4gUEFHRV9TSElGVDsKKwlhY3R1YWxfcGFnZXMgPSAoKGlkZXYtPmluZm8tPm1lbVttaV0uYWRkciAmIH5QQUdFX01BU0spCisJCQkrIGlkZXYtPmluZm8tPm1lbVttaV0uc2l6ZSArIFBBR0VfU0laRSAtMSkgPj4gUEFHRV9TSElGVDsKIAlpZiAocmVxdWVzdGVkX3BhZ2VzID4gYWN0dWFsX3BhZ2VzKQogCQlyZXR1cm4gLUVJTlZBTDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91aW8vdWlvX2FlYy5jIGIvZHJpdmVycy91aW8vdWlvX2FlYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3ODMwZTkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Vpby91aW9fYWVjLmMKQEAgLTAsMCArMSwxNzUgQEAKKy8qCisgKiB1aW9fYWVjLmMgLS0gc2ltcGxlIGRyaXZlciBmb3IgQWRyaWVubmUgRWxlY3Ryb25pY3MgQ29ycCB0aW1lIGNvZGUgUENJIGRldmljZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBCcmFuZG9uIFBoaWxpcHMgPGJyYW5kb25AaWZ1cC5vcmc+CisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQKKyAqICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OQorICogICBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9jZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC91aW9fZHJpdmVyLmg+CisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9BRUMgMHhhZWNiCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQUVDX1ZJVENMVEMgMHg2MjUwCisKKyNkZWZpbmUgSU5UX0VOQUJMRV9BRERSCQkweEZDCisjZGVmaW5lIElOVF9FTkFCTEUJCTB4MTAKKyNkZWZpbmUgSU5UX0RJU0FCTEUJCTB4MAorCisjZGVmaW5lIElOVF9NQVNLX0FERFIJCTB4MkUKKyNkZWZpbmUgSU5UX01BU0tfQUxMCQkweDNGCisKKyNkZWZpbmUgSU5UQV9EUlZSX0FERFIJCTB4RkUKKyNkZWZpbmUgSU5UQV9FTkFCTEVEX0ZMQUcJMHgwOAorI2RlZmluZSBJTlRBX0ZMQUcJCTB4MDEKKworI2RlZmluZSBNQUlMQk9YCQkJMHgwRgorCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgaWRzW10gPSB7CisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQUVDLCBQQ0lfREVWSUNFX0lEX0FFQ19WSVRDTFRDKSwgfSwKKwl7IDAsIH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgaWRzKTsKKworc3RhdGljIGlycXJldHVybl90IGFlY3RjX2lycShpbnQgaXJxLCBzdHJ1Y3QgdWlvX2luZm8gKmRldl9pbmZvKQoreworCXZvaWQgX19pb21lbSAqaW50X2ZsYWcgPSBkZXZfaW5mby0+cHJpdiArIElOVEFfRFJWUl9BRERSOworCXVuc2lnbmVkIGNoYXIgc3RhdHVzID0gaW9yZWFkOChpbnRfZmxhZyk7CisKKworCWlmICgoc3RhdHVzICYgSU5UQV9FTkFCTEVEX0ZMQUcpICYmIChzdGF0dXMgJiBJTlRBX0ZMQUcpKSB7CisJCS8qIGFwcGxpY2F0aW9uIHdyaXRlcyAweDAwIHRvIDB4MkYgdG8gZ2V0IG5leHQgaW50ZXJydXB0ICovCisJCXN0YXR1cyA9IGlvcmVhZDgoZGV2X2luZm8tPnByaXYgKyBNQUlMQk9YKTsKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCX0KKworCXJldHVybiBJUlFfTk9ORTsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfYm9hcmRfZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IHVpb19pbmZvICppKQoreworCWRldl9pbmZvKCZwZGV2LT5kZXYsICJQQ0ktVEMgYm9hcmQgdmVuZG9yOiAleCV4IG51bWJlcjogJXgleCIKKwkJIiByZXZpc2lvbjogJWMlY1xuIiwKKwkJaW9yZWFkOChpLT5wcml2ICsgMHgwMSksCisJCWlvcmVhZDgoaS0+cHJpdiArIDB4MDApLAorCQlpb3JlYWQ4KGktPnByaXYgKyAweDAzKSwKKwkJaW9yZWFkOChpLT5wcml2ICsgMHgwMiksCisJCWlvcmVhZDgoaS0+cHJpdiArIDB4MDYpLAorCQlpb3JlYWQ4KGktPnByaXYgKyAweDA3KSk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHByb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVpb19pbmZvICppbmZvOworCWludCByZXQ7CisKKwlpbmZvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHVpb19pbmZvKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpbmZvKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChwY2lfZW5hYmxlX2RldmljZShwZGV2KSkKKwkJZ290byBvdXRfZnJlZTsKKworCWlmIChwY2lfcmVxdWVzdF9yZWdpb25zKHBkZXYsICJhZWN0YyIpKQorCQlnb3RvIG91dF9kaXNhYmxlOworCisJaW5mby0+bmFtZSA9ICJhZWN0YyI7CisJaW5mby0+cG9ydFswXS5zdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKTsKKwlpZiAoIWluZm8tPnBvcnRbMF0uc3RhcnQpCisJCWdvdG8gb3V0X3JlbGVhc2U7CisJaW5mby0+cHJpdiA9IHBjaV9pb21hcChwZGV2LCAwLCAwKTsKKwlpZiAoIWluZm8tPnByaXYpCisJCWdvdG8gb3V0X3JlbGVhc2U7CisJaW5mby0+cG9ydFswXS5zaXplID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKTsKKwlpbmZvLT5wb3J0WzBdLnBvcnR0eXBlID0gVUlPX1BPUlRfR1BJTzsKKworCWluZm8tPnZlcnNpb24gPSAiMC4wLjEiOworCWluZm8tPmlycSA9IHBkZXYtPmlycTsKKwlpbmZvLT5pcnFfZmxhZ3MgPSBJUlFGX1NIQVJFRDsKKwlpbmZvLT5oYW5kbGVyID0gYWVjdGNfaXJxOworCisJcHJpbnRfYm9hcmRfZGF0YShwZGV2LCBpbmZvKTsKKwlyZXQgPSB1aW9fcmVnaXN0ZXJfZGV2aWNlKCZwZGV2LT5kZXYsIGluZm8pOworCWlmIChyZXQpCisJCWdvdG8gb3V0X3VubWFwOworCisJaW93cml0ZTMyKElOVF9FTkFCTEUsIGluZm8tPnByaXYgKyBJTlRfRU5BQkxFX0FERFIpOworCWlvd3JpdGU4KElOVF9NQVNLX0FMTCwgaW5mby0+cHJpdiArIElOVF9NQVNLX0FERFIpOworCWlmICghKGlvcmVhZDgoaW5mby0+cHJpdiArIElOVEFfRFJWUl9BRERSKQorCQkJJiBJTlRBX0VOQUJMRURfRkxBRykpCisJCWRldl9lcnIoJnBkZXYtPmRldiwgImFlY3RjOiBpbnRlcnJ1cHRzIG5vdCBlbmFibGVkXG4iKTsKKworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBpbmZvKTsKKworCXJldHVybiAwOworCitvdXRfdW5tYXA6CisJcGNpX2lvdW5tYXAocGRldiwgaW5mby0+cHJpdik7CitvdXRfcmVsZWFzZToKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworb3V0X2Rpc2FibGU6CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworb3V0X2ZyZWU6CisJa2ZyZWUoaW5mbyk7CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKK3N0YXRpYyB2b2lkIHJlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgdWlvX2luZm8gKmluZm8gPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisKKwkvKiBkaXNhYmxlIGludGVycnVwdHMgKi8KKwlpb3dyaXRlOChJTlRfRElTQUJMRSwgaW5mby0+cHJpdiArIElOVF9NQVNLX0FERFIpOworCWlvd3JpdGUzMihJTlRfRElTQUJMRSwgaW5mby0+cHJpdiArIElOVF9FTkFCTEVfQUREUik7CisJLyogcmVhZCBtYWlsYm94IHRvIGVuc3VyZSBib2FyZCBkcm9wcyBpcnEgKi8KKwlpb3JlYWQ4KGluZm8tPnByaXYgKyBNQUlMQk9YKTsKKworCXVpb191bnJlZ2lzdGVyX2RldmljZShpbmZvKTsKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJaW91bm1hcChpbmZvLT5wcml2KTsKKworCWtmcmVlKGluZm8pOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgcGNpX2RyaXZlciA9IHsKKwkubmFtZSA9ICJhZWN0YyIsCisJLmlkX3RhYmxlID0gaWRzLAorCS5wcm9iZSA9IHByb2JlLAorCS5yZW1vdmUgPSByZW1vdmUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBhZWN0Y19pbml0KHZvaWQpCit7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnBjaV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgYWVjdGNfZXhpdCh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmcGNpX2RyaXZlcik7Cit9CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworbW9kdWxlX2luaXQoYWVjdGNfaW5pdCk7Cittb2R1bGVfZXhpdChhZWN0Y19leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL0tjb25maWcgYi9kcml2ZXJzL3VzYi9LY29uZmlnCmluZGV4IDgzYmFiYjAuLmM2YzgxNmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvS2NvbmZpZwpAQCAtNDcsNiArNDcsNyBAQAogCWRlZmF1bHQgeSBpZiBDUFVfU1VCVFlQRV9TSDc3MjAKIAlkZWZhdWx0IHkgaWYgQ1BVX1NVQlRZUEVfU0g3NzIxCiAJZGVmYXVsdCB5IGlmIENQVV9TVUJUWVBFX1NINzc2MworCWRlZmF1bHQgeSBpZiBDUFVfU1VCVFlQRV9TSDc3ODYKIAkjIG1vcmU6CiAJZGVmYXVsdCBQQ0kKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9NYWtlZmlsZQppbmRleCBiMmNlYjRhLi44OTI5OWE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3VzYi9NYWtlZmlsZQpAQCAtMTksNiArMTksNyBAQAogb2JqLSQoQ09ORklHX1VTQl9VMTMyX0hDRCkJKz0gaG9zdC8KIG9iai0kKENPTkZJR19VU0JfUjhBNjY1OTdfSENEKQkrPSBob3N0Lwogb2JqLSQoQ09ORklHX1VTQl9IV0FfSENEKQkrPSBob3N0Lworb2JqLSQoQ09ORklHX1VTQl9JU1AxNzYwX0hDRCkJKz0gaG9zdC8KIAogb2JqLSQoQ09ORklHX1VTQl9DNjdYMDBfSENEKQkrPSBjNjd4MDAvCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NsYXNzL3VzYmxwLmMgYi9kcml2ZXJzL3VzYi9jbGFzcy91c2JscC5jCmluZGV4IDNmM2VlMTMuLmQyNzQ3YTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NsYXNzL3VzYmxwLmMKKysrIGIvZHJpdmVycy91c2IvY2xhc3MvdXNibHAuYwpAQCAtODgwLDE2ICs4ODAsMTkgQEAKIAkJaWYgKHJjIDw9IDApCiAJCQlicmVhazsKIAotCQlpZiAodXNibHAtPmZsYWdzICYgTFBfQUJPUlQpIHsKLQkJCWlmIChzY2hlZHVsZV90aW1lb3V0KG1zZWNzX3RvX2ppZmZpZXMoNTAwMCkpID09IDApIHsKKwkJaWYgKHNjaGVkdWxlX3RpbWVvdXQobXNlY3NfdG9famlmZmllcygxNTAwKSkgPT0gMCkgeworCQkJaWYgKHVzYmxwLT5mbGFncyAmIExQX0FCT1JUKSB7CiAJCQkJZXJyID0gdXNibHBfY2hlY2tfc3RhdHVzKHVzYmxwLCBlcnIpOwogCQkJCWlmIChlcnIgPT0gMSkgewkvKiBQYXBlciBvdXQgKi8KIAkJCQkJcmMgPSAtRU5PU1BDOwogCQkJCQlicmVhazsKIAkJCQl9CisJCQl9IGVsc2UgeworCQkJCS8qIFByb2QgdGhlIHByaW50ZXIsIEdlbnRvbyMyNTEyMzcuICovCisJCQkJbXV0ZXhfbG9jaygmdXNibHAtPm11dCk7CisJCQkJdXNibHBfcmVhZF9zdGF0dXModXNibHAsIHVzYmxwLT5zdGF0dXNidWYpOworCQkJCW11dGV4X3VubG9jaygmdXNibHAtPm11dCk7CiAJCQl9Ci0JCX0gZWxzZSB7Ci0JCQlzY2hlZHVsZSgpOwogCQl9CiAJfQogCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYyBiL2RyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jCmluZGV4IDZlYzM4MTcuLjczYzEwOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jCkBAIC0xODcsNyArMTg3LDcgQEAKIAl9CiAKIAkvKiB0aGlzIGlzbid0IGNoZWNraW5nIGZvciBpbGxlZ2FsIHZhbHVlcyAqLwotCXN3aXRjaCAoZGVzYy0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spIHsKKwlzd2l0Y2ggKHVzYl9lbmRwb2ludF90eXBlKGRlc2MpKSB7CiAJY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9DT05UUk9MOgogCQl0eXBlID0gIkN0cmwiOwogCQlpZiAoc3BlZWQgPT0gVVNCX1NQRUVEX0hJR0gpIAkvKiB1ZnJhbWVzIHBlciBOQUsgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvZGV2aW8uYyBiL2RyaXZlcnMvdXNiL2NvcmUvZGV2aW8uYwppbmRleCA2NTg1ZjUyLi5kZjNjNTM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2RldmlvLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9kZXZpby5jCkBAIC0xMDQsNyArMTA0LDcgQEAKIAogI2RlZmluZQlNQVhfVVNCRlNfQlVGRkVSX1NJWkUJMTYzODQKIAotc3RhdGljIGlubGluZSBpbnQgY29ubmVjdGVkKHN0cnVjdCBkZXZfc3RhdGUgKnBzKQorc3RhdGljIGludCBjb25uZWN0ZWQoc3RydWN0IGRldl9zdGF0ZSAqcHMpCiB7CiAJcmV0dXJuICghbGlzdF9lbXB0eSgmcHMtPmxpc3QpICYmCiAJCQlwcy0+ZGV2LT5zdGF0ZSAhPSBVU0JfU1RBVEVfTk9UQVRUQUNIRUQpOwpAQCAtMjQ4LDcgKzI0OCw3IEBACiAJa2ZyZWUoYXMpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXN5bmNfbmV3cGVuZGluZyhzdHJ1Y3QgYXN5bmMgKmFzKQorc3RhdGljIHZvaWQgYXN5bmNfbmV3cGVuZGluZyhzdHJ1Y3QgYXN5bmMgKmFzKQogewogCXN0cnVjdCBkZXZfc3RhdGUgKnBzID0gYXMtPnBzOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0yNTgsNyArMjU4LDcgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcy0+bG9jaywgZmxhZ3MpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXN5bmNfcmVtb3ZlcGVuZGluZyhzdHJ1Y3QgYXN5bmMgKmFzKQorc3RhdGljIHZvaWQgYXN5bmNfcmVtb3ZlcGVuZGluZyhzdHJ1Y3QgYXN5bmMgKmFzKQogewogCXN0cnVjdCBkZXZfc3RhdGUgKnBzID0gYXMtPnBzOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0yNjgsNyArMjY4LDcgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcy0+bG9jaywgZmxhZ3MpOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBhc3luYyAqYXN5bmNfZ2V0Y29tcGxldGVkKHN0cnVjdCBkZXZfc3RhdGUgKnBzKQorc3RhdGljIHN0cnVjdCBhc3luYyAqYXN5bmNfZ2V0Y29tcGxldGVkKHN0cnVjdCBkZXZfc3RhdGUgKnBzKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGFzeW5jICphcyA9IE5VTEw7CkBAIC0yODMsNyArMjgzLDcgQEAKIAlyZXR1cm4gYXM7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGFzeW5jICphc3luY19nZXRwZW5kaW5nKHN0cnVjdCBkZXZfc3RhdGUgKnBzLAorc3RhdGljIHN0cnVjdCBhc3luYyAqYXN5bmNfZ2V0cGVuZGluZyhzdHJ1Y3QgZGV2X3N0YXRlICpwcywKIAkJCQkJICAgICB2b2lkIF9fdXNlciAqdXNlcnVyYikKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMzAyLDcgKzMwMiw3IEBACiAKIHN0YXRpYyB2b2lkIHNub29wX3VyYihzdHJ1Y3QgdXJiICp1cmIsIHZvaWQgX191c2VyICp1c2VydXJiKQogewotCWludCBqOworCXVuc2lnbmVkIGo7CiAJdW5zaWduZWQgY2hhciAqZGF0YSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOwogCiAJaWYgKCF1c2Jmc19zbm9vcCkKQEAgLTMxMSw5ICszMTEsOSBAQAogCWRldl9pbmZvKCZ1cmItPmRldi0+ZGV2LCAiZGlyZWN0aW9uPSVzXG4iLAogCQkJdXNiX3VyYl9kaXJfaW4odXJiKSA/ICJJTiIgOiAiT1VUIik7CiAJZGV2X2luZm8oJnVyYi0+ZGV2LT5kZXYsICJ1c2VydXJiPSVwXG4iLCB1c2VydXJiKTsKLQlkZXZfaW5mbygmdXJiLT5kZXYtPmRldiwgInRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg9JWRcbiIsCisJZGV2X2luZm8oJnVyYi0+ZGV2LT5kZXYsICJ0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoPSV1XG4iLAogCQkgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKTsKLQlkZXZfaW5mbygmdXJiLT5kZXYtPmRldiwgImFjdHVhbF9sZW5ndGg9JWRcbiIsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJZGV2X2luZm8oJnVyYi0+ZGV2LT5kZXYsICJhY3R1YWxfbGVuZ3RoPSV1XG4iLCB1cmItPmFjdHVhbF9sZW5ndGgpOwogCWRldl9pbmZvKCZ1cmItPmRldi0+ZGV2LCAiZGF0YTogIik7CiAJZm9yIChqID0gMDsgaiA8IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aDsgKytqKQogCQlwcmludGsoIiUwMnggIiwgZGF0YVtqXSk7CkBAIC0zNzYsNyArMzc2LDcgQEAKIAlkZXN0cm95X2FzeW5jKHBzLCAmaGl0bGlzdCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBkZXN0cm95X2FsbF9hc3luYyhzdHJ1Y3QgZGV2X3N0YXRlICpwcykKK3N0YXRpYyB2b2lkIGRlc3Ryb3lfYWxsX2FzeW5jKHN0cnVjdCBkZXZfc3RhdGUgKnBzKQogewogCWRlc3Ryb3lfYXN5bmMocHMsICZwcy0+YXN5bmNfcGVuZGluZyk7CiB9CkBAIC01MjUsNyArNTI1LDggQEAKIHsKIAlpbnQgcmV0ID0gMDsKIAotCWlmIChwcy0+ZGV2LT5zdGF0ZSAhPSBVU0JfU1RBVEVfQUREUkVTUworCWlmIChwcy0+ZGV2LT5zdGF0ZSAhPSBVU0JfU1RBVEVfVU5BVVRIRU5USUNBVEVECisJICYmIHBzLT5kZXYtPnN0YXRlICE9IFVTQl9TVEFURV9BRERSRVNTCiAJICYmIHBzLT5kZXYtPnN0YXRlICE9IFVTQl9TVEFURV9DT05GSUdVUkVEKQogCQlyZXR1cm4gLUVIT1NUVU5SRUFDSDsKIAlpZiAoVVNCX1RZUEVfVkVORE9SID09IChVU0JfVFlQRV9NQVNLICYgcmVxdWVzdHR5cGUpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9lbmRwb2ludC5jIGIvZHJpdmVycy91c2IvY29yZS9lbmRwb2ludC5jCmluZGV4IGUxNzEwZjIuLjQwZGVlMmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvZW5kcG9pbnQuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2VuZHBvaW50LmMKQEAgLTY2LDcgKzY2LDcgQEAKIAlzdHJ1Y3QgZXBfZGV2aWNlICplcCA9IHRvX2VwX2RldmljZShkZXYpOwogCWNoYXIgKnR5cGUgPSAidW5rbm93biI7CiAKLQlzd2l0Y2ggKGVwLT5kZXNjLT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykgeworCXN3aXRjaCAodXNiX2VuZHBvaW50X3R5cGUoZXAtPmRlc2MpKSB7CiAJY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9DT05UUk9MOgogCQl0eXBlID0gIkNvbnRyb2wiOwogCQlicmVhazsKQEAgLTk0LDcgKzk0LDcgQEAKIAogCWluID0gKGVwLT5kZXNjLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0RJUl9JTik7CiAKLQlzd2l0Y2ggKGVwLT5kZXNjLT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykgeworCXN3aXRjaCAodXNiX2VuZHBvaW50X3R5cGUoZXAtPmRlc2MpKSB7CiAJY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9DT05UUk9MOgogCQlpZiAoZXAtPnVkZXYtPnNwZWVkID09IFVTQl9TUEVFRF9ISUdIKSAJLyogdWZyYW1lcyBwZXIgTkFLICovCiAJCQlpbnRlcnZhbCA9IGVwLT5kZXNjLT5iSW50ZXJ2YWw7CkBAIC0xMzEsMTAgKzEzMSw5IEBACiAJc3RydWN0IGVwX2RldmljZSAqZXAgPSB0b19lcF9kZXZpY2UoZGV2KTsKIAljaGFyICpkaXJlY3Rpb247CiAKLQlpZiAoKGVwLT5kZXNjLT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykgPT0KLQkJCVVTQl9FTkRQT0lOVF9YRkVSX0NPTlRST0wpCisJaWYgKHVzYl9lbmRwb2ludF94ZmVyX2NvbnRyb2woZXAtPmRlc2MpKQogCQlkaXJlY3Rpb24gPSAiYm90aCI7Ci0JZWxzZSBpZiAoZXAtPmRlc2MtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOKQorCWVsc2UgaWYgKHVzYl9lbmRwb2ludF9kaXJfaW4oZXAtPmRlc2MpKQogCQlkaXJlY3Rpb24gPSAiaW4iOwogCWVsc2UKIAkJZGlyZWN0aW9uID0gIm91dCI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2hjZC5jIGIvZHJpdmVycy91c2IvY29yZS9oY2QuYwppbmRleCAzYzcxMWRiNS4uODFmYTg1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9oY2QuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2hjZC5jCkBAIC0yNzksOSArMjc5LDkgQEAKICAqIGhlbHBlciByb3V0aW5lIGZvciByZXR1cm5pbmcgc3RyaW5nIGRlc2NyaXB0b3JzIGluIFVURi0xNkxFCiAgKiBpbnB1dCBjYW4gYWN0dWFsbHkgYmUgSVNPLTg4NTktMTsgQVNDSUkgaXMgaXRzIDctYml0IHN1YnNldAogICovCi1zdGF0aWMgaW50IGFzY2lpMnV0ZiAoY2hhciAqcywgdTggKnV0ZiwgaW50IHV0Zm1heCkKK3N0YXRpYyB1bnNpZ25lZCBhc2NpaTJ1dGYoY2hhciAqcywgdTggKnV0ZiwgaW50IHV0Zm1heCkKIHsKLQlpbnQgcmV0dmFsOworCXVuc2lnbmVkIHJldHZhbDsKIAogCWZvciAocmV0dmFsID0gMDsgKnMgJiYgdXRmbWF4ID4gMTsgdXRmbWF4IC09IDIsIHJldHZhbCArPSAyKSB7CiAJCSp1dGYrKyA9ICpzKys7CkBAIC0zMDQsMTkgKzMwNCwxNSBAQAogICogUHJvZHVjZXMgZWl0aGVyIGEgbWFudWZhY3R1cmVyLCBwcm9kdWN0IG9yIHNlcmlhbCBudW1iZXIgc3RyaW5nIGZvciB0aGUKICAqIHZpcnR1YWwgcm9vdCBodWIgZGV2aWNlLgogICovCi1zdGF0aWMgaW50IHJoX3N0cmluZyAoCi0JaW50CQlpZCwKLQlzdHJ1Y3QgdXNiX2hjZAkqaGNkLAotCXU4CQkqZGF0YSwKLQlpbnQJCWxlbgotKSB7CitzdGF0aWMgdW5zaWduZWQgcmhfc3RyaW5nKGludCBpZCwgc3RydWN0IHVzYl9oY2QgKmhjZCwgdTggKmRhdGEsIHVuc2lnbmVkIGxlbikKK3sKIAljaGFyIGJ1ZiBbMTAwXTsKIAogCS8vIGxhbmd1YWdlIGlkcwogCWlmIChpZCA9PSAwKSB7CiAJCWJ1ZlswXSA9IDQ7ICAgIGJ1ZlsxXSA9IDM7CS8qIDQgYnl0ZXMgc3RyaW5nIGRhdGEgKi8KIAkJYnVmWzJdID0gMHgwOTsgYnVmWzNdID0gMHgwNDsJLyogTVNGVC1zcGVhayBmb3IgImVuLXVzIiAqLwotCQlsZW4gPSBtaW4gKGxlbiwgNCk7CisJCWxlbiA9IG1pbl90KHVuc2lnbmVkLCBsZW4sIDQpOwogCQltZW1jcHkgKGRhdGEsIGJ1ZiwgbGVuKTsKIAkJcmV0dXJuIGxlbjsKIApAQCAtMzMyLDEwICszMjgsNyBAQAogCX0gZWxzZSBpZiAoaWQgPT0gMykgewogCQlzbnByaW50ZiAoYnVmLCBzaXplb2YgYnVmLCAiJXMgJXMgJXMiLCBpbml0X3V0c25hbWUoKS0+c3lzbmFtZSwKIAkJCWluaXRfdXRzbmFtZSgpLT5yZWxlYXNlLCBoY2QtPmRyaXZlci0+ZGVzY3JpcHRpb24pOwotCi0JLy8gdW5zdXBwb3J0ZWQgSURzIC0tPiAicHJvdG9jb2wgc3RhbGwiCi0JfSBlbHNlCi0JCXJldHVybiAtRVBJUEU7CisJfQogCiAJc3dpdGNoIChsZW4pIHsJCS8qIEFsbCBjYXNlcyBmYWxsIHRocm91Z2ggKi8KIAlkZWZhdWx0OgpAQCAtMzYwLDkgKzM1Myw4IEBACiAJdTgJCXRidWYgW3NpemVvZiAoc3RydWN0IHVzYl9odWJfZGVzY3JpcHRvcildCiAJCV9fYXR0cmlidXRlX18oKGFsaWduZWQoNCkpKTsKIAljb25zdCB1OAkqYnVmcCA9IHRidWY7Ci0JaW50CQlsZW4gPSAwOworCXVuc2lnbmVkCWxlbiA9IDA7CiAJaW50CQlzdGF0dXM7Ci0JaW50CQluOwogCXU4CQlwYXRjaF93YWtldXAgPSAwOwogCXU4CQlwYXRjaF9wcm90b2NvbCA9IDA7CiAKQEAgLTQ1NiwxMCArNDQ4LDExIEBACiAJCQkJcGF0Y2hfd2FrZXVwID0gMTsKIAkJCWJyZWFrOwogCQljYXNlIFVTQl9EVF9TVFJJTkcgPDwgODoKLQkJCW4gPSByaF9zdHJpbmcgKHdWYWx1ZSAmIDB4ZmYsIGhjZCwgdWJ1Ziwgd0xlbmd0aCk7Ci0JCQlpZiAobiA8IDApCisJCQlpZiAoKHdWYWx1ZSAmIDB4ZmYpIDwgNCkKKwkJCQl1cmItPmFjdHVhbF9sZW5ndGggPSByaF9zdHJpbmcod1ZhbHVlICYgMHhmZiwKKwkJCQkJCWhjZCwgdWJ1Ziwgd0xlbmd0aCk7CisJCQllbHNlIC8qIHVuc3VwcG9ydGVkIElEcyAtLT4gInByb3RvY29sIHN0YWxsIiAqLwogCQkJCWdvdG8gZXJyb3I7Ci0JCQl1cmItPmFjdHVhbF9sZW5ndGggPSBuOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlnb3RvIGVycm9yOwpAQCAtNjI5LDcgKzYyMiw3IEBACiB7CiAJaW50CQlyZXR2YWw7CiAJdW5zaWduZWQgbG9uZwlmbGFnczsKLQlpbnQJCWxlbiA9IDEgKyAodXJiLT5kZXYtPm1heGNoaWxkIC8gOCk7CisJdW5zaWduZWQJbGVuID0gMSArICh1cmItPmRldi0+bWF4Y2hpbGQgLyA4KTsKIAogCXNwaW5fbG9ja19pcnFzYXZlICgmaGNkX3Jvb3RfaHViX2xvY2ssIGZsYWdzKTsKIAlpZiAoaGNkLT5zdGF0dXNfdXJiIHx8IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA8IGxlbikgewpAQCAtOTAxLDcgKzg5NCw3IEBACiAKIAltdXRleF9sb2NrKCZ1c2JfYnVzX2xpc3RfbG9jayk7CiAKLQl1c2JfZGV2LT5lcDAuZGVzYy53TWF4UGFja2V0U2l6ZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNjQpOworCXVzYl9kZXYtPmVwMC5kZXNjLndNYXhQYWNrZXRTaXplID0gY3B1X3RvX2xlMTYoNjQpOwogCXJldHZhbCA9IHVzYl9nZXRfZGV2aWNlX2Rlc2NyaXB0b3IodXNiX2RldiwgVVNCX0RUX0RFVklDRV9TSVpFKTsKIAlpZiAocmV0dmFsICE9IHNpemVvZiB1c2JfZGV2LT5kZXNjcmlwdG9yKSB7CiAJCW11dGV4X3VubG9jaygmdXNiX2J1c19saXN0X2xvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9odWIuYyBiL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMKaW5kZXggY2Q1MGQ4Ni4uYmU4NmFlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9odWIuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jCkBAIC0zOTIsNyArMzkyLDcgQEAKIHsKIAlzdHJ1Y3QgdXNiX2h1YiAqaHViID0gdXJiLT5jb250ZXh0OwogCWludCBzdGF0dXMgPSB1cmItPnN0YXR1czsKLQlpbnQgaTsKKwl1bnNpZ25lZCBpOwogCXVuc2lnbmVkIGxvbmcgYml0czsKIAogCXN3aXRjaCAoc3RhdHVzKSB7CkBAIC0xMzA1LDYgKzEzMDUsNyBAQAogCQlyZWN1cnNpdmVseV9tYXJrX05PVEFUVEFDSEVEKHVkZXYpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldmljZV9zdGF0ZV9sb2NrLCBmbGFncyk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc2V0X2RldmljZV9zdGF0ZSk7CiAKIC8qCiAgKiBXVVNCIGRldmljZXMgYXJlIHNpbXBsZTogdGhleSBoYXZlIG5vIGh1YnMgYmVoaW5kLCBzbyB0aGUgbWFwcGluZwpAQCAtMjQ3MSwyMCArMjQ3MiwyMCBAQAogCSAqLwogCXN3aXRjaCAodWRldi0+c3BlZWQpIHsKIAljYXNlIFVTQl9TUEVFRF9WQVJJQUJMRToJLyogZml4ZWQgYXQgNTEyICovCi0JCXVkZXYtPmVwMC5kZXNjLndNYXhQYWNrZXRTaXplID0gX19jb25zdGFudF9jcHVfdG9fbGUxNig1MTIpOworCQl1ZGV2LT5lcDAuZGVzYy53TWF4UGFja2V0U2l6ZSA9IGNwdV90b19sZTE2KDUxMik7CiAJCWJyZWFrOwogCWNhc2UgVVNCX1NQRUVEX0hJR0g6CQkvKiBmaXhlZCBhdCA2NCAqLwotCQl1ZGV2LT5lcDAuZGVzYy53TWF4UGFja2V0U2l6ZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNjQpOworCQl1ZGV2LT5lcDAuZGVzYy53TWF4UGFja2V0U2l6ZSA9IGNwdV90b19sZTE2KDY0KTsKIAkJYnJlYWs7CiAJY2FzZSBVU0JfU1BFRURfRlVMTDoJCS8qIDgsIDE2LCAzMiwgb3IgNjQgKi8KIAkJLyogdG8gZGV0ZXJtaW5lIHRoZSBlcDAgbWF4cGFja2V0IHNpemUsIHRyeSB0byByZWFkCiAJCSAqIHRoZSBkZXZpY2UgZGVzY3JpcHRvciB0byBnZXQgYk1heFBhY2tldFNpemUwIGFuZAogCQkgKiB0aGVuIGNvcnJlY3Qgb3VyIGluaXRpYWwgZ3Vlc3MuCiAJCSAqLwotCQl1ZGV2LT5lcDAuZGVzYy53TWF4UGFja2V0U2l6ZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNjQpOworCQl1ZGV2LT5lcDAuZGVzYy53TWF4UGFja2V0U2l6ZSA9IGNwdV90b19sZTE2KDY0KTsKIAkJYnJlYWs7CiAJY2FzZSBVU0JfU1BFRURfTE9XOgkJLyogZml4ZWQgYXQgOCAqLwotCQl1ZGV2LT5lcDAuZGVzYy53TWF4UGFja2V0U2l6ZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoOCk7CisJCXVkZXYtPmVwMC5kZXNjLndNYXhQYWNrZXRTaXplID0gY3B1X3RvX2xlMTYoOCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWdvdG8gZmFpbDsKQEAgLTMzOTIsMTAgKzMzOTMsMTAgQEAKIAkJdWRldi0+ZGVzY3JpcHRvciA9IGRlc2NyaXB0b3I7CS8qIGZvciBkaXNjb25uZWN0KCkgY2FsbHMgKi8KIAkJZ290byByZV9lbnVtZXJhdGU7CiAgIAl9Ci0gIAorCisJLyogUmVzdG9yZSB0aGUgZGV2aWNlJ3MgcHJldmlvdXMgY29uZmlndXJhdGlvbiAqLwogCWlmICghdWRldi0+YWN0Y29uZmlnKQogCQlnb3RvIGRvbmU7Ci0KIAlyZXQgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3NuZGN0cmxwaXBlKHVkZXYsIDApLAogCQkJVVNCX1JFUV9TRVRfQ09ORklHVVJBVElPTiwgMCwKIAkJCXVkZXYtPmFjdGNvbmZpZy0+ZGVzYy5iQ29uZmlndXJhdGlvblZhbHVlLCAwLApAQCAtMzQwOCwxNiArMzQwOSwyNSBAQAogICAJfQogCXVzYl9zZXRfZGV2aWNlX3N0YXRlKHVkZXYsIFVTQl9TVEFURV9DT05GSUdVUkVEKTsKIAorCS8qIFB1dCBpbnRlcmZhY2VzIGJhY2sgaW50byB0aGUgc2FtZSBhbHRzZXR0aW5ncyBhcyBiZWZvcmUuCisJICogRG9uJ3QgYm90aGVyIHRvIHNlbmQgdGhlIFNldC1JbnRlcmZhY2UgcmVxdWVzdCBmb3IgaW50ZXJmYWNlcworCSAqIHRoYXQgd2VyZSBhbHJlYWR5IGluIGFsdHNldHRpbmcgMDsgYmVzaWRlcyBiZWluZyB1bm5lY2Vzc2FyeSwKKwkgKiBtYW55IGRldmljZXMgY2FuJ3QgaGFuZGxlIGl0LiAgSW5zdGVhZCBqdXN0IHJlc2V0IHRoZSBob3N0LXNpZGUKKwkgKiBlbmRwb2ludCBzdGF0ZS4KKwkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgdWRldi0+YWN0Y29uZmlnLT5kZXNjLmJOdW1JbnRlcmZhY2VzOyBpKyspIHsKIAkJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB1ZGV2LT5hY3Rjb25maWctPmludGVyZmFjZVtpXTsKIAkJc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvciAqZGVzYzsKIAotCQkvKiBzZXRfaW50ZXJmYWNlIHJlc2V0cyBob3N0IHNpZGUgdG9nZ2xlIGV2ZW4KLQkJICogZm9yIGFsdHNldHRpbmcgemVyby4gIHRoZSBpbnRlcmZhY2UgbWF5IGhhdmUgbm8gZHJpdmVyLgotCQkgKi8KIAkJZGVzYyA9ICZpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZGVzYzsKLQkJcmV0ID0gdXNiX3NldF9pbnRlcmZhY2UodWRldiwgZGVzYy0+YkludGVyZmFjZU51bWJlciwKLQkJCWRlc2MtPmJBbHRlcm5hdGVTZXR0aW5nKTsKKwkJaWYgKGRlc2MtPmJBbHRlcm5hdGVTZXR0aW5nID09IDApIHsKKwkJCXVzYl9kaXNhYmxlX2ludGVyZmFjZSh1ZGV2LCBpbnRmLCB0cnVlKTsKKwkJCXVzYl9lbmFibGVfaW50ZXJmYWNlKHVkZXYsIGludGYsIHRydWUpOworCQkJcmV0ID0gMDsKKwkJfSBlbHNlIHsKKwkJCXJldCA9IHVzYl9zZXRfaW50ZXJmYWNlKHVkZXYsIGRlc2MtPmJJbnRlcmZhY2VOdW1iZXIsCisJCQkJCWRlc2MtPmJBbHRlcm5hdGVTZXR0aW5nKTsKKwkJfQogCQlpZiAocmV0IDwgMCkgewogCQkJZGV2X2VycigmdWRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlc3RvcmUgaW50ZXJmYWNlICVkICIKIAkJCQkiYWx0c2V0dGluZyAlZCAoZXJyb3I9JWQpXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmMgYi9kcml2ZXJzL3VzYi9jb3JlL21lc3NhZ2UuYwppbmRleCA0OWU3ZjU2Li4zMGEwNjkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL21lc3NhZ2UuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL21lc3NhZ2UuYwpAQCAtNTksNyArNTksNyBAQAogCQlyZXR2YWwgPSAoY3R4LnN0YXR1cyA9PSAtRU5PRU5UID8gLUVUSU1FRE9VVCA6IGN0eC5zdGF0dXMpOwogCiAJCWRldl9kYmcoJnVyYi0+ZGV2LT5kZXYsCi0JCQkiJXMgdGltZWQgb3V0IG9uIGVwJWQlcyBsZW49JWQvJWRcbiIsCisJCQkiJXMgdGltZWQgb3V0IG9uIGVwJWQlcyBsZW49JXUvJXVcbiIsCiAJCQljdXJyZW50LT5jb21tLAogCQkJdXNiX2VuZHBvaW50X251bSgmdXJiLT5lcC0+ZGVzYyksCiAJCQl1c2JfdXJiX2Rpcl9pbih1cmIpID8gImluIiA6ICJvdXQiLApAQCAtODA0LDE4ICs4MDQsMTYgQEAKIAkJCWRldl9lcnIoJmRldi0+ZGV2LAogCQkJCSJzdHJpbmcgZGVzY3JpcHRvciAwIHJlYWQgZXJyb3I6ICVkXG4iLAogCQkJCWVycik7Ci0JCQlnb3RvIGVycm91dDsKIAkJfSBlbHNlIGlmIChlcnIgPCA0KSB7CiAJCQlkZXZfZXJyKCZkZXYtPmRldiwgInN0cmluZyBkZXNjcmlwdG9yIDAgdG9vIHNob3J0XG4iKTsKLQkJCWVyciA9IC1FSU5WQUw7Ci0JCQlnb3RvIGVycm91dDsKIAkJfSBlbHNlIHsKLQkJCWRldi0+aGF2ZV9sYW5naWQgPSAxOwogCQkJZGV2LT5zdHJpbmdfbGFuZ2lkID0gdGJ1ZlsyXSB8ICh0YnVmWzNdIDw8IDgpOwogCQkJLyogYWx3YXlzIHVzZSB0aGUgZmlyc3QgbGFuZ2lkIGxpc3RlZCAqLwogCQkJZGV2X2RiZygmZGV2LT5kZXYsICJkZWZhdWx0IGxhbmd1YWdlIDB4JTA0eFxuIiwKIAkJCQlkZXYtPnN0cmluZ19sYW5naWQpOwogCQl9CisKKwkJZGV2LT5oYXZlX2xhbmdpZCA9IDE7CiAJfQogCiAJZXJyID0gdXNiX3N0cmluZ19zdWIoZGV2LCBkZXYtPnN0cmluZ19sYW5naWQsIGluZGV4LCB0YnVmKTsKQEAgLTE3MTksNyArMTcxNyw4IEBACiAJfQogCWtmcmVlKG5ld19pbnRlcmZhY2VzKTsKIAotCWlmIChjcC0+c3RyaW5nID09IE5VTEwpCisJaWYgKGNwLT5zdHJpbmcgPT0gTlVMTCAmJgorCQkJIShkZXYtPnF1aXJrcyAmIFVTQl9RVUlSS19DT05GSUdfSU5URl9TVFJJTkdTKSkKIAkJY3AtPnN0cmluZyA9IHVzYl9jYWNoZV9zdHJpbmcoZGV2LCBjcC0+ZGVzYy5pQ29uZmlndXJhdGlvbik7CiAKIAkvKiBOb3cgdGhhdCBhbGwgdGhlIGludGVyZmFjZXMgYXJlIHNldCB1cCwgcmVnaXN0ZXIgdGhlbQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9xdWlya3MuYyBiL2RyaXZlcnMvdXNiL2NvcmUvcXVpcmtzLmMKaW5kZXggYzA3MGIzNC4uYWI5MzkxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9xdWlya3MuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL3F1aXJrcy5jCkBAIC01NCw2ICs1NCwxMCBAQAogCXsgVVNCX0RFVklDRSgweDA2MzgsIDB4MGExMyksIC5kcml2ZXJfaW5mbyA9CiAJICBVU0JfUVVJUktfU1RSSU5HX0ZFVENIXzI1NSB9LAogCisJLyogU2FpdGVrIEN5Ym9yZyBHb2xkIEpveXN0aWNrICovCisJeyBVU0JfREVWSUNFKDB4MDZhMywgMHgwMDA2KSwgLmRyaXZlcl9pbmZvID0KKwkJCVVTQl9RVUlSS19DT05GSUdfSU5URl9TVFJJTkdTIH0sCisKIAkvKiBNLVN5c3RlbXMgRmxhc2ggRGlzayBQaW9uZWVycyAqLwogCXsgVVNCX0RFVklDRSgweDA4ZWMsIDB4MTAwMCksIC5kcml2ZXJfaW5mbyA9IFVTQl9RVUlSS19SRVNFVF9SRVNVTUUgfSwKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9zeXNmcy5jIGIvZHJpdmVycy91c2IvY29yZS9zeXNmcy5jCmluZGV4IDRjYzI0NTYuLmM2Njc4OTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvc3lzZnMuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL3N5c2ZzLmMKQEAgLTEzLDYgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IvcXVpcmtzLmg+CiAjaW5jbHVkZSAidXNiLmgiCiAKIC8qIEFjdGl2ZSBjb25maWd1cmF0aW9uIGZpZWxkcyAqLwpAQCAtODEzLDcgKzgxNCw4IEBACiAJaWYgKGludGYtPnN5c2ZzX2ZpbGVzX2NyZWF0ZWQgfHwgaW50Zi0+dW5yZWdpc3RlcmluZykKIAkJcmV0dXJuIDA7CiAKLQlpZiAoYWx0LT5zdHJpbmcgPT0gTlVMTCkKKwlpZiAoYWx0LT5zdHJpbmcgPT0gTlVMTCAmJgorCQkJISh1ZGV2LT5xdWlya3MgJiBVU0JfUVVJUktfQ09ORklHX0lOVEZfU1RSSU5HUykpCiAJCWFsdC0+c3RyaW5nID0gdXNiX2NhY2hlX3N0cmluZyh1ZGV2LCBhbHQtPmRlc2MuaUludGVyZmFjZSk7CiAJaWYgKGFsdC0+c3RyaW5nKQogCQlyZXR2YWwgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX2ludGVyZmFjZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL3VyYi5jIGIvZHJpdmVycy91c2IvY29yZS91cmIuYwppbmRleCA1OGJjNWUzLi4zMzc2MDU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL3VyYi5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvdXJiLmMKQEAgLTI5NSw3ICsyOTUsNyBAQAogCWlmICghdXJiIHx8IHVyYi0+aGNwcml2IHx8ICF1cmItPmNvbXBsZXRlKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlkZXYgPSB1cmItPmRldjsKLQlpZiAoKCFkZXYpIHx8IChkZXYtPnN0YXRlIDwgVVNCX1NUQVRFX0RFRkFVTFQpKQorCWlmICgoIWRldikgfHwgKGRldi0+c3RhdGUgPCBVU0JfU1RBVEVfVU5BVVRIRU5USUNBVEVEKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAkvKiBGb3Igbm93LCBnZXQgdGhlIGVuZHBvaW50IGZyb20gdGhlIHBpcGUuICBFdmVudHVhbGx5IGRyaXZlcnMKQEAgLTM3MCw3ICszNzAsNyBAQAogCX0KIAogCS8qIHRoZSBJL08gYnVmZmVyIG11c3QgYmUgbWFwcGVkL3VubWFwcGVkLCBleGNlcHQgd2hlbiBsZW5ndGg9MCAqLwotCWlmICh1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPCAwKQorCWlmICh1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPiBJTlRfTUFYKQogCQlyZXR1cm4gLUVNU0dTSVpFOwogCiAjaWZkZWYgREVCVUcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnIGIvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcKaW5kZXggZTU1ZmVmNS4uNzcwYjNlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcKQEAgLTI1NCw2ICsyNTQsNyBAQAogY29uZmlnIFVTQl9HQURHRVRfUFhBMjdYCiAJYm9vbGVhbiAiUFhBIDI3eCIKIAlkZXBlbmRzIG9uIEFSQ0hfUFhBICYmIFBYQTI3eAorCXNlbGVjdCBVU0JfT1RHX1VUSUxTCiAJaGVscAogCSAgIEludGVsJ3MgUFhBIDI3eCBzZXJpZXMgWFNjYWxlIEFSTSB2NVRFIHByb2Nlc3NvcnMgaW5jbHVkZQogCSAgIGFuIGludGVncmF0ZWQgZnVsbCBzcGVlZCBVU0IgMS4xIGRldmljZSBjb250cm9sbGVyLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2FtZDU1MzZ1ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9hbWQ1NTM2dWRjLmMKaW5kZXggYWJmODE5Mi4uODI2ZjNhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2FtZDU1MzZ1ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvYW1kNTUzNnVkYy5jCkBAIC01NTEsNyArNTUxLDcgQEAKIAkJZG1hX2Rlc2MtPnN0YXR1cyA9IEFNRF9BRERCSVRTKGRtYV9kZXNjLT5zdGF0dXMsCiAJCQkJCQlVRENfRE1BX1NUUF9TVFNfQlNfSE9TVF9CVVNZLAogCQkJCQkJVURDX0RNQV9TVFBfU1RTX0JTKTsKLQkJZG1hX2Rlc2MtPmJ1ZnB0ciA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoRE1BX0RPTlRfVVNFKTsKKwkJZG1hX2Rlc2MtPmJ1ZnB0ciA9IGNwdV90b19sZTMyKERNQV9ET05UX1VTRSk7CiAJCXJlcS0+dGRfZGF0YSA9IGRtYV9kZXNjOwogCQlyZXEtPnRkX2RhdGFfbGFzdCA9IE5VTEw7CiAJCXJlcS0+Y2hhaW5fbGVuID0gMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9hdG1lbF91c2JhX3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2F0bWVsX3VzYmFfdWRjLmMKaW5kZXggNjViMDNlMy4uYzIyZmFiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2F0bWVsX3VzYmFfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2F0bWVsX3VzYmFfdWRjLmMKQEAgLTEwMTcsNyArMTAxNyw3IEBACiAJLmJEZXNjcmlwdG9yVHlwZSA9IFVTQl9EVF9FTkRQT0lOVCwKIAkuYkVuZHBvaW50QWRkcmVzcyA9IDAsCiAJLmJtQXR0cmlidXRlcyA9IFVTQl9FTkRQT0lOVF9YRkVSX0NPTlRST0wsCi0JLndNYXhQYWNrZXRTaXplID0gX19jb25zdGFudF9jcHVfdG9fbGUxNig2NCksCisJLndNYXhQYWNrZXRTaXplID0gY3B1X3RvX2xlMTYoNjQpLAogCS8qIEZJWE1FOiBJIGhhdmUgbm8gaWRlYSB3aGF0IHRvIHB1dCBoZXJlICovCiAJLmJJbnRlcnZhbCA9IDEsCiB9OwpAQCAtMTIwNywyMSArMTIwNywyMSBAQAogLyogQXZvaWQgb3Zlcmx5IGxvbmcgZXhwcmVzc2lvbnMgKi8KIHN0YXRpYyBpbmxpbmUgYm9vbCBmZWF0dXJlX2lzX2Rldl9yZW1vdGVfd2FrZXVwKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmNycSkKIHsKLQlpZiAoY3JxLT53VmFsdWUgPT0gX19jb25zdGFudF9jcHVfdG9fbGUxNihVU0JfREVWSUNFX1JFTU9URV9XQUtFVVApKQorCWlmIChjcnEtPndWYWx1ZSA9PSBjcHVfdG9fbGUxNihVU0JfREVWSUNFX1JFTU9URV9XQUtFVVApKQogCQlyZXR1cm4gdHJ1ZTsKIAlyZXR1cm4gZmFsc2U7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBmZWF0dXJlX2lzX2Rldl90ZXN0X21vZGUoc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqY3JxKQogewotCWlmIChjcnEtPndWYWx1ZSA9PSBfX2NvbnN0YW50X2NwdV90b19sZTE2KFVTQl9ERVZJQ0VfVEVTVF9NT0RFKSkKKwlpZiAoY3JxLT53VmFsdWUgPT0gY3B1X3RvX2xlMTYoVVNCX0RFVklDRV9URVNUX01PREUpKQogCQlyZXR1cm4gdHJ1ZTsKIAlyZXR1cm4gZmFsc2U7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBmZWF0dXJlX2lzX2VwX2hhbHQoc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqY3JxKQogewotCWlmIChjcnEtPndWYWx1ZSA9PSBfX2NvbnN0YW50X2NwdV90b19sZTE2KFVTQl9FTkRQT0lOVF9IQUxUKSkKKwlpZiAoY3JxLT53VmFsdWUgPT0gY3B1X3RvX2xlMTYoVVNCX0VORFBPSU5UX0hBTFQpKQogCQlyZXR1cm4gdHJ1ZTsKIAlyZXR1cm4gZmFsc2U7CiB9CkBAIC0xMjM5LDcgKzEyMzksNyBAQAogCQkJc3RhdHVzID0gY3B1X3RvX2xlMTYodWRjLT5kZXZzdGF0dXMpOwogCQl9IGVsc2UgaWYgKGNycS0+YlJlcXVlc3RUeXBlCiAJCQkJPT0gKFVTQl9ESVJfSU4gfCBVU0JfUkVDSVBfSU5URVJGQUNFKSkgewotCQkJc3RhdHVzID0gX19jb25zdGFudF9jcHVfdG9fbGUxNigwKTsKKwkJCXN0YXR1cyA9IGNwdV90b19sZTE2KDApOwogCQl9IGVsc2UgaWYgKGNycS0+YlJlcXVlc3RUeXBlCiAJCQkJPT0gKFVTQl9ESVJfSU4gfCBVU0JfUkVDSVBfRU5EUE9JTlQpKSB7CiAJCQlzdHJ1Y3QgdXNiYV9lcCAqdGFyZ2V0OwpAQCAtMTI1MCwxMiArMTI1MCwxMiBAQAogCiAJCQlzdGF0dXMgPSAwOwogCQkJaWYgKGlzX3N0YWxsZWQodWRjLCB0YXJnZXQpKQotCQkJCXN0YXR1cyB8PSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDEpOworCQkJCXN0YXR1cyB8PSBjcHVfdG9fbGUxNigxKTsKIAkJfSBlbHNlCiAJCQlnb3RvIGRlbGVnYXRlOwogCiAJCS8qIFdyaXRlIGRpcmVjdGx5IHRvIHRoZSBGSUZPLiBObyBxdWV1ZWluZyBpcyBkb25lLiAqLwotCQlpZiAoY3JxLT53TGVuZ3RoICE9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoc2l6ZW9mKHN0YXR1cykpKQorCQlpZiAoY3JxLT53TGVuZ3RoICE9IGNwdV90b19sZTE2KHNpemVvZihzdGF0dXMpKSkKIAkJCWdvdG8gc3RhbGw7CiAJCWVwLT5zdGF0ZSA9IERBVEFfU1RBR0VfSU47CiAJCV9fcmF3X3dyaXRldyhzdGF0dXMsIGVwLT5maWZvKTsKQEAgLTEyNzQsNyArMTI3NCw3IEBACiAJCX0gZWxzZSBpZiAoY3JxLT5iUmVxdWVzdFR5cGUgPT0gVVNCX1JFQ0lQX0VORFBPSU5UKSB7CiAJCQlzdHJ1Y3QgdXNiYV9lcCAqdGFyZ2V0OwogCi0JCQlpZiAoY3JxLT53TGVuZ3RoICE9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMCkKKwkJCWlmIChjcnEtPndMZW5ndGggIT0gY3B1X3RvX2xlMTYoMCkKIAkJCQkJfHwgIWZlYXR1cmVfaXNfZXBfaGFsdChjcnEpKQogCQkJCWdvdG8gc3RhbGw7CiAJCQl0YXJnZXQgPSBnZXRfZXBfYnlfYWRkcih1ZGMsIGxlMTZfdG9fY3B1KGNycS0+d0luZGV4KSk7CkBAIC0xMzA4LDcgKzEzMDgsNyBAQAogCQl9IGVsc2UgaWYgKGNycS0+YlJlcXVlc3RUeXBlID09IFVTQl9SRUNJUF9FTkRQT0lOVCkgewogCQkJc3RydWN0IHVzYmFfZXAgKnRhcmdldDsKIAotCQkJaWYgKGNycS0+d0xlbmd0aCAhPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDApCisJCQlpZiAoY3JxLT53TGVuZ3RoICE9IGNwdV90b19sZTE2KDApCiAJCQkJCXx8ICFmZWF0dXJlX2lzX2VwX2hhbHQoY3JxKSkKIAkJCQlnb3RvIHN0YWxsOwogCkBAIC0xNTE0LDcgKzE1MTQsNyBAQAogCQkJICovCiAJCQllcC0+c3RhdGUgPSBEQVRBX1NUQUdFX0lOOwogCQl9IGVsc2UgewotCQkJaWYgKGNycS5jcnEud0xlbmd0aCAhPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDApKQorCQkJaWYgKGNycS5jcnEud0xlbmd0aCAhPSBjcHVfdG9fbGUxNigwKSkKIAkJCQllcC0+c3RhdGUgPSBEQVRBX1NUQUdFX09VVDsKIAkJCWVsc2UKIAkJCQllcC0+c3RhdGUgPSBTVEFUVVNfU1RBR0VfSU47CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvY2RjMi5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2NkYzIuYwppbmRleCA1NDk1YjE3Li45MjgxMzdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvY2RjMi5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9jZGMyLmMKQEAgLTY2LDcgKzY2LDcgQEAKIAkuYkxlbmd0aCA9CQlzaXplb2YgZGV2aWNlX2Rlc2MsCiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9ERVZJQ0UsCiAKLQkuYmNkVVNCID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMjAwKSwKKwkuYmNkVVNCID0JCWNwdV90b19sZTE2KDB4MDIwMCksCiAKIAkuYkRldmljZUNsYXNzID0JCVVTQl9DTEFTU19DT01NLAogCS5iRGV2aWNlU3ViQ2xhc3MgPQkwLApAQCAtNzQsOCArNzQsOCBAQAogCS8qIC5iTWF4UGFja2V0U2l6ZTAgPSBmKGhhcmR3YXJlKSAqLwogCiAJLyogVmVuZG9yIGFuZCBwcm9kdWN0IGlkIGNhbiBiZSBvdmVycmlkZGVuIGJ5IG1vZHVsZSBwYXJhbWV0ZXJzLiAgKi8KLQkuaWRWZW5kb3IgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihDRENfVkVORE9SX05VTSksCi0JLmlkUHJvZHVjdCA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KENEQ19QUk9EVUNUX05VTSksCisJLmlkVmVuZG9yID0JCWNwdV90b19sZTE2KENEQ19WRU5ET1JfTlVNKSwKKwkuaWRQcm9kdWN0ID0JCWNwdV90b19sZTE2KENEQ19QUk9EVUNUX05VTSksCiAJLyogLmJjZERldmljZSA9IGYoaGFyZHdhcmUpICovCiAJLyogLmlNYW51ZmFjdHVyZXIgPSBEWU5BTUlDICovCiAJLyogLmlQcm9kdWN0ID0gRFlOQU1JQyAqLwpAQCAtMTkzLDcgKzE5Myw3IEBACiAJCQkJZ2FkZ2V0LT5uYW1lLAogCQkJCWNkY19jb25maWdfZHJpdmVyLmxhYmVsKTsKIAkJZGV2aWNlX2Rlc2MuYmNkRGV2aWNlID0KLQkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMzAwIHwgMHgwMDk5KTsKKwkJCWNwdV90b19sZTE2KDB4MDMwMCB8IDB4MDA5OSk7CiAJfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9jaTEzeHh4X3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2NpMTN4eHhfdWRjLmMKaW5kZXggYmViZjkxMS4uMjJjNjU5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2NpMTN4eHhfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2NpMTN4eHhfdWRjLmMKQEAgLTU2LDcgKzU2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtMjYyNiw3ICsyNjI1LDcgQEAKIAlJTklUX0xJU1RfSEVBRCgmdWRjLT5nYWRnZXQuZXBfbGlzdCk7CiAJdWRjLT5nYWRnZXQuZXAwID0gTlVMTDsKIAotCXN0cmNweSh1ZGMtPmdhZGdldC5kZXYuYnVzX2lkLCAiZ2FkZ2V0Iik7CisJZGV2X3NldF9uYW1lKCZ1ZGMtPmdhZGdldC5kZXYsICJnYWRnZXQiKTsKIAl1ZGMtPmdhZGdldC5kZXYuZG1hX21hc2sgPSBkZXYtPmRtYV9tYXNrOwogCXVkYy0+Z2FkZ2V0LmRldi5wYXJlbnQgICA9IGRldjsKIAl1ZGMtPmdhZGdldC5kZXYucmVsZWFzZSAgPSB1ZGNfcmVsZWFzZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9jb21wb3NpdGUuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9jb21wb3NpdGUuYwppbmRleCA1ZDExYzI5Li41OWU4NTIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvY29tcG9zaXRlLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2NvbXBvc2l0ZS5jCkBAIC0xNDksMTYgKzE0OSwxNyBAQAogaW50IHVzYl9mdW5jdGlvbl9kZWFjdGl2YXRlKHN0cnVjdCB1c2JfZnVuY3Rpb24gKmZ1bmN0aW9uKQogewogCXN0cnVjdCB1c2JfY29tcG9zaXRlX2RldgkqY2RldiA9IGZ1bmN0aW9uLT5jb25maWctPmNkZXY7CisJdW5zaWduZWQgbG9uZwkJCWZsYWdzOwogCWludAkJCQlzdGF0dXMgPSAwOwogCi0Jc3Bpbl9sb2NrKCZjZGV2LT5sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2Rldi0+bG9jaywgZmxhZ3MpOwogCiAJaWYgKGNkZXYtPmRlYWN0aXZhdGlvbnMgPT0gMCkKIAkJc3RhdHVzID0gdXNiX2dhZGdldF9kaXNjb25uZWN0KGNkZXYtPmdhZGdldCk7CiAJaWYgKHN0YXR1cyA9PSAwKQogCQljZGV2LT5kZWFjdGl2YXRpb25zKys7CiAKLQlzcGluX3VubG9jaygmY2Rldi0+bG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2Rldi0+bG9jaywgZmxhZ3MpOwogCXJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTEwMTMsNyArMTAxNCw3IEBACiAJc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2CSpjZGV2ID0gZ2V0X2dhZGdldF9kYXRhKGdhZGdldCk7CiAJc3RydWN0IHVzYl9mdW5jdGlvbgkJKmY7CiAKLQkvKiBSRVZJU0lUOiAgc2hvdWxkIHdlIGhhdmUgY29uZmlnIGFuZCBkZXZpY2UgbGV2ZWwKKwkvKiBSRVZJU0lUOiAgc2hvdWxkIHdlIGhhdmUgY29uZmlnIGxldmVsCiAJICogc3VzcGVuZC9yZXN1bWUgY2FsbGJhY2tzPwogCSAqLwogCURCRyhjZGV2LCAic3VzcGVuZFxuIik7CkBAIC0xMDIzLDYgKzEwMjQsOCBAQAogCQkJCWYtPnN1c3BlbmQoZik7CiAJCX0KIAl9CisJaWYgKGNvbXBvc2l0ZS0+c3VzcGVuZCkKKwkJY29tcG9zaXRlLT5zdXNwZW5kKGNkZXYpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMTAzMSwxMCArMTAzNCwxMiBAQAogCXN0cnVjdCB1c2JfY29tcG9zaXRlX2RldgkqY2RldiA9IGdldF9nYWRnZXRfZGF0YShnYWRnZXQpOwogCXN0cnVjdCB1c2JfZnVuY3Rpb24JCSpmOwogCi0JLyogUkVWSVNJVDogIHNob3VsZCB3ZSBoYXZlIGNvbmZpZyBhbmQgZGV2aWNlIGxldmVsCisJLyogUkVWSVNJVDogIHNob3VsZCB3ZSBoYXZlIGNvbmZpZyBsZXZlbAogCSAqIHN1c3BlbmQvcmVzdW1lIGNhbGxiYWNrcz8KIAkgKi8KIAlEQkcoY2RldiwgInJlc3VtZVxuIik7CisJaWYgKGNvbXBvc2l0ZS0+cmVzdW1lKQorCQljb21wb3NpdGUtPnJlc3VtZShjZGV2KTsKIAlpZiAoY2Rldi0+Y29uZmlnKSB7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnkoZiwgJmNkZXYtPmNvbmZpZy0+ZnVuY3Rpb25zLCBsaXN0KSB7CiAJCQlpZiAoZi0+cmVzdW1lKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2R1bW15X2hjZC5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2R1bW15X2hjZC5jCmluZGV4IDkwNjQ2OTYuLmE1NmIyNGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9kdW1teV9oY2QuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZHVtbXlfaGNkLmMKQEAgLTE0MzcsNyArMTQzNyw3IEBACiAJCQkJCX0KIAkJCQkJaWYgKHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA+IDEpCiAJCQkJCQlidWYgWzFdID0gMDsKLQkJCQkJdXJiLT5hY3R1YWxfbGVuZ3RoID0gbWluICgyLAorCQkJCQl1cmItPmFjdHVhbF9sZW5ndGggPSBtaW5fdCh1MzIsIDIsCiAJCQkJCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpOwogCQkJCQl2YWx1ZSA9IDA7CiAJCQkJCXN0YXR1cyA9IDA7CkBAIC0xNjI2LDcgKzE2MjYsNyBAQAogCQlodWJfZGVzY3JpcHRvciAoKHN0cnVjdCB1c2JfaHViX2Rlc2NyaXB0b3IgKikgYnVmKTsKIAkJYnJlYWs7CiAJY2FzZSBHZXRIdWJTdGF0dXM6Ci0JCSooX19sZTMyICopIGJ1ZiA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDApOworCQkqKF9fbGUzMiAqKSBidWYgPSBjcHVfdG9fbGUzMiAoMCk7CiAJCWJyZWFrOwogCWNhc2UgR2V0UG9ydFN0YXR1czoKIAkJaWYgKHdJbmRleCAhPSAxKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2VwYXV0b2NvbmYuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9lcGF1dG9jb25mLmMKaW5kZXggYTM2YjExNy4uY2QwOTE0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2VwYXV0b2NvbmYuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZXBhdXRvY29uZi5jCkBAIC0xNDgsNyArMTQ4LDcgQEAKIAkJCXJldHVybiAwOwogCiAJCS8qIEJPVEg6ICAiaGlnaCBiYW5kd2lkdGgiIHdvcmtzIG9ubHkgYXQgaGlnaCBzcGVlZCAqLwotCQlpZiAoKGRlc2MtPndNYXhQYWNrZXRTaXplICYgX19jb25zdGFudF9jcHVfdG9fbGUxNigzPDwxMSkpKSB7CisJCWlmICgoZGVzYy0+d01heFBhY2tldFNpemUgJiBjcHVfdG9fbGUxNigzPDwxMSkpKSB7CiAJCQlpZiAoIWdhZGdldC0+aXNfZHVhbHNwZWVkKQogCQkJCXJldHVybiAwOwogCQkJLyogY29uZmlndXJlIHlvdXIgaGFyZHdhcmUgd2l0aCBlbm91Z2ggYnVmZmVyaW5nISEgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9ldGhlci5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2V0aGVyLmMKaW5kZXggMzcyNTJkMC4uZDAwNmRjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2V0aGVyLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2V0aGVyLmMKQEAgLTE1Niw3ICsxNTYsNyBAQAogCS5iTGVuZ3RoID0JCXNpemVvZiBkZXZpY2VfZGVzYywKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0RFVklDRSwKIAotCS5iY2RVU0IgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNiAoMHgwMjAwKSwKKwkuYmNkVVNCID0JCWNwdV90b19sZTE2ICgweDAyMDApLAogCiAJLmJEZXZpY2VDbGFzcyA9CQlVU0JfQ0xBU1NfQ09NTSwKIAkuYkRldmljZVN1YkNsYXNzID0JMCwKQEAgLTE2Nyw4ICsxNjcsOCBAQAogCSAqIHdlIHN1cHBvcnQuICAoQXMgZG9lcyBiTnVtQ29uZmlndXJhdGlvbnMuKSAgVGhlc2UgdmFsdWVzIGNhbgogCSAqIGFsc28gYmUgb3ZlcnJpZGRlbiBieSBtb2R1bGUgcGFyYW1ldGVycy4KIAkgKi8KLQkuaWRWZW5kb3IgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNiAoQ0RDX1ZFTkRPUl9OVU0pLAotCS5pZFByb2R1Y3QgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNiAoQ0RDX1BST0RVQ1RfTlVNKSwKKwkuaWRWZW5kb3IgPQkJY3B1X3RvX2xlMTYgKENEQ19WRU5ET1JfTlVNKSwKKwkuaWRQcm9kdWN0ID0JCWNwdV90b19sZTE2IChDRENfUFJPRFVDVF9OVU0pLAogCS8qIC5iY2REZXZpY2UgPSBmKGhhcmR3YXJlKSAqLwogCS8qIC5pTWFudWZhY3R1cmVyID0gRFlOQU1JQyAqLwogCS8qIC5pUHJvZHVjdCA9IERZTkFNSUMgKi8KQEAgLTMxOCw3ICszMTgsNyBAQAogCQkJCWdhZGdldC0+bmFtZSwKIAkJCQlldGhfY29uZmlnX2RyaXZlci5sYWJlbCk7CiAJCWRldmljZV9kZXNjLmJjZERldmljZSA9Ci0JCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDMwMCB8IDB4MDA5OSk7CisJCQljcHVfdG9fbGUxNigweDAzMDAgfCAweDAwOTkpOwogCX0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9hY20uYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX2FjbS5jCmluZGV4IGMxZDM0ZGYuLjc5NTM5NDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX2FjbS5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX2FjbS5jCkBAIC0xMjUsNyArMTI1LDcgQEAKIAkuYkxlbmd0aCA9CQlzaXplb2YoYWNtX2hlYWRlcl9kZXNjKSwKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0NTX0lOVEVSRkFDRSwKIAkuYkRlc2NyaXB0b3JTdWJUeXBlID0JVVNCX0NEQ19IRUFERVJfVFlQRSwKLQkuYmNkQ0RDID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMTEwKSwKKwkuYmNkQ0RDID0JCWNwdV90b19sZTE2KDB4MDExMCksCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9jZGNfY2FsbF9tZ210X2Rlc2NyaXB0b3IKQEAgLTE1OSw3ICsxNTksNyBAQAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCiAJLmJFbmRwb2ludEFkZHJlc3MgPQlVU0JfRElSX0lOLAogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfSU5ULAotCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoR1NfTk9USUZZX01BWFBBQ0tFVCksCisJLndNYXhQYWNrZXRTaXplID0JY3B1X3RvX2xlMTYoR1NfTk9USUZZX01BWFBBQ0tFVCksCiAJLmJJbnRlcnZhbCA9CQkxIDw8IEdTX0xPRzJfTk9USUZZX0lOVEVSVkFMLAogfTsKIApAQCAtMTk3LDcgKzE5Nyw3IEBACiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKIAkuYkVuZHBvaW50QWRkcmVzcyA9CVVTQl9ESVJfSU4sCiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9JTlQsCi0JLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNihHU19OT1RJRllfTUFYUEFDS0VUKSwKKwkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNihHU19OT1RJRllfTUFYUEFDS0VUKSwKIAkuYkludGVydmFsID0JCUdTX0xPRzJfTk9USUZZX0lOVEVSVkFMKzQsCiB9OwogCkBAIC0yMDUsMTQgKzIwNSwxNCBAQAogCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAotCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNTEyKSwKKwkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNig1MTIpLAogfTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBhY21faHNfb3V0X2Rlc2MgX19pbml0ZGF0YSA9IHsKIAkuYkxlbmd0aCA9CQlVU0JfRFRfRU5EUE9JTlRfU0laRSwKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKLQkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDUxMiksCisJLndNYXhQYWNrZXRTaXplID0JY3B1X3RvX2xlMTYoNTEyKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICphY21faHNfZnVuY3Rpb25bXSBfX2luaXRkYXRhID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfZWNtLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9lY20uYwppbmRleCA0YWU1Nzk5Li5lY2Y1YmRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9lY20uYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9lY20uYwpAQCAtMTMwLDcgKzEzMCw3IEBACiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9DU19JTlRFUkZBQ0UsCiAJLmJEZXNjcmlwdG9yU3ViVHlwZSA9CVVTQl9DRENfSEVBREVSX1RZUEUsCiAKLQkuYmNkQ0RDID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMTEwKSwKKwkuYmNkQ0RDID0JCWNwdV90b19sZTE2KDB4MDExMCksCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9jZGNfdW5pb25fZGVzYyBlY21fdW5pb25fZGVzYyBfX2luaXRkYXRhID0gewpAQCAtMTQ4LDkgKzE0OCw5IEBACiAKIAkvKiB0aGlzIGRlc2NyaXB0b3IgYWN0dWFsbHkgYWRkcyB2YWx1ZSwgc3VycHJpc2UhICovCiAJLyogLmlNQUNBZGRyZXNzID0gRFlOQU1JQyAqLwotCS5ibUV0aGVybmV0U3RhdGlzdGljcyA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMCksIC8qIG5vIHN0YXRpc3RpY3MgKi8KLQkud01heFNlZ21lbnRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNihFVEhfRlJBTUVfTEVOKSwKLQkud051bWJlck1DRmlsdGVycyA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMCksCisJLmJtRXRoZXJuZXRTdGF0aXN0aWNzID0JY3B1X3RvX2xlMzIoMCksIC8qIG5vIHN0YXRpc3RpY3MgKi8KKwkud01heFNlZ21lbnRTaXplID0JY3B1X3RvX2xlMTYoRVRIX0ZSQU1FX0xFTiksCisJLndOdW1iZXJNQ0ZpbHRlcnMgPQljcHVfdG9fbGUxNigwKSwKIAkuYk51bWJlclBvd2VyRmlsdGVycyA9CTAsCiB9OwogCkBAIC0xOTIsNyArMTkyLDcgQEAKIAogCS5iRW5kcG9pbnRBZGRyZXNzID0JVVNCX0RJUl9JTiwKIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0lOVCwKLQkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KEVDTV9TVEFUVVNfQllURUNPVU5UKSwKKwkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNihFQ01fU1RBVFVTX0JZVEVDT1VOVCksCiAJLmJJbnRlcnZhbCA9CQkxIDw8IExPRzJfU1RBVFVTX0lOVEVSVkFMX01TRUMsCiB9OwogCkBAIC0yMzYsNyArMjM2LDcgQEAKIAogCS5iRW5kcG9pbnRBZGRyZXNzID0JVVNCX0RJUl9JTiwKIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0lOVCwKLQkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KEVDTV9TVEFUVVNfQllURUNPVU5UKSwKKwkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNihFQ01fU1RBVFVTX0JZVEVDT1VOVCksCiAJLmJJbnRlcnZhbCA9CQlMT0cyX1NUQVRVU19JTlRFUlZBTF9NU0VDICsgNCwKIH07CiBzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGhzX2VjbV9pbl9kZXNjIF9faW5pdGRhdGEgPSB7CkBAIC0yNDUsNyArMjQ1LDcgQEAKIAogCS5iRW5kcG9pbnRBZGRyZXNzID0JVVNCX0RJUl9JTiwKIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCi0JLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNig1MTIpLAorCS53TWF4UGFja2V0U2l6ZSA9CWNwdV90b19sZTE2KDUxMiksCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGhzX2VjbV9vdXRfZGVzYyBfX2luaXRkYXRhID0gewpAQCAtMjU0LDcgKzI1NCw3IEBACiAKIAkuYkVuZHBvaW50QWRkcmVzcyA9CVVTQl9ESVJfT1VULAogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKLQkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDUxMiksCisJLndNYXhQYWNrZXRTaXplID0JY3B1X3RvX2xlMTYoNTEyKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICplY21faHNfZnVuY3Rpb25bXSBfX2luaXRkYXRhID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfbG9vcGJhY2suYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX2xvb3BiYWNrLmMKaW5kZXggOGFmZmUxZC4uZWI2ZGRmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfbG9vcGJhY2suYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9sb29wYmFjay5jCkBAIC0xMDAsNyArMTAwLDcgQEAKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAogCiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAotCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNTEyKSwKKwkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNig1MTIpLAogfTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBoc19sb29wX3NpbmtfZGVzYyA9IHsKQEAgLTEwOCw3ICsxMDgsNyBAQAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCiAKIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCi0JLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNig1MTIpLAorCS53TWF4UGFja2V0U2l6ZSA9CWNwdV90b19sZTE2KDUxMiksCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqaHNfbG9vcGJhY2tfZGVzY3NbXSA9IHsKQEAgLTM1OSw3ICszNTksNyBAQAogICogbG9vcGJhY2tfYWRkIC0gYWRkIGEgbG9vcGJhY2sgdGVzdGluZyBjb25maWd1cmF0aW9uIHRvIGEgZGV2aWNlCiAgKiBAY2RldjogdGhlIGRldmljZSB0byBzdXBwb3J0IHRoZSBsb29wYmFjayBjb25maWd1cmF0aW9uCiAgKi8KLWludCBfX2luaXQgbG9vcGJhY2tfYWRkKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldikKK2ludCBfX2luaXQgbG9vcGJhY2tfYWRkKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldiwgYm9vbCBhdXRvcmVzdW1lKQogewogCWludCBpZDsKIApAQCAtMzcyLDYgKzM3MiwxMCBAQAogCWxvb3BiYWNrX2ludGYuaUludGVyZmFjZSA9IGlkOwogCWxvb3BiYWNrX2RyaXZlci5pQ29uZmlndXJhdGlvbiA9IGlkOwogCisJLyogc3VwcG9ydCBhdXRvcmVzdW1lIGZvciByZW1vdGUgd2FrZXVwIHRlc3RpbmcgKi8KKwlpZiAoYXV0b3Jlc3VtZSkKKwkJc291cmNlc2lua19kcml2ZXIuYm1BdHRyaWJ1dGVzIHw9IFVTQl9DT05GSUdfQVRUX1dBS0VVUDsKKwogCS8qIHN1cHBvcnQgT1RHIHN5c3RlbXMgKi8KIAlpZiAoZ2FkZ2V0X2lzX290ZyhjZGV2LT5nYWRnZXQpKSB7CiAJCWxvb3BiYWNrX2RyaXZlci5kZXNjcmlwdG9ycyA9IG90Z19kZXNjOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfb2JleC5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfb2JleC5jCmluZGV4IDM4YWE4OTYuLjQ2ZDYyNjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX29iZXguYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9vYmV4LmMKQEAgLTEyMyw3ICsxMjMsNyBAQAogCS5iTGVuZ3RoCQk9IHNpemVvZihvYmV4X2NkY19oZWFkZXJfZGVzYyksCiAJLmJEZXNjcmlwdG9yVHlwZQk9IFVTQl9EVF9DU19JTlRFUkZBQ0UsCiAJLmJEZXNjcmlwdG9yU3ViVHlwZQk9IFVTQl9DRENfSEVBREVSX1RZUEUsCi0JLmJjZENEQwkJCT0gX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAxMjApLAorCS5iY2RDREMJCQk9IGNwdV90b19sZTE2KDB4MDEyMCksCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9jZGNfdW5pb25fZGVzYyBvYmV4X2NkY191bmlvbl9kZXNjIF9faW5pdGRhdGEgPSB7CkBAIC0xMzgsNyArMTM4LDcgQEAKIAkuYkxlbmd0aAkJPSBzaXplb2Yob2JleF9kZXNjKSwKIAkuYkRlc2NyaXB0b3JUeXBlCT0gVVNCX0RUX0NTX0lOVEVSRkFDRSwKIAkuYkRlc2NyaXB0b3JTdWJUeXBlCT0gVVNCX0NEQ19PQkVYX1RZUEUsCi0JLmJjZFZlcnNpb24JCT0gX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAxMDApLAorCS5iY2RWZXJzaW9uCQk9IGNwdV90b19sZTE2KDB4MDEwMCksCiB9OwogCiAvKiBIaWdoLVNwZWVkIFN1cHBvcnQgKi8KQEAgLTE0OSw3ICsxNDksNyBAQAogCiAJLmJFbmRwb2ludEFkZHJlc3MJPSBVU0JfRElSX09VVCwKIAkuYm1BdHRyaWJ1dGVzCQk9IFVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCi0JLndNYXhQYWNrZXRTaXplCQk9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNTEyKSwKKwkud01heFBhY2tldFNpemUJCT0gY3B1X3RvX2xlMTYoNTEyKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3Igb2JleF9oc19lcF9pbl9kZXNjIF9faW5pdGRhdGEgPSB7CkBAIC0xNTgsNyArMTU4LDcgQEAKIAogCS5iRW5kcG9pbnRBZGRyZXNzCT0gVVNCX0RJUl9JTiwKIAkuYm1BdHRyaWJ1dGVzCQk9IFVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCi0JLndNYXhQYWNrZXRTaXplCQk9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNTEyKSwKKwkud01heFBhY2tldFNpemUJCT0gY3B1X3RvX2xlMTYoNTEyKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICpoc19mdW5jdGlvbltdIF9faW5pdGRhdGEgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9waG9uZXQuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX3Bob25ldC5jCmluZGV4IGMwOTE2YzcuLmMxYWJlYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX3Bob25ldC5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX3Bob25ldC5jCkBAIC03OSw3ICs3OSw3IEBACiAJLmJMZW5ndGggPQkJc2l6ZW9mIHBuX2hlYWRlcl9kZXNjLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfQ1NfSU5URVJGQUNFLAogCS5iRGVzY3JpcHRvclN1YlR5cGUgPQlVU0JfQ0RDX0hFQURFUl9UWVBFLAotCS5iY2RDREMgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAxMTApLAorCS5iY2RDREMgPQkJY3B1X3RvX2xlMTYoMHgwMTEwKSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2NkY19oZWFkZXJfZGVzYwpAQCAtODcsNyArODcsNyBAQAogCS5iTGVuZ3RoID0JCXNpemVvZiBwbl9waG9uZXRfZGVzYywKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0NTX0lOVEVSRkFDRSwKIAkuYkRlc2NyaXB0b3JTdWJUeXBlID0JVVNCX0NEQ19QSE9ORVRfVFlQRSwKLQkuYmNkQ0RDID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgxNTA1KSwgLyogPz8/ICovCisJLmJjZENEQyA9CQljcHVfdG9fbGUxNigweDE1MDUpLCAvKiA/Pz8gKi8KIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2NkY191bmlvbl9kZXNjCkBAIC0xMzgsNyArMTM4LDcgQEAKIAogCS5iRW5kcG9pbnRBZGRyZXNzID0JVVNCX0RJUl9PVVQsCiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAotCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNTEyKSwKKwkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNig1MTIpLAogfTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcgpAQCAtMTU3LDcgKzE1Nyw3IEBACiAKIAkuYkVuZHBvaW50QWRkcmVzcyA9CVVTQl9ESVJfSU4sCiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAotCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNTEyKSwKKwkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNig1MTIpLAogfTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKmZzX3BuX2Z1bmN0aW9uW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9ybmRpcy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfcm5kaXMuYwppbmRleCAzYThiYjUzLi4zMjc5YTQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9ybmRpcy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX3JuZGlzLmMKQEAgLTEzNyw3ICsxMzcsNyBAQAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfQ1NfSU5URVJGQUNFLAogCS5iRGVzY3JpcHRvclN1YlR5cGUgPQlVU0JfQ0RDX0hFQURFUl9UWVBFLAogCi0JLmJjZENEQyA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDExMCksCisJLmJjZENEQyA9CQljcHVfdG9fbGUxNigweDAxMTApLAogfTsKIAogc3RhdGljIHN0cnVjdCB1c2JfY2RjX2NhbGxfbWdtdF9kZXNjcmlwdG9yIGNhbGxfbWdtdF9kZXNjcmlwdG9yIF9faW5pdGRhdGEgPSB7CkBAIC0xODcsNyArMTg3LDcgQEAKIAogCS5iRW5kcG9pbnRBZGRyZXNzID0JVVNCX0RJUl9JTiwKIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0lOVCwKLQkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KFNUQVRVU19CWVRFQ09VTlQpLAorCS53TWF4UGFja2V0U2l6ZSA9CWNwdV90b19sZTE2KFNUQVRVU19CWVRFQ09VTlQpLAogCS5iSW50ZXJ2YWwgPQkJMSA8PCBMT0cyX1NUQVRVU19JTlRFUlZBTF9NU0VDLAogfTsKIApAQCAtMjMwLDcgKzIzMCw3IEBACiAKIAkuYkVuZHBvaW50QWRkcmVzcyA9CVVTQl9ESVJfSU4sCiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9JTlQsCi0JLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNihTVEFUVVNfQllURUNPVU5UKSwKKwkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNihTVEFUVVNfQllURUNPVU5UKSwKIAkuYkludGVydmFsID0JCUxPRzJfU1RBVFVTX0lOVEVSVkFMX01TRUMgKyA0LAogfTsKIHN0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgaHNfaW5fZGVzYyBfX2luaXRkYXRhID0gewpAQCAtMjM5LDcgKzIzOSw3IEBACiAKIAkuYkVuZHBvaW50QWRkcmVzcyA9CVVTQl9ESVJfSU4sCiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAotCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNTEyKSwKKwkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNig1MTIpLAogfTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBoc19vdXRfZGVzYyBfX2luaXRkYXRhID0gewpAQCAtMjQ4LDcgKzI0OCw3IEBACiAKIAkuYkVuZHBvaW50QWRkcmVzcyA9CVVTQl9ESVJfT1VULAogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKLQkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDUxMiksCisJLndNYXhQYWNrZXRTaXplID0JY3B1X3RvX2xlMTYoNTEyKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICpldGhfaHNfZnVuY3Rpb25bXSBfX2luaXRkYXRhID0gewpAQCAtNDM3LDcgKzQzNyw3IEBACiAJCURCRyhjZGV2LCAicm5kaXMgcmVxJTAyeC4lMDJ4IHYlMDR4IGklMDR4IGwlZFxuIiwKIAkJCWN0cmwtPmJSZXF1ZXN0VHlwZSwgY3RybC0+YlJlcXVlc3QsCiAJCQl3X3ZhbHVlLCB3X2luZGV4LCB3X2xlbmd0aCk7Ci0JCXJlcS0+emVybyA9IDA7CisJCXJlcS0+emVybyA9ICh2YWx1ZSA8IHdfbGVuZ3RoKTsKIAkJcmVxLT5sZW5ndGggPSB2YWx1ZTsKIAkJdmFsdWUgPSB1c2JfZXBfcXVldWUoY2Rldi0+Z2FkZ2V0LT5lcDAsIHJlcSwgR0ZQX0FUT01JQyk7CiAJCWlmICh2YWx1ZSA8IDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9zZXJpYWwuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX3NlcmlhbC5jCmluZGV4IGZlNTY3NGRiLi5kYjBhYTkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9zZXJpYWwuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9zZXJpYWwuYwpAQCAtODksMTQgKzg5LDE0IEBACiAJLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCi0JLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNig1MTIpLAorCS53TWF4UGFja2V0U2l6ZSA9CWNwdV90b19sZTE2KDUxMiksCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGdzZXJfaHNfb3V0X2Rlc2MgX19pbml0ZGF0YSA9IHsKIAkuYkxlbmd0aCA9CQlVU0JfRFRfRU5EUE9JTlRfU0laRSwKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKLQkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDUxMiksCisJLndNYXhQYWNrZXRTaXplID0JY3B1X3RvX2xlMTYoNTEyKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICpnc2VyX2hzX2Z1bmN0aW9uW10gX19pbml0ZGF0YSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX3NvdXJjZXNpbmsuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX3NvdXJjZXNpbmsuYwppbmRleCBkYzg0ZDI2Li5iZmZlOTFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9zb3VyY2VzaW5rLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfc291cmNlc2luay5jCkBAIC01OSw3ICs1OSw2IEBACiAKIAlzdHJ1Y3QgdXNiX2VwCQkqaW5fZXA7CiAJc3RydWN0IHVzYl9lcAkJKm91dF9lcDsKLQlzdHJ1Y3QgdGltZXJfbGlzdAlyZXN1bWU7CiB9OwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBmX3NvdXJjZXNpbmsgKmZ1bmNfdG9fc3Moc3RydWN0IHVzYl9mdW5jdGlvbiAqZikKQEAgLTY3LDEwICs2Niw2IEBACiAJcmV0dXJuIGNvbnRhaW5lcl9vZihmLCBzdHJ1Y3QgZl9zb3VyY2VzaW5rLCBmdW5jdGlvbik7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBhdXRvcmVzdW1lOwotbW9kdWxlX3BhcmFtKGF1dG9yZXN1bWUsIHVpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhhdXRvcmVzdW1lLCAiemVybywgb3Igc2Vjb25kcyBiZWZvcmUgcmVtb3RlIHdha2V1cCIpOwotCiBzdGF0aWMgdW5zaWduZWQgcGF0dGVybjsKIG1vZHVsZV9wYXJhbShwYXR0ZXJuLCB1aW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MocGF0dGVybiwgIjAgPSBhbGwgemVyb2VzLCAxID0gbW9kNjMgIik7CkBAIC0xMTgsNyArMTEzLDcgQEAKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAogCiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAotCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNTEyKSwKKwkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNig1MTIpLAogfTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBoc19zaW5rX2Rlc2MgPSB7CkBAIC0xMjYsNyArMTIxLDcgQEAKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAogCiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAotCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNTEyKSwKKwkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNig1MTIpLAogfTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKmhzX3NvdXJjZV9zaW5rX2Rlc2NzW10gPSB7CkBAIC0xNTUsMjEgKzE1MCw2IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyB2b2lkIHNvdXJjZXNpbmtfYXV0b3Jlc3VtZSh1bnNpZ25lZCBsb25nIF9jKQotewotCXN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldiA9ICh2b2lkICopX2M7Ci0Jc3RydWN0IHVzYl9nYWRnZXQJKmcgPSBjZGV2LT5nYWRnZXQ7Ci0KLQkvKiBOb3JtYWxseSB0aGUgaG9zdCB3b3VsZCBiZSB3b2tlbiB1cCBmb3Igc29tZXRoaW5nCi0JICogbW9yZSBzaWduaWZpY2FudCB0aGFuIGp1c3QgYSB0aW1lciBmaXJpbmc7IGxpa2VseQotCSAqIGJlY2F1c2Ugb2Ygc29tZSBkaXJlY3QgdXNlciByZXF1ZXN0LgotCSAqLwotCWlmIChnLT5zcGVlZCAhPSBVU0JfU1BFRURfVU5LTk9XTikgewotCQlpbnQgc3RhdHVzID0gdXNiX2dhZGdldF93YWtldXAoZyk7Ci0JCURCRyhjZGV2LCAiJXMgLS0+ICVkXG4iLCBfX2Z1bmNfXywgc3RhdHVzKTsKLQl9Ci19Ci0KIHN0YXRpYyBpbnQgX19pbml0CiBzb3VyY2VzaW5rX2JpbmQoc3RydWN0IHVzYl9jb25maWd1cmF0aW9uICpjLCBzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpmKQogewpAQCAtMTk4LDkgKzE3OCw2IEBACiAJCWdvdG8gYXV0b2NvbmZfZmFpbDsKIAlzcy0+b3V0X2VwLT5kcml2ZXJfZGF0YSA9IGNkZXY7CS8qIGNsYWltICovCiAKLQlzZXR1cF90aW1lcigmc3MtPnJlc3VtZSwgc291cmNlc2lua19hdXRvcmVzdW1lLAotCQkJKHVuc2lnbmVkIGxvbmcpIGMtPmNkZXYpOwotCiAJLyogc3VwcG9ydCBoaWdoIHNwZWVkIGhhcmR3YXJlICovCiAJaWYgKGdhZGdldF9pc19kdWFsc3BlZWQoYy0+Y2Rldi0+Z2FkZ2V0KSkgewogCQloc19zb3VyY2VfZGVzYy5iRW5kcG9pbnRBZGRyZXNzID0KQEAgLTM1OSw3ICszMzYsNiBAQAogCiAJY2RldiA9IHNzLT5mdW5jdGlvbi5jb25maWctPmNkZXY7CiAJZGlzYWJsZV9lbmRwb2ludHMoY2Rldiwgc3MtPmluX2VwLCBzcy0+b3V0X2VwKTsKLQlkZWxfdGltZXIoJnNzLT5yZXN1bWUpOwogCVZEQkcoY2RldiwgIiVzIGRpc2FibGVkXG4iLCBzcy0+ZnVuY3Rpb24ubmFtZSk7CiB9CiAKQEAgLTQyNiwzMCArNDAyLDYgQEAKIAlkaXNhYmxlX3NvdXJjZV9zaW5rKHNzKTsKIH0KIAotc3RhdGljIHZvaWQgc291cmNlc2lua19zdXNwZW5kKHN0cnVjdCB1c2JfZnVuY3Rpb24gKmYpCi17Ci0Jc3RydWN0IGZfc291cmNlc2luawkqc3MgPSBmdW5jX3RvX3NzKGYpOwotCXN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldiA9IGYtPmNvbmZpZy0+Y2RldjsKLQotCWlmIChjZGV2LT5nYWRnZXQtPnNwZWVkID09IFVTQl9TUEVFRF9VTktOT1dOKQotCQlyZXR1cm47Ci0KLQlpZiAoYXV0b3Jlc3VtZSkgewotCQltb2RfdGltZXIoJnNzLT5yZXN1bWUsIGppZmZpZXMgKyAoSFogKiBhdXRvcmVzdW1lKSk7Ci0JCURCRyhjZGV2LCAic3VzcGVuZCwgd2FrZXVwIGluICVkIHNlY29uZHNcbiIsIGF1dG9yZXN1bWUpOwotCX0gZWxzZQotCQlEQkcoY2RldiwgIiVzXG4iLCBfX2Z1bmNfXyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNvdXJjZXNpbmtfcmVzdW1lKHN0cnVjdCB1c2JfZnVuY3Rpb24gKmYpCi17Ci0Jc3RydWN0IGZfc291cmNlc2luawkqc3MgPSBmdW5jX3RvX3NzKGYpOwotCXN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldiA9IGYtPmNvbmZpZy0+Y2RldjsKLQotCURCRyhjZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKLQlkZWxfdGltZXIoJnNzLT5yZXN1bWUpOwotfQotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiBzdGF0aWMgaW50IF9faW5pdCBzb3VyY2VzaW5rX2JpbmRfY29uZmlnKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqYykKQEAgLTQ2Nyw4ICs0MTksNiBAQAogCXNzLT5mdW5jdGlvbi51bmJpbmQgPSBzb3VyY2VzaW5rX3VuYmluZDsKIAlzcy0+ZnVuY3Rpb24uc2V0X2FsdCA9IHNvdXJjZXNpbmtfc2V0X2FsdDsKIAlzcy0+ZnVuY3Rpb24uZGlzYWJsZSA9IHNvdXJjZXNpbmtfZGlzYWJsZTsKLQlzcy0+ZnVuY3Rpb24uc3VzcGVuZCA9IHNvdXJjZXNpbmtfc3VzcGVuZDsKLQlzcy0+ZnVuY3Rpb24ucmVzdW1lID0gc291cmNlc2lua19yZXN1bWU7CiAKIAlzdGF0dXMgPSB1c2JfYWRkX2Z1bmN0aW9uKGMsICZzcy0+ZnVuY3Rpb24pOwogCWlmIChzdGF0dXMpCkBAIC01NTksNyArNTA5LDcgQEAKICAqIHNvdXJjZXNpbmtfYWRkIC0gYWRkIGEgc291cmNlL3NpbmsgdGVzdGluZyBjb25maWd1cmF0aW9uIHRvIGEgZGV2aWNlCiAgKiBAY2RldjogdGhlIGRldmljZSB0byBzdXBwb3J0IHRoZSBjb25maWd1cmF0aW9uCiAgKi8KLWludCBfX2luaXQgc291cmNlc2lua19hZGQoc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2KQoraW50IF9faW5pdCBzb3VyY2VzaW5rX2FkZChzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYsIGJvb2wgYXV0b3Jlc3VtZSkKIHsKIAlpbnQgaWQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX3N1YnNldC5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfc3Vic2V0LmMKaW5kZXggZmUxODMyOC4uYTljOThmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfc3Vic2V0LmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfc3Vic2V0LmMKQEAgLTEwOCw3ICsxMDgsNyBAQAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfQ1NfSU5URVJGQUNFLAogCS5iRGVzY3JpcHRvclN1YlR5cGUgPQlVU0JfQ0RDX0hFQURFUl9UWVBFLAogCi0JLmJjZENEQyA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDExMCksCisJLmJjZENEQyA9CQljcHVfdG9fbGUxNigweDAxMTApLAogfTsKIAogc3RhdGljIHN0cnVjdCB1c2JfY2RjX21kbG1fZGVzYyBtZGxtX2Rlc2MgX19pbml0ZGF0YSA9IHsKQEAgLTExNiw3ICsxMTYsNyBAQAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfQ1NfSU5URVJGQUNFLAogCS5iRGVzY3JpcHRvclN1YlR5cGUgPQlVU0JfQ0RDX01ETE1fVFlQRSwKIAotCS5iY2RWZXJzaW9uID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMTAwKSwKKwkuYmNkVmVyc2lvbiA9CQljcHVfdG9fbGUxNigweDAxMDApLAogCS5iR1VJRCA9IHsKIAkJMHg1ZCwgMHgzNCwgMHhjZiwgMHg2NiwgMHgxMSwgMHgxOCwgMHgxMSwgMHhkNiwKIAkJMHhhMiwgMHgxYSwgMHgwMCwgMHgwMSwgMHgwMiwgMHhjYSwgMHg5YSwgMHg3ZiwKQEAgLTE0NCw5ICsxNDQsOSBAQAogCiAJLyogdGhpcyBkZXNjcmlwdG9yIGFjdHVhbGx5IGFkZHMgdmFsdWUsIHN1cnByaXNlISAqLwogCS8qIC5pTUFDQWRkcmVzcyA9IERZTkFNSUMgKi8KLQkuYm1FdGhlcm5ldFN0YXRpc3RpY3MgPQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDApLCAvKiBubyBzdGF0aXN0aWNzICovCi0JLndNYXhTZWdtZW50U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoRVRIX0ZSQU1FX0xFTiksCi0JLndOdW1iZXJNQ0ZpbHRlcnMgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDApLAorCS5ibUV0aGVybmV0U3RhdGlzdGljcyA9CWNwdV90b19sZTMyKDApLCAvKiBubyBzdGF0aXN0aWNzICovCisJLndNYXhTZWdtZW50U2l6ZSA9CWNwdV90b19sZTE2KEVUSF9GUkFNRV9MRU4pLAorCS53TnVtYmVyTUNGaWx0ZXJzID0JY3B1X3RvX2xlMTYoMCksCiAJLmJOdW1iZXJQb3dlckZpbHRlcnMgPQkwLAogfTsKIApAQCAtMTg2LDcgKzE4Niw3IEBACiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKIAogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKLQkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDUxMiksCisJLndNYXhQYWNrZXRTaXplID0JY3B1X3RvX2xlMTYoNTEyKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgaHNfc3Vic2V0X291dF9kZXNjIF9faW5pdGRhdGEgPSB7CkBAIC0xOTQsNyArMTk0LDcgQEAKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAogCiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAotCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNTEyKSwKKwkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNig1MTIpLAogfTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKmhzX2V0aF9mdW5jdGlvbltdIF9faW5pdGRhdGEgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZmlsZV9zdG9yYWdlLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZmlsZV9zdG9yYWdlLmMKaW5kZXggMWFiOWRhYy4uNWMwMzBiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZpbGVfc3RvcmFnZS5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9maWxlX3N0b3JhZ2UuYwpAQCAtODQ3LDEzICs4NDcsMTMgQEAKIAkuYkxlbmd0aCA9CQlzaXplb2YgZGV2aWNlX2Rlc2MsCiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9ERVZJQ0UsCiAKLQkuYmNkVVNCID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMjAwKSwKKwkuYmNkVVNCID0JCWNwdV90b19sZTE2KDB4MDIwMCksCiAJLmJEZXZpY2VDbGFzcyA9CQlVU0JfQ0xBU1NfUEVSX0lOVEVSRkFDRSwKIAogCS8qIFRoZSBuZXh0IHRocmVlIHZhbHVlcyBjYW4gYmUgb3ZlcnJpZGRlbiBieSBtb2R1bGUgcGFyYW1ldGVycyAqLwotCS5pZFZlbmRvciA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KERSSVZFUl9WRU5ET1JfSUQpLAotCS5pZFByb2R1Y3QgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihEUklWRVJfUFJPRFVDVF9JRCksCi0JLmJjZERldmljZSA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4ZmZmZiksCisJLmlkVmVuZG9yID0JCWNwdV90b19sZTE2KERSSVZFUl9WRU5ET1JfSUQpLAorCS5pZFByb2R1Y3QgPQkJY3B1X3RvX2xlMTYoRFJJVkVSX1BST0RVQ1RfSUQpLAorCS5iY2REZXZpY2UgPQkJY3B1X3RvX2xlMTYoMHhmZmZmKSwKIAogCS5pTWFudWZhY3R1cmVyID0JU1RSSU5HX01BTlVGQUNUVVJFUiwKIAkuaVByb2R1Y3QgPQkJU1RSSU5HX1BST0RVQ1QsCkBAIC05MjYsNyArOTI2LDcgQEAKIAogCS5iRW5kcG9pbnRBZGRyZXNzID0JVVNCX0RJUl9JTiwKIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0lOVCwKLQkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDIpLAorCS53TWF4UGFja2V0U2l6ZSA9CWNwdV90b19sZTE2KDIpLAogCS5iSW50ZXJ2YWwgPQkJMzIsCS8vIGZyYW1lcyAtPiAzMiBtcwogfTsKIApAQCAtOTU0LDcgKzk1NCw3IEBACiAJLmJMZW5ndGggPQkJc2l6ZW9mIGRldl9xdWFsaWZpZXIsCiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9ERVZJQ0VfUVVBTElGSUVSLAogCi0JLmJjZFVTQiA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDIwMCksCisJLmJjZFVTQiA9CQljcHVfdG9fbGUxNigweDAyMDApLAogCS5iRGV2aWNlQ2xhc3MgPQkJVVNCX0NMQVNTX1BFUl9JTlRFUkZBQ0UsCiAKIAkuYk51bUNvbmZpZ3VyYXRpb25zID0JMSwKQEAgLTk2Nyw3ICs5NjcsNyBAQAogCiAJLyogYkVuZHBvaW50QWRkcmVzcyBjb3BpZWQgZnJvbSBmc19idWxrX2luX2Rlc2MgZHVyaW5nIGZzZ19iaW5kKCkgKi8KIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCi0JLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNig1MTIpLAorCS53TWF4UGFja2V0U2l6ZSA9CWNwdV90b19sZTE2KDUxMiksCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yCkBAIC05NzcsNyArOTc3LDcgQEAKIAogCS8qIGJFbmRwb2ludEFkZHJlc3MgY29waWVkIGZyb20gZnNfYnVsa19vdXRfZGVzYyBkdXJpbmcgZnNnX2JpbmQoKSAqLwogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKLQkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDUxMiksCisJLndNYXhQYWNrZXRTaXplID0JY3B1X3RvX2xlMTYoNTEyKSwKIAkuYkludGVydmFsID0JCTEsCS8vIE5BSyBldmVyeSAxIHVmcmFtZQogfTsKIApAQCAtOTg4LDcgKzk4OCw3IEBACiAKIAkvKiBiRW5kcG9pbnRBZGRyZXNzIGNvcGllZCBmcm9tIGZzX2ludHJfaW5fZGVzYyBkdXJpbmcgZnNnX2JpbmQoKSAqLwogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfSU5ULAotCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMiksCisJLndNYXhQYWNrZXRTaXplID0JY3B1X3RvX2xlMTYoMiksCiAJLmJJbnRlcnZhbCA9CQk5LAkvLyAyKiooOS0xKSA9IDI1NiB1ZnJhbWVzIC0+IDMyIG1zCiB9OwogCkBAIC0xNzExLDcgKzE3MTEsOSBAQAogCQljdXJsdW4tPnNlbnNlX2RhdGEgPSBTU19XUklURV9QUk9URUNURUQ7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KKwlzcGluX2xvY2soJmN1cmx1bi0+ZmlscC0+Zl9sb2NrKTsKIAljdXJsdW4tPmZpbHAtPmZfZmxhZ3MgJj0gfk9fU1lOQzsJLy8gRGVmYXVsdCBpcyBub3QgdG8gd2FpdAorCXNwaW5fdW5sb2NrKCZjdXJsdW4tPmZpbHAtPmZfbG9jayk7CiAKIAkvKiBHZXQgdGhlIHN0YXJ0aW5nIExvZ2ljYWwgQmxvY2sgQWRkcmVzcyBhbmQgY2hlY2sgdGhhdCBpdCdzCiAJICogbm90IHRvbyBiaWcgKi8KQEAgLTE3MjgsOCArMTczMCwxMSBAQAogCQkJY3VybHVuLT5zZW5zZV9kYXRhID0gU1NfSU5WQUxJRF9GSUVMRF9JTl9DREI7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCQlpZiAoZnNnLT5jbW5kWzFdICYgMHgwOCkJLy8gRlVBCisJCWlmIChmc2ctPmNtbmRbMV0gJiAweDA4KSB7CS8vIEZVQQorCQkJc3Bpbl9sb2NrKCZjdXJsdW4tPmZpbHAtPmZfbG9jayk7CiAJCQljdXJsdW4tPmZpbHAtPmZfZmxhZ3MgfD0gT19TWU5DOworCQkJc3Bpbl91bmxvY2soJmN1cmx1bi0+ZmlscC0+Zl9sb2NrKTsKKwkJfQogCX0KIAlpZiAobGJhID49IGN1cmx1bi0+bnVtX3NlY3RvcnMpIHsKIAkJY3VybHVuLT5zZW5zZV9kYXRhID0gU1NfTE9HSUNBTF9CTE9DS19BRERSRVNTX09VVF9PRl9SQU5HRTsKQEAgLTI2NDYsNyArMjY1MSw3IEBACiAJCXN0cnVjdCBidWxrX2NzX3dyYXAJKmNzdyA9IGJoLT5idWY7CiAKIAkJLyogU3RvcmUgYW5kIHNlbmQgdGhlIEJ1bGstb25seSBDU1cgKi8KLQkJY3N3LT5TaWduYXR1cmUgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyKFVTQl9CVUxLX0NTX1NJRyk7CisJCWNzdy0+U2lnbmF0dXJlID0gY3B1X3RvX2xlMzIoVVNCX0JVTEtfQ1NfU0lHKTsKIAkJY3N3LT5UYWcgPSBmc2ctPnRhZzsKIAkJY3N3LT5SZXNpZHVlID0gY3B1X3RvX2xlMzIoZnNnLT5yZXNpZHVlKTsKIAkJY3N3LT5TdGF0dXMgPSBzdGF0dXM7CkBAIC0zMDg5LDcgKzMwOTQsNyBAQAogCiAJLyogSXMgdGhlIENCVyB2YWxpZD8gKi8KIAlpZiAocmVxLT5hY3R1YWwgIT0gVVNCX0JVTEtfQ0JfV1JBUF9MRU4gfHwKLQkJCWNidy0+U2lnbmF0dXJlICE9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoCisJCQljYnctPlNpZ25hdHVyZSAhPSBjcHVfdG9fbGUzMigKIAkJCQlVU0JfQlVMS19DQl9TSUcpKSB7CiAJCURCRyhmc2csICJpbnZhbGlkIENCVzogbGVuICV1IHNpZyAweCV4XG4iLAogCQkJCXJlcS0+YWN0dWFsLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbF91c2IyX3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbF91c2IyX3VkYy5jCmluZGV4IGQ4ZDlhNTIuLjlkN2I5NWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfdXNiMl91ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3VzYjJfdWRjLmMKQEAgLTE4MDIsNyArMTgwMiw4IEBACiAKIG91dDoKIAlpZiAocmV0dmFsKQotCQlwcmludGsoImdhZGdldCBkcml2ZXIgcmVnaXN0ZXIgZmFpbGVkICVkXG4iLCByZXR2YWwpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJnYWRnZXQgZHJpdmVyIHJlZ2lzdGVyIGZhaWxlZCAlZFxuIiwKKwkJICAgICAgIHJldHZhbCk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIEVYUE9SVF9TWU1CT0wodXNiX2dhZGdldF9yZWdpc3Rlcl9kcml2ZXIpOwpAQCAtMTg0Nyw3ICsxODQ4LDggQEAKIAl1ZGNfY29udHJvbGxlci0+Z2FkZ2V0LmRldi5kcml2ZXIgPSBOVUxMOwogCXVkY19jb250cm9sbGVyLT5kcml2ZXIgPSBOVUxMOwogCi0JcHJpbnRrKCJ1bnJlZ2lzdGVyZWQgZ2FkZ2V0IGRyaXZlciAnJXMnXG4iLCBkcml2ZXItPmRyaXZlci5uYW1lKTsKKwlwcmludGsoS0VSTl9XQVJOSU5HICJ1bnJlZ2lzdGVyZWQgZ2FkZ2V0IGRyaXZlciAnJXMnXG4iLAorCSAgICAgICBkcml2ZXItPmRyaXZlci5uYW1lKTsKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0wodXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcik7CkBAIC0yNDU1LDcgKzI0NTcsNyBAQAogc3RhdGljIHZvaWQgX19leGl0IHVkY19leGl0KHZvaWQpCiB7CiAJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnVkY19kcml2ZXIpOwotCXByaW50aygiJXMgdW5yZWdpc3RlcmVkXG4iLCBkcml2ZXJfZGVzYyk7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiJXMgdW5yZWdpc3RlcmVkXG4iLCBkcml2ZXJfZGVzYyk7CiB9CiAKIG1vZHVsZV9leGl0KHVkY19leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9nX3plcm8uaCBiL2RyaXZlcnMvdXNiL2dhZGdldC9nX3plcm8uaAppbmRleCBkZDJmMTZhLi5lODRiM2M0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZ196ZXJvLmgKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2dfemVyby5oCkBAIC0xOSw3ICsxOSw3IEBACiAJCXN0cnVjdCB1c2JfZXAgKmluLCBzdHJ1Y3QgdXNiX2VwICpvdXQpOwogCiAvKiBjb25maWd1cmF0aW9uLXNwZWNpZmljIGxpbmt1cCAqLwotaW50IHNvdXJjZXNpbmtfYWRkKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2Rldik7Ci1pbnQgbG9vcGJhY2tfYWRkKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2Rldik7CitpbnQgc291cmNlc2lua19hZGQoc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2LCBib29sIGF1dG9yZXN1bWUpOworaW50IGxvb3BiYWNrX2FkZChzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYsIGJvb2wgYXV0b3Jlc3VtZSk7CiAKICNlbmRpZiAvKiBfX0dfWkVST19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZ21pZGkuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9nbWlkaS5jCmluZGV4IDYwZDNmOWUuLmI5MzEyZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9nbWlkaS5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9nbWlkaS5jCkBAIC0xOTksMTAgKzE5OSwxMCBAQAogc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2Rlc2NyaXB0b3IgZGV2aWNlX2Rlc2MgPSB7CiAJLmJMZW5ndGggPQkJVVNCX0RUX0RFVklDRV9TSVpFLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfREVWSUNFLAotCS5iY2RVU0IgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAyMDApLAorCS5iY2RVU0IgPQkJY3B1X3RvX2xlMTYoMHgwMjAwKSwKIAkuYkRldmljZUNsYXNzID0JCVVTQl9DTEFTU19QRVJfSU5URVJGQUNFLAotCS5pZFZlbmRvciA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KERSSVZFUl9WRU5ET1JfTlVNKSwKLQkuaWRQcm9kdWN0ID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoRFJJVkVSX1BST0RVQ1RfTlVNKSwKKwkuaWRWZW5kb3IgPQkJY3B1X3RvX2xlMTYoRFJJVkVSX1ZFTkRPUl9OVU0pLAorCS5pZFByb2R1Y3QgPQkJY3B1X3RvX2xlMTYoRFJJVkVSX1BST0RVQ1RfTlVNKSwKIAkuaU1hbnVmYWN0dXJlciA9CVNUUklOR19NQU5VRkFDVFVSRVIsCiAJLmlQcm9kdWN0ID0JCVNUUklOR19QUk9EVUNULAogCS5iTnVtQ29uZmlndXJhdGlvbnMgPQkxLApAQCAtMjQxLDggKzI0MSw4IEBACiAJLmJMZW5ndGggPQkJVVNCX0RUX0FDX0hFQURFUl9TSVpFKDEpLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfQ1NfSU5URVJGQUNFLAogCS5iRGVzY3JpcHRvclN1YnR5cGUgPQlVU0JfTVNfSEVBREVSLAotCS5iY2RBREMgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAxMDApLAotCS53VG90YWxMZW5ndGggPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihVU0JfRFRfQUNfSEVBREVSX1NJWkUoMSkpLAorCS5iY2RBREMgPQkJY3B1X3RvX2xlMTYoMHgwMTAwKSwKKwkud1RvdGFsTGVuZ3RoID0JCWNwdV90b19sZTE2KFVTQl9EVF9BQ19IRUFERVJfU0laRSgxKSksCiAJLmJJbkNvbGxlY3Rpb24gPQkxLAogCS5iYUludGVyZmFjZU5yID0gewogCQlbMF0gPQkJR01JRElfTVNfSU5URVJGQUNFLApAQCAtMjY1LDggKzI2NSw4IEBACiAJLmJMZW5ndGggPQkJVVNCX0RUX01TX0hFQURFUl9TSVpFLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfQ1NfSU5URVJGQUNFLAogCS5iRGVzY3JpcHRvclN1YnR5cGUgPQlVU0JfTVNfSEVBREVSLAotCS5iY2RNU0MgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAxMDApLAotCS53VG90YWxMZW5ndGggPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihVU0JfRFRfTVNfSEVBREVSX1NJWkUKKwkuYmNkTVNDID0JCWNwdV90b19sZTE2KDB4MDEwMCksCisJLndUb3RhbExlbmd0aCA9CQljcHVfdG9fbGUxNihVU0JfRFRfTVNfSEVBREVSX1NJWkUKIAkJCQkrIDIqVVNCX0RUX01JRElfSU5fU0laRQogCQkJCSsgMipVU0JfRFRfTUlESV9PVVRfU0laRSgxKSksCiB9OwpAQCAtMTA5OSwxMCArMTA5OSw5IEBACiAJCS5kZXZfZnJlZSA9IGdtaWRpX3NuZF9mcmVlLAogCX07CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIDApOwotCWlmICghY2FyZCkgewotCQlFUlJPUihkZXYsICJzbmRfY2FyZF9uZXcgZmFpbGVkXG4iKTsKLQkJZXJyID0gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKSB7CisJCUVSUk9SKGRldiwgInNuZF9jYXJkX2NyZWF0ZSBmYWlsZWRcbiIpOwogCQlnb3RvIGZhaWw7CiAJfQogCWRldi0+Y2FyZCA9IGNhcmQ7CkBAIC0xMjI3LDcgKzEyMjYsNyBAQAogCQkgKi8KIAkJcHJfd2FybmluZygiJXM6IGNvbnRyb2xsZXIgJyVzJyBub3QgcmVjb2duaXplZFxuIiwKIAkJCXNob3J0bmFtZSwgZ2FkZ2V0LT5uYW1lKTsKLQkJZGV2aWNlX2Rlc2MuYmNkRGV2aWNlID0gX19jb25zdGFudF9jcHVfdG9fbGUxNigweDk5OTkpOworCQlkZXZpY2VfZGVzYy5iY2REZXZpY2UgPSBjcHVfdG9fbGUxNigweDk5OTkpOwogCX0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZ29rdV91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9nb2t1X3VkYy5jCmluZGV4IDYzNDE5YzQuLmRlMDEwYzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9nb2t1X3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9nb2t1X3VkYy5jCkBAIC0xNDcyLDcgKzE0NzIsNyBAQAogCQkJCS8qIGFjdGl2ZSBlbmRwb2ludCAqLwogCQkJCWlmICh0bXAgPiAzIHx8ICghZGV2LT5lcFt0bXBdLmRlc2MgJiYgdG1wICE9IDApKQogCQkJCQlnb3RvIHN0YWxsOwotCQkJCWlmIChjdHJsLndJbmRleCAmIF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoCisJCQkJaWYgKGN0cmwud0luZGV4ICYgY3B1X3RvX2xlMTYoCiAJCQkJCQlVU0JfRElSX0lOKSkgewogCQkJCQlpZiAoIWRldi0+ZXBbdG1wXS5pc19pbikKIAkJCQkJCWdvdG8gc3RhbGw7CkBAIC0xNDgwLDcgKzE0ODAsNyBAQAogCQkJCQlpZiAoZGV2LT5lcFt0bXBdLmlzX2luKQogCQkJCQkJZ290byBzdGFsbDsKIAkJCQl9Ci0JCQkJaWYgKGN0cmwud1ZhbHVlICE9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoCisJCQkJaWYgKGN0cmwud1ZhbHVlICE9IGNwdV90b19sZTE2KAogCQkJCQkJVVNCX0VORFBPSU5UX0hBTFQpKQogCQkJCQlnb3RvIHN0YWxsOwogCQkJCWlmICh0bXApCkBAIC0xNDkzLDcgKzE0OTMsNyBAQAogCQkJCXJldHVybjsKIAkJCWNhc2UgVVNCX1JFQ0lQX0RFVklDRToKIAkJCQkvKiBkZXZpY2UgcmVtb3RlIHdha2V1cDogYWx3YXlzIGNsZWFyICovCi0JCQkJaWYgKGN0cmwud1ZhbHVlICE9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMSkpCisJCQkJaWYgKGN0cmwud1ZhbHVlICE9IGNwdV90b19sZTE2KDEpKQogCQkJCQlnb3RvIHN0YWxsOwogCQkJCVZEQkcoZGV2LCAiY2xlYXIgZGV2IHJlbW90ZSB3YWtldXBcbiIpOwogCQkJCWdvdG8gc3VjY2VlZDsKQEAgLTE1MTksNyArMTUxOSw3IEBACiAJZGV2LT5yZXFfY29uZmlnID0gKGN0cmwuYlJlcXVlc3QgPT0gVVNCX1JFUV9TRVRfQ09ORklHVVJBVElPTgogCQkJCSYmIGN0cmwuYlJlcXVlc3RUeXBlID09IFVTQl9SRUNJUF9ERVZJQ0UpOwogCWlmICh1bmxpa2VseShkZXYtPnJlcV9jb25maWcpKQotCQlkZXYtPmNvbmZpZ3VyZWQgPSAoY3RybC53VmFsdWUgIT0gX19jb25zdGFudF9jcHVfdG9fbGUxNigwKSk7CisJCWRldi0+Y29uZmlndXJlZCA9IChjdHJsLndWYWx1ZSAhPSBjcHVfdG9fbGUxNigwKSk7CiAKIAkvKiBkZWxlZ2F0ZSBldmVyeXRoaW5nIHRvIHRoZSBnYWRnZXQgZHJpdmVyLgogCSAqIGl0IG1heSByZXNwb25kIGFmdGVyIHRoaXMgaXJxIGhhbmRsZXIgcmV0dXJucy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9pbXhfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvaW14X3VkYy5jCmluZGV4IDc3YzVkMGEuLjE2ODY1OGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9pbXhfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2lteF91ZGMuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKglkcml2ZXIvdXNiL2dhZGdldC9pbXhfdWRjLmMKICAqCi0gKglDb3B5cmlnaHQgKEMpIDIwMDUgTWlrZSBMZWUoZWVtaWtlQGdtYWlsLmNvbSkKKyAqCUNvcHlyaWdodCAoQykgMjAwNSBNaWtlIExlZSA8ZWVtaWtlQGdtYWlsLmNvbT4KICAqCUNvcHlyaWdodCAoQykgMjAwOCBEYXJpdXMgQXVndWxpcyA8YXVndWxpcy5kYXJpdXNAZ21haWwuY29tPgogICoKICAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAKICNpbmNsdWRlIDxsaW51eC91c2IvY2g5Lmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL2dhZGdldC5oPgpAQCAtNTEsNyArNTIsOCBAQAogdm9pZCBpbXhfdWRjX2VuYWJsZShzdHJ1Y3QgaW14X3VkY19zdHJ1Y3QgKmlteF91c2IpCiB7CiAJaW50IHRlbXAgPSBfX3Jhd19yZWFkbChpbXhfdXNiLT5iYXNlICsgVVNCX0NUUkwpOwotCV9fcmF3X3dyaXRlbCh0ZW1wIHwgQ1RSTF9GRV9FTkEgfCBDVFJMX0FGRV9FTkEsIGlteF91c2ItPmJhc2UgKyBVU0JfQ1RSTCk7CisJX19yYXdfd3JpdGVsKHRlbXAgfCBDVFJMX0ZFX0VOQSB8IENUUkxfQUZFX0VOQSwKKwkJCQkJCWlteF91c2ItPmJhc2UgKyBVU0JfQ1RSTCk7CiAJaW14X3VzYi0+Z2FkZ2V0LnNwZWVkID0gVVNCX1NQRUVEX0ZVTEw7CiB9CiAKQEAgLTEyNiw3ICsxMjgsOCBAQAogCQkJZm9yIChqID0gMDsgaiA8IDU7IGorKykgewogCQkJCV9fcmF3X3dyaXRlYihlcF9jb25mW2pdLAogCQkJCQlpbXhfdXNiLT5iYXNlICsgVVNCX0REQVQpOwotCQkJCWRvIHt9IHdoaWxlIChfX3Jhd19yZWFkbChpbXhfdXNiLT5iYXNlICsgVVNCX0RBRFIpCisJCQkJZG8ge30gd2hpbGUgKF9fcmF3X3JlYWRsKGlteF91c2ItPmJhc2UKKwkJCQkJCQkJKyBVU0JfREFEUikKIAkJCQkJJiBEQURSX0JTWSk7CiAJCQl9CiAJCX0KQEAgLTE4Myw3ICsxODYsOCBAQAogCQl0ZW1wID0gKEVQX0RJUihpbXhfZXApIDw8IDcpIHwgKG1heCA8PCA1KQogCQkJfCAoaW14X2VwLT5ibUF0dHJpYnV0ZXMgPDwgMyk7CiAJCV9fcmF3X3dyaXRlbCh0ZW1wLCBpbXhfdXNiLT5iYXNlICsgVVNCX0VQX1NUQVQoaSkpOwotCQlfX3Jhd193cml0ZWwodGVtcCB8IEVQU1RBVF9GTFVTSCwgaW14X3VzYi0+YmFzZSArIFVTQl9FUF9TVEFUKGkpKTsKKwkJX19yYXdfd3JpdGVsKHRlbXAgfCBFUFNUQVRfRkxVU0gsCisJCQkJCQlpbXhfdXNiLT5iYXNlICsgVVNCX0VQX1NUQVQoaSkpOwogCQlEX0lOSShpbXhfdXNiLT5kZXYsICI8JXM+IGVwJWRfc3RhdCAlMDh4XG4iLCBfX2Z1bmNfXywgaSwKIAkJCV9fcmF3X3JlYWRsKGlteF91c2ItPmJhc2UgKyBVU0JfRVBfU1RBVChpKSkpOwogCX0KQEAgLTI3OCwxNSArMjgyLDE4IEBACiAJc3RydWN0IGlteF91ZGNfc3RydWN0ICppbXhfdXNiID0gaW14X2VwLT5pbXhfdXNiOwogCWludCB0ZW1wLCBpOwogCi0JRF9FUlIoaW14X3VzYi0+ZGV2LCAiPCVzPiBGb3JjZWQgc3RhbGwgb24gJXNcbiIsIF9fZnVuY19fLCBpbXhfZXAtPmVwLm5hbWUpOworCURfRVJSKGlteF91c2ItPmRldiwKKwkJIjwlcz4gRm9yY2VkIHN0YWxsIG9uICVzXG4iLCBfX2Z1bmNfXywgaW14X2VwLT5lcC5uYW1lKTsKIAogCWlteF9mbHVzaChpbXhfZXApOwogCiAJLyogU3BlY2lhbCBjYXJlIGZvciBlcDAgKi8KLQlpZiAoRVBfTk8oaW14X2VwKSkgeworCWlmICghRVBfTk8oaW14X2VwKSkgewogCQl0ZW1wID0gX19yYXdfcmVhZGwoaW14X3VzYi0+YmFzZSArIFVTQl9DVFJMKTsKLQkJX19yYXdfd3JpdGVsKHRlbXAgfCBDVFJMX0NNRE9WRVIgfCBDVFJMX0NNREVSUk9SLCBpbXhfdXNiLT5iYXNlICsgVVNCX0NUUkwpOwotCQlkbyB7IH0gd2hpbGUgKF9fcmF3X3JlYWRsKGlteF91c2ItPmJhc2UgKyBVU0JfQ1RSTCkgJiBDVFJMX0NNRE9WRVIpOworCQlfX3Jhd193cml0ZWwodGVtcCB8IENUUkxfQ01ET1ZFUiB8IENUUkxfQ01ERVJST1IsCisJCQkJCQlpbXhfdXNiLT5iYXNlICsgVVNCX0NUUkwpOworCQlkbyB7IH0gd2hpbGUgKF9fcmF3X3JlYWRsKGlteF91c2ItPmJhc2UgKyBVU0JfQ1RSTCkKKwkJCQkJCSYgQ1RSTF9DTURPVkVSKTsKIAkJdGVtcCA9IF9fcmF3X3JlYWRsKGlteF91c2ItPmJhc2UgKyBVU0JfQ1RSTCk7CiAJCV9fcmF3X3dyaXRlbCh0ZW1wICYgfkNUUkxfQ01ERVJST1IsIGlteF91c2ItPmJhc2UgKyBVU0JfQ1RSTCk7CiAJfQpAQCAtMjk2LDEyICszMDMsMTMgQEAKIAkJCWlteF91c2ItPmJhc2UgKyBVU0JfRVBfU1RBVChFUF9OTyhpbXhfZXApKSk7CiAKIAkJZm9yIChpID0gMDsgaSA8IDEwMDsgaSArKykgewotCQkJdGVtcCA9IF9fcmF3X3JlYWRsKGlteF91c2ItPmJhc2UgKyBVU0JfRVBfU1RBVChFUF9OTyhpbXhfZXApKSk7CisJCQl0ZW1wID0gX19yYXdfcmVhZGwoaW14X3VzYi0+YmFzZQorCQkJCQkJKyBVU0JfRVBfU1RBVChFUF9OTyhpbXhfZXApKSk7CiAJCQlpZiAoISh0ZW1wICYgRVBTVEFUX1NUQUxMKSkKIAkgCQkJYnJlYWs7CiAJIAkJdWRlbGF5KDIwKTsKIAkgCX0KLQkJaWYgKGkgPT0gNTApCisJCWlmIChpID09IDEwMCkKIAkJCURfRVJSKGlteF91c2ItPmRldiwgIjwlcz4gTm9uIGZpbmlzaGVkIHN0YWxsIG9uICVzXG4iLAogCQkJCV9fZnVuY19fLCBpbXhfZXAtPmVwLm5hbWUpOwogCX0KQEAgLTMyNSw3ICszMzMsOCBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqLwogCi1zdGF0aWMgdm9pZCBlcF9hZGRfcmVxdWVzdChzdHJ1Y3QgaW14X2VwX3N0cnVjdCAqaW14X2VwLCBzdHJ1Y3QgaW14X3JlcXVlc3QgKnJlcSkKK3N0YXRpYyB2b2lkIGVwX2FkZF9yZXF1ZXN0KHN0cnVjdCBpbXhfZXBfc3RydWN0ICppbXhfZXAsCisJCQkJCQkJc3RydWN0IGlteF9yZXF1ZXN0ICpyZXEpCiB7CiAJaWYgKHVubGlrZWx5KCFyZXEpKQogCQlyZXR1cm47CkBAIC0zMzQsNyArMzQzLDggQEAKIAlsaXN0X2FkZF90YWlsKCZyZXEtPnF1ZXVlLCAmaW14X2VwLT5xdWV1ZSk7CiB9CiAKLXN0YXRpYyB2b2lkIGVwX2RlbF9yZXF1ZXN0KHN0cnVjdCBpbXhfZXBfc3RydWN0ICppbXhfZXAsIHN0cnVjdCBpbXhfcmVxdWVzdCAqcmVxKQorc3RhdGljIHZvaWQgZXBfZGVsX3JlcXVlc3Qoc3RydWN0IGlteF9lcF9zdHJ1Y3QgKmlteF9lcCwKKwkJCQkJCQlzdHJ1Y3QgaW14X3JlcXVlc3QgKnJlcSkKIHsKIAlpZiAodW5saWtlbHkoIXJlcSkpCiAJCXJldHVybjsKQEAgLTM0Myw3ICszNTMsOCBAQAogCXJlcS0+aW5fdXNlID0gMDsKIH0KIAotc3RhdGljIHZvaWQgZG9uZShzdHJ1Y3QgaW14X2VwX3N0cnVjdCAqaW14X2VwLCBzdHJ1Y3QgaW14X3JlcXVlc3QgKnJlcSwgaW50IHN0YXR1cykKK3N0YXRpYyB2b2lkIGRvbmUoc3RydWN0IGlteF9lcF9zdHJ1Y3QgKmlteF9lcCwKKwkJCQkJc3RydWN0IGlteF9yZXF1ZXN0ICpyZXEsIGludCBzdGF0dXMpCiB7CiAJZXBfZGVsX3JlcXVlc3QoaW14X2VwLCByZXEpOwogCkBAIC00OTQsNyArNTA1LDggQEAKIAkJCQlfX2Z1bmNfXywgaW14X2VwLT5lcC5uYW1lLCByZXEsCiAJCQkJY29tcGxldGVkID8gImNvbXBsZXRlZCIgOiAibm90IGNvbXBsZXRlZCIpOwogCQkJaWYgKCFFUF9OTyhpbXhfZXApKQotCQkJCWVwMF9jaGdfc3RhdChfX2Z1bmNfXywgaW14X2VwLT5pbXhfdXNiLCBFUDBfSURMRSk7CisJCQkJZXAwX2NoZ19zdGF0KF9fZnVuY19fLAorCQkJCQkJaW14X2VwLT5pbXhfdXNiLCBFUDBfSURMRSk7CiAJCX0KIAl9CiAKQEAgLTUzOSwxMCArNTUxLDkgQEAKIAlzdHJ1Y3QgaW14X3JlcXVlc3QgKnJlcSA9IE5VTEw7CiAJaW50IHJldCA9IDA7CiAKLQlpZiAoIWxpc3RfZW1wdHkoJmlteF9lcC0+cXVldWUpKQorCWlmICghbGlzdF9lbXB0eSgmaW14X2VwLT5xdWV1ZSkpIHsKIAkJcmVxID0gbGlzdF9lbnRyeShpbXhfZXAtPnF1ZXVlLm5leHQsIHN0cnVjdCBpbXhfcmVxdWVzdCwgcXVldWUpOwogCi0JaWYgKHJlcSkgewogCQlzd2l0Y2ggKGlteF9lcC0+aW14X3VzYi0+ZXAwc3RhdGUpIHsKIAogCQljYXNlIEVQMF9JTl9EQVRBX1BIQVNFOgkJCS8qIEdFVF9ERVNDUklQVE9SICovCkBAIC01NjEsNiArNTcyLDEwIEBACiAJCX0KIAl9CiAKKwllbHNlCisJCURfRVJSKGlteF9lcC0+aW14X3VzYi0+ZGV2LCAiPCVzPiBubyByZXF1ZXN0IG9uICVzXG4iLAorCQkJCQkJX19mdW5jX18sIGlteF9lcC0+ZXAubmFtZSk7CisKIAlyZXR1cm4gcmV0OwogfQogCkBAIC01ODMsNyArNTk4LDggQEAKIAkJCQkiPCVzPiBubyBzZXR1cCBwYWNrZXQgcmVjZWl2ZWRcbiIsIF9fZnVuY19fKTsKIAkJCWdvdG8gc3RhbGw7CiAJCX0KLQkJdS53b3JkW2ldID0gX19yYXdfcmVhZGwoaW14X3VzYi0+YmFzZSArCVVTQl9FUF9GREFUKEVQX05PKGlteF9lcCkpKTsKKwkJdS53b3JkW2ldID0gX19yYXdfcmVhZGwoaW14X3VzYi0+YmFzZQorCQkJCQkJKyBVU0JfRVBfRkRBVChFUF9OTyhpbXhfZXApKSk7CiAJfQogCiAJdGVtcCA9IGlteF9lcF9lbXB0eShpbXhfZXApOwpAQCAtNzU5LDcgKzc3NSw3IEBACiAJKi8KIAlpZiAoaW14X3VzYi0+c2V0X2NvbmZpZyAmJiAhRVBfTk8oaW14X2VwKSkgewogCQlpbXhfdXNiLT5zZXRfY29uZmlnID0gMDsKLQkJRF9FUFgoaW14X3VzYi0+ZGV2LAorCQlEX0VSUihpbXhfdXNiLT5kZXYsCiAJCQkiPCVzPiBnYWRnZXQgcmVwbHkgc2V0IGNvbmZpZ1xuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gMDsKIAl9CkBAIC03NzksMjggKzc5NSwyOSBAQAogCQlyZXR1cm4gLUVTSFVURE9XTjsKIAl9CiAKLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0KIAkvKiBEZWJ1ZyAqLwogCURfUkVRKGlteF91c2ItPmRldiwgIjwlcz4gZXAlZCAlcyByZXF1ZXN0IGZvciBbJWRdIGJ5dGVzXG4iLAogCQlfX2Z1bmNfXywgRVBfTk8oaW14X2VwKSwKLQkJKCghRVBfTk8oaW14X2VwKSAmJiBpbXhfZXAtPmlteF91c2ItPmVwMHN0YXRlID09IEVQMF9JTl9EQVRBX1BIQVNFKQotCQl8fCAoRVBfTk8oaW14X2VwKSAmJiBFUF9ESVIoaW14X2VwKSkpID8gIklOIiA6ICJPVVQiLCB1c2JfcmVxLT5sZW5ndGgpOworCQkoKCFFUF9OTyhpbXhfZXApICYmIGlteF9lcC0+aW14X3VzYi0+ZXAwc3RhdGUKKwkJCQkJCQk9PSBFUDBfSU5fREFUQV9QSEFTRSkKKwkJfHwgKEVQX05PKGlteF9lcCkgJiYgRVBfRElSKGlteF9lcCkpKQorCQkJCQk/ICJJTiIgOiAiT1VUIiwgdXNiX3JlcS0+bGVuZ3RoKTsKIAlkdW1wX3JlcShfX2Z1bmNfXywgaW14X2VwLCB1c2JfcmVxKTsKIAogCWlmIChpbXhfZXAtPnN0b3BwZWQpIHsKIAkJdXNiX3JlcS0+c3RhdHVzID0gLUVTSFVURE9XTjsKLQkJcmV0ID0gLUVTSFVURE9XTjsKLQkJZ290byBvdXQ7CisJCXJldHVybiAtRVNIVVRET1dOOwogCX0KIAogCWlmIChyZXEtPmluX3VzZSkgewogCQlEX0VSUihpbXhfdXNiLT5kZXYsCiAJCQkiPCVzPiByZWZ1c2luZyB0byBxdWV1ZSByZXEgJXAgKGFscmVhZHkgcXVldWVkKVxuIiwKIAkJCV9fZnVuY19fLCByZXEpOwotCQlnb3RvIG91dDsKKwkJcmV0dXJuIDA7CiAJfQogCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCiAJdXNiX3JlcS0+c3RhdHVzID0gLUVJTlBST0dSRVNTOwogCXVzYl9yZXEtPmFjdHVhbCA9IDA7CiAKQEAgLTgxMCw3ICs4MjcsNyBAQAogCQlyZXQgPSBoYW5kbGVfZXAwKGlteF9lcCk7CiAJZWxzZQogCQlyZXQgPSBoYW5kbGVfZXAoaW14X2VwKTsKLW91dDoKKwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtOTk3LDcxICsxMDE0LDMyIEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICovCiAKLXN0YXRpYyBpcnFyZXR1cm5fdCBpbXhfdWRjX2lycShpbnQgaXJxLCB2b2lkICpkZXYpCisvKgorICogQ2FsbGVkIHdoZW4gdGltZXIgZXhwaXJlcy4KKyAqIFRpbWVyIGlzIHN0YXJ0ZWQgd2hlbiBDRkdfQ0hHIGlzIHJlY2VpdmVkLgorICovCitzdGF0aWMgdm9pZCBoYW5kbGVfY29uZmlnKHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKLQlzdHJ1Y3QgaW14X3VkY19zdHJ1Y3QgKmlteF91c2IgPSBkZXY7CisJc3RydWN0IGlteF91ZGNfc3RydWN0ICppbXhfdXNiID0gKHZvaWQgKilkYXRhOwogCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QgdTsKIAlpbnQgdGVtcCwgY2ZnLCBpbnRmLCBhbHQ7Ci0JaW50IGludHIgPSBfX3Jhd19yZWFkbChpbXhfdXNiLT5iYXNlICsgVVNCX0lOVFIpOwogCi0JaWYgKGludHIgJiAoSU5UUl9XQUtFVVAgfCBJTlRSX1NVU1BFTkQgfCBJTlRSX1JFU1VNRSB8IElOVFJfUkVTRVRfU1RBUlQKLQkJCXwgSU5UUl9SRVNFVF9TVE9QIHwgSU5UUl9DRkdfQ0hHKSkgewotCQkJCWR1bXBfaW50cihfX2Z1bmNfXywgaW50ciwgaW14X3VzYi0+ZGV2KTsKLQkJCQlkdW1wX3VzYl9zdGF0KF9fZnVuY19fLCBpbXhfdXNiKTsKLQl9CisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAotCWlmICghaW14X3VzYi0+ZHJpdmVyKSB7Ci0JCS8qaW14X3VkY19kaXNhYmxlKGlteF91c2IpOyovCi0JCWdvdG8gZW5kX2lycTsKLQl9CisJdGVtcCA9IF9fcmF3X3JlYWRsKGlteF91c2ItPmJhc2UgKyBVU0JfU1RBVCk7CisJY2ZnICA9ICh0ZW1wICYgU1RBVF9DRkcpID4+IDU7CisJaW50ZiA9ICh0ZW1wICYgU1RBVF9JTlRGKSA+PiAzOworCWFsdCAgPSAgdGVtcCAmIFNUQVRfQUxUU0VUOwogCi0JaWYgKGludHIgJiBJTlRSX1dBS0VVUCkgewotCQlpZiAoaW14X3VzYi0+Z2FkZ2V0LnNwZWVkID09IFVTQl9TUEVFRF9VTktOT1dOCi0JCQkmJiBpbXhfdXNiLT5kcml2ZXIgJiYgaW14X3VzYi0+ZHJpdmVyLT5yZXN1bWUpCi0JCQkJaW14X3VzYi0+ZHJpdmVyLT5yZXN1bWUoJmlteF91c2ItPmdhZGdldCk7Ci0JCWlteF91c2ItPnNldF9jb25maWcgPSAwOwotCQlpbXhfdXNiLT5nYWRnZXQuc3BlZWQgPSBVU0JfU1BFRURfRlVMTDsKLQl9CisJRF9SRVEoaW14X3VzYi0+ZGV2LAorCQkiPCVzPiBvcmlnIGNvbmZpZyBDPSVkLCBJPSVkLCBBPSVkIC8gIgorCQkicmVxIGNvbmZpZyBDPSVkLCBJPSVkLCBBPSVkXG4iLAorCQlfX2Z1bmNfXywgaW14X3VzYi0+Y2ZnLCBpbXhfdXNiLT5pbnRmLCBpbXhfdXNiLT5hbHQsCisJCWNmZywgaW50ZiwgYWx0KTsKIAotCWlmIChpbnRyICYgSU5UUl9TVVNQRU5EKSB7Ci0JCWlmIChpbXhfdXNiLT5nYWRnZXQuc3BlZWQgIT0gVVNCX1NQRUVEX1VOS05PV04KLQkJCSYmIGlteF91c2ItPmRyaXZlciAmJiBpbXhfdXNiLT5kcml2ZXItPnN1c3BlbmQpCi0JCQkJaW14X3VzYi0+ZHJpdmVyLT5zdXNwZW5kKCZpbXhfdXNiLT5nYWRnZXQpOwotCQlpbXhfdXNiLT5zZXRfY29uZmlnID0gMDsKLQkJaW14X3VzYi0+Z2FkZ2V0LnNwZWVkID0gVVNCX1NQRUVEX1VOS05PV047Ci0JfQorCWlmIChjZmcgPT0gMSB8fCBjZmcgPT0gMikgewogCi0JaWYgKGludHIgJiBJTlRSX1JFU0VUX1NUQVJUKSB7Ci0JCV9fcmF3X3dyaXRlbChpbnRyLCBpbXhfdXNiLT5iYXNlICsgVVNCX0lOVFIpOwotCQl1ZGNfc3RvcF9hY3Rpdml0eShpbXhfdXNiLCBpbXhfdXNiLT5kcml2ZXIpOwotCQlpbXhfdXNiLT5zZXRfY29uZmlnID0gMDsKLQkJaW14X3VzYi0+Z2FkZ2V0LnNwZWVkID0gVVNCX1NQRUVEX1VOS05PV047Ci0JfQotCi0JaWYgKGludHIgJiBJTlRSX1JFU0VUX1NUT1ApCi0JCWlteF91c2ItPmdhZGdldC5zcGVlZCA9IFVTQl9TUEVFRF9GVUxMOwotCi0JaWYgKGludHIgJiBJTlRSX0NGR19DSEcpIHsKLQkJX19yYXdfd3JpdGVsKElOVFJfQ0ZHX0NIRywgaW14X3VzYi0+YmFzZSArIFVTQl9JTlRSKTsKLQkJdGVtcCA9IF9fcmF3X3JlYWRsKGlteF91c2ItPmJhc2UgKyBVU0JfU1RBVCk7Ci0JCWNmZyAgPSAodGVtcCAmIFNUQVRfQ0ZHKSA+PiA1OwotCQlpbnRmID0gKHRlbXAgJiBTVEFUX0lOVEYpID4+IDM7Ci0JCWFsdCAgPSAgdGVtcCAmIFNUQVRfQUxUU0VUOwotCi0JCURfUkVRKGlteF91c2ItPmRldiwKLQkJCSI8JXM+IG9yaWcgY29uZmlnIEM9JWQsIEk9JWQsIEE9JWQgLyAiCi0JCQkicmVxIGNvbmZpZyBDPSVkLCBJPSVkLCBBPSVkXG4iLAotCQkJX19mdW5jX18sIGlteF91c2ItPmNmZywgaW14X3VzYi0+aW50ZiwgaW14X3VzYi0+YWx0LAotCQkJY2ZnLCBpbnRmLCBhbHQpOwotCi0JCWlmIChjZmcgIT0gMSAmJiBjZmcgIT0gMikKLQkJCWdvdG8gZW5kX2lycTsKLQotCQlpbXhfdXNiLT5zZXRfY29uZmlnID0gMDsKLQotCQkvKiBDb25maWcgc2V0dXAgKi8KIAkJaWYgKGlteF91c2ItPmNmZyAhPSBjZmcpIHsKLQkJCURfUkVRKGlteF91c2ItPmRldiwgIjwlcz4gQ2hhbmdlIGNvbmZpZyBzdGFydFxuIixfX2Z1bmNfXyk7CiAJCQl1LmJSZXF1ZXN0ID0gVVNCX1JFUV9TRVRfQ09ORklHVVJBVElPTjsKIAkJCXUuYlJlcXVlc3RUeXBlID0gVVNCX0RJUl9PVVQgfAogCQkJCQlVU0JfVFlQRV9TVEFOREFSRCB8CkBAIC0xMDcwLDE0ICsxMDQ4LDEwIEBACiAJCQl1LndJbmRleCA9IDA7CiAJCQl1LndMZW5ndGggPSAwOwogCQkJaW14X3VzYi0+Y2ZnID0gY2ZnOwotCQkJaW14X3VzYi0+c2V0X2NvbmZpZyA9IDE7CiAJCQlpbXhfdXNiLT5kcml2ZXItPnNldHVwKCZpbXhfdXNiLT5nYWRnZXQsICZ1KTsKLQkJCWlteF91c2ItPnNldF9jb25maWcgPSAwOwotCQkJRF9SRVEoaW14X3VzYi0+ZGV2LCAiPCVzPiBDaGFuZ2UgY29uZmlnIGRvbmVcbiIsX19mdW5jX18pOwogCiAJCX0KIAkJaWYgKGlteF91c2ItPmludGYgIT0gaW50ZiB8fCBpbXhfdXNiLT5hbHQgIT0gYWx0KSB7Ci0JCQlEX1JFUShpbXhfdXNiLT5kZXYsICI8JXM+IENoYW5nZSBpbnRlcmZhY2Ugc3RhcnRcbiIsX19mdW5jX18pOwogCQkJdS5iUmVxdWVzdCA9IFVTQl9SRVFfU0VUX0lOVEVSRkFDRTsKIAkJCXUuYlJlcXVlc3RUeXBlID0gVVNCX0RJUl9PVVQgfAogCQkJCQkgIFVTQl9UWVBFX1NUQU5EQVJEIHwKQEAgLTEwODcsMjAgKzEwNjEsOTIgQEAKIAkJCXUud0xlbmd0aCA9IDA7CiAJCQlpbXhfdXNiLT5pbnRmID0gaW50ZjsKIAkJCWlteF91c2ItPmFsdCA9IGFsdDsKLQkJCWlteF91c2ItPnNldF9jb25maWcgPSAxOwogCQkJaW14X3VzYi0+ZHJpdmVyLT5zZXR1cCgmaW14X3VzYi0+Z2FkZ2V0LCAmdSk7Ci0JCQlpbXhfdXNiLT5zZXRfY29uZmlnID0gMDsKLQkJCURfUkVRKGlteF91c2ItPmRldiwgIjwlcz4gQ2hhbmdlIGludGVyZmFjZSBkb25lXG4iLF9fZnVuY19fKTsKIAkJfQogCX0KIAorCWlteF91c2ItPnNldF9jb25maWcgPSAwOworCisJbG9jYWxfaXJxX2VuYWJsZSgpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgaW14X3VkY19pcnEoaW50IGlycSwgdm9pZCAqZGV2KQoreworCXN0cnVjdCBpbXhfdWRjX3N0cnVjdCAqaW14X3VzYiA9IGRldjsKKwlpbnQgaW50ciA9IF9fcmF3X3JlYWRsKGlteF91c2ItPmJhc2UgKyBVU0JfSU5UUik7CisJaW50IHRlbXA7CisKKwlpZiAoaW50ciAmIChJTlRSX1dBS0VVUCB8IElOVFJfU1VTUEVORCB8IElOVFJfUkVTVU1FIHwgSU5UUl9SRVNFVF9TVEFSVAorCQkJfCBJTlRSX1JFU0VUX1NUT1AgfCBJTlRSX0NGR19DSEcpKSB7CisJCQkJZHVtcF9pbnRyKF9fZnVuY19fLCBpbnRyLCBpbXhfdXNiLT5kZXYpOworCQkJCWR1bXBfdXNiX3N0YXQoX19mdW5jX18sIGlteF91c2IpOworCX0KKworCWlmICghaW14X3VzYi0+ZHJpdmVyKQorCQlnb3RvIGVuZF9pcnE7CisKIAlpZiAoaW50ciAmIElOVFJfU09GKSB7CisJCS8qIENvcHkgZnJvbSBGcmVlc2NhbGUgQlNQLgorCQkgICBXZSBtdXN0IGVuYWJsZSBTT0YgaW50ciBhbmQgc2V0IENNRE9WRVIuCisJCSAgIERhdGFzaGVldCBkb24ndCBzcGVjaWZpeSB0aGlzIGFjdGlvbiwgYnV0IGl0CisJCSAgIGlzIGRvbmUgaW4gRnJlZXNjYWxlIEJTUCwgc28ganVzdCBjb3B5IGl0LgorCQkqLwogCQlpZiAoaW14X3VzYi0+ZXAwc3RhdGUgPT0gRVAwX0lETEUpIHsKIAkJCXRlbXAgPSBfX3Jhd19yZWFkbChpbXhfdXNiLT5iYXNlICsgVVNCX0NUUkwpOwotCQkJX19yYXdfd3JpdGVsKHRlbXAgfCBDVFJMX0NNRE9WRVIsIGlteF91c2ItPmJhc2UgKyBVU0JfQ1RSTCk7CisJCQlfX3Jhd193cml0ZWwodGVtcCB8IENUUkxfQ01ET1ZFUiwKKwkJCQkJCWlteF91c2ItPmJhc2UgKyBVU0JfQ1RSTCk7CiAJCX0KIAl9CiAKKwlpZiAoaW50ciAmIElOVFJfQ0ZHX0NIRykgeworCQkvKiBBIHdvcmthcm91bmQgb2Ygc2VyaW91cyBJTVggVURDIGJ1Zy4KKwkJICAgSGFuZGxpbmcgb2YgQ0ZHX0NIRyBzaG91bGQgYmUgZGVsYXllZCBmb3Igc29tZSB0aW1lLCBiZWNhdXNlCisJCSAgIElNWCBkb2VzIG5vdCBOQUNLIHRoZSBob3N0IHdoZW4gQ0ZHX0NIRyBpbnRlcnJ1cHQgaXMgcGVuZGluZy4KKwkJICAgVGhlcmUgaXMgbm8gdGltZSB0byBoYW5kbGUgY3VycmVudCBDRkdfQ0hHCisJCSAgIGlmIG5leHQgQ0ZHX0NIRyBvciBTRVRVUCBwYWNrZWQgaXMgc2VuZCBpbW1lZGlhdGVseS4KKwkJICAgV2UgaGF2ZSB0byBjbGVhciBDRkdfQ0hHLCBzdGFydCB0aGUgdGltZXIgYW5kCisJCSAgIE5BQ0sgdGhlIGhvc3QgYnkgc2V0dGluZyBDVFJMX0NNRE9WRVIKKwkJICAgaWYgaXQgc2VuZHMgYW55IFNFVFVQIHBhY2tldC4KKwkJICAgV2hlbiB0aW1lciBleHBpcmVzLCBoYW5kbGVyIGlzIGNhbGxlZCB0byBoYW5kbGUgY29uZmlndXJhdGlvbgorCQkgICBjaGFuZ2VzLiBXaGlsZSBDRkdfQ0hHIGlzIG5vdCBoYW5kbGVkIChzZXRfY29uZmlnPTEpLAorCQkgICB3ZSBtdXN0IE5BQ0sgdGhlIGhvc3QgdG8gZXZlcnkgU0VUVVAgcGFja2VkLgorCQkgICBUaGlzIGRlbGF5IHByZXZlbnRzIGZyb20gZ29pbmcgb3V0IG9mIHN5bmMgd2l0aCBob3N0LgorCQkgKi8KKwkJX19yYXdfd3JpdGVsKElOVFJfQ0ZHX0NIRywgaW14X3VzYi0+YmFzZSArIFVTQl9JTlRSKTsKKwkJaW14X3VzYi0+c2V0X2NvbmZpZyA9IDE7CisJCW1vZF90aW1lcigmaW14X3VzYi0+dGltZXIsIGppZmZpZXMgKyA1KTsKKwkJZ290byBlbmRfaXJxOworCX0KKworCWlmIChpbnRyICYgSU5UUl9XQUtFVVApIHsKKwkJaWYgKGlteF91c2ItPmdhZGdldC5zcGVlZCA9PSBVU0JfU1BFRURfVU5LTk9XTgorCQkJJiYgaW14X3VzYi0+ZHJpdmVyICYmIGlteF91c2ItPmRyaXZlci0+cmVzdW1lKQorCQkJCWlteF91c2ItPmRyaXZlci0+cmVzdW1lKCZpbXhfdXNiLT5nYWRnZXQpOworCQlpbXhfdXNiLT5zZXRfY29uZmlnID0gMDsKKwkJZGVsX3RpbWVyKCZpbXhfdXNiLT50aW1lcik7CisJCWlteF91c2ItPmdhZGdldC5zcGVlZCA9IFVTQl9TUEVFRF9GVUxMOworCX0KKworCWlmIChpbnRyICYgSU5UUl9TVVNQRU5EKSB7CisJCWlmIChpbXhfdXNiLT5nYWRnZXQuc3BlZWQgIT0gVVNCX1NQRUVEX1VOS05PV04KKwkJCSYmIGlteF91c2ItPmRyaXZlciAmJiBpbXhfdXNiLT5kcml2ZXItPnN1c3BlbmQpCisJCQkJaW14X3VzYi0+ZHJpdmVyLT5zdXNwZW5kKCZpbXhfdXNiLT5nYWRnZXQpOworCQlpbXhfdXNiLT5zZXRfY29uZmlnID0gMDsKKwkJZGVsX3RpbWVyKCZpbXhfdXNiLT50aW1lcik7CisJCWlteF91c2ItPmdhZGdldC5zcGVlZCA9IFVTQl9TUEVFRF9VTktOT1dOOworCX0KKworCWlmIChpbnRyICYgSU5UUl9SRVNFVF9TVEFSVCkgeworCQlfX3Jhd193cml0ZWwoaW50ciwgaW14X3VzYi0+YmFzZSArIFVTQl9JTlRSKTsKKwkJdWRjX3N0b3BfYWN0aXZpdHkoaW14X3VzYiwgaW14X3VzYi0+ZHJpdmVyKTsKKwkJaW14X3VzYi0+c2V0X2NvbmZpZyA9IDA7CisJCWRlbF90aW1lcigmaW14X3VzYi0+dGltZXIpOworCQlpbXhfdXNiLT5nYWRnZXQuc3BlZWQgPSBVU0JfU1BFRURfVU5LTk9XTjsKKwl9CisKKwlpZiAoaW50ciAmIElOVFJfUkVTRVRfU1RPUCkKKwkJaW14X3VzYi0+Z2FkZ2V0LnNwZWVkID0gVVNCX1NQRUVEX0ZVTEw7CisKIGVuZF9pcnE6CiAJX19yYXdfd3JpdGVsKGludHIsIGlteF91c2ItPmJhc2UgKyBVU0JfSU5UUik7CiAJcmV0dXJuIElSUV9IQU5ETEVEOwpAQCAtMTEwOSw2ICsxMTU1LDcgQEAKIHN0YXRpYyBpcnFyZXR1cm5fdCBpbXhfdWRjX2N0cmxfaXJxKGludCBpcnEsIHZvaWQgKmRldikKIHsKIAlzdHJ1Y3QgaW14X3VkY19zdHJ1Y3QgKmlteF91c2IgPSBkZXY7CisJc3RydWN0IGlteF9lcF9zdHJ1Y3QgKmlteF9lcCA9ICZpbXhfdXNiLT5pbXhfZXBbMF07CiAJaW50IGludHIgPSBfX3Jhd19yZWFkbChpbXhfdXNiLT5iYXNlICsgVVNCX0VQX0lOVFIoMCkpOwogCiAJZHVtcF9lcF9pbnRyKF9fZnVuY19fLCAwLCBpbnRyLCBpbXhfdXNiLT5kZXYpOwpAQCAtMTExOCwxNiArMTE2NSwxNSBAQAogCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAJfQogCi0JLyogREVWUkVRIElSUSBoYXMgaGlnaGVzdCBwcmlvcml0eSAqLworCS8qIERFVlJFUSBoYXMgaGlnaGVzdCBwcmlvcml0eSAqLwogCWlmIChpbnRyICYgKEVQSU5UUl9ERVZSRVEgfCBFUElOVFJfTURFVlJFUSkpCiAJCWhhbmRsZV9lcDBfZGV2cmVxKGlteF91c2IpOwogCS8qIFNlZW0gaS5NWCBpcyBtaXNzaW5nIEVPRiBpbnRlcnJ1cHQgc29tZXRpbWVzLgotCSAqIFRoZXJlZm9yZSB3ZSBtb25pdG9yIGJvdGggRU9GIGFuZCBGSUZPX0VNUFRZIGludGVycnVwcwotCSAqIHdoZW4gdHJhbnNtaXRpbmcsIGFuZCBib3RoIEVPRiBhbmQgRklGT19GVUxMIHdoZW4KLQkgKiByZWNlaXZpbmcgZGF0YS4KKwkgKiBUaGVyZWZvcmUgd2UgZG9uJ3QgbW9uaXRvciBFT0YuCisJICogV2UgY2FsbCBoYW5kbGVfZXAwKCkgb25seSBpZiBhIHJlcXVlc3QgaXMgcXVldWVkIGZvciBlcDAuCiAJICovCi0JZWxzZSBpZiAoaW50ciAmIChFUElOVFJfRU9GIHwgRVBJTlRSX0ZJRk9fRU1QVFkgfCBFUElOVFJfRklGT19GVUxMKSkKLQkJaGFuZGxlX2VwMCgmaW14X3VzYi0+aW14X2VwWzBdKTsKKwllbHNlIGlmICghbGlzdF9lbXB0eSgmaW14X2VwLT5xdWV1ZSkpCisJCWhhbmRsZV9lcDAoaW14X2VwKTsKIAogCV9fcmF3X3dyaXRlbChpbnRyLCBpbXhfdXNiLT5iYXNlICsgVVNCX0VQX0lOVFIoMCkpOwogCkBAIC0xMTg2LDggKzEyMzIsOCBAQAogCQkuZXAwCQk9ICZjb250cm9sbGVyLmlteF9lcFswXS5lcCwKIAkJLm5hbWUJCT0gZHJpdmVyX25hbWUsCiAJCS5kZXYgPSB7Ci0JCQkgLmJ1c19pZAk9ICJnYWRnZXQiLAotCQkgfSwKKwkJCS5pbml0X25hbWUJPSAiZ2FkZ2V0IiwKKwkJfSwKIAl9LAogCiAJLmlteF9lcFswXSA9IHsKQEAgLTEzMTgsNiArMTM2NCw3IEBACiAKIAl1ZGNfc3RvcF9hY3Rpdml0eShpbXhfdXNiLCBkcml2ZXIpOwogCWlteF91ZGNfZGlzYWJsZShpbXhfdXNiKTsKKwlkZWxfdGltZXIoJmlteF91c2ItPnRpbWVyKTsKIAogCWRyaXZlci0+dW5iaW5kKCZpbXhfdXNiLT5nYWRnZXQpOwogCWlteF91c2ItPmdhZGdldC5kZXYuZHJpdmVyID0gTlVMTDsKQEAgLTE0MzUsNiArMTQ4MiwxMCBAQAogCXVzYl9pbml0X2RhdGEoaW14X3VzYik7CiAJaW14X3VkY19pbml0KGlteF91c2IpOwogCisJaW5pdF90aW1lcigmaW14X3VzYi0+dGltZXIpOworCWlteF91c2ItPnRpbWVyLmZ1bmN0aW9uID0gaGFuZGxlX2NvbmZpZzsKKwlpbXhfdXNiLT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpaW14X3VzYjsKKwogCXJldHVybiAwOwogCiBmYWlsMzoKQEAgLTE0NTcsNiArMTUwOCw3IEBACiAJaW50IGk7CiAKIAlpbXhfdWRjX2Rpc2FibGUoaW14X3VzYik7CisJZGVsX3RpbWVyKCZpbXhfdXNiLT50aW1lcik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgSU1YX1VTQl9OQl9FUCArIDE7IGkrKykKIAkJZnJlZV9pcnEoaW14X3VzYi0+dXNiZF9pbnRbaV0sIGlteF91c2IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2lteF91ZGMuaCBiL2RyaXZlcnMvdXNiL2dhZGdldC9pbXhfdWRjLmgKaW5kZXggODUwMDc2OS4uYjQ4YWQ1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2lteF91ZGMuaAorKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvaW14X3VkYy5oCkBAIC0yMyw3ICsyMyw4IEBACiAvKiBIZWxwZXIgbWFjcm9zICovCiAjZGVmaW5lIEVQX05PKGVwKQkoKGVwLT5iRW5kcG9pbnRBZGRyZXNzKSAmIH5VU0JfRElSX0lOKSAvKiBJTjoxLCBPVVQ6MCAqLwogI2RlZmluZSBFUF9ESVIoZXApCSgoZXAtPmJFbmRwb2ludEFkZHJlc3MpICYgVVNCX0RJUl9JTiA/IDEgOiAwKQotI2RlZmluZSBpcnFfdG9fZXAoaXJxKQkoKChpcnEpID49IFVTQkRfSU5UMCkgfHwgKChpcnEpIDw9IFVTQkRfSU5UNikgPyAoKGlycSkgLSBVU0JEX0lOVDApIDogKFVTQkRfSU5UNikpIC8qc2hvdWxkIG5vdCBoYXBwZW4qLworI2RlZmluZSBpcnFfdG9fZXAoaXJxKQkoKChpcnEpID49IFVTQkRfSU5UMCkgfHwgKChpcnEpIDw9IFVTQkRfSU5UNikgXAorCQk/ICgoaXJxKSAtIFVTQkRfSU5UMCkgOiAoVVNCRF9JTlQ2KSkgLypzaG91bGQgbm90IGhhcHBlbiovCiAjZGVmaW5lIGVwX3RvX2lycShlcCkJKEVQX05PKChlcCkpICsgVVNCRF9JTlQwKQogI2RlZmluZSBJTVhfVVNCX05CX0VQCTYKIApAQCAtNTgsNiArNTksNyBAQAogCXN0cnVjdCBkZXZpY2UJCQkJKmRldjsKIAlzdHJ1Y3QgaW14X2VwX3N0cnVjdAkJCWlteF9lcFtJTVhfVVNCX05CX0VQXTsKIAlzdHJ1Y3QgY2xrCQkJCSpjbGs7CisJc3RydWN0IHRpbWVyX2xpc3QJCQl0aW1lcjsKIAllbnVtIGVwMF9zdGF0ZQkJCQllcDBzdGF0ZTsKIAlzdHJ1Y3QgcmVzb3VyY2UJCQkJKnJlczsKIAl2b2lkIF9faW9tZW0JCQkJKmJhc2U7CkBAIC04OCw4ICs5MCw4IEBACiAjZGVmaW5lICBVU0JfRVBfRkRBVDMoeCkJKDB4M0YgKyAoeCoweDMwKSkgLyogVVNCIEZJRk8gZGF0YSAqLwogI2RlZmluZSAgVVNCX0VQX0ZTVEFUKHgpCSgweDQwICsgKHgqMHgzMCkpIC8qIFVTQiBGSUZPIHN0YXR1cyAqLwogI2RlZmluZSAgVVNCX0VQX0ZDVFJMKHgpCSgweDQ0ICsgKHgqMHgzMCkpIC8qIFVTQiBGSUZPIGNvbnRyb2wgKi8KLSNkZWZpbmUgIFVTQl9FUF9MUkZQKHgpCQkoMHg0OCArICh4KjB4MzApKSAvKiBVU0IgbGFzdCByZWFkIGZyYW1lIHBvaW50ZXIgKi8KLSNkZWZpbmUgIFVTQl9FUF9MV0ZQKHgpCQkoMHg0QyArICh4KjB4MzApKSAvKiBVU0IgbGFzdCB3cml0ZSBmcmFtZSBwb2ludGVyICovCisjZGVmaW5lICBVU0JfRVBfTFJGUCh4KQkJKDB4NDggKyAoeCoweDMwKSkgLyogVVNCIGxhc3QgcmQgZi4gcG9pbnRlciAqLworI2RlZmluZSAgVVNCX0VQX0xXRlAoeCkJCSgweDRDICsgKHgqMHgzMCkpIC8qIFVTQiBsYXN0IHdyIGYuIHBvaW50ZXIgKi8KICNkZWZpbmUgIFVTQl9FUF9GQUxSTSh4KQkoMHg1MCArICh4KjB4MzApKSAvKiBVU0IgRklGTyBhbGFybSAqLwogI2RlZmluZSAgVVNCX0VQX0ZSRFAoeCkJCSgweDU0ICsgKHgqMHgzMCkpIC8qIFVTQiBGSUZPIHJlYWQgcG9pbnRlciAqLwogI2RlZmluZSAgVVNCX0VQX0ZXUlAoeCkJCSgweDU4ICsgKHgqMHgzMCkpIC8qIFVTQiBGSUZPIHdyaXRlIHBvaW50ZXIgKi8KQEAgLTE3MCw3ICsxNzIsNyBAQAogLyogI2RlZmluZSBERUJVR19JUlEgKi8KIC8qICNkZWZpbmUgREVCVUdfRVBJUlEgKi8KIC8qICNkZWZpbmUgREVCVUdfRFVNUCAqLwotI2RlZmluZSBERUJVR19FUlIKKy8qICNkZWZpbmUgREVCVUdfRVJSICovCiAKICNpZmRlZiBERUJVR19SRVEKIAkjZGVmaW5lIERfUkVRKGRldiwgYXJncy4uLikJZGV2X2RiZyhkZXYsICMjIGFyZ3MpCkBAIC0yMjgsNyArMjMwLDggQEAKICNlbmRpZiAvKiBERUJVR19JUlEgKi8KIAogI2lmZGVmIERFQlVHX0VQSVJRCi0Jc3RhdGljIHZvaWQgZHVtcF9lcF9pbnRyKGNvbnN0IGNoYXIgKmxhYmVsLCBpbnQgbnIsIGludCBpcnFyZWcsIHN0cnVjdCBkZXZpY2UgKmRldikKKwlzdGF0aWMgdm9pZCBkdW1wX2VwX2ludHIoY29uc3QgY2hhciAqbGFiZWwsIGludCBuciwgaW50IGlycXJlZywKKwkJCQkJCQlzdHJ1Y3QgZGV2aWNlICpkZXYpCiAJewogCQlkZXZfZGJnKGRldiwgIjwlcz4gRVAlZF9JTlRSPVslcyVzJXMlcyVzJXMlcyVzJXNdXG4iLCBsYWJlbCwgbnIsCiAJCQkoaXJxcmVnICYgRVBJTlRSX0ZJRk9fRlVMTCkgPyAiIGZ1bGwiIDogIiIsCkBAIC0yNDYsNyArMjQ5LDggQEAKICNlbmRpZiAvKiBERUJVR19JUlEgKi8KIAogI2lmZGVmIERFQlVHX0RVTVAKLQlzdGF0aWMgdm9pZCBkdW1wX3VzYl9zdGF0KGNvbnN0IGNoYXIgKmxhYmVsLCBzdHJ1Y3QgaW14X3VkY19zdHJ1Y3QgKmlteF91c2IpCisJc3RhdGljIHZvaWQgZHVtcF91c2Jfc3RhdChjb25zdCBjaGFyICpsYWJlbCwKKwkJCQkJCXN0cnVjdCBpbXhfdWRjX3N0cnVjdCAqaW14X3VzYikKIAl7CiAJCWludCB0ZW1wID0gX19yYXdfcmVhZGwoaW14X3VzYi0+YmFzZSArIFVTQl9TVEFUKTsKIApAQCAtMjU5LDEyICsyNjMsMTUgQEAKIAkJCSh0ZW1wICYgU1RBVF9BTFRTRVQpKTsKIAl9CiAKLQlzdGF0aWMgdm9pZCBkdW1wX2VwX3N0YXQoY29uc3QgY2hhciAqbGFiZWwsIHN0cnVjdCBpbXhfZXBfc3RydWN0ICppbXhfZXApCisJc3RhdGljIHZvaWQgZHVtcF9lcF9zdGF0KGNvbnN0IGNoYXIgKmxhYmVsLAorCQkJCQkJc3RydWN0IGlteF9lcF9zdHJ1Y3QgKmlteF9lcCkKIAl7Ci0JCWludCB0ZW1wID0gX19yYXdfcmVhZGwoaW14X2VwLT5pbXhfdXNiLT5iYXNlICsgVVNCX0VQX0lOVFIoRVBfTk8oaW14X2VwKSkpOworCQlpbnQgdGVtcCA9IF9fcmF3X3JlYWRsKGlteF9lcC0+aW14X3VzYi0+YmFzZQorCQkJCQkJKyBVU0JfRVBfSU5UUihFUF9OTyhpbXhfZXApKSk7CiAKIAkJZGV2X2RiZyhpbXhfZXAtPmlteF91c2ItPmRldiwKLQkJCSI8JXM+IEVQJWRfSU5UUj1bJXMlcyVzJXMlcyVzJXMlcyVzXVxuIiwgbGFiZWwsIEVQX05PKGlteF9lcCksCisJCQkiPCVzPiBFUCVkX0lOVFI9WyVzJXMlcyVzJXMlcyVzJXMlc11cbiIsCisJCQlsYWJlbCwgRVBfTk8oaW14X2VwKSwKIAkJCSh0ZW1wICYgRVBJTlRSX0ZJRk9fRlVMTCkgPyAiIGZ1bGwiIDogIiIsCiAJCQkodGVtcCAmIEVQSU5UUl9GSUZPX0VNUFRZKSA/ICIgZmVtcHR5IiA6ICIiLAogCQkJKHRlbXAgJiBFUElOVFJfRklGT19FUlJPUikgPyAiIGZlcnIiIDogIiIsCkBAIC0yNzUsMTggKzI4MiwyMiBAQAogCQkJKHRlbXAgJiBFUElOVFJfREVWUkVRKSA/ICIgZGV2cmVxIiA6ICIiLAogCQkJKHRlbXAgJiBFUElOVFJfRU9UKSA/ICIgZW90IiA6ICIiKTsKIAotCQl0ZW1wID0gX19yYXdfcmVhZGwoaW14X2VwLT5pbXhfdXNiLT5iYXNlICsgVVNCX0VQX1NUQVQoRVBfTk8oaW14X2VwKSkpOworCQl0ZW1wID0gX19yYXdfcmVhZGwoaW14X2VwLT5pbXhfdXNiLT5iYXNlCisJCQkJCQkrIFVTQl9FUF9TVEFUKEVQX05PKGlteF9lcCkpKTsKIAogCQlkZXZfZGJnKGlteF9lcC0+aW14X3VzYi0+ZGV2LAotCQkJIjwlcz4gRVAlZF9TVEFUPVslcyVzIGJjb3VudD0lZF1cbiIsIGxhYmVsLCBFUF9OTyhpbXhfZXApLAorCQkJIjwlcz4gRVAlZF9TVEFUPVslcyVzIGJjb3VudD0lZF1cbiIsCisJCQlsYWJlbCwgRVBfTk8oaW14X2VwKSwKIAkJCSh0ZW1wICYgRVBTVEFUX1NJUCkgPyAiIHNpcCIgOiAiIiwKIAkJCSh0ZW1wICYgRVBTVEFUX1NUQUxMKSA/ICIgc3RhbGwiIDogIiIsCiAJCQkodGVtcCAmIEVQU1RBVF9CQ09VTlQpID4+IDE2KTsKIAotCQl0ZW1wID0gX19yYXdfcmVhZGwoaW14X2VwLT5pbXhfdXNiLT5iYXNlICsgVVNCX0VQX0ZTVEFUKEVQX05PKGlteF9lcCkpKTsKKwkJdGVtcCA9IF9fcmF3X3JlYWRsKGlteF9lcC0+aW14X3VzYi0+YmFzZQorCQkJCQkJKyBVU0JfRVBfRlNUQVQoRVBfTk8oaW14X2VwKSkpOwogCiAJCWRldl9kYmcoaW14X2VwLT5pbXhfdXNiLT5kZXYsCi0JCQkiPCVzPiBFUCVkX0ZTVEFUPVslcyVzJXMlcyVzJXMlc11cbiIsIGxhYmVsLCBFUF9OTyhpbXhfZXApLAorCQkJIjwlcz4gRVAlZF9GU1RBVD1bJXMlcyVzJXMlcyVzJXNdXG4iLAorCQkJbGFiZWwsIEVQX05PKGlteF9lcCksCiAJCQkodGVtcCAmIEZTVEFUX0VSUikgPyAiIGZlcnIiIDogIiIsCiAJCQkodGVtcCAmIEZTVEFUX1VGKSA/ICIgZnVuZGVyIiA6ICIiLAogCQkJKHRlbXAgJiBGU1RBVF9PRikgPyAiIGZvdmVyIiA6ICIiLApAQCAtMjk2LDE5ICszMDcsMjMgQEAKIAkJCSh0ZW1wICYgRlNUQVRfRU1QVFkpID8gIiBmZW1wdHkiIDogIiIpOwogCX0KIAotCXN0YXRpYyB2b2lkIGR1bXBfcmVxKGNvbnN0IGNoYXIgKmxhYmVsLCBzdHJ1Y3QgaW14X2VwX3N0cnVjdCAqaW14X2VwLCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcSkKKwlzdGF0aWMgdm9pZCBkdW1wX3JlcShjb25zdCBjaGFyICpsYWJlbCwgc3RydWN0IGlteF9lcF9zdHJ1Y3QgKmlteF9lcCwKKwkJCQkJCQlzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcSkKIAl7CiAJCWludCBpOwogCiAJCWlmICghcmVxIHx8ICFyZXEtPmJ1ZikgewotCQkJZGV2X2RiZyhpbXhfZXAtPmlteF91c2ItPmRldiwgIjwlcz4gcmVxIG9yIHJlcSBidWYgaXMgZnJlZVxuIiwgbGFiZWwpOworCQkJZGV2X2RiZyhpbXhfZXAtPmlteF91c2ItPmRldiwKKwkJCQkJIjwlcz4gcmVxIG9yIHJlcSBidWYgaXMgZnJlZVxuIiwgbGFiZWwpOwogCQkJcmV0dXJuOwogCQl9CiAKLQkJaWYgKCghRVBfTk8oaW14X2VwKSAmJiBpbXhfZXAtPmlteF91c2ItPmVwMHN0YXRlID09IEVQMF9JTl9EQVRBX1BIQVNFKQorCQlpZiAoKCFFUF9OTyhpbXhfZXApICYmIGlteF9lcC0+aW14X3VzYi0+ZXAwc3RhdGUKKwkJCT09IEVQMF9JTl9EQVRBX1BIQVNFKQogCQkJfHwgKEVQX05PKGlteF9lcCkgJiYgRVBfRElSKGlteF9lcCkpKSB7CiAKLQkJCWRldl9kYmcoaW14X2VwLT5pbXhfdXNiLT5kZXYsICI8JXM+IHJlcXVlc3QgZHVtcCA8IiwgbGFiZWwpOworCQkJZGV2X2RiZyhpbXhfZXAtPmlteF91c2ItPmRldiwKKwkJCQkJCSI8JXM+IHJlcXVlc3QgZHVtcCA8IiwgbGFiZWwpOwogCQkJZm9yIChpID0gMDsgaSA8IHJlcS0+bGVuZ3RoOyBpKyspCiAJCQkJcHJpbnRrKCIlMDJ4LSIsICooKHU4ICopcmVxLT5idWYgKyBpKSk7CiAJCQlwcmludGsoIj5cbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2lub2RlLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvaW5vZGUuYwppbmRleCAzMTdiNDhmLi5kMjA5MzdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvaW5vZGUuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvaW5vZGUuYwpAQCAtMTMzNCw3ICsxMzM0LDcgQEAKIAogCXF1YWwuYkxlbmd0aCA9IHNpemVvZiBxdWFsOwogCXF1YWwuYkRlc2NyaXB0b3JUeXBlID0gVVNCX0RUX0RFVklDRV9RVUFMSUZJRVI7Ci0JcXVhbC5iY2RVU0IgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2ICgweDAyMDApOworCXF1YWwuYmNkVVNCID0gY3B1X3RvX2xlMTYgKDB4MDIwMCk7CiAKIAlkZXNjID0gZGV2LT5kZXY7CiAJcXVhbC5iRGV2aWNlQ2xhc3MgPSBkZXNjLT5iRGV2aWNlQ2xhc3M7CkBAIC0xOTA4LDcgKzE5MDgsNyBAQAogCQkJfHwgZGV2LT5kZXYtPmJOdW1Db25maWd1cmF0aW9ucyAhPSAxKQogCQlnb3RvIGZhaWw7CiAJZGV2LT5kZXYtPmJOdW1Db25maWd1cmF0aW9ucyA9IDE7Ci0JZGV2LT5kZXYtPmJjZFVTQiA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKDB4MDIwMCk7CisJZGV2LT5kZXYtPmJjZFVTQiA9IGNwdV90b19sZTE2ICgweDAyMDApOwogCiAJLyogdHJpZ2dlcnMgZ2FkZ2V0ZnNfYmluZCgpOyB0aGVuIHdlIGNhbiBlbnVtZXJhdGUuICovCiAJc3Bpbl91bmxvY2tfaXJxICgmZGV2LT5sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9saDdhNDB4X3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2xoN2E0MHhfdWRjLmMKaW5kZXggZDU1NGIwOC4uNmNkM2Q1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2xoN2E0MHhfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2xoN2E0MHhfdWRjLmMKQEAgLTQzMiw4ICs0MzIsOCBAQAogCWRldmljZV9hZGQoJmRldi0+Z2FkZ2V0LmRldik7CiAJcmV0dmFsID0gZHJpdmVyLT5iaW5kKCZkZXYtPmdhZGdldCk7CiAJaWYgKHJldHZhbCkgewotCQlwcmludGsoIiVzOiBiaW5kIHRvIGRyaXZlciAlcyAtLT4gZXJyb3IgJWRcbiIsIGRldi0+Z2FkZ2V0Lm5hbWUsCi0JCSAgICAgICBkcml2ZXItPmRyaXZlci5uYW1lLCByZXR2YWwpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogYmluZCB0byBkcml2ZXIgJXMgLS0+IGVycm9yICVkXG4iLAorCQkgICAgICAgZGV2LT5nYWRnZXQubmFtZSwgZHJpdmVyLT5kcml2ZXIubmFtZSwgcmV0dmFsKTsKIAkJZGV2aWNlX2RlbCgmZGV2LT5nYWRnZXQuZGV2KTsKIAogCQlkZXYtPmRyaXZlciA9IDA7CkBAIC00NDUsOCArNDQ1LDggQEAKIAkgKiBmb3Igc2V0X2NvbmZpZ3VyYXRpb24gYXMgd2VsbCBhcyBldmVudHVhbCBkaXNjb25uZWN0LgogCSAqIE5PVEU6ICB0aGlzIHNob3VsZG4ndCBwb3dlciB1cCB1bnRpbCBsYXRlci4KIAkgKi8KLQlwcmludGsoIiVzOiByZWdpc3RlcmVkIGdhZGdldCBkcml2ZXIgJyVzJ1xuIiwgZGV2LT5nYWRnZXQubmFtZSwKLQkgICAgICAgZHJpdmVyLT5kcml2ZXIubmFtZSk7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHJlZ2lzdGVyZWQgZ2FkZ2V0IGRyaXZlciAnJXMnXG4iLAorCSAgICAgICBkZXYtPmdhZGdldC5uYW1lLCBkcml2ZXItPmRyaXZlci5uYW1lKTsKIAogCXVkY19lbmFibGUoZGV2KTsKIApAQCAtNTgxLDcgKzU4MSw4IEBACiAJCQkgKiBkaXNjYXJkIHRoZSBleHRyYSBkYXRhLgogCQkJICovCiAJCQlpZiAocmVxLT5yZXEuc3RhdHVzICE9IC1FT1ZFUkZMT1cpCi0JCQkJcHJpbnRrKCIlcyBvdmVyZmxvdyAlZFxuIiwgZXAtPmVwLm5hbWUsIGNvdW50KTsKKwkJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlcyBvdmVyZmxvdyAlZFxuIiwKKwkJCQkgICAgICAgZXAtPmVwLm5hbWUsIGNvdW50KTsKIAkJCXJlcS0+cmVxLnN0YXR1cyA9IC1FT1ZFUkZMT1c7CiAJCX0gZWxzZSB7CiAJCQkqYnVmKysgPSBieXRlOwpAQCAtODMxLDcgKzgzMiw4IEBACiAJCQkJCQkgICAgICAgcXVldWUpOwogCiAJCQkJaWYgKCFyZXEpIHsKLQkJCQkJcHJpbnRrKCIlczogTlVMTCBSRVEgJWRcbiIsCisJCQkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCQkJICAgICAgICIlczogTlVMTCBSRVEgJWRcbiIsCiAJCQkJCSAgICAgICBfX2Z1bmNfXywgZXBfaWR4KTsKIAkJCQkJZmx1c2goZXApOwogCQkJCQlicmVhazsKQEAgLTg0NCw3ICs4NDYsNyBAQAogCiAJfSBlbHNlIHsKIAkJLyogVGhyb3cgcGFja2V0IGF3YXkuLiAqLwotCQlwcmludGsoIiVzOiBObyBkZXNjcmlwdG9yPyE/XG4iLCBfX2Z1bmNfXyk7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBObyBkZXNjcmlwdG9yPyE/XG4iLCBfX2Z1bmNfXyk7CiAJCWZsdXNoKGVwKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvbmV0MjI4MC5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L25ldDIyODAuYwppbmRleCAxMmM2ZDgzLi45NDk4YmU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvbmV0MjI4MC5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9uZXQyMjgwLmMKQEAgLTE0Miw4ICsxNDIsOCBAQAogCiAjaW5jbHVkZSAibmV0MjI4MC5oIgogCi0jZGVmaW5lIHZhbGlkX2JpdAlfX2NvbnN0YW50X2NwdV90b19sZTMyICgxIDw8IFZBTElEX0JJVCkKLSNkZWZpbmUgZG1hX2RvbmVfaWUJX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMSA8PCBETUFfRE9ORV9JTlRFUlJVUFRfRU5BQkxFKQorI2RlZmluZSB2YWxpZF9iaXQJY3B1X3RvX2xlMzIgKDEgPDwgVkFMSURfQklUKQorI2RlZmluZSBkbWFfZG9uZV9pZQljcHVfdG9fbGUzMiAoMSA8PCBETUFfRE9ORV9JTlRFUlJVUFRfRU5BQkxFKQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC00MjUsNyArNDI1LDcgQEAKIAkJCXJldHVybiBOVUxMOwogCQl9CiAJCXRkLT5kbWFjb3VudCA9IDA7CS8qIG5vdCBWQUxJRCAqLwotCQl0ZC0+ZG1hYWRkciA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKERNQV9BRERSX0lOVkFMSUQpOworCQl0ZC0+ZG1hYWRkciA9IGNwdV90b19sZTMyIChETUFfQUREUl9JTlZBTElEKTsKIAkJdGQtPmRtYWRlc2MgPSB0ZC0+ZG1hYWRkcjsKIAkJcmVxLT50ZCA9IHRkOwogCX0KQEAgLTc3NSw3ICs3NzUsNyBAQAogCWZpbGxfZG1hX2Rlc2MgKGVwLCByZXEsIDEpOwogCiAJaWYgKCF1c2VfZG1hX2NoYWluaW5nKQotCQlyZXEtPnRkLT5kbWFjb3VudCB8PSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgxIDw8IEVORF9PRl9DSEFJTik7CisJCXJlcS0+dGQtPmRtYWNvdW50IHw9IGNwdV90b19sZTMyICgxIDw8IEVORF9PRl9DSEFJTik7CiAKIAlzdGFydF9xdWV1ZSAoZXAsIHRtcCwgcmVxLT50ZF9kbWEpOwogfQpAQCAtMjQwNyw5ICsyNDA3LDkgQEAKIAogCQkJaWYgKHJlYWRsICgmZS0+cmVncy0+ZXBfcnNwKQogCQkJCQkmICgxIDw8IFNFVF9FTkRQT0lOVF9IQUxUKSkKLQkJCQlzdGF0dXMgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgxKTsKKwkJCQlzdGF0dXMgPSBjcHVfdG9fbGUzMiAoMSk7CiAJCQllbHNlCi0JCQkJc3RhdHVzID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCk7CisJCQkJc3RhdHVzID0gY3B1X3RvX2xlMzIgKDApOwogCiAJCQkvKiBkb24ndCBib3RoZXIgd2l0aCBhIHJlcXVlc3Qgb2JqZWN0ISAqLwogCQkJd3JpdGVsICgwLCAmZGV2LT5lcHJlZ3MgWzBdLmVwX2lycWVuYik7CkBAIC0yNjY3LDcgKzI2NjcsNyBAQAogCQkJCXJlcSA9IGxpc3RfZW50cnkgKGVwLT5xdWV1ZS5uZXh0LAogCQkJCQkJc3RydWN0IG5ldDIyODBfcmVxdWVzdCwgcXVldWUpOwogCQkJCWRtYWNvdW50ID0gcmVxLT50ZC0+ZG1hY291bnQ7Ci0JCQkJZG1hY291bnQgJj0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoCisJCQkJZG1hY291bnQgJj0gY3B1X3RvX2xlMzIgKAogCQkJCQkJKDEgPDwgVkFMSURfQklUKQogCQkJCQkJfCBETUFfQllURV9DT1VOVF9NQVNLKTsKIAkJCQlpZiAoZG1hY291bnQgJiYgKGRtYWNvdW50ICYgdmFsaWRfYml0KSA9PSAwKQpAQCAtMjg4MSw3ICsyODgxLDcgQEAKIAkJCWdvdG8gZG9uZTsKIAkJfQogCQl0ZC0+ZG1hY291bnQgPSAwOwkvKiBub3QgVkFMSUQgKi8KLQkJdGQtPmRtYWFkZHIgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyIChETUFfQUREUl9JTlZBTElEKTsKKwkJdGQtPmRtYWFkZHIgPSBjcHVfdG9fbGUzMiAoRE1BX0FERFJfSU5WQUxJRCk7CiAJCXRkLT5kbWFkZXNjID0gdGQtPmRtYWFkZHI7CiAJCWRldi0+ZXAgW2ldLmR1bW15ID0gdGQ7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3ByaW50ZXIuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9wcmludGVyLmMKaW5kZXggNWEzMDM0Zi4uMjk1MDAxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3ByaW50ZXIuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcHJpbnRlci5jCkBAIC0yMjUsMTIgKzIyNSwxMiBAQAogc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2Rlc2NyaXB0b3IgZGV2aWNlX2Rlc2MgPSB7CiAJLmJMZW5ndGggPQkJc2l6ZW9mIGRldmljZV9kZXNjLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfREVWSUNFLAotCS5iY2RVU0IgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAyMDApLAorCS5iY2RVU0IgPQkJY3B1X3RvX2xlMTYoMHgwMjAwKSwKIAkuYkRldmljZUNsYXNzID0JCVVTQl9DTEFTU19QRVJfSU5URVJGQUNFLAogCS5iRGV2aWNlU3ViQ2xhc3MgPQkwLAogCS5iRGV2aWNlUHJvdG9jb2wgPQkwLAotCS5pZFZlbmRvciA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KFBSSU5URVJfVkVORE9SX05VTSksCi0JLmlkUHJvZHVjdCA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KFBSSU5URVJfUFJPRFVDVF9OVU0pLAorCS5pZFZlbmRvciA9CQljcHVfdG9fbGUxNihQUklOVEVSX1ZFTkRPUl9OVU0pLAorCS5pZFByb2R1Y3QgPQkJY3B1X3RvX2xlMTYoUFJJTlRFUl9QUk9EVUNUX05VTSksCiAJLmlNYW51ZmFjdHVyZXIgPQlTVFJJTkdfTUFOVUZBQ1RVUkVSLAogCS5pUHJvZHVjdCA9CQlTVFJJTkdfUFJPRFVDVCwKIAkuaVNlcmlhbE51bWJlciA9CVNUUklOR19TRVJJQUxOVU0sCkBAIC0yOTksMjAgKzI5OSwyMCBAQAogCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAotCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNTEyKQorCS53TWF4UGFja2V0U2l6ZSA9CWNwdV90b19sZTE2KDUxMikKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgaHNfZXBfb3V0X2Rlc2MgPSB7CiAJLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCi0JLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNig1MTIpCisJLndNYXhQYWNrZXRTaXplID0JY3B1X3RvX2xlMTYoNTEyKQogfTsKIAogc3RhdGljIHN0cnVjdCB1c2JfcXVhbGlmaWVyX2Rlc2NyaXB0b3IgZGV2X3F1YWxpZmllciA9IHsKIAkuYkxlbmd0aCA9CQlzaXplb2YgZGV2X3F1YWxpZmllciwKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0RFVklDRV9RVUFMSUZJRVIsCi0JLmJjZFVTQiA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDIwMCksCisJLmJjZFVTQiA9CQljcHVfdG9fbGUxNigweDAyMDApLAogCS5iRGV2aWNlQ2xhc3MgPQkJVVNCX0NMQVNTX1BSSU5URVIsCiAJLmJOdW1Db25maWd1cmF0aW9ucyA9CTEKIH07CkBAIC0xNDA2LDE2ICsxNDA2LDE2IEBACiAJCQlnYWRnZXQtPm5hbWUpOwogCQkvKiB1bnJlY29nbml6ZWQsIGJ1dCBzYWZlIHVubGVzcyBidWxrIGlzIFJFQUxMWSBxdWlya3kgKi8KIAkJZGV2aWNlX2Rlc2MuYmNkRGV2aWNlID0KLQkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHhGRkZGKTsKKwkJCWNwdV90b19sZTE2KDB4RkZGRik7CiAJfQogCXNucHJpbnRmKG1hbnVmYWN0dXJlciwgc2l6ZW9mKG1hbnVmYWN0dXJlciksICIlcyAlcyB3aXRoICVzIiwKIAkJaW5pdF91dHNuYW1lKCktPnN5c25hbWUsIGluaXRfdXRzbmFtZSgpLT5yZWxlYXNlLAogCQlnYWRnZXQtPm5hbWUpOwogCiAJZGV2aWNlX2Rlc2MuaWRWZW5kb3IgPQotCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KFBSSU5URVJfVkVORE9SX05VTSk7CisJCWNwdV90b19sZTE2KFBSSU5URVJfVkVORE9SX05VTSk7CiAJZGV2aWNlX2Rlc2MuaWRQcm9kdWN0ID0KLQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihQUklOVEVSX1BST0RVQ1RfTlVNKTsKKwkJY3B1X3RvX2xlMTYoUFJJTlRFUl9QUk9EVUNUX05VTSk7CiAKIAkvKiBzdXBwb3J0IG9wdGlvbmFsIHZlbmRvci9kaXN0cm8gY3VzdG9taXphdGlvbiAqLwogCWlmIChpZFZlbmRvcikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTI3eF91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyN3hfdWRjLmMKaW5kZXggOTkwZjQwZi4uOGNjNjc2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTI3eF91ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMjd4X3VkYy5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KIAogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CkBAIC0yNzgsNyArMjc5LDcgQEAKIAkJZ290byBlcnJfcXVldWVzOwogCWVwcyA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoImVwc3RhdGUiLCAwNDAwLCByb290LCB1ZGMsCiAJCQkmZXBzX2RiZ19mb3BzKTsKLQlpZiAoIXF1ZXVlcykKKwlpZiAoIWVwcykKIAkJZ290byBlcnJfZXBzOwogCiAJdWRjLT5kZWJ1Z2ZzX3Jvb3QgPSByb290OwpAQCAtNzQ3LDEzICs3NDgsMTMgQEAKIH0KIAogLyoqCi0gKiBlcF9lbmRfb3V0X3JlcSAtIEVuZHMgY29udHJvbCBlbmRwb2ludCBpbiByZXF1ZXN0CisgKiBlcF9lbmRfb3V0X3JlcSAtIEVuZHMgZW5kcG9pbnQgT1VUIHJlcXVlc3QKICAqIEBlcDogcGh5c2ljYWwgZW5kcG9pbnQKICAqIEByZXE6IHB4YSByZXF1ZXN0CiAgKgogICogQ29udGV4dDogZXAtPmxvY2sgaGVsZAogICoKLSAqIEVuZHMgZW5kcG9pbnQgaW4gcmVxdWVzdCAoY29tcGxldGVzIHVzYiByZXF1ZXN0KS4KKyAqIEVuZHMgZW5kcG9pbnQgT1VUIHJlcXVlc3QgKGNvbXBsZXRlcyB1c2IgcmVxdWVzdCkuCiAgKi8KIHN0YXRpYyB2b2lkIGVwX2VuZF9vdXRfcmVxKHN0cnVjdCBweGFfZXAgKmVwLCBzdHJ1Y3QgcHhhMjd4X3JlcXVlc3QgKnJlcSkKIHsKQEAgLTc2MiwxMyArNzYzLDEzIEBACiB9CiAKIC8qKgotICogZXAwX2VuZF9vdXRfcmVxIC0gRW5kcyBjb250cm9sIGVuZHBvaW50IGluIHJlcXVlc3QgKGVuZHMgZGF0YSBzdGFnZSkKKyAqIGVwMF9lbmRfb3V0X3JlcSAtIEVuZHMgY29udHJvbCBlbmRwb2ludCBPVVQgcmVxdWVzdCAoZW5kcyBkYXRhIHN0YWdlKQogICogQGVwOiBwaHlzaWNhbCBlbmRwb2ludAogICogQHJlcTogcHhhIHJlcXVlc3QKICAqCiAgKiBDb250ZXh0OiBlcC0+bG9jayBoZWxkCiAgKgotICogRW5kcyBjb250cm9sIGVuZHBvaW50IGluIHJlcXVlc3QgKGNvbXBsZXRlcyB1c2IgcmVxdWVzdCksIGFuZCBwdXRzCisgKiBFbmRzIGNvbnRyb2wgZW5kcG9pbnQgT1VUIHJlcXVlc3QgKGNvbXBsZXRlcyB1c2IgcmVxdWVzdCksIGFuZCBwdXRzCiAgKiBjb250cm9sIGVuZHBvaW50IGludG8gaWRsZSBzdGF0ZQogICovCiBzdGF0aWMgdm9pZCBlcDBfZW5kX291dF9yZXEoc3RydWN0IHB4YV9lcCAqZXAsIHN0cnVjdCBweGEyN3hfcmVxdWVzdCAqcmVxKQpAQCAtNzc5LDEzICs3ODAsMTMgQEAKIH0KIAogLyoqCi0gKiBlcF9lbmRfaW5fcmVxIC0gRW5kcyBlbmRwb2ludCBvdXQgcmVxdWVzdAorICogZXBfZW5kX2luX3JlcSAtIEVuZHMgZW5kcG9pbnQgSU4gcmVxdWVzdAogICogQGVwOiBwaHlzaWNhbCBlbmRwb2ludAogICogQHJlcTogcHhhIHJlcXVlc3QKICAqCiAgKiBDb250ZXh0OiBlcC0+bG9jayBoZWxkCiAgKgotICogRW5kcyBlbmRwb2ludCBvdXQgcmVxdWVzdCAoY29tcGxldGVzIHVzYiByZXF1ZXN0KS4KKyAqIEVuZHMgZW5kcG9pbnQgSU4gcmVxdWVzdCAoY29tcGxldGVzIHVzYiByZXF1ZXN0KS4KICAqLwogc3RhdGljIHZvaWQgZXBfZW5kX2luX3JlcShzdHJ1Y3QgcHhhX2VwICplcCwgc3RydWN0IHB4YTI3eF9yZXF1ZXN0ICpyZXEpCiB7CkBAIC03OTQsMjAgKzc5NSwxOCBAQAogfQogCiAvKioKLSAqIGVwMF9lbmRfaW5fcmVxIC0gRW5kcyBjb250cm9sIGVuZHBvaW50IG91dCByZXF1ZXN0IChlbmRzIGRhdGEgc3RhZ2UpCisgKiBlcDBfZW5kX2luX3JlcSAtIEVuZHMgY29udHJvbCBlbmRwb2ludCBJTiByZXF1ZXN0IChlbmRzIGRhdGEgc3RhZ2UpCiAgKiBAZXA6IHBoeXNpY2FsIGVuZHBvaW50CiAgKiBAcmVxOiBweGEgcmVxdWVzdAogICoKICAqIENvbnRleHQ6IGVwLT5sb2NrIGhlbGQKICAqCi0gKiBFbmRzIGNvbnRyb2wgZW5kcG9pbnQgb3V0IHJlcXVlc3QgKGNvbXBsZXRlcyB1c2IgcmVxdWVzdCksIGFuZCBwdXRzCisgKiBFbmRzIGNvbnRyb2wgZW5kcG9pbnQgSU4gcmVxdWVzdCAoY29tcGxldGVzIHVzYiByZXF1ZXN0KSwgYW5kIHB1dHMKICAqIGNvbnRyb2wgZW5kcG9pbnQgaW50byBzdGF0dXMgc3RhdGUKICAqLwogc3RhdGljIHZvaWQgZXAwX2VuZF9pbl9yZXEoc3RydWN0IHB4YV9lcCAqZXAsIHN0cnVjdCBweGEyN3hfcmVxdWVzdCAqcmVxKQogewotCXN0cnVjdCBweGFfdWRjICp1ZGMgPSBlcC0+ZGV2OwotCi0Jc2V0X2VwMHN0YXRlKHVkYywgSU5fU1RBVFVTX1NUQUdFKTsKKwlzZXRfZXAwc3RhdGUoZXAtPmRldiwgSU5fU1RBVFVTX1NUQUdFKTsKIAllcF9lbmRfaW5fcmVxKGVwLCByZXEpOwogfQogCkBAIC0xMTY3LDcgKzExNjYsNyBAQAogCQkJCWVwX2VuZF9pbl9yZXEoZXAsIHJlcSk7CiAJCQl9IGVsc2UgewogCQkJCWVwX2VycihlcCwgImdvdCBhIHJlcXVlc3Qgb2YgJWQgYnl0ZXMgd2hpbGUiCi0JCQkJCSJpbiBzdGF0ZSBXQVRJX0FDS19TRVRfQ09ORl9JTlRFUkZcbiIsCisJCQkJCSJpbiBzdGF0ZSBXQUlUX0FDS19TRVRfQ09ORl9JTlRFUkZcbiIsCiAJCQkJCWxlbmd0aCk7CiAJCQkJZXBfZGVsX3JlcXVlc3QoZXAsIHJlcSk7CiAJCQkJcmMgPSAtRUwySExUOwpAQCAtMTIxMywzMCArMTIxMiwyNiBAQAogCXN0cnVjdCB1ZGNfdXNiX2VwCSp1ZGNfdXNiX2VwOwogCXN0cnVjdCBweGEyN3hfcmVxdWVzdAkqcmVxOwogCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwotCWludAkJCXJjOworCWludAkJCXJjID0gLUVJTlZBTDsKIAogCWlmICghX2VwKQotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuIHJjOwogCXVkY191c2JfZXAgPSBjb250YWluZXJfb2YoX2VwLCBzdHJ1Y3QgdWRjX3VzYl9lcCwgdXNiX2VwKTsKIAllcCA9IHVkY191c2JfZXAtPnB4YV9lcDsKIAlpZiAoIWVwIHx8IGlzX2VwMChlcCkpCi0JCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gcmM7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZXAtPmxvY2ssIGZsYWdzKTsKIAogCS8qIG1ha2Ugc3VyZSBpdCdzIGFjdHVhbGx5IHF1ZXVlZCBvbiB0aGlzIGVuZHBvaW50ICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShyZXEsICZlcC0+cXVldWUsIHF1ZXVlKSB7Ci0JCWlmICgmcmVxLT5yZXEgPT0gX3JlcSkKKwkJaWYgKCZyZXEtPnJlcSA9PSBfcmVxKSB7CisJCQlyZXFfZG9uZShlcCwgcmVxLCAtRUNPTk5SRVNFVCk7CisJCQlyYyA9IDA7CiAJCQlicmVhazsKKwkJfQogCX0KIAotCXJjID0gLUVJTlZBTDsKLQlpZiAoJnJlcS0+cmVxICE9IF9yZXEpCi0JCWdvdG8gb3V0OwotCi0JcmMgPSAwOwotCXJlcV9kb25lKGVwLCByZXEsIC1FQ09OTlJFU0VUKTsKLW91dDoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlcC0+bG9jaywgZmxhZ3MpOwogCXJldHVybiByYzsKIH0KQEAgLTE0NzEsNiArMTQ2NiwzMiBAQAogCS5maWZvX2ZsdXNoCT0gcHhhX2VwX2ZpZm9fZmx1c2gsCiB9OwogCisvKioKKyAqIGRwbHVzX3B1bGx1cCAtIENvbm5lY3Qgb3IgZGlzY29ubmVjdCBwdWxsdXAgcmVzaXN0b3IgdG8gRCsgcGluCisgKiBAdWRjOiB1ZGMgZGV2aWNlCisgKiBAb246IDAgaWYgZGlzY29ubmVjdCBwdWxsdXAgcmVzaXN0b3IsIDEgb3RoZXJ3aXNlCisgKiBDb250ZXh0OiBhbnkKKyAqCisgKiBIYW5kbGUgRCsgcHVsbHVwIHJlc2lzdG9yLCBtYWtlIHRoZSBkZXZpY2UgdmlzaWJsZSB0byB0aGUgdXNiIGJ1cywgYW5kCisgKiBkZWNsYXJlIGl0IGFzIGEgZnVsbCBzcGVlZCB1c2IgZGV2aWNlCisgKi8KK3N0YXRpYyB2b2lkIGRwbHVzX3B1bGx1cChzdHJ1Y3QgcHhhX3VkYyAqdWRjLCBpbnQgb24pCit7CisJaWYgKG9uKSB7CisJCWlmIChncGlvX2lzX3ZhbGlkKHVkYy0+bWFjaC0+Z3Bpb19wdWxsdXApKQorCQkJZ3Bpb19zZXRfdmFsdWUodWRjLT5tYWNoLT5ncGlvX3B1bGx1cCwKKwkJCQkgICAgICAgIXVkYy0+bWFjaC0+Z3Bpb19wdWxsdXBfaW52ZXJ0ZWQpOworCQlpZiAodWRjLT5tYWNoLT51ZGNfY29tbWFuZCkKKwkJCXVkYy0+bWFjaC0+dWRjX2NvbW1hbmQoUFhBMlhYX1VEQ19DTURfQ09OTkVDVCk7CisJfSBlbHNlIHsKKwkJaWYgKGdwaW9faXNfdmFsaWQodWRjLT5tYWNoLT5ncGlvX3B1bGx1cCkpCisJCQlncGlvX3NldF92YWx1ZSh1ZGMtPm1hY2gtPmdwaW9fcHVsbHVwLAorCQkJCSAgICAgICB1ZGMtPm1hY2gtPmdwaW9fcHVsbHVwX2ludmVydGVkKTsKKwkJaWYgKHVkYy0+bWFjaC0+dWRjX2NvbW1hbmQpCisJCQl1ZGMtPm1hY2gtPnVkY19jb21tYW5kKFBYQTJYWF9VRENfQ01EX0RJU0NPTk5FQ1QpOworCX0KKwl1ZGMtPnB1bGx1cF9vbiA9IG9uOworfQogCiAvKioKICAqIHB4YV91ZGNfZ2V0X2ZyYW1lIC0gUmV0dXJucyB1c2IgZnJhbWUgbnVtYmVyCkBAIC0xNTAwLDIxICsxNTIxLDE0NSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCB1ZGNfZW5hYmxlKHN0cnVjdCBweGFfdWRjICp1ZGMpOworc3RhdGljIHZvaWQgdWRjX2Rpc2FibGUoc3RydWN0IHB4YV91ZGMgKnVkYyk7CisKKy8qKgorICogc2hvdWxkX2VuYWJsZV91ZGMgLSBUZWxscyBpZiBVREMgc2hvdWxkIGJlIGVuYWJsZWQKKyAqIEB1ZGM6IHVkYyBkZXZpY2UKKyAqIENvbnRleHQ6IGFueQorICoKKyAqIFRoZSBVREMgc2hvdWxkIGJlIGVuYWJsZWQgaWYgOgorCisgKiAgLSB0aGUgcHVsbHVwIHJlc2lzdG9yIGlzIGNvbm5lY3RlZAorICogIC0gYW5kIGEgZ2FkZ2V0IGRyaXZlciBpcyBib3VuZAorICogIC0gYW5kIHZidXMgaXMgc2Vuc2VkIChvciBubyB2YnVzIHNlbnNlIGlzIGF2YWlsYWJsZSkKKyAqCisgKiBSZXR1cm5zIDEgaWYgVURDIHNob3VsZCBiZSBlbmFibGVkLCAwIG90aGVyd2lzZQorICovCitzdGF0aWMgaW50IHNob3VsZF9lbmFibGVfdWRjKHN0cnVjdCBweGFfdWRjICp1ZGMpCit7CisJaW50IHB1dF9vbjsKKworCXB1dF9vbiA9ICgodWRjLT5wdWxsdXBfb24pICYmICh1ZGMtPmRyaXZlcikpOworCXB1dF9vbiAmPSAoKHVkYy0+dmJ1c19zZW5zZWQpIHx8ICghdWRjLT50cmFuc2NlaXZlcikpOworCXJldHVybiBwdXRfb247Cit9CisKKy8qKgorICogc2hvdWxkX2Rpc2FibGVfdWRjIC0gVGVsbHMgaWYgVURDIHNob3VsZCBiZSBkaXNhYmxlZAorICogQHVkYzogdWRjIGRldmljZQorICogQ29udGV4dDogYW55CisgKgorICogVGhlIFVEQyBzaG91bGQgYmUgZGlzYWJsZWQgaWYgOgorICogIC0gdGhlIHB1bGx1cCByZXNpc3RvciBpcyBub3QgY29ubmVjdGVkCisgKiAgLSBvciBubyBnYWRnZXQgZHJpdmVyIGlzIGJvdW5kCisgKiAgLSBvciBubyB2YnVzIGlzIHNlbnNlZCAod2hlbiB2YnVzIHNlc2luZyBpcyBhdmFpbGFibGUpCisgKgorICogUmV0dXJucyAxIGlmIFVEQyBzaG91bGQgYmUgZGlzYWJsZWQKKyAqLworc3RhdGljIGludCBzaG91bGRfZGlzYWJsZV91ZGMoc3RydWN0IHB4YV91ZGMgKnVkYykKK3sKKwlpbnQgcHV0X29mZjsKKworCXB1dF9vZmYgPSAoKCF1ZGMtPnB1bGx1cF9vbikgfHwgKCF1ZGMtPmRyaXZlcikpOworCXB1dF9vZmYgfD0gKCghdWRjLT52YnVzX3NlbnNlZCkgJiYgKHVkYy0+dHJhbnNjZWl2ZXIpKTsKKwlyZXR1cm4gcHV0X29mZjsKK30KKworLyoqCisgKiBweGFfdWRjX3B1bGx1cCAtIE9mZmVyIG1hbnVhbCBEKyBwdWxsdXAgY29udHJvbAorICogQF9nYWRnZXQ6IHVzYiBnYWRnZXQgdXNpbmcgdGhlIGNvbnRyb2wKKyAqIEBpc19hY3RpdmU6IDAgaWYgZGlzY29ubmVjdCwgZWxzZSBjb25uZWN0IEQrIHB1bGx1cCByZXNpc3RvcgorICogQ29udGV4dDogIWluX2ludGVycnVwdCgpCisgKgorICogUmV0dXJucyAwIGlmIE9LLCAtRU9QTk9UU1VQUCBpZiB1ZGMgZHJpdmVyIGRvZXNuJ3QgaGFuZGxlIEQrIHB1bGx1cAorICovCitzdGF0aWMgaW50IHB4YV91ZGNfcHVsbHVwKHN0cnVjdCB1c2JfZ2FkZ2V0ICpfZ2FkZ2V0LCBpbnQgaXNfYWN0aXZlKQoreworCXN0cnVjdCBweGFfdWRjICp1ZGMgPSB0b19nYWRnZXRfdWRjKF9nYWRnZXQpOworCisJaWYgKCFncGlvX2lzX3ZhbGlkKHVkYy0+bWFjaC0+Z3Bpb19wdWxsdXApICYmICF1ZGMtPm1hY2gtPnVkY19jb21tYW5kKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlkcGx1c19wdWxsdXAodWRjLCBpc19hY3RpdmUpOworCisJaWYgKHNob3VsZF9lbmFibGVfdWRjKHVkYykpCisJCXVkY19lbmFibGUodWRjKTsKKwlpZiAoc2hvdWxkX2Rpc2FibGVfdWRjKHVkYykpCisJCXVkY19kaXNhYmxlKHVkYyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHVkY19lbmFibGUoc3RydWN0IHB4YV91ZGMgKnVkYyk7CitzdGF0aWMgdm9pZCB1ZGNfZGlzYWJsZShzdHJ1Y3QgcHhhX3VkYyAqdWRjKTsKKworLyoqCisgKiBweGFfdWRjX3ZidXNfc2Vzc2lvbiAtIENhbGxlZCBieSBleHRlcm5hbCB0cmFuc2NlaXZlciB0byBlbmFibGUvZGlzYWJsZSB1ZGMKKyAqIEBfZ2FkZ2V0OiB1c2IgZ2FkZ2V0CisgKiBAaXNfYWN0aXZlOiAwIGlmIHNob3VsZCBkaXNhYmxlIHRoZSB1ZGMsIDEgaWYgc2hvdWxkIGVuYWJsZQorICoKKyAqIEVuYWJsZXMgdGhlIHVkYywgYW5kIG9wdGlvbm5hbHkgYWN0aXZhdGVzIEQrIHB1bGx1cCByZXNpc3Rvci4gT3IgZGlzYWJsZXMgdGhlCisgKiB1ZGMsIGFuZCBkZWFjdGl2YXRlcyBEKyBwdWxsdXAgcmVzaXN0b3IuCisgKgorICogUmV0dXJucyAwCisgKi8KK3N0YXRpYyBpbnQgcHhhX3VkY192YnVzX3Nlc3Npb24oc3RydWN0IHVzYl9nYWRnZXQgKl9nYWRnZXQsIGludCBpc19hY3RpdmUpCit7CisJc3RydWN0IHB4YV91ZGMgKnVkYyA9IHRvX2dhZGdldF91ZGMoX2dhZGdldCk7CisKKwl1ZGMtPnZidXNfc2Vuc2VkID0gaXNfYWN0aXZlOworCWlmIChzaG91bGRfZW5hYmxlX3VkYyh1ZGMpKQorCQl1ZGNfZW5hYmxlKHVkYyk7CisJaWYgKHNob3VsZF9kaXNhYmxlX3VkYyh1ZGMpKQorCQl1ZGNfZGlzYWJsZSh1ZGMpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogcHhhX3VkY192YnVzX2RyYXcgLSBDYWxsZWQgYnkgZ2FkZ2V0IGRyaXZlciBhZnRlciBTRVRfQ09ORklHVVJBVElPTiBjb21wbGV0ZWQKKyAqIEBfZ2FkZ2V0OiB1c2IgZ2FkZ2V0CisgKiBAbUE6IGN1cnJlbnQgZHJhd24KKyAqCisgKiBDb250ZXh0OiAhaW5faW50ZXJydXB0KCkKKyAqCisgKiBDYWxsZWQgYWZ0ZXIgYSBjb25maWd1cmF0aW9uIHdhcyBjaG9zZW4gYnkgYSBVU0IgaG9zdCwgdG8gaW5mb3JtIGhvdyBtdWNoCisgKiBjdXJyZW50IGNhbiBiZSBkcmF3biBieSB0aGUgZGV2aWNlIGZyb20gVkJ1cyBsaW5lLgorICoKKyAqIFJldHVybnMgMCBvciAtRU9QTk9UU1VQUCBpZiBubyB0cmFuc2NlaXZlciBpcyBoYW5kbGluZyB0aGUgdWRjCisgKi8KK3N0YXRpYyBpbnQgcHhhX3VkY192YnVzX2RyYXcoc3RydWN0IHVzYl9nYWRnZXQgKl9nYWRnZXQsIHVuc2lnbmVkIG1BKQoreworCXN0cnVjdCBweGFfdWRjICp1ZGM7CisKKwl1ZGMgPSB0b19nYWRnZXRfdWRjKF9nYWRnZXQpOworCWlmICh1ZGMtPnRyYW5zY2VpdmVyKQorCQlyZXR1cm4gb3RnX3NldF9wb3dlcih1ZGMtPnRyYW5zY2VpdmVyLCBtQSk7CisJcmV0dXJuIC1FT1BOT1RTVVBQOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9nYWRnZXRfb3BzIHB4YV91ZGNfb3BzID0gewogCS5nZXRfZnJhbWUJPSBweGFfdWRjX2dldF9mcmFtZSwKIAkud2FrZXVwCQk9IHB4YV91ZGNfd2FrZXVwLAotCS8qIGN1cnJlbnQgdmVyc2lvbnMgbXVzdCBhbHdheXMgYmUgc2VsZi1wb3dlcmVkICovCisJLnB1bGx1cAkJPSBweGFfdWRjX3B1bGx1cCwKKwkudmJ1c19zZXNzaW9uCT0gcHhhX3VkY192YnVzX3Nlc3Npb24sCisJLnZidXNfZHJhdwk9IHB4YV91ZGNfdmJ1c19kcmF3LAogfTsKIAogLyoqCiAgKiB1ZGNfZGlzYWJsZSAtIGRpc2FibGUgdWRjIGRldmljZSBjb250cm9sbGVyCiAgKiBAdWRjOiB1ZGMgZGV2aWNlCisgKiBDb250ZXh0OiBhbnkKICAqCiAgKiBEaXNhYmxlcyB0aGUgdWRjIGRldmljZSA6IGRpc2FibGVzIGNsb2NrcywgdWRjIGludGVycnVwdHMsIGNvbnRyb2wgZW5kcG9pbnQKICAqIGludGVycnVwdHMuCiAgKi8KIHN0YXRpYyB2b2lkIHVkY19kaXNhYmxlKHN0cnVjdCBweGFfdWRjICp1ZGMpCiB7CisJaWYgKCF1ZGMtPmVuYWJsZWQpCisJCXJldHVybjsKKwogCXVkY193cml0ZWwodWRjLCBVRENJQ1IwLCAwKTsKIAl1ZGNfd3JpdGVsKHVkYywgVURDSUNSMSwgMCk7CiAKQEAgLTE1MjMsOCArMTY2OCw4IEBACiAKIAllcDBfaWRsZSh1ZGMpOwogCXVkYy0+Z2FkZ2V0LnNwZWVkID0gVVNCX1NQRUVEX1VOS05PV047Ci0JaWYgKHVkYy0+bWFjaC0+dWRjX2NvbW1hbmQpCi0JCXVkYy0+bWFjaC0+dWRjX2NvbW1hbmQoUFhBMlhYX1VEQ19DTURfRElTQ09OTkVDVCk7CisKKwl1ZGMtPmVuYWJsZWQgPSAwOwogfQogCiAvKioKQEAgLTE1NTUsMTAgKzE3MDAsOSBAQAogCX0KIAogCS8qIFVTQiBlbmRwb2ludHMgaW5pdCAqLwotCWZvciAoaSA9IDA7IGkgPCBOUl9VU0JfRU5EUE9JTlRTOyBpKyspCi0JCWlmIChpICE9IDApCi0JCQlsaXN0X2FkZF90YWlsKCZkZXYtPnVkY191c2JfZXBbaV0udXNiX2VwLmVwX2xpc3QsCi0JCQkJCSZkZXYtPmdhZGdldC5lcF9saXN0KTsKKwlmb3IgKGkgPSAxOyBpIDwgTlJfVVNCX0VORFBPSU5UUzsgaSsrKQorCQlsaXN0X2FkZF90YWlsKCZkZXYtPnVkY191c2JfZXBbaV0udXNiX2VwLmVwX2xpc3QsCisJCQkJJmRldi0+Z2FkZ2V0LmVwX2xpc3QpOwogfQogCiAvKioKQEAgLTE1NzAsNiArMTcxNCw5IEBACiAgKi8KIHN0YXRpYyB2b2lkIHVkY19lbmFibGUoc3RydWN0IHB4YV91ZGMgKnVkYykKIHsKKwlpZiAodWRjLT5lbmFibGVkKQorCQlyZXR1cm47CisKIAl1ZGNfd3JpdGVsKHVkYywgVURDSUNSMCwgMCk7CiAJdWRjX3dyaXRlbCh1ZGMsIFVEQ0lDUjEsIDApOwogCXVkY19jbGVhcl9tYXNrX1VEQ0NSKHVkYywgVURDQ1JfVURFKTsKQEAgLTE1OTgsOSArMTc0NSw3IEBACiAJLyogZW5hYmxlIGVwMCBpcnFzICovCiAJcGlvX2lycV9lbmFibGUoJnVkYy0+cHhhX2VwWzBdKTsKIAotCWRldl9pbmZvKHVkYy0+ZGV2LCAiVURDIGNvbm5lY3RpbmdcbiIpOwotCWlmICh1ZGMtPm1hY2gtPnVkY19jb21tYW5kKQotCQl1ZGMtPm1hY2gtPnVkY19jb21tYW5kKFBYQTJYWF9VRENfQ01EX0NPTk5FQ1QpOworCXVkYy0+ZW5hYmxlZCA9IDE7CiB9CiAKIC8qKgpAQCAtMTYxMiw2ICsxNzU3LDkgQEAKICAqIHVzYiB0cmFmZmljIGZvbGxvd3MgdW50aWwgYSBkaXNjb25uZWN0IGlzIHJlcG9ydGVkLiAgVGhlbiBhIGhvc3QgbWF5IGNvbm5lY3QKICAqIGFnYWluLCBvciB0aGUgZHJpdmVyIG1pZ2h0IGdldCB1bmJvdW5kLgogICoKKyAqIE5vdGUgdGhhdCB0aGUgdWRjIGlzIG5vdCBhdXRvbWF0aWNhbGx5IGVuYWJsZWQuIENoZWNrIGZ1bmN0aW9uCisgKiBzaG91bGRfZW5hYmxlX3VkYygpLgorICoKICAqIFJldHVybnMgMCBpZiBubyBlcnJvciwgLUVJTlZBTCwgLUVOT0RFViwgLUVCVVNZIG90aGVyd2lzZQogICovCiBpbnQgdXNiX2dhZGdldF9yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIpCkBAIC0xNjMwLDYgKzE3NzgsNyBAQAogCS8qIGZpcnN0IGhvb2sgdXAgdGhlIGRyaXZlciAuLi4gKi8KIAl1ZGMtPmRyaXZlciA9IGRyaXZlcjsKIAl1ZGMtPmdhZGdldC5kZXYuZHJpdmVyID0gJmRyaXZlci0+ZHJpdmVyOworCWRwbHVzX3B1bGx1cCh1ZGMsIDEpOwogCiAJcmV0dmFsID0gZGV2aWNlX2FkZCgmdWRjLT5nYWRnZXQuZGV2KTsKIAlpZiAocmV0dmFsKSB7CkBAIC0xNjQ1LDkgKzE3OTQsMjEgQEAKIAlkZXZfZGJnKHVkYy0+ZGV2LCAicmVnaXN0ZXJlZCBnYWRnZXQgZHJpdmVyICclcydcbiIsCiAJCWRyaXZlci0+ZHJpdmVyLm5hbWUpOwogCi0JdWRjX2VuYWJsZSh1ZGMpOworCWlmICh1ZGMtPnRyYW5zY2VpdmVyKSB7CisJCXJldHZhbCA9IG90Z19zZXRfcGVyaXBoZXJhbCh1ZGMtPnRyYW5zY2VpdmVyLCAmdWRjLT5nYWRnZXQpOworCQlpZiAocmV0dmFsKSB7CisJCQlkZXZfZXJyKHVkYy0+ZGV2LCAiY2FuJ3QgYmluZCB0byB0cmFuc2NlaXZlclxuIik7CisJCQlnb3RvIHRyYW5zY2VpdmVyX2ZhaWw7CisJCX0KKwl9CisKKwlpZiAoc2hvdWxkX2VuYWJsZV91ZGModWRjKSkKKwkJdWRjX2VuYWJsZSh1ZGMpOwogCXJldHVybiAwOwogCit0cmFuc2NlaXZlcl9mYWlsOgorCWlmIChkcml2ZXItPnVuYmluZCkKKwkJZHJpdmVyLT51bmJpbmQoJnVkYy0+Z2FkZ2V0KTsKIGJpbmRfZmFpbDoKIAlkZXZpY2VfZGVsKCZ1ZGMtPmdhZGdldC5kZXYpOwogYWRkX2ZhaWw6CkBAIC0xNjk5LDE0ICsxODYwLDE3IEBACiAKIAlzdG9wX2FjdGl2aXR5KHVkYywgZHJpdmVyKTsKIAl1ZGNfZGlzYWJsZSh1ZGMpOworCWRwbHVzX3B1bGx1cCh1ZGMsIDApOwogCiAJZHJpdmVyLT51bmJpbmQoJnVkYy0+Z2FkZ2V0KTsKIAl1ZGMtPmRyaXZlciA9IE5VTEw7CiAKIAlkZXZpY2VfZGVsKCZ1ZGMtPmdhZGdldC5kZXYpOwotCiAJZGV2X2luZm8odWRjLT5kZXYsICJ1bnJlZ2lzdGVyZWQgZ2FkZ2V0IGRyaXZlciAnJXMnXG4iLAogCQkgZHJpdmVyLT5kcml2ZXIubmFtZSk7CisKKwlpZiAodWRjLT50cmFuc2NlaXZlcikKKwkJcmV0dXJuIG90Z19zZXRfcGVyaXBoZXJhbCh1ZGMtPnRyYW5zY2VpdmVyLCBOVUxMKTsKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0wodXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcik7CkBAIC0xODIzLDE0ICsxOTg3LDE0IEBACiAJc3RydWN0IHB4YTI3eF9yZXF1ZXN0CSpyZXEgPSBOVUxMOwogCWludAkJCWNvbXBsZXRlZCA9IDA7CiAKKwlpZiAoIWxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpCisJCXJlcSA9IGxpc3RfZW50cnkoZXAtPnF1ZXVlLm5leHQsIHN0cnVjdCBweGEyN3hfcmVxdWVzdCwgcXVldWUpOworCiAJdWRjY3NyMCA9IHVkY19lcF9yZWFkbChlcCwgVURDQ1NSKTsKIAllcF9kYmcoZXAsICJzdGF0ZT0lcywgcmVxPSVwLCB1ZGNjc3IwPTB4JTAzeCwgdWRjYmNyPSVkLCBpcnFfbXNrPSV4XG4iLAogCQlFUDBfU1ROQU1FKHVkYyksIHJlcSwgdWRjY3NyMCwgdWRjX2VwX3JlYWRsKGVwLCBVRENCQ1IpLAogCQkoZmlmb19pcnEgPDwgMSB8IG9wY19pcnEpKTsKIAotCWlmICghbGlzdF9lbXB0eSgmZXAtPnF1ZXVlKSkKLQkJcmVxID0gbGlzdF9lbnRyeShlcC0+cXVldWUubmV4dCwgc3RydWN0IHB4YTI3eF9yZXF1ZXN0LCBxdWV1ZSk7Ci0KIAlpZiAodWRjY3NyMCAmIFVEQ0NTUjBfU1NUKSB7CiAJCWVwX2RiZyhlcCwgImNsZWFyaW5nIHN0YWxsIHN0YXR1c1xuIik7CiAJCW51a2UoZXAsIC1FUElQRSk7CkBAIC0yMjEyLDcgKzIzNzYsNyBAQAogewogCXN0cnVjdCByZXNvdXJjZSAqcmVnczsKIAlzdHJ1Y3QgcHhhX3VkYyAqdWRjID0gJm1lbW9yeTsKLQlpbnQgcmV0dmFsOworCWludCByZXR2YWwgPSAwLCBncGlvOwogCiAJcmVncyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJaWYgKCFyZWdzKQpAQCAtMjIyMyw2ICsyMzg3LDIwIEBACiAKIAl1ZGMtPmRldiA9ICZwZGV2LT5kZXY7CiAJdWRjLT5tYWNoID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJdWRjLT50cmFuc2NlaXZlciA9IG90Z19nZXRfdHJhbnNjZWl2ZXIoKTsKKworCWdwaW8gPSB1ZGMtPm1hY2gtPmdwaW9fcHVsbHVwOworCWlmIChncGlvX2lzX3ZhbGlkKGdwaW8pKSB7CisJCXJldHZhbCA9IGdwaW9fcmVxdWVzdChncGlvLCAiVVNCIEQrIHB1bGx1cCIpOworCQlpZiAocmV0dmFsID09IDApCisJCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoZ3BpbywKKwkJCQkgICAgICAgdWRjLT5tYWNoLT5ncGlvX3B1bGx1cF9pbnZlcnRlZCk7CisJfQorCWlmIChyZXR2YWwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ291bGRuJ3QgcmVxdWVzdCBncGlvICVkIDogJWRcbiIsCisJCQlncGlvLCByZXR2YWwpOworCQlyZXR1cm4gcmV0dmFsOworCX0KIAogCXVkYy0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCBOVUxMKTsKIAlpZiAoSVNfRVJSKHVkYy0+Y2xrKSkgewpAQCAtMjI0MCw2ICsyNDE4LDcgQEAKIAlkZXZpY2VfaW5pdGlhbGl6ZSgmdWRjLT5nYWRnZXQuZGV2KTsKIAl1ZGMtPmdhZGdldC5kZXYucGFyZW50ID0gJnBkZXYtPmRldjsKIAl1ZGMtPmdhZGdldC5kZXYuZG1hX21hc2sgPSBOVUxMOworCXVkYy0+dmJ1c19zZW5zZWQgPSAwOwogCiAJdGhlX2NvbnRyb2xsZXIgPSB1ZGM7CiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgdWRjKTsKQEAgLTIyNzMsMTQgKzI0NTIsMjEgQEAKIHN0YXRpYyBpbnQgX19leGl0IHB4YV91ZGNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKl9kZXYpCiB7CiAJc3RydWN0IHB4YV91ZGMgKnVkYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKF9kZXYpOworCWludCBncGlvID0gdWRjLT5tYWNoLT5ncGlvX3B1bGx1cDsKIAogCXVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXIodWRjLT5kcml2ZXIpOwogCWZyZWVfaXJxKHVkYy0+aXJxLCB1ZGMpOwogCXB4YV9jbGVhbnVwX2RlYnVnZnModWRjKTsKKwlpZiAoZ3Bpb19pc192YWxpZChncGlvKSkKKwkJZ3Bpb19mcmVlKGdwaW8pOwogCisJb3RnX3B1dF90cmFuc2NlaXZlcih1ZGMtPnRyYW5zY2VpdmVyKTsKKworCXVkYy0+dHJhbnNjZWl2ZXIgPSBOVUxMOwogCXBsYXRmb3JtX3NldF9kcnZkYXRhKF9kZXYsIE5VTEwpOwogCXRoZV9jb250cm9sbGVyID0gTlVMTDsKIAljbGtfcHV0KHVkYy0+Y2xrKTsKKwlpb3VubWFwKHVkYy0+cmVncyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTIzMTksNiArMjUwNSw4IEBACiAJfQogCiAJdWRjX2Rpc2FibGUodWRjKTsKKwl1ZGMtPnB1bGx1cF9yZXN1bWUgPSB1ZGMtPnB1bGx1cF9vbjsKKwlkcGx1c19wdWxsdXAodWRjLCAwKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjM0Niw3ICsyNTM0LDkgQEAKIAkJCQllcC0+dWRjY3NyX3ZhbHVlLCBlcC0+dWRjY3JfdmFsdWUpOwogCX0KIAotCXVkY19lbmFibGUodWRjKTsKKwlkcGx1c19wdWxsdXAodWRjLCB1ZGMtPnB1bGx1cF9yZXN1bWUpOworCWlmIChzaG91bGRfZW5hYmxlX3VkYyh1ZGMpKQorCQl1ZGNfZW5hYmxlKHVkYyk7CiAJLyoKIAkgKiBXZSBkbyBub3QgaGFuZGxlIE9URyB5ZXQuCiAJICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyN3hfdWRjLmggYi9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMjd4X3VkYy5oCmluZGV4IDFkMWI3OTM2Li5kYjU4MTI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMjd4X3VkYy5oCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyN3hfdWRjLmgKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+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+Yl9yZWFkID49IGhkcmJ5dGVzICsgZXAtPmxlbl9jYXApIHsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnJwLT5iX2xvY2ssIGZsYWdzKTsKIAkJbW9uX2J1ZmZfYXJlYV9mcmVlKHJwLCBQS1RfU0laRSArIGVwLT5sZW5fY2FwKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnAtPmJfbG9jaywgZmxhZ3MpOwpAQCAtOTA4LDYgKzk5NCw3IEBACiAJCWJyZWFrOwogCiAJY2FzZSBNT05fSU9DWF9HRVQ6CisJY2FzZSBNT05fSU9DWF9HRVRYOgogCQl7CiAJCXN0cnVjdCBtb25fYmluX2dldCBnZXRiOwogCkBAIC05MTcsOCArMTAwNCw5IEBACiAKIAkJaWYgKGdldGIuYWxsb2MgPiAweDEwMDAwMDAwKQkvKiBXYW50IHRvIGNhc3QgdG8gdTMyICovCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJcmV0ID0gbW9uX2Jpbl9nZXRfZXZlbnQoZmlsZSwgcnAsCi0JCQkgIGdldGIuaGRyLCBnZXRiLmRhdGEsICh1bnNpZ25lZCBpbnQpZ2V0Yi5hbGxvYyk7CisJCXJldCA9IG1vbl9iaW5fZ2V0X2V2ZW50KGZpbGUsIHJwLCBnZXRiLmhkciwKKwkJICAgIChjbWQgPT0gTU9OX0lPQ1hfR0VUKT8gUEtUX1NaX0FQSTA6IFBLVF9TWl9BUEkxLAorCQkgICAgZ2V0Yi5kYXRhLCAodW5zaWduZWQgaW50KWdldGIuYWxsb2MpOwogCQl9CiAJCWJyZWFrOwogCkBAIC05ODQsMTYgKzEwNzIsMTggQEAKIAogCXN3aXRjaCAoY21kKSB7CiAKLQljYXNlIE1PTl9JT0NYX0dFVDMyOiB7CisJY2FzZSBNT05fSU9DWF9HRVQzMjoKKwljYXNlIE1PTl9JT0NYX0dFVFgzMjoKKwkJewogCQlzdHJ1Y3QgbW9uX2Jpbl9nZXQzMiBnZXRiOwogCiAJCWlmIChjb3B5X2Zyb21fdXNlcigmZ2V0YiwgKHZvaWQgX191c2VyICopYXJnLAogCQkJCQkgICAgc2l6ZW9mKHN0cnVjdCBtb25fYmluX2dldDMyKSkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAotCQlyZXQgPSBtb25fYmluX2dldF9ldmVudChmaWxlLCBycCwKLQkJICAgIGNvbXBhdF9wdHIoZ2V0Yi5oZHIzMiksIGNvbXBhdF9wdHIoZ2V0Yi5kYXRhMzIpLAotCQkgICAgZ2V0Yi5hbGxvYzMyKTsKKwkJcmV0ID0gbW9uX2Jpbl9nZXRfZXZlbnQoZmlsZSwgcnAsIGNvbXBhdF9wdHIoZ2V0Yi5oZHIzMiksCisJCSAgICAoY21kID09IE1PTl9JT0NYX0dFVDMyKT8gUEtUX1NaX0FQSTA6IFBLVF9TWl9BUEkxLAorCQkgICAgY29tcGF0X3B0cihnZXRiLmRhdGEzMiksIGdldGIuYWxsb2MzMik7CiAJCWlmIChyZXQgPCAwKQogCQkJcmV0dXJuIHJldDsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9LY29uZmlnIGIvZHJpdmVycy91c2IvbXVzYi9LY29uZmlnCmluZGV4IDk5ODVkYjAuLmI2NmU4NTQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvbXVzYi9LY29uZmlnCkBAIC0yMCw4ICsyMCw4IEBACiAJICBpdCdzIGJlaW5nIHVzZWQgd2l0aCwgaW5jbHVkaW5nIHRoZSBVU0IgcGVyaXBoZXJhbCByb2xlLAogCSAgb3IgdGhlIFVTQiBob3N0IHJvbGUsIG9yIGJvdGguCiAKLQkgIFRleGFzIEluc3RydW1lbnRzIHBhcnRzIHVzaW5nIHRoaXMgSVAgaW5jbHVkZSBEYVZpbmNpIDY0NHgsCi0JICBPTUFQIDI0M3gsIE9NQVAgMzQzeCwgYW5kIFRVU0IgNjAxMC4KKwkgIFRleGFzIEluc3RydW1lbnRzIGZhbWlsaWllcyB1c2luZyB0aGlzIElQIGluY2x1ZGUgRGFWaW5jaQorCSAgKDM1eCwgNjQ0eCAuLi4pLCBPTUFQIDI0M3gsIE9NQVAgMywgYW5kIFRVU0IgNjAxMC4KIAogCSAgQW5hbG9nIERldmljZXMgcGFydHMgdXNpbmcgdGhpcyBJUCBpbmNsdWRlIEJsYWNrZmluIEJGNTR4LAogCSAgQkY1MjUgYW5kIEJGNTI3LgpAQCAtNDAsNyArNDAsNyBAQAogCWRlZmF1bHQgeSBpZiAoQkY1NHggJiYgIUJGNTQ0KQogCWRlZmF1bHQgeSBpZiAoQkY1MnggJiYgIUJGNTIyICYmICFCRjUyMykKIAotY29tbWVudCAiRGFWaW5jaSA2NDR4IFVTQiBzdXBwb3J0IgorY29tbWVudCAiRGFWaW5jaSAzNXggYW5kIDY0NHggVVNCIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBVU0JfTVVTQl9IRFJDICYmIEFSQ0hfREFWSU5DSQogCiBjb21tZW50ICJPTUFQIDI0M3ggaGlnaCBzcGVlZCBVU0Igc3VwcG9ydCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvZGF2aW5jaS5jIGIvZHJpdmVycy91c2IvbXVzYi9kYXZpbmNpLmMKaW5kZXggMmRjNzYwNi4uMTBkMTFhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9kYXZpbmNpLmMKKysrIGIvZHJpdmVycy91c2IvbXVzYi9kYXZpbmNpLmMKQEAgLTQ4LDYgKzQ4LDkgQEAKICNpbmNsdWRlICJjcHBpX2RtYS5oIgogCiAKKyNkZWZpbmUgVVNCX1BIWV9DVFJMCUlPX0FERFJFU1MoVVNCUEhZX0NUTF9QQUREUikKKyNkZWZpbmUgRE0zNTVfREVFUFNMRUVQCUlPX0FERFJFU1MoRE0zNTVfREVFUFNMRUVQX1BBRERSKQorCiAvKiBSRVZJU0lUIChQTSkgd2Ugc2hvdWxkIGJlIGFibGUgdG8ga2VlcCB0aGUgUEhZIGluIGxvdyBwb3dlciBtb2RlIG1vc3QKICAqIG9mIHRoZSB0aW1lICgyNCBNSFogb3NjaWxsYXRvciBhbmQgUExMIG9mZiwgZXRjKSBieSBzZXR0aW5nIFBPV0VSLkQwCiAgKiBhbmQsIHdoZW4gaW4gaG9zdCBtb2RlLCBhdXRvc3VzcGVuZGluZyBpZGxlIHJvb3QgcG9ydHMuLi4gUEhZUExMT04KQEAgLTU2LDIwICs1OSwyNiBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgcGh5X29uKHZvaWQpCiB7Ci0JLyogc3RhcnQgdGhlIG9uLWNoaXAgUEhZIGFuZCBpdHMgUExMICovCi0JX19yYXdfd3JpdGVsKFVTQlBIWV9TRVNOREVOIHwgVVNCUEhZX1ZCRFRDVEVOIHwgVVNCUEhZX1BIWVBMTE9OLAotCQkJKHZvaWQgX19mb3JjZSBfX2lvbWVtICopIElPX0FERFJFU1MoVVNCUEhZX0NUTF9QQUREUikpOwotCXdoaWxlICgoX19yYXdfcmVhZGwoKHZvaWQgX19mb3JjZSBfX2lvbWVtICopCi0JCQkJSU9fQUREUkVTUyhVU0JQSFlfQ1RMX1BBRERSKSkKLQkJCSYgVVNCUEhZX1BIWUNMS0dEKSA9PSAwKQorCXUzMglwaHlfY3RybCA9IF9fcmF3X3JlYWRsKFVTQl9QSFlfQ1RSTCk7CisKKwkvKiBwb3dlciBldmVyeXRoaW5nIHVwOyBzdGFydCB0aGUgb24tY2hpcCBQSFkgYW5kIGl0cyBQTEwgKi8KKwlwaHlfY3RybCAmPSB+KFVTQlBIWV9PU0NQRFdOIHwgVVNCUEhZX09UR1BEV04gfCBVU0JQSFlfUEhZUERXTik7CisJcGh5X2N0cmwgfD0gVVNCUEhZX1NFU05ERU4gfCBVU0JQSFlfVkJEVENURU4gfCBVU0JQSFlfUEhZUExMT047CisJX19yYXdfd3JpdGVsKHBoeV9jdHJsLCBVU0JfUEhZX0NUUkwpOworCisJLyogd2FpdCBmb3IgUExMIHRvIGxvY2sgYmVmb3JlIHByb2NlZWRpbmcgKi8KKwl3aGlsZSAoKF9fcmF3X3JlYWRsKFVTQl9QSFlfQ1RSTCkgJiBVU0JQSFlfUEhZQ0xLR0QpID09IDApCiAJCWNwdV9yZWxheCgpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcGh5X29mZih2b2lkKQogewotCS8qIHBvd2VyZG93biB0aGUgb24tY2hpcCBQSFkgYW5kIGl0cyBvc2NpbGxhdG9yICovCi0JX19yYXdfd3JpdGVsKFVTQlBIWV9PU0NQRFdOIHwgVVNCUEhZX1BIWVBEV04sICh2b2lkIF9fZm9yY2UgX19pb21lbSAqKQotCQkJSU9fQUREUkVTUyhVU0JQSFlfQ1RMX1BBRERSKSk7CisJdTMyCXBoeV9jdHJsID0gX19yYXdfcmVhZGwoVVNCX1BIWV9DVFJMKTsKKworCS8qIHBvd2VyZG93biB0aGUgb24tY2hpcCBQSFksIGl0cyBQTEwsIGFuZCB0aGUgT1RHIGJsb2NrICovCisJcGh5X2N0cmwgJj0gfihVU0JQSFlfU0VTTkRFTiB8IFVTQlBIWV9WQkRUQ1RFTiB8IFVTQlBIWV9QSFlQTExPTik7CisJcGh5X2N0cmwgfD0gVVNCUEhZX09TQ1BEV04gfCBVU0JQSFlfT1RHUERXTiB8IFVTQlBIWV9QSFlQRFdOOworCV9fcmF3X3dyaXRlbChwaHlfY3RybCwgVVNCX1BIWV9DVFJMKTsKIH0KIAogc3RhdGljIGludCBkbWFfb2ZmID0gMTsKQEAgLTEyNiwxMCArMTM1LDYgQEAKIH0KIAogCi0vKiBSRVZJU0lUIGl0J3Mgbm90IGNsZWFyIHdoZXRoZXIgRGFWaW5jaSBjYW4gc3VwcG9ydCBmdWxsIE9URy4gICovCi0KLXN0YXRpYyBpbnQgdmJ1c19zdGF0ZSA9IC0xOwotCiAjaWZkZWYgQ09ORklHX1VTQl9NVVNCX0hEUkNfSENECiAjZGVmaW5lCXBvcnRzdGF0ZShzdG10KQkJc3RtdAogI2Vsc2UKQEAgLTEzNywxMCArMTQyLDE5IEBACiAjZW5kaWYKIAogCi0vKiBWQlVTIFNXSVRDSElORyBJUyBCT0FSRC1TUEVDSUZJQyAqLworLyoKKyAqIFZCVVMgU1dJVENISU5HIElTIEJPQVJELVNQRUNJRklDIC4uLiBhdCBsZWFzdCBmb3IgdGhlIERNNjQ0NiBFVk0sCisgKiB3aGljaCBkb2Vzbid0IHdpcmUgRFJWVkJVUyB0byB0aGUgRkVUIHRoYXQgc3dpdGNoZXMgaXQuICBVbmNsZWFyCisgKiBpZiB0aGF0J3MgYSBwcm9ibGVtIHdpdGggdGhlIERNNjQ0NiBjaGlwIG9yIGp1c3Qgd2l0aCB0aGF0IGJvYXJkLgorICoKKyAqIEluIGVpdGhlciBjYXNlLCB0aGUgRE0zNTUgRVZNIGF1dG9tYXRlcyBEUlZWQlVTIHRoZSBub3JtYWwgd2F5LAorICogd2hlbiBKMTAgaXMgb3V0LCBhbmQgVEkgZG9jdW1lbnRzIGl0IGFzIGhhbmRsaW5nIE9URy4KKyAqLwogCiAjaWZkZWYgQ09ORklHX01BQ0hfREFWSU5DSV9FVk0KIAorc3RhdGljIGludCB2YnVzX3N0YXRlID0gLTE7CisKIC8qIEkyQyBvcGVyYXRpb25zIGFyZSBhbHdheXMgc3luY2hyb25vdXMsIGFuZCByZXF1aXJlIGEgdGFzayBjb250ZXh0LgogICogV2l0aCB1bmxvYWRlZCBzeXN0ZW1zLCB1c2luZyB0aGUgc2hhcmVkIHdvcmtxdWV1ZSBzZWVtcyB0byBzdWZmaWNlCiAgKiB0byBzYXRpc2Z5IHRoZSAxMDBtc2VjIEFfV0FJVF9WUklTRSB0aW1lb3V0Li4uCkBAIC0xNTAsMTIgKzE2NCwxMiBAQAogCWdwaW9fc2V0X3ZhbHVlX2NhbnNsZWVwKEdQSU9fblZCVVNfRFJWLCB2YnVzX3N0YXRlKTsKIAl2YnVzX3N0YXRlID0gIXZidXNfc3RhdGU7CiB9Ci1zdGF0aWMgREVDTEFSRV9XT1JLKGV2bV92YnVzX3dvcmssIGV2bV9kZWZlcnJlZF9kcnZ2YnVzKTsKIAogI2VuZGlmCS8qIEVWTSAqLwogCiBzdGF0aWMgdm9pZCBkYXZpbmNpX3NvdXJjZV9wb3dlcihzdHJ1Y3QgbXVzYiAqbXVzYiwgaW50IGlzX29uLCBpbnQgaW1tZWRpYXRlKQogeworI2lmZGVmIENPTkZJR19NQUNIX0RBVklOQ0lfRVZNCiAJaWYgKGlzX29uKQogCQlpc19vbiA9IDE7CiAKQEAgLTE2MywxNiArMTc3LDE3IEBACiAJCXJldHVybjsKIAl2YnVzX3N0YXRlID0gIWlzX29uOwkJLyogMC8xIHZzICItMSA9PSB1bmtub3duL2luaXQiICovCiAKLSNpZmRlZiBDT05GSUdfTUFDSF9EQVZJTkNJX0VWTQogCWlmIChtYWNoaW5lX2lzX2RhdmluY2lfZXZtKCkpIHsKKwkJc3RhdGljIERFQ0xBUkVfV09SSyhldm1fdmJ1c193b3JrLCBldm1fZGVmZXJyZWRfZHJ2dmJ1cyk7CisKIAkJaWYgKGltbWVkaWF0ZSkKIAkJCWdwaW9fc2V0X3ZhbHVlX2NhbnNsZWVwKEdQSU9fblZCVVNfRFJWLCB2YnVzX3N0YXRlKTsKIAkJZWxzZQogCQkJc2NoZWR1bGVfd29yaygmZXZtX3ZidXNfd29yayk7CiAJfQotI2VuZGlmCiAJaWYgKGltbWVkaWF0ZSkKIAkJdmJ1c19zdGF0ZSA9IGlzX29uOworI2VuZGlmCiB9CiAKIHN0YXRpYyB2b2lkIGRhdmluY2lfc2V0X3ZidXMoc3RydWN0IG11c2IgKm11c2IsIGludCBpc19vbikKQEAgLTM5MSw2ICs0MDYsMTcgQEAKIAltdXNiLT5ib2FyZF9zZXRfdmJ1cyA9IGRhdmluY2lfc2V0X3ZidXM7CiAJZGF2aW5jaV9zb3VyY2VfcG93ZXIobXVzYiwgMCwgMSk7CiAKKwkvKiBkbTM1NSBFVk0gc3dhcHMgRCsvRC0gZm9yIHNpZ25hbCBpbnRlZ3JpdHksIGFuZAorCSAqIGlzIGNsb2NrZWQgZnJvbSB0aGUgbWFpbiAyNCBNSHogY3J5c3RhbC4KKwkgKi8KKwlpZiAobWFjaGluZV9pc19kYXZpbmNpX2RtMzU1X2V2bSgpKSB7CisJCXUzMglwaHlfY3RybCA9IF9fcmF3X3JlYWRsKFVTQl9QSFlfQ1RSTCk7CisKKwkJcGh5X2N0cmwgJj0gfigzIDw8IDkpOworCQlwaHlfY3RybCB8PSBVU0JQSFlfREFUQVBPTDsKKwkJX19yYXdfd3JpdGVsKHBoeV9jdHJsLCBVU0JfUEhZX0NUUkwpOworCX0KKwogCS8qIHJlc2V0IHRoZSBjb250cm9sbGVyICovCiAJbXVzYl93cml0ZWwodGliYXNlLCBEQVZJTkNJX1VTQl9DVFJMX1JFRywgMHgxKTsKIApAQCAtNDAxLDggKzQyNyw3IEBACiAKIAkvKiBOT1RFOiAgaXJxcyBhcmUgaW4gbWl4ZWQgbW9kZSwgbm90IGJ5cGFzcyB0byBwdXJlLW11c2IgKi8KIAlwcl9kZWJ1ZygiRGFWaW5jaSBPVEcgcmV2aXNpb24gJTA4eCBwaHkgJTAzeCBjb250cm9sICUwMnhcbiIsCi0JCXJldmlzaW9uLCBfX3Jhd19yZWFkbCgodm9pZCBfX2ZvcmNlIF9faW9tZW0gKikKLQkJCQlJT19BRERSRVNTKFVTQlBIWV9DVExfUEFERFIpKSwKKwkJcmV2aXNpb24sIF9fcmF3X3JlYWRsKFVTQl9QSFlfQ1RSTCksCiAJCW11c2JfcmVhZGIodGliYXNlLCBEQVZJTkNJX1VTQl9DVFJMX1JFRykpOwogCiAJbXVzYi0+aXNyID0gZGF2aW5jaV9pbnRlcnJ1cHQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL2RhdmluY2kuaCBiL2RyaXZlcnMvdXNiL211c2IvZGF2aW5jaS5oCmluZGV4IDdmYjYyMzguLjA0NmM4NDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvZGF2aW5jaS5oCisrKyBiL2RyaXZlcnMvdXNiL211c2IvZGF2aW5jaS5oCkBAIC0xNSwxNCArMTUsMjEgQEAKICAqLwogCiAvKiBJbnRlZ3JhdGVkIGhpZ2hzcGVlZC9vdGcgUEhZICovCi0jZGVmaW5lCVVTQlBIWV9DVExfUEFERFIJKERBVklOQ0lfU1lTVEVNX01PRFVMRV9CQVNFICsgMHgzNCkKLSNkZWZpbmUJVVNCUEhZX1BIWUNMS0dECQkoMSA8PCA4KQotI2RlZmluZQlVU0JQSFlfU0VTTkRFTgkJKDEgPDwgNykJLyogdihzZXNzX2VuZCkgY29tcGFyYXRvciAqLwotI2RlZmluZQlVU0JQSFlfVkJEVENURU4JCSgxIDw8IDYpCS8qIHYoYnVzKSBjb21wYXJhdG9yICovCi0jZGVmaW5lCVVTQlBIWV9QSFlQTExPTgkJKDEgPDwgNCkJLyogb3ZlcnJpZGUgcGxsIHN1c3BlbmQgKi8KLSNkZWZpbmUJVVNCUEhZX0NMS08xU0VMCQkoMSA8PCAzKQotI2RlZmluZQlVU0JQSFlfT1NDUERXTgkJKDEgPDwgMikKLSNkZWZpbmUJVVNCUEhZX1BIWVBEV04JCSgxIDw8IDApCisjZGVmaW5lIFVTQlBIWV9DVExfUEFERFIJKERBVklOQ0lfU1lTVEVNX01PRFVMRV9CQVNFICsgMHgzNCkKKyNkZWZpbmUgVVNCUEhZX0RBVEFQT0wJCUJJVCgxMSkJLyogKGRtMzU1KSBzd2l0Y2ggRCsvRC0gKi8KKyNkZWZpbmUgVVNCUEhZX1BIWUNMS0dECQlCSVQoOCkKKyNkZWZpbmUgVVNCUEhZX1NFU05ERU4JCUJJVCg3KQkvKiB2KHNlc3NfZW5kKSBjb21wYXJhdG9yICovCisjZGVmaW5lIFVTQlBIWV9WQkRUQ1RFTgkJQklUKDYpCS8qIHYoYnVzKSBjb21wYXJhdG9yICovCisjZGVmaW5lIFVTQlBIWV9WQlVTU0VOUwkJQklUKDUpCS8qIChkbTM1NSxybykgaXMgdmJ1cyA+IDAuNVYgKi8KKyNkZWZpbmUgVVNCUEhZX1BIWVBMTE9OCQlCSVQoNCkJLyogb3ZlcnJpZGUgcGxsIHN1c3BlbmQgKi8KKyNkZWZpbmUgVVNCUEhZX0NMS08xU0VMCQlCSVQoMykKKyNkZWZpbmUgVVNCUEhZX09TQ1BEV04JCUJJVCgyKQorI2RlZmluZSBVU0JQSFlfT1RHUERXTgkJQklUKDEpCisjZGVmaW5lIFVTQlBIWV9QSFlQRFdOCQlCSVQoMCkKKworI2RlZmluZSBETTM1NV9ERUVQU0xFRVBfUEFERFIJKERBVklOQ0lfU1lTVEVNX01PRFVMRV9CQVNFICsgMHg0OCkKKyNkZWZpbmUgRFJWVkJVU19GT1JDRQkJQklUKDIpCisjZGVmaW5lIERSVlZCVVNfT1ZFUlJJREUJQklUKDEpCiAKIC8qIEZvciBub3cgaW5jbHVkZSB1c2IgT1RHIG1vZHVsZSByZWdpc3RlcnMgaGVyZSAqLwogI2RlZmluZSBEQVZJTkNJX1VTQl9WRVJTSU9OX1JFRwkJMHgwMApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuYyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmMKaW5kZXggYWY3N2U0Ni4uMzM4Y2QxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5jCkBAIC03NjksNyArNzY5LDcgQEAKIAkJY2FzZSBPVEdfU1RBVEVfQV9TVVNQRU5EOgogCQkJdXNiX2hjZF9yZXN1bWVfcm9vdF9odWIobXVzYl90b19oY2QobXVzYikpOwogCQkJbXVzYl9yb290X2Rpc2Nvbm5lY3QobXVzYik7Ci0JCQlpZiAobXVzYi0+YV93YWl0X2Jjb24gIT0gMCkKKwkJCWlmIChtdXNiLT5hX3dhaXRfYmNvbiAhPSAwICYmIGlzX290Z19lbmFibGVkKG11c2IpKQogCQkJCW11c2JfcGxhdGZvcm1fdHJ5X2lkbGUobXVzYiwgamlmZmllcwogCQkJCQkrIG1zZWNzX3RvX2ppZmZpZXMobXVzYi0+YV93YWl0X2Jjb24pKTsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuaCBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmgKaW5kZXggNjMwOTQ2YS4uZWZiMzliNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuaAorKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5oCkBAIC0zMzEsNyArMzMxLDYgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkCWNvbnRyb2w7CS8qIG9mIG11c2JfcWggKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkCWluX2J1bGs7CS8qIG9mIG11c2JfcWggKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkCW91dF9idWxrOwkvKiBvZiBtdXNiX3FoICovCi0Jc3RydWN0IG11c2JfcWgJCSpwZXJpb2RpY1szMl07CS8qIHRyZWUgb2YgaW50ZXJydXB0K2lzbyAqLwogI2VuZGlmCiAKIAkvKiBjYWxsZWQgd2l0aCBJUlFzIGJsb2NrZWQ7IE9OL25vbnplcm8gaW1wbGllcyBzdGFydGluZyBhIHNlc3Npb24sCkBAIC00NzksMTAgKzQ3OCwxMSBAQAogc3RhdGljIGlubGluZSBpbnQgbXVzYl9yZWFkX2ZpZm9zaXplKHN0cnVjdCBtdXNiICptdXNiLAogCQlzdHJ1Y3QgbXVzYl9od19lcCAqaHdfZXAsIHU4IGVwbnVtKQogeworCXZvaWQgKm1iYXNlID0gbXVzYi0+bXJlZ3M7CiAJdTggcmVnID0gMDsKIAogCS8qIHJlYWQgZnJvbSBjb3JlIHVzaW5nIGluZGV4ZWQgbW9kZWwgKi8KLQlyZWcgPSBtdXNiX3JlYWRiKGh3X2VwLT5yZWdzLCAweDEwICsgTVVTQl9GSUZPU0laRSk7CisJcmVnID0gbXVzYl9yZWFkYihtYmFzZSwgTVVTQl9FUF9PRkZTRVQoZXBudW0sIE1VU0JfRklGT1NJWkUpKTsKIAkvKiAwJ3MgcmV0dXJuZWQgd2hlbiBubyBtb3JlIGVuZHBvaW50cyAqLwogCWlmICghcmVnKQogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTUwOSw2ICs1MDksNyBAQAogewogCW11c2ItPmVuZHBvaW50c1swXS5tYXhfcGFja2V0X3N6X3R4ID0gTVVTQl9FUDBfRklGT1NJWkU7CiAJbXVzYi0+ZW5kcG9pbnRzWzBdLm1heF9wYWNrZXRfc3pfcnggPSBNVVNCX0VQMF9GSUZPU0laRTsKKwltdXNiLT5lbmRwb2ludHNbMF0uaXNfc2hhcmVkX2ZpZm8gPSB0cnVlOwogfQogI2VuZGlmIC8qIENPTkZJR19CTEFDS0ZJTiAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfaG9zdC5jIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2hvc3QuYwppbmRleCA2ZGJiZDA3Li40OTljNDMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfaG9zdC5jCisrKyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9ob3N0LmMKQEAgLTY0LDExICs2NCw4IEBACiAgKgogICogLSBETUEgKE1lbnRvci9PTUFQKSAuLi5oYXMgYXQgbGVhc3QgdG9nZ2xlIHVwZGF0ZSBwcm9ibGVtcwogICoKLSAqIC0gU3RpbGwgbm8gdHJhZmZpYyBzY2hlZHVsaW5nIGNvZGUgdG8gbWFrZSBOQUtpbmcgZm9yIGJ1bGsgb3IgY29udHJvbAotICogICB0cmFuc2ZlcnMgdW5hYmxlIHRvIHN0YXJ2ZSBvdGhlciByZXF1ZXN0czsgb3IgdG8gbWFrZSBlZmZpY2llbnQgdXNlCi0gKiAgIG9mIGhhcmR3YXJlIHdpdGggcGVyaW9kaWMgdHJhbnNmZXJzLiAgKE5vdGUgdGhhdCBuZXR3b3JrIGRyaXZlcnMKLSAqICAgY29tbW9ubHkgcG9zdCBidWxrIHJlYWRzIHRoYXQgc3RheSBwZW5kaW5nIGZvciBhIGxvbmcgdGltZTsgdGhlc2UKLSAqICAgd291bGQgbWFrZSB2ZXJ5IHZpc2libGUgdHJvdWJsZS4pCisgKiAtIFsyMy1mZWItMjAwOV0gbWluaW1hbCB0cmFmZmljIHNjaGVkdWxpbmcgdG8gYXZvaWQgYnVsayBSWCBwYWNrZXQKKyAqICAgc3RhcnZhdGlvbiAuLi4gbm90aGluZyB5ZXQgZm9yIFRYLCBpbnRlcnJ1cHQsIG9yIGJ1bGsuCiAgKgogICogLSBOb3QgdGVzdGVkIHdpdGggSE5QLCBidXQgc29tZSBTUlAgcGF0aHMgc2VlbSB0byBiZWhhdmUuCiAgKgpAQCAtODgsMTEgKzg1LDggQEAKICAqCiAgKiBDT05UUk9MIHRyYW5zZmVycyBhbGwgZ28gdGhyb3VnaCBlcDAuICBCVUxLIG9uZXMgZ28gdGhyb3VnaCBkZWRpY2F0ZWQgSU4KICAqIGFuZCBPVVQgZW5kcG9pbnRzIC4uLiBoYXJkd2FyZSBpcyBkZWRpY2F0ZWQgZm9yIHRob3NlICJhc3luYyIgcXVldWUocykuCi0gKgogICogKFllcywgYnVsayBfY291bGRfIHVzZSBtb3JlIG9mIHRoZSBlbmRwb2ludHMgdGhhbiB0aGF0LCBhbmQgd291bGQgZXZlbgotICogYmVuZWZpdCBmcm9tIGl0IC4uLiBvbmUgcmVtb3RlIGRldmljZSBtYXkgZWFzaWx5IGJlIE5BS2luZyB3aGlsZSBvdGhlcnMKLSAqIG5lZWQgdG8gcGVyZm9ybSB0cmFuc2ZlcnMgaW4gdGhhdCBzYW1lIGRpcmVjdGlvbi4gIFRoZSBzYW1lIHRoaW5nIGNvdWxkCi0gKiBiZSBkb25lIGluIHNvZnR3YXJlIHRob3VnaCwgYXNzdW1pbmcgZG1hIGNvb3BlcmF0ZXMuKQorICogYmVuZWZpdCBmcm9tIGl0LikKICAqCiAgKiBJTlRFUlVQUFQgYW5kIElTT0NIUk9OT1VTIHRyYW5zZmVycyBhcmUgc2NoZWR1bGVkIHRvIHRoZSBvdGhlciBlbmRwb2ludHMuCiAgKiBTbyBmYXIgdGhhdCBzY2hlZHVsaW5nIGlzIGJvdGggZHVtYiBhbmQgb3B0aW1pc3RpYzogIHRoZSBlbmRwb2ludCB3aWxsIGJlCkBAIC0yMDEsOCArMTk1LDkgQEAKIAkJbGVuID0gdXJiLT5pc29fZnJhbWVfZGVzY1swXS5sZW5ndGg7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CQkvKiBidWxrLCBpbnRlcnJ1cHQgKi8KLQkJYnVmID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7Ci0JCWxlbiA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aDsKKwkJLyogYWN0dWFsX2xlbmd0aCBtYXkgYmUgbm9uemVybyBvbiByZXRyeSBwYXRocyAqLworCQlidWYgPSB1cmItPnRyYW5zZmVyX2J1ZmZlciArIHVyYi0+YWN0dWFsX2xlbmd0aDsKKwkJbGVuID0gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoIC0gdXJiLT5hY3R1YWxfbGVuZ3RoOwogCX0KIAogCURCRyg0LCAicWggJXAgdXJiICVwIGRldiVkIGVwJWQlcyVzLCBod19lcCAlZCwgJXAvJWRcbiIsCkBAIC0zOTUsNyArMzkwLDYgQEAKIAkJCSAqIGRlLWFsbG9jYXRlZCBpZiBpdCdzIHRyYWNrZWQgYW5kIGFsbG9jYXRlZDsKIAkJCSAqIGFuZCB3aGVyZSB3ZSdkIHVwZGF0ZSB0aGUgc2NoZWR1bGUgdHJlZS4uLgogCQkJICovCi0JCQltdXNiLT5wZXJpb2RpY1tlcC0+ZXBudW1dID0gTlVMTDsKIAkJCWtmcmVlKHFoKTsKIAkJCXFoID0gTlVMTDsKIAkJCWJyZWFrOwpAQCAtMTA0NSw3ICsxMDM5LDggQEAKIAogCQkvKiBOT1RFOiAgdGhpcyBjb2RlIHBhdGggd291bGQgYmUgYSBnb29kIHBsYWNlIHRvIFBBVVNFIGEKIAkJICogY29udHJvbCB0cmFuc2ZlciwgaWYgYW5vdGhlciBvbmUgaXMgcXVldWVkLCBzbyB0aGF0Ci0JCSAqIGVwMCBpcyBtb3JlIGxpa2VseSB0byBzdGF5IGJ1c3kuCisJCSAqIGVwMCBpcyBtb3JlIGxpa2VseSB0byBzdGF5IGJ1c3kuICBUaGF0J3MgYWxyZWFkeSBkb25lCisJCSAqIGZvciBidWxrIFJYIHRyYW5zZmVycy4KIAkJICoKIAkJICogaWYgKHFoLT5yaW5nLm5leHQgIT0gJm11c2ItPmNvbnRyb2wpLCB0aGVuCiAJCSAqIHdlIGhhdmUgYSBjYW5kaWRhdGUuLi4gTkFLaW5nIGlzICpOT1QqIGFuIGVycm9yCkBAIC0xMTk3LDYgKzExOTIsNyBAQAogCQkvKiBOT1RFOiAgdGhpcyBjb2RlIHBhdGggd291bGQgYmUgYSBnb29kIHBsYWNlIHRvIFBBVVNFIGEKIAkJICogdHJhbnNmZXIsIGlmIHRoZXJlJ3Mgc29tZSBvdGhlciAobm9ucGVyaW9kaWMpIHR4IHVyYgogCQkgKiB0aGF0IGNvdWxkIHVzZSB0aGlzIGZpZm8uICAoZG1hIGNvbXBsaWNhdGVzIGl0Li4uKQorCQkgKiBUaGF0J3MgYWxyZWFkeSBkb25lIGZvciBidWxrIFJYIHRyYW5zZmVycy4KIAkJICoKIAkJICogaWYgKGJ1bGsgJiYgcWgtPnJpbmcubmV4dCAhPSAmbXVzYi0+b3V0X2J1bGspLCB0aGVuCiAJCSAqIHdlIGhhdmUgYSBjYW5kaWRhdGUuLi4gTkFLaW5nIGlzICpOT1QqIGFuIGVycm9yCkBAIC0xMzU4LDYgKzEzNTQsNTAgQEAKIAogI2VuZGlmCiAKKy8qIFNjaGVkdWxlIG5leHQgUUggZnJvbSBtdXNiLT5pbl9idWxrIGFuZCBtb3ZlIHRoZSBjdXJyZW50IHFoIHRvCisgKiB0aGUgZW5kOyBhdm9pZHMgc3RhcnZhdGlvbiBmb3Igb3RoZXIgZW5kcG9pbnRzLgorICovCitzdGF0aWMgdm9pZCBtdXNiX2J1bGtfcnhfbmFrX3RpbWVvdXQoc3RydWN0IG11c2IgKm11c2IsIHN0cnVjdCBtdXNiX2h3X2VwICplcCkKK3sKKwlzdHJ1Y3QgZG1hX2NoYW5uZWwJKmRtYTsKKwlzdHJ1Y3QgdXJiCQkqdXJiOworCXZvaWQgX19pb21lbQkJKm1iYXNlID0gbXVzYi0+bXJlZ3M7CisJdm9pZCBfX2lvbWVtCQkqZXBpbyA9IGVwLT5yZWdzOworCXN0cnVjdCBtdXNiX3FoCQkqY3VyX3FoLCAqbmV4dF9xaDsKKwl1MTYJCQlyeF9jc3I7CisKKwltdXNiX2VwX3NlbGVjdChtYmFzZSwgZXAtPmVwbnVtKTsKKwlkbWEgPSBpc19kbWFfY2FwYWJsZSgpID8gZXAtPnJ4X2NoYW5uZWwgOiBOVUxMOworCisJLyogY2xlYXIgbmFrIHRpbWVvdXQgYml0ICovCisJcnhfY3NyID0gbXVzYl9yZWFkdyhlcGlvLCBNVVNCX1JYQ1NSKTsKKwlyeF9jc3IgfD0gTVVTQl9SWENTUl9IX1daQ19CSVRTOworCXJ4X2NzciAmPSB+TVVTQl9SWENTUl9EQVRBRVJST1I7CisJbXVzYl93cml0ZXcoZXBpbywgTVVTQl9SWENTUiwgcnhfY3NyKTsKKworCWN1cl9xaCA9IGZpcnN0X3FoKCZtdXNiLT5pbl9idWxrKTsKKwlpZiAoY3VyX3FoKSB7CisJCXVyYiA9IG5leHRfdXJiKGN1cl9xaCk7CisJCWlmIChkbWFfY2hhbm5lbF9zdGF0dXMoZG1hKSA9PSBNVVNCX0RNQV9TVEFUVVNfQlVTWSkgeworCQkJZG1hLT5zdGF0dXMgPSBNVVNCX0RNQV9TVEFUVVNfQ09SRV9BQk9SVDsKKwkJCW11c2ItPmRtYV9jb250cm9sbGVyLT5jaGFubmVsX2Fib3J0KGRtYSk7CisJCQl1cmItPmFjdHVhbF9sZW5ndGggKz0gZG1hLT5hY3R1YWxfbGVuOworCQkJZG1hLT5hY3R1YWxfbGVuID0gMEw7CisJCX0KKwkJbXVzYl9zYXZlX3RvZ2dsZShlcCwgMSwgdXJiKTsKKworCQkvKiBtb3ZlIGN1cl9xaCB0byBlbmQgb2YgcXVldWUgKi8KKwkJbGlzdF9tb3ZlX3RhaWwoJmN1cl9xaC0+cmluZywgJm11c2ItPmluX2J1bGspOworCisJCS8qIGdldCB0aGUgbmV4dCBxaCBmcm9tIG11c2ItPmluX2J1bGsgKi8KKwkJbmV4dF9xaCA9IGZpcnN0X3FoKCZtdXNiLT5pbl9idWxrKTsKKworCQkvKiBzZXQgcnhfcmVpbml0IGFuZCBzY2hlZHVsZSB0aGUgbmV4dCBxaCAqLworCQllcC0+cnhfcmVpbml0ID0gMTsKKwkJbXVzYl9zdGFydF91cmIobXVzYiwgMSwgbmV4dF9xaCk7CisJfQorfQorCiAvKgogICogU2VydmljZSBhbiBSWCBpbnRlcnJ1cHQgZm9yIHRoZSBnaXZlbiBJTiBlbmRwb2ludDsgZG9jcyBjb3ZlciBidWxrLCBpc28sCiAgKiBhbmQgaGlnaC1iYW5kd2lkdGggSU4gdHJhbnNmZXIgY2FzZXMuCkBAIC0xNDIxLDE4ICsxNDYxLDI2IEBACiAJfSBlbHNlIGlmIChyeF9jc3IgJiBNVVNCX1JYQ1NSX0RBVEFFUlJPUikgewogCiAJCWlmIChVU0JfRU5EUE9JTlRfWEZFUl9JU09DICE9IHFoLT50eXBlKSB7Ci0JCQkvKiBOT1RFIHRoaXMgY29kZSBwYXRoIHdvdWxkIGJlIGEgZ29vZCBwbGFjZSB0byBQQVVTRSBhCi0JCQkgKiB0cmFuc2ZlciwgaWYgdGhlcmUncyBzb21lIG90aGVyIChub25wZXJpb2RpYykgcnggdXJiCi0JCQkgKiB0aGF0IGNvdWxkIHVzZSB0aGlzIGZpZm8uICAoZG1hIGNvbXBsaWNhdGVzIGl0Li4uKQotCQkJICoKLQkJCSAqIGlmIChidWxrICYmIHFoLT5yaW5nLm5leHQgIT0gJm11c2ItPmluX2J1bGspLCB0aGVuCi0JCQkgKiB3ZSBoYXZlIGEgY2FuZGlkYXRlLi4uIE5BS2luZyBpcyAqTk9UKiBhbiBlcnJvcgotCQkJICovCiAJCQlEQkcoNiwgIlJYIGVuZCAlZCBOQUsgdGltZW91dFxuIiwgZXBudW0pOworCisJCQkvKiBOT1RFOiBOQUtpbmcgaXMgKk5PVCogYW4gZXJyb3IsIHNvIHdlIHdhbnQgdG8KKwkJCSAqIGNvbnRpbnVlLiAgRXhjZXB0IC4uLiBpZiB0aGVyZSdzIGEgcmVxdWVzdCBmb3IKKwkJCSAqIGFub3RoZXIgUUgsIHVzZSB0aGF0IGluc3RlYWQgb2Ygc3RhcnZpbmcgaXQuCisJCQkgKgorCQkJICogRGV2aWNlcyBsaWtlIEV0aGVybmV0IGFuZCBzZXJpYWwgYWRhcHRlcnMga2VlcAorCQkJICogcmVhZHMgcG9zdGVkIGF0IGFsbCB0aW1lcywgd2hpY2ggd2lsbCBzdGFydmUKKwkJCSAqIG90aGVyIGRldmljZXMgd2l0aG91dCB0aGlzIGxvZ2ljLgorCQkJICovCisJCQlpZiAodXNiX3BpcGVidWxrKHVyYi0+cGlwZSkKKwkJCQkJJiYgcWgtPm11eCA9PSAxCisJCQkJCSYmICFsaXN0X2lzX3Npbmd1bGFyKCZtdXNiLT5pbl9idWxrKSkgeworCQkJCW11c2JfYnVsa19yeF9uYWtfdGltZW91dChtdXNiLCBod19lcCk7CisJCQkJcmV0dXJuOworCQkJfQogCQkJbXVzYl9lcF9zZWxlY3QobWJhc2UsIGVwbnVtKTsKLQkJCW11c2Jfd3JpdGV3KGVwaW8sIE1VU0JfUlhDU1IsCi0JCQkJCU1VU0JfUlhDU1JfSF9XWkNfQklUUwotCQkJCQl8IE1VU0JfUlhDU1JfSF9SRVFQS1QpOworCQkJcnhfY3NyIHw9IE1VU0JfUlhDU1JfSF9XWkNfQklUUzsKKwkJCXJ4X2NzciAmPSB+TVVTQl9SWENTUl9EQVRBRVJST1I7CisJCQltdXNiX3dyaXRldyhlcGlvLCBNVVNCX1JYQ1NSLCByeF9jc3IpOwogCiAJCQlnb3RvIGZpbmlzaDsKIAkJfSBlbHNlIHsKQEAgLTE3MTEsMzEgKzE3NTksMjcgQEAKIAogCS8qIGVsc2UsIHBlcmlvZGljIHRyYW5zZmVycyBnZXQgbXV4ZWQgdG8gb3RoZXIgZW5kcG9pbnRzICovCiAKLQkvKiBGSVhNRSB0aGlzIGRvZXNuJ3QgY29uc2lkZXIgZGlyZWN0aW9uLCBzbyBpdCBjYW4gb25seQotCSAqIHdvcmsgZm9yIG9uZSBoYWxmIG9mIHRoZSBlbmRwb2ludCBoYXJkd2FyZSwgYW5kIGFzc3VtZXMKLQkgKiB0aGUgcHJldmlvdXMgY2FzZXMgaGFuZGxlZCBhbGwgbm9uLXNoYXJlZCBlbmRwb2ludHMuLi4KLQkgKi8KLQotCS8qIHdlIGtub3cgdGhpcyBxaCBoYXNuJ3QgYmVlbiBzY2hlZHVsZWQsIHNvIGFsbCB3ZSBuZWVkIHRvIGRvCisJLyoKKwkgKiBXZSBrbm93IHRoaXMgcWggaGFzbid0IGJlZW4gc2NoZWR1bGVkLCBzbyBhbGwgd2UgbmVlZCB0byBkbwogCSAqIGlzIGNob29zZSB3aGljaCBoYXJkd2FyZSBlbmRwb2ludCB0byBwdXQgaXQgb24gLi4uCiAJICoKIAkgKiBSRVZJU0lUIHdoYXQgd2UgcmVhbGx5IHdhbnQgaGVyZSBpcyBhIHJlZ3VsYXIgc2NoZWR1bGUgdHJlZQotCSAqIGxpa2UgZS5nLiBPSENJIHVzZXMsIGJ1dCBmb3Igbm93IG11c2ItPnBlcmlvZGljIGlzIGp1c3QgYW4KLQkgKiBhcnJheSBvZiB0aGUgX3NpbmdsZV8gbG9naWNhbCBlbmRwb2ludCBhc3NvY2lhdGVkIHdpdGggYQotCSAqIGdpdmVuIHBoeXNpY2FsIG9uZSAoaWRlbnRpdHkgbWFwcGluZyBsb2dpY2FsLT5waHlzaWNhbCkuCi0JICoKLQkgKiB0aGF0IHNpbXBsaXN0aWMgYXBwcm9hY2ggbWFrZXMgVFQgc2NoZWR1bGluZyBhIGxvdCBzaW1wbGVyOwotCSAqIHRoZXJlIGlzIG5vbmUsIGFuZCB0aHVzIG5vbmUgb2YgaXRzIGNvbXBsZXhpdHkuLi4KKwkgKiBsaWtlIGUuZy4gT0hDSSB1c2VzLgogCSAqLwogCWJlc3RfZGlmZiA9IDQwOTY7CiAJYmVzdF9lbmQgPSAtMTsKIAotCWZvciAoZXBudW0gPSAxOyBlcG51bSA8IG11c2ItPm5yX2VuZHBvaW50czsgZXBudW0rKykgeworCWZvciAoZXBudW0gPSAxLCBod19lcCA9IG11c2ItPmVuZHBvaW50cyArIDE7CisJCQllcG51bSA8IG11c2ItPm5yX2VuZHBvaW50czsKKwkJCWVwbnVtKyssIGh3X2VwKyspIHsKIAkJaW50CWRpZmY7CiAKLQkJaWYgKG11c2ItPnBlcmlvZGljW2VwbnVtXSkKKwkJaWYgKGlzX2luIHx8IGh3X2VwLT5pc19zaGFyZWRfZmlmbykgeworCQkJaWYgKGh3X2VwLT5pbl9xaCAgIT0gTlVMTCkKKwkJCQljb250aW51ZTsKKwkJfSBlbHNlCWlmIChod19lcC0+b3V0X3FoICE9IE5VTEwpCiAJCQljb250aW51ZTsKLQkJaHdfZXAgPSAmbXVzYi0+ZW5kcG9pbnRzW2VwbnVtXTsKKwogCQlpZiAoaHdfZXAgPT0gbXVzYi0+YnVsa19lcCkKIAkJCWNvbnRpbnVlOwogCkBAIC0xNzU2LDYgKzE4MDAsMTcgQEAKIAkJCWhlYWQgPSAmbXVzYi0+aW5fYnVsazsKIAkJZWxzZQogCQkJaGVhZCA9ICZtdXNiLT5vdXRfYnVsazsKKworCQkvKiBFbmFibGUgYnVsayBSWCBOQUsgdGltZW91dCBzY2hlbWUgd2hlbiBidWxrIHJlcXVlc3RzIGFyZQorCQkgKiBtdWx0aXBsZXhlZC4gIFRoaXMgc2NoZW1lIGRvZW4ndCB3b3JrIGluIGhpZ2ggc3BlZWQgdG8gZnVsbAorCQkgKiBzcGVlZCBzY2VuYXJpbyBhcyBOQUsgaW50ZXJydXB0cyBhcmUgbm90IGNvbWluZyBmcm9tIGEKKwkJICogZnVsbCBzcGVlZCBkZXZpY2UgY29ubmVjdGVkIHRvIGEgaGlnaCBzcGVlZCBkZXZpY2UuCisJCSAqIE5BSyB0aW1lb3V0IGludGVydmFsIGlzIDggKDEyOCB1ZnJhbWUgb3IgMTZtcykgZm9yIEhTIGFuZAorCQkgKiA0ICg4IGZyYW1lIG9yIDhtcykgZm9yIEZTIGRldmljZS4KKwkJICovCisJCWlmIChpc19pbiAmJiBxaC0+ZGV2KQorCQkJcWgtPmludHZfcmVnID0KKwkJCQkoVVNCX1NQRUVEX0hJR0ggPT0gcWgtPmRldi0+c3BlZWQpID8gOCA6IDQ7CiAJCWdvdG8gc3VjY2VzczsKIAl9IGVsc2UgaWYgKGJlc3RfZW5kIDwgMCkgewogCQlyZXR1cm4gLUVOT1NQQzsKQEAgLTE3NjQsNyArMTgxOSw2IEBACiAJaWRsZSA9IDE7CiAJcWgtPm11eCA9IDA7CiAJaHdfZXAgPSBtdXNiLT5lbmRwb2ludHMgKyBiZXN0X2VuZDsKLQltdXNiLT5wZXJpb2RpY1tiZXN0X2VuZF0gPSBxaDsKIAlEQkcoNCwgInFoICVwIHBlcmlvZGljIHNsb3QgJWRcbiIsIHFoLCBiZXN0X2VuZCk7CiBzdWNjZXNzOgogCWlmIChoZWFkKSB7CkBAIC0xODg4LDEzICsxOTQyLDExIEBACiAJCSAqCiAJCSAqIFRoZSBkb3duc2lkZSBvZiBkaXNhYmxpbmcgdGhpcyBpcyB0aGF0IHRyYW5zZmVyIHNjaGVkdWxpbmcKIAkJICogZ2V0cyBWRVJZIHVuZmFpciBmb3Igbm9ucGVyaW9kaWMgdHJhbnNmZXJzOyBhIG1pc2JlaGF2aW5nCi0JCSAqIHBlcmlwaGVyYWwgY291bGQgbWFrZSB0aGF0IGh1cnQuICBPciBmb3IgcmVhZHMsIG9uZSB0aGF0J3MKLQkJICogcGVyZmVjdGx5IG5vcm1hbDogIG5ldHdvcmsgYW5kIG90aGVyIGRyaXZlcnMga2VlcCByZWFkcwotCQkgKiBwb3N0ZWQgYXQgYWxsIHRpbWVzLCBoYXZpbmcgb25lIHBlbmRpbmcgZm9yIGEgd2VlayBzaG91bGQKLQkJICogYmUgcGVyZmVjdGx5IHNhZmUuCisJCSAqIHBlcmlwaGVyYWwgY291bGQgbWFrZSB0aGF0IGh1cnQuICBUaGF0J3MgcGVyZmVjdGx5IG5vcm1hbAorCQkgKiBmb3IgcmVhZHMgZnJvbSBuZXR3b3JrIG9yIHNlcmlhbCBhZGFwdGVycyAuLi4gc28gd2UgaGF2ZQorCQkgKiBwYXJ0aWFsIE5BS2xpbWl0IHN1cHBvcnQgZm9yIGJ1bGsgUlguCiAJCSAqCi0JCSAqIFRoZSB1cHNpZGUgb2YgZGlzYWJsaW5nIGl0IGlzIGF2b2lkbmcgdHJhbnNmZXIgc2NoZWR1bGluZwotCQkgKiBjb2RlIHRvIHB1dCB0aGlzIGFzaWRlIGZvciB3aGlsZS4KKwkJICogVGhlIHVwc2lkZSBvZiBkaXNhYmxpbmcgaXQgaXMgc2ltcGxlciB0cmFuc2ZlciBzY2hlZHVsaW5nLgogCQkgKi8KIAkJaW50ZXJ2YWwgPSAwOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl92aXJ0aHViLmMgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfdmlydGh1Yi5jCmluZGV4IGUwZTljZTUuLmJmNjc3YWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl92aXJ0aHViLmMKKysrIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX3ZpcnRodWIuYwpAQCAtMjg1LDcgKzI4NSw3IEBACiAJCWRlc2MtPmJEZXNjTGVuZ3RoID0gOTsKIAkJZGVzYy0+YkRlc2NyaXB0b3JUeXBlID0gMHgyOTsKIAkJZGVzYy0+Yk5iclBvcnRzID0gMTsKLQkJZGVzYy0+d0h1YkNoYXJhY3RlcmlzdGljcyA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoCisJCWRlc2MtPndIdWJDaGFyYWN0ZXJpc3RpY3MgPSBjcHVfdG9fbGUxNigKIAkJCQkgIDB4MDAwMQkvKiBwZXItcG9ydCBwb3dlciBzd2l0Y2hpbmcgKi8KIAkJCQl8IDB4MDAxMAkvKiBubyBvdmVyY3VycmVudCByZXBvcnRpbmcgKi8KIAkJCQkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivb3RnL0tjb25maWcgYi9kcml2ZXJzL3VzYi9vdGcvS2NvbmZpZwppbmRleCBlZTU1YjQ0Li5hYTg4NGQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9vdGcvS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi9vdGcvS2NvbmZpZwpAQCAtNDMsNyArNDMsNyBAQAogCiBjb25maWcgVFdMNDAzMF9VU0IKIAl0cmlzdGF0ZSAiVFdMNDAzMCBVU0IgVHJhbnNjZWl2ZXIgRHJpdmVyIgotCWRlcGVuZHMgb24gVFdMNDAzMF9DT1JFCisJZGVwZW5kcyBvbiBUV0w0MDMwX0NPUkUgJiYgUkVHVUxBVE9SX1RXTDQwMzAKIAlzZWxlY3QgVVNCX09UR19VVElMUwogCWhlbHAKIAkgIEVuYWJsZSB0aGlzIHRvIHN1cHBvcnQgdGhlIFVTQiBPVEcgdHJhbnNjZWl2ZXIgb24gVFdMNDAzMApAQCAtNTEsNCArNTEsMTIgQEAKIAkgIFRoaXMgdHJhbnNjZWl2ZXIgc3VwcG9ydHMgaGlnaCBhbmQgZnVsbCBzcGVlZCBkZXZpY2VzIHBsdXMsCiAJICBpbiBob3N0IG1vZGUsIGxvdyBzcGVlZC4KIAorY29uZmlnIE5PUF9VU0JfWENFSVYKKwl0cmlzdGF0ZSAiTk9QIFVTQiBUcmFuc2NlaXZlciBEcml2ZXIiCisJc2VsZWN0IFVTQl9PVEdfVVRJTFMKKwloZWxwCisJIHRoaXMgZHJpdmVyIGlzIHRvIGJlIHVzZWQgYnkgYWxsIHRoZSB1c2IgdHJhbnNjZWl2ZXIgd2hpY2ggYXJlIGVpdGhlcgorCSBidWlsdC1pbiB3aXRoIHVzYiBpcCBvciB3aGljaCBhcmUgYXV0b25vbW91cyBhbmQgZG9lc24ndCByZXF1aXJlIGFueQorCSBwaHkgcHJvZ3JhbW1pbmcgc3VjaCBhcyBJU1AxeDA0IGV0Yy4KKwogZW5kaWYgIyBVU0IgfHwgT1RHCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9vdGcvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9vdGcvTWFrZWZpbGUKaW5kZXggZDczYzdjZi4uMjA4MTY3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivb3RnL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdXNiL290Zy9NYWtlZmlsZQpAQCAtOSw2ICs5LDcgQEAKIG9iai0kKENPTkZJR19VU0JfR1BJT19WQlVTKQkrPSBncGlvX3ZidXMubwogb2JqLSQoQ09ORklHX0lTUDEzMDFfT01BUCkJKz0gaXNwMTMwMV9vbWFwLm8KIG9iai0kKENPTkZJR19UV0w0MDMwX1VTQikJKz0gdHdsNDAzMC11c2Iubworb2JqLSQoQ09ORklHX05PUF9VU0JfWENFSVYpCSs9IG5vcC11c2IteGNlaXYubwogCiBjY2ZsYWdzLSQoQ09ORklHX1VTQl9ERUJVRykJKz0gLURERUJVRwogY2NmbGFncy0kKENPTkZJR19VU0JfR0FER0VUX0RFQlVHKSArPSAtRERFQlVHCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9vdGcvZ3Bpb192YnVzLmMgYi9kcml2ZXJzL3VzYi9vdGcvZ3Bpb192YnVzLmMKaW5kZXggNjNhNjAzNi4uMWMyNmM5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivb3RnL2dwaW9fdmJ1cy5jCisrKyBiL2RyaXZlcnMvdXNiL290Zy9ncGlvX3ZidXMuYwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgogCkBAIC0zNCw2ICszNSw3IEBACiAJc3RydWN0IHJlZ3VsYXRvciAgICAgICAqdmJ1c19kcmF3OwogCWludAkJCXZidXNfZHJhd19lbmFibGVkOwogCXVuc2lnbmVkCQltQTsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJd29yazsKIH07CiAKIApAQCAtNzYsMjQgKzc4LDI2IEBACiAJZ3Bpb192YnVzLT5tQSA9IG1BOwogfQogCi0vKiBWQlVTIGNoYW5nZSBJUlEgaGFuZGxlciAqLwotc3RhdGljIGlycXJldHVybl90IGdwaW9fdmJ1c19pcnEoaW50IGlycSwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgaXNfdmJ1c19wb3dlcmVkKHN0cnVjdCBncGlvX3ZidXNfbWFjaF9pbmZvICpwZGF0YSkKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gZGF0YTsKLQlzdHJ1Y3QgZ3Bpb192YnVzX21hY2hfaW5mbyAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKLQlzdHJ1Y3QgZ3Bpb192YnVzX2RhdGEgKmdwaW9fdmJ1cyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCWludCBncGlvLCB2YnVzOworCWludCB2YnVzOwogCiAJdmJ1cyA9IGdwaW9fZ2V0X3ZhbHVlKHBkYXRhLT5ncGlvX3ZidXMpOwogCWlmIChwZGF0YS0+Z3Bpb192YnVzX2ludmVydGVkKQogCQl2YnVzID0gIXZidXM7CiAKLQlkZXZfZGJnKCZwZGV2LT5kZXYsICJWQlVTICVzIChnYWRnZXQ6ICVzKVxuIiwKLQkJdmJ1cyA/ICJzdXBwbGllZCIgOiAiaW5hY3RpdmUiLAotCQlncGlvX3ZidXMtPm90Zy5nYWRnZXQgPyBncGlvX3ZidXMtPm90Zy5nYWRnZXQtPm5hbWUgOiAibm9uZSIpOworCXJldHVybiB2YnVzOworfQorCitzdGF0aWMgdm9pZCBncGlvX3ZidXNfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGdwaW9fdmJ1c19kYXRhICpncGlvX3ZidXMgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGdwaW9fdmJ1c19kYXRhLCB3b3JrKTsKKwlzdHJ1Y3QgZ3Bpb192YnVzX21hY2hfaW5mbyAqcGRhdGEgPSBncGlvX3ZidXMtPmRldi0+cGxhdGZvcm1fZGF0YTsKKwlpbnQgZ3BpbzsKIAogCWlmICghZ3Bpb192YnVzLT5vdGcuZ2FkZ2V0KQotCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJCXJldHVybjsKIAogCS8qIFBlcmlwaGVyYWwgY29udHJvbGxlcnMgd2hpY2ggbWFuYWdlIHRoZSBwdWxsdXAgdGhlbXNlbHZlcyB3b24ndCBoYXZlCiAJICogZ3Bpb19wdWxsdXAgY29uZmlndXJlZCBoZXJlLiAgSWYgaXQncyBjb25maWd1cmVkIGhlcmUsIHdlJ2xsIGRvIHdoYXQKQEAgLTEwMSw3ICsxMDUsNyBAQAogCSAqIHRoYXQgbWF5IGNvbXBsaWNhdGUgdXNiX2dhZGdldF97LGRpc31jb25uZWN0KCkgc3VwcG9ydC4KIAkgKi8KIAlncGlvID0gcGRhdGEtPmdwaW9fcHVsbHVwOwotCWlmICh2YnVzKSB7CisJaWYgKGlzX3ZidXNfcG93ZXJlZChwZGF0YSkpIHsKIAkJZ3Bpb192YnVzLT5vdGcuc3RhdGUgPSBPVEdfU1RBVEVfQl9QRVJJUEhFUkFMOwogCQl1c2JfZ2FkZ2V0X3ZidXNfY29ubmVjdChncGlvX3ZidXMtPm90Zy5nYWRnZXQpOwogCkBAIC0xMjEsNiArMTI1LDIxIEBACiAJCXVzYl9nYWRnZXRfdmJ1c19kaXNjb25uZWN0KGdwaW9fdmJ1cy0+b3RnLmdhZGdldCk7CiAJCWdwaW9fdmJ1cy0+b3RnLnN0YXRlID0gT1RHX1NUQVRFX0JfSURMRTsKIAl9Cit9CisKKy8qIFZCVVMgY2hhbmdlIElSUSBoYW5kbGVyICovCitzdGF0aWMgaXJxcmV0dXJuX3QgZ3Bpb192YnVzX2lycShpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSBkYXRhOworCXN0cnVjdCBncGlvX3ZidXNfbWFjaF9pbmZvICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBncGlvX3ZidXNfZGF0YSAqZ3Bpb192YnVzID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlkZXZfZGJnKCZwZGV2LT5kZXYsICJWQlVTICVzIChnYWRnZXQ6ICVzKVxuIiwKKwkJaXNfdmJ1c19wb3dlcmVkKHBkYXRhKSA/ICJzdXBwbGllZCIgOiAiaW5hY3RpdmUiLAorCQlncGlvX3ZidXMtPm90Zy5nYWRnZXQgPyBncGlvX3ZidXMtPm90Zy5nYWRnZXQtPm5hbWUgOiAibm9uZSIpOworCisJaWYgKGdwaW9fdmJ1cy0+b3RnLmdhZGdldCkKKwkJc2NoZWR1bGVfd29yaygmZ3Bpb192YnVzLT53b3JrKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTI1Nyw2ICsyNzYsNyBAQAogCQkJaXJxLCBlcnIpOwogCQlnb3RvIGVycl9pcnE7CiAJfQorCUlOSVRfV09SSygmZ3Bpb192YnVzLT53b3JrLCBncGlvX3ZidXNfd29yayk7CiAKIAkvKiBvbmx5IGFjdGl2ZSB3aGVuIGEgZ2FkZ2V0IGlzIHJlZ2lzdGVyZWQgKi8KIAllcnIgPSBvdGdfc2V0X3RyYW5zY2VpdmVyKCZncGlvX3ZidXMtPm90Zyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9vdGcvbm9wLXVzYi14Y2Vpdi5jIGIvZHJpdmVycy91c2Ivb3RnL25vcC11c2IteGNlaXYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjkzM2Y2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivb3RnL25vcC11c2IteGNlaXYuYwpAQCAtMCwwICsxLDE4MCBAQAorLyoKKyAqIGRyaXZlcnMvdXNiL290Zy9ub3AtdXNiLXhjZWl2LmMKKyAqCisgKiBOT1AgVVNCIHRyYW5zY2VpdmVyIGZvciBhbGwgVVNCIHRyYW5zY2VpdmVyIHdoaWNoIGFyZSBlaXRoZXIgYnVpbHQtaW4KKyAqIGludG8gVVNCIElQIG9yIHdoaWNoIGFyZSBtb3N0bHkgYXV0b25vbW91cy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGV4YXMgSW5zdHJ1bWVudHMgSW5jCisgKiBBdXRob3I6IEFqYXkgS3VtYXIgR3VwdGEgPGFqYXkuZ3VwdGFAdGkuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqIEN1cnJlbnQgc3RhdHVzOgorICogCXRoaXMgaXMgdG8gYWRkICJub3AiIHRyYW5zY2VpdmVyIGZvciBhbGwgdGhvc2UgcGh5IHdoaWNoIGlzCisgKiAJYXV0b25vbW91cyBzdWNoIGFzIGlzcDE1MDQgZXRjLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi9vdGcuaD4KKworc3RydWN0IG5vcF91c2JfeGNlaXYgeworCXN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIJb3RnOworCXN0cnVjdCBkZXZpY2UJCSpkZXY7Cit9OworCitzdGF0aWMgdTY0IG5vcF94Y2Vpdl9kbWFtYXNrID0gRE1BXzMyQklUX01BU0s7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG5vcF94Y2Vpdl9kZXZpY2UgPSB7CisJLm5hbWUgICAgICAgICAgID0gIm5vcF91c2JfeGNlaXYiLAorCS5pZCAgICAgICAgICAgICA9IC0xLAorCS5kZXYgPSB7CisJCS5kbWFfbWFzayAgICAgICAgICAgICAgID0gJm5vcF94Y2Vpdl9kbWFtYXNrLAorCQkuY29oZXJlbnRfZG1hX21hc2sgICAgICA9IERNQV8zMkJJVF9NQVNLLAorCQkucGxhdGZvcm1fZGF0YSAgICAgICAgICA9IE5VTEwsCisJfSwKK307CisKK3ZvaWQgdXNiX25vcF94Y2Vpdl9yZWdpc3Rlcih2b2lkKQoreworCWlmIChwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm5vcF94Y2Vpdl9kZXZpY2UpIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byByZWdpc3RlciB1c2Igbm9wIHRyYW5zY2VpdmVyXG4iKTsKKwkJcmV0dXJuOworCX0KK30KKwordm9pZCB1c2Jfbm9wX3hjZWl2X3VucmVnaXN0ZXIodm9pZCkKK3sKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcigmbm9wX3hjZWl2X2RldmljZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG5vcF91c2JfeGNlaXYgKnhjZWl2X3RvX25vcChzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyICp4KQoreworCXJldHVybiBjb250YWluZXJfb2YoeCwgc3RydWN0IG5vcF91c2JfeGNlaXYsIG90Zyk7Cit9CisKK3N0YXRpYyBpbnQgbm9wX3NldF9zdXNwZW5kKHN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIgKngsIGludCBzdXNwZW5kKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5vcF9zZXRfcGVyaXBoZXJhbChzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyICp4LAorCQlzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0KQoreworCXN0cnVjdCBub3BfdXNiX3hjZWl2ICpub3A7CisKKwlpZiAoIXgpCisJCXJldHVybiAtRU5PREVWOworCisJbm9wID0geGNlaXZfdG9fbm9wKHgpOworCisJaWYgKCFnYWRnZXQpIHsKKwkJbm9wLT5vdGcuZ2FkZ2V0ID0gTlVMTDsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJbm9wLT5vdGcuZ2FkZ2V0ID0gZ2FkZ2V0OworCW5vcC0+b3RnLnN0YXRlID0gT1RHX1NUQVRFX0JfSURMRTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBub3Bfc2V0X2hvc3Qoc3RydWN0IG90Z190cmFuc2NlaXZlciAqeCwgc3RydWN0IHVzYl9idXMgKmhvc3QpCit7CisJc3RydWN0IG5vcF91c2JfeGNlaXYgKm5vcDsKKworCWlmICgheCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlub3AgPSB4Y2Vpdl90b19ub3AoeCk7CisKKwlpZiAoIWhvc3QpIHsKKwkJbm9wLT5vdGcuaG9zdCA9IE5VTEw7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCW5vcC0+b3RnLmhvc3QgPSBob3N0OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBub3BfdXNiX3hjZWl2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG5vcF91c2JfeGNlaXYJKm5vcDsKKwlpbnQgZXJyOworCisJbm9wID0ga3phbGxvYyhzaXplb2YgKm5vcCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFub3ApCisJCXJldHVybiAtRU5PTUVNOworCisJbm9wLT5kZXYJCT0gJnBkZXYtPmRldjsKKwlub3AtPm90Zy5kZXYJCT0gbm9wLT5kZXY7CisJbm9wLT5vdGcubGFiZWwJCT0gIm5vcC14Y2VpdiI7CisJbm9wLT5vdGcuc3RhdGUJCT0gT1RHX1NUQVRFX1VOREVGSU5FRDsKKwlub3AtPm90Zy5zZXRfaG9zdAk9IG5vcF9zZXRfaG9zdDsKKwlub3AtPm90Zy5zZXRfcGVyaXBoZXJhbAk9IG5vcF9zZXRfcGVyaXBoZXJhbDsKKwlub3AtPm90Zy5zZXRfc3VzcGVuZAk9IG5vcF9zZXRfc3VzcGVuZDsKKworCWVyciA9IG90Z19zZXRfdHJhbnNjZWl2ZXIoJm5vcC0+b3RnKTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IHJlZ2lzdGVyIHRyYW5zY2VpdmVyLCBlcnI6ICVkXG4iLAorCQkJZXJyKTsKKwkJZ290byBleGl0OworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG5vcCk7CisKKwlyZXR1cm4gMDsKK2V4aXQ6CisJa2ZyZWUobm9wKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBub3BfdXNiX3hjZWl2X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBub3BfdXNiX3hjZWl2ICpub3AgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCW90Z19zZXRfdHJhbnNjZWl2ZXIoTlVMTCk7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwlrZnJlZShub3ApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG5vcF91c2JfeGNlaXZfZHJpdmVyID0geworCS5wcm9iZQkJPSBub3BfdXNiX3hjZWl2X3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aobm9wX3VzYl94Y2Vpdl9yZW1vdmUpLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJub3BfdXNiX3hjZWl2IiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG5vcF91c2JfeGNlaXZfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm5vcF91c2JfeGNlaXZfZHJpdmVyKTsKK30KK3N1YnN5c19pbml0Y2FsbChub3BfdXNiX3hjZWl2X2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgbm9wX3VzYl94Y2Vpdl9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm5vcF91c2JfeGNlaXZfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KG5vcF91c2JfeGNlaXZfZXhpdCk7CisKK01PRFVMRV9BTElBUygicGxhdGZvcm06bm9wX3VzYl94Y2VpdiIpOworTU9EVUxFX0FVVEhPUigiVGV4YXMgSW5zdHJ1bWVudHMgSW5jIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIk5PUCBVU0IgVHJhbnNjZWl2ZXIgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9vdGcvdHdsNDAzMC11c2IuYyBiL2RyaXZlcnMvdXNiL290Zy90d2w0MDMwLXVzYi5jCmluZGV4IDQxNmU0NDEuLmQ5NDc4ZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL290Zy90d2w0MDMwLXVzYi5jCisrKyBiL2RyaXZlcnMvdXNiL290Zy90d2w0MDMwLXVzYi5jCkBAIC0zNCw2ICszNCw4IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC91c2Ivb3RnLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjL3R3bDQwMzAuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KIAogCiAvKiBSZWdpc3RlciBkZWZpbmVzICovCkBAIC0yNDYsNiArMjQ4LDExIEBACiAJc3RydWN0IG90Z190cmFuc2NlaXZlcglvdGc7CiAJc3RydWN0IGRldmljZQkJKmRldjsKIAorCS8qIFRXTDQwMzAgaW50ZXJuYWwgVVNCIHJlZ3VsYXRvciBzdXBwbGllcyAqLworCXN0cnVjdCByZWd1bGF0b3IJKnVzYjF2NTsKKwlzdHJ1Y3QgcmVndWxhdG9yCSp1c2Ixdjg7CisJc3RydWN0IHJlZ3VsYXRvcgkqdXNiM3YxOworCiAJLyogZm9yIHZidXMgcmVwb3J0aW5nIHdpdGggaXJxcyBkaXNhYmxlZCAqLwogCXNwaW5sb2NrX3QJCWxvY2s7CiAKQEAgLTQzNCw2ICs0NDEsMTggQEAKIAogCXB3ciA9IHR3bDQwMzBfdXNiX3JlYWQodHdsLCBQSFlfUFdSX0NUUkwpOwogCWlmIChvbikgeworCQlyZWd1bGF0b3JfZW5hYmxlKHR3bC0+dXNiM3YxKTsKKwkJcmVndWxhdG9yX2VuYWJsZSh0d2wtPnVzYjF2OCk7CisJCS8qCisJCSAqIERpc2FibGluZyB1c2IzdjEgcmVndWxhdG9yICg9IHdyaXRpbmcgMCB0byBWVVNCM1YxX0RFVl9HUlAKKwkJICogaW4gdHdsNDAzMCkgcmVzZXRzIHRoZSBWVVNCX0RFRElDQVRFRDIgcmVnaXN0ZXIuIFRoaXMgcmVzZXQKKwkJICogZW5hYmxlcyBWVVNCM1YxX1NMRUVQIGJpdCB0aGF0IHJlbWFwcyB1c2IzdjEgQUNUSVZFIHN0YXRlIHRvCisJCSAqIFNMRUVQLiBXZSB3b3JrIGFyb3VuZCB0aGlzIGJ5IGNsZWFyaW5nIHRoZSBiaXQgYWZ0ZXIgdXN2M3YxCisJCSAqIGlzIHJlLWFjdGl2YXRlZC4gVGhpcyBlbnN1cmVzIHRoYXQgVlVTQjNWMSBpcyByZWFsbHkgYWN0aXZlLgorCQkgKi8KKwkJdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUE1fUkVDRUlWRVIsIDAsCisJCQkJCQkJVlVTQl9ERURJQ0FURUQyKTsKKwkJcmVndWxhdG9yX2VuYWJsZSh0d2wtPnVzYjF2NSk7CiAJCXB3ciAmPSB+UEhZX1BXUl9QSFlQV0Q7CiAJCVdBUk5fT04odHdsNDAzMF91c2Jfd3JpdGVfdmVyaWZ5KHR3bCwgUEhZX1BXUl9DVFJMLCBwd3IpIDwgMCk7CiAJCXR3bDQwMzBfdXNiX3dyaXRlKHR3bCwgUEhZX0NMS19DVFJMLApAQCAtNDQzLDYgKzQ2Miw5IEBACiAJfSBlbHNlICB7CiAJCXB3ciB8PSBQSFlfUFdSX1BIWVBXRDsKIAkJV0FSTl9PTih0d2w0MDMwX3VzYl93cml0ZV92ZXJpZnkodHdsLCBQSFlfUFdSX0NUUkwsIHB3cikgPCAwKTsKKwkJcmVndWxhdG9yX2Rpc2FibGUodHdsLT51c2IxdjUpOworCQlyZWd1bGF0b3JfZGlzYWJsZSh0d2wtPnVzYjF2OCk7CisJCXJlZ3VsYXRvcl9kaXNhYmxlKHR3bC0+dXNiM3YxKTsKIAl9CiB9CiAKQEAgLTQ2OCw3ICs0OTAsNyBAQAogCXR3bC0+YXNsZWVwID0gMDsKIH0KIAotc3RhdGljIHZvaWQgdHdsNDAzMF91c2JfbGRvX2luaXQoc3RydWN0IHR3bDQwMzBfdXNiICp0d2wpCitzdGF0aWMgaW50IHR3bDQwMzBfdXNiX2xkb19pbml0KHN0cnVjdCB0d2w0MDMwX3VzYiAqdHdsKQogewogCS8qIEVuYWJsZSB3cml0aW5nIHRvIHBvd2VyIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzICovCiAJdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUE1fTUFTVEVSLCAweEMwLCBQUk9URUNUX0tFWSk7CkBAIC00ODAsMjAgKzUwMiw0NSBAQAogCS8qIGlucHV0IHRvIFZVU0IzVjEgTERPIGlzIGZyb20gVkJBVCwgbm90IFZCVVMgKi8KIAl0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9QTV9SRUNFSVZFUiwgMHgxNCwgVlVTQl9ERURJQ0FURUQxKTsKIAotCS8qIHR1cm4gb24gMy4xViByZWd1bGF0b3IgKi8KLQl0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9QTV9SRUNFSVZFUiwgMHgyMCwgVlVTQjNWMV9ERVZfR1JQKTsKKwkvKiBJbml0aWFsaXplIDMuMVYgcmVndWxhdG9yICovCisJdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUE1fUkVDRUlWRVIsIDAsIFZVU0IzVjFfREVWX0dSUCk7CisKKwl0d2wtPnVzYjN2MSA9IHJlZ3VsYXRvcl9nZXQodHdsLT5kZXYsICJ1c2IzdjEiKTsKKwlpZiAoSVNfRVJSKHR3bC0+dXNiM3YxKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAl0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9QTV9SRUNFSVZFUiwgMCwgVlVTQjNWMV9UWVBFKTsKIAotCS8qIHR1cm4gb24gMS41ViByZWd1bGF0b3IgKi8KLQl0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9QTV9SRUNFSVZFUiwgMHgyMCwgVlVTQjFWNV9ERVZfR1JQKTsKKwkvKiBJbml0aWFsaXplIDEuNVYgcmVndWxhdG9yICovCisJdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUE1fUkVDRUlWRVIsIDAsIFZVU0IxVjVfREVWX0dSUCk7CisKKwl0d2wtPnVzYjF2NSA9IHJlZ3VsYXRvcl9nZXQodHdsLT5kZXYsICJ1c2IxdjUiKTsKKwlpZiAoSVNfRVJSKHR3bC0+dXNiMXY1KSkKKwkJZ290byBmYWlsMTsKKwogCXR3bDQwMzBfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BNX1JFQ0VJVkVSLCAwLCBWVVNCMVY1X1RZUEUpOwogCi0JLyogdHVybiBvbiAxLjhWIHJlZ3VsYXRvciAqLwotCXR3bDQwMzBfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BNX1JFQ0VJVkVSLCAweDIwLCBWVVNCMVY4X0RFVl9HUlApOworCS8qIEluaXRpYWxpemUgMS44ViByZWd1bGF0b3IgKi8KKwl0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9QTV9SRUNFSVZFUiwgMCwgVlVTQjFWOF9ERVZfR1JQKTsKKworCXR3bC0+dXNiMXY4ID0gcmVndWxhdG9yX2dldCh0d2wtPmRldiwgInVzYjF2OCIpOworCWlmIChJU19FUlIodHdsLT51c2IxdjgpKQorCQlnb3RvIGZhaWwyOworCiAJdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUE1fUkVDRUlWRVIsIDAsIFZVU0IxVjhfVFlQRSk7CiAKIAkvKiBkaXNhYmxlIGFjY2VzcyB0byBwb3dlciBjb25maWd1cmF0aW9uIHJlZ2lzdGVycyAqLwogCXR3bDQwMzBfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BNX01BU1RFUiwgMCwgUFJPVEVDVF9LRVkpOworCisJcmV0dXJuIDA7CisKK2ZhaWwyOgorCXJlZ3VsYXRvcl9wdXQodHdsLT51c2IxdjUpOworCXR3bC0+dXNiMXY1ID0gTlVMTDsKK2ZhaWwxOgorCXJlZ3VsYXRvcl9wdXQodHdsLT51c2IzdjEpOworCXR3bC0+dXNiM3YxID0gTlVMTDsKKwlyZXR1cm4gLUVOT0RFVjsKIH0KIAogc3RhdGljIHNzaXplX3QgdHdsNDAzMF91c2JfdmJ1c19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKQEAgLTU5OCw3ICs2NDUsNyBAQAogewogCXN0cnVjdCB0d2w0MDMwX3VzYl9kYXRhICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCB0d2w0MDMwX3VzYgkqdHdsOwotCWludAkJCXN0YXR1czsKKwlpbnQJCQlzdGF0dXMsIGVycjsKIAogCWlmICghcGRhdGEpIHsKIAkJZGV2X2RiZygmcGRldi0+ZGV2LCAicGxhdGZvcm1fZGF0YSBub3QgYXZhaWxhYmxlXG4iKTsKQEAgLTYyMiw3ICs2NjksMTIgQEAKIAkvKiBpbml0IHNwaW5sb2NrIGZvciB3b3JrcXVldWUgKi8KIAlzcGluX2xvY2tfaW5pdCgmdHdsLT5sb2NrKTsKIAotCXR3bDQwMzBfdXNiX2xkb19pbml0KHR3bCk7CisJZXJyID0gdHdsNDAzMF91c2JfbGRvX2luaXQodHdsKTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImxkbyBpbml0IGZhaWxlZFxuIik7CisJCWtmcmVlKHR3bCk7CisJCXJldHVybiBlcnI7CisJfQogCW90Z19zZXRfdHJhbnNjZWl2ZXIoJnR3bC0+b3RnKTsKIAogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHR3bCk7CkBAIC02ODgsNiArNzQwLDkgQEAKIAl0d2w0MDMwX3VzYl9jbGVhcl9iaXRzKHR3bCwgUE9XRVJfQ1RSTCwgUE9XRVJfQ1RSTF9PVEdfRU5BQik7CiAKIAl0d2w0MDMwX3BoeV9wb3dlcih0d2wsIDApOworCXJlZ3VsYXRvcl9wdXQodHdsLT51c2IxdjUpOworCXJlZ3VsYXRvcl9wdXQodHdsLT51c2IxdjgpOworCXJlZ3VsYXRvcl9wdXQodHdsLT51c2IzdjEpOwogCiAJa2ZyZWUodHdsKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL0tjb25maWcgYi9kcml2ZXJzL3VzYi9zZXJpYWwvS2NvbmZpZwppbmRleCBiMzYxZjA1Li5hNjVmOTE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvS2NvbmZpZwpAQCAtMTE2LDE0ICsxMTYsMTQgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGRpZ2lfYWNjZWxlcG9ydC4KIAotY29uZmlnIFVTQl9TRVJJQUxfQ1AyMTAxCi0JdHJpc3RhdGUgIlVTQiBDUDIxMDEgVUFSVCBCcmlkZ2UgQ29udHJvbGxlciIKK2NvbmZpZyBVU0JfU0VSSUFMX0NQMjEwWAorCXRyaXN0YXRlICJVU0IgQ1AyMTB4IGZhbWlseSBvZiBVQVJUIEJyaWRnZSBDb250cm9sbGVycyIKIAloZWxwCi0JICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBhIENQMjEwMS9DUDIxMDIgYmFzZWQgVVNCIHRvIFJTMjMyCi0JICBjb252ZXJ0ZXIuCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBhIENQMjEwMS9DUDIxMDIvQ1AyMTAzIGJhc2VkIFVTQgorCSAgdG8gUlMyMzIgY29udmVydGVycy4KIAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY3AyMTAxLgorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNwMjEweC4KIAogY29uZmlnIFVTQl9TRVJJQUxfQ1lQUkVTU19NOAogCXRyaXN0YXRlICJVU0IgQ3lwcmVzcyBNOCBVU0IgU2VyaWFsIERyaXZlciIKQEAgLTQ3Miw2ICs0NzIsMTUgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG90aTY4NTguCiAKK2NvbmZpZyBVU0JfU0VSSUFMX1FVQUxDT01NCisJdHJpc3RhdGUgIlVTQiBRdWFsY29tbSBTZXJpYWwgbW9kZW0iCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhIFF1YWxjb21tIFVTQiBtb2RlbSBkZXZpY2UuICBUaGVzZSBhcmUKKwkgIHVzdWFsbHkgd2lyZWxlc3MgY2VsbHVsYXIgbW9kZW1zLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBxY3NlcmlhbC4KKwogY29uZmlnIFVTQl9TRVJJQUxfU1BDUDhYNQogCXRyaXN0YXRlICJVU0IgU1BDUDh4NSBVU0IgVG8gU2VyaWFsIERyaXZlciIKIAloZWxwCkBAIC01MTUsNiArNTI0LDE1IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzaWVycmEuCiAKK2NvbmZpZyBVU0JfU0VSSUFMX1NZTUJPTAorCXRyaXN0YXRlICJVU0IgU3ltYm9sIEJhcmNvZGUgZHJpdmVyIChzZXJpYWwgbW9kZSkiCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgYSBTeW1ib2wgVVNCIEJhcmNvZGUgZGV2aWNlCisJICBpbiBzZXJpYWwgZW11bGF0aW9uIG1vZGUuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHN5bWJvbHNlcmlhbC4KKwogY29uZmlnIFVTQl9TRVJJQUxfVEkKIAl0cmlzdGF0ZSAiVVNCIFRJIDM0MTAvNTA1MiBTZXJpYWwgRHJpdmVyIgogCWhlbHAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL3NlcmlhbC9NYWtlZmlsZQppbmRleCBiNzViZTkxLi42NjYxOWJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvTWFrZWZpbGUKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL01ha2VmaWxlCkBAIC0xNSw3ICsxNSw3IEBACiBvYmotJChDT05GSUdfVVNCX1NFUklBTF9BUkszMTE2KQkJKz0gYXJrMzExNi5vCiBvYmotJChDT05GSUdfVVNCX1NFUklBTF9CRUxLSU4pCQkJKz0gYmVsa2luX3NhLm8KIG9iai0kKENPTkZJR19VU0JfU0VSSUFMX0NIMzQxKQkJCSs9IGNoMzQxLm8KLW9iai0kKENPTkZJR19VU0JfU0VSSUFMX0NQMjEwMSkJCQkrPSBjcDIxMDEubworb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfQ1AyMTBYKQkJCSs9IGNwMjEweC5vCiBvYmotJChDT05GSUdfVVNCX1NFUklBTF9DWUJFUkpBQ0spCQkrPSBjeWJlcmphY2subwogb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfQ1lQUkVTU19NOCkJCSs9IGN5cHJlc3NfbTgubwogb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfREVCVUcpCQkJKz0gdXNiX2RlYnVnLm8KQEAgLTQ1LDEwICs0NSwxMiBAQAogb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfT1BUSU9OKQkJCSs9IG9wdGlvbi5vCiBvYmotJChDT05GSUdfVVNCX1NFUklBTF9PVEk2ODU4KQkJKz0gb3RpNjg1OC5vCiBvYmotJChDT05GSUdfVVNCX1NFUklBTF9QTDIzMDMpCQkJKz0gcGwyMzAzLm8KK29iai0kKENPTkZJR19VU0JfU0VSSUFMX1FVQUxDT01NKQkJKz0gcWNzZXJpYWwubwogb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfU0FGRSkJCQkrPSBzYWZlX3NlcmlhbC5vCiBvYmotJChDT05GSUdfVVNCX1NFUklBTF9TSUVNRU5TX01QSSkJCSs9IHNpZW1lbnNfbXBpLm8KIG9iai0kKENPTkZJR19VU0JfU0VSSUFMX1NJRVJSQVdJUkVMRVNTKQkJKz0gc2llcnJhLm8KIG9iai0kKENPTkZJR19VU0JfU0VSSUFMX1NQQ1A4WDUpCQkrPSBzcGNwOHg1Lm8KK29iai0kKENPTkZJR19VU0JfU0VSSUFMX1NZTUJPTCkJCQkrPSBzeW1ib2xzZXJpYWwubwogb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfVEkpCQkJKz0gdGlfdXNiXzM0MTBfNTA1Mi5vCiBvYmotJChDT05GSUdfVVNCX1NFUklBTF9WSVNPUikJCQkrPSB2aXNvci5vCiBvYmotJChDT05GSUdfVVNCX1NFUklBTF9XSElURUhFQVQpCQkrPSB3aGl0ZWhlYXQubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2NoMzQxLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY2gzNDEuYwppbmRleCBmNjFlM2NhLi5hYjRjYzI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvY2gzNDEuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY2gzNDEuYwpAQCAtMSw1ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgMjAwNywgRnJhbmsgQSBLaW5nc3dvb2QgPGZyYW5rQGtpbmdzd29vZC1jb25zdWx0aW5nLmNvLnVrPgorICogQ29weXJpZ2h0IDIwMDcsIFdlcm5lciBDb3JuZWxpdXMgPHdlcm5lckBjb3JuZWxpdXMtY29uc3VsdC5kZT4KKyAqIENvcHlyaWdodCAyMDA5LCBCb3JpcyBIYWpkdWsgPGJvcmlzQGhhamR1ay5vcmc+CiAgKgogICogY2gzNDEuYyBpbXBsZW1lbnRzIGEgc2VyaWFsIHBvcnQgZHJpdmVyIGZvciB0aGUgV2luY2hpcGhlYWQgQ0gzNDEuCiAgKgpAQCAtMjEsOSArMjMsMzkgQEAKICNpbmNsdWRlIDxsaW51eC91c2Ivc2VyaWFsLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CiAKLSNkZWZpbmUgREVGQVVMVF9CQVVEX1JBVEUgMjQwMAorI2RlZmluZSBERUZBVUxUX0JBVURfUkFURSA5NjAwCiAjZGVmaW5lIERFRkFVTFRfVElNRU9VVCAgIDEwMDAKIAorLyogZmxhZ3MgZm9yIElPLUJpdHMgKi8KKyNkZWZpbmUgQ0gzNDFfQklUX1JUUyAoMSA8PCA2KQorI2RlZmluZSBDSDM0MV9CSVRfRFRSICgxIDw8IDUpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBpbnRlcnJ1cHQgcGlwZSBkZWZpbml0aW9ucyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIGFsd2F5cyA0IGludGVycnVwdCBieXRlcyAqLworLyogZmlyc3QgaXJxIGJ5dGUgbm9ybWFsbHkgMHgwOCAqLworLyogc2Vjb25kIGlycSBieXRlIGJhc2UgMHg3ZCArIGJlbG93ICovCisvKiB0aGlyZCBpcnEgYnl0ZSBiYXNlIDB4OTQgKyBiZWxvdyAqLworLyogZm91cnRoIGlycSBieXRlIG5vcm1hbGx5IDB4ZWUgKi8KKworLyogc2Vjb25kIGludGVycnVwdCBieXRlICovCisjZGVmaW5lIENIMzQxX01VTFRfU1RBVCAweDA0IC8qIG11bHRpcGxlIHN0YXR1cyBzaW5jZSBsYXN0IGludGVycnVwdCBldmVudCAqLworCisvKiBzdGF0dXMgcmV0dXJuZWQgaW4gdGhpcmQgaW50ZXJydXB0IGFuc3dlciBieXRlLCBpbnZlcnRlZCBpbiBkYXRhCisgICBmcm9tIGlycSAqLworI2RlZmluZSBDSDM0MV9CSVRfQ1RTIDB4MDEKKyNkZWZpbmUgQ0gzNDFfQklUX0RTUiAweDAyCisjZGVmaW5lIENIMzQxX0JJVF9SSSAgMHgwNAorI2RlZmluZSBDSDM0MV9CSVRfRENEIDB4MDgKKyNkZWZpbmUgQ0gzNDFfQklUU19NT0RFTV9TVEFUIDB4MGYgLyogYWxsIGJpdHMgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBiYXVkcmF0ZSBjYWxjdWxhdGlvbiBmYWN0b3IgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBDSDM0MV9CQVVEQkFTRV9GQUNUT1IgMTUzMjYyMDgwMAorI2RlZmluZSBDSDM0MV9CQVVEQkFTRV9ESVZNQVggMworCiBzdGF0aWMgaW50IGRlYnVnOwogCiBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGUgW10gPSB7CkBAIC0zNCw5ICs2NiwxMiBAQAogTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGlkX3RhYmxlKTsKIAogc3RydWN0IGNoMzQxX3ByaXZhdGUgewotCXVuc2lnbmVkIGJhdWRfcmF0ZTsKLQl1OCBkdHI7Ci0JdTggcnRzOworCXNwaW5sb2NrX3QgbG9jazsgLyogYWNjZXNzIGxvY2sgKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdCBkZWx0YV9tc3Jfd2FpdDsgLyogd2FpdCBxdWV1ZSBmb3IgbW9kZW0gc3RhdHVzICovCisJdW5zaWduZWQgYmF1ZF9yYXRlOyAvKiBzZXQgYmF1ZCByYXRlICovCisJdTggbGluZV9jb250cm9sOyAvKiBzZXQgbGluZSBjb250cm9sIHZhbHVlIFJUUy9EVFIgKi8KKwl1OCBsaW5lX3N0YXR1czsgLyogYWN0aXZlIHN0YXR1cyBvZiBtb2RlbSBjb250cm9sIGlucHV0cyAqLworCXU4IG11bHRpX3N0YXR1c19jaGFuZ2U7IC8qIHN0YXR1cyBjaGFuZ2VkIG11bHRpcGxlIHNpbmNlIGxhc3QgY2FsbCAqLwogfTsKIAogc3RhdGljIGludCBjaDM0MV9jb250cm9sX291dChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCB1OCByZXF1ZXN0LApAQCAtNzIsMzcgKzEwNywyOCBAQAogewogCXNob3J0IGEsIGI7CiAJaW50IHI7CisJdW5zaWduZWQgbG9uZyBmYWN0b3I7CisJc2hvcnQgZGl2aXNvcjsKIAogCWRiZygiY2gzNDFfc2V0X2JhdWRyYXRlKCVkKSIsIHByaXYtPmJhdWRfcmF0ZSk7Ci0Jc3dpdGNoIChwcml2LT5iYXVkX3JhdGUpIHsKLQljYXNlIDI0MDA6Ci0JCWEgPSAweGQ5MDE7Ci0JCWIgPSAweDAwMzg7Ci0JCWJyZWFrOwotCWNhc2UgNDgwMDoKLQkJYSA9IDB4NjQwMjsKLQkJYiA9IDB4MDAxZjsKLQkJYnJlYWs7Ci0JY2FzZSA5NjAwOgotCQlhID0gMHhiMjAyOwotCQliID0gMHgwMDEzOwotCQlicmVhazsKLQljYXNlIDE5MjAwOgotCQlhID0gMHhkOTAyOwotCQliID0gMHgwMDBkOwotCQlicmVhazsKLQljYXNlIDM4NDAwOgotCQlhID0gMHg2NDAzOwotCQliID0gMHgwMDBhOwotCQlicmVhazsKLQljYXNlIDExNTIwMDoKLQkJYSA9IDB4Y2MwMzsKLQkJYiA9IDB4MDAwODsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKKworCWlmICghcHJpdi0+YmF1ZF9yYXRlKQogCQlyZXR1cm4gLUVJTlZBTDsKKwlmYWN0b3IgPSAoQ0gzNDFfQkFVREJBU0VfRkFDVE9SIC8gcHJpdi0+YmF1ZF9yYXRlKTsKKwlkaXZpc29yID0gQ0gzNDFfQkFVREJBU0VfRElWTUFYOworCisJd2hpbGUgKChmYWN0b3IgPiAweGZmZjApICYmIGRpdmlzb3IpIHsKKwkJZmFjdG9yID4+PSAzOworCQlkaXZpc29yLS07CiAJfQogCisJaWYgKGZhY3RvciA+IDB4ZmZmMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlmYWN0b3IgPSAweDEwMDAwIC0gZmFjdG9yOworCWEgPSAoZmFjdG9yICYgMHhmZjAwKSB8IGRpdmlzb3I7CisJYiA9IGZhY3RvciAmIDB4ZmY7CisKIAlyID0gY2gzNDFfY29udHJvbF9vdXQoZGV2LCAweDlhLCAweDEzMTIsIGEpOwogCWlmICghcikKIAkJciA9IGNoMzQxX2NvbnRyb2xfb3V0KGRldiwgMHg5YSwgMHgwZjJjLCBiKTsKQEAgLTExMCwxOSArMTM2LDE4IEBACiAJcmV0dXJuIHI7CiB9CiAKLXN0YXRpYyBpbnQgY2gzNDFfc2V0X2hhbmRzaGFrZShzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LAotCQkJICAgICAgIHN0cnVjdCBjaDM0MV9wcml2YXRlICpwcml2KQorc3RhdGljIGludCBjaDM0MV9zZXRfaGFuZHNoYWtlKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIHU4IGNvbnRyb2wpCiB7Ci0JZGJnKCJjaDM0MV9zZXRfaGFuZHNoYWtlKCVkLCVkKSIsIHByaXYtPmR0ciwgcHJpdi0+cnRzKTsKLQlyZXR1cm4gY2gzNDFfY29udHJvbF9vdXQoZGV2LCAweGE0LAotCQl+KChwcml2LT5kdHI/MTw8NTowKXwocHJpdi0+cnRzPzE8PDY6MCkpLCAwKTsKKwlkYmcoImNoMzQxX3NldF9oYW5kc2hha2UoMHglMDJ4KSIsIGNvbnRyb2wpOworCXJldHVybiBjaDM0MV9jb250cm9sX291dChkZXYsIDB4YTQsIH5jb250cm9sLCAwKTsKIH0KIAotc3RhdGljIGludCBjaDM0MV9nZXRfc3RhdHVzKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGNoMzQxX2dldF9zdGF0dXMoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgc3RydWN0IGNoMzQxX3ByaXZhdGUgKnByaXYpCiB7CiAJY2hhciAqYnVmZmVyOwogCWludCByOwogCWNvbnN0IHVuc2lnbmVkIHNpemUgPSA4OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlkYmcoImNoMzQxX2dldF9zdGF0dXMoKSIpOwogCkBAIC0xMzQsMTAgKzE1OSwxNSBAQAogCWlmIChyIDwgMCkKIAkJZ290byBvdXQ7CiAKLQkvKiBOb3QgaGF2aW5nIHRoZSBkYXRhc2hlZXQgZm9yIHRoZSBDSDM0MSwgd2UgaWdub3JlIHRoZSBieXRlcyByZXR1cm5lZAotCSAqIGZyb20gdGhlIGRldmljZS4gUmV0dXJuIGVycm9yIGlmIHRoZSBkZXZpY2UgZGlkIG5vdCByZXNwb25kIGluIHRpbWUuCi0JICovCi0JciA9IDA7CisJLyogc2V0dXAgdGhlIHByaXZhdGUgc3RhdHVzIGlmIGF2YWlsYWJsZSAqLworCWlmIChyID09IDIpIHsKKwkJciA9IDA7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCXByaXYtPmxpbmVfc3RhdHVzID0gKH4oKmJ1ZmZlcikpICYgQ0gzNDFfQklUU19NT0RFTV9TVEFUOworCQlwcml2LT5tdWx0aV9zdGF0dXNfY2hhbmdlID0gMDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCX0gZWxzZQorCQlyID0gLUVQUk9UTzsKIAogb3V0OglrZnJlZShidWZmZXIpOwogCXJldHVybiByOwpAQCAtMTgwLDcgKzIxMCw3IEBACiAJCWdvdG8gb3V0OwogCiAJLyogZXhwZWN0IDB4ZmYgMHhlZSAqLwotCXIgPSBjaDM0MV9nZXRfc3RhdHVzKGRldik7CisJciA9IGNoMzQxX2dldF9zdGF0dXMoZGV2LCBwcml2KTsKIAlpZiAociA8IDApCiAJCWdvdG8gb3V0OwogCkBAIC0xOTIsMTIgKzIyMiwxMiBAQAogCWlmIChyIDwgMCkKIAkJZ290byBvdXQ7CiAKLQlyID0gY2gzNDFfc2V0X2hhbmRzaGFrZShkZXYsIHByaXYpOworCXIgPSBjaDM0MV9zZXRfaGFuZHNoYWtlKGRldiwgcHJpdi0+bGluZV9jb250cm9sKTsKIAlpZiAociA8IDApCiAJCWdvdG8gb3V0OwogCiAJLyogZXhwZWN0IDB4OWYgMHhlZSAqLwotCXIgPSBjaDM0MV9nZXRfc3RhdHVzKGRldik7CisJciA9IGNoMzQxX2dldF9zdGF0dXMoZGV2LCBwcml2KTsKIAogb3V0OglrZnJlZShidWZmZXIpOwogCXJldHVybiByOwpAQCAtMjE2LDkgKzI0NiwxMCBAQAogCWlmICghcHJpdikKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwlzcGluX2xvY2tfaW5pdCgmcHJpdi0+bG9jayk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmcHJpdi0+ZGVsdGFfbXNyX3dhaXQpOwogCXByaXYtPmJhdWRfcmF0ZSA9IERFRkFVTFRfQkFVRF9SQVRFOwotCXByaXYtPmR0ciA9IDE7Ci0JcHJpdi0+cnRzID0gMTsKKwlwcml2LT5saW5lX2NvbnRyb2wgPSBDSDM0MV9CSVRfUlRTIHwgQ0gzNDFfQklUX0RUUjsKIAogCXIgPSBjaDM0MV9jb25maWd1cmUoc2VyaWFsLT5kZXYsIHByaXYpOwogCWlmIChyIDwgMCkKQEAgLTIzMSw2ICsyNjIsMzUgQEAKIAlyZXR1cm4gcjsKIH0KIAorc3RhdGljIHZvaWQgY2gzNDFfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCQlzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3QgY2gzNDFfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCBjX2NmbGFnOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKKworCS8qIHNodXRkb3duIG91ciB1cmJzICovCisJZGJnKCIlcyAtIHNodXR0aW5nIGRvd24gdXJicyIsIF9fZnVuY19fKTsKKwl1c2Jfa2lsbF91cmIocG9ydC0+d3JpdGVfdXJiKTsKKwl1c2Jfa2lsbF91cmIocG9ydC0+cmVhZF91cmIpOworCXVzYl9raWxsX3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiKTsKKworCWlmICh0dHkpIHsKKwkJY19jZmxhZyA9IHR0eS0+dGVybWlvcy0+Y19jZmxhZzsKKwkJaWYgKGNfY2ZsYWcgJiBIVVBDTCkgeworCQkJLyogZHJvcCBEVFIgYW5kIFJUUyAqLworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJCXByaXYtPmxpbmVfY29udHJvbCA9IDA7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCQljaDM0MV9zZXRfaGFuZHNoYWtlKHBvcnQtPnNlcmlhbC0+ZGV2LCAwKTsKKwkJfQorCX0KKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJnByaXYtPmRlbHRhX21zcl93YWl0KTsKK30KKworCiAvKiBvcGVuIHRoaXMgZGV2aWNlLCBzZXQgZGVmYXVsdCBwYXJhbWV0ZXJzICovCiBzdGF0aWMgaW50IGNoMzQxX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKIAkJCQlzdHJ1Y3QgZmlsZSAqZmlscCkKQEAgLTI0MiwxNCArMzAyLDEzIEBACiAJZGJnKCJjaDM0MV9vcGVuKCkiKTsKIAogCXByaXYtPmJhdWRfcmF0ZSA9IERFRkFVTFRfQkFVRF9SQVRFOwotCXByaXYtPmR0ciA9IDE7Ci0JcHJpdi0+cnRzID0gMTsKKwlwcml2LT5saW5lX2NvbnRyb2wgPSBDSDM0MV9CSVRfUlRTIHwgQ0gzNDFfQklUX0RUUjsKIAogCXIgPSBjaDM0MV9jb25maWd1cmUoc2VyaWFsLT5kZXYsIHByaXYpOwogCWlmIChyKQogCQlnb3RvIG91dDsKIAotCXIgPSBjaDM0MV9zZXRfaGFuZHNoYWtlKHNlcmlhbC0+ZGV2LCBwcml2KTsKKwlyID0gY2gzNDFfc2V0X2hhbmRzaGFrZShzZXJpYWwtPmRldiwgcHJpdi0+bGluZV9jb250cm9sKTsKIAlpZiAocikKIAkJZ290byBvdXQ7CiAKQEAgLTI1Nyw2ICszMTYsMTYgQEAKIAlpZiAocikKIAkJZ290byBvdXQ7CiAKKwlkYmcoIiVzIC0gc3VibWl0dGluZyBpbnRlcnJ1cHQgdXJiIiwgX19mdW5jX18pOworCXBvcnQtPmludGVycnVwdF9pbl91cmItPmRldiA9IHNlcmlhbC0+ZGV2OworCXIgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLCBHRlBfS0VSTkVMKTsKKwlpZiAocikgeworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIGludGVycnVwdCB1cmIsIgorCQkJIiBlcnJvciAlZFxuIiwgX19mdW5jX18sIHIpOworCQljaDM0MV9jbG9zZSh0dHksIHBvcnQsIE5VTEwpOworCQlyZXR1cm4gLUVQUk9UTzsKKwl9CisKIAlyID0gdXNiX3NlcmlhbF9nZW5lcmljX29wZW4odHR5LCBwb3J0LCBmaWxwKTsKIAogb3V0OglyZXR1cm4gcjsKQEAgLTI3MCw0NiArMzM5LDIyNCBAQAogewogCXN0cnVjdCBjaDM0MV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCXVuc2lnbmVkIGJhdWRfcmF0ZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJZGJnKCJjaDM0MV9zZXRfdGVybWlvcygpIik7CiAKKwlpZiAoIXR0eSB8fCAhdHR5LT50ZXJtaW9zKQorCQlyZXR1cm47CisKIAliYXVkX3JhdGUgPSB0dHlfZ2V0X2JhdWRfcmF0ZSh0dHkpOwogCi0Jc3dpdGNoIChiYXVkX3JhdGUpIHsKLQljYXNlIDI0MDA6Ci0JY2FzZSA0ODAwOgotCWNhc2UgOTYwMDoKLQljYXNlIDE5MjAwOgotCWNhc2UgMzg0MDA6Ci0JY2FzZSAxMTUyMDA6Ci0JCXByaXYtPmJhdWRfcmF0ZSA9IGJhdWRfcmF0ZTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJZGJnKCJSYXRlICVkIG5vdCBzdXBwb3J0ZWQsIHVzaW5nICVkIiwKLQkJCWJhdWRfcmF0ZSwgREVGQVVMVF9CQVVEX1JBVEUpOwotCQlwcml2LT5iYXVkX3JhdGUgPSBERUZBVUxUX0JBVURfUkFURTsKKwlwcml2LT5iYXVkX3JhdGUgPSBiYXVkX3JhdGU7CisKKwlpZiAoYmF1ZF9yYXRlKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCXByaXYtPmxpbmVfY29udHJvbCB8PSAoQ0gzNDFfQklUX0RUUiB8IENIMzQxX0JJVF9SVFMpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCWNoMzQxX3NldF9iYXVkcmF0ZShwb3J0LT5zZXJpYWwtPmRldiwgcHJpdik7CisJfSBlbHNlIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJcHJpdi0+bGluZV9jb250cm9sICY9IH4oQ0gzNDFfQklUX0RUUiB8IENIMzQxX0JJVF9SVFMpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJfQogCi0JY2gzNDFfc2V0X2JhdWRyYXRlKHBvcnQtPnNlcmlhbC0+ZGV2LCBwcml2KTsKKwljaDM0MV9zZXRfaGFuZHNoYWtlKHBvcnQtPnNlcmlhbC0+ZGV2LCBwcml2LT5saW5lX2NvbnRyb2wpOwogCiAJLyogVW5pbXBsZW1lbnRlZDoKIAkgKiAoY2ZsYWcgJiBDU0laRSkgOiBkYXRhIGJpdHMgWzUsIDhdCiAJICogKGNmbGFnICYgUEFSRU5CKSA6IHBhcml0eSB7Tk9ORSwgRVZFTiwgT0REfQogCSAqIChjZmxhZyAmIENTVE9QQikgOiBzdG9wIGJpdHMgWzEsIDJdCiAJICovCit9CiAKLQkgLyogQ29weSBiYWNrIHRoZSBvbGQgaGFyZHdhcmUgc2V0dGluZ3MgKi8KLQkgdHR5X3Rlcm1pb3NfY29weV9odyh0dHktPnRlcm1pb3MsIG9sZF90ZXJtaW9zKTsKLQkgLyogQW5kIHJlLWVuY29kZSB3aXRoIHRoZSBuZXcgYmF1ZCAqLwotCSB0dHlfZW5jb2RlX2JhdWRfcmF0ZSh0dHksIGJhdWRfcmF0ZSwgYmF1ZF9yYXRlKTsKK3N0YXRpYyBpbnQgY2gzNDFfdGlvY21zZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgIHVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcikKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgY2gzNDFfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXU4IGNvbnRyb2w7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCWlmIChzZXQgJiBUSU9DTV9SVFMpCisJCXByaXYtPmxpbmVfY29udHJvbCB8PSBDSDM0MV9CSVRfUlRTOworCWlmIChzZXQgJiBUSU9DTV9EVFIpCisJCXByaXYtPmxpbmVfY29udHJvbCB8PSBDSDM0MV9CSVRfRFRSOworCWlmIChjbGVhciAmIFRJT0NNX1JUUykKKwkJcHJpdi0+bGluZV9jb250cm9sICY9IH5DSDM0MV9CSVRfUlRTOworCWlmIChjbGVhciAmIFRJT0NNX0RUUikKKwkJcHJpdi0+bGluZV9jb250cm9sICY9IH5DSDM0MV9CSVRfRFRSOworCWNvbnRyb2wgPSBwcml2LT5saW5lX2NvbnRyb2w7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIGNoMzQxX3NldF9oYW5kc2hha2UocG9ydC0+c2VyaWFsLT5kZXYsIGNvbnRyb2wpOworfQorCitzdGF0aWMgdm9pZCBjaDM0MV9yZWFkX2ludF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopIHVyYi0+Y29udGV4dDsKKwl1bnNpZ25lZCBjaGFyICpkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJdW5zaWduZWQgaW50IGFjdHVhbF9sZW5ndGggPSB1cmItPmFjdHVhbF9sZW5ndGg7CisJaW50IHN0YXR1czsKKworCWRiZygiJXMgKCVkKSIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOworCisJc3dpdGNoICh1cmItPnN0YXR1cykgeworCWNhc2UgMDoKKwkJLyogc3VjY2VzcyAqLworCQlicmVhazsKKwljYXNlIC1FQ09OTlJFU0VUOgorCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FU0hVVERPV046CisJCS8qIHRoaXMgdXJiIGlzIHRlcm1pbmF0ZWQsIGNsZWFuIHVwICovCisJCWRiZygiJXMgLSB1cmIgc2h1dHRpbmcgZG93biB3aXRoIHN0YXR1czogJWQiLCBfX2Z1bmNfXywKKwkJICAgIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCWRlZmF1bHQ6CisJCWRiZygiJXMgLSBub256ZXJvIHVyYiBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19mdW5jX18sCisJCSAgICB1cmItPnN0YXR1cyk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIF9fZnVuY19fLAorCQkJICAgICAgdXJiLT5hY3R1YWxfbGVuZ3RoLCB1cmItPnRyYW5zZmVyX2J1ZmZlcik7CisKKwlpZiAoYWN0dWFsX2xlbmd0aCA+PSA0KSB7CisJCXN0cnVjdCBjaDM0MV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCXByaXYtPmxpbmVfc3RhdHVzID0gKH4oZGF0YVsyXSkpICYgQ0gzNDFfQklUU19NT0RFTV9TVEFUOworCQlpZiAoKGRhdGFbMV0gJiBDSDM0MV9NVUxUX1NUQVQpKQorCQkJcHJpdi0+bXVsdGlfc3RhdHVzX2NoYW5nZSA9IDE7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwcml2LT5kZWx0YV9tc3Jfd2FpdCk7CisJfQorCitleGl0OgorCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHN0YXR1cykKKwkJZGV2X2VycigmdXJiLT5kZXYtPmRldiwKKwkJCSIlcyAtIHVzYl9zdWJtaXRfdXJiIGZhaWxlZCB3aXRoIHJlc3VsdCAlZFxuIiwKKwkJCV9fZnVuY19fLCBzdGF0dXMpOworfQorCitzdGF0aWMgaW50IHdhaXRfbW9kZW1faW5mbyhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCB1bnNpZ25lZCBpbnQgYXJnKQoreworCXN0cnVjdCBjaDM0MV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTggcHJldnN0YXR1czsKKwl1OCBzdGF0dXM7CisJdTggY2hhbmdlZDsKKwl1OCBtdWx0aV9jaGFuZ2UgPSAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlwcmV2c3RhdHVzID0gcHJpdi0+bGluZV9zdGF0dXM7CisJcHJpdi0+bXVsdGlfc3RhdHVzX2NoYW5nZSA9IDA7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJd2hpbGUgKCFtdWx0aV9jaGFuZ2UpIHsKKwkJaW50ZXJydXB0aWJsZV9zbGVlcF9vbigmcHJpdi0+ZGVsdGFfbXNyX3dhaXQpOworCQkvKiBzZWUgaWYgYSBzaWduYWwgZGlkIGl0ICovCisJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKKwkJCXJldHVybiAtRVJFU1RBUlRTWVM7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJc3RhdHVzID0gcHJpdi0+bGluZV9zdGF0dXM7CisJCW11bHRpX2NoYW5nZSA9IHByaXYtPm11bHRpX3N0YXR1c19jaGFuZ2U7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCQljaGFuZ2VkID0gcHJldnN0YXR1cyBeIHN0YXR1czsKKworCQlpZiAoKChhcmcgJiBUSU9DTV9STkcpICYmIChjaGFuZ2VkICYgQ0gzNDFfQklUX1JJKSkgfHwKKwkJICAgICgoYXJnICYgVElPQ01fRFNSKSAmJiAoY2hhbmdlZCAmIENIMzQxX0JJVF9EU1IpKSB8fAorCQkgICAgKChhcmcgJiBUSU9DTV9DRCkgICYmIChjaGFuZ2VkICYgQ0gzNDFfQklUX0RDRCkpIHx8CisJCSAgICAoKGFyZyAmIFRJT0NNX0NUUykgJiYgKGNoYW5nZWQgJiBDSDM0MV9CSVRfQ1RTKSkpIHsKKwkJCXJldHVybiAwOworCQl9CisJCXByZXZzdGF0dXMgPSBzdGF0dXM7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qc3RhdGljIGludCBjaDM0MV9pb2N0bChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwqLworc3RhdGljIGludCBjaDM0MV9pb2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOworCWRiZygiJXMgKCVkKSBjbWQgPSAweCUwNHgiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyLCBjbWQpOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFRJT0NNSVdBSVQ6CisJCWRiZygiJXMgKCVkKSBUSU9DTUlXQUlUIiwgX19mdW5jX18sICBwb3J0LT5udW1iZXIpOworCQlyZXR1cm4gd2FpdF9tb2RlbV9pbmZvKHBvcnQsIGFyZyk7CisKKwlkZWZhdWx0OgorCQlkYmcoIiVzIG5vdCBzdXBwb3J0ZWQgPSAweCUwNHgiLCBfX2Z1bmNfXywgY21kKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIC1FTk9JT0NUTENNRDsKK30KKworc3RhdGljIGludCBjaDM0MV90aW9jbWdldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgY2gzNDFfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXU4IG1jcjsKKwl1OCBzdGF0dXM7CisJdW5zaWduZWQgaW50IHJlc3VsdDsKKworCWRiZygiJXMgKCVkKSIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwltY3IgPSBwcml2LT5saW5lX2NvbnRyb2w7CisJc3RhdHVzID0gcHJpdi0+bGluZV9zdGF0dXM7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJcmVzdWx0ID0gKChtY3IgJiBDSDM0MV9CSVRfRFRSKQkJPyBUSU9DTV9EVFIgOiAwKQorCQkgIHwgKChtY3IgJiBDSDM0MV9CSVRfUlRTKQk/IFRJT0NNX1JUUyA6IDApCisJCSAgfCAoKHN0YXR1cyAmIENIMzQxX0JJVF9DVFMpCT8gVElPQ01fQ1RTIDogMCkKKwkJICB8ICgoc3RhdHVzICYgQ0gzNDFfQklUX0RTUikJPyBUSU9DTV9EU1IgOiAwKQorCQkgIHwgKChzdGF0dXMgJiBDSDM0MV9CSVRfUkkpCT8gVElPQ01fUkkgIDogMCkKKwkJICB8ICgoc3RhdHVzICYgQ0gzNDFfQklUX0RDRCkJPyBUSU9DTV9DRCAgOiAwKTsKKworCWRiZygiJXMgLSByZXN1bHQgPSAleCIsIF9fZnVuY19fLCByZXN1bHQpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworCitzdGF0aWMgaW50IGNoMzQxX3Jlc2V0X3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gTlVMTDsKKwlzdHJ1Y3QgY2gzNDFfcHJpdmF0ZSAqcHJpdjsKKworCXNlcmlhbCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisJcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbMF0pOworCisJLypyZWNvbmZpZ3VyZSBjaDM0MSBzZXJpYWwgcG9ydCBhZnRlciBidXMtcmVzZXQqLworCWNoMzQxX2NvbmZpZ3VyZShkZXYsIHByaXYpOworCisJdXNiX3NlcmlhbF9yZXN1bWUoaW50Zik7CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGNoMzQxX2RyaXZlciA9IHsKIAkubmFtZQkJPSAiY2gzNDEiLAogCS5wcm9iZQkJPSB1c2Jfc2VyaWFsX3Byb2JlLAogCS5kaXNjb25uZWN0CT0gdXNiX3NlcmlhbF9kaXNjb25uZWN0LAorCS5zdXNwZW5kCT0gdXNiX3NlcmlhbF9zdXNwZW5kLAorCS5yZXN1bWUJCT0gdXNiX3NlcmlhbF9yZXN1bWUsCisJLnJlc2V0X3Jlc3VtZQk9IGNoMzQxX3Jlc2V0X3Jlc3VtZSwKIAkuaWRfdGFibGUJPSBpZF90YWJsZSwKIAkubm9fZHluYW1pY19pZAk9IDEsCisJLnN1cHBvcnRzX2F1dG9zdXNwZW5kID0JMSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kcml2ZXIgY2gzNDFfZGV2aWNlID0gewpAQCAtMzE3LDEyICs1NjQsMTcgQEAKIAkJLm93bmVyCT0gVEhJU19NT0RVTEUsCiAJCS5uYW1lCT0gImNoMzQxLXVhcnQiLAogCX0sCi0JLmlkX3RhYmxlICAgICAgICAgPSBpZF90YWJsZSwKLQkudXNiX2RyaXZlciAgICAgICA9ICZjaDM0MV9kcml2ZXIsCi0JLm51bV9wb3J0cyAgICAgICAgPSAxLAotCS5vcGVuICAgICAgICAgICAgID0gY2gzNDFfb3BlbiwKLQkuc2V0X3Rlcm1pb3MgICAgICA9IGNoMzQxX3NldF90ZXJtaW9zLAotCS5hdHRhY2ggICAgICAgICAgID0gY2gzNDFfYXR0YWNoLAorCS5pZF90YWJsZSAgICAgICAgICA9IGlkX3RhYmxlLAorCS51c2JfZHJpdmVyICAgICAgICA9ICZjaDM0MV9kcml2ZXIsCisJLm51bV9wb3J0cyAgICAgICAgID0gMSwKKwkub3BlbiAgICAgICAgICAgICAgPSBjaDM0MV9vcGVuLAorCS5jbG9zZSAgICAgICAgICAgICA9IGNoMzQxX2Nsb3NlLAorCS5pb2N0bCAgICAgICAgICAgICA9IGNoMzQxX2lvY3RsLAorCS5zZXRfdGVybWlvcyAgICAgICA9IGNoMzQxX3NldF90ZXJtaW9zLAorCS50aW9jbWdldCAgICAgICAgICA9IGNoMzQxX3Rpb2NtZ2V0LAorCS50aW9jbXNldCAgICAgICAgICA9IGNoMzQxX3Rpb2Ntc2V0LAorCS5yZWFkX2ludF9jYWxsYmFjayA9IGNoMzQxX3JlYWRfaW50X2NhbGxiYWNrLAorCS5hdHRhY2ggICAgICAgICAgICA9IGNoMzQxX2F0dGFjaCwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGNoMzQxX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jcDIxMDEuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jcDIxMHguYwpzaW1pbGFyaXR5IGluZGV4IDg0JQpyZW5hbWUgZnJvbSBkcml2ZXJzL3VzYi9zZXJpYWwvY3AyMTAxLmMKcmVuYW1lIHRvIGRyaXZlcnMvdXNiL3NlcmlhbC9jcDIxMHguYwppbmRleCA5YjQwODJiLi5lOGQ1MTMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvY3AyMTAxLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2NwMjEweC5jCkBAIC0xMSwxMCArMTEsNiBAQAogICogdGhhbmtzIHRvIEthcmwgSGlyYW1vdG8ga2FybEBoaXJhbW90by5vcmcuIFJUU0NUUyBoYXJkd2FyZSBmbG93CiAgKiBjb250cm9sIHRoYW5rcyB0byBNdW5pciBOYXNzYXIgbmFzc2FybXVAcmVhbC10aW1lLmNvbQogICoKLSAqIE91dHN0YW5kaW5nIElzc3VlczoKLSAqICBCdWZmZXJzIGFyZSBub3QgZmx1c2hlZCB3aGVuIHRoZSBwb3J0IGlzIG9wZW5lZC4KLSAqICBNdWx0aXBsZSBjYWxscyB0byB3cml0ZSgpIG1heSBmYWlsIHdpdGggIlJlc291cmNlIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlIgotICoKICAqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0zMSw3ICsyNyw3IEBACiAvKgogICogVmVyc2lvbiBJbmZvcm1hdGlvbgogICovCi0jZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2MC4wNyIKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYwLjA4IgogI2RlZmluZSBEUklWRVJfREVTQyAiU2lsaWNvbiBMYWJzIENQMjEwMS9DUDIxMDIgUlMyMzIgc2VyaWFsIGFkYXB0b3IgZHJpdmVyIgogCiAvKgpAQCAtNDIsMTcgKzM4LDIxIEBACiBzdGF0aWMgdm9pZCBjcDIxMDFfY2xlYW51cChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopOwogc3RhdGljIHZvaWQgY3AyMTAxX2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICosIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKiwKIAkJCQkJCQlzdHJ1Y3QgZmlsZSopOwotc3RhdGljIHZvaWQgY3AyMTAxX2dldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICopOworc3RhdGljIHZvaWQgY3AyMTAxX2dldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICosCisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CitzdGF0aWMgdm9pZCBjcDIxMDFfZ2V0X3Rlcm1pb3NfcG9ydChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCXVuc2lnbmVkIGludCAqY2ZsYWdwLCB1bnNpZ25lZCBpbnQgKmJhdWRwKTsKIHN0YXRpYyB2b2lkIGNwMjEwMV9zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqLCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICosCiAJCQkJCQkJc3RydWN0IGt0ZXJtaW9zKik7CiBzdGF0aWMgaW50IGNwMjEwMV90aW9jbWdldChzdHJ1Y3QgdHR5X3N0cnVjdCAqLCBzdHJ1Y3QgZmlsZSAqKTsKIHN0YXRpYyBpbnQgY3AyMTAxX3Rpb2Ntc2V0KHN0cnVjdCB0dHlfc3RydWN0ICosIHN0cnVjdCBmaWxlICosCiAJCXVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KTsKK3N0YXRpYyBpbnQgY3AyMTAxX3Rpb2Ntc2V0X3BvcnQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKiwKKwkJdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOwogc3RhdGljIHZvaWQgY3AyMTAxX2JyZWFrX2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqLCBpbnQpOwogc3RhdGljIGludCBjcDIxMDFfc3RhcnR1cChzdHJ1Y3QgdXNiX3NlcmlhbCAqKTsKIHN0YXRpYyB2b2lkIGNwMjEwMV9zaHV0ZG93bihzdHJ1Y3QgdXNiX3NlcmlhbCAqKTsKIAotCiBzdGF0aWMgaW50IGRlYnVnOwogCiBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGUgW10gPSB7CkBAIC05MSw2ICs5MSw3IEBACiAJeyBVU0JfREVWSUNFKDB4MTBjNCwgMHg4MjkzKSB9LCAvKiBUZWxlZ2VzeXMgRVRSWDJVU0IgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDgzNDEpIH0sIC8qIFNpZW1lbnMgTUMzNVBVIEdQUlMgTW9kZW0gKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDgzQTgpIH0sIC8qIEFtYmVyIFdpcmVsZXNzIEFNQjI1NjAgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDg0NkUpIH0sIC8qIEJFSSBVU0IgU2Vuc29yIEludGVyZmFjZSAoVkNQKSAqLwogCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4RUE2MCkgfSwgLyogU2lsaWNvbiBMYWJzIGZhY3RvcnkgZGVmYXVsdCAqLwogCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4RUE2MSkgfSwgLyogU2lsaWNvbiBMYWJzIGZhY3RvcnkgZGVmYXVsdCAqLwogCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4RjAwMSkgfSwgLyogRWxhbiBEaWdpdGFsIFN5c3RlbXMgVVNCc2NvcGU1MCAqLwpAQCAtMjI1LDcgKzIyNiw3IEBACiAJa2ZyZWUoYnVmKTsKIAogCWlmIChyZXN1bHQgIT0gc2l6ZSkgewotCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIFVuYWJsZSB0byBzZW5kIGNvbmZpZyByZXF1ZXN0LCAiCisJCWRiZygiJXMgLSBVbmFibGUgdG8gc2VuZCBjb25maWcgcmVxdWVzdCwgIgogCQkJCSJyZXF1ZXN0PTB4JXggc2l6ZT0lZCByZXN1bHQ9JWRcbiIsCiAJCQkJX19mdW5jX18sIHJlcXVlc3QsIHNpemUsIHJlc3VsdCk7CiAJCXJldHVybiAtRVBST1RPOwpAQCAtMjc2LDcgKzI3Nyw3IEBACiAJa2ZyZWUoYnVmKTsKIAogCWlmICgoc2l6ZSA+IDIgJiYgcmVzdWx0ICE9IHNpemUpIHx8IHJlc3VsdCA8IDApIHsKLQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBVbmFibGUgdG8gc2VuZCByZXF1ZXN0LCAiCisJCWRiZygiJXMgLSBVbmFibGUgdG8gc2VuZCByZXF1ZXN0LCAiCiAJCQkJInJlcXVlc3Q9MHgleCBzaXplPSVkIHJlc3VsdD0lZFxuIiwKIAkJCQlfX2Z1bmNfXywgcmVxdWVzdCwgc2l6ZSwgcmVzdWx0KTsKIAkJcmV0dXJuIC1FUFJPVE87CkBAIC0zMDEsNiArMzAyLDQ3IEBACiAJcmV0dXJuIGNwMjEwMV9zZXRfY29uZmlnKHBvcnQsIHJlcXVlc3QsICZkYXRhLCAyKTsKIH0KIAorLyoKKyAqIGNwMjEwMV9xdWFudGlzZV9iYXVkcmF0ZQorICogUXVhbnRpc2VzIHRoZSBiYXVkIHJhdGUgYXMgcGVyIEFOMjA1IFRhYmxlIDEKKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBjcDIxMDFfcXVhbnRpc2VfYmF1ZHJhdGUodW5zaWduZWQgaW50IGJhdWQpIHsKKwlpZiAgICAgIChiYXVkIDw9IDU2KSAgICAgICBiYXVkID0gMDsKKwllbHNlIGlmIChiYXVkIDw9IDMwMCkgICAgICBiYXVkID0gMzAwOworCWVsc2UgaWYgKGJhdWQgPD0gNjAwKSAgICAgIGJhdWQgPSA2MDA7CisJZWxzZSBpZiAoYmF1ZCA8PSAxMjAwKSAgICAgYmF1ZCA9IDEyMDA7CisJZWxzZSBpZiAoYmF1ZCA8PSAxODAwKSAgICAgYmF1ZCA9IDE4MDA7CisJZWxzZSBpZiAoYmF1ZCA8PSAyNDAwKSAgICAgYmF1ZCA9IDI0MDA7CisJZWxzZSBpZiAoYmF1ZCA8PSA0MDAwKSAgICAgYmF1ZCA9IDQwMDA7CisJZWxzZSBpZiAoYmF1ZCA8PSA0ODAzKSAgICAgYmF1ZCA9IDQ4MDA7CisJZWxzZSBpZiAoYmF1ZCA8PSA3MjA3KSAgICAgYmF1ZCA9IDcyMDA7CisJZWxzZSBpZiAoYmF1ZCA8PSA5NjEyKSAgICAgYmF1ZCA9IDk2MDA7CisJZWxzZSBpZiAoYmF1ZCA8PSAxNDQyOCkgICAgYmF1ZCA9IDE0NDAwOworCWVsc2UgaWYgKGJhdWQgPD0gMTYwNjIpICAgIGJhdWQgPSAxNjAwMDsKKwllbHNlIGlmIChiYXVkIDw9IDE5MjUwKSAgICBiYXVkID0gMTkyMDA7CisJZWxzZSBpZiAoYmF1ZCA8PSAyODkxMikgICAgYmF1ZCA9IDI4ODAwOworCWVsc2UgaWYgKGJhdWQgPD0gMzg2MDEpICAgIGJhdWQgPSAzODQwMDsKKwllbHNlIGlmIChiYXVkIDw9IDUxNTU4KSAgICBiYXVkID0gNTEyMDA7CisJZWxzZSBpZiAoYmF1ZCA8PSA1NjI4MCkgICAgYmF1ZCA9IDU2MDAwOworCWVsc2UgaWYgKGJhdWQgPD0gNTgwNTMpICAgIGJhdWQgPSA1NzYwMDsKKwllbHNlIGlmIChiYXVkIDw9IDY0MTExKSAgICBiYXVkID0gNjQwMDA7CisJZWxzZSBpZiAoYmF1ZCA8PSA3NzYwOCkgICAgYmF1ZCA9IDc2ODAwOworCWVsc2UgaWYgKGJhdWQgPD0gMTE3MDI4KSAgIGJhdWQgPSAxMTUyMDA7CisJZWxzZSBpZiAoYmF1ZCA8PSAxMjkzNDcpICAgYmF1ZCA9IDEyODAwMDsKKwllbHNlIGlmIChiYXVkIDw9IDE1Njg2OCkgICBiYXVkID0gMTUzNjAwOworCWVsc2UgaWYgKGJhdWQgPD0gMjM3ODMyKSAgIGJhdWQgPSAyMzA0MDA7CisJZWxzZSBpZiAoYmF1ZCA8PSAyNTQyMzQpICAgYmF1ZCA9IDI1MDAwMDsKKwllbHNlIGlmIChiYXVkIDw9IDI3MzA2NikgICBiYXVkID0gMjU2MDAwOworCWVsc2UgaWYgKGJhdWQgPD0gNDkxNTIwKSAgIGJhdWQgPSA0NjA4MDA7CisJZWxzZSBpZiAoYmF1ZCA8PSA1NjcxMzgpICAgYmF1ZCA9IDUwMDAwMDsKKwllbHNlIGlmIChiYXVkIDw9IDY3MDI1NCkgICBiYXVkID0gNTc2MDAwOworCWVsc2UgaWYgKGJhdWQgPD0gMTA1MzI1NykgIGJhdWQgPSA5MjE2MDA7CisJZWxzZSBpZiAoYmF1ZCA8PSAxNDc0NTYwKSAgYmF1ZCA9IDEyMjg4MDA7CisJZWxzZSBpZiAoYmF1ZCA8PSAyNDU3NjAwKSAgYmF1ZCA9IDE4NDMyMDA7CisJZWxzZSAgICAgICAgICAgICAgICAgICAgICAgYmF1ZCA9IDM2ODY0MDA7CisJcmV0dXJuIGJhdWQ7Cit9CisKIHN0YXRpYyBpbnQgY3AyMTAxX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKIAkJCQlzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKQEAgLTMzMSwxMCArMzczLDEyIEBACiAJfQogCiAJLyogQ29uZmlndXJlIHRoZSB0ZXJtaW9zIHN0cnVjdHVyZSAqLwotCWNwMjEwMV9nZXRfdGVybWlvcyh0dHkpOworCWNwMjEwMV9nZXRfdGVybWlvcyh0dHksIHBvcnQpOwogCiAJLyogU2V0IHRoZSBEVFIgYW5kIFJUUyBwaW5zIGxvdyAqLwotCWNwMjEwMV90aW9jbXNldCh0dHksIE5VTEwsIFRJT0NNX0RUUiB8IFRJT0NNX1JUUywgMCk7CisJY3AyMTAxX3Rpb2Ntc2V0X3BvcnQodHR5ID8gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKikgdHR5LT5kcml2ZXJfZGF0YQorCQkJOiBwb3J0LAorCQlOVUxMLCBUSU9DTV9EVFIgfCBUSU9DTV9SVFMsIDApOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zNzYsOSArNDIwLDMxIEBACiAgKiBmcm9tIHRoZSBkZXZpY2UsIGNvcnJlY3RzIGFueSB1bnN1cHBvcnRlZCB2YWx1ZXMsIGFuZCBjb25maWd1cmVzIHRoZQogICogdGVybWlvcyBzdHJ1Y3R1cmUgdG8gcmVmbGVjdCB0aGUgc3RhdGUgb2YgdGhlIGRldmljZQogICovCi1zdGF0aWMgdm9pZCBjcDIxMDFfZ2V0X3Rlcm1pb3MgKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCitzdGF0aWMgdm9pZCBjcDIxMDFfZ2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQogewotCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOworCXVuc2lnbmVkIGludCBiYXVkOworCisJaWYgKHR0eSkgeworCQljcDIxMDFfZ2V0X3Rlcm1pb3NfcG9ydCh0dHktPmRyaXZlcl9kYXRhLAorCQkJJnR0eS0+dGVybWlvcy0+Y19jZmxhZywgJmJhdWQpOworCQl0dHlfZW5jb2RlX2JhdWRfcmF0ZSh0dHksIGJhdWQsIGJhdWQpOworCX0KKworCWVsc2UgeworCQl1bnNpZ25lZCBpbnQgY2ZsYWc7CisJCWNmbGFnID0gMDsKKwkJY3AyMTAxX2dldF90ZXJtaW9zX3BvcnQocG9ydCwgJmNmbGFnLCAmYmF1ZCk7CisJfQorfQorCisvKgorICogY3AyMTAxX2dldF90ZXJtaW9zX3BvcnQKKyAqIFRoaXMgaXMgdGhlIGhlYXJ0IG9mIGNwMjEwMV9nZXRfdGVybWlvcyB3aGljaCBhbHdheXMgdXNlcyBhICZ1c2Jfc2VyaWFsX3BvcnQuCisgKi8KK3N0YXRpYyB2b2lkIGNwMjEwMV9nZXRfdGVybWlvc19wb3J0KHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJdW5zaWduZWQgaW50ICpjZmxhZ3AsIHVuc2lnbmVkIGludCAqYmF1ZHApCit7CiAJdW5zaWduZWQgaW50IGNmbGFnLCBtb2RlbV9jdGxbNF07CiAJdW5zaWduZWQgaW50IGJhdWQ7CiAJdW5zaWduZWQgaW50IGJpdHM7CkBAIC0zODgsMTIgKzQ1NCwxMiBAQAogCWNwMjEwMV9nZXRfY29uZmlnKHBvcnQsIENQMjEwMV9CQVVEUkFURSwgJmJhdWQsIDIpOwogCS8qIENvbnZlcnQgdG8gYmF1ZHJhdGUgKi8KIAlpZiAoYmF1ZCkKLQkJYmF1ZCA9IEJBVURfUkFURV9HRU5fRlJFUSAvIGJhdWQ7CisJCWJhdWQgPSBjcDIxMDFfcXVhbnRpc2VfYmF1ZHJhdGUoKEJBVURfUkFURV9HRU5fRlJFUSArIGJhdWQvMikvIGJhdWQpOwogCiAJZGJnKCIlcyAtIGJhdWQgcmF0ZSA9ICVkIiwgX19mdW5jX18sIGJhdWQpOworCSpiYXVkcCA9IGJhdWQ7CiAKLQl0dHlfZW5jb2RlX2JhdWRfcmF0ZSh0dHksIGJhdWQsIGJhdWQpOwotCWNmbGFnID0gdHR5LT50ZXJtaW9zLT5jX2NmbGFnOworCWNmbGFnID0gKmNmbGFncDsKIAogCWNwMjEwMV9nZXRfY29uZmlnKHBvcnQsIENQMjEwMV9CSVRTLCAmYml0cywgMik7CiAJY2ZsYWcgJj0gfkNTSVpFOwpAQCAtNDk5LDcgKzU2NSw3IEBACiAJCWNmbGFnICY9IH5DUlRTQ1RTOwogCX0KIAotCXR0eS0+dGVybWlvcy0+Y19jZmxhZyA9IGNmbGFnOworCSpjZmxhZ3AgPSBjZmxhZzsKIH0KIAogc3RhdGljIHZvaWQgY3AyMTAxX3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCkBAIC01MTcsNDYgKzU4MywxNiBAQAogCXR0eS0+dGVybWlvcy0+Y19jZmxhZyAmPSB+Q01TUEFSOwogCWNmbGFnID0gdHR5LT50ZXJtaW9zLT5jX2NmbGFnOwogCW9sZF9jZmxhZyA9IG9sZF90ZXJtaW9zLT5jX2NmbGFnOwotCWJhdWQgPSB0dHlfZ2V0X2JhdWRfcmF0ZSh0dHkpOworCWJhdWQgPSBjcDIxMDFfcXVhbnRpc2VfYmF1ZHJhdGUodHR5X2dldF9iYXVkX3JhdGUodHR5KSk7CiAKIAkvKiBJZiB0aGUgYmF1ZCByYXRlIGlzIHRvIGJlIHVwZGF0ZWQqLwotCWlmIChiYXVkICE9IHR0eV90ZXJtaW9zX2JhdWRfcmF0ZShvbGRfdGVybWlvcykpIHsKLQkJc3dpdGNoIChiYXVkKSB7Ci0JCWNhc2UgMDoKLQkJY2FzZSA2MDA6Ci0JCWNhc2UgMTIwMDoKLQkJY2FzZSAxODAwOgotCQljYXNlIDI0MDA6Ci0JCWNhc2UgNDgwMDoKLQkJY2FzZSA3MjAwOgotCQljYXNlIDk2MDA6Ci0JCWNhc2UgMTQ0MDA6Ci0JCWNhc2UgMTkyMDA6Ci0JCWNhc2UgMjg4MDA6Ci0JCWNhc2UgMzg0MDA6Ci0JCWNhc2UgNTU4NTQ6Ci0JCWNhc2UgNTc2MDA6Ci0JCWNhc2UgMTE1MjAwOgotCQljYXNlIDEyNzExNzoKLQkJY2FzZSAyMzA0MDA6Ci0JCWNhc2UgNDYwODAwOgotCQljYXNlIDkyMTYwMDoKLQkJY2FzZSAzNjg2NDAwOgotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQliYXVkID0gOTYwMDsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJaWYgKGJhdWQpIHsKLQkJCWRiZygiJXMgLSBTZXR0aW5nIGJhdWQgcmF0ZSB0byAlZCBiYXVkIiwgX19mdW5jX18sCi0JCQkJCWJhdWQpOwotCQkJaWYgKGNwMjEwMV9zZXRfY29uZmlnX3NpbmdsZShwb3J0LCBDUDIxMDFfQkFVRFJBVEUsCi0JCQkJCQkoQkFVRF9SQVRFX0dFTl9GUkVRIC8gYmF1ZCkpKSB7Ci0JCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiQmF1ZCByYXRlIHJlcXVlc3RlZCBub3QgIgotCQkJCQkJInN1cHBvcnRlZCBieSBkZXZpY2VcbiIpOwotCQkJCWJhdWQgPSB0dHlfdGVybWlvc19iYXVkX3JhdGUob2xkX3Rlcm1pb3MpOwotCQkJfQorCWlmIChiYXVkICE9IHR0eV90ZXJtaW9zX2JhdWRfcmF0ZShvbGRfdGVybWlvcykgJiYgYmF1ZCAhPSAwKSB7CisJCWRiZygiJXMgLSBTZXR0aW5nIGJhdWQgcmF0ZSB0byAlZCBiYXVkIiwgX19mdW5jX18sCisJCQkJYmF1ZCk7CisJCWlmIChjcDIxMDFfc2V0X2NvbmZpZ19zaW5nbGUocG9ydCwgQ1AyMTAxX0JBVURSQVRFLAorCQkJCQkoKEJBVURfUkFURV9HRU5fRlJFUSArIGJhdWQvMikgLyBiYXVkKSkpIHsKKwkJCWRiZygiQmF1ZCByYXRlIHJlcXVlc3RlZCBub3Qgc3VwcG9ydGVkIGJ5IGRldmljZVxuIik7CisJCQliYXVkID0gdHR5X3Rlcm1pb3NfYmF1ZF9yYXRlKG9sZF90ZXJtaW9zKTsKIAkJfQogCX0KIAkvKiBSZXBvcnQgYmFjayB0aGUgcmVzdWx0aW5nIGJhdWQgcmF0ZSAqLwpAQCAtNTg4LDE0ICs2MjQsMTQgQEAKIAkJCWRiZygiJXMgLSBkYXRhIGJpdHMgPSA5IiwgX19mdW5jX18pOwogCQkJYnJlYWs7Ki8KIAkJZGVmYXVsdDoKLQkJCWRldl9lcnIoJnBvcnQtPmRldiwgImNwMjEwMSBkcml2ZXIgZG9lcyBub3QgIgorCQkJZGJnKCJjcDIxMDEgZHJpdmVyIGRvZXMgbm90ICIKIAkJCQkJInN1cHBvcnQgdGhlIG51bWJlciBvZiBiaXRzIHJlcXVlc3RlZCwiCiAJCQkJCSIgdXNpbmcgOCBiaXQgbW9kZVxuIik7CiAJCQkJYml0cyB8PSBCSVRTX0RBVEFfODsKIAkJCQlicmVhazsKIAkJfQogCQlpZiAoY3AyMTAxX3NldF9jb25maWcocG9ydCwgQ1AyMTAxX0JJVFMsICZiaXRzLCAyKSkKLQkJCWRldl9lcnIoJnBvcnQtPmRldiwgIk51bWJlciBvZiBkYXRhIGJpdHMgcmVxdWVzdGVkICIKKwkJCWRiZygiTnVtYmVyIG9mIGRhdGEgYml0cyByZXF1ZXN0ZWQgIgogCQkJCQkibm90IHN1cHBvcnRlZCBieSBkZXZpY2VcbiIpOwogCX0KIApAQCAtNjEyLDcgKzY0OCw3IEBACiAJCQl9CiAJCX0KIAkJaWYgKGNwMjEwMV9zZXRfY29uZmlnKHBvcnQsIENQMjEwMV9CSVRTLCAmYml0cywgMikpCi0JCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJQYXJpdHkgbW9kZSBub3Qgc3VwcG9ydGVkICIKKwkJCWRiZygiUGFyaXR5IG1vZGUgbm90IHN1cHBvcnRlZCAiCiAJCQkJCSJieSBkZXZpY2VcbiIpOwogCX0KIApAQCAtNjI3LDcgKzY2Myw3IEBACiAJCQlkYmcoIiVzIC0gc3RvcCBiaXRzID0gMSIsIF9fZnVuY19fKTsKIAkJfQogCQlpZiAoY3AyMTAxX3NldF9jb25maWcocG9ydCwgQ1AyMTAxX0JJVFMsICZiaXRzLCAyKSkKLQkJCWRldl9lcnIoJnBvcnQtPmRldiwgIk51bWJlciBvZiBzdG9wIGJpdHMgcmVxdWVzdGVkICIKKwkJCWRiZygiTnVtYmVyIG9mIHN0b3AgYml0cyByZXF1ZXN0ZWQgIgogCQkJCQkibm90IHN1cHBvcnRlZCBieSBkZXZpY2VcbiIpOwogCX0KIApAQCAtNjYxLDYgKzY5NywxMiBAQAogCQl1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIpCiB7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJcmV0dXJuIGNwMjEwMV90aW9jbXNldF9wb3J0KHBvcnQsIGZpbGUsIHNldCwgY2xlYXIpOworfQorCitzdGF0aWMgaW50IGNwMjEwMV90aW9jbXNldF9wb3J0KHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlLAorCQl1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIpCit7CiAJdW5zaWduZWQgaW50IGNvbnRyb2wgPSAwOwogCiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKQEAgLTY4NSw3ICs3MjcsNiBAQAogCWRiZygiJXMgLSBjb250cm9sID0gMHglLjR4IiwgX19mdW5jX18sIGNvbnRyb2wpOwogCiAJcmV0dXJuIGNwMjEwMV9zZXRfY29uZmlnKHBvcnQsIENQMjEwMV9DT05UUk9MLCAmY29udHJvbCwgMik7Ci0KIH0KIAogc3RhdGljIGludCBjcDIxMDFfdGlvY21nZXQgKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYwppbmRleCBhZTg0YzMyLi5kY2M4N2FhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYwpAQCAtMTkzOCwxOCArMTkzOCwxNiBAQAogCQkvKiBDb21wYXJlIG5ldyBsaW5lIHN0YXR1cyB0byB0aGUgb2xkIG9uZSwgc2lnbmFsIGlmIGRpZmZlcmVudC8KIAkJICAgTi5CLiBwYWNrZXQgbWF5IGJlIHByb2Nlc3NlZCBtb3JlIHRoYW4gb25jZSwgYnV0IGRpZmZlcmVuY2VzCiAJCSAgIGFyZSBvbmx5IHByb2Nlc3NlZCBvbmNlLiAgKi8KLQkJaWYgKHByaXYgIT0gTlVMTCkgewotCQkJY2hhciBuZXdfc3RhdHVzID0gZGF0YVtwYWNrZXRfb2Zmc2V0ICsgMF0gJgotCQkJCQkJCUZURElfU1RBVFVTX0IwX01BU0s7Ci0JCQlpZiAobmV3X3N0YXR1cyAhPSBwcml2LT5wcmV2X3N0YXR1cykgewotCQkJCXByaXYtPmRpZmZfc3RhdHVzIHw9Ci0JCQkJCW5ld19zdGF0dXMgXiBwcml2LT5wcmV2X3N0YXR1czsKLQkJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnByaXYtPmRlbHRhX21zcl93YWl0KTsKLQkJCQlwcml2LT5wcmV2X3N0YXR1cyA9IG5ld19zdGF0dXM7Ci0JCQl9CisJCWNoYXIgbmV3X3N0YXR1cyA9IGRhdGFbcGFja2V0X29mZnNldCArIDBdICYKKwkJCQkJCUZURElfU1RBVFVTX0IwX01BU0s7CisJCWlmIChuZXdfc3RhdHVzICE9IHByaXYtPnByZXZfc3RhdHVzKSB7CisJCQlwcml2LT5kaWZmX3N0YXR1cyB8PQorCQkJCW5ld19zdGF0dXMgXiBwcml2LT5wcmV2X3N0YXR1czsKKwkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHJpdi0+ZGVsdGFfbXNyX3dhaXQpOworCQkJcHJpdi0+cHJldl9zdGF0dXMgPSBuZXdfc3RhdHVzOwogCQl9CiAKLQkJbGVuZ3RoID0gbWluKFBLVFNaLCB1cmItPmFjdHVhbF9sZW5ndGgtcGFja2V0X29mZnNldCktMjsKKwkJbGVuZ3RoID0gbWluX3QodTMyLCBQS1RTWiwgdXJiLT5hY3R1YWxfbGVuZ3RoLXBhY2tldF9vZmZzZXQpLTI7CiAJCWlmIChsZW5ndGggPCAwKSB7CiAJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGJhZCBwYWNrZXQgbGVuZ3RoOiAlZFxuIiwKIAkJCQlfX2Z1bmNfXywgbGVuZ3RoKzIpOwpAQCAtMjI5NCwxMSArMjI5Miw4IEBACiAJCQkgICBGVERJX1NJT19HRVRfTU9ERU1fU1RBVFVTX1JFUVVFU1RfVFlQRSwKIAkJCSAgIDAsIDAsCiAJCQkgICBidWYsIDEsIFdEUl9USU1FT1VUKTsKLQkJaWYgKHJldCA8IDApIHsKLQkJCWRiZygiJXMgQ291bGQgbm90IGdldCBtb2RlbSBzdGF0dXMgb2YgZGV2aWNlIC0gZXJyOiAlZCIsIF9fZnVuY19fLAotCQkJICAgIHJldCk7CisJCWlmIChyZXQgPCAwKQogCQkJcmV0dXJuIHJldDsKLQkJfQogCQlicmVhazsKIAljYXNlIEZUOFUyMzJBTToKIAljYXNlIEZUMjMyQk06CkBAIC0yMzEzLDE1ICsyMzA4LDExIEBACiAJCQkJICAgRlRESV9TSU9fR0VUX01PREVNX1NUQVRVU19SRVFVRVNUX1RZUEUsCiAJCQkJICAgMCwgcHJpdi0+aW50ZXJmYWNlLAogCQkJCSAgIGJ1ZiwgMiwgV0RSX1RJTUVPVVQpOwotCQlpZiAocmV0IDwgMCkgewotCQkJZGJnKCIlcyBDb3VsZCBub3QgZ2V0IG1vZGVtIHN0YXR1cyBvZiBkZXZpY2UgLSBlcnI6ICVkIiwgX19mdW5jX18sCi0JCQkgICAgcmV0KTsKKwkJaWYgKHJldCA8IDApCiAJCQlyZXR1cm4gcmV0OwotCQl9CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUZBVUxUOwotCQlicmVhazsKIAl9CiAKIAlyZXR1cm4gIChidWZbMF0gJiBGVERJX1NJT19EU1JfTUFTSyA/IFRJT0NNX0RTUiA6IDApIHwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9nZW5lcmljLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZ2VuZXJpYy5jCmluZGV4IDgxNDkwOWYuLjlkNTdjYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9nZW5lcmljLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2dlbmVyaWMuYwpAQCAtMTc3LDE0ICsxNzcsNiBAQAogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7CiAJaW50IGksIGMgPSAwLCByOwogCi0jaWZkZWYgQ09ORklHX1BNCi0JLyoKLQkgKiBJZiB0aGlzIGlzIGFuIGF1dG9yZXN1bWUsIGRvbid0IHN1Ym1pdCBVUkJzLgotCSAqIFRoZXkgd2lsbCBiZSBzdWJtaXR0ZWQgaW4gdGhlIG9wZW4gZnVuY3Rpb24gaW5zdGVhZC4KLQkgKi8KLQlpZiAoc2VyaWFsLT5kZXYtPmF1dG9fcG0pCi0JCXJldHVybiAwOwotI2VuZGlmCiAJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyBpKyspIHsKIAkJcG9ydCA9IHNlcmlhbC0+cG9ydFtpXTsKIAkJaWYgKHBvcnQtPnBvcnQuY291bnQgJiYgcG9ydC0+cmVhZF91cmIpIHsKQEAgLTE5Niw2ICsxODgsNyBAQAogCiAJcmV0dXJuIGMgPyAtRUlPIDogMDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9zZXJpYWxfZ2VuZXJpY19yZXN1bWUpOwogCiB2b2lkIHVzYl9zZXJpYWxfZ2VuZXJpY19jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAogCQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvaXBhcS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lwYXEuYwppbmRleCAxMzJiZTc0Li5lZjkyMDk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvaXBhcS5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pcGFxLmMKQEAgLTc4LDYgKzc4LDcgQEAKIAkJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKTsKIHN0YXRpYyB2b2lkIGlwYXFfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKIAkJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKTsKK3N0YXRpYyBpbnQgIGlwYXFfY2FsY19udW1fcG9ydHMoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CiBzdGF0aWMgaW50ICBpcGFxX3N0YXJ0dXAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CiBzdGF0aWMgdm9pZCBpcGFxX3NodXRkb3duKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOwogc3RhdGljIGludCBpcGFxX3dyaXRlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCkBAIC01NzIsMTUgKzU3MywxMCBAQAogCS5kZXNjcmlwdGlvbiA9CQkiUG9ja2V0UEMgUERBIiwKIAkudXNiX2RyaXZlciA9IAkJJmlwYXFfZHJpdmVyLAogCS5pZF90YWJsZSA9CQlpcGFxX2lkX3RhYmxlLAotCS8qCi0JICogc29tZSBkZXZpY2VzIGhhdmUgYW4gZXh0cmEgZW5kcG9pbnQsIHdoaWNoCi0JICogbXVzdCBiZSBpZ25vcmVkIGFzIGl0IHdvdWxkIG1ha2UgdGhlIGNvcmUKLQkgKiBjcmVhdGUgYSBzZWNvbmQgcG9ydCB3aGljaCBvb3BzZXMgd2hlbiB1c2VkCi0JICovCi0JLm51bV9wb3J0cyA9CQkxLAogCS5vcGVuID0JCQlpcGFxX29wZW4sCiAJLmNsb3NlID0JCWlwYXFfY2xvc2UsCiAJLmF0dGFjaCA9CQlpcGFxX3N0YXJ0dXAsCisJLmNhbGNfbnVtX3BvcnRzID0JaXBhcV9jYWxjX251bV9wb3J0cywKIAkuc2h1dGRvd24gPQkJaXBhcV9zaHV0ZG93biwKIAkud3JpdGUgPQkJaXBhcV93cml0ZSwKIAkud3JpdGVfcm9vbSA9CQlpcGFxX3dyaXRlX3Jvb20sCkBAIC05NTYsMTQgKzk1Miw0OSBAQAogfQogCiAKK3N0YXRpYyBpbnQgaXBhcV9jYWxjX251bV9wb3J0cyhzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCS8qCisJICogc29tZSBkZXZpY2VzIGhhdmUgMyBlbmRwb2ludHMsIHRoZSAzcmQgb2Ygd2hpY2gKKwkgKiBtdXN0IGJlIGlnbm9yZWQgYXMgaXQgd291bGQgbWFrZSB0aGUgY29yZQorCSAqIGNyZWF0ZSBhIHNlY29uZCBwb3J0IHdoaWNoIG9vcHNlcyB3aGVuIHVzZWQKKwkgKi8KKwlpbnQgaXBhcV9udW1fcG9ydHMgPSAxOworCisJZGJnKCIlcyAtIG51bWJlcm9mZW5kcG9pbnRzOiAlZCIsIF9fRlVOQ1RJT05fXywKKwkJKGludClzZXJpYWwtPmludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYk51bUVuZHBvaW50cyk7CisKKwkvKgorCSAqIGEgZmV3IGRldmljZXMgaGF2ZSA0IGVuZHBvaW50cywgc2VlbWluZ2x5IFlha3VtYSBkZXZpY2VzLAorCSAqIGFuZCB3ZSBuZWVkIHRoZSBzZWNvbmQgcGFpciwgc28gbGV0IHRoZW0gaGF2ZSAyIHBvcnRzCisJICoKKwkgKiBUT0RPOiBjYW4gd2UgZHJvcCBwb3J0IDEgPworCSAqLworCWlmIChzZXJpYWwtPmludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYk51bUVuZHBvaW50cyA+IDMpIHsKKwkJaXBhcV9udW1fcG9ydHMgPSAyOworCX0KKworCXJldHVybiBpcGFxX251bV9wb3J0czsKK30KKworCiBzdGF0aWMgaW50IGlwYXFfc3RhcnR1cChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQogewogCWRiZygiJXMiLCBfX2Z1bmNfXyk7CiAJaWYgKHNlcmlhbC0+ZGV2LT5hY3Rjb25maWctPmRlc2MuYkNvbmZpZ3VyYXRpb25WYWx1ZSAhPSAxKSB7CisJCS8qCisJCSAqIEZJWE1FOiBIUCBpUGFxIHJ4MzcxNSwgcG9zc2libHkgb3RoZXJzLCBoYXZlIDEgY29uZmlnIHRoYXQKKwkJICogaXMgbGFiZWxlZCBhcyAyCisJCSAqLworCiAJCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsICJhY3RpdmUgY29uZmlnICMlZCAhPSAxID8/XG4iLAogCQkJc2VyaWFsLT5kZXYtPmFjdGNvbmZpZy0+ZGVzYy5iQ29uZmlndXJhdGlvblZhbHVlKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQorCisJZGJnKCIlcyAtIGlQQVEgbW9kdWxlIGNvbmZpZ3VyZWQgZm9yICVkIHBvcnRzIiwKKwkJX19GVU5DVElPTl9fLCBzZXJpYWwtPm51bV9wb3J0cyk7CisKIAlyZXR1cm4gdXNiX3Jlc2V0X2NvbmZpZ3VyYXRpb24oc2VyaWFsLT5kZXYpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW4uYwppbmRleCA5ODc4YzBmLi4wMGRhYThmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbi5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuLmMKQEAgLTE1MDcsNyArMTUwNyw3IEBACiAJfSBlbHNlIHsKIAkJZGV2X3dhcm4oJnNlcmlhbC0+aW50ZXJmYWNlLT5kZXYsCiAJCQkgInVuc3VwcG9ydGVkIGVuZHBvaW50IHR5cGUgJXhcbiIsCi0JCQkgZXBfZGVzYy0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spOworCQkJIHVzYl9lbmRwb2ludF90eXBlKGVwX2Rlc2MpKTsKIAkJdXNiX2ZyZWVfdXJiKHVyYik7CiAJCXJldHVybiBOVUxMOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpY29uLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aWNvbi5jCmluZGV4IGNlYTMyNmYuLjgzOTU4M2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpY29uLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL29wdGljb24uYwpAQCAtMSw4ICsxLDggQEAKIC8qCiAgKiBPcHRpY29uIFVTQiBiYXJjb2RlIHRvIHNlcmlhbCBkcml2ZXIKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVna2hAc3VzZS5kZT4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBOb3ZlbGwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA4IC0gMjAwOSBHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdraEBzdXNlLmRlPgorICogQ29weXJpZ2h0IChDKSAyMDA4IC0gMjAwOSBOb3ZlbGwgSW5jLgogICoKICAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24KQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC90dHkuaD4KICNpbmNsdWRlIDxsaW51eC90dHlfZHJpdmVyLmg+CiAjaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KICNpbmNsdWRlIDxsaW51eC91c2Ivc2VyaWFsLmg+CkBAIC00MCw4ICs0MSwxMiBAQAogCWJvb2wgdGhyb3R0bGVkOwogCWJvb2wgYWN0dWFsbHlfdGhyb3R0bGVkOwogCWJvb2wgcnRzOworCWludCBvdXRzdGFuZGluZ191cmJzOwogfTsKIAorLyogbWF4IG51bWJlciBvZiB3cml0ZSB1cmJzIGluIGZsaWdodCAqLworI2RlZmluZSBVUkJfVVBQRVJfTElNSVQJNAorCiBzdGF0aWMgdm9pZCBvcHRpY29uX2J1bGtfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQogewogCXN0cnVjdCBvcHRpY29uX3ByaXZhdGUgKnByaXYgPSB1cmItPmNvbnRleHQ7CkBAIC0xMDYsNyArMTExLDYgQEAKIAkJCQkJcHJpdi0+cnRzID0gZmFsc2U7CiAJCQkJZWxzZQogCQkJCQlwcml2LT5ydHMgPSB0cnVlOwotCQkJCS8qIEZJWE1FIGNoYW5nZSB0aGUgUlRTIGxldmVsICovCiAJCQl9IGVsc2UgewogCQkJZGV2X2RiZygmcHJpdi0+dWRldi0+ZGV2LAogCQkJCSJVbmtub3duIGRhdGEgcGFja2V0IHJlY2VpdmVkIGZyb20gdGhlIGRldmljZToiCkBAIC0xODgsNiArMTkyLDEyMCBAQAogCXVzYl9raWxsX3VyYihwcml2LT5idWxrX3JlYWRfdXJiKTsKIH0KIAorc3RhdGljIHZvaWQgb3B0aWNvbl93cml0ZV9idWxrX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3Qgb3B0aWNvbl9wcml2YXRlICpwcml2ID0gdXJiLT5jb250ZXh0OworCWludCBzdGF0dXMgPSB1cmItPnN0YXR1czsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogZnJlZSB1cCB0aGUgdHJhbnNmZXIgYnVmZmVyLCBhcyB1c2JfZnJlZV91cmIoKSBkb2VzIG5vdCBkbyB0aGlzICovCisJa2ZyZWUodXJiLT50cmFuc2Zlcl9idWZmZXIpOworCisJaWYgKHN0YXR1cykKKwkJZGJnKCIlcyAtIG5vbnplcm8gd3JpdGUgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwKKwkJICAgIF9fZnVuY19fLCBzdGF0dXMpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwktLXByaXYtPm91dHN0YW5kaW5nX3VyYnM7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJdXNiX3NlcmlhbF9wb3J0X3NvZnRpbnQocHJpdi0+cG9ydCk7Cit9CisKK3N0YXRpYyBpbnQgb3B0aWNvbl93cml0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KQoreworCXN0cnVjdCBvcHRpY29uX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9kYXRhKHBvcnQtPnNlcmlhbCk7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKwlzdHJ1Y3QgdXJiICp1cmI7CisJdW5zaWduZWQgY2hhciAqYnVmZmVyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHN0YXR1czsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCWlmIChwcml2LT5vdXRzdGFuZGluZ191cmJzID4gVVJCX1VQUEVSX0xJTUlUKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJZGJnKCIlcyAtIHdyaXRlIGxpbWl0IGhpdFxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gMDsKKwl9CisJcHJpdi0+b3V0c3RhbmRpbmdfdXJicysrOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCWJ1ZmZlciA9IGttYWxsb2MoY291bnQsIEdGUF9BVE9NSUMpOworCWlmICghYnVmZmVyKSB7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIm91dCBvZiBtZW1vcnlcbiIpOworCQljb3VudCA9IC1FTk9NRU07CisJCWdvdG8gZXJyb3Jfbm9fYnVmZmVyOworCX0KKworCXVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0FUT01JQyk7CisJaWYgKCF1cmIpIHsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAibm8gbW9yZSBmcmVlIHVyYnNcbiIpOworCQljb3VudCA9IC1FTk9NRU07CisJCWdvdG8gZXJyb3Jfbm9fdXJiOworCX0KKworCW1lbWNweShidWZmZXIsIGJ1ZiwgY291bnQpOworCisJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX2Z1bmNfXywgY291bnQsIGJ1ZmZlcik7CisKKwl1c2JfZmlsbF9idWxrX3VyYih1cmIsIHNlcmlhbC0+ZGV2LAorCQkJICB1c2Jfc25kYnVsa3BpcGUoc2VyaWFsLT5kZXYsCisJCQkJCSAgcG9ydC0+YnVsa19vdXRfZW5kcG9pbnRBZGRyZXNzKSwKKwkJCSAgYnVmZmVyLCBjb3VudCwgb3B0aWNvbl93cml0ZV9idWxrX2NhbGxiYWNrLCBwcml2KTsKKworCS8qIHNlbmQgaXQgZG93biB0aGUgcGlwZSAqLworCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHN0YXR1cykgeworCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCSAgICIlcyAtIHVzYl9zdWJtaXRfdXJiKHdyaXRlIGJ1bGspIGZhaWxlZCB3aXRoIHN0YXR1cyA9ICVkXG4iLAorCQkJCQkJCV9fZnVuY19fLCBzdGF0dXMpOworCQljb3VudCA9IHN0YXR1czsKKwkJZ290byBlcnJvcjsKKwl9CisKKwkvKiB3ZSBhcmUgZG9uZSB3aXRoIHRoaXMgdXJiLCBzbyBsZXQgdGhlIGhvc3QgZHJpdmVyCisJICogcmVhbGx5IGZyZWUgaXQgd2hlbiBpdCBpcyBmaW5pc2hlZCB3aXRoIGl0ICovCisJdXNiX2ZyZWVfdXJiKHVyYik7CisKKwlyZXR1cm4gY291bnQ7CitlcnJvcjoKKwl1c2JfZnJlZV91cmIodXJiKTsKK2Vycm9yX25vX3VyYjoKKwlrZnJlZShidWZmZXIpOworZXJyb3Jfbm9fYnVmZmVyOgorCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJLS1wcml2LT5vdXRzdGFuZGluZ191cmJzOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBpbnQgb3B0aWNvbl93cml0ZV9yb29tKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IG9wdGljb25fcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX2RhdGEocG9ydC0+c2VyaWFsKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKKworCS8qCisJICogV2UgcmVhbGx5IGNhbiB0YWtlIGFsbW9zdCBhbnl0aGluZyB0aGUgdXNlciB0aHJvd3MgYXQgdXMKKwkgKiBidXQgbGV0J3MgcGljayBhIG5pY2UgYmlnIG51bWJlciB0byB0ZWxsIHRoZSB0dHkKKwkgKiBsYXllciB0aGF0IHdlIGhhdmUgbG90cyBvZiBmcmVlIHNwYWNlLCB1bmxlc3Mgd2UgZG9uJ3QuCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlpZiAocHJpdi0+b3V0c3RhbmRpbmdfdXJicyA+IFVSQl9VUFBFUl9MSU1JVCAqIDIgLyAzKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJZGJnKCIlcyAtIHdyaXRlIGxpbWl0IGhpdFxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gMDsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDIwNDg7Cit9CisKIHN0YXRpYyB2b2lkIG9wdGljb25fdGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKQEAgLTIyMyw2ICszNDEsNjcgQEAKIAkJCQkJCQlfX2Z1bmNfXywgcmVzdWx0KTsKIH0KIAorc3RhdGljIGludCBvcHRpY29uX3Rpb2NtZ2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOworCXN0cnVjdCBvcHRpY29uX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9kYXRhKHBvcnQtPnNlcmlhbCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmVzdWx0ID0gMDsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCWlmIChwcml2LT5ydHMpCisJCXJlc3VsdCA9IFRJT0NNX1JUUzsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwlkYmcoIiVzIC0gJXgiLCBfX2Z1bmNfXywgcmVzdWx0KTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50IGdldF9zZXJpYWxfaW5mbyhzdHJ1Y3Qgb3B0aWNvbl9wcml2YXRlICpwcml2LAorCQkJICAgc3RydWN0IHNlcmlhbF9zdHJ1Y3QgX191c2VyICpzZXJpYWwpCit7CisJc3RydWN0IHNlcmlhbF9zdHJ1Y3QgdG1wOworCisJaWYgKCFzZXJpYWwpCisJCXJldHVybiAtRUZBVUxUOworCisJbWVtc2V0KCZ0bXAsIDB4MDAsIHNpemVvZih0bXApKTsKKworCS8qIGZha2UgZW11bGF0ZSBhIDE2NTUwIHVhcnQgdG8gbWFrZSB1c2Vyc3BhY2UgY29kZSBoYXBweSAqLworCXRtcC50eXBlCQk9IFBPUlRfMTY1NTBBOworCXRtcC5saW5lCQk9IHByaXYtPnNlcmlhbC0+bWlub3I7CisJdG1wLnBvcnQJCT0gMDsKKwl0bXAuaXJxCQkJPSAwOworCXRtcC5mbGFncwkJPSBBU1lOQ19TS0lQX1RFU1QgfCBBU1lOQ19BVVRPX0lSUTsKKwl0bXAueG1pdF9maWZvX3NpemUJPSAxMDI0OworCXRtcC5iYXVkX2Jhc2UJCT0gOTYwMDsKKwl0bXAuY2xvc2VfZGVsYXkJCT0gNSpIWjsKKwl0bXAuY2xvc2luZ193YWl0CT0gMzAqSFo7CisKKwlpZiAoY29weV90b191c2VyKHNlcmlhbCwgJnRtcCwgc2l6ZW9mKCpzZXJpYWwpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3B0aWNvbl9pb2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3Qgb3B0aWNvbl9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfZGF0YShwb3J0LT5zZXJpYWwpOworCisJZGJnKCIlcyAtIHBvcnQgJWQsIGNtZCA9IDB4JXgiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyLCBjbWQpOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFRJT0NHU0VSSUFMOgorCQlyZXR1cm4gZ2V0X3NlcmlhbF9pbmZvKHByaXYsCisJCQkJICAgICAgIChzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCBfX3VzZXIgKilhcmcpOworCX0KKworCXJldHVybiAtRU5PSU9DVExDTUQ7Cit9CisKIHN0YXRpYyBpbnQgb3B0aWNvbl9zdGFydHVwKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCiB7CiAJc3RydWN0IG9wdGljb25fcHJpdmF0ZSAqcHJpdjsKQEAgLTMwNiwxMSArNDg1LDM3IEBACiAJdXNiX3NldF9zZXJpYWxfZGF0YShzZXJpYWwsIE5VTEwpOwogfQogCitzdGF0aWMgaW50IG9wdGljb25fc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpCit7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisJc3RydWN0IG9wdGljb25fcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX2RhdGEoc2VyaWFsKTsKKworCXVzYl9raWxsX3VyYihwcml2LT5idWxrX3JlYWRfdXJiKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvcHRpY29uX3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKwlzdHJ1Y3Qgb3B0aWNvbl9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfZGF0YShzZXJpYWwpOworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSBzZXJpYWwtPnBvcnRbMF07CisJaW50IHJlc3VsdDsKKworCW11dGV4X2xvY2soJnBvcnQtPm11dGV4KTsKKwlpZiAocG9ydC0+cG9ydC5jb3VudCkKKwkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocHJpdi0+YnVsa19yZWFkX3VyYiwgR0ZQX05PSU8pOworCWVsc2UKKwkJcmVzdWx0ID0gMDsKKwltdXRleF91bmxvY2soJnBvcnQtPm11dGV4KTsKKwlyZXR1cm4gcmVzdWx0OworfQogCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgb3B0aWNvbl9kcml2ZXIgPSB7CiAJLm5hbWUgPQkJIm9wdGljb24iLAogCS5wcm9iZSA9CXVzYl9zZXJpYWxfcHJvYmUsCiAJLmRpc2Nvbm5lY3QgPQl1c2Jfc2VyaWFsX2Rpc2Nvbm5lY3QsCisJLnN1c3BlbmQgPQlvcHRpY29uX3N1c3BlbmQsCisJLnJlc3VtZSA9CW9wdGljb25fcmVzdW1lLAogCS5pZF90YWJsZSA9CWlkX3RhYmxlLAogCS5ub19keW5hbWljX2lkID0gCTEsCiB9OwpAQCAtMzI2LDkgKzUzMSwxMyBAQAogCS5hdHRhY2ggPQkJb3B0aWNvbl9zdGFydHVwLAogCS5vcGVuID0JCQlvcHRpY29uX29wZW4sCiAJLmNsb3NlID0JCW9wdGljb25fY2xvc2UsCisJLndyaXRlID0JCW9wdGljb25fd3JpdGUsCisJLndyaXRlX3Jvb20gPSAJCW9wdGljb25fd3JpdGVfcm9vbSwKIAkuc2h1dGRvd24gPQkJb3B0aWNvbl9zaHV0ZG93biwKIAkudGhyb3R0bGUgPSAJCW9wdGljb25fdGhyb3R0bGUsCiAJLnVudGhyb3R0bGUgPQkJb3B0aWNvbl91bnRocm90dGxlLAorCS5pb2N0bCA9CQlvcHRpY29uX2lvY3RsLAorCS50aW9jbWdldCA9CQlvcHRpY29uX3Rpb2NtZ2V0LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgb3B0aWNvbl9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMKaW5kZXggNjFlYmRkYzQuLmQ1NjBjMGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMKQEAgLTYyLDYgKzYyLDggQEAKIHN0YXRpYyBpbnQgIG9wdGlvbl90aW9jbXNldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCQl1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIpOwogc3RhdGljIGludCAgb3B0aW9uX3NlbmRfc2V0dXAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CitzdGF0aWMgaW50ICBvcHRpb25fc3VzcGVuZChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLCBwbV9tZXNzYWdlX3QgbWVzc2FnZSk7CitzdGF0aWMgaW50ICBvcHRpb25fcmVzdW1lKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOwogCiAvKiBWZW5kb3IgYW5kIHByb2R1Y3QgSURzICovCiAjZGVmaW5lIE9QVElPTl9WRU5ET1JfSUQJCQkweDBBRjAKQEAgLTUyMyw2ICs1MjUsOCBAQAogCS5uYW1lICAgICAgID0gIm9wdGlvbiIsCiAJLnByb2JlICAgICAgPSB1c2Jfc2VyaWFsX3Byb2JlLAogCS5kaXNjb25uZWN0ID0gdXNiX3NlcmlhbF9kaXNjb25uZWN0LAorCS5zdXNwZW5kICAgID0gdXNiX3NlcmlhbF9zdXNwZW5kLAorCS5yZXN1bWUgICAgID0gdXNiX3NlcmlhbF9yZXN1bWUsCiAJLmlkX3RhYmxlICAgPSBvcHRpb25faWRzLAogCS5ub19keW5hbWljX2lkID0gCTEsCiB9OwpAQCAtNTUxLDYgKzU1NSw4IEBACiAJLmF0dGFjaCAgICAgICAgICAgID0gb3B0aW9uX3N0YXJ0dXAsCiAJLnNodXRkb3duICAgICAgICAgID0gb3B0aW9uX3NodXRkb3duLAogCS5yZWFkX2ludF9jYWxsYmFjayA9IG9wdGlvbl9pbnN0YXRfY2FsbGJhY2ssCisJLnN1c3BlbmQgICAgICAgICAgID0gb3B0aW9uX3N1c3BlbmQsCisJLnJlc3VtZSAgICAgICAgICAgID0gb3B0aW9uX3Jlc3VtZSwKIH07CiAKIHN0YXRpYyBpbnQgZGVidWc7CkBAIC04MjEsMTAgKzgyNywxMCBAQAogCQkJCXJlcV9wa3QtPmJSZXF1ZXN0VHlwZSwgcmVxX3BrdC0+YlJlcXVlc3QpOwogCQl9CiAJfSBlbHNlCi0JCWRiZygiJXM6IGVycm9yICVkIiwgX19mdW5jX18sIHN0YXR1cyk7CisJCWVycigiJXM6IGVycm9yICVkIiwgX19mdW5jX18sIHN0YXR1cyk7CiAKIAkvKiBSZXN1Ym1pdCB1cmIgc28gd2UgY29udGludWUgcmVjZWl2aW5nIElSUSBkYXRhICovCi0JaWYgKHN0YXR1cyAhPSAtRVNIVVRET1dOKSB7CisJaWYgKHN0YXR1cyAhPSAtRVNIVVRET1dOICYmIHN0YXR1cyAhPSAtRU5PRU5UKSB7CiAJCXVyYi0+ZGV2ID0gc2VyaWFsLT5kZXY7CiAJCWVyciA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CiAJCWlmIChlcnIpCkBAIC04NDMsNyArODQ5LDYgQEAKIAogCXBvcnRkYXRhID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCi0KIAlmb3IgKGkgPSAwOyBpIDwgTl9PVVRfVVJCOyBpKyspIHsKIAkJdGhpc191cmIgPSBwb3J0ZGF0YS0+b3V0X3VyYnNbaV07CiAJCWlmICh0aGlzX3VyYiAmJiAhdGVzdF9iaXQoaSwgJnBvcnRkYXRhLT5vdXRfYnVzeSkpCkBAIC0xMTA1LDE0ICsxMTEwLDEyIEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyB2b2lkIG9wdGlvbl9zaHV0ZG93bihzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQorc3RhdGljIHZvaWQgc3RvcF9yZWFkX3dyaXRlX3VyYnMoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKIHsKIAlpbnQgaSwgajsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0OwogCXN0cnVjdCBvcHRpb25fcG9ydF9wcml2YXRlICpwb3J0ZGF0YTsKIAotCWRiZygiJXMiLCBfX2Z1bmNfXyk7Ci0KIAkvKiBTdG9wIHJlYWRpbmcvd3JpdGluZyB1cmJzICovCiAJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyArK2kpIHsKIAkJcG9ydCA9IHNlcmlhbC0+cG9ydFtpXTsKQEAgLTExMjIsNiArMTEyNSwxNyBAQAogCQlmb3IgKGogPSAwOyBqIDwgTl9PVVRfVVJCOyBqKyspCiAJCQl1c2Jfa2lsbF91cmIocG9ydGRhdGEtPm91dF91cmJzW2pdKTsKIAl9Cit9CisKK3N0YXRpYyB2b2lkIG9wdGlvbl9zaHV0ZG93bihzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCWludCBpLCBqOworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7CisJc3RydWN0IG9wdGlvbl9wb3J0X3ByaXZhdGUgKnBvcnRkYXRhOworCisJZGJnKCIlcyIsIF9fZnVuY19fKTsKKworCXN0b3BfcmVhZF93cml0ZV91cmJzKHNlcmlhbCk7CiAKIAkvKiBOb3cgZnJlZSB0aGVtICovCiAJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyArK2kpIHsKQEAgLTExNTIsNiArMTE2Niw2NiBAQAogCX0KIH0KIAorc3RhdGljIGludCBvcHRpb25fc3VzcGVuZChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLCBwbV9tZXNzYWdlX3QgbWVzc2FnZSkKK3sKKwlkYmcoIiVzIGVudGVyZWQiLCBfX2Z1bmNfXyk7CisJc3RvcF9yZWFkX3dyaXRlX3VyYnMoc2VyaWFsKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9wdGlvbl9yZXN1bWUoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlpbnQgZXJyLCBpLCBqOworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7CisJc3RydWN0IHVyYiAqdXJiOworCXN0cnVjdCBvcHRpb25fcG9ydF9wcml2YXRlICpwb3J0ZGF0YTsKKworCWRiZygiJXMgZW50ZXJlZCIsIF9fZnVuY19fKTsKKwkvKiBnZXQgdGhlIGludGVycnVwdCBVUkJzIHJlc3VibWl0dGVkIHVuY29uZGl0aW9uYWxseSAqLworCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgaSsrKSB7CisJCXBvcnQgPSBzZXJpYWwtPnBvcnRbaV07CisJCWlmICghcG9ydC0+aW50ZXJydXB0X2luX3VyYikgeworCQkJZGJnKCIlczogTm8gaW50ZXJydXB0IFVSQiBmb3IgcG9ydCAlZFxuIiwgX19mdW5jX18sIGkpOworCQkJY29udGludWU7CisJCX0KKwkJcG9ydC0+aW50ZXJydXB0X2luX3VyYi0+ZGV2ID0gc2VyaWFsLT5kZXY7CisJCWVyciA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPmludGVycnVwdF9pbl91cmIsIEdGUF9OT0lPKTsKKwkJZGJnKCJTdWJtaXR0ZWQgaW50ZXJydXB0IFVSQiBmb3IgcG9ydCAlZCAocmVzdWx0ICVkKSIsIGksIGVycik7CisJCWlmIChlcnIgPCAwKSB7CisJCQllcnIoIiVzOiBFcnJvciAlZCBmb3IgaW50ZXJydXB0IFVSQiBvZiBwb3J0JWQiLAorCQkJCSBfX2Z1bmNfXywgZXJyLCBpKTsKKwkJCXJldHVybiBlcnI7CisJCX0KKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7IGkrKykgeworCQkvKiB3YWxrIGFsbCBwb3J0cyAqLworCQlwb3J0ID0gc2VyaWFsLT5wb3J0W2ldOworCQlwb3J0ZGF0YSA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwkJbXV0ZXhfbG9jaygmcG9ydC0+bXV0ZXgpOworCisJCS8qIHNraXAgY2xvc2VkIHBvcnRzICovCisJCWlmICghcG9ydC0+cG9ydC5jb3VudCkgeworCQkJbXV0ZXhfdW5sb2NrKCZwb3J0LT5tdXRleCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWZvciAoaiA9IDA7IGogPCBOX0lOX1VSQjsgaisrKSB7CisJCQl1cmIgPSBwb3J0ZGF0YS0+aW5fdXJic1tqXTsKKwkJCWVyciA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX05PSU8pOworCQkJaWYgKGVyciA8IDApIHsKKwkJCQltdXRleF91bmxvY2soJnBvcnQtPm11dGV4KTsKKwkJCQllcnIoIiVzOiBFcnJvciAlZCBmb3IgYnVsayBVUkIgJWQiLAorCQkJCQkgX19mdW5jX18sIGVyciwgaSk7CisJCQkJcmV0dXJuIGVycjsKKwkJCX0KKwkJfQorCQltdXRleF91bmxvY2soJnBvcnQtPm11dGV4KTsKKwl9CisJcmV0dXJuIDA7Cit9CisKIE1PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CiBNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOwogTU9EVUxFX1ZFUlNJT04oRFJJVkVSX1ZFUlNJT04pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3Fjc2VyaWFsLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvcWNzZXJpYWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmQ2YjBjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3Fjc2VyaWFsLmMKQEAgLTAsMCArMSwxNDcgQEAKKy8qCisgKiBRdWFsY29tbSBTZXJpYWwgVVNCIGRyaXZlcgorICoKKyAqCUNvcHlyaWdodCAoYykgMjAwOCBRVUFMQ09NTSBJbmNvcnBvcmF0ZWQuCisgKglDb3B5cmlnaHQgKGMpIDIwMDkgR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVna2hAc3VzZS5kZT4KKyAqCUNvcHlyaWdodCAoYykgMjAwOSBOb3ZlbGwgSW5jLgorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24KKyAqCTIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi9zZXJpYWwuaD4KKworI2RlZmluZSBEUklWRVJfQVVUSE9SICJRdWFsY29tbSBJbmMiCisjZGVmaW5lIERSSVZFUl9ERVNDICJRdWFsY29tbSBVU0IgU2VyaWFsIGRyaXZlciIKKworc3RhdGljIGludCBkZWJ1ZzsKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlW10gPSB7CisJe1VTQl9ERVZJQ0UoMHgwNWM2LCAweDkyMTEpfSwJLyogQWNlciBHb2JpIFFETCBkZXZpY2UgKi8KKwl7VVNCX0RFVklDRSgweDA1YzYsIDB4OTIxMil9LAkvKiBBY2VyIEdvYmkgTW9kZW0gRGV2aWNlICovCisJe1VTQl9ERVZJQ0UoMHgwM2YwLCAweDFmMWQpfSwJLyogSFAgdW4yNDAwIEdvYmkgTW9kZW0gRGV2aWNlICovCisJe1VTQl9ERVZJQ0UoMHgwM2YwLCAweDIwMWQpfSwJLyogSFAgdW4yNDAwIEdvYmkgUURMIERldmljZSAqLworCXsgfQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBpZF90YWJsZSk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBxY2RyaXZlciA9IHsKKwkubmFtZQkJCT0gInFjc2VyaWFsIiwKKwkucHJvYmUJCQk9IHVzYl9zZXJpYWxfcHJvYmUsCisJLmRpc2Nvbm5lY3QJCT0gdXNiX3NlcmlhbF9kaXNjb25uZWN0LAorCS5pZF90YWJsZQkJPSBpZF90YWJsZSwKKwkuc3VzcGVuZAkJPSB1c2Jfc2VyaWFsX3N1c3BlbmQsCisJLnJlc3VtZQkJCT0gdXNiX3NlcmlhbF9yZXN1bWUsCisJLnN1cHBvcnRzX2F1dG9zdXNwZW5kCT0gdHJ1ZSwKK307CisKK3N0YXRpYyBpbnQgcWNwcm9iZShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJaW50IHJldHZhbCA9IC1FTk9ERVY7CisJX191OCBuaW50ZjsKKwlfX3U4IGlmbnVtOworCisJZGJnKCIlcyIsIF9fZnVuY19fKTsKKworCW5pbnRmID0gc2VyaWFsLT5kZXYtPmFjdGNvbmZpZy0+ZGVzYy5iTnVtSW50ZXJmYWNlczsKKwlkYmcoIk51bSBJbnRlcmZhY2VzID0gJWQiLCBuaW50Zik7CisJaWZudW0gPSBzZXJpYWwtPmludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlcjsKKwlkYmcoIlRoaXMgSW50ZXJmYWNlID0gJWQiLCBpZm51bSk7CisKKwlzd2l0Y2ggKG5pbnRmKSB7CisJY2FzZSAxOgorCQkvKiBRREwgbW9kZSAqLworCQlpZiAoc2VyaWFsLT5pbnRlcmZhY2UtPm51bV9hbHRzZXR0aW5nID09IDIpIHsKKwkJCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmludGY7CisKKwkJCWludGYgPSAmc2VyaWFsLT5pbnRlcmZhY2UtPmFsdHNldHRpbmdbMV07CisJCQlpZiAoaW50Zi0+ZGVzYy5iTnVtRW5kcG9pbnRzID09IDIpIHsKKwkJCQlpZiAodXNiX2VuZHBvaW50X2lzX2J1bGtfaW4oJmludGYtPmVuZHBvaW50WzBdLmRlc2MpICYmCisJCQkJICAgIHVzYl9lbmRwb2ludF9pc19idWxrX291dCgmaW50Zi0+ZW5kcG9pbnRbMV0uZGVzYykpIHsKKwkJCQkJZGJnKCJRREwgcG9ydCBmb3VuZCIpOworCQkJCQlyZXR2YWwgPSB1c2Jfc2V0X2ludGVyZmFjZShzZXJpYWwtPmRldiwgaWZudW0sIDEpOworCQkJCQlpZiAocmV0dmFsIDwgMCkgeworCQkJCQkJZGV2X2Vycigmc2VyaWFsLT5kZXYtPmRldiwKKwkJCQkJCQkiQ291bGQgbm90IHNldCBpbnRlcmZhY2UsIGVycm9yICVkXG4iLAorCQkJCQkJCXJldHZhbCk7CisJCQkJCQlyZXR2YWwgPSAtRU5PREVWOworCQkJCQl9CisJCQkJCXJldHVybiByZXR2YWw7CisJCQkJfQorCQkJfQorCQl9CisJCWJyZWFrOworCisJY2FzZSA0OgorCQkvKiBDb21wb3NpdGUgbW9kZSAqLworCQlpZiAoaWZudW0gPT0gMikgeworCQkJZGJnKCJNb2RlbSBwb3J0IGZvdW5kIik7CisJCQlyZXR2YWwgPSB1c2Jfc2V0X2ludGVyZmFjZShzZXJpYWwtPmRldiwgaWZudW0sIDApOworCQkJaWYgKHJldHZhbCA8IDApIHsKKwkJCQlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LAorCQkJCQkiQ291bGQgbm90IHNldCBpbnRlcmZhY2UsIGVycm9yICVkXG4iLAorCQkJCQlyZXR2YWwpOworCQkJCXJldHZhbCA9IC1FTk9ERVY7CisJCQl9CisJCQlyZXR1cm4gcmV0dmFsOworCQl9CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZGV2X2Vycigmc2VyaWFsLT5kZXYtPmRldiwKKwkJCSJ1bmtub3duIG51bWJlciBvZiBpbnRlcmZhY2VzOiAlZFxuIiwgbmludGYpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZHJpdmVyIHFjZGV2aWNlID0geworCS5kcml2ZXIgPSB7CisJCS5vd25lciAgICAgPSBUSElTX01PRFVMRSwKKwkJLm5hbWUgICAgICA9ICJxY3NlcmlhbCIsCisJfSwKKwkuZGVzY3JpcHRpb24gICAgICAgICA9ICJRdWFsY29tbSBVU0IgbW9kZW0iLAorCS5pZF90YWJsZSAgICAgICAgICAgID0gaWRfdGFibGUsCisJLnVzYl9kcml2ZXIgICAgICAgICAgPSAmcWNkcml2ZXIsCisJLm51bV9wb3J0cyAgICAgICAgICAgPSAxLAorCS5wcm9iZSAgICAgICAgICAgICAgID0gcWNwcm9iZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHFjaW5pdCh2b2lkKQoreworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSB1c2Jfc2VyaWFsX3JlZ2lzdGVyKCZxY2RldmljZSk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCXJldHZhbCA9IHVzYl9yZWdpc3RlcigmcWNkcml2ZXIpOworCWlmIChyZXR2YWwpIHsKKwkJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZxY2RldmljZSk7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBxY2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlcigmcWNkcml2ZXIpOworCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmcWNkZXZpY2UpOworfQorCittb2R1bGVfaW5pdChxY2luaXQpOworbW9kdWxlX2V4aXQocWNleGl0KTsKKworTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CisKK21vZHVsZV9wYXJhbShkZWJ1ZywgYm9vbCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGVuYWJsZWQgb3Igbm90Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvc3ltYm9sc2VyaWFsLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvc3ltYm9sc2VyaWFsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGIzY2JjOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9zeW1ib2xzZXJpYWwuYwpAQCAtMCwwICsxLDM5OSBAQAorLyoKKyAqIFN5bWJvbCBVU0IgYmFyY29kZSB0byBzZXJpYWwgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ2toQHN1c2UuZGU+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTm92ZWxsIEluYy4KKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uCisgKgkyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvdHR5X2RyaXZlci5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvdXNiL3NlcmlhbC5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKworc3RhdGljIGludCBkZWJ1ZzsKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlW10gPSB7CisJeyBVU0JfREVWSUNFKDB4MDVlMCwgMHgwNjAwKSB9LAorCXsgfSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgaWRfdGFibGUpOworCisvKiBUaGlzIHN0cnVjdHVyZSBob2xkcyBhbGwgb2YgdGhlIGluZGl2aWR1YWwgZGV2aWNlIGluZm9ybWF0aW9uICovCitzdHJ1Y3Qgc3ltYm9sX3ByaXZhdGUgeworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWw7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydDsKKwl1bnNpZ25lZCBjaGFyICppbnRfYnVmZmVyOworCXN0cnVjdCB1cmIgKmludF91cmI7CisJaW50IGJ1ZmZlcl9zaXplOworCXU4IGJJbnRlcnZhbDsKKwl1OCBpbnRfYWRkcmVzczsKKwlzcGlubG9ja190IGxvY2s7CS8qIHByb3RlY3RzIHRoZSBmb2xsb3dpbmcgZmxhZ3MgKi8KKwlib29sIHRocm90dGxlZDsKKwlib29sIGFjdHVhbGx5X3Rocm90dGxlZDsKKwlib29sIHJ0czsKK307CisKK3N0YXRpYyB2b2lkIHN5bWJvbF9pbnRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCBzeW1ib2xfcHJpdmF0ZSAqcHJpdiA9IHVyYi0+Y29udGV4dDsKKwl1bnNpZ25lZCBjaGFyICpkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHByaXYtPnBvcnQ7CisJaW50IHN0YXR1cyA9IHVyYi0+c3RhdHVzOworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CisJaW50IHJlc3VsdDsKKwlpbnQgYXZhaWxhYmxlX3Jvb20gPSAwOworCWludCBkYXRhX2xlbmd0aDsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisKKwlzd2l0Y2ggKHN0YXR1cykgeworCWNhc2UgMDoKKwkJLyogc3VjY2VzcyAqLworCQlicmVhazsKKwljYXNlIC1FQ09OTlJFU0VUOgorCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FU0hVVERPV046CisJCS8qIHRoaXMgdXJiIGlzIHRlcm1pbmF0ZWQsIGNsZWFuIHVwICovCisJCWRiZygiJXMgLSB1cmIgc2h1dHRpbmcgZG93biB3aXRoIHN0YXR1czogJWQiLAorCQkgICAgX19mdW5jX18sIHN0YXR1cyk7CisJCXJldHVybjsKKwlkZWZhdWx0OgorCQlkYmcoIiVzIC0gbm9uemVybyB1cmIgc3RhdHVzIHJlY2VpdmVkOiAlZCIsCisJCSAgICBfX2Z1bmNfXywgc3RhdHVzKTsKKwkJZ290byBleGl0OworCX0KKworCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgX19mdW5jX18sIHVyYi0+YWN0dWFsX2xlbmd0aCwKKwkJCSAgICAgIGRhdGEpOworCisJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCA+IDEpIHsKKwkJZGF0YV9sZW5ndGggPSB1cmItPmFjdHVhbF9sZW5ndGggLSAxOworCisJCS8qCisJCSAqIERhdGEgZnJvbSB0aGUgZGV2aWNlIGNvbWVzIHdpdGggYSAxIGJ5dGUgaGVhZGVyOgorCQkgKgorCQkgKiA8c2l6ZSBvZiBkYXRhPmRhdGEuLi4KKwkJICogCVRoaXMgaXMgcmVhbCBkYXRhIHRvIGJlIHNlbnQgdG8gdGhlIHR0eSBsYXllcgorCQkgKiB3ZSBwcmV0dHkgbXVjaCBqdXN0IGlnbm9yZSB0aGUgc2l6ZSBhbmQgc2VuZCBldmVyeXRoaW5nCisJCSAqIGVsc2UgdG8gdGhlIHR0eSBsYXllci4KKwkJICovCisJCXR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJnBvcnQtPnBvcnQpOworCQlpZiAodHR5KSB7CisJCQlhdmFpbGFibGVfcm9vbSA9IHR0eV9idWZmZXJfcmVxdWVzdF9yb29tKHR0eSwKKwkJCQkJCQlkYXRhX2xlbmd0aCk7CisJCQlpZiAoYXZhaWxhYmxlX3Jvb20pIHsKKwkJCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgJmRhdGFbMV0sCisJCQkJCQkgICAgICAgYXZhaWxhYmxlX3Jvb20pOworCQkJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CisJCQl9CisJCQl0dHlfa3JlZl9wdXQodHR5KTsKKwkJfQorCX0gZWxzZSB7CisJCWRldl9kYmcoJnByaXYtPnVkZXYtPmRldiwKKwkJCSJJbXByb3BlciBhbW1vdW50IG9mIGRhdGEgcmVjZWl2ZWQgZnJvbSB0aGUgZGV2aWNlLCAiCisJCQkiJWQgYnl0ZXMiLCB1cmItPmFjdHVhbF9sZW5ndGgpOworCX0KKworZXhpdDoKKwlzcGluX2xvY2soJnByaXYtPmxvY2spOworCisJLyogQ29udGludWUgdHJ5aW5nIHRvIGFsd2F5cyByZWFkIGlmIHdlIHNob3VsZCAqLworCWlmICghcHJpdi0+dGhyb3R0bGVkKSB7CisJCXVzYl9maWxsX2ludF91cmIocHJpdi0+aW50X3VyYiwgcHJpdi0+dWRldiwKKwkJCQkgdXNiX3JjdmludHBpcGUocHJpdi0+dWRldiwKKwkJCQkgCQlwcml2LT5pbnRfYWRkcmVzcyksCisJCQkJIHByaXYtPmludF9idWZmZXIsIHByaXYtPmJ1ZmZlcl9zaXplLAorCQkJCSBzeW1ib2xfaW50X2NhbGxiYWNrLCBwcml2LCBwcml2LT5iSW50ZXJ2YWwpOworCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwcml2LT5pbnRfdXJiLCBHRlBfQVRPTUlDKTsKKwkJaWYgKHJlc3VsdCkKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCSAgICAiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwKKwkJCQkJCQlfX2Z1bmNfXywgcmVzdWx0KTsKKwl9IGVsc2UKKwkJcHJpdi0+YWN0dWFsbHlfdGhyb3R0bGVkID0gdHJ1ZTsKKwlzcGluX3VubG9jaygmcHJpdi0+bG9jayk7Cit9CisKK3N0YXRpYyBpbnQgc3ltYm9sX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCXN0cnVjdCBmaWxlICpmaWxwKQoreworCXN0cnVjdCBzeW1ib2xfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX2RhdGEocG9ydC0+c2VyaWFsKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXN1bHQgPSAwOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJcHJpdi0+dGhyb3R0bGVkID0gZmFsc2U7CisJcHJpdi0+YWN0dWFsbHlfdGhyb3R0bGVkID0gZmFsc2U7CisJcHJpdi0+cG9ydCA9IHBvcnQ7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJLyoKKwkgKiBGb3JjZSBsb3dfbGF0ZW5jeSBvbiBzbyB0aGF0IG91ciB0dHlfcHVzaCBhY3R1YWxseSBmb3JjZXMgdGhlIGRhdGEKKwkgKiB0aHJvdWdoLCBvdGhlcndpc2UgaXQgaXMgc2NoZWR1bGVkLCBhbmQgd2l0aCBoaWdoIGRhdGEgcmF0ZXMgKGxpa2UKKwkgKiB3aXRoIE9IQ0kpIGRhdGEgY2FuIGdldCBsb3N0LgorCSAqLworCWlmICh0dHkpCisJCXR0eS0+bG93X2xhdGVuY3kgPSAxOworCisJLyogU3RhcnQgcmVhZGluZyBmcm9tIHRoZSBkZXZpY2UgKi8KKwl1c2JfZmlsbF9pbnRfdXJiKHByaXYtPmludF91cmIsIHByaXYtPnVkZXYsCisJCQkgdXNiX3JjdmludHBpcGUocHJpdi0+dWRldiwgcHJpdi0+aW50X2FkZHJlc3MpLAorCQkJIHByaXYtPmludF9idWZmZXIsIHByaXYtPmJ1ZmZlcl9zaXplLAorCQkJIHN5bWJvbF9pbnRfY2FsbGJhY2ssIHByaXYsIHByaXYtPmJJbnRlcnZhbCk7CisJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocHJpdi0+aW50X3VyYiwgR0ZQX0tFUk5FTCk7CisJaWYgKHJlc3VsdCkKKwkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWRcbiIsCisJCQlfX2Z1bmNfXywgcmVzdWx0KTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCBzeW1ib2xfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCSAgc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IHN5bWJvbF9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfZGF0YShwb3J0LT5zZXJpYWwpOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKKworCS8qIHNodXRkb3duIG91ciB1cmJzICovCisJdXNiX2tpbGxfdXJiKHByaXYtPmludF91cmIpOworfQorCitzdGF0aWMgdm9pZCBzeW1ib2xfdGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3Qgc3ltYm9sX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9kYXRhKHBvcnQtPnNlcmlhbCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlwcml2LT50aHJvdHRsZWQgPSB0cnVlOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgc3ltYm9sX3VudGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3Qgc3ltYm9sX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9kYXRhKHBvcnQtPnNlcmlhbCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmVzdWx0OworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJcHJpdi0+dGhyb3R0bGVkID0gZmFsc2U7CisJcHJpdi0+YWN0dWFsbHlfdGhyb3R0bGVkID0gZmFsc2U7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJcHJpdi0+aW50X3VyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CisJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocHJpdi0+aW50X3VyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHJlc3VsdCkKKwkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLAorCQkJCQkJCV9fZnVuY19fLCByZXN1bHQpOworfQorCitzdGF0aWMgaW50IHN5bWJvbF9pb2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwb3J0LT5kZXY7CisKKwkvKgorCSAqIFJpZ2h0IG5vdyB3ZSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBjb21tYW5kcworCSAqIG1vc3QgdXNlcnNwYWNlIHRvb2xzIHdhbnQgdG8gc2VlIGZvciB0aGlzIGRyaXZlciwKKwkgKiBzbyBqdXN0IGxvZyB0aGUgdGhpbmdzLgorCSAqLworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBUSU9DU0VSR0VUTFNSOgorCQlkZXZfaW5mbyhkZXYsICIlczogVElPQ1NFUkdFVExTUlxuIiwgX19mdW5jX18pOworCQlicmVhazsKKworCWNhc2UgVElPQ0dTRVJJQUw6CisJCWRldl9pbmZvKGRldiwgIiVzOiBUSU9DR1NFUklBTFxuIiwgX19mdW5jX18pOworCQlicmVhazsKKworCWNhc2UgVElPQ01JV0FJVDoKKwkJZGV2X2luZm8oZGV2LCAiJXM6IFRJT0NNSVdBSVRcbiIsIF9fZnVuY19fKTsKKwkJYnJlYWs7CisKKwljYXNlIFRJT0NHSUNPVU5UOgorCQlkZXZfaW5mbyhkZXYsICIlczogVElPQ0dJQ09VTlRcbiIsIF9fZnVuY19fKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2luZm8oZGV2LCAiJXM6IHVua25vd24gKCVkKVxuIiwgX19mdW5jX18sIGNtZCk7CisJfQorCXJldHVybiAtRU5PSU9DVExDTUQ7Cit9CisKK3N0YXRpYyBpbnQgc3ltYm9sX3Rpb2NtZ2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwb3J0LT5kZXY7CisKKwkvKiBUT0RPICovCisJLyogcHJvYmFibHkganVzdCBuZWVkIHRvIHNoYWRvdyB3aGF0ZXZlciB3YXMgc2VudCB0byB1cyBoZXJlICovCisJZGV2X2luZm8oZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzeW1ib2xfdGlvY21zZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgICB1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBvcnQtPmRldjsKKworCS8qIFRPRE8gKi8KKwkvKiBwcm9iYWJseSBqdXN0IG5lZWQgdG8gc2hhZG93IHdoYXRldmVyIHdhcyBzZW50IHRvIHVzIGhlcmUgKi8KKwlkZXZfaW5mbyhkZXYsICIlc1xuIiwgX19mdW5jX18pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN5bWJvbF9zdGFydHVwKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJc3RydWN0IHN5bWJvbF9wcml2YXRlICpwcml2OworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmludGY7CisJaW50IGk7CisJaW50IHJldHZhbCA9IC1FTk9NRU07CisJYm9vbCBpbnRfaW5fZm91bmQgPSBmYWxzZTsKKworCS8qIGNyZWF0ZSBvdXIgcHJpdmF0ZSBzZXJpYWwgc3RydWN0dXJlICovCisJcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKHByaXYgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LCAiJXMgLSBPdXQgb2YgbWVtb3J5XG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlzcGluX2xvY2tfaW5pdCgmcHJpdi0+bG9jayk7CisJcHJpdi0+c2VyaWFsID0gc2VyaWFsOworCXByaXYtPnBvcnQgPSBzZXJpYWwtPnBvcnRbMF07CisJcHJpdi0+dWRldiA9IHNlcmlhbC0+ZGV2OworCisJLyogZmluZCBvdXIgaW50ZXJydXB0IGVuZHBvaW50ICovCisJaW50ZiA9IHNlcmlhbC0+aW50ZXJmYWNlLT5hbHRzZXR0aW5nOworCWZvciAoaSA9IDA7IGkgPCBpbnRmLT5kZXNjLmJOdW1FbmRwb2ludHM7ICsraSkgeworCQlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVuZHBvaW50OworCisJCWVuZHBvaW50ID0gJmludGYtPmVuZHBvaW50W2ldLmRlc2M7CisJCWlmICghdXNiX2VuZHBvaW50X2lzX2ludF9pbihlbmRwb2ludCkpCisJCQljb250aW51ZTsKKworCQlwcml2LT5pbnRfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFwcml2LT5pbnRfdXJiKSB7CisJCQlkZXZfZXJyKCZwcml2LT51ZGV2LT5kZXYsICJvdXQgb2YgbWVtb3J5XG4iKTsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKworCQlwcml2LT5idWZmZXJfc2l6ZSA9IGxlMTZfdG9fY3B1KGVuZHBvaW50LT53TWF4UGFja2V0U2l6ZSkgKiAyOworCQlwcml2LT5pbnRfYnVmZmVyID0ga21hbGxvYyhwcml2LT5idWZmZXJfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCWlmICghcHJpdi0+aW50X2J1ZmZlcikgeworCQkJZGV2X2VycigmcHJpdi0+dWRldi0+ZGV2LCAib3V0IG9mIG1lbW9yeVxuIik7CisJCQlnb3RvIGVycm9yOworCQl9CisKKwkJcHJpdi0+aW50X2FkZHJlc3MgPSBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzczsKKwkJcHJpdi0+YkludGVydmFsID0gZW5kcG9pbnQtPmJJbnRlcnZhbDsKKworCQkvKiBzZXQgdXAgb3VyIGludCB1cmIgKi8KKwkJdXNiX2ZpbGxfaW50X3VyYihwcml2LT5pbnRfdXJiLCBwcml2LT51ZGV2LAorCQkJCSB1c2JfcmN2aW50cGlwZShwcml2LT51ZGV2LAorCQkJCSAJCWVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzKSwKKwkJCQkgcHJpdi0+aW50X2J1ZmZlciwgcHJpdi0+YnVmZmVyX3NpemUsCisJCQkJIHN5bWJvbF9pbnRfY2FsbGJhY2ssIHByaXYsIHByaXYtPmJJbnRlcnZhbCk7CisKKwkJaW50X2luX2ZvdW5kID0gdHJ1ZTsKKwkJYnJlYWs7CisJCX0KKworCWlmICghaW50X2luX2ZvdW5kKSB7CisJCWRldl9lcnIoJnByaXYtPnVkZXYtPmRldiwKKwkJCSJFcnJvciAtIHRoZSBwcm9wZXIgZW5kcG9pbnRzIHdlcmUgbm90IGZvdW5kIVxuIik7CisJCWdvdG8gZXJyb3I7CisJfQorCisJdXNiX3NldF9zZXJpYWxfZGF0YShzZXJpYWwsIHByaXYpOworCXJldHVybiAwOworCitlcnJvcjoKKwl1c2JfZnJlZV91cmIocHJpdi0+aW50X3VyYik7CisJa2ZyZWUocHJpdi0+aW50X2J1ZmZlcik7CisJa2ZyZWUocHJpdik7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgc3ltYm9sX3NodXRkb3duKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJc3RydWN0IHN5bWJvbF9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfZGF0YShzZXJpYWwpOworCisJZGJnKCIlcyIsIF9fZnVuY19fKTsKKworCXVzYl9raWxsX3VyYihwcml2LT5pbnRfdXJiKTsKKwl1c2JfZnJlZV91cmIocHJpdi0+aW50X3VyYik7CisJa2ZyZWUocHJpdi0+aW50X2J1ZmZlcik7CisJa2ZyZWUocHJpdik7CisJdXNiX3NldF9zZXJpYWxfZGF0YShzZXJpYWwsIE5VTEwpOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgc3ltYm9sX2RyaXZlciA9IHsKKwkubmFtZSA9CQkJInN5bWJvbCIsCisJLnByb2JlID0JCXVzYl9zZXJpYWxfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQkJdXNiX3NlcmlhbF9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9CQlpZF90YWJsZSwKKwkubm9fZHluYW1pY19pZCA9IAkxLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RyaXZlciBzeW1ib2xfZGV2aWNlID0geworCS5kcml2ZXIgPSB7CisJCS5vd25lciA9CVRISVNfTU9EVUxFLAorCQkubmFtZSA9CQkic3ltYm9sIiwKKwl9LAorCS5pZF90YWJsZSA9CQlpZF90YWJsZSwKKwkudXNiX2RyaXZlciA9IAkJJnN5bWJvbF9kcml2ZXIsCisJLm51bV9wb3J0cyA9CQkxLAorCS5hdHRhY2ggPQkJc3ltYm9sX3N0YXJ0dXAsCisJLm9wZW4gPQkJCXN5bWJvbF9vcGVuLAorCS5jbG9zZSA9CQlzeW1ib2xfY2xvc2UsCisJLnNodXRkb3duID0JCXN5bWJvbF9zaHV0ZG93biwKKwkudGhyb3R0bGUgPSAJCXN5bWJvbF90aHJvdHRsZSwKKwkudW50aHJvdHRsZSA9CQlzeW1ib2xfdW50aHJvdHRsZSwKKwkuaW9jdGwgPSAJCXN5bWJvbF9pb2N0bCwKKwkudGlvY21nZXQgPSAJCXN5bWJvbF90aW9jbWdldCwKKwkudGlvY21zZXQgPSAJCXN5bWJvbF90aW9jbXNldCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHN5bWJvbF9pbml0KHZvaWQpCit7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IHVzYl9zZXJpYWxfcmVnaXN0ZXIoJnN5bWJvbF9kZXZpY2UpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZzeW1ib2xfZHJpdmVyKTsKKwlpZiAocmV0dmFsKQorCQl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJnN5bWJvbF9kZXZpY2UpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzeW1ib2xfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZzeW1ib2xfZHJpdmVyKTsKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJnN5bWJvbF9kZXZpY2UpOworfQorCittb2R1bGVfaW5pdChzeW1ib2xfaW5pdCk7Cittb2R1bGVfZXhpdChzeW1ib2xfZXhpdCk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK21vZHVsZV9wYXJhbShkZWJ1ZywgYm9vbCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGVuYWJsZWQgb3Igbm90Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuYwppbmRleCBjZmNmZDVhLi43NDJhNWJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmMKQEAgLTIwNCw2ICsyMDQsMTEgQEAKIAkJZ290byBiYWlsb3V0X2tyZWZfcHV0OwogCX0KIAorCWlmIChwb3J0LT5zZXJpYWwtPmRpc2Nvbm5lY3RlZCkgeworCQlyZXR2YWwgPSAtRU5PREVWOworCQlnb3RvIGJhaWxvdXRfa3JlZl9wdXQ7CisJfQorCiAJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmcG9ydC0+bXV0ZXgpKSB7CiAJCXJldHZhbCA9IC1FUkVTVEFSVFNZUzsKIAkJZ290byBiYWlsb3V0X2tyZWZfcHV0OwpAQCAtMTA2Nyw2ICsxMDcyLDggQEAKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0OwogCWludCBpLCByID0gMDsKIAorCXNlcmlhbC0+c3VzcGVuZGluZyA9IDE7CisKIAlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7ICsraSkgewogCQlwb3J0ID0gc2VyaWFsLT5wb3J0W2ldOwogCQlpZiAocG9ydCkKQEAgLTEwODMsMTAgKzEwOTAsMTUgQEAKIGludCB1c2Jfc2VyaWFsX3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKwlpbnQgcnY7CiAKKwlzZXJpYWwtPnN1c3BlbmRpbmcgPSAwOwogCWlmIChzZXJpYWwtPnR5cGUtPnJlc3VtZSkKLQkJcmV0dXJuIHNlcmlhbC0+dHlwZS0+cmVzdW1lKHNlcmlhbCk7Ci0JcmV0dXJuIDA7CisJCXJ2ID0gc2VyaWFsLT50eXBlLT5yZXN1bWUoc2VyaWFsKTsKKwllbHNlCisJCXJ2ID0gdXNiX3NlcmlhbF9nZW5lcmljX3Jlc3VtZShzZXJpYWwpOworCisJcmV0dXJuIHJ2OwogfQogRVhQT1JUX1NZTUJPTCh1c2Jfc2VyaWFsX3Jlc3VtZSk7CiAKQEAgLTEyMjIsNyArMTIzNCw2IEBACiAJc2V0X3RvX2dlbmVyaWNfaWZfbnVsbChkZXZpY2UsIHJlYWRfYnVsa19jYWxsYmFjayk7CiAJc2V0X3RvX2dlbmVyaWNfaWZfbnVsbChkZXZpY2UsIHdyaXRlX2J1bGtfY2FsbGJhY2spOwogCXNldF90b19nZW5lcmljX2lmX251bGwoZGV2aWNlLCBzaHV0ZG93bik7Ci0Jc2V0X3RvX2dlbmVyaWNfaWZfbnVsbChkZXZpY2UsIHJlc3VtZSk7CiB9CiAKIGludCB1c2Jfc2VyaWFsX3JlZ2lzdGVyKHN0cnVjdCB1c2Jfc2VyaWFsX2RyaXZlciAqZHJpdmVyKQpAQCAtMTIzMCw2ICsxMjQxLDkgQEAKIAkvKiBtdXN0IGJlIGNhbGxlZCB3aXRoIEJLTCBoZWxkICovCiAJaW50IHJldHZhbDsKIAorCWlmICh1c2JfZGlzYWJsZWQoKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAlmaXh1cF9nZW5lcmljKGRyaXZlcik7CiAKIAlpZiAoIWRyaXZlci0+ZGVzY3JpcHRpb24pCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWcgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWcKaW5kZXggOWRmNjg4Ny4uOGEzNzJiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZwpAQCAtMiw4ICsyLDggQEAKICMgVVNCIFN0b3JhZ2UgZHJpdmVyIGNvbmZpZ3VyYXRpb24KICMKIAotY29tbWVudCAiTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heSBhbHNvIGJlIG5lZWRlZDsiCi1jb21tZW50ICJzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbiIKK2NvbW1lbnQgIk5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkiCitjb21tZW50ICJhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mbyIKIAlkZXBlbmRzIG9uIFVTQgogCiBjb25maWcgVVNCX1NUT1JBR0UKQEAgLTMyLDIxICszMiwyNSBAQAogCSAgdmVyYm9zZSBkZWJ1Z2dpbmcgbWVzc2FnZXMuCiAKIGNvbmZpZyBVU0JfU1RPUkFHRV9EQVRBRkFCCi0JYm9vbCAiRGF0YWZhYiBDb21wYWN0IEZsYXNoIFJlYWRlciBzdXBwb3J0IgorCXRyaXN0YXRlICJEYXRhZmFiIENvbXBhY3QgRmxhc2ggUmVhZGVyIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBVU0JfU1RPUkFHRQogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIGNlcnRhaW4gRGF0YWZhYiBDb21wYWN0Rmxhc2ggcmVhZGVycy4KIAkgIERhdGFmYWIgaGFzIGEgd2ViIHBhZ2UgYXQgPGh0dHA6Ly93d3cuZGF0YWZhYnVzYS5jb20vPi4KIAorCSAgSWYgdGhpcyBkcml2ZXIgaXMgY29tcGlsZWQgYXMgYSBtb2R1bGUsIGl0IHdpbGwgYmUgbmFtZWQgdW1zLWRhdGFmYWIuCisKIGNvbmZpZyBVU0JfU1RPUkFHRV9GUkVFQ09NCi0JYm9vbCAiRnJlZWNvbSBVU0IvQVRBUEkgQnJpZGdlIHN1cHBvcnQiCisJdHJpc3RhdGUgIkZyZWVjb20gVVNCL0FUQVBJIEJyaWRnZSBzdXBwb3J0IgogCWRlcGVuZHMgb24gVVNCX1NUT1JBR0UKIAloZWxwCiAJICBTdXBwb3J0IGZvciB0aGUgRnJlZWNvbSBVU0IgdG8gSURFL0FUQVBJIGFkYXB0b3IuCiAJICBGcmVlY29tIGhhcyBhIHdlYiBwYWdlIGF0IDxodHRwOi8vd3d3LmZyZWVjb20uZGUvPi4KIAorCSAgSWYgdGhpcyBkcml2ZXIgaXMgY29tcGlsZWQgYXMgYSBtb2R1bGUsIGl0IHdpbGwgYmUgbmFtZWQgdW1zLWZyZWVjb20uCisKIGNvbmZpZyBVU0JfU1RPUkFHRV9JU0QyMDAKLQlib29sICJJU0QtMjAwIFVTQi9BVEEgQnJpZGdlIHN1cHBvcnQiCisJdHJpc3RhdGUgIklTRC0yMDAgVVNCL0FUQSBCcmlkZ2Ugc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFVTQl9TVE9SQUdFCiAJLS0taGVscC0tLQogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgVVNCIE1hc3MgU3RvcmUgZGV2aWNlcyBiYXNlZApAQCAtNjEsOCArNjUsMTAgQEAKIAkgIC0gQ3lRJ3ZlIENRODA2MEEgQ0RSVyBkcml2ZQogCSAgLSBQbGFuZXggZVh0cmVtZSBEcml2ZSBSWC0yNUhVIFVTQi1JREUgY2FibGUgKG5vdCBtb2RlbCBSWC0yNVUpCiAKKwkgIElmIHRoaXMgZHJpdmVyIGlzIGNvbXBpbGVkIGFzIGEgbW9kdWxlLCBpdCB3aWxsIGJlIG5hbWVkIHVtcy1pc2QyMDAuCisKIGNvbmZpZyBVU0JfU1RPUkFHRV9VU0JBVAotCWJvb2wgIlVTQkFUL1VTQkFUMDItYmFzZWQgc3RvcmFnZSBzdXBwb3J0IgorCXRyaXN0YXRlICJVU0JBVC9VU0JBVDAyLWJhc2VkIHN0b3JhZ2Ugc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFVTQl9TVE9SQUdFCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIGFkZGl0aW9uYWwgY29kZSB0byBzdXBwb3J0IHN0b3JhZ2UgZGV2aWNlcwpAQCAtODIsMzAgKzg4LDM4IEBACiAJICAtIFJDQSBMWVJBIE1QMyBwb3J0YWJsZQogCSAgLSBTYW5kaXNrIEltYWdlTWF0ZSBTRERSLTA1YgogCisJICBJZiB0aGlzIGRyaXZlciBpcyBjb21waWxlZCBhcyBhIG1vZHVsZSwgaXQgd2lsbCBiZSBuYW1lZCB1bXMtdXNiYXQuCisKIGNvbmZpZyBVU0JfU1RPUkFHRV9TRERSMDkKLQlib29sICJTYW5EaXNrIFNERFItMDkgKGFuZCBvdGhlciBTbWFydE1lZGlhLCBpbmNsdWRpbmcgRFBDTSkgc3VwcG9ydCIKKwl0cmlzdGF0ZSAiU2FuRGlzayBTRERSLTA5IChhbmQgb3RoZXIgU21hcnRNZWRpYSwgaW5jbHVkaW5nIERQQ00pIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBVU0JfU1RPUkFHRQogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBhZGRpdGlvbmFsIGNvZGUgdG8gc3VwcG9ydCB0aGUgU2FuZGlzayBTRERSLTA5CiAJICBTbWFydE1lZGlhIHJlYWRlciBpbiB0aGUgVVNCIE1hc3MgU3RvcmFnZSBkcml2ZXIuCiAJICBBbHNvIHdvcmtzIGZvciB0aGUgTWljcm90ZWNoIFppbyEgQ29tcGFjdEZsYXNoL1NtYXJ0TWVkaWEgcmVhZGVyLgogCisJICBJZiB0aGlzIGRyaXZlciBpcyBjb21waWxlZCBhcyBhIG1vZHVsZSwgaXQgd2lsbCBiZSBuYW1lZCB1bXMtc2RkcjA5LgorCiBjb25maWcgVVNCX1NUT1JBR0VfU0REUjU1Ci0JYm9vbCAiU2FuRGlzayBTRERSLTU1IFNtYXJ0TWVkaWEgc3VwcG9ydCIKKwl0cmlzdGF0ZSAiU2FuRGlzayBTRERSLTU1IFNtYXJ0TWVkaWEgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFVTQl9TVE9SQUdFCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIGFkZGl0aW9uYWwgY29kZSB0byBzdXBwb3J0IHRoZSBTYW5kaXNrIFNERFItNTUKIAkgIFNtYXJ0TWVkaWEgcmVhZGVyIGluIHRoZSBVU0IgTWFzcyBTdG9yYWdlIGRyaXZlci4KIAorCSAgSWYgdGhpcyBkcml2ZXIgaXMgY29tcGlsZWQgYXMgYSBtb2R1bGUsIGl0IHdpbGwgYmUgbmFtZWQgdW1zLXNkZHI1NS4KKwogY29uZmlnIFVTQl9TVE9SQUdFX0pVTVBTSE9UCi0JYm9vbCAiTGV4YXIgSnVtcHNob3QgQ29tcGFjdCBGbGFzaCBSZWFkZXIiCisJdHJpc3RhdGUgIkxleGFyIEp1bXBzaG90IENvbXBhY3QgRmxhc2ggUmVhZGVyIgogCWRlcGVuZHMgb24gVVNCX1NUT1JBR0UKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgYWRkaXRpb25hbCBjb2RlIHRvIHN1cHBvcnQgdGhlIExleGFyIEp1bXBzaG90CiAJICBVU0IgQ29tcGFjdEZsYXNoIHJlYWRlci4KIAorCSAgSWYgdGhpcyBkcml2ZXIgaXMgY29tcGlsZWQgYXMgYSBtb2R1bGUsIGl0IHdpbGwgYmUgbmFtZWQgdW1zLWp1bXBzaG90LgorCiBjb25maWcgVVNCX1NUT1JBR0VfQUxBVURBCi0JYm9vbCAiT2x5bXB1cyBNQVVTQi0xMC9GdWppIERQQy1SMSBzdXBwb3J0IgorCXRyaXN0YXRlICJPbHltcHVzIE1BVVNCLTEwL0Z1amkgRFBDLVIxIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBVU0JfU1RPUkFHRQogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBhZGRpdGlvbmFsIGNvZGUgdG8gc3VwcG9ydCB0aGUgT2x5bXB1cyBNQVVTQi0xMApAQCAtMTE0LDggKzEyOCwxMCBAQAogCSAgVGhlc2UgZGV2aWNlcyBhcmUgYmFzZWQgb24gdGhlIEFsYXVkYSBjaGlwIGFuZCBzdXBwb3J0IGJvdGgKIAkgIFhEIGFuZCBTbWFydE1lZGlhIGNhcmRzLgogCisJICBJZiB0aGlzIGRyaXZlciBpcyBjb21waWxlZCBhcyBhIG1vZHVsZSwgaXQgd2lsbCBiZSBuYW1lZCB1bXMtYWxhdWRhLgorCiBjb25maWcgVVNCX1NUT1JBR0VfT05FVE9VQ0gKLQlib29sICJTdXBwb3J0IE9uZVRvdWNoIEJ1dHRvbiBvbiBNYXh0b3IgSGFyZCBEcml2ZXMiCisJdHJpc3RhdGUgIlN1cHBvcnQgT25lVG91Y2ggQnV0dG9uIG9uIE1heHRvciBIYXJkIERyaXZlcyIKIAlkZXBlbmRzIG9uIFVTQl9TVE9SQUdFCiAJZGVwZW5kcyBvbiBJTlBVVD15IHx8IElOUFVUPVVTQl9TVE9SQUdFCiAJaGVscApAQCAtMTI3LDggKzE0MywxMCBAQAogCSAgdGhpcyBpbnB1dCBpbiBhbnkga2V5YmluZGluZyBzb2Z0d2FyZS4gKGUuZy4gZ25vbWUncyBrZXlib2FyZCBzaG9ydC0KIAkgIGN1dHMpCiAKKwkgIElmIHRoaXMgZHJpdmVyIGlzIGNvbXBpbGVkIGFzIGEgbW9kdWxlLCBpdCB3aWxsIGJlIG5hbWVkIHVtcy1vbmV0b3VjaC4KKwogY29uZmlnIFVTQl9TVE9SQUdFX0tBUk1BCi0JYm9vbCAiU3VwcG9ydCBmb3IgUmlvIEthcm1hIG11c2ljIHBsYXllciIKKwl0cmlzdGF0ZSAiU3VwcG9ydCBmb3IgUmlvIEthcm1hIG11c2ljIHBsYXllciIKIAlkZXBlbmRzIG9uIFVTQl9TVE9SQUdFCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIGFkZGl0aW9uYWwgY29kZSB0byBzdXBwb3J0IHRoZSBSaW8gS2FybWEKQEAgLTEzOSw4ICsxNTcsMTAgQEAKIAkgIG9uIHRoZSByZXN1bHRpbmcgc2NzaSBkZXZpY2Ugbm9kZSByZXR1cm5zIHRoZSBLYXJtYSB0byBub3JtYWwKIAkgIG9wZXJhdGlvbi4KIAorCSAgSWYgdGhpcyBkcml2ZXIgaXMgY29tcGlsZWQgYXMgYSBtb2R1bGUsIGl0IHdpbGwgYmUgbmFtZWQgdW1zLWthcm1hLgorCiBjb25maWcgVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQgotCWJvb2wgIlNBVCBlbXVsYXRpb24gb24gQ3lwcmVzcyBVU0IvQVRBIEJyaWRnZSB3aXRoIEFUQUNCIgorCXRyaXN0YXRlICJTQVQgZW11bGF0aW9uIG9uIEN5cHJlc3MgVVNCL0FUQSBCcmlkZ2Ugd2l0aCBBVEFDQiIKIAlkZXBlbmRzIG9uIFVTQl9TVE9SQUdFCiAJLS0taGVscC0tLQogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgU0FUIChhdGEgcGFzcyB0aHJvdWdoKSBvbiBkZXZpY2VzIGJhc2VkCkBAIC0xNTAsNiArMTcwLDggQEAKIAkgIElmIHlvdSBzYXkgbm8gaGVyZSB5b3VyIGRldmljZSB3aWxsIHN0aWxsIHdvcmsgd2l0aCB0aGUgc3RhbmRhcmQgdXNiCiAJICBtYXNzIHN0b3JhZ2UgY2xhc3MuCiAKKwkgIElmIHRoaXMgZHJpdmVyIGlzIGNvbXBpbGVkIGFzIGEgbW9kdWxlLCBpdCB3aWxsIGJlIG5hbWVkIHVtcy1jeXByZXNzLgorCiBjb25maWcgVVNCX0xJQlVTVUFMCiAJYm9vbCAiVGhlIHNoYXJlZCB0YWJsZSBvZiBjb21tb24gKG9yIHVzdWFsKSBzdG9yYWdlIGRldmljZXMiCiAJZGVwZW5kcyBvbiBVU0IKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL01ha2VmaWxlCmluZGV4IGIzMjA2OTMuLjViZTU0YzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvTWFrZWZpbGUKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9NYWtlZmlsZQpAQCAtMTAsMjEgKzEwLDM2IEBACiBvYmotJChDT05GSUdfVVNCX1NUT1JBR0UpCSs9IHVzYi1zdG9yYWdlLm8KIAogdXNiLXN0b3JhZ2Utb2JqLSQoQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHKQkrPSBkZWJ1Zy5vCi11c2Itc3RvcmFnZS1vYmotJChDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQpCSs9IHNodXR0bGVfdXNiYXQubwotdXNiLXN0b3JhZ2Utb2JqLSQoQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSkJKz0gc2RkcjA5Lm8KLXVzYi1zdG9yYWdlLW9iai0kKENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUpCSs9IHNkZHI1NS5vCi11c2Itc3RvcmFnZS1vYmotJChDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSkJKz0gZnJlZWNvbS5vCi11c2Itc3RvcmFnZS1vYmotJChDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwKQkrPSBpc2QyMDAubwotdXNiLXN0b3JhZ2Utb2JqLSQoQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIpCSs9IGRhdGFmYWIubwotdXNiLXN0b3JhZ2Utb2JqLSQoQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UKQkrPSBqdW1wc2hvdC5vCi11c2Itc3RvcmFnZS1vYmotJChDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBKQkrPSBhbGF1ZGEubwotdXNiLXN0b3JhZ2Utb2JqLSQoQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIKQkrPSBvbmV0b3VjaC5vCi11c2Itc3RvcmFnZS1vYmotJChDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEpCSs9IGthcm1hLm8KLXVzYi1zdG9yYWdlLW9iai0kKENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCKSArPSBjeXByZXNzX2F0YWNiLm8KIAogdXNiLXN0b3JhZ2Utb2JqcyA6PQlzY3NpZ2x1ZS5vIHByb3RvY29sLm8gdHJhbnNwb3J0Lm8gdXNiLm8gXAogCQkJaW5pdGlhbGl6ZXJzLm8gc2llcnJhX21zLm8gb3B0aW9uX21zLm8gJCh1c2Itc3RvcmFnZS1vYmoteSkKIAotaWZuZXEgKCQoQ09ORklHX1VTQl9MSUJVU1VBTCksKQotCW9iai0kKENPTkZJR19VU0IpCSs9IGxpYnVzdWFsLm8KK2lmZXEgKCQoQ09ORklHX1VTQl9MSUJVU1VBTCksKQorCXVzYi1zdG9yYWdlLW9ianMJKz0gdXN1YWwtdGFibGVzLm8KK2Vsc2UKKwlvYmotJChDT05GSUdfVVNCKQkrPSBsaWJ1c3VhbC5vIHVzdWFsLXRhYmxlcy5vCiBlbmRpZgorCitvYmotJChDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBKQkrPSB1bXMtYWxhdWRhLm8KK29iai0kKENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCKSArPSB1bXMtY3lwcmVzcy5vCitvYmotJChDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQikJKz0gdW1zLWRhdGFmYWIubworb2JqLSQoQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00pCSs9IHVtcy1mcmVlY29tLm8KK29iai0kKENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDApCSs9IHVtcy1pc2QyMDAubworb2JqLSQoQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UKQkrPSB1bXMtanVtcHNob3Qubworb2JqLSQoQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BKQkJKz0gdW1zLWthcm1hLm8KK29iai0kKENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCkJKz0gdW1zLW9uZXRvdWNoLm8KK29iai0kKENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkpCSs9IHVtcy1zZGRyMDkubworb2JqLSQoQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSkJKz0gdW1zLXNkZHI1NS5vCitvYmotJChDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQpCQkrPSB1bXMtdXNiYXQubworCit1bXMtYWxhdWRhLW9ianMJCTo9IGFsYXVkYS5vCit1bXMtY3lwcmVzcy1vYmpzCTo9IGN5cHJlc3NfYXRhY2IubwordW1zLWRhdGFmYWItb2Jqcwk6PSBkYXRhZmFiLm8KK3Vtcy1mcmVlY29tLW9ianMJOj0gZnJlZWNvbS5vCit1bXMtaXNkMjAwLW9ianMJCTo9IGlzZDIwMC5vCit1bXMtanVtcHNob3Qtb2Jqcwk6PSBqdW1wc2hvdC5vCit1bXMta2FybWEtb2JqcwkJOj0ga2FybWEubwordW1zLW9uZXRvdWNoLW9ianMJOj0gb25ldG91Y2gubwordW1zLXNkZHIwOS1vYmpzCQk6PSBzZGRyMDkubwordW1zLXNkZHI1NS1vYmpzCQk6PSBzZGRyNTUubwordW1zLXVzYmF0LW9ianMJCTo9IHNodXR0bGVfdXNiYXQubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMKaW5kZXggOGQzNzExYS4uNjdlZGM2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jCkBAIC0zMSw2ICszMSw4IEBACiAgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwogCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKICNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9kZXZpY2UuaD4KQEAgLTM5LDcgKzQxLDc5IEBACiAjaW5jbHVkZSAidHJhbnNwb3J0LmgiCiAjaW5jbHVkZSAicHJvdG9jb2wuaCIKICNpbmNsdWRlICJkZWJ1Zy5oIgotI2luY2x1ZGUgImFsYXVkYS5oIgorCitNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgQWxhdWRhLWJhc2VkIGNhcmQgcmVhZGVycyIpOworTU9EVUxFX0FVVEhPUigiRGFuaWVsIERyYWtlIDxkc2RAZ2VudG9vLm9yZz4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworLyoKKyAqIFN0YXR1cyBieXRlcworICovCisjZGVmaW5lIEFMQVVEQV9TVEFUVVNfRVJST1IJCTB4MDEKKyNkZWZpbmUgQUxBVURBX1NUQVRVU19SRUFEWQkJMHg0MAorCisvKgorICogQ29udHJvbCBvcGNvZGVzIChmb3IgcmVxdWVzdCBmaWVsZCkKKyAqLworI2RlZmluZSBBTEFVREFfR0VUX1hEX01FRElBX1NUQVRVUwkweDA4CisjZGVmaW5lIEFMQVVEQV9HRVRfU01fTUVESUFfU1RBVFVTCTB4OTgKKyNkZWZpbmUgQUxBVURBX0FDS19YRF9NRURJQV9DSEFOR0UJMHgwYQorI2RlZmluZSBBTEFVREFfQUNLX1NNX01FRElBX0NIQU5HRQkweDlhCisjZGVmaW5lIEFMQVVEQV9HRVRfWERfTUVESUFfU0lHCQkweDg2CisjZGVmaW5lIEFMQVVEQV9HRVRfU01fTUVESUFfU0lHCQkweDk2CisKKy8qCisgKiBCdWxrIGNvbW1hbmQgaWRlbnRpdHkgKGJ5dGUgMCkKKyAqLworI2RlZmluZSBBTEFVREFfQlVMS19DTUQJCQkweDQwCisKKy8qCisgKiBCdWxrIG9wY29kZXMgKGJ5dGUgMSkKKyAqLworI2RlZmluZSBBTEFVREFfQlVMS19HRVRfUkVEVV9EQVRBCTB4ODUKKyNkZWZpbmUgQUxBVURBX0JVTEtfUkVBRF9CTE9DSwkJMHg5NAorI2RlZmluZSBBTEFVREFfQlVMS19FUkFTRV9CTE9DSwkJMHhhMworI2RlZmluZSBBTEFVREFfQlVMS19XUklURV9CTE9DSwkJMHhiNAorI2RlZmluZSBBTEFVREFfQlVMS19HRVRfU1RBVFVTMgkJMHhiNworI2RlZmluZSBBTEFVREFfQlVMS19SRVNFVF9NRURJQQkJMHhlMAorCisvKgorICogUG9ydCB0byBvcGVyYXRlIG9uIChieXRlIDgpCisgKi8KKyNkZWZpbmUgQUxBVURBX1BPUlRfWEQJCQkweDAwCisjZGVmaW5lIEFMQVVEQV9QT1JUX1NNCQkJMHgwMQorCisvKgorICogTEJBIGFuZCBQQkEgYXJlIHVuc2lnbmVkIGludHMuIFNwZWNpYWwgdmFsdWVzLgorICovCisjZGVmaW5lIFVOREVGICAgIDB4ZmZmZgorI2RlZmluZSBTUEFSRSAgICAweGZmZmUKKyNkZWZpbmUgVU5VU0FCTEUgMHhmZmZkCisKK3N0cnVjdCBhbGF1ZGFfbWVkaWFfaW5mbyB7CisJdW5zaWduZWQgbG9uZyBjYXBhY2l0eTsJCS8qIHRvdGFsIG1lZGlhIHNpemUgaW4gYnl0ZXMgKi8KKwl1bnNpZ25lZCBpbnQgcGFnZXNpemU7CQkvKiBwYWdlIHNpemUgaW4gYnl0ZXMgKi8KKwl1bnNpZ25lZCBpbnQgYmxvY2tzaXplOwkJLyogbnVtYmVyIG9mIHBhZ2VzIHBlciBibG9jayAqLworCXVuc2lnbmVkIGludCB1em9uZXNpemU7CQkvKiBudW1iZXIgb2YgdXNhYmxlIGJsb2NrcyBwZXIgem9uZSAqLworCXVuc2lnbmVkIGludCB6b25lc2l6ZTsJCS8qIG51bWJlciBvZiBibG9ja3MgcGVyIHpvbmUgKi8KKwl1bnNpZ25lZCBpbnQgYmxvY2ttYXNrOwkJLyogbWFzayB0byBnZXQgcGFnZSBmcm9tIGFkZHJlc3MgKi8KKworCXVuc2lnbmVkIGNoYXIgcGFnZXNoaWZ0OworCXVuc2lnbmVkIGNoYXIgYmxvY2tzaGlmdDsKKwl1bnNpZ25lZCBjaGFyIHpvbmVzaGlmdDsKKworCXUxNiAqKmxiYV90b19wYmE7CQkvKiBsb2dpY2FsIHRvIHBoeXNpY2FsIGJsb2NrIG1hcCAqLworCXUxNiAqKnBiYV90b19sYmE7CQkvKiBwaHlzaWNhbCB0byBsb2dpY2FsIGJsb2NrIG1hcCAqLworfTsKKworc3RydWN0IGFsYXVkYV9pbmZvIHsKKwlzdHJ1Y3QgYWxhdWRhX21lZGlhX2luZm8gcG9ydFsyXTsKKwlpbnQgd3JfZXA7CQkJLyogZW5kcG9pbnQgdG8gd3JpdGUgZGF0YSBvdXQgb2YgKi8KKworCXVuc2lnbmVkIGNoYXIgc2Vuc2Vfa2V5OworCXVuc2lnbmVkIGxvbmcgc2Vuc2VfYXNjOwkvKiBhZGRpdGlvbmFsIHNlbnNlIGNvZGUgKi8KKwl1bnNpZ25lZCBsb25nIHNlbnNlX2FzY3E7CS8qIGFkZGl0aW9uYWwgc2Vuc2UgY29kZSBxdWFsaWZpZXIgKi8KK307CiAKICNkZWZpbmUgc2hvcnRfcGFjayhsc2IsbXNiKSAoICgodTE2KShsc2IpKSB8ICggKCh1MTYpKG1zYikpPDw4ICkgKQogI2RlZmluZSBMU0Jfb2YocykgKChzKSYweEZGKQpAQCAtNTIsNiArMTI2LDQ4IEBACiAjZGVmaW5lIFBCQV9ISShwYmEpIChwYmEgPj4gMykKICNkZWZpbmUgUEJBX1pPTkUocGJhKSAocGJhID4+IDExKQogCitzdGF0aWMgaW50IGluaXRfYWxhdWRhKHN0cnVjdCB1c19kYXRhICp1cyk7CisKKworLyoKKyAqIFRoZSB0YWJsZSBvZiBkZXZpY2VzCisgKi8KKyNkZWZpbmUgVU5VU1VBTF9ERVYoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCwgXAorCQkgICAgdmVuZG9yTmFtZSwgcHJvZHVjdE5hbWUsIHVzZVByb3RvY29sLCB1c2VUcmFuc3BvcnQsIFwKKwkJICAgIGluaXRGdW5jdGlvbiwgZmxhZ3MpIFwKK3sgVVNCX0RFVklDRV9WRVIoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCksIFwKKyAgLmRyaXZlcl9pbmZvID0gKGZsYWdzKXwoVVNCX1VTX1RZUEVfU1RPUjw8MjQpIH0KKworc3RydWN0IHVzYl9kZXZpY2VfaWQgYWxhdWRhX3VzYl9pZHNbXSA9IHsKKyMJaW5jbHVkZSAidW51c3VhbF9hbGF1ZGEuaCIKKwl7IH0JCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGFsYXVkYV91c2JfaWRzKTsKKworI3VuZGVmIFVOVVNVQUxfREVWCisKKy8qCisgKiBUaGUgZmxhZ3MgdGFibGUKKyAqLworI2RlZmluZSBVTlVTVUFMX0RFVihpZFZlbmRvciwgaWRQcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCwgXAorCQkgICAgdmVuZG9yX25hbWUsIHByb2R1Y3RfbmFtZSwgdXNlX3Byb3RvY29sLCB1c2VfdHJhbnNwb3J0LCBcCisJCSAgICBpbml0X2Z1bmN0aW9uLCBGbGFncykgXAoreyBcCisJLnZlbmRvck5hbWUgPSB2ZW5kb3JfbmFtZSwJXAorCS5wcm9kdWN0TmFtZSA9IHByb2R1Y3RfbmFtZSwJXAorCS51c2VQcm90b2NvbCA9IHVzZV9wcm90b2NvbCwJXAorCS51c2VUcmFuc3BvcnQgPSB1c2VfdHJhbnNwb3J0LAlcCisJLmluaXRGdW5jdGlvbiA9IGluaXRfZnVuY3Rpb24sCVwKK30KKworc3RhdGljIHN0cnVjdCB1c191bnVzdWFsX2RldiBhbGF1ZGFfdW51c3VhbF9kZXZfbGlzdFtdID0geworIwlpbmNsdWRlICJ1bnVzdWFsX2FsYXVkYS5oIgorCXsgfQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKKyN1bmRlZiBVTlVTVUFMX0RFVgorCisKIC8qCiAgKiBNZWRpYSBoYW5kbGluZwogICovCkBAIC0zMDcsNyArNDIzLDggQEAKIAkJZGF0YVswXSwgZGF0YVsxXSwgZGF0YVsyXSwgZGF0YVszXSk7CiAJbWVkaWFfaW5mbyA9IGFsYXVkYV9jYXJkX2ZpbmRfaWQoZGF0YVsxXSk7CiAJaWYgKG1lZGlhX2luZm8gPT0gTlVMTCkgewotCQlwcmludGsoImFsYXVkYV9pbml0X21lZGlhOiBVbnJlY29nbmlzZWQgbWVkaWEgc2lnbmF0dXJlOiAiCisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSJhbGF1ZGFfaW5pdF9tZWRpYTogVW5yZWNvZ25pc2VkIG1lZGlhIHNpZ25hdHVyZTogIgogCQkJIiUwMlggJTAyWCAlMDJYICUwMlhcbiIsCiAJCQlkYXRhWzBdLCBkYXRhWzFdLCBkYXRhWzJdLCBkYXRhWzNdKTsKIAkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKQEAgLTUxOCw3ICs2MzUsOCBAQAogCiAJCS8qIGNoZWNrIGV2ZW4gcGFyaXR5ICovCiAJCWlmIChwYXJpdHlbZGF0YVs2XSBeIGRhdGFbN11dKSB7Ci0JCQlwcmludGsoImFsYXVkYV9yZWFkX21hcDogQmFkIHBhcml0eSBpbiBMQkEgZm9yIGJsb2NrICVkIgorCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJICAgICAgICJhbGF1ZGFfcmVhZF9tYXA6IEJhZCBwYXJpdHkgaW4gTEJBIGZvciBibG9jayAlZCIKIAkJCSAgICAgICAiICglMDJYICUwMlgpXG4iLCBpLCBkYXRhWzZdLCBkYXRhWzddKTsKIAkJCXBiYV90b19sYmFbaV0gPSBVTlVTQUJMRTsKIAkJCWNvbnRpbnVlOwpAQCAtNTM4LDEzICs2NTYsMTYgQEAKIAkJICovCiAKIAkJaWYgKGxiYV9vZmZzZXQgPj0gdXpvbmVzaXplKSB7Ci0JCQlwcmludGsoImFsYXVkYV9yZWFkX21hcDogQmFkIGxvdyBMQkEgJWQgZm9yIGJsb2NrICVkXG4iLAorCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJICAgICAgICJhbGF1ZGFfcmVhZF9tYXA6IEJhZCBsb3cgTEJBICVkIGZvciBibG9jayAlZFxuIiwKIAkJCSAgICAgICBsYmFfcmVhbCwgYmxvY2tudW0pOwogCQkJY29udGludWU7CiAJCX0KIAogCQlpZiAobGJhX3RvX3BiYVtsYmFfb2Zmc2V0XSAhPSBVTkRFRikgewotCQkJcHJpbnRrKCJhbGF1ZGFfcmVhZF9tYXA6IExCQSAlZCBzZWVuIGZvciBQQkEgJWQgYW5kICVkXG4iLAorCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJICAgICAgICJhbGF1ZGFfcmVhZF9tYXA6ICIKKwkJCSAgICAgICAiTEJBICVkIHNlZW4gZm9yIFBCQSAlZCBhbmQgJWRcbiIsCiAJCQkgICAgICAgbGJhX3JlYWwsIGxiYV90b19wYmFbbGJhX29mZnNldF0sIGJsb2NrbnVtKTsKIAkJCWNvbnRpbnVlOwogCQl9CkBAIC03MTIsMTMgKzgzMywxNSBAQAogCWlmIChwYmEgPT0gMSkgewogCQkvKiBNYXliZSBpdCBpcyBpbXBvc3NpYmxlIHRvIHdyaXRlIHRvIFBCQSAxLgogCQkgICBGYWtlIHN1Y2Nlc3MsIGJ1dCBkb24ndCBkbyBhbnl0aGluZy4gKi8KLQkJcHJpbnRrKCJhbGF1ZGFfd3JpdGVfbGJhOiBhdm9pZCB3cml0aW5nIHRvIHBiYSAxXG4iKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgICAgImFsYXVkYV93cml0ZV9sYmE6IGF2b2lkIHdyaXRpbmcgdG8gcGJhIDFcbiIpOwogCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7CiAJfQogCiAJbmV3X3BiYSA9IGFsYXVkYV9maW5kX3VudXNlZF9wYmEoJk1FRElBX0lORk8odXMpLCB6b25lKTsKIAlpZiAoIW5ld19wYmEpIHsKLQkJcHJpbnRrKCJhbGF1ZGFfd3JpdGVfbGJhOiBPdXQgb2YgdW51c2VkIGJsb2Nrc1xuIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJICAgICAgICJhbGF1ZGFfd3JpdGVfbGJhOiBPdXQgb2YgdW51c2VkIGJsb2Nrc1xuIik7CiAJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CiAJfQogCkBAIC04MTgsNyArOTQxLDcgQEAKIAlsZW4gPSBtaW4oc2VjdG9ycywgYmxvY2tzaXplKSAqIChwYWdlc2l6ZSArIDY0KTsKIAlidWZmZXIgPSBrbWFsbG9jKGxlbiwgR0ZQX05PSU8pOwogCWlmIChidWZmZXIgPT0gTlVMTCkgewotCQlwcmludGsoImFsYXVkYV9yZWFkX2RhdGE6IE91dCBvZiBtZW1vcnlcbiIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJhbGF1ZGFfcmVhZF9kYXRhOiBPdXQgb2YgbWVtb3J5XG4iKTsKIAkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKIAl9CiAKQEAgLTkxMSw3ICsxMDM0LDcgQEAKIAlsZW4gPSBtaW4oc2VjdG9ycywgYmxvY2tzaXplKSAqIHBhZ2VzaXplOwogCWJ1ZmZlciA9IGttYWxsb2MobGVuLCBHRlBfTk9JTyk7CiAJaWYgKGJ1ZmZlciA9PSBOVUxMKSB7Ci0JCXByaW50aygiYWxhdWRhX3dyaXRlX2RhdGE6IE91dCBvZiBtZW1vcnlcbiIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJhbGF1ZGFfd3JpdGVfZGF0YTogT3V0IG9mIG1lbW9yeVxuIik7CiAJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CiAJfQogCkBAIC05MjEsNyArMTA0NCw3IEBACiAJICovCiAJYmxvY2tidWZmZXIgPSBrbWFsbG9jKChwYWdlc2l6ZSArIDY0KSAqIGJsb2Nrc2l6ZSwgR0ZQX05PSU8pOwogCWlmIChibG9ja2J1ZmZlciA9PSBOVUxMKSB7Ci0JCXByaW50aygiYWxhdWRhX3dyaXRlX2RhdGE6IE91dCBvZiBtZW1vcnlcbiIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJhbGF1ZGFfd3JpdGVfZGF0YTogT3V0IG9mIG1lbW9yeVxuIik7CiAJCWtmcmVlKGJ1ZmZlcik7CiAJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CiAJfQpAQCAtOTkxLDcgKzExMTQsNyBAQAogLyoKICAqIEluaXRpYWxpemUgYWxhdWRhX2luZm8gc3RydWN0IGFuZCBmaW5kIHRoZSBkYXRhLXdyaXRlIGVuZHBvaW50CiAgKi8KLWludCBpbml0X2FsYXVkYShzdHJ1Y3QgdXNfZGF0YSAqdXMpCitzdGF0aWMgaW50IGluaXRfYWxhdWRhKHN0cnVjdCB1c19kYXRhICp1cykKIHsKIAlzdHJ1Y3QgYWxhdWRhX2luZm8gKmluZm87CiAJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqYWx0c2V0dGluZyA9IHVzLT5wdXNiX2ludGYtPmN1cl9hbHRzZXR0aW5nOwpAQCAtMTAxMyw3ICsxMTM2LDcgQEAKIAlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7CiB9CiAKLWludCBhbGF1ZGFfdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKQorc3RhdGljIGludCBhbGF1ZGFfdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKQogewogCWludCByYzsKIAlzdHJ1Y3QgYWxhdWRhX2luZm8gKmluZm8gPSAoc3RydWN0IGFsYXVkYV9pbmZvICopIHVzLT5leHRyYTsKQEAgLTExMjEsMyArMTI0NCw0OCBAQAogCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEOwogfQogCitzdGF0aWMgaW50IGFsYXVkYV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCSBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzX2RhdGEgKnVzOworCWludCByZXN1bHQ7CisKKwlyZXN1bHQgPSB1c2Jfc3Rvcl9wcm9iZTEoJnVzLCBpbnRmLCBpZCwKKwkJCShpZCAtIGFsYXVkYV91c2JfaWRzKSArIGFsYXVkYV91bnVzdWFsX2Rldl9saXN0KTsKKwlpZiAocmVzdWx0KQorCQlyZXR1cm4gcmVzdWx0OworCisJdXMtPnRyYW5zcG9ydF9uYW1lICA9ICJBbGF1ZGEgQ29udHJvbC9CdWxrIjsKKwl1cy0+dHJhbnNwb3J0ID0gYWxhdWRhX3RyYW5zcG9ydDsKKwl1cy0+dHJhbnNwb3J0X3Jlc2V0ID0gdXNiX3N0b3JfQnVsa19yZXNldDsKKwl1cy0+bWF4X2x1biA9IDE7CisKKwlyZXN1bHQgPSB1c2Jfc3Rvcl9wcm9iZTIodXMpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBhbGF1ZGFfZHJpdmVyID0geworCS5uYW1lID0JCSJ1bXMtYWxhdWRhIiwKKwkucHJvYmUgPQlhbGF1ZGFfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQl1c2Jfc3Rvcl9kaXNjb25uZWN0LAorCS5zdXNwZW5kID0JdXNiX3N0b3Jfc3VzcGVuZCwKKwkucmVzdW1lID0JdXNiX3N0b3JfcmVzdW1lLAorCS5yZXNldF9yZXN1bWUgPQl1c2Jfc3Rvcl9yZXNldF9yZXN1bWUsCisJLnByZV9yZXNldCA9CXVzYl9zdG9yX3ByZV9yZXNldCwKKwkucG9zdF9yZXNldCA9CXVzYl9zdG9yX3Bvc3RfcmVzZXQsCisJLmlkX3RhYmxlID0JYWxhdWRhX3VzYl9pZHMsCisJLnNvZnRfdW5iaW5kID0JMSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGFsYXVkYV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHVzYl9yZWdpc3RlcigmYWxhdWRhX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhbGF1ZGFfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZhbGF1ZGFfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoYWxhdWRhX2luaXQpOworbW9kdWxlX2V4aXQoYWxhdWRhX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3MDBmODcuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi0vKgotICogRHJpdmVyIGZvciBBbGF1ZGEtYmFzZWQgY2FyZCByZWFkZXJzCi0gKgotICogQ3VycmVudCBkZXZlbG9wbWVudCBhbmQgbWFpbnRlbmFuY2UgYnk6Ci0gKiAgICAoYykgMjAwNSBEYW5pZWwgRHJha2UgPGRzZEBnZW50b28ub3JnPgotICoKLSAqIFNlZSBhbGF1ZGEuYyBmb3IgbW9yZSBleHBsYW5hdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55Ci0gKiBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9VU0JfQUxBVURBX0gKLSNkZWZpbmUgX1VTQl9BTEFVREFfSAotCi0vKgotICogU3RhdHVzIGJ5dGVzCi0gKi8KLSNkZWZpbmUgQUxBVURBX1NUQVRVU19FUlJPUgkJMHgwMQotI2RlZmluZSBBTEFVREFfU1RBVFVTX1JFQURZCQkweDQwCi0KLS8qCi0gKiBDb250cm9sIG9wY29kZXMgKGZvciByZXF1ZXN0IGZpZWxkKQotICovCi0jZGVmaW5lIEFMQVVEQV9HRVRfWERfTUVESUFfU1RBVFVTCTB4MDgKLSNkZWZpbmUgQUxBVURBX0dFVF9TTV9NRURJQV9TVEFUVVMJMHg5OAotI2RlZmluZSBBTEFVREFfQUNLX1hEX01FRElBX0NIQU5HRQkweDBhCi0jZGVmaW5lIEFMQVVEQV9BQ0tfU01fTUVESUFfQ0hBTkdFCTB4OWEKLSNkZWZpbmUgQUxBVURBX0dFVF9YRF9NRURJQV9TSUcJCTB4ODYKLSNkZWZpbmUgQUxBVURBX0dFVF9TTV9NRURJQV9TSUcJCTB4OTYKLQotLyoKLSAqIEJ1bGsgY29tbWFuZCBpZGVudGl0eSAoYnl0ZSAwKQotICovCi0jZGVmaW5lIEFMQVVEQV9CVUxLX0NNRAkJCTB4NDAKLQotLyoKLSAqIEJ1bGsgb3Bjb2RlcyAoYnl0ZSAxKQotICovCi0jZGVmaW5lIEFMQVVEQV9CVUxLX0dFVF9SRURVX0RBVEEJMHg4NQotI2RlZmluZSBBTEFVREFfQlVMS19SRUFEX0JMT0NLCQkweDk0Ci0jZGVmaW5lIEFMQVVEQV9CVUxLX0VSQVNFX0JMT0NLCQkweGEzCi0jZGVmaW5lIEFMQVVEQV9CVUxLX1dSSVRFX0JMT0NLCQkweGI0Ci0jZGVmaW5lIEFMQVVEQV9CVUxLX0dFVF9TVEFUVVMyCQkweGI3Ci0jZGVmaW5lIEFMQVVEQV9CVUxLX1JFU0VUX01FRElBCQkweGUwCi0KLS8qCi0gKiBQb3J0IHRvIG9wZXJhdGUgb24gKGJ5dGUgOCkKLSAqLwotI2RlZmluZSBBTEFVREFfUE9SVF9YRAkJCTB4MDAKLSNkZWZpbmUgQUxBVURBX1BPUlRfU00JCQkweDAxCi0KLS8qCi0gKiBMQkEgYW5kIFBCQSBhcmUgdW5zaWduZWQgaW50cy4gU3BlY2lhbCB2YWx1ZXMuCi0gKi8KLSNkZWZpbmUgVU5ERUYgICAgMHhmZmZmCi0jZGVmaW5lIFNQQVJFICAgIDB4ZmZmZQotI2RlZmluZSBVTlVTQUJMRSAweGZmZmQKLQotaW50IGluaXRfYWxhdWRhKHN0cnVjdCB1c19kYXRhICp1cyk7Ci1pbnQgYWxhdWRhX3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cyk7Ci0KLXN0cnVjdCBhbGF1ZGFfbWVkaWFfaW5mbyB7Ci0JdW5zaWduZWQgbG9uZyBjYXBhY2l0eTsJCS8qIHRvdGFsIG1lZGlhIHNpemUgaW4gYnl0ZXMgKi8KLQl1bnNpZ25lZCBpbnQgcGFnZXNpemU7CQkvKiBwYWdlIHNpemUgaW4gYnl0ZXMgKi8KLQl1bnNpZ25lZCBpbnQgYmxvY2tzaXplOwkJLyogbnVtYmVyIG9mIHBhZ2VzIHBlciBibG9jayAqLwotCXVuc2lnbmVkIGludCB1em9uZXNpemU7CQkvKiBudW1iZXIgb2YgdXNhYmxlIGJsb2NrcyBwZXIgem9uZSAqLwotCXVuc2lnbmVkIGludCB6b25lc2l6ZTsJCS8qIG51bWJlciBvZiBibG9ja3MgcGVyIHpvbmUgKi8KLQl1bnNpZ25lZCBpbnQgYmxvY2ttYXNrOwkJLyogbWFzayB0byBnZXQgcGFnZSBmcm9tIGFkZHJlc3MgKi8KLQotCXVuc2lnbmVkIGNoYXIgcGFnZXNoaWZ0OwotCXVuc2lnbmVkIGNoYXIgYmxvY2tzaGlmdDsKLQl1bnNpZ25lZCBjaGFyIHpvbmVzaGlmdDsKLQotCXUxNiAqKmxiYV90b19wYmE7CQkvKiBsb2dpY2FsIHRvIHBoeXNpY2FsIGJsb2NrIG1hcCAqLwotCXUxNiAqKnBiYV90b19sYmE7CQkvKiBwaHlzaWNhbCB0byBsb2dpY2FsIGJsb2NrIG1hcCAqLwotfTsKLQotc3RydWN0IGFsYXVkYV9pbmZvIHsKLQlzdHJ1Y3QgYWxhdWRhX21lZGlhX2luZm8gcG9ydFsyXTsKLQlpbnQgd3JfZXA7CQkJLyogZW5kcG9pbnQgdG8gd3JpdGUgZGF0YSBvdXQgb2YgKi8KLQotCXVuc2lnbmVkIGNoYXIgc2Vuc2Vfa2V5OwotCXVuc2lnbmVkIGxvbmcgc2Vuc2VfYXNjOwkvKiBhZGRpdGlvbmFsIHNlbnNlIGNvZGUgKi8KLQl1bnNpZ25lZCBsb25nIHNlbnNlX2FzY3E7CS8qIGFkZGl0aW9uYWwgc2Vuc2UgY29kZSBxdWFsaWZpZXIgKi8KLX07Ci0KLSNlbmRpZgotCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2N5cHJlc3NfYXRhY2IuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvY3lwcmVzc19hdGFjYi5jCmluZGV4IDg5OGU2N2QuLmM4NDQ3MTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvY3lwcmVzc19hdGFjYi5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvY3lwcmVzc19hdGFjYi5jCkBAIC0xOSw2ICsxOSw3IEBACiAgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwogCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2NtbmQuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfZWguaD4KQEAgLTI5LDYgKzMwLDQ5IEBACiAjaW5jbHVkZSAic2NzaWdsdWUuaCIKICNpbmNsdWRlICJkZWJ1Zy5oIgogCitNT0RVTEVfREVTQ1JJUFRJT04oIlNBVCBzdXBwb3J0IGZvciBDeXByZXNzIFVTQi9BVEEgYnJpZGdlcyB3aXRoIEFUQUNCIik7CitNT0RVTEVfQVVUSE9SKCJNYXR0aGlldSBDYXN0ZXQgPGNhc3RldC5tYXR0aGlldUBmcmVlLmZyPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisvKgorICogVGhlIHRhYmxlIG9mIGRldmljZXMKKyAqLworI2RlZmluZSBVTlVTVUFMX0RFVihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4LCBcCisJCSAgICB2ZW5kb3JOYW1lLCBwcm9kdWN0TmFtZSwgdXNlUHJvdG9jb2wsIHVzZVRyYW5zcG9ydCwgXAorCQkgICAgaW5pdEZ1bmN0aW9uLCBmbGFncykgXAoreyBVU0JfREVWSUNFX1ZFUihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4KSwgXAorICAuZHJpdmVyX2luZm8gPSAoZmxhZ3MpfChVU0JfVVNfVFlQRV9TVE9SPDwyNCkgfQorCitzdHJ1Y3QgdXNiX2RldmljZV9pZCBjeXByZXNzX3VzYl9pZHNbXSA9IHsKKyMJaW5jbHVkZSAidW51c3VhbF9jeXByZXNzLmgiCisJeyB9CQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBjeXByZXNzX3VzYl9pZHMpOworCisjdW5kZWYgVU5VU1VBTF9ERVYKKworLyoKKyAqIFRoZSBmbGFncyB0YWJsZQorICovCisjZGVmaW5lIFVOVVNVQUxfREVWKGlkVmVuZG9yLCBpZFByb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4LCBcCisJCSAgICB2ZW5kb3JfbmFtZSwgcHJvZHVjdF9uYW1lLCB1c2VfcHJvdG9jb2wsIHVzZV90cmFuc3BvcnQsIFwKKwkJICAgIGluaXRfZnVuY3Rpb24sIEZsYWdzKSBcCit7IFwKKwkudmVuZG9yTmFtZSA9IHZlbmRvcl9uYW1lLAlcCisJLnByb2R1Y3ROYW1lID0gcHJvZHVjdF9uYW1lLAlcCisJLnVzZVByb3RvY29sID0gdXNlX3Byb3RvY29sLAlcCisJLnVzZVRyYW5zcG9ydCA9IHVzZV90cmFuc3BvcnQsCVwKKwkuaW5pdEZ1bmN0aW9uID0gaW5pdF9mdW5jdGlvbiwJXAorfQorCitzdGF0aWMgc3RydWN0IHVzX3VudXN1YWxfZGV2IGN5cHJlc3NfdW51c3VhbF9kZXZfbGlzdFtdID0geworIwlpbmNsdWRlICJ1bnVzdWFsX2N5cHJlc3MuaCIKKwl7IH0JCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCisjdW5kZWYgVU5VU1VBTF9ERVYKKworCiAvKgogICogQVRBQ0IgaXMgYSBwcm90b2NvbCB1c2VkIG9uIGN5cHJlc3MgdXNiPC0+YXRhIGJyaWRnZSB0bwogICogc2VuZCByYXcgQVRBIGNvbW1hbmQgb3ZlciBtYXNzIHN0b3JhZ2UKQEAgLTM2LDcgKzgwLDcgQEAKICAqIE1vcmUgaW5mbyB0aGF0IGJlIGZvdW5kIG9uIGN5N2M2ODMxMF84LnBkZiBhbmQgY3k3YzY4MzAwY184LnBkZgogICogZGF0YXNoZWV0IGZyb20gY3lwcmVzcy5jb20uCiAgKi8KLXZvaWQgY3lwcmVzc19hdGFjYl9wYXNzdGhyb3VnaChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cykKK3N0YXRpYyB2b2lkIGN5cHJlc3NfYXRhY2JfcGFzc3Rocm91Z2goc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpCiB7CiAJdW5zaWduZWQgY2hhciBzYXZlX2NtbmRbTUFYX0NPTU1BTkRfU0laRV07CiAKQEAgLTEzMywxOSArMTc3LDE4IEBACiAKIAkJLyogYnVpbGQgdGhlIGNvbW1hbmQgZm9yCiAJCSAqIHJlYWRpbmcgdGhlIEFUQSByZWdpc3RlcnMgKi8KLQkJc2NzaV9laF9wcmVwX2NtbmQoc3JiLCAmc2VzLCBOVUxMLCAwLCAwKTsKLQkJc3JiLT5zZGIubGVuZ3RoID0gc2l6ZW9mKHJlZ3MpOwotCQlzZ19pbml0X29uZSgmc2VzLnNlbnNlX3NnbCwgcmVncywgc3JiLT5zZGIubGVuZ3RoKTsKLQkJc3JiLT5zZGIudGFibGUuc2dsID0gJnNlcy5zZW5zZV9zZ2w7Ci0JCXNyYi0+c2NfZGF0YV9kaXJlY3Rpb24gPSBETUFfRlJPTV9ERVZJQ0U7Ci0JCXNyYi0+c2RiLnRhYmxlLm5lbnRzID0gMTsKKwkJc2NzaV9laF9wcmVwX2NtbmQoc3JiLCAmc2VzLCBOVUxMLCAwLCBzaXplb2YocmVncykpOworCiAJCS8qIHdlIHVzZSB0aGUgc2FtZSBjb21tYW5kIGFzIGJlZm9yZSwgYnV0IHdlIHNldAogCQkgKiB0aGUgcmVhZCB0YXNrZmlsZSBiaXQsIGZvciBub3QgZXhlY3V0aW5nIGF0YWNiIGNvbW1hbmQsCiAJCSAqIGJ1dCByZWFkaW5nIHJlZ2lzdGVyIHNlbGVjdGVkIGluIHNyYi0+Y21uZFs0XQogCQkgKi8KKwkJc3JiLT5jbWRfbGVuID0gMTY7CisJCXNyYi0+Y21uZCA9IHNlcy5jbW5kOwogCQlzcmItPmNtbmRbMl0gPSAxOwogCiAJCXVzYl9zdG9yX3RyYW5zcGFyZW50X3Njc2lfY29tbWFuZChzcmIsIHVzKTsKKwkJbWVtY3B5KHJlZ3MsIHNyYi0+c2Vuc2VfYnVmZmVyLCBzaXplb2YocmVncykpOwogCQl0bXBfcmVzdWx0ID0gc3JiLT5yZXN1bHQ7CiAJCXNjc2lfZWhfcmVzdG9yZV9jbW5kKHNyYiwgJnNlcyk7CiAJCS8qIHdlIGZhaWwgdG8gZ2V0IHJlZ2lzdGVycywgcmVwb3J0IGludmFsaWQgY29tbWFuZCAqLwpAQCAtMTYyLDggKzIwNSw4IEBACiAKIAkJLyogWFhYIHdlIHNob3VsZCBnZW5lcmF0ZSBzaywgYXNjLCBhc2NxIGZyb20gc3RhdHVzIGFuZCBlcnJvcgogCQkgKiByZWdzCi0JCSAqIChzZWUgMTEuMSBFcnJvciB0cmFuc2xhdGlvbiCtIEFUQSBkZXZpY2UgZXJyb3IgdG8gU0NTSSBlcnJvciBtYXApCi0JCSAqIGFuZCBhdGFfdG9fc2Vuc2VfZXJyb3IgZnJvbSBsaWJhdGEuCisJCSAqIChzZWUgMTEuMSBFcnJvciB0cmFuc2xhdGlvbiBBVEEgZGV2aWNlIGVycm9yIHRvIFNDU0kgZXJyb3IKKwkJICogIG1hcCwgYW5kIGF0YV90b19zZW5zZV9lcnJvciBmcm9tIGxpYmF0YS4pCiAJCSAqLwogCiAJCS8qIFNlbnNlIGRhdGEgaXMgY3VycmVudCBhbmQgZm9ybWF0IGlzIGRlc2NyaXB0b3IuICovCkBAIC0xOTgsMyArMjQxLDQ4IEBACiAJaWYgKHNyYi0+Y21uZFswXSA9PSBBVEFfMTIpCiAJCXNyYi0+Y21kX2xlbiA9IDEyOwogfQorCisKK3N0YXRpYyBpbnQgY3lwcmVzc19wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCSBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzX2RhdGEgKnVzOworCWludCByZXN1bHQ7CisKKwlyZXN1bHQgPSB1c2Jfc3Rvcl9wcm9iZTEoJnVzLCBpbnRmLCBpZCwKKwkJCShpZCAtIGN5cHJlc3NfdXNiX2lkcykgKyBjeXByZXNzX3VudXN1YWxfZGV2X2xpc3QpOworCWlmIChyZXN1bHQpCisJCXJldHVybiByZXN1bHQ7CisKKwl1cy0+cHJvdG9jb2xfbmFtZSA9ICJUcmFuc3BhcmVudCBTQ1NJIHdpdGggQ3lwcmVzcyBBVEFDQiI7CisJdXMtPnByb3RvX2hhbmRsZXIgPSBjeXByZXNzX2F0YWNiX3Bhc3N0aHJvdWdoOworCisJcmVzdWx0ID0gdXNiX3N0b3JfcHJvYmUyKHVzKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgY3lwcmVzc19kcml2ZXIgPSB7CisJLm5hbWUgPQkJInVtcy1jeXByZXNzIiwKKwkucHJvYmUgPQljeXByZXNzX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JdXNiX3N0b3JfZGlzY29ubmVjdCwKKwkuc3VzcGVuZCA9CXVzYl9zdG9yX3N1c3BlbmQsCisJLnJlc3VtZSA9CXVzYl9zdG9yX3Jlc3VtZSwKKwkucmVzZXRfcmVzdW1lID0JdXNiX3N0b3JfcmVzZXRfcmVzdW1lLAorCS5wcmVfcmVzZXQgPQl1c2Jfc3Rvcl9wcmVfcmVzZXQsCisJLnBvc3RfcmVzZXQgPQl1c2Jfc3Rvcl9wb3N0X3Jlc2V0LAorCS5pZF90YWJsZSA9CWN5cHJlc3NfdXNiX2lkcywKKwkuc29mdF91bmJpbmQgPQkxLAorfTsKKworc3RhdGljIGludCBfX2luaXQgY3lwcmVzc19pbml0KHZvaWQpCit7CisJcmV0dXJuIHVzYl9yZWdpc3RlcigmY3lwcmVzc19kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgY3lwcmVzc19leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJmN5cHJlc3NfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoY3lwcmVzc19pbml0KTsKK21vZHVsZV9leGl0KGN5cHJlc3NfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2RhdGFmYWIuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZGF0YWZhYi5jCmluZGV4IDE3ZjFhZTIuLjJiNmU1NjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZGF0YWZhYi5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZGF0YWZhYi5jCkBAIC00OSw2ICs0OSw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogCiAjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CkBAIC01OCwxMiArNTksNjUgQEAKICNpbmNsdWRlICJ0cmFuc3BvcnQuaCIKICNpbmNsdWRlICJwcm90b2NvbC5oIgogI2luY2x1ZGUgImRlYnVnLmgiCi0jaW5jbHVkZSAiZGF0YWZhYi5oIgorCitNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgRGF0YWZhYiBVU0IgQ29tcGFjdCBGbGFzaCByZWFkZXIiKTsKK01PRFVMRV9BVVRIT1IoIkppbW1pZSBNYXlmaWVsZCA8bWF5ZmllbGQrZGF0YWZhYkBzYWNraGVhZHMub3JnPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitzdHJ1Y3QgZGF0YWZhYl9pbmZvIHsKKwl1bnNpZ25lZCBsb25nICAgc2VjdG9yczsJLyogdG90YWwgc2VjdG9yIGNvdW50ICovCisJdW5zaWduZWQgbG9uZyAgIHNzaXplOwkJLyogc2VjdG9yIHNpemUgaW4gYnl0ZXMgKi8KKwlzaWduZWQgY2hhcglsdW47CQkvKiB1c2VkIGZvciBkdWFsLXNsb3QgcmVhZGVycyAqLworCisJLyogdGhlIGZvbGxvd2luZyBhcmVuJ3QgdXNlZCB5ZXQgKi8KKwl1bnNpZ25lZCBjaGFyICAgc2Vuc2Vfa2V5OworCXVuc2lnbmVkIGxvbmcgICBzZW5zZV9hc2M7CS8qIGFkZGl0aW9uYWwgc2Vuc2UgY29kZSAqLworCXVuc2lnbmVkIGxvbmcgICBzZW5zZV9hc2NxOwkvKiBhZGRpdGlvbmFsIHNlbnNlIGNvZGUgcXVhbGlmaWVyICovCit9OwogCiBzdGF0aWMgaW50IGRhdGFmYWJfZGV0ZXJtaW5lX2x1bihzdHJ1Y3QgdXNfZGF0YSAqdXMsCiAJCQkJIHN0cnVjdCBkYXRhZmFiX2luZm8gKmluZm8pOwogCiAKKy8qCisgKiBUaGUgdGFibGUgb2YgZGV2aWNlcworICovCisjZGVmaW5lIFVOVVNVQUxfREVWKGlkX3ZlbmRvciwgaWRfcHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgsIFwKKwkJICAgIHZlbmRvck5hbWUsIHByb2R1Y3ROYW1lLCB1c2VQcm90b2NvbCwgdXNlVHJhbnNwb3J0LCBcCisJCSAgICBpbml0RnVuY3Rpb24sIGZsYWdzKSBcCit7IFVTQl9ERVZJQ0VfVkVSKGlkX3ZlbmRvciwgaWRfcHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgpLCBcCisgIC5kcml2ZXJfaW5mbyA9IChmbGFncyl8KFVTQl9VU19UWVBFX1NUT1I8PDI0KSB9CisKK3N0cnVjdCB1c2JfZGV2aWNlX2lkIGRhdGFmYWJfdXNiX2lkc1tdID0geworIwlpbmNsdWRlICJ1bnVzdWFsX2RhdGFmYWIuaCIKKwl7IH0JCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGRhdGFmYWJfdXNiX2lkcyk7CisKKyN1bmRlZiBVTlVTVUFMX0RFVgorCisvKgorICogVGhlIGZsYWdzIHRhYmxlCisgKi8KKyNkZWZpbmUgVU5VU1VBTF9ERVYoaWRWZW5kb3IsIGlkUHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgsIFwKKwkJICAgIHZlbmRvcl9uYW1lLCBwcm9kdWN0X25hbWUsIHVzZV9wcm90b2NvbCwgdXNlX3RyYW5zcG9ydCwgXAorCQkgICAgaW5pdF9mdW5jdGlvbiwgRmxhZ3MpIFwKK3sgXAorCS52ZW5kb3JOYW1lID0gdmVuZG9yX25hbWUsCVwKKwkucHJvZHVjdE5hbWUgPSBwcm9kdWN0X25hbWUsCVwKKwkudXNlUHJvdG9jb2wgPSB1c2VfcHJvdG9jb2wsCVwKKwkudXNlVHJhbnNwb3J0ID0gdXNlX3RyYW5zcG9ydCwJXAorCS5pbml0RnVuY3Rpb24gPSBpbml0X2Z1bmN0aW9uLAlcCit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNfdW51c3VhbF9kZXYgZGF0YWZhYl91bnVzdWFsX2Rldl9saXN0W10gPSB7CisjCWluY2x1ZGUgInVudXN1YWxfZGF0YWZhYi5oIgorCXsgfQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKKyN1bmRlZiBVTlVTVUFMX0RFVgorCisKIHN0YXRpYyBpbmxpbmUgaW50CiBkYXRhZmFiX2J1bGtfcmVhZChzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGNoYXIgKmRhdGEsIHVuc2lnbmVkIGludCBsZW4pIHsKIAlpZiAobGVuID09IDApCkBAIC01MDAsNyArNTU0LDcgQEAKIAogLy8gVHJhbnNwb3J0IGZvciB0aGUgRGF0YWZhYiBNRENGRS1CCiAvLwotaW50IGRhdGFmYWJfdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKiBzcmIsIHN0cnVjdCB1c19kYXRhICp1cykKK3N0YXRpYyBpbnQgZGF0YWZhYl90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpCiB7CiAJc3RydWN0IGRhdGFmYWJfaW5mbyAqaW5mbzsKIAlpbnQgcmM7CkBAIC02NjUsMyArNzE5LDQ5IEBACiAJaW5mby0+c2Vuc2VfYXNjcSA9IDB4MDA7CiAJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQ7CiB9CisKK3N0YXRpYyBpbnQgZGF0YWZhYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCSBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzX2RhdGEgKnVzOworCWludCByZXN1bHQ7CisKKwlyZXN1bHQgPSB1c2Jfc3Rvcl9wcm9iZTEoJnVzLCBpbnRmLCBpZCwKKwkJCShpZCAtIGRhdGFmYWJfdXNiX2lkcykgKyBkYXRhZmFiX3VudXN1YWxfZGV2X2xpc3QpOworCWlmIChyZXN1bHQpCisJCXJldHVybiByZXN1bHQ7CisKKwl1cy0+dHJhbnNwb3J0X25hbWUgID0gIkRhdGFmYWIgQnVsay1Pbmx5IjsKKwl1cy0+dHJhbnNwb3J0ID0gZGF0YWZhYl90cmFuc3BvcnQ7CisJdXMtPnRyYW5zcG9ydF9yZXNldCA9IHVzYl9zdG9yX0J1bGtfcmVzZXQ7CisJdXMtPm1heF9sdW4gPSAxOworCisJcmVzdWx0ID0gdXNiX3N0b3JfcHJvYmUyKHVzKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgZGF0YWZhYl9kcml2ZXIgPSB7CisJLm5hbWUgPQkJInVtcy1kYXRhZmFiIiwKKwkucHJvYmUgPQlkYXRhZmFiX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JdXNiX3N0b3JfZGlzY29ubmVjdCwKKwkuc3VzcGVuZCA9CXVzYl9zdG9yX3N1c3BlbmQsCisJLnJlc3VtZSA9CXVzYl9zdG9yX3Jlc3VtZSwKKwkucmVzZXRfcmVzdW1lID0JdXNiX3N0b3JfcmVzZXRfcmVzdW1lLAorCS5wcmVfcmVzZXQgPQl1c2Jfc3Rvcl9wcmVfcmVzZXQsCisJLnBvc3RfcmVzZXQgPQl1c2Jfc3Rvcl9wb3N0X3Jlc2V0LAorCS5pZF90YWJsZSA9CWRhdGFmYWJfdXNiX2lkcywKKwkuc29mdF91bmJpbmQgPQkxLAorfTsKKworc3RhdGljIGludCBfX2luaXQgZGF0YWZhYl9pbml0KHZvaWQpCit7CisJcmV0dXJuIHVzYl9yZWdpc3RlcigmZGF0YWZhYl9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZGF0YWZhYl9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJmRhdGFmYWJfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoZGF0YWZhYl9pbml0KTsKK21vZHVsZV9leGl0KGRhdGFmYWJfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2RhdGFmYWIuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZGF0YWZhYi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMmUzZjI3Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZGF0YWZhYi5oCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLyogRHJpdmVyIGZvciBEYXRhZmFiIE1EQ0ZFLUIgVVNCIENvbXBhY3QgRmxhc2ggcmVhZGVyCi0gKiBIZWFkZXIgRmlsZQotICoKLSAqIEN1cnJlbnQgZGV2ZWxvcG1lbnQgYW5kIG1haW50ZW5hbmNlIGJ5OgotICogICAoYykgMjAwMCBKaW1taWUgTWF5ZmllbGQgKG1heWZpZWxkK2RhdGFmYWJAc2Fja2hlYWRzLm9yZykKLSAqCi0gKiBTZWUgZGF0YWZhYi5jIGZvciBtb3JlIGV4cGxhbmF0aW9uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQotICogbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfVVNCX0RBVEFGQUJfTURDRkVfQl9ICi0jZGVmaW5lIF9VU0JfREFUQUZBQl9NRENGRV9CX0gKLQotZXh0ZXJuIGludCBkYXRhZmFiX3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cyk7Ci0KLXN0cnVjdCBkYXRhZmFiX2luZm8gewotCXVuc2lnbmVkIGxvbmcgICBzZWN0b3JzOwkvLyB0b3RhbCBzZWN0b3IgY291bnQKLQl1bnNpZ25lZCBsb25nICAgc3NpemU7CQkvLyBzZWN0b3Igc2l6ZSBpbiBieXRlcwotCXNpZ25lZCBjaGFyCWx1bjsJCS8vIHVzZWQgZm9yIGR1YWwtc2xvdCByZWFkZXJzCi0JCi0JLy8gdGhlIGZvbGxvd2luZyBhcmVuJ3QgdXNlZCB5ZXQKLQl1bnNpZ25lZCBjaGFyICAgc2Vuc2Vfa2V5OwotCXVuc2lnbmVkIGxvbmcgICBzZW5zZV9hc2M7CS8vIGFkZGl0aW9uYWwgc2Vuc2UgY29kZQotCXVuc2lnbmVkIGxvbmcgICBzZW5zZV9hc2NxOwkvLyBhZGRpdGlvbmFsIHNlbnNlIGNvZGUgcXVhbGlmaWVyCi19OwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZnJlZWNvbS5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9mcmVlY29tLmMKaW5kZXggNzNhYzcyNi4uNTRjYzk0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9mcmVlY29tLmMKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9mcmVlY29tLmMKQEAgLTI2LDYgKzI2LDcgQEAKICAqIChodHRwOi8vd3d3LmZyZWVjb20uZGUvKQogICovCiAKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgogCkBAIC0zMyw3ICszNCwxMCBAQAogI2luY2x1ZGUgInRyYW5zcG9ydC5oIgogI2luY2x1ZGUgInByb3RvY29sLmgiCiAjaW5jbHVkZSAiZGVidWcuaCIKLSNpbmNsdWRlICJmcmVlY29tLmgiCisKK01PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBGcmVlY29tIFVTQi9JREUgYWRhcHRvciIpOworTU9EVUxFX0FVVEhPUigiRGF2aWQgQnJvd24gPHVzYi1zdG9yYWdlQGRhdmlkYi5vcmc+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKICNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcKIHN0YXRpYyB2b2lkIHBkdW1wICh2b2lkICosIGludCk7CkBAIC0xMDMsNiArMTA3LDQ3IEBACiAjZGVmaW5lIEZDTV9QQUNLRVRfTEVOR1RICQk2NAogI2RlZmluZSBGQ01fU1RBVFVTX1BBQ0tFVF9MRU5HVEgJNAogCitzdGF0aWMgaW50IGluaXRfZnJlZWNvbShzdHJ1Y3QgdXNfZGF0YSAqdXMpOworCisKKy8qCisgKiBUaGUgdGFibGUgb2YgZGV2aWNlcworICovCisjZGVmaW5lIFVOVVNVQUxfREVWKGlkX3ZlbmRvciwgaWRfcHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgsIFwKKwkJICAgIHZlbmRvck5hbWUsIHByb2R1Y3ROYW1lLCB1c2VQcm90b2NvbCwgdXNlVHJhbnNwb3J0LCBcCisJCSAgICBpbml0RnVuY3Rpb24sIGZsYWdzKSBcCit7IFVTQl9ERVZJQ0VfVkVSKGlkX3ZlbmRvciwgaWRfcHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgpLCBcCisgIC5kcml2ZXJfaW5mbyA9IChmbGFncyl8KFVTQl9VU19UWVBFX1NUT1I8PDI0KSB9CisKK3N0cnVjdCB1c2JfZGV2aWNlX2lkIGZyZWVjb21fdXNiX2lkc1tdID0geworIwlpbmNsdWRlICJ1bnVzdWFsX2ZyZWVjb20uaCIKKwl7IH0JCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGZyZWVjb21fdXNiX2lkcyk7CisKKyN1bmRlZiBVTlVTVUFMX0RFVgorCisvKgorICogVGhlIGZsYWdzIHRhYmxlCisgKi8KKyNkZWZpbmUgVU5VU1VBTF9ERVYoaWRWZW5kb3IsIGlkUHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgsIFwKKwkJICAgIHZlbmRvcl9uYW1lLCBwcm9kdWN0X25hbWUsIHVzZV9wcm90b2NvbCwgdXNlX3RyYW5zcG9ydCwgXAorCQkgICAgaW5pdF9mdW5jdGlvbiwgRmxhZ3MpIFwKK3sgXAorCS52ZW5kb3JOYW1lID0gdmVuZG9yX25hbWUsCVwKKwkucHJvZHVjdE5hbWUgPSBwcm9kdWN0X25hbWUsCVwKKwkudXNlUHJvdG9jb2wgPSB1c2VfcHJvdG9jb2wsCVwKKwkudXNlVHJhbnNwb3J0ID0gdXNlX3RyYW5zcG9ydCwJXAorCS5pbml0RnVuY3Rpb24gPSBpbml0X2Z1bmN0aW9uLAlcCit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNfdW51c3VhbF9kZXYgZnJlZWNvbV91bnVzdWFsX2Rldl9saXN0W10gPSB7CisjCWluY2x1ZGUgInVudXN1YWxfZnJlZWNvbS5oIgorCXsgfQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKKyN1bmRlZiBVTlVTVUFMX0RFVgorCiBzdGF0aWMgaW50CiBmcmVlY29tX3JlYWRkYXRhIChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cywKIAkJdW5zaWduZWQgaW50IGlwaXBlLCB1bnNpZ25lZCBpbnQgb3BpcGUsIGludCBjb3VudCkKQEAgLTE3Myw3ICsyMTgsNyBAQAogICogVHJhbnNwb3J0IGZvciB0aGUgRnJlZWNvbSBVU0IvSURFIGFkYXB0b3IuCiAgKgogICovCi1pbnQgZnJlZWNvbV90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpCitzdGF0aWMgaW50IGZyZWVjb21fdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKQogewogCXN0cnVjdCBmcmVlY29tX2NiX3dyYXAgKmZjYjsKIAlzdHJ1Y3QgZnJlZWNvbV9zdGF0dXMgICpmc3Q7CkBAIC0zNzcsOCArNDIyLDcgQEAKIAlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7CiB9CiAKLWludAotZnJlZWNvbV9pbml0IChzdHJ1Y3QgdXNfZGF0YSAqdXMpCitzdGF0aWMgaW50IGluaXRfZnJlZWNvbShzdHJ1Y3QgdXNfZGF0YSAqdXMpCiB7CiAJaW50IHJlc3VsdDsKIAljaGFyICpidWZmZXIgPSB1cy0+aW9idWY7CkBAIC00MTcsNyArNDYxLDcgQEAKIAlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7CiB9CiAKLWludCB1c2Jfc3Rvcl9mcmVlY29tX3Jlc2V0KHN0cnVjdCB1c19kYXRhICp1cykKK3N0YXRpYyBpbnQgdXNiX3N0b3JfZnJlZWNvbV9yZXNldChzdHJ1Y3QgdXNfZGF0YSAqdXMpCiB7CiAJcHJpbnRrIChLRVJOX0NSSVQgImZyZWVjb20gcmVzZXQgY2FsbGVkXG4iKTsKIApAQCAtNDc5LDMgKzUyMyw0OCBAQAogfQogI2VuZGlmCiAKK3N0YXRpYyBpbnQgZnJlZWNvbV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCSBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzX2RhdGEgKnVzOworCWludCByZXN1bHQ7CisKKwlyZXN1bHQgPSB1c2Jfc3Rvcl9wcm9iZTEoJnVzLCBpbnRmLCBpZCwKKwkJCShpZCAtIGZyZWVjb21fdXNiX2lkcykgKyBmcmVlY29tX3VudXN1YWxfZGV2X2xpc3QpOworCWlmIChyZXN1bHQpCisJCXJldHVybiByZXN1bHQ7CisKKwl1cy0+dHJhbnNwb3J0X25hbWUgPSAiRnJlZWNvbSI7CisJdXMtPnRyYW5zcG9ydCA9IGZyZWVjb21fdHJhbnNwb3J0OworCXVzLT50cmFuc3BvcnRfcmVzZXQgPSB1c2Jfc3Rvcl9mcmVlY29tX3Jlc2V0OworCXVzLT5tYXhfbHVuID0gMDsKKworCXJlc3VsdCA9IHVzYl9zdG9yX3Byb2JlMih1cyk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGZyZWVjb21fZHJpdmVyID0geworCS5uYW1lID0JCSJ1bXMtZnJlZWNvbSIsCisJLnByb2JlID0JZnJlZWNvbV9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CXVzYl9zdG9yX2Rpc2Nvbm5lY3QsCisJLnN1c3BlbmQgPQl1c2Jfc3Rvcl9zdXNwZW5kLAorCS5yZXN1bWUgPQl1c2Jfc3Rvcl9yZXN1bWUsCisJLnJlc2V0X3Jlc3VtZSA9CXVzYl9zdG9yX3Jlc2V0X3Jlc3VtZSwKKwkucHJlX3Jlc2V0ID0JdXNiX3N0b3JfcHJlX3Jlc2V0LAorCS5wb3N0X3Jlc2V0ID0JdXNiX3N0b3JfcG9zdF9yZXNldCwKKwkuaWRfdGFibGUgPQlmcmVlY29tX3VzYl9pZHMsCisJLnNvZnRfdW5iaW5kID0JMSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGZyZWVjb21faW5pdCh2b2lkKQoreworCXJldHVybiB1c2JfcmVnaXN0ZXIoJmZyZWVjb21fZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGZyZWVjb21fZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZmcmVlY29tX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGZyZWVjb21faW5pdCk7Cittb2R1bGVfZXhpdChmcmVlY29tX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9mcmVlY29tLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2ZyZWVjb20uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjBkMGZlNi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2ZyZWVjb20uaAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qIERyaXZlciBmb3IgRnJlZWNvbSBVU0IvSURFIGFkYXB0b3IKLSAqCi0gKiBGcmVlY29tIHYwLjE6Ci0gKgotICogRmlyc3QgcmVsZWFzZQotICoKLSAqIEN1cnJlbnQgZGV2ZWxvcG1lbnQgYW5kIG1haW50ZW5hbmNlIGJ5OgotICogICAoYykgMjAwMCBEYXZpZCBCcm93biA8dXNiLXN0b3JhZ2VAZGF2aWRiLm9yZz4KLSAqCi0gKiBTZWUgZnJlZWNvbS5jIGZvciBtb3JlIGV4cGxhbmF0aW9uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQotICogbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfRlJFRUNPTV9VU0JfSAotI2RlZmluZSBfRlJFRUNPTV9VU0JfSAotCi1leHRlcm4gaW50IGZyZWVjb21fdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKTsKLWV4dGVybiBpbnQgdXNiX3N0b3JfZnJlZWNvbV9yZXNldChzdHJ1Y3QgdXNfZGF0YSAqdXMpOwotZXh0ZXJuIGludCBmcmVlY29tX2luaXQgKHN0cnVjdCB1c19kYXRhICp1cyk7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9pc2QyMDAuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvaXNkMjAwLmMKaW5kZXggMzgzYWJmMi4uODgyYzU3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9pc2QyMDAuYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2lzZDIwMC5jCkBAIC00NCw2ICs0NCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaGRyZWcuaD4KICNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgpAQCAtNTcsNyArNTgsNTMgQEAKICNpbmNsdWRlICJwcm90b2NvbC5oIgogI2luY2x1ZGUgImRlYnVnLmgiCiAjaW5jbHVkZSAic2NzaWdsdWUuaCIKLSNpbmNsdWRlICJpc2QyMDAuaCIKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIEluLVN5c3RlbSBEZXNpZ24sIEluYy4gSVNEMjAwIEFTSUMiKTsKK01PRFVMRV9BVVRIT1IoIkJq9nJuIFN0ZW5iZXJnIDxiam9ybkBoYXh4LnNlPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitzdGF0aWMgaW50IGlzZDIwMF9Jbml0aWFsaXphdGlvbihzdHJ1Y3QgdXNfZGF0YSAqdXMpOworCisKKy8qCisgKiBUaGUgdGFibGUgb2YgZGV2aWNlcworICovCisjZGVmaW5lIFVOVVNVQUxfREVWKGlkX3ZlbmRvciwgaWRfcHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgsIFwKKwkJICAgIHZlbmRvck5hbWUsIHByb2R1Y3ROYW1lLCB1c2VQcm90b2NvbCwgdXNlVHJhbnNwb3J0LCBcCisJCSAgICBpbml0RnVuY3Rpb24sIGZsYWdzKSBcCit7IFVTQl9ERVZJQ0VfVkVSKGlkX3ZlbmRvciwgaWRfcHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgpLCBcCisgIC5kcml2ZXJfaW5mbyA9IChmbGFncyl8KFVTQl9VU19UWVBFX1NUT1I8PDI0KSB9CisKK3N0cnVjdCB1c2JfZGV2aWNlX2lkIGlzZDIwMF91c2JfaWRzW10gPSB7CisjCWluY2x1ZGUgInVudXN1YWxfaXNkMjAwLmgiCisJeyB9CQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBpc2QyMDBfdXNiX2lkcyk7CisKKyN1bmRlZiBVTlVTVUFMX0RFVgorI3VuZGVmIFVTVUFMX0RFVgorCisvKgorICogVGhlIGZsYWdzIHRhYmxlCisgKi8KKyNkZWZpbmUgVU5VU1VBTF9ERVYoaWRWZW5kb3IsIGlkUHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgsIFwKKwkJICAgIHZlbmRvcl9uYW1lLCBwcm9kdWN0X25hbWUsIHVzZV9wcm90b2NvbCwgdXNlX3RyYW5zcG9ydCwgXAorCQkgICAgaW5pdF9mdW5jdGlvbiwgRmxhZ3MpIFwKK3sgXAorCS52ZW5kb3JOYW1lID0gdmVuZG9yX25hbWUsCVwKKwkucHJvZHVjdE5hbWUgPSBwcm9kdWN0X25hbWUsCVwKKwkudXNlUHJvdG9jb2wgPSB1c2VfcHJvdG9jb2wsCVwKKwkudXNlVHJhbnNwb3J0ID0gdXNlX3RyYW5zcG9ydCwJXAorCS5pbml0RnVuY3Rpb24gPSBpbml0X2Z1bmN0aW9uLAlcCit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNfdW51c3VhbF9kZXYgaXNkMjAwX3VudXN1YWxfZGV2X2xpc3RbXSA9IHsKKyMJaW5jbHVkZSAidW51c3VhbF9pc2QyMDAuaCIKKwl7IH0JCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCisjdW5kZWYgVU5VU1VBTF9ERVYKKyN1bmRlZiBVU1VBTF9ERVYKIAogCiAvKiBUaW1lb3V0IGRlZmluZXMgKGluIFNlY29uZHMpICovCkBAIC0xNTE4LDcgKzE1NjUsNyBAQAogICogSW5pdGlhbGl6YXRpb24gZm9yIHRoZSBJU0QyMDAgCiAgKi8KIAotaW50IGlzZDIwMF9Jbml0aWFsaXphdGlvbihzdHJ1Y3QgdXNfZGF0YSAqdXMpCitzdGF0aWMgaW50IGlzZDIwMF9Jbml0aWFsaXphdGlvbihzdHJ1Y3QgdXNfZGF0YSAqdXMpCiB7CiAJVVNfREVCVUdQKCJJU0QyMDAgSW5pdGlhbGl6YXRpb24uLi5cbiIpOwogCkBAIC0xNTQ5LDcgKzE1OTYsNyBAQAogICoKICAqLwogCi12b2lkIGlzZDIwMF9hdGFfY29tbWFuZChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cykKK3N0YXRpYyB2b2lkIGlzZDIwMF9hdGFfY29tbWFuZChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cykKIHsKIAlpbnQgc2VuZFRvVHJhbnNwb3J0ID0gMSwgb3JpZ19idWZmbGVuOwogCXVuaW9uIGF0YV9jZGIgYXRhQ2RiOwpAQCAtMTU3MCwzICsxNjE3LDQ3IEBACiAKIAlpc2QyMDBfc3JiX3NldF9idWZmbGVuKHNyYiwgb3JpZ19idWZmbGVuKTsKIH0KKworc3RhdGljIGludCBpc2QyMDBfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQkgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1c19kYXRhICp1czsKKwlpbnQgcmVzdWx0OworCisJcmVzdWx0ID0gdXNiX3N0b3JfcHJvYmUxKCZ1cywgaW50ZiwgaWQsCisJCQkoaWQgLSBpc2QyMDBfdXNiX2lkcykgKyBpc2QyMDBfdW51c3VhbF9kZXZfbGlzdCk7CisJaWYgKHJlc3VsdCkKKwkJcmV0dXJuIHJlc3VsdDsKKworCXVzLT5wcm90b2NvbF9uYW1lID0gIklTRDIwMCBBVEEvQVRBUEkiOworCXVzLT5wcm90b19oYW5kbGVyID0gaXNkMjAwX2F0YV9jb21tYW5kOworCisJcmVzdWx0ID0gdXNiX3N0b3JfcHJvYmUyKHVzKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgaXNkMjAwX2RyaXZlciA9IHsKKwkubmFtZSA9CQkidW1zLWlzZDIwMCIsCisJLnByb2JlID0JaXNkMjAwX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JdXNiX3N0b3JfZGlzY29ubmVjdCwKKwkuc3VzcGVuZCA9CXVzYl9zdG9yX3N1c3BlbmQsCisJLnJlc3VtZSA9CXVzYl9zdG9yX3Jlc3VtZSwKKwkucmVzZXRfcmVzdW1lID0JdXNiX3N0b3JfcmVzZXRfcmVzdW1lLAorCS5wcmVfcmVzZXQgPQl1c2Jfc3Rvcl9wcmVfcmVzZXQsCisJLnBvc3RfcmVzZXQgPQl1c2Jfc3Rvcl9wb3N0X3Jlc2V0LAorCS5pZF90YWJsZSA9CWlzZDIwMF91c2JfaWRzLAorCS5zb2Z0X3VuYmluZCA9CTEsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBpc2QyMDBfaW5pdCh2b2lkKQoreworCXJldHVybiB1c2JfcmVnaXN0ZXIoJmlzZDIwMF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgaXNkMjAwX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlcigmaXNkMjAwX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGlzZDIwMF9pbml0KTsKK21vZHVsZV9leGl0KGlzZDIwMF9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvaXNkMjAwLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2lzZDIwMC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYTM1ZjRmLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvaXNkMjAwLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0vKiBIZWFkZXIgRmlsZSBmb3IgSW4tU3lzdGVtIERlc2lnbiwgSW5jLiBJU0QyMDAgQVNJQwotICoKLSAqIEZpcnN0IHJlbGVhc2UKLSAqCi0gKiBDdXJyZW50IGRldmVsb3BtZW50IGFuZCBtYWludGVuYW5jZSBieToKLSAqICAgKGMpIDIwMDAgSW4tU3lzdGVtIERlc2lnbiwgSW5jLiAoc3VwcG9ydEBpbi1zeXN0ZW0uY29tKQotICoKLSAqIFNlZSBpc2QyMDAuYyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55Ci0gKiBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9VU0JfSVNEMjAwX0gKLSNkZWZpbmUgX1VTQl9JU0QyMDBfSAotCi1leHRlcm4gdm9pZCBpc2QyMDBfYXRhX2NvbW1hbmQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpOwotZXh0ZXJuIGludCBpc2QyMDBfSW5pdGlhbGl6YXRpb24oc3RydWN0IHVzX2RhdGEgKnVzKTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2p1bXBzaG90LmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2p1bXBzaG90LmMKaW5kZXggZGY2N2YxMy4uMWM2OTQyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9qdW1wc2hvdC5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvanVtcHNob3QuYwpAQCAtNDYsNiArNDYsNyBAQAogICAqLwogCiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKICNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KQEAgLTU1LDkgKzU2LDYxIEBACiAjaW5jbHVkZSAidHJhbnNwb3J0LmgiCiAjaW5jbHVkZSAicHJvdG9jb2wuaCIKICNpbmNsdWRlICJkZWJ1Zy5oIgotI2luY2x1ZGUgImp1bXBzaG90LmgiCiAKIAorTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIExleGFyIFwiSnVtcHNob3RcIiBDb21wYWN0IEZsYXNoIHJlYWRlciIpOworTU9EVUxFX0FVVEhPUigiSmltbWllIE1heWZpZWxkIDxtYXlmaWVsZCt1c2JAc2Fja2hlYWRzLm9yZz4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworLyoKKyAqIFRoZSB0YWJsZSBvZiBkZXZpY2VzCisgKi8KKyNkZWZpbmUgVU5VU1VBTF9ERVYoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCwgXAorCQkgICAgdmVuZG9yTmFtZSwgcHJvZHVjdE5hbWUsIHVzZVByb3RvY29sLCB1c2VUcmFuc3BvcnQsIFwKKwkJICAgIGluaXRGdW5jdGlvbiwgZmxhZ3MpIFwKK3sgVVNCX0RFVklDRV9WRVIoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCksIFwKKyAgLmRyaXZlcl9pbmZvID0gKGZsYWdzKXwoVVNCX1VTX1RZUEVfU1RPUjw8MjQpIH0KKworc3RydWN0IHVzYl9kZXZpY2VfaWQganVtcHNob3RfdXNiX2lkc1tdID0geworIwlpbmNsdWRlICJ1bnVzdWFsX2p1bXBzaG90LmgiCisJeyB9CQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBqdW1wc2hvdF91c2JfaWRzKTsKKworI3VuZGVmIFVOVVNVQUxfREVWCisKKy8qCisgKiBUaGUgZmxhZ3MgdGFibGUKKyAqLworI2RlZmluZSBVTlVTVUFMX0RFVihpZFZlbmRvciwgaWRQcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCwgXAorCQkgICAgdmVuZG9yX25hbWUsIHByb2R1Y3RfbmFtZSwgdXNlX3Byb3RvY29sLCB1c2VfdHJhbnNwb3J0LCBcCisJCSAgICBpbml0X2Z1bmN0aW9uLCBGbGFncykgXAoreyBcCisJLnZlbmRvck5hbWUgPSB2ZW5kb3JfbmFtZSwJXAorCS5wcm9kdWN0TmFtZSA9IHByb2R1Y3RfbmFtZSwJXAorCS51c2VQcm90b2NvbCA9IHVzZV9wcm90b2NvbCwJXAorCS51c2VUcmFuc3BvcnQgPSB1c2VfdHJhbnNwb3J0LAlcCisJLmluaXRGdW5jdGlvbiA9IGluaXRfZnVuY3Rpb24sCVwKK30KKworc3RhdGljIHN0cnVjdCB1c191bnVzdWFsX2RldiBqdW1wc2hvdF91bnVzdWFsX2Rldl9saXN0W10gPSB7CisjCWluY2x1ZGUgInVudXN1YWxfanVtcHNob3QuaCIKKwl7IH0JCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCisjdW5kZWYgVU5VU1VBTF9ERVYKKworCitzdHJ1Y3QganVtcHNob3RfaW5mbyB7CisgICB1bnNpZ25lZCBsb25nICAgc2VjdG9yczsgICAgIC8qIHRvdGFsIHNlY3RvciBjb3VudCAqLworICAgdW5zaWduZWQgbG9uZyAgIHNzaXplOyAgICAgICAvKiBzZWN0b3Igc2l6ZSBpbiBieXRlcyAqLworCisgICAvKiB0aGUgZm9sbG93aW5nIGFyZW4ndCB1c2VkIHlldCAqLworICAgdW5zaWduZWQgY2hhciAgIHNlbnNlX2tleTsKKyAgIHVuc2lnbmVkIGxvbmcgICBzZW5zZV9hc2M7ICAgLyogYWRkaXRpb25hbCBzZW5zZSBjb2RlICovCisgICB1bnNpZ25lZCBsb25nICAgc2Vuc2VfYXNjcTsgIC8qIGFkZGl0aW9uYWwgc2Vuc2UgY29kZSBxdWFsaWZpZXIgKi8KK307CisKIHN0YXRpYyBpbmxpbmUgaW50IGp1bXBzaG90X2J1bGtfcmVhZChzdHJ1Y3QgdXNfZGF0YSAqdXMsCiAJCQkJICAgICB1bnNpZ25lZCBjaGFyICpkYXRhLCAKIAkJCQkgICAgIHVuc2lnbmVkIGludCBsZW4pCkBAIC00MjksNyArNDgyLDcgQEAKIAogLy8gVHJhbnNwb3J0IGZvciB0aGUgTGV4YXIgJ0p1bXBzaG90JwogLy8KLWludCBqdW1wc2hvdF90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqIHNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKQorc3RhdGljIGludCBqdW1wc2hvdF90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpCiB7CiAJc3RydWN0IGp1bXBzaG90X2luZm8gKmluZm87CiAJaW50IHJjOwpAQCAtNTkyLDMgKzY0NSw0OSBAQAogCWluZm8tPnNlbnNlX2FzY3EgPSAweDAwOwogCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEOwogfQorCitzdGF0aWMgaW50IGp1bXBzaG90X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNfZGF0YSAqdXM7CisJaW50IHJlc3VsdDsKKworCXJlc3VsdCA9IHVzYl9zdG9yX3Byb2JlMSgmdXMsIGludGYsIGlkLAorCQkJKGlkIC0ganVtcHNob3RfdXNiX2lkcykgKyBqdW1wc2hvdF91bnVzdWFsX2Rldl9saXN0KTsKKwlpZiAocmVzdWx0KQorCQlyZXR1cm4gcmVzdWx0OworCisJdXMtPnRyYW5zcG9ydF9uYW1lICA9ICJMZXhhciBKdW1wc2hvdCBDb250cm9sL0J1bGsiOworCXVzLT50cmFuc3BvcnQgPSBqdW1wc2hvdF90cmFuc3BvcnQ7CisJdXMtPnRyYW5zcG9ydF9yZXNldCA9IHVzYl9zdG9yX0J1bGtfcmVzZXQ7CisJdXMtPm1heF9sdW4gPSAxOworCisJcmVzdWx0ID0gdXNiX3N0b3JfcHJvYmUyKHVzKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIganVtcHNob3RfZHJpdmVyID0geworCS5uYW1lID0JCSJ1bXMtanVtcHNob3QiLAorCS5wcm9iZSA9CWp1bXBzaG90X3Byb2JlLAorCS5kaXNjb25uZWN0ID0JdXNiX3N0b3JfZGlzY29ubmVjdCwKKwkuc3VzcGVuZCA9CXVzYl9zdG9yX3N1c3BlbmQsCisJLnJlc3VtZSA9CXVzYl9zdG9yX3Jlc3VtZSwKKwkucmVzZXRfcmVzdW1lID0JdXNiX3N0b3JfcmVzZXRfcmVzdW1lLAorCS5wcmVfcmVzZXQgPQl1c2Jfc3Rvcl9wcmVfcmVzZXQsCisJLnBvc3RfcmVzZXQgPQl1c2Jfc3Rvcl9wb3N0X3Jlc2V0LAorCS5pZF90YWJsZSA9CWp1bXBzaG90X3VzYl9pZHMsCisJLnNvZnRfdW5iaW5kID0JMSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGp1bXBzaG90X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gdXNiX3JlZ2lzdGVyKCZqdW1wc2hvdF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQganVtcHNob3RfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZqdW1wc2hvdF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChqdW1wc2hvdF9pbml0KTsKK21vZHVsZV9leGl0KGp1bXBzaG90X2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9qdW1wc2hvdC5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9qdW1wc2hvdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOWJhYzlkLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvanVtcHNob3QuaAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLS8qIERyaXZlciBmb3IgTGV4YXIgIkp1bXBzaG90IiBVU0IgQ29tcGFjdCBGbGFzaCByZWFkZXIKLSAqIEhlYWRlciBGaWxlCi0gKgotICogQ3VycmVudCBkZXZlbG9wbWVudCBhbmQgbWFpbnRlbmFuY2UgYnk6Ci0gKiAgIChjKSAyMDAwIEppbW1pZSBNYXlmaWVsZCAobWF5ZmllbGQrdXNiQHNhY2toZWFkcy5vcmcpCi0gKgotICogU2VlIGp1bXBzaG90LmMgZm9yIG1vcmUgZXhwbGFuYXRpb24KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55Ci0gKiBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9VU0JfSlVNUFNIT1RfSAotI2RlZmluZSBfVVNCX0pVTVBTSE9UX0gKLQotZXh0ZXJuIGludCBqdW1wc2hvdF90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpOwotCi1zdHJ1Y3QganVtcHNob3RfaW5mbyB7Ci0gICB1bnNpZ25lZCBsb25nICAgc2VjdG9yczsgICAgIC8vIHRvdGFsIHNlY3RvciBjb3VudAotICAgdW5zaWduZWQgbG9uZyAgIHNzaXplOyAgICAgICAvLyBzZWN0b3Igc2l6ZSBpbiBieXRlcwotIAotICAgLy8gdGhlIGZvbGxvd2luZyBhcmVuJ3QgdXNlZCB5ZXQKLSAgIHVuc2lnbmVkIGNoYXIgICBzZW5zZV9rZXk7Ci0gICB1bnNpZ25lZCBsb25nICAgc2Vuc2VfYXNjOyAgIC8vIGFkZGl0aW9uYWwgc2Vuc2UgY29kZQotICAgdW5zaWduZWQgbG9uZyAgIHNlbnNlX2FzY3E7ICAvLyBhZGRpdGlvbmFsIHNlbnNlIGNvZGUgcXVhbGlmaWVyCi19OwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2Uva2FybWEuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uva2FybWEuYwppbmRleCAwZDc5YWU1Li43OTUzZDkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2thcm1hLmMKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9rYXJtYS5jCkBAIC0xOCw2ICsxOCw4IEBACiAgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwogCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKICNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9kZXZpY2UuaD4KQEAgLTI1LDcgKzI3LDEwIEBACiAjaW5jbHVkZSAidXNiLmgiCiAjaW5jbHVkZSAidHJhbnNwb3J0LmgiCiAjaW5jbHVkZSAiZGVidWcuaCIKLSNpbmNsdWRlICJrYXJtYS5oIgorCitNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgUmlvIEthcm1hIik7CitNT0RVTEVfQVVUSE9SKCJCb2IgQ29wZWxhbmQgPG1lQGJvYmNvcGVsYW5kLmNvbT4sIEtlaXRoIEJlbm5ldHQgPGtlaXRoQG1jcy5zdC1hbmQuYWMudWs+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKICNkZWZpbmUgUklPX1BSRUZJWCAiUklPUFx4MDAiCiAjZGVmaW5lIFJJT19QUkVGSVhfTEVOIDUKQEAgLTM2LDEzICs0MSw1MyBAQAogI2RlZmluZSBSSU9fTEVBVkVfU1RPUkFHRSAweDIKICNkZWZpbmUgUklPX1JFU0VUIDB4QwogCi1leHRlcm4gaW50IHVzYl9zdG9yX0J1bGtfdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKiwgc3RydWN0IHVzX2RhdGEgKik7Ci0KIHN0cnVjdCBrYXJtYV9kYXRhIHsKIAlpbnQgaW5fc3RvcmFnZTsKIAljaGFyICpyZWN2OwogfTsKIAorc3RhdGljIGludCByaW9fa2FybWFfaW5pdChzdHJ1Y3QgdXNfZGF0YSAqdXMpOworCisKKy8qCisgKiBUaGUgdGFibGUgb2YgZGV2aWNlcworICovCisjZGVmaW5lIFVOVVNVQUxfREVWKGlkX3ZlbmRvciwgaWRfcHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgsIFwKKwkJICAgIHZlbmRvck5hbWUsIHByb2R1Y3ROYW1lLCB1c2VQcm90b2NvbCwgdXNlVHJhbnNwb3J0LCBcCisJCSAgICBpbml0RnVuY3Rpb24sIGZsYWdzKSBcCit7IFVTQl9ERVZJQ0VfVkVSKGlkX3ZlbmRvciwgaWRfcHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgpLCBcCisgIC5kcml2ZXJfaW5mbyA9IChmbGFncyl8KFVTQl9VU19UWVBFX1NUT1I8PDI0KSB9CisKK3N0cnVjdCB1c2JfZGV2aWNlX2lkIGthcm1hX3VzYl9pZHNbXSA9IHsKKyMJaW5jbHVkZSAidW51c3VhbF9rYXJtYS5oIgorCXsgfQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwga2FybWFfdXNiX2lkcyk7CisKKyN1bmRlZiBVTlVTVUFMX0RFVgorCisvKgorICogVGhlIGZsYWdzIHRhYmxlCisgKi8KKyNkZWZpbmUgVU5VU1VBTF9ERVYoaWRWZW5kb3IsIGlkUHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgsIFwKKwkJICAgIHZlbmRvcl9uYW1lLCBwcm9kdWN0X25hbWUsIHVzZV9wcm90b2NvbCwgdXNlX3RyYW5zcG9ydCwgXAorCQkgICAgaW5pdF9mdW5jdGlvbiwgRmxhZ3MpIFwKK3sgXAorCS52ZW5kb3JOYW1lID0gdmVuZG9yX25hbWUsCVwKKwkucHJvZHVjdE5hbWUgPSBwcm9kdWN0X25hbWUsCVwKKwkudXNlUHJvdG9jb2wgPSB1c2VfcHJvdG9jb2wsCVwKKwkudXNlVHJhbnNwb3J0ID0gdXNlX3RyYW5zcG9ydCwJXAorCS5pbml0RnVuY3Rpb24gPSBpbml0X2Z1bmN0aW9uLAlcCit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNfdW51c3VhbF9kZXYga2FybWFfdW51c3VhbF9kZXZfbGlzdFtdID0geworIwlpbmNsdWRlICJ1bnVzdWFsX2thcm1hLmgiCisJeyB9CQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworI3VuZGVmIFVOVVNVQUxfREVWCisKKwogLyoKICAqIFNlbmQgY29tbWFuZHMgdG8gUmlvIEthcm1hLgogICoKQEAgLTEwNCw3ICsxNDksNyBAQAogICogVHJhcCBTVEFSVF9TVE9QIGFuZCBSRUFEXzEwIHRvIGxlYXZlL3JlLWVudGVyIHN0b3JhZ2UgbW9kZS4KICAqIEV2ZXJ5dGhpbmcgZWxzZSBpcyBwcm9wYWdhdGVkIHRvIHRoZSBub3JtYWwgYnVsayBsYXllci4KICAqLwotaW50IHJpb19rYXJtYV90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpCitzdGF0aWMgaW50IHJpb19rYXJtYV90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpCiB7CiAJaW50IHJldDsKIAlzdHJ1Y3Qga2FybWFfZGF0YSAqZGF0YSA9IChzdHJ1Y3Qga2FybWFfZGF0YSAqKSB1cy0+ZXh0cmE7CkBAIC0xMzMsNyArMTc4LDcgQEAKIAlrZnJlZShkYXRhLT5yZWN2KTsKIH0KIAotaW50IHJpb19rYXJtYV9pbml0KHN0cnVjdCB1c19kYXRhICp1cykKK3N0YXRpYyBpbnQgcmlvX2thcm1hX2luaXQoc3RydWN0IHVzX2RhdGEgKnVzKQogewogCWludCByZXQgPSAwOwogCXN0cnVjdCBrYXJtYV9kYXRhICpkYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGthcm1hX2RhdGEpLCBHRlBfTk9JTyk7CkBAIC0xNTMsMyArMTk4LDQ4IEBACiBvdXQ6CiAJcmV0dXJuIHJldDsKIH0KKworc3RhdGljIGludCBrYXJtYV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCSBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzX2RhdGEgKnVzOworCWludCByZXN1bHQ7CisKKwlyZXN1bHQgPSB1c2Jfc3Rvcl9wcm9iZTEoJnVzLCBpbnRmLCBpZCwKKwkJCShpZCAtIGthcm1hX3VzYl9pZHMpICsga2FybWFfdW51c3VhbF9kZXZfbGlzdCk7CisJaWYgKHJlc3VsdCkKKwkJcmV0dXJuIHJlc3VsdDsKKworCXVzLT50cmFuc3BvcnRfbmFtZSA9ICJSaW8gS2FybWEvQnVsayI7CisJdXMtPnRyYW5zcG9ydCA9IHJpb19rYXJtYV90cmFuc3BvcnQ7CisJdXMtPnRyYW5zcG9ydF9yZXNldCA9IHVzYl9zdG9yX0J1bGtfcmVzZXQ7CisKKwlyZXN1bHQgPSB1c2Jfc3Rvcl9wcm9iZTIodXMpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBrYXJtYV9kcml2ZXIgPSB7CisJLm5hbWUgPQkJInVtcy1rYXJtYSIsCisJLnByb2JlID0Ja2FybWFfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQl1c2Jfc3Rvcl9kaXNjb25uZWN0LAorCS5zdXNwZW5kID0JdXNiX3N0b3Jfc3VzcGVuZCwKKwkucmVzdW1lID0JdXNiX3N0b3JfcmVzdW1lLAorCS5yZXNldF9yZXN1bWUgPQl1c2Jfc3Rvcl9yZXNldF9yZXN1bWUsCisJLnByZV9yZXNldCA9CXVzYl9zdG9yX3ByZV9yZXNldCwKKwkucG9zdF9yZXNldCA9CXVzYl9zdG9yX3Bvc3RfcmVzZXQsCisJLmlkX3RhYmxlID0Ja2FybWFfdXNiX2lkcywKKwkuc29mdF91bmJpbmQgPQkxLAorfTsKKworc3RhdGljIGludCBfX2luaXQga2FybWFfaW5pdCh2b2lkKQoreworCXJldHVybiB1c2JfcmVnaXN0ZXIoJmthcm1hX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBrYXJtYV9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJmthcm1hX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGthcm1hX2luaXQpOworbW9kdWxlX2V4aXQoa2FybWFfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2thcm1hLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2thcm1hLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhNjA5NzIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9rYXJtYS5oCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi0jaWZuZGVmIF9LQVJNQV9VU0JfSAotI2RlZmluZSBfS0FSTUFfVVNCX0gKLQotZXh0ZXJuIGludCByaW9fa2FybWFfaW5pdChzdHJ1Y3QgdXNfZGF0YSAqdXMpOwotZXh0ZXJuIGludCByaW9fa2FybWFfdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2xpYnVzdWFsLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2xpYnVzdWFsLmMKaW5kZXggZjk3MGIyNy4uZmUzZmZlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9saWJ1c3VhbC5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvbGlidXN1YWwuYwpAQCAtMzgsMzcgKzM4LDYgQEAKIHN0YXRpYyBpbnQgdXN1X3Byb2JlX3RocmVhZCh2b2lkICphcmcpOwogCiAvKgotICogVGhlIHRhYmxlLgotICovCi0jZGVmaW5lIFVOVVNVQUxfREVWKGlkX3ZlbmRvciwgaWRfcHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgsIFwKLQkJICAgIHZlbmRvck5hbWUsIHByb2R1Y3ROYW1lLHVzZVByb3RvY29sLCB1c2VUcmFuc3BvcnQsIFwKLQkJICAgIGluaXRGdW5jdGlvbiwgZmxhZ3MpIFwKLXsgVVNCX0RFVklDRV9WRVIoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sYmNkRGV2aWNlTWF4KSwgXAotICAuZHJpdmVyX2luZm8gPSAoZmxhZ3MpfChVU0JfVVNfVFlQRV9TVE9SPDwyNCkgfQotCi0jZGVmaW5lIENPTVBMSUFOVF9ERVYoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCwgXAotCQkgICAgdmVuZG9yTmFtZSwgcHJvZHVjdE5hbWUsIHVzZVByb3RvY29sLCB1c2VUcmFuc3BvcnQsIFwKLQkJICAgIGluaXRGdW5jdGlvbiwgZmxhZ3MpIFwKLXsgVVNCX0RFVklDRV9WRVIoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCksIFwKLSAgLmRyaXZlcl9pbmZvID0gKGZsYWdzKSB9Ci0KLSNkZWZpbmUgVVNVQUxfREVWKHVzZVByb3RvLCB1c2VUcmFucywgdXNlVHlwZSkgXAoteyBVU0JfSU5URVJGQUNFX0lORk8oVVNCX0NMQVNTX01BU1NfU1RPUkFHRSwgdXNlUHJvdG8sIHVzZVRyYW5zKSwgXAotICAuZHJpdmVyX2luZm8gPSAoKHVzZVR5cGUpPDwyNCkgfQotCi1zdHJ1Y3QgdXNiX2RldmljZV9pZCBzdG9yYWdlX3VzYl9pZHMgW10gPSB7Ci0jCWluY2x1ZGUgInVudXN1YWxfZGV2cy5oIgotCXsgfSAvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwotfTsKLQotI3VuZGVmIFVTVUFMX0RFVgotI3VuZGVmIFVOVVNVQUxfREVWCi0jdW5kZWYgQ09NUExJQU5UX0RFVgotCi1NT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgc3RvcmFnZV91c2JfaWRzKTsKLUVYUE9SVF9TWU1CT0xfR1BMKHN0b3JhZ2VfdXNiX2lkcyk7Ci0KLS8qCiAgKiBAdHlwZTogdGhlIG1vZHVsZSB0eXBlIGFzIGFuIGludGVnZXIKICAqLwogdm9pZCB1c2JfdXN1YWxfc2V0X3ByZXNlbnQoaW50IHR5cGUpCkBAIC0xNjcsNyArMTM2LDcgQEAKIAkubmFtZSA9CQkibGlidXN1YWwiLAogCS5wcm9iZSA9CXVzdV9wcm9iZSwKIAkuZGlzY29ubmVjdCA9CXVzdV9kaXNjb25uZWN0LAotCS5pZF90YWJsZSA9CXN0b3JhZ2VfdXNiX2lkcywKKwkuaWRfdGFibGUgPQl1c2Jfc3RvcmFnZV91c2JfaWRzLAogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvb25ldG91Y2guYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvb25ldG91Y2guYwppbmRleCBjN2JmODk1Li4zODAyMzNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL29uZXRvdWNoLmMKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9vbmV0b3VjaC5jCkBAIC0zNSw5ICszNSwxNiBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9pbnB1dC5oPgogI2luY2x1ZGUgInVzYi5oIgotI2luY2x1ZGUgIm9uZXRvdWNoLmgiCiAjaW5jbHVkZSAiZGVidWcuaCIKIAorTU9EVUxFX0RFU0NSSVBUSU9OKCJNYXh0b3IgVVNCIE9uZVRvdWNoIGhhcmQgZHJpdmUgYnV0dG9uIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiTmljayBTaWxsaWsgPG4uc2lsbGlrQHRlbXBsZS5lZHU+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKyNkZWZpbmUgT05FVE9VQ0hfUEtUX0xFTiAgICAgICAgMHgwMgorI2RlZmluZSBPTkVUT1VDSF9CVVRUT04gICAgICAgICBLRVlfUFJPRzEKKworc3RhdGljIGludCBvbmV0b3VjaF9jb25uZWN0X2lucHV0KHN0cnVjdCB1c19kYXRhICpzcyk7CiBzdGF0aWMgdm9pZCBvbmV0b3VjaF9yZWxlYXNlX2lucHV0KHZvaWQgKm9uZXRvdWNoXyk7CiAKIHN0cnVjdCB1c2Jfb25ldG91Y2ggewpAQCAtNTIsNiArNTksNDYgQEAKIAl1bnNpZ25lZCBpbnQgaXNfb3BlbjoxOwogfTsKIAorCisvKgorICogVGhlIHRhYmxlIG9mIGRldmljZXMKKyAqLworI2RlZmluZSBVTlVTVUFMX0RFVihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4LCBcCisJCSAgICB2ZW5kb3JOYW1lLCBwcm9kdWN0TmFtZSwgdXNlUHJvdG9jb2wsIHVzZVRyYW5zcG9ydCwgXAorCQkgICAgaW5pdEZ1bmN0aW9uLCBmbGFncykgXAoreyBVU0JfREVWSUNFX1ZFUihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4KSwgXAorICAuZHJpdmVyX2luZm8gPSAoZmxhZ3MpfChVU0JfVVNfVFlQRV9TVE9SPDwyNCkgfQorCitzdHJ1Y3QgdXNiX2RldmljZV9pZCBvbmV0b3VjaF91c2JfaWRzW10gPSB7CisjCWluY2x1ZGUgInVudXN1YWxfb25ldG91Y2guaCIKKwl7IH0JCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIG9uZXRvdWNoX3VzYl9pZHMpOworCisjdW5kZWYgVU5VU1VBTF9ERVYKKworLyoKKyAqIFRoZSBmbGFncyB0YWJsZQorICovCisjZGVmaW5lIFVOVVNVQUxfREVWKGlkVmVuZG9yLCBpZFByb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4LCBcCisJCSAgICB2ZW5kb3JfbmFtZSwgcHJvZHVjdF9uYW1lLCB1c2VfcHJvdG9jb2wsIHVzZV90cmFuc3BvcnQsIFwKKwkJICAgIGluaXRfZnVuY3Rpb24sIEZsYWdzKSBcCit7IFwKKwkudmVuZG9yTmFtZSA9IHZlbmRvcl9uYW1lLAlcCisJLnByb2R1Y3ROYW1lID0gcHJvZHVjdF9uYW1lLAlcCisJLnVzZVByb3RvY29sID0gdXNlX3Byb3RvY29sLAlcCisJLnVzZVRyYW5zcG9ydCA9IHVzZV90cmFuc3BvcnQsCVwKKwkuaW5pdEZ1bmN0aW9uID0gaW5pdF9mdW5jdGlvbiwJXAorfQorCitzdGF0aWMgc3RydWN0IHVzX3VudXN1YWxfZGV2IG9uZXRvdWNoX3VudXN1YWxfZGV2X2xpc3RbXSA9IHsKKyMJaW5jbHVkZSAidW51c3VhbF9vbmV0b3VjaC5oIgorCXsgfQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKKyN1bmRlZiBVTlVTVUFMX0RFVgorCisKIHN0YXRpYyB2b2lkIHVzYl9vbmV0b3VjaF9pcnEoc3RydWN0IHVyYiAqdXJiKQogewogCXN0cnVjdCB1c2Jfb25ldG91Y2ggKm9uZXRvdWNoID0gdXJiLT5jb250ZXh0OwpAQCAtMTI3LDcgKzE3NCw3IEBACiB9CiAjZW5kaWYgLyogQ09ORklHX1BNICovCiAKLWludCBvbmV0b3VjaF9jb25uZWN0X2lucHV0KHN0cnVjdCB1c19kYXRhICpzcykKK3N0YXRpYyBpbnQgb25ldG91Y2hfY29ubmVjdF9pbnB1dChzdHJ1Y3QgdXNfZGF0YSAqc3MpCiB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBzcy0+cHVzYl9kZXY7CiAJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaW50ZXJmYWNlOwpAQCAtMjM2LDMgKzI4Myw0NiBAQAogCQkJCW9uZXRvdWNoLT5kYXRhLCBvbmV0b3VjaC0+ZGF0YV9kbWEpOwogCX0KIH0KKworc3RhdGljIGludCBvbmV0b3VjaF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCSBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzX2RhdGEgKnVzOworCWludCByZXN1bHQ7CisKKwlyZXN1bHQgPSB1c2Jfc3Rvcl9wcm9iZTEoJnVzLCBpbnRmLCBpZCwKKwkJCShpZCAtIG9uZXRvdWNoX3VzYl9pZHMpICsgb25ldG91Y2hfdW51c3VhbF9kZXZfbGlzdCk7CisJaWYgKHJlc3VsdCkKKwkJcmV0dXJuIHJlc3VsdDsKKworCS8qIFVzZSBkZWZhdWx0IHRyYW5zcG9ydCBhbmQgcHJvdG9jb2wgKi8KKworCXJlc3VsdCA9IHVzYl9zdG9yX3Byb2JlMih1cyk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIG9uZXRvdWNoX2RyaXZlciA9IHsKKwkubmFtZSA9CQkidW1zLW9uZXRvdWNoIiwKKwkucHJvYmUgPQlvbmV0b3VjaF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CXVzYl9zdG9yX2Rpc2Nvbm5lY3QsCisJLnN1c3BlbmQgPQl1c2Jfc3Rvcl9zdXNwZW5kLAorCS5yZXN1bWUgPQl1c2Jfc3Rvcl9yZXN1bWUsCisJLnJlc2V0X3Jlc3VtZSA9CXVzYl9zdG9yX3Jlc2V0X3Jlc3VtZSwKKwkucHJlX3Jlc2V0ID0JdXNiX3N0b3JfcHJlX3Jlc2V0LAorCS5wb3N0X3Jlc2V0ID0JdXNiX3N0b3JfcG9zdF9yZXNldCwKKwkuaWRfdGFibGUgPQlvbmV0b3VjaF91c2JfaWRzLAorCS5zb2Z0X3VuYmluZCA9CTEsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBvbmV0b3VjaF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHVzYl9yZWdpc3Rlcigmb25ldG91Y2hfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG9uZXRvdWNoX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3Rlcigmb25ldG91Y2hfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQob25ldG91Y2hfaW5pdCk7Cittb2R1bGVfZXhpdChvbmV0b3VjaF9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvb25ldG91Y2guaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvb25ldG91Y2guaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDFjN2FhOC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL29uZXRvdWNoLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLSNpZm5kZWYgX09ORVRPVUNIX0hfCi0jZGVmaW5lIF9PTkVUT1VDSF9IXwotCi0jZGVmaW5lIE9ORVRPVUNIX1BLVF9MRU4gICAgICAgIDB4MDIKLSNkZWZpbmUgT05FVE9VQ0hfQlVUVE9OICAgICAgICAgS0VZX1BST0cxCi0KLWludCBvbmV0b3VjaF9jb25uZWN0X2lucHV0KHN0cnVjdCB1c19kYXRhICpzcyk7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9wcm90b2NvbC5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9wcm90b2NvbC5jCmluZGV4IGJlNDQxZDguLmZjMzEwZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvcHJvdG9jb2wuYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3Byb3RvY29sLmMKQEAgLTEyMSw2ICsxMjEsNyBAQAogCS8qIHNlbmQgdGhlIGNvbW1hbmQgdG8gdGhlIHRyYW5zcG9ydCBsYXllciAqLwogCXVzYl9zdG9yX2ludm9rZV90cmFuc3BvcnQoc3JiLCB1cyk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc3Rvcl90cmFuc3BhcmVudF9zY3NpX2NvbW1hbmQpOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFNjYXR0ZXItZ2F0aGVyIHRyYW5zZmVyIGJ1ZmZlciBhY2Nlc3Mgcm91dGluZXMKQEAgLTE5OSw2ICsyMDAsNyBAQAogCS8qIFJldHVybiB0aGUgYW1vdW50IGFjdHVhbGx5IHRyYW5zZmVycmVkICovCiAJcmV0dXJuIGNudDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9zdG9yX2FjY2Vzc194ZmVyX2J1Zik7CiAKIC8qIFN0b3JlIHRoZSBjb250ZW50cyBvZiBidWZmZXIgaW50byBzcmIncyB0cmFuc2ZlciBidWZmZXIgYW5kIHNldCB0aGUKICAqIFNDU0kgcmVzaWR1ZS4KQEAgLTIxNSwzICsyMTcsNCBAQAogCWlmIChidWZsZW4gPCBzY3NpX2J1ZmZsZW4oc3JiKSkKIAkJc2NzaV9zZXRfcmVzaWQoc3JiLCBzY3NpX2J1ZmZsZW4oc3JiKSAtIGJ1Zmxlbik7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc3Rvcl9zZXRfeGZlcl9idWYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9zY3NpZ2x1ZS5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9zY3NpZ2x1ZS5jCmluZGV4IDcyN2M1MDYuLjRjYTNiNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2NzaWdsdWUuYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3Njc2lnbHVlLmMKQEAgLTEzNSw2ICsxMzUsMTIgQEAKIAkJaWYgKHNkZXYtPnJlcXVlc3RfcXVldWUtPm1heF9zZWN0b3JzID4gbWF4X3NlY3RvcnMpCiAJCQlibGtfcXVldWVfbWF4X3NlY3RvcnMoc2Rldi0+cmVxdWVzdF9xdWV1ZSwKIAkJCQkJICAgICAgbWF4X3NlY3RvcnMpOworCX0gZWxzZSBpZiAoc2Rldi0+dHlwZSA9PSBUWVBFX1RBUEUpIHsKKwkJLyogVGFwZXMgbmVlZCBtdWNoIGhpZ2hlciBtYXhfc2VjdG9yIGxpbWl0cywgc28ganVzdAorCQkgKiByYWlzZSBpdCB0byB0aGUgbWF4aW11bSBwb3NzaWJsZSAoNCBHQiAvIDUxMikgYW5kCisJCSAqIGxldCB0aGUgcXVldWUgc2VnbWVudCBzaXplIHNvcnQgb3V0IHRoZSByZWFsIGxpbWl0LgorCQkgKi8KKwkJYmxrX3F1ZXVlX21heF9zZWN0b3JzKHNkZXYtPnJlcXVlc3RfcXVldWUsIDB4N0ZGRkZGKTsKIAl9CiAKIAkvKiBTb21lIFVTQiBob3N0IGNvbnRyb2xsZXJzIGNhbid0IGRvIERNQTsgdGhleSBoYXZlIHRvIHVzZSBQSU8uCkBAIC01NjMsNCArNTY5LDQgQEAKIAlbN10JPSAweDBhLAkJCSAgICAvKiBhZGRpdGlvbmFsIGxlbmd0aCAqLwogCVsxMl0JPSAweDI0CQkJICAgIC8qIEludmFsaWQgRmllbGQgaW4gQ0RCICovCiB9OwotCitFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc3Rvcl9zZW5zZV9pbnZhbGlkQ0RCKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2RkcjA5LmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3NkZHIwOS5jCmluZGV4IDUzMWFlNWMuLmFiNWY5ZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2RkcjA5LmMKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9zZGRyMDkuYwpAQCAtNDEsNiArNDEsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIAogI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgpAQCAtNTEsNyArNTIsNTMgQEAKICNpbmNsdWRlICJ0cmFuc3BvcnQuaCIKICNpbmNsdWRlICJwcm90b2NvbC5oIgogI2luY2x1ZGUgImRlYnVnLmgiCi0jaW5jbHVkZSAic2RkcjA5LmgiCisKK01PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBTYW5EaXNrIFNERFItMDkgU21hcnRNZWRpYSByZWFkZXIiKTsKK01PRFVMRV9BVVRIT1IoIkFuZHJpZXMgQnJvdXdlciA8YWViQGN3aS5ubD4sIFJvYmVydCBCYXJ1Y2ggPGF1dG9waGlsZUBzdGFyYmFuZC5uZXQ+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK3N0YXRpYyBpbnQgdXNiX3N0b3Jfc2RkcjA5X2RwY21faW5pdChzdHJ1Y3QgdXNfZGF0YSAqdXMpOworc3RhdGljIGludCBzZGRyMDlfdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKTsKK3N0YXRpYyBpbnQgdXNiX3N0b3Jfc2RkcjA5X2luaXQoc3RydWN0IHVzX2RhdGEgKnVzKTsKKworCisvKgorICogVGhlIHRhYmxlIG9mIGRldmljZXMKKyAqLworI2RlZmluZSBVTlVTVUFMX0RFVihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4LCBcCisJCSAgICB2ZW5kb3JOYW1lLCBwcm9kdWN0TmFtZSwgdXNlUHJvdG9jb2wsIHVzZVRyYW5zcG9ydCwgXAorCQkgICAgaW5pdEZ1bmN0aW9uLCBmbGFncykgXAoreyBVU0JfREVWSUNFX1ZFUihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4KSwgXAorICAuZHJpdmVyX2luZm8gPSAoZmxhZ3MpfChVU0JfVVNfVFlQRV9TVE9SPDwyNCkgfQorCitzdHJ1Y3QgdXNiX2RldmljZV9pZCBzZGRyMDlfdXNiX2lkc1tdID0geworIwlpbmNsdWRlICJ1bnVzdWFsX3NkZHIwOS5oIgorCXsgfQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgc2RkcjA5X3VzYl9pZHMpOworCisjdW5kZWYgVU5VU1VBTF9ERVYKKworLyoKKyAqIFRoZSBmbGFncyB0YWJsZQorICovCisjZGVmaW5lIFVOVVNVQUxfREVWKGlkVmVuZG9yLCBpZFByb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4LCBcCisJCSAgICB2ZW5kb3JfbmFtZSwgcHJvZHVjdF9uYW1lLCB1c2VfcHJvdG9jb2wsIHVzZV90cmFuc3BvcnQsIFwKKwkJICAgIGluaXRfZnVuY3Rpb24sIEZsYWdzKSBcCit7IFwKKwkudmVuZG9yTmFtZSA9IHZlbmRvcl9uYW1lLAlcCisJLnByb2R1Y3ROYW1lID0gcHJvZHVjdF9uYW1lLAlcCisJLnVzZVByb3RvY29sID0gdXNlX3Byb3RvY29sLAlcCisJLnVzZVRyYW5zcG9ydCA9IHVzZV90cmFuc3BvcnQsCVwKKwkuaW5pdEZ1bmN0aW9uID0gaW5pdF9mdW5jdGlvbiwJXAorfQorCitzdGF0aWMgc3RydWN0IHVzX3VudXN1YWxfZGV2IHNkZHIwOV91bnVzdWFsX2Rldl9saXN0W10gPSB7CisjCWluY2x1ZGUgInVudXN1YWxfc2RkcjA5LmgiCisJeyB9CQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworI3VuZGVmIFVOVVNVQUxfREVWCiAKIAogI2RlZmluZSBzaG9ydF9wYWNrKGxzYixtc2IpICggKCh1MTYpKGxzYikpIHwgKCAoKHUxNikobXNiKSk8PDggKSApCkBAIC03MjMsNyArNzcwLDcgQEAKIAlsZW4gPSBtaW4oc2VjdG9ycywgKHVuc2lnbmVkIGludCkgaW5mby0+YmxvY2tzaXplKSAqIGluZm8tPnBhZ2VzaXplOwogCWJ1ZmZlciA9IGttYWxsb2MobGVuLCBHRlBfTk9JTyk7CiAJaWYgKGJ1ZmZlciA9PSBOVUxMKSB7Ci0JCXByaW50aygic2RkcjA5X3JlYWRfZGF0YTogT3V0IG9mIG1lbW9yeVxuIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgInNkZHIwOV9yZWFkX2RhdGE6IE91dCBvZiBtZW1vcnlcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTgzOCw3ICs4ODUsOCBAQAogCWlmIChwYmEgPT0gVU5ERUYpIHsKIAkJcGJhID0gc2RkcjA5X2ZpbmRfdW51c2VkX3BiYShpbmZvLCBsYmEpOwogCQlpZiAoIXBiYSkgewotCQkJcHJpbnRrKCJzZGRyMDlfd3JpdGVfbGJhOiBPdXQgb2YgdW51c2VkIGJsb2Nrc1xuIik7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkgICAgICAgInNkZHIwOV93cml0ZV9sYmE6IE91dCBvZiB1bnVzZWQgYmxvY2tzXG4iKTsKIAkJCXJldHVybiAtRU5PU1BDOwogCQl9CiAJCWluZm8tPnBiYV90b19sYmFbcGJhXSA9IGxiYTsKQEAgLTg0OSw3ICs4OTcsNyBAQAogCWlmIChwYmEgPT0gMSkgewogCQkvKiBNYXliZSBpdCBpcyBpbXBvc3NpYmxlIHRvIHdyaXRlIHRvIFBCQSAxLgogCQkgICBGYWtlIHN1Y2Nlc3MsIGJ1dCBkb24ndCBkbyBhbnl0aGluZy4gKi8KLQkJcHJpbnRrKCJzZGRyMDk6IGF2b2lkIHdyaXRpbmcgdG8gcGJhIDFcbiIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJzZGRyMDk6IGF2b2lkIHdyaXRpbmcgdG8gcGJhIDFcbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTk1NCw3ICsxMDAyLDcgQEAKIAlibG9ja2xlbiA9IChwYWdlbGVuIDw8IGluZm8tPmJsb2Nrc2hpZnQpOwogCWJsb2NrYnVmZmVyID0ga21hbGxvYyhibG9ja2xlbiwgR0ZQX05PSU8pOwogCWlmICghYmxvY2tidWZmZXIpIHsKLQkJcHJpbnRrKCJzZGRyMDlfd3JpdGVfZGF0YTogT3V0IG9mIG1lbW9yeVxuIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgInNkZHIwOV93cml0ZV9kYXRhOiBPdXQgb2YgbWVtb3J5XG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC05NjUsNyArMTAxMyw3IEBACiAJbGVuID0gbWluKHNlY3RvcnMsICh1bnNpZ25lZCBpbnQpIGluZm8tPmJsb2Nrc2l6ZSkgKiBpbmZvLT5wYWdlc2l6ZTsKIAlidWZmZXIgPSBrbWFsbG9jKGxlbiwgR0ZQX05PSU8pOwogCWlmIChidWZmZXIgPT0gTlVMTCkgewotCQlwcmludGsoInNkZHIwOV93cml0ZV9kYXRhOiBPdXQgb2YgbWVtb3J5XG4iKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAic2RkcjA5X3dyaXRlX2RhdGE6IE91dCBvZiBtZW1vcnlcbiIpOwogCQlrZnJlZShibG9ja2J1ZmZlcik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KQEAgLTExMTIsNyArMTE2MCw3IEBACiAKIAlpZiAocmVzdWx0KSB7CiAJCVVTX0RFQlVHUCgiUmVzdWx0IG9mIHJlYWRfZGV2aWNlSUQgaXMgJWRcbiIsIHJlc3VsdCk7Ci0JCXByaW50aygic2RkcjA5OiBjb3VsZCBub3QgcmVhZCBjYXJkIGluZm9cbiIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJzZGRyMDk6IGNvdWxkIG5vdCByZWFkIGNhcmQgaW5mb1xuIik7CiAJCXJldHVybiBOVUxMOwogCX0KIApAQCAtMTE1Myw3ICsxMjAxLDcgQEAKIAkJc3ByaW50ZihibHVyYnR4dCArIHN0cmxlbihibHVyYnR4dCksCiAJCQkiLCBXUCIpOwogCi0JcHJpbnRrKCIlc1xuIiwgYmx1cmJ0eHQpOworCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzXG4iLCBibHVyYnR4dCk7CiAKIAlyZXR1cm4gY2FyZGluZm87CiB9CkBAIC0xMTg0LDcgKzEyMzIsNyBAQAogCWFsbG9jX2xlbiA9IChhbGxvY19ibG9ja3MgPDwgQ09OVFJPTF9TSElGVCk7CiAJYnVmZmVyID0ga21hbGxvYyhhbGxvY19sZW4sIEdGUF9OT0lPKTsKIAlpZiAoYnVmZmVyID09IE5VTEwpIHsKLQkJcHJpbnRrKCJzZGRyMDlfcmVhZF9tYXA6IG91dCBvZiBtZW1vcnlcbiIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJzZGRyMDlfcmVhZF9tYXA6IG91dCBvZiBtZW1vcnlcbiIpOwogCQlyZXN1bHQgPSAtMTsKIAkJZ290byBkb25lOwogCX0KQEAgLTExOTgsNyArMTI0Niw3IEBACiAJaW5mby0+cGJhX3RvX2xiYSA9IGttYWxsb2MobnVtYmxvY2tzKnNpemVvZihpbnQpLCBHRlBfTk9JTyk7CiAKIAlpZiAoaW5mby0+bGJhX3RvX3BiYSA9PSBOVUxMIHx8IGluZm8tPnBiYV90b19sYmEgPT0gTlVMTCkgewotCQlwcmludGsoInNkZHIwOV9yZWFkX21hcDogb3V0IG9mIG1lbW9yeVxuIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgInNkZHIwOV9yZWFkX21hcDogb3V0IG9mIG1lbW9yeVxuIik7CiAJCXJlc3VsdCA9IC0xOwogCQlnb3RvIGRvbmU7CiAJfQpAQCAtMTIzOCw3ICsxMjg2LDggQEAKIAkJCWlmIChwdHJbal0gIT0gMCkKIAkJCQlnb3RvIG5vbno7CiAJCWluZm8tPnBiYV90b19sYmFbaV0gPSBVTlVTQUJMRTsKLQkJcHJpbnRrKCJzZGRyMDk6IFBCQSAlZCBoYXMgbm8gbG9naWNhbCBtYXBwaW5nXG4iLCBpKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAic2RkcjA5OiBQQkEgJWQgaGFzIG5vIGxvZ2ljYWwgbWFwcGluZ1xuIiwKKwkJICAgICAgIGkpOwogCQljb250aW51ZTsKIAogCW5vbno6CkBAIC0xMjUxLDcgKzEzMDAsOCBAQAogCW5vbmZmOgogCQkvKiBub3JtYWwgUEJBcyBzdGFydCB3aXRoIHNpeCBGRnMgKi8KIAkJaWYgKGogPCA2KSB7Ci0JCQlwcmludGsoInNkZHIwOTogUEJBICVkIGhhcyBubyBsb2dpY2FsIG1hcHBpbmc6ICIKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSAgICAgICAic2RkcjA5OiBQQkEgJWQgaGFzIG5vIGxvZ2ljYWwgbWFwcGluZzogIgogCQkJICAgICAgICJyZXNlcnZlZCBhcmVhID0gJTAyWCUwMlglMDJYJTAyWCAiCiAJCQkgICAgICAgImRhdGEgc3RhdHVzICUwMlggYmxvY2sgc3RhdHVzICUwMlhcbiIsCiAJCQkgICAgICAgaSwgcHRyWzBdLCBwdHJbMV0sIHB0clsyXSwgcHRyWzNdLApAQCAtMTI2MSw3ICsxMzExLDggQEAKIAkJfQogCiAJCWlmICgocHRyWzZdID4+IDQpICE9IDB4MDEpIHsKLQkJCXByaW50aygic2RkcjA5OiBQQkEgJWQgaGFzIGludmFsaWQgYWRkcmVzcyBmaWVsZCAiCisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkgICAgICAgInNkZHIwOTogUEJBICVkIGhhcyBpbnZhbGlkIGFkZHJlc3MgZmllbGQgIgogCQkJICAgICAgICIlMDJYJTAyWC8lMDJYJTAyWFxuIiwKIAkJCSAgICAgICBpLCBwdHJbNl0sIHB0cls3XSwgcHRyWzExXSwgcHRyWzEyXSk7CiAJCQlpbmZvLT5wYmFfdG9fbGJhW2ldID0gVU5VU0FCTEU7CkBAIC0xMjcwLDcgKzEzMjEsOCBAQAogCiAJCS8qIGNoZWNrIGV2ZW4gcGFyaXR5ICovCiAJCWlmIChwYXJpdHlbcHRyWzZdIF4gcHRyWzddXSkgewotCQkJcHJpbnRrKCJzZGRyMDk6IEJhZCBwYXJpdHkgaW4gTEJBIGZvciBibG9jayAlZCIKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSAgICAgICAic2RkcjA5OiBCYWQgcGFyaXR5IGluIExCQSBmb3IgYmxvY2sgJWQiCiAJCQkgICAgICAgIiAoJTAyWCAlMDJYKVxuIiwgaSwgcHRyWzZdLCBwdHJbN10pOwogCQkJaW5mby0+cGJhX3RvX2xiYVtpXSA9IFVOVVNBQkxFOwogCQkJY29udGludWU7CkBAIC0xMjg5LDcgKzEzNDEsOCBAQAogCQkgKi8KIAogCQlpZiAobGJhID49IDEwMDApIHsKLQkJCXByaW50aygic2RkcjA5OiBCYWQgbG93IExCQSAlZCBmb3IgYmxvY2sgJWRcbiIsCisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkgICAgICAgInNkZHIwOTogQmFkIGxvdyBMQkEgJWQgZm9yIGJsb2NrICVkXG4iLAogCQkJICAgICAgIGxiYSwgaSk7CiAJCQlnb3RvIHBvc3NpYmx5X2VyYXNlOwogCQl9CkBAIC0xMjk3LDcgKzEzNTAsOCBAQAogCQlsYmEgKz0gMTAwMCooaS8weDQwMCk7CiAKIAkJaWYgKGluZm8tPmxiYV90b19wYmFbbGJhXSAhPSBVTkRFRikgewotCQkJcHJpbnRrKCJzZGRyMDk6IExCQSAlZCBzZWVuIGZvciBQQkEgJWQgYW5kICVkXG4iLAorCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJICAgICAgICJzZGRyMDk6IExCQSAlZCBzZWVuIGZvciBQQkEgJWQgYW5kICVkXG4iLAogCQkJICAgICAgIGxiYSwgaW5mby0+bGJhX3RvX3BiYVtsYmFdLCBpKTsKIAkJCWdvdG8gcG9zc2libHlfZXJhc2U7CiAJCX0KQEAgLTEzOTksNyArMTQ1Myw3IEBACiAgKiB1bnVzdWFsIGRldmljZXMgbGlzdCBidXQgY2FsbGVkIGZyb20gaGVyZSB0aGVuIExVTiAwIG9mIHRoZSBjb21ibyByZWFkZXIKICAqIGlzIG5vdCByZWNvZ25pemVkLiBCdXQgSSBkbyBub3Qga25vdyB3aGF0IHByZWNpc2VseSB0aGVzZSBjYWxscyBkby4KICAqLwotaW50CitzdGF0aWMgaW50CiB1c2Jfc3Rvcl9zZGRyMDlfZHBjbV9pbml0KHN0cnVjdCB1c19kYXRhICp1cykgewogCWludCByZXN1bHQ7CiAJdW5zaWduZWQgY2hhciAqZGF0YSA9IHVzLT5pb2J1ZjsKQEAgLTE0NDksNyArMTUwMyw3IEBACiAvKgogICogVHJhbnNwb3J0IGZvciB0aGUgTWljcm90ZWNoIERQQ00tVVNCCiAgKi8KLWludCBkcGNtX3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cykKK3N0YXRpYyBpbnQgZHBjbV90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpCiB7CiAJaW50IHJldDsKIApAQCAtMTQ5MSw3ICsxNTQ1LDcgQEAKIC8qCiAgKiBUcmFuc3BvcnQgZm9yIHRoZSBTYW5kaXNrIFNERFItMDkKICAqLwotaW50IHNkZHIwOV90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpCitzdGF0aWMgaW50IHNkZHIwOV90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpCiB7CiAJc3RhdGljIHVuc2lnbmVkIGNoYXIgc2Vuc2VrZXkgPSAwLCBzZW5zZWNvZGUgPSAwOwogCXN0YXRpYyB1bnNpZ25lZCBjaGFyIGhhdmVmYWtlc2Vuc2UgPSAwOwpAQCAtMTY5MCw3ICsxNzQ0LDYwIEBACiAvKgogICogSW5pdGlhbGl6YXRpb24gcm91dGluZSBmb3IgdGhlIHNkZHIwOSBzdWJkcml2ZXIKICAqLwotaW50CitzdGF0aWMgaW50CiB1c2Jfc3Rvcl9zZGRyMDlfaW5pdChzdHJ1Y3QgdXNfZGF0YSAqdXMpIHsKIAlyZXR1cm4gc2RkcjA5X2NvbW1vbl9pbml0KHVzKTsKIH0KKworc3RhdGljIGludCBzZGRyMDlfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQkgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1c19kYXRhICp1czsKKwlpbnQgcmVzdWx0OworCisJcmVzdWx0ID0gdXNiX3N0b3JfcHJvYmUxKCZ1cywgaW50ZiwgaWQsCisJCQkoaWQgLSBzZGRyMDlfdXNiX2lkcykgKyBzZGRyMDlfdW51c3VhbF9kZXZfbGlzdCk7CisJaWYgKHJlc3VsdCkKKwkJcmV0dXJuIHJlc3VsdDsKKworCWlmICh1cy0+cHJvdG9jb2wgPT0gVVNfUFJfRFBDTV9VU0IpIHsKKwkJdXMtPnRyYW5zcG9ydF9uYW1lID0gIkNvbnRyb2wvQnVsay1FVVNCL1NERFIwOSI7CisJCXVzLT50cmFuc3BvcnQgPSBkcGNtX3RyYW5zcG9ydDsKKwkJdXMtPnRyYW5zcG9ydF9yZXNldCA9IHVzYl9zdG9yX0NCX3Jlc2V0OworCQl1cy0+bWF4X2x1biA9IDE7CisJfSBlbHNlIHsKKwkJdXMtPnRyYW5zcG9ydF9uYW1lID0gIkVVU0IvU0REUjA5IjsKKwkJdXMtPnRyYW5zcG9ydCA9IHNkZHIwOV90cmFuc3BvcnQ7CisJCXVzLT50cmFuc3BvcnRfcmVzZXQgPSB1c2Jfc3Rvcl9DQl9yZXNldDsKKwkJdXMtPm1heF9sdW4gPSAwOworCX0KKworCXJlc3VsdCA9IHVzYl9zdG9yX3Byb2JlMih1cyk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHNkZHIwOV9kcml2ZXIgPSB7CisJLm5hbWUgPQkJInVtcy1zZGRyMDkiLAorCS5wcm9iZSA9CXNkZHIwOV9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CXVzYl9zdG9yX2Rpc2Nvbm5lY3QsCisJLnN1c3BlbmQgPQl1c2Jfc3Rvcl9zdXNwZW5kLAorCS5yZXN1bWUgPQl1c2Jfc3Rvcl9yZXN1bWUsCisJLnJlc2V0X3Jlc3VtZSA9CXVzYl9zdG9yX3Jlc2V0X3Jlc3VtZSwKKwkucHJlX3Jlc2V0ID0JdXNiX3N0b3JfcHJlX3Jlc2V0LAorCS5wb3N0X3Jlc2V0ID0JdXNiX3N0b3JfcG9zdF9yZXNldCwKKwkuaWRfdGFibGUgPQlzZGRyMDlfdXNiX2lkcywKKwkuc29mdF91bmJpbmQgPQkxLAorfTsKKworc3RhdGljIGludCBfX2luaXQgc2RkcjA5X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gdXNiX3JlZ2lzdGVyKCZzZGRyMDlfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHNkZHIwOV9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJnNkZHIwOV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChzZGRyMDlfaW5pdCk7Cittb2R1bGVfZXhpdChzZGRyMDlfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3NkZHIwOS5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9zZGRyMDkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjcwMTE3Mi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3NkZHIwOS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotLyogRHJpdmVyIGZvciBTYW5EaXNrIFNERFItMDkgU21hcnRNZWRpYSByZWFkZXIKLSAqIEhlYWRlciBGaWxlCi0gKgotICogQ3VycmVudCBkZXZlbG9wbWVudCBhbmQgbWFpbnRlbmFuY2UgYnk6Ci0gKiAgIChjKSAyMDAwIFJvYmVydCBCYXJ1Y2ggKGF1dG9waGlsZUBkb2wubmV0KQotICogICAoYykgMjAwMiBBbmRyaWVzIEJyb3V3ZXIgKGFlYkBjd2kubmwpCi0gKgotICogU2VlIHNkZHIwOS5jIGZvciBtb3JlIGV4cGxhbmF0aW9uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQotICogbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfVVNCX1NIVVRUTEVfRVVTQl9TRERSMDlfSAotI2RlZmluZSBfVVNCX1NIVVRUTEVfRVVTQl9TRERSMDlfSAotCi0vKiBTYW5kaXNrIFNERFItMDkgc3R1ZmYgKi8KLQotZXh0ZXJuIGludCBzZGRyMDlfdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKTsKLWV4dGVybiBpbnQgdXNiX3N0b3Jfc2RkcjA5X2luaXQoc3RydWN0IHVzX2RhdGEgKnVzKTsKLQotLyogTWljcm90ZWNoIERQQ00tVVNCIHN0dWZmICovCi0KLWV4dGVybiBpbnQgZHBjbV90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpOwotZXh0ZXJuIGludCB1c2Jfc3Rvcl9zZGRyMDlfZHBjbV9pbml0KHN0cnVjdCB1c19kYXRhICp1cyk7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9zZGRyNTUuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2RkcjU1LmMKaW5kZXggMGQ4ZGY3NS4uNDRkZmVkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9zZGRyNTUuYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3NkZHI1NS5jCkBAIC0yNCw2ICsyNCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKICNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KQEAgLTMzLDcgKzM0LDQ4IEBACiAjaW5jbHVkZSAidHJhbnNwb3J0LmgiCiAjaW5jbHVkZSAicHJvdG9jb2wuaCIKICNpbmNsdWRlICJkZWJ1Zy5oIgotI2luY2x1ZGUgInNkZHI1NS5oIgorCitNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgU2FuRGlzayBTRERSLTU1IFNtYXJ0TWVkaWEgcmVhZGVyIik7CitNT0RVTEVfQVVUSE9SKCJTaW1vbiBNdW50b24iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworLyoKKyAqIFRoZSB0YWJsZSBvZiBkZXZpY2VzCisgKi8KKyNkZWZpbmUgVU5VU1VBTF9ERVYoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCwgXAorCQkgICAgdmVuZG9yTmFtZSwgcHJvZHVjdE5hbWUsIHVzZVByb3RvY29sLCB1c2VUcmFuc3BvcnQsIFwKKwkJICAgIGluaXRGdW5jdGlvbiwgZmxhZ3MpIFwKK3sgVVNCX0RFVklDRV9WRVIoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCksIFwKKyAgLmRyaXZlcl9pbmZvID0gKGZsYWdzKXwoVVNCX1VTX1RZUEVfU1RPUjw8MjQpIH0KKworc3RydWN0IHVzYl9kZXZpY2VfaWQgc2RkcjU1X3VzYl9pZHNbXSA9IHsKKyMJaW5jbHVkZSAidW51c3VhbF9zZGRyNTUuaCIKKwl7IH0JCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIHNkZHI1NV91c2JfaWRzKTsKKworI3VuZGVmIFVOVVNVQUxfREVWCisKKy8qCisgKiBUaGUgZmxhZ3MgdGFibGUKKyAqLworI2RlZmluZSBVTlVTVUFMX0RFVihpZFZlbmRvciwgaWRQcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCwgXAorCQkgICAgdmVuZG9yX25hbWUsIHByb2R1Y3RfbmFtZSwgdXNlX3Byb3RvY29sLCB1c2VfdHJhbnNwb3J0LCBcCisJCSAgICBpbml0X2Z1bmN0aW9uLCBGbGFncykgXAoreyBcCisJLnZlbmRvck5hbWUgPSB2ZW5kb3JfbmFtZSwJXAorCS5wcm9kdWN0TmFtZSA9IHByb2R1Y3RfbmFtZSwJXAorCS51c2VQcm90b2NvbCA9IHVzZV9wcm90b2NvbCwJXAorCS51c2VUcmFuc3BvcnQgPSB1c2VfdHJhbnNwb3J0LAlcCisJLmluaXRGdW5jdGlvbiA9IGluaXRfZnVuY3Rpb24sCVwKK30KKworc3RhdGljIHN0cnVjdCB1c191bnVzdWFsX2RldiBzZGRyNTVfdW51c3VhbF9kZXZfbGlzdFtdID0geworIwlpbmNsdWRlICJ1bnVzdWFsX3NkZHI1NS5oIgorCXsgfQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKKyN1bmRlZiBVTlVTVUFMX0RFVgogCiAKICNkZWZpbmUgc2hvcnRfcGFjayhsc2IsbXNiKSAoICgodTE2KShsc2IpKSB8ICggKCh1MTYpKG1zYikpPDw4ICkgKQpAQCAtNTEzLDcgKzU1NSw4IEBACiB9CiAKIAotaW50IHNkZHI1NV9yZXNldChzdHJ1Y3QgdXNfZGF0YSAqdXMpIHsKK3N0YXRpYyBpbnQgc2RkcjU1X3Jlc2V0KHN0cnVjdCB1c19kYXRhICp1cykKK3sKIAlyZXR1cm4gMDsKIH0KIApAQCAtNzAzLDcgKzc0Niw5IEBACiAJCQogCQlpZiAoaW5mby0+bGJhX3RvX3BiYVtsYmEgKyB6b25lICogMTAwMF0gIT0gTk9UX0FMTE9DQVRFRCAmJgogCQkgICAgIWluZm8tPmZvcmNlX3JlYWRfb25seSkgewotCQkJcHJpbnRrKCJzZGRyNTU6IG1hcCBpbmNvbnNpc3RlbmN5IGF0IExCQSAlMDRYXG4iLCBsYmEgKyB6b25lICogMTAwMCk7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkgICAgICAgInNkZHI1NTogbWFwIGluY29uc2lzdGVuY3kgYXQgTEJBICUwNFhcbiIsCisJCQkgICAgICAgbGJhICsgem9uZSAqIDEwMDApOwogCQkJaW5mby0+Zm9yY2VfcmVhZF9vbmx5ID0gMTsKIAkJfQogCkBAIC03MzIsNyArNzc3LDcgQEAKIC8qCiAgKiBUcmFuc3BvcnQgZm9yIHRoZSBTYW5kaXNrIFNERFItNTUKICAqLwotaW50IHNkZHI1NV90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpCitzdGF0aWMgaW50IHNkZHI1NV90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpCiB7CiAJaW50IHJlc3VsdDsKIAlzdGF0aWMgdW5zaWduZWQgY2hhciBpbnF1aXJ5X3Jlc3BvbnNlWzhdID0gewpAQCAtOTI5LDMgKzk3NCw0OSBAQAogCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEOyAvLyBGSVhNRTogc2Vuc2UgYnVmZmVyPwogfQogCisKK3N0YXRpYyBpbnQgc2RkcjU1X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNfZGF0YSAqdXM7CisJaW50IHJlc3VsdDsKKworCXJlc3VsdCA9IHVzYl9zdG9yX3Byb2JlMSgmdXMsIGludGYsIGlkLAorCQkJKGlkIC0gc2RkcjU1X3VzYl9pZHMpICsgc2RkcjU1X3VudXN1YWxfZGV2X2xpc3QpOworCWlmIChyZXN1bHQpCisJCXJldHVybiByZXN1bHQ7CisKKwl1cy0+dHJhbnNwb3J0X25hbWUgPSAiU0REUjU1IjsKKwl1cy0+dHJhbnNwb3J0ID0gc2RkcjU1X3RyYW5zcG9ydDsKKwl1cy0+dHJhbnNwb3J0X3Jlc2V0ID0gc2RkcjU1X3Jlc2V0OworCXVzLT5tYXhfbHVuID0gMDsKKworCXJlc3VsdCA9IHVzYl9zdG9yX3Byb2JlMih1cyk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHNkZHI1NV9kcml2ZXIgPSB7CisJLm5hbWUgPQkJInVtcy1zZGRyNTUiLAorCS5wcm9iZSA9CXNkZHI1NV9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CXVzYl9zdG9yX2Rpc2Nvbm5lY3QsCisJLnN1c3BlbmQgPQl1c2Jfc3Rvcl9zdXNwZW5kLAorCS5yZXN1bWUgPQl1c2Jfc3Rvcl9yZXN1bWUsCisJLnJlc2V0X3Jlc3VtZSA9CXVzYl9zdG9yX3Jlc2V0X3Jlc3VtZSwKKwkucHJlX3Jlc2V0ID0JdXNiX3N0b3JfcHJlX3Jlc2V0LAorCS5wb3N0X3Jlc2V0ID0JdXNiX3N0b3JfcG9zdF9yZXNldCwKKwkuaWRfdGFibGUgPQlzZGRyNTVfdXNiX2lkcywKKwkuc29mdF91bmJpbmQgPQkxLAorfTsKKworc3RhdGljIGludCBfX2luaXQgc2RkcjU1X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gdXNiX3JlZ2lzdGVyKCZzZGRyNTVfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHNkZHI1NV9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJnNkZHI1NV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChzZGRyNTVfaW5pdCk7Cittb2R1bGVfZXhpdChzZGRyNTVfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3NkZHI1NS5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9zZGRyNTUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTgxNWEwNC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3NkZHI1NS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyogRHJpdmVyIGZvciBTYW5EaXNrIFNERFItNTUgU21hcnRNZWRpYSByZWFkZXIKLSAqIEhlYWRlciBGaWxlCi0gKgotICogQ3VycmVudCBkZXZlbG9wbWVudCBhbmQgbWFpbnRlbmFuY2UgYnk6Ci0gKiAgIChjKSAyMDAyIFNpbW9uIE11bnRvbgotICoKLSAqIFNlZSBzZGRyNTUuYyBmb3IgbW9yZSBleHBsYW5hdGlvbgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKLSAqIGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0KLSNpZm5kZWYgX1VTQl9TSFVUVExFX0VVU0JfU0REUjU1X0gKLSNkZWZpbmUgX1VTQl9TSFVUVExFX0VVU0JfU0REUjU1X0gKLQotLyogU2FuZGlzayBTRERSLTU1IHN0dWZmICovCi0KLWV4dGVybiBpbnQgc2RkcjU1X3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cyk7Ci1leHRlcm4gaW50IHNkZHI1NV9yZXNldChzdHJ1Y3QgdXNfZGF0YSAqdXMpOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2h1dHRsZV91c2JhdC5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9zaHV0dGxlX3VzYmF0LmMKaW5kZXggYWU2ZDY0ODEuLmI2MmEyODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2h1dHRsZV91c2JhdC5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2h1dHRsZV91c2JhdC5jCkBAIC00Miw2ICs0Miw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2Nkcm9tLmg+CiAKQEAgLTUyLDcgKzUzLDEwMCBAQAogI2luY2x1ZGUgInRyYW5zcG9ydC5oIgogI2luY2x1ZGUgInByb3RvY29sLmgiCiAjaW5jbHVkZSAiZGVidWcuaCIKLSNpbmNsdWRlICJzaHV0dGxlX3VzYmF0LmgiCisKK01PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBTQ00gTWljcm9zeXN0ZW1zIChhLmsuYS4gU2h1dHRsZSkgVVNCLUFUQVBJIGNhYmxlIik7CitNT0RVTEVfQVVUSE9SKCJEYW5pZWwgRHJha2UgPGRzZEBnZW50b28ub3JnPiwgUm9iZXJ0IEJhcnVjaCA8YXV0b3BoaWxlQHN0YXJiYW5kLm5ldD4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworLyogU3VwcG9ydGVkIGRldmljZSB0eXBlcyAqLworI2RlZmluZSBVU0JBVF9ERVZfSFA4MjAwCTB4MDEKKyNkZWZpbmUgVVNCQVRfREVWX0ZMQVNICQkweDAyCisKKyNkZWZpbmUgVVNCQVRfRVBQX1BPUlQJCTB4MTAKKyNkZWZpbmUgVVNCQVRfRVBQX1JFR0lTVEVSCTB4MzAKKyNkZWZpbmUgVVNCQVRfQVRBCQkweDQwCisjZGVmaW5lIFVTQkFUX0lTQQkJMHg1MAorCisvKiBDb21tYW5kcyAobmVlZCB0byBiZSBsb2dpY2FsbHkgT1InZCB3aXRoIGFuIGFjY2VzcyB0eXBlICovCisjZGVmaW5lIFVTQkFUX0NNRF9SRUFEX1JFRwkJMHgwMAorI2RlZmluZSBVU0JBVF9DTURfV1JJVEVfUkVHCQkweDAxCisjZGVmaW5lIFVTQkFUX0NNRF9SRUFEX0JMT0NLCTB4MDIKKyNkZWZpbmUgVVNCQVRfQ01EX1dSSVRFX0JMT0NLCTB4MDMKKyNkZWZpbmUgVVNCQVRfQ01EX0NPTkRfUkVBRF9CTE9DSwkweDA0CisjZGVmaW5lIFVTQkFUX0NNRF9DT05EX1dSSVRFX0JMT0NLCTB4MDUKKyNkZWZpbmUgVVNCQVRfQ01EX1dSSVRFX1JFR1MJMHgwNworCisvKiBDb21tYW5kcyAodGhlc2UgZG9uJ3QgbmVlZCBhbiBhY2Nlc3MgdHlwZSkgKi8KKyNkZWZpbmUgVVNCQVRfQ01EX0VYRUNfQ01ECTB4ODAKKyNkZWZpbmUgVVNCQVRfQ01EX1NFVF9GRUFUCTB4ODEKKyNkZWZpbmUgVVNCQVRfQ01EX1VJTwkJMHg4MgorCisvKiBNZXRob2RzIG9mIGFjY2Vzc2luZyBVSU8gcmVnaXN0ZXIgKi8KKyNkZWZpbmUgVVNCQVRfVUlPX1JFQUQJMQorI2RlZmluZSBVU0JBVF9VSU9fV1JJVEUJMAorCisvKiBRdWFsaWZpZXIgYml0cyAqLworI2RlZmluZSBVU0JBVF9RVUFMX0ZDUQkweDIwCS8qIGZ1bGwgY29tcGFyZSAqLworI2RlZmluZSBVU0JBVF9RVUFMX0FMUQkweDEwCS8qIGF1dG8gbG9hZCBzdWJjb3VudCAqLworCisvKiBVU0JBVCBGbGFzaCBNZWRpYSBzdGF0dXMgdHlwZXMgKi8KKyNkZWZpbmUgVVNCQVRfRkxBU0hfTUVESUFfTk9ORQkwCisjZGVmaW5lIFVTQkFUX0ZMQVNIX01FRElBX0NGCTEKKworLyogVVNCQVQgRmxhc2ggTWVkaWEgY2hhbmdlIHR5cGVzICovCisjZGVmaW5lIFVTQkFUX0ZMQVNIX01FRElBX1NBTUUJMAorI2RlZmluZSBVU0JBVF9GTEFTSF9NRURJQV9DSEFOR0VECTEKKworLyogVVNCQVQgQVRBIHJlZ2lzdGVycyAqLworI2RlZmluZSBVU0JBVF9BVEFfREFUQSAgICAgIDB4MTAgIC8qIHJlYWQvd3JpdGUgZGF0YSAoUi9XKSAqLworI2RlZmluZSBVU0JBVF9BVEFfRkVBVFVSRVMgIDB4MTEgIC8qIHNldCBmZWF0dXJlcyAoVykgKi8KKyNkZWZpbmUgVVNCQVRfQVRBX0VSUk9SICAgICAweDExICAvKiBlcnJvciAoUikgKi8KKyNkZWZpbmUgVVNCQVRfQVRBX1NFQ0NOVCAgICAweDEyICAvKiBzZWN0b3IgY291bnQgKFIvVykgKi8KKyNkZWZpbmUgVVNCQVRfQVRBX1NFQ05VTSAgICAweDEzICAvKiBzZWN0b3IgbnVtYmVyIChSL1cpICovCisjZGVmaW5lIFVTQkFUX0FUQV9MQkFfTUUgICAgMHgxNCAgLyogY3lsaW5kZXIgbG93IChSL1cpICovCisjZGVmaW5lIFVTQkFUX0FUQV9MQkFfSEkgICAgMHgxNSAgLyogY3lsaW5kZXIgaGlnaCAoUi9XKSAqLworI2RlZmluZSBVU0JBVF9BVEFfREVWSUNFICAgIDB4MTYgIC8qIGhlYWQvZGV2aWNlIHNlbGVjdGlvbiAoUi9XKSAqLworI2RlZmluZSBVU0JBVF9BVEFfU1RBVFVTICAgIDB4MTcgIC8qIGRldmljZSBzdGF0dXMgKFIpICovCisjZGVmaW5lIFVTQkFUX0FUQV9DTUQgICAgICAgMHgxNyAgLyogZGV2aWNlIGNvbW1hbmQgKFcpICovCisjZGVmaW5lIFVTQkFUX0FUQV9BTFRTVEFUVVMgMHgwRSAgLyogc3RhdHVzIChubyBjbGVhciBJUlEpIChSKSAqLworCisvKiBVU0JBVCBVc2VyIEkvTyBEYXRhIHJlZ2lzdGVycyAqLworI2RlZmluZSBVU0JBVF9VSU9fRVBBRAkJMHg4MCAvKiBFbmFibGUgUGVyaXBoZXJhbCBDb250cm9sIFNpZ25hbHMgKi8KKyNkZWZpbmUgVVNCQVRfVUlPX0NEVAkJMHg0MCAvKiBDYXJkIERldGVjdCAoUmVhZCBPbmx5KSAqLworCQkJCSAgICAgLyogQ0RUID0gQUNLRCAmICFVSTEgJiAhVUkwICovCisjZGVmaW5lIFVTQkFUX1VJT18xCQkweDIwIC8qIEkvTyAxICovCisjZGVmaW5lIFVTQkFUX1VJT18wCQkweDEwIC8qIEkvTyAwICovCisjZGVmaW5lIFVTQkFUX1VJT19FUFBfQVRBCTB4MDggLyogMT1FUFAgbW9kZSwgMD1BVEEgbW9kZSAqLworI2RlZmluZSBVU0JBVF9VSU9fVUkxCQkweDA0IC8qIElucHV0IDEgKi8KKyNkZWZpbmUgVVNCQVRfVUlPX1VJMAkJMHgwMiAvKiBJbnB1dCAwICovCisjZGVmaW5lIFVTQkFUX1VJT19JTlRSX0FDSwkweDAxIC8qIEludGVycnVwdCAoQVRBL0lTQSkvQWNrbm93bGVkZ2UgKEVQUCkgKi8KKworLyogVVNCQVQgVXNlciBJL08gRW5hYmxlIHJlZ2lzdGVycyAqLworI2RlZmluZSBVU0JBVF9VSU9fRFJWUlNUCTB4ODAgLyogUmVzZXQgUGVyaXBoZXJhbCAqLworI2RlZmluZSBVU0JBVF9VSU9fQUNLRAkJMHg0MCAvKiBFbmFibGUgQ2FyZCBEZXRlY3QgKi8KKyNkZWZpbmUgVVNCQVRfVUlPX09FMQkJMHgyMCAvKiBJL08gMSBzZXQ9b3V0cHV0L2Nscj1pbnB1dCAqLworCQkJCSAgICAgLyogSWYgQUNLRD0xLCBzZXQgT0UxIHRvIDEgYWxzby4gKi8KKyNkZWZpbmUgVVNCQVRfVUlPX09FMAkJMHgxMCAvKiBJL08gMCBzZXQ9b3V0cHV0L2Nscj1pbnB1dCAqLworI2RlZmluZSBVU0JBVF9VSU9fQURQUlNUCTB4MDEgLyogUmVzZXQgU0NNIGNoaXAgKi8KKworLyogVVNCQVQgRmVhdHVyZXMgKi8KKyNkZWZpbmUgVVNCQVRfRkVBVF9FVEVOCTB4ODAJLyogRXh0ZXJuYWwgdHJpZ2dlciBlbmFibGUgKi8KKyNkZWZpbmUgVVNCQVRfRkVBVF9VMQkweDA4CisjZGVmaW5lIFVTQkFUX0ZFQVRfVTAJMHgwNAorI2RlZmluZSBVU0JBVF9GRUFUX0VUMQkweDAyCisjZGVmaW5lIFVTQkFUX0ZFQVRfRVQyCTB4MDEKKworc3RydWN0IHVzYmF0X2luZm8geworCWludCBkZXZpY2V0eXBlOworCisJLyogVXNlZCBmb3IgRmxhc2ggcmVhZGVycyBvbmx5ICovCisJdW5zaWduZWQgbG9uZyBzZWN0b3JzOyAgICAgLyogdG90YWwgc2VjdG9yIGNvdW50ICovCisJdW5zaWduZWQgbG9uZyBzc2l6ZTsgICAgICAgLyogc2VjdG9yIHNpemUgaW4gYnl0ZXMgKi8KKworCXVuc2lnbmVkIGNoYXIgc2Vuc2Vfa2V5OworCXVuc2lnbmVkIGxvbmcgc2Vuc2VfYXNjOyAgIC8qIGFkZGl0aW9uYWwgc2Vuc2UgY29kZSAqLworCXVuc2lnbmVkIGxvbmcgc2Vuc2VfYXNjcTsgIC8qIGFkZGl0aW9uYWwgc2Vuc2UgY29kZSBxdWFsaWZpZXIgKi8KK307CiAKICNkZWZpbmUgc2hvcnRfcGFjayhMU0IsTVNCKSAoICgodTE2KShMU0IpKSB8ICggKCh1MTYpKE1TQikpPDw4ICkgKQogI2RlZmluZSBMU0Jfb2YocykgKChzKSYweEZGKQpAQCAtNjMsNiArMTU3LDQ4IEBACiBzdGF0aWMgaW50IHVzYmF0X2ZsYXNoX3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICogc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpOwogc3RhdGljIGludCB1c2JhdF9ocDgyMDBlX3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cyk7CiAKK3N0YXRpYyBpbnQgaW5pdF91c2JhdF9jZChzdHJ1Y3QgdXNfZGF0YSAqdXMpOworc3RhdGljIGludCBpbml0X3VzYmF0X2ZsYXNoKHN0cnVjdCB1c19kYXRhICp1cyk7CisKKworLyoKKyAqIFRoZSB0YWJsZSBvZiBkZXZpY2VzCisgKi8KKyNkZWZpbmUgVU5VU1VBTF9ERVYoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCwgXAorCQkgICAgdmVuZG9yTmFtZSwgcHJvZHVjdE5hbWUsIHVzZVByb3RvY29sLCB1c2VUcmFuc3BvcnQsIFwKKwkJICAgIGluaXRGdW5jdGlvbiwgZmxhZ3MpIFwKK3sgVVNCX0RFVklDRV9WRVIoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCksIFwKKyAgLmRyaXZlcl9pbmZvID0gKGZsYWdzKXwoVVNCX1VTX1RZUEVfU1RPUjw8MjQpIH0KKworc3RydWN0IHVzYl9kZXZpY2VfaWQgdXNiYXRfdXNiX2lkc1tdID0geworIwlpbmNsdWRlICJ1bnVzdWFsX3VzYmF0LmgiCisJeyB9CQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCB1c2JhdF91c2JfaWRzKTsKKworI3VuZGVmIFVOVVNVQUxfREVWCisKKy8qCisgKiBUaGUgZmxhZ3MgdGFibGUKKyAqLworI2RlZmluZSBVTlVTVUFMX0RFVihpZFZlbmRvciwgaWRQcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCwgXAorCQkgICAgdmVuZG9yX25hbWUsIHByb2R1Y3RfbmFtZSwgdXNlX3Byb3RvY29sLCB1c2VfdHJhbnNwb3J0LCBcCisJCSAgICBpbml0X2Z1bmN0aW9uLCBGbGFncykgXAoreyBcCisJLnZlbmRvck5hbWUgPSB2ZW5kb3JfbmFtZSwJXAorCS5wcm9kdWN0TmFtZSA9IHByb2R1Y3RfbmFtZSwJXAorCS51c2VQcm90b2NvbCA9IHVzZV9wcm90b2NvbCwJXAorCS51c2VUcmFuc3BvcnQgPSB1c2VfdHJhbnNwb3J0LAlcCisJLmluaXRGdW5jdGlvbiA9IGluaXRfZnVuY3Rpb24sCVwKK30KKworc3RhdGljIHN0cnVjdCB1c191bnVzdWFsX2RldiB1c2JhdF91bnVzdWFsX2Rldl9saXN0W10gPSB7CisjCWluY2x1ZGUgInVudXN1YWxfdXNiYXQuaCIKKwl7IH0JCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCisjdW5kZWYgVU5VU1VBTF9ERVYKKwogLyoKICAqIENvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIHByb2R1Y2UgYW4gQVRBIHJlYWQvd3JpdGUgc2VjdG9ycyBjb21tYW5kCiAgKiBVc2UgY21kPTB4MjAgZm9yIHJlYWQsIGNtZD0weDMwIGZvciB3cml0ZQpAQCAtMTY4NCwzNyArMTgyMCw2MSBAQAogCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEOwogfQogCi1pbnQgaW5pdF91c2JhdF9jZChzdHJ1Y3QgdXNfZGF0YSAqdXMpCitzdGF0aWMgaW50IGluaXRfdXNiYXRfY2Qoc3RydWN0IHVzX2RhdGEgKnVzKQogewogCXJldHVybiBpbml0X3VzYmF0KHVzLCBVU0JBVF9ERVZfSFA4MjAwKTsKIH0KIAotCi1pbnQgaW5pdF91c2JhdF9mbGFzaChzdHJ1Y3QgdXNfZGF0YSAqdXMpCitzdGF0aWMgaW50IGluaXRfdXNiYXRfZmxhc2goc3RydWN0IHVzX2RhdGEgKnVzKQogewogCXJldHVybiBpbml0X3VzYmF0KHVzLCBVU0JBVF9ERVZfRkxBU0gpOwogfQogCi1pbnQgaW5pdF91c2JhdF9wcm9iZShzdHJ1Y3QgdXNfZGF0YSAqdXMpCitzdGF0aWMgaW50IHVzYmF0X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKIHsKLQlyZXR1cm4gaW5pdF91c2JhdCh1cywgMCk7CisJc3RydWN0IHVzX2RhdGEgKnVzOworCWludCByZXN1bHQ7CisKKwlyZXN1bHQgPSB1c2Jfc3Rvcl9wcm9iZTEoJnVzLCBpbnRmLCBpZCwKKwkJCShpZCAtIHVzYmF0X3VzYl9pZHMpICsgdXNiYXRfdW51c3VhbF9kZXZfbGlzdCk7CisJaWYgKHJlc3VsdCkKKwkJcmV0dXJuIHJlc3VsdDsKKworCS8qIFRoZSBhY3R1YWwgdHJhbnNwb3J0IHdpbGwgYmUgZGV0ZXJtaW5lZCBsYXRlciBieSB0aGUKKwkgKiBpbml0aWFsaXphdGlvbiByb3V0aW5lOyB0aGlzIGlzIGp1c3QgYSBwbGFjZWhvbGRlci4KKwkgKi8KKwl1cy0+dHJhbnNwb3J0X25hbWUgPSAiU2h1dHRsZSBVU0JBVCI7CisJdXMtPnRyYW5zcG9ydCA9IHVzYmF0X2ZsYXNoX3RyYW5zcG9ydDsKKwl1cy0+dHJhbnNwb3J0X3Jlc2V0ID0gdXNiX3N0b3JfQ0JfcmVzZXQ7CisJdXMtPm1heF9sdW4gPSAxOworCisJcmVzdWx0ID0gdXNiX3N0b3JfcHJvYmUyKHVzKTsKKwlyZXR1cm4gcmVzdWx0OwogfQogCi0vKgotICogRGVmYXVsdCB0cmFuc3BvcnQgZnVuY3Rpb24uIEF0dGVtcHRzIHRvIGRldGVjdCB3aGljaCB0cmFuc3BvcnQgZnVuY3Rpb24KLSAqIHNob3VsZCBiZSBjYWxsZWQsIG1ha2VzIGl0IHRoZSBuZXcgZGVmYXVsdCwgYW5kIGNhbGxzIGl0LgotICoKLSAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG5ldmVyIGJlIGNhbGxlZC4gT3VyIHVzYmF0X2luaXQoKSBmdW5jdGlvbiBkZXRlY3RzIHRoZQotICogZGV2aWNlIHR5cGUgYW5kIGNoYW5nZXMgdGhlIHVzLT50cmFuc3BvcnQgcHRyIHRvIHRoZSB0cmFuc3BvcnQgZnVuY3Rpb24KLSAqIHJlbGV2YW50IHRvIHRoZSBkZXZpY2UuCi0gKiBIb3dldmVyLCB3ZSdsbCBzdXBwb3J0IHRoaXMgaW1wb3NzaWJsZSg/KSBjYXNlIGFueXdheS4KLSAqLwotaW50IHVzYmF0X3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cykKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB1c2JhdF9kcml2ZXIgPSB7CisJLm5hbWUgPQkJInVtcy11c2JhdCIsCisJLnByb2JlID0JdXNiYXRfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQl1c2Jfc3Rvcl9kaXNjb25uZWN0LAorCS5zdXNwZW5kID0JdXNiX3N0b3Jfc3VzcGVuZCwKKwkucmVzdW1lID0JdXNiX3N0b3JfcmVzdW1lLAorCS5yZXNldF9yZXN1bWUgPQl1c2Jfc3Rvcl9yZXNldF9yZXN1bWUsCisJLnByZV9yZXNldCA9CXVzYl9zdG9yX3ByZV9yZXNldCwKKwkucG9zdF9yZXNldCA9CXVzYl9zdG9yX3Bvc3RfcmVzZXQsCisJLmlkX3RhYmxlID0JdXNiYXRfdXNiX2lkcywKKwkuc29mdF91bmJpbmQgPQkxLAorfTsKKworc3RhdGljIGludCBfX2luaXQgdXNiYXRfaW5pdCh2b2lkKQogewotCXN0cnVjdCB1c2JhdF9pbmZvICppbmZvID0gKHN0cnVjdCB1c2JhdF9pbmZvKikgKHVzLT5leHRyYSk7Ci0KLQlpZiAodXNiYXRfc2V0X3RyYW5zcG9ydCh1cywgaW5mbywgMCkpCi0JCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7Ci0KLQlyZXR1cm4gdXMtPnRyYW5zcG9ydChzcmIsIHVzKTsJCisJcmV0dXJuIHVzYl9yZWdpc3RlcigmdXNiYXRfZHJpdmVyKTsKIH0KKworc3RhdGljIHZvaWQgX19leGl0IHVzYmF0X2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlcigmdXNiYXRfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQodXNiYXRfaW5pdCk7Cittb2R1bGVfZXhpdCh1c2JhdF9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2h1dHRsZV91c2JhdC5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9zaHV0dGxlX3VzYmF0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4YmZjNDMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9zaHV0dGxlX3VzYmF0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMjMgKzAsMCBAQAotLyogRHJpdmVyIGZvciBTQ00gTWljcm9zeXN0ZW1zIFVTQi1BVEFQSSBjYWJsZQotICogSGVhZGVyIEZpbGUKLSAqCi0gKiBDdXJyZW50IGRldmVsb3BtZW50IGFuZCBtYWludGVuYW5jZSBieToKLSAqICAgKGMpIDIwMDAgUm9iZXJ0IEJhcnVjaCAoYXV0b3BoaWxlQGRvbC5uZXQpCi0gKiAgIChjKSAyMDA0LCAyMDA1IERhbmllbCBEcmFrZSA8ZHNkQGdlbnRvby5vcmc+Ci0gKgotICogU2VlIHNodXR0bGVfdXNiYXQuYyBmb3IgbW9yZSBleHBsYW5hdGlvbgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKLSAqIGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0KLSNpZm5kZWYgX1VTQl9TSFVUVExFX1VTQkFUX0gKLSNkZWZpbmUgX1VTQl9TSFVUVExFX1VTQkFUX0gKLQotLyogU3VwcG9ydGVkIGRldmljZSB0eXBlcyAqLwotI2RlZmluZSBVU0JBVF9ERVZfSFA4MjAwCTB4MDEKLSNkZWZpbmUgVVNCQVRfREVWX0ZMQVNICQkweDAyCi0KLSNkZWZpbmUgVVNCQVRfRVBQX1BPUlQJCTB4MTAKLSNkZWZpbmUgVVNCQVRfRVBQX1JFR0lTVEVSCTB4MzAKLSNkZWZpbmUgVVNCQVRfQVRBCQkweDQwCi0jZGVmaW5lIFVTQkFUX0lTQQkJMHg1MAotCi0vKiBDb21tYW5kcyAobmVlZCB0byBiZSBsb2dpY2FsbHkgT1InZCB3aXRoIGFuIGFjY2VzcyB0eXBlICovCi0jZGVmaW5lIFVTQkFUX0NNRF9SRUFEX1JFRwkJMHgwMAotI2RlZmluZSBVU0JBVF9DTURfV1JJVEVfUkVHCQkweDAxCi0jZGVmaW5lIFVTQkFUX0NNRF9SRUFEX0JMT0NLCTB4MDIKLSNkZWZpbmUgVVNCQVRfQ01EX1dSSVRFX0JMT0NLCTB4MDMKLSNkZWZpbmUgVVNCQVRfQ01EX0NPTkRfUkVBRF9CTE9DSwkweDA0Ci0jZGVmaW5lIFVTQkFUX0NNRF9DT05EX1dSSVRFX0JMT0NLCTB4MDUKLSNkZWZpbmUgVVNCQVRfQ01EX1dSSVRFX1JFR1MJMHgwNwotCi0vKiBDb21tYW5kcyAodGhlc2UgZG9uJ3QgbmVlZCBhbiBhY2Nlc3MgdHlwZSkgKi8KLSNkZWZpbmUgVVNCQVRfQ01EX0VYRUNfQ01ECTB4ODAKLSNkZWZpbmUgVVNCQVRfQ01EX1NFVF9GRUFUCTB4ODEKLSNkZWZpbmUgVVNCQVRfQ01EX1VJTwkJMHg4MgotCi0vKiBNZXRob2RzIG9mIGFjY2Vzc2luZyBVSU8gcmVnaXN0ZXIgKi8KLSNkZWZpbmUgVVNCQVRfVUlPX1JFQUQJMQotI2RlZmluZSBVU0JBVF9VSU9fV1JJVEUJMAotCi0vKiBRdWFsaWZpZXIgYml0cyAqLwotI2RlZmluZSBVU0JBVF9RVUFMX0ZDUQkweDIwCS8qIGZ1bGwgY29tcGFyZSAqLwotI2RlZmluZSBVU0JBVF9RVUFMX0FMUQkweDEwCS8qIGF1dG8gbG9hZCBzdWJjb3VudCAqLwotCi0vKiBVU0JBVCBGbGFzaCBNZWRpYSBzdGF0dXMgdHlwZXMgKi8KLSNkZWZpbmUgVVNCQVRfRkxBU0hfTUVESUFfTk9ORQkwCi0jZGVmaW5lIFVTQkFUX0ZMQVNIX01FRElBX0NGCTEKLQotLyogVVNCQVQgRmxhc2ggTWVkaWEgY2hhbmdlIHR5cGVzICovCi0jZGVmaW5lIFVTQkFUX0ZMQVNIX01FRElBX1NBTUUJMAotI2RlZmluZSBVU0JBVF9GTEFTSF9NRURJQV9DSEFOR0VECTEKLQotLyogVVNCQVQgQVRBIHJlZ2lzdGVycyAqLwotI2RlZmluZSBVU0JBVF9BVEFfREFUQSAgICAgIDB4MTAgIC8qIHJlYWQvd3JpdGUgZGF0YSAoUi9XKSAqLwotI2RlZmluZSBVU0JBVF9BVEFfRkVBVFVSRVMgIDB4MTEgIC8qIHNldCBmZWF0dXJlcyAoVykgKi8KLSNkZWZpbmUgVVNCQVRfQVRBX0VSUk9SICAgICAweDExICAvKiBlcnJvciAoUikgKi8KLSNkZWZpbmUgVVNCQVRfQVRBX1NFQ0NOVCAgICAweDEyICAvKiBzZWN0b3IgY291bnQgKFIvVykgKi8KLSNkZWZpbmUgVVNCQVRfQVRBX1NFQ05VTSAgICAweDEzICAvKiBzZWN0b3IgbnVtYmVyIChSL1cpICovCi0jZGVmaW5lIFVTQkFUX0FUQV9MQkFfTUUgICAgMHgxNCAgLyogY3lsaW5kZXIgbG93IChSL1cpICovCi0jZGVmaW5lIFVTQkFUX0FUQV9MQkFfSEkgICAgMHgxNSAgLyogY3lsaW5kZXIgaGlnaCAoUi9XKSAqLwotI2RlZmluZSBVU0JBVF9BVEFfREVWSUNFICAgIDB4MTYgIC8qIGhlYWQvZGV2aWNlIHNlbGVjdGlvbiAoUi9XKSAqLwotI2RlZmluZSBVU0JBVF9BVEFfU1RBVFVTICAgIDB4MTcgIC8qIGRldmljZSBzdGF0dXMgKFIpICovCi0jZGVmaW5lIFVTQkFUX0FUQV9DTUQgICAgICAgMHgxNyAgLyogZGV2aWNlIGNvbW1hbmQgKFcpICovCi0jZGVmaW5lIFVTQkFUX0FUQV9BTFRTVEFUVVMgMHgwRSAgLyogc3RhdHVzIChubyBjbGVhciBJUlEpIChSKSAqLwotCi0vKiBVU0JBVCBVc2VyIEkvTyBEYXRhIHJlZ2lzdGVycyAqLwotI2RlZmluZSBVU0JBVF9VSU9fRVBBRAkJMHg4MCAvKiBFbmFibGUgUGVyaXBoZXJhbCBDb250cm9sIFNpZ25hbHMgKi8KLSNkZWZpbmUgVVNCQVRfVUlPX0NEVAkJMHg0MCAvKiBDYXJkIERldGVjdCAoUmVhZCBPbmx5KSAqLwotCQkJCSAgICAgLyogQ0RUID0gQUNLRCAmICFVSTEgJiAhVUkwICovCi0jZGVmaW5lIFVTQkFUX1VJT18xCQkweDIwIC8qIEkvTyAxICovCi0jZGVmaW5lIFVTQkFUX1VJT18wCQkweDEwIC8qIEkvTyAwICovCi0jZGVmaW5lIFVTQkFUX1VJT19FUFBfQVRBCTB4MDggLyogMT1FUFAgbW9kZSwgMD1BVEEgbW9kZSAqLwotI2RlZmluZSBVU0JBVF9VSU9fVUkxCQkweDA0IC8qIElucHV0IDEgKi8KLSNkZWZpbmUgVVNCQVRfVUlPX1VJMAkJMHgwMiAvKiBJbnB1dCAwICovCi0jZGVmaW5lIFVTQkFUX1VJT19JTlRSX0FDSwkweDAxIC8qIEludGVycnVwdCAoQVRBL0lTQSkvQWNrbm93bGVkZ2UgKEVQUCkgKi8KLQotLyogVVNCQVQgVXNlciBJL08gRW5hYmxlIHJlZ2lzdGVycyAqLwotI2RlZmluZSBVU0JBVF9VSU9fRFJWUlNUCTB4ODAgLyogUmVzZXQgUGVyaXBoZXJhbCAqLwotI2RlZmluZSBVU0JBVF9VSU9fQUNLRAkJMHg0MCAvKiBFbmFibGUgQ2FyZCBEZXRlY3QgKi8KLSNkZWZpbmUgVVNCQVRfVUlPX09FMQkJMHgyMCAvKiBJL08gMSBzZXQ9b3V0cHV0L2Nscj1pbnB1dCAqLwotCQkJCSAgICAgLyogSWYgQUNLRD0xLCBzZXQgT0UxIHRvIDEgYWxzby4gKi8KLSNkZWZpbmUgVVNCQVRfVUlPX09FMAkJMHgxMCAvKiBJL08gMCBzZXQ9b3V0cHV0L2Nscj1pbnB1dCAqLwotI2RlZmluZSBVU0JBVF9VSU9fQURQUlNUCTB4MDEgLyogUmVzZXQgU0NNIGNoaXAgKi8KLQotLyogVVNCQVQgRmVhdHVyZXMgKi8KLSNkZWZpbmUgVVNCQVRfRkVBVF9FVEVOCTB4ODAJLyogRXh0ZXJuYWwgdHJpZ2dlciBlbmFibGUgKi8KLSNkZWZpbmUgVVNCQVRfRkVBVF9VMQkweDA4Ci0jZGVmaW5lIFVTQkFUX0ZFQVRfVTAJMHgwNAotI2RlZmluZSBVU0JBVF9GRUFUX0VUMQkweDAyCi0jZGVmaW5lIFVTQkFUX0ZFQVRfRVQyCTB4MDEKLQotZXh0ZXJuIGludCB1c2JhdF90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpOwotZXh0ZXJuIGludCBpbml0X3VzYmF0X2NkKHN0cnVjdCB1c19kYXRhICp1cyk7Ci1leHRlcm4gaW50IGluaXRfdXNiYXRfZmxhc2goc3RydWN0IHVzX2RhdGEgKnVzKTsKLWV4dGVybiBpbnQgaW5pdF91c2JhdF9wcm9iZShzdHJ1Y3QgdXNfZGF0YSAqdXMpOwotCi1zdHJ1Y3QgdXNiYXRfaW5mbyB7Ci0JaW50IGRldmljZXR5cGU7Ci0KLQkvKiBVc2VkIGZvciBGbGFzaCByZWFkZXJzIG9ubHkgKi8KLQl1bnNpZ25lZCBsb25nIHNlY3RvcnM7ICAgICAvKiB0b3RhbCBzZWN0b3IgY291bnQgKi8KLQl1bnNpZ25lZCBsb25nIHNzaXplOyAgICAgICAvKiBzZWN0b3Igc2l6ZSBpbiBieXRlcyAqLwotCi0JdW5zaWduZWQgY2hhciBzZW5zZV9rZXk7Ci0JdW5zaWduZWQgbG9uZyBzZW5zZV9hc2M7ICAgLyogYWRkaXRpb25hbCBzZW5zZSBjb2RlICovCi0JdW5zaWduZWQgbG9uZyBzZW5zZV9hc2NxOyAgLyogYWRkaXRpb25hbCBzZW5zZSBjb2RlIHF1YWxpZmllciAqLwotfTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3RyYW5zcG9ydC5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS90cmFuc3BvcnQuYwppbmRleCBmYjY1ZDIyMS4uZDQ4Yzg1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS90cmFuc3BvcnQuYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3RyYW5zcG9ydC5jCkBAIC0yMjAsNiArMjIwLDcgQEAKIAkJc3RhdHVzID0gdXMtPmN1cnJlbnRfdXJiLT5hY3R1YWxfbGVuZ3RoOwogCXJldHVybiBzdGF0dXM7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc3Rvcl9jb250cm9sX21zZyk7CiAKIC8qIFRoaXMgaXMgYSB2ZXJzaW9uIG9mIHVzYl9jbGVhcl9oYWx0KCkgdGhhdCBhbGxvd3MgZWFybHkgdGVybWluYXRpb24gYW5kCiAgKiBkb2Vzbid0IHJlYWQgdGhlIHN0YXR1cyBmcm9tIHRoZSBkZXZpY2UgLS0gdGhpcyBpcyBiZWNhdXNlIHNvbWUgZGV2aWNlcwpAQCAtMjU0LDYgKzI1NSw3IEBACiAJVVNfREVCVUdQKCIlczogcmVzdWx0ID0gJWRcbiIsIF9fZnVuY19fLCByZXN1bHQpOwogCXJldHVybiByZXN1bHQ7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc3Rvcl9jbGVhcl9oYWx0KTsKIAogCiAvKgpAQCAtMzUyLDYgKzM1NCw3IEBACiAJcmV0dXJuIGludGVycHJldF91cmJfcmVzdWx0KHVzLCBwaXBlLCBzaXplLCByZXN1bHQsCiAJCQl1cy0+Y3VycmVudF91cmItPmFjdHVhbF9sZW5ndGgpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX3N0b3JfY3RybF90cmFuc2Zlcik7CiAKIC8qCiAgKiBSZWNlaXZlIG9uZSBpbnRlcnJ1cHQgYnVmZmVyLCB3aXRob3V0IHRpbWVvdXRzLCBidXQgYWxsb3dpbmcgZWFybHkKQEAgLTQwNyw2ICs0MTAsNyBAQAogCXJldHVybiBpbnRlcnByZXRfdXJiX3Jlc3VsdCh1cywgcGlwZSwgbGVuZ3RoLCByZXN1bHQsIAogCQkJdXMtPmN1cnJlbnRfdXJiLT5hY3R1YWxfbGVuZ3RoKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfYnVmKTsKIAogLyoKICAqIFRyYW5zZmVyIGEgc2NhdHRlci1nYXRoZXIgbGlzdCB2aWEgYnVsayB0cmFuc2ZlcgpAQCAtNDc0LDYgKzQ3OCw3IEBACiAJc2NzaV9zZXRfcmVzaWQoc3JiLCBzY3NpX2J1ZmZsZW4oc3JiKSAtIHBhcnRpYWwpOwogCXJldHVybiByZXN1bHQ7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc3Rvcl9idWxrX3NyYik7CiAKIC8qCiAgKiBUcmFuc2ZlciBhbiBlbnRpcmUgU0NTSSBjb21tYW5kJ3Mgd29ydGggb2YgZGF0YSBwYXlsb2FkIG92ZXIgdGhlIGJ1bGsKQEAgLTUwOSw2ICs1MTQsNyBAQAogCQkqcmVzaWR1YWwgPSBsZW5ndGhfbGVmdDsKIAlyZXR1cm4gcmVzdWx0OwogfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX3N0b3JfYnVsa190cmFuc2Zlcl9zZyk7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogVHJhbnNwb3J0IHJvdXRpbmVzCkBAIC05NDAsNiArOTQ2LDcgQEAKIAkJdXNiX3N0b3JfY2xlYXJfaGFsdCh1cywgcGlwZSk7CiAJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQ7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc3Rvcl9DQl90cmFuc3BvcnQpOwogCiAvKgogICogQnVsayBvbmx5IHRyYW5zcG9ydApAQCAtMTE1Niw2ICsxMTYzLDcgQEAKIAkvKiB3ZSBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUsIGJ1dCBpZiB3ZSBkbywgd2UncmUgaW4gdHJvdWJsZSAqLwogCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc3Rvcl9CdWxrX3RyYW5zcG9ydCk7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogUmVzZXQgcm91dGluZXMKQEAgLTEyMzAsNiArMTIzOCw3IEBACiAJCQkJIFVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSwKIAkJCQkgMCwgdXMtPmlmbnVtLCB1cy0+aW9idWYsIENCX1JFU0VUX0NNRF9TSVpFKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9zdG9yX0NCX3Jlc2V0KTsKIAogLyogVGhpcyBpc3N1ZXMgYSBCdWxrLW9ubHkgUmVzZXQgdG8gdGhlIGRldmljZSBpbiBxdWVzdGlvbiwgaW5jbHVkaW5nCiAgKiBjbGVhcmluZyB0aGUgc3Vic2VxdWVudCBlbmRwb2ludCBoYWx0cyB0aGF0IG1heSBvY2N1ci4KQEAgLTEyNDIsNiArMTI1MSw3IEBACiAJCQkJIFVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSwKIAkJCQkgMCwgdXMtPmlmbnVtLCBOVUxMLCAwKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9zdG9yX0J1bGtfcmVzZXQpOwogCiAvKiBJc3N1ZSBhIFVTQiBwb3J0IHJlc2V0IHRvIHRoZSBkZXZpY2UuICBUaGUgY2FsbGVyIG11c3Qgbm90IGhvbGQKICAqIHVzLT5kZXZfbXV0ZXguCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2N5cHJlc3NfYXRhY2IuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9hbGF1ZGEuaApzaW1pbGFyaXR5IGluZGV4IDYwJQpjb3B5IGZyb20gZHJpdmVycy91c2Ivc3RvcmFnZS9jeXByZXNzX2F0YWNiLmgKY29weSB0byBkcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfYWxhdWRhLmgKaW5kZXggZmJhZGE4OS4uOGM0MTJmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9jeXByZXNzX2F0YWNiLmgKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2FsYXVkYS5oCkBAIC0xLDggKzEsNCBAQAotLyoKLSAqIFN1cHBvcnQgZm9yIGVtdWxhdGluZyBTQVQgKGF0YSBwYXNzIHRocm91Z2gpIG9uIGRldmljZXMgYmFzZWQKLSAqICAgICAgIG9uIHRoZSBDeXByZXNzIFVTQi9BVEEgYnJpZGdlIHN1cHBvcnRpbmcgQVRBQ0IuCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA4IE1hdHRoaWV1IENhc3RldCAoY2FzdGV0Lm1hdHRoaWV1QGZyZWUuZnIpCisvKiBVbnVzdWFsIERldmljZXMgRmlsZSBmb3IgdGhlIEFsYXVkYS1iYXNlZCBjYXJkIHJlYWRlcnMKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCkBAIC0xOSw3ICsxNSwxNyBAQAogICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKi8KIAotI2lmbmRlZiBfQ1lQUkVTU19BVEFDQl9IXwotI2RlZmluZSBfQ1lQUkVTU19BVEFDQl9IXwotZXh0ZXJuIHZvaWQgY3lwcmVzc19hdGFjYl9wYXNzdGhyb3VnaChzdHJ1Y3Qgc2NzaV9jbW5kKiwgc3RydWN0IHVzX2RhdGEqKTsKLSNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSkgfHwgXAorCQlkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREFfTU9EVUxFKQorCitVTlVTVUFMX0RFViggIDB4MDU4NCwgMHgwMDA4LCAweDAxMDIsIDB4MDEwMiwKKwkJIkZ1amlmaWxtIiwKKwkJIkRQQy1SMSAoQWxhdWRhKSIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0FMQVVEQSwgaW5pdF9hbGF1ZGEsIDApLAorCitVTlVTVUFMX0RFViggIDB4MDdiNCwgMHgwMTBhLCAweDAxMDIsIDB4MDEwMiwKKwkJIk9seW1wdXMiLAorCQkiTUFVU0ItMTAgKEFsYXVkYSkiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9BTEFVREEsIGluaXRfYWxhdWRhLCAwKSwKKworI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSkgfHwgLi4uICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfY3lwcmVzcy5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2N5cHJlc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGJlNmQ3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2N5cHJlc3MuaApAQCAtMCwwICsxLDM0IEBACisvKiBVbnVzdWFsIERldmljZXMgRmlsZSBmb3IgZGV2aWNlcyBiYXNlZCBvbiB0aGUgQ3lwcmVzcyBVU0IvQVRBIGJyaWRnZQorICoJd2l0aCBzdXBwb3J0IGZvciBBVEFDQgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCKSB8fCBcCisJCWRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0JfTU9EVUxFKQorCisvKiBDWTdDNjgzMDAgOiBzdXBwb3J0IGF0YWNiICovCitVTlVTVUFMX0RFViggIDB4MDRiNCwgMHg2ODMwLCAweDAwMDAsIDB4OTk5OSwKKwkJIkN5cHJlc3MiLAorCQkiQ3lwcmVzcyBBVDJMUCIsCisJCVVTX1NDX0NZUF9BVEFDQiwgVVNfUFJfREVWSUNFLCBOVUxMLCAwKSwKKworLyogQ1k3QzY4MzEwIDogc3VwcG9ydCBhdGFjYiBhbmQgYXRhY2IyICovCitVTlVTVUFMX0RFViggIDB4MDRiNCwgMHg2ODMxLCAweDAwMDAsIDB4OTk5OSwKKwkJIkN5cHJlc3MiLAorCQkiQ3lwcmVzcyBJU0QtMzAwTFAiLAorCQlVU19TQ19DWVBfQVRBQ0IsIFVTX1BSX0RFVklDRSwgTlVMTCwgMCksCisKKyNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCKSB8fCAuLi4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kYXRhZmFiLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGF0YWZhYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5Mjk4Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGF0YWZhYi5oCkBAIC0wLDAgKzEsOTggQEAKKy8qIFVudXN1YWwgRGV2aWNlcyBGaWxlIGZvciB0aGUgRGF0YWZhYiBVU0IgQ29tcGFjdCBGbGFzaCByZWFkZXIKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWYgZGVmaW5lZChDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQikgfHwgXAorCQlkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCX01PRFVMRSkKKworVU5VU1VBTF9ERVYoICAweDA3YzQsIDB4YTAwMCwgMHgwMDAwLCAweDAwMTUsCisJCSJEYXRhZmFiIiwKKwkJIk1EQ0ZFLUIgVVNCIENGIFJlYWRlciIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0RBVEFGQUIsIE5VTEwsCisJCTApLAorCisvKgorICogVGhlIGZvbGxvd2luZyBEYXRhZmFiLWJhc2VkIGRldmljZXMgbWF5IG9yIG1heSBub3Qgd29yaworICogdXNpbmcgdGhlIGN1cnJlbnQgZHJpdmVyLi4udGhlIDB4ZmZmZiBpcyBhcmJpdHJhcnkgc2luY2UgSQorICogZG9uJ3Qga25vdyB3aGF0IGRldmljZSB2ZXJzaW9ucyBleGlzdCBmb3IgdGhlc2UgZ3V5cy4KKyAqCisgKiBUaGUgMHhhMDAzIGFuZCAweGEwMDQgZGV2aWNlcyBpbiBwYXJ0aWN1bGFyIEknbSBjdXJpb3VzIGFib3V0LgorICogSSdtIHRvbGQgdGhleSBleGlzdCBidXQgc28gZmFyIG5vYm9keSBoYXMgY29tZSBmb3J3YXJkIHRvIHNheSB0aGF0CisgKiB0aGV5IHdvcmsgd2l0aCB0aGlzIGRyaXZlci4gIEdpdmVuIHRoZSBzdWNjZXNzIHdlJ3ZlIGhhZCBnZXR0aW5nCisgKiBvdGhlciBEYXRhZmFiLWJhc2VkIGNhcmRzIG9wZXJhdGlvbmFsIHdpdGggdGhpcyBkcml2ZXIsIEkndmUgZGVjaWRlZAorICogdG8gbGVhdmUgdGhlc2UgdHdvIGRldmljZXMgaW4gdGhlIGxpc3QuCisgKi8KK1VOVVNVQUxfREVWKCAweDA3YzQsIDB4YTAwMSwgMHgwMDAwLCAweGZmZmYsCisJCSJTSUlHL0RhdGFmYWIiLAorCQkiU0lJRy9EYXRhZmFiIE1lbW9yeSBTdGljaytDRiBSZWFkZXIvV3JpdGVyIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfREFUQUZBQiwgTlVMTCwKKwkJMCksCisKKy8qIFJlcG9ydGVkIGJ5IEpvc2VmIFJlaXNpbmdlciA8am9zZWYucmVpc2luZ2VyQG5ldGNvbG9nbmUuZGU+ICovCitVTlVTVUFMX0RFViggMHgwN2M0LCAweGEwMDIsIDB4MDAwMCwgMHhmZmZmLAorCQkiRGF0YWZhYi9Vbmtub3duIiwKKwkJIk1EMi9NRDMgRGlzayBlbmNsb3N1cmUiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9EQVRBRkFCLCBOVUxMLAorCQlVU19GTF9TSU5HTEVfTFVOKSwKKworVU5VU1VBTF9ERVYoIDB4MDdjNCwgMHhhMDAzLCAweDAwMDAsIDB4ZmZmZiwKKwkJIkRhdGFmYWIvVW5rbm93biIsCisJCSJEYXRhZmFiLWJhc2VkIFJlYWRlciIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0RBVEFGQUIsIE5VTEwsCisJCTApLAorCitVTlVTVUFMX0RFViggMHgwN2M0LCAweGEwMDQsIDB4MDAwMCwgMHhmZmZmLAorCQkiRGF0YWZhYi9Vbmtub3duIiwKKwkJIkRhdGFmYWItYmFzZWQgUmVhZGVyIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfREFUQUZBQiwgTlVMTCwKKwkJMCksCisKK1VOVVNVQUxfREVWKCAweDA3YzQsIDB4YTAwNSwgMHgwMDAwLCAweGZmZmYsCisJCSJQTlkvRGF0YWZhYiIsCisJCSJQTlkvRGF0YWZhYiBDRitTTSBSZWFkZXIiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9EQVRBRkFCLCBOVUxMLAorCQkwKSwKKworVU5VU1VBTF9ERVYoIDB4MDdjNCwgMHhhMDA2LCAweDAwMDAsIDB4ZmZmZiwKKwkJIlNpbXBsZSBUZWNoL0RhdGFmYWIiLAorCQkiU2ltcGxlIFRlY2gvRGF0YWZhYiBDRitTTSBSZWFkZXIiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9EQVRBRkFCLCBOVUxMLAorCQkwKSwKKworLyogU3VibWl0dGVkIGJ5IE9sYWYgSGVyaW5nIDxvbGhAc3VzZS5kZT4gKi8KK1VOVVNVQUxfREVWKCAgMHgwN2M0LCAweGExMDksIDB4MDAwMCwgMHhmZmZmLAorCQkiRGF0YWZhYiBTeXN0ZW1zLCBJbmMuIiwKKwkJIlVTQiB0byBDRiArIFNNIENvbWJvIChMQzEpIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfREFUQUZBQiwgTlVMTCwKKwkJMCksCisKKy8qIFJlcG9ydGVkIGJ5IEZlbGl4IE1vZWxsZXIgPGZlbGl4QGRlcmtsZWNrcy5kZT4KKyAqIGluIEdlcm1hbnkgdGhpcyBpcyBzb2xkIGJ5IEhhbWEgd2l0aCB0aGUgcHJvZHVjdG51bWJlciA0Njk1MgorICogYXMgIkR1YWxTbG90IENvbXBhY3RGbGFzaChUTSkgJiBNU3RpY2sgRHJpdmUgVVNCIgorICovCitVTlVTVUFMX0RFViggIDB4MDdjNCwgMHhhMTBiLCAweDAwMDAsIDB4ZmZmZiwKKwkJIkRhdGFGYWIgU3lzdGVtcyBJbmMuIiwKKwkJIlVTQiBDRitNUyIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0RBVEFGQUIsIE5VTEwsCisJCTApLAorCitVTlVTVUFMX0RFViggMHgwYzBiLCAweGExMDksIDB4MDAwMCwgMHhmZmZmLAorCQkiQWNvbWRhdGEiLAorCQkiQ0YiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9EQVRBRkFCLCBOVUxMLAorCQlVU19GTF9TSU5HTEVfTFVOKSwKKworI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIpIHx8IC4uLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RldnMuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kZXZzLmgKaW5kZXggY2ZkZTc0YS4uMWMxZjY0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RldnMuaAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGV2cy5oCkBAIC01Myw2ICs1MywxMSBAQAogICogYXMgb3Bwb3NlZCB0byBkZXZpY2VzIHRoYXQgZG8gc29tZXRoaW5nIHN0cmFuZ2VseSBvciB3cm9uZ2x5LgogICovCiAKKyNpZiAhZGVmaW5lZChDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5KSAmJiBcCisJCSFkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDlfTU9EVUxFKQorI2RlZmluZSBOT19TRERSMDkKKyNlbmRpZgorCiAvKiBwYXRjaCBzdWJtaXR0ZWQgYnkgVml2aWFuIEJyZWdpZXIgPFZpdmlhbi5CcmVnaWVyQGltYWcuZnI+CiAgKi8KIFVOVVNVQUxfREVWKCAgMHgwM2ViLCAweDIwMDIsIDB4MDEwMCwgMHgwMTAwLApAQCAtODAsMTggKzg1LDYgQEAKIAkJIkNELVdyaXRlcisiLAogCQlVU19TQ184MDcwLCBVU19QUl9DQiwgTlVMTCwgMCksCiAKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQKLVVOVVNVQUxfREVWKCAgMHgwM2YwLCAweDAyMDcsIDB4MDAwMSwgMHgwMDAxLAotCQkiSFAiLAotCQkiQ0QtV3JpdGVyKyA4MjAwZSIsCi0JCVVTX1NDXzgwNzAsIFVTX1BSX1VTQkFULCBpbml0X3VzYmF0X2NkLCAwKSwKLQotVU5VU1VBTF9ERVYoICAweDAzZjAsIDB4MDMwNywgMHgwMDAxLCAweDAwMDEsCi0JCSJIUCIsCi0JCSJDRC1Xcml0ZXIrIENELTRlIiwKLQkJVVNfU0NfODA3MCwgVVNfUFJfVVNCQVQsIGluaXRfdXNiYXRfY2QsIDApLAotI2VuZGlmCi0KIC8qIFJlcG9ydGVkIGJ5IEJlbiBFZnJvcyA8YmVuQHBjLWRvY3Rvci5jb20+ICovCiBVTlVTVUFMX0RFViggIDB4MDNmMCwgMHgwNzBjLCAweDAwMDAsIDB4MDAwMCwKIAkJIkhQIiwKQEAgLTI0NiwxMiArMjM5LDcgQEAKIAkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCiAJCVVTX0ZMX1NJTkdMRV9MVU4gKSwKIAotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkKLVVOVVNVQUxfREVWKCAgMHgwNDM2LCAweDAwMDUsIDB4MDEwMCwgMHgwMTAwLAotCQkiTWljcm90ZWNoIiwKLQkJIkNhbWVyYU1hdGUgKERQQ01fVVNCKSIsCi0gCQlVU19TQ19TQ1NJLCBVU19QUl9EUENNX1VTQiwgTlVMTCwgMCApLAotI2Vsc2UKKyNpZmRlZiBOT19TRERSMDkKIFVOVVNVQUxfREVWKCAgMHgwNDM2LCAweDAwMDUsIDB4MDEwMCwgMHgwMTAwLAogCQkiTWljcm90ZWNoIiwKIAkJIkNhbWVyYU1hdGUiLApAQCAtMjg4LDEzICsyNzYsNiBAQAogCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKIAkJVVNfRkxfTk9UX0xPQ0tBQkxFICksCiAKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEKLVVOVVNVQUxfREVWKCAgMHgwNDVhLCAweDUyMTAsIDB4MDEwMSwgMHgwMTAxLAotCQkiUmlvIiwKLQkJIlJpbyBLYXJtYSIsCi0JCVVTX1NDX1NDU0ksIFVTX1BSX0tBUk1BLCByaW9fa2FybWFfaW5pdCwgMCksCi0jZW5kaWYKLQogLyogUmVwb3J0ZWQgYnkgVGFtYXMgS2VyZWNzZW4gPGtlcmVjc2VuQGJpZ2Zvb3QuY29tPgogICogT2J2aW91c2x5IHRoZSBQUk9NIGhhcyBub3QgYmVlbiBjdXN0b21pemVkIGJ5IHRoZSBWQVI7CiAgKiB0aGUgVmVuZG9yIGFuZCBQcm9kdWN0IHN0cmluZyBkZXNjcmlwdG9ycyBhcmU6CkBAIC0zNzUsMjIgKzM1Niw2IEBACiAJCVVTX1NDX0RFVklDRSwgVVNfUFJfQ0IsIE5VTEwsCiAJCVVTX0ZMX01BWF9TRUNUT1JTX01JTiksCiAKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQgotLyogQ1k3QzY4MzAwIDogc3VwcG9ydCBhdGFjYiAqLwotVU5VU1VBTF9ERVYoICAweDA0YjQsIDB4NjgzMCwgMHgwMDAwLCAweDk5OTksCi0JCSJDeXByZXNzIiwKLQkJIkN5cHJlc3MgQVQyTFAiLAotCQlVU19TQ19DWVBfQVRBQ0IsIFVTX1BSX0RFVklDRSwgTlVMTCwKLQkJMCksCi0KLS8qIENZN0M2ODMxMCA6IHN1cHBvcnQgYXRhY2IgYW5kIGF0YWNiMiAqLwotVU5VU1VBTF9ERVYoICAweDA0YjQsIDB4NjgzMSwgMHgwMDAwLCAweDk5OTksCi0JCSJDeXByZXNzIiwKLQkJIkN5cHJlc3MgSVNELTMwMExQIiwKLQkJVVNfU0NfQ1lQX0FUQUNCLCBVU19QUl9ERVZJQ0UsIE5VTEwsCi0JCTApLAotI2VuZGlmCi0KIC8qIFJlcG9ydGVkIGJ5IFNpbW9uIExldml0dCA8c2ltb25Ad2hhdHRmLmNvbT4KICAqIFRoaXMgZW50cnkgbmVlZHMgU3ViIGFuZCBQcm90byBmaWVsZHMgKi8KIFVOVVNVQUxfREVWKCAgMHgwNGI4LCAweDA2MDEsIDB4MDEwMCwgMHgwMTAwLApAQCAtNDY3LDIwICs0MzIsNyBAQAogCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgdXNiX3N0b3JfZXVzY3NpX2luaXQsIAogCQlVU19GTF9TQ01fTVVMVF9UQVJHICksCiAKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5Ci1VTlVTVUFMX0RFViggIDB4MDRlNiwgMHgwMDAzLCAweDAwMDAsIDB4OTk5OSwKLQkJIlNhbmRpc2siLAotCQkiSW1hZ2VNYXRlIFNERFIwOSIsCi0JCVVTX1NDX1NDU0ksIFVTX1BSX0VVU0JfU0REUjA5LCB1c2Jfc3Rvcl9zZGRyMDlfaW5pdCwKLQkJMCksCi0KLS8qIFRoaXMgZW50cnkgaXMgZnJvbSBBbmRyaWVzLkJyb3V3ZXJAY3dpLm5sICovCi1VTlVTVUFMX0RFViggIDB4MDRlNiwgMHgwMDA1LCAweDAxMDAsIDB4MDIwOCwKLQkJIlNDTSBNaWNyb3N5c3RlbXMiLAotCQkiZVVTQiBTbWFydE1lZGlhIC8gQ29tcGFjdEZsYXNoIEFkYXB0ZXIiLAotCQlVU19TQ19TQ1NJLCBVU19QUl9EUENNX1VTQiwgdXNiX3N0b3Jfc2RkcjA5X2RwY21faW5pdCwKLQkJMCksCi0jZWxzZQorI2lmZGVmIE5PX1NERFIwOQogVU5VU1VBTF9ERVYoICAweDA0ZTYsIDB4MDAwNSwgMHgwMTAwLCAweDAyMDgsCiAJCSJTQ00gTWljcm9zeXN0ZW1zIiwKIAkJImVVU0IgQ29tcGFjdEZsYXNoIEFkYXB0ZXIiLApAQCAtNTM1LDE0ICs0ODcsNiBAQAogCQkiQ0QtUlcgRGV2aWNlIiwKIAkJVVNfU0NfODAyMCwgVVNfUFJfQ0IsIE5VTEwsIDApLAogCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUCi1VTlVTVUFMX0RFViggIDB4MDRlNiwgMHgxMDEwLCAweDAwMDAsIDB4OTk5OSwKLQkJIlNodXR0bGUvU0NNIiwKLQkJIlVTQkFULTAyIiwKLQkJVVNfU0NfU0NTSSwgVVNfUFJfVVNCQVQsIGluaXRfdXNiYXRfZmxhc2gsCi0JCVVTX0ZMX1NJTkdMRV9MVU4pLAotI2VuZGlmCi0KIC8qIFJlcG9ydGVkIGJ5IERtaXRyeSBLaGx5c3RvdiA8YWRtaW5pbXVzQGdtYWlsLmNvbT4gKi8KIFVOVVNVQUxfREVWKCAgMHgwNGU4LCAweDUwN2MsIDB4MDIyMCwgMHgwMjIwLAogCQkiU2Ftc3VuZyIsCkBAIC02NDUsMTQgKzU4OSw2IEBACiAJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAogCQlVU19GTF9TSU5HTEVfTFVOICksCiAKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwCi1VTlVTVUFMX0RFViggIDB4MDU0YywgMHgwMDJiLCAweDAxMDAsIDB4MDExMCwKLQkJIlNvbnkiLAotCQkiUG9ydGFibGUgVVNCIEhhcmRkcml2ZSBWMiIsCi0JCVVTX1NDX0lTRDIwMCwgVVNfUFJfQlVMSywgaXNkMjAwX0luaXRpYWxpemF0aW9uLAotCQkwICksCi0jZW5kaWYKLQogLyogU3VibWl0dGVkIGJ5IE9sYWYgSGVyaW5nLCA8b2xoQHN1c2UuZGU+IFN1U0UgQnVnemlsbGEgIzQ5MDQ5ICovCiBVTlVTVUFMX0RFViggIDB4MDU0YywgMHgwMDJjLCAweDA1MDEsIDB4MjAwMCwKIAkJIlNvbnkiLApAQCAtNzQ5LDEzICs2ODUsNiBAQAogCQkiU2lsaWNvbiBNZWRpYSBSL1ciLAogCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwgMCksCiAKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBCi1VTlVTVUFMX0RFViggIDB4MDU4NCwgMHgwMDA4LCAweDAxMDIsIDB4MDEwMiwKLQkJIkZ1amlmaWxtIiwKLQkJIkRQQy1SMSAoQWxhdWRhKSIsCi0gCQlVU19TQ19TQ1NJLCBVU19QUl9BTEFVREEsIGluaXRfYWxhdWRhLCAwICksCi0jZW5kaWYKLQogLyogUmVwb3J0ZWQgYnkgUlRFIDxyYXN6aWxraUB5YW5kZXgucnU+ICovCiBVTlVTVUFMX0RFViggIDB4MDU4ZiwgMHg2Mzg3LCAweDAxNDEsIDB4MDE0MSwKIAkJIkpldEZsYXNoIiwKQEAgLTc5OCwzMiArNzI3LDYgQEAKIAkJVVNfU0NfU0NTSSwgVVNfUFJfQlVMSywgTlVMTCwKIAkJVVNfRkxfTkVFRF9PVkVSUklERSApLAogCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMAotVU5VU1VBTF9ERVYoICAweDA1YWIsIDB4MDAzMSwgMHgwMTAwLCAweDAxMTAsCi0JCSJJbi1TeXN0ZW0iLAotCQkiVVNCL0lERSBCcmlkZ2UgKEFUQS9BVEFQSSkiLAotCQlVU19TQ19JU0QyMDAsIFVTX1BSX0JVTEssIGlzZDIwMF9Jbml0aWFsaXphdGlvbiwKLQkJMCApLAotCi1VTlVTVUFMX0RFViggIDB4MDVhYiwgMHgwMzAxLCAweDAxMDAsIDB4MDExMCwKLQkJIkluLVN5c3RlbSIsCi0JCSJQb3J0YWJsZSBVU0IgSGFyZGRyaXZlIFYyIiwKLQkJVVNfU0NfSVNEMjAwLCBVU19QUl9CVUxLLCBpc2QyMDBfSW5pdGlhbGl6YXRpb24sCi0JCTAgKSwKLQotVU5VU1VBTF9ERVYoICAweDA1YWIsIDB4MDM1MSwgMHgwMTAwLCAweDAxMTAsCi0JCSJJbi1TeXN0ZW0iLAotCQkiUG9ydGFibGUgVVNCIEhhcmRkcml2ZSBWMiIsCi0JCVVTX1NDX0lTRDIwMCwgVVNfUFJfQlVMSywgaXNkMjAwX0luaXRpYWxpemF0aW9uLAotCQkwICksCi0KLVVOVVNVQUxfREVWKCAgMHgwNWFiLCAweDU3MDEsIDB4MDEwMCwgMHgwMTEwLAotCQkiSW4tU3lzdGVtIiwKLQkJIlVTQiBTdG9yYWdlIEFkYXB0ZXIgVjIiLAotCQlVU19TQ19JU0QyMDAsIFVTX1BSX0JVTEssIGlzZDIwMF9Jbml0aWFsaXphdGlvbiwKLQkJMCApLAotI2VuZGlmCi0KIC8qIFN1Ym1pdHRlZCBieSBTdmVuIEFuZGVyc29uIDxzdmVuLWxpbnV4QGFuZGVyc29uLmRlPgogICogVGhlcmUgYXJlIGF0IGxlYXN0IGZvdXIgUHJvZHVjdElEcyB1c2VkIGZvciBpUG9kcywgc28gSSBhZGRlZCAweDEyMDIgYW5kCiAgKiAweDEyMDQuIFRoZXkganVzdCBuZWVkIHRoZSBVU19GTF9GSVhfQ0FQQUNJVFkuIEFzIHRoZSBiY2REZXZpY2UgYXBwZWFycwpAQCAtODc3LDE0ICs3ODAsNiBAQAogCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgb3B0aW9uX21zX2luaXQsCiAJCTApLAogCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UCi1VTlVTVUFMX0RFViggIDB4MDVkYywgMHgwMDAxLCAweDAwMDAsIDB4MDAwMSwKLQkJIkxleGFyIiwKLQkJIkp1bXBzaG90IFVTQiBDRiBSZWFkZXIiLAotCQlVU19TQ19TQ1NJLCBVU19QUl9KVU1QU0hPVCwgTlVMTCwKLQkJVVNfRkxfTkVFRF9PVkVSUklERSApLAotI2VuZGlmCi0KIC8qIFJlcG9ydGVkIGJ5IEJsYWtlIE1hdGhlbnkgPGJtYXRoZW55QHB1cmR1ZS5lZHU+ICovCiBVTlVTVUFMX0RFViggIDB4MDVkYywgMHhiMDAyLCAweDAwMDAsIDB4MDExMywKIAkJIkxleGFyIiwKQEAgLTkzNSwxNCArODMwLDYgQEAKIAkJIkZsb3BweSBEcml2ZSIsCiAJCVVTX1NDX1VGSSwgVVNfUFJfQ0IsIE5VTEwsIDAgKSwKIAotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkKLVVOVVNVQUxfREVWKCAgMHgwNjZiLCAweDAxMDUsIDB4MDEwMCwgMHgwMTAwLAotCQkiT2x5bXB1cyIsCi0JCSJDYW1lZGlhIE1BVVNCLTIiLAotCQlVU19TQ19TQ1NJLCBVU19QUl9FVVNCX1NERFIwOSwgdXNiX3N0b3Jfc2RkcjA5X2luaXQsCi0JCTApLAotI2VuZGlmCi0KIC8qIFJlcG9ydGVkIGJ5IERhcnNlbiBMdSA8ZGFyc2VuQG1pY3JvLmVlLm50aHUuZWR1LnR3PiAqLwogVU5VU1VBTF9ERVYoIDB4MDY2ZiwgMHg4MDAwLCAweDAwMDEsIDB4MDAwMSwKIAkJIlNpZ21hVGVsIiwKQEAgLTEwNDMsMzUgKzkzMCwxMiBAQAogCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKIAkJVVNfRkxfRklYX0NBUEFDSVRZICksCiAKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQKLVVOVVNVQUxfREVWKCAgMHgwNzgxLCAweDAwMDUsIDB4MDAwNSwgMHgwMDA1LAotCQkiU2FuZGlzayIsCi0JCSJJbWFnZU1hdGUgU0REUi0wNWIiLAotCQlVU19TQ19TQ1NJLCBVU19QUl9VU0JBVCwgaW5pdF91c2JhdF9mbGFzaCwKLQkJVVNfRkxfU0lOR0xFX0xVTiApLAotI2VuZGlmCi0KIFVOVVNVQUxfREVWKCAgMHgwNzgxLCAweDAxMDAsIDB4MDEwMCwgMHgwMTAwLAogCQkiU2FuZGlzayIsCiAJCSJJbWFnZU1hdGUgU0REUi0xMiIsCiAJCVVTX1NDX1NDU0ksIFVTX1BSX0NCLCBOVUxMLAogCQlVU19GTF9TSU5HTEVfTFVOICksCiAKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5Ci1VTlVTVUFMX0RFViggIDB4MDc4MSwgMHgwMjAwLCAweDAwMDAsIDB4OTk5OSwKLQkJIlNhbmRpc2siLAotCQkiSW1hZ2VNYXRlIFNERFItMDkiLAotCQlVU19TQ19TQ1NJLCBVU19QUl9FVVNCX1NERFIwOSwgdXNiX3N0b3Jfc2RkcjA5X2luaXQsCi0JCTApLAotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTQotVU5VU1VBTF9ERVYoICAweDA3YWIsIDB4ZmMwMSwgMHgwMDAwLCAweDk5OTksCi0JCSJGcmVlY29tIiwKLQkJIlVTQi1JREUiLAotCQlVU19TQ19RSUMsIFVTX1BSX0ZSRUVDT00sIGZyZWVjb21faW5pdCwgMCksCi0jZW5kaWYKLQogLyogUmVwb3J0ZWQgYnkgRWVybyBWb2xvdGluZW4gPGVlcm9AcGluZy12aWluaS5vcmc+ICovCiBVTlVTVUFMX0RFViggIDB4MDdhYiwgMHhmY2NkLCAweDAwMDAsIDB4OTk5OSwKIAkJIkZyZWVjb20gVGVjaG5vbG9naWVzIiwKQEAgLTEwOTEsMTIgKzk1NSw3IEBACiAJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCB1c2Jfc3Rvcl9ldXNjc2lfaW5pdCwKIAkJVVNfRkxfU0NNX01VTFRfVEFSRyApLAogCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOQotVU5VU1VBTF9ERVYoICAweDA3YWYsIDB4MDAwNiwgMHgwMTAwLCAweDAxMDAsCi0JCSJNaWNyb3RlY2giLAotCQkiQ2FtZXJhTWF0ZSAoRFBDTV9VU0IpIiwKLSAJCVVTX1NDX1NDU0ksIFVTX1BSX0RQQ01fVVNCLCBOVUxMLCAwICksCi0jZWxzZQorI2lmZGVmIE5PX1NERFIwOQogVU5VU1VBTF9ERVYoICAweDA3YWYsIDB4MDAwNiwgMHgwMTAwLCAweDAxMDAsCiAJCSJNaWNyb3RlY2giLAogCQkiQ2FtZXJhTWF0ZSIsCkBAIC0xMTA0LDEwOCArOTYzLDYgQEAKIAkJVVNfRkxfU0lOR0xFX0xVTiApLAogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBCi1VTlVTVUFMX0RFViggIDB4MDdiNCwgMHgwMTBhLCAweDAxMDIsIDB4MDEwMiwKLQkJIk9seW1wdXMiLAotCQkiTUFVU0ItMTAgKEFsYXVkYSkiLAotIAkJVVNfU0NfU0NTSSwgVVNfUFJfQUxBVURBLCBpbml0X2FsYXVkYSwgMCApLAotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQgotVU5VU1VBTF9ERVYoICAweDA3YzQsIDB4YTAwMCwgMHgwMDAwLCAweDAwMTUsCi0JCSJEYXRhZmFiIiwKLQkJIk1EQ0ZFLUIgVVNCIENGIFJlYWRlciIsCi0JCVVTX1NDX1NDU0ksIFVTX1BSX0RBVEFGQUIsIE5VTEwsCi0JCTAgKSwKLQotLyoKLSAqIFRoZSBmb2xsb3dpbmcgRGF0YWZhYi1iYXNlZCBkZXZpY2VzIG1heSBvciBtYXkgbm90IHdvcmsKLSAqIHVzaW5nIHRoZSBjdXJyZW50IGRyaXZlci4uLnRoZSAweGZmZmYgaXMgYXJiaXRyYXJ5IHNpbmNlIEkKLSAqIGRvbid0IGtub3cgd2hhdCBkZXZpY2UgdmVyc2lvbnMgZXhpc3QgZm9yIHRoZXNlIGd1eXMuCi0gKgotICogVGhlIDB4YTAwMyBhbmQgMHhhMDA0IGRldmljZXMgaW4gcGFydGljdWxhciBJJ20gY3VyaW91cyBhYm91dC4KLSAqIEknbSB0b2xkIHRoZXkgZXhpc3QgYnV0IHNvIGZhciBub2JvZHkgaGFzIGNvbWUgZm9yd2FyZCB0byBzYXkgdGhhdAotICogdGhleSB3b3JrIHdpdGggdGhpcyBkcml2ZXIuICBHaXZlbiB0aGUgc3VjY2VzcyB3ZSd2ZSBoYWQgZ2V0dGluZwotICogb3RoZXIgRGF0YWZhYi1iYXNlZCBjYXJkcyBvcGVyYXRpb25hbCB3aXRoIHRoaXMgZHJpdmVyLCBJJ3ZlIGRlY2lkZWQKLSAqIHRvIGxlYXZlIHRoZXNlIHR3byBkZXZpY2VzIGluIHRoZSBsaXN0LgotICovCi1VTlVTVUFMX0RFViggMHgwN2M0LCAweGEwMDEsIDB4MDAwMCwgMHhmZmZmLAotCQkiU0lJRy9EYXRhZmFiIiwKLQkJIlNJSUcvRGF0YWZhYiBNZW1vcnkgU3RpY2srQ0YgUmVhZGVyL1dyaXRlciIsCi0JCVVTX1NDX1NDU0ksIFVTX1BSX0RBVEFGQUIsIE5VTEwsCi0JCTAgKSwKLQotLyogUmVwb3J0ZWQgYnkgSm9zZWYgUmVpc2luZ2VyIDxqb3NlZi5yZWlzaW5nZXJAbmV0Y29sb2duZS5kZT4gKi8KLVVOVVNVQUxfREVWKCAweDA3YzQsIDB4YTAwMiwgMHgwMDAwLCAweGZmZmYsCi0JCSJEYXRhZmFiL1Vua25vd24iLAotCQkiTUQyL01EMyBEaXNrIGVuY2xvc3VyZSIsCi0JCVVTX1NDX1NDU0ksIFVTX1BSX0RBVEFGQUIsIE5VTEwsCi0JCVVTX0ZMX1NJTkdMRV9MVU4gKSwKLQotVU5VU1VBTF9ERVYoIDB4MDdjNCwgMHhhMDAzLCAweDAwMDAsIDB4ZmZmZiwKLQkJIkRhdGFmYWIvVW5rbm93biIsCi0JCSJEYXRhZmFiLWJhc2VkIFJlYWRlciIsCi0JCVVTX1NDX1NDU0ksIFVTX1BSX0RBVEFGQUIsIE5VTEwsCi0JCTAgKSwKLQotVU5VU1VBTF9ERVYoIDB4MDdjNCwgMHhhMDA0LCAweDAwMDAsIDB4ZmZmZiwKLQkJIkRhdGFmYWIvVW5rbm93biIsCi0JCSJEYXRhZmFiLWJhc2VkIFJlYWRlciIsCi0JCVVTX1NDX1NDU0ksIFVTX1BSX0RBVEFGQUIsIE5VTEwsCi0JCTAgKSwKLQotVU5VU1VBTF9ERVYoIDB4MDdjNCwgMHhhMDA1LCAweDAwMDAsIDB4ZmZmZiwKLQkJIlBOWS9EYXRhZmFiIiwKLQkJIlBOWS9EYXRhZmFiIENGK1NNIFJlYWRlciIsCi0JCVVTX1NDX1NDU0ksIFVTX1BSX0RBVEFGQUIsIE5VTEwsCi0JCTAgKSwKLQotVU5VU1VBTF9ERVYoIDB4MDdjNCwgMHhhMDA2LCAweDAwMDAsIDB4ZmZmZiwKLQkJIlNpbXBsZSBUZWNoL0RhdGFmYWIiLAotCQkiU2ltcGxlIFRlY2gvRGF0YWZhYiBDRitTTSBSZWFkZXIiLAotCQlVU19TQ19TQ1NJLCBVU19QUl9EQVRBRkFCLCBOVUxMLAotCQkwICksCi0jZW5kaWYKLQkJCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NQotLyogQ29udHJpYnV0ZWQgYnkgUGV0ZXIgV2FlY2h0bGVyICovCi1VTlVTVUFMX0RFViggMHgwN2M0LCAweGExMDMsIDB4MDAwMCwgMHg5OTk5LAotCQkiRGF0YWZhYiIsCi0JCSJNRFNNLUIgcmVhZGVyIiwKLQkJVVNfU0NfU0NTSSwgVVNfUFJfU0REUjU1LCBOVUxMLAotCQlVU19GTF9GSVhfSU5RVUlSWSApLAotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQgotLyogU3VibWl0dGVkIGJ5IE9sYWYgSGVyaW5nIDxvbGhAc3VzZS5kZT4gKi8KLVVOVVNVQUxfREVWKCAgMHgwN2M0LCAweGExMDksIDB4MDAwMCwgMHhmZmZmLAotCQkiRGF0YWZhYiBTeXN0ZW1zLCBJbmMuIiwKLQkJIlVTQiB0byBDRiArIFNNIENvbWJvIChMQzEpIiwKLQkJVVNfU0NfU0NTSSwgVVNfUFJfREFUQUZBQiwgTlVMTCwKLQkJMCApLAotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NQotLyogU00gcGFydCAtIGFlYiA8QW5kcmllcy5Ccm91d2VyQGN3aS5ubD4gKi8KLVVOVVNVQUxfREVWKCAgMHgwN2M0LCAweGExMDksIDB4MDAwMCwgMHhmZmZmLAotCQkiRGF0YWZhYiBTeXN0ZW1zLCBJbmMuIiwKLQkJIlVTQiB0byBDRiArIFNNIENvbWJvIChMQzEpIiwKLQkJVVNfU0NfU0NTSSwgVVNfUFJfU0REUjU1LCBOVUxMLAotCQlVU19GTF9TSU5HTEVfTFVOICksCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCCi0vKiBSZXBvcnRlZCBieSBGZWxpeCBNb2VsbGVyIDxmZWxpeEBkZXJrbGVja3MuZGU+Ci0gKiBpbiBHZXJtYW55IHRoaXMgaXMgc29sZCBieSBIYW1hIHdpdGggdGhlIHByb2R1Y3RudW1iZXIgNDY5NTIKLSAqIGFzICJEdWFsU2xvdCBDb21wYWN0Rmxhc2goVE0pICYgTVN0aWNrIERyaXZlIFVTQiIKLSAqLwotVU5VU1VBTF9ERVYoICAweDA3YzQsIDB4YTEwYiwgMHgwMDAwLCAweGZmZmYsCi0JCSJEYXRhRmFiIFN5c3RlbXMgSW5jLiIsCi0JCSJVU0IgQ0YrTVMiLAotCQlVU19TQ19TQ1NJLCBVU19QUl9EQVRBRkFCLCBOVUxMLAotCQkwICksCi0KLSNlbmRpZgotCiAvKiBEYXRhZmFiIEtFQ0YtVVNCIC8gU2FnYXRlayBEQ1MtQ0YgLyBTaW1wbGV0ZWNoIEZsYXNobGluayBVQ0YtMTAwCiAgKiBPbmx5IHJldmlzaW9uIDEuMTMgdGVzdGVkIChzYW1lIGZvciBhbGwgb2YgdGhlIGFib3ZlIGRldmljZXMsCiAgKiBiYXNlZCBvbiB0aGUgRGF0YWZhYiBERi1VRy0wNyBjaGlwKS4gIE5lZWRlZCBmb3IgVVNfRkxfRklYX0lOUVVJUlkuCkBAIC0xNDA5LDI5ICsxMTY2LDYgQEAKIAkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCiAJCVVTX0ZMX1NBTkVfU0VOU0UgKSwKIAotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAKLVVOVVNVQUxfREVWKCAgMHgwYmY2LCAweGEwMDEsIDB4MDEwMCwgMHgwMTEwLAotCQkiQVRJIiwKLQkJIlVTQiBDYWJsZSAyMDUiLAotCQlVU19TQ19JU0QyMDAsIFVTX1BSX0JVTEssIGlzZDIwMF9Jbml0aWFsaXphdGlvbiwKLQkJMCApLAotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQgotVU5VU1VBTF9ERVYoIDB4MGMwYiwgMHhhMTA5LCAweDAwMDAsIDB4ZmZmZiwKLQkJIkFjb21kYXRhIiwKLQkJIkNGIiwKLQkJVVNfU0NfU0NTSSwgVVNfUFJfREFUQUZBQiwgTlVMTCwKLQkJVVNfRkxfU0lOR0xFX0xVTiApLAotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NQotVU5VU1VBTF9ERVYoIDB4MGMwYiwgMHhhMTA5LCAweDAwMDAsIDB4ZmZmZiwKLQkJIkFjb21kYXRhIiwKLQkJIlNNIiwKLQkJVVNfU0NfU0NTSSwgVVNfUFJfU0REUjU1LCBOVUxMLAotCQlVU19GTF9TSU5HTEVfTFVOICksCi0jZW5kaWYKLQogVU5VU1VBTF9ERVYoICAweDBkNDksIDB4NzMxMCwgMHgwMDAwLCAweDk5OTksCiAJCSJNYXh0b3IiLAogCQkiVVNCIHRvIFNBVEEiLApAQCAtMTQ0OCwyMyArMTE4Miw2IEBACiAJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAogCQlVU19GTF9TSU5HTEVfTFVOICksCiAKLS8qIFN1Ym1pdHRlZCBieTogTmljayBTaWxsaWsgPG4uc2lsbGlrQHRlbXBsZS5lZHU+Ci0gKiBOZWVkZWQgZm9yIE9uZVRvdWNoIGV4dGVuc2lvbiB0byB1c2Itc3RvcmFnZQotICoKLSAqLwotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSAotCVVOVVNVQUxfREVWKCAgMHgwZDQ5LCAweDcwMDAsIDB4MDAwMCwgMHg5OTk5LAotCQkJIk1heHRvciIsCi0JCQkiT25lVG91Y2ggRXh0ZXJuYWwgSGFyZGRyaXZlIiwKLQkJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBvbmV0b3VjaF9jb25uZWN0X2lucHV0LAotCQkJMCksCi0JVU5VU1VBTF9ERVYoICAweDBkNDksIDB4NzAxMCwgMHgwMDAwLCAweDk5OTksCi0JCQkiTWF4dG9yIiwKLQkJCSJPbmVUb3VjaCBFeHRlcm5hbCBIYXJkZHJpdmUiLAotCQkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIG9uZXRvdWNoX2Nvbm5lY3RfaW5wdXQsCi0JCQkwKSwKLSNlbmRpZgotCiAvKiBTdWJtaXR0ZWQgYnkgSm9yaXMgU3RydXl2ZSA8am9yaXNAc3RydXl2ZS5iZT4gKi8KIFVOVVNVQUxfREVWKCAweDBkOTYsIDB4NDEwYSwgMHgwMDAxLCAweGZmZmYsCiAJCSJNZWRpb24iLApAQCAtMjExNywxNCArMTgzNCw2IEBACiAJCSJNaWNybyBNaW5pIDFHQiIsCiAJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLCBVU19GTF9OT1RfTE9DS0FCTEUgKSwKIAotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUKLVVOVVNVQUxfREVWKCAgMHg1NWFhLCAweGExMDMsIDB4MDAwMCwgMHg5OTk5LCAKLQkJIlNhbmRpc2siLAotCQkiSW1hZ2VNYXRlIFNERFI1NSIsCi0JCVVTX1NDX1NDU0ksIFVTX1BSX1NERFI1NSwgTlVMTCwKLQkJVVNfRkxfU0lOR0xFX0xVTiksCi0jZW5kaWYKLQogLyogUmVwb3J0ZWQgYnkgQW5kcmV3IFNpbW1vbnMgPGFuZHJldy5zaW1tb25zQGdtYWlsLmNvbT4gKi8KIFVOVVNVQUxfREVWKCAgMHhlZDA2LCAweDQ1MDAsIDB4MDAwMSwgMHgwMDAxLAogCQkiRGF0YVN0b3IiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9jeXByZXNzX2F0YWNiLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZnJlZWNvbS5oCnNpbWlsYXJpdHkgaW5kZXggNjclCmNvcHkgZnJvbSBkcml2ZXJzL3VzYi9zdG9yYWdlL2N5cHJlc3NfYXRhY2IuaApjb3B5IHRvIGRyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9mcmVlY29tLmgKaW5kZXggZmJhZGE4OS4uMzc1ODY3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9jeXByZXNzX2F0YWNiLmgKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2ZyZWVjb20uaApAQCAtMSw4ICsxLDQgQEAKLS8qCi0gKiBTdXBwb3J0IGZvciBlbXVsYXRpbmcgU0FUIChhdGEgcGFzcyB0aHJvdWdoKSBvbiBkZXZpY2VzIGJhc2VkCi0gKiAgICAgICBvbiB0aGUgQ3lwcmVzcyBVU0IvQVRBIGJyaWRnZSBzdXBwb3J0aW5nIEFUQUNCLgotICoKLSAqIENvcHlyaWdodCAoYykgMjAwOCBNYXR0aGlldSBDYXN0ZXQgKGNhc3RldC5tYXR0aGlldUBmcmVlLmZyKQorLyogVW51c3VhbCBEZXZpY2VzIEZpbGUgZm9yIHRoZSBGcmVlY29tIFVTQi9JREUgYWRhcHRvcgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKQEAgLTE5LDcgKzE1LDEyIEBACiAgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwogCi0jaWZuZGVmIF9DWVBSRVNTX0FUQUNCX0hfCi0jZGVmaW5lIF9DWVBSRVNTX0FUQUNCX0hfCi1leHRlcm4gdm9pZCBjeXByZXNzX2F0YWNiX3Bhc3N0aHJvdWdoKHN0cnVjdCBzY3NpX2NtbmQqLCBzdHJ1Y3QgdXNfZGF0YSopOwotI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSkgfHwgXAorCQlkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NX01PRFVMRSkKKworVU5VU1VBTF9ERVYoICAweDA3YWIsIDB4ZmMwMSwgMHgwMDAwLCAweDk5OTksCisJCSJGcmVlY29tIiwKKwkJIlVTQi1JREUiLAorCQlVU19TQ19RSUMsIFVTX1BSX0ZSRUVDT00sIGluaXRfZnJlZWNvbSwgMCksCisKKyNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NKSB8fCAuLi4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9pc2QyMDAuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9pc2QyMDAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDk5ZGRlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2lzZDIwMC5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qIFVudXN1YWwgRGV2aWNlcyBGaWxlIGZvciBJbi1TeXN0ZW0gRGVzaWduLCBJbmMuIElTRDIwMCBBU0lDCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCkgfHwgXAorCQlkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDBfTU9EVUxFKQorCitVTlVTVUFMX0RFViggIDB4MDU0YywgMHgwMDJiLCAweDAxMDAsIDB4MDExMCwKKwkJIlNvbnkiLAorCQkiUG9ydGFibGUgVVNCIEhhcmRkcml2ZSBWMiIsCisJCVVTX1NDX0lTRDIwMCwgVVNfUFJfQlVMSywgaXNkMjAwX0luaXRpYWxpemF0aW9uLAorCQkwKSwKKworVU5VU1VBTF9ERVYoICAweDA1YWIsIDB4MDAzMSwgMHgwMTAwLCAweDAxMTAsCisJCSJJbi1TeXN0ZW0iLAorCQkiVVNCL0lERSBCcmlkZ2UgKEFUQS9BVEFQSSkiLAorCQlVU19TQ19JU0QyMDAsIFVTX1BSX0JVTEssIGlzZDIwMF9Jbml0aWFsaXphdGlvbiwKKwkJMCksCisKK1VOVVNVQUxfREVWKCAgMHgwNWFiLCAweDAzMDEsIDB4MDEwMCwgMHgwMTEwLAorCQkiSW4tU3lzdGVtIiwKKwkJIlBvcnRhYmxlIFVTQiBIYXJkZHJpdmUgVjIiLAorCQlVU19TQ19JU0QyMDAsIFVTX1BSX0JVTEssIGlzZDIwMF9Jbml0aWFsaXphdGlvbiwKKwkJMCksCisKK1VOVVNVQUxfREVWKCAgMHgwNWFiLCAweDAzNTEsIDB4MDEwMCwgMHgwMTEwLAorCQkiSW4tU3lzdGVtIiwKKwkJIlBvcnRhYmxlIFVTQiBIYXJkZHJpdmUgVjIiLAorCQlVU19TQ19JU0QyMDAsIFVTX1BSX0JVTEssIGlzZDIwMF9Jbml0aWFsaXphdGlvbiwKKwkJMCksCisKK1VOVVNVQUxfREVWKCAgMHgwNWFiLCAweDU3MDEsIDB4MDEwMCwgMHgwMTEwLAorCQkiSW4tU3lzdGVtIiwKKwkJIlVTQiBTdG9yYWdlIEFkYXB0ZXIgVjIiLAorCQlVU19TQ19JU0QyMDAsIFVTX1BSX0JVTEssIGlzZDIwMF9Jbml0aWFsaXphdGlvbiwKKwkJMCksCisKK1VOVVNVQUxfREVWKCAgMHgwYmY2LCAweGEwMDEsIDB4MDEwMCwgMHgwMTEwLAorCQkiQVRJIiwKKwkJIlVTQiBDYWJsZSAyMDUiLAorCQlVU19TQ19JU0QyMDAsIFVTX1BSX0JVTEssIGlzZDIwMF9Jbml0aWFsaXphdGlvbiwKKwkJMCksCisKKyNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDApIHx8IC4uLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9jeXByZXNzX2F0YWNiLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfanVtcHNob3QuaApzaW1pbGFyaXR5IGluZGV4IDY1JQpjb3B5IGZyb20gZHJpdmVycy91c2Ivc3RvcmFnZS9jeXByZXNzX2F0YWNiLmgKY29weSB0byBkcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfanVtcHNob3QuaAppbmRleCBmYmFkYTg5Li4yZTU0OWIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2N5cHJlc3NfYXRhY2IuaAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfanVtcHNob3QuaApAQCAtMSw4ICsxLDQgQEAKLS8qCi0gKiBTdXBwb3J0IGZvciBlbXVsYXRpbmcgU0FUIChhdGEgcGFzcyB0aHJvdWdoKSBvbiBkZXZpY2VzIGJhc2VkCi0gKiAgICAgICBvbiB0aGUgQ3lwcmVzcyBVU0IvQVRBIGJyaWRnZSBzdXBwb3J0aW5nIEFUQUNCLgotICoKLSAqIENvcHlyaWdodCAoYykgMjAwOCBNYXR0aGlldSBDYXN0ZXQgKGNhc3RldC5tYXR0aGlldUBmcmVlLmZyKQorLyogVW51c3VhbCBEZXZpY2VzIEZpbGUgZm9yIHRoZSBMZXhhciAiSnVtcHNob3QiIENvbXBhY3QgRmxhc2ggcmVhZGVyCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQpAQCAtMTksNyArMTUsMTMgQEAKICAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCiAKLSNpZm5kZWYgX0NZUFJFU1NfQVRBQ0JfSF8KLSNkZWZpbmUgX0NZUFJFU1NfQVRBQ0JfSF8KLWV4dGVybiB2b2lkIGN5cHJlc3NfYXRhY2JfcGFzc3Rocm91Z2goc3RydWN0IHNjc2lfY21uZCosIHN0cnVjdCB1c19kYXRhKik7Ci0jZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCkgfHwgXAorCQlkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVF9NT0RVTEUpCisKK1VOVVNVQUxfREVWKCAgMHgwNWRjLCAweDAwMDEsIDB4MDAwMCwgMHgwMDAxLAorCQkiTGV4YXIiLAorCQkiSnVtcHNob3QgVVNCIENGIFJlYWRlciIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0pVTVBTSE9ULCBOVUxMLAorCQlVU19GTF9ORUVEX09WRVJSSURFKSwKKworI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UKSB8fCAuLi4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvY3lwcmVzc19hdGFjYi5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2thcm1hLmgKc2ltaWxhcml0eSBpbmRleCA2NyUKcmVuYW1lIGZyb20gZHJpdmVycy91c2Ivc3RvcmFnZS9jeXByZXNzX2F0YWNiLmgKcmVuYW1lIHRvIGRyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9rYXJtYS5oCmluZGV4IGZiYWRhODkuLjEyYWUzYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvY3lwcmVzc19hdGFjYi5oCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9rYXJtYS5oCkBAIC0xLDggKzEsNCBAQAotLyoKLSAqIFN1cHBvcnQgZm9yIGVtdWxhdGluZyBTQVQgKGF0YSBwYXNzIHRocm91Z2gpIG9uIGRldmljZXMgYmFzZWQKLSAqICAgICAgIG9uIHRoZSBDeXByZXNzIFVTQi9BVEEgYnJpZGdlIHN1cHBvcnRpbmcgQVRBQ0IuCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA4IE1hdHRoaWV1IENhc3RldCAoY2FzdGV0Lm1hdHRoaWV1QGZyZWUuZnIpCisvKiBVbnVzdWFsIERldmljZXMgRmlsZSBmb3IgdGhlIFJpbyBLYXJtYQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKQEAgLTE5LDcgKzE1LDEyIEBACiAgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwogCi0jaWZuZGVmIF9DWVBSRVNTX0FUQUNCX0hfCi0jZGVmaW5lIF9DWVBSRVNTX0FUQUNCX0hfCi1leHRlcm4gdm9pZCBjeXByZXNzX2F0YWNiX3Bhc3N0aHJvdWdoKHN0cnVjdCBzY3NpX2NtbmQqLCBzdHJ1Y3QgdXNfZGF0YSopOwotI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEpIHx8IFwKKwkJZGVmaW5lZChDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUFfTU9EVUxFKQorCitVTlVTVUFMX0RFViggIDB4MDQ1YSwgMHg1MjEwLCAweDAxMDEsIDB4MDEwMSwKKwkJIlJpbyIsCisJCSJSaW8gS2FybWEiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9LQVJNQSwgcmlvX2thcm1hX2luaXQsIDApLAorCisjZW5kaWYgLyogZGVmaW5lZChDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEpIHx8IC4uLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX29uZXRvdWNoLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfb25ldG91Y2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDkzMDZiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX29uZXRvdWNoLmgKQEAgLTAsMCArMSwzNiBAQAorLyogVW51c3VhbCBEZXZpY2VzIEZpbGUgZm9yIHRoZSBNYXh0b3IgT25lVG91Y2ggVVNCIGhhcmQgZHJpdmUncyBidXR0b24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWYgZGVmaW5lZChDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0gpIHx8IFwKKwkJZGVmaW5lZChDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0hfTU9EVUxFKQorCisvKiBTdWJtaXR0ZWQgYnk6IE5pY2sgU2lsbGlrIDxuLnNpbGxpa0B0ZW1wbGUuZWR1PgorICogTmVlZGVkIGZvciBPbmVUb3VjaCBleHRlbnNpb24gdG8gdXNiLXN0b3JhZ2UKKyAqLworVU5VU1VBTF9ERVYoICAweDBkNDksIDB4NzAwMCwgMHgwMDAwLCAweDk5OTksCisJCSJNYXh0b3IiLAorCQkiT25lVG91Y2ggRXh0ZXJuYWwgSGFyZGRyaXZlIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIG9uZXRvdWNoX2Nvbm5lY3RfaW5wdXQsCisJCTApLAorCitVTlVTVUFMX0RFViggIDB4MGQ0OSwgMHg3MDEwLCAweDAwMDAsIDB4OTk5OSwKKwkJIk1heHRvciIsCisJCSJPbmVUb3VjaCBFeHRlcm5hbCBIYXJkZHJpdmUiLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgb25ldG91Y2hfY29ubmVjdF9pbnB1dCwKKwkJMCksCisKKyNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCkgfHwgLi4uICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfc2RkcjA5LmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfc2RkcjA5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBjYWI1MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9zZGRyMDkuaApAQCAtMCwwICsxLDU2IEBACisvKiBVbnVzdWFsIERldmljZXMgRmlsZSBmb3IgU2FuRGlzayBTRERSLTA5IFNtYXJ0TWVkaWEgcmVhZGVyCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSkgfHwgXAorCQlkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDlfTU9EVUxFKQorCitVTlVTVUFMX0RFViggIDB4MDQzNiwgMHgwMDA1LCAweDAxMDAsIDB4MDEwMCwKKwkJIk1pY3JvdGVjaCIsCisJCSJDYW1lcmFNYXRlIChEUENNX1VTQikiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9EUENNX1VTQiwgTlVMTCwgMCksCisKK1VOVVNVQUxfREVWKCAgMHgwNGU2LCAweDAwMDMsIDB4MDAwMCwgMHg5OTk5LAorCQkiU2FuZGlzayIsCisJCSJJbWFnZU1hdGUgU0REUjA5IiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfRVVTQl9TRERSMDksIHVzYl9zdG9yX3NkZHIwOV9pbml0LAorCQkwKSwKKworLyogVGhpcyBlbnRyeSBpcyBmcm9tIEFuZHJpZXMuQnJvdXdlckBjd2kubmwgKi8KK1VOVVNVQUxfREVWKCAgMHgwNGU2LCAweDAwMDUsIDB4MDEwMCwgMHgwMjA4LAorCQkiU0NNIE1pY3Jvc3lzdGVtcyIsCisJCSJlVVNCIFNtYXJ0TWVkaWEgLyBDb21wYWN0Rmxhc2ggQWRhcHRlciIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0RQQ01fVVNCLCB1c2Jfc3Rvcl9zZGRyMDlfZHBjbV9pbml0LAorCQkwKSwKKworVU5VU1VBTF9ERVYoICAweDA2NmIsIDB4MDEwNSwgMHgwMTAwLCAweDAxMDAsCisJCSJPbHltcHVzIiwKKwkJIkNhbWVkaWEgTUFVU0ItMiIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0VVU0JfU0REUjA5LCB1c2Jfc3Rvcl9zZGRyMDlfaW5pdCwKKwkJMCksCisKK1VOVVNVQUxfREVWKCAgMHgwNzgxLCAweDAyMDAsIDB4MDAwMCwgMHg5OTk5LAorCQkiU2FuZGlzayIsCisJCSJJbWFnZU1hdGUgU0REUi0wOSIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0VVU0JfU0REUjA5LCB1c2Jfc3Rvcl9zZGRyMDlfaW5pdCwKKwkJMCksCisKK1VOVVNVQUxfREVWKCAgMHgwN2FmLCAweDAwMDYsIDB4MDEwMCwgMHgwMTAwLAorCQkiTWljcm90ZWNoIiwKKwkJIkNhbWVyYU1hdGUgKERQQ01fVVNCKSIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0RQQ01fVVNCLCBOVUxMLCAwKSwKKworI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSkgfHwgLi4uICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfc2RkcjU1LmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfc2RkcjU1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU4MWVmNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9zZGRyNTUuaApAQCAtMCwwICsxLDQ0IEBACisvKiBVbnVzdWFsIERldmljZXMgRmlsZSBmb3IgU2FuRGlzayBTRERSLTU1IFNtYXJ0TWVkaWEgcmVhZGVyCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSkgfHwgXAorCQlkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTVfTU9EVUxFKQorCisvKiBDb250cmlidXRlZCBieSBQZXRlciBXYWVjaHRsZXIgKi8KK1VOVVNVQUxfREVWKCAweDA3YzQsIDB4YTEwMywgMHgwMDAwLCAweDk5OTksCisJCSJEYXRhZmFiIiwKKwkJIk1EU00tQiByZWFkZXIiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9TRERSNTUsIE5VTEwsCisJCVVTX0ZMX0ZJWF9JTlFVSVJZKSwKKworLyogU00gcGFydCAtIGFlYiA8QW5kcmllcy5Ccm91d2VyQGN3aS5ubD4gKi8KK1VOVVNVQUxfREVWKCAgMHgwN2M0LCAweGExMDksIDB4MDAwMCwgMHhmZmZmLAorCQkiRGF0YWZhYiBTeXN0ZW1zLCBJbmMuIiwKKwkJIlVTQiB0byBDRiArIFNNIENvbWJvIChMQzEpIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfU0REUjU1LCBOVUxMLCAwKSwKKworVU5VU1VBTF9ERVYoIDB4MGMwYiwgMHhhMTA5LCAweDAwMDAsIDB4ZmZmZiwKKwkJIkFjb21kYXRhIiwKKwkJIlNNIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfU0REUjU1LCBOVUxMLCAwKSwKKworVU5VU1VBTF9ERVYoICAweDU1YWEsIDB4YTEwMywgMHgwMDAwLCAweDk5OTksCisJCSJTYW5kaXNrIiwKKwkJIkltYWdlTWF0ZSBTRERSNTUiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9TRERSNTUsIE5VTEwsIDApLAorCisjZW5kaWYgLyogZGVmaW5lZChDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1KSB8fCAuLi4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF91c2JhdC5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX3VzYmF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBlODY5ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF91c2JhdC5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qIFVudXN1YWwgRGV2aWNlcyBGaWxlIGZvciBTQ00gTWljcm9zeXN0ZW1zIChhLmsuYS4gU2h1dHRsZSkgVVNCLUFUQVBJIGNhYmxlCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUKSB8fCBcCisJCWRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUX01PRFVMRSkKKworVU5VU1VBTF9ERVYoICAweDAzZjAsIDB4MDIwNywgMHgwMDAxLCAweDAwMDEsCisJCSJIUCIsCisJCSJDRC1Xcml0ZXIrIDgyMDBlIiwKKwkJVVNfU0NfODA3MCwgVVNfUFJfVVNCQVQsIGluaXRfdXNiYXRfY2QsIDApLAorCitVTlVTVUFMX0RFViggIDB4MDNmMCwgMHgwMzA3LCAweDAwMDEsIDB4MDAwMSwKKwkJIkhQIiwKKwkJIkNELVdyaXRlcisgQ0QtNGUiLAorCQlVU19TQ184MDcwLCBVU19QUl9VU0JBVCwgaW5pdF91c2JhdF9jZCwgMCksCisKK1VOVVNVQUxfREVWKCAgMHgwNGU2LCAweDEwMTAsIDB4MDAwMCwgMHg5OTk5LAorCQkiU2h1dHRsZS9TQ00iLAorCQkiVVNCQVQtMDIiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9VU0JBVCwgaW5pdF91c2JhdF9mbGFzaCwKKwkJVVNfRkxfU0lOR0xFX0xVTiksCisKK1VOVVNVQUxfREVWKCAgMHgwNzgxLCAweDAwMDUsIDB4MDAwNSwgMHgwMDA1LAorCQkiU2FuZGlzayIsCisJCSJJbWFnZU1hdGUgU0REUi0wNWIiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9VU0JBVCwgaW5pdF91c2JhdF9mbGFzaCwKKwkJVVNfRkxfU0lOR0xFX0xVTiksCisKKyNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCkgfHwgLi4uICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91c2IuYwppbmRleCA0YmVjZjQ5Li44MDYwYjg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdXNiLmMKQEAgLTUsNyArNSw3IEBACiAgKgogICogRGV2ZWxvcGVkIHdpdGggdGhlIGFzc2lzdGFuY2Ugb2Y6CiAgKiAgIChjKSAyMDAwIERhdmlkIEwuIEJyb3duLCBKci4gKHVzYi1zdG9yYWdlQGRhdmlkYi5vcmcpCi0gKiAgIChjKSAyMDAzIEFsYW4gU3Rlcm4gKHN0ZXJuQHJvd2xhbmQuaGFydmFyZC5lZHUpCisgKiAgIChjKSAyMDAzLTIwMDkgQWxhbiBTdGVybiAoc3Rlcm5Acm93bGFuZC5oYXJ2YXJkLmVkdSkKICAqCiAgKiBJbml0aWFsIHdvcmsgYnk6CiAgKiAgIChjKSAxOTk5IE1pY2hhZWwgR2VlIChtaWNoYWVsQGxpbnV4c3BlY2lmaWMuY29tKQpAQCAtNjYsMzkgKzY2LDYgQEAKICNpbmNsdWRlICJkZWJ1Zy5oIgogI2luY2x1ZGUgImluaXRpYWxpemVycy5oIgogCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUCi0jaW5jbHVkZSAic2h1dHRsZV91c2JhdC5oIgotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOQotI2luY2x1ZGUgInNkZHIwOS5oIgotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NQotI2luY2x1ZGUgInNkZHI1NS5oIgotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00KLSNpbmNsdWRlICJmcmVlY29tLmgiCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwCi0jaW5jbHVkZSAiaXNkMjAwLmgiCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQgotI2luY2x1ZGUgImRhdGFmYWIuaCIKLSNlbmRpZgotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVAotI2luY2x1ZGUgImp1bXBzaG90LmgiCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0gKLSNpbmNsdWRlICJvbmV0b3VjaC5oIgotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQQotI2luY2x1ZGUgImFsYXVkYS5oIgotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BCi0jaW5jbHVkZSAia2FybWEuaCIKLSNlbmRpZgotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCCi0jaW5jbHVkZSAiY3lwcmVzc19hdGFjYi5oIgotI2VuZGlmCiAjaW5jbHVkZSAic2llcnJhX21zLmgiCiAjaW5jbHVkZSAib3B0aW9uX21zLmgiCiAKQEAgLTExOCwzNiArODUsOCBAQAogCiAvKgogICogVGhlIGVudHJpZXMgaW4gdGhpcyB0YWJsZSBjb3JyZXNwb25kLCBsaW5lIGZvciBsaW5lLAotICogd2l0aCB0aGUgZW50cmllcyBvZiB1c191bnVzdWFsX2Rldl9saXN0W10uCisgKiB3aXRoIHRoZSBlbnRyaWVzIGluIHVzYl9zdG9yYWdlX3VzYl9pZHNbXSwgZGVmaW5lZCBpbiB1c3VhbC10YWJsZXMuYy4KICAqLwotI2lmbmRlZiBDT05GSUdfVVNCX0xJQlVTVUFMCi0KLSNkZWZpbmUgVU5VU1VBTF9ERVYoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCwgXAotCQkgICAgdmVuZG9yTmFtZSwgcHJvZHVjdE5hbWUsdXNlUHJvdG9jb2wsIHVzZVRyYW5zcG9ydCwgXAotCQkgICAgaW5pdEZ1bmN0aW9uLCBmbGFncykgXAoteyBVU0JfREVWSUNFX1ZFUihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbixiY2REZXZpY2VNYXgpLCBcCi0gIC5kcml2ZXJfaW5mbyA9IChmbGFncyl8KFVTQl9VU19UWVBFX1NUT1I8PDI0KSB9Ci0KLSNkZWZpbmUgQ09NUExJQU5UX0RFVglVTlVTVUFMX0RFVgotCi0jZGVmaW5lIFVTVUFMX0RFVih1c2VQcm90bywgdXNlVHJhbnMsIHVzZVR5cGUpIFwKLXsgVVNCX0lOVEVSRkFDRV9JTkZPKFVTQl9DTEFTU19NQVNTX1NUT1JBR0UsIHVzZVByb3RvLCB1c2VUcmFucyksIFwKLSAgLmRyaXZlcl9pbmZvID0gKFVTQl9VU19UWVBFX1NUT1I8PDI0KSB9Ci0KLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBzdG9yYWdlX3VzYl9pZHMgW10gPSB7Ci0KLSMJaW5jbHVkZSAidW51c3VhbF9kZXZzLmgiCi0jdW5kZWYgVU5VU1VBTF9ERVYKLSN1bmRlZiBDT01QTElBTlRfREVWCi0jdW5kZWYgVVNVQUxfREVWCi0JLyogVGVybWluYXRpbmcgZW50cnkgKi8KLQl7IH0KLX07Ci0KLU1PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgc3RvcmFnZV91c2JfaWRzKTsKLSNlbmRpZiAvKiBDT05GSUdfVVNCX0xJQlVTVUFMICovCi0KLS8qIFRoaXMgaXMgdGhlIGxpc3Qgb2YgZGV2aWNlcyB3ZSByZWNvZ25pemUsIGFsb25nIHdpdGggdGhlaXIgZmxhZyBkYXRhICovCiAKIC8qIFRoZSB2ZW5kb3IgbmFtZSBzaG91bGQgYmUga2VwdCBhdCBlaWdodCBjaGFyYWN0ZXJzIG9yIGxlc3MsIGFuZAogICogdGhlIHByb2R1Y3QgbmFtZSBzaG91bGQgYmUga2VwdCBhdCAxNiBjaGFyYWN0ZXJzIG9yIGxlc3MuIElmIGEgZGV2aWNlCkBAIC0xNzksMTggKzExOCwxNyBAQAogCiBzdGF0aWMgc3RydWN0IHVzX3VudXN1YWxfZGV2IHVzX3VudXN1YWxfZGV2X2xpc3RbXSA9IHsKICMJaW5jbHVkZSAidW51c3VhbF9kZXZzLmgiIAotIwl1bmRlZiBVTlVTVUFMX0RFVgotIwl1bmRlZiBDT01QTElBTlRfREVWCi0jCXVuZGVmIFVTVUFMX0RFVgotCi0JLyogVGVybWluYXRpbmcgZW50cnkgKi8KLQl7IE5VTEwgfQorCXsgfQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KIH07CiAKKyN1bmRlZiBVTlVTVUFMX0RFVgorI3VuZGVmIENPTVBMSUFOVF9ERVYKKyN1bmRlZiBVU1VBTF9ERVYKKwogCiAjaWZkZWYgQ09ORklHX1BNCS8qIE1pbmltYWwgc3VwcG9ydCBmb3Igc3VzcGVuZCBhbmQgcmVzdW1lICovCiAKLXN0YXRpYyBpbnQgc3RvcmFnZV9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpCitpbnQgdXNiX3N0b3Jfc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKQogewogCXN0cnVjdCB1c19kYXRhICp1cyA9IHVzYl9nZXRfaW50ZmRhdGEoaWZhY2UpOwogCkBAIC0yMDcsOCArMTQ1LDkgQEAKIAltdXRleF91bmxvY2soJnVzLT5kZXZfbXV0ZXgpOwogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX3N0b3Jfc3VzcGVuZCk7CiAKLXN0YXRpYyBpbnQgc3RvcmFnZV9yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlKQoraW50IHVzYl9zdG9yX3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UpCiB7CiAJc3RydWN0IHVzX2RhdGEgKnVzID0gdXNiX2dldF9pbnRmZGF0YShpZmFjZSk7CiAKQEAgLTIyMSw4ICsxNjAsOSBAQAogCW11dGV4X3VubG9jaygmdXMtPmRldl9tdXRleCk7CiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc3Rvcl9yZXN1bWUpOwogCi1zdGF0aWMgaW50IHN0b3JhZ2VfcmVzZXRfcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSkKK2ludCB1c2Jfc3Rvcl9yZXNldF9yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlKQogewogCXN0cnVjdCB1c19kYXRhICp1cyA9IHVzYl9nZXRfaW50ZmRhdGEoaWZhY2UpOwogCkBAIC0yMzUsNiArMTc1LDcgQEAKIAkgKiB0aGUgZGV2aWNlICovCiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc3Rvcl9yZXNldF9yZXN1bWUpOwogCiAjZW5kaWYgLyogQ09ORklHX1BNICovCiAKQEAgLTI0Myw3ICsxODQsNyBAQAogICogYSBVU0IgcG9ydCByZXNldCwgd2hldGhlciBmcm9tIHRoaXMgZHJpdmVyIG9yIGEgZGlmZmVyZW50IG9uZS4KICAqLwogCi1zdGF0aWMgaW50IHN0b3JhZ2VfcHJlX3Jlc2V0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSkKK2ludCB1c2Jfc3Rvcl9wcmVfcmVzZXQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlKQogewogCXN0cnVjdCB1c19kYXRhICp1cyA9IHVzYl9nZXRfaW50ZmRhdGEoaWZhY2UpOwogCkBAIC0yNTMsOCArMTk0LDkgQEAKIAltdXRleF9sb2NrKCZ1cy0+ZGV2X211dGV4KTsKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9zdG9yX3ByZV9yZXNldCk7CiAKLXN0YXRpYyBpbnQgc3RvcmFnZV9wb3N0X3Jlc2V0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSkKK2ludCB1c2Jfc3Rvcl9wb3N0X3Jlc2V0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSkKIHsKIAlzdHJ1Y3QgdXNfZGF0YSAqdXMgPSB1c2JfZ2V0X2ludGZkYXRhKGlmYWNlKTsKIApAQCAtMjY5LDYgKzIxMSw3IEBACiAJbXV0ZXhfdW5sb2NrKCZ1cy0+ZGV2X211dGV4KTsKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9zdG9yX3Bvc3RfcmVzZXQpOwogCiAvKgogICogZmlsbF9pbnF1aXJ5X3Jlc3BvbnNlIHRha2VzIGFuIHVuc2lnbmVkIGNoYXIgYXJyYXkgKHdoaWNoIG11c3QKQEAgLTMxMSw2ICsyNTQsNyBAQAogCiAJdXNiX3N0b3Jfc2V0X3hmZXJfYnVmKGRhdGEsIGRhdGFfbGVuLCB1cy0+c3JiKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGZpbGxfaW5xdWlyeV9yZXNwb25zZSk7CiAKIHN0YXRpYyBpbnQgdXNiX3N0b3JfY29udHJvbF90aHJlYWQodm9pZCAqIF9fdXMpCiB7CkBAIC01NTEsMjAgKzQ5NSwxMyBAQAogCQkJdmlkLCBwaWQsIGYpOwogfQogCi0vKiBGaW5kIGFuIHVudXN1YWxfZGV2IGRlc2NyaXB0b3IgKGFsd2F5cyBzdWNjZWVkcyBpbiB0aGUgY3VycmVudCBjb2RlKSAqLwotc3RhdGljIHN0cnVjdCB1c191bnVzdWFsX2RldiAqZmluZF91bnVzdWFsKGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKLXsKLQljb25zdCBpbnQgaWRfaW5kZXggPSBpZCAtIHN0b3JhZ2VfdXNiX2lkczsKLQlyZXR1cm4gJnVzX3VudXN1YWxfZGV2X2xpc3RbaWRfaW5kZXhdOwotfQotCiAvKiBHZXQgdGhlIHVudXN1YWxfZGV2cyBlbnRyaWVzIGFuZCB0aGUgc3RyaW5nIGRlc2NyaXB0b3JzICovCi1zdGF0aWMgaW50IGdldF9kZXZpY2VfaW5mbyhzdHJ1Y3QgdXNfZGF0YSAqdXMsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3N0YXRpYyBpbnQgZ2V0X2RldmljZV9pbmZvKHN0cnVjdCB1c19kYXRhICp1cywgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkLAorCQlzdHJ1Y3QgdXNfdW51c3VhbF9kZXYgKnVudXN1YWxfZGV2KQogewogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSB1cy0+cHVzYl9kZXY7CiAJc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvciAqaWRlc2MgPQogCQkmdXMtPnB1c2JfaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2M7Ci0Jc3RydWN0IHVzX3VudXN1YWxfZGV2ICp1bnVzdWFsX2RldiA9IGZpbmRfdW51c3VhbChpZCk7CiAKIAkvKiBTdG9yZSB0aGUgZW50cmllcyAqLwogCXVzLT51bnVzdWFsX2RldiA9IHVudXN1YWxfZGV2OwpAQCAtNjI5LDcgKzU2Niw3IEBACiB9CiAKIC8qIEdldCB0aGUgdHJhbnNwb3J0IHNldHRpbmdzICovCi1zdGF0aWMgaW50IGdldF90cmFuc3BvcnQoc3RydWN0IHVzX2RhdGEgKnVzKQorc3RhdGljIHZvaWQgZ2V0X3RyYW5zcG9ydChzdHJ1Y3QgdXNfZGF0YSAqdXMpCiB7CiAJc3dpdGNoICh1cy0+cHJvdG9jb2wpIHsKIAljYXNlIFVTX1BSX0NCOgpAQCAtNjUxLDEwMCArNTg4LDExIEBACiAJCXVzLT50cmFuc3BvcnQgPSB1c2Jfc3Rvcl9CdWxrX3RyYW5zcG9ydDsKIAkJdXMtPnRyYW5zcG9ydF9yZXNldCA9IHVzYl9zdG9yX0J1bGtfcmVzZXQ7CiAJCWJyZWFrOwotCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUCi0JY2FzZSBVU19QUl9VU0JBVDoKLQkJdXMtPnRyYW5zcG9ydF9uYW1lID0gIlNodXR0bGUgVVNCQVQiOwotCQl1cy0+dHJhbnNwb3J0ID0gdXNiYXRfdHJhbnNwb3J0OwotCQl1cy0+dHJhbnNwb3J0X3Jlc2V0ID0gdXNiX3N0b3JfQ0JfcmVzZXQ7Ci0JCXVzLT5tYXhfbHVuID0gMTsKLQkJYnJlYWs7Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkKLQljYXNlIFVTX1BSX0VVU0JfU0REUjA5OgotCQl1cy0+dHJhbnNwb3J0X25hbWUgPSAiRVVTQi9TRERSMDkiOwotCQl1cy0+dHJhbnNwb3J0ID0gc2RkcjA5X3RyYW5zcG9ydDsKLQkJdXMtPnRyYW5zcG9ydF9yZXNldCA9IHVzYl9zdG9yX0NCX3Jlc2V0OwotCQl1cy0+bWF4X2x1biA9IDA7Ci0JCWJyZWFrOwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1Ci0JY2FzZSBVU19QUl9TRERSNTU6Ci0JCXVzLT50cmFuc3BvcnRfbmFtZSA9ICJTRERSNTUiOwotCQl1cy0+dHJhbnNwb3J0ID0gc2RkcjU1X3RyYW5zcG9ydDsKLQkJdXMtPnRyYW5zcG9ydF9yZXNldCA9IHNkZHI1NV9yZXNldDsKLQkJdXMtPm1heF9sdW4gPSAwOwotCQlicmVhazsKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0RQQ00KLQljYXNlIFVTX1BSX0RQQ01fVVNCOgotCQl1cy0+dHJhbnNwb3J0X25hbWUgPSAiQ29udHJvbC9CdWxrLUVVU0IvU0REUjA5IjsKLQkJdXMtPnRyYW5zcG9ydCA9IGRwY21fdHJhbnNwb3J0OwotCQl1cy0+dHJhbnNwb3J0X3Jlc2V0ID0gdXNiX3N0b3JfQ0JfcmVzZXQ7Ci0JCXVzLT5tYXhfbHVuID0gMTsKLQkJYnJlYWs7Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NCi0JY2FzZSBVU19QUl9GUkVFQ09NOgotCQl1cy0+dHJhbnNwb3J0X25hbWUgPSAiRnJlZWNvbSI7Ci0JCXVzLT50cmFuc3BvcnQgPSBmcmVlY29tX3RyYW5zcG9ydDsKLQkJdXMtPnRyYW5zcG9ydF9yZXNldCA9IHVzYl9zdG9yX2ZyZWVjb21fcmVzZXQ7Ci0JCXVzLT5tYXhfbHVuID0gMDsKLQkJYnJlYWs7Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCCi0JY2FzZSBVU19QUl9EQVRBRkFCOgotCQl1cy0+dHJhbnNwb3J0X25hbWUgID0gIkRhdGFmYWIgQnVsay1Pbmx5IjsKLQkJdXMtPnRyYW5zcG9ydCA9IGRhdGFmYWJfdHJhbnNwb3J0OwotCQl1cy0+dHJhbnNwb3J0X3Jlc2V0ID0gdXNiX3N0b3JfQnVsa19yZXNldDsKLQkJdXMtPm1heF9sdW4gPSAxOwotCQlicmVhazsKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UCi0JY2FzZSBVU19QUl9KVU1QU0hPVDoKLQkJdXMtPnRyYW5zcG9ydF9uYW1lICA9ICJMZXhhciBKdW1wc2hvdCBDb250cm9sL0J1bGsiOwotCQl1cy0+dHJhbnNwb3J0ID0ganVtcHNob3RfdHJhbnNwb3J0OwotCQl1cy0+dHJhbnNwb3J0X3Jlc2V0ID0gdXNiX3N0b3JfQnVsa19yZXNldDsKLQkJdXMtPm1heF9sdW4gPSAxOwotCQlicmVhazsKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQQotCWNhc2UgVVNfUFJfQUxBVURBOgotCQl1cy0+dHJhbnNwb3J0X25hbWUgID0gIkFsYXVkYSBDb250cm9sL0J1bGsiOwotCQl1cy0+dHJhbnNwb3J0ID0gYWxhdWRhX3RyYW5zcG9ydDsKLQkJdXMtPnRyYW5zcG9ydF9yZXNldCA9IHVzYl9zdG9yX0J1bGtfcmVzZXQ7Ci0JCXVzLT5tYXhfbHVuID0gMTsKLQkJYnJlYWs7Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQQotCWNhc2UgVVNfUFJfS0FSTUE6Ci0JCXVzLT50cmFuc3BvcnRfbmFtZSA9ICJSaW8gS2FybWEvQnVsayI7Ci0JCXVzLT50cmFuc3BvcnQgPSByaW9fa2FybWFfdHJhbnNwb3J0OwotCQl1cy0+dHJhbnNwb3J0X3Jlc2V0ID0gdXNiX3N0b3JfQnVsa19yZXNldDsKLQkJYnJlYWs7Ci0jZW5kaWYKLQotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlPOwogCX0KLQlVU19ERUJVR1AoIlRyYW5zcG9ydDogJXNcbiIsIHVzLT50cmFuc3BvcnRfbmFtZSk7Ci0KLQkvKiBmaXggZm9yIHNpbmdsZS1sdW4gZGV2aWNlcyAqLwotCWlmICh1cy0+ZmZsYWdzICYgVVNfRkxfU0lOR0xFX0xVTikKLQkJdXMtPm1heF9sdW4gPSAwOwotCXJldHVybiAwOwogfQogCiAvKiBHZXQgdGhlIHByb3RvY29sIHNldHRpbmdzICovCi1zdGF0aWMgaW50IGdldF9wcm90b2NvbChzdHJ1Y3QgdXNfZGF0YSAqdXMpCitzdGF0aWMgdm9pZCBnZXRfcHJvdG9jb2woc3RydWN0IHVzX2RhdGEgKnVzKQogewogCXN3aXRjaCAodXMtPnN1YmNsYXNzKSB7CiAJY2FzZSBVU19TQ19SQkM6CkBAIC03NzksMjYgKzYyNyw3IEBACiAJCXVzLT5wcm90b2NvbF9uYW1lID0gIlVuaWZvcm0gRmxvcHB5IEludGVyZmFjZSAoVUZJKSI7CiAJCXVzLT5wcm90b19oYW5kbGVyID0gdXNiX3N0b3JfdWZpX2NvbW1hbmQ7CiAJCWJyZWFrOwotCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMAotCWNhc2UgVVNfU0NfSVNEMjAwOgotCQl1cy0+cHJvdG9jb2xfbmFtZSA9ICJJU0QyMDAgQVRBL0FUQVBJIjsKLQkJdXMtPnByb3RvX2hhbmRsZXIgPSBpc2QyMDBfYXRhX2NvbW1hbmQ7Ci0JCWJyZWFrOwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQgotCWNhc2UgVVNfU0NfQ1lQX0FUQUNCOgotCQl1cy0+cHJvdG9jb2xfbmFtZSA9ICJUcmFuc3BhcmVudCBTQ1NJIHdpdGggQ3lwcmVzcyBBVEFDQiI7Ci0JCXVzLT5wcm90b19oYW5kbGVyID0gY3lwcmVzc19hdGFjYl9wYXNzdGhyb3VnaDsKLQkJYnJlYWs7Ci0jZW5kaWYKLQotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlPOwogCX0KLQlVU19ERUJVR1AoIlByb3RvY29sOiAlc1xuIiwgdXMtPnByb3RvY29sX25hbWUpOwotCXJldHVybiAwOwogfQogCiAvKiBHZXQgdGhlIHBpcGUgc2V0dGluZ3MgKi8KQEAgLTg0NiwxMiArNjc1LDEyIEBACiAJdXMtPnNlbmRfY3RybF9waXBlID0gdXNiX3NuZGN0cmxwaXBlKHVzLT5wdXNiX2RldiwgMCk7CiAJdXMtPnJlY3ZfY3RybF9waXBlID0gdXNiX3JjdmN0cmxwaXBlKHVzLT5wdXNiX2RldiwgMCk7CiAJdXMtPnNlbmRfYnVsa19waXBlID0gdXNiX3NuZGJ1bGtwaXBlKHVzLT5wdXNiX2RldiwKLQkJZXBfb3V0LT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0VORFBPSU5UX05VTUJFUl9NQVNLKTsKKwkJdXNiX2VuZHBvaW50X251bShlcF9vdXQpKTsKIAl1cy0+cmVjdl9idWxrX3BpcGUgPSB1c2JfcmN2YnVsa3BpcGUodXMtPnB1c2JfZGV2LCAKLQkJZXBfaW4tPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfTlVNQkVSX01BU0spOworCQl1c2JfZW5kcG9pbnRfbnVtKGVwX2luKSk7CiAJaWYgKGVwX2ludCkgewogCQl1cy0+cmVjdl9pbnRyX3BpcGUgPSB1c2JfcmN2aW50cGlwZSh1cy0+cHVzYl9kZXYsCi0JCQllcF9pbnQtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfTlVNQkVSX01BU0spOworCQkJdXNiX2VuZHBvaW50X251bShlcF9pbnQpKTsKIAkJdXMtPmVwX2JJbnRlcnZhbCA9IGVwX2ludC0+YkludGVydmFsOwogCX0KIAlyZXR1cm4gMDsKQEAgLTEwMTIsMTcgKzg0MSwxNSBAQAogfQogCiAKLS8qIFByb2JlIHRvIHNlZSBpZiB3ZSBjYW4gZHJpdmUgYSBuZXdseS1jb25uZWN0ZWQgVVNCIGRldmljZSAqLwotc3RhdGljIGludCBzdG9yYWdlX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAotCQkJIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKKy8qIEZpcnN0IHBhcnQgb2YgZ2VuZXJhbCBVU0IgbWFzcy1zdG9yYWdlIHByb2JpbmcgKi8KK2ludCB1c2Jfc3Rvcl9wcm9iZTEoc3RydWN0IHVzX2RhdGEgKipwdXMsCisJCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQsCisJCXN0cnVjdCB1c191bnVzdWFsX2RldiAqdW51c3VhbF9kZXYpCiB7CiAJc3RydWN0IFNjc2lfSG9zdCAqaG9zdDsKIAlzdHJ1Y3QgdXNfZGF0YSAqdXM7CiAJaW50IHJlc3VsdDsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRoOwotCi0JaWYgKHVzYl91c3VhbF9jaGVja190eXBlKGlkLCBVU0JfVVNfVFlQRV9TVE9SKSkKLQkJcmV0dXJuIC1FTlhJTzsKIAogCVVTX0RFQlVHUCgiVVNCIE1hc3MgU3RvcmFnZSBkZXZpY2UgZGV0ZWN0ZWRcbiIpOwogCkBAIC0xMDQxLDcgKzg2OCw3IEBACiAJICogQWxsb3cgMTYtYnl0ZSBDREJzIGFuZCB0aHVzID4gMlRCCiAJICovCiAJaG9zdC0+bWF4X2NtZF9sZW4gPSAxNjsKLQl1cyA9IGhvc3RfdG9fdXMoaG9zdCk7CisJKnB1cyA9IHVzID0gaG9zdF90b191cyhob3N0KTsKIAltZW1zZXQodXMsIDAsIHNpemVvZihzdHJ1Y3QgdXNfZGF0YSkpOwogCW11dGV4X2luaXQoJih1cy0+ZGV2X211dGV4KSk7CiAJaW5pdF9jb21wbGV0aW9uKCZ1cy0+Y21uZF9yZWFkeSk7CkBAIC0xMDU0LDI0ICs4ODEsNDYgQEAKIAlpZiAocmVzdWx0KQogCQlnb3RvIEJhZERldmljZTsKIAotCS8qCi0JICogR2V0IHRoZSB1bnVzdWFsX2RldnMgZW50cmllcyBhbmQgdGhlIGRlc2NyaXB0b3JzCi0JICoKLQkgKiBpZF9pbmRleCBpcyBjYWxjdWxhdGVkIGluIHRoZSBkZWNsYXJhdGlvbiB0byBiZSB0aGUgaW5kZXggbnVtYmVyCi0JICogb2YgdGhlIG1hdGNoIGZyb20gdGhlIHVzYl9kZXZpY2VfaWQgdGFibGUsIHNvIHdlIGNhbiBmaW5kIHRoZQotCSAqIGNvcnJlc3BvbmRpbmcgZW50cnkgaW4gdGhlIHByaXZhdGUgdGFibGUuCi0JICovCi0JcmVzdWx0ID0gZ2V0X2RldmljZV9pbmZvKHVzLCBpZCk7CisJLyogR2V0IHRoZSB1bnVzdWFsX2RldnMgZW50cmllcyBhbmQgdGhlIGRlc2NyaXB0b3JzICovCisJcmVzdWx0ID0gZ2V0X2RldmljZV9pbmZvKHVzLCBpZCwgdW51c3VhbF9kZXYpOwogCWlmIChyZXN1bHQpCiAJCWdvdG8gQmFkRGV2aWNlOwogCi0JLyogR2V0IHRoZSB0cmFuc3BvcnQsIHByb3RvY29sLCBhbmQgcGlwZSBzZXR0aW5ncyAqLwotCXJlc3VsdCA9IGdldF90cmFuc3BvcnQodXMpOwotCWlmIChyZXN1bHQpCisJLyogR2V0IHN0YW5kYXJkIHRyYW5zcG9ydCBhbmQgcHJvdG9jb2wgc2V0dGluZ3MgKi8KKwlnZXRfdHJhbnNwb3J0KHVzKTsKKwlnZXRfcHJvdG9jb2wodXMpOworCisJLyogR2l2ZSB0aGUgY2FsbGVyIGEgY2hhbmNlIHRvIGZpbGwgaW4gc3BlY2lhbGl6ZWQgdHJhbnNwb3J0CisJICogb3IgcHJvdG9jb2wgc2V0dGluZ3MuCisJICovCisJcmV0dXJuIDA7CisKK0JhZERldmljZToKKwlVU19ERUJVR1AoInN0b3JhZ2VfcHJvYmUoKSBmYWlsZWRcbiIpOworCXJlbGVhc2VfZXZlcnl0aGluZyh1cyk7CisJcmV0dXJuIHJlc3VsdDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9zdG9yX3Byb2JlMSk7CisKKy8qIFNlY29uZCBwYXJ0IG9mIGdlbmVyYWwgVVNCIG1hc3Mtc3RvcmFnZSBwcm9iaW5nICovCitpbnQgdXNiX3N0b3JfcHJvYmUyKHN0cnVjdCB1c19kYXRhICp1cykKK3sKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRoOworCWludCByZXN1bHQ7CisKKwkvKiBNYWtlIHN1cmUgdGhlIHRyYW5zcG9ydCBhbmQgcHJvdG9jb2wgaGF2ZSBib3RoIGJlZW4gc2V0ICovCisJaWYgKCF1cy0+dHJhbnNwb3J0IHx8ICF1cy0+cHJvdG9faGFuZGxlcikgeworCQlyZXN1bHQgPSAtRU5YSU87CiAJCWdvdG8gQmFkRGV2aWNlOwotCXJlc3VsdCA9IGdldF9wcm90b2NvbCh1cyk7Ci0JaWYgKHJlc3VsdCkKLQkJZ290byBCYWREZXZpY2U7CisJfQorCVVTX0RFQlVHUCgiVHJhbnNwb3J0OiAlc1xuIiwgdXMtPnRyYW5zcG9ydF9uYW1lKTsKKwlVU19ERUJVR1AoIlByb3RvY29sOiAlc1xuIiwgdXMtPnByb3RvY29sX25hbWUpOworCisJLyogZml4IGZvciBzaW5nbGUtbHVuIGRldmljZXMgKi8KKwlpZiAodXMtPmZmbGFncyAmIFVTX0ZMX1NJTkdMRV9MVU4pCisJCXVzLT5tYXhfbHVuID0gMDsKKworCS8qIEZpbmQgdGhlIGVuZHBvaW50cyBhbmQgY2FsY3VsYXRlIHBpcGUgdmFsdWVzICovCiAJcmVzdWx0ID0gZ2V0X3BpcGVzKHVzKTsKIAlpZiAocmVzdWx0KQogCQlnb3RvIEJhZERldmljZTsKQEAgLTEwODAsNyArOTI5LDcgQEAKIAlyZXN1bHQgPSB1c2Jfc3Rvcl9hY3F1aXJlX3Jlc291cmNlcyh1cyk7CiAJaWYgKHJlc3VsdCkKIAkJZ290byBCYWREZXZpY2U7Ci0JcmVzdWx0ID0gc2NzaV9hZGRfaG9zdChob3N0LCAmaW50Zi0+ZGV2KTsKKwlyZXN1bHQgPSBzY3NpX2FkZF9ob3N0KHVzX3RvX2hvc3QodXMpLCAmdXMtPnB1c2JfaW50Zi0+ZGV2KTsKIAlpZiAocmVzdWx0KSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgVVNCX1NUT1JBR0UKIAkJCSJVbmFibGUgdG8gYWRkIHRoZSBzY3NpIGhvc3RcbiIpOwpAQCAtMTEwOCw5ICs5NTcsMTAgQEAKIAlyZWxlYXNlX2V2ZXJ5dGhpbmcodXMpOwogCXJldHVybiByZXN1bHQ7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc3Rvcl9wcm9iZTIpOwogCi0vKiBIYW5kbGUgYSBkaXNjb25uZWN0IGV2ZW50IGZyb20gdGhlIFVTQiBjb3JlICovCi1zdGF0aWMgdm9pZCBzdG9yYWdlX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCisvKiBIYW5kbGUgYSBVU0IgbWFzcy1zdG9yYWdlIGRpc2Nvbm5lY3QgKi8KK3ZvaWQgdXNiX3N0b3JfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKIHsKIAlzdHJ1Y3QgdXNfZGF0YSAqdXMgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwogCkBAIC0xMTE4LDYgKzk2OCw0MiBAQAogCXF1aWVzY2VfYW5kX3JlbW92ZV9ob3N0KHVzKTsKIAlyZWxlYXNlX2V2ZXJ5dGhpbmcodXMpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX3N0b3JfZGlzY29ubmVjdCk7CisKKy8qIFRoZSBtYWluIHByb2JlIHJvdXRpbmUgZm9yIHN0YW5kYXJkIGRldmljZXMgKi8KK3N0YXRpYyBpbnQgc3RvcmFnZV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCSBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzX2RhdGEgKnVzOworCWludCByZXN1bHQ7CisKKwkvKgorCSAqIElmIGxpYnVzdWFsIGlzIGNvbmZpZ3VyZWQsIGxldCBpdCBkZWNpZGUgd2hldGhlciBhIHN0YW5kYXJkCisJICogZGV2aWNlIHNob3VsZCBiZSBoYW5kbGVkIGJ5IHVzYi1zdG9yYWdlIG9yIGJ5IHViLgorCSAqIElmIHRoZSBkZXZpY2UgaXNuJ3Qgc3RhbmRhcmQgKGlzIGhhbmRsZWQgYnkgYSBzdWJkcml2ZXIKKwkgKiBtb2R1bGUpIHRoZW4gZG9uJ3QgYWNjZXB0IGl0LgorCSAqLworCWlmICh1c2JfdXN1YWxfY2hlY2tfdHlwZShpZCwgVVNCX1VTX1RZUEVfU1RPUikgfHwKKwkJCXVzYl91c3VhbF9pZ25vcmVfZGV2aWNlKGludGYpKQorCQlyZXR1cm4gLUVOWElPOworCisJLyoKKwkgKiBDYWxsIHRoZSBnZW5lcmFsIHByb2JlIHByb2NlZHVyZXMuCisJICoKKwkgKiBUaGUgdW51c3VhbF9kZXZfbGlzdCBhcnJheSBpcyBwYXJhbGxlbCB0byB0aGUgdXNiX3N0b3JhZ2VfdXNiX2lkcworCSAqIHRhYmxlLCBzbyB3ZSB1c2UgdGhlIGluZGV4IG9mIHRoZSBpZCBlbnRyeSB0byBmaW5kIHRoZQorCSAqIGNvcnJlc3BvbmRpbmcgdW51c3VhbF9kZXZzIGVudHJ5LgorCSAqLworCXJlc3VsdCA9IHVzYl9zdG9yX3Byb2JlMSgmdXMsIGludGYsIGlkLAorCQkJKGlkIC0gdXNiX3N0b3JhZ2VfdXNiX2lkcykgKyB1c191bnVzdWFsX2Rldl9saXN0KTsKKwlpZiAocmVzdWx0KQorCQlyZXR1cm4gcmVzdWx0OworCisJLyogTm8gc3BlY2lhbCB0cmFuc3BvcnQgb3IgcHJvdG9jb2wgc2V0dGluZ3MgaW4gdGhlIG1haW4gbW9kdWxlICovCisKKwlyZXN1bHQgPSB1c2Jfc3Rvcl9wcm9iZTIodXMpOworCXJldHVybiByZXN1bHQ7Cit9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogSW5pdGlhbGl6YXRpb24gYW5kIHJlZ2lzdHJhdGlvbgpAQCAtMTEyNiwxNSArMTAxMiwxMyBAQAogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHVzYl9zdG9yYWdlX2RyaXZlciA9IHsKIAkubmFtZSA9CQkidXNiLXN0b3JhZ2UiLAogCS5wcm9iZSA9CXN0b3JhZ2VfcHJvYmUsCi0JLmRpc2Nvbm5lY3QgPQlzdG9yYWdlX2Rpc2Nvbm5lY3QsCi0jaWZkZWYgQ09ORklHX1BNCi0JLnN1c3BlbmQgPQlzdG9yYWdlX3N1c3BlbmQsCi0JLnJlc3VtZSA9CXN0b3JhZ2VfcmVzdW1lLAotCS5yZXNldF9yZXN1bWUgPQlzdG9yYWdlX3Jlc2V0X3Jlc3VtZSwKLSNlbmRpZgotCS5wcmVfcmVzZXQgPQlzdG9yYWdlX3ByZV9yZXNldCwKLQkucG9zdF9yZXNldCA9CXN0b3JhZ2VfcG9zdF9yZXNldCwKLQkuaWRfdGFibGUgPQlzdG9yYWdlX3VzYl9pZHMsCisJLmRpc2Nvbm5lY3QgPQl1c2Jfc3Rvcl9kaXNjb25uZWN0LAorCS5zdXNwZW5kID0JdXNiX3N0b3Jfc3VzcGVuZCwKKwkucmVzdW1lID0JdXNiX3N0b3JfcmVzdW1lLAorCS5yZXNldF9yZXN1bWUgPQl1c2Jfc3Rvcl9yZXNldF9yZXN1bWUsCisJLnByZV9yZXNldCA9CXVzYl9zdG9yX3ByZV9yZXNldCwKKwkucG9zdF9yZXNldCA9CXVzYl9zdG9yX3Bvc3RfcmVzZXQsCisJLmlkX3RhYmxlID0JdXNiX3N0b3JhZ2VfdXNiX2lkcywKIAkuc29mdF91bmJpbmQgPQkxLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS91c2IuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdXNiLmgKaW5kZXggNjVlNjc0ZS4uMjYwOWVmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS91c2IuaAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5oCkBAIC0xNzcsNCArMTc3LDI1IEBACiAjZGVmaW5lIHNjc2lfdW5sb2NrKGhvc3QpCXNwaW5fdW5sb2NrX2lycShob3N0LT5ob3N0X2xvY2spCiAjZGVmaW5lIHNjc2lfbG9jayhob3N0KQkJc3Bpbl9sb2NrX2lycShob3N0LT5ob3N0X2xvY2spCiAKKy8qIEdlbmVyYWwgcm91dGluZXMgcHJvdmlkZWQgYnkgdGhlIHVzYi1zdG9yYWdlIHN0YW5kYXJkIGNvcmUgKi8KKyNpZmRlZiBDT05GSUdfUE0KK2V4dGVybiBpbnQgdXNiX3N0b3Jfc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKTsKK2V4dGVybiBpbnQgdXNiX3N0b3JfcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSk7CitleHRlcm4gaW50IHVzYl9zdG9yX3Jlc2V0X3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UpOworI2Vsc2UKKyNkZWZpbmUgdXNiX3N0b3Jfc3VzcGVuZAlOVUxMCisjZGVmaW5lIHVzYl9zdG9yX3Jlc3VtZQkJTlVMTAorI2RlZmluZSB1c2Jfc3Rvcl9yZXNldF9yZXN1bWUJTlVMTAorI2VuZGlmCisKK2V4dGVybiBpbnQgdXNiX3N0b3JfcHJlX3Jlc2V0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSk7CitleHRlcm4gaW50IHVzYl9zdG9yX3Bvc3RfcmVzZXQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlKTsKKworZXh0ZXJuIGludCB1c2Jfc3Rvcl9wcm9iZTEoc3RydWN0IHVzX2RhdGEgKipwdXMsCisJCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQsCisJCXN0cnVjdCB1c191bnVzdWFsX2RldiAqdW51c3VhbF9kZXYpOworZXh0ZXJuIGludCB1c2Jfc3Rvcl9wcm9iZTIoc3RydWN0IHVzX2RhdGEgKnVzKTsKK2V4dGVybiB2b2lkIHVzYl9zdG9yX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpOworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdXN1YWwtdGFibGVzLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VzdWFsLXRhYmxlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2OGJkZTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VzdWFsLXRhYmxlcy5jCkBAIC0wLDAgKzEsMTE2IEBACisvKiBEcml2ZXIgZm9yIFVTQiBNYXNzIFN0b3JhZ2UgZGV2aWNlcworICogVXN1YWwgVGFibGVzIEZpbGUgZm9yIHVzYi1zdG9yYWdlIGFuZCBsaWJ1c3VhbAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBbGFuIFN0ZXJuIChzdGVybkByb3dsYW5kLmhhcnZhcmQuZWR1KQorICoKKyAqIFBsZWFzZSBzZWUgaHR0cDovL3d3dy5vbmUtZXllZC1hbGllbi5uZXQvfm1kaGFybS9saW51eC11c2IgZm9yIG1vcmUKKyAqIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgZHJpdmVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC91c2JfdXN1YWwuaD4KKworCisvKgorICogVGhlIHRhYmxlIG9mIGRldmljZXMKKyAqLworI2RlZmluZSBVTlVTVUFMX0RFVihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4LCBcCisJCSAgICB2ZW5kb3JOYW1lLCBwcm9kdWN0TmFtZSwgdXNlUHJvdG9jb2wsIHVzZVRyYW5zcG9ydCwgXAorCQkgICAgaW5pdEZ1bmN0aW9uLCBmbGFncykgXAoreyBVU0JfREVWSUNFX1ZFUihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4KSwgXAorICAuZHJpdmVyX2luZm8gPSAoZmxhZ3MpfChVU0JfVVNfVFlQRV9TVE9SPDwyNCkgfQorCisjZGVmaW5lIENPTVBMSUFOVF9ERVYoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCwgXAorCQkgICAgdmVuZG9yTmFtZSwgcHJvZHVjdE5hbWUsIHVzZVByb3RvY29sLCB1c2VUcmFuc3BvcnQsIFwKKwkJICAgIGluaXRGdW5jdGlvbiwgZmxhZ3MpIFwKK3sgVVNCX0RFVklDRV9WRVIoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCksIFwKKyAgLmRyaXZlcl9pbmZvID0gKGZsYWdzKSB9CisKKyNkZWZpbmUgVVNVQUxfREVWKHVzZVByb3RvLCB1c2VUcmFucywgdXNlVHlwZSkgXAoreyBVU0JfSU5URVJGQUNFX0lORk8oVVNCX0NMQVNTX01BU1NfU1RPUkFHRSwgdXNlUHJvdG8sIHVzZVRyYW5zKSwgXAorICAuZHJpdmVyX2luZm8gPSAoKHVzZVR5cGUpPDwyNCkgfQorCitzdHJ1Y3QgdXNiX2RldmljZV9pZCB1c2Jfc3RvcmFnZV91c2JfaWRzW10gPSB7CisjCWluY2x1ZGUgInVudXN1YWxfZGV2cy5oIgorCXsgfQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CitFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc3RvcmFnZV91c2JfaWRzKTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIHVzYl9zdG9yYWdlX3VzYl9pZHMpOworCisjdW5kZWYgVU5VU1VBTF9ERVYKKyN1bmRlZiBDT01QTElBTlRfREVWCisjdW5kZWYgVVNVQUxfREVWCisKKworLyoKKyAqIFRoZSB0YWJsZSBvZiBkZXZpY2VzIHRvIGlnbm9yZQorICovCitzdHJ1Y3QgaWdub3JlX2VudHJ5IHsKKwl1MTYJdmlkLCBwaWQsIGJjZG1pbiwgYmNkbWF4OworfTsKKworI2RlZmluZSBVTlVTVUFMX0RFVihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4LCBcCisJCSAgICB2ZW5kb3JOYW1lLCBwcm9kdWN0TmFtZSwgdXNlUHJvdG9jb2wsIHVzZVRyYW5zcG9ydCwgXAorCQkgICAgaW5pdEZ1bmN0aW9uLCBmbGFncykgXAorewkJCQkJXAorCS52aWQJPSBpZF92ZW5kb3IsCQlcCisJLnBpZCAJPSBpZF9wcm9kdWN0LAkJXAorCS5iY2RtaW4JPSBiY2REZXZpY2VNaW4sCQlcCisJLmJjZG1heCA9IGJjZERldmljZU1heCwJCVwKK30KKworc3RhdGljIHN0cnVjdCBpZ25vcmVfZW50cnkgaWdub3JlX2lkc1tdID0geworIwlpbmNsdWRlICJ1bnVzdWFsX2FsYXVkYS5oIgorIwlpbmNsdWRlICJ1bnVzdWFsX2N5cHJlc3MuaCIKKyMJaW5jbHVkZSAidW51c3VhbF9kYXRhZmFiLmgiCisjCWluY2x1ZGUgInVudXN1YWxfZnJlZWNvbS5oIgorIwlpbmNsdWRlICJ1bnVzdWFsX2lzZDIwMC5oIgorIwlpbmNsdWRlICJ1bnVzdWFsX2p1bXBzaG90LmgiCisjCWluY2x1ZGUgInVudXN1YWxfa2FybWEuaCIKKyMJaW5jbHVkZSAidW51c3VhbF9vbmV0b3VjaC5oIgorIwlpbmNsdWRlICJ1bnVzdWFsX3NkZHIwOS5oIgorIwlpbmNsdWRlICJ1bnVzdWFsX3NkZHI1NS5oIgorIwlpbmNsdWRlICJ1bnVzdWFsX3VzYmF0LmgiCisJeyB9CQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworI3VuZGVmIFVOVVNVQUxfREVWCisKKworLyogUmV0dXJuIGFuIGVycm9yIGlmIGEgZGV2aWNlIGlzIGluIHRoZSBpZ25vcmVfaWRzIGxpc3QgKi8KK2ludCB1c2JfdXN1YWxfaWdub3JlX2RldmljZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKKwl1bnNpZ25lZCB2aWQsIHBpZCwgYmNkOworCXN0cnVjdCBpZ25vcmVfZW50cnkgKnA7CisKKwl1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKwl2aWQgPSBsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKTsKKwlwaWQgPSBsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCk7CisJYmNkID0gbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5iY2REZXZpY2UpOworCisJZm9yIChwID0gaWdub3JlX2lkczsgcC0+dmlkOyArK3ApIHsKKwkJaWYgKHAtPnZpZCA9PSB2aWQgJiYgcC0+cGlkID09IHBpZCAmJgorCQkJCXAtPmJjZG1pbiA8PSBiY2QgJiYgcC0+YmNkbWF4ID49IGJjZCkKKwkJCXJldHVybiAtRU5YSU87CisJfQorCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX3VzdWFsX2lnbm9yZV9kZXZpY2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvdXNiLXNrZWxldG9uLmMgYi9kcml2ZXJzL3VzYi91c2Itc2tlbGV0b24uYwppbmRleCBiZTc2MDg0Li42MGJhNjMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi91c2Itc2tlbGV0b24uYworKysgYi9kcml2ZXJzL3VzYi91c2Itc2tlbGV0b24uYwpAQCAtNDEwLDcgKzQxMCw5IEBACiAJfQogCiAJLyogbGV0IHRoZSB1c2VyIGtub3cgd2hhdCBub2RlIHRoaXMgZGV2aWNlIGlzIG5vdyBhdHRhY2hlZCB0byAqLwotCWluZm8oIlVTQiBTa2VsZXRvbiBkZXZpY2Ugbm93IGF0dGFjaGVkIHRvIFVTQlNrZWwtJWQiLCBpbnRlcmZhY2UtPm1pbm9yKTsKKwlkZXZfaW5mbygmaW50ZXJmYWNlLT5kZXYsCisJCSAiVVNCIFNrZWxldG9uIGRldmljZSBub3cgYXR0YWNoZWQgdG8gVVNCU2tlbC0lZCIsCisJCSBpbnRlcmZhY2UtPm1pbm9yKTsKIAlyZXR1cm4gMDsKIAogZXJyb3I6CkBAIC00NDEsNyArNDQzLDcgQEAKIAkvKiBkZWNyZW1lbnQgb3VyIHVzYWdlIGNvdW50ICovCiAJa3JlZl9wdXQoJmRldi0+a3JlZiwgc2tlbF9kZWxldGUpOwogCi0JaW5mbygiVVNCIFNrZWxldG9uICMlZCBub3cgZGlzY29ubmVjdGVkIiwgbWlub3IpOworCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwgIlVTQiBTa2VsZXRvbiAjJWQgbm93IGRpc2Nvbm5lY3RlZCIsIG1pbm9yKTsKIH0KIAogc3RhdGljIHZvaWQgc2tlbF9kcmF3X2Rvd24oc3RydWN0IHVzYl9za2VsICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi93dXNiY29yZS9jYmFmLmMgYi9kcml2ZXJzL3VzYi93dXNiY29yZS9jYmFmLmMKaW5kZXggMTMzNWNiZS4uMjVlYWU0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivd3VzYmNvcmUvY2JhZi5jCisrKyBiL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL2NiYWYuYwpAQCAtNjM4LDggKzYzOCw3IEBACiAJdXNiX3B1dF9pbnRmKGlmYWNlKTsKIAlrZnJlZShjYmFmLT5idWZmZXIpOwogCS8qIHBhcmFub2lhOiBjbGVhbiB1cCBjcnlwdG8ga2V5cyAqLwotCW1lbXNldChjYmFmLCAwLCBzaXplb2YoKmNiYWYpKTsKLQlrZnJlZShjYmFmKTsKKwlremZyZWUoY2JhZik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBjYmFmX2lkX3RhYmxlW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi93dXNiY29yZS9kZXZjb25uZWN0LmMgYi9kcml2ZXJzL3VzYi93dXNiY29yZS9kZXZjb25uZWN0LmMKaW5kZXggOGUxODE0MS4uZjBhYWMwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivd3VzYmNvcmUvZGV2Y29ubmVjdC5jCisrKyBiL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL2RldmNvbm5lY3QuYwpAQCAtODg5LDYgKzg4OSw4IEBACiAJaWYgKHVzYl9kZXYtPnd1c2IgPT0gMCB8fCB1c2JfZGV2LT5kZXZudW0gPT0gMSkKIAkJcmV0dXJuOwkJLyogc2tpcCBub24gd3VzYiBhbmQgd3VzYiBSSHMgKi8KIAorCXVzYl9zZXRfZGV2aWNlX3N0YXRlKHVzYl9kZXYsIFVTQl9TVEFURV9VTkFVVEhFTlRJQ0FURUQpOworCiAJd3VzYmhjID0gd3VzYmhjX2dldF9ieV91c2JfZGV2KHVzYl9kZXYpOwogCWlmICh3dXNiaGMgPT0gTlVMTCkKIAkJZ290byBlcnJvcl9ub2RldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL3NlY3VyaXR5LmMgYi9kcml2ZXJzL3VzYi93dXNiY29yZS9zZWN1cml0eS5jCmluZGV4IGY0YWEyOGUuLjgxMThkYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL3NlY3VyaXR5LmMKKysrIGIvZHJpdmVycy91c2Ivd3VzYmNvcmUvc2VjdXJpdHkuYwpAQCAtMzEyLDYgKzMxMiw3IEBACiAJcmVzdWx0ID0gd3VzYl9zZXRfZGV2X2FkZHIod3VzYmhjLCB3dXNiX2RldiwgMCk7CiAJaWYgKHJlc3VsdCA8IDApCiAJCWdvdG8gZXJyb3JfYWRkcjA7CisJdXNiX3NldF9kZXZpY2Vfc3RhdGUodXNiX2RldiwgVVNCX1NUQVRFX0RFRkFVTFQpOwogCXVzYl9lcDBfcmVpbml0KHVzYl9kZXYpOwogCiAJLyogU2V0IG5ldyAoYXV0aGVudGljYXRlZCkgYWRkcmVzcy4gKi8KQEAgLTMyNyw2ICszMjgsNyBAQAogCXJlc3VsdCA9IHd1c2Jfc2V0X2Rldl9hZGRyKHd1c2JoYywgd3VzYl9kZXYsIG5ld19hZGRyZXNzKTsKIAlpZiAocmVzdWx0IDwgMCkKIAkJZ290byBlcnJvcl9hZGRyOworCXVzYl9zZXRfZGV2aWNlX3N0YXRlKHVzYl9kZXYsIFVTQl9TVEFURV9BRERSRVNTKTsKIAl1c2JfZXAwX3JlaW5pdCh1c2JfZGV2KTsKIAl1c2JfZGV2LT5hdXRoZW50aWNhdGVkID0gMTsKIGVycm9yX2FkZHI6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2F1MTEwMGZiLmMgYi9kcml2ZXJzL3ZpZGVvL2F1MTEwMGZiLmMKaW5kZXggNjJiZDQ0NC4uMzc4ZjI3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hdTExMDBmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYXUxMTAwZmIuYwpAQCAtNDU3LDcgKzQ1Nyw3IEBACiAKIC8qIEFVMTEwMCBMQ0QgY29udHJvbGxlciBkZXZpY2UgZHJpdmVyICovCiAKLXN0YXRpYyBpbnQgX19pbml0IGF1MTEwMGZiX2Rydl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9faW5pdCBhdTExMDBmYl9kcnZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBhdTExMDBmYl9kZXZpY2UgKmZiZGV2ID0gTlVMTDsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlZ3NfcmVzOwpAQCAtNDc1LDcgKzQ3NSw3IEBACiAKIAlmYmRldi0+cGFuZWwgPSAma25vd25fbGNkX3BhbmVsc1tkcnZfaW5mby5wYW5lbF9pZHhdOwogCi0JZGV2X3NldF9kcnZkYXRhKGRldiwgKHZvaWQqKWZiZGV2KTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsICh2b2lkICopZmJkZXYpOwogCiAJLyogQWxsb2NhdGUgcmVnaW9uIGZvciBvdXIgcmVnaXN0ZXJzIGFuZCBtYXAgdGhlbSAqLwogCWlmICghKHJlZ3NfcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHRvX3BsYXRmb3JtX2RldmljZShkZXYpLApAQCAtNTgzLDE5ICs1ODMsMTkgQEAKIAkJZmJfZGVhbGxvY19jbWFwKCZmYmRldi0+aW5mby5jbWFwKTsKIAl9CiAJa2ZyZWUoZmJkZXYpOwotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CiAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGF1MTEwMGZiX2Rydl9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQoraW50IGF1MTEwMGZiX2Rydl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBhdTExMDBmYl9kZXZpY2UgKmZiZGV2ID0gTlVMTDsKIAogCWlmICghZGV2KQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWZiZGV2ID0gKHN0cnVjdCBhdTExMDBmYl9kZXZpY2UqKSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlmYmRldiA9IChzdHJ1Y3QgYXUxMTAwZmJfZGV2aWNlICopIHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKICNpZiAhZGVmaW5lZChDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRSkgJiYgZGVmaW5lZChDT05GSUdfTE9HTykKIAlhdTExMDBmYl9mYl9ibGFuayhWRVNBX1BPV0VSRE9XTiwgJmZiZGV2LT5pbmZvKTsKQEAgLTYyMCw5ICs2MjAsOSBAQAogc3RhdGljIHUzMiBzeXNfY2xrc3JjOwogc3RhdGljIHN0cnVjdCBhdTExMDBmYl9yZWdzIGZicmVnczsKIAotaW50IGF1MTEwMGZiX2Rydl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoraW50IGF1MTEwMGZiX2Rydl9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCXN0cnVjdCBhdTExMDBmYl9kZXZpY2UgKmZiZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGF1MTEwMGZiX2RldmljZSAqZmJkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJaWYgKCFmYmRldikKIAkJcmV0dXJuIDA7CkBAIC02NDEsOSArNjQxLDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGF1MTEwMGZiX2Rydl9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoraW50IGF1MTEwMGZiX2Rydl9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBhdTExMDBmYl9kZXZpY2UgKmZiZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGF1MTEwMGZiX2RldmljZSAqZmJkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJaWYgKCFmYmRldikKIAkJcmV0dXJuIDA7CkBAIC02NjMsMTAgKzY2MywxMSBAQAogI2RlZmluZSBhdTExMDBmYl9kcnZfcmVzdW1lIE5VTEwKICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgYXUxMTAwZmJfZHJpdmVyID0gewotCS5uYW1lCQk9ICJhdTExMDAtbGNkIiwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKLQorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYXUxMTAwZmJfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCQk9ICJhdTExMDAtbGNkIiwKKwkJLm93bmVyICAgICAgICAgID0gVEhJU19NT0RVTEUsCisJfSwKIAkucHJvYmUJCT0gYXUxMTAwZmJfZHJ2X3Byb2JlLAogICAgICAgICAucmVtb3ZlCQk9IGF1MTEwMGZiX2Rydl9yZW1vdmUsCiAJLnN1c3BlbmQJPSBhdTExMDBmYl9kcnZfc3VzcGVuZCwKQEAgLTc1MywxMiArNzU0LDEyIEBACiAJCXJldHVybiByZXQ7CiAJfQogCi0JcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmYXUxMTAwZmJfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZhdTExMDBmYl9kcml2ZXIpOwogfQogCiB2b2lkIF9fZXhpdCBhdTExMDBmYl9jbGVhbnVwKHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJmF1MTEwMGZiX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmF1MTEwMGZiX2RyaXZlcik7CiAKIAlrZnJlZShkcnZfaW5mby5vcHRfbW9kZSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2F1MTIwMGZiLmMgYi9kcml2ZXJzL3ZpZGVvL2F1MTIwMGZiLmMKaW5kZXggMDNlNTdlZi4uMGQ5NmYxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hdTEyMDBmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYXUxMjAwZmIuYwpAQCAtMTYyMiw3ICsxNjIyLDcgQEAKIAogLyogQVUxMjAwIExDRCBjb250cm9sbGVyIGRldmljZSBkcml2ZXIgKi8KIAotc3RhdGljIGludCBhdTEyMDBmYl9kcnZfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBhdTEyMDBmYl9kcnZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBhdTEyMDBmYl9kZXZpY2UgKmZiZGV2OwogCXVuc2lnbmVkIGxvbmcgcGFnZTsKQEAgLTE2NDUsNyArMTY0NSw3IEBACiAJCS8qIEFsbG9jYXRlIHRoZSBmcmFtZWJ1ZmZlciB0byB0aGUgbWF4aW11bSBzY3JlZW4gc2l6ZSAqLwogCQlmYmRldi0+ZmJfbGVuID0gKHdpbi0+d1twbGFuZV0ueHJlcyAqIHdpbi0+d1twbGFuZV0ueXJlcyAqIGJwcCkgLyA4OwogCi0JCWZiZGV2LT5mYl9tZW0gPSBkbWFfYWxsb2Nfbm9uY29oZXJlbnQoZGV2LAorCQlmYmRldi0+ZmJfbWVtID0gZG1hX2FsbG9jX25vbmNvaGVyZW50KCZkZXYtPmRldiwKIAkJCQlQQUdFX0FMSUdOKGZiZGV2LT5mYl9sZW4pLAogCQkJCSZmYmRldi0+ZmJfcGh5cywgR0ZQX0tFUk5FTCk7CiAJCWlmICghZmJkZXYtPmZiX21lbSkgewpAQCAtMTcxNSw3ICsxNzE1LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGF1MTIwMGZiX2Rydl9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBhdTEyMDBmYl9kcnZfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgYXUxMjAwZmJfZGV2aWNlICpmYmRldjsKIAlpbnQgcGxhbmU7CkBAIC0xNzMzLDcgKzE3MzMsOCBAQAogCQkvKiBDbGVhbiB1cCBhbGwgcHJvYmUgZGF0YSAqLwogCQl1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKCZmYmRldi0+ZmJfaW5mbyk7CiAJCWlmIChmYmRldi0+ZmJfbWVtKQotCQkJZG1hX2ZyZWVfbm9uY29oZXJlbnQoZGV2LCBQQUdFX0FMSUdOKGZiZGV2LT5mYl9sZW4pLAorCQkJZG1hX2ZyZWVfbm9uY29oZXJlbnQoJmRldi0+ZGV2LAorCQkJCQlQQUdFX0FMSUdOKGZiZGV2LT5mYl9sZW4pLAogCQkJCQlmYmRldi0+ZmJfbWVtLCBmYmRldi0+ZmJfcGh5cyk7CiAJCWlmIChmYmRldi0+ZmJfaW5mby5jbWFwLmxlbiAhPSAwKQogCQkJZmJfZGVhbGxvY19jbWFwKCZmYmRldi0+ZmJfaW5mby5jbWFwKTsKQEAgLTE3NDcsMjIgKzE3NDgsMjQgQEAKIH0KIAogI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBhdTEyMDBmYl9kcnZfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHUzMiBzdGF0ZSwgdTMyIGxldmVsKQorc3RhdGljIGludCBhdTEyMDBmYl9kcnZfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHUzMiBzdGF0ZSkKIHsKIAkvKiBUT0RPICovCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYXUxMjAwZmJfZHJ2X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHUzMiBsZXZlbCkKK3N0YXRpYyBpbnQgYXUxMjAwZmJfZHJ2X3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJLyogVE9ETyAqLwogCXJldHVybiAwOwogfQogI2VuZGlmIC8qIENPTkZJR19QTSAqLwogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgYXUxMjAwZmJfZHJpdmVyID0gewotCS5uYW1lCQk9ICJhdTEyMDAtbGNkIiwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGF1MTIwMGZiX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQkJPSAiYXUxMjAwLWxjZCIsCisJCS5vd25lciAgICAgICAgICA9IFRISVNfTU9EVUxFLAorCX0sCiAJLnByb2JlCQk9IGF1MTIwMGZiX2Rydl9wcm9iZSwKIAkucmVtb3ZlCQk9IGF1MTIwMGZiX2Rydl9yZW1vdmUsCiAjaWZkZWYgQ09ORklHX1BNCkBAIC0xOTA2LDEyICsxOTA5LDEyIEBACiAJCXByaW50ayhLRVJOX0lORk8gIlBvd2VyIG1hbmFnZW1lbnQgZGV2aWNlIGVudHJ5IGZvciB0aGUgYXUxMjAwZmIgbG9hZGVkLlxuIik7CiAJI2VuZGlmCiAKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZhdTEyMDBmYl9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmF1MTIwMGZiX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBhdTEyMDBmYl9jbGVhbnVwKHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJmF1MTIwMGZiX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmF1MTIwMGZiX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KGF1MTIwMGZiX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9wbWFnLWJhLWZiLmMgYi9kcml2ZXJzL3ZpZGVvL3BtYWctYmEtZmIuYwppbmRleCAzYTNmODBmLi4wNTczZWM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3BtYWctYmEtZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3BtYWctYmEtZmIuYwpAQCAtMTUxLDcgKzE1MSw3IEBACiAKIAlpbmZvID0gZnJhbWVidWZmZXJfYWxsb2Moc2l6ZW9mKHN0cnVjdCBwbWFnYmFmYl9wYXIpLCBkZXYpOwogCWlmICghaW5mbykgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgYWxsb2NhdGUgbWVtb3J5XG4iLCBkZXYtPmJ1c19pZCk7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCBhbGxvY2F0ZSBtZW1vcnlcbiIsIGRldl9uYW1lKGRldikpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTE2MCw3ICsxNjAsNyBAQAogCiAJaWYgKGZiX2FsbG9jX2NtYXAoJmluZm8tPmNtYXAsIDI1NiwgMCkgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCBhbGxvY2F0ZSBjb2xvciBtYXBcbiIsCi0JCSAgICAgICBkZXYtPmJ1c19pZCk7CisJCSAgICAgICBkZXZfbmFtZShkZXYpKTsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBlcnJfYWxsb2M7CiAJfQpAQCAtMTczLDggKzE3Myw5IEBACiAJLyogUmVxdWVzdCB0aGUgSS9PIE1FTSByZXNvdXJjZS4gICovCiAJc3RhcnQgPSB0ZGV2LT5yZXNvdXJjZS5zdGFydDsKIAlsZW4gPSB0ZGV2LT5yZXNvdXJjZS5lbmQgLSBzdGFydCArIDE7Ci0JaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oc3RhcnQsIGxlbiwgZGV2LT5idXNfaWQpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCByZXNlcnZlIEZCIHJlZ2lvblxuIiwgZGV2LT5idXNfaWQpOworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHN0YXJ0LCBsZW4sIGRldl9uYW1lKGRldikpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCByZXNlcnZlIEZCIHJlZ2lvblxuIiwKKwkJICAgICAgIGRldl9uYW1lKGRldikpOwogCQllcnIgPSAtRUJVU1k7CiAJCWdvdG8gZXJyX2NtYXA7CiAJfQpAQCAtMTgzLDcgKzE4NCw3IEBACiAJaW5mby0+Zml4Lm1taW9fc3RhcnQgPSBzdGFydDsKIAlwYXItPm1taW8gPSBpb3JlbWFwX25vY2FjaGUoaW5mby0+Zml4Lm1taW9fc3RhcnQsIGluZm8tPmZpeC5tbWlvX2xlbik7CiAJaWYgKCFwYXItPm1taW8pIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IG1hcCBNTUlPXG4iLCBkZXYtPmJ1c19pZCk7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCBtYXAgTU1JT1xuIiwgZGV2X25hbWUoZGV2KSk7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX3Jlc291cmNlOwogCX0KQEAgLTE5NCw3ICsxOTUsNyBAQAogCWluZm8tPnNjcmVlbl9iYXNlID0gaW9yZW1hcF9ub2NhY2hlKGluZm8tPmZpeC5zbWVtX3N0YXJ0LAogCQkJCQkgICAgaW5mby0+Zml4LnNtZW1fbGVuKTsKIAlpZiAoIWluZm8tPnNjcmVlbl9iYXNlKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCBtYXAgRkJcbiIsIGRldi0+YnVzX2lkKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IG1hcCBGQlxuIiwgZGV2X25hbWUoZGV2KSk7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX21taW9fbWFwOwogCX0KQEAgLTIwNSwxNCArMjA2LDE0IEBACiAJZXJyID0gcmVnaXN0ZXJfZnJhbWVidWZmZXIoaW5mbyk7CiAJaWYgKGVyciA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IHJlZ2lzdGVyIGZyYW1lYnVmZmVyXG4iLAotCQkgICAgICAgZGV2LT5idXNfaWQpOworCQkgICAgICAgZGV2X25hbWUoZGV2KSk7CiAJCWdvdG8gZXJyX3NtZW1fbWFwOwogCX0KIAogCWdldF9kZXZpY2UoZGV2KTsKIAogCXByX2luZm8oImZiJWQ6ICVzIGZyYW1lIGJ1ZmZlciBkZXZpY2UgYXQgJXNcbiIsCi0JCWluZm8tPm5vZGUsIGluZm8tPmZpeC5pZCwgZGV2LT5idXNfaWQpOworCQlpbmZvLT5ub2RlLCBpbmZvLT5maXguaWQsIGRldl9uYW1lKGRldikpOwogCiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vcG1hZ2ItYi1mYi5jIGIvZHJpdmVycy92aWRlby9wbWFnYi1iLWZiLmMKaW5kZXggOWI4MDU5Ny4uOTg3NDg3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9wbWFnYi1iLWZiLmMKKysrIGIvZHJpdmVycy92aWRlby9wbWFnYi1iLWZiLmMKQEAgLTI1OCw3ICsyNTgsNyBAQAogCiAJaW5mbyA9IGZyYW1lYnVmZmVyX2FsbG9jKHNpemVvZihzdHJ1Y3QgcG1hZ2JiZmJfcGFyKSwgZGV2KTsKIAlpZiAoIWluZm8pIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IGFsbG9jYXRlIG1lbW9yeVxuIiwgZGV2LT5idXNfaWQpOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgYWxsb2NhdGUgbWVtb3J5XG4iLCBkZXZfbmFtZShkZXYpKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC0yNjcsNyArMjY3LDcgQEAKIAogCWlmIChmYl9hbGxvY19jbWFwKCZpbmZvLT5jbWFwLCAyNTYsIDApIDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgYWxsb2NhdGUgY29sb3IgbWFwXG4iLAotCQkgICAgICAgZGV2LT5idXNfaWQpOworCQkgICAgICAgZGV2X25hbWUoZGV2KSk7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX2FsbG9jOwogCX0KQEAgLTI4MCw4ICsyODAsOSBAQAogCS8qIFJlcXVlc3QgdGhlIEkvTyBNRU0gcmVzb3VyY2UuICAqLwogCXN0YXJ0ID0gdGRldi0+cmVzb3VyY2Uuc3RhcnQ7CiAJbGVuID0gdGRldi0+cmVzb3VyY2UuZW5kIC0gc3RhcnQgKyAxOwotCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHN0YXJ0LCBsZW4sIGRldi0+YnVzX2lkKSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgcmVzZXJ2ZSBGQiByZWdpb25cbiIsIGRldi0+YnVzX2lkKTsKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihzdGFydCwgbGVuLCBkZXZfbmFtZShkZXYpKSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgcmVzZXJ2ZSBGQiByZWdpb25cbiIsCisJCSAgICAgICBkZXZfbmFtZShkZXYpKTsKIAkJZXJyID0gLUVCVVNZOwogCQlnb3RvIGVycl9jbWFwOwogCX0KQEAgLTI5MCw3ICsyOTEsNyBAQAogCWluZm8tPmZpeC5tbWlvX3N0YXJ0ID0gc3RhcnQ7CiAJcGFyLT5tbWlvID0gaW9yZW1hcF9ub2NhY2hlKGluZm8tPmZpeC5tbWlvX3N0YXJ0LCBpbmZvLT5maXgubW1pb19sZW4pOwogCWlmICghcGFyLT5tbWlvKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCBtYXAgTU1JT1xuIiwgZGV2LT5idXNfaWQpOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgbWFwIE1NSU9cbiIsIGRldl9uYW1lKGRldikpOwogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGVycl9yZXNvdXJjZTsKIAl9CkBAIC0zMDEsNyArMzAyLDcgQEAKIAlpbmZvLT5maXguc21lbV9zdGFydCA9IHN0YXJ0ICsgUE1BR0JfQl9GQk1FTTsKIAlwYXItPnNtZW0gPSBpb3JlbWFwX25vY2FjaGUoaW5mby0+Zml4LnNtZW1fc3RhcnQsIGluZm8tPmZpeC5zbWVtX2xlbik7CiAJaWYgKCFwYXItPnNtZW0pIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IG1hcCBGQlxuIiwgZGV2LT5idXNfaWQpOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgbWFwIEZCXG4iLCBkZXZfbmFtZShkZXYpKTsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBlcnJfbW1pb19tYXA7CiAJfQpAQCAtMzE2LDcgKzMxNyw3IEBACiAJZXJyID0gcmVnaXN0ZXJfZnJhbWVidWZmZXIoaW5mbyk7CiAJaWYgKGVyciA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IHJlZ2lzdGVyIGZyYW1lYnVmZmVyXG4iLAotCQkgICAgICAgZGV2LT5idXNfaWQpOworCQkgICAgICAgZGV2X25hbWUoZGV2KSk7CiAJCWdvdG8gZXJyX3NtZW1fbWFwOwogCX0KIApAQCAtMzI4LDcgKzMyOSw3IEBACiAJCSBwYXItPm9zYzEgLyAxMDAwLCBwYXItPm9zYzEgJSAxMDAwKTsKIAogCXByX2luZm8oImZiJWQ6ICVzIGZyYW1lIGJ1ZmZlciBkZXZpY2UgYXQgJXNcbiIsCi0JCWluZm8tPm5vZGUsIGluZm8tPmZpeC5pZCwgZGV2LT5idXNfaWQpOworCQlpbmZvLT5ub2RlLCBpbmZvLT5maXguaWQsIGRldl9uYW1lKGRldikpOwogCXByX2luZm8oImZiJWQ6IE9zYzA6ICVzLCBPc2MxOiAlcywgT3NjJXUgc2VsZWN0ZWRcbiIsCiAJCWluZm8tPm5vZGUsIGZyZXEwLCBwYXItPm9zYzEgPyBmcmVxMSA6ICJkaXNhYmxlZCIsCiAJCXBhci0+b3NjMSAhPSAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vcHMzZmIuYyBiL2RyaXZlcnMvdmlkZW8vcHMzZmIuYwppbmRleCA4N2Y4MjZlLi5lMDBjMWRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3BzM2ZiLmMKKysrIGIvZHJpdmVycy92aWRlby9wczNmYi5jCkBAIC0xMjEzLDcgKzEyMTMsNyBAQAogCWRldi0+Y29yZS5kcml2ZXJfZGF0YSA9IGluZm87CiAKIAlkZXZfaW5mbyhpbmZvLT5kZXZpY2UsICIlcyAlcywgdXNpbmcgJXUgS2lCIG9mIHZpZGVvIG1lbW9yeVxuIiwKLQkJIGRldl9kcml2ZXJfc3RyaW5nKGluZm8tPmRldiksIGluZm8tPmRldi0+YnVzX2lkLAorCQkgZGV2X2RyaXZlcl9zdHJpbmcoaW5mby0+ZGV2KSwgZGV2X25hbWUoaW5mby0+ZGV2KSwKIAkJIGluZm8tPmZpeC5zbWVtX2xlbiA+PiAxMCk7CiAKIAl0YXNrID0ga3RocmVhZF9ydW4ocHMzZmJkLCBpbmZvLCBERVZJQ0VfTkFNRSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3B2cjJmYi5jIGIvZHJpdmVycy92aWRlby9wdnIyZmIuYwppbmRleCAwYTBmZDQ4Li41M2Y4ZjExIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3B2cjJmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vcHZyMmZiLmMKQEAgLTYxLDcgKzYxLDcgQEAKICNpbmNsdWRlIDxtYWNoLWRyZWFtY2FzdC9tYWNoL3N5c2FzaWMuaD4KICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX1NIX0RNQQorI2lmZGVmIENPTkZJR19QVlIyX0RNQQogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxtYWNoL2RtYS5oPgogI2luY2x1ZGUgPGFzbS9kbWEuaD4KQEAgLTE4OCw3ICsxODgsNyBAQAogc3RhdGljIHVuc2lnbmVkIGxvbmcgcHZyMmZiX21hcDsKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX1NIX0RNQQorI2lmZGVmIENPTkZJR19QVlIyX0RNQQogc3RhdGljIHVuc2lnbmVkIGludCBzaGRtYSA9IFBWUjJfQ0FTQ0FERV9DSEFOOwogc3RhdGljIHVuc2lnbmVkIGludCBwdnIyZG1hID0gT05DSElQX05SX0RNQV9DSEFOTkVMUzsKICNlbmRpZgpAQCAtMjA3LDcgKzIwNyw3IEBACiBzdGF0aWMgaW50IHB2cjJfaW5pdF9jYWJsZSh2b2lkKTsKIHN0YXRpYyBpbnQgcHZyMl9nZXRfcGFyYW0oY29uc3Qgc3RydWN0IHB2cjJfcGFyYW1zICpwLCBjb25zdCBjaGFyICpzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB2YWwsIGludCBzaXplKTsKLSNpZmRlZiBDT05GSUdfU0hfRE1BCisjaWZkZWYgQ09ORklHX1BWUjJfRE1BCiBzdGF0aWMgc3NpemVfdCBwdnIyZmJfd3JpdGUoc3RydWN0IGZiX2luZm8gKmluZm8sIGNvbnN0IGNoYXIgKmJ1ZiwKIAkJCSAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcyk7CiAjZW5kaWYKQEAgLTIxOCw3ICsyMTgsNyBAQAogCS5mYl9ibGFuawk9IHB2cjJmYl9ibGFuaywKIAkuZmJfY2hlY2tfdmFyCT0gcHZyMmZiX2NoZWNrX3ZhciwKIAkuZmJfc2V0X3Bhcgk9IHB2cjJmYl9zZXRfcGFyLAotI2lmZGVmIENPTkZJR19TSF9ETUEKKyNpZmRlZiBDT05GSUdfUFZSMl9ETUEKIAkuZmJfd3JpdGUJPSBwdnIyZmJfd3JpdGUsCiAjZW5kaWYKIAkuZmJfZmlsbHJlY3QJPSBjZmJfZmlsbHJlY3QsCkBAIC02NzEsNyArNjcxLDcgQEAKIAlyZXR1cm4gY2FibGVfdHlwZTsKIH0KIAotI2lmZGVmIENPTkZJR19TSF9ETUEKKyNpZmRlZiBDT05GSUdfUFZSMl9ETUEKIHN0YXRpYyBzc2l6ZV90IHB2cjJmYl93cml0ZShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgY29uc3QgY2hhciAqYnVmLAogCQkJICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewpAQCAtNzQzLDcgKzc0Myw3IEBACiAKIAlyZXR1cm4gcmV0OwogfQotI2VuZGlmIC8qIENPTkZJR19TSF9ETUEgKi8KKyNlbmRpZiAvKiBDT05GSUdfUFZSMl9ETUEgKi8KIAogLyoqCiAgKiBwdnIyZmJfY29tbW9uX2luaXQKQEAgLTg5Myw3ICs4OTMsNyBAQAogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAotI2lmZGVmIENPTkZJR19TSF9ETUEKKyNpZmRlZiBDT05GSUdfUFZSMl9ETUEKIAlpZiAocmVxdWVzdF9kbWEocHZyMmRtYSwgInB2cjIiKSAhPSAwKSB7CiAJCWZyZWVfaXJxKEhXX0VWRU5UX1ZTWU5DLCAwKTsKIAkJcmV0dXJuIC1FQlVTWTsKQEAgLTkxNSw3ICs5MTUsNyBAQAogCX0KIAogCWZyZWVfaXJxKEhXX0VWRU5UX1ZTWU5DLCAwKTsKLSNpZmRlZiBDT05GSUdfU0hfRE1BCisjaWZkZWYgQ09ORklHX1BWUjJfRE1BCiAJZnJlZV9kbWEocHZyMmRtYSk7CiAjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vc2hfbW9iaWxlX2xjZGNmYi5jIGIvZHJpdmVycy92aWRlby9zaF9tb2JpbGVfbGNkY2ZiLmMKaW5kZXggMmM1ZDA2OS4uOTJlYTBhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9zaF9tb2JpbGVfbGNkY2ZiLmMKKysrIGIvZHJpdmVycy92aWRlby9zaF9tb2JpbGVfbGNkY2ZiLmMKQEAgLTMzLDYgKzMzLDggQEAKIAlzdHJ1Y3QgZmJfaW5mbyBpbmZvOwogCWRtYV9hZGRyX3QgZG1hX2hhbmRsZTsKIAlzdHJ1Y3QgZmJfZGVmZXJyZWRfaW8gZGVmaW87CisJdW5zaWduZWQgbG9uZyBmcmFtZV9lbmQ7CisJd2FpdF9xdWV1ZV9oZWFkX3QgZnJhbWVfZW5kX3dhaXQ7CiB9OwogCiBzdHJ1Y3Qgc2hfbW9iaWxlX2xjZGNfcHJpdiB7CkBAIC0yMjYsNyArMjI4LDEwIEBACiBzdGF0aWMgaXJxcmV0dXJuX3Qgc2hfbW9iaWxlX2xjZGNfaXJxKGludCBpcnEsIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IHNoX21vYmlsZV9sY2RjX3ByaXYgKnByaXYgPSBkYXRhOworCXN0cnVjdCBzaF9tb2JpbGVfbGNkY19jaGFuICpjaDsKIAl1bnNpZ25lZCBsb25nIHRtcDsKKwlpbnQgaXNfc3ViOworCWludCBrOwogCiAJLyogYWNrbm93bGVkZ2UgaW50ZXJydXB0ICovCiAJdG1wID0gbGNkY19yZWFkKHByaXYsIF9MRElOVFIpOwpAQCAtMjM0LDggKzIzOSwyNCBAQAogCXRtcCB8PSAweDAwMDAwMGZmIF4gTERJTlRSX0ZTOyAvKiBzdGF0dXMgaW4gbG93IDggKi8KIAlsY2RjX3dyaXRlKHByaXYsIF9MRElOVFIsIHRtcCk7CiAKLQkvKiBkaXNhYmxlIGNsb2NrcyAqLwotCXNoX21vYmlsZV9sY2RjX2Nsa19vZmYocHJpdik7CisJLyogZmlndXJlIG91dCBpZiB0aGlzIGludGVycnVwdCBpcyBmb3IgbWFpbiBvciBzdWIgbGNkICovCisJaXNfc3ViID0gKGxjZGNfcmVhZChwcml2LCBfTERTUikgJiAoMSA8PCAxMCkpID8gMSA6IDA7CisKKwkvKiB3YWtlIHVwIGNoYW5uZWwgYW5kIGRpc2FibGUgY2xvY2tzKi8KKwlmb3IgKGsgPSAwOyBrIDwgQVJSQVlfU0laRShwcml2LT5jaCk7IGsrKykgeworCQljaCA9ICZwcml2LT5jaFtrXTsKKworCQlpZiAoIWNoLT5lbmFibGVkKQorCQkJY29udGludWU7CisKKwkJaWYgKGlzX3N1YiA9PSBsY2RjX2NoYW5faXNfc3VibGNkKGNoKSkgeworCQkJY2gtPmZyYW1lX2VuZCA9IDE7CisJCQl3YWtlX3VwKCZjaC0+ZnJhbWVfZW5kX3dhaXQpOworCisJCQlzaF9tb2JpbGVfbGNkY19jbGtfb2ZmKHByaXYpOworCQl9CisJfQorCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCkBAIC00NDgsMTggKzQ2OSwyNyBAQAogCXN0cnVjdCBzaF9tb2JpbGVfbGNkY19ib2FyZF9jZmcJKmJvYXJkX2NmZzsKIAlpbnQgazsKIAotCS8qIHRlbGwgdGhlIGJvYXJkIGNvZGUgdG8gZGlzYWJsZSB0aGUgcGFuZWwgKi8KKwkvKiBjbGVhbiB1cCBkZWZlcnJlZCBpbyBhbmQgYXNrIGJvYXJkIGNvZGUgdG8gZGlzYWJsZSBwYW5lbCAqLwogCWZvciAoayA9IDA7IGsgPCBBUlJBWV9TSVpFKHByaXYtPmNoKTsgaysrKSB7CiAJCWNoID0gJnByaXYtPmNoW2tdOworCisJCS8qIGRlZmVycmVkIGlvIG1vZGU6CisJCSAqIGZsdXNoIGZyYW1lLCBhbmQgd2FpdCBmb3IgZnJhbWUgZW5kIGludGVycnVwdAorCQkgKiBjbGVhbiB1cCBkZWZlcnJlZCBpbyBhbmQgZW5hYmxlIGNsb2NrCisJCSAqLworCQlpZiAoY2gtPmluZm8uZmJkZWZpbykgeworCQkJY2gtPmZyYW1lX2VuZCA9IDA7CisJCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmNoLT5pbmZvLmRlZmVycmVkX3dvcmssIDApOworCQkJd2FpdF9ldmVudChjaC0+ZnJhbWVfZW5kX3dhaXQsIGNoLT5mcmFtZV9lbmQpOworCQkJZmJfZGVmZXJyZWRfaW9fY2xlYW51cCgmY2gtPmluZm8pOworCQkJY2gtPmluZm8uZmJkZWZpbyA9IE5VTEw7CisJCQlzaF9tb2JpbGVfbGNkY19jbGtfb24ocHJpdik7CisJCX0KKwogCQlib2FyZF9jZmcgPSAmY2gtPmNmZy5ib2FyZF9jZmc7CiAJCWlmIChib2FyZF9jZmctPmRpc3BsYXlfb2ZmKQogCQkJYm9hcmRfY2ZnLT5kaXNwbGF5X29mZihib2FyZF9jZmctPmJvYXJkX2RhdGEpOwogCi0JCS8qIGNsZWFudXAgZGVmZXJyZWQgaW8gaWYgZW5hYmxlZCAqLwotCQlpZiAoY2gtPmluZm8uZmJkZWZpbykgewotCQkJZmJfZGVmZXJyZWRfaW9fY2xlYW51cCgmY2gtPmluZm8pOwotCQkJY2gtPmluZm8uZmJkZWZpbyA9IE5VTEw7Ci0JCX0KIAl9CiAKIAkvKiBzdG9wIHRoZSBsY2RjICovCkBAIC02NTIsNiArNjgyLDI2IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgc2hfbW9iaWxlX2xjZGNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCisJc2hfbW9iaWxlX2xjZGNfc3RvcChwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2hfbW9iaWxlX2xjZGNfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisKKwlyZXR1cm4gc2hfbW9iaWxlX2xjZGNfc3RhcnQocGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldikpOworfQorCitzdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgc2hfbW9iaWxlX2xjZGNfZGV2X3BtX29wcyA9IHsKKwkuc3VzcGVuZCA9IHNoX21vYmlsZV9sY2RjX3N1c3BlbmQsCisJLnJlc3VtZSA9IHNoX21vYmlsZV9sY2RjX3Jlc3VtZSwKK307CisKIHN0YXRpYyBpbnQgc2hfbW9iaWxlX2xjZGNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOwogCiBzdGF0aWMgaW50IF9faW5pdCBzaF9tb2JpbGVfbGNkY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQpAQCAtNjg3LDcgKzczNyw3IEBACiAJfQogCiAJZXJyb3IgPSByZXF1ZXN0X2lycShpLCBzaF9tb2JpbGVfbGNkY19pcnEsIElSUUZfRElTQUJMRUQsCi0JCQkgICAgcGRldi0+ZGV2LmJ1c19pZCwgcHJpdik7CisJCQkgICAgZGV2X25hbWUoJnBkZXYtPmRldiksIHByaXYpOwogCWlmIChlcnJvcikgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJ1bmFibGUgdG8gcmVxdWVzdCBpcnFcbiIpOwogCQlnb3RvIGVycjE7CkBAIC03MDcsNiArNzU3LDcgQEAKIAkJCWRldl9lcnIoJnBkZXYtPmRldiwgInVuc3VwcG9ydGVkIGludGVyZmFjZSB0eXBlXG4iKTsKIAkJCWdvdG8gZXJyMTsKIAkJfQorCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwcml2LT5jaFtpXS5mcmFtZV9lbmRfd2FpdCk7CiAKIAkJc3dpdGNoIChwZGF0YS0+Y2hbaV0uY2hhbikgewogCQljYXNlIExDRENfQ0hBTl9NQUlOTENEOgpAQCAtODYwLDYgKzkxMSw3IEBACiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCQk9ICJzaF9tb2JpbGVfbGNkY19mYiIsCiAJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkJLnBtCQk9ICZzaF9tb2JpbGVfbGNkY19kZXZfcG1fb3BzLAogCX0sCiAJLnByb2JlCQk9IHNoX21vYmlsZV9sY2RjX3Byb2JlLAogCS5yZW1vdmUJCT0gc2hfbW9iaWxlX2xjZGNfcmVtb3ZlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby90bWlvZmIuYyBiL2RyaXZlcnMvdmlkZW8vdG1pb2ZiLmMKaW5kZXggN2JhZjJkZC4uYTFlYjA4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby90bWlvZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3RtaW9mYi5jCkBAIC03NTEsNyArNzUxLDcgQEAKIAl9CiAKIAlyZXR2YWwgPSByZXF1ZXN0X2lycShpcnEsICZ0bWlvZmJfaXJxLCBJUlFGX0RJU0FCTEVELAotCQkJCQlkZXYtPmRldi5idXNfaWQsIGluZm8pOworCQkJCQlkZXZfbmFtZSgmZGV2LT5kZXYpLCBpbmZvKTsKIAogCWlmIChyZXR2YWwpCiAJCWdvdG8gZXJyX3JlcXVlc3RfaXJxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby91dmVzYWZiLmMgYi9kcml2ZXJzL3ZpZGVvL3V2ZXNhZmIuYwppbmRleCA2YzJkMzdmLi43NGFlNzU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3V2ZXNhZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3V2ZXNhZmIuYwpAQCAtMjA0LDggKzIwNCwxMSBAQAogCQl9IGVsc2UgewogCQkJdjg2ZF9zdGFydGVkID0gMTsKIAkJCWVyciA9IGNuX25ldGxpbmtfc2VuZChtLCAwLCBnZnBfYW55KCkpOworCQkJaWYgKGVyciA9PSAtRU5PQlVGUykKKwkJCQllcnIgPSAwOwogCQl9Ci0JfQorCX0gZWxzZSBpZiAoZXJyID09IC1FTk9CVUZTKQorCQllcnIgPSAwOwogCiAJaWYgKCFlcnIgJiYgISh0YXNrLT50LmZsYWdzICYgVEZfRVhJVCkpCiAJCWVyciA9ICF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQodGFzay0+ZG9uZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZyBiL2RyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZwppbmRleCAzMjVjMTBmLi41NWY2NGFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL0tjb25maWcKKysrIGIvZHJpdmVycy93YXRjaGRvZy9LY29uZmlnCkBAIC05NDAsMjEgKzk0MCw2IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB3ZHQuCiAKLWNvbmZpZyBXRFRfNTAxCi0JYm9vbCAiV0RUNTAxIGZlYXR1cmVzIgotCWRlcGVuZHMgb24gV0RUCi0JaGVscAotCSAgU2F5aW5nIFkgaGVyZSBhbmQgY3JlYXRpbmcgYSBjaGFyYWN0ZXIgc3BlY2lhbCBmaWxlIC9kZXYvdGVtcGVyYXR1cmUKLQkgIHdpdGggbWFqb3IgbnVtYmVyIDEwIGFuZCBtaW5vciBudW1iZXIgMTMxICgibWFuIG1rbm9kIikgd2lsbCBnaXZlCi0JICB5b3UgYSB0aGVybW9tZXRlciBpbnNpZGUgeW91ciBjb21wdXRlcjogcmVhZGluZyBmcm9tCi0JICAvZGV2L3RlbXBlcmF0dXJlIHlpZWxkcyBvbmUgYnl0ZSwgdGhlIHRlbXBlcmF0dXJlIGluIGRlZ3JlZXMKLQkgIEZhaHJlbmhlaXQuIFRoaXMgd29ya3Mgb25seSBpZiB5b3UgaGF2ZSBhIFdEVDUwMVAgd2F0Y2hkb2cgYm9hcmQKLQkgIGluc3RhbGxlZC4KLQotCSAgSWYgeW91IHdhbnQgdG8gZW5hYmxlIHRoZSBGYW4gVGFjaG9tZXRlciBvbiB0aGUgV0RUNTAxUCwgdGhlbiB5b3UKLQkgIGNhbiBkbyB0aGlzIHZpYSB0aGUgdGFjaG9tZXRlciBwYXJhbWV0ZXIuIE9ubHkgZG8gdGhpcyBpZiB5b3UgaGF2ZSBhCi0JICBmYW4gdGFjaG9tZXRlciBhY3R1YWxseSBzZXQgdXAuCi0KICMKICMgUENJLWJhc2VkIFdhdGNoZG9nIENhcmRzCiAjCmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL2FjcXVpcmV3ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvYWNxdWlyZXdkdC5jCmluZGV4IDNlNTdhYTQuLjRkMThjODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvYWNxdWlyZXdkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvYWNxdWlyZXdkdC5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqCUFjcXVpcmUgU2luZ2xlIEJvYXJkIENvbXB1dGVyIFdhdGNoZG9nIFRpbWVyIGRyaXZlcgogICoKLSAqICAgICAgQmFzZWQgb24gd2R0LmMuIE9yaWdpbmFsIGNvcHlyaWdodCBtZXNzYWdlczoKKyAqCUJhc2VkIG9uIHdkdC5jLiBPcmlnaW5hbCBjb3B5cmlnaHQgbWVzc2FnZXM6CiAgKgogICoJKGMpIENvcHlyaWdodCAxOTk2IEFsYW4gQ294IDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+LAogICoJCQkJCQlBbGwgUmlnaHRzIFJlc2VydmVkLgpAQCAtMTcsOSArMTcsOSBAQAogICoKICAqCShjKSBDb3B5cmlnaHQgMTk5NSAgICBBbGFuIENveCA8YWxhbkBseG9yZ3VrLnVrdXUub3JnLnVrPgogICoKLSAqICAgICAgMTQtRGVjLTIwMDEgTWF0dCBEb21zY2ggPE1hdHRfRG9tc2NoQGRlbGwuY29tPgotICogICAgICAgICAgQWRkZWQgbm93YXlvdXQgbW9kdWxlIG9wdGlvbiB0byBvdmVycmlkZSBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQKLSAqICAgICAgICAgIENhbid0IGFkZCB0aW1lb3V0IC0gZHJpdmVyIGRvZXNuJ3QgYWxsb3cgY2hhbmdpbmcgdmFsdWUKKyAqCTE0LURlYy0yMDAxIE1hdHQgRG9tc2NoIDxNYXR0X0RvbXNjaEBkZWxsLmNvbT4KKyAqCSAgICBBZGRlZCBub3dheW91dCBtb2R1bGUgb3B0aW9uIHRvIG92ZXJyaWRlIENPTkZJR19XQVRDSERPR19OT1dBWU9VVAorICoJICAgIENhbid0IGFkZCB0aW1lb3V0IC0gZHJpdmVyIGRvZXNuJ3QgYWxsb3cgY2hhbmdpbmcgdmFsdWUKICAqLwogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9hZHZhbnRlY2h3ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvYWR2YW50ZWNod2R0LmMKaW5kZXggYTFkNzg1Ni4uODI0ZDA3NmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvYWR2YW50ZWNod2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9hZHZhbnRlY2h3ZHQuYwpAQCAtMTM4LDcgKzEzOCw5IEBACiAJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CiAJaW50IF9fdXNlciAqcCA9IGFyZ3A7CiAJc3RhdGljIHN0cnVjdCB3YXRjaGRvZ19pbmZvIGlkZW50ID0gewotCQkub3B0aW9ucyA9IFdESU9GX0tFRVBBTElWRVBJTkcgfCBXRElPRl9TRVRUSU1FT1VUIHwgV0RJT0ZfTUFHSUNDTE9TRSwKKwkJLm9wdGlvbnMgPSBXRElPRl9LRUVQQUxJVkVQSU5HIHwKKwkJCSAgIFdESU9GX1NFVFRJTUVPVVQgfAorCQkJICAgV0RJT0ZfTUFHSUNDTE9TRSwKIAkJLmZpcm13YXJlX3ZlcnNpb24gPSAxLAogCQkuaWRlbnRpdHkgPSBXQVRDSERPR19OQU1FLAogCX07CkBAIC0yNTksNyArMjYxLDggQEAKIAkJZ290byB1bnJlZ19zdG9wOwogCX0KIAotCS8qIENoZWNrIHRoYXQgdGhlIGhlYXJ0YmVhdCB2YWx1ZSBpcyB3aXRoaW4gaXQncyByYW5nZSA7IGlmIG5vdCByZXNldCB0byB0aGUgZGVmYXVsdCAqLworCS8qIENoZWNrIHRoYXQgdGhlIGhlYXJ0YmVhdCB2YWx1ZSBpcyB3aXRoaW4gaXQncyByYW5nZSA7CisJICogaWYgbm90IHJlc2V0IHRvIHRoZSBkZWZhdWx0ICovCiAJaWYgKGFkdndkdF9zZXRfaGVhcnRiZWF0KHRpbWVvdXQpKSB7CiAJCWFkdndkdF9zZXRfaGVhcnRiZWF0KFdBVENIRE9HX1RJTUVPVVQpOwogCQlwcmludGsoS0VSTl9JTkZPIFBGWApkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9hbGltMTUzNV93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvYWxpbTE1MzVfd2R0LmMKaW5kZXggMmE3NjkwZS4uOTM3YTgwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9hbGltMTUzNV93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL2FsaW0xNTM1X3dkdC5jCkBAIC02MCw3ICs2MCw3IEBACiAKIAlwY2lfcmVhZF9jb25maWdfZHdvcmQoYWxpX3BjaSwgMHhDQywgJnZhbCk7CiAJdmFsICY9IH4weDNGOwkvKiBNYXNrIGNvdW50ICovCi0JdmFsIHw9ICgxPDwyNSkgfCBhbGlfdGltZW91dF9iaXRzOworCXZhbCB8PSAoMSA8PCAyNSkgfCBhbGlfdGltZW91dF9iaXRzOwogCXBjaV93cml0ZV9jb25maWdfZHdvcmQoYWxpX3BjaSwgMHhDQywgdmFsKTsKIAogCXNwaW5fdW5sb2NrKCZhbGlfbG9jayk7CkBAIC03OSw4ICs3OSw4IEBACiAJc3Bpbl9sb2NrKCZhbGlfbG9jayk7CiAKIAlwY2lfcmVhZF9jb25maWdfZHdvcmQoYWxpX3BjaSwgMHhDQywgJnZhbCk7Ci0JdmFsICY9IH4weDNGOwkvKiBNYXNrIGNvdW50IHRvIHplcm8gKGRpc2FibGVkKSAqLwotCXZhbCAmPSB+KDE8PDI1KTsvKiBhbmQgZm9yIHNhZmV0eSBtYXNrIHRoZSByZXNldCBlbmFibGUgKi8KKwl2YWwgJj0gfjB4M0Y7CQkvKiBNYXNrIGNvdW50IHRvIHplcm8gKGRpc2FibGVkKSAqLworCXZhbCAmPSB+KDEgPDwgMjUpOwkvKiBhbmQgZm9yIHNhZmV0eSBtYXNrIHRoZSByZXNldCBlbmFibGUgKi8KIAlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGFsaV9wY2ksIDB4Q0MsIHZhbCk7CiAKIAlzcGluX3VubG9jaygmYWxpX2xvY2spOwpAQCAtODksNyArODksNyBAQAogLyoKICAqCWFsaV9rZWVwYWxpdmUJLQlzZW5kIGEga2VlcGFsaXZlIHRvIHRoZSB3YXRjaGRvZwogICoKLSAqICAgICAgU2VuZCBhIGtlZXBhbGl2ZSB0byB0aGUgdGltZXIgKGFjdHVhbGx5IHdlIHJlc3RhcnQgdGhlIHRpbWVyKS4KKyAqCVNlbmQgYSBrZWVwYWxpdmUgdG8gdGhlIHRpbWVyIChhY3R1YWxseSB3ZSByZXN0YXJ0IHRoZSB0aW1lcikuCiAgKi8KIAogc3RhdGljIHZvaWQgYWxpX2tlZXBhbGl2ZSh2b2lkKQpAQCAtMTA5LDExICsxMDksMTEgQEAKIAlpZiAodCA8IDApCiAJCXJldHVybiAtRUlOVkFMOwogCWVsc2UgaWYgKHQgPCA2MCkKLQkJYWxpX3RpbWVvdXRfYml0cyA9IHR8KDE8PDYpOworCQlhbGlfdGltZW91dF9iaXRzID0gdHwoMSA8PCA2KTsKIAllbHNlIGlmICh0IDwgMzYwMCkKLQkJYWxpX3RpbWVvdXRfYml0cyA9ICh0LzYwKXwoMTw8Nyk7CisJCWFsaV90aW1lb3V0X2JpdHMgPSAodCAvIDYwKXwoMSA8PCA3KTsKIAllbHNlIGlmICh0IDwgMTgwMDApCi0JCWFsaV90aW1lb3V0X2JpdHMgPSAodC8zMDApfCgxPDw2KXwoMTw8Nyk7CisJCWFsaV90aW1lb3V0X2JpdHMgPSAodCAvIDMwMCl8KDEgPDwgNil8KDEgPDwgNyk7CiAJZWxzZQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtMTM4LDcgKzEzOCw3IEBACiAgKi8KIAogc3RhdGljIHNzaXplX3QgYWxpX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqZGF0YSwKLQkJCSAgICAgIHNpemVfdCBsZW4sIGxvZmZfdCAqcHBvcykKKwkJCQkJCXNpemVfdCBsZW4sIGxvZmZfdCAqcHBvcykKIHsKIAkvKiBTZWUgaWYgd2UgZ290IHRoZSBtYWdpYyBjaGFyYWN0ZXIgJ1YnIGFuZCByZWxvYWQgdGhlIHRpbWVyICovCiAJaWYgKGxlbikgewpAQCAtMzQ4LDkgKzM0OCw5IEBACiAJLyogVGltZXIgYml0cyAqLwogCXdkb2cgJj0gfjB4M0Y7CiAJLyogSXNzdWVkIGV2ZW50cyAqLwotCXdkb2cgJj0gfigoMTw8MjcpfCgxPDwyNil8KDE8PDI1KXwoMTw8MjQpKTsKKwl3ZG9nICY9IH4oKDEgPDwgMjcpfCgxIDw8IDI2KXwoMSA8PCAyNSl8KDEgPDwgMjQpKTsKIAkvKiBObyBtb25pdG9yIGJpdHMgKi8KLQl3ZG9nICY9IH4oKDE8PDE2KXwoMTw8MTMpfCgxPDwxMil8KDE8PDExKXwoMTw8MTApfCgxPDw5KSk7CisJd2RvZyAmPSB+KCgxIDw8IDE2KXwoMSA8PCAxMyl8KDEgPDwgMTIpfCgxIDw8IDExKXwoMSA8PCAxMCl8KDEgPDwgOSkpOwogCiAJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCAweENDLCB3ZG9nKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9hbGltNzEwMV93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvYWxpbTcxMDFfd2R0LmMKaW5kZXggYTA0NWVmOC4uOTBmOThkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9hbGltNzEwMV93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL2FsaW03MTAxX3dkdC5jCkBAIC0zNTUsNyArMzU1LDggQEAKIAlhbGltNzEwMV9wbXUgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0FMLCBQQ0lfREVWSUNFX0lEX0FMX003MTAxLAogCQlOVUxMKTsKIAlpZiAoIWFsaW03MTAxX3BtdSkgewotCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiQUxpIE03MTAxIFBNVSBub3QgcHJlc2VudCAtIFdEVCBub3Qgc2V0XG4iKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlgKKwkJCSJBTGkgTTcxMDEgUE1VIG5vdCBwcmVzZW50IC0gV0RUIG5vdCBzZXRcbiIpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIApAQCAtMzk5LDcgKzQwMCw4IEBACiAKIAlyYyA9IG1pc2NfcmVnaXN0ZXIoJndkdF9taXNjZGV2KTsKIAlpZiAocmMpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiY2Fubm90IHJlZ2lzdGVyIG1pc2NkZXYgb24gbWlub3I9JWQgKGVycj0lZClcbiIsCisJCXByaW50ayhLRVJOX0VSUiBQRlgKKwkJCSJjYW5ub3QgcmVnaXN0ZXIgbWlzY2RldiBvbiBtaW5vcj0lZCAoZXJyPSVkKVxuIiwKIAkJCXdkdF9taXNjZGV2Lm1pbm9yLCByYyk7CiAJCWdvdG8gZXJyX291dF9yZWJvb3Q7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9hdDkxc2FtOV93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvYXQ5MXNhbTlfd2R0LmMKaW5kZXggYTU2YWM4NC4uNDM1YjA1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9hdDkxc2FtOV93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL2F0OTFzYW05X3dkdC5jCkBAIC0yMDEsNyArMjAxLDcgQEAKICAqIFBhdCB0aGUgd2F0Y2hkb2cgd2hlbmV2ZXIgZGV2aWNlIGlzIHdyaXR0ZW4gdG8uCiAgKi8KIHN0YXRpYyBzc2l6ZV90IGF0OTFfd2R0X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyICpkYXRhLCBzaXplX3QgbGVuLAotICAgICAgbG9mZl90ICpwcG9zKQorCQkJCQkJCQlsb2ZmX3QgKnBwb3MpCiB7CiAJaWYgKCFsZW4pCiAJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9jcHdkLmMgYi9kcml2ZXJzL3dhdGNoZG9nL2Nwd2QuYwppbmRleCAwODRkZmU5Li40MTA3MGU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL2Nwd2QuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL2Nwd2QuYwpAQCAtMSwxMyArMSwxMyBAQAogLyogY3B3ZC5jIC0gZHJpdmVyIGltcGxlbWVudGF0aW9uIGZvciBoYXJkd2FyZSB3YXRjaGRvZwogICogdGltZXJzIGZvdW5kIG9uIFN1biBNaWNyb3N5c3RlbXMgQ1AxNDAwIGFuZCBDUDE1MDAgYm9hcmRzLgogICoKLSAqIFRoaXMgZGV2aWNlIHN1cHBvcnRzIGJvdGggdGhlIGdlbmVyaWMgTGludXggd2F0Y2hkb2cgCisgKiBUaGlzIGRldmljZSBzdXBwb3J0cyBib3RoIHRoZSBnZW5lcmljIExpbnV4IHdhdGNoZG9nCiAgKiBpbnRlcmZhY2UgYW5kIFNvbGFyaXMtY29tcGF0aWJsZSBpb2N0bHMgYXMgYmVzdCBpdCBpcwogICogYWJsZS4KICAqCiAgKiBOT1RFOiAJQ1AxNDAwIHN5c3RlbXMgYXBwZWFyIHRvIGhhdmUgYSBkZWZlY3RpdmUgaW50cl9tYXNrCiAgKiAJCQlyZWdpc3RlciBvbiB0aGUgUExELCBwcmV2ZW50aW5nIHRoZSBkaXNhYmxpbmcgb2YKLSAqIAkJCXRpbWVyIGludGVycnVwdHMuICBXZSB1c2UgYSB0aW1lciB0byBwZXJpb2RpY2FsbHkgCisgKiAJCQl0aW1lciBpbnRlcnJ1cHRzLiAgV2UgdXNlIGEgdGltZXIgdG8gcGVyaW9kaWNhbGx5CiAgKiAJCQlyZXNldCAnc3RvcHBlZCcgd2F0Y2hkb2dzIG9uIGFmZmVjdGVkIHBsYXRmb3Jtcy4KICAqCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDAgRXJpYyBCcm93ZXIgKGVicm93ZXJAdXNhLm5ldCkKQEAgLTI4LDEwICsyOCw5IEBACiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9vZi5oPgogI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KIAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotCiAjaW5jbHVkZSA8YXNtL3dhdGNoZG9nLmg+CiAKICNkZWZpbmUgRFJJVkVSX05BTUUJImNwd2QiCkBAIC00Myw4ICs0Miw4IEBACiAjZGVmaW5lIFdEX0JMSU1JVAkweEZGRkYKIAogI2RlZmluZSBXRDBfTUlOT1IJMjEyCi0jZGVmaW5lIFdEMV9NSU5PUgkyMTMJCi0jZGVmaW5lIFdEMl9NSU5PUgkyMTQJCisjZGVmaW5lIFdEMV9NSU5PUgkyMTMKKyNkZWZpbmUgV0QyX01JTk9SCTIxNAogCiAvKiBJbnRlcm5hbCBkcml2ZXIgZGVmaW5pdGlvbnMuICAqLwogI2RlZmluZSBXRDBfSUQJCQkwCkBAIC05MSwxNiArOTAsMTYgQEAKIAogc3RhdGljIHN0cnVjdCBjcHdkICpjcHdkX2RldmljZTsKIAotLyogU3VuIHVzZXMgQWx0ZXJhIFBMRCBFUEY4ODIwQVRDMTQ0LTQgCisvKiBTdW4gdXNlcyBBbHRlcmEgUExEIEVQRjg4MjBBVEMxNDQtNAogICogcHJvdmlkaW5nIHRocmVlIGhhcmR3YXJlIHdhdGNoZG9nczoKICAqCi0gKiAJMSkgUklDIC0gc2VuZHMgYW4gaW50ZXJydXB0IHdoZW4gdHJpZ2dlcmVkCi0gKiAJMikgWElSIC0gYXNzZXJ0cyBYSVJfQl9SRVNFVCB3aGVuIHRyaWdnZXJlZCwgcmVzZXRzIENQVQotICogCTMpIFBPUiAtIGFzc2VydHMgUE9SX0JfUkVTRVQgd2hlbiB0cmlnZ2VyZWQsIHJlc2V0cyBDUFUsIGJhY2twbGFuZSwgYm9hcmQKKyAqIDEpIFJJQyAtIHNlbmRzIGFuIGludGVycnVwdCB3aGVuIHRyaWdnZXJlZAorICogMikgWElSIC0gYXNzZXJ0cyBYSVJfQl9SRVNFVCB3aGVuIHRyaWdnZXJlZCwgcmVzZXRzIENQVQorICogMykgUE9SIC0gYXNzZXJ0cyBQT1JfQl9SRVNFVCB3aGVuIHRyaWdnZXJlZCwgcmVzZXRzIENQVSwgYmFja3BsYW5lLCBib2FyZAogICoKICAqKiogVGltZXIgcmVnaXN0ZXIgYmxvY2sgZGVmaW5pdGlvbiAoc3RydWN0IHdkX3RpbWVyX3JlZ2JsaykKICAqCi0gKiBkY250ciBhbmQgbGltaXQgcmVnaXN0ZXJzIChoYWxmd29yZCBhY2Nlc3MpOiAgICAgIAorICogZGNudHIgYW5kIGxpbWl0IHJlZ2lzdGVycyAoaGFsZndvcmQgYWNjZXNzKToKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIHwgMTUgfCAuLi58IDEgfCAwIHwKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTEwOCw3ICsxMDcsOCBAQAogICogLS0tLS0tLS0tLS0tLS0tLS0tLQogICogZGNudHIgLSAJQ3VycmVudCAxNi1iaXQgZG93bmNvdW50ZXIgdmFsdWUuCiAgKiAJCQlXaGVuIGRvd25jb3VudGVyIHJlYWNoZXMgJzAnIHdhdGNoZG9nIGV4cGlyZXMuCi0gKiAJCQlSZWFkaW5nIHRoaXMgcmVnaXN0ZXIgcmVzZXRzIGRvd25jb3VudGVyIHdpdGggJ2xpbWl0JyB2YWx1ZS4KKyAqIAkJCVJlYWRpbmcgdGhpcyByZWdpc3RlciByZXNldHMgZG93bmNvdW50ZXIgd2l0aAorICogCQkJJ2xpbWl0JyB2YWx1ZS4KICAqIGxpbWl0IC0gCTE2LWJpdCBjb3VudGRvd24gdmFsdWUgaW4gMS8xMHRoIHNlY29uZCBpbmNyZW1lbnRzLgogICogCQkJV3JpdGluZyB0aGlzIHJlZ2lzdGVyIGJlZ2lucyBjb3VudGRvd24gd2l0aCBpbnB1dCB2YWx1ZS4KICAqIAkJCVJlYWRpbmcgZnJvbSB0aGlzIHJlZ2lzdGVyIGRvZXMgbm90IGFmZmVjdCBjb3VudGVyLgpAQCAtMTU4LDExICsxNTgsMTEgQEAKIHN0YXRpYyBpbnQgd2QxX3RpbWVvdXQgPSAwOwogc3RhdGljIGludCB3ZDJfdGltZW91dCA9IDA7CiAKLW1vZHVsZV9wYXJhbQkod2QwX3RpbWVvdXQsIGludCwgMCk7Cittb2R1bGVfcGFyYW0od2QwX3RpbWVvdXQsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKHdkMF90aW1lb3V0LCAiRGVmYXVsdCB3YXRjaGRvZzAgdGltZW91dCBpbiAxLzEwc2VjcyIpOwotbW9kdWxlX3BhcmFtIAkod2QxX3RpbWVvdXQsIGludCwgMCk7Cittb2R1bGVfcGFyYW0od2QxX3RpbWVvdXQsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKHdkMV90aW1lb3V0LCAiRGVmYXVsdCB3YXRjaGRvZzEgdGltZW91dCBpbiAxLzEwc2VjcyIpOwotbW9kdWxlX3BhcmFtIAkod2QyX3RpbWVvdXQsIGludCwgMCk7Cittb2R1bGVfcGFyYW0od2QyX3RpbWVvdXQsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKHdkMl90aW1lb3V0LCAiRGVmYXVsdCB3YXRjaGRvZzIgdGltZW91dCBpbiAxLzEwc2VjcyIpOwogCiBNT0RVTEVfQVVUSE9SKCJFcmljIEJyb3dlciA8ZWJyb3dlckB1c2EubmV0PiIpOwpAQCAtMjAxLDkgKzIwMSw5IEBACiBzdGF0aWMgdm9pZCBjcHdkX3RvZ2dsZWludHIoc3RydWN0IGNwd2QgKnAsIGludCBpbmRleCwgaW50IGVuYWJsZSkKIHsKIAl1bnNpZ25lZCBjaGFyIGN1cnJlZ3MgPSBjcHdkX3JlYWRiKHAtPnJlZ3MgKyBQTERfSU1BU0spOwotCXVuc2lnbmVkIGNoYXIgc2V0cmVncyA9IAotCQkoaW5kZXggPT0gLTEpID8gCi0JCShXRDBfSU5UUl9NQVNLIHwgV0QxX0lOVFJfTUFTSyB8IFdEMl9JTlRSX01BU0spIDogCisJdW5zaWduZWQgY2hhciBzZXRyZWdzID0KKwkJKGluZGV4ID09IC0xKSA/CisJCShXRDBfSU5UUl9NQVNLIHwgV0QxX0lOVFJfTUFTSyB8IFdEMl9JTlRSX01BU0spIDoKIAkJKHAtPmRldnNbaW5kZXhdLmludHJfbWFzayk7CiAKIAlpZiAoZW5hYmxlID09IFdEX0lOVFJfT04pCkBAIC0zMDMsMjQgKzMwMywyNCBAQAogCXVuc2lnbmVkIGNoYXIgcmV0ICA9IFdEX1NUT1BQRUQ7CiAKIAkvKiBkZXRlcm1pbmUgU1RPUFBFRCAqLwotCWlmICghc3RhdCkgCisJaWYgKCFzdGF0KQogCQlyZXR1cm4gcmV0OwogCiAJLyogZGV0ZXJtaW5lIEVYUElSRUQgdnMgRlJFRVJVTiB2cyBSVU5OSU5HICovCiAJZWxzZSBpZiAoV0RfU19FWFBJUkVEICYgc3RhdCkgewogCQlyZXQgPSBXRF9FWFBJUkVEOwotCX0gZWxzZSBpZihXRF9TX1JVTk5JTkcgJiBzdGF0KSB7CisJfSBlbHNlIGlmIChXRF9TX1JVTk5JTkcgJiBzdGF0KSB7CiAJCWlmIChpbnRyICYgcC0+ZGV2c1tpbmRleF0uaW50cl9tYXNrKSB7CiAJCQlyZXQgPSBXRF9GUkVFUlVOOwogCQl9IGVsc2UgewogCQkJLyogRnVkZ2UgV0RfRVhQSVJFRCBzdGF0dXMgZm9yIGRlZmVjdGl2ZSBDUDE0MDAtLQotCQkJICogSUYgdGltZXIgaXMgcnVubmluZyAKLQkJCSAqIAlBTkQgYnJva2Vuc3RvcCBpcyBzZXQgCisJCQkgKiBJRiB0aW1lciBpcyBydW5uaW5nCisJCQkgKiAJQU5EIGJyb2tlbnN0b3AgaXMgc2V0CiAJCQkgKiAJQU5EIGFuIGludGVycnVwdCBoYXMgYmVlbiBzZXJ2aWNlZAogCQkJICogd2UgYXJlIFdEX0VYUElSRUQuCiAJCQkgKgotCQkJICogSUYgdGltZXIgaXMgcnVubmluZyAKLQkJCSAqIAlBTkQgYnJva2Vuc3RvcCBpcyBzZXQgCisJCQkgKiBJRiB0aW1lciBpcyBydW5uaW5nCisJCQkgKiAJQU5EIGJyb2tlbnN0b3AgaXMgc2V0CiAJCQkgKiAJQU5EIG5vIGludGVycnVwdCBoYXMgYmVlbiBzZXJ2aWNlZAogCQkJICogd2UgYXJlIFdEX0ZSRUVSVU4uCiAJCQkgKi8KQEAgLTMyOSw3ICszMjksOCBAQAogCQkJCWlmIChwLT5kZXZzW2luZGV4XS5ydW5zdGF0dXMgJiBXRF9TVEFUX1NWQ0QpIHsKIAkJCQkJcmV0ID0gV0RfRVhQSVJFRDsKIAkJCQl9IGVsc2UgewotCQkJCQkvKiB3ZSBjb3VsZCBhcyB3ZWxsIHByZXRlbmQgd2UgYXJlIGV4cGlyZWQgKi8KKwkJCQkJLyogd2UgY291bGQgYXMgd2VsbCBwcmV0ZW5kCisJCQkJCSAqIHdlIGFyZSBleHBpcmVkICovCiAJCQkJCXJldCA9IFdEX0ZSRUVSVU47CiAJCQkJfQogCQkJfSBlbHNlIHsKQEAgLTM0Miw3ICszNDMsNyBAQAogCWlmIChwLT5kZXZzW2luZGV4XS5ydW5zdGF0dXMgJiBXRF9TVEFUX1NWQ0QpCiAJCXJldCB8PSBXRF9TRVJWSUNFRDsKIAotCXJldHVybihyZXQpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBjcHdkX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCkBAIC0zNjcsMjIgKzM2OCwyMiBAQAogCXN0cnVjdCBjcHdkICpwID0gY3B3ZF9kZXZpY2U7CiAKIAlsb2NrX2tlcm5lbCgpOwotCXN3aXRjaChpbWlub3IoaW5vZGUpKSB7Ci0JCWNhc2UgV0QwX01JTk9SOgotCQljYXNlIFdEMV9NSU5PUjoKLQkJY2FzZSBXRDJfTUlOT1I6Ci0JCQlicmVhazsKKwlzd2l0Y2ggKGltaW5vcihpbm9kZSkpIHsKKwljYXNlIFdEMF9NSU5PUjoKKwljYXNlIFdEMV9NSU5PUjoKKwljYXNlIFdEMl9NSU5PUjoKKwkJYnJlYWs7CiAKLQkJZGVmYXVsdDoKLQkJCXVubG9ja19rZXJuZWwoKTsKLQkJCXJldHVybiAtRU5PREVWOworCWRlZmF1bHQ6CisJCXVubG9ja19rZXJuZWwoKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJLyogUmVnaXN0ZXIgSVJRIG9uIGZpcnN0IG9wZW4gb2YgZGV2aWNlICovCiAJaWYgKCFwLT5pbml0aWFsaXplZCkgewotCQlpZiAocmVxdWVzdF9pcnEocC0+aXJxLCAmY3B3ZF9pbnRlcnJ1cHQsIAorCQlpZiAocmVxdWVzdF9pcnEocC0+aXJxLCAmY3B3ZF9pbnRlcnJ1cHQsCiAJCQkJSVJRRl9TSEFSRUQsIERSSVZFUl9OQU1FLCBwKSkgewotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2Fubm90IHJlZ2lzdGVyIElSUSAlZFxuIiwgCisJCQlwcmludGsoS0VSTl9FUlIgUEZYICJDYW5ub3QgcmVnaXN0ZXIgSVJRICVkXG4iLAogCQkJCXAtPmlycSk7CiAJCQl1bmxvY2tfa2VybmVsKCk7CiAJCQlyZXR1cm4gLUVCVVNZOwpAQCAtNDAwLDggKzQwMSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY3B3ZF9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgCi0JCSAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQorc3RhdGljIGxvbmcgY3B3ZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJc3RhdGljIHN0cnVjdCB3YXRjaGRvZ19pbmZvIGluZm8gPSB7CiAJCS5vcHRpb25zCQk9IFdESU9GX1NFVFRJTUVPVVQsCkBAIC00MDksNiArNDA5LDcgQEAKIAkJLmlkZW50aXR5CQk9IERSSVZFUl9OQU1FLAogCX07CiAJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJaW50IGluZGV4ID0gaW1pbm9yKGlub2RlKSAtIFdEMF9NSU5PUjsKIAlzdHJ1Y3QgY3B3ZCAqcCA9IGNwd2RfZGV2aWNlOwogCWludCBzZXRvcHQgPSAwOwpAQCAtNDQyLDcgKzQ0Myw3IEBACiAJCQljcHdkX3N0YXJ0dGltZXIocCwgaW5kZXgpOwogCQl9IGVsc2UgewogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0JCisJCX0KIAkJYnJlYWs7CiAKIAkvKiBTb2xhcmlzLWNvbXBhdGlibGUgSU9DVExzICovCkBAIC00NTgsNyArNDU5LDcgQEAKIAogCWNhc2UgV0lPQ1NUT1A6CiAJCWlmIChwLT5lbmFibGVkKQotCQkJcmV0dXJuKC1FSU5WQUwpOworCQkJcmV0dXJuIC1FSU5WQUw7CiAKIAkJY3B3ZF9zdG9wdGltZXIocCwgaW5kZXgpOwogCQlicmVhazsKQEAgLTQ4MSw3ICs0ODIsNyBAQAogCWNhc2UgV0lPQ1NUT1A6CiAJY2FzZSBXSU9DR1NUQVQ6CiAJCWxvY2tfa2VybmVsKCk7Ci0JCXJ2YWwgPSBjcHdkX2lvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsIGNtZCwgYXJnKTsKKwkJcnZhbCA9IGNwd2RfaW9jdGwoZmlsZSwgY21kLCBhcmcpOwogCQl1bmxvY2tfa2VybmVsKCk7CiAJCWJyZWFrOwogCkBAIC00OTMsNyArNDk0LDcgQEAKIAlyZXR1cm4gcnZhbDsKIH0KIAotc3RhdGljIHNzaXplX3QgY3B3ZF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwgCitzdGF0aWMgc3NpemVfdCBjcHdkX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAogCQkJICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKQEAgLTUwOCwyMCArNTA5LDIwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IGNwd2RfcmVhZChzdHJ1Y3QgZmlsZSAqIGZpbGUsIGNoYXIgX191c2VyICpidWZmZXIsCitzdGF0aWMgc3NpemVfdCBjcHdkX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWZmZXIsCiAJCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNwd2RfZm9wcyA9IHsKLQkub3duZXIgPQlUSElTX01PRFVMRSwKLQkuaW9jdGwgPQljcHdkX2lvY3RsLAotCS5jb21wYXRfaW9jdGwgPQljcHdkX2NvbXBhdF9pb2N0bCwKLQkub3BlbiA9CQljcHdkX29wZW4sCi0JLndyaXRlID0JY3B3ZF93cml0ZSwKLQkucmVhZCA9CQljcHdkX3JlYWQsCi0JLnJlbGVhc2UgPQljcHdkX3JlbGVhc2UsCisJLm93bmVyID0JCVRISVNfTU9EVUxFLAorCS51bmxvY2tlZF9pb2N0bCA9CWNwd2RfaW9jdGwsCisJLmNvbXBhdF9pb2N0bCA9CQljcHdkX2NvbXBhdF9pb2N0bCwKKwkub3BlbiA9CQkJY3B3ZF9vcGVuLAorCS53cml0ZSA9CQljcHdkX3dyaXRlLAorCS5yZWFkID0JCQljcHdkX3JlYWQsCisJLnJlbGVhc2UgPQkJY3B3ZF9yZWxlYXNlLAogfTsKIAogc3RhdGljIGludCBfX2RldmluaXQgY3B3ZF9wcm9iZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvZGF2aW5jaV93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvZGF2aW5jaV93ZHQuYwppbmRleCAyZTEzNjAyLi5jNTFkMGIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL2RhdmluY2lfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9kYXZpbmNpX3dkdC5jCkBAIC0yNCw3ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAKICNkZWZpbmUgTU9EVUxFX05BTUUgIkRBVklOQ0ktV0RUOiAiCiAKQEAgLTc1LDkgKzc1LDkgQEAKIAlzcGluX2xvY2soJmlvX2xvY2spOwogCiAJLyogcHV0IHdhdGNoZG9nIGluIHNlcnZpY2Ugc3RhdGUgKi8KLQlkYXZpbmNpX3dyaXRlbChXREtFWV9TRVEwLCB3ZHRfYmFzZSArIFdEVENSKTsKKwlpb3dyaXRlMzIoV0RLRVlfU0VRMCwgd2R0X2Jhc2UgKyBXRFRDUik7CiAJLyogcHV0IHdhdGNoZG9nIGluIGFjdGl2ZSBzdGF0ZSAqLwotCWRhdmluY2lfd3JpdGVsKFdES0VZX1NFUTEsIHdkdF9iYXNlICsgV0RUQ1IpOworCWlvd3JpdGUzMihXREtFWV9TRVExLCB3ZHRfYmFzZSArIFdEVENSKTsKIAogCXNwaW5fdW5sb2NrKCZpb19sb2NrKTsKIH0KQEAgLTkwLDI5ICs5MCwyOSBAQAogCXNwaW5fbG9jaygmaW9fbG9jayk7CiAKIAkvKiBkaXNhYmxlLCBpbnRlcm5hbCBjbG9jayBzb3VyY2UgKi8KLQlkYXZpbmNpX3dyaXRlbCgwLCB3ZHRfYmFzZSArIFRDUik7CisJaW93cml0ZTMyKDAsIHdkdF9iYXNlICsgVENSKTsKIAkvKiByZXNldCB0aW1lciwgc2V0IG1vZGUgdG8gNjQtYml0IHdhdGNoZG9nLCBhbmQgdW5yZXNldCAqLwotCWRhdmluY2lfd3JpdGVsKDAsIHdkdF9iYXNlICsgVEdDUik7CisJaW93cml0ZTMyKDAsIHdkdF9iYXNlICsgVEdDUik7CiAJdGdjciA9IFRJTU1PREVfNjRCSVRfV0RPRyB8IFRJTTEyUlNfVU5SRVNFVCB8IFRJTTM0UlNfVU5SRVNFVDsKLQlkYXZpbmNpX3dyaXRlbCh0Z2NyLCB3ZHRfYmFzZSArIFRHQ1IpOworCWlvd3JpdGUzMih0Z2NyLCB3ZHRfYmFzZSArIFRHQ1IpOwogCS8qIGNsZWFyIGNvdW50ZXIgcmVncyAqLwotCWRhdmluY2lfd3JpdGVsKDAsIHdkdF9iYXNlICsgVElNMTIpOwotCWRhdmluY2lfd3JpdGVsKDAsIHdkdF9iYXNlICsgVElNMzQpOworCWlvd3JpdGUzMigwLCB3ZHRfYmFzZSArIFRJTTEyKTsKKwlpb3dyaXRlMzIoMCwgd2R0X2Jhc2UgKyBUSU0zNCk7CiAJLyogc2V0IHRpbWVvdXQgcGVyaW9kICovCiAJdGltZXJfbWFyZ2luID0gKCgodTY0KWhlYXJ0YmVhdCAqIENMT0NLX1RJQ0tfUkFURSkgJiAweGZmZmZmZmZmKTsKLQlkYXZpbmNpX3dyaXRlbCh0aW1lcl9tYXJnaW4sIHdkdF9iYXNlICsgUFJEMTIpOworCWlvd3JpdGUzMih0aW1lcl9tYXJnaW4sIHdkdF9iYXNlICsgUFJEMTIpOwogCXRpbWVyX21hcmdpbiA9ICgoKHU2NCloZWFydGJlYXQgKiBDTE9DS19USUNLX1JBVEUpID4+IDMyKTsKLQlkYXZpbmNpX3dyaXRlbCh0aW1lcl9tYXJnaW4sIHdkdF9iYXNlICsgUFJEMzQpOworCWlvd3JpdGUzMih0aW1lcl9tYXJnaW4sIHdkdF9iYXNlICsgUFJEMzQpOwogCS8qIGVuYWJsZSBydW4gY29udGludW91c2x5ICovCi0JZGF2aW5jaV93cml0ZWwoRU5BTU9ERTEyX1BFUklPRElDLCB3ZHRfYmFzZSArIFRDUik7CisJaW93cml0ZTMyKEVOQU1PREUxMl9QRVJJT0RJQywgd2R0X2Jhc2UgKyBUQ1IpOwogCS8qIE9uY2UgdGhlIFdEVCBpcyBpbiBwcmUtYWN0aXZlIHN0YXRlIHdyaXRlIHRvCiAJICogVElNMTIsIFRJTTM0LCBQUkQxMiwgUFJEMzQsIFRDUiwgVEdDUiwgV0RUQ1IgYXJlCiAJICogd3JpdGUgcHJvdGVjdGVkIChleGNlcHQgZm9yIHRoZSBXREtFWSBmaWVsZCkKIAkgKi8KIAkvKiBwdXQgd2F0Y2hkb2cgaW4gcHJlLWFjdGl2ZSBzdGF0ZSAqLwotCWRhdmluY2lfd3JpdGVsKFdES0VZX1NFUTAgfCBXREVOLCB3ZHRfYmFzZSArIFdEVENSKTsKKwlpb3dyaXRlMzIoV0RLRVlfU0VRMCB8IFdERU4sIHdkdF9iYXNlICsgV0RUQ1IpOwogCS8qIHB1dCB3YXRjaGRvZyBpbiBhY3RpdmUgc3RhdGUgKi8KLQlkYXZpbmNpX3dyaXRlbChXREtFWV9TRVExIHwgV0RFTiwgd2R0X2Jhc2UgKyBXRFRDUik7CisJaW93cml0ZTMyKFdES0VZX1NFUTEgfCBXREVOLCB3ZHRfYmFzZSArIFdEVENSKTsKIAogCXNwaW5fdW5sb2NrKCZpb19sb2NrKTsKIH0KQEAgLTE5NywxNyArMTk3LDE2IEBACiB7CiAJaW50IHJldCA9IDAsIHNpemU7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKIAogCWlmIChoZWFydGJlYXQgPCAxIHx8IGhlYXJ0YmVhdCA+IE1BWF9IRUFSVEJFQVQpCiAJCWhlYXJ0YmVhdCA9IERFRkFVTFRfSEVBUlRCRUFUOwogCi0JcHJpbnRrKEtFUk5fSU5GTyBNT0RVTEVfTkFNRQotCQkiRGFWaW5jaSBXYXRjaGRvZyBUaW1lcjogaGVhcnRiZWF0ICVkIHNlY1xuIiwgaGVhcnRiZWF0KTsKKwlkZXZfaW5mbyhkZXYsICJoZWFydGJlYXQgJWQgc2VjXG4iLCBoZWFydGJlYXQpOwogCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpZiAocmVzID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyBNT0RVTEVfTkFNRQotCQkJImZhaWxlZCB0byBnZXQgbWVtb3J5IHJlZ2lvbiByZXNvdXJjZVxuIik7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCBtZW1vcnkgcmVnaW9uIHJlc291cmNlXG4iKTsKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCkBAIC0yMTUsMjAgKzIxNCwyNiBAQAogCXdkdF9tZW0gPSByZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgc2l6ZSwgcGRldi0+bmFtZSk7CiAKIAlpZiAod2R0X21lbSA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gTU9EVUxFX05BTUUgImZhaWxlZCB0byBnZXQgbWVtb3J5IHJlZ2lvblxuIik7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCBtZW1vcnkgcmVnaW9uXG4iKTsKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQotCXdkdF9iYXNlID0gKHZvaWQgX19pb21lbSAqKShyZXMtPnN0YXJ0KTsKKworCXdkdF9iYXNlID0gaW9yZW1hcChyZXMtPnN0YXJ0LCBzaXplKTsKKwlpZiAoIXdkdF9iYXNlKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIG1hcCBtZW1vcnkgcmVnaW9uXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQogCiAJcmV0ID0gbWlzY19yZWdpc3RlcigmZGF2aW5jaV93ZHRfbWlzY2Rldik7CiAJaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSIE1PRFVMRV9OQU1FICJjYW5ub3QgcmVnaXN0ZXIgbWlzYyBkZXZpY2VcbiIpOworCQlkZXZfZXJyKGRldiwgImNhbm5vdCByZWdpc3RlciBtaXNjIGRldmljZVxuIik7CiAJCXJlbGVhc2VfcmVzb3VyY2Uod2R0X21lbSk7CiAJCWtmcmVlKHdkdF9tZW0pOwogCX0gZWxzZSB7CiAJCXNldF9iaXQoV0RUX0RFVklDRV9JTklURUQsICZ3ZHRfc3RhdHVzKTsKIAl9CiAKKwlpb3VubWFwKHdkdF9iYXNlKTsKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL2V1cm90ZWNod2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL2V1cm90ZWNod2R0LmMKaW5kZXggYTE3MWZjNi4uOWFkZDM1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9ldXJvdGVjaHdkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvZXVyb3RlY2h3ZHQuYwpAQCAtOCwxOSArOCwxOSBAQAogICoJQmFzZWQgb24gd2R0LmMuCiAgKglPcmlnaW5hbCBjb3B5cmlnaHQgbWVzc2FnZXM6CiAgKgotICogICAgICAoYykgQ29weXJpZ2h0IDE5OTYtMTk5NyBBbGFuIENveCA8YWxhbkBseG9yZ3VrLnVrdXUub3JnLnVrPiwKKyAqCShjKSBDb3B5cmlnaHQgMTk5Ni0xOTk3IEFsYW4gQ294IDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+LAogICoJCQkJCQlBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKLSAqICAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogICAgICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KLSAqICAgICAgMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKglhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKgotICogICAgICBOZWl0aGVyIEFsYW4gQ294IG5vciBDeW1ydU5ldCBMdGQuIGFkbWl0IGxpYWJpbGl0eSBub3IgcHJvdmlkZQotICogICAgICB3YXJyYW50eSBmb3IgYW55IG9mIHRoaXMgc29mdHdhcmUuIFRoaXMgbWF0ZXJpYWwgaXMgcHJvdmlkZWQKLSAqICAgICAgIkFTLUlTIiBhbmQgYXQgbm8gY2hhcmdlLgorICoJTmVpdGhlciBBbGFuIENveCBub3IgQ3ltcnVOZXQgTHRkLiBhZG1pdCBsaWFiaWxpdHkgbm9yIHByb3ZpZGUKKyAqCXdhcnJhbnR5IGZvciBhbnkgb2YgdGhpcyBzb2Z0d2FyZS4gVGhpcyBtYXRlcmlhbCBpcyBwcm92aWRlZAorICoJIkFTLUlTIiBhbmQgYXQgbm8gY2hhcmdlLgogICoKLSAqICAgICAgKGMpIENvcHlyaWdodCAxOTk1ICAgIEFsYW4gQ294IDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+KgorICoJKGMpIENvcHlyaWdodCAxOTk1ICAgIEFsYW4gQ294IDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+KgogICovCiAKIC8qIENoYW5nZWxvZzoKQEAgLTM3LDcgKzM3LDcgQEAKICAqCWFkZCBleHBlY3RfY2xvc2Ugc3VwcG9ydAogICoKICAqIDIwMDIuMDUuMzAgLSBKb2VsIEJlY2tlciA8am9lbC5iZWNrZXJAb3JhY2xlLmNvbT4KLSAqIAlBZGRlZCBNYXR0IERvbXNjaCdzIG5vd2F5b3V0IG1vZHVsZSBvcHRpb24uCisgKglBZGRlZCBNYXR0IERvbXNjaCdzIG5vd2F5b3V0IG1vZHVsZSBvcHRpb24uCiAgKi8KIAogLyoKQEAgLTE1MSw3ICsxNTEsNyBAQAogCWlmIChpcnEgPT0gMCkKIAkJcHJpbnRrKEtFUk5fSU5GTyAiOiBpbnRlcnJ1cHQgZGlzYWJsZWRcbiIpOwogCi0JZXVyd2R0X3dyaXRlX3JlZyhXRFRfVElNRVJfQ0ZHLCBpcnE8PDQpOworCWV1cndkdF93cml0ZV9yZWcoV0RUX1RJTUVSX0NGRywgaXJxIDw8IDQpOwogCiAJZXVyd2R0X3dyaXRlX3JlZyhXRFRfVU5JVF9TRUwsIFdEVF9VTklUX1NFQ1MpOwkvKiB3ZSB1c2Ugc2Vjb25kcyAqLwogCWV1cndkdF9zZXRfdGltZW91dCgwKTsJLyogdGhlIGRlZmF1bHQgdGltZW91dCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9nZW9kZXdkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9nZW9kZXdkdC5jCmluZGV4IDY3OTlhNmQuLjlhY2YwMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvZ2VvZGV3ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL2dlb2Rld2R0LmMKQEAgLTM0LDExICszNCwxNSBAQAogCiBzdGF0aWMgaW50IHRpbWVvdXQgPSBXQVRDSERPR19USU1FT1VUOwogbW9kdWxlX3BhcmFtKHRpbWVvdXQsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHRpbWVvdXQsICJXYXRjaGRvZyB0aW1lb3V0IGluIHNlY29uZHMuIDE8PSB0aW1lb3V0IDw9MTMxLCBkZWZhdWx0PSIgX19NT0RVTEVfU1RSSU5HKFdBVENIRE9HX1RJTUVPVVQpICIuIik7CitNT0RVTEVfUEFSTV9ERVNDKHRpbWVvdXQsCisJIldhdGNoZG9nIHRpbWVvdXQgaW4gc2Vjb25kcy4gMTw9IHRpbWVvdXQgPD0xMzEsIGRlZmF1bHQ9IgorCQkJCV9fTU9EVUxFX1NUUklORyhXQVRDSERPR19USU1FT1VUKSAiLiIpOwogCiBzdGF0aWMgaW50IG5vd2F5b3V0ID0gV0FUQ0hET0dfTk9XQVlPVVQ7CiBtb2R1bGVfcGFyYW0obm93YXlvdXQsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKG5vd2F5b3V0LCAiV2F0Y2hkb2cgY2Fubm90IGJlIHN0b3BwZWQgb25jZSBzdGFydGVkIChkZWZhdWx0PSIgX19NT0RVTEVfU1RSSU5HKFdBVENIRE9HX05PV0FZT1VUKSAiKSIpOworTU9EVUxFX1BBUk1fREVTQyhub3dheW91dCwKKwkiV2F0Y2hkb2cgY2Fubm90IGJlIHN0b3BwZWQgb25jZSBzdGFydGVkIChkZWZhdWx0PSIKKwkJCQlfX01PRFVMRV9TVFJJTkcoV0FUQ0hET0dfTk9XQVlPVVQpICIpIik7CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpnZW9kZXdkdF9wbGF0Zm9ybV9kZXZpY2U7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyB3ZHRfZmxhZ3M7CkBAIC0yNjksNyArMjczLDggQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JZ2VvZGV3ZHRfcGxhdGZvcm1fZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZShEUlZfTkFNRSwgLTEsIE5VTEwsIDApOworCWdlb2Rld2R0X3BsYXRmb3JtX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoRFJWX05BTUUsCisJCQkJCQkJCS0xLCBOVUxMLCAwKTsKIAlpZiAoSVNfRVJSKGdlb2Rld2R0X3BsYXRmb3JtX2RldmljZSkpIHsKIAkJcmV0ID0gUFRSX0VSUihnZW9kZXdkdF9wbGF0Zm9ybV9kZXZpY2UpOwogCQlnb3RvIGVycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvaHB3ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvaHB3ZHQuYwppbmRleCA3NjNjMWVhLi42Y2YxNTVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL2hwd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9ocHdkdC5jCkBAIC00Nyw2ICs0Nyw3IEBACiAjZGVmaW5lIFBDSV9CSU9TMzJfUEFSQUdSQVBIX0xFTgkxNgogI2RlZmluZSBQQ0lfUk9NX0JBU0UxCQkJMHgwMDBGMDAwMAogI2RlZmluZSBST01fU0laRQkJCTB4MTAwMDAKKyNkZWZpbmUgSFBXRFRfVkVSU0lPTgkJCSIxLjAxIgogCiBzdHJ1Y3QgYmlvczMyX3NlcnZpY2VfZGlyIHsKIAl1MzIgc2lnbmF0dXJlOwpAQCAtMTMwLDE3ICsxMzEsMTQgQEAKIHN0YXRpYyBzdHJ1Y3QgY21uX3JlZ2lzdGVycyBjbW5fcmVnczsKIAogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGhwd2R0X2RldmljZXNbXSA9IHsKLQl7Ci0JIC52ZW5kb3IgPSBQQ0lfVkVORE9SX0lEX0NPTVBBUSwKLQkgLmRldmljZSA9IDB4QjIwMywKLQkgLnN1YnZlbmRvciA9IFBDSV9BTllfSUQsCi0JIC5zdWJkZXZpY2UgPSBQQ0lfQU5ZX0lELAotCX0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQ09NUEFRLCAweEIyMDMpIH0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSFAsIDB4MzMwNikgfSwKIAl7MH0sCQkJLyogdGVybWluYXRlIGxpc3QgKi8KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgaHB3ZHRfZGV2aWNlcyk7CiAKLWV4dGVybiBhc21saW5rYWdlIHZvaWQgYXNtaW5saW5lX2NhbGwoc3RydWN0IGNtbl9yZWdpc3RlcnMgKnBpODZSZWdzLCB1bnNpZ25lZCBsb25nICpwUm9tRW50cnkpOworZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBhc21pbmxpbmVfY2FsbChzdHJ1Y3QgY21uX3JlZ2lzdGVycyAqcGk4NlJlZ3MsCisJCQkJCQl1bnNpZ25lZCBsb25nICpwUm9tRW50cnkpOwogCiAjaWZuZGVmIENPTkZJR19YODZfNjQKIC8qIC0tMzIgQml0IEJpb3MtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTYwNSw3ICs2MDMsNyBAQAogLyoKICAqCUtlcm5lbCBpbnRlcmZhY2VzCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGhwd2R0X2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBocHdkdF9mb3BzID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5sbHNlZWsgPSBub19sbHNlZWssCiAJLndyaXRlID0gaHB3ZHRfd3JpdGUsCkBAIC03MDQsMTAgKzcwMiwxMSBAQAogCX0KIAogCXByaW50ayhLRVJOX0lORk8KLQkJImhwIFdhdGNoZG9nIFRpbWVyIERyaXZlcjogMS4wMCIKKwkJImhwIFdhdGNoZG9nIFRpbWVyIERyaXZlcjogJXMiCiAJCSIsIHRpbWVyIG1hcmdpbjogJWQgc2Vjb25kcyAobm93YXlvdXQ9JWQpIgogCQkiLCBhbGxvdyBrZXJuZWwgZHVtcDogJXMgKGRlZmF1bHQgPSAwL09GRikuXG4iLAotCQlzb2Z0X21hcmdpbiwgbm93YXlvdXQsIChhbGxvd19rZHVtcCA9PSAwKSA/ICJPRkYiIDogIk9OIik7CisJCUhQV0RUX1ZFUlNJT04sIHNvZnRfbWFyZ2luLCBub3dheW91dCwKKwkJKGFsbG93X2tkdW1wID09IDApID8gIk9GRiIgOiAiT04iKTsKIAogCXJldHVybiAwOwogCkBAIC03NTcsNiArNzU2LDcgQEAKIE1PRFVMRV9BVVRIT1IoIlRvbSBNaW5nYXJlbGxpIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oImhwIHdhdGNoZG9nIGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX1ZFUlNJT04oSFBXRFRfVkVSU0lPTik7CiBNT0RVTEVfQUxJQVNfTUlTQ0RFVihXQVRDSERPR19NSU5PUik7CiAKIG1vZHVsZV9wYXJhbShzb2Z0X21hcmdpbiwgaW50LCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvaTYzMDBlc2IuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvaTYzMDBlc2IuYwppbmRleCA3NGY5NTFjLi4yZGJlODM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL2k2MzAwZXNiLmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9pNjMwMGVzYi5jCkBAIC0xMyw3ICsxMyw3IEBACiAgKgogICoJVGhlIHRpbWVyIGlzIGltcGxlbWVudGVkIGluIHRoZSBmb2xsb3dpbmcgSS9PIGNvbnRyb2xsZXIgaHViczoKICAqCShTZWUgdGhlIGludGVsIGRvY3VtZW50YXRpb24gb24gaHR0cDovL2RldmVsb3Blci5pbnRlbC5jb20uKQotICoJNjMwMEVTQiBjaGlwIDogZG9jdW1lbnQgbnVtYmVyIDMwMDY0MS0wMDMKKyAqCTYzMDBFU0IgY2hpcCA6IGRvY3VtZW50IG51bWJlciAzMDA2NDEtMDA0CiAgKgogICogIDIwMDRZWVpaIFJvc3MgQmlybwogICoJSW5pdGlhbCB2ZXJzaW9uIDAuMDEKQEAgLTM0LDcgKzM0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC93YXRjaGRvZy5oPgotI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KQEAgLTQyLDcgKzQyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAvKiBNb2R1bGUgYW5kIHZlcnNpb24gaW5mb3JtYXRpb24gKi8KLSNkZWZpbmUgRVNCX1ZFUlNJT04gIjAuMDMiCisjZGVmaW5lIEVTQl9WRVJTSU9OICIwLjA0IgogI2RlZmluZSBFU0JfTU9EVUxFX05BTUUgImk2MzAwRVNCIHRpbWVyIgogI2RlZmluZSBFU0JfRFJJVkVSX05BTUUgRVNCX01PRFVMRV9OQU1FICIsIHYiIEVTQl9WRVJTSU9OCiAjZGVmaW5lIFBGWCBFU0JfTU9EVUxFX05BTUUgIjogIgpAQCAtODEsNiArODEsNyBAQAogc3RhdGljIHN0cnVjdCBwY2lfZGV2ICplc2JfcGNpOwogc3RhdGljIHVuc2lnbmVkIHNob3J0IHRyaWdnZXJlZDsgLyogVGhlIHN0YXR1cyBvZiB0aGUgd2F0Y2hkb2cgdXBvbiBib290ICovCiBzdGF0aWMgY2hhciBlc2JfZXhwZWN0X2Nsb3NlOworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmVzYl9wbGF0Zm9ybV9kZXZpY2U7CiAKIC8qIG1vZHVsZSBwYXJhbWV0ZXJzICovCiAvKiAzMCBzZWMgZGVmYXVsdCBoZWFydGJlYXQgKDEgPCBoZWFydGJlYXQgPCAyKjEwMjMpICovCkBAIC0xMTQsMTMgKzExNSwxOCBAQAogCXdyaXRlYihFU0JfVU5MT0NLMiwgRVNCX1JFTE9BRF9SRUcpOwogfQogCi1zdGF0aWMgdm9pZCBlc2JfdGltZXJfc3RhcnQodm9pZCkKK3N0YXRpYyBpbnQgZXNiX3RpbWVyX3N0YXJ0KHZvaWQpCiB7CiAJdTggdmFsOwogCisJc3Bpbl9sb2NrKCZlc2JfbG9jayk7CisJZXNiX3VubG9ja19yZWdpc3RlcnMoKTsKKwl3cml0ZXcoRVNCX1dEVF9SRUxPQUQsIEVTQl9SRUxPQURfUkVHKTsKIAkvKiBFbmFibGUgb3IgRW5hYmxlICsgTG9jaz8gKi8KIAl2YWwgPSAweDAyIHwgKG5vd2F5b3V0ID8gMHgwMSA6IDB4MDApOwogCXBjaV93cml0ZV9jb25maWdfYnl0ZShlc2JfcGNpLCBFU0JfTE9DS19SRUcsIHZhbCk7CisJc3Bpbl91bmxvY2soJmVzYl9sb2NrKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBlc2JfdGltZXJfc3RvcCh2b2lkKQpAQCAtMjA3LDcgKzIxMyw2IEBACiAJCXJldHVybiAtRUJVU1k7CiAKIAkvKiBSZWxvYWQgYW5kIGFjdGl2YXRlIHRpbWVyICovCi0JZXNiX3RpbWVyX2tlZXBhbGl2ZSgpOwogCWVzYl90aW1lcl9zdGFydCgpOwogCiAJcmV0dXJuIG5vbnNlZWthYmxlX29wZW4oaW5vZGUsIGZpbGUpOwpAQCAtMjQwLDcgKzI0NSw4IEBACiAJCQkgKiBmaXZlIG1vbnRocyBhZ28uLi4gKi8KIAkJCWVzYl9leHBlY3RfY2xvc2UgPSAwOwogCi0JCQkvKiBzY2FuIHRvIHNlZSB3aGV0aGVyIG9yIG5vdCB3ZSBnb3QgdGhlIG1hZ2ljIGNoYXJhY3RlciAqLworCQkJLyogc2NhbiB0byBzZWUgd2hldGhlciBvciBub3Qgd2UgZ290IHRoZQorCQkJICogbWFnaWMgY2hhcmFjdGVyICovCiAJCQlmb3IgKGkgPSAwOyBpICE9IGxlbjsgaSsrKSB7CiAJCQkJY2hhciBjOwogCQkJCWlmIChnZXRfdXNlcihjLCBkYXRhICsgaSkpCkBAIC0yOTIsNyArMjk4LDYgQEAKIAkJfQogCiAJCWlmIChuZXdfb3B0aW9ucyAmIFdESU9TX0VOQUJMRUNBUkQpIHsKLQkJCWVzYl90aW1lcl9rZWVwYWxpdmUoKTsKIAkJCWVzYl90aW1lcl9zdGFydCgpOwogCQkJcmV0dmFsID0gMDsKIAkJfQpAQCAtMzE5LDE5ICszMjQsNiBAQAogfQogCiAvKgotICogICAgICBOb3RpZnkgc3lzdGVtCi0gKi8KLQotc3RhdGljIGludCBlc2Jfbm90aWZ5X3N5cyhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsCi0JCQkJCXVuc2lnbmVkIGxvbmcgY29kZSwgdm9pZCAqdW51c2VkKQotewotCWlmIChjb2RlID09IFNZU19ET1dOIHx8IGNvZGUgPT0gU1lTX0hBTFQpCi0JCWVzYl90aW1lcl9zdG9wKCk7CS8qIFR1cm4gdGhlIFdEVCBvZmYgKi8KLQotCXJldHVybiBOT1RJRllfRE9ORTsKLX0KLQotLyoKICAqICAgICAgS2VybmVsIEludGVyZmFjZXMKICAqLwogCkBAIC0zNTAsMTAgKzM0Miw2IEBACiAJLmZvcHMgPSAmZXNiX2ZvcHMsCiB9OwogCi1zdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGVzYl9ub3RpZmllciA9IHsKLQkubm90aWZpZXJfY2FsbCA9IGVzYl9ub3RpZnlfc3lzLAotfTsKLQogLyoKICAqIERhdGEgZm9yIFBDSSBkcml2ZXIgaW50ZXJmYWNlCiAgKgpAQCAtMzcyLDcgKzM2MCw3IEBACiAgKiAgICAgIEluaXQgJiBleGl0IHJvdXRpbmVzCiAgKi8KIAotc3RhdGljIHVuc2lnbmVkIGNoYXIgX19pbml0IGVzYl9nZXRkZXZpY2Uodm9pZCkKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIF9fZGV2aW5pdCBlc2JfZ2V0ZGV2aWNlKHZvaWQpCiB7CiAJdTggdmFsMTsKIAl1bnNpZ25lZCBzaG9ydCB2YWwyOwpAQCAtNDQzLDcgKzQzMSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IHdhdGNoZG9nX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19kZXZpbml0IGVzYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJaW50IHJldDsKIApAQCAtNDU5LDE5ICs0NDcsMTMgQEAKIAkJCSJoZWFydGJlYXQgdmFsdWUgbXVzdCBiZSAxPGhlYXJ0YmVhdDwyMDQ2LCB1c2luZyAlZFxuIiwKIAkJCQkJCQkJaGVhcnRiZWF0KTsKIAl9Ci0JcmV0ID0gcmVnaXN0ZXJfcmVib290X25vdGlmaWVyKCZlc2Jfbm90aWZpZXIpOwotCWlmIChyZXQgIT0gMCkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYCi0JCQkiY2Fubm90IHJlZ2lzdGVyIHJlYm9vdCBub3RpZmllciAoZXJyPSVkKVxuIiwgcmV0KTsKLQkJZ290byBlcnJfdW5tYXA7Ci0JfQogCiAJcmV0ID0gbWlzY19yZWdpc3RlcigmZXNiX21pc2NkZXYpOwogCWlmIChyZXQgIT0gMCkgewogCQlwcmludGsoS0VSTl9FUlIgUEZYCiAJCQkiY2Fubm90IHJlZ2lzdGVyIG1pc2NkZXYgb24gbWlub3I9JWQgKGVycj0lZClcbiIsCiAJCQkJCQkJV0FUQ0hET0dfTUlOT1IsIHJldCk7Ci0JCWdvdG8gZXJyX25vdGlmaWVyOworCQlnb3RvIGVycl91bm1hcDsKIAl9CiAJZXNiX3RpbWVyX3N0b3AoKTsKIAlwcmludGsoS0VSTl9JTkZPIFBGWApAQCAtNDc5LDggKzQ2MSw2IEBACiAJCQkJCQlCQVNFQUREUiwgaGVhcnRiZWF0LCBub3dheW91dCk7CiAJcmV0dXJuIDA7CiAKLWVycl9ub3RpZmllcjoKLQl1bnJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllcigmZXNiX25vdGlmaWVyKTsKIGVycl91bm1hcDoKIAlpb3VubWFwKEJBU0VBRERSKTsKIC8qIGVycl9yZWxlYXNlOiAqLwpAQCAtNDkyLDcgKzQ3Miw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgX19leGl0IHdhdGNoZG9nX2NsZWFudXAodm9pZCkKK3N0YXRpYyBpbnQgX19kZXZleGl0IGVzYl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCS8qIFN0b3AgdGhlIHRpbWVyIGJlZm9yZSB3ZSBsZWF2ZSAqLwogCWlmICghbm93YXlvdXQpCkBAIC01MDAsMTEgKzQ4MCw1OCBAQAogCiAJLyogRGVyZWdpc3RlciAqLwogCW1pc2NfZGVyZWdpc3RlcigmZXNiX21pc2NkZXYpOwotCXVucmVnaXN0ZXJfcmVib290X25vdGlmaWVyKCZlc2Jfbm90aWZpZXIpOwogCWlvdW5tYXAoQkFTRUFERFIpOwogCXBjaV9yZWxlYXNlX3JlZ2lvbihlc2JfcGNpLCAwKTsKIAlwY2lfZGlzYWJsZV9kZXZpY2UoZXNiX3BjaSk7CiAJcGNpX2Rldl9wdXQoZXNiX3BjaSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGVzYl9zaHV0ZG93bihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJZXNiX3RpbWVyX3N0b3AoKTsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZXNiX3BsYXRmb3JtX2RyaXZlciA9IHsKKwkucHJvYmUgICAgICAgICAgPSBlc2JfcHJvYmUsCisJLnJlbW92ZSAgICAgICAgID0gX19kZXZleGl0X3AoZXNiX3JlbW92ZSksCisJLnNodXRkb3duICAgICAgID0gZXNiX3NodXRkb3duLAorCS5kcml2ZXIgICAgICAgICA9IHsKKwkJLm93bmVyICA9IFRISVNfTU9EVUxFLAorCQkubmFtZSAgID0gRVNCX01PRFVMRV9OQU1FLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCB3YXRjaGRvZ19pbml0KHZvaWQpCit7CisJaW50IGVycjsKKworCXByaW50ayhLRVJOX0lORk8gUEZYICJJbnRlbCA2MzAwRVNCIFdhdGNoRG9nIFRpbWVyIERyaXZlciB2JXNcbiIsCisJCUVTQl9WRVJTSU9OKTsKKworCWVyciA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZXNiX3BsYXRmb3JtX2RyaXZlcik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWVzYl9wbGF0Zm9ybV9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKEVTQl9NT0RVTEVfTkFNRSwKKwkJCQkJCQkJLTEsIE5VTEwsIDApOworCWlmIChJU19FUlIoZXNiX3BsYXRmb3JtX2RldmljZSkpIHsKKwkJZXJyID0gUFRSX0VSUihlc2JfcGxhdGZvcm1fZGV2aWNlKTsKKwkJZ290byB1bnJlZ19wbGF0Zm9ybV9kcml2ZXI7CisJfQorCisJcmV0dXJuIDA7CisKK3VucmVnX3BsYXRmb3JtX2RyaXZlcjoKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZXNiX3BsYXRmb3JtX2RyaXZlcik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHdhdGNoZG9nX2NsZWFudXAodm9pZCkKK3sKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcihlc2JfcGxhdGZvcm1fZGV2aWNlKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZXNiX3BsYXRmb3JtX2RyaXZlcik7CisJcHJpbnRrKEtFUk5fSU5GTyBQRlggIldhdGNoZG9nIE1vZHVsZSBVbmxvYWRlZC5cbiIpOwogfQogCiBtb2R1bGVfaW5pdCh3YXRjaGRvZ19pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvaVRDT192ZW5kb3Jfc3VwcG9ydC5jIGIvZHJpdmVycy93YXRjaGRvZy9pVENPX3ZlbmRvcl9zdXBwb3J0LmMKaW5kZXggZDgyNjRhZC4uZDNjMGY2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9pVENPX3ZlbmRvcl9zdXBwb3J0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9pVENPX3ZlbmRvcl9zdXBwb3J0LmMKQEAgLTQ3LDcgKzQ3LDggQEAKIAogc3RhdGljIGludCB2ZW5kb3JzdXBwb3J0OwogbW9kdWxlX3BhcmFtKHZlbmRvcnN1cHBvcnQsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHZlbmRvcnN1cHBvcnQsICJpVENPIHZlbmRvciBzcGVjaWZpYyBzdXBwb3J0IG1vZGUsIGRlZmF1bHQ9MCAobm9uZSksIDE9U3VwZXJNaWNybyBQZW50MywgMj1TdXBlck1pY3JvIFBlbnQ0KyIpOworTU9EVUxFX1BBUk1fREVTQyh2ZW5kb3JzdXBwb3J0LCAiaVRDTyB2ZW5kb3Igc3BlY2lmaWMgc3VwcG9ydCBtb2RlLCBkZWZhdWx0PSIKKwkJCSIwIChub25lKSwgMT1TdXBlck1pY3JvIFBlbnQzLCAyPVN1cGVyTWljcm8gUGVudDQrIik7CiAKIC8qCiAgKglWZW5kb3IgU3BlY2lmaWMgU3VwcG9ydApAQCAtMzA1LDcgKzMwNiw4IEBACiBtb2R1bGVfaW5pdChpVENPX3ZlbmRvcl9pbml0X21vZHVsZSk7CiBtb2R1bGVfZXhpdChpVENPX3ZlbmRvcl9leGl0X21vZHVsZSk7CiAKLU1PRFVMRV9BVVRIT1IoIldpbSBWYW4gU2Vicm9lY2sgPHdpbUBpZ3VhbmEuYmU+LCBSLiBTZXJldG55IDxsa3BhdGNoZXNAcGF5cGMuY29tPiIpOworTU9EVUxFX0FVVEhPUigiV2ltIFZhbiBTZWJyb2VjayA8d2ltQGlndWFuYS5iZT4sICIKKwkJIlIuIFNlcmV0bnkgPGxrcGF0Y2hlc0BwYXlwYy5jb20+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkludGVsIFRDTyBWZW5kb3IgU3BlY2lmaWMgV2F0Y2hEb2cgVGltZXIgRHJpdmVyIFN1cHBvcnQiKTsKIE1PRFVMRV9WRVJTSU9OKERSVl9WRVJTSU9OKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvaVRDT193ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvaVRDT193ZHQuYwppbmRleCAzNTIzMzQ5Li42NDgyNTBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL2lUQ09fd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9pVENPX3dkdC5jCkBAIC0yNzMsNyArMjczLDkgQEAKICNkZWZpbmUgV0FUQ0hET0dfSEVBUlRCRUFUIDMwCS8qIDMwIHNlYyBkZWZhdWx0IGhlYXJ0YmVhdCAqLwogc3RhdGljIGludCBoZWFydGJlYXQgPSBXQVRDSERPR19IRUFSVEJFQVQ7ICAvKiBpbiBzZWNvbmRzICovCiBtb2R1bGVfcGFyYW0oaGVhcnRiZWF0LCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhoZWFydGJlYXQsICJXYXRjaGRvZyBoZWFydGJlYXQgaW4gc2Vjb25kcy4gKDI8aGVhcnRiZWF0PDM5IChUQ08gdjEpIG9yIDYxMyAoVENPIHYyKSwgZGVmYXVsdD0iIF9fTU9EVUxFX1NUUklORyhXQVRDSERPR19IRUFSVEJFQVQpICIpIik7CitNT0RVTEVfUEFSTV9ERVNDKGhlYXJ0YmVhdCwgIldhdGNoZG9nIGhlYXJ0YmVhdCBpbiBzZWNvbmRzLiAiCisJIigyPGhlYXJ0YmVhdDwzOSAoVENPIHYxKSBvciA2MTMgKFRDTyB2MiksIGRlZmF1bHQ9IgorCQkJCV9fTU9EVUxFX1NUUklORyhXQVRDSERPR19IRUFSVEJFQVQpICIpIik7CiAKIHN0YXRpYyBpbnQgbm93YXlvdXQgPSBXQVRDSERPR19OT1dBWU9VVDsKIG1vZHVsZV9wYXJhbShub3dheW91dCwgaW50LCAwKTsKQEAgLTM0Niw3ICszNDgsOCBAQAogCS8qIGRpc2FibGUgY2hpcHNldCdzIE5PX1JFQk9PVCBiaXQgKi8KIAlpZiAoaVRDT193ZHRfdW5zZXRfTk9fUkVCT09UX2JpdCgpKSB7CiAJCXNwaW5fdW5sb2NrKCZpVENPX3dkdF9wcml2YXRlLmlvX2xvY2spOwotCQlwcmludGsoS0VSTl9FUlIgUEZYICJmYWlsZWQgdG8gcmVzZXQgTk9fUkVCT09UIGZsYWcsIHJlYm9vdCBkaXNhYmxlZCBieSBoYXJkd2FyZVxuIik7CisJCXByaW50ayhLRVJOX0VSUiBQRlggImZhaWxlZCB0byByZXNldCBOT19SRUJPT1QgZmxhZywgIgorCQkJCQkicmVib290IGRpc2FibGVkIGJ5IGhhcmR3YXJlXG4iKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC02NjksNyArNjcyLDggQEAKIAogCS8qIENoZWNrIGNoaXBzZXQncyBOT19SRUJPT1QgYml0ICovCiAJaWYgKGlUQ09fd2R0X3Vuc2V0X05PX1JFQk9PVF9iaXQoKSAmJiBpVENPX3ZlbmRvcl9jaGVja19ub3JlYm9vdF9vbigpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggImZhaWxlZCB0byByZXNldCBOT19SRUJPT1QgZmxhZywgcmVib290IGRpc2FibGVkIGJ5IGhhcmR3YXJlXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZmFpbGVkIHRvIHJlc2V0IE5PX1JFQk9PVCBmbGFnLCAiCisJCQkJCSJyZWJvb3QgZGlzYWJsZWQgYnkgaGFyZHdhcmVcbiIpOwogCQlyZXQgPSAtRU5PREVWOwkvKiBDYW5ub3QgcmVzZXQgTk9fUkVCT09UIGJpdCAqLwogCQlnb3RvIG91dDsKIAl9CkBAIC03MTYsOCArNzIwLDkgQEAKIAkgICBpZiBub3QgcmVzZXQgdG8gdGhlIGRlZmF1bHQgKi8KIAlpZiAoaVRDT193ZHRfc2V0X2hlYXJ0YmVhdChoZWFydGJlYXQpKSB7CiAJCWlUQ09fd2R0X3NldF9oZWFydGJlYXQoV0FUQ0hET0dfSEVBUlRCRUFUKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggImhlYXJ0YmVhdCB2YWx1ZSBtdXN0IGJlIDIgPCBoZWFydGJlYXQgPCAzOSAoVENPIHYxKSBvciA2MTMgKFRDTyB2MiksIHVzaW5nICVkXG4iLAotCQkJCQkJCWhlYXJ0YmVhdCk7CisJCXByaW50ayhLRVJOX0lORk8gUEZYCisJCQkiaGVhcnRiZWF0IHZhbHVlIG11c3QgYmUgMiA8IGhlYXJ0YmVhdCA8IDM5IChUQ08gdjEpICIKKwkJCQkib3IgNjEzIChUQ08gdjIpLCB1c2luZyAlZFxuIiwgaGVhcnRiZWF0KTsKIAl9CiAKIAlyZXQgPSBtaXNjX3JlZ2lzdGVyKCZpVENPX3dkdF9taXNjZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvaXQ4N193ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvaXQ4N193ZHQuYwppbmRleCBhZmI4YWYzLi5jYzEzM2M1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL2l0ODdfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9pdDg3X3dkdC5jCkBAIC0xODgsOCArMTg4LDggQEAKIAogc3RhdGljIGlubGluZSB2b2lkIHN1cGVyaW9fb3V0YihpbnQgdmFsLCBpbnQgcmVnKQogewotICAgICAgIG91dGIocmVnLCBSRUcpOwotICAgICAgIG91dGIodmFsLCBWQUwpOworCW91dGIocmVnLCBSRUcpOworCW91dGIodmFsLCBWQUwpOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBzdXBlcmlvX2ludyhpbnQgcmVnKQpAQCAtMjA0LDEwICsyMDQsMTAgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIHN1cGVyaW9fb3V0dyhpbnQgdmFsLCBpbnQgcmVnKQogewotICAgICAgIG91dGIocmVnKyssIFJFRyk7Ci0gICAgICAgb3V0Yih2YWwgPj4gOCwgVkFMKTsKLSAgICAgICBvdXRiKHJlZywgUkVHKTsKLSAgICAgICBvdXRiKHZhbCwgVkFMKTsKKwlvdXRiKHJlZysrLCBSRUcpOworCW91dGIodmFsID4+IDgsIFZBTCk7CisJb3V0YihyZWcsIFJFRyk7CisJb3V0Yih2YWwsIFZBTCk7CiB9CiAKIC8qIHdhdGNoZG9nIHRpbWVyIGhhbmRsaW5nICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL21wYzUyMDBfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL21wYzUyMDBfd2R0LmMKaW5kZXggZGI5MTg5Mi4uNDY1ZmUzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9tcGM1MjAwX3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvbXBjNTIwMF93ZHQuYwpAQCAtOSw4ICs5LDggQEAKICNpbmNsdWRlIDxhc20vbXBjNTJ4eC5oPgogCiAKLSNkZWZpbmUgR1BUX01PREVfV0RUCQkoMTw8MTUpCi0jZGVmaW5lIEdQVF9NT0RFX0NFCQkoMTw8MTIpCisjZGVmaW5lIEdQVF9NT0RFX1dEVAkJKDEgPDwgMTUpCisjZGVmaW5lIEdQVF9NT0RFX0NFCQkoMSA8PCAxMikKICNkZWZpbmUgR1BUX01PREVfTVNfVElNRVIJKDB4NCkKIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL21wY29yZV93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvbXBjb3JlX3dkdC5jCmluZGV4IDExMzBhZDYuLjE1MTJhYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvbXBjb3JlX3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvbXBjb3JlX3dkdC5jCkBAIC01LDcgKzUsNyBAQAogICoKICAqCUJhc2VkIG9uIHRoZSBTb2Z0RG9nIGRyaXZlcjoKICAqCShjKSBDb3B5cmlnaHQgMTk5NiBBbGFuIENveCA8YWxhbkBseG9yZ3VrLnVrdXUub3JnLnVrPiwKLSAqIAkJCQkJCUFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgkJCQkJCUFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvbXR4LTFfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL210eC0xX3dkdC5jCmluZGV4IDNhY2NlNjIuLjUzOWI2ZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvbXR4LTFfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9tdHgtMV93ZHQuYwpAQCAtNSw3ICs1LDcgQEAKICAqCQkJCQkJCUFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuNGctc3lzdGVtcy5iaXoKICAqCi0gKiAJKEMpIENvcHlyaWdodCAyMDA3IE9wZW5XcnQub3JnLCBGbG9yaWFuIEZhaW5lbGxpIDxmbG9yaWFuQG9wZW53cnQub3JnPgorICoJKEMpIENvcHlyaWdodCAyMDA3IE9wZW5XcnQub3JnLCBGbG9yaWFuIEZhaW5lbGxpIDxmbG9yaWFuQG9wZW53cnQub3JnPgogICoKICAqICAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9vcmlvbjV4X3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9vcmlvbjV4X3dkdC5jCmluZGV4IGI2NGFlMWEuLmU4MTQ0MWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvb3Jpb241eF93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL29yaW9uNXhfd2R0LmMKQEAgLTE2LDExICsxNiwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3dhdGNoZG9nLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8cGxhdC9vcmlvbjV4X3dkdC5oPgogCiAvKgogICogV2F0Y2hkb2cgdGltZXIgYmxvY2sgcmVnaXN0ZXJzLgpAQCAtMjksMTMgKzMxLDE0IEBACiAjZGVmaW5lICBXRFRfRU4JCQkweDAwMTAKICNkZWZpbmUgV0RUX1ZBTAkJCShUSU1FUl9WSVJUX0JBU0UgKyAweDAwMjQpCiAKLSNkZWZpbmUgT1JJT041WF9UQ0xLCQkxNjY2NjY2NjcKLSNkZWZpbmUgV0RUX01BWF9EVVJBVElPTgkoMHhmZmZmZmZmZiAvIE9SSU9ONVhfVENMSykKKyNkZWZpbmUgV0RUX01BWF9DWUNMRV9DT1VOVAkweGZmZmZmZmZmCiAjZGVmaW5lIFdEVF9JTl9VU0UJCTAKICNkZWZpbmUgV0RUX09LX1RPX0NMT1NFCQkxCiAKIHN0YXRpYyBpbnQgbm93YXlvdXQgPSBXQVRDSERPR19OT1dBWU9VVDsKLXN0YXRpYyBpbnQgaGVhcnRiZWF0ID0gIFdEVF9NQVhfRFVSQVRJT047CS8qIChzZWNvbmRzKSAqLworc3RhdGljIGludCBoZWFydGJlYXQgPSAtMTsJCS8qIG1vZHVsZSBwYXJhbWV0ZXIgKHNlY29uZHMpICovCitzdGF0aWMgdW5zaWduZWQgaW50IHdkdF9tYXhfZHVyYXRpb247CS8qIChzZWNvbmRzKSAqLworc3RhdGljIHVuc2lnbmVkIGludCB3ZHRfdGNsazsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHdkdF9zdGF0dXM7CiBzdGF0aWMgc3BpbmxvY2tfdCB3ZHRfbG9jazsKIApAQCAtNDYsNyArNDksNyBAQAogCXNwaW5fbG9jaygmd2R0X2xvY2spOwogCiAJLyogU2V0IHdhdGNoZG9nIGR1cmF0aW9uICovCi0Jd3JpdGVsKE9SSU9ONVhfVENMSyAqIGhlYXJ0YmVhdCwgV0RUX1ZBTCk7CisJd3JpdGVsKHdkdF90Y2xrICogaGVhcnRiZWF0LCBXRFRfVkFMKTsKIAogCS8qIENsZWFyIHdhdGNoZG9nIHRpbWVyIGludGVycnVwdCAqLwogCXJlZyA9IHJlYWRsKEJSSURHRV9DQVVTRSk7CkBAIC04OCw3ICs5MSw3IEBACiBzdGF0aWMgaW50IG9yaW9uNXhfd2R0X2dldF90aW1lbGVmdChpbnQgKnRpbWVfbGVmdCkKIHsKIAlzcGluX2xvY2soJndkdF9sb2NrKTsKLQkqdGltZV9sZWZ0ID0gcmVhZGwoV0RUX1ZBTCkgLyBPUklPTjVYX1RDTEs7CisJKnRpbWVfbGVmdCA9IHJlYWRsKFdEVF9WQUwpIC8gd2R0X3RjbGs7CiAJc3Bpbl91bmxvY2soJndkdF9sb2NrKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTE1OCw3ICsxNjEsNyBAQAogCQlpZiAocmV0KQogCQkJYnJlYWs7CiAKLQkJaWYgKHRpbWUgPD0gMCB8fCB0aW1lID4gV0RUX01BWF9EVVJBVElPTikgeworCQlpZiAodGltZSA8PSAwIHx8IHRpbWUgPiB3ZHRfbWF4X2R1cmF0aW9uKSB7CiAJCQlyZXQgPSAtRUlOVkFMOwogCQkJYnJlYWs7CiAJCX0KQEAgLTIxMCwyMyArMjEzLDY5IEBACiAJLmZvcHMJCT0gJm9yaW9uNXhfd2R0X2ZvcHMsCiB9OwogCi1zdGF0aWMgaW50IF9faW5pdCBvcmlvbjV4X3dkdF9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBvcmlvbjV4X3dkdF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBvcmlvbjV4X3dkdF9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCWludCByZXQ7CisKKwlpZiAocGRhdGEpIHsKKwkJd2R0X3RjbGsgPSBwZGF0YS0+dGNsazsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9FUlIgIk9yaW9uNXggV2F0Y2hkb2cgbWlzc2VzIHBsYXRmb3JtIGRhdGFcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAob3Jpb241eF93ZHRfbWlzY2Rldi5wYXJlbnQpCisJCXJldHVybiAtRUJVU1k7CisJb3Jpb241eF93ZHRfbWlzY2Rldi5wYXJlbnQgPSAmcGRldi0+ZGV2OworCisJd2R0X21heF9kdXJhdGlvbiA9IFdEVF9NQVhfQ1lDTEVfQ09VTlQgLyB3ZHRfdGNsazsKKwlpZiAoaGVhcnRiZWF0IDw9IDAgfHwgaGVhcnRiZWF0ID4gd2R0X21heF9kdXJhdGlvbikKKwkJaGVhcnRiZWF0ID0gd2R0X21heF9kdXJhdGlvbjsKKworCXJldCA9IG1pc2NfcmVnaXN0ZXIoJm9yaW9uNXhfd2R0X21pc2NkZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlwcmludGsoS0VSTl9JTkZPICJPcmlvbjV4IFdhdGNoZG9nIFRpbWVyOiBJbml0aWFsIHRpbWVvdXQgJWQgc2VjJXNcbiIsCisJCQkJaGVhcnRiZWF0LCBub3dheW91dCA/ICIsIG5vd2F5b3V0IiA6ICIiKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgb3Jpb241eF93ZHRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJaW50IHJldDsKIAotCXNwaW5fbG9ja19pbml0KCZ3ZHRfbG9jayk7CisJaWYgKHRlc3RfYml0KFdEVF9JTl9VU0UsICZ3ZHRfc3RhdHVzKSkgeworCQl3ZHRfZGlzYWJsZSgpOworCQljbGVhcl9iaXQoV0RUX0lOX1VTRSwgJndkdF9zdGF0dXMpOworCX0KIAotCXJldCA9IG1pc2NfcmVnaXN0ZXIoJm9yaW9uNXhfd2R0X21pc2NkZXYpOwotCWlmIChyZXQgPT0gMCkKLQkJcHJpbnRrKCJPcmlvbjV4IFdhdGNoZG9nIFRpbWVyOiBoZWFydGJlYXQgJWQgc2VjXG4iLAotCQkJCQkJCQloZWFydGJlYXQpOworCXJldCA9IG1pc2NfZGVyZWdpc3Rlcigmb3Jpb241eF93ZHRfbWlzY2Rldik7CisJaWYgKCFyZXQpCisJCW9yaW9uNXhfd2R0X21pc2NkZXYucGFyZW50ID0gTlVMTDsKIAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG9yaW9uNXhfd2R0X2RyaXZlciA9IHsKKwkucHJvYmUJCT0gb3Jpb241eF93ZHRfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChvcmlvbjV4X3dkdF9yZW1vdmUpLAorCS5kcml2ZXIJCT0geworCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwkJLm5hbWUJPSAib3Jpb241eF93ZHQiLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBvcmlvbjV4X3dkdF9pbml0KHZvaWQpCit7CisJc3Bpbl9sb2NrX2luaXQoJndkdF9sb2NrKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZvcmlvbjV4X3dkdF9kcml2ZXIpOworfQorCiBzdGF0aWMgdm9pZCBfX2V4aXQgb3Jpb241eF93ZHRfZXhpdCh2b2lkKQogewotCW1pc2NfZGVyZWdpc3Rlcigmb3Jpb241eF93ZHRfbWlzY2Rldik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm9yaW9uNXhfd2R0X2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KG9yaW9uNXhfd2R0X2luaXQpOwpAQCAtMjM2LDggKzI4NSw3IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIk9yaW9uNXggUHJvY2Vzc29yIFdhdGNoZG9nIik7CiAKIG1vZHVsZV9wYXJhbShoZWFydGJlYXQsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGhlYXJ0YmVhdCwgIldhdGNoZG9nIGhlYXJ0YmVhdCBpbiBzZWNvbmRzIChkZWZhdWx0IGlzICIKLQkJCQkJX19NT0RVTEVfU1RSSU5HKFdEVF9NQVhfRFVSQVRJT04pICIpIik7CitNT0RVTEVfUEFSTV9ERVNDKGhlYXJ0YmVhdCwgIldhdGNoZG9nIGhlYXJ0YmVhdCBpbiBzZWNvbmRzIik7CiAKIG1vZHVsZV9wYXJhbShub3dheW91dCwgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0Mobm93YXlvdXQsICJXYXRjaGRvZyBjYW5ub3QgYmUgc3RvcHBlZCBvbmNlIHN0YXJ0ZWQiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvcGM4NzQxM193ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvcGM4NzQxM193ZHQuYwppbmRleCA0ODRjMjE1Li4xYTJiOTE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3BjODc0MTNfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9wYzg3NDEzX3dkdC5jCkBAIC01MzYsNyArNTM2LDggQEAKIAogCXJldCA9IG1pc2NfcmVnaXN0ZXIoJnBjODc0MTNfbWlzY2Rldik7CiAJaWYgKHJldCAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggImNhbm5vdCByZWdpc3RlciBtaXNjZGV2IG9uIG1pbm9yPSVkIChlcnI9JWQpXG4iLAorCQlwcmludGsoS0VSTl9FUlIgUEZYCisJCQkiY2Fubm90IHJlZ2lzdGVyIG1pc2NkZXYgb24gbWlub3I9JWQgKGVycj0lZClcbiIsCiAJCQlXQVRDSERPR19NSU5PUiwgcmV0KTsKIAkJdW5yZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIoJnBjODc0MTNfbm90aWZpZXIpOwogCQlyZXR1cm4gcmV0OwpAQCAtNTc0LDcgKzU3NSw4IEBACiBtb2R1bGVfaW5pdChwYzg3NDEzX2luaXQpOwogbW9kdWxlX2V4aXQocGM4NzQxM19leGl0KTsKIAotTU9EVUxFX0FVVEhPUigiU3ZlbiBBbmRlcnMgPGFuZGVyc0BhbmR1cmFzLmRlPiwgTWFyY3VzIEp1bmtlciA8anVua2VyQGFuZHVyYXMuZGU+LCIpOworTU9EVUxFX0FVVEhPUigiU3ZlbiBBbmRlcnMgPGFuZGVyc0BhbmR1cmFzLmRlPiwgIgorCQkiTWFyY3VzIEp1bmtlciA8anVua2VyQGFuZHVyYXMuZGU+LCIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJQQzg3NDEzIFdEVCBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9wY3dkLmMgYi9kcml2ZXJzL3dhdGNoZG9nL3Bjd2QuYwppbmRleCA5ZTEzMzFhLi5hYTk1MTIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3Bjd2QuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3Bjd2QuYwpAQCAtMjQsMjUgKzI0LDI1IEBACiAgKgkJdmVyc2lvbiByZXBvcnRpbmcuICBBZGRlZCByZWFkIHJvdXRpbmUgZm9yIHRlbXBlcmF0dXJlLgogICoJCVJlbW92ZWQgc29tZSBleHRyYSBkZWZpbmVzLCBhZGRlZCBhbiBhdXRvZGV0ZWN0IFJldmlzaW9uCiAgKgkJcm91dGluZS4KLSAqIDk2MTAwNiAgICAgICBSZXZpc2VkIHNvbWUgZG9jdW1lbnRhdGlvbiwgZml4ZWQgc29tZSBjb3NtZXRpYyBidWdzLiAgTWFkZQotICogICAgICAgICAgICAgIGRyaXZlcnMgdG8gcGFuaWMgdGhlIHN5c3RlbSBpZiBpdCdzIG92ZXJoZWF0aW5nIGF0IGJvb3R1cC4KKyAqIDk2MTAwNglSZXZpc2VkIHNvbWUgZG9jdW1lbnRhdGlvbiwgZml4ZWQgc29tZSBjb3NtZXRpYyBidWdzLiAgTWFkZQorICoJCWRyaXZlcnMgdG8gcGFuaWMgdGhlIHN5c3RlbSBpZiBpdCdzIG92ZXJoZWF0aW5nIGF0IGJvb3R1cC4KICAqIDk2MTExOAlDaGFuZ2VkIHNvbWUgdmVyYmlhZ2Ugb24gc29tZSBvZiB0aGUgb3V0cHV0LCB0aWRpZWQgdXAKICAqCQljb2RlIGJpdHMsIGFuZCBhZGRlZCBjb21wYXRpYmlsaXR5IHRvIDIuMS54LgotICogOTcwOTEyICAgICAgIEVuYWJsZWQgYm9hcmQgb24gb3BlbiBhbmQgZGlzYWJsZSBvbiBjbG9zZS4KKyAqIDk3MDkxMglFbmFibGVkIGJvYXJkIG9uIG9wZW4gYW5kIGRpc2FibGUgb24gY2xvc2UuCiAgKiA5NzExMDcJVG9vayBhY2NvdW50IG9mIHJlY2VudCBWRlMgY2hhbmdlcyAoYnJva2UgcmVhZCkuCi0gKiA5NzEyMTAgICAgICAgRGlzYWJsZSBib2FyZCBvbiBpbml0aWFsaXNhdGlvbiBpbiBjYXNlIGJvYXJkIGFscmVhZHkgdGlja2luZy4KLSAqIDk3MTIyMiAgICAgICBDaGFuZ2VkIG9wZW4vY2xvc2UgZm9yIHRlbXBlcmF0dXJlIGhhbmRsaW5nCi0gKiAgICAgICAgICAgICAgTWljaGFlbCBNZXNrZXMgPG1lc2tlc0BkZWJpYW4ub3JnPi4KLSAqIDk4MDExMiAgICAgICBVc2VkIG1pbm9yIG51bWJlcnMgZnJvbSBpbmNsdWRlL2xpbnV4L21pc2NkZXZpY2UuaAotICogOTkwNDAzICAgICAgIENsZWFyIHJlc2V0IHN0YXR1cyBhZnRlciByZWFkaW5nIGNvbnRyb2wgc3RhdHVzIHJlZ2lzdGVyIGluCi0gKiAgICAgICAgICAgICAgcGN3ZF9zaG93cHJldnN0YXRlKCkuIFtNYXJjIEJvdWNoZXIgPG1hcmNAbWJzaS5jYT5dCisgKiA5NzEyMTAJRGlzYWJsZSBib2FyZCBvbiBpbml0aWFsaXNhdGlvbiBpbiBjYXNlIGJvYXJkIGFscmVhZHkgdGlja2luZy4KKyAqIDk3MTIyMglDaGFuZ2VkIG9wZW4vY2xvc2UgZm9yIHRlbXBlcmF0dXJlIGhhbmRsaW5nCisgKgkJTWljaGFlbCBNZXNrZXMgPG1lc2tlc0BkZWJpYW4ub3JnPi4KKyAqIDk4MDExMglVc2VkIG1pbm9yIG51bWJlcnMgZnJvbSBpbmNsdWRlL2xpbnV4L21pc2NkZXZpY2UuaAorICogOTkwNDAzCUNsZWFyIHJlc2V0IHN0YXR1cyBhZnRlciByZWFkaW5nIGNvbnRyb2wgc3RhdHVzIHJlZ2lzdGVyIGluCisgKgkJcGN3ZF9zaG93cHJldnN0YXRlKCkuIFtNYXJjIEJvdWNoZXIgPG1hcmNAbWJzaS5jYT5dCiAgKiA5OTA2MDUJTWFkZSBjaGFuZ2VzIHRvIGNvZGUgdG8gc3VwcG9ydCBGaXJtd2FyZSAxLjIyYSwgYWRkZWQKICAqCQlmYWlybHkgdXNlbGVzcyBwcm9jIGVudHJ5LgogICogOTkwNjEwCXJlbW92ZWQgc2FpZCB1c2VsZXNzIHByb2MgY29kZSBmb3IgdGhlIG1lcmdlIDxhbGFuPgogICogMDAwNDAzCVJlbW92ZWQgbGFzdCB0cmFjZXMgb2YgcHJvYyBjb2RlLiA8ZGF2ZWo+CiAgKiAwMTEyMTQJQWRkZWQgbm93YXlvdXQgbW9kdWxlIG9wdGlvbiB0byBvdmVycmlkZQogICoJCUNPTkZJR19XQVRDSERPR19OT1dBWU9VVCA8TWF0dF9Eb21zY2hAZGVsbC5jb20+Ci0gKiAgICAgICAgICAgICAgQWRkZWQgdGltZW91dCBtb2R1bGUgb3B0aW9uIHRvIG92ZXJyaWRlIGRlZmF1bHQKKyAqCQlBZGRlZCB0aW1lb3V0IG1vZHVsZSBvcHRpb24gdG8gb3ZlcnJpZGUgZGVmYXVsdAogICovCiAKIC8qCkBAIC03Niw4ICs3Niw3IEBACiAjZGVmaW5lIFdBVENIRE9HX0RSSVZFUl9OQU1FICJJU0EtUEMgV2F0Y2hkb2ciCiAjZGVmaW5lIFdBVENIRE9HX05BTUUgInBjd2QiCiAjZGVmaW5lIFBGWCBXQVRDSERPR19OQU1FICI6ICIKLSNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gV0FUQ0hET0dfRFJJVkVSX05BTUUgIiBkcml2ZXIsIHYiIFdBVENIRE9HX1ZFUlNJT04gIiAoIiBXQVRDSERPR19EQVRFICIpXG4iCi0jZGVmaW5lIFdEX1ZFUiBXQVRDSERPR19WRVJTSU9OICIgKCIgV0FUQ0hET0dfREFURSAiKSIKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gV0FUQ0hET0dfRFJJVkVSX05BTUUgIiBkcml2ZXIsIHYiIFdBVENIRE9HX1ZFUlNJT04gIlxuIgogCiAvKgogICogSXQgc2hvdWxkIGJlIG5vdGVkIHRoYXQgUENXRF9SRVZJU0lPTl9CIHdhcyByZW1vdmVkIGJlY2F1c2UgQSBhbmQgQgpAQCAtMjAwLDcgKzE5OSw5IEBACiAjZGVmaW5lIFdBVENIRE9HX0hFQVJUQkVBVCAwCiBzdGF0aWMgaW50IGhlYXJ0YmVhdCA9IFdBVENIRE9HX0hFQVJUQkVBVDsKIG1vZHVsZV9wYXJhbShoZWFydGJlYXQsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGhlYXJ0YmVhdCwgIldhdGNoZG9nIGhlYXJ0YmVhdCBpbiBzZWNvbmRzLiAoMiA8PSBoZWFydGJlYXQgPD0gNzIwMCBvciAwPWRlbGF5LXRpbWUgZnJvbSBkaXAtc3dpdGNoZXMsIGRlZmF1bHQ9IiBfX01PRFVMRV9TVFJJTkcoV0FUQ0hET0dfSEVBUlRCRUFUKSAiKSIpOworTU9EVUxFX1BBUk1fREVTQyhoZWFydGJlYXQsICJXYXRjaGRvZyBoZWFydGJlYXQgaW4gc2Vjb25kcy4gIgorCSIoMiA8PSBoZWFydGJlYXQgPD0gNzIwMCBvciAwPWRlbGF5LXRpbWUgZnJvbSBkaXAtc3dpdGNoZXMsIGRlZmF1bHQ9IgorCQkJCV9fTU9EVUxFX1NUUklORyhXQVRDSERPR19IRUFSVEJFQVQpICIpIik7CiAKIHN0YXRpYyBpbnQgbm93YXlvdXQgPSBXQVRDSERPR19OT1dBWU9VVDsKIG1vZHVsZV9wYXJhbShub3dheW91dCwgaW50LCAwKTsKQEAgLTIzOSw3ICsyNDAsOCBAQAogCX0KIAogCWlmIChkZWJ1ZyA+PSBERUJVRykKLQkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICJyZWNlaXZlZCBmb2xsb3dpbmcgZGF0YSBmb3IgY21kPTB4JTAyeDogcG9ydDA9MHglMDJ4IGxhc3RfcG9ydDA9MHglMDJ4XG4iLAorCQlwcmludGsoS0VSTl9ERUJVRyBQRlggInJlY2VpdmVkIGZvbGxvd2luZyBkYXRhIGZvciAiCisJCQkiY21kPTB4JTAyeDogcG9ydDA9MHglMDJ4IGxhc3RfcG9ydDA9MHglMDJ4XG4iLAogCQkJY21kLCBwb3J0MCwgbGFzdF9wb3J0MCk7CiAKIAlyZXR1cm4gcG9ydDA7CkBAIC0zMzksMTAgKzM0MSwxMiBAQAogCQkJCQkJCXBjd2RfcHJpdmF0ZS5pb19hZGRyKTsKIAllbHNlIGlmIChwY3dkX3ByaXZhdGUucmV2aXNpb24gPT0gUENXRF9SRVZJU0lPTl9DKSB7CiAJCXBjd2RfZ2V0X2Zpcm13YXJlKCk7Ci0JCXByaW50ayhLRVJOX0lORk8gUEZYICJJU0EtUEMgV2F0Y2hkb2cgKFJFVi5DKSBkZXRlY3RlZCBhdCBwb3J0IDB4JTA0eCAoRmlybXdhcmUgdmVyc2lvbjogJXMpXG4iLAorCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiSVNBLVBDIFdhdGNoZG9nIChSRVYuQykgZGV0ZWN0ZWQgYXQgcG9ydCAiCisJCQkiMHglMDR4IChGaXJtd2FyZSB2ZXJzaW9uOiAlcylcbiIsCiAJCQlwY3dkX3ByaXZhdGUuaW9fYWRkciwgcGN3ZF9wcml2YXRlLmZ3X3Zlcl9zdHIpOwogCQlvcHRpb25fc3dpdGNoZXMgPSBwY3dkX2dldF9vcHRpb25fc3dpdGNoZXMoKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIk9wdGlvbiBzd2l0Y2hlcyAoMHglMDJ4KTogVGVtcGVyYXR1cmUgUmVzZXQgRW5hYmxlPSVzLCBQb3dlciBPbiBEZWxheT0lc1xuIiwKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIk9wdGlvbiBzd2l0Y2hlcyAoMHglMDJ4KTogIgorCQkJIlRlbXBlcmF0dXJlIFJlc2V0IEVuYWJsZT0lcywgUG93ZXIgT24gRGVsYXk9JXNcbiIsCiAJCQlvcHRpb25fc3dpdGNoZXMsCiAJCQkoKG9wdGlvbl9zd2l0Y2hlcyAmIDB4MTApID8gIk9OIiA6ICJPRkYiKSwKIAkJCSgob3B0aW9uX3N3aXRjaGVzICYgMHgwOCkgPyAiT04iIDogIk9GRiIpKTsKQEAgLTM1OCw3ICszNjIsOCBAQAogCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiVGVtcGVyYXR1cmUgT3B0aW9uIERldGVjdGVkXG4iKTsKIAogCWlmIChwY3dkX3ByaXZhdGUuYm9vdF9zdGF0dXMgJiBXRElPRl9DQVJEUkVTRVQpCi0JCXByaW50ayhLRVJOX0lORk8gUEZYICJQcmV2aW91cyByZWJvb3Qgd2FzIGNhdXNlZCBieSB0aGUgY2FyZFxuIik7CisJCXByaW50ayhLRVJOX0lORk8gUEZYCisJCQkiUHJldmlvdXMgcmVib290IHdhcyBjYXVzZWQgYnkgdGhlIGNhcmRcbiIpOwogCiAJaWYgKHBjd2RfcHJpdmF0ZS5ib290X3N0YXR1cyAmIFdESU9GX09WRVJIRUFUKSB7CiAJCXByaW50ayhLRVJOX0VNRVJHIFBGWApAQCAtODcxLDcgKzg3Niw3IEBACiAJY2FyZHNfZm91bmQrKzsKIAlpZiAoY2FyZHNfZm91bmQgPT0gMSkKIAkJcHJpbnRrKEtFUk5fSU5GTyBQRlggInYlcyBLZW4gSG9sbGlzIChrZW5qaUBiaXRnYXRlLmNvbSlcbiIsCi0JCQkJCQkJCVdEX1ZFUik7CisJCQkJCQkJV0FUQ0hET0dfVkVSU0lPTik7CiAKIAlpZiAoY2FyZHNfZm91bmQgPiAxKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggIlRoaXMgZHJpdmVyIG9ubHkgc3VwcG9ydHMgMSBkZXZpY2VcbiIpOwpAQCAtMTAyNiw3ICsxMDMxLDggQEAKIG1vZHVsZV9pbml0KHBjd2RfaW5pdF9tb2R1bGUpOwogbW9kdWxlX2V4aXQocGN3ZF9jbGVhbnVwX21vZHVsZSk7CiAKLU1PRFVMRV9BVVRIT1IoIktlbiBIb2xsaXMgPGtlbmppQGJpdGdhdGUuY29tPiwgV2ltIFZhbiBTZWJyb2VjayA8d2ltQGlndWFuYS5iZT4iKTsKK01PRFVMRV9BVVRIT1IoIktlbiBIb2xsaXMgPGtlbmppQGJpdGdhdGUuY29tPiwgIgorCQkiV2ltIFZhbiBTZWJyb2VjayA8d2ltQGlndWFuYS5iZT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiQmVya3NoaXJlIElTQS1QQyBXYXRjaGRvZyBkcml2ZXIiKTsKIE1PRFVMRV9WRVJTSU9OKFdBVENIRE9HX1ZFUlNJT04pOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9wY3dkX3BjaS5jIGIvZHJpdmVycy93YXRjaGRvZy9wY3dkX3BjaS5jCmluZGV4IDVkNzY0MjIuLjY5OGY1MWJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3Bjd2RfcGNpLmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9wY3dkX3BjaS5jCkBAIC0yNCw3ICsyNCw4IEBACiAgKglBIGJlbGxzIGFuZCB3aGlzdGxlcyBkcml2ZXIgaXMgYXZhaWxhYmxlIGZyb206CiAgKglodHRwOi8vd3d3Lmtlcm5lbC5vcmcvcHViL2xpbnV4L2tlcm5lbC9wZW9wbGUvd2ltL3Bjd2QvcGN3ZF9wY2kvCiAgKgotICoJTW9yZSBpbmZvIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmJlcmtwcm9kLmNvbS8gb3IgaHR0cDovL3d3dy5wY3dhdGNoZG9nLmNvbS8KKyAqCU1vcmUgaW5mbyBhdmFpbGFibGUgYXQKKyAqCWh0dHA6Ly93d3cuYmVya3Byb2QuY29tLyBvciBodHRwOi8vd3d3LnBjd2F0Y2hkb2cuY29tLwogICovCiAKIC8qCkBAIC01MSwxMSArNTIsMTAgQEAKIAogLyogTW9kdWxlIGFuZCB2ZXJzaW9uIGluZm9ybWF0aW9uICovCiAjZGVmaW5lIFdBVENIRE9HX1ZFUlNJT04gIjEuMDMiCi0jZGVmaW5lIFdBVENIRE9HX0RBVEUgIjIxIEphbiAyMDA3IgogI2RlZmluZSBXQVRDSERPR19EUklWRVJfTkFNRSAiUENJLVBDIFdhdGNoZG9nIgogI2RlZmluZSBXQVRDSERPR19OQU1FICJwY3dkX3BjaSIKICNkZWZpbmUgUEZYIFdBVENIRE9HX05BTUUgIjogIgotI2RlZmluZSBEUklWRVJfVkVSU0lPTiBXQVRDSERPR19EUklWRVJfTkFNRSAiIGRyaXZlciwgdiIgV0FUQ0hET0dfVkVSU0lPTiAiICgiIFdBVENIRE9HX0RBVEUgIilcbiIKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gV0FUQ0hET0dfRFJJVkVSX05BTUUgIiBkcml2ZXIsIHYiIFdBVENIRE9HX1ZFUlNJT04gIlxuIgogCiAvKiBTdHVmZiBmb3IgdGhlIFBDSSBJRCdzICAqLwogI2lmbmRlZiBQQ0lfVkVORE9SX0lEX1FVSUNLTE9HSUMKQEAgLTc2LDcgKzc2LDggQEAKICNkZWZpbmUgV0RfUENJX1RUUlAJCTB4MDQJLyogVGVtcGVyYXR1cmUgVHJpcCBzdGF0dXMgKi8KICNkZWZpbmUgV0RfUENJX1JMMkEJCTB4MDgJLyogUmVsYXkgMiBBY3RpdmUgKi8KICNkZWZpbmUgV0RfUENJX1JMMUEJCTB4MTAJLyogUmVsYXkgMSBBY3RpdmUgKi8KLSNkZWZpbmUgV0RfUENJX1IyRFMJCTB4NDAJLyogUmVsYXkgMiBEaXNhYmxlIFRlbXBlcmF0dXJlLXRyaXAvcmVzZXQgKi8KKyNkZWZpbmUgV0RfUENJX1IyRFMJCTB4NDAJLyogUmVsYXkgMiBEaXNhYmxlIFRlbXBlcmF0dXJlLXRyaXAgLworCQkJCQkJCQkJcmVzZXQgKi8KICNkZWZpbmUgV0RfUENJX1JMWTIJCTB4ODAJLyogQWN0aXZhdGUgUmVsYXkgMiBvbiB0aGUgYm9hcmQgKi8KIC8qIFBvcnQgMiA6IENvbnRyb2wgU3RhdHVzICMyICovCiAjZGVmaW5lIFdEX1BDSV9XRElTCQkweDEwCS8qIFdhdGNoZG9nIERpc2FibGUgKi8KQEAgLTExNCwxMiArMTE1LDE4IEBACiBzdGF0aWMgaW50IHRlbXBfcGFuaWM7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBpc19hY3RpdmU7CiBzdGF0aWMgY2hhciBleHBlY3RfcmVsZWFzZTsKLXN0YXRpYyBzdHJ1Y3QgewkJCQkvKiB0aGlzIGlzIHByaXZhdGUgZGF0YSBmb3IgZWFjaCBQQ0ktUEMgd2F0Y2hkb2cgY2FyZCAqLwotCWludCBzdXBwb3J0c190ZW1wOwkJLyogV2V0aGVyIG9yIG5vdCB0aGUgY2FyZCBoYXMgYSB0ZW1wZXJhdHVyZSBkZXZpY2UgKi8KLQlpbnQgYm9vdF9zdGF0dXM7CQkvKiBUaGUgY2FyZCdzIGJvb3Qgc3RhdHVzICovCi0JdW5zaWduZWQgbG9uZyBpb19hZGRyOwkJLyogVGhlIGNhcmRzIEkvTyBhZGRyZXNzICovCi0Jc3BpbmxvY2tfdCBpb19sb2NrOwkJLyogdGhlIGxvY2sgZm9yIGlvIG9wZXJhdGlvbnMgKi8KLQlzdHJ1Y3QgcGNpX2RldiAqcGRldjsJCS8qIHRoZSBQQ0ktZGV2aWNlICovCisvKiB0aGlzIGlzIHByaXZhdGUgZGF0YSBmb3IgZWFjaCBQQ0ktUEMgd2F0Y2hkb2cgY2FyZCAqLworc3RhdGljIHN0cnVjdCB7CisJLyogV2V0aGVyIG9yIG5vdCB0aGUgY2FyZCBoYXMgYSB0ZW1wZXJhdHVyZSBkZXZpY2UgKi8KKwlpbnQgc3VwcG9ydHNfdGVtcDsKKwkvKiBUaGUgY2FyZCdzIGJvb3Qgc3RhdHVzICovCisJaW50IGJvb3Rfc3RhdHVzOworCS8qIFRoZSBjYXJkcyBJL08gYWRkcmVzcyAqLworCXVuc2lnbmVkIGxvbmcgaW9fYWRkcjsKKwkvKiB0aGUgbG9jayBmb3IgaW8gb3BlcmF0aW9ucyAqLworCXNwaW5sb2NrX3QgaW9fbG9jazsKKwkvKiB0aGUgUENJLWRldmljZSAqLworCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwogfSBwY2lwY3dkX3ByaXZhdGU7CiAKIC8qIG1vZHVsZSBwYXJhbWV0ZXJzICovCkBAIC0xMzAsMTQgKzEzNywxOCBAQAogbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGxldmVsOiAwPVF1aWV0LCAxPVZlcmJvc2UsIDI9RGVidWcgKGRlZmF1bHQ9MCkiKTsKIAotI2RlZmluZSBXQVRDSERPR19IRUFSVEJFQVQgMAkvKiBkZWZhdWx0IGhlYXJ0YmVhdCA9IGRlbGF5LXRpbWUgZnJvbSBkaXAtc3dpdGNoZXMgKi8KKyNkZWZpbmUgV0FUQ0hET0dfSEVBUlRCRUFUIDAJLyogZGVmYXVsdCBoZWFydGJlYXQgPQorCQkJCQkJZGVsYXktdGltZSBmcm9tIGRpcC1zd2l0Y2hlcyAqLwogc3RhdGljIGludCBoZWFydGJlYXQgPSBXQVRDSERPR19IRUFSVEJFQVQ7CiBtb2R1bGVfcGFyYW0oaGVhcnRiZWF0LCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhoZWFydGJlYXQsICJXYXRjaGRvZyBoZWFydGJlYXQgaW4gc2Vjb25kcy4gKDA8aGVhcnRiZWF0PDY1NTM2IG9yIDA9ZGVsYXktdGltZSBmcm9tIGRpcC1zd2l0Y2hlcywgZGVmYXVsdD0iIF9fTU9EVUxFX1NUUklORyhXQVRDSERPR19IRUFSVEJFQVQpICIpIik7CitNT0RVTEVfUEFSTV9ERVNDKGhlYXJ0YmVhdCwgIldhdGNoZG9nIGhlYXJ0YmVhdCBpbiBzZWNvbmRzLiAiCisJIigwPGhlYXJ0YmVhdDw2NTUzNiBvciAwPWRlbGF5LXRpbWUgZnJvbSBkaXAtc3dpdGNoZXMsIGRlZmF1bHQ9IgorCQkJCV9fTU9EVUxFX1NUUklORyhXQVRDSERPR19IRUFSVEJFQVQpICIpIik7CiAKIHN0YXRpYyBpbnQgbm93YXlvdXQgPSBXQVRDSERPR19OT1dBWU9VVDsKIG1vZHVsZV9wYXJhbShub3dheW91dCwgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0Mobm93YXlvdXQsICJXYXRjaGRvZyBjYW5ub3QgYmUgc3RvcHBlZCBvbmNlIHN0YXJ0ZWQgKGRlZmF1bHQ9IiBfX01PRFVMRV9TVFJJTkcoV0FUQ0hET0dfTk9XQVlPVVQpICIpIik7CitNT0RVTEVfUEFSTV9ERVNDKG5vd2F5b3V0LCAiV2F0Y2hkb2cgY2Fubm90IGJlIHN0b3BwZWQgb25jZSBzdGFydGVkIChkZWZhdWx0PSIKKwkJCQkJX19NT0RVTEVfU1RSSU5HKFdBVENIRE9HX05PV0FZT1VUKSAiKSIpOwogCiAvKgogICoJSW50ZXJuYWwgZnVuY3Rpb25zCkBAIC0xNDgsOCArMTU5LDggQEAKIAlpbnQgZ290X3Jlc3BvbnNlLCBjb3VudDsKIAogCWlmIChkZWJ1ZyA+PSBERUJVRykKLQkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICJzZW5kaW5nIGZvbGxvd2luZyBkYXRhIGNtZD0weCUwMnggbXNiPTB4JTAyeCBsc2I9MHglMDJ4XG4iLAotCQljbWQsICptc2IsICpsc2IpOworCQlwcmludGsoS0VSTl9ERUJVRyBQRlggInNlbmRpbmcgZm9sbG93aW5nIGRhdGEgIgorCQkiY21kPTB4JTAyeCBtc2I9MHglMDJ4IGxzYj0weCUwMnhcbiIsIGNtZCwgKm1zYiwgKmxzYik7CiAKIAlzcGluX2xvY2soJnBjaXBjd2RfcHJpdmF0ZS5pb19sb2NrKTsKIAkvKiBJZiBhIGNvbW1hbmQgcmVxdWlyZXMgZGF0YSBpdCBzaG91bGQgYmUgd3JpdHRlbiBmaXJzdC4KQEAgLTE2NiwxNyArMTc3LDIwIEBACiAJICogdGhlIFdSU1AgYml0IGluIHBvcnQgMiBhbmQgZ2l2ZSBpdCBhIG1heC4gdGltZW91dCBvZgogCSAqIFBDSV9DT01NQU5EX1RJTUVPVVQgdG8gcHJvY2VzcyAqLwogCWdvdF9yZXNwb25zZSA9IGluYl9wKHBjaXBjd2RfcHJpdmF0ZS5pb19hZGRyICsgMikgJiBXRF9QQ0lfV1JTUDsKLQlmb3IgKGNvdW50ID0gMDsgKGNvdW50IDwgUENJX0NPTU1BTkRfVElNRU9VVCkgJiYgKCFnb3RfcmVzcG9uc2UpOyBjb3VudCsrKSB7CisJZm9yIChjb3VudCA9IDA7IChjb3VudCA8IFBDSV9DT01NQU5EX1RJTUVPVVQpICYmICghZ290X3Jlc3BvbnNlKTsKKwkJCQkJCQkJY291bnQrKykgewogCQltZGVsYXkoMSk7CiAJCWdvdF9yZXNwb25zZSA9IGluYl9wKHBjaXBjd2RfcHJpdmF0ZS5pb19hZGRyICsgMikgJiBXRF9QQ0lfV1JTUDsKIAl9CiAKIAlpZiAoZGVidWcgPj0gREVCVUcpIHsKIAkJaWYgKGdvdF9yZXNwb25zZSkgewotCQkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICJ0aW1lIHRvIHByb2Nlc3MgY29tbWFuZCB3YXM6ICVkIG1zXG4iLAorCQkJcHJpbnRrKEtFUk5fREVCVUcgUEZYCisJCQkJInRpbWUgdG8gcHJvY2VzcyBjb21tYW5kIHdhczogJWQgbXNcbiIsCiAJCQkJY291bnQpOwogCQl9IGVsc2UgewotCQkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICJjYXJkIGRpZCBub3QgcmVzcG9uZCBvbiBjb21tYW5kIVxuIik7CisJCQlwcmludGsoS0VSTl9ERUJVRyBQRlgKKwkJCQkiY2FyZCBkaWQgbm90IHJlc3BvbmQgb24gY29tbWFuZCFcbiIpOwogCQl9CiAJfQogCkBAIC0xODksNyArMjAzLDggQEAKIAkJaW5iX3AocGNpcGN3ZF9wcml2YXRlLmlvX2FkZHIgKyA2KTsKIAogCQlpZiAoZGVidWcgPj0gREVCVUcpCi0JCQlwcmludGsoS0VSTl9ERUJVRyBQRlggInJlY2VpdmVkIGZvbGxvd2luZyBkYXRhIGZvciBjbWQ9MHglMDJ4OiBtc2I9MHglMDJ4IGxzYj0weCUwMnhcbiIsCisJCQlwcmludGsoS0VSTl9ERUJVRyBQRlggInJlY2VpdmVkIGZvbGxvd2luZyBkYXRhIGZvciAiCisJCQkJImNtZD0weCUwMng6IG1zYj0weCUwMnggbHNiPTB4JTAyeFxuIiwKIAkJCQljbWQsICptc2IsICpsc2IpOwogCX0KIApAQCAtMjE4LDcgKzIzMyw4IEBACiAJY2hhciBmd192ZXJfc3RyWzIwXTsJCS8qIFRoZSBjYXJkcyBmaXJtd2FyZSB2ZXJzaW9uICovCiAJaW50IG9wdGlvbl9zd2l0Y2hlczsKIAotCWdvdF9md19yZXYgPSBzZW5kX2NvbW1hbmQoQ01EX0dFVF9GSVJNV0FSRV9WRVJTSU9OLCAmZndfcmV2X21ham9yLCAmZndfcmV2X21pbm9yKTsKKwlnb3RfZndfcmV2ID0gc2VuZF9jb21tYW5kKENNRF9HRVRfRklSTVdBUkVfVkVSU0lPTiwgJmZ3X3Jldl9tYWpvciwKKwkJCQkJCQkJJmZ3X3Jldl9taW5vcik7CiAJaWYgKGdvdF9md19yZXYpCiAJCXNwcmludGYoZndfdmVyX3N0ciwgIiV1LiUwMnUiLCBmd19yZXZfbWFqb3IsIGZ3X3Jldl9taW5vcik7CiAJZWxzZQpAQCAtMjI3LDIzICsyNDMsMjcgQEAKIAkvKiBHZXQgc3dpdGNoIHNldHRpbmdzICovCiAJb3B0aW9uX3N3aXRjaGVzID0gcGNpcGN3ZF9nZXRfb3B0aW9uX3N3aXRjaGVzKCk7CiAKLQlwcmludGsoS0VSTl9JTkZPIFBGWCAiRm91bmQgY2FyZCBhdCBwb3J0IDB4JTA0eCAoRmlybXdhcmU6ICVzKSAlcyB0ZW1wIG9wdGlvblxuIiwKKwlwcmludGsoS0VSTl9JTkZPIFBGWCAiRm91bmQgY2FyZCBhdCBwb3J0ICIKKwkJIjB4JTA0eCAoRmlybXdhcmU6ICVzKSAlcyB0ZW1wIG9wdGlvblxuIiwKIAkJKGludCkgcGNpcGN3ZF9wcml2YXRlLmlvX2FkZHIsIGZ3X3Zlcl9zdHIsCiAJCShwY2lwY3dkX3ByaXZhdGUuc3VwcG9ydHNfdGVtcCA/ICJ3aXRoIiA6ICJ3aXRob3V0IikpOwogCi0JcHJpbnRrKEtFUk5fSU5GTyBQRlggIk9wdGlvbiBzd2l0Y2hlcyAoMHglMDJ4KTogVGVtcGVyYXR1cmUgUmVzZXQgRW5hYmxlPSVzLCBQb3dlciBPbiBEZWxheT0lc1xuIiwKKwlwcmludGsoS0VSTl9JTkZPIFBGWCAiT3B0aW9uIHN3aXRjaGVzICgweCUwMngpOiAiCisJCSJUZW1wZXJhdHVyZSBSZXNldCBFbmFibGU9JXMsIFBvd2VyIE9uIERlbGF5PSVzXG4iLAogCQlvcHRpb25fc3dpdGNoZXMsCiAJCSgob3B0aW9uX3N3aXRjaGVzICYgMHgxMCkgPyAiT04iIDogIk9GRiIpLAogCQkoKG9wdGlvbl9zd2l0Y2hlcyAmIDB4MDgpID8gIk9OIiA6ICJPRkYiKSk7CiAKIAlpZiAocGNpcGN3ZF9wcml2YXRlLmJvb3Rfc3RhdHVzICYgV0RJT0ZfQ0FSRFJFU0VUKQotCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiUHJldmlvdXMgcmVzZXQgd2FzIGNhdXNlZCBieSB0aGUgV2F0Y2hkb2cgY2FyZFxuIik7CisJCXByaW50ayhLRVJOX0lORk8gUEZYCisJCQkiUHJldmlvdXMgcmVzZXQgd2FzIGNhdXNlZCBieSB0aGUgV2F0Y2hkb2cgY2FyZFxuIik7CiAKIAlpZiAocGNpcGN3ZF9wcml2YXRlLmJvb3Rfc3RhdHVzICYgV0RJT0ZfT1ZFUkhFQVQpCiAJCXByaW50ayhLRVJOX0lORk8gUEZYICJDYXJkIHNlbnNlZCBhIENQVSBPdmVyaGVhdFxuIik7CiAKIAlpZiAocGNpcGN3ZF9wcml2YXRlLmJvb3Rfc3RhdHVzID09IDApCi0JCXByaW50ayhLRVJOX0lORk8gUEZYICJObyBwcmV2aW91cyB0cmlwIGRldGVjdGVkIC0gQ29sZCBib290IG9yIHJlc2V0XG4iKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlgKKwkJCSJObyBwcmV2aW91cyB0cmlwIGRldGVjdGVkIC0gQ29sZCBib290IG9yIHJlc2V0XG4iKTsKIH0KIAogc3RhdGljIGludCBwY2lwY3dkX3N0YXJ0KHZvaWQpCkBAIC0yODMsNyArMzAzLDggQEAKIAlzcGluX3VubG9jaygmcGNpcGN3ZF9wcml2YXRlLmlvX2xvY2spOwogCiAJaWYgKCEoc3RhdF9yZWcgJiBXRF9QQ0lfV0RJUykpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2FyZCBkaWQgbm90IGFja25vd2xlZGdlIGRpc2FibGUgYXR0ZW1wdFxuIik7CisJCXByaW50ayhLRVJOX0VSUiBQRlgKKwkJCSJDYXJkIGRpZCBub3QgYWNrbm93bGVkZ2UgZGlzYWJsZSBhdHRlbXB0XG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtMzY0LDcgKzM4NSw4IEBACiAJfQogCiAJLyogY2xlYXIgdHJpcCBzdGF0dXMgJiBMRUQgYW5kIGtlZXAgbW9kZSBvZiByZWxheSAyICovCi0Jb3V0Yl9wKChjb250cm9sX3N0YXR1cyAmIFdEX1BDSV9SMkRTKSB8IFdEX1BDSV9XVFJQLCBwY2lwY3dkX3ByaXZhdGUuaW9fYWRkciArIDEpOworCW91dGJfcCgoY29udHJvbF9zdGF0dXMgJiBXRF9QQ0lfUjJEUykgfCBXRF9QQ0lfV1RSUCwKKwkJCQkJCXBjaXBjd2RfcHJpdmF0ZS5pb19hZGRyICsgMSk7CiAKIAkvKiBjbGVhciByZXNldCBjb3VudGVyICovCiAJbXNiID0gMDsKQEAgLTQzNyw3ICs0NTksOCBAQAogCQkJICogZml2ZSBtb250aHMgYWdvLi4uICovCiAJCQlleHBlY3RfcmVsZWFzZSA9IDA7CiAKLQkJCS8qIHNjYW4gdG8gc2VlIHdoZXRoZXIgb3Igbm90IHdlIGdvdCB0aGUgbWFnaWMgY2hhcmFjdGVyICovCisJCQkvKiBzY2FuIHRvIHNlZSB3aGV0aGVyIG9yIG5vdCB3ZSBnb3QgdGhlCisJCQkgKiBtYWdpYyBjaGFyYWN0ZXIgKi8KIAkJCWZvciAoaSA9IDA7IGkgIT0gbGVuOyBpKyspIHsKIAkJCQljaGFyIGM7CiAJCQkJaWYgKGdldF91c2VyKGMsIGRhdGEgKyBpKSkKQEAgLTUzMSw3ICs1NTQsNyBAQAogCQkJcmV0dXJuIC1FRkFVTFQ7CiAKIAkJaWYgKHBjaXBjd2Rfc2V0X2hlYXJ0YmVhdChuZXdfaGVhcnRiZWF0KSkKLQkJICAgIHJldHVybiAtRUlOVkFMOworCQkJcmV0dXJuIC1FSU5WQUw7CiAKIAkJcGNpcGN3ZF9rZWVwYWxpdmUoKTsKIAkJLyogRmFsbCAqLwpAQCAtNTYwLDcgKzU4Myw4IEBACiAJLyogL2Rldi93YXRjaGRvZyBjYW4gb25seSBiZSBvcGVuZWQgb25jZSAqLwogCWlmICh0ZXN0X2FuZF9zZXRfYml0KDAsICZpc19hY3RpdmUpKSB7CiAJCWlmIChkZWJ1ZyA+PSBWRVJCT1NFKQotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQXR0ZW1wdCB0byBvcGVuIGFscmVhZHkgb3BlbmVkIGRldmljZS5cbiIpOworCQkJcHJpbnRrKEtFUk5fRVJSIFBGWAorCQkJCSJBdHRlbXB0IHRvIG9wZW4gYWxyZWFkeSBvcGVuZWQgZGV2aWNlLlxuIik7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCkBAIC01NzgsNyArNjAyLDggQEAKIAlpZiAoZXhwZWN0X3JlbGVhc2UgPT0gNDIpIHsKIAkJcGNpcGN3ZF9zdG9wKCk7CiAJfSBlbHNlIHsKLQkJcHJpbnRrKEtFUk5fQ1JJVCBQRlggIlVuZXhwZWN0ZWQgY2xvc2UsIG5vdCBzdG9wcGluZyB3YXRjaGRvZyFcbiIpOworCQlwcmludGsoS0VSTl9DUklUIFBGWAorCQkJIlVuZXhwZWN0ZWQgY2xvc2UsIG5vdCBzdG9wcGluZyB3YXRjaGRvZyFcbiIpOwogCQlwY2lwY3dkX2tlZXBhbGl2ZSgpOwogCX0KIAlleHBlY3RfcmVsZWFzZSA9IDA7CkBAIC02MjEsNyArNjQ2LDggQEAKICAqCU5vdGlmeSBzeXN0ZW0KICAqLwogCi1zdGF0aWMgaW50IHBjaXBjd2Rfbm90aWZ5X3N5cyhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsIHVuc2lnbmVkIGxvbmcgY29kZSwgdm9pZCAqdW51c2VkKQorc3RhdGljIGludCBwY2lwY3dkX25vdGlmeV9zeXMoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIGNvZGUsCisJCQkJCQkJCXZvaWQgKnVudXNlZCkKIHsKIAlpZiAoY29kZSA9PSBTWVNfRE9XTiB8fCBjb2RlID09IFNZU19IQUxUKQogCQlwY2lwY3dkX3N0b3AoKTsJLyogVHVybiB0aGUgV0RUIG9mZiAqLwpAQCAtNzIyLDM0ICs3NDgsMzggQEAKIAogCS8qIElmIGhlYXJ0YmVhdCA9IDAgdGhlbiB3ZSB1c2UgdGhlIGhlYXJ0YmVhdCBmcm9tIHRoZSBkaXAtc3dpdGNoZXMgKi8KIAlpZiAoaGVhcnRiZWF0ID09IDApCi0JCWhlYXJ0YmVhdCA9IGhlYXJ0YmVhdF90YmxbKHBjaXBjd2RfZ2V0X29wdGlvbl9zd2l0Y2hlcygpICYgMHgwNyldOworCQloZWFydGJlYXQgPQorCQkJaGVhcnRiZWF0X3RibFsocGNpcGN3ZF9nZXRfb3B0aW9uX3N3aXRjaGVzKCkgJiAweDA3KV07CiAKLQkvKiBDaGVjayB0aGF0IHRoZSBoZWFydGJlYXQgdmFsdWUgaXMgd2l0aGluIGl0J3MgcmFuZ2UgOyBpZiBub3QgcmVzZXQgdG8gdGhlIGRlZmF1bHQgKi8KKwkvKiBDaGVjayB0aGF0IHRoZSBoZWFydGJlYXQgdmFsdWUgaXMgd2l0aGluIGl0J3MgcmFuZ2UgOworCSAqIGlmIG5vdCByZXNldCB0byB0aGUgZGVmYXVsdCAqLwogCWlmIChwY2lwY3dkX3NldF9oZWFydGJlYXQoaGVhcnRiZWF0KSkgewogCQlwY2lwY3dkX3NldF9oZWFydGJlYXQoV0FUQ0hET0dfSEVBUlRCRUFUKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggImhlYXJ0YmVhdCB2YWx1ZSBtdXN0IGJlIDA8aGVhcnRiZWF0PDY1NTM2LCB1c2luZyAlZFxuIiwKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlgKKwkJCSJoZWFydGJlYXQgdmFsdWUgbXVzdCBiZSAwPGhlYXJ0YmVhdDw2NTUzNiwgdXNpbmcgJWRcbiIsCiAJCQlXQVRDSERPR19IRUFSVEJFQVQpOwogCX0KIAogCXJldCA9IHJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllcigmcGNpcGN3ZF9ub3RpZmllcik7CiAJaWYgKHJldCAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggImNhbm5vdCByZWdpc3RlciByZWJvb3Qgbm90aWZpZXIgKGVycj0lZClcbiIsCi0JCQlyZXQpOworCQlwcmludGsoS0VSTl9FUlIgUEZYCisJCQkiY2Fubm90IHJlZ2lzdGVyIHJlYm9vdCBub3RpZmllciAoZXJyPSVkKVxuIiwgcmV0KTsKIAkJZ290byBlcnJfb3V0X3JlbGVhc2VfcmVnaW9uOwogCX0KIAogCWlmIChwY2lwY3dkX3ByaXZhdGUuc3VwcG9ydHNfdGVtcCkgewogCQlyZXQgPSBtaXNjX3JlZ2lzdGVyKCZwY2lwY3dkX3RlbXBfbWlzY2Rldik7CiAJCWlmIChyZXQgIT0gMCkgewotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiY2Fubm90IHJlZ2lzdGVyIG1pc2NkZXYgb24gbWlub3I9JWQgKGVycj0lZClcbiIsCi0JCQkJVEVNUF9NSU5PUiwgcmV0KTsKKwkJCXByaW50ayhLRVJOX0VSUiBQRlggImNhbm5vdCByZWdpc3RlciBtaXNjZGV2IG9uICIKKwkJCQkibWlub3I9JWQgKGVycj0lZClcbiIsIFRFTVBfTUlOT1IsIHJldCk7CiAJCQlnb3RvIGVycl9vdXRfdW5yZWdpc3Rlcl9yZWJvb3Q7CiAJCX0KIAl9CiAKIAlyZXQgPSBtaXNjX3JlZ2lzdGVyKCZwY2lwY3dkX21pc2NkZXYpOwogCWlmIChyZXQgIT0gMCkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJjYW5ub3QgcmVnaXN0ZXIgbWlzY2RldiBvbiBtaW5vcj0lZCAoZXJyPSVkKVxuIiwKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWAorCQkJImNhbm5vdCByZWdpc3RlciBtaXNjZGV2IG9uIG1pbm9yPSVkIChlcnI9JWQpXG4iLAogCQkJV0FUQ0hET0dfTUlOT1IsIHJldCk7CiAJCWdvdG8gZXJyX291dF9taXNjX2RlcmVnaXN0ZXI7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9wY3dkX3VzYi5jIGIvZHJpdmVycy93YXRjaGRvZy9wY3dkX3VzYi5jCmluZGV4IGFmYjA4OTYuLjA1MmZlNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvcGN3ZF91c2IuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3Bjd2RfdXNiLmMKQEAgLTUxLDEyICs1MSwxMSBAQAogCiAvKiBVc2Ugb3VyIG93biBkYmcgbWFjcm8gKi8KICN1bmRlZiBkYmcKLSNkZWZpbmUgZGJnKGZvcm1hdCwgYXJnLi4uKSBkbyB7IGlmIChkZWJ1ZykgcHJpbnRrKEtFUk5fREVCVUcgUEZYIGZvcm1hdCAiXG4iICwgIyMgYXJnKTsgfSB3aGlsZSAoMCkKLQorI2RlZmluZSBkYmcoZm9ybWF0LCBhcmcuLi4pIFwKKwlkbyB7IGlmIChkZWJ1ZykgcHJpbnRrKEtFUk5fREVCVUcgUEZYIGZvcm1hdCAiXG4iICwgIyMgYXJnKTsgfSB3aGlsZSAoMCkKIAogLyogTW9kdWxlIGFuZCBWZXJzaW9uIEluZm9ybWF0aW9uICovCiAjZGVmaW5lIERSSVZFUl9WRVJTSU9OICIxLjAyIgotI2RlZmluZSBEUklWRVJfREFURSAiMjEgSmFuIDIwMDciCiAjZGVmaW5lIERSSVZFUl9BVVRIT1IgIldpbSBWYW4gU2Vicm9lY2sgPHdpbUBpZ3VhbmEuYmU+IgogI2RlZmluZSBEUklWRVJfREVTQyAiQmVya3NoaXJlIFVTQi1QQyBXYXRjaGRvZyBkcml2ZXIiCiAjZGVmaW5lIERSSVZFUl9MSUNFTlNFICJHUEwiCkBAIC03MywxNCArNzIsMTggQEAKIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBlbmFibGVkIG9yIG5vdCIpOwogCi0jZGVmaW5lIFdBVENIRE9HX0hFQVJUQkVBVCAwCS8qIGRlZmF1bHQgaGVhcnRiZWF0ID0gZGVsYXktdGltZSBmcm9tIGRpcC1zd2l0Y2hlcyAqLworI2RlZmluZSBXQVRDSERPR19IRUFSVEJFQVQgMAkvKiBkZWZhdWx0IGhlYXJ0YmVhdCA9CisJCQkJCQlkZWxheS10aW1lIGZyb20gZGlwLXN3aXRjaGVzICovCiBzdGF0aWMgaW50IGhlYXJ0YmVhdCA9IFdBVENIRE9HX0hFQVJUQkVBVDsKIG1vZHVsZV9wYXJhbShoZWFydGJlYXQsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGhlYXJ0YmVhdCwgIldhdGNoZG9nIGhlYXJ0YmVhdCBpbiBzZWNvbmRzLiAoMDxoZWFydGJlYXQ8NjU1MzYgb3IgMD1kZWxheS10aW1lIGZyb20gZGlwLXN3aXRjaGVzLCBkZWZhdWx0PSIgX19NT0RVTEVfU1RSSU5HKFdBVENIRE9HX0hFQVJUQkVBVCkgIikiKTsKK01PRFVMRV9QQVJNX0RFU0MoaGVhcnRiZWF0LCAiV2F0Y2hkb2cgaGVhcnRiZWF0IGluIHNlY29uZHMuICIKKwkiKDA8aGVhcnRiZWF0PDY1NTM2IG9yIDA9ZGVsYXktdGltZSBmcm9tIGRpcC1zd2l0Y2hlcywgZGVmYXVsdD0iCisJCQkJX19NT0RVTEVfU1RSSU5HKFdBVENIRE9HX0hFQVJUQkVBVCkgIikiKTsKIAogc3RhdGljIGludCBub3dheW91dCA9IFdBVENIRE9HX05PV0FZT1VUOwogbW9kdWxlX3BhcmFtKG5vd2F5b3V0LCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhub3dheW91dCwgIldhdGNoZG9nIGNhbm5vdCBiZSBzdG9wcGVkIG9uY2Ugc3RhcnRlZCAoZGVmYXVsdD0iIF9fTU9EVUxFX1NUUklORyhXQVRDSERPR19OT1dBWU9VVCkgIikiKTsKK01PRFVMRV9QQVJNX0RFU0Mobm93YXlvdXQsICJXYXRjaGRvZyBjYW5ub3QgYmUgc3RvcHBlZCBvbmNlIHN0YXJ0ZWQgKGRlZmF1bHQ9IgorCQkJCV9fTU9EVUxFX1NUUklORyhXQVRDSERPR19OT1dBWU9VVCkgIikiKTsKIAogLyogVGhlIHZlbmRvciBhbmQgcHJvZHVjdCBpZCdzIGZvciB0aGUgVVNCLVBDIFdhdGNoZG9nIGNhcmQgKi8KICNkZWZpbmUgVVNCX1BDV0RfVkVORE9SX0lECTB4MGM5OApAQCAtOTEsMjAgKzk0LDIxIEBACiAJeyBVU0JfREVWSUNFKFVTQl9QQ1dEX1ZFTkRPUl9JRCwgVVNCX1BDV0RfUFJPRFVDVF9JRCkgfSwKIAl7IH0JCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwotTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCB1c2JfcGN3ZF90YWJsZSk7CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgdXNiX3Bjd2RfdGFibGUpOwogCiAvKiBhY2NvcmRpbmcgdG8gZG9jdW1lbnRhdGlvbiBtYXguIHRpbWUgdG8gcHJvY2VzcyBhIGNvbW1hbmQgZm9yIHRoZSBVU0IKICAqIHdhdGNoZG9nIGNhcmQgaXMgMTAwIG9yIDIwMCBtcywgc28gd2UgZ2l2ZSBpdCAyNTAgbXMgdG8gZG8gaXQncyBqb2IgKi8KICNkZWZpbmUgVVNCX0NPTU1BTkRfVElNRU9VVAkyNTAKIAogLyogV2F0Y2hkb2cncyBpbnRlcm5hbCBjb21tYW5kcyAqLwotI2RlZmluZSBDTURfUkVBRF9URU1QCQkJMHgwMgkvKiBSZWFkIFRlbXBlcmF0dXJlOyBSZS10cmlnZ2VyIFdhdGNoZG9nICovCisjZGVmaW5lIENNRF9SRUFEX1RFTVAJCQkweDAyCS8qIFJlYWQgVGVtcGVyYXR1cmU7CisJCQkJCQkJUmUtdHJpZ2dlciBXYXRjaGRvZyAqLwogI2RlZmluZSBDTURfVFJJR0dFUgkJCUNNRF9SRUFEX1RFTVAKICNkZWZpbmUgQ01EX0dFVF9TVEFUVVMJCQkweDA0CS8qIEdldCBTdGF0dXMgSW5mb3JtYXRpb24gKi8KICNkZWZpbmUgQ01EX0dFVF9GSVJNV0FSRV9WRVJTSU9OCTB4MDgJLyogR2V0IEZpcm13YXJlIFZlcnNpb24gKi8KICNkZWZpbmUgQ01EX0dFVF9ESVBfU1dJVENIX1NFVFRJTkdTCTB4MGMJLyogR2V0IERpcCBTd2l0Y2ggU2V0dGluZ3MgKi8KICNkZWZpbmUgQ01EX1JFQURfV0FUQ0hET0dfVElNRU9VVAkweDE4CS8qIFJlYWQgQ3VycmVudCBXYXRjaGRvZyBUaW1lICovCi0jZGVmaW5lIENNRF9XUklURV9XQVRDSERPR19USU1FT1VUCTB4MTkJLyogV3JpdGUgQ3VycmVudCBXYXRjaGRvZyBUaW1lICovCisjZGVmaW5lIENNRF9XUklURV9XQVRDSERPR19USU1FT1VUCTB4MTkJLyogV3JpdGUgQ3VycmVudCBXYXRjaGRvZ1RpbWUgKi8KICNkZWZpbmUgQ01EX0VOQUJMRV9XQVRDSERPRwkJMHgzMAkvKiBFbmFibGUgLyBEaXNhYmxlIFdhdGNoZG9nICovCiAjZGVmaW5lIENNRF9ESVNBQkxFX1dBVENIRE9HCQlDTURfRU5BQkxFX1dBVENIRE9HCiAKQEAgLTEyOSwyMyArMTMzLDM2IEBACiAKIC8qIFN0cnVjdHVyZSB0byBob2xkIGFsbCBvZiBvdXIgZGV2aWNlIHNwZWNpZmljIHN0dWZmICovCiBzdHJ1Y3QgdXNiX3Bjd2RfcHJpdmF0ZSB7Ci0Jc3RydWN0IHVzYl9kZXZpY2UJKnVkZXY7CQkJLyogc2F2ZSBvZmYgdGhlIHVzYiBkZXZpY2UgcG9pbnRlciAqLwotCXN0cnVjdCB1c2JfaW50ZXJmYWNlCSppbnRlcmZhY2U7CQkvKiB0aGUgaW50ZXJmYWNlIGZvciB0aGlzIGRldmljZSAqLworCS8qIHNhdmUgb2ZmIHRoZSB1c2IgZGV2aWNlIHBvaW50ZXIgKi8KKwlzdHJ1Y3QgdXNiX2RldmljZQkqdWRldjsKKwkvKiB0aGUgaW50ZXJmYWNlIGZvciB0aGlzIGRldmljZSAqLworCXN0cnVjdCB1c2JfaW50ZXJmYWNlCSppbnRlcmZhY2U7CiAKLQl1bnNpZ25lZCBpbnQJCWludGVyZmFjZV9udW1iZXI7CS8qIHRoZSBpbnRlcmZhY2UgbnVtYmVyIHVzZWQgZm9yIGNtZCdzICovCisJLyogdGhlIGludGVyZmFjZSBudW1iZXIgdXNlZCBmb3IgY21kJ3MgKi8KKwl1bnNpZ25lZCBpbnQJCWludGVyZmFjZV9udW1iZXI7CiAKLQl1bnNpZ25lZCBjaGFyCQkqaW50cl9idWZmZXI7CQkvKiB0aGUgYnVmZmVyIHRvIGludHIgZGF0YSAqLwotCWRtYV9hZGRyX3QJCWludHJfZG1hOwkJLyogdGhlIGRtYSBhZGRyZXNzIGZvciB0aGUgaW50ciBidWZmZXIgKi8KLQlzaXplX3QJCQlpbnRyX3NpemU7CQkvKiB0aGUgc2l6ZSBvZiB0aGUgaW50ciBidWZmZXIgKi8KLQlzdHJ1Y3QgdXJiCQkqaW50cl91cmI7CQkvKiB0aGUgdXJiIHVzZWQgZm9yIHRoZSBpbnRyIHBpcGUgKi8KKwkvKiB0aGUgYnVmZmVyIHRvIGludHIgZGF0YSAqLworCXVuc2lnbmVkIGNoYXIJCSppbnRyX2J1ZmZlcjsKKwkvKiB0aGUgZG1hIGFkZHJlc3MgZm9yIHRoZSBpbnRyIGJ1ZmZlciAqLworCWRtYV9hZGRyX3QJCWludHJfZG1hOworCS8qIHRoZSBzaXplIG9mIHRoZSBpbnRyIGJ1ZmZlciAqLworCXNpemVfdAkJCWludHJfc2l6ZTsKKwkvKiB0aGUgdXJiIHVzZWQgZm9yIHRoZSBpbnRyIHBpcGUgKi8KKwlzdHJ1Y3QgdXJiCQkqaW50cl91cmI7CiAKLQl1bnNpZ25lZCBjaGFyCQljbWRfY29tbWFuZDsJCS8qIFRoZSBjb21tYW5kIHRoYXQgaXMgcmVwb3J0ZWQgYmFjayAqLwotCXVuc2lnbmVkIGNoYXIJCWNtZF9kYXRhX21zYjsJCS8qIFRoZSBkYXRhIE1TQiB0aGF0IGlzIHJlcG9ydGVkIGJhY2sgKi8KLQl1bnNpZ25lZCBjaGFyCQljbWRfZGF0YV9sc2I7CQkvKiBUaGUgZGF0YSBMU0IgdGhhdCBpcyByZXBvcnRlZCBiYWNrICovCi0JYXRvbWljX3QJCWNtZF9yZWNlaXZlZDsJCS8qIHRydWUgaWYgd2UgcmVjZWl2ZWQgYSByZXBvcnQgYWZ0ZXIgYSBjb21tYW5kICovCisJLyogVGhlIGNvbW1hbmQgdGhhdCBpcyByZXBvcnRlZCBiYWNrICovCisJdW5zaWduZWQgY2hhcgkJY21kX2NvbW1hbmQ7CisJLyogVGhlIGRhdGEgTVNCIHRoYXQgaXMgcmVwb3J0ZWQgYmFjayAqLworCXVuc2lnbmVkIGNoYXIJCWNtZF9kYXRhX21zYjsKKwkvKiBUaGUgZGF0YSBMU0IgdGhhdCBpcyByZXBvcnRlZCBiYWNrICovCisJdW5zaWduZWQgY2hhcgkJY21kX2RhdGFfbHNiOworCS8qIHRydWUgaWYgd2UgcmVjZWl2ZWQgYSByZXBvcnQgYWZ0ZXIgYSBjb21tYW5kICovCisJYXRvbWljX3QJCWNtZF9yZWNlaXZlZDsKIAotCWludAkJCWV4aXN0czsJCQkvKiBXZXRoZXIgb3Igbm90IHRoZSBkZXZpY2UgZXhpc3RzICovCi0Jc3RydWN0IG11dGV4CQltdHg7CQkJLyogbG9ja3MgdGhpcyBzdHJ1Y3R1cmUgKi8KKwkvKiBXZXRoZXIgb3Igbm90IHRoZSBkZXZpY2UgZXhpc3RzICovCisJaW50CQkJZXhpc3RzOworCS8qIGxvY2tzIHRoaXMgc3RydWN0dXJlICovCisJc3RydWN0IG11dGV4CQltdHg7CiB9Owogc3RhdGljIHN0cnVjdCB1c2JfcGN3ZF9wcml2YXRlICp1c2JfcGN3ZF9kZXZpY2U7CiAKQEAgLTE1Myw3ICsxNzAsOCBAQAogc3RhdGljIERFRklORV9NVVRFWChkaXNjb25uZWN0X211dGV4KTsKIAogLyogbG9jYWwgZnVuY3Rpb24gcHJvdG90eXBlcyAqLwotc3RhdGljIGludCB1c2JfcGN3ZF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpOworc3RhdGljIGludCB1c2JfcGN3ZF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLAorCQkJCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKTsKIHN0YXRpYyB2b2lkIHVzYl9wY3dkX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSk7CiAKIC8qIHVzYiBzcGVjaWZpYyBvYmplY3QgbmVlZGVkIHRvIHJlZ2lzdGVyIHRoaXMgZHJpdmVyIHdpdGggdGhlIHVzYiBzdWJzeXN0ZW0gKi8KQEAgLTE2Nyw3ICsxODUsOCBAQAogCiBzdGF0aWMgdm9pZCB1c2JfcGN3ZF9pbnRyX2RvbmUoc3RydWN0IHVyYiAqdXJiKQogewotCXN0cnVjdCB1c2JfcGN3ZF9wcml2YXRlICp1c2JfcGN3ZCA9IChzdHJ1Y3QgdXNiX3Bjd2RfcHJpdmF0ZSAqKXVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgdXNiX3Bjd2RfcHJpdmF0ZSAqdXNiX3Bjd2QgPQorCQkJCShzdHJ1Y3QgdXNiX3Bjd2RfcHJpdmF0ZSAqKXVyYi0+Y29udGV4dDsKIAl1bnNpZ25lZCBjaGFyICpkYXRhID0gdXNiX3Bjd2QtPmludHJfYnVmZmVyOwogCWludCByZXR2YWw7CiAKQEAgLTE3OCwxMSArMTk3LDEzIEBACiAJY2FzZSAtRU5PRU5UOgogCWNhc2UgLUVTSFVURE9XTjoKIAkJLyogdGhpcyB1cmIgaXMgdGVybWluYXRlZCwgY2xlYW4gdXAgKi8KLQkJZGJnKCIlcyAtIHVyYiBzaHV0dGluZyBkb3duIHdpdGggc3RhdHVzOiAlZCIsIF9fZnVuY19fLCB1cmItPnN0YXR1cyk7CisJCWRiZygiJXMgLSB1cmIgc2h1dHRpbmcgZG93biB3aXRoIHN0YXR1czogJWQiLCBfX2Z1bmNfXywKKwkJCQkJCQkJdXJiLT5zdGF0dXMpOwogCQlyZXR1cm47CiAJLyogLUVQSVBFOiAgc2hvdWxkIGNsZWFyIHRoZSBoYWx0ICovCiAJZGVmYXVsdDoJCS8qIGVycm9yICovCi0JCWRiZygiJXMgLSBub256ZXJvIHVyYiBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19mdW5jX18sIHVyYi0+c3RhdHVzKTsKKwkJZGJnKCIlcyAtIG5vbnplcm8gdXJiIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX2Z1bmNfXywKKwkJCQkJCQkJdXJiLT5zdGF0dXMpOwogCQlnb3RvIHJlc3VibWl0OwogCX0KIApAQCAtMTk5LDIyICsyMjAsMjMgQEAKIHJlc3VibWl0OgogCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CiAJaWYgKHJldHZhbCkKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiY2FuJ3QgcmVzdWJtaXQgaW50ciwgdXNiX3N1Ym1pdF91cmIgZmFpbGVkIHdpdGggcmVzdWx0ICVkXG4iLAotCQkJcmV0dmFsKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiY2FuJ3QgcmVzdWJtaXQgaW50ciwgIgorCQkJInVzYl9zdWJtaXRfdXJiIGZhaWxlZCB3aXRoIHJlc3VsdCAlZFxuIiwgcmV0dmFsKTsKIH0KIAotc3RhdGljIGludCB1c2JfcGN3ZF9zZW5kX2NvbW1hbmQoc3RydWN0IHVzYl9wY3dkX3ByaXZhdGUgKnVzYl9wY3dkLCB1bnNpZ25lZCBjaGFyIGNtZCwKLQl1bnNpZ25lZCBjaGFyICptc2IsIHVuc2lnbmVkIGNoYXIgKmxzYikKK3N0YXRpYyBpbnQgdXNiX3Bjd2Rfc2VuZF9jb21tYW5kKHN0cnVjdCB1c2JfcGN3ZF9wcml2YXRlICp1c2JfcGN3ZCwKKwkJdW5zaWduZWQgY2hhciBjbWQsIHVuc2lnbmVkIGNoYXIgKm1zYiwgdW5zaWduZWQgY2hhciAqbHNiKQogewogCWludCBnb3RfcmVzcG9uc2UsIGNvdW50OwogCXVuc2lnbmVkIGNoYXIgYnVmWzZdOwogCi0JLyogV2Ugd2lsbCBub3Qgc2VuZCBhbnkgY29tbWFuZHMgaWYgdGhlIFVTQiBQQ1dEIGRldmljZSBkb2VzIG5vdCBleGlzdCAqLworCS8qIFdlIHdpbGwgbm90IHNlbmQgYW55IGNvbW1hbmRzIGlmIHRoZSBVU0IgUENXRCBkZXZpY2UgZG9lcworCSAqIG5vdCBleGlzdCAqLwogCWlmICgoIXVzYl9wY3dkKSB8fCAoIXVzYl9wY3dkLT5leGlzdHMpKQogCQlyZXR1cm4gLTE7CiAKLQkvKiBUaGUgVVNCIFBDIFdhdGNoZG9nIHVzZXMgYSA2IGJ5dGUgcmVwb3J0IGZvcm1hdC4gVGhlIGJvYXJkIGN1cnJlbnRseSB1c2VzCi0JICogb25seSAzIG9mIHRoZSBzaXggYnl0ZXMgb2YgdGhlIHJlcG9ydC4gKi8KKwkvKiBUaGUgVVNCIFBDIFdhdGNoZG9nIHVzZXMgYSA2IGJ5dGUgcmVwb3J0IGZvcm1hdC4KKwkgKiBUaGUgYm9hcmQgY3VycmVudGx5IHVzZXMgb25seSAzIG9mIHRoZSBzaXggYnl0ZXMgb2YgdGhlIHJlcG9ydC4gKi8KIAlidWZbMF0gPSBjbWQ7CQkJLyogQnl0ZSAwID0gQ01EICovCiAJYnVmWzFdID0gKm1zYjsJCQkvKiBCeXRlIDEgPSBEYXRhIE1TQiAqLwogCWJ1ZlsyXSA9ICpsc2I7CQkJLyogQnl0ZSAyID0gRGF0YSBMU0IgKi8KQEAgLTIyOSwxMiArMjUxLDE0IEBACiAJCQlISURfUkVRX1NFVF9SRVBPUlQsIEhJRF9EVF9SRVBPUlQsCiAJCQkweDAyMDAsIHVzYl9wY3dkLT5pbnRlcmZhY2VfbnVtYmVyLCBidWYsIHNpemVvZihidWYpLAogCQkJVVNCX0NPTU1BTkRfVElNRU9VVCkgIT0gc2l6ZW9mKGJ1ZikpIHsKLQkJZGJnKCJ1c2JfcGN3ZF9zZW5kX2NvbW1hbmQ6IGVycm9yIGluIHVzYl9jb250cm9sX21zZyBmb3IgY21kIDB4JXggMHgleCAweCV4XG4iLCBjbWQsICptc2IsICpsc2IpOworCQlkYmcoInVzYl9wY3dkX3NlbmRfY29tbWFuZDogZXJyb3IgaW4gdXNiX2NvbnRyb2xfbXNnIGZvciAiCisJCQkJImNtZCAweCV4IDB4JXggMHgleFxuIiwgY21kLCAqbXNiLCAqbHNiKTsKIAl9CiAJLyogd2FpdCB0aWxsIHRoZSB1c2IgY2FyZCBwcm9jZXNzZWQgdGhlIGNvbW1hbmQsCiAJICogd2l0aCBhIG1heC4gdGltZW91dCBvZiBVU0JfQ09NTUFORF9USU1FT1VUICovCiAJZ290X3Jlc3BvbnNlID0gMDsKLQlmb3IgKGNvdW50ID0gMDsgKGNvdW50IDwgVVNCX0NPTU1BTkRfVElNRU9VVCkgJiYgKCFnb3RfcmVzcG9uc2UpOyBjb3VudCsrKSB7CisJZm9yIChjb3VudCA9IDA7IChjb3VudCA8IFVTQl9DT01NQU5EX1RJTUVPVVQpICYmICghZ290X3Jlc3BvbnNlKTsKKwkJCQkJCQkJY291bnQrKykgewogCQltZGVsYXkoMSk7CiAJCWlmIChhdG9taWNfcmVhZCgmdXNiX3Bjd2QtPmNtZF9yZWNlaXZlZCkpCiAJCQlnb3RfcmVzcG9uc2UgPSAxOwpAQCAtMjU2LDEwICsyODAsMTIgQEAKIAlpbnQgcmV0dmFsOwogCiAJLyogRW5hYmxlIFdhdGNoZG9nICovCi0JcmV0dmFsID0gdXNiX3Bjd2Rfc2VuZF9jb21tYW5kKHVzYl9wY3dkLCBDTURfRU5BQkxFX1dBVENIRE9HLCAmbXNiLCAmbHNiKTsKKwlyZXR2YWwgPSB1c2JfcGN3ZF9zZW5kX2NvbW1hbmQodXNiX3Bjd2QsIENNRF9FTkFCTEVfV0FUQ0hET0csCisJCQkJCQkJCSZtc2IsICZsc2IpOwogCiAJaWYgKChyZXR2YWwgPT0gMCkgfHwgKGxzYiA9PSAwKSkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJDYXJkIGRpZCBub3QgYWNrbm93bGVkZ2UgZW5hYmxlIGF0dGVtcHRcbiIpOworCQlwcmludGsoS0VSTl9FUlIgUEZYCisJCQkJIkNhcmQgZGlkIG5vdCBhY2tub3dsZWRnZSBlbmFibGUgYXR0ZW1wdFxuIik7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTI3MywxMCArMjk5LDEyIEBACiAJaW50IHJldHZhbDsKIAogCS8qIERpc2FibGUgV2F0Y2hkb2cgKi8KLQlyZXR2YWwgPSB1c2JfcGN3ZF9zZW5kX2NvbW1hbmQodXNiX3Bjd2QsIENNRF9ESVNBQkxFX1dBVENIRE9HLCAmbXNiLCAmbHNiKTsKKwlyZXR2YWwgPSB1c2JfcGN3ZF9zZW5kX2NvbW1hbmQodXNiX3Bjd2QsIENNRF9ESVNBQkxFX1dBVENIRE9HLAorCQkJCQkJCQkmbXNiLCAmbHNiKTsKIAogCWlmICgocmV0dmFsID09IDApIHx8IChsc2IgIT0gMCkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2FyZCBkaWQgbm90IGFja25vd2xlZGdlIGRpc2FibGUgYXR0ZW1wdFxuIik7CisJCXByaW50ayhLRVJOX0VSUiBQRlgKKwkJCSJDYXJkIGRpZCBub3QgYWNrbm93bGVkZ2UgZGlzYWJsZSBhdHRlbXB0XG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtMzA4LDcgKzMzNiw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdXNiX3Bjd2RfZ2V0X3RlbXBlcmF0dXJlKHN0cnVjdCB1c2JfcGN3ZF9wcml2YXRlICp1c2JfcGN3ZCwgaW50ICp0ZW1wZXJhdHVyZSkKK3N0YXRpYyBpbnQgdXNiX3Bjd2RfZ2V0X3RlbXBlcmF0dXJlKHN0cnVjdCB1c2JfcGN3ZF9wcml2YXRlICp1c2JfcGN3ZCwKKwkJCQkJCQlpbnQgKnRlbXBlcmF0dXJlKQogewogCXVuc2lnbmVkIGNoYXIgbXNiLCBsc2I7CiAKQEAgLTMyMyw3ICszNTIsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHVzYl9wY3dkX2dldF90aW1lbGVmdChzdHJ1Y3QgdXNiX3Bjd2RfcHJpdmF0ZSAqdXNiX3Bjd2QsIGludCAqdGltZV9sZWZ0KQorc3RhdGljIGludCB1c2JfcGN3ZF9nZXRfdGltZWxlZnQoc3RydWN0IHVzYl9wY3dkX3ByaXZhdGUgKnVzYl9wY3dkLAorCQkJCQkJCQlpbnQgKnRpbWVfbGVmdCkKIHsKIAl1bnNpZ25lZCBjaGFyIG1zYiwgbHNiOwogCkBAIC0zNDEsNyArMzcxLDcgQEAKICAqLwogCiBzdGF0aWMgc3NpemVfdCB1c2JfcGN3ZF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmRhdGEsCi0JCQkgICAgICBzaXplX3QgbGVuLCBsb2ZmX3QgKnBwb3MpCisJCQkJCQlzaXplX3QgbGVuLCBsb2ZmX3QgKnBwb3MpCiB7CiAJLyogU2VlIGlmIHdlIGdvdCB0aGUgbWFnaWMgY2hhcmFjdGVyICdWJyBhbmQgcmVsb2FkIHRoZSB0aW1lciAqLwogCWlmIChsZW4pIHsKQEAgLTM1Miw3ICszODIsOCBAQAogCQkJICogZml2ZSBtb250aHMgYWdvLi4uICovCiAJCQlleHBlY3RfcmVsZWFzZSA9IDA7CiAKLQkJCS8qIHNjYW4gdG8gc2VlIHdoZXRoZXIgb3Igbm90IHdlIGdvdCB0aGUgbWFnaWMgY2hhcmFjdGVyICovCisJCQkvKiBzY2FuIHRvIHNlZSB3aGV0aGVyIG9yIG5vdCB3ZSBnb3QgdGhlCisJCQkgKiBtYWdpYyBjaGFyYWN0ZXIgKi8KIAkJCWZvciAoaSA9IDA7IGkgIT0gbGVuOyBpKyspIHsKIAkJCQljaGFyIGM7CiAJCQkJaWYgKGdldF91c2VyKGMsIGRhdGEgKyBpKSkKQEAgLTQzMSw3ICs0NjIsNyBAQAogCQkJcmV0dXJuIC1FRkFVTFQ7CiAKIAkJaWYgKHVzYl9wY3dkX3NldF9oZWFydGJlYXQodXNiX3Bjd2RfZGV2aWNlLCBuZXdfaGVhcnRiZWF0KSkKLQkJICAgIHJldHVybiAtRUlOVkFMOworCQkJcmV0dXJuIC1FSU5WQUw7CiAKIAkJdXNiX3Bjd2Rfa2VlcGFsaXZlKHVzYl9wY3dkX2RldmljZSk7CiAJCS8qIEZhbGwgKi8KQEAgLTQ3NSw3ICs1MDYsOCBAQAogCWlmIChleHBlY3RfcmVsZWFzZSA9PSA0MikgewogCQl1c2JfcGN3ZF9zdG9wKHVzYl9wY3dkX2RldmljZSk7CiAJfSBlbHNlIHsKLQkJcHJpbnRrKEtFUk5fQ1JJVCBQRlggIlVuZXhwZWN0ZWQgY2xvc2UsIG5vdCBzdG9wcGluZyB3YXRjaGRvZyFcbiIpOworCQlwcmludGsoS0VSTl9DUklUIFBGWAorCQkJIlVuZXhwZWN0ZWQgY2xvc2UsIG5vdCBzdG9wcGluZyB3YXRjaGRvZyFcbiIpOwogCQl1c2JfcGN3ZF9rZWVwYWxpdmUodXNiX3Bjd2RfZGV2aWNlKTsKIAl9CiAJZXhwZWN0X3JlbGVhc2UgPSAwOwpAQCAtNTE1LDcgKzU0Nyw4IEBACiAgKglOb3RpZnkgc3lzdGVtCiAgKi8KIAotc3RhdGljIGludCB1c2JfcGN3ZF9ub3RpZnlfc3lzKHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywgdW5zaWduZWQgbG9uZyBjb2RlLCB2b2lkICp1bnVzZWQpCitzdGF0aWMgaW50IHVzYl9wY3dkX25vdGlmeV9zeXMoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIGNvZGUsCisJCQkJCQkJCXZvaWQgKnVudXNlZCkKIHsKIAlpZiAoY29kZSA9PSBTWVNfRE9XTiB8fCBjb2RlID09IFNZU19IQUxUKQogCQl1c2JfcGN3ZF9zdG9wKHVzYl9wY3dkX2RldmljZSk7CS8qIFR1cm4gdGhlIFdEVCBvZmYgKi8KQEAgLTU3OCw3ICs2MTEsOCBAQAogICoJQ2FsbGVkIGJ5IHRoZSB1c2IgY29yZSB3aGVuIGEgbmV3IGRldmljZSBpcyBjb25uZWN0ZWQgdGhhdCBpdCB0aGlua3MKICAqCXRoaXMgZHJpdmVyIG1pZ2h0IGJlIGludGVyZXN0ZWQgaW4uCiAgKi8KLXN0YXRpYyBpbnQgdXNiX3Bjd2RfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQorc3RhdGljIGludCB1c2JfcGN3ZF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLAorCQkJCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQogewogCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRlcmZhY2UpOwogCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmlmYWNlX2Rlc2M7CkBAIC02MDIsMTYgKzYzNiwxNSBAQAogCiAJLyogY2hlY2sgb3V0IHRoYXQgd2UgaGF2ZSBhIEhJRCBkZXZpY2UgKi8KIAlpZiAoIShpZmFjZV9kZXNjLT5kZXNjLmJJbnRlcmZhY2VDbGFzcyA9PSBVU0JfQ0xBU1NfSElEKSkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJUaGUgZGV2aWNlIGlzbid0IGEgSHVtYW4gSW50ZXJmYWNlIERldmljZVxuIik7CisJCXByaW50ayhLRVJOX0VSUiBQRlgKKwkJCSJUaGUgZGV2aWNlIGlzbid0IGEgSHVtYW4gSW50ZXJmYWNlIERldmljZVxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAogCS8qIGNoZWNrIG91dCB0aGUgZW5kcG9pbnQ6IGl0IGhhcyB0byBiZSBJbnRlcnJ1cHQgJiBJTiAqLwogCWVuZHBvaW50ID0gJmlmYWNlX2Rlc2MtPmVuZHBvaW50WzBdLmRlc2M7CiAKLQlpZiAoISgoZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOKSAmJgotCSAgICAgKChlbmRwb2ludC0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spCi0JCQkJPT0gVVNCX0VORFBPSU5UX1hGRVJfSU5UKSkpIHsKKwlpZiAoIXVzYl9lbmRwb2ludF9pc19pbnRfaW4oZW5kcG9pbnQpKSB7CiAJCS8qIHdlIGRpZG4ndCBmaW5kIGEgSW50ZXJydXB0IGVuZHBvaW50IHdpdGggZGlyZWN0aW9uIElOICovCiAJCXByaW50ayhLRVJOX0VSUiBQRlggIkNvdWxkbid0IGZpbmQgYW4gSU5UUiAmIElOIGVuZHBvaW50XG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC02MzQsMTAgKzY2NywxMiBAQAogCXVzYl9wY3dkLT51ZGV2ID0gdWRldjsKIAl1c2JfcGN3ZC0+aW50ZXJmYWNlID0gaW50ZXJmYWNlOwogCXVzYl9wY3dkLT5pbnRlcmZhY2VfbnVtYmVyID0gaWZhY2VfZGVzYy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyOwotCXVzYl9wY3dkLT5pbnRyX3NpemUgPSAobGUxNl90b19jcHUoZW5kcG9pbnQtPndNYXhQYWNrZXRTaXplKSA+IDggPyBsZTE2X3RvX2NwdShlbmRwb2ludC0+d01heFBhY2tldFNpemUpIDogOCk7CisJdXNiX3Bjd2QtPmludHJfc2l6ZSA9IChsZTE2X3RvX2NwdShlbmRwb2ludC0+d01heFBhY2tldFNpemUpID4gOCA/CisJCQkJbGUxNl90b19jcHUoZW5kcG9pbnQtPndNYXhQYWNrZXRTaXplKSA6IDgpOwogCiAJLyogc2V0IHVwIHRoZSBtZW1vcnkgYnVmZmVyJ3MgKi8KLQl1c2JfcGN3ZC0+aW50cl9idWZmZXIgPSB1c2JfYnVmZmVyX2FsbG9jKHVkZXYsIHVzYl9wY3dkLT5pbnRyX3NpemUsIEdGUF9BVE9NSUMsICZ1c2JfcGN3ZC0+aW50cl9kbWEpOworCXVzYl9wY3dkLT5pbnRyX2J1ZmZlciA9IHVzYl9idWZmZXJfYWxsb2ModWRldiwgdXNiX3Bjd2QtPmludHJfc2l6ZSwKKwkJCQkJR0ZQX0FUT01JQywgJnVzYl9wY3dkLT5pbnRyX2RtYSk7CiAJaWYgKCF1c2JfcGN3ZC0+aW50cl9idWZmZXIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiT3V0IG9mIG1lbW9yeVxuIik7CiAJCWdvdG8gZXJyb3I7CkBAIC02NzEsNyArNzA2LDggQEAKIAl1c2JfcGN3ZF9zdG9wKHVzYl9wY3dkKTsKIAogCS8qIEdldCB0aGUgRmlybXdhcmUgVmVyc2lvbiAqLwotCWdvdF9md19yZXYgPSB1c2JfcGN3ZF9zZW5kX2NvbW1hbmQodXNiX3Bjd2QsIENNRF9HRVRfRklSTVdBUkVfVkVSU0lPTiwgJmZ3X3Jldl9tYWpvciwgJmZ3X3Jldl9taW5vcik7CisJZ290X2Z3X3JldiA9IHVzYl9wY3dkX3NlbmRfY29tbWFuZCh1c2JfcGN3ZCwgQ01EX0dFVF9GSVJNV0FSRV9WRVJTSU9OLAorCQkJCQkJJmZ3X3Jldl9tYWpvciwgJmZ3X3Jldl9taW5vcik7CiAJaWYgKGdvdF9md19yZXYpCiAJCXNwcmludGYoZndfdmVyX3N0ciwgIiV1LiUwMnUiLCBmd19yZXZfbWFqb3IsIGZ3X3Jldl9taW5vcik7CiAJZWxzZQpAQCAtNjgxLDkgKzcxNywxMSBAQAogCQlmd192ZXJfc3RyKTsKIAogCS8qIEdldCBzd2l0Y2ggc2V0dGluZ3MgKi8KLQl1c2JfcGN3ZF9zZW5kX2NvbW1hbmQodXNiX3Bjd2QsIENNRF9HRVRfRElQX1NXSVRDSF9TRVRUSU5HUywgJmR1bW15LCAmb3B0aW9uX3N3aXRjaGVzKTsKKwl1c2JfcGN3ZF9zZW5kX2NvbW1hbmQodXNiX3Bjd2QsIENNRF9HRVRfRElQX1NXSVRDSF9TRVRUSU5HUywgJmR1bW15LAorCQkJCQkJCSZvcHRpb25fc3dpdGNoZXMpOwogCi0JcHJpbnRrKEtFUk5fSU5GTyBQRlggIk9wdGlvbiBzd2l0Y2hlcyAoMHglMDJ4KTogVGVtcGVyYXR1cmUgUmVzZXQgRW5hYmxlPSVzLCBQb3dlciBPbiBEZWxheT0lc1xuIiwKKwlwcmludGsoS0VSTl9JTkZPIFBGWCAiT3B0aW9uIHN3aXRjaGVzICgweCUwMngpOiAiCisJCSJUZW1wZXJhdHVyZSBSZXNldCBFbmFibGU9JXMsIFBvd2VyIE9uIERlbGF5PSVzXG4iLAogCQlvcHRpb25fc3dpdGNoZXMsCiAJCSgob3B0aW9uX3N3aXRjaGVzICYgMHgxMCkgPyAiT04iIDogIk9GRiIpLAogCQkoKG9wdGlvbl9zd2l0Y2hlcyAmIDB4MDgpID8gIk9OIiA6ICJPRkYiKSk7CkBAIC02OTIsMzAgKzczMCwzNSBAQAogCWlmIChoZWFydGJlYXQgPT0gMCkKIAkJaGVhcnRiZWF0ID0gaGVhcnRiZWF0X3RibFsob3B0aW9uX3N3aXRjaGVzICYgMHgwNyldOwogCi0JLyogQ2hlY2sgdGhhdCB0aGUgaGVhcnRiZWF0IHZhbHVlIGlzIHdpdGhpbiBpdCdzIHJhbmdlIDsgaWYgbm90IHJlc2V0IHRvIHRoZSBkZWZhdWx0ICovCisJLyogQ2hlY2sgdGhhdCB0aGUgaGVhcnRiZWF0IHZhbHVlIGlzIHdpdGhpbiBpdCdzIHJhbmdlIDsKKwkgKiBpZiBub3QgcmVzZXQgdG8gdGhlIGRlZmF1bHQgKi8KIAlpZiAodXNiX3Bjd2Rfc2V0X2hlYXJ0YmVhdCh1c2JfcGN3ZCwgaGVhcnRiZWF0KSkgewogCQl1c2JfcGN3ZF9zZXRfaGVhcnRiZWF0KHVzYl9wY3dkLCBXQVRDSERPR19IRUFSVEJFQVQpOwotCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiaGVhcnRiZWF0IHZhbHVlIG11c3QgYmUgMDxoZWFydGJlYXQ8NjU1MzYsIHVzaW5nICVkXG4iLAorCQlwcmludGsoS0VSTl9JTkZPIFBGWAorCQkJImhlYXJ0YmVhdCB2YWx1ZSBtdXN0IGJlIDA8aGVhcnRiZWF0PDY1NTM2LCB1c2luZyAlZFxuIiwKIAkJCVdBVENIRE9HX0hFQVJUQkVBVCk7CiAJfQogCiAJcmV0dmFsID0gcmVnaXN0ZXJfcmVib290X25vdGlmaWVyKCZ1c2JfcGN3ZF9ub3RpZmllcik7CiAJaWYgKHJldHZhbCAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggImNhbm5vdCByZWdpc3RlciByZWJvb3Qgbm90aWZpZXIgKGVycj0lZClcbiIsCisJCXByaW50ayhLRVJOX0VSUiBQRlgKKwkJCSJjYW5ub3QgcmVnaXN0ZXIgcmVib290IG5vdGlmaWVyIChlcnI9JWQpXG4iLAogCQkJcmV0dmFsKTsKIAkJZ290byBlcnJvcjsKIAl9CiAKIAlyZXR2YWwgPSBtaXNjX3JlZ2lzdGVyKCZ1c2JfcGN3ZF90ZW1wZXJhdHVyZV9taXNjZGV2KTsKIAlpZiAocmV0dmFsICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiY2Fubm90IHJlZ2lzdGVyIG1pc2NkZXYgb24gbWlub3I9JWQgKGVycj0lZClcbiIsCisJCXByaW50ayhLRVJOX0VSUiBQRlgKKwkJCSJjYW5ub3QgcmVnaXN0ZXIgbWlzY2RldiBvbiBtaW5vcj0lZCAoZXJyPSVkKVxuIiwKIAkJCVRFTVBfTUlOT1IsIHJldHZhbCk7CiAJCWdvdG8gZXJyX291dF91bnJlZ2lzdGVyX3JlYm9vdDsKIAl9CiAKIAlyZXR2YWwgPSBtaXNjX3JlZ2lzdGVyKCZ1c2JfcGN3ZF9taXNjZGV2KTsKIAlpZiAocmV0dmFsICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiY2Fubm90IHJlZ2lzdGVyIG1pc2NkZXYgb24gbWlub3I9JWQgKGVycj0lZClcbiIsCisJCXByaW50ayhLRVJOX0VSUiBQRlgKKwkJCSJjYW5ub3QgcmVnaXN0ZXIgbWlzY2RldiBvbiBtaW5vcj0lZCAoZXJyPSVkKVxuIiwKIAkJCVdBVENIRE9HX01JTk9SLCByZXR2YWwpOwogCQlnb3RvIGVycl9vdXRfbWlzY19kZXJlZ2lzdGVyOwogCX0KQEAgLTgwMSw3ICs4NDQsNyBAQAogCQlyZXR1cm4gcmVzdWx0OwogCX0KIAotCXByaW50ayhLRVJOX0lORk8gUEZYIERSSVZFUl9ERVNDICIgdiIgRFJJVkVSX1ZFUlNJT04gIiAoIiBEUklWRVJfREFURSAiKVxuIik7CisJcHJpbnRrKEtFUk5fSU5GTyBQRlggRFJJVkVSX0RFU0MgIiB2IiBEUklWRVJfVkVSU0lPTiAiXG4iKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9wbng0MDA4X3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9wbng0MDA4X3dkdC5jCmluZGV4IDZkOWYzZDQuLjY0MTM1MTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvcG54NDAwOF93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3BueDQwMDhfd2R0LmMKQEAgLTU0LDIyICs1NCwyMiBAQAogCiAvKiBXRFRJTV9DVFJMIGJpdCBkZWZpbml0aW9ucyAqLwogI2RlZmluZSBDT1VOVF9FTkFCICAgICAxCi0jZGVmaW5lIFJFU0VUX0NPVU5UICAgICgxPDwxKQotI2RlZmluZSBERUJVR19FTiAgICAgICAoMTw8MikKKyNkZWZpbmUgUkVTRVRfQ09VTlQgICAgKDEgPDwgMSkKKyNkZWZpbmUgREVCVUdfRU4gICAgICAgKDEgPDwgMikKIAogLyogV0RUSU1fTUNUUkwgYml0IGRlZmluaXRpb25zICovCiAjZGVmaW5lIE1SMF9JTlQgICAgICAgIDEKICN1bmRlZiAgUkVTRVRfQ09VTlQwCi0jZGVmaW5lIFJFU0VUX0NPVU5UMCAgICgxPDwyKQotI2RlZmluZSBTVE9QX0NPVU5UMCAgICAoMTw8MikKLSNkZWZpbmUgTV9SRVMxICAgICAgICAgKDE8PDMpCi0jZGVmaW5lIE1fUkVTMiAgICAgICAgICgxPDw0KQotI2RlZmluZSBSRVNGUkMxICAgICAgICAoMTw8NSkKLSNkZWZpbmUgUkVTRlJDMiAgICAgICAgKDE8PDYpCisjZGVmaW5lIFJFU0VUX0NPVU5UMCAgICgxIDw8IDIpCisjZGVmaW5lIFNUT1BfQ09VTlQwICAgICgxIDw8IDIpCisjZGVmaW5lIE1fUkVTMSAgICAgICAgICgxIDw8IDMpCisjZGVmaW5lIE1fUkVTMiAgICAgICAgICgxIDw8IDQpCisjZGVmaW5lIFJFU0ZSQzEgICAgICAgICgxIDw8IDUpCisjZGVmaW5lIFJFU0ZSQzIgICAgICAgICgxIDw8IDYpCiAKIC8qIFdEVElNX0VNUiBiaXQgZGVmaW5pdGlvbnMgKi8KICNkZWZpbmUgRVhUX01BVENIMCAgICAgIDEKLSNkZWZpbmUgTUFUQ0hfT1VUUFVUX0hJR0ggKDI8PDQpCS8qYSBNQVRDSF9DVFJMIHNldHRpbmcgKi8KKyNkZWZpbmUgTUFUQ0hfT1VUUFVUX0hJR0ggKDIgPDwgNCkJLyphIE1BVENIX0NUUkwgc2V0dGluZyAqLwogCiAvKiBXRFRJTV9SRVMgYml0IGRlZmluaXRpb25zICovCiAjZGVmaW5lIFdET0dfUkVTRVQgICAgICAxCS8qIHJlYWQgb25seSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9yYzMyNDM0X3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9yYzMyNDM0X3dkdC5jCmluZGV4IGYzNTUzZmEuLmY2Y2NjYzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvcmMzMjQzNF93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3JjMzI0MzRfd2R0LmMKQEAgLTE3LDI3ICsxNywyOSBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3dhdGNoZG9nLmg+Ci0jaW5jbHVkZSA8bGludXgvcmVib290Lmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgkJLyogRm9yIG1vZHVsZSBzcGVjaWZpYyBpdGVtcyAqLworI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CQkvKiBGb3IgbmV3IG1vZHVsZXBhcmFtJ3MgKi8KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgkJLyogRm9yIHN0YW5kYXJkIHR5cGVzIChsaWtlIHNpemVfdCkgKi8KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgkJLyogRm9yIHRoZSAtRU5PREVWLy4uLiB2YWx1ZXMgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4JCS8qIEZvciBwcmludGsvcGFuaWMvLi4uICovCisjaW5jbHVkZSA8bGludXgvZnMuaD4JCQkvKiBGb3IgZmlsZSBvcGVyYXRpb25zICovCisjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgkJLyogRm9yIE1PRFVMRV9BTElBU19NSVNDREVWCisJCQkJCQkJKFdBVENIRE9HX01JTk9SKSAqLworI2luY2x1ZGUgPGxpbnV4L3dhdGNoZG9nLmg+CQkvKiBGb3IgdGhlIHdhdGNoZG9nIHNwZWNpZmljIGl0ZW1zICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgkJCS8qIEZvciBfX2luaXQvX19leGl0Ly4uLiAqLworI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgkvKiBGb3IgcGxhdGZvcm1fZHJpdmVyIGZyYW1ld29yayAqLworI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CQkvKiBGb3Igc3Bpbl9sb2NrL3NwaW5fdW5sb2NrLy4uLiAqLworI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4JCS8qIEZvciBjb3B5X3RvX3VzZXIvcHV0X3VzZXIvLi4uICovCiAKLSNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KLSNpbmNsdWRlIDxhc20vdGltZS5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLXJjMzI0MzQvaW50ZWcuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1yYzMyNDM0L2ludGVnLmg+CS8qIEZvciB0aGUgV2F0Y2hkb2cgcmVnaXN0ZXJzICovCiAKLSNkZWZpbmUgVkVSU0lPTiAiMC40IgorI2RlZmluZSBQRlggS0JVSUxEX01PRE5BTUUgIjogIgorCisjZGVmaW5lIFZFUlNJT04gIjEuMCIKIAogc3RhdGljIHN0cnVjdCB7CiAJdW5zaWduZWQgbG9uZyBpbnVzZTsKKwlzcGlubG9ja190IGlvX2xvY2s7CiB9IHJjMzI0MzRfd2R0X2RldmljZTsKIAogc3RhdGljIHN0cnVjdCBpbnRlZyBfX2lvbWVtICp3ZHRfcmVnOwpAQCAtNTgsNiArNjAsOSBAQAogI2RlZmluZSBXQVRDSERPR19USU1FT1VUIDIwCiAKIHN0YXRpYyBpbnQgdGltZW91dCA9IFdBVENIRE9HX1RJTUVPVVQ7Cittb2R1bGVfcGFyYW0odGltZW91dCwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0ModGltZW91dCwgIldhdGNoZG9nIHRpbWVvdXQgdmFsdWUsIGluIHNlY29uZHMgKGRlZmF1bHQ9IgorCQlXQVRDSERPR19USU1FT1VUICIpIik7CiAKIHN0YXRpYyBpbnQgbm93YXlvdXQgPSBXQVRDSERPR19OT1dBWU9VVDsKIG1vZHVsZV9wYXJhbShub3dheW91dCwgaW50LCAwKTsKQEAgLTY4LDEwICs3MywyOSBAQAogI2RlZmluZSBTRVRfQklUUyhhZGRyLCBvciwgbmFuZCkgXAogCXdyaXRlbCgocmVhZGwoJmFkZHIpIHwgb3IpICYgfm5hbmQsICZhZGRyKQogCitzdGF0aWMgaW50IHJjMzI0MzRfd2R0X3NldChpbnQgbmV3X3RpbWVvdXQpCit7CisJaW50IG1heF90byA9IFdUQ09NUDJTRUMoKHUzMiktMSk7CisKKwlpZiAobmV3X3RpbWVvdXQgPCAwIHx8IG5ld190aW1lb3V0ID4gbWF4X3RvKSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlggInRpbWVvdXQgdmFsdWUgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kICVkIiwKKwkJCW1heF90byk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwl0aW1lb3V0ID0gbmV3X3RpbWVvdXQ7CisJc3Bpbl9sb2NrKCZyYzMyNDM0X3dkdF9kZXZpY2UuaW9fbG9jayk7CisJd3JpdGVsKFNFQzJXVENPTVAodGltZW91dCksICZ3ZHRfcmVnLT53dGNvbXBhcmUpOworCXNwaW5fdW5sb2NrKCZyYzMyNDM0X3dkdF9kZXZpY2UuaW9fbG9jayk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHZvaWQgcmMzMjQzNF93ZHRfc3RhcnQodm9pZCkKIHsKIAl1MzIgb3IsIG5hbmQ7CiAKKwlzcGluX2xvY2soJnJjMzI0MzRfd2R0X2RldmljZS5pb19sb2NrKTsKKwogCS8qIHplcm8gdGhlIGNvdW50ZXIgYmVmb3JlIGVuYWJsaW5nICovCiAJd3JpdGVsKDAsICZ3ZHRfcmVnLT53dGNvdW50KTsKIApAQCAtODUsMzggKzEwOSwzNSBAQAogCiAJU0VUX0JJVFMod2R0X3JlZy0+ZXJyY3MsIG9yLCBuYW5kKTsKIAorCS8qIHNldCB0aGUgdGltZW91dCAoZWl0aGVyIGRlZmF1bHQgb3IgYmFzZWQgb24gbW9kdWxlIHBhcmFtKSAqLworCXJjMzI0MzRfd2R0X3NldCh0aW1lb3V0KTsKKwogCS8qIHJlc2V0IFdUQyB0aW1lb3V0IGJpdCBhbmQgZW5hYmxlIFdEVCAqLwogCW5hbmQgPSAxIDw8IFJDMzI0MzRfV1RDX1RPOwogCW9yID0gMSA8PCBSQzMyNDM0X1dUQ19FTjsKIAogCVNFVF9CSVRTKHdkdF9yZWctPnd0Yywgb3IsIG5hbmQpOworCisJc3Bpbl91bmxvY2soJnJjMzI0MzRfd2R0X2RldmljZS5pb19sb2NrKTsKKwlwcmludGsoS0VSTl9JTkZPIFBGWCAiU3RhcnRlZCB3YXRjaGRvZyB0aW1lci5cbiIpOwogfQogCiBzdGF0aWMgdm9pZCByYzMyNDM0X3dkdF9zdG9wKHZvaWQpCiB7CisJc3Bpbl9sb2NrKCZyYzMyNDM0X3dkdF9kZXZpY2UuaW9fbG9jayk7CisKIAkvKiBEaXNhYmxlIFdEVCAqLwogCVNFVF9CSVRTKHdkdF9yZWctPnd0YywgMCwgMSA8PCBSQzMyNDM0X1dUQ19FTik7Ci19CiAKLXN0YXRpYyBpbnQgcmMzMjQzNF93ZHRfc2V0KGludCBuZXdfdGltZW91dCkKLXsKLQlpbnQgbWF4X3RvID0gV1RDT01QMlNFQygodTMyKS0xKTsKLQotCWlmIChuZXdfdGltZW91dCA8IDAgfHwgbmV3X3RpbWVvdXQgPiBtYXhfdG8pIHsKLQkJcHJpbnRrKEtFUk5fRVJSIEtCVUlMRF9NT0ROQU1FCi0JCQkiOiB0aW1lb3V0IHZhbHVlIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAlZCIsCi0JCQltYXhfdG8pOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JdGltZW91dCA9IG5ld190aW1lb3V0OwotCXdyaXRlbChTRUMyV1RDT01QKHRpbWVvdXQpLCAmd2R0X3JlZy0+d3Rjb21wYXJlKTsKLQotCXJldHVybiAwOworCXNwaW5fdW5sb2NrKCZyYzMyNDM0X3dkdF9kZXZpY2UuaW9fbG9jayk7CisJcHJpbnRrKEtFUk5fSU5GTyBQRlggIlN0b3BwZWQgd2F0Y2hkb2cgdGltZXIuXG4iKTsKIH0KIAogc3RhdGljIHZvaWQgcmMzMjQzNF93ZHRfcGluZyh2b2lkKQogeworCXNwaW5fbG9jaygmcmMzMjQzNF93ZHRfZGV2aWNlLmlvX2xvY2spOwogCXdyaXRlbCgwLCAmd2R0X3JlZy0+d3Rjb3VudCk7CisJc3Bpbl91bmxvY2soJnJjMzI0MzRfd2R0X2RldmljZS5pb19sb2NrKTsKIH0KIAogc3RhdGljIGludCByYzMyNDM0X3dkdF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQpAQCAtMTM3LDExICsxNTgsMTAgQEAKIHsKIAlpZiAoZXhwZWN0X2Nsb3NlID09IDQyKSB7CiAJCXJjMzI0MzRfd2R0X3N0b3AoKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiBkaXNhYmxpbmcgd2F0Y2hkb2cgdGltZXJcbiIpOwogCQltb2R1bGVfcHV0KFRISVNfTU9EVUxFKTsKIAl9IGVsc2UgewotCQlwcmludGsoS0VSTl9DUklUIEtCVUlMRF9NT0ROQU1FCi0JCQkiOiBkZXZpY2UgY2xvc2VkIHVuZXhwZWN0ZWRseS4gV0RUIHdpbGwgbm90IHN0b3AgIVxuIik7CisJCXByaW50ayhLRVJOX0NSSVQgUEZYCisJCQkiZGV2aWNlIGNsb3NlZCB1bmV4cGVjdGVkbHkuIFdEVCB3aWxsIG5vdCBzdG9wIVxuIik7CiAJCXJjMzI0MzRfd2R0X3BpbmcoKTsKIAl9CiAJY2xlYXJfYml0KDAsICZyYzMyNDM0X3dkdF9kZXZpY2UuaW51c2UpOwpAQCAtMTg1LDggKzIwNSw5IEBACiAJCS5pZGVudGl0eSA9CQkiUkMzMjQzNF9XRFQgV2F0Y2hkb2ciLAogCX07CiAJc3dpdGNoIChjbWQpIHsKLQljYXNlIFdESU9DX0tFRVBBTElWRToKLQkJcmMzMjQzNF93ZHRfcGluZygpOworCWNhc2UgV0RJT0NfR0VUU1VQUE9SVDoKKwkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmaWRlbnQsIHNpemVvZihpZGVudCkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCWJyZWFrOwogCWNhc2UgV0RJT0NfR0VUU1RBVFVTOgogCWNhc2UgV0RJT0NfR0VUQk9PVFNUQVRVUzoKQEAgLTE5NCwxMCArMjE1LDYgQEAKIAkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmdmFsdWUsIHNpemVvZihpbnQpKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCQlicmVhazsKLQljYXNlIFdESU9DX0dFVFNVUFBPUlQ6Ci0JCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJmlkZW50LCBzaXplb2YoaWRlbnQpKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQlicmVhazsKIAljYXNlIFdESU9DX1NFVE9QVElPTlM6CiAJCWlmIChjb3B5X2Zyb21fdXNlcigmdmFsdWUsIGFyZ3AsIHNpemVvZihpbnQpKSkKIAkJCXJldHVybiAtRUZBVUxUOwpAQCAtMjEyLDYgKzIyOSw5IEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQlicmVhazsKKwljYXNlIFdESU9DX0tFRVBBTElWRToKKwkJcmMzMjQzNF93ZHRfcGluZygpOworCQlicmVhazsKIAljYXNlIFdESU9DX1NFVFRJTUVPVVQ6CiAJCWlmIChjb3B5X2Zyb21fdXNlcigmbmV3X3RpbWVvdXQsIGFyZ3AsIHNpemVvZihpbnQpKSkKIAkJCXJldHVybiAtRUZBVUxUOwpAQCAtMjI3LDcgKzI0Nyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJjMzI0MzRfd2R0X2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByYzMyNDM0X3dkdF9mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubGxzZWVrCQk9IG5vX2xsc2VlaywKIAkud3JpdGUJCT0gcmMzMjQzNF93ZHRfd3JpdGUsCkBAIC0yNDIsOCArMjYyLDggQEAKIAkuZm9wcwk9ICZyYzMyNDM0X3dkdF9mb3BzLAogfTsKIAotc3RhdGljIGNoYXIgYmFubmVyW10gX19kZXZpbml0ZGF0YSA9IEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRQotCQkiOiBXYXRjaGRvZyBUaW1lciB2ZXJzaW9uICIgVkVSU0lPTiAiLCB0aW1lciBtYXJnaW46ICVkIHNlY1xuIjsKK3N0YXRpYyBjaGFyIGJhbm5lcltdIF9fZGV2aW5pdGRhdGEgPSBLRVJOX0lORk8gUEZYCisJCSJXYXRjaGRvZyBUaW1lciB2ZXJzaW9uICIgVkVSU0lPTiAiLCB0aW1lciBtYXJnaW46ICVkIHNlY1xuIjsKIAogc3RhdGljIGludCBfX2RldmluaXQgcmMzMjQzNF93ZHRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKQEAgLTI1MiwyMiArMjcyLDMzIEBACiAKIAlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwgInJiNTMyX3dkdF9yZXMiKTsKIAlpZiAoIXIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIEtCVUlMRF9NT0ROQU1FCi0JCQkiZmFpbGVkIHRvIHJldHJpZXZlIHJlc291cmNlc1xuIik7CisJCXByaW50ayhLRVJOX0VSUiBQRlggImZhaWxlZCB0byByZXRyaWV2ZSByZXNvdXJjZXNcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAl3ZHRfcmVnID0gaW9yZW1hcF9ub2NhY2hlKHItPnN0YXJ0LCByLT5lbmQgLSByLT5zdGFydCk7CiAJaWYgKCF3ZHRfcmVnKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBLQlVJTERfTU9ETkFNRQotCQkJImZhaWxlZCB0byByZW1hcCBJL08gcmVzb3VyY2VzXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZmFpbGVkIHRvIHJlbWFwIEkvTyByZXNvdXJjZXNcbiIpOwogCQlyZXR1cm4gLUVOWElPOwogCX0KIAorCXNwaW5fbG9ja19pbml0KCZyYzMyNDM0X3dkdF9kZXZpY2UuaW9fbG9jayk7CisKKwkvKiBNYWtlIHN1cmUgdGhlIHdhdGNoZG9nIGlzIG5vdCBydW5uaW5nICovCisJcmMzMjQzNF93ZHRfc3RvcCgpOworCisJLyogQ2hlY2sgdGhhdCB0aGUgaGVhcnRiZWF0IHZhbHVlIGlzIHdpdGhpbiBpdCdzIHJhbmdlOworCSAqIGlmIG5vdCByZXNldCB0byB0aGUgZGVmYXVsdCAqLworCWlmIChyYzMyNDM0X3dkdF9zZXQodGltZW91dCkpIHsKKwkJcmMzMjQzNF93ZHRfc2V0KFdBVENIRE9HX1RJTUVPVVQpOworCQlwcmludGsoS0VSTl9JTkZPIFBGWAorCQkJInRpbWVvdXQgdmFsdWUgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kICVkXG4iLAorCQkJV1RDT01QMlNFQygodTMyKS0xKSk7CisJfQorCiAJcmV0ID0gbWlzY19yZWdpc3RlcigmcmMzMjQzNF93ZHRfbWlzY2Rldik7CiAJaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSIEtCVUlMRF9NT0ROQU1FCi0JCQkiZmFpbGVkIHRvIHJlZ2lzdGVyIHdhdGNoZG9nIGRldmljZVxuIik7CisJCXByaW50ayhLRVJOX0VSUiBQRlggImZhaWxlZCB0byByZWdpc3RlciB3YXRjaGRvZyBkZXZpY2VcbiIpOwogCQlnb3RvIHVubWFwOwogCX0KIApAQCAtMjg3LDIyICszMTgsMjggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcmMzMjQzNF93ZHQgPSB7Ci0JLnByb2JlCT0gcmMzMjQzNF93ZHRfcHJvYmUsCi0JLnJlbW92ZQk9IF9fZGV2ZXhpdF9wKHJjMzI0MzRfd2R0X3JlbW92ZSksCi0JLmRyaXZlcgk9IHsKLQkJLm5hbWUgPSAicmMzMjQzNF93ZHQiLAorc3RhdGljIHZvaWQgcmMzMjQzNF93ZHRfc2h1dGRvd24oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyYzMyNDM0X3dkdF9zdG9wKCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHJjMzI0MzRfd2R0X2RyaXZlciA9IHsKKwkucHJvYmUJCT0gcmMzMjQzNF93ZHRfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChyYzMyNDM0X3dkdF9yZW1vdmUpLAorCS5zaHV0ZG93bgk9IHJjMzI0MzRfd2R0X3NodXRkb3duLAorCS5kcml2ZXIJCT0geworCQkJLm5hbWUgPSAicmMzMjQzNF93ZHQiLAogCX0KIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHJjMzI0MzRfd2R0X2luaXQodm9pZCkKIHsKLQlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZyYzMyNDM0X3dkdCk7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmcmMzMjQzNF93ZHRfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHJjMzI0MzRfd2R0X2V4aXQodm9pZCkKIHsKLQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmcmMzMjQzNF93ZHQpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZyYzMyNDM0X3dkdF9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChyYzMyNDM0X3dkdF9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvcmlvd2QuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvcmlvd2QuYwppbmRleCAwOWNiMTgzLi4xZThmMDJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3Jpb3dkLmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9yaW93ZC5jCkBAIC0xNCw5ICsxNCw4IEBACiAjaW5jbHVkZSA8bGludXgvd2F0Y2hkb2cuaD4KICNpbmNsdWRlIDxsaW51eC9vZi5oPgogI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgotCi0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KIAogCiAvKiBSSU8gdXNlcyB0aGUgTmF0U2VtaSBTdXBlciBJL08gcG93ZXIgbWFuYWdlbWVudCBsb2dpY2FsIGRldmljZQpAQCAtODYsOCArODUsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHJpb3dkX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAotCQkgICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgbG9uZyByaW93ZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJc3RhdGljIHN0cnVjdCB3YXRjaGRvZ19pbmZvIGluZm8gPSB7CiAJCS5vcHRpb25zCQk9IFdESU9GX1NFVFRJTUVPVVQsCkBAIC0xNDcsNyArMTQ1LDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHNzaXplX3Qgcmlvd2Rfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQorc3RhdGljIHNzaXplX3Qgcmlvd2Rfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCisJCQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKIAlzdHJ1Y3Qgcmlvd2QgKnAgPSByaW93ZF9kZXZpY2U7CiAKQEAgLTE2MCwxMiArMTU5LDEyIEBACiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJpb3dkX2ZvcHMgPSB7Ci0JLm93bmVyID0JVEhJU19NT0RVTEUsCi0JLmxsc2VlayA9CW5vX2xsc2VlaywKLQkuaW9jdGwgPQlyaW93ZF9pb2N0bCwKLQkub3BlbiA9CQlyaW93ZF9vcGVuLAotCS53cml0ZSA9CXJpb3dkX3dyaXRlLAotCS5yZWxlYXNlID0Jcmlvd2RfcmVsZWFzZSwKKwkub3duZXIgPQkJVEhJU19NT0RVTEUsCisJLmxsc2VlayA9CQlub19sbHNlZWssCisJLnVubG9ja2VkX2lvY3RsID0Jcmlvd2RfaW9jdGwsCisJLm9wZW4gPQkJCXJpb3dkX29wZW4sCisJLndyaXRlID0JCXJpb3dkX3dyaXRlLAorCS5yZWxlYXNlID0JCXJpb3dkX3JlbGVhc2UsCiB9OwogCiBzdGF0aWMgc3RydWN0IG1pc2NkZXZpY2Ugcmlvd2RfbWlzY2RldiA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvcm05a193ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvcm05a193ZHQuYwppbmRleCBmMWFlMzcyOS4uY2NlMTk4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9ybTlrX3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvcm05a193ZHQuYwpAQCAtNTksOCArNTksOCBAQAogc3RhdGljIGludCB3ZHRfZ3BpX25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKiwgdW5zaWduZWQgbG9uZywgdm9pZCAqKTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKndkdF9ncGlfZ2V0X3Jlc291cmNlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKiwKIAkJCQkJCWNvbnN0IGNoYXIgKiwgdW5zaWduZWQgaW50KTsKLXN0YXRpYyBpbnQgX19pbml0IHdkdF9ncGlfcHJvYmUoc3RydWN0IGRldmljZSAqKTsKLXN0YXRpYyBpbnQgX19leGl0IHdkdF9ncGlfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKik7CitzdGF0aWMgaW50IF9faW5pdCB3ZHRfZ3BpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKik7CitzdGF0aWMgaW50IF9fZXhpdCB3ZHRfZ3BpX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICopOwogCiAKIHN0YXRpYyBjb25zdCBjaGFyIHdkdF9ncGlfbmFtZVtdID0gIndkdF9ncGkiOwpAQCAtMzQ2LDEwICszNDYsOSBAQAogfQogCiAvKiBObyBob3RwbHVnZ2luZyBvbiB0aGUgcGxhdGZvcm0gYnVzIC0gdXNlIF9faW5pdCAqLwotc3RhdGljIGludCBfX2luaXQgd2R0X2dwaV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9faW5pdCB3ZHRfZ3BpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkdikKIHsKIAlpbnQgcmVzOwotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKiBjb25zdCBwZHYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAljb25zdCBzdHJ1Y3QgcmVzb3VyY2UKIAkJKiBjb25zdCByciA9IHdkdF9ncGlfZ2V0X3Jlc291cmNlKHBkdiwgV0RUX1JFU09VUkNFX1JFR1MsCiAJCQkJCQkgIElPUkVTT1VSQ0VfTUVNKSwKQEAgLTM3NCw3ICszNzMsNyBAQAogCXJldHVybiByZXM7CiB9CiAKLXN0YXRpYyBpbnQgX19leGl0IHdkdF9ncGlfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19leGl0IHdkdF9ncGlfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlpbnQgcmVzOwogCkBAIC0zODcsMTUgKzM4NiwxMyBAQAogCiAKIC8qIERldmljZSBkcml2ZXIgaW5pdCAmIGV4aXQgKi8KLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciB3ZHRfZ3BpX2RyaXZlciA9IHsKLQkubmFtZQkJPSAoY2hhciAqKSB3ZHRfZ3BpX25hbWUsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCi0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgd2d0X2dwaV9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJCT0gd2R0X2dwaV9uYW1lLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJfSwKIAkucHJvYmUJCT0gd2R0X2dwaV9wcm9iZSwKLQkucmVtb3ZlCQk9IF9fZXhpdF9wKHdkdF9ncGlfcmVtb3ZlKSwKLQkuc2h1dGRvd24JPSBOVUxMLAotCS5zdXNwZW5kCT0gTlVMTCwKLQkucmVzdW1lCQk9IE5VTEwsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcCh3ZHRfZ3BpX3JlbW92ZSksCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCB3ZHRfZ3BpX2luaXRfbW9kdWxlKHZvaWQpCkBAIC00MDMsMTIgKzQwMCwxMiBAQAogCWF0b21pY19zZXQoJm9wZW5jbnQsIDEpOwogCWlmICh0aW1lb3V0ID4gTUFYX1RJTUVPVVRfU0VDT05EUykKIAkJdGltZW91dCA9IE1BWF9USU1FT1VUX1NFQ09ORFM7Ci0JcmV0dXJuIGRyaXZlcl9yZWdpc3Rlcigmd2R0X2dwaV9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJndkdF9ncGlfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHdkdF9ncGlfY2xlYW51cF9tb2R1bGUodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3Rlcigmd2R0X2dwaV9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ3ZHRfZ3BpX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KHdkdF9ncGlfaW5pdF9tb2R1bGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9zYTExMDBfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL3NhMTEwMF93ZHQuYwppbmRleCBlMTliNDU3Li41YmQ3ODJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3NhMTEwMF93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3NhMTEwMF93ZHQuYwpAQCAtMSw4ICsxLDggQEAKIC8qCiAgKglXYXRjaGRvZyBkcml2ZXIgZm9yIHRoZSBTQTExeDAvUFhBMnh4CiAgKgotICogICAgICAoYykgQ29weXJpZ2h0IDIwMDAgT2xlZyBEcm9raW4gPGdyZWVuQGNyaW1lYS5lZHU+Ci0gKiAgICAgICAgICBCYXNlZCBvbiBTb2Z0RG9nIGRyaXZlciBieSBBbGFuIENveCA8YWxhbkBseG9yZ3VrLnVrdXUub3JnLnVrPgorICoJKGMpIENvcHlyaWdodCAyMDAwIE9sZWcgRHJva2luIDxncmVlbkBjcmltZWEuZWR1PgorICoJICAgIEJhc2VkIG9uIFNvZnREb2cgZHJpdmVyIGJ5IEFsYW4gQ294IDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+CiAgKgogICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKQEAgLTE1LDcgKzE1LDcgQEAKICAqCiAgKgkoYykgQ29weXJpZ2h0IDIwMDAgICAgICAgICAgIE9sZWcgRHJva2luIDxncmVlbkBjcmltZWEuZWR1PgogICoKLSAqICAgICAgMjcvMTEvMjAwMCBJbml0aWFsIHJlbGVhc2UKKyAqCTI3LzExLzIwMDAgSW5pdGlhbCByZWxlYXNlCiAgKi8KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9zYmM2MHh4d2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL3NiYzYweHh3ZHQuYwppbmRleCAzMjY2ZGFhYWUuLmQxYzM5MGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvc2JjNjB4eHdkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvc2JjNjB4eHdkdC5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqCTYweHggU2luZ2xlIEJvYXJkIENvbXB1dGVyIFdhdGNoZG9nIFRpbWVyIGRyaXZlciBmb3IgTGludXggMi4yLngKICAqCi0gKiAgICAgIEJhc2VkIG9uIGFjcXVpcmV3ZHQuYyBieSBBbGFuIENveC4KKyAqCUJhc2VkIG9uIGFjcXVpcmV3ZHQuYyBieSBBbGFuIENveC4KICAqCiAgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9zYmM4MzYwLmMgYi9kcml2ZXJzL3dhdGNoZG9nL3NiYzgzNjAuYwppbmRleCBhZTc0ZjZiLi5iNmU2Nzk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3NiYzgzNjAuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3NiYzgzNjAuYwpAQCAtNCwxMiArNCwxMiBAQAogICoJKGMpIENvcHlyaWdodCAyMDA1IFdlYmNvbiwgSW5jLgogICoKICAqCUJhc2VkIG9uIGliNzAwd2R0LmMsIHdoaWNoIGlzIGJhc2VkIG9uIGFkdmFudGVjaHdkdC5jIHdoaWNoIGlzIGJhc2VkCi0gKiAgICAgIG9uIGFjcXVpcmV3ZHQuYyB3aGljaCBpcyBiYXNlZCBvbiB3ZHQuYy4KKyAqCW9uIGFjcXVpcmV3ZHQuYyB3aGljaCBpcyBiYXNlZCBvbiB3ZHQuYy4KICAqCiAgKgkoYykgQ29weXJpZ2h0IDIwMDEgQ2hhcmxlcyBIb3dlcyA8Y2hvd2VzQHZzb2wubmV0PgogICoKLSAqICAgICAgQmFzZWQgb24gYWR2YW50ZWNod2R0LmMgd2hpY2ggaXMgYmFzZWQgb24gYWNxdWlyZXdkdC5jIHdoaWNoCi0gKiAgICAgICBpcyBiYXNlZCBvbiB3ZHQuYy4KKyAqCUJhc2VkIG9uIGFkdmFudGVjaHdkdC5jIHdoaWNoIGlzIGJhc2VkIG9uIGFjcXVpcmV3ZHQuYyB3aGljaAorICoJaXMgYmFzZWQgb24gd2R0LmMuCiAgKgogICoJKGMpIENvcHlyaWdodCAyMDAwLTIwMDEgTWFyZWsgTWljaGFsa2lld2ljeiA8bWFyZWttQGxpbnV4Lm9yZy5wbD4KICAqCkBAIC0zMCw5ICszMCw5IEBACiAgKgogICoJKGMpIENvcHlyaWdodCAxOTk1ICAgIEFsYW4gQ294IDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+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/ICovCiB9OwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzcGR1LmggYi9mcy9jaWZzL2NpZnNwZHUuaAppbmRleCBiNGUyZTlmMC4uYjM3MDQ4OSAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzcGR1LmgKKysrIGIvZnMvY2lmcy9jaWZzcGR1LmgKQEAgLTEsNyArMSw3IEBACiAvKgogICogICBmcy9jaWZzL2NpZnNwZHUuaAogICoKLSAqICAgQ29weXJpZ2h0IChjKSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzICBDb3JwLiwgMjAwMiwyMDA4CisgKiAgIENvcHlyaWdodCAoYykgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyAgQ29ycC4sIDIwMDIsMjAwOQogICogICBBdXRob3Iocyk6IFN0ZXZlIEZyZW5jaCAoc2ZyZW5jaEB1cy5pYm0uY29tKQogICoKICAqICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTIzLDYgKzIzLDcgQEAKICNkZWZpbmUgX0NJRlNQRFVfSAogCiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KKyNpbmNsdWRlICJzbWJmc2N0bC5oIgogCiAjaWZkZWYgQ09ORklHX0NJRlNfV0VBS19QV19IQVNICiAjZGVmaW5lIExBTk1BTl9QUk9UIDAKQEAgLTM0LDE1ICszNSwxNSBAQAogI2RlZmluZSBQT1NJWF9QUk9UICAoQ0lGU19QUk9UKzEpCiAjZGVmaW5lIEJBRF9QUk9UIDB4RkZGRgogCi0vKiBTTUIgY29tbWFuZCBjb2RlcyAqLwotLyoKLSAqIFNvbWUgY29tbWFuZHMgaGF2ZSBtaW5pbWFsICh3Y3Q9MCxiY2M9MCksIG9yIHVuaW50ZXJlc3RpbmcsIHJlc3BvbnNlcworLyogU01CIGNvbW1hbmQgY29kZXM6CisgKiBOb3RlIHNvbWUgY29tbWFuZHMgaGF2ZSBtaW5pbWFsICh3Y3Q9MCxiY2M9MCksIG9yIHVuaW50ZXJlc3RpbmcsIHJlc3BvbnNlcwogICogKGllIHdoaWNoIGluY2x1ZGUgbm8gdXNlZnVsIGRhdGEgb3RoZXIgdGhhbiB0aGUgU01CIGVycm9yIGNvZGUgaXRzZWxmKS4KLSAqIEtub3dpbmcgdGhpcyBoZWxwcyBhdm9pZCByZXNwb25zZSBidWZmZXIgYWxsb2NhdGlvbnMgYW5kIGNvcHkgaW4gc29tZSBjYXNlcworICogVGhpcyBjYW4gYWxsb3cgdXMgdG8gYXZvaWQgcmVzcG9uc2UgYnVmZmVyIGFsbG9jYXRpb25zIGFuZCBjb3B5IGluIHNvbWUgY2FzZXMKICAqLwogI2RlZmluZSBTTUJfQ09NX0NSRUFURV9ESVJFQ1RPUlkgICAgICAweDAwIC8qIHRyaXZpYWwgcmVzcG9uc2UgKi8KICNkZWZpbmUgU01CX0NPTV9ERUxFVEVfRElSRUNUT1JZICAgICAgMHgwMSAvKiB0cml2aWFsIHJlc3BvbnNlICovCiAjZGVmaW5lIFNNQl9DT01fQ0xPU0UgICAgICAgICAgICAgICAgIDB4MDQgLyogdHJpdiByZXEvcnNwLCB0aW1lc3RhbXAgaWdub3JlZCAqLworI2RlZmluZSBTTUJfQ09NX0ZMVVNIICAgICAgICAgICAgICAgICAweDA1IC8qIHRyaXYgcmVxL3JzcCAqLwogI2RlZmluZSBTTUJfQ09NX0RFTEVURSAgICAgICAgICAgICAgICAweDA2IC8qIHRyaXZpYWwgcmVzcG9uc2UgKi8KICNkZWZpbmUgU01CX0NPTV9SRU5BTUUgICAgICAgICAgICAgICAgMHgwNyAvKiB0cml2aWFsIHJlc3BvbnNlICovCiAjZGVmaW5lIFNNQl9DT01fUVVFUllfSU5GT1JNQVRJT04gICAgIDB4MDggLyogYWthIGdldGF0dHIgKi8KQEAgLTc5MCw2ICs3OTEsMTIgQEAKIAlfX3UxNiBCeXRlQ291bnQ7CS8qIGJjdCA9IDAgKi8KIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgQ0xPU0VfUlNQOwogCit0eXBlZGVmIHN0cnVjdCBzbWJfY29tX2ZsdXNoX3JlcSB7CisJc3RydWN0IHNtYl9oZHIgaGRyOwkvKiB3Y3QgPSAxICovCisJX191MTYgRmlsZUlEOworCV9fdTE2IEJ5dGVDb3VudDsJLyogMCAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBGTFVTSF9SRVE7CisKIHR5cGVkZWYgc3RydWN0IHNtYl9jb21fZmluZGNsb3NlX3JlcSB7CiAJc3RydWN0IHNtYl9oZHIgaGRyOyAvKiB3Y3QgPSAxICovCiAJX191MTYgRmlsZUlEOwpAQCAtMTkyNCwxOSArMTkzMSwxOSBAQAogI2RlZmluZSBERlNfVFlQRV9ST09UIDB4MDAwMQogCiAvKiBSZWZlcnJhbCBFbnRyeSBGbGFncyAqLwotI2RlZmluZSBERlNfTkFNRV9MSVNUX1JFRiAweDAyMDAKKyNkZWZpbmUgREZTX05BTUVfTElTVF9SRUYgMHgwMjAwIC8qIHNldCBmb3IgZG9tYWluIG9yIERDIHJlZmVycmFsIHJlc3BvbnNlcyAqLworI2RlZmluZSBERlNfVEFSR0VUX1NFVF9CT1VOREFSWSAweDA0MDAgLyogb25seSB2YWxpZCB3aXRoIHZlcnNpb24gNCBkZnMgcmVxICovCiAKLXR5cGVkZWYgc3RydWN0IGRmc19yZWZlcnJhbF9sZXZlbF8zIHsKLQlfX2xlMTYgVmVyc2lvbk51bWJlcjsKK3R5cGVkZWYgc3RydWN0IGRmc19yZWZlcnJhbF9sZXZlbF8zIHsgLyogdmVyc2lvbiA0IGlzIHNhbWUsICsgb25lIGZsYWcgYml0ICovCisJX19sZTE2IFZlcnNpb25OdW1iZXI7ICAvKiBtdXN0IGJlIDMgb3IgNCAqLwogCV9fbGUxNiBTaXplOwogCV9fbGUxNiBTZXJ2ZXJUeXBlOyAvKiAweDAwMDEgPSByb290IHRhcmdldHM7IDB4MDAwMCA9IGxpbmsgdGFyZ2V0cyAqLwotCV9fbGUxNiBSZWZlcnJhbEVudHJ5RmxhZ3M7IC8qIDB4MDIwMCBiaXQgc2V0IG9ubHkgZm9yIGRvbWFpbgotCQkJCSAgICAgIG9yIERDIHJlZmVycmFsIHJlc3BvbmNlICovCisJX19sZTE2IFJlZmVycmFsRW50cnlGbGFnczsKIAlfX2xlMzIgVGltZVRvTGl2ZTsKIAlfX2xlMTYgRGZzUGF0aE9mZnNldDsKIAlfX2xlMTYgRGZzQWx0ZXJuYXRlUGF0aE9mZnNldDsKIAlfX2xlMTYgTmV0d29ya0FkZHJlc3NPZmZzZXQ7IC8qIG9mZnNldCBvZiB0aGUgbGluayB0YXJnZXQgKi8KLQlfX2xlMTYgU2VydmljZVNpdGVHdWlkOworCV9fdTggICBTZXJ2aWNlU2l0ZUd1aWRbMTZdOyAgLyogTUJaLCBpZ25vcmVkICovCiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIFJFRkVSUkFMMzsKIAogdHlwZWRlZiBzdHJ1Y3Qgc21iX2NvbV90cmFuc2FjdGlvbl9nZXRfZGZzX3JlZmVyX3JzcCB7CkBAIC0xOTQ2LDQ4ICsxOTUzLDE1IEBACiAJX191OCBQYWQ7CiAJX19sZTE2IFBhdGhDb25zdW1lZDsKIAlfX2xlMTYgTnVtYmVyT2ZSZWZlcnJhbHM7Ci0JX19sZTE2IERGU0ZsYWdzOwotCV9fdTE2IFBhZDI7CisJX19sZTMyIERGU0ZsYWdzOwogCVJFRkVSUkFMMyByZWZlcnJhbHNbMV07CS8qIGFycmF5IG9mIGxldmVsIDMgZGZzX3JlZmVycmFsIHN0cnVjdHVyZXMgKi8KIAkvKiBmb2xsb3dlZCBieSB0aGUgc3RyaW5ncyBwb2ludGVkIHRvIGJ5IHRoZSByZWZlcnJhbCBzdHJ1Y3R1cmVzICovCiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIFRSQU5TQUNUSU9OMl9HRVRfREZTX1JFRkVSX1JTUDsKIAogLyogREZTIEZsYWdzICovCi0jZGVmaW5lIERGU1JFRl9SRUZFUlJBTF9TRVJWRVIgIDB4MDAwMQotI2RlZmluZSBERlNSRUZfU1RPUkFHRV9TRVJWRVIgICAweDAwMDIKLQotLyogSU9DVEwgaW5mb3JtYXRpb24gKi8KLS8qCi0gKiBMaXN0IG9mIGlvY3RsIGZ1bmN0aW9uIGNvZGVzIHRoYXQgbG9vayB0byBiZSBvZiBpbnRlcmVzdCB0byByZW1vdGUgY2xpZW50cwotICogbGlrZSB0aGlzIG9uZS4gIE5lZWQgdG8gZG8gc29tZSBleHBlcmltZW50YXRpb24gdG8gbWFrZSBzdXJlIHRoZXkgYWxsIHdvcmsKLSAqIHJlbW90ZWx5LiAgU29tZSBvZiB0aGUgZm9sbG93aW5nLCBzdWNoIGFzIHRoZSBlbmNyeXB0aW9uL2NvbXByZXNzaW9uIG9uZXMKLSAqIHdvdWxkIGJlIGludm9rZWQgZnJvbSB0b29scyB2aWEgYSBzcGVjaWFsaXplZCBob29rIGludG8gdGhlIFZGUyByYXRoZXIKLSAqIHRoYW4gdmlhIHRoZSBzdGFuZGFyZCB2ZnMgZW50cnkgcG9pbnRzCi0gKi8KLSNkZWZpbmUgRlNDVExfUkVRVUVTVF9PUExPQ0tfTEVWRUxfMSAweDAwMDkwMDAwCi0jZGVmaW5lIEZTQ1RMX1JFUVVFU1RfT1BMT0NLX0xFVkVMXzIgMHgwMDA5MDAwNAotI2RlZmluZSBGU0NUTF9SRVFVRVNUX0JBVENIX09QTE9DSyAgIDB4MDAwOTAwMDgKLSNkZWZpbmUgRlNDVExfTE9DS19WT0xVTUUgICAgICAgICAgICAweDAwMDkwMDE4Ci0jZGVmaW5lIEZTQ1RMX1VOTE9DS19WT0xVTUUgICAgICAgICAgMHgwMDA5MDAxQwotI2RlZmluZSBGU0NUTF9HRVRfQ09NUFJFU1NJT04gICAgICAgIDB4MDAwOTAwM0MKLSNkZWZpbmUgRlNDVExfU0VUX0NPTVBSRVNTSU9OICAgICAgICAweDAwMDlDMDQwCi0jZGVmaW5lIEZTQ1RMX1JFUVVFU1RfRklMVEVSX09QTE9DSyAgMHgwMDA5MDA4QwotI2RlZmluZSBGU0NUTF9GSUxFU1lTX0dFVF9TVEFUSVNUSUNTIDB4MDAwOTAwOTAKLSNkZWZpbmUgRlNDVExfU0VUX1JFUEFSU0VfUE9JTlQgICAgICAweDAwMDkwMEE0Ci0jZGVmaW5lIEZTQ1RMX0dFVF9SRVBBUlNFX1BPSU5UICAgICAgMHgwMDA5MDBBOAotI2RlZmluZSBGU0NUTF9ERUxFVEVfUkVQQVJTRV9QT0lOVCAgIDB4MDAwOTAwQUMKLSNkZWZpbmUgRlNDVExfU0VUX1NQQVJTRSAgICAgICAgICAgICAweDAwMDkwMEM0Ci0jZGVmaW5lIEZTQ1RMX1NFVF9aRVJPX0RBVEEgICAgICAgICAgMHgwMDA5MDBDOAotI2RlZmluZSBGU0NUTF9TRVRfRU5DUllQVElPTiAgICAgICAgIDB4MDAwOTAwRDcKLSNkZWZpbmUgRlNDVExfRU5DUllQVElPTl9GU0NUTF9JTyAgICAweDAwMDkwMERCCi0jZGVmaW5lIEZTQ1RMX1dSSVRFX1JBV19FTkNSWVBURUQgICAgMHgwMDA5MDBERgotI2RlZmluZSBGU0NUTF9SRUFEX1JBV19FTkNSWVBURUQgICAgIDB4MDAwOTAwRTMKLSNkZWZpbmUgRlNDVExfU0lTX0NPUFlGSUxFICAgICAgICAgICAweDAwMDkwMTAwCi0jZGVmaW5lIEZTQ1RMX1NJU19MSU5LX0ZJTEVTICAgICAgICAgMHgwMDA5QzEwNAotCi0jZGVmaW5lIElPX1JFUEFSU0VfVEFHX01PVU5UX1BPSU5UICAgMHhBMDAwMDAwMwotI2RlZmluZSBJT19SRVBBUlNFX1RBR19IU00gICAgICAgICAgIDB4QzAwMDAwMDQKLSNkZWZpbmUgSU9fUkVQQVJTRV9UQUdfU0lTICAgICAgICAgICAweDgwMDAwMDA3CisjZGVmaW5lIERGU1JFRl9SRUZFUlJBTF9TRVJWRVIgIDB4MDAwMDAwMDEgLyogYWxsIHRhcmdldHMgYXJlIERGUyByb290cyAqLworI2RlZmluZSBERlNSRUZfU1RPUkFHRV9TRVJWRVIgICAweDAwMDAwMDAyIC8qIG5vIGZ1cnRoZXIgcmVmIHJlcXVlc3RzIG5lZWRlZCAqLworI2RlZmluZSBERlNSRUZfVEFSR0VUX0ZBSUxCQUNLICAweDAwMDAwMDA0IC8qIG9ubHkgZm9yIERGUyByZWZlcnJhbCB2ZXJzaW9uIDQgKi8KIAogLyoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTI1MDgsOCArMjQ4Miw2IEBACiAJNikgVXNlIG5hbm9zZWNvbmQgdGltZXN0YW1wcyB0aHJvdWdob3V0IGFsbCB0aW1lIGZpZWxkcyBpZgogCSAgIGNvcnJlc3BvbmRpbmcgYXR0cmlidXRlIGZsYWcgaXMgc2V0CiAJNykgc2VuZGZpbGUgLSBoYW5kbGUgYmFzZWQgY29weQotCTgpIERpcmVjdCBpL28KLQk5KSBNaXNjIGZjbnRscz8KIAogCXdoYXQgYWJvdXQgZml4aW5nIDY0IGJpdCBhbGlnbm1lbnQKIApAQCAtMjYyOCw3ICsyNjAwLDUgQEAKIAlfX2xlNjQJbW9kZTsgLyogbGlzdCBvZiBhY3R1YWwgYXR0cmlidXRlIGJpdHMgb24gdGhpcyBpbm9kZSAqLwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBGSUxFX0NIQVRUUl9JTkZPOyAgLyogZXh0IGF0dHJpYnV0ZXMKIAkJCQkJCShjaGF0dHIsIGNoZmxhZ3MpIGxldmVsIDB4MjA2ICovCi0KLSNlbmRpZgotCisjZW5kaWYgCQkJCS8qIFBPU0lYICovCiAjZW5kaWYJCQkJLyogX0NJRlNQRFVfSCAqLwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzcHJvdG8uaCBiL2ZzL2NpZnMvY2lmc3Byb3RvLmgKaW5kZXggMDgzZGZjNS4uNDE2NzcxNiAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzcHJvdG8uaAorKysgYi9mcy9jaWZzL2NpZnNwcm90by5oCkBAIC00NCw2ICs0NCw5IEBACiBleHRlcm4gY2hhciAqYnVpbGRfcGF0aF9mcm9tX2RlbnRyeShzdHJ1Y3QgZGVudHJ5ICopOwogZXh0ZXJuIGNoYXIgKmNpZnNfYnVpbGRfcGF0aF90b19yb290KHN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2IpOwogZXh0ZXJuIGNoYXIgKmJ1aWxkX3dpbGRjYXJkX3BhdGhfZnJvbV9kZW50cnkoc3RydWN0IGRlbnRyeSAqZGlyZW50cnkpOworZXh0ZXJuIGNoYXIgKmNpZnNfY29tcG9zZV9tb3VudF9vcHRpb25zKGNvbnN0IGNoYXIgKnNiX21vdW50ZGF0YSwKKwkJY29uc3QgY2hhciAqZnVsbHBhdGgsIGNvbnN0IHN0cnVjdCBkZnNfaW5mbzNfcGFyYW0gKnJlZiwKKwkJY2hhciAqKmRldm5hbWUpOwogLyogZXh0ZXJuIHZvaWQgcmVuZXdfcGFyZW50YWxfdGltZXN0YW1wcyhzdHJ1Y3QgZGVudHJ5ICpkaXJlbnRyeSk7Ki8KIGV4dGVybiBpbnQgU2VuZFJlY2VpdmUoY29uc3QgdW5zaWduZWQgaW50IC8qIHhpZCAqLyAsIHN0cnVjdCBjaWZzU2VzSW5mbyAqLAogCQkJc3RydWN0IHNtYl9oZHIgKiAvKiBpbnB1dCAqLyAsCkBAIC05Miw2ICs5NSw5IEBACiBleHRlcm4gX19sZTY0IGNudnJ0RG9zQ2lmc1RtKF9fdTE2IGRhdGUsIF9fdTE2IHRpbWUpOwogZXh0ZXJuIHN0cnVjdCB0aW1lc3BlYyBjbnZydERvc1VuaXhUbShfX3UxNiBkYXRlLCBfX3UxNiB0aW1lKTsKIAorZXh0ZXJuIGludCBjaWZzX3Bvc2l4X29wZW4oY2hhciAqZnVsbF9wYXRoLCBzdHJ1Y3QgaW5vZGUgKipwaW5vZGUsCisJCQkgICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgbW9kZSwgaW50IG9mbGFncywKKwkJCSAgIGludCAqcG9wbG9jaywgX191MTYgKnBuZXRmaWQsIGludCB4aWQpOwogZXh0ZXJuIHZvaWQgcG9zaXhfZmlsbF9pbl9pbm9kZShzdHJ1Y3QgaW5vZGUgKnRtcF9pbm9kZSwKIAkJCQlGSUxFX1VOSVhfQkFTSUNfSU5GTyAqcERhdGEsIGludCBpc05ld0lub2RlKTsKIGV4dGVybiBzdHJ1Y3QgaW5vZGUgKmNpZnNfbmV3X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIF9fdTY0ICppbnVtKTsKQEAgLTI4MSw2ICsyODcsOSBAQAogZXh0ZXJuIGludCBDSUZTU01CQ2xvc2UoY29uc3QgaW50IHhpZCwgc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbiwKIAkJCWNvbnN0IGludCBzbWJfZmlsZV9pZCk7CiAKK2V4dGVybiBpbnQgQ0lGU1NNQkZsdXNoKGNvbnN0IGludCB4aWQsIHN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb24sCisJCQljb25zdCBpbnQgc21iX2ZpbGVfaWQpOworCiBleHRlcm4gaW50IENJRlNTTUJSZWFkKGNvbnN0IGludCB4aWQsIHN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb24sCiAJCQljb25zdCBpbnQgbmV0ZmlkLCB1bnNpZ25lZCBpbnQgY291bnQsCiAJCQljb25zdCBfX3U2NCBsc2VlaywgdW5zaWduZWQgaW50ICpuYnl0ZXMsIGNoYXIgKipidWYsCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNzbWIuYyBiL2ZzL2NpZnMvY2lmc3NtYi5jCmluZGV4IDkzOWUyZjcuLmJjMDljOTkgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc3NtYi5jCisrKyBiL2ZzL2NpZnMvY2lmc3NtYi5jCkBAIC0xOTM0LDYgKzE5MzQsMjcgQEAKIH0KIAogaW50CitDSUZTU01CRmx1c2goY29uc3QgaW50IHhpZCwgc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbiwgaW50IHNtYl9maWxlX2lkKQoreworCWludCByYyA9IDA7CisJRkxVU0hfUkVRICpwU01CID0gTlVMTDsKKwljRllJKDEsICgiSW4gQ0lGU1NNQkZsdXNoIikpOworCisJcmMgPSBzbWFsbF9zbWJfaW5pdChTTUJfQ09NX0ZMVVNILCAxLCB0Y29uLCAodm9pZCAqKikgJnBTTUIpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJcFNNQi0+RmlsZUlEID0gKF9fdTE2KSBzbWJfZmlsZV9pZDsKKwlwU01CLT5CeXRlQ291bnQgPSAwOworCXJjID0gU2VuZFJlY2VpdmVOb1JzcCh4aWQsIHRjb24tPnNlcywgKHN0cnVjdCBzbWJfaGRyICopIHBTTUIsIDApOworCWNpZnNfc3RhdHNfaW5jKCZ0Y29uLT5udW1fZmx1c2hlcyk7CisJaWYgKHJjKQorCQljRVJST1IoMSwgKCJTZW5kIGVycm9yIGluIEZsdXNoID0gJWQiLCByYykpOworCisJcmV0dXJuIHJjOworfQorCitpbnQKIENJRlNTTUJSZW5hbWUoY29uc3QgaW50IHhpZCwgc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbiwKIAkgICAgICBjb25zdCBjaGFyICpmcm9tTmFtZSwgY29uc3QgY2hhciAqdG9OYW1lLAogCSAgICAgIGNvbnN0IHN0cnVjdCBubHNfdGFibGUgKm5sc19jb2RlcGFnZSwgaW50IHJlbWFwKQpAQCAtMjM1Niw4ICsyMzc3LDEwIEBACiAJCQkJICAgICBQQVRIX01BWCwgbmxzX2NvZGVwYWdlLCByZW1hcCk7CiAJCW5hbWVfbGVuKys7CS8qIHRyYWlsaW5nIG51bGwgKi8KIAkJbmFtZV9sZW4gKj0gMjsKLQkJcFNNQi0+T2xkRmlsZU5hbWVbbmFtZV9sZW5dID0gMDsJLyogcGFkICovCi0JCXBTTUItPk9sZEZpbGVOYW1lW25hbWVfbGVuICsgMV0gPSAweDA0OworCisJCS8qIHByb3RvY29sIHNwZWNpZmllcyBBU0NJSSBidWZmZXIgZm9ybWF0ICgweDA0KSBmb3IgdW5pY29kZSAqLworCQlwU01CLT5PbGRGaWxlTmFtZVtuYW1lX2xlbl0gPSAweDA0OworCQlwU01CLT5PbGRGaWxlTmFtZVtuYW1lX2xlbiArIDFdID0gMHgwMDsgLyogcGFkICovCiAJCW5hbWVfbGVuMiA9CiAJCSAgICBjaWZzQ29udmVydFRvVUNTKChfX2xlMTYgKikmcFNNQi0+T2xkRmlsZU5hbWVbbmFtZV9sZW4gKyAyXSwKIAkJCQkgICAgIHRvTmFtZSwgUEFUSF9NQVgsIG5sc19jb2RlcGFnZSwgcmVtYXApOwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jb25uZWN0LmMgYi9mcy9jaWZzL2Nvbm5lY3QuYwppbmRleCBkYTBmNGZmLi4wZGUzYjU2MSAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jb25uZWN0LmMKKysrIGIvZnMvY2lmcy9jb25uZWN0LmMKQEAgLTk1LDYgKzk1LDcgQEAKIAlib29sIGxvY2FsX2xlYXNlOjE7IC8qIGNoZWNrIGxlYXNlcyBvbmx5IG9uIGxvY2FsIHN5c3RlbSwgbm90IHJlbW90ZSAqLwogCWJvb2wgbm9ibG9ja3NuZDoxOwogCWJvb2wgbm9hdXRvdHVuZToxOworCWJvb2wgbm9zdHJpY3RzeW5jOjE7IC8qIGRvIG5vdCBmb3JjZSBleHBlbnNpdmUgU01CZmx1c2ggb24gZXZlcnkgc3luYyAqLwogCXVuc2lnbmVkIGludCByc2l6ZTsKIAl1bnNpZ25lZCBpbnQgd3NpemU7CiAJdW5zaWduZWQgaW50IHNvY2tvcHQ7CkBAIC0xMjc0LDYgKzEyNzUsMTAgQEAKIAkJCXZvbC0+aW50ciA9IDA7CiAJCX0gZWxzZSBpZiAoc3RybmljbXAoZGF0YSwgImludHIiLCA0KSA9PSAwKSB7CiAJCQl2b2wtPmludHIgPSAxOworCQl9IGVsc2UgaWYgKHN0cm5pY21wKGRhdGEsICJub3N0cmljdHN5bmMiLCAxMikgPT0gMCkgeworCQkJdm9sLT5ub3N0cmljdHN5bmMgPSAxOworCQl9IGVsc2UgaWYgKHN0cm5pY21wKGRhdGEsICJzdHJpY3RzeW5jIiwgMTApID09IDApIHsKKwkJCXZvbC0+bm9zdHJpY3RzeW5jID0gMDsKIAkJfSBlbHNlIGlmIChzdHJuaWNtcChkYXRhLCAic2VydmVyaW5vIiwgNykgPT0gMCkgewogCQkJdm9sLT5zZXJ2ZXJfaW5vID0gMTsKIAkJfSBlbHNlIGlmIChzdHJuaWNtcChkYXRhLCAibm9zZXJ2ZXJpbm8iLCA5KSA9PSAwKSB7CkBAIC0yMTYwLDYgKzIxNjUsOCBAQAogCQljaWZzX3NiLT5tbnRfY2lmc19mbGFncyB8PSBDSUZTX01PVU5UX1VOWF9FTVVMOwogCWlmIChwdm9sdW1lX2luZm8tPm5vYnJsKQogCQljaWZzX3NiLT5tbnRfY2lmc19mbGFncyB8PSBDSUZTX01PVU5UX05PX0JSTDsKKwlpZiAocHZvbHVtZV9pbmZvLT5ub3N0cmljdHN5bmMpCisJCWNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzIHw9IENJRlNfTU9VTlRfTk9TU1lOQzsKIAlpZiAocHZvbHVtZV9pbmZvLT5tYW5kX2xvY2spCiAJCWNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzIHw9IENJRlNfTU9VTlRfTk9QT1NJWEJSTDsKIAlpZiAocHZvbHVtZV9pbmZvLT5jaWZzX2FjbCkKQEAgLTM2NjcsNyArMzY3NCw3IEBACiAJCQkgICAgQkNDKHNtYl9idWZmZXJfcmVzcG9uc2UpKSB7CiAJCQkJa2ZyZWUodGNvbi0+bmF0aXZlRmlsZVN5c3RlbSk7CiAJCQkJdGNvbi0+bmF0aXZlRmlsZVN5c3RlbSA9Ci0JCQkJICAgIGt6YWxsb2MobGVuZ3RoICsgMiwgR0ZQX0tFUk5FTCk7CisJCQkJICAgIGt6YWxsb2MoMioobGVuZ3RoICsgMSksIEdGUF9LRVJORUwpOwogCQkJCWlmICh0Y29uLT5uYXRpdmVGaWxlU3lzdGVtKQogCQkJCQljaWZzX3N0cmZyb21VQ1NfbGUoCiAJCQkJCQl0Y29uLT5uYXRpdmVGaWxlU3lzdGVtLApkaWZmIC0tZ2l0IGEvZnMvY2lmcy9kaXIuYyBiL2ZzL2NpZnMvZGlyLmMKaW5kZXggODlmYjcyOC4uZjliNmY2OCAxMDA2NDQKLS0tIGEvZnMvY2lmcy9kaXIuYworKysgYi9mcy9jaWZzL2Rpci5jCkBAIC0xMjksNyArMTI5LDcgQEAKIAlyZXR1cm4gZnVsbF9wYXRoOwogfQogCi1zdGF0aWMgaW50IGNpZnNfcG9zaXhfb3BlbihjaGFyICpmdWxsX3BhdGgsIHN0cnVjdCBpbm9kZSAqKnBpbm9kZSwKK2ludCBjaWZzX3Bvc2l4X29wZW4oY2hhciAqZnVsbF9wYXRoLCBzdHJ1Y3QgaW5vZGUgKipwaW5vZGUsCiAJCSAgICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgbW9kZSwgaW50IG9mbGFncywKIAkJICAgIGludCAqcG9wbG9jaywgX191MTYgKnBuZXRmaWQsIGludCB4aWQpCiB7CkBAIC0xODcsNyArMTg3LDkgQEAKIAlpZiAoIXBpbm9kZSkKIAkJZ290byBwb3NpeF9vcGVuX3JldDsgLyogY2FsbGVyIGRvZXMgbm90IG5lZWQgaW5mbyAqLwogCi0JKnBpbm9kZSA9IGNpZnNfbmV3X2lub2RlKHNiLCAmcHJlc3BfZGF0YS0+VW5pcXVlSWQpOworCWlmICgqcGlub2RlID09IE5VTEwpCisJCSpwaW5vZGUgPSBjaWZzX25ld19pbm9kZShzYiwgJnByZXNwX2RhdGEtPlVuaXF1ZUlkKTsKKwkvKiBlbHNlIGFuIGlub2RlIHdhcyBwYXNzZWQgaW4uIFVwZGF0ZSBpdHMgaW5mbywgZG9uJ3QgY3JlYXRlIG9uZSAqLwogCiAJLyogV2UgZG8gbm90IG5lZWQgdG8gY2xvc2UgdGhlIGZpbGUgaWYgbmV3X2lub2RlIGZhaWxzIHNpbmNlCiAJICAgdGhlIGNhbGxlciB3aWxsIHJldHJ5IHFwYXRoaW5mbyBhcyBsb25nIGFzIGlub2RlIGlzIG51bGwgKi8KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvZmlsZS5jIGIvZnMvY2lmcy9maWxlLmMKaW5kZXggMTJiYjY1Ni4uODE3NDdhYyAxMDA2NDQKLS0tIGEvZnMvY2lmcy9maWxlLmMKKysrIGIvZnMvY2lmcy9maWxlLmMKQEAgLTc4LDggKzc4LDM2IEBACiAJcmV0dXJuIChSRUFEX0NPTlRST0wgfCBGSUxFX1dSSVRFX0FUVFJJQlVURVMgfCBGSUxFX1JFQURfQVRUUklCVVRFUyB8CiAJCUZJTEVfV1JJVEVfRUEgfCBGSUxFX0FQUEVORF9EQVRBIHwgRklMRV9XUklURV9EQVRBIHwKIAkJRklMRV9SRUFEX0RBVEEpOworfQogCitzdGF0aWMgaW5saW5lIGZtb2RlX3QgY2lmc19wb3NpeF9jb252ZXJ0X2ZsYWdzKHVuc2lnbmVkIGludCBmbGFncykKK3sKKwlmbW9kZV90IHBvc2l4X2ZsYWdzID0gMDsKIAorCWlmICgoZmxhZ3MgJiBPX0FDQ01PREUpID09IE9fUkRPTkxZKQorCQlwb3NpeF9mbGFncyA9IEZNT0RFX1JFQUQ7CisJZWxzZSBpZiAoKGZsYWdzICYgT19BQ0NNT0RFKSA9PSBPX1dST05MWSkKKwkJcG9zaXhfZmxhZ3MgPSBGTU9ERV9XUklURTsKKwllbHNlIGlmICgoZmxhZ3MgJiBPX0FDQ01PREUpID09IE9fUkRXUikgeworCQkvKiBHRU5FUklDX0FMTCBpcyB0b28gbXVjaCBwZXJtaXNzaW9uIHRvIHJlcXVlc3QKKwkJICAgY2FuIGNhdXNlIHVubmVjZXNzYXJ5IGFjY2VzcyBkZW5pZWQgb24gY3JlYXRlICovCisJCS8qIHJldHVybiBHRU5FUklDX0FMTDsgKi8KKwkJcG9zaXhfZmxhZ3MgPSBGTU9ERV9SRUFEIHwgRk1PREVfV1JJVEU7CisJfQorCS8qIGNhbiBub3QgbWFwIE9fQ1JFQVQgb3IgT19FWENMIG9yIE9fVFJVTkMgZmxhZ3Mgd2hlbgorCSAgIHJlb3BlbmluZyBhIGZpbGUuICBUaGV5IGhhZCB0aGVpciBlZmZlY3Qgb24gdGhlIG9yaWdpbmFsIG9wZW4gKi8KKwlpZiAoZmxhZ3MgJiBPX0FQUEVORCkKKwkJcG9zaXhfZmxhZ3MgfD0gKGZtb2RlX3QpT19BUFBFTkQ7CisJaWYgKGZsYWdzICYgT19TWU5DKQorCQlwb3NpeF9mbGFncyB8PSAoZm1vZGVfdClPX1NZTkM7CisJaWYgKGZsYWdzICYgT19ESVJFQ1RPUlkpCisJCXBvc2l4X2ZsYWdzIHw9IChmbW9kZV90KU9fRElSRUNUT1JZOworCWlmIChmbGFncyAmIE9fTk9GT0xMT1cpCisJCXBvc2l4X2ZsYWdzIHw9IChmbW9kZV90KU9fTk9GT0xMT1c7CisJaWYgKGZsYWdzICYgT19ESVJFQ1QpCisJCXBvc2l4X2ZsYWdzIHw9IChmbW9kZV90KU9fRElSRUNUOworCisJcmV0dXJuIHBvc2l4X2ZsYWdzOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBjaWZzX2dldF9kaXNwb3NpdGlvbih1bnNpZ25lZCBpbnQgZmxhZ3MpCkBAIC05Nyw2ICsxMjUsODAgQEAKIH0KIAogLyogYWxsIGFyZ3VtZW50cyB0byB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgY2hlY2tlZCBmb3IgdmFsaWRpdHkgaW4gY2FsbGVyICovCitzdGF0aWMgaW5saW5lIGludCBjaWZzX3Bvc2l4X29wZW5faW5vZGVfaGVscGVyKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQlzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGNpZnNJbm9kZUluZm8gKnBDaWZzSW5vZGUsCisJCQlzdHJ1Y3QgY2lmc0ZpbGVJbmZvICpwQ2lmc0ZpbGUsIGludCBvcGxvY2ssIHUxNiBuZXRmaWQpCit7CisJc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYiA9IENJRlNfU0IoaW5vZGUtPmlfc2IpOworLyoJc3RydWN0IHRpbWVzcGVjIHRlbXA7ICovICAgLyogQkIgUkVNT1ZFTUUgQkIgKi8KKworCWZpbGUtPnByaXZhdGVfZGF0YSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBjaWZzRmlsZUluZm8pLCBHRlBfS0VSTkVMKTsKKwlpZiAoZmlsZS0+cHJpdmF0ZV9kYXRhID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCXBDaWZzRmlsZSA9IGNpZnNfaW5pdF9wcml2YXRlKGZpbGUtPnByaXZhdGVfZGF0YSwgaW5vZGUsIGZpbGUsIG5ldGZpZCk7CisJd3JpdGVfbG9jaygmR2xvYmFsU01CU2VzbG9jayk7CisJbGlzdF9hZGQoJnBDaWZzRmlsZS0+dGxpc3QsICZjaWZzX3NiLT50Y29uLT5vcGVuRmlsZUxpc3QpOworCisJcENpZnNJbm9kZSA9IENJRlNfSShmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKKwlpZiAocENpZnNJbm9kZSA9PSBOVUxMKSB7CisJCXdyaXRlX3VubG9jaygmR2xvYmFsU01CU2VzbG9jayk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIHdhbnQgaGFuZGxlcyB3ZSBjYW4gdXNlIHRvIHJlYWQgd2l0aCBmaXJzdAorCSAgIGluIHRoZSBsaXN0IHNvIHdlIGRvIG5vdCBoYXZlIHRvIHdhbGsgdGhlCisJICAgbGlzdCB0byBzZWFyY2ggZm9yIG9uZSBpbiB3cml0ZV9iZWdpbiAqLworCWlmICgoZmlsZS0+Zl9mbGFncyAmIE9fQUNDTU9ERSkgPT0gT19XUk9OTFkpIHsKKwkJbGlzdF9hZGRfdGFpbCgmcENpZnNGaWxlLT5mbGlzdCwKKwkJCSAgICAgICZwQ2lmc0lub2RlLT5vcGVuRmlsZUxpc3QpOworCX0gZWxzZSB7CisJCWxpc3RfYWRkKCZwQ2lmc0ZpbGUtPmZsaXN0LAorCQkJICZwQ2lmc0lub2RlLT5vcGVuRmlsZUxpc3QpOworCX0KKworCWlmIChwQ2lmc0lub2RlLT5jbGllbnRDYW5DYWNoZVJlYWQpIHsKKwkJLyogd2UgaGF2ZSB0aGUgaW5vZGUgb3BlbiBzb21ld2hlcmUgZWxzZQorCQkgICBubyBuZWVkIHRvIGRpc2NhcmQgY2FjaGUgZGF0YSAqLworCQlnb3RvIHBzeF9jbGllbnRfY2FuX2NhY2hlOworCX0KKworCS8qIEJCIEZJWE1FIG5lZWQgdG8gZml4IHRoaXMgY2hlY2sgdG8gbW92ZSBpdCBlYXJsaWVyIGludG8gcG9zaXhfb3BlbgorCSAgIEJCICBmSVggZm9sbG93aW5nIHNlY3Rpb24gQkIgRklYTUUgKi8KKworCS8qIGlmIG5vdCBvcGxvY2tlZCwgaW52YWxpZGF0ZSBpbm9kZSBwYWdlcyBpZiBtdGltZSBvciBmaWxlCisJICAgc2l6ZSBjaGFuZ2VkICovCisvKgl0ZW1wID0gY2lmc19OVHRpbWVUb1VuaXgobGU2NF90b19jcHUoYnVmLT5MYXN0V3JpdGVUaW1lKSk7CisJaWYgKHRpbWVzcGVjX2VxdWFsKCZmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX210aW1lLCAmdGVtcCkgJiYKKwkJCSAgIChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX3NpemUgPT0KKwkJCSAgICAobG9mZl90KWxlNjRfdG9fY3B1KGJ1Zi0+RW5kT2ZGaWxlKSkpIHsKKwkJY0ZZSSgxLCAoImlub2RlIHVuY2hhbmdlZCBvbiBzZXJ2ZXIiKSk7CisJfSBlbHNlIHsKKwkJaWYgKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfbWFwcGluZykgeworCQkJcmMgPSBmaWxlbWFwX3dyaXRlX2FuZF93YWl0KGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfbWFwcGluZyk7CisJCQlpZiAocmMgIT0gMCkKKwkJCQlDSUZTX0koZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSktPndyaXRlX2JlaGluZF9yYyA9IHJjOworCQl9CisJCWNGWUkoMSwgKCJpbnZhbGlkYXRpbmcgcmVtb3RlIGlub2RlIHNpbmNlIG9wZW4gZGV0ZWN0ZWQgaXQgIgorCQkJICJjaGFuZ2VkIikpOworCQlpbnZhbGlkYXRlX3JlbW90ZV9pbm9kZShmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKKwl9ICovCisKK3BzeF9jbGllbnRfY2FuX2NhY2hlOgorCWlmICgob3Bsb2NrICYgMHhGKSA9PSBPUExPQ0tfRVhDTFVTSVZFKSB7CisJCXBDaWZzSW5vZGUtPmNsaWVudENhbkNhY2hlQWxsID0gdHJ1ZTsKKwkJcENpZnNJbm9kZS0+Y2xpZW50Q2FuQ2FjaGVSZWFkID0gdHJ1ZTsKKwkJY0ZZSSgxLCAoIkV4Y2x1c2l2ZSBPcGxvY2sgZ3JhbnRlZCBvbiBpbm9kZSAlcCIsCisJCQkgZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSkpOworCX0gZWxzZSBpZiAoKG9wbG9jayAmIDB4RikgPT0gT1BMT0NLX1JFQUQpCisJCXBDaWZzSW5vZGUtPmNsaWVudENhbkNhY2hlUmVhZCA9IHRydWU7CisKKwkvKiB3aWxsIGhhdmUgdG8gY2hhbmdlIHRoZSB1bmxvY2sgaWYgd2UgcmVlbmFibGUgdGhlCisJICAgZmlsZW1hcF9mZGF0YXdyaXRlICh3aGljaCBkb2VzIG5vdCBzZWVtIG5lY2Vzc2FyeSAqLworCXdyaXRlX3VubG9jaygmR2xvYmFsU01CU2VzbG9jayk7CisJcmV0dXJuIDA7Cit9CisKKy8qIGFsbCBhcmd1bWVudHMgdG8gdGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNoZWNrZWQgZm9yIHZhbGlkaXR5IGluIGNhbGxlciAqLwogc3RhdGljIGlubGluZSBpbnQgY2lmc19vcGVuX2lub2RlX2hlbHBlcihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAlzdHJ1Y3QgY2lmc0lub2RlSW5mbyAqcENpZnNJbm9kZSwgc3RydWN0IGNpZnNGaWxlSW5mbyAqcENpZnNGaWxlLAogCXN0cnVjdCBjaWZzVGNvbkluZm8gKnBUY29uLCBpbnQgKm9wbG9jaywgRklMRV9BTExfSU5GTyAqYnVmLApAQCAtMTY3LDcgKzI2OSw3IEBACiAJaW50IHJjID0gLUVBQ0NFUzsKIAlpbnQgeGlkLCBvcGxvY2s7CiAJc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYjsKLQlzdHJ1Y3QgY2lmc1Rjb25JbmZvICpwVGNvbjsKKwlzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uOwogCXN0cnVjdCBjaWZzRmlsZUluZm8gKnBDaWZzRmlsZTsKIAlzdHJ1Y3QgY2lmc0lub2RlSW5mbyAqcENpZnNJbm9kZTsKIAlzdHJ1Y3QgbGlzdF9oZWFkICp0bXA7CkBAIC0xODAsNyArMjgyLDcgQEAKIAl4aWQgPSBHZXRYaWQoKTsKIAogCWNpZnNfc2IgPSBDSUZTX1NCKGlub2RlLT5pX3NiKTsKLQlwVGNvbiA9IGNpZnNfc2ItPnRjb247CisJdGNvbiA9IGNpZnNfc2ItPnRjb247CiAKIAlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fQ1JFQVQpIHsKIAkJLyogc2VhcmNoIGlub2RlIGZvciB0aGlzIGZpbGUgYW5kIGZpbGwgaW4gZmlsZS0+cHJpdmF0ZV9kYXRhICovCkBAIC0yMjAsNiArMzIyLDQ1IEBACiAKIAljRllJKDEsICgiaW5vZGUgPSAweCVwIGZpbGUgZmxhZ3MgYXJlIDB4JXggZm9yICVzIiwKIAkJIGlub2RlLCBmaWxlLT5mX2ZsYWdzLCBmdWxsX3BhdGgpKTsKKworCWlmIChvcGxvY2tFbmFibGVkKQorCQlvcGxvY2sgPSBSRVFfT1BMT0NLOworCWVsc2UKKwkJb3Bsb2NrID0gMDsKKworCWlmICghdGNvbi0+YnJva2VuX3Bvc2l4X29wZW4gJiYgdGNvbi0+dW5peF9leHQgJiYKKwkgICAgKHRjb24tPnNlcy0+Y2FwYWJpbGl0aWVzICYgQ0FQX1VOSVgpICYmCisJICAgIChDSUZTX1VOSVhfUE9TSVhfUEFUSF9PUFNfQ0FQICYKKwkJCWxlNjRfdG9fY3B1KHRjb24tPmZzVW5peEluZm8uQ2FwYWJpbGl0eSkpKSB7CisJCWludCBvZmxhZ3MgPSAoaW50KSBjaWZzX3Bvc2l4X2NvbnZlcnRfZmxhZ3MoZmlsZS0+Zl9mbGFncyk7CisJCS8qIGNhbiBub3QgcmVmcmVzaCBpbm9kZSBpbmZvIHNpbmNlIHNpemUgY291bGQgYmUgc3RhbGUgKi8KKwkJcmMgPSBjaWZzX3Bvc2l4X29wZW4oZnVsbF9wYXRoLCAmaW5vZGUsIGlub2RlLT5pX3NiLAorCQkJCSAgICAgY2lmc19zYi0+bW50X2ZpbGVfbW9kZSAvKiBpZ25vcmVkICovLAorCQkJCSAgICAgb2ZsYWdzLCAmb3Bsb2NrLCAmbmV0ZmlkLCB4aWQpOworCQlpZiAocmMgPT0gMCkgeworCQkJY0ZZSSgxLCAoInBvc2l4IG9wZW4gc3VjY2VlZGVkIikpOworCQkJLyogbm8gbmVlZCBmb3Igc3BlY2lhbCBjYXNlIGhhbmRsaW5nIG9mIHNldHRpbmcgbW9kZQorCQkJICAgb24gcmVhZCBvbmx5IGZpbGVzIG5lZWRlZCBoZXJlICovCisKKwkJCWNpZnNfcG9zaXhfb3Blbl9pbm9kZV9oZWxwZXIoaW5vZGUsIGZpbGUsIHBDaWZzSW5vZGUsCisJCQkJCQkgICAgIHBDaWZzRmlsZSwgb3Bsb2NrLCBuZXRmaWQpOworCQkJZ290byBvdXQ7CisJCX0gZWxzZSBpZiAoKHJjID09IC1FSU5WQUwpIHx8IChyYyA9PSAtRU9QTk9UU1VQUCkpIHsKKwkJCWlmICh0Y29uLT5zZXMtPnNlcnZlck5PUykKKwkJCQljRVJST1IoMSwgKCJzZXJ2ZXIgJXMgb2YgdHlwZSAlcyByZXR1cm5lZCIKKwkJCQkJICAgIiB1bmV4cGVjdGVkIGVycm9yIG9uIFNNQiBwb3NpeCBvcGVuIgorCQkJCQkgICAiLCBkaXNhYmxpbmcgcG9zaXggb3BlbiBzdXBwb3J0LiIKKwkJCQkJICAgIiBDaGVjayBpZiBzZXJ2ZXIgdXBkYXRlIGF2YWlsYWJsZS4iLAorCQkJCQkgICB0Y29uLT5zZXMtPnNlcnZlck5hbWUsCisJCQkJCSAgIHRjb24tPnNlcy0+c2VydmVyTk9TKSk7CisJCQl0Y29uLT5icm9rZW5fcG9zaXhfb3BlbiA9IHRydWU7CisJCX0gZWxzZSBpZiAoKHJjICE9IC1FSU8pICYmIChyYyAhPSAtRVJFTU9URSkgJiYKKwkJCSAocmMgIT0gLUVPUE5PVFNVUFApKSAvKiBwYXRoIG5vdCBmb3VuZCBvciBuZXQgZXJyICovCisJCQlnb3RvIG91dDsKKwkJLyogZWxzZSBmYWxsdGhyb3VnaCB0byByZXRyeSBvcGVuIHRoZSBvbGQgd2F5IG9uIG5ldHdvcmsgaS9vCisJCSAgIG9yIERGUyBlcnJvcnMgKi8KKwl9CisKIAlkZXNpcmVkQWNjZXNzID0gY2lmc19jb252ZXJ0X2ZsYWdzKGZpbGUtPmZfZmxhZ3MpOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0yNDgsMTEgKzM4OSw2IEBACiAKIAlkaXNwb3NpdGlvbiA9IGNpZnNfZ2V0X2Rpc3Bvc2l0aW9uKGZpbGUtPmZfZmxhZ3MpOwogCi0JaWYgKG9wbG9ja0VuYWJsZWQpCi0JCW9wbG9jayA9IFJFUV9PUExPQ0s7Ci0JZWxzZQotCQlvcGxvY2sgPSAwOwotCiAJLyogQkIgcGFzcyBPX1NZTkMgZmxhZyB0aHJvdWdoIG9uIGZpbGUgYXR0cmlidXRlcyAuLiBCQiAqLwogCiAJLyogQWxzbyByZWZyZXNoIGlub2RlIGJ5IHBhc3NpbmcgaW4gZmlsZV9pbmZvIGJ1ZiByZXR1cm5lZCBieSBTTUJPcGVuCkBAIC0yNjksNyArNDA1LDcgQEAKIAl9CiAKIAlpZiAoY2lmc19zYi0+dGNvbi0+c2VzLT5jYXBhYmlsaXRpZXMgJiBDQVBfTlRfU01CUykKLQkJcmMgPSBDSUZTU01CT3Blbih4aWQsIHBUY29uLCBmdWxsX3BhdGgsIGRpc3Bvc2l0aW9uLAorCQlyYyA9IENJRlNTTUJPcGVuKHhpZCwgdGNvbiwgZnVsbF9wYXRoLCBkaXNwb3NpdGlvbiwKIAkJCSBkZXNpcmVkQWNjZXNzLCBDUkVBVEVfTk9UX0RJUiwgJm5ldGZpZCwgJm9wbG9jaywgYnVmLAogCQkJIGNpZnNfc2ItPmxvY2FsX25scywgY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MKIAkJCQkgJiBDSUZTX01PVU5UX01BUF9TUEVDSUFMX0NIUik7CkBAIC0yNzgsNyArNDE0LDcgQEAKIAogCWlmIChyYyA9PSAtRUlPKSB7CiAJCS8qIE9sZCBzZXJ2ZXIsIHRyeSBsZWdhY3kgc3R5bGUgT3BlblggKi8KLQkJcmMgPSBTTUJMZWdhY3lPcGVuKHhpZCwgcFRjb24sIGZ1bGxfcGF0aCwgZGlzcG9zaXRpb24sCisJCXJjID0gU01CTGVnYWN5T3Blbih4aWQsIHRjb24sIGZ1bGxfcGF0aCwgZGlzcG9zaXRpb24sCiAJCQlkZXNpcmVkQWNjZXNzLCBDUkVBVEVfTk9UX0RJUiwgJm5ldGZpZCwgJm9wbG9jaywgYnVmLAogCQkJY2lmc19zYi0+bG9jYWxfbmxzLCBjaWZzX3NiLT5tbnRfY2lmc19mbGFncwogCQkJCSYgQ0lGU19NT1VOVF9NQVBfU1BFQ0lBTF9DSFIpOwpAQCAtMjk1LDEyICs0MzEsMTIgQEAKIAl9CiAJcENpZnNGaWxlID0gY2lmc19pbml0X3ByaXZhdGUoZmlsZS0+cHJpdmF0ZV9kYXRhLCBpbm9kZSwgZmlsZSwgbmV0ZmlkKTsKIAl3cml0ZV9sb2NrKCZHbG9iYWxTTUJTZXNsb2NrKTsKLQlsaXN0X2FkZCgmcENpZnNGaWxlLT50bGlzdCwgJnBUY29uLT5vcGVuRmlsZUxpc3QpOworCWxpc3RfYWRkKCZwQ2lmc0ZpbGUtPnRsaXN0LCAmdGNvbi0+b3BlbkZpbGVMaXN0KTsKIAogCXBDaWZzSW5vZGUgPSBDSUZTX0koZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7CiAJaWYgKHBDaWZzSW5vZGUpIHsKIAkJcmMgPSBjaWZzX29wZW5faW5vZGVfaGVscGVyKGlub2RlLCBmaWxlLCBwQ2lmc0lub2RlLAotCQkJCQkgICAgcENpZnNGaWxlLCBwVGNvbiwKKwkJCQkJICAgIHBDaWZzRmlsZSwgdGNvbiwKIAkJCQkJICAgICZvcGxvY2ssIGJ1ZiwgZnVsbF9wYXRoLCB4aWQpOwogCX0gZWxzZSB7CiAJCXdyaXRlX3VubG9jaygmR2xvYmFsU01CU2VzbG9jayk7CkBAIC0zMDksNyArNDQ1LDcgQEAKIAlpZiAob3Bsb2NrICYgQ0lGU19DUkVBVEVfQUNUSU9OKSB7CiAJCS8qIHRpbWUgdG8gc2V0IG1vZGUgd2hpY2ggd2UgY2FuIG5vdCBzZXQgZWFybGllciBkdWUgdG8KIAkJICAgcHJvYmxlbXMgY3JlYXRpbmcgbmV3IHJlYWQtb25seSBmaWxlcyAqLwotCQlpZiAocFRjb24tPnVuaXhfZXh0KSB7CisJCWlmICh0Y29uLT51bml4X2V4dCkgewogCQkJc3RydWN0IGNpZnNfdW5peF9zZXRfaW5mb19hcmdzIGFyZ3MgPSB7CiAJCQkJLm1vZGUJPSBpbm9kZS0+aV9tb2RlLAogCQkJCS51aWQJPSBOT19DSEFOR0VfNjQsCkBAIC0zMTksNyArNDU1LDcgQEAKIAkJCQkubXRpbWUJPSBOT19DSEFOR0VfNjQsCiAJCQkJLmRldmljZQk9IDAsCiAJCQl9OwotCQkJQ0lGU1NNQlVuaXhTZXRJbmZvKHhpZCwgcFRjb24sIGZ1bGxfcGF0aCwgJmFyZ3MsCisJCQlDSUZTU01CVW5peFNldEluZm8oeGlkLCB0Y29uLCBmdWxsX3BhdGgsICZhcmdzLAogCQkJCQkgICAgY2lmc19zYi0+bG9jYWxfbmxzLAogCQkJCQkgICAgY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJgogCQkJCQkJQ0lGU19NT1VOVF9NQVBfU1BFQ0lBTF9DSFIpOwpAQCAtMzQ5LDcgKzQ4NSw3IEBACiAJaW50IHJjID0gLUVBQ0NFUzsKIAlpbnQgeGlkLCBvcGxvY2s7CiAJc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYjsKLQlzdHJ1Y3QgY2lmc1Rjb25JbmZvICpwVGNvbjsKKwlzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uOwogCXN0cnVjdCBjaWZzRmlsZUluZm8gKnBDaWZzRmlsZTsKIAlzdHJ1Y3QgY2lmc0lub2RlSW5mbyAqcENpZnNJbm9kZTsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOwpAQCAtMzg3LDcgKzUyMyw3IEBACiAJfQogCiAJY2lmc19zYiA9IENJRlNfU0IoaW5vZGUtPmlfc2IpOwotCXBUY29uID0gY2lmc19zYi0+dGNvbjsKKwl0Y29uID0gY2lmc19zYi0+dGNvbjsKIAogLyogY2FuIG5vdCBncmFiIHJlbmFtZSBzZW0gaGVyZSBiZWNhdXNlIHZhcmlvdXMgb3BzLCBpbmNsdWRpbmcKICAgIHRob3NlIHRoYXQgYWxyZWFkeSBoYXZlIHRoZSByZW5hbWUgc2VtIGNhbiBlbmQgdXAgY2F1c2luZyB3cml0ZXBhZ2UKQEAgLTQwNCwyMCArNTQwLDM3IEBACiAKIAljRllJKDEsICgiaW5vZGUgPSAweCVwIGZpbGUgZmxhZ3MgMHgleCBmb3IgJXMiLAogCQkgaW5vZGUsIGZpbGUtPmZfZmxhZ3MsIGZ1bGxfcGF0aCkpOwotCWRlc2lyZWRBY2Nlc3MgPSBjaWZzX2NvbnZlcnRfZmxhZ3MoZmlsZS0+Zl9mbGFncyk7CiAKIAlpZiAob3Bsb2NrRW5hYmxlZCkKIAkJb3Bsb2NrID0gUkVRX09QTE9DSzsKIAllbHNlCiAJCW9wbG9jayA9IDA7CiAKKwlpZiAodGNvbi0+dW5peF9leHQgJiYgKHRjb24tPnNlcy0+Y2FwYWJpbGl0aWVzICYgQ0FQX1VOSVgpICYmCisJICAgIChDSUZTX1VOSVhfUE9TSVhfUEFUSF9PUFNfQ0FQICYKKwkJCWxlNjRfdG9fY3B1KHRjb24tPmZzVW5peEluZm8uQ2FwYWJpbGl0eSkpKSB7CisJCWludCBvZmxhZ3MgPSAoaW50KSBjaWZzX3Bvc2l4X2NvbnZlcnRfZmxhZ3MoZmlsZS0+Zl9mbGFncyk7CisJCS8qIGNhbiBub3QgcmVmcmVzaCBpbm9kZSBpbmZvIHNpbmNlIHNpemUgY291bGQgYmUgc3RhbGUgKi8KKwkJcmMgPSBjaWZzX3Bvc2l4X29wZW4oZnVsbF9wYXRoLCBOVUxMLCBpbm9kZS0+aV9zYiwKKwkJCQkgICAgIGNpZnNfc2ItPm1udF9maWxlX21vZGUgLyogaWdub3JlZCAqLywKKwkJCQkgICAgIG9mbGFncywgJm9wbG9jaywgJm5ldGZpZCwgeGlkKTsKKwkJaWYgKHJjID09IDApIHsKKwkJCWNGWUkoMSwgKCJwb3NpeCByZW9wZW4gc3VjY2VlZGVkIikpOworCQkJZ290byByZW9wZW5fc3VjY2VzczsKKwkJfQorCQkvKiBmYWxsdGhyb3VnaCB0byByZXRyeSBvcGVuIHRoZSBvbGQgd2F5IG9uIGVycm9ycywgZXNwZWNpYWxseQorCQkgICBpbiB0aGUgcmVjb25uZWN0IHBhdGggaXQgaXMgaW1wb3J0YW50IHRvIHJldHJ5IGhhcmQgKi8KKwl9CisKKwlkZXNpcmVkQWNjZXNzID0gY2lmc19jb252ZXJ0X2ZsYWdzKGZpbGUtPmZfZmxhZ3MpOworCiAJLyogQ2FuIG5vdCByZWZyZXNoIGlub2RlIGJ5IHBhc3NpbmcgaW4gZmlsZV9pbmZvIGJ1ZiB0byBiZSByZXR1cm5lZAogCSAgIGJ5IFNNQk9wZW4gYW5kIHRoZW4gY2FsbGluZyBnZXRfaW5vZGVfaW5mbyB3aXRoIHJldHVybmVkIGJ1ZgogCSAgIHNpbmNlIGZpbGUgbWlnaHQgaGF2ZSB3cml0ZSBiZWhpbmQgZGF0YSB0aGF0IG5lZWRzIHRvIGJlIGZsdXNoZWQKIAkgICBhbmQgc2VydmVyIHZlcnNpb24gb2YgZmlsZSBzaXplIGNhbiBiZSBzdGFsZS4gSWYgd2Uga25ldyBmb3Igc3VyZQogCSAgIHRoYXQgaW5vZGUgd2FzIG5vdCBkaXJ0eSBsb2NhbGx5IHdlIGNvdWxkIGRvIHRoaXMgKi8KIAotCXJjID0gQ0lGU1NNQk9wZW4oeGlkLCBwVGNvbiwgZnVsbF9wYXRoLCBkaXNwb3NpdGlvbiwgZGVzaXJlZEFjY2VzcywKKwlyYyA9IENJRlNTTUJPcGVuKHhpZCwgdGNvbiwgZnVsbF9wYXRoLCBkaXNwb3NpdGlvbiwgZGVzaXJlZEFjY2VzcywKIAkJCSBDUkVBVEVfTk9UX0RJUiwgJm5ldGZpZCwgJm9wbG9jaywgTlVMTCwKIAkJCSBjaWZzX3NiLT5sb2NhbF9ubHMsIGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYKIAkJCQlDSUZTX01PVU5UX01BUF9TUEVDSUFMX0NIUik7CkBAIC00MjYsNiArNTc5LDcgQEAKIAkJY0ZZSSgxLCAoImNpZnNfb3BlbiByZXR1cm5lZCAweCV4IiwgcmMpKTsKIAkJY0ZZSSgxLCAoIm9wbG9jazogJWQiLCBvcGxvY2spKTsKIAl9IGVsc2UgeworcmVvcGVuX3N1Y2Nlc3M6CiAJCXBDaWZzRmlsZS0+bmV0ZmlkID0gbmV0ZmlkOwogCQlwQ2lmc0ZpbGUtPmludmFsaWRIYW5kbGUgPSBmYWxzZTsKIAkJdXAoJnBDaWZzRmlsZS0+Zmhfc2VtKTsKQEAgLTQzOSw3ICs1OTMsNyBAQAogCQkJICAgZ28gdG8gc2VydmVyIHRvIGdldCBpbm9kZSBpbmZvICovCiAJCQkJcENpZnNJbm9kZS0+Y2xpZW50Q2FuQ2FjaGVBbGwgPSBmYWxzZTsKIAkJCQlwQ2lmc0lub2RlLT5jbGllbnRDYW5DYWNoZVJlYWQgPSBmYWxzZTsKLQkJCQlpZiAocFRjb24tPnVuaXhfZXh0KQorCQkJCWlmICh0Y29uLT51bml4X2V4dCkKIAkJCQkJcmMgPSBjaWZzX2dldF9pbm9kZV9pbmZvX3VuaXgoJmlub2RlLAogCQkJCQkJZnVsbF9wYXRoLCBpbm9kZS0+aV9zYiwgeGlkKTsKIAkJCQllbHNlCkBAIC00NjcsNyArNjIxLDYgQEAKIAkJCWNpZnNfcmVsb2NrX2ZpbGUocENpZnNGaWxlKTsKIAkJfQogCX0KLQogCWtmcmVlKGZ1bGxfcGF0aCk7CiAJRnJlZVhpZCh4aWQpOwogCXJldHVybiByYzsKQEAgLTE1MjMsNiArMTY3Niw5IEBACiB7CiAJaW50IHhpZDsKIAlpbnQgcmMgPSAwOworCXN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb247CisJc3RydWN0IGNpZnNGaWxlSW5mbyAqc21iZmlsZSA9CisJCShzdHJ1Y3QgY2lmc0ZpbGVJbmZvICopZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCiAJeGlkID0gR2V0WGlkKCk7CkBAIC0xNTM0LDcgKzE2OTAsMTIgQEAKIAlpZiAocmMgPT0gMCkgewogCQlyYyA9IENJRlNfSShpbm9kZSktPndyaXRlX2JlaGluZF9yYzsKIAkJQ0lGU19JKGlub2RlKS0+d3JpdGVfYmVoaW5kX3JjID0gMDsKKwkJdGNvbiA9IENJRlNfU0IoaW5vZGUtPmlfc2IpLT50Y29uOworCQlpZiAoIXJjICYmIHRjb24gJiYgc21iZmlsZSAmJgorCQkgICAhKENJRlNfU0IoaW5vZGUtPmlfc2IpLT5tbnRfY2lmc19mbGFncyAmIENJRlNfTU9VTlRfTk9TU1lOQykpCisJCQlyYyA9IENJRlNTTUJGbHVzaCh4aWQsIHRjb24sIHNtYmZpbGUtPm5ldGZpZCk7CiAJfQorCiAJRnJlZVhpZCh4aWQpOwogCXJldHVybiByYzsKIH0KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvaW5vZGUuYyBiL2ZzL2NpZnMvaW5vZGUuYwppbmRleCA0NjkwYTM2Li5hODc5N2NjIDEwMDY0NAotLS0gYS9mcy9jaWZzL2lub2RlLmMKKysrIGIvZnMvY2lmcy9pbm9kZS5jCkBAIC03NjMsNiArNzYzLDkgQEAKIAlzdHJ1Y3QgY2lmc1Rjb25JbmZvICpwVGNvbiA9IGNpZnNfc2ItPnRjb247CiAJRklMRV9CQVNJQ19JTkZPCWluZm9fYnVmOwogCisJaWYgKGF0dHJzID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCiAJaWYgKGF0dHJzLT5pYV92YWxpZCAmIEFUVFJfQVRJTUUpIHsKIAkJc2V0X3RpbWUgPSB0cnVlOwogCQlpbmZvX2J1Zi5MYXN0QWNjZXNzVGltZSA9CmRpZmYgLS1naXQgYS9mcy9jaWZzL3NtYmZzY3RsLmggYi9mcy9jaWZzL3NtYmZzY3RsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA1NmI4OQotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2NpZnMvc21iZnNjdGwuaApAQCAtMCwwICsxLDg0IEBACisvKgorICogICBmcy9jaWZzL3NtYmZzY3RsLmg6IFNNQiwgQ0lGUywgU01CMiBGU0NUTCBkZWZpbml0aW9ucworICoKKyAqICAgQ29weXJpZ2h0IChjKSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzICBDb3JwLiwgMjAwMiwyMDA5CisgKiAgIEF1dGhvcihzKTogU3RldmUgRnJlbmNoIChzZnJlbmNoQHVzLmlibS5jb20pCisgKgorICogICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyAqICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZQorICogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisvKiBJT0NUTCBpbmZvcm1hdGlvbiAqLworLyoKKyAqIExpc3Qgb2YgaW9jdGwvZnNjdGwgZnVuY3Rpb24gY29kZXMgdGhhdCBhcmUgb3IgY291bGQgYmUgdXNlZnVsIGluIHRoZQorICogZnV0dXJlIHRvIHJlbW90ZSBjbGllbnRzIGxpa2UgY2lmcyBvciBTTUIyIGNsaWVudC4gIFRoZXJlIGlzIHByb2JhYmx5CisgKiBhIHNsaWdodGx5IGxhcmdlciBzZXQgb2YgZnNjdGxzIHRoYXQgTlRGUyBsb2NhbCBmaWxlc3lzdGVtIGNvdWxkIGhhbmRsZSwKKyAqIGluY2x1ZGluZyB0aGUgc2V2ZW4gYmVsb3cgdGhhdCB3ZSBkbyBub3QgaGF2ZSBzdHJ1Y3QgZGVmaW5pdGlvbnMgZm9yLgorICogRXZlbiB3aXRoIHByb3RvY29sIGRlZmluaXRpb25zIGZvciBtb3N0IG9mIHRoZXNlIG5vdyBhdmFpbGFibGUsIHdlIHN0aWxsCisgKiBuZWVkIHRvIGRvIHNvbWUgZXhwZXJpbWVudGF0aW9uIHRvIGlkZW50aWZ5IHdoaWNoIGFyZSBwcmFjdGljYWwgdG8gZG8KKyAqIHJlbW90ZWx5LiAgU29tZSBvZiB0aGUgZm9sbG93aW5nLCBzdWNoIGFzIHRoZSBlbmNyeXB0aW9uL2NvbXByZXNzaW9uIG9uZXMKKyAqIGNvdWxkIGJlIGludm9rZWQgZnJvbSB0b29scyB2aWEgYSBzcGVjaWFsaXplZCBob29rIGludG8gdGhlIFZGUyByYXRoZXIKKyAqIHRoYW4gdmlhIHRoZSBzdGFuZGFyZCB2ZnMgZW50cnkgcG9pbnRzCisgKi8KKyNkZWZpbmUgRlNDVExfUkVRVUVTVF9PUExPQ0tfTEVWRUxfMSAweDAwMDkwMDAwCisjZGVmaW5lIEZTQ1RMX1JFUVVFU1RfT1BMT0NLX0xFVkVMXzIgMHgwMDA5MDAwNAorI2RlZmluZSBGU0NUTF9SRVFVRVNUX0JBVENIX09QTE9DSyAgIDB4MDAwOTAwMDgKKyNkZWZpbmUgRlNDVExfTE9DS19WT0xVTUUgICAgICAgICAgICAweDAwMDkwMDE4CisjZGVmaW5lIEZTQ1RMX1VOTE9DS19WT0xVTUUgICAgICAgICAgMHgwMDA5MDAxQworI2RlZmluZSBGU0NUTF9JU19QQVRITkFNRV9WQUxJRCAgICAgIDB4MDAwOTAwMkMgLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9HRVRfQ09NUFJFU1NJT04gICAgICAgIDB4MDAwOTAwM0MgLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9TRVRfQ09NUFJFU1NJT04gICAgICAgIDB4MDAwOUMwNDAgLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9RVUVSWV9GQVRfQlBCICAgICAgICAgIDB4MDAwOTAwNTggLyogQkIgYWRkIHN0cnVjdCAqLworLyogVmVyaWZ5IHRoZSBuZXh0IEZTQ1RMIG51bWJlciwgd2UgaGFkIGl0IGFzIDB4MDAwOTAwOTAgYmVmb3JlICovCisjZGVmaW5lIEZTQ1RMX0ZJTEVTWVNURU1fR0VUX1NUQVRTICAgMHgwMDA5MDA2MCAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX0dFVF9OVEZTX1ZPTFVNRV9EQVRBICAgMHgwMDA5MDA2NCAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX0dFVF9SRVRSSUVWQUxfUE9JTlRFUlMgMHgwMDA5MDA3MyAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX0lTX1ZPTFVNRV9ESVJUWSAgICAgICAgMHgwMDA5MDA3OCAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX0FMTE9XX0VYVEVOREVEX0RBU0RfSU8gMHgwMDA5MDA4MyAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX1JFUVVFU1RfRklMVEVSX09QTE9DSyAgMHgwMDA5MDA4QworI2RlZmluZSBGU0NUTF9GSU5EX0ZJTEVTX0JZX1NJRCAgICAgIDB4MDAwOTAwOEYgLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9TRVRfT0JKRUNUX0lEICAgICAgICAgIDB4MDAwOTAwOTggLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9HRVRfT0JKRUNUX0lEICAgICAgICAgIDB4MDAwOTAwOUMgLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9ERUxFVEVfT0JKRUNUX0lEICAgICAgIDB4MDAwOTAwQTAgLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9TRVRfUkVQQVJTRV9QT0lOVCAgICAgIDB4MDAwOTAwQTQgLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9HRVRfUkVQQVJTRV9QT0lOVCAgICAgIDB4MDAwOTAwQTggLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9ERUxFVEVfUkVQQVJTRV9QT0lOVCAgIDB4MDAwOTAwQUMgLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9TRVRfT0JKRUNUX0lEX0VYVEVOREVEIDB4MDAwOTAwQkMgLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9DUkVBVEVfT1JfR0VUX09CSkVDVF9JRCAweDAwMDkwMEMwIC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfU0VUX1NQQVJTRSAgICAgICAgICAgICAweDAwMDkwMEM0IC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfU0VUX1pFUk9fREFUQSAgICAgICAgICAweDAwMDkwMEM4IC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfU0VUX0VOQ1JZUFRJT04gICAgICAgICAweDAwMDkwMEQ3IC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfRU5DUllQVElPTl9GU0NUTF9JTyAgICAweDAwMDkwMERCIC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfV1JJVEVfUkFXX0VOQ1JZUFRFRCAgICAweDAwMDkwMERGIC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfUkVBRF9SQVdfRU5DUllQVEVEICAgICAweDAwMDkwMEUzIC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfUkVBRF9GSUxFX1VTTl9EQVRBICAgICAweDAwMDkwMEVCIC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfV1JJVEVfVVNOX0NMT1NFX1JFQ09SRCAweDAwMDkwMEVGIC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfU0lTX0NPUFlGSUxFICAgICAgICAgICAweDAwMDkwMTAwIC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfUkVDQUxMX0ZJTEUgICAgICAgICAgICAweDAwMDkwMTE3IC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfUVVFUllfU1BBUklOR19JTkZPICAgICAweDAwMDkwMTM4IC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfU0VUX1pFUk9fT05fREVBTExPQyAgICAweDAwMDkwMTk0IC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfU0VUX1NIT1JUX05BTUVfQkVIQVZJT1IgMHgwMDA5MDFCNCAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX1FVRVJZX0FMTE9DQVRFRF9SQU5HRVMgMHgwMDA5NDBDRiAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX1NFVF9ERUZFQ1RfTUFOQUdFTUVOVCAgMHgwMDA5ODEzNCAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX1NJU19MSU5LX0ZJTEVTICAgICAgICAgMHgwMDA5QzEwNAorI2RlZmluZSBGU0NUTF9QSVBFX1BFRUsgICAgICAgICAgICAgIDB4MDAxMTQwMEMgLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9QSVBFX1RSQU5TQ0VJVkUgICAgICAgIDB4MDAxMUMwMTcgLyogQkIgYWRkIHN0cnVjdCAqLworLyogc3RyYW5nZSB0aGF0IHRoZSBudW1iZXIgZm9yIHRoaXMgb3AgaXMgbm90IHNlcXVlbnRpYWwgd2l0aCBwcmV2aW91cyBvcCAqLworI2RlZmluZSBGU0NUTF9QSVBFX1dBSVQgICAgICAgICAgICAgIDB4MDAxMTAwMTggLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9MTVJfR0VUX0xJTktfVFJBQ0tfSU5GIDB4MDAxNDAwRTggLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9MTVJfU0VUX0xJTktfVFJBQ0tfSU5GIDB4MDAxNDAwRUMgLyogQkIgYWRkIHN0cnVjdCAqLworCisjZGVmaW5lIElPX1JFUEFSU0VfVEFHX01PVU5UX1BPSU5UICAgMHhBMDAwMDAwMworI2RlZmluZSBJT19SRVBBUlNFX1RBR19IU00gICAgICAgICAgIDB4QzAwMDAwMDQKKyNkZWZpbmUgSU9fUkVQQVJTRV9UQUdfU0lTICAgICAgICAgICAweDgwMDAwMDA3CmRpZmYgLS1naXQgYS9mcy9jb21wYXQuYyBiL2ZzL2NvbXBhdC5jCmluZGV4IGQwMTQ1Y2EuLjA5NDliNDMgMTAwNjQ0Ci0tLSBhL2ZzL2NvbXBhdC5jCisrKyBiL2ZzL2NvbXBhdC5jCkBAIC0xNDAyLDYgKzE0MDIsNyBAQAogCXJldHZhbCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY3VycmVudC0+Y3JlZF9leGVjX211dGV4KTsKIAlpZiAocmV0dmFsIDwgMCkKIAkJZ290byBvdXRfZnJlZTsKKwljdXJyZW50LT5pbl9leGVjdmUgPSAxOwogCiAJcmV0dmFsID0gLUVOT01FTTsKIAlicHJtLT5jcmVkID0gcHJlcGFyZV9leGVjX2NyZWRzKCk7CkBAIC0xNDU0LDYgKzE0NTUsNyBAQAogCQlnb3RvIG91dDsKIAogCS8qIGV4ZWN2ZSBzdWNjZWVkZWQgKi8KKwljdXJyZW50LT5pbl9leGVjdmUgPSAwOwogCW11dGV4X3VubG9jaygmY3VycmVudC0+Y3JlZF9leGVjX211dGV4KTsKIAlhY2N0X3VwZGF0ZV9pbnRlZ3JhbHMoY3VycmVudCk7CiAJZnJlZV9icHJtKGJwcm0pOwpAQCAtMTQ3MCw2ICsxNDcyLDcgQEAKIAl9CiAKIG91dF91bmxvY2s6CisJY3VycmVudC0+aW5fZXhlY3ZlID0gMDsKIAltdXRleF91bmxvY2soJmN1cnJlbnQtPmNyZWRfZXhlY19tdXRleCk7CiAKIG91dF9mcmVlOgpkaWZmIC0tZ2l0IGEvZnMvY29tcGF0X2lvY3RsLmMgYi9mcy9jb21wYXRfaW9jdGwuYwppbmRleCA0NWU1OWQzLi5mZjc4NjY4IDEwMDY0NAotLS0gYS9mcy9jb21wYXRfaW9jdGwuYworKysgYi9mcy9jb21wYXRfaW9jdGwuYwpAQCAtNTIyLDYgKzUyMiwxMSBAQAogCQlpZiAoZXJyKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCWJyZWFrOworCWNhc2UgU0lPQ1NIV1RTVEFNUDoKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZpZnIsIHVpZnIzMiwgc2l6ZW9mKCp1aWZyMzIpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlpZnIuaWZyX2RhdGEgPSBjb21wYXRfcHRyKHVpZnIzMi0+aWZyX2lmcnUuaWZydV9kYXRhKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZpZnIsIHVpZnIzMiwgc2l6ZW9mKCp1aWZyMzIpKSkKIAkJCXJldHVybiAtRUZBVUxUOwpAQCAtMTk5Myw2ICsxOTk4LDggQEAKIENPTVBBVElCTEVfSU9DVEwoVFVOR0VURkVBVFVSRVMpCiBDT01QQVRJQkxFX0lPQ1RMKFRVTlNFVE9GRkxPQUQpCiBDT01QQVRJQkxFX0lPQ1RMKFRVTlNFVFRYRklMVEVSKQorQ09NUEFUSUJMRV9JT0NUTChUVU5HRVRTTkRCVUYpCitDT01QQVRJQkxFX0lPQ1RMKFRVTlNFVFNOREJVRikKIC8qIEJpZyBWICovCiBDT01QQVRJQkxFX0lPQ1RMKFZUX1NFVE1PREUpCiBDT01QQVRJQkxFX0lPQ1RMKFZUX0dFVE1PREUpCkBAIC0yNTY2LDYgKzI1NzMsNyBAQAogSEFORExFX0lPQ1RMKFNJT0NHSUZBRERSLCBkZXZfaWZzaW9jKQogSEFORExFX0lPQ1RMKFNJT0NTSUZBRERSLCBkZXZfaWZzaW9jKQogSEFORExFX0lPQ1RMKFNJT0NTSUZIV0JST0FEQ0FTVCwgZGV2X2lmc2lvYykKK0hBTkRMRV9JT0NUTChTSU9DU0hXVFNUQU1QLCBkZXZfaWZzaW9jKQogCiAvKiBpb2N0bHMgdXNlZCBieSBhcHBsZXRhbGsgZGRwLmMgKi8KIEhBTkRMRV9JT0NUTChTSU9DQVRBTEtESUZBRERSLCBkZXZfaWZzaW9jKQpkaWZmIC0tZ2l0IGEvZnMvZGxtL2Rpci5jIGIvZnMvZGxtL2Rpci5jCmluZGV4IDkyOTY5ZjguLjg1OGZiYTEgMTAwNjQ0Ci0tLSBhL2ZzL2RsbS9kaXIuYworKysgYi9mcy9kbG0vZGlyLmMKQEAgLTE1Niw3ICsxNTYsNyBAQAogCiAJYnVja2V0ID0gZGlyX2hhc2gobHMsIG5hbWUsIG5hbWVsZW4pOwogCi0Jd3JpdGVfbG9jaygmbHMtPmxzX2RpcnRibFtidWNrZXRdLmxvY2spOworCXNwaW5fbG9jaygmbHMtPmxzX2RpcnRibFtidWNrZXRdLmxvY2spOwogCiAJZGUgPSBzZWFyY2hfYnVja2V0KGxzLCBuYW1lLCBuYW1lbGVuLCBidWNrZXQpOwogCkBAIC0xNzMsNyArMTczLDcgQEAKIAlsaXN0X2RlbCgmZGUtPmxpc3QpOwogCWtmcmVlKGRlKTsKICBvdXQ6Ci0Jd3JpdGVfdW5sb2NrKCZscy0+bHNfZGlydGJsW2J1Y2tldF0ubG9jayk7CisJc3Bpbl91bmxvY2soJmxzLT5sc19kaXJ0YmxbYnVja2V0XS5sb2NrKTsKIH0KIAogdm9pZCBkbG1fZGlyX2NsZWFyKHN0cnVjdCBkbG1fbHMgKmxzKQpAQCAtMTg1LDE0ICsxODUsMTQgQEAKIAlETE1fQVNTRVJUKGxpc3RfZW1wdHkoJmxzLT5sc19yZWNvdmVyX2xpc3QpLCApOwogCiAJZm9yIChpID0gMDsgaSA8IGxzLT5sc19kaXJ0Ymxfc2l6ZTsgaSsrKSB7Ci0JCXdyaXRlX2xvY2soJmxzLT5sc19kaXJ0YmxbaV0ubG9jayk7CisJCXNwaW5fbG9jaygmbHMtPmxzX2RpcnRibFtpXS5sb2NrKTsKIAkJaGVhZCA9ICZscy0+bHNfZGlydGJsW2ldLmxpc3Q7CiAJCXdoaWxlICghbGlzdF9lbXB0eShoZWFkKSkgewogCQkJZGUgPSBsaXN0X2VudHJ5KGhlYWQtPm5leHQsIHN0cnVjdCBkbG1fZGlyZW50cnksIGxpc3QpOwogCQkJbGlzdF9kZWwoJmRlLT5saXN0KTsKIAkJCXB1dF9mcmVlX2RlKGxzLCBkZSk7CiAJCX0KLQkJd3JpdGVfdW5sb2NrKCZscy0+bHNfZGlydGJsW2ldLmxvY2spOworCQlzcGluX3VubG9jaygmbHMtPmxzX2RpcnRibFtpXS5sb2NrKTsKIAl9CiB9CiAKQEAgLTMwNywxNyArMzA3LDE3IEBACiAKIAlidWNrZXQgPSBkaXJfaGFzaChscywgbmFtZSwgbmFtZWxlbik7CiAKLQl3cml0ZV9sb2NrKCZscy0+bHNfZGlydGJsW2J1Y2tldF0ubG9jayk7CisJc3Bpbl9sb2NrKCZscy0+bHNfZGlydGJsW2J1Y2tldF0ubG9jayk7CiAJZGUgPSBzZWFyY2hfYnVja2V0KGxzLCBuYW1lLCBuYW1lbGVuLCBidWNrZXQpOwogCWlmIChkZSkgewogCQkqcl9ub2RlaWQgPSBkZS0+bWFzdGVyX25vZGVpZDsKLQkJd3JpdGVfdW5sb2NrKCZscy0+bHNfZGlydGJsW2J1Y2tldF0ubG9jayk7CisJCXNwaW5fdW5sb2NrKCZscy0+bHNfZGlydGJsW2J1Y2tldF0ubG9jayk7CiAJCWlmICgqcl9ub2RlaWQgPT0gbm9kZWlkKQogCQkJcmV0dXJuIC1FRVhJU1Q7CiAJCXJldHVybiAwOwogCX0KIAotCXdyaXRlX3VubG9jaygmbHMtPmxzX2RpcnRibFtidWNrZXRdLmxvY2spOworCXNwaW5fdW5sb2NrKCZscy0+bHNfZGlydGJsW2J1Y2tldF0ubG9jayk7CiAKIAlpZiAobmFtZWxlbiA+IERMTV9SRVNOQU1FX01BWExFTikKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0zMzAsNyArMzMwLDcgQEAKIAlkZS0+bGVuZ3RoID0gbmFtZWxlbjsKIAltZW1jcHkoZGUtPm5hbWUsIG5hbWUsIG5hbWVsZW4pOwogCi0Jd3JpdGVfbG9jaygmbHMtPmxzX2RpcnRibFtidWNrZXRdLmxvY2spOworCXNwaW5fbG9jaygmbHMtPmxzX2RpcnRibFtidWNrZXRdLmxvY2spOwogCXRtcCA9IHNlYXJjaF9idWNrZXQobHMsIG5hbWUsIG5hbWVsZW4sIGJ1Y2tldCk7CiAJaWYgKHRtcCkgewogCQlrZnJlZShkZSk7CkBAIC0zMzksNyArMzM5LDcgQEAKIAkJbGlzdF9hZGRfdGFpbCgmZGUtPmxpc3QsICZscy0+bHNfZGlydGJsW2J1Y2tldF0ubGlzdCk7CiAJfQogCSpyX25vZGVpZCA9IGRlLT5tYXN0ZXJfbm9kZWlkOwotCXdyaXRlX3VubG9jaygmbHMtPmxzX2RpcnRibFtidWNrZXRdLmxvY2spOworCXNwaW5fdW5sb2NrKCZscy0+bHNfZGlydGJsW2J1Y2tldF0ubG9jayk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2RsbS9kbG1faW50ZXJuYWwuaCBiL2ZzL2RsbS9kbG1faW50ZXJuYWwuaAppbmRleCAwNzZlODZmLi5kMDFjYTBhIDEwMDY0NAotLS0gYS9mcy9kbG0vZGxtX2ludGVybmFsLmgKKysrIGIvZnMvZGxtL2RsbV9pbnRlcm5hbC5oCkBAIC05OSw3ICs5OSw3IEBACiAKIHN0cnVjdCBkbG1fZGlydGFibGUgewogCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKLQlyd2xvY2tfdAkJbG9jazsKKwlzcGlubG9ja190CQlsb2NrOwogfTsKIAogc3RydWN0IGRsbV9yc2J0YWJsZSB7CmRpZmYgLS1naXQgYS9mcy9kbG0vbG9jay5jIGIvZnMvZGxtL2xvY2suYwppbmRleCAwMWU3ZDM5Li4yMDVlYzk1IDEwMDY0NAotLS0gYS9mcy9kbG0vbG9jay5jCisrKyBiL2ZzL2RsbS9sb2NrLmMKQEAgLTgzNSw3ICs4MzUsNyBAQAogCQlsa2ItPmxrYl93YWl0X2NvdW50Kys7CiAJCWhvbGRfbGtiKGxrYik7CiAKLQkJbG9nX2RlYnVnKGxzLCAiYWRkIG92ZXJsYXAgJXggY3VyICVkIG5ldyAlZCBjb3VudCAlZCBmbGFncyAleCIsCisJCWxvZ19kZWJ1ZyhscywgImFkZHdhaXQgJXggY3VyICVkIG92ZXJsYXAgJWQgY291bnQgJWQgZiAleCIsCiAJCQkgIGxrYi0+bGtiX2lkLCBsa2ItPmxrYl93YWl0X3R5cGUsIG1zdHlwZSwKIAkJCSAgbGtiLT5sa2Jfd2FpdF9jb3VudCwgbGtiLT5sa2JfZmxhZ3MpOwogCQlnb3RvIG91dDsKQEAgLTg1MSw3ICs4NTEsNyBAQAogCWxpc3RfYWRkKCZsa2ItPmxrYl93YWl0X3JlcGx5LCAmbHMtPmxzX3dhaXRlcnMpOwogIG91dDoKIAlpZiAoZXJyb3IpCi0JCWxvZ19lcnJvcihscywgImFkZF90b193YWl0ZXJzICV4IGVycm9yICVkIGZsYWdzICV4ICVkICVkICVzIiwKKwkJbG9nX2Vycm9yKGxzLCAiYWRkd2FpdCBlcnJvciAleCAlZCBmbGFncyAleCAlZCAlZCAlcyIsCiAJCQkgIGxrYi0+bGtiX2lkLCBlcnJvciwgbGtiLT5sa2JfZmxhZ3MsIG1zdHlwZSwKIAkJCSAgbGtiLT5sa2Jfd2FpdF90eXBlLCBsa2ItPmxrYl9yZXNvdXJjZS0+cmVzX25hbWUpOwogCW11dGV4X3VubG9jaygmbHMtPmxzX3dhaXRlcnNfbXV0ZXgpOwpAQCAtODYzLDIzICs4NjMsNTUgQEAKICAgIHJlcXVlc3QgcmVwbHkgb24gdGhlIHJlcXVlc3RxdWV1ZSkgYmV0d2VlbiBkbG1fcmVjb3Zlcl93YWl0ZXJzX3ByZSgpIHdoaWNoCiAgICBzZXQgUkVTRU5EIGFuZCBkbG1fcmVjb3Zlcl93YWl0ZXJzX3Bvc3QoKSAqLwogCi1zdGF0aWMgaW50IF9yZW1vdmVfZnJvbV93YWl0ZXJzKHN0cnVjdCBkbG1fbGtiICpsa2IsIGludCBtc3R5cGUpCitzdGF0aWMgaW50IF9yZW1vdmVfZnJvbV93YWl0ZXJzKHN0cnVjdCBkbG1fbGtiICpsa2IsIGludCBtc3R5cGUsCisJCQkJc3RydWN0IGRsbV9tZXNzYWdlICptcykKIHsKIAlzdHJ1Y3QgZGxtX2xzICpscyA9IGxrYi0+bGtiX3Jlc291cmNlLT5yZXNfbHM7CiAJaW50IG92ZXJsYXBfZG9uZSA9IDA7CiAKIAlpZiAoaXNfb3ZlcmxhcF91bmxvY2sobGtiKSAmJiAobXN0eXBlID09IERMTV9NU0dfVU5MT0NLX1JFUExZKSkgeworCQlsb2dfZGVidWcobHMsICJyZW13YWl0ICV4IHVubG9ja19yZXBseSBvdmVybGFwIiwgbGtiLT5sa2JfaWQpOwogCQlsa2ItPmxrYl9mbGFncyAmPSB+RExNX0lGTF9PVkVSTEFQX1VOTE9DSzsKIAkJb3ZlcmxhcF9kb25lID0gMTsKIAkJZ290byBvdXRfZGVsOwogCX0KIAogCWlmIChpc19vdmVybGFwX2NhbmNlbChsa2IpICYmIChtc3R5cGUgPT0gRExNX01TR19DQU5DRUxfUkVQTFkpKSB7CisJCWxvZ19kZWJ1ZyhscywgInJlbXdhaXQgJXggY2FuY2VsX3JlcGx5IG92ZXJsYXAiLCBsa2ItPmxrYl9pZCk7CiAJCWxrYi0+bGtiX2ZsYWdzICY9IH5ETE1fSUZMX09WRVJMQVBfQ0FOQ0VMOwogCQlvdmVybGFwX2RvbmUgPSAxOwogCQlnb3RvIG91dF9kZWw7CiAJfQogCisJLyogQ2FuY2VsIHN0YXRlIHdhcyBwcmVlbXB0aXZlbHkgY2xlYXJlZCBieSBhIHN1Y2Nlc3NmdWwgY29udmVydCwKKwkgICBzZWUgbmV4dCBjb21tZW50LCBub3RoaW5nIHRvIGRvLiAqLworCisJaWYgKChtc3R5cGUgPT0gRExNX01TR19DQU5DRUxfUkVQTFkpICYmCisJICAgIChsa2ItPmxrYl93YWl0X3R5cGUgIT0gRExNX01TR19DQU5DRUwpKSB7CisJCWxvZ19kZWJ1ZyhscywgInJlbXdhaXQgJXggY2FuY2VsX3JlcGx5IHdhaXRfdHlwZSAlZCIsCisJCQkgIGxrYi0+bGtiX2lkLCBsa2ItPmxrYl93YWl0X3R5cGUpOworCQlyZXR1cm4gLTE7CisJfQorCisJLyogUmVtb3ZlIGZvciB0aGUgY29udmVydCByZXBseSwgYW5kIHByZW1wdGl2ZWx5IHJlbW92ZSBmb3IgdGhlCisJICAgY2FuY2VsIHJlcGx5LiAgQSBjb252ZXJ0IGhhcyBiZWVuIGdyYW50ZWQgd2hpbGUgdGhlcmUncyBzdGlsbAorCSAgIGFuIG91dHN0YW5kaW5nIGNhbmNlbCBvbiBpdCAodGhlIGNhbmNlbCBpcyBtb290IGFuZCB0aGUgcmVzdWx0CisJICAgaW4gdGhlIGNhbmNlbCByZXBseSBzaG91bGQgYmUgMCkuICBXZSBwcmVlbXB0IHRoZSBjYW5jZWwgcmVwbHkKKwkgICBiZWNhdXNlIHRoZSBhcHAgZ2V0cyB0aGUgY29udmVydCByZXN1bHQgYW5kIHRoZW4gY2FuIGZvbGxvdyB1cAorCSAgIHdpdGggYW5vdGhlciBvcCwgbGlrZSBjb252ZXJ0LiAgVGhpcyBzdWJzZXF1ZW50IG9wIHdvdWxkIHNlZSB0aGUKKwkgICBsaW5nZXJpbmcgc3RhdGUgb2YgdGhlIGNhbmNlbCBhbmQgZmFpbCB3aXRoIC1FQlVTWS4gKi8KKworCWlmICgobXN0eXBlID09IERMTV9NU0dfQ09OVkVSVF9SRVBMWSkgJiYKKwkgICAgKGxrYi0+bGtiX3dhaXRfdHlwZSA9PSBETE1fTVNHX0NPTlZFUlQpICYmCisJICAgIGlzX292ZXJsYXBfY2FuY2VsKGxrYikgJiYgbXMgJiYgIW1zLT5tX3Jlc3VsdCkgeworCQlsb2dfZGVidWcobHMsICJyZW13YWl0ICV4IGNvbnZlcnRfcmVwbHkgemFwIG92ZXJsYXBfY2FuY2VsIiwKKwkJCSAgbGtiLT5sa2JfaWQpOworCQlsa2ItPmxrYl93YWl0X3R5cGUgPSAwOworCQlsa2ItPmxrYl9mbGFncyAmPSB+RExNX0lGTF9PVkVSTEFQX0NBTkNFTDsKKwkJbGtiLT5sa2Jfd2FpdF9jb3VudC0tOworCQlnb3RvIG91dF9kZWw7CisJfQorCiAJLyogTi5CLiB0eXBlIG9mIHJlcGx5IG1heSBub3QgYWx3YXlzIGNvcnJlc3BvbmQgdG8gdHlwZSBvZiBvcmlnaW5hbAogCSAgIG1zZyBkdWUgdG8gbG9va3VwLT5yZXF1ZXN0IG9wdGltaXphdGlvbiwgdmVyaWZ5IG90aGVycz8gKi8KIApAQCAtODg4LDggKzkyMCw4IEBACiAJCWdvdG8gb3V0X2RlbDsKIAl9CiAKLQlsb2dfZXJyb3IobHMsICJyZW1vdmVfZnJvbV93YWl0ZXJzIGxraWQgJXggZmxhZ3MgJXggdHlwZXMgJWQgJWQiLAotCQkgIGxrYi0+bGtiX2lkLCBsa2ItPmxrYl9mbGFncywgbXN0eXBlLCBsa2ItPmxrYl93YWl0X3R5cGUpOworCWxvZ19lcnJvcihscywgInJlbXdhaXQgZXJyb3IgJXggcmVwbHkgJWQgZmxhZ3MgJXggbm8gd2FpdF90eXBlIiwKKwkJICBsa2ItPmxrYl9pZCwgbXN0eXBlLCBsa2ItPmxrYl9mbGFncyk7CiAJcmV0dXJuIC0xOwogCiAgb3V0X2RlbDoKQEAgLTg5OSw3ICs5MzEsNyBAQAogCSAgIHRoaXMgd291bGQgaGFwcGVuICovCiAKIAlpZiAob3ZlcmxhcF9kb25lICYmIGxrYi0+bGtiX3dhaXRfdHlwZSkgewotCQlsb2dfZXJyb3IobHMsICJyZW1vdmVfZnJvbV93YWl0ZXJzICV4IHJlcGx5ICVkIGdpdmUgdXAgb24gJWQiLAorCQlsb2dfZXJyb3IobHMsICJyZW13YWl0IGVycm9yICV4IHJlcGx5ICVkIHdhaXRfdHlwZSAlZCBvdmVybGFwIiwKIAkJCSAgbGtiLT5sa2JfaWQsIG1zdHlwZSwgbGtiLT5sa2Jfd2FpdF90eXBlKTsKIAkJbGtiLT5sa2Jfd2FpdF9jb3VudC0tOwogCQlsa2ItPmxrYl93YWl0X3R5cGUgPSAwOwpAQCAtOTIxLDcgKzk1Myw3IEBACiAJaW50IGVycm9yOwogCiAJbXV0ZXhfbG9jaygmbHMtPmxzX3dhaXRlcnNfbXV0ZXgpOwotCWVycm9yID0gX3JlbW92ZV9mcm9tX3dhaXRlcnMobGtiLCBtc3R5cGUpOworCWVycm9yID0gX3JlbW92ZV9mcm9tX3dhaXRlcnMobGtiLCBtc3R5cGUsIE5VTEwpOwogCW11dGV4X3VubG9jaygmbHMtPmxzX3dhaXRlcnNfbXV0ZXgpOwogCXJldHVybiBlcnJvcjsKIH0KQEAgLTkzNiw3ICs5NjgsNyBAQAogCiAJaWYgKG1zICE9ICZscy0+bHNfc3R1Yl9tcykKIAkJbXV0ZXhfbG9jaygmbHMtPmxzX3dhaXRlcnNfbXV0ZXgpOwotCWVycm9yID0gX3JlbW92ZV9mcm9tX3dhaXRlcnMobGtiLCBtcy0+bV90eXBlKTsKKwllcnJvciA9IF9yZW1vdmVfZnJvbV93YWl0ZXJzKGxrYiwgbXMtPm1fdHlwZSwgbXMpOwogCWlmIChtcyAhPSAmbHMtPmxzX3N0dWJfbXMpCiAJCW11dGV4X3VubG9jaygmbHMtPmxzX3dhaXRlcnNfbXV0ZXgpOwogCXJldHVybiBlcnJvcjsKQEAgLTIwODMsNiArMjExNSwxMSBAQAogCWxrYi0+bGtiX3RpbWVvdXRfY3MgPSBhcmdzLT50aW1lb3V0OwogCXJ2ID0gMDsKICBvdXQ6CisJaWYgKHJ2KQorCQlsb2dfZGVidWcobHMsICJ2YWxpZGF0ZV9sb2NrX2FyZ3MgJWQgJXggJXggJXggJWQgJWQgJXMiLAorCQkJICBydiwgbGtiLT5sa2JfaWQsIGxrYi0+bGtiX2ZsYWdzLCBhcmdzLT5mbGFncywKKwkJCSAgbGtiLT5sa2Jfc3RhdHVzLCBsa2ItPmxrYl93YWl0X3R5cGUsCisJCQkgIGxrYi0+bGtiX3Jlc291cmNlLT5yZXNfbmFtZSk7CiAJcmV0dXJuIHJ2OwogfQogCkBAIC0yMTQ5LDYgKzIxODYsMTMgQEAKIAkJCWdvdG8gb3V0OwogCQl9CiAKKwkJLyogdGhlcmUncyBub3RoaW5nIHRvIGNhbmNlbCAqLworCQlpZiAobGtiLT5sa2Jfc3RhdHVzID09IERMTV9MS1NUU19HUkFOVEVEICYmCisJCSAgICAhbGtiLT5sa2Jfd2FpdF90eXBlKSB7CisJCQlydiA9IC1FQlVTWTsKKwkJCWdvdG8gb3V0OworCQl9CisKIAkJc3dpdGNoIChsa2ItPmxrYl93YWl0X3R5cGUpIHsKIAkJY2FzZSBETE1fTVNHX0xPT0tVUDoKIAkJY2FzZSBETE1fTVNHX1JFUVVFU1Q6CmRpZmYgLS1naXQgYS9mcy9kbG0vbG9ja3NwYWNlLmMgYi9mcy9kbG0vbG9ja3NwYWNlLmMKaW5kZXggYWEzMmU1Zi4uY2Q4ZTJkZiAxMDA2NDQKLS0tIGEvZnMvZGxtL2xvY2tzcGFjZS5jCisrKyBiL2ZzL2RsbS9sb2Nrc3BhY2UuYwpAQCAtNDg3LDcgKzQ4Nyw3IEBACiAJCWdvdG8gb3V0X2xrYmZyZWU7CiAJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgewogCQlJTklUX0xJU1RfSEVBRCgmbHMtPmxzX2RpcnRibFtpXS5saXN0KTsKLQkJcndsb2NrX2luaXQoJmxzLT5sc19kaXJ0YmxbaV0ubG9jayk7CisJCXNwaW5fbG9ja19pbml0KCZscy0+bHNfZGlydGJsW2ldLmxvY2spOwogCX0KIAogCUlOSVRfTElTVF9IRUFEKCZscy0+bHNfd2FpdGVycyk7CmRpZmYgLS1naXQgYS9mcy9kbG0vbG93Y29tbXMuYyBiL2ZzL2RsbS9sb3djb21tcy5jCmluZGV4IDEwM2E1ZWIuLjYwOTEwOGEgMTAwNjQ0Ci0tLSBhL2ZzL2RsbS9sb3djb21tcy5jCisrKyBiL2ZzL2RsbS9sb3djb21tcy5jCkBAIC0yLDcgKzIsNyBAQAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKioKICoqICBDb3B5cmlnaHQgKEMpIFNpc3RpbmEgU29mdHdhcmUsIEluYy4gIDE5OTctMjAwMyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSoqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBSZWQgSGF0LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKiogIENvcHlyaWdodCAoQykgMjAwNC0yMDA5IFJlZCBIYXQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqKgogKiogIFRoaXMgY29weXJpZ2h0ZWQgbWF0ZXJpYWwgaXMgbWFkZSBhdmFpbGFibGUgdG8gYW55b25lIHdpc2hpbmcgdG8gdXNlLAogKiogIG1vZGlmeSwgY29weSwgb3IgcmVkaXN0cmlidXRlIGl0IHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCkBAIC0yMSw3ICsyMSw3IEBACiAgKgogICogQ2x1c3RlciBub2RlcyBhcmUgcmVmZXJyZWQgdG8gYnkgdGhlaXIgbm9kZWlkcy4gbm9kZWlkcyBhcmUKICAqIHNpbXBseSAzMiBiaXQgbnVtYmVycyB0byB0aGUgbG9ja2luZyBtb2R1bGUgLSBpZiB0aGV5IG5lZWQgdG8KLSAqIGJlIGV4cGFuZGVkIGZvciB0aGUgY2x1c3RlciBpbmZyYXN0cnVjdHVyZSB0aGVuIHRoYXQgaXMgaXQncworICogYmUgZXhwYW5kZWQgZm9yIHRoZSBjbHVzdGVyIGluZnJhc3RydWN0dXJlIHRoZW4gdGhhdCBpcyBpdHMKICAqIHJlc3BvbnNpYmlsaXR5LiBJdCBpcyB0aGlzIGxheWVyJ3MKICAqIHJlc3BvbnNpYmlsaXR5IHRvIHJlc29sdmUgdGhlc2UgaW50byBJUCBhZGRyZXNzIG9yCiAgKiB3aGF0ZXZlciBpdCBuZWVkcyBmb3IgaW50ZXItbm9kZSBjb21tdW5pY2F0aW9uLgpAQCAtMzYsOSArMzYsOSBAQAogICogb2YgaGlnaCBsb2FkLiBBbHNvLCB0aGlzIHdheSwgdGhlIHNlbmRpbmcgdGhyZWFkIGNhbiBjb2xsZWN0IHRvZ2V0aGVyCiAgKiBtZXNzYWdlcyBib3VuZCBmb3Igb25lIG5vZGUgYW5kIHNlbmQgdGhlbSBpbiBvbmUgYmxvY2suCiAgKgotICogbG93Y29tbXMgd2lsbCBjaG9vc2UgdG8gdXNlIHdpdGhlciBUQ1Agb3IgU0NUUCBhcyBpdHMgdHJhbnNwb3J0IGxheWVyCisgKiBsb3djb21tcyB3aWxsIGNob29zZSB0byB1c2UgZWl0aGVyIFRDUCBvciBTQ1RQIGFzIGl0cyB0cmFuc3BvcnQgbGF5ZXIKICAqIGRlcGVuZGluZyBvbiB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSAncHJvdG9jb2wnLiBUaGlzIHNob3VsZCBiZSBzZXQKLSAqIHRvIDAgKGRlZmF1bHQpIGZvciBUQ1Agb3IgMSBmb3IgU0NUUC4gSXQgc2hvdWxkYmUgY29uZmlndXJlZCB1c2luZyBhCisgKiB0byAwIChkZWZhdWx0KSBmb3IgVENQIG9yIDEgZm9yIFNDVFAuIEl0IHNob3VsZCBiZSBjb25maWd1cmVkIHVzaW5nIGEKICAqIGNsdXN0ZXItd2lkZSBtZWNoYW5pc20gYXMgaXQgbXVzdCBiZSB0aGUgc2FtZSBvbiBhbGwgbm9kZXMgb2YgdGhlIGNsdXN0ZXIKICAqIGZvciB0aGUgRExNIHRvIGZ1bmN0aW9uLgogICoKQEAgLTQ4LDExICs0OCwxMSBAQAogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CiAjaW5jbHVkZSA8bmV0L3RjcC5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KLSNpbmNsdWRlIDxsaW51eC9pZHIuaD4KICNpbmNsdWRlIDxsaW51eC9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9zY3RwLmg+CiAjaW5jbHVkZSA8bmV0L3NjdHAvdXNlci5oPgorI2luY2x1ZGUgPG5ldC9pcHY2Lmg+CiAKICNpbmNsdWRlICJkbG1faW50ZXJuYWwuaCIKICNpbmNsdWRlICJsb3djb21tcy5oIgpAQCAtNjAsNiArNjAsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogCiAjZGVmaW5lIE5FRURFRF9STUVNICg0KjEwMjQqMTAyNCkKKyNkZWZpbmUgQ09OTl9IQVNIX1NJWkUgMzIKIAogc3RydWN0IGNidWYgewogCXVuc2lnbmVkIGludCBiYXNlOwpAQCAtMTE0LDYgKzExNSw3IEBACiAJaW50IHJldHJpZXM7CiAjZGVmaW5lIE1BWF9DT05ORUNUX1JFVFJJRVMgMwogCWludCBzY3RwX2Fzc29jOworCXN0cnVjdCBobGlzdF9ub2RlIGxpc3Q7CiAJc3RydWN0IGNvbm5lY3Rpb24gKm90aGVyY29uOwogCXN0cnVjdCB3b3JrX3N0cnVjdCByd29yazsgLyogUmVjZWl2ZSB3b3JrcXVldWUgKi8KIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc3dvcms7IC8qIFNlbmQgd29ya3F1ZXVlICovCkBAIC0xMzgsMTQgKzE0MCwzNyBAQAogc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpyZWN2X3dvcmtxdWV1ZTsKIHN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqc2VuZF93b3JrcXVldWU7CiAKLXN0YXRpYyBERUZJTkVfSURSKGNvbm5lY3Rpb25zX2lkcik7CitzdGF0aWMgc3RydWN0IGhsaXN0X2hlYWQgY29ubmVjdGlvbl9oYXNoW0NPTk5fSEFTSF9TSVpFXTsKIHN0YXRpYyBERUZJTkVfTVVURVgoY29ubmVjdGlvbnNfbG9jayk7Ci1zdGF0aWMgaW50IG1heF9ub2RlaWQ7CiBzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmNvbl9jYWNoZTsKIAogc3RhdGljIHZvaWQgcHJvY2Vzc19yZWN2X3NvY2tldHMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIHN0YXRpYyB2b2lkIHByb2Nlc3Nfc2VuZF9zb2NrZXRzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiAKKworLyogVGhpcyBpcyBkZWxpYmVyYXRlbHkgdmVyeSBzaW1wbGUgYmVjYXVzZSBtb3N0IGNsdXN0ZXJzIGhhdmUgc2ltcGxlCisgICBzZXF1ZW50aWFsIG5vZGVpZHMsIHNvIHdlIHNob3VsZCBiZSBhYmxlIHRvIGdvIHN0cmFpZ2h0IHRvIGEgY29ubmVjdGlvbgorICAgc3RydWN0IGluIHRoZSBhcnJheSAqLworc3RhdGljIGlubGluZSBpbnQgbm9kZWlkX2hhc2goaW50IG5vZGVpZCkKK3sKKwlyZXR1cm4gbm9kZWlkICYgKENPTk5fSEFTSF9TSVpFLTEpOworfQorCitzdGF0aWMgc3RydWN0IGNvbm5lY3Rpb24gKl9fZmluZF9jb24oaW50IG5vZGVpZCkKK3sKKwlpbnQgcjsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqaDsKKwlzdHJ1Y3QgY29ubmVjdGlvbiAqY29uOworCisJciA9IG5vZGVpZF9oYXNoKG5vZGVpZCk7CisKKwlobGlzdF9mb3JfZWFjaF9lbnRyeShjb24sIGgsICZjb25uZWN0aW9uX2hhc2hbcl0sIGxpc3QpIHsKKwkJaWYgKGNvbi0+bm9kZWlkID09IG5vZGVpZCkKKwkJCXJldHVybiBjb247CisJfQorCXJldHVybiBOVUxMOworfQorCiAvKgogICogSWYgJ2FsbG9jYXRpb24nIGlzIHplcm8gdGhlbiB3ZSBkb24ndCBhdHRlbXB0IHRvIGNyZWF0ZSBhIG5ldwogICogY29ubmVjdGlvbiBzdHJ1Y3R1cmUgZm9yIHRoaXMgbm9kZS4KQEAgLTE1NCwzMSArMTc5LDE3IEBACiB7CiAJc3RydWN0IGNvbm5lY3Rpb24gKmNvbiA9IE5VTEw7CiAJaW50IHI7Ci0JaW50IG47CiAKLQljb24gPSBpZHJfZmluZCgmY29ubmVjdGlvbnNfaWRyLCBub2RlaWQpOworCWNvbiA9IF9fZmluZF9jb24obm9kZWlkKTsKIAlpZiAoY29uIHx8ICFhbGxvYykKIAkJcmV0dXJuIGNvbjsKIAotCXIgPSBpZHJfcHJlX2dldCgmY29ubmVjdGlvbnNfaWRyLCBhbGxvYyk7Ci0JaWYgKCFyKQotCQlyZXR1cm4gTlVMTDsKLQogCWNvbiA9IGttZW1fY2FjaGVfemFsbG9jKGNvbl9jYWNoZSwgYWxsb2MpOwogCWlmICghY29uKQogCQlyZXR1cm4gTlVMTDsKIAotCXIgPSBpZHJfZ2V0X25ld19hYm92ZSgmY29ubmVjdGlvbnNfaWRyLCBjb24sIG5vZGVpZCwgJm4pOwotCWlmIChyKSB7Ci0JCWttZW1fY2FjaGVfZnJlZShjb25fY2FjaGUsIGNvbik7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCWlmIChuICE9IG5vZGVpZCkgewotCQlpZHJfcmVtb3ZlKCZjb25uZWN0aW9uc19pZHIsIG4pOwotCQlrbWVtX2NhY2hlX2ZyZWUoY29uX2NhY2hlLCBjb24pOwotCQlyZXR1cm4gTlVMTDsKLQl9CisJciA9IG5vZGVpZF9oYXNoKG5vZGVpZCk7CisJaGxpc3RfYWRkX2hlYWQoJmNvbi0+bGlzdCwgJmNvbm5lY3Rpb25faGFzaFtyXSk7CiAKIAljb24tPm5vZGVpZCA9IG5vZGVpZDsKIAltdXRleF9pbml0KCZjb24tPnNvY2tfbXV0ZXgpOwpAQCAtMTg5LDE5ICsyMDAsMzAgQEAKIAogCS8qIFNldHVwIGFjdGlvbiBwb2ludGVycyBmb3IgY2hpbGQgc29ja2V0cyAqLwogCWlmIChjb24tPm5vZGVpZCkgewotCQlzdHJ1Y3QgY29ubmVjdGlvbiAqemVyb2NvbiA9IGlkcl9maW5kKCZjb25uZWN0aW9uc19pZHIsIDApOworCQlzdHJ1Y3QgY29ubmVjdGlvbiAqemVyb2NvbiA9IF9fZmluZF9jb24oMCk7CiAKIAkJY29uLT5jb25uZWN0X2FjdGlvbiA9IHplcm9jb24tPmNvbm5lY3RfYWN0aW9uOwogCQlpZiAoIWNvbi0+cnhfYWN0aW9uKQogCQkJY29uLT5yeF9hY3Rpb24gPSB6ZXJvY29uLT5yeF9hY3Rpb247CiAJfQogCi0JaWYgKG5vZGVpZCA+IG1heF9ub2RlaWQpCi0JCW1heF9ub2RlaWQgPSBub2RlaWQ7Ci0KIAlyZXR1cm4gY29uOwogfQogCisvKiBMb29wIHJvdW5kIGFsbCBjb25uZWN0aW9ucyAqLworc3RhdGljIHZvaWQgZm9yZWFjaF9jb25uKHZvaWQgKCpjb25uX2Z1bmMpKHN0cnVjdCBjb25uZWN0aW9uICpjKSkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqaCwgKm47CisJc3RydWN0IGNvbm5lY3Rpb24gKmNvbjsKKworCWZvciAoaSA9IDA7IGkgPCBDT05OX0hBU0hfU0laRTsgaSsrKSB7CisJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY29uLCBoLCBuLCAmY29ubmVjdGlvbl9oYXNoW2ldLCBsaXN0KXsKKwkJCWNvbm5fZnVuYyhjb24pOworCQl9CisJfQorfQorCiBzdGF0aWMgc3RydWN0IGNvbm5lY3Rpb24gKm5vZGVpZDJjb24oaW50IG5vZGVpZCwgZ2ZwX3QgYWxsb2NhdGlvbikKIHsKIAlzdHJ1Y3QgY29ubmVjdGlvbiAqY29uOwpAQCAtMjE3LDE0ICsyMzksMTcgQEAKIHN0YXRpYyBzdHJ1Y3QgY29ubmVjdGlvbiAqYXNzb2MyY29uKGludCBhc3NvY19pZCkKIHsKIAlpbnQgaTsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqaDsKIAlzdHJ1Y3QgY29ubmVjdGlvbiAqY29uOwogCiAJbXV0ZXhfbG9jaygmY29ubmVjdGlvbnNfbG9jayk7Ci0JZm9yIChpPTA7IGk8PW1heF9ub2RlaWQ7IGkrKykgewotCQljb24gPSBfX25vZGVpZDJjb24oaSwgMCk7Ci0JCWlmIChjb24gJiYgY29uLT5zY3RwX2Fzc29jID09IGFzc29jX2lkKSB7Ci0JCQltdXRleF91bmxvY2soJmNvbm5lY3Rpb25zX2xvY2spOwotCQkJcmV0dXJuIGNvbjsKKworCWZvciAoaSA9IDAgOyBpIDwgQ09OTl9IQVNIX1NJWkU7IGkrKykgeworCQlobGlzdF9mb3JfZWFjaF9lbnRyeShjb24sIGgsICZjb25uZWN0aW9uX2hhc2hbaV0sIGxpc3QpIHsKKwkJCWlmIChjb24gJiYgY29uLT5zY3RwX2Fzc29jID09IGFzc29jX2lkKSB7CisJCQkJbXV0ZXhfdW5sb2NrKCZjb25uZWN0aW9uc19sb2NrKTsKKwkJCQlyZXR1cm4gY29uOworCQkJfQogCQl9CiAJfQogCW11dGV4X3VubG9jaygmY29ubmVjdGlvbnNfbG9jayk7CkBAIC0yNTAsOCArMjc1LDcgQEAKIAl9IGVsc2UgewogCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICppbjYgID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikgJmFkZHI7CiAJCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnJldDYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSByZXRhZGRyOwotCQltZW1jcHkoJnJldDYtPnNpbjZfYWRkciwgJmluNi0+c2luNl9hZGRyLAotCQkgICAgICAgc2l6ZW9mKGluNi0+c2luNl9hZGRyKSk7CisJCWlwdjZfYWRkcl9jb3B5KCZyZXQ2LT5zaW42X2FkZHIsICZpbjYtPnNpbjZfYWRkcik7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0zNzYsMjUgKzQwMCwyMyBAQAogCQlsb2dfcHJpbnQoInNlbmQgRU9GIHRvIG5vZGUgZmFpbGVkOiAlZCIsIHJldCk7CiB9CiAKK3N0YXRpYyB2b2lkIHNjdHBfaW5pdF9mYWlsZWRfZm9yZWFjaChzdHJ1Y3QgY29ubmVjdGlvbiAqY29uKQoreworCWNvbi0+c2N0cF9hc3NvYyA9IDA7CisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChDRl9DT05ORUNUX1BFTkRJTkcsICZjb24tPmZsYWdzKSkgeworCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoQ0ZfV1JJVEVfUEVORElORywgJmNvbi0+ZmxhZ3MpKQorCQkJcXVldWVfd29yayhzZW5kX3dvcmtxdWV1ZSwgJmNvbi0+c3dvcmspOworCX0KK30KKwogLyogSU5JVCBmYWlsZWQgYnV0IHdlIGRvbid0IGtub3cgd2hpY2ggbm9kZS4uLgogICAgcmVzdGFydCBJTklUIG9uIGFsbCBwZW5kaW5nIG5vZGVzICovCiBzdGF0aWMgdm9pZCBzY3RwX2luaXRfZmFpbGVkKHZvaWQpCiB7Ci0JaW50IGk7Ci0Jc3RydWN0IGNvbm5lY3Rpb24gKmNvbjsKLQogCW11dGV4X2xvY2soJmNvbm5lY3Rpb25zX2xvY2spOwotCWZvciAoaT0xOyBpPD1tYXhfbm9kZWlkOyBpKyspIHsKLQkJY29uID0gX19ub2RlaWQyY29uKGksIDApOwotCQlpZiAoIWNvbikKLQkJCWNvbnRpbnVlOwotCQljb24tPnNjdHBfYXNzb2MgPSAwOwotCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KENGX0NPTk5FQ1RfUEVORElORywgJmNvbi0+ZmxhZ3MpKSB7Ci0JCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoQ0ZfV1JJVEVfUEVORElORywgJmNvbi0+ZmxhZ3MpKSB7Ci0JCQkJcXVldWVfd29yayhzZW5kX3dvcmtxdWV1ZSwgJmNvbi0+c3dvcmspOwotCQkJfQotCQl9Ci0JfQorCisJZm9yZWFjaF9jb25uKHNjdHBfaW5pdF9mYWlsZWRfZm9yZWFjaCk7CisKIAltdXRleF91bmxvY2soJmNvbm5lY3Rpb25zX2xvY2spOwogfQogCkBAIC0xMzEzLDEzICsxMzM1LDEwIEBACiAKIHN0YXRpYyB2b2lkIGNsZWFuX29uZV93cml0ZXF1ZXVlKHN0cnVjdCBjb25uZWN0aW9uICpjb24pCiB7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqbGlzdDsKLQlzdHJ1Y3QgbGlzdF9oZWFkICp0ZW1wOworCXN0cnVjdCB3cml0ZXF1ZXVlX2VudHJ5ICplLCAqc2FmZTsKIAogCXNwaW5fbG9jaygmY29uLT53cml0ZXF1ZXVlX2xvY2spOwotCWxpc3RfZm9yX2VhY2hfc2FmZShsaXN0LCB0ZW1wLCAmY29uLT53cml0ZXF1ZXVlKSB7Ci0JCXN0cnVjdCB3cml0ZXF1ZXVlX2VudHJ5ICplID0KLQkJCWxpc3RfZW50cnkobGlzdCwgc3RydWN0IHdyaXRlcXVldWVfZW50cnksIGxpc3QpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlLCBzYWZlLCAmY29uLT53cml0ZXF1ZXVlLCBsaXN0KSB7CiAJCWxpc3RfZGVsKCZlLT5saXN0KTsKIAkJZnJlZV9lbnRyeShlKTsKIAl9CkBAIC0xMzY5LDE0ICsxMzg4LDcgQEAKIC8qIERpc2NhcmQgYWxsIGVudHJpZXMgb24gdGhlIHdyaXRlIHF1ZXVlcyAqLwogc3RhdGljIHZvaWQgY2xlYW5fd3JpdGVxdWV1ZXModm9pZCkKIHsKLQlpbnQgbm9kZWlkOwotCi0JZm9yIChub2RlaWQgPSAxOyBub2RlaWQgPD0gbWF4X25vZGVpZDsgbm9kZWlkKyspIHsKLQkJc3RydWN0IGNvbm5lY3Rpb24gKmNvbiA9IF9fbm9kZWlkMmNvbihub2RlaWQsIDApOwotCi0JCWlmIChjb24pCi0JCQljbGVhbl9vbmVfd3JpdGVxdWV1ZShjb24pOwotCX0KKwlmb3JlYWNoX2Nvbm4oY2xlYW5fb25lX3dyaXRlcXVldWUpOwogfQogCiBzdGF0aWMgdm9pZCB3b3JrX3N0b3Aodm9pZCkKQEAgLTE0MDYsMjMgKzE0MTgsMjkgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgc3RvcF9jb25uKHN0cnVjdCBjb25uZWN0aW9uICpjb24pCit7CisJY29uLT5mbGFncyB8PSAweDBGOworCWlmIChjb24tPnNvY2spCisJCWNvbi0+c29jay0+c2stPnNrX3VzZXJfZGF0YSA9IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfY29ubihzdHJ1Y3QgY29ubmVjdGlvbiAqY29uKQoreworCWNsb3NlX2Nvbm5lY3Rpb24oY29uLCB0cnVlKTsKKwlpZiAoY29uLT5vdGhlcmNvbikKKwkJa21lbV9jYWNoZV9mcmVlKGNvbl9jYWNoZSwgY29uLT5vdGhlcmNvbik7CisJaGxpc3RfZGVsKCZjb24tPmxpc3QpOworCWttZW1fY2FjaGVfZnJlZShjb25fY2FjaGUsIGNvbik7Cit9CisKIHZvaWQgZGxtX2xvd2NvbW1zX3N0b3Aodm9pZCkKIHsKLQlpbnQgaTsKLQlzdHJ1Y3QgY29ubmVjdGlvbiAqY29uOwotCiAJLyogU2V0IGFsbCB0aGUgZmxhZ3MgdG8gcHJldmVudCBhbnkKIAkgICBzb2NrZXQgYWN0aXZpdHkuCiAJKi8KIAltdXRleF9sb2NrKCZjb25uZWN0aW9uc19sb2NrKTsKLQlmb3IgKGkgPSAwOyBpIDw9IG1heF9ub2RlaWQ7IGkrKykgewotCQljb24gPSBfX25vZGVpZDJjb24oaSwgMCk7Ci0JCWlmIChjb24pIHsKLQkJCWNvbi0+ZmxhZ3MgfD0gMHgwRjsKLQkJCWlmIChjb24tPnNvY2spCi0JCQkJY29uLT5zb2NrLT5zay0+c2tfdXNlcl9kYXRhID0gTlVMTDsKLQkJfQotCX0KKwlmb3JlYWNoX2Nvbm4oc3RvcF9jb25uKTsKIAltdXRleF91bmxvY2soJmNvbm5lY3Rpb25zX2xvY2spOwogCiAJd29ya19zdG9wKCk7CkBAIC0xNDMwLDI1ICsxNDQ4LDIwIEBACiAJbXV0ZXhfbG9jaygmY29ubmVjdGlvbnNfbG9jayk7CiAJY2xlYW5fd3JpdGVxdWV1ZXMoKTsKIAotCWZvciAoaSA9IDA7IGkgPD0gbWF4X25vZGVpZDsgaSsrKSB7Ci0JCWNvbiA9IF9fbm9kZWlkMmNvbihpLCAwKTsKLQkJaWYgKGNvbikgewotCQkJY2xvc2VfY29ubmVjdGlvbihjb24sIHRydWUpOwotCQkJaWYgKGNvbi0+b3RoZXJjb24pCi0JCQkJa21lbV9jYWNoZV9mcmVlKGNvbl9jYWNoZSwgY29uLT5vdGhlcmNvbik7Ci0JCQlrbWVtX2NhY2hlX2ZyZWUoY29uX2NhY2hlLCBjb24pOwotCQl9Ci0JfQotCW1heF9ub2RlaWQgPSAwOworCWZvcmVhY2hfY29ubihmcmVlX2Nvbm4pOworCiAJbXV0ZXhfdW5sb2NrKCZjb25uZWN0aW9uc19sb2NrKTsKIAlrbWVtX2NhY2hlX2Rlc3Ryb3koY29uX2NhY2hlKTsKLQlpZHJfaW5pdCgmY29ubmVjdGlvbnNfaWRyKTsKIH0KIAogaW50IGRsbV9sb3djb21tc19zdGFydCh2b2lkKQogewogCWludCBlcnJvciA9IC1FSU5WQUw7CiAJc3RydWN0IGNvbm5lY3Rpb24gKmNvbjsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBDT05OX0hBU0hfU0laRTsgaSsrKQorCQlJTklUX0hMSVNUX0hFQUQoJmNvbm5lY3Rpb25faGFzaFtpXSk7CiAKIAlpbml0X2xvY2FsKCk7CiAJaWYgKCFkbG1fbG9jYWxfY291bnQpIHsKZGlmZiAtLWdpdCBhL2ZzL2RsbS91c2VyLmMgYi9mcy9kbG0vdXNlci5jCmluZGV4IDA2NTE0OWUuLmViY2U5OTQgMTAwNjQ0Ci0tLSBhL2ZzL2RsbS91c2VyLmMKKysrIGIvZnMvZGxtL3VzZXIuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwOCBSZWQgSGF0LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMDkgUmVkIEhhdCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGNvcHlyaWdodGVkIG1hdGVyaWFsIGlzIG1hZGUgYXZhaWxhYmxlIHRvIGFueW9uZSB3aXNoaW5nIHRvIHVzZSwKICAqIG1vZGlmeSwgY29weSwgb3IgcmVkaXN0cmlidXRlIGl0IHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCkBAIC04NCw3ICs4NCw3IEBACiAKIHN0YXRpYyB2b2lkIGNvbXBhdF9pbnB1dChzdHJ1Y3QgZGxtX3dyaXRlX3JlcXVlc3QgKmtiLAogCQkJIHN0cnVjdCBkbG1fd3JpdGVfcmVxdWVzdDMyICprYjMyLAotCQkJIHNpemVfdCBjb3VudCkKKwkJCSBpbnQgbmFtZWxlbikKIHsKIAlrYi0+dmVyc2lvblswXSA9IGtiMzItPnZlcnNpb25bMF07CiAJa2ItPnZlcnNpb25bMV0gPSBrYjMyLT52ZXJzaW9uWzFdOwpAQCAtOTYsOCArOTYsNyBAQAogCSAgICBrYi0+Y21kID09IERMTV9VU0VSX1JFTU9WRV9MT0NLU1BBQ0UpIHsKIAkJa2ItPmkubHNwYWNlLmZsYWdzID0ga2IzMi0+aS5sc3BhY2UuZmxhZ3M7CiAJCWtiLT5pLmxzcGFjZS5taW5vciA9IGtiMzItPmkubHNwYWNlLm1pbm9yOwotCQltZW1jcHkoa2ItPmkubHNwYWNlLm5hbWUsIGtiMzItPmkubHNwYWNlLm5hbWUsIGNvdW50IC0KLQkJCW9mZnNldG9mKHN0cnVjdCBkbG1fd3JpdGVfcmVxdWVzdDMyLCBpLmxzcGFjZS5uYW1lKSk7CisJCW1lbWNweShrYi0+aS5sc3BhY2UubmFtZSwga2IzMi0+aS5sc3BhY2UubmFtZSwgbmFtZWxlbik7CiAJfSBlbHNlIGlmIChrYi0+Y21kID09IERMTV9VU0VSX1BVUkdFKSB7CiAJCWtiLT5pLnB1cmdlLm5vZGVpZCA9IGtiMzItPmkucHVyZ2Uubm9kZWlkOwogCQlrYi0+aS5wdXJnZS5waWQgPSBrYjMyLT5pLnB1cmdlLnBpZDsKQEAgLTExNSw4ICsxMTQsNyBAQAogCQlrYi0+aS5sb2NrLmJhc3RhZGRyID0gKHZvaWQgKikobG9uZylrYjMyLT5pLmxvY2suYmFzdGFkZHI7CiAJCWtiLT5pLmxvY2subGtzYiA9ICh2b2lkICopKGxvbmcpa2IzMi0+aS5sb2NrLmxrc2I7CiAJCW1lbWNweShrYi0+aS5sb2NrLmx2Yiwga2IzMi0+aS5sb2NrLmx2YiwgRExNX1VTRVJfTFZCX0xFTik7Ci0JCW1lbWNweShrYi0+aS5sb2NrLm5hbWUsIGtiMzItPmkubG9jay5uYW1lLCBjb3VudCAtCi0JCQlvZmZzZXRvZihzdHJ1Y3QgZGxtX3dyaXRlX3JlcXVlc3QzMiwgaS5sb2NrLm5hbWUpKTsKKwkJbWVtY3B5KGtiLT5pLmxvY2submFtZSwga2IzMi0+aS5sb2NrLm5hbWUsIG5hbWVsZW4pOwogCX0KIH0KIApAQCAtNTM5LDkgKzUzNywxNiBAQAogI2lmZGVmIENPTkZJR19DT01QQVQKIAlpZiAoIWtidWYtPmlzNjRiaXQpIHsKIAkJc3RydWN0IGRsbV93cml0ZV9yZXF1ZXN0MzIgKmszMmJ1ZjsKKwkJaW50IG5hbWVsZW4gPSAwOworCisJCWlmIChjb3VudCA+IHNpemVvZihzdHJ1Y3QgZGxtX3dyaXRlX3JlcXVlc3QzMikpCisJCQluYW1lbGVuID0gY291bnQgLSBzaXplb2Yoc3RydWN0IGRsbV93cml0ZV9yZXF1ZXN0MzIpOworCiAJCWszMmJ1ZiA9IChzdHJ1Y3QgZGxtX3dyaXRlX3JlcXVlc3QzMiAqKWtidWY7Ci0JCWtidWYgPSBrbWFsbG9jKGNvdW50ICsgMSArIChzaXplb2Yoc3RydWN0IGRsbV93cml0ZV9yZXF1ZXN0KSAtCi0JCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBkbG1fd3JpdGVfcmVxdWVzdDMyKSksIEdGUF9LRVJORUwpOworCisJCS8qIGFkZCAxIGFmdGVyIG5hbWVsZW4gc28gdGhhdCB0aGUgbmFtZSBzdHJpbmcgaXMgdGVybWluYXRlZCAqLworCQlrYnVmID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRsbV93cml0ZV9yZXF1ZXN0KSArIG5hbWVsZW4gKyAxLAorCQkJICAgICAgIEdGUF9LRVJORUwpOwogCQlpZiAoIWtidWYpIHsKIAkJCWtmcmVlKGszMmJ1Zik7CiAJCQlyZXR1cm4gLUVOT01FTTsKQEAgLTU0OSw3ICs1NTQsOCBAQAogCiAJCWlmIChwcm9jKQogCQkJc2V0X2JpdChETE1fUFJPQ19GTEFHU19DT01QQVQsICZwcm9jLT5mbGFncyk7Ci0JCWNvbXBhdF9pbnB1dChrYnVmLCBrMzJidWYsIGNvdW50ICsgMSk7CisKKwkJY29tcGF0X2lucHV0KGtidWYsIGszMmJ1ZiwgbmFtZWxlbik7CiAJCWtmcmVlKGszMmJ1Zik7CiAJfQogI2VuZGlmCmRpZmYgLS1naXQgYS9mcy9ldmVudHBvbGwuYyBiL2ZzL2V2ZW50cG9sbC5jCmluZGV4IDAxMWI5YjguLmM1YzQyNGYgMTAwNjQ0Ci0tLSBhL2ZzL2V2ZW50cG9sbC5jCisrKyBiL2ZzL2V2ZW50cG9sbC5jCkBAIC00MTcsMTAgKzQxNywxMCBAQAogCWVwX3VucmVnaXN0ZXJfcG9sbHdhaXQoZXAsIGVwaSk7CiAKIAkvKiBSZW1vdmUgdGhlIGN1cnJlbnQgaXRlbSBmcm9tIHRoZSBsaXN0IG9mIGVwb2xsIGhvb2tzICovCi0Jc3Bpbl9sb2NrKCZmaWxlLT5mX2VwX2xvY2spOworCXNwaW5fbG9jaygmZmlsZS0+Zl9sb2NrKTsKIAlpZiAoZXBfaXNfbGlua2VkKCZlcGktPmZsbGluaykpCiAJCWxpc3RfZGVsX2luaXQoJmVwaS0+ZmxsaW5rKTsKLQlzcGluX3VubG9jaygmZmlsZS0+Zl9lcF9sb2NrKTsKKwlzcGluX3VubG9jaygmZmlsZS0+Zl9sb2NrKTsKIAogCXJiX2VyYXNlKCZlcGktPnJibiwgJmVwLT5yYnIpOwogCkBAIC01MzgsNyArNTM4LDcgQEAKIAlzdHJ1Y3QgZXBpdGVtICplcGk7CiAKIAkvKgotCSAqIFdlIGRvbid0IHdhbnQgdG8gZ2V0ICJmaWxlLT5mX2VwX2xvY2siIGJlY2F1c2UgaXQgaXMgbm90CisJICogV2UgZG9uJ3Qgd2FudCB0byBnZXQgImZpbGUtPmZfbG9jayIgYmVjYXVzZSBpdCBpcyBub3QKIAkgKiBuZWNlc3NhcnkuIEl0IGlzIG5vdCBuZWNlc3NhcnkgYmVjYXVzZSB3ZSdyZSBpbiB0aGUgInN0cnVjdCBmaWxlIgogCSAqIGNsZWFudXAgcGF0aCwgYW5kIHRoaXMgbWVhbnMgdGhhdCBub29uZSBpcyB1c2luZyB0aGlzIGZpbGUgYW55bW9yZS4KIAkgKiBTbywgZm9yIGV4YW1wbGUsIGVwb2xsX2N0bCgpIGNhbm5vdCBoaXQgaGVyZSBzaWNuZSBpZiB3ZSByZWFjaCB0aGlzCkBAIC01NDcsNiArNTQ3LDggQEAKIAkgKiB3aWxsIGNvcnJlY3RseSBzZXJpYWxpemUgdGhlIG9wZXJhdGlvbi4gV2UgZG8gbmVlZCB0byBhY3F1aXJlCiAJICogImVwLT5tdHgiIGFmdGVyICJlcG11dGV4IiBiZWNhdXNlIGVwX3JlbW92ZSgpIHJlcXVpcmVzIGl0IHdoZW4gY2FsbGVkCiAJICogZnJvbSBhbnl3aGVyZSBidXQgZXBfZnJlZSgpLgorCSAqCisJICogQmVzaWRlcywgZXBfcmVtb3ZlKCkgYWNxdWlyZXMgdGhlIGxvY2ssIHNvIHdlIGNhbid0IGhvbGQgaXQgaGVyZS4KIAkgKi8KIAltdXRleF9sb2NrKCZlcG11dGV4KTsKIApAQCAtNzg1LDkgKzc4Nyw5IEBACiAJCWdvdG8gZXJyb3JfdW5yZWdpc3RlcjsKIAogCS8qIEFkZCB0aGUgY3VycmVudCBpdGVtIHRvIHRoZSBsaXN0IG9mIGFjdGl2ZSBlcG9sbCBob29rIGZvciB0aGlzIGZpbGUgKi8KLQlzcGluX2xvY2soJnRmaWxlLT5mX2VwX2xvY2spOworCXNwaW5fbG9jaygmdGZpbGUtPmZfbG9jayk7CiAJbGlzdF9hZGRfdGFpbCgmZXBpLT5mbGxpbmssICZ0ZmlsZS0+Zl9lcF9saW5rcyk7Ci0Jc3Bpbl91bmxvY2soJnRmaWxlLT5mX2VwX2xvY2spOworCXNwaW5fdW5sb2NrKCZ0ZmlsZS0+Zl9sb2NrKTsKIAogCS8qCiAJICogQWRkIHRoZSBjdXJyZW50IGl0ZW0gdG8gdGhlIFJCIHRyZWUuIEFsbCBSQiB0cmVlIG9wZXJhdGlvbnMgYXJlCmRpZmYgLS1naXQgYS9mcy9leGVjLmMgYi9mcy9leGVjLmMKaW5kZXggOTI5YjU4MC4uYjlmMWMxNCAxMDA2NDQKLS0tIGEvZnMvZXhlYy5jCisrKyBiL2ZzL2V4ZWMuYwpAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CisjaW5jbHVkZSA8bGludXgvaW1hLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KICNpbmNsdWRlIDxsaW51eC90c2FjY3Rfa2Vybi5oPgogI2luY2x1ZGUgPGxpbnV4L2NuX3Byb2MuaD4KQEAgLTEyNyw2ICsxMjgsOSBAQAogCQkJCSBNQVlfUkVBRCB8IE1BWV9FWEVDIHwgTUFZX09QRU4pOwogCWlmIChlcnJvcikKIAkJZ290byBleGl0OworCWVycm9yID0gaW1hX3BhdGhfY2hlY2soJm5kLnBhdGgsIE1BWV9SRUFEIHwgTUFZX0VYRUMgfCBNQVlfT1BFTik7CisJaWYgKGVycm9yKQorCQlnb3RvIGV4aXQ7CiAKIAlmaWxlID0gbmFtZWlkYXRhX3RvX2ZpbHAoJm5kLCBPX1JET05MWXxPX0xBUkdFRklMRSk7CiAJZXJyb3IgPSBQVFJfRVJSKGZpbGUpOwpAQCAtNjc0LDYgKzY3OCw5IEBACiAJZXJyID0gaW5vZGVfcGVybWlzc2lvbihuZC5wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgTUFZX0VYRUMgfCBNQVlfT1BFTik7CiAJaWYgKGVycikKIAkJZ290byBvdXRfcGF0aF9wdXQ7CisJZXJyID0gaW1hX3BhdGhfY2hlY2soJm5kLnBhdGgsIE1BWV9FWEVDIHwgTUFZX09QRU4pOworCWlmIChlcnIpCisJCWdvdG8gb3V0X3BhdGhfcHV0OwogCiAJZmlsZSA9IG5hbWVpZGF0YV90b19maWxwKCZuZCwgT19SRE9OTFl8T19MQVJHRUZJTEUpOwogCWlmIChJU19FUlIoZmlsZSkpCkBAIC0xMTg0LDYgKzExOTEsOSBAQAogCXJldHZhbCA9IHNlY3VyaXR5X2Jwcm1fY2hlY2soYnBybSk7CiAJaWYgKHJldHZhbCkKIAkJcmV0dXJuIHJldHZhbDsKKwlyZXR2YWwgPSBpbWFfYnBybV9jaGVjayhicHJtKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOwogCiAJLyoga2VybmVsIG1vZHVsZSBsb2FkZXIgZml4dXAgKi8KIAkvKiBzbyB3ZSBkb24ndCB0cnkgdG8gbG9hZCBydW4gbW9kcHJvYmUgaW4ga2VybmVsIHNwYWNlLiAqLwpAQCAtMTI4NCw2ICsxMjk0LDcgQEAKIAlyZXR2YWwgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmN1cnJlbnQtPmNyZWRfZXhlY19tdXRleCk7CiAJaWYgKHJldHZhbCA8IDApCiAJCWdvdG8gb3V0X2ZyZWU7CisJY3VycmVudC0+aW5fZXhlY3ZlID0gMTsKIAogCXJldHZhbCA9IC1FTk9NRU07CiAJYnBybS0+Y3JlZCA9IHByZXBhcmVfZXhlY19jcmVkcygpOwpAQCAtMTMzNyw2ICsxMzQ4LDcgQEAKIAkJZ290byBvdXQ7CiAKIAkvKiBleGVjdmUgc3VjY2VlZGVkICovCisJY3VycmVudC0+aW5fZXhlY3ZlID0gMDsKIAltdXRleF91bmxvY2soJmN1cnJlbnQtPmNyZWRfZXhlY19tdXRleCk7CiAJYWNjdF91cGRhdGVfaW50ZWdyYWxzKGN1cnJlbnQpOwogCWZyZWVfYnBybShicHJtKTsKQEAgLTEzNTUsNiArMTM2Nyw3IEBACiAJfQogCiBvdXRfdW5sb2NrOgorCWN1cnJlbnQtPmluX2V4ZWN2ZSA9IDA7CiAJbXV0ZXhfdW5sb2NrKCZjdXJyZW50LT5jcmVkX2V4ZWNfbXV0ZXgpOwogCiBvdXRfZnJlZToKZGlmZiAtLWdpdCBhL2ZzL2V4dDMvaW5vZGUuYyBiL2ZzL2V4dDMvaW5vZGUuYwppbmRleCBjOGY5YmQzLi40YTA5ZmYxIDEwMDY0NAotLS0gYS9mcy9leHQzL2lub2RlLmMKKysrIGIvZnMvZXh0My9pbm9kZS5jCkBAIC0xNDM1LDYgKzE0MzUsMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBidWZmZXJfdW5tYXBwZWQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKK3sKKwlyZXR1cm4gIWJ1ZmZlcl9tYXBwZWQoYmgpOworfQogLyoKICAqIE5vdGUgdGhhdCB3ZSBhbHdheXMgc3RhcnQgYSB0cmFuc2FjdGlvbiBldmVuIGlmIHdlJ3JlIG5vdCBqb3VybmFsbGluZwogICogZGF0YS4gIFRoaXMgaXMgdG8gcHJlc2VydmUgb3JkZXJpbmc6IGFueSBob2xlIGluc3RhbnRpYXRpb24gd2l0aGluCkBAIC0xNTA1LDYgKzE1MDksMTUgQEAKIAlpZiAoZXh0M19qb3VybmFsX2N1cnJlbnRfaGFuZGxlKCkpCiAJCWdvdG8gb3V0X2ZhaWw7CiAKKwlpZiAoIXBhZ2VfaGFzX2J1ZmZlcnMocGFnZSkpIHsKKwkJY3JlYXRlX2VtcHR5X2J1ZmZlcnMocGFnZSwgaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplLAorCQkJCSgxIDw8IEJIX0RpcnR5KXwoMSA8PCBCSF9VcHRvZGF0ZSkpOworCX0gZWxzZSBpZiAoIXdhbGtfcGFnZV9idWZmZXJzKE5VTEwsIHBhZ2VfYnVmZmVycyhwYWdlKSwgMCwgUEFHRV9DQUNIRV9TSVpFLCBOVUxMLCBidWZmZXJfdW5tYXBwZWQpKSB7CisJCS8qIFByb3ZpZGUgTlVMTCBpbnN0ZWFkIG9mIGdldF9ibG9jayBzbyB0aGF0IHdlIGNhdGNoIGJ1Z3MgaWYgYnVmZmVycyB3ZXJlbid0IHJlYWxseSBtYXBwZWQgKi8KKwkJcmV0dXJuIGJsb2NrX3dyaXRlX2Z1bGxfcGFnZShwYWdlLCBOVUxMLCB3YmMpOworCX0KKwlwYWdlX2J1ZnMgPSBwYWdlX2J1ZmZlcnMocGFnZSk7CisKIAloYW5kbGUgPSBleHQzX2pvdXJuYWxfc3RhcnQoaW5vZGUsIGV4dDNfd3JpdGVwYWdlX3RyYW5zX2Jsb2Nrcyhpbm9kZSkpOwogCiAJaWYgKElTX0VSUihoYW5kbGUpKSB7CkBAIC0xNTEyLDExICsxNTI1LDYgQEAKIAkJZ290byBvdXRfZmFpbDsKIAl9CiAKLQlpZiAoIXBhZ2VfaGFzX2J1ZmZlcnMocGFnZSkpIHsKLQkJY3JlYXRlX2VtcHR5X2J1ZmZlcnMocGFnZSwgaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplLAotCQkJCSgxIDw8IEJIX0RpcnR5KXwoMSA8PCBCSF9VcHRvZGF0ZSkpOwotCX0KLQlwYWdlX2J1ZnMgPSBwYWdlX2J1ZmZlcnMocGFnZSk7CiAJd2Fsa19wYWdlX2J1ZmZlcnMoaGFuZGxlLCBwYWdlX2J1ZnMsIDAsCiAJCQlQQUdFX0NBQ0hFX1NJWkUsIE5VTEwsIGJnZXRfb25lKTsKIApkaWZmIC0tZ2l0IGEvZnMvZmNudGwuYyBiL2ZzL2ZjbnRsLmMKaW5kZXggYmQyMTVjYy4uZDg2NWNhNjYgMTAwNjQ0Ci0tLSBhL2ZzL2ZjbnRsLmMKKysrIGIvZnMvZmNudGwuYwpAQCAtMTQxLDcgKzE0MSw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotI2RlZmluZSBTRVRGTF9NQVNLIChPX0FQUEVORCB8IE9fTk9OQkxPQ0sgfCBPX05ERUxBWSB8IEZBU1lOQyB8IE9fRElSRUNUIHwgT19OT0FUSU1FKQorI2RlZmluZSBTRVRGTF9NQVNLIChPX0FQUEVORCB8IE9fTk9OQkxPQ0sgfCBPX05ERUxBWSB8IE9fRElSRUNUIHwgT19OT0FUSU1FKQogCiBzdGF0aWMgaW50IHNldGZsKGludCBmZCwgc3RydWN0IGZpbGUgKiBmaWxwLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKQEAgLTE3NywyMSArMTc3LDIxIEBACiAJCXJldHVybiBlcnJvcjsKIAogCS8qCi0JICogV2Ugc3RpbGwgbmVlZCBhIGxvY2sgaGVyZSBmb3Igbm93IHRvIGtlZXAgbXVsdGlwbGUgRkFTWU5DIGNhbGxzCi0JICogZnJvbSByYWNpbmcgd2l0aCBlYWNoIG90aGVyLgorCSAqIC0+ZmFzeW5jKCkgaXMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdGhlIEZBU1lOQyBiaXQuCiAJICovCi0JbG9ja19rZXJuZWwoKTsKLQlpZiAoKGFyZyBeIGZpbHAtPmZfZmxhZ3MpICYgRkFTWU5DKSB7Ci0JCWlmIChmaWxwLT5mX29wICYmIGZpbHAtPmZfb3AtPmZhc3luYykgewotCQkJZXJyb3IgPSBmaWxwLT5mX29wLT5mYXN5bmMoZmQsIGZpbHAsIChhcmcgJiBGQVNZTkMpICE9IDApOwotCQkJaWYgKGVycm9yIDwgMCkKLQkJCQlnb3RvIG91dDsKLQkJfQorCWlmICgoKGFyZyBeIGZpbHAtPmZfZmxhZ3MpICYgRkFTWU5DKSAmJiBmaWxwLT5mX29wICYmCisJCQlmaWxwLT5mX29wLT5mYXN5bmMpIHsKKwkJZXJyb3IgPSBmaWxwLT5mX29wLT5mYXN5bmMoZmQsIGZpbHAsIChhcmcgJiBGQVNZTkMpICE9IDApOworCQlpZiAoZXJyb3IgPCAwKQorCQkJZ290byBvdXQ7CisJCWlmIChlcnJvciA+IDApCisJCQllcnJvciA9IDA7CiAJfQotCisJc3Bpbl9sb2NrKCZmaWxwLT5mX2xvY2spOwogCWZpbHAtPmZfZmxhZ3MgPSAoYXJnICYgU0VURkxfTUFTSykgfCAoZmlscC0+Zl9mbGFncyAmIH5TRVRGTF9NQVNLKTsKKwlzcGluX3VubG9jaygmZmlscC0+Zl9sb2NrKTsKKwogIG91dDoKLQl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIGVycm9yOwogfQogCkBAIC01MTYsNyArNTE2LDcgQEAKIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqZmFzeW5jX2NhY2hlIF9fcmVhZF9tb3N0bHk7CiAKIC8qCi0gKiBmYXN5bmNfaGVscGVyKCkgaXMgdXNlZCBieSBzb21lIGNoYXJhY3RlciBkZXZpY2UgZHJpdmVycyAobWFpbmx5IG1pY2UpCisgKiBmYXN5bmNfaGVscGVyKCkgaXMgdXNlZCBieSBhbG1vc3QgYWxsIGNoYXJhY3RlciBkZXZpY2UgZHJpdmVycwogICogdG8gc2V0IHVwIHRoZSBmYXN5bmMgcXVldWUuIEl0IHJldHVybnMgbmVnYXRpdmUgb24gZXJyb3IsIDAgaWYgaXQgZGlkCiAgKiBubyBjaGFuZ2VzIGFuZCBwb3NpdGl2ZSBpZiBpdCBhZGRlZC9kZWxldGVkIHRoZSBlbnRyeS4KICAqLwpAQCAtNTU1LDYgKzU1NSwxMyBAQAogCQlyZXN1bHQgPSAxOwogCX0KIG91dDoKKwkvKiBGaXggdXAgRkFTWU5DIGJpdCB3aGlsZSBzdGlsbCBob2xkaW5nIGZhc3luY19sb2NrICovCisJc3Bpbl9sb2NrKCZmaWxwLT5mX2xvY2spOworCWlmIChvbikKKwkJZmlscC0+Zl9mbGFncyB8PSBGQVNZTkM7CisJZWxzZQorCQlmaWxwLT5mX2ZsYWdzICY9IH5GQVNZTkM7CisJc3Bpbl91bmxvY2soJmZpbHAtPmZfbG9jayk7CiAJd3JpdGVfdW5sb2NrX2lycSgmZmFzeW5jX2xvY2spOwogCXJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9mcy9maWxlX3RhYmxlLmMgYi9mcy9maWxlX3RhYmxlLmMKaW5kZXggYmJlZWFjNi4uYjc0YThlMSAxMDA2NDQKLS0tIGEvZnMvZmlsZV90YWJsZS5jCisrKyBiL2ZzL2ZpbGVfdGFibGUuYwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbWEuaD4KICNpbmNsdWRlIDxsaW51eC9ldmVudHBvbGwuaD4KICNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CkBAIC0xMjcsNiArMTI4LDcgQEAKIAlhdG9taWNfbG9uZ19zZXQoJmYtPmZfY291bnQsIDEpOwogCXJ3bG9ja19pbml0KCZmLT5mX293bmVyLmxvY2spOwogCWYtPmZfY3JlZCA9IGdldF9jcmVkKGNyZWQpOworCXNwaW5fbG9ja19pbml0KCZmLT5mX2xvY2spOwogCWV2ZW50cG9sbF9pbml0X2ZpbGUoZik7CiAJLyogZi0+Zl92ZXJzaW9uOiAwICovCiAJcmV0dXJuIGY7CkBAIC0yNzksNiArMjgxLDcgQEAKIAlpZiAoZmlsZS0+Zl9vcCAmJiBmaWxlLT5mX29wLT5yZWxlYXNlKQogCQlmaWxlLT5mX29wLT5yZWxlYXNlKGlub2RlLCBmaWxlKTsKIAlzZWN1cml0eV9maWxlX2ZyZWUoZmlsZSk7CisJaW1hX2ZpbGVfZnJlZShmaWxlKTsKIAlpZiAodW5saWtlbHkoU19JU0NIUihpbm9kZS0+aV9tb2RlKSAmJiBpbm9kZS0+aV9jZGV2ICE9IE5VTEwpKQogCQljZGV2X3B1dChpbm9kZS0+aV9jZGV2KTsKIAlmb3BzX3B1dChmaWxlLT5mX29wKTsKZGlmZiAtLWdpdCBhL2ZzL2dmczIvS2NvbmZpZyBiL2ZzL2dmczIvS2NvbmZpZwppbmRleCBlNTYzYTY0Li4zYTk4MWI3IDEwMDY0NAotLS0gYS9mcy9nZnMyL0tjb25maWcKKysrIGIvZnMvZ2ZzMi9LY29uZmlnCkBAIC0xLDYgKzEsMTAgQEAKIGNvbmZpZyBHRlMyX0ZTCiAJdHJpc3RhdGUgIkdGUzIgZmlsZSBzeXN0ZW0gc3VwcG9ydCIKIAlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTCAmJiAoNjRCSVQgfHwgTEJEKQorCXNlbGVjdCBETE0gaWYgR0ZTMl9GU19MT0NLSU5HX0RMTQorCXNlbGVjdCBDT05GSUdGU19GUyBpZiBHRlMyX0ZTX0xPQ0tJTkdfRExNCisJc2VsZWN0IFNZU0ZTIGlmIEdGUzJfRlNfTE9DS0lOR19ETE0KKwlzZWxlY3QgSVBfU0NUUCBpZiBETE1fU0NUUAogCXNlbGVjdCBGU19QT1NJWF9BQ0wKIAlzZWxlY3QgQ1JDMzIKIAloZWxwCkBAIC0xOCwxNyArMjIsMTYgQEAKIAkgIHRoZSBsb2NraW5nIG1vZHVsZSBiZWxvdy4gRG9jdW1lbnRhdGlvbiBhbmQgdXRpbGl0aWVzIGZvciBHRlMyIGNhbgogCSAgYmUgZm91bmQgaGVyZTogaHR0cDovL3NvdXJjZXMucmVkaGF0LmNvbS9jbHVzdGVyCiAKLQkgIFRoZSAibm9sb2NrIiBsb2NrIG1vZHVsZSBpcyBub3cgYnVpbHQgaW4gdG8gR0ZTMiBieSBkZWZhdWx0LgorCSAgVGhlICJub2xvY2siIGxvY2sgbW9kdWxlIGlzIG5vdyBidWlsdCBpbiB0byBHRlMyIGJ5IGRlZmF1bHQuIElmCisJICB5b3Ugd2FudCB0byB1c2UgdGhlIERMTSwgYmUgc3VyZSB0byBlbmFibGUgSE9UUExVRyBhbmQgSVB2NC82CisJICBuZXR3b3JraW5nLgogCiBjb25maWcgR0ZTMl9GU19MT0NLSU5HX0RMTQotCXRyaXN0YXRlICJHRlMyIERMTSBsb2NraW5nIG1vZHVsZSIKLQlkZXBlbmRzIG9uIEdGUzJfRlMgJiYgU1lTRlMgJiYgTkVUICYmIElORVQgJiYgKElQVjYgfHwgSVBWNj1uKQotCXNlbGVjdCBJUF9TQ1RQIGlmIERMTV9TQ1RQCi0Jc2VsZWN0IENPTkZJR0ZTX0ZTCi0Jc2VsZWN0IERMTQorCWJvb2wgIkdGUzIgRExNIGxvY2tpbmciCisJZGVwZW5kcyBvbiAoR0ZTMl9GUyE9bikgJiYgTkVUICYmIElORVQgJiYgKElQVjYgfHwgSVBWNj1uKSAmJiBIT1RQTFVHCiAJaGVscAogCSAgTXVsdGlwbGUgbm9kZSBsb2NraW5nIG1vZHVsZSBmb3IgR0ZTMgogCi0JICBNb3N0IHVzZXJzIG9mIEdGUzIgd2lsbCByZXF1aXJlIHRoaXMgbW9kdWxlLiBJdCBwcm92aWRlcyB0aGUgbG9ja2luZworCSAgTW9zdCB1c2VycyBvZiBHRlMyIHdpbGwgcmVxdWlyZSB0aGlzLiBJdCBwcm92aWRlcyB0aGUgbG9ja2luZwogCSAgaW50ZXJmYWNlIGJldHdlZW4gR0ZTMiBhbmQgdGhlIERMTSwgd2hpY2ggaXMgcmVxdWlyZWQgdG8gdXNlIEdGUzIKIAkgIGluIGEgY2x1c3RlciBlbnZpcm9ubWVudC4KZGlmZiAtLWdpdCBhL2ZzL2dmczIvTWFrZWZpbGUgYi9mcy9nZnMyL01ha2VmaWxlCmluZGV4IGMxYjRlYzZhLi5hODUxZWE0IDEwMDY0NAotLS0gYS9mcy9nZnMyL01ha2VmaWxlCisrKyBiL2ZzL2dmczIvTWFrZWZpbGUKQEAgLTEsOSArMSw5IEBACiBvYmotJChDT05GSUdfR0ZTMl9GUykgKz0gZ2ZzMi5vCiBnZnMyLXkgOj0gYWNsLm8gYm1hcC5vIGRpci5vIGVhb3BzLm8gZWF0dHIubyBnbG9jay5vIFwKLQlnbG9wcy5vIGlub2RlLm8gbG9nLm8gbG9wcy5vIGxvY2tpbmcubyBtYWluLm8gbWV0YV9pby5vIFwKKwlnbG9wcy5vIGlub2RlLm8gbG9nLm8gbG9wcy5vIG1haW4ubyBtZXRhX2lvLm8gXAogCW1vdW50Lm8gb3BzX2FkZHJlc3MubyBvcHNfZGVudHJ5Lm8gb3BzX2V4cG9ydC5vIG9wc19maWxlLm8gXAogCW9wc19mc3R5cGUubyBvcHNfaW5vZGUubyBvcHNfc3VwZXIubyBxdW90YS5vIFwKIAlyZWNvdmVyeS5vIHJncnAubyBzdXBlci5vIHN5cy5vIHRyYW5zLm8gdXRpbC5vCiAKLW9iai0kKENPTkZJR19HRlMyX0ZTX0xPQ0tJTkdfRExNKSArPSBsb2NraW5nL2RsbS8KK2dmczItJChDT05GSUdfR0ZTMl9GU19MT0NLSU5HX0RMTSkgKz0gbG9ja19kbG0ubwogCmRpZmYgLS1naXQgYS9mcy9nZnMyL2FjbC5jIGIvZnMvZ2ZzMi9hY2wuYwppbmRleCBlMzM1ZGNlLi40Mzc2NGY0IDEwMDY0NAotLS0gYS9mcy9nZnMyL2FjbC5jCisrKyBiL2ZzL2dmczIvYWNsLmMKQEAgLTE1LDcgKzE1LDYgQEAKICNpbmNsdWRlIDxsaW51eC9wb3NpeF9hY2wuaD4KICNpbmNsdWRlIDxsaW51eC9wb3NpeF9hY2xfeGF0dHIuaD4KICNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgotI2luY2x1ZGUgPGxpbnV4L2xtX2ludGVyZmFjZS5oPgogCiAjaW5jbHVkZSAiZ2ZzMi5oIgogI2luY2x1ZGUgImluY29yZS5oIgpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9ibWFwLmMgYi9mcy9nZnMyL2JtYXAuYwppbmRleCAxMWZmYzU2Li4zYTVkM2Y4IDEwMDY0NAotLS0gYS9mcy9nZnMyL2JtYXAuYworKysgYi9mcy9nZnMyL2JtYXAuYwpAQCAtMTMsNyArMTMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZzMl9vbmRpc2suaD4KICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgotI2luY2x1ZGUgPGxpbnV4L2xtX2ludGVyZmFjZS5oPgogCiAjaW5jbHVkZSAiZ2ZzMi5oIgogI2luY2x1ZGUgImluY29yZS5oIgpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9kaXIuYyBiL2ZzL2dmczIvZGlyLmMKaW5kZXggYjdjOGU1Yy4uYWVmNGQwYyAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9kaXIuYworKysgYi9mcy9nZnMyL2Rpci5jCkBAIC02MCw3ICs2MCw2IEBACiAjaW5jbHVkZSA8bGludXgvZ2ZzMl9vbmRpc2suaD4KICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KLSNpbmNsdWRlIDxsaW51eC9sbV9pbnRlcmZhY2UuaD4KIAogI2luY2x1ZGUgImdmczIuaCIKICNpbmNsdWRlICJpbmNvcmUuaCIKZGlmZiAtLWdpdCBhL2ZzL2dmczIvZWFvcHMuYyBiL2ZzL2dmczIvZWFvcHMuYwppbmRleCBmMTE0YmEyLi5kZWU5YjAzIDEwMDY0NAotLS0gYS9mcy9nZnMyL2Vhb3BzLmMKKysrIGIvZnMvZ2ZzMi9lYW9wcy5jCkBAIC0xNCw3ICsxNCw2IEBACiAjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3hhdHRyLmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZzMl9vbmRpc2suaD4KLSNpbmNsdWRlIDxsaW51eC9sbV9pbnRlcmZhY2UuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCiAjaW5jbHVkZSAiZ2ZzMi5oIgpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9lYXR0ci5jIGIvZnMvZ2ZzMi9lYXR0ci5jCmluZGV4IDBkMWM3NmQuLjg5OTc2M2EgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvZWF0dHIuYworKysgYi9mcy9nZnMyL2VhdHRyLmMKQEAgLTEzLDcgKzEzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L3hhdHRyLmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZzMl9vbmRpc2suaD4KLSNpbmNsdWRlIDxsaW51eC9sbV9pbnRlcmZhY2UuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCiAjaW5jbHVkZSAiZ2ZzMi5oIgpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9nbG9jay5jIGIvZnMvZ2ZzMi9nbG9jay5jCmluZGV4IDZiOTgzYWUuLjM5ODRlNDcgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvZ2xvY2suYworKysgYi9mcy9nZnMyL2dsb2NrLmMKQEAgLTEwLDcgKzEwLDYgQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KICNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvc29ydC5oPgpAQCAtMTgsNyArMTcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZzMl9vbmRpc2suaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbG1faW50ZXJmYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3J3c2VtLmg+CkBAIC0xNTUsMTMgKzE1MywxMCBAQAogCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gZ2wtPmdsX3NiZDsKIAlzdHJ1Y3QgaW5vZGUgKmFzcGFjZSA9IGdsLT5nbF9hc3BhY2U7CiAKLQlpZiAoc2RwLT5zZF9sb2Nrc3RydWN0LmxzX29wcy0+bG1fcHV0X2xvY2spCi0JCXNkcC0+c2RfbG9ja3N0cnVjdC5sc19vcHMtPmxtX3B1dF9sb2NrKGdsLT5nbF9sb2NrKTsKLQogCWlmIChhc3BhY2UpCiAJCWdmczJfYXNwYWNlX3B1dChhc3BhY2UpOwogCi0Ja21lbV9jYWNoZV9mcmVlKGdmczJfZ2xvY2tfY2FjaGVwLCBnbCk7CisJc2RwLT5zZF9sb2Nrc3RydWN0LmxzX29wcy0+bG1fcHV0X2xvY2soZ2ZzMl9nbG9ja19jYWNoZXAsIGdsKTsKIH0KIAogLyoqCkBAIC0xNzIsNiArMTY3LDcgQEAKIAogc3RhdGljIHZvaWQgZ2ZzMl9nbG9ja19ob2xkKHN0cnVjdCBnZnMyX2dsb2NrICpnbCkKIHsKKwlHTE9DS19CVUdfT04oZ2wsIGF0b21pY19yZWFkKCZnbC0+Z2xfcmVmKSA9PSAwKTsKIAlhdG9taWNfaW5jKCZnbC0+Z2xfcmVmKTsKIH0KIApAQCAtMjExLDE3ICsyMDcsMTUgQEAKIAkJCWF0b21pY19kZWMoJmxydV9jb3VudCk7CiAJCX0KIAkJc3Bpbl91bmxvY2soJmxydV9sb2NrKTsKLQkJR0xPQ0tfQlVHX09OKGdsLCBnbC0+Z2xfc3RhdGUgIT0gTE1fU1RfVU5MT0NLRUQpOwotCQlHTE9DS19CVUdfT04oZ2wsICFsaXN0X2VtcHR5KCZnbC0+Z2xfbHJ1KSk7CiAJCUdMT0NLX0JVR19PTihnbCwgIWxpc3RfZW1wdHkoJmdsLT5nbF9ob2xkZXJzKSk7CiAJCWdsb2NrX2ZyZWUoZ2wpOwogCQlydiA9IDE7CiAJCWdvdG8gb3V0OwogCX0KLQl3cml0ZV91bmxvY2soZ2xfbG9ja19hZGRyKGdsLT5nbF9oYXNoKSk7CiAJLyogMSBmb3IgYmVpbmcgaGFzaGVkLCAxIGZvciBoYXZpbmcgc3RhdGUgIT0gTE1fU1RfVU5MT0NLRUQgKi8KIAlpZiAoYXRvbWljX3JlYWQoJmdsLT5nbF9yZWYpID09IDIpCiAJCWdmczJfZ2xvY2tfc2NoZWR1bGVfZm9yX3JlY2xhaW0oZ2wpOworCXdyaXRlX3VubG9jayhnbF9sb2NrX2FkZHIoZ2wtPmdsX2hhc2gpKTsKIG91dDoKIAlyZXR1cm4gcnY7CiB9CkBAIC0yNTYsMjcgKzI1MCw2IEBACiB9CiAKIC8qKgotICogZ2ZzMl9nbG9ja19maW5kKCkgLSBGaW5kIGdsb2NrIGJ5IGxvY2sgbnVtYmVyCi0gKiBAc2RwOiBUaGUgR0ZTMiBzdXBlcmJsb2NrCi0gKiBAbmFtZTogVGhlIGxvY2sgbmFtZQotICoKLSAqIFJldHVybnM6IE5VTEwsIG9yIHRoZSBzdHJ1Y3QgZ2ZzMl9nbG9jayB3aXRoIHRoZSByZXF1ZXN0ZWQgbnVtYmVyCi0gKi8KLQotc3RhdGljIHN0cnVjdCBnZnMyX2dsb2NrICpnZnMyX2dsb2NrX2ZpbmQoY29uc3Qgc3RydWN0IGdmczJfc2JkICpzZHAsCi0JCQkJCSAgY29uc3Qgc3RydWN0IGxtX2xvY2tuYW1lICpuYW1lKQotewotCXVuc2lnbmVkIGludCBoYXNoID0gZ2xfaGFzaChzZHAsIG5hbWUpOwotCXN0cnVjdCBnZnMyX2dsb2NrICpnbDsKLQotCXJlYWRfbG9jayhnbF9sb2NrX2FkZHIoaGFzaCkpOwotCWdsID0gc2VhcmNoX2J1Y2tldChoYXNoLCBzZHAsIG5hbWUpOwotCXJlYWRfdW5sb2NrKGdsX2xvY2tfYWRkcihoYXNoKSk7Ci0KLQlyZXR1cm4gZ2w7Ci19Ci0KLS8qKgogICogbWF5X2dyYW50IC0gY2hlY2sgaWYgaXRzIG9rIHRvIGdyYW50IGEgbmV3IGxvY2sKICAqIEBnbDogVGhlIGdsb2NrCiAgKiBAZ2g6IFRoZSBsb2NrIHJlcXVlc3Qgd2hpY2ggd2Ugd2lzaCB0byBncmFudApAQCAtNTIzLDcgKzQ5Niw3IEBACiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZ2ZzMl9sbV9sb2NrKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCB2b2lkICpsb2NrLAotCQkJCSB1bnNpZ25lZCBpbnQgY3VyX3N0YXRlLCB1bnNpZ25lZCBpbnQgcmVxX3N0YXRlLAorCQkJCSB1bnNpZ25lZCBpbnQgcmVxX3N0YXRlLAogCQkJCSB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7CiAJaW50IHJldCA9IExNX09VVF9FUlJPUjsKQEAgLTUzMiw3ICs1MDUsNyBAQAogCQlyZXR1cm4gcmVxX3N0YXRlID09IExNX1NUX1VOTE9DS0VEID8gMCA6IHJlcV9zdGF0ZTsKIAogCWlmIChsaWtlbHkoIXRlc3RfYml0KFNERl9TSFVURE9XTiwgJnNkcC0+c2RfZmxhZ3MpKSkKLQkJcmV0ID0gc2RwLT5zZF9sb2Nrc3RydWN0LmxzX29wcy0+bG1fbG9jayhsb2NrLCBjdXJfc3RhdGUsCisJCXJldCA9IHNkcC0+c2RfbG9ja3N0cnVjdC5sc19vcHMtPmxtX2xvY2sobG9jaywKIAkJCQkJCQkgcmVxX3N0YXRlLCBmbGFncyk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTU3NSw3ICs1NDgsNyBAQAogCSAgICBnbC0+Z2xfc3RhdGUgPT0gTE1fU1RfREVGRVJSRUQpICYmCiAJICAgICEobGNrX2ZsYWdzICYgKExNX0ZMQUdfVFJZIHwgTE1fRkxBR19UUllfMUNCKSkpCiAJCWxja19mbGFncyB8PSBMTV9GTEFHX1RSWV8xQ0I7Ci0JcmV0ID0gZ2ZzMl9sbV9sb2NrKHNkcCwgZ2wtPmdsX2xvY2ssIGdsLT5nbF9zdGF0ZSwgdGFyZ2V0LCBsY2tfZmxhZ3MpOworCXJldCA9IGdmczJfbG1fbG9jayhzZHAsIGdsLCB0YXJnZXQsIGxja19mbGFncyk7CiAKIAlpZiAoIShyZXQgJiBMTV9PVVRfQVNZTkMpKSB7CiAJCWZpbmlzaF94bW90ZShnbCwgcmV0KTsKQEAgLTYyNCwxMCArNTk3LDExIEBACiAKIAlHTE9DS19CVUdfT04oZ2wsIHRlc3RfYml0KEdMRl9ERU1PVEVfSU5fUFJPR1JFU1MsICZnbC0+Z2xfZmxhZ3MpKTsKIAorCWRvd25fcmVhZCgmZ2ZzMl91bW91bnRfZmx1c2hfc2VtKTsKIAlpZiAodGVzdF9iaXQoR0xGX0RFTU9URSwgJmdsLT5nbF9mbGFncykgJiYKIAkgICAgZ2wtPmdsX2RlbW90ZV9zdGF0ZSAhPSBnbC0+Z2xfc3RhdGUpIHsKIAkJaWYgKGZpbmRfZmlyc3RfaG9sZGVyKGdsKSkKLQkJCWdvdG8gb3V0OworCQkJZ290byBvdXRfdW5sb2NrOwogCQlpZiAobm9uYmxvY2spCiAJCQlnb3RvIG91dF9zY2hlZDsKIAkJc2V0X2JpdChHTEZfREVNT1RFX0lOX1BST0dSRVNTLCAmZ2wtPmdsX2ZsYWdzKTsKQEAgLTYzOCwyMyArNjEyLDI2IEBACiAJCQlnZnMyX2RlbW90ZV93YWtlKGdsKTsKIAkJcmV0ID0gZG9fcHJvbW90ZShnbCk7CiAJCWlmIChyZXQgPT0gMCkKLQkJCWdvdG8gb3V0OworCQkJZ290byBvdXRfdW5sb2NrOwogCQlpZiAocmV0ID09IDIpCi0JCQlyZXR1cm47CisJCQlnb3RvIG91dF9zZW07CiAJCWdoID0gZmluZF9maXJzdF93YWl0ZXIoZ2wpOwogCQlnbC0+Z2xfdGFyZ2V0ID0gZ2gtPmdoX3N0YXRlOwogCQlpZiAoIShnaC0+Z2hfZmxhZ3MgJiAoTE1fRkxBR19UUlkgfCBMTV9GTEFHX1RSWV8xQ0IpKSkKIAkJCWRvX2Vycm9yKGdsLCAwKTsgLyogRmFpbCBxdWV1ZWQgdHJ5IGxvY2tzICovCiAJfQogCWRvX3htb3RlKGdsLCBnaCwgZ2wtPmdsX3RhcmdldCk7CitvdXRfc2VtOgorCXVwX3JlYWQoJmdmczJfdW1vdW50X2ZsdXNoX3NlbSk7CiAJcmV0dXJuOwogCiBvdXRfc2NoZWQ6CiAJZ2ZzMl9nbG9ja19ob2xkKGdsKTsKIAlpZiAocXVldWVfZGVsYXllZF93b3JrKGdsb2NrX3dvcmtxdWV1ZSwgJmdsLT5nbF93b3JrLCAwKSA9PSAwKQogCQlnZnMyX2dsb2NrX3B1dChnbCk7Ci1vdXQ6CitvdXRfdW5sb2NrOgogCWNsZWFyX2JpdChHTEZfTE9DSywgJmdsLT5nbF9mbGFncyk7CisJZ290byBvdXRfc2VtOwogfQogCiBzdGF0aWMgdm9pZCBnbG9ja193b3JrX2Z1bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQpAQCAtNjgxLDE4ICs2NTgsNiBAQAogCQlnZnMyX2dsb2NrX3B1dChnbCk7CiB9CiAKLXN0YXRpYyBpbnQgZ2ZzMl9sbV9nZXRfbG9jayhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgc3RydWN0IGxtX2xvY2tuYW1lICpuYW1lLAotCQkgICAgIHZvaWQgKipsb2NrcCkKLXsKLQlpbnQgZXJyb3IgPSAtRUlPOwotCWlmICghc2RwLT5zZF9sb2Nrc3RydWN0LmxzX29wcy0+bG1fZ2V0X2xvY2spCi0JCXJldHVybiAwOwotCWlmIChsaWtlbHkoIXRlc3RfYml0KFNERl9TSFVURE9XTiwgJnNkcC0+c2RfZmxhZ3MpKSkKLQkJZXJyb3IgPSBzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfb3BzLT5sbV9nZXRfbG9jaygKLQkJCQlzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfbG9ja3NwYWNlLCBuYW1lLCBsb2NrcCk7Ci0JcmV0dXJuIGVycm9yOwotfQotCiAvKioKICAqIGdmczJfZ2xvY2tfZ2V0KCkgLSBHZXQgYSBnbG9jaywgb3IgY3JlYXRlIG9uZSBpZiBvbmUgZG9lc24ndCBleGlzdAogICogQHNkcDogVGhlIEdGUzIgc3VwZXJibG9jawpAQCAtNzE5LDEwICs2ODQsMTEgQEAKIAlnbCA9IHNlYXJjaF9idWNrZXQoaGFzaCwgc2RwLCAmbmFtZSk7CiAJcmVhZF91bmxvY2soZ2xfbG9ja19hZGRyKGhhc2gpKTsKIAotCWlmIChnbCB8fCAhY3JlYXRlKSB7Ci0JCSpnbHAgPSBnbDsKKwkqZ2xwID0gZ2w7CisJaWYgKGdsKQogCQlyZXR1cm4gMDsKLQl9CisJaWYgKCFjcmVhdGUpCisJCXJldHVybiAtRU5PRU5UOwogCiAJZ2wgPSBrbWVtX2NhY2hlX2FsbG9jKGdmczJfZ2xvY2tfY2FjaGVwLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWdsKQpAQCAtNzM2LDcgKzcwMiw5IEBACiAJZ2wtPmdsX2RlbW90ZV9zdGF0ZSA9IExNX1NUX0VYQ0xVU0lWRTsKIAlnbC0+Z2xfaGFzaCA9IGhhc2g7CiAJZ2wtPmdsX29wcyA9IGdsb3BzOwotCWdsLT5nbF9zdGFtcCA9IGppZmZpZXM7CisJc25wcmludGYoZ2wtPmdsX3N0cm5hbWUsIEdETE1fU1RSTkFNRV9CWVRFUywgIiU4eCUxNmxseCIsIG5hbWUubG5fdHlwZSwgKHVuc2lnbmVkIGxvbmcgbG9uZyludW1iZXIpOworCW1lbXNldCgmZ2wtPmdsX2xrc2IsIDAsIHNpemVvZihzdHJ1Y3QgZGxtX2xrc2IpKTsKKwlnbC0+Z2xfbGtzYi5zYl9sdmJwdHIgPSBnbC0+Z2xfbHZiOwogCWdsLT5nbF90Y2hhbmdlID0gamlmZmllczsKIAlnbC0+Z2xfb2JqZWN0ID0gTlVMTDsKIAlnbC0+Z2xfc2JkID0gc2RwOwpAQCAtNzUzLDEwICs3MjEsNiBAQAogCQl9CiAJfQogCi0JZXJyb3IgPSBnZnMyX2xtX2dldF9sb2NrKHNkcCwgJm5hbWUsICZnbC0+Z2xfbG9jayk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIGZhaWxfYXNwYWNlOwotCiAJd3JpdGVfbG9jayhnbF9sb2NrX2FkZHIoaGFzaCkpOwogCXRtcCA9IHNlYXJjaF9idWNrZXQoaGFzaCwgc2RwLCAmbmFtZSk7CiAJaWYgKHRtcCkgewpAQCAtNzcyLDkgKzczNiw2IEBACiAKIAlyZXR1cm4gMDsKIAotZmFpbF9hc3BhY2U6Ci0JaWYgKGdsLT5nbF9hc3BhY2UpCi0JCWdmczJfYXNwYWNlX3B1dChnbC0+Z2xfYXNwYWNlKTsKIGZhaWw6CiAJa21lbV9jYWNoZV9mcmVlKGdmczJfZ2xvY2tfY2FjaGVwLCBnbCk7CiAJcmV0dXJuIGVycm9yOwpAQCAtOTY2LDcgKzkyNyw3IEBACiAJaWYgKCEoZ2gtPmdoX2ZsYWdzICYgTE1fRkxBR19QUklPUklUWSkpIHsKIAkJc3Bpbl91bmxvY2soJmdsLT5nbF9zcGluKTsKIAkJaWYgKHNkcC0+c2RfbG9ja3N0cnVjdC5sc19vcHMtPmxtX2NhbmNlbCkKLQkJCXNkcC0+c2RfbG9ja3N0cnVjdC5sc19vcHMtPmxtX2NhbmNlbChnbC0+Z2xfbG9jayk7CisJCQlzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfb3BzLT5sbV9jYW5jZWwoZ2wpOwogCQlzcGluX2xvY2soJmdsLT5nbF9zcGluKTsKIAl9CiAJcmV0dXJuOwpAQCAtMTA1MSw3ICsxMDEyLDYgQEAKIAkJCXNwaW5fbG9jaygmZ2wtPmdsX3NwaW4pOwogCQkJY2xlYXJfYml0KEdMRl9MT0NLLCAmZ2wtPmdsX2ZsYWdzKTsKIAkJfQotCQlnbC0+Z2xfc3RhbXAgPSBqaWZmaWVzOwogCQlpZiAobGlzdF9lbXB0eSgmZ2wtPmdsX2hvbGRlcnMpICYmCiAJCSAgICAhdGVzdF9iaXQoR0xGX1BFTkRJTkdfREVNT1RFLCAmZ2wtPmdsX2ZsYWdzKSAmJgogCQkgICAgIXRlc3RfYml0KEdMRl9ERU1PVEUsICZnbC0+Z2xfZmxhZ3MpKQpAQCAtMTI0MCw3MCArMTIwMCwxMyBAQAogCQlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmZ2hzW3hdKTsKIH0KIAotc3RhdGljIGludCBnZnMyX2xtX2hvbGRfbHZiKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCB2b2lkICpsb2NrLCBjaGFyICoqbHZicCkKK3ZvaWQgZ2ZzMl9nbG9ja19jYihzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wsIHVuc2lnbmVkIGludCBzdGF0ZSkKIHsKLQlpbnQgZXJyb3IgPSAtRUlPOwotCWlmICghc2RwLT5zZF9sb2Nrc3RydWN0LmxzX29wcy0+bG1faG9sZF9sdmIpCi0JCXJldHVybiAwOwotCWlmIChsaWtlbHkoIXRlc3RfYml0KFNERl9TSFVURE9XTiwgJnNkcC0+c2RfZmxhZ3MpKSkKLQkJZXJyb3IgPSBzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfb3BzLT5sbV9ob2xkX2x2Yihsb2NrLCBsdmJwKTsKLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLS8qKgotICogZ2ZzMl9sdmJfaG9sZCAtIGF0dGFjaCBhIExWQiBmcm9tIGEgZ2xvY2sKLSAqIEBnbDogVGhlIGdsb2NrIGluIHF1ZXN0aW9uCi0gKgotICovCi0KLWludCBnZnMyX2x2Yl9ob2xkKHN0cnVjdCBnZnMyX2dsb2NrICpnbCkKLXsKLQlpbnQgZXJyb3I7Ci0KLQlpZiAoIWF0b21pY19yZWFkKCZnbC0+Z2xfbHZiX2NvdW50KSkgewotCQllcnJvciA9IGdmczJfbG1faG9sZF9sdmIoZ2wtPmdsX3NiZCwgZ2wtPmdsX2xvY2ssICZnbC0+Z2xfbHZiKTsKLQkJaWYgKGVycm9yKSAKLQkJCXJldHVybiBlcnJvcjsKLQkJZ2ZzMl9nbG9ja19ob2xkKGdsKTsKLQl9Ci0JYXRvbWljX2luYygmZ2wtPmdsX2x2Yl9jb3VudCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiBnZnMyX2x2Yl91bmhvbGQgLSBkZXRhY2ggYSBMVkIgZnJvbSBhIGdsb2NrCi0gKiBAZ2w6IFRoZSBnbG9jayBpbiBxdWVzdGlvbgotICoKLSAqLwotCi12b2lkIGdmczJfbHZiX3VuaG9sZChzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wpCi17Ci0Jc3RydWN0IGdmczJfc2JkICpzZHAgPSBnbC0+Z2xfc2JkOwotCi0JZ2ZzMl9nbG9ja19ob2xkKGdsKTsKLQlnZnMyX2Fzc2VydChnbC0+Z2xfc2JkLCBhdG9taWNfcmVhZCgmZ2wtPmdsX2x2Yl9jb3VudCkgPiAwKTsKLQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmZ2wtPmdsX2x2Yl9jb3VudCkpIHsKLQkJaWYgKHNkcC0+c2RfbG9ja3N0cnVjdC5sc19vcHMtPmxtX3VuaG9sZF9sdmIpCi0JCQlzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfb3BzLT5sbV91bmhvbGRfbHZiKGdsLT5nbF9sb2NrLCBnbC0+Z2xfbHZiKTsKLQkJZ2wtPmdsX2x2YiA9IE5VTEw7Ci0JCWdmczJfZ2xvY2tfcHV0KGdsKTsKLQl9Ci0JZ2ZzMl9nbG9ja19wdXQoZ2wpOwotfQotCi1zdGF0aWMgdm9pZCBibG9ja2luZ19jYihzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgc3RydWN0IGxtX2xvY2tuYW1lICpuYW1lLAotCQkJdW5zaWduZWQgaW50IHN0YXRlKQotewotCXN0cnVjdCBnZnMyX2dsb2NrICpnbDsKIAl1bnNpZ25lZCBsb25nIGRlbGF5ID0gMDsKIAl1bnNpZ25lZCBsb25nIGhvbGR0aW1lOwogCXVuc2lnbmVkIGxvbmcgbm93ID0gamlmZmllczsKIAotCWdsID0gZ2ZzMl9nbG9ja19maW5kKHNkcCwgbmFtZSk7Ci0JaWYgKCFnbCkKLQkJcmV0dXJuOwotCisJZ2ZzMl9nbG9ja19ob2xkKGdsKTsKIAlob2xkdGltZSA9IGdsLT5nbF90Y2hhbmdlICsgZ2wtPmdsX29wcy0+Z29fbWluX2hvbGRfdGltZTsKIAlpZiAodGltZV9iZWZvcmUobm93LCBob2xkdGltZSkpCiAJCWRlbGF5ID0gaG9sZHRpbWUgLSBub3c7CkBAIC0xMzE3LDc0ICsxMjIwLDMzIEBACiAJCWdmczJfZ2xvY2tfcHV0KGdsKTsKIH0KIAotc3RhdGljIHZvaWQgZ2ZzMl9qZGVzY19tYWtlX2RpcnR5KHN0cnVjdCBnZnMyX3NiZCAqc2RwLCB1bnNpZ25lZCBpbnQgamlkKQotewotCXN0cnVjdCBnZnMyX2pkZXNjICpqZDsKLQotCXNwaW5fbG9jaygmc2RwLT5zZF9qaW5kZXhfc3Bpbik7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShqZCwgJnNkcC0+c2RfamluZGV4X2xpc3QsIGpkX2xpc3QpIHsKLQkJaWYgKGpkLT5qZF9qaWQgIT0gamlkKQotCQkJY29udGludWU7Ci0JCWpkLT5qZF9kaXJ0eSA9IDE7Ci0JCWJyZWFrOwotCX0KLQlzcGluX3VubG9jaygmc2RwLT5zZF9qaW5kZXhfc3Bpbik7Ci19Ci0KIC8qKgotICogZ2ZzMl9nbG9ja19jYiAtIENhbGxiYWNrIHVzZWQgYnkgbG9ja2luZyBtb2R1bGUKLSAqIEBzZHA6IFBvaW50ZXIgdG8gdGhlIHN1cGVyYmxvY2sKLSAqIEB0eXBlOiBUeXBlIG9mIGNhbGxiYWNrCi0gKiBAZGF0YTogVHlwZSBkZXBlbmRlbnQgZGF0YSBwb2ludGVyCisgKiBnZnMyX2dsb2NrX2NvbXBsZXRlIC0gQ2FsbGJhY2sgdXNlZCBieSBsb2NraW5nCisgKiBAZ2w6IFBvaW50ZXIgdG8gdGhlIGdsb2NrCisgKiBAcmV0OiBUaGUgcmV0dXJuIHZhbHVlIGZyb20gdGhlIGRsbQogICoKLSAqIENhbGxlZCBieSB0aGUgbG9ja2luZyBtb2R1bGUgd2hlbiBpdCB3YW50cyB0byB0ZWxsIHVzIHNvbWV0aGluZy4KLSAqIEVpdGhlciB3ZSBuZWVkIHRvIGRyb3AgYSBsb2NrLCBvbmUgb2Ygb3VyIEFTWU5DIHJlcXVlc3RzIGNvbXBsZXRlZCwgb3IKLSAqIGEgam91cm5hbCBmcm9tIGFub3RoZXIgY2xpZW50IG5lZWRzIHRvIGJlIHJlY292ZXJlZC4KICAqLwogCi12b2lkIGdmczJfZ2xvY2tfY2Iodm9pZCAqY2JfZGF0YSwgdW5zaWduZWQgaW50IHR5cGUsIHZvaWQgKmRhdGEpCit2b2lkIGdmczJfZ2xvY2tfY29tcGxldGUoc3RydWN0IGdmczJfZ2xvY2sgKmdsLCBpbnQgcmV0KQogewotCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gY2JfZGF0YTsKLQotCXN3aXRjaCAodHlwZSkgewotCWNhc2UgTE1fQ0JfTkVFRF9FOgotCQlibG9ja2luZ19jYihzZHAsIGRhdGEsIExNX1NUX1VOTE9DS0VEKTsKLQkJcmV0dXJuOwotCi0JY2FzZSBMTV9DQl9ORUVEX0Q6Ci0JCWJsb2NraW5nX2NiKHNkcCwgZGF0YSwgTE1fU1RfREVGRVJSRUQpOwotCQlyZXR1cm47Ci0KLQljYXNlIExNX0NCX05FRURfUzoKLQkJYmxvY2tpbmdfY2Ioc2RwLCBkYXRhLCBMTV9TVF9TSEFSRUQpOwotCQlyZXR1cm47Ci0KLQljYXNlIExNX0NCX0FTWU5DOiB7Ci0JCXN0cnVjdCBsbV9hc3luY19jYiAqYXN5bmMgPSBkYXRhOwotCQlzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2w7Ci0KLQkJZG93bl9yZWFkKCZnZnMyX3Vtb3VudF9mbHVzaF9zZW0pOwotCQlnbCA9IGdmczJfZ2xvY2tfZmluZChzZHAsICZhc3luYy0+bGNfbmFtZSk7Ci0JCWlmIChnZnMyX2Fzc2VydF93YXJuKHNkcCwgZ2wpKQorCXN0cnVjdCBsbV9sb2Nrc3RydWN0ICpscyA9ICZnbC0+Z2xfc2JkLT5zZF9sb2Nrc3RydWN0OworCWdsLT5nbF9yZXBseSA9IHJldDsKKwlpZiAodW5saWtlbHkodGVzdF9iaXQoREZMX0JMT0NLX0xPQ0tTLCAmbHMtPmxzX2ZsYWdzKSkpIHsKKwkJc3RydWN0IGdmczJfaG9sZGVyICpnaDsKKwkJc3Bpbl9sb2NrKCZnbC0+Z2xfc3Bpbik7CisJCWdoID0gZmluZF9maXJzdF93YWl0ZXIoZ2wpOworCQlpZiAoKCEoZ2ggJiYgKGdoLT5naF9mbGFncyAmIExNX0ZMQUdfTk9FWFApKSAmJgorCQkgICAgIChnbC0+Z2xfdGFyZ2V0ICE9IExNX1NUX1VOTE9DS0VEKSkgfHwKKwkJICAgICgocmV0ICYgfkxNX09VVF9TVF9NQVNLKSAhPSAwKSkKKwkJCXNldF9iaXQoR0xGX0ZST1pFTiwgJmdsLT5nbF9mbGFncyk7CisJCXNwaW5fdW5sb2NrKCZnbC0+Z2xfc3Bpbik7CisJCWlmICh0ZXN0X2JpdChHTEZfRlJPWkVOLCAmZ2wtPmdsX2ZsYWdzKSkKIAkJCXJldHVybjsKLQkJZ2wtPmdsX3JlcGx5ID0gYXN5bmMtPmxjX3JldDsKLQkJc2V0X2JpdChHTEZfUkVQTFlfUEVORElORywgJmdsLT5nbF9mbGFncyk7Ci0JCWlmIChxdWV1ZV9kZWxheWVkX3dvcmsoZ2xvY2tfd29ya3F1ZXVlLCAmZ2wtPmdsX3dvcmssIDApID09IDApCi0JCQlnZnMyX2dsb2NrX3B1dChnbCk7Ci0JCXVwX3JlYWQoJmdmczJfdW1vdW50X2ZsdXNoX3NlbSk7Ci0JCXJldHVybjsKIAl9Ci0KLQljYXNlIExNX0NCX05FRURfUkVDT1ZFUlk6Ci0JCWdmczJfamRlc2NfbWFrZV9kaXJ0eShzZHAsICoodW5zaWduZWQgaW50ICopZGF0YSk7Ci0JCWlmIChzZHAtPnNkX3JlY292ZXJkX3Byb2Nlc3MpCi0JCQl3YWtlX3VwX3Byb2Nlc3Moc2RwLT5zZF9yZWNvdmVyZF9wcm9jZXNzKTsKLQkJcmV0dXJuOwotCi0JZGVmYXVsdDoKLQkJZ2ZzMl9hc3NlcnRfd2FybihzZHAsIDApOwotCQlyZXR1cm47Ci0JfQorCXNldF9iaXQoR0xGX1JFUExZX1BFTkRJTkcsICZnbC0+Z2xfZmxhZ3MpOworCWdmczJfZ2xvY2tfaG9sZChnbCk7CisJaWYgKHF1ZXVlX2RlbGF5ZWRfd29yayhnbG9ja193b3JrcXVldWUsICZnbC0+Z2xfd29yaywgMCkgPT0gMCkKKwkJZ2ZzMl9nbG9ja19wdXQoZ2wpOwogfQogCiAvKioKQEAgLTE1MTUsNiArMTM3NywyNSBAQAogCXJldHVybiBoYXNfZW50cmllczsKIH0KIAorCisvKioKKyAqIHRoYXdfZ2xvY2sgLSB0aGF3IG91dCBhIGdsb2NrIHdoaWNoIGhhcyBhbiB1bnByb2Nlc3NlZCByZXBseSB3YWl0aW5nCisgKiBAZ2w6IFRoZSBnbG9jayB0byB0aGF3CisgKgorICogTi5CLiBXaGVuIHdlIGZyZWV6ZSBhIGdsb2NrLCB3ZSBsZWF2ZSBhIHJlZiB0byB0aGUgZ2xvY2sgb3V0c3RhbmRpbmcsCisgKiBzbyB0aGlzIGhhcyB0byByZXN1bHQgaW4gdGhlIHJlZiBjb3VudCBiZWluZyBkcm9wcGVkIGJ5IG9uZS4KKyAqLworCitzdGF0aWMgdm9pZCB0aGF3X2dsb2NrKHN0cnVjdCBnZnMyX2dsb2NrICpnbCkKK3sKKwlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChHTEZfRlJPWkVOLCAmZ2wtPmdsX2ZsYWdzKSkKKwkJcmV0dXJuOworCXNldF9iaXQoR0xGX1JFUExZX1BFTkRJTkcsICZnbC0+Z2xfZmxhZ3MpOworCWdmczJfZ2xvY2tfaG9sZChnbCk7CisJaWYgKHF1ZXVlX2RlbGF5ZWRfd29yayhnbG9ja193b3JrcXVldWUsICZnbC0+Z2xfd29yaywgMCkgPT0gMCkKKwkJZ2ZzMl9nbG9ja19wdXQoZ2wpOworfQorCiAvKioKICAqIGNsZWFyX2dsb2NrIC0gbG9vayBhdCBhIGdsb2NrIGFuZCBzZWUgaWYgd2UgY2FuIGZyZWUgaXQgZnJvbSBnbG9jayBjYWNoZQogICogQGdsOiB0aGUgZ2xvY2sgdG8gbG9vayBhdApAQCAtMTU0MCw2ICsxNDIxLDIwIEBACiB9CiAKIC8qKgorICogZ2ZzMl9nbG9ja190aGF3IC0gVGhhdyBhbnkgZnJvemVuIGdsb2NrcworICogQHNkcDogVGhlIHN1cGVyIGJsb2NrCisgKgorICovCisKK3ZvaWQgZ2ZzMl9nbG9ja190aGF3KHN0cnVjdCBnZnMyX3NiZCAqc2RwKQoreworCXVuc2lnbmVkIHg7CisKKwlmb3IgKHggPSAwOyB4IDwgR0ZTMl9HTF9IQVNIX1NJWkU7IHgrKykKKwkJZXhhbWluZV9idWNrZXQodGhhd19nbG9jaywgc2RwLCB4KTsKK30KKworLyoqCiAgKiBnZnMyX2dsX2hhc2hfY2xlYXIgLSBFbXB0eSBvdXQgdGhlIGdsb2NrIGhhc2ggdGFibGUKICAqIEBzZHA6IHRoZSBmaWxlc3lzdGVtCiAgKiBAd2FpdDogd2FpdCB1bnRpbCBpdCdzIGFsbCBnb25lCkBAIC0xNjE5LDcgKzE1MTQsNyBAQAogCWlmIChmbGFncyAmIExNX0ZMQUdfTk9FWFApCiAJCSpwKysgPSAnZSc7CiAJaWYgKGZsYWdzICYgTE1fRkxBR19BTlkpCi0JCSpwKysgPSAnYSc7CisJCSpwKysgPSAnQSc7CiAJaWYgKGZsYWdzICYgTE1fRkxBR19QUklPUklUWSkKIAkJKnArKyA9ICdwJzsKIAlpZiAoZmxhZ3MgJiBHTF9BU1lOQykKQEAgLTE2ODMsNiArMTU3OCwxMCBAQAogCQkqcCsrID0gJ2knOwogCWlmICh0ZXN0X2JpdChHTEZfUkVQTFlfUEVORElORywgZ2ZsYWdzKSkKIAkJKnArKyA9ICdyJzsKKwlpZiAodGVzdF9iaXQoR0xGX0lOSVRJQUwsIGdmbGFncykpCisJCSpwKysgPSAnSSc7CisJaWYgKHRlc3RfYml0KEdMRl9GUk9aRU4sIGdmbGFncykpCisJCSpwKysgPSAnRic7CiAJKnAgPSAwOwogCXJldHVybiBidWY7CiB9CkBAIC0xNzE3LDE0ICsxNjE2LDEzIEBACiAJZHRpbWUgKj0gMTAwMDAwMC9IWjsgLyogZGVtb3RlIHRpbWUgaW4gdVNlYyAqLwogCWlmICghdGVzdF9iaXQoR0xGX0RFTU9URSwgJmdsLT5nbF9mbGFncykpCiAJCWR0aW1lID0gMDsKLQlnZnMyX3ByaW50X2RiZyhzZXEsICJHOiAgczolcyBuOiV1LyVsbHUgZjolcyB0OiVzIGQ6JXMvJWxsdSBsOiVkIGE6JWQgcjolZFxuIiwKKwlnZnMyX3ByaW50X2RiZyhzZXEsICJHOiAgczolcyBuOiV1LyVsbHUgZjolcyB0OiVzIGQ6JXMvJWxsdSBhOiVkIHI6JWRcbiIsCiAJCSAgc3RhdGUyc3RyKGdsLT5nbF9zdGF0ZSksCiAJCSAgZ2wtPmdsX25hbWUubG5fdHlwZSwKIAkJICAodW5zaWduZWQgbG9uZyBsb25nKWdsLT5nbF9uYW1lLmxuX251bWJlciwKIAkJICBnZmxhZ3Myc3RyKGdmbGFnc19idWYsICZnbC0+Z2xfZmxhZ3MpLAogCQkgIHN0YXRlMnN0cihnbC0+Z2xfdGFyZ2V0KSwKIAkJICBzdGF0ZTJzdHIoZ2wtPmdsX2RlbW90ZV9zdGF0ZSksIGR0aW1lLAotCQkgIGF0b21pY19yZWFkKCZnbC0+Z2xfbHZiX2NvdW50KSwKIAkJICBhdG9taWNfcmVhZCgmZ2wtPmdsX2FpbF9jb3VudCksCiAJCSAgYXRvbWljX3JlYWQoJmdsLT5nbF9yZWYpKTsKIApkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9nbG9jay5oIGIvZnMvZ2ZzMi9nbG9jay5oCmluZGV4IDU0M2VjN2UuLmE2MDJhMjggMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvZ2xvY2suaAorKysgYi9mcy9nZnMyL2dsb2NrLmgKQEAgLTExLDE1ICsxMSwxMzAgQEAKICNkZWZpbmUgX19HTE9DS19ET1RfSF9fCiAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3BhcnNlci5oPgogI2luY2x1ZGUgImluY29yZS5oIgogCi0vKiBGbGFncyBmb3IgbG9jayByZXF1ZXN0czsgdXNlZCBpbiBnZnMyX2hvbGRlciBnaF9mbGFnIGZpZWxkLgotICAgRnJvbSBsbV9pbnRlcmZhY2UuaDoKKy8qIE9wdGlvbnMgZm9yIGhvc3RkYXRhIHBhcnNlciAqLworCitlbnVtIHsKKwlPcHRfamlkLAorCU9wdF9pZCwKKwlPcHRfZmlyc3QsCisJT3B0X25vZGlyLAorCU9wdF9lcnIsCit9OworCisvKgorICogbG1fbG9ja25hbWUgdHlwZXMKKyAqLworCisjZGVmaW5lIExNX1RZUEVfUkVTRVJWRUQJMHgwMAorI2RlZmluZSBMTV9UWVBFX05PTkRJU0sJCTB4MDEKKyNkZWZpbmUgTE1fVFlQRV9JTk9ERQkJMHgwMgorI2RlZmluZSBMTV9UWVBFX1JHUlAJCTB4MDMKKyNkZWZpbmUgTE1fVFlQRV9NRVRBCQkweDA0CisjZGVmaW5lIExNX1RZUEVfSU9QRU4JCTB4MDUKKyNkZWZpbmUgTE1fVFlQRV9GTE9DSwkJMHgwNgorI2RlZmluZSBMTV9UWVBFX1BMT0NLCQkweDA3CisjZGVmaW5lIExNX1RZUEVfUVVPVEEJCTB4MDgKKyNkZWZpbmUgTE1fVFlQRV9KT1VSTkFMCQkweDA5CisKKy8qCisgKiBsbV9sb2NrKCkgc3RhdGVzCisgKgorICogU0hBUkVEIGlzIGNvbXBhdGlibGUgd2l0aCBTSEFSRUQsIG5vdCB3aXRoIERFRkVSUkVEIG9yIEVYLgorICogREVGRVJSRUQgaXMgY29tcGF0aWJsZSB3aXRoIERFRkVSUkVELCBub3Qgd2l0aCBTSEFSRUQgb3IgRVguCisgKi8KKworI2RlZmluZSBMTV9TVF9VTkxPQ0tFRAkJMAorI2RlZmluZSBMTV9TVF9FWENMVVNJVkUJCTEKKyNkZWZpbmUgTE1fU1RfREVGRVJSRUQJCTIKKyNkZWZpbmUgTE1fU1RfU0hBUkVECQkzCisKKy8qCisgKiBsbV9sb2NrKCkgZmxhZ3MKKyAqCisgKiBMTV9GTEFHX1RSWQorICogRG9uJ3Qgd2FpdCB0byBhY3F1aXJlIHRoZSBsb2NrIGlmIGl0IGNhbid0IGJlIGdyYW50ZWQgaW1tZWRpYXRlbHkuCisgKgorICogTE1fRkxBR19UUllfMUNCCisgKiBTZW5kIG9uZSBibG9ja2luZyBjYWxsYmFjayBpZiBUUlkgaXMgc2V0IGFuZCB0aGUgbG9jayBpcyBub3QgZ3JhbnRlZC4KKyAqCisgKiBMTV9GTEFHX05PRVhQCisgKiBHRlMgc2V0cyB0aGlzIGZsYWcgb24gbG9jayByZXF1ZXN0cyBpdCBtYWtlcyB3aGlsZSBkb2luZyBqb3VybmFsIHJlY292ZXJ5LgorICogVGhlc2Ugc3BlY2lhbCByZXF1ZXN0cyBzaG91bGQgbm90IGJlIGJsb2NrZWQgZHVlIHRvIHRoZSByZWNvdmVyeSBsaWtlCisgKiBvcmRpbmFyeSBsb2NrcyB3b3VsZCBiZS4KKyAqCisgKiBMTV9GTEFHX0FOWQorICogQSBTSEFSRUQgcmVxdWVzdCBtYXkgYWxzbyBiZSBncmFudGVkIGluIERFRkVSUkVELCBvciBhIERFRkVSUkVEIHJlcXVlc3QgbWF5CisgKiBhbHNvIGJlIGdyYW50ZWQgaW4gU0hBUkVELiAgVGhlIHByZWZlcnJlZCBzdGF0ZSBpcyB3aGljaGV2ZXIgaXMgY29tcGF0aWJsZQorICogd2l0aCBvdGhlciBncmFudGVkIGxvY2tzLCBvciB0aGUgc3BlY2lmaWVkIHN0YXRlIGlmIG5vIG90aGVyIGxvY2tzIGV4aXN0LgorICoKKyAqIExNX0ZMQUdfUFJJT1JJVFkKKyAqIE92ZXJyaWRlIGZhaXJuZXNzIGNvbnNpZGVyYXRpb25zLiAgU3VwcG9zZSBhIGxvY2sgaXMgaGVsZCBpbiBhIHNoYXJlZCBzdGF0ZQorICogYW5kIHRoZXJlIGlzIGEgcGVuZGluZyByZXF1ZXN0IGZvciB0aGUgZGVmZXJyZWQgc3RhdGUuICBBIHNoYXJlZCBsb2NrCisgKiByZXF1ZXN0IHdpdGggdGhlIHByaW9yaXR5IGZsYWcgd291bGQgYmUgYWxsb3dlZCB0byBieXBhc3MgdGhlIGRlZmVycmVkCisgKiByZXF1ZXN0IGFuZCBkaXJlY3RseSBqb2luIHRoZSBvdGhlciBzaGFyZWQgbG9jay4gIEEgc2hhcmVkIGxvY2sgcmVxdWVzdAorICogd2l0aG91dCB0aGUgcHJpb3JpdHkgZmxhZyBtaWdodCBiZSBmb3JjZWQgdG8gd2FpdCB1bnRpbCB0aGUgZGVmZXJyZWQKKyAqIHJlcXVlc3RlZCBoYWQgYWNxdWlyZWQgYW5kIHJlbGVhc2VkIHRoZSBsb2NrLgorICovCisKICNkZWZpbmUgTE1fRkxBR19UUlkJCTB4MDAwMDAwMDEKICNkZWZpbmUgTE1fRkxBR19UUllfMUNCCQkweDAwMDAwMDAyCiAjZGVmaW5lIExNX0ZMQUdfTk9FWFAJCTB4MDAwMDAwMDQKICNkZWZpbmUgTE1fRkxBR19BTlkJCTB4MDAwMDAwMDgKLSNkZWZpbmUgTE1fRkxBR19QUklPUklUWQkweDAwMDAwMDEwICovCisjZGVmaW5lIExNX0ZMQUdfUFJJT1JJVFkJMHgwMDAwMDAxMAorI2RlZmluZSBHTF9BU1lOQwkJMHgwMDAwMDA0MAorI2RlZmluZSBHTF9FWEFDVAkJMHgwMDAwMDA4MAorI2RlZmluZSBHTF9TS0lQCQkJMHgwMDAwMDEwMAorI2RlZmluZSBHTF9BVElNRQkJMHgwMDAwMDIwMAorI2RlZmluZSBHTF9OT0NBQ0hFCQkweDAwMDAwNDAwCisgIAorLyoKKyAqIGxtX2xvY2soKSBhbmQgbG1fYXN5bmNfY2IgcmV0dXJuIGZsYWdzCisgKgorICogTE1fT1VUX1NUX01BU0sKKyAqIE1hc2tzIHRoZSBsb3dlciB0d28gYml0cyBvZiBsb2NrIHN0YXRlIGluIHRoZSByZXR1cm5lZCB2YWx1ZS4KKyAqCisgKiBMTV9PVVRfQ0FOQ0VMRUQKKyAqIFRoZSBsb2NrIHJlcXVlc3Qgd2FzIGNhbmNlbGVkLgorICoKKyAqIExNX09VVF9BU1lOQworICogVGhlIHJlc3VsdCBvZiB0aGUgcmVxdWVzdCB3aWxsIGJlIHJldHVybmVkIGluIGFuIExNX0NCX0FTWU5DIGNhbGxiYWNrLgorICoKKyAqLworCisjZGVmaW5lIExNX09VVF9TVF9NQVNLCQkweDAwMDAwMDAzCisjZGVmaW5lIExNX09VVF9DQU5DRUxFRAkJMHgwMDAwMDAwOAorI2RlZmluZSBMTV9PVVRfQVNZTkMJCTB4MDAwMDAwODAKKyNkZWZpbmUgTE1fT1VUX0VSUk9SCQkweDAwMDAwMTAwCisKKy8qCisgKiBsbV9yZWNvdmVyeV9kb25lKCkgbWVzc2FnZXMKKyAqLworCisjZGVmaW5lIExNX1JEX0dBVkVVUAkJMzA4CisjZGVmaW5lIExNX1JEX1NVQ0NFU1MJCTMwOQorCisjZGVmaW5lIEdMUl9UUllGQUlMRUQJCTEzCisKK3N0cnVjdCBsbV9sb2Nrb3BzIHsKKwljb25zdCBjaGFyICpsbV9wcm90b19uYW1lOworCWludCAoKmxtX21vdW50KSAoc3RydWN0IGdmczJfc2JkICpzZHAsIGNvbnN0IGNoYXIgKmZzbmFtZSk7CisgCXZvaWQgKCpsbV91bm1vdW50KSAoc3RydWN0IGdmczJfc2JkICpzZHApOworCXZvaWQgKCpsbV93aXRoZHJhdykgKHN0cnVjdCBnZnMyX3NiZCAqc2RwKTsKKwl2b2lkICgqbG1fcHV0X2xvY2spIChzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwLCB2b2lkICpnbCk7CisJdW5zaWduZWQgaW50ICgqbG1fbG9jaykgKHN0cnVjdCBnZnMyX2dsb2NrICpnbCwKKwkJCQkgdW5zaWduZWQgaW50IHJlcV9zdGF0ZSwgdW5zaWduZWQgaW50IGZsYWdzKTsKKwl2b2lkICgqbG1fY2FuY2VsKSAoc3RydWN0IGdmczJfZ2xvY2sgKmdsKTsKKwljb25zdCBtYXRjaF90YWJsZV90ICpsbV90b2tlbnM7Cit9OworCisjZGVmaW5lIExNX0ZMQUdfVFJZCQkweDAwMDAwMDAxCisjZGVmaW5lIExNX0ZMQUdfVFJZXzFDQgkJMHgwMDAwMDAwMgorI2RlZmluZSBMTV9GTEFHX05PRVhQCQkweDAwMDAwMDA0CisjZGVmaW5lIExNX0ZMQUdfQU5ZCQkweDAwMDAwMDA4CisjZGVmaW5lIExNX0ZMQUdfUFJJT1JJVFkJMHgwMDAwMDAxMAogCiAjZGVmaW5lIEdMX0FTWU5DCQkweDAwMDAwMDQwCiAjZGVmaW5lIEdMX0VYQUNUCQkweDAwMDAwMDgwCkBAIC0xMjgsMTAgKzI0MywxMiBAQAogaW50IGdmczJfbHZiX2hvbGQoc3RydWN0IGdmczJfZ2xvY2sgKmdsKTsKIHZvaWQgZ2ZzMl9sdmJfdW5ob2xkKHN0cnVjdCBnZnMyX2dsb2NrICpnbCk7CiAKLXZvaWQgZ2ZzMl9nbG9ja19jYih2b2lkICpjYl9kYXRhLCB1bnNpZ25lZCBpbnQgdHlwZSwgdm9pZCAqZGF0YSk7Cit2b2lkIGdmczJfZ2xvY2tfY2Ioc3RydWN0IGdmczJfZ2xvY2sgKmdsLCB1bnNpZ25lZCBpbnQgc3RhdGUpOwordm9pZCBnZnMyX2dsb2NrX2NvbXBsZXRlKHN0cnVjdCBnZnMyX2dsb2NrICpnbCwgaW50IHJldCk7CiB2b2lkIGdmczJfcmVjbGFpbV9nbG9jayhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCk7CiB2b2lkIGdmczJfZ2xfaGFzaF9jbGVhcihzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCk7CiB2b2lkIGdmczJfZ2xvY2tfZmluaXNoX3RydW5jYXRlKHN0cnVjdCBnZnMyX2lub2RlICppcCk7Cit2b2lkIGdmczJfZ2xvY2tfdGhhdyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCk7CiAKIGludCBfX2luaXQgZ2ZzMl9nbG9ja19pbml0KHZvaWQpOwogdm9pZCBnZnMyX2dsb2NrX2V4aXQodm9pZCk7CkBAIC0xNDEsNCArMjU4LDYgQEAKIGludCBnZnMyX3JlZ2lzdGVyX2RlYnVnZnModm9pZCk7CiB2b2lkIGdmczJfdW5yZWdpc3Rlcl9kZWJ1Z2ZzKHZvaWQpOwogCitleHRlcm4gY29uc3Qgc3RydWN0IGxtX2xvY2tvcHMgZ2ZzMl9kbG1fb3BzOworCiAjZW5kaWYgLyogX19HTE9DS19ET1RfSF9fICovCmRpZmYgLS1naXQgYS9mcy9nZnMyL2dsb3BzLmMgYi9mcy9nZnMyL2dsb3BzLmMKaW5kZXggODUyMmQzYS4uYmYyM2E2MiAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9nbG9wcy5jCisrKyBiL2ZzL2dmczIvZ2xvcHMuYwpAQCAtMTIsNyArMTIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KICNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L2dmczJfb25kaXNrLmg+Ci0jaW5jbHVkZSA8bGludXgvbG1faW50ZXJmYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvYmlvLmg+CiAKICNpbmNsdWRlICJnZnMyLmgiCkBAIC0zOCwxOSArMzcsMjQgQEAKIHN0YXRpYyB2b2lkIGdmczJfYWlsX2VtcHR5X2dsKHN0cnVjdCBnZnMyX2dsb2NrICpnbCkKIHsKIAlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IGdsLT5nbF9zYmQ7Ci0JdW5zaWduZWQgaW50IGJsb2NrczsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkID0gJmdsLT5nbF9haWxfbGlzdDsKIAlzdHJ1Y3QgZ2ZzMl9idWZkYXRhICpiZDsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwotCWludCBlcnJvcjsKKwlzdHJ1Y3QgZ2ZzMl90cmFucyB0cjsKIAotCWJsb2NrcyA9IGF0b21pY19yZWFkKCZnbC0+Z2xfYWlsX2NvdW50KTsKLQlpZiAoIWJsb2NrcykKKwltZW1zZXQoJnRyLCAwLCBzaXplb2YodHIpKTsKKwl0ci50cl9yZXZva2VzID0gYXRvbWljX3JlYWQoJmdsLT5nbF9haWxfY291bnQpOworCisJaWYgKCF0ci50cl9yZXZva2VzKQogCQlyZXR1cm47CiAKLQllcnJvciA9IGdmczJfdHJhbnNfYmVnaW4oc2RwLCAwLCBibG9ja3MpOwotCWlmIChnZnMyX2Fzc2VydF93aXRoZHJhdyhzZHAsICFlcnJvcikpCi0JCXJldHVybjsKKwkvKiBBIHNob3J0ZW5lZCwgaW5saW5lIHZlcnNpb24gb2YgZ2ZzMl90cmFuc19iZWdpbigpICovCisJdHIudHJfcmVzZXJ2ZWQgPSAxICsgZ2ZzMl9zdHJ1Y3QyYmxrKHNkcCwgdHIudHJfcmV2b2tlcywgc2l6ZW9mKHU2NCkpOworCXRyLnRyX2lwID0gKHVuc2lnbmVkIGxvbmcpX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApOworCUlOSVRfTElTVF9IRUFEKCZ0ci50cl9saXN0X2J1Zik7CisJZ2ZzMl9sb2dfcmVzZXJ2ZShzZHAsIHRyLnRyX3Jlc2VydmVkKTsKKwlCVUdfT04oY3VycmVudC0+am91cm5hbF9pbmZvKTsKKwljdXJyZW50LT5qb3VybmFsX2luZm8gPSAmdHI7CiAKIAlnZnMyX2xvZ19sb2NrKHNkcCk7CiAJd2hpbGUgKCFsaXN0X2VtcHR5KGhlYWQpKSB7CkBAIC03MiwyOSArNzYsNyBAQAogfQogCiAvKioKLSAqIGdmczJfcHRlX2ludmFsIC0gU3luYyBhbmQgaW52YWxpZGF0ZSBhbGwgUFRFcyBhc3NvY2lhdGVkIHdpdGggYSBnbG9jawotICogQGdsOiB0aGUgZ2xvY2sKLSAqCi0gKi8KLQotc3RhdGljIHZvaWQgZ2ZzMl9wdGVfaW52YWwoc3RydWN0IGdmczJfZ2xvY2sgKmdsKQotewotCXN0cnVjdCBnZnMyX2lub2RlICppcDsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlOwotCi0JaXAgPSBnbC0+Z2xfb2JqZWN0OwotCWlub2RlID0gJmlwLT5pX2lub2RlOwotCWlmICghaXAgfHwgIVNfSVNSRUcoaW5vZGUtPmlfbW9kZSkpCi0JCXJldHVybjsKLQotCXVubWFwX3NoYXJlZF9tYXBwaW5nX3JhbmdlKGlub2RlLT5pX21hcHBpbmcsIDAsIDApOwotCWlmICh0ZXN0X2JpdChHSUZfU1dfUEFHRUQsICZpcC0+aV9mbGFncykpCi0JCXNldF9iaXQoR0xGX0RJUlRZLCAmZ2wtPmdsX2ZsYWdzKTsKLQotfQotCi0vKioKLSAqIG1ldGFfZ29fc3luYyAtIHN5bmMgb3V0IHRoZSBtZXRhZGF0YSBmb3IgdGhpcyBnbG9jaworICogcmdycF9nb19zeW5jIC0gc3luYyBvdXQgdGhlIG1ldGFkYXRhIGZvciB0aGlzIGdsb2NrCiAgKiBAZ2w6IHRoZSBnbG9jawogICoKICAqIENhbGxlZCB3aGVuIGRlbW90aW5nIG9yIHVubG9ja2luZyBhbiBFWCBnbG9jay4gIFdlIG11c3QgZmx1c2gKQEAgLTEwMiwzNiArODQsNDIgQEAKICAqIG5vdCByZXR1cm4gdG8gY2FsbGVyIHRvIGRlbW90ZS91bmxvY2sgdGhlIGdsb2NrIHVudGlsIEkvTyBpcyBjb21wbGV0ZS4KICAqLwogCi1zdGF0aWMgdm9pZCBtZXRhX2dvX3N5bmMoc3RydWN0IGdmczJfZ2xvY2sgKmdsKQorc3RhdGljIHZvaWQgcmdycF9nb19zeW5jKHN0cnVjdCBnZnMyX2dsb2NrICpnbCkKIHsKLQlpZiAoZ2wtPmdsX3N0YXRlICE9IExNX1NUX0VYQ0xVU0lWRSkKLQkJcmV0dXJuOworCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptZXRhbWFwcGluZyA9IGdsLT5nbF9hc3BhY2UtPmlfbWFwcGluZzsKKwlpbnQgZXJyb3I7CiAKLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEdMRl9ESVJUWSwgJmdsLT5nbF9mbGFncykpIHsKLQkJZ2ZzMl9sb2dfZmx1c2goZ2wtPmdsX3NiZCwgZ2wpOwotCQlnZnMyX21ldGFfc3luYyhnbCk7Ci0JCWdmczJfYWlsX2VtcHR5X2dsKGdsKTsKLQl9CisJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoR0xGX0RJUlRZLCAmZ2wtPmdsX2ZsYWdzKSkKKwkJcmV0dXJuOworCUJVR19PTihnbC0+Z2xfc3RhdGUgIT0gTE1fU1RfRVhDTFVTSVZFKTsKKworCWdmczJfbG9nX2ZsdXNoKGdsLT5nbF9zYmQsIGdsKTsKKwlmaWxlbWFwX2ZkYXRhd3JpdGUobWV0YW1hcHBpbmcpOworCWVycm9yID0gZmlsZW1hcF9mZGF0YXdhaXQobWV0YW1hcHBpbmcpOworICAgICAgICBtYXBwaW5nX3NldF9lcnJvcihtZXRhbWFwcGluZywgZXJyb3IpOworCWdmczJfYWlsX2VtcHR5X2dsKGdsKTsKIH0KIAogLyoqCi0gKiBtZXRhX2dvX2ludmFsIC0gaW52YWxpZGF0ZSB0aGUgbWV0YWRhdGEgZm9yIHRoaXMgZ2xvY2sKKyAqIHJncnBfZ29faW52YWwgLSBpbnZhbGlkYXRlIHRoZSBtZXRhZGF0YSBmb3IgdGhpcyBnbG9jawogICogQGdsOiB0aGUgZ2xvY2sKICAqIEBmbGFnczoKICAqCisgKiBXZSBuZXZlciB1c2VkIExNX1NUX0RFRkVSUkVEIHdpdGggcmVzb3VyY2UgZ3JvdXBzLCBzbyB0aGF0IHdlCisgKiBzaG91bGQgYWx3YXlzIHNlZSB0aGUgbWV0YWRhdGEgZmxhZyBzZXQgaGVyZS4KKyAqCiAgKi8KIAotc3RhdGljIHZvaWQgbWV0YV9nb19pbnZhbChzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wsIGludCBmbGFncykKK3N0YXRpYyB2b2lkIHJncnBfZ29faW52YWwoc3RydWN0IGdmczJfZ2xvY2sgKmdsLCBpbnQgZmxhZ3MpCiB7Ci0JaWYgKCEoZmxhZ3MgJiBESU9fTUVUQURBVEEpKQotCQlyZXR1cm47CisJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBnbC0+Z2xfYXNwYWNlLT5pX21hcHBpbmc7CiAKLQlnZnMyX21ldGFfaW52YWwoZ2wpOwotCWlmIChnbC0+Z2xfb2JqZWN0ID09IEdGUzJfSShnbC0+Z2xfc2JkLT5zZF9yaW5kZXgpKQotCQlnbC0+Z2xfc2JkLT5zZF9yaW5kZXhfdXB0b2RhdGUgPSAwOwotCWVsc2UgaWYgKGdsLT5nbF9vcHMgPT0gJmdmczJfcmdycF9nbG9wcyAmJiBnbC0+Z2xfb2JqZWN0KSB7CisJQlVHX09OKCEoZmxhZ3MgJiBESU9fTUVUQURBVEEpKTsKKwlnZnMyX2Fzc2VydF93aXRoZHJhdyhnbC0+Z2xfc2JkLCAhYXRvbWljX3JlYWQoJmdsLT5nbF9haWxfY291bnQpKTsKKwl0cnVuY2F0ZV9pbm9kZV9wYWdlcyhtYXBwaW5nLCAwKTsKKworCWlmIChnbC0+Z2xfb2JqZWN0KSB7CiAJCXN0cnVjdCBnZnMyX3JncnBkICpyZ2QgPSAoc3RydWN0IGdmczJfcmdycGQgKilnbC0+Z2xfb2JqZWN0OwotCiAJCXJnZC0+cmRfZmxhZ3MgJj0gfkdGUzJfUkRGX1VQVE9EQVRFOwogCX0KIH0KQEAgLTE0OCw0OCArMTM2LDU0IEBACiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1ldGFtYXBwaW5nID0gZ2wtPmdsX2FzcGFjZS0+aV9tYXBwaW5nOwogCWludCBlcnJvcjsKIAotCWlmIChnbC0+Z2xfc3RhdGUgIT0gTE1fU1RfVU5MT0NLRUQpCi0JCWdmczJfcHRlX2ludmFsKGdsKTsKLQlpZiAoZ2wtPmdsX3N0YXRlICE9IExNX1NUX0VYQ0xVU0lWRSkKLQkJcmV0dXJuOwotCiAJaWYgKGlwICYmICFTX0lTUkVHKGlwLT5pX2lub2RlLmlfbW9kZSkpCiAJCWlwID0gTlVMTDsKKwlpZiAoaXAgJiYgdGVzdF9hbmRfY2xlYXJfYml0KEdJRl9TV19QQUdFRCwgJmlwLT5pX2ZsYWdzKSkKKwkJdW5tYXBfc2hhcmVkX21hcHBpbmdfcmFuZ2UoaXAtPmlfaW5vZGUuaV9tYXBwaW5nLCAwLCAwKTsKKwlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChHTEZfRElSVFksICZnbC0+Z2xfZmxhZ3MpKQorCQlyZXR1cm47CiAKLQlpZiAodGVzdF9iaXQoR0xGX0RJUlRZLCAmZ2wtPmdsX2ZsYWdzKSkgewotCQlnZnMyX2xvZ19mbHVzaChnbC0+Z2xfc2JkLCBnbCk7Ci0JCWZpbGVtYXBfZmRhdGF3cml0ZShtZXRhbWFwcGluZyk7Ci0JCWlmIChpcCkgewotCQkJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBpcC0+aV9pbm9kZS5pX21hcHBpbmc7Ci0JCQlmaWxlbWFwX2ZkYXRhd3JpdGUobWFwcGluZyk7Ci0JCQllcnJvciA9IGZpbGVtYXBfZmRhdGF3YWl0KG1hcHBpbmcpOwotCQkJbWFwcGluZ19zZXRfZXJyb3IobWFwcGluZywgZXJyb3IpOwotCQl9Ci0JCWVycm9yID0gZmlsZW1hcF9mZGF0YXdhaXQobWV0YW1hcHBpbmcpOwotCQltYXBwaW5nX3NldF9lcnJvcihtZXRhbWFwcGluZywgZXJyb3IpOwotCQljbGVhcl9iaXQoR0xGX0RJUlRZLCAmZ2wtPmdsX2ZsYWdzKTsKLQkJZ2ZzMl9haWxfZW1wdHlfZ2woZ2wpOworCUJVR19PTihnbC0+Z2xfc3RhdGUgIT0gTE1fU1RfRVhDTFVTSVZFKTsKKworCWdmczJfbG9nX2ZsdXNoKGdsLT5nbF9zYmQsIGdsKTsKKwlmaWxlbWFwX2ZkYXRhd3JpdGUobWV0YW1hcHBpbmcpOworCWlmIChpcCkgeworCQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGlwLT5pX2lub2RlLmlfbWFwcGluZzsKKwkJZmlsZW1hcF9mZGF0YXdyaXRlKG1hcHBpbmcpOworCQllcnJvciA9IGZpbGVtYXBfZmRhdGF3YWl0KG1hcHBpbmcpOworCQltYXBwaW5nX3NldF9lcnJvcihtYXBwaW5nLCBlcnJvcik7CiAJfQorCWVycm9yID0gZmlsZW1hcF9mZGF0YXdhaXQobWV0YW1hcHBpbmcpOworCW1hcHBpbmdfc2V0X2Vycm9yKG1ldGFtYXBwaW5nLCBlcnJvcik7CisJZ2ZzMl9haWxfZW1wdHlfZ2woZ2wpOwogfQogCiAvKioKICAqIGlub2RlX2dvX2ludmFsIC0gcHJlcGFyZSBhIGlub2RlIGdsb2NrIHRvIGJlIHJlbGVhc2VkCiAgKiBAZ2w6IHRoZSBnbG9jawogICogQGZsYWdzOgorICogCisgKiBOb3JtYWxseSB3ZSBpbnZsaWRhdGUgZXZlcnl0aGluZywgYnV0IGlmIHdlIGFyZSBtb3ZpbmcgaW50bworICogTE1fU1RfREVGRVJSRUQgZnJvbSBMTV9TVF9TSEFSRUQgb3IgTE1fU1RfRVhDTFVTSVZFIHRoZW4gd2UKKyAqIGNhbiBrZWVwIGhvbGQgb2YgdGhlIG1ldGFkYXRhLCBzaW5jZSBpdCB3b24ndCBoYXZlIGNoYW5nZWQuCiAgKgogICovCiAKIHN0YXRpYyB2b2lkIGlub2RlX2dvX2ludmFsKHN0cnVjdCBnZnMyX2dsb2NrICpnbCwgaW50IGZsYWdzKQogewogCXN0cnVjdCBnZnMyX2lub2RlICppcCA9IGdsLT5nbF9vYmplY3Q7Ci0JaW50IG1ldGEgPSAoZmxhZ3MgJiBESU9fTUVUQURBVEEpOwogCi0JaWYgKG1ldGEpIHsKLQkJZ2ZzMl9tZXRhX2ludmFsKGdsKTsKKwlnZnMyX2Fzc2VydF93aXRoZHJhdyhnbC0+Z2xfc2JkLCAhYXRvbWljX3JlYWQoJmdsLT5nbF9haWxfY291bnQpKTsKKworCWlmIChmbGFncyAmIERJT19NRVRBREFUQSkgeworCQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGdsLT5nbF9hc3BhY2UtPmlfbWFwcGluZzsKKwkJdHJ1bmNhdGVfaW5vZGVfcGFnZXMobWFwcGluZywgMCk7CiAJCWlmIChpcCkKIAkJCXNldF9iaXQoR0lGX0lOVkFMSUQsICZpcC0+aV9mbGFncyk7CiAJfQogCisJaWYgKGlwID09IEdGUzJfSShnbC0+Z2xfc2JkLT5zZF9yaW5kZXgpKQorCQlnbC0+Z2xfc2JkLT5zZF9yaW5kZXhfdXB0b2RhdGUgPSAwOwogCWlmIChpcCAmJiBTX0lTUkVHKGlwLT5pX2lub2RlLmlfbW9kZSkpCiAJCXRydW5jYXRlX2lub2RlX3BhZ2VzKGlwLT5pX2lub2RlLmlfbWFwcGluZywgMCk7CiB9CkBAIC0zOTAsMjAgKzM4NCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qKgotICogcXVvdGFfZ29fZGVtb3RlX29rIC0gQ2hlY2sgdG8gc2VlIGlmIGl0J3Mgb2sgdG8gdW5sb2NrIGEgcXVvdGEgZ2xvY2sKLSAqIEBnbDogdGhlIGdsb2NrCi0gKgotICogUmV0dXJuczogMSBpZiBpdCdzIG9rCi0gKi8KLQotc3RhdGljIGludCBxdW90YV9nb19kZW1vdGVfb2soY29uc3Qgc3RydWN0IGdmczJfZ2xvY2sgKmdsKQotewotCXJldHVybiAhYXRvbWljX3JlYWQoJmdsLT5nbF9sdmJfY291bnQpOwotfQotCiBjb25zdCBzdHJ1Y3QgZ2ZzMl9nbG9ja19vcGVyYXRpb25zIGdmczJfbWV0YV9nbG9wcyA9IHsKLQkuZ29feG1vdGVfdGggPSBtZXRhX2dvX3N5bmMsCiAJLmdvX3R5cGUgPSBMTV9UWVBFX01FVEEsCiB9OwogCkBAIC00MTgsOCArMzk5LDggQEAKIH07CiAKIGNvbnN0IHN0cnVjdCBnZnMyX2dsb2NrX29wZXJhdGlvbnMgZ2ZzMl9yZ3JwX2dsb3BzID0gewotCS5nb194bW90ZV90aCA9IG1ldGFfZ29fc3luYywKLQkuZ29faW52YWwgPSBtZXRhX2dvX2ludmFsLAorCS5nb194bW90ZV90aCA9IHJncnBfZ29fc3luYywKKwkuZ29faW52YWwgPSByZ3JwX2dvX2ludmFsLAogCS5nb19kZW1vdGVfb2sgPSByZ3JwX2dvX2RlbW90ZV9vaywKIAkuZ29fbG9jayA9IHJncnBfZ29fbG9jaywKIAkuZ29fdW5sb2NrID0gcmdycF9nb191bmxvY2ssCkBAIC00NDgsNyArNDI5LDYgQEAKIH07CiAKIGNvbnN0IHN0cnVjdCBnZnMyX2dsb2NrX29wZXJhdGlvbnMgZ2ZzMl9xdW90YV9nbG9wcyA9IHsKLQkuZ29fZGVtb3RlX29rID0gcXVvdGFfZ29fZGVtb3RlX29rLAogCS5nb190eXBlID0gTE1fVFlQRV9RVU9UQSwKIH07CiAKQEAgLTQ1NiwzICs0MzYsMTUgQEAKIAkuZ29fdHlwZSA9IExNX1RZUEVfSk9VUk5BTCwKIH07CiAKK2NvbnN0IHN0cnVjdCBnZnMyX2dsb2NrX29wZXJhdGlvbnMgKmdmczJfZ2xvcHNfbGlzdFtdID0geworCVtMTV9UWVBFX01FVEFdID0gJmdmczJfbWV0YV9nbG9wcywKKwlbTE1fVFlQRV9JTk9ERV0gPSAmZ2ZzMl9pbm9kZV9nbG9wcywKKwlbTE1fVFlQRV9SR1JQXSA9ICZnZnMyX3JncnBfZ2xvcHMsCisJW0xNX1RZUEVfTk9ORElTS10gPSAmZ2ZzMl90cmFuc19nbG9wcywKKwlbTE1fVFlQRV9JT1BFTl0gPSAmZ2ZzMl9pb3Blbl9nbG9wcywKKwlbTE1fVFlQRV9GTE9DS10gPSAmZ2ZzMl9mbG9ja19nbG9wcywKKwlbTE1fVFlQRV9OT05ESVNLXSA9ICZnZnMyX25vbmRpc2tfZ2xvcHMsCisJW0xNX1RZUEVfUVVPVEFdID0gJmdmczJfcXVvdGFfZ2xvcHMsCisJW0xNX1RZUEVfSk9VUk5BTF0gPSAmZ2ZzMl9qb3VybmFsX2dsb3BzLAorfTsKKwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9nbG9wcy5oIGIvZnMvZ2ZzMi9nbG9wcy5oCmluZGV4IGExZDliNWIuLmIzYWEyZTMgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvZ2xvcHMuaAorKysgYi9mcy9nZnMyL2dsb3BzLmgKQEAgLTIxLDUgKzIxLDYgQEAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZ2ZzMl9nbG9ja19vcGVyYXRpb25zIGdmczJfbm9uZGlza19nbG9wczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZ2ZzMl9nbG9ja19vcGVyYXRpb25zIGdmczJfcXVvdGFfZ2xvcHM7CiBleHRlcm4gY29uc3Qgc3RydWN0IGdmczJfZ2xvY2tfb3BlcmF0aW9ucyBnZnMyX2pvdXJuYWxfZ2xvcHM7CitleHRlcm4gY29uc3Qgc3RydWN0IGdmczJfZ2xvY2tfb3BlcmF0aW9ucyAqZ2ZzMl9nbG9wc19saXN0W107CiAKICNlbmRpZiAvKiBfX0dMT1BTX0RPVF9IX18gKi8KZGlmZiAtLWdpdCBhL2ZzL2dmczIvaW5jb3JlLmggYi9mcy9nZnMyL2luY29yZS5oCmluZGV4IDYwODg0OWQuLjM5OWQxYjkgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvaW5jb3JlLmgKKysrIGIvZnMvZ2ZzMi9pbmNvcmUuaApAQCAtMTIsNiArMTIsOCBAQAogCiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC9kbG0uaD4KKyNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgogCiAjZGVmaW5lIERJT19XQUlUCTB4MDAwMDAwMTAKICNkZWZpbmUgRElPX01FVEFEQVRBCTB4MDAwMDAwMjAKQEAgLTI2LDYgKzI4LDcgQEAKIHN0cnVjdCBnZnMyX2FpbDsKIHN0cnVjdCBnZnMyX2pkZXNjOwogc3RydWN0IGdmczJfc2JkOworc3RydWN0IGxtX2xvY2tvcHM7CiAKIHR5cGVkZWYgdm9pZCAoKmdmczJfZ2xvcF9iaF90KSAoc3RydWN0IGdmczJfZ2xvY2sgKmdsLCB1bnNpZ25lZCBpbnQgcmV0KTsKIApAQCAtMTIxLDYgKzEyNCwyOCBAQAogCXN0cnVjdCBsaXN0X2hlYWQgYmRfYWlsX2dsX2xpc3Q7CiB9OwogCisvKgorICogSW50ZXJuYWxseSwgd2UgcHJlZml4IHRoaW5ncyB3aXRoIGdkbG1fIGFuZCBHRExNXyAoZm9yIGdmcy1kbG0pIHNpbmNlIGEKKyAqIHByZWZpeCBvZiBsb2NrX2RsbV8gZ2V0cyBhd2t3YXJkLgorICovCisKKyNkZWZpbmUgR0RMTV9TVFJOQU1FX0JZVEVTCTI1CisjZGVmaW5lIEdETE1fTFZCX1NJWkUJCTMyCisKK2VudW0geworCURGTF9CTE9DS19MT0NLUwkJPSAwLAorfTsKKworc3RydWN0IGxtX2xvY2tuYW1lIHsKKwl1NjQgbG5fbnVtYmVyOworCXVuc2lnbmVkIGludCBsbl90eXBlOworfTsKKworI2RlZmluZSBsbV9uYW1lX2VxdWFsKG5hbWUxLCBuYW1lMikgXAorICAgICAgICAoKChuYW1lMSktPmxuX251bWJlciA9PSAobmFtZTIpLT5sbl9udW1iZXIpICYmIFwKKyAgICAgICAgICgobmFtZTEpLT5sbl90eXBlID09IChuYW1lMiktPmxuX3R5cGUpKQorCisKIHN0cnVjdCBnZnMyX2dsb2NrX29wZXJhdGlvbnMgewogCXZvaWQgKCpnb194bW90ZV90aCkgKHN0cnVjdCBnZnMyX2dsb2NrICpnbCk7CiAJaW50ICgqZ29feG1vdGVfYmgpIChzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wsIHN0cnVjdCBnZnMyX2hvbGRlciAqZ2gpOwpAQCAtMTYyLDYgKzE4Nyw4IEBACiAJR0xGX0xGTFVTSAkJCT0gNywKIAlHTEZfSU5WQUxJREFURV9JTl9QUk9HUkVTUwk9IDgsCiAJR0xGX1JFUExZX1BFTkRJTkcJCT0gOSwKKwlHTEZfSU5JVElBTAkJCT0gMTAsCisJR0xGX0ZST1pFTgkJCT0gMTEsCiB9OwogCiBzdHJ1Y3QgZ2ZzMl9nbG9jayB7CkBAIC0xNzYsMTYgKzIwMywxNSBAQAogCXVuc2lnbmVkIGludCBnbF90YXJnZXQ7CiAJdW5zaWduZWQgaW50IGdsX3JlcGx5OwogCXVuc2lnbmVkIGludCBnbF9oYXNoOworCXVuc2lnbmVkIGludCBnbF9yZXE7CiAJdW5zaWduZWQgaW50IGdsX2RlbW90ZV9zdGF0ZTsgLyogc3RhdGUgcmVxdWVzdGVkIGJ5IHJlbW90ZSBub2RlICovCiAJdW5zaWduZWQgbG9uZyBnbF9kZW1vdGVfdGltZTsgLyogdGltZSBvZiBmaXJzdCBkZW1vdGUgcmVxdWVzdCAqLwogCXN0cnVjdCBsaXN0X2hlYWQgZ2xfaG9sZGVyczsKIAogCWNvbnN0IHN0cnVjdCBnZnMyX2dsb2NrX29wZXJhdGlvbnMgKmdsX29wczsKLQl2b2lkICpnbF9sb2NrOwotCWNoYXIgKmdsX2x2YjsKLQlhdG9taWNfdCBnbF9sdmJfY291bnQ7Ci0KLQl1bnNpZ25lZCBsb25nIGdsX3N0YW1wOworCWNoYXIgZ2xfc3RybmFtZVtHRExNX1NUUk5BTUVfQllURVNdOworCXN0cnVjdCBkbG1fbGtzYiBnbF9sa3NiOworCWNoYXIgZ2xfbHZiWzMyXTsKIAl1bnNpZ25lZCBsb25nIGdsX3RjaGFuZ2U7CiAJdm9pZCAqZ2xfb2JqZWN0OwogCkBAIC0yODMsNyArMzA5LDkgQEAKIAogc3RydWN0IGdmczJfcXVvdGFfZGF0YSB7CiAJc3RydWN0IGxpc3RfaGVhZCBxZF9saXN0OwotCXVuc2lnbmVkIGludCBxZF9jb3VudDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHFkX3JlY2xhaW07CisKKwlhdG9taWNfdCBxZF9jb3VudDsKIAogCXUzMiBxZF9pZDsKIAl1bnNpZ25lZCBsb25nIHFkX2ZsYWdzOwkJLyogUURGXy4uLiAqLwpAQCAtMzAzLDcgKzMzMSw2IEBACiAKIAl1NjQgcWRfc3luY19nZW47CiAJdW5zaWduZWQgbG9uZyBxZF9sYXN0X3dhcm47Ci0JdW5zaWduZWQgbG9uZyBxZF9sYXN0X3RvdWNoZWQ7CiB9OwogCiBzdHJ1Y3QgZ2ZzMl90cmFucyB7CkBAIC0zOTAsNyArNDE3LDcgQEAKIAl1bnNpZ25lZCBpbnQgYXJfc3VpZGRpcjoxOwkJLyogc3VpZGRpciBzdXBwb3J0ICovCiAJdW5zaWduZWQgaW50IGFyX2RhdGE6MjsJCQkvKiBvcmRlcmVkL3dyaXRlYmFjayAqLwogCXVuc2lnbmVkIGludCBhcl9tZXRhOjE7CQkJLyogbW91bnQgbWV0YWZzICovCi0JdW5zaWduZWQgaW50IGFyX251bV9nbG9ja2Q7CQkvKiBOdW1iZXIgb2YgZ2xvY2tkIHRocmVhZHMgKi8KKwl1bnNpZ25lZCBpbnQgYXJfZGlzY2FyZDoxOwkJLyogZGlzY2FyZCByZXF1ZXN0cyAqLwogfTsKIAogc3RydWN0IGdmczJfdHVuZSB7CkBAIC00MDYsNyArNDMzLDYgQEAKIAl1bnNpZ25lZCBpbnQgZ3RfcXVvdGFfd2Fybl9wZXJpb2Q7IC8qIFNlY3MgYmV0d2VlbiBxdW90YSB3YXJuIG1zZ3MgKi8KIAl1bnNpZ25lZCBpbnQgZ3RfcXVvdGFfc2NhbGVfbnVtOyAvKiBOdW1lcmF0b3IgKi8KIAl1bnNpZ25lZCBpbnQgZ3RfcXVvdGFfc2NhbGVfZGVuOyAvKiBEZW5vbWluYXRvciAqLwotCXVuc2lnbmVkIGludCBndF9xdW90YV9jYWNoZV9zZWNzOwogCXVuc2lnbmVkIGludCBndF9xdW90YV9xdWFudHVtOyAvKiBTZWNzIGJldHdlZW4gc3luY3MgdG8gcXVvdGEgZmlsZSAqLwogCXVuc2lnbmVkIGludCBndF9uZXdfZmlsZXNfamRhdGE7CiAJdW5zaWduZWQgaW50IGd0X21heF9yZWFkYWhlYWQ7IC8qIE1heCBieXRlcyB0byByZWFkLWFoZWFkIGZyb20gZGlzayAqLwpAQCAtNDQ1LDYgKzQ3MSwzMSBAQAogCiAJY2hhciBzYl9sb2NrcHJvdG9bR0ZTMl9MT0NLTkFNRV9MRU5dOwogCWNoYXIgc2JfbG9ja3RhYmxlW0dGUzJfTE9DS05BTUVfTEVOXTsKKwl1OCBzYl91dWlkWzE2XTsKK307CisKKy8qCisgKiBsbV9tb3VudCgpIHJldHVybiB2YWx1ZXMKKyAqCisgKiBsc19qaWQgLSB0aGUgam91cm5hbCBJRCB0aGlzIG5vZGUgc2hvdWxkIHVzZQorICogbHNfZmlyc3QgLSB0aGlzIG5vZGUgaXMgdGhlIGZpcnN0IHRvIG1vdW50IHRoZSBmaWxlIHN5c3RlbQorICogbHNfbG9ja3NwYWNlIC0gbG9jayBtb2R1bGUncyBjb250ZXh0IGZvciB0aGlzIGZpbGUgc3lzdGVtCisgKiBsc19vcHMgLSBsb2NrIG1vZHVsZSdzIGZ1bmN0aW9ucworICovCisKK3N0cnVjdCBsbV9sb2Nrc3RydWN0IHsKKwl1MzIgbHNfaWQ7CisJdW5zaWduZWQgaW50IGxzX2ppZDsKKwl1bnNpZ25lZCBpbnQgbHNfZmlyc3Q7CisJdW5zaWduZWQgaW50IGxzX2ZpcnN0X2RvbmU7CisJdW5zaWduZWQgaW50IGxzX25vZGlyOworCWNvbnN0IHN0cnVjdCBsbV9sb2Nrb3BzICpsc19vcHM7CisJdW5zaWduZWQgbG9uZyBsc19mbGFnczsKKwlkbG1fbG9ja3NwYWNlX3QgKmxzX2RsbTsKKworCWludCBsc19yZWNvdmVyX2ppZDsKKwlpbnQgbHNfcmVjb3Zlcl9qaWRfZG9uZTsKKwlpbnQgbHNfcmVjb3Zlcl9qaWRfc3RhdHVzOwogfTsKIAogc3RydWN0IGdmczJfc2JkIHsKQEAgLTUyMCw3ICs1NzEsNiBAQAogCXNwaW5sb2NrX3Qgc2RfamluZGV4X3NwaW47CiAJc3RydWN0IG11dGV4IHNkX2ppbmRleF9tdXRleDsKIAl1bnNpZ25lZCBpbnQgc2Rfam91cm5hbHM7Ci0JdW5zaWduZWQgbG9uZyBzZF9qaW5kZXhfcmVmcmVzaF90aW1lOwogCiAJc3RydWN0IGdmczJfamRlc2MgKnNkX2pkZXNjOwogCXN0cnVjdCBnZnMyX2hvbGRlciBzZF9qb3VybmFsX2doOwpAQCAtNTQwLDcgKzU5MCw2IEBACiAKIAlzdHJ1Y3QgbGlzdF9oZWFkIHNkX3F1b3RhX2xpc3Q7CiAJYXRvbWljX3Qgc2RfcXVvdGFfY291bnQ7Ci0Jc3BpbmxvY2tfdCBzZF9xdW90YV9zcGluOwogCXN0cnVjdCBtdXRleCBzZF9xdW90YV9tdXRleDsKIAl3YWl0X3F1ZXVlX2hlYWRfdCBzZF9xdW90YV93YWl0OwogCXN0cnVjdCBsaXN0X2hlYWQgc2RfdHJ1bmNfbGlzdDsKZGlmZiAtLWdpdCBhL2ZzL2dmczIvaW5vZGUuYyBiL2ZzL2dmczIvaW5vZGUuYwppbmRleCAzYjg3YzE4Li43YjI3N2Q0NCAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9pbm9kZS5jCisrKyBiL2ZzL2dmczIvaW5vZGUuYwpAQCAtMTYsNyArMTYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+Ci0jaW5jbHVkZSA8bGludXgvbG1faW50ZXJmYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAKQEAgLTEzNywxNiArMTM2LDE2IEBACiAKIAlpZiAoU19JU1JFRyhtb2RlKSkgewogCQlpbm9kZS0+aV9vcCA9ICZnZnMyX2ZpbGVfaW9wczsKLQkJaWYgKHNkcC0+c2RfYXJncy5hcl9sb2NhbGZsb2NrcykKLQkJCWlub2RlLT5pX2ZvcCA9ICZnZnMyX2ZpbGVfZm9wc19ub2xvY2s7CisJCWlmIChnZnMyX2xvY2FsZmxvY2tzKHNkcCkpCisJCQlpbm9kZS0+aV9mb3AgPSBnZnMyX2ZpbGVfZm9wc19ub2xvY2s7CiAJCWVsc2UKLQkJCWlub2RlLT5pX2ZvcCA9ICZnZnMyX2ZpbGVfZm9wczsKKwkJCWlub2RlLT5pX2ZvcCA9IGdmczJfZmlsZV9mb3BzOwogCX0gZWxzZSBpZiAoU19JU0RJUihtb2RlKSkgewogCQlpbm9kZS0+aV9vcCA9ICZnZnMyX2Rpcl9pb3BzOwotCQlpZiAoc2RwLT5zZF9hcmdzLmFyX2xvY2FsZmxvY2tzKQotCQkJaW5vZGUtPmlfZm9wID0gJmdmczJfZGlyX2ZvcHNfbm9sb2NrOworCQlpZiAoZ2ZzMl9sb2NhbGZsb2NrcyhzZHApKQorCQkJaW5vZGUtPmlfZm9wID0gZ2ZzMl9kaXJfZm9wc19ub2xvY2s7CiAJCWVsc2UKLQkJCWlub2RlLT5pX2ZvcCA9ICZnZnMyX2Rpcl9mb3BzOworCQkJaW5vZGUtPmlfZm9wID0gZ2ZzMl9kaXJfZm9wczsKIAl9IGVsc2UgaWYgKFNfSVNMTksobW9kZSkpIHsKIAkJaW5vZGUtPmlfb3AgPSAmZ2ZzMl9zeW1saW5rX2lvcHM7CiAJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2ZzL2dmczIvaW5vZGUuaCBiL2ZzL2dmczIvaW5vZGUuaAppbmRleCBkNTMyOTM2Li5kY2E0ZmVlIDEwMDY0NAotLS0gYS9mcy9nZnMyL2lub2RlLmgKKysrIGIvZnMvZ2ZzMi9pbm9kZS5oCkBAIC0xMDEsMTIgKzEwMSwyNiBAQAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGdmczJfZmlsZV9pb3BzOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGdmczJfZGlyX2lvcHM7CiBleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgZ2ZzMl9zeW1saW5rX2lvcHM7Ci1leHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBnZnMyX2ZpbGVfZm9wczsKLWV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGdmczJfZGlyX2ZvcHM7Ci1leHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBnZnMyX2ZpbGVfZm9wc19ub2xvY2s7Ci1leHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBnZnMyX2Rpcl9mb3BzX25vbG9jazsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpnZnMyX2ZpbGVfZm9wc19ub2xvY2s7CitleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZ2ZzMl9kaXJfZm9wc19ub2xvY2s7CiAKIGV4dGVybiB2b2lkIGdmczJfc2V0X2lub2RlX2ZsYWdzKHN0cnVjdCBpbm9kZSAqaW5vZGUpOworIAorI2lmZGVmIENPTkZJR19HRlMyX0ZTX0xPQ0tJTkdfRExNCitleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZ2ZzMl9maWxlX2ZvcHM7CitleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZ2ZzMl9kaXJfZm9wczsKK3N0YXRpYyBpbmxpbmUgaW50IGdmczJfbG9jYWxmbG9ja3MoY29uc3Qgc3RydWN0IGdmczJfc2JkICpzZHApCit7CisJcmV0dXJuIHNkcC0+c2RfYXJncy5hcl9sb2NhbGZsb2NrczsKK30KKyNlbHNlIC8qIFNpbmdsZSBub2RlIG9ubHkgKi8KKyNkZWZpbmUgZ2ZzMl9maWxlX2ZvcHMgTlVMTAorI2RlZmluZSBnZnMyX2Rpcl9mb3BzIE5VTEwKK3N0YXRpYyBpbmxpbmUgaW50IGdmczJfbG9jYWxmbG9ja3MoY29uc3Qgc3RydWN0IGdmczJfc2JkICpzZHApCit7CisJcmV0dXJuIDE7Cit9CisjZW5kaWYgLyogQ09ORklHX0dGUzJfRlNfTE9DS0lOR19ETE0gKi8KIAogI2VuZGlmIC8qIF9fSU5PREVfRE9UX0hfXyAqLwogCmRpZmYgLS1naXQgYS9mcy9nZnMyL2xvY2tfZGxtLmMgYi9mcy9nZnMyL2xvY2tfZGxtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZkZjk4OAotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2dmczIvbG9ja19kbG0uYwpAQCAtMCwwICsxLDI0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgU2lzdGluYSBTb2Z0d2FyZSwgSW5jLiAgMTk5Ny0yMDAzIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOSBSZWQgSGF0LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29weXJpZ2h0ZWQgbWF0ZXJpYWwgaXMgbWFkZSBhdmFpbGFibGUgdG8gYW55b25lIHdpc2hpbmcgdG8gdXNlLAorICogbW9kaWZ5LCBjb3B5LCBvciByZWRpc3RyaWJ1dGUgaXQgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKKyAqIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZGxtLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgorCisjaW5jbHVkZSAiaW5jb3JlLmgiCisjaW5jbHVkZSAiZ2xvY2suaCIKKyNpbmNsdWRlICJ1dGlsLmgiCisKKworc3RhdGljIHZvaWQgZ2RsbV9hc3Qodm9pZCAqYXJnKQoreworCXN0cnVjdCBnZnMyX2dsb2NrICpnbCA9IGFyZzsKKwl1bnNpZ25lZCByZXQgPSBnbC0+Z2xfc3RhdGU7CisKKwlCVUdfT04oZ2wtPmdsX2xrc2Iuc2JfZmxhZ3MgJiBETE1fU0JGX0RFTU9URUQpOworCisJaWYgKGdsLT5nbF9sa3NiLnNiX2ZsYWdzICYgRExNX1NCRl9WQUxOT1RWQUxJRCkKKwkJbWVtc2V0KGdsLT5nbF9sdmIsIDAsIEdETE1fTFZCX1NJWkUpOworCisJc3dpdGNoIChnbC0+Z2xfbGtzYi5zYl9zdGF0dXMpIHsKKwljYXNlIC1ETE1fRVVOTE9DSzogLyogVW5sb2NrZWQsIHNvIGdsb2NrIGNhbiBiZSBmcmVlZCAqLworCQlrbWVtX2NhY2hlX2ZyZWUoZ2ZzMl9nbG9ja19jYWNoZXAsIGdsKTsKKwkJcmV0dXJuOworCWNhc2UgLURMTV9FQ0FOQ0VMOiAvKiBDYW5jZWwgd2hpbGUgZ2V0dGluZyBsb2NrICovCisJCXJldCB8PSBMTV9PVVRfQ0FOQ0VMRUQ7CisJCWdvdG8gb3V0OworCWNhc2UgLUVBR0FJTjogLyogVHJ5IGxvY2sgZmFpbHMgKi8KKwkJZ290byBvdXQ7CisJY2FzZSAtRUlOVkFMOiAvKiBJbnZhbGlkICovCisJY2FzZSAtRU5PTUVNOiAvKiBPdXQgb2YgbWVtb3J5ICovCisJCXJldCB8PSBMTV9PVVRfRVJST1I7CisJCWdvdG8gb3V0OworCWNhc2UgMDogLyogU3VjY2VzcyAqLworCQlicmVhazsKKwlkZWZhdWx0OiAvKiBTb21ldGhpbmcgdW5leHBlY3RlZCAqLworCQlCVUcoKTsKKwl9CisKKwlyZXQgPSBnbC0+Z2xfcmVxOworCWlmIChnbC0+Z2xfbGtzYi5zYl9mbGFncyAmIERMTV9TQkZfQUxUTU9ERSkgeworCQlpZiAoZ2wtPmdsX3JlcSA9PSBMTV9TVF9TSEFSRUQpCisJCQlyZXQgPSBMTV9TVF9ERUZFUlJFRDsKKwkJZWxzZSBpZiAoZ2wtPmdsX3JlcSA9PSBMTV9TVF9ERUZFUlJFRCkKKwkJCXJldCA9IExNX1NUX1NIQVJFRDsKKwkJZWxzZQorCQkJQlVHKCk7CisJfQorCisJc2V0X2JpdChHTEZfSU5JVElBTCwgJmdsLT5nbF9mbGFncyk7CisJZ2ZzMl9nbG9ja19jb21wbGV0ZShnbCwgcmV0KTsKKwlyZXR1cm47CitvdXQ6CisJaWYgKCF0ZXN0X2JpdChHTEZfSU5JVElBTCwgJmdsLT5nbF9mbGFncykpCisJCWdsLT5nbF9sa3NiLnNiX2xraWQgPSAwOworCWdmczJfZ2xvY2tfY29tcGxldGUoZ2wsIHJldCk7Cit9CisKK3N0YXRpYyB2b2lkIGdkbG1fYmFzdCh2b2lkICphcmcsIGludCBtb2RlKQoreworCXN0cnVjdCBnZnMyX2dsb2NrICpnbCA9IGFyZzsKKworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgRExNX0xPQ0tfRVg6CisJCWdmczJfZ2xvY2tfY2IoZ2wsIExNX1NUX1VOTE9DS0VEKTsKKwkJYnJlYWs7CisJY2FzZSBETE1fTE9DS19DVzoKKwkJZ2ZzMl9nbG9ja19jYihnbCwgTE1fU1RfREVGRVJSRUQpOworCQlicmVhazsKKwljYXNlIERMTV9MT0NLX1BSOgorCQlnZnMyX2dsb2NrX2NiKGdsLCBMTV9TVF9TSEFSRUQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIgInVua25vd24gYmFzdCBtb2RlICVkIiwgbW9kZSk7CisJCUJVRygpOworCX0KK30KKworLyogY29udmVydCBnZnMgbG9jay1zdGF0ZSB0byBkbG0gbG9jay1tb2RlICovCisKK3N0YXRpYyBpbnQgbWFrZV9tb2RlKGNvbnN0IHVuc2lnbmVkIGludCBsbXN0YXRlKQoreworCXN3aXRjaCAobG1zdGF0ZSkgeworCWNhc2UgTE1fU1RfVU5MT0NLRUQ6CisJCXJldHVybiBETE1fTE9DS19OTDsKKwljYXNlIExNX1NUX0VYQ0xVU0lWRToKKwkJcmV0dXJuIERMTV9MT0NLX0VYOworCWNhc2UgTE1fU1RfREVGRVJSRUQ6CisJCXJldHVybiBETE1fTE9DS19DVzsKKwljYXNlIExNX1NUX1NIQVJFRDoKKwkJcmV0dXJuIERMTV9MT0NLX1BSOworCX0KKwlwcmludGsoS0VSTl9FUlIgInVua25vd24gTE0gc3RhdGUgJWQiLCBsbXN0YXRlKTsKKwlCVUcoKTsKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyB1MzIgbWFrZV9mbGFncyhjb25zdCB1MzIgbGtpZCwgY29uc3QgdW5zaWduZWQgaW50IGdmc19mbGFncywKKwkJICAgICAgY29uc3QgaW50IHJlcSkKK3sKKwl1MzIgbGtmID0gMDsKKworCWlmIChnZnNfZmxhZ3MgJiBMTV9GTEFHX1RSWSkKKwkJbGtmIHw9IERMTV9MS0ZfTk9RVUVVRTsKKworCWlmIChnZnNfZmxhZ3MgJiBMTV9GTEFHX1RSWV8xQ0IpIHsKKwkJbGtmIHw9IERMTV9MS0ZfTk9RVUVVRTsKKwkJbGtmIHw9IERMTV9MS0ZfTk9RVUVVRUJBU1Q7CisJfQorCisJaWYgKGdmc19mbGFncyAmIExNX0ZMQUdfUFJJT1JJVFkpIHsKKwkJbGtmIHw9IERMTV9MS0ZfTk9PUkRFUjsKKwkJbGtmIHw9IERMTV9MS0ZfSEVBRFFVRTsKKwl9CisKKwlpZiAoZ2ZzX2ZsYWdzICYgTE1fRkxBR19BTlkpIHsKKwkJaWYgKHJlcSA9PSBETE1fTE9DS19QUikKKwkJCWxrZiB8PSBETE1fTEtGX0FMVENXOworCQllbHNlIGlmIChyZXEgPT0gRExNX0xPQ0tfQ1cpCisJCQlsa2YgfD0gRExNX0xLRl9BTFRQUjsKKwkJZWxzZQorCQkJQlVHKCk7CisJfQorCisJaWYgKGxraWQgIT0gMCkgCisJCWxrZiB8PSBETE1fTEtGX0NPTlZFUlQ7CisKKwlsa2YgfD0gRExNX0xLRl9WQUxCTEs7CisKKwlyZXR1cm4gbGtmOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGdkbG1fbG9jayhzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgcmVxX3N0YXRlLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IGxtX2xvY2tzdHJ1Y3QgKmxzID0gJmdsLT5nbF9zYmQtPnNkX2xvY2tzdHJ1Y3Q7CisJaW50IGVycm9yOworCWludCByZXE7CisJdTMyIGxrZjsKKworCWdsLT5nbF9yZXEgPSByZXFfc3RhdGU7CisJcmVxID0gbWFrZV9tb2RlKHJlcV9zdGF0ZSk7CisJbGtmID0gbWFrZV9mbGFncyhnbC0+Z2xfbGtzYi5zYl9sa2lkLCBmbGFncywgcmVxKTsKKworCS8qCisJICogU3VibWl0IHRoZSBhY3R1YWwgbG9jayByZXF1ZXN0LgorCSAqLworCisJZXJyb3IgPSBkbG1fbG9jayhscy0+bHNfZGxtLCByZXEsICZnbC0+Z2xfbGtzYiwgbGtmLCBnbC0+Z2xfc3RybmFtZSwKKwkJCSBHRExNX1NUUk5BTUVfQllURVMgLSAxLCAwLCBnZGxtX2FzdCwgZ2wsIGdkbG1fYmFzdCk7CisJaWYgKGVycm9yID09IC1FQUdBSU4pCisJCXJldHVybiAwOworCWlmIChlcnJvcikKKwkJcmV0dXJuIExNX09VVF9FUlJPUjsKKwlyZXR1cm4gTE1fT1VUX0FTWU5DOworfQorCitzdGF0aWMgdm9pZCBnZGxtX3B1dF9sb2NrKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAsIHZvaWQgKnB0cikKK3sKKwlzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wgPSBwdHI7CisJc3RydWN0IGxtX2xvY2tzdHJ1Y3QgKmxzID0gJmdsLT5nbF9zYmQtPnNkX2xvY2tzdHJ1Y3Q7CisJaW50IGVycm9yOworCisJaWYgKGdsLT5nbF9sa3NiLnNiX2xraWQgPT0gMCkgeworCQlrbWVtX2NhY2hlX2ZyZWUoY2FjaGVwLCBnbCk7CisJCXJldHVybjsKKwl9CisKKwllcnJvciA9IGRsbV91bmxvY2sobHMtPmxzX2RsbSwgZ2wtPmdsX2xrc2Iuc2JfbGtpZCwgRExNX0xLRl9WQUxCTEssCisJCQkgICBOVUxMLCBnbCk7CisJaWYgKGVycm9yKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZ2RsbV91bmxvY2sgJXgsJWxseCBlcnI9JWRcbiIsCisJCSAgICAgICBnbC0+Z2xfbmFtZS5sbl90eXBlLAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylnbC0+Z2xfbmFtZS5sbl9udW1iZXIsIGVycm9yKTsKKwkJcmV0dXJuOworCX0KK30KKworc3RhdGljIHZvaWQgZ2RsbV9jYW5jZWwoc3RydWN0IGdmczJfZ2xvY2sgKmdsKQoreworCXN0cnVjdCBsbV9sb2Nrc3RydWN0ICpscyA9ICZnbC0+Z2xfc2JkLT5zZF9sb2Nrc3RydWN0OworCWRsbV91bmxvY2sobHMtPmxzX2RsbSwgZ2wtPmdsX2xrc2Iuc2JfbGtpZCwgRExNX0xLRl9DQU5DRUwsIE5VTEwsIGdsKTsKK30KKworc3RhdGljIGludCBnZGxtX21vdW50KHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBjb25zdCBjaGFyICpmc25hbWUpCit7CisJc3RydWN0IGxtX2xvY2tzdHJ1Y3QgKmxzID0gJnNkcC0+c2RfbG9ja3N0cnVjdDsKKwlpbnQgZXJyb3I7CisKKwlpZiAoZnNuYW1lID09IE5VTEwpIHsKKwkJZnNfaW5mbyhzZHAsICJubyBmc25hbWUgZm91bmRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwllcnJvciA9IGRsbV9uZXdfbG9ja3NwYWNlKGZzbmFtZSwgc3RybGVuKGZzbmFtZSksICZscy0+bHNfZGxtLAorCQkJCSAgRExNX0xTRkxfRlMgfCBETE1fTFNGTF9ORVdFWENMIHwKKwkJCQkgIChscy0+bHNfbm9kaXIgPyBETE1fTFNGTF9OT0RJUiA6IDApLAorCQkJCSAgR0RMTV9MVkJfU0laRSk7CisJaWYgKGVycm9yKQorCQlwcmludGsoS0VSTl9FUlIgImRsbV9uZXdfbG9ja3NwYWNlIGVycm9yICVkIiwgZXJyb3IpOworCisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgdm9pZCBnZGxtX3VubW91bnQoc3RydWN0IGdmczJfc2JkICpzZHApCit7CisJc3RydWN0IGxtX2xvY2tzdHJ1Y3QgKmxzID0gJnNkcC0+c2RfbG9ja3N0cnVjdDsKKworCWlmIChscy0+bHNfZGxtKSB7CisJCWRsbV9yZWxlYXNlX2xvY2tzcGFjZShscy0+bHNfZGxtLCAyKTsKKwkJbHMtPmxzX2RsbSA9IE5VTEw7CisJfQorfQorCitzdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCBkbG1fdG9rZW5zID0geworCXsgT3B0X2ppZCwgImppZD0lZCJ9LAorCXsgT3B0X2lkLCAiaWQ9JWQifSwKKwl7IE9wdF9maXJzdCwgImZpcnN0PSVkIn0sCisJeyBPcHRfbm9kaXIsICJub2Rpcj0lZCJ9LAorCXsgT3B0X2VyciwgTlVMTCB9LAorfTsKKworY29uc3Qgc3RydWN0IGxtX2xvY2tvcHMgZ2ZzMl9kbG1fb3BzID0geworCS5sbV9wcm90b19uYW1lID0gImxvY2tfZGxtIiwKKwkubG1fbW91bnQgPSBnZGxtX21vdW50LAorCS5sbV91bm1vdW50ID0gZ2RsbV91bm1vdW50LAorCS5sbV9wdXRfbG9jayA9IGdkbG1fcHV0X2xvY2ssCisJLmxtX2xvY2sgPSBnZGxtX2xvY2ssCisJLmxtX2NhbmNlbCA9IGdkbG1fY2FuY2VsLAorCS5sbV90b2tlbnMgPSAmZGxtX3Rva2VucywKK307CisKZGlmZiAtLWdpdCBhL2ZzL2dmczIvbG9ja2luZy5jIGIvZnMvZ2ZzMi9sb2NraW5nLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyMzI0M2EuLjAwMDAwMDAKLS0tIGEvZnMvZ2ZzMi9sb2NraW5nLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgU2lzdGluYSBTb2Z0d2FyZSwgSW5jLiAgMTk5Ny0yMDAzIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNiBSZWQgSGF0LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29weXJpZ2h0ZWQgbWF0ZXJpYWwgaXMgbWFkZSBhdmFpbGFibGUgdG8gYW55b25lIHdpc2hpbmcgdG8gdXNlLAotICogbW9kaWZ5LCBjb3B5LCBvciByZWRpc3RyaWJ1dGUgaXQgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKLSAqIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvd2FpdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgva21vZC5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9sbV9pbnRlcmZhY2UuaD4KLQotc3RydWN0IGxtaF93cmFwcGVyIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGx3X2xpc3Q7Ci0JY29uc3Qgc3RydWN0IGxtX2xvY2tvcHMgKmx3X29wczsKLX07Ci0KLXN0YXRpYyBpbnQgbm9sb2NrX21vdW50KGNoYXIgKnRhYmxlX25hbWUsIGNoYXIgKmhvc3RfZGF0YSwKLQkJCWxtX2NhbGxiYWNrX3QgY2IsIHZvaWQgKmNiX2RhdGEsCi0JCQl1bnNpZ25lZCBpbnQgbWluX2x2Yl9zaXplLCBpbnQgZmxhZ3MsCi0JCQlzdHJ1Y3QgbG1fbG9ja3N0cnVjdCAqbG9ja3N0cnVjdCwKLQkJCXN0cnVjdCBrb2JqZWN0ICpmc2tvYmopOwotCi0vKiBMaXN0IG9mIHJlZ2lzdGVyZWQgbG93LWxldmVsIGxvY2tpbmcgcHJvdG9jb2xzLiAgQSBmaWxlIHN5c3RlbSBzZWxlY3RzIG9uZQotICAgb2YgdGhlbSBieSBuYW1lIGF0IG1vdW50IHRpbWUsIGUuZy4gbG9ja19ub2xvY2ssIGxvY2tfZGxtLiAqLwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGxtX2xvY2tvcHMgbm9sb2NrX29wcyA9IHsKLQkubG1fcHJvdG9fbmFtZSA9ICJsb2NrX25vbG9jayIsCi0JLmxtX21vdW50ID0gbm9sb2NrX21vdW50LAotfTsKLQotc3RhdGljIHN0cnVjdCBsbWhfd3JhcHBlciBub2xvY2tfcHJvdG8gID0gewotCS5sd19saXN0ID0gTElTVF9IRUFEX0lOSVQobm9sb2NrX3Byb3RvLmx3X2xpc3QpLAotCS5sd19vcHMgPSAmbm9sb2NrX29wcywKLX07Ci0KLXN0YXRpYyBMSVNUX0hFQUQobG1oX2xpc3QpOwotc3RhdGljIERFRklORV9NVVRFWChsbWhfbG9jayk7Ci0KLXN0YXRpYyBpbnQgbm9sb2NrX21vdW50KGNoYXIgKnRhYmxlX25hbWUsIGNoYXIgKmhvc3RfZGF0YSwKLQkJCWxtX2NhbGxiYWNrX3QgY2IsIHZvaWQgKmNiX2RhdGEsCi0JCQl1bnNpZ25lZCBpbnQgbWluX2x2Yl9zaXplLCBpbnQgZmxhZ3MsCi0JCQlzdHJ1Y3QgbG1fbG9ja3N0cnVjdCAqbG9ja3N0cnVjdCwKLQkJCXN0cnVjdCBrb2JqZWN0ICpmc2tvYmopCi17Ci0JY2hhciAqYzsKLQl1bnNpZ25lZCBpbnQgamlkOwotCi0JYyA9IHN0cnN0cihob3N0X2RhdGEsICJqaWQ9Iik7Ci0JaWYgKCFjKQotCQlqaWQgPSAwOwotCWVsc2UgewotCQljICs9IDQ7Ci0JCXNzY2FuZihjLCAiJXUiLCAmamlkKTsKLQl9Ci0KLQlsb2Nrc3RydWN0LT5sc19qaWQgPSBqaWQ7Ci0JbG9ja3N0cnVjdC0+bHNfZmlyc3QgPSAxOwotCWxvY2tzdHJ1Y3QtPmxzX2x2Yl9zaXplID0gbWluX2x2Yl9zaXplOwotCWxvY2tzdHJ1Y3QtPmxzX29wcyA9ICZub2xvY2tfb3BzOwotCWxvY2tzdHJ1Y3QtPmxzX2ZsYWdzID0gTE1fTFNGTEFHX0xPQ0FMOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogZ2ZzMl9yZWdpc3Rlcl9sb2NrcHJvdG8gLSBSZWdpc3RlciBhIGxvdy1sZXZlbCBsb2NraW5nIHByb3RvY29sCi0gKiBAcHJvdG86IHRoZSBwcm90b2NvbCBkZWZpbml0aW9uCi0gKgotICogUmV0dXJuczogMCBvbiBzdWNjZXNzLCAtRVhYWCBvbiBmYWlsdXJlCi0gKi8KLQotaW50IGdmczJfcmVnaXN0ZXJfbG9ja3Byb3RvKGNvbnN0IHN0cnVjdCBsbV9sb2Nrb3BzICpwcm90bykKLXsKLQlzdHJ1Y3QgbG1oX3dyYXBwZXIgKmx3OwotCi0JbXV0ZXhfbG9jaygmbG1oX2xvY2spOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShsdywgJmxtaF9saXN0LCBsd19saXN0KSB7Ci0JCWlmICghc3RyY21wKGx3LT5sd19vcHMtPmxtX3Byb3RvX25hbWUsIHByb3RvLT5sbV9wcm90b19uYW1lKSkgewotCQkJbXV0ZXhfdW5sb2NrKCZsbWhfbG9jayk7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJHRlMyOiBwcm90b2NvbCAlcyBhbHJlYWR5IGV4aXN0c1xuIiwKLQkJCSAgICAgICBwcm90by0+bG1fcHJvdG9fbmFtZSk7Ci0JCQlyZXR1cm4gLUVFWElTVDsKLQkJfQotCX0KLQotCWx3ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGxtaF93cmFwcGVyKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFsdykgewotCQltdXRleF91bmxvY2soJmxtaF9sb2NrKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JbHctPmx3X29wcyA9IHByb3RvOwotCWxpc3RfYWRkKCZsdy0+bHdfbGlzdCwgJmxtaF9saXN0KTsKLQotCW11dGV4X3VubG9jaygmbG1oX2xvY2spOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogZ2ZzMl91bnJlZ2lzdGVyX2xvY2twcm90byAtIFVucmVnaXN0ZXIgYSBsb3ctbGV2ZWwgbG9ja2luZyBwcm90b2NvbAotICogQHByb3RvOiB0aGUgcHJvdG9jb2wgZGVmaW5pdGlvbgotICoKLSAqLwotCi12b2lkIGdmczJfdW5yZWdpc3Rlcl9sb2NrcHJvdG8oY29uc3Qgc3RydWN0IGxtX2xvY2tvcHMgKnByb3RvKQotewotCXN0cnVjdCBsbWhfd3JhcHBlciAqbHc7Ci0KLQltdXRleF9sb2NrKCZsbWhfbG9jayk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGx3LCAmbG1oX2xpc3QsIGx3X2xpc3QpIHsKLQkJaWYgKCFzdHJjbXAobHctPmx3X29wcy0+bG1fcHJvdG9fbmFtZSwgcHJvdG8tPmxtX3Byb3RvX25hbWUpKSB7Ci0JCQlsaXN0X2RlbCgmbHctPmx3X2xpc3QpOwotCQkJbXV0ZXhfdW5sb2NrKCZsbWhfbG9jayk7Ci0JCQlrZnJlZShsdyk7Ci0JCQlyZXR1cm47Ci0JCX0KLQl9Ci0KLQltdXRleF91bmxvY2soJmxtaF9sb2NrKTsKLQotCXByaW50ayhLRVJOX1dBUk5JTkcgIkdGUzI6IGNhbid0IHVucmVnaXN0ZXIgbG9jayBwcm90b2NvbCAlc1xuIiwKLQkgICAgICAgcHJvdG8tPmxtX3Byb3RvX25hbWUpOwotfQotCi0vKioKLSAqIGdmczJfbW91bnRfbG9ja3Byb3RvIC0gTW91bnQgYSBsb2NrIHByb3RvY29sCi0gKiBAcHJvdG9fbmFtZSAtIHRoZSBuYW1lIG9mIHRoZSBwcm90b2NvbAotICogQHRhYmxlX25hbWUgLSB0aGUgbmFtZSBvZiB0aGUgbG9jayBzcGFjZQotICogQGhvc3RfZGF0YSAtIGRhdGEgc3BlY2lmaWMgdG8gdGhpcyBob3N0Ci0gKiBAY2IgLSB0aGUgY2FsbGJhY2sgdG8gdGhlIGNvZGUgdXNpbmcgdGhlIGxvY2sgbW9kdWxlCi0gKiBAc2RwIC0gVGhlIEdGUzIgc3VwZXJibG9jawotICogQG1pbl9sdmJfc2l6ZSAtIHRoZSBtaW5pbnVtIExWQiBzaXplIHRoYXQgdGhlIGNhbGxlciBjYW4gZGVhbCB3aXRoCi0gKiBAZmxhZ3MgLSBMTV9NRkxBR18qCi0gKiBAbG9ja3N0cnVjdCAtIGEgc3RydWN0dXJlIHJldHVybmVkIGRlc2NyaWJpbmcgdGhlIG1vdW50Ci0gKgotICogUmV0dXJuczogMCBvbiBzdWNjZXNzLCAtRVhYWCBvbiBmYWlsdXJlCi0gKi8KLQotaW50IGdmczJfbW91bnRfbG9ja3Byb3RvKGNoYXIgKnByb3RvX25hbWUsIGNoYXIgKnRhYmxlX25hbWUsIGNoYXIgKmhvc3RfZGF0YSwKLQkJCSBsbV9jYWxsYmFja190IGNiLCB2b2lkICpjYl9kYXRhLAotCQkJIHVuc2lnbmVkIGludCBtaW5fbHZiX3NpemUsIGludCBmbGFncywKLQkJCSBzdHJ1Y3QgbG1fbG9ja3N0cnVjdCAqbG9ja3N0cnVjdCwKLQkJCSBzdHJ1Y3Qga29iamVjdCAqZnNrb2JqKQotewotCXN0cnVjdCBsbWhfd3JhcHBlciAqbHcgPSBOVUxMOwotCWludCB0cnkgPSAwOwotCWludCBlcnJvciwgZm91bmQ7Ci0KLQotcmV0cnk6Ci0JbXV0ZXhfbG9jaygmbG1oX2xvY2spOwotCi0JaWYgKGxpc3RfZW1wdHkoJm5vbG9ja19wcm90by5sd19saXN0KSkKLQkJbGlzdF9hZGQoJm5vbG9ja19wcm90by5sd19saXN0LCAmbG1oX2xpc3QpOwotCi0JZm91bmQgPSAwOwotCWxpc3RfZm9yX2VhY2hfZW50cnkobHcsICZsbWhfbGlzdCwgbHdfbGlzdCkgewotCQlpZiAoIXN0cmNtcChsdy0+bHdfb3BzLT5sbV9wcm90b19uYW1lLCBwcm90b19uYW1lKSkgewotCQkJZm91bmQgPSAxOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlpZiAoIWZvdW5kKSB7Ci0JCWlmICghdHJ5ICYmIGNhcGFibGUoQ0FQX1NZU19NT0RVTEUpKSB7Ci0JCQl0cnkgPSAxOwotCQkJbXV0ZXhfdW5sb2NrKCZsbWhfbG9jayk7Ci0JCQlyZXF1ZXN0X21vZHVsZShwcm90b19uYW1lKTsKLQkJCWdvdG8gcmV0cnk7Ci0JCX0KLQkJcHJpbnRrKEtFUk5fSU5GTyAiR0ZTMjogY2FuJ3QgZmluZCBwcm90b2NvbCAlc1xuIiwgcHJvdG9fbmFtZSk7Ci0JCWVycm9yID0gLUVOT0VOVDsKLQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKGx3LT5sd19vcHMtPmxtX293bmVyICYmCi0JICAgICF0cnlfbW9kdWxlX2dldChsdy0+bHdfb3BzLT5sbV9vd25lcikpIHsKLQkJdHJ5ID0gMDsKLQkJbXV0ZXhfdW5sb2NrKCZsbWhfbG9jayk7Ci0JCW1zbGVlcCgxMDAwKTsKLQkJZ290byByZXRyeTsKLQl9Ci0KLQllcnJvciA9IGx3LT5sd19vcHMtPmxtX21vdW50KHRhYmxlX25hbWUsIGhvc3RfZGF0YSwgY2IsIGNiX2RhdGEsCi0JCQkJICAgICBtaW5fbHZiX3NpemUsIGZsYWdzLCBsb2Nrc3RydWN0LCBmc2tvYmopOwotCWlmIChlcnJvcikKLQkJbW9kdWxlX3B1dChsdy0+bHdfb3BzLT5sbV9vd25lcik7Ci1vdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZsbWhfbG9jayk7Ci0JcmV0dXJuIGVycm9yOwotfQotCi12b2lkIGdmczJfdW5tb3VudF9sb2NrcHJvdG8oc3RydWN0IGxtX2xvY2tzdHJ1Y3QgKmxvY2tzdHJ1Y3QpCi17Ci0JbXV0ZXhfbG9jaygmbG1oX2xvY2spOwotCWlmIChsb2Nrc3RydWN0LT5sc19vcHMtPmxtX3VubW91bnQpCi0JCWxvY2tzdHJ1Y3QtPmxzX29wcy0+bG1fdW5tb3VudChsb2Nrc3RydWN0LT5sc19sb2Nrc3BhY2UpOwotCWlmIChsb2Nrc3RydWN0LT5sc19vcHMtPmxtX293bmVyKQotCQltb2R1bGVfcHV0KGxvY2tzdHJ1Y3QtPmxzX29wcy0+bG1fb3duZXIpOwotCW11dGV4X3VubG9jaygmbG1oX2xvY2spOwotfQotCi0vKioKLSAqIGdmczJfd2l0aGRyYXdfbG9ja3Byb3RvIC0gYWJub3JtYWxseSB1bm1vdW50IGEgbG9jayBtb2R1bGUKLSAqIEBsb2Nrc3RydWN0OiB0aGUgbG9ja3N0cnVjdCBwYXNzZWQgaW50byBtb3VudAotICoKLSAqLwotCi12b2lkIGdmczJfd2l0aGRyYXdfbG9ja3Byb3RvKHN0cnVjdCBsbV9sb2Nrc3RydWN0ICpsb2Nrc3RydWN0KQotewotCW11dGV4X2xvY2soJmxtaF9sb2NrKTsKLQlsb2Nrc3RydWN0LT5sc19vcHMtPmxtX3dpdGhkcmF3KGxvY2tzdHJ1Y3QtPmxzX2xvY2tzcGFjZSk7Ci0JaWYgKGxvY2tzdHJ1Y3QtPmxzX29wcy0+bG1fb3duZXIpCi0JCW1vZHVsZV9wdXQobG9ja3N0cnVjdC0+bHNfb3BzLT5sbV9vd25lcik7Ci0JbXV0ZXhfdW5sb2NrKCZsbWhfbG9jayk7Ci19Ci0KLUVYUE9SVF9TWU1CT0xfR1BMKGdmczJfcmVnaXN0ZXJfbG9ja3Byb3RvKTsKLUVYUE9SVF9TWU1CT0xfR1BMKGdmczJfdW5yZWdpc3Rlcl9sb2NrcHJvdG8pOwotCmRpZmYgLS1naXQgYS9mcy9nZnMyL2xvY2tpbmcvZGxtL01ha2VmaWxlIGIvZnMvZ2ZzMi9sb2NraW5nL2RsbS9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjYwOWJiNi4uMDAwMDAwMAotLS0gYS9mcy9nZnMyL2xvY2tpbmcvZGxtL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1vYmotJChDT05GSUdfR0ZTMl9GU19MT0NLSU5HX0RMTSkgKz0gbG9ja19kbG0ubwotbG9ja19kbG0teSA6PSBsb2NrLm8gbWFpbi5vIG1vdW50Lm8gc3lzZnMubyB0aHJlYWQubwotCmRpZmYgLS1naXQgYS9mcy9nZnMyL2xvY2tpbmcvZGxtL2xvY2suYyBiL2ZzL2dmczIvbG9ja2luZy9kbG0vbG9jay5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDgyYzkwLi4wMDAwMDAwCi0tLSBhL2ZzL2dmczIvbG9ja2luZy9kbG0vbG9jay5jCisrKyAvZGV2L251bGwKQEAgLTEsNzA4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIFNpc3RpbmEgU29mdHdhcmUsIEluYy4gIDE5OTctMjAwMyBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUgUmVkIEhhdCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGNvcHlyaWdodGVkIG1hdGVyaWFsIGlzIG1hZGUgYXZhaWxhYmxlIHRvIGFueW9uZSB3aXNoaW5nIHRvIHVzZSwKLSAqIG1vZGlmeSwgY29weSwgb3IgcmVkaXN0cmlidXRlIGl0IHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCi0gKiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLgotICovCi0KLSNpbmNsdWRlICJsb2NrX2RsbS5oIgotCi1zdGF0aWMgY2hhciBqdW5rX2x2YltHRExNX0xWQl9TSVpFXTsKLQotCi0vKiBjb252ZXJ0IGRsbSBsb2NrLW1vZGUgdG8gZ2ZzIGxvY2stc3RhdGUgKi8KLQotc3RhdGljIHMxNiBnZGxtX21ha2VfbG1zdGF0ZShzMTYgZGxtbW9kZSkKLXsKLQlzd2l0Y2ggKGRsbW1vZGUpIHsKLQljYXNlIERMTV9MT0NLX0lWOgotCWNhc2UgRExNX0xPQ0tfTkw6Ci0JCXJldHVybiBMTV9TVF9VTkxPQ0tFRDsKLQljYXNlIERMTV9MT0NLX0VYOgotCQlyZXR1cm4gTE1fU1RfRVhDTFVTSVZFOwotCWNhc2UgRExNX0xPQ0tfQ1c6Ci0JCXJldHVybiBMTV9TVF9ERUZFUlJFRDsKLQljYXNlIERMTV9MT0NLX1BSOgotCQlyZXR1cm4gTE1fU1RfU0hBUkVEOwotCX0KLQlnZGxtX2Fzc2VydCgwLCAidW5rbm93biBETE0gbW9kZSAlZCIsIGRsbW1vZGUpOwotCXJldHVybiAtMTsKLX0KLQotLyogQSBsb2NrIHBsYWNlZCBvbiB0aGlzIHF1ZXVlIGlzIHJlLXN1Ym1pdHRlZCB0byBETE0gYXMgc29vbiBhcyB0aGUgbG9ja19kbG0KLSAgIHRocmVhZCBnZXRzIHRvIGl0LiAqLwotCi1zdGF0aWMgdm9pZCBxdWV1ZV9zdWJtaXQoc3RydWN0IGdkbG1fbG9jayAqbHApCi17Ci0Jc3RydWN0IGdkbG1fbHMgKmxzID0gbHAtPmxzOwotCi0Jc3Bpbl9sb2NrKCZscy0+YXN5bmNfbG9jayk7Ci0JbGlzdF9hZGRfdGFpbCgmbHAtPmRlbGF5X2xpc3QsICZscy0+c3VibWl0KTsKLQlzcGluX3VubG9jaygmbHMtPmFzeW5jX2xvY2spOwotCXdha2VfdXAoJmxzLT50aHJlYWRfd2FpdCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdha2VfdXBfYXN0KHN0cnVjdCBnZGxtX2xvY2sgKmxwKQotewotCWNsZWFyX2JpdChMRkxfQVNUX1dBSVQsICZscC0+ZmxhZ3MpOwotCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7Ci0Jd2FrZV91cF9iaXQoJmxwLT5mbGFncywgTEZMX0FTVF9XQUlUKTsKLX0KLQotc3RhdGljIHZvaWQgZ2RsbV9kZWxldGVfbHAoc3RydWN0IGdkbG1fbG9jayAqbHApCi17Ci0Jc3RydWN0IGdkbG1fbHMgKmxzID0gbHAtPmxzOwotCi0Jc3Bpbl9sb2NrKCZscy0+YXN5bmNfbG9jayk7Ci0JaWYgKCFsaXN0X2VtcHR5KCZscC0+ZGVsYXlfbGlzdCkpCi0JCWxpc3RfZGVsX2luaXQoJmxwLT5kZWxheV9saXN0KTsKLQlscy0+YWxsX2xvY2tzX2NvdW50LS07Ci0Jc3Bpbl91bmxvY2soJmxzLT5hc3luY19sb2NrKTsKLQotCWtmcmVlKGxwKTsKLX0KLQotc3RhdGljIHZvaWQgZ2RsbV9xdWV1ZV9kZWxheWVkKHN0cnVjdCBnZGxtX2xvY2sgKmxwKQotewotCXN0cnVjdCBnZGxtX2xzICpscyA9IGxwLT5sczsKLQotCXNwaW5fbG9jaygmbHMtPmFzeW5jX2xvY2spOwotCWxpc3RfYWRkX3RhaWwoJmxwLT5kZWxheV9saXN0LCAmbHMtPmRlbGF5ZWQpOwotCXNwaW5fdW5sb2NrKCZscy0+YXN5bmNfbG9jayk7Ci19Ci0KLXN0YXRpYyB2b2lkIHByb2Nlc3NfY29tcGxldGUoc3RydWN0IGdkbG1fbG9jayAqbHApCi17Ci0Jc3RydWN0IGdkbG1fbHMgKmxzID0gbHAtPmxzOwotCXN0cnVjdCBsbV9hc3luY19jYiBhY2I7Ci0KLQltZW1zZXQoJmFjYiwgMCwgc2l6ZW9mKGFjYikpOwotCi0JaWYgKGxwLT5sa3NiLnNiX3N0YXR1cyA9PSAtRExNX0VDQU5DRUwpIHsKLQkJbG9nX2luZm8oImNvbXBsZXRlIGRsbSBjYW5jZWwgJXgsJWxseCBmbGFncyAlbHgiLAotCQkgCSBscC0+bG9ja25hbWUubG5fdHlwZSwKLQkJCSAodW5zaWduZWQgbG9uZyBsb25nKWxwLT5sb2NrbmFtZS5sbl9udW1iZXIsCi0JCQkgbHAtPmZsYWdzKTsKLQotCQlscC0+cmVxID0gbHAtPmN1cjsKLQkJYWNiLmxjX3JldCB8PSBMTV9PVVRfQ0FOQ0VMRUQ7Ci0JCWlmIChscC0+Y3VyID09IERMTV9MT0NLX0lWKQotCQkJbHAtPmxrc2Iuc2JfbGtpZCA9IDA7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoTEZMX0RMTV9VTkxPQ0ssICZscC0+ZmxhZ3MpKSB7Ci0JCWlmIChscC0+bGtzYi5zYl9zdGF0dXMgIT0gLURMTV9FVU5MT0NLKSB7Ci0JCQlsb2dfaW5mbygidW5sb2NrIHNiX3N0YXR1cyAlZCAleCwlbGx4IGZsYWdzICVseCIsCi0JCQkJIGxwLT5sa3NiLnNiX3N0YXR1cywgbHAtPmxvY2tuYW1lLmxuX3R5cGUsCi0JCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpbHAtPmxvY2tuYW1lLmxuX251bWJlciwKLQkJCQkgbHAtPmZsYWdzKTsKLQkJCXJldHVybjsKLQkJfQotCi0JCWxwLT5jdXIgPSBETE1fTE9DS19JVjsKLQkJbHAtPnJlcSA9IERMTV9MT0NLX0lWOwotCQlscC0+bGtzYi5zYl9sa2lkID0gMDsKLQotCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KExGTF9VTkxPQ0tfREVMRVRFLCAmbHAtPmZsYWdzKSkgewotCQkJZ2RsbV9kZWxldGVfbHAobHApOwotCQkJcmV0dXJuOwotCQl9Ci0JCWdvdG8gb3V0OwotCX0KLQotCWlmIChscC0+bGtzYi5zYl9mbGFncyAmIERMTV9TQkZfVkFMTk9UVkFMSUQpCi0JCW1lbXNldChscC0+bGtzYi5zYl9sdmJwdHIsIDAsIEdETE1fTFZCX1NJWkUpOwotCi0JaWYgKGxwLT5sa3NiLnNiX2ZsYWdzICYgRExNX1NCRl9BTFRNT0RFKSB7Ci0JCWlmIChscC0+cmVxID09IERMTV9MT0NLX1BSKQotCQkJbHAtPnJlcSA9IERMTV9MT0NLX0NXOwotCQllbHNlIGlmIChscC0+cmVxID09IERMTV9MT0NLX0NXKQotCQkJbHAtPnJlcSA9IERMTV9MT0NLX1BSOwotCX0KLQotCS8qCi0JICogQSBjYW5jZWxlZCBsb2NrIHJlcXVlc3QuICBUaGUgbG9jayB3YXMganVzdCB0YWtlbiBvZmYgdGhlIGRlbGF5ZWQKLQkgKiBsaXN0IGFuZCB3YXMgbmV2ZXIgZXZlbiBzdWJtaXR0ZWQgdG8gZGxtLgotCSAqLwotCi0JaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChMRkxfQ0FOQ0VMLCAmbHAtPmZsYWdzKSkgewotCQlsb2dfaW5mbygiY29tcGxldGUgaW50ZXJuYWwgY2FuY2VsICV4LCVsbHgiLAotCQkgCSBscC0+bG9ja25hbWUubG5fdHlwZSwKLQkJCSAodW5zaWduZWQgbG9uZyBsb25nKWxwLT5sb2NrbmFtZS5sbl9udW1iZXIpOwotCQlscC0+cmVxID0gbHAtPmN1cjsKLQkJYWNiLmxjX3JldCB8PSBMTV9PVVRfQ0FOQ0VMRUQ7Ci0JCWdvdG8gb3V0OwotCX0KLQotCS8qCi0JICogQW4gZXJyb3Igb2NjdXJlZC4KLQkgKi8KLQotCWlmIChscC0+bGtzYi5zYl9zdGF0dXMpIHsKLQkJLyogYSAibm9ybWFsIiBlcnJvciAqLwotCQlpZiAoKGxwLT5sa3NiLnNiX3N0YXR1cyA9PSAtRUFHQUlOKSAmJgotCQkgICAgKGxwLT5sa2YgJiBETE1fTEtGX05PUVVFVUUpKSB7Ci0JCQlscC0+cmVxID0gbHAtPmN1cjsKLQkJCWlmIChscC0+Y3VyID09IERMTV9MT0NLX0lWKQotCQkJCWxwLT5sa3NiLnNiX2xraWQgPSAwOwotCQkJZ290byBvdXQ7Ci0JCX0KLQotCQkvKiB0aGlzIGNvdWxkIG9ubHkgaGFwcGVuIHdpdGggY2FuY2VscyBJIHRoaW5rICovCi0JCWxvZ19pbmZvKCJhc3Qgc2Jfc3RhdHVzICVkICV4LCVsbHggZmxhZ3MgJWx4IiwKLQkJCSBscC0+bGtzYi5zYl9zdGF0dXMsIGxwLT5sb2NrbmFtZS5sbl90eXBlLAotCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpbHAtPmxvY2tuYW1lLmxuX251bWJlciwKLQkJCSBscC0+ZmxhZ3MpOwotCQlyZXR1cm47Ci0JfQotCi0JLyoKLQkgKiBUaGlzIGlzIGFuIEFTVCBmb3IgYW4gRVgtPkVYIGNvbnZlcnNpb24gZm9yIHN5bmNfbHZiIGZyb20gR0ZTLgotCSAqLwotCi0JaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChMRkxfU1lOQ19MVkIsICZscC0+ZmxhZ3MpKSB7Ci0JCXdha2VfdXBfYXN0KGxwKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qCi0JICogQSBsb2NrIGhhcyBiZWVuIGRlbW90ZWQgdG8gTkwgYmVjYXVzZSBpdCBpbml0aWFsbHkgY29tcGxldGVkIGR1cmluZwotCSAqIEJMT0NLX0xPQ0tTLiAgTm93IGl0IG11c3QgYmUgcmVxdWVzdGVkIGluIHRoZSBvcmlnaW5hbGx5IHJlcXVlc3RlZAotCSAqIG1vZGUuCi0JICovCi0KLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KExGTF9SRVJFUVVFU1QsICZscC0+ZmxhZ3MpKSB7Ci0JCWdkbG1fYXNzZXJ0KGxwLT5yZXEgPT0gRExNX0xPQ0tfTkwsICIleCwlbGx4IiwKLQkJCSAgICBscC0+bG9ja25hbWUubG5fdHlwZSwKLQkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKWxwLT5sb2NrbmFtZS5sbl9udW1iZXIpOwotCQlnZGxtX2Fzc2VydChscC0+cHJldl9yZXEgPiBETE1fTE9DS19OTCwgIiV4LCVsbHgiLAotCQkJICAgIGxwLT5sb2NrbmFtZS5sbl90eXBlLAotCQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpbHAtPmxvY2tuYW1lLmxuX251bWJlcik7Ci0KLQkJbHAtPmN1ciA9IERMTV9MT0NLX05MOwotCQlscC0+cmVxID0gbHAtPnByZXZfcmVxOwotCQlscC0+cHJldl9yZXEgPSBETE1fTE9DS19JVjsKLQkJbHAtPmxrZiAmPSB+RExNX0xLRl9DT05WREVBRExLOwotCi0JCXNldF9iaXQoTEZMX05PQ0FDSEUsICZscC0+ZmxhZ3MpOwotCi0JCWlmICh0ZXN0X2JpdChERkxfQkxPQ0tfTE9DS1MsICZscy0+ZmxhZ3MpICYmCi0JCSAgICAhdGVzdF9iaXQoTEZMX05PQkxPQ0ssICZscC0+ZmxhZ3MpKQotCQkJZ2RsbV9xdWV1ZV9kZWxheWVkKGxwKTsKLQkJZWxzZQotCQkJcXVldWVfc3VibWl0KGxwKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qCi0JICogQSByZXF1ZXN0IGlzIGdyYW50ZWQgZHVyaW5nIGRsbSByZWNvdmVyeS4gIEl0IG1heSBiZSBncmFudGVkCi0JICogYmVjYXVzZSB0aGUgbG9ja3Mgb2YgYSBmYWlsZWQgbm9kZSB3ZXJlIGNsZWFyZWQuICBJbiB0aGF0IGNhc2UsCi0JICogdGhlcmUgbWF5IGJlIGluY29uc2lzdGVudCBkYXRhIGJlbmVhdGggdGhpcyBsb2NrIGFuZCB3ZSBtdXN0IHdhaXQKLQkgKiBmb3IgcmVjb3ZlcnkgdG8gY29tcGxldGUgdG8gdXNlIGl0LiAgV2hlbiBnZnMgcmVjb3ZlcnkgaXMgZG9uZSB0aGlzCi0JICogZ3JhbnRlZCBsb2NrIHdpbGwgYmUgY29udmVydGVkIHRvIE5MIGFuZCB0aGVuIHJlYWNxdWlyZWQgaW4gdGhpcwotCSAqIGdyYW50ZWQgc3RhdGUuCi0JICovCi0KLQlpZiAodGVzdF9iaXQoREZMX0JMT0NLX0xPQ0tTLCAmbHMtPmZsYWdzKSAmJgotCSAgICAhdGVzdF9iaXQoTEZMX05PQkxPQ0ssICZscC0+ZmxhZ3MpICYmCi0JICAgIGxwLT5yZXEgIT0gRExNX0xPQ0tfTkwpIHsKLQotCQlscC0+Y3VyID0gbHAtPnJlcTsKLQkJbHAtPnByZXZfcmVxID0gbHAtPnJlcTsKLQkJbHAtPnJlcSA9IERMTV9MT0NLX05MOwotCQlscC0+bGtmIHw9IERMTV9MS0ZfQ09OVkVSVDsKLQkJbHAtPmxrZiAmPSB+RExNX0xLRl9DT05WREVBRExLOwotCi0JCWxvZ19kZWJ1ZygicmVyZXEgJXgsJWxseCBpZCAleCAlZCwlZCIsCi0JCQkgIGxwLT5sb2NrbmFtZS5sbl90eXBlLAotCQkJICAodW5zaWduZWQgbG9uZyBsb25nKWxwLT5sb2NrbmFtZS5sbl9udW1iZXIsCi0JCQkgIGxwLT5sa3NiLnNiX2xraWQsIGxwLT5jdXIsIGxwLT5yZXEpOwotCi0JCXNldF9iaXQoTEZMX1JFUkVRVUVTVCwgJmxwLT5mbGFncyk7Ci0JCXF1ZXVlX3N1Ym1pdChscCk7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKgotCSAqIERMTSBkZW1vdGVkIHRoZSBsb2NrIHRvIE5MIGJlZm9yZSBpdCB3YXMgZ3JhbnRlZCBzbyBHRlMgbXVzdCBiZQotCSAqIHRvbGQgaXQgY2Fubm90IGNhY2hlIGRhdGEgZm9yIHRoaXMgbG9jay4KLQkgKi8KLQotCWlmIChscC0+bGtzYi5zYl9mbGFncyAmIERMTV9TQkZfREVNT1RFRCkKLQkJc2V0X2JpdChMRkxfTk9DQUNIRSwgJmxwLT5mbGFncyk7Ci0KLW91dDoKLQkvKgotCSAqIFRoaXMgaXMgYW4gaW50ZXJuYWwgbG9ja19kbG0gbG9jawotCSAqLwotCi0JaWYgKHRlc3RfYml0KExGTF9JTkxPQ0ssICZscC0+ZmxhZ3MpKSB7Ci0JCWNsZWFyX2JpdChMRkxfTk9CTE9DSywgJmxwLT5mbGFncyk7Ci0JCWxwLT5jdXIgPSBscC0+cmVxOwotCQl3YWtlX3VwX2FzdChscCk7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKgotCSAqIE5vcm1hbCBjb21wbGV0aW9uIG9mIGEgbG9jayByZXF1ZXN0LiAgVGVsbCBHRlMgaXQgbm93IGhhcyB0aGUgbG9jay4KLQkgKi8KLQotCWNsZWFyX2JpdChMRkxfTk9CTE9DSywgJmxwLT5mbGFncyk7Ci0JbHAtPmN1ciA9IGxwLT5yZXE7Ci0KLQlhY2IubGNfbmFtZSA9IGxwLT5sb2NrbmFtZTsKLQlhY2IubGNfcmV0IHw9IGdkbG1fbWFrZV9sbXN0YXRlKGxwLT5jdXIpOwotCi0JbHMtPmZzY2IobHMtPnNkcCwgTE1fQ0JfQVNZTkMsICZhY2IpOwotfQotCi1zdGF0aWMgdm9pZCBnZGxtX2FzdCh2b2lkICphc3RhcmcpCi17Ci0Jc3RydWN0IGdkbG1fbG9jayAqbHAgPSBhc3Rhcmc7Ci0JY2xlYXJfYml0KExGTF9BQ1RJVkUsICZscC0+ZmxhZ3MpOwotCXByb2Nlc3NfY29tcGxldGUobHApOwotfQotCi1zdGF0aWMgdm9pZCBwcm9jZXNzX2Jsb2NraW5nKHN0cnVjdCBnZGxtX2xvY2sgKmxwLCBpbnQgYmFzdF9tb2RlKQotewotCXN0cnVjdCBnZGxtX2xzICpscyA9IGxwLT5sczsKLQl1bnNpZ25lZCBpbnQgY2IgPSAwOwotCi0Jc3dpdGNoIChnZGxtX21ha2VfbG1zdGF0ZShiYXN0X21vZGUpKSB7Ci0JY2FzZSBMTV9TVF9FWENMVVNJVkU6Ci0JCWNiID0gTE1fQ0JfTkVFRF9FOwotCQlicmVhazsKLQljYXNlIExNX1NUX0RFRkVSUkVEOgotCQljYiA9IExNX0NCX05FRURfRDsKLQkJYnJlYWs7Ci0JY2FzZSBMTV9TVF9TSEFSRUQ6Ci0JCWNiID0gTE1fQ0JfTkVFRF9TOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlnZGxtX2Fzc2VydCgwLCAidW5rbm93biBiYXN0IG1vZGUgJXUiLCBiYXN0X21vZGUpOwotCX0KLQotCWxzLT5mc2NiKGxzLT5zZHAsIGNiLCAmbHAtPmxvY2tuYW1lKTsKLX0KLQotCi1zdGF0aWMgdm9pZCBnZGxtX2Jhc3Qodm9pZCAqYXN0YXJnLCBpbnQgbW9kZSkKLXsKLQlzdHJ1Y3QgZ2RsbV9sb2NrICpscCA9IGFzdGFyZzsKLQotCWlmICghbW9kZSkgewotCQlwcmludGsoS0VSTl9JTkZPICJsb2NrX2RsbTogYmFzdCBtb2RlIHplcm8gJXgsJWxseFxuIiwKLQkJCWxwLT5sb2NrbmFtZS5sbl90eXBlLAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylscC0+bG9ja25hbWUubG5fbnVtYmVyKTsKLQkJcmV0dXJuOwotCX0KLQotCXByb2Nlc3NfYmxvY2tpbmcobHAsIG1vZGUpOwotfQotCi0vKiBjb252ZXJ0IGdmcyBsb2NrLXN0YXRlIHRvIGRsbSBsb2NrLW1vZGUgKi8KLQotc3RhdGljIHMxNiBtYWtlX21vZGUoczE2IGxtc3RhdGUpCi17Ci0Jc3dpdGNoIChsbXN0YXRlKSB7Ci0JY2FzZSBMTV9TVF9VTkxPQ0tFRDoKLQkJcmV0dXJuIERMTV9MT0NLX05MOwotCWNhc2UgTE1fU1RfRVhDTFVTSVZFOgotCQlyZXR1cm4gRExNX0xPQ0tfRVg7Ci0JY2FzZSBMTV9TVF9ERUZFUlJFRDoKLQkJcmV0dXJuIERMTV9MT0NLX0NXOwotCWNhc2UgTE1fU1RfU0hBUkVEOgotCQlyZXR1cm4gRExNX0xPQ0tfUFI7Ci0JfQotCWdkbG1fYXNzZXJ0KDAsICJ1bmtub3duIExNIHN0YXRlICVkIiwgbG1zdGF0ZSk7Ci0JcmV0dXJuIC0xOwotfQotCi0KLS8qIHZlcmlmeSBhZ3JlZW1lbnQgd2l0aCBHRlMgb24gdGhlIGN1cnJlbnQgbG9jayBzdGF0ZSwgTkI6IERMTV9MT0NLX05MIGFuZAotICAgRExNX0xPQ0tfSVYgYXJlIGJvdGggY29uc2lkZXJlZCBMTV9TVF9VTkxPQ0tFRCBieSBHRlMuICovCi0KLXN0YXRpYyB2b2lkIGNoZWNrX2N1cl9zdGF0ZShzdHJ1Y3QgZ2RsbV9sb2NrICpscCwgdW5zaWduZWQgaW50IGN1cl9zdGF0ZSkKLXsKLQlzMTYgY3VyID0gbWFrZV9tb2RlKGN1cl9zdGF0ZSk7Ci0JaWYgKGxwLT5jdXIgIT0gRExNX0xPQ0tfSVYpCi0JCWdkbG1fYXNzZXJ0KGxwLT5jdXIgPT0gY3VyLCAiJWQsICVkIiwgbHAtPmN1ciwgY3VyKTsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbWFrZV9mbGFncyhzdHJ1Y3QgZ2RsbV9sb2NrICpscCwKLQkJCQkgICAgICB1bnNpZ25lZCBpbnQgZ2ZzX2ZsYWdzLAotCQkJCSAgICAgIHMxNiBjdXIsIHMxNiByZXEpCi17Ci0JdW5zaWduZWQgaW50IGxrZiA9IDA7Ci0KLQlpZiAoZ2ZzX2ZsYWdzICYgTE1fRkxBR19UUlkpCi0JCWxrZiB8PSBETE1fTEtGX05PUVVFVUU7Ci0KLQlpZiAoZ2ZzX2ZsYWdzICYgTE1fRkxBR19UUllfMUNCKSB7Ci0JCWxrZiB8PSBETE1fTEtGX05PUVVFVUU7Ci0JCWxrZiB8PSBETE1fTEtGX05PUVVFVUVCQVNUOwotCX0KLQotCWlmIChnZnNfZmxhZ3MgJiBMTV9GTEFHX1BSSU9SSVRZKSB7Ci0JCWxrZiB8PSBETE1fTEtGX05PT1JERVI7Ci0JCWxrZiB8PSBETE1fTEtGX0hFQURRVUU7Ci0JfQotCi0JaWYgKGdmc19mbGFncyAmIExNX0ZMQUdfQU5ZKSB7Ci0JCWlmIChyZXEgPT0gRExNX0xPQ0tfUFIpCi0JCQlsa2YgfD0gRExNX0xLRl9BTFRDVzsKLQkJZWxzZSBpZiAocmVxID09IERMTV9MT0NLX0NXKQotCQkJbGtmIHw9IERMTV9MS0ZfQUxUUFI7Ci0JfQotCi0JaWYgKGxwLT5sa3NiLnNiX2xraWQgIT0gMCkgewotCQlsa2YgfD0gRExNX0xLRl9DT05WRVJUOwotCX0KLQotCWlmIChscC0+bHZiKQotCQlsa2YgfD0gRExNX0xLRl9WQUxCTEs7Ci0KLQlyZXR1cm4gbGtmOwotfQotCi0vKiBtYWtlX3N0cm5hbWUgLSBjb252ZXJ0IEdGUyBsb2NrIG51bWJlcnMgdG8gYSBzdHJpbmcgKi8KLQotc3RhdGljIGlubGluZSB2b2lkIG1ha2Vfc3RybmFtZShjb25zdCBzdHJ1Y3QgbG1fbG9ja25hbWUgKmxvY2tuYW1lLAotCQkJCXN0cnVjdCBnZGxtX3N0cm5hbWUgKnN0cikKLXsKLQlzcHJpbnRmKHN0ci0+bmFtZSwgIiU4eCUxNmxseCIsIGxvY2tuYW1lLT5sbl90eXBlLAotCQkodW5zaWduZWQgbG9uZyBsb25nKWxvY2tuYW1lLT5sbl9udW1iZXIpOwotCXN0ci0+bmFtZWxlbiA9IEdETE1fU1RSTkFNRV9CWVRFUzsKLX0KLQotc3RhdGljIGludCBnZGxtX2NyZWF0ZV9scChzdHJ1Y3QgZ2RsbV9scyAqbHMsIHN0cnVjdCBsbV9sb2NrbmFtZSAqbmFtZSwKLQkJCSAgc3RydWN0IGdkbG1fbG9jayAqKmxwcCkKLXsKLQlzdHJ1Y3QgZ2RsbV9sb2NrICpscDsKLQotCWxwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGdkbG1fbG9jayksIEdGUF9OT0ZTKTsKLQlpZiAoIWxwKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWxwLT5sb2NrbmFtZSA9ICpuYW1lOwotCW1ha2Vfc3RybmFtZShuYW1lLCAmbHAtPnN0cm5hbWUpOwotCWxwLT5scyA9IGxzOwotCWxwLT5jdXIgPSBETE1fTE9DS19JVjsKLQlJTklUX0xJU1RfSEVBRCgmbHAtPmRlbGF5X2xpc3QpOwotCi0Jc3Bpbl9sb2NrKCZscy0+YXN5bmNfbG9jayk7Ci0JbHMtPmFsbF9sb2Nrc19jb3VudCsrOwotCXNwaW5fdW5sb2NrKCZscy0+YXN5bmNfbG9jayk7Ci0KLQkqbHBwID0gbHA7Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBnZGxtX2dldF9sb2NrKHZvaWQgKmxvY2tzcGFjZSwgc3RydWN0IGxtX2xvY2tuYW1lICpuYW1lLAotCQkgIHZvaWQgKipsb2NrcCkKLXsKLQlzdHJ1Y3QgZ2RsbV9sb2NrICpscDsKLQlpbnQgZXJyb3I7Ci0KLQllcnJvciA9IGdkbG1fY3JlYXRlX2xwKGxvY2tzcGFjZSwgbmFtZSwgJmxwKTsKLQotCSpsb2NrcCA9IGxwOwotCXJldHVybiBlcnJvcjsKLX0KLQotdm9pZCBnZGxtX3B1dF9sb2NrKHZvaWQgKmxvY2spCi17Ci0JZ2RsbV9kZWxldGVfbHAobG9jayk7Ci19Ci0KLXVuc2lnbmVkIGludCBnZGxtX2RvX2xvY2soc3RydWN0IGdkbG1fbG9jayAqbHApCi17Ci0Jc3RydWN0IGdkbG1fbHMgKmxzID0gbHAtPmxzOwotCWludCBlcnJvciwgYmFzdCA9IDE7Ci0KLQkvKgotCSAqIFdoZW4gcmVjb3ZlcnkgaXMgaW4gcHJvZ3Jlc3MsIGRlbGF5IGxvY2sgcmVxdWVzdHMgZm9yIHN1Ym1pc3Npb24KLQkgKiBvbmNlIHJlY292ZXJ5IGlzIGRvbmUuICBSZXF1ZXN0cyBmb3IgcmVjb3ZlcnkgKE5PRVhQKSBhbmQgdW5sb2NrcwotCSAqIGNhbiBwYXNzLgotCSAqLwotCi0JaWYgKHRlc3RfYml0KERGTF9CTE9DS19MT0NLUywgJmxzLT5mbGFncykgJiYKLQkgICAgIXRlc3RfYml0KExGTF9OT0JMT0NLLCAmbHAtPmZsYWdzKSAmJiBscC0+cmVxICE9IERMTV9MT0NLX05MKSB7Ci0JCWdkbG1fcXVldWVfZGVsYXllZChscCk7Ci0JCXJldHVybiBMTV9PVVRfQVNZTkM7Ci0JfQotCi0JLyoKLQkgKiBTdWJtaXQgdGhlIGFjdHVhbCBsb2NrIHJlcXVlc3QuCi0JICovCi0KLQlpZiAodGVzdF9iaXQoTEZMX05PQkFTVCwgJmxwLT5mbGFncykpCi0JCWJhc3QgPSAwOwotCi0Jc2V0X2JpdChMRkxfQUNUSVZFLCAmbHAtPmZsYWdzKTsKLQotCWxvZ19kZWJ1ZygibGsgJXgsJWxseCBpZCAleCAlZCwlZCAleCIsIGxwLT5sb2NrbmFtZS5sbl90eXBlLAotCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpbHAtPmxvY2tuYW1lLmxuX251bWJlciwgbHAtPmxrc2Iuc2JfbGtpZCwKLQkJICBscC0+Y3VyLCBscC0+cmVxLCBscC0+bGtmKTsKLQotCWVycm9yID0gZGxtX2xvY2sobHMtPmRsbV9sb2Nrc3BhY2UsIGxwLT5yZXEsICZscC0+bGtzYiwgbHAtPmxrZiwKLQkJCSBscC0+c3RybmFtZS5uYW1lLCBscC0+c3RybmFtZS5uYW1lbGVuLCAwLCBnZGxtX2FzdCwKLQkJCSBscCwgYmFzdCA/IGdkbG1fYmFzdCA6IE5VTEwpOwotCi0JaWYgKChlcnJvciA9PSAtRUFHQUlOKSAmJiAobHAtPmxrZiAmIERMTV9MS0ZfTk9RVUVVRSkpIHsKLQkJbHAtPmxrc2Iuc2Jfc3RhdHVzID0gLUVBR0FJTjsKLQkJZ2RsbV9hc3QobHApOwotCQllcnJvciA9IDA7Ci0JfQotCi0JaWYgKGVycm9yKSB7Ci0JCWxvZ19lcnJvcigiJXM6IGdkbG1fbG9jayAleCwlbGx4IGVycj0lZCBjdXI9JWQgcmVxPSVkIGxrZj0leCAiCi0JCQkgICJmbGFncz0lbHgiLCBscy0+ZnNuYW1lLCBscC0+bG9ja25hbWUubG5fdHlwZSwKLQkJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZylscC0+bG9ja25hbWUubG5fbnVtYmVyLCBlcnJvciwKLQkJCSAgbHAtPmN1ciwgbHAtPnJlcSwgbHAtPmxrZiwgbHAtPmZsYWdzKTsKLQkJcmV0dXJuIExNX09VVF9FUlJPUjsKLQl9Ci0JcmV0dXJuIExNX09VVF9BU1lOQzsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBnZGxtX2RvX3VubG9jayhzdHJ1Y3QgZ2RsbV9sb2NrICpscCkKLXsKLQlzdHJ1Y3QgZ2RsbV9scyAqbHMgPSBscC0+bHM7Ci0JdW5zaWduZWQgaW50IGxrZiA9IDA7Ci0JaW50IGVycm9yOwotCi0Jc2V0X2JpdChMRkxfRExNX1VOTE9DSywgJmxwLT5mbGFncyk7Ci0Jc2V0X2JpdChMRkxfQUNUSVZFLCAmbHAtPmZsYWdzKTsKLQotCWlmIChscC0+bHZiKQotCQlsa2YgPSBETE1fTEtGX1ZBTEJMSzsKLQotCWxvZ19kZWJ1ZygidW4gJXgsJWxseCAleCAlZCAleCIsIGxwLT5sb2NrbmFtZS5sbl90eXBlLAotCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpbHAtPmxvY2tuYW1lLmxuX251bWJlciwKLQkJICBscC0+bGtzYi5zYl9sa2lkLCBscC0+Y3VyLCBsa2YpOwotCi0JZXJyb3IgPSBkbG1fdW5sb2NrKGxzLT5kbG1fbG9ja3NwYWNlLCBscC0+bGtzYi5zYl9sa2lkLCBsa2YsIE5VTEwsIGxwKTsKLQotCWlmIChlcnJvcikgewotCQlsb2dfZXJyb3IoIiVzOiBnZGxtX3VubG9jayAleCwlbGx4IGVycj0lZCBjdXI9JWQgcmVxPSVkIGxrZj0leCAiCi0JCQkgICJmbGFncz0lbHgiLCBscy0+ZnNuYW1lLCBscC0+bG9ja25hbWUubG5fdHlwZSwKLQkJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZylscC0+bG9ja25hbWUubG5fbnVtYmVyLCBlcnJvciwKLQkJCSAgbHAtPmN1ciwgbHAtPnJlcSwgbHAtPmxrZiwgbHAtPmZsYWdzKTsKLQkJcmV0dXJuIExNX09VVF9FUlJPUjsKLQl9Ci0JcmV0dXJuIExNX09VVF9BU1lOQzsKLX0KLQotdW5zaWduZWQgaW50IGdkbG1fbG9jayh2b2lkICpsb2NrLCB1bnNpZ25lZCBpbnQgY3VyX3N0YXRlLAotCQkgICAgICAgdW5zaWduZWQgaW50IHJlcV9zdGF0ZSwgdW5zaWduZWQgaW50IGZsYWdzKQotewotCXN0cnVjdCBnZGxtX2xvY2sgKmxwID0gbG9jazsKLQotCWlmIChyZXFfc3RhdGUgPT0gTE1fU1RfVU5MT0NLRUQpCi0JCXJldHVybiBnZGxtX3VubG9jayhsb2NrLCBjdXJfc3RhdGUpOwotCi0JaWYgKHJlcV9zdGF0ZSA9PSBMTV9TVF9VTkxPQ0tFRCkKLQkJcmV0dXJuIGdkbG1fdW5sb2NrKGxvY2ssIGN1cl9zdGF0ZSk7Ci0KLQljbGVhcl9iaXQoTEZMX0RMTV9DQU5DRUwsICZscC0+ZmxhZ3MpOwotCWlmIChmbGFncyAmIExNX0ZMQUdfTk9FWFApCi0JCXNldF9iaXQoTEZMX05PQkxPQ0ssICZscC0+ZmxhZ3MpOwotCi0JY2hlY2tfY3VyX3N0YXRlKGxwLCBjdXJfc3RhdGUpOwotCWxwLT5yZXEgPSBtYWtlX21vZGUocmVxX3N0YXRlKTsKLQlscC0+bGtmID0gbWFrZV9mbGFncyhscCwgZmxhZ3MsIGxwLT5jdXIsIGxwLT5yZXEpOwotCi0JcmV0dXJuIGdkbG1fZG9fbG9jayhscCk7Ci19Ci0KLXVuc2lnbmVkIGludCBnZGxtX3VubG9jayh2b2lkICpsb2NrLCB1bnNpZ25lZCBpbnQgY3VyX3N0YXRlKQotewotCXN0cnVjdCBnZGxtX2xvY2sgKmxwID0gbG9jazsKLQotCWNsZWFyX2JpdChMRkxfRExNX0NBTkNFTCwgJmxwLT5mbGFncyk7Ci0JaWYgKGxwLT5jdXIgPT0gRExNX0xPQ0tfSVYpCi0JCXJldHVybiAwOwotCXJldHVybiBnZGxtX2RvX3VubG9jayhscCk7Ci19Ci0KLXZvaWQgZ2RsbV9jYW5jZWwodm9pZCAqbG9jaykKLXsKLQlzdHJ1Y3QgZ2RsbV9sb2NrICpscCA9IGxvY2s7Ci0Jc3RydWN0IGdkbG1fbHMgKmxzID0gbHAtPmxzOwotCWludCBlcnJvciwgZGVsYXlfbGlzdCA9IDA7Ci0KLQlpZiAodGVzdF9iaXQoTEZMX0RMTV9DQU5DRUwsICZscC0+ZmxhZ3MpKQotCQlyZXR1cm47Ci0KLQlsb2dfaW5mbygiZ2RsbV9jYW5jZWwgJXgsJWxseCBmbGFncyAlbHgiLCBscC0+bG9ja25hbWUubG5fdHlwZSwKLQkJICh1bnNpZ25lZCBsb25nIGxvbmcpbHAtPmxvY2tuYW1lLmxuX251bWJlciwgbHAtPmZsYWdzKTsKLQotCXNwaW5fbG9jaygmbHMtPmFzeW5jX2xvY2spOwotCWlmICghbGlzdF9lbXB0eSgmbHAtPmRlbGF5X2xpc3QpKSB7Ci0JCWxpc3RfZGVsX2luaXQoJmxwLT5kZWxheV9saXN0KTsKLQkJZGVsYXlfbGlzdCA9IDE7Ci0JfQotCXNwaW5fdW5sb2NrKCZscy0+YXN5bmNfbG9jayk7Ci0KLQlpZiAoZGVsYXlfbGlzdCkgewotCQlzZXRfYml0KExGTF9DQU5DRUwsICZscC0+ZmxhZ3MpOwotCQlzZXRfYml0KExGTF9BQ1RJVkUsICZscC0+ZmxhZ3MpOwotCQlnZGxtX2FzdChscCk7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAoIXRlc3RfYml0KExGTF9BQ1RJVkUsICZscC0+ZmxhZ3MpIHx8Ci0JICAgIHRlc3RfYml0KExGTF9ETE1fVU5MT0NLLCAmbHAtPmZsYWdzKSkgewotCQlsb2dfaW5mbygiZ2RsbV9jYW5jZWwgc2tpcCAleCwlbGx4IGZsYWdzICVseCIsCi0JCSAJIGxwLT5sb2NrbmFtZS5sbl90eXBlLAotCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpbHAtPmxvY2tuYW1lLmxuX251bWJlciwgbHAtPmZsYWdzKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qIHRoZSBsb2NrIGlzIGJsb2NrZWQgaW4gdGhlIGRsbSAqLwotCi0Jc2V0X2JpdChMRkxfRExNX0NBTkNFTCwgJmxwLT5mbGFncyk7Ci0Jc2V0X2JpdChMRkxfQUNUSVZFLCAmbHAtPmZsYWdzKTsKLQotCWVycm9yID0gZGxtX3VubG9jayhscy0+ZGxtX2xvY2tzcGFjZSwgbHAtPmxrc2Iuc2JfbGtpZCwgRExNX0xLRl9DQU5DRUwsCi0JCQkgICBOVUxMLCBscCk7Ci0KLQlsb2dfaW5mbygiZ2RsbV9jYW5jZWwgcnYgJWQgJXgsJWxseCBmbGFncyAlbHgiLCBlcnJvciwKLQkJIGxwLT5sb2NrbmFtZS5sbl90eXBlLAotCQkgKHVuc2lnbmVkIGxvbmcgbG9uZylscC0+bG9ja25hbWUubG5fbnVtYmVyLCBscC0+ZmxhZ3MpOwotCi0JaWYgKGVycm9yID09IC1FQlVTWSkKLQkJY2xlYXJfYml0KExGTF9ETE1fQ0FOQ0VMLCAmbHAtPmZsYWdzKTsKLX0KLQotc3RhdGljIGludCBnZGxtX2FkZF9sdmIoc3RydWN0IGdkbG1fbG9jayAqbHApCi17Ci0JY2hhciAqbHZiOwotCi0JbHZiID0ga3phbGxvYyhHRExNX0xWQl9TSVpFLCBHRlBfTk9GUyk7Ci0JaWYgKCFsdmIpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JbHAtPmxrc2Iuc2JfbHZicHRyID0gbHZiOwotCWxwLT5sdmIgPSBsdmI7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGdkbG1fZGVsX2x2YihzdHJ1Y3QgZ2RsbV9sb2NrICpscCkKLXsKLQlrZnJlZShscC0+bHZiKTsKLQlscC0+bHZiID0gTlVMTDsKLQlscC0+bGtzYi5zYl9sdmJwdHIgPSBOVUxMOwotfQotCi1zdGF0aWMgaW50IGdkbG1fYXN0X3dhaXQodm9pZCAqd29yZCkKLXsKLQlzY2hlZHVsZSgpOwotCXJldHVybiAwOwotfQotCi0vKiBUaGlzIGNhbiBkbyBhIHN5bmNocm9ub3VzIGRsbSByZXF1ZXN0IChyZXF1aXJpbmcgYSBsb2NrX2RsbSB0aHJlYWQgdG8gZ2V0Ci0gICB0aGUgY29tcGxldGlvbikgYmVjYXVzZSBnZnMgd29uJ3QgY2FsbCBob2xkX2x2YigpIGR1cmluZyBhIGNhbGxiYWNrIChmcm9tCi0gICB0aGUgY29udGV4dCBvZiBhIGxvY2tfZGxtIHRocmVhZCkuICovCi0KLXN0YXRpYyBpbnQgaG9sZF9udWxsX2xvY2soc3RydWN0IGdkbG1fbG9jayAqbHApCi17Ci0Jc3RydWN0IGdkbG1fbG9jayAqbHBuID0gTlVMTDsKLQlpbnQgZXJyb3I7Ci0KLQlpZiAobHAtPmhvbGRfbnVsbCkgewotCQlwcmludGsoS0VSTl9JTkZPICJsb2NrX2RsbTogbHZiIGFscmVhZHkgaGVsZFxuIik7Ci0JCXJldHVybiAwOwotCX0KLQotCWVycm9yID0gZ2RsbV9jcmVhdGVfbHAobHAtPmxzLCAmbHAtPmxvY2tuYW1lLCAmbHBuKTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gb3V0OwotCi0JbHBuLT5sa3NiLnNiX2x2YnB0ciA9IGp1bmtfbHZiOwotCWxwbi0+bHZiID0ganVua19sdmI7Ci0KLQlscG4tPnJlcSA9IERMTV9MT0NLX05MOwotCWxwbi0+bGtmID0gRExNX0xLRl9WQUxCTEsgfCBETE1fTEtGX0VYUEVESVRFOwotCXNldF9iaXQoTEZMX05PQkFTVCwgJmxwbi0+ZmxhZ3MpOwotCXNldF9iaXQoTEZMX0lOTE9DSywgJmxwbi0+ZmxhZ3MpOwotCXNldF9iaXQoTEZMX0FTVF9XQUlULCAmbHBuLT5mbGFncyk7Ci0KLQlnZGxtX2RvX2xvY2sobHBuKTsKLQl3YWl0X29uX2JpdCgmbHBuLT5mbGFncywgTEZMX0FTVF9XQUlULCBnZGxtX2FzdF93YWl0LCBUQVNLX1VOSU5URVJSVVBUSUJMRSk7Ci0JZXJyb3IgPSBscG4tPmxrc2Iuc2Jfc3RhdHVzOwotCWlmIChlcnJvcikgewotCQlwcmludGsoS0VSTl9JTkZPICJsb2NrX2RsbTogaG9sZF9udWxsX2xvY2sgZGxtIGVycm9yICVkXG4iLAotCQkgICAgICAgZXJyb3IpOwotCQlnZGxtX2RlbGV0ZV9scChscG4pOwotCQlscG4gPSBOVUxMOwotCX0KLW91dDoKLQlscC0+aG9sZF9udWxsID0gbHBuOwotCXJldHVybiBlcnJvcjsKLX0KLQotLyogVGhpcyBjYW5ub3QgZG8gYSBzeW5jaHJvbm91cyBkbG0gcmVxdWVzdCAocmVxdWlyaW5nIGEgbG9ja19kbG0gdGhyZWFkIHRvIGdldAotICAgdGhlIGNvbXBsZXRpb24pIGJlY2F1c2UgZ2ZzIG1heSBjYWxsIHVuaG9sZF9sdmIoKSBkdXJpbmcgYSBjYWxsYmFjayAoZnJvbQotICAgdGhlIGNvbnRleHQgb2YgYSBsb2NrX2RsbSB0aHJlYWQpIHdoaWNoIGNvdWxkIGNhdXNlIGEgZGVhZGxvY2sgc2luY2UgdGhlCi0gICBvdGhlciBsb2NrX2RsbSB0aHJlYWQgY291bGQgYmUgZW5nYWdlZCBpbiByZWNvdmVyeS4gKi8KLQotc3RhdGljIHZvaWQgdW5ob2xkX251bGxfbG9jayhzdHJ1Y3QgZ2RsbV9sb2NrICpscCkKLXsKLQlzdHJ1Y3QgZ2RsbV9sb2NrICpscG4gPSBscC0+aG9sZF9udWxsOwotCi0JZ2RsbV9hc3NlcnQobHBuLCAiJXgsJWxseCIsIGxwLT5sb2NrbmFtZS5sbl90eXBlLAotCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylscC0+bG9ja25hbWUubG5fbnVtYmVyKTsKLQlscG4tPmxrc2Iuc2JfbHZicHRyID0gTlVMTDsKLQlscG4tPmx2YiA9IE5VTEw7Ci0Jc2V0X2JpdChMRkxfVU5MT0NLX0RFTEVURSwgJmxwbi0+ZmxhZ3MpOwotCWdkbG1fZG9fdW5sb2NrKGxwbik7Ci0JbHAtPmhvbGRfbnVsbCA9IE5VTEw7Ci19Ci0KLS8qIEFjcXVpcmUgYSBOTCBsb2NrIGJlY2F1c2UgZ2ZzIHJlcXVpcmVzIHRoZSB2YWx1ZSBibG9jayB0byByZW1haW4KLSAgIGludGFjdCBvbiB0aGUgcmVzb3VyY2Ugd2hpbGUgdGhlIGx2YiBpcyAiaGVsZCIgZXZlbiBpZiBpdCdzIGhvbGRpbmcgbm8gbG9ja3MKLSAgIG9uIHRoZSByZXNvdXJjZS4gKi8KLQotaW50IGdkbG1faG9sZF9sdmIodm9pZCAqbG9jaywgY2hhciAqKmx2YnApCi17Ci0Jc3RydWN0IGdkbG1fbG9jayAqbHAgPSBsb2NrOwotCWludCBlcnJvcjsKLQotCWVycm9yID0gZ2RsbV9hZGRfbHZiKGxwKTsKLQlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKLQotCSpsdmJwID0gbHAtPmx2YjsKLQotCWVycm9yID0gaG9sZF9udWxsX2xvY2sobHApOwotCWlmIChlcnJvcikKLQkJZ2RsbV9kZWxfbHZiKGxwKTsKLQotCXJldHVybiBlcnJvcjsKLX0KLQotdm9pZCBnZGxtX3VuaG9sZF9sdmIodm9pZCAqbG9jaywgY2hhciAqbHZiKQotewotCXN0cnVjdCBnZGxtX2xvY2sgKmxwID0gbG9jazsKLQotCXVuaG9sZF9udWxsX2xvY2sobHApOwotCWdkbG1fZGVsX2x2YihscCk7Ci19Ci0KLXZvaWQgZ2RsbV9zdWJtaXRfZGVsYXllZChzdHJ1Y3QgZ2RsbV9scyAqbHMpCi17Ci0Jc3RydWN0IGdkbG1fbG9jayAqbHAsICpzYWZlOwotCi0Jc3Bpbl9sb2NrKCZscy0+YXN5bmNfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGxwLCBzYWZlLCAmbHMtPmRlbGF5ZWQsIGRlbGF5X2xpc3QpIHsKLQkJbGlzdF9kZWxfaW5pdCgmbHAtPmRlbGF5X2xpc3QpOwotCQlsaXN0X2FkZF90YWlsKCZscC0+ZGVsYXlfbGlzdCwgJmxzLT5zdWJtaXQpOwotCX0KLQlzcGluX3VubG9jaygmbHMtPmFzeW5jX2xvY2spOwotCXdha2VfdXAoJmxzLT50aHJlYWRfd2FpdCk7Ci19Ci0KZGlmZiAtLWdpdCBhL2ZzL2dmczIvbG9ja2luZy9kbG0vbG9ja19kbG0uaCBiL2ZzL2dmczIvbG9ja2luZy9kbG0vbG9ja19kbG0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2M5OGU3Yy4uMDAwMDAwMAotLS0gYS9mcy9nZnMyL2xvY2tpbmcvZGxtL2xvY2tfZGxtLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNjYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgU2lzdGluYSBTb2Z0d2FyZSwgSW5jLiAgMTk5Ny0yMDAzIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSBSZWQgSGF0LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29weXJpZ2h0ZWQgbWF0ZXJpYWwgaXMgbWFkZSBhdmFpbGFibGUgdG8gYW55b25lIHdpc2hpbmcgdG8gdXNlLAotICogbW9kaWZ5LCBjb3B5LCBvciByZWRpc3RyaWJ1dGUgaXQgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKLSAqIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuCi0gKi8KLQotI2lmbmRlZiBMT0NLX0RMTV9ET1RfSAotI2RlZmluZSBMT0NLX0RMTV9ET1RfSAotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+Ci0jaW5jbHVkZSA8bGludXgva29iamVjdC5oPgotI2luY2x1ZGUgPGxpbnV4L2ZjbnRsLmg+Ci0jaW5jbHVkZSA8bGludXgvd2FpdC5oPgotI2luY2x1ZGUgPG5ldC9zb2NrLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9kbG0uaD4KLSNpbmNsdWRlIDxsaW51eC9kbG1fcGxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9sbV9pbnRlcmZhY2UuaD4KLQotLyoKLSAqIEludGVybmFsbHksIHdlIHByZWZpeCB0aGluZ3Mgd2l0aCBnZGxtXyBhbmQgR0RMTV8gKGZvciBnZnMtZGxtKSBzaW5jZSBhCi0gKiBwcmVmaXggb2YgbG9ja19kbG1fIGdldHMgYXdrd2FyZC4gIEV4dGVybmFsbHksIEdGUyByZWZlcnMgdG8gdGhpcyBtb2R1bGUKLSAqIGFzICJsb2NrX2RsbSIuCi0gKi8KLQotI2RlZmluZSBHRExNX1NUUk5BTUVfQllURVMJMjQKLSNkZWZpbmUgR0RMTV9MVkJfU0laRQkJMzIKLSNkZWZpbmUgR0RMTV9EUk9QX0NPVU5UCQkwCi0jZGVmaW5lIEdETE1fRFJPUF9QRVJJT0QJNjAKLSNkZWZpbmUgR0RMTV9OQU1FX0xFTgkJMTI4Ci0KLS8qIEdGUyB1c2VzIDEyIGJ5dGVzIHRvIGlkZW50aWZ5IGEgcmVzb3VyY2UgKDMyIGJpdCB0eXBlICsgNjQgYml0IG51bWJlcikuCi0gICBXZSBzcHJpbnRmIHRoZXNlIG51bWJlcnMgaW50byBhIDI0IGJ5dGUgc3RyaW5nIG9mIGhleCB2YWx1ZXMgdG8gbWFrZSB0aGVtCi0gICBodW1hbi1yZWFkYWJsZSAodG8gbWFrZSBkZWJ1Z2dpbmcgc2ltcGxlci4pICovCi0KLXN0cnVjdCBnZGxtX3N0cm5hbWUgewotCXVuc2lnbmVkIGNoYXIJCW5hbWVbR0RMTV9TVFJOQU1FX0JZVEVTXTsKLQl1bnNpZ25lZCBzaG9ydAkJbmFtZWxlbjsKLX07Ci0KLWVudW0gewotCURGTF9CTE9DS19MT0NLUwkJPSAwLAotCURGTF9TUEVDVEFUT1IJCT0gMSwKLQlERkxfV0lUSERSQVcJCT0gMiwKLX07Ci0KLXN0cnVjdCBnZGxtX2xzIHsKLQl1MzIJCWlkOwotCWludAkJCWppZDsKLQlpbnQJCQlmaXJzdDsKLQlpbnQJCQlmaXJzdF9kb25lOwotCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwotCXN0cnVjdCBrb2JqZWN0CQlrb2JqOwotCWNoYXIJCQljbHVzdGVybmFtZVtHRExNX05BTUVfTEVOXTsKLQljaGFyCQkJZnNuYW1lW0dETE1fTkFNRV9MRU5dOwotCWludAkJCWZzZmxhZ3M7Ci0JZGxtX2xvY2tzcGFjZV90CQkqZGxtX2xvY2tzcGFjZTsKLQlsbV9jYWxsYmFja190CQlmc2NiOwotCXN0cnVjdCBnZnMyX3NiZAkJKnNkcDsKLQlpbnQJCQlyZWNvdmVyX2ppZDsKLQlpbnQJCQlyZWNvdmVyX2ppZF9kb25lOwotCWludAkJCXJlY292ZXJfamlkX3N0YXR1czsKLQlzcGlubG9ja190CQlhc3luY19sb2NrOwotCXN0cnVjdCBsaXN0X2hlYWQJZGVsYXllZDsKLQlzdHJ1Y3QgbGlzdF9oZWFkCXN1Ym1pdDsKLQl1MzIJCWFsbF9sb2Nrc19jb3VudDsKLQl3YWl0X3F1ZXVlX2hlYWRfdAl3YWl0X2NvbnRyb2w7Ci0Jc3RydWN0IHRhc2tfc3RydWN0CSp0aHJlYWQ7Ci0Jd2FpdF9xdWV1ZV9oZWFkX3QJdGhyZWFkX3dhaXQ7Ci19OwotCi1lbnVtIHsKLQlMRkxfTk9CTE9DSwkJPSAwLAotCUxGTF9OT0NBQ0hFCQk9IDEsCi0JTEZMX0RMTV9VTkxPQ0sJCT0gMiwKLQlMRkxfRExNX0NBTkNFTAkJPSAzLAotCUxGTF9TWU5DX0xWQgkJPSA0LAotCUxGTF9GT1JDRV9QUk9NT1RFCT0gNSwKLQlMRkxfUkVSRVFVRVNUCQk9IDYsCi0JTEZMX0FDVElWRQkJPSA3LAotCUxGTF9JTkxPQ0sJCT0gOCwKLQlMRkxfQ0FOQ0VMCQk9IDksCi0JTEZMX05PQkFTVAkJPSAxMCwKLQlMRkxfSEVBRFFVRQkJPSAxMSwKLQlMRkxfVU5MT0NLX0RFTEVURQk9IDEyLAotCUxGTF9BU1RfV0FJVAkJPSAxMywKLX07Ci0KLXN0cnVjdCBnZGxtX2xvY2sgewotCXN0cnVjdCBnZGxtX2xzCQkqbHM7Ci0Jc3RydWN0IGxtX2xvY2tuYW1lCWxvY2tuYW1lOwotCXN0cnVjdCBnZGxtX3N0cm5hbWUJc3RybmFtZTsKLQljaGFyCQkJKmx2YjsKLQlzdHJ1Y3QgZGxtX2xrc2IJCWxrc2I7Ci0KLQlzMTYJCQljdXI7Ci0JczE2CQkJcmVxOwotCXMxNgkJCXByZXZfcmVxOwotCXUzMgkJCWxrZjsJCS8qIGRsbSBmbGFncyBETE1fTEtGXyAqLwotCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwkJLyogbG9ja19kbG0gZmxhZ3MgTEZMXyAqLwotCi0Jc3RydWN0IGxpc3RfaGVhZAlkZWxheV9saXN0OwkvKiBkZWxheWVkICovCi0Jc3RydWN0IGdkbG1fbG9jawkqaG9sZF9udWxsOwkvKiBOTCBsb2NrIGZvciBob2xkX2x2YiAqLwotfTsKLQotI2RlZmluZSBnZGxtX2Fzc2VydChhc3NlcnRpb24sIGZtdCwgYXJncy4uLikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCWlmICh1bmxpa2VseSghKGFzc2VydGlvbikpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCXByaW50ayhLRVJOX0VNRVJHICJsb2NrX2RsbTogZmF0YWwgYXNzZXJ0aW9uIGZhaWxlZCBcIiVzXCJcbiIgXAotCQkJCSAgImxvY2tfZGxtOiAgIiBmbXQgIlxuIiwgICAgICAgICAgICAgICAgICAgICBcCi0JCQkJICAjYXNzZXJ0aW9uLCAjI2FyZ3MpOyAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJQlVHKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgbG9nX3ByaW50KGxldiwgZm10LCBhcmcuLi4pIHByaW50ayhsZXYgImxvY2tfZGxtOiAiIGZtdCAiXG4iICwgIyMgYXJnKQotI2RlZmluZSBsb2dfaW5mbyhmbXQsIGFyZy4uLikgIGxvZ19wcmludChLRVJOX0lORk8gLCBmbXQgLCAjIyBhcmcpCi0jZGVmaW5lIGxvZ19lcnJvcihmbXQsIGFyZy4uLikgbG9nX3ByaW50KEtFUk5fRVJSICwgZm10ICwgIyMgYXJnKQotI2lmZGVmIExPQ0tfRExNX0xPR19ERUJVRwotI2RlZmluZSBsb2dfZGVidWcoZm10LCBhcmcuLi4pIGxvZ19wcmludChLRVJOX0RFQlVHICwgZm10ICwgIyMgYXJnKQotI2Vsc2UKLSNkZWZpbmUgbG9nX2RlYnVnKGZtdCwgYXJnLi4uKQotI2VuZGlmCi0KLS8qIHN5c2ZzLmMgKi8KLQotaW50IGdkbG1fc3lzZnNfaW5pdCh2b2lkKTsKLXZvaWQgZ2RsbV9zeXNmc19leGl0KHZvaWQpOwotaW50IGdkbG1fa29iamVjdF9zZXR1cChzdHJ1Y3QgZ2RsbV9scyAqLCBzdHJ1Y3Qga29iamVjdCAqKTsKLXZvaWQgZ2RsbV9rb2JqZWN0X3JlbGVhc2Uoc3RydWN0IGdkbG1fbHMgKik7Ci0KLS8qIHRocmVhZC5jICovCi0KLWludCBnZGxtX2luaXRfdGhyZWFkcyhzdHJ1Y3QgZ2RsbV9scyAqKTsKLXZvaWQgZ2RsbV9yZWxlYXNlX3RocmVhZHMoc3RydWN0IGdkbG1fbHMgKik7Ci0KLS8qIGxvY2suYyAqLwotCi12b2lkIGdkbG1fc3VibWl0X2RlbGF5ZWQoc3RydWN0IGdkbG1fbHMgKik7Ci11bnNpZ25lZCBpbnQgZ2RsbV9kb19sb2NrKHN0cnVjdCBnZGxtX2xvY2sgKik7Ci0KLWludCBnZGxtX2dldF9sb2NrKHZvaWQgKiwgc3RydWN0IGxtX2xvY2tuYW1lICosIHZvaWQgKiopOwotdm9pZCBnZGxtX3B1dF9sb2NrKHZvaWQgKik7Ci11bnNpZ25lZCBpbnQgZ2RsbV9sb2NrKHZvaWQgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCk7Ci11bnNpZ25lZCBpbnQgZ2RsbV91bmxvY2sodm9pZCAqLCB1bnNpZ25lZCBpbnQpOwotdm9pZCBnZGxtX2NhbmNlbCh2b2lkICopOwotaW50IGdkbG1faG9sZF9sdmIodm9pZCAqLCBjaGFyICoqKTsKLXZvaWQgZ2RsbV91bmhvbGRfbHZiKHZvaWQgKiwgY2hhciAqKTsKLQotLyogbW91bnQuYyAqLwotCi1leHRlcm4gY29uc3Qgc3RydWN0IGxtX2xvY2tvcHMgZ2RsbV9vcHM7Ci0KLSNlbmRpZgotCmRpZmYgLS1naXQgYS9mcy9nZnMyL2xvY2tpbmcvZGxtL21haW4uYyBiL2ZzL2dmczIvbG9ja2luZy9kbG0vbWFpbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOWEwM2E3Li4wMDAwMDAwCi0tLSBhL2ZzL2dmczIvbG9ja2luZy9kbG0vbWFpbi5jCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgU2lzdGluYSBTb2Z0d2FyZSwgSW5jLiAgMTk5Ny0yMDAzIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSBSZWQgSGF0LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29weXJpZ2h0ZWQgbWF0ZXJpYWwgaXMgbWFkZSBhdmFpbGFibGUgdG8gYW55b25lIHdpc2hpbmcgdG8gdXNlLAotICogbW9kaWZ5LCBjb3B5LCBvciByZWRpc3RyaWJ1dGUgaXQgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKLSAqIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLQotI2luY2x1ZGUgImxvY2tfZGxtLmgiCi0KLXN0YXRpYyBpbnQgX19pbml0IGluaXRfbG9ja19kbG0odm9pZCkKLXsKLQlpbnQgZXJyb3I7Ci0KLQllcnJvciA9IGdmczJfcmVnaXN0ZXJfbG9ja3Byb3RvKCZnZGxtX29wcyk7Ci0JaWYgKGVycm9yKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImxvY2tfZGxtOiAgY2FuJ3QgcmVnaXN0ZXIgcHJvdG9jb2w6ICVkXG4iLAotCQkgICAgICAgZXJyb3IpOwotCQlyZXR1cm4gZXJyb3I7Ci0JfQotCi0JZXJyb3IgPSBnZGxtX3N5c2ZzX2luaXQoKTsKLQlpZiAoZXJyb3IpIHsKLQkJZ2ZzMl91bnJlZ2lzdGVyX2xvY2twcm90bygmZ2RsbV9vcHMpOwotCQlyZXR1cm4gZXJyb3I7Ci0JfQotCi0JcHJpbnRrKEtFUk5fSU5GTwotCSAgICAgICAiTG9ja19ETE0gKGJ1aWx0ICVzICVzKSBpbnN0YWxsZWRcbiIsIF9fREFURV9fLCBfX1RJTUVfXyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBleGl0X2xvY2tfZGxtKHZvaWQpCi17Ci0JZ2RsbV9zeXNmc19leGl0KCk7Ci0JZ2ZzMl91bnJlZ2lzdGVyX2xvY2twcm90bygmZ2RsbV9vcHMpOwotfQotCi1tb2R1bGVfaW5pdChpbml0X2xvY2tfZGxtKTsKLW1vZHVsZV9leGl0KGV4aXRfbG9ja19kbG0pOwotCi1NT0RVTEVfREVTQ1JJUFRJT04oIkdGUyBETE0gTG9ja2luZyBNb2R1bGUiKTsKLU1PRFVMRV9BVVRIT1IoIlJlZCBIYXQsIEluYy4iKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9sb2NraW5nL2RsbS9tb3VudC5jIGIvZnMvZ2ZzMi9sb2NraW5nL2RsbS9tb3VudC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYWE3ZWI2Li4wMDAwMDAwCi0tLSBhL2ZzL2dmczIvbG9ja2luZy9kbG0vbW91bnQuYworKysgL2Rldi9udWxsCkBAIC0xLDI3NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSBTaXN0aW5hIFNvZnR3YXJlLCBJbmMuICAxOTk3LTIwMDMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA1IFJlZCBIYXQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBjb3B5cmlnaHRlZCBtYXRlcmlhbCBpcyBtYWRlIGF2YWlsYWJsZSB0byBhbnlvbmUgd2lzaGluZyB0byB1c2UsCi0gKiBtb2RpZnksIGNvcHksIG9yIHJlZGlzdHJpYnV0ZSBpdCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucwotICogb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4KLSAqLwotCi0jaW5jbHVkZSAibG9ja19kbG0uaCIKLQotY29uc3Qgc3RydWN0IGxtX2xvY2tvcHMgZ2RsbV9vcHM7Ci0KLQotc3RhdGljIHN0cnVjdCBnZGxtX2xzICppbml0X2dkbG0obG1fY2FsbGJhY2tfdCBjYiwgc3RydWN0IGdmczJfc2JkICpzZHAsCi0JCQkJIGludCBmbGFncywgY2hhciAqdGFibGVfbmFtZSkKLXsKLQlzdHJ1Y3QgZ2RsbV9scyAqbHM7Ci0JY2hhciBidWZbMjU2XSwgKnA7Ci0KLQlscyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBnZGxtX2xzKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFscykKLQkJcmV0dXJuIE5VTEw7Ci0KLQlscy0+ZnNjYiA9IGNiOwotCWxzLT5zZHAgPSBzZHA7Ci0JbHMtPmZzZmxhZ3MgPSBmbGFnczsKLQlzcGluX2xvY2tfaW5pdCgmbHMtPmFzeW5jX2xvY2spOwotCUlOSVRfTElTVF9IRUFEKCZscy0+ZGVsYXllZCk7Ci0JSU5JVF9MSVNUX0hFQUQoJmxzLT5zdWJtaXQpOwotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmxzLT50aHJlYWRfd2FpdCk7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmbHMtPndhaXRfY29udHJvbCk7Ci0JbHMtPmppZCA9IC0xOwotCi0Jc3RybmNweShidWYsIHRhYmxlX25hbWUsIDI1Nik7Ci0JYnVmWzI1NV0gPSAnXDAnOwotCi0JcCA9IHN0cmNocihidWYsICc6Jyk7Ci0JaWYgKCFwKSB7Ci0JCWxvZ19pbmZvKCJpbnZhbGlkIHRhYmxlX25hbWUgXCIlc1wiIiwgdGFibGVfbmFtZSk7Ci0JCWtmcmVlKGxzKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCSpwID0gJ1wwJzsKLQlwKys7Ci0KLQlzdHJuY3B5KGxzLT5jbHVzdGVybmFtZSwgYnVmLCBHRExNX05BTUVfTEVOKTsKLQlzdHJuY3B5KGxzLT5mc25hbWUsIHAsIEdETE1fTkFNRV9MRU4pOwotCi0JcmV0dXJuIGxzOwotfQotCi1zdGF0aWMgaW50IG1ha2VfYXJncyhzdHJ1Y3QgZ2RsbV9scyAqbHMsIGNoYXIgKmRhdGFfYXJnLCBpbnQgKm5vZGlyKQotewotCWNoYXIgZGF0YVsyNTZdOwotCWNoYXIgKm9wdGlvbnMsICp4LCAqeTsKLQlpbnQgZXJyb3IgPSAwOwotCi0JbWVtc2V0KGRhdGEsIDAsIDI1Nik7Ci0Jc3RybmNweShkYXRhLCBkYXRhX2FyZywgMjU1KTsKLQotCWlmICghc3RybGVuKGRhdGEpKSB7Ci0JCWxvZ19lcnJvcigibm8gbW91bnQgb3B0aW9ucywgKHUpbW91bnQgaGVscGVycyBub3QgaW5zdGFsbGVkIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWZvciAob3B0aW9ucyA9IGRhdGE7ICh4ID0gc3Ryc2VwKCZvcHRpb25zLCAiOiIpKTsgKSB7Ci0JCWlmICghKngpCi0JCQljb250aW51ZTsKLQotCQl5ID0gc3RyY2hyKHgsICc9Jyk7Ci0JCWlmICh5KQotCQkJKnkrKyA9IDA7Ci0KLQkJaWYgKCFzdHJjbXAoeCwgImppZCIpKSB7Ci0JCQlpZiAoIXkpIHsKLQkJCQlsb2dfZXJyb3IoIm5lZWQgYXJndW1lbnQgdG8gamlkIik7Ci0JCQkJZXJyb3IgPSAtRUlOVkFMOwotCQkJCWJyZWFrOwotCQkJfQotCQkJc3NjYW5mKHksICIldSIsICZscy0+amlkKTsKLQotCQl9IGVsc2UgaWYgKCFzdHJjbXAoeCwgImZpcnN0IikpIHsKLQkJCWlmICgheSkgewotCQkJCWxvZ19lcnJvcigibmVlZCBhcmd1bWVudCB0byBmaXJzdCIpOwotCQkJCWVycm9yID0gLUVJTlZBTDsKLQkJCQlicmVhazsKLQkJCX0KLQkJCXNzY2FuZih5LCAiJXUiLCAmbHMtPmZpcnN0KTsKLQotCQl9IGVsc2UgaWYgKCFzdHJjbXAoeCwgImlkIikpIHsKLQkJCWlmICgheSkgewotCQkJCWxvZ19lcnJvcigibmVlZCBhcmd1bWVudCB0byBpZCIpOwotCQkJCWVycm9yID0gLUVJTlZBTDsKLQkJCQlicmVhazsKLQkJCX0KLQkJCXNzY2FuZih5LCAiJXUiLCAmbHMtPmlkKTsKLQotCQl9IGVsc2UgaWYgKCFzdHJjbXAoeCwgIm5vZGlyIikpIHsKLQkJCWlmICgheSkgewotCQkJCWxvZ19lcnJvcigibmVlZCBhcmd1bWVudCB0byBub2RpciIpOwotCQkJCWVycm9yID0gLUVJTlZBTDsKLQkJCQlicmVhazsKLQkJCX0KLQkJCXNzY2FuZih5LCAiJXUiLCBub2Rpcik7Ci0KLQkJfSBlbHNlIHsKLQkJCWxvZ19lcnJvcigidW5rb253biBvcHRpb246ICVzIiwgeCk7Ci0JCQllcnJvciA9IC1FSU5WQUw7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCXJldHVybiBlcnJvcjsKLX0KLQotc3RhdGljIGludCBnZGxtX21vdW50KGNoYXIgKnRhYmxlX25hbWUsIGNoYXIgKmhvc3RfZGF0YSwKLQkJCWxtX2NhbGxiYWNrX3QgY2IsIHZvaWQgKmNiX2RhdGEsCi0JCQl1bnNpZ25lZCBpbnQgbWluX2x2Yl9zaXplLCBpbnQgZmxhZ3MsCi0JCQlzdHJ1Y3QgbG1fbG9ja3N0cnVjdCAqbG9ja3N0cnVjdCwKLQkJCXN0cnVjdCBrb2JqZWN0ICpmc2tvYmopCi17Ci0Jc3RydWN0IGdkbG1fbHMgKmxzOwotCWludCBlcnJvciA9IC1FTk9NRU0sIG5vZGlyID0gMDsKLQotCWlmIChtaW5fbHZiX3NpemUgPiBHRExNX0xWQl9TSVpFKQotCQlnb3RvIG91dDsKLQotCWxzID0gaW5pdF9nZGxtKGNiLCBjYl9kYXRhLCBmbGFncywgdGFibGVfbmFtZSk7Ci0JaWYgKCFscykKLQkJZ290byBvdXQ7Ci0KLQllcnJvciA9IG1ha2VfYXJncyhscywgaG9zdF9kYXRhLCAmbm9kaXIpOwotCWlmIChlcnJvcikKLQkJZ290byBvdXQ7Ci0KLQllcnJvciA9IGdkbG1faW5pdF90aHJlYWRzKGxzKTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gb3V0X2ZyZWU7Ci0KLQllcnJvciA9IGdkbG1fa29iamVjdF9zZXR1cChscywgZnNrb2JqKTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gb3V0X3RocmVhZDsKLQotCWVycm9yID0gZGxtX25ld19sb2Nrc3BhY2UobHMtPmZzbmFtZSwgc3RybGVuKGxzLT5mc25hbWUpLAotCQkJCSAgJmxzLT5kbG1fbG9ja3NwYWNlLAotCQkJCSAgRExNX0xTRkxfRlMgfCBETE1fTFNGTF9ORVdFWENMIHwKLQkJCQkgIChub2RpciA/IERMTV9MU0ZMX05PRElSIDogMCksCi0JCQkJICBHRExNX0xWQl9TSVpFKTsKLQlpZiAoZXJyb3IpIHsKLQkJbG9nX2Vycm9yKCJkbG1fbmV3X2xvY2tzcGFjZSBlcnJvciAlZCIsIGVycm9yKTsKLQkJZ290byBvdXRfa29iajsKLQl9Ci0KLQlsb2Nrc3RydWN0LT5sc19qaWQgPSBscy0+amlkOwotCWxvY2tzdHJ1Y3QtPmxzX2ZpcnN0ID0gbHMtPmZpcnN0OwotCWxvY2tzdHJ1Y3QtPmxzX2xvY2tzcGFjZSA9IGxzOwotCWxvY2tzdHJ1Y3QtPmxzX29wcyA9ICZnZGxtX29wczsKLQlsb2Nrc3RydWN0LT5sc19mbGFncyA9IDA7Ci0JbG9ja3N0cnVjdC0+bHNfbHZiX3NpemUgPSBHRExNX0xWQl9TSVpFOwotCXJldHVybiAwOwotCi1vdXRfa29iajoKLQlnZGxtX2tvYmplY3RfcmVsZWFzZShscyk7Ci1vdXRfdGhyZWFkOgotCWdkbG1fcmVsZWFzZV90aHJlYWRzKGxzKTsKLW91dF9mcmVlOgotCWtmcmVlKGxzKTsKLW91dDoKLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLXN0YXRpYyB2b2lkIGdkbG1fdW5tb3VudCh2b2lkICpsb2Nrc3BhY2UpCi17Ci0Jc3RydWN0IGdkbG1fbHMgKmxzID0gbG9ja3NwYWNlOwotCi0JbG9nX2RlYnVnKCJ1bm1vdW50IGZsYWdzICVseCIsIGxzLT5mbGFncyk7Ci0KLQkvKiBGSVhNRTogc2VyaWFsaXplIHVubW91bnQgYW5kIHdpdGhkcmF3IGluIGNhc2UgdGhleQotCSAgIGhhcHBlbiBhdCBvbmNlLiAgQWxzbywgaWYgdW5tb3VudCBmb2xsb3dzIHdpdGhkcmF3LAotCSAgIHdhaXQgZm9yIHdpdGhkcmF3IHRvIGZpbmlzaC4gKi8KLQotCWlmICh0ZXN0X2JpdChERkxfV0lUSERSQVcsICZscy0+ZmxhZ3MpKQotCQlnb3RvIG91dDsKLQotCWdkbG1fa29iamVjdF9yZWxlYXNlKGxzKTsKLQlkbG1fcmVsZWFzZV9sb2Nrc3BhY2UobHMtPmRsbV9sb2Nrc3BhY2UsIDIpOwotCWdkbG1fcmVsZWFzZV90aHJlYWRzKGxzKTsKLQlCVUdfT04obHMtPmFsbF9sb2Nrc19jb3VudCk7Ci1vdXQ6Ci0Ja2ZyZWUobHMpOwotfQotCi1zdGF0aWMgdm9pZCBnZGxtX3JlY292ZXJ5X2RvbmUodm9pZCAqbG9ja3NwYWNlLCB1bnNpZ25lZCBpbnQgamlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBtZXNzYWdlKQotewotCWNoYXIgZW52X2ppZFsyMF07Ci0JY2hhciBlbnZfc3RhdHVzWzIwXTsKLQljaGFyICplbnZwW10gPSB7IGVudl9qaWQsIGVudl9zdGF0dXMsIE5VTEwgfTsKLQlzdHJ1Y3QgZ2RsbV9scyAqbHMgPSBsb2Nrc3BhY2U7Ci0JbHMtPnJlY292ZXJfamlkX2RvbmUgPSBqaWQ7Ci0JbHMtPnJlY292ZXJfamlkX3N0YXR1cyA9IG1lc3NhZ2U7Ci0Jc3ByaW50ZihlbnZfamlkLCAiSklEPSVkIiwgamlkKTsKLQlzcHJpbnRmKGVudl9zdGF0dXMsICJSRUNPVkVSWT0lcyIsCi0JCW1lc3NhZ2UgPT0gTE1fUkRfU1VDQ0VTUyA/ICJEb25lIiA6ICJGYWlsZWQiKTsKLQlrb2JqZWN0X3VldmVudF9lbnYoJmxzLT5rb2JqLCBLT0JKX0NIQU5HRSwgZW52cCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGdkbG1fb3RoZXJzX21heV9tb3VudCh2b2lkICpsb2Nrc3BhY2UpCi17Ci0JY2hhciAqbWVzc2FnZSA9ICJGSVJTVE1PVU5UPURvbmUiOwotCWNoYXIgKmVudnBbXSA9IHsgbWVzc2FnZSwgTlVMTCB9OwotCXN0cnVjdCBnZGxtX2xzICpscyA9IGxvY2tzcGFjZTsKLQlscy0+Zmlyc3RfZG9uZSA9IDE7Ci0Ja29iamVjdF91ZXZlbnRfZW52KCZscy0+a29iaiwgS09CSl9DSEFOR0UsIGVudnApOwotfQotCi0vKiBVc2Vyc3BhY2UgZ2V0cyB0aGUgb2ZmbGluZSB1ZXZlbnQsIGJsb2NrcyBuZXcgZ2ZzIGxvY2tzIG9uCi0gICBvdGhlciBtb3VudGVycywgYW5kIGxldHMgdXMga25vdyAoc2V0cyBXSVRIRFJBVyBmbGFnKS4gIFRoZW4sCi0gICB1c2Vyc3BhY2UgbGVhdmVzIHRoZSBtb3VudCBncm91cCB3aGlsZSB3ZSBsZWF2ZSB0aGUgbG9ja3NwYWNlLiAqLwotCi1zdGF0aWMgdm9pZCBnZGxtX3dpdGhkcmF3KHZvaWQgKmxvY2tzcGFjZSkKLXsKLQlzdHJ1Y3QgZ2RsbV9scyAqbHMgPSBsb2Nrc3BhY2U7Ci0KLQlrb2JqZWN0X3VldmVudCgmbHMtPmtvYmosIEtPQkpfT0ZGTElORSk7Ci0KLQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUobHMtPndhaXRfY29udHJvbCwKLQkJCQkgdGVzdF9iaXQoREZMX1dJVEhEUkFXLCAmbHMtPmZsYWdzKSk7Ci0KLQlkbG1fcmVsZWFzZV9sb2Nrc3BhY2UobHMtPmRsbV9sb2Nrc3BhY2UsIDIpOwotCWdkbG1fcmVsZWFzZV90aHJlYWRzKGxzKTsKLQlnZGxtX2tvYmplY3RfcmVsZWFzZShscyk7Ci19Ci0KLXN0YXRpYyBpbnQgZ2RsbV9wbG9jayh2b2lkICpsb2Nrc3BhY2UsIHN0cnVjdCBsbV9sb2NrbmFtZSAqbmFtZSwKLQkgICAgICAgc3RydWN0IGZpbGUgKmZpbGUsIGludCBjbWQsIHN0cnVjdCBmaWxlX2xvY2sgKmZsKQotewotCXN0cnVjdCBnZGxtX2xzICpscyA9IGxvY2tzcGFjZTsKLQlyZXR1cm4gZGxtX3Bvc2l4X2xvY2sobHMtPmRsbV9sb2Nrc3BhY2UsIG5hbWUtPmxuX251bWJlciwgZmlsZSwgY21kLCBmbCk7Ci19Ci0KLXN0YXRpYyBpbnQgZ2RsbV9wdW5sb2NrKHZvaWQgKmxvY2tzcGFjZSwgc3RydWN0IGxtX2xvY2tuYW1lICpuYW1lLAotCQkgc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmaWxlX2xvY2sgKmZsKQotewotCXN0cnVjdCBnZGxtX2xzICpscyA9IGxvY2tzcGFjZTsKLQlyZXR1cm4gZGxtX3Bvc2l4X3VubG9jayhscy0+ZGxtX2xvY2tzcGFjZSwgbmFtZS0+bG5fbnVtYmVyLCBmaWxlLCBmbCk7Ci19Ci0KLXN0YXRpYyBpbnQgZ2RsbV9wbG9ja19nZXQodm9pZCAqbG9ja3NwYWNlLCBzdHJ1Y3QgbG1fbG9ja25hbWUgKm5hbWUsCi0JCSAgIHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbCkKLXsKLQlzdHJ1Y3QgZ2RsbV9scyAqbHMgPSBsb2Nrc3BhY2U7Ci0JcmV0dXJuIGRsbV9wb3NpeF9nZXQobHMtPmRsbV9sb2Nrc3BhY2UsIG5hbWUtPmxuX251bWJlciwgZmlsZSwgZmwpOwotfQotCi1jb25zdCBzdHJ1Y3QgbG1fbG9ja29wcyBnZGxtX29wcyA9IHsKLQkubG1fcHJvdG9fbmFtZSA9ICJsb2NrX2RsbSIsCi0JLmxtX21vdW50ID0gZ2RsbV9tb3VudCwKLQkubG1fb3RoZXJzX21heV9tb3VudCA9IGdkbG1fb3RoZXJzX21heV9tb3VudCwKLQkubG1fdW5tb3VudCA9IGdkbG1fdW5tb3VudCwKLQkubG1fd2l0aGRyYXcgPSBnZGxtX3dpdGhkcmF3LAotCS5sbV9nZXRfbG9jayA9IGdkbG1fZ2V0X2xvY2ssCi0JLmxtX3B1dF9sb2NrID0gZ2RsbV9wdXRfbG9jaywKLQkubG1fbG9jayA9IGdkbG1fbG9jaywKLQkubG1fdW5sb2NrID0gZ2RsbV91bmxvY2ssCi0JLmxtX3Bsb2NrID0gZ2RsbV9wbG9jaywKLQkubG1fcHVubG9jayA9IGdkbG1fcHVubG9jaywKLQkubG1fcGxvY2tfZ2V0ID0gZ2RsbV9wbG9ja19nZXQsCi0JLmxtX2NhbmNlbCA9IGdkbG1fY2FuY2VsLAotCS5sbV9ob2xkX2x2YiA9IGdkbG1faG9sZF9sdmIsCi0JLmxtX3VuaG9sZF9sdmIgPSBnZGxtX3VuaG9sZF9sdmIsCi0JLmxtX3JlY292ZXJ5X2RvbmUgPSBnZGxtX3JlY292ZXJ5X2RvbmUsCi0JLmxtX293bmVyID0gVEhJU19NT0RVTEUsCi19OwotCmRpZmYgLS1naXQgYS9mcy9nZnMyL2xvY2tpbmcvZGxtL3N5c2ZzLmMgYi9mcy9nZnMyL2xvY2tpbmcvZGxtL3N5c2ZzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliN2VkY2YuLjAwMDAwMDAKLS0tIGEvZnMvZ2ZzMi9sb2NraW5nL2RsbS9zeXNmcy5jCisrKyAvZGV2L251bGwKQEAgLTEsMjI2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIFNpc3RpbmEgU29mdHdhcmUsIEluYy4gIDE5OTctMjAwMyBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUgUmVkIEhhdCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGNvcHlyaWdodGVkIG1hdGVyaWFsIGlzIG1hZGUgYXZhaWxhYmxlIHRvIGFueW9uZSB3aXNoaW5nIHRvIHVzZSwKLSAqIG1vZGlmeSwgY29weSwgb3IgcmVkaXN0cmlidXRlIGl0IHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCi0gKiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgotI2luY2x1ZGUgPGxpbnV4L3N0YXQuaD4KLQotI2luY2x1ZGUgImxvY2tfZGxtLmgiCi0KLXN0YXRpYyBzc2l6ZV90IHByb3RvX25hbWVfc2hvdyhzdHJ1Y3QgZ2RsbV9scyAqbHMsIGNoYXIgKmJ1ZikKLXsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgZ2RsbV9vcHMubG1fcHJvdG9fbmFtZSk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGJsb2NrX3Nob3coc3RydWN0IGdkbG1fbHMgKmxzLCBjaGFyICpidWYpCi17Ci0Jc3NpemVfdCByZXQ7Ci0JaW50IHZhbCA9IDA7Ci0KLQlpZiAodGVzdF9iaXQoREZMX0JMT0NLX0xPQ0tTLCAmbHMtPmZsYWdzKSkKLQkJdmFsID0gMTsKLQlyZXQgPSBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCB2YWwpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGJsb2NrX3N0b3JlKHN0cnVjdCBnZGxtX2xzICpscywgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQotewotCXNzaXplX3QgcmV0ID0gbGVuOwotCWludCB2YWw7Ci0KLQl2YWwgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMCk7Ci0KLQlpZiAodmFsID09IDEpCi0JCXNldF9iaXQoREZMX0JMT0NLX0xPQ0tTLCAmbHMtPmZsYWdzKTsKLQllbHNlIGlmICh2YWwgPT0gMCkgewotCQljbGVhcl9iaXQoREZMX0JMT0NLX0xPQ0tTLCAmbHMtPmZsYWdzKTsKLQkJZ2RsbV9zdWJtaXRfZGVsYXllZChscyk7Ci0JfSBlbHNlIHsKLQkJcmV0ID0gLUVJTlZBTDsKLQl9Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHNzaXplX3Qgd2l0aGRyYXdfc2hvdyhzdHJ1Y3QgZ2RsbV9scyAqbHMsIGNoYXIgKmJ1ZikKLXsKLQlzc2l6ZV90IHJldDsKLQlpbnQgdmFsID0gMDsKLQotCWlmICh0ZXN0X2JpdChERkxfV0lUSERSQVcsICZscy0+ZmxhZ3MpKQotCQl2YWwgPSAxOwotCXJldCA9IHNwcmludGYoYnVmLCAiJWRcbiIsIHZhbCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHNzaXplX3Qgd2l0aGRyYXdfc3RvcmUoc3RydWN0IGdkbG1fbHMgKmxzLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCi17Ci0Jc3NpemVfdCByZXQgPSBsZW47Ci0JaW50IHZhbDsKLQotCXZhbCA9IHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAwKTsKLQotCWlmICh2YWwgPT0gMSkKLQkJc2V0X2JpdChERkxfV0lUSERSQVcsICZscy0+ZmxhZ3MpOwotCWVsc2UKLQkJcmV0ID0gLUVJTlZBTDsKLQl3YWtlX3VwKCZscy0+d2FpdF9jb250cm9sKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgc3NpemVfdCBpZF9zaG93KHN0cnVjdCBnZGxtX2xzICpscywgY2hhciAqYnVmKQotewotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBscy0+aWQpOwotfQotCi1zdGF0aWMgc3NpemVfdCBqaWRfc2hvdyhzdHJ1Y3QgZ2RsbV9scyAqbHMsIGNoYXIgKmJ1ZikKLXsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgbHMtPmppZCk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGZpcnN0X3Nob3coc3RydWN0IGdkbG1fbHMgKmxzLCBjaGFyICpidWYpCi17Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGxzLT5maXJzdCk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGZpcnN0X2RvbmVfc2hvdyhzdHJ1Y3QgZ2RsbV9scyAqbHMsIGNoYXIgKmJ1ZikKLXsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgbHMtPmZpcnN0X2RvbmUpOwotfQotCi1zdGF0aWMgc3NpemVfdCByZWNvdmVyX3Nob3coc3RydWN0IGdkbG1fbHMgKmxzLCBjaGFyICpidWYpCi17Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGxzLT5yZWNvdmVyX2ppZCk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHJlY292ZXJfc3RvcmUoc3RydWN0IGdkbG1fbHMgKmxzLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCi17Ci0JbHMtPnJlY292ZXJfamlkID0gc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDApOwotCWxzLT5mc2NiKGxzLT5zZHAsIExNX0NCX05FRURfUkVDT1ZFUlksICZscy0+cmVjb3Zlcl9qaWQpOwotCXJldHVybiBsZW47Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHJlY292ZXJfZG9uZV9zaG93KHN0cnVjdCBnZGxtX2xzICpscywgY2hhciAqYnVmKQotewotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBscy0+cmVjb3Zlcl9qaWRfZG9uZSk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHJlY292ZXJfc3RhdHVzX3Nob3coc3RydWN0IGdkbG1fbHMgKmxzLCBjaGFyICpidWYpCi17Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGxzLT5yZWNvdmVyX2ppZF9zdGF0dXMpOwotfQotCi1zdHJ1Y3QgZ2RsbV9hdHRyIHsKLQlzdHJ1Y3QgYXR0cmlidXRlIGF0dHI7Ci0Jc3NpemVfdCAoKnNob3cpKHN0cnVjdCBnZGxtX2xzICosIGNoYXIgKik7Ci0Jc3NpemVfdCAoKnN0b3JlKShzdHJ1Y3QgZ2RsbV9scyAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7Ci19OwotCi0jZGVmaW5lIEdETE1fQVRUUihfbmFtZSxfbW9kZSxfc2hvdyxfc3RvcmUpIFwKLXN0YXRpYyBzdHJ1Y3QgZ2RsbV9hdHRyIGdkbG1fYXR0cl8jI19uYW1lID0gX19BVFRSKF9uYW1lLF9tb2RlLF9zaG93LF9zdG9yZSkKLQotR0RMTV9BVFRSKHByb3RvX25hbWUsICAgICAwNDQ0LCBwcm90b19uYW1lX3Nob3csICAgICBOVUxMKTsKLUdETE1fQVRUUihibG9jaywgICAgICAgICAgMDY0NCwgYmxvY2tfc2hvdywgICAgICAgICAgYmxvY2tfc3RvcmUpOwotR0RMTV9BVFRSKHdpdGhkcmF3LCAgICAgICAwNjQ0LCB3aXRoZHJhd19zaG93LCAgICAgICB3aXRoZHJhd19zdG9yZSk7Ci1HRExNX0FUVFIoaWQsICAgICAgICAgICAgIDA0NDQsIGlkX3Nob3csICAgICAgICAgICAgIE5VTEwpOwotR0RMTV9BVFRSKGppZCwgICAgICAgICAgICAwNDQ0LCBqaWRfc2hvdywgICAgICAgICAgICBOVUxMKTsKLUdETE1fQVRUUihmaXJzdCwgICAgICAgICAgMDQ0NCwgZmlyc3Rfc2hvdywgICAgICAgICAgTlVMTCk7Ci1HRExNX0FUVFIoZmlyc3RfZG9uZSwgICAgIDA0NDQsIGZpcnN0X2RvbmVfc2hvdywgICAgIE5VTEwpOwotR0RMTV9BVFRSKHJlY292ZXIsICAgICAgICAwNjQ0LCByZWNvdmVyX3Nob3csICAgICAgICByZWNvdmVyX3N0b3JlKTsKLUdETE1fQVRUUihyZWNvdmVyX2RvbmUsICAgMDQ0NCwgcmVjb3Zlcl9kb25lX3Nob3csICAgTlVMTCk7Ci1HRExNX0FUVFIocmVjb3Zlcl9zdGF0dXMsIDA0NDQsIHJlY292ZXJfc3RhdHVzX3Nob3csIE5VTEwpOwotCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZ2RsbV9hdHRyc1tdID0gewotCSZnZGxtX2F0dHJfcHJvdG9fbmFtZS5hdHRyLAotCSZnZGxtX2F0dHJfYmxvY2suYXR0ciwKLQkmZ2RsbV9hdHRyX3dpdGhkcmF3LmF0dHIsCi0JJmdkbG1fYXR0cl9pZC5hdHRyLAotCSZnZGxtX2F0dHJfamlkLmF0dHIsCi0JJmdkbG1fYXR0cl9maXJzdC5hdHRyLAotCSZnZGxtX2F0dHJfZmlyc3RfZG9uZS5hdHRyLAotCSZnZGxtX2F0dHJfcmVjb3Zlci5hdHRyLAotCSZnZGxtX2F0dHJfcmVjb3Zlcl9kb25lLmF0dHIsCi0JJmdkbG1fYXR0cl9yZWNvdmVyX3N0YXR1cy5hdHRyLAotCU5VTEwsCi19OwotCi1zdGF0aWMgc3NpemVfdCBnZGxtX2F0dHJfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwKLQkJCSAgICAgIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgZ2RsbV9scyAqbHMgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGdkbG1fbHMsIGtvYmopOwotCXN0cnVjdCBnZGxtX2F0dHIgKmEgPSBjb250YWluZXJfb2YoYXR0ciwgc3RydWN0IGdkbG1fYXR0ciwgYXR0cik7Ci0JcmV0dXJuIGEtPnNob3cgPyBhLT5zaG93KGxzLCBidWYpIDogMDsKLX0KLQotc3RhdGljIHNzaXplX3QgZ2RsbV9hdHRyX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLAotCQkJICAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKLXsKLQlzdHJ1Y3QgZ2RsbV9scyAqbHMgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGdkbG1fbHMsIGtvYmopOwotCXN0cnVjdCBnZGxtX2F0dHIgKmEgPSBjb250YWluZXJfb2YoYXR0ciwgc3RydWN0IGdkbG1fYXR0ciwgYXR0cik7Ci0JcmV0dXJuIGEtPnN0b3JlID8gYS0+c3RvcmUobHMsIGJ1ZiwgbGVuKSA6IGxlbjsKLX0KLQotc3RhdGljIHN0cnVjdCBzeXNmc19vcHMgZ2RsbV9hdHRyX29wcyA9IHsKLQkuc2hvdyAgPSBnZGxtX2F0dHJfc2hvdywKLQkuc3RvcmUgPSBnZGxtX2F0dHJfc3RvcmUsCi19OwotCi1zdGF0aWMgc3RydWN0IGtvYmpfdHlwZSBnZGxtX2t0eXBlID0gewotCS5kZWZhdWx0X2F0dHJzID0gZ2RsbV9hdHRycywKLQkuc3lzZnNfb3BzICAgICA9ICZnZGxtX2F0dHJfb3BzLAotfTsKLQotc3RhdGljIHN0cnVjdCBrc2V0ICpnZGxtX2tzZXQ7Ci0KLWludCBnZGxtX2tvYmplY3Rfc2V0dXAoc3RydWN0IGdkbG1fbHMgKmxzLCBzdHJ1Y3Qga29iamVjdCAqZnNrb2JqKQotewotCWludCBlcnJvcjsKLQotCWxzLT5rb2JqLmtzZXQgPSBnZGxtX2tzZXQ7Ci0JZXJyb3IgPSBrb2JqZWN0X2luaXRfYW5kX2FkZCgmbHMtPmtvYmosICZnZGxtX2t0eXBlLCBmc2tvYmosCi0JCQkJICAgICAibG9ja19tb2R1bGUiKTsKLQlpZiAoZXJyb3IpCi0JCWxvZ19lcnJvcigiY2FuJ3QgcmVnaXN0ZXIga29iaiAlZCIsIGVycm9yKTsKLQlrb2JqZWN0X3VldmVudCgmbHMtPmtvYmosIEtPQkpfQUREKTsKLQotCXJldHVybiBlcnJvcjsKLX0KLQotdm9pZCBnZGxtX2tvYmplY3RfcmVsZWFzZShzdHJ1Y3QgZ2RsbV9scyAqbHMpCi17Ci0Ja29iamVjdF9wdXQoJmxzLT5rb2JqKTsKLX0KLQotc3RhdGljIGludCBnZGxtX3VldmVudChzdHJ1Y3Qga3NldCAqa3NldCwgc3RydWN0IGtvYmplY3QgKmtvYmosCi0JCSAgICAgICBzdHJ1Y3Qga29ial91ZXZlbnRfZW52ICplbnYpCi17Ci0gICAgICAgIHN0cnVjdCBnZGxtX2xzICpscyA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZ2RsbV9scywga29iaik7Ci0gICAgICAgIGFkZF91ZXZlbnRfdmFyKGVudiwgIkxPQ0tUQUJMRT0lczolcyIsIGxzLT5jbHVzdGVybmFtZSwgbHMtPmZzbmFtZSk7Ci0gICAgICAgIGFkZF91ZXZlbnRfdmFyKGVudiwgIkxPQ0tQUk9UTz1sb2NrX2RsbSIpOwotICAgICAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBrc2V0X3VldmVudF9vcHMgZ2RsbV91ZXZlbnRfb3BzID0gewotCS51ZXZlbnQgPSBnZGxtX3VldmVudCwKLX07Ci0KLQotaW50IGdkbG1fc3lzZnNfaW5pdCh2b2lkKQotewotCWdkbG1fa3NldCA9IGtzZXRfY3JlYXRlX2FuZF9hZGQoImxvY2tfZGxtIiwgJmdkbG1fdWV2ZW50X29wcywga2VybmVsX2tvYmopOwotCWlmICghZ2RsbV9rc2V0KSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBjYW4gbm90IGNyZWF0ZSBrc2V0XG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotdm9pZCBnZGxtX3N5c2ZzX2V4aXQodm9pZCkKLXsKLQlrc2V0X3VucmVnaXN0ZXIoZ2RsbV9rc2V0KTsKLX0KLQpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9sb2NraW5nL2RsbS90aHJlYWQuYyBiL2ZzL2dmczIvbG9ja2luZy9kbG0vdGhyZWFkLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4ODIzZWYuLjAwMDAwMDAKLS0tIGEvZnMvZ2ZzMi9sb2NraW5nL2RsbS90aHJlYWQuYworKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIFNpc3RpbmEgU29mdHdhcmUsIEluYy4gIDE5OTctMjAwMyBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUgUmVkIEhhdCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGNvcHlyaWdodGVkIG1hdGVyaWFsIGlzIG1hZGUgYXZhaWxhYmxlIHRvIGFueW9uZSB3aXNoaW5nIHRvIHVzZSwKLSAqIG1vZGlmeSwgY29weSwgb3IgcmVkaXN0cmlidXRlIGl0IHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCi0gKiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLgotICovCi0KLSNpbmNsdWRlICJsb2NrX2RsbS5oIgotCi1zdGF0aWMgaW5saW5lIGludCBub193b3JrKHN0cnVjdCBnZGxtX2xzICpscykKLXsKLQlpbnQgcmV0OwotCi0Jc3Bpbl9sb2NrKCZscy0+YXN5bmNfbG9jayk7Ci0JcmV0ID0gbGlzdF9lbXB0eSgmbHMtPnN1Ym1pdCk7Ci0Jc3Bpbl91bmxvY2soJmxzLT5hc3luY19sb2NrKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgZ2RsbV90aHJlYWQodm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgZ2RsbV9scyAqbHMgPSAoc3RydWN0IGdkbG1fbHMgKikgZGF0YTsKLQlzdHJ1Y3QgZ2RsbV9sb2NrICpscCA9IE5VTEw7Ci0KLQl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgewotCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUobHMtPnRocmVhZF93YWl0LAotCQkJCSFub193b3JrKGxzKSB8fCBrdGhyZWFkX3Nob3VsZF9zdG9wKCkpOwotCi0JCXNwaW5fbG9jaygmbHMtPmFzeW5jX2xvY2spOwotCi0JCWlmICghbGlzdF9lbXB0eSgmbHMtPnN1Ym1pdCkpIHsKLQkJCWxwID0gbGlzdF9lbnRyeShscy0+c3VibWl0Lm5leHQsIHN0cnVjdCBnZGxtX2xvY2ssCi0JCQkJCWRlbGF5X2xpc3QpOwotCQkJbGlzdF9kZWxfaW5pdCgmbHAtPmRlbGF5X2xpc3QpOwotCQkJc3Bpbl91bmxvY2soJmxzLT5hc3luY19sb2NrKTsKLQkJCWdkbG1fZG9fbG9jayhscCk7Ci0JCQlzcGluX2xvY2soJmxzLT5hc3luY19sb2NrKTsKLQkJfQotCQlzcGluX3VubG9jaygmbHMtPmFzeW5jX2xvY2spOwotCX0KLQotCXJldHVybiAwOwotfQotCi1pbnQgZ2RsbV9pbml0X3RocmVhZHMoc3RydWN0IGdkbG1fbHMgKmxzKQotewotCXN0cnVjdCB0YXNrX3N0cnVjdCAqcDsKLQlpbnQgZXJyb3I7Ci0KLQlwID0ga3RocmVhZF9ydW4oZ2RsbV90aHJlYWQsIGxzLCAibG9ja19kbG0iKTsKLQllcnJvciA9IElTX0VSUihwKTsKLQlpZiAoZXJyb3IpIHsKLQkJbG9nX2Vycm9yKCJjYW4ndCBzdGFydCBsb2NrX2RsbSB0aHJlYWQgJWQiLCBlcnJvcik7Ci0JCXJldHVybiBlcnJvcjsKLQl9Ci0JbHMtPnRocmVhZCA9IHA7Ci0KLQlyZXR1cm4gMDsKLX0KLQotdm9pZCBnZGxtX3JlbGVhc2VfdGhyZWFkcyhzdHJ1Y3QgZ2RsbV9scyAqbHMpCi17Ci0Ja3RocmVhZF9zdG9wKGxzLT50aHJlYWQpOwotfQotCmRpZmYgLS1naXQgYS9mcy9nZnMyL2xvZy5jIGIvZnMvZ2ZzMi9sb2cuYwppbmRleCBhZDMwNTg1Li45ODkxOGE3IDEwMDY0NAotLS0gYS9mcy9nZnMyL2xvZy5jCisrKyBiL2ZzL2dmczIvbG9nLmMKQEAgLTE0LDcgKzE0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L2dmczJfb25kaXNrLmg+CiAjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KLSNpbmNsdWRlIDxsaW51eC9sbV9pbnRlcmZhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9mcmVlemVyLmg+CmRpZmYgLS1naXQgYS9mcy9nZnMyL2xvcHMuYyBiL2ZzL2dmczIvbG9wcy5jCmluZGV4IDQzOTBmNmYuLjgwZTRmNWYgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvbG9wcy5jCisrKyBiL2ZzL2dmczIvbG9wcy5jCkBAIC0xMyw3ICsxMyw2IEBACiAjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZzMl9vbmRpc2suaD4KLSNpbmNsdWRlIDxsaW51eC9sbV9pbnRlcmZhY2UuaD4KIAogI2luY2x1ZGUgImdmczIuaCIKICNpbmNsdWRlICJpbmNvcmUuaCIKZGlmZiAtLWdpdCBhL2ZzL2dmczIvbWFpbi5jIGIvZnMvZ2ZzMi9tYWluLmMKaW5kZXggN2NhY2ZkZS4uYTY4OTJlZCAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9tYWluLmMKKysrIGIvZnMvZ2ZzMi9tYWluLmMKQEAgLTE0LDcgKzE0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZzMl9vbmRpc2suaD4KLSNpbmNsdWRlIDxsaW51eC9sbV9pbnRlcmZhY2UuaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAKICNpbmNsdWRlICJnZnMyLmgiCkBAIC0yMyw2ICsyMiwxMiBAQAogI2luY2x1ZGUgInN5cy5oIgogI2luY2x1ZGUgInV0aWwuaCIKICNpbmNsdWRlICJnbG9jay5oIgorI2luY2x1ZGUgInF1b3RhLmgiCisKK3N0YXRpYyBzdHJ1Y3Qgc2hyaW5rZXIgcWRfc2hyaW5rZXIgPSB7CisJLnNocmluayA9IGdmczJfc2hyaW5rX3FkX21lbW9yeSwKKwkuc2Vla3MgPSBERUZBVUxUX1NFRUtTLAorfTsKIAogc3RhdGljIHZvaWQgZ2ZzMl9pbml0X2lub2RlX29uY2Uodm9pZCAqZm9vKQogewpAQCAtNDEsOCArNDYsNiBAQAogCUlOSVRfSExJU1RfTk9ERSgmZ2wtPmdsX2xpc3QpOwogCXNwaW5fbG9ja19pbml0KCZnbC0+Z2xfc3Bpbik7CiAJSU5JVF9MSVNUX0hFQUQoJmdsLT5nbF9ob2xkZXJzKTsKLQlnbC0+Z2xfbHZiID0gTlVMTDsKLQlhdG9taWNfc2V0KCZnbC0+Z2xfbHZiX2NvdW50LCAwKTsKIAlJTklUX0xJU1RfSEVBRCgmZ2wtPmdsX2xydSk7CiAJSU5JVF9MSVNUX0hFQUQoJmdsLT5nbF9haWxfbGlzdCk7CiAJYXRvbWljX3NldCgmZ2wtPmdsX2FpbF9jb3VudCwgMCk7CkBAIC0xMDAsNiArMTAzLDggQEAKIAlpZiAoIWdmczJfcXVvdGFkX2NhY2hlcCkKIAkJZ290byBmYWlsOwogCisJcmVnaXN0ZXJfc2hyaW5rZXIoJnFkX3Nocmlua2VyKTsKKwogCWVycm9yID0gcmVnaXN0ZXJfZmlsZXN5c3RlbSgmZ2ZzMl9mc190eXBlKTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gZmFpbDsKQEAgLTExNyw2ICsxMjIsNyBAQAogZmFpbF91bnJlZ2lzdGVyOgogCXVucmVnaXN0ZXJfZmlsZXN5c3RlbSgmZ2ZzMl9mc190eXBlKTsKIGZhaWw6CisJdW5yZWdpc3Rlcl9zaHJpbmtlcigmcWRfc2hyaW5rZXIpOwogCWdmczJfZ2xvY2tfZXhpdCgpOwogCiAJaWYgKGdmczJfcXVvdGFkX2NhY2hlcCkKQEAgLTE0NSw2ICsxNTEsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9nZnMyX2ZzKHZvaWQpCiB7CisJdW5yZWdpc3Rlcl9zaHJpbmtlcigmcWRfc2hyaW5rZXIpOwogCWdmczJfZ2xvY2tfZXhpdCgpOwogCWdmczJfdW5yZWdpc3Rlcl9kZWJ1Z2ZzKCk7CiAJdW5yZWdpc3Rlcl9maWxlc3lzdGVtKCZnZnMyX2ZzX3R5cGUpOwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9tZXRhX2lvLmMgYi9mcy9nZnMyL21ldGFfaW8uYwppbmRleCAwOTg1MzYyLi44ZDZmMTMyIDEwMDY0NAotLS0gYS9mcy9nZnMyL21ldGFfaW8uYworKysgYi9mcy9nZnMyL21ldGFfaW8uYwpAQCAtMTksNyArMTksNiBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvYmlvLmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZzMl9vbmRpc2suaD4KLSNpbmNsdWRlIDxsaW51eC9sbV9pbnRlcmZhY2UuaD4KIAogI2luY2x1ZGUgImdmczIuaCIKICNpbmNsdWRlICJpbmNvcmUuaCIKQEAgLTkwLDI3ICs4OSw2IEBACiB9CiAKIC8qKgotICogZ2ZzMl9tZXRhX2ludmFsIC0gSW52YWxpZGF0ZSBhbGwgYnVmZmVycyBhc3NvY2lhdGVkIHdpdGggYSBnbG9jawotICogQGdsOiB0aGUgZ2xvY2sKLSAqCi0gKi8KLQotdm9pZCBnZnMyX21ldGFfaW52YWwoc3RydWN0IGdmczJfZ2xvY2sgKmdsKQotewotCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gZ2wtPmdsX3NiZDsKLQlzdHJ1Y3QgaW5vZGUgKmFzcGFjZSA9IGdsLT5nbF9hc3BhY2U7Ci0Jc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBnbC0+Z2xfYXNwYWNlLT5pX21hcHBpbmc7Ci0KLQlnZnMyX2Fzc2VydF93aXRoZHJhdyhzZHAsICFhdG9taWNfcmVhZCgmZ2wtPmdsX2FpbF9jb3VudCkpOwotCi0JYXRvbWljX2luYygmYXNwYWNlLT5pX3dyaXRlY291bnQpOwotCXRydW5jYXRlX2lub2RlX3BhZ2VzKG1hcHBpbmcsIDApOwotCWF0b21pY19kZWMoJmFzcGFjZS0+aV93cml0ZWNvdW50KTsKLQotCWdmczJfYXNzZXJ0X3dpdGhkcmF3KHNkcCwgIW1hcHBpbmctPm5ycGFnZXMpOwotfQotCi0vKioKICAqIGdmczJfbWV0YV9zeW5jIC0gU3luYyBhbGwgYnVmZmVycyBhc3NvY2lhdGVkIHdpdGggYSBnbG9jawogICogQGdsOiBUaGUgZ2xvY2sKICAqCmRpZmYgLS1naXQgYS9mcy9nZnMyL21ldGFfaW8uaCBiL2ZzL2dmczIvbWV0YV9pby5oCmluZGV4IGIxYTVmMzYuLmRlMjcwYzIgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvbWV0YV9pby5oCisrKyBiL2ZzL2dmczIvbWV0YV9pby5oCkBAIC00MCw3ICs0MCw2IEBACiBzdHJ1Y3QgaW5vZGUgKmdmczJfYXNwYWNlX2dldChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCk7CiB2b2lkIGdmczJfYXNwYWNlX3B1dChzdHJ1Y3QgaW5vZGUgKmFzcGFjZSk7CiAKLXZvaWQgZ2ZzMl9tZXRhX2ludmFsKHN0cnVjdCBnZnMyX2dsb2NrICpnbCk7CiB2b2lkIGdmczJfbWV0YV9zeW5jKHN0cnVjdCBnZnMyX2dsb2NrICpnbCk7CiAKIHN0cnVjdCBidWZmZXJfaGVhZCAqZ2ZzMl9tZXRhX25ldyhzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wsIHU2NCBibGtubyk7CmRpZmYgLS1naXQgYS9mcy9nZnMyL21vdW50LmMgYi9mcy9nZnMyL21vdW50LmMKaW5kZXggM2NiMGE0NC4uZjdlODUyNyAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9tb3VudC5jCisrKyBiL2ZzL2dmczIvbW91bnQuYwpAQCAtMTIsMTIgKzEyLDExIEBACiAjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZzMl9vbmRpc2suaD4KLSNpbmNsdWRlIDxsaW51eC9sbV9pbnRlcmZhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9wYXJzZXIuaD4KIAogI2luY2x1ZGUgImdmczIuaCIKICNpbmNsdWRlICJpbmNvcmUuaCIKLSNpbmNsdWRlICJtb3VudC5oIgorI2luY2x1ZGUgInN1cGVyLmgiCiAjaW5jbHVkZSAic3lzLmgiCiAjaW5jbHVkZSAidXRpbC5oIgogCkBAIC0zNywxMSArMzYsMTUgQEAKIAlPcHRfcXVvdGFfb2ZmLAogCU9wdF9xdW90YV9hY2NvdW50LAogCU9wdF9xdW90YV9vbiwKKwlPcHRfcXVvdGEsCisJT3B0X25vcXVvdGEsCiAJT3B0X3N1aWRkaXIsCiAJT3B0X25vc3VpZGRpciwKIAlPcHRfZGF0YV93cml0ZWJhY2ssCiAJT3B0X2RhdGFfb3JkZXJlZCwKIAlPcHRfbWV0YSwKKwlPcHRfZGlzY2FyZCwKKwlPcHRfbm9kaXNjYXJkLAogCU9wdF9lcnIsCiB9OwogCkBAIC02MSwxMSArNjQsMTUgQEAKIAl7T3B0X3F1b3RhX29mZiwgInF1b3RhPW9mZiJ9LAogCXtPcHRfcXVvdGFfYWNjb3VudCwgInF1b3RhPWFjY291bnQifSwKIAl7T3B0X3F1b3RhX29uLCAicXVvdGE9b24ifSwKKwl7T3B0X3F1b3RhLCAicXVvdGEifSwKKwl7T3B0X25vcXVvdGEsICJub3F1b3RhIn0sCiAJe09wdF9zdWlkZGlyLCAic3VpZGRpciJ9LAogCXtPcHRfbm9zdWlkZGlyLCAibm9zdWlkZGlyIn0sCiAJe09wdF9kYXRhX3dyaXRlYmFjaywgImRhdGE9d3JpdGViYWNrIn0sCiAJe09wdF9kYXRhX29yZGVyZWQsICJkYXRhPW9yZGVyZWQifSwKIAl7T3B0X21ldGEsICJtZXRhIn0sCisJe09wdF9kaXNjYXJkLCAiZGlzY2FyZCJ9LAorCXtPcHRfbm9kaXNjYXJkLCAibm9kaXNjYXJkIn0sCiAJe09wdF9lcnIsIE5VTEx9CiB9OwogCkBAIC03NywxMDEgKzg0LDQ2IEBACiAgKiBSZXR1cm46IGVycm5vCiAgKi8KIAotaW50IGdmczJfbW91bnRfYXJncyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgY2hhciAqZGF0YV9hcmcsIGludCByZW1vdW50KQoraW50IGdmczJfbW91bnRfYXJncyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgc3RydWN0IGdmczJfYXJncyAqYXJncywgY2hhciAqb3B0aW9ucykKIHsKLQlzdHJ1Y3QgZ2ZzMl9hcmdzICphcmdzID0gJnNkcC0+c2RfYXJnczsKLQljaGFyICpkYXRhID0gZGF0YV9hcmc7Ci0JY2hhciAqb3B0aW9ucywgKm8sICp2OwotCWludCBlcnJvciA9IDA7Ci0KLQlpZiAoIXJlbW91bnQpIHsKLQkJLyogIFNldCBzb21lIGRlZmF1bHRzICAqLwotCQlhcmdzLT5hcl9xdW90YSA9IEdGUzJfUVVPVEFfREVGQVVMVDsKLQkJYXJncy0+YXJfZGF0YSA9IEdGUzJfREFUQV9ERUZBVUxUOwotCX0KKwljaGFyICpvOworCWludCB0b2tlbjsKKwlzdWJzdHJpbmdfdCB0bXBbTUFYX09QVF9BUkdTXTsKIAogCS8qIFNwbGl0IHRoZSBvcHRpb25zIGludG8gdG9rZW5zIHdpdGggdGhlICIsIiBjaGFyYWN0ZXIgYW5kCiAJICAgcHJvY2VzcyB0aGVtICovCiAKLQlmb3IgKG9wdGlvbnMgPSBkYXRhOyAobyA9IHN0cnNlcCgmb3B0aW9ucywgIiwiKSk7ICkgewotCQlpbnQgdG9rZW47Ci0JCXN1YnN0cmluZ190IHRtcFtNQVhfT1BUX0FSR1NdOwotCi0JCWlmICghKm8pCisJd2hpbGUgKDEpIHsKKwkJbyA9IHN0cnNlcCgmb3B0aW9ucywgIiwiKTsKKwkJaWYgKG8gPT0gTlVMTCkKKwkJCWJyZWFrOworCQlpZiAoKm8gPT0gJ1wwJykKIAkJCWNvbnRpbnVlOwogCiAJCXRva2VuID0gbWF0Y2hfdG9rZW4obywgdG9rZW5zLCB0bXApOwogCQlzd2l0Y2ggKHRva2VuKSB7CiAJCWNhc2UgT3B0X2xvY2twcm90bzoKLQkJCXYgPSBtYXRjaF9zdHJkdXAoJnRtcFswXSk7Ci0JCQlpZiAoIXYpIHsKLQkJCQlmc19pbmZvKHNkcCwgIm5vIG1lbW9yeSBmb3IgbG9ja3Byb3RvXG4iKTsKLQkJCQllcnJvciA9IC1FTk9NRU07Ci0JCQkJZ290byBvdXRfZXJyb3I7Ci0JCQl9Ci0KLQkJCWlmIChyZW1vdW50ICYmIHN0cmNtcCh2LCBhcmdzLT5hcl9sb2NrcHJvdG8pKSB7Ci0JCQkJa2ZyZWUodik7Ci0JCQkJZ290byBjYW50X3JlbW91bnQ7Ci0JCQl9Ci0JCQkKLQkJCXN0cm5jcHkoYXJncy0+YXJfbG9ja3Byb3RvLCB2LCBHRlMyX0xPQ0tOQU1FX0xFTik7Ci0JCQlhcmdzLT5hcl9sb2NrcHJvdG9bR0ZTMl9MT0NLTkFNRV9MRU4gLSAxXSA9IDA7Ci0JCQlrZnJlZSh2KTsKKwkJCW1hdGNoX3N0cmxjcHkoYXJncy0+YXJfbG9ja3Byb3RvLCAmdG1wWzBdLAorCQkJCSAgICAgIEdGUzJfTE9DS05BTUVfTEVOKTsKIAkJCWJyZWFrOwogCQljYXNlIE9wdF9sb2NrdGFibGU6Ci0JCQl2ID0gbWF0Y2hfc3RyZHVwKCZ0bXBbMF0pOwotCQkJaWYgKCF2KSB7Ci0JCQkJZnNfaW5mbyhzZHAsICJubyBtZW1vcnkgZm9yIGxvY2t0YWJsZVxuIik7Ci0JCQkJZXJyb3IgPSAtRU5PTUVNOwotCQkJCWdvdG8gb3V0X2Vycm9yOwotCQkJfQotCi0JCQlpZiAocmVtb3VudCAmJiBzdHJjbXAodiwgYXJncy0+YXJfbG9ja3RhYmxlKSkgewotCQkJCWtmcmVlKHYpOwotCQkJCWdvdG8gY2FudF9yZW1vdW50OwotCQkJfQotCi0JCQlzdHJuY3B5KGFyZ3MtPmFyX2xvY2t0YWJsZSwgdiwgR0ZTMl9MT0NLTkFNRV9MRU4pOwotCQkJYXJncy0+YXJfbG9ja3RhYmxlW0dGUzJfTE9DS05BTUVfTEVOIC0gMV0gID0gMDsKLQkJCWtmcmVlKHYpOworCQkJbWF0Y2hfc3RybGNweShhcmdzLT5hcl9sb2NrdGFibGUsICZ0bXBbMF0sCisJCQkJICAgICAgR0ZTMl9MT0NLTkFNRV9MRU4pOwogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X2hvc3RkYXRhOgotCQkJdiA9IG1hdGNoX3N0cmR1cCgmdG1wWzBdKTsKLQkJCWlmICghdikgewotCQkJCWZzX2luZm8oc2RwLCAibm8gbWVtb3J5IGZvciBob3N0ZGF0YVxuIik7Ci0JCQkJZXJyb3IgPSAtRU5PTUVNOwotCQkJCWdvdG8gb3V0X2Vycm9yOwotCQkJfQotCi0JCQlpZiAocmVtb3VudCAmJiBzdHJjbXAodiwgYXJncy0+YXJfaG9zdGRhdGEpKSB7Ci0JCQkJa2ZyZWUodik7Ci0JCQkJZ290byBjYW50X3JlbW91bnQ7Ci0JCQl9Ci0KLQkJCXN0cm5jcHkoYXJncy0+YXJfaG9zdGRhdGEsIHYsIEdGUzJfTE9DS05BTUVfTEVOKTsKLQkJCWFyZ3MtPmFyX2hvc3RkYXRhW0dGUzJfTE9DS05BTUVfTEVOIC0gMV0gPSAwOwotCQkJa2ZyZWUodik7CisJCQltYXRjaF9zdHJsY3B5KGFyZ3MtPmFyX2hvc3RkYXRhLCAmdG1wWzBdLAorCQkJCSAgICAgIEdGUzJfTE9DS05BTUVfTEVOKTsKIAkJCWJyZWFrOwogCQljYXNlIE9wdF9zcGVjdGF0b3I6Ci0JCQlpZiAocmVtb3VudCAmJiAhYXJncy0+YXJfc3BlY3RhdG9yKQotCQkJCWdvdG8gY2FudF9yZW1vdW50OwogCQkJYXJncy0+YXJfc3BlY3RhdG9yID0gMTsKLQkJCXNkcC0+c2RfdmZzLT5zX2ZsYWdzIHw9IE1TX1JET05MWTsKIAkJCWJyZWFrOwogCQljYXNlIE9wdF9pZ25vcmVfbG9jYWxfZnM6Ci0JCQlpZiAocmVtb3VudCAmJiAhYXJncy0+YXJfaWdub3JlX2xvY2FsX2ZzKQotCQkJCWdvdG8gY2FudF9yZW1vdW50OwogCQkJYXJncy0+YXJfaWdub3JlX2xvY2FsX2ZzID0gMTsKIAkJCWJyZWFrOwogCQljYXNlIE9wdF9sb2NhbGZsb2NrczoKLQkJCWlmIChyZW1vdW50ICYmICFhcmdzLT5hcl9sb2NhbGZsb2NrcykKLQkJCQlnb3RvIGNhbnRfcmVtb3VudDsKIAkJCWFyZ3MtPmFyX2xvY2FsZmxvY2tzID0gMTsKIAkJCWJyZWFrOwogCQljYXNlIE9wdF9sb2NhbGNhY2hpbmc6Ci0JCQlpZiAocmVtb3VudCAmJiAhYXJncy0+YXJfbG9jYWxjYWNoaW5nKQotCQkJCWdvdG8gY2FudF9yZW1vdW50OwogCQkJYXJncy0+YXJfbG9jYWxjYWNoaW5nID0gMTsKIAkJCWJyZWFrOwogCQljYXNlIE9wdF9kZWJ1ZzoKQEAgLTE4MSwyNSArMTMzLDIzIEBACiAJCQlhcmdzLT5hcl9kZWJ1ZyA9IDA7CiAJCQlicmVhazsKIAkJY2FzZSBPcHRfdXBncmFkZToKLQkJCWlmIChyZW1vdW50ICYmICFhcmdzLT5hcl91cGdyYWRlKQotCQkJCWdvdG8gY2FudF9yZW1vdW50OwogCQkJYXJncy0+YXJfdXBncmFkZSA9IDE7CiAJCQlicmVhazsKIAkJY2FzZSBPcHRfYWNsOgogCQkJYXJncy0+YXJfcG9zaXhfYWNsID0gMTsKLQkJCXNkcC0+c2RfdmZzLT5zX2ZsYWdzIHw9IE1TX1BPU0lYQUNMOwogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X25vYWNsOgogCQkJYXJncy0+YXJfcG9zaXhfYWNsID0gMDsKLQkJCXNkcC0+c2RfdmZzLT5zX2ZsYWdzICY9IH5NU19QT1NJWEFDTDsKIAkJCWJyZWFrOwogCQljYXNlIE9wdF9xdW90YV9vZmY6CisJCWNhc2UgT3B0X25vcXVvdGE6CiAJCQlhcmdzLT5hcl9xdW90YSA9IEdGUzJfUVVPVEFfT0ZGOwogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X3F1b3RhX2FjY291bnQ6CiAJCQlhcmdzLT5hcl9xdW90YSA9IEdGUzJfUVVPVEFfQUNDT1VOVDsKIAkJCWJyZWFrOwogCQljYXNlIE9wdF9xdW90YV9vbjoKKwkJY2FzZSBPcHRfcXVvdGE6CiAJCQlhcmdzLT5hcl9xdW90YSA9IEdGUzJfUVVPVEFfT047CiAJCQlicmVhazsKIAkJY2FzZSBPcHRfc3VpZGRpcjoKQEAgLTIxNSwyOSArMTY1LDIxIEBACiAJCQlhcmdzLT5hcl9kYXRhID0gR0ZTMl9EQVRBX09SREVSRUQ7CiAJCQlicmVhazsKIAkJY2FzZSBPcHRfbWV0YToKLQkJCWlmIChyZW1vdW50ICYmIGFyZ3MtPmFyX21ldGEgIT0gMSkKLQkJCQlnb3RvIGNhbnRfcmVtb3VudDsKIAkJCWFyZ3MtPmFyX21ldGEgPSAxOwogCQkJYnJlYWs7CisJCWNhc2UgT3B0X2Rpc2NhcmQ6CisJCQlhcmdzLT5hcl9kaXNjYXJkID0gMTsKKwkJCWJyZWFrOworCQljYXNlIE9wdF9ub2Rpc2NhcmQ6CisJCQlhcmdzLT5hcl9kaXNjYXJkID0gMDsKKwkJCWJyZWFrOwogCQljYXNlIE9wdF9lcnI6CiAJCWRlZmF1bHQ6Ci0JCQlmc19pbmZvKHNkcCwgInVua25vd24gb3B0aW9uOiAlc1xuIiwgbyk7Ci0JCQllcnJvciA9IC1FSU5WQUw7Ci0JCQlnb3RvIG91dF9lcnJvcjsKKwkJCWZzX2luZm8oc2RwLCAiaW52YWxpZCBtb3VudCBvcHRpb246ICVzXG4iLCBvKTsKKwkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJfQogCi1vdXRfZXJyb3I6Ci0JaWYgKGVycm9yKQotCQlmc19pbmZvKHNkcCwgImludmFsaWQgbW91bnQgb3B0aW9uKHMpXG4iKTsKLQotCWlmIChkYXRhICE9IGRhdGFfYXJnKQotCQlrZnJlZShkYXRhKTsKLQotCXJldHVybiBlcnJvcjsKLQotY2FudF9yZW1vdW50OgotCWZzX2luZm8oc2RwLCAiY2FuJ3QgcmVtb3VudCB3aXRoIG9wdGlvbiAlc1xuIiwgbyk7Ci0JcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2dmczIvbW91bnQuaCBiL2ZzL2dmczIvbW91bnQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDAxMjg4YS4uMDAwMDAwMAotLS0gYS9mcy9nZnMyL21vdW50LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSBTaXN0aW5hIFNvZnR3YXJlLCBJbmMuICAxOTk3LTIwMDMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA2IFJlZCBIYXQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBjb3B5cmlnaHRlZCBtYXRlcmlhbCBpcyBtYWRlIGF2YWlsYWJsZSB0byBhbnlvbmUgd2lzaGluZyB0byB1c2UsCi0gKiBtb2RpZnksIGNvcHksIG9yIHJlZGlzdHJpYnV0ZSBpdCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucwotICogb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4KLSAqLwotCi0jaWZuZGVmIF9fTU9VTlRfRE9UX0hfXwotI2RlZmluZSBfX01PVU5UX0RPVF9IX18KLQotc3RydWN0IGdmczJfc2JkOwotCi1pbnQgZ2ZzMl9tb3VudF9hcmdzKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBjaGFyICpkYXRhX2FyZywgaW50IHJlbW91bnQpOwotCi0jZW5kaWYgLyogX19NT1VOVF9ET1RfSF9fICovCmRpZmYgLS1naXQgYS9mcy9nZnMyL29wc19hZGRyZXNzLmMgYi9mcy9nZnMyL29wc19hZGRyZXNzLmMKaW5kZXggNGRkYWI2Ny4uYTZkZGUxNyAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9vcHNfYWRkcmVzcy5jCisrKyBiL2ZzL2dmczIvb3BzX2FkZHJlc3MuYwpAQCAtMTksNyArMTksNiBAQAogI2luY2x1ZGUgPGxpbnV4L3dyaXRlYmFjay5oPgogI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KICNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgotI2luY2x1ZGUgPGxpbnV4L2xtX2ludGVyZmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L2JhY2tpbmctZGV2Lmg+CiAKICNpbmNsdWRlICJnZnMyLmgiCkBAIC00NDIsNiArNDQxLDcgQEAKIAkgKi8KIAlpZiAodW5saWtlbHkocGFnZS0+aW5kZXgpKSB7CiAJCXplcm9fdXNlcihwYWdlLCAwLCBQQUdFX0NBQ0hFX1NJWkUpOworCQlTZXRQYWdlVXB0b2RhdGUocGFnZSk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMTA5Niw2ICsxMDk2LDcgQEAKIAkucmVsZWFzZXBhZ2UgPSBnZnMyX3JlbGVhc2VwYWdlLAogCS5kaXJlY3RfSU8gPSBnZnMyX2RpcmVjdF9JTywKIAkubWlncmF0ZXBhZ2UgPSBidWZmZXJfbWlncmF0ZV9wYWdlLAorCS5pc19wYXJ0aWFsbHlfdXB0b2RhdGUgPSBibG9ja19pc19wYXJ0aWFsbHlfdXB0b2RhdGUsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBnZnMyX29yZGVyZWRfYW9wcyA9IHsKQEAgLTExMTEsNiArMTExMiw3IEBACiAJLnJlbGVhc2VwYWdlID0gZ2ZzMl9yZWxlYXNlcGFnZSwKIAkuZGlyZWN0X0lPID0gZ2ZzMl9kaXJlY3RfSU8sCiAJLm1pZ3JhdGVwYWdlID0gYnVmZmVyX21pZ3JhdGVfcGFnZSwKKwkuaXNfcGFydGlhbGx5X3VwdG9kYXRlID0gYmxvY2tfaXNfcGFydGlhbGx5X3VwdG9kYXRlLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgZ2ZzMl9qZGF0YV9hb3BzID0gewpAQCAtMTEyNSw2ICsxMTI3LDcgQEAKIAkuYm1hcCA9IGdmczJfYm1hcCwKIAkuaW52YWxpZGF0ZXBhZ2UgPSBnZnMyX2ludmFsaWRhdGVwYWdlLAogCS5yZWxlYXNlcGFnZSA9IGdmczJfcmVsZWFzZXBhZ2UsCisJLmlzX3BhcnRpYWxseV91cHRvZGF0ZSA9IGJsb2NrX2lzX3BhcnRpYWxseV91cHRvZGF0ZSwKIH07CiAKIHZvaWQgZ2ZzMl9zZXRfYW9wcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKQpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9vcHNfZGVudHJ5LmMgYi9mcy9nZnMyL29wc19kZW50cnkuYwppbmRleCBjMmFkMzYzLi41ZWI1N2IwIDEwMDY0NAotLS0gYS9mcy9nZnMyL29wc19kZW50cnkuYworKysgYi9mcy9nZnMyL29wc19kZW50cnkuYwpAQCAtMTMsNyArMTMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZzMl9vbmRpc2suaD4KICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgotI2luY2x1ZGUgPGxpbnV4L2xtX2ludGVyZmFjZS5oPgogCiAjaW5jbHVkZSAiZ2ZzMi5oIgogI2luY2x1ZGUgImluY29yZS5oIgpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9vcHNfZXhwb3J0LmMgYi9mcy9nZnMyL29wc19leHBvcnQuYwppbmRleCA3ZmRlYjE0Li45MjAwZWYyIDEwMDY0NAotLS0gYS9mcy9nZnMyL29wc19leHBvcnQuYworKysgYi9mcy9nZnMyL29wc19leHBvcnQuYwpAQCAtMTQsNyArMTQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2V4cG9ydGZzLmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZzMl9vbmRpc2suaD4KICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgotI2luY2x1ZGUgPGxpbnV4L2xtX2ludGVyZmFjZS5oPgogCiAjaW5jbHVkZSAiZ2ZzMi5oIgogI2luY2x1ZGUgImluY29yZS5oIgpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9vcHNfZmlsZS5jIGIvZnMvZ2ZzMi9vcHNfZmlsZS5jCmluZGV4IDkzZmU0MWIuLjNiOWU4ZGUgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvb3BzX2ZpbGUuYworKysgYi9mcy9nZnMyL29wc19maWxlLmMKQEAgLTIwLDkgKzIwLDEwIEBACiAjaW5jbHVkZSA8bGludXgvZ2ZzMl9vbmRpc2suaD4KICNpbmNsdWRlIDxsaW51eC9leHQyX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KLSNpbmNsdWRlIDxsaW51eC9sbV9pbnRlcmZhY2UuaD4KICNpbmNsdWRlIDxsaW51eC93cml0ZWJhY2suaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RsbS5oPgorI2luY2x1ZGUgPGxpbnV4L2RsbV9wbG9jay5oPgogCiAjaW5jbHVkZSAiZ2ZzMi5oIgogI2luY2x1ZGUgImluY29yZS5oIgpAQCAtMzU0LDcgKzM1NSw5IEBACiAJaWYgKHJldCkKIAkJZ290byBvdXQ7CiAKKwlzZXRfYml0KEdMRl9ESVJUWSwgJmlwLT5pX2dsLT5nbF9mbGFncyk7CiAJc2V0X2JpdChHSUZfU1dfUEFHRUQsICZpcC0+aV9mbGFncyk7CisKIAlyZXQgPSBnZnMyX3dyaXRlX2FsbG9jX3JlcXVpcmVkKGlwLCBwb3MsIFBBR0VfQ0FDSEVfU0laRSwgJmFsbG9jX3JlcXVpcmVkKTsKIAlpZiAocmV0IHx8ICFhbGxvY19yZXF1aXJlZCkKIAkJZ290byBvdXRfdW5sb2NrOwpAQCAtNTYwLDU3ICs1NjMsMjQgQEAKIAlyZXR1cm4gcmV0OwogfQogCisjaWZkZWYgQ09ORklHX0dGUzJfRlNfTE9DS0lOR19ETE0KKwogLyoqCiAgKiBnZnMyX3NldGxlYXNlIC0gYWNxdWlyZS9yZWxlYXNlIGEgZmlsZSBsZWFzZQogICogQGZpbGU6IHRoZSBmaWxlIHBvaW50ZXIKICAqIEBhcmc6IGxlYXNlIHR5cGUKICAqIEBmbDogZmlsZSBsb2NrCiAgKgorICogV2UgZG9uJ3QgY3VycmVudGx5IGhhdmUgYSB3YXkgdG8gZW5mb3JjZSBhIGxlYXNlIGFjcm9zcyB0aGUgd2hvbGUKKyAqIGNsdXN0ZXI7IHVudGlsIHdlIGRvLCBkaXNhYmxlIGxlYXNlcyAoYnkganVzdCByZXR1cm5pbmcgLUVJTlZBTCksCisgKiB1bmxlc3MgdGhlIGFkbWluaXN0cmF0b3IgaGFzIHJlcXVlc3RlZCBwdXJlbHkgbG9jYWwgbG9ja2luZy4KKyAqCiAgKiBSZXR1cm5zOiBlcnJubwogICovCiAKIHN0YXRpYyBpbnQgZ2ZzMl9zZXRsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9uZyBhcmcsIHN0cnVjdCBmaWxlX2xvY2sgKipmbCkKIHsKLQlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IEdGUzJfU0IoZmlsZS0+Zl9tYXBwaW5nLT5ob3N0KTsKLQotCS8qCi0JICogV2UgZG9uJ3QgY3VycmVudGx5IGhhdmUgYSB3YXkgdG8gZW5mb3JjZSBhIGxlYXNlIGFjcm9zcyB0aGUgd2hvbGUKLQkgKiBjbHVzdGVyOyB1bnRpbCB3ZSBkbywgZGlzYWJsZSBsZWFzZXMgKGJ5IGp1c3QgcmV0dXJuaW5nIC1FSU5WQUwpLAotCSAqIHVubGVzcyB0aGUgYWRtaW5pc3RyYXRvciBoYXMgcmVxdWVzdGVkIHB1cmVseSBsb2NhbCBsb2NraW5nLgotCSAqLwotCWlmICghc2RwLT5zZF9hcmdzLmFyX2xvY2FsZmxvY2tzKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlyZXR1cm4gZ2VuZXJpY19zZXRsZWFzZShmaWxlLCBhcmcsIGZsKTsKLX0KLQotc3RhdGljIGludCBnZnMyX2xtX3Bsb2NrX2dldChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgc3RydWN0IGxtX2xvY2tuYW1lICpuYW1lLAotCQkgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZpbGVfbG9jayAqZmwpCi17Ci0JaW50IGVycm9yID0gLUVJTzsKLQlpZiAobGlrZWx5KCF0ZXN0X2JpdChTREZfU0hVVERPV04sICZzZHAtPnNkX2ZsYWdzKSkpCi0JCWVycm9yID0gc2RwLT5zZF9sb2Nrc3RydWN0LmxzX29wcy0+bG1fcGxvY2tfZ2V0KAotCQkJCXNkcC0+c2RfbG9ja3N0cnVjdC5sc19sb2Nrc3BhY2UsIG5hbWUsIGZpbGUsIGZsKTsKLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLXN0YXRpYyBpbnQgZ2ZzMl9sbV9wbG9jayhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgc3RydWN0IGxtX2xvY2tuYW1lICpuYW1lLAotCQkgIHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgY21kLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbCkKLXsKLQlpbnQgZXJyb3IgPSAtRUlPOwotCWlmIChsaWtlbHkoIXRlc3RfYml0KFNERl9TSFVURE9XTiwgJnNkcC0+c2RfZmxhZ3MpKSkKLQkJZXJyb3IgPSBzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfb3BzLT5sbV9wbG9jaygKLQkJCQlzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfbG9ja3NwYWNlLCBuYW1lLCBmaWxlLCBjbWQsIGZsKTsKLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLXN0YXRpYyBpbnQgZ2ZzMl9sbV9wdW5sb2NrKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBzdHJ1Y3QgbG1fbG9ja25hbWUgKm5hbWUsCi0JCSAgICBzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZpbGVfbG9jayAqZmwpCi17Ci0JaW50IGVycm9yID0gLUVJTzsKLQlpZiAobGlrZWx5KCF0ZXN0X2JpdChTREZfU0hVVERPV04sICZzZHAtPnNkX2ZsYWdzKSkpCi0JCWVycm9yID0gc2RwLT5zZF9sb2Nrc3RydWN0LmxzX29wcy0+bG1fcHVubG9jaygKLQkJCQlzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfbG9ja3NwYWNlLCBuYW1lLCBmaWxlLCBmbCk7Ci0JcmV0dXJuIGVycm9yOworCXJldHVybiAtRUlOVkFMOwogfQogCiAvKioKQEAgLTYyNiw5ICs1OTYsNyBAQAogewogCXN0cnVjdCBnZnMyX2lub2RlICppcCA9IEdGUzJfSShmaWxlLT5mX21hcHBpbmctPmhvc3QpOwogCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gR0ZTMl9TQihmaWxlLT5mX21hcHBpbmctPmhvc3QpOwotCXN0cnVjdCBsbV9sb2NrbmFtZSBuYW1lID0KLQkJeyAubG5fbnVtYmVyID0gaXAtPmlfbm9fYWRkciwKLQkJICAubG5fdHlwZSA9IExNX1RZUEVfUExPQ0sgfTsKKwlzdHJ1Y3QgbG1fbG9ja3N0cnVjdCAqbHMgPSAmc2RwLT5zZF9sb2Nrc3RydWN0OwogCiAJaWYgKCEoZmwtPmZsX2ZsYWdzICYgRkxfUE9TSVgpKQogCQlyZXR1cm4gLUVOT0xDSzsKQEAgLTY0MCwxMiArNjA4LDE0IEBACiAJCWNtZCA9IEZfU0VUTEs7CiAJCWZsLT5mbF90eXBlID0gRl9VTkxDSzsKIAl9CisJaWYgKHVubGlrZWx5KHRlc3RfYml0KFNERl9TSFVURE9XTiwgJnNkcC0+c2RfZmxhZ3MpKSkKKwkJcmV0dXJuIC1FSU87CiAJaWYgKElTX0dFVExLKGNtZCkpCi0JCXJldHVybiBnZnMyX2xtX3Bsb2NrX2dldChzZHAsICZuYW1lLCBmaWxlLCBmbCk7CisJCXJldHVybiBkbG1fcG9zaXhfZ2V0KGxzLT5sc19kbG0sIGlwLT5pX25vX2FkZHIsIGZpbGUsIGZsKTsKIAllbHNlIGlmIChmbC0+ZmxfdHlwZSA9PSBGX1VOTENLKQotCQlyZXR1cm4gZ2ZzMl9sbV9wdW5sb2NrKHNkcCwgJm5hbWUsIGZpbGUsIGZsKTsKKwkJcmV0dXJuIGRsbV9wb3NpeF91bmxvY2sobHMtPmxzX2RsbSwgaXAtPmlfbm9fYWRkciwgZmlsZSwgZmwpOwogCWVsc2UKLQkJcmV0dXJuIGdmczJfbG1fcGxvY2soc2RwLCAmbmFtZSwgZmlsZSwgY21kLCBmbCk7CisJCXJldHVybiBkbG1fcG9zaXhfbG9jayhscy0+bHNfZGxtLCBpcC0+aV9ub19hZGRyLCBmaWxlLCBjbWQsIGZsKTsKIH0KIAogc3RhdGljIGludCBkb19mbG9jayhzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IGNtZCwgc3RydWN0IGZpbGVfbG9jayAqZmwpCkBAIC03MzIsNyArNzAyLDcgQEAKIAl9CiB9CiAKLWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZ2ZzMl9maWxlX2ZvcHMgPSB7Citjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpnZnMyX2ZpbGVfZm9wcyA9ICYoY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyl7CiAJLmxsc2VlawkJPSBnZnMyX2xsc2VlaywKIAkucmVhZAkJPSBkb19zeW5jX3JlYWQsCiAJLmFpb19yZWFkCT0gZ2VuZXJpY19maWxlX2Fpb19yZWFkLApAQCAtNzUwLDcgKzcyMCw3IEBACiAJLnNldGxlYXNlCT0gZ2ZzMl9zZXRsZWFzZSwKIH07CiAKLWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZ2ZzMl9kaXJfZm9wcyA9IHsKK2NvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmdmczJfZGlyX2ZvcHMgPSAmKGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMpewogCS5yZWFkZGlyCT0gZ2ZzMl9yZWFkZGlyLAogCS51bmxvY2tlZF9pb2N0bAk9IGdmczJfaW9jdGwsCiAJLm9wZW4JCT0gZ2ZzMl9vcGVuLApAQCAtNzYwLDcgKzczMCw5IEBACiAJLmZsb2NrCQk9IGdmczJfZmxvY2ssCiB9OwogCi1jb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGdmczJfZmlsZV9mb3BzX25vbG9jayA9IHsKKyNlbmRpZiAvKiBDT05GSUdfR0ZTMl9GU19MT0NLSU5HX0RMTSAqLworCitjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpnZnMyX2ZpbGVfZm9wc19ub2xvY2sgPSAmKGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMpewogCS5sbHNlZWsJCT0gZ2ZzMl9sbHNlZWssCiAJLnJlYWQJCT0gZG9fc3luY19yZWFkLAogCS5haW9fcmVhZAk9IGdlbmVyaWNfZmlsZV9haW9fcmVhZCwKQEAgLTc3MywxMCArNzQ1LDEwIEBACiAJLmZzeW5jCQk9IGdmczJfZnN5bmMsCiAJLnNwbGljZV9yZWFkCT0gZ2VuZXJpY19maWxlX3NwbGljZV9yZWFkLAogCS5zcGxpY2Vfd3JpdGUJPSBnZW5lcmljX2ZpbGVfc3BsaWNlX3dyaXRlLAotCS5zZXRsZWFzZQk9IGdmczJfc2V0bGVhc2UsCisJLnNldGxlYXNlCT0gZ2VuZXJpY19zZXRsZWFzZSwKIH07CiAKLWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZ2ZzMl9kaXJfZm9wc19ub2xvY2sgPSB7Citjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpnZnMyX2Rpcl9mb3BzX25vbG9jayA9ICYoY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyl7CiAJLnJlYWRkaXIJPSBnZnMyX3JlYWRkaXIsCiAJLnVubG9ja2VkX2lvY3RsCT0gZ2ZzMl9pb2N0bCwKIAkub3BlbgkJPSBnZnMyX29wZW4sCmRpZmYgLS1naXQgYS9mcy9nZnMyL29wc19mc3R5cGUuYyBiL2ZzL2dmczIvb3BzX2ZzdHlwZS5jCmluZGV4IGY5MWVlYmQuLjUxODgzYjMgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvb3BzX2ZzdHlwZS5jCisrKyBiL2ZzL2dmczIvb3BzX2ZzdHlwZS5jCkBAIC0xNyw3ICsxNyw2IEBACiAjaW5jbHVkZSA8bGludXgvbmFtZWkuaD4KICNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgogI2luY2x1ZGUgPGxpbnV4L2dmczJfb25kaXNrLmg+Ci0jaW5jbHVkZSA8bGludXgvbG1faW50ZXJmYWNlLmg+CiAKICNpbmNsdWRlICJnZnMyLmgiCiAjaW5jbHVkZSAiaW5jb3JlLmgiCkBAIC0yNSw3ICsyNCw2IEBACiAjaW5jbHVkZSAiZ2xvY2suaCIKICNpbmNsdWRlICJnbG9wcy5oIgogI2luY2x1ZGUgImlub2RlLmgiCi0jaW5jbHVkZSAibW91bnQuaCIKICNpbmNsdWRlICJyZWNvdmVyeS5oIgogI2luY2x1ZGUgInJncnAuaCIKICNpbmNsdWRlICJzdXBlci5oIgpAQCAtNjQsNyArNjIsNiBAQAogCWd0LT5ndF9xdW90YV93YXJuX3BlcmlvZCA9IDEwOwogCWd0LT5ndF9xdW90YV9zY2FsZV9udW0gPSAxOwogCWd0LT5ndF9xdW90YV9zY2FsZV9kZW4gPSAxOwotCWd0LT5ndF9xdW90YV9jYWNoZV9zZWNzID0gMzAwOwogCWd0LT5ndF9xdW90YV9xdWFudHVtID0gNjA7CiAJZ3QtPmd0X25ld19maWxlc19qZGF0YSA9IDA7CiAJZ3QtPmd0X21heF9yZWFkYWhlYWQgPSAxIDw8IDE4OwpAQCAtMTAwLDcgKzk3LDYgQEAKIAltdXRleF9pbml0KCZzZHAtPnNkX2ppbmRleF9tdXRleCk7CiAKIAlJTklUX0xJU1RfSEVBRCgmc2RwLT5zZF9xdW90YV9saXN0KTsKLQlzcGluX2xvY2tfaW5pdCgmc2RwLT5zZF9xdW90YV9zcGluKTsKIAltdXRleF9pbml0KCZzZHAtPnNkX3F1b3RhX211dGV4KTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzZHAtPnNkX3F1b3RhX3dhaXQpOwogCUlOSVRfTElTVF9IRUFEKCZzZHAtPnNkX3RydW5jX2xpc3QpOwpAQCAtMjM4LDYgKzIzNCw3IEBACiAKIAltZW1jcHkoc2ItPnNiX2xvY2twcm90bywgc3RyLT5zYl9sb2NrcHJvdG8sIEdGUzJfTE9DS05BTUVfTEVOKTsKIAltZW1jcHkoc2ItPnNiX2xvY2t0YWJsZSwgc3RyLT5zYl9sb2NrdGFibGUsIEdGUzJfTE9DS05BTUVfTEVOKTsKKwltZW1jcHkoc2ItPnNiX3V1aWQsIHN0ci0+c2JfdXVpZCwgMTYpOwogfQogCiAvKioKQEAgLTI5OSwxNSArMjk2LDE1IEBACiAJX19mcmVlX3BhZ2UocGFnZSk7CiAJcmV0dXJuIDA7CiB9CisKIC8qKgogICogZ2ZzMl9yZWFkX3NiIC0gUmVhZCBzdXBlciBibG9jawogICogQHNkcDogVGhlIEdGUzIgc3VwZXJibG9jawotICogQGdsOiB0aGUgZ2xvY2sgZm9yIHRoZSBzdXBlcmJsb2NrIChhc3N1bWVkIHRvIGJlIGhlbGQpCiAgKiBAc2lsZW50OiBEb24ndCBwcmludCBtZXNzYWdlIGlmIG1vdW50IGZhaWxzCiAgKgogICovCiAKLXN0YXRpYyBpbnQgZ2ZzMl9yZWFkX3NiKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wsIGludCBzaWxlbnQpCitzdGF0aWMgaW50IGdmczJfcmVhZF9zYihzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgaW50IHNpbGVudCkKIHsKIAl1MzIgaGFzaF9ibG9ja3MsIGluZF9ibG9ja3MsIGxlYWZfYmxvY2tzOwogCXUzMiB0bXBfYmxvY2tzOwpAQCAtNTI3LDcgKzUyNCw3IEBACiAJCXJldHVybiByZXQ7CiAJfQogCi0JcmV0ID0gZ2ZzMl9yZWFkX3NiKHNkcCwgc2JfZ2guZ2hfZ2wsIHNpbGVudCk7CisJcmV0ID0gZ2ZzMl9yZWFkX3NiKHNkcCwgc2lsZW50KTsKIAlpZiAocmV0KSB7CiAJCWZzX2VycihzZHAsICJjYW4ndCByZWFkIHN1cGVyYmxvY2s6ICVkXG4iLCByZXQpOwogCQlnb3RvIG91dDsKQEAgLTYzMCwxMyArNjI3LDEzIEBACiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgdm9pZCBnZnMyX2xtX290aGVyc19tYXlfbW91bnQoc3RydWN0IGdmczJfc2JkICpzZHApCitzdGF0aWMgdm9pZCBnZnMyX290aGVyc19tYXlfbW91bnQoc3RydWN0IGdmczJfc2JkICpzZHApCiB7Ci0JaWYgKCFzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfb3BzLT5sbV9vdGhlcnNfbWF5X21vdW50KQotCQlyZXR1cm47Ci0JaWYgKGxpa2VseSghdGVzdF9iaXQoU0RGX1NIVVRET1dOLCAmc2RwLT5zZF9mbGFncykpKQotCQlzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfb3BzLT5sbV9vdGhlcnNfbWF5X21vdW50KAotCQkJCQlzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfbG9ja3NwYWNlKTsKKwljaGFyICptZXNzYWdlID0gIkZJUlNUTU9VTlQ9RG9uZSI7CisJY2hhciAqZW52cFtdID0geyBtZXNzYWdlLCBOVUxMIH07CisJc3RydWN0IGxtX2xvY2tzdHJ1Y3QgKmxzID0gJnNkcC0+c2RfbG9ja3N0cnVjdDsKKwlscy0+bHNfZmlyc3RfZG9uZSA9IDE7CisJa29iamVjdF91ZXZlbnRfZW52KCZzZHAtPnNkX2tvYmosIEtPQkpfQ0hBTkdFLCBlbnZwKTsKIH0KIAogLyoqCkBAIC03OTYsNyArNzkzLDcgQEAKIAkJCX0KIAkJfQogCi0JCWdmczJfbG1fb3RoZXJzX21heV9tb3VudChzZHApOworCQlnZnMyX290aGVyc19tYXlfbW91bnQoc2RwKTsKIAl9IGVsc2UgaWYgKCFzZHAtPnNkX2FyZ3MuYXJfc3BlY3RhdG9yKSB7CiAJCWVycm9yID0gZ2ZzMl9yZWNvdmVyX2pvdXJuYWwoc2RwLT5zZF9qZGVzYyk7CiAJCWlmIChlcnJvcikgewpAQCAtMTAwNSw3ICsxMDAyLDYgQEAKIAkJZ290byBmYWlsX3F1b3RhZDsKIAogCXNkcC0+c2RfbG9nX2ZsdXNoX3RpbWUgPSBqaWZmaWVzOwotCXNkcC0+c2RfamluZGV4X3JlZnJlc2hfdGltZSA9IGppZmZpZXM7CiAKIAlwID0ga3RocmVhZF9ydW4oZ2ZzMl9sb2dkLCBzZHAsICJnZnMyX2xvZ2QiKTsKIAllcnJvciA9IElTX0VSUihwKTsKQEAgLTEwMzMsNiArMTAyOSwxNyBAQAogCXJldHVybiBlcnJvcjsKIH0KIAorc3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3Qgbm9sb2NrX3Rva2VucyA9IHsKKwl7IE9wdF9qaWQsICJqaWQ9JWRcbiIsIH0sCisJeyBPcHRfZXJyLCBOVUxMIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGxtX2xvY2tvcHMgbm9sb2NrX29wcyA9IHsKKwkubG1fcHJvdG9fbmFtZSA9ICJsb2NrX25vbG9jayIsCisJLmxtX3B1dF9sb2NrID0ga21lbV9jYWNoZV9mcmVlLAorCS5sbV90b2tlbnMgPSAmbm9sb2NrX3Rva2VucywKK307CisKIC8qKgogICogZ2ZzMl9sbV9tb3VudCAtIG1vdW50IGEgbG9ja2luZyBwcm90b2NvbAogICogQHNkcDogdGhlIGZpbGVzeXN0ZW0KQEAgLTEwNDQsMzEgKzEwNTEsNzMgQEAKIAogc3RhdGljIGludCBnZnMyX2xtX21vdW50KHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBpbnQgc2lsZW50KQogewotCWNoYXIgKnByb3RvID0gc2RwLT5zZF9wcm90b19uYW1lOwotCWNoYXIgKnRhYmxlID0gc2RwLT5zZF90YWJsZV9uYW1lOwotCWludCBmbGFncyA9IExNX01GTEFHX0NPTlZfTk9EUk9QOwotCWludCBlcnJvcjsKKwljb25zdCBzdHJ1Y3QgbG1fbG9ja29wcyAqbG07CisJc3RydWN0IGxtX2xvY2tzdHJ1Y3QgKmxzID0gJnNkcC0+c2RfbG9ja3N0cnVjdDsKKwlzdHJ1Y3QgZ2ZzMl9hcmdzICphcmdzID0gJnNkcC0+c2RfYXJnczsKKwljb25zdCBjaGFyICpwcm90byA9IHNkcC0+c2RfcHJvdG9fbmFtZTsKKwljb25zdCBjaGFyICp0YWJsZSA9IHNkcC0+c2RfdGFibGVfbmFtZTsKKwljb25zdCBjaGFyICpmc25hbWU7CisJY2hhciAqbywgKm9wdGlvbnM7CisJaW50IHJldDsKIAotCWlmIChzZHAtPnNkX2FyZ3MuYXJfc3BlY3RhdG9yKQotCQlmbGFncyB8PSBMTV9NRkxBR19TUEVDVEFUT1I7CisJaWYgKCFzdHJjbXAoImxvY2tfbm9sb2NrIiwgcHJvdG8pKSB7CisJCWxtID0gJm5vbG9ja19vcHM7CisJCXNkcC0+c2RfYXJncy5hcl9sb2NhbGZsb2NrcyA9IDE7CisJCXNkcC0+c2RfYXJncy5hcl9sb2NhbGNhY2hpbmcgPSAxOworI2lmZGVmIENPTkZJR19HRlMyX0ZTX0xPQ0tJTkdfRExNCisJfSBlbHNlIGlmICghc3RyY21wKCJsb2NrX2RsbSIsIHByb3RvKSkgeworCQlsbSA9ICZnZnMyX2RsbV9vcHM7CisjZW5kaWYKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9JTkZPICJHRlMyOiBjYW4ndCBmaW5kIHByb3RvY29sICVzXG4iLCBwcm90byk7CisJCXJldHVybiAtRU5PRU5UOworCX0KIAogCWZzX2luZm8oc2RwLCAiVHJ5aW5nIHRvIGpvaW4gY2x1c3RlciBcIiVzXCIsIFwiJXNcIlxuIiwgcHJvdG8sIHRhYmxlKTsKIAotCWVycm9yID0gZ2ZzMl9tb3VudF9sb2NrcHJvdG8ocHJvdG8sIHRhYmxlLCBzZHAtPnNkX2FyZ3MuYXJfaG9zdGRhdGEsCi0JCQkJICAgICBnZnMyX2dsb2NrX2NiLCBzZHAsCi0JCQkJICAgICBHRlMyX01JTl9MVkJfU0laRSwgZmxhZ3MsCi0JCQkJICAgICAmc2RwLT5zZF9sb2Nrc3RydWN0LCAmc2RwLT5zZF9rb2JqKTsKLQlpZiAoZXJyb3IpIHsKLQkJZnNfaW5mbyhzZHAsICJjYW4ndCBtb3VudCBwcm90bz0lcywgdGFibGU9JXMsIGhvc3RkYXRhPSVzXG4iLAotCQkJcHJvdG8sIHRhYmxlLCBzZHAtPnNkX2FyZ3MuYXJfaG9zdGRhdGEpOwotCQlnb3RvIG91dDsKLQl9CisJbHMtPmxzX29wcyA9IGxtOworCWxzLT5sc19maXJzdCA9IDE7CisJbHMtPmxzX2lkID0gMDsKIAotCWlmIChnZnMyX2Fzc2VydF93YXJuKHNkcCwgc2RwLT5zZF9sb2Nrc3RydWN0LmxzX29wcykgfHwKLQkgICAgZ2ZzMl9hc3NlcnRfd2FybihzZHAsIHNkcC0+c2RfbG9ja3N0cnVjdC5sc19sdmJfc2l6ZSA+PQotCQkJCSAgR0ZTMl9NSU5fTFZCX1NJWkUpKSB7Ci0JCWdmczJfdW5tb3VudF9sb2NrcHJvdG8oJnNkcC0+c2RfbG9ja3N0cnVjdCk7Ci0JCWdvdG8gb3V0OworCWZvciAob3B0aW9ucyA9IGFyZ3MtPmFyX2hvc3RkYXRhOyAobyA9IHN0cnNlcCgmb3B0aW9ucywgIjoiKSk7ICkgeworCQlzdWJzdHJpbmdfdCB0bXBbTUFYX09QVF9BUkdTXTsKKwkJaW50IHRva2VuLCBvcHRpb247CisKKwkJaWYgKCFvIHx8ICEqbykKKwkJCWNvbnRpbnVlOworCisJCXRva2VuID0gbWF0Y2hfdG9rZW4obywgKmxtLT5sbV90b2tlbnMsIHRtcCk7CisJCXN3aXRjaCAodG9rZW4pIHsKKwkJY2FzZSBPcHRfamlkOgorCQkJcmV0ID0gbWF0Y2hfaW50KCZ0bXBbMF0sICZvcHRpb24pOworCQkJaWYgKHJldCB8fCBvcHRpb24gPCAwKSAKKwkJCQlnb3RvIGhvc3RkYXRhX2Vycm9yOworCQkJbHMtPmxzX2ppZCA9IG9wdGlvbjsKKwkJCWJyZWFrOworCQljYXNlIE9wdF9pZDoKKwkJCXJldCA9IG1hdGNoX2ludCgmdG1wWzBdLCAmb3B0aW9uKTsKKwkJCWlmIChyZXQpCisJCQkJZ290byBob3N0ZGF0YV9lcnJvcjsKKwkJCWxzLT5sc19pZCA9IG9wdGlvbjsKKwkJCWJyZWFrOworCQljYXNlIE9wdF9maXJzdDoKKwkJCXJldCA9IG1hdGNoX2ludCgmdG1wWzBdLCAmb3B0aW9uKTsKKwkJCWlmIChyZXQgfHwgKG9wdGlvbiAhPSAwICYmIG9wdGlvbiAhPSAxKSkKKwkJCQlnb3RvIGhvc3RkYXRhX2Vycm9yOworCQkJbHMtPmxzX2ZpcnN0ID0gb3B0aW9uOworCQkJYnJlYWs7CisJCWNhc2UgT3B0X25vZGlyOgorCQkJcmV0ID0gbWF0Y2hfaW50KCZ0bXBbMF0sICZvcHRpb24pOworCQkJaWYgKHJldCB8fCAob3B0aW9uICE9IDAgJiYgb3B0aW9uICE9IDEpKQorCQkJCWdvdG8gaG9zdGRhdGFfZXJyb3I7CisJCQlscy0+bHNfbm9kaXIgPSBvcHRpb247CisJCQlicmVhazsKKwkJY2FzZSBPcHRfZXJyOgorCQlkZWZhdWx0OgoraG9zdGRhdGFfZXJyb3I6CisJCQlmc19pbmZvKHNkcCwgInVua25vd24gaG9zdGRhdGEgKCVzKVxuIiwgbyk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQogCX0KIAogCWlmIChzZHAtPnNkX2FyZ3MuYXJfc3BlY3RhdG9yKQpAQCAtMTA3NywyMiArMTEyNiwyNSBAQAogCQlzbnByaW50ZihzZHAtPnNkX2ZzbmFtZSwgR0ZTMl9GU05BTUVfTEVOLCAiJXMuJXUiLCB0YWJsZSwKIAkJCSBzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfamlkKTsKIAotCWZzX2luZm8oc2RwLCAiSm9pbmVkIGNsdXN0ZXIuIE5vdyBtb3VudGluZyBGUy4uLlxuIik7Ci0KLQlpZiAoKHNkcC0+c2RfbG9ja3N0cnVjdC5sc19mbGFncyAmIExNX0xTRkxBR19MT0NBTCkgJiYKLQkgICAgIXNkcC0+c2RfYXJncy5hcl9pZ25vcmVfbG9jYWxfZnMpIHsKLQkJc2RwLT5zZF9hcmdzLmFyX2xvY2FsZmxvY2tzID0gMTsKLQkJc2RwLT5zZF9hcmdzLmFyX2xvY2FsY2FjaGluZyA9IDE7CisJZnNuYW1lID0gc3RyY2hyKHRhYmxlLCAnOicpOworCWlmIChmc25hbWUpCisJCWZzbmFtZSsrOworCWlmIChsbS0+bG1fbW91bnQgPT0gTlVMTCkgeworCQlmc19pbmZvKHNkcCwgIk5vdyBtb3VudGluZyBGUy4uLlxuIik7CisJCXJldHVybiAwOwogCX0KLQotb3V0OgotCXJldHVybiBlcnJvcjsKKwlyZXQgPSBsbS0+bG1fbW91bnQoc2RwLCBmc25hbWUpOworCWlmIChyZXQgPT0gMCkKKwkJZnNfaW5mbyhzZHAsICJKb2luZWQgY2x1c3Rlci4gTm93IG1vdW50aW5nIEZTLi4uXG4iKTsKKwlyZXR1cm4gcmV0OwogfQogCiB2b2lkIGdmczJfbG1fdW5tb3VudChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCkKIHsKLQlpZiAobGlrZWx5KCF0ZXN0X2JpdChTREZfU0hVVERPV04sICZzZHAtPnNkX2ZsYWdzKSkpCi0JCWdmczJfdW5tb3VudF9sb2NrcHJvdG8oJnNkcC0+c2RfbG9ja3N0cnVjdCk7CisJY29uc3Qgc3RydWN0IGxtX2xvY2tvcHMgKmxtID0gc2RwLT5zZF9sb2Nrc3RydWN0LmxzX29wczsKKwlpZiAobGlrZWx5KCF0ZXN0X2JpdChTREZfU0hVVERPV04sICZzZHAtPnNkX2ZsYWdzKSkgJiYKKwkgICAgbG0tPmxtX3VubW91bnQpCisJCWxtLT5sbV91bm1vdW50KHNkcCk7CiB9CiAKIC8qKgpAQCAtMTExNiwxMiArMTE2OCwyMCBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQllcnJvciA9IGdmczJfbW91bnRfYXJncyhzZHAsIChjaGFyICopZGF0YSwgMCk7CisJc2RwLT5zZF9hcmdzLmFyX3F1b3RhID0gR0ZTMl9RVU9UQV9ERUZBVUxUOworCXNkcC0+c2RfYXJncy5hcl9kYXRhID0gR0ZTMl9EQVRBX0RFRkFVTFQ7CisKKwllcnJvciA9IGdmczJfbW91bnRfYXJncyhzZHAsICZzZHAtPnNkX2FyZ3MsIGRhdGEpOwogCWlmIChlcnJvcikgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJHRlMyOiBjYW4ndCBwYXJzZSBtb3VudCBhcmd1bWVudHNcbiIpOwogCQlnb3RvIGZhaWw7CiAJfQogCisJaWYgKHNkcC0+c2RfYXJncy5hcl9zcGVjdGF0b3IpCisgICAgICAgICAgICAgICAgc2ItPnNfZmxhZ3MgfD0gTVNfUkRPTkxZOworCWlmIChzZHAtPnNkX2FyZ3MuYXJfcG9zaXhfYWNsKQorCQlzYi0+c19mbGFncyB8PSBNU19QT1NJWEFDTDsKKwogCXNiLT5zX21hZ2ljID0gR0ZTMl9NQUdJQzsKIAlzYi0+c19vcCA9ICZnZnMyX3N1cGVyX29wczsKIAlzYi0+c19leHBvcnRfb3AgPSAmZ2ZzMl9leHBvcnRfb3BzOwpAQCAtMTE5OSw2ICsxMjU5LDggQEAKIAkJZHB1dChzZHAtPnNkX3Jvb3RfZGlyKTsKIAlpZiAoc2RwLT5zZF9tYXN0ZXJfZGlyKQogCQlkcHV0KHNkcC0+c2RfbWFzdGVyX2Rpcik7CisJaWYgKHNiLT5zX3Jvb3QpCisJCWRwdXQoc2ItPnNfcm9vdCk7CiAJc2ItPnNfcm9vdCA9IE5VTEw7CiBmYWlsX2xvY2tpbmc6CiAJaW5pdF9sb2NraW5nKHNkcCwgJm1vdW50X2doLCBVTkRPKTsKZGlmZiAtLWdpdCBhL2ZzL2dmczIvb3BzX2lub2RlLmMgYi9mcy9nZnMyL29wc19pbm9kZS5jCmluZGV4IDQ5ODc3NTQuLmFiZDU0MjkgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvb3BzX2lub2RlLmMKKysrIGIvZnMvZ2ZzMi9vcHNfaW5vZGUuYwpAQCAtMTgsNyArMTgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3Bvc2l4X2FjbC5oPgogI2luY2x1ZGUgPGxpbnV4L2dmczJfb25kaXNrLmg+CiAjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KLSNpbmNsdWRlIDxsaW51eC9sbV9pbnRlcmZhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9maWVtYXAuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCmRpZmYgLS1naXQgYS9mcy9nZnMyL29wc19zdXBlci5jIGIvZnMvZ2ZzMi9vcHNfc3VwZXIuYwppbmRleCAzMjAzMjNkLi40NTgwMTk1IDEwMDY0NAotLS0gYS9mcy9nZnMyL29wc19zdXBlci5jCisrKyBiL2ZzL2dmczIvb3BzX3N1cGVyLmMKQEAgLTE5LDcgKzE5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2dmczJfb25kaXNrLmg+CiAjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KLSNpbmNsdWRlIDxsaW51eC9sbV9pbnRlcmZhY2UuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAKICNpbmNsdWRlICJnZnMyLmgiCkBAIC0yNyw3ICsyNiw2IEBACiAjaW5jbHVkZSAiZ2xvY2suaCIKICNpbmNsdWRlICJpbm9kZS5oIgogI2luY2x1ZGUgImxvZy5oIgotI2luY2x1ZGUgIm1vdW50LmgiCiAjaW5jbHVkZSAicXVvdGEuaCIKICNpbmNsdWRlICJyZWNvdmVyeS5oIgogI2luY2x1ZGUgInJncnAuaCIKQEAgLTQwLDYgKzM4LDggQEAKICNpbmNsdWRlICJibWFwLmgiCiAjaW5jbHVkZSAibWV0YV9pby5oIgogCisjZGVmaW5lIGFyZ3NfbmVxKGExLCBhMiwgeCkgKChhMSktPmFyXyMjeCAhPSAoYTIpLT5hcl8jI3gpCisKIC8qKgogICogZ2ZzMl93cml0ZV9pbm9kZSAtIE1ha2Ugc3VyZSB0aGUgaW5vZGUgaXMgc3RhYmxlIG9uIHRoZSBkaXNrCiAgKiBAaW5vZGU6IFRoZSBpbm9kZQpAQCAtNDM1LDI1ICs0MzUsNDUgQEAKIHN0YXRpYyBpbnQgZ2ZzMl9yZW1vdW50X2ZzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCAqZmxhZ3MsIGNoYXIgKmRhdGEpCiB7CiAJc3RydWN0IGdmczJfc2JkICpzZHAgPSBzYi0+c19mc19pbmZvOworCXN0cnVjdCBnZnMyX2FyZ3MgYXJncyA9IHNkcC0+c2RfYXJnczsgLyogRGVmYXVsdCB0byBjdXJyZW50IHNldHRpbmdzICovCiAJaW50IGVycm9yOwogCi0JZXJyb3IgPSBnZnMyX21vdW50X2FyZ3Moc2RwLCBkYXRhLCAxKTsKKwllcnJvciA9IGdmczJfbW91bnRfYXJncyhzZHAsICZhcmdzLCBkYXRhKTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAorCS8qIE5vdCBhbGxvd2VkIHRvIGNoYW5nZSBsb2NraW5nIGRldGFpbHMgKi8KKwlpZiAoc3RyY21wKGFyZ3MuYXJfbG9ja3Byb3RvLCBzZHAtPnNkX2FyZ3MuYXJfbG9ja3Byb3RvKSB8fAorCSAgICBzdHJjbXAoYXJncy5hcl9sb2NrdGFibGUsIHNkcC0+c2RfYXJncy5hcl9sb2NrdGFibGUpIHx8CisJICAgIHN0cmNtcChhcmdzLmFyX2hvc3RkYXRhLCBzZHAtPnNkX2FyZ3MuYXJfaG9zdGRhdGEpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIFNvbWUgZmxhZ3MgbXVzdCBub3QgYmUgY2hhbmdlZCAqLworCWlmIChhcmdzX25lcSgmYXJncywgJnNkcC0+c2RfYXJncywgc3BlY3RhdG9yKSB8fAorCSAgICBhcmdzX25lcSgmYXJncywgJnNkcC0+c2RfYXJncywgaWdub3JlX2xvY2FsX2ZzKSB8fAorCSAgICBhcmdzX25lcSgmYXJncywgJnNkcC0+c2RfYXJncywgbG9jYWxmbG9ja3MpIHx8CisJICAgIGFyZ3NfbmVxKCZhcmdzLCAmc2RwLT5zZF9hcmdzLCBsb2NhbGNhY2hpbmcpIHx8CisJICAgIGFyZ3NfbmVxKCZhcmdzLCAmc2RwLT5zZF9hcmdzLCBtZXRhKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlpZiAoc2RwLT5zZF9hcmdzLmFyX3NwZWN0YXRvcikKIAkJKmZsYWdzIHw9IE1TX1JET05MWTsKLQllbHNlIHsKLQkJaWYgKCpmbGFncyAmIE1TX1JET05MWSkgewotCQkJaWYgKCEoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpKQotCQkJCWVycm9yID0gZ2ZzMl9tYWtlX2ZzX3JvKHNkcCk7Ci0JCX0gZWxzZSBpZiAoISgqZmxhZ3MgJiBNU19SRE9OTFkpICYmCi0JCQkgICAoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpKSB7CisKKwlpZiAoKHNiLT5zX2ZsYWdzIF4gKmZsYWdzKSAmIE1TX1JET05MWSkgeworCQlpZiAoKmZsYWdzICYgTVNfUkRPTkxZKQorCQkJZXJyb3IgPSBnZnMyX21ha2VfZnNfcm8oc2RwKTsKKwkJZWxzZQogCQkJZXJyb3IgPSBnZnMyX21ha2VfZnNfcncoc2RwKTsKLQkJfQorCQlpZiAoZXJyb3IpCisJCQlyZXR1cm4gZXJyb3I7CiAJfQogCi0JcmV0dXJuIGVycm9yOworCXNkcC0+c2RfYXJncyA9IGFyZ3M7CisJaWYgKHNkcC0+c2RfYXJncy5hcl9wb3NpeF9hY2wpCisJCXNiLT5zX2ZsYWdzIHw9IE1TX1BPU0lYQUNMOworCWVsc2UKKwkJc2ItPnNfZmxhZ3MgJj0gfk1TX1BPU0lYQUNMOworCXJldHVybiAwOwogfQogCiAvKioKQEAgLTU4OCw2ICs2MDgsOCBAQAogCQl9CiAJCXNlcV9wcmludGYocywgIixkYXRhPSVzIiwgc3RhdGUpOwogCX0KKwlpZiAoYXJncy0+YXJfZGlzY2FyZCkKKwkJc2VxX3ByaW50ZihzLCAiLGRpc2NhcmQiKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9xdW90YS5jIGIvZnMvZ2ZzMi9xdW90YS5jCmluZGV4IGIwOGQwOTYuLjhkNTNmNjYgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvcXVvdGEuYworKysgYi9mcy9nZnMyL3F1b3RhLmMKQEAgLTQ1LDcgKzQ1LDYgQEAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Jpby5oPgogI2luY2x1ZGUgPGxpbnV4L2dmczJfb25kaXNrLmg+Ci0jaW5jbHVkZSA8bGludXgvbG1faW50ZXJmYWNlLmg+CiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZyZWV6ZXIuaD4KIApAQCAtODAsNiArNzksNTEgQEAKIAl1MzIgcWNfaWQ7CiB9OwogCitzdGF0aWMgTElTVF9IRUFEKHFkX2xydV9saXN0KTsKK3N0YXRpYyBhdG9taWNfdCBxZF9scnVfY291bnQgPSBBVE9NSUNfSU5JVCgwKTsKK3N0YXRpYyBzcGlubG9ja190IHFkX2xydV9sb2NrID0gU1BJTl9MT0NLX1VOTE9DS0VEOworCitpbnQgZ2ZzMl9zaHJpbmtfcWRfbWVtb3J5KGludCBuciwgZ2ZwX3QgZ2ZwX21hc2spCit7CisJc3RydWN0IGdmczJfcXVvdGFfZGF0YSAqcWQ7CisJc3RydWN0IGdmczJfc2JkICpzZHA7CisKKwlpZiAobnIgPT0gMCkKKwkJZ290byBvdXQ7CisKKwlpZiAoIShnZnBfbWFzayAmIF9fR0ZQX0ZTKSkKKwkJcmV0dXJuIC0xOworCisJc3Bpbl9sb2NrKCZxZF9scnVfbG9jayk7CisJd2hpbGUgKG5yICYmICFsaXN0X2VtcHR5KCZxZF9scnVfbGlzdCkpIHsKKwkJcWQgPSBsaXN0X2VudHJ5KHFkX2xydV9saXN0Lm5leHQsCisJCQkJc3RydWN0IGdmczJfcXVvdGFfZGF0YSwgcWRfcmVjbGFpbSk7CisJCXNkcCA9IHFkLT5xZF9nbC0+Z2xfc2JkOworCisJCS8qIEZyZWUgZnJvbSB0aGUgZmlsZXN5c3RlbS1zcGVjaWZpYyBsaXN0ICovCisJCWxpc3RfZGVsKCZxZC0+cWRfbGlzdCk7CisKKwkJZ2ZzMl9hc3NlcnRfd2FybihzZHAsICFxZC0+cWRfY2hhbmdlKTsKKwkJZ2ZzMl9hc3NlcnRfd2FybihzZHAsICFxZC0+cWRfc2xvdF9jb3VudCk7CisJCWdmczJfYXNzZXJ0X3dhcm4oc2RwLCAhcWQtPnFkX2JoX2NvdW50KTsKKworCQlnZnMyX2dsb2NrX3B1dChxZC0+cWRfZ2wpOworCQlhdG9taWNfZGVjKCZzZHAtPnNkX3F1b3RhX2NvdW50KTsKKworCQkvKiBEZWxldGUgaXQgZnJvbSB0aGUgY29tbW9uIHJlY2xhaW0gbGlzdCAqLworCQlsaXN0X2RlbF9pbml0KCZxZC0+cWRfcmVjbGFpbSk7CisJCWF0b21pY19kZWMoJnFkX2xydV9jb3VudCk7CisJCXNwaW5fdW5sb2NrKCZxZF9scnVfbG9jayk7CisJCWttZW1fY2FjaGVfZnJlZShnZnMyX3F1b3RhZF9jYWNoZXAsIHFkKTsKKwkJc3Bpbl9sb2NrKCZxZF9scnVfbG9jayk7CisJCW5yLS07CisJfQorCXNwaW5fdW5sb2NrKCZxZF9scnVfbG9jayk7CisKK291dDoKKwlyZXR1cm4gKGF0b21pY19yZWFkKCZxZF9scnVfY291bnQpICogc3lzY3RsX3Zmc19jYWNoZV9wcmVzc3VyZSkgLyAxMDA7Cit9CisKIHN0YXRpYyB1NjQgcWQyb2Zmc2V0KHN0cnVjdCBnZnMyX3F1b3RhX2RhdGEgKnFkKQogewogCXU2NCBvZmZzZXQ7CkBAIC0xMDAsMjIgKzE0NCwxOCBAQAogCWlmICghcWQpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JcWQtPnFkX2NvdW50ID0gMTsKKwlhdG9taWNfc2V0KCZxZC0+cWRfY291bnQsIDEpOwogCXFkLT5xZF9pZCA9IGlkOwogCWlmICh1c2VyKQogCQlzZXRfYml0KFFERl9VU0VSLCAmcWQtPnFkX2ZsYWdzKTsKIAlxZC0+cWRfc2xvdCA9IC0xOworCUlOSVRfTElTVF9IRUFEKCZxZC0+cWRfcmVjbGFpbSk7CiAKIAllcnJvciA9IGdmczJfZ2xvY2tfZ2V0KHNkcCwgMiAqICh1NjQpaWQgKyAhdXNlciwKIAkJCSAgICAgICZnZnMyX3F1b3RhX2dsb3BzLCBDUkVBVEUsICZxZC0+cWRfZ2wpOwogCWlmIChlcnJvcikKIAkJZ290byBmYWlsOwogCi0JZXJyb3IgPSBnZnMyX2x2Yl9ob2xkKHFkLT5xZF9nbCk7Ci0JZ2ZzMl9nbG9ja19wdXQocWQtPnFkX2dsKTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gZmFpbDsKLQogCSpxZHAgPSBxZDsKIAogCXJldHVybiAwOwpAQCAtMTM1LDExICsxNzUsMTcgQEAKIAogCWZvciAoOzspIHsKIAkJZm91bmQgPSAwOwotCQlzcGluX2xvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7CisJCXNwaW5fbG9jaygmcWRfbHJ1X2xvY2spOwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHFkLCAmc2RwLT5zZF9xdW90YV9saXN0LCBxZF9saXN0KSB7CiAJCQlpZiAocWQtPnFkX2lkID09IGlkICYmCiAJCQkgICAgIXRlc3RfYml0KFFERl9VU0VSLCAmcWQtPnFkX2ZsYWdzKSA9PSAhdXNlcikgewotCQkJCXFkLT5xZF9jb3VudCsrOworCQkJCWlmICghYXRvbWljX3JlYWQoJnFkLT5xZF9jb3VudCkgJiYKKwkJCQkgICAgIWxpc3RfZW1wdHkoJnFkLT5xZF9yZWNsYWltKSkgeworCQkJCQkvKiBSZW1vdmUgaXQgZnJvbSByZWNsYWltIGxpc3QgKi8KKwkJCQkJbGlzdF9kZWxfaW5pdCgmcWQtPnFkX3JlY2xhaW0pOworCQkJCQlhdG9taWNfZGVjKCZxZF9scnVfY291bnQpOworCQkJCX0KKwkJCQlhdG9taWNfaW5jKCZxZC0+cWRfY291bnQpOwogCQkJCWZvdW5kID0gMTsKIAkJCQlicmVhazsKIAkJCX0KQEAgLTE1NSwxMSArMjAxLDExIEBACiAJCQluZXdfcWQgPSBOVUxMOwogCQl9CiAKLQkJc3Bpbl91bmxvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7CisJCXNwaW5fdW5sb2NrKCZxZF9scnVfbG9jayk7CiAKIAkJaWYgKHFkIHx8ICFjcmVhdGUpIHsKIAkJCWlmIChuZXdfcWQpIHsKLQkJCQlnZnMyX2x2Yl91bmhvbGQobmV3X3FkLT5xZF9nbCk7CisJCQkJZ2ZzMl9nbG9ja19wdXQobmV3X3FkLT5xZF9nbCk7CiAJCQkJa21lbV9jYWNoZV9mcmVlKGdmczJfcXVvdGFkX2NhY2hlcCwgbmV3X3FkKTsKIAkJCX0KIAkJCSpxZHAgPSBxZDsKQEAgLTE3NSwyMSArMjIxLDE4IEBACiBzdGF0aWMgdm9pZCBxZF9ob2xkKHN0cnVjdCBnZnMyX3F1b3RhX2RhdGEgKnFkKQogewogCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gcWQtPnFkX2dsLT5nbF9zYmQ7Ci0KLQlzcGluX2xvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7Ci0JZ2ZzMl9hc3NlcnQoc2RwLCBxZC0+cWRfY291bnQpOwotCXFkLT5xZF9jb3VudCsrOwotCXNwaW5fdW5sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOworCWdmczJfYXNzZXJ0KHNkcCwgYXRvbWljX3JlYWQoJnFkLT5xZF9jb3VudCkpOworCWF0b21pY19pbmMoJnFkLT5xZF9jb3VudCk7CiB9CiAKIHN0YXRpYyB2b2lkIHFkX3B1dChzdHJ1Y3QgZ2ZzMl9xdW90YV9kYXRhICpxZCkKIHsKLQlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IHFkLT5xZF9nbC0+Z2xfc2JkOwotCXNwaW5fbG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKLQlnZnMyX2Fzc2VydChzZHAsIHFkLT5xZF9jb3VudCk7Ci0JaWYgKCEtLXFkLT5xZF9jb3VudCkKLQkJcWQtPnFkX2xhc3RfdG91Y2hlZCA9IGppZmZpZXM7Ci0Jc3Bpbl91bmxvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7CisJaWYgKGF0b21pY19kZWNfYW5kX2xvY2soJnFkLT5xZF9jb3VudCwgJnFkX2xydV9sb2NrKSkgeworCQkvKiBBZGQgdG8gdGhlIHJlY2xhaW0gbGlzdCAqLworCQlsaXN0X2FkZF90YWlsKCZxZC0+cWRfcmVjbGFpbSwgJnFkX2xydV9saXN0KTsKKwkJYXRvbWljX2luYygmcWRfbHJ1X2NvdW50KTsKKwkJc3Bpbl91bmxvY2soJnFkX2xydV9sb2NrKTsKKwl9CiB9CiAKIHN0YXRpYyBpbnQgc2xvdF9nZXQoc3RydWN0IGdmczJfcXVvdGFfZGF0YSAqcWQpCkBAIC0xOTgsMTAgKzI0MSwxMCBAQAogCXVuc2lnbmVkIGludCBjLCBvID0gMCwgYjsKIAl1bnNpZ25lZCBjaGFyIGJ5dGUgPSAwOwogCi0Jc3Bpbl9sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOworCXNwaW5fbG9jaygmcWRfbHJ1X2xvY2spOwogCiAJaWYgKHFkLT5xZF9zbG90X2NvdW50KyspIHsKLQkJc3Bpbl91bmxvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7CisJCXNwaW5fdW5sb2NrKCZxZF9scnVfbG9jayk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMjI1LDEzICsyNjgsMTMgQEAKIAogCXNkcC0+c2RfcXVvdGFfYml0bWFwW2NdW29dIHw9IDEgPDwgYjsKIAotCXNwaW5fdW5sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOworCXNwaW5fdW5sb2NrKCZxZF9scnVfbG9jayk7CiAKIAlyZXR1cm4gMDsKIAogZmFpbDoKIAlxZC0+cWRfc2xvdF9jb3VudC0tOwotCXNwaW5fdW5sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOworCXNwaW5fdW5sb2NrKCZxZF9scnVfbG9jayk7CiAJcmV0dXJuIC1FTk9TUEM7CiB9CiAKQEAgLTIzOSwyMyArMjgyLDIzIEBACiB7CiAJc3RydWN0IGdmczJfc2JkICpzZHAgPSBxZC0+cWRfZ2wtPmdsX3NiZDsKIAotCXNwaW5fbG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKKwlzcGluX2xvY2soJnFkX2xydV9sb2NrKTsKIAlnZnMyX2Fzc2VydChzZHAsIHFkLT5xZF9zbG90X2NvdW50KTsKIAlxZC0+cWRfc2xvdF9jb3VudCsrOwotCXNwaW5fdW5sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOworCXNwaW5fdW5sb2NrKCZxZF9scnVfbG9jayk7CiB9CiAKIHN0YXRpYyB2b2lkIHNsb3RfcHV0KHN0cnVjdCBnZnMyX3F1b3RhX2RhdGEgKnFkKQogewogCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gcWQtPnFkX2dsLT5nbF9zYmQ7CiAKLQlzcGluX2xvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7CisJc3Bpbl9sb2NrKCZxZF9scnVfbG9jayk7CiAJZ2ZzMl9hc3NlcnQoc2RwLCBxZC0+cWRfc2xvdF9jb3VudCk7CiAJaWYgKCEtLXFkLT5xZF9zbG90X2NvdW50KSB7CiAJCWdmczJfaWNiaXRfbXVuZ2Uoc2RwLCBzZHAtPnNkX3F1b3RhX2JpdG1hcCwgcWQtPnFkX3Nsb3QsIDApOwogCQlxZC0+cWRfc2xvdCA9IC0xOwogCX0KLQlzcGluX3VubG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKKwlzcGluX3VubG9jaygmcWRfbHJ1X2xvY2spOwogfQogCiBzdGF0aWMgaW50IGJoX2dldChzdHJ1Y3QgZ2ZzMl9xdW90YV9kYXRhICpxZCkKQEAgLTMzMCw3ICszNzMsNyBAQAogCWlmIChzZHAtPnNkX3Zmcy0+c19mbGFncyAmIE1TX1JET05MWSkKIAkJcmV0dXJuIDA7CiAKLQlzcGluX2xvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7CisJc3Bpbl9sb2NrKCZxZF9scnVfbG9jayk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHFkLCAmc2RwLT5zZF9xdW90YV9saXN0LCBxZF9saXN0KSB7CiAJCWlmICh0ZXN0X2JpdChRREZfTE9DS0VELCAmcWQtPnFkX2ZsYWdzKSB8fApAQCAtMzQxLDggKzM4NCw4IEBACiAJCWxpc3RfbW92ZV90YWlsKCZxZC0+cWRfbGlzdCwgJnNkcC0+c2RfcXVvdGFfbGlzdCk7CiAKIAkJc2V0X2JpdChRREZfTE9DS0VELCAmcWQtPnFkX2ZsYWdzKTsKLQkJZ2ZzMl9hc3NlcnRfd2FybihzZHAsIHFkLT5xZF9jb3VudCk7Ci0JCXFkLT5xZF9jb3VudCsrOworCQlnZnMyX2Fzc2VydF93YXJuKHNkcCwgYXRvbWljX3JlYWQoJnFkLT5xZF9jb3VudCkpOworCQlhdG9taWNfaW5jKCZxZC0+cWRfY291bnQpOwogCQlxZC0+cWRfY2hhbmdlX3N5bmMgPSBxZC0+cWRfY2hhbmdlOwogCQlnZnMyX2Fzc2VydF93YXJuKHNkcCwgcWQtPnFkX3Nsb3RfY291bnQpOwogCQlxZC0+cWRfc2xvdF9jb3VudCsrOwpAQCAtMzU0LDcgKzM5Nyw3IEBACiAJaWYgKCFmb3VuZCkKIAkJcWQgPSBOVUxMOwogCi0Jc3Bpbl91bmxvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7CisJc3Bpbl91bmxvY2soJnFkX2xydV9sb2NrKTsKIAogCWlmIChxZCkgewogCQlnZnMyX2Fzc2VydF93YXJuKHNkcCwgcWQtPnFkX2NoYW5nZV9zeW5jKTsKQEAgLTM3OSwyNCArNDIyLDI0IEBACiAJaWYgKHNkcC0+c2RfdmZzLT5zX2ZsYWdzICYgTVNfUkRPTkxZKQogCQlyZXR1cm4gMDsKIAotCXNwaW5fbG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKKwlzcGluX2xvY2soJnFkX2xydV9sb2NrKTsKIAogCWlmICh0ZXN0X2JpdChRREZfTE9DS0VELCAmcWQtPnFkX2ZsYWdzKSB8fAogCSAgICAhdGVzdF9iaXQoUURGX0NIQU5HRSwgJnFkLT5xZF9mbGFncykpIHsKLQkJc3Bpbl91bmxvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7CisJCXNwaW5fdW5sb2NrKCZxZF9scnVfbG9jayk7CiAJCXJldHVybiAwOwogCX0KIAogCWxpc3RfbW92ZV90YWlsKCZxZC0+cWRfbGlzdCwgJnNkcC0+c2RfcXVvdGFfbGlzdCk7CiAKIAlzZXRfYml0KFFERl9MT0NLRUQsICZxZC0+cWRfZmxhZ3MpOwotCWdmczJfYXNzZXJ0X3dhcm4oc2RwLCBxZC0+cWRfY291bnQpOwotCXFkLT5xZF9jb3VudCsrOworCWdmczJfYXNzZXJ0X3dhcm4oc2RwLCBhdG9taWNfcmVhZCgmcWQtPnFkX2NvdW50KSk7CisJYXRvbWljX2luYygmcWQtPnFkX2NvdW50KTsKIAlxZC0+cWRfY2hhbmdlX3N5bmMgPSBxZC0+cWRfY2hhbmdlOwogCWdmczJfYXNzZXJ0X3dhcm4oc2RwLCBxZC0+cWRfc2xvdF9jb3VudCk7CiAJcWQtPnFkX3Nsb3RfY291bnQrKzsKIAotCXNwaW5fdW5sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOworCXNwaW5fdW5sb2NrKCZxZF9scnVfbG9jayk7CiAKIAlnZnMyX2Fzc2VydF93YXJuKHNkcCwgcWQtPnFkX2NoYW5nZV9zeW5jKTsKIAlpZiAoYmhfZ2V0KHFkKSkgewpAQCAtNTU2LDkgKzU5OSw5IEBACiAJeCA9IGJlNjRfdG9fY3B1KHFjLT5xY19jaGFuZ2UpICsgY2hhbmdlOwogCXFjLT5xY19jaGFuZ2UgPSBjcHVfdG9fYmU2NCh4KTsKIAotCXNwaW5fbG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKKwlzcGluX2xvY2soJnFkX2xydV9sb2NrKTsKIAlxZC0+cWRfY2hhbmdlID0geDsKLQlzcGluX3VubG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKKwlzcGluX3VubG9jaygmcWRfbHJ1X2xvY2spOwogCiAJaWYgKCF4KSB7CiAJCWdmczJfYXNzZXJ0X3dhcm4oc2RwLCB0ZXN0X2JpdChRREZfQ0hBTkdFLCAmcWQtPnFkX2ZsYWdzKSk7CkBAIC04MDIsOCArODQ1LDggQEAKIAkJbG9mZl90IHBvczsKIAkJZ2ZzMl9nbG9ja19kcV91bmluaXQocV9naCk7CiAJCWVycm9yID0gZ2ZzMl9nbG9ja19ucV9pbml0KHFkLT5xZF9nbCwKLQkJCQkJICBMTV9TVF9FWENMVVNJVkUsIEdMX05PQ0FDSEUsCi0JCQkJCSAgcV9naCk7CisJCQkJCSAgIExNX1NUX0VYQ0xVU0lWRSwgR0xfTk9DQUNIRSwKKwkJCQkJICAgcV9naCk7CiAJCWlmIChlcnJvcikKIAkJCXJldHVybiBlcnJvcjsKIApAQCAtODIwLDcgKzg2Myw2IEBACiAKIAkJZ2ZzMl9nbG9ja19kcV91bmluaXQoJmlfZ2gpOwogCi0KIAkJZ2ZzMl9xdW90YV9pbigmcSwgYnVmKTsKIAkJcWx2YiA9IChzdHJ1Y3QgZ2ZzMl9xdW90YV9sdmIgKilxZC0+cWRfZ2wtPmdsX2x2YjsKIAkJcWx2Yi0+cWJfbWFnaWMgPSBjcHVfdG9fYmUzMihHRlMyX01BR0lDKTsKQEAgLTg5MCw5ICs5MzIsOSBAQAogCWlmICghcWQtPnFkX3FiLnFiX2xpbWl0KQogCQlyZXR1cm4gMDsKIAotCXNwaW5fbG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKKwlzcGluX2xvY2soJnFkX2xydV9sb2NrKTsKIAl2YWx1ZSA9IHFkLT5xZF9jaGFuZ2U7Ci0Jc3Bpbl91bmxvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7CisJc3Bpbl91bmxvY2soJnFkX2xydV9sb2NrKTsKIAogCXNwaW5fbG9jaygmZ3QtPmd0X3NwaW4pOwogCW51bSA9IGd0LT5ndF9xdW90YV9zY2FsZV9udW07CkBAIC05ODUsOSArMTAyNyw5IEBACiAJCQljb250aW51ZTsKIAogCQl2YWx1ZSA9IChzNjQpYmU2NF90b19jcHUocWQtPnFkX3FiLnFiX3ZhbHVlKTsKLQkJc3Bpbl9sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOworCQlzcGluX2xvY2soJnFkX2xydV9sb2NrKTsKIAkJdmFsdWUgKz0gcWQtPnFkX2NoYW5nZTsKLQkJc3Bpbl91bmxvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7CisJCXNwaW5fdW5sb2NrKCZxZF9scnVfbG9jayk7CiAKIAkJaWYgKGJlNjRfdG9fY3B1KHFkLT5xZF9xYi5xYl9saW1pdCkgJiYgKHM2NCliZTY0X3RvX2NwdShxZC0+cWRfcWIucWJfbGltaXQpIDwgdmFsdWUpIHsKIAkJCXByaW50X21lc3NhZ2UocWQsICJleGNlZWRlZCIpOwpAQCAtMTE3MSwxMyArMTIxMywxMiBAQAogCQkJcWQtPnFkX2NoYW5nZSA9IHFjLnFjX2NoYW5nZTsKIAkJCXFkLT5xZF9zbG90ID0gc2xvdDsKIAkJCXFkLT5xZF9zbG90X2NvdW50ID0gMTsKLQkJCXFkLT5xZF9sYXN0X3RvdWNoZWQgPSBqaWZmaWVzOwogCi0JCQlzcGluX2xvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7CisJCQlzcGluX2xvY2soJnFkX2xydV9sb2NrKTsKIAkJCWdmczJfaWNiaXRfbXVuZ2Uoc2RwLCBzZHAtPnNkX3F1b3RhX2JpdG1hcCwgc2xvdCwgMSk7CiAJCQlsaXN0X2FkZCgmcWQtPnFkX2xpc3QsICZzZHAtPnNkX3F1b3RhX2xpc3QpOwogCQkJYXRvbWljX2luYygmc2RwLT5zZF9xdW90YV9jb3VudCk7Ci0JCQlzcGluX3VubG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKKwkJCXNwaW5fdW5sb2NrKCZxZF9scnVfbG9jayk7CiAKIAkJCWZvdW5kKys7CiAJCX0KQEAgLTExOTcsNzMgKzEyMzgsNDggQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLXN0YXRpYyB2b2lkIGdmczJfcXVvdGFfc2NhbihzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCkKLXsKLQlzdHJ1Y3QgZ2ZzMl9xdW90YV9kYXRhICpxZCwgKnNhZmU7Ci0JTElTVF9IRUFEKGRlYWQpOwotCi0Jc3Bpbl9sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShxZCwgc2FmZSwgJnNkcC0+c2RfcXVvdGFfbGlzdCwgcWRfbGlzdCkgewotCQlpZiAoIXFkLT5xZF9jb3VudCAmJgotCQkgICAgdGltZV9hZnRlcl9lcShqaWZmaWVzLCBxZC0+cWRfbGFzdF90b3VjaGVkICsKLQkJCSAgICAgICAgZ2ZzMl90dW5lX2dldChzZHAsIGd0X3F1b3RhX2NhY2hlX3NlY3MpICogSFopKSB7Ci0JCQlsaXN0X21vdmUoJnFkLT5xZF9saXN0LCAmZGVhZCk7Ci0JCQlnZnMyX2Fzc2VydF93YXJuKHNkcCwKLQkJCQkJIGF0b21pY19yZWFkKCZzZHAtPnNkX3F1b3RhX2NvdW50KSA+IDApOwotCQkJYXRvbWljX2RlYygmc2RwLT5zZF9xdW90YV9jb3VudCk7Ci0JCX0KLQl9Ci0Jc3Bpbl91bmxvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7Ci0KLQl3aGlsZSAoIWxpc3RfZW1wdHkoJmRlYWQpKSB7Ci0JCXFkID0gbGlzdF9lbnRyeShkZWFkLm5leHQsIHN0cnVjdCBnZnMyX3F1b3RhX2RhdGEsIHFkX2xpc3QpOwotCQlsaXN0X2RlbCgmcWQtPnFkX2xpc3QpOwotCi0JCWdmczJfYXNzZXJ0X3dhcm4oc2RwLCAhcWQtPnFkX2NoYW5nZSk7Ci0JCWdmczJfYXNzZXJ0X3dhcm4oc2RwLCAhcWQtPnFkX3Nsb3RfY291bnQpOwotCQlnZnMyX2Fzc2VydF93YXJuKHNkcCwgIXFkLT5xZF9iaF9jb3VudCk7Ci0KLQkJZ2ZzMl9sdmJfdW5ob2xkKHFkLT5xZF9nbCk7Ci0JCWttZW1fY2FjaGVfZnJlZShnZnMyX3F1b3RhZF9jYWNoZXAsIHFkKTsKLQl9Ci19Ci0KIHZvaWQgZ2ZzMl9xdW90YV9jbGVhbnVwKHN0cnVjdCBnZnMyX3NiZCAqc2RwKQogewogCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQgPSAmc2RwLT5zZF9xdW90YV9saXN0OwogCXN0cnVjdCBnZnMyX3F1b3RhX2RhdGEgKnFkOwogCXVuc2lnbmVkIGludCB4OwogCi0Jc3Bpbl9sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOworCXNwaW5fbG9jaygmcWRfbHJ1X2xvY2spOwogCXdoaWxlICghbGlzdF9lbXB0eShoZWFkKSkgewogCQlxZCA9IGxpc3RfZW50cnkoaGVhZC0+cHJldiwgc3RydWN0IGdmczJfcXVvdGFfZGF0YSwgcWRfbGlzdCk7CiAKLQkJaWYgKHFkLT5xZF9jb3VudCA+IDEgfHwKLQkJICAgIChxZC0+cWRfY291bnQgJiYgIXRlc3RfYml0KFFERl9DSEFOR0UsICZxZC0+cWRfZmxhZ3MpKSkgeworCQlpZiAoYXRvbWljX3JlYWQoJnFkLT5xZF9jb3VudCkgPiAxIHx8CisJCSAgICAoYXRvbWljX3JlYWQoJnFkLT5xZF9jb3VudCkgJiYKKwkJICAgICAhdGVzdF9iaXQoUURGX0NIQU5HRSwgJnFkLT5xZF9mbGFncykpKSB7CiAJCQlsaXN0X21vdmUoJnFkLT5xZF9saXN0LCBoZWFkKTsKLQkJCXNwaW5fdW5sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOworCQkJc3Bpbl91bmxvY2soJnFkX2xydV9sb2NrKTsKIAkJCXNjaGVkdWxlKCk7Ci0JCQlzcGluX2xvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7CisJCQlzcGluX2xvY2soJnFkX2xydV9sb2NrKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKIAkJbGlzdF9kZWwoJnFkLT5xZF9saXN0KTsKKwkJLyogQWxzbyByZW1vdmUgaWYgdGhpcyBxZCBleGlzdHMgaW4gdGhlIHJlY2xhaW0gbGlzdCAqLworCQlpZiAoIWxpc3RfZW1wdHkoJnFkLT5xZF9yZWNsYWltKSkgeworCQkJbGlzdF9kZWxfaW5pdCgmcWQtPnFkX3JlY2xhaW0pOworCQkJYXRvbWljX2RlYygmcWRfbHJ1X2NvdW50KTsKKwkJfQogCQlhdG9taWNfZGVjKCZzZHAtPnNkX3F1b3RhX2NvdW50KTsKLQkJc3Bpbl91bmxvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7CisJCXNwaW5fdW5sb2NrKCZxZF9scnVfbG9jayk7CiAKLQkJaWYgKCFxZC0+cWRfY291bnQpIHsKKwkJaWYgKCFhdG9taWNfcmVhZCgmcWQtPnFkX2NvdW50KSkgewogCQkJZ2ZzMl9hc3NlcnRfd2FybihzZHAsICFxZC0+cWRfY2hhbmdlKTsKIAkJCWdmczJfYXNzZXJ0X3dhcm4oc2RwLCAhcWQtPnFkX3Nsb3RfY291bnQpOwogCQl9IGVsc2UKIAkJCWdmczJfYXNzZXJ0X3dhcm4oc2RwLCBxZC0+cWRfc2xvdF9jb3VudCA9PSAxKTsKIAkJZ2ZzMl9hc3NlcnRfd2FybihzZHAsICFxZC0+cWRfYmhfY291bnQpOwogCi0JCWdmczJfbHZiX3VuaG9sZChxZC0+cWRfZ2wpOworCQlnZnMyX2dsb2NrX3B1dChxZC0+cWRfZ2wpOwogCQlrbWVtX2NhY2hlX2ZyZWUoZ2ZzMl9xdW90YWRfY2FjaGVwLCBxZCk7CiAKLQkJc3Bpbl9sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOworCQlzcGluX2xvY2soJnFkX2xydV9sb2NrKTsKIAl9Ci0Jc3Bpbl91bmxvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7CisJc3Bpbl91bmxvY2soJnFkX2xydV9sb2NrKTsKIAogCWdmczJfYXNzZXJ0X3dhcm4oc2RwLCAhYXRvbWljX3JlYWQoJnNkcC0+c2RfcXVvdGFfY291bnQpKTsKIApAQCAtMTM0MSw5ICsxMzU3LDYgQEAKIAkJcXVvdGFkX2NoZWNrX3RpbWVvKHNkcCwgInN5bmMiLCBnZnMyX3F1b3RhX3N5bmMsIHQsCiAJCQkJICAgJnF1b3RhZF90aW1lbywgJnR1bmUtPmd0X3F1b3RhX3F1YW50dW0pOwogCi0JCS8qIEZJWE1FOiBUaGlzIHNob3VsZCBiZSB0dXJuZWQgaW50byBhIHNocmlua2VyICovCi0JCWdmczJfcXVvdGFfc2NhbihzZHApOwotCiAJCS8qIENoZWNrIGZvciAmIHJlY292ZXIgcGFydGlhbGx5IHRydW5jYXRlZCBpbm9kZXMgKi8KIAkJcXVvdGFkX2NoZWNrX3RydW5jX2xpc3Qoc2RwKTsKIApkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9xdW90YS5oIGIvZnMvZ2ZzMi9xdW90YS5oCmluZGV4IGNlYzkwMzIuLjBmYTVmYTYgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvcXVvdGEuaAorKysgYi9mcy9nZnMyL3F1b3RhLmgKQEAgLTQ5LDQgKzQ5LDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCitleHRlcm4gaW50IGdmczJfc2hyaW5rX3FkX21lbW9yeShpbnQgbnIsIGdmcF90IGdmcF9tYXNrKTsKKwogI2VuZGlmIC8qIF9fUVVPVEFfRE9UX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9yZWNvdmVyeS5jIGIvZnMvZ2ZzMi9yZWNvdmVyeS5jCmluZGV4IGVmZDA5YzMuLjI0N2U4ZjcgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvcmVjb3ZlcnkuYworKysgYi9mcy9nZnMyL3JlY292ZXJ5LmMKQEAgLTEzLDcgKzEzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L2dmczJfb25kaXNrLmg+CiAjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KLSNpbmNsdWRlIDxsaW51eC9sbV9pbnRlcmZhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgogCkBAIC00MjcsMjAgKzQyNiwyMyBAQAogfQogCiAKLXN0YXRpYyB2b2lkIGdmczJfbG1fcmVjb3ZlcnlfZG9uZShzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgdW5zaWduZWQgaW50IGppZCwKLQkJCQkgIHVuc2lnbmVkIGludCBtZXNzYWdlKQorc3RhdGljIHZvaWQgZ2ZzMl9yZWNvdmVyeV9kb25lKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCB1bnNpZ25lZCBpbnQgamlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBtZXNzYWdlKQogewotCWlmICghc2RwLT5zZF9sb2Nrc3RydWN0LmxzX29wcy0+bG1fcmVjb3ZlcnlfZG9uZSkKLQkJcmV0dXJuOwotCi0JaWYgKGxpa2VseSghdGVzdF9iaXQoU0RGX1NIVVRET1dOLCAmc2RwLT5zZF9mbGFncykpKQotCQlzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfb3BzLT5sbV9yZWNvdmVyeV9kb25lKAotCQkJc2RwLT5zZF9sb2Nrc3RydWN0LmxzX2xvY2tzcGFjZSwgamlkLCBtZXNzYWdlKTsKKwljaGFyIGVudl9qaWRbMjBdOworCWNoYXIgZW52X3N0YXR1c1syMF07CisJY2hhciAqZW52cFtdID0geyBlbnZfamlkLCBlbnZfc3RhdHVzLCBOVUxMIH07CisJc3RydWN0IGxtX2xvY2tzdHJ1Y3QgKmxzID0gJnNkcC0+c2RfbG9ja3N0cnVjdDsKKyAgICAgICAgbHMtPmxzX3JlY292ZXJfamlkX2RvbmUgPSBqaWQ7CisgICAgICAgIGxzLT5sc19yZWNvdmVyX2ppZF9zdGF0dXMgPSBtZXNzYWdlOworCXNwcmludGYoZW52X2ppZCwgIkpJRD0lZCIsIGppZCk7CisJc3ByaW50ZihlbnZfc3RhdHVzLCAiUkVDT1ZFUlk9JXMiLAorCQltZXNzYWdlID09IExNX1JEX1NVQ0NFU1MgPyAiRG9uZSIgOiAiRmFpbGVkIik7CisgICAgICAgIGtvYmplY3RfdWV2ZW50X2Vudigmc2RwLT5zZF9rb2JqLCBLT0JKX0NIQU5HRSwgZW52cCk7CiB9CiAKLQogLyoqCi0gKiBnZnMyX3JlY292ZXJfam91cm5hbCAtIHJlY292ZXJ5IGEgZ2l2ZW4gam91cm5hbAorICogZ2ZzMl9yZWNvdmVyX2pvdXJuYWwgLSByZWNvdmVyIGEgZ2l2ZW4gam91cm5hbAogICogQGpkOiB0aGUgc3RydWN0IGdmczJfamRlc2MgZGVzY3JpYmluZyB0aGUgam91cm5hbAogICoKICAqIEFjcXVpcmUgdGhlIGpvdXJuYWwncyBsb2NrLCBjaGVjayB0byBzZWUgaWYgdGhlIGpvdXJuYWwgaXMgY2xlYW4sIGFuZApAQCAtNTYxLDcgKzU2Myw3IEBACiAJaWYgKGpkLT5qZF9qaWQgIT0gc2RwLT5zZF9sb2Nrc3RydWN0LmxzX2ppZCkKIAkJZ2ZzMl9nbG9ja19kcV91bmluaXQoJmppX2doKTsKIAotCWdmczJfbG1fcmVjb3ZlcnlfZG9uZShzZHAsIGpkLT5qZF9qaWQsIExNX1JEX1NVQ0NFU1MpOworCWdmczJfcmVjb3ZlcnlfZG9uZShzZHAsIGpkLT5qZF9qaWQsIExNX1JEX1NVQ0NFU1MpOwogCiAJaWYgKGpkLT5qZF9qaWQgIT0gc2RwLT5zZF9sb2Nrc3RydWN0LmxzX2ppZCkKIAkJZ2ZzMl9nbG9ja19kcV91bmluaXQoJmpfZ2gpOwpAQCAtNTgxLDcgKzU4Myw3IEBACiAJZnNfaW5mbyhzZHAsICJqaWQ9JXU6ICVzXG4iLCBqZC0+amRfamlkLCAoZXJyb3IpID8gIkZhaWxlZCIgOiAiRG9uZSIpOwogCiBmYWlsOgotCWdmczJfbG1fcmVjb3ZlcnlfZG9uZShzZHAsIGpkLT5qZF9qaWQsIExNX1JEX0dBVkVVUCk7CisJZ2ZzMl9yZWNvdmVyeV9kb25lKHNkcCwgamQtPmpkX2ppZCwgTE1fUkRfR0FWRVVQKTsKIAlyZXR1cm4gZXJyb3I7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2dmczIvcmdycC5jIGIvZnMvZ2ZzMi9yZ3JwLmMKaW5kZXggOGIwMWM2My4uZjAzZDAyNCAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9yZ3JwLmMKKysrIGIvZnMvZ2ZzMi9yZ3JwLmMKQEAgLTEzLDggKzEzLDggQEAKICNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZzMl9vbmRpc2suaD4KLSNpbmNsdWRlIDxsaW51eC9sbV9pbnRlcmZhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgorI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogCiAjaW5jbHVkZSAiZ2ZzMi5oIgogI2luY2x1ZGUgImluY29yZS5oIgpAQCAtMTMyLDgxICsxMzIsOTAgQEAKIH0KIAogLyoqCisgKiBnZnMyX2JpdF9zZWFyY2gKKyAqIEBwdHI6IFBvaW50ZXIgdG8gYml0bWFwIGRhdGEKKyAqIEBtYXNrOiBNYXNrIHRvIHVzZSAobm9ybWFsbHkgMHg1NTU1NS4uLi4gYnV0IGFkanVzdGVkIGZvciBzZWFyY2ggc3RhcnQpCisgKiBAc3RhdGU6IFRoZSBzdGF0ZSB3ZSBhcmUgc2VhcmNoaW5nIGZvcgorICoKKyAqIFdlIHhvciB0aGUgYml0bWFwIGRhdGEgd2l0aCBhIHBhdHRlciB3aGljaCBpcyB0aGUgYml0d2lzZSBvcHBvc2l0ZQorICogb2Ygd2hhdCB3ZSBhcmUgbG9va2luZyBmb3IsIHRoaXMgZ2l2ZXMgcmlzZSB0byBhIHBhdHRlcm4gb2Ygb25lcworICogd2hlcmV2ZXIgdGhlcmUgaXMgYSBtYXRjaC4gU2luY2Ugd2UgaGF2ZSB0d28gYml0cyBwZXIgZW50cnksIHdlCisgKiB0YWtlIHRoaXMgcGF0dGVybiwgc2hpZnQgaXQgZG93biBieSBvbmUgcGxhY2UgYW5kIHRoZW4gYW5kIGl0IHdpdGgKKyAqIHRoZSBvcmlnaW5hbC4gQWxsIHRoZSBldmVuIGJpdCBwb3NpdGlvbnMgKDAsMiw0LCBldGMpIHRoZW4gcmVwcmVzZW50CisgKiBzdWNjZXNzZnVsIG1hdGNoZXMsIHNvIHdlIG1hc2sgd2l0aCAweDU1NTU1Li4uLi4gdG8gcmVtb3ZlIHRoZSB1bndhbnRlZAorICogb2RkIGJpdCBwb3NpdGlvbnMuCisgKgorICogVGhpcyBhbGxvd3Mgc2VhcmNoaW5nIG9mIGEgd2hvbGUgdTY0IGF0IG9uY2UgKDMyIGJsb2Nrcykgd2l0aCBhCisgKiBzaW5nbGUgdGVzdCAob24gNjQgYml0IGFyY2hlcykuCisgKi8KKworc3RhdGljIGlubGluZSB1NjQgZ2ZzMl9iaXRfc2VhcmNoKGNvbnN0IF9fbGU2NCAqcHRyLCB1NjQgbWFzaywgdTggc3RhdGUpCit7CisJdTY0IHRtcDsKKwlzdGF0aWMgY29uc3QgdTY0IHNlYXJjaFtdID0geworCQlbMF0gPSAweGZmZmZmZmZmZmZmZmZmZmZVTEwsCisJCVsxXSA9IDB4YWFhYWFhYWFhYWFhYWFhYVVMTCwKKwkJWzJdID0gMHg1NTU1NTU1NTU1NTU1NTU1VUxMLAorCQlbM10gPSAweDAwMDAwMDAwMDAwMDAwMDBVTEwsCisJfTsKKwl0bXAgPSBsZTY0X3RvX2NwdSgqcHRyKSBeIHNlYXJjaFtzdGF0ZV07CisJdG1wICY9ICh0bXAgPj4gMSk7CisJdG1wICY9IG1hc2s7CisJcmV0dXJuIHRtcDsKK30KKworLyoqCiAgKiBnZnMyX2JpdGZpdCAtIFNlYXJjaCBhbiByZ3JwJ3MgYml0bWFwIGJ1ZmZlciB0byBmaW5kIGEgYml0LXBhaXIgcmVwcmVzZW50aW5nCiAgKiAgICAgICBhIGJsb2NrIGluIGEgZ2l2ZW4gYWxsb2NhdGlvbiBzdGF0ZS4KICAqIEBidWZmZXI6IHRoZSBidWZmZXIgdGhhdCBob2xkcyB0aGUgYml0bWFwcwotICogQGJ1ZmxlbjogdGhlIGxlbmd0aCAoaW4gYnl0ZXMpIG9mIHRoZSBidWZmZXIKKyAqIEBsZW46IHRoZSBsZW5ndGggKGluIGJ5dGVzKSBvZiB0aGUgYnVmZmVyCiAgKiBAZ29hbDogc3RhcnQgc2VhcmNoIGF0IHRoaXMgYmxvY2sncyBiaXQtcGFpciAod2l0aGluIEBidWZmZXIpCi0gKiBAb2xkX3N0YXRlOiBHRlMyX0JMS1NUX1hYWCB0aGUgc3RhdGUgb2YgdGhlIGJsb2NrIHdlJ3JlIGxvb2tpbmcgZm9yLgorICogQHN0YXRlOiBHRlMyX0JMS1NUX1hYWCB0aGUgc3RhdGUgb2YgdGhlIGJsb2NrIHdlJ3JlIGxvb2tpbmcgZm9yLgogICoKICAqIFNjb3BlIG9mIEBnb2FsIGFuZCByZXR1cm5lZCBibG9jayBudW1iZXIgaXMgb25seSB3aXRoaW4gdGhpcyBiaXRtYXAgYnVmZmVyLAogICogbm90IGVudGlyZSByZ3JwIG9yIGZpbGVzeXN0ZW0uICBAYnVmZmVyIHdpbGwgYmUgb2Zmc2V0IGZyb20gdGhlIGFjdHVhbAotICogYmVnaW5uaW5nIG9mIGEgYml0bWFwIGJsb2NrIGJ1ZmZlciwgc2tpcHBpbmcgYW55IGhlYWRlciBzdHJ1Y3R1cmVzLgorICogYmVnaW5uaW5nIG9mIGEgYml0bWFwIGJsb2NrIGJ1ZmZlciwgc2tpcHBpbmcgYW55IGhlYWRlciBzdHJ1Y3R1cmVzLCBidXQKKyAqIGhlYWRlcnMgYXJlIGFsd2F5cyBhIG11bHRpcGxlIG9mIDY0IGJpdHMgbG9uZyBzbyB0aGF0IHRoZSBidWZmZXIgaXMKKyAqIGFsd2F5cyBhbGlnbmVkIHRvIGEgNjQgYml0IGJvdW5kYXJ5LgorICoKKyAqIFRoZSBzaXplIG9mIHRoZSBidWZmZXIgaXMgaW4gYnl0ZXMsIGJ1dCBpcyBpdCBhc3N1bWVkIHRoYXQgaXQgaXMKKyAqIGFsd2F5cyBvayB0byB0byByZWFkIGEgY29tcGxldGUgbXVsdGlwbGUgb2YgNjQgYml0cyBhdCB0aGUgZW5kCisgKiBvZiB0aGUgYmxvY2sgaW4gY2FzZSB0aGUgZW5kIGlzIG5vIGFsaWduZWQgdG8gYSBuYXR1cmFsIGJvdW5kYXJ5LgogICoKICAqIFJldHVybjogdGhlIGJsb2NrIG51bWJlciAoYml0bWFwIGJ1ZmZlciBzY29wZSkgdGhhdCB3YXMgZm91bmQKICAqLwogCi1zdGF0aWMgdTMyIGdmczJfYml0Zml0KGNvbnN0IHU4ICpidWZmZXIsIHVuc2lnbmVkIGludCBidWZsZW4sIHUzMiBnb2FsLAotCQkgICAgICAgdTggb2xkX3N0YXRlKQorc3RhdGljIHUzMiBnZnMyX2JpdGZpdChjb25zdCB1OCAqYnVmLCBjb25zdCB1bnNpZ25lZCBpbnQgbGVuLAorCQkgICAgICAgdTMyIGdvYWwsIHU4IHN0YXRlKQogewotCWNvbnN0IHU4ICpieXRlLCAqc3RhcnQsICplbmQ7Ci0JaW50IGJpdCwgc3RhcnRiaXQ7Ci0JdTMyIGcxLCBnMiwgbWlzYWxpZ25lZDsKLQl1bnNpZ25lZCBsb25nICpwbG9uZzsKLQl1bnNpZ25lZCBsb25nIGxza2lwdmFsOworCXUzMiBzcG9pbnQgPSAoZ29hbCA8PCAxKSAmICgoOCpzaXplb2YodTY0KSkgLSAxKTsKKwljb25zdCBfX2xlNjQgKnB0ciA9ICgoX19sZTY0ICopYnVmKSArIChnb2FsID4+IDUpOworCWNvbnN0IF9fbGU2NCAqZW5kID0gKF9fbGU2NCAqKShidWYgKyBBTElHTihsZW4sIHNpemVvZih1NjQpKSk7CisJdTY0IHRtcDsKKwl1NjQgbWFzayA9IDB4NTU1NTU1NTU1NTU1NTU1NVVMTDsKKwl1MzIgYml0OwogCi0JbHNraXB2YWwgPSAob2xkX3N0YXRlICYgR0ZTMl9CTEtTVF9VU0VEKSA/IExCSVRTS0lQMDAgOiBMQklUU0tJUDU1OwotCWcxID0gKGdvYWwgLyBHRlMyX05CQlkpOwotCXN0YXJ0ID0gYnVmZmVyICsgZzE7Ci0JYnl0ZSA9IHN0YXJ0OwotICAgICAgICBlbmQgPSBidWZmZXIgKyBidWZsZW47Ci0JZzIgPSBBTElHTihnMSwgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKLQlwbG9uZyA9ICh1bnNpZ25lZCBsb25nICopKGJ1ZmZlciArIGcyKTsKLQlzdGFydGJpdCA9IGJpdCA9IChnb2FsICUgR0ZTMl9OQkJZKSAqIEdGUzJfQklUX1NJWkU7Ci0JbWlzYWxpZ25lZCA9IGcyIC0gZzE7Ci0JaWYgKCFtaXNhbGlnbmVkKQotCQlnb3RvIHVsb25nX2FsaWduZWQ7Ci0vKiBwYXJzZSB0aGUgYml0bWFwIGEgYnl0ZSBhdCBhIHRpbWUgKi8KLW1pc2FsaWduZWQ6Ci0Jd2hpbGUgKGJ5dGUgPCBlbmQpIHsKLQkJaWYgKCgoKmJ5dGUgPj4gYml0KSAmIEdGUzJfQklUX01BU0spID09IG9sZF9zdGF0ZSkgewotCQkJcmV0dXJuIGdvYWwgKwotCQkJCSgoKGJ5dGUgLSBzdGFydCkgKiBHRlMyX05CQlkpICsKLQkJCQkgKChiaXQgLSBzdGFydGJpdCkgPj4gMSkpOwotCQl9Ci0JCWJpdCArPSBHRlMyX0JJVF9TSVpFOwotCQlpZiAoYml0ID49IEdGUzJfTkJCWSAqIEdGUzJfQklUX1NJWkUpIHsKLQkJCWJpdCA9IDA7Ci0JCQlieXRlKys7Ci0JCQltaXNhbGlnbmVkLS07Ci0JCQlpZiAoIW1pc2FsaWduZWQpIHsKLQkJCQlwbG9uZyA9ICh1bnNpZ25lZCBsb25nICopYnl0ZTsKLQkJCQlnb3RvIHVsb25nX2FsaWduZWQ7Ci0JCQl9Ci0JCX0KLQl9Ci0JcmV0dXJuIEJGSVROT0VOVDsKKwlCVUdfT04oc3RhdGUgPiAzKTsKIAotLyogcGFyc2UgdGhlIGJpdG1hcCBhIHVuc2lnbmVkIGxvbmcgYXQgYSB0aW1lICovCi11bG9uZ19hbGlnbmVkOgotCS8qIFN0b3AgYXQgImVuZCAtIDEiIG9yIGVsc2UgcHJlZmV0Y2ggY2FuIGdvIHBhc3QgdGhlIGVuZCBhbmQgc2VnZmF1bHQuCi0JICAgV2UgY291bGQgImlmIiBpdCBidXQgd2UnZCBsb3NlIHNvbWUgb2YgdGhlIHBlcmZvcm1hbmNlIGdhaW5lZC4KLQkgICBUaGlzIHdheSB3aWxsIG9ubHkgc2xvdyBkb3duIHNlYXJjaGluZyB0aGUgdmVyeSBsYXN0IDQvOCBieXRlcwotCSAgIGRlcGVuZGluZyBvbiBhcmNoaXRlY3R1cmUuICBJJ3ZlIGV4cGVyaW1lbnRlZCB3aXRoIHNldmVyYWwgd2F5cwotCSAgIG9mIHdyaXRpbmcgdGhpcyBzZWN0aW9uIHN1Y2ggYXMgdXNpbmcgYW4gZWxzZSBiZWZvcmUgdGhlIGdvdG8KLQkgICBidXQgdGhpcyBvbmUgc2VlbXMgdG8gYmUgdGhlIGZhc3Rlc3QuICovCi0Jd2hpbGUgKCh1bnNpZ25lZCBjaGFyICopcGxvbmcgPCBlbmQgLSBzaXplb2YodW5zaWduZWQgbG9uZykpIHsKLQkJcHJlZmV0Y2gocGxvbmcgKyAxKTsKLQkJaWYgKCgoKnBsb25nKSAmIExCSVRNQVNLKSAhPSBsc2tpcHZhbCkKLQkJCWJyZWFrOwotCQlwbG9uZysrOworCS8qIE1hc2sgb2ZmIGJpdHMgd2UgZG9uJ3QgY2FyZSBhYm91dCBhdCB0aGUgc3RhcnQgb2YgdGhlIHNlYXJjaCAqLworCW1hc2sgPDw9IHNwb2ludDsKKwl0bXAgPSBnZnMyX2JpdF9zZWFyY2gocHRyLCBtYXNrLCBzdGF0ZSk7CisJcHRyKys7CisJd2hpbGUodG1wID09IDAgJiYgcHRyIDwgZW5kKSB7CisJCXRtcCA9IGdmczJfYml0X3NlYXJjaChwdHIsIDB4NTU1NTU1NTU1NTU1NTU1NVVMTCwgc3RhdGUpOworCQlwdHIrKzsKIAl9Ci0JaWYgKCh1bnNpZ25lZCBjaGFyICopcGxvbmcgPCBlbmQpIHsKLQkJYnl0ZSA9IChjb25zdCB1OCAqKXBsb25nOwotCQltaXNhbGlnbmVkICs9IHNpemVvZih1bnNpZ25lZCBsb25nKSAtIDE7Ci0JCWdvdG8gbWlzYWxpZ25lZDsKLQl9Ci0JcmV0dXJuIEJGSVROT0VOVDsKKwkvKiBNYXNrIG9mZiBhbnkgYml0cyB3aGljaCBhcmUgbW9yZSB0aGFuIGxlbiBieXRlcyBmcm9tIHRoZSBzdGFydCAqLworCWlmIChwdHIgPT0gZW5kICYmIChsZW4gJiAoc2l6ZW9mKHU2NCkgLSAxKSkpCisJCXRtcCAmPSAoKCh1NjQpfjApID4+ICg2NCAtIDgqKGxlbiAmIChzaXplb2YodTY0KSAtIDEpKSkpOworCS8qIERpZG4ndCBmaW5kIGFueXRoaW5nLCBzbyByZXR1cm4gKi8KKwlpZiAodG1wID09IDApCisJCXJldHVybiBCRklUTk9FTlQ7CisJcHRyLS07CisJYml0ID0gZmxzNjQodG1wKTsKKwliaXQtLTsJCS8qIGZsczY0IGFsd2F5cyBhZGRzIG9uZSB0byB0aGUgYml0IGNvdW50ICovCisJYml0IC89IDI7CS8qIHR3byBiaXRzIHBlciBlbnRyeSBpbiB0aGUgYml0bWFwICovCisJcmV0dXJuICgoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKilwdHIgLSBidWYpICogR0ZTMl9OQkJZKSArIGJpdDsKIH0KIAogLyoqCkBAIC04MzEsNiArODQwLDU4IEBACiAJc3Bpbl91bmxvY2soJnNkcC0+c2RfcmluZGV4X3NwaW4pOwogfQogCitzdGF0aWMgdm9pZCBnZnMyX3JncnBfc2VuZF9kaXNjYXJkcyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgdTY0IG9mZnNldCwKKwkJCQkgICAgY29uc3Qgc3RydWN0IGdmczJfYml0bWFwICpiaSkKK3sKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gc2RwLT5zZF92ZnM7CisJc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiA9IHNiLT5zX2JkZXY7CisJY29uc3QgdW5zaWduZWQgaW50IHNlY3RzX3Blcl9ibGsgPSBzZHAtPnNkX3NiLnNiX2JzaXplIC8KKwkJCQkJICAgYmRldl9oYXJkc2VjdF9zaXplKHNiLT5zX2JkZXYpOworCXU2NCBibGs7CisJc2VjdG9yX3Qgc3RhcnQgPSAwOworCXNlY3Rvcl90IG5yX3NlY3RzID0gMDsKKwlpbnQgcnY7CisJdW5zaWduZWQgaW50IHg7CisKKwlmb3IgKHggPSAwOyB4IDwgYmktPmJpX2xlbjsgeCsrKSB7CisJCWNvbnN0IHU4ICpvcmlnID0gYmktPmJpX2JoLT5iX2RhdGEgKyBiaS0+Ymlfb2Zmc2V0ICsgeDsKKwkJY29uc3QgdTggKmNsb25lID0gYmktPmJpX2Nsb25lICsgYmktPmJpX29mZnNldCArIHg7CisJCXU4IGRpZmYgPSB+KCpvcmlnIHwgKCpvcmlnID4+IDEpKSAmICgqY2xvbmUgfCAoKmNsb25lID4+IDEpKTsKKwkJZGlmZiAmPSAweDU1OworCQlpZiAoZGlmZiA9PSAwKQorCQkJY29udGludWU7CisJCWJsayA9IG9mZnNldCArICgoYmktPmJpX3N0YXJ0ICsgeCkgKiBHRlMyX05CQlkpOworCQlibGsgKj0gc2VjdHNfcGVyX2JsazsgLyogY29udmVydCB0byBzZWN0b3JzICovCisJCXdoaWxlKGRpZmYpIHsKKwkJCWlmIChkaWZmICYgMSkgeworCQkJCWlmIChucl9zZWN0cyA9PSAwKQorCQkJCQlnb3RvIHN0YXJ0X25ld19leHRlbnQ7CisJCQkJaWYgKChzdGFydCArIG5yX3NlY3RzKSAhPSBibGspIHsKKwkJCQkJcnYgPSBibGtkZXZfaXNzdWVfZGlzY2FyZChiZGV2LCBzdGFydCwKKwkJCQkJCQkgICAgbnJfc2VjdHMsIEdGUF9OT0ZTKTsKKwkJCQkJaWYgKHJ2KQorCQkJCQkJZ290byBmYWlsOworCQkJCQlucl9zZWN0cyA9IDA7CitzdGFydF9uZXdfZXh0ZW50OgorCQkJCQlzdGFydCA9IGJsazsKKwkJCQl9CisJCQkJbnJfc2VjdHMgKz0gc2VjdHNfcGVyX2JsazsKKwkJCX0KKwkJCWRpZmYgPj49IDI7CisJCQlibGsgKz0gc2VjdHNfcGVyX2JsazsKKwkJfQorCX0KKwlpZiAobnJfc2VjdHMpIHsKKwkJcnYgPSBibGtkZXZfaXNzdWVfZGlzY2FyZChiZGV2LCBzdGFydCwgbnJfc2VjdHMsIEdGUF9OT0ZTKTsKKwkJaWYgKHJ2KQorCQkJZ290byBmYWlsOworCX0KKwlyZXR1cm47CitmYWlsOgorCWZzX3dhcm4oc2RwLCAiZXJyb3IgJWQgb24gZGlzY2FyZCByZXF1ZXN0LCB0dXJuaW5nIGRpc2NhcmRzIG9mZiBmb3IgdGhpcyBmaWxlc3lzdGVtIiwgcnYpOworCXNkcC0+c2RfYXJncy5hcl9kaXNjYXJkID0gMDsKK30KKwogdm9pZCBnZnMyX3JncnBfcmVwb2xpc2hfY2xvbmVzKHN0cnVjdCBnZnMyX3JncnBkICpyZ2QpCiB7CiAJc3RydWN0IGdmczJfc2JkICpzZHAgPSByZ2QtPnJkX3NiZDsKQEAgLTg0MSw2ICs5MDIsOCBAQAogCQlzdHJ1Y3QgZ2ZzMl9iaXRtYXAgKmJpID0gcmdkLT5yZF9iaXRzICsgeDsKIAkJaWYgKCFiaS0+YmlfY2xvbmUpCiAJCQljb250aW51ZTsKKwkJaWYgKHNkcC0+c2RfYXJncy5hcl9kaXNjYXJkKQorCQkJZ2ZzMl9yZ3JwX3NlbmRfZGlzY2FyZHMoc2RwLCByZ2QtPnJkX2RhdGEwLCBiaSk7CiAJCW1lbWNweShiaS0+YmlfY2xvbmUgKyBiaS0+Ymlfb2Zmc2V0LAogCQkgICAgICAgYmktPmJpX2JoLT5iX2RhdGEgKyBiaS0+Ymlfb2Zmc2V0LCBiaS0+YmlfbGVuKTsKIAl9CmRpZmYgLS1naXQgYS9mcy9nZnMyL3N1cGVyLmMgYi9mcy9nZnMyL3N1cGVyLmMKaW5kZXggMTQxYjc4MS4uNjAxOTEzZSAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9zdXBlci5jCisrKyBiL2ZzL2dmczIvc3VwZXIuYwpAQCAtMTUsNyArMTUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZzMl9vbmRpc2suaD4KICNpbmNsdWRlIDxsaW51eC9iaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9sbV9pbnRlcmZhY2UuaD4KIAogI2luY2x1ZGUgImdmczIuaCIKICNpbmNsdWRlICJpbmNvcmUuaCIKQEAgLTMzOSw3ICszMzgsNiBAQAogCQkJCSAgICBzdHJ1Y3QgZ2ZzMl9ob2xkZXIgKnRfZ2gpCiB7CiAJc3RydWN0IGdmczJfaW5vZGUgKmlwOwotCXN0cnVjdCBnZnMyX2hvbGRlciBqaV9naDsKIAlzdHJ1Y3QgZ2ZzMl9qZGVzYyAqamQ7CiAJc3RydWN0IGxmY2MgKmxmY2M7CiAJTElTVF9IRUFEKGxpc3QpOwpAQCAtMzg3LDcgKzM4NSw2IEBACiAJCWdmczJfZ2xvY2tfZHFfdW5pbml0KCZsZmNjLT5naCk7CiAJCWtmcmVlKGxmY2MpOwogCX0KLQlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmamlfZ2gpOwogCXJldHVybiBlcnJvcjsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9zdXBlci5oIGIvZnMvZ2ZzMi9zdXBlci5oCmluZGV4IGY2YjhiMDAuLjkxYWJkYmUgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvc3VwZXIuaAorKysgYi9mcy9nZnMyL3N1cGVyLmgKQEAgLTE0LDcgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kY2FjaGUuaD4KICNpbmNsdWRlICJpbmNvcmUuaCIKIAotdm9pZCBnZnMyX2xtX3VubW91bnQoc3RydWN0IGdmczJfc2JkICpzZHApOworZXh0ZXJuIHZvaWQgZ2ZzMl9sbV91bm1vdW50KHN0cnVjdCBnZnMyX3NiZCAqc2RwKTsKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZ2ZzMl9qaW5kZXhfc2l6ZShzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCkKIHsKQEAgLTI3LDIxICsyNywyMyBAQAogCiB2b2lkIGdmczJfamluZGV4X2ZyZWUoc3RydWN0IGdmczJfc2JkICpzZHApOwogCi1zdHJ1Y3QgZ2ZzMl9qZGVzYyAqZ2ZzMl9qZGVzY19maW5kKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCB1bnNpZ25lZCBpbnQgamlkKTsKLWludCBnZnMyX2pkZXNjX2NoZWNrKHN0cnVjdCBnZnMyX2pkZXNjICpqZCk7CitleHRlcm4gaW50IGdmczJfbW91bnRfYXJncyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgc3RydWN0IGdmczJfYXJncyAqYXJncywgY2hhciAqZGF0YSk7CiAKLWludCBnZnMyX2xvb2t1cF9pbl9tYXN0ZXJfZGlyKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBjaGFyICpmaWxlbmFtZSwKLQkJCSAgICAgIHN0cnVjdCBnZnMyX2lub2RlICoqaXBwKTsKK2V4dGVybiBzdHJ1Y3QgZ2ZzMl9qZGVzYyAqZ2ZzMl9qZGVzY19maW5kKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCB1bnNpZ25lZCBpbnQgamlkKTsKK2V4dGVybiBpbnQgZ2ZzMl9qZGVzY19jaGVjayhzdHJ1Y3QgZ2ZzMl9qZGVzYyAqamQpOwogCi1pbnQgZ2ZzMl9tYWtlX2ZzX3J3KHN0cnVjdCBnZnMyX3NiZCAqc2RwKTsKK2V4dGVybiBpbnQgZ2ZzMl9sb29rdXBfaW5fbWFzdGVyX2RpcihzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgY2hhciAqZmlsZW5hbWUsCisJCQkJICAgICBzdHJ1Y3QgZ2ZzMl9pbm9kZSAqKmlwcCk7CiAKLWludCBnZnMyX3N0YXRmc19pbml0KHN0cnVjdCBnZnMyX3NiZCAqc2RwKTsKLXZvaWQgZ2ZzMl9zdGF0ZnNfY2hhbmdlKHN0cnVjdCBnZnMyX3NiZCAqc2RwLAotCQkJczY0IHRvdGFsLCBzNjQgZnJlZSwgczY0IGRpbm9kZXMpOwotaW50IGdmczJfc3RhdGZzX3N5bmMoc3RydWN0IGdmczJfc2JkICpzZHApOworZXh0ZXJuIGludCBnZnMyX21ha2VfZnNfcncoc3RydWN0IGdmczJfc2JkICpzZHApOwogCi1pbnQgZ2ZzMl9mcmVlemVfZnMoc3RydWN0IGdmczJfc2JkICpzZHApOwotdm9pZCBnZnMyX3VuZnJlZXplX2ZzKHN0cnVjdCBnZnMyX3NiZCAqc2RwKTsKK2V4dGVybiBpbnQgZ2ZzMl9zdGF0ZnNfaW5pdChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCk7CitleHRlcm4gdm9pZCBnZnMyX3N0YXRmc19jaGFuZ2Uoc3RydWN0IGdmczJfc2JkICpzZHAsIHM2NCB0b3RhbCwgczY0IGZyZWUsCisJCQkgICAgICAgczY0IGRpbm9kZXMpOworZXh0ZXJuIGludCBnZnMyX3N0YXRmc19zeW5jKHN0cnVjdCBnZnMyX3NiZCAqc2RwKTsKKworZXh0ZXJuIGludCBnZnMyX2ZyZWV6ZV9mcyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCk7CitleHRlcm4gdm9pZCBnZnMyX3VuZnJlZXplX2ZzKHN0cnVjdCBnZnMyX3NiZCAqc2RwKTsKIAogZXh0ZXJuIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIGdmczJfZnNfdHlwZTsKIGV4dGVybiBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBnZnMybWV0YV9mc190eXBlOwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9zeXMuYyBiL2ZzL2dmczIvc3lzLmMKaW5kZXggMjZjMWZhNy4uNzY1NWY1MDIgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvc3lzLmMKKysrIGIvZnMvZ2ZzMi9zeXMuYwpAQCAtMTQsOSArMTQsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva29iamVjdC5oPgotI2luY2x1ZGUgPGxpbnV4L2dmczJfb25kaXNrLmg+Ci0jaW5jbHVkZSA8bGludXgvbG1faW50ZXJmYWNlLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgogCiAjaW5jbHVkZSAiZ2ZzMi5oIgogI2luY2x1ZGUgImluY29yZS5oIgpAQCAtMjUsNiArMjQsNyBAQAogI2luY2x1ZGUgImdsb2NrLmgiCiAjaW5jbHVkZSAicXVvdGEuaCIKICNpbmNsdWRlICJ1dGlsLmgiCisjaW5jbHVkZSAiZ2xvcHMuaCIKIAogc3RhdGljIHNzaXplX3QgaWRfc2hvdyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgY2hhciAqYnVmKQogewpAQCAtMzcsNiArMzcsMzAgQEAKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlc1xuIiwgc2RwLT5zZF9mc25hbWUpOwogfQogCitzdGF0aWMgaW50IGdmczJfdXVpZF92YWxpZChjb25zdCB1OCAqdXVpZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisJCWlmICh1dWlkW2ldKQorCQkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCB1dWlkX3Nob3coc3RydWN0IGdmczJfc2JkICpzZHAsIGNoYXIgKmJ1ZikKK3sKKwljb25zdCB1OCAqdXVpZCA9IHNkcC0+c2Rfc2Iuc2JfdXVpZDsKKwlidWZbMF0gPSAnXDAnOworCWlmICghZ2ZzMl91dWlkX3ZhbGlkKHV1aWQpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlMDJYJTAyWCUwMlglMDJYLSUwMlglMDJYLSIKKwkJCSIlMDJYJTAyWC0lMDJYJTAyWC0lMDJYJTAyWCUwMlglMDJYJTAyWCUwMlhcbiIsCisJCQl1dWlkWzBdLCB1dWlkWzFdLCB1dWlkWzJdLCB1dWlkWzNdLCB1dWlkWzRdLCB1dWlkWzVdLAorCQkJdXVpZFs2XSwgdXVpZFs3XSwgdXVpZFs4XSwgdXVpZFs5XSwgdXVpZFsxMF0sIHV1aWRbMTFdLAorCQkJdXVpZFsxMl0sIHV1aWRbMTNdLCB1dWlkWzE0XSwgdXVpZFsxNV0pOworfQorCiBzdGF0aWMgc3NpemVfdCBmcmVlemVfc2hvdyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgY2hhciAqYnVmKQogewogCXVuc2lnbmVkIGludCBjb3VudDsKQEAgLTE0OCw2ICsxNzIsNDYgQEAKIAlyZXR1cm4gbGVuOwogfQogCitzdGF0aWMgc3NpemVfdCBkZW1vdGVfcnFfc3RvcmUoc3RydWN0IGdmczJfc2JkICpzZHAsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2w7CisJY29uc3Qgc3RydWN0IGdmczJfZ2xvY2tfb3BlcmF0aW9ucyAqZ2xvcHM7CisJdW5zaWduZWQgaW50IGdsbW9kZTsKKwl1bnNpZ25lZCBpbnQgZ2x0eXBlOworCXVuc2lnbmVkIGxvbmcgbG9uZyBnbG51bTsKKwljaGFyIG1vZGVbMTZdOworCWludCBydjsKKworCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKKwkJcmV0dXJuIC1FQUNDRVM7CisKKwlydiA9IHNzY2FuZihidWYsICIldTolbGx1ICUxNXMiLCAmZ2x0eXBlLCAmZ2xudW0sCisJCSAgICBtb2RlKTsKKwlpZiAocnYgIT0gMykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoc3RyY21wKG1vZGUsICJFWCIpID09IDApCisJCWdsbW9kZSA9IExNX1NUX1VOTE9DS0VEOworCWVsc2UgaWYgKChzdHJjbXAobW9kZSwgIkNXIikgPT0gMCkgfHwgKHN0cmNtcChtb2RlLCAiREYiKSA9PSAwKSkKKwkJZ2xtb2RlID0gTE1fU1RfREVGRVJSRUQ7CisJZWxzZSBpZiAoKHN0cmNtcChtb2RlLCAiUFIiKSA9PSAwKSB8fCAoc3RyY21wKG1vZGUsICJTSCIpID09IDApKQorCQlnbG1vZGUgPSBMTV9TVF9TSEFSRUQ7CisJZWxzZQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChnbHR5cGUgPiBMTV9UWVBFX0pPVVJOQUwpCisJCXJldHVybiAtRUlOVkFMOworCWdsb3BzID0gZ2ZzMl9nbG9wc19saXN0W2dsdHlwZV07CisJaWYgKGdsb3BzID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCXJ2ID0gZ2ZzMl9nbG9ja19nZXQoc2RwLCBnbG51bSwgZ2xvcHMsIDAsICZnbCk7CisJaWYgKHJ2KQorCQlyZXR1cm4gcnY7CisJZ2ZzMl9nbG9ja19jYihnbCwgZ2xtb2RlKTsKKwlnZnMyX2dsb2NrX3B1dChnbCk7CisJcmV0dXJuIGxlbjsKK30KKwogc3RydWN0IGdmczJfYXR0ciB7CiAJc3RydWN0IGF0dHJpYnV0ZSBhdHRyOwogCXNzaXplX3QgKCpzaG93KShzdHJ1Y3QgZ2ZzMl9zYmQgKiwgY2hhciAqKTsKQEAgLTE1OSwyMiArMjIzLDI2IEBACiAKIEdGUzJfQVRUUihpZCwgICAgICAgICAgICAgICAgICAwNDQ0LCBpZF9zaG93LCAgICAgICBOVUxMKTsKIEdGUzJfQVRUUihmc25hbWUsICAgICAgICAgICAgICAwNDQ0LCBmc25hbWVfc2hvdywgICBOVUxMKTsKK0dGUzJfQVRUUih1dWlkLCAgICAgICAgICAgICAgICAwNDQ0LCB1dWlkX3Nob3csICAgICBOVUxMKTsKIEdGUzJfQVRUUihmcmVlemUsICAgICAgICAgICAgICAwNjQ0LCBmcmVlemVfc2hvdywgICBmcmVlemVfc3RvcmUpOwogR0ZTMl9BVFRSKHdpdGhkcmF3LCAgICAgICAgICAgIDA2NDQsIHdpdGhkcmF3X3Nob3csIHdpdGhkcmF3X3N0b3JlKTsKIEdGUzJfQVRUUihzdGF0ZnNfc3luYywgICAgICAgICAwMjAwLCBOVUxMLCAgICAgICAgICBzdGF0ZnNfc3luY19zdG9yZSk7CiBHRlMyX0FUVFIocXVvdGFfc3luYywgICAgICAgICAgMDIwMCwgTlVMTCwgICAgICAgICAgcXVvdGFfc3luY19zdG9yZSk7CiBHRlMyX0FUVFIocXVvdGFfcmVmcmVzaF91c2VyLCAgMDIwMCwgTlVMTCwgICAgICAgICAgcXVvdGFfcmVmcmVzaF91c2VyX3N0b3JlKTsKIEdGUzJfQVRUUihxdW90YV9yZWZyZXNoX2dyb3VwLCAwMjAwLCBOVUxMLCAgICAgICAgICBxdW90YV9yZWZyZXNoX2dyb3VwX3N0b3JlKTsKK0dGUzJfQVRUUihkZW1vdGVfcnEsICAgICAgICAgICAwMjAwLCBOVUxMLAkgICAgZGVtb3RlX3JxX3N0b3JlKTsKIAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmdmczJfYXR0cnNbXSA9IHsKIAkmZ2ZzMl9hdHRyX2lkLmF0dHIsCiAJJmdmczJfYXR0cl9mc25hbWUuYXR0ciwKKwkmZ2ZzMl9hdHRyX3V1aWQuYXR0ciwKIAkmZ2ZzMl9hdHRyX2ZyZWV6ZS5hdHRyLAogCSZnZnMyX2F0dHJfd2l0aGRyYXcuYXR0ciwKIAkmZ2ZzMl9hdHRyX3N0YXRmc19zeW5jLmF0dHIsCiAJJmdmczJfYXR0cl9xdW90YV9zeW5jLmF0dHIsCiAJJmdmczJfYXR0cl9xdW90YV9yZWZyZXNoX3VzZXIuYXR0ciwKIAkmZ2ZzMl9hdHRyX3F1b3RhX3JlZnJlc2hfZ3JvdXAuYXR0ciwKKwkmZ2ZzMl9hdHRyX2RlbW90ZV9ycS5hdHRyLAogCU5VTEwsCiB9OwogCkBAIC0yMjQsMTQgKzI5MiwxNDUgQEAKIAogTE9DS1NUUlVDVF9BVFRSKGppZCwgICAgICAiJXVcbiIpOwogTE9DS1NUUlVDVF9BVFRSKGZpcnN0LCAgICAiJXVcbiIpOwotTE9DS1NUUlVDVF9BVFRSKGx2Yl9zaXplLCAiJXVcbiIpOwotTE9DS1NUUlVDVF9BVFRSKGZsYWdzLCAgICAiJWRcbiIpOwogCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbG9ja3N0cnVjdF9hdHRyc1tdID0gewogCSZsb2Nrc3RydWN0X2F0dHJfamlkLmF0dHIsCiAJJmxvY2tzdHJ1Y3RfYXR0cl9maXJzdC5hdHRyLAotCSZsb2Nrc3RydWN0X2F0dHJfbHZiX3NpemUuYXR0ciwKLQkmbG9ja3N0cnVjdF9hdHRyX2ZsYWdzLmF0dHIsCisJTlVMTCwKK307CisKKy8qCisgKiBsb2NrX21vZHVsZS4gT3JpZ2luYWxseSBmcm9tIGxvY2tfZGxtCisgKi8KKworc3RhdGljIHNzaXplX3QgcHJvdG9fbmFtZV9zaG93KHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBjaGFyICpidWYpCit7CisJY29uc3Qgc3RydWN0IGxtX2xvY2tvcHMgKm9wcyA9IHNkcC0+c2RfbG9ja3N0cnVjdC5sc19vcHM7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIG9wcy0+bG1fcHJvdG9fbmFtZSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGJsb2NrX3Nob3coc3RydWN0IGdmczJfc2JkICpzZHAsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgbG1fbG9ja3N0cnVjdCAqbHMgPSAmc2RwLT5zZF9sb2Nrc3RydWN0OworCXNzaXplX3QgcmV0OworCWludCB2YWwgPSAwOworCisJaWYgKHRlc3RfYml0KERGTF9CTE9DS19MT0NLUywgJmxzLT5sc19mbGFncykpCisJCXZhbCA9IDE7CisJcmV0ID0gc3ByaW50ZihidWYsICIlZFxuIiwgdmFsKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3NpemVfdCBibG9ja19zdG9yZShzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCBsbV9sb2Nrc3RydWN0ICpscyA9ICZzZHAtPnNkX2xvY2tzdHJ1Y3Q7CisJc3NpemVfdCByZXQgPSBsZW47CisJaW50IHZhbDsKKworCXZhbCA9IHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAwKTsKKworCWlmICh2YWwgPT0gMSkKKwkJc2V0X2JpdChERkxfQkxPQ0tfTE9DS1MsICZscy0+bHNfZmxhZ3MpOworCWVsc2UgaWYgKHZhbCA9PSAwKSB7CisJCWNsZWFyX2JpdChERkxfQkxPQ0tfTE9DS1MsICZscy0+bHNfZmxhZ3MpOworCQlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOworCQlnZnMyX2dsb2NrX3RoYXcoc2RwKTsKKwl9IGVsc2UgeworCQlyZXQgPSAtRUlOVkFMOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3NpemVfdCBsa2lkX3Nob3coc3RydWN0IGdmczJfc2JkICpzZHAsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgbG1fbG9ja3N0cnVjdCAqbHMgPSAmc2RwLT5zZF9sb2Nrc3RydWN0OworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBscy0+bHNfaWQpOworfQorCitzdGF0aWMgc3NpemVfdCBsa2ZpcnN0X3Nob3coc3RydWN0IGdmczJfc2JkICpzZHAsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgbG1fbG9ja3N0cnVjdCAqbHMgPSAmc2RwLT5zZF9sb2Nrc3RydWN0OworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBscy0+bHNfZmlyc3QpOworfQorCitzdGF0aWMgc3NpemVfdCBmaXJzdF9kb25lX3Nob3coc3RydWN0IGdmczJfc2JkICpzZHAsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgbG1fbG9ja3N0cnVjdCAqbHMgPSAmc2RwLT5zZF9sb2Nrc3RydWN0OworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBscy0+bHNfZmlyc3RfZG9uZSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHJlY292ZXJfc2hvdyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgY2hhciAqYnVmKQoreworCXN0cnVjdCBsbV9sb2Nrc3RydWN0ICpscyA9ICZzZHAtPnNkX2xvY2tzdHJ1Y3Q7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGxzLT5sc19yZWNvdmVyX2ppZCk7Cit9CisKK3N0YXRpYyB2b2lkIGdmczJfamRlc2NfbWFrZV9kaXJ0eShzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgdW5zaWduZWQgaW50IGppZCkKK3sKKwlzdHJ1Y3QgZ2ZzMl9qZGVzYyAqamQ7CisKKwlzcGluX2xvY2soJnNkcC0+c2RfamluZGV4X3NwaW4pOworCWxpc3RfZm9yX2VhY2hfZW50cnkoamQsICZzZHAtPnNkX2ppbmRleF9saXN0LCBqZF9saXN0KSB7CisJCWlmIChqZC0+amRfamlkICE9IGppZCkKKwkJCWNvbnRpbnVlOworCQlqZC0+amRfZGlydHkgPSAxOworCQlicmVhazsKKwl9CisJc3Bpbl91bmxvY2soJnNkcC0+c2RfamluZGV4X3NwaW4pOworfQorCitzdGF0aWMgc3NpemVfdCByZWNvdmVyX3N0b3JlKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCit7CisJc3RydWN0IGxtX2xvY2tzdHJ1Y3QgKmxzID0gJnNkcC0+c2RfbG9ja3N0cnVjdDsKKwlscy0+bHNfcmVjb3Zlcl9qaWQgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMCk7CisJZ2ZzMl9qZGVzY19tYWtlX2RpcnR5KHNkcCwgbHMtPmxzX3JlY292ZXJfamlkKTsKKwlpZiAoc2RwLT5zZF9yZWNvdmVyZF9wcm9jZXNzKQorCQl3YWtlX3VwX3Byb2Nlc3Moc2RwLT5zZF9yZWNvdmVyZF9wcm9jZXNzKTsKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgc3NpemVfdCByZWNvdmVyX2RvbmVfc2hvdyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgY2hhciAqYnVmKQoreworCXN0cnVjdCBsbV9sb2Nrc3RydWN0ICpscyA9ICZzZHAtPnNkX2xvY2tzdHJ1Y3Q7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGxzLT5sc19yZWNvdmVyX2ppZF9kb25lKTsKK30KKworc3RhdGljIHNzaXplX3QgcmVjb3Zlcl9zdGF0dXNfc2hvdyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgY2hhciAqYnVmKQoreworCXN0cnVjdCBsbV9sb2Nrc3RydWN0ICpscyA9ICZzZHAtPnNkX2xvY2tzdHJ1Y3Q7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGxzLT5sc19yZWNvdmVyX2ppZF9zdGF0dXMpOworfQorCitzdHJ1Y3QgZ2RsbV9hdHRyIHsKKwlzdHJ1Y3QgYXR0cmlidXRlIGF0dHI7CisJc3NpemVfdCAoKnNob3cpKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBjaGFyICopOworCXNzaXplX3QgKCpzdG9yZSkoc3RydWN0IGdmczJfc2JkICpzZHAsIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKK307CisKKyNkZWZpbmUgR0RMTV9BVFRSKF9uYW1lLF9tb2RlLF9zaG93LF9zdG9yZSkgXAorc3RhdGljIHN0cnVjdCBnZGxtX2F0dHIgZ2RsbV9hdHRyXyMjX25hbWUgPSBfX0FUVFIoX25hbWUsX21vZGUsX3Nob3csX3N0b3JlKQorCitHRExNX0FUVFIocHJvdG9fbmFtZSwgICAgIDA0NDQsIHByb3RvX25hbWVfc2hvdywgICAgIE5VTEwpOworR0RMTV9BVFRSKGJsb2NrLCAgICAgICAgICAwNjQ0LCBibG9ja19zaG93LCAgICAgICAgICBibG9ja19zdG9yZSk7CitHRExNX0FUVFIod2l0aGRyYXcsICAgICAgIDA2NDQsIHdpdGhkcmF3X3Nob3csICAgICAgIHdpdGhkcmF3X3N0b3JlKTsKK0dETE1fQVRUUihpZCwgICAgICAgICAgICAgMDQ0NCwgbGtpZF9zaG93LCAgICAgICAgICAgTlVMTCk7CitHRExNX0FUVFIoZmlyc3QsICAgICAgICAgIDA0NDQsIGxrZmlyc3Rfc2hvdywgICAgICAgIE5VTEwpOworR0RMTV9BVFRSKGZpcnN0X2RvbmUsICAgICAwNDQ0LCBmaXJzdF9kb25lX3Nob3csICAgICBOVUxMKTsKK0dETE1fQVRUUihyZWNvdmVyLCAgICAgICAgMDY0NCwgcmVjb3Zlcl9zaG93LCAgICAgICAgcmVjb3Zlcl9zdG9yZSk7CitHRExNX0FUVFIocmVjb3Zlcl9kb25lLCAgIDA0NDQsIHJlY292ZXJfZG9uZV9zaG93LCAgIE5VTEwpOworR0RMTV9BVFRSKHJlY292ZXJfc3RhdHVzLCAwNDQ0LCByZWNvdmVyX3N0YXR1c19zaG93LCBOVUxMKTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmxvY2tfbW9kdWxlX2F0dHJzW10gPSB7CisJJmdkbG1fYXR0cl9wcm90b19uYW1lLmF0dHIsCisJJmdkbG1fYXR0cl9ibG9jay5hdHRyLAorCSZnZGxtX2F0dHJfd2l0aGRyYXcuYXR0ciwKKwkmZ2RsbV9hdHRyX2lkLmF0dHIsCisJJmxvY2tzdHJ1Y3RfYXR0cl9qaWQuYXR0ciwKKwkmZ2RsbV9hdHRyX2ZpcnN0LmF0dHIsCisJJmdkbG1fYXR0cl9maXJzdF9kb25lLmF0dHIsCisJJmdkbG1fYXR0cl9yZWNvdmVyLmF0dHIsCisJJmdkbG1fYXR0cl9yZWNvdmVyX2RvbmUuYXR0ciwKKwkmZ2RsbV9hdHRyX3JlY292ZXJfc3RhdHVzLmF0dHIsCiAJTlVMTCwKIH07CiAKQEAgLTM3Myw3ICs1NzIsNiBAQAogVFVORV9BVFRSKHN0YXRmc19zbG93LCAwKTsKIFRVTkVfQVRUUihuZXdfZmlsZXNfamRhdGEsIDApOwogVFVORV9BVFRSKHF1b3RhX3NpbXVsX3N5bmMsIDEpOwotVFVORV9BVFRSKHF1b3RhX2NhY2hlX3NlY3MsIDEpOwogVFVORV9BVFRSKHN0YWxsX3NlY3MsIDEpOwogVFVORV9BVFRSKHN0YXRmc19xdWFudHVtLCAxKTsKIFRVTkVfQVRUUl9EQUVNT04ocmVjb3ZlcmRfc2VjcywgcmVjb3ZlcmRfcHJvY2Vzcyk7CkBAIC0zODksNyArNTg3LDYgQEAKIAkmdHVuZV9hdHRyX2NvbXBsYWluX3NlY3MuYXR0ciwKIAkmdHVuZV9hdHRyX3N0YXRmc19zbG93LmF0dHIsCiAJJnR1bmVfYXR0cl9xdW90YV9zaW11bF9zeW5jLmF0dHIsCi0JJnR1bmVfYXR0cl9xdW90YV9jYWNoZV9zZWNzLmF0dHIsCiAJJnR1bmVfYXR0cl9zdGFsbF9zZWNzLmF0dHIsCiAJJnR1bmVfYXR0cl9zdGF0ZnNfcXVhbnR1bS5hdHRyLAogCSZ0dW5lX2F0dHJfcmVjb3ZlcmRfc2Vjcy5hdHRyLApAQCAtNDE0LDYgKzYxMSwxMSBAQAogCS5hdHRycyA9IHR1bmVfYXR0cnMsCiB9OwogCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBsb2NrX21vZHVsZV9ncm91cCA9IHsKKwkubmFtZSA9ICJsb2NrX21vZHVsZSIsCisJLmF0dHJzID0gbG9ja19tb2R1bGVfYXR0cnMsCit9OworCiBpbnQgZ2ZzMl9zeXNfZnNfYWRkKHN0cnVjdCBnZnMyX3NiZCAqc2RwKQogewogCWludCBlcnJvcjsKQEAgLTQzNiw5ICs2MzgsMTUgQEAKIAlpZiAoZXJyb3IpCiAJCWdvdG8gZmFpbF9hcmdzOwogCisJZXJyb3IgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJnNkcC0+c2Rfa29iaiwgJmxvY2tfbW9kdWxlX2dyb3VwKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gZmFpbF90dW5lOworCiAJa29iamVjdF91ZXZlbnQoJnNkcC0+c2Rfa29iaiwgS09CSl9BREQpOwogCXJldHVybiAwOwogCitmYWlsX3R1bmU6CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZzZHAtPnNkX2tvYmosICZ0dW5lX2dyb3VwKTsKIGZhaWxfYXJnczoKIAlzeXNmc19yZW1vdmVfZ3JvdXAoJnNkcC0+c2Rfa29iaiwgJmFyZ3NfZ3JvdXApOwogZmFpbF9sb2Nrc3RydWN0OgpAQCAtNDU1LDE1ICs2NjMsMjcgQEAKIAlzeXNmc19yZW1vdmVfZ3JvdXAoJnNkcC0+c2Rfa29iaiwgJnR1bmVfZ3JvdXApOwogCXN5c2ZzX3JlbW92ZV9ncm91cCgmc2RwLT5zZF9rb2JqLCAmYXJnc19ncm91cCk7CiAJc3lzZnNfcmVtb3ZlX2dyb3VwKCZzZHAtPnNkX2tvYmosICZsb2Nrc3RydWN0X2dyb3VwKTsKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJnNkcC0+c2Rfa29iaiwgJmxvY2tfbW9kdWxlX2dyb3VwKTsKIAlrb2JqZWN0X3B1dCgmc2RwLT5zZF9rb2JqKTsKIH0KIAorCiBzdGF0aWMgaW50IGdmczJfdWV2ZW50KHN0cnVjdCBrc2V0ICprc2V0LCBzdHJ1Y3Qga29iamVjdCAqa29iaiwKIAkJICAgICAgIHN0cnVjdCBrb2JqX3VldmVudF9lbnYgKmVudikKIHsKIAlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZ2ZzMl9zYmQsIHNkX2tvYmopOworCWNvbnN0IHU4ICp1dWlkID0gc2RwLT5zZF9zYi5zYl91dWlkOworCiAJYWRkX3VldmVudF92YXIoZW52LCAiTE9DS1RBQkxFPSVzIiwgc2RwLT5zZF90YWJsZV9uYW1lKTsKIAlhZGRfdWV2ZW50X3ZhcihlbnYsICJMT0NLUFJPVE89JXMiLCBzZHAtPnNkX3Byb3RvX25hbWUpOworCWlmIChnZnMyX3V1aWRfdmFsaWQodXVpZCkpIHsKKwkJYWRkX3VldmVudF92YXIoZW52LCAiVVVJRD0lMDJYJTAyWCUwMlglMDJYLSUwMlglMDJYLSUwMlglMDJYLSIKKwkJCSAgICAgICAiJTAyWCUwMlgtJTAyWCUwMlglMDJYJTAyWCUwMlglMDJYIiwKKwkJCSAgICAgICB1dWlkWzBdLCB1dWlkWzFdLCB1dWlkWzJdLCB1dWlkWzNdLCB1dWlkWzRdLAorCQkJICAgICAgIHV1aWRbNV0sIHV1aWRbNl0sIHV1aWRbN10sIHV1aWRbOF0sIHV1aWRbOV0sCisJCQkgICAgICAgdXVpZFsxMF0sIHV1aWRbMTFdLCB1dWlkWzEyXSwgdXVpZFsxM10sCisJCQkgICAgICAgdXVpZFsxNF0sIHV1aWRbMTVdKTsKKwl9CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2dmczIvdHJhbnMuYyBiL2ZzL2dmczIvdHJhbnMuYwppbmRleCBmNjc3YjhhLi4wNTM3NTJkIDEwMDY0NAotLS0gYS9mcy9nZnMyL3RyYW5zLmMKKysrIGIvZnMvZ2ZzMi90cmFucy5jCkBAIC0xMiw5ICsxMiw4IEBACiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KLSNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgogI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+Ci0jaW5jbHVkZSA8bGludXgvbG1faW50ZXJmYWNlLmg+CisjaW5jbHVkZSA8bGludXgvZ2ZzMl9vbmRpc2suaD4KIAogI2luY2x1ZGUgImdmczIuaCIKICNpbmNsdWRlICJpbmNvcmUuaCIKQEAgLTg4LDkgKzg3LDExIEBACiAKIAlpZiAoIXRyLT50cl90b3VjaGVkKSB7CiAJCWdmczJfbG9nX3JlbGVhc2Uoc2RwLCB0ci0+dHJfcmVzZXJ2ZWQpOwotCQlnZnMyX2dsb2NrX2RxKCZ0ci0+dHJfdF9naCk7Ci0JCWdmczJfaG9sZGVyX3VuaW5pdCgmdHItPnRyX3RfZ2gpOwotCQlrZnJlZSh0cik7CisJCWlmICh0ci0+dHJfdF9naC5naF9nbCkgeworCQkJZ2ZzMl9nbG9ja19kcSgmdHItPnRyX3RfZ2gpOworCQkJZ2ZzMl9ob2xkZXJfdW5pbml0KCZ0ci0+dHJfdF9naCk7CisJCQlrZnJlZSh0cik7CisJCX0KIAkJcmV0dXJuOwogCX0KIApAQCAtMTA2LDkgKzEwNywxMSBAQAogCX0KIAogCWdmczJfbG9nX2NvbW1pdChzZHAsIHRyKTsKLSAgICAgICAgZ2ZzMl9nbG9ja19kcSgmdHItPnRyX3RfZ2gpOwotICAgICAgICBnZnMyX2hvbGRlcl91bmluaXQoJnRyLT50cl90X2doKTsKLSAgICAgICAga2ZyZWUodHIpOworCWlmICh0ci0+dHJfdF9naC5naF9nbCkgeworCQlnZnMyX2dsb2NrX2RxKCZ0ci0+dHJfdF9naCk7CisJCWdmczJfaG9sZGVyX3VuaW5pdCgmdHItPnRyX3RfZ2gpOworCQlrZnJlZSh0cik7CisJfQogCiAJaWYgKHNkcC0+c2RfdmZzLT5zX2ZsYWdzICYgTVNfU1lOQ0hST05PVVMpCiAJCWdmczJfbG9nX2ZsdXNoKHNkcCwgTlVMTCk7CmRpZmYgLS1naXQgYS9mcy9nZnMyL3V0aWwuYyBiL2ZzL2dmczIvdXRpbC5jCmluZGV4IDM3NGY1MGUuLjlkMTJiMTEgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvdXRpbC5jCisrKyBiL2ZzL2dmczIvdXRpbC5jCkBAIC0xMyw3ICsxMyw2IEBACiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgogI2luY2x1ZGUgPGxpbnV4L2dmczJfb25kaXNrLmg+Ci0jaW5jbHVkZSA8bGludXgvbG1faW50ZXJmYWNlLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAogI2luY2x1ZGUgImdmczIuaCIKQEAgLTM1LDYgKzM0LDggQEAKIAogaW50IGdmczJfbG1fd2l0aGRyYXcoc3RydWN0IGdmczJfc2JkICpzZHAsIGNoYXIgKmZtdCwgLi4uKQogeworCXN0cnVjdCBsbV9sb2Nrc3RydWN0ICpscyA9ICZzZHAtPnNkX2xvY2tzdHJ1Y3Q7CisJY29uc3Qgc3RydWN0IGxtX2xvY2tvcHMgKmxtID0gbHMtPmxzX29wczsKIAl2YV9saXN0IGFyZ3M7CiAKIAlpZiAodGVzdF9hbmRfc2V0X2JpdChTREZfU0hVVERPV04sICZzZHAtPnNkX2ZsYWdzKSkKQEAgLTQ3LDggKzQ4LDEyIEBACiAJZnNfZXJyKHNkcCwgImFib3V0IHRvIHdpdGhkcmF3IHRoaXMgZmlsZSBzeXN0ZW1cbiIpOwogCUJVR19PTihzZHAtPnNkX2FyZ3MuYXJfZGVidWcpOwogCi0JZnNfZXJyKHNkcCwgInRlbGxpbmcgTE0gdG8gd2l0aGRyYXdcbiIpOwotCWdmczJfd2l0aGRyYXdfbG9ja3Byb3RvKCZzZHAtPnNkX2xvY2tzdHJ1Y3QpOworCWtvYmplY3RfdWV2ZW50KCZzZHAtPnNkX2tvYmosIEtPQkpfT0ZGTElORSk7CisKKwlpZiAobG0tPmxtX3VubW91bnQpIHsKKwkJZnNfZXJyKHNkcCwgInRlbGxpbmcgTE0gdG8gdW5tb3VudFxuIik7CisJCWxtLT5sbV91bm1vdW50KHNkcCk7CisJfQogCWZzX2VycihzZHAsICJ3aXRoZHJhd25cbiIpOwogCWR1bXBfc3RhY2soKTsKIApkaWZmIC0tZ2l0IGEvZnMvaW5vZGUuYyBiL2ZzL2lub2RlLmMKaW5kZXggYmI4MWJkNS4uMjlkZjRhMiAxMDA2NDQKLS0tIGEvZnMvaW5vZGUuYworKysgYi9mcy9pbm9kZS5jCkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSA8bGludXgvaGFzaC5oPgogI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgorI2luY2x1ZGUgPGxpbnV4L2ltYS5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9jZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgpAQCAtMTQ3LDEzICsxNDgsMTMgQEAKIAlpbm9kZS0+aV9jZGV2ID0gTlVMTDsKIAlpbm9kZS0+aV9yZGV2ID0gMDsKIAlpbm9kZS0+ZGlydGllZF93aGVuID0gMDsKLQlpZiAoc2VjdXJpdHlfaW5vZGVfYWxsb2MoaW5vZGUpKSB7Ci0JCWlmIChpbm9kZS0+aV9zYi0+c19vcC0+ZGVzdHJveV9pbm9kZSkKLQkJCWlub2RlLT5pX3NiLT5zX29wLT5kZXN0cm95X2lub2RlKGlub2RlKTsKLQkJZWxzZQotCQkJa21lbV9jYWNoZV9mcmVlKGlub2RlX2NhY2hlcCwgKGlub2RlKSk7Ci0JCXJldHVybiBOVUxMOwotCX0KKworCWlmIChzZWN1cml0eV9pbm9kZV9hbGxvYyhpbm9kZSkpCisJCWdvdG8gb3V0X2ZyZWVfaW5vZGU7CisKKwkvKiBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBhbiBpX2ludGVncml0eSAqLworCWlmIChpbWFfaW5vZGVfYWxsb2MoaW5vZGUpKQorCQlnb3RvIG91dF9mcmVlX3NlY3VyaXR5OwogCiAJc3Bpbl9sb2NrX2luaXQoJmlub2RlLT5pX2xvY2spOwogCWxvY2tkZXBfc2V0X2NsYXNzKCZpbm9kZS0+aV9sb2NrLCAmc2ItPnNfdHlwZS0+aV9sb2NrX2tleSk7CkBAIC0xODksNiArMTkwLDE1IEBACiAJaW5vZGUtPmlfbWFwcGluZyA9IG1hcHBpbmc7CiAKIAlyZXR1cm4gaW5vZGU7CisKK291dF9mcmVlX3NlY3VyaXR5OgorCXNlY3VyaXR5X2lub2RlX2ZyZWUoaW5vZGUpOworb3V0X2ZyZWVfaW5vZGU6CisJaWYgKGlub2RlLT5pX3NiLT5zX29wLT5kZXN0cm95X2lub2RlKQorCQlpbm9kZS0+aV9zYi0+c19vcC0+ZGVzdHJveV9pbm9kZShpbm9kZSk7CisJZWxzZQorCQlrbWVtX2NhY2hlX2ZyZWUoaW5vZGVfY2FjaGVwLCAoaW5vZGUpKTsKKwlyZXR1cm4gTlVMTDsKIH0KIEVYUE9SVF9TWU1CT0woaW5vZGVfaW5pdF9hbHdheXMpOwogCkBAIC0xMjkwLDYgKzEzMDAsNDAgQEAKIH0KIEVYUE9SVF9TWU1CT0woYm1hcCk7CiAKKy8qCisgKiBXaXRoIHJlbGF0aXZlIGF0aW1lLCBvbmx5IHVwZGF0ZSBhdGltZSBpZiB0aGUgcHJldmlvdXMgYXRpbWUgaXMKKyAqIGVhcmxpZXIgdGhhbiBlaXRoZXIgdGhlIGN0aW1lIG9yIG10aW1lIG9yIGlmIGF0IGxlYXN0IGEgZGF5IGhhcworICogcGFzc2VkIHNpbmNlIHRoZSBsYXN0IGF0aW1lIHVwZGF0ZS4KKyAqLworc3RhdGljIGludCByZWxhdGltZV9uZWVkX3VwZGF0ZShzdHJ1Y3QgdmZzbW91bnQgKm1udCwgc3RydWN0IGlub2RlICppbm9kZSwKKwkJCSAgICAgc3RydWN0IHRpbWVzcGVjIG5vdykKK3sKKworCWlmICghKG1udC0+bW50X2ZsYWdzICYgTU5UX1JFTEFUSU1FKSkKKwkJcmV0dXJuIDE7CisJLyoKKwkgKiBJcyBtdGltZSB5b3VuZ2VyIHRoYW4gYXRpbWU/IElmIHllcywgdXBkYXRlIGF0aW1lOgorCSAqLworCWlmICh0aW1lc3BlY19jb21wYXJlKCZpbm9kZS0+aV9tdGltZSwgJmlub2RlLT5pX2F0aW1lKSA+PSAwKQorCQlyZXR1cm4gMTsKKwkvKgorCSAqIElzIGN0aW1lIHlvdW5nZXIgdGhhbiBhdGltZT8gSWYgeWVzLCB1cGRhdGUgYXRpbWU6CisJICovCisJaWYgKHRpbWVzcGVjX2NvbXBhcmUoJmlub2RlLT5pX2N0aW1lLCAmaW5vZGUtPmlfYXRpbWUpID49IDApCisJCXJldHVybiAxOworCisJLyoKKwkgKiBJcyB0aGUgcHJldmlvdXMgYXRpbWUgdmFsdWUgb2xkZXIgdGhhbiBhIGRheT8gSWYgeWVzLAorCSAqIHVwZGF0ZSBhdGltZToKKwkgKi8KKwlpZiAoKGxvbmcpKG5vdy50dl9zZWMgLSBpbm9kZS0+aV9hdGltZS50dl9zZWMpID49IDI0KjYwKjYwKQorCQlyZXR1cm4gMTsKKwkvKgorCSAqIEdvb2QsIHdlIGNhbiBza2lwIHRoZSBhdGltZSB1cGRhdGU6CisJICovCisJcmV0dXJuIDA7Cit9CisKIC8qKgogICoJdG91Y2hfYXRpbWUJLQl1cGRhdGUgdGhlIGFjY2VzcyB0aW1lCiAgKglAbW50OiBtb3VudCB0aGUgaW5vZGUgaXMgYWNjZXNzZWQgb24KQEAgLTEzMTcsMTcgKzEzNjEsMTIgQEAKIAkJZ290byBvdXQ7CiAJaWYgKChtbnQtPm1udF9mbGFncyAmIE1OVF9OT0RJUkFUSU1FKSAmJiBTX0lTRElSKGlub2RlLT5pX21vZGUpKQogCQlnb3RvIG91dDsKLQlpZiAobW50LT5tbnRfZmxhZ3MgJiBNTlRfUkVMQVRJTUUpIHsKLQkJLyoKLQkJICogV2l0aCByZWxhdGl2ZSBhdGltZSwgb25seSB1cGRhdGUgYXRpbWUgaWYgdGhlIHByZXZpb3VzCi0JCSAqIGF0aW1lIGlzIGVhcmxpZXIgdGhhbiBlaXRoZXIgdGhlIGN0aW1lIG9yIG10aW1lLgotCQkgKi8KLQkJaWYgKHRpbWVzcGVjX2NvbXBhcmUoJmlub2RlLT5pX210aW1lLCAmaW5vZGUtPmlfYXRpbWUpIDwgMCAmJgotCQkgICAgdGltZXNwZWNfY29tcGFyZSgmaW5vZGUtPmlfY3RpbWUsICZpbm9kZS0+aV9hdGltZSkgPCAwKQotCQkJZ290byBvdXQ7Ci0JfQogCiAJbm93ID0gY3VycmVudF9mc190aW1lKGlub2RlLT5pX3NiKTsKKworCWlmICghcmVsYXRpbWVfbmVlZF91cGRhdGUobW50LCBpbm9kZSwgbm93KSkKKwkJZ290byBvdXQ7CisKIAlpZiAodGltZXNwZWNfZXF1YWwoJmlub2RlLT5pX2F0aW1lLCAmbm93KSkKIAkJZ290byBvdXQ7CiAKZGlmZiAtLWdpdCBhL2ZzL2lvY3RsLmMgYi9mcy9pb2N0bC5jCmluZGV4IDI0MGVjNjM5Li5hYzJkNDdlIDEwMDY0NAotLS0gYS9mcy9pb2N0bC5jCisrKyBiL2ZzL2lvY3RsLmMKQEAgLTQwNCwxMCArNDA0LDEyIEBACiAJaWYgKE9fTk9OQkxPQ0sgIT0gT19OREVMQVkpCiAJCWZsYWcgfD0gT19OREVMQVk7CiAjZW5kaWYKKwlzcGluX2xvY2soJmZpbHAtPmZfbG9jayk7CiAJaWYgKG9uKQogCQlmaWxwLT5mX2ZsYWdzIHw9IGZsYWc7CiAJZWxzZQogCQlmaWxwLT5mX2ZsYWdzICY9IH5mbGFnOworCXNwaW5fdW5sb2NrKCZmaWxwLT5mX2xvY2spOwogCXJldHVybiBlcnJvcjsKIH0KIApAQCAtNDI1LDE4ICs0MjcsMTIgQEAKIAkvKiBEaWQgRkFTWU5DIHN0YXRlIGNoYW5nZSA/ICovCiAJaWYgKChmbGFnIF4gZmlscC0+Zl9mbGFncykgJiBGQVNZTkMpIHsKIAkJaWYgKGZpbHAtPmZfb3AgJiYgZmlscC0+Zl9vcC0+ZmFzeW5jKQorCQkJLyogZmFzeW5jKCkgYWRqdXN0cyBmaWxwLT5mX2ZsYWdzICovCiAJCQllcnJvciA9IGZpbHAtPmZfb3AtPmZhc3luYyhmZCwgZmlscCwgb24pOwogCQllbHNlCiAJCQllcnJvciA9IC1FTk9UVFk7CiAJfQotCWlmIChlcnJvcikKLQkJcmV0dXJuIGVycm9yOwotCi0JaWYgKG9uKQotCQlmaWxwLT5mX2ZsYWdzIHw9IEZBU1lOQzsKLQllbHNlCi0JCWZpbHAtPmZfZmxhZ3MgJj0gfkZBU1lOQzsKLQlyZXR1cm4gZXJyb3I7CisJcmV0dXJuIGVycm9yIDwgMCA/IGVycm9yIDogMDsKIH0KIAogc3RhdGljIGludCBpb2N0bF9mc2ZyZWV6ZShzdHJ1Y3QgZmlsZSAqZmlscCkKQEAgLTQ5OSwxNyArNDk1LDExIEBACiAJCWJyZWFrOwogCiAJY2FzZSBGSU9OQklPOgotCQkvKiBCS0wgbmVlZGVkIHRvIGF2b2lkIHJhY2VzIHR3ZWFraW5nIGZfZmxhZ3MgKi8KLQkJbG9ja19rZXJuZWwoKTsKIAkJZXJyb3IgPSBpb2N0bF9maW9uYmlvKGZpbHAsIGFyZ3ApOwotCQl1bmxvY2tfa2VybmVsKCk7CiAJCWJyZWFrOwogCiAJY2FzZSBGSU9BU1lOQzoKLQkJLyogQktMIG5lZWRlZCB0byBhdm9pZCByYWNlcyB0d2Vha2luZyBmX2ZsYWdzICovCi0JCWxvY2tfa2VybmVsKCk7CiAJCWVycm9yID0gaW9jdGxfZmlvYXN5bmMoZmQsIGZpbHAsIGFyZ3ApOwotCQl1bmxvY2tfa2VybmVsKCk7CiAJCWJyZWFrOwogCiAJY2FzZSBGSU9RU0laRToKZGlmZiAtLWdpdCBhL2ZzL25hbWVpLmMgYi9mcy9uYW1laS5jCmluZGV4IDg5MzdmNGUuLjE5MjgxOTcgMTAwNjQ0Ci0tLSBhL2ZzL25hbWVpLmMKKysrIGIvZnMvbmFtZWkuYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Zzbm90aWZ5Lmg+CiAjaW5jbHVkZSA8bGludXgvcGVyc29uYWxpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgorI2luY2x1ZGUgPGxpbnV4L2ltYS5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CiAjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KICNpbmNsdWRlIDxsaW51eC9hdWRpdC5oPgpAQCAtODUwLDYgKzg1MSw4IEBACiAJCWlmIChlcnIgPT0gLUVBR0FJTikKIAkJCWVyciA9IGlub2RlX3Blcm1pc3Npb24obmQtPnBhdGguZGVudHJ5LT5kX2lub2RlLAogCQkJCQkgICAgICAgTUFZX0VYRUMpOworCQlpZiAoIWVycikKKwkJCWVyciA9IGltYV9wYXRoX2NoZWNrKCZuZC0+cGF0aCwgTUFZX0VYRUMpOwogIAkJaWYgKGVycikKIAkJCWJyZWFrOwogCkBAIC0xNTA5LDYgKzE1MTIsMTEgQEAKIAllcnJvciA9IGlub2RlX3Blcm1pc3Npb24oaW5vZGUsIGFjY19tb2RlKTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKKworCWVycm9yID0gaW1hX3BhdGhfY2hlY2socGF0aCwKKwkJCSAgICAgICBhY2NfbW9kZSAmIChNQVlfUkVBRCB8IE1BWV9XUklURSB8IE1BWV9FWEVDKSk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CiAJLyoKIAkgKiBBbiBhcHBlbmQtb25seSBmaWxlIG11c3QgYmUgb3BlbmVkIGluIGFwcGVuZCBtb2RlIGZvciB3cml0aW5nLgogCSAqLwpkaWZmIC0tZ2l0IGEvZnMvbmFtZXNwYWNlLmMgYi9mcy9uYW1lc3BhY2UuYwppbmRleCAwNmY4ZTYzLi5mMGU3NTMwIDEwMDY0NAotLS0gYS9mcy9uYW1lc3BhY2UuYworKysgYi9mcy9uYW1lc3BhY2UuYwpAQCAtNzgwLDYgKzc4MCw3IEBACiAJCXsgTU5UX05PQVRJTUUsICIsbm9hdGltZSIgfSwKIAkJeyBNTlRfTk9ESVJBVElNRSwgIixub2RpcmF0aW1lIiB9LAogCQl7IE1OVF9SRUxBVElNRSwgIixyZWxhdGltZSIgfSwKKwkJeyBNTlRfU1RSSUNUQVRJTUUsICIsc3RyaWN0YXRpbWUiIH0sCiAJCXsgMCwgTlVMTCB9CiAJfTsKIAljb25zdCBzdHJ1Y3QgcHJvY19mc19pbmZvICpmc19pbmZvcDsKQEAgLTE5MTksNiArMTkyMCw5IEBACiAJaWYgKGRhdGFfcGFnZSkKIAkJKChjaGFyICopZGF0YV9wYWdlKVtQQUdFX1NJWkUgLSAxXSA9IDA7CiAKKwkvKiBEZWZhdWx0IHRvIHJlbGF0aW1lICovCisJbW50X2ZsYWdzIHw9IE1OVF9SRUxBVElNRTsKKwogCS8qIFNlcGFyYXRlIHRoZSBwZXItbW91bnRwb2ludCBmbGFncyAqLwogCWlmIChmbGFncyAmIE1TX05PU1VJRCkKIAkJbW50X2ZsYWdzIHw9IE1OVF9OT1NVSUQ7CkBAIC0xOTMwLDEzICsxOTM0LDE0IEBACiAJCW1udF9mbGFncyB8PSBNTlRfTk9BVElNRTsKIAlpZiAoZmxhZ3MgJiBNU19OT0RJUkFUSU1FKQogCQltbnRfZmxhZ3MgfD0gTU5UX05PRElSQVRJTUU7Ci0JaWYgKGZsYWdzICYgTVNfUkVMQVRJTUUpCi0JCW1udF9mbGFncyB8PSBNTlRfUkVMQVRJTUU7CisJaWYgKGZsYWdzICYgTVNfU1RSSUNUQVRJTUUpCisJCW1udF9mbGFncyAmPSB+KE1OVF9SRUxBVElNRSB8IE1OVF9OT0FUSU1FKTsKIAlpZiAoZmxhZ3MgJiBNU19SRE9OTFkpCiAJCW1udF9mbGFncyB8PSBNTlRfUkVBRE9OTFk7CiAKIAlmbGFncyAmPSB+KE1TX05PU1VJRCB8IE1TX05PRVhFQyB8IE1TX05PREVWIHwgTVNfQUNUSVZFIHwKLQkJICAgTVNfTk9BVElNRSB8IE1TX05PRElSQVRJTUUgfCBNU19SRUxBVElNRXwgTVNfS0VSTk1PVU5UKTsKKwkJICAgTVNfTk9BVElNRSB8IE1TX05PRElSQVRJTUUgfCBNU19SRUxBVElNRXwgTVNfS0VSTk1PVU5UIHwKKwkJICAgTVNfU1RSSUNUQVRJTUUpOwogCiAJLyogLi4uIGFuZCBnZXQgdGhlIG1vdW50cG9pbnQgKi8KIAlyZXR2YWwgPSBrZXJuX3BhdGgoZGlyX25hbWUsIExPT0tVUF9GT0xMT1csICZwYXRoKTsKZGlmZiAtLWdpdCBhL2ZzL25mc2QvdmZzLmMgYi9mcy9uZnNkL3Zmcy5jCmluZGV4IGFkMzhmYzkuLjc4Mzc2YjYgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvdmZzLmMKKysrIGIvZnMvbmZzZC92ZnMuYwpAQCAtOTk4LDggKzk5OCwxMSBAQAogCiAJaWYgKCFFWF9JU1NZTkMoZXhwKSkKIAkJc3RhYmxlID0gMDsKLQlpZiAoc3RhYmxlICYmICFFWF9XR0FUSEVSKGV4cCkpCisJaWYgKHN0YWJsZSAmJiAhRVhfV0dBVEhFUihleHApKSB7CisJCXNwaW5fbG9jaygmZmlsZS0+Zl9sb2NrKTsKIAkJZmlsZS0+Zl9mbGFncyB8PSBPX1NZTkM7CisJCXNwaW5fdW5sb2NrKCZmaWxlLT5mX2xvY2spOworCX0KIAogCS8qIFdyaXRlIHRoZSBkYXRhLiAqLwogCW9sZGZzID0gZ2V0X2ZzKCk7IHNldF9mcyhLRVJORUxfRFMpOwpkaWZmIC0tZ2l0IGEvZnMvcGFydGl0aW9ucy9jaGVjay5jIGIvZnMvcGFydGl0aW9ucy9jaGVjay5jCmluZGV4IDZkNzIwMjQuLjM4ZTMzN2QgMTAwNjQ0Ci0tLSBhL2ZzL3BhcnRpdGlvbnMvY2hlY2suYworKysgYi9mcy9wYXJ0aXRpb25zL2NoZWNrLmMKQEAgLTQwMCw3ICs0MDAsNyBAQAogCXBkZXYtPmRldnQgPSBkZXZ0OwogCiAJLyogZGVsYXkgdWV2ZW50IHVudGlsICdob2xkZXJzJyBzdWJkaXIgaXMgY3JlYXRlZCAqLwotCXBkZXYtPnVldmVudF9zdXBwcmVzcyA9IDE7CisJZGV2X3NldF91ZXZlbnRfc3VwcHJlc3MocGRldiwgMSk7CiAJZXJyID0gZGV2aWNlX2FkZChwZGV2KTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dF9wdXQ7CkBAIC00MTAsNyArNDEwLDcgQEAKIAlpZiAoIXAtPmhvbGRlcl9kaXIpCiAJCWdvdG8gb3V0X2RlbDsKIAotCXBkZXYtPnVldmVudF9zdXBwcmVzcyA9IDA7CisJZGV2X3NldF91ZXZlbnRfc3VwcHJlc3MocGRldiwgMCk7CiAJaWYgKGZsYWdzICYgQUREUEFSVF9GTEFHX1dIT0xFRElTSykgewogCQllcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUocGRldiwgJmRldl9hdHRyX3dob2xlX2Rpc2spOwogCQlpZiAoZXJyKQpAQCAtNDIyLDcgKzQyMiw3IEBACiAJcmN1X2Fzc2lnbl9wb2ludGVyKHB0YmwtPnBhcnRbcGFydG5vXSwgcCk7CiAKIAkvKiBzdXBwcmVzcyB1ZXZlbnQgaWYgdGhlIGRpc2sgc3VwcmVzc2VzIGl0ICovCi0JaWYgKCFkZGV2LT51ZXZlbnRfc3VwcHJlc3MpCisJaWYgKCFkZXZfZ2V0X3VldmVudF9zdXBwcmVzcyhwZGV2KSkKIAkJa29iamVjdF91ZXZlbnQoJnBkZXYtPmtvYmosIEtPQkpfQUREKTsKIAogCXJldHVybiBwOwpAQCAtNDU1LDcgKzQ1NSw3IEBACiAJZGV2X3NldF9uYW1lKGRkZXYsIGRpc2stPmRpc2tfbmFtZSk7CiAKIAkvKiBkZWxheSB1ZXZlbnRzLCB1bnRpbCB3ZSBzY2FubmVkIHBhcnRpdGlvbiB0YWJsZSAqLwotCWRkZXYtPnVldmVudF9zdXBwcmVzcyA9IDE7CisJZGV2X3NldF91ZXZlbnRfc3VwcHJlc3MoZGRldiwgMSk7CiAKIAlpZiAoZGV2aWNlX2FkZChkZGV2KSkKIAkJcmV0dXJuOwpAQCAtNDkwLDcgKzQ5MCw3IEBACiAKIGV4aXQ6CiAJLyogYW5ub3VuY2UgZGlzayBhZnRlciBwb3NzaWJsZSBwYXJ0aXRpb25zIGFyZSBjcmVhdGVkICovCi0JZGRldi0+dWV2ZW50X3N1cHByZXNzID0gMDsKKwlkZXZfc2V0X3VldmVudF9zdXBwcmVzcyhkZGV2LCAwKTsKIAlrb2JqZWN0X3VldmVudCgmZGRldi0+a29iaiwgS09CSl9BREQpOwogCiAJLyogYW5ub3VuY2UgcG9zc2libGUgcGFydGl0aW9ucyAqLwpkaWZmIC0tZ2l0IGEvZnMvcGFydGl0aW9ucy9pYm0uYyBiL2ZzL3BhcnRpdGlvbnMvaWJtLmMKaW5kZXggMWUwNjRjNC4uNDYyOTc2OCAxMDA2NDQKLS0tIGEvZnMvcGFydGl0aW9ucy9pYm0uYworKysgYi9mcy9wYXJ0aXRpb25zL2libS5jCkBAIC0yMSwyMCArMjEsMzggQEAKICAqIGNvbXB1dGUgdGhlIGJsb2NrIG51bWJlciBmcm9tIGEKICAqIGN5bC1jeWwtaGVhZC1oZWFkIHN0cnVjdHVyZQogICovCi1zdGF0aWMgaW5saW5lIGludAorc3RhdGljIHNlY3Rvcl90CiBjY2hoMmJsayAoc3RydWN0IHZ0b2NfY2NoaCAqcHRyLCBzdHJ1Y3QgaGRfZ2VvbWV0cnkgKmdlbykgewotICAgICAgICByZXR1cm4gcHRyLT5jYyAqIGdlby0+aGVhZHMgKiBnZW8tPnNlY3RvcnMgKwotCSAgICAgICBwdHItPmhoICogZ2VvLT5zZWN0b3JzOworCisJc2VjdG9yX3QgY3lsOworCV9fdTE2IGhlYWQ7CisKKwkvKmRlY29kZSBjeWxpbmRlciBhbmQgaGVhZHMgZm9yIGxhcmdlIHZvbHVtZXMgKi8KKwljeWwgPSBwdHItPmhoICYgMHhGRkYwOworCWN5bCA8PD0gMTI7CisJY3lsIHw9IHB0ci0+Y2M7CisJaGVhZCA9IHB0ci0+aGggJiAweDAwMEY7CisJcmV0dXJuIGN5bCAqIGdlby0+aGVhZHMgKiBnZW8tPnNlY3RvcnMgKworCSAgICAgICBoZWFkICogZ2VvLT5zZWN0b3JzOwogfQogCiAvKgogICogY29tcHV0ZSB0aGUgYmxvY2sgbnVtYmVyIGZyb20gYQogICogY3lsLWN5bC1oZWFkLWhlYWQtYmxvY2sgc3RydWN0dXJlCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50CitzdGF0aWMgc2VjdG9yX3QKIGNjaGhiMmJsayAoc3RydWN0IHZ0b2NfY2NoaGIgKnB0ciwgc3RydWN0IGhkX2dlb21ldHJ5ICpnZW8pIHsKLSAgICAgICAgcmV0dXJuIHB0ci0+Y2MgKiBnZW8tPmhlYWRzICogZ2VvLT5zZWN0b3JzICsKLQkJcHRyLT5oaCAqIGdlby0+c2VjdG9ycyArCisKKwlzZWN0b3JfdCBjeWw7CisJX191MTYgaGVhZDsKKworCS8qZGVjb2RlIGN5bGluZGVyIGFuZCBoZWFkcyBmb3IgbGFyZ2Ugdm9sdW1lcyAqLworCWN5bCA9IHB0ci0+aGggJiAweEZGRjA7CisJY3lsIDw8PSAxMjsKKwljeWwgfD0gcHRyLT5jYzsKKwloZWFkID0gcHRyLT5oaCAmIDB4MDAwRjsKKwlyZXR1cm4JY3lsICogZ2VvLT5oZWFkcyAqIGdlby0+c2VjdG9ycyArCisJCWhlYWQgKiBnZW8tPnNlY3RvcnMgKwogCQlwdHItPmI7CiB9CiAKQEAgLTQzLDE0ICs2MSwxNSBAQAogaW50CiBpYm1fcGFydGl0aW9uKHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqc3RhdGUsIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpCiB7Ci0JaW50IGJsb2Nrc2l6ZSwgb2Zmc2V0LCBzaXplLHJlczsKLQlsb2ZmX3QgaV9zaXplOworCWludCBibG9ja3NpemUsIHJlczsKKwlsb2ZmX3QgaV9zaXplLCBvZmZzZXQsIHNpemUsIGZtdF9zaXplOwogCWRhc2RfaW5mb3JtYXRpb24yX3QgKmluZm87CiAJc3RydWN0IGhkX2dlb21ldHJ5ICpnZW87CiAJY2hhciB0eXBlWzVdID0gezAsfTsKIAljaGFyIG5hbWVbN10gPSB7MCx9OwogCXVuaW9uIGxhYmVsX3QgewotCQlzdHJ1Y3QgdnRvY192b2x1bWVfbGFiZWwgdm9sOworCQlzdHJ1Y3QgdnRvY192b2x1bWVfbGFiZWxfY2RsIHZvbDsKKwkJc3RydWN0IHZ0b2Nfdm9sdW1lX2xhYmVsX2xkbCBsbng7CiAJCXN0cnVjdCB2dG9jX2Ntc19sYWJlbCBjbXM7CiAJfSAqbGFiZWw7CiAJdW5zaWduZWQgY2hhciAqZGF0YTsKQEAgLTg1LDE0ICsxMDQsMTYgQEAKIAlpZiAoZGF0YSA9PSBOVUxMKQogCQlnb3RvIG91dF9yZWFkZXJyOwogCi0Jc3RybmNweSAodHlwZSwgZGF0YSwgNCk7Ci0JaWYgKCghaW5mby0+RkJBX2xheW91dCkgJiYgKCFzdHJjbXAoaW5mby0+dHlwZSwgIkVDS0QiKSkpCi0JCXN0cm5jcHkobmFtZSwgZGF0YSArIDgsIDYpOwotCWVsc2UKLQkJc3RybmNweShuYW1lLCBkYXRhICsgNCwgNik7CiAJbWVtY3B5KGxhYmVsLCBkYXRhLCBzaXplb2YodW5pb24gbGFiZWxfdCkpOwogCXB1dF9kZXZfc2VjdG9yKHNlY3QpOwogCisJaWYgKCghaW5mby0+RkJBX2xheW91dCkgJiYgKCFzdHJjbXAoaW5mby0+dHlwZSwgIkVDS0QiKSkpIHsKKwkJc3RybmNweSh0eXBlLCBsYWJlbC0+dm9sLnZvbGxibCwgNCk7CisJCXN0cm5jcHkobmFtZSwgbGFiZWwtPnZvbC52b2xpZCwgNik7CisJfSBlbHNlIHsKKwkJc3RybmNweSh0eXBlLCBsYWJlbC0+bG54LnZvbGxibCwgNCk7CisJCXN0cm5jcHkobmFtZSwgbGFiZWwtPmxueC52b2xpZCwgNik7CisJfQogCUVCQ0FTQyh0eXBlLCA0KTsKIAlFQkNBU0MobmFtZSwgNik7CiAKQEAgLTExMCwzNiArMTMxLDU0IEBACiAJCQkvKgogCQkJICogVk0gc3R5bGUgQ01TMSBsYWJlbGVkIGRpc2sKIAkJCSAqLworCQkJYmxvY2tzaXplID0gbGFiZWwtPmNtcy5ibG9ja19zaXplOwogCQkJaWYgKGxhYmVsLT5jbXMuZGlza19vZmZzZXQgIT0gMCkgewogCQkJCXByaW50aygiQ01TMS8lOHMoTURTSyk6IiwgbmFtZSk7CiAJCQkJLyogZGlzayBpcyByZXNlcnZlZCBtaW5pZGlzayAqLwotCQkJCWJsb2Nrc2l6ZSA9IGxhYmVsLT5jbXMuYmxvY2tfc2l6ZTsKIAkJCQlvZmZzZXQgPSBsYWJlbC0+Y21zLmRpc2tfb2Zmc2V0OwogCQkJCXNpemUgPSAobGFiZWwtPmNtcy5ibG9ja19jb3VudCAtIDEpCiAJCQkJCSogKGJsb2Nrc2l6ZSA+PiA5KTsKIAkJCX0gZWxzZSB7CiAJCQkJcHJpbnRrKCJDTVMxLyU4czoiLCBuYW1lKTsKIAkJCQlvZmZzZXQgPSAoaW5mby0+bGFiZWxfYmxvY2sgKyAxKTsKLQkJCQlzaXplID0gaV9zaXplID4+IDk7CisJCQkJc2l6ZSA9IGxhYmVsLT5jbXMuYmxvY2tfY291bnQKKwkJCQkJKiAoYmxvY2tzaXplID4+IDkpOwogCQkJfQotCQl9IGVsc2UgewotCQkJLyoKLQkJCSAqIE9sZCBzdHlsZSBMTlgxIG9yIHVubGFiZWxlZCBkaXNrCi0JCQkgKi8KLQkJCWlmIChzdHJuY21wKHR5cGUsICJMTlgxIiwgNCkgPT0gMCkKLQkJCQlwcmludGsgKCJMTlgxLyU4czoiLCBuYW1lKTsKLQkJCWVsc2UKLQkJCQlwcmludGsoIihub25sKSIpOwotCQkJb2Zmc2V0ID0gKGluZm8tPmxhYmVsX2Jsb2NrICsgMSk7Ci0JCQlzaXplID0gaV9zaXplID4+IDk7Ci0JCX0KLQkJcHV0X3BhcnRpdGlvbihzdGF0ZSwgMSwgb2Zmc2V0KihibG9ja3NpemUgPj4gOSksCisJCQlwdXRfcGFydGl0aW9uKHN0YXRlLCAxLCBvZmZzZXQqKGJsb2Nrc2l6ZSA+PiA5KSwKIAkJCQkgICAgICBzaXplLW9mZnNldCooYmxvY2tzaXplID4+IDkpKTsKKwkJfSBlbHNlIHsKKwkJCWlmIChzdHJuY21wKHR5cGUsICJMTlgxIiwgNCkgPT0gMCkgeworCQkJCXByaW50aygiTE5YMS8lOHM6IiwgbmFtZSk7CisJCQkJaWYgKGxhYmVsLT5sbngubGRsX3ZlcnNpb24gPT0gMHhmMikgeworCQkJCQlmbXRfc2l6ZSA9IGxhYmVsLT5sbnguZm9ybWF0dGVkX2Jsb2NrcworCQkJCQkJKiAoYmxvY2tzaXplID4+IDkpOworCQkJCX0gZWxzZSBpZiAoIXN0cmNtcChpbmZvLT50eXBlLCAiRUNLRCIpKSB7CisJCQkJCS8qIGZvcm1hdGVkIHcvbyBsYXJnZSB2b2x1bWUgc3VwcG9ydCAqLworCQkJCQlmbXRfc2l6ZSA9IGdlby0+Y3lsaW5kZXJzICogZ2VvLT5oZWFkcworCQkJCQkgICAgICAqIGdlby0+c2VjdG9ycyAqIChibG9ja3NpemUgPj4gOSk7CisJCQkJfSBlbHNlIHsKKwkJCQkJLyogb2xkIGxhYmVsIGFuZCBubyB1c2FibGUgZGlzayBnZW9tZXRyeQorCQkJCQkgKiAoZS5nLiBESUFHKSAqLworCQkJCQlmbXRfc2l6ZSA9IGlfc2l6ZSA+PiA5OworCQkJCX0KKwkJCQlzaXplID0gaV9zaXplID4+IDk7CisJCQkJaWYgKGZtdF9zaXplIDwgc2l6ZSkKKwkJCQkJc2l6ZSA9IGZtdF9zaXplOworCQkJCW9mZnNldCA9IChpbmZvLT5sYWJlbF9ibG9jayArIDEpOworCQkJfSBlbHNlIHsKKwkJCQkvKiB1bmxhYmVsZWQgZGlzayAqLworCQkJCXByaW50aygiKG5vbmwpIik7CisJCQkJc2l6ZSA9IGlfc2l6ZSA+PiA5OworCQkJCW9mZnNldCA9IChpbmZvLT5sYWJlbF9ibG9jayArIDEpOworCQkJfQorCQkJcHV0X3BhcnRpdGlvbihzdGF0ZSwgMSwgb2Zmc2V0KihibG9ja3NpemUgPj4gOSksCisJCQkJICAgICAgc2l6ZS1vZmZzZXQqKGJsb2Nrc2l6ZSA+PiA5KSk7CisJCX0KIAl9IGVsc2UgaWYgKGluZm8tPmZvcm1hdCA9PSBEQVNEX0ZPUk1BVF9DREwpIHsKIAkJLyoKIAkJICogTmV3IHN0eWxlIENETCBmb3JtYXR0ZWQgZGlzawogCQkgKi8KLQkJdW5zaWduZWQgaW50IGJsazsKKwkJc2VjdG9yX3QgYmxrOwogCQlpbnQgY291bnRlcjsKIAogCQkvKgpAQCAtMTY2LDcgKzIwNSw4IEBACiAJCQkJLyogc2tpcCBGTVQ0IC8gRk1UNSAvIEZNVDcgbGFiZWxzICovCiAJCQkJaWYgKGYxLkRTMUZNVElEID09IF9hc2NlYmNbJzQnXQogCQkJCSAgICB8fCBmMS5EUzFGTVRJRCA9PSBfYXNjZWJjWyc1J10KLQkJCQkgICAgfHwgZjEuRFMxRk1USUQgPT0gX2FzY2ViY1snNyddKSB7CisJCQkJICAgIHx8IGYxLkRTMUZNVElEID09IF9hc2NlYmNbJzcnXQorCQkJCSAgICB8fCBmMS5EUzFGTVRJRCA9PSBfYXNjZWJjWyc5J10pIHsKIAkJCQkJYmxrKys7CiAJCQkJCWRhdGEgPSByZWFkX2Rldl9zZWN0b3IoYmRldiwgYmxrICoKIAkJCQkJCQkgICAgICAgKGJsb2Nrc2l6ZS81MTIpLApAQCAtMTc0LDggKzIxNCw5IEBACiAJCQkJCWNvbnRpbnVlOwogCQkJCX0KIAotCQkJCS8qIG9ubHkgRk1UMSB2YWxpZCBhdCB0aGlzIHBvaW50ICovCi0JCQkJaWYgKGYxLkRTMUZNVElEICE9IF9hc2NlYmNbJzEnXSkKKwkJCQkvKiBvbmx5IEZNVDEgYW5kIDggbGFiZWxzIHZhbGlkIGF0IHRoaXMgcG9pbnQgKi8KKwkJCQlpZiAoZjEuRFMxRk1USUQgIT0gX2FzY2ViY1snMSddICYmCisJCQkJICAgIGYxLkRTMUZNVElEICE9IF9hc2NlYmNbJzgnXSkKIAkJCQkJYnJlYWs7CiAKIAkJCQkvKiBPSywgd2UgZ290IHZhbGlkIHBhcnRpdGlvbiBkYXRhICovCmRpZmYgLS1naXQgYS9mcy9waXBlLmMgYi9mcy9waXBlLmMKaW5kZXggMTRmNTAyYi4uOTRhZDE1OSAxMDA2NDQKLS0tIGEvZnMvcGlwZS5jCisrKyBiL2ZzL3BpcGUuYwpAQCAtNjY3LDEwICs2NjcsNyBAQAogCXJldHZhbCA9IGZhc3luY19oZWxwZXIoZmQsIGZpbHAsIG9uLCAmaW5vZGUtPmlfcGlwZS0+ZmFzeW5jX3JlYWRlcnMpOwogCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCi0JaWYgKHJldHZhbCA8IDApCi0JCXJldHVybiByZXR2YWw7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0dmFsOwogfQogCiAKQEAgLTY4NCwxMCArNjgxLDcgQEAKIAlyZXR2YWwgPSBmYXN5bmNfaGVscGVyKGZkLCBmaWxwLCBvbiwgJmlub2RlLT5pX3BpcGUtPmZhc3luY193cml0ZXJzKTsKIAltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAotCWlmIChyZXR2YWwgPCAwKQotCQlyZXR1cm4gcmV0dmFsOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJldHZhbDsKIH0KIAogCkBAIC03MDYsMTEgKzcwMCw3IEBACiAJCQlmYXN5bmNfaGVscGVyKC0xLCBmaWxwLCAwLCAmcGlwZS0+ZmFzeW5jX3JlYWRlcnMpOwogCX0KIAltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKLQotCWlmIChyZXR2YWwgPCAwKQotCQlyZXR1cm4gcmV0dmFsOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJldHZhbDsKIH0KIAogCmRpZmYgLS1naXQgYS9mcy9xdW90YS9kcXVvdC5jIGIvZnMvcXVvdGEvZHF1b3QuYwppbmRleCBhMWJkNWVhLi5lYjkzODAxIDEwMDY0NAotLS0gYS9mcy9xdW90YS9kcXVvdC5jCisrKyBiL2ZzL3F1b3RhL2RxdW90LmMKQEAgLTExMjQsMTAgKzExMjQsNyBAQAogCQlnb3RvIGF0dHJfZXJyX291dDsKIAlnZW5sbXNnX2VuZChza2IsIG1zZ19oZWFkKTsKIAotCXJldCA9IGdlbmxtc2dfbXVsdGljYXN0KHNrYiwgMCwgcXVvdGFfZ2VubF9mYW1pbHkuaWQsIEdGUF9OT0ZTKTsKLQlpZiAocmV0IDwgMCAmJiByZXQgIT0gLUVTUkNIKQotCQlwcmludGsoS0VSTl9FUlIKLQkJCSJWRlM6IEZhaWxlZCB0byBzZW5kIG5vdGlmaWNhdGlvbiBtZXNzYWdlOiAlZFxuIiwgcmV0KTsKKwlnZW5sbXNnX211bHRpY2FzdChza2IsIDAsIHF1b3RhX2dlbmxfZmFtaWx5LmlkLCBHRlBfTk9GUyk7CiAJcmV0dXJuOwogYXR0cl9lcnJfb3V0OgogCXByaW50ayhLRVJOX0VSUiAiVkZTOiBOb3QgZW5vdWdoIHNwYWNlIHRvIGNvbXBvc2UgcXVvdGEgbWVzc2FnZSFcbiIpOwpkaWZmIC0tZ2l0IGEvZnMvc3VwZXIuYyBiL2ZzL3N1cGVyLmMKaW5kZXggMGY5ZDE3Zi4uNDlkMGJkMyAxMDA2NDQKLS0tIGEvZnMvc3VwZXIuYworKysgYi9mcy9zdXBlci5jCkBAIC02NzQsNyArNjc0LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgZG9fZW1lcmdlbmN5X3JlbW91bnQodW5zaWduZWQgbG9uZyBmb28pCitzdGF0aWMgdm9pZCBkb19lbWVyZ2VuY3lfcmVtb3VudChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYjsKIApAQCAtNjk3LDEyICs2OTcsMTkgQEAKIAkJc3Bpbl9sb2NrKCZzYl9sb2NrKTsKIAl9CiAJc3Bpbl91bmxvY2soJnNiX2xvY2spOworCWtmcmVlKHdvcmspOwogCXByaW50aygiRW1lcmdlbmN5IFJlbW91bnQgY29tcGxldGVcbiIpOwogfQogCiB2b2lkIGVtZXJnZW5jeV9yZW1vdW50KHZvaWQpCiB7Ci0JcGRmbHVzaF9vcGVyYXRpb24oZG9fZW1lcmdlbmN5X3JlbW91bnQsIDApOworCXN0cnVjdCB3b3JrX3N0cnVjdCAqd29yazsKKworCXdvcmsgPSBrbWFsbG9jKHNpemVvZigqd29yayksIEdGUF9BVE9NSUMpOworCWlmICh3b3JrKSB7CisJCUlOSVRfV09SSyh3b3JrLCBkb19lbWVyZ2VuY3lfcmVtb3VudCk7CisJCXNjaGVkdWxlX3dvcmsod29yayk7CisJfQogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZnMvc3luYy5jIGIvZnMvc3luYy5jCmluZGV4IGVmMzZiYzkuLjdhYmM2NWYgMTAwNjQ0Ci0tLSBhL2ZzL3N5bmMuYworKysgYi9mcy9zeW5jLmMKQEAgLTQyLDkgKzQyLDIxIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGRvX3N5bmNfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJZG9fc3luYygwKTsKKwlrZnJlZSh3b3JrKTsKK30KKwogdm9pZCBlbWVyZ2VuY3lfc3luYyh2b2lkKQogewotCXBkZmx1c2hfb3BlcmF0aW9uKGRvX3N5bmMsIDApOworCXN0cnVjdCB3b3JrX3N0cnVjdCAqd29yazsKKworCXdvcmsgPSBrbWFsbG9jKHNpemVvZigqd29yayksIEdGUF9BVE9NSUMpOworCWlmICh3b3JrKSB7CisJCUlOSVRfV09SSyh3b3JrLCBkb19zeW5jX3dvcmspOworCQlzY2hlZHVsZV93b3JrKHdvcmspOworCX0KIH0KIAogLyoKZGlmZiAtLWdpdCBhL2ZzL3N5c2ZzL2Jpbi5jIGIvZnMvc3lzZnMvYmluLmMKaW5kZXggZjJjNDc4Yy4uMDc3MDNkMyAxMDA2NDQKLS0tIGEvZnMvc3lzZnMvYmluLmMKKysrIGIvZnMvc3lzZnMvYmluLmMKQEAgLTIxLDE1ICsyMSwyOCBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCiAjaW5jbHVkZSAic3lzZnMuaCIKIAorLyoKKyAqIFRoZXJlJ3Mgb25lIGJpbl9idWZmZXIgZm9yIGVhY2ggb3BlbiBmaWxlLgorICoKKyAqIGZpbHAtPnByaXZhdGVfZGF0YSBwb2ludHMgdG8gYmluX2J1ZmZlciBhbmQKKyAqIHN5c2ZzX2RpcmVudC0+c19iaW5fYXR0ci5idWZmZXJzIHBvaW50cyB0byBhIHRoZSBiaW5fYnVmZmVyIHMKKyAqIHN5c2ZzX2RpcmVudC0+c19iaW5fYXR0ci5idWZmZXJzIGlzIHByb3RlY3RlZCBieSBzeXNmc19iaW5fbG9jaworICovCitzdGF0aWMgREVGSU5FX01VVEVYKHN5c2ZzX2Jpbl9sb2NrKTsKKwogc3RydWN0IGJpbl9idWZmZXIgewotCXN0cnVjdCBtdXRleAltdXRleDsKLQl2b2lkCQkqYnVmZmVyOwotCWludAkJbW1hcHBlZDsKKwlzdHJ1Y3QgbXV0ZXgJCQltdXRleDsKKwl2b2lkCQkJCSpidWZmZXI7CisJaW50CQkJCW1tYXBwZWQ7CisJc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IAkqdm1fb3BzOworCXN0cnVjdCBmaWxlCQkJKmZpbGU7CisJc3RydWN0IGhsaXN0X25vZGUJCWxpc3Q7CiB9OwogCiBzdGF0aWMgaW50CkBAIC0xNjgsNiArMTgxLDE3NSBAQAogCXJldHVybiBjb3VudDsKIH0KIAorc3RhdGljIHZvaWQgYmluX3ZtYV9vcGVuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXN0cnVjdCBmaWxlICpmaWxlID0gdm1hLT52bV9maWxlOworCXN0cnVjdCBiaW5fYnVmZmVyICpiYiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc3lzZnNfZGlyZW50ICphdHRyX3NkID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9mc2RhdGE7CisKKwlpZiAoIWJiLT52bV9vcHMgfHwgIWJiLT52bV9vcHMtPm9wZW4pCisJCXJldHVybjsKKworCWlmICghc3lzZnNfZ2V0X2FjdGl2ZV90d28oYXR0cl9zZCkpCisJCXJldHVybjsKKworCWJiLT52bV9vcHMtPm9wZW4odm1hKTsKKworCXN5c2ZzX3B1dF9hY3RpdmVfdHdvKGF0dHJfc2QpOworfQorCitzdGF0aWMgdm9pZCBiaW5fdm1hX2Nsb3NlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXN0cnVjdCBmaWxlICpmaWxlID0gdm1hLT52bV9maWxlOworCXN0cnVjdCBiaW5fYnVmZmVyICpiYiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc3lzZnNfZGlyZW50ICphdHRyX3NkID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9mc2RhdGE7CisKKwlpZiAoIWJiLT52bV9vcHMgfHwgIWJiLT52bV9vcHMtPmNsb3NlKQorCQlyZXR1cm47CisKKwlpZiAoIXN5c2ZzX2dldF9hY3RpdmVfdHdvKGF0dHJfc2QpKQorCQlyZXR1cm47CisKKwliYi0+dm1fb3BzLT5jbG9zZSh2bWEpOworCisJc3lzZnNfcHV0X2FjdGl2ZV90d28oYXR0cl9zZCk7Cit9CisKK3N0YXRpYyBpbnQgYmluX2ZhdWx0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKK3sKKwlzdHJ1Y3QgZmlsZSAqZmlsZSA9IHZtYS0+dm1fZmlsZTsKKwlzdHJ1Y3QgYmluX2J1ZmZlciAqYmIgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHN5c2ZzX2RpcmVudCAqYXR0cl9zZCA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfZnNkYXRhOworCWludCByZXQ7CisKKwlpZiAoIWJiLT52bV9vcHMgfHwgIWJiLT52bV9vcHMtPmZhdWx0KQorCQlyZXR1cm4gVk1fRkFVTFRfU0lHQlVTOworCisJaWYgKCFzeXNmc19nZXRfYWN0aXZlX3R3byhhdHRyX3NkKSkKKwkJcmV0dXJuIFZNX0ZBVUxUX1NJR0JVUzsKKworCXJldCA9IGJiLT52bV9vcHMtPmZhdWx0KHZtYSwgdm1mKTsKKworCXN5c2ZzX3B1dF9hY3RpdmVfdHdvKGF0dHJfc2QpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYmluX3BhZ2VfbWt3cml0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJc3RydWN0IGZpbGUgKmZpbGUgPSB2bWEtPnZtX2ZpbGU7CisJc3RydWN0IGJpbl9idWZmZXIgKmJiID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzeXNmc19kaXJlbnQgKmF0dHJfc2QgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2ZzZGF0YTsKKwlpbnQgcmV0OworCisJaWYgKCFiYi0+dm1fb3BzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghYmItPnZtX29wcy0+cGFnZV9ta3dyaXRlKQorCQlyZXR1cm4gMDsKKworCWlmICghc3lzZnNfZ2V0X2FjdGl2ZV90d28oYXR0cl9zZCkpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0ID0gYmItPnZtX29wcy0+cGFnZV9ta3dyaXRlKHZtYSwgcGFnZSk7CisKKwlzeXNmc19wdXRfYWN0aXZlX3R3byhhdHRyX3NkKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGJpbl9hY2Nlc3Moc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJICB2b2lkICpidWYsIGludCBsZW4sIGludCB3cml0ZSkKK3sKKwlzdHJ1Y3QgZmlsZSAqZmlsZSA9IHZtYS0+dm1fZmlsZTsKKwlzdHJ1Y3QgYmluX2J1ZmZlciAqYmIgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHN5c2ZzX2RpcmVudCAqYXR0cl9zZCA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfZnNkYXRhOworCWludCByZXQ7CisKKwlpZiAoIWJiLT52bV9vcHMgfHwgIWJiLT52bV9vcHMtPmFjY2VzcykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIXN5c2ZzX2dldF9hY3RpdmVfdHdvKGF0dHJfc2QpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldCA9IGJiLT52bV9vcHMtPmFjY2Vzcyh2bWEsIGFkZHIsIGJ1ZiwgbGVuLCB3cml0ZSk7CisKKwlzeXNmc19wdXRfYWN0aXZlX3R3byhhdHRyX3NkKTsKKwlyZXR1cm4gcmV0OworfQorCisjaWZkZWYgQ09ORklHX05VTUEKK3N0YXRpYyBpbnQgYmluX3NldF9wb2xpY3koc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBtZW1wb2xpY3kgKm5ldykKK3sKKwlzdHJ1Y3QgZmlsZSAqZmlsZSA9IHZtYS0+dm1fZmlsZTsKKwlzdHJ1Y3QgYmluX2J1ZmZlciAqYmIgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHN5c2ZzX2RpcmVudCAqYXR0cl9zZCA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfZnNkYXRhOworCWludCByZXQ7CisKKwlpZiAoIWJiLT52bV9vcHMgfHwgIWJiLT52bV9vcHMtPnNldF9wb2xpY3kpCisJCXJldHVybiAwOworCisJaWYgKCFzeXNmc19nZXRfYWN0aXZlX3R3byhhdHRyX3NkKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXQgPSBiYi0+dm1fb3BzLT5zZXRfcG9saWN5KHZtYSwgbmV3KTsKKworCXN5c2ZzX3B1dF9hY3RpdmVfdHdvKGF0dHJfc2QpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbWVtcG9saWN5ICpiaW5fZ2V0X3BvbGljeShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCQkJdW5zaWduZWQgbG9uZyBhZGRyKQoreworCXN0cnVjdCBmaWxlICpmaWxlID0gdm1hLT52bV9maWxlOworCXN0cnVjdCBiaW5fYnVmZmVyICpiYiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc3lzZnNfZGlyZW50ICphdHRyX3NkID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9mc2RhdGE7CisJc3RydWN0IG1lbXBvbGljeSAqcG9sOworCisJaWYgKCFiYi0+dm1fb3BzIHx8ICFiYi0+dm1fb3BzLT5nZXRfcG9saWN5KQorCQlyZXR1cm4gdm1hLT52bV9wb2xpY3k7CisKKwlpZiAoIXN5c2ZzX2dldF9hY3RpdmVfdHdvKGF0dHJfc2QpKQorCQlyZXR1cm4gdm1hLT52bV9wb2xpY3k7CisKKwlwb2wgPSBiYi0+dm1fb3BzLT5nZXRfcG9saWN5KHZtYSwgYWRkcik7CisKKwlzeXNmc19wdXRfYWN0aXZlX3R3byhhdHRyX3NkKTsKKwlyZXR1cm4gcG9sOworfQorCitzdGF0aWMgaW50IGJpbl9taWdyYXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBjb25zdCBub2RlbWFza190ICpmcm9tLAorCQkJY29uc3Qgbm9kZW1hc2tfdCAqdG8sIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJc3RydWN0IGZpbGUgKmZpbGUgPSB2bWEtPnZtX2ZpbGU7CisJc3RydWN0IGJpbl9idWZmZXIgKmJiID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzeXNmc19kaXJlbnQgKmF0dHJfc2QgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2ZzZGF0YTsKKwlpbnQgcmV0OworCisJaWYgKCFiYi0+dm1fb3BzIHx8ICFiYi0+dm1fb3BzLT5taWdyYXRlKQorCQlyZXR1cm4gMDsKKworCWlmICghc3lzZnNfZ2V0X2FjdGl2ZV90d28oYXR0cl9zZCkpCisJCXJldHVybiAwOworCisJcmV0ID0gYmItPnZtX29wcy0+bWlncmF0ZSh2bWEsIGZyb20sIHRvLCBmbGFncyk7CisKKwlzeXNmc19wdXRfYWN0aXZlX3R3byhhdHRyX3NkKTsKKwlyZXR1cm4gcmV0OworfQorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgYmluX3ZtX29wcyA9IHsKKwkub3BlbgkJPSBiaW5fdm1hX29wZW4sCisJLmNsb3NlCQk9IGJpbl92bWFfY2xvc2UsCisJLmZhdWx0CQk9IGJpbl9mYXVsdCwKKwkucGFnZV9ta3dyaXRlCT0gYmluX3BhZ2VfbWt3cml0ZSwKKwkuYWNjZXNzCQk9IGJpbl9hY2Nlc3MsCisjaWZkZWYgQ09ORklHX05VTUEKKwkuc2V0X3BvbGljeQk9IGJpbl9zZXRfcG9saWN5LAorCS5nZXRfcG9saWN5CT0gYmluX2dldF9wb2xpY3ksCisJLm1pZ3JhdGUJPSBiaW5fbWlncmF0ZSwKKyNlbmRpZgorfTsKKwogc3RhdGljIGludCBtbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKIAlzdHJ1Y3QgYmluX2J1ZmZlciAqYmIgPSBmaWxlLT5wcml2YXRlX2RhdGE7CkBAIC0xNzksMTggKzM2MSwzNyBAQAogCW11dGV4X2xvY2soJmJiLT5tdXRleCk7CiAKIAkvKiBuZWVkIGF0dHJfc2QgZm9yIGF0dHIsIGl0cyBwYXJlbnQgZm9yIGtvYmogKi8KKwlyYyA9IC1FTk9ERVY7CiAJaWYgKCFzeXNmc19nZXRfYWN0aXZlX3R3byhhdHRyX3NkKSkKLQkJcmV0dXJuIC1FTk9ERVY7CisJCWdvdG8gb3V0X3VubG9jazsKIAogCXJjID0gLUVJTlZBTDsKLQlpZiAoYXR0ci0+bW1hcCkKLQkJcmMgPSBhdHRyLT5tbWFwKGtvYmosIGF0dHIsIHZtYSk7CisJaWYgKCFhdHRyLT5tbWFwKQorCQlnb3RvIG91dF9wdXQ7CiAKLQlpZiAocmMgPT0gMCAmJiAhYmItPm1tYXBwZWQpCi0JCWJiLT5tbWFwcGVkID0gMTsKLQllbHNlCi0JCXN5c2ZzX3B1dF9hY3RpdmVfdHdvKGF0dHJfc2QpOworCXJjID0gYXR0ci0+bW1hcChrb2JqLCBhdHRyLCB2bWEpOworCWlmIChyYykKKwkJZ290byBvdXRfcHV0OwogCisJLyoKKwkgKiBQb3dlclBDJ3MgcGNpX21tYXAgb2YgbGVnYWN5X21lbSB1c2VzIHNobWVtX3plcm9fc2V0dXAoKQorCSAqIHRvIHNhdGlzZnkgdmVyc2lvbnMgb2YgWCB3aGljaCBjcmFzaCBpZiB0aGUgbW1hcCBmYWlsczogdGhhdAorCSAqIHN1YnN0aXR1dGVzIGEgbmV3IHZtX2ZpbGUsIGFuZCB3ZSBkb24ndCB0aGVuIHdhbnQgYmluX3ZtX29wcy4KKwkgKi8KKwlpZiAodm1hLT52bV9maWxlICE9IGZpbGUpCisJCWdvdG8gb3V0X3B1dDsKKworCXJjID0gLUVJTlZBTDsKKwlpZiAoYmItPm1tYXBwZWQgJiYgYmItPnZtX29wcyAhPSB2bWEtPnZtX29wcykKKwkJZ290byBvdXRfcHV0OworCisJcmMgPSAwOworCWJiLT5tbWFwcGVkID0gMTsKKwliYi0+dm1fb3BzID0gdm1hLT52bV9vcHM7CisJdm1hLT52bV9vcHMgPSAmYmluX3ZtX29wczsKK291dF9wdXQ6CisJc3lzZnNfcHV0X2FjdGl2ZV90d28oYXR0cl9zZCk7CitvdXRfdW5sb2NrOgogCW11dGV4X3VubG9jaygmYmItPm11dGV4KTsKIAogCXJldHVybiByYzsKQEAgLTIyMyw4ICs0MjQsMTMgQEAKIAkJZ290byBlcnJfb3V0OwogCiAJbXV0ZXhfaW5pdCgmYmItPm11dGV4KTsKKwliYi0+ZmlsZSA9IGZpbGU7CiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gYmI7CiAKKwltdXRleF9sb2NrKCZzeXNmc19iaW5fbG9jayk7CisJaGxpc3RfYWRkX2hlYWQoJmJiLT5saXN0LCAmYXR0cl9zZC0+c19iaW5fYXR0ci5idWZmZXJzKTsKKwltdXRleF91bmxvY2soJnN5c2ZzX2Jpbl9sb2NrKTsKKwogCS8qIG9wZW4gc3VjY2VlZGVkLCBwdXQgYWN0aXZlIHJlZmVyZW5jZXMgKi8KIAlzeXNmc19wdXRfYWN0aXZlX3R3byhhdHRyX3NkKTsKIAlyZXR1cm4gMDsKQEAgLTIzNywxMSArNDQzLDEyIEBACiAKIHN0YXRpYyBpbnQgcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgc3RydWN0IGZpbGUgKiBmaWxlKQogewotCXN0cnVjdCBzeXNmc19kaXJlbnQgKmF0dHJfc2QgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2ZzZGF0YTsKIAlzdHJ1Y3QgYmluX2J1ZmZlciAqYmIgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAKLQlpZiAoYmItPm1tYXBwZWQpCi0JCXN5c2ZzX3B1dF9hY3RpdmVfdHdvKGF0dHJfc2QpOworCW11dGV4X2xvY2soJnN5c2ZzX2Jpbl9sb2NrKTsKKwlobGlzdF9kZWwoJmJiLT5saXN0KTsKKwltdXRleF91bmxvY2soJnN5c2ZzX2Jpbl9sb2NrKTsKKwogCWtmcmVlKGJiLT5idWZmZXIpOwogCWtmcmVlKGJiKTsKIAlyZXR1cm4gMDsKQEAgLTI1Niw2ICs0NjMsMjYgQEAKIAkucmVsZWFzZQk9IHJlbGVhc2UsCiB9OwogCisKK3ZvaWQgdW5tYXBfYmluX2ZpbGUoc3RydWN0IHN5c2ZzX2RpcmVudCAqYXR0cl9zZCkKK3sKKwlzdHJ1Y3QgYmluX2J1ZmZlciAqYmI7CisJc3RydWN0IGhsaXN0X25vZGUgKnRtcDsKKworCWlmIChzeXNmc190eXBlKGF0dHJfc2QpICE9IFNZU0ZTX0tPQkpfQklOX0FUVFIpCisJCXJldHVybjsKKworCW11dGV4X2xvY2soJnN5c2ZzX2Jpbl9sb2NrKTsKKworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGJiLCB0bXAsICZhdHRyX3NkLT5zX2Jpbl9hdHRyLmJ1ZmZlcnMsIGxpc3QpIHsKKwkJc3RydWN0IGlub2RlICppbm9kZSA9IGJiLT5maWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOworCisJCXVubWFwX21hcHBpbmdfcmFuZ2UoaW5vZGUtPmlfbWFwcGluZywgMCwgMCwgMSk7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZzeXNmc19iaW5fbG9jayk7Cit9CisKIC8qKgogICoJc3lzZnNfY3JlYXRlX2Jpbl9maWxlIC0gY3JlYXRlIGJpbmFyeSBmaWxlIGZvciBvYmplY3QuCiAgKglAa29iajoJb2JqZWN0LgpkaWZmIC0tZ2l0IGEvZnMvc3lzZnMvZGlyLmMgYi9mcy9zeXNmcy9kaXIuYwppbmRleCA4MmQzYjc5Li42NmFlYjRmIDEwMDY0NAotLS0gYS9mcy9zeXNmcy9kaXIuYworKysgYi9mcy9zeXNmcy9kaXIuYwpAQCAtNDM0LDYgKzQzNCwyNiBAQAogfQogCiAvKioKKyAqCXN5c2ZzX3BhdGhuYW1lIC0gcmV0dXJuIGZ1bGwgcGF0aCB0byBzeXNmcyBkaXJlbnQKKyAqCUBzZDogc3lzZnNfZGlyZW50IHdob3NlIHBhdGggd2Ugd2FudAorICoJQHBhdGg6IGNhbGxlciBhbGxvY2F0ZWQgYnVmZmVyCisgKgorICoJR2l2ZXMgdGhlIG5hbWUgIi8iIHRvIHRoZSBzeXNmc19yb290IGVudHJ5OyBhbnkgcGF0aCByZXR1cm5lZAorICoJaXMgcmVsYXRpdmUgdG8gd2hlcmV2ZXIgc3lzZnMgaXMgbW91bnRlZC4KKyAqCisgKglYWFg6IGRvZXMgbm8gZXJyb3IgY2hlY2tpbmcgb24gQHBhdGggc2l6ZQorICovCitzdGF0aWMgY2hhciAqc3lzZnNfcGF0aG5hbWUoc3RydWN0IHN5c2ZzX2RpcmVudCAqc2QsIGNoYXIgKnBhdGgpCit7CisJaWYgKHNkLT5zX3BhcmVudCkgeworCQlzeXNmc19wYXRobmFtZShzZC0+c19wYXJlbnQsIHBhdGgpOworCQlzdHJjYXQocGF0aCwgIi8iKTsKKwl9CisJc3RyY2F0KHBhdGgsIHNkLT5zX25hbWUpOworCXJldHVybiBwYXRoOworfQorCisvKioKICAqCXN5c2ZzX2FkZF9vbmUgLSBhZGQgc3lzZnNfZGlyZW50IHRvIHBhcmVudAogICoJQGFjeHQ6IGFkZHJtIGNvbnRleHQgdG8gdXNlCiAgKglAc2Q6IHN5c2ZzX2RpcmVudCB0byBiZSBhZGRlZApAQCAtNDU4LDggKzQ3OCwxNiBAQAogCWludCByZXQ7CiAKIAlyZXQgPSBfX3N5c2ZzX2FkZF9vbmUoYWN4dCwgc2QpOwotCVdBUk4ocmV0ID09IC1FRVhJU1QsIEtFUk5fV0FSTklORyAic3lzZnM6IGR1cGxpY2F0ZSBmaWxlbmFtZSAnJXMnICIKLQkJICAgICAgICJjYW4gbm90IGJlIGNyZWF0ZWRcbiIsIHNkLT5zX25hbWUpOworCWlmIChyZXQgPT0gLUVFWElTVCkgeworCQljaGFyICpwYXRoID0ga3phbGxvYyhQQVRIX01BWCwgR0ZQX0tFUk5FTCk7CisJCVdBUk4oMSwgS0VSTl9XQVJOSU5HCisJCSAgICAgInN5c2ZzOiBjYW5ub3QgY3JlYXRlIGR1cGxpY2F0ZSBmaWxlbmFtZSAnJXMnXG4iLAorCQkgICAgIChwYXRoID09IE5VTEwpID8gc2QtPnNfbmFtZSA6CisJCSAgICAgc3RyY2F0KHN0cmNhdChzeXNmc19wYXRobmFtZShhY3h0LT5wYXJlbnRfc2QsIHBhdGgpLCAiLyIpLAorCQkgICAgICAgICAgICBzZC0+c19uYW1lKSk7CisJCWtmcmVlKHBhdGgpOworCX0KKwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTU4MSw2ICs2MDksNyBAQAogCiAJCXN5c2ZzX2Ryb3BfZGVudHJ5KHNkKTsKIAkJc3lzZnNfZGVhY3RpdmF0ZShzZCk7CisJCXVubWFwX2Jpbl9maWxlKHNkKTsKIAkJc3lzZnNfcHV0KHNkKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9mcy9zeXNmcy9maWxlLmMgYi9mcy9zeXNmcy9maWxlLmMKaW5kZXggMWY0YTNmOC4uMjg5YzQzYSAxMDA2NDQKLS0tIGEvZnMvc3lzZnMvZmlsZS5jCisrKyBiL2ZzL3N5c2ZzL2ZpbGUuYwpAQCAtNjU5LDEzICs2NTksMTYgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKHN5c2ZzX3JlbW92ZV9maWxlX2Zyb21fZ3JvdXApOwogCiBzdHJ1Y3Qgc3lzZnNfc2NoZWR1bGVfY2FsbGJhY2tfc3RydWN0IHsKLQlzdHJ1Y3Qga29iamVjdCAJCSprb2JqOworCXN0cnVjdCBsaXN0X2hlYWQJd29ya3FfbGlzdDsKKwlzdHJ1Y3Qga29iamVjdAkJKmtvYmo7CiAJdm9pZAkJCSgqZnVuYykodm9pZCAqKTsKIAl2b2lkCQkJKmRhdGE7CiAJc3RydWN0IG1vZHVsZQkJKm93bmVyOwogCXN0cnVjdCB3b3JrX3N0cnVjdAl3b3JrOwogfTsKIAorc3RhdGljIERFRklORV9NVVRFWChzeXNmc193b3JrcV9tdXRleCk7CitzdGF0aWMgTElTVF9IRUFEKHN5c2ZzX3dvcmtxKTsKIHN0YXRpYyB2b2lkIHN5c2ZzX3NjaGVkdWxlX2NhbGxiYWNrX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBzeXNmc19zY2hlZHVsZV9jYWxsYmFja19zdHJ1Y3QgKnNzID0gY29udGFpbmVyX29mKHdvcmssCkBAIC02NzQsNiArNjc3LDkgQEAKIAkoc3MtPmZ1bmMpKHNzLT5kYXRhKTsKIAlrb2JqZWN0X3B1dChzcy0+a29iaik7CiAJbW9kdWxlX3B1dChzcy0+b3duZXIpOworCW11dGV4X2xvY2soJnN5c2ZzX3dvcmtxX211dGV4KTsKKwlsaXN0X2RlbCgmc3MtPndvcmtxX2xpc3QpOworCW11dGV4X3VubG9jaygmc3lzZnNfd29ya3FfbXV0ZXgpOwogCWtmcmVlKHNzKTsKIH0KIApAQCAtNjk1LDE1ICs3MDEsMjUgQEAKICAqIHVudGlsIEBmdW5jIHJldHVybnMuCiAgKgogICogUmV0dXJucyAwIGlmIHRoZSByZXF1ZXN0IHdhcyBzdWJtaXR0ZWQsIC1FTk9NRU0gaWYgc3RvcmFnZSBjb3VsZCBub3QKLSAqIGJlIGFsbG9jYXRlZCwgLUVOT0RFViBpZiBhIHJlZmVyZW5jZSB0byBAb3duZXIgaXNuJ3QgYXZhaWxhYmxlLgorICogYmUgYWxsb2NhdGVkLCAtRU5PREVWIGlmIGEgcmVmZXJlbmNlIHRvIEBvd25lciBpc24ndCBhdmFpbGFibGUsCisgKiAtRUFHQUlOIGlmIGEgY2FsbGJhY2sgaGFzIGFscmVhZHkgYmVlbiBzY2hlZHVsZWQgZm9yIEBrb2JqLgogICovCiBpbnQgc3lzZnNfc2NoZWR1bGVfY2FsbGJhY2soc3RydWN0IGtvYmplY3QgKmtvYmosIHZvaWQgKCpmdW5jKSh2b2lkICopLAogCQl2b2lkICpkYXRhLCBzdHJ1Y3QgbW9kdWxlICpvd25lcikKIHsKLQlzdHJ1Y3Qgc3lzZnNfc2NoZWR1bGVfY2FsbGJhY2tfc3RydWN0ICpzczsKKwlzdHJ1Y3Qgc3lzZnNfc2NoZWR1bGVfY2FsbGJhY2tfc3RydWN0ICpzcywgKnRtcDsKIAogCWlmICghdHJ5X21vZHVsZV9nZXQob3duZXIpKQogCQlyZXR1cm4gLUVOT0RFVjsKKworCW11dGV4X2xvY2soJnN5c2ZzX3dvcmtxX211dGV4KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc3MsIHRtcCwgJnN5c2ZzX3dvcmtxLCB3b3JrcV9saXN0KQorCQlpZiAoc3MtPmtvYmogPT0ga29iaikgeworCQkJbXV0ZXhfdW5sb2NrKCZzeXNmc193b3JrcV9tdXRleCk7CisJCQlyZXR1cm4gLUVBR0FJTjsKKwkJfQorCW11dGV4X3VubG9jaygmc3lzZnNfd29ya3FfbXV0ZXgpOworCiAJc3MgPSBrbWFsbG9jKHNpemVvZigqc3MpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXNzKSB7CiAJCW1vZHVsZV9wdXQob3duZXIpOwpAQCAtNzE1LDYgKzczMSwxMCBAQAogCXNzLT5kYXRhID0gZGF0YTsKIAlzcy0+b3duZXIgPSBvd25lcjsKIAlJTklUX1dPUksoJnNzLT53b3JrLCBzeXNmc19zY2hlZHVsZV9jYWxsYmFja193b3JrKTsKKwlJTklUX0xJU1RfSEVBRCgmc3MtPndvcmtxX2xpc3QpOworCW11dGV4X2xvY2soJnN5c2ZzX3dvcmtxX211dGV4KTsKKwlsaXN0X2FkZF90YWlsKCZzcy0+d29ya3FfbGlzdCwgJnN5c2ZzX3dvcmtxKTsKKwltdXRleF91bmxvY2soJnN5c2ZzX3dvcmtxX211dGV4KTsKIAlzY2hlZHVsZV93b3JrKCZzcy0+d29yayk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9mcy9zeXNmcy9pbm9kZS5jIGIvZnMvc3lzZnMvaW5vZGUuYwppbmRleCBkZmEzZDk0Li41NTVmMGZmIDEwMDY0NAotLS0gYS9mcy9zeXNmcy9pbm9kZS5jCisrKyBiL2ZzL3N5c2ZzL2lub2RlLmMKQEAgLTE0Nyw2ICsxNDcsNyBAQAogewogCXN0cnVjdCBiaW5fYXR0cmlidXRlICpiaW5fYXR0cjsKIAorCWlub2RlLT5pX3ByaXZhdGUgPSBzeXNmc19nZXQoc2QpOwogCWlub2RlLT5pX21hcHBpbmctPmFfb3BzID0gJnN5c2ZzX2FvcHM7CiAJaW5vZGUtPmlfbWFwcGluZy0+YmFja2luZ19kZXZfaW5mbyA9ICZzeXNmc19iYWNraW5nX2Rldl9pbmZvOwogCWlub2RlLT5pX29wID0gJnN5c2ZzX2lub2RlX29wZXJhdGlvbnM7CkBAIC0yMTQsNiArMjE1LDIyIEBACiAJcmV0dXJuIGlub2RlOwogfQogCisvKgorICogVGhlIHN5c2ZzX2RpcmVudCBzZXJ2ZXMgYXMgYm90aCBhbiBpbm9kZSBhbmQgYSBkaXJlY3RvcnkgZW50cnkgZm9yIHN5c2ZzLgorICogVG8gcHJldmVudCB0aGUgc3lzZnMgaW5vZGUgbnVtYmVycyBmcm9tIGJlaW5nIGZyZWVkIHByZW1hdHVyZWx5IHdlIHRha2UgYQorICogcmVmZXJlbmNlIHRvIHN5c2ZzX2RpcmVudCBmcm9tIHRoZSBzeXNmcyBpbm9kZS4gIEEKKyAqIHN1cGVyX29wZXJhdGlvbnMuZGVsZXRlX2lub2RlKCkgaW1wbGVtZW50YXRpb24gaXMgbmVlZGVkIHRvIGRyb3AgdGhhdAorICogcmVmZXJlbmNlIHVwb24gaW5vZGUgZGVzdHJ1Y3Rpb24uCisgKi8KK3ZvaWQgc3lzZnNfZGVsZXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJc3RydWN0IHN5c2ZzX2RpcmVudCAqc2QgID0gaW5vZGUtPmlfcHJpdmF0ZTsKKworCXRydW5jYXRlX2lub2RlX3BhZ2VzKCZpbm9kZS0+aV9kYXRhLCAwKTsKKwljbGVhcl9pbm9kZShpbm9kZSk7CisJc3lzZnNfcHV0KHNkKTsKK30KKwogaW50IHN5c2ZzX2hhc2hfYW5kX3JlbW92ZShzdHJ1Y3Qgc3lzZnNfZGlyZW50ICpkaXJfc2QsIGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJc3RydWN0IHN5c2ZzX2FkZHJtX2N4dCBhY3h0OwpkaWZmIC0tZ2l0IGEvZnMvc3lzZnMvbW91bnQuYyBiL2ZzL3N5c2ZzL21vdW50LmMKaW5kZXggYWIzNDNlMy4uNDk3NDk5NSAxMDA2NDQKLS0tIGEvZnMvc3lzZnMvbW91bnQuYworKysgYi9mcy9zeXNmcy9tb3VudC5jCkBAIC0xNywxMSArMTcsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21hZ2ljLmg+CiAKICNpbmNsdWRlICJzeXNmcy5oIgogCi0vKiBSYW5kb20gbWFnaWMgbnVtYmVyICovCi0jZGVmaW5lIFNZU0ZTX01BR0lDIDB4NjI2NTY1NzIKIAogc3RhdGljIHN0cnVjdCB2ZnNtb3VudCAqc3lzZnNfbW91bnQ7CiBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiBzeXNmc19zYiA9IE5VTEw7CkBAIC0zMCw2ICsyOSw3IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgc3lzZnNfb3BzID0gewogCS5zdGF0ZnMJCT0gc2ltcGxlX3N0YXRmcywKIAkuZHJvcF9pbm9kZQk9IGdlbmVyaWNfZGVsZXRlX2lub2RlLAorCS5kZWxldGVfaW5vZGUJPSBzeXNmc19kZWxldGVfaW5vZGUsCiB9OwogCiBzdHJ1Y3Qgc3lzZnNfZGlyZW50IHN5c2ZzX3Jvb3QgPSB7CkBAIC01Myw3ICs1Myw5IEBACiAJc3lzZnNfc2IgPSBzYjsKIAogCS8qIGdldCByb290IGlub2RlLCBpbml0aWFsaXplIGFuZCB1bmxvY2sgaXQgKi8KKwltdXRleF9sb2NrKCZzeXNmc19tdXRleCk7CiAJaW5vZGUgPSBzeXNmc19nZXRfaW5vZGUoJnN5c2ZzX3Jvb3QpOworCW11dGV4X3VubG9jaygmc3lzZnNfbXV0ZXgpOwogCWlmICghaW5vZGUpIHsKIAkJcHJfZGVidWcoInN5c2ZzOiBjb3VsZCBub3QgZ2V0IHJvb3QgaW5vZGVcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL2ZzL3N5c2ZzL3N5c2ZzLmggYi9mcy9zeXNmcy9zeXNmcy5oCmluZGV4IDkzYzZkNmIuLjNmYTBkOTg0IDEwMDY0NAotLS0gYS9mcy9zeXNmcy9zeXNmcy5oCisrKyBiL2ZzL3N5c2ZzL3N5c2ZzLmgKQEAgLTI4LDYgKzI4LDcgQEAKIAogc3RydWN0IHN5c2ZzX2VsZW1fYmluX2F0dHIgewogCXN0cnVjdCBiaW5fYXR0cmlidXRlCSpiaW5fYXR0cjsKKwlzdHJ1Y3QgaGxpc3RfaGVhZAlidWZmZXJzOwogfTsKIAogLyoKQEAgLTE0NSw2ICsxNDYsNyBAQAogICogaW5vZGUuYwogICovCiBzdHJ1Y3QgaW5vZGUgKnN5c2ZzX2dldF9pbm9kZShzdHJ1Y3Qgc3lzZnNfZGlyZW50ICpzZCk7Cit2b2lkIHN5c2ZzX2RlbGV0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIGludCBzeXNmc19zZXRhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICppYXR0cik7CiBpbnQgc3lzZnNfaGFzaF9hbmRfcmVtb3ZlKHN0cnVjdCBzeXNmc19kaXJlbnQgKmRpcl9zZCwgY29uc3QgY2hhciAqbmFtZSk7CiBpbnQgc3lzZnNfaW5vZGVfaW5pdCh2b2lkKTsKQEAgLTE2Myw2ICsxNjUsNyBAQAogICogYmluLmMKICAqLwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYmluX2ZvcHM7Cit2b2lkIHVubWFwX2Jpbl9maWxlKHN0cnVjdCBzeXNmc19kaXJlbnQgKmF0dHJfc2QpOwogCiAvKgogICogc3ltbGluay5jCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvaWRlLmggYi9pbmNsdWRlL2FzbS1mcnYvaWRlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2MTA3NjYuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tZnJ2L2lkZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotLyogaWRlLmg6IEZSViBJREUgZGVjbGFyYXRpb25zCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA0IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCi0gKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0KLSNpZm5kZWYgX0FTTV9JREVfSAotI2RlZmluZSBfQVNNX0lERV9ICi0KLSNpZmRlZiBfX0tFUk5FTF9fCi0KLSNpbmNsdWRlIDxhc20vc2V0dXAuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pZGVfaW9wcy5oPgotCi0jZW5kaWYgLyogX19LRVJORUxfXyAqLwotI2VuZGlmIC8qIF9BU01fSURFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi9zb2NrZXQuaCBiL2luY2x1ZGUvYXNtLWZydi9zb2NrZXQuaAppbmRleCBlNTFjYTY3Li41N2MzZDQwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1mcnYvc29ja2V0LmgKKysrIGIvaW5jbHVkZS9hc20tZnJ2L3NvY2tldC5oCkBAIC01NCw1ICs1NCw4IEBACiAKICNkZWZpbmUgU09fTUFSSwkJCTM2CiAKKyNkZWZpbmUgU09fVElNRVNUQU1QSU5HCQkzNworI2RlZmluZSBTQ01fVElNRVNUQU1QSU5HCVNPX1RJTUVTVEFNUElORworCiAjZW5kaWYgLyogX0FTTV9TT0NLRVRfSCAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvc3dhYi5oIGIvaW5jbHVkZS9hc20tZnJ2L3N3YWIuaAppbmRleCBhZmIzMzk2Li5mMzA1ODM0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1mcnYvc3dhYi5oCisrKyBiL2luY2x1ZGUvYXNtLWZydi9zd2FiLmgKQEAgLTEsNyArMSw3IEBACiAjaWZuZGVmIF9BU01fU1dBQl9ICiAjZGVmaW5lIF9BU01fU1dBQl9ICiAKLSNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgIWRlZmluZWQoX19TVFJJQ1RfQU5TSV9fKSB8fCBkZWZpbmVkKF9fS0VSTkVMX18pCiAjICBkZWZpbmUgX19TV0FCXzY0X1RIUlVfMzJfXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9mY250bC5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9mY250bC5oCmluZGV4IGI4NDc3NDEuLjRkM2U0ODMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvZmNudGwuaAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL2ZjbnRsLmgKQEAgLTExNyw5ICsxMTcsOSBAQAogc3RydWN0IGZsb2NrIHsKIAlzaG9ydAlsX3R5cGU7CiAJc2hvcnQJbF93aGVuY2U7Ci0Jb2ZmX3QJbF9zdGFydDsKLQlvZmZfdAlsX2xlbjsKLQlwaWRfdAlsX3BpZDsKKwlfX2tlcm5lbF9vZmZfdAlsX3N0YXJ0OworCV9fa2VybmVsX29mZl90CWxfbGVuOworCV9fa2VybmVsX3BpZF90CWxfcGlkOwogCV9fQVJDSF9GTE9DS19QQUQKIH07CiAjZW5kaWYKQEAgLTE0MCw5ICsxNDAsOSBAQAogc3RydWN0IGZsb2NrNjQgewogCXNob3J0ICBsX3R5cGU7CiAJc2hvcnQgIGxfd2hlbmNlOwotCWxvZmZfdCBsX3N0YXJ0OwotCWxvZmZfdCBsX2xlbjsKLQlwaWRfdCAgbF9waWQ7CisJX19rZXJuZWxfbG9mZl90IGxfc3RhcnQ7CisJX19rZXJuZWxfbG9mZl90IGxfbGVuOworCV9fa2VybmVsX3BpZF90ICBsX3BpZDsKIAlfX0FSQ0hfRkxPQ0s2NF9QQUQKIH07CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvc2lnaW5mby5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9zaWdpbmZvLmgKaW5kZXggOTY5NTcwMS4uMzU3NTJkYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9zaWdpbmZvLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9zaWdpbmZvLmgKQEAgLTIzLDcgKzIzLDcgQEAKICNlbmRpZgogCiAjaWZuZGVmIF9fQVJDSF9TSV9VSURfVAotI2RlZmluZSBfX0FSQ0hfU0lfVUlEX1QJdWlkX3QKKyNkZWZpbmUgX19BUkNIX1NJX1VJRF9UCV9fa2VybmVsX3VpZDMyX3QKICNlbmRpZgogCiAvKgpAQCAtNDcsMTMgKzQ3LDEzIEBACiAKIAkJLyoga2lsbCgpICovCiAJCXN0cnVjdCB7Ci0JCQlwaWRfdCBfcGlkOwkJLyogc2VuZGVyJ3MgcGlkICovCisJCQlfX2tlcm5lbF9waWRfdCBfcGlkOwkvKiBzZW5kZXIncyBwaWQgKi8KIAkJCV9fQVJDSF9TSV9VSURfVCBfdWlkOwkvKiBzZW5kZXIncyB1aWQgKi8KIAkJfSBfa2lsbDsKIAogCQkvKiBQT1NJWC4xYiB0aW1lcnMgKi8KIAkJc3RydWN0IHsKLQkJCXRpbWVyX3QgX3RpZDsJCS8qIHRpbWVyIGlkICovCisJCQlfX2tlcm5lbF90aW1lcl90IF90aWQ7CS8qIHRpbWVyIGlkICovCiAJCQlpbnQgX292ZXJydW47CQkvKiBvdmVycnVuIGNvdW50ICovCiAJCQljaGFyIF9wYWRbc2l6ZW9mKCBfX0FSQ0hfU0lfVUlEX1QpIC0gc2l6ZW9mKGludCldOwogCQkJc2lndmFsX3QgX3NpZ3ZhbDsJLyogc2FtZSBhcyBiZWxvdyAqLwpAQCAtNjIsMTggKzYyLDE4IEBACiAKIAkJLyogUE9TSVguMWIgc2lnbmFscyAqLwogCQlzdHJ1Y3QgewotCQkJcGlkX3QgX3BpZDsJCS8qIHNlbmRlcidzIHBpZCAqLworCQkJX19rZXJuZWxfcGlkX3QgX3BpZDsJLyogc2VuZGVyJ3MgcGlkICovCiAJCQlfX0FSQ0hfU0lfVUlEX1QgX3VpZDsJLyogc2VuZGVyJ3MgdWlkICovCiAJCQlzaWd2YWxfdCBfc2lndmFsOwogCQl9IF9ydDsKIAogCQkvKiBTSUdDSExEICovCiAJCXN0cnVjdCB7Ci0JCQlwaWRfdCBfcGlkOwkJLyogd2hpY2ggY2hpbGQgKi8KKwkJCV9fa2VybmVsX3BpZF90IF9waWQ7CS8qIHdoaWNoIGNoaWxkICovCiAJCQlfX0FSQ0hfU0lfVUlEX1QgX3VpZDsJLyogc2VuZGVyJ3MgdWlkICovCiAJCQlpbnQgX3N0YXR1czsJCS8qIGV4aXQgY29kZSAqLwotCQkJY2xvY2tfdCBfdXRpbWU7Ci0JCQljbG9ja190IF9zdGltZTsKKwkJCV9fa2VybmVsX2Nsb2NrX3QgX3V0aW1lOworCQkJX19rZXJuZWxfY2xvY2tfdCBfc3RpbWU7CiAJCX0gX3NpZ2NobGQ7CiAKIAkJLyogU0lHSUxMLCBTSUdGUEUsIFNJR1NFR1YsIFNJR0JVUyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9zdGF0ZnMuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvc3RhdGZzLmgKaW5kZXggNjEyOWQ2OC4uM2I0ZmIzZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9zdGF0ZnMuaAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL3N0YXRmcy5oCkBAIC0xLDggKzEsOSBAQAogI2lmbmRlZiBfR0VORVJJQ19TVEFURlNfSAogI2RlZmluZSBfR0VORVJJQ19TVEFURlNfSAogCi0jaWZuZGVmIF9fS0VSTkVMX1NUUklDVF9OQU1FUwotIyBpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNpZmRlZiBfX0tFUk5FTF9fCiB0eXBlZGVmIF9fa2VybmVsX2ZzaWRfdAlmc2lkX3Q7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oCmluZGV4IGM2MWZhYjEuLmFjYTQwYjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL3ZtbGludXgubGRzLmgKQEAgLTgwLDYgKzgwLDExIEBACiAJVk1MSU5VWF9TWU1CT0woX19zdGFydF9fX3RyYWNlcG9pbnRzKSA9IC47CQkJXAogCSooX190cmFjZXBvaW50cykJCQkJCQlcCiAJVk1MSU5VWF9TWU1CT0woX19zdG9wX19fdHJhY2Vwb2ludHMpID0gLjsJCQlcCisJLyogaW1wbGVtZW50IGR5bmFtaWMgcHJpbnRrIGRlYnVnICovCQkJCVwKKwkuID0gQUxJR04oOCk7CQkJCQkJCVwKKwlWTUxJTlVYX1NZTUJPTChfX3N0YXJ0X19fdmVyYm9zZSkgPSAuOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSooX192ZXJib3NlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJVk1MSU5VWF9TWU1CT0woX19zdG9wX19fdmVyYm9zZSkgPSAuOwkJCQlcCiAJTElLRUxZX1BST0ZJTEUoKQkJICAgICAgIAkJCQlcCiAJQlJBTkNIX1BST0ZJTEUoKQogCkBAIC0zMDksMTUgKzMxNCw3IEBACiAJQ1BVX0RJU0NBUkQoaW5pdC5kYXRhKQkJCQkJCVwKIAlDUFVfRElTQ0FSRChpbml0LnJvZGF0YSkJCQkJCVwKIAlNRU1fRElTQ0FSRChpbml0LmRhdGEpCQkJCQkJXAotCU1FTV9ESVNDQVJEKGluaXQucm9kYXRhKQkJCQkJXAotCS8qIGltcGxlbWVudCBkeW5hbWljIHByaW50ayBkZWJ1ZyAqLwkJCQlcCi0JVk1MSU5VWF9TWU1CT0woX19zdGFydF9fX3ZlcmJvc2Vfc3RyaW5ncykgPSAuOyAgICAgICAgICAgICAgICAgIFwKLQkqKF9fdmVyYm9zZV9zdHJpbmdzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCVZNTElOVVhfU1lNQk9MKF9fc3RvcF9fX3ZlcmJvc2Vfc3RyaW5ncykgPSAuOyAgICAgICAgICAgICAgICAgICBcCi0JLiA9IEFMSUdOKDgpOwkJCQkJCQlcCi0JVk1MSU5VWF9TWU1CT0woX19zdGFydF9fX3ZlcmJvc2UpID0gLjsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkqKF9fdmVyYm9zZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCVZNTElOVVhfU1lNQk9MKF9fc3RvcF9fX3ZlcmJvc2UpID0gLjsKKwlNRU1fRElTQ0FSRChpbml0LnJvZGF0YSkKIAogI2RlZmluZSBJTklUX1RFWFQJCQkJCQkJXAogCSooLmluaXQudGV4dCkJCQkJCQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9zb2NrZXQuaCBiL2luY2x1ZGUvYXNtLW0zMnIvc29ja2V0LmgKaW5kZXggOWEwZTIwMC4uYmU3ZWQ1OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTMyci9zb2NrZXQuaAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL3NvY2tldC5oCkBAIC01NCw0ICs1NCw3IEBACiAKICNkZWZpbmUgU09fTUFSSwkJCTM2CiAKKyNkZWZpbmUgU09fVElNRVNUQU1QSU5HCQkzNworI2RlZmluZSBTQ01fVElNRVNUQU1QSU5HCVNPX1RJTUVTVEFNUElORworCiAjZW5kaWYgLyogX0FTTV9NMzJSX1NPQ0tFVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL3N3YWIuaCBiL2luY2x1ZGUvYXNtLW0zMnIvc3dhYi5oCmluZGV4IDk3OTczZTEuLjU0ZGFiMDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW0zMnIvc3dhYi5oCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvc3dhYi5oCkBAIC0xLDcgKzEsNyBAQAogI2lmbmRlZiBfQVNNX00zMlJfU1dBQl9ICiAjZGVmaW5lIF9BU01fTTMyUl9TV0FCX0gKIAotI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKICNpZiAhZGVmaW5lZChfX1NUUklDVF9BTlNJX18pIHx8IGRlZmluZWQoX19LRVJORUxfXykKICMgIGRlZmluZSBfX1NXQUJfNjRfVEhSVV8zMl9fCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tbjEwMzAwL2lkZS5oIGIvaW5jbHVkZS9hc20tbW4xMDMwMC9pZGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmFkY2RkOS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1tbjEwMzAwL2lkZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotLyogTU4xMDMwMCBBcmNoLXNwZWNpZmljIElERSBjb2RlCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA3IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKLSAqIC0gRGVyaXZlZCBmcm9tIGluY2x1ZGUvYXNtLWkzODYvaWRlLmgKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5jZQotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCi0gKiAyIG9mIHRoZSBMaWNlbmNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0KLSNpZm5kZWYgX0FTTV9JREVfSAotI2RlZmluZSBfQVNNX0lERV9ICi0KLSNpZmRlZiBfX0tFUk5FTF9fCi0KLSNpbmNsdWRlIDxhc20vaW50Y3RsLXJlZ3MuaD4KLQotI3VuZGVmIFNVUFBPUlRfU0xPV19EQVRBX1BPUlRTCi0jZGVmaW5lIFNVUFBPUlRfU0xPV19EQVRBX1BPUlRTIDAKLQotI3VuZGVmIFNVUFBPUlRfVkxCX1NZTkMKLSNkZWZpbmUgU1VQUE9SVF9WTEJfU1lOQyAwCi0KLS8qCi0gKiBzb21lIGJpdHMgbmVlZGVkIGZvciBwYXJ0cyBvZiB0aGUgSURFIHN1YnN5c3RlbSB0byBjb21waWxlCi0gKi8KLSNkZWZpbmUgX19pZGVfbW1faW5zdyhwb3J0LCBhZGRyLCBuKSBcCi0JaW5zdygodW5zaWduZWQgbG9uZykgKHBvcnQpLCAoYWRkciksIChuKSkKLSNkZWZpbmUgX19pZGVfbW1faW5zbChwb3J0LCBhZGRyLCBuKSBcCi0JaW5zbCgodW5zaWduZWQgbG9uZykgKHBvcnQpLCAoYWRkciksIChuKSkKLSNkZWZpbmUgX19pZGVfbW1fb3V0c3cocG9ydCwgYWRkciwgbikgXAotCW91dHN3KCh1bnNpZ25lZCBsb25nKSAocG9ydCksIChhZGRyKSwgKG4pKQotI2RlZmluZSBfX2lkZV9tbV9vdXRzbChwb3J0LCBhZGRyLCBuKSBcCi0Jb3V0c2woKHVuc2lnbmVkIGxvbmcpIChwb3J0KSwgKGFkZHIpLCAobikpCi0KLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCi0jZW5kaWYgLyogX0FTTV9JREVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbW4xMDMwMC9wY2kuaCBiL2luY2x1ZGUvYXNtLW1uMTAzMDAvcGNpLmgKaW5kZXggY2Q5Y2M1Yy4uMDUxN2I0NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbW4xMDMwMC9wY2kuaAorKysgYi9pbmNsdWRlL2FzbS1tbjEwMzAwL3BjaS5oCkBAIC0xMjEsNCArMTIxLDkgQEAKIAogI2RlZmluZSBwY2liaW9zX3NjYW5fYWxsX2ZucyhhLCBiKQkwCiAKK3N0YXRpYyBpbmxpbmUgaW50IHBjaV9nZXRfbGVnYWN5X2lkZV9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IGNoYW5uZWwpCit7CisJcmV0dXJuIGNoYW5uZWwgPyAxNSA6IDE0OworfQorCiAjZW5kaWYgLyogX0FTTV9QQ0lfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbW4xMDMwMC9zb2NrZXQuaCBiL2luY2x1ZGUvYXNtLW1uMTAzMDAvc29ja2V0LmgKaW5kZXggODBhZjljNC4uZmI1ZGFmNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbW4xMDMwMC9zb2NrZXQuaAorKysgYi9pbmNsdWRlL2FzbS1tbjEwMzAwL3NvY2tldC5oCkBAIC01NCw0ICs1NCw3IEBACiAKICNkZWZpbmUgU09fTUFSSwkJCTM2CiAKKyNkZWZpbmUgU09fVElNRVNUQU1QSU5HCQkzNworI2RlZmluZSBTQ01fVElNRVNUQU1QSU5HCVNPX1RJTUVTVEFNUElORworCiAjZW5kaWYgLyogX0FTTV9TT0NLRVRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbW4xMDMwMC9zd2FiLmggYi9pbmNsdWRlL2FzbS1tbjEwMzAwL3N3YWIuaAppbmRleCA0NTA0ZDFiLi5iZDgxOGE4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tbjEwMzAwL3N3YWIuaAorKysgYi9pbmNsdWRlL2FzbS1tbjEwMzAwL3N3YWIuaApAQCAtMTEsNyArMTEsNyBAQAogI2lmbmRlZiBfQVNNX1NXQUJfSAogI2RlZmluZSBfQVNNX1NXQUJfSAogCi0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogI2lmZGVmIF9fR05VQ19fCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY3J5cHRvL2Flcy5oIGIvaW5jbHVkZS9jcnlwdG8vYWVzLmgKaW5kZXggNjU2YTRjNi4uNzUyNGJhMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jcnlwdG8vYWVzLmgKKysrIGIvaW5jbHVkZS9jcnlwdG8vYWVzLmgKQEAgLTE3LDEwICsxNywxNCBAQAogI2RlZmluZSBBRVNfTUFYX0tFWUxFTkdUSAkoMTUgKiAxNikKICNkZWZpbmUgQUVTX01BWF9LRVlMRU5HVEhfVTMyCShBRVNfTUFYX0tFWUxFTkdUSCAvIHNpemVvZih1MzIpKQogCisvKgorICogUGxlYXNlIGVuc3VyZSB0aGF0IHRoZSBmaXJzdCB0d28gZmllbGRzIGFyZSAxNi1ieXRlIGFsaWduZWQKKyAqIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBvZiB0aGUgc3RydWN0dXJlLCBpLmUuLCBkb24ndCBtb3ZlIHRoZW0hCisgKi8KIHN0cnVjdCBjcnlwdG9fYWVzX2N0eCB7Ci0JdTMyIGtleV9sZW5ndGg7CiAJdTMyIGtleV9lbmNbQUVTX01BWF9LRVlMRU5HVEhfVTMyXTsKIAl1MzIga2V5X2RlY1tBRVNfTUFYX0tFWUxFTkdUSF9VMzJdOworCXUzMiBrZXlfbGVuZ3RoOwogfTsKIAogZXh0ZXJuIGNvbnN0IHUzMiBjcnlwdG9fZnRfdGFiWzRdWzI1Nl07CmRpZmYgLS1naXQgYS9pbmNsdWRlL2NyeXB0by9jb21wcmVzcy5oIGIvaW5jbHVkZS9jcnlwdG8vY29tcHJlc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjE2M2VmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9jcnlwdG8vY29tcHJlc3MuaApAQCAtMCwwICsxLDE0NSBAQAorLyoKKyAqIENvbXByZXNzOiBDb21wcmVzc2lvbiBhbGdvcml0aG1zIHVuZGVyIHRoZSBjcnlwdG9ncmFwaGljIEFQSS4KKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBTb255IENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uCisgKiBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2lmbmRlZiBfQ1JZUFRPX0NPTVBSRVNTX0gKKyNkZWZpbmUgX0NSWVBUT19DT01QUkVTU19ICisKKyNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KKworCitzdHJ1Y3QgY29tcF9yZXF1ZXN0IHsKKwljb25zdCB2b2lkICpuZXh0X2luOwkJLyogbmV4dCBpbnB1dCBieXRlICovCisJdm9pZCAqbmV4dF9vdXQ7CQkJLyogbmV4dCBvdXRwdXQgYnl0ZSAqLworCXVuc2lnbmVkIGludCBhdmFpbF9pbjsJCS8qIGJ5dGVzIGF2YWlsYWJsZSBhdCBuZXh0X2luICovCisJdW5zaWduZWQgaW50IGF2YWlsX291dDsJCS8qIGJ5dGVzIGF2YWlsYWJsZSBhdCBuZXh0X291dCAqLworfTsKKworZW51bSB6bGliX2NvbXBfcGFyYW1zIHsKKwlaTElCX0NPTVBfTEVWRUwgPSAxLAkJLyogZS5nLiBaX0RFRkFVTFRfQ09NUFJFU1NJT04gKi8KKwlaTElCX0NPTVBfTUVUSE9ELAkJLyogZS5nLiBaX0RFRkxBVEVEICovCisJWkxJQl9DT01QX1dJTkRPV0JJVFMsCQkvKiBlLmcuIE1BWF9XQklUUyAqLworCVpMSUJfQ09NUF9NRU1MRVZFTCwJCS8qIGUuZy4gREVGX01FTV9MRVZFTCAqLworCVpMSUJfQ09NUF9TVFJBVEVHWSwJCS8qIGUuZy4gWl9ERUZBVUxUX1NUUkFURUdZICovCisJX19aTElCX0NPTVBfTUFYLAorfTsKKworI2RlZmluZSBaTElCX0NPTVBfTUFYCShfX1pMSUJfQ09NUF9NQVggLSAxKQorCisKK2VudW0gemxpYl9kZWNvbXBfcGFyYW1zIHsKKwlaTElCX0RFQ09NUF9XSU5ET1dCSVRTID0gMSwJLyogZS5nLiBERUZfV0JJVFMgKi8KKwlfX1pMSUJfREVDT01QX01BWCwKK307CisKKyNkZWZpbmUgWkxJQl9ERUNPTVBfTUFYCShfX1pMSUJfREVDT01QX01BWCAtIDEpCisKKworc3RydWN0IGNyeXB0b19wY29tcCB7CisJc3RydWN0IGNyeXB0b190Zm0gYmFzZTsKK307CisKK3N0cnVjdCBwY29tcF9hbGcgeworCWludCAoKmNvbXByZXNzX3NldHVwKShzdHJ1Y3QgY3J5cHRvX3Bjb21wICp0Zm0sIHZvaWQgKnBhcmFtcywKKwkJCSAgICAgIHVuc2lnbmVkIGludCBsZW4pOworCWludCAoKmNvbXByZXNzX2luaXQpKHN0cnVjdCBjcnlwdG9fcGNvbXAgKnRmbSk7CisJaW50ICgqY29tcHJlc3NfdXBkYXRlKShzdHJ1Y3QgY3J5cHRvX3Bjb21wICp0Zm0sCisJCQkgICAgICAgc3RydWN0IGNvbXBfcmVxdWVzdCAqcmVxKTsKKwlpbnQgKCpjb21wcmVzc19maW5hbCkoc3RydWN0IGNyeXB0b19wY29tcCAqdGZtLAorCQkJICAgICAgc3RydWN0IGNvbXBfcmVxdWVzdCAqcmVxKTsKKwlpbnQgKCpkZWNvbXByZXNzX3NldHVwKShzdHJ1Y3QgY3J5cHRvX3Bjb21wICp0Zm0sIHZvaWQgKnBhcmFtcywKKwkJCQl1bnNpZ25lZCBpbnQgbGVuKTsKKwlpbnQgKCpkZWNvbXByZXNzX2luaXQpKHN0cnVjdCBjcnlwdG9fcGNvbXAgKnRmbSk7CisJaW50ICgqZGVjb21wcmVzc191cGRhdGUpKHN0cnVjdCBjcnlwdG9fcGNvbXAgKnRmbSwKKwkJCQkgc3RydWN0IGNvbXBfcmVxdWVzdCAqcmVxKTsKKwlpbnQgKCpkZWNvbXByZXNzX2ZpbmFsKShzdHJ1Y3QgY3J5cHRvX3Bjb21wICp0Zm0sCisJCQkJc3RydWN0IGNvbXBfcmVxdWVzdCAqcmVxKTsKKworCXN0cnVjdCBjcnlwdG9fYWxnIGJhc2U7Cit9OworCitleHRlcm4gc3RydWN0IGNyeXB0b19wY29tcCAqY3J5cHRvX2FsbG9jX3Bjb21wKGNvbnN0IGNoYXIgKmFsZ19uYW1lLCB1MzIgdHlwZSwKKwkJCQkJICAgICAgIHUzMiBtYXNrKTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgY3J5cHRvX3RmbSAqY3J5cHRvX3Bjb21wX3RmbShzdHJ1Y3QgY3J5cHRvX3Bjb21wICp0Zm0pCit7CisJcmV0dXJuICZ0Zm0tPmJhc2U7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjcnlwdG9fZnJlZV9wY29tcChzdHJ1Y3QgY3J5cHRvX3Bjb21wICp0Zm0pCit7CisJY3J5cHRvX2Rlc3Ryb3lfdGZtKHRmbSwgY3J5cHRvX3Bjb21wX3RmbSh0Zm0pKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcGNvbXBfYWxnICpfX2NyeXB0b19wY29tcF9hbGcoc3RydWN0IGNyeXB0b19hbGcgKmFsZykKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGFsZywgc3RydWN0IHBjb21wX2FsZywgYmFzZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBjb21wX2FsZyAqY3J5cHRvX3Bjb21wX2FsZyhzdHJ1Y3QgY3J5cHRvX3Bjb21wICp0Zm0pCit7CisJcmV0dXJuIF9fY3J5cHRvX3Bjb21wX2FsZyhjcnlwdG9fcGNvbXBfdGZtKHRmbSktPl9fY3J0X2FsZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGNyeXB0b19jb21wcmVzc19zZXR1cChzdHJ1Y3QgY3J5cHRvX3Bjb21wICp0Zm0sCisJCQkJCXZvaWQgKnBhcmFtcywgdW5zaWduZWQgaW50IGxlbikKK3sKKwlyZXR1cm4gY3J5cHRvX3Bjb21wX2FsZyh0Zm0pLT5jb21wcmVzc19zZXR1cCh0Zm0sIHBhcmFtcywgbGVuKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgY3J5cHRvX2NvbXByZXNzX2luaXQoc3RydWN0IGNyeXB0b19wY29tcCAqdGZtKQoreworCXJldHVybiBjcnlwdG9fcGNvbXBfYWxnKHRmbSktPmNvbXByZXNzX2luaXQodGZtKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgY3J5cHRvX2NvbXByZXNzX3VwZGF0ZShzdHJ1Y3QgY3J5cHRvX3Bjb21wICp0Zm0sCisJCQkJCSBzdHJ1Y3QgY29tcF9yZXF1ZXN0ICpyZXEpCit7CisJcmV0dXJuIGNyeXB0b19wY29tcF9hbGcodGZtKS0+Y29tcHJlc3NfdXBkYXRlKHRmbSwgcmVxKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgY3J5cHRvX2NvbXByZXNzX2ZpbmFsKHN0cnVjdCBjcnlwdG9fcGNvbXAgKnRmbSwKKwkJCQkJc3RydWN0IGNvbXBfcmVxdWVzdCAqcmVxKQoreworCXJldHVybiBjcnlwdG9fcGNvbXBfYWxnKHRmbSktPmNvbXByZXNzX2ZpbmFsKHRmbSwgcmVxKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgY3J5cHRvX2RlY29tcHJlc3Nfc2V0dXAoc3RydWN0IGNyeXB0b19wY29tcCAqdGZtLAorCQkJCQkgIHZvaWQgKnBhcmFtcywgdW5zaWduZWQgaW50IGxlbikKK3sKKwlyZXR1cm4gY3J5cHRvX3Bjb21wX2FsZyh0Zm0pLT5kZWNvbXByZXNzX3NldHVwKHRmbSwgcGFyYW1zLCBsZW4pOworfQorCitzdGF0aWMgaW5saW5lIGludCBjcnlwdG9fZGVjb21wcmVzc19pbml0KHN0cnVjdCBjcnlwdG9fcGNvbXAgKnRmbSkKK3sKKwlyZXR1cm4gY3J5cHRvX3Bjb21wX2FsZyh0Zm0pLT5kZWNvbXByZXNzX2luaXQodGZtKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgY3J5cHRvX2RlY29tcHJlc3NfdXBkYXRlKHN0cnVjdCBjcnlwdG9fcGNvbXAgKnRmbSwKKwkJCQkJICAgc3RydWN0IGNvbXBfcmVxdWVzdCAqcmVxKQoreworCXJldHVybiBjcnlwdG9fcGNvbXBfYWxnKHRmbSktPmRlY29tcHJlc3NfdXBkYXRlKHRmbSwgcmVxKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgY3J5cHRvX2RlY29tcHJlc3NfZmluYWwoc3RydWN0IGNyeXB0b19wY29tcCAqdGZtLAorCQkJCQkgIHN0cnVjdCBjb21wX3JlcXVlc3QgKnJlcSkKK3sKKwlyZXR1cm4gY3J5cHRvX3Bjb21wX2FsZyh0Zm0pLT5kZWNvbXByZXNzX2ZpbmFsKHRmbSwgcmVxKTsKK30KKworI2VuZGlmCS8qIF9DUllQVE9fQ09NUFJFU1NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jcnlwdG8vY3J5cHRkLmggYi9pbmNsdWRlL2NyeXB0by9jcnlwdGQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWZhN2JiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9jcnlwdG8vY3J5cHRkLmgKQEAgLTAsMCArMSwyNyBAQAorLyoKKyAqIFNvZnR3YXJlIGFzeW5jIGNyeXB0byBkYWVtb24KKyAqLworCisjaWZuZGVmIF9DUllQVE9fQ1JZUFRfSAorI2RlZmluZSBfQ1JZUFRPX0NSWVBUX0gKKworI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorCitzdHJ1Y3QgY3J5cHRkX2FibGtjaXBoZXIgeworCXN0cnVjdCBjcnlwdG9fYWJsa2NpcGhlciBiYXNlOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgY3J5cHRkX2FibGtjaXBoZXIgKl9fY3J5cHRkX2FibGtjaXBoZXJfY2FzdCgKKwlzdHJ1Y3QgY3J5cHRvX2FibGtjaXBoZXIgKnRmbSkKK3sKKwlyZXR1cm4gKHN0cnVjdCBjcnlwdGRfYWJsa2NpcGhlciAqKXRmbTsKK30KKworLyogYWxnX25hbWUgc2hvdWxkIGJlIGFsZ29yaXRobSB0byBiZSBjcnlwdGQtZWQgKi8KK3N0cnVjdCBjcnlwdGRfYWJsa2NpcGhlciAqY3J5cHRkX2FsbG9jX2FibGtjaXBoZXIoY29uc3QgY2hhciAqYWxnX25hbWUsCisJCQkJCQkgIHUzMiB0eXBlLCB1MzIgbWFzayk7CitzdHJ1Y3QgY3J5cHRvX2Jsa2NpcGhlciAqY3J5cHRkX2FibGtjaXBoZXJfY2hpbGQoc3RydWN0IGNyeXB0ZF9hYmxrY2lwaGVyICp0Zm0pOwordm9pZCBjcnlwdGRfZnJlZV9hYmxrY2lwaGVyKHN0cnVjdCBjcnlwdGRfYWJsa2NpcGhlciAqdGZtKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NyeXB0by9jcnlwdG9fd3EuaCBiL2luY2x1ZGUvY3J5cHRvL2NyeXB0b193cS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3ZDI1MmQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2NyeXB0by9jcnlwdG9fd3EuaApAQCAtMCwwICsxLDcgQEAKKyNpZm5kZWYgQ1JZUFRPX1dRX0gKKyNkZWZpbmUgQ1JZUFRPX1dRX0gKKworI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorCitleHRlcm4gc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmtjcnlwdG9fd3E7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY3J5cHRvL2hhc2guaCBiL2luY2x1ZGUvY3J5cHRvL2hhc2guaAppbmRleCBkNzk3ZTExLi5kNTZiYjcxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NyeXB0by9oYXNoLmgKKysrIGIvaW5jbHVkZS9jcnlwdG8vaGFzaC5oCkBAIC0yMzEsNiArMjMxLDExIEBACiAJcmV0dXJuIGNyeXB0b190Zm1fYWxnX2FsaWdubWFzayhjcnlwdG9fc2hhc2hfdGZtKHRmbSkpOwogfQogCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjcnlwdG9fc2hhc2hfYmxvY2tzaXplKHN0cnVjdCBjcnlwdG9fc2hhc2ggKnRmbSkKK3sKKwlyZXR1cm4gY3J5cHRvX3RmbV9hbGdfYmxvY2tzaXplKGNyeXB0b19zaGFzaF90Zm0odGZtKSk7Cit9CisKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHNoYXNoX2FsZyAqX19jcnlwdG9fc2hhc2hfYWxnKHN0cnVjdCBjcnlwdG9fYWxnICphbGcpCiB7CiAJcmV0dXJuIGNvbnRhaW5lcl9vZihhbGcsIHN0cnVjdCBzaGFzaF9hbGcsIGJhc2UpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jcnlwdG8vaW50ZXJuYWwvY29tcHJlc3MuaCBiL2luY2x1ZGUvY3J5cHRvL2ludGVybmFsL2NvbXByZXNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc4YTg4OAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvY3J5cHRvL2ludGVybmFsL2NvbXByZXNzLmgKQEAgLTAsMCArMSwyOCBAQAorLyoKKyAqIENvbXByZXNzOiBDb21wcmVzc2lvbiBhbGdvcml0aG1zIHVuZGVyIHRoZSBjcnlwdG9ncmFwaGljIEFQSS4KKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBTb255IENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uCisgKiBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2lmbmRlZiBfQ1JZUFRPX0lOVEVSTkFMX0NPTVBSRVNTX0gKKyNkZWZpbmUgX0NSWVBUT19JTlRFUk5BTF9DT01QUkVTU19ICisKKyNpbmNsdWRlIDxjcnlwdG8vY29tcHJlc3MuaD4KKworZXh0ZXJuIGludCBjcnlwdG9fcmVnaXN0ZXJfcGNvbXAoc3RydWN0IHBjb21wX2FsZyAqYWxnKTsKK2V4dGVybiBpbnQgY3J5cHRvX3VucmVnaXN0ZXJfcGNvbXAoc3RydWN0IHBjb21wX2FsZyAqYWxnKTsKKworI2VuZGlmCS8qIF9DUllQVE9fSU5URVJOQUxfQ09NUFJFU1NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtLmggYi9pbmNsdWRlL2RybS9kcm0uaAppbmRleCA4ZTc3MzU3Li43Y2I1MGJkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9kcm0uaAorKysgYi9pbmNsdWRlL2RybS9kcm0uaApAQCAtMzYsOCArMzYsNyBAQAogI2lmbmRlZiBfRFJNX0hfCiAjZGVmaW5lIF9EUk1fSF8KIAotI2lmIGRlZmluZWQoX19LRVJORUxfXykKLSNlbmRpZgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL2lvY3RsLmg+CQkvKiBGb3IgX0lPKiBtYWNyb3MgKi8KICNkZWZpbmUgRFJNX0lPQ1RMX05SKG4pCQlfSU9DX05SKG4pCiAjZGVmaW5lIERSTV9JT0NfVk9JRAkJX0lPQ19OT05FCkBAIC00OTcsOCArNDk2LDggQEAKICAqIFxzYSBkcm1Nb2Rlc2V0Q3RsKCkuCiAgKi8KIHN0cnVjdCBkcm1fbW9kZXNldF9jdGwgewotCXVpbnQzMl90IGNydGM7Ci0JdWludDMyX3QgY21kOworCV9fdTMyIGNydGM7CisJX191MzIgY21kOwogfTsKIAogLyoqCkBAIC01NzQsMjkgKzU3MywyOSBAQAogLyoqIERSTV9JT0NUTF9HRU1fQ0xPU0UgaW9jdGwgYXJndW1lbnQgdHlwZSAqLwogc3RydWN0IGRybV9nZW1fY2xvc2UgewogCS8qKiBIYW5kbGUgb2YgdGhlIG9iamVjdCB0byBiZSBjbG9zZWQuICovCi0JdWludDMyX3QgaGFuZGxlOwotCXVpbnQzMl90IHBhZDsKKwlfX3UzMiBoYW5kbGU7CisJX191MzIgcGFkOwogfTsKIAogLyoqIERSTV9JT0NUTF9HRU1fRkxJTksgaW9jdGwgYXJndW1lbnQgdHlwZSAqLwogc3RydWN0IGRybV9nZW1fZmxpbmsgewogCS8qKiBIYW5kbGUgZm9yIHRoZSBvYmplY3QgYmVpbmcgbmFtZWQgKi8KLQl1aW50MzJfdCBoYW5kbGU7CisJX191MzIgaGFuZGxlOwogCiAJLyoqIFJldHVybmVkIGdsb2JhbCBuYW1lICovCi0JdWludDMyX3QgbmFtZTsKKwlfX3UzMiBuYW1lOwogfTsKIAogLyoqIERSTV9JT0NUTF9HRU1fT1BFTiBpb2N0bCBhcmd1bWVudCB0eXBlICovCiBzdHJ1Y3QgZHJtX2dlbV9vcGVuIHsKIAkvKiogTmFtZSBvZiBvYmplY3QgYmVpbmcgb3BlbmVkICovCi0JdWludDMyX3QgbmFtZTsKKwlfX3UzMiBuYW1lOwogCiAJLyoqIFJldHVybmVkIGhhbmRsZSBmb3IgdGhlIG9iamVjdCAqLwotCXVpbnQzMl90IGhhbmRsZTsKKwlfX3UzMiBoYW5kbGU7CiAKIAkvKiogUmV0dXJuZWQgc2l6ZSBvZiB0aGUgb2JqZWN0ICovCi0JdWludDY0X3Qgc2l6ZTsKKwlfX3U2NCBzaXplOwogfTsKIAogI2luY2x1ZGUgImRybV9tb2RlLmgiCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fbW9kZS5oIGIvaW5jbHVkZS9kcm0vZHJtX21vZGUuaAppbmRleCA2MDFkMmJkLi5hZTMwNGNjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9kcm1fbW9kZS5oCisrKyBiL2luY2x1ZGUvZHJtL2RybV9tb2RlLmgKQEAgLTI3LDExICsyNyw4IEBACiAjaWZuZGVmIF9EUk1fTU9ERV9ICiAjZGVmaW5lIF9EUk1fTU9ERV9ICiAKLSNpZiAhZGVmaW5lZChfX0tFUk5FTF9fKSAmJiAhZGVmaW5lZChfS0VSTkVMKQotI2luY2x1ZGUgPHN0ZGludC5oPgotI2Vsc2UKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNlbmRpZgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKICNkZWZpbmUgRFJNX0RJU1BMQVlfSU5GT19MRU4JMzIKICNkZWZpbmUgRFJNX0NPTk5FQ1RPUl9OQU1FX0xFTgkzMgpAQCAtODEsNDEgKzc4LDQxIEBACiAjZGVmaW5lIERSTV9NT0RFX0RJVEhFUklOR19PTgkxCiAKIHN0cnVjdCBkcm1fbW9kZV9tb2RlaW5mbyB7Ci0JdWludDMyX3QgY2xvY2s7Ci0JdWludDE2X3QgaGRpc3BsYXksIGhzeW5jX3N0YXJ0LCBoc3luY19lbmQsIGh0b3RhbCwgaHNrZXc7Ci0JdWludDE2X3QgdmRpc3BsYXksIHZzeW5jX3N0YXJ0LCB2c3luY19lbmQsIHZ0b3RhbCwgdnNjYW47CisJX191MzIgY2xvY2s7CisJX191MTYgaGRpc3BsYXksIGhzeW5jX3N0YXJ0LCBoc3luY19lbmQsIGh0b3RhbCwgaHNrZXc7CisJX191MTYgdmRpc3BsYXksIHZzeW5jX3N0YXJ0LCB2c3luY19lbmQsIHZ0b3RhbCwgdnNjYW47CiAKLQl1aW50MzJfdCB2cmVmcmVzaDsgLyogdmVydGljYWwgcmVmcmVzaCAqIDEwMDAgKi8KKwlfX3UzMiB2cmVmcmVzaDsgLyogdmVydGljYWwgcmVmcmVzaCAqIDEwMDAgKi8KIAotCXVpbnQzMl90IGZsYWdzOwotCXVpbnQzMl90IHR5cGU7CisJX191MzIgZmxhZ3M7CisJX191MzIgdHlwZTsKIAljaGFyIG5hbWVbRFJNX0RJU1BMQVlfTU9ERV9MRU5dOwogfTsKIAogc3RydWN0IGRybV9tb2RlX2NhcmRfcmVzIHsKLQl1aW50NjRfdCBmYl9pZF9wdHI7Ci0JdWludDY0X3QgY3J0Y19pZF9wdHI7Ci0JdWludDY0X3QgY29ubmVjdG9yX2lkX3B0cjsKLQl1aW50NjRfdCBlbmNvZGVyX2lkX3B0cjsKLQl1aW50MzJfdCBjb3VudF9mYnM7Ci0JdWludDMyX3QgY291bnRfY3J0Y3M7Ci0JdWludDMyX3QgY291bnRfY29ubmVjdG9yczsKLQl1aW50MzJfdCBjb3VudF9lbmNvZGVyczsKLQl1aW50MzJfdCBtaW5fd2lkdGgsIG1heF93aWR0aDsKLQl1aW50MzJfdCBtaW5faGVpZ2h0LCBtYXhfaGVpZ2h0OworCV9fdTY0IGZiX2lkX3B0cjsKKwlfX3U2NCBjcnRjX2lkX3B0cjsKKwlfX3U2NCBjb25uZWN0b3JfaWRfcHRyOworCV9fdTY0IGVuY29kZXJfaWRfcHRyOworCV9fdTMyIGNvdW50X2ZiczsKKwlfX3UzMiBjb3VudF9jcnRjczsKKwlfX3UzMiBjb3VudF9jb25uZWN0b3JzOworCV9fdTMyIGNvdW50X2VuY29kZXJzOworCV9fdTMyIG1pbl93aWR0aCwgbWF4X3dpZHRoOworCV9fdTMyIG1pbl9oZWlnaHQsIG1heF9oZWlnaHQ7CiB9OwogCiBzdHJ1Y3QgZHJtX21vZGVfY3J0YyB7Ci0JdWludDY0X3Qgc2V0X2Nvbm5lY3RvcnNfcHRyOwotCXVpbnQzMl90IGNvdW50X2Nvbm5lY3RvcnM7CisJX191NjQgc2V0X2Nvbm5lY3RvcnNfcHRyOworCV9fdTMyIGNvdW50X2Nvbm5lY3RvcnM7CiAKLQl1aW50MzJfdCBjcnRjX2lkOyAvKio8IElkICovCi0JdWludDMyX3QgZmJfaWQ7IC8qKjwgSWQgb2YgZnJhbWVidWZmZXIgKi8KKwlfX3UzMiBjcnRjX2lkOyAvKio8IElkICovCisJX191MzIgZmJfaWQ7IC8qKjwgSWQgb2YgZnJhbWVidWZmZXIgKi8KIAotCXVpbnQzMl90IHgsIHk7IC8qKjwgUG9zaXRpb24gb24gdGhlIGZyYW1ldWZmZXIgKi8KKwlfX3UzMiB4LCB5OyAvKio8IFBvc2l0aW9uIG9uIHRoZSBmcmFtZXVmZmVyICovCiAKLQl1aW50MzJfdCBnYW1tYV9zaXplOwotCXVpbnQzMl90IG1vZGVfdmFsaWQ7CisJX191MzIgZ2FtbWFfc2l6ZTsKKwlfX3UzMiBtb2RlX3ZhbGlkOwogCXN0cnVjdCBkcm1fbW9kZV9tb2RlaW5mbyBtb2RlOwogfTsKIApAQCAtMTI2LDEzICsxMjMsMTMgQEAKICNkZWZpbmUgRFJNX01PREVfRU5DT0RFUl9UVkRBQwk0CiAKIHN0cnVjdCBkcm1fbW9kZV9nZXRfZW5jb2RlciB7Ci0JdWludDMyX3QgZW5jb2Rlcl9pZDsKLQl1aW50MzJfdCBlbmNvZGVyX3R5cGU7CisJX191MzIgZW5jb2Rlcl9pZDsKKwlfX3UzMiBlbmNvZGVyX3R5cGU7CiAKLQl1aW50MzJfdCBjcnRjX2lkOyAvKio8IElkIG9mIGNydGMgKi8KKwlfX3UzMiBjcnRjX2lkOyAvKio8IElkIG9mIGNydGMgKi8KIAotCXVpbnQzMl90IHBvc3NpYmxlX2NydGNzOwotCXVpbnQzMl90IHBvc3NpYmxlX2Nsb25lczsKKwlfX3UzMiBwb3NzaWJsZV9jcnRjczsKKwlfX3UzMiBwb3NzaWJsZV9jbG9uZXM7CiB9OwogCiAvKiBUaGlzIGlzIGZvciBjb25uZWN0b3JzIHdpdGggbXVsdGlwbGUgc2lnbmFsIHR5cGVzLiAqLwpAQCAtMTYxLDIzICsxNTgsMjMgQEAKIAogc3RydWN0IGRybV9tb2RlX2dldF9jb25uZWN0b3IgewogCi0JdWludDY0X3QgZW5jb2RlcnNfcHRyOwotCXVpbnQ2NF90IG1vZGVzX3B0cjsKLQl1aW50NjRfdCBwcm9wc19wdHI7Ci0JdWludDY0X3QgcHJvcF92YWx1ZXNfcHRyOworCV9fdTY0IGVuY29kZXJzX3B0cjsKKwlfX3U2NCBtb2Rlc19wdHI7CisJX191NjQgcHJvcHNfcHRyOworCV9fdTY0IHByb3BfdmFsdWVzX3B0cjsKIAotCXVpbnQzMl90IGNvdW50X21vZGVzOwotCXVpbnQzMl90IGNvdW50X3Byb3BzOwotCXVpbnQzMl90IGNvdW50X2VuY29kZXJzOworCV9fdTMyIGNvdW50X21vZGVzOworCV9fdTMyIGNvdW50X3Byb3BzOworCV9fdTMyIGNvdW50X2VuY29kZXJzOwogCi0JdWludDMyX3QgZW5jb2Rlcl9pZDsgLyoqPCBDdXJyZW50IEVuY29kZXIgKi8KLQl1aW50MzJfdCBjb25uZWN0b3JfaWQ7IC8qKjwgSWQgKi8KLQl1aW50MzJfdCBjb25uZWN0b3JfdHlwZTsKLQl1aW50MzJfdCBjb25uZWN0b3JfdHlwZV9pZDsKKwlfX3UzMiBlbmNvZGVyX2lkOyAvKio8IEN1cnJlbnQgRW5jb2RlciAqLworCV9fdTMyIGNvbm5lY3Rvcl9pZDsgLyoqPCBJZCAqLworCV9fdTMyIGNvbm5lY3Rvcl90eXBlOworCV9fdTMyIGNvbm5lY3Rvcl90eXBlX2lkOwogCi0JdWludDMyX3QgY29ubmVjdGlvbjsKLQl1aW50MzJfdCBtbV93aWR0aCwgbW1faGVpZ2h0OyAvKio8IEh4VyBpbiBtaWxsaW1ldGVycyAqLwotCXVpbnQzMl90IHN1YnBpeGVsOworCV9fdTMyIGNvbm5lY3Rpb247CisJX191MzIgbW1fd2lkdGgsIG1tX2hlaWdodDsgLyoqPCBIeFcgaW4gbWlsbGltZXRlcnMgKi8KKwlfX3UzMiBzdWJwaXhlbDsKIH07CiAKICNkZWZpbmUgRFJNX01PREVfUFJPUF9QRU5ESU5HCSgxPDwwKQpAQCAtMTg3LDQ2ICsxODQsNDYgQEAKICNkZWZpbmUgRFJNX01PREVfUFJPUF9CTE9CCSgxPDw0KQogCiBzdHJ1Y3QgZHJtX21vZGVfcHJvcGVydHlfZW51bSB7Ci0JdWludDY0X3QgdmFsdWU7CisJX191NjQgdmFsdWU7CiAJY2hhciBuYW1lW0RSTV9QUk9QX05BTUVfTEVOXTsKIH07CiAKIHN0cnVjdCBkcm1fbW9kZV9nZXRfcHJvcGVydHkgewotCXVpbnQ2NF90IHZhbHVlc19wdHI7IC8qIHZhbHVlcyBhbmQgYmxvYiBsZW5ndGhzICovCi0JdWludDY0X3QgZW51bV9ibG9iX3B0cjsgLyogZW51bSBhbmQgYmxvYiBpZCBwdHJzICovCisJX191NjQgdmFsdWVzX3B0cjsgLyogdmFsdWVzIGFuZCBibG9iIGxlbmd0aHMgKi8KKwlfX3U2NCBlbnVtX2Jsb2JfcHRyOyAvKiBlbnVtIGFuZCBibG9iIGlkIHB0cnMgKi8KIAotCXVpbnQzMl90IHByb3BfaWQ7Ci0JdWludDMyX3QgZmxhZ3M7CisJX191MzIgcHJvcF9pZDsKKwlfX3UzMiBmbGFnczsKIAljaGFyIG5hbWVbRFJNX1BST1BfTkFNRV9MRU5dOwogCi0JdWludDMyX3QgY291bnRfdmFsdWVzOwotCXVpbnQzMl90IGNvdW50X2VudW1fYmxvYnM7CisJX191MzIgY291bnRfdmFsdWVzOworCV9fdTMyIGNvdW50X2VudW1fYmxvYnM7CiB9OwogCiBzdHJ1Y3QgZHJtX21vZGVfY29ubmVjdG9yX3NldF9wcm9wZXJ0eSB7Ci0JdWludDY0X3QgdmFsdWU7Ci0JdWludDMyX3QgcHJvcF9pZDsKLQl1aW50MzJfdCBjb25uZWN0b3JfaWQ7CisJX191NjQgdmFsdWU7CisJX191MzIgcHJvcF9pZDsKKwlfX3UzMiBjb25uZWN0b3JfaWQ7CiB9OwogCiBzdHJ1Y3QgZHJtX21vZGVfZ2V0X2Jsb2IgewotCXVpbnQzMl90IGJsb2JfaWQ7Ci0JdWludDMyX3QgbGVuZ3RoOwotCXVpbnQ2NF90IGRhdGE7CisJX191MzIgYmxvYl9pZDsKKwlfX3UzMiBsZW5ndGg7CisJX191NjQgZGF0YTsKIH07CiAKIHN0cnVjdCBkcm1fbW9kZV9mYl9jbWQgewotCXVpbnQzMl90IGZiX2lkOwotCXVpbnQzMl90IHdpZHRoLCBoZWlnaHQ7Ci0JdWludDMyX3QgcGl0Y2g7Ci0JdWludDMyX3QgYnBwOwotCXVpbnQzMl90IGRlcHRoOworCV9fdTMyIGZiX2lkOworCV9fdTMyIHdpZHRoLCBoZWlnaHQ7CisJX191MzIgcGl0Y2g7CisJX191MzIgYnBwOworCV9fdTMyIGRlcHRoOwogCS8qIGRyaXZlciBzcGVjaWZpYyBoYW5kbGUgKi8KLQl1aW50MzJfdCBoYW5kbGU7CisJX191MzIgaGFuZGxlOwogfTsKIAogc3RydWN0IGRybV9tb2RlX21vZGVfY21kIHsKLQl1aW50MzJfdCBjb25uZWN0b3JfaWQ7CisJX191MzIgY29ubmVjdG9yX2lkOwogCXN0cnVjdCBkcm1fbW9kZV9tb2RlaW5mbyBtb2RlOwogfTsKIApAQCAtMjQ4LDI0ICsyNDUsMjQgQEAKICAqICAgIHkKICAqLwogc3RydWN0IGRybV9tb2RlX2N1cnNvciB7Ci0JdWludDMyX3QgZmxhZ3M7Ci0JdWludDMyX3QgY3J0Y19pZDsKLQlpbnQzMl90IHg7Ci0JaW50MzJfdCB5OwotCXVpbnQzMl90IHdpZHRoOwotCXVpbnQzMl90IGhlaWdodDsKKwlfX3UzMiBmbGFnczsKKwlfX3UzMiBjcnRjX2lkOworCV9fczMyIHg7CisJX19zMzIgeTsKKwlfX3UzMiB3aWR0aDsKKwlfX3UzMiBoZWlnaHQ7CiAJLyogZHJpdmVyIHNwZWNpZmljIGhhbmRsZSAqLwotCXVpbnQzMl90IGhhbmRsZTsKKwlfX3UzMiBoYW5kbGU7CiB9OwogCiBzdHJ1Y3QgZHJtX21vZGVfY3J0Y19sdXQgewotCXVpbnQzMl90IGNydGNfaWQ7Ci0JdWludDMyX3QgZ2FtbWFfc2l6ZTsKKwlfX3UzMiBjcnRjX2lkOworCV9fdTMyIGdhbW1hX3NpemU7CiAKIAkvKiBwb2ludGVycyB0byBhcnJheXMgKi8KLQl1aW50NjRfdCByZWQ7Ci0JdWludDY0X3QgZ3JlZW47Ci0JdWludDY0X3QgYmx1ZTsKKwlfX3U2NCByZWQ7CisJX191NjQgZ3JlZW47CisJX191NjQgYmx1ZTsKIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vaTkxNV9kcm0uaCBiL2luY2x1ZGUvZHJtL2k5MTVfZHJtLmgKaW5kZXggOTEyY2Q1Mi4uNjdlMzM1MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vaTkxNV9kcm0uaAorKysgYi9pbmNsdWRlL2RybS9pOTE1X2RybS5oCkBAIC0zMCw3ICszMCw3IEBACiAvKiBQbGVhc2Ugbm90ZSB0aGF0IG1vZGlmaWNhdGlvbnMgdG8gYWxsIHN0cnVjdHMgZGVmaW5lZCBoZXJlIGFyZQogICogc3ViamVjdCB0byBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBjb25zdHJhaW50cy4KICAqLwotCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlICJkcm0uaCIKIAogLyogRWFjaCByZWdpb24gaXMgYSBtaW5pbXVtIG9mIDE2aywgYW5kIHRoZXJlIGFyZSBhdCBtb3N0IDI1NSBvZiB0aGVtLgpAQCAtMTE2LDE1ICsxMTYsMTUgQEAKIAogCS8qIGZpbGwgb3V0IHNvbWUgc3BhY2UgZm9yIG9sZCB1c2Vyc3BhY2UgdHJpcGxlIGJ1ZmZlciAqLwogCWRybV9oYW5kbGVfdCB1bnVzZWRfaGFuZGxlOwotCXVpbnQzMl90IHVudXNlZDEsIHVudXNlZDIsIHVudXNlZDM7CisJX191MzIgdW51c2VkMSwgdW51c2VkMiwgdW51c2VkMzsKIAogCS8qIGJ1ZmZlciBvYmplY3QgaGFuZGxlcyBmb3Igc3RhdGljIGJ1ZmZlcnMuIE1heSBjaGFuZ2UKIAkgKiBvdmVyIHRoZSBsaWZldGltZSBvZiB0aGUgY2xpZW50LgogCSAqLwotCXVpbnQzMl90IGZyb250X2JvX2hhbmRsZTsKLQl1aW50MzJfdCBiYWNrX2JvX2hhbmRsZTsKLQl1aW50MzJfdCB1bnVzZWRfYm9faGFuZGxlOwotCXVpbnQzMl90IGRlcHRoX2JvX2hhbmRsZTsKKwlfX3UzMiBmcm9udF9ib19oYW5kbGU7CisJX191MzIgYmFja19ib19oYW5kbGU7CisJX191MzIgdW51c2VkX2JvX2hhbmRsZTsKKwlfX3UzMiBkZXB0aF9ib19oYW5kbGU7CiAKIH0gZHJtX2k5MTVfc2FyZWFfdDsKIApAQCAtMzI3LDcgKzMyNyw3IEBACiB9IGRybV9pOTE1X3ZibGFua19zd2FwX3Q7CiAKIHR5cGVkZWYgc3RydWN0IGRybV9pOTE1X2h3c19hZGRyIHsKLQl1aW50NjRfdCBhZGRyOworCV9fdTY0IGFkZHI7CiB9IGRybV9pOTE1X2h3c19hZGRyX3Q7CiAKIHN0cnVjdCBkcm1faTkxNV9nZW1faW5pdCB7CkBAIC0zMzUsMTIgKzMzNSwxMiBAQAogCSAqIEJlZ2lubmluZyBvZmZzZXQgaW4gdGhlIEdUVCB0byBiZSBtYW5hZ2VkIGJ5IHRoZSBEUk0gbWVtb3J5CiAJICogbWFuYWdlci4KIAkgKi8KLQl1aW50NjRfdCBndHRfc3RhcnQ7CisJX191NjQgZ3R0X3N0YXJ0OwogCS8qKgogCSAqIEVuZGluZyBvZmZzZXQgaW4gdGhlIEdUVCB0byBiZSBtYW5hZ2VkIGJ5IHRoZSBEUk0gbWVtb3J5CiAJICogbWFuYWdlci4KIAkgKi8KLQl1aW50NjRfdCBndHRfZW5kOworCV9fdTY0IGd0dF9lbmQ7CiB9OwogCiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NyZWF0ZSB7CkBAIC0zNDksOTQgKzM0OSw5NCBAQAogCSAqCiAJICogVGhlIChwYWdlLWFsaWduZWQpIGFsbG9jYXRlZCBzaXplIGZvciB0aGUgb2JqZWN0IHdpbGwgYmUgcmV0dXJuZWQuCiAJICovCi0JdWludDY0X3Qgc2l6ZTsKKwlfX3U2NCBzaXplOwogCS8qKgogCSAqIFJldHVybmVkIGhhbmRsZSBmb3IgdGhlIG9iamVjdC4KIAkgKgogCSAqIE9iamVjdCBoYW5kbGVzIGFyZSBub256ZXJvLgogCSAqLwotCXVpbnQzMl90IGhhbmRsZTsKLQl1aW50MzJfdCBwYWQ7CisJX191MzIgaGFuZGxlOworCV9fdTMyIHBhZDsKIH07CiAKIHN0cnVjdCBkcm1faTkxNV9nZW1fcHJlYWQgewogCS8qKiBIYW5kbGUgZm9yIHRoZSBvYmplY3QgYmVpbmcgcmVhZC4gKi8KLQl1aW50MzJfdCBoYW5kbGU7Ci0JdWludDMyX3QgcGFkOworCV9fdTMyIGhhbmRsZTsKKwlfX3UzMiBwYWQ7CiAJLyoqIE9mZnNldCBpbnRvIHRoZSBvYmplY3QgdG8gcmVhZCBmcm9tICovCi0JdWludDY0X3Qgb2Zmc2V0OworCV9fdTY0IG9mZnNldDsKIAkvKiogTGVuZ3RoIG9mIGRhdGEgdG8gcmVhZCAqLwotCXVpbnQ2NF90IHNpemU7CisJX191NjQgc2l6ZTsKIAkvKioKIAkgKiBQb2ludGVyIHRvIHdyaXRlIHRoZSBkYXRhIGludG8uCiAJICoKIAkgKiBUaGlzIGlzIGEgZml4ZWQtc2l6ZSB0eXBlIGZvciAzMi82NCBjb21wYXRpYmlsaXR5LgogCSAqLwotCXVpbnQ2NF90IGRhdGFfcHRyOworCV9fdTY0IGRhdGFfcHRyOwogfTsKIAogc3RydWN0IGRybV9pOTE1X2dlbV9wd3JpdGUgewogCS8qKiBIYW5kbGUgZm9yIHRoZSBvYmplY3QgYmVpbmcgd3JpdHRlbiB0by4gKi8KLQl1aW50MzJfdCBoYW5kbGU7Ci0JdWludDMyX3QgcGFkOworCV9fdTMyIGhhbmRsZTsKKwlfX3UzMiBwYWQ7CiAJLyoqIE9mZnNldCBpbnRvIHRoZSBvYmplY3QgdG8gd3JpdGUgdG8gKi8KLQl1aW50NjRfdCBvZmZzZXQ7CisJX191NjQgb2Zmc2V0OwogCS8qKiBMZW5ndGggb2YgZGF0YSB0byB3cml0ZSAqLwotCXVpbnQ2NF90IHNpemU7CisJX191NjQgc2l6ZTsKIAkvKioKIAkgKiBQb2ludGVyIHRvIHJlYWQgdGhlIGRhdGEgZnJvbS4KIAkgKgogCSAqIFRoaXMgaXMgYSBmaXhlZC1zaXplIHR5cGUgZm9yIDMyLzY0IGNvbXBhdGliaWxpdHkuCiAJICovCi0JdWludDY0X3QgZGF0YV9wdHI7CisJX191NjQgZGF0YV9wdHI7CiB9OwogCiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX21tYXAgewogCS8qKiBIYW5kbGUgZm9yIHRoZSBvYmplY3QgYmVpbmcgbWFwcGVkLiAqLwotCXVpbnQzMl90IGhhbmRsZTsKLQl1aW50MzJfdCBwYWQ7CisJX191MzIgaGFuZGxlOworCV9fdTMyIHBhZDsKIAkvKiogT2Zmc2V0IGluIHRoZSBvYmplY3QgdG8gbWFwLiAqLwotCXVpbnQ2NF90IG9mZnNldDsKKwlfX3U2NCBvZmZzZXQ7CiAJLyoqCiAJICogTGVuZ3RoIG9mIGRhdGEgdG8gbWFwLgogCSAqCiAJICogVGhlIHZhbHVlIHdpbGwgYmUgcGFnZS1hbGlnbmVkLgogCSAqLwotCXVpbnQ2NF90IHNpemU7CisJX191NjQgc2l6ZTsKIAkvKioKIAkgKiBSZXR1cm5lZCBwb2ludGVyIHRoZSBkYXRhIHdhcyBtYXBwZWQgYXQuCiAJICoKIAkgKiBUaGlzIGlzIGEgZml4ZWQtc2l6ZSB0eXBlIGZvciAzMi82NCBjb21wYXRpYmlsaXR5LgogCSAqLwotCXVpbnQ2NF90IGFkZHJfcHRyOworCV9fdTY0IGFkZHJfcHRyOwogfTsKIAogc3RydWN0IGRybV9pOTE1X2dlbV9tbWFwX2d0dCB7CiAJLyoqIEhhbmRsZSBmb3IgdGhlIG9iamVjdCBiZWluZyBtYXBwZWQuICovCi0JdWludDMyX3QgaGFuZGxlOwotCXVpbnQzMl90IHBhZDsKKwlfX3UzMiBoYW5kbGU7CisJX191MzIgcGFkOwogCS8qKgogCSAqIEZha2Ugb2Zmc2V0IHRvIHVzZSBmb3Igc3Vic2VxdWVudCBtbWFwIGNhbGwKIAkgKgogCSAqIFRoaXMgaXMgYSBmaXhlZC1zaXplIHR5cGUgZm9yIDMyLzY0IGNvbXBhdGliaWxpdHkuCiAJICovCi0JdWludDY0X3Qgb2Zmc2V0OworCV9fdTY0IG9mZnNldDsKIH07CiAKIHN0cnVjdCBkcm1faTkxNV9nZW1fc2V0X2RvbWFpbiB7CiAJLyoqIEhhbmRsZSBmb3IgdGhlIG9iamVjdCAqLwotCXVpbnQzMl90IGhhbmRsZTsKKwlfX3UzMiBoYW5kbGU7CiAKIAkvKiogTmV3IHJlYWQgZG9tYWlucyAqLwotCXVpbnQzMl90IHJlYWRfZG9tYWluczsKKwlfX3UzMiByZWFkX2RvbWFpbnM7CiAKIAkvKiogTmV3IHdyaXRlIGRvbWFpbiAqLwotCXVpbnQzMl90IHdyaXRlX2RvbWFpbjsKKwlfX3UzMiB3cml0ZV9kb21haW47CiB9OwogCiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3N3X2ZpbmlzaCB7CiAJLyoqIEhhbmRsZSBmb3IgdGhlIG9iamVjdCAqLwotCXVpbnQzMl90IGhhbmRsZTsKKwlfX3UzMiBoYW5kbGU7CiB9OwogCiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgewpAQCAtNDQ4LDE2ICs0NDgsMTYgQEAKIAkgKiBhIHJlbG9jYXRpb24gbGlzdCBmb3Igc3RhdGUgYnVmZmVycyBhbmQgbm90IHJlLXdyaXRlIGl0IHBlcgogCSAqIGV4ZWMgdXNpbmcgdGhlIGJ1ZmZlci4KIAkgKi8KLQl1aW50MzJfdCB0YXJnZXRfaGFuZGxlOworCV9fdTMyIHRhcmdldF9oYW5kbGU7CiAKIAkvKioKIAkgKiBWYWx1ZSB0byBiZSBhZGRlZCB0byB0aGUgb2Zmc2V0IG9mIHRoZSB0YXJnZXQgYnVmZmVyIHRvIG1ha2UgdXAKIAkgKiB0aGUgcmVsb2NhdGlvbiBlbnRyeS4KIAkgKi8KLQl1aW50MzJfdCBkZWx0YTsKKwlfX3UzMiBkZWx0YTsKIAogCS8qKiBPZmZzZXQgaW4gdGhlIGJ1ZmZlciB0aGUgcmVsb2NhdGlvbiBlbnRyeSB3aWxsIGJlIHdyaXR0ZW4gaW50byAqLwotCXVpbnQ2NF90IG9mZnNldDsKKwlfX3U2NCBvZmZzZXQ7CiAKIAkvKioKIAkgKiBPZmZzZXQgdmFsdWUgb2YgdGhlIHRhcmdldCBidWZmZXIgdGhhdCB0aGUgcmVsb2NhdGlvbiBlbnRyeSB3YXMgbGFzdApAQCAtNDY3LDEyICs0NjcsMTIgQEAKIAkgKiBhbmQgd3JpdGluZyB0aGUgcmVsb2NhdGlvbi4gIFRoaXMgdmFsdWUgaXMgd3JpdHRlbiBiYWNrIG91dCBieQogCSAqIHRoZSBleGVjYnVmZmVyIGlvY3RsIHdoZW4gdGhlIHJlbG9jYXRpb24gaXMgd3JpdHRlbi4KIAkgKi8KLQl1aW50NjRfdCBwcmVzdW1lZF9vZmZzZXQ7CisJX191NjQgcHJlc3VtZWRfb2Zmc2V0OwogCiAJLyoqCiAJICogVGFyZ2V0IG1lbW9yeSBkb21haW5zIHJlYWQgYnkgdGhpcyBvcGVyYXRpb24uCiAJICovCi0JdWludDMyX3QgcmVhZF9kb21haW5zOworCV9fdTMyIHJlYWRfZG9tYWluczsKIAogCS8qKgogCSAqIFRhcmdldCBtZW1vcnkgZG9tYWlucyB3cml0dGVuIGJ5IHRoaXMgb3BlcmF0aW9uLgpAQCAtNDgxLDcgKzQ4MSw3IEBACiAJICogZXhlY2J1ZmZlciBvcGVyYXRpb24sIHNvIHRoYXQgd2hlcmUgdGhlcmUgYXJlIGNvbmZsaWN0cywKIAkgKiB0aGUgYXBwbGljYXRpb24gd2lsbCBnZXQgLUVJTlZBTCBiYWNrLgogCSAqLwotCXVpbnQzMl90IHdyaXRlX2RvbWFpbjsKKwlfX3UzMiB3cml0ZV9kb21haW47CiB9OwogCiAvKiogQHsKQEAgLTUxMiwyNCArNTEyLDI0IEBACiAJICogVXNlcidzIGhhbmRsZSBmb3IgYSBidWZmZXIgdG8gYmUgYm91bmQgaW50byB0aGUgR1RUIGZvciB0aGlzCiAJICogb3BlcmF0aW9uLgogCSAqLwotCXVpbnQzMl90IGhhbmRsZTsKKwlfX3UzMiBoYW5kbGU7CiAKIAkvKiogTnVtYmVyIG9mIHJlbG9jYXRpb25zIHRvIGJlIHBlcmZvcm1lZCBvbiB0aGlzIGJ1ZmZlciAqLwotCXVpbnQzMl90IHJlbG9jYXRpb25fY291bnQ7CisJX191MzIgcmVsb2NhdGlvbl9jb3VudDsKIAkvKioKIAkgKiBQb2ludGVyIHRvIGFycmF5IG9mIHN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSBjb250YWluaW5nCiAJICogdGhlIHJlbG9jYXRpb25zIHRvIGJlIHBlcmZvcm1lZCBpbiB0aGlzIGJ1ZmZlci4KIAkgKi8KLQl1aW50NjRfdCByZWxvY3NfcHRyOworCV9fdTY0IHJlbG9jc19wdHI7CiAKIAkvKiogUmVxdWlyZWQgYWxpZ25tZW50IGluIGdyYXBoaWNzIGFwZXJ0dXJlICovCi0JdWludDY0X3QgYWxpZ25tZW50OworCV9fdTY0IGFsaWdubWVudDsKIAogCS8qKgogCSAqIFJldHVybmVkIHZhbHVlIG9mIHRoZSB1cGRhdGVkIG9mZnNldCBvZiB0aGUgb2JqZWN0LCBmb3IgZnV0dXJlCiAJICogcHJlc3VtZWRfb2Zmc2V0IHdyaXRlcy4KIAkgKi8KLQl1aW50NjRfdCBvZmZzZXQ7CisJX191NjQgb2Zmc2V0OwogfTsKIAogc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyIHsKQEAgLTU0Myw0NCArNTQzLDQ0IEBACiAJICogYSBidWZmZXIgaXMgcGVyZm9ybWluZyByZWZlciB0byBidWZmZXJzIHRoYXQgaGF2ZSBhbHJlYWR5IGFwcGVhcmVkCiAJICogaW4gdGhlIHZhbGlkYXRlIGxpc3QuCiAJICovCi0JdWludDY0X3QgYnVmZmVyc19wdHI7Ci0JdWludDMyX3QgYnVmZmVyX2NvdW50OworCV9fdTY0IGJ1ZmZlcnNfcHRyOworCV9fdTMyIGJ1ZmZlcl9jb3VudDsKIAogCS8qKiBPZmZzZXQgaW4gdGhlIGJhdGNoYnVmZmVyIHRvIHN0YXJ0IGV4ZWN1dGlvbiBmcm9tLiAqLwotCXVpbnQzMl90IGJhdGNoX3N0YXJ0X29mZnNldDsKKwlfX3UzMiBiYXRjaF9zdGFydF9vZmZzZXQ7CiAJLyoqIEJ5dGVzIHVzZWQgaW4gYmF0Y2hidWZmZXIgZnJvbSBiYXRjaF9zdGFydF9vZmZzZXQgKi8KLQl1aW50MzJfdCBiYXRjaF9sZW47Ci0JdWludDMyX3QgRFIxOwotCXVpbnQzMl90IERSNDsKLQl1aW50MzJfdCBudW1fY2xpcHJlY3RzOworCV9fdTMyIGJhdGNoX2xlbjsKKwlfX3UzMiBEUjE7CisJX191MzIgRFI0OworCV9fdTMyIG51bV9jbGlwcmVjdHM7CiAJLyoqIFRoaXMgaXMgYSBzdHJ1Y3QgZHJtX2NsaXBfcmVjdCAqY2xpcHJlY3RzICovCi0JdWludDY0X3QgY2xpcHJlY3RzX3B0cjsKKwlfX3U2NCBjbGlwcmVjdHNfcHRyOwogfTsKIAogc3RydWN0IGRybV9pOTE1X2dlbV9waW4gewogCS8qKiBIYW5kbGUgb2YgdGhlIGJ1ZmZlciB0byBiZSBwaW5uZWQuICovCi0JdWludDMyX3QgaGFuZGxlOwotCXVpbnQzMl90IHBhZDsKKwlfX3UzMiBoYW5kbGU7CisJX191MzIgcGFkOwogCiAJLyoqIGFsaWdubWVudCByZXF1aXJlZCB3aXRoaW4gdGhlIGFwZXJ0dXJlICovCi0JdWludDY0X3QgYWxpZ25tZW50OworCV9fdTY0IGFsaWdubWVudDsKIAogCS8qKiBSZXR1cm5lZCBHVFQgb2Zmc2V0IG9mIHRoZSBidWZmZXIuICovCi0JdWludDY0X3Qgb2Zmc2V0OworCV9fdTY0IG9mZnNldDsKIH07CiAKIHN0cnVjdCBkcm1faTkxNV9nZW1fdW5waW4gewogCS8qKiBIYW5kbGUgb2YgdGhlIGJ1ZmZlciB0byBiZSB1bnBpbm5lZC4gKi8KLQl1aW50MzJfdCBoYW5kbGU7Ci0JdWludDMyX3QgcGFkOworCV9fdTMyIGhhbmRsZTsKKwlfX3UzMiBwYWQ7CiB9OwogCiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2J1c3kgewogCS8qKiBIYW5kbGUgb2YgdGhlIGJ1ZmZlciB0byBjaGVjayBmb3IgYnVzeSAqLwotCXVpbnQzMl90IGhhbmRsZTsKKwlfX3UzMiBoYW5kbGU7CiAKIAkvKiogUmV0dXJuIGJ1c3kgc3RhdHVzICgxIGlmIGJ1c3ksIDAgaWYgaWRsZSkgKi8KLQl1aW50MzJfdCBidXN5OworCV9fdTMyIGJ1c3k7CiB9OwogCiAjZGVmaW5lIEk5MTVfVElMSU5HX05PTkUJMApAQCAtNTk3LDcgKzU5Nyw3IEBACiAKIHN0cnVjdCBkcm1faTkxNV9nZW1fc2V0X3RpbGluZyB7CiAJLyoqIEhhbmRsZSBvZiB0aGUgYnVmZmVyIHRvIGhhdmUgaXRzIHRpbGluZyBzdGF0ZSB1cGRhdGVkICovCi0JdWludDMyX3QgaGFuZGxlOworCV9fdTMyIGhhbmRsZTsKIAogCS8qKgogCSAqIFRpbGluZyBtb2RlIGZvciB0aGUgb2JqZWN0IChJOTE1X1RJTElOR19OT05FLCBJOTE1X1RJTElOR19YLApAQCAtNjExLDQ3ICs2MTEsNDcgQEAKIAkgKgogCSAqIEJ1ZmZlciBjb250ZW50cyBiZWNvbWUgdW5kZWZpbmVkIHdoZW4gY2hhbmdpbmcgdGlsaW5nX21vZGUuCiAJICovCi0JdWludDMyX3QgdGlsaW5nX21vZGU7CisJX191MzIgdGlsaW5nX21vZGU7CiAKIAkvKioKIAkgKiBTdHJpZGUgaW4gYnl0ZXMgZm9yIHRoZSBvYmplY3Qgd2hlbiBpbiBJOTE1X1RJTElOR19YIG9yCiAJICogSTkxNV9USUxJTkdfWS4KIAkgKi8KLQl1aW50MzJfdCBzdHJpZGU7CisJX191MzIgc3RyaWRlOwogCiAJLyoqCiAJICogUmV0dXJuZWQgYWRkcmVzcyBiaXQgNiBzd2l6emxpbmcgcmVxdWlyZWQgZm9yIENQVSBhY2Nlc3MgdGhyb3VnaAogCSAqIG1tYXAgbWFwcGluZy4KIAkgKi8KLQl1aW50MzJfdCBzd2l6emxlX21vZGU7CisJX191MzIgc3dpenpsZV9tb2RlOwogfTsKIAogc3RydWN0IGRybV9pOTE1X2dlbV9nZXRfdGlsaW5nIHsKIAkvKiogSGFuZGxlIG9mIHRoZSBidWZmZXIgdG8gZ2V0IHRpbGluZyBzdGF0ZSBmb3IuICovCi0JdWludDMyX3QgaGFuZGxlOworCV9fdTMyIGhhbmRsZTsKIAogCS8qKgogCSAqIEN1cnJlbnQgdGlsaW5nIG1vZGUgZm9yIHRoZSBvYmplY3QgKEk5MTVfVElMSU5HX05PTkUsIEk5MTVfVElMSU5HX1gsCiAJICogSTkxNV9USUxJTkdfWSkuCiAJICovCi0JdWludDMyX3QgdGlsaW5nX21vZGU7CisJX191MzIgdGlsaW5nX21vZGU7CiAKIAkvKioKIAkgKiBSZXR1cm5lZCBhZGRyZXNzIGJpdCA2IHN3aXp6bGluZyByZXF1aXJlZCBmb3IgQ1BVIGFjY2VzcyB0aHJvdWdoCiAJICogbW1hcCBtYXBwaW5nLgogCSAqLwotCXVpbnQzMl90IHN3aXp6bGVfbW9kZTsKKwlfX3UzMiBzd2l6emxlX21vZGU7CiB9OwogCiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2dldF9hcGVydHVyZSB7CiAJLyoqIFRvdGFsIHNpemUgb2YgdGhlIGFwZXJ0dXJlIHVzZWQgYnkgaTkxNV9nZW1fZXhlY2J1ZmZlciwgaW4gYnl0ZXMgKi8KLQl1aW50NjRfdCBhcGVyX3NpemU7CisJX191NjQgYXBlcl9zaXplOwogCiAJLyoqCiAJICogQXZhaWxhYmxlIHNwYWNlIGluIHRoZSBhcGVydHVyZSB1c2VkIGJ5IGk5MTVfZ2VtX2V4ZWNidWZmZXIsIGluCiAJICogYnl0ZXMKIAkgKi8KLQl1aW50NjRfdCBhcGVyX2F2YWlsYWJsZV9zaXplOworCV9fdTY0IGFwZXJfYXZhaWxhYmxlX3NpemU7CiB9OwogCiAjZW5kaWYJCQkJLyogX0k5MTVfRFJNX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9tZ2FfZHJtLmggYi9pbmNsdWRlL2RybS9tZ2FfZHJtLmgKaW5kZXggOTQ0YjUwYS4uMzI1ZmQ2ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vbWdhX2RybS5oCisrKyBiL2luY2x1ZGUvZHJtL21nYV9kcm0uaApAQCAtMzUsNiArMzUsOCBAQAogI2lmbmRlZiBfX01HQV9EUk1fSF9fCiAjZGVmaW5lIF9fTUdBX0RSTV9IX18KIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIC8qIFdBUk5JTkc6IElmIHlvdSBjaGFuZ2UgYW55IG9mIHRoZXNlIGRlZmluZXMsIG1ha2Ugc3VyZSB0byBjaGFuZ2UgdGhlCiAgKiBkZWZpbmVzIGluIHRoZSBYc2VydmVyIGZpbGUgKG1nYV9zYXJlYS5oKQogICovCkBAIC0yNTUsOCArMjU3LDggQEAKICNkZWZpbmUgRFJNX0lPQ1RMX01HQV9JTE9BRCAgICBEUk1fSU9XKCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX01HQV9JTE9BRCwgZHJtX21nYV9pbG9hZF90KQogI2RlZmluZSBEUk1fSU9DVExfTUdBX0JMSVQgICAgIERSTV9JT1coIERSTV9DT01NQU5EX0JBU0UgKyBEUk1fTUdBX0JMSVQsIGRybV9tZ2FfYmxpdF90KQogI2RlZmluZSBEUk1fSU9DVExfTUdBX0dFVFBBUkFNIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fTUdBX0dFVFBBUkFNLCBkcm1fbWdhX2dldHBhcmFtX3QpCi0jZGVmaW5lIERSTV9JT0NUTF9NR0FfU0VUX0ZFTkNFICAgICBEUk1fSU9XKCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX01HQV9TRVRfRkVOQ0UsIHVpbnQzMl90KQotI2RlZmluZSBEUk1fSU9DVExfTUdBX1dBSVRfRkVOQ0UgICAgRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9NR0FfV0FJVF9GRU5DRSwgdWludDMyX3QpCisjZGVmaW5lIERSTV9JT0NUTF9NR0FfU0VUX0ZFTkNFICAgICBEUk1fSU9XKCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX01HQV9TRVRfRkVOQ0UsIF9fdTMyKQorI2RlZmluZSBEUk1fSU9DVExfTUdBX1dBSVRfRkVOQ0UgICAgRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9NR0FfV0FJVF9GRU5DRSwgX191MzIpCiAjZGVmaW5lIERSTV9JT0NUTF9NR0FfRE1BX0JPT1RTVFJBUCBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX01HQV9ETUFfQk9PVFNUUkFQLCBkcm1fbWdhX2RtYV9ib290c3RyYXBfdCkKIAogdHlwZWRlZiBzdHJ1Y3QgX2RybV9tZ2Ffd2FycF9pbmRleCB7CkBAIC0zMTAsNyArMzEyLDcgQEAKIAkgKi8KIAkvKkB7ICovCiAJdW5zaWduZWQgbG9uZyB0ZXh0dXJlX2hhbmRsZTsgLyoqPCBIYW5kbGUgdXNlZCB0byBtYXAgQUdQIHRleHR1cmVzLiAqLwotCXVpbnQzMl90IHRleHR1cmVfc2l6ZTsJICAgICAgLyoqPCBTaXplIG9mIHRoZSBBR1AgdGV4dHVyZSByZWdpb24uICovCisJX191MzIgdGV4dHVyZV9zaXplOwkgICAgICAvKio8IFNpemUgb2YgdGhlIEFHUCB0ZXh0dXJlIHJlZ2lvbi4gKi8KIAkvKkB9ICovCiAKIAkvKioKQEAgLTMxOSw3ICszMjEsNyBAQAogCSAqIE9uIHJldHVybiBmcm9tIHRoZSBEUk1fTUdBX0RNQV9CT09UU1RSQVAgaW9jdGwsIHRoaXMgZmllbGQgd2lsbCBiZQogCSAqIGZpbGxlZCBpbiB3aXRoIHRoZSBhY3R1YWwgQUdQIG1vZGUuICBJZiBBR1Agd2FzIG5vdCBhdmFpbGFibGUKIAkgKi8KLQl1aW50MzJfdCBwcmltYXJ5X3NpemU7CisJX191MzIgcHJpbWFyeV9zaXplOwogCiAJLyoqCiAJICogUmVxdWVzdGVkIG51bWJlciBvZiBzZWNvbmRhcnkgRE1BIGJ1ZmZlcnMuCkBAIC0zMjksNyArMzMxLDcgQEAKIAkgKiBhbGxvY2F0ZWQuICBQYXJ0aWN1bGFybHkgd2hlbiBQQ0kgRE1BIGlzIHVzZWQsIHRoaXMgbWF5IGJlCiAJICogKHN1YnRhbnRpYWxseSkgbGVzcyB0aGFuIHRoZSBudW1iZXIgcmVxdWVzdGVkLgogCSAqLwotCXVpbnQzMl90IHNlY29uZGFyeV9iaW5fY291bnQ7CisJX191MzIgc2Vjb25kYXJ5X2Jpbl9jb3VudDsKIAogCS8qKgogCSAqIFJlcXVlc3RlZCBzaXplIG9mIGVhY2ggc2Vjb25kYXJ5IERNQSBidWZmZXIuCkBAIC0zMzgsNyArMzQwLDcgQEAKIAkgKiBkbWFfbWdhX2RtYV9ib290c3RyYXA6OnNlY29uZGFyeV9iaW5fY291bnQsIGl0IGlzIFxiIG5vdCBhbGxvd2VkCiAJICogdG8gcmVkdWNlIGRtYV9tZ2FfZG1hX2Jvb3RzdHJhcDo6c2Vjb25kYXJ5X2Jpbl9zaXplLgogCSAqLwotCXVpbnQzMl90IHNlY29uZGFyeV9iaW5fc2l6ZTsKKwlfX3UzMiBzZWNvbmRhcnlfYmluX3NpemU7CiAKIAkvKioKIAkgKiBCaXQtd2lzZSBtYXNrIG9mIEFHUFNUQVQyXyogdmFsdWVzLiAgQ3VycmVudGx5IG9ubHkgXGMgQUdQU1RBVDJfMVgsCkBAIC0zNTAsMTIgKzM1MiwxMiBAQAogCSAqIGZpbGxlZCBpbiB3aXRoIHRoZSBhY3R1YWwgQUdQIG1vZGUuICBJZiBBR1Agd2FzIG5vdCBhdmFpbGFibGUKIAkgKiAoaS5lLiwgUENJIERNQSB3YXMgdXNlZCksIHRoaXMgdmFsdWUgd2lsbCBiZSB6ZXJvLgogCSAqLwotCXVpbnQzMl90IGFncF9tb2RlOworCV9fdTMyIGFncF9tb2RlOwogCiAJLyoqCiAJICogRGVzaXJlZCBBR1AgR0FSVCBzaXplLCBtZWFzdXJlZCBpbiBtZWdhYnl0ZXMuCiAJICovCi0JdWludDhfdCBhZ3Bfc2l6ZTsKKwlfX3U4IGFncF9zaXplOwogfSBkcm1fbWdhX2RtYV9ib290c3RyYXBfdDsKIAogdHlwZWRlZiBzdHJ1Y3QgZHJtX21nYV9jbGVhciB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9yYWRlb25fZHJtLmggYi9pbmNsdWRlL2RybS9yYWRlb25fZHJtLmgKaW5kZXggNzNmZjUxZi4uNzJlY2Y2NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vcmFkZW9uX2RybS5oCisrKyBiL2luY2x1ZGUvZHJtL3JhZGVvbl9kcm0uaApAQCAtMzMsNiArMzMsOCBAQAogI2lmbmRlZiBfX1JBREVPTl9EUk1fSF9fCiAjZGVmaW5lIF9fUkFERU9OX0RSTV9IX18KIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIC8qIFdBUk5JTkc6IElmIHlvdSBjaGFuZ2UgYW55IG9mIHRoZXNlIGRlZmluZXMsIG1ha2Ugc3VyZSB0byBjaGFuZ2UgdGhlCiAgKiBkZWZpbmVzIGluIHRoZSBYIHNlcnZlciBmaWxlIChyYWRlb25fc2FyZWEuaCkKICAqLwpAQCAtNzIyLDcgKzcyNCw3IEBACiAKIHR5cGVkZWYgc3RydWN0IGRybV9yYWRlb25fc2V0cGFyYW0gewogCXVuc2lnbmVkIGludCBwYXJhbTsKLQlpbnQ2NF90IHZhbHVlOworCV9fczY0IHZhbHVlOwogfSBkcm1fcmFkZW9uX3NldHBhcmFtX3Q7CiAKICNkZWZpbmUgUkFERU9OX1NFVFBBUkFNX0ZCX0xPQ0FUSU9OICAgIDEJLyogZGV0ZXJtaW5lZCBmcmFtZWJ1ZmZlciBsb2NhdGlvbiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vdmlhX2RybS5oIGIvaW5jbHVkZS9kcm0vdmlhX2RybS5oCmluZGV4IGEzYjVjMTAuLjE3MDc4NmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL3ZpYV9kcm0uaAorKysgYi9pbmNsdWRlL2RybS92aWFfZHJtLmgKQEAgLTI0LDYgKzI0LDggQEAKICNpZm5kZWYgX1ZJQV9EUk1fSF8KICNkZWZpbmUgX1ZJQV9EUk1fSF8KIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIC8qIFdBUk5JTkc6IFRoZXNlIGRlZmluZXMgbXVzdCBiZSB0aGUgc2FtZSBhcyB3aGF0IHRoZSBYc2VydmVyIHVzZXMuCiAgKiBpZiB5b3UgY2hhbmdlIHRoZW0sIHlvdSBtdXN0IGNoYW5nZSB0aGUgZGVmaW5lcyBpbiB0aGUgWHNlcnZlci4KICAqLwpAQCAtMTE0LDE5ICsxMTYsMTkgQEAKICNkZWZpbmUgVklBX01FTV9VTktOT1dOIDQKIAogdHlwZWRlZiBzdHJ1Y3QgewotCXVpbnQzMl90IG9mZnNldDsKLQl1aW50MzJfdCBzaXplOworCV9fdTMyIG9mZnNldDsKKwlfX3UzMiBzaXplOwogfSBkcm1fdmlhX2FncF90OwogCiB0eXBlZGVmIHN0cnVjdCB7Ci0JdWludDMyX3Qgb2Zmc2V0OwotCXVpbnQzMl90IHNpemU7CisJX191MzIgb2Zmc2V0OworCV9fdTMyIHNpemU7CiB9IGRybV92aWFfZmJfdDsKIAogdHlwZWRlZiBzdHJ1Y3QgewotCXVpbnQzMl90IGNvbnRleHQ7Ci0JdWludDMyX3QgdHlwZTsKLQl1aW50MzJfdCBzaXplOworCV9fdTMyIGNvbnRleHQ7CisJX191MzIgdHlwZTsKKwlfX3UzMiBzaXplOwogCXVuc2lnbmVkIGxvbmcgaW5kZXg7CiAJdW5zaWduZWQgbG9uZyBvZmZzZXQ7CiB9IGRybV92aWFfbWVtX3Q7CkBAIC0xNDgsOSArMTUwLDkgQEAKIAkJVklBX0ZVVEVYX1dBSVQgPSAweDAwLAogCQlWSUFfRlVURVhfV0FLRSA9IDBYMDEKIAl9IGZ1bmM7Ci0JdWludDMyX3QgbXM7Ci0JdWludDMyX3QgbG9jazsKLQl1aW50MzJfdCB2YWw7CisJX191MzIgbXM7CisJX191MzIgbG9jazsKKwlfX3UzMiB2YWw7CiB9IGRybV92aWFfZnV0ZXhfdDsKIAogdHlwZWRlZiBzdHJ1Y3QgX2RybV92aWFfZG1hX2luaXQgewpAQCAtMjExLDcgKzIxMyw3IEBACiAJCVZJQV9DTURCVUZfTEFHID0gMHgwMgogCX0gZnVuYzsKIAlpbnQgd2FpdDsKLQl1aW50MzJfdCBzaXplOworCV9fdTMyIHNpemU7CiB9IGRybV92aWFfY21kYnVmX3NpemVfdDsKIAogdHlwZWRlZiBlbnVtIHsKQEAgLTIzNiw4ICsyMzgsOCBAQAogc3RydWN0IGRybV92aWFfd2FpdF9pcnFfcmVxdWVzdCB7CiAJdW5zaWduZWQgaXJxOwogCXZpYV9pcnFfc2VxX3R5cGVfdCB0eXBlOwotCXVpbnQzMl90IHNlcXVlbmNlOwotCXVpbnQzMl90IHNpZ25hbDsKKwlfX3UzMiBzZXF1ZW5jZTsKKwlfX3UzMiBzaWduYWw7CiB9OwogCiB0eXBlZGVmIHVuaW9uIGRybV92aWFfaXJxd2FpdCB7CkBAIC0yNDYsNyArMjQ4LDcgQEAKIH0gZHJtX3ZpYV9pcnF3YWl0X3Q7CiAKIHR5cGVkZWYgc3RydWN0IGRybV92aWFfYmxpdHN5bmMgewotCXVpbnQzMl90IHN5bmNfaGFuZGxlOworCV9fdTMyIHN5bmNfaGFuZGxlOwogCXVuc2lnbmVkIGVuZ2luZTsKIH0gZHJtX3ZpYV9ibGl0c3luY190OwogCkBAIC0yNTcsMTYgKzI1OSwxNiBAQAogICovCiAKIHR5cGVkZWYgc3RydWN0IGRybV92aWFfZG1hYmxpdCB7Ci0JdWludDMyX3QgbnVtX2xpbmVzOwotCXVpbnQzMl90IGxpbmVfbGVuZ3RoOworCV9fdTMyIG51bV9saW5lczsKKwlfX3UzMiBsaW5lX2xlbmd0aDsKIAotCXVpbnQzMl90IGZiX2FkZHI7Ci0JdWludDMyX3QgZmJfc3RyaWRlOworCV9fdTMyIGZiX2FkZHI7CisJX191MzIgZmJfc3RyaWRlOwogCiAJdW5zaWduZWQgY2hhciAqbWVtX2FkZHI7Ci0JdWludDMyX3QgbWVtX3N0cmlkZTsKKwlfX3UzMiBtZW1fc3RyaWRlOwogCi0JdWludDMyX3QgZmxhZ3M7CisJX191MzIgZmxhZ3M7CiAJaW50IHRvX2ZiOwogCiAJZHJtX3ZpYV9ibGl0c3luY190IHN5bmM7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L0tidWlsZCBiL2luY2x1ZGUvbGludXgvS2J1aWxkCmluZGV4IDEwNmMzYmEuLmU5NTgxZmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvS2J1aWxkCisrKyBiL2luY2x1ZGUvbGludXgvS2J1aWxkCkBAIC0xMTUsNiArMTE1LDcgQEAKIGhlYWRlci15ICs9IG10aW8uaAogaGVhZGVyLXkgKz0gbmNwX25vLmgKIGhlYWRlci15ICs9IG5laWdoYm91ci5oCitoZWFkZXIteSArPSBuZXRfZHJvcG1vbi5oCiBoZWFkZXIteSArPSBuZXRmaWx0ZXJfYXJwLmgKIGhlYWRlci15ICs9IG5ldHJvbS5oCiBoZWFkZXIteSArPSBuZnMyLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYWdwZ2FydC5oIGIvaW5jbHVkZS9saW51eC9hZ3BnYXJ0LmgKaW5kZXggMTEwYzYwMC4uZjY3NzhlYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9hZ3BnYXJ0LmgKKysrIGIvaW5jbHVkZS9saW51eC9hZ3BnYXJ0LmgKQEAgLTc3LDIwICs3NywyMCBAQAogICogVGhlICJwcm90IiBkb3duIGJlbG93IG5lZWRzIHN0aWxsIGEgInNsZWVwIiBmbGFnIHNvbWVob3cgLi4uCiAgKi8KIHR5cGVkZWYgc3RydWN0IF9hZ3Bfc2VnbWVudCB7Ci0Jb2ZmX3QgcGdfc3RhcnQ7CQkvKiBzdGFydGluZyBwYWdlIHRvIHBvcHVsYXRlICAgICovCi0Jc2l6ZV90IHBnX2NvdW50OwkvKiBudW1iZXIgb2YgcGFnZXMgICAgICAgICAgICAgICovCi0JaW50IHByb3Q7CQkvKiBwcm90IGZsYWdzIGZvciBtbWFwICAgICAgICAgICovCisJX19rZXJuZWxfb2ZmX3QgcGdfc3RhcnQ7CS8qIHN0YXJ0aW5nIHBhZ2UgdG8gcG9wdWxhdGUgICAgKi8KKwlfX2tlcm5lbF9zaXplX3QgcGdfY291bnQ7CS8qIG51bWJlciBvZiBwYWdlcyAgICAgICAgICAgICAgKi8KKwlpbnQgcHJvdDsJCQkvKiBwcm90IGZsYWdzIGZvciBtbWFwICAgICAgICAgICovCiB9IGFncF9zZWdtZW50OwogCiB0eXBlZGVmIHN0cnVjdCBfYWdwX3JlZ2lvbiB7Ci0JcGlkX3QgcGlkOwkJLyogcGlkIG9mIHByb2Nlc3MgICAgICAgICAgICAgICAqLwotCXNpemVfdCBzZWdfY291bnQ7CS8qIG51bWJlciBvZiBzZWdtZW50cyAgICAgICAgICAgKi8KKwlfX2tlcm5lbF9waWRfdCBwaWQ7CQkvKiBwaWQgb2YgcHJvY2VzcyAgICAgICAqLworCV9fa2VybmVsX3NpemVfdCBzZWdfY291bnQ7CS8qIG51bWJlciBvZiBzZWdtZW50cyAgICovCiAJc3RydWN0IF9hZ3Bfc2VnbWVudCAqc2VnX2xpc3Q7CiB9IGFncF9yZWdpb247CiAKIHR5cGVkZWYgc3RydWN0IF9hZ3BfYWxsb2NhdGUgewogCWludCBrZXk7CQkvKiB0YWcgb2YgYWxsb2NhdGlvbiAgICAgICAgICAgICovCi0Jc2l6ZV90IHBnX2NvdW50OwkvKiBudW1iZXIgb2YgcGFnZXMgICAgICAgICAgICAgICovCisJX19rZXJuZWxfc2l6ZV90IHBnX2NvdW50Oy8qIG51bWJlciBvZiBwYWdlcyAgICAgICAgICAgICAqLwogCV9fdTMyIHR5cGU7CQkvKiAwID09IG5vcm1hbCwgb3RoZXIgZGV2c3BlYyAgICovCiAgICAJX191MzIgcGh5c2ljYWw7ICAgICAgICAgLyogZGV2aWNlIHNwZWNpZmljIChzb21lIGRldmljZXMgIAogCQkJCSAqIG5lZWQgYSBwaHlzIGFkZHJlc3Mgb2YgdGhlICAgICAKQEAgLTEwMCw3ICsxMDAsNyBAQAogCiB0eXBlZGVmIHN0cnVjdCBfYWdwX2JpbmQgewogCWludCBrZXk7CQkvKiB0YWcgb2YgYWxsb2NhdGlvbiAgICAgICAgICAgICovCi0Jb2ZmX3QgcGdfc3RhcnQ7CQkvKiBzdGFydGluZyBwYWdlIHRvIHBvcHVsYXRlICAgICovCisJX19rZXJuZWxfb2ZmX3QgcGdfc3RhcnQ7Lyogc3RhcnRpbmcgcGFnZSB0byBwb3B1bGF0ZSAgICAqLwogfSBhZ3BfYmluZDsKIAogdHlwZWRlZiBzdHJ1Y3QgX2FncF91bmJpbmQgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hcmNkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvYXJjZGV2aWNlLmgKaW5kZXggYTE5MTYwNy4uY2Q0YmNiNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9hcmNkZXZpY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L2FyY2RldmljZS5oCkBAIC0yMzUsOCArMjM1LDYgQEAKIAogCiBzdHJ1Y3QgYXJjbmV0X2xvY2FsIHsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKLQogCXVpbnQ4X3QgY29uZmlnLAkJLyogY3VycmVudCB2YWx1ZSBvZiBDT05GSUcgcmVnaXN0ZXIgKi8KIAkJdGltZW91dCwJLyogRXh0ZW5kZWQgdGltZW91dCBmb3IgQ09NMjAwMjAgKi8KIAkJYmFja3BsYW5lLAkvKiBCYWNrcGxhbmUgZmxhZyBmb3IgQ09NMjAwMjAgKi8KQEAgLTMzNSw3ICszMzMsMTIgQEAKIAogdm9pZCBhcmNuZXRfdW5yZWdpc3Rlcl9wcm90byhzdHJ1Y3QgQXJjUHJvdG8gKnByb3RvKTsKIGlycXJldHVybl90IGFyY25ldF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKLXN0cnVjdCBuZXRfZGV2aWNlICphbGxvY19hcmNkZXYoY2hhciAqbmFtZSk7CitzdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfYXJjZGV2KGNvbnN0IGNoYXIgKm5hbWUpOworCitpbnQgYXJjbmV0X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitpbnQgYXJjbmV0X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworaW50IGFyY25ldF9zZW5kX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3ZvaWQgYXJjbmV0X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKICNlbmRpZgkJCQkvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYJCQkJLyogX0xJTlVYX0FSQ0RFVklDRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2F0YS5oIGIvaW5jbHVkZS9saW51eC9hdGEuaAppbmRleCA5YTA2MWFjLi42NjE3YzlmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2F0YS5oCisrKyBiL2luY2x1ZGUvbGludXgvYXRhLmgKQEAgLTEwOCw2ICsxMDgsOCBAQAogCUFUQV9QSU81CQk9IEFUQV9QSU80IHwgKDEgPDwgNSksCiAJQVRBX1BJTzYJCT0gQVRBX1BJTzUgfCAoMSA8PCA2KSwKIAorCUFUQV9QSU80X09OTFkJCT0gKDEgPDwgNCksCisKIAlBVEFfU1dETUEwCQk9ICgxIDw8IDApLAogCUFUQV9TV0RNQTEJCT0gQVRBX1NXRE1BMCB8ICgxIDw8IDEpLAogCUFUQV9TV0RNQTIJCT0gQVRBX1NXRE1BMSB8ICgxIDw8IDIpLApAQCAtMTE3LDYgKzExOSw4IEBACiAJQVRBX01XRE1BMAkJPSAoMSA8PCAwKSwKIAlBVEFfTVdETUExCQk9IEFUQV9NV0RNQTAgfCAoMSA8PCAxKSwKIAlBVEFfTVdETUEyCQk9IEFUQV9NV0RNQTEgfCAoMSA8PCAyKSwKKwlBVEFfTVdETUEzCQk9IEFUQV9NV0RNQTIgfCAoMSA8PCAzKSwKKwlBVEFfTVdETUE0CQk9IEFUQV9NV0RNQTMgfCAoMSA8PCA0KSwKIAogCUFUQV9NV0RNQTEyX09OTFkJPSAoMSA8PCAxKSB8ICgxIDw8IDIpLAogCUFUQV9NV0RNQTJfT05MWQkJPSAoMSA8PCAyKSwKQEAgLTEzMSw2ICsxMzUsOCBAQAogCUFUQV9VRE1BNwkJPSBBVEFfVURNQTYgfCAoMSA8PCA3KSwKIAkvKiBBVEFfVURNQTcgaXMganVzdCBmb3IgY29tcGxldGVuZXNzLi4uIGRvZXNuJ3QgZXhpc3QgKHlldD8pLiAgKi8KIAorCUFUQV9VRE1BMjRfT05MWQkJPSAoMSA8PCAyKSB8ICgxIDw8IDQpLAorCiAJQVRBX1VETUFfTUFTS180MEMJPSBBVEFfVURNQTIsCS8qIHVkbWEwLTIgKi8KIAogCS8qIERNQS1yZWxhdGVkICovCkBAIC0yNDQsOCArMjUwLDYgQEAKIAlBVEFfQ01EX01FRElBX1VOTE9DSwk9IDB4REYsCiAJLyogbWFya2VkIG9ic29sZXRlIGluIHRoZSBBVEEvQVRBUEktNyBzcGVjICovCiAJQVRBX0NNRF9SRVNUT1JFCQk9IDB4MTAsCi0JLyogRVhBQllURSBzcGVjaWZpYyAqLwotCUFUQV9FWEFCWVRFX0VOQUJMRV9ORVNUCT0gMHhGMCwKIAogCS8qIFJFQURfTE9HX0VYVCBwYWdlcyAqLwogCUFUQV9MT0dfU0FUQV9OQ1EJPSAweDEwLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hdGg5a19wbGF0Zm9ybS5oIGIvaW5jbHVkZS9saW51eC9hdGg5a19wbGF0Zm9ybS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4NDdmYzcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2F0aDlrX3BsYXRmb3JtLmgKQEAgLTAsMCArMSwyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAwOSBHYWJvciBKdWhvcyA8anVob3NnQG9wZW53cnQub3JnPgorICogQ29weXJpZ2h0IChjKSAyMDA5IEltcmUgS2Fsb3ogPGthbG96QG9wZW53cnQub3JnPgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKyNpZm5kZWYgX0xJTlVYX0FUSDlLX1BMQVRGT1JNX0gKKyNkZWZpbmUgX0xJTlVYX0FUSDlLX1BMQVRGT1JNX0gKKworI2RlZmluZSBBVEg5S19QTEFUX0VFUF9NQVhfV09SRFMJMjA0OAorCitzdHJ1Y3QgYXRoOWtfcGxhdGZvcm1fZGF0YSB7CisJdTE2IGVlcHJvbV9kYXRhW0FUSDlLX1BMQVRfRUVQX01BWF9XT1JEU107Cit9OworCisjZW5kaWYgLyogX0xJTlVYX0FUSDlLX1BMQVRGT1JNX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYXRtbGVjLmggYi9pbmNsdWRlL2xpbnV4L2F0bWxlYy5oCmluZGV4IDZmNWExYmFiLi4zOWM5MTdmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2F0bWxlYy5oCisrKyBiL2luY2x1ZGUvbGludXgvYXRtbGVjLmgKQEAgLTExLDYgKzExLDcgQEAKICNpbmNsdWRlIDxsaW51eC9hdG1pb2MuaD4KICNpbmNsdWRlIDxsaW51eC9hdG0uaD4KICNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKIC8qIEFUTSBsZWMgZGFlbW9uIGNvbnRyb2wgc29ja2V0ICovCiAjZGVmaW5lIEFUTUxFQ19DVFJMCV9JTygnYScsIEFUTUlPQ19MQU5FKQpAQCAtNzgsOCArNzksOCBAQAogCQl9IG5vcm1hbDsKIAkJc3RydWN0IGF0bWxlY19jb25maWdfbXNnIGNvbmZpZzsKIAkJc3RydWN0IHsKLQkJCXVpbnQxNl90IGxlY19pZDsJCQkvKiByZXF1ZXN0b3IgbGVjX2lkICAqLwotCQkJdWludDMyX3QgdHJhbl9pZDsJCQkvKiB0cmFuc2FjdGlvbiBpZCAgICAqLworCQkJX191MTYgbGVjX2lkOwkJCQkvKiByZXF1ZXN0b3IgbGVjX2lkICAqLworCQkJX191MzIgdHJhbl9pZDsJCQkJLyogdHJhbnNhY3Rpb24gaWQgICAgKi8KIAkJCXVuc2lnbmVkIGNoYXIgbWFjX2FkZHJbRVRIX0FMRU5dOwkvKiBkc3QgbWFjIGFkZHIgICAgICAqLwogCQkJdW5zaWduZWQgY2hhciBhdG1fYWRkcltBVE1fRVNBX0xFTl07CS8qIHJlcWVzdG9yIEFUTSBhZGRyICovCiAJCX0gcHJveHk7CS8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2F0bW1wYy5oIGIvaW5jbHVkZS9saW51eC9hdG1tcGMuaAppbmRleCBlYTE2NTA0Li4yYWJhNTc4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2F0bW1wYy5oCisrKyBiL2luY2x1ZGUvbGludXgvYXRtbXBjLmgKQEAgLTQsNiArNCw3IEBACiAjaW5jbHVkZSA8bGludXgvYXRtYXBpLmg+CiAjaW5jbHVkZSA8bGludXgvYXRtaW9jLmg+CiAjaW5jbHVkZSA8bGludXgvYXRtLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogI2RlZmluZSBBVE1NUENfQ1RSTCBfSU8oJ2EnLCBBVE1JT0NfTVBPQSkKICNkZWZpbmUgQVRNTVBDX0RBVEEgX0lPKCdhJywgQVRNSU9DX01QT0ErMSkKQEAgLTE4LDM5ICsxOSwzOSBAQAogfTsKIAogdHlwZWRlZiBzdHJ1Y3QgaW5fY3RybF9pbmZvIHsKLSAgICAgICAgdWludDhfdCAgIExhc3RfTkhSUF9DSUVfY29kZTsKLSAgICAgICAgdWludDhfdCAgIExhc3RfUTI5MzFfY2F1c2VfdmFsdWU7ICAgICAKLSAgICAgICAgdWludDhfdCAgIGVnX01QQ19BVE1fYWRkcltBVE1fRVNBX0xFTl07CisgICAgICAgIF9fdTggICBMYXN0X05IUlBfQ0lFX2NvZGU7CisgICAgICAgIF9fdTggICBMYXN0X1EyOTMxX2NhdXNlX3ZhbHVlOworICAgICAgICBfX3U4ICAgZWdfTVBDX0FUTV9hZGRyW0FUTV9FU0FfTEVOXTsKICAgICAgICAgX19iZTMyICB0YWc7CiAgICAgICAgIF9fYmUzMiAgaW5fZHN0X2lwOyAgICAgIC8qIElQIGFkZHJlc3MgdGhpcyBpbmdyZXNzIE1QQyBzZW5kcyBwYWNrZXRzIHRvICovCi0gICAgICAgIHVpbnQxNl90ICBob2xkaW5nX3RpbWU7Ci0gICAgICAgIHVpbnQzMl90ICByZXF1ZXN0X2lkOworICAgICAgICBfX3UxNiAgaG9sZGluZ190aW1lOworICAgICAgICBfX3UzMiAgcmVxdWVzdF9pZDsKIH0gaW5fY3RybF9pbmZvOwogCiB0eXBlZGVmIHN0cnVjdCBlZ19jdHJsX2luZm8gewotICAgICAgICB1aW50OF90ICAgRExMX2hlYWRlclsyNTZdOwotICAgICAgICB1aW50OF90ICAgREhfbGVuZ3RoOworICAgICAgICBfX3U4ICAgRExMX2hlYWRlclsyNTZdOworICAgICAgICBfX3U4ICAgREhfbGVuZ3RoOwogICAgICAgICBfX2JlMzIgIGNhY2hlX2lkOwogICAgICAgICBfX2JlMzIgIHRhZzsKICAgICAgICAgX19iZTMyICBtcHNfaXA7CiAgICAgICAgIF9fYmUzMiAgZWdfZHN0X2lwOyAgICAgIC8qIElQIGFkZHJlc3MgdG8gd2hpY2ggaW5ncmVzcyBNUEMgc2VuZHMgcGFja2V0cyAqLwotICAgICAgICB1aW50OF90ICAgaW5fTVBDX2RhdGFfQVRNX2FkZHJbQVRNX0VTQV9MRU5dOwotICAgICAgICB1aW50MTZfdCAgaG9sZGluZ190aW1lOworICAgICAgICBfX3U4ICAgaW5fTVBDX2RhdGFfQVRNX2FkZHJbQVRNX0VTQV9MRU5dOworICAgICAgICBfX3UxNiAgaG9sZGluZ190aW1lOwogfSBlZ19jdHJsX2luZm87CiAKIHN0cnVjdCBtcGNfcGFyYW1ldGVycyB7Ci0gICAgICAgIHVpbnQxNl90IG1wY19wMTsgICAvKiBTaG9ydGN1dC1TZXR1cCBGcmFtZSBDb3VudCAgICAqLwotICAgICAgICB1aW50MTZfdCBtcGNfcDI7ICAgLyogU2hvcnRjdXQtU2V0dXAgRnJhbWUgVGltZSAgICAgKi8KLSAgICAgICAgdWludDhfdCBtcGNfcDNbOF07IC8qIEZsb3ctZGV0ZWN0aW9uIFByb3RvY29scyAgICAgICovCi0gICAgICAgIHVpbnQxNl90IG1wY19wNDsgICAvKiBNUEMgSW5pdGlhbCBSZXRyeSBUaW1lICAgICAgICAqLwotICAgICAgICB1aW50MTZfdCBtcGNfcDU7ICAgLyogTVBDIFJldHJ5IFRpbWUgTWF4aW11bSAgICAgICAgKi8KLSAgICAgICAgdWludDE2X3QgbXBjX3A2OyAgIC8qIEhvbGQgRG93biBUaW1lICAgICAgICAgICAgICAgICovICAgICAgCisgICAgICAgIF9fdTE2IG1wY19wMTsgICAvKiBTaG9ydGN1dC1TZXR1cCBGcmFtZSBDb3VudCAgICAqLworICAgICAgICBfX3UxNiBtcGNfcDI7ICAgLyogU2hvcnRjdXQtU2V0dXAgRnJhbWUgVGltZSAgICAgKi8KKyAgICAgICAgX191OCBtcGNfcDNbOF07IC8qIEZsb3ctZGV0ZWN0aW9uIFByb3RvY29scyAgICAgICovCisgICAgICAgIF9fdTE2IG1wY19wNDsgICAvKiBNUEMgSW5pdGlhbCBSZXRyeSBUaW1lICAgICAgICAqLworICAgICAgICBfX3UxNiBtcGNfcDU7ICAgLyogTVBDIFJldHJ5IFRpbWUgTWF4aW11bSAgICAgICAgKi8KKyAgICAgICAgX191MTYgbXBjX3A2OyAgIC8qIEhvbGQgRG93biBUaW1lICAgICAgICAgICAgICAgICovCiB9IDsKIAogc3RydWN0IGtfbWVzc2FnZSB7Ci0gICAgICAgIHVpbnQxNl90IHR5cGU7CisgICAgICAgIF9fdTE2IHR5cGU7CiAgICAgICAgIF9fYmUzMiBpcF9tYXNrOwotICAgICAgICB1aW50OF90ICBNUFNfY3RybFtBVE1fRVNBX0xFTl07CisgICAgICAgIF9fdTggIE1QU19jdHJsW0FUTV9FU0FfTEVOXTsKICAgICAgICAgdW5pb24gewogICAgICAgICAgICAgICAgIGluX2N0cmxfaW5mbyBpbl9pbmZvOwogICAgICAgICAgICAgICAgIGVnX2N0cmxfaW5mbyBlZ19pbmZvOwpAQCAtNjEsMTEgKzYyLDExIEBACiAKIHN0cnVjdCBsbGNfc25hcF9oZHIgewogCS8qIFJGQyAxNDgzIExMQy9TTkFQIGVuY2Fwc3VsYXRpb24gZm9yIHJvdXRlZCBJUCBQRFVzICovCi0gICAgICAgIHVpbnQ4X3QgIGRzYXA7ICAgIC8qIERlc3RpbmF0aW9uIFNlcnZpY2UgQWNjZXNzIFBvaW50ICgweEFBKSAgICAgKi8KLSAgICAgICAgdWludDhfdCAgc3NhcDsgICAgLyogU291cmNlIFNlcnZpY2UgQWNjZXNzIFBvaW50ICAgICAgKDB4QUEpICAgICAqLwotICAgICAgICB1aW50OF90ICB1aTsgICAgICAvKiBVbm51bWJlcmVkIEluZm9ybWF0aW9uICAgICAgICAgICAoMHgwMykgICAgICovCi0gICAgICAgIHVpbnQ4X3QgIG9yZ1szXTsgIC8qIE9yZ2FuaXphdGlvbmFsIGlkZW50aWZpY2F0aW9uICAgICgweDAwMDAwMCkgKi8KLSAgICAgICAgdWludDhfdCAgdHlwZVsyXTsgLyogRXRoZXIgdHlwZSAoZm9yIElQKSAgICAgICAgICAgICAgKDB4MDgwMCkgICAqLworICAgICAgICBfX3U4ICBkc2FwOyAgICAvKiBEZXN0aW5hdGlvbiBTZXJ2aWNlIEFjY2VzcyBQb2ludCAoMHhBQSkgICAgICovCisgICAgICAgIF9fdTggIHNzYXA7ICAgIC8qIFNvdXJjZSBTZXJ2aWNlIEFjY2VzcyBQb2ludCAgICAgICgweEFBKSAgICAgKi8KKyAgICAgICAgX191OCAgdWk7ICAgICAgLyogVW5udW1iZXJlZCBJbmZvcm1hdGlvbiAgICAgICAgICAgKDB4MDMpICAgICAqLworICAgICAgICBfX3U4ICBvcmdbM107ICAvKiBPcmdhbml6YXRpb25hbCBpZGVudGlmaWNhdGlvbiAgICAoMHgwMDAwMDApICovCisgICAgICAgIF9fdTggIHR5cGVbMl07IC8qIEV0aGVyIHR5cGUgKGZvciBJUCkgICAgICAgICAgICAgICgweDA4MDApICAgKi8KIH07CiAKIC8qIFRMVnMgdGhpcyBNUEMgcmVjb2duaXplcyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hdWRpdC5oIGIvaW5jbHVkZS9saW51eC9hdWRpdC5oCmluZGV4IDY3ZTVkYmYuLjRmYTI4MTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYXVkaXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2F1ZGl0LmgKQEAgLTM2LDcgKzM2LDggQEAKICAqIDE1MDAgLSAxNTk5IGtlcm5lbCBMU1BQIGV2ZW50cwogICogMTYwMCAtIDE2OTkga2VybmVsIGNyeXB0byBldmVudHMKICAqIDE3MDAgLSAxNzk5IGtlcm5lbCBhbm9tYWx5IHJlY29yZHMKLSAqIDE4MDAgLSAxOTk5IGZ1dHVyZSBrZXJuZWwgdXNlIChtYXliZSBpbnRlZ3JpdHkgbGFiZWxzIGFuZCByZWxhdGVkIGV2ZW50cykKKyAqIDE4MDAgLSAxODk5IGtlcm5lbCBpbnRlZ3JpdHkgZXZlbnRzCisgKiAxOTAwIC0gMTk5OSBmdXR1cmUga2VybmVsIHVzZQogICogMjAwMCBpcyBmb3Igb3RoZXJ3aXNlIHVuY2xhc3NpZmllZCBrZXJuZWwgYXVkaXQgbWVzc2FnZXMgKGxlZ2FjeSkKICAqIDIwMDEgLSAyMDk5IHVudXNlZCAoa2VybmVsKQogICogMjEwMCAtIDIxOTkgdXNlciBzcGFjZSBhbm9tYWx5IHJlY29yZHMKQEAgLTEyNSw2ICsxMjYsMTIgQEAKICNkZWZpbmUgQVVESVRfTEFTVF9LRVJOX0FOT01fTVNHICAgIDE3OTkKICNkZWZpbmUgQVVESVRfQU5PTV9QUk9NSVNDVU9VUyAgICAgIDE3MDAgLyogRGV2aWNlIGNoYW5nZWQgcHJvbWlzY3VvdXMgbW9kZSAqLwogI2RlZmluZSBBVURJVF9BTk9NX0FCRU5EICAgICAgICAgICAgMTcwMSAvKiBQcm9jZXNzIGVuZGVkIGFibm9ybWFsbHkgKi8KKyNkZWZpbmUgQVVESVRfSU5URUdSSVRZX0RBVEEJICAgIDE4MDAgLyogRGF0YSBpbnRlZ3JpdHkgdmVyaWZpY2F0aW9uICovCisjZGVmaW5lIEFVRElUX0lOVEVHUklUWV9NRVRBREFUQSAgICAxODAxIC8qIE1ldGFkYXRhIGludGVncml0eSB2ZXJpZmljYXRpb24gKi8KKyNkZWZpbmUgQVVESVRfSU5URUdSSVRZX1NUQVRVUwkgICAgMTgwMiAvKiBJbnRlZ3JpdHkgZW5hYmxlIHN0YXR1cyAqLworI2RlZmluZSBBVURJVF9JTlRFR1JJVFlfSEFTSAkgICAgMTgwMyAvKiBJbnRlZ3JpdHkgSEFTSCB0eXBlICovCisjZGVmaW5lIEFVRElUX0lOVEVHUklUWV9QQ1IJICAgIDE4MDQgLyogUENSIGludmFsaWRhdGlvbiBtc2dzICovCisjZGVmaW5lIEFVRElUX0lOVEVHUklUWV9SVUxFCSAgICAxODA1IC8qIHBvbGljeSBydWxlICovCiAKICNkZWZpbmUgQVVESVRfS0VSTkVMCQkyMDAwCS8qIEFzeW5jaHJvbm91cyBhdWRpdCByZWNvcmQuIE5PVCBBIFJFUVVFU1QuICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmlvLmggYi9pbmNsdWRlL2xpbnV4L2Jpby5oCmluZGV4IGQ4YmQ0M2IuLmIwNWIxZDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYmlvLmgKKysrIGIvaW5jbHVkZS9saW51eC9iaW8uaApAQCAtNDI2LDkgKzQyNiw2IEBACiAJdW5zaWduZWQgaW50IGZyb250X3BhZDsKIAogCW1lbXBvb2xfdCAqYmlvX3Bvb2w7Ci0jaWYgZGVmaW5lZChDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkpCi0JbWVtcG9vbF90ICpiaW9faW50ZWdyaXR5X3Bvb2w7Ci0jZW5kaWYKIAltZW1wb29sX3QgKmJ2ZWNfcG9vbDsKIH07CiAKQEAgLTUxOSw5ICs1MTYsOCBAQAogCiAjZGVmaW5lIGJpb19pbnRlZ3JpdHkoYmlvKSAoYmlvLT5iaV9pbnRlZ3JpdHkgIT0gTlVMTCkKIAotZXh0ZXJuIHN0cnVjdCBiaW9faW50ZWdyaXR5X3BheWxvYWQgKmJpb19pbnRlZ3JpdHlfYWxsb2NfYmlvc2V0KHN0cnVjdCBiaW8gKiwgZ2ZwX3QsIHVuc2lnbmVkIGludCwgc3RydWN0IGJpb19zZXQgKik7CiBleHRlcm4gc3RydWN0IGJpb19pbnRlZ3JpdHlfcGF5bG9hZCAqYmlvX2ludGVncml0eV9hbGxvYyhzdHJ1Y3QgYmlvICosIGdmcF90LCB1bnNpZ25lZCBpbnQpOwotZXh0ZXJuIHZvaWQgYmlvX2ludGVncml0eV9mcmVlKHN0cnVjdCBiaW8gKiwgc3RydWN0IGJpb19zZXQgKik7CitleHRlcm4gdm9pZCBiaW9faW50ZWdyaXR5X2ZyZWUoc3RydWN0IGJpbyAqKTsKIGV4dGVybiBpbnQgYmlvX2ludGVncml0eV9hZGRfcGFnZShzdHJ1Y3QgYmlvICosIHN0cnVjdCBwYWdlICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KTsKIGV4dGVybiBpbnQgYmlvX2ludGVncml0eV9lbmFibGVkKHN0cnVjdCBiaW8gKmJpbyk7CiBleHRlcm4gaW50IGJpb19pbnRlZ3JpdHlfc2V0X3RhZyhzdHJ1Y3QgYmlvICosIHZvaWQgKiwgdW5zaWduZWQgaW50KTsKQEAgLTUzMSwyNyArNTI3LDIxIEBACiBleHRlcm4gdm9pZCBiaW9faW50ZWdyaXR5X2FkdmFuY2Uoc3RydWN0IGJpbyAqLCB1bnNpZ25lZCBpbnQpOwogZXh0ZXJuIHZvaWQgYmlvX2ludGVncml0eV90cmltKHN0cnVjdCBiaW8gKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOwogZXh0ZXJuIHZvaWQgYmlvX2ludGVncml0eV9zcGxpdChzdHJ1Y3QgYmlvICosIHN0cnVjdCBiaW9fcGFpciAqLCBpbnQpOwotZXh0ZXJuIGludCBiaW9faW50ZWdyaXR5X2Nsb25lKHN0cnVjdCBiaW8gKiwgc3RydWN0IGJpbyAqLCBnZnBfdCwgc3RydWN0IGJpb19zZXQgKik7Ci1leHRlcm4gaW50IGJpb3NldF9pbnRlZ3JpdHlfY3JlYXRlKHN0cnVjdCBiaW9fc2V0ICosIGludCk7Ci1leHRlcm4gdm9pZCBiaW9zZXRfaW50ZWdyaXR5X2ZyZWUoc3RydWN0IGJpb19zZXQgKik7Ci1leHRlcm4gdm9pZCBiaW9faW50ZWdyaXR5X2luaXRfc2xhYih2b2lkKTsKK2V4dGVybiBpbnQgYmlvX2ludGVncml0eV9jbG9uZShzdHJ1Y3QgYmlvICosIHN0cnVjdCBiaW8gKiwgZ2ZwX3QpOwogCiAjZWxzZSAvKiBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgKi8KIAogI2RlZmluZSBiaW9faW50ZWdyaXR5KGEpCQkoMCkKLSNkZWZpbmUgYmlvc2V0X2ludGVncml0eV9jcmVhdGUoYSwgYikJKDApCiAjZGVmaW5lIGJpb19pbnRlZ3JpdHlfcHJlcChhKQkJKDApCiAjZGVmaW5lIGJpb19pbnRlZ3JpdHlfZW5hYmxlZChhKQkoMCkKLSNkZWZpbmUgYmlvX2ludGVncml0eV9jbG9uZShhLCBiLCBjLGQgKQkoMCkKLSNkZWZpbmUgYmlvc2V0X2ludGVncml0eV9mcmVlKGEpCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgYmlvX2ludGVncml0eV9mcmVlKGEsIGIpCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgYmlvX2ludGVncml0eV9jbG9uZShhLCBiLCBjKQkoMCkKKyNkZWZpbmUgYmlvX2ludGVncml0eV9mcmVlKGEpCQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGJpb19pbnRlZ3JpdHlfZW5kaW8oYSwgYikJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBiaW9faW50ZWdyaXR5X2FkdmFuY2UoYSwgYikJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBiaW9faW50ZWdyaXR5X3RyaW0oYSwgYiwgYykJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBiaW9faW50ZWdyaXR5X3NwbGl0KGEsIGIsIGMpCWRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgYmlvX2ludGVncml0eV9zZXRfdGFnKGEsIGIsIGMpCWRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgYmlvX2ludGVncml0eV9nZXRfdGFnKGEsIGIsIGMpCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgYmlvX2ludGVncml0eV9pbml0X3NsYWIoYSkJZG8geyB9IHdoaWxlICgwKQogCiAjZW5kaWYgLyogQ09ORklHX0JMS19ERVZfSU5URUdSSVRZICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnNnLmggYi9pbmNsdWRlL2xpbnV4L2JzZy5oCmluZGV4IGNmMDMwM2E2Li4zZjBjNjRhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JzZy5oCisrKyBiL2luY2x1ZGUvbGludXgvYnNnLmgKQEAgLTcsNiArNywxNCBAQAogI2RlZmluZSBCU0dfU1VCX1BST1RPQ09MX1NDU0lfVE1GCTEKICNkZWZpbmUgQlNHX1NVQl9QUk9UT0NPTF9TQ1NJX1RSQU5TUE9SVAkyCiAKKy8qCisgKiBGb3IgZmxhZ3MgbWVtYmVyIGJlbG93CisgKiBzZy5oIHNnX2lvX2hkciBhbHNvIGhhcyBiaXRzIGRlZmluZWQgZm9yIGl0J3MgZmxhZ3MgbWVtYmVyLiBIb3dldmVyCisgKiBub25lIG9mIHRoZXNlIGJpdHMgYXJlIGltcGxlbWVudGVkL3VzZWQgYnkgYnNnLiBUaGUgYml0cyBiZWxvdyBhcmUKKyAqIGFsbG9jYXRlZCB0byBub3QgY29uZmxpY3Qgd2l0aCBzZy5oIG9uZXMgYW55d2F5LgorICovCisjZGVmaW5lIEJTR19GTEFHX1FfQVRfVEFJTCAweDEwIC8qIGRlZmF1bHQsID09IDAgYXQgdGhpcyBiaXQsIGlzIFFfQVRfSEVBRCAqLworCiBzdHJ1Y3Qgc2dfaW9fdjQgewogCV9fczMyIGd1YXJkOwkJLyogW2ldICdRJyB0byBkaWZmZXJlbnRpYXRlIGZyb20gdjMgKi8KIAlfX3UzMiBwcm90b2NvbDsJCS8qIFtpXSAwIC0+IFNDU0kgLCAuLi4uICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Nsb2Nrc291cmNlLmggYi9pbmNsdWRlL2xpbnV4L2Nsb2Nrc291cmNlLmgKaW5kZXggZjg4ZDMyZi4uNTczODE5ZWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY2xvY2tzb3VyY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Nsb2Nrc291cmNlLmgKQEAgLTIyLDggKzIyLDEwOSBAQAogc3RydWN0IGNsb2Nrc291cmNlOwogCiAvKioKKyAqIHN0cnVjdCBjeWNsZWNvdW50ZXIgLSBoYXJkd2FyZSBhYnN0cmFjdGlvbiBmb3IgYSBmcmVlIHJ1bm5pbmcgY291bnRlcgorICoJUHJvdmlkZXMgY29tcGxldGVseSBzdGF0ZS1mcmVlIGFjY2Vzc29ycyB0byB0aGUgdW5kZXJseWluZyBoYXJkd2FyZS4KKyAqCURlcGVuZGluZyBvbiB3aGljaCBoYXJkd2FyZSBpdCByZWFkcywgdGhlIGN5Y2xlIGNvdW50ZXIgbWF5IHdyYXAKKyAqCWFyb3VuZCBxdWlja2x5LiBMb2NraW5nIHJ1bGVzIChpZiBuZWNlc3NhcnkpIGhhdmUgdG8gYmUgZGVmaW5lZAorICoJYnkgdGhlIGltcGxlbWVudG9yIGFuZCB1c2VyIG9mIHNwZWNpZmljIGluc3RhbmNlcyBvZiB0aGlzIEFQSS4KKyAqCisgKiBAcmVhZDoJCXJldHVybnMgdGhlIGN1cnJlbnQgY3ljbGUgdmFsdWUKKyAqIEBtYXNrOgkJYml0bWFzayBmb3IgdHdvJ3MgY29tcGxlbWVudAorICoJCQlzdWJ0cmFjdGlvbiBvZiBub24gNjQgYml0IGNvdW50ZXJzLAorICoJCQlzZWUgQ0xPQ0tTT1VSQ0VfTUFTSygpIGhlbHBlciBtYWNybworICogQG11bHQ6CQljeWNsZSB0byBuYW5vc2Vjb25kIG11bHRpcGxpZXIKKyAqIEBzaGlmdDoJCWN5Y2xlIHRvIG5hbm9zZWNvbmQgZGl2aXNvciAocG93ZXIgb2YgdHdvKQorICovCitzdHJ1Y3QgY3ljbGVjb3VudGVyIHsKKwljeWNsZV90ICgqcmVhZCkoY29uc3Qgc3RydWN0IGN5Y2xlY291bnRlciAqY2MpOworCWN5Y2xlX3QgbWFzazsKKwl1MzIgbXVsdDsKKwl1MzIgc2hpZnQ7Cit9OworCisvKioKKyAqIHN0cnVjdCB0aW1lY291bnRlciAtIGxheWVyIGFib3ZlIGEgJXN0cnVjdCBjeWNsZWNvdW50ZXIgd2hpY2ggY291bnRzIG5hbm9zZWNvbmRzCisgKglDb250YWlucyB0aGUgc3RhdGUgbmVlZGVkIGJ5IHRpbWVjb3VudGVyX3JlYWQoKSB0byBkZXRlY3QKKyAqCWN5Y2xlIGNvdW50ZXIgd3JhcCBhcm91bmQuIEluaXRpYWxpemUgd2l0aAorICoJdGltZWNvdW50ZXJfaW5pdCgpLiBBbHNvIHVzZWQgdG8gY29udmVydCBjeWNsZSBjb3VudHMgaW50byB0aGUKKyAqCWNvcnJlc3BvbmRpbmcgbmFub3NlY29uZCBjb3VudHMgd2l0aCB0aW1lY291bnRlcl9jeWMydGltZSgpLiBVc2VycworICoJb2YgdGhpcyBjb2RlIGFyZSByZXNwb25zaWJsZSBmb3IgaW5pdGlhbGl6aW5nIHRoZSB1bmRlcmx5aW5nCisgKgljeWNsZSBjb3VudGVyIGhhcmR3YXJlLCBsb2NraW5nIGlzc3VlcyBhbmQgcmVhZGluZyB0aGUgdGltZQorICoJbW9yZSBvZnRlbiB0aGFuIHRoZSBjeWNsZSBjb3VudGVyIHdyYXBzIGFyb3VuZC4gVGhlIG5hbm9zZWNvbmQKKyAqCWNvdW50ZXIgd2lsbCBvbmx5IHdyYXAgYXJvdW5kIGFmdGVyIH41ODUgeWVhcnMuCisgKgorICogQGNjOgkJCXRoZSBjeWNsZSBjb3VudGVyIHVzZWQgYnkgdGhpcyBpbnN0YW5jZQorICogQGN5Y2xlX2xhc3Q6CQltb3N0IHJlY2VudCBjeWNsZSBjb3VudGVyIHZhbHVlIHNlZW4gYnkKKyAqCQkJdGltZWNvdW50ZXJfcmVhZCgpCisgKiBAbnNlYzoJCWNvbnRpbnVvdXNseSBpbmNyZWFzaW5nIGNvdW50CisgKi8KK3N0cnVjdCB0aW1lY291bnRlciB7CisJY29uc3Qgc3RydWN0IGN5Y2xlY291bnRlciAqY2M7CisJY3ljbGVfdCBjeWNsZV9sYXN0OworCXU2NCBuc2VjOworfTsKKworLyoqCisgKiBjeWNsZWNvdW50ZXJfY3ljMm5zIC0gY29udmVydHMgY3ljbGUgY291bnRlciBjeWNsZXMgdG8gbmFub3NlY29uZHMKKyAqIEB0YzoJCVBvaW50ZXIgdG8gY3ljbGUgY291bnRlci4KKyAqIEBjeWNsZXM6CUN5Y2xlcworICoKKyAqIFhYWCAtIFRoaXMgY291bGQgdXNlIHNvbWUgbXVsdF9seGxfbGwoKSBhc20gb3B0aW1pemF0aW9uLiBTYW1lIGNvZGUKKyAqIGFzIGluIGN5YzJucywgYnV0IHdpdGggdW5zaWduZWQgcmVzdWx0LgorICovCitzdGF0aWMgaW5saW5lIHU2NCBjeWNsZWNvdW50ZXJfY3ljMm5zKGNvbnN0IHN0cnVjdCBjeWNsZWNvdW50ZXIgKmNjLAorCQkJCSAgICAgIGN5Y2xlX3QgY3ljbGVzKQoreworCXU2NCByZXQgPSAodTY0KWN5Y2xlczsKKwlyZXQgPSAocmV0ICogY2MtPm11bHQpID4+IGNjLT5zaGlmdDsKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIHRpbWVjb3VudGVyX2luaXQgLSBpbml0aWFsaXplIGEgdGltZSBjb3VudGVyCisgKiBAdGM6CQkJUG9pbnRlciB0byB0aW1lIGNvdW50ZXIgd2hpY2ggaXMgdG8gYmUgaW5pdGlhbGl6ZWQvcmVzZXQKKyAqIEBjYzoJCQlBIGN5Y2xlIGNvdW50ZXIsIHJlYWR5IHRvIGJlIHVzZWQuCisgKiBAc3RhcnRfdHN0YW1wOglBcmJpdHJhcnkgaW5pdGlhbCB0aW1lIHN0YW1wLgorICoKKyAqIEFmdGVyIHRoaXMgY2FsbCB0aGUgY3VycmVudCBjeWNsZSByZWdpc3RlciAocm91Z2hseSkgY29ycmVzcG9uZHMgdG8KKyAqIHRoZSBpbml0aWFsIHRpbWUgc3RhbXAuIEV2ZXJ5IGNhbGwgdG8gdGltZWNvdW50ZXJfcmVhZCgpIGluY3JlbWVudHMKKyAqIHRoZSB0aW1lIHN0YW1wIGNvdW50ZXIgYnkgdGhlIG51bWJlciBvZiBlbGFwc2VkIG5hbm9zZWNvbmRzLgorICovCitleHRlcm4gdm9pZCB0aW1lY291bnRlcl9pbml0KHN0cnVjdCB0aW1lY291bnRlciAqdGMsCisJCQkgICAgIGNvbnN0IHN0cnVjdCBjeWNsZWNvdW50ZXIgKmNjLAorCQkJICAgICB1NjQgc3RhcnRfdHN0YW1wKTsKKworLyoqCisgKiB0aW1lY291bnRlcl9yZWFkIC0gcmV0dXJuIG5hbm9zZWNvbmRzIGVsYXBzZWQgc2luY2UgdGltZWNvdW50ZXJfaW5pdCgpCisgKiAgICAgICAgICAgICAgICAgICAgcGx1cyB0aGUgaW5pdGlhbCB0aW1lIHN0YW1wCisgKiBAdGM6ICAgICAgICAgIFBvaW50ZXIgdG8gdGltZSBjb3VudGVyLgorICoKKyAqIEluIG90aGVyIHdvcmRzLCBrZWVwcyB0cmFjayBvZiB0aW1lIHNpbmNlIHRoZSBzYW1lIGVwb2NoIGFzCisgKiB0aGUgZnVuY3Rpb24gd2hpY2ggZ2VuZXJhdGVkIHRoZSBpbml0aWFsIHRpbWUgc3RhbXAuCisgKi8KK2V4dGVybiB1NjQgdGltZWNvdW50ZXJfcmVhZChzdHJ1Y3QgdGltZWNvdW50ZXIgKnRjKTsKKworLyoqCisgKiB0aW1lY291bnRlcl9jeWMydGltZSAtIGNvbnZlcnQgYSBjeWNsZSBjb3VudGVyIHRvIHNhbWUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgdGltZSBiYXNlIGFzIHZhbHVlcyByZXR1cm5lZCBieQorICogICAgICAgICAgICAgICAgICAgICAgICB0aW1lY291bnRlcl9yZWFkKCkKKyAqIEB0YzoJCVBvaW50ZXIgdG8gdGltZSBjb3VudGVyLgorICogQGN5Y2xlOglhIHZhbHVlIHJldHVybmVkIGJ5IHRjLT5jYy0+cmVhZCgpCisgKgorICogQ3ljbGUgY291bnRzIHRoYXQgYXJlIGNvbnZlcnRlZCBjb3JyZWN0bHkgYXMgbG9uZyBhcyB0aGV5CisgKiBmYWxsIGludG8gdGhlIGludGVydmFsIFstMS8yIG1heCBjeWNsZSBjb3VudCwgKzEvMiBtYXggY3ljbGUgY291bnRdLAorICogd2l0aCAibWF4IGN5Y2xlIGNvdW50IiA9PSBjcy0+bWFzaysxLgorICoKKyAqIFRoaXMgYWxsb3dzIGNvbnZlcnNpb24gb2YgY3ljbGUgY291bnRlciB2YWx1ZXMgd2hpY2ggd2VyZSBnZW5lcmF0ZWQKKyAqIGluIHRoZSBwYXN0LgorICovCitleHRlcm4gdTY0IHRpbWVjb3VudGVyX2N5YzJ0aW1lKHN0cnVjdCB0aW1lY291bnRlciAqdGMsCisJCQkJY3ljbGVfdCBjeWNsZV90c3RhbXApOworCisvKioKICAqIHN0cnVjdCBjbG9ja3NvdXJjZSAtIGhhcmR3YXJlIGFic3RyYWN0aW9uIGZvciBhIGZyZWUgcnVubmluZyBjb3VudGVyCiAgKglQcm92aWRlcyBtb3N0bHkgc3RhdGUtZnJlZSBhY2Nlc3NvcnMgdG8gdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUuCisgKglUaGlzIGlzIHRoZSBzdHJ1Y3R1cmUgdXNlZCBmb3Igc3lzdGVtIHRpbWUuCiAgKgogICogQG5hbWU6CQlwdHIgdG8gY2xvY2tzb3VyY2UgbmFtZQogICogQGxpc3Q6CQlsaXN0IGhlYWQgZm9yIHJlZ2lzdHJhdGlvbgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jbTQwMDBfY3MuaCBiL2luY2x1ZGUvbGludXgvY200MDAwX2NzLmgKaW5kZXggNjA1ZWJlMi4uNzJiZmVmZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jbTQwMDBfY3MuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NtNDAwMF9jcy5oCkBAIC0xLDYgKzEsOCBAQAogI2lmbmRlZglfQ000MDAwX0hfCiAjZGVmaW5lCV9DTTQwMDBfSF8KIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKICNkZWZpbmUJTUFYX0FUUgkJCTMzCiAKICNkZWZpbmUJQ000MDAwX01BWF9ERVYJCTQKQEAgLTEwLDkgKzEyLDkgQEAKICAqIG5vdCB0byBicmVhayBjb21waWxhdGlvbiBvZiB1c2Vyc3BhY2UgYXBwcy4gLUhXICovCiAKIHR5cGVkZWYgc3RydWN0IGF0cmVxIHsKLQlpbnQzMl90IGF0cl9sZW47CisJX19zMzIgYXRyX2xlbjsKIAl1bnNpZ25lZCBjaGFyIGF0cls2NF07Ci0JaW50MzJfdCBwb3dlcl9hY3Q7CisJX19zMzIgcG93ZXJfYWN0OwogCXVuc2lnbmVkIGNoYXIgYklGU0Q7CiAJdW5zaWduZWQgY2hhciBiSUZTQzsKIH0gYXRyZXFfdDsKQEAgLTIyLDEzICsyNCwxMyBAQAogICogbWVtYmVyIHNpemVzLiBUaGlzIGxlYWRzIHRvIENPTkZJR19DT01QQVQgYnJlYWthZ2UsIHNpbmNlIDMyYml0IHVzZXJzcGFjZQogICogd2lsbCBsYXkgb3V0IHRoZSBzdHJ1Y3R1cmUgbWVtYmVycyBkaWZmZXJlbnRseSB0aGFuIHRoZSA2NGJpdCBrZXJuZWwuCiAgKgotICogSSd2ZSBjaGFuZ2VkICJwdHNyZXEucHJvdG9jb2wiIGZyb20gInVuc2lnbmVkIGxvbmciIHRvICJ1X2ludDMyX3QiLgorICogSSd2ZSBjaGFuZ2VkICJwdHNyZXEucHJvdG9jb2wiIGZyb20gInVuc2lnbmVkIGxvbmciIHRvICJfX3UzMiIuCiAgKiBPbiAzMmJpdCB0aGlzIHdpbGwgbWFrZSBubyBkaWZmZXJlbmNlLiAgV2l0aCA2NGJpdCBrZXJuZWxzLCBpdCB3aWxsIG1ha2UKICAqIDMyYml0IGFwcHMgd29yaywgdG9vLgogICovCiAKIHR5cGVkZWYgc3RydWN0IHB0c3JlcSB7Ci0JdV9pbnQzMl90IHByb3RvY29sOyAvKlQ9MDogMl4wLCBUPTE6ICAyXjEqLworCV9fdTMyIHByb3RvY29sOyAvKlQ9MDogMl4wLCBUPTE6ICAyXjEqLwogIAl1bnNpZ25lZCBjaGFyIGZsYWdzOwogIAl1bnNpZ25lZCBjaGFyIHB0czE7CiAgCXVuc2lnbmVkIGNoYXIgcHRzMjsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY25fcHJvYy5oIGIvaW5jbHVkZS9saW51eC9jbl9wcm9jLmgKaW5kZXggMWM4NmQ2NS4uYjgxMjViMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jbl9wcm9jLmgKKysrIGIvaW5jbHVkZS9saW51eC9jbl9wcm9jLmgKQEAgLTY1LDIwICs2NSwyMCBAQAogCQl9IGFjazsKIAogCQlzdHJ1Y3QgZm9ya19wcm9jX2V2ZW50IHsKLQkJCXBpZF90IHBhcmVudF9waWQ7Ci0JCQlwaWRfdCBwYXJlbnRfdGdpZDsKLQkJCXBpZF90IGNoaWxkX3BpZDsKLQkJCXBpZF90IGNoaWxkX3RnaWQ7CisJCQlfX2tlcm5lbF9waWRfdCBwYXJlbnRfcGlkOworCQkJX19rZXJuZWxfcGlkX3QgcGFyZW50X3RnaWQ7CisJCQlfX2tlcm5lbF9waWRfdCBjaGlsZF9waWQ7CisJCQlfX2tlcm5lbF9waWRfdCBjaGlsZF90Z2lkOwogCQl9IGZvcms7CiAKIAkJc3RydWN0IGV4ZWNfcHJvY19ldmVudCB7Ci0JCQlwaWRfdCBwcm9jZXNzX3BpZDsKLQkJCXBpZF90IHByb2Nlc3NfdGdpZDsKKwkJCV9fa2VybmVsX3BpZF90IHByb2Nlc3NfcGlkOworCQkJX19rZXJuZWxfcGlkX3QgcHJvY2Vzc190Z2lkOwogCQl9IGV4ZWM7CiAKIAkJc3RydWN0IGlkX3Byb2NfZXZlbnQgewotCQkJcGlkX3QgcHJvY2Vzc19waWQ7Ci0JCQlwaWRfdCBwcm9jZXNzX3RnaWQ7CisJCQlfX2tlcm5lbF9waWRfdCBwcm9jZXNzX3BpZDsKKwkJCV9fa2VybmVsX3BpZF90IHByb2Nlc3NfdGdpZDsKIAkJCXVuaW9uIHsKIAkJCQlfX3UzMiBydWlkOyAvKiB0YXNrIHVpZCAqLwogCQkJCV9fdTMyIHJnaWQ7IC8qIHRhc2sgZ2lkICovCkBAIC05MCw4ICs5MCw4IEBACiAJCX0gaWQ7CiAKIAkJc3RydWN0IGV4aXRfcHJvY19ldmVudCB7Ci0JCQlwaWRfdCBwcm9jZXNzX3BpZDsKLQkJCXBpZF90IHByb2Nlc3NfdGdpZDsKKwkJCV9fa2VybmVsX3BpZF90IHByb2Nlc3NfcGlkOworCQkJX19rZXJuZWxfcGlkX3QgcHJvY2Vzc190Z2lkOwogCQkJX191MzIgZXhpdF9jb2RlLCBleGl0X3NpZ25hbDsKIAkJfSBleGl0OwogCX0gZXZlbnRfZGF0YTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29kYV9wc2Rldi5oIGIvaW5jbHVkZS9saW51eC9jb2RhX3BzZGV2LmgKaW5kZXggMDdhZThmOC4uNWI1ZDQ3MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jb2RhX3BzZGV2LmgKKysrIGIvaW5jbHVkZS9saW51eC9jb2RhX3BzZGV2LmgKQEAgLTYsNiArNiw3IEBACiAjZGVmaW5lIENPREFfUFNERVZfTUFKT1IgNjcKICNkZWZpbmUgTUFYX0NPREFERVZTICA1CSAgIC8qIGhvdyBtYW55IGRvIHdlIGFsbG93ICovCiAKKyNpZmRlZiBfX0tFUk5FTF9fCiBzdHJ1Y3Qga3N0YXRmczsKIAogLyogY29tbXVuaWNhdGlvbiBwZW5kaW5nL3Byb2Nlc3NpbmcgcXVldWVzICovCkBAIC0yNCw3ICsyNSw2IEBACiAJcmV0dXJuIChzdHJ1Y3QgdmVudXNfY29tbSAqKSgoc2IpLT5zX2ZzX2luZm8pOwogfQogCi0KIC8qIHVwY2FsbHMgKi8KIGludCB2ZW51c19yb290ZmlkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBDb2RhRmlkICpmaWRwKTsKIGludCB2ZW51c19nZXRhdHRyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBDb2RhRmlkICpmaWQsCkBAIC02NCw2ICs2NCwxMiBAQAogaW50IHZlbnVzX2ZzeW5jKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBDb2RhRmlkICpmaWQpOwogaW50IHZlbnVzX3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpzZnMpOwogCisvKgorICogU3RhdGlzdGljcworICovCisKK2V4dGVybiBzdHJ1Y3QgdmVudXNfY29tbSBjb2RhX2NvbW1zW107CisjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCiAvKiBtZXNzYWdlcyBiZXR3ZWVuIGNvZGEgZmlsZXN5c3RlbSBpbiBrZXJuZWwgYW5kIFZlbnVzICovCiBzdHJ1Y3QgdXBjX3JlcSB7CkBAIC04MiwxMSArODgsNCBAQAogI2RlZmluZSBSRVFfV1JJVEUgIDB4NAogI2RlZmluZSBSRVFfQUJPUlQgIDB4OAogCi0KLS8qCi0gKiBTdGF0aXN0aWNzCi0gKi8KLQotZXh0ZXJuIHN0cnVjdCB2ZW51c19jb21tIGNvZGFfY29tbXNbXTsKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NvbTIwMDIwLmggYi9pbmNsdWRlL2xpbnV4L2NvbTIwMDIwLmgKaW5kZXggYWM2ZDlhNC4uNWRjZmI5NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jb20yMDAyMC5oCisrKyBiL2luY2x1ZGUvbGludXgvY29tMjAwMjAuaApAQCAtMjksNiArMjksNyBAQAogCiBpbnQgY29tMjAwMjBfY2hlY2soc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBpbnQgY29tMjAwMjBfZm91bmQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHNoYXJlZCk7CitleHRlcm4gY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGNvbTIwMDIwX25ldGRldl9vcHM7CiAKIC8qIFRoZSBudW1iZXIgb2YgbG93IEkvTyBwb3J0cyB1c2VkIGJ5IHRoZSBjYXJkLiAqLwogI2RlZmluZSBBUkNORVRfVE9UQUxfU0laRSA4CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLWdjYzQuaCBiL2luY2x1ZGUvbGludXgvY29tcGlsZXItZ2NjNC5oCmluZGV4IDA5OTkyNzEuLjQ1MGZhNTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY29tcGlsZXItZ2NjNC5oCisrKyBiL2luY2x1ZGUvbGludXgvY29tcGlsZXItZ2NjNC5oCkBAIC0zLDggKzMsMTAgQEAKICNlbmRpZgogCiAvKiBHQ0MgNC4xLlswMV0gbWlzY29tcGlsZXMgX193ZWFrICovCi0jaWYgX19HTlVDX01JTk9SX18gPT0gMSAmJiBfX0dOVUNfUEFUQ0hMRVZFTF9fIDw9IDEKLSMgZXJyb3IgWW91ciB2ZXJzaW9uIG9mIGdjYyBtaXNjb21waWxlcyB0aGUgX193ZWFrIGRpcmVjdGl2ZQorI2lmZGVmIF9fS0VSTkVMX18KKyMgaWYgX19HTlVDX01JTk9SX18gPT0gMSAmJiBfX0dOVUNfUEFUQ0hMRVZFTF9fIDw9IDEKKyMgIGVycm9yIFlvdXIgdmVyc2lvbiBvZiBnY2MgbWlzY29tcGlsZXMgdGhlIF9fd2VhayBkaXJlY3RpdmUKKyMgZW5kaWYKICNlbmRpZgogCiAjZGVmaW5lIF9fdXNlZAkJCV9fYXR0cmlidXRlX18oKF9fdXNlZF9fKSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29ubmVjdG9yLmggYi9pbmNsdWRlL2xpbnV4L2Nvbm5lY3Rvci5oCmluZGV4IDM0ZjI3ODkuLmZjNjVkMjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY29ubmVjdG9yLmgKKysrIGIvaW5jbHVkZS9saW51eC9jb25uZWN0b3IuaApAQCAtMTA5LDYgKzEwOSwxMiBAQAogCXVuc2lnbmVkIGNoYXIgbmFtZVtDTl9DQlFfTkFNRUxFTl07CiAKIAlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqY25fcXVldWU7CisJLyogU2VudCB0byBrZXZlbnQgdG8gY3JlYXRlIGNuX3F1ZXVlIG9ubHkgd2hlbiBuZWVkZWQgKi8KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd3FfY3JlYXRpb247CisJLyogVGVsbCBpZiB0aGUgd3FfY3JlYXRpb24gam9iIGlzIHBlbmRpbmcvY29tcGxldGVkICovCisJYXRvbWljX3Qgd3FfcmVxdWVzdGVkOworCS8qIFdhaXQgZm9yIGNuX3F1ZXVlIHRvIGJlIGNyZWF0ZWQgKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdCB3cV9jcmVhdGVkOwogCiAJc3RydWN0IGxpc3RfaGVhZCBxdWV1ZV9saXN0OwogCXNwaW5sb2NrX3QgcXVldWVfbG9jazsKQEAgLTE2NCw2ICsxNzAsOCBAQAogaW50IGNuX3F1ZXVlX2FkZF9jYWxsYmFjayhzdHJ1Y3QgY25fcXVldWVfZGV2ICpkZXYsIGNoYXIgKm5hbWUsIHN0cnVjdCBjYl9pZCAqaWQsIHZvaWQgKCpjYWxsYmFjaykodm9pZCAqKSk7CiB2b2lkIGNuX3F1ZXVlX2RlbF9jYWxsYmFjayhzdHJ1Y3QgY25fcXVldWVfZGV2ICpkZXYsIHN0cnVjdCBjYl9pZCAqaWQpOwogCitpbnQgcXVldWVfY25fd29yayhzdHJ1Y3QgY25fY2FsbGJhY2tfZW50cnkgKmNicSwgc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKKwogc3RydWN0IGNuX3F1ZXVlX2RldiAqY25fcXVldWVfYWxsb2NfZGV2KGNoYXIgKm5hbWUsIHN0cnVjdCBzb2NrICopOwogdm9pZCBjbl9xdWV1ZV9mcmVlX2RldihzdHJ1Y3QgY25fcXVldWVfZGV2ICpkZXYpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NvbnNvbGUuaCBiL2luY2x1ZGUvbGludXgvY29uc29sZS5oCmluZGV4IGE2N2E5MGMuLmRjY2E1MzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY29uc29sZS5oCisrKyBiL2luY2x1ZGUvbGludXgvY29uc29sZS5oCkBAIC0xMzcsOCArMTM3LDggQEAKIGludCBtZGFfY29uc29sZV9pbml0KHZvaWQpOwogdm9pZCBwcm9tX2Nvbl9pbml0KHZvaWQpOwogCi12b2lkIHZjc19tYWtlX3N5c2ZzKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwotdm9pZCB2Y3NfcmVtb3ZlX3N5c2ZzKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwordm9pZCB2Y3NfbWFrZV9zeXNmcyhpbnQgaW5kZXgpOwordm9pZCB2Y3NfcmVtb3ZlX3N5c2ZzKGludCBpbmRleCk7CiAKIC8qIFNvbWUgZGVidWcgc3R1YiB0byBjYXRjaCBzb21lIG9mIHRoZSBvYnZpb3VzIHJhY2VzIGluIHRoZSBWVCBjb2RlICovCiAjaWYgMQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jcnlwdG8uaCBiL2luY2x1ZGUvbGludXgvY3J5cHRvLmgKaW5kZXggMWYyZTkwMi4uZWMyOWZhMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jcnlwdG8uaAorKysgYi9pbmNsdWRlL2xpbnV4L2NyeXB0by5oCkBAIC00MCw2ICs0MCw3IEBACiAjZGVmaW5lIENSWVBUT19BTEdfVFlQRV9TSEFTSAkJMHgwMDAwMDAwOQogI2RlZmluZSBDUllQVE9fQUxHX1RZUEVfQUhBU0gJCTB4MDAwMDAwMGEKICNkZWZpbmUgQ1JZUFRPX0FMR19UWVBFX1JORwkJMHgwMDAwMDAwYworI2RlZmluZSBDUllQVE9fQUxHX1RZUEVfUENPTVBSRVNTCTB4MDAwMDAwMGYKIAogI2RlZmluZSBDUllQVE9fQUxHX1RZUEVfSEFTSF9NQVNLCTB4MDAwMDAwMGUKICNkZWZpbmUgQ1JZUFRPX0FMR19UWVBFX0FIQVNIX01BU0sJMHgwMDAwMDAwYwpAQCAtNTQ4LDkgKzU0OSw2IEBACiAgKiBUcmFuc2Zvcm0gdXNlciBpbnRlcmZhY2UuCiAgKi8KICAKLXN0cnVjdCBjcnlwdG9fdGZtICpjcnlwdG9fYWxsb2NfdGZtKGNvbnN0IGNoYXIgKmFsZ19uYW1lLAotCQkJCSAgICBjb25zdCBzdHJ1Y3QgY3J5cHRvX3R5cGUgKmZyb250ZW5kLAotCQkJCSAgICB1MzIgdHlwZSwgdTMyIG1hc2spOwogc3RydWN0IGNyeXB0b190Zm0gKmNyeXB0b19hbGxvY19iYXNlKGNvbnN0IGNoYXIgKmFsZ19uYW1lLCB1MzIgdHlwZSwgdTMyIG1hc2spOwogdm9pZCBjcnlwdG9fZGVzdHJveV90Zm0odm9pZCAqbWVtLCBzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jeWNsYWRlcy5oIGIvaW5jbHVkZS9saW51eC9jeWNsYWRlcy5oCmluZGV4IGQwNmZiZjIuLjc4ODg1MGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY3ljbGFkZXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2N5Y2xhZGVzLmgKQEAgLTgyLDkgKzgyLDkgQEAKICAqIG9wZW4pCiAgKi8KIHN0cnVjdCBjeWNsYWRlc19pZGxlX3N0YXRzIHsKLSAgICB0aW1lX3QJICAgaW5fdXNlOwkvKiBUaW1lIGRldmljZSBoYXMgYmVlbiBpbiB1c2UgKHNlY3MpICovCi0gICAgdGltZV90CSAgIHJlY3ZfaWRsZTsJLyogVGltZSBzaW5jZSBsYXN0IGNoYXIgcmVjZWl2ZWQgKHNlY3MpICovCi0gICAgdGltZV90CSAgIHhtaXRfaWRsZTsJLyogVGltZSBzaW5jZSBsYXN0IGNoYXIgdHJhbnNtaXR0ZWQgKHNlY3MpICovCisgICAgX19rZXJuZWxfdGltZV90IGluX3VzZTsJLyogVGltZSBkZXZpY2UgaGFzIGJlZW4gaW4gdXNlIChzZWNzKSAqLworICAgIF9fa2VybmVsX3RpbWVfdCByZWN2X2lkbGU7CS8qIFRpbWUgc2luY2UgbGFzdCBjaGFyIHJlY2VpdmVkIChzZWNzKSAqLworICAgIF9fa2VybmVsX3RpbWVfdCB4bWl0X2lkbGU7CS8qIFRpbWUgc2luY2UgbGFzdCBjaGFyIHRyYW5zbWl0dGVkIChzZWNzKSAqLwogICAgIHVuc2lnbmVkIGxvbmcgIHJlY3ZfYnl0ZXM7CS8qIEJ5dGVzIHJlY2VpdmVkICovCiAgICAgdW5zaWduZWQgbG9uZyAgeG1pdF9ieXRlczsJLyogQnl0ZXMgdHJhbnNtaXR0ZWQgKi8KICAgICB1bnNpZ25lZCBsb25nICBvdmVycnVuczsJLyogSW5wdXQgb3ZlcnJ1bnMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGNjcC5oIGIvaW5jbHVkZS9saW51eC9kY2NwLmgKaW5kZXggNjE3MzRlMi4uNzQzNGE4MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kY2NwLmgKKysrIGIvaW5jbHVkZS9saW51eC9kY2NwLmgKQEAgLTM1NSw0NiArMzU1LDYgQEAKIAlyZXR1cm4gX19kY2NwX2hkcl9sZW4oZGNjcF9oZHIoc2tiKSk7CiB9CiAKLQotLyogaW5pdGlhbCB2YWx1ZXMgZm9yIGVhY2ggZmVhdHVyZSAqLwotI2RlZmluZSBEQ0NQRl9JTklUSUFMX1NFUVVFTkNFX1dJTkRPVwkJMTAwCi0jZGVmaW5lIERDQ1BGX0lOSVRJQUxfQUNLX1JBVElPCQkJMgotI2RlZmluZSBEQ0NQRl9JTklUSUFMX0NDSUQJCQlEQ0NQQ19DQ0lEMgotLyogRklYTUU6IGZvciBub3cgd2UncmUgZGVmYXVsdCB0byAxIGJ1dCBpdCBzaG91bGQgcmVhbGx5IGJlIDAgKi8KLSNkZWZpbmUgRENDUEZfSU5JVElBTF9TRU5EX05EUF9DT1VOVAkJMQotCi0vKioKLSAgKiBzdHJ1Y3QgZGNjcF9taW5pc29jayAtIE1pbmltYWwgRENDUCBjb25uZWN0aW9uIHJlcHJlc2VudGF0aW9uCi0gICoKLSAgKiBXaWxsIGJlIHVzZWQgdG8gcGFzcyB0aGUgc3RhdGUgZnJvbSBkY2NwX3JlcXVlc3Rfc29jayB0byBkY2NwX3NvY2suCi0gICoKLSAgKiBAZGNjcG1zX3NlcXVlbmNlX3dpbmRvdyAtIFNlcXVlbmNlIFdpbmRvdyBGZWF0dXJlIChzZWN0aW9uIDcuNS4yKQotICAqIEBkY2NwbXNfcGVuZGluZyAtIExpc3Qgb2YgZmVhdHVyZXMgYmVpbmcgbmVnb3RpYXRlZAotICAqIEBkY2NwbXNfY29uZiAtCi0gICovCi1zdHJ1Y3QgZGNjcF9taW5pc29jayB7Ci0JX191NjQJCQlkY2NwbXNfc2VxdWVuY2Vfd2luZG93OwotCXN0cnVjdCBsaXN0X2hlYWQJZGNjcG1zX3BlbmRpbmc7Ci0Jc3RydWN0IGxpc3RfaGVhZAlkY2NwbXNfY29uZjsKLX07Ci0KLXN0cnVjdCBkY2NwX29wdF9jb25mIHsKLQlfX3U4CQkJKmRjY3BvY192YWw7Ci0JX191OAkJCWRjY3BvY19sZW47Ci19OwotCi1zdHJ1Y3QgZGNjcF9vcHRfcGVuZCB7Ci0Jc3RydWN0IGxpc3RfaGVhZAlkY2Nwb3Bfbm9kZTsKLQlfX3U4CQkJZGNjcG9wX3R5cGU7Ci0JX191OAkJCWRjY3BvcF9mZWF0OwotCV9fdTgJCSAgICAgICAgKmRjY3BvcF92YWw7Ci0JX191OAkJCWRjY3BvcF9sZW47Ci0JaW50CQkJZGNjcG9wX2NvbmY7Ci0Jc3RydWN0IGRjY3Bfb3B0X2NvbmYgICAgKmRjY3BvcF9zYzsKLX07Ci0KLWV4dGVybiB2b2lkIGRjY3BfbWluaXNvY2tfaW5pdChzdHJ1Y3QgZGNjcF9taW5pc29jayAqZG1zayk7Ci0KIC8qKgogICogc3RydWN0IGRjY3BfcmVxdWVzdF9zb2NrICAtICByZXByZXNlbnQgRENDUC1zcGVjaWZpYyBjb25uZWN0aW9uIHJlcXVlc3QKICAqIEBkcmVxX2luZXRfcnNrOiBzdHJ1Y3R1cmUgaW5oZXJpdGVkIGZyb20KQEAgLTQ4MywxMyArNDQzLDE0IEBACiAgKiBAZGNjcHNfdGltZXN0YW1wX3RpbWUgLSB0aW1lIG9mIHJlY2VpdmluZyBsYXRlc3QgQGRjY3BzX3RpbWVzdGFtcF9lY2hvCiAgKiBAZGNjcHNfbF9hY2tfcmF0aW8gLSBmZWF0dXJlLWxvY2FsIEFjayBSYXRpbwogICogQGRjY3BzX3JfYWNrX3JhdGlvIC0gZmVhdHVyZS1yZW1vdGUgQWNrIFJhdGlvCisgKiBAZGNjcHNfbF9zZXFfd2luIC0gbG9jYWwgU2VxdWVuY2UgV2luZG93IChpbmZsdWVuY2VzIGFjayBudW1iZXIgdmFsaWRpdHkpCisgKiBAZGNjcHNfcl9zZXFfd2luIC0gcmVtb3RlIFNlcXVlbmNlIFdpbmRvdyAoaW5mbHVlbmNlcyBzZXEgbnVtYmVyIHZhbGlkaXR5KQogICogQGRjY3BzX3Bjc2xlbiAtIHNlbmRlciAgIHBhcnRpYWwgY2hlY2tzdW0gY292ZXJhZ2UgKHZpYSBzb2Nrb3B0KQogICogQGRjY3BzX3BjcmxlbiAtIHJlY2VpdmVyIHBhcnRpYWwgY2hlY2tzdW0gY292ZXJhZ2UgKHZpYSBzb2Nrb3B0KQogICogQGRjY3BzX3NlbmRfbmRwX2NvdW50IC0gbG9jYWwgU2VuZCBORFAgQ291bnQgZmVhdHVyZSAoNy43LjIpCiAgKiBAZGNjcHNfbmRwX2NvdW50IC0gbnVtYmVyIG9mIE5vbiBEYXRhIFBhY2tldHMgc2luY2UgbGFzdCBkYXRhIHBhY2tldAogICogQGRjY3BzX21zc19jYWNoZSAtIGN1cnJlbnQgdmFsdWUgb2YgTVNTIChwYXRoIE1UVSBtaW51cyBoZWFkZXIgc2l6ZXMpCiAgKiBAZGNjcHNfcmF0ZV9sYXN0IC0gdGltZXN0YW1wIGZvciByYXRlLWxpbWl0aW5nIERDQ1AtU3luYyAoUkZDIDQzNDAsIDcuNS40KQotICogQGRjY3BzX21pbmlzb2NrIC0gYXNzb2NpYXRlZCBtaW5pc29jayAoYWNjZXNzZWQgdmlhIGRjY3BfbXNrKQogICogQGRjY3BzX2ZlYXRuZWcgLSB0cmFja3MgZmVhdHVyZS1uZWdvdGlhdGlvbiBzdGF0ZSAobW9zdGx5IGR1cmluZyBoYW5kc2hha2UpCiAgKiBAZGNjcHNfaGNfcnhfYWNrdmVjIC0gcnggaGFsZiBjb25uZWN0aW9uIGFjayB2ZWN0b3IKICAqIEBkY2Nwc19oY19yeF9jY2lkIC0gQ0NJRCB1c2VkIGZvciB0aGUgcmVjZWl2ZXIgKG9yIHJlY2VpdmluZyBoYWxmLWNvbm5lY3Rpb24pCkBAIC01MjMsMTIgKzQ4NCwxMyBAQAogCV9fdTMyCQkJCWRjY3BzX3RpbWVzdGFtcF90aW1lOwogCV9fdTE2CQkJCWRjY3BzX2xfYWNrX3JhdGlvOwogCV9fdTE2CQkJCWRjY3BzX3JfYWNrX3JhdGlvOworCV9fdTY0CQkJCWRjY3BzX2xfc2VxX3dpbjo0ODsKKwlfX3U2NAkJCQlkY2Nwc19yX3NlcV93aW46NDg7CiAJX191OAkJCQlkY2Nwc19wY3NsZW46NDsKIAlfX3U4CQkJCWRjY3BzX3Bjcmxlbjo0OwogCV9fdTgJCQkJZGNjcHNfc2VuZF9uZHBfY291bnQ6MTsKIAlfX3U2NAkJCQlkY2Nwc19uZHBfY291bnQ6NDg7CiAJdW5zaWduZWQgbG9uZwkJCWRjY3BzX3JhdGVfbGFzdDsKLQlzdHJ1Y3QgZGNjcF9taW5pc29jawkJZGNjcHNfbWluaXNvY2s7CiAJc3RydWN0IGxpc3RfaGVhZAkJZGNjcHNfZmVhdG5lZzsKIAlzdHJ1Y3QgZGNjcF9hY2t2ZWMJCSpkY2Nwc19oY19yeF9hY2t2ZWM7CiAJc3RydWN0IGNjaWQJCQkqZGNjcHNfaGNfcnhfY2NpZDsKQEAgLTU0NiwxMSArNTA4LDYgQEAKIAlyZXR1cm4gKHN0cnVjdCBkY2NwX3NvY2sgKilzazsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgZGNjcF9taW5pc29jayAqZGNjcF9tc2soY29uc3Qgc3RydWN0IHNvY2sgKnNrKQotewotCXJldHVybiAoc3RydWN0IGRjY3BfbWluaXNvY2sgKikmZGNjcF9zayhzayktPmRjY3BzX21pbmlzb2NrOwotfQotCiBzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKmRjY3Bfcm9sZShjb25zdCBzdHJ1Y3Qgc29jayAqc2spCiB7CiAJc3dpdGNoIChkY2NwX3NrKHNrKS0+ZGNjcHNfcm9sZSkgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvZGV2aWNlLmgKaW5kZXggNDdmMzQzYy4uMjkxOGMwZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kZXZpY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RldmljZS5oCkBAIC0yOCw2ICsyOCw3IEBACiAjZGVmaW5lIEJVU19JRF9TSVpFCQkyMAogCiBzdHJ1Y3QgZGV2aWNlOworc3RydWN0IGRldmljZV9wcml2YXRlOwogc3RydWN0IGRldmljZV9kcml2ZXI7CiBzdHJ1Y3QgZHJpdmVyX3ByaXZhdGU7CiBzdHJ1Y3QgY2xhc3M7CkBAIC0xNDcsNyArMTQ4LDcgQEAKIGV4dGVybiBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJpdmVyX2ZpbmQoY29uc3QgY2hhciAqbmFtZSwKIAkJCQkJIHN0cnVjdCBidXNfdHlwZSAqYnVzKTsKIGV4dGVybiBpbnQgZHJpdmVyX3Byb2JlX2RvbmUodm9pZCk7Ci1leHRlcm4gaW50IHdhaXRfZm9yX2RldmljZV9wcm9iZSh2b2lkKTsKK2V4dGVybiB2b2lkIHdhaXRfZm9yX2RldmljZV9wcm9iZSh2b2lkKTsKIAogCiAvKiBzeXNmcyBpbnRlcmZhY2UgZm9yIGV4cG9ydGluZyBkcml2ZXIgYXR0cmlidXRlcyAqLwpAQCAtMzY3LDE1ICszNjgsMTEgQEAKIH07CiAKIHN0cnVjdCBkZXZpY2UgewotCXN0cnVjdCBrbGlzdAkJa2xpc3RfY2hpbGRyZW47Ci0Jc3RydWN0IGtsaXN0X25vZGUJa25vZGVfcGFyZW50OwkvKiBub2RlIGluIHNpYmxpbmcgbGlzdCAqLwotCXN0cnVjdCBrbGlzdF9ub2RlCWtub2RlX2RyaXZlcjsKLQlzdHJ1Y3Qga2xpc3Rfbm9kZQlrbm9kZV9idXM7CiAJc3RydWN0IGRldmljZQkJKnBhcmVudDsKIAorCXN0cnVjdCBkZXZpY2VfcHJpdmF0ZQkqcDsKKwogCXN0cnVjdCBrb2JqZWN0IGtvYmo7Ci0JY2hhcglidXNfaWRbQlVTX0lEX1NJWkVdOwkvKiBwb3NpdGlvbiBvbiBwYXJlbnQgYnVzICovCi0JdW5zaWduZWQJCXVldmVudF9zdXBwcmVzczoxOwogCWNvbnN0IGNoYXIJCSppbml0X25hbWU7IC8qIGluaXRpYWwgbmFtZSBvZiB0aGUgZGV2aWNlICovCiAJc3RydWN0IGRldmljZV90eXBlCSp0eXBlOwogCkBAIC0zODcsOCArMzg0LDEzIEBACiAJc3RydWN0IGRldmljZV9kcml2ZXIgKmRyaXZlcjsJLyogd2hpY2ggZHJpdmVyIGhhcyBhbGxvY2F0ZWQgdGhpcwogCQkJCQkgICBkZXZpY2UgKi8KIAl2b2lkCQkqZHJpdmVyX2RhdGE7CS8qIGRhdGEgcHJpdmF0ZSB0byB0aGUgZHJpdmVyICovCi0Jdm9pZAkJKnBsYXRmb3JtX2RhdGE7CS8qIFBsYXRmb3JtIHNwZWNpZmljIGRhdGEsIGRldmljZQotCQkJCQkgICBjb3JlIGRvZXNuJ3QgdG91Y2ggaXQgKi8KKworCXZvaWQJCSpwbGF0Zm9ybV9kYXRhOwkvKiBXZSB3aWxsIHJlbW92ZSBwbGF0Zm9ybV9kYXRhCisJCQkJCSAgIGZpZWxkIGlmIGFsbCBwbGF0Zm9ybSBkZXZpY2VzCisJCQkJCSAgIHBhc3MgaXRzIHBsYXRmb3JtIHNwZWNpZmljIGRhdGEKKwkJCQkJICAgZnJvbSBwbGF0Zm9ybV9kZXZpY2UtPnBsYXRmb3JtX2RhdGEsCisJCQkJCSAgIG90aGVyIGtpbmQgb2YgZGV2aWNlcyBzaG91bGQgbm90CisJCQkJCSAgIHVzZSBwbGF0Zm9ybV9kYXRhLiAqLwogCXN0cnVjdCBkZXZfcG1faW5mbwlwb3dlcjsKIAogI2lmZGVmIENPTkZJR19OVU1BCkBAIC00MjcsOCArNDI5LDcgQEAKIAogc3RhdGljIGlubGluZSBjb25zdCBjaGFyICpkZXZfbmFtZShjb25zdCBzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0JLyogd2lsbCBiZSBjaGFuZ2VkIGludG8ga29iamVjdF9uYW1lKCZkZXYtPmtvYmopIGluIHRoZSBuZWFyIGZ1dHVyZSAqLwotCXJldHVybiBkZXYtPmJ1c19pZDsKKwlyZXR1cm4ga29iamVjdF9uYW1lKCZkZXYtPmtvYmopOwogfQogCiBleHRlcm4gaW50IGRldl9zZXRfbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKm5hbWUsIC4uLikKQEAgLTQ2Myw2ICs0NjQsMTYgQEAKIAlkZXYtPmRyaXZlcl9kYXRhID0gZGF0YTsKIH0KIAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZGV2X2dldF91ZXZlbnRfc3VwcHJlc3MoY29uc3Qgc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiBkZXYtPmtvYmoudWV2ZW50X3N1cHByZXNzOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGV2X3NldF91ZXZlbnRfc3VwcHJlc3Moc3RydWN0IGRldmljZSAqZGV2LCBpbnQgdmFsKQoreworCWRldi0+a29iai51ZXZlbnRfc3VwcHJlc3MgPSB2YWw7Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50IGRldmljZV9pc19yZWdpc3RlcmVkKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlyZXR1cm4gZGV2LT5rb2JqLnN0YXRlX2luX3N5c2ZzOwpAQCAtNDgzLDcgKzQ5NCw4IEBACiBleHRlcm4gc3RydWN0IGRldmljZSAqZGV2aWNlX2ZpbmRfY2hpbGQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhLAogCQkJCWludCAoKm1hdGNoKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpKTsKIGV4dGVybiBpbnQgZGV2aWNlX3JlbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKm5ld19uYW1lKTsKLWV4dGVybiBpbnQgZGV2aWNlX21vdmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICpuZXdfcGFyZW50KTsKK2V4dGVybiBpbnQgZGV2aWNlX21vdmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICpuZXdfcGFyZW50LAorCQkgICAgICAgZW51bSBkcG1fb3JkZXIgZHBtX29yZGVyKTsKIAogLyoKICAqIFJvb3QgZGV2aWNlIG9iamVjdHMgZm9yIGdyb3VwaW5nIHVuZGVyIC9zeXMvZGV2aWNlcwpAQCAtNTcwLDcgKzU4Miw3IEBACiAjaWYgZGVmaW5lZChERUJVRykKICNkZWZpbmUgZGV2X2RiZyhkZXYsIGZvcm1hdCwgYXJnLi4uKQkJXAogCWRldl9wcmludGsoS0VSTl9ERUJVRyAsIGRldiAsIGZvcm1hdCAsICMjIGFyZykKLSNlbGlmIGRlZmluZWQoQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHKQorI2VsaWYgZGVmaW5lZChDT05GSUdfRFlOQU1JQ19ERUJVRykKICNkZWZpbmUgZGV2X2RiZyhkZXYsIGZvcm1hdCwgLi4uKSBkbyB7IFwKIAlkeW5hbWljX2Rldl9kYmcoZGV2LCBmb3JtYXQsICMjX19WQV9BUkdTX18pOyBcCiAJfSB3aGlsZSAoMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGxtX25ldGxpbmsuaCBiL2luY2x1ZGUvbGludXgvZGxtX25ldGxpbmsuaAppbmRleCAxOTI3NjMzLi42NDdjOGVmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RsbV9uZXRsaW5rLmgKKysrIGIvaW5jbHVkZS9saW51eC9kbG1fbmV0bGluay5oCkBAIC05LDYgKzksOCBAQAogI2lmbmRlZiBfRExNX05FVExJTktfSAogI2RlZmluZSBfRExNX05FVExJTktfSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogZW51bSB7CiAJRExNX1NUQVRVU19XQUlUSU5HID0gMSwKIAlETE1fU1RBVFVTX0dSQU5URUQgPSAyLApAQCAtMTgsMTYgKzIwLDE2IEBACiAjZGVmaW5lIERMTV9MT0NLX0RBVEFfVkVSU0lPTiAxCiAKIHN0cnVjdCBkbG1fbG9ja19kYXRhIHsKLQl1aW50MTZfdCB2ZXJzaW9uOwotCXVpbnQzMl90IGxvY2tzcGFjZV9pZDsKKwlfX3UxNiB2ZXJzaW9uOworCV9fdTMyIGxvY2tzcGFjZV9pZDsKIAlpbnQgbm9kZWlkOwogCWludCBvd25waWQ7Ci0JdWludDMyX3QgaWQ7Ci0JdWludDMyX3QgcmVtaWQ7Ci0JdWludDY0X3QgeGlkOwotCWludDhfdCBzdGF0dXM7Ci0JaW50OF90IGdybW9kZTsKLQlpbnQ4X3QgcnFtb2RlOworCV9fdTMyIGlkOworCV9fdTMyIHJlbWlkOworCV9fdTY0IHhpZDsKKwlfX3M4IHN0YXR1czsKKwlfX3M4IGdybW9kZTsKKwlfX3M4IHJxbW9kZTsKIAl1bnNpZ25lZCBsb25nIHRpbWVzdGFtcDsKIAlpbnQgcmVzb3VyY2VfbmFtZWxlbjsKIAljaGFyIHJlc291cmNlX25hbWVbRExNX1JFU05BTUVfTUFYTEVOXTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZG0taW9jdGwuaCBiL2luY2x1ZGUvbGludXgvZG0taW9jdGwuaAppbmRleCAyOGMyOTQwLi40OGU0NGVlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RtLWlvY3RsLmgKKysrIGIvaW5jbHVkZS9saW51eC9kbS1pb2N0bC5oCkBAIC0xMTMsMjAgKzExMywyMCBAQAogCSAqIHJldHVybiAtRU5PVFRZKSBmaWxsIG91dCB0aGlzIGZpZWxkLCBldmVuIGlmIHRoZQogCSAqIGNvbW1hbmQgZmFpbGVkLgogCSAqLwotCXVpbnQzMl90IHZlcnNpb25bM107CS8qIGluL291dCAqLwotCXVpbnQzMl90IGRhdGFfc2l6ZTsJLyogdG90YWwgc2l6ZSBvZiBkYXRhIHBhc3NlZCBpbgorCV9fdTMyIHZlcnNpb25bM107CS8qIGluL291dCAqLworCV9fdTMyIGRhdGFfc2l6ZTsJLyogdG90YWwgc2l6ZSBvZiBkYXRhIHBhc3NlZCBpbgogCQkJCSAqIGluY2x1ZGluZyB0aGlzIHN0cnVjdCAqLwogCi0JdWludDMyX3QgZGF0YV9zdGFydDsJLyogb2Zmc2V0IHRvIHN0YXJ0IG9mIGRhdGEKKwlfX3UzMiBkYXRhX3N0YXJ0OwkvKiBvZmZzZXQgdG8gc3RhcnQgb2YgZGF0YQogCQkJCSAqIHJlbGF0aXZlIHRvIHN0YXJ0IG9mIHRoaXMgc3RydWN0ICovCiAKLQl1aW50MzJfdCB0YXJnZXRfY291bnQ7CS8qIGluL291dCAqLwotCWludDMyX3Qgb3Blbl9jb3VudDsJLyogb3V0ICovCi0JdWludDMyX3QgZmxhZ3M7CQkvKiBpbi9vdXQgKi8KLQl1aW50MzJfdCBldmVudF9ucjsgICAgICAJLyogaW4vb3V0ICovCi0JdWludDMyX3QgcGFkZGluZzsKKwlfX3UzMiB0YXJnZXRfY291bnQ7CS8qIGluL291dCAqLworCV9fczMyIG9wZW5fY291bnQ7CS8qIG91dCAqLworCV9fdTMyIGZsYWdzOwkJLyogaW4vb3V0ICovCisJX191MzIgZXZlbnRfbnI7ICAgICAgCS8qIGluL291dCAqLworCV9fdTMyIHBhZGRpbmc7CiAKLQl1aW50NjRfdCBkZXY7CQkvKiBpbi9vdXQgKi8KKwlfX3U2NCBkZXY7CQkvKiBpbi9vdXQgKi8KIAogCWNoYXIgbmFtZVtETV9OQU1FX0xFTl07CS8qIGRldmljZSBuYW1lICovCiAJY2hhciB1dWlkW0RNX1VVSURfTEVOXTsJLyogdW5pcXVlIGlkZW50aWZpZXIgZm9yCkBAIC0xMzksOSArMTM5LDkgQEAKICAqIGRtX2lvY3RsLgogICovCiBzdHJ1Y3QgZG1fdGFyZ2V0X3NwZWMgewotCXVpbnQ2NF90IHNlY3Rvcl9zdGFydDsKLQl1aW50NjRfdCBsZW5ndGg7Ci0JaW50MzJfdCBzdGF0dXM7CQkvKiB1c2VkIHdoZW4gcmVhZGluZyBmcm9tIGtlcm5lbCBvbmx5ICovCisJX191NjQgc2VjdG9yX3N0YXJ0OworCV9fdTY0IGxlbmd0aDsKKwlfX3MzMiBzdGF0dXM7CQkvKiB1c2VkIHdoZW4gcmVhZGluZyBmcm9tIGtlcm5lbCBvbmx5ICovCiAKIAkvKgogCSAqIExvY2F0aW9uIG9mIHRoZSBuZXh0IGRtX3RhcmdldF9zcGVjLgpAQCAtMTUzLDcgKzE1Myw3IEBACiAJICogICAodGhhdCBmb2xsb3dzIHRoZSBkbV9pb2N0bCBzdHJ1Y3QpIHRvIHRoZSBzdGFydCBvZiB0aGUgIm5leHQiCiAJICogICBkbV90YXJnZXRfc3BlYy4KIAkgKi8KLQl1aW50MzJfdCBuZXh0OworCV9fdTMyIG5leHQ7CiAKIAljaGFyIHRhcmdldF90eXBlW0RNX01BWF9UWVBFX05BTUVdOwogCkBAIC0xNjgsMTcgKzE2OCwxNyBAQAogICogVXNlZCB0byByZXRyaWV2ZSB0aGUgdGFyZ2V0IGRlcGVuZGVuY2llcy4KICAqLwogc3RydWN0IGRtX3RhcmdldF9kZXBzIHsKLQl1aW50MzJfdCBjb3VudDsJLyogQXJyYXkgc2l6ZSAqLwotCXVpbnQzMl90IHBhZGRpbmc7CS8qIHVudXNlZCAqLwotCXVpbnQ2NF90IGRldlswXTsJLyogb3V0ICovCisJX191MzIgY291bnQ7CS8qIEFycmF5IHNpemUgKi8KKwlfX3UzMiBwYWRkaW5nOwkvKiB1bnVzZWQgKi8KKwlfX3U2NCBkZXZbMF07CS8qIG91dCAqLwogfTsKIAogLyoKICAqIFVzZWQgdG8gZ2V0IGEgbGlzdCBvZiBhbGwgZG0gZGV2aWNlcy4KICAqLwogc3RydWN0IGRtX25hbWVfbGlzdCB7Ci0JdWludDY0X3QgZGV2OwotCXVpbnQzMl90IG5leHQ7CQkvKiBvZmZzZXQgdG8gdGhlIG5leHQgcmVjb3JkIGZyb20KKwlfX3U2NCBkZXY7CisJX191MzIgbmV4dDsJCS8qIG9mZnNldCB0byB0aGUgbmV4dCByZWNvcmQgZnJvbQogCQkJCSAgIHRoZSBfc3RhcnRfIG9mIHRoaXMgKi8KIAljaGFyIG5hbWVbMF07CiB9OwpAQCAtMTg3LDggKzE4Nyw4IEBACiAgKiBVc2VkIHRvIHJldHJpZXZlIHRoZSB0YXJnZXQgdmVyc2lvbnMKICAqLwogc3RydWN0IGRtX3RhcmdldF92ZXJzaW9ucyB7Ci0gICAgICAgIHVpbnQzMl90IG5leHQ7Ci0gICAgICAgIHVpbnQzMl90IHZlcnNpb25bM107CisgICAgICAgIF9fdTMyIG5leHQ7CisgICAgICAgIF9fdTMyIHZlcnNpb25bM107CiAKICAgICAgICAgY2hhciBuYW1lWzBdOwogfTsKQEAgLTE5Nyw3ICsxOTcsNyBAQAogICogVXNlZCB0byBwYXNzIG1lc3NhZ2UgdG8gYSB0YXJnZXQKICAqLwogc3RydWN0IGRtX3RhcmdldF9tc2cgewotCXVpbnQ2NF90IHNlY3RvcjsJLyogRGV2aWNlIHNlY3RvciAqLworCV9fdTY0IHNlY3RvcjsJLyogRGV2aWNlIHNlY3RvciAqLwogCiAJY2hhciBtZXNzYWdlWzBdOwogfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZHZiL2F1ZGlvLmggYi9pbmNsdWRlL2xpbnV4L2R2Yi9hdWRpby5oCmluZGV4IGJiMGRmMmEuLmZlYzY2YmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZHZiL2F1ZGlvLmgKKysrIGIvaW5jbHVkZS9saW51eC9kdmIvYXVkaW8uaApAQCAtNzYsNyArNzYsNyBAQAogfSBhdWRpb19rYXJhb2tlX3Q7ICAgICAvKiBpbnRvIGxlZnQgYW5kIHJpZ2h0ICAqLwogCiAKLXR5cGVkZWYgdWludDE2X3QgYXVkaW9fYXR0cmlidXRlc190OwordHlwZWRlZiBfX3UxNiBhdWRpb19hdHRyaWJ1dGVzX3Q7CiAvKiAgIGJpdHM6IGRlc2NyLiAqLwogLyogICAxNS0xMyBhdWRpbyBjb2RpbmcgbW9kZSAoMD1hYzMsIDI9bXBlZzEsIDM9bXBlZzJleHQsIDQ9TFBDTSwgNj1EVFMsICovCiAvKiAgIDEyICAgIG11bHRpY2hhbm5lbCBleHRlbnNpb24gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZHZiL3ZpZGVvLmggYi9pbmNsdWRlL2xpbnV4L2R2Yi92aWRlby5oCmluZGV4IGJkNDljM2UuLjFkNzUwYzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZHZiL3ZpZGVvLmgKKysrIGIvaW5jbHVkZS9saW51eC9kdmIvdmlkZW8uaApAQCAtMTMyLDEyICsxMzIsMTIgQEAKICNkZWZpbmUgVklERU9fVlNZTkNfRklFTERfUFJPR1JFU1NJVkUJKDMpCiAKIHN0cnVjdCB2aWRlb19ldmVudCB7Ci0JaW50MzJfdCB0eXBlOworCV9fczMyIHR5cGU7CiAjZGVmaW5lIFZJREVPX0VWRU5UX1NJWkVfQ0hBTkdFRAkxCiAjZGVmaW5lIFZJREVPX0VWRU5UX0ZSQU1FX1JBVEVfQ0hBTkdFRAkyCiAjZGVmaW5lIFZJREVPX0VWRU5UX0RFQ09ERVJfU1RPUFBFRCAJMwogI2RlZmluZSBWSURFT19FVkVOVF9WU1lOQyAJCTQKLQl0aW1lX3QgdGltZXN0YW1wOworCV9fa2VybmVsX3RpbWVfdCB0aW1lc3RhbXA7CiAJdW5pb24gewogCQl2aWRlb19zaXplX3Qgc2l6ZTsKIAkJdW5zaWduZWQgaW50IGZyYW1lX3JhdGU7CS8qIGluIGZyYW1lcyBwZXIgMTAwMHNlYyAqLwpAQCAtMTU3LDI1ICsxNTcsMjUgQEAKIAogc3RydWN0IHZpZGVvX3N0aWxsX3BpY3R1cmUgewogCWNoYXIgX191c2VyICppRnJhbWU7ICAgICAgICAvKiBwb2ludGVyIHRvIGEgc2luZ2xlIGlmcmFtZSBpbiBtZW1vcnkgKi8KLQlpbnQzMl90IHNpemU7CisJX19zMzIgc2l6ZTsKIH07CiAKIAogdHlwZWRlZgogc3RydWN0IHZpZGVvX2hpZ2hsaWdodCB7CiAJaW50ICAgICBhY3RpdmU7ICAgICAgLyogICAgMT1zaG93IGhpZ2hsaWdodCwgMD1oaWRlIGhpZ2hsaWdodCAqLwotCXVpbnQ4X3QgY29udHJhc3QxOyAgIC8qICAgIDctIDQgIFBhdHRlcm4gcGl4ZWwgY29udHJhc3QgKi8KKwlfX3U4ICAgIGNvbnRyYXN0MTsgICAvKiAgICA3LSA0ICBQYXR0ZXJuIHBpeGVsIGNvbnRyYXN0ICovCiAJCQkgICAgIC8qICAgIDMtIDAgIEJhY2tncm91bmQgcGl4ZWwgY29udHJhc3QgKi8KLQl1aW50OF90IGNvbnRyYXN0MjsgICAvKiAgICA3LSA0ICBFbXBoYXNpcyBwaXhlbC0yIGNvbnRyYXN0ICovCisJX191OCAgICBjb250cmFzdDI7ICAgLyogICAgNy0gNCAgRW1waGFzaXMgcGl4ZWwtMiBjb250cmFzdCAqLwogCQkJICAgICAvKiAgICAzLSAwICBFbXBoYXNpcyBwaXhlbC0xIGNvbnRyYXN0ICovCi0JdWludDhfdCBjb2xvcjE7ICAgICAgLyogICAgNy0gNCAgUGF0dGVybiBwaXhlbCBjb2xvciAqLworCV9fdTggICAgY29sb3IxOyAgICAgIC8qICAgIDctIDQgIFBhdHRlcm4gcGl4ZWwgY29sb3IgKi8KIAkJCSAgICAgLyogICAgMy0gMCAgQmFja2dyb3VuZCBwaXhlbCBjb2xvciAqLwotCXVpbnQ4X3QgY29sb3IyOyAgICAgIC8qICAgIDctIDQgIEVtcGhhc2lzIHBpeGVsLTIgY29sb3IgKi8KKwlfX3U4ICAgIGNvbG9yMjsgICAgICAvKiAgICA3LSA0ICBFbXBoYXNpcyBwaXhlbC0yIGNvbG9yICovCiAJCQkgICAgIC8qICAgIDMtIDAgIEVtcGhhc2lzIHBpeGVsLTEgY29sb3IgKi8KLQl1aW50MzJfdCB5cG9zOyAgICAgICAvKiAgIDIzLTIyICBhdXRvIGFjdGlvbiBtb2RlICovCisJX191MzIgICAgeXBvczsgICAgICAgLyogICAyMy0yMiAgYXV0byBhY3Rpb24gbW9kZSAqLwogCQkJICAgICAvKiAgIDIxLTEyICBzdGFydCB5ICovCiAJCQkgICAgIC8qICAgIDktIDAgIGVuZCB5ICovCi0JdWludDMyX3QgeHBvczsgICAgICAgLyogICAyMy0yMiAgYnV0dG9uIGNvbG9yIG51bWJlciAqLworCV9fdTMyICAgIHhwb3M7ICAgICAgIC8qICAgMjMtMjIgIGJ1dHRvbiBjb2xvciBudW1iZXIgKi8KIAkJCSAgICAgLyogICAyMS0xMiAgc3RhcnQgeCAqLwogCQkJICAgICAvKiAgICA5LSAwICBlbmQgeCAqLwogfSB2aWRlb19oaWdobGlnaHRfdDsKQEAgLTE4OSwxNyArMTg5LDE3IEBACiAKIHR5cGVkZWYgc3RydWN0IHZpZGVvX3NwdV9wYWxldHRlIHsgICAgICAvKiBTUFUgUGFsZXR0ZSBpbmZvcm1hdGlvbiAqLwogCWludCBsZW5ndGg7Ci0JdWludDhfdCBfX3VzZXIgKnBhbGV0dGU7CisJX191OCBfX3VzZXIgKnBhbGV0dGU7CiB9IHZpZGVvX3NwdV9wYWxldHRlX3Q7CiAKIAogdHlwZWRlZiBzdHJ1Y3QgdmlkZW9fbmF2aV9wYWNrIHsKIAlpbnQgbGVuZ3RoOyAgICAgICAgICAvKiAwIC4uLiAxMDI0ICovCi0JdWludDhfdCBkYXRhWzEwMjRdOworCV9fdTggZGF0YVsxMDI0XTsKIH0gdmlkZW9fbmF2aV9wYWNrX3Q7CiAKIAotdHlwZWRlZiB1aW50MTZfdCB2aWRlb19hdHRyaWJ1dGVzX3Q7Cit0eXBlZGVmIF9fdTE2IHZpZGVvX2F0dHJpYnV0ZXNfdDsKIC8qICAgYml0czogZGVzY3IuICovCiAvKiAgIDE1LTE0IFZpZGVvIGNvbXByZXNzaW9uIG1vZGUgKDA9TVBFRy0xLCAxPU1QRUctMikgKi8KIC8qICAgMTMtMTIgVFYgc3lzdGVtICgwPTUyNS82MCwgMT02MjUvNTApICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2R5bmFtaWNfZGVidWcuaCBiL2luY2x1ZGUvbGludXgvZHluYW1pY19kZWJ1Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhYWJmMzMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2R5bmFtaWNfZGVidWcuaApAQCAtMCwwICsxLDg4IEBACisjaWZuZGVmIF9EWU5BTUlDX0RFQlVHX0gKKyNkZWZpbmUgX0RZTkFNSUNfREVCVUdfSAorCisvKiBkeW5hbWljX3ByaW50a19lbmFibGVkLCBhbmQgZHluYW1pY19wcmludGtfZW5hYmxlZDIgYXJlIGJpdG1hc2tzIGluIHdoaWNoCisgKiBiaXQgbiBpcyBzZXQgdG8gMSBpZiBhbnkgbW9kbmFtZSBoYXNoZXMgaW50byB0aGUgYnVja2V0IG4sIDAgb3RoZXJ3aXNlLiBUaGV5CisgKiB1c2UgaW5kZXBlbmRlbnQgaGFzaCBmdW5jdGlvbnMsIHRvIHJlZHVjZSB0aGUgY2hhbmNlIG9mIGZhbHNlIHBvc2l0aXZlcy4KKyAqLworZXh0ZXJuIGxvbmcgbG9uZyBkeW5hbWljX2RlYnVnX2VuYWJsZWQ7CitleHRlcm4gbG9uZyBsb25nIGR5bmFtaWNfZGVidWdfZW5hYmxlZDI7CisKKy8qCisgKiBBbiBpbnN0YW5jZSBvZiB0aGlzIHN0cnVjdHVyZSBpcyBjcmVhdGVkIGluIGEgc3BlY2lhbAorICogRUxGIHNlY3Rpb24gYXQgZXZlcnkgZHluYW1pYyBkZWJ1ZyBjYWxsc2l0ZS4gIEF0IHJ1bnRpbWUsCisgKiB0aGUgc3BlY2lhbCBzZWN0aW9uIGlzIHRyZWF0ZWQgYXMgYW4gYXJyYXkgb2YgdGhlc2UuCisgKi8KK3N0cnVjdCBfZGRlYnVnIHsKKwkvKgorCSAqIFRoZXNlIGZpZWxkcyBhcmUgdXNlZCB0byBkcml2ZSB0aGUgdXNlciBpbnRlcmZhY2UKKwkgKiBmb3Igc2VsZWN0aW5nIGFuZCBkaXNwbGF5aW5nIGRlYnVnIGNhbGxzaXRlcy4KKwkgKi8KKwljb25zdCBjaGFyICptb2RuYW1lOworCWNvbnN0IGNoYXIgKmZ1bmN0aW9uOworCWNvbnN0IGNoYXIgKmZpbGVuYW1lOworCWNvbnN0IGNoYXIgKmZvcm1hdDsKKwljaGFyIHByaW1hcnlfaGFzaDsKKwljaGFyIHNlY29uZGFyeV9oYXNoOworCXVuc2lnbmVkIGludCBsaW5lbm86MjQ7CisJLyoKKyAJICogVGhlIGZsYWdzIGZpZWxkIGNvbnRyb2xzIHRoZSBiZWhhdmlvdXIgYXQgdGhlIGNhbGxzaXRlLgorIAkgKiBUaGUgYml0cyBoZXJlIGFyZSBjaGFuZ2VkIGR5bmFtaWNhbGx5IHdoZW4gdGhlIHVzZXIKKyAJICogd3JpdGVzIGNvbW1hbmRzIHRvIDxkZWJ1Z2ZzPi9keW5hbWljX2RlYnVnL2RkZWJ1ZworCSAqLworI2RlZmluZSBfRFBSSU5US19GTEFHU19QUklOVCAgICgxPDwwKSAgLyogcHJpbnRrKCkgYSBtZXNzYWdlIHVzaW5nIHRoZSBmb3JtYXQgKi8KKyNkZWZpbmUgX0RQUklOVEtfRkxBR1NfREVGQVVMVCAwCisJdW5zaWduZWQgaW50IGZsYWdzOjg7Cit9IF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKTsKKworCitpbnQgZGRlYnVnX2FkZF9tb2R1bGUoc3RydWN0IF9kZGVidWcgKnRhYiwgdW5zaWduZWQgaW50IG4sCisJCQkJY29uc3QgY2hhciAqbW9kbmFtZSk7CisKKyNpZiBkZWZpbmVkKENPTkZJR19EWU5BTUlDX0RFQlVHKQorZXh0ZXJuIGludCBkZGVidWdfcmVtb3ZlX21vZHVsZShjaGFyICptb2RfbmFtZSk7CisKKyNkZWZpbmUgX19keW5hbWljX2RiZ19lbmFibGVkKGRkKSAgKHsJICAgICBcCisJaW50IF9fcmV0ID0gMDsJCQkJCQkJICAgICBcCisJaWYgKHVubGlrZWx5KChkeW5hbWljX2RlYnVnX2VuYWJsZWQgJiAoMUxMIDw8IERFQlVHX0hBU0gpKSAmJgkgICAgIFwKKwkJCShkeW5hbWljX2RlYnVnX2VuYWJsZWQyICYgKDFMTCA8PCBERUJVR19IQVNIMikpKSkgICBcCisJCQkJaWYgKHVubGlrZWx5KGRkLmZsYWdzKSkJCQkgICAgIFwKKwkJCQkJX19yZXQgPSAxOwkJCSAgICAgXAorCV9fcmV0OyB9KQorCisjZGVmaW5lIGR5bmFtaWNfcHJfZGVidWcoZm10LCAuLi4pIGRvIHsJCQkJCVwKKwlzdGF0aWMgc3RydWN0IF9kZGVidWcgZGVzY3JpcHRvcgkJCQlcCisJX191c2VkCQkJCQkJCQlcCisJX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX192ZXJib3NlIiksIGFsaWduZWQoOCkpKSA9CQlcCisJeyBLQlVJTERfTU9ETkFNRSwgX19mdW5jX18sIF9fRklMRV9fLCBmbXQsIERFQlVHX0hBU0gsCVwKKwkJREVCVUdfSEFTSDIsIF9fTElORV9fLCBfRFBSSU5US19GTEFHU19ERUZBVUxUIH07CVwKKwlpZiAoX19keW5hbWljX2RiZ19lbmFibGVkKGRlc2NyaXB0b3IpKQkJCQlcCisJCXByaW50ayhLRVJOX0RFQlVHIEtCVUlMRF9NT0ROQU1FICI6IiBwcl9mbXQoZm10KSwJXAorCQkJCSMjX19WQV9BUkdTX18pOwkJCQlcCisJfSB3aGlsZSAoMCkKKworCisjZGVmaW5lIGR5bmFtaWNfZGV2X2RiZyhkZXYsIGZtdCwgLi4uKSBkbyB7CQkJCVwKKwlzdGF0aWMgc3RydWN0IF9kZGVidWcgZGVzY3JpcHRvcgkJCQlcCisJX191c2VkCQkJCQkJCQlcCisJX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX192ZXJib3NlIiksIGFsaWduZWQoOCkpKSA9CQlcCisJeyBLQlVJTERfTU9ETkFNRSwgX19mdW5jX18sIF9fRklMRV9fLCBmbXQsIERFQlVHX0hBU0gsCVwKKwkJREVCVUdfSEFTSDIsIF9fTElORV9fLCBfRFBSSU5US19GTEFHU19ERUZBVUxUIH07CVwKKwlpZiAoX19keW5hbWljX2RiZ19lbmFibGVkKGRlc2NyaXB0b3IpKQkJCQlcCisJCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsIGRldiwJCQlcCisJCQkJCUtCVUlMRF9NT0ROQU1FICI6ICIgcHJfZm10KGZtdCksXAorCQkJCQkjI19fVkFfQVJHU19fKTsJCQlcCisJfSB3aGlsZSAoMCkKKworI2Vsc2UKKworc3RhdGljIGlubGluZSBpbnQgZGRlYnVnX3JlbW92ZV9tb2R1bGUoY2hhciAqbW9kKQoreworCXJldHVybiAwOworfQorCisjZGVmaW5lIGR5bmFtaWNfcHJfZGVidWcoZm10LCAuLi4pICBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGR5bmFtaWNfZGV2X2RiZyhkZXYsIGZvcm1hdCwgLi4uKSAgZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9keW5hbWljX3ByaW50ay5oIGIvaW5jbHVkZS9saW51eC9keW5hbWljX3ByaW50ay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZDUyOGQwLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbGludXgvZHluYW1pY19wcmludGsuaAorKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLSNpZm5kZWYgX0RZTkFNSUNfUFJJTlRLX0gKLSNkZWZpbmUgX0RZTkFNSUNfUFJJTlRLX0gKLQotI2RlZmluZSBEWU5BTUlDX0RFQlVHX0hBU0hfQklUUyA2Ci0jZGVmaW5lIERFQlVHX0hBU0hfVEFCTEVfU0laRSAoMSA8PCBEWU5BTUlDX0RFQlVHX0hBU0hfQklUUykKLQotI2RlZmluZSBUWVBFX0JPT0xFQU4gMQotCi0jZGVmaW5lIERZTkFNSUNfRU5BQkxFRF9BTEwgMAotI2RlZmluZSBEWU5BTUlDX0VOQUJMRURfTk9ORSAxCi0jZGVmaW5lIERZTkFNSUNfRU5BQkxFRF9TT01FIDIKLQotZXh0ZXJuIGludCBkeW5hbWljX2VuYWJsZWQ7Ci0KLS8qIGR5bmFtaWNfcHJpbnRrX2VuYWJsZWQsIGFuZCBkeW5hbWljX3ByaW50a19lbmFibGVkMiBhcmUgYml0bWFza3MgaW4gd2hpY2gKLSAqIGJpdCBuIGlzIHNldCB0byAxIGlmIGFueSBtb2RuYW1lIGhhc2hlcyBpbnRvIHRoZSBidWNrZXQgbiwgMCBvdGhlcndpc2UuIFRoZXkKLSAqIHVzZSBpbmRlcGVuZGVudCBoYXNoIGZ1bmN0aW9ucywgdG8gcmVkdWNlIHRoZSBjaGFuY2Ugb2YgZmFsc2UgcG9zaXRpdmVzLgotICovCi1leHRlcm4gbG9uZyBsb25nIGR5bmFtaWNfcHJpbnRrX2VuYWJsZWQ7Ci1leHRlcm4gbG9uZyBsb25nIGR5bmFtaWNfcHJpbnRrX2VuYWJsZWQyOwotCi1zdHJ1Y3QgbW9kX2RlYnVnIHsKLQljaGFyICptb2RuYW1lOwotCWNoYXIgKmxvZ2ljYWxfbW9kbmFtZTsKLQljaGFyICpmbGFnX25hbWVzOwotCWludCB0eXBlOwotCWludCBoYXNoOwotCWludCBoYXNoMjsKLX0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg4KSkpOwotCi1pbnQgcmVnaXN0ZXJfZHluYW1pY19kZWJ1Z19tb2R1bGUoY2hhciAqbW9kX25hbWUsIGludCB0eXBlLCBjaGFyICpzaGFyZV9uYW1lLAotCQkJCQljaGFyICpmbGFncywgaW50IGhhc2gsIGludCBoYXNoMik7Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRykKLWV4dGVybiBpbnQgdW5yZWdpc3Rlcl9keW5hbWljX2RlYnVnX21vZHVsZShjaGFyICptb2RfbmFtZSk7Ci1leHRlcm4gaW50IF9fZHluYW1pY19kYmdfZW5hYmxlZF9oZWxwZXIoY2hhciAqbW9kbmFtZSwgaW50IHR5cGUsCi0JCQkJCWludCB2YWx1ZSwgaW50IGhhc2gpOwotCi0jZGVmaW5lIF9fZHluYW1pY19kYmdfZW5hYmxlZChtb2R1bGUsIHR5cGUsIHZhbHVlLCBsZXZlbCwgaGFzaCkgICh7CSAgICAgXAotCWludCBfX3JldCA9IDA7CQkJCQkJCSAgICAgXAotCWlmICh1bmxpa2VseSgoZHluYW1pY19wcmludGtfZW5hYmxlZCAmICgxTEwgPDwgREVCVUdfSEFTSCkpICYmCSAgICAgXAotCQkJKGR5bmFtaWNfcHJpbnRrX2VuYWJsZWQyICYgKDFMTCA8PCBERUJVR19IQVNIMikpKSkgICBcCi0JCQlfX3JldCA9IF9fZHluYW1pY19kYmdfZW5hYmxlZF9oZWxwZXIobW9kdWxlLCB0eXBlLCAgIFwKLQkJCQkJCQkJdmFsdWUsIGhhc2gpO1wKLQlfX3JldDsgfSkKLQotI2RlZmluZSBkeW5hbWljX3ByX2RlYnVnKGZtdCwgLi4uKSBkbyB7CQkJCQkgICAgXAotCXN0YXRpYyBjaGFyIG1vZF9uYW1lW10JCQkJCQkgICAgXAotCV9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9fdmVyYm9zZV9zdHJpbmdzIikpKQkJCSAgICBcCi0JID0gS0JVSUxEX01PRE5BTUU7CQkJCQkJICAgIFwKLQlzdGF0aWMgc3RydWN0IG1vZF9kZWJ1ZyBkZXNjcmlwdG9yCQkJCSAgICBcCi0JX191c2VkCQkJCQkJCQkgICAgXAotCV9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9fdmVyYm9zZSIpLCBhbGlnbmVkKDgpKSkgPQkJICAgIFwKLQl7IG1vZF9uYW1lLCBtb2RfbmFtZSwgTlVMTCwgVFlQRV9CT09MRUFOLCBERUJVR19IQVNILCBERUJVR19IQVNIMiB9O1wKLQlpZiAoX19keW5hbWljX2RiZ19lbmFibGVkKEtCVUlMRF9NT0ROQU1FLCBUWVBFX0JPT0xFQU4sCQkgICAgXAotCQkJCQkJMCwgMCwgREVCVUdfSEFTSCkpCSAgICBcCi0JCXByaW50ayhLRVJOX0RFQlVHIEtCVUlMRF9NT0ROQU1FICI6IiBmbXQsCQkgICAgXAotCQkJCSMjX19WQV9BUkdTX18pOwkJCQkgICAgXAotCX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgZHluYW1pY19kZXZfZGJnKGRldiwgZm9ybWF0LCAuLi4pIGRvIHsJCQkJICAgIFwKLQlzdGF0aWMgY2hhciBtb2RfbmFtZVtdCQkJCQkJICAgIFwKLQlfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfX3ZlcmJvc2Vfc3RyaW5ncyIpKSkJCQkgICAgXAotCSA9IEtCVUlMRF9NT0ROQU1FOwkJCQkJCSAgICBcCi0Jc3RhdGljIHN0cnVjdCBtb2RfZGVidWcgZGVzY3JpcHRvcgkJCQkgICAgXAotCV9fdXNlZAkJCQkJCQkJICAgIFwKLQlfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfX3ZlcmJvc2UiKSwgYWxpZ25lZCg4KSkpID0JCSAgICBcCi0JeyBtb2RfbmFtZSwgbW9kX25hbWUsIE5VTEwsIFRZUEVfQk9PTEVBTiwgREVCVUdfSEFTSCwgREVCVUdfSEFTSDIgfTtcCi0JaWYgKF9fZHluYW1pY19kYmdfZW5hYmxlZChLQlVJTERfTU9ETkFNRSwgVFlQRV9CT09MRUFOLAkJICAgIFwKLQkJCQkJCTAsIDAsIERFQlVHX0hBU0gpKQkgICAgXAotCQkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBkZXYsCQkJICAgIFwKLQkJCQkJS0JVSUxEX01PRE5BTUUgIjogIiBmb3JtYXQsCSAgICBcCi0JCQkJCSMjX19WQV9BUkdTX18pOwkJCSAgICBcCi0JfSB3aGlsZSAoMCkKLQotI2Vsc2UKLQotc3RhdGljIGlubGluZSBpbnQgdW5yZWdpc3Rlcl9keW5hbWljX2RlYnVnX21vZHVsZShjb25zdCBjaGFyICptb2RfbmFtZSkKLXsKLQlyZXR1cm4gMDsKLX0KLXN0YXRpYyBpbmxpbmUgaW50IF9fZHluYW1pY19kYmdfZW5hYmxlZF9oZWxwZXIoY2hhciAqbW9kbmFtZSwgaW50IHR5cGUsCi0JCQkJCQlpbnQgdmFsdWUsIGludCBoYXNoKQotewotCXJldHVybiAwOwotfQotCi0jZGVmaW5lIF9fZHluYW1pY19kYmdfZW5hYmxlZChtb2R1bGUsIHR5cGUsIHZhbHVlLCBsZXZlbCwgaGFzaCkgICh7IDA7IH0pCi0jZGVmaW5lIGR5bmFtaWNfcHJfZGVidWcoZm10LCAuLi4pICBkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGR5bmFtaWNfZGV2X2RiZyhkZXYsIGZvcm1hdCwgLi4uKSAgZG8geyB9IHdoaWxlICgwKQotI2VuZGlmCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9lcnJxdWV1ZS5oIGIvaW5jbHVkZS9saW51eC9lcnJxdWV1ZS5oCmluZGV4IGNlYjE0NTQuLmVjMTJjYzc0MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9lcnJxdWV1ZS5oCisrKyBiL2luY2x1ZGUvbGludXgvZXJycXVldWUuaApAQCAtMTgsNiArMTgsNyBAQAogI2RlZmluZSBTT19FRV9PUklHSU5fTE9DQUwJMQogI2RlZmluZSBTT19FRV9PUklHSU5fSUNNUAkyCiAjZGVmaW5lIFNPX0VFX09SSUdJTl9JQ01QNgkzCisjZGVmaW5lIFNPX0VFX09SSUdJTl9USU1FU1RBTVBJTkcgNAogCiAjZGVmaW5lIFNPX0VFX09GRkVOREVSKGVlKQkoKHN0cnVjdCBzb2NrYWRkciopKChlZSkrMSkpCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXRoZXJkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvZXRoZXJkZXZpY2UuaAppbmRleCAxY2IwZjBiLi5hMWYxN2FiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oCkBAIC0xODQsNCArMTg0LDI1IEBACiB9CiAjZW5kaWYJLyogX19LRVJORUxfXyAqLwogCisvKioKKyAqIGNvbXBhcmVfZXRoZXJfaGVhZGVyIC0gQ29tcGFyZSB0d28gRXRoZXJuZXQgaGVhZGVycworICogQGE6IFBvaW50ZXIgdG8gRXRoZXJuZXQgaGVhZGVyCisgKiBAYjogUG9pbnRlciB0byBFdGhlcm5ldCBoZWFkZXIKKyAqCisgKiBDb21wYXJlIHR3byBldGhlcm5ldCBoZWFkZXJzLCByZXR1cm5zIDAgaWYgZXF1YWwuCisgKiBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgbmV0d29yayBoZWFkZXIgKGkuZS4sIElQIGhlYWRlcikgaXMgNC1ieXRlCisgKiBhbGlnbmVkIE9SIHRoZSBwbGF0Zm9ybSBjYW4gaGFuZGxlIHVuYWxpZ25lZCBhY2Nlc3MuICBUaGlzIGlzIHRoZQorICogY2FzZSBmb3IgYWxsIHBhY2tldHMgY29taW5nIGludG8gbmV0aWZfcmVjZWl2ZV9za2Igb3Igc2ltaWxhcgorICogZW50cnkgcG9pbnRzLgorICovCisKK3N0YXRpYyBpbmxpbmUgaW50IGNvbXBhcmVfZXRoZXJfaGVhZGVyKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCit7CisJdTMyICphMzIgPSAodTMyICopKCh1OCAqKWEgKyAyKTsKKwl1MzIgKmIzMiA9ICh1MzIgKikoKHU4ICopYiArIDIpOworCisJcmV0dXJuICgqKHUxNiAqKWEgXiAqKHUxNiAqKWIpIHwgKGEzMlswXSBeIGIzMlswXSkgfAorCSAgICAgICAoYTMyWzFdIF4gYjMyWzFdKSB8IChhMzJbMl0gXiBiMzJbMl0pOworfQorCiAjZW5kaWYJLyogX0xJTlVYX0VUSEVSREVWSUNFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXRodG9vbC5oIGIvaW5jbHVkZS9saW51eC9ldGh0b29sLmgKaW5kZXggMjdjNjdhNS4uMTMxYjEyNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ldGh0b29sLmgKKysrIGIvaW5jbHVkZS9saW51eC9ldGh0b29sLmgKQEAgLTcsNiArNyw3IEBACiAgKiBQb3J0aW9ucyBDb3B5cmlnaHQgMjAwMiBJbnRlbCAoZWxpLmt1cGVybWFubkBpbnRlbC5jb20sCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hyaXN0b3BoZXIubGVlY2hAaW50ZWwuY29tLAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3R0LmZlbGRtYW5AaW50ZWwuY29tKQorICogUG9ydGlvbnMgQ29weXJpZ2h0IChDKSBTdW4gTWljcm9zeXN0ZW1zIDIwMDgKICAqLwogCiAjaWZuZGVmIF9MSU5VWF9FVEhUT09MX0gKQEAgLTI4NywxMCArMjg4LDc1IEBACiAJRVRIX0ZMQUdfTFJPCQk9ICgxIDw8IDE1KSwJLyogTFJPIGlzIGVuYWJsZWQgKi8KIH07CiAKLXN0cnVjdCBldGh0b29sX3J4bmZjIHsKLQlfX3UzMgkJY21kOworLyogVGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmVzIGFyZSBmb3Igc3VwcG9ydGluZyBSWCBuZXR3b3JrIGZsb3cKKyAqIGNsYXNzaWZpY2F0aW9uIGNvbmZpZ3VyYXRpb24uIE5vdGUsIGFsbCBtdWx0aWJ5dGUgZmllbGRzLCBlLmcuLAorICogaXA0c3JjLCBpcDRkc3QsIHBzcmMsIHBkc3QsIHNwaSwgZXRjLiBhcmUgZXhwZWN0ZWQgdG8gYmUgaW4gbmV0d29yaworICogYnl0ZSBvcmRlci4KKyAqLworc3RydWN0IGV0aHRvb2xfdGNwaXA0X3NwZWMgeworCV9fYmUzMglpcDRzcmM7CisJX19iZTMyCWlwNGRzdDsKKwlfX2JlMTYJcHNyYzsKKwlfX2JlMTYJcGRzdDsKKwlfX3U4ICAgIHRvczsKK307CisKK3N0cnVjdCBldGh0b29sX2FoX2VzcGlwNF9zcGVjIHsKKwlfX2JlMzIJaXA0c3JjOworCV9fYmUzMglpcDRkc3Q7CisJX19iZTMyCXNwaTsKKwlfX3U4ICAgIHRvczsKK307CisKK3N0cnVjdCBldGh0b29sX3Jhd2lwNF9zcGVjIHsKKwlfX2JlMzIJaXA0c3JjOworCV9fYmUzMglpcDRkc3Q7CisJX191OAloZGF0YVs2NF07Cit9OworCitzdHJ1Y3QgZXRodG9vbF9ldGhlcl9zcGVjIHsKKwlfX2JlMTYJZXRoZXJfdHlwZTsKKwlfX3U4CWZyYW1lX3NpemU7CisJX191OAllZnJhbWVbMTZdOworfTsKKworI2RlZmluZQlFVEhfUlhfTkZDX0lQNAkxCisjZGVmaW5lCUVUSF9SWF9ORkNfSVA2CTIKKworc3RydWN0IGV0aHRvb2xfdXNyaXA0X3NwZWMgeworCV9fYmUzMglpcDRzcmM7CisJX19iZTMyCWlwNGRzdDsKKwlfX2JlMzIJbDRfNF9ieXRlczsKKwlfX3U4ICAgIHRvczsKKwlfX3U4ICAgIGlwX3ZlcjsKKwlfX3U4ICAgIHByb3RvOworfTsKKworc3RydWN0IGV0aHRvb2xfcnhfZmxvd19zcGVjIHsKIAlfX3UzMgkJZmxvd190eXBlOwotCV9fdTY0CQlkYXRhOworCXVuaW9uIHsKKwkJc3RydWN0IGV0aHRvb2xfdGNwaXA0X3NwZWMJCXRjcF9pcDRfc3BlYzsKKwkJc3RydWN0IGV0aHRvb2xfdGNwaXA0X3NwZWMJCXVkcF9pcDRfc3BlYzsKKwkJc3RydWN0IGV0aHRvb2xfdGNwaXA0X3NwZWMJCXNjdHBfaXA0X3NwZWM7CisJCXN0cnVjdCBldGh0b29sX2FoX2VzcGlwNF9zcGVjCQlhaF9pcDRfc3BlYzsKKwkJc3RydWN0IGV0aHRvb2xfYWhfZXNwaXA0X3NwZWMJCWVzcF9pcDRfc3BlYzsKKwkJc3RydWN0IGV0aHRvb2xfcmF3aXA0X3NwZWMJCXJhd19pcDRfc3BlYzsKKwkJc3RydWN0IGV0aHRvb2xfZXRoZXJfc3BlYwkJZXRoZXJfc3BlYzsKKwkJc3RydWN0IGV0aHRvb2xfdXNyaXA0X3NwZWMJCXVzcl9pcDRfc3BlYzsKKwkJX191OAkJCQkJaGRhdGFbNjRdOworCX0gaF91LCBtX3U7IC8qIGVudHJ5LCBtYXNrICovCisJX191NjQJCXJpbmdfY29va2llOworCV9fdTMyCQlsb2NhdGlvbjsKK307CisKK3N0cnVjdCBldGh0b29sX3J4bmZjIHsKKwlfX3UzMgkJCQljbWQ7CisJX191MzIJCQkJZmxvd190eXBlOworCS8qIFRoZSByeCBmbG93IGhhc2ggdmFsdWUgb3IgdGhlIHJ1bGUgREIgc2l6ZSAqLworCV9fdTY0CQkJCWRhdGE7CisJc3RydWN0IGV0aHRvb2xfcnhfZmxvd19zcGVjCWZzOworCV9fdTMyCQkJCXJ1bGVfY250OworCV9fdTMyCQkJCXJ1bGVfbG9jc1swXTsKIH07CiAKICNpZmRlZiBfX0tFUk5FTF9fCkBAIC00MTcsOCArNDgzLDggQEAKIAkvKiB0aGUgZm9sbG93aW5nIGhvb2tzIGFyZSBvYnNvbGV0ZSAqLwogCWludAkoKnNlbGZfdGVzdF9jb3VudCkoc3RydWN0IG5ldF9kZXZpY2UgKik7LyogdXNlIGdldF9zc2V0X2NvdW50ICovCiAJaW50CSgqZ2V0X3N0YXRzX2NvdW50KShzdHJ1Y3QgbmV0X2RldmljZSAqKTsvKiB1c2UgZ2V0X3NzZXRfY291bnQgKi8KLQlpbnQJKCpnZXRfcnhoYXNoKShzdHJ1Y3QgbmV0X2RldmljZSAqLCBzdHJ1Y3QgZXRodG9vbF9yeG5mYyAqKTsKLQlpbnQJKCpzZXRfcnhoYXNoKShzdHJ1Y3QgbmV0X2RldmljZSAqLCBzdHJ1Y3QgZXRodG9vbF9yeG5mYyAqKTsKKwlpbnQJKCpnZXRfcnhuZmMpKHN0cnVjdCBuZXRfZGV2aWNlICosIHN0cnVjdCBldGh0b29sX3J4bmZjICosIHZvaWQgKik7CisJaW50CSgqc2V0X3J4bmZjKShzdHJ1Y3QgbmV0X2RldmljZSAqLCBzdHJ1Y3QgZXRodG9vbF9yeG5mYyAqKTsKIH07CiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCkBAIC00NjksNiArNTM1LDEyIEBACiAjZGVmaW5lCUVUSFRPT0xfU1JYRkgJCTB4MDAwMDAwMmEgLyogU2V0IFJYIGZsb3cgaGFzaCBjb25maWd1cmF0aW9uICovCiAjZGVmaW5lIEVUSFRPT0xfR0dSTwkJMHgwMDAwMDAyYiAvKiBHZXQgR1JPIGVuYWJsZSAoZXRodG9vbF92YWx1ZSkgKi8KICNkZWZpbmUgRVRIVE9PTF9TR1JPCQkweDAwMDAwMDJjIC8qIFNldCBHUk8gZW5hYmxlIChldGh0b29sX3ZhbHVlKSAqLworI2RlZmluZQlFVEhUT09MX0dSWFJJTkdTCTB4MDAwMDAwMmQgLyogR2V0IFJYIHJpbmdzIGF2YWlsYWJsZSBmb3IgTEIgKi8KKyNkZWZpbmUJRVRIVE9PTF9HUlhDTFNSTENOVAkweDAwMDAwMDJlIC8qIEdldCBSWCBjbGFzcyBydWxlIGNvdW50ICovCisjZGVmaW5lCUVUSFRPT0xfR1JYQ0xTUlVMRQkweDAwMDAwMDJmIC8qIEdldCBSWCBjbGFzc2lmaWNhdGlvbiBydWxlICovCisjZGVmaW5lCUVUSFRPT0xfR1JYQ0xTUkxBTEwJMHgwMDAwMDAzMCAvKiBHZXQgYWxsIFJYIGNsYXNzaWZpY2F0aW9uIHJ1bGUgKi8KKyNkZWZpbmUJRVRIVE9PTF9TUlhDTFNSTERFTAkweDAwMDAwMDMxIC8qIERlbGV0ZSBSWCBjbGFzc2lmaWNhdGlvbiBydWxlICovCisjZGVmaW5lCUVUSFRPT0xfU1JYQ0xTUkxJTlMJMHgwMDAwMDAzMiAvKiBJbnNlcnQgUlggY2xhc3NpZmljYXRpb24gcnVsZSAqLwogCiAvKiBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgY29kZSAqLwogI2RlZmluZSBTUEFSQ19FVEhfR1NFVAkJRVRIVE9PTF9HU0VUCkBAIC01NjUsOSArNjM3LDEzIEBACiAjZGVmaW5lCVVEUF9WNl9GTE9XCTB4MDYKICNkZWZpbmUJU0NUUF9WNl9GTE9XCTB4MDcKICNkZWZpbmUJQUhfRVNQX1Y2X0ZMT1cJMHgwOAorI2RlZmluZQlBSF9WNF9GTE9XCTB4MDkKKyNkZWZpbmUJRVNQX1Y0X0ZMT1cJMHgwYQorI2RlZmluZQlBSF9WNl9GTE9XCTB4MGIKKyNkZWZpbmUJRVNQX1Y2X0ZMT1cJMHgwYworI2RlZmluZQlJUF9VU0VSX0ZMT1cJMHgwZAogCiAvKiBMMy1MNCBuZXR3b3JrIHRyYWZmaWMgZmxvdyBoYXNoIG9wdGlvbnMgKi8KLSNkZWZpbmUJUlhIX0RFVl9QT1JUCSgxIDw8IDApCiAjZGVmaW5lCVJYSF9MMkRBCSgxIDw8IDEpCiAjZGVmaW5lCVJYSF9WTEFOCSgxIDw8IDIpCiAjZGVmaW5lCVJYSF9MM19QUk9UTwkoMSA8PCAzKQpAQCAtNTc3LDUgKzY1Myw2IEBACiAjZGVmaW5lCVJYSF9MNF9CXzJfMwkoMSA8PCA3KSAvKiBkc3QgcG9ydCBpbiBjYXNlIG9mIFRDUC9VRFAvU0NUUCAqLwogI2RlZmluZQlSWEhfRElTQ0FSRAkoMSA8PCAzMSkKIAorI2RlZmluZQlSWF9DTFNfRkxPV19ESVNDCTB4ZmZmZmZmZmZmZmZmZmZmZlVMTAogCiAjZW5kaWYgLyogX0xJTlVYX0VUSFRPT0xfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaCBiL2luY2x1ZGUvbGludXgvZXZlbnRwb2xsLmgKaW5kZXggZjFlMWQzYy4uZjY4NTZhNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaAorKysgYi9pbmNsdWRlL2xpbnV4L2V2ZW50cG9sbC5oCkBAIC02MSw3ICs2MSw2IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgZXZlbnRwb2xsX2luaXRfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlJTklUX0xJU1RfSEVBRCgmZmlsZS0+Zl9lcF9saW5rcyk7Ci0Jc3Bpbl9sb2NrX2luaXQoJmZpbGUtPmZfZXBfbG9jayk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy5oIGIvaW5jbHVkZS9saW51eC9mcy5oCmluZGV4IDkyNzM0YzAuLjFjZDQ0ZjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ZzLmgKQEAgLTE0MSw2ICsxNDEsNyBAQAogI2RlZmluZSBNU19SRUxBVElNRQkoMTw8MjEpCS8qIFVwZGF0ZSBhdGltZSByZWxhdGl2ZSB0byBtdGltZS9jdGltZS4gKi8KICNkZWZpbmUgTVNfS0VSTk1PVU5UCSgxPDwyMikgLyogdGhpcyBpcyBhIGtlcm5fbW91bnQgY2FsbCAqLwogI2RlZmluZSBNU19JX1ZFUlNJT04JKDE8PDIzKSAvKiBVcGRhdGUgaW5vZGUgSV92ZXJzaW9uIGZpZWxkICovCisjZGVmaW5lIE1TX1NUUklDVEFUSU1FCSgxPDwyNCkgLyogQWx3YXlzIHBlcmZvcm0gYXRpbWUgdXBkYXRlcyAqLwogI2RlZmluZSBNU19BQ1RJVkUJKDE8PDMwKQogI2RlZmluZSBNU19OT1VTRVIJKDE8PDMxKQogCkBAIC04NDgsNiArODQ5LDcgQEAKICNkZWZpbmUgZl9kZW50cnkJZl9wYXRoLmRlbnRyeQogI2RlZmluZSBmX3Zmc21udAlmX3BhdGgubW50CiAJY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucwkqZl9vcDsKKwlzcGlubG9ja190CQlmX2xvY2s7ICAvKiBmX2VwX2xpbmtzLCBmX2ZsYWdzICovCiAJYXRvbWljX2xvbmdfdAkJZl9jb3VudDsKIAl1bnNpZ25lZCBpbnQgCQlmX2ZsYWdzOwogCWZtb2RlX3QJCQlmX21vZGU7CkBAIC04NjYsNyArODY4LDYgQEAKICNpZmRlZiBDT05GSUdfRVBPTEwKIAkvKiBVc2VkIGJ5IGZzL2V2ZW50cG9sbC5jIHRvIGxpbmsgYWxsIHRoZSBob29rcyB0byB0aGlzIGZpbGUgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkCWZfZXBfbGlua3M7Ci0Jc3BpbmxvY2tfdAkJZl9lcF9sb2NrOwogI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfRVBPTEwgKi8KIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZQkqZl9tYXBwaW5nOwogI2lmZGVmIENPTkZJR19ERUJVR19XUklURUNPVU5UCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2dlbl9zdGF0cy5oIGIvaW5jbHVkZS9saW51eC9nZW5fc3RhdHMuaAppbmRleCAxM2Y0ZTc0Li4wZmZhNDFkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2dlbl9zdGF0cy5oCisrKyBiL2luY2x1ZGUvbGludXgvZ2VuX3N0YXRzLmgKQEAgLTIyLDcgKzIyLDcgQEAKIHsKIAlfX3U2NAlieXRlczsKIAlfX3UzMglwYWNrZXRzOwotfTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKioKICAqIHN0cnVjdCBnbmV0X3N0YXRzX3JhdGVfZXN0IC0gcmF0ZSBlc3RpbWF0b3IKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZ2VuaGQuaCBiL2luY2x1ZGUvbGludXgvZ2VuaGQuaAppbmRleCAxNjk0OGVhLi42MzRjNTMwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2dlbmhkLmgKKysrIGIvaW5jbHVkZS9saW51eC9nZW5oZC5oCkBAIC0zMzMsMTEgKzMzMywxMCBAQAogCQlwYXJ0X3RvX2Rpc2socGFydCktPnBhcnQwLmluX2ZsaWdodC0tOwogfQogCi0vKiBkcml2ZXJzL2Jsb2NrL2xsX3J3X2Jsay5jICovCisvKiBibG9jay9ibGstY29yZS5jICovCiBleHRlcm4gdm9pZCBwYXJ0X3JvdW5kX3N0YXRzKGludCBjcHUsIHN0cnVjdCBoZF9zdHJ1Y3QgKnBhcnQpOwogCi0vKiBkcml2ZXJzL2Jsb2NrL2dlbmhkLmMgKi8KLWV4dGVybiBpbnQgZ2V0X2Jsa2Rldl9saXN0KGNoYXIgKiwgaW50KTsKKy8qIGJsb2NrL2dlbmhkLmMgKi8KIGV4dGVybiB2b2lkIGFkZF9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKTsKIGV4dGVybiB2b2lkIGRlbF9nZW5kaXNrKHN0cnVjdCBnZW5kaXNrICpncCk7CiBleHRlcm4gdm9pZCB1bmxpbmtfZ2VuZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZ3ApOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9oZGxjLmggYi9pbmNsdWRlL2xpbnV4L2hkbGMuaAppbmRleCBmZDQ3YTE1Li42YTZlNzAxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2hkbGMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2hkbGMuaApAQCAtMzgsNiArMzgsNyBAQAogCWludCAoKmlvY3RsKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmcik7CiAJX19iZTE2ICgqdHlwZV90cmFucykoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAJaW50ICgqbmV0aWZfcngpKHN0cnVjdCBza19idWZmICpza2IpOworCWludCAoKnhtaXQpKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCXN0cnVjdCBtb2R1bGUgKm1vZHVsZTsKIAlzdHJ1Y3QgaGRsY19wcm90byAqbmV4dDsgLyogbmV4dCBwcm90b2NvbCBpbiB0aGUgbGlzdCAqLwogfTsKQEAgLTEwMiw2ICsxMDMsMTAgQEAKIGludCBoZGxjX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAvKiBNdXN0IGJlIGNhbGxlZCBieSBoYXJkd2FyZSBkcml2ZXIgd2hlbiBIRExDIGRldmljZSBpcyBiZWluZyBjbG9zZWQgKi8KIHZvaWQgaGRsY19jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKy8qIE1heSBiZSB1c2VkIGJ5IGhhcmR3YXJlIGRyaXZlciAqLworaW50IGhkbGNfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSk7CisvKiBNdXN0IGJlIHBvaW50ZWQgdG8gYnkgaHcgZHJpdmVyJ3MgZGV2LT5uZXRkZXZfb3BzLT5uZG9fc3RhcnRfeG1pdCAqLworaW50IGhkbGNfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAogaW50IGF0dGFjaF9oZGxjX3Byb3RvY29sKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBoZGxjX3Byb3RvICpwcm90bywKIAkJCSBzaXplX3Qgc2l6ZSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2hkbGNkcnYuaCBiL2luY2x1ZGUvbGludXgvaGRsY2Rydi5oCmluZGV4IGJmNjMwMmYuLmMwMTBiNGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaGRsY2Rydi5oCisrKyBiL2luY2x1ZGUvbGludXgvaGRsY2Rydi5oCkBAIC0yMTUsNyArMjE1LDcgQEAKIAogCXN0cnVjdCBoZGxjZHJ2X2hkbGN0eCB7CiAJCXN0cnVjdCBoZGxjZHJ2X2hkbGNidWZmZXIgaGJ1ZjsKLQkJbG9uZyBpbl9oZGxjX3R4OworCQl1bnNpZ25lZCBsb25nIGluX2hkbGNfdHg7CiAJCS8qCiAJCSAqIDAgPSBzZW5kIGZsYWdzCiAJCSAqIDEgPSBzZW5kIHR4dGFpbCAoZmxhZ3MpCkBAIC0yNDEsNyArMjQxLDYgQEAKIAlzdHJ1Y3QgaGRsY2Rydl9iaXRidWZmZXIgYml0YnVmX2hkbGM7CiAjZW5kaWYgLyogSERMQ0RSVl9ERUJVRyAqLwogCi0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CiAJaW50IHB0dF9rZXllZDsKIAogCS8qIHF1ZXVlZCBza2IgZm9yIHRyYW5zbWlzc2lvbiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pYm10ci5oIGIvaW5jbHVkZS9saW51eC9pYm10ci5oCmluZGV4IDFjN2EwZGQuLjA2Njk1YjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWJtdHIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2libXRyLmgKQEAgLTIwNyw3ICsyMDcsNyBAQAogCXVuc2lnbmVkIHNob3J0IGV4c2FwX3N0YXRpb25faWQ7CiAJdW5zaWduZWQgc2hvcnQgZ2xvYmFsX2ludF9lbmFibGU7CiAJc3RydWN0IHNrX2J1ZmYgKmN1cnJlbnRfc2tiOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHRyX3N0YXRzOworCiAJdW5zaWduZWQgY2hhciBhdXRvX3NwZWVkc2F2ZTsKIAlvcGVuX3N0YXRlCQkJb3Blbl9zdGF0dXMsIHNhcF9zdGF0dXM7CiAJZW51bSB7TUFOVUFMLCBBVVRPTUFUSUN9CW9wZW5fbW9kZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWRlLmggYi9pbmNsdWRlL2xpbnV4L2lkZS5oCmluZGV4IDI1MDg3YWUuLjg1NGViYTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWRlLmgKKysrIGIvaW5jbHVkZS9saW51eC9pZGUuaApAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9tdXRleC5oPgogCi0jaWYgZGVmaW5lZChDT05GSUdfQ1JJUykgfHwgZGVmaW5lZChDT05GSUdfRlJWKQorI2lmIGRlZmluZWQoQ09ORklHX0NSSVMpIHx8IGRlZmluZWQoQ09ORklHX0ZSVikgfHwgZGVmaW5lZChDT05GSUdfTU4xMDMwMCkKICMgZGVmaW5lIFNVUFBPUlRfVkxCX1NZTkMgMAogI2Vsc2UKICMgZGVmaW5lIFNVUFBPUlRfVkxCX1NZTkMgMQpAQCAtMTkzLDI0ICsxOTMsOCBAQAogCWh3LT5pb19wb3J0cy5jdGxfYWRkciA9IGN0bF9hZGRyOwogfQogCi0vKiBmb3IgSURFIFBDSSBjb250cm9sbGVycyBpbiBsZWdhY3kgbW9kZSwgdGVtcG9yYXJ5ICovCi1zdGF0aWMgaW5saW5lIGludCBfX2lkZV9kZWZhdWx0X2lycSh1bnNpZ25lZCBsb25nIGJhc2UpCi17Ci0Jc3dpdGNoIChiYXNlKSB7Ci0jaWZkZWYgQ09ORklHX0lBNjQKLQljYXNlIDB4MWYwOiByZXR1cm4gaXNhX2lycV90b192ZWN0b3IoMTQpOwotCWNhc2UgMHgxNzA6IHJldHVybiBpc2FfaXJxX3RvX3ZlY3RvcigxNSk7Ci0jZWxzZQotCWNhc2UgMHgxZjA6IHJldHVybiAxNDsKLQljYXNlIDB4MTcwOiByZXR1cm4gMTU7Ci0jZW5kaWYKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19BUk0pIHx8IGRlZmluZWQoQ09ORklHX0ZSVikgfHwgZGVmaW5lZChDT05GSUdfTTY4SykgfHwgXAotICAgIGRlZmluZWQoQ09ORklHX01JUFMpIHx8IGRlZmluZWQoQ09ORklHX01OMTAzMDApIHx8IGRlZmluZWQoQ09ORklHX1BBUklTQykgXAotICAgIHx8IGRlZmluZWQoQ09ORklHX1BQQykgfHwgZGVmaW5lZChDT05GSUdfU1BBUkMpIHx8IGRlZmluZWQoQ09ORklHX1NQQVJDNjQpCisjaWYgZGVmaW5lZChDT05GSUdfQVJNKSB8fCBkZWZpbmVkKENPTkZJR19NNjhLKSB8fCBkZWZpbmVkKENPTkZJR19NSVBTKSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfUEFSSVNDKSB8fCBkZWZpbmVkKENPTkZJR19QUEMpIHx8IGRlZmluZWQoQ09ORklHX1NQQVJDKQogI2luY2x1ZGUgPGFzbS9pZGUuaD4KICNlbHNlCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvaWRlX2lvcHMuaD4KQEAgLTg2Niw3ICs4NTAsNyBAQAogCWlkZV9od2lmX3QJKnBvcnRzW01BWF9IT1NUX1BPUlRTICsgMV07CiAJdW5zaWduZWQgaW50CW5fcG9ydHM7CiAJc3RydWN0IGRldmljZQkqZGV2WzJdOwotCXVuc2lnbmVkIGludAkoKmluaXRfY2hpcHNldCkoc3RydWN0IHBjaV9kZXYgKik7CisJaW50CQkoKmluaXRfY2hpcHNldCkoc3RydWN0IHBjaV9kZXYgKik7CiAJaXJxX2hhbmRsZXJfdAlpcnFfaGFuZGxlcjsKIAl1bnNpZ25lZCBsb25nCWhvc3RfZmxhZ3M7CiAJdm9pZAkJKmhvc3RfcHJpdjsKQEAgLTExNDYsMTEgKzExMzAsMTQgQEAKIGV4dGVybiBpbnQgaWRlX3ZsYl9jbGs7CiBleHRlcm4gaW50IGlkZV9wY2lfY2xrOwogCi1leHRlcm4gaW50IGlkZV9lbmRfcmVxdWVzdCAoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgdXB0b2RhdGUsIGludCBucnNlY3MpOwotaW50IGlkZV9lbmRfZGVxdWV1ZWRfcmVxdWVzdChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwKLQkJCSAgICAgaW50IHVwdG9kYXRlLCBpbnQgbnJfc2VjdG9ycyk7CitpbnQgaWRlX2VuZF9yZXF1ZXN0KGlkZV9kcml2ZV90ICosIGludCwgaW50KTsKK2ludCBpZGVfZW5kX2RlcXVldWVkX3JlcXVlc3QoaWRlX2RyaXZlX3QgKiwgc3RydWN0IHJlcXVlc3QgKiwgaW50LCBpbnQpOwordm9pZCBpZGVfa2lsbF9ycShpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKIAotZXh0ZXJuIHZvaWQgaWRlX3NldF9oYW5kbGVyIChpZGVfZHJpdmVfdCAqZHJpdmUsIGlkZV9oYW5kbGVyX3QgKmhhbmRsZXIsIHVuc2lnbmVkIGludCB0aW1lb3V0LCBpZGVfZXhwaXJ5X3QgKmV4cGlyeSk7Cit2b2lkIF9faWRlX3NldF9oYW5kbGVyKGlkZV9kcml2ZV90ICosIGlkZV9oYW5kbGVyX3QgKiwgdW5zaWduZWQgaW50LAorCQkgICAgICAgaWRlX2V4cGlyeV90ICopOwordm9pZCBpZGVfc2V0X2hhbmRsZXIoaWRlX2RyaXZlX3QgKiwgaWRlX2hhbmRsZXJfdCAqLCB1bnNpZ25lZCBpbnQsCisJCSAgICAgaWRlX2V4cGlyeV90ICopOwogCiB2b2lkIGlkZV9leGVjdXRlX2NvbW1hbmQoaWRlX2RyaXZlX3QgKiwgdTgsIGlkZV9oYW5kbGVyX3QgKiwgdW5zaWduZWQgaW50LAogCQkJIGlkZV9leHBpcnlfdCAqKTsKQEAgLTExNjksMTMgKzExNTYsMTQgQEAKIAogaW50IGlkZV93YWl0X3N0YXQoaWRlX3N0YXJ0c3RvcF90ICosIGlkZV9kcml2ZV90ICosIHU4LCB1OCwgdW5zaWduZWQgbG9uZyk7CiAKK2lkZV9zdGFydHN0b3BfdCBpZGVfZG9fcGFya191bnBhcmsoaWRlX2RyaXZlX3QgKiwgc3RydWN0IHJlcXVlc3QgKik7CitpZGVfc3RhcnRzdG9wX3QgaWRlX2RvX2RldnNldChpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKKwogZXh0ZXJuIGlkZV9zdGFydHN0b3BfdCBpZGVfZG9fcmVzZXQgKGlkZV9kcml2ZV90ICopOwogCiBleHRlcm4gaW50IGlkZV9kZXZzZXRfZXhlY3V0ZShpZGVfZHJpdmVfdCAqZHJpdmUsCiAJCQkgICAgICBjb25zdCBzdHJ1Y3QgaWRlX2RldnNldCAqc2V0dGluZywgaW50IGFyZyk7CiAKLWV4dGVybiB2b2lkIGlkZV9kb19kcml2ZV9jbWQoaWRlX2RyaXZlX3QgKiwgc3RydWN0IHJlcXVlc3QgKik7Ci0KIGV4dGVybiB2b2lkIGlkZV9lbmRfZHJpdmVfY21kKGlkZV9kcml2ZV90ICosIHU4LCB1OCk7CiAKIHZvaWQgaWRlX3RmX2R1bXAoY29uc3QgY2hhciAqLCBzdHJ1Y3QgaWRlX3Rhc2tmaWxlICopOwpAQCAtMTIwMCwxMCArMTE4OCw2IEBACiB1OCBpZGVfcmVhZF9lcnJvcihpZGVfZHJpdmVfdCAqKTsKIHZvaWQgaWRlX3JlYWRfYmNvdW50X2FuZF9pcmVhc29uKGlkZV9kcml2ZV90ICosIHUxNiAqLCB1OCAqKTsKIAotZXh0ZXJuIGludCBkcml2ZV9pc19yZWFkeShpZGVfZHJpdmVfdCAqKTsKLQotdm9pZCBpZGVfcGt0Y21kX3RmX2xvYWQoaWRlX2RyaXZlX3QgKiwgdTMyLCB1MTYsIHU4KTsKLQogaW50IGlkZV9jaGVja19hdGFwaV9kZXZpY2UoaWRlX2RyaXZlX3QgKiwgY29uc3QgY2hhciAqKTsKIAogdm9pZCBpZGVfaW5pdF9wYyhzdHJ1Y3QgaWRlX2F0YXBpX3BjICopOwpAQCAtMTI1MSw2ICsxMjM1LDggQEAKIAogaW50IGlkZV90YXNrZmlsZV9pb2N0bChpZGVfZHJpdmVfdCAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcpOwogCitpbnQgaWRlX2Rldl9yZWFkX2lkKGlkZV9kcml2ZV90ICosIHU4LCB1MTYgKik7CisKIGV4dGVybiBpbnQgaWRlX2RyaXZlaWRfdXBkYXRlKGlkZV9kcml2ZV90ICopOwogZXh0ZXJuIGludCBpZGVfY29uZmlnX2RyaXZlX3NwZWVkKGlkZV9kcml2ZV90ICosIHU4KTsKIGV4dGVybiB1OCBlaWdodHlfbmludHlfdGhyZWUgKGlkZV9kcml2ZV90ICopOwpAQCAtMTI4MCw3ICsxMjY2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBpZGVfcGNpX3NldHVwX3BvcnRzKHN0cnVjdCBwY2lfZGV2ICosIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvICosIGludCwKK3ZvaWQgaWRlX3BjaV9zZXR1cF9wb3J0cyhzdHJ1Y3QgcGNpX2RldiAqLCBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyAqLAogCQkJIGh3X3JlZ3NfdCAqLCBod19yZWdzX3QgKiopOwogdm9pZCBpZGVfc2V0dXBfcGNpX25vaXNlKHN0cnVjdCBwY2lfZGV2ICosIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvICopOwogCkBAIC0xMzQ5LDEwICsxMzM1LDYgQEAKIAlJREVfSEZMQUdfRVJST1JfU1RPUFNfRklGTwk9ICgxIDw8IDE5KSwKIAkvKiBzZXJpYWxpemUgcG9ydHMgKi8KIAlJREVfSEZMQUdfU0VSSUFMSVpFCQk9ICgxIDw8IDIwKSwKLQkvKiB1c2UgbGVnYWN5IElSUXMgKi8KLQlJREVfSEZMQUdfTEVHQUNZX0lSUVMJCT0gKDEgPDwgMjEpLAotCS8qIGZvcmNlIHVzZSBvZiBsZWdhY3kgSVJRcyAqLwotCUlERV9IRkxBR19GT1JDRV9MRUdBQ1lfSVJRUwk9ICgxIDw8IDIyKSwKIAkvKiBob3N0IGlzIFRSTTI5MCAqLwogCUlERV9IRkxBR19UUk0yOTAJCT0gKDEgPDwgMjMpLAogCS8qIHVzZSAzMi1iaXQgSS9PIG9wcyAqLwpAQCAtMTM4MCw3ICsxMzYyLDcgQEAKIAogc3RydWN0IGlkZV9wb3J0X2luZm8gewogCWNoYXIJCQkqbmFtZTsKLQl1bnNpZ25lZCBpbnQJCSgqaW5pdF9jaGlwc2V0KShzdHJ1Y3QgcGNpX2RldiAqKTsKKwlpbnQJCQkoKmluaXRfY2hpcHNldCkoc3RydWN0IHBjaV9kZXYgKik7CiAJdm9pZAkJCSgqaW5pdF9pb3BzKShpZGVfaHdpZl90ICopOwogCXZvaWQgICAgICAgICAgICAgICAgICAgICgqaW5pdF9od2lmKShpZGVfaHdpZl90ICopOwogCWludAkJCSgqaW5pdF9kbWEpKGlkZV9od2lmX3QgKiwKQEAgLTE0NzEsNiArMTQ1Myw3IEBACiAKIHZvaWQgaWRlX2RtYV9sb3N0X2lycShpZGVfZHJpdmVfdCAqKTsKIHZvaWQgaWRlX2RtYV90aW1lb3V0KGlkZV9kcml2ZV90ICopOworaWRlX3N0YXJ0c3RvcF90IGlkZV9kbWFfdGltZW91dF9yZXRyeShpZGVfZHJpdmVfdCAqLCBpbnQpOwogCiAjZWxzZQogc3RhdGljIGlubGluZSBpbnQgaWRlX2lkX2RtYV9idWcoaWRlX2RyaXZlX3QgKmRyaXZlKSB7IHJldHVybiAwOyB9CkBAIC0xNDgyLDIxICsxNDY1LDI0IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgaWRlX2RtYV92ZXJib3NlKGlkZV9kcml2ZV90ICpkcml2ZSkgeyA7IH0KIHN0YXRpYyBpbmxpbmUgaW50IGlkZV9zZXRfZG1hKGlkZV9kcml2ZV90ICpkcml2ZSkgeyByZXR1cm4gMTsgfQogc3RhdGljIGlubGluZSB2b2lkIGlkZV9jaGVja19kbWFfY3JjKGlkZV9kcml2ZV90ICpkcml2ZSkgeyA7IH0KK3N0YXRpYyBpbmxpbmUgaWRlX3N0YXJ0c3RvcF90IGlkZV9kbWFfdGltZW91dF9yZXRyeShpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBlcnJvcikgeyByZXR1cm4gaWRlX3N0b3BwZWQ7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBpZGVfcmVsZWFzZV9kbWFfZW5naW5lKGlkZV9od2lmX3QgKmh3aWYpIHsgOyB9CiAjZW5kaWYgLyogQ09ORklHX0JMS19ERVZfSURFRE1BICovCiAKICNpZmRlZiBDT05GSUdfQkxLX0RFVl9JREVBQ1BJCitpbnQgaWRlX2FjcGlfaW5pdCh2b2lkKTsKIGV4dGVybiBpbnQgaWRlX2FjcGlfZXhlY190ZnMoaWRlX2RyaXZlX3QgKmRyaXZlKTsKIGV4dGVybiB2b2lkIGlkZV9hY3BpX2dldF90aW1pbmcoaWRlX2h3aWZfdCAqaHdpZik7CiBleHRlcm4gdm9pZCBpZGVfYWNwaV9wdXNoX3RpbWluZyhpZGVfaHdpZl90ICpod2lmKTsKLWV4dGVybiB2b2lkIGlkZV9hY3BpX2luaXQoaWRlX2h3aWZfdCAqaHdpZik7Cit2b2lkIGlkZV9hY3BpX2luaXRfcG9ydChpZGVfaHdpZl90ICopOwogdm9pZCBpZGVfYWNwaV9wb3J0X2luaXRfZGV2aWNlcyhpZGVfaHdpZl90ICopOwogZXh0ZXJuIHZvaWQgaWRlX2FjcGlfc2V0X3N0YXRlKGlkZV9od2lmX3QgKmh3aWYsIGludCBvbik7CiAjZWxzZQorc3RhdGljIGlubGluZSBpbnQgaWRlX2FjcGlfaW5pdCh2b2lkKSB7IHJldHVybiAwOyB9CiBzdGF0aWMgaW5saW5lIGludCBpZGVfYWNwaV9leGVjX3RmcyhpZGVfZHJpdmVfdCAqZHJpdmUpIHsgcmV0dXJuIDA7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBpZGVfYWNwaV9nZXRfdGltaW5nKGlkZV9od2lmX3QgKmh3aWYpIHsgOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgaWRlX2FjcGlfcHVzaF90aW1pbmcoaWRlX2h3aWZfdCAqaHdpZikgeyA7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpZGVfYWNwaV9pbml0KGlkZV9od2lmX3QgKmh3aWYpIHsgOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgaWRlX2FjcGlfaW5pdF9wb3J0KGlkZV9od2lmX3QgKmh3aWYpIHsgOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgaWRlX2FjcGlfcG9ydF9pbml0X2RldmljZXMoaWRlX2h3aWZfdCAqaHdpZikgeyA7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBpZGVfYWNwaV9zZXRfc3RhdGUoaWRlX2h3aWZfdCAqaHdpZiwgaW50IG9uKSB7fQogI2VuZGlmCkBAIC0xNTMwLDkgKzE1MTYsNyBAQAogCWh3aWYtPmh3aWZfZGF0YSA9IGRhdGE7CiB9CiAKLWNvbnN0IGNoYXIgKmlkZV94ZmVyX3ZlcmJvc2UodTggbW9kZSk7CiBleHRlcm4gdm9pZCBpZGVfdG9nZ2xlX2JvdW5jZShpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBvbik7Ci1leHRlcm4gaW50IGlkZV9zZXRfeGZlcl9yYXRlKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggcmF0ZSk7CiAKIHU2NCBpZGVfZ2V0X2xiYV9hZGRyKHN0cnVjdCBpZGVfdGFza2ZpbGUgKiwgaW50KTsKIHU4IGlkZV9kdW1wX3N0YXR1cyhpZGVfZHJpdmVfdCAqLCBjb25zdCBjaGFyICosIHU4KTsKQEAgLTE1NzEsMTQgKzE1NTUsMTggQEAKIAkJICAgICAgc3RydWN0IGlkZV90aW1pbmcgKiwgdW5zaWduZWQgaW50KTsKIGludCBpZGVfdGltaW5nX2NvbXB1dGUoaWRlX2RyaXZlX3QgKiwgdTgsIHN0cnVjdCBpZGVfdGltaW5nICosIGludCwgaW50KTsKIAorI2lmZGVmIENPTkZJR19JREVfWEZFUl9NT0RFCiBpbnQgaWRlX3NjYW5fcGlvX2JsYWNrbGlzdChjaGFyICopOwotCitjb25zdCBjaGFyICppZGVfeGZlcl92ZXJib3NlKHU4KTsKIHU4IGlkZV9nZXRfYmVzdF9waW9fbW9kZShpZGVfZHJpdmVfdCAqLCB1OCwgdTgpOwotCiBpbnQgaWRlX3NldF9waW9fbW9kZShpZGVfZHJpdmVfdCAqLCB1OCk7CiBpbnQgaWRlX3NldF9kbWFfbW9kZShpZGVfZHJpdmVfdCAqLCB1OCk7Ci0KIHZvaWQgaWRlX3NldF9waW8oaWRlX2RyaXZlX3QgKiwgdTgpOworaW50IGlkZV9zZXRfeGZlcl9yYXRlKGlkZV9kcml2ZV90ICosIHU4KTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgaWRlX3NldF9waW8oaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCBwaW8pIHsgOyB9CitzdGF0aWMgaW5saW5lIGludCBpZGVfc2V0X3hmZXJfcmF0ZShpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IHJhdGUpIHsgcmV0dXJuIC0xOyB9CisjZW5kaWYKIAogc3RhdGljIGlubGluZSB2b2lkIGlkZV9zZXRfbWF4X3BpbyhpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CkBAIC0xNjExLDYgKzE1OTksMTAgQEAKICNkZWZpbmUgaWRlX3BvcnRfZm9yX2VhY2hfZGV2KGksIGRldiwgcG9ydCkgXAogCWZvciAoKGkpID0gMDsgKChkZXYpID0gKHBvcnQpLT5kZXZpY2VzW2ldKSB8fCAoaSkgPCBNQVhfRFJJVkVTOyAoaSkrKykKIAorI2RlZmluZSBpZGVfcG9ydF9mb3JfZWFjaF9wcmVzZW50X2RldihpLCBkZXYsIHBvcnQpIFwKKwlmb3IgKChpKSA9IDA7ICgoZGV2KSA9IChwb3J0KS0+ZGV2aWNlc1tpXSkgfHwgKGkpIDwgTUFYX0RSSVZFUzsgKGkpKyspIFwKKwkJaWYgKChkZXYpLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUFJFU0VOVCkKKwogI2RlZmluZSBpZGVfaG9zdF9mb3JfZWFjaF9wb3J0KGksIHBvcnQsIGhvc3QpIFwKIAlmb3IgKChpKSA9IDA7ICgocG9ydCkgPSAoaG9zdCktPnBvcnRzW2ldKSB8fCAoaSkgPCBNQVhfSE9TVF9QT1JUUzsgKGkpKyspCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWVlZTgwMjExLmggYi9pbmNsdWRlL2xpbnV4L2llZWU4MDIxMS5oCmluZGV4IGM0ZTZjYTEuLmIxYmI4MTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWVlZTgwMjExLmgKKysrIGIvaW5jbHVkZS9saW51eC9pZWVlODAyMTEuaApAQCAtNTI3LDYgKzUyNyw4IEBACiAJdTggdmlydHVhbF9tYXBbMF07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAorI2RlZmluZSBXTEFOX1NBX1FVRVJZX1RSX0lEX0xFTiAxNgorCiBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgewogCV9fbGUxNiBmcmFtZV9jb250cm9sOwogCV9fbGUxNiBkdXJhdGlvbjsKQEAgLTY0Niw2ICs2NDgsMTAgQEAKIAkJCQkJdTggYWN0aW9uX2NvZGU7CiAJCQkJCXU4IHZhcmlhYmxlWzBdOwogCQkJCX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgbWVzaF9hY3Rpb247CisJCQkJc3RydWN0IHsKKwkJCQkJdTggYWN0aW9uOworCQkJCQl1OCB0cmFuc19pZFtXTEFOX1NBX1FVRVJZX1RSX0lEX0xFTl07CisJCQkJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgc2FfcXVlcnk7CiAJCQl9IHU7CiAJCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGFjdGlvbjsKIAl9IHU7CkBAIC02NTUsNiArNjYxLDE1IEBACiAjZGVmaW5lIElFRUU4MDIxMV9NSU5fQUNUSU9OX1NJWkUgb2Zmc2V0b2Yoc3RydWN0IGllZWU4MDIxMV9tZ210LCB1LmFjdGlvbi51KQogCiAKKy8qIE1hbmFnZW1lbnQgTUlDIGluZm9ybWF0aW9uIGVsZW1lbnQgKElFRUUgODAyLjExdykgKi8KK3N0cnVjdCBpZWVlODAyMTFfbW1pZSB7CisJdTggZWxlbWVudF9pZDsKKwl1OCBsZW5ndGg7CisJX19sZTE2IGtleV9pZDsKKwl1OCBzZXF1ZW5jZV9udW1iZXJbNl07CisJdTggbWljWzhdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKIC8qIENvbnRyb2wgZnJhbWVzICovCiBzdHJ1Y3QgaWVlZTgwMjExX3J0cyB7CiAJX19sZTE2IGZyYW1lX2NvbnRyb2w7CkBAIC04OTksNiArOTE0LDkgQEAKIAkvKiA4MDIuMTFnICovCiAJV0xBTl9TVEFUVVNfQVNTT0NfREVOSUVEX05PU0hPUlRUSU1FID0gMjUsCiAJV0xBTl9TVEFUVVNfQVNTT0NfREVOSUVEX05PRFNTU09GRE0gPSAyNiwKKwkvKiA4MDIuMTF3ICovCisJV0xBTl9TVEFUVVNfQVNTT0NfUkVKRUNURURfVEVNUE9SQVJJTFkgPSAzMCwKKwlXTEFOX1NUQVRVU19ST0JVU1RfTUdNVF9GUkFNRV9QT0xJQ1lfVklPTEFUSU9OID0gMzEsCiAJLyogODAyLjExaSAqLwogCVdMQU5fU1RBVFVTX0lOVkFMSURfSUUgPSA0MCwKIAlXTEFOX1NUQVRVU19JTlZBTElEX0dST1VQX0NJUEhFUiA9IDQxLApAQCAtMTAxOCw2ICsxMDM2LDggQEAKIAlXTEFOX0VJRF9IVF9JTkZPUk1BVElPTiA9IDYxLAogCS8qIDgwMi4xMWkgKi8KIAlXTEFOX0VJRF9SU04gPSA0OCwKKwlXTEFOX0VJRF9USU1FT1VUX0lOVEVSVkFMID0gNTYsCisJV0xBTl9FSURfTU1JRSA9IDc2IC8qIDgwMi4xMXcgKi8sCiAJV0xBTl9FSURfV1BBID0gMjIxLAogCVdMQU5fRUlEX0dFTkVSSUMgPSAyMjEsCiAJV0xBTl9FSURfVkVORE9SX1NQRUNJRklDID0gMjIxLApAQCAtMTAzMCw2ICsxMDUwLDggQEAKIAlXTEFOX0NBVEVHT1JZX1FPUyA9IDEsCiAJV0xBTl9DQVRFR09SWV9ETFMgPSAyLAogCVdMQU5fQ0FURUdPUllfQkFDSyA9IDMsCisJV0xBTl9DQVRFR09SWV9QVUJMSUMgPSA0LAorCVdMQU5fQ0FURUdPUllfU0FfUVVFUlkgPSA4LAogCVdMQU5fQ0FURUdPUllfV01NID0gMTcsCiB9OwogCkBAIC0xMTA0LDYgKzExMjYsMTIgQEAKIAl9OwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKK2VudW0gaWVlZTgwMjExX3RpbWVvdXRfaW50ZXJ2YWxfdHlwZSB7CisJV0xBTl9USU1FT1VUX1JFQVNTT0NfREVBRExJTkUgPSAxIC8qIDgwMi4xMXIgKi8sCisJV0xBTl9USU1FT1VUX0tFWV9MSUZFVElNRSA9IDIgLyogODAyLjExciAqLywKKwlXTEFOX1RJTUVPVVRfQVNTT0NfQ09NRUJBQ0sgPSAzIC8qIDgwMi4xMXcgKi8sCit9OworCiAvKiBCQUNLIGFjdGlvbiBjb2RlICovCiBlbnVtIGllZWU4MDIxMV9iYWNrX2FjdGlvbmNvZGUgewogCVdMQU5fQUNUSU9OX0FEREJBX1JFUSA9IDAsCkBAIC0xMTE4LDYgKzExNDYsMTMgQEAKIAlXTEFOX0JBQ0tfVElNRVIgPSAyLAogfTsKIAorLyogU0EgUXVlcnkgYWN0aW9uICovCitlbnVtIGllZWU4MDIxMV9zYV9xdWVyeV9hY3Rpb24geworCVdMQU5fQUNUSU9OX1NBX1FVRVJZX1JFUVVFU1QgPSAwLAorCVdMQU5fQUNUSU9OX1NBX1FVRVJZX1JFU1BPTlNFID0gMSwKK307CisKKwogLyogQS1NU0RVIDgwMi4xMW4gKi8KICNkZWZpbmUgSUVFRTgwMjExX1FPU19DT05UUk9MX0FfTVNEVV9QUkVTRU5UIDB4MDA4MAogCkBAIC0xMTI4LDYgKzExNjMsNyBAQAogLyogcmVzZXJ2ZWQ6IAkJCQkweDAwMEZBQzAzICovCiAjZGVmaW5lIFdMQU5fQ0lQSEVSX1NVSVRFX0NDTVAJCTB4MDAwRkFDMDQKICNkZWZpbmUgV0xBTl9DSVBIRVJfU1VJVEVfV0VQMTA0CTB4MDAwRkFDMDUKKyNkZWZpbmUgV0xBTl9DSVBIRVJfU1VJVEVfQUVTX0NNQUMJMHgwMDBGQUMwNgogCiAjZGVmaW5lIFdMQU5fTUFYX0tFWV9MRU4JCTMyCiAKQEAgLTExODUsNCArMTIyMSwxNDkgQEAKIAkJcmV0dXJuIGhkci0+YWRkcjE7CiB9CiAKKy8qKgorICogaWVlZTgwMjExX2lzX3JvYnVzdF9tZ210X2ZyYW1lIC0gY2hlY2sgaWYgZnJhbWUgaXMgYSByb2J1c3QgbWFuYWdlbWVudCBmcmFtZQorICogQGhkcjogdGhlIGZyYW1lIChidWZmZXIgbXVzdCBpbmNsdWRlIGF0IGxlYXN0IHRoZSBmaXJzdCBvY3RldCBvZiBwYXlsb2FkKQorICovCitzdGF0aWMgaW5saW5lIGJvb2wgaWVlZTgwMjExX2lzX3JvYnVzdF9tZ210X2ZyYW1lKHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIpCit7CisJaWYgKGllZWU4MDIxMV9pc19kaXNhc3NvYyhoZHItPmZyYW1lX2NvbnRyb2wpIHx8CisJICAgIGllZWU4MDIxMV9pc19kZWF1dGgoaGRyLT5mcmFtZV9jb250cm9sKSkKKwkJcmV0dXJuIHRydWU7CisKKwlpZiAoaWVlZTgwMjExX2lzX2FjdGlvbihoZHItPmZyYW1lX2NvbnRyb2wpKSB7CisJCXU4ICpjYXRlZ29yeTsKKworCQkvKgorCQkgKiBBY3Rpb24gZnJhbWVzLCBleGNsdWRpbmcgUHVibGljIEFjdGlvbiBmcmFtZXMsIGFyZSBSb2J1c3QKKwkJICogTWFuYWdlbWVudCBGcmFtZXMuIEhvd2V2ZXIsIGlmIHdlIGFyZSBsb29raW5nIGF0IGEgUHJvdGVjdGVkCisJCSAqIGZyYW1lLCBza2lwIHRoZSBjaGVjayBzaW5jZSB0aGUgZGF0YSBtYXkgYmUgZW5jcnlwdGVkIGFuZAorCQkgKiB0aGUgZnJhbWUgaGFzIGFscmVhZHkgYmVlbiBmb3VuZCB0byBiZSBhIFJvYnVzdCBNYW5hZ2VtZW50CisJCSAqIEZyYW1lIChieSB0aGUgb3RoZXIgZW5kKS4KKwkJICovCisJCWlmIChpZWVlODAyMTFfaGFzX3Byb3RlY3RlZChoZHItPmZyYW1lX2NvbnRyb2wpKQorCQkJcmV0dXJuIHRydWU7CisJCWNhdGVnb3J5ID0gKCh1OCAqKSBoZHIpICsgMjQ7CisJCXJldHVybiAqY2F0ZWdvcnkgIT0gV0xBTl9DQVRFR09SWV9QVUJMSUM7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCisvKioKKyAqIGllZWU4MDIxMV9maHNzX2NoYW5fdG9fZnJlcSAtIGdldCBjaGFubmVsIGZyZXF1ZW5jeQorICogQGNoYW5uZWw6IHRoZSBGSFNTIGNoYW5uZWwKKyAqCisgKiBDb252ZXJ0IElFRUU4MDIuMTEgRkhTUyBjaGFubmVsIHRvIGZyZXF1ZW5jeSAoTUh6KQorICogUmVmIElFRUUgODAyLjExLTIwMDcgc2VjdGlvbiAxNC42CisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGllZWU4MDIxMV9maHNzX2NoYW5fdG9fZnJlcShpbnQgY2hhbm5lbCkKK3sKKwlpZiAoKGNoYW5uZWwgPiAxKSAmJiAoY2hhbm5lbCA8IDk2KSkKKwkJcmV0dXJuIGNoYW5uZWwgKyAyNDAwOworCWVsc2UKKwkJcmV0dXJuIC0xOworfQorCisvKioKKyAqIGllZWU4MDIxMV9mcmVxX3RvX2Zoc3NfY2hhbiAtIGdldCBjaGFubmVsCisgKiBAZnJlcTogdGhlIGNoYW5uZWxzIGZyZXF1ZW5jeQorICoKKyAqIENvbnZlcnQgZnJlcXVlbmN5IChNSHopIHRvIElFRUU4MDIuMTEgRkhTUyBjaGFubmVsCisgKiBSZWYgSUVFRSA4MDIuMTEtMjAwNyBzZWN0aW9uIDE0LjYKKyAqLworc3RhdGljIGlubGluZSBpbnQgaWVlZTgwMjExX2ZyZXFfdG9fZmhzc19jaGFuKGludCBmcmVxKQoreworCWlmICgoZnJlcSA+IDI0MDEpICYmIChmcmVxIDwgMjQ5NikpCisJCXJldHVybiBmcmVxIC0gMjQwMDsKKwllbHNlCisJCXJldHVybiAtMTsKK30KKworLyoqCisgKiBpZWVlODAyMTFfZHNzc19jaGFuX3RvX2ZyZXEgLSBnZXQgY2hhbm5lbCBjZW50ZXIgZnJlcXVlbmN5CisgKiBAY2hhbm5lbDogdGhlIERTU1MgY2hhbm5lbAorICoKKyAqIENvbnZlcnQgSUVFRTgwMi4xMSBEU1NTIGNoYW5uZWwgdG8gdGhlIGNlbnRlciBmcmVxdWVuY3kgKE1IeikuCisgKiBSZWYgSUVFRSA4MDIuMTEtMjAwNyBzZWN0aW9uIDE1LjYKKyAqLworc3RhdGljIGlubGluZSBpbnQgaWVlZTgwMjExX2Rzc3NfY2hhbl90b19mcmVxKGludCBjaGFubmVsKQoreworCWlmICgoY2hhbm5lbCA+IDApICYmIChjaGFubmVsIDwgMTQpKQorCQlyZXR1cm4gMjQwNyArIChjaGFubmVsICogNSk7CisJZWxzZSBpZiAoY2hhbm5lbCA9PSAxNCkKKwkJcmV0dXJuIDI0ODQ7CisJZWxzZQorCQlyZXR1cm4gLTE7Cit9CisKKy8qKgorICogaWVlZTgwMjExX2ZyZXFfdG9fZHNzc19jaGFuIC0gZ2V0IGNoYW5uZWwKKyAqIEBmcmVxOiB0aGUgZnJlcXVlbmN5CisgKgorICogQ29udmVydCBmcmVxdWVuY3kgKE1IeikgdG8gSUVFRTgwMi4xMSBEU1NTIGNoYW5uZWwKKyAqIFJlZiBJRUVFIDgwMi4xMS0yMDA3IHNlY3Rpb24gMTUuNgorICoKKyAqIFRoaXMgcm91dGluZSBzZWxlY3RzIHRoZSBjaGFubmVsIHdpdGggdGhlIGNsb3Nlc3QgY2VudGVyIGZyZXF1ZW5jeS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgaWVlZTgwMjExX2ZyZXFfdG9fZHNzc19jaGFuKGludCBmcmVxKQoreworCWlmICgoZnJlcSA+PSAyNDEwKSAmJiAoZnJlcSA8IDI0NzUpKQorCQlyZXR1cm4gKGZyZXEgLSAyNDA1KSAvIDU7CisJZWxzZSBpZiAoKGZyZXEgPj0gMjQ4MikgJiYgKGZyZXEgPCAyNDg3KSkKKwkJcmV0dXJuIDE0OworCWVsc2UKKwkJcmV0dXJuIC0xOworfQorCisvKiBDb252ZXJ0IElFRUU4MDIuMTEgSFIgRFNTUyBjaGFubmVsIHRvIGZyZXF1ZW5jeSAoTUh6KSBhbmQgYmFjaworICogUmVmIElFRUUgODAyLjExLTIwMDcgc2VjdGlvbiAxOC40LjYuMgorICoKKyAqIFRoZSBjaGFubmVscyBhbmQgZnJlcXVlbmNpZXMgYXJlIHRoZSBzYW1lIGFzIHRob3NlIGRlZmluZWQgZm9yIERTU1MKKyAqLworI2RlZmluZSBpZWVlODAyMTFfaHJfY2hhbl90b19mcmVxKGNoYW4pIGllZWU4MDIxMV9kc3NzX2NoYW5fdG9fZnJlcShjaGFuKQorI2RlZmluZSBpZWVlODAyMTFfZnJlcV90b19ocl9jaGFuKGZyZXEpIGllZWU4MDIxMV9mcmVxX3RvX2Rzc3NfY2hhbihmcmVxKQorCisvKiBDb252ZXJ0IElFRUU4MDIuMTEgRVJQIGNoYW5uZWwgdG8gZnJlcXVlbmN5IChNSHopIGFuZCBiYWNrCisgKiBSZWYgSUVFRSA4MDIuMTEtMjAwNyBzZWN0aW9uIDE5LjQuMgorICovCisjZGVmaW5lIGllZWU4MDIxMV9lcnBfY2hhbl90b19mcmVxKGNoYW4pIGllZWU4MDIxMV9ocl9jaGFuX3RvX2ZyZXEoY2hhbikKKyNkZWZpbmUgaWVlZTgwMjExX2ZyZXFfdG9fZXJwX2NoYW4oZnJlcSkgaWVlZTgwMjExX2ZyZXFfdG9faHJfY2hhbihmcmVxKQorCisvKioKKyAqIGllZWU4MDIxMV9vZmRtX2NoYW5fdG9fZnJlcSAtIGdldCBjaGFubmVsIGNlbnRlciBmcmVxdWVuY3kKKyAqIEBzX2ZyZXE6IHN0YXJ0aW5nIGZyZXF1ZW5jeSA9PSAoZG90Q2hhbm5lbFN0YXJ0aW5nRmFjdG9yLzIpIE1IegorICogQGNoYW5uZWw6IHRoZSBPRkRNIGNoYW5uZWwKKyAqCisgKiBDb252ZXJ0IElFRUU4MDIuMTEgT0ZETSBjaGFubmVsIHRvIGNlbnRlciBmcmVxdWVuY3kgKE1IeikKKyAqIFJlZiBJRUVFIDgwMi4xMS0yMDA3IHNlY3Rpb24gMTcuMy44LjMuMgorICovCitzdGF0aWMgaW5saW5lIGludCBpZWVlODAyMTFfb2ZkbV9jaGFuX3RvX2ZyZXEoaW50IHNfZnJlcSwgaW50IGNoYW5uZWwpCit7CisJaWYgKChjaGFubmVsID4gMCkgJiYgKGNoYW5uZWwgPD0gMjAwKSAmJgorCSAgICAoc19mcmVxID49IDQwMDApKQorCQlyZXR1cm4gc19mcmVxICsgKGNoYW5uZWwgKiA1KTsKKwllbHNlCisJCXJldHVybiAtMTsKK30KKworLyoqCisgKiBpZWVlODAyMTFfZnJlcV90b19vZmRtX2NoYW5uZWwgLSBnZXQgY2hhbm5lbAorICogQHNfZnJlcTogc3RhcnRpbmcgZnJlcXVlbmN5ID09IChkb3RDaGFubmVsU3RhcnRpbmdGYWN0b3IvMikgTUh6CisgKiBAZnJlcTogdGhlIGZyZXF1ZW5jeQorICoKKyAqIENvbnZlcnQgZnJlcXVlbmN5IChNSHopIHRvIElFRUU4MDIuMTEgT0ZETSBjaGFubmVsCisgKiBSZWYgSUVFRSA4MDIuMTEtMjAwNyBzZWN0aW9uIDE3LjMuOC4zLjIKKyAqCisgKiBUaGlzIHJvdXRpbmUgc2VsZWN0cyB0aGUgY2hhbm5lbCB3aXRoIHRoZSBjbG9zZXN0IGNlbnRlciBmcmVxdWVuY3kuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGllZWU4MDIxMV9mcmVxX3RvX29mZG1fY2hhbihpbnQgc19mcmVxLCBpbnQgZnJlcSkKK3sKKwlpZiAoKGZyZXEgPiAoc19mcmVxICsgMikpICYmIChmcmVxIDw9IChzX2ZyZXEgKyAxMjAyKSkgJiYKKwkgICAgKHNfZnJlcSA+PSA0MDAwKSkKKwkJcmV0dXJuIChmcmVxICsgMiAtIHNfZnJlcSkgLyA1OworCWVsc2UKKwkJcmV0dXJuIC0xOworfQorCiAjZW5kaWYgLyogTElOVVhfSUVFRTgwMjExX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWYuaCBiL2luY2x1ZGUvbGludXgvaWYuaAppbmRleCAyYTZlMjk2Li4xMTA4ZjNlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lmLmgKKysrIGIvaW5jbHVkZS9saW51eC9pZi5oCkBAIC02Niw2ICs2Niw3IEBACiAjZGVmaW5lIElGRl9TTEFWRV9ORUVEQVJQIDB4NDAJCS8qIG5lZWQgQVJQcyBmb3IgdmFsaWRhdGlvbgkqLwogI2RlZmluZSBJRkZfSVNBVEFQCTB4ODAJCS8qIElTQVRBUCBpbnRlcmZhY2UgKFJGQzQyMTQpCSovCiAjZGVmaW5lIElGRl9NQVNURVJfQVJQTU9OIDB4MTAwCQkvKiBib25kaW5nIG1hc3RlciwgQVJQIG1vbiBpbiB1c2UgKi8KKyNkZWZpbmUgSUZGX1dBTl9IRExDCTB4MjAwCQkvKiBXQU4gSERMQyBkZXZpY2UJCSovCiAKICNkZWZpbmUgSUZfR0VUX0lGQUNFCTB4MDAwMQkJLyogZm9yIHF1ZXJ5aW5nIG9ubHkgKi8KICNkZWZpbmUgSUZfR0VUX1BST1RPCTB4MDAwMgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl9hcmNuZXQuaCBiL2luY2x1ZGUvbGludXgvaWZfYXJjbmV0LmgKaW5kZXggMjdlYTJhYy4uMDgzNWRlYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZl9hcmNuZXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lmX2FyY25ldC5oCkBAIC0xNiw2ICsxNiw3IEBACiAjaWZuZGVmIF9MSU5VWF9JRl9BUkNORVRfSAogI2RlZmluZSBfTElOVVhfSUZfQVJDTkVUX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KIAogCkBAIC01NywxMCArNTgsMTAgQEAKICAqLwogc3RydWN0IGFyY19yZmMxMjAxCiB7Ci0gICAgdWludDhfdCAgcHJvdG87CQkvKiBwcm90b2NvbCBJRCBmaWVsZCAtIHZhcmllcwkJKi8KLSAgICB1aW50OF90ICBzcGxpdF9mbGFnOwkvKiBmb3IgdXNlIHdpdGggc3BsaXQgcGFja2V0cwkJKi8KKyAgICBfX3U4ICBwcm90bzsJCS8qIHByb3RvY29sIElEIGZpZWxkIC0gdmFyaWVzCQkqLworICAgIF9fdTggIHNwbGl0X2ZsYWc7CS8qIGZvciB1c2Ugd2l0aCBzcGxpdCBwYWNrZXRzCQkqLwogICAgIF9fYmUxNiAgIHNlcXVlbmNlOwkJLyogc2VxdWVuY2UgbnVtYmVyCQkJKi8KLSAgICB1aW50OF90ICBwYXlsb2FkWzBdOwkvKiBzcGFjZSByZW1haW5pbmcgaW4gcGFja2V0ICg1MDQgYnl0ZXMpKi8KKyAgICBfX3U4ICBwYXlsb2FkWzBdOwkvKiBzcGFjZSByZW1haW5pbmcgaW4gcGFja2V0ICg1MDQgYnl0ZXMpKi8KIH07CiAjZGVmaW5lIFJGQzEyMDFfSERSX1NJWkUgNAogCkBAIC03MCw4ICs3MSw4IEBACiAgKi8KIHN0cnVjdCBhcmNfcmZjMTA1MQogewotICAgIHVpbnQ4X3QgcHJvdG87CQkvKiBBUkNfUF9SRkMxMDUxX0FSUC9SRkMxMDUxX0lQCSovCi0gICAgdWludDhfdCBwYXlsb2FkWzBdOwkJLyogNTA3IGJ5dGVzCQkJKi8KKyAgICBfX3U4IHByb3RvOwkJLyogQVJDX1BfUkZDMTA1MV9BUlAvUkZDMTA1MV9JUAkqLworICAgIF9fdTggcGF5bG9hZFswXTsJCS8qIDUwNyBieXRlcwkJCSovCiB9OwogI2RlZmluZSBSRkMxMDUxX0hEUl9TSVpFIDEKIApAQCAtODIsMjAgKzgzLDIwIEBACiAgKi8KIHN0cnVjdCBhcmNfZXRoX2VuY2FwCiB7Ci0gICAgdWludDhfdCBwcm90bzsJCS8qIEFsd2F5cyBBUkNfUF9FVEhFUgkJCSovCisgICAgX191OCBwcm90bzsJCS8qIEFsd2F5cyBBUkNfUF9FVEhFUgkJCSovCiAgICAgc3RydWN0IGV0aGhkciBldGg7CQkvKiBzdGFuZGFyZCBldGhlcm5ldCBoZWFkZXIgKHl1Y2shKQkqLwotICAgIHVpbnQ4X3QgcGF5bG9hZFswXTsJCS8qIDQ5MyBieXRlcwkJCQkqLworICAgIF9fdTggcGF5bG9hZFswXTsJCS8qIDQ5MyBieXRlcwkJCQkqLwogfTsKICNkZWZpbmUgRVRIX0VOQ0FQX0hEUl9TSVpFIDE0CiAKIAogc3RydWN0IGFyY19jYXAKIHsKLQl1aW50OF90IHByb3RvOwotCXVpbnQ4X3QgY29va2llW3NpemVvZihpbnQpXTsgICAvKiBBY3R1YWxseSBOT1Qgc2VudCBvdmVyIHRoZSBuZXR3b3JrICovCisJX191OCBwcm90bzsKKwlfX3U4IGNvb2tpZVtzaXplb2YoaW50KV07ICAgLyogQWN0dWFsbHkgTk9UIHNlbnQgb3ZlciB0aGUgbmV0d29yayAqLwogCXVuaW9uIHsKLQkJdWludDhfdCBhY2s7Ci0JCXVpbnQ4X3QgcmF3WzBdOwkJLyogNTA3IGJ5dGVzICovCisJCV9fdTggYWNrOworCQlfX3U4IHJhd1swXTsJCS8qIDUwNyBieXRlcyAqLwogCX0gbWVzOwogfTsKIApAQCAtMTA5LDcgKzExMCw3IEBACiAgKi8KIHN0cnVjdCBhcmNfaGFyZHdhcmUKIHsKLSAgICB1aW50OF90ICBzb3VyY2UsCQkvKiBzb3VyY2UgQVJDbmV0IC0gZmlsbGVkIGluIGF1dG9tYWdpY2FsbHkgKi8KKyAgICBfX3U4ICBzb3VyY2UsCQkvKiBzb3VyY2UgQVJDbmV0IC0gZmlsbGVkIGluIGF1dG9tYWdpY2FsbHkgKi8KICAgICAgICAgICAgICBkZXN0LAkJLyogZGVzdGluYXRpb24gQVJDbmV0IC0gMCBmb3IgYnJvYWRjYXN0ICAgICovCiAgICAgCSAgICAgb2Zmc2V0WzJdOwkJLyogb2Zmc2V0IGJ5dGVzIChzb21lIHdlaXJkIHNlbWFudGljcykgICAgICovCiB9OwpAQCAtMTMwLDcgKzEzMSw3IEBACiAJc3RydWN0IGFyY19yZmMxMDUxICAgcmZjMTA1MTsKIAlzdHJ1Y3QgYXJjX2V0aF9lbmNhcCBldGhfZW5jYXA7CiAJc3RydWN0IGFyY19jYXAgICAgICAgY2FwOwotCXVpbnQ4X3QgcmF3WzBdOwkJLyogNTA4IGJ5dGVzCQkJCSovCisJX191OCByYXdbMF07CQkvKiA1MDggYnl0ZXMJCQkJKi8KICAgICB9IHNvZnQ7CiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lmX2V0aGVyLmggYi9pbmNsdWRlL2xpbnV4L2lmX2V0aGVyLmgKaW5kZXggN2YzYzczNS4uMDIxNmUxYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZl9ldGhlci5oCisrKyBiL2luY2x1ZGUvbGludXgvaWZfZXRoZXIuaApAQCAtMTcsNyArMTcsNyBAQAogICoJCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgogICoJCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KLSAKKwogI2lmbmRlZiBfTElOVVhfSUZfRVRIRVJfSAogI2RlZmluZSBfTElOVVhfSUZfRVRIRVJfSAogCkBAIC0yNSw3ICsyNSw3IEBACiAKIC8qCiAgKglJRUVFIDgwMi4zIEV0aGVybmV0IG1hZ2ljIGNvbnN0YW50cy4gIFRoZSBmcmFtZSBzaXplcyBvbWl0IHRoZSBwcmVhbWJsZQotICoJYW5kIEZDUy9DUkMgKGZyYW1lIGNoZWNrIHNlcXVlbmNlKS4gCisgKglhbmQgRkNTL0NSQyAoZnJhbWUgY2hlY2sgc2VxdWVuY2UpLgogICovCiAKICNkZWZpbmUgRVRIX0FMRU4JNgkJLyogT2N0ZXRzIGluIG9uZSBldGhlcm5ldCBhZGRyCSAqLwpAQCAtODMsNyArODMsNyBAQAogLyoKICAqCU5vbiBESVggdHlwZXMuIFdvbid0IGNsYXNoIGZvciAxNTAwIHR5cGVzLgogICovCi0gCisKICNkZWZpbmUgRVRIX1BfODAyXzMJMHgwMDAxCQkvKiBEdW1teSB0eXBlIGZvciA4MDIuMyBmcmFtZXMgICovCiAjZGVmaW5lIEVUSF9QX0FYMjUJMHgwMDAyCQkvKiBEdW1teSBwcm90b2NvbCBpZCBmb3IgQVguMjUgICovCiAjZGVmaW5lIEVUSF9QX0FMTAkweDAwMDMJCS8qIEV2ZXJ5IHBhY2tldCAoYmUgY2FyZWZ1bCEhISkgKi8KQEAgLTEwOSw3ICsxMDksNyBAQAogLyoKICAqCVRoaXMgaXMgYW4gRXRoZXJuZXQgZnJhbWUgaGVhZGVyLgogICovCi0gCisKIHN0cnVjdCBldGhoZHIgewogCXVuc2lnbmVkIGNoYXIJaF9kZXN0W0VUSF9BTEVOXTsJLyogZGVzdGluYXRpb24gZXRoIGFkZHIJKi8KIAl1bnNpZ25lZCBjaGFyCWhfc291cmNlW0VUSF9BTEVOXTsJLyogc291cmNlIGV0aGVyIGFkZHIJKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWZfcHBwb2wydHAuaCBiL2luY2x1ZGUvbGludXgvaWZfcHBwb2wydHAuaAppbmRleCBjN2E2Njg4Li4zYTE0YjA4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lmX3BwcG9sMnRwLmgKKysrIGIvaW5jbHVkZS9saW51eC9pZl9wcHBvbDJ0cC5oCkBAIC0yNiw3ICsyNiw3IEBACiAgKi8KIHN0cnVjdCBwcHBvbDJ0cF9hZGRyCiB7Ci0JcGlkX3QJcGlkOwkJCS8qIHBpZCB0aGF0IG93bnMgdGhlIGZkLgorCV9fa2VybmVsX3BpZF90CXBpZDsJCS8qIHBpZCB0aGF0IG93bnMgdGhlIGZkLgogCQkJCQkgKiAwID0+IGN1cnJlbnQgKi8KIAlpbnQJZmQ7CQkJLyogRkQgb2YgVURQIHNvY2tldCB0byB1c2UgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl9wcHBveC5oIGIvaW5jbHVkZS9saW51eC9pZl9wcHBveC5oCmluZGV4IDMwYzg4YjIuLjkwYjVmYWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWZfcHBwb3guaAorKysgYi9pbmNsdWRlL2xpbnV4L2lmX3BwcG94LmgKQEAgLTk1LDE2ICs5NSwxNiBAQAogfSBfX2F0dHJpYnV0ZSAoKHBhY2tlZCkpOwogCiAvKiBUYWcgaWRlbnRpZmllcnMgKi8KLSNkZWZpbmUgUFRUX0VPTAkJX19jb25zdGFudF9odG9ucygweDAwMDApCi0jZGVmaW5lIFBUVF9TUlZfTkFNRQlfX2NvbnN0YW50X2h0b25zKDB4MDEwMSkKLSNkZWZpbmUgUFRUX0FDX05BTUUJX19jb25zdGFudF9odG9ucygweDAxMDIpCi0jZGVmaW5lIFBUVF9IT1NUX1VOSVEJX19jb25zdGFudF9odG9ucygweDAxMDMpCi0jZGVmaW5lIFBUVF9BQ19DT09LSUUJX19jb25zdGFudF9odG9ucygweDAxMDQpCi0jZGVmaW5lIFBUVF9WRU5ET1IgCV9fY29uc3RhbnRfaHRvbnMoMHgwMTA1KQotI2RlZmluZSBQVFRfUkVMQVlfU0lECV9fY29uc3RhbnRfaHRvbnMoMHgwMTEwKQotI2RlZmluZSBQVFRfU1JWX0VSUiAgICAgX19jb25zdGFudF9odG9ucygweDAyMDEpCi0jZGVmaW5lIFBUVF9TWVNfRVJSICAJX19jb25zdGFudF9odG9ucygweDAyMDIpCi0jZGVmaW5lIFBUVF9HRU5fRVJSICAJX19jb25zdGFudF9odG9ucygweDAyMDMpCisjZGVmaW5lIFBUVF9FT0wJCV9fY3B1X3RvX2JlMTYoMHgwMDAwKQorI2RlZmluZSBQVFRfU1JWX05BTUUJX19jcHVfdG9fYmUxNigweDAxMDEpCisjZGVmaW5lIFBUVF9BQ19OQU1FCV9fY3B1X3RvX2JlMTYoMHgwMTAyKQorI2RlZmluZSBQVFRfSE9TVF9VTklRCV9fY3B1X3RvX2JlMTYoMHgwMTAzKQorI2RlZmluZSBQVFRfQUNfQ09PS0lFCV9fY3B1X3RvX2JlMTYoMHgwMTA0KQorI2RlZmluZSBQVFRfVkVORE9SIAlfX2NwdV90b19iZTE2KDB4MDEwNSkKKyNkZWZpbmUgUFRUX1JFTEFZX1NJRAlfX2NwdV90b19iZTE2KDB4MDExMCkKKyNkZWZpbmUgUFRUX1NSVl9FUlIgICAgIF9fY3B1X3RvX2JlMTYoMHgwMjAxKQorI2RlZmluZSBQVFRfU1lTX0VSUiAgCV9fY3B1X3RvX2JlMTYoMHgwMjAyKQorI2RlZmluZSBQVFRfR0VOX0VSUiAgCV9fY3B1X3RvX2JlMTYoMHgwMjAzKQogCiBzdHJ1Y3QgcHBwb2VfaGRyIHsKICNpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTl9CSVRGSUVMRCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWZfdHVuLmggYi9pbmNsdWRlL2xpbnV4L2lmX3R1bi5oCmluZGV4IDg1MjlmNTcuLjA0OWQ2YzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWZfdHVuLmgKKysrIGIvaW5jbHVkZS9saW51eC9pZl90dW4uaApAQCAtNDYsNiArNDYsOCBAQAogI2RlZmluZSBUVU5TRVRPRkZMT0FEICBfSU9XKCdUJywgMjA4LCB1bnNpZ25lZCBpbnQpCiAjZGVmaW5lIFRVTlNFVFRYRklMVEVSIF9JT1coJ1QnLCAyMDksIHVuc2lnbmVkIGludCkKICNkZWZpbmUgVFVOR0VUSUZGICAgICAgX0lPUignVCcsIDIxMCwgdW5zaWduZWQgaW50KQorI2RlZmluZSBUVU5HRVRTTkRCVUYgICBfSU9SKCdUJywgMjExLCBpbnQpCisjZGVmaW5lIFRVTlNFVFNOREJVRiAgIF9JT1coJ1QnLCAyMTIsIGludCkKIAogLyogVFVOU0VUSUZGIGlmciBmbGFncyAqLwogI2RlZmluZSBJRkZfVFVOCQkweDAwMDEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWZfdHVubmVsLmggYi9pbmNsdWRlL2xpbnV4L2lmX3R1bm5lbC5oCmluZGV4IDgyYzQzNjI0Li41YTlhYWU0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lmX3R1bm5lbC5oCisrKyBiL2luY2x1ZGUvbGludXgvaWZfdHVubmVsLmgKQEAgLTE2LDE0ICsxNiwxNCBAQAogI2RlZmluZSBTSU9DREVMUFJMICAgICAgKFNJT0NERVZQUklWQVRFICsgNikKICNkZWZpbmUgU0lPQ0NIR1BSTCAgICAgIChTSU9DREVWUFJJVkFURSArIDcpCiAKLSNkZWZpbmUgR1JFX0NTVU0JX19jb25zdGFudF9odG9ucygweDgwMDApCi0jZGVmaW5lIEdSRV9ST1VUSU5HCV9fY29uc3RhbnRfaHRvbnMoMHg0MDAwKQotI2RlZmluZSBHUkVfS0VZCQlfX2NvbnN0YW50X2h0b25zKDB4MjAwMCkKLSNkZWZpbmUgR1JFX1NFUQkJX19jb25zdGFudF9odG9ucygweDEwMDApCi0jZGVmaW5lIEdSRV9TVFJJQ1QJX19jb25zdGFudF9odG9ucygweDA4MDApCi0jZGVmaW5lIEdSRV9SRUMJCV9fY29uc3RhbnRfaHRvbnMoMHgwNzAwKQotI2RlZmluZSBHUkVfRkxBR1MJX19jb25zdGFudF9odG9ucygweDAwRjgpCi0jZGVmaW5lIEdSRV9WRVJTSU9OCV9fY29uc3RhbnRfaHRvbnMoMHgwMDA3KQorI2RlZmluZSBHUkVfQ1NVTQlfX2NwdV90b19iZTE2KDB4ODAwMCkKKyNkZWZpbmUgR1JFX1JPVVRJTkcJX19jcHVfdG9fYmUxNigweDQwMDApCisjZGVmaW5lIEdSRV9LRVkJCV9fY3B1X3RvX2JlMTYoMHgyMDAwKQorI2RlZmluZSBHUkVfU0VRCQlfX2NwdV90b19iZTE2KDB4MTAwMCkKKyNkZWZpbmUgR1JFX1NUUklDVAlfX2NwdV90b19iZTE2KDB4MDgwMCkKKyNkZWZpbmUgR1JFX1JFQwkJX19jcHVfdG9fYmUxNigweDA3MDApCisjZGVmaW5lIEdSRV9GTEFHUwlfX2NwdV90b19iZTE2KDB4MDBGOCkKKyNkZWZpbmUgR1JFX1ZFUlNJT04JX19jcHVfdG9fYmUxNigweDAwMDcpCiAKIHN0cnVjdCBpcF90dW5uZWxfcGFybQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbWEuaCBiL2luY2x1ZGUvbGludXgvaW1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGUyYWE0NQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvaW1hLmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBJQk0gQ29ycG9yYXRpb24KKyAqIEF1dGhvcjogTWltaSBab2hhciA8em9oYXJAdXMuaWJtLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIF9MSU5VWF9JTUFfSAorI2RlZmluZSBfTElOVVhfSU1BX0gKKworI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CitzdHJ1Y3QgbGludXhfYmlucHJtOworCisjaWZkZWYgQ09ORklHX0lNQQorZXh0ZXJuIGludCBpbWFfYnBybV9jaGVjayhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKTsKK2V4dGVybiBpbnQgaW1hX2lub2RlX2FsbG9jKHN0cnVjdCBpbm9kZSAqaW5vZGUpOworZXh0ZXJuIHZvaWQgaW1hX2lub2RlX2ZyZWUoc3RydWN0IGlub2RlICppbm9kZSk7CitleHRlcm4gaW50IGltYV9wYXRoX2NoZWNrKHN0cnVjdCBwYXRoICpwYXRoLCBpbnQgbWFzayk7CitleHRlcm4gdm9pZCBpbWFfZmlsZV9mcmVlKHN0cnVjdCBmaWxlICpmaWxlKTsKK2V4dGVybiBpbnQgaW1hX2ZpbGVfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBwcm90KTsKK2V4dGVybiB2b2lkIGltYV9zaG1fY2hlY2soc3RydWN0IGZpbGUgKmZpbGUpOworCisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgaW1hX2Jwcm1fY2hlY2soc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgaW1hX2lub2RlX2FsbG9jKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbWFfaW5vZGVfZnJlZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXJldHVybjsKK30KKworc3RhdGljIGlubGluZSBpbnQgaW1hX3BhdGhfY2hlY2soc3RydWN0IHBhdGggKnBhdGgsIGludCBtYXNrKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW1hX2ZpbGVfZnJlZShzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGltYV9maWxlX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgcHJvdCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGltYV9zaG1fY2hlY2soc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuOworfQorI2VuZGlmIC8qIENPTkZJR19JTUFfSCAqLworI2VuZGlmIC8qIF9MSU5VWF9JTUFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbjYuaCBiL2luY2x1ZGUvbGludXgvaW42LmgKaW5kZXggYmM0OTIwNC4uNzE4YmYyMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbjYuaAorKysgYi9pbmNsdWRlL2xpbnV4L2luNi5oCkBAIC00NCwxMSArNDQsMTEgQEAKICAqIE5PVEU6IEJlIGF3YXJlIHRoZSBJTjZBRERSXyogY29uc3RhbnRzIGFuZCBpbjZhZGRyXyogZXh0ZXJuYWxzIGFyZSBkZWZpbmVkCiAgKiBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIsIG5vdCBpbiBob3N0IGJ5dGUgb3JkZXIgYXMgYXJlIHRoZSBJUHY0IGVxdWl2YWxlbnRzCiAgKi8KKyNpZmRlZiBfX0tFUk5FTF9fCiBleHRlcm4gY29uc3Qgc3RydWN0IGluNl9hZGRyIGluNmFkZHJfYW55OwogI2RlZmluZSBJTjZBRERSX0FOWV9JTklUIHsgeyB7IDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAgfSB9IH0KIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgaW42YWRkcl9sb29wYmFjazsKICNkZWZpbmUgSU42QUREUl9MT09QQkFDS19JTklUIHsgeyB7IDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEgfSB9IH0KLSNpZmRlZiBfX0tFUk5FTF9fCiBleHRlcm4gY29uc3Qgc3RydWN0IGluNl9hZGRyIGluNmFkZHJfbGlua2xvY2FsX2FsbG5vZGVzOwogI2RlZmluZSBJTjZBRERSX0xJTktMT0NBTF9BTExOT0RFU19JTklUCVwKIAkJeyB7IHsgMHhmZiwyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSB9IH0gfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaAppbmRleCAwNmZjZGI0Li5hY2VmMmE3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaApAQCAtMTA4LDYgKzEwOCw3IEBACiAjZGVmaW5lIElOX0RFVl9BUlBGSUxURVIoaW5fZGV2KQlJTl9ERVZfT1JDT05GKChpbl9kZXYpLCBBUlBGSUxURVIpCiAjZGVmaW5lIElOX0RFVl9BUlBfQU5OT1VOQ0UoaW5fZGV2KQlJTl9ERVZfTUFYQ09ORigoaW5fZGV2KSwgQVJQX0FOTk9VTkNFKQogI2RlZmluZSBJTl9ERVZfQVJQX0lHTk9SRShpbl9kZXYpCUlOX0RFVl9NQVhDT05GKChpbl9kZXYpLCBBUlBfSUdOT1JFKQorI2RlZmluZSBJTl9ERVZfQVJQX05PVElGWShpbl9kZXYpCUlOX0RFVl9NQVhDT05GKChpbl9kZXYpLCBBUlBfTk9USUZZKQogCiBzdHJ1Y3QgaW5faWZhZGRyCiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2luaXRfdGFzay5oIGIvaW5jbHVkZS9saW51eC9pbml0X3Rhc2suaAppbmRleCBlNzUyZDk3Li5hZjFkZTk1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2luaXRfdGFzay5oCisrKyBiL2luY2x1ZGUvbGludXgvaW5pdF90YXNrLmgKQEAgLTE0Nyw2ICsxNDcsNyBAQAogCQkubnJfY3B1c19hbGxvd2VkID0gTlJfQ1BVUywJCQkJXAogCX0sCQkJCQkJCQlcCiAJLnRhc2tzCQk9IExJU1RfSEVBRF9JTklUKHRzay50YXNrcyksCQkJXAorCS5wdXNoYWJsZV90YXNrcyA9IFBMSVNUX05PREVfSU5JVCh0c2sucHVzaGFibGVfdGFza3MsIE1BWF9QUklPKSwgXAogCS5wdHJhY2VkCT0gTElTVF9IRUFEX0lOSVQodHNrLnB0cmFjZWQpLAkJCVwKIAkucHRyYWNlX2VudHJ5CT0gTElTVF9IRUFEX0lOSVQodHNrLnB0cmFjZV9lbnRyeSksCQlcCiAJLnJlYWxfcGFyZW50CT0gJnRzaywJCQkJCQlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lucHV0LmggYi9pbmNsdWRlL2xpbnV4L2lucHV0LmgKaW5kZXggMTI0OWEwYy4uNmIyODA0OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbnB1dC5oCisrKyBiL2luY2x1ZGUvbGludXgvaW5wdXQuaApAQCAtNjYxLDYgKzY2MSw3IEBACiAjZGVmaW5lIFNXX0RPQ0sJCQkweDA1ICAvKiBzZXQgPSBwbHVnZ2VkIGludG8gZG9jayAqLwogI2RlZmluZSBTV19MSU5FT1VUX0lOU0VSVAkweDA2ICAvKiBzZXQgPSBpbnNlcnRlZCAqLwogI2RlZmluZSBTV19KQUNLX1BIWVNJQ0FMX0lOU0VSVCAweDA3ICAvKiBzZXQgPSBtZWNoYW5pY2FsIHN3aXRjaCBzZXQgKi8KKyNkZWZpbmUgU1dfVklERU9PVVRfSU5TRVJUCTB4MDggIC8qIHNldCA9IGluc2VydGVkICovCiAjZGVmaW5lIFNXX01BWAkJCTB4MGYKICNkZWZpbmUgU1dfQ05UCQkJKFNXX01BWCsxKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oIGIvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaAppbmRleCA5MTI3ZjZiLi45MTY1OGQwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oCisrKyBiL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmgKQEAgLTYxLDYgKzYxLDE3IEBACiAKIHR5cGVkZWYgaXJxcmV0dXJuX3QgKCppcnFfaGFuZGxlcl90KShpbnQsIHZvaWQgKik7CiAKKy8qKgorICogc3RydWN0IGlycWFjdGlvbiAtIHBlciBpbnRlcnJ1cHQgYWN0aW9uIGRlc2NyaXB0b3IKKyAqIEBoYW5kbGVyOglpbnRlcnJ1cHQgaGFuZGxlciBmdW5jdGlvbgorICogQGZsYWdzOglmbGFncyAoc2VlIElSUUZfKiBhYm92ZSkKKyAqIEBtYXNrOglubyBjb21tZW50IGFzIGl0IGlzIHVzZWxlc3MgYW5kIGFib3V0IHRvIGJlIHJlbW92ZWQKKyAqIEBuYW1lOgluYW1lIG9mIHRoZSBkZXZpY2UKKyAqIEBkZXZfaWQ6CWNvb2tpZSB0byBpZGVudGlmeSB0aGUgZGV2aWNlCisgKiBAbmV4dDoJcG9pbnRlciB0byB0aGUgbmV4dCBpcnFhY3Rpb24gZm9yIHNoYXJlZCBpbnRlcnJ1cHRzCisgKiBAaXJxOglpbnRlcnJ1cHQgbnVtYmVyCisgKiBAZGlyOglwb2ludGVyIHRvIHRoZSBwcm9jL2lycS9OTi9uYW1lIGVudHJ5CisgKi8KIHN0cnVjdCBpcnFhY3Rpb24gewogCWlycV9oYW5kbGVyX3QgaGFuZGxlcjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNDYyLDYgKzQ3MywxMiBAQAogfQogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENPTkZJR19HRU5FUklDX0hBUkRJUlFTKSAmJiBkZWZpbmVkKENPTkZJR19ERUJVR19TSElSUSkKK2V4dGVybiB2b2lkIGRlYnVnX3BvbGxfYWxsX3NoYXJlZF9pcnFzKHZvaWQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBkZWJ1Z19wb2xsX2FsbF9zaGFyZWRfaXJxcyh2b2lkKSB7IH0KKyNlbmRpZgorCiBpbnQgc2hvd19pbnRlcnJ1cHRzKHN0cnVjdCBzZXFfZmlsZSAqcCwgdm9pZCAqdik7CiAKIHN0cnVjdCBpcnFfZGVzYzsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXBfdnMuaCBiL2luY2x1ZGUvbGludXgvaXBfdnMuaAppbmRleCAwZjQzNGEyLi4xNDgyNjVlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lwX3ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9pcF92cy5oCkBAIC05NiwxMCArOTYsMTAgQEAKICAqLwogc3RydWN0IGlwX3ZzX3NlcnZpY2VfdXNlciB7CiAJLyogdmlydHVhbCBzZXJ2aWNlIGFkZHJlc3NlcyAqLwotCXVfaW50MTZfdAkJcHJvdG9jb2w7CisJX191MTYJCXByb3RvY29sOwogCV9fYmUzMgkJCWFkZHI7CQkvKiB2aXJ0dWFsIGlwIGFkZHJlc3MgKi8KIAlfX2JlMTYJCQlwb3J0OwotCXVfaW50MzJfdAkJZndtYXJrOwkJLyogZmlyd2FsbCBtYXJrIG9mIHNlcnZpY2UgKi8KKwlfX3UzMgkJZndtYXJrOwkJLyogZmlyd2FsbCBtYXJrIG9mIHNlcnZpY2UgKi8KIAogCS8qIHZpcnR1YWwgc2VydmljZSBvcHRpb25zICovCiAJY2hhcgkJCXNjaGVkX25hbWVbSVBfVlNfU0NIRUROQU1FX01BWExFTl07CkBAIC0xMTksOCArMTE5LDggQEAKIAlpbnQJCQl3ZWlnaHQ7CQkvKiBkZXN0aW5hdGlvbiB3ZWlnaHQgKi8KIAogCS8qIHRocmVzaG9sZHMgZm9yIGFjdGl2ZSBjb25uZWN0aW9ucyAqLwotCXVfaW50MzJfdAkJdV90aHJlc2hvbGQ7CS8qIHVwcGVyIHRocmVzaG9sZCAqLwotCXVfaW50MzJfdAkJbF90aHJlc2hvbGQ7CS8qIGxvd2VyIHRocmVzaG9sZCAqLworCV9fdTMyCQl1X3RocmVzaG9sZDsJLyogdXBwZXIgdGhyZXNob2xkICovCisJX191MzIJCWxfdGhyZXNob2xkOwkvKiBsb3dlciB0aHJlc2hvbGQgKi8KIH07CiAKIApAQCAtMTU5LDEwICsxNTksMTAgQEAKIC8qIFRoZSBhcmd1bWVudCB0byBJUF9WU19TT19HRVRfU0VSVklDRSAqLwogc3RydWN0IGlwX3ZzX3NlcnZpY2VfZW50cnkgewogCS8qIHdoaWNoIHNlcnZpY2U6IHVzZXIgZmlsbHMgaW4gdGhlc2UgKi8KLQl1X2ludDE2X3QJCXByb3RvY29sOworCV9fdTE2CQlwcm90b2NvbDsKIAlfX2JlMzIJCQlhZGRyOwkJLyogdmlydHVhbCBhZGRyZXNzICovCiAJX19iZTE2CQkJcG9ydDsKLQl1X2ludDMyX3QJCWZ3bWFyazsJCS8qIGZpcndhbGwgbWFyayBvZiBzZXJ2aWNlICovCisJX191MzIJCWZ3bWFyazsJCS8qIGZpcndhbGwgbWFyayBvZiBzZXJ2aWNlICovCiAKIAkvKiBzZXJ2aWNlIG9wdGlvbnMgKi8KIAljaGFyCQkJc2NoZWRfbmFtZVtJUF9WU19TQ0hFRE5BTUVfTUFYTEVOXTsKQEAgLTE4NCwxMiArMTg0LDEyIEBACiAJdW5zaWduZWQJCWNvbm5fZmxhZ3M7CS8qIGNvbm5lY3Rpb24gZmxhZ3MgKi8KIAlpbnQJCQl3ZWlnaHQ7CQkvKiBkZXN0aW5hdGlvbiB3ZWlnaHQgKi8KIAotCXVfaW50MzJfdAkJdV90aHJlc2hvbGQ7CS8qIHVwcGVyIHRocmVzaG9sZCAqLwotCXVfaW50MzJfdAkJbF90aHJlc2hvbGQ7CS8qIGxvd2VyIHRocmVzaG9sZCAqLworCV9fdTMyCQl1X3RocmVzaG9sZDsJLyogdXBwZXIgdGhyZXNob2xkICovCisJX191MzIJCWxfdGhyZXNob2xkOwkvKiBsb3dlciB0aHJlc2hvbGQgKi8KIAotCXVfaW50MzJfdAkJYWN0aXZlY29ubnM7CS8qIGFjdGl2ZSBjb25uZWN0aW9ucyAqLwotCXVfaW50MzJfdAkJaW5hY3Rjb25uczsJLyogaW5hY3RpdmUgY29ubmVjdGlvbnMgKi8KLQl1X2ludDMyX3QJCXBlcnNpc3Rjb25uczsJLyogcGVyc2lzdGVudCBjb25uZWN0aW9ucyAqLworCV9fdTMyCQlhY3RpdmVjb25uczsJLyogYWN0aXZlIGNvbm5lY3Rpb25zICovCisJX191MzIJCWluYWN0Y29ubnM7CS8qIGluYWN0aXZlIGNvbm5lY3Rpb25zICovCisJX191MzIJCXBlcnNpc3Rjb25uczsJLyogcGVyc2lzdGVudCBjb25uZWN0aW9ucyAqLwogCiAJLyogc3RhdGlzdGljcyAqLwogCXN0cnVjdCBpcF92c19zdGF0c191c2VyIHN0YXRzOwpAQCAtMTk5LDEwICsxOTksMTAgQEAKIC8qIFRoZSBhcmd1bWVudCB0byBJUF9WU19TT19HRVRfREVTVFMgKi8KIHN0cnVjdCBpcF92c19nZXRfZGVzdHMgewogCS8qIHdoaWNoIHNlcnZpY2U6IHVzZXIgZmlsbHMgaW4gdGhlc2UgKi8KLQl1X2ludDE2X3QJCXByb3RvY29sOworCV9fdTE2CQlwcm90b2NvbDsKIAlfX2JlMzIJCQlhZGRyOwkJLyogdmlydHVhbCBhZGRyZXNzICovCiAJX19iZTE2CQkJcG9ydDsKLQl1X2ludDMyX3QJCWZ3bWFyazsJCS8qIGZpcndhbGwgbWFyayBvZiBzZXJ2aWNlICovCisJX191MzIJCWZ3bWFyazsJCS8qIGZpcndhbGwgbWFyayBvZiBzZXJ2aWNlICovCiAKIAkvKiBudW1iZXIgb2YgcmVhbCBzZXJ2ZXJzICovCiAJdW5zaWduZWQgaW50CQludW1fZGVzdHM7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lycS5oIGIvaW5jbHVkZS9saW51eC9pcnEuaAppbmRleCBmODk5YjUwLi42ZGI5MzlhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lycS5oCisrKyBiL2luY2x1ZGUvbGludXgvaXJxLmgKQEAgLTE2MCwxMiArMTYwLDEwIEBACiAgKi8KIHN0cnVjdCBpcnFfZGVzYyB7CiAJdW5zaWduZWQgaW50CQlpcnE7Ci0jaWZkZWYgQ09ORklHX1NQQVJTRV9JUlEKIAlzdHJ1Y3QgdGltZXJfcmFuZF9zdGF0ZSAqdGltZXJfcmFuZF9zdGF0ZTsKIAl1bnNpZ25lZCBpbnQgICAgICAgICAgICAqa3N0YXRfaXJxczsKLSMgaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKKyNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAogCXN0cnVjdCBpcnFfMl9pb21tdSAgICAgICppcnFfMl9pb21tdTsKLSMgZW5kaWYKICNlbmRpZgogCWlycV9mbG93X2hhbmRsZXJfdAloYW5kbGVfaXJxOwogCXN0cnVjdCBpcnFfY2hpcAkJKmNoaXA7CkBAIC0yMDIsMTIgKzIwMCw2IEBACiBleHRlcm4gc3RydWN0IGlycV9kZXNjIGlycV9kZXNjW05SX0lSUVNdOwogI2Vsc2UgLyogQ09ORklHX1NQQVJTRV9JUlEgKi8KIGV4dGVybiBzdHJ1Y3QgaXJxX2Rlc2MgKm1vdmVfaXJxX2Rlc2Moc3RydWN0IGlycV9kZXNjICpvbGRfZGVzYywgaW50IGNwdSk7Ci0KLSNkZWZpbmUga3N0YXRfaXJxc190aGlzX2NwdShERVNDKSBcCi0JKChERVNDKS0+a3N0YXRfaXJxc1tzbXBfcHJvY2Vzc29yX2lkKCldKQotI2RlZmluZSBrc3RhdF9pbmNyX2lycXNfdGhpc19jcHUoaXJxbm8sIERFU0MpIFwKLQkoKERFU0MpLT5rc3RhdF9pcnFzW3NtcF9wcm9jZXNzb3JfaWQoKV0rKykKLQogI2VuZGlmIC8qIENPTkZJR19TUEFSU0VfSVJRICovCiAKIGV4dGVybiBzdHJ1Y3QgaXJxX2Rlc2MgKmlycV90b19kZXNjX2FsbG9jX2NwdSh1bnNpZ25lZCBpbnQgaXJxLCBpbnQgY3B1KTsKQEAgLTIyNiw3ICsyMTgsNiBAQAogICogTWlncmF0aW9uIGhlbHBlcnMgZm9yIG9ic29sZXRlIG5hbWVzLCB0aGV5IHdpbGwgZ28gYXdheToKICAqLwogI2RlZmluZSBod19pbnRlcnJ1cHRfdHlwZQlpcnFfY2hpcAotdHlwZWRlZiBzdHJ1Y3QgaXJxX2NoaXAJCWh3X2lycV9jb250cm9sbGVyOwogI2RlZmluZSBub19pcnFfdHlwZQkJbm9faXJxX2NoaXAKIHR5cGVkZWYgc3RydWN0IGlycV9kZXNjCQlpcnFfZGVzY190OwogCkBAIC0yMzYsNiArMjI3LDcgQEAKICNpbmNsdWRlIDxhc20vaHdfaXJxLmg+CiAKIGV4dGVybiBpbnQgc2V0dXBfaXJxKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFhY3Rpb24gKm5ldyk7CitleHRlcm4gdm9pZCByZW1vdmVfaXJxKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFhY3Rpb24gKmFjdCk7CiAKICNpZmRlZiBDT05GSUdfR0VORVJJQ19IQVJESVJRUwogCkBAIC0yODAsNyArMjcyLDcgQEAKIH0KIAogLyogSGFuZGxlIGlycSBhY3Rpb24gY2hhaW5zOiAqLwotZXh0ZXJuIGludCBoYW5kbGVfSVJRX2V2ZW50KHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbik7CitleHRlcm4gaXJxcmV0dXJuX3QgaGFuZGxlX0lSUV9ldmVudCh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb24pOwogCiAvKgogICogQnVpbHQtaW4gSVJRIGhhbmRsZXJzIGZvciB2YXJpb3VzIElSUSB0eXBlcywKQEAgLTMyNSw3ICszMTcsNyBAQAogCiAvKiBIYW5kbGluZyBvZiB1bmhhbmRsZWQgYW5kIHNwdXJpb3VzIGludGVycnVwdHM6ICovCiBleHRlcm4gdm9pZCBub3RlX2ludGVycnVwdCh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsCi0JCQkgICBpbnQgYWN0aW9uX3JldCk7CisJCQkgICBpcnFyZXR1cm5fdCBhY3Rpb25fcmV0KTsKIAogLyogUmVzZW5kaW5nIG9mIGludGVycnVwdHMgOiovCiB2b2lkIGNoZWNrX2lycV9yZXNlbmQoc3RydWN0IGlycV9kZXNjICpkZXNjLCB1bnNpZ25lZCBpbnQgaXJxKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXJxbnIuaCBiL2luY2x1ZGUvbGludXgvaXJxbnIuaAppbmRleCA4NmFmOTJlLi41MmViYmI0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lycW5yLmgKKysrIGIvaW5jbHVkZS9saW51eC9pcnFuci5oCkBAIC0yOCwxMyArMjgsMTcgQEAKICMgZGVmaW5lIGZvcl9lYWNoX2lycV9kZXNjKGlycSwgZGVzYykJCQkJCVwKIAlmb3IgKGlycSA9IDAsIGRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOyBpcnEgPCBucl9pcnFzOwkJXAogCSAgICAgaXJxKyssIGRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpKQkJCQlcCi0JCWlmIChkZXNjKQorCQlpZiAoIWRlc2MpCQkJCQkJXAorCQkJOwkJCQkJCVwKKwkJZWxzZQogCiAKICMgZGVmaW5lIGZvcl9lYWNoX2lycV9kZXNjX3JldmVyc2UoaXJxLCBkZXNjKQkJCQlcCiAJZm9yIChpcnEgPSBucl9pcnFzIC0gMSwgZGVzYyA9IGlycV90b19kZXNjKGlycSk7IGlycSA+PSAwOwlcCiAJICAgICBpcnEtLSwgZGVzYyA9IGlycV90b19kZXNjKGlycSkpCQkJCVwKLQkJaWYgKGRlc2MpCisJCWlmICghZGVzYykJCQkJCQlcCisJCQk7CQkJCQkJXAorCQllbHNlCiAKICNlbmRpZiAvKiBDT05GSUdfR0VORVJJQ19IQVJESVJRUyAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lycXJldHVybi5oIGIvaW5jbHVkZS9saW51eC9pcnFyZXR1cm4uaAppbmRleCA4ODE4ODNjLi5jNTU4NGNhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lycXJldHVybi5oCisrKyBiL2luY2x1ZGUvbGludXgvaXJxcmV0dXJuLmgKQEAgLTEsMjUgKzEsMTcgQEAKLS8qIGlycXJldHVybi5oICovCiAjaWZuZGVmIF9MSU5VWF9JUlFSRVRVUk5fSAogI2RlZmluZSBfTElOVVhfSVJRUkVUVVJOX0gKIAotLyoKLSAqIEZvciAyLjQueCBjb21wYXRpYmlsaXR5LCAyLjQueCBjYW4gdXNlCi0gKgotICoJdHlwZWRlZiB2b2lkIGlycXJldHVybl90OwotICoJI2RlZmluZSBJUlFfTk9ORQotICoJI2RlZmluZSBJUlFfSEFORExFRAotICoJI2RlZmluZSBJUlFfUkVUVkFMKHgpCi0gKgotICogVG8gbWl4IG9sZC1zdHlsZSBhbmQgbmV3LXN0eWxlIGlycSBoYW5kbGVyIHJldHVybnMuCi0gKgotICogSVJRX05PTkUgbWVhbnMgd2UgZGlkbid0IGhhbmRsZSBpdC4KLSAqIElSUV9IQU5ETEVEIG1lYW5zIHRoYXQgd2UgZGlkIGhhdmUgYSB2YWxpZCBpbnRlcnJ1cHQgYW5kIGhhbmRsZWQgaXQuCi0gKiBJUlFfUkVUVkFMKHgpIHNlbGVjdHMgb24gdGhlIHR3byBkZXBlbmRpbmcgb24geCBiZWluZyBub24temVybyAoZm9yIGhhbmRsZWQpCisvKioKKyAqIGVudW0gaXJxcmV0dXJuCisgKiBASVJRX05PTkUJCWludGVycnVwdCB3YXMgbm90IGZyb20gdGhpcyBkZXZpY2UKKyAqIEBJUlFfSEFORExFRAkJaW50ZXJydXB0IHdhcyBoYW5kbGVkIGJ5IHRoaXMgZGV2aWNlCiAgKi8KLXR5cGVkZWYgaW50IGlycXJldHVybl90OworZW51bSBpcnFyZXR1cm4geworCUlSUV9OT05FLAorCUlSUV9IQU5ETEVELAorfTsKIAotI2RlZmluZSBJUlFfTk9ORQkoMCkKLSNkZWZpbmUgSVJRX0hBTkRMRUQJKDEpCi0jZGVmaW5lIElSUV9SRVRWQUwoeCkJKCh4KSAhPSAwKQordHlwZWRlZiBlbnVtIGlycXJldHVybiBpcnFyZXR1cm5fdDsKKyNkZWZpbmUgSVJRX1JFVFZBTCh4KQkoKHgpICE9IElSUV9OT05FKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXZ0dmZiLmggYi9pbmNsdWRlL2xpbnV4L2l2dHZmYi5oCmluZGV4IGUyMGFmNDcuLjlkODhiMjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaXZ0dmZiLmgKKysrIGIvaW5jbHVkZS9saW51eC9pdnR2ZmIuaApAQCAtMzMsNiArMzMsNiBAQAogfTsKIAogI2RlZmluZSBJVlRWRkJfSU9DX0RNQV9GUkFNRSAJX0lPVygnVicsIEJBU0VfVklESU9DX1BSSVZBVEUrMCwgc3RydWN0IGl2dHZmYl9kbWFfZnJhbWUpCi0jZGVmaW5lIEZCSU9fV0FJVEZPUlZTWU5DCV9JT1coJ0YnLCAweDIwLCB1X2ludDMyX3QpCisjZGVmaW5lIEZCSU9fV0FJVEZPUlZTWU5DCV9JT1coJ0YnLCAweDIwLCBfX3UzMikKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2pmZnMyLmggYi9pbmNsdWRlL2xpbnV4L2pmZnMyLmgKaW5kZXggZGE3MjBiYy4uMmIzMmQ2MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9qZmZzMi5oCisrKyBiL2luY2x1ZGUvbGludXgvamZmczIuaApAQCAtMTIsNiArMTIsNyBAQAogI2lmbmRlZiBfX0xJTlVYX0pGRlMyX0hfXwogI2RlZmluZSBfX0xJTlVYX0pGRlMyX0hfXwogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9tYWdpYy5oPgogCiAvKiBZb3UgbXVzdCBpbmNsdWRlIHNvbWV0aGluZyB3aGljaCBkZWZpbmVzIHRoZSBDOTkgdWludFhYX3QgdHlwZXMuIApAQCAtOTEsMTUgKzkyLDE1IEBACiAgICBieXRlc3dhcHBpbmcgKi8KIAogdHlwZWRlZiBzdHJ1Y3QgewotCXVpbnQzMl90IHYzMjsKKwlfX3UzMiB2MzI7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGppbnQzMl90OwogCiB0eXBlZGVmIHN0cnVjdCB7Ci0JdWludDMyX3QgbTsKKwlfX3UzMiBtOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBqbW9kZV90OwogCiB0eXBlZGVmIHN0cnVjdCB7Ci0JdWludDE2X3QgdjE2OworCV9fdTE2IHYxNjsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgamludDE2X3Q7CiAKIHN0cnVjdCBqZmZzMl91bmtub3duX25vZGUKQEAgLTEyMSwxMiArMTIyLDEyIEBACiAJamludDMyX3QgdmVyc2lvbjsKIAlqaW50MzJfdCBpbm87IC8qID09IHplcm8gZm9yIHVubGluayAqLwogCWppbnQzMl90IG1jdGltZTsKLQl1aW50OF90IG5zaXplOwotCXVpbnQ4X3QgdHlwZTsKLQl1aW50OF90IHVudXNlZFsyXTsKKwlfX3U4IG5zaXplOworCV9fdTggdHlwZTsKKwlfX3U4IHVudXNlZFsyXTsKIAlqaW50MzJfdCBub2RlX2NyYzsKIAlqaW50MzJfdCBuYW1lX2NyYzsKLQl1aW50OF90IG5hbWVbMF07CisJX191OCBuYW1lWzBdOwogfTsKIAogLyogVGhlIEpGRlMyIHJhdyBpbm9kZSBzdHJ1Y3R1cmU6IFVzZWQgZm9yIHN0b3JhZ2Ugb24gcGh5c2ljYWwgbWVkaWEuICAqLwpAQCAtMTUzLDEyICsxNTQsMTIgQEAKIAlqaW50MzJfdCBvZmZzZXQ7ICAgICAvKiBXaGVyZSB0byBiZWdpbiB0byB3cml0ZS4gICovCiAJamludDMyX3QgY3NpemU7ICAgICAgLyogKENvbXByZXNzZWQpIGRhdGEgc2l6ZSAqLwogCWppbnQzMl90IGRzaXplOwkgICAgIC8qIFNpemUgb2YgdGhlIG5vZGUncyBkYXRhLiAoYWZ0ZXIgZGVjb21wcmVzc2lvbikgKi8KLQl1aW50OF90IGNvbXByOyAgICAgICAvKiBDb21wcmVzc2lvbiBhbGdvcml0aG0gdXNlZCAqLwotCXVpbnQ4X3QgdXNlcmNvbXByOyAgIC8qIENvbXByZXNzaW9uIGFsZ29yaXRobSByZXF1ZXN0ZWQgYnkgdGhlIHVzZXIgKi8KKwlfX3U4IGNvbXByOyAgICAgICAvKiBDb21wcmVzc2lvbiBhbGdvcml0aG0gdXNlZCAqLworCV9fdTggdXNlcmNvbXByOyAgIC8qIENvbXByZXNzaW9uIGFsZ29yaXRobSByZXF1ZXN0ZWQgYnkgdGhlIHVzZXIgKi8KIAlqaW50MTZfdCBmbGFnczsJICAgICAvKiBTZWUgSkZGUzJfSU5PX0ZMQUdfKiAqLwogCWppbnQzMl90IGRhdGFfY3JjOyAgIC8qIENSQyBmb3IgdGhlIChjb21wcmVzc2VkKSBkYXRhLiAgKi8KIAlqaW50MzJfdCBub2RlX2NyYzsgICAvKiBDUkMgZm9yIHRoZSByYXcgaW5vZGUgKGV4Y2x1ZGluZyBkYXRhKSAgKi8KLQl1aW50OF90IGRhdGFbMF07CisJX191OCBkYXRhWzBdOwogfTsKIAogc3RydWN0IGpmZnMyX3Jhd194YXR0ciB7CkBAIC0xNjgsMTIgKzE2OSwxMiBAQAogCWppbnQzMl90IGhkcl9jcmM7CiAJamludDMyX3QgeGlkOwkJLyogWEFUVFIgaWRlbnRpZmllciBudW1iZXIgKi8KIAlqaW50MzJfdCB2ZXJzaW9uOwotCXVpbnQ4X3QgeHByZWZpeDsKLQl1aW50OF90IG5hbWVfbGVuOworCV9fdTggeHByZWZpeDsKKwlfX3U4IG5hbWVfbGVuOwogCWppbnQxNl90IHZhbHVlX2xlbjsKIAlqaW50MzJfdCBkYXRhX2NyYzsKIAlqaW50MzJfdCBub2RlX2NyYzsKLQl1aW50OF90IGRhdGFbMF07CisJX191OCBkYXRhWzBdOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogc3RydWN0IGpmZnMyX3Jhd194cmVmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oIGIvaW5jbHVkZS9saW51eC9rZXJuZWwuaAppbmRleCA3ZmEzNzE4Li45MTQ5MThhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCisrKyBiL2luY2x1ZGUvbGludXgva2VybmVsLmgKQEAgLTE2LDcgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9sb2cyLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZWNoZWNrLmg+CiAjaW5jbHVkZSA8bGludXgvcmF0ZWxpbWl0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZHluYW1pY19wcmludGsuaD4KKyNpbmNsdWRlIDxsaW51eC9keW5hbWljX2RlYnVnLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogI2luY2x1ZGUgPGFzbS9idWcuaD4KIApAQCAtMzU4LDkgKzM1OCwxMCBAQAogI2lmIGRlZmluZWQoREVCVUcpCiAjZGVmaW5lIHByX2RlYnVnKGZtdCwgLi4uKSBcCiAJcHJpbnRrKEtFUk5fREVCVUcgcHJfZm10KGZtdCksICMjX19WQV9BUkdTX18pCi0jZWxpZiBkZWZpbmVkKENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRykKKyNlbGlmIGRlZmluZWQoQ09ORklHX0RZTkFNSUNfREVCVUcpCisvKiBkeW5hbWljX3ByX2RlYnVnKCkgdXNlcyBwcl9mbXQoKSBpbnRlcm5hbGx5IHNvIHdlIGRvbid0IG5lZWQgaXQgaGVyZSAqLwogI2RlZmluZSBwcl9kZWJ1ZyhmbXQsIC4uLikgZG8geyBcCi0JZHluYW1pY19wcl9kZWJ1Zyhwcl9mbXQoZm10KSwgIyNfX1ZBX0FSR1NfXyk7IFwKKwlkeW5hbWljX3ByX2RlYnVnKGZtdCwgIyNfX1ZBX0FSR1NfXyk7IFwKIAl9IHdoaWxlICgwKQogI2Vsc2UKICNkZWZpbmUgcHJfZGVidWcoZm10LCAuLi4pIFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2VybmVsX3N0YXQuaCBiL2luY2x1ZGUvbGludXgva2VybmVsX3N0YXQuaAppbmRleCA1NzBkMjA0Li4wYzhiODlmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2tlcm5lbF9zdGF0LmgKKysrIGIvaW5jbHVkZS9saW51eC9rZXJuZWxfc3RhdC5oCkBAIC0yOCw3ICsyOCw3IEBACiAKIHN0cnVjdCBrZXJuZWxfc3RhdCB7CiAJc3RydWN0IGNwdV91c2FnZV9zdGF0CWNwdXN0YXQ7Ci0jaWZuZGVmIENPTkZJR19TUEFSU0VfSVJRCisjaWZuZGVmIENPTkZJR19HRU5FUklDX0hBUkRJUlFTCiAgICAgICAgdW5zaWduZWQgaW50IGlycXNbTlJfSVJRU107CiAjZW5kaWYKIH07CkBAIC00MSw3ICs0MSw3IEBACiAKIGV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgbnJfY29udGV4dF9zd2l0Y2hlcyh2b2lkKTsKIAotI2lmbmRlZiBDT05GSUdfU1BBUlNFX0lSUQorI2lmbmRlZiBDT05GSUdfR0VORVJJQ19IQVJESVJRUwogI2RlZmluZSBrc3RhdF9pcnFzX3RoaXNfY3B1KGlycSkgXAogCShrc3RhdF90aGlzX2NwdS5pcnFzW2lycV0pCiAKQEAgLTUyLDE2ICs1MiwxOSBAQAogewogCWtzdGF0X3RoaXNfY3B1LmlycXNbaXJxXSsrOwogfQotI2VuZGlmCiAKLQotI2lmbmRlZiBDT05GSUdfU1BBUlNFX0lSUQogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQga3N0YXRfaXJxc19jcHUodW5zaWduZWQgaW50IGlycSwgaW50IGNwdSkKIHsKICAgICAgICByZXR1cm4ga3N0YXRfY3B1KGNwdSkuaXJxc1tpcnFdOwogfQogI2Vsc2UKKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KIGV4dGVybiB1bnNpZ25lZCBpbnQga3N0YXRfaXJxc19jcHUodW5zaWduZWQgaW50IGlycSwgaW50IGNwdSk7CisjZGVmaW5lIGtzdGF0X2lycXNfdGhpc19jcHUoREVTQykgXAorCSgoREVTQyktPmtzdGF0X2lycXNbc21wX3Byb2Nlc3Nvcl9pZCgpXSkKKyNkZWZpbmUga3N0YXRfaW5jcl9pcnFzX3RoaXNfY3B1KGlycW5vLCBERVNDKSBcCisJKChERVNDKS0+a3N0YXRfaXJxc1tzbXBfcHJvY2Vzc29yX2lkKCldKyspCisKICNlbmRpZgogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rb2JqZWN0LmggYi9pbmNsdWRlL2xpbnV4L2tvYmplY3QuaAppbmRleCA1NDM3YWMwLi41OGFlOGUwMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rb2JqZWN0LmgKKysrIGIvaW5jbHVkZS9saW51eC9rb2JqZWN0LmgKQEAgLTY4LDEwICs2OCwxMyBAQAogCXVuc2lnbmVkIGludCBzdGF0ZV9pbl9zeXNmczoxOwogCXVuc2lnbmVkIGludCBzdGF0ZV9hZGRfdWV2ZW50X3NlbnQ6MTsKIAl1bnNpZ25lZCBpbnQgc3RhdGVfcmVtb3ZlX3VldmVudF9zZW50OjE7CisJdW5zaWduZWQgaW50IHVldmVudF9zdXBwcmVzczoxOwogfTsKIAogZXh0ZXJuIGludCBrb2JqZWN0X3NldF9uYW1lKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBjb25zdCBjaGFyICpuYW1lLCAuLi4pCiAJCQkgICAgX19hdHRyaWJ1dGVfXygoZm9ybWF0KHByaW50ZiwgMiwgMykpKTsKK2V4dGVybiBpbnQga29iamVjdF9zZXRfbmFtZV92YXJncyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgY29uc3QgY2hhciAqZm10LAorCQkJCSAgdmFfbGlzdCB2YXJncyk7CiAKIHN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqa29iamVjdF9uYW1lKGNvbnN0IHN0cnVjdCBrb2JqZWN0ICprb2JqKQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm0uaCBiL2luY2x1ZGUvbGludXgva3ZtLmgKaW5kZXggMDQyNDMyNmYuLjMxMWEwNzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva3ZtLmgKKysrIGIvaW5jbHVkZS9saW51eC9rdm0uaApAQCAtNDgsNyArNDgsMTAgQEAKIAkgKiBGb3IgSUEtNjQgKEFQSUMgbW9kZWwpIElPQVBJQzA6IGlycSAwLTIzOyBJT0FQSUMxOiBpcnEgMjQtNDcuLgogCSAqIEZvciBYODYgKHN0YW5kYXJkIEFUIG1vZGUpIFBJQzAvMTogaXJxIDAtMTUuIElPQVBJQzA6IDAtMjMuLgogCSAqLwotCV9fdTMyIGlycTsKKwl1bmlvbiB7CisJCV9fdTMyIGlycTsKKwkJX19zMzIgc3RhdHVzOworCX07CiAJX191MzIgbGV2ZWw7CiB9OwogCkBAIC0xMjYsNiArMTI5LDcgQEAKIAkJCV9fdTY0IGRhdGFfb2Zmc2V0OyAvKiByZWxhdGl2ZSB0byBrdm1fcnVuIHN0YXJ0ICovCiAJCX0gaW87CiAJCXN0cnVjdCB7CisJCQlzdHJ1Y3Qga3ZtX2RlYnVnX2V4aXRfYXJjaCBhcmNoOwogCQl9IGRlYnVnOwogCQkvKiBLVk1fRVhJVF9NTUlPICovCiAJCXN0cnVjdCB7CkBAIC0yMTcsMjEgKzIyMSw2IEBACiAJX191MzIgaXJxOwogfTsKIAotc3RydWN0IGt2bV9icmVha3BvaW50IHsKLQlfX3UzMiBlbmFibGVkOwotCV9fdTMyIHBhZGRpbmc7Ci0JX191NjQgYWRkcmVzczsKLX07Ci0KLS8qIGZvciBLVk1fREVCVUdfR1VFU1QgKi8KLXN0cnVjdCBrdm1fZGVidWdfZ3Vlc3QgewotCS8qIGludCAqLwotCV9fdTMyIGVuYWJsZWQ7Ci0JX191MzIgcGFkOwotCXN0cnVjdCBrdm1fYnJlYWtwb2ludCBicmVha3BvaW50c1s0XTsKLQlfX3UzMiBzaW5nbGVzdGVwOwotfTsKLQogLyogZm9yIEtWTV9HRVRfRElSVFlfTE9HICovCiBzdHJ1Y3Qga3ZtX2RpcnR5X2xvZyB7CiAJX191MzIgc2xvdDsKQEAgLTI5Miw2ICsyODEsMTcgQEAKIAlfX3U2NCBwYXJtNjQ7CiB9OwogCisvKiBmb3IgS1ZNX1NFVF9HVUVTVF9ERUJVRyAqLworCisjZGVmaW5lIEtWTV9HVUVTVERCR19FTkFCTEUJCTB4MDAwMDAwMDEKKyNkZWZpbmUgS1ZNX0dVRVNUREJHX1NJTkdMRVNURVAJCTB4MDAwMDAwMDIKKworc3RydWN0IGt2bV9ndWVzdF9kZWJ1ZyB7CisJX191MzIgY29udHJvbDsKKwlfX3UzMiBwYWQ7CisJc3RydWN0IGt2bV9ndWVzdF9kZWJ1Z19hcmNoIGFyY2g7Cit9OworCiAjZGVmaW5lIEtWTV9UUkNfU0hJRlQgICAgICAgICAgIDE2CiAvKgogICoga3ZtIHRyYWNlIGNhdGVnb3JpZXMKQEAgLTM5Niw2ICszOTYsNTcgQEAKICNpZmRlZiBfX0tWTV9IQVZFX1VTRVJfTk1JCiAjZGVmaW5lIEtWTV9DQVBfVVNFUl9OTUkgMjIKICNlbmRpZgorI2lmZGVmIF9fS1ZNX0hBVkVfR1VFU1RfREVCVUcKKyNkZWZpbmUgS1ZNX0NBUF9TRVRfR1VFU1RfREVCVUcgMjMKKyNlbmRpZgorI2lmZGVmIF9fS1ZNX0hBVkVfUElUCisjZGVmaW5lIEtWTV9DQVBfUkVJTkpFQ1RfQ09OVFJPTCAyNAorI2VuZGlmCisjaWZkZWYgX19LVk1fSEFWRV9JT0FQSUMKKyNkZWZpbmUgS1ZNX0NBUF9JUlFfUk9VVElORyAyNQorI2VuZGlmCisjZGVmaW5lIEtWTV9DQVBfSVJRX0lOSkVDVF9TVEFUVVMgMjYKKyNpZmRlZiBfX0tWTV9IQVZFX0RFVklDRV9BU1NJR05NRU5UCisjZGVmaW5lIEtWTV9DQVBfREVWSUNFX0RFQVNTSUdOTUVOVCAyNworI2VuZGlmCisKKyNpZmRlZiBLVk1fQ0FQX0lSUV9ST1VUSU5HCisKK3N0cnVjdCBrdm1faXJxX3JvdXRpbmdfaXJxY2hpcCB7CisJX191MzIgaXJxY2hpcDsKKwlfX3UzMiBwaW47Cit9OworCitzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX21zaSB7CisJX191MzIgYWRkcmVzc19sbzsKKwlfX3UzMiBhZGRyZXNzX2hpOworCV9fdTMyIGRhdGE7CisJX191MzIgcGFkOworfTsKKworLyogZ3NpIHJvdXRpbmcgZW50cnkgdHlwZXMgKi8KKyNkZWZpbmUgS1ZNX0lSUV9ST1VUSU5HX0lSUUNISVAgMQorI2RlZmluZSBLVk1fSVJRX1JPVVRJTkdfTVNJIDIKKworc3RydWN0IGt2bV9pcnFfcm91dGluZ19lbnRyeSB7CisJX191MzIgZ3NpOworCV9fdTMyIHR5cGU7CisJX191MzIgZmxhZ3M7CisJX191MzIgcGFkOworCXVuaW9uIHsKKwkJc3RydWN0IGt2bV9pcnFfcm91dGluZ19pcnFjaGlwIGlycWNoaXA7CisJCXN0cnVjdCBrdm1faXJxX3JvdXRpbmdfbXNpIG1zaTsKKwkJX191MzIgcGFkWzhdOworCX0gdTsKK307CisKK3N0cnVjdCBrdm1faXJxX3JvdXRpbmcgeworCV9fdTMyIG5yOworCV9fdTMyIGZsYWdzOworCXN0cnVjdCBrdm1faXJxX3JvdXRpbmdfZW50cnkgZW50cmllc1swXTsKK307CisKKyNlbmRpZgogCiAvKgogICogaW9jdGxzIGZvciBWTSBmZHMKQEAgLTQyMSwxNCArNDcyLDE5IEBACiAjZGVmaW5lIEtWTV9DUkVBVEVfUElUCQkgIF9JTyhLVk1JTywgIDB4NjQpCiAjZGVmaW5lIEtWTV9HRVRfUElUCQkgIF9JT1dSKEtWTUlPLCAweDY1LCBzdHJ1Y3Qga3ZtX3BpdF9zdGF0ZSkKICNkZWZpbmUgS1ZNX1NFVF9QSVQJCSAgX0lPUihLVk1JTywgIDB4NjYsIHN0cnVjdCBrdm1fcGl0X3N0YXRlKQorI2RlZmluZSBLVk1fSVJRX0xJTkVfU1RBVFVTCSAgX0lPV1IoS1ZNSU8sIDB4NjcsIHN0cnVjdCBrdm1faXJxX2xldmVsKQogI2RlZmluZSBLVk1fUkVHSVNURVJfQ09BTEVTQ0VEX01NSU8gXAogCQkJX0lPVyhLVk1JTywgIDB4NjcsIHN0cnVjdCBrdm1fY29hbGVzY2VkX21taW9fem9uZSkKICNkZWZpbmUgS1ZNX1VOUkVHSVNURVJfQ09BTEVTQ0VEX01NSU8gXAogCQkJX0lPVyhLVk1JTywgIDB4NjgsIHN0cnVjdCBrdm1fY29hbGVzY2VkX21taW9fem9uZSkKICNkZWZpbmUgS1ZNX0FTU0lHTl9QQ0lfREVWSUNFIF9JT1IoS1ZNSU8sIDB4NjksIFwKIAkJCQkgICBzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX3BjaV9kZXYpCisjZGVmaW5lIEtWTV9TRVRfR1NJX1JPVVRJTkcgICAgICAgX0lPVyhLVk1JTywgMHg2YSwgc3RydWN0IGt2bV9pcnFfcm91dGluZykKICNkZWZpbmUgS1ZNX0FTU0lHTl9JUlEgX0lPUihLVk1JTywgMHg3MCwgXAogCQkJICAgIHN0cnVjdCBrdm1fYXNzaWduZWRfaXJxKQorI2RlZmluZSBLVk1fUkVJTkpFQ1RfQ09OVFJPTCAgICAgIF9JTyhLVk1JTywgMHg3MSkKKyNkZWZpbmUgS1ZNX0RFQVNTSUdOX1BDSV9ERVZJQ0UgX0lPVyhLVk1JTywgMHg3MiwgXAorCQkJCSAgICAgc3RydWN0IGt2bV9hc3NpZ25lZF9wY2lfZGV2KQogCiAvKgogICogaW9jdGxzIGZvciB2Y3B1IGZkcwpAQCAtNDQwLDcgKzQ5Niw4IEBACiAjZGVmaW5lIEtWTV9TRVRfU1JFR1MgICAgICAgICAgICAgX0lPVyhLVk1JTywgIDB4ODQsIHN0cnVjdCBrdm1fc3JlZ3MpCiAjZGVmaW5lIEtWTV9UUkFOU0xBVEUgICAgICAgICAgICAgX0lPV1IoS1ZNSU8sIDB4ODUsIHN0cnVjdCBrdm1fdHJhbnNsYXRpb24pCiAjZGVmaW5lIEtWTV9JTlRFUlJVUFQgICAgICAgICAgICAgX0lPVyhLVk1JTywgIDB4ODYsIHN0cnVjdCBrdm1faW50ZXJydXB0KQotI2RlZmluZSBLVk1fREVCVUdfR1VFU1QgICAgICAgICAgIF9JT1coS1ZNSU8sICAweDg3LCBzdHJ1Y3Qga3ZtX2RlYnVnX2d1ZXN0KQorLyogS1ZNX0RFQlVHX0dVRVNUIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQsIHVzZSBLVk1fU0VUX0dVRVNUX0RFQlVHIGluc3RlYWQgKi8KKyNkZWZpbmUgS1ZNX0RFQlVHX0dVRVNUICAgICAgICAgICBfX0tWTV9ERVBSRUNBVEVEX0RFQlVHX0dVRVNUCiAjZGVmaW5lIEtWTV9HRVRfTVNSUyAgICAgICAgICAgICAgX0lPV1IoS1ZNSU8sIDB4ODgsIHN0cnVjdCBrdm1fbXNycykKICNkZWZpbmUgS1ZNX1NFVF9NU1JTICAgICAgICAgICAgICBfSU9XKEtWTUlPLCAgMHg4OSwgc3RydWN0IGt2bV9tc3JzKQogI2RlZmluZSBLVk1fU0VUX0NQVUlEICAgICAgICAgICAgIF9JT1coS1ZNSU8sICAweDhhLCBzdHJ1Y3Qga3ZtX2NwdWlkKQpAQCAtNDY5LDYgKzUyNiwyOSBAQAogI2RlZmluZSBLVk1fU0VUX01QX1NUQVRFICAgICAgICAgIF9JT1coS1ZNSU8sICAweDk5LCBzdHJ1Y3Qga3ZtX21wX3N0YXRlKQogLyogQXZhaWxhYmxlIHdpdGggS1ZNX0NBUF9OTUkgKi8KICNkZWZpbmUgS1ZNX05NSSAgICAgICAgICAgICAgICAgICBfSU8oS1ZNSU8sICAweDlhKQorLyogQXZhaWxhYmxlIHdpdGggS1ZNX0NBUF9TRVRfR1VFU1RfREVCVUcgKi8KKyNkZWZpbmUgS1ZNX1NFVF9HVUVTVF9ERUJVRyAgICAgICBfSU9XKEtWTUlPLCAgMHg5Yiwgc3RydWN0IGt2bV9ndWVzdF9kZWJ1ZykKKworLyoKKyAqIERlcHJlY2F0ZWQgaW50ZXJmYWNlcworICovCitzdHJ1Y3Qga3ZtX2JyZWFrcG9pbnQgeworCV9fdTMyIGVuYWJsZWQ7CisJX191MzIgcGFkZGluZzsKKwlfX3U2NCBhZGRyZXNzOworfTsKKworc3RydWN0IGt2bV9kZWJ1Z19ndWVzdCB7CisJX191MzIgZW5hYmxlZDsKKwlfX3UzMiBwYWQ7CisJc3RydWN0IGt2bV9icmVha3BvaW50IGJyZWFrcG9pbnRzWzRdOworCV9fdTMyIHNpbmdsZXN0ZXA7Cit9OworCisjZGVmaW5lIF9fS1ZNX0RFUFJFQ0FURURfREVCVUdfR1VFU1QgX0lPVyhLVk1JTywgIDB4ODcsIHN0cnVjdCBrdm1fZGVidWdfZ3Vlc3QpCisKKyNkZWZpbmUgS1ZNX0lBNjRfVkNQVV9HRVRfU1RBQ0sgICBfSU9SKEtWTUlPLCAgMHg5YSwgdm9pZCAqKQorI2RlZmluZSBLVk1fSUE2NF9WQ1BVX1NFVF9TVEFDSyAgIF9JT1coS1ZNSU8sICAweDliLCB2b2lkICopCiAKICNkZWZpbmUgS1ZNX1RSQ19JTkpfVklSUSAgICAgICAgIChLVk1fVFJDX0hBTkRMRVIgKyAweDAyKQogI2RlZmluZSBLVk1fVFJDX1JFREVMSVZFUl9FVlQgICAgKEtWTV9UUkNfSEFORExFUiArIDB4MDMpCkBAIC01MjIsNiArNjAyLDcgQEAKIAogI2RlZmluZSBLVk1fREVWX0FTU0lHTl9FTkFCTEVfSU9NTVUJKDEgPDwgMCkKIAorI2RlZmluZSBLVk1fREVWX0lSUV9BU1NJR05fTVNJX0FDVElPTglLVk1fREVWX0lSUV9BU1NJR05fRU5BQkxFX01TSQogI2RlZmluZSBLVk1fREVWX0lSUV9BU1NJR05fRU5BQkxFX01TSQkoMSA8PCAwKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaCBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaAppbmRleCBiZjZmNzAzLi44OTRhNTZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKKysrIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oCkBAIC0zNyw2ICszNyw3IEBACiAjZGVmaW5lIEtWTV9SRVFfUEVORElOR19USU1FUiAgICAgIDUKICNkZWZpbmUgS1ZNX1JFUV9VTkhBTFQgICAgICAgICAgICAgNgogI2RlZmluZSBLVk1fUkVRX01NVV9TWU5DICAgICAgICAgICA3CisjZGVmaW5lIEtWTV9SRVFfS1ZNQ0xPQ0tfVVBEQVRFICAgIDgKIAogI2RlZmluZSBLVk1fVVNFUlNQQUNFX0lSUV9TT1VSQ0VfSUQJMAogCkBAIC03Myw3ICs3NCw3IEBACiAJc3RydWN0IGt2bV9ydW4gKnJ1bjsKIAlpbnQgZ3Vlc3RfbW9kZTsKIAl1bnNpZ25lZCBsb25nIHJlcXVlc3RzOwotCXN0cnVjdCBrdm1fZ3Vlc3RfZGVidWcgZ3Vlc3RfZGVidWc7CisJdW5zaWduZWQgbG9uZyBndWVzdF9kZWJ1ZzsKIAlpbnQgZnB1X2FjdGl2ZTsKIAlpbnQgZ3Vlc3RfZnB1X2xvYWRlZDsKIAl3YWl0X3F1ZXVlX2hlYWRfdCB3cTsKQEAgLTEwNyw2ICsxMDgsMjAgQEAKIAlpbnQgdXNlcl9hbGxvYzsKIH07CiAKK3N0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5IHsKKwl1MzIgZ3NpOworCWludCAoKnNldCkoc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmUsCisJCSAgICBzdHJ1Y3Qga3ZtICprdm0sIGludCBsZXZlbCk7CisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJdW5zaWduZWQgaXJxY2hpcDsKKwkJCXVuc2lnbmVkIHBpbjsKKwkJfSBpcnFjaGlwOworCQlzdHJ1Y3QgbXNpX21zZyBtc2k7CisJfTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpbms7Cit9OworCiBzdHJ1Y3Qga3ZtIHsKIAlzdHJ1Y3QgbXV0ZXggbG9jazsgLyogcHJvdGVjdHMgdGhlIHZjcHVzIGFycmF5IGFuZCBBUElDIGFjY2Vzc2VzICovCiAJc3BpbmxvY2tfdCBtbXVfbG9jazsKQEAgLTEyNyw2ICsxNDIsMTEgQEAKIAlzdHJ1Y3Qga3ZtX2NvYWxlc2NlZF9tbWlvX3JpbmcgKmNvYWxlc2NlZF9tbWlvX3Jpbmc7CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19IQVZFX0tWTV9JUlFDSElQCisJc3RydWN0IGxpc3RfaGVhZCBpcnFfcm91dGluZzsgLyogb2Yga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqLworCXN0cnVjdCBobGlzdF9oZWFkIG1hc2tfbm90aWZpZXJfbGlzdDsKKyNlbmRpZgorCiAjaWZkZWYgS1ZNX0FSQ0hfV0FOVF9NTVVfTk9USUZJRVIKIAlzdHJ1Y3QgbW11X25vdGlmaWVyIG1tdV9ub3RpZmllcjsKIAl1bnNpZ25lZCBsb25nIG1tdV9ub3RpZmllcl9zZXE7CkBAIC0yMzcsNyArMjU3LDYgQEAKIAkJCQkgICBpbnQgdXNlcl9hbGxvYyk7CiBsb25nIGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLAogCQkgICAgICAgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZyk7Ci12b2lkIGt2bV9hcmNoX2Rlc3Ryb3lfdm0oc3RydWN0IGt2bSAqa3ZtKTsKIAogaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfZ2V0X2ZwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fZnB1ICpmcHUpOwogaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X2ZwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fZnB1ICpmcHUpOwpAQCAtMjU1LDggKzI3NCw4IEBACiAJCQkJICAgIHN0cnVjdCBrdm1fbXBfc3RhdGUgKm1wX3N0YXRlKTsKIGludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9tcHN0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAkJCQkgICAgc3RydWN0IGt2bV9tcF9zdGF0ZSAqbXBfc3RhdGUpOwotaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfZGVidWdfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAotCQkJCSAgICBzdHJ1Y3Qga3ZtX2RlYnVnX2d1ZXN0ICpkYmcpOworaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X2d1ZXN0X2RlYnVnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKwkJCQkJc3RydWN0IGt2bV9ndWVzdF9kZWJ1ZyAqZGJnKTsKIGludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcnVuICprdm1fcnVuKTsKIAogaW50IGt2bV9hcmNoX2luaXQodm9pZCAqb3BhcXVlKTsKQEAgLTMxMCw3ICszMjksNiBAQAogCWludCBob3N0X2lycTsKIAlib29sIGhvc3RfaXJxX2Rpc2FibGVkOwogCWludCBndWVzdF9pcnE7Ci0Jc3RydWN0IG1zaV9tc2cgZ3Vlc3RfbXNpOwogI2RlZmluZSBLVk1fQVNTSUdORURfREVWX0dVRVNUX0lOVFgJKDEgPDwgMCkKICNkZWZpbmUgS1ZNX0FTU0lHTkVEX0RFVl9HVUVTVF9NU0kJKDEgPDwgMSkKICNkZWZpbmUgS1ZNX0FTU0lHTkVEX0RFVl9IT1NUX0lOVFgJKDEgPDwgOCkKQEAgLTMyMSw4ICszMzksMjEgQEAKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2OwogCXN0cnVjdCBrdm0gKmt2bTsKIH07Ci12b2lkIGt2bV9zZXRfaXJxKHN0cnVjdCBrdm0gKmt2bSwgaW50IGlycV9zb3VyY2VfaWQsIGludCBpcnEsIGludCBsZXZlbCk7Ci12b2lkIGt2bV9ub3RpZnlfYWNrZWRfaXJxKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgZ3NpKTsKKworc3RydWN0IGt2bV9pcnFfbWFza19ub3RpZmllciB7CisJdm9pZCAoKmZ1bmMpKHN0cnVjdCBrdm1faXJxX21hc2tfbm90aWZpZXIgKmtpbW4sIGJvb2wgbWFza2VkKTsKKwlpbnQgaXJxOworCXN0cnVjdCBobGlzdF9ub2RlIGxpbms7Cit9OworCit2b2lkIGt2bV9yZWdpc3Rlcl9pcnFfbWFza19ub3RpZmllcihzdHJ1Y3Qga3ZtICprdm0sIGludCBpcnEsCisJCQkJICAgIHN0cnVjdCBrdm1faXJxX21hc2tfbm90aWZpZXIgKmtpbW4pOwordm9pZCBrdm1fdW5yZWdpc3Rlcl9pcnFfbWFza19ub3RpZmllcihzdHJ1Y3Qga3ZtICprdm0sIGludCBpcnEsCisJCQkJICAgICAgc3RydWN0IGt2bV9pcnFfbWFza19ub3RpZmllciAqa2ltbik7Cit2b2lkIGt2bV9maXJlX21hc2tfbm90aWZpZXJzKHN0cnVjdCBrdm0gKmt2bSwgaW50IGlycSwgYm9vbCBtYXNrKTsKKworaW50IGt2bV9zZXRfaXJxKHN0cnVjdCBrdm0gKmt2bSwgaW50IGlycV9zb3VyY2VfaWQsIGludCBpcnEsIGludCBsZXZlbCk7Cit2b2lkIGt2bV9ub3RpZnlfYWNrZWRfaXJxKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaXJxY2hpcCwgdW5zaWduZWQgcGluKTsKIHZvaWQga3ZtX3JlZ2lzdGVyX2lycV9hY2tfbm90aWZpZXIoc3RydWN0IGt2bSAqa3ZtLAogCQkJCSAgIHN0cnVjdCBrdm1faXJxX2Fja19ub3RpZmllciAqa2lhbik7CiB2b2lkIGt2bV91bnJlZ2lzdGVyX2lycV9hY2tfbm90aWZpZXIoc3RydWN0IGt2bV9pcnFfYWNrX25vdGlmaWVyICpraWFuKTsKQEAgLTQ2NCw0ICs0OTUsMjEgQEAKIH0KICNlbmRpZgogCisjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0lSUUNISVAKKworI2RlZmluZSBLVk1fTUFYX0lSUV9ST1VURVMgMTAyNAorCitpbnQga3ZtX3NldHVwX2RlZmF1bHRfaXJxX3JvdXRpbmcoc3RydWN0IGt2bSAqa3ZtKTsKK2ludCBrdm1fc2V0X2lycV9yb3V0aW5nKHN0cnVjdCBrdm0gKmt2bSwKKwkJCWNvbnN0IHN0cnVjdCBrdm1faXJxX3JvdXRpbmdfZW50cnkgKmVudHJpZXMsCisJCQl1bnNpZ25lZCBuciwKKwkJCXVuc2lnbmVkIGZsYWdzKTsKK3ZvaWQga3ZtX2ZyZWVfaXJxX3JvdXRpbmcoc3RydWN0IGt2bSAqa3ZtKTsKKworI2Vsc2UKKworc3RhdGljIGlubGluZSB2b2lkIGt2bV9mcmVlX2lycV9yb3V0aW5nKHN0cnVjdCBrdm0gKmt2bSkge30KKworI2VuZGlmCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm1fdHlwZXMuaCBiL2luY2x1ZGUvbGludXgva3ZtX3R5cGVzLmgKaW5kZXggOWI2ZjM5NS4uMmI4MzE4YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rdm1fdHlwZXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2t2bV90eXBlcy5oCkBAIC00MCwxNyArNDAsNCBAQAogCiB0eXBlZGVmIGhmbl90IHBmbl90OwogCi1zdHJ1Y3Qga3ZtX3Bpb19yZXF1ZXN0IHsKLQl1bnNpZ25lZCBsb25nIGNvdW50OwotCWludCBjdXJfY291bnQ7Ci0Jc3RydWN0IHBhZ2UgKmd1ZXN0X3BhZ2VzWzJdOwotCXVuc2lnbmVkIGd1ZXN0X3BhZ2Vfb2Zmc2V0OwotCWludCBpbjsKLQlpbnQgcG9ydDsKLQlpbnQgc2l6ZTsKLQlpbnQgc3RyaW5nOwotCWludCBkb3duOwotCWludCByZXA7Ci19OwotCiAjZW5kaWYgLyogX19LVk1fVFlQRVNfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xhdGVuY3l0b3AuaCBiL2luY2x1ZGUvbGludXgvbGF0ZW5jeXRvcC5oCmluZGV4IDkwMWMyZDYuLmIwZTk5ODkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbGF0ZW5jeXRvcC5oCisrKyBiL2luY2x1ZGUvbGludXgvbGF0ZW5jeXRvcC5oCkBAIC05LDYgKzksNyBAQAogI2lmbmRlZiBfSU5DTFVERV9HVUFSRF9MQVRFTkNZVE9QX0hfCiAjZGVmaW5lIF9JTkNMVURFX0dVQVJEX0xBVEVOQ1lUT1BfSF8KIAorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaWZkZWYgQ09ORklHX0xBVEVOQ1lUT1AKIAogI2RlZmluZSBMVF9TQVZFQ09VTlQJCTMyCkBAIC0yNCw3ICsyNSwxNCBAQAogCiBzdHJ1Y3QgdGFza19zdHJ1Y3Q7CiAKLXZvaWQgYWNjb3VudF9zY2hlZHVsZXJfbGF0ZW5jeShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGludCB1c2VjcywgaW50IGludGVyKTsKK2V4dGVybiBpbnQgbGF0ZW5jeXRvcF9lbmFibGVkOwordm9pZCBfX2FjY291bnRfc2NoZWR1bGVyX2xhdGVuY3koc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBpbnQgdXNlY3MsIGludCBpbnRlcik7CitzdGF0aWMgaW5saW5lIHZvaWQKK2FjY291bnRfc2NoZWR1bGVyX2xhdGVuY3koc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBpbnQgdXNlY3MsIGludCBpbnRlcikKK3sKKwlpZiAodW5saWtlbHkobGF0ZW5jeXRvcF9lbmFibGVkKSkKKwkJX19hY2NvdW50X3NjaGVkdWxlcl9sYXRlbmN5KHRhc2ssIHVzZWNzLCBpbnRlcik7Cit9CiAKIHZvaWQgY2xlYXJfYWxsX2xhdGVuY3lfdHJhY2luZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xpYmF0YS5oIGIvaW5jbHVkZS9saW51eC9saWJhdGEuaAppbmRleCBkYzE4Yjg3Li43NjI2MmQ4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2xpYmF0YS5oCisrKyBiL2luY2x1ZGUvbGludXgvbGliYXRhLmgKQEAgLTc5NSw2ICs3OTUsNyBAQAogCWF0YV9yZXNldF9mbl90CQlwbXBfaGFyZHJlc2V0OwogCWF0YV9wb3N0cmVzZXRfZm5fdAlwbXBfcG9zdHJlc2V0OwogCXZvaWQgKCplcnJvcl9oYW5kbGVyKShzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKKwl2b2lkICgqbG9zdF9pbnRlcnJ1cHQpKHN0cnVjdCBhdGFfcG9ydCAqYXApOwogCXZvaWQgKCpwb3N0X2ludGVybmFsX2NtZCkoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CiAKIAkvKgpAQCAtODM2LDYgKzgzNyw4IEBACiAJdm9pZCAoKmJtZG1hX3N0YXJ0KShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKIAl2b2lkICgqYm1kbWFfc3RvcCkoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CiAJdTggICAoKmJtZG1hX3N0YXR1cykoc3RydWN0IGF0YV9wb3J0ICphcCk7CisKKwl2b2lkICgqZHJhaW5fZmlmbykoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CiAjZW5kaWYgLyogQ09ORklHX0FUQV9TRkYgKi8KIAogCXNzaXplX3QgKCplbV9zaG93KShzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBjaGFyICpidWYpOwpAQCAtMTAwOCw2ICsxMDExLDkgQEAKIGV4dGVybiBpbnQgYXRhX2NhYmxlX2lnbm9yZShzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKIGV4dGVybiBpbnQgYXRhX2NhYmxlX3Vua25vd24oc3RydWN0IGF0YV9wb3J0ICphcCk7CiAKK2V4dGVybiB2b2lkIGF0YV9waW9fcXVldWVfdGFzayhzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB2b2lkICpkYXRhLAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgZGVsYXkpOworCiAvKiBUaW1pbmcgaGVscGVycyAqLwogZXh0ZXJuIHVuc2lnbmVkIGludCBhdGFfcGlvX25lZWRfaW9yZHkoY29uc3Qgc3RydWN0IGF0YV9kZXZpY2UgKik7CiBleHRlcm4gY29uc3Qgc3RydWN0IGF0YV90aW1pbmcgKmF0YV90aW1pbmdfZmluZF9tb2RlKHU4IHhmZXJfbW9kZSk7CkBAIC0xNTcyLDYgKzE1NzgsNyBAQAogZXh0ZXJuIHVuc2lnbmVkIGludCBhdGFfc2ZmX2hvc3RfaW50cihzdHJ1Y3QgYXRhX3BvcnQgKmFwLAogCQkJCSAgICAgIHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOwogZXh0ZXJuIGlycXJldHVybl90IGF0YV9zZmZfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSk7CitleHRlcm4gdm9pZCBhdGFfc2ZmX2xvc3RfaW50ZXJydXB0KHN0cnVjdCBhdGFfcG9ydCAqYXApOwogZXh0ZXJuIHZvaWQgYXRhX3NmZl9mcmVlemUoc3RydWN0IGF0YV9wb3J0ICphcCk7CiBleHRlcm4gdm9pZCBhdGFfc2ZmX3RoYXcoc3RydWN0IGF0YV9wb3J0ICphcCk7CiBleHRlcm4gaW50IGF0YV9zZmZfcHJlcmVzZXQoc3RydWN0IGF0YV9saW5rICpsaW5rLCB1bnNpZ25lZCBsb25nIGRlYWRsaW5lKTsKQEAgLTE1ODQsNiArMTU5MSw3IEBACiBleHRlcm4gaW50IHNhdGFfc2ZmX2hhcmRyZXNldChzdHJ1Y3QgYXRhX2xpbmsgKmxpbmssIHVuc2lnbmVkIGludCAqY2xhc3MsCiAJCQkgICAgICAgdW5zaWduZWQgbG9uZyBkZWFkbGluZSk7CiBleHRlcm4gdm9pZCBhdGFfc2ZmX3Bvc3RyZXNldChzdHJ1Y3QgYXRhX2xpbmsgKmxpbmssIHVuc2lnbmVkIGludCAqY2xhc3Nlcyk7CitleHRlcm4gdm9pZCBhdGFfc2ZmX2RyYWluX2ZpZm8oc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CiBleHRlcm4gdm9pZCBhdGFfc2ZmX2Vycm9yX2hhbmRsZXIoc3RydWN0IGF0YV9wb3J0ICphcCk7CiBleHRlcm4gdm9pZCBhdGFfc2ZmX3Bvc3RfaW50ZXJuYWxfY21kKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOwogZXh0ZXJuIGludCBhdGFfc2ZmX3BvcnRfc3RhcnQoc3RydWN0IGF0YV9wb3J0ICphcCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xtX2ludGVyZmFjZS5oIGIvaW5jbHVkZS9saW51eC9sbV9pbnRlcmZhY2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmVkOGZhMS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L2xtX2ludGVyZmFjZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjc3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIFNpc3RpbmEgU29mdHdhcmUsIEluYy4gIDE5OTctMjAwMyBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDYgUmVkIEhhdCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGNvcHlyaWdodGVkIG1hdGVyaWFsIGlzIG1hZGUgYXZhaWxhYmxlIHRvIGFueW9uZSB3aXNoaW5nIHRvIHVzZSwKLSAqIG1vZGlmeSwgY29weSwgb3IgcmVkaXN0cmlidXRlIGl0IHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCi0gKiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLgotICovCi0KLSNpZm5kZWYgX19MTV9JTlRFUkZBQ0VfRE9UX0hfXwotI2RlZmluZSBfX0xNX0lOVEVSRkFDRV9ET1RfSF9fCi0KLQotdHlwZWRlZiB2b2lkICgqbG1fY2FsbGJhY2tfdCkgKHZvaWQgKnB0ciwgdW5zaWduZWQgaW50IHR5cGUsIHZvaWQgKmRhdGEpOwotCi0vKgotICogbG1fbW91bnQoKSBmbGFncwotICoKLSAqIExNX01GTEFHX1NQRUNUQVRPUgotICogR0ZTIGlzIGFza2luZyB0byBqb2luIHRoZSBmaWxlc3lzdGVtJ3MgbG9ja3NwYWNlLCBidXQgaXQgZG9lc24ndCB3YW50IHRvCi0gKiBtb2RpZnkgdGhlIGZpbGVzeXN0ZW0uICBUaGUgbG9jayBtb2R1bGUgc2hvdWxkbid0IGFzc2lnbiBhIGpvdXJuYWwgdG8gdGhlIEZTCi0gKiBtb3VudC4gIEl0IHNob3VsZG4ndCBzZW5kIHJlY292ZXJ5IGNhbGxiYWNrcyB0byB0aGUgRlMgbW91bnQuICBJZiB0aGUgbm9kZQotICogZGllcyBvciB3aXRoZHJhd3MsIGFsbCBsb2NrcyBjYW4gYmUgd2lwZWQgaW1tZWRpYXRlbHkuCi0gKgotICogTE1fTUZMQUdfQ09OVl9OT0RST1AKLSAqIERvIG5vdCBhbGxvdyB0aGUgZGxtIHRvIGludGVybmFsbHkgcmVzb2x2ZSBjb252ZXJzaW9uIGRlYWRsb2NrcyBieSBkZW1vdGluZwotICogdGhlIGxvY2sgdG8gdW5sb2NrZWQgYW5kIHRoZW4gcmVhY3F1aXJpbmcgaXQgaW4gdGhlIHJlcXVlc3RlZCBtb2RlLiBJbnN0ZWFkLAotICogaXQgc2hvdWxkIGNhbmNlbCB0aGUgcmVxdWVzdCBhbmQgcmV0dXJuIExNX09VVF9DT05WX0RFQURMSy4KLSAqLwotCi0jZGVmaW5lIExNX01GTEFHX1NQRUNUQVRPUgkweDAwMDAwMDAxCi0jZGVmaW5lIExNX01GTEFHX0NPTlZfTk9EUk9QCTB4MDAwMDAwMDIKLQotLyoKLSAqIGxtX2xvY2tzdHJ1Y3QgZmxhZ3MKLSAqCi0gKiBMTV9MU0ZMQUdfTE9DQUwKLSAqIFRoZSBsb2NrX25vbG9jayBtb2R1bGUgcmV0dXJucyBMTV9MU0ZMQUdfTE9DQUwgdG8gR0ZTLCBpbmRpY2F0aW5nIHRoYXQgR0ZTCi0gKiBjYW4gbWFrZSBzaW5nbGUtbm9kZSBvcHRpbWl6YXRpb25zLgotICovCi0KLSNkZWZpbmUgTE1fTFNGTEFHX0xPQ0FMCQkweDAwMDAwMDAxCi0KLS8qCi0gKiBsbV9sb2NrbmFtZSB0eXBlcwotICovCi0KLSNkZWZpbmUgTE1fVFlQRV9SRVNFUlZFRAkweDAwCi0jZGVmaW5lIExNX1RZUEVfTk9ORElTSwkJMHgwMQotI2RlZmluZSBMTV9UWVBFX0lOT0RFCQkweDAyCi0jZGVmaW5lIExNX1RZUEVfUkdSUAkJMHgwMwotI2RlZmluZSBMTV9UWVBFX01FVEEJCTB4MDQKLSNkZWZpbmUgTE1fVFlQRV9JT1BFTgkJMHgwNQotI2RlZmluZSBMTV9UWVBFX0ZMT0NLCQkweDA2Ci0jZGVmaW5lIExNX1RZUEVfUExPQ0sJCTB4MDcKLSNkZWZpbmUgTE1fVFlQRV9RVU9UQQkJMHgwOAotI2RlZmluZSBMTV9UWVBFX0pPVVJOQUwJCTB4MDkKLQotLyoKLSAqIGxtX2xvY2soKSBzdGF0ZXMKLSAqCi0gKiBTSEFSRUQgaXMgY29tcGF0aWJsZSB3aXRoIFNIQVJFRCwgbm90IHdpdGggREVGRVJSRUQgb3IgRVguCi0gKiBERUZFUlJFRCBpcyBjb21wYXRpYmxlIHdpdGggREVGRVJSRUQsIG5vdCB3aXRoIFNIQVJFRCBvciBFWC4KLSAqLwotCi0jZGVmaW5lIExNX1NUX1VOTE9DS0VECQkwCi0jZGVmaW5lIExNX1NUX0VYQ0xVU0lWRQkJMQotI2RlZmluZSBMTV9TVF9ERUZFUlJFRAkJMgotI2RlZmluZSBMTV9TVF9TSEFSRUQJCTMKLQotLyoKLSAqIGxtX2xvY2soKSBmbGFncwotICoKLSAqIExNX0ZMQUdfVFJZCi0gKiBEb24ndCB3YWl0IHRvIGFjcXVpcmUgdGhlIGxvY2sgaWYgaXQgY2FuJ3QgYmUgZ3JhbnRlZCBpbW1lZGlhdGVseS4KLSAqCi0gKiBMTV9GTEFHX1RSWV8xQ0IKLSAqIFNlbmQgb25lIGJsb2NraW5nIGNhbGxiYWNrIGlmIFRSWSBpcyBzZXQgYW5kIHRoZSBsb2NrIGlzIG5vdCBncmFudGVkLgotICoKLSAqIExNX0ZMQUdfTk9FWFAKLSAqIEdGUyBzZXRzIHRoaXMgZmxhZyBvbiBsb2NrIHJlcXVlc3RzIGl0IG1ha2VzIHdoaWxlIGRvaW5nIGpvdXJuYWwgcmVjb3ZlcnkuCi0gKiBUaGVzZSBzcGVjaWFsIHJlcXVlc3RzIHNob3VsZCBub3QgYmUgYmxvY2tlZCBkdWUgdG8gdGhlIHJlY292ZXJ5IGxpa2UKLSAqIG9yZGluYXJ5IGxvY2tzIHdvdWxkIGJlLgotICoKLSAqIExNX0ZMQUdfQU5ZCi0gKiBBIFNIQVJFRCByZXF1ZXN0IG1heSBhbHNvIGJlIGdyYW50ZWQgaW4gREVGRVJSRUQsIG9yIGEgREVGRVJSRUQgcmVxdWVzdCBtYXkKLSAqIGFsc28gYmUgZ3JhbnRlZCBpbiBTSEFSRUQuICBUaGUgcHJlZmVycmVkIHN0YXRlIGlzIHdoaWNoZXZlciBpcyBjb21wYXRpYmxlCi0gKiB3aXRoIG90aGVyIGdyYW50ZWQgbG9ja3MsIG9yIHRoZSBzcGVjaWZpZWQgc3RhdGUgaWYgbm8gb3RoZXIgbG9ja3MgZXhpc3QuCi0gKgotICogTE1fRkxBR19QUklPUklUWQotICogT3ZlcnJpZGUgZmFpcm5lc3MgY29uc2lkZXJhdGlvbnMuICBTdXBwb3NlIGEgbG9jayBpcyBoZWxkIGluIGEgc2hhcmVkIHN0YXRlCi0gKiBhbmQgdGhlcmUgaXMgYSBwZW5kaW5nIHJlcXVlc3QgZm9yIHRoZSBkZWZlcnJlZCBzdGF0ZS4gIEEgc2hhcmVkIGxvY2sKLSAqIHJlcXVlc3Qgd2l0aCB0aGUgcHJpb3JpdHkgZmxhZyB3b3VsZCBiZSBhbGxvd2VkIHRvIGJ5cGFzcyB0aGUgZGVmZXJyZWQKLSAqIHJlcXVlc3QgYW5kIGRpcmVjdGx5IGpvaW4gdGhlIG90aGVyIHNoYXJlZCBsb2NrLiAgQSBzaGFyZWQgbG9jayByZXF1ZXN0Ci0gKiB3aXRob3V0IHRoZSBwcmlvcml0eSBmbGFnIG1pZ2h0IGJlIGZvcmNlZCB0byB3YWl0IHVudGlsIHRoZSBkZWZlcnJlZAotICogcmVxdWVzdGVkIGhhZCBhY3F1aXJlZCBhbmQgcmVsZWFzZWQgdGhlIGxvY2suCi0gKi8KLQotI2RlZmluZSBMTV9GTEFHX1RSWQkJMHgwMDAwMDAwMQotI2RlZmluZSBMTV9GTEFHX1RSWV8xQ0IJCTB4MDAwMDAwMDIKLSNkZWZpbmUgTE1fRkxBR19OT0VYUAkJMHgwMDAwMDAwNAotI2RlZmluZSBMTV9GTEFHX0FOWQkJMHgwMDAwMDAwOAotI2RlZmluZSBMTV9GTEFHX1BSSU9SSVRZCTB4MDAwMDAwMTAKLQotLyoKLSAqIGxtX2xvY2soKSBhbmQgbG1fYXN5bmNfY2IgcmV0dXJuIGZsYWdzCi0gKgotICogTE1fT1VUX1NUX01BU0sKLSAqIE1hc2tzIHRoZSBsb3dlciB0d28gYml0cyBvZiBsb2NrIHN0YXRlIGluIHRoZSByZXR1cm5lZCB2YWx1ZS4KLSAqCi0gKiBMTV9PVVRfQ0FDSEVBQkxFCi0gKiBUaGUgbG9jayBoYXNuJ3QgYmVlbiByZWxlYXNlZCBzbyBHRlMgY2FuIGNvbnRpbnVlIHRvIGNhY2hlIGRhdGEgZm9yIGl0LgotICoKLSAqIExNX09VVF9DQU5DRUxFRAotICogVGhlIGxvY2sgcmVxdWVzdCB3YXMgY2FuY2VsZWQuCi0gKgotICogTE1fT1VUX0FTWU5DCi0gKiBUaGUgcmVzdWx0IG9mIHRoZSByZXF1ZXN0IHdpbGwgYmUgcmV0dXJuZWQgaW4gYW4gTE1fQ0JfQVNZTkMgY2FsbGJhY2suCi0gKgotICogTE1fT1VUX0NPTlZfREVBRExLCi0gKiBUaGUgbG9jayByZXF1ZXN0IHdhcyBjYW5jZWxlZCBkbyB0byBhIGNvbnZlcnNpb24gZGVhZGxvY2suCi0gKi8KLQotI2RlZmluZSBMTV9PVVRfU1RfTUFTSwkJMHgwMDAwMDAwMwotI2RlZmluZSBMTV9PVVRfQ0FOQ0VMRUQJCTB4MDAwMDAwMDgKLSNkZWZpbmUgTE1fT1VUX0FTWU5DCQkweDAwMDAwMDgwCi0jZGVmaW5lIExNX09VVF9FUlJPUgkJMHgwMDAwMDEwMAotCi0vKgotICogbG1fY2FsbGJhY2tfdCB0eXBlcwotICoKLSAqIExNX0NCX05FRURfRSBMTV9DQl9ORUVEX0QgTE1fQ0JfTkVFRF9TCi0gKiBCbG9ja2luZyBjYWxsYmFjaywgYSByZW1vdGUgbm9kZSBpcyByZXF1ZXN0aW5nIHRoZSBnaXZlbiBsb2NrIGluCi0gKiBFWENMVVNJVkUsIERFRkVSUkVELCBvciBTSEFSRUQuCi0gKgotICogTE1fQ0JfTkVFRF9SRUNPVkVSWQotICogVGhlIGdpdmVuIGpvdXJuYWwgbmVlZHMgdG8gYmUgcmVjb3ZlcmVkLgotICoKLSAqIExNX0NCX0FTWU5DCi0gKiBUaGUgZ2l2ZW4gbG9jayBoYXMgYmVlbiBncmFudGVkLgotICovCi0KLSNkZWZpbmUgTE1fQ0JfTkVFRF9FCQkyNTcKLSNkZWZpbmUgTE1fQ0JfTkVFRF9ECQkyNTgKLSNkZWZpbmUgTE1fQ0JfTkVFRF9TCQkyNTkKLSNkZWZpbmUgTE1fQ0JfTkVFRF9SRUNPVkVSWQkyNjAKLSNkZWZpbmUgTE1fQ0JfQVNZTkMJCTI2MgotCi0vKgotICogbG1fcmVjb3ZlcnlfZG9uZSgpIG1lc3NhZ2VzCi0gKi8KLQotI2RlZmluZSBMTV9SRF9HQVZFVVAJCTMwOAotI2RlZmluZSBMTV9SRF9TVUNDRVNTCQkzMDkKLQotCi1zdHJ1Y3QgbG1fbG9ja25hbWUgewotCXU2NCBsbl9udW1iZXI7Ci0JdW5zaWduZWQgaW50IGxuX3R5cGU7Ci19OwotCi0jZGVmaW5lIGxtX25hbWVfZXF1YWwobmFtZTEsIG5hbWUyKSBcCi0JKCgobmFtZTEpLT5sbl9udW1iZXIgPT0gKG5hbWUyKS0+bG5fbnVtYmVyKSAmJiBcCi0JICgobmFtZTEpLT5sbl90eXBlID09IChuYW1lMiktPmxuX3R5cGUpKSBcCi0KLXN0cnVjdCBsbV9hc3luY19jYiB7Ci0Jc3RydWN0IGxtX2xvY2tuYW1lIGxjX25hbWU7Ci0JaW50IGxjX3JldDsKLX07Ci0KLXN0cnVjdCBsbV9sb2Nrc3RydWN0OwotCi1zdHJ1Y3QgbG1fbG9ja29wcyB7Ci0JY29uc3QgY2hhciAqbG1fcHJvdG9fbmFtZTsKLQotCS8qCi0JICogTW91bnQvVW5tb3VudAotCSAqLwotCi0JaW50ICgqbG1fbW91bnQpIChjaGFyICp0YWJsZV9uYW1lLCBjaGFyICpob3N0X2RhdGEsCi0JCQkgbG1fY2FsbGJhY2tfdCBjYiwgdm9pZCAqY2JfZGF0YSwKLQkJCSB1bnNpZ25lZCBpbnQgbWluX2x2Yl9zaXplLCBpbnQgZmxhZ3MsCi0JCQkgc3RydWN0IGxtX2xvY2tzdHJ1Y3QgKmxvY2tzdHJ1Y3QsCi0JCQkgc3RydWN0IGtvYmplY3QgKmZza29iaik7Ci0KLQl2b2lkICgqbG1fb3RoZXJzX21heV9tb3VudCkgKHZvaWQgKmxvY2tzcGFjZSk7Ci0KLQl2b2lkICgqbG1fdW5tb3VudCkgKHZvaWQgKmxvY2tzcGFjZSk7Ci0KLQl2b2lkICgqbG1fd2l0aGRyYXcpICh2b2lkICpsb2Nrc3BhY2UpOwotCi0JLyoKLQkgKiBMb2NrIG9yaWVudGVkIG9wZXJhdGlvbnMKLQkgKi8KLQotCWludCAoKmxtX2dldF9sb2NrKSAodm9pZCAqbG9ja3NwYWNlLCBzdHJ1Y3QgbG1fbG9ja25hbWUgKm5hbWUsIHZvaWQgKipsb2NrcCk7Ci0KLQl2b2lkICgqbG1fcHV0X2xvY2spICh2b2lkICpsb2NrKTsKLQotCXVuc2lnbmVkIGludCAoKmxtX2xvY2spICh2b2lkICpsb2NrLCB1bnNpZ25lZCBpbnQgY3VyX3N0YXRlLAotCQkJCSB1bnNpZ25lZCBpbnQgcmVxX3N0YXRlLCB1bnNpZ25lZCBpbnQgZmxhZ3MpOwotCi0JdW5zaWduZWQgaW50ICgqbG1fdW5sb2NrKSAodm9pZCAqbG9jaywgdW5zaWduZWQgaW50IGN1cl9zdGF0ZSk7Ci0KLQl2b2lkICgqbG1fY2FuY2VsKSAodm9pZCAqbG9jayk7Ci0KLQlpbnQgKCpsbV9ob2xkX2x2YikgKHZvaWQgKmxvY2ssIGNoYXIgKipsdmJwKTsKLQl2b2lkICgqbG1fdW5ob2xkX2x2YikgKHZvaWQgKmxvY2ssIGNoYXIgKmx2Yik7Ci0KLQkvKgotCSAqIFBvc2l4IExvY2sgb3JpZW50ZWQgb3BlcmF0aW9ucwotCSAqLwotCi0JaW50ICgqbG1fcGxvY2tfZ2V0KSAodm9pZCAqbG9ja3NwYWNlLCBzdHJ1Y3QgbG1fbG9ja25hbWUgKm5hbWUsCi0JCQkgICAgIHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbCk7Ci0KLQlpbnQgKCpsbV9wbG9jaykgKHZvaWQgKmxvY2tzcGFjZSwgc3RydWN0IGxtX2xvY2tuYW1lICpuYW1lLAotCQkJIHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgY21kLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbCk7Ci0KLQlpbnQgKCpsbV9wdW5sb2NrKSAodm9pZCAqbG9ja3NwYWNlLCBzdHJ1Y3QgbG1fbG9ja25hbWUgKm5hbWUsCi0JCQkgICBzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZpbGVfbG9jayAqZmwpOwotCi0JLyoKLQkgKiBDbGllbnQgb3JpZW50ZWQgb3BlcmF0aW9ucwotCSAqLwotCi0Jdm9pZCAoKmxtX3JlY292ZXJ5X2RvbmUpICh2b2lkICpsb2Nrc3BhY2UsIHVuc2lnbmVkIGludCBqaWQsCi0JCQkJICB1bnNpZ25lZCBpbnQgbWVzc2FnZSk7Ci0KLQlzdHJ1Y3QgbW9kdWxlICpsbV9vd25lcjsKLX07Ci0KLS8qCi0gKiBsbV9tb3VudCgpIHJldHVybiB2YWx1ZXMKLSAqCi0gKiBsc19qaWQgLSB0aGUgam91cm5hbCBJRCB0aGlzIG5vZGUgc2hvdWxkIHVzZQotICogbHNfZmlyc3QgLSB0aGlzIG5vZGUgaXMgdGhlIGZpcnN0IHRvIG1vdW50IHRoZSBmaWxlIHN5c3RlbQotICogbHNfbHZiX3NpemUgLSBzaXplIGluIGJ5dGVzIG9mIGxvY2sgdmFsdWUgYmxvY2tzCi0gKiBsc19sb2Nrc3BhY2UgLSBsb2NrIG1vZHVsZSdzIGNvbnRleHQgZm9yIHRoaXMgZmlsZSBzeXN0ZW0KLSAqIGxzX29wcyAtIGxvY2sgbW9kdWxlJ3MgZnVuY3Rpb25zCi0gKiBsc19mbGFncyAtIGxvY2sgbW9kdWxlIGZlYXR1cmVzCi0gKi8KLQotc3RydWN0IGxtX2xvY2tzdHJ1Y3QgewotCXVuc2lnbmVkIGludCBsc19qaWQ7Ci0JdW5zaWduZWQgaW50IGxzX2ZpcnN0OwotCXVuc2lnbmVkIGludCBsc19sdmJfc2l6ZTsKLQl2b2lkICpsc19sb2Nrc3BhY2U7Ci0JY29uc3Qgc3RydWN0IGxtX2xvY2tvcHMgKmxzX29wczsKLQlpbnQgbHNfZmxhZ3M7Ci19OwotCi0vKgotICogTG9jayBtb2R1bGUgYm90dG9tIGludGVyZmFjZS4gIEEgbG9jayBtb2R1bGUgbWFrZXMgaXRzZWxmIGF2YWlsYWJsZSB0byBHRlMKLSAqIHdpdGggdGhlc2UgZnVuY3Rpb25zLgotICovCi0KLWludCBnZnMyX3JlZ2lzdGVyX2xvY2twcm90byhjb25zdCBzdHJ1Y3QgbG1fbG9ja29wcyAqcHJvdG8pOwotdm9pZCBnZnMyX3VucmVnaXN0ZXJfbG9ja3Byb3RvKGNvbnN0IHN0cnVjdCBsbV9sb2Nrb3BzICpwcm90byk7Ci0KLS8qCi0gKiBMb2NrIG1vZHVsZSB0b3AgaW50ZXJmYWNlLiAgR0ZTIGNhbGxzIHRoZXNlIGZ1bmN0aW9ucyB3aGVuIG1vdW50aW5nIG9yCi0gKiB1bm1vdW50aW5nIGEgZmlsZSBzeXN0ZW0uCi0gKi8KLQotaW50IGdmczJfbW91bnRfbG9ja3Byb3RvKGNoYXIgKnByb3RvX25hbWUsIGNoYXIgKnRhYmxlX25hbWUsIGNoYXIgKmhvc3RfZGF0YSwKLQkJCSBsbV9jYWxsYmFja190IGNiLCB2b2lkICpjYl9kYXRhLAotCQkJIHVuc2lnbmVkIGludCBtaW5fbHZiX3NpemUsIGludCBmbGFncywKLQkJCSBzdHJ1Y3QgbG1fbG9ja3N0cnVjdCAqbG9ja3N0cnVjdCwKLQkJCSBzdHJ1Y3Qga29iamVjdCAqZnNrb2JqKTsKLQotdm9pZCBnZnMyX3VubW91bnRfbG9ja3Byb3RvKHN0cnVjdCBsbV9sb2Nrc3RydWN0ICpsb2Nrc3RydWN0KTsKLQotdm9pZCBnZnMyX3dpdGhkcmF3X2xvY2twcm90byhzdHJ1Y3QgbG1fbG9ja3N0cnVjdCAqbG9ja3N0cnVjdCk7Ci0KLSNlbmRpZiAvKiBfX0xNX0lOVEVSRkFDRV9ET1RfSF9fICovCi0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWFwbGUuaCBiL2luY2x1ZGUvbGludXgvbWFwbGUuaAppbmRleCBjMjNkM2Y1Li5kOWE1MWI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21hcGxlLmgKKysrIGIvaW5jbHVkZS9saW51eC9tYXBsZS5oCkBAIC04LDMzICs4LDQ5IEBACiAKIC8qIE1hcGxlIEJ1cyBjb21tYW5kIGFuZCByZXNwb25zZSBjb2RlcyAqLwogZW51bSBtYXBsZV9jb2RlIHsKLQlNQVBMRV9SRVNQT05TRV9GSUxFRVJSID0gLTUsCi0JTUFQTEVfUkVTUE9OU0VfQUdBSU4gPSAtNCwJLyogcmVxdWVzdCBzaG91bGQgYmUgcmV0cmFuc21pdHRlZCAqLwotCU1BUExFX1JFU1BPTlNFX0JBRENNRCA9IC0zLAotCU1BUExFX1JFU1BPTlNFX0JBREZVTkMgPSAtMiwKLQlNQVBMRV9SRVNQT05TRV9OT05FID0gLTEsCS8qIHVuaXQgZGlkbid0IHJlc3BvbmQgYXQgYWxsICovCi0JTUFQTEVfQ09NTUFORF9ERVZJTkZPID0gMSwKLQlNQVBMRV9DT01NQU5EX0FMTElORk8gPSAyLAotCU1BUExFX0NPTU1BTkRfUkVTRVQgPSAzLAotCU1BUExFX0NPTU1BTkRfS0lMTCA9IDQsCi0JTUFQTEVfUkVTUE9OU0VfREVWSU5GTyA9IDUsCi0JTUFQTEVfUkVTUE9OU0VfQUxMSU5GTyA9IDYsCi0JTUFQTEVfUkVTUE9OU0VfT0sgPSA3LAotCU1BUExFX1JFU1BPTlNFX0RBVEFUUkYgPSA4LAotCU1BUExFX0NPTU1BTkRfR0VUQ09ORCA9IDksCi0JTUFQTEVfQ09NTUFORF9HRVRNSU5GTyA9IDEwLAotCU1BUExFX0NPTU1BTkRfQlJFQUQgPSAxMSwKLQlNQVBMRV9DT01NQU5EX0JXUklURSA9IDEyLAotCU1BUExFX0NPTU1BTkRfU0VUQ09ORCA9IDE0CisJTUFQTEVfUkVTUE9OU0VfRklMRUVSUiA9CS01LAorCU1BUExFX1JFU1BPTlNFX0FHQUlOLAkvKiByZXRyYW5zbWl0ICovCisJTUFQTEVfUkVTUE9OU0VfQkFEQ01ELAorCU1BUExFX1JFU1BPTlNFX0JBREZVTkMsCisJTUFQTEVfUkVTUE9OU0VfTk9ORSwJLyogdW5pdCBkaWRuJ3QgcmVzcG9uZCovCisJTUFQTEVfQ09NTUFORF9ERVZJTkZPID0JCTEsCisJTUFQTEVfQ09NTUFORF9BTExJTkZPLAorCU1BUExFX0NPTU1BTkRfUkVTRVQsCisJTUFQTEVfQ09NTUFORF9LSUxMLAorCU1BUExFX1JFU1BPTlNFX0RFVklORk8sCisJTUFQTEVfUkVTUE9OU0VfQUxMSU5GTywKKwlNQVBMRV9SRVNQT05TRV9PSywKKwlNQVBMRV9SRVNQT05TRV9EQVRBVFJGLAorCU1BUExFX0NPTU1BTkRfR0VUQ09ORCwKKwlNQVBMRV9DT01NQU5EX0dFVE1JTkZPLAorCU1BUExFX0NPTU1BTkRfQlJFQUQsCisJTUFQTEVfQ09NTUFORF9CV1JJVEUsCisJTUFQTEVfQ09NTUFORF9CU1lOQywKKwlNQVBMRV9DT01NQU5EX1NFVENPTkQsCisJTUFQTEVfQ09NTUFORF9NSUNDT05UUk9MCit9OworCitlbnVtIG1hcGxlX2ZpbGVfZXJyb3JzIHsKKwlNQVBMRV9GSUxFRVJSX0lOVkFMSURfUEFSVElUSU9OID0JMHgwMTAwMDAwMCwKKwlNQVBMRV9GSUxFRVJSX1BIQVNFX0VSUk9SID0JCTB4MDIwMDAwMDAsCisJTUFQTEVfRklMRUVSUl9JTlZBTElEX0JMT0NLID0JCTB4MDQwMDAwMDAsCisJTUFQTEVfRklMRUVSUl9XUklURV9FUlJPUiA9CQkweDA4MDAwMDAwLAorCU1BUExFX0ZJTEVFUlJfSU5WQUxJRF9XUklURV9MRU5HVEggPQkweDEwMDAwMDAwLAorCU1BUExFX0ZJTEVFUlJfQkFEX0NSQyA9IAkJMHgyMDAwMDAwMAorfTsKKworc3RydWN0IG1hcGxlX2J1ZmZlciB7CisJY2hhciBidWZ4WzB4NDAwXTsKKwl2b2lkICpidWY7CiB9OwogCiBzdHJ1Y3QgbWFwbGVxIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAJc3RydWN0IG1hcGxlX2RldmljZSAqZGV2OwotCXZvaWQgKnNlbmRidWYsICpyZWN2YnVmLCAqcmVjdmJ1ZmRjc3A7CisJc3RydWN0IG1hcGxlX2J1ZmZlciAqcmVjdmJ1ZjsKKwl2b2lkICpzZW5kYnVmLCAqcmVjdmJ1Zl9wMjsKIAl1bnNpZ25lZCBjaGFyIGxlbmd0aDsKIAllbnVtIG1hcGxlX2NvZGUgY29tbWFuZDsKLQlzdHJ1Y3QgbXV0ZXggbXV0ZXg7CiB9OwogCiBzdHJ1Y3QgbWFwbGVfZGV2aW5mbyB7CkBAIC01MiwxMSArNjgsMTUgQEAKIAlzdHJ1Y3QgbWFwbGVfZHJpdmVyICpkcml2ZXI7CiAJc3RydWN0IG1hcGxlcSAqbXE7CiAJdm9pZCAoKmNhbGxiYWNrKSAoc3RydWN0IG1hcGxlcSAqIG1xKTsKKwl2b2lkICgqZmlsZWVycl9oYW5kbGVyKShzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2LCB2b2lkICpyZWN2YnVmKTsKKwlpbnQgKCpjYW5fdW5sb2FkKShzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2KTsKIAl1bnNpZ25lZCBsb25nIHdoZW4sIGludGVydmFsLCBmdW5jdGlvbjsKIAlzdHJ1Y3QgbWFwbGVfZGV2aW5mbyBkZXZpbmZvOwogCXVuc2lnbmVkIGNoYXIgcG9ydCwgdW5pdDsKIAljaGFyIHByb2R1Y3RfbmFtZVszMl07CiAJY2hhciBwcm9kdWN0X2xpY2VuY2VbNjRdOworCWF0b21pY190IGJ1c3k7CisJd2FpdF9xdWV1ZV9oZWFkX3QgbWFwbGVfd2FpdDsKIAlzdHJ1Y3QgZGV2aWNlIGRldjsKIH07CiAKQEAgLTcyLDcgKzkyLDcgQEAKIGludCBtYXBsZV9kcml2ZXJfcmVnaXN0ZXIoc3RydWN0IG1hcGxlX2RyaXZlciAqKTsKIHZvaWQgbWFwbGVfZHJpdmVyX3VucmVnaXN0ZXIoc3RydWN0IG1hcGxlX2RyaXZlciAqKTsKIAotaW50IG1hcGxlX2FkZF9wYWNrZXRfc2xlZXBzKHN0cnVjdCBtYXBsZV9kZXZpY2UgKm1kZXYsIHUzMiBmdW5jdGlvbiwKK2ludCBtYXBsZV9hZGRfcGFja2V0KHN0cnVjdCBtYXBsZV9kZXZpY2UgKm1kZXYsIHUzMiBmdW5jdGlvbiwKIAl1MzIgY29tbWFuZCwgdTMyIGxlbmd0aCwgdm9pZCAqZGF0YSk7CiB2b2lkIG1hcGxlX2NsZWFyX2RldihzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2KTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tYXRyb3hmYi5oIGIvaW5jbHVkZS9saW51eC9tYXRyb3hmYi5oCmluZGV4IDQwNGY2NzguLjIyMDMxMjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWF0cm94ZmIuaAorKysgYi9pbmNsdWRlL2xpbnV4L21hdHJveGZiLmgKQEAgLTM3LDcgKzM3LDcgQEAKICAgTUFUUk9YRkJfQ0lEX0xBU1QKIH07CiAKLSNkZWZpbmUgRkJJT19XQUlURk9SVlNZTkMJX0lPVygnRicsIDB4MjAsIHVfaW50MzJfdCkKKyNkZWZpbmUgRkJJT19XQUlURk9SVlNZTkMJX0lPVygnRicsIDB4MjAsIF9fdTMyKQogCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZmQvd204MzUwL2F1ZGlvLmggYi9pbmNsdWRlL2xpbnV4L21mZC93bTgzNTAvYXVkaW8uaAppbmRleCBhZjk1YTFkLi5kODk5ZGMwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21mZC93bTgzNTAvYXVkaW8uaAorKysgYi9pbmNsdWRlL2xpbnV4L21mZC93bTgzNTAvYXVkaW8uaApAQCAtNDkwLDYgKzQ5MCw3IEBACiAvKgogICogUjIzMSAoMHhFNykgLSBKYWNrIFN0YXR1cwogICovCisjZGVmaW5lIFdNODM1MF9KQUNLX0xfTFZMCQkJMHgwODAwCiAjZGVmaW5lIFdNODM1MF9KQUNLX1JfTFZMICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL3dtODQwMC1hdWRpby5oIGIvaW5jbHVkZS9saW51eC9tZmQvd204NDAwLWF1ZGlvLmgKaW5kZXggYjY2NDBlMC4uZTA2ZWQzZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZmQvd204NDAwLWF1ZGlvLmgKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvd204NDAwLWF1ZGlvLmgKQEAgLTExODEsNiArMTE4MSw3IEBACiAjZGVmaW5lIFdNODQwMF9GTExfT1VURElWX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEZMTF9PVVRESVYgLSBbMjowXSAqLwogI2RlZmluZSBXTTg0MDBfRkxMX09VVERJVl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAzICAvKiBGTExfT1VURElWIC0gWzI6MF0gKi8KIAorc3RydWN0IHdtODQwMDsKIHZvaWQgd204NDAwX3Jlc2V0X2NvZGVjX3JlZ19jYWNoZShzdHJ1Y3Qgd204NDAwICp3bTg0MDApOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWx4NC9jbWQuaCBiL2luY2x1ZGUvbGludXgvbWx4NC9jbWQuaAppbmRleCBjZjljNjc5Li4wZjgyMjkzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21seDQvY21kLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbHg0L2NtZC5oCkBAIC01NSw2ICs1NSw3IEBACiAJTUxYNF9DTURfQ0xPU0VfUE9SVAkgPSAweGEsCiAJTUxYNF9DTURfUVVFUllfSENBCSA9IDB4YiwKIAlNTFg0X0NNRF9RVUVSWV9QT1JUCSA9IDB4NDMsCisJTUxYNF9DTURfU0VOU0VfUE9SVAkgPSAweDRkLAogCU1MWDRfQ01EX1NFVF9QT1JUCSA9IDB4YywKIAlNTFg0X0NNRF9BQ0NFU1NfRERSCSA9IDB4MmUsCiAJTUxYNF9DTURfTUFQX0lDTQkgPSAweGZmYSwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWx4NC9kZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbWx4NC9kZXZpY2UuaAppbmRleCA4ZjY1OWNjLi4zYWZmOGE2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21seDQvZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbHg0L2RldmljZS5oCkBAIC0xNTUsOCArMTU1LDkgQEAKIH07CiAKIGVudW0gbWx4NF9wb3J0X3R5cGUgewotCU1MWDRfUE9SVF9UWVBFX0lCCT0gMSA8PCAwLAotCU1MWDRfUE9SVF9UWVBFX0VUSAk9IDEgPDwgMSwKKwlNTFg0X1BPUlRfVFlQRV9JQgk9IDEsCisJTUxYNF9QT1JUX1RZUEVfRVRICT0gMiwKKwlNTFg0X1BPUlRfVFlQRV9BVVRPCT0gMwogfTsKIAogZW51bSBtbHg0X3NwZWNpYWxfdmxhbl9pZHggewpAQCAtMjM3LDYgKzIzOCw3IEBACiAJZW51bSBtbHg0X3BvcnRfdHlwZQlwb3J0X3R5cGVbTUxYNF9NQVhfUE9SVFMgKyAxXTsKIAl1OAkJCXN1cHBvcnRlZF90eXBlW01MWDRfTUFYX1BPUlRTICsgMV07CiAJdTMyCQkJcG9ydF9tYXNrOworCWVudW0gbWx4NF9wb3J0X3R5cGUJcG9zc2libGVfdHlwZVtNTFg0X01BWF9QT1JUUyArIDFdOwogfTsKIAogc3RydWN0IG1seDRfYnVmX2xpc3QgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tb2RfZGV2aWNldGFibGUuaCBiL2luY2x1ZGUvbGludXgvbW9kX2RldmljZXRhYmxlLmgKaW5kZXggZmRlODY2Ny4uMWJmNTkwMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tb2RfZGV2aWNldGFibGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L21vZF9kZXZpY2V0YWJsZS5oCkBAIC00NTQsNCArNDU0LDEzIEBACiAKICNkZWZpbmUgRE1JX01BVENIKGEsIGIpCXsgYSwgYiB9CiAKKyNkZWZpbmUgUExBVEZPUk1fTkFNRV9TSVpFCTIwCisjZGVmaW5lIFBMQVRGT1JNX01PRFVMRV9QUkVGSVgJInBsYXRmb3JtOiIKKworc3RydWN0IHBsYXRmb3JtX2RldmljZV9pZCB7CisJY2hhciBuYW1lW1BMQVRGT1JNX05BTUVfU0laRV07CisJa2VybmVsX3Vsb25nX3QgZHJpdmVyX2RhdGEKKwkJCV9fYXR0cmlidXRlX18oKGFsaWduZWQoc2l6ZW9mKGtlcm5lbF91bG9uZ190KSkpKTsKK307CisKICNlbmRpZiAvKiBMSU5VWF9NT0RfREVWSUNFVEFCTEVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tb3VudC5oIGIvaW5jbHVkZS9saW51eC9tb3VudC5oCmluZGV4IGNhYjJhODUuLjUxZjU1ZjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW91bnQuaAorKysgYi9pbmNsdWRlL2xpbnV4L21vdW50LmgKQEAgLTI3LDYgKzI3LDcgQEAKICNkZWZpbmUgTU5UX05PRElSQVRJTUUJMHgxMAogI2RlZmluZSBNTlRfUkVMQVRJTUUJMHgyMAogI2RlZmluZSBNTlRfUkVBRE9OTFkJMHg0MAkvKiBkb2VzIHRoZSB1c2VyIHdhbnQgdGhpcyB0byBiZSByL28/ICovCisjZGVmaW5lIE1OVF9TVFJJQ1RBVElNRSAweDgwCiAKICNkZWZpbmUgTU5UX1NIUklOS0FCTEUJMHgxMDAKICNkZWZpbmUgTU5UX0lNQkFMQU5DRURfV1JJVEVfQ09VTlQJMHgyMDAgLyoganVzdCBmb3IgZGVidWdnaW5nICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21yb3V0ZS5oIGIvaW5jbHVkZS9saW51eC9tcm91dGUuaAppbmRleCA4YTQ1NTY5Li4wZDQ1YjRlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21yb3V0ZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbXJvdXRlLmgKQEAgLTE5Myw2ICsxOTMsOSBAQAogc3RydWN0IG1mY19jYWNoZSAKIHsKIAlzdHJ1Y3QgbWZjX2NhY2hlICpuZXh0OwkJCS8qIE5leHQgZW50cnkgb24gY2FjaGUgbGluZSAJKi8KKyNpZmRlZiBDT05GSUdfTkVUX05TCisJc3RydWN0IG5ldCAqbWZjX25ldDsKKyNlbmRpZgogCV9fYmUzMiBtZmNfbWNhc3RncnA7CQkJLyogR3JvdXAgdGhlIGVudHJ5IGJlbG9uZ3MgdG8gCSovCiAJX19iZTMyIG1mY19vcmlnaW47CQkJLyogU291cmNlIG9mIHBhY2tldCAJCSovCiAJdmlmaV90IG1mY19wYXJlbnQ7CQkJLyogU291cmNlIGludGVyZmFjZQkJKi8KQEAgLTIxNSw2ICsyMTgsMTggQEAKIAl9IG1mY191bjsKIH07CiAKK3N0YXRpYyBpbmxpbmUKK3N0cnVjdCBuZXQgKm1mY19uZXQoY29uc3Qgc3RydWN0IG1mY19jYWNoZSAqbWZjKQoreworCXJldHVybiByZWFkX3BuZXQoJm1mYy0+bWZjX25ldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUKK3ZvaWQgbWZjX25ldF9zZXQoc3RydWN0IG1mY19jYWNoZSAqbWZjLCBzdHJ1Y3QgbmV0ICpuZXQpCit7CisJd3JpdGVfcG5ldCgmbWZjLT5tZmNfbmV0LCBob2xkX25ldChuZXQpKTsKK30KKwogI2RlZmluZSBNRkNfU1RBVElDCQkxCiAjZGVmaW5lIE1GQ19OT1RJRlkJCTIKIApAQCAtMjQxLDcgKzI1Niw4IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiBzdHJ1Y3QgcnRtc2c7Ci1leHRlcm4gaW50IGlwbXJfZ2V0X3JvdXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBydG1zZyAqcnRtLCBpbnQgbm93YWl0KTsKK2V4dGVybiBpbnQgaXBtcl9nZXRfcm91dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICBzdHJ1Y3QgcnRtc2cgKnJ0bSwgaW50IG5vd2FpdCk7CiAjZW5kaWYKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21yb3V0ZTYuaCBiL2luY2x1ZGUvbGludXgvbXJvdXRlNi5oCmluZGV4IDUzNzVmYWMuLjQzZGM5N2UzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21yb3V0ZTYuaAorKysgYi9pbmNsdWRlL2xpbnV4L21yb3V0ZTYuaApAQCAtNjUsNyArNjUsNyBAQAogCW1pZmlfdAltaWY2Y19taWZpOwkJLyogSW5kZXggb2YgTUlGICovCiAJdW5zaWduZWQgY2hhciBtaWY2Y19mbGFnczsJLyogTUlGRl8gZmxhZ3MgKi8KIAl1bnNpZ25lZCBjaGFyIHZpZmNfdGhyZXNob2xkOwkvKiB0dGwgbGltaXQgKi8KLQl1X3Nob3J0CSBtaWY2Y19waWZpOwkJLyogdGhlIGluZGV4IG9mIHRoZSBwaHlzaWNhbCBJRiAqLworCV9fdTE2CSBtaWY2Y19waWZpOwkJLyogdGhlIGluZGV4IG9mIHRoZSBwaHlzaWNhbCBJRiAqLwogCXVuc2lnbmVkIGludCB2aWZjX3JhdGVfbGltaXQ7CS8qIFJhdGUgbGltaXRlciB2YWx1ZXMgKE5JKSAqLwogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uY3Bfbm8uaCBiL2luY2x1ZGUvbGludXgvbmNwX25vLmgKaW5kZXggZjU2YTY5Ni4uY2RkYWE0OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uY3Bfbm8uaAorKysgYi9pbmNsdWRlL2xpbnV4L25jcF9uby5oCkBAIC0yLDE4ICsyLDE4IEBACiAjZGVmaW5lIF9OQ1BfTk8KIAogLyogdGhlc2UgZGVmaW5lIHRoZSBhdHRyaWJ1dGUgYnl0ZSBhcyBzZWVuIGJ5IE5DUCAqLwotI2RlZmluZSBhUk9OTFkJCQkoX19jb25zdGFudF9jcHVfdG9fbGUzMigxKSkKLSNkZWZpbmUgYUhJRERFTgkJCShfX2NvbnN0YW50X2NwdV90b19sZTMyKDIpKQotI2RlZmluZSBhU1lTVEVNCQkJKF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoNCkpCi0jZGVmaW5lIGFFWEVDVVRFCQkoX19jb25zdGFudF9jcHVfdG9fbGUzMig4KSkKLSNkZWZpbmUgYURJUgkJCShfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MTApKQotI2RlZmluZSBhQVJDSAkJCShfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MjApKQotI2RlZmluZSBhU0hBUkVECQkJKF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHg4MCkpCi0jZGVmaW5lIGFET05UU1VCQUxMT0NBVEUJKF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMUw8PDExKSkKLSNkZWZpbmUgYVRSQU5TQUNUSU9OQUwJCShfX2NvbnN0YW50X2NwdV90b19sZTMyKDFMPDwxMikpCi0jZGVmaW5lIGFQVVJHRQkJCShfX2NvbnN0YW50X2NwdV90b19sZTMyKDFMPDwxNikpCi0jZGVmaW5lIGFSRU5BTUVJTkhJQklUCQkoX19jb25zdGFudF9jcHVfdG9fbGUzMigxTDw8MTcpKQotI2RlZmluZSBhREVMRVRFSU5ISUJJVAkJKF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMUw8PDE4KSkKLSNkZWZpbmUgYURPTlRDT01QUkVTUwkJKF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMUw8PDI3KSkKKyNkZWZpbmUgYVJPTkxZCQkJKF9fY3B1X3RvX2xlMzIoMSkpCisjZGVmaW5lIGFISURERU4JCQkoX19jcHVfdG9fbGUzMigyKSkKKyNkZWZpbmUgYVNZU1RFTQkJCShfX2NwdV90b19sZTMyKDQpKQorI2RlZmluZSBhRVhFQ1VURQkJKF9fY3B1X3RvX2xlMzIoOCkpCisjZGVmaW5lIGFESVIJCQkoX19jcHVfdG9fbGUzMigweDEwKSkKKyNkZWZpbmUgYUFSQ0gJCQkoX19jcHVfdG9fbGUzMigweDIwKSkKKyNkZWZpbmUgYVNIQVJFRAkJCShfX2NwdV90b19sZTMyKDB4ODApKQorI2RlZmluZSBhRE9OVFNVQkFMTE9DQVRFCShfX2NwdV90b19sZTMyKDFMPDwxMSkpCisjZGVmaW5lIGFUUkFOU0FDVElPTkFMCQkoX19jcHVfdG9fbGUzMigxTDw8MTIpKQorI2RlZmluZSBhUFVSR0UJCQkoX19jcHVfdG9fbGUzMigxTDw8MTYpKQorI2RlZmluZSBhUkVOQU1FSU5ISUJJVAkJKF9fY3B1X3RvX2xlMzIoMUw8PDE3KSkKKyNkZWZpbmUgYURFTEVURUlOSElCSVQJCShfX2NwdV90b19sZTMyKDFMPDwxOCkpCisjZGVmaW5lIGFET05UQ09NUFJFU1MJCShfX2NwdV90b19sZTMyKDFMPDwyNykpCiAKICNlbmRpZiAvKiBfTkNQX05PICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25laWdoYm91ci5oIGIvaW5jbHVkZS9saW51eC9uZWlnaGJvdXIuaAppbmRleCA4NzMwZDVkLi4xMmM5ZGUxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25laWdoYm91ci5oCisrKyBiL2luY2x1ZGUvbGludXgvbmVpZ2hib3VyLmgKQEAgLTMxLDYgKzMxLDcgQEAKICAqCU5laWdoYm9yIENhY2hlIEVudHJ5IEZsYWdzCiAgKi8KIAorI2RlZmluZSBOVEZfVVNFCQkweDAxCiAjZGVmaW5lIE5URl9QUk9YWQkweDA4CS8qID09IEFURl9QVUJMICovCiAjZGVmaW5lIE5URl9ST1VURVIJMHg4MAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldC5oIGIvaW5jbHVkZS9saW51eC9uZXQuaAppbmRleCA0NTE1ZWZhLi40ZmMyZmZkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0LmgKQEAgLTEyOSwxMSArMTI5LDE1IEBACiAJc29ja2V0X3N0YXRlCQlzdGF0ZTsKIAlzaG9ydAkJCXR5cGU7CiAJdW5zaWduZWQgbG9uZwkJZmxhZ3M7Ci0JY29uc3Qgc3RydWN0IHByb3RvX29wcwkqb3BzOworCS8qCisJICogUGxlYXNlIGtlZXAgZmFzeW5jX2xpc3QgJiB3YWl0IGZpZWxkcyBpbiB0aGUgc2FtZSBjYWNoZSBsaW5lCisJICovCiAJc3RydWN0IGZhc3luY19zdHJ1Y3QJKmZhc3luY19saXN0OworCXdhaXRfcXVldWVfaGVhZF90CXdhaXQ7CisKIAlzdHJ1Y3QgZmlsZQkJKmZpbGU7CiAJc3RydWN0IHNvY2sJCSpzazsKLQl3YWl0X3F1ZXVlX2hlYWRfdAl3YWl0OworCWNvbnN0IHN0cnVjdCBwcm90b19vcHMJKm9wczsKIH07CiAKIHN0cnVjdCB2bV9hcmVhX3N0cnVjdDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0X2Ryb3Btb24uaCBiL2luY2x1ZGUvbGludXgvbmV0X2Ryb3Btb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjE3ZmI4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uZXRfZHJvcG1vbi5oCkBAIC0wLDAgKzEsNTYgQEAKKyNpZm5kZWYgX19ORVRfRFJPUE1PTl9ICisjZGVmaW5lIF9fTkVUX0RST1BNT05fSAorCisjaW5jbHVkZSA8bGludXgvbmV0bGluay5oPgorCitzdHJ1Y3QgbmV0X2RtX2Ryb3BfcG9pbnQgeworCV9fdTggcGNbOF07CisJX191MzIgY291bnQ7Cit9OworCisjZGVmaW5lIE5FVF9ETV9DRkdfVkVSU0lPTiAgMAorI2RlZmluZSBORVRfRE1fQ0ZHX0FMRVJUX0NPVU5UICAxCisjZGVmaW5lIE5FVF9ETV9DRkdfQUxFUlRfREVMQVkgMgorI2RlZmluZSBORVRfRE1fQ0ZHX01BWCAzCisKK3N0cnVjdCBuZXRfZG1fY29uZmlnX2VudHJ5IHsKKwlfX3UzMiB0eXBlOworCV9fdTY0IGRhdGEgX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg4KSkpOworfTsKKworc3RydWN0IG5ldF9kbV9jb25maWdfbXNnIHsKKwlfX3UzMiBlbnRyaWVzOworCXN0cnVjdCBuZXRfZG1fY29uZmlnX2VudHJ5IG9wdGlvbnNbMF07Cit9OworCitzdHJ1Y3QgbmV0X2RtX2FsZXJ0X21zZyB7CisJX191MzIgZW50cmllczsKKwlzdHJ1Y3QgbmV0X2RtX2Ryb3BfcG9pbnQgcG9pbnRzWzBdOworfTsKKworc3RydWN0IG5ldF9kbV91c2VyX21zZyB7CisJdW5pb24geworCQlzdHJ1Y3QgbmV0X2RtX2NvbmZpZ19tc2cgdXNlcjsKKwkJc3RydWN0IG5ldF9kbV9hbGVydF9tc2cgYWxlcnQ7CisJfSB1OworfTsKKworCisvKiBUaGVzZSBhcmUgdGhlIG5ldGxpbmsgbWVzc2FnZSB0eXBlcyBmb3IgdGhpcyBwcm90b2NvbCAqLworCitlbnVtIHsKKwlORVRfRE1fQ01EX1VOU1BFQyA9IDAsCisJTkVUX0RNX0NNRF9BTEVSVCwKKwlORVRfRE1fQ01EX0NPTkZJRywKKwlORVRfRE1fQ01EX1NUQVJULAorCU5FVF9ETV9DTURfU1RPUCwKKwlfTkVUX0RNX0NNRF9NQVgsCit9OworCisjZGVmaW5lIE5FVF9ETV9DTURfTUFYIChfTkVUX0RNX0NNRF9NQVggLSAxKQorCisvKgorICogT3VyIGdyb3VwIGlkZW50aWZpZXJzCisgKi8KKyNkZWZpbmUgTkVUX0RNX0dSUF9BTEVSVCAxCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0X3RzdGFtcC5oIGIvaW5jbHVkZS9saW51eC9uZXRfdHN0YW1wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNiODU0NgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbmV0X3RzdGFtcC5oCkBAIC0wLDAgKzEsMTA0IEBACisvKgorICogVXNlcnNwYWNlIEFQSSBmb3IgaGFyZHdhcmUgdGltZSBzdGFtcGluZyBvZiBuZXR3b3JrIHBhY2tldHMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbgorICogQXV0aG9yOiBQYXRyaWNrIE9obHkgPHBhdHJpY2sub2hseUBpbnRlbC5jb20+CisgKgorICovCisKKyNpZm5kZWYgX05FVF9USU1FU1RBTVBJTkdfSAorI2RlZmluZSBfTkVUX1RJTUVTVEFNUElOR19ICisKKyNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4gICAvKiBmb3IgU09fVElNRVNUQU1QSU5HICovCisKKy8qIFNPX1RJTUVTVEFNUElORyBnZXRzIGFuIGludGVnZXIgYml0IGZpZWxkIGNvbXByaXNlZCBvZiB0aGVzZSB2YWx1ZXMgKi8KK2VudW0geworCVNPRl9USU1FU1RBTVBJTkdfVFhfSEFSRFdBUkUgPSAoMTw8MCksCisJU09GX1RJTUVTVEFNUElOR19UWF9TT0ZUV0FSRSA9ICgxPDwxKSwKKwlTT0ZfVElNRVNUQU1QSU5HX1JYX0hBUkRXQVJFID0gKDE8PDIpLAorCVNPRl9USU1FU1RBTVBJTkdfUlhfU09GVFdBUkUgPSAoMTw8MyksCisJU09GX1RJTUVTVEFNUElOR19TT0ZUV0FSRSA9ICgxPDw0KSwKKwlTT0ZfVElNRVNUQU1QSU5HX1NZU19IQVJEV0FSRSA9ICgxPDw1KSwKKwlTT0ZfVElNRVNUQU1QSU5HX1JBV19IQVJEV0FSRSA9ICgxPDw2KSwKKwlTT0ZfVElNRVNUQU1QSU5HX01BU0sgPQorCShTT0ZfVElNRVNUQU1QSU5HX1JBV19IQVJEV0FSRSAtIDEpIHwKKwlTT0ZfVElNRVNUQU1QSU5HX1JBV19IQVJEV0FSRQorfTsKKworLyoqCisgKiBzdHJ1Y3QgaHd0c3RhbXBfY29uZmlnIC0gJVNJT0NTSFdUU1RBTVAgcGFyYW1ldGVyCisgKgorICogQGZsYWdzOglubyBmbGFncyBkZWZpbmVkIHJpZ2h0IG5vdywgbXVzdCBiZSB6ZXJvCisgKiBAdHhfdHlwZToJb25lIG9mIEhXVFNUQU1QX1RYXyoKKyAqIEByeF90eXBlOglvbmUgb2Ygb25lIG9mIEhXVFNUQU1QX0ZJTFRFUl8qCisgKgorICogJVNJT0NTSFdUU1RBTVAgZXhwZWN0cyBhICZzdHJ1Y3QgaWZyZXEgd2l0aCBhIGlmcl9kYXRhIHBvaW50ZXIgdG8KKyAqIHRoaXMgc3RydWN0dXJlLiBkZXZfaWZzaW9jKCkgaW4gdGhlIGtlcm5lbCB0YWtlcyBjYXJlIG9mIHRoZQorICogdHJhbnNsYXRpb24gYmV0d2VlbiAzMiBiaXQgdXNlcnNwYWNlIGFuZCA2NCBiaXQga2VybmVsLiBUaGUKKyAqIHN0cnVjdHVyZSBpcyBpbnRlbnRpb25hbGx5IGNob3NlbiBzbyB0aGF0IGl0IGhhcyB0aGUgc2FtZSBsYXlvdXQgb24KKyAqIDMyIGFuZCA2NCBiaXQgc3lzdGVtcywgZG9uJ3QgYnJlYWsgdGhpcyEKKyAqLworc3RydWN0IGh3dHN0YW1wX2NvbmZpZyB7CisJaW50IGZsYWdzOworCWludCB0eF90eXBlOworCWludCByeF9maWx0ZXI7Cit9OworCisvKiBwb3NzaWJsZSB2YWx1ZXMgZm9yIGh3dHN0YW1wX2NvbmZpZy0+dHhfdHlwZSAqLworZW51bSB7CisJLyoKKwkgKiBObyBvdXRnb2luZyBwYWNrZXQgd2lsbCBuZWVkIGhhcmR3YXJlIHRpbWUgc3RhbXBpbmc7CisJICogc2hvdWxkIGEgcGFja2V0IGFycml2ZSB3aGljaCBhc2tzIGZvciBpdCwgbm8gaGFyZHdhcmUKKwkgKiB0aW1lIHN0YW1waW5nIHdpbGwgYmUgZG9uZS4KKwkgKi8KKwlIV1RTVEFNUF9UWF9PRkYsCisKKwkvKgorCSAqIEVuYWJsZXMgaGFyZHdhcmUgdGltZSBzdGFtcGluZyBmb3Igb3V0Z29pbmcgcGFja2V0czsKKwkgKiB0aGUgc2VuZGVyIG9mIHRoZSBwYWNrZXQgZGVjaWRlcyB3aGljaCBhcmUgdG8gYmUKKwkgKiB0aW1lIHN0YW1wZWQgYnkgc2V0dGluZyAlU09GX1RJTUVTVEFNUElOR19UWF9TT0ZUV0FSRQorCSAqIGJlZm9yZSBzZW5kaW5nIHRoZSBwYWNrZXQuCisJICovCisJSFdUU1RBTVBfVFhfT04sCit9OworCisvKiBwb3NzaWJsZSB2YWx1ZXMgZm9yIGh3dHN0YW1wX2NvbmZpZy0+cnhfZmlsdGVyICovCitlbnVtIHsKKwkvKiB0aW1lIHN0YW1wIG5vIGluY29taW5nIHBhY2tldCBhdCBhbGwgKi8KKwlIV1RTVEFNUF9GSUxURVJfTk9ORSwKKworCS8qIHRpbWUgc3RhbXAgYW55IGluY29taW5nIHBhY2tldCAqLworCUhXVFNUQU1QX0ZJTFRFUl9BTEwsCisKKwkvKiByZXR1cm4gdmFsdWU6IHRpbWUgc3RhbXAgYWxsIHBhY2tldHMgcmVxdWVzdGVkIHBsdXMgc29tZSBvdGhlcnMgKi8KKwlIV1RTVEFNUF9GSUxURVJfU09NRSwKKworCS8qIFBUUCB2MSwgVURQLCBhbnkga2luZCBvZiBldmVudCBwYWNrZXQgKi8KKwlIV1RTVEFNUF9GSUxURVJfUFRQX1YxX0w0X0VWRU5ULAorCS8qIFBUUCB2MSwgVURQLCBTeW5jIHBhY2tldCAqLworCUhXVFNUQU1QX0ZJTFRFUl9QVFBfVjFfTDRfU1lOQywKKwkvKiBQVFAgdjEsIFVEUCwgRGVsYXlfcmVxIHBhY2tldCAqLworCUhXVFNUQU1QX0ZJTFRFUl9QVFBfVjFfTDRfREVMQVlfUkVRLAorCS8qIFBUUCB2MiwgVURQLCBhbnkga2luZCBvZiBldmVudCBwYWNrZXQgKi8KKwlIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0w0X0VWRU5ULAorCS8qIFBUUCB2MiwgVURQLCBTeW5jIHBhY2tldCAqLworCUhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDRfU1lOQywKKwkvKiBQVFAgdjIsIFVEUCwgRGVsYXlfcmVxIHBhY2tldCAqLworCUhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDRfREVMQVlfUkVRLAorCisJLyogODAyLkFTMSwgRXRoZXJuZXQsIGFueSBraW5kIG9mIGV2ZW50IHBhY2tldCAqLworCUhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDJfRVZFTlQsCisJLyogODAyLkFTMSwgRXRoZXJuZXQsIFN5bmMgcGFja2V0ICovCisJSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MMl9TWU5DLAorCS8qIDgwMi5BUzEsIEV0aGVybmV0LCBEZWxheV9yZXEgcGFja2V0ICovCisJSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MMl9ERUxBWV9SRVEsCisKKwkvKiBQVFAgdjIvODAyLkFTMSwgYW55IGxheWVyLCBhbnkga2luZCBvZiBldmVudCBwYWNrZXQgKi8KKwlIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0VWRU5ULAorCS8qIFBUUCB2Mi84MDIuQVMxLCBhbnkgbGF5ZXIsIFN5bmMgcGFja2V0ICovCisJSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9TWU5DLAorCS8qIFBUUCB2Mi84MDIuQVMxLCBhbnkgbGF5ZXIsIERlbGF5X3JlcSBwYWNrZXQgKi8KKwlIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0RFTEFZX1JFUSwKK307CisKKyNlbmRpZiAvKiBfTkVUX1RJTUVTVEFNUElOR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAppbmRleCA2NTkzNjY3Li5iZTNlYmQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKQEAgLTk2LDcgKzk2LDcgQEAKICAqCUNvbXB1dGUgdGhlIHdvcnN0IGNhc2UgaGVhZGVyIGxlbmd0aCBhY2NvcmRpbmcgdG8gdGhlIHByb3RvY29scwogICoJdXNlZC4KICAqLwotIAorCiAjaWYgZGVmaW5lZChDT05GSUdfV0xBTl84MDIxMSkgfHwgZGVmaW5lZChDT05GSUdfQVgyNSkgfHwgZGVmaW5lZChDT05GSUdfQVgyNV9NT0RVTEUpCiAjIGlmIGRlZmluZWQoQ09ORklHX01BQzgwMjExX01FU0gpCiAjICBkZWZpbmUgTExfTUFYX0hFQURFUiAxMjgKQEAgLTEyNCw3ICsxMjQsNyBAQAogICoJTmV0d29yayBkZXZpY2Ugc3RhdGlzdGljcy4gQWtpbiB0byB0aGUgMi4wIGV0aGVyIHN0YXRzIGJ1dAogICoJd2l0aCBieXRlIGNvdW50ZXJzLgogICovCi0gCisKIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzCiB7CiAJdW5zaWduZWQgbG9uZwlyeF9wYWNrZXRzOwkJLyogdG90YWwgcGFja2V0cyByZWNlaXZlZAkqLwpAQCAtMjg1LDcgKzI4NSw3IEBACiAKIC8qCiAgKiBUaGlzIHN0cnVjdHVyZSBob2xkcyBhdCBib290IHRpbWUgY29uZmlndXJlZCBuZXRkZXZpY2Ugc2V0dGluZ3MuIFRoZXkKLSAqIGFyZSB0aGVuIHVzZWQgaW4gdGhlIGRldmljZSBwcm9iaW5nLiAKKyAqIGFyZSB0aGVuIHVzZWQgaW4gdGhlIGRldmljZSBwcm9iaW5nLgogICovCiBzdHJ1Y3QgbmV0ZGV2X2Jvb3Rfc2V0dXAgewogCWNoYXIgbmFtZVtJRk5BTVNJWl07CkBAIC0zMTQsNiArMzE0LDkgQEAKIAlzcGlubG9ja190CQlwb2xsX2xvY2s7CiAJaW50CQkJcG9sbF9vd25lcjsKICNlbmRpZgorCisJdW5zaWduZWQgaW50CQlncm9fY291bnQ7CisKIAlzdHJ1Y3QgbmV0X2RldmljZQkqZGV2OwogCXN0cnVjdCBsaXN0X2hlYWQJZGV2X2xpc3Q7CiAJc3RydWN0IHNrX2J1ZmYJCSpncm9fbGlzdDsKQEAgLTMyNyw2ICszMzAsMTQgQEAKIAlOQVBJX1NUQVRFX05QU1ZDLAkvKiBOZXRwb2xsIC0gZG9uJ3QgZGVxdWV1ZSBmcm9tIHBvbGxfbGlzdCAqLwogfTsKIAorZW51bSB7CisJR1JPX01FUkdFRCwKKwlHUk9fTUVSR0VEX0ZSRUUsCisJR1JPX0hFTEQsCisJR1JPX05PUk1BTCwKKwlHUk9fRFJPUCwKK307CisKIGV4dGVybiB2b2lkIF9fbmFwaV9zY2hlZHVsZShzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm4pOwogCiBzdGF0aWMgaW5saW5lIGludCBuYXBpX2Rpc2FibGVfcGVuZGluZyhzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm4pCkBAIC03NDAsNyArNzUxLDcgQEAKIAl2b2lkCQkJKmRzYV9wdHI7CS8qIGRzYSBzcGVjaWZpYyBkYXRhICovCiAjZW5kaWYKIAl2b2lkIAkJCSphdGFsa19wdHI7CS8qIEFwcGxlVGFsayBsaW5rIAkqLwotCXZvaWQJCQkqaXBfcHRyOwkvKiBJUHY0IHNwZWNpZmljIGRhdGEJKi8gIAorCXZvaWQJCQkqaXBfcHRyOwkvKiBJUHY0IHNwZWNpZmljIGRhdGEJKi8KIAl2b2lkICAgICAgICAgICAgICAgICAgICAqZG5fcHRyOyAgICAgICAgLyogREVDbmV0IHNwZWNpZmljIGRhdGEgKi8KIAl2b2lkICAgICAgICAgICAgICAgICAgICAqaXA2X3B0cjsgICAgICAgLyogSVB2NiBzcGVjaWZpYyBkYXRhICovCiAJdm9pZAkJCSplY19wdHI7CS8qIEVjb25ldCBzcGVjaWZpYyBkYXRhCSovCkBAIC03NTMsNyArNzY0LDcgQEAKICAqLwogCXVuc2lnbmVkIGxvbmcJCWxhc3Rfcng7CS8qIFRpbWUgb2YgbGFzdCBSeAkqLwogCS8qIEludGVyZmFjZSBhZGRyZXNzIGluZm8gdXNlZCBpbiBldGhfdHlwZV90cmFucygpICovCi0JdW5zaWduZWQgY2hhcgkJZGV2X2FkZHJbTUFYX0FERFJfTEVOXTsJLyogaHcgYWRkcmVzcywgKGJlZm9yZSBiY2FzdCAKKwl1bnNpZ25lZCBjaGFyCQlkZXZfYWRkcltNQVhfQUREUl9MRU5dOwkvKiBodyBhZGRyZXNzLCAoYmVmb3JlIGJjYXN0CiAJCQkJCQkJICAgYmVjYXVzZSBtb3N0IHBhY2tldHMgYXJlIHVuaWNhc3QpICovCiAKIAl1bnNpZ25lZCBjaGFyCQlicm9hZGNhc3RbTUFYX0FERFJfTEVOXTsJLyogaHcgYmNhc3QgYWRkCSovCkBAIC05ODQsNiArOTk1LDkgQEAKIHZvaWQgbmV0aWZfbmFwaV9kZWwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKTsKIAogc3RydWN0IG5hcGlfZ3JvX2NiIHsKKwkvKiBUaGlzIGluZGljYXRlcyB3aGVyZSB3ZSBhcmUgcHJvY2Vzc2luZyByZWxhdGl2ZSB0byBza2ItPmRhdGEuICovCisJaW50IGRhdGFfb2Zmc2V0OworCiAJLyogVGhpcyBpcyBub24temVybyBpZiB0aGUgcGFja2V0IG1heSBiZSBvZiB0aGUgc2FtZSBmbG93LiAqLwogCWludCBzYW1lX2Zsb3c7CiAKQEAgLTEwODgsNiArMTEwMiwzNiBAQAogI2lmZGVmIENPTkZJR19ORVRQT0xMX1RSQVAKIGV4dGVybiBpbnQJCW5ldHBvbGxfdHJhcCh2b2lkKTsKICNlbmRpZgorZXh0ZXJuIHZvaWQJICAgICAgKnNrYl9ncm9faGVhZGVyKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBobGVuKTsKK2V4dGVybiBpbnQJICAgICAgIHNrYl9ncm9fcmVjZWl2ZShzdHJ1Y3Qgc2tfYnVmZiAqKmhlYWQsCisJCQkJICAgICAgIHN0cnVjdCBza19idWZmICpza2IpOworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBza2JfZ3JvX29mZnNldChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXJldHVybiBOQVBJX0dST19DQihza2IpLT5kYXRhX29mZnNldDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc2tiX2dyb19sZW4oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlyZXR1cm4gc2tiLT5sZW4gLSBOQVBJX0dST19DQihza2IpLT5kYXRhX29mZnNldDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNrYl9ncm9fcHVsbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbGVuKQoreworCU5BUElfR1JPX0NCKHNrYiktPmRhdGFfb2Zmc2V0ICs9IGxlbjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNrYl9ncm9fcmVzZXRfb2Zmc2V0KHN0cnVjdCBza19idWZmICpza2IpCit7CisJTkFQSV9HUk9fQ0Ioc2tiKS0+ZGF0YV9vZmZzZXQgPSAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgKnNrYl9ncm9fbWFjX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXJldHVybiBza2JfbWFjX2hlYWRlcihza2IpIDwgc2tiLT5kYXRhID8gc2tiX21hY19oZWFkZXIoc2tiKSA6CisJICAgICAgIHBhZ2VfYWRkcmVzcyhza2Jfc2hpbmZvKHNrYiktPmZyYWdzWzBdLnBhZ2UpICsKKwkgICAgICAgc2tiX3NoaW5mbyhza2IpLT5mcmFnc1swXS5wYWdlX29mZnNldDsKK30KIAogc3RhdGljIGlubGluZSBpbnQgZGV2X2hhcmRfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJICB1bnNpZ25lZCBzaG9ydCB0eXBlLApAQCAtMTM3NiwxMiArMTQyMCwxNSBAQAogZXh0ZXJuIHZvaWQJCW5hcGlfZ3JvX2ZsdXNoKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSk7CiBleHRlcm4gaW50CQlkZXZfZ3JvX3JlY2VpdmUoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLAogCQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBpbnQJCW5hcGlfc2tiX2ZpbmlzaChpbnQgcmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGV4dGVybiBpbnQJCW5hcGlfZ3JvX3JlY2VpdmUoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLAogCQkJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBleHRlcm4gdm9pZAkJbmFwaV9yZXVzZV9za2Ioc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLAogCQkJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGV4dGVybiBzdHJ1Y3Qgc2tfYnVmZiAqCW5hcGlfZnJhZ2luZm9fc2tiKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwKIAkJCQkJICBzdHJ1Y3QgbmFwaV9ncm9fZnJhZ2luZm8gKmluZm8pOworZXh0ZXJuIGludAkJbmFwaV9mcmFnc19maW5pc2goc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLAorCQkJCQkgIHN0cnVjdCBza19idWZmICpza2IsIGludCByZXQpOwogZXh0ZXJuIGludAkJbmFwaV9ncm9fZnJhZ3Moc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLAogCQkJCSAgICAgICBzdHJ1Y3QgbmFwaV9ncm9fZnJhZ2luZm8gKmluZm8pOwogZXh0ZXJuIHZvaWQJCW5ldGlmX25pdF9kZWxpdmVyKHN0cnVjdCBza19idWZmICpza2IpOwpAQCAtMTU3NSw1NiArMTYyMiw2IEBACiAJcmV0dXJuICgxIDw8IGRlYnVnX3ZhbHVlKSAtIDE7CiB9CiAKLS8qIFRlc3QgaWYgcmVjZWl2ZSBuZWVkcyB0byBiZSBzY2hlZHVsZWQgYnV0IG9ubHkgaWYgdXAgKi8KLXN0YXRpYyBpbmxpbmUgaW50IG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKQotewotCXJldHVybiBuYXBpX3NjaGVkdWxlX3ByZXAobmFwaSk7Ci19Ci0KLS8qIEFkZCBpbnRlcmZhY2UgdG8gdGFpbCBvZiByeCBwb2xsIGxpc3QuIFRoaXMgYXNzdW1lcyB0aGF0IF9wcmVwIGhhcwotICogYWxyZWFkeSBiZWVuIGNhbGxlZCBhbmQgcmV0dXJuZWQgMS4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIF9fbmV0aWZfcnhfc2NoZWR1bGUoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKQotewotCV9fbmFwaV9zY2hlZHVsZShuYXBpKTsKLX0KLQotLyogVHJ5IHRvIHJlc2NoZWR1bGUgcG9sbC4gQ2FsbGVkIGJ5IGlycSBoYW5kbGVyLiAqLwotCi1zdGF0aWMgaW5saW5lIHZvaWQgbmV0aWZfcnhfc2NoZWR1bGUoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKQotewotCWlmIChuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKG5hcGkpKQotCQlfX25ldGlmX3J4X3NjaGVkdWxlKG5hcGkpOwotfQotCi0vKiBUcnkgdG8gcmVzY2hlZHVsZSBwb2xsLiBDYWxsZWQgYnkgZGV2LT5wb2xsKCkgYWZ0ZXIgbmV0aWZfcnhfY29tcGxldGUoKS4gICovCi1zdGF0aWMgaW5saW5lIGludCBuZXRpZl9yeF9yZXNjaGVkdWxlKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSkKLXsKLQlpZiAobmFwaV9zY2hlZHVsZV9wcmVwKG5hcGkpKSB7Ci0JCV9fbmV0aWZfcnhfc2NoZWR1bGUobmFwaSk7Ci0JCXJldHVybiAxOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotLyogc2FtZSBhcyBuZXRpZl9yeF9jb21wbGV0ZSwgZXhjZXB0IHRoYXQgbG9jYWxfaXJxX3NhdmUoZmxhZ3MpCi0gKiBoYXMgYWxyZWFkeSBiZWVuIGlzc3VlZAotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgX19uZXRpZl9yeF9jb21wbGV0ZShzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpCi17Ci0JX19uYXBpX2NvbXBsZXRlKG5hcGkpOwotfQotCi0vKiBSZW1vdmUgaW50ZXJmYWNlIGZyb20gcG9sbCBsaXN0OiBpdCBtdXN0IGJlIGluIHRoZSBwb2xsIGxpc3QKLSAqIG9uIGN1cnJlbnQgY3B1LiBUaGlzIHByaW1pdGl2ZSBpcyBjYWxsZWQgYnkgZGV2LT5wb2xsKCksIHdoZW4KLSAqIGl0IGNvbXBsZXRlcyB0aGUgd29yay4gVGhlIGRldmljZSBjYW5ub3QgYmUgb3V0IG9mIHBvbGwgbGlzdCBhdCB0aGlzCi0gKiBtb21lbnQsIGl0IGlzIEJVRygpLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgbmV0aWZfcnhfY29tcGxldGUoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKQotewotCW5hcGlfY29tcGxldGUobmFwaSk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCBfX25ldGlmX3R4X2xvY2soc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxLCBpbnQgY3B1KQogewogCXNwaW5fbG9jaygmdHhxLT5feG1pdF9sb2NrKTsKQEAgLTE4NzUsNyArMTg3Miw3IEBACiAKIAkJaWYgKGRldi0+cHJpdl9mbGFncyAmIElGRl9TTEFWRV9JTkFDVElWRSkgewogCQkJaWYgKChkZXYtPnByaXZfZmxhZ3MgJiBJRkZfU0xBVkVfTkVFREFSUCkgJiYKLQkJCSAgICBza2ItPnByb3RvY29sID09IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfQVJQKSkKKwkJCSAgICBza2ItPnByb3RvY29sID09IF9fY3B1X3RvX2JlMTYoRVRIX1BfQVJQKSkKIAkJCQlyZXR1cm4gMDsKIAogCQkJaWYgKG1hc3Rlci0+cHJpdl9mbGFncyAmIElGRl9NQVNURVJfQUxCKSB7CkBAIC0xODg0LDcgKzE4ODEsNyBAQAogCQkJCQlyZXR1cm4gMDsKIAkJCX0KIAkJCWlmIChtYXN0ZXItPnByaXZfZmxhZ3MgJiBJRkZfTUFTVEVSXzgwMjNBRCAmJgotCQkJICAgIHNrYi0+cHJvdG9jb2wgPT0gX19jb25zdGFudF9odG9ucyhFVEhfUF9TTE9XKSkKKwkJCSAgICBza2ItPnByb3RvY29sID09IF9fY3B1X3RvX2JlMTYoRVRIX1BfU0xPVykpCiAJCQkJcmV0dXJuIDA7CiAKIAkJCXJldHVybiAxOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvS2J1aWxkIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvS2J1aWxkCmluZGV4IDVhOGFmODcuLmFmOWQyZmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL0tidWlsZAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9LYnVpbGQKQEAgLTcsMTYgKzcsMjEgQEAKIGhlYWRlci15ICs9IHh0X0NPTk5NQVJLLmgKIGhlYWRlci15ICs9IHh0X0NPTk5TRUNNQVJLLmgKIGhlYWRlci15ICs9IHh0X0RTQ1AuaAoraGVhZGVyLXkgKz0geHRfTEVELmgKIGhlYWRlci15ICs9IHh0X01BUksuaAogaGVhZGVyLXkgKz0geHRfTkZMT0cuaAogaGVhZGVyLXkgKz0geHRfTkZRVUVVRS5oCiBoZWFkZXIteSArPSB4dF9SQVRFRVNULmgKIGhlYWRlci15ICs9IHh0X1NFQ01BUksuaAogaGVhZGVyLXkgKz0geHRfVENQTVNTLmgKK2hlYWRlci15ICs9IHh0X1RDUE9QVFNUUklQLmgKK2hlYWRlci15ICs9IHh0X1RQUk9YWS5oCiBoZWFkZXIteSArPSB4dF9jb21tZW50LmgKIGhlYWRlci15ICs9IHh0X2Nvbm5ieXRlcy5oCitoZWFkZXIteSArPSB4dF9jb25ubGltaXQuaAogaGVhZGVyLXkgKz0geHRfY29ubm1hcmsuaAogaGVhZGVyLXkgKz0geHRfY29ubnRyYWNrLmgKK2hlYWRlci15ICs9IHh0X2NsdXN0ZXIuaAogaGVhZGVyLXkgKz0geHRfZGNjcC5oCiBoZWFkZXIteSArPSB4dF9kc2NwLmgKIGhlYWRlci15ICs9IHh0X2VzcC5oCkBAIC0zMCw2ICszNSw3IEBACiBoZWFkZXIteSArPSB4dF9tdWx0aXBvcnQuaAogaGVhZGVyLXkgKz0geHRfb3duZXIuaAogaGVhZGVyLXkgKz0geHRfcGt0dHlwZS5oCitoZWFkZXIteSArPSB4dF9xdW90YS5oCiBoZWFkZXIteSArPSB4dF9yYXRlZXN0LmgKIGhlYWRlci15ICs9IHh0X3JlYWxtLmgKIGhlYWRlci15ICs9IHh0X3JlY2VudC5oCkBAIC0zOSw2ICs0NSw4IEBACiBoZWFkZXIteSArPSB4dF9zdHJpbmcuaAogaGVhZGVyLXkgKz0geHRfdGNwbXNzLmgKIGhlYWRlci15ICs9IHh0X3RjcHVkcC5oCitoZWFkZXIteSArPSB4dF90aW1lLmgKK2hlYWRlci15ICs9IHh0X3UzMi5oCiAKIHVuaWZkZWYteSArPSBuZl9jb25udHJhY2tfY29tbW9uLmgKIHVuaWZkZWYteSArPSBuZl9jb25udHJhY2tfZnRwLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190Y3AuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190Y3AuaAppbmRleCBhMDQ5ZGY0Li4zMDY2Nzg5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGNwLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RjcC5oCkBAIC0yLDYgKzIsOCBAQAogI2RlZmluZSBfTkZfQ09OTlRSQUNLX1RDUF9ICiAvKiBUQ1AgdHJhY2tpbmcuICovCiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiAvKiBUaGlzIGlzIGV4cG9zZWQgdG8gdXNlcnNwYWNlIChjdG5ldGxpbmspICovCiBlbnVtIHRjcF9jb25udHJhY2sgewogCVRDUF9DT05OVFJBQ0tfTk9ORSwKQEAgLTM0LDggKzM2LDggQEAKICNkZWZpbmUgSVBfQ1RfVENQX0ZMQUdfREFUQV9VTkFDS05PV0xFREdFRAkweDEwCiAKIHN0cnVjdCBuZl9jdF90Y3BfZmxhZ3MgewotCXVfaW50OF90IGZsYWdzOwotCXVfaW50OF90IG1hc2s7CisJX191OCBmbGFnczsKKwlfX3U4IG1hc2s7CiB9OwogCiAjaWZkZWYgX19LRVJORUxfXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmsuaAppbmRleCA3ZDhlMDQ1Li5jNjAwMDgzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmsuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmsuaApAQCAtMjUsOCArMjUsOCBAQAogLyogR2VuZXJhbCBmb3JtIG9mIGFkZHJlc3MgZmFtaWx5IGRlcGVuZGVudCBtZXNzYWdlLgogICovCiBzdHJ1Y3QgbmZnZW5tc2cgewotCXVfaW50OF90ICBuZmdlbl9mYW1pbHk7CQkvKiBBRl94eHggKi8KLQl1X2ludDhfdCAgdmVyc2lvbjsJCS8qIG5mbmV0bGluayB2ZXJzaW9uICovCisJX191OCAgbmZnZW5fZmFtaWx5OwkJLyogQUZfeHh4ICovCisJX191OCAgdmVyc2lvbjsJCS8qIG5mbmV0bGluayB2ZXJzaW9uICovCiAJX19iZTE2ICAgIHJlc19pZDsJCS8qIHJlc291cmNlIGlkICovCiB9OwogCkBAIC03Niw2ICs3Niw3IEBACiBleHRlcm4gaW50IG5mbmV0bGlua19oYXNfbGlzdGVuZXJzKHVuc2lnbmVkIGludCBncm91cCk7CiBleHRlcm4gaW50IG5mbmV0bGlua19zZW5kKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHVuc2lnbmVkIGdyb3VwLCAKIAkJCSAgaW50IGVjaG8pOworZXh0ZXJuIHZvaWQgbmZuZXRsaW5rX3NldF9lcnIodTMyIHBpZCwgdTMyIGdyb3VwLCBpbnQgZXJyb3IpOwogZXh0ZXJuIGludCBuZm5ldGxpbmtfdW5pY2FzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1X2ludDMyX3QgcGlkLCBpbnQgZmxhZ3MpOwogCiBleHRlcm4gdm9pZCBuZm5sX2xvY2sodm9pZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfY29tcGF0LmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfY29tcGF0LmgKaW5kZXggZTE0NTE3Ni4uZWRhNTVjYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2NvbXBhdC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19jb21wYXQuaApAQCAtMSw1ICsxLDggQEAKICNpZm5kZWYgX05GTkVUTElOS19DT01QQVRfSAogI2RlZmluZSBfTkZORVRMSU5LX0NPTVBBVF9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiAjaWZuZGVmIF9fS0VSTkVMX18KIC8qIE9sZCBuZm5ldGxpbmsgbWFjcm9zIGZvciB1c2Vyc3BhY2UgKi8KIApAQCAtMjAsOCArMjMsOCBAQAogCiBzdHJ1Y3QgbmZhdHRyCiB7Ci0JdV9pbnQxNl90IG5mYV9sZW47Ci0JdV9pbnQxNl90IG5mYV90eXBlOwkvKiB3ZSB1c2UgMTUgYml0cyBmb3IgdGhlIHR5cGUsIGFuZCB0aGUgaGlnaGVzdAorCV9fdTE2IG5mYV9sZW47CisJX191MTYgbmZhX3R5cGU7CS8qIHdlIHVzZSAxNSBiaXRzIGZvciB0aGUgdHlwZSwgYW5kIHRoZSBoaWdoZXN0CiAJCQkJICogYml0IHRvIGluZGljYXRlIHdoZXRoZXIgdGhlIHBheWxvYWQgaXMgbmVzdGVkICovCiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmgKaW5kZXggZjY2MTczMS4uZDNiYWI3YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuaApAQCAtMTcsMTQgKzE3LDE0IEBACiAKIHN0cnVjdCBuZnVsbmxfbXNnX3BhY2tldF9oZHIgewogCV9fYmUxNgkJaHdfcHJvdG9jb2w7CS8qIGh3IHByb3RvY29sIChuZXR3b3JrIG9yZGVyKSAqLwotCXVfaW50OF90CWhvb2s7CQkvKiBuZXRmaWx0ZXIgaG9vayAqLwotCXVfaW50OF90CV9wYWQ7CisJX191OAlob29rOwkJLyogbmV0ZmlsdGVyIGhvb2sgKi8KKwlfX3U4CV9wYWQ7CiB9OwogCiBzdHJ1Y3QgbmZ1bG5sX21zZ19wYWNrZXRfaHcgewogCV9fYmUxNgkJaHdfYWRkcmxlbjsKLQl1X2ludDE2X3QJX3BhZDsKLQl1X2ludDhfdAlod19hZGRyWzhdOworCV9fdTE2CV9wYWQ7CisJX191OAlod19hZGRyWzhdOwogfTsKIAogc3RydWN0IG5mdWxubF9tc2dfcGFja2V0X3RpbWVzdGFtcCB7CkBAIC0zNSwxMiArMzUsMTIgQEAKIGVudW0gbmZ1bG5sX2F0dHJfdHlwZSB7CiAJTkZVTEFfVU5TUEVDLAogCU5GVUxBX1BBQ0tFVF9IRFIsCi0JTkZVTEFfTUFSSywJCQkvKiB1X2ludDMyX3QgbmZtYXJrICovCisJTkZVTEFfTUFSSywJCQkvKiBfX3UzMiBuZm1hcmsgKi8KIAlORlVMQV9USU1FU1RBTVAsCQkvKiBuZnVsbmxfbXNnX3BhY2tldF90aW1lc3RhbXAgKi8KLQlORlVMQV9JRklOREVYX0lOREVWLAkJLyogdV9pbnQzMl90IGlmaW5kZXggKi8KLQlORlVMQV9JRklOREVYX09VVERFViwJCS8qIHVfaW50MzJfdCBpZmluZGV4ICovCi0JTkZVTEFfSUZJTkRFWF9QSFlTSU5ERVYsCS8qIHVfaW50MzJfdCBpZmluZGV4ICovCi0JTkZVTEFfSUZJTkRFWF9QSFlTT1VUREVWLAkvKiB1X2ludDMyX3QgaWZpbmRleCAqLworCU5GVUxBX0lGSU5ERVhfSU5ERVYsCQkvKiBfX3UzMiBpZmluZGV4ICovCisJTkZVTEFfSUZJTkRFWF9PVVRERVYsCQkvKiBfX3UzMiBpZmluZGV4ICovCisJTkZVTEFfSUZJTkRFWF9QSFlTSU5ERVYsCS8qIF9fdTMyIGlmaW5kZXggKi8KKwlORlVMQV9JRklOREVYX1BIWVNPVVRERVYsCS8qIF9fdTMyIGlmaW5kZXggKi8KIAlORlVMQV9IV0FERFIsCQkJLyogbmZ1bG5sX21zZ19wYWNrZXRfaHcgKi8KIAlORlVMQV9QQVlMT0FELAkJCS8qIG9wYXF1ZSBkYXRhIHBheWxvYWQgKi8KIAlORlVMQV9QUkVGSVgsCQkJLyogc3RyaW5nIHByZWZpeCAqLwpAQCAtNjUsMjMgKzY1LDIzIEBACiB9OwogCiBzdHJ1Y3QgbmZ1bG5sX21zZ19jb25maWdfY21kIHsKLQl1X2ludDhfdAljb21tYW5kOwkvKiBuZnVsbmxfbXNnX2NvbmZpZ19jbWRzICovCisJX191OAljb21tYW5kOwkvKiBuZnVsbmxfbXNnX2NvbmZpZ19jbWRzICovCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogc3RydWN0IG5mdWxubF9tc2dfY29uZmlnX21vZGUgewogCV9fYmUzMgkJY29weV9yYW5nZTsKLQl1X2ludDhfdAljb3B5X21vZGU7Ci0JdV9pbnQ4X3QJX3BhZDsKKwlfX3U4CWNvcHlfbW9kZTsKKwlfX3U4CV9wYWQ7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogZW51bSBuZnVsbmxfYXR0cl9jb25maWcgewogCU5GVUxBX0NGR19VTlNQRUMsCiAJTkZVTEFfQ0ZHX0NNRCwJCQkvKiBuZnVsbmxfbXNnX2NvbmZpZ19jbWQgKi8KIAlORlVMQV9DRkdfTU9ERSwJCQkvKiBuZnVsbmxfbXNnX2NvbmZpZ19tb2RlICovCi0JTkZVTEFfQ0ZHX05MQlVGU0laLAkJLyogdV9pbnQzMl90IGJ1ZmZlciBzaXplICovCi0JTkZVTEFfQ0ZHX1RJTUVPVVQsCQkvKiB1X2ludDMyX3QgaW4gMS8xMDAgcyAqLwotCU5GVUxBX0NGR19RVEhSRVNILAkJLyogdV9pbnQzMl90ICovCi0JTkZVTEFfQ0ZHX0ZMQUdTLAkJLyogdV9pbnQxNl90ICovCisJTkZVTEFfQ0ZHX05MQlVGU0laLAkJLyogX191MzIgYnVmZmVyIHNpemUgKi8KKwlORlVMQV9DRkdfVElNRU9VVCwJCS8qIF9fdTMyIGluIDEvMTAwIHMgKi8KKwlORlVMQV9DRkdfUVRIUkVTSCwJCS8qIF9fdTMyICovCisJTkZVTEFfQ0ZHX0ZMQUdTLAkJLyogX191MTYgKi8KIAlfX05GVUxBX0NGR19NQVgKIH07CiAjZGVmaW5lIE5GVUxBX0NGR19NQVggKF9fTkZVTEFfQ0ZHX01BWCAtMSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmgKaW5kZXggODNlNzg5Ni4uMjQ1NWZlNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmgKQEAgLTE1LDEzICsxNSwxMyBAQAogc3RydWN0IG5mcW5sX21zZ19wYWNrZXRfaGRyIHsKIAlfX2JlMzIJCXBhY2tldF9pZDsJLyogdW5pcXVlIElEIG9mIHBhY2tldCBpbiBxdWV1ZSAqLwogCV9fYmUxNgkJaHdfcHJvdG9jb2w7CS8qIGh3IHByb3RvY29sIChuZXR3b3JrIG9yZGVyKSAqLwotCXVfaW50OF90CWhvb2s7CQkvKiBuZXRmaWx0ZXIgaG9vayAqLworCV9fdTgJaG9vazsJCS8qIG5ldGZpbHRlciBob29rICovCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogc3RydWN0IG5mcW5sX21zZ19wYWNrZXRfaHcgewogCV9fYmUxNgkJaHdfYWRkcmxlbjsKLQl1X2ludDE2X3QJX3BhZDsKLQl1X2ludDhfdAlod19hZGRyWzhdOworCV9fdTE2CV9wYWQ7CisJX191OAlod19hZGRyWzhdOwogfTsKIAogc3RydWN0IG5mcW5sX21zZ19wYWNrZXRfdGltZXN0YW1wIHsKQEAgLTMzLDEyICszMywxMiBAQAogCU5GUUFfVU5TUEVDLAogCU5GUUFfUEFDS0VUX0hEUiwKIAlORlFBX1ZFUkRJQ1RfSERSLAkJLyogbmZxbmxfbXNnX3ZlcmRpY3RfaHJkICovCi0JTkZRQV9NQVJLLAkJCS8qIHVfaW50MzJfdCBuZm1hcmsgKi8KKwlORlFBX01BUkssCQkJLyogX191MzIgbmZtYXJrICovCiAJTkZRQV9USU1FU1RBTVAsCQkJLyogbmZxbmxfbXNnX3BhY2tldF90aW1lc3RhbXAgKi8KLQlORlFBX0lGSU5ERVhfSU5ERVYsCQkvKiB1X2ludDMyX3QgaWZpbmRleCAqLwotCU5GUUFfSUZJTkRFWF9PVVRERVYsCQkvKiB1X2ludDMyX3QgaWZpbmRleCAqLwotCU5GUUFfSUZJTkRFWF9QSFlTSU5ERVYsCQkvKiB1X2ludDMyX3QgaWZpbmRleCAqLwotCU5GUUFfSUZJTkRFWF9QSFlTT1VUREVWLAkvKiB1X2ludDMyX3QgaWZpbmRleCAqLworCU5GUUFfSUZJTkRFWF9JTkRFViwJCS8qIF9fdTMyIGlmaW5kZXggKi8KKwlORlFBX0lGSU5ERVhfT1VUREVWLAkJLyogX191MzIgaWZpbmRleCAqLworCU5GUUFfSUZJTkRFWF9QSFlTSU5ERVYsCQkvKiBfX3UzMiBpZmluZGV4ICovCisJTkZRQV9JRklOREVYX1BIWVNPVVRERVYsCS8qIF9fdTMyIGlmaW5kZXggKi8KIAlORlFBX0hXQUREUiwJCQkvKiBuZnFubF9tc2dfcGFja2V0X2h3ICovCiAJTkZRQV9QQVlMT0FELAkJCS8qIG9wYXF1ZSBkYXRhIHBheWxvYWQgKi8KIApAQCAtNjEsOCArNjEsOCBAQAogfTsKIAogc3RydWN0IG5mcW5sX21zZ19jb25maWdfY21kIHsKLQl1X2ludDhfdAljb21tYW5kOwkvKiBuZnFubF9tc2dfY29uZmlnX2NtZHMgKi8KLQl1X2ludDhfdAlfcGFkOworCV9fdTgJY29tbWFuZDsJLyogbmZxbmxfbXNnX2NvbmZpZ19jbWRzICovCisJX191OAlfcGFkOwogCV9fYmUxNgkJcGY7CQkvKiBBRl94eHggZm9yIFBGX1tVTl1CSU5EICovCiB9OwogCkBAIC03NCw3ICs3NCw3IEBACiAKIHN0cnVjdCBuZnFubF9tc2dfY29uZmlnX3BhcmFtcyB7CiAJX19iZTMyCQljb3B5X3JhbmdlOwotCXVfaW50OF90CWNvcHlfbW9kZTsJLyogZW51bSBuZnFubF9jb25maWdfbW9kZSAqLworCV9fdTgJY29weV9tb2RlOwkvKiBlbnVtIG5mcW5sX2NvbmZpZ19tb2RlICovCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogCkBAIC04Miw3ICs4Miw3IEBACiAJTkZRQV9DRkdfVU5TUEVDLAogCU5GUUFfQ0ZHX0NNRCwJCQkvKiBuZnFubF9tc2dfY29uZmlnX2NtZCAqLwogCU5GUUFfQ0ZHX1BBUkFNUywJCS8qIG5mcW5sX21zZ19jb25maWdfcGFyYW1zICovCi0JTkZRQV9DRkdfUVVFVUVfTUFYTEVOLAkJLyogdV9pbnQzMl90ICovCisJTkZRQV9DRkdfUVVFVUVfTUFYTEVOLAkJLyogX191MzIgKi8KIAlfX05GUUFfQ0ZHX01BWAogfTsKICNkZWZpbmUgTkZRQV9DRkdfTUFYIChfX05GUUFfQ0ZHX01BWC0xKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmgKaW5kZXggYzdlZTg3NC4uYWRiYzUwYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oCkBAIC0xLDYgKzEsOCBAQAogI2lmbmRlZiBfWF9UQUJMRVNfSAogI2RlZmluZSBfWF9UQUJMRVNfSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogI2RlZmluZSBYVF9GVU5DVElPTl9NQVhOQU1FTEVOIDMwCiAjZGVmaW5lIFhUX1RBQkxFX01BWE5BTUVMRU4gMzIKIApAQCAtOCwyMiArMTAsMjIgQEAKIHsKIAl1bmlvbiB7CiAJCXN0cnVjdCB7Ci0JCQl1X2ludDE2X3QgbWF0Y2hfc2l6ZTsKKwkJCV9fdTE2IG1hdGNoX3NpemU7CiAKIAkJCS8qIFVzZWQgYnkgdXNlcnNwYWNlICovCiAJCQljaGFyIG5hbWVbWFRfRlVOQ1RJT05fTUFYTkFNRUxFTi0xXTsKIAotCQkJdV9pbnQ4X3QgcmV2aXNpb247CisJCQlfX3U4IHJldmlzaW9uOwogCQl9IHVzZXI7CiAJCXN0cnVjdCB7Ci0JCQl1X2ludDE2X3QgbWF0Y2hfc2l6ZTsKKwkJCV9fdTE2IG1hdGNoX3NpemU7CiAKIAkJCS8qIFVzZWQgaW5zaWRlIHRoZSBrZXJuZWwgKi8KIAkJCXN0cnVjdCB4dF9tYXRjaCAqbWF0Y2g7CiAJCX0ga2VybmVsOwogCiAJCS8qIFRvdGFsIGxlbmd0aCAqLwotCQl1X2ludDE2X3QgbWF0Y2hfc2l6ZTsKKwkJX191MTYgbWF0Y2hfc2l6ZTsKIAl9IHU7CiAKIAl1bnNpZ25lZCBjaGFyIGRhdGFbMF07CkBAIC0zMywyMiArMzUsMjIgQEAKIHsKIAl1bmlvbiB7CiAJCXN0cnVjdCB7Ci0JCQl1X2ludDE2X3QgdGFyZ2V0X3NpemU7CisJCQlfX3UxNiB0YXJnZXRfc2l6ZTsKIAogCQkJLyogVXNlZCBieSB1c2Vyc3BhY2UgKi8KIAkJCWNoYXIgbmFtZVtYVF9GVU5DVElPTl9NQVhOQU1FTEVOLTFdOwogCi0JCQl1X2ludDhfdCByZXZpc2lvbjsKKwkJCV9fdTggcmV2aXNpb247CiAJCX0gdXNlcjsKIAkJc3RydWN0IHsKLQkJCXVfaW50MTZfdCB0YXJnZXRfc2l6ZTsKKwkJCV9fdTE2IHRhcmdldF9zaXplOwogCiAJCQkvKiBVc2VkIGluc2lkZSB0aGUga2VybmVsICovCiAJCQlzdHJ1Y3QgeHRfdGFyZ2V0ICp0YXJnZXQ7CiAJCX0ga2VybmVsOwogCiAJCS8qIFRvdGFsIGxlbmd0aCAqLwotCQl1X2ludDE2X3QgdGFyZ2V0X3NpemU7CisJCV9fdTE2IHRhcmdldF9zaXplOwogCX0gdTsKIAogCXVuc2lnbmVkIGNoYXIgZGF0YVswXTsKQEAgLTc0LDcgKzc2LDcgQEAKIHsKIAljaGFyIG5hbWVbWFRfRlVOQ1RJT05fTUFYTkFNRUxFTi0xXTsKIAotCXVfaW50OF90IHJldmlzaW9uOworCV9fdTggcmV2aXNpb247CiB9OwogCiAvKiBDT05USU5VRSB2ZXJkaWN0IGZvciB0YXJnZXRzICovCkBAIC05MCwxMCArOTIsMTAgQEAKICAqLwogc3RydWN0IF94dF9hbGlnbgogewotCXVfaW50OF90IHU4OwotCXVfaW50MTZfdCB1MTY7Ci0JdV9pbnQzMl90IHUzMjsKLQl1X2ludDY0X3QgdTY0OworCV9fdTggdTg7CisJX191MTYgdTE2OworCV9fdTMyIHUzMjsKKwlfX3U2NCB1NjQ7CiB9OwogCiAjZGVmaW5lIFhUX0FMSUdOKHMpICgoKHMpICsgKF9fYWxpZ25vZl9fKHN0cnVjdCBfeHRfYWxpZ24pLTEpKSAJXApAQCAtMTA5LDcgKzExMSw3IEBACiAKIHN0cnVjdCB4dF9jb3VudGVycwogewotCXVfaW50NjRfdCBwY250LCBiY250OwkJCS8qIFBhY2tldCBhbmQgYnl0ZSBjb3VudGVycyAqLworCV9fdTY0IHBjbnQsIGJjbnQ7CQkJLyogUGFja2V0IGFuZCBieXRlIGNvdW50ZXJzICovCiB9OwogCiAvKiBUaGUgYXJndW1lbnQgdG8gSVBUX1NPX0FERF9DT1VOVEVSUy4gKi8KQEAgLTM0OSwyMyArMzUxLDIyIEBACiB7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCi0JLyogQSB1bmlxdWUgbmFtZS4uLiAqLwotCWNvbnN0IGNoYXIgbmFtZVtYVF9UQUJMRV9NQVhOQU1FTEVOXTsKLQogCS8qIFdoYXQgaG9va3MgeW91IHdpbGwgZW50ZXIgb24gKi8KIAl1bnNpZ25lZCBpbnQgdmFsaWRfaG9va3M7CiAKIAkvKiBMb2NrIGZvciB0aGUgY3VydGFpbiAqLwotCXJ3bG9ja190IGxvY2s7CisJc3RydWN0IG11dGV4IGxvY2s7CiAKIAkvKiBNYW4gYmVoaW5kIHRoZSBjdXJ0YWluLi4uICovCi0JLy9zdHJ1Y3QgaXA2dF90YWJsZV9pbmZvICpwcml2YXRlOwotCXZvaWQgKnByaXZhdGU7CisJc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGU7CiAKIAkvKiBTZXQgdGhpcyB0byBUSElTX01PRFVMRSBpZiB5b3UgYXJlIGEgbW9kdWxlLCBvdGhlcndpc2UgTlVMTCAqLwogCXN0cnVjdCBtb2R1bGUgKm1lOwogCiAJdV9pbnQ4X3QgYWY7CQkvKiBhZGRyZXNzL3Byb3RvY29sIGZhbWlseSAqLworCisJLyogQSB1bmlxdWUgbmFtZS4uLiAqLworCWNvbnN0IGNoYXIgbmFtZVtYVF9UQUJMRV9NQVhOQU1FTEVOXTsKIH07CiAKICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC5oPgpAQCAtMzg2LDcgKzM4Nyw3IEBACiAKIAkvKiBpcHRfZW50cnkgdGFibGVzOiBvbmUgcGVyIENQVSAqLwogCS8qIE5vdGUgOiB0aGlzIGZpZWxkIE1VU1QgYmUgdGhlIGxhc3Qgb25lLCBzZWUgWFRfVEFCTEVfSU5GT19TWiAqLwotCWNoYXIgKmVudHJpZXNbMV07CisJdm9pZCAqZW50cmllc1sxXTsKIH07CiAKICNkZWZpbmUgWFRfVEFCTEVfSU5GT19TWiAob2Zmc2V0b2Yoc3RydWN0IHh0X3RhYmxlX2luZm8sIGVudHJpZXMpIFwKQEAgLTQzMyw2ICs0MzQsOCBAQAogCiBleHRlcm4gc3RydWN0IHh0X3RhYmxlX2luZm8gKnh0X2FsbG9jX3RhYmxlX2luZm8odW5zaWduZWQgaW50IHNpemUpOwogZXh0ZXJuIHZvaWQgeHRfZnJlZV90YWJsZV9pbmZvKHN0cnVjdCB4dF90YWJsZV9pbmZvICppbmZvKTsKK2V4dGVybiB2b2lkIHh0X3RhYmxlX2VudHJ5X3N3YXBfcmN1KHN0cnVjdCB4dF90YWJsZV9pbmZvICpvbGQsCisJCQkJICAgIHN0cnVjdCB4dF90YWJsZV9pbmZvICpuZXcpOwogCiAjaWZkZWYgQ09ORklHX0NPTVBBVAogI2luY2x1ZGUgPG5ldC9jb21wYXQuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X0NMQVNTSUZZLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9DTEFTU0lGWS5oCmluZGV4IDU4MTExMzUuLmE4MTNiZjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X0NMQVNTSUZZLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfQ0xBU1NJRlkuaApAQCAtMSw4ICsxLDEwIEBACiAjaWZuZGVmIF9YVF9DTEFTU0lGWV9ICiAjZGVmaW5lIF9YVF9DTEFTU0lGWV9ICiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiBzdHJ1Y3QgeHRfY2xhc3NpZnlfdGFyZ2V0X2luZm8gewotCXVfaW50MzJfdCBwcmlvcml0eTsKKwlfX3UzMiBwcmlvcml0eTsKIH07CiAKICNlbmRpZiAvKl9YVF9DTEFTU0lGWV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9DT05OTUFSSy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfQ09OTk1BUksuaAppbmRleCA0ZTU4YmE0Li43NjM1YzhmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9DT05OTUFSSy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X0NPTk5NQVJLLmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmIF9YVF9DT05OTUFSS19IX3RhcmdldAogI2RlZmluZSBfWFRfQ09OTk1BUktfSF90YXJnZXQKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIC8qIENvcHlyaWdodCAoQykgMjAwMiwyMDA0IE1BUkEgU3lzdGVtcyBBQiA8aHR0cDovL3d3dy5tYXJhc3lzdGVtcy5jb20+CiAgKiBieSBIZW5yaWsgTm9yZHN0cm9tIDxobm9AbWFyYXN5c3RlbXMuY29tPgogICoKQEAgLTE5LDEyICsyMSwxMiBAQAogc3RydWN0IHh0X2Nvbm5tYXJrX3RhcmdldF9pbmZvIHsKIAl1bnNpZ25lZCBsb25nIG1hcms7CiAJdW5zaWduZWQgbG9uZyBtYXNrOwotCXVfaW50OF90IG1vZGU7CisJX191OCBtb2RlOwogfTsKIAogc3RydWN0IHh0X2Nvbm5tYXJrX3RnaW5mbzEgewotCXVfaW50MzJfdCBjdG1hcmssIGN0bWFzaywgbmZtYXNrOwotCXVfaW50OF90IG1vZGU7CisJX191MzIgY3RtYXJrLCBjdG1hc2ssIG5mbWFzazsKKwlfX3U4IG1vZGU7CiB9OwogCiAjZW5kaWYgLypfWFRfQ09OTk1BUktfSF90YXJnZXQqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfQ09OTlNFQ01BUksuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X0NPTk5TRUNNQVJLLmgKaW5kZXggYzZiZDc1NC4uYjk3M2ZmOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfQ09OTlNFQ01BUksuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9DT05OU0VDTUFSSy5oCkBAIC0xLDEzICsxLDE1IEBACiAjaWZuZGVmIF9YVF9DT05OU0VDTUFSS19IX3RhcmdldAogI2RlZmluZSBfWFRfQ09OTlNFQ01BUktfSF90YXJnZXQKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIGVudW0gewogCUNPTk5TRUNNQVJLX1NBVkUgPSAxLAogCUNPTk5TRUNNQVJLX1JFU1RPUkUsCiB9OwogCiBzdHJ1Y3QgeHRfY29ubnNlY21hcmtfdGFyZ2V0X2luZm8gewotCXVfaW50OF90IG1vZGU7CisJX191OCBtb2RlOwogfTsKIAogI2VuZGlmIC8qX1hUX0NPTk5TRUNNQVJLX0hfdGFyZ2V0ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9EU0NQLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9EU0NQLmgKaW5kZXggMTRkYTE5Ni4uNjQ4ZTBiMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfRFNDUC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X0RTQ1AuaApAQCAtMTEsMTUgKzExLDE2IEBACiAjaWZuZGVmIF9YVF9EU0NQX1RBUkdFVF9ICiAjZGVmaW5lIF9YVF9EU0NQX1RBUkdFVF9ICiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X2RzY3AuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAvKiB0YXJnZXQgaW5mbyAqLwogc3RydWN0IHh0X0RTQ1BfaW5mbyB7Ci0JdV9pbnQ4X3QgZHNjcDsKKwlfX3U4IGRzY3A7CiB9OwogCiBzdHJ1Y3QgeHRfdG9zX3RhcmdldF9pbmZvIHsKLQl1X2ludDhfdCB0b3NfdmFsdWU7Ci0JdV9pbnQ4X3QgdG9zX21hc2s7CisJX191OCB0b3NfdmFsdWU7CisJX191OCB0b3NfbWFzazsKIH07CiAKICNlbmRpZiAvKiBfWFRfRFNDUF9UQVJHRVRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfTEVELmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9MRUQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzkxYTBkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfTEVELmgKQEAgLTAsMCArMSwxMyBAQAorI2lmbmRlZiBfWFRfTEVEX0gKKyNkZWZpbmUgX1hUX0xFRF9ICisKK3N0cnVjdCB4dF9sZWRfaW5mbyB7CisJY2hhciBpZFsyN107ICAgICAgICAvKiBVbmlxdWUgSUQgZm9yIHRoaXMgdHJpZ2dlciBpbiB0aGUgTEVEIGNsYXNzICovCisJX191OCBhbHdheXNfYmxpbms7ICAvKiBCbGluayBldmVuIGlmIHRoZSBMRUQgaXMgYWxyZWFkeSBvbiAqLworCV9fdTMyIGRlbGF5OyAgICAgICAgLyogRGVsYXkgdW50aWwgTEVEIGlzIHN3aXRjaGVkIG9mZiBhZnRlciB0cmlnZ2VyICovCisKKwkvKiBLZXJuZWwgZGF0YSB1c2VkIGluIHRoZSBtb2R1bGUgKi8KKwl2b2lkICppbnRlcm5hbF9kYXRhIF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKTsKK307CisKKyNlbmRpZiAvKiBfWFRfTEVEX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X01BUksuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X01BUksuaAppbmRleCA3NzhiMjc4Li4wMjgzMDRiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9NQVJLLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfTUFSSy5oCkBAIC0xLDYgKzEsOCBAQAogI2lmbmRlZiBfWFRfTUFSS19IX3RhcmdldAogI2RlZmluZSBfWFRfTUFSS19IX3RhcmdldAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogLyogVmVyc2lvbiAwICovCiBzdHJ1Y3QgeHRfbWFya190YXJnZXRfaW5mbyB7CiAJdW5zaWduZWQgbG9uZyBtYXJrOwpAQCAtMTUsMTEgKzE3LDExIEBACiAKIHN0cnVjdCB4dF9tYXJrX3RhcmdldF9pbmZvX3YxIHsKIAl1bnNpZ25lZCBsb25nIG1hcms7Ci0JdV9pbnQ4X3QgbW9kZTsKKwlfX3U4IG1vZGU7CiB9OwogCiBzdHJ1Y3QgeHRfbWFya190Z2luZm8yIHsKLQl1X2ludDMyX3QgbWFyaywgbWFzazsKKwlfX3UzMiBtYXJrLCBtYXNrOwogfTsKIAogI2VuZGlmIC8qX1hUX01BUktfSF90YXJnZXQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X05GTE9HLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9ORkxPRy5oCmluZGV4IDRiMzZhZWIuLjg3YjU4MzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X05GTE9HLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfTkZMT0cuaApAQCAtMSwxNyArMSwxOSBAQAogI2lmbmRlZiBfWFRfTkZMT0dfVEFSR0VUCiAjZGVmaW5lIF9YVF9ORkxPR19UQVJHRVQKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKICNkZWZpbmUgWFRfTkZMT0dfREVGQVVMVF9HUk9VUAkJMHgxCiAjZGVmaW5lIFhUX05GTE9HX0RFRkFVTFRfVEhSRVNIT0xECTAKIAogI2RlZmluZSBYVF9ORkxPR19NQVNLCQkJMHgwCiAKIHN0cnVjdCB4dF9uZmxvZ19pbmZvIHsKLQl1X2ludDMyX3QJbGVuOwotCXVfaW50MTZfdAlncm91cDsKLQl1X2ludDE2X3QJdGhyZXNob2xkOwotCXVfaW50MTZfdAlmbGFnczsKLQl1X2ludDE2X3QJcGFkOworCV9fdTMyCWxlbjsKKwlfX3UxNglncm91cDsKKwlfX3UxNgl0aHJlc2hvbGQ7CisJX191MTYJZmxhZ3M7CisJX191MTYJcGFkOwogCWNoYXIJCXByZWZpeFs2NF07CiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9ORlFVRVVFLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9ORlFVRVVFLmgKaW5kZXggOWE5YWY3OWYuLjk4MmE4OWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X05GUVVFVUUuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9ORlFVRVVFLmgKQEAgLTgsOSArOCwxMSBAQAogI2lmbmRlZiBfWFRfTkZRX1RBUkdFVF9ICiAjZGVmaW5lIF9YVF9ORlFfVEFSR0VUX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIC8qIHRhcmdldCBpbmZvICovCiBzdHJ1Y3QgeHRfTkZRX2luZm8gewotCXVfaW50MTZfdCBxdWV1ZW51bTsKKwlfX3UxNiBxdWV1ZW51bTsKIH07CiAKICNlbmRpZiAvKiBfWFRfTkZRX1RBUkdFVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9SQVRFRVNULmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9SQVRFRVNULmgKaW5kZXggZjc5ZTMxMy4uNjYwNWUyMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfUkFURUVTVC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X1JBVEVFU1QuaApAQCAtMSwxMCArMSwxMiBAQAogI2lmbmRlZiBfWFRfUkFURUVTVF9UQVJHRVRfSAogI2RlZmluZSBfWFRfUkFURUVTVF9UQVJHRVRfSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogc3RydWN0IHh0X3JhdGVlc3RfdGFyZ2V0X2luZm8gewogCWNoYXIJCQluYW1lW0lGTkFNU0laXTsKLQlpbnQ4X3QJCQlpbnRlcnZhbDsKLQl1X2ludDhfdAkJZXdtYV9sb2c7CisJX19zOAkJCWludGVydmFsOworCV9fdTgJCWV3bWFfbG9nOwogCiAJLyogVXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBrZXJuZWwgKi8KIAlzdHJ1Y3QgeHRfcmF0ZWVzdAkqZXN0IF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X1NFQ01BUksuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X1NFQ01BUksuaAppbmRleCBjNTNmYmZmLi42ZmNkMzQ0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9TRUNNQVJLLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfU0VDTUFSSy5oCkBAIC0xLDYgKzEsOCBAQAogI2lmbmRlZiBfWFRfU0VDTUFSS19IX3RhcmdldAogI2RlZmluZSBfWFRfU0VDTUFSS19IX3RhcmdldAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogLyoKICAqIFRoaXMgaXMgaW50ZW5kZWQgZm9yIHVzZSBieSB2YXJpb3VzIHNlY3VyaXR5IHN1YnN5c3RlbXMgKGJ1dCBub3QKICAqIGF0IHRoZSBzYW1lIHRpbWUpLgpAQCAtMTIsMTIgKzE0LDEyIEBACiAjZGVmaW5lIFNFQ01BUktfU0VMQ1RYX01BWAkyNTYKIAogc3RydWN0IHh0X3NlY21hcmtfdGFyZ2V0X3NlbGludXhfaW5mbyB7Ci0JdV9pbnQzMl90IHNlbHNpZDsKKwlfX3UzMiBzZWxzaWQ7CiAJY2hhciBzZWxjdHhbU0VDTUFSS19TRUxDVFhfTUFYXTsKIH07CiAKIHN0cnVjdCB4dF9zZWNtYXJrX3RhcmdldF9pbmZvIHsKLQl1X2ludDhfdCBtb2RlOworCV9fdTggbW9kZTsKIAl1bmlvbiB7CiAJCXN0cnVjdCB4dF9zZWNtYXJrX3RhcmdldF9zZWxpbnV4X2luZm8gc2VsOwogCX0gdTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X1RDUE1TUy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfVENQTVNTLmgKaW5kZXggNTNhMjkyYy4uOWE2OTYwYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfVENQTVNTLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfVENQTVNTLmgKQEAgLTEsOCArMSwxMCBAQAogI2lmbmRlZiBfWFRfVENQTVNTX0gKICNkZWZpbmUgX1hUX1RDUE1TU19ICiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiBzdHJ1Y3QgeHRfdGNwbXNzX2luZm8gewotCXVfaW50MTZfdCBtc3M7CisJX191MTYgbXNzOwogfTsKIAogI2RlZmluZSBYVF9UQ1BNU1NfQ0xBTVBfUE1UVSAweGZmZmYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2NsdXN0ZXIuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2NsdXN0ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTBhMGQwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfY2x1c3Rlci5oCkBAIC0wLDAgKzEsMTUgQEAKKyNpZm5kZWYgX1hUX0NMVVNURVJfTUFUQ0hfSAorI2RlZmluZSBfWFRfQ0xVU1RFUl9NQVRDSF9ICisKK2VudW0geHRfY2x1c3Rlcl9mbGFncyB7CisJWFRfQ0xVU1RFUl9GX0lOVgk9ICgxIDw8IDApCit9OworCitzdHJ1Y3QgeHRfY2x1c3Rlcl9tYXRjaF9pbmZvIHsKKwl1X2ludDMyX3QJCXRvdGFsX25vZGVzOworCXVfaW50MzJfdAkJbm9kZV9tYXNrOworCXVfaW50MzJfdAkJaGFzaF9zZWVkOworCXVfaW50MzJfdAkJZmxhZ3M7Cit9OworCisjZW5kaWYgLyogX1hUX0NMVVNURVJfTUFUQ0hfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfY29ubmJ5dGVzLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9jb25uYnl0ZXMuaAppbmRleCBjMDIyYzk4Li41MmJkNjE1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9jb25uYnl0ZXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9jb25uYnl0ZXMuaApAQCAtMSw2ICsxLDggQEAKICNpZm5kZWYgX1hUX0NPTk5CWVRFU19ICiAjZGVmaW5lIF9YVF9DT05OQllURVNfSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogZW51bSB4dF9jb25uYnl0ZXNfd2hhdCB7CiAJWFRfQ09OTkJZVEVTX1BLVFMsCiAJWFRfQ09OTkJZVEVTX0JZVEVTLApAQCAtMTksNyArMjEsNyBAQAogCQlhbGlnbmVkX3U2NCBmcm9tOwkvKiBjb3VudCB0byBiZSBtYXRjaGVkICovCiAJCWFsaWduZWRfdTY0IHRvOwkJLyogY291bnQgdG8gYmUgbWF0Y2hlZCAqLwogCX0gY291bnQ7Ci0JdV9pbnQ4X3Qgd2hhdDsJCS8qIGlwdF9jb25uYnl0ZXNfd2hhdCAqLwotCXVfaW50OF90IGRpcmVjdGlvbjsJLyogaXB0X2Nvbm5ieXRlc19kaXJlY3Rpb24gKi8KKwlfX3U4IHdoYXQ7CQkvKiBpcHRfY29ubmJ5dGVzX3doYXQgKi8KKwlfX3U4IGRpcmVjdGlvbjsJLyogaXB0X2Nvbm5ieXRlc19kaXJlY3Rpb24gKi8KIH07CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm5tYXJrLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9jb25ubWFyay5oCmluZGV4IDM1OWVmODYuLjU3MWUyNjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm5tYXJrLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfY29ubm1hcmsuaApAQCAtMSw2ICsxLDggQEAKICNpZm5kZWYgX1hUX0NPTk5NQVJLX0gKICNkZWZpbmUgX1hUX0NPTk5NQVJLX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIC8qIENvcHlyaWdodCAoQykgMjAwMiwyMDA0IE1BUkEgU3lzdGVtcyBBQiA8aHR0cDovL3d3dy5tYXJhc3lzdGVtcy5jb20+CiAgKiBieSBIZW5yaWsgTm9yZHN0cm9tIDxobm9AbWFyYXN5c3RlbXMuY29tPgogICoKQEAgLTEyLDEyICsxNCwxMiBAQAogCiBzdHJ1Y3QgeHRfY29ubm1hcmtfaW5mbyB7CiAJdW5zaWduZWQgbG9uZyBtYXJrLCBtYXNrOwotCXVfaW50OF90IGludmVydDsKKwlfX3U4IGludmVydDsKIH07CiAKIHN0cnVjdCB4dF9jb25ubWFya19tdGluZm8xIHsKLQl1X2ludDMyX3QgbWFyaywgbWFzazsKLQl1X2ludDhfdCBpbnZlcnQ7CisJX191MzIgbWFyaywgbWFzazsKKwlfX3U4IGludmVydDsKIH07CiAKICNlbmRpZiAvKl9YVF9DT05OTUFSS19IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm50cmFjay5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfY29ubnRyYWNrLmgKaW5kZXggOGY1MzQ1Mi4uMzQzMGM3NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfY29ubnRyYWNrLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfY29ubnRyYWNrLmgKQEAgLTYzLDkgKzYzLDkgQEAKIAl1bnNpZ25lZCBsb25nIGV4cGlyZXNfbWluLCBleHBpcmVzX21heDsKIAogCS8qIEZsYWdzIHdvcmQgKi8KLQl1X2ludDhfdCBmbGFnczsKKwlfX3U4IGZsYWdzOwogCS8qIEludmVyc2UgZmxhZ3MgKi8KLQl1X2ludDhfdCBpbnZmbGFnczsKKwlfX3U4IGludmZsYWdzOwogfTsKIAogc3RydWN0IHh0X2Nvbm50cmFja19tdGluZm8xIHsKQEAgLTczLDEyICs3MywxMiBAQAogCXVuaW9uIG5mX2luZXRfYWRkciBvcmlnZHN0X2FkZHIsIG9yaWdkc3RfbWFzazsKIAl1bmlvbiBuZl9pbmV0X2FkZHIgcmVwbHNyY19hZGRyLCByZXBsc3JjX21hc2s7CiAJdW5pb24gbmZfaW5ldF9hZGRyIHJlcGxkc3RfYWRkciwgcmVwbGRzdF9tYXNrOwotCXVfaW50MzJfdCBleHBpcmVzX21pbiwgZXhwaXJlc19tYXg7Ci0JdV9pbnQxNl90IGw0cHJvdG87CisJX191MzIgZXhwaXJlc19taW4sIGV4cGlyZXNfbWF4OworCV9fdTE2IGw0cHJvdG87CiAJX19iZTE2IG9yaWdzcmNfcG9ydCwgb3JpZ2RzdF9wb3J0OwogCV9fYmUxNiByZXBsc3JjX3BvcnQsIHJlcGxkc3RfcG9ydDsKLQl1X2ludDE2X3QgbWF0Y2hfZmxhZ3MsIGludmVydF9mbGFnczsKLQl1X2ludDhfdCBzdGF0ZV9tYXNrLCBzdGF0dXNfbWFzazsKKwlfX3UxNiBtYXRjaF9mbGFncywgaW52ZXJ0X2ZsYWdzOworCV9fdTggc3RhdGVfbWFzaywgc3RhdHVzX21hc2s7CiB9OwogCiAjZW5kaWYgLypfWFRfQ09OTlRSQUNLX0gqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfZGNjcC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfZGNjcC5oCmluZGV4IGUwMjIxYjkuLmE1NzllMWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2RjY3AuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9kY2NwLmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmIF9YVF9EQ0NQX0hfCiAjZGVmaW5lIF9YVF9EQ0NQX0hfCiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiAjZGVmaW5lIFhUX0RDQ1BfU1JDX1BPUlRTCSAgICAgICAgMHgwMQogI2RlZmluZSBYVF9EQ0NQX0RFU1RfUE9SVFMJICAgICAgICAweDAyCiAjZGVmaW5lIFhUX0RDQ1BfVFlQRQkJCTB4MDQKQEAgLTksMTQgKzExLDE0IEBACiAjZGVmaW5lIFhUX0RDQ1BfVkFMSURfRkxBR1MJCTB4MGYKIAogc3RydWN0IHh0X2RjY3BfaW5mbyB7Ci0JdV9pbnQxNl90IGRwdHNbMl07ICAvKiBNaW4sIE1heCAqLwotCXVfaW50MTZfdCBzcHRzWzJdOyAgLyogTWluLCBNYXggKi8KKwlfX3UxNiBkcHRzWzJdOyAgLyogTWluLCBNYXggKi8KKwlfX3UxNiBzcHRzWzJdOyAgLyogTWluLCBNYXggKi8KIAotCXVfaW50MTZfdCBmbGFnczsKLQl1X2ludDE2X3QgaW52ZmxhZ3M7CisJX191MTYgZmxhZ3M7CisJX191MTYgaW52ZmxhZ3M7CiAKLQl1X2ludDE2X3QgdHlwZW1hc2s7Ci0JdV9pbnQ4X3Qgb3B0aW9uOworCV9fdTE2IHR5cGVtYXNrOworCV9fdTggb3B0aW9uOwogfTsKIAogI2VuZGlmIC8qIF9YVF9EQ0NQX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9kc2NwLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9kc2NwLmgKaW5kZXggZjQ5YmMxYS4uMTVmODkzMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfZHNjcC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2RzY3AuaApAQCAtMTAsMjAgKzEwLDIyIEBACiAjaWZuZGVmIF9YVF9EU0NQX0gKICNkZWZpbmUgX1hUX0RTQ1BfSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogI2RlZmluZSBYVF9EU0NQX01BU0sJMHhmYwkvKiAxMTExMTEwMCAqLwogI2RlZmluZSBYVF9EU0NQX1NISUZUCTIKICNkZWZpbmUgWFRfRFNDUF9NQVgJMHgzZgkvKiAwMDExMTExMSAqLwogCiAvKiBtYXRjaCBpbmZvICovCiBzdHJ1Y3QgeHRfZHNjcF9pbmZvIHsKLQl1X2ludDhfdCBkc2NwOwotCXVfaW50OF90IGludmVydDsKKwlfX3U4IGRzY3A7CisJX191OCBpbnZlcnQ7CiB9OwogCiBzdHJ1Y3QgeHRfdG9zX21hdGNoX2luZm8gewotCXVfaW50OF90IHRvc19tYXNrOwotCXVfaW50OF90IHRvc192YWx1ZTsKLQl1X2ludDhfdCBpbnZlcnQ7CisJX191OCB0b3NfbWFzazsKKwlfX3U4IHRvc192YWx1ZTsKKwlfX3U4IGludmVydDsKIH07CiAKICNlbmRpZiAvKiBfWFRfRFNDUF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9lc3AuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2VzcC5oCmluZGV4IDkzODBmYjFjLi5lZjZmYTQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9lc3AuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9lc3AuaApAQCAtMSwxMCArMSwxMiBAQAogI2lmbmRlZiBfWFRfRVNQX0gKICNkZWZpbmUgX1hUX0VTUF9ICiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiBzdHJ1Y3QgeHRfZXNwCiB7Ci0JdV9pbnQzMl90IHNwaXNbMl07CS8qIFNlY3VyaXR5IFBhcmFtZXRlciBJbmRleCAqLwotCXVfaW50OF90ICBpbnZmbGFnczsJLyogSW52ZXJzZSBmbGFncyAqLworCV9fdTMyIHNwaXNbMl07CS8qIFNlY3VyaXR5IFBhcmFtZXRlciBJbmRleCAqLworCV9fdTggIGludmZsYWdzOwkvKiBJbnZlcnNlIGZsYWdzICovCiB9OwogCiAvKiBWYWx1ZXMgZm9yICJpbnZmbGFncyIgZmllbGQgaW4gc3RydWN0IHh0X2VzcC4gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2hhc2hsaW1pdC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfaGFzaGxpbWl0LmgKaW5kZXggNTFiMThkOC4uYjE5MjViNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfaGFzaGxpbWl0LmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfaGFzaGxpbWl0LmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmIF9YVF9IQVNITElNSVRfSAogI2RlZmluZSBfWFRfSEFTSExJTUlUX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+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+IE5JQ0VfMF9MT0FEKQotCQlncmFuID0gY2FsY19kZWx0YV9mYWlyKHN5c2N0bF9zY2hlZF93YWtldXBfZ3JhbnVsYXJpdHksIHNlKTsKKwlpZiAoc2NoZWRfZmVhdChBU1lNX0dSQU4pKSB7CisJCS8qCisJCSAqIEJ5IHVzaW5nICdzZScgaW5zdGVhZCBvZiAnY3Vycicgd2UgcGVuYWxpemUgbGlnaHQgdGFza3MsIHNvCisJCSAqIHRoZXkgZ2V0IHByZWVtcHRlZCBlYXNpZXIuIFRoYXQgaXMsIGlmICdzZScgPCAnY3VycicgdGhlbgorCQkgKiB0aGUgcmVzdWx0aW5nIGdyYW4gd2lsbCBiZSBsYXJnZXIsIHRoZXJlZm9yZSBwZW5hbGl6aW5nIHRoZQorCQkgKiBsaWdodGVyLCBpZiBvdG9oICdzZScgPiAnY3VycicgdGhlbiB0aGUgcmVzdWx0aW5nIGdyYW4gd2lsbAorCQkgKiBiZSBzbWFsbGVyLCBhZ2FpbiBwZW5hbGl6aW5nIHRoZSBsaWdodGVyIHRhc2suCisJCSAqCisJCSAqIFRoaXMgaXMgZXNwZWNpYWxseSBpbXBvcnRhbnQgZm9yIGJ1ZGRpZXMgd2hlbiB0aGUgbGVmdG1vc3QKKwkJICogdGFzayBpcyBoaWdoZXIgcHJpb3JpdHkgdGhhbiB0aGUgYnVkZHkuCisJCSAqLworCQlpZiAodW5saWtlbHkoc2UtPmxvYWQud2VpZ2h0ICE9IE5JQ0VfMF9MT0FEKSkKKwkJCWdyYW4gPSBjYWxjX2RlbHRhX2ZhaXIoZ3Jhbiwgc2UpOworCX0gZWxzZSB7CisJCWlmICh1bmxpa2VseShjdXJyLT5sb2FkLndlaWdodCAhPSBOSUNFXzBfTE9BRCkpCisJCQlncmFuID0gY2FsY19kZWx0YV9mYWlyKGdyYW4sIGN1cnIpOworCX0KIAogCXJldHVybiBncmFuOwogfQpAQCAtMTM1MCw3ICsxMzk3LDcgQEAKIAlpZiAodmRpZmYgPD0gMCkKIAkJcmV0dXJuIC0xOwogCi0JZ3JhbiA9IHdha2V1cF9ncmFuKGN1cnIpOworCWdyYW4gPSB3YWtldXBfZ3JhbihjdXJyLCBzZSk7CiAJaWYgKHZkaWZmID4gZ3JhbikKIAkJcmV0dXJuIDE7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZF9mZWF0dXJlcy5oIGIva2VybmVsL3NjaGVkX2ZlYXR1cmVzLmgKaW5kZXggZGE1ZDkzYi4uNzZmNjE3NSAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkX2ZlYXR1cmVzLmgKKysrIGIva2VybmVsL3NjaGVkX2ZlYXR1cmVzLmgKQEAgLTEsNSArMSw2IEBACiBTQ0hFRF9GRUFUKE5FV19GQUlSX1NMRUVQRVJTLCAxKQotU0NIRURfRkVBVChOT1JNQUxJWkVEX1NMRUVQRVIsIDEpCitTQ0hFRF9GRUFUKE5PUk1BTElaRURfU0xFRVBFUiwgMCkKK1NDSEVEX0ZFQVQoQURBUFRJVkVfR1JBTiwgMSkKIFNDSEVEX0ZFQVQoV0FLRVVQX1BSRUVNUFQsIDEpCiBTQ0hFRF9GRUFUKFNUQVJUX0RFQklULCAxKQogU0NIRURfRkVBVChBRkZJTkVfV0FLRVVQUywgMSkKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZF9ydC5jIGIva2VybmVsL3NjaGVkX3J0LmMKaW5kZXggYmFjMTA2MS4uYzc5ZGM3ODQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZF9ydC5jCisrKyBiL2tlcm5lbC9zY2hlZF9ydC5jCkBAIC0zLDYgKzMsNDAgQEAKICAqIHBvbGljaWVzKQogICovCiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHRhc2tfc3RydWN0ICpydF90YXNrX29mKHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlKQoreworCXJldHVybiBjb250YWluZXJfb2YocnRfc2UsIHN0cnVjdCB0YXNrX3N0cnVjdCwgcnQpOworfQorCisjaWZkZWYgQ09ORklHX1JUX0dST1VQX1NDSEVECisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHJxICpycV9vZl9ydF9ycShzdHJ1Y3QgcnRfcnEgKnJ0X3JxKQoreworCXJldHVybiBydF9ycS0+cnE7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHJ0X3JxICpydF9ycV9vZl9zZShzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSkKK3sKKwlyZXR1cm4gcnRfc2UtPnJ0X3JxOworfQorCisjZWxzZSAvKiBDT05GSUdfUlRfR1JPVVBfU0NIRUQgKi8KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcnEgKnJxX29mX3J0X3JxKHN0cnVjdCBydF9ycSAqcnRfcnEpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihydF9ycSwgc3RydWN0IHJxLCBydCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHJ0X3JxICpydF9ycV9vZl9zZShzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSkKK3sKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAgPSBydF90YXNrX29mKHJ0X3NlKTsKKwlzdHJ1Y3QgcnEgKnJxID0gdGFza19ycShwKTsKKworCXJldHVybiAmcnEtPnJ0OworfQorCisjZW5kaWYgLyogQ09ORklHX1JUX0dST1VQX1NDSEVEICovCisKICNpZmRlZiBDT05GSUdfU01QCiAKIHN0YXRpYyBpbmxpbmUgaW50IHJ0X292ZXJsb2FkZWQoc3RydWN0IHJxICpycSkKQEAgLTM3LDI1ICs3MSw2OSBAQAogCWNwdW1hc2tfY2xlYXJfY3B1KHJxLT5jcHUsIHJxLT5yZC0+cnRvX21hc2spOwogfQogCi1zdGF0aWMgdm9pZCB1cGRhdGVfcnRfbWlncmF0aW9uKHN0cnVjdCBycSAqcnEpCitzdGF0aWMgdm9pZCB1cGRhdGVfcnRfbWlncmF0aW9uKHN0cnVjdCBydF9ycSAqcnRfcnEpCiB7Ci0JaWYgKHJxLT5ydC5ydF9ucl9taWdyYXRvcnkgJiYgKHJxLT5ydC5ydF9ucl9ydW5uaW5nID4gMSkpIHsKLQkJaWYgKCFycS0+cnQub3ZlcmxvYWRlZCkgewotCQkJcnRfc2V0X292ZXJsb2FkKHJxKTsKLQkJCXJxLT5ydC5vdmVybG9hZGVkID0gMTsKKwlpZiAocnRfcnEtPnJ0X25yX21pZ3JhdG9yeSAmJiAocnRfcnEtPnJ0X25yX3J1bm5pbmcgPiAxKSkgeworCQlpZiAoIXJ0X3JxLT5vdmVybG9hZGVkKSB7CisJCQlydF9zZXRfb3ZlcmxvYWQocnFfb2ZfcnRfcnEocnRfcnEpKTsKKwkJCXJ0X3JxLT5vdmVybG9hZGVkID0gMTsKIAkJfQotCX0gZWxzZSBpZiAocnEtPnJ0Lm92ZXJsb2FkZWQpIHsKLQkJcnRfY2xlYXJfb3ZlcmxvYWQocnEpOwotCQlycS0+cnQub3ZlcmxvYWRlZCA9IDA7CisJfSBlbHNlIGlmIChydF9ycS0+b3ZlcmxvYWRlZCkgeworCQlydF9jbGVhcl9vdmVybG9hZChycV9vZl9ydF9ycShydF9ycSkpOworCQlydF9ycS0+b3ZlcmxvYWRlZCA9IDA7CiAJfQogfQotI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnJ0X3Rhc2tfb2Yoc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UpCitzdGF0aWMgdm9pZCBpbmNfcnRfbWlncmF0aW9uKHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlLCBzdHJ1Y3QgcnRfcnEgKnJ0X3JxKQogewotCXJldHVybiBjb250YWluZXJfb2YocnRfc2UsIHN0cnVjdCB0YXNrX3N0cnVjdCwgcnQpOworCWlmIChydF9zZS0+bnJfY3B1c19hbGxvd2VkID4gMSkKKwkJcnRfcnEtPnJ0X25yX21pZ3JhdG9yeSsrOworCisJdXBkYXRlX3J0X21pZ3JhdGlvbihydF9ycSk7CiB9CiAKK3N0YXRpYyB2b2lkIGRlY19ydF9taWdyYXRpb24oc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UsIHN0cnVjdCBydF9ycSAqcnRfcnEpCit7CisJaWYgKHJ0X3NlLT5ucl9jcHVzX2FsbG93ZWQgPiAxKQorCQlydF9ycS0+cnRfbnJfbWlncmF0b3J5LS07CisKKwl1cGRhdGVfcnRfbWlncmF0aW9uKHJ0X3JxKTsKK30KKworc3RhdGljIHZvaWQgZW5xdWV1ZV9wdXNoYWJsZV90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKK3sKKwlwbGlzdF9kZWwoJnAtPnB1c2hhYmxlX3Rhc2tzLCAmcnEtPnJ0LnB1c2hhYmxlX3Rhc2tzKTsKKwlwbGlzdF9ub2RlX2luaXQoJnAtPnB1c2hhYmxlX3Rhc2tzLCBwLT5wcmlvKTsKKwlwbGlzdF9hZGQoJnAtPnB1c2hhYmxlX3Rhc2tzLCAmcnEtPnJ0LnB1c2hhYmxlX3Rhc2tzKTsKK30KKworc3RhdGljIHZvaWQgZGVxdWV1ZV9wdXNoYWJsZV90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKK3sKKwlwbGlzdF9kZWwoJnAtPnB1c2hhYmxlX3Rhc2tzLCAmcnEtPnJ0LnB1c2hhYmxlX3Rhc2tzKTsKK30KKworI2Vsc2UKKworc3RhdGljIGlubGluZSB2b2lkIGVucXVldWVfcHVzaGFibGVfdGFzayhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkZXF1ZXVlX3B1c2hhYmxlX3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKQoreworfQorCitzdGF0aWMgaW5saW5lCit2b2lkIGluY19ydF9taWdyYXRpb24oc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UsIHN0cnVjdCBydF9ycSAqcnRfcnEpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUKK3ZvaWQgZGVjX3J0X21pZ3JhdGlvbihzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSwgc3RydWN0IHJ0X3JxICpydF9ycSkKK3sKK30KKworI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KKwogc3RhdGljIGlubGluZSBpbnQgb25fcnRfcnEoc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UpCiB7CiAJcmV0dXJuICFsaXN0X2VtcHR5KCZydF9zZS0+cnVuX2xpc3QpOwpAQCAtNzksMTYgKzE1Nyw2IEBACiAjZGVmaW5lIGZvcl9lYWNoX2xlYWZfcnRfcnEocnRfcnEsIHJxKSBcCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocnRfcnEsICZycS0+bGVhZl9ydF9ycV9saXN0LCBsZWFmX3J0X3JxX2xpc3QpCiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHJxICpycV9vZl9ydF9ycShzdHJ1Y3QgcnRfcnEgKnJ0X3JxKQotewotCXJldHVybiBydF9ycS0+cnE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHJ0X3JxICpydF9ycV9vZl9zZShzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSkKLXsKLQlyZXR1cm4gcnRfc2UtPnJ0X3JxOwotfQotCiAjZGVmaW5lIGZvcl9lYWNoX3NjaGVkX3J0X2VudGl0eShydF9zZSkgXAogCWZvciAoOyBydF9zZTsgcnRfc2UgPSBydF9zZS0+cGFyZW50KQogCkBAIC0xMDgsNyArMTc2LDcgQEAKIAlpZiAocnRfcnEtPnJ0X25yX3J1bm5pbmcpIHsKIAkJaWYgKHJ0X3NlICYmICFvbl9ydF9ycShydF9zZSkpCiAJCQllbnF1ZXVlX3J0X2VudGl0eShydF9zZSk7Ci0JCWlmIChydF9ycS0+aGlnaGVzdF9wcmlvIDwgY3Vyci0+cHJpbykKKwkJaWYgKHJ0X3JxLT5oaWdoZXN0X3ByaW8uY3VyciA8IGN1cnItPnByaW8pCiAJCQlyZXNjaGVkX3Rhc2soY3Vycik7CiAJfQogfQpAQCAtMTc2LDE5ICsyNDQsNiBAQAogI2RlZmluZSBmb3JfZWFjaF9sZWFmX3J0X3JxKHJ0X3JxLCBycSkgXAogCWZvciAocnRfcnEgPSAmcnEtPnJ0OyBydF9ycTsgcnRfcnEgPSBOVUxMKQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBycSAqcnFfb2ZfcnRfcnEoc3RydWN0IHJ0X3JxICpydF9ycSkKLXsKLQlyZXR1cm4gY29udGFpbmVyX29mKHJ0X3JxLCBzdHJ1Y3QgcnEsIHJ0KTsKLX0KLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgcnRfcnEgKnJ0X3JxX29mX3NlKHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlKQotewotCXN0cnVjdCB0YXNrX3N0cnVjdCAqcCA9IHJ0X3Rhc2tfb2YocnRfc2UpOwotCXN0cnVjdCBycSAqcnEgPSB0YXNrX3JxKHApOwotCi0JcmV0dXJuICZycS0+cnQ7Ci19Ci0KICNkZWZpbmUgZm9yX2VhY2hfc2NoZWRfcnRfZW50aXR5KHJ0X3NlKSBcCiAJZm9yICg7IHJ0X3NlOyBydF9zZSA9IE5VTEwpCiAKQEAgLTQ3Myw3ICs1MjgsNyBAQAogCXN0cnVjdCBydF9ycSAqcnRfcnEgPSBncm91cF9ydF9ycShydF9zZSk7CiAKIAlpZiAocnRfcnEpCi0JCXJldHVybiBydF9ycS0+aGlnaGVzdF9wcmlvOworCQlyZXR1cm4gcnRfcnEtPmhpZ2hlc3RfcHJpby5jdXJyOwogI2VuZGlmCiAKIAlyZXR1cm4gcnRfdGFza19vZihydF9zZSktPnByaW87CkBAIC01NDcsOTEgKzYwMiwxNzQgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbmxpbmUKLXZvaWQgaW5jX3J0X3Rhc2tzKHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlLCBzdHJ1Y3QgcnRfcnEgKnJ0X3JxKQorI2lmIGRlZmluZWQgQ09ORklHX1NNUAorCitzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpwaWNrX25leHRfaGlnaGVzdF90YXNrX3J0KHN0cnVjdCBycSAqcnEsIGludCBjcHUpOworCitzdGF0aWMgaW5saW5lIGludCBuZXh0X3ByaW8oc3RydWN0IHJxICpycSkKIHsKLQlXQVJOX09OKCFydF9wcmlvKHJ0X3NlX3ByaW8ocnRfc2UpKSk7Ci0JcnRfcnEtPnJ0X25yX3J1bm5pbmcrKzsKLSNpZiBkZWZpbmVkIENPTkZJR19TTVAgfHwgZGVmaW5lZCBDT05GSUdfUlRfR1JPVVBfU0NIRUQKLQlpZiAocnRfc2VfcHJpbyhydF9zZSkgPCBydF9ycS0+aGlnaGVzdF9wcmlvKSB7Ci0jaWZkZWYgQ09ORklHX1NNUAotCQlzdHJ1Y3QgcnEgKnJxID0gcnFfb2ZfcnRfcnEocnRfcnEpOwotI2VuZGlmCisJc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0ID0gcGlja19uZXh0X2hpZ2hlc3RfdGFza19ydChycSwgcnEtPmNwdSk7CiAKLQkJcnRfcnEtPmhpZ2hlc3RfcHJpbyA9IHJ0X3NlX3ByaW8ocnRfc2UpOwotI2lmZGVmIENPTkZJR19TTVAKKwlpZiAobmV4dCAmJiBydF9wcmlvKG5leHQtPnByaW8pKQorCQlyZXR1cm4gbmV4dC0+cHJpbzsKKwllbHNlCisJCXJldHVybiBNQVhfUlRfUFJJTzsKK30KKworc3RhdGljIHZvaWQKK2luY19ydF9wcmlvX3NtcChzdHJ1Y3QgcnRfcnEgKnJ0X3JxLCBpbnQgcHJpbywgaW50IHByZXZfcHJpbykKK3sKKwlzdHJ1Y3QgcnEgKnJxID0gcnFfb2ZfcnRfcnEocnRfcnEpOworCisJaWYgKHByaW8gPCBwcmV2X3ByaW8pIHsKKworCQkvKgorCQkgKiBJZiB0aGUgbmV3IHRhc2sgaXMgaGlnaGVyIGluIHByaW9yaXR5IHRoYW4gYW55dGhpbmcgb24gdGhlCisJCSAqIHJ1bi1xdWV1ZSwgd2Uga25vdyB0aGF0IHRoZSBwcmV2aW91cyBoaWdoIGJlY29tZXMgb3VyCisJCSAqIG5leHQtaGlnaGVzdC4KKwkJICovCisJCXJ0X3JxLT5oaWdoZXN0X3ByaW8ubmV4dCA9IHByZXZfcHJpbzsKKwogCQlpZiAocnEtPm9ubGluZSkKLQkJCWNwdXByaV9zZXQoJnJxLT5yZC0+Y3B1cHJpLCBycS0+Y3B1LAotCQkJCSAgIHJ0X3NlX3ByaW8ocnRfc2UpKTsKLSNlbmRpZgotCX0KLSNlbmRpZgotI2lmZGVmIENPTkZJR19TTVAKLQlpZiAocnRfc2UtPm5yX2NwdXNfYWxsb3dlZCA+IDEpIHsKLQkJc3RydWN0IHJxICpycSA9IHJxX29mX3J0X3JxKHJ0X3JxKTsKKwkJCWNwdXByaV9zZXQoJnJxLT5yZC0+Y3B1cHJpLCBycS0+Y3B1LCBwcmlvKTsKIAotCQlycS0+cnQucnRfbnJfbWlncmF0b3J5Kys7Ci0JfQorCX0gZWxzZSBpZiAocHJpbyA9PSBydF9ycS0+aGlnaGVzdF9wcmlvLmN1cnIpCisJCS8qCisJCSAqIElmIHRoZSBuZXh0IHRhc2sgaXMgZXF1YWwgaW4gcHJpb3JpdHkgdG8gdGhlIGhpZ2hlc3Qgb24KKwkJICogdGhlIHJ1bi1xdWV1ZSwgdGhlbiB3ZSBpbXBsaWNpdGx5IGtub3cgdGhhdCB0aGUgbmV4dCBoaWdoZXN0CisJCSAqIHRhc2sgY2Fubm90IGJlIGFueSBsb3dlciB0aGFuIGN1cnJlbnQKKwkJICovCisJCXJ0X3JxLT5oaWdoZXN0X3ByaW8ubmV4dCA9IHByaW87CisJZWxzZSBpZiAocHJpbyA8IHJ0X3JxLT5oaWdoZXN0X3ByaW8ubmV4dCkKKwkJLyoKKwkJICogT3RoZXJ3aXNlLCB3ZSBuZWVkIHRvIHJlY29tcHV0ZSBuZXh0LWhpZ2hlc3QKKwkJICovCisJCXJ0X3JxLT5oaWdoZXN0X3ByaW8ubmV4dCA9IG5leHRfcHJpbyhycSk7Cit9CiAKLQl1cGRhdGVfcnRfbWlncmF0aW9uKHJxX29mX3J0X3JxKHJ0X3JxKSk7Ci0jZW5kaWYKK3N0YXRpYyB2b2lkCitkZWNfcnRfcHJpb19zbXAoc3RydWN0IHJ0X3JxICpydF9ycSwgaW50IHByaW8sIGludCBwcmV2X3ByaW8pCit7CisJc3RydWN0IHJxICpycSA9IHJxX29mX3J0X3JxKHJ0X3JxKTsKKworCWlmIChydF9ycS0+cnRfbnJfcnVubmluZyAmJiAocHJpbyA8PSBydF9ycS0+aGlnaGVzdF9wcmlvLm5leHQpKQorCQlydF9ycS0+aGlnaGVzdF9wcmlvLm5leHQgPSBuZXh0X3ByaW8ocnEpOworCisJaWYgKHJxLT5vbmxpbmUgJiYgcnRfcnEtPmhpZ2hlc3RfcHJpby5jdXJyICE9IHByZXZfcHJpbykKKwkJY3B1cHJpX3NldCgmcnEtPnJkLT5jcHVwcmksIHJxLT5jcHUsIHJ0X3JxLT5oaWdoZXN0X3ByaW8uY3Vycik7Cit9CisKKyNlbHNlIC8qIENPTkZJR19TTVAgKi8KKworc3RhdGljIGlubGluZQordm9pZCBpbmNfcnRfcHJpb19zbXAoc3RydWN0IHJ0X3JxICpydF9ycSwgaW50IHByaW8sIGludCBwcmV2X3ByaW8pIHt9CitzdGF0aWMgaW5saW5lCit2b2lkIGRlY19ydF9wcmlvX3NtcChzdHJ1Y3QgcnRfcnEgKnJ0X3JxLCBpbnQgcHJpbywgaW50IHByZXZfcHJpbykge30KKworI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KKworI2lmIGRlZmluZWQgQ09ORklHX1NNUCB8fCBkZWZpbmVkIENPTkZJR19SVF9HUk9VUF9TQ0hFRAorc3RhdGljIHZvaWQKK2luY19ydF9wcmlvKHN0cnVjdCBydF9ycSAqcnRfcnEsIGludCBwcmlvKQoreworCWludCBwcmV2X3ByaW8gPSBydF9ycS0+aGlnaGVzdF9wcmlvLmN1cnI7CisKKwlpZiAocHJpbyA8IHByZXZfcHJpbykKKwkJcnRfcnEtPmhpZ2hlc3RfcHJpby5jdXJyID0gcHJpbzsKKworCWluY19ydF9wcmlvX3NtcChydF9ycSwgcHJpbywgcHJldl9wcmlvKTsKK30KKworc3RhdGljIHZvaWQKK2RlY19ydF9wcmlvKHN0cnVjdCBydF9ycSAqcnRfcnEsIGludCBwcmlvKQoreworCWludCBwcmV2X3ByaW8gPSBydF9ycS0+aGlnaGVzdF9wcmlvLmN1cnI7CisKKwlpZiAocnRfcnEtPnJ0X25yX3J1bm5pbmcpIHsKKworCQlXQVJOX09OKHByaW8gPCBwcmV2X3ByaW8pOworCisJCS8qCisJCSAqIFRoaXMgbWF5IGhhdmUgYmVlbiBvdXIgaGlnaGVzdCB0YXNrLCBhbmQgdGhlcmVmb3JlCisJCSAqIHdlIG1heSBoYXZlIHNvbWUgcmVjb21wdXRhdGlvbiB0byBkbworCQkgKi8KKwkJaWYgKHByaW8gPT0gcHJldl9wcmlvKSB7CisJCQlzdHJ1Y3QgcnRfcHJpb19hcnJheSAqYXJyYXkgPSAmcnRfcnEtPmFjdGl2ZTsKKworCQkJcnRfcnEtPmhpZ2hlc3RfcHJpby5jdXJyID0KKwkJCQlzY2hlZF9maW5kX2ZpcnN0X2JpdChhcnJheS0+Yml0bWFwKTsKKwkJfQorCisJfSBlbHNlCisJCXJ0X3JxLT5oaWdoZXN0X3ByaW8uY3VyciA9IE1BWF9SVF9QUklPOworCisJZGVjX3J0X3ByaW9fc21wKHJ0X3JxLCBwcmlvLCBwcmV2X3ByaW8pOworfQorCisjZWxzZQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW5jX3J0X3ByaW8oc3RydWN0IHJ0X3JxICpydF9ycSwgaW50IHByaW8pIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgZGVjX3J0X3ByaW8oc3RydWN0IHJ0X3JxICpydF9ycSwgaW50IHByaW8pIHt9CisKKyNlbmRpZiAvKiBDT05GSUdfU01QIHx8IENPTkZJR19SVF9HUk9VUF9TQ0hFRCAqLworCiAjaWZkZWYgQ09ORklHX1JUX0dST1VQX1NDSEVECisKK3N0YXRpYyB2b2lkCitpbmNfcnRfZ3JvdXAoc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UsIHN0cnVjdCBydF9ycSAqcnRfcnEpCit7CiAJaWYgKHJ0X3NlX2Jvb3N0ZWQocnRfc2UpKQogCQlydF9ycS0+cnRfbnJfYm9vc3RlZCsrOwogCiAJaWYgKHJ0X3JxLT50ZykKIAkJc3RhcnRfcnRfYmFuZHdpZHRoKCZydF9ycS0+dGctPnJ0X2JhbmR3aWR0aCk7Ci0jZWxzZQorfQorCitzdGF0aWMgdm9pZAorZGVjX3J0X2dyb3VwKHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlLCBzdHJ1Y3QgcnRfcnEgKnJ0X3JxKQoreworCWlmIChydF9zZV9ib29zdGVkKHJ0X3NlKSkKKwkJcnRfcnEtPnJ0X25yX2Jvb3N0ZWQtLTsKKworCVdBUk5fT04oIXJ0X3JxLT5ydF9ucl9ydW5uaW5nICYmIHJ0X3JxLT5ydF9ucl9ib29zdGVkKTsKK30KKworI2Vsc2UgLyogQ09ORklHX1JUX0dST1VQX1NDSEVEICovCisKK3N0YXRpYyB2b2lkCitpbmNfcnRfZ3JvdXAoc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UsIHN0cnVjdCBydF9ycSAqcnRfcnEpCit7CiAJc3RhcnRfcnRfYmFuZHdpZHRoKCZkZWZfcnRfYmFuZHdpZHRoKTsKLSNlbmRpZgorfQorCitzdGF0aWMgaW5saW5lCit2b2lkIGRlY19ydF9ncm91cChzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSwgc3RydWN0IHJ0X3JxICpydF9ycSkge30KKworI2VuZGlmIC8qIENPTkZJR19SVF9HUk9VUF9TQ0hFRCAqLworCitzdGF0aWMgaW5saW5lCit2b2lkIGluY19ydF90YXNrcyhzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSwgc3RydWN0IHJ0X3JxICpydF9ycSkKK3sKKwlpbnQgcHJpbyA9IHJ0X3NlX3ByaW8ocnRfc2UpOworCisJV0FSTl9PTighcnRfcHJpbyhwcmlvKSk7CisJcnRfcnEtPnJ0X25yX3J1bm5pbmcrKzsKKworCWluY19ydF9wcmlvKHJ0X3JxLCBwcmlvKTsKKwlpbmNfcnRfbWlncmF0aW9uKHJ0X3NlLCBydF9ycSk7CisJaW5jX3J0X2dyb3VwKHJ0X3NlLCBydF9ycSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUKIHZvaWQgZGVjX3J0X3Rhc2tzKHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlLCBzdHJ1Y3QgcnRfcnEgKnJ0X3JxKQogewotI2lmZGVmIENPTkZJR19TTVAKLQlpbnQgaGlnaGVzdF9wcmlvID0gcnRfcnEtPmhpZ2hlc3RfcHJpbzsKLSNlbmRpZgotCiAJV0FSTl9PTighcnRfcHJpbyhydF9zZV9wcmlvKHJ0X3NlKSkpOwogCVdBUk5fT04oIXJ0X3JxLT5ydF9ucl9ydW5uaW5nKTsKIAlydF9ycS0+cnRfbnJfcnVubmluZy0tOwotI2lmIGRlZmluZWQgQ09ORklHX1NNUCB8fCBkZWZpbmVkIENPTkZJR19SVF9HUk9VUF9TQ0hFRAotCWlmIChydF9ycS0+cnRfbnJfcnVubmluZykgewotCQlzdHJ1Y3QgcnRfcHJpb19hcnJheSAqYXJyYXk7CiAKLQkJV0FSTl9PTihydF9zZV9wcmlvKHJ0X3NlKSA8IHJ0X3JxLT5oaWdoZXN0X3ByaW8pOwotCQlpZiAocnRfc2VfcHJpbyhydF9zZSkgPT0gcnRfcnEtPmhpZ2hlc3RfcHJpbykgewotCQkJLyogcmVjYWxjdWxhdGUgKi8KLQkJCWFycmF5ID0gJnJ0X3JxLT5hY3RpdmU7Ci0JCQlydF9ycS0+aGlnaGVzdF9wcmlvID0KLQkJCQlzY2hlZF9maW5kX2ZpcnN0X2JpdChhcnJheS0+Yml0bWFwKTsKLQkJfSAvKiBvdGhlcndpc2UgbGVhdmUgcnEtPmhpZ2hlc3QgcHJpbyBhbG9uZSAqLwotCX0gZWxzZQotCQlydF9ycS0+aGlnaGVzdF9wcmlvID0gTUFYX1JUX1BSSU87Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfU01QCi0JaWYgKHJ0X3NlLT5ucl9jcHVzX2FsbG93ZWQgPiAxKSB7Ci0JCXN0cnVjdCBycSAqcnEgPSBycV9vZl9ydF9ycShydF9ycSk7Ci0JCXJxLT5ydC5ydF9ucl9taWdyYXRvcnktLTsKLQl9Ci0KLQlpZiAocnRfcnEtPmhpZ2hlc3RfcHJpbyAhPSBoaWdoZXN0X3ByaW8pIHsKLQkJc3RydWN0IHJxICpycSA9IHJxX29mX3J0X3JxKHJ0X3JxKTsKLQotCQlpZiAocnEtPm9ubGluZSkKLQkJCWNwdXByaV9zZXQoJnJxLT5yZC0+Y3B1cHJpLCBycS0+Y3B1LAotCQkJCSAgIHJ0X3JxLT5oaWdoZXN0X3ByaW8pOwotCX0KLQotCXVwZGF0ZV9ydF9taWdyYXRpb24ocnFfb2ZfcnRfcnEocnRfcnEpKTsKLSNlbmRpZiAvKiBDT05GSUdfU01QICovCi0jaWZkZWYgQ09ORklHX1JUX0dST1VQX1NDSEVECi0JaWYgKHJ0X3NlX2Jvb3N0ZWQocnRfc2UpKQotCQlydF9ycS0+cnRfbnJfYm9vc3RlZC0tOwotCi0JV0FSTl9PTighcnRfcnEtPnJ0X25yX3J1bm5pbmcgJiYgcnRfcnEtPnJ0X25yX2Jvb3N0ZWQpOwotI2VuZGlmCisJZGVjX3J0X3ByaW8ocnRfcnEsIHJ0X3NlX3ByaW8ocnRfc2UpKTsKKwlkZWNfcnRfbWlncmF0aW9uKHJ0X3NlLCBydF9ycSk7CisJZGVjX3J0X2dyb3VwKHJ0X3NlLCBydF9ycSk7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZW5xdWV1ZV9ydF9lbnRpdHkoc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UpCkBAIC03MTgsNiArODU2LDkgQEAKIAogCWVucXVldWVfcnRfZW50aXR5KHJ0X3NlKTsKIAorCWlmICghdGFza19jdXJyZW50KHJxLCBwKSAmJiBwLT5ydC5ucl9jcHVzX2FsbG93ZWQgPiAxKQorCQllbnF1ZXVlX3B1c2hhYmxlX3Rhc2socnEsIHApOworCiAJaW5jX2NwdV9sb2FkKHJxLCBwLT5zZS5sb2FkLndlaWdodCk7CiB9CiAKQEAgLTcyOCw2ICs4NjksOCBAQAogCXVwZGF0ZV9jdXJyX3J0KHJxKTsKIAlkZXF1ZXVlX3J0X2VudGl0eShydF9zZSk7CiAKKwlkZXF1ZXVlX3B1c2hhYmxlX3Rhc2socnEsIHApOworCiAJZGVjX2NwdV9sb2FkKHJxLCBwLT5zZS5sb2FkLndlaWdodCk7CiB9CiAKQEAgLTg3OCw3ICsxMDIxLDcgQEAKIAlyZXR1cm4gbmV4dDsKIH0KIAotc3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqcGlja19uZXh0X3Rhc2tfcnQoc3RydWN0IHJxICpycSkKK3N0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKl9waWNrX25leHRfdGFza19ydChzdHJ1Y3QgcnEgKnJxKQogewogCXN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlOwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqcDsKQEAgLTkwMCw2ICsxMDQzLDE4IEBACiAKIAlwID0gcnRfdGFza19vZihydF9zZSk7CiAJcC0+c2UuZXhlY19zdGFydCA9IHJxLT5jbG9jazsKKworCXJldHVybiBwOworfQorCitzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpwaWNrX25leHRfdGFza19ydChzdHJ1Y3QgcnEgKnJxKQoreworCXN0cnVjdCB0YXNrX3N0cnVjdCAqcCA9IF9waWNrX25leHRfdGFza19ydChycSk7CisKKwkvKiBUaGUgcnVubmluZyB0YXNrIGlzIG5ldmVyIGVsaWdpYmxlIGZvciBwdXNoaW5nICovCisJaWYgKHApCisJCWRlcXVldWVfcHVzaGFibGVfdGFzayhycSwgcCk7CisKIAlyZXR1cm4gcDsKIH0KIApAQCAtOTA3LDYgKzEwNjIsMTMgQEAKIHsKIAl1cGRhdGVfY3Vycl9ydChycSk7CiAJcC0+c2UuZXhlY19zdGFydCA9IDA7CisKKwkvKgorCSAqIFRoZSBwcmV2aW91cyB0YXNrIG5lZWRzIHRvIGJlIG1hZGUgZWxpZ2libGUgZm9yIHB1c2hpbmcKKwkgKiBpZiBpdCBpcyBzdGlsbCBhY3RpdmUKKwkgKi8KKwlpZiAocC0+c2Uub25fcnEgJiYgcC0+cnQubnJfY3B1c19hbGxvd2VkID4gMSkKKwkJZW5xdWV1ZV9wdXNoYWJsZV90YXNrKHJxLCBwKTsKIH0KIAogI2lmZGVmIENPTkZJR19TTVAKQEAgLTEwNzIsNyArMTIzNCw3IEBACiAJCX0KIAogCQkvKiBJZiB0aGlzIHJxIGlzIHN0aWxsIHN1aXRhYmxlIHVzZSBpdC4gKi8KLQkJaWYgKGxvd2VzdF9ycS0+cnQuaGlnaGVzdF9wcmlvID4gdGFzay0+cHJpbykKKwkJaWYgKGxvd2VzdF9ycS0+cnQuaGlnaGVzdF9wcmlvLmN1cnIgPiB0YXNrLT5wcmlvKQogCQkJYnJlYWs7CiAKIAkJLyogdHJ5IGFnYWluICovCkBAIC0xMDgzLDYgKzEyNDUsMzEgQEAKIAlyZXR1cm4gbG93ZXN0X3JxOwogfQogCitzdGF0aWMgaW5saW5lIGludCBoYXNfcHVzaGFibGVfdGFza3Moc3RydWN0IHJxICpycSkKK3sKKwlyZXR1cm4gIXBsaXN0X2hlYWRfZW1wdHkoJnJxLT5ydC5wdXNoYWJsZV90YXNrcyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBpY2tfbmV4dF9wdXNoYWJsZV90YXNrKHN0cnVjdCBycSAqcnEpCit7CisJc3RydWN0IHRhc2tfc3RydWN0ICpwOworCisJaWYgKCFoYXNfcHVzaGFibGVfdGFza3MocnEpKQorCQlyZXR1cm4gTlVMTDsKKworCXAgPSBwbGlzdF9maXJzdF9lbnRyeSgmcnEtPnJ0LnB1c2hhYmxlX3Rhc2tzLAorCQkJICAgICAgc3RydWN0IHRhc2tfc3RydWN0LCBwdXNoYWJsZV90YXNrcyk7CisKKwlCVUdfT04ocnEtPmNwdSAhPSB0YXNrX2NwdShwKSk7CisJQlVHX09OKHRhc2tfY3VycmVudChycSwgcCkpOworCUJVR19PTihwLT5ydC5ucl9jcHVzX2FsbG93ZWQgPD0gMSk7CisKKwlCVUdfT04oIXAtPnNlLm9uX3JxKTsKKwlCVUdfT04oIXJ0X3Rhc2socCkpOworCisJcmV0dXJuIHA7Cit9CisKIC8qCiAgKiBJZiB0aGUgY3VycmVudCBDUFUgaGFzIG1vcmUgdGhhbiBvbmUgUlQgdGFzaywgc2VlIGlmIHRoZSBub24KICAqIHJ1bm5pbmcgdGFzayBjYW4gbWlncmF0ZSBvdmVyIHRvIGEgQ1BVIHRoYXQgaXMgcnVubmluZyBhIHRhc2sKQEAgLTEwOTIsMTMgKzEyNzksMTEgQEAKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHRfdGFzazsKIAlzdHJ1Y3QgcnEgKmxvd2VzdF9ycTsKLQlpbnQgcmV0ID0gMDsKLQlpbnQgcGFyYW5vaWQgPSBSVF9NQVhfVFJJRVM7CiAKIAlpZiAoIXJxLT5ydC5vdmVybG9hZGVkKQogCQlyZXR1cm4gMDsKIAotCW5leHRfdGFzayA9IHBpY2tfbmV4dF9oaWdoZXN0X3Rhc2tfcnQocnEsIC0xKTsKKwluZXh0X3Rhc2sgPSBwaWNrX25leHRfcHVzaGFibGVfdGFzayhycSk7CiAJaWYgKCFuZXh0X3Rhc2spCiAJCXJldHVybiAwOwogCkBAIC0xMTI3LDE2ICsxMzEyLDM0IEBACiAJCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKIAkJLyoKIAkJICogZmluZCBsb2NrX2xvd2VzdF9ycSByZWxlYXNlcyBycS0+bG9jawotCQkgKiBzbyBpdCBpcyBwb3NzaWJsZSB0aGF0IG5leHRfdGFzayBoYXMgY2hhbmdlZC4KLQkJICogSWYgaXQgaGFzLCB0aGVuIHRyeSBhZ2Fpbi4KKwkJICogc28gaXQgaXMgcG9zc2libGUgdGhhdCBuZXh0X3Rhc2sgaGFzIG1pZ3JhdGVkLgorCQkgKgorCQkgKiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSB0YXNrIGlzIHN0aWxsIG9uIHRoZSBzYW1lCisJCSAqIHJ1bi1xdWV1ZSBhbmQgaXMgYWxzbyBzdGlsbCB0aGUgbmV4dCB0YXNrIGVsaWdpYmxlIGZvcgorCQkgKiBwdXNoaW5nLgogCQkgKi8KLQkJdGFzayA9IHBpY2tfbmV4dF9oaWdoZXN0X3Rhc2tfcnQocnEsIC0xKTsKLQkJaWYgKHVubGlrZWx5KHRhc2sgIT0gbmV4dF90YXNrKSAmJiB0YXNrICYmIHBhcmFub2lkLS0pIHsKLQkJCXB1dF90YXNrX3N0cnVjdChuZXh0X3Rhc2spOwotCQkJbmV4dF90YXNrID0gdGFzazsKLQkJCWdvdG8gcmV0cnk7CisJCXRhc2sgPSBwaWNrX25leHRfcHVzaGFibGVfdGFzayhycSk7CisJCWlmICh0YXNrX2NwdShuZXh0X3Rhc2spID09IHJxLT5jcHUgJiYgdGFzayA9PSBuZXh0X3Rhc2spIHsKKwkJCS8qCisJCQkgKiBJZiB3ZSBnZXQgaGVyZSwgdGhlIHRhc2sgaGFzbnQgbW92ZWQgYXQgYWxsLCBidXQKKwkJCSAqIGl0IGhhcyBmYWlsZWQgdG8gcHVzaC4gIFdlIHdpbGwgbm90IHRyeSBhZ2FpbiwKKwkJCSAqIHNpbmNlIHRoZSBvdGhlciBjcHVzIHdpbGwgcHVsbCBmcm9tIHVzIHdoZW4gdGhleQorCQkJICogYXJlIHJlYWR5LgorCQkJICovCisJCQlkZXF1ZXVlX3B1c2hhYmxlX3Rhc2socnEsIG5leHRfdGFzayk7CisJCQlnb3RvIG91dDsKIAkJfQotCQlnb3RvIG91dDsKKworCQlpZiAoIXRhc2spCisJCQkvKiBObyBtb3JlIHRhc2tzLCBqdXN0IGV4aXQgKi8KKwkJCWdvdG8gb3V0OworCisJCS8qCisJCSAqIFNvbWV0aGluZyBoYXMgc2hpZnRlZCwgdHJ5IGFnYWluLgorCQkgKi8KKwkJcHV0X3Rhc2tfc3RydWN0KG5leHRfdGFzayk7CisJCW5leHRfdGFzayA9IHRhc2s7CisJCWdvdG8gcmV0cnk7CiAJfQogCiAJZGVhY3RpdmF0ZV90YXNrKHJxLCBuZXh0X3Rhc2ssIDApOwpAQCAtMTE0NywyMyArMTM1MCwxMiBAQAogCiAJZG91YmxlX3VubG9ja19iYWxhbmNlKHJxLCBsb3dlc3RfcnEpOwogCi0JcmV0ID0gMTsKIG91dDoKIAlwdXRfdGFza19zdHJ1Y3QobmV4dF90YXNrKTsKIAotCXJldHVybiByZXQ7CisJcmV0dXJuIDE7CiB9CiAKLS8qCi0gKiBUT0RPOiBDdXJyZW50bHkgd2UganVzdCB1c2UgdGhlIHNlY29uZCBoaWdoZXN0IHByaW8gdGFzayBvbgotICogICAgICAgdGhlIHF1ZXVlLCBhbmQgc3RvcCB3aGVuIGl0IGNhbid0IG1pZ3JhdGUgKG9yIHRoZXJlJ3MKLSAqICAgICAgIG5vIG1vcmUgUlQgdGFza3MpLiAgVGhlcmUgbWF5IGJlIGEgY2FzZSB3aGVyZSBhIGxvd2VyCi0gKiAgICAgICBwcmlvcml0eSBSVCB0YXNrIGhhcyBhIGRpZmZlcmVudCBhZmZpbml0eSB0aGFuIHRoZQotICogICAgICAgaGlnaGVyIFJUIHRhc2suIEluIHRoaXMgY2FzZSB0aGUgbG93ZXIgUlQgdGFzayBjb3VsZAotICogICAgICAgcG9zc2libHkgYmUgYWJsZSB0byBtaWdyYXRlIHdoZXJlIGFzIHRoZSBoaWdoZXIgcHJpb3JpdHkKLSAqICAgICAgIFJUIHRhc2sgY291bGQgbm90LiAgV2UgY3VycmVudGx5IGlnbm9yZSB0aGlzIGlzc3VlLgotICogICAgICAgRW5oYW5jZW1lbnRzIGFyZSB3ZWxjb21lIQotICovCiBzdGF0aWMgdm9pZCBwdXNoX3J0X3Rhc2tzKHN0cnVjdCBycSAqcnEpCiB7CiAJLyogcHVzaF9ydF90YXNrIHdpbGwgcmV0dXJuIHRydWUgaWYgaXQgbW92ZWQgYW4gUlQgKi8KQEAgLTExNzQsMzMgKzEzNjYsMzUgQEAKIHN0YXRpYyBpbnQgcHVsbF9ydF90YXNrKHN0cnVjdCBycSAqdGhpc19ycSkKIHsKIAlpbnQgdGhpc19jcHUgPSB0aGlzX3JxLT5jcHUsIHJldCA9IDAsIGNwdTsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsICpuZXh0OworCXN0cnVjdCB0YXNrX3N0cnVjdCAqcDsKIAlzdHJ1Y3QgcnEgKnNyY19ycTsKIAogCWlmIChsaWtlbHkoIXJ0X292ZXJsb2FkZWQodGhpc19ycSkpKQogCQlyZXR1cm4gMDsKIAotCW5leHQgPSBwaWNrX25leHRfdGFza19ydCh0aGlzX3JxKTsKLQogCWZvcl9lYWNoX2NwdShjcHUsIHRoaXNfcnEtPnJkLT5ydG9fbWFzaykgewogCQlpZiAodGhpc19jcHUgPT0gY3B1KQogCQkJY29udGludWU7CiAKIAkJc3JjX3JxID0gY3B1X3JxKGNwdSk7CisKKwkJLyoKKwkJICogRG9uJ3QgYm90aGVyIHRha2luZyB0aGUgc3JjX3JxLT5sb2NrIGlmIHRoZSBuZXh0IGhpZ2hlc3QKKwkJICogdGFzayBpcyBrbm93biB0byBiZSBsb3dlci1wcmlvcml0eSB0aGFuIG91ciBjdXJyZW50IHRhc2suCisJCSAqIFRoaXMgbWF5IGxvb2sgcmFjeSwgYnV0IGlmIHRoaXMgdmFsdWUgaXMgYWJvdXQgdG8gZ28KKwkJICogbG9naWNhbGx5IGhpZ2hlciwgdGhlIHNyY19ycSB3aWxsIHB1c2ggdGhpcyB0YXNrIGF3YXkuCisJCSAqIEFuZCBpZiBpdHMgZ29pbmcgbG9naWNhbGx5IGxvd2VyLCB3ZSBkbyBub3QgY2FyZQorCQkgKi8KKwkJaWYgKHNyY19ycS0+cnQuaGlnaGVzdF9wcmlvLm5leHQgPj0KKwkJICAgIHRoaXNfcnEtPnJ0LmhpZ2hlc3RfcHJpby5jdXJyKQorCQkJY29udGludWU7CisKIAkJLyoKIAkJICogV2UgY2FuIHBvdGVudGlhbGx5IGRyb3AgdGhpc19ycSdzIGxvY2sgaW4KIAkJICogZG91YmxlX2xvY2tfYmFsYW5jZSwgYW5kIGFub3RoZXIgQ1BVIGNvdWxkCi0JCSAqIHN0ZWFsIG91ciBuZXh0IHRhc2sgLSBoZW5jZSB3ZSBtdXN0IGNhdXNlCi0JCSAqIHRoZSBjYWxsZXIgdG8gcmVjYWxjdWxhdGUgdGhlIG5leHQgdGFzawotCQkgKiBpbiB0aGF0IGNhc2U6CisJCSAqIGFsdGVyIHRoaXNfcnEKIAkJICovCi0JCWlmIChkb3VibGVfbG9ja19iYWxhbmNlKHRoaXNfcnEsIHNyY19ycSkpIHsKLQkJCXN0cnVjdCB0YXNrX3N0cnVjdCAqb2xkX25leHQgPSBuZXh0OwotCi0JCQluZXh0ID0gcGlja19uZXh0X3Rhc2tfcnQodGhpc19ycSk7Ci0JCQlpZiAobmV4dCAhPSBvbGRfbmV4dCkKLQkJCQlyZXQgPSAxOwotCQl9CisJCWRvdWJsZV9sb2NrX2JhbGFuY2UodGhpc19ycSwgc3JjX3JxKTsKIAogCQkvKgogCQkgKiBBcmUgdGhlcmUgc3RpbGwgcHVsbGFibGUgUlQgdGFza3M/CkBAIC0xMjE0LDcgKzE0MDgsNyBAQAogCQkgKiBEbyB3ZSBoYXZlIGFuIFJUIHRhc2sgdGhhdCBwcmVlbXB0cwogCQkgKiB0aGUgdG8tYmUtc2NoZWR1bGVkIHRhc2s/CiAJCSAqLwotCQlpZiAocCAmJiAoIW5leHQgfHwgKHAtPnByaW8gPCBuZXh0LT5wcmlvKSkpIHsKKwkJaWYgKHAgJiYgKHAtPnByaW8gPCB0aGlzX3JxLT5ydC5oaWdoZXN0X3ByaW8uY3VycikpIHsKIAkJCVdBUk5fT04ocCA9PSBzcmNfcnEtPmN1cnIpOwogCQkJV0FSTl9PTighcC0+c2Uub25fcnEpOwogCkBAIC0xMjI0LDEyICsxNDE4LDkgQEAKIAkJCSAqIFRoaXMgaXMganVzdCB0aGF0IHAgaXMgd2FrZWluZyB1cCBhbmQgaGFzbid0CiAJCQkgKiBoYWQgYSBjaGFuY2UgdG8gc2NoZWR1bGUuIFdlIG9ubHkgcHVsbAogCQkJICogcCBpZiBpdCBpcyBsb3dlciBpbiBwcmlvcml0eSB0aGFuIHRoZQotCQkJICogY3VycmVudCB0YXNrIG9uIHRoZSBydW4gcXVldWUgb3IKLQkJCSAqIHRoaXNfcnEgbmV4dCB0YXNrIGlzIGxvd2VyIGluIHByaW8gdGhhbgotCQkJICogdGhlIGN1cnJlbnQgdGFzayBvbiB0aGF0IHJxLgorCQkJICogY3VycmVudCB0YXNrIG9uIHRoZSBydW4gcXVldWUKIAkJCSAqLwotCQkJaWYgKHAtPnByaW8gPCBzcmNfcnEtPmN1cnItPnByaW8gfHwKLQkJCSAgICAobmV4dCAmJiBuZXh0LT5wcmlvIDwgc3JjX3JxLT5jdXJyLT5wcmlvKSkKKwkJCWlmIChwLT5wcmlvIDwgc3JjX3JxLT5jdXJyLT5wcmlvKQogCQkJCWdvdG8gc2tpcDsKIAogCQkJcmV0ID0gMTsKQEAgLTEyNDIsMTMgKzE0MzMsNyBAQAogCQkJICogY2FzZSB0aGVyZSdzIGFuIGV2ZW4gaGlnaGVyIHByaW8gdGFzawogCQkJICogaW4gYW5vdGhlciBydW5xdWV1ZS4gKGxvdyBsaWtlbHlob29kCiAJCQkgKiBidXQgcG9zc2libGUpCi0JCQkgKgotCQkJICogVXBkYXRlIG5leHQgc28gdGhhdCB3ZSB3b24ndCBwaWNrIGEgdGFzawotCQkJICogb24gYW5vdGhlciBjcHUgd2l0aCBhIHByaW9yaXR5IGxvd2VyIChvciBlcXVhbCkKLQkJCSAqIHRoYW4gdGhlIG9uZSB3ZSBqdXN0IHBpY2tlZC4KIAkJCSAqLwotCQkJbmV4dCA9IHA7Ci0KIAkJfQogIHNraXA6CiAJCWRvdWJsZV91bmxvY2tfYmFsYW5jZSh0aGlzX3JxLCBzcmNfcnEpOwpAQCAtMTI2MCwyNCArMTQ0NSwyNyBAQAogc3RhdGljIHZvaWQgcHJlX3NjaGVkdWxlX3J0KHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldikKIHsKIAkvKiBUcnkgdG8gcHVsbCBSVCB0YXNrcyBoZXJlIGlmIHdlIGxvd2VyIHRoaXMgcnEncyBwcmlvICovCi0JaWYgKHVubGlrZWx5KHJ0X3Rhc2socHJldikpICYmIHJxLT5ydC5oaWdoZXN0X3ByaW8gPiBwcmV2LT5wcmlvKQorCWlmICh1bmxpa2VseShydF90YXNrKHByZXYpKSAmJiBycS0+cnQuaGlnaGVzdF9wcmlvLmN1cnIgPiBwcmV2LT5wcmlvKQogCQlwdWxsX3J0X3Rhc2socnEpOwogfQogCisvKgorICogYXNzdW1lcyBycS0+bG9jayBpcyBoZWxkCisgKi8KK3N0YXRpYyBpbnQgbmVlZHNfcG9zdF9zY2hlZHVsZV9ydChzdHJ1Y3QgcnEgKnJxKQoreworCXJldHVybiBoYXNfcHVzaGFibGVfdGFza3MocnEpOworfQorCiBzdGF0aWMgdm9pZCBwb3N0X3NjaGVkdWxlX3J0KHN0cnVjdCBycSAqcnEpCiB7CiAJLyoKLQkgKiBJZiB3ZSBoYXZlIG1vcmUgdGhhbiBvbmUgcnRfdGFzayBxdWV1ZWQsIHRoZW4KLQkgKiBzZWUgaWYgd2UgY2FuIHB1c2ggdGhlIG90aGVyIHJ0X3Rhc2tzIG9mZiB0byBvdGhlciBDUFVTLgotCSAqIE5vdGUgd2UgbWF5IHJlbGVhc2UgdGhlIHJxIGxvY2ssIGFuZCBzaW5jZQotCSAqIHRoZSBsb2NrIHdhcyBvd25lZCBieSBwcmV2LCB3ZSBuZWVkIHRvIHJlbGVhc2UgaXQKLQkgKiBmaXJzdCB2aWEgZmluaXNoX2xvY2tfc3dpdGNoIGFuZCB0aGVuIHJlYXF1aXJlIGl0IGhlcmUuCisJICogVGhpcyBpcyBvbmx5IGNhbGxlZCBpZiBuZWVkc19wb3N0X3NjaGVkdWxlX3J0KCkgaW5kaWNhdGVzIHRoYXQKKwkgKiB3ZSBuZWVkIHRvIHB1c2ggdGFza3MgYXdheQogCSAqLwotCWlmICh1bmxpa2VseShycS0+cnQub3ZlcmxvYWRlZCkpIHsKLQkJc3Bpbl9sb2NrX2lycSgmcnEtPmxvY2spOwotCQlwdXNoX3J0X3Rhc2tzKHJxKTsKLQkJc3Bpbl91bmxvY2tfaXJxKCZycS0+bG9jayk7Ci0JfQorCXNwaW5fbG9ja19pcnEoJnJxLT5sb2NrKTsKKwlwdXNoX3J0X3Rhc2tzKHJxKTsKKwlzcGluX3VubG9ja19pcnEoJnJxLT5sb2NrKTsKIH0KIAogLyoKQEAgLTEyODgsNyArMTQ3Niw4IEBACiB7CiAJaWYgKCF0YXNrX3J1bm5pbmcocnEsIHApICYmCiAJICAgICF0ZXN0X3Rza19uZWVkX3Jlc2NoZWQocnEtPmN1cnIpICYmCi0JICAgIHJxLT5ydC5vdmVybG9hZGVkKQorCSAgICBoYXNfcHVzaGFibGVfdGFza3MocnEpICYmCisJICAgIHAtPnJ0Lm5yX2NwdXNfYWxsb3dlZCA+IDEpCiAJCXB1c2hfcnRfdGFza3MocnEpOwogfQogCkBAIC0xMzI0LDYgKzE1MTMsMjQgQEAKIAlpZiAocC0+c2Uub25fcnEgJiYgKHdlaWdodCAhPSBwLT5ydC5ucl9jcHVzX2FsbG93ZWQpKSB7CiAJCXN0cnVjdCBycSAqcnEgPSB0YXNrX3JxKHApOwogCisJCWlmICghdGFza19jdXJyZW50KHJxLCBwKSkgeworCQkJLyoKKwkJCSAqIE1ha2Ugc3VyZSB3ZSBkZXF1ZXVlIHRoaXMgdGFzayBmcm9tIHRoZSBwdXNoYWJsZSBsaXN0CisJCQkgKiBiZWZvcmUgZ29pbmcgZnVydGhlci4gIEl0IHdpbGwgZWl0aGVyIHJlbWFpbiBvZmYgb2YKKwkJCSAqIHRoZSBsaXN0IGJlY2F1c2Ugd2UgYXJlIG5vIGxvbmdlciBwdXNoYWJsZSwgb3IgaXQKKwkJCSAqIHdpbGwgYmUgcmVxdWV1ZWQuCisJCQkgKi8KKwkJCWlmIChwLT5ydC5ucl9jcHVzX2FsbG93ZWQgPiAxKQorCQkJCWRlcXVldWVfcHVzaGFibGVfdGFzayhycSwgcCk7CisKKwkJCS8qCisJCQkgKiBSZXF1ZXVlIGlmIG91ciB3ZWlnaHQgaXMgY2hhbmdpbmcgYW5kIHN0aWxsID4gMQorCQkJICovCisJCQlpZiAod2VpZ2h0ID4gMSkKKwkJCQllbnF1ZXVlX3B1c2hhYmxlX3Rhc2socnEsIHApOworCisJCX0KKwogCQlpZiAoKHAtPnJ0Lm5yX2NwdXNfYWxsb3dlZCA8PSAxKSAmJiAod2VpZ2h0ID4gMSkpIHsKIAkJCXJxLT5ydC5ydF9ucl9taWdyYXRvcnkrKzsKIAkJfSBlbHNlIGlmICgocC0+cnQubnJfY3B1c19hbGxvd2VkID4gMSkgJiYgKHdlaWdodCA8PSAxKSkgewpAQCAtMTMzMSw3ICsxNTM4LDcgQEAKIAkJCXJxLT5ydC5ydF9ucl9taWdyYXRvcnktLTsKIAkJfQogCi0JCXVwZGF0ZV9ydF9taWdyYXRpb24ocnEpOworCQl1cGRhdGVfcnRfbWlncmF0aW9uKCZycS0+cnQpOwogCX0KIAogCWNwdW1hc2tfY29weSgmcC0+Y3B1c19hbGxvd2VkLCBuZXdfbWFzayk7CkBAIC0xMzQ2LDcgKzE1NTMsNyBAQAogCiAJX19lbmFibGVfcnVudGltZShycSk7CiAKLQljcHVwcmlfc2V0KCZycS0+cmQtPmNwdXByaSwgcnEtPmNwdSwgcnEtPnJ0LmhpZ2hlc3RfcHJpbyk7CisJY3B1cHJpX3NldCgmcnEtPnJkLT5jcHVwcmksIHJxLT5jcHUsIHJxLT5ydC5oaWdoZXN0X3ByaW8uY3Vycik7CiB9CiAKIC8qIEFzc3VtZXMgcnEtPmxvY2sgaXMgaGVsZCAqLwpAQCAtMTQzOCw3ICsxNjQ1LDcgQEAKIAkJICogY2FuIHJlbGVhc2UgdGhlIHJxIGxvY2sgYW5kIHAgY291bGQgbWlncmF0ZS4KIAkJICogT25seSByZXNjaGVkdWxlIGlmIHAgaXMgc3RpbGwgb24gdGhlIHNhbWUgcnVucXVldWUuCiAJCSAqLwotCQlpZiAocC0+cHJpbyA+IHJxLT5ydC5oaWdoZXN0X3ByaW8gJiYgcnEtPmN1cnIgPT0gcCkKKwkJaWYgKHAtPnByaW8gPiBycS0+cnQuaGlnaGVzdF9wcmlvLmN1cnIgJiYgcnEtPmN1cnIgPT0gcCkKIAkJCXJlc2NoZWRfdGFzayhwKTsKICNlbHNlCiAJCS8qIEZvciBVUCBzaW1wbHkgcmVzY2hlZCBvbiBkcm9wIG9mIHByaW8gKi8KQEAgLTE1MDksNiArMTcxNiw5IEBACiAJc3RydWN0IHRhc2tfc3RydWN0ICpwID0gcnEtPmN1cnI7CiAKIAlwLT5zZS5leGVjX3N0YXJ0ID0gcnEtPmNsb2NrOworCisJLyogVGhlIHJ1bm5pbmcgdGFzayBpcyBuZXZlciBlbGlnaWJsZSBmb3IgcHVzaGluZyAqLworCWRlcXVldWVfcHVzaGFibGVfdGFzayhycSwgcCk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2NoZWRfY2xhc3MgcnRfc2NoZWRfY2xhc3MgPSB7CkBAIC0xNTMxLDYgKzE3NDEsNyBAQAogCS5ycV9vbmxpbmUgICAgICAgICAgICAgID0gcnFfb25saW5lX3J0LAogCS5ycV9vZmZsaW5lICAgICAgICAgICAgID0gcnFfb2ZmbGluZV9ydCwKIAkucHJlX3NjaGVkdWxlCQk9IHByZV9zY2hlZHVsZV9ydCwKKwkubmVlZHNfcG9zdF9zY2hlZHVsZQk9IG5lZWRzX3Bvc3Rfc2NoZWR1bGVfcnQsCiAJLnBvc3Rfc2NoZWR1bGUJCT0gcG9zdF9zY2hlZHVsZV9ydCwKIAkudGFza193YWtlX3VwCQk9IHRhc2tfd2FrZV91cF9ydCwKIAkuc3dpdGNoZWRfZnJvbQkJPSBzd2l0Y2hlZF9mcm9tX3J0LApkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkX3N0YXRzLmggYi9rZXJuZWwvc2NoZWRfc3RhdHMuaAppbmRleCBhOGY5M2RkLi4zMmQyYmQ0IDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWRfc3RhdHMuaAorKysgYi9rZXJuZWwvc2NoZWRfc3RhdHMuaApAQCAtNCw3ICs0LDcgQEAKICAqIGJ1bXAgdGhpcyB1cCB3aGVuIGNoYW5naW5nIHRoZSBvdXRwdXQgZm9ybWF0IG9yIHRoZSBtZWFuaW5nIG9mIGFuIGV4aXN0aW5nCiAgKiBmb3JtYXQsIHNvIHRoYXQgdG9vbHMgY2FuIGFkYXB0IChvciBhYm9ydCkKICAqLwotI2RlZmluZSBTQ0hFRFNUQVRfVkVSU0lPTiAxNAorI2RlZmluZSBTQ0hFRFNUQVRfVkVSU0lPTiAxNQogCiBzdGF0aWMgaW50IHNob3dfc2NoZWRzdGF0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQogewpAQCAtMjYsOSArMjYsOCBAQAogCiAJCS8qIHJ1bnF1ZXVlLXNwZWNpZmljIHN0YXRzICovCiAJCXNlcV9wcmludGYoc2VxLAotCQkgICAgImNwdSVkICV1ICV1ICV1ICV1ICV1ICV1ICV1ICV1ICV1ICVsbHUgJWxsdSAlbHUiLAotCQkgICAgY3B1LCBycS0+eWxkX2JvdGhfZW1wdHksCi0JCSAgICBycS0+eWxkX2FjdF9lbXB0eSwgcnEtPnlsZF9leHBfZW1wdHksIHJxLT55bGRfY291bnQsCisJCSAgICAiY3B1JWQgJXUgJXUgJXUgJXUgJXUgJXUgJWxsdSAlbGx1ICVsdSIsCisJCSAgICBjcHUsIHJxLT55bGRfY291bnQsCiAJCSAgICBycS0+c2NoZWRfc3dpdGNoLCBycS0+c2NoZWRfY291bnQsIHJxLT5zY2hlZF9nb2lkbGUsCiAJCSAgICBycS0+dHR3dV9jb3VudCwgcnEtPnR0d3VfbG9jYWwsCiAJCSAgICBycS0+cnFfY3B1X3RpbWUsCmRpZmYgLS1naXQgYS9rZXJuZWwvc3lzY3RsX2NoZWNrLmMgYi9rZXJuZWwvc3lzY3RsX2NoZWNrLmMKaW5kZXggZmFmZWI0OC4uYjM4NDIzYyAxMDA2NDQKLS0tIGEva2VybmVsL3N5c2N0bF9jaGVjay5jCisrKyBiL2tlcm5lbC9zeXNjdGxfY2hlY2suYwpAQCAtMjE5LDYgKzIxOSw3IEBACiAJeyBORVRfSVBWNF9DT05GX0FSUF9JR05PUkUsCQkiYXJwX2lnbm9yZSIgfSwKIAl7IE5FVF9JUFY0X0NPTkZfUFJPTU9URV9TRUNPTkRBUklFUywJInByb21vdGVfc2Vjb25kYXJpZXMiIH0sCiAJeyBORVRfSVBWNF9DT05GX0FSUF9BQ0NFUFQsCQkiYXJwX2FjY2VwdCIgfSwKKwl7IE5FVF9JUFY0X0NPTkZfQVJQX05PVElGWSwJCSJhcnBfbm90aWZ5IiB9LAogCXt9CiB9OwogCmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS9NYWtlZmlsZSBiL2tlcm5lbC90aW1lL01ha2VmaWxlCmluZGV4IDkwNWIwYjUuLjBiMGE2MzYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL01ha2VmaWxlCisrKyBiL2tlcm5lbC90aW1lL01ha2VmaWxlCkBAIC0xLDQgKzEsNCBAQAotb2JqLXkgKz0gdGltZWtlZXBpbmcubyBudHAubyBjbG9ja3NvdXJjZS5vIGppZmZpZXMubyB0aW1lcl9saXN0Lm8KK29iai15ICs9IHRpbWVrZWVwaW5nLm8gbnRwLm8gY2xvY2tzb3VyY2UubyBqaWZmaWVzLm8gdGltZXJfbGlzdC5vIHRpbWVjb21wYXJlLm8KIAogb2JqLSQoQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQpCQkrPSBjbG9ja2V2ZW50cy5vCiBvYmotJChDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUykJCSs9IHRpY2stY29tbW9uLm8KZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL2Nsb2NrZXZlbnRzLmMgYi9rZXJuZWwvdGltZS9jbG9ja2V2ZW50cy5jCmluZGV4IGVhMmY0OGEuLmQxM2JlMjEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL2Nsb2NrZXZlbnRzLmMKKysrIGIva2VybmVsL3RpbWUvY2xvY2tldmVudHMuYwpAQCAtNjgsNiArNjgsMTcgQEAKIAlpZiAoZGV2LT5tb2RlICE9IG1vZGUpIHsKIAkJZGV2LT5zZXRfbW9kZShtb2RlLCBkZXYpOwogCQlkZXYtPm1vZGUgPSBtb2RlOworCisJCS8qCisJCSAqIEEgbnNlYzJjeWMgbXVsdGlwbGljYXRvciBvZiAwIGlzIGludmFsaWQgYW5kIHdlJ2QgY3Jhc2gKKwkJICogb24gaXQsIHNvIGZpeCBpdCB1cCBhbmQgZW1pdCBhIHdhcm5pbmc6CisJCSAqLworCQlpZiAobW9kZSA9PSBDTE9DS19FVlRfTU9ERV9PTkVTSE9UKSB7CisJCQlpZiAodW5saWtlbHkoIWRldi0+bXVsdCkpIHsKKwkJCQlkZXYtPm11bHQgPSAxOworCQkJCVdBUk5fT04oMSk7CisJCQl9CisJCX0KIAl9CiB9CiAKQEAgLTE2OCwxNSArMTc5LDYgQEAKIAlCVUdfT04oZGV2LT5tb2RlICE9IENMT0NLX0VWVF9NT0RFX1VOVVNFRCk7CiAJQlVHX09OKCFkZXYtPmNwdW1hc2spOwogCi0JLyoKLQkgKiBBIG5zZWMyY3ljIG11bHRpcGxpY2F0b3Igb2YgMCBpcyBpbnZhbGlkIGFuZCB3ZSdkIGNyYXNoCi0JICogb24gaXQsIHNvIGZpeCBpdCB1cCBhbmQgZW1pdCBhIHdhcm5pbmc6Ci0JICovCi0JaWYgKHVubGlrZWx5KCFkZXYtPm11bHQpKSB7Ci0JCWRldi0+bXVsdCA9IDE7Ci0JCVdBUk5fT04oMSk7Ci0JfQotCiAJc3Bpbl9sb2NrKCZjbG9ja2V2ZW50c19sb2NrKTsKIAogCWxpc3RfYWRkKCZkZXYtPmxpc3QsICZjbG9ja2V2ZW50X2RldmljZXMpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvY2xvY2tzb3VyY2UuYyBiL2tlcm5lbC90aW1lL2Nsb2Nrc291cmNlLmMKaW5kZXggY2E4OWUxNS4uYzQ2YzkzMSAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvY2xvY2tzb3VyY2UuYworKysgYi9rZXJuZWwvdGltZS9jbG9ja3NvdXJjZS5jCkBAIC0zMSw2ICszMSw4MiBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+IC8qIGZvciBzcGluX3VubG9ja19pcnEoKSB1c2luZyBwcmVlbXB0X2NvdW50KCkgbTY4ayAqLwogI2luY2x1ZGUgPGxpbnV4L3RpY2suaD4KIAordm9pZCB0aW1lY291bnRlcl9pbml0KHN0cnVjdCB0aW1lY291bnRlciAqdGMsCisJCSAgICAgIGNvbnN0IHN0cnVjdCBjeWNsZWNvdW50ZXIgKmNjLAorCQkgICAgICB1NjQgc3RhcnRfdHN0YW1wKQoreworCXRjLT5jYyA9IGNjOworCXRjLT5jeWNsZV9sYXN0ID0gY2MtPnJlYWQoY2MpOworCXRjLT5uc2VjID0gc3RhcnRfdHN0YW1wOworfQorRVhQT1JUX1NZTUJPTCh0aW1lY291bnRlcl9pbml0KTsKKworLyoqCisgKiB0aW1lY291bnRlcl9yZWFkX2RlbHRhIC0gZ2V0IG5hbm9zZWNvbmRzIHNpbmNlIGxhc3QgY2FsbCBvZiB0aGlzIGZ1bmN0aW9uCisgKiBAdGM6ICAgICAgICAgUG9pbnRlciB0byB0aW1lIGNvdW50ZXIKKyAqCisgKiBXaGVuIHRoZSB1bmRlcmx5aW5nIGN5Y2xlIGNvdW50ZXIgcnVucyBvdmVyLCB0aGlzIHdpbGwgYmUgaGFuZGxlZAorICogY29ycmVjdGx5IGFzIGxvbmcgYXMgaXQgZG9lcyBub3QgcnVuIG92ZXIgbW9yZSB0aGFuIG9uY2UgYmV0d2VlbgorICogY2FsbHMuCisgKgorICogVGhlIGZpcnN0IGNhbGwgdG8gdGhpcyBmdW5jdGlvbiBmb3IgYSBuZXcgdGltZSBjb3VudGVyIGluaXRpYWxpemVzCisgKiB0aGUgdGltZSB0cmFja2luZyBhbmQgcmV0dXJucyBhbiB1bmRlZmluZWQgcmVzdWx0LgorICovCitzdGF0aWMgdTY0IHRpbWVjb3VudGVyX3JlYWRfZGVsdGEoc3RydWN0IHRpbWVjb3VudGVyICp0YykKK3sKKwljeWNsZV90IGN5Y2xlX25vdywgY3ljbGVfZGVsdGE7CisJdTY0IG5zX29mZnNldDsKKworCS8qIHJlYWQgY3ljbGUgY291bnRlcjogKi8KKwljeWNsZV9ub3cgPSB0Yy0+Y2MtPnJlYWQodGMtPmNjKTsKKworCS8qIGNhbGN1bGF0ZSB0aGUgZGVsdGEgc2luY2UgdGhlIGxhc3QgdGltZWNvdW50ZXJfcmVhZF9kZWx0YSgpOiAqLworCWN5Y2xlX2RlbHRhID0gKGN5Y2xlX25vdyAtIHRjLT5jeWNsZV9sYXN0KSAmIHRjLT5jYy0+bWFzazsKKworCS8qIGNvbnZlcnQgdG8gbmFub3NlY29uZHM6ICovCisJbnNfb2Zmc2V0ID0gY3ljbGVjb3VudGVyX2N5YzJucyh0Yy0+Y2MsIGN5Y2xlX2RlbHRhKTsKKworCS8qIHVwZGF0ZSB0aW1lIHN0YW1wIG9mIHRpbWVjb3VudGVyX3JlYWRfZGVsdGEoKSBjYWxsOiAqLworCXRjLT5jeWNsZV9sYXN0ID0gY3ljbGVfbm93OworCisJcmV0dXJuIG5zX29mZnNldDsKK30KKwordTY0IHRpbWVjb3VudGVyX3JlYWQoc3RydWN0IHRpbWVjb3VudGVyICp0YykKK3sKKwl1NjQgbnNlYzsKKworCS8qIGluY3JlbWVudCB0aW1lIGJ5IG5hbm9zZWNvbmRzIHNpbmNlIGxhc3QgY2FsbCAqLworCW5zZWMgPSB0aW1lY291bnRlcl9yZWFkX2RlbHRhKHRjKTsKKwluc2VjICs9IHRjLT5uc2VjOworCXRjLT5uc2VjID0gbnNlYzsKKworCXJldHVybiBuc2VjOworfQorRVhQT1JUX1NZTUJPTCh0aW1lY291bnRlcl9yZWFkKTsKKwordTY0IHRpbWVjb3VudGVyX2N5YzJ0aW1lKHN0cnVjdCB0aW1lY291bnRlciAqdGMsCisJCQkgY3ljbGVfdCBjeWNsZV90c3RhbXApCit7CisJdTY0IGN5Y2xlX2RlbHRhID0gKGN5Y2xlX3RzdGFtcCAtIHRjLT5jeWNsZV9sYXN0KSAmIHRjLT5jYy0+bWFzazsKKwl1NjQgbnNlYzsKKworCS8qCisJICogSW5zdGVhZCBvZiBhbHdheXMgdHJlYXRpbmcgY3ljbGVfdHN0YW1wIGFzIG1vcmUgcmVjZW50CisJICogdGhhbiB0Yy0+Y3ljbGVfbGFzdCwgZGV0ZWN0IHdoZW4gaXQgaXMgdG9vIGZhciBpbiB0aGUKKwkgKiBmdXR1cmUgYW5kIHRyZWF0IGl0IGFzIG9sZCB0aW1lIHN0YW1wIGluc3RlYWQuCisJICovCisJaWYgKGN5Y2xlX2RlbHRhID4gdGMtPmNjLT5tYXNrIC8gMikgeworCQljeWNsZV9kZWx0YSA9ICh0Yy0+Y3ljbGVfbGFzdCAtIGN5Y2xlX3RzdGFtcCkgJiB0Yy0+Y2MtPm1hc2s7CisJCW5zZWMgPSB0Yy0+bnNlYyAtIGN5Y2xlY291bnRlcl9jeWMybnModGMtPmNjLCBjeWNsZV9kZWx0YSk7CisJfSBlbHNlIHsKKwkJbnNlYyA9IGN5Y2xlY291bnRlcl9jeWMybnModGMtPmNjLCBjeWNsZV9kZWx0YSkgKyB0Yy0+bnNlYzsKKwl9CisKKwlyZXR1cm4gbnNlYzsKK30KK0VYUE9SVF9TWU1CT0wodGltZWNvdW50ZXJfY3ljMnRpbWUpOworCiAvKiBYWFggLSBXb3VsZCBsaWtlIGEgYmV0dGVyIHdheSBmb3IgaW5pdGlhbGl6aW5nIGN1cnJfY2xvY2tzb3VyY2UgKi8KIGV4dGVybiBzdHJ1Y3QgY2xvY2tzb3VyY2UgY2xvY2tzb3VyY2VfamlmZmllczsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvbnRwLmMgYi9rZXJuZWwvdGltZS9udHAuYwppbmRleCBmNWY3OTNkLi43ZmM2NDM3IDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS9udHAuYworKysgYi9rZXJuZWwvdGltZS9udHAuYwpAQCAtMSw3MSArMSwxMjkgQEAKIC8qCi0gKiBsaW51eC9rZXJuZWwvdGltZS9udHAuYwotICoKICAqIE5UUCBzdGF0ZSBtYWNoaW5lIGludGVyZmFjZXMgYW5kIGxvZ2ljLgogICoKICAqIFRoaXMgY29kZSB3YXMgbWFpbmx5IG1vdmVkIGZyb20ga2VybmVsL3RpbWVyLmMgYW5kIGtlcm5lbC90aW1lLmMKICAqIFBsZWFzZSBzZWUgdGhvc2UgZmlsZXMgZm9yIHJlbGV2YW50IGNvcHlyaWdodCBpbmZvIGFuZCBoaXN0b3JpY2FsCiAgKiBjaGFuZ2Vsb2dzLgogICovCi0KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KLSNpbmNsdWRlIDxsaW51eC90aW1leC5oPgotI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9ocnRpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgotI2luY2x1ZGUgPGxpbnV4L21hdGg2NC5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsb2Nrc291cmNlLmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+Ci0jaW5jbHVkZSA8YXNtL3RpbWV4Lmg+CisjaW5jbHVkZSA8bGludXgvaHJ0aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9tYXRoNjQuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1leC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgogCiAvKgotICogVGltZWtlZXBpbmcgdmFyaWFibGVzCisgKiBOVFAgdGltZWtlZXBpbmcgdmFyaWFibGVzOgogICovCi11bnNpZ25lZCBsb25nIHRpY2tfdXNlYyA9IFRJQ0tfVVNFQzsgCQkvKiBVU0VSX0haIHBlcmlvZCAodXNlYykgKi8KLXVuc2lnbmVkIGxvbmcgdGlja19uc2VjOwkJCS8qIEFDVEhaIHBlcmlvZCAobnNlYykgKi8KLXU2NCB0aWNrX2xlbmd0aDsKLXN0YXRpYyB1NjQgdGlja19sZW5ndGhfYmFzZTsKIAotc3RhdGljIHN0cnVjdCBocnRpbWVyIGxlYXBfdGltZXI7CisvKiBVU0VSX0haIHBlcmlvZCAodXNlY3MpOiAqLwordW5zaWduZWQgbG9uZwkJCXRpY2tfdXNlYyA9IFRJQ0tfVVNFQzsKIAotI2RlZmluZSBNQVhfVElDS0FESgkJNTAwCQkvKiBtaWNyb3NlY3MgKi8KLSNkZWZpbmUgTUFYX1RJQ0tBREpfU0NBTEVECSgoKHU2NCkoTUFYX1RJQ0tBREogKiBOU0VDX1BFUl9VU0VDKSA8PCBcCi0JCQkJICBOVFBfU0NBTEVfU0hJRlQpIC8gTlRQX0lOVEVSVkFMX0ZSRVEpCisvKiBBQ1RIWiBwZXJpb2QgKG5zZWNzKTogKi8KK3Vuc2lnbmVkIGxvbmcJCQl0aWNrX25zZWM7CisKK3U2NAkJCQl0aWNrX2xlbmd0aDsKK3N0YXRpYyB1NjQJCQl0aWNrX2xlbmd0aF9iYXNlOworCitzdGF0aWMgc3RydWN0IGhydGltZXIJCWxlYXBfdGltZXI7CisKKyNkZWZpbmUgTUFYX1RJQ0tBREoJCTUwMExMCQkvKiB1c2VjcyAqLworI2RlZmluZSBNQVhfVElDS0FESl9TQ0FMRUQgXAorCSgoKE1BWF9USUNLQURKICogTlNFQ19QRVJfVVNFQykgPDwgTlRQX1NDQUxFX1NISUZUKSAvIE5UUF9JTlRFUlZBTF9GUkVRKQogCiAvKgogICogcGhhc2UtbG9jayBsb29wIHZhcmlhYmxlcwogICovCi0vKiBUSU1FX0VSUk9SIHByZXZlbnRzIG92ZXJ3cml0aW5nIHRoZSBDTU9TIGNsb2NrICovCi1zdGF0aWMgaW50IHRpbWVfc3RhdGUgPSBUSU1FX09LOwkvKiBjbG9jayBzeW5jaHJvbml6YXRpb24gc3RhdHVzCSovCi1pbnQgdGltZV9zdGF0dXMgPSBTVEFfVU5TWU5DOwkJLyogY2xvY2sgc3RhdHVzIGJpdHMJCSovCi1zdGF0aWMgbG9uZyB0aW1lX3RhaTsJCQkvKiBUQUkgb2Zmc2V0IChzKQkJKi8KLXN0YXRpYyBzNjQgdGltZV9vZmZzZXQ7CQkJLyogdGltZSBhZGp1c3RtZW50IChucykJCSovCi1zdGF0aWMgbG9uZyB0aW1lX2NvbnN0YW50ID0gMjsJCS8qIHBsbCB0aW1lIGNvbnN0YW50CQkqLwotbG9uZyB0aW1lX21heGVycm9yID0gTlRQX1BIQVNFX0xJTUlUOwkvKiBtYXhpbXVtIGVycm9yICh1cykJCSovCi1sb25nIHRpbWVfZXN0ZXJyb3IgPSBOVFBfUEhBU0VfTElNSVQ7CS8qIGVzdGltYXRlZCBlcnJvciAodXMpCQkqLwotc3RhdGljIHM2NCB0aW1lX2ZyZXE7CQkJLyogZnJlcXVlbmN5IG9mZnNldCAoc2NhbGVkIG5zL3MpKi8KLXN0YXRpYyBsb25nIHRpbWVfcmVmdGltZTsJCS8qIHRpbWUgYXQgbGFzdCBhZGp1c3RtZW50IChzKQkqLwotbG9uZyB0aW1lX2FkanVzdDsKLXN0YXRpYyBsb25nIG50cF90aWNrX2FkajsKIAorLyoKKyAqIGNsb2NrIHN5bmNocm9uaXphdGlvbiBzdGF0dXMKKyAqCisgKiAoVElNRV9FUlJPUiBwcmV2ZW50cyBvdmVyd3JpdGluZyB0aGUgQ01PUyBjbG9jaykKKyAqLworc3RhdGljIGludAkJCXRpbWVfc3RhdGUgPSBUSU1FX09LOworCisvKiBjbG9jayBzdGF0dXMgYml0czoJCQkJCQkJKi8KK2ludAkJCQl0aW1lX3N0YXR1cyA9IFNUQV9VTlNZTkM7CisKKy8qIFRBSSBvZmZzZXQgKHNlY3MpOgkJCQkJCQkqLworc3RhdGljIGxvbmcJCQl0aW1lX3RhaTsKKworLyogdGltZSBhZGp1c3RtZW50IChuc2Vjcyk6CQkJCQkJKi8KK3N0YXRpYyBzNjQJCQl0aW1lX29mZnNldDsKKworLyogcGxsIHRpbWUgY29uc3RhbnQ6CQkJCQkJCSovCitzdGF0aWMgbG9uZwkJCXRpbWVfY29uc3RhbnQgPSAyOworCisvKiBtYXhpbXVtIGVycm9yICh1c2Vjcyk6CQkJCQkJKi8KK2xvbmcJCQkJdGltZV9tYXhlcnJvciA9IE5UUF9QSEFTRV9MSU1JVDsKKworLyogZXN0aW1hdGVkIGVycm9yICh1c2Vjcyk6CQkJCQkJKi8KK2xvbmcJCQkJdGltZV9lc3RlcnJvciA9IE5UUF9QSEFTRV9MSU1JVDsKKworLyogZnJlcXVlbmN5IG9mZnNldCAoc2NhbGVkIG5zZWNzL3NlY3MpOgkJCQkqLworc3RhdGljIHM2NAkJCXRpbWVfZnJlcTsKKworLyogdGltZSBhdCBsYXN0IGFkanVzdG1lbnQgKHNlY3MpOgkJCQkJKi8KK3N0YXRpYyBsb25nCQkJdGltZV9yZWZ0aW1lOworCitsb25nCQkJCXRpbWVfYWRqdXN0OworCisvKiBjb25zdGFudCAoYm9vdC1wYXJhbSBjb25maWd1cmFibGUpIE5UUCB0aWNrIGFkanVzdG1lbnQgKHVwc2NhbGVkKQkqLworc3RhdGljIHM2NAkJCW50cF90aWNrX2FkajsKKworLyoKKyAqIE5UUCBtZXRob2RzOgorICovCisKKy8qCisgKiBVcGRhdGUgKHRpY2tfbGVuZ3RoLCB0aWNrX2xlbmd0aF9iYXNlLCB0aWNrX25zZWMpLCBiYXNlZAorICogb24gKHRpY2tfdXNlYywgbnRwX3RpY2tfYWRqLCB0aW1lX2ZyZXEpOgorICovCiBzdGF0aWMgdm9pZCBudHBfdXBkYXRlX2ZyZXF1ZW5jeSh2b2lkKQogewotCXU2NCBzZWNvbmRfbGVuZ3RoID0gKHU2NCkodGlja191c2VjICogTlNFQ19QRVJfVVNFQyAqIFVTRVJfSFopCi0JCQkJPDwgTlRQX1NDQUxFX1NISUZUOwotCXNlY29uZF9sZW5ndGggKz0gKHM2NCludHBfdGlja19hZGogPDwgTlRQX1NDQUxFX1NISUZUOwotCXNlY29uZF9sZW5ndGggKz0gdGltZV9mcmVxOworCXU2NCBzZWNvbmRfbGVuZ3RoOworCXU2NCBuZXdfYmFzZTsKIAotCXRpY2tfbGVuZ3RoX2Jhc2UgPSBzZWNvbmRfbGVuZ3RoOworCXNlY29uZF9sZW5ndGgJCSA9ICh1NjQpKHRpY2tfdXNlYyAqIE5TRUNfUEVSX1VTRUMgKiBVU0VSX0haKQorCQkJCQkJPDwgTlRQX1NDQUxFX1NISUZUOwogCi0JdGlja19uc2VjID0gZGl2X3U2NChzZWNvbmRfbGVuZ3RoLCBIWikgPj4gTlRQX1NDQUxFX1NISUZUOwotCXRpY2tfbGVuZ3RoX2Jhc2UgPSBkaXZfdTY0KHRpY2tfbGVuZ3RoX2Jhc2UsIE5UUF9JTlRFUlZBTF9GUkVRKTsKKwlzZWNvbmRfbGVuZ3RoCQkrPSBudHBfdGlja19hZGo7CisJc2Vjb25kX2xlbmd0aAkJKz0gdGltZV9mcmVxOworCisJdGlja19uc2VjCQkgPSBkaXZfdTY0KHNlY29uZF9sZW5ndGgsIEhaKSA+PiBOVFBfU0NBTEVfU0hJRlQ7CisJbmV3X2Jhc2UJCSA9IGRpdl91NjQoc2Vjb25kX2xlbmd0aCwgTlRQX0lOVEVSVkFMX0ZSRVEpOworCisJLyoKKwkgKiBEb24ndCB3YWl0IGZvciB0aGUgbmV4dCBzZWNvbmRfb3ZlcmZsb3csIGFwcGx5CisJICogdGhlIGNoYW5nZSB0byB0aGUgdGljayBsZW5ndGggaW1tZWRpYXRlbHk6CisJICovCisJdGlja19sZW5ndGgJCSs9IG5ld19iYXNlIC0gdGlja19sZW5ndGhfYmFzZTsKKwl0aWNrX2xlbmd0aF9iYXNlCSA9IG5ld19iYXNlOworfQorCitzdGF0aWMgaW5saW5lIHM2NCBudHBfdXBkYXRlX29mZnNldF9mbGwoczY0IG9mZnNldDY0LCBsb25nIHNlY3MpCit7CisJdGltZV9zdGF0dXMgJj0gflNUQV9NT0RFOworCisJaWYgKHNlY3MgPCBNSU5TRUMpCisJCXJldHVybiAwOworCisJaWYgKCEodGltZV9zdGF0dXMgJiBTVEFfRkxMKSAmJiAoc2VjcyA8PSBNQVhTRUMpKQorCQlyZXR1cm4gMDsKKworCXRpbWVfc3RhdHVzIHw9IFNUQV9NT0RFOworCisJcmV0dXJuIGRpdl9zNjQob2Zmc2V0NjQgPDwgKE5UUF9TQ0FMRV9TSElGVCAtIFNISUZUX0ZMTCksIHNlY3MpOwogfQogCiBzdGF0aWMgdm9pZCBudHBfdXBkYXRlX29mZnNldChsb25nIG9mZnNldCkKIHsKLQlsb25nIG10ZW1wOwogCXM2NCBmcmVxX2FkajsKKwlzNjQgb2Zmc2V0NjQ7CisJbG9uZyBzZWNzOwogCiAJaWYgKCEodGltZV9zdGF0dXMgJiBTVEFfUExMKSkKIAkJcmV0dXJuOwpAQCAtODQsMjQgKzE0MiwyMyBAQAogCSAqIFNlbGVjdCBob3cgdGhlIGZyZXF1ZW5jeSBpcyB0byBiZSBjb250cm9sbGVkCiAJICogYW5kIGluIHdoaWNoIG1vZGUgKFBMTCBvciBGTEwpLgogCSAqLwotCWlmICh0aW1lX3N0YXR1cyAmIFNUQV9GUkVRSE9MRCB8fCB0aW1lX3JlZnRpbWUgPT0gMCkKLQkJdGltZV9yZWZ0aW1lID0geHRpbWUudHZfc2VjOwotCW10ZW1wID0geHRpbWUudHZfc2VjIC0gdGltZV9yZWZ0aW1lOworCXNlY3MgPSB4dGltZS50dl9zZWMgLSB0aW1lX3JlZnRpbWU7CisJaWYgKHVubGlrZWx5KHRpbWVfc3RhdHVzICYgU1RBX0ZSRVFIT0xEKSkKKwkJc2VjcyA9IDA7CisKIAl0aW1lX3JlZnRpbWUgPSB4dGltZS50dl9zZWM7CiAKLQlmcmVxX2FkaiA9IChzNjQpb2Zmc2V0ICogbXRlbXA7Ci0JZnJlcV9hZGogPDw9IE5UUF9TQ0FMRV9TSElGVCAtIDIgKiAoU0hJRlRfUExMICsgMiArIHRpbWVfY29uc3RhbnQpOwotCXRpbWVfc3RhdHVzICY9IH5TVEFfTU9ERTsKLQlpZiAobXRlbXAgPj0gTUlOU0VDICYmICh0aW1lX3N0YXR1cyAmIFNUQV9GTEwgfHwgbXRlbXAgPiBNQVhTRUMpKSB7Ci0JCWZyZXFfYWRqICs9IGRpdl9zNjQoKHM2NClvZmZzZXQgPDwgKE5UUF9TQ0FMRV9TSElGVCAtIFNISUZUX0ZMTCksCi0JCQkJICAgIG10ZW1wKTsKLQkJdGltZV9zdGF0dXMgfD0gU1RBX01PREU7Ci0JfQotCWZyZXFfYWRqICs9IHRpbWVfZnJlcTsKLQlmcmVxX2FkaiA9IG1pbihmcmVxX2FkaiwgTUFYRlJFUV9TQ0FMRUQpOwotCXRpbWVfZnJlcSA9IG1heChmcmVxX2FkaiwgLU1BWEZSRVFfU0NBTEVEKTsKKwlvZmZzZXQ2NCAgICA9IG9mZnNldDsKKwlmcmVxX2FkaiAgICA9IChvZmZzZXQ2NCAqIHNlY3MpIDw8CisJCQkoTlRQX1NDQUxFX1NISUZUIC0gMiAqIChTSElGVF9QTEwgKyAyICsgdGltZV9jb25zdGFudCkpOwogCi0JdGltZV9vZmZzZXQgPSBkaXZfczY0KChzNjQpb2Zmc2V0IDw8IE5UUF9TQ0FMRV9TSElGVCwgTlRQX0lOVEVSVkFMX0ZSRVEpOworCWZyZXFfYWRqICAgICs9IG50cF91cGRhdGVfb2Zmc2V0X2ZsbChvZmZzZXQ2NCwgc2Vjcyk7CisKKwlmcmVxX2FkaiAgICA9IG1pbihmcmVxX2FkaiArIHRpbWVfZnJlcSwgTUFYRlJFUV9TQ0FMRUQpOworCisJdGltZV9mcmVxICAgPSBtYXgoZnJlcV9hZGosIC1NQVhGUkVRX1NDQUxFRCk7CisKKwl0aW1lX29mZnNldCA9IGRpdl9zNjQob2Zmc2V0NjQgPDwgTlRQX1NDQUxFX1NISUZULCBOVFBfSU5URVJWQUxfRlJFUSk7CiB9CiAKIC8qKgpAQCAtMTExLDE1ICsxNjgsMTUgQEAKICAqLwogdm9pZCBudHBfY2xlYXIodm9pZCkKIHsKLQl0aW1lX2FkanVzdCA9IDA7CQkvKiBzdG9wIGFjdGl2ZSBhZGp0aW1lKCkgKi8KLQl0aW1lX3N0YXR1cyB8PSBTVEFfVU5TWU5DOwotCXRpbWVfbWF4ZXJyb3IgPSBOVFBfUEhBU0VfTElNSVQ7Ci0JdGltZV9lc3RlcnJvciA9IE5UUF9QSEFTRV9MSU1JVDsKKwl0aW1lX2FkanVzdAk9IDA7CQkvKiBzdG9wIGFjdGl2ZSBhZGp0aW1lKCkgKi8KKwl0aW1lX3N0YXR1cwl8PSBTVEFfVU5TWU5DOworCXRpbWVfbWF4ZXJyb3IJPSBOVFBfUEhBU0VfTElNSVQ7CisJdGltZV9lc3RlcnJvcgk9IE5UUF9QSEFTRV9MSU1JVDsKIAogCW50cF91cGRhdGVfZnJlcXVlbmN5KCk7CiAKLQl0aWNrX2xlbmd0aCA9IHRpY2tfbGVuZ3RoX2Jhc2U7Ci0JdGltZV9vZmZzZXQgPSAwOworCXRpY2tfbGVuZ3RoCT0gdGlja19sZW5ndGhfYmFzZTsKKwl0aW1lX29mZnNldAk9IDA7CiB9CiAKIC8qCkBAIC0xNDAsOCArMTk3LDggQEAKIAkJeHRpbWUudHZfc2VjLS07CiAJCXdhbGxfdG9fbW9ub3RvbmljLnR2X3NlYysrOwogCQl0aW1lX3N0YXRlID0gVElNRV9PT1A7Ci0JCXByaW50ayhLRVJOX05PVElDRSAiQ2xvY2s6ICIKLQkJICAgICAgICJpbnNlcnRpbmcgbGVhcCBzZWNvbmQgMjM6NTk6NjAgVVRDXG4iKTsKKwkJcHJpbnRrKEtFUk5fTk9USUNFCisJCQkiQ2xvY2s6IGluc2VydGluZyBsZWFwIHNlY29uZCAyMzo1OTo2MCBVVENcbiIpOwogCQlocnRpbWVyX2FkZF9leHBpcmVzX25zKCZsZWFwX3RpbWVyLCBOU0VDX1BFUl9TRUMpOwogCQlyZXMgPSBIUlRJTUVSX1JFU1RBUlQ7CiAJCWJyZWFrOwpAQCAtMTUwLDggKzIwNyw4IEBACiAJCXRpbWVfdGFpLS07CiAJCXdhbGxfdG9fbW9ub3RvbmljLnR2X3NlYy0tOwogCQl0aW1lX3N0YXRlID0gVElNRV9XQUlUOwotCQlwcmludGsoS0VSTl9OT1RJQ0UgIkNsb2NrOiAiCi0JCSAgICAgICAiZGVsZXRpbmcgbGVhcCBzZWNvbmQgMjM6NTk6NTkgVVRDXG4iKTsKKwkJcHJpbnRrKEtFUk5fTk9USUNFCisJCQkiQ2xvY2s6IGRlbGV0aW5nIGxlYXAgc2Vjb25kIDIzOjU5OjU5IFVUQ1xuIik7CiAJCWJyZWFrOwogCWNhc2UgVElNRV9PT1A6CiAJCXRpbWVfdGFpKys7CkBAIC0xNzksNyArMjM2LDcgQEAKICAqLwogdm9pZCBzZWNvbmRfb3ZlcmZsb3codm9pZCkKIHsKLQlzNjQgdGltZV9hZGo7CisJczY0IGRlbHRhOwogCiAJLyogQnVtcCB0aGUgbWF4ZXJyb3IgZmllbGQgKi8KIAl0aW1lX21heGVycm9yICs9IE1BWEZSRVEgLyBOU0VDX1BFUl9VU0VDOwpAQCAtMTkyLDI0ICsyNDksMzAgQEAKIAkgKiBDb21wdXRlIHRoZSBwaGFzZSBhZGp1c3RtZW50IGZvciB0aGUgbmV4dCBzZWNvbmQuIFRoZSBvZmZzZXQgaXMKIAkgKiByZWR1Y2VkIGJ5IGEgZml4ZWQgZmFjdG9yIHRpbWVzIHRoZSB0aW1lIGNvbnN0YW50LgogCSAqLwotCXRpY2tfbGVuZ3RoID0gdGlja19sZW5ndGhfYmFzZTsKLQl0aW1lX2FkaiA9IHNoaWZ0X3JpZ2h0KHRpbWVfb2Zmc2V0LCBTSElGVF9QTEwgKyB0aW1lX2NvbnN0YW50KTsKLQl0aW1lX29mZnNldCAtPSB0aW1lX2FkajsKLQl0aWNrX2xlbmd0aCArPSB0aW1lX2FkajsKKwl0aWNrX2xlbmd0aAkgPSB0aWNrX2xlbmd0aF9iYXNlOwogCi0JaWYgKHVubGlrZWx5KHRpbWVfYWRqdXN0KSkgewotCQlpZiAodGltZV9hZGp1c3QgPiBNQVhfVElDS0FESikgewotCQkJdGltZV9hZGp1c3QgLT0gTUFYX1RJQ0tBREo7Ci0JCQl0aWNrX2xlbmd0aCArPSBNQVhfVElDS0FESl9TQ0FMRUQ7Ci0JCX0gZWxzZSBpZiAodGltZV9hZGp1c3QgPCAtTUFYX1RJQ0tBREopIHsKLQkJCXRpbWVfYWRqdXN0ICs9IE1BWF9USUNLQURKOwotCQkJdGlja19sZW5ndGggLT0gTUFYX1RJQ0tBREpfU0NBTEVEOwotCQl9IGVsc2UgewotCQkJdGlja19sZW5ndGggKz0gKHM2NCkodGltZV9hZGp1c3QgKiBOU0VDX1BFUl9VU0VDIC8KLQkJCQkJTlRQX0lOVEVSVkFMX0ZSRVEpIDw8IE5UUF9TQ0FMRV9TSElGVDsKLQkJCXRpbWVfYWRqdXN0ID0gMDsKLQkJfQorCWRlbHRhCQkgPSBzaGlmdF9yaWdodCh0aW1lX29mZnNldCwgU0hJRlRfUExMICsgdGltZV9jb25zdGFudCk7CisJdGltZV9vZmZzZXQJLT0gZGVsdGE7CisJdGlja19sZW5ndGgJKz0gZGVsdGE7CisKKwlpZiAoIXRpbWVfYWRqdXN0KQorCQlyZXR1cm47CisKKwlpZiAodGltZV9hZGp1c3QgPiBNQVhfVElDS0FESikgeworCQl0aW1lX2FkanVzdCAtPSBNQVhfVElDS0FESjsKKwkJdGlja19sZW5ndGggKz0gTUFYX1RJQ0tBREpfU0NBTEVEOworCQlyZXR1cm47CiAJfQorCisJaWYgKHRpbWVfYWRqdXN0IDwgLU1BWF9USUNLQURKKSB7CisJCXRpbWVfYWRqdXN0ICs9IE1BWF9USUNLQURKOworCQl0aWNrX2xlbmd0aCAtPSBNQVhfVElDS0FESl9TQ0FMRUQ7CisJCXJldHVybjsKKwl9CisKKwl0aWNrX2xlbmd0aCArPSAoczY0KSh0aW1lX2FkanVzdCAqIE5TRUNfUEVSX1VTRUMgLyBOVFBfSU5URVJWQUxfRlJFUSkKKwkJCQkJCQkgPDwgTlRQX1NDQUxFX1NISUZUOworCXRpbWVfYWRqdXN0ID0gMDsKIH0KIAogI2lmZGVmIENPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFCkBAIC0yMzMsMTIgKzI5NiwxMyBAQAogCSAqIFRoaXMgY29kZSBpcyBydW4gb24gYSB0aW1lci4gIElmIHRoZSBjbG9jayBpcyBzZXQsIHRoYXQgdGltZXIKIAkgKiBtYXkgbm90IGV4cGlyZSBhdCB0aGUgY29ycmVjdCB0aW1lLiAgVGh1cywgd2UgYWRqdXN0Li4uCiAJICovCi0JaWYgKCFudHBfc3luY2VkKCkpCisJaWYgKCFudHBfc3luY2VkKCkpIHsKIAkJLyoKIAkJICogTm90IHN5bmNlZCwgZXhpdCwgZG8gbm90IHJlc3RhcnQgYSB0aW1lciAoaWYgb25lIGlzCiAJCSAqIHJ1bm5pbmcsIGxldCBpdCBydW4gb3V0KS4KIAkJICovCiAJCXJldHVybjsKKwl9CiAKIAlnZXRuc3RpbWVvZmRheSgmbm93KTsKIAlpZiAoYWJzKG5vdy50dl9uc2VjIC0gKE5TRUNfUEVSX1NFQyAvIDIpKSA8PSB0aWNrX25zZWMgLyAyKQpAQCAtMjcwLDcgKzMzNCwxMTYgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBub3RpZnlfY21vc190aW1lcih2b2lkKSB7IH0KICNlbmRpZgogCi0vKiBhZGp0aW1leCBtYWlubHkgYWxsb3dzIHJlYWRpbmcgKGFuZCB3cml0aW5nLCBpZiBzdXBlcnVzZXIpIG9mCisvKgorICogU3RhcnQgdGhlIGxlYXAgc2Vjb25kcyB0aW1lcjoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIG50cF9zdGFydF9sZWFwX3RpbWVyKHN0cnVjdCB0aW1lc3BlYyAqdHMpCit7CisJbG9uZyBub3cgPSB0cy0+dHZfc2VjOworCisJaWYgKHRpbWVfc3RhdHVzICYgU1RBX0lOUykgeworCQl0aW1lX3N0YXRlID0gVElNRV9JTlM7CisJCW5vdyArPSA4NjQwMCAtIG5vdyAlIDg2NDAwOworCQlocnRpbWVyX3N0YXJ0KCZsZWFwX3RpbWVyLCBrdGltZV9zZXQobm93LCAwKSwgSFJUSU1FUl9NT0RFX0FCUyk7CisKKwkJcmV0dXJuOworCX0KKworCWlmICh0aW1lX3N0YXR1cyAmIFNUQV9ERUwpIHsKKwkJdGltZV9zdGF0ZSA9IFRJTUVfREVMOworCQlub3cgKz0gODY0MDAgLSAobm93ICsgMSkgJSA4NjQwMDsKKwkJaHJ0aW1lcl9zdGFydCgmbGVhcF90aW1lciwga3RpbWVfc2V0KG5vdywgMCksIEhSVElNRVJfTU9ERV9BQlMpOworCX0KK30KKworLyoKKyAqIFByb3BhZ2F0ZSBhIG5ldyB0eGMtPnN0YXR1cyB2YWx1ZSBpbnRvIHRoZSBOVFAgc3RhdGU6CisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBwcm9jZXNzX2Fkal9zdGF0dXMoc3RydWN0IHRpbWV4ICp0eGMsIHN0cnVjdCB0aW1lc3BlYyAqdHMpCit7CisJaWYgKCh0aW1lX3N0YXR1cyAmIFNUQV9QTEwpICYmICEodHhjLT5zdGF0dXMgJiBTVEFfUExMKSkgeworCQl0aW1lX3N0YXRlID0gVElNRV9PSzsKKwkJdGltZV9zdGF0dXMgPSBTVEFfVU5TWU5DOworCX0KKworCS8qCisJICogSWYgd2UgdHVybiBvbiBQTEwgYWRqdXN0bWVudHMgdGhlbiByZXNldCB0aGUKKwkgKiByZWZlcmVuY2UgdGltZSB0byBjdXJyZW50IHRpbWUuCisJICovCisJaWYgKCEodGltZV9zdGF0dXMgJiBTVEFfUExMKSAmJiAodHhjLT5zdGF0dXMgJiBTVEFfUExMKSkKKwkJdGltZV9yZWZ0aW1lID0geHRpbWUudHZfc2VjOworCisJLyogb25seSBzZXQgYWxsb3dlZCBiaXRzICovCisJdGltZV9zdGF0dXMgJj0gU1RBX1JPTkxZOworCXRpbWVfc3RhdHVzIHw9IHR4Yy0+c3RhdHVzICYgflNUQV9ST05MWTsKKworCXN3aXRjaCAodGltZV9zdGF0ZSkgeworCWNhc2UgVElNRV9PSzoKKwkJbnRwX3N0YXJ0X2xlYXBfdGltZXIodHMpOworCQlicmVhazsKKwljYXNlIFRJTUVfSU5TOgorCWNhc2UgVElNRV9ERUw6CisJCXRpbWVfc3RhdGUgPSBUSU1FX09LOworCQludHBfc3RhcnRfbGVhcF90aW1lcih0cyk7CisJY2FzZSBUSU1FX1dBSVQ6CisJCWlmICghKHRpbWVfc3RhdHVzICYgKFNUQV9JTlMgfCBTVEFfREVMKSkpCisJCQl0aW1lX3N0YXRlID0gVElNRV9PSzsKKwkJYnJlYWs7CisJY2FzZSBUSU1FX09PUDoKKwkJaHJ0aW1lcl9yZXN0YXJ0KCZsZWFwX3RpbWVyKTsKKwkJYnJlYWs7CisJfQorfQorLyoKKyAqIENhbGxlZCB3aXRoIHRoZSB4dGltZSBsb2NrIGhlbGQsIHNvIHdlIGNhbiBhY2Nlc3MgYW5kIG1vZGlmeQorICogYWxsIHRoZSBnbG9iYWwgTlRQIHN0YXRlOgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgcHJvY2Vzc19hZGp0aW1leF9tb2RlcyhzdHJ1Y3QgdGltZXggKnR4Yywgc3RydWN0IHRpbWVzcGVjICp0cykKK3sKKwlpZiAodHhjLT5tb2RlcyAmIEFESl9TVEFUVVMpCisJCXByb2Nlc3NfYWRqX3N0YXR1cyh0eGMsIHRzKTsKKworCWlmICh0eGMtPm1vZGVzICYgQURKX05BTk8pCisJCXRpbWVfc3RhdHVzIHw9IFNUQV9OQU5POworCisJaWYgKHR4Yy0+bW9kZXMgJiBBREpfTUlDUk8pCisJCXRpbWVfc3RhdHVzICY9IH5TVEFfTkFOTzsKKworCWlmICh0eGMtPm1vZGVzICYgQURKX0ZSRVFVRU5DWSkgeworCQl0aW1lX2ZyZXEgPSB0eGMtPmZyZXEgKiBQUE1fU0NBTEU7CisJCXRpbWVfZnJlcSA9IG1pbih0aW1lX2ZyZXEsIE1BWEZSRVFfU0NBTEVEKTsKKwkJdGltZV9mcmVxID0gbWF4KHRpbWVfZnJlcSwgLU1BWEZSRVFfU0NBTEVEKTsKKwl9CisKKwlpZiAodHhjLT5tb2RlcyAmIEFESl9NQVhFUlJPUikKKwkJdGltZV9tYXhlcnJvciA9IHR4Yy0+bWF4ZXJyb3I7CisKKwlpZiAodHhjLT5tb2RlcyAmIEFESl9FU1RFUlJPUikKKwkJdGltZV9lc3RlcnJvciA9IHR4Yy0+ZXN0ZXJyb3I7CisKKwlpZiAodHhjLT5tb2RlcyAmIEFESl9USU1FQ09OU1QpIHsKKwkJdGltZV9jb25zdGFudCA9IHR4Yy0+Y29uc3RhbnQ7CisJCWlmICghKHRpbWVfc3RhdHVzICYgU1RBX05BTk8pKQorCQkJdGltZV9jb25zdGFudCArPSA0OworCQl0aW1lX2NvbnN0YW50ID0gbWluKHRpbWVfY29uc3RhbnQsIChsb25nKU1BWFRDKTsKKwkJdGltZV9jb25zdGFudCA9IG1heCh0aW1lX2NvbnN0YW50LCAwbCk7CisJfQorCisJaWYgKHR4Yy0+bW9kZXMgJiBBREpfVEFJICYmIHR4Yy0+Y29uc3RhbnQgPiAwKQorCQl0aW1lX3RhaSA9IHR4Yy0+Y29uc3RhbnQ7CisKKwlpZiAodHhjLT5tb2RlcyAmIEFESl9PRkZTRVQpCisJCW50cF91cGRhdGVfb2Zmc2V0KHR4Yy0+b2Zmc2V0KTsKKworCWlmICh0eGMtPm1vZGVzICYgQURKX1RJQ0spCisJCXRpY2tfdXNlYyA9IHR4Yy0+dGljazsKKworCWlmICh0eGMtPm1vZGVzICYgKEFESl9USUNLfEFESl9GUkVRVUVOQ1l8QURKX09GRlNFVCkpCisJCW50cF91cGRhdGVfZnJlcXVlbmN5KCk7Cit9CisKKy8qCisgKiBhZGp0aW1leCBtYWlubHkgYWxsb3dzIHJlYWRpbmcgKGFuZCB3cml0aW5nLCBpZiBzdXBlcnVzZXIpIG9mCiAgKiBrZXJuZWwgdGltZS1rZWVwaW5nIHZhcmlhYmxlcy4gdXNlZCBieSB4bnRwZC4KICAqLwogaW50IGRvX2FkanRpbWV4KHN0cnVjdCB0aW1leCAqdHhjKQpAQCAtMjkxLDExICs0NjQsMTQgQEAKIAkJIGlmICh0eGMtPm1vZGVzICYmICFjYXBhYmxlKENBUF9TWVNfVElNRSkpCiAJCQlyZXR1cm4gLUVQRVJNOwogCi0JCS8qIGlmIHRoZSBxdWFydHogaXMgb2ZmIGJ5IG1vcmUgdGhhbiAxMCUgc29tZXRoaW5nIGlzIFZFUlkgd3JvbmchICovCisJCS8qCisJCSAqIGlmIHRoZSBxdWFydHogaXMgb2ZmIGJ5IG1vcmUgdGhhbiAxMCUgdGhlbgorCQkgKiBzb21ldGhpbmcgaXMgVkVSWSB3cm9uZyEKKwkJICovCiAJCWlmICh0eGMtPm1vZGVzICYgQURKX1RJQ0sgJiYKIAkJICAgICh0eGMtPnRpY2sgPCAgOTAwMDAwL1VTRVJfSFogfHwKIAkJICAgICB0eGMtPnRpY2sgPiAxMTAwMDAwL1VTRVJfSFopKQotCQkJCXJldHVybiAtRUlOVkFMOworCQkJcmV0dXJuIC1FSU5WQUw7CiAKIAkJaWYgKHR4Yy0+bW9kZXMgJiBBREpfU1RBVFVTICYmIHRpbWVfc3RhdGUgIT0gVElNRV9PSykKIAkJCWhydGltZXJfY2FuY2VsKCZsZWFwX3RpbWVyKTsKQEAgLTMwNSw3ICs0ODEsNiBAQAogCiAJd3JpdGVfc2VxbG9ja19pcnEoJnh0aW1lX2xvY2spOwogCi0JLyogSWYgdGhlcmUgYXJlIGlucHV0IHBhcmFtZXRlcnMsIHRoZW4gcHJvY2VzcyB0aGVtICovCiAJaWYgKHR4Yy0+bW9kZXMgJiBBREpfQURKVElNRSkgewogCQlsb25nIHNhdmVfYWRqdXN0ID0gdGltZV9hZGp1c3Q7CiAKQEAgLTMxNSw5OCArNDkwLDI0IEBACiAJCQludHBfdXBkYXRlX2ZyZXF1ZW5jeSgpOwogCQl9CiAJCXR4Yy0+b2Zmc2V0ID0gc2F2ZV9hZGp1c3Q7Ci0JCWdvdG8gYWRqX2RvbmU7Ci0JfQotCWlmICh0eGMtPm1vZGVzKSB7Ci0JCWxvbmcgc2VjOworCX0gZWxzZSB7CiAKLQkJaWYgKHR4Yy0+bW9kZXMgJiBBREpfU1RBVFVTKSB7Ci0JCQlpZiAoKHRpbWVfc3RhdHVzICYgU1RBX1BMTCkgJiYKLQkJCSAgICAhKHR4Yy0+c3RhdHVzICYgU1RBX1BMTCkpIHsKLQkJCQl0aW1lX3N0YXRlID0gVElNRV9PSzsKLQkJCQl0aW1lX3N0YXR1cyA9IFNUQV9VTlNZTkM7Ci0JCQl9Ci0JCQkvKiBvbmx5IHNldCBhbGxvd2VkIGJpdHMgKi8KLQkJCXRpbWVfc3RhdHVzICY9IFNUQV9ST05MWTsKLQkJCXRpbWVfc3RhdHVzIHw9IHR4Yy0+c3RhdHVzICYgflNUQV9ST05MWTsKKwkJLyogSWYgdGhlcmUgYXJlIGlucHV0IHBhcmFtZXRlcnMsIHRoZW4gcHJvY2VzcyB0aGVtOiAqLworCQlpZiAodHhjLT5tb2RlcykKKwkJCXByb2Nlc3NfYWRqdGltZXhfbW9kZXModHhjLCAmdHMpOwogCi0JCQlzd2l0Y2ggKHRpbWVfc3RhdGUpIHsKLQkJCWNhc2UgVElNRV9PSzoKLQkJCXN0YXJ0X3RpbWVyOgotCQkJCXNlYyA9IHRzLnR2X3NlYzsKLQkJCQlpZiAodGltZV9zdGF0dXMgJiBTVEFfSU5TKSB7Ci0JCQkJCXRpbWVfc3RhdGUgPSBUSU1FX0lOUzsKLQkJCQkJc2VjICs9IDg2NDAwIC0gc2VjICUgODY0MDA7Ci0JCQkJCWhydGltZXJfc3RhcnQoJmxlYXBfdGltZXIsIGt0aW1lX3NldChzZWMsIDApLCBIUlRJTUVSX01PREVfQUJTKTsKLQkJCQl9IGVsc2UgaWYgKHRpbWVfc3RhdHVzICYgU1RBX0RFTCkgewotCQkJCQl0aW1lX3N0YXRlID0gVElNRV9ERUw7Ci0JCQkJCXNlYyArPSA4NjQwMCAtIChzZWMgKyAxKSAlIDg2NDAwOwotCQkJCQlocnRpbWVyX3N0YXJ0KCZsZWFwX3RpbWVyLCBrdGltZV9zZXQoc2VjLCAwKSwgSFJUSU1FUl9NT0RFX0FCUyk7Ci0JCQkJfQotCQkJCWJyZWFrOwotCQkJY2FzZSBUSU1FX0lOUzoKLQkJCWNhc2UgVElNRV9ERUw6Ci0JCQkJdGltZV9zdGF0ZSA9IFRJTUVfT0s7Ci0JCQkJZ290byBzdGFydF90aW1lcjsKLQkJCQlicmVhazsKLQkJCWNhc2UgVElNRV9XQUlUOgotCQkJCWlmICghKHRpbWVfc3RhdHVzICYgKFNUQV9JTlMgfCBTVEFfREVMKSkpCi0JCQkJCXRpbWVfc3RhdGUgPSBUSU1FX09LOwotCQkJCWJyZWFrOwotCQkJY2FzZSBUSU1FX09PUDoKLQkJCQlocnRpbWVyX3Jlc3RhcnQoJmxlYXBfdGltZXIpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0KLQkJaWYgKHR4Yy0+bW9kZXMgJiBBREpfTkFOTykKLQkJCXRpbWVfc3RhdHVzIHw9IFNUQV9OQU5POwotCQlpZiAodHhjLT5tb2RlcyAmIEFESl9NSUNSTykKLQkJCXRpbWVfc3RhdHVzICY9IH5TVEFfTkFOTzsKLQotCQlpZiAodHhjLT5tb2RlcyAmIEFESl9GUkVRVUVOQ1kpIHsKLQkJCXRpbWVfZnJlcSA9IChzNjQpdHhjLT5mcmVxICogUFBNX1NDQUxFOwotCQkJdGltZV9mcmVxID0gbWluKHRpbWVfZnJlcSwgTUFYRlJFUV9TQ0FMRUQpOwotCQkJdGltZV9mcmVxID0gbWF4KHRpbWVfZnJlcSwgLU1BWEZSRVFfU0NBTEVEKTsKLQkJfQotCi0JCWlmICh0eGMtPm1vZGVzICYgQURKX01BWEVSUk9SKQotCQkJdGltZV9tYXhlcnJvciA9IHR4Yy0+bWF4ZXJyb3I7Ci0JCWlmICh0eGMtPm1vZGVzICYgQURKX0VTVEVSUk9SKQotCQkJdGltZV9lc3RlcnJvciA9IHR4Yy0+ZXN0ZXJyb3I7Ci0KLQkJaWYgKHR4Yy0+bW9kZXMgJiBBREpfVElNRUNPTlNUKSB7Ci0JCQl0aW1lX2NvbnN0YW50ID0gdHhjLT5jb25zdGFudDsKLQkJCWlmICghKHRpbWVfc3RhdHVzICYgU1RBX05BTk8pKQotCQkJCXRpbWVfY29uc3RhbnQgKz0gNDsKLQkJCXRpbWVfY29uc3RhbnQgPSBtaW4odGltZV9jb25zdGFudCwgKGxvbmcpTUFYVEMpOwotCQkJdGltZV9jb25zdGFudCA9IG1heCh0aW1lX2NvbnN0YW50LCAwbCk7Ci0JCX0KLQotCQlpZiAodHhjLT5tb2RlcyAmIEFESl9UQUkgJiYgdHhjLT5jb25zdGFudCA+IDApCi0JCQl0aW1lX3RhaSA9IHR4Yy0+Y29uc3RhbnQ7Ci0KLQkJaWYgKHR4Yy0+bW9kZXMgJiBBREpfT0ZGU0VUKQotCQkJbnRwX3VwZGF0ZV9vZmZzZXQodHhjLT5vZmZzZXQpOwotCQlpZiAodHhjLT5tb2RlcyAmIEFESl9USUNLKQotCQkJdGlja191c2VjID0gdHhjLT50aWNrOwotCi0JCWlmICh0eGMtPm1vZGVzICYgKEFESl9USUNLfEFESl9GUkVRVUVOQ1l8QURKX09GRlNFVCkpCi0JCQludHBfdXBkYXRlX2ZyZXF1ZW5jeSgpOwotCX0KLQotCXR4Yy0+b2Zmc2V0ID0gc2hpZnRfcmlnaHQodGltZV9vZmZzZXQgKiBOVFBfSU5URVJWQUxfRlJFUSwKKwkJdHhjLT5vZmZzZXQgPSBzaGlmdF9yaWdodCh0aW1lX29mZnNldCAqIE5UUF9JTlRFUlZBTF9GUkVRLAogCQkJCSAgTlRQX1NDQUxFX1NISUZUKTsKLQlpZiAoISh0aW1lX3N0YXR1cyAmIFNUQV9OQU5PKSkKLQkJdHhjLT5vZmZzZXQgLz0gTlNFQ19QRVJfVVNFQzsKKwkJaWYgKCEodGltZV9zdGF0dXMgJiBTVEFfTkFOTykpCisJCQl0eGMtPm9mZnNldCAvPSBOU0VDX1BFUl9VU0VDOworCX0KIAotYWRqX2RvbmU6CiAJcmVzdWx0ID0gdGltZV9zdGF0ZTsJLyogbW9zdGx5IGBUSU1FX09LJyAqLwogCWlmICh0aW1lX3N0YXR1cyAmIChTVEFfVU5TWU5DfFNUQV9DTE9DS0VSUikpCiAJCXJlc3VsdCA9IFRJTUVfRVJST1I7CiAKIAl0eGMtPmZyZXEJICAgPSBzaGlmdF9yaWdodCgodGltZV9mcmVxID4+IFBQTV9TQ0FMRV9JTlZfU0hJRlQpICoKLQkJCQkJIChzNjQpUFBNX1NDQUxFX0lOViwgTlRQX1NDQUxFX1NISUZUKTsKKwkJCQkJIFBQTV9TQ0FMRV9JTlYsIE5UUF9TQ0FMRV9TSElGVCk7CiAJdHhjLT5tYXhlcnJvcgkgICA9IHRpbWVfbWF4ZXJyb3I7CiAJdHhjLT5lc3RlcnJvcgkgICA9IHRpbWVfZXN0ZXJyb3I7CiAJdHhjLT5zdGF0dXMJICAgPSB0aW1lX3N0YXR1czsKQEAgLTQyNSw2ICs1MjYsNyBAQAogCXR4Yy0+Y2FsY250CSAgID0gMDsKIAl0eGMtPmVycmNudAkgICA9IDA7CiAJdHhjLT5zdGJjbnQJICAgPSAwOworCiAJd3JpdGVfc2VxdW5sb2NrX2lycSgmeHRpbWVfbG9jayk7CiAKIAl0eGMtPnRpbWUudHZfc2VjID0gdHMudHZfc2VjOwpAQCAtNDQwLDYgKzU0Miw4IEBACiBzdGF0aWMgaW50IF9faW5pdCBudHBfdGlja19hZGpfc2V0dXAoY2hhciAqc3RyKQogewogCW50cF90aWNrX2FkaiA9IHNpbXBsZV9zdHJ0b2woc3RyLCBOVUxMLCAwKTsKKwludHBfdGlja19hZGogPDw9IE5UUF9TQ0FMRV9TSElGVDsKKwogCXJldHVybiAxOwogfQogCmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS90aW1lY29tcGFyZS5jIGIva2VybmVsL3RpbWUvdGltZWNvbXBhcmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWU3ZjFhCi0tLSAvZGV2L251bGwKKysrIGIva2VybmVsL3RpbWUvdGltZWNvbXBhcmUuYwpAQCAtMCwwICsxLDE5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAqIEF1dGhvcjogUGF0cmljayBPaGx5IDxwYXRyaWNrLm9obHlAaW50ZWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC90aW1lY29tcGFyZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21hdGg2NC5oPgorCisvKgorICogZml4ZWQgcG9pbnQgYXJpdGhtZXRpYyBzY2FsZSBmYWN0b3IgZm9yIHNrZXcKKyAqCisgKiBVc3VhbGx5IG9uZSB3b3VsZCBtZWFzdXJlIHNrZXcgaW4gcHBiIChwYXJ0cyBwZXIgYmlsbGlvbiwgMWU5KSwgYnV0CisgKiB1c2luZyBhIGZhY3RvciBvZiAyIHNpbXBsaWZpZXMgdGhlIG1hdGguCisgKi8KKyNkZWZpbmUgVElNRUNPTVBBUkVfU0tFV19SRVNPTFVUSU9OICgoKHM2NCkxKTw8MzApCisKK2t0aW1lX3QgdGltZWNvbXBhcmVfdHJhbnNmb3JtKHN0cnVjdCB0aW1lY29tcGFyZSAqc3luYywKKwkJCSAgICAgIHU2NCBzb3VyY2VfdHN0YW1wKQoreworCXU2NCBuc2VjOworCisJbnNlYyA9IHNvdXJjZV90c3RhbXAgKyBzeW5jLT5vZmZzZXQ7CisJbnNlYyArPSAoczY0KShzb3VyY2VfdHN0YW1wIC0gc3luYy0+bGFzdF91cGRhdGUpICogc3luYy0+c2tldyAvCisJCVRJTUVDT01QQVJFX1NLRVdfUkVTT0xVVElPTjsKKworCXJldHVybiBuc190b19rdGltZShuc2VjKTsKK30KK0VYUE9SVF9TWU1CT0wodGltZWNvbXBhcmVfdHJhbnNmb3JtKTsKKworaW50IHRpbWVjb21wYXJlX29mZnNldChzdHJ1Y3QgdGltZWNvbXBhcmUgKnN5bmMsCisJCSAgICAgICBzNjQgKm9mZnNldCwKKwkJICAgICAgIHU2NCAqc291cmNlX3RzdGFtcCkKK3sKKwl1NjQgc3RhcnRfc291cmNlID0gMCwgZW5kX3NvdXJjZSA9IDA7CisJc3RydWN0IHsKKwkJczY0IG9mZnNldDsKKwkJczY0IGR1cmF0aW9uX3RhcmdldDsKKwl9IGJ1ZmZlclsxMF0sIHNhbXBsZSwgKnNhbXBsZXM7CisJaW50IGNvdW50ZXIgPSAwLCBpOworCWludCB1c2VkOworCWludCBpbmRleDsKKwlpbnQgbnVtX3NhbXBsZXMgPSBzeW5jLT5udW1fc2FtcGxlczsKKworCWlmIChudW1fc2FtcGxlcyA+IHNpemVvZihidWZmZXIpL3NpemVvZihidWZmZXJbMF0pKSB7CisJCXNhbXBsZXMgPSBrbWFsbG9jKHNpemVvZigqc2FtcGxlcykgKiBudW1fc2FtcGxlcywgR0ZQX0FUT01JQyk7CisJCWlmICghc2FtcGxlcykgeworCQkJc2FtcGxlcyA9IGJ1ZmZlcjsKKwkJCW51bV9zYW1wbGVzID0gc2l6ZW9mKGJ1ZmZlcikvc2l6ZW9mKGJ1ZmZlclswXSk7CisJCX0KKwl9IGVsc2UgeworCQlzYW1wbGVzID0gYnVmZmVyOworCX0KKworCS8qIHJ1biB1bnRpbCB3ZSBoYXZlIGVub3VnaCB2YWxpZCBzYW1wbGVzLCBidXQgZG8gbm90IHRyeSBmb3JldmVyICovCisJaSA9IDA7CisJY291bnRlciA9IDA7CisJd2hpbGUgKDEpIHsKKwkJdTY0IHRzOworCQlrdGltZV90IHN0YXJ0LCBlbmQ7CisKKwkJc3RhcnQgPSBzeW5jLT50YXJnZXQoKTsKKwkJdHMgPSB0aW1lY291bnRlcl9yZWFkKHN5bmMtPnNvdXJjZSk7CisJCWVuZCA9IHN5bmMtPnRhcmdldCgpOworCisJCWlmICghaSkKKwkJCXN0YXJ0X3NvdXJjZSA9IHRzOworCisJCS8qIGlnbm9yZSBuZWdhdGl2ZSBkdXJhdGlvbnMgKi8KKwkJc2FtcGxlLmR1cmF0aW9uX3RhcmdldCA9IGt0aW1lX3RvX25zKGt0aW1lX3N1YihlbmQsIHN0YXJ0KSk7CisJCWlmIChzYW1wbGUuZHVyYXRpb25fdGFyZ2V0ID49IDApIHsKKwkJCS8qCisJCQkgKiBhc3N1bWUgc3ltZXRyaWMgZGVsYXkgdG8gYW5kIGZyb20gc291cmNlOgorCQkJICogYXZlcmFnZSB0YXJnZXQgdGltZSBjb3JyZXNwb25kcyB0byBtZWFzdXJlZAorCQkJICogc291cmNlIHRpbWUKKwkJCSAqLworCQkJc2FtcGxlLm9mZnNldCA9CisJCQkJa3RpbWVfdG9fbnMoa3RpbWVfYWRkKGVuZCwgc3RhcnQpKSAvIDIgLQorCQkJCXRzOworCisJCQkvKiBzaW1wbGUgaW5zZXJ0aW9uIHNvcnQgYmFzZWQgb24gZHVyYXRpb24gKi8KKwkJCWluZGV4ID0gY291bnRlciAtIDE7CisJCQl3aGlsZSAoaW5kZXggPj0gMCkgeworCQkJCWlmIChzYW1wbGVzW2luZGV4XS5kdXJhdGlvbl90YXJnZXQgPAorCQkJCSAgICBzYW1wbGUuZHVyYXRpb25fdGFyZ2V0KQorCQkJCQlicmVhazsKKwkJCQlzYW1wbGVzW2luZGV4ICsgMV0gPSBzYW1wbGVzW2luZGV4XTsKKwkJCQlpbmRleC0tOworCQkJfQorCQkJc2FtcGxlc1tpbmRleCArIDFdID0gc2FtcGxlOworCQkJY291bnRlcisrOworCQl9CisKKwkJaSsrOworCQlpZiAoY291bnRlciA+PSBudW1fc2FtcGxlcyB8fCBpID49IDEwMDAwMCkgeworCQkJZW5kX3NvdXJjZSA9IHRzOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkqc291cmNlX3RzdGFtcCA9IChlbmRfc291cmNlICsgc3RhcnRfc291cmNlKSAvIDI7CisKKwkvKiByZW1vdmUgb3V0bGllcnMgYnkgb25seSB1c2luZyA3NSUgb2YgdGhlIHNhbXBsZXMgKi8KKwl1c2VkID0gY291bnRlciAqIDMgLyA0OworCWlmICghdXNlZCkKKwkJdXNlZCA9IGNvdW50ZXI7CisJaWYgKHVzZWQpIHsKKwkJLyogY2FsY3VsYXRlIGF2ZXJhZ2UgKi8KKwkJczY0IG9mZiA9IDA7CisJCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IHVzZWQ7IGluZGV4KyspCisJCQlvZmYgKz0gc2FtcGxlc1tpbmRleF0ub2Zmc2V0OworCQkqb2Zmc2V0ID0gZGl2X3M2NChvZmYsIHVzZWQpOworCX0KKworCWlmIChzYW1wbGVzICYmIHNhbXBsZXMgIT0gYnVmZmVyKQorCQlrZnJlZShzYW1wbGVzKTsKKworCXJldHVybiB1c2VkOworfQorRVhQT1JUX1NZTUJPTCh0aW1lY29tcGFyZV9vZmZzZXQpOworCit2b2lkIF9fdGltZWNvbXBhcmVfdXBkYXRlKHN0cnVjdCB0aW1lY29tcGFyZSAqc3luYywKKwkJCSAgdTY0IHNvdXJjZV90c3RhbXApCit7CisJczY0IG9mZnNldDsKKwl1NjQgYXZlcmFnZV90aW1lOworCisJaWYgKCF0aW1lY29tcGFyZV9vZmZzZXQoc3luYywgJm9mZnNldCwgJmF2ZXJhZ2VfdGltZSkpCisJCXJldHVybjsKKworCWlmICghc3luYy0+bGFzdF91cGRhdGUpIHsKKwkJc3luYy0+bGFzdF91cGRhdGUgPSBhdmVyYWdlX3RpbWU7CisJCXN5bmMtPm9mZnNldCA9IG9mZnNldDsKKwkJc3luYy0+c2tldyA9IDA7CisJfSBlbHNlIHsKKwkJczY0IGRlbHRhX25zZWMgPSBhdmVyYWdlX3RpbWUgLSBzeW5jLT5sYXN0X3VwZGF0ZTsKKworCQkvKiBhdm9pZCBkaXZpc2lvbiBieSBuZWdhdGl2ZSBvciBzbWFsbCBkZWx0YXMgKi8KKwkJaWYgKGRlbHRhX25zZWMgPj0gMTAwMDApIHsKKwkJCXM2NCBkZWx0YV9vZmZzZXRfbnNlYyA9IG9mZnNldCAtIHN5bmMtPm9mZnNldDsKKwkJCXM2NCBza2V3OyAvKiBkZWx0YV9vZmZzZXRfbnNlYyAqCisJCQkJICAgICBUSU1FQ09NUEFSRV9TS0VXX1JFU09MVVRJT04gLworCQkJCSAgICAgZGVsdGFfbnNlYyAqLworCQkJdTY0IGRpdmlzb3I7CisKKwkJCS8qIGRpdl9zNjQoKSBpcyBsaW1pdGVkIHRvIDMyIGJpdCBkaXZpc29yICovCisJCQlza2V3ID0gZGVsdGFfb2Zmc2V0X25zZWMgKiBUSU1FQ09NUEFSRV9TS0VXX1JFU09MVVRJT047CisJCQlkaXZpc29yID0gZGVsdGFfbnNlYzsKKwkJCXdoaWxlICh1bmxpa2VseShkaXZpc29yID49ICgoczY0KTEpIDw8IDMyKSkgeworCQkJCS8qIGRpdmlkZSBib3RoIGJ5IDI7IGJld2FyZSwgcmlnaHQgc2hpZnQKKwkJCQkgICBvZiBuZWdhdGl2ZSB2YWx1ZSBoYXMgdW5kZWZpbmVkCisJCQkJICAgYmVoYXZpb3IgYW5kIGNhbiBvbmx5IGJlIHVzZWQgZm9yCisJCQkJICAgdGhlIHBvc2l0aXZlIGRpdmlzb3IgKi8KKwkJCQlza2V3ID0gZGl2X3M2NChza2V3LCAyKTsKKwkJCQlkaXZpc29yID4+PSAxOworCQkJfQorCQkJc2tldyA9IGRpdl9zNjQoc2tldywgZGl2aXNvcik7CisKKwkJCS8qCisJCQkgKiBDYWxjdWxhdGUgbmV3IG92ZXJhbGwgc2tldyBhcyA0LzE2IHRoZQorCQkJICogb2xkIHZhbHVlIGFuZCAxMi8xNiB0aGUgbmV3IG9uZS4gVGhpcyBpcworCQkJICogYSByYXRoZXIgYXJiaXRyYXJ5IHRyYWRlb2ZmIGJldHdlZW4KKwkJCSAqIG9ubHkgdXNpbmcgdGhlIGxhdGVzdCBtZWFzdXJlbWVudCAoMC8xNiBhbmQKKwkJCSAqIDE2LzE2KSBhbmQgZXZlbiBtb3JlIHdlaWdodCBvbiBwYXN0IG1lYXN1cmVtZW50cy4KKwkJCSAqLworI2RlZmluZSBUSU1FQ09NUEFSRV9ORVdfU0tFV19QRVJfMTYgMTIKKwkJCXN5bmMtPnNrZXcgPQorCQkJCWRpdl9zNjQoKDE2IC0gVElNRUNPTVBBUkVfTkVXX1NLRVdfUEVSXzE2KSAqCisJCQkJCXN5bmMtPnNrZXcgKworCQkJCQlUSU1FQ09NUEFSRV9ORVdfU0tFV19QRVJfMTYgKiBza2V3LAorCQkJCQkxNik7CisJCQlzeW5jLT5sYXN0X3VwZGF0ZSA9IGF2ZXJhZ2VfdGltZTsKKwkJCXN5bmMtPm9mZnNldCA9IG9mZnNldDsKKwkJfQorCX0KK30KK0VYUE9SVF9TWU1CT0woX190aW1lY29tcGFyZV91cGRhdGUpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWVyLmMgYi9rZXJuZWwvdGltZXIuYwppbmRleCAxM2RkNjRmLi45Yjc3ZmM5IDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZXIuYworKysgYi9rZXJuZWwvdGltZXIuYwpAQCAtNTg5LDExICs1ODksMTQgQEAKIAl9CiB9CiAKLWludCBfX21vZF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIsIHVuc2lnbmVkIGxvbmcgZXhwaXJlcykKK3N0YXRpYyBpbmxpbmUgaW50CitfX21vZF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIsIHVuc2lnbmVkIGxvbmcgZXhwaXJlcywgYm9vbCBwZW5kaW5nX29ubHkpCiB7CiAJc3RydWN0IHR2ZWNfYmFzZSAqYmFzZSwgKm5ld19iYXNlOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldCA9IDA7CisJaW50IHJldDsKKworCXJldCA9IDA7CiAKIAl0aW1lcl9zdGF0c190aW1lcl9zZXRfc3RhcnRfaW5mbyh0aW1lcik7CiAJQlVHX09OKCF0aW1lci0+ZnVuY3Rpb24pOwpAQCAtNjAzLDYgKzYwNiw5IEBACiAJaWYgKHRpbWVyX3BlbmRpbmcodGltZXIpKSB7CiAJCWRldGFjaF90aW1lcih0aW1lciwgMCk7CiAJCXJldCA9IDE7CisJfSBlbHNlIHsKKwkJaWYgKHBlbmRpbmdfb25seSkKKwkJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKIAlkZWJ1Z190aW1lcl9hY3RpdmF0ZSh0aW1lcik7CkBAIC02MjksMTIgKzYzNSw4MyBAQAogCiAJdGltZXItPmV4cGlyZXMgPSBleHBpcmVzOwogCWludGVybmFsX2FkZF90aW1lcihiYXNlLCB0aW1lcik7CisKK291dF91bmxvY2s6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmFzZS0+bG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIHJldDsKIH0KIAotRVhQT1JUX1NZTUJPTChfX21vZF90aW1lcik7CisvKioKKyAqIG1vZF90aW1lcl9wZW5kaW5nIC0gbW9kaWZ5IGEgcGVuZGluZyB0aW1lcidzIHRpbWVvdXQKKyAqIEB0aW1lcjogdGhlIHBlbmRpbmcgdGltZXIgdG8gYmUgbW9kaWZpZWQKKyAqIEBleHBpcmVzOiBuZXcgdGltZW91dCBpbiBqaWZmaWVzCisgKgorICogbW9kX3RpbWVyX3BlbmRpbmcoKSBpcyB0aGUgc2FtZSBmb3IgcGVuZGluZyB0aW1lcnMgYXMgbW9kX3RpbWVyKCksCisgKiBidXQgd2lsbCBub3QgcmUtYWN0aXZhdGUgYW5kIG1vZGlmeSBhbHJlYWR5IGRlbGV0ZWQgdGltZXJzLgorICoKKyAqIEl0IGlzIHVzZWZ1bCBmb3IgdW5zZXJpYWxpemVkIHVzZSBvZiB0aW1lcnMuCisgKi8KK2ludCBtb2RfdGltZXJfcGVuZGluZyhzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIsIHVuc2lnbmVkIGxvbmcgZXhwaXJlcykKK3sKKwlyZXR1cm4gX19tb2RfdGltZXIodGltZXIsIGV4cGlyZXMsIHRydWUpOworfQorRVhQT1JUX1NZTUJPTChtb2RfdGltZXJfcGVuZGluZyk7CisKKy8qKgorICogbW9kX3RpbWVyIC0gbW9kaWZ5IGEgdGltZXIncyB0aW1lb3V0CisgKiBAdGltZXI6IHRoZSB0aW1lciB0byBiZSBtb2RpZmllZAorICogQGV4cGlyZXM6IG5ldyB0aW1lb3V0IGluIGppZmZpZXMKKyAqCisgKiBtb2RfdGltZXIoKSBpcyBhIG1vcmUgZWZmaWNpZW50IHdheSB0byB1cGRhdGUgdGhlIGV4cGlyZSBmaWVsZCBvZiBhbgorICogYWN0aXZlIHRpbWVyIChpZiB0aGUgdGltZXIgaXMgaW5hY3RpdmUgaXQgd2lsbCBiZSBhY3RpdmF0ZWQpCisgKgorICogbW9kX3RpbWVyKHRpbWVyLCBleHBpcmVzKSBpcyBlcXVpdmFsZW50IHRvOgorICoKKyAqICAgICBkZWxfdGltZXIodGltZXIpOyB0aW1lci0+ZXhwaXJlcyA9IGV4cGlyZXM7IGFkZF90aW1lcih0aW1lcik7CisgKgorICogTm90ZSB0aGF0IGlmIHRoZXJlIGFyZSBtdWx0aXBsZSB1bnNlcmlhbGl6ZWQgY29uY3VycmVudCB1c2VycyBvZiB0aGUKKyAqIHNhbWUgdGltZXIsIHRoZW4gbW9kX3RpbWVyKCkgaXMgdGhlIG9ubHkgc2FmZSB3YXkgdG8gbW9kaWZ5IHRoZSB0aW1lb3V0LAorICogc2luY2UgYWRkX3RpbWVyKCkgY2Fubm90IG1vZGlmeSBhbiBhbHJlYWR5IHJ1bm5pbmcgdGltZXIuCisgKgorICogVGhlIGZ1bmN0aW9uIHJldHVybnMgd2hldGhlciBpdCBoYXMgbW9kaWZpZWQgYSBwZW5kaW5nIHRpbWVyIG9yIG5vdC4KKyAqIChpZS4gbW9kX3RpbWVyKCkgb2YgYW4gaW5hY3RpdmUgdGltZXIgcmV0dXJucyAwLCBtb2RfdGltZXIoKSBvZiBhbgorICogYWN0aXZlIHRpbWVyIHJldHVybnMgMS4pCisgKi8KK2ludCBtb2RfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyLCB1bnNpZ25lZCBsb25nIGV4cGlyZXMpCit7CisJLyoKKwkgKiBUaGlzIGlzIGEgY29tbW9uIG9wdGltaXphdGlvbiB0cmlnZ2VyZWQgYnkgdGhlCisJICogbmV0d29ya2luZyBjb2RlIC0gaWYgdGhlIHRpbWVyIGlzIHJlLW1vZGlmaWVkCisJICogdG8gYmUgdGhlIHNhbWUgdGhpbmcgdGhlbiBqdXN0IHJldHVybjoKKwkgKi8KKwlpZiAodGltZXItPmV4cGlyZXMgPT0gZXhwaXJlcyAmJiB0aW1lcl9wZW5kaW5nKHRpbWVyKSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gX19tb2RfdGltZXIodGltZXIsIGV4cGlyZXMsIGZhbHNlKTsKK30KK0VYUE9SVF9TWU1CT0wobW9kX3RpbWVyKTsKKworLyoqCisgKiBhZGRfdGltZXIgLSBzdGFydCBhIHRpbWVyCisgKiBAdGltZXI6IHRoZSB0aW1lciB0byBiZSBhZGRlZAorICoKKyAqIFRoZSBrZXJuZWwgd2lsbCBkbyBhIC0+ZnVuY3Rpb24oLT5kYXRhKSBjYWxsYmFjayBmcm9tIHRoZQorICogdGltZXIgaW50ZXJydXB0IGF0IHRoZSAtPmV4cGlyZXMgcG9pbnQgaW4gdGhlIGZ1dHVyZS4gVGhlCisgKiBjdXJyZW50IHRpbWUgaXMgJ2ppZmZpZXMnLgorICoKKyAqIFRoZSB0aW1lcidzIC0+ZXhwaXJlcywgLT5mdW5jdGlvbiAoYW5kIGlmIHRoZSBoYW5kbGVyIHVzZXMgaXQsIC0+ZGF0YSkKKyAqIGZpZWxkcyBtdXN0IGJlIHNldCBwcmlvciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisgKgorICogVGltZXJzIHdpdGggYW4gLT5leHBpcmVzIGZpZWxkIGluIHRoZSBwYXN0IHdpbGwgYmUgZXhlY3V0ZWQgaW4gdGhlIG5leHQKKyAqIHRpbWVyIHRpY2suCisgKi8KK3ZvaWQgYWRkX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lcikKK3sKKwlCVUdfT04odGltZXJfcGVuZGluZyh0aW1lcikpOworCW1vZF90aW1lcih0aW1lciwgdGltZXItPmV4cGlyZXMpOworfQorRVhQT1JUX1NZTUJPTChhZGRfdGltZXIpOwogCiAvKioKICAqIGFkZF90aW1lcl9vbiAtIHN0YXJ0IGEgdGltZXIgb24gYSBwYXJ0aWN1bGFyIENQVQpAQCAtNjY3LDQ0ICs3NDQsNiBAQAogfQogCiAvKioKLSAqIG1vZF90aW1lciAtIG1vZGlmeSBhIHRpbWVyJ3MgdGltZW91dAotICogQHRpbWVyOiB0aGUgdGltZXIgdG8gYmUgbW9kaWZpZWQKLSAqIEBleHBpcmVzOiBuZXcgdGltZW91dCBpbiBqaWZmaWVzCi0gKgotICogbW9kX3RpbWVyKCkgaXMgYSBtb3JlIGVmZmljaWVudCB3YXkgdG8gdXBkYXRlIHRoZSBleHBpcmUgZmllbGQgb2YgYW4KLSAqIGFjdGl2ZSB0aW1lciAoaWYgdGhlIHRpbWVyIGlzIGluYWN0aXZlIGl0IHdpbGwgYmUgYWN0aXZhdGVkKQotICoKLSAqIG1vZF90aW1lcih0aW1lciwgZXhwaXJlcykgaXMgZXF1aXZhbGVudCB0bzoKLSAqCi0gKiAgICAgZGVsX3RpbWVyKHRpbWVyKTsgdGltZXItPmV4cGlyZXMgPSBleHBpcmVzOyBhZGRfdGltZXIodGltZXIpOwotICoKLSAqIE5vdGUgdGhhdCBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgdW5zZXJpYWxpemVkIGNvbmN1cnJlbnQgdXNlcnMgb2YgdGhlCi0gKiBzYW1lIHRpbWVyLCB0aGVuIG1vZF90aW1lcigpIGlzIHRoZSBvbmx5IHNhZmUgd2F5IHRvIG1vZGlmeSB0aGUgdGltZW91dCwKLSAqIHNpbmNlIGFkZF90aW1lcigpIGNhbm5vdCBtb2RpZnkgYW4gYWxyZWFkeSBydW5uaW5nIHRpbWVyLgotICoKLSAqIFRoZSBmdW5jdGlvbiByZXR1cm5zIHdoZXRoZXIgaXQgaGFzIG1vZGlmaWVkIGEgcGVuZGluZyB0aW1lciBvciBub3QuCi0gKiAoaWUuIG1vZF90aW1lcigpIG9mIGFuIGluYWN0aXZlIHRpbWVyIHJldHVybnMgMCwgbW9kX3RpbWVyKCkgb2YgYW4KLSAqIGFjdGl2ZSB0aW1lciByZXR1cm5zIDEuKQotICovCi1pbnQgbW9kX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lciwgdW5zaWduZWQgbG9uZyBleHBpcmVzKQotewotCUJVR19PTighdGltZXItPmZ1bmN0aW9uKTsKLQotCXRpbWVyX3N0YXRzX3RpbWVyX3NldF9zdGFydF9pbmZvKHRpbWVyKTsKLQkvKgotCSAqIFRoaXMgaXMgYSBjb21tb24gb3B0aW1pemF0aW9uIHRyaWdnZXJlZCBieSB0aGUKLQkgKiBuZXR3b3JraW5nIGNvZGUgLSBpZiB0aGUgdGltZXIgaXMgcmUtbW9kaWZpZWQKLQkgKiB0byBiZSB0aGUgc2FtZSB0aGluZyB0aGVuIGp1c3QgcmV0dXJuOgotCSAqLwotCWlmICh0aW1lci0+ZXhwaXJlcyA9PSBleHBpcmVzICYmIHRpbWVyX3BlbmRpbmcodGltZXIpKQotCQlyZXR1cm4gMTsKLQotCXJldHVybiBfX21vZF90aW1lcih0aW1lciwgZXhwaXJlcyk7Ci19Ci0KLUVYUE9SVF9TWU1CT0wobW9kX3RpbWVyKTsKLQotLyoqCiAgKiBkZWxfdGltZXIgLSBkZWFjdGl2ZSBhIHRpbWVyLgogICogQHRpbWVyOiB0aGUgdGltZXIgdG8gYmUgZGVhY3RpdmF0ZWQKICAqCkBAIC03MzMsNyArNzcyLDYgQEAKIAogCXJldHVybiByZXQ7CiB9Ci0KIEVYUE9SVF9TWU1CT0woZGVsX3RpbWVyKTsKIAogI2lmZGVmIENPTkZJR19TTVAKQEAgLTc2Nyw3ICs4MDUsNiBAQAogCiAJcmV0dXJuIHJldDsKIH0KLQogRVhQT1JUX1NZTUJPTCh0cnlfdG9fZGVsX3RpbWVyX3N5bmMpOwogCiAvKioKQEAgLTc5Niw3ICs4MzMsNiBAQAogCQljcHVfcmVsYXgoKTsKIAl9CiB9Ci0KIEVYUE9SVF9TWU1CT0woZGVsX3RpbWVyX3N5bmMpOwogI2VuZGlmCiAKQEAgLTEyNjgsNyArMTMwNCw3IEBACiAJZXhwaXJlID0gdGltZW91dCArIGppZmZpZXM7CiAKIAlzZXR1cF90aW1lcl9vbl9zdGFjaygmdGltZXIsIHByb2Nlc3NfdGltZW91dCwgKHVuc2lnbmVkIGxvbmcpY3VycmVudCk7Ci0JX19tb2RfdGltZXIoJnRpbWVyLCBleHBpcmUpOworCV9fbW9kX3RpbWVyKCZ0aW1lciwgZXhwaXJlLCBmYWxzZSk7CiAJc2NoZWR1bGUoKTsKIAlkZWxfc2luZ2xlc2hvdF90aW1lcl9zeW5jKCZ0aW1lcik7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC91c2VyLmMgYi9rZXJuZWwvdXNlci5jCmluZGV4IGZiYjMwMGUuLjg1MGUwYmEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC91c2VyLmMKKysrIGIva2VybmVsL3VzZXIuYwpAQCAtMjAsNyArMjAsNyBAQAogCiBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgaW5pdF91c2VyX25zID0gewogCS5rcmVmID0gewotCQkucmVmY291bnQJPSBBVE9NSUNfSU5JVCgxKSwKKwkJLnJlZmNvdW50CT0gQVRPTUlDX0lOSVQoMiksCiAJfSwKIAkuY3JlYXRvciA9ICZyb290X3VzZXIsCiB9OwpkaWZmIC0tZ2l0IGEvbGliL0tjb25maWcgYi9saWIvS2NvbmZpZwppbmRleCAwM2MyYzI0Li41NGFhZjRmIDEwMDY0NAotLS0gYS9saWIvS2NvbmZpZworKysgYi9saWIvS2NvbmZpZwpAQCAtMTM2LDEyICsxMzYsNiBAQAogY29uZmlnIFRFWFRTRUFSQ0hfRlNNCiAJdHJpc3RhdGUKIAotIwotIyBwbGlzdCBzdXBwb3J0IGlzIHNlbGVjdCNlZCBpZiBuZWVkZWQKLSMKLWNvbmZpZyBQTElTVAotCWJvb2xlYW4KLQogY29uZmlnIEhBU19JT01FTQogCWJvb2xlYW4KIAlkZXBlbmRzIG9uICFOT19JT01FTQpAQCAtMTc0LDQgKzE2OCwxMCBAQAogICAgICAgIGJvb2wgIkRpc2FibGUgb2Jzb2xldGUgY3B1bWFzayBmdW5jdGlvbnMiIGlmIERFQlVHX1BFUl9DUFVfTUFQUwogICAgICAgIGRlcGVuZHMgb24gRVhQRVJJTUVOVEFMICYmIEJST0tFTgogCisjCisjIE5ldGxpbmsgYXR0cmlidXRlIHBhcnNpbmcgc3VwcG9ydCBpcyBzZWxlY3QnZWQgaWYgbmVlZGVkCisjCitjb25maWcgTkxBVFRSCisJYm9vbAorCiBlbmRtZW51CmRpZmYgLS1naXQgYS9saWIvS2NvbmZpZy5kZWJ1ZyBiL2xpYi9LY29uZmlnLmRlYnVnCmluZGV4IDFiY2Y5Y2QuLjhmZWUwYTEgMTAwNjQ0Ci0tLSBhL2xpYi9LY29uZmlnLmRlYnVnCisrKyBiL2xpYi9LY29uZmlnLmRlYnVnCkBAIC04NDcsNjAgKzg0Nyw3MCBAQAogCiAJICBTYXkgTiBpZiB5b3UgYXJlIHVuc3VyZS4KIAotY29uZmlnIERZTkFNSUNfUFJJTlRLX0RFQlVHCi0JYm9vbCAiRW5hYmxlIGR5bmFtaWMgcHJpbnRrKCkgY2FsbCBzdXBwb3J0IgorY29uZmlnIERZTkFNSUNfREVCVUcKKwlib29sICJFbmFibGUgZHluYW1pYyBwcmludGsoKSBzdXBwb3J0IgogCWRlZmF1bHQgbgogCWRlcGVuZHMgb24gUFJJTlRLCisJZGVwZW5kcyBvbiBERUJVR19GUwogCXNlbGVjdCBQUklOVEtfREVCVUcKIAloZWxwCiAKIAkgIENvbXBpbGVzIGRlYnVnIGxldmVsIG1lc3NhZ2VzIGludG8gdGhlIGtlcm5lbCwgd2hpY2ggd291bGQgbm90CiAJICBvdGhlcndpc2UgYmUgYXZhaWxhYmxlIGF0IHJ1bnRpbWUuIFRoZXNlIG1lc3NhZ2VzIGNhbiB0aGVuIGJlCi0JICBlbmFibGVkL2Rpc2FibGVkIG9uIGEgcGVyIG1vZHVsZSBiYXNpcy4gVGhpcyBtZWNoYW5pc20gaW1wbGljaXRseQotCSAgZW5hYmxlcyBhbGwgcHJfZGVidWcoKSBhbmQgZGV2X2RiZygpIGNhbGxzLiBUaGUgaW1wYWN0IG9mIHRoaXMKLQkgIGNvbXBpbGUgb3B0aW9uIGlzIGEgbGFyZ2VyIGtlcm5lbCB0ZXh0IHNpemUgb2YgYWJvdXQgMiUuCisJICBlbmFibGVkL2Rpc2FibGVkIGJhc2VkIG9uIHZhcmlvdXMgbGV2ZWxzIG9mIHNjb3BlIC0gcGVyIHNvdXJjZSBmaWxlLAorCSAgZnVuY3Rpb24sIG1vZHVsZSwgZm9ybWF0IHN0cmluZywgYW5kIGxpbmUgbnVtYmVyLiBUaGlzIG1lY2hhbmlzbQorCSAgaW1wbGljaXRseSBlbmFibGVzIGFsbCBwcl9kZWJ1ZygpIGFuZCBkZXZfZGJnKCkgY2FsbHMuIFRoZSBpbXBhY3Qgb2YKKwkgIHRoaXMgY29tcGlsZSBvcHRpb24gaXMgYSBsYXJnZXIga2VybmVsIHRleHQgc2l6ZSBvZiBhYm91dCAyJS4KIAogCSAgVXNhZ2U6CiAKLQkgIER5bmFtaWMgZGVidWdnaW5nIGlzIGNvbnRyb2xsZWQgYnkgdGhlIGRlYnVnZnMgZmlsZSwKLQkgIGR5bmFtaWNfcHJpbnRrL21vZHVsZXMuIFRoaXMgZmlsZSBjb250YWlucyBhIGxpc3Qgb2YgdGhlIG1vZHVsZXMgdGhhdAotCSAgY2FuIGJlIGVuYWJsZWQuIFRoZSBmb3JtYXQgb2YgdGhlIGZpbGUgaXMgdGhlIG1vZHVsZSBuYW1lLCBmb2xsb3dlZAotCSAgYnkgYSBzZXQgb2YgZmxhZ3MgdGhhdCBjYW4gYmUgZW5hYmxlZC4gVGhlIGZpcnN0IGZsYWcgaXMgYWx3YXlzIHRoZQotCSAgJ2VuYWJsZWQnIGZsYWcuIEZvciBleGFtcGxlOgorCSAgRHluYW1pYyBkZWJ1Z2dpbmcgaXMgY29udHJvbGxlZCB2aWEgdGhlICdkeW5hbWljX2RlYnVnL2RkZWJ1ZycgZmlsZSwKKwkgIHdoaWNoIGlzIGNvbnRhaW5lZCBpbiB0aGUgJ2RlYnVnZnMnIGZpbGVzeXN0ZW0uIFRodXMsIHRoZSBkZWJ1Z2ZzCisJICBmaWxlc3lzdGVtIG11c3QgZmlyc3QgYmUgbW91bnRlZCBiZWZvcmUgbWFraW5nIHVzZSBvZiB0aGlzIGZlYXR1cmUuCisJICBXZSByZWZlciB0aGUgY29udHJvbCBmaWxlIGFzOiA8ZGVidWdmcz4vZHluYW1pY19kZWJ1Zy9kZGVidWcuIFRoaXMKKwkgIGZpbGUgY29udGFpbnMgYSBsaXN0IG9mIHRoZSBkZWJ1ZyBzdGF0ZW1lbnRzIHRoYXQgY2FuIGJlIGVuYWJsZWQuIFRoZQorCSAgZm9ybWF0IGZvciBlYWNoIGxpbmUgb2YgdGhlIGZpbGUgaXM6CiAKLQkJPG1vZHVsZV9uYW1lPiA8ZW5hYmxlZD0wLzE+Ci0JCQkJLgotCQkJCS4KLQkJCQkuCisJCWZpbGVuYW1lOmxpbmVubyBbbW9kdWxlXWZ1bmN0aW9uIGZsYWdzIGZvcm1hdAogCi0JICA8bW9kdWxlX25hbWU+IDogTmFtZSBvZiB0aGUgbW9kdWxlIGluIHdoaWNoIHRoZSBkZWJ1ZyBjYWxsIHJlc2lkZXMKLQkgIDxlbmFibGVkPTAvMT4gOiB3aGV0aGVyIHRoZSBtZXNzYWdlcyBhcmUgZW5hYmxlZCBvciBub3QKKwkgIGZpbGVuYW1lIDogc291cmNlIGZpbGUgb2YgdGhlIGRlYnVnIHN0YXRlbWVudAorCSAgbGluZW5vIDogbGluZSBudW1iZXIgb2YgdGhlIGRlYnVnIHN0YXRlbWVudAorCSAgbW9kdWxlIDogbW9kdWxlIHRoYXQgY29udGFpbnMgdGhlIGRlYnVnIHN0YXRlbWVudAorCSAgZnVuY3Rpb24gOiBmdW5jdGlvbiB0aGF0IGNvbnRhaW5zIHRoZSBkZWJ1ZyBzdGF0ZW1lbnQKKyAgICAgICAgICBmbGFncyA6ICdwJyBtZWFucyB0aGUgbGluZSBpcyB0dXJuZWQgJ29uJyBmb3IgcHJpbnRpbmcKKyAgICAgICAgICBmb3JtYXQgOiB0aGUgZm9ybWF0IHVzZWQgZm9yIHRoZSBkZWJ1ZyBzdGF0ZW1lbnQKIAogCSAgRnJvbSBhIGxpdmUgc3lzdGVtOgogCi0JCXNuZF9oZGFfaW50ZWwgZW5hYmxlZD0wCi0JCWZpeHVwIGVuYWJsZWQ9MAotCQlkcml2ZXIgZW5hYmxlZD0wCisJCW51bGxhcmJvcjp+ICMgY2F0IDxkZWJ1Z2ZzPi9keW5hbWljX2RlYnVnL2RkZWJ1ZworCQkjIGZpbGVuYW1lOmxpbmVubyBbbW9kdWxlXWZ1bmN0aW9uIGZsYWdzIGZvcm1hdAorCQlmcy9haW8uYzoyMjIgW2Fpb11fX3B1dF9pb2N0eCAtICJfX3B1dF9pb2N0eDpcMDQwZnJlZWluZ1wwNDAlcFwwMTIiCisJCWZzL2Fpby5jOjI0OCBbYWlvXWlvY3R4X2FsbG9jIC0gIkVOT01FTTpcMDQwbnJfZXZlbnRzXDA0MHRvb1wwNDBoaWdoXDAxMiIKKwkJZnMvYWlvLmM6MTc3MCBbYWlvXXN5c19pb19jYW5jZWwgLSAiY2FsbGluZ1wwNDBjYW5jZWxcMDEyIgogCi0JICBFbmFibGUgYSBtb2R1bGU6CisJICBFeGFtcGxlIHVzYWdlOgogCi0JICAJJGVjaG8gInNldCBlbmFibGVkPTEgPG1vZHVsZV9uYW1lPiIgPiBkeW5hbWljX3ByaW50ay9tb2R1bGVzCisJCS8vIGVuYWJsZSB0aGUgbWVzc2FnZSBhdCBsaW5lIDE2MDMgb2YgZmlsZSBzdmNzb2NrLmMKKwkJbnVsbGFyYm9yOn4gIyBlY2hvIC1uICdmaWxlIHN2Y3NvY2suYyBsaW5lIDE2MDMgK3AnID4KKwkJCQkJCTxkZWJ1Z2ZzPi9keW5hbWljX2RlYnVnL2RkZWJ1ZwogCi0JICBEaXNhYmxlIGEgbW9kdWxlOgorCQkvLyBlbmFibGUgYWxsIHRoZSBtZXNzYWdlcyBpbiBmaWxlIHN2Y3NvY2suYworCQludWxsYXJib3I6fiAjIGVjaG8gLW4gJ2ZpbGUgc3Zjc29jay5jICtwJyA+CisJCQkJCQk8ZGVidWdmcz4vZHluYW1pY19kZWJ1Zy9kZGVidWcKIAotCSAgCSRlY2hvICJzZXQgZW5hYmxlZD0wIDxtb2R1bGVfbmFtZT4iID4gZHluYW1pY19wcmludGsvbW9kdWxlcworCQkvLyBlbmFibGUgYWxsIHRoZSBtZXNzYWdlcyBpbiB0aGUgTkZTIHNlcnZlciBtb2R1bGUKKwkJbnVsbGFyYm9yOn4gIyBlY2hvIC1uICdtb2R1bGUgbmZzZCArcCcgPgorCQkJCQkJPGRlYnVnZnM+L2R5bmFtaWNfZGVidWcvZGRlYnVnCiAKLQkgIEVuYWJsZSBhbGwgbW9kdWxlczoKKwkJLy8gZW5hYmxlIGFsbCAxMiBtZXNzYWdlcyBpbiB0aGUgZnVuY3Rpb24gc3ZjX3Byb2Nlc3MoKQorCQludWxsYXJib3I6fiAjIGVjaG8gLW4gJ2Z1bmMgc3ZjX3Byb2Nlc3MgK3AnID4KKwkJCQkJCTxkZWJ1Z2ZzPi9keW5hbWljX2RlYnVnL2RkZWJ1ZwogCi0JCSRlY2hvICJzZXQgZW5hYmxlZD0xIGFsbCIgPiBkeW5hbWljX3ByaW50ay9tb2R1bGVzCisJCS8vIGRpc2FibGUgYWxsIDEyIG1lc3NhZ2VzIGluIHRoZSBmdW5jdGlvbiBzdmNfcHJvY2VzcygpCisJCW51bGxhcmJvcjp+ICMgZWNobyAtbiAnZnVuYyBzdmNfcHJvY2VzcyAtcCcgPgorCQkJCQkJPGRlYnVnZnM+L2R5bmFtaWNfZGVidWcvZGRlYnVnCiAKLQkgIERpc2FibGUgYWxsIG1vZHVsZXM6Ci0KLQkJJGVjaG8gInNldCBlbmFibGVkPTAgYWxsIiA+IGR5bmFtaWNfcHJpbnRrL21vZHVsZXMKLQotCSAgRmluYWxseSwgcGFzc2luZyAiZHluYW1pY19wcmludGsiIGF0IHRoZSBjb21tYW5kIGxpbmUgZW5hYmxlcwotCSAgZGVidWdnaW5nIGZvciBhbGwgbW9kdWxlcy4gVGhpcyBtb2RlIGNhbiBiZSB0dXJuZWQgb2ZmIHZpYSB0aGUgYWJvdmUKLQkgIGRpc2FibGUgY29tbWFuZC4KKwkgIFNlZSBEb2N1bWVudGF0aW9uL2R5bmFtaWMtZGVidWctaG93dG8udHh0IGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLgogCiBzb3VyY2UgInNhbXBsZXMvS2NvbmZpZyIKIApkaWZmIC0tZ2l0IGEvbGliL01ha2VmaWxlIGIvbGliL01ha2VmaWxlCmluZGV4IDMyYjBlNjQuLjhiZGM2NDcgMTAwNjQ0Ci0tLSBhL2xpYi9NYWtlZmlsZQorKysgYi9saWIvTWFrZWZpbGUKQEAgLTExLDcgKzExLDggQEAKIAkgcmJ0cmVlLm8gcmFkaXgtdHJlZS5vIGR1bXBfc3RhY2subyBcCiAJIGlkci5vIGludF9zcXJ0Lm8gZXh0YWJsZS5vIHByaW9fdHJlZS5vIFwKIAkgc2hhMS5vIGlycV9yZWdzLm8gcmVjaXByb2NhbF9kaXYubyBhcmd2X3NwbGl0Lm8gXAotCSBwcm9wb3J0aW9ucy5vIHByaW9faGVhcC5vIHJhdGVsaW1pdC5vIHNob3dfbWVtLm8gaXNfc2luZ2xlX3RocmVhZGVkLm8KKwkgcHJvcG9ydGlvbnMubyBwcmlvX2hlYXAubyByYXRlbGltaXQubyBzaG93X21lbS5vIFwKKwkgaXNfc2luZ2xlX3RocmVhZGVkLm8gcGxpc3QubwogCiBsaWItJChDT05GSUdfTU1VKSArPSBpb3JlbWFwLm8KIGxpYi0kKENPTkZJR19TTVApICs9IGNwdW1hc2subwpAQCAtNDAsNyArNDEsNiBAQAogbGliLSQoQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVCkgKz0gZmluZF9sYXN0X2JpdC5vCiBvYmotJChDT05GSUdfR0VORVJJQ19IV0VJR0hUKSArPSBod2VpZ2h0Lm8KIG9iai0kKENPTkZJR19MT0NLX0tFUk5FTCkgKz0ga2VybmVsX2xvY2subwotb2JqLSQoQ09ORklHX1BMSVNUKSArPSBwbGlzdC5vCiBvYmotJChDT05GSUdfREVCVUdfUFJFRU1QVCkgKz0gc21wX3Byb2Nlc3Nvcl9pZC5vCiBvYmotJChDT05GSUdfREVCVUdfTElTVCkgKz0gbGlzdF9kZWJ1Zy5vCiBvYmotJChDT05GSUdfREVCVUdfT0JKRUNUUykgKz0gZGVidWdvYmplY3RzLm8KQEAgLTgyLDcgKzgyLDkgQEAKIAogb2JqLSQoQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0spICs9IHN5c2NhbGwubwogCi1vYmotJChDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcpICs9IGR5bmFtaWNfcHJpbnRrLm8KK29iai0kKENPTkZJR19EWU5BTUlDX0RFQlVHKSArPSBkeW5hbWljX2RlYnVnLm8KKworb2JqLSQoQ09ORklHX05MQVRUUikgKz0gbmxhdHRyLm8KIAogaG9zdHByb2dzLXkJOj0gZ2VuX2NyYzMydGFibGUKIGNsZWFuLWZpbGVzCTo9IGNyYzMydGFibGUuaApkaWZmIC0tZ2l0IGEvbGliL2R5bmFtaWNfZGVidWcuYyBiL2xpYi9keW5hbWljX2RlYnVnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODMzMTM5YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9keW5hbWljX2RlYnVnLmMKQEAgLTAsMCArMSw3NjkgQEAKKy8qCisgKiBsaWIvZHluYW1pY19kZWJ1Zy5jCisgKgorICogbWFrZSBwcl9kZWJ1ZygpL2Rldl9kYmcoKSBjYWxscyBydW50aW1lIGNvbmZpZ3VyYWJsZSBiYXNlZCB1cG9uIHRoZWlyCisgKiBzb3VyY2UgbW9kdWxlLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBKYXNvbiBCYXJvbiA8amJhcm9uQHJlZGhhdC5jb20+CisgKiBCeSBHcmVnIEJhbmtzIDxnbmJAbWVsYm91cm5lLnNnaS5jb20+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDggU2lsaWNvbiBHcmFwaGljcyBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvZHluYW1pY19kZWJ1Zy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKworZXh0ZXJuIHN0cnVjdCBfZGRlYnVnIF9fc3RhcnRfX192ZXJib3NlW107CitleHRlcm4gc3RydWN0IF9kZGVidWcgX19zdG9wX19fdmVyYm9zZVtdOworCisvKiBkeW5hbWljX2RlYnVnX2VuYWJsZWQsIGFuZCBkeW5hbWljX2RlYnVnX2VuYWJsZWQyIGFyZSBiaXRtYXNrcyBpbiB3aGljaAorICogYml0IG4gaXMgc2V0IHRvIDEgaWYgYW55IG1vZG5hbWUgaGFzaGVzIGludG8gdGhlIGJ1Y2tldCBuLCAwIG90aGVyd2lzZS4gVGhleQorICogdXNlIGluZGVwZW5kZW50IGhhc2ggZnVuY3Rpb25zLCB0byByZWR1Y2UgdGhlIGNoYW5jZSBvZiBmYWxzZSBwb3NpdGl2ZXMuCisgKi8KK2xvbmcgbG9uZyBkeW5hbWljX2RlYnVnX2VuYWJsZWQ7CitFWFBPUlRfU1lNQk9MX0dQTChkeW5hbWljX2RlYnVnX2VuYWJsZWQpOworbG9uZyBsb25nIGR5bmFtaWNfZGVidWdfZW5hYmxlZDI7CitFWFBPUlRfU1lNQk9MX0dQTChkeW5hbWljX2RlYnVnX2VuYWJsZWQyKTsKKworc3RydWN0IGRkZWJ1Z190YWJsZSB7CisJc3RydWN0IGxpc3RfaGVhZCBsaW5rOworCWNoYXIgKm1vZF9uYW1lOworCXVuc2lnbmVkIGludCBudW1fZGRlYnVnczsKKwl1bnNpZ25lZCBpbnQgbnVtX2VuYWJsZWQ7CisJc3RydWN0IF9kZGVidWcgKmRkZWJ1Z3M7Cit9OworCitzdHJ1Y3QgZGRlYnVnX3F1ZXJ5IHsKKwljb25zdCBjaGFyICpmaWxlbmFtZTsKKwljb25zdCBjaGFyICptb2R1bGU7CisJY29uc3QgY2hhciAqZnVuY3Rpb247CisJY29uc3QgY2hhciAqZm9ybWF0OworCXVuc2lnbmVkIGludCBmaXJzdF9saW5lbm8sIGxhc3RfbGluZW5vOworfTsKKworc3RydWN0IGRkZWJ1Z19pdGVyIHsKKwlzdHJ1Y3QgZGRlYnVnX3RhYmxlICp0YWJsZTsKKwl1bnNpZ25lZCBpbnQgaWR4OworfTsKKworc3RhdGljIERFRklORV9NVVRFWChkZGVidWdfbG9jayk7CitzdGF0aWMgTElTVF9IRUFEKGRkZWJ1Z190YWJsZXMpOworc3RhdGljIGludCB2ZXJib3NlID0gMDsKKworLyogUmV0dXJuIHRoZSBsYXN0IHBhcnQgb2YgYSBwYXRobmFtZSAqLworc3RhdGljIGlubGluZSBjb25zdCBjaGFyICpiYXNlbmFtZShjb25zdCBjaGFyICpwYXRoKQoreworCWNvbnN0IGNoYXIgKnRhaWwgPSBzdHJyY2hyKHBhdGgsICcvJyk7CisJcmV0dXJuIHRhaWwgPyB0YWlsKzEgOiBwYXRoOworfQorCisvKiBmb3JtYXQgYSBzdHJpbmcgaW50byBidWZbXSB3aGljaCBkZXNjcmliZXMgdGhlIF9kZGVidWcncyBmbGFncyAqLworc3RhdGljIGNoYXIgKmRkZWJ1Z19kZXNjcmliZV9mbGFncyhzdHJ1Y3QgX2RkZWJ1ZyAqZHAsIGNoYXIgKmJ1ZiwKKwkJCQkgICAgc2l6ZV90IG1heGxlbikKK3sKKwljaGFyICpwID0gYnVmOworCisJQlVHX09OKG1heGxlbiA8IDQpOworCWlmIChkcC0+ZmxhZ3MgJiBfRFBSSU5US19GTEFHU19QUklOVCkKKwkJKnArKyA9ICdwJzsKKwlpZiAocCA9PSBidWYpCisJCSpwKysgPSAnLSc7CisJKnAgPSAnXDAnOworCisJcmV0dXJuIGJ1ZjsKK30KKworLyoKKyAqIG11c3QgYmUgY2FsbGVkIHdpdGggZGRlYnVnX2xvY2sgaGVsZAorICovCisKK3N0YXRpYyBpbnQgZGlzYWJsZWRfaGFzaChjaGFyIGhhc2gsIGJvb2wgZmlyc3RfdGFibGUpCit7CisJc3RydWN0IGRkZWJ1Z190YWJsZSAqZHQ7CisJY2hhciB0YWJsZV9oYXNoX3ZhbHVlOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShkdCwgJmRkZWJ1Z190YWJsZXMsIGxpbmspIHsKKwkJaWYgKGZpcnN0X3RhYmxlKQorCQkJdGFibGVfaGFzaF92YWx1ZSA9IGR0LT5kZGVidWdzLT5wcmltYXJ5X2hhc2g7CisJCWVsc2UKKwkJCXRhYmxlX2hhc2hfdmFsdWUgPSBkdC0+ZGRlYnVncy0+c2Vjb25kYXJ5X2hhc2g7CisJCWlmIChkdC0+bnVtX2VuYWJsZWQgJiYgKGhhc2ggPT0gdGFibGVfaGFzaF92YWx1ZSkpCisJCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBTZWFyY2ggdGhlIHRhYmxlcyBmb3IgX2RkZWJ1ZydzIHdoaWNoIG1hdGNoIHRoZSBnaXZlbgorICogYHF1ZXJ5JyBhbmQgYXBwbHkgdGhlIGBmbGFncycgYW5kIGBtYXNrJyB0byB0aGVtLiAgVGVsbHMKKyAqIHRoZSB1c2VyIHdoaWNoIGRkZWJ1ZydzIHdlcmUgY2hhbmdlZCwgb3Igd2hldGhlciBub25lCisgKiB3ZXJlIG1hdGNoZWQuCisgKi8KK3N0YXRpYyB2b2lkIGRkZWJ1Z19jaGFuZ2UoY29uc3Qgc3RydWN0IGRkZWJ1Z19xdWVyeSAqcXVlcnksCisJCQkgICB1bnNpZ25lZCBpbnQgZmxhZ3MsIHVuc2lnbmVkIGludCBtYXNrKQoreworCWludCBpOworCXN0cnVjdCBkZGVidWdfdGFibGUgKmR0OworCXVuc2lnbmVkIGludCBuZXdmbGFnczsKKwl1bnNpZ25lZCBpbnQgbmZvdW5kID0gMDsKKwljaGFyIGZsYWdidWZbOF07CisKKwkvKiBzZWFyY2ggZm9yIG1hdGNoaW5nIGRkZWJ1Z3MgKi8KKwltdXRleF9sb2NrKCZkZGVidWdfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShkdCwgJmRkZWJ1Z190YWJsZXMsIGxpbmspIHsKKworCQkvKiBtYXRjaCBhZ2FpbnN0IHRoZSBtb2R1bGUgbmFtZSAqLworCQlpZiAocXVlcnktPm1vZHVsZSAhPSBOVUxMICYmCisJCSAgICBzdHJjbXAocXVlcnktPm1vZHVsZSwgZHQtPm1vZF9uYW1lKSkKKwkJCWNvbnRpbnVlOworCisJCWZvciAoaSA9IDAgOyBpIDwgZHQtPm51bV9kZGVidWdzIDsgaSsrKSB7CisJCQlzdHJ1Y3QgX2RkZWJ1ZyAqZHAgPSAmZHQtPmRkZWJ1Z3NbaV07CisKKwkJCS8qIG1hdGNoIGFnYWluc3QgdGhlIHNvdXJjZSBmaWxlbmFtZSAqLworCQkJaWYgKHF1ZXJ5LT5maWxlbmFtZSAhPSBOVUxMICYmCisJCQkgICAgc3RyY21wKHF1ZXJ5LT5maWxlbmFtZSwgZHAtPmZpbGVuYW1lKSAmJgorCQkJICAgIHN0cmNtcChxdWVyeS0+ZmlsZW5hbWUsIGJhc2VuYW1lKGRwLT5maWxlbmFtZSkpKQorCQkJCWNvbnRpbnVlOworCisJCQkvKiBtYXRjaCBhZ2FpbnN0IHRoZSBmdW5jdGlvbiAqLworCQkJaWYgKHF1ZXJ5LT5mdW5jdGlvbiAhPSBOVUxMICYmCisJCQkgICAgc3RyY21wKHF1ZXJ5LT5mdW5jdGlvbiwgZHAtPmZ1bmN0aW9uKSkKKwkJCQljb250aW51ZTsKKworCQkJLyogbWF0Y2ggYWdhaW5zdCB0aGUgZm9ybWF0ICovCisJCQlpZiAocXVlcnktPmZvcm1hdCAhPSBOVUxMICYmCisJCQkgICAgc3Ryc3RyKGRwLT5mb3JtYXQsIHF1ZXJ5LT5mb3JtYXQpID09IE5VTEwpCisJCQkJY29udGludWU7CisKKwkJCS8qIG1hdGNoIGFnYWluc3QgdGhlIGxpbmUgbnVtYmVyIHJhbmdlICovCisJCQlpZiAocXVlcnktPmZpcnN0X2xpbmVubyAmJgorCQkJICAgIGRwLT5saW5lbm8gPCBxdWVyeS0+Zmlyc3RfbGluZW5vKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKHF1ZXJ5LT5sYXN0X2xpbmVubyAmJgorCQkJICAgIGRwLT5saW5lbm8gPiBxdWVyeS0+bGFzdF9saW5lbm8pCisJCQkJY29udGludWU7CisKKwkJCW5mb3VuZCsrOworCisJCQluZXdmbGFncyA9IChkcC0+ZmxhZ3MgJiBtYXNrKSB8IGZsYWdzOworCQkJaWYgKG5ld2ZsYWdzID09IGRwLT5mbGFncykKKwkJCQljb250aW51ZTsKKworCQkJaWYgKCFuZXdmbGFncykKKwkJCQlkdC0+bnVtX2VuYWJsZWQtLTsKKwkJCWVsc2UgaWYgKCFkcC1mbGFncykKKwkJCQlkdC0+bnVtX2VuYWJsZWQrKzsKKwkJCWRwLT5mbGFncyA9IG5ld2ZsYWdzOworCQkJaWYgKG5ld2ZsYWdzKSB7CisJCQkJZHluYW1pY19kZWJ1Z19lbmFibGVkIHw9CisJCQkJCQkoMUxMIDw8IGRwLT5wcmltYXJ5X2hhc2gpOworCQkJCWR5bmFtaWNfZGVidWdfZW5hYmxlZDIgfD0KKwkJCQkJCSgxTEwgPDwgZHAtPnNlY29uZGFyeV9oYXNoKTsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKGRpc2FibGVkX2hhc2goZHAtPnByaW1hcnlfaGFzaCwgdHJ1ZSkpCisJCQkJCWR5bmFtaWNfZGVidWdfZW5hYmxlZCAmPQorCQkJCQkJfigxTEwgPDwgZHAtPnByaW1hcnlfaGFzaCk7CisJCQkJaWYgKGRpc2FibGVkX2hhc2goZHAtPnNlY29uZGFyeV9oYXNoLCBmYWxzZSkpCisJCQkJCWR5bmFtaWNfZGVidWdfZW5hYmxlZDIgJj0KKwkJCQkJCX4oMUxMIDw8IGRwLT5zZWNvbmRhcnlfaGFzaCk7CisJCQl9CisJCQlpZiAodmVyYm9zZSkKKwkJCQlwcmludGsoS0VSTl9JTkZPCisJCQkJCSJkZGVidWc6IGNoYW5nZWQgJXM6JWQgWyVzXSVzICVzXG4iLAorCQkJCQlkcC0+ZmlsZW5hbWUsIGRwLT5saW5lbm8sCisJCQkJCWR0LT5tb2RfbmFtZSwgZHAtPmZ1bmN0aW9uLAorCQkJCQlkZGVidWdfZGVzY3JpYmVfZmxhZ3MoZHAsIGZsYWdidWYsCisJCQkJCQkJc2l6ZW9mKGZsYWdidWYpKSk7CisJCX0KKwl9CisJbXV0ZXhfdW5sb2NrKCZkZGVidWdfbG9jayk7CisKKwlpZiAoIW5mb3VuZCAmJiB2ZXJib3NlKQorCQlwcmludGsoS0VSTl9JTkZPICJkZGVidWc6IG5vIG1hdGNoZXMgZm9yIHF1ZXJ5XG4iKTsKK30KKworLyoKKyAqIFNwbGl0IHRoZSBidWZmZXIgYGJ1ZicgaW50byBzcGFjZS1zZXBhcmF0ZWQgd29yZHMuCisgKiBIYW5kbGVzIHNpbXBsZSAiIGFuZCAnIHF1b3RpbmcsIGkuZS4gd2l0aG91dCBuZXN0ZWQsCisgKiBlbWJlZGRlZCBvciBlc2NhcGVkIFwiLiAgUmV0dXJuIHRoZSBudW1iZXIgb2Ygd29yZHMKKyAqIG9yIDwwIG9uIGVycm9yLgorICovCitzdGF0aWMgaW50IGRkZWJ1Z190b2tlbml6ZShjaGFyICpidWYsIGNoYXIgKndvcmRzW10sIGludCBtYXh3b3JkcykKK3sKKwlpbnQgbndvcmRzID0gMDsKKworCXdoaWxlICgqYnVmKSB7CisJCWNoYXIgKmVuZDsKKworCQkvKiBTa2lwIGxlYWRpbmcgd2hpdGVzcGFjZSAqLworCQl3aGlsZSAoKmJ1ZiAmJiBpc3NwYWNlKCpidWYpKQorCQkJYnVmKys7CisJCWlmICghKmJ1ZikKKwkJCWJyZWFrOwkvKiBvaCwgaXQgd2FzIHRyYWlsaW5nIHdoaXRlc3BhY2UgKi8KKworCQkvKiBSdW4gYGVuZCcgb3ZlciBhIHdvcmQsIGVpdGhlciB3aGl0ZXNwYWNlIHNlcGFyYXRlZCBvciBxdW90ZWQgKi8KKwkJaWYgKCpidWYgPT0gJyInIHx8ICpidWYgPT0gJ1wnJykgeworCQkJaW50IHF1b3RlID0gKmJ1ZisrOworCQkJZm9yIChlbmQgPSBidWYgOyAqZW5kICYmICplbmQgIT0gcXVvdGUgOyBlbmQrKykKKwkJCQk7CisJCQlpZiAoISplbmQpCisJCQkJcmV0dXJuIC1FSU5WQUw7CS8qIHVuY2xvc2VkIHF1b3RlICovCisJCX0gZWxzZSB7CisJCQlmb3IgKGVuZCA9IGJ1ZiA7ICplbmQgJiYgIWlzc3BhY2UoKmVuZCkgOyBlbmQrKykKKwkJCQk7CisJCQlCVUdfT04oZW5kID09IGJ1Zik7CisJCX0KKwkJLyogSGVyZSBgYnVmJyBpcyB0aGUgc3RhcnQgb2YgdGhlIHdvcmQsIGBlbmQnIGlzIG9uZSBwYXN0IHRoZSBlbmQgKi8KKworCQlpZiAobndvcmRzID09IG1heHdvcmRzKQorCQkJcmV0dXJuIC1FSU5WQUw7CS8qIHJhbiBvdXQgb2Ygd29yZHNbXSBiZWZvcmUgYnl0ZXMgKi8KKwkJaWYgKCplbmQpCisJCQkqZW5kKysgPSAnXDAnOwkvKiB0ZXJtaW5hdGUgdGhlIHdvcmQgKi8KKwkJd29yZHNbbndvcmRzKytdID0gYnVmOworCQlidWYgPSBlbmQ7CisJfQorCisJaWYgKHZlcmJvc2UpIHsKKwkJaW50IGk7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBzcGxpdCBpbnRvIHdvcmRzOiIsIF9fZnVuY19fKTsKKwkJZm9yIChpID0gMCA7IGkgPCBud29yZHMgOyBpKyspCisJCQlwcmludGsoIiBcIiVzXCIiLCB3b3Jkc1tpXSk7CisJCXByaW50aygiXG4iKTsKKwl9CisKKwlyZXR1cm4gbndvcmRzOworfQorCisvKgorICogUGFyc2UgYSBzaW5nbGUgbGluZSBudW1iZXIuICBOb3RlIHRoYXQgdGhlIGVtcHR5IHN0cmluZyAiIgorICogaXMgdHJlYXRlZCBhcyBhIHNwZWNpYWwgY2FzZSBhbmQgY29udmVydGVkIHRvIHplcm8sIHdoaWNoCisgKiBpcyBsYXRlciB0cmVhdGVkIGFzIGEgImRvbid0IGNhcmUiIHZhbHVlLgorICovCitzdGF0aWMgaW5saW5lIGludCBwYXJzZV9saW5lbm8oY29uc3QgY2hhciAqc3RyLCB1bnNpZ25lZCBpbnQgKnZhbCkKK3sKKwljaGFyICplbmQgPSBOVUxMOworCUJVR19PTihzdHIgPT0gTlVMTCk7CisJaWYgKCpzdHIgPT0gJ1wwJykgeworCQkqdmFsID0gMDsKKwkJcmV0dXJuIDA7CisJfQorCSp2YWwgPSBzaW1wbGVfc3RydG91bChzdHIsICZlbmQsIDEwKTsKKwlyZXR1cm4gZW5kID09IE5VTEwgfHwgZW5kID09IHN0ciB8fCAqZW5kICE9ICdcMCcgPyAtRUlOVkFMIDogMDsKK30KKworLyoKKyAqIFVuZG8gb2N0YWwgZXNjYXBpbmcgaW4gYSBzdHJpbmcsIGlucGxhY2UuICBUaGlzIGlzIHVzZWZ1bCB0bworICogYWxsb3cgdGhlIHVzZXIgdG8gZXhwcmVzcyBhIHF1ZXJ5IHdoaWNoIG1hdGNoZXMgYSBmb3JtYXQKKyAqIGNvbnRhaW5pbmcgZW1iZWRkZWQgc3BhY2VzLgorICovCisjZGVmaW5lIGlzb2RpZ2l0KGMpCQkoKGMpID49ICcwJyAmJiAoYykgPD0gJzcnKQorc3RhdGljIGNoYXIgKnVuZXNjYXBlKGNoYXIgKnN0cikKK3sKKwljaGFyICppbiA9IHN0cjsKKwljaGFyICpvdXQgPSBzdHI7CisKKwl3aGlsZSAoKmluKSB7CisJCWlmICgqaW4gPT0gJ1xcJykgeworCQkJaWYgKGluWzFdID09ICdcXCcpIHsKKwkJCQkqb3V0KysgPSAnXFwnOworCQkJCWluICs9IDI7CisJCQkJY29udGludWU7CisJCQl9IGVsc2UgaWYgKGluWzFdID09ICd0JykgeworCQkJCSpvdXQrKyA9ICdcdCc7CisJCQkJaW4gKz0gMjsKKwkJCQljb250aW51ZTsKKwkJCX0gZWxzZSBpZiAoaW5bMV0gPT0gJ24nKSB7CisJCQkJKm91dCsrID0gJ1xuJzsKKwkJCQlpbiArPSAyOworCQkJCWNvbnRpbnVlOworCQkJfSBlbHNlIGlmIChpc29kaWdpdChpblsxXSkgJiYKKwkJCSAgICAgICAgIGlzb2RpZ2l0KGluWzJdKSAmJgorCQkJICAgICAgICAgaXNvZGlnaXQoaW5bM10pKSB7CisJCQkJKm91dCsrID0gKChpblsxXSAtICcwJyk8PDYpIHwKKwkJCQkgICAgICAgICAgKChpblsyXSAtICcwJyk8PDMpIHwKKwkJCQkgICAgICAgICAgKGluWzNdIC0gJzAnKTsKKwkJCQlpbiArPSA0OworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisJCSpvdXQrKyA9ICppbisrOworCX0KKwkqb3V0ID0gJ1wwJzsKKworCXJldHVybiBzdHI7Cit9CisKKy8qCisgKiBQYXJzZSB3b3Jkc1tdIGFzIGEgZGRlYnVnIHF1ZXJ5IHNwZWNpZmljYXRpb24sIHdoaWNoIGlzIGEgc2VyaWVzCisgKiBvZiAoa2V5d29yZCwgdmFsdWUpIHBhaXJzIGNob3NlbiBmcm9tIHRoZXNlIHBvc3NpYmlsaXRpZXM6CisgKgorICogZnVuYyA8ZnVuY3Rpb24tbmFtZT4KKyAqIGZpbGUgPGZ1bGwtcGF0aG5hbWU+CisgKiBmaWxlIDxiYXNlLWZpbGVuYW1lPgorICogbW9kdWxlIDxtb2R1bGUtbmFtZT4KKyAqIGZvcm1hdCA8ZXNjYXBlZC1zdHJpbmctdG8tZmluZC1pbi1mb3JtYXQ+CisgKiBsaW5lIDxsaW5lbm8+CisgKiBsaW5lIDxmaXJzdC1saW5lbm8+LTxsYXN0LWxpbmVubz4gLy8gd2hlcmUgZWl0aGVyIG1heSBiZSBlbXB0eQorICovCitzdGF0aWMgaW50IGRkZWJ1Z19wYXJzZV9xdWVyeShjaGFyICp3b3Jkc1tdLCBpbnQgbndvcmRzLAorCQkJICAgICAgIHN0cnVjdCBkZGVidWdfcXVlcnkgKnF1ZXJ5KQoreworCXVuc2lnbmVkIGludCBpOworCisJLyogY2hlY2sgd2UgaGF2ZSBhbiBldmVuIG51bWJlciBvZiB3b3JkcyAqLworCWlmIChud29yZHMgJSAyICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCW1lbXNldChxdWVyeSwgMCwgc2l6ZW9mKCpxdWVyeSkpOworCisJZm9yIChpID0gMCA7IGkgPCBud29yZHMgOyBpICs9IDIpIHsKKwkJaWYgKCFzdHJjbXAod29yZHNbaV0sICJmdW5jIikpCisJCQlxdWVyeS0+ZnVuY3Rpb24gPSB3b3Jkc1tpKzFdOworCQllbHNlIGlmICghc3RyY21wKHdvcmRzW2ldLCAiZmlsZSIpKQorCQkJcXVlcnktPmZpbGVuYW1lID0gd29yZHNbaSsxXTsKKwkJZWxzZSBpZiAoIXN0cmNtcCh3b3Jkc1tpXSwgIm1vZHVsZSIpKQorCQkJcXVlcnktPm1vZHVsZSA9IHdvcmRzW2krMV07CisJCWVsc2UgaWYgKCFzdHJjbXAod29yZHNbaV0sICJmb3JtYXQiKSkKKwkJCXF1ZXJ5LT5mb3JtYXQgPSB1bmVzY2FwZSh3b3Jkc1tpKzFdKTsKKwkJZWxzZSBpZiAoIXN0cmNtcCh3b3Jkc1tpXSwgImxpbmUiKSkgeworCQkJY2hhciAqZmlyc3QgPSB3b3Jkc1tpKzFdOworCQkJY2hhciAqbGFzdCA9IHN0cmNocihmaXJzdCwgJy0nKTsKKwkJCWlmIChsYXN0KQorCQkJCSpsYXN0KysgPSAnXDAnOworCQkJaWYgKHBhcnNlX2xpbmVubyhmaXJzdCwgJnF1ZXJ5LT5maXJzdF9saW5lbm8pIDwgMCkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWlmIChsYXN0ICE9IE5VTEwpIHsKKwkJCQkvKiByYW5nZSA8Zmlyc3Q+LTxsYXN0PiAqLworCQkJCWlmIChwYXJzZV9saW5lbm8obGFzdCwgJnF1ZXJ5LT5sYXN0X2xpbmVubykgPCAwKQorCQkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0gZWxzZSB7CisJCQkJcXVlcnktPmxhc3RfbGluZW5vID0gcXVlcnktPmZpcnN0X2xpbmVubzsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmICh2ZXJib3NlKQorCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IHVua25vd24ga2V5d29yZCBcIiVzXCJcbiIsCisJCQkJCV9fZnVuY19fLCB3b3Jkc1tpXSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKworCWlmICh2ZXJib3NlKQorCQlwcmludGsoS0VSTl9JTkZPICIlczogcS0+ZnVuY3Rpb249XCIlc1wiIHEtPmZpbGVuYW1lPVwiJXNcIiAiCisJCSAgICAgICAicS0+bW9kdWxlPVwiJXNcIiBxLT5mb3JtYXQ9XCIlc1wiIHEtPmxpbmVubz0ldS0ldVxuIiwKKwkJCV9fZnVuY19fLCBxdWVyeS0+ZnVuY3Rpb24sIHF1ZXJ5LT5maWxlbmFtZSwKKwkJCXF1ZXJ5LT5tb2R1bGUsIHF1ZXJ5LT5mb3JtYXQsIHF1ZXJ5LT5maXJzdF9saW5lbm8sCisJCQlxdWVyeS0+bGFzdF9saW5lbm8pOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBQYXJzZSBgc3RyJyBhcyBhIGZsYWdzIHNwZWNpZmljYXRpb24sIGZvcm1hdCBbLSs9XVtwXSsuCisgKiBTZXRzIHVwICptYXNrcCBhbmQgKmZsYWdzcCB0byBiZSB1c2VkIHdoZW4gY2hhbmdpbmcgdGhlCisgKiBmbGFncyBmaWVsZHMgb2YgbWF0Y2hlZCBfZGRlYnVnJ3MuICBSZXR1cm5zIDAgb24gc3VjY2VzcworICogb3IgPDAgb24gZXJyb3IuCisgKi8KK3N0YXRpYyBpbnQgZGRlYnVnX3BhcnNlX2ZsYWdzKGNvbnN0IGNoYXIgKnN0ciwgdW5zaWduZWQgaW50ICpmbGFnc3AsCisJCQkgICAgICAgdW5zaWduZWQgaW50ICptYXNrcCkKK3sKKwl1bnNpZ25lZCBmbGFncyA9IDA7CisJaW50IG9wID0gJz0nOworCisJc3dpdGNoICgqc3RyKSB7CisJY2FzZSAnKyc6CisJY2FzZSAnLSc6CisJY2FzZSAnPSc6CisJCW9wID0gKnN0cisrOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKHZlcmJvc2UpCisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBvcD0nJWMnXG4iLCBfX2Z1bmNfXywgb3ApOworCisJZm9yICggOyAqc3RyIDsgKytzdHIpIHsKKwkJc3dpdGNoICgqc3RyKSB7CisJCWNhc2UgJ3AnOgorCQkJZmxhZ3MgfD0gX0RQUklOVEtfRkxBR1NfUFJJTlQ7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCWlmIChmbGFncyA9PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAodmVyYm9zZSkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGZsYWdzPTB4JXhcbiIsIF9fZnVuY19fLCBmbGFncyk7CisKKwkvKiBjYWxjdWxhdGUgZmluYWwgKmZsYWdzcCwgKm1hc2twIGFjY29yZGluZyB0byBtYXNrIGFuZCBvcCAqLworCXN3aXRjaCAob3ApIHsKKwljYXNlICc9JzoKKwkJKm1hc2twID0gMDsKKwkJKmZsYWdzcCA9IGZsYWdzOworCQlicmVhazsKKwljYXNlICcrJzoKKwkJKm1hc2twID0gfjBVOworCQkqZmxhZ3NwID0gZmxhZ3M7CisJCWJyZWFrOworCWNhc2UgJy0nOgorCQkqbWFza3AgPSB+ZmxhZ3M7CisJCSpmbGFnc3AgPSAwOworCQlicmVhazsKKwl9CisJaWYgKHZlcmJvc2UpCisJCXByaW50ayhLRVJOX0lORk8gIiVzOiAqZmxhZ3NwPTB4JXggKm1hc2twPTB4JXhcbiIsCisJCQlfX2Z1bmNfXywgKmZsYWdzcCwgKm1hc2twKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEZpbGVfb3BzLT53cml0ZSBtZXRob2QgZm9yIDxkZWJ1Z2ZzPi9keW5hbWljX2RlYnVnL2NvbnJvbC4gIEdhdGhlcnMgdGhlCisgKiBjb21tYW5kIHRleHQgZnJvbSB1c2Vyc3BhY2UsIHBhcnNlcyBhbmQgZXhlY3V0ZXMgaXQuCisgKi8KK3N0YXRpYyBzc2l6ZV90IGRkZWJ1Z19wcm9jX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqdWJ1ZiwKKwkJCQkgIHNpemVfdCBsZW4sIGxvZmZfdCAqb2ZmcCkKK3sKKwl1bnNpZ25lZCBpbnQgZmxhZ3MgPSAwLCBtYXNrID0gMDsKKwlzdHJ1Y3QgZGRlYnVnX3F1ZXJ5IHF1ZXJ5OworI2RlZmluZSBNQVhXT1JEUyA5CisJaW50IG53b3JkczsKKwljaGFyICp3b3Jkc1tNQVhXT1JEU107CisJY2hhciB0bXBidWZbMjU2XTsKKworCWlmIChsZW4gPT0gMCkKKwkJcmV0dXJuIDA7CisJLyogd2UgZG9uJ3QgY2hlY2sgKm9mZnAgLS0gbXVsdGlwbGUgd3JpdGVzKCkgYXJlIGFsbG93ZWQgKi8KKwlpZiAobGVuID4gc2l6ZW9mKHRtcGJ1ZiktMSkKKwkJcmV0dXJuIC1FMkJJRzsKKwlpZiAoY29weV9mcm9tX3VzZXIodG1wYnVmLCB1YnVmLCBsZW4pKQorCQlyZXR1cm4gLUVGQVVMVDsKKwl0bXBidWZbbGVuXSA9ICdcMCc7CisJaWYgKHZlcmJvc2UpCisJCXByaW50ayhLRVJOX0lORk8gIiVzOiByZWFkICVkIGJ5dGVzIGZyb20gdXNlcnNwYWNlXG4iLAorCQkJX19mdW5jX18sIChpbnQpbGVuKTsKKworCW53b3JkcyA9IGRkZWJ1Z190b2tlbml6ZSh0bXBidWYsIHdvcmRzLCBNQVhXT1JEUyk7CisJaWYgKG53b3JkcyA8IDApCisJCXJldHVybiAtRUlOVkFMOworCWlmIChkZGVidWdfcGFyc2VfcXVlcnkod29yZHMsIG53b3Jkcy0xLCAmcXVlcnkpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoZGRlYnVnX3BhcnNlX2ZsYWdzKHdvcmRzW253b3Jkcy0xXSwgJmZsYWdzLCAmbWFzaykpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogYWN0dWFsbHkgZ28gYW5kIGltcGxlbWVudCB0aGUgY2hhbmdlICovCisJZGRlYnVnX2NoYW5nZSgmcXVlcnksIGZsYWdzLCBtYXNrKTsKKworCSpvZmZwICs9IGxlbjsKKwlyZXR1cm4gbGVuOworfQorCisvKgorICogU2V0IHRoZSBpdGVyYXRvciB0byBwb2ludCB0byB0aGUgZmlyc3QgX2RkZWJ1ZyBvYmplY3QKKyAqIGFuZCByZXR1cm4gYSBwb2ludGVyIHRvIHRoYXQgZmlyc3Qgb2JqZWN0LiAgUmV0dXJucworICogTlVMTCBpZiB0aGVyZSBhcmUgbm8gX2RkZWJ1Z3MgYXQgYWxsLgorICovCitzdGF0aWMgc3RydWN0IF9kZGVidWcgKmRkZWJ1Z19pdGVyX2ZpcnN0KHN0cnVjdCBkZGVidWdfaXRlciAqaXRlcikKK3sKKwlpZiAobGlzdF9lbXB0eSgmZGRlYnVnX3RhYmxlcykpIHsKKwkJaXRlci0+dGFibGUgPSBOVUxMOworCQlpdGVyLT5pZHggPSAwOworCQlyZXR1cm4gTlVMTDsKKwl9CisJaXRlci0+dGFibGUgPSBsaXN0X2VudHJ5KGRkZWJ1Z190YWJsZXMubmV4dCwKKwkJCQkgc3RydWN0IGRkZWJ1Z190YWJsZSwgbGluayk7CisJaXRlci0+aWR4ID0gMDsKKwlyZXR1cm4gJml0ZXItPnRhYmxlLT5kZGVidWdzW2l0ZXItPmlkeF07Cit9CisKKy8qCisgKiBBZHZhbmNlIHRoZSBpdGVyYXRvciB0byBwb2ludCB0byB0aGUgbmV4dCBfZGRlYnVnCisgKiBvYmplY3QgZnJvbSB0aGUgb25lIHRoZSBpdGVyYXRvciBjdXJyZW50bHkgcG9pbnRzIGF0LAorICogYW5kIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBuZXcgX2RkZWJ1Zy4gIFJldHVybnMKKyAqIE5VTEwgaWYgdGhlIGl0ZXJhdG9yIGhhcyBzZWVuIGFsbCB0aGUgX2RkZWJ1Z3MuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgX2RkZWJ1ZyAqZGRlYnVnX2l0ZXJfbmV4dChzdHJ1Y3QgZGRlYnVnX2l0ZXIgKml0ZXIpCit7CisJaWYgKGl0ZXItPnRhYmxlID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCWlmICgrK2l0ZXItPmlkeCA9PSBpdGVyLT50YWJsZS0+bnVtX2RkZWJ1Z3MpIHsKKwkJLyogaXRlcmF0ZSB0byBuZXh0IHRhYmxlICovCisJCWl0ZXItPmlkeCA9IDA7CisJCWlmIChsaXN0X2lzX2xhc3QoJml0ZXItPnRhYmxlLT5saW5rLCAmZGRlYnVnX3RhYmxlcykpIHsKKwkJCWl0ZXItPnRhYmxlID0gTlVMTDsKKwkJCXJldHVybiBOVUxMOworCQl9CisJCWl0ZXItPnRhYmxlID0gbGlzdF9lbnRyeShpdGVyLT50YWJsZS0+bGluay5uZXh0LAorCQkJCQkgc3RydWN0IGRkZWJ1Z190YWJsZSwgbGluayk7CisJfQorCXJldHVybiAmaXRlci0+dGFibGUtPmRkZWJ1Z3NbaXRlci0+aWR4XTsKK30KKworLyoKKyAqIFNlcV9vcHMgc3RhcnQgbWV0aG9kLiAgQ2FsbGVkIGF0IHRoZSBzdGFydCBvZiBldmVyeQorICogcmVhZCgpIGNhbGwgZnJvbSB1c2Vyc3BhY2UuICBUYWtlcyB0aGUgZGRlYnVnX2xvY2sgYW5kCisgKiBzZWVrcyB0aGUgc2VxX2ZpbGUncyBpdGVyYXRvciB0byB0aGUgZ2l2ZW4gcG9zaXRpb24uCisgKi8KK3N0YXRpYyB2b2lkICpkZGVidWdfcHJvY19zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqcG9zKQoreworCXN0cnVjdCBkZGVidWdfaXRlciAqaXRlciA9IG0tPnByaXZhdGU7CisJc3RydWN0IF9kZGVidWcgKmRwOworCWludCBuID0gKnBvczsKKworCWlmICh2ZXJib3NlKQorCQlwcmludGsoS0VSTl9JTkZPICIlczogY2FsbGVkIG09JXAgKnBvcz0lbGxkXG4iLAorCQkJX19mdW5jX18sIG0sICh1bnNpZ25lZCBsb25nIGxvbmcpKnBvcyk7CisKKwltdXRleF9sb2NrKCZkZGVidWdfbG9jayk7CisKKwlpZiAoIW4pCisJCXJldHVybiBTRVFfU1RBUlRfVE9LRU47CisJaWYgKG4gPCAwKQorCQlyZXR1cm4gTlVMTDsKKwlkcCA9IGRkZWJ1Z19pdGVyX2ZpcnN0KGl0ZXIpOworCXdoaWxlIChkcCAhPSBOVUxMICYmIC0tbiA+IDApCisJCWRwID0gZGRlYnVnX2l0ZXJfbmV4dChpdGVyKTsKKwlyZXR1cm4gZHA7Cit9CisKKy8qCisgKiBTZXFfb3BzIG5leHQgbWV0aG9kLiAgQ2FsbGVkIHNldmVyYWwgdGltZXMgd2l0aGluIGEgcmVhZCgpCisgKiBjYWxsIGZyb20gdXNlcnNwYWNlLCB3aXRoIGRkZWJ1Z19sb2NrIGhlbGQuICBXYWxrcyB0byB0aGUKKyAqIG5leHQgX2RkZWJ1ZyBvYmplY3Qgd2l0aCBhIHNwZWNpYWwgY2FzZSBmb3IgdGhlIGhlYWRlciBsaW5lLgorICovCitzdGF0aWMgdm9pZCAqZGRlYnVnX3Byb2NfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnAsIGxvZmZfdCAqcG9zKQoreworCXN0cnVjdCBkZGVidWdfaXRlciAqaXRlciA9IG0tPnByaXZhdGU7CisJc3RydWN0IF9kZGVidWcgKmRwOworCisJaWYgKHZlcmJvc2UpCisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBjYWxsZWQgbT0lcCBwPSVwICpwb3M9JWxsZFxuIiwKKwkJCV9fZnVuY19fLCBtLCBwLCAodW5zaWduZWQgbG9uZyBsb25nKSpwb3MpOworCisJaWYgKHAgPT0gU0VRX1NUQVJUX1RPS0VOKQorCQlkcCA9IGRkZWJ1Z19pdGVyX2ZpcnN0KGl0ZXIpOworCWVsc2UKKwkJZHAgPSBkZGVidWdfaXRlcl9uZXh0KGl0ZXIpOworCSsrKnBvczsKKwlyZXR1cm4gZHA7Cit9CisKKy8qCisgKiBTZXFfb3BzIHNob3cgbWV0aG9kLiAgQ2FsbGVkIHNldmVyYWwgdGltZXMgd2l0aGluIGEgcmVhZCgpCisgKiBjYWxsIGZyb20gdXNlcnNwYWNlLCB3aXRoIGRkZWJ1Z19sb2NrIGhlbGQuICBGb3JtYXRzIHRoZQorICogY3VycmVudCBfZGRlYnVnIGFzIGEgc2luZ2xlIGh1bWFuLXJlYWRhYmxlIGxpbmUsIHdpdGggYQorICogc3BlY2lhbCBjYXNlIGZvciB0aGUgaGVhZGVyIGxpbmUuCisgKi8KK3N0YXRpYyBpbnQgZGRlYnVnX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnApCit7CisJc3RydWN0IGRkZWJ1Z19pdGVyICppdGVyID0gbS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgX2RkZWJ1ZyAqZHAgPSBwOworCWNoYXIgZmxhZ3NidWZbOF07CisKKwlpZiAodmVyYm9zZSkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGNhbGxlZCBtPSVwIHA9JXBcbiIsCisJCQlfX2Z1bmNfXywgbSwgcCk7CisKKwlpZiAocCA9PSBTRVFfU1RBUlRfVE9LRU4pIHsKKwkJc2VxX3B1dHMobSwKKwkJCSIjIGZpbGVuYW1lOmxpbmVubyBbbW9kdWxlXWZ1bmN0aW9uIGZsYWdzIGZvcm1hdFxuIik7CisJCXJldHVybiAwOworCX0KKworCXNlcV9wcmludGYobSwgIiVzOiV1IFslc10lcyAlcyBcIiIsCisJCSAgIGRwLT5maWxlbmFtZSwgZHAtPmxpbmVubywKKwkJICAgaXRlci0+dGFibGUtPm1vZF9uYW1lLCBkcC0+ZnVuY3Rpb24sCisJCSAgIGRkZWJ1Z19kZXNjcmliZV9mbGFncyhkcCwgZmxhZ3NidWYsIHNpemVvZihmbGFnc2J1ZikpKTsKKwlzZXFfZXNjYXBlKG0sIGRwLT5mb3JtYXQsICJcdFxyXG5cIiIpOworCXNlcV9wdXRzKG0sICJcIlxuIik7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFNlcV9vcHMgc3RvcCBtZXRob2QuICBDYWxsZWQgYXQgdGhlIGVuZCBvZiBlYWNoIHJlYWQoKQorICogY2FsbCBmcm9tIHVzZXJzcGFjZS4gIERyb3BzIGRkZWJ1Z19sb2NrLgorICovCitzdGF0aWMgdm9pZCBkZGVidWdfcHJvY19zdG9wKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqcCkKK3sKKwlpZiAodmVyYm9zZSkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGNhbGxlZCBtPSVwIHA9JXBcbiIsCisJCQlfX2Z1bmNfXywgbSwgcCk7CisJbXV0ZXhfdW5sb2NrKCZkZGVidWdfbG9jayk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgZGRlYnVnX3Byb2Nfc2Vxb3BzID0geworCS5zdGFydCA9IGRkZWJ1Z19wcm9jX3N0YXJ0LAorCS5uZXh0ID0gZGRlYnVnX3Byb2NfbmV4dCwKKwkuc2hvdyA9IGRkZWJ1Z19wcm9jX3Nob3csCisJLnN0b3AgPSBkZGVidWdfcHJvY19zdG9wCit9OworCisvKgorICogRmlsZV9vcHMtPm9wZW4gbWV0aG9kIGZvciA8ZGVidWdmcz4vZHluYW1pY19kZWJ1Zy9jb250cm9sLiAgRG9lcyB0aGUgc2VxX2ZpbGUKKyAqIHNldHVwIGRhbmNlLCBhbmQgYWxzbyBjcmVhdGVzIGFuIGl0ZXJhdG9yIHRvIHdhbGsgdGhlIF9kZGVidWdzLgorICogTm90ZSB0aGF0IHdlIGNyZWF0ZSBhIHNlcV9maWxlIGFsd2F5cywgZXZlbiBmb3IgT19XUk9OTFkgZmlsZXMKKyAqIHdoZXJlIGl0J3Mgbm90IG5lZWRlZCwgYXMgZG9pbmcgc28gc2ltcGxpZmllcyB0aGUgLT5yZWxlYXNlIG1ldGhvZC4KKyAqLworc3RhdGljIGludCBkZGVidWdfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBkZGVidWdfaXRlciAqaXRlcjsKKwlpbnQgZXJyOworCisJaWYgKHZlcmJvc2UpCisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBjYWxsZWRcbiIsIF9fZnVuY19fKTsKKworCWl0ZXIgPSBremFsbG9jKHNpemVvZigqaXRlciksIEdGUF9LRVJORUwpOworCWlmIChpdGVyID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJZXJyID0gc2VxX29wZW4oZmlsZSwgJmRkZWJ1Z19wcm9jX3NlcW9wcyk7CisJaWYgKGVycikgeworCQlrZnJlZShpdGVyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisJKChzdHJ1Y3Qgc2VxX2ZpbGUgKikgZmlsZS0+cHJpdmF0ZV9kYXRhKS0+cHJpdmF0ZSA9IGl0ZXI7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRkZWJ1Z19wcm9jX2ZvcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm9wZW4gPSBkZGVidWdfcHJvY19vcGVuLAorCS5yZWFkID0gc2VxX3JlYWQsCisJLmxsc2VlayA9IHNlcV9sc2VlaywKKwkucmVsZWFzZSA9IHNlcV9yZWxlYXNlX3ByaXZhdGUsCisJLndyaXRlID0gZGRlYnVnX3Byb2Nfd3JpdGUKK307CisKKy8qCisgKiBBbGxvY2F0ZSBhIG5ldyBkZGVidWdfdGFibGUgZm9yIHRoZSBnaXZlbiBtb2R1bGUKKyAqIGFuZCBhZGQgaXQgdG8gdGhlIGdsb2JhbCBsaXN0LgorICovCitpbnQgZGRlYnVnX2FkZF9tb2R1bGUoc3RydWN0IF9kZGVidWcgKnRhYiwgdW5zaWduZWQgaW50IG4sCisJCQkgICAgIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IGRkZWJ1Z190YWJsZSAqZHQ7CisJY2hhciAqbmV3X25hbWU7CisKKwlkdCA9IGt6YWxsb2Moc2l6ZW9mKCpkdCksIEdGUF9LRVJORUwpOworCWlmIChkdCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwluZXdfbmFtZSA9IGtzdHJkdXAobmFtZSwgR0ZQX0tFUk5FTCk7CisJaWYgKG5ld19uYW1lID09IE5VTEwpIHsKKwkJa2ZyZWUoZHQpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJZHQtPm1vZF9uYW1lID0gbmV3X25hbWU7CisJZHQtPm51bV9kZGVidWdzID0gbjsKKwlkdC0+bnVtX2VuYWJsZWQgPSAwOworCWR0LT5kZGVidWdzID0gdGFiOworCisJbXV0ZXhfbG9jaygmZGRlYnVnX2xvY2spOworCWxpc3RfYWRkX3RhaWwoJmR0LT5saW5rLCAmZGRlYnVnX3RhYmxlcyk7CisJbXV0ZXhfdW5sb2NrKCZkZGVidWdfbG9jayk7CisKKwlpZiAodmVyYm9zZSkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXUgZGVidWcgcHJpbnRzIGluIG1vZHVsZSAlc1xuIiwKKwkJCQkgbiwgZHQtPm1vZF9uYW1lKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGRkZWJ1Z19hZGRfbW9kdWxlKTsKKworc3RhdGljIHZvaWQgZGRlYnVnX3RhYmxlX2ZyZWUoc3RydWN0IGRkZWJ1Z190YWJsZSAqZHQpCit7CisJbGlzdF9kZWxfaW5pdCgmZHQtPmxpbmspOworCWtmcmVlKGR0LT5tb2RfbmFtZSk7CisJa2ZyZWUoZHQpOworfQorCisvKgorICogQ2FsbGVkIGluIHJlc3BvbnNlIHRvIGEgbW9kdWxlIGJlaW5nIHVubG9hZGVkLiAgUmVtb3ZlcworICogYW55IGRkZWJ1Z190YWJsZSdzIHdoaWNoIHBvaW50IGF0IHRoZSBtb2R1bGUuCisgKi8KK2ludCBkZGVidWdfcmVtb3ZlX21vZHVsZShjaGFyICptb2RfbmFtZSkKK3sKKwlzdHJ1Y3QgZGRlYnVnX3RhYmxlICpkdCwgKm5leHRkdDsKKwlpbnQgcmV0ID0gLUVOT0VOVDsKKworCWlmICh2ZXJib3NlKQorCQlwcmludGsoS0VSTl9JTkZPICIlczogcmVtb3ZpbmcgbW9kdWxlIFwiJXNcIlxuIiwKKwkJCQlfX2Z1bmNfXywgbW9kX25hbWUpOworCisJbXV0ZXhfbG9jaygmZGRlYnVnX2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkdCwgbmV4dGR0LCAmZGRlYnVnX3RhYmxlcywgbGluaykgeworCQlpZiAoIXN0cmNtcChkdC0+bW9kX25hbWUsIG1vZF9uYW1lKSkgeworCQkJZGRlYnVnX3RhYmxlX2ZyZWUoZHQpOworCQkJcmV0ID0gMDsKKwkJfQorCX0KKwltdXRleF91bmxvY2soJmRkZWJ1Z19sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwoZGRlYnVnX3JlbW92ZV9tb2R1bGUpOworCitzdGF0aWMgdm9pZCBkZGVidWdfcmVtb3ZlX2FsbF90YWJsZXModm9pZCkKK3sKKwltdXRleF9sb2NrKCZkZGVidWdfbG9jayk7CisJd2hpbGUgKCFsaXN0X2VtcHR5KCZkZGVidWdfdGFibGVzKSkgeworCQlzdHJ1Y3QgZGRlYnVnX3RhYmxlICpkdCA9IGxpc3RfZW50cnkoZGRlYnVnX3RhYmxlcy5uZXh0LAorCQkJCQkJICAgICAgc3RydWN0IGRkZWJ1Z190YWJsZSwKKwkJCQkJCSAgICAgIGxpbmspOworCQlkZGVidWdfdGFibGVfZnJlZShkdCk7CisJfQorCW11dGV4X3VubG9jaygmZGRlYnVnX2xvY2spOworfQorCitzdGF0aWMgaW50IF9faW5pdCBkeW5hbWljX2RlYnVnX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgZGVudHJ5ICpkaXIsICpmaWxlOworCXN0cnVjdCBfZGRlYnVnICppdGVyLCAqaXRlcl9zdGFydDsKKwljb25zdCBjaGFyICptb2RuYW1lID0gTlVMTDsKKwlpbnQgcmV0ID0gMDsKKwlpbnQgbiA9IDA7CisKKwlkaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoImR5bmFtaWNfZGVidWciLCBOVUxMKTsKKwlpZiAoIWRpcikKKwkJcmV0dXJuIC1FTk9NRU07CisJZmlsZSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoImNvbnRyb2wiLCAwNjQ0LCBkaXIsIE5VTEwsCisJCQkJCSZkZGVidWdfcHJvY19mb3BzKTsKKwlpZiAoIWZpbGUpIHsKKwkJZGVidWdmc19yZW1vdmUoZGlyKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWlmIChfX3N0YXJ0X19fdmVyYm9zZSAhPSBfX3N0b3BfX192ZXJib3NlKSB7CisJCWl0ZXIgPSBfX3N0YXJ0X19fdmVyYm9zZTsKKwkJbW9kbmFtZSA9IGl0ZXItPm1vZG5hbWU7CisJCWl0ZXJfc3RhcnQgPSBpdGVyOworCQlmb3IgKDsgaXRlciA8IF9fc3RvcF9fX3ZlcmJvc2U7IGl0ZXIrKykgeworCQkJaWYgKHN0cmNtcChtb2RuYW1lLCBpdGVyLT5tb2RuYW1lKSkgeworCQkJCXJldCA9IGRkZWJ1Z19hZGRfbW9kdWxlKGl0ZXJfc3RhcnQsIG4sIG1vZG5hbWUpOworCQkJCWlmIChyZXQpCisJCQkJCWdvdG8gb3V0X2ZyZWU7CisJCQkJbiA9IDA7CisJCQkJbW9kbmFtZSA9IGl0ZXItPm1vZG5hbWU7CisJCQkJaXRlcl9zdGFydCA9IGl0ZXI7CisJCQl9CisJCQluKys7CisJCX0KKwkJcmV0ID0gZGRlYnVnX2FkZF9tb2R1bGUoaXRlcl9zdGFydCwgbiwgbW9kbmFtZSk7CisJfQorb3V0X2ZyZWU6CisJaWYgKHJldCkgeworCQlkZGVidWdfcmVtb3ZlX2FsbF90YWJsZXMoKTsKKwkJZGVidWdmc19yZW1vdmUoZGlyKTsKKwkJZGVidWdmc19yZW1vdmUoZmlsZSk7CisJfQorCXJldHVybiAwOworfQorbW9kdWxlX2luaXQoZHluYW1pY19kZWJ1Z19pbml0KTsKZGlmZiAtLWdpdCBhL2xpYi9keW5hbWljX3ByaW50ay5jIGIvbGliL2R5bmFtaWNfcHJpbnRrLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2NWExOTcuLjAwMDAwMDAKLS0tIGEvbGliL2R5bmFtaWNfcHJpbnRrLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MTQgKzAsMCBAQAotLyoKLSAqIGxpYi9keW5hbWljX3ByaW50ay5jCi0gKgotICogbWFrZSBwcl9kZWJ1ZygpL2Rldl9kYmcoKSBjYWxscyBydW50aW1lIGNvbmZpZ3VyYWJsZSBiYXNlZCB1cG9uIHRoZWlyCi0gKiB0aGVpciBzb3VyY2UgbW9kdWxlLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBSZWQgSGF0LCBJbmMuLCBKYXNvbiBCYXJvbiA8amJhcm9uQHJlZGhhdC5jb20+Ci0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotCi1leHRlcm4gc3RydWN0IG1vZF9kZWJ1ZyBfX3N0YXJ0X19fdmVyYm9zZVtdOwotZXh0ZXJuIHN0cnVjdCBtb2RfZGVidWcgX19zdG9wX19fdmVyYm9zZVtdOwotCi1zdHJ1Y3QgZGVidWdfbmFtZSB7Ci0Jc3RydWN0IGhsaXN0X25vZGUgaGxpc3Q7Ci0Jc3RydWN0IGhsaXN0X25vZGUgaGxpc3QyOwotCWludCBoYXNoMTsKLQlpbnQgaGFzaDI7Ci0JY2hhciAqbmFtZTsKLQlpbnQgZW5hYmxlOwotCWludCB0eXBlOwotfTsKLQotc3RhdGljIGludCBucl9lbnRyaWVzOwotc3RhdGljIGludCBudW1fZW5hYmxlZDsKLWludCBkeW5hbWljX2VuYWJsZWQgPSBEWU5BTUlDX0VOQUJMRURfTk9ORTsKLXN0YXRpYyBzdHJ1Y3QgaGxpc3RfaGVhZCBtb2R1bGVfdGFibGVbREVCVUdfSEFTSF9UQUJMRV9TSVpFXSA9Ci0JeyBbMCAuLi4gREVCVUdfSEFTSF9UQUJMRV9TSVpFLTFdID0gSExJU1RfSEVBRF9JTklUIH07Ci1zdGF0aWMgc3RydWN0IGhsaXN0X2hlYWQgbW9kdWxlX3RhYmxlMltERUJVR19IQVNIX1RBQkxFX1NJWkVdID0KLQl7IFswIC4uLiBERUJVR19IQVNIX1RBQkxFX1NJWkUtMV0gPSBITElTVF9IRUFEX0lOSVQgfTsKLXN0YXRpYyBERUNMQVJFX01VVEVYKGRlYnVnX2xpc3RfbXV0ZXgpOwotCi0vKiBkeW5hbWljX3ByaW50a19lbmFibGVkLCBhbmQgZHluYW1pY19wcmludGtfZW5hYmxlZDIgYXJlIGJpdG1hc2tzIGluIHdoaWNoCi0gKiBiaXQgbiBpcyBzZXQgdG8gMSBpZiBhbnkgbW9kbmFtZSBoYXNoZXMgaW50byB0aGUgYnVja2V0IG4sIDAgb3RoZXJ3aXNlLiBUaGV5Ci0gKiB1c2UgaW5kZXBlbmRlbnQgaGFzaCBmdW5jdGlvbnMsIHRvIHJlZHVjZSB0aGUgY2hhbmNlIG9mIGZhbHNlIHBvc2l0aXZlcy4KLSAqLwotbG9uZyBsb25nIGR5bmFtaWNfcHJpbnRrX2VuYWJsZWQ7Ci1FWFBPUlRfU1lNQk9MX0dQTChkeW5hbWljX3ByaW50a19lbmFibGVkKTsKLWxvbmcgbG9uZyBkeW5hbWljX3ByaW50a19lbmFibGVkMjsKLUVYUE9SVF9TWU1CT0xfR1BMKGR5bmFtaWNfcHJpbnRrX2VuYWJsZWQyKTsKLQotLyogcmV0dXJucyB0aGUgZGVidWcgbW9kdWxlIHBvaW50ZXIuICovCi1zdGF0aWMgc3RydWN0IGRlYnVnX25hbWUgKmZpbmRfZGVidWdfbW9kdWxlKGNoYXIgKm1vZHVsZV9uYW1lKQotewotCWludCBpOwotCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkOwotCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOwotCXN0cnVjdCBkZWJ1Z19uYW1lICplbGVtZW50OwotCi0JZWxlbWVudCA9IE5VTEw7Ci0JZm9yIChpID0gMDsgaSA8IERFQlVHX0hBU0hfVEFCTEVfU0laRTsgaSsrKSB7Ci0JCWhlYWQgPSAmbW9kdWxlX3RhYmxlW2ldOwotCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZWxlbWVudCwgbm9kZSwgaGVhZCwgaGxpc3QpCi0JCQlpZiAoIXN0cmNtcChlbGVtZW50LT5uYW1lLCBtb2R1bGVfbmFtZSkpCi0JCQkJcmV0dXJuIGVsZW1lbnQ7Ci0JfQotCXJldHVybiBOVUxMOwotfQotCi0vKiByZXR1cm5zIHRoZSBkZWJ1ZyBtb2R1bGUgcG9pbnRlci4gKi8KLXN0YXRpYyBzdHJ1Y3QgZGVidWdfbmFtZSAqZmluZF9kZWJ1Z19tb2R1bGVfaGFzaChjaGFyICptb2R1bGVfbmFtZSwgaW50IGhhc2gpCi17Ci0Jc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7Ci0Jc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7Ci0Jc3RydWN0IGRlYnVnX25hbWUgKmVsZW1lbnQ7Ci0KLQllbGVtZW50ID0gTlVMTDsKLQloZWFkID0gJm1vZHVsZV90YWJsZVtoYXNoXTsKLQlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZWxlbWVudCwgbm9kZSwgaGVhZCwgaGxpc3QpCi0JCWlmICghc3RyY21wKGVsZW1lbnQtPm5hbWUsIG1vZHVsZV9uYW1lKSkKLQkJCXJldHVybiBlbGVtZW50OwotCXJldHVybiBOVUxMOwotfQotCi0vKiBjYWxsZXIgbXVzdCBob2xkIG11dGV4Ki8KLXN0YXRpYyBpbnQgX19hZGRfZGVidWdfbW9kdWxlKGNoYXIgKm1vZF9uYW1lLCBpbnQgaGFzaCwgaW50IGhhc2gyKQotewotCXN0cnVjdCBkZWJ1Z19uYW1lICpuZXc7Ci0JY2hhciAqbW9kdWxlX25hbWU7Ci0JaW50IHJldCA9IDA7Ci0KLQlpZiAoZmluZF9kZWJ1Z19tb2R1bGUobW9kX25hbWUpKSB7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0OwotCX0KLQltb2R1bGVfbmFtZSA9IGttYWxsb2Moc3RybGVuKG1vZF9uYW1lKSArIDEsIEdGUF9LRVJORUwpOwotCWlmICghbW9kdWxlX25hbWUpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBvdXQ7Ci0JfQotCW1vZHVsZV9uYW1lID0gc3RyY3B5KG1vZHVsZV9uYW1lLCBtb2RfbmFtZSk7Ci0JbW9kdWxlX25hbWVbc3RybGVuKG1vZF9uYW1lKV0gPSAnXDAnOwotCW5ldyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkZWJ1Z19uYW1lKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFuZXcpIHsKLQkJa2ZyZWUobW9kdWxlX25hbWUpOwotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dDsKLQl9Ci0JSU5JVF9ITElTVF9OT0RFKCZuZXctPmhsaXN0KTsKLQlJTklUX0hMSVNUX05PREUoJm5ldy0+aGxpc3QyKTsKLQluZXctPm5hbWUgPSBtb2R1bGVfbmFtZTsKLQluZXctPmhhc2gxID0gaGFzaDsKLQluZXctPmhhc2gyID0gaGFzaDI7Ci0JaGxpc3RfYWRkX2hlYWRfcmN1KCZuZXctPmhsaXN0LCAmbW9kdWxlX3RhYmxlW2hhc2hdKTsKLQlobGlzdF9hZGRfaGVhZF9yY3UoJm5ldy0+aGxpc3QyLCAmbW9kdWxlX3RhYmxlMltoYXNoMl0pOwotCW5yX2VudHJpZXMrKzsKLW91dDoKLQlyZXR1cm4gcmV0OwotfQotCi1pbnQgdW5yZWdpc3Rlcl9keW5hbWljX2RlYnVnX21vZHVsZShjaGFyICptb2RfbmFtZSkKLXsKLQlzdHJ1Y3QgZGVidWdfbmFtZSAqZWxlbWVudDsKLQlpbnQgcmV0ID0gMDsKLQotCWRvd24oJmRlYnVnX2xpc3RfbXV0ZXgpOwotCWVsZW1lbnQgPSBmaW5kX2RlYnVnX21vZHVsZShtb2RfbmFtZSk7Ci0JaWYgKCFlbGVtZW50KSB7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0OwotCX0KLQlobGlzdF9kZWxfcmN1KCZlbGVtZW50LT5obGlzdCk7Ci0JaGxpc3RfZGVsX3JjdSgmZWxlbWVudC0+aGxpc3QyKTsKLQlzeW5jaHJvbml6ZV9yY3UoKTsKLQlrZnJlZShlbGVtZW50LT5uYW1lKTsKLQlpZiAoZWxlbWVudC0+ZW5hYmxlKQotCQludW1fZW5hYmxlZC0tOwotCWtmcmVlKGVsZW1lbnQpOwotCW5yX2VudHJpZXMtLTsKLW91dDoKLQl1cCgmZGVidWdfbGlzdF9tdXRleCk7Ci0JcmV0dXJuIHJldDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHVucmVnaXN0ZXJfZHluYW1pY19kZWJ1Z19tb2R1bGUpOwotCi1pbnQgcmVnaXN0ZXJfZHluYW1pY19kZWJ1Z19tb2R1bGUoY2hhciAqbW9kX25hbWUsIGludCB0eXBlLCBjaGFyICpzaGFyZV9uYW1lLAotCQkJCQljaGFyICpmbGFncywgaW50IGhhc2gsIGludCBoYXNoMikKLXsKLQlzdHJ1Y3QgZGVidWdfbmFtZSAqZWxlbTsKLQlpbnQgcmV0ID0gMDsKLQotCWRvd24oJmRlYnVnX2xpc3RfbXV0ZXgpOwotCWVsZW0gPSBmaW5kX2RlYnVnX21vZHVsZShtb2RfbmFtZSk7Ci0JaWYgKCFlbGVtKSB7Ci0JCWlmIChfX2FkZF9kZWJ1Z19tb2R1bGUobW9kX25hbWUsIGhhc2gsIGhhc2gyKSkKLQkJCWdvdG8gb3V0OwotCQllbGVtID0gZmluZF9kZWJ1Z19tb2R1bGUobW9kX25hbWUpOwotCQlpZiAoZHluYW1pY19lbmFibGVkID09IERZTkFNSUNfRU5BQkxFRF9BTEwgJiYKLQkJCQkhc3RyY21wKG1vZF9uYW1lLCBzaGFyZV9uYW1lKSkgewotCQkJZWxlbS0+ZW5hYmxlID0gdHJ1ZTsKLQkJCW51bV9lbmFibGVkKys7Ci0JCX0KLQl9Ci0JZWxlbS0+dHlwZSB8PSB0eXBlOwotb3V0OgotCXVwKCZkZWJ1Z19saXN0X211dGV4KTsKLQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTF9HUEwocmVnaXN0ZXJfZHluYW1pY19kZWJ1Z19tb2R1bGUpOwotCi1pbnQgX19keW5hbWljX2RiZ19lbmFibGVkX2hlbHBlcihjaGFyICptb2RfbmFtZSwgaW50IHR5cGUsIGludCB2YWx1ZSwgaW50IGhhc2gpCi17Ci0Jc3RydWN0IGRlYnVnX25hbWUgKmVsZW07Ci0JaW50IHJldCA9IDA7Ci0KLQlpZiAoZHluYW1pY19lbmFibGVkID09IERZTkFNSUNfRU5BQkxFRF9BTEwpCi0JCXJldHVybiAxOwotCXJjdV9yZWFkX2xvY2soKTsKLQllbGVtID0gZmluZF9kZWJ1Z19tb2R1bGVfaGFzaChtb2RfbmFtZSwgaGFzaCk7Ci0JaWYgKGVsZW0gJiYgZWxlbS0+ZW5hYmxlKQotCQlyZXQgPSAxOwotCXJjdV9yZWFkX3VubG9jaygpOwotCXJldHVybiByZXQ7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChfX2R5bmFtaWNfZGJnX2VuYWJsZWRfaGVscGVyKTsKLQotc3RhdGljIHZvaWQgc2V0X2FsbChib29sIGVuYWJsZSkKLXsKLQlzdHJ1Y3QgZGVidWdfbmFtZSAqZTsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKLQlpbnQgaTsKLQlsb25nIGxvbmcgZW5hYmxlX21hc2s7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgREVCVUdfSEFTSF9UQUJMRV9TSVpFOyBpKyspIHsKLQkJaWYgKG1vZHVsZV90YWJsZVtpXS5maXJzdCAhPSBOVUxMKSB7Ci0JCQlobGlzdF9mb3JfZWFjaF9lbnRyeShlLCBub2RlLCAmbW9kdWxlX3RhYmxlW2ldLCBobGlzdCkgewotCQkJCWUtPmVuYWJsZSA9IGVuYWJsZTsKLQkJCX0KLQkJfQotCX0KLQlpZiAoZW5hYmxlKQotCQllbmFibGVfbWFzayA9IFVMTE9OR19NQVg7Ci0JZWxzZQotCQllbmFibGVfbWFzayA9IDA7Ci0JZHluYW1pY19wcmludGtfZW5hYmxlZCA9IGVuYWJsZV9tYXNrOwotCWR5bmFtaWNfcHJpbnRrX2VuYWJsZWQyID0gZW5hYmxlX21hc2s7Ci19Ci0KLXN0YXRpYyBpbnQgZGlzYWJsZWRfaGFzaChpbnQgaSwgYm9vbCBmaXJzdF90YWJsZSkKLXsKLQlzdHJ1Y3QgZGVidWdfbmFtZSAqZTsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKLQotCWlmIChmaXJzdF90YWJsZSkgewotCQlobGlzdF9mb3JfZWFjaF9lbnRyeShlLCBub2RlLCAmbW9kdWxlX3RhYmxlW2ldLCBobGlzdCkgewotCQkJaWYgKGUtPmVuYWJsZSkKLQkJCQlyZXR1cm4gMDsKLQkJfQotCX0gZWxzZSB7Ci0JCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGUsIG5vZGUsICZtb2R1bGVfdGFibGUyW2ldLCBobGlzdDIpIHsKLQkJCWlmIChlLT5lbmFibGUpCi0JCQkJcmV0dXJuIDA7Ci0JCX0KLQl9Ci0JcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHByX2RlYnVnX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAotCQkJCXNpemVfdCBsZW5ndGgsIGxvZmZfdCAqcHBvcykKLXsKLQljaGFyICpidWZmZXIsICpzLCAqdmFsdWVfc3RyLCAqc2V0dGluZ19zdHI7Ci0JaW50IGVyciwgdmFsdWU7Ci0Jc3RydWN0IGRlYnVnX25hbWUgKmVsZW0gPSBOVUxMOwotCWludCBhbGwgPSAwOwotCi0JaWYgKGxlbmd0aCA+IFBBR0VfU0laRSB8fCBsZW5ndGggPCAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWJ1ZmZlciA9IChjaGFyICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpOwotCWlmICghYnVmZmVyKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWVyciA9IC1FRkFVTFQ7Ci0JaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZmZlciwgYnVmLCBsZW5ndGgpKQotCQlnb3RvIG91dDsKLQotCWVyciA9IC1FSU5WQUw7Ci0JaWYgKGxlbmd0aCA8IFBBR0VfU0laRSkKLQkJYnVmZmVyW2xlbmd0aF0gPSAnXDAnOwotCWVsc2UgaWYgKGJ1ZmZlcltQQUdFX1NJWkUtMV0pCi0JCWdvdG8gb3V0OwotCi0JZXJyID0gLUVJTlZBTDsKLQlkb3duKCZkZWJ1Z19saXN0X211dGV4KTsKLQotCWlmIChzdHJuY21wKCJzZXQiLCBidWZmZXIsIDMpKQotCQlnb3RvIG91dF91cDsKLQlzID0gYnVmZmVyICsgMzsKLQlzZXR0aW5nX3N0ciA9IHN0cnNlcCgmcywgIj0iKTsKLQlpZiAocyA9PSBOVUxMKQotCQlnb3RvIG91dF91cDsKLQlzZXR0aW5nX3N0ciA9IHN0cnN0cmlwKHNldHRpbmdfc3RyKTsKLQl2YWx1ZV9zdHIgPSBzdHJzZXAoJnMsICIgIik7Ci0JaWYgKHMgPT0gTlVMTCkKLQkJZ290byBvdXRfdXA7Ci0JcyA9IHN0cnN0cmlwKHMpOwotCWlmICghc3RybmNtcChzLCAiYWxsIiwgMykpCi0JCWFsbCA9IDE7Ci0JZWxzZQotCQllbGVtID0gZmluZF9kZWJ1Z19tb2R1bGUocyk7Ci0JaWYgKCFzdHJuY21wKHNldHRpbmdfc3RyLCAiZW5hYmxlIiwgNikpIHsKLQkJdmFsdWUgPSAhIXNpbXBsZV9zdHJ0b2wodmFsdWVfc3RyLCBOVUxMLCAxMCk7Ci0JCWlmIChhbGwpIHsKLQkJCWlmICh2YWx1ZSkgewotCQkJCXNldF9hbGwodHJ1ZSk7Ci0JCQkJbnVtX2VuYWJsZWQgPSBucl9lbnRyaWVzOwotCQkJCWR5bmFtaWNfZW5hYmxlZCA9IERZTkFNSUNfRU5BQkxFRF9BTEw7Ci0JCQl9IGVsc2UgewotCQkJCXNldF9hbGwoZmFsc2UpOwotCQkJCW51bV9lbmFibGVkID0gMDsKLQkJCQlkeW5hbWljX2VuYWJsZWQgPSBEWU5BTUlDX0VOQUJMRURfTk9ORTsKLQkJCX0KLQkJCWVyciA9IDA7Ci0JCX0gZWxzZSBpZiAoZWxlbSkgewotCQkJaWYgKHZhbHVlICYmIChlbGVtLT5lbmFibGUgPT0gMCkpIHsKLQkJCQlkeW5hbWljX3ByaW50a19lbmFibGVkIHw9ICgxTEwgPDwgZWxlbS0+aGFzaDEpOwotCQkJCWR5bmFtaWNfcHJpbnRrX2VuYWJsZWQyIHw9ICgxTEwgPDwgZWxlbS0+aGFzaDIpOwotCQkJCWVsZW0tPmVuYWJsZSA9IDE7Ci0JCQkJbnVtX2VuYWJsZWQrKzsKLQkJCQlkeW5hbWljX2VuYWJsZWQgPSBEWU5BTUlDX0VOQUJMRURfU09NRTsKLQkJCQllcnIgPSAwOwotCQkJCXByaW50ayhLRVJOX0RFQlVHCi0JCQkJCSJkZWJ1Z2dpbmcgZW5hYmxlZCBmb3IgbW9kdWxlICVzXG4iLAotCQkJCQllbGVtLT5uYW1lKTsKLQkJCX0gZWxzZSBpZiAoIXZhbHVlICYmIChlbGVtLT5lbmFibGUgPT0gMSkpIHsKLQkJCQllbGVtLT5lbmFibGUgPSAwOwotCQkJCW51bV9lbmFibGVkLS07Ci0JCQkJaWYgKGRpc2FibGVkX2hhc2goZWxlbS0+aGFzaDEsIHRydWUpKQotCQkJCQlkeW5hbWljX3ByaW50a19lbmFibGVkICY9Ci0JCQkJCQkJfigxTEwgPDwgZWxlbS0+aGFzaDEpOwotCQkJCWlmIChkaXNhYmxlZF9oYXNoKGVsZW0tPmhhc2gyLCBmYWxzZSkpCi0JCQkJCWR5bmFtaWNfcHJpbnRrX2VuYWJsZWQyICY9Ci0JCQkJCQkJfigxTEwgPDwgZWxlbS0+aGFzaDIpOwotCQkJCWlmIChudW1fZW5hYmxlZCkKLQkJCQkJZHluYW1pY19lbmFibGVkID0gRFlOQU1JQ19FTkFCTEVEX1NPTUU7Ci0JCQkJZWxzZQotCQkJCQlkeW5hbWljX2VuYWJsZWQgPSBEWU5BTUlDX0VOQUJMRURfTk9ORTsKLQkJCQllcnIgPSAwOwotCQkJCXByaW50ayhLRVJOX0RFQlVHCi0JCQkJCSJkZWJ1Z2dpbmcgZGlzYWJsZWQgZm9yIG1vZHVsZSAlc1xuIiwKLQkJCQkJZWxlbS0+bmFtZSk7Ci0JCQl9Ci0JCX0KLQl9Ci0JaWYgKCFlcnIpCi0JCWVyciA9IGxlbmd0aDsKLW91dF91cDoKLQl1cCgmZGVidWdfbGlzdF9tdXRleCk7Ci1vdXQ6Ci0JZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWJ1ZmZlcik7Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHZvaWQgKnByX2RlYnVnX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKmYsIGxvZmZfdCAqcG9zKQotewotCXJldHVybiAoKnBvcyA8IERFQlVHX0hBU0hfVEFCTEVfU0laRSkgPyBwb3MgOiBOVUxMOwotfQotCi1zdGF0aWMgdm9pZCAqcHJfZGVidWdfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKLXsKLQkoKnBvcykrKzsKLQlpZiAoKnBvcyA+PSBERUJVR19IQVNIX1RBQkxFX1NJWkUpCi0JCXJldHVybiBOVUxMOwotCXJldHVybiBwb3M7Ci19Ci0KLXN0YXRpYyB2b2lkIHByX2RlYnVnX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdikKLXsKLQkvKiBOb3RoaW5nIHRvIGRvICovCi19Ci0KLXN0YXRpYyBpbnQgcHJfZGVidWdfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp2KQotewotCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkOwotCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOwotCXN0cnVjdCBkZWJ1Z19uYW1lICplbGVtOwotCXVuc2lnbmVkIGludCBpID0gKihsb2ZmX3QgKikgdjsKLQotCXJjdV9yZWFkX2xvY2soKTsKLQloZWFkID0gJm1vZHVsZV90YWJsZVtpXTsKLQlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZWxlbSwgbm9kZSwgaGVhZCwgaGxpc3QpIHsKLQkJc2VxX3ByaW50ZihzLCAiJXMgZW5hYmxlZD0lZCIsIGVsZW0tPm5hbWUsIGVsZW0tPmVuYWJsZSk7Ci0JCXNlcV9wcmludGYocywgIlxuIik7Ci0JfQotCXJjdV9yZWFkX3VubG9jaygpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIHByX2RlYnVnX3NlcV9vcHMgPSB7Ci0JLnN0YXJ0ID0gcHJfZGVidWdfc2VxX3N0YXJ0LAotCS5uZXh0ICA9IHByX2RlYnVnX3NlcV9uZXh0LAotCS5zdG9wICA9IHByX2RlYnVnX3NlcV9zdG9wLAotCS5zaG93ICA9IHByX2RlYnVnX3NlcV9zaG93Ci19OwotCi1zdGF0aWMgaW50IHByX2RlYnVnX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCi17Ci0JcmV0dXJuIHNlcV9vcGVuKGZpbHAsICZwcl9kZWJ1Z19zZXFfb3BzKTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJfZGVidWdfb3BlcmF0aW9ucyA9IHsKLQkub3BlbgkJPSBwcl9kZWJ1Z19vcGVuLAotCS5yZWFkCQk9IHNlcV9yZWFkLAotCS53cml0ZQkJPSBwcl9kZWJ1Z193cml0ZSwKLQkubGxzZWVrCQk9IHNlcV9sc2VlaywKLQkucmVsZWFzZQk9IHNlcV9yZWxlYXNlLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgZHluYW1pY19wcmludGtfaW5pdCh2b2lkKQotewotCXN0cnVjdCBkZW50cnkgKmRpciwgKmZpbGU7Ci0Jc3RydWN0IG1vZF9kZWJ1ZyAqaXRlcjsKLQl1bnNpZ25lZCBsb25nIHZhbHVlOwotCi0JZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKCJkeW5hbWljX3ByaW50ayIsIE5VTEwpOwotCWlmICghZGlyKQotCQlyZXR1cm4gLUVOT01FTTsKLQlmaWxlID0gZGVidWdmc19jcmVhdGVfZmlsZSgibW9kdWxlcyIsIDA2NDQsIGRpciwgTlVMTCwKLQkJCQkJJnByX2RlYnVnX29wZXJhdGlvbnMpOwotCWlmICghZmlsZSkgewotCQlkZWJ1Z2ZzX3JlbW92ZShkaXIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0JZm9yICh2YWx1ZSA9ICh1bnNpZ25lZCBsb25nKV9fc3RhcnRfX192ZXJib3NlOwotCQl2YWx1ZSA8ICh1bnNpZ25lZCBsb25nKV9fc3RvcF9fX3ZlcmJvc2U7Ci0JCXZhbHVlICs9IHNpemVvZihzdHJ1Y3QgbW9kX2RlYnVnKSkgewotCQkJaXRlciA9IChzdHJ1Y3QgbW9kX2RlYnVnICopdmFsdWU7Ci0JCQlyZWdpc3Rlcl9keW5hbWljX2RlYnVnX21vZHVsZShpdGVyLT5tb2RuYW1lLAotCQkJCWl0ZXItPnR5cGUsCi0JCQkJaXRlci0+bG9naWNhbF9tb2RuYW1lLAotCQkJCWl0ZXItPmZsYWdfbmFtZXMsIGl0ZXItPmhhc2gsIGl0ZXItPmhhc2gyKTsKLQl9Ci0JaWYgKGR5bmFtaWNfZW5hYmxlZCA9PSBEWU5BTUlDX0VOQUJMRURfQUxMKQotCQlzZXRfYWxsKHRydWUpOwotCXJldHVybiAwOwotfQotbW9kdWxlX2luaXQoZHluYW1pY19wcmludGtfaW5pdCk7Ci0vKiBtYXkgd2FudCB0byBtb3ZlIHRoaXMgZWFybGllciBzbyB3ZSBjYW4gZ2V0IHRyYWNlcyBhcyBlYXJseSBhcyBwb3NzaWJsZSAqLwotCi1zdGF0aWMgaW50IF9faW5pdCBkeW5hbWljX3ByaW50a19zZXR1cChjaGFyICpzdHIpCi17Ci0JaWYgKHN0cikKLQkJcmV0dXJuIC1FTk9FTlQ7Ci0JZHluYW1pY19lbmFibGVkID0gRFlOQU1JQ19FTkFCTEVEX0FMTDsKLQlyZXR1cm4gMDsKLX0KLS8qIFVzZSBlYXJseV9wYXJhbSgpLCBzbyB3ZSBjYW4gZ2V0IGRlYnVnIG91dHB1dCBhcyBlYXJseSBhcyBwb3NzaWJsZSAqLwotZWFybHlfcGFyYW0oImR5bmFtaWNfcHJpbnRrIiwgZHluYW1pY19wcmludGtfc2V0dXApOwpkaWZmIC0tZ2l0IGEvbGliL2tlcm5lbF9sb2NrLmMgYi9saWIva2VybmVsX2xvY2suYwppbmRleCAwMWEzYzIyLi4zOWYxMDI5IDEwMDY0NAotLS0gYS9saWIva2VybmVsX2xvY2suYworKysgYi9saWIva2VybmVsX2xvY2suYwpAQCAtMzksNyArMzksNyBAQAogaW50IF9fbG9ja2Z1bmMgX19yZWFjcXVpcmVfa2VybmVsX2xvY2sodm9pZCkKIHsKIAl3aGlsZSAoIV9yYXdfc3Bpbl90cnlsb2NrKCZrZXJuZWxfZmxhZykpIHsKLQkJaWYgKHRlc3RfdGhyZWFkX2ZsYWcoVElGX05FRURfUkVTQ0hFRCkpCisJCWlmIChuZWVkX3Jlc2NoZWQoKSkKIAkJCXJldHVybiAtRUFHQUlOOwogCQljcHVfcmVsYXgoKTsKIAl9CmRpZmYgLS1naXQgYS9saWIva29iamVjdC5jIGIvbGliL2tvYmplY3QuYwppbmRleCAwNDg3ZDFmLi5hNmRlYzMyIDEwMDY0NAotLS0gYS9saWIva29iamVjdC5jCisrKyBiL2xpYi9rb2JqZWN0LmMKQEAgLTIxMiw3ICsyMTIsNyBAQAogICogQGZtdDogZm9ybWF0IHN0cmluZyB1c2VkIHRvIGJ1aWxkIHRoZSBuYW1lCiAgKiBAdmFyZ3M6IHZhcmdzIHRvIGZvcm1hdCB0aGUgc3RyaW5nLgogICovCi1zdGF0aWMgaW50IGtvYmplY3Rfc2V0X25hbWVfdmFyZ3Moc3RydWN0IGtvYmplY3QgKmtvYmosIGNvbnN0IGNoYXIgKmZtdCwKK2ludCBrb2JqZWN0X3NldF9uYW1lX3ZhcmdzKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBjb25zdCBjaGFyICpmbXQsCiAJCQkJICB2YV9saXN0IHZhcmdzKQogewogCWNvbnN0IGNoYXIgKm9sZF9uYW1lID0ga29iai0+bmFtZTsKZGlmZiAtLWdpdCBhL2xpYi9rb2JqZWN0X3VldmVudC5jIGIvbGliL2tvYmplY3RfdWV2ZW50LmMKaW5kZXggMzE4MzI4ZGQuLjk3YTc3N2EgMTAwNjQ0Ci0tLSBhL2xpYi9rb2JqZWN0X3VldmVudC5jCisrKyBiL2xpYi9rb2JqZWN0X3VldmVudC5jCkBAIC0xMTgsNiArMTE4LDEzIEBACiAJa3NldCA9IHRvcF9rb2JqLT5rc2V0OwogCXVldmVudF9vcHMgPSBrc2V0LT51ZXZlbnRfb3BzOwogCisJLyogc2tpcCB0aGUgZXZlbnQsIGlmIHVldmVudF9zdXBwcmVzcyBpcyBzZXQqLworCWlmIChrb2JqLT51ZXZlbnRfc3VwcHJlc3MpIHsKKwkJcHJfZGVidWcoImtvYmplY3Q6ICclcycgKCVwKTogJXM6IHVldmVudF9zdXBwcmVzcyAiCisJCQkJICJjYXVzZWQgdGhlIGV2ZW50IHRvIGRyb3AhXG4iLAorCQkJCSBrb2JqZWN0X25hbWUoa29iaiksIGtvYmosIF9fZnVuY19fKTsKKwkJcmV0dXJuIDA7CisJfQogCS8qIHNraXAgdGhlIGV2ZW50LCBpZiB0aGUgZmlsdGVyIHJldHVybnMgemVyby4gKi8KIAlpZiAodWV2ZW50X29wcyAmJiB1ZXZlbnRfb3BzLT5maWx0ZXIpCiAJCWlmICghdWV2ZW50X29wcy0+ZmlsdGVyKGtzZXQsIGtvYmopKSB7CkBAIC0yMjcsNiArMjM0LDkgQEAKIAkJCU5FVExJTktfQ0Ioc2tiKS5kc3RfZ3JvdXAgPSAxOwogCQkJcmV0dmFsID0gbmV0bGlua19icm9hZGNhc3QodWV2ZW50X3NvY2ssIHNrYiwgMCwgMSwKIAkJCQkJCSAgIEdGUF9LRVJORUwpOworCQkJLyogRU5PQlVGUyBzaG91bGQgYmUgaGFuZGxlZCBpbiB1c2Vyc3BhY2UgKi8KKwkJCWlmIChyZXR2YWwgPT0gLUVOT0JVRlMpCisJCQkJcmV0dmFsID0gMDsKIAkJfSBlbHNlCiAJCQlyZXR2YWwgPSAtRU5PTUVNOwogCX0KQEAgLTI0OCw3ICsyNTgsNyBAQAogCQkJZ290byBleGl0OwogCiAJCXJldHZhbCA9IGNhbGxfdXNlcm1vZGVoZWxwZXIoYXJndlswXSwgYXJndiwKLQkJCQkJICAgICBlbnYtPmVudnAsIFVNSF9XQUlUX0VYRUMpOworCQkJCQkgICAgIGVudi0+ZW52cCwgVU1IX05PX1dBSVQpOwogCX0KIAogZXhpdDoKZGlmZiAtLWdpdCBhL25ldC9uZXRsaW5rL2F0dHIuYyBiL2xpYi9ubGF0dHIuYwpzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSBuZXQvbmV0bGluay9hdHRyLmMKcmVuYW1lIHRvIGxpYi9ubGF0dHIuYwppbmRleCA1NmMzY2U3Li44MDAwOWEyIDEwMDY0NAotLS0gYS9uZXQvbmV0bGluay9hdHRyLmMKKysrIGIvbGliL25sYXR0ci5jCkBAIC0yODEsNiArMjgxLDcgQEAKIAlyZXR1cm4gZDsKIH0KIAorI2lmZGVmIENPTkZJR19ORVQKIC8qKgogICogX19ubGFfcmVzZXJ2ZSAtIHJlc2VydmUgcm9vbSBmb3IgYXR0cmlidXRlIG9uIHRoZSBza2IKICAqIEBza2I6IHNvY2tldCBidWZmZXIgdG8gcmVzZXJ2ZSByb29tIG9uCkBAIC0zMDUsNiArMzA2LDcgQEAKIAogCXJldHVybiBubGE7CiB9CitFWFBPUlRfU1lNQk9MKF9fbmxhX3Jlc2VydmUpOwogCiAvKioKICAqIF9fbmxhX3Jlc2VydmVfbm9oZHIgLSByZXNlcnZlIHJvb20gZm9yIGF0dHJpYnV0ZSB3aXRob3V0IGhlYWRlcgpAQCAtMzI1LDYgKzMyNyw3IEBACiAKIAlyZXR1cm4gc3RhcnQ7CiB9CitFWFBPUlRfU1lNQk9MKF9fbmxhX3Jlc2VydmVfbm9oZHIpOwogCiAvKioKICAqIG5sYV9yZXNlcnZlIC0gcmVzZXJ2ZSByb29tIGZvciBhdHRyaWJ1dGUgb24gdGhlIHNrYgpAQCAtMzQ1LDYgKzM0OCw3IEBACiAKIAlyZXR1cm4gX19ubGFfcmVzZXJ2ZShza2IsIGF0dHJ0eXBlLCBhdHRybGVuKTsKIH0KK0VYUE9SVF9TWU1CT0wobmxhX3Jlc2VydmUpOwogCiAvKioKICAqIG5sYV9yZXNlcnZlX25vaGRyIC0gcmVzZXJ2ZSByb29tIGZvciBhdHRyaWJ1dGUgd2l0aG91dCBoZWFkZXIKQEAgLTM2Myw2ICszNjcsNyBAQAogCiAJcmV0dXJuIF9fbmxhX3Jlc2VydmVfbm9oZHIoc2tiLCBhdHRybGVuKTsKIH0KK0VYUE9SVF9TWU1CT0wobmxhX3Jlc2VydmVfbm9oZHIpOwogCiAvKioKICAqIF9fbmxhX3B1dCAtIEFkZCBhIG5ldGxpbmsgYXR0cmlidXRlIHRvIGEgc29ja2V0IGJ1ZmZlcgpAQCAtMzgyLDYgKzM4Nyw3IEBACiAJbmxhID0gX19ubGFfcmVzZXJ2ZShza2IsIGF0dHJ0eXBlLCBhdHRybGVuKTsKIAltZW1jcHkobmxhX2RhdGEobmxhKSwgZGF0YSwgYXR0cmxlbik7CiB9CitFWFBPUlRfU1lNQk9MKF9fbmxhX3B1dCk7CiAKIC8qKgogICogX19ubGFfcHV0X25vaGRyIC0gQWRkIGEgbmV0bGluayBhdHRyaWJ1dGUgd2l0aG91dCBoZWFkZXIKQEAgLTM5OSw2ICs0MDUsNyBAQAogCXN0YXJ0ID0gX19ubGFfcmVzZXJ2ZV9ub2hkcihza2IsIGF0dHJsZW4pOwogCW1lbWNweShzdGFydCwgZGF0YSwgYXR0cmxlbik7CiB9CitFWFBPUlRfU1lNQk9MKF9fbmxhX3B1dF9ub2hkcik7CiAKIC8qKgogICogbmxhX3B1dCAtIEFkZCBhIG5ldGxpbmsgYXR0cmlidXRlIHRvIGEgc29ja2V0IGJ1ZmZlcgpAQCAtNDE4LDYgKzQyNSw3IEBACiAJX19ubGFfcHV0KHNrYiwgYXR0cnR5cGUsIGF0dHJsZW4sIGRhdGEpOwogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTChubGFfcHV0KTsKIAogLyoqCiAgKiBubGFfcHV0X25vaGRyIC0gQWRkIGEgbmV0bGluayBhdHRyaWJ1dGUgd2l0aG91dCBoZWFkZXIKQEAgLTQzNiw2ICs0NDQsNyBAQAogCV9fbmxhX3B1dF9ub2hkcihza2IsIGF0dHJsZW4sIGRhdGEpOwogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTChubGFfcHV0X25vaGRyKTsKIAogLyoqCiAgKiBubGFfYXBwZW5kIC0gQWRkIGEgbmV0bGluayBhdHRyaWJ1dGUgd2l0aG91dCBoZWFkZXIgb3IgcGFkZGluZwpAQCAtNDU0LDIwICs0NjMsMTMgQEAKIAltZW1jcHkoc2tiX3B1dChza2IsIGF0dHJsZW4pLCBkYXRhLCBhdHRybGVuKTsKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0wobmxhX2FwcGVuZCk7CisjZW5kaWYKIAogRVhQT1JUX1NZTUJPTChubGFfdmFsaWRhdGUpOwogRVhQT1JUX1NZTUJPTChubGFfcGFyc2UpOwogRVhQT1JUX1NZTUJPTChubGFfZmluZCk7CiBFWFBPUlRfU1lNQk9MKG5sYV9zdHJsY3B5KTsKLUVYUE9SVF9TWU1CT0woX19ubGFfcmVzZXJ2ZSk7Ci1FWFBPUlRfU1lNQk9MKF9fbmxhX3Jlc2VydmVfbm9oZHIpOwotRVhQT1JUX1NZTUJPTChubGFfcmVzZXJ2ZSk7Ci1FWFBPUlRfU1lNQk9MKG5sYV9yZXNlcnZlX25vaGRyKTsKLUVYUE9SVF9TWU1CT0woX19ubGFfcHV0KTsKLUVYUE9SVF9TWU1CT0woX19ubGFfcHV0X25vaGRyKTsKLUVYUE9SVF9TWU1CT0wobmxhX3B1dCk7Ci1FWFBPUlRfU1lNQk9MKG5sYV9wdXRfbm9oZHIpOwogRVhQT1JUX1NZTUJPTChubGFfbWVtY3B5KTsKIEVYUE9SVF9TWU1CT0wobmxhX21lbWNtcCk7CiBFWFBPUlRfU1lNQk9MKG5sYV9zdHJjbXApOwotRVhQT1JUX1NZTUJPTChubGFfYXBwZW5kKTsKZGlmZiAtLWdpdCBhL21tL2JhY2tpbmctZGV2LmMgYi9tbS9iYWNraW5nLWRldi5jCmluZGV4IDhlODU4NzQuLmJlNjhjOTUgMTAwNjQ0Ci0tLSBhL21tL2JhY2tpbmctZGV2LmMKKysrIGIvbW0vYmFja2luZy1kZXYuYwpAQCAtMiwxMSArMiwyNCBAQAogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxsaW51eC9iYWNraW5nLWRldi5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvd3JpdGViYWNrLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAKK3ZvaWQgZGVmYXVsdF91bnBsdWdfaW9fZm4oc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSwgc3RydWN0IHBhZ2UgKnBhZ2UpCit7Cit9CitFWFBPUlRfU1lNQk9MKGRlZmF1bHRfdW5wbHVnX2lvX2ZuKTsKKworc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gZGVmYXVsdF9iYWNraW5nX2Rldl9pbmZvID0geworCS5yYV9wYWdlcwk9IFZNX01BWF9SRUFEQUhFQUQgKiAxMDI0IC8gUEFHRV9DQUNIRV9TSVpFLAorCS5zdGF0ZQkJPSAwLAorCS5jYXBhYmlsaXRpZXMJPSBCRElfQ0FQX01BUF9DT1BZLAorCS51bnBsdWdfaW9fZm4JPSBkZWZhdWx0X3VucGx1Z19pb19mbiwKK307CitFWFBPUlRfU1lNQk9MX0dQTChkZWZhdWx0X2JhY2tpbmdfZGV2X2luZm8pOwogCiBzdGF0aWMgc3RydWN0IGNsYXNzICpiZGlfY2xhc3M7CiAKQEAgLTE2Niw5ICsxNzksMjAgQEAKIAliZGlfZGVidWdfaW5pdCgpOwogCXJldHVybiAwOwogfQotCiBwb3N0Y29yZV9pbml0Y2FsbChiZGlfY2xhc3NfaW5pdCk7CiAKK3N0YXRpYyBpbnQgX19pbml0IGRlZmF1bHRfYmRpX2luaXQodm9pZCkKK3sKKwlpbnQgZXJyOworCisJZXJyID0gYmRpX2luaXQoJmRlZmF1bHRfYmFja2luZ19kZXZfaW5mbyk7CisJaWYgKCFlcnIpCisJCWJkaV9yZWdpc3RlcigmZGVmYXVsdF9iYWNraW5nX2Rldl9pbmZvLCBOVUxMLCAiZGVmYXVsdCIpOworCisJcmV0dXJuIGVycjsKK30KK3N1YnN5c19pbml0Y2FsbChkZWZhdWx0X2JkaV9pbml0KTsKKwogaW50IGJkaV9yZWdpc3RlcihzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpLCBzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsCiAJCWNvbnN0IGNoYXIgKmZtdCwgLi4uKQogewpkaWZmIC0tZ2l0IGEvbW0vbW1hcC5jIGIvbW0vbW1hcC5jCmluZGV4IDAwY2VkM2UuLjFhYmI5MTggMTAwNjQ0Ci0tLSBhL21tL21tYXAuYworKysgYi9tbS9tbWFwLmMKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcnNvbmFsaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbWEuaD4KICNpbmNsdWRlIDxsaW51eC9odWdldGxiLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtMTA0OSw2ICsxMDUwLDkgQEAKIAllcnJvciA9IHNlY3VyaXR5X2ZpbGVfbW1hcChmaWxlLCByZXFwcm90LCBwcm90LCBmbGFncywgYWRkciwgMCk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CisJZXJyb3IgPSBpbWFfZmlsZV9tbWFwKGZpbGUsIHByb3QpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOwogCiAJcmV0dXJuIG1tYXBfcmVnaW9uKGZpbGUsIGFkZHIsIGxlbiwgZmxhZ3MsIHZtX2ZsYWdzLCBwZ29mZik7CiB9CmRpZmYgLS1naXQgYS9tbS9wYWdlLXdyaXRlYmFjay5jIGIvbW0vcGFnZS13cml0ZWJhY2suYwppbmRleCA3NGRjNTdjLi40MGNhN2NkIDEwMDY0NAotLS0gYS9tbS9wYWdlLXdyaXRlYmFjay5jCisrKyBiL21tL3BhZ2Utd3JpdGViYWNrLmMKQEAgLTY2LDcgKzY2LDcgQEAKIC8qCiAgKiBTdGFydCBiYWNrZ3JvdW5kIHdyaXRlYmFjayAodmlhIHBkZmx1c2gpIGF0IHRoaXMgcGVyY2VudGFnZQogICovCi1pbnQgZGlydHlfYmFja2dyb3VuZF9yYXRpbyA9IDU7CitpbnQgZGlydHlfYmFja2dyb3VuZF9yYXRpbyA9IDEwOwogCiAvKgogICogZGlydHlfYmFja2dyb3VuZF9ieXRlcyBzdGFydHMgYXQgMCAoZGlzYWJsZWQpIHNvIHRoYXQgaXQgaXMgYSBmdW5jdGlvbiBvZgpAQCAtODMsNyArODMsNyBAQAogLyoKICAqIFRoZSBnZW5lcmF0b3Igb2YgZGlydHkgZGF0YSBzdGFydHMgd3JpdGViYWNrIGF0IHRoaXMgcGVyY2VudGFnZQogICovCi1pbnQgdm1fZGlydHlfcmF0aW8gPSAxMDsKK2ludCB2bV9kaXJ0eV9yYXRpbyA9IDIwOwogCiAvKgogICogdm1fZGlydHlfYnl0ZXMgc3RhcnRzIGF0IDAgKGRpc2FibGVkKSBzbyB0aGF0IGl0IGlzIGEgZnVuY3Rpb24gb2YKZGlmZiAtLWdpdCBhL21tL3JlYWRhaGVhZC5jIGIvbW0vcmVhZGFoZWFkLmMKaW5kZXggYmVjODNjMS4uOWNlMzAzZCAxMDA2NDQKLS0tIGEvbW0vcmVhZGFoZWFkLmMKKysrIGIvbW0vcmVhZGFoZWFkLmMKQEAgLTE3LDE5ICsxNyw2IEBACiAjaW5jbHVkZSA8bGludXgvcGFnZXZlYy5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KIAotdm9pZCBkZWZhdWx0X3VucGx1Z19pb19mbihzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKLXsKLX0KLUVYUE9SVF9TWU1CT0woZGVmYXVsdF91bnBsdWdfaW9fZm4pOwotCi1zdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyBkZWZhdWx0X2JhY2tpbmdfZGV2X2luZm8gPSB7Ci0JLnJhX3BhZ2VzCT0gVk1fTUFYX1JFQURBSEVBRCAqIDEwMjQgLyBQQUdFX0NBQ0hFX1NJWkUsCi0JLnN0YXRlCQk9IDAsCi0JLmNhcGFiaWxpdGllcwk9IEJESV9DQVBfTUFQX0NPUFksCi0JLnVucGx1Z19pb19mbgk9IGRlZmF1bHRfdW5wbHVnX2lvX2ZuLAotfTsKLUVYUE9SVF9TWU1CT0xfR1BMKGRlZmF1bHRfYmFja2luZ19kZXZfaW5mbyk7Ci0KIC8qCiAgKiBJbml0aWFsaXNlIGEgc3RydWN0IGZpbGUncyByZWFkYWhlYWQgc3RhdGUuICBBc3N1bWVzIHRoYXQgdGhlIGNhbGxlciBoYXMKICAqIG1lbXNldCAqcmEgdG8gemVyby4KQEAgLTIzMywxOCArMjIwLDYgQEAKIAkJKyBub2RlX3BhZ2Vfc3RhdGUobnVtYV9ub2RlX2lkKCksIE5SX0ZSRUVfUEFHRVMpKSAvIDIpOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCByZWFkYWhlYWRfaW5pdCh2b2lkKQotewotCWludCBlcnI7Ci0KLQllcnIgPSBiZGlfaW5pdCgmZGVmYXVsdF9iYWNraW5nX2Rldl9pbmZvKTsKLQlpZiAoIWVycikKLQkJYmRpX3JlZ2lzdGVyKCZkZWZhdWx0X2JhY2tpbmdfZGV2X2luZm8sIE5VTEwsICJkZWZhdWx0Iik7Ci0KLQlyZXR1cm4gZXJyOwotfQotc3Vic3lzX2luaXRjYWxsKHJlYWRhaGVhZF9pbml0KTsKLQogLyoKICAqIFN1Ym1pdCBJTyBmb3IgdGhlIHJlYWQtYWhlYWQgcmVxdWVzdCBpbiBmaWxlX3JhX3N0YXRlLgogICovCmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uYwppbmRleCA0MTAzYTIzLi43ZWM3OGUyIDEwMDY0NAotLS0gYS9tbS9zaG1lbS5jCisrKyBiL21tL3NobWVtLmMKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KKyNpbmNsdWRlIDxsaW51eC9pbWEuaD4KIAogc3RhdGljIHN0cnVjdCB2ZnNtb3VudCAqc2htX21udDsKIApAQCAtMjY2NSw2ICsyNjY2LDcgQEAKIAlpZiAoSVNfRVJSKGZpbGUpKQogCQlyZXR1cm4gUFRSX0VSUihmaWxlKTsKIAorCWltYV9zaG1fY2hlY2soZmlsZSk7CiAJaWYgKHZtYS0+dm1fZmlsZSkKIAkJZnB1dCh2bWEtPnZtX2ZpbGUpOwogCXZtYS0+dm1fZmlsZSA9IGZpbGU7CmRpZmYgLS1naXQgYS9tbS9zbG9iLmMgYi9tbS9zbG9iLmMKaW5kZXggNTJiYzhhMi4uMGJmYTY4MCAxMDA2NDQKLS0tIGEvbW0vc2xvYi5jCisrKyBiL21tL3Nsb2IuYwpAQCAtMTI2LDkgKzEyNiw5IEBACiBzdGF0aWMgTElTVF9IRUFEKGZyZWVfc2xvYl9sYXJnZSk7CiAKIC8qCi0gKiBzbG9iX3BhZ2U6IFRydWUgZm9yIGFsbCBzbG9iIHBhZ2VzIChmYWxzZSBmb3IgYmlnYmxvY2sgcGFnZXMpCisgKiBpc19zbG9iX3BhZ2U6IFRydWUgZm9yIGFsbCBzbG9iIHBhZ2VzIChmYWxzZSBmb3IgYmlnYmxvY2sgcGFnZXMpCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50IHNsb2JfcGFnZShzdHJ1Y3Qgc2xvYl9wYWdlICpzcCkKK3N0YXRpYyBpbmxpbmUgaW50IGlzX3Nsb2JfcGFnZShzdHJ1Y3Qgc2xvYl9wYWdlICpzcCkKIHsKIAlyZXR1cm4gUGFnZVNsb2JQYWdlKChzdHJ1Y3QgcGFnZSAqKXNwKTsKIH0KQEAgLTE0Myw2ICsxNDMsMTEgQEAKIAlfX0NsZWFyUGFnZVNsb2JQYWdlKChzdHJ1Y3QgcGFnZSAqKXNwKTsKIH0KIAorc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2xvYl9wYWdlICpzbG9iX3BhZ2UoY29uc3Qgdm9pZCAqYWRkcikKK3sKKwlyZXR1cm4gKHN0cnVjdCBzbG9iX3BhZ2UgKil2aXJ0X3RvX3BhZ2UoYWRkcik7Cit9CisKIC8qCiAgKiBzbG9iX3BhZ2VfZnJlZTogdHJ1ZSBmb3IgcGFnZXMgb24gZnJlZV9zbG9iX3BhZ2VzIGxpc3QuCiAgKi8KQEAgLTIzMCw3ICsyMzUsNyBAQAogCXJldHVybiAhKCh1bnNpZ25lZCBsb25nKXNsb2JfbmV4dChzKSAmIH5QQUdFX01BU0spOwogfQogCi1zdGF0aWMgdm9pZCAqc2xvYl9uZXdfcGFnZShnZnBfdCBnZnAsIGludCBvcmRlciwgaW50IG5vZGUpCitzdGF0aWMgdm9pZCAqc2xvYl9uZXdfcGFnZXMoZ2ZwX3QgZ2ZwLCBpbnQgb3JkZXIsIGludCBub2RlKQogewogCXZvaWQgKnBhZ2U7CiAKQEAgLTI0NywxMiArMjUyLDE3IEBACiAJcmV0dXJuIHBhZ2VfYWRkcmVzcyhwYWdlKTsKIH0KIAorc3RhdGljIHZvaWQgc2xvYl9mcmVlX3BhZ2VzKHZvaWQgKmIsIGludCBvcmRlcikKK3sKKwlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKWIsIG9yZGVyKTsKK30KKwogLyoKICAqIEFsbG9jYXRlIGEgc2xvYiBibG9jayB3aXRoaW4gYSBnaXZlbiBzbG9iX3BhZ2Ugc3AuCiAgKi8KIHN0YXRpYyB2b2lkICpzbG9iX3BhZ2VfYWxsb2Moc3RydWN0IHNsb2JfcGFnZSAqc3AsIHNpemVfdCBzaXplLCBpbnQgYWxpZ24pCiB7Ci0Jc2xvYl90ICpwcmV2LCAqY3VyLCAqYWxpZ25lZCA9IDA7CisJc2xvYl90ICpwcmV2LCAqY3VyLCAqYWxpZ25lZCA9IE5VTEw7CiAJaW50IGRlbHRhID0gMCwgdW5pdHMgPSBTTE9CX1VOSVRTKHNpemUpOwogCiAJZm9yIChwcmV2ID0gTlVMTCwgY3VyID0gc3AtPmZyZWU7IDsgcHJldiA9IGN1ciwgY3VyID0gc2xvYl9uZXh0KGN1cikpIHsKQEAgLTM0OSwxMCArMzU5LDEwIEBACiAKIAkvKiBOb3QgZW5vdWdoIHNwYWNlOiBtdXN0IGFsbG9jYXRlIGEgbmV3IHBhZ2UgKi8KIAlpZiAoIWIpIHsKLQkJYiA9IHNsb2JfbmV3X3BhZ2UoZ2ZwICYgfl9fR0ZQX1pFUk8sIDAsIG5vZGUpOworCQliID0gc2xvYl9uZXdfcGFnZXMoZ2ZwICYgfl9fR0ZQX1pFUk8sIDAsIG5vZGUpOwogCQlpZiAoIWIpCi0JCQlyZXR1cm4gMDsKLQkJc3AgPSAoc3RydWN0IHNsb2JfcGFnZSAqKXZpcnRfdG9fcGFnZShiKTsKKwkJCXJldHVybiBOVUxMOworCQlzcCA9IHNsb2JfcGFnZShiKTsKIAkJc2V0X3Nsb2JfcGFnZShzcCk7CiAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnNsb2JfbG9jaywgZmxhZ3MpOwpAQCAtMzg0LDcgKzM5NCw3IEBACiAJCXJldHVybjsKIAlCVUdfT04oIXNpemUpOwogCi0Jc3AgPSAoc3RydWN0IHNsb2JfcGFnZSAqKXZpcnRfdG9fcGFnZShibG9jayk7CisJc3AgPSBzbG9iX3BhZ2UoYmxvY2spOwogCXVuaXRzID0gU0xPQl9VTklUUyhzaXplKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZzbG9iX2xvY2ssIGZsYWdzKTsKQEAgLTM5MywxMCArNDAzLDExIEBACiAJCS8qIEdvIGRpcmVjdGx5IHRvIHBhZ2UgYWxsb2NhdG9yLiBEbyBub3QgcGFzcyBzbG9iIGFsbG9jYXRvciAqLwogCQlpZiAoc2xvYl9wYWdlX2ZyZWUoc3ApKQogCQkJY2xlYXJfc2xvYl9wYWdlX2ZyZWUoc3ApOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbG9iX2xvY2ssIGZsYWdzKTsKIAkJY2xlYXJfc2xvYl9wYWdlKHNwKTsKIAkJZnJlZV9zbG9iX3BhZ2Uoc3ApOwogCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpYik7Ci0JCWdvdG8gb3V0OworCQlyZXR1cm47CiAJfQogCiAJaWYgKCFzbG9iX3BhZ2VfZnJlZShzcCkpIHsKQEAgLTQ3Niw3ICs0ODcsNyBAQAogCX0gZWxzZSB7CiAJCXZvaWQgKnJldDsKIAotCQlyZXQgPSBzbG9iX25ld19wYWdlKGdmcCB8IF9fR0ZQX0NPTVAsIGdldF9vcmRlcihzaXplKSwgbm9kZSk7CisJCXJldCA9IHNsb2JfbmV3X3BhZ2VzKGdmcCB8IF9fR0ZQX0NPTVAsIGdldF9vcmRlcihzaXplKSwgbm9kZSk7CiAJCWlmIChyZXQpIHsKIAkJCXN0cnVjdCBwYWdlICpwYWdlOwogCQkJcGFnZSA9IHZpcnRfdG9fcGFnZShyZXQpOwpAQCAtNDk0LDggKzUwNSw4IEBACiAJaWYgKHVubGlrZWx5KFpFUk9fT1JfTlVMTF9QVFIoYmxvY2spKSkKIAkJcmV0dXJuOwogCi0Jc3AgPSAoc3RydWN0IHNsb2JfcGFnZSAqKXZpcnRfdG9fcGFnZShibG9jayk7Ci0JaWYgKHNsb2JfcGFnZShzcCkpIHsKKwlzcCA9IHNsb2JfcGFnZShibG9jayk7CisJaWYgKGlzX3Nsb2JfcGFnZShzcCkpIHsKIAkJaW50IGFsaWduID0gbWF4KEFSQ0hfS01BTExPQ19NSU5BTElHTiwgQVJDSF9TTEFCX01JTkFMSUdOKTsKIAkJdW5zaWduZWQgaW50ICptID0gKHVuc2lnbmVkIGludCAqKShibG9jayAtIGFsaWduKTsKIAkJc2xvYl9mcmVlKG0sICptICsgYWxpZ24pOwpAQCAtNTEzLDggKzUyNCw4IEBACiAJaWYgKHVubGlrZWx5KGJsb2NrID09IFpFUk9fU0laRV9QVFIpKQogCQlyZXR1cm4gMDsKIAotCXNwID0gKHN0cnVjdCBzbG9iX3BhZ2UgKil2aXJ0X3RvX3BhZ2UoYmxvY2spOwotCWlmIChzbG9iX3BhZ2Uoc3ApKSB7CisJc3AgPSBzbG9iX3BhZ2UoYmxvY2spOworCWlmIChpc19zbG9iX3BhZ2Uoc3ApKSB7CiAJCWludCBhbGlnbiA9IG1heChBUkNIX0tNQUxMT0NfTUlOQUxJR04sIEFSQ0hfU0xBQl9NSU5BTElHTik7CiAJCXVuc2lnbmVkIGludCAqbSA9ICh1bnNpZ25lZCBpbnQgKikoYmxvY2sgLSBhbGlnbik7CiAJCXJldHVybiBTTE9CX1VOSVRTKCptKSAqIFNMT0JfVU5JVDsKQEAgLTU3Myw3ICs1ODQsNyBAQAogCWlmIChjLT5zaXplIDwgUEFHRV9TSVpFKQogCQliID0gc2xvYl9hbGxvYyhjLT5zaXplLCBmbGFncywgYy0+YWxpZ24sIG5vZGUpOwogCWVsc2UKLQkJYiA9IHNsb2JfbmV3X3BhZ2UoZmxhZ3MsIGdldF9vcmRlcihjLT5zaXplKSwgbm9kZSk7CisJCWIgPSBzbG9iX25ld19wYWdlcyhmbGFncywgZ2V0X29yZGVyKGMtPnNpemUpLCBub2RlKTsKIAogCWlmIChjLT5jdG9yKQogCQljLT5jdG9yKGIpOwpAQCAtNTg3LDcgKzU5OCw3IEBACiAJaWYgKHNpemUgPCBQQUdFX1NJWkUpCiAJCXNsb2JfZnJlZShiLCBzaXplKTsKIAllbHNlCi0JCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpYiwgZ2V0X29yZGVyKHNpemUpKTsKKwkJc2xvYl9mcmVlX3BhZ2VzKGIsIGdldF9vcmRlcihzaXplKSk7CiB9CiAKIHN0YXRpYyB2b2lkIGttZW1fcmN1X2ZyZWUoc3RydWN0IHJjdV9oZWFkICpoZWFkKQpkaWZmIC0tZ2l0IGEvbW0vc2x1Yi5jIGIvbW0vc2x1Yi5jCmluZGV4IDAyODBlZWUuLmM2NWE0ZWQgMTAwNjQ0Ci0tLSBhL21tL3NsdWIuYworKysgYi9tbS9zbHViLmMKQEAgLTM3NCwxNCArMzc0LDggQEAKIHN0YXRpYyB2b2lkIHNldF90cmFjayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqZWN0LAogCQkJZW51bSB0cmFja19pdGVtIGFsbG9jLCB1bnNpZ25lZCBsb25nIGFkZHIpCiB7Ci0Jc3RydWN0IHRyYWNrICpwOworCXN0cnVjdCB0cmFjayAqcCA9IGdldF90cmFjayhzLCBvYmplY3QsIGFsbG9jKTsKIAotCWlmIChzLT5vZmZzZXQpCi0JCXAgPSBvYmplY3QgKyBzLT5vZmZzZXQgKyBzaXplb2Yodm9pZCAqKTsKLQllbHNlCi0JCXAgPSBvYmplY3QgKyBzLT5pbnVzZTsKLQotCXAgKz0gYWxsb2M7CiAJaWYgKGFkZHIpIHsKIAkJcC0+YWRkciA9IGFkZHI7CiAJCXAtPmNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKQEAgLTEzMzUsNyArMTMyOSw3IEBACiAJCW4gPSBnZXRfbm9kZShzLCB6b25lX3RvX25pZCh6b25lKSk7CiAKIAkJaWYgKG4gJiYgY3B1c2V0X3pvbmVfYWxsb3dlZF9oYXJkd2FsbCh6b25lLCBmbGFncykgJiYKLQkJCQluLT5ucl9wYXJ0aWFsID4gbi0+bWluX3BhcnRpYWwpIHsKKwkJCQluLT5ucl9wYXJ0aWFsID4gcy0+bWluX3BhcnRpYWwpIHsKIAkJCXBhZ2UgPSBnZXRfcGFydGlhbF9ub2RlKG4pOwogCQkJaWYgKHBhZ2UpCiAJCQkJcmV0dXJuIHBhZ2U7CkBAIC0xMzg3LDcgKzEzODEsNyBAQAogCQlzbGFiX3VubG9jayhwYWdlKTsKIAl9IGVsc2UgewogCQlzdGF0KGMsIERFQUNUSVZBVEVfRU1QVFkpOwotCQlpZiAobi0+bnJfcGFydGlhbCA8IG4tPm1pbl9wYXJ0aWFsKSB7CisJCWlmIChuLT5ucl9wYXJ0aWFsIDwgcy0+bWluX3BhcnRpYWwpIHsKIAkJCS8qCiAJCQkgKiBBZGRpbmcgYW4gZW1wdHkgc2xhYiB0byB0aGUgcGFydGlhbCBzbGFicyBpbiBvcmRlcgogCQkJICogdG8gYXZvaWQgcGFnZSBhbGxvY2F0b3Igb3ZlcmhlYWQuIFRoaXMgc2xhYiBuZWVkcwpAQCAtMTcyNCw3ICsxNzE4LDcgQEAKIAljID0gZ2V0X2NwdV9zbGFiKHMsIHNtcF9wcm9jZXNzb3JfaWQoKSk7CiAJZGVidWdfY2hlY2tfbm9fbG9ja3NfZnJlZWQob2JqZWN0LCBjLT5vYmpzaXplKTsKIAlpZiAoIShzLT5mbGFncyAmIFNMQUJfREVCVUdfT0JKRUNUUykpCi0JCWRlYnVnX2NoZWNrX25vX29ial9mcmVlZChvYmplY3QsIHMtPm9ianNpemUpOworCQlkZWJ1Z19jaGVja19ub19vYmpfZnJlZWQob2JqZWN0LCBjLT5vYmpzaXplKTsKIAlpZiAobGlrZWx5KHBhZ2UgPT0gYy0+cGFnZSAmJiBjLT5ub2RlID49IDApKSB7CiAJCW9iamVjdFtjLT5vZmZzZXRdID0gYy0+ZnJlZWxpc3Q7CiAJCWMtPmZyZWVsaXN0ID0gb2JqZWN0OwpAQCAtMTg0NCw2ICsxODM4LDcgQEAKIAlpbnQgb3JkZXI7CiAJaW50IG1pbl9vYmplY3RzOwogCWludCBmcmFjdGlvbjsKKwlpbnQgbWF4X29iamVjdHM7CiAKIAkvKgogCSAqIEF0dGVtcHQgdG8gZmluZCBiZXN0IGNvbmZpZ3VyYXRpb24gZm9yIGEgc2xhYi4gVGhpcwpAQCAtMTg1Niw2ICsxODUxLDkgQEAKIAltaW5fb2JqZWN0cyA9IHNsdWJfbWluX29iamVjdHM7CiAJaWYgKCFtaW5fb2JqZWN0cykKIAkJbWluX29iamVjdHMgPSA0ICogKGZscyhucl9jcHVfaWRzKSArIDEpOworCW1heF9vYmplY3RzID0gKFBBR0VfU0laRSA8PCBzbHViX21heF9vcmRlcikvc2l6ZTsKKwltaW5fb2JqZWN0cyA9IG1pbihtaW5fb2JqZWN0cywgbWF4X29iamVjdHMpOworCiAJd2hpbGUgKG1pbl9vYmplY3RzID4gMSkgewogCQlmcmFjdGlvbiA9IDE2OwogCQl3aGlsZSAoZnJhY3Rpb24gPj0gNCkgewpAQCAtMTg2NSw3ICsxODYzLDcgQEAKIAkJCQlyZXR1cm4gb3JkZXI7CiAJCQlmcmFjdGlvbiAvPSAyOwogCQl9Ci0JCW1pbl9vYmplY3RzIC89IDI7CisJCW1pbl9vYmplY3RzIC0tOwogCX0KIAogCS8qCkBAIC0xOTI4LDE3ICsxOTI2LDYgQEAKIGluaXRfa21lbV9jYWNoZV9ub2RlKHN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKm4sIHN0cnVjdCBrbWVtX2NhY2hlICpzKQogewogCW4tPm5yX3BhcnRpYWwgPSAwOwotCi0JLyoKLQkgKiBUaGUgbGFyZ2VyIHRoZSBvYmplY3Qgc2l6ZSBpcywgdGhlIG1vcmUgcGFnZXMgd2Ugd2FudCBvbiB0aGUgcGFydGlhbAotCSAqIGxpc3QgdG8gYXZvaWQgcG91bmRpbmcgdGhlIHBhZ2UgYWxsb2NhdG9yIGV4Y2Vzc2l2ZWx5LgotCSAqLwotCW4tPm1pbl9wYXJ0aWFsID0gaWxvZzIocy0+c2l6ZSk7Ci0JaWYgKG4tPm1pbl9wYXJ0aWFsIDwgTUlOX1BBUlRJQUwpCi0JCW4tPm1pbl9wYXJ0aWFsID0gTUlOX1BBUlRJQUw7Ci0JZWxzZSBpZiAobi0+bWluX3BhcnRpYWwgPiBNQVhfUEFSVElBTCkKLQkJbi0+bWluX3BhcnRpYWwgPSBNQVhfUEFSVElBTDsKLQogCXNwaW5fbG9ja19pbml0KCZuLT5saXN0X2xvY2spOwogCUlOSVRfTElTVF9IRUFEKCZuLT5wYXJ0aWFsKTsKICNpZmRlZiBDT05GSUdfU0xVQl9ERUJVRwpAQCAtMjE4MSw2ICsyMTY4LDE1IEBACiB9CiAjZW5kaWYKIAorc3RhdGljIHZvaWQgc2V0X21pbl9wYXJ0aWFsKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB1bnNpZ25lZCBsb25nIG1pbikKK3sKKwlpZiAobWluIDwgTUlOX1BBUlRJQUwpCisJCW1pbiA9IE1JTl9QQVJUSUFMOworCWVsc2UgaWYgKG1pbiA+IE1BWF9QQVJUSUFMKQorCQltaW4gPSBNQVhfUEFSVElBTDsKKwlzLT5taW5fcGFydGlhbCA9IG1pbjsKK30KKwogLyoKICAqIGNhbGN1bGF0ZV9zaXplcygpIGRldGVybWluZXMgdGhlIG9yZGVyIGFuZCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRhdGEgd2l0aGluCiAgKiBhIHNsYWIgb2JqZWN0LgpAQCAtMjMxOSw2ICsyMzE1LDExIEBACiAJaWYgKCFjYWxjdWxhdGVfc2l6ZXMocywgLTEpKQogCQlnb3RvIGVycm9yOwogCisJLyoKKwkgKiBUaGUgbGFyZ2VyIHRoZSBvYmplY3Qgc2l6ZSBpcywgdGhlIG1vcmUgcGFnZXMgd2Ugd2FudCBvbiB0aGUgcGFydGlhbAorCSAqIGxpc3QgdG8gYXZvaWQgcG91bmRpbmcgdGhlIHBhZ2UgYWxsb2NhdG9yIGV4Y2Vzc2l2ZWx5LgorCSAqLworCXNldF9taW5fcGFydGlhbChzLCBpbG9nMihzLT5zaXplKSk7CiAJcy0+cmVmY291bnQgPSAxOwogI2lmZGVmIENPTkZJR19OVU1BCiAJcy0+cmVtb3RlX25vZGVfZGVmcmFnX3JhdGlvID0gMTAwMDsKQEAgLTI0NzUsNyArMjQ3Niw3IEBACiAgKgkJS21hbGxvYyBzdWJzeXN0ZW0KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdHJ1Y3Qga21lbV9jYWNoZSBrbWFsbG9jX2NhY2hlc1tQQUdFX1NISUZUICsgMV0gX19jYWNoZWxpbmVfYWxpZ25lZDsKK3N0cnVjdCBrbWVtX2NhY2hlIGttYWxsb2NfY2FjaGVzW1NMVUJfUEFHRV9TSElGVF0gX19jYWNoZWxpbmVfYWxpZ25lZDsKIEVYUE9SVF9TWU1CT0woa21hbGxvY19jYWNoZXMpOwogCiBzdGF0aWMgaW50IF9faW5pdCBzZXR1cF9zbHViX21pbl9vcmRlcihjaGFyICpzdHIpCkBAIC0yNTM3LDcgKzI1MzgsNyBAQAogfQogCiAjaWZkZWYgQ09ORklHX1pPTkVfRE1BCi1zdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmttYWxsb2NfY2FjaGVzX2RtYVtQQUdFX1NISUZUICsgMV07CitzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmttYWxsb2NfY2FjaGVzX2RtYVtTTFVCX1BBR0VfU0hJRlRdOwogCiBzdGF0aWMgdm9pZCBzeXNmc19hZGRfZnVuYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpCiB7CkBAIC0yNjU4LDcgKzI2NTksNyBAQAogewogCXN0cnVjdCBrbWVtX2NhY2hlICpzOwogCi0JaWYgKHVubGlrZWx5KHNpemUgPiBQQUdFX1NJWkUpKQorCWlmICh1bmxpa2VseShzaXplID4gU0xVQl9NQVhfU0laRSkpCiAJCXJldHVybiBrbWFsbG9jX2xhcmdlKHNpemUsIGZsYWdzKTsKIAogCXMgPSBnZXRfc2xhYihzaXplLCBmbGFncyk7CkBAIC0yNjg2LDcgKzI2ODcsNyBAQAogewogCXN0cnVjdCBrbWVtX2NhY2hlICpzOwogCi0JaWYgKHVubGlrZWx5KHNpemUgPiBQQUdFX1NJWkUpKQorCWlmICh1bmxpa2VseShzaXplID4gU0xVQl9NQVhfU0laRSkpCiAJCXJldHVybiBrbWFsbG9jX2xhcmdlX25vZGUoc2l6ZSwgZmxhZ3MsIG5vZGUpOwogCiAJcyA9IGdldF9zbGFiKHNpemUsIGZsYWdzKTsKQEAgLTI5ODYsNyArMjk4Nyw3IEBACiAJCWNhY2hlcysrOwogCX0KIAotCWZvciAoaSA9IEtNQUxMT0NfU0hJRlRfTE9XOyBpIDw9IFBBR0VfU0hJRlQ7IGkrKykgeworCWZvciAoaSA9IEtNQUxMT0NfU0hJRlRfTE9XOyBpIDwgU0xVQl9QQUdFX1NISUZUOyBpKyspIHsKIAkJY3JlYXRlX2ttYWxsb2NfY2FjaGUoJmttYWxsb2NfY2FjaGVzW2ldLAogCQkJImttYWxsb2MiLCAxIDw8IGksIEdGUF9LRVJORUwpOwogCQljYWNoZXMrKzsKQEAgLTMwMjMsNyArMzAyNCw3IEBACiAJc2xhYl9zdGF0ZSA9IFVQOwogCiAJLyogUHJvdmlkZSB0aGUgY29ycmVjdCBrbWFsbG9jIG5hbWVzIG5vdyB0aGF0IHRoZSBjYWNoZXMgYXJlIHVwICovCi0JZm9yIChpID0gS01BTExPQ19TSElGVF9MT1c7IGkgPD0gUEFHRV9TSElGVDsgaSsrKQorCWZvciAoaSA9IEtNQUxMT0NfU0hJRlRfTE9XOyBpIDwgU0xVQl9QQUdFX1NISUZUOyBpKyspCiAJCWttYWxsb2NfY2FjaGVzW2ldLiBuYW1lID0KIAkJCWthc3ByaW50ZihHRlBfS0VSTkVMLCAia21hbGxvYy0lZCIsIDEgPDwgaSk7CiAKQEAgLTMyMjMsNyArMzIyNCw3IEBACiB7CiAJc3RydWN0IGttZW1fY2FjaGUgKnM7CiAKLQlpZiAodW5saWtlbHkoc2l6ZSA+IFBBR0VfU0laRSkpCisJaWYgKHVubGlrZWx5KHNpemUgPiBTTFVCX01BWF9TSVpFKSkKIAkJcmV0dXJuIGttYWxsb2NfbGFyZ2Uoc2l6ZSwgZ2ZwZmxhZ3MpOwogCiAJcyA9IGdldF9zbGFiKHNpemUsIGdmcGZsYWdzKTsKQEAgLTMyMzksNyArMzI0MCw3IEBACiB7CiAJc3RydWN0IGttZW1fY2FjaGUgKnM7CiAKLQlpZiAodW5saWtlbHkoc2l6ZSA+IFBBR0VfU0laRSkpCisJaWYgKHVubGlrZWx5KHNpemUgPiBTTFVCX01BWF9TSVpFKSkKIAkJcmV0dXJuIGttYWxsb2NfbGFyZ2Vfbm9kZShzaXplLCBnZnBmbGFncywgbm9kZSk7CiAKIAlzID0gZ2V0X3NsYWIoc2l6ZSwgZ2ZwZmxhZ3MpOwpAQCAtMzgzNiw2ICszODM3LDI2IEBACiB9CiBTTEFCX0FUVFIob3JkZXIpOwogCitzdGF0aWMgc3NpemVfdCBtaW5fcGFydGlhbF9zaG93KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBjaGFyICpidWYpCit7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWx1XG4iLCBzLT5taW5fcGFydGlhbCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IG1pbl9wYXJ0aWFsX3N0b3JlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBjb25zdCBjaGFyICpidWYsCisJCQkJIHNpemVfdCBsZW5ndGgpCit7CisJdW5zaWduZWQgbG9uZyBtaW47CisJaW50IGVycjsKKworCWVyciA9IHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZtaW4pOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlzZXRfbWluX3BhcnRpYWwocywgbWluKTsKKwlyZXR1cm4gbGVuZ3RoOworfQorU0xBQl9BVFRSKG1pbl9wYXJ0aWFsKTsKKwogc3RhdGljIHNzaXplX3QgY3Rvcl9zaG93KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBjaGFyICpidWYpCiB7CiAJaWYgKHMtPmN0b3IpIHsKQEAgLTQxNTEsNiArNDE3Miw3IEBACiAJJm9iamVjdF9zaXplX2F0dHIuYXR0ciwKIAkmb2Jqc19wZXJfc2xhYl9hdHRyLmF0dHIsCiAJJm9yZGVyX2F0dHIuYXR0ciwKKwkmbWluX3BhcnRpYWxfYXR0ci5hdHRyLAogCSZvYmplY3RzX2F0dHIuYXR0ciwKIAkmb2JqZWN0c19wYXJ0aWFsX2F0dHIuYXR0ciwKIAkmdG90YWxfb2JqZWN0c19hdHRyLmF0dHIsCmRpZmYgLS1naXQgYS9uZXQvODAyL3BzbmFwLmMgYi9uZXQvODAyL3BzbmFwLmMKaW5kZXggNzA5ODBiYS4uNmZlYTA3NSAxMDA2NDQKLS0tIGEvbmV0LzgwMi9wc25hcC5jCisrKyBiL25ldC84MDIvcHNuYXAuYwpAQCAtMjksNyArMjksNyBAQAogLyoKICAqCUZpbmQgYSBzbmFwIGNsaWVudCBieSBtYXRjaGluZyB0aGUgNSBieXRlcy4KICAqLwotc3RhdGljIHN0cnVjdCBkYXRhbGlua19wcm90byAqZmluZF9zbmFwX2NsaWVudCh1bnNpZ25lZCBjaGFyICpkZXNjKQorc3RhdGljIHN0cnVjdCBkYXRhbGlua19wcm90byAqZmluZF9zbmFwX2NsaWVudChjb25zdCB1bnNpZ25lZCBjaGFyICpkZXNjKQogewogCXN0cnVjdCBkYXRhbGlua19wcm90byAqcHJvdG8gPSBOVUxMLCAqcDsKIApAQCAtNTEsNyArNTEsNyBAQAogCWludCByYyA9IDE7CiAJc3RydWN0IGRhdGFsaW5rX3Byb3RvICpwcm90bzsKIAlzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIHNuYXBfcGFja2V0X3R5cGUgPSB7Ci0JCS50eXBlID0gX19jb25zdGFudF9odG9ucyhFVEhfUF9TTkFQKSwKKwkJLnR5cGUgPSBjcHVfdG9fYmUxNihFVEhfUF9TTkFQKSwKIAl9OwogCiAJaWYgKHVubGlrZWx5KCFwc2tiX21heV9wdWxsKHNrYiwgNSkpKQpAQCAtOTUsMTUgKzk1LDE2IEBACiBFWFBPUlRfU1lNQk9MKHJlZ2lzdGVyX3NuYXBfY2xpZW50KTsKIEVYUE9SVF9TWU1CT0wodW5yZWdpc3Rlcl9zbmFwX2NsaWVudCk7CiAKLXN0YXRpYyBjaGFyIHNuYXBfZXJyX21zZ1tdIF9faW5pdGRhdGEgPQorc3RhdGljIGNvbnN0IGNoYXIgc25hcF9lcnJfbXNnW10gX19pbml0Y29uc3QgPQogCUtFUk5fQ1JJVCAiU05BUCAtIHVuYWJsZSB0byByZWdpc3RlciB3aXRoIDgwMi4yXG4iOwogCiBzdGF0aWMgaW50IF9faW5pdCBzbmFwX2luaXQodm9pZCkKIHsKIAlzbmFwX3NhcCA9IGxsY19zYXBfb3BlbigweEFBLCBzbmFwX3Jjdik7Ci0KLQlpZiAoIXNuYXBfc2FwKQorCWlmICghc25hcF9zYXApIHsKIAkJcHJpbnRrKHNuYXBfZXJyX21zZyk7CisJCXJldHVybiAtRUJVU1k7CisJfQogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMjEsNyArMTIyLDcgQEAKIC8qCiAgKglSZWdpc3RlciBTTkFQIGNsaWVudHMuIFdlIGRvbid0IHlldCB1c2UgdGhpcyBmb3IgSVAuCiAgKi8KLXN0cnVjdCBkYXRhbGlua19wcm90byAqcmVnaXN0ZXJfc25hcF9jbGllbnQodW5zaWduZWQgY2hhciAqZGVzYywKK3N0cnVjdCBkYXRhbGlua19wcm90byAqcmVnaXN0ZXJfc25hcF9jbGllbnQoY29uc3QgdW5zaWduZWQgY2hhciAqZGVzYywKIAkJCQkJICAgIGludCAoKnJjdmZ1bmMpKHN0cnVjdCBza19idWZmICosCiAJCQkJCQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKiwKIAkJCQkJCQkgICBzdHJ1Y3QgcGFja2V0X3R5cGUgKiwKQEAgLTEzNiw3ICsxMzcsNyBAQAogCiAJcHJvdG8gPSBrbWFsbG9jKHNpemVvZigqcHJvdG8pLCBHRlBfQVRPTUlDKTsKIAlpZiAocHJvdG8pIHsKLQkJbWVtY3B5KHByb3RvLT50eXBlLCBkZXNjLDUpOworCQltZW1jcHkocHJvdG8tPnR5cGUsIGRlc2MsIDUpOwogCQlwcm90by0+cmN2ZnVuYwkJPSByY3ZmdW5jOwogCQlwcm90by0+aGVhZGVyX2xlbmd0aAk9IDUgKyAzOyAvKiBzbmFwICsgODAyLjIgKi8KIAkJcHJvdG8tPnJlcXVlc3QJCT0gc25hcF9yZXF1ZXN0OwpkaWZmIC0tZ2l0IGEvbmV0LzgwMi90ci5jIGIvbmV0LzgwMi90ci5jCmluZGV4IGY0N2FlMjguLmU3ZWIxMzAgMTAwNjQ0Ci0tLSBhL25ldC84MDIvdHIuYworKysgYi9uZXQvODAyL3RyLmMKQEAgLTQ4Niw2ICs0ODYsNyBAQAogfQogCiBzdGF0aWMgdm9pZCAqcmlmX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCisJX19hY3F1aXJlcygmcmlmX2xvY2spCiB7CiAJc3Bpbl9sb2NrX2lycSgmcmlmX2xvY2spOwogCkBAIC01MTcsNiArNTE4LDcgQEAKIH0KIAogc3RhdGljIHZvaWQgcmlmX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQorCV9fcmVsZWFzZXMoJnJpZl9sb2NrKQogewogCXNwaW5fdW5sb2NrX2lycSgmcmlmX2xvY2spOwogfQpkaWZmIC0tZ2l0IGEvbmV0LzgwMjFxL3ZsYW4uYyBiL25ldC84MDIxcS92bGFuLmMKaW5kZXggNDFlOGY2NS4uMmI3MzkwZSAxMDA2NDQKLS0tIGEvbmV0LzgwMjFxL3ZsYW4uYworKysgYi9uZXQvODAyMXEvdmxhbi5jCkBAIC01MSw4ICs1MSw4IEBACiBzdGF0aWMgY29uc3QgY2hhciB2bGFuX2NvcHlyaWdodFtdID0gIkJlbiBHcmVlYXIgPGdyZWVhcmJAY2FuZGVsYXRlY2guY29tPiI7CiBzdGF0aWMgY29uc3QgY2hhciB2bGFuX2J1Z2d5cmlnaHRbXSA9ICJEYXZpZCBTLiBNaWxsZXIgPGRhdmVtQHJlZGhhdC5jb20+IjsKIAotc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSB2bGFuX3BhY2tldF90eXBlID0gewotCS50eXBlID0gX19jb25zdGFudF9odG9ucyhFVEhfUF84MDIxUSksCitzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIHZsYW5fcGFja2V0X3R5cGUgX19yZWFkX21vc3RseSA9IHsKKwkudHlwZSA9IGNwdV90b19iZTE2KEVUSF9QXzgwMjFRKSwKIAkuZnVuYyA9IHZsYW5fc2tiX3JlY3YsIC8qIFZMQU4gcmVjZWl2ZSBtZXRob2QgKi8KIH07CiAKZGlmZiAtLWdpdCBhL25ldC84MDIxcS92bGFuX2NvcmUuYyBiL25ldC84MDIxcS92bGFuX2NvcmUuYwppbmRleCAyODg2ZDJmLi42NTRlNDVmIDEwMDY0NAotLS0gYS9uZXQvODAyMXEvdmxhbl9jb3JlLmMKKysrIGIvbmV0LzgwMjFxL3ZsYW5fY29yZS5jCkBAIC04OSwzOCArODksMjcgQEAKIAkJZ290byBkcm9wOwogCiAJZm9yIChwID0gbmFwaS0+Z3JvX2xpc3Q7IHA7IHAgPSBwLT5uZXh0KSB7Ci0JCU5BUElfR1JPX0NCKHApLT5zYW1lX2Zsb3cgPSBwLT5kZXYgPT0gc2tiLT5kZXY7CisJCU5BUElfR1JPX0NCKHApLT5zYW1lX2Zsb3cgPQorCQkJcC0+ZGV2ID09IHNrYi0+ZGV2ICYmICFjb21wYXJlX2V0aGVyX2hlYWRlcigKKwkJCQlza2JfbWFjX2hlYWRlcihwKSwgc2tiX2dyb19tYWNfaGVhZGVyKHNrYikpOwogCQlOQVBJX0dST19DQihwKS0+Zmx1c2ggPSAwOwogCX0KIAogCXJldHVybiBkZXZfZ3JvX3JlY2VpdmUobmFwaSwgc2tiKTsKIAogZHJvcDoKLQlyZXR1cm4gMjsKKwlyZXR1cm4gR1JPX0RST1A7CiB9CiAKIGludCB2bGFuX2dyb19yZWNlaXZlKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgc3RydWN0IHZsYW5fZ3JvdXAgKmdycCwKIAkJICAgICB1bnNpZ25lZCBpbnQgdmxhbl90Y2ksIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JaW50IGVyciA9IE5FVF9SWF9TVUNDRVNTOworCWlmIChuZXRwb2xsX3J4X29uKHNrYikpCisJCXJldHVybiB2bGFuX2h3YWNjZWxfcmVjZWl2ZV9za2Ioc2tiLCBncnAsIHZsYW5fdGNpKTsKIAotCWlmIChuZXRwb2xsX3JlY2VpdmVfc2tiKHNrYikpCi0JCXJldHVybiBORVRfUlhfRFJPUDsKKwlza2JfZ3JvX3Jlc2V0X29mZnNldChza2IpOwogCi0Jc3dpdGNoICh2bGFuX2dyb19jb21tb24obmFwaSwgZ3JwLCB2bGFuX3RjaSwgc2tiKSkgewotCWNhc2UgLTE6Ci0JCXJldHVybiBuZXRpZl9yZWNlaXZlX3NrYihza2IpOwotCi0JY2FzZSAyOgotCQllcnIgPSBORVRfUlhfRFJPUDsKLQkJLyogZmFsbCB0aHJvdWdoICovCi0KLQljYXNlIDE6Ci0JCWtmcmVlX3NrYihza2IpOwotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gZXJyOworCXJldHVybiBuYXBpX3NrYl9maW5pc2godmxhbl9ncm9fY29tbW9uKG5hcGksIGdycCwgdmxhbl90Y2ksIHNrYiksIHNrYik7CiB9CiBFWFBPUlRfU1lNQk9MKHZsYW5fZ3JvX3JlY2VpdmUpOwogCkBAIC0xMjgsMzAgKzExNywxNCBAQAogCQkgICB1bnNpZ25lZCBpbnQgdmxhbl90Y2ksIHN0cnVjdCBuYXBpX2dyb19mcmFnaW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gbmFwaV9mcmFnaW5mb19za2IobmFwaSwgaW5mbyk7Ci0JaW50IGVyciA9IE5FVF9SWF9EUk9QOwogCiAJaWYgKCFza2IpCi0JCWdvdG8gb3V0OworCQlyZXR1cm4gTkVUX1JYX0RST1A7CiAKLQlpZiAobmV0cG9sbF9yZWNlaXZlX3NrYihza2IpKQotCQlnb3RvIG91dDsKKwlpZiAobmV0cG9sbF9yeF9vbihza2IpKQorCQlyZXR1cm4gdmxhbl9od2FjY2VsX3JlY2VpdmVfc2tiKHNrYiwgZ3JwLCB2bGFuX3RjaSk7CiAKLQllcnIgPSBORVRfUlhfU1VDQ0VTUzsKLQotCXN3aXRjaCAodmxhbl9ncm9fY29tbW9uKG5hcGksIGdycCwgdmxhbl90Y2ksIHNrYikpIHsKLQljYXNlIC0xOgotCQlyZXR1cm4gbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsKLQotCWNhc2UgMjoKLQkJZXJyID0gTkVUX1JYX0RST1A7Ci0JCS8qIGZhbGwgdGhyb3VnaCAqLwotCi0JY2FzZSAxOgotCQluYXBpX3JldXNlX3NrYihuYXBpLCBza2IpOwotCQlicmVhazsKLQl9Ci0KLW91dDoKLQlyZXR1cm4gZXJyOworCXJldHVybiBuYXBpX2ZyYWdzX2ZpbmlzaChuYXBpLCBza2IsCisJCQkJIHZsYW5fZ3JvX2NvbW1vbihuYXBpLCBncnAsIHZsYW5fdGNpLCBza2IpKTsKIH0KIEVYUE9SVF9TWU1CT0wodmxhbl9ncm9fZnJhZ3MpOwpkaWZmIC0tZ2l0IGEvbmV0LzlwL3RyYW5zX2ZkLmMgYi9uZXQvOXAvdHJhbnNfZmQuYwppbmRleCAxZGYwMzU2Li5jNjEzZWQwOCAxMDA2NDQKLS0tIGEvbmV0LzlwL3RyYW5zX2ZkLmMKKysrIGIvbmV0LzlwL3RyYW5zX2ZkLmMKQEAgLTQxNyw3ICs0MTcsNyBAQAogCW9sZGZzID0gZ2V0X2ZzKCk7CiAJc2V0X2ZzKGdldF9kcygpKTsKIAkvKiBUaGUgY2FzdCB0byBhIHVzZXIgcG9pbnRlciBpcyB2YWxpZCBkdWUgdG8gdGhlIHNldF9mcygpICovCi0JcmV0ID0gdmZzX3dyaXRlKHRzLT53ciwgKHZvaWQgX191c2VyICopdiwgbGVuLCAmdHMtPndyLT5mX3Bvcyk7CisJcmV0ID0gdmZzX3dyaXRlKHRzLT53ciwgKF9fZm9yY2Ugdm9pZCBfX3VzZXIgKil2LCBsZW4sICZ0cy0+d3ItPmZfcG9zKTsKIAlzZXRfZnMob2xkZnMpOwogCiAJaWYgKHJldCA8PSAwICYmIHJldCAhPSAtRVJFU1RBUlRTWVMgJiYgcmV0ICE9IC1FQUdBSU4pCmRpZmYgLS1naXQgYS9uZXQvS2NvbmZpZyBiL25ldC9LY29uZmlnCmluZGV4IGNkYjhmZGUuLmVjOTNlN2UgMTAwNjQ0Ci0tLSBhL25ldC9LY29uZmlnCisrKyBiL25ldC9LY29uZmlnCkBAIC00LDYgKzQsNyBAQAogCiBtZW51Y29uZmlnIE5FVAogCWJvb2wgIk5ldHdvcmtpbmcgc3VwcG9ydCIKKwlzZWxlY3QgTkxBVFRSCiAJLS0taGVscC0tLQogCSAgVW5sZXNzIHlvdSByZWFsbHkga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcsIHlvdSBzaG91bGQgc2F5IFkgaGVyZS4KIAkgIFRoZSByZWFzb24gaXMgdGhhdCBzb21lIHByb2dyYW1zIG5lZWQga2VybmVsIG5ldHdvcmtpbmcgc3VwcG9ydCBldmVuCkBAIC0yNCw5ICsyNSw2IEBACiAKIG1lbnUgIk5ldHdvcmtpbmcgb3B0aW9ucyIKIAotY29uZmlnIENPTVBBVF9ORVRfREVWX09QUwotICAgICAgIGRlZl9ib29sIHkKLQogc291cmNlICJuZXQvcGFja2V0L0tjb25maWciCiBzb3VyY2UgIm5ldC91bml4L0tjb25maWciCiBzb3VyY2UgIm5ldC94ZnJtL0tjb25maWciCkBAIC0xNzEsNiArMTY5LDcgQEAKIAogc291cmNlICJuZXQvZGNjcC9LY29uZmlnIgogc291cmNlICJuZXQvc2N0cC9LY29uZmlnIgorc291cmNlICJuZXQvcmRzL0tjb25maWciCiBzb3VyY2UgIm5ldC90aXBjL0tjb25maWciCiBzb3VyY2UgIm5ldC9hdG0vS2NvbmZpZyIKIHNvdXJjZSAibmV0LzgwMi9LY29uZmlnIgpAQCAtMTg1LDYgKzE4NCw3IEBACiBzb3VyY2UgIm5ldC9sYXBiL0tjb25maWciCiBzb3VyY2UgIm5ldC9lY29uZXQvS2NvbmZpZyIKIHNvdXJjZSAibmV0L3dhbnJvdXRlci9LY29uZmlnIgorc291cmNlICJuZXQvcGhvbmV0L0tjb25maWciCiBzb3VyY2UgIm5ldC9zY2hlZC9LY29uZmlnIgogc291cmNlICJuZXQvZGNiL0tjb25maWciCiAKQEAgLTIyMCw2ICsyMjAsMTcgQEAKIAlUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHRjcF9wcm9iZS4KIAorY29uZmlnIE5FVF9EUk9QX01PTklUT1IKKwlib29sZWFuICJOZXR3b3JrIHBhY2tldCBkcm9wIGFsZXJ0aW5nIHNlcnZpY2UiCisJZGVwZW5kcyBvbiBJTkVUICYmIEVYUEVSSU1FTlRBTCAmJiBUUkFDRVBPSU5UUworCS0tLWhlbHAtLS0KKwlUaGlzIGZlYXR1cmUgcHJvdmlkZXMgYW4gYWxlcnRpbmcgc2VydmljZSB0byB1c2Vyc3BhY2UgaW4gdGhlCisJZXZlbnQgdGhhdCBwYWNrZXRzIGFyZSBkaXNjYXJkZWQgaW4gdGhlIG5ldHdvcmsgc3RhY2suICBBbGVydHMKKwlhcmUgYnJvYWRjYXN0IHZpYSBuZXRsaW5rIHNvY2tldCB0byBhbnkgbGlzdGVuaW5nIHVzZXIgc3BhY2UKKwlwcm9jZXNzLiAgSWYgeW91IGRvbid0IG5lZWQgbmV0d29yayBkcm9wIGFsZXJ0cywgb3IgaWYgeW91IGFyZSBvaworCWp1c3QgY2hlY2tpbmcgdGhlIHZhcmlvdXMgcHJvYyBmaWxlcyBhbmQgb3RoZXIgdXRpbGl0aWVzIGZvcgorCWRyb3Agc3RhdGlzdGljcywgc2F5IE4gaGVyZS4KKwogZW5kbWVudQogCiBlbmRtZW51CkBAIC0yMjksNyArMjQwLDYgQEAKIHNvdXJjZSAibmV0L2lyZGEvS2NvbmZpZyIKIHNvdXJjZSAibmV0L2JsdWV0b290aC9LY29uZmlnIgogc291cmNlICJuZXQvcnhycGMvS2NvbmZpZyIKLXNvdXJjZSAibmV0L3Bob25ldC9LY29uZmlnIgogCiBjb25maWcgRklCX1JVTEVTCiAJYm9vbApkaWZmIC0tZ2l0IGEvbmV0L01ha2VmaWxlIGIvbmV0L01ha2VmaWxlCmluZGV4IDBmY2NlODkuLjllMDBhNTUgMTAwNjQ0Ci0tLSBhL25ldC9NYWtlZmlsZQorKysgYi9uZXQvTWFrZWZpbGUKQEAgLTQ5LDYgKzQ5LDcgQEAKIGVuZGlmCiBvYmotJChDT05GSUdfSVBfRENDUCkJCSs9IGRjY3AvCiBvYmotJChDT05GSUdfSVBfU0NUUCkJCSs9IHNjdHAvCitvYmotJChDT05GSUdfUkRTKQkJKz0gcmRzLwogb2JqLXkJCQkJKz0gd2lyZWxlc3MvCiBvYmotJChDT05GSUdfTUFDODAyMTEpCQkrPSBtYWM4MDIxMS8KIG9iai0kKENPTkZJR19USVBDKQkJKz0gdGlwYy8KZGlmZiAtLWdpdCBhL25ldC9hcHBsZXRhbGsvZGRwLmMgYi9uZXQvYXBwbGV0YWxrL2RkcC5jCmluZGV4IDVhYmNlMDcuLjNlMDY3MWQgMTAwNjQ0Ci0tLSBhL25ldC9hcHBsZXRhbGsvZGRwLmMKKysrIGIvbmV0L2FwcGxldGFsay9kZHAuYwpAQCAtMTg2MCwxMyArMTg2MCwxMyBAQAogCS5ub3RpZmllcl9jYWxsCT0gZGRwX2RldmljZV9ldmVudCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgbHRhbGtfcGFja2V0X3R5cGUgPSB7Ci0JLnR5cGUJCT0gX19jb25zdGFudF9odG9ucyhFVEhfUF9MT0NBTFRBTEspLAorc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBsdGFsa19wYWNrZXRfdHlwZSBfX3JlYWRfbW9zdGx5ID0geworCS50eXBlCQk9IGNwdV90b19iZTE2KEVUSF9QX0xPQ0FMVEFMSyksCiAJLmZ1bmMJCT0gbHRhbGtfcmN2LAogfTsKIAotc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBwcHB0YWxrX3BhY2tldF90eXBlID0gewotCS50eXBlCQk9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfUFBQVEFMSyksCitzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIHBwcHRhbGtfcGFja2V0X3R5cGUgX19yZWFkX21vc3RseSA9IHsKKwkudHlwZQkJPSBjcHVfdG9fYmUxNihFVEhfUF9QUFBUQUxLKSwKIAkuZnVuYwkJPSBhdGFsa19yY3YsCiB9OwogCkBAIC0xODc3LDcgKzE4NzcsNyBAQAogRVhQT1JUX1NZTUJPTChhdHJ0cl9nZXRfZGV2KTsKIEVYUE9SVF9TWU1CT0woYXRhbGtfZmluZF9kZXZfYWRkcik7CiAKLXN0YXRpYyBjaGFyIGF0YWxrX2Vycl9zbmFwW10gX19pbml0ZGF0YSA9CitzdGF0aWMgY29uc3QgY2hhciBhdGFsa19lcnJfc25hcFtdIF9faW5pdGNvbnN0ID0KIAlLRVJOX0NSSVQgIlVuYWJsZSB0byByZWdpc3RlciBERFAgd2l0aCBTTkFQLlxuIjsKIAogLyogQ2FsbGVkIGJ5IHByb3RvLmMgb24ga2VybmVsIHN0YXJ0IHVwICovCmRpZmYgLS1naXQgYS9uZXQvYXBwbGV0YWxrL2Rldi5jIGIvbmV0L2FwcGxldGFsay9kZXYuYwppbmRleCBkODU2YTYyLi43MjI3N2Q3IDEwMDY0NAotLS0gYS9uZXQvYXBwbGV0YWxrL2Rldi5jCisrKyBiL25ldC9hcHBsZXRhbGsvZGV2LmMKQEAgLTksMjIgKzksMjAgQEAKICNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KICNpbmNsdWRlIDxsaW51eC9pZl9sdGFsay5oPgogCisjaWZkZWYgQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUwogc3RhdGljIGludCBsdGFsa19jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBtdHUpCiB7CiAJcmV0dXJuIC1FSU5WQUw7CiB9Ci0KLXN0YXRpYyBpbnQgbHRhbGtfbWFjX2FkZHIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqYWRkcikKLXsKLQlyZXR1cm4gLUVJTlZBTDsKLX0KKyNlbmRpZgogCiBzdGF0aWMgdm9pZCBsdGFsa19zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCS8qIEZpbGwgaW4gdGhlIGZpZWxkcyBvZiB0aGUgZGV2aWNlIHN0cnVjdHVyZSB3aXRoIGxvY2FsdGFsay1nZW5lcmljIHZhbHVlcy4gKi8KIAorI2lmZGVmIENPTkZJR19DT01QQVRfTkVUX0RFVl9PUFMKIAlkZXYtPmNoYW5nZV9tdHUJCT0gbHRhbGtfY2hhbmdlX210dTsKLQlkZXYtPnNldF9tYWNfYWRkcmVzcyAJPSBsdGFsa19tYWNfYWRkcjsKKyNlbmRpZgogCiAJZGV2LT50eXBlCQk9IEFSUEhSRF9MT0NBTFRMSzsKIAlkZXYtPmhhcmRfaGVhZGVyX2xlbiAJPSBMVEFMS19ITEVOOwpkaWZmIC0tZ2l0IGEvbmV0L2F0bS9icjI2ODQuYyBiL25ldC9hdG0vYnIyNjg0LmMKaW5kZXggZWE5NDM4ZmMuLjMzNGZjZDQgMTAwNjQ0Ci0tLSBhL25ldC9hdG0vYnIyNjg0LmMKKysrIGIvbmV0L2F0bS9icjI2ODQuYwpAQCAtODMsNyArODMsNiBAQAogCXN0cnVjdCBsaXN0X2hlYWQgYnIyNjg0X2RldnM7CiAJaW50IG51bWJlcjsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGJydmNjczsJLyogb25lIGRldmljZSA8PT4gb25lIHZjYyAoYmVmb3JlIHhtYXMpICovCi0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CiAJaW50IG1hY193YXNfc2V0OwogCWVudW0gYnIyNjg0X3BheWxvYWQgcGF5bG9hZDsKIH07CkBAIC0xNDgsOSArMTQ3LDEwIEBACiAgKiB0aGUgd2F5IGZvciBtdWx0aXBsZSB2Y2MncyBwZXIgaXRmLiAgUmV0dXJucyB0cnVlIGlmIHdlIGNhbiBzZW5kLAogICogb3RoZXJ3aXNlIGZhbHNlCiAgKi8KLXN0YXRpYyBpbnQgYnIyNjg0X3htaXRfdmNjKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBicjI2ODRfZGV2ICpicmRldiwKK3N0YXRpYyBpbnQgYnIyNjg0X3htaXRfdmNjKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgICBzdHJ1Y3QgYnIyNjg0X3ZjYyAqYnJ2Y2MpCiB7CisJc3RydWN0IGJyMjY4NF9kZXYgKmJyZGV2ID0gQlJQUklWKGRldik7CiAJc3RydWN0IGF0bV92Y2MgKmF0bXZjYzsKIAlpbnQgbWluaGVhZHJvb20gPSAoYnJ2Y2MtPmVuY2FwcyA9PSBlX2xsYykgPyAxMCA6IDI7CiAKQEAgLTIxMSw4ICsyMTEsOCBAQAogCX0KIAlhdG9taWNfYWRkKHNrYi0+dHJ1ZXNpemUsICZza19hdG0oYXRtdmNjKS0+c2tfd21lbV9hbGxvYyk7CiAJQVRNX1NLQihza2IpLT5hdG1fb3B0aW9ucyA9IGF0bXZjYy0+YXRtX29wdGlvbnM7Ci0JYnJkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKLQlicmRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CisJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CisJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKIAlhdG12Y2MtPnNlbmQoYXRtdmNjLCBza2IpOwogCXJldHVybiAxOwogfQpAQCAtMjMzLDE0ICsyMzMsMTQgQEAKIAlicnZjYyA9IHBpY2tfb3V0Z29pbmdfdmNjKHNrYiwgYnJkZXYpOwogCWlmIChicnZjYyA9PSBOVUxMKSB7CiAJCXByX2RlYnVnKCJubyB2Y2MgYXR0YWNoZWQgdG8gZGV2ICVzXG4iLCBkZXYtPm5hbWUpOwotCQlicmRldi0+c3RhdHMudHhfZXJyb3JzKys7Ci0JCWJyZGV2LT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7CiAJCS8qIG5ldGlmX3N0b3BfcXVldWUoZGV2KTsgKi8KIAkJZGV2X2tmcmVlX3NrYihza2IpOwogCQlyZWFkX3VubG9jaygmZGV2c19sb2NrKTsKIAkJcmV0dXJuIDA7CiAJfQotCWlmICghYnIyNjg0X3htaXRfdmNjKHNrYiwgYnJkZXYsIGJydmNjKSkgeworCWlmICghYnIyNjg0X3htaXRfdmNjKHNrYiwgZGV2LCBicnZjYykpIHsKIAkJLyoKIAkJICogV2Ugc2hvdWxkIHByb2JhYmx5IHVzZSBuZXRpZl8qX3F1ZXVlKCkgaGVyZSwgYnV0IHRoYXQKIAkJICogaW52b2x2ZXMgYWRkZWQgY29tcGxpY2F0aW9uLiAgV2UgbmVlZCB0byB3YWxrIGJlZm9yZQpAQCAtMjQ4LDI3ICsyNDgsMjAgQEAKIAkJICoKIAkJICogRG9uJ3QgZnJlZSBoZXJlISB0aGlzIHBvaW50ZXIgbWlnaHQgYmUgbm8gbG9uZ2VyIHZhbGlkIQogCQkgKi8KLQkJYnJkZXYtPnN0YXRzLnR4X2Vycm9ycysrOwotCQlicmRldi0+c3RhdHMudHhfZmlmb19lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy50eF9maWZvX2Vycm9ycysrOwogCX0KIAlyZWFkX3VubG9jaygmZGV2c19sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpicjI2ODRfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JcHJfZGVidWcoImJyMjY4NF9nZXRfc3RhdHNcbiIpOwotCXJldHVybiAmQlJQUklWKGRldiktPnN0YXRzOwotfQotCiAvKgogICogV2UgcmVtZW1iZXIgd2hlbiB0aGUgTUFDIGdldHMgc2V0LCBzbyB3ZSBkb24ndCBvdmVycmlkZSBpdCBsYXRlciB3aXRoCiAgKiB0aGUgRVNJIG9mIHRoZSBBVE0gY2FyZCBvZiB0aGUgZmlyc3QgVkMKICAqLwotc3RhdGljIGludCAoKm15X2V0aF9tYWNfYWRkcikgKHN0cnVjdCBuZXRfZGV2aWNlICosIHZvaWQgKik7CiBzdGF0aWMgaW50IGJyMjY4NF9tYWNfYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpwKQogewotCWludCBlcnIgPSBteV9ldGhfbWFjX2FkZHIoZGV2LCBwKTsKKwlpbnQgZXJyID0gZXRoX21hY19hZGRyKGRldiwgcCk7CiAJaWYgKCFlcnIpCiAJCUJSUFJJVihkZXYpLT5tYWNfd2FzX3NldCA9IDE7CiAJcmV0dXJuIGVycjsKQEAgLTQzMCwxNyArNDIzLDE3IEBACiAJLyogc2lnaCwgaW50ZXJmYWNlIGlzIGRvd24/ICovCiAJaWYgKHVubGlrZWx5KCEobmV0X2Rldi0+ZmxhZ3MgJiBJRkZfVVApKSkKIAkJZ290byBkcm9wcGVkOwotCWJyZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7Ci0JYnJkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOworCW5ldF9kZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwluZXRfZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKIAltZW1zZXQoQVRNX1NLQihza2IpLCAwLCBzaXplb2Yoc3RydWN0IGF0bV9za2JfZGF0YSkpOwogCW5ldGlmX3J4KHNrYik7CiAJcmV0dXJuOwogCiBkcm9wcGVkOgotCWJyZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CisJbmV0X2Rldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCWdvdG8gZnJlZV9za2I7CiBlcnJvcjoKLQlicmRldi0+c3RhdHMucnhfZXJyb3JzKys7CisJbmV0X2Rldi0+c3RhdHMucnhfZXJyb3JzKys7CiBmcmVlX3NrYjoKIAlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJcmV0dXJuOwpAQCAtNTMxLDggKzUyNCw4IEBACiAKIAkJc2tiLT5uZXh0ID0gc2tiLT5wcmV2ID0gTlVMTDsKIAkJYnIyNjg0X3B1c2goYXRtdmNjLCBza2IpOwotCQlCUlBSSVYoc2tiLT5kZXYpLT5zdGF0cy5yeF9ieXRlcyAtPSBza2ItPmxlbjsKLQkJQlJQUklWKHNrYi0+ZGV2KS0+c3RhdHMucnhfcGFja2V0cy0tOworCQlza2ItPmRldi0+c3RhdHMucnhfYnl0ZXMgLT0gc2tiLT5sZW47CisJCXNrYi0+ZGV2LT5zdGF0cy5yeF9wYWNrZXRzLS07CiAKIAkJc2tiID0gbmV4dDsKIAl9CkBAIC01NDQsMTcgKzUzNywyMCBAQAogCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYnIyNjg0X25ldGRldl9vcHMgPSB7CisJLm5kb19zdGFydF94bWl0IAk9IGJyMjY4NF9zdGFydF94bWl0LAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gYnIyNjg0X21hY19hZGRyLAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIHN0YXRpYyB2b2lkIGJyMjY4NF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBicjI2ODRfZGV2ICpicmRldiA9IEJSUFJJVihuZXRkZXYpOwogCiAJZXRoZXJfc2V0dXAobmV0ZGV2KTsKLQlicmRldi0+bmV0X2RldiA9IG5ldGRldjsKIAotCW15X2V0aF9tYWNfYWRkciA9IG5ldGRldi0+c2V0X21hY19hZGRyZXNzOwotCW5ldGRldi0+c2V0X21hY19hZGRyZXNzID0gYnIyNjg0X21hY19hZGRyOwotCW5ldGRldi0+aGFyZF9zdGFydF94bWl0ID0gYnIyNjg0X3N0YXJ0X3htaXQ7Ci0JbmV0ZGV2LT5nZXRfc3RhdHMgPSBicjI2ODRfZ2V0X3N0YXRzOworCW5ldGRldi0+bmV0ZGV2X29wcyA9ICZicjI2ODRfbmV0ZGV2X29wczsKIAogCUlOSVRfTElTVF9IRUFEKCZicmRldi0+YnJ2Y2NzKTsKIH0KQEAgLTU2NSwxMCArNTYxLDggQEAKIAlicmRldi0+bmV0X2RldiA9IG5ldGRldjsKIAogCW5ldGRldi0+aGFyZF9oZWFkZXJfbGVuID0gMDsKLQlteV9ldGhfbWFjX2FkZHIgPSBuZXRkZXYtPnNldF9tYWNfYWRkcmVzczsKLQluZXRkZXYtPnNldF9tYWNfYWRkcmVzcyA9IGJyMjY4NF9tYWNfYWRkcjsKLQluZXRkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGJyMjY4NF9zdGFydF94bWl0OwotCW5ldGRldi0+Z2V0X3N0YXRzID0gYnIyNjg0X2dldF9zdGF0czsKKworCW5ldGRldi0+bmV0ZGV2X29wcyA9ICZicjI2ODRfbmV0ZGV2X29wczsKIAluZXRkZXYtPmFkZHJfbGVuID0gMDsKIAluZXRkZXYtPm10dSA9IDE1MDA7CiAJbmV0ZGV2LT50eXBlID0gQVJQSFJEX1BQUDsKZGlmZiAtLWdpdCBhL25ldC9hdG0vY2xpcC5jIGIvbmV0L2F0bS9jbGlwLmMKaW5kZXggMmQzM2E4My4uM2RjMGEzYSAxMDA2NDQKLS0tIGEvbmV0L2F0bS9jbGlwLmMKKysrIGIvbmV0L2F0bS9jbGlwLmMKQEAgLTIxNCwxNSArMjE0LDE1IEBACiAJCXNrYi0+cHJvdG9jb2wgPSAoKF9fYmUxNiAqKSBza2ItPmRhdGEpWzNdOwogCQlza2JfcHVsbChza2IsIFJGQzE0ODNMTENfTEVOKTsKIAkJaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfQVJQKSkgewotCQkJUFJJVihza2ItPmRldiktPnN0YXRzLnJ4X3BhY2tldHMrKzsKLQkJCVBSSVYoc2tiLT5kZXYpLT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKKwkJCXNrYi0+ZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJCQlza2ItPmRldi0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CiAJCQljbGlwX2FycF9yY3Yoc2tiKTsKIAkJCXJldHVybjsKIAkJfQogCX0KIAljbGlwX3ZjYy0+bGFzdF91c2UgPSBqaWZmaWVzOwotCVBSSVYoc2tiLT5kZXYpLT5zdGF0cy5yeF9wYWNrZXRzKys7Ci0JUFJJVihza2ItPmRldiktPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOworCXNrYi0+ZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJc2tiLT5kZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOwogCW1lbXNldChBVE1fU0tCKHNrYiksIDAsIHNpemVvZihzdHJ1Y3QgYXRtX3NrYl9kYXRhKSk7CiAJbmV0aWZfcngoc2tiKTsKIH0KQEAgLTM3Miw3ICszNzIsNyBAQAogCWlmICghc2tiLT5kc3QpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJjbGlwX3N0YXJ0X3htaXQ6IHNrYi0+ZHN0ID09IE5VTExcbiIpOwogCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JCWNsaXBfcHJpdi0+c3RhdHMudHhfZHJvcHBlZCsrOworCQlkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJcmV0dXJuIDA7CiAJfQogCWlmICghc2tiLT5kc3QtPm5laWdoYm91cikgewpAQCAtMzgwLDEzICszODAsMTMgQEAKIAkJc2tiLT5kc3QtPm5laWdoYm91ciA9IGNsaXBfZmluZF9uZWlnaGJvdXIoc2tiLT5kc3QsIDEpOwogCQlpZiAoIXNrYi0+ZHN0LT5uZWlnaGJvdXIpIHsKIAkJCWRldl9rZnJlZV9za2Ioc2tiKTsJLyogbG9zdCB0aGF0IG9uZSAqLwotCQkJY2xpcF9wcml2LT5zdGF0cy50eF9kcm9wcGVkKys7CisJCQlkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJCXJldHVybiAwOwogCQl9CiAjZW5kaWYKIAkJcHJpbnRrKEtFUk5fRVJSICJjbGlwX3N0YXJ0X3htaXQ6IE5PIE5FSUdIQk9VUiAhXG4iKTsKIAkJZGV2X2tmcmVlX3NrYihza2IpOwotCQljbGlwX3ByaXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKKwkJZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7CiAJCXJldHVybiAwOwogCX0KIAllbnRyeSA9IE5FSUdIMkVOVFJZKHNrYi0+ZHN0LT5uZWlnaGJvdXIpOwpAQCAtNDAwLDcgKzQwMCw3IEBACiAJCQlza2JfcXVldWVfdGFpbCgmZW50cnktPm5laWdoLT5hcnBfcXVldWUsIHNrYik7CiAJCWVsc2UgewogCQkJZGV2X2tmcmVlX3NrYihza2IpOwotCQkJY2xpcF9wcml2LT5zdGF0cy50eF9kcm9wcGVkKys7CisJCQlkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJfQogCQlyZXR1cm4gMDsKIAl9CkBAIC00MjMsOCArNDIzLDggQEAKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2xpcF9zdGFydF94bWl0OiBYT0ZGLT5YT0ZGIHRyYW5zaXRpb25cbiIpOwogCQlyZXR1cm4gMDsKIAl9Ci0JY2xpcF9wcml2LT5zdGF0cy50eF9wYWNrZXRzKys7Ci0JY2xpcF9wcml2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKKwlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwlkZXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOwogCXZjYy0+c2VuZCh2Y2MsIHNrYik7CiAJaWYgKGF0bV9tYXlfc2VuZCh2Y2MsIDApKSB7CiAJCWVudHJ5LT52Y2NzLT54b2ZmID0gMDsKQEAgLTQ0MywxMSArNDQzLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpjbGlwX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXJldHVybiAmUFJJVihkZXYpLT5zdGF0czsKLX0KLQogc3RhdGljIGludCBjbGlwX21raXAoc3RydWN0IGF0bV92Y2MgKnZjYywgaW50IHRpbWVvdXQpCiB7CiAJc3RydWN0IGNsaXBfdmNjICpjbGlwX3ZjYzsKQEAgLTUwMSw4ICs0OTYsOCBAQAogCiAJCQlza2JfZ2V0KHNrYik7CiAJCQljbGlwX3B1c2godmNjLCBza2IpOwotCQkJUFJJVihza2ItPmRldiktPnN0YXRzLnJ4X3BhY2tldHMtLTsKLQkJCVBSSVYoc2tiLT5kZXYpLT5zdGF0cy5yeF9ieXRlcyAtPSBsZW47CisJCQlza2ItPmRldi0+c3RhdHMucnhfcGFja2V0cy0tOworCQkJc2tiLT5kZXYtPnN0YXRzLnJ4X2J5dGVzIC09IGxlbjsKIAkJCWtmcmVlX3NrYihza2IpOwogCQl9CiAKQEAgLTU1NywxMSArNTUyLDEzIEBACiAJcmV0dXJuIGVycm9yOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGNsaXBfbmV0ZGV2X29wcyA9IHsKKwkubmRvX3N0YXJ0X3htaXQgPSBjbGlwX3N0YXJ0X3htaXQsCit9OworCiBzdGF0aWMgdm9pZCBjbGlwX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBjbGlwX3N0YXJ0X3htaXQ7Ci0JLyogc2dfeG1pdCAuLi4gKi8KLQlkZXYtPmdldF9zdGF0cyA9IGNsaXBfZ2V0X3N0YXRzOworCWRldi0+bmV0ZGV2X29wcyA9ICZjbGlwX25ldGRldl9vcHM7CiAJZGV2LT50eXBlID0gQVJQSFJEX0FUTTsKIAlkZXYtPmhhcmRfaGVhZGVyX2xlbiA9IFJGQzE0ODNMTENfTEVOOwogCWRldi0+bXR1ID0gUkZDMTYyNl9NVFU7CkBAIC02MjEsNyArNjE4LDcgQEAKIAl9CiAKIAkvKiBpZ25vcmUgbm9uLUNMSVAgZGV2aWNlcyAqLwotCWlmIChkZXYtPnR5cGUgIT0gQVJQSFJEX0FUTSB8fCBkZXYtPmhhcmRfc3RhcnRfeG1pdCAhPSBjbGlwX3N0YXJ0X3htaXQpCisJaWYgKGRldi0+dHlwZSAhPSBBUlBIUkRfQVRNIHx8IGRldi0+bmV0ZGV2X29wcyAhPSAmY2xpcF9uZXRkZXZfb3BzKQogCQlyZXR1cm4gTk9USUZZX0RPTkU7CiAKIAlzd2l0Y2ggKGV2ZW50KSB7CmRpZmYgLS1naXQgYS9uZXQvYXRtL2xlYy5jIGIvbmV0L2F0bS9sZWMuYwppbmRleCBlNWUzMDE1Li4xOTliNmJiIDEwMDY0NAotLS0gYS9uZXQvYXRtL2xlYy5jCisrKyBiL25ldC9hdG0vbGVjLmMKQEAgLTYyLDcgKzYyLDYgQEAKIHN0YXRpYyBpbnQgbGVjX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IGxlY19zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBsZWNfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmxlY19nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBsZWNfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBzdHJ1Y3QgbGVjX2FycF90YWJsZSAqbGVjX2FycF9maW5kKHN0cnVjdCBsZWNfcHJpdiAqcHJpdiwKIAkJCQkJICBjb25zdCB1bnNpZ25lZCBjaGFyICptYWNfYWRkcik7CkBAIC0yMTgsMjggKzIxNywyOCBAQAogCiBzdGF0aWMgaW50IGxlY19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGxlY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQogCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7Ci0JbWVtc2V0KCZwcml2LT5zdGF0cywgMCwgc2l6ZW9mKHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzKSk7CisJbWVtc2V0KCZkZXYtPnN0YXRzLCAwLCBzaXplb2Yoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMpKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkCi1sZWNfc2VuZChzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbGVjX3ByaXYgKnByaXYpCitzdGF0aWMgdm9pZAorbGVjX3NlbmQoc3RydWN0IGF0bV92Y2MgKnZjYywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2tiLT5kZXY7CisKIAlBVE1fU0tCKHNrYiktPnZjYyA9IHZjYzsKIAlBVE1fU0tCKHNrYiktPmF0bV9vcHRpb25zID0gdmNjLT5hdG1fb3B0aW9uczsKIAogCWF0b21pY19hZGQoc2tiLT50cnVlc2l6ZSwgJnNrX2F0bSh2Y2MpLT5za193bWVtX2FsbG9jKTsKIAlpZiAodmNjLT5zZW5kKHZjYywgc2tiKSA8IDApIHsKLQkJcHJpdi0+c3RhdHMudHhfZHJvcHBlZCsrOworCQlkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJcmV0dXJuOwogCX0KIAotCXByaXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKLQlwcml2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKKwlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwlkZXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOwogfQogCiBzdGF0aWMgdm9pZCBsZWNfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtMjcwLDcgKzI2OSw3IEBACiAJcHJfZGVidWcoImxlY19zdGFydF94bWl0IGNhbGxlZFxuIik7CiAJaWYgKCFwcml2LT5sZWNkKSB7CiAJCXByaW50aygiJXM6Tm8gbGVjZCBhdHRhY2hlZFxuIiwgZGV2LT5uYW1lKTsKLQkJcHJpdi0+c3RhdHMudHhfZXJyb3JzKys7CisJCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CiAJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAkJcmV0dXJuIC1FVU5BVENIOwogCX0KQEAgLTM0NSw3ICszNDQsNyBAQAogCQkJCQkgICAgICAgR0ZQX0FUT01JQyk7CiAJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCQlpZiAoc2tiMiA9PSBOVUxMKSB7Ci0JCQkJcHJpdi0+c3RhdHMudHhfZHJvcHBlZCsrOworCQkJCWRldi0+c3RhdHMudHhfZHJvcHBlZCsrOwogCQkJCXJldHVybiAwOwogCQkJfQogCQkJc2tiID0gc2tiMjsKQEAgLTM4MCw3ICszNzksNyBAQAogCQkJICAgICgiJXM6bGVjX3N0YXJ0X3htaXQ6IHR4IHF1ZXVlIGZ1bGwgb3Igbm8gYXJwIGVudHJ5LCBkcm9wcGluZywgIiwKIAkJCSAgICAgZGV2LT5uYW1lKTsKIAkJCXByX2RlYnVnKCJNQUMgYWRkcmVzcyAlcE1cbiIsIGxlY19oLT5oX2Rlc3QpOwotCQkJcHJpdi0+c3RhdHMudHhfZHJvcHBlZCsrOworCQkJZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7CiAJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCX0KIAkJZ290byBvdXQ7CkBAIC0zOTIsMTAgKzM5MSwxMCBAQAogCXdoaWxlIChlbnRyeSAmJiAoc2tiMiA9IHNrYl9kZXF1ZXVlKCZlbnRyeS0+dHhfd2FpdCkpKSB7CiAJCXByX2RlYnVnKCJsZWMuYzogZW1wdHlpbmcgdHggcXVldWUsICIpOwogCQlwcl9kZWJ1ZygiTUFDIGFkZHJlc3MgJXBNXG4iLCBsZWNfaC0+aF9kZXN0KTsKLQkJbGVjX3NlbmQodmNjLCBza2IyLCBwcml2KTsKKwkJbGVjX3NlbmQodmNjLCBza2IyKTsKIAl9CiAKLQlsZWNfc2VuZCh2Y2MsIHNrYiwgcHJpdik7CisJbGVjX3NlbmQodmNjLCBza2IpOwogCiAJaWYgKCFhdG1fbWF5X3NlbmQodmNjLCAwKSkgewogCQlzdHJ1Y3QgbGVjX3ZjY19wcml2ICp2cHJpdiA9IExFQ19WQ0NfUFJJVih2Y2MpOwpAQCAtNDI3LDE1ICs0MjYsNiBAQAogCXJldHVybiAwOwogfQogCi0vKgotICogR2V0IHRoZSBjdXJyZW50IHN0YXRpc3RpY3MuCi0gKiBUaGlzIG1heSBiZSBjYWxsZWQgd2l0aCB0aGUgY2FyZCBvcGVuIG9yIGNsb3NlZC4KLSAqLwotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpsZWNfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuICYoKHN0cnVjdCBsZWNfcHJpdiAqKW5ldGRldl9wcml2KGRldikpLT5zdGF0czsKLX0KLQogc3RhdGljIGludCBsZWNfYXRtX3NlbmQoc3RydWN0IGF0bV92Y2MgKnZjYywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNTEyLDcgKzUwMiw3IEBACiAJCXByaXYtPmxhbmUyX29wcyA9IE5VTEw7CiAJCWlmIChwcml2LT5sYW5lX3ZlcnNpb24gPiAxKQogCQkJcHJpdi0+bGFuZTJfb3BzID0gJmxhbmUyX29wczsKLQkJaWYgKGRldi0+Y2hhbmdlX210dShkZXYsIG1lc2ctPmNvbnRlbnQuY29uZmlnLm10dSkpCisJCWlmIChkZXZfc2V0X210dShkZXYsIG1lc2ctPmNvbnRlbnQuY29uZmlnLm10dSkpCiAJCQlwcmludGsoIiVzOiBjaGFuZ2VfbXR1IHRvICVkIGZhaWxlZFxuIiwgZGV2LT5uYW1lLAogCQkJICAgICAgIG1lc2ctPmNvbnRlbnQuY29uZmlnLm10dSk7CiAJCXByaXYtPmlzX3Byb3h5ID0gbWVzZy0+Y29udGVudC5jb25maWcuaXNfcHJveHk7CkBAIC02NzcsMTcgKzY2NywxOSBAQAogCXJldHVybjsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBsZWNfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gbGVjX29wZW4sCisJLm5kb19zdG9wCQk9IGxlY19jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gbGVjX3N0YXJ0X3htaXQsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGxlY19jaGFuZ2VfbXR1LAorCS5uZG9fdHhfdGltZW91dAkJPSBsZWNfdHhfdGltZW91dCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdAk9IGxlY19zZXRfbXVsdGljYXN0X2xpc3QsCit9OworCisKIHN0YXRpYyB2b2lkIGxlY19pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0JZGV2LT5jaGFuZ2VfbXR1ID0gbGVjX2NoYW5nZV9tdHU7Ci0JZGV2LT5vcGVuID0gbGVjX29wZW47Ci0JZGV2LT5zdG9wID0gbGVjX2Nsb3NlOwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gbGVjX3N0YXJ0X3htaXQ7Ci0JZGV2LT50eF90aW1lb3V0ID0gbGVjX3R4X3RpbWVvdXQ7Ci0KLQlkZXYtPmdldF9zdGF0cyA9IGxlY19nZXRfc3RhdHM7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBsZWNfc2V0X211bHRpY2FzdF9saXN0OwotCWRldi0+ZG9faW9jdGwgPSBOVUxMOworCWRldi0+bmV0ZGV2X29wcyA9ICZsZWNfbmV0ZGV2X29wczsKIAlwcmludGsoIiVzOiBJbml0aWFsaXplZCFcbiIsIGRldi0+bmFtZSk7CiB9CiAKQEAgLTgxMCw4ICs4MDIsOCBAQAogCQllbHNlCiAjZW5kaWYKIAkJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7Ci0JCXByaXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKLQkJcHJpdi0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CisJCWRldi0+c3RhdHMucnhfcGFja2V0cysrOworCQlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOwogCQltZW1zZXQoQVRNX1NLQihza2IpLCAwLCBzaXplb2Yoc3RydWN0IGF0bV9za2JfZGF0YSkpOwogCQluZXRpZl9yeChza2IpOwogCX0KQEAgLTE4ODcsNyArMTg3OSw3IEBACiAJCQkJCWxlY19hcnBfaG9sZChlbnRyeSk7CiAJCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxlY19hcnBfbG9jaywgZmxhZ3MpOwogCQkJCQl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZlbnRyeS0+dHhfd2FpdCkpICE9IE5VTEwpCi0JCQkJCQlsZWNfc2VuZCh2Y2MsIHNrYiwgZW50cnktPnByaXYpOworCQkJCQkJbGVjX3NlbmQodmNjLCBza2IpOwogCQkJCQllbnRyeS0+bGFzdF91c2VkID0gamlmZmllczsKIAkJCQkJZW50cnktPnN0YXR1cyA9IEVTSV9GT1JXQVJEX0RJUkVDVDsKIAkJCQkJbGVjX2FycF9wdXQoZW50cnkpOwpAQCAtMjMwNSw3ICsyMjk3LDcgQEAKIAkJCQlsZWNfYXJwX2hvbGQoZW50cnkpOwogCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxlY19hcnBfbG9jaywgZmxhZ3MpOwogCQkJCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJmVudHJ5LT50eF93YWl0KSkgIT0gTlVMTCkKLQkJCQkJbGVjX3NlbmQodmNjLCBza2IsIGVudHJ5LT5wcml2KTsKKwkJCQkJbGVjX3NlbmQodmNjLCBza2IpOwogCQkJCWVudHJ5LT5sYXN0X3VzZWQgPSBqaWZmaWVzOwogCQkJCWVudHJ5LT5zdGF0dXMgPSBFU0lfRk9SV0FSRF9ESVJFQ1Q7CiAJCQkJbGVjX2FycF9wdXQoZW50cnkpOwpkaWZmIC0tZ2l0IGEvbmV0L2F0bS9sZWMuaCBiL25ldC9hdG0vbGVjLmgKaW5kZXggMGQzNzY2OC4uOWQxNGQxOSAxMDA2NDQKLS0tIGEvbmV0L2F0bS9sZWMuaAorKysgYi9uZXQvYXRtL2xlYy5oCkBAIC02OSw3ICs2OSw2IEBACiAjZGVmaW5lIExFQ19BUlBfVEFCTEVfU0laRSAxNgogCiBzdHJ1Y3QgbGVjX3ByaXYgewotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwogCXVuc2lnbmVkIHNob3J0IGxlY2lkOwkJCS8qIExlY2lkIG9mIHRoaXMgY2xpZW50ICovCiAJc3RydWN0IGhsaXN0X2hlYWQgbGVjX2FycF9lbXB0eV9vbmVzOwogCQkJCQkJLyogVXNlZCBmb3Igc3RvcmluZyBWQ0MncyB0aGF0IGRvbid0IGhhdmUgYSBNQUMgYWRkcmVzcyBhdHRhY2hlZCB5ZXQgKi8KZGlmZiAtLWdpdCBhL25ldC9hdG0vbXBjLmMgYi9uZXQvYXRtL21wYy5jCmluZGV4IDAzOWQ1Y2MuLmU1YmYxMTQgMTAwNjQ0Ci0tLSBhL25ldC9hdG0vbXBjLmMKKysrIGIvbmV0L2F0bS9tcGMuYwpAQCAtMjg2LDMzICsyODYsMzIgQEAKIHsKIAogCWRwcmludGsoIm1wb2E6ICglcykgc3RhcnRfbXBjOlxuIiwgbXBjLT5kZXYtPm5hbWUpOwotCWlmIChkZXYtPmhhcmRfc3RhcnRfeG1pdCA9PSBOVUxMKSB7Ci0JCXByaW50aygibXBvYTogKCVzKSBzdGFydF9tcGM6IGRldi0+aGFyZF9zdGFydF94bWl0ID09IE5VTEwsIG5vdCBzdGFydGluZ1xuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCXJldHVybjsKKwlpZiAoIWRldi0+bmV0ZGV2X29wcykKKwkJcHJpbnRrKCJtcG9hOiAoJXMpIHN0YXJ0X21wYyAgbm90IHN0YXJ0aW5nXG4iLCBkZXYtPm5hbWUpOworCWVsc2UgeworCQltcGMtPm9sZF9vcHMgPSBkZXYtPm5ldGRldl9vcHM7CisJCW1wYy0+bmV3X29wcyA9ICptcGMtPm9sZF9vcHM7CisJCW1wYy0+bmV3X29wcy5uZG9fc3RhcnRfeG1pdCA9IG1wY19zZW5kX3BhY2tldDsKKwkJZGV2LT5uZXRkZXZfb3BzID0gJm1wYy0+bmV3X29wczsKIAl9Ci0JbXBjLT5vbGRfaGFyZF9zdGFydF94bWl0ID0gZGV2LT5oYXJkX3N0YXJ0X3htaXQ7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBtcGNfc2VuZF9wYWNrZXQ7Ci0KLQlyZXR1cm47CiB9CiAKIHN0YXRpYyB2b2lkIHN0b3BfbXBjKHN0cnVjdCBtcG9hX2NsaWVudCAqbXBjKQogewotCisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG1wYy0+ZGV2OwogCWRwcmludGsoIm1wb2E6ICglcykgc3RvcF9tcGM6IiwgbXBjLT5kZXYtPm5hbWUpOwogCiAJLyogTGV0cyBub3QgbnVsbGlmeSBsZWMgZGV2aWNlJ3MgZGV2LT5oYXJkX3N0YXJ0X3htaXQgKi8KLQlpZiAobXBjLT5kZXYtPmhhcmRfc3RhcnRfeG1pdCAhPSBtcGNfc2VuZF9wYWNrZXQpIHsKKwlpZiAoZGV2LT5uZXRkZXZfb3BzICE9ICZtcGMtPm5ld19vcHMpIHsKIAkJZHByaW50aygiIG1wYyBhbHJlYWR5IHN0b3BwZWQsIG5vdCBmYXRhbFxuIik7CiAJCXJldHVybjsKIAl9CiAJZHByaW50aygiXG4iKTsKLQltcGMtPmRldi0+aGFyZF9zdGFydF94bWl0ID0gbXBjLT5vbGRfaGFyZF9zdGFydF94bWl0OwotCW1wYy0+b2xkX2hhcmRfc3RhcnRfeG1pdCA9IE5VTEw7Ci0JLyogY2xvc2Vfc2hvcnRjdXRzKG1wYyk7ICAgID8/PyBGSVhNRSAqLwogCi0JcmV0dXJuOworCWRldi0+bmV0ZGV2X29wcyA9IG1wYy0+b2xkX29wczsKKwltcGMtPm9sZF9vcHMgPSBOVUxMOworCisJLyogY2xvc2Vfc2hvcnRjdXRzKG1wYyk7ICAgID8/PyBGSVhNRSAqLwogfQogCiBzdGF0aWMgY29uc3QgY2hhciAqbXBvYV9kZXZpY2VfdHlwZV9zdHJpbmcoY2hhciB0eXBlKSBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSk7CkBAIC01MzEsNyArNTMwLDYgQEAKICAqLwogc3RhdGljIGludCBtcGNfc2VuZF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlpbnQgcmV0dmFsOwogCXN0cnVjdCBtcG9hX2NsaWVudCAqbXBjOwogCXN0cnVjdCBldGhoZHIgKmV0aDsKIAlpbnQgaSA9IDA7CkBAIC01NjEsOSArNTU5LDcgQEAKIAl9CiAKICBub25faXA6Ci0JcmV0dmFsID0gbXBjLT5vbGRfaGFyZF9zdGFydF94bWl0KHNrYixkZXYpOwotCi0JcmV0dXJuIHJldHZhbDsKKwlyZXR1cm4gbXBjLT5vbGRfb3BzLT5uZG9fc3RhcnRfeG1pdChza2IsZGV2KTsKIH0KIAogc3RhdGljIGludCBhdG1fbXBvYV92Y2NfYXR0YWNoKHN0cnVjdCBhdG1fdmNjICp2Y2MsIHZvaWQgX191c2VyICphcmcpCmRpZmYgLS1naXQgYS9uZXQvYXRtL21wYy5oIGIvbmV0L2F0bS9tcGMuaAppbmRleCAyNGMzODZjLi4wOTE5YTg4IDEwMDY0NAotLS0gYS9uZXQvYXRtL21wYy5oCisrKyBiL25ldC9hdG0vbXBjLmgKQEAgLTE1LDcgKzE1LDcgQEAKIAlzdHJ1Y3QgbXBvYV9jbGllbnQgKm5leHQ7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsgICAgICAvKiBsZWMgaW4gcXVlc3Rpb24gICAgICAgICAgICAgICAgICAgICAqLwogCWludCBkZXZfbnVtOyAgICAgICAgICAgICAgICAgLyogZS5nLiAyIGZvciBsZWMyICAgICAgICAgICAgICAgICAgICAgKi8KLQlpbnQgKCpvbGRfaGFyZF9zdGFydF94bWl0KShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKwogCXN0cnVjdCBhdG1fdmNjICptcG9hZF92Y2M7ICAgLyogY29udHJvbCBjaGFubmVsIHRvIG1wb2FkICAgICAgICAgICAgKi8KIAl1aW50OF90IG1wc19jdHJsX2FkZHJbQVRNX0VTQV9MRU5dOyAgLyogTVBTIGNvbnRyb2wgQVRNIGFkZHJlc3MgICAgICovCiAJdWludDhfdCBvdXJfY3RybF9hZGRyW0FUTV9FU0FfTEVOXTsgIC8qIE1QQydzIGNvbnRyb2wgQVRNIGFkZHJlc3MgICAqLwpAQCAtMzEsNiArMzEsOSBAQAogCXVpbnQ4X3QgKm1wc19tYWNzOyAgICAgICAgICAgLyogYXJyYXkgb2YgTVBTIE1BQyBhZGRyZXNzZXMsID49MSAgICAgKi8KIAlpbnQgbnVtYmVyX29mX21wc19tYWNzOyAgICAgIC8qIG51bWJlciBvZiB0aGUgYWJvdmUgTUFDIGFkZHJlc3NlcyAgICovCiAJc3RydWN0IG1wY19wYXJhbWV0ZXJzIHBhcmFtZXRlcnM7ICAvKiBwYXJhbWV0ZXJzIGZvciB0aGlzIGNsaWVudCAgICAqLworCisJY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpvbGRfb3BzOworCXN0cnVjdCBuZXRfZGV2aWNlX29wcyBuZXdfb3BzOwogfTsKIAogCmRpZmYgLS1naXQgYS9uZXQvYXgyNS9hZl9heDI1LmMgYi9uZXQvYXgyNS9hZl9heDI1LmMKaW5kZXggMDBkOWU1ZS4uN2RhNWViYiAxMDA2NDQKLS0tIGEvbmV0L2F4MjUvYWZfYXgyNS5jCisrKyBiL25ldC9heDI1L2FmX2F4MjUuYwpAQCAtMTQzNSw2ICsxNDM1LDExIEBACiAJc2l6ZV90IHNpemU7CiAJaW50IGx2LCBlcnIsIGFkZHJfbGVuID0gbXNnLT5tc2dfbmFtZWxlbjsKIAorCS8qIEFYLjI1IGVtcHR5IGRhdGEgZnJhbWUgaGFzIG5vIG1lYW5pbmcgOiBkb24ndCBzZW5kICovCisJaWYgKGxlbiA9PSAwKSB7CisJCXJldHVybiAoMCk7CisJfQorCiAJaWYgKG1zZy0+bXNnX2ZsYWdzICYgfihNU0dfRE9OVFdBSVR8TVNHX0VPUnxNU0dfQ01TR19DT01QQVQpKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtMTUyOSwxMCArMTUzNCw4IEBACiAJCWRwID0gYXgyNS0+ZGlnaXBlYXQ7CiAJfQogCi0JU09DS19ERUJVRyhzaywgIkFYLjI1OiBzZW5kdG86IEFkZHJlc3NlcyBidWlsdC5cbiIpOwotCiAJLyogQnVpbGQgYSBwYWNrZXQgKi8KLQlTT0NLX0RFQlVHKHNrLCAiQVguMjU6IHNlbmR0bzogYnVpbGRpbmcgcGFja2V0LlxuIik7CisJU09DS19ERUJVRyhzaywgIkFYLjI1OiBzZW5kdG86IEFkZHJlc3NlcyBidWlsdC4gQnVpbGRpbmcgcGFja2V0LlxuIik7CiAKIAkvKiBBc3N1bWUgdGhlIHdvcnN0IGNhc2UgKi8KIAlzaXplID0gbGVuICsgYXgyNS0+YXgyNV9kZXYtPmRldi0+aGFyZF9oZWFkZXJfbGVuOwpAQCAtMTYzNiw2ICsxNjM5LDEzIEBACiAJc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTsKIAljb3BpZWQgPSBza2ItPmxlbjsKIAorCS8qIEFYLjI1IGVtcHR5IGRhdGEgZnJhbWUgaGFzIG5vIG1lYW5pbmcgOiBpZ25vcmUgaXQgKi8KKwlpZiAoY29waWVkID09IDApIHsKKwkJZXJyID0gY29waWVkOworCQlza2JfZnJlZV9kYXRhZ3JhbShzaywgc2tiKTsKKwkJZ290byBvdXQ7CisJfQorCiAJaWYgKGNvcGllZCA+IHNpemUpIHsKIAkJY29waWVkID0gc2l6ZTsKIAkJbXNnLT5tc2dfZmxhZ3MgfD0gTVNHX1RSVU5DOwpAQCAtMTk4NSw5ICsxOTk1LDggQEAKIC8qCiAgKglDYWxsZWQgYnkgc29ja2V0LmMgb24ga2VybmVsIHN0YXJ0IHVwCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgYXgyNV9wYWNrZXRfdHlwZSA9IHsKLQkudHlwZQk9CV9fY29uc3RhbnRfaHRvbnMoRVRIX1BfQVgyNSksCi0JLmRldgk9CU5VTEwsCQkJCS8qIEFsbCBkZXZpY2VzICovCitzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGF4MjVfcGFja2V0X3R5cGUgX19yZWFkX21vc3RseSA9IHsKKwkudHlwZQk9CWNwdV90b19iZTE2KEVUSF9QX0FYMjUpLAogCS5mdW5jCT0JYXgyNV9raXNzX3JjdiwKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9heDI1L2F4MjVfaWZhY2UuYyBiL25ldC9heDI1L2F4MjVfaWZhY2UuYwppbmRleCA4NDQzYWY1Li43MTMzOGYxIDEwMDY0NAotLS0gYS9uZXQvYXgyNS9heDI1X2lmYWNlLmMKKysrIGIvbmV0L2F4MjUvYXgyNV9pZmFjZS5jCkBAIC02MSwyNyArNjEsMjQgQEAKIAogCXdyaXRlX2xvY2tfYmgoJnByb3RvY29sX2xpc3RfbG9jayk7CiAJcHJvdG9jb2wgPSBwcm90b2NvbF9saXN0OwotCWlmIChwcm90b2NvbCA9PSBOVUxMKSB7Ci0JCXdyaXRlX3VubG9ja19iaCgmcHJvdG9jb2xfbGlzdF9sb2NrKTsKLQkJcmV0dXJuOwotCX0KKwlpZiAocHJvdG9jb2wgPT0gTlVMTCkKKwkJZ290byBvdXQ7CiAKIAlpZiAocHJvdG9jb2wtPnBpZCA9PSBwaWQpIHsKIAkJcHJvdG9jb2xfbGlzdCA9IHByb3RvY29sLT5uZXh0OwotCQl3cml0ZV91bmxvY2tfYmgoJnByb3RvY29sX2xpc3RfbG9jayk7Ci0JCXJldHVybjsKKwkJZ290byBvdXQ7CiAJfQogCiAJd2hpbGUgKHByb3RvY29sICE9IE5VTEwgJiYgcHJvdG9jb2wtPm5leHQgIT0gTlVMTCkgewogCQlpZiAocHJvdG9jb2wtPm5leHQtPnBpZCA9PSBwaWQpIHsKIAkJCXMgPSBwcm90b2NvbC0+bmV4dDsKIAkJCXByb3RvY29sLT5uZXh0ID0gcHJvdG9jb2wtPm5leHQtPm5leHQ7Ci0JCQl3cml0ZV91bmxvY2tfYmgoJnByb3RvY29sX2xpc3RfbG9jayk7Ci0JCQlyZXR1cm47CisJCQlnb3RvIG91dDsKIAkJfQogCiAJCXByb3RvY29sID0gcHJvdG9jb2wtPm5leHQ7CiAJfQorb3V0OgogCXdyaXRlX3VubG9ja19iaCgmcHJvdG9jb2xfbGlzdF9sb2NrKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9hZl9ibHVldG9vdGguYyBiL25ldC9ibHVldG9vdGgvYWZfYmx1ZXRvb3RoLmMKaW5kZXggNzQ0ZWQzZi4uMDJiOWJhYSAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9hZl9ibHVldG9vdGguYworKysgYi9uZXQvYmx1ZXRvb3RoL2FmX2JsdWV0b290aC5jCkBAIC00MSwxNCArNDEsMTMgQEAKIAogI2luY2x1ZGUgPG5ldC9ibHVldG9vdGgvYmx1ZXRvb3RoLmg+CiAKLSNkZWZpbmUgVkVSU0lPTiAiMi4xNCIKKyNkZWZpbmUgVkVSU0lPTiAiMi4xNSIKIAogLyogQmx1ZXRvb3RoIHNvY2tldHMgKi8KICNkZWZpbmUgQlRfTUFYX1BST1RPCTgKIHN0YXRpYyBzdHJ1Y3QgbmV0X3Byb3RvX2ZhbWlseSAqYnRfcHJvdG9bQlRfTUFYX1BST1RPXTsKIHN0YXRpYyBERUZJTkVfUldMT0NLKGJ0X3Byb3RvX2xvY2spOwogCi0jaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MKIHN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgYnRfbG9ja19rZXlbQlRfTUFYX1BST1RPXTsKIHN0YXRpYyBjb25zdCBjaGFyICpidF9rZXlfc3RyaW5nc1tCVF9NQVhfUFJPVE9dID0gewogCSJza19sb2NrLUFGX0JMVUVUT09USC1CVFBST1RPX0wyQ0FQIiwKQEAgLTg2LDExICs4NSw2IEBACiAJCQlidF9zbG9ja19rZXlfc3RyaW5nc1twcm90b10sICZidF9zbG9ja19rZXlbcHJvdG9dLAogCQkJCWJ0X2tleV9zdHJpbmdzW3Byb3RvXSwgJmJ0X2xvY2tfa2V5W3Byb3RvXSk7CiB9Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIGJ0X3NvY2tfcmVjbGFzc2lmeV9sb2NrKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90bykKLXsKLX0KLSNlbmRpZgogCiBpbnQgYnRfc29ja19yZWdpc3RlcihpbnQgcHJvdG8sIHN0cnVjdCBuZXRfcHJvdG9fZmFtaWx5ICpvcHMpCiB7CkBAIC0yMTcsNyArMjExLDggQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJaWYgKHNrLT5za19zdGF0ZSA9PSBCVF9DT05ORUNURUQgfHwgIW5ld3NvY2spIHsKKwkJaWYgKHNrLT5za19zdGF0ZSA9PSBCVF9DT05ORUNURUQgfHwgIW5ld3NvY2sgfHwKKwkJCQkJCWJ0X3NrKHBhcmVudCktPmRlZmVyX3NldHVwKSB7CiAJCQlidF9hY2NlcHRfdW5saW5rKHNrKTsKIAkJCWlmIChuZXdzb2NrKQogCQkJCXNvY2tfZ3JhZnQoc2ssIG5ld3NvY2spOwpAQCAtMjMyLDcgKzIyNyw3IEBACiBFWFBPUlRfU1lNQk9MKGJ0X2FjY2VwdF9kZXF1ZXVlKTsKIAogaW50IGJ0X3NvY2tfcmVjdm1zZyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBzb2NrZXQgKnNvY2ssCi0Jc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLCBpbnQgZmxhZ3MpCisJCQkJc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLCBpbnQgZmxhZ3MpCiB7CiAJaW50IG5vYmxvY2sgPSBmbGFncyAmIE1TR19ET05UV0FJVDsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKQEAgLTI3Nyw3ICsyNzIsOSBAQAogCiAJbGlzdF9mb3JfZWFjaF9zYWZlKHAsIG4sICZidF9zayhwYXJlbnQpLT5hY2NlcHRfcSkgewogCQlzayA9IChzdHJ1Y3Qgc29jayAqKSBsaXN0X2VudHJ5KHAsIHN0cnVjdCBidF9zb2NrLCBhY2NlcHRfcSk7Ci0JCWlmIChzay0+c2tfc3RhdGUgPT0gQlRfQ09OTkVDVEVEKQorCQlpZiAoc2stPnNrX3N0YXRlID09IEJUX0NPTk5FQ1RFRCB8fAorCQkJCQkoYnRfc2socGFyZW50KS0+ZGVmZXJfc2V0dXAgJiYKKwkJCQkJCXNrLT5za19zdGF0ZSA9PSBCVF9DT05ORUNUMikpCiAJCQlyZXR1cm4gUE9MTElOIHwgUE9MTFJETk9STTsKIAl9CiAKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvY210cC9jb3JlLmMgYi9uZXQvYmx1ZXRvb3RoL2NtdHAvY29yZS5jCmluZGV4IGM5Y2FjNzcuLjAwNzNlYzggMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvY210cC9jb3JlLmMKKysrIGIvbmV0L2JsdWV0b290aC9jbXRwL2NvcmUuYwpAQCAtMTI2LDggKzEyNiw3IEBACiAKIAlzZXNzaW9uLT5yZWFzc2VtYmx5W2lkXSA9IG5za2I7CiAKLQlpZiAoc2tiKQotCQlrZnJlZV9za2Ioc2tiKTsKKwlrZnJlZV9za2Ioc2tiKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgY210cF9yZWN2X2ZyYW1lKHN0cnVjdCBjbXRwX3Nlc3Npb24gKnNlc3Npb24sIHN0cnVjdCBza19idWZmICpza2IpCmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2hjaV9jb25uLmMgYi9uZXQvYmx1ZXRvb3RoL2hjaV9jb25uLmMKaW5kZXggYTRhNzg5Zi4uMTE4MWRiMCAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9oY2lfY29ubi5jCisrKyBiL25ldC9ibHVldG9vdGgvaGNpX2Nvbm4uYwpAQCAtMTIzLDYgKzEyMyw4IEBACiAJY29ubi0+c3RhdGUgPSBCVF9DT05ORUNUOwogCWNvbm4tPm91dCA9IDE7CiAKKwljb25uLT5hdHRlbXB0Kys7CisKIAljcC5oYW5kbGUgICA9IGNwdV90b19sZTE2KGhhbmRsZSk7CiAJY3AucGt0X3R5cGUgPSBjcHVfdG9fbGUxNihjb25uLT5wa3RfdHlwZSk7CiAKQEAgLTEzOSw2ICsxNDEsOCBAQAogCWNvbm4tPnN0YXRlID0gQlRfQ09OTkVDVDsKIAljb25uLT5vdXQgPSAxOwogCisJY29ubi0+YXR0ZW1wdCsrOworCiAJY3AuaGFuZGxlICAgPSBjcHVfdG9fbGUxNihoYW5kbGUpOwogCWNwLnBrdF90eXBlID0gY3B1X3RvX2xlMTYoY29ubi0+cGt0X3R5cGUpOwogCkBAIC0xNTUsNiArMTU5LDcgQEAKIHsKIAlzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4gPSAodm9pZCAqKSBhcmc7CiAJc3RydWN0IGhjaV9kZXYgKmhkZXYgPSBjb25uLT5oZGV2OworCV9fdTggcmVhc29uOwogCiAJQlRfREJHKCJjb25uICVwIHN0YXRlICVkIiwgY29ubiwgY29ubi0+c3RhdGUpOwogCkBAIC0xNzMsNyArMTc4LDggQEAKIAkJYnJlYWs7CiAJY2FzZSBCVF9DT05GSUc6CiAJY2FzZSBCVF9DT05ORUNURUQ6Ci0JCWhjaV9hY2xfZGlzY29ubihjb25uLCAweDEzKTsKKwkJcmVhc29uID0gaGNpX3Byb3RvX2Rpc2Nvbm5faW5kKGNvbm4pOworCQloY2lfYWNsX2Rpc2Nvbm4oY29ubiwgcmVhc29uKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJY29ubi0+c3RhdGUgPSBCVF9DTE9TRUQ7CkBAIC0yMTYsMTIgKzIyMiwxMyBAQAogCQlicmVhazsKIAljYXNlIFNDT19MSU5LOgogCQlpZiAobG1wX2VzY29fY2FwYWJsZShoZGV2KSkKLQkJCWNvbm4tPnBrdF90eXBlID0gaGRldi0+ZXNjb190eXBlICYgU0NPX0VTQ09fTUFTSzsKKwkJCWNvbm4tPnBrdF90eXBlID0gKGhkZXYtPmVzY29fdHlwZSAmIFNDT19FU0NPX01BU0spIHwKKwkJCQkJKGhkZXYtPmVzY29fdHlwZSAmIEVEUl9FU0NPX01BU0spOwogCQllbHNlCiAJCQljb25uLT5wa3RfdHlwZSA9IGhkZXYtPnBrdF90eXBlICYgU0NPX1BUWVBFX01BU0s7CiAJCWJyZWFrOwogCWNhc2UgRVNDT19MSU5LOgotCQljb25uLT5wa3RfdHlwZSA9IGhkZXYtPmVzY29fdHlwZTsKKwkJY29ubi0+cGt0X3R5cGUgPSBoZGV2LT5lc2NvX3R5cGUgJiB+RURSX0VTQ09fTUFTSzsKIAkJYnJlYWs7CiAJfQogCkBAIC0yODAsNiArMjg3LDggQEAKIAogCXNrYl9xdWV1ZV9wdXJnZSgmY29ubi0+ZGF0YV9xKTsKIAorCWhjaV9jb25uX2RlbF9zeXNmcyhjb25uKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0zMjUsNyArMzM0LDcgQEAKIAogLyogQ3JlYXRlIFNDTyBvciBBQ0wgY29ubmVjdGlvbi4KICAqIERldmljZSBfbXVzdF8gYmUgbG9ja2VkICovCi1zdHJ1Y3QgaGNpX2Nvbm4gKmhjaV9jb25uZWN0KHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBpbnQgdHlwZSwgYmRhZGRyX3QgKmRzdCwgX191OCBhdXRoX3R5cGUpCitzdHJ1Y3QgaGNpX2Nvbm4gKmhjaV9jb25uZWN0KHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBpbnQgdHlwZSwgYmRhZGRyX3QgKmRzdCwgX191OCBzZWNfbGV2ZWwsIF9fdTggYXV0aF90eXBlKQogewogCXN0cnVjdCBoY2lfY29ubiAqYWNsOwogCXN0cnVjdCBoY2lfY29ubiAqc2NvOwpAQCAtMzQwLDYgKzM0OSw3IEBACiAJaGNpX2Nvbm5faG9sZChhY2wpOwogCiAJaWYgKGFjbC0+c3RhdGUgPT0gQlRfT1BFTiB8fCBhY2wtPnN0YXRlID09IEJUX0NMT1NFRCkgeworCQlhY2wtPnNlY19sZXZlbCA9IHNlY19sZXZlbDsKIAkJYWNsLT5hdXRoX3R5cGUgPSBhdXRoX3R5cGU7CiAJCWhjaV9hY2xfY29ubmVjdChhY2wpOwogCX0KQEAgLTM4NSw1MSArMzk1LDU5IEBACiBFWFBPUlRfU1lNQk9MKGhjaV9jb25uX2NoZWNrX2xpbmtfbW9kZSk7CiAKIC8qIEF1dGhlbnRpY2F0ZSByZW1vdGUgZGV2aWNlICovCi1pbnQgaGNpX2Nvbm5fYXV0aChzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4pCitzdGF0aWMgaW50IGhjaV9jb25uX2F1dGgoc3RydWN0IGhjaV9jb25uICpjb25uLCBfX3U4IHNlY19sZXZlbCwgX191OCBhdXRoX3R5cGUpCiB7CiAJQlRfREJHKCJjb25uICVwIiwgY29ubik7CiAKLQlpZiAoY29ubi0+c3NwX21vZGUgPiAwICYmIGNvbm4tPmhkZXYtPnNzcF9tb2RlID4gMCkgewotCQlpZiAoIShjb25uLT5hdXRoX3R5cGUgJiAweDAxKSkgewotCQkJY29ubi0+YXV0aF90eXBlIHw9IDB4MDE7Ci0JCQljb25uLT5saW5rX21vZGUgJj0gfkhDSV9MTV9BVVRIOwotCQl9Ci0JfQotCi0JaWYgKGNvbm4tPmxpbmtfbW9kZSAmIEhDSV9MTV9BVVRIKQorCWlmIChzZWNfbGV2ZWwgPiBjb25uLT5zZWNfbGV2ZWwpCisJCWNvbm4tPnNlY19sZXZlbCA9IHNlY19sZXZlbDsKKwllbHNlIGlmIChjb25uLT5saW5rX21vZGUgJiBIQ0lfTE1fQVVUSCkKIAkJcmV0dXJuIDE7CiAKKwljb25uLT5hdXRoX3R5cGUgPSBhdXRoX3R5cGU7CisKIAlpZiAoIXRlc3RfYW5kX3NldF9iaXQoSENJX0NPTk5fQVVUSF9QRU5ELCAmY29ubi0+cGVuZCkpIHsKIAkJc3RydWN0IGhjaV9jcF9hdXRoX3JlcXVlc3RlZCBjcDsKIAkJY3AuaGFuZGxlID0gY3B1X3RvX2xlMTYoY29ubi0+aGFuZGxlKTsKIAkJaGNpX3NlbmRfY21kKGNvbm4tPmhkZXYsIEhDSV9PUF9BVVRIX1JFUVVFU1RFRCwKIAkJCQkJCQlzaXplb2YoY3ApLCAmY3ApOwogCX0KKwogCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTChoY2lfY29ubl9hdXRoKTsKIAotLyogRW5hYmxlIGVuY3J5cHRpb24gKi8KLWludCBoY2lfY29ubl9lbmNyeXB0KHN0cnVjdCBoY2lfY29ubiAqY29ubikKKy8qIEVuYWJsZSBzZWN1cml0eSAqLworaW50IGhjaV9jb25uX3NlY3VyaXR5KHN0cnVjdCBoY2lfY29ubiAqY29ubiwgX191OCBzZWNfbGV2ZWwsIF9fdTggYXV0aF90eXBlKQogewogCUJUX0RCRygiY29ubiAlcCIsIGNvbm4pOwogCisJaWYgKHNlY19sZXZlbCA9PSBCVF9TRUNVUklUWV9TRFApCisJCXJldHVybiAxOworCisJaWYgKHNlY19sZXZlbCA9PSBCVF9TRUNVUklUWV9MT1cpIHsKKwkJaWYgKGNvbm4tPnNzcF9tb2RlID4gMCAmJiBjb25uLT5oZGV2LT5zc3BfbW9kZSA+IDApCisJCQlyZXR1cm4gaGNpX2Nvbm5fYXV0aChjb25uLCBzZWNfbGV2ZWwsIGF1dGhfdHlwZSk7CisJCWVsc2UKKwkJCXJldHVybiAxOworCX0KKwogCWlmIChjb25uLT5saW5rX21vZGUgJiBIQ0lfTE1fRU5DUllQVCkKLQkJcmV0dXJuIGhjaV9jb25uX2F1dGgoY29ubik7CisJCXJldHVybiBoY2lfY29ubl9hdXRoKGNvbm4sIHNlY19sZXZlbCwgYXV0aF90eXBlKTsKIAogCWlmICh0ZXN0X2FuZF9zZXRfYml0KEhDSV9DT05OX0VOQ1JZUFRfUEVORCwgJmNvbm4tPnBlbmQpKQogCQlyZXR1cm4gMDsKIAotCWlmIChoY2lfY29ubl9hdXRoKGNvbm4pKSB7CisJaWYgKGhjaV9jb25uX2F1dGgoY29ubiwgc2VjX2xldmVsLCBhdXRoX3R5cGUpKSB7CiAJCXN0cnVjdCBoY2lfY3Bfc2V0X2Nvbm5fZW5jcnlwdCBjcDsKIAkJY3AuaGFuZGxlICA9IGNwdV90b19sZTE2KGNvbm4tPmhhbmRsZSk7CiAJCWNwLmVuY3J5cHQgPSAxOwogCQloY2lfc2VuZF9jbWQoY29ubi0+aGRldiwgSENJX09QX1NFVF9DT05OX0VOQ1JZUFQsCiAJCQkJCQkJc2l6ZW9mKGNwKSwgJmNwKTsKIAl9CisKIAlyZXR1cm4gMDsKIH0KLUVYUE9SVF9TWU1CT0woaGNpX2Nvbm5fZW5jcnlwdCk7CitFWFBPUlRfU1lNQk9MKGhjaV9jb25uX3NlY3VyaXR5KTsKIAogLyogQ2hhbmdlIGxpbmsga2V5ICovCiBpbnQgaGNpX2Nvbm5fY2hhbmdlX2xpbmtfa2V5KHN0cnVjdCBoY2lfY29ubiAqY29ubikKQEAgLTQ0MiwxMiArNDYwLDEzIEBACiAJCWhjaV9zZW5kX2NtZChjb25uLT5oZGV2LCBIQ0lfT1BfQ0hBTkdFX0NPTk5fTElOS19LRVksCiAJCQkJCQkJc2l6ZW9mKGNwKSwgJmNwKTsKIAl9CisKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0woaGNpX2Nvbm5fY2hhbmdlX2xpbmtfa2V5KTsKIAogLyogU3dpdGNoIHJvbGUgKi8KLWludCBoY2lfY29ubl9zd2l0Y2hfcm9sZShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIHVpbnQ4X3Qgcm9sZSkKK2ludCBoY2lfY29ubl9zd2l0Y2hfcm9sZShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIF9fdTggcm9sZSkKIHsKIAlCVF9EQkcoImNvbm4gJXAiLCBjb25uKTsKIApAQCAtNDYwLDYgKzQ3OSw3IEBACiAJCWNwLnJvbGUgPSByb2xlOwogCQloY2lfc2VuZF9jbWQoY29ubi0+aGRldiwgSENJX09QX1NXSVRDSF9ST0xFLCBzaXplb2YoY3ApLCAmY3ApOwogCX0KKwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChoY2lfY29ubl9zd2l0Y2hfcm9sZSk7CkBAIC01NDIsOSArNTYyLDcgQEAKIAogCQljLT5zdGF0ZSA9IEJUX0NMT1NFRDsKIAotCQloY2lfY29ubl9kZWxfc3lzZnMoYyk7Ci0KLQkJaGNpX3Byb3RvX2Rpc2Nvbm5faW5kKGMsIDB4MTYpOworCQloY2lfcHJvdG9fZGlzY29ubl9jZm0oYywgMHgxNik7CiAJCWhjaV9jb25uX2RlbChjKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmMgYi9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmMKaW5kZXggYmE3OGNjMS4uY2QwNjE1MSAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9oY2lfY29yZS5jCisrKyBiL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuYwpAQCAtMTU2NSw4ICsxNTY1LDcgQEAKIAogCS8qIFNlbmQgcXVldWVkIGNvbW1hbmRzICovCiAJaWYgKGF0b21pY19yZWFkKCZoZGV2LT5jbWRfY250KSAmJiAoc2tiID0gc2tiX2RlcXVldWUoJmhkZXYtPmNtZF9xKSkpIHsKLQkJaWYgKGhkZXYtPnNlbnRfY21kKQotCQkJa2ZyZWVfc2tiKGhkZXYtPnNlbnRfY21kKTsKKwkJa2ZyZWVfc2tiKGhkZXYtPnNlbnRfY21kKTsKIAogCQlpZiAoKGhkZXYtPnNlbnRfY21kID0gc2tiX2Nsb25lKHNrYiwgR0ZQX0FUT01JQykpKSB7CiAJCQlhdG9taWNfZGVjKCZoZGV2LT5jbWRfY250KTsKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMgYi9uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jCmluZGV4IGY5MWJhNjkuLjU1NTM0MjQgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMKKysrIGIvbmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYwpAQCAtNDg0LDYgKzQ4NCwxNSBAQAogCWlmIChoZGV2LT5mZWF0dXJlc1s0XSAmIExNUF9FVjUpCiAJCWhkZXYtPmVzY29fdHlwZSB8PSAoRVNDT19FVjUpOwogCisJaWYgKGhkZXYtPmZlYXR1cmVzWzVdICYgTE1QX0VEUl9FU0NPXzJNKQorCQloZGV2LT5lc2NvX3R5cGUgfD0gKEVTQ09fMkVWMyk7CisKKwlpZiAoaGRldi0+ZmVhdHVyZXNbNV0gJiBMTVBfRURSX0VTQ09fM00pCisJCWhkZXYtPmVzY29fdHlwZSB8PSAoRVNDT18zRVYzKTsKKworCWlmIChoZGV2LT5mZWF0dXJlc1s1XSAmIExNUF9FRFJfM1NfRVNDTykKKwkJaGRldi0+ZXNjb190eXBlIHw9IChFU0NPXzJFVjUgfCBFU0NPXzNFVjUpOworCiAJQlRfREJHKCIlcyBmZWF0dXJlcyAweCUuMnglLjJ4JS4yeCUuMnglLjJ4JS4yeCUuMnglLjJ4IiwgaGRldi0+bmFtZSwKIAkJCQkJaGRldi0+ZmVhdHVyZXNbMF0sIGhkZXYtPmZlYXR1cmVzWzFdLAogCQkJCQloZGV2LT5mZWF0dXJlc1syXSwgaGRldi0+ZmVhdHVyZXNbM10sCkBAIC05MTQsNyArOTIzLDggQEAKIAlpZiAoZXYtPnN0YXR1cykgewogCQloY2lfcHJvdG9fY29ubmVjdF9jZm0oY29ubiwgZXYtPnN0YXR1cyk7CiAJCWhjaV9jb25uX2RlbChjb25uKTsKLQl9CisJfSBlbHNlIGlmIChldi0+bGlua190eXBlICE9IEFDTF9MSU5LKQorCQloY2lfcHJvdG9fY29ubmVjdF9jZm0oY29ubiwgZXYtPnN0YXR1cyk7CiAKIHVubG9jazoKIAloY2lfZGV2X3VubG9jayhoZGV2KTsKQEAgLTEwMDksOSArMTAxOSw3IEBACiAJaWYgKGNvbm4pIHsKIAkJY29ubi0+c3RhdGUgPSBCVF9DTE9TRUQ7CiAKLQkJaGNpX2Nvbm5fZGVsX3N5c2ZzKGNvbm4pOwotCi0JCWhjaV9wcm90b19kaXNjb25uX2luZChjb25uLCBldi0+cmVhc29uKTsKKwkJaGNpX3Byb3RvX2Rpc2Nvbm5fY2ZtKGNvbm4sIGV2LT5yZWFzb24pOwogCQloY2lfY29ubl9kZWwoY29ubik7CiAJfQogCkBAIC0xNjAwLDcgKzE2MDgsOCBAQAogCiAJCWlmIChjb25uLT5zdGF0ZSA9PSBCVF9DT05GSUcpIHsKIAkJCWlmICghZXYtPnN0YXR1cyAmJiBoZGV2LT5zc3BfbW9kZSA+IDAgJiYKLQkJCQkJY29ubi0+c3NwX21vZGUgPiAwICYmIGNvbm4tPm91dCkgeworCQkJCQljb25uLT5zc3BfbW9kZSA+IDAgJiYgY29ubi0+b3V0ICYmCisJCQkJCWNvbm4tPnNlY19sZXZlbCAhPSBCVF9TRUNVUklUWV9TRFApIHsKIAkJCQlzdHJ1Y3QgaGNpX2NwX2F1dGhfcmVxdWVzdGVkIGNwOwogCQkJCWNwLmhhbmRsZSA9IGV2LT5oYW5kbGU7CiAJCQkJaGNpX3NlbmRfY21kKGhkZXYsIEhDSV9PUF9BVVRIX1JFUVVFU1RFRCwKQEAgLTE2MzcsNiArMTY0NiwxMyBAQAogCQljb25uLT50eXBlID0gU0NPX0xJTks7CiAJfQogCisJaWYgKGNvbm4tPm91dCAmJiBldi0+c3RhdHVzID09IDB4MWMgJiYgY29ubi0+YXR0ZW1wdCA8IDIpIHsKKwkJY29ubi0+cGt0X3R5cGUgPSAoaGRldi0+ZXNjb190eXBlICYgU0NPX0VTQ09fTUFTSykgfAorCQkJCQkoaGRldi0+ZXNjb190eXBlICYgRURSX0VTQ09fTUFTSyk7CisJCWhjaV9zZXR1cF9zeW5jKGNvbm4sIGNvbm4tPmxpbmstPmhhbmRsZSk7CisJCWdvdG8gdW5sb2NrOworCX0KKwogCWlmICghZXYtPnN0YXR1cykgewogCQljb25uLT5oYW5kbGUgPSBfX2xlMTZfdG9fY3B1KGV2LT5oYW5kbGUpOwogCQljb25uLT5zdGF0ZSAgPSBCVF9DT05ORUNURUQ7CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jIGIvbmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYwppbmRleCAxYTFmOTE2Li5lZDgyNzk2IDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jCisrKyBiL25ldC9ibHVldG9vdGgvaGNpX3N5c2ZzLmMKQEAgLTE0MCw3ICsxNDAsNyBAQAogCQlkZXYgPSBkZXZpY2VfZmluZF9jaGlsZCgmY29ubi0+ZGV2LCBOVUxMLCBfX21hdGNoX3R0eSk7CiAJCWlmICghZGV2KQogCQkJYnJlYWs7Ci0JCWRldmljZV9tb3ZlKGRldiwgTlVMTCk7CisJCWRldmljZV9tb3ZlKGRldiwgTlVMTCwgRFBNX09SREVSX0RFVl9MQVNUKTsKIAkJcHV0X2RldmljZShkZXYpOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9sMmNhcC5jIGIvbmV0L2JsdWV0b290aC9sMmNhcC5jCmluZGV4IGI5Mzc0OGUuLmNhNGQzYjQgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvbDJjYXAuYworKysgYi9uZXQvYmx1ZXRvb3RoL2wyY2FwLmMKQEAgLTUwLDkgKzUwLDEwIEBACiAjaW5jbHVkZSA8bmV0L2JsdWV0b290aC9oY2lfY29yZS5oPgogI2luY2x1ZGUgPG5ldC9ibHVldG9vdGgvbDJjYXAuaD4KIAotI2RlZmluZSBWRVJTSU9OICIyLjExIgorI2RlZmluZSBWRVJTSU9OICIyLjEzIgogCi1zdGF0aWMgdTMyIGwyY2FwX2ZlYXRfbWFzayA9IDB4MDAwMDsKK3N0YXRpYyB1MzIgbDJjYXBfZmVhdF9tYXNrID0gMHgwMDgwOworc3RhdGljIHU4IGwyY2FwX2ZpeGVkX2NoYW5bOF0gPSB7IDB4MDIsIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIGwyY2FwX3NvY2tfb3BzOwogCkBAIC03Nyw5ICs3OCwxMCBAQAogCiAJYmhfbG9ja19zb2NrKHNrKTsKIAotCWlmIChzay0+c2tfc3RhdGUgPT0gQlRfQ09OTkVDVCAmJgotCQkJKGwyY2FwX3BpKHNrKS0+bGlua19tb2RlICYgKEwyQ0FQX0xNX0FVVEggfAotCQkJCQlMMkNBUF9MTV9FTkNSWVBUIHwgTDJDQVBfTE1fU0VDVVJFKSkpCisJaWYgKHNrLT5za19zdGF0ZSA9PSBCVF9DT05ORUNURUQgfHwgc2stPnNrX3N0YXRlID09IEJUX0NPTkZJRykKKwkJcmVhc29uID0gRUNPTk5SRUZVU0VEOworCWVsc2UgaWYgKHNrLT5za19zdGF0ZSA9PSBCVF9DT05ORUNUICYmCisJCQkJbDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwgIT0gQlRfU0VDVVJJVFlfU0RQKQogCQlyZWFzb24gPSBFQ09OTlJFRlVTRUQ7CiAJZWxzZQogCQlyZWFzb24gPSBFVElNRURPVVQ7CkBAIC0yMDQsNiArMjA2LDggQEAKIAogCUJUX0RCRygiY29ubiAlcCwgcHNtIDB4JTIuMngsIGRjaWQgMHglNC40eCIsIGNvbm4sIGwyY2FwX3BpKHNrKS0+cHNtLCBsMmNhcF9waShzayktPmRjaWQpOwogCisJY29ubi0+ZGlzY19yZWFzb24gPSAweDEzOworCiAJbDJjYXBfcGkoc2spLT5jb25uID0gY29ubjsKIAogCWlmIChzay0+c2tfdHlwZSA9PSBTT0NLX1NFUVBBQ0tFVCkgewpAQCAtMjU5LDE4ICsyNjMsMzUgQEAKIH0KIAogLyogU2VydmljZSBsZXZlbCBzZWN1cml0eSAqLwotc3RhdGljIGlubGluZSBpbnQgbDJjYXBfY2hlY2tfbGlua19tb2RlKHN0cnVjdCBzb2NrICpzaykKK3N0YXRpYyBpbmxpbmUgaW50IGwyY2FwX2NoZWNrX3NlY3VyaXR5KHN0cnVjdCBzb2NrICpzaykKIHsKIAlzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubiA9IGwyY2FwX3BpKHNrKS0+Y29ubjsKKwlfX3U4IGF1dGhfdHlwZTsKIAotCWlmICgobDJjYXBfcGkoc2spLT5saW5rX21vZGUgJiBMMkNBUF9MTV9FTkNSWVBUKSB8fAotCQkJCShsMmNhcF9waShzayktPmxpbmtfbW9kZSAmIEwyQ0FQX0xNX1NFQ1VSRSkpCi0JCXJldHVybiBoY2lfY29ubl9lbmNyeXB0KGNvbm4tPmhjb24pOworCWlmIChsMmNhcF9waShzayktPnBzbSA9PSBjcHVfdG9fbGUxNigweDAwMDEpKSB7CisJCWlmIChsMmNhcF9waShzayktPnNlY19sZXZlbCA9PSBCVF9TRUNVUklUWV9ISUdIKQorCQkJYXV0aF90eXBlID0gSENJX0FUX05PX0JPTkRJTkdfTUlUTTsKKwkJZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgYXV0aF90eXBlID0gSENJX0FUX05PX0JPTkRJTkc7CiAKLQlpZiAobDJjYXBfcGkoc2spLT5saW5rX21vZGUgJiBMMkNBUF9MTV9BVVRIKQotCQlyZXR1cm4gaGNpX2Nvbm5fYXV0aChjb25uLT5oY29uKTsKKwkJaWYgKGwyY2FwX3BpKHNrKS0+c2VjX2xldmVsID09IEJUX1NFQ1VSSVRZX0xPVykKKwkJCWwyY2FwX3BpKHNrKS0+c2VjX2xldmVsID0gQlRfU0VDVVJJVFlfU0RQOworCX0gZWxzZSB7CisJCXN3aXRjaCAobDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwpIHsKKwkJY2FzZSBCVF9TRUNVUklUWV9ISUdIOgorCQkJYXV0aF90eXBlID0gSENJX0FUX0dFTkVSQUxfQk9ORElOR19NSVRNOworCQkJYnJlYWs7CisJCWNhc2UgQlRfU0VDVVJJVFlfTUVESVVNOgorCQkJYXV0aF90eXBlID0gSENJX0FUX0dFTkVSQUxfQk9ORElORzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYXV0aF90eXBlID0gSENJX0FUX05PX0JPTkRJTkc7CisJCQlicmVhazsKKwkJfQorCX0KIAotCXJldHVybiAxOworCXJldHVybiBoY2lfY29ubl9zZWN1cml0eShjb25uLT5oY29uLCBsMmNhcF9waShzayktPnNlY19sZXZlbCwKKwkJCQkJCQkJYXV0aF90eXBlKTsKIH0KIAogc3RhdGljIGlubGluZSB1OCBsMmNhcF9nZXRfaWRlbnQoc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4pCkBAIC0zMTIsNyArMzMzLDEwIEBACiAJc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4gPSBsMmNhcF9waShzayktPmNvbm47CiAKIAlpZiAoY29ubi0+aW5mb19zdGF0ZSAmIEwyQ0FQX0lORk9fRkVBVF9NQVNLX1JFUV9TRU5UKSB7Ci0JCWlmIChsMmNhcF9jaGVja19saW5rX21vZGUoc2spKSB7CisJCWlmICghKGNvbm4tPmluZm9fc3RhdGUgJiBMMkNBUF9JTkZPX0ZFQVRfTUFTS19SRVFfRE9ORSkpCisJCQlyZXR1cm47CisKKwkJaWYgKGwyY2FwX2NoZWNrX3NlY3VyaXR5KHNrKSkgewogCQkJc3RydWN0IGwyY2FwX2Nvbm5fcmVxIHJlcTsKIAkJCXJlcS5zY2lkID0gY3B1X3RvX2xlMTYobDJjYXBfcGkoc2spLT5zY2lkKTsKIAkJCXJlcS5wc20gID0gbDJjYXBfcGkoc2spLT5wc207CkBAIC0zNTYsNyArMzgwLDcgQEAKIAkJfQogCiAJCWlmIChzay0+c2tfc3RhdGUgPT0gQlRfQ09OTkVDVCkgewotCQkJaWYgKGwyY2FwX2NoZWNrX2xpbmtfbW9kZShzaykpIHsKKwkJCWlmIChsMmNhcF9jaGVja19zZWN1cml0eShzaykpIHsKIAkJCQlzdHJ1Y3QgbDJjYXBfY29ubl9yZXEgcmVxOwogCQkJCXJlcS5zY2lkID0gY3B1X3RvX2xlMTYobDJjYXBfcGkoc2spLT5zY2lkKTsKIAkJCQlyZXEucHNtICA9IGwyY2FwX3BpKHNrKS0+cHNtOwpAQCAtMzcxLDEwICszOTUsMTggQEAKIAkJCXJzcC5zY2lkID0gY3B1X3RvX2xlMTYobDJjYXBfcGkoc2spLT5kY2lkKTsKIAkJCXJzcC5kY2lkID0gY3B1X3RvX2xlMTYobDJjYXBfcGkoc2spLT5zY2lkKTsKIAotCQkJaWYgKGwyY2FwX2NoZWNrX2xpbmtfbW9kZShzaykpIHsKLQkJCQlzay0+c2tfc3RhdGUgPSBCVF9DT05GSUc7Ci0JCQkJcnNwLnJlc3VsdCA9IGNwdV90b19sZTE2KEwyQ0FQX0NSX1NVQ0NFU1MpOwotCQkJCXJzcC5zdGF0dXMgPSBjcHVfdG9fbGUxNihMMkNBUF9DU19OT19JTkZPKTsKKwkJCWlmIChsMmNhcF9jaGVja19zZWN1cml0eShzaykpIHsKKwkJCQlpZiAoYnRfc2soc2spLT5kZWZlcl9zZXR1cCkgeworCQkJCQlzdHJ1Y3Qgc29jayAqcGFyZW50ID0gYnRfc2soc2spLT5wYXJlbnQ7CisJCQkJCXJzcC5yZXN1bHQgPSBjcHVfdG9fbGUxNihMMkNBUF9DUl9QRU5EKTsKKwkJCQkJcnNwLnN0YXR1cyA9IGNwdV90b19sZTE2KEwyQ0FQX0NTX0FVVEhPUl9QRU5EKTsKKwkJCQkJcGFyZW50LT5za19kYXRhX3JlYWR5KHBhcmVudCwgMCk7CisKKwkJCQl9IGVsc2UgeworCQkJCQlzay0+c2tfc3RhdGUgPSBCVF9DT05GSUc7CisJCQkJCXJzcC5yZXN1bHQgPSBjcHVfdG9fbGUxNihMMkNBUF9DUl9TVUNDRVNTKTsKKwkJCQkJcnNwLnN0YXR1cyA9IGNwdV90b19sZTE2KEwyQ0FQX0NTX05PX0lORk8pOworCQkJCX0KIAkJCX0gZWxzZSB7CiAJCQkJcnNwLnJlc3VsdCA9IGNwdV90b19sZTE2KEwyQ0FQX0NSX1BFTkQpOwogCQkJCXJzcC5zdGF0dXMgPSBjcHVfdG9fbGUxNihMMkNBUF9DU19BVVRIRU5fUEVORCk7CkBAIC00MjYsNyArNDU4LDcgQEAKIAlyZWFkX2xvY2soJmwtPmxvY2spOwogCiAJZm9yIChzayA9IGwtPmhlYWQ7IHNrOyBzayA9IGwyY2FwX3BpKHNrKS0+bmV4dF9jKSB7Ci0JCWlmIChsMmNhcF9waShzayktPmxpbmtfbW9kZSAmIEwyQ0FQX0xNX1JFTElBQkxFKQorCQlpZiAobDJjYXBfcGkoc2spLT5mb3JjZV9yZWxpYWJsZSkKIAkJCXNrLT5za19lcnIgPSBlcnI7CiAJfQogCkBAIC00MzcsNiArNDY5LDcgQEAKIHsKIAlzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubiA9ICh2b2lkICopIGFyZzsKIAorCWNvbm4tPmluZm9fc3RhdGUgfD0gTDJDQVBfSU5GT19GRUFUX01BU0tfUkVRX0RPTkU7CiAJY29ubi0+aW5mb19pZGVudCA9IDA7CiAKIAlsMmNhcF9jb25uX3N0YXJ0KGNvbm4pOwpAQCAtNDcwLDYgKzUwMyw4IEBACiAJc3Bpbl9sb2NrX2luaXQoJmNvbm4tPmxvY2spOwogCXJ3bG9ja19pbml0KCZjb25uLT5jaGFuX2xpc3QubG9jayk7CiAKKwljb25uLT5kaXNjX3JlYXNvbiA9IDB4MTM7CisKIAlyZXR1cm4gY29ubjsKIH0KIApAQCAtNDgzLDggKzUxOCw3IEBACiAKIAlCVF9EQkcoImhjb24gJXAgY29ubiAlcCwgZXJyICVkIiwgaGNvbiwgY29ubiwgZXJyKTsKIAotCWlmIChjb25uLT5yeF9za2IpCi0JCWtmcmVlX3NrYihjb25uLT5yeF9za2IpOworCWtmcmVlX3NrYihjb25uLT5yeF9za2IpOwogCiAJLyogS2lsbCBjaGFubmVscyAqLwogCXdoaWxlICgoc2sgPSBjb25uLT5jaGFuX2xpc3QuaGVhZCkpIHsKQEAgLTYwOCw3ICs2NDIsNiBAQAogCiAJY2FzZSBCVF9DT05ORUNURUQ6CiAJY2FzZSBCVF9DT05GSUc6Ci0JY2FzZSBCVF9DT05ORUNUMjoKIAkJaWYgKHNrLT5za190eXBlID09IFNPQ0tfU0VRUEFDS0VUKSB7CiAJCQlzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubiA9IGwyY2FwX3BpKHNrKS0+Y29ubjsKIAkJCXN0cnVjdCBsMmNhcF9kaXNjb25uX3JlcSByZXE7CkBAIC02MjQsNiArNjU3LDI3IEBACiAJCQlsMmNhcF9jaGFuX2RlbChzaywgcmVhc29uKTsKIAkJYnJlYWs7CiAKKwljYXNlIEJUX0NPTk5FQ1QyOgorCQlpZiAoc2stPnNrX3R5cGUgPT0gU09DS19TRVFQQUNLRVQpIHsKKwkJCXN0cnVjdCBsMmNhcF9jb25uICpjb25uID0gbDJjYXBfcGkoc2spLT5jb25uOworCQkJc3RydWN0IGwyY2FwX2Nvbm5fcnNwIHJzcDsKKwkJCV9fdTE2IHJlc3VsdDsKKworCQkJaWYgKGJ0X3NrKHNrKS0+ZGVmZXJfc2V0dXApCisJCQkJcmVzdWx0ID0gTDJDQVBfQ1JfU0VDX0JMT0NLOworCQkJZWxzZQorCQkJCXJlc3VsdCA9IEwyQ0FQX0NSX0JBRF9QU007CisKKwkJCXJzcC5zY2lkICAgPSBjcHVfdG9fbGUxNihsMmNhcF9waShzayktPmRjaWQpOworCQkJcnNwLmRjaWQgICA9IGNwdV90b19sZTE2KGwyY2FwX3BpKHNrKS0+c2NpZCk7CisJCQlyc3AucmVzdWx0ID0gY3B1X3RvX2xlMTYocmVzdWx0KTsKKwkJCXJzcC5zdGF0dXMgPSBjcHVfdG9fbGUxNihMMkNBUF9DU19OT19JTkZPKTsKKwkJCWwyY2FwX3NlbmRfY21kKGNvbm4sIGwyY2FwX3BpKHNrKS0+aWRlbnQsCisJCQkJCUwyQ0FQX0NPTk5fUlNQLCBzaXplb2YocnNwKSwgJnJzcCk7CisJCX0gZWxzZQorCQkJbDJjYXBfY2hhbl9kZWwoc2ssIHJlYXNvbik7CisJCWJyZWFrOworCiAJY2FzZSBCVF9DT05ORUNUOgogCWNhc2UgQlRfRElTQ09OTjoKIAkJbDJjYXBfY2hhbl9kZWwoc2ssIHJlYXNvbik7CkBAIC02NTMsMTMgKzcwNywxOSBAQAogCiAJaWYgKHBhcmVudCkgewogCQlzay0+c2tfdHlwZSA9IHBhcmVudC0+c2tfdHlwZTsKKwkJYnRfc2soc2spLT5kZWZlcl9zZXR1cCA9IGJ0X3NrKHBhcmVudCktPmRlZmVyX3NldHVwOworCiAJCXBpLT5pbXR1ID0gbDJjYXBfcGkocGFyZW50KS0+aW10dTsKIAkJcGktPm9tdHUgPSBsMmNhcF9waShwYXJlbnQpLT5vbXR1OwotCQlwaS0+bGlua19tb2RlID0gbDJjYXBfcGkocGFyZW50KS0+bGlua19tb2RlOworCQlwaS0+c2VjX2xldmVsID0gbDJjYXBfcGkocGFyZW50KS0+c2VjX2xldmVsOworCQlwaS0+cm9sZV9zd2l0Y2ggPSBsMmNhcF9waShwYXJlbnQpLT5yb2xlX3N3aXRjaDsKKwkJcGktPmZvcmNlX3JlbGlhYmxlID0gbDJjYXBfcGkocGFyZW50KS0+Zm9yY2VfcmVsaWFibGU7CiAJfSBlbHNlIHsKIAkJcGktPmltdHUgPSBMMkNBUF9ERUZBVUxUX01UVTsKIAkJcGktPm9tdHUgPSAwOwotCQlwaS0+bGlua19tb2RlID0gMDsKKwkJcGktPnNlY19sZXZlbCA9IEJUX1NFQ1VSSVRZX0xPVzsKKwkJcGktPnJvbGVfc3dpdGNoID0gMDsKKwkJcGktPmZvcmNlX3JlbGlhYmxlID0gMDsKIAl9CiAKIAkvKiBEZWZhdWx0IGNvbmZpZyBvcHRpb25zICovCkBAIC03MjMsMTcgKzc4MywyNCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGwyY2FwX3NvY2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIGludCBhZGRyX2xlbikKK3N0YXRpYyBpbnQgbDJjYXBfc29ja19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqYWRkciwgaW50IGFsZW4pCiB7Ci0Jc3RydWN0IHNvY2thZGRyX2wyICpsYSA9IChzdHJ1Y3Qgc29ja2FkZHJfbDIgKikgYWRkcjsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKLQlpbnQgZXJyID0gMDsKKwlzdHJ1Y3Qgc29ja2FkZHJfbDIgbGE7CisJaW50IGxlbiwgZXJyID0gMDsKIAotCUJUX0RCRygic2sgJXAsICVzICVkIiwgc2ssIGJhdG9zdHIoJmxhLT5sMl9iZGFkZHIpLCBsYS0+bDJfcHNtKTsKKwlCVF9EQkcoInNrICVwIiwgc2spOwogCiAJaWYgKCFhZGRyIHx8IGFkZHItPnNhX2ZhbWlseSAhPSBBRl9CTFVFVE9PVEgpCiAJCXJldHVybiAtRUlOVkFMOwogCisJbWVtc2V0KCZsYSwgMCwgc2l6ZW9mKGxhKSk7CisJbGVuID0gbWluX3QodW5zaWduZWQgaW50LCBzaXplb2YobGEpLCBhbGVuKTsKKwltZW1jcHkoJmxhLCBhZGRyLCBsZW4pOworCisJaWYgKGxhLmwyX2NpZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlsb2NrX3NvY2soc2spOwogCiAJaWYgKHNrLT5za19zdGF0ZSAhPSBCVF9PUEVOKSB7CkBAIC03NDEsNyArODA4LDcgQEAKIAkJZ290byBkb25lOwogCX0KIAotCWlmIChsYS0+bDJfcHNtICYmIGJ0b2hzKGxhLT5sMl9wc20pIDwgMHgxMDAxICYmCisJaWYgKGxhLmwyX3BzbSAmJiBidG9ocyhsYS5sMl9wc20pIDwgMHgxMDAxICYmCiAJCQkJIWNhcGFibGUoQ0FQX05FVF9CSU5EX1NFUlZJQ0UpKSB7CiAJCWVyciA9IC1FQUNDRVM7CiAJCWdvdG8gZG9uZTsKQEAgLTc0OSwxNCArODE2LDE3IEBACiAKIAl3cml0ZV9sb2NrX2JoKCZsMmNhcF9za19saXN0LmxvY2spOwogCi0JaWYgKGxhLT5sMl9wc20gJiYgX19sMmNhcF9nZXRfc29ja19ieV9hZGRyKGxhLT5sMl9wc20sICZsYS0+bDJfYmRhZGRyKSkgeworCWlmIChsYS5sMl9wc20gJiYgX19sMmNhcF9nZXRfc29ja19ieV9hZGRyKGxhLmwyX3BzbSwgJmxhLmwyX2JkYWRkcikpIHsKIAkJZXJyID0gLUVBRERSSU5VU0U7CiAJfSBlbHNlIHsKIAkJLyogU2F2ZSBzb3VyY2UgYWRkcmVzcyAqLwotCQliYWNweSgmYnRfc2soc2spLT5zcmMsICZsYS0+bDJfYmRhZGRyKTsKLQkJbDJjYXBfcGkoc2spLT5wc20gICA9IGxhLT5sMl9wc207Ci0JCWwyY2FwX3BpKHNrKS0+c3BvcnQgPSBsYS0+bDJfcHNtOworCQliYWNweSgmYnRfc2soc2spLT5zcmMsICZsYS5sMl9iZGFkZHIpOworCQlsMmNhcF9waShzayktPnBzbSAgID0gbGEubDJfcHNtOworCQlsMmNhcF9waShzayktPnNwb3J0ID0gbGEubDJfcHNtOwogCQlzay0+c2tfc3RhdGUgPSBCVF9CT1VORDsKKworCQlpZiAoYnRvaHMobGEubDJfcHNtKSA9PSAweDAwMDEgfHwgYnRvaHMobGEubDJfcHNtKSA9PSAweDAwMDMpCisJCQlsMmNhcF9waShzayktPnNlY19sZXZlbCA9IEJUX1NFQ1VSSVRZX1NEUDsKIAl9CiAKIAl3cml0ZV91bmxvY2tfYmgoJmwyY2FwX3NrX2xpc3QubG9jayk7CkBAIC03NzYsNyArODQ2LDggQEAKIAlfX3U4IGF1dGhfdHlwZTsKIAlpbnQgZXJyID0gMDsKIAotCUJUX0RCRygiJXMgLT4gJXMgcHNtIDB4JTIuMngiLCBiYXRvc3RyKHNyYyksIGJhdG9zdHIoZHN0KSwgbDJjYXBfcGkoc2spLT5wc20pOworCUJUX0RCRygiJXMgLT4gJXMgcHNtIDB4JTIuMngiLCBiYXRvc3RyKHNyYyksIGJhdG9zdHIoZHN0KSwKKwkJCQkJCQlsMmNhcF9waShzayktPnBzbSk7CiAKIAlpZiAoIShoZGV2ID0gaGNpX2dldF9yb3V0ZShkc3QsIHNyYykpKQogCQlyZXR1cm4gLUVIT1NUVU5SRUFDSDsKQEAgLTc4NSwyMSArODU2LDQyIEBACiAKIAllcnIgPSAtRU5PTUVNOwogCi0JaWYgKGwyY2FwX3BpKHNrKS0+bGlua19tb2RlICYgTDJDQVBfTE1fQVVUSCB8fAotCQkJbDJjYXBfcGkoc2spLT5saW5rX21vZGUgJiBMMkNBUF9MTV9FTkNSWVBUIHx8Ci0JCQkJbDJjYXBfcGkoc2spLT5saW5rX21vZGUgJiBMMkNBUF9MTV9TRUNVUkUpIHsKLQkJaWYgKGwyY2FwX3BpKHNrKS0+cHNtID09IGNwdV90b19sZTE2KDB4MDAwMSkpCisJaWYgKHNrLT5za190eXBlID09IFNPQ0tfUkFXKSB7CisJCXN3aXRjaCAobDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwpIHsKKwkJY2FzZSBCVF9TRUNVUklUWV9ISUdIOgorCQkJYXV0aF90eXBlID0gSENJX0FUX0RFRElDQVRFRF9CT05ESU5HX01JVE07CisJCQlicmVhazsKKwkJY2FzZSBCVF9TRUNVUklUWV9NRURJVU06CisJCQlhdXRoX3R5cGUgPSBIQ0lfQVRfREVESUNBVEVEX0JPTkRJTkc7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWF1dGhfdHlwZSA9IEhDSV9BVF9OT19CT05ESU5HOworCQkJYnJlYWs7CisJCX0KKwl9IGVsc2UgaWYgKGwyY2FwX3BpKHNrKS0+cHNtID09IGNwdV90b19sZTE2KDB4MDAwMSkpIHsKKwkJaWYgKGwyY2FwX3BpKHNrKS0+c2VjX2xldmVsID09IEJUX1NFQ1VSSVRZX0hJR0gpCiAJCQlhdXRoX3R5cGUgPSBIQ0lfQVRfTk9fQk9ORElOR19NSVRNOwogCQllbHNlCi0JCQlhdXRoX3R5cGUgPSBIQ0lfQVRfR0VORVJBTF9CT05ESU5HX01JVE07Ci0JfSBlbHNlIHsKLQkJaWYgKGwyY2FwX3BpKHNrKS0+cHNtID09IGNwdV90b19sZTE2KDB4MDAwMSkpCiAJCQlhdXRoX3R5cGUgPSBIQ0lfQVRfTk9fQk9ORElORzsKLQkJZWxzZQorCisJCWlmIChsMmNhcF9waShzayktPnNlY19sZXZlbCA9PSBCVF9TRUNVUklUWV9MT1cpCisJCQlsMmNhcF9waShzayktPnNlY19sZXZlbCA9IEJUX1NFQ1VSSVRZX1NEUDsKKwl9IGVsc2UgeworCQlzd2l0Y2ggKGwyY2FwX3BpKHNrKS0+c2VjX2xldmVsKSB7CisJCWNhc2UgQlRfU0VDVVJJVFlfSElHSDoKKwkJCWF1dGhfdHlwZSA9IEhDSV9BVF9HRU5FUkFMX0JPTkRJTkdfTUlUTTsKKwkJCWJyZWFrOworCQljYXNlIEJUX1NFQ1VSSVRZX01FRElVTToKIAkJCWF1dGhfdHlwZSA9IEhDSV9BVF9HRU5FUkFMX0JPTkRJTkc7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWF1dGhfdHlwZSA9IEhDSV9BVF9OT19CT05ESU5HOworCQkJYnJlYWs7CisJCX0KIAl9CiAKLQloY29uID0gaGNpX2Nvbm5lY3QoaGRldiwgQUNMX0xJTkssIGRzdCwgYXV0aF90eXBlKTsKKwloY29uID0gaGNpX2Nvbm5lY3QoaGRldiwgQUNMX0xJTkssIGRzdCwKKwkJCQkJbDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwsIGF1dGhfdHlwZSk7CiAJaWYgKCFoY29uKQogCQlnb3RvIGRvbmU7CiAKQEAgLTgzNSwyMCArOTI3LDI1IEBACiAKIHN0YXRpYyBpbnQgbDJjYXBfc29ja19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqYWRkciwgaW50IGFsZW4sIGludCBmbGFncykKIHsKLQlzdHJ1Y3Qgc29ja2FkZHJfbDIgKmxhID0gKHN0cnVjdCBzb2NrYWRkcl9sMiAqKSBhZGRyOwogCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOwotCWludCBlcnIgPSAwOwotCi0JbG9ja19zb2NrKHNrKTsKKwlzdHJ1Y3Qgc29ja2FkZHJfbDIgbGE7CisJaW50IGxlbiwgZXJyID0gMDsKIAogCUJUX0RCRygic2sgJXAiLCBzayk7CiAKLQlpZiAoYWRkci0+c2FfZmFtaWx5ICE9IEFGX0JMVUVUT09USCB8fCBhbGVuIDwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9sMikpIHsKLQkJZXJyID0gLUVJTlZBTDsKLQkJZ290byBkb25lOwotCX0KKwlpZiAoIWFkZHIgfHwgYWRkci0+c2FfZmFtaWx5ICE9IEFGX0JMVUVUT09USCkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoc2stPnNrX3R5cGUgPT0gU09DS19TRVFQQUNLRVQgJiYgIWxhLT5sMl9wc20pIHsKKwltZW1zZXQoJmxhLCAwLCBzaXplb2YobGEpKTsKKwlsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHNpemVvZihsYSksIGFsZW4pOworCW1lbWNweSgmbGEsIGFkZHIsIGxlbik7CisKKwlpZiAobGEubDJfY2lkKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWxvY2tfc29jayhzayk7CisKKwlpZiAoc2stPnNrX3R5cGUgPT0gU09DS19TRVFQQUNLRVQgJiYgIWxhLmwyX3BzbSkgewogCQllcnIgPSAtRUlOVkFMOwogCQlnb3RvIGRvbmU7CiAJfQpAQCAtODc1LDggKzk3Miw4IEBACiAJfQogCiAJLyogU2V0IGRlc3RpbmF0aW9uIGFkZHJlc3MgYW5kIHBzbSAqLwotCWJhY3B5KCZidF9zayhzayktPmRzdCwgJmxhLT5sMl9iZGFkZHIpOwotCWwyY2FwX3BpKHNrKS0+cHNtID0gbGEtPmwyX3BzbTsKKwliYWNweSgmYnRfc2soc2spLT5kc3QsICZsYS5sMl9iZGFkZHIpOworCWwyY2FwX3BpKHNrKS0+cHNtID0gbGEubDJfcHNtOwogCiAJaWYgKChlcnIgPSBsMmNhcF9kb19jb25uZWN0KHNrKSkpCiAJCWdvdG8gZG9uZTsKQEAgLTEwMDAsMTIgKzEwOTcsMTYgQEAKIAlhZGRyLT5zYV9mYW1pbHkgPSBBRl9CTFVFVE9PVEg7CiAJKmxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfbDIpOwogCi0JaWYgKHBlZXIpCisJaWYgKHBlZXIpIHsKKwkJbGEtPmwyX3BzbSA9IGwyY2FwX3BpKHNrKS0+cHNtOwogCQliYWNweSgmbGEtPmwyX2JkYWRkciwgJmJ0X3NrKHNrKS0+ZHN0KTsKLQllbHNlCisJCWxhLT5sMl9jaWQgPSBodG9icyhsMmNhcF9waShzayktPmRjaWQpOworCX0gZWxzZSB7CisJCWxhLT5sMl9wc20gPSBsMmNhcF9waShzayktPnNwb3J0OwogCQliYWNweSgmbGEtPmwyX2JkYWRkciwgJmJ0X3NrKHNrKS0+c3JjKTsKKwkJbGEtPmwyX2NpZCA9IGh0b2JzKGwyY2FwX3BpKHNrKS0+c2NpZCk7CisJfQogCi0JbGEtPmwyX3BzbSA9IGwyY2FwX3BpKHNrKS0+cHNtOwogCXJldHVybiAwOwogfQogCkBAIC0xMTA2LDExICsxMjA3LDM4IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBsMmNhcF9zb2NrX3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IG9wdGxlbikKK3N0YXRpYyBpbnQgbDJjYXBfc29ja19yZWN2bXNnKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CisKKwlsb2NrX3NvY2soc2spOworCisJaWYgKHNrLT5za19zdGF0ZSA9PSBCVF9DT05ORUNUMiAmJiBidF9zayhzayktPmRlZmVyX3NldHVwKSB7CisJCXN0cnVjdCBsMmNhcF9jb25uX3JzcCByc3A7CisKKwkJc2stPnNrX3N0YXRlID0gQlRfQ09ORklHOworCisJCXJzcC5zY2lkICAgPSBjcHVfdG9fbGUxNihsMmNhcF9waShzayktPmRjaWQpOworCQlyc3AuZGNpZCAgID0gY3B1X3RvX2xlMTYobDJjYXBfcGkoc2spLT5zY2lkKTsKKwkJcnNwLnJlc3VsdCA9IGNwdV90b19sZTE2KEwyQ0FQX0NSX1NVQ0NFU1MpOworCQlyc3Auc3RhdHVzID0gY3B1X3RvX2xlMTYoTDJDQVBfQ1NfTk9fSU5GTyk7CisJCWwyY2FwX3NlbmRfY21kKGwyY2FwX3BpKHNrKS0+Y29ubiwgbDJjYXBfcGkoc2spLT5pZGVudCwKKwkJCQkJTDJDQVBfQ09OTl9SU1AsIHNpemVvZihyc3ApLCAmcnNwKTsKKworCQlyZWxlYXNlX3NvY2soc2spOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZWxlYXNlX3NvY2soc2spOworCisJcmV0dXJuIGJ0X3NvY2tfcmVjdm1zZyhpb2NiLCBzb2NrLCBtc2csIGxlbiwgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IGwyY2FwX3NvY2tfc2V0c29ja29wdF9vbGQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBvcHRsZW4pCiB7CiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CiAJc3RydWN0IGwyY2FwX29wdGlvbnMgb3B0czsKLQlpbnQgZXJyID0gMCwgbGVuOworCWludCBsZW4sIGVyciA9IDA7CiAJdTMyIG9wdDsKIAogCUJUX0RCRygic2sgJXAiLCBzayk7CkBAIC0xMTQwLDcgKzEyNjgsMTUgQEAKIAkJCWJyZWFrOwogCQl9CiAKLQkJbDJjYXBfcGkoc2spLT5saW5rX21vZGUgPSBvcHQ7CisJCWlmIChvcHQgJiBMMkNBUF9MTV9BVVRIKQorCQkJbDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwgPSBCVF9TRUNVUklUWV9MT1c7CisJCWlmIChvcHQgJiBMMkNBUF9MTV9FTkNSWVBUKQorCQkJbDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwgPSBCVF9TRUNVUklUWV9NRURJVU07CisJCWlmIChvcHQgJiBMMkNBUF9MTV9TRUNVUkUpCisJCQlsMmNhcF9waShzayktPnNlY19sZXZlbCA9IEJUX1NFQ1VSSVRZX0hJR0g7CisKKwkJbDJjYXBfcGkoc2spLT5yb2xlX3N3aXRjaCAgICA9IChvcHQgJiBMMkNBUF9MTV9NQVNURVIpOworCQlsMmNhcF9waShzayktPmZvcmNlX3JlbGlhYmxlID0gKG9wdCAmIEwyQ0FQX0xNX1JFTElBQkxFKTsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgpAQCAtMTE1MiwxMiArMTI4OCw3NyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbDJjYXBfc29ja19nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbikKK3N0YXRpYyBpbnQgbDJjYXBfc29ja19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBvcHRsZW4pCit7CisJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CisJc3RydWN0IGJ0X3NlY3VyaXR5IHNlYzsKKwlpbnQgbGVuLCBlcnIgPSAwOworCXUzMiBvcHQ7CisKKwlCVF9EQkcoInNrICVwIiwgc2spOworCisJaWYgKGxldmVsID09IFNPTF9MMkNBUCkKKwkJcmV0dXJuIGwyY2FwX3NvY2tfc2V0c29ja29wdF9vbGQoc29jaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pOworCisJaWYgKGxldmVsICE9IFNPTF9CTFVFVE9PVEgpCisJCXJldHVybiAtRU5PUFJPVE9PUFQ7CisKKwlsb2NrX3NvY2soc2spOworCisJc3dpdGNoIChvcHRuYW1lKSB7CisJY2FzZSBCVF9TRUNVUklUWToKKwkJaWYgKHNrLT5za190eXBlICE9IFNPQ0tfU0VRUEFDS0VUICYmIHNrLT5za190eXBlICE9IFNPQ0tfUkFXKSB7CisJCQllcnIgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKworCQlzZWMubGV2ZWwgPSBCVF9TRUNVUklUWV9MT1c7CisKKwkJbGVuID0gbWluX3QodW5zaWduZWQgaW50LCBzaXplb2Yoc2VjKSwgb3B0bGVuKTsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKChjaGFyICopICZzZWMsIG9wdHZhbCwgbGVuKSkgeworCQkJZXJyID0gLUVGQVVMVDsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKHNlYy5sZXZlbCA8IEJUX1NFQ1VSSVRZX0xPVyB8fAorCQkJCQlzZWMubGV2ZWwgPiBCVF9TRUNVUklUWV9ISUdIKSB7CisJCQllcnIgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKworCQlsMmNhcF9waShzayktPnNlY19sZXZlbCA9IHNlYy5sZXZlbDsKKwkJYnJlYWs7CisKKwljYXNlIEJUX0RFRkVSX1NFVFVQOgorCQlpZiAoc2stPnNrX3N0YXRlICE9IEJUX0JPVU5EICYmIHNrLT5za19zdGF0ZSAhPSBCVF9MSVNURU4pIHsKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChnZXRfdXNlcihvcHQsICh1MzIgX191c2VyICopIG9wdHZhbCkpIHsKKwkJCWVyciA9IC1FRkFVTFQ7CisJCQlicmVhazsKKwkJfQorCisJCWJ0X3NrKHNrKS0+ZGVmZXJfc2V0dXAgPSBvcHQ7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZXJyID0gLUVOT1BST1RPT1BUOworCQlicmVhazsKKwl9CisKKwlyZWxlYXNlX3NvY2soc2spOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgbDJjYXBfc29ja19nZXRzb2Nrb3B0X29sZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgb3B0bmFtZSwgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKQogewogCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOwogCXN0cnVjdCBsMmNhcF9vcHRpb25zIG9wdHM7CiAJc3RydWN0IGwyY2FwX2Nvbm5pbmZvIGNpbmZvOwogCWludCBsZW4sIGVyciA9IDA7CisJdTMyIG9wdDsKIAogCUJUX0RCRygic2sgJXAiLCBzayk7CiAKQEAgLTExODAsMTIgKzEzODEsMzYgQEAKIAkJYnJlYWs7CiAKIAljYXNlIEwyQ0FQX0xNOgotCQlpZiAocHV0X3VzZXIobDJjYXBfcGkoc2spLT5saW5rX21vZGUsICh1MzIgX191c2VyICopIG9wdHZhbCkpCisJCXN3aXRjaCAobDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwpIHsKKwkJY2FzZSBCVF9TRUNVUklUWV9MT1c6CisJCQlvcHQgPSBMMkNBUF9MTV9BVVRIOworCQkJYnJlYWs7CisJCWNhc2UgQlRfU0VDVVJJVFlfTUVESVVNOgorCQkJb3B0ID0gTDJDQVBfTE1fQVVUSCB8IEwyQ0FQX0xNX0VOQ1JZUFQ7CisJCQlicmVhazsKKwkJY2FzZSBCVF9TRUNVUklUWV9ISUdIOgorCQkJb3B0ID0gTDJDQVBfTE1fQVVUSCB8IEwyQ0FQX0xNX0VOQ1JZUFQgfAorCQkJCQkJCUwyQ0FQX0xNX1NFQ1VSRTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJb3B0ID0gMDsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKGwyY2FwX3BpKHNrKS0+cm9sZV9zd2l0Y2gpCisJCQlvcHQgfD0gTDJDQVBfTE1fTUFTVEVSOworCisJCWlmIChsMmNhcF9waShzayktPmZvcmNlX3JlbGlhYmxlKQorCQkJb3B0IHw9IEwyQ0FQX0xNX1JFTElBQkxFOworCisJCWlmIChwdXRfdXNlcihvcHQsICh1MzIgX191c2VyICopIG9wdHZhbCkpCiAJCQllcnIgPSAtRUZBVUxUOwogCQlicmVhazsKIAogCWNhc2UgTDJDQVBfQ09OTklORk86Ci0JCWlmIChzay0+c2tfc3RhdGUgIT0gQlRfQ09OTkVDVEVEKSB7CisJCWlmIChzay0+c2tfc3RhdGUgIT0gQlRfQ09OTkVDVEVEICYmCisJCQkJCSEoc2stPnNrX3N0YXRlID09IEJUX0NPTk5FQ1QyICYmCisJCQkJCQlidF9zayhzayktPmRlZmVyX3NldHVwKSkgewogCQkJZXJyID0gLUVOT1RDT05OOwogCQkJYnJlYWs7CiAJCX0KQEAgLTEyMDgsNiArMTQzMyw2MCBAQAogCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyBpbnQgbDJjYXBfc29ja19nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbikKK3sKKwlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKKwlzdHJ1Y3QgYnRfc2VjdXJpdHkgc2VjOworCWludCBsZW4sIGVyciA9IDA7CisKKwlCVF9EQkcoInNrICVwIiwgc2spOworCisJaWYgKGxldmVsID09IFNPTF9MMkNBUCkKKwkJcmV0dXJuIGwyY2FwX3NvY2tfZ2V0c29ja29wdF9vbGQoc29jaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pOworCisJaWYgKGxldmVsICE9IFNPTF9CTFVFVE9PVEgpCisJCXJldHVybiAtRU5PUFJPVE9PUFQ7CisKKwlpZiAoZ2V0X3VzZXIobGVuLCBvcHRsZW4pKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWxvY2tfc29jayhzayk7CisKKwlzd2l0Y2ggKG9wdG5hbWUpIHsKKwljYXNlIEJUX1NFQ1VSSVRZOgorCQlpZiAoc2stPnNrX3R5cGUgIT0gU09DS19TRVFQQUNLRVQgJiYgc2stPnNrX3R5cGUgIT0gU09DS19SQVcpIHsKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCisJCXNlYy5sZXZlbCA9IGwyY2FwX3BpKHNrKS0+c2VjX2xldmVsOworCisJCWxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgbGVuLCBzaXplb2Yoc2VjKSk7CisJCWlmIChjb3B5X3RvX3VzZXIob3B0dmFsLCAoY2hhciAqKSAmc2VjLCBsZW4pKQorCQkJZXJyID0gLUVGQVVMVDsKKworCQlicmVhazsKKworCWNhc2UgQlRfREVGRVJfU0VUVVA6CisJCWlmIChzay0+c2tfc3RhdGUgIT0gQlRfQk9VTkQgJiYgc2stPnNrX3N0YXRlICE9IEJUX0xJU1RFTikgeworCQkJZXJyID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKHB1dF91c2VyKGJ0X3NrKHNrKS0+ZGVmZXJfc2V0dXAsICh1MzIgX191c2VyICopIG9wdHZhbCkpCisJCQllcnIgPSAtRUZBVUxUOworCisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZXJyID0gLUVOT1BST1RPT1BUOworCQlicmVhazsKKwl9CisKKwlyZWxlYXNlX3NvY2soc2spOworCXJldHVybiBlcnI7Cit9CisKIHN0YXRpYyBpbnQgbDJjYXBfc29ja19zaHV0ZG93bihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgaG93KQogewogCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOwpAQCAtMTI3MCwxMSArMTU0OSw2IEBACiAJCSAqLwogCQlwYXJlbnQtPnNrX2RhdGFfcmVhZHkocGFyZW50LCAwKTsKIAl9Ci0KLQlpZiAobDJjYXBfcGkoc2spLT5saW5rX21vZGUgJiBMMkNBUF9MTV9TRUNVUkUpIHsKLQkJc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4gPSBsMmNhcF9waShzayktPmNvbm47Ci0JCWhjaV9jb25uX2NoYW5nZV9saW5rX2tleShjb25uLT5oY29uKTsKLQl9CiB9CiAKIC8qIENvcHkgZnJhbWUgdG8gYWxsIHJhdyBzb2NrZXRzIG9uIHRoYXQgY29ubmVjdGlvbiAqLwpAQCAtMTU0OSw4ICsxODIzLDExIEBACiAKIAlpZiAoKGNvbm4tPmluZm9fc3RhdGUgJiBMMkNBUF9JTkZPX0ZFQVRfTUFTS19SRVFfU0VOVCkgJiYKIAkJCQkJY21kLT5pZGVudCA9PSBjb25uLT5pbmZvX2lkZW50KSB7Ci0JCWNvbm4tPmluZm9faWRlbnQgPSAwOwogCQlkZWxfdGltZXIoJmNvbm4tPmluZm9fdGltZXIpOworCisJCWNvbm4tPmluZm9fc3RhdGUgfD0gTDJDQVBfSU5GT19GRUFUX01BU0tfUkVRX0RPTkU7CisJCWNvbm4tPmluZm9faWRlbnQgPSAwOworCiAJCWwyY2FwX2Nvbm5fc3RhcnQoY29ubik7CiAJfQogCkBAIC0xNTgwLDYgKzE4NTcsNyBAQAogCS8qIENoZWNrIGlmIHRoZSBBQ0wgaXMgc2VjdXJlIGVub3VnaCAoaWYgbm90IFNEUCkgKi8KIAlpZiAocHNtICE9IGNwdV90b19sZTE2KDB4MDAwMSkgJiYKIAkJCQkhaGNpX2Nvbm5fY2hlY2tfbGlua19tb2RlKGNvbm4tPmhjb24pKSB7CisJCWNvbm4tPmRpc2NfcmVhc29uID0gMHgwNTsKIAkJcmVzdWx0ID0gTDJDQVBfQ1JfU0VDX0JMT0NLOwogCQlnb3RvIHJlc3BvbnNlOwogCX0KQEAgLTE2MjEsMTEgKzE4OTksMTggQEAKIAogCWwyY2FwX3BpKHNrKS0+aWRlbnQgPSBjbWQtPmlkZW50OwogCi0JaWYgKGNvbm4tPmluZm9fc3RhdGUgJiBMMkNBUF9JTkZPX0ZFQVRfTUFTS19SRVFfU0VOVCkgewotCQlpZiAobDJjYXBfY2hlY2tfbGlua19tb2RlKHNrKSkgewotCQkJc2stPnNrX3N0YXRlID0gQlRfQ09ORklHOwotCQkJcmVzdWx0ID0gTDJDQVBfQ1JfU1VDQ0VTUzsKLQkJCXN0YXR1cyA9IEwyQ0FQX0NTX05PX0lORk87CisJaWYgKGNvbm4tPmluZm9fc3RhdGUgJiBMMkNBUF9JTkZPX0ZFQVRfTUFTS19SRVFfRE9ORSkgeworCQlpZiAobDJjYXBfY2hlY2tfc2VjdXJpdHkoc2spKSB7CisJCQlpZiAoYnRfc2soc2spLT5kZWZlcl9zZXR1cCkgeworCQkJCXNrLT5za19zdGF0ZSA9IEJUX0NPTk5FQ1QyOworCQkJCXJlc3VsdCA9IEwyQ0FQX0NSX1BFTkQ7CisJCQkJc3RhdHVzID0gTDJDQVBfQ1NfQVVUSE9SX1BFTkQ7CisJCQkJcGFyZW50LT5za19kYXRhX3JlYWR5KHBhcmVudCwgMCk7CisJCQl9IGVsc2UgeworCQkJCXNrLT5za19zdGF0ZSA9IEJUX0NPTkZJRzsKKwkJCQlyZXN1bHQgPSBMMkNBUF9DUl9TVUNDRVNTOworCQkJCXN0YXR1cyA9IEwyQ0FQX0NTX05PX0lORk87CisJCQl9CiAJCX0gZWxzZSB7CiAJCQlzay0+c2tfc3RhdGUgPSBCVF9DT05ORUNUMjsKIAkJCXJlc3VsdCA9IEwyQ0FQX0NSX1BFTkQ7CkBAIC0xNjk1LDExICsxOTgwLDE0IEBACiAJCWwyY2FwX3BpKHNrKS0+ZGNpZCA9IGRjaWQ7CiAJCWwyY2FwX3BpKHNrKS0+Y29uZl9zdGF0ZSB8PSBMMkNBUF9DT05GX1JFUV9TRU5UOwogCisJCWwyY2FwX3BpKHNrKS0+Y29uZl9zdGF0ZSAmPSB+TDJDQVBfQ09ORl9DT05ORUNUX1BFTkQ7CisKIAkJbDJjYXBfc2VuZF9jbWQoY29ubiwgbDJjYXBfZ2V0X2lkZW50KGNvbm4pLCBMMkNBUF9DT05GX1JFUSwKIAkJCQkJbDJjYXBfYnVpbGRfY29uZl9yZXEoc2ssIHJlcSksIHJlcSk7CiAJCWJyZWFrOwogCiAJY2FzZSBMMkNBUF9DUl9QRU5EOgorCQlsMmNhcF9waShzayktPmNvbmZfc3RhdGUgfD0gTDJDQVBfQ09ORl9DT05ORUNUX1BFTkQ7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKQEAgLTE5MDgsNiArMjE5NiwxNCBAQAogCQlwdXRfdW5hbGlnbmVkKGNwdV90b19sZTMyKGwyY2FwX2ZlYXRfbWFzayksIChfX2xlMzIgKikgcnNwLT5kYXRhKTsKIAkJbDJjYXBfc2VuZF9jbWQoY29ubiwgY21kLT5pZGVudCwKIAkJCQkJTDJDQVBfSU5GT19SU1AsIHNpemVvZihidWYpLCBidWYpOworCX0gZWxzZSBpZiAodHlwZSA9PSBMMkNBUF9JVF9GSVhFRF9DSEFOKSB7CisJCXU4IGJ1ZlsxMl07CisJCXN0cnVjdCBsMmNhcF9pbmZvX3JzcCAqcnNwID0gKHN0cnVjdCBsMmNhcF9pbmZvX3JzcCAqKSBidWY7CisJCXJzcC0+dHlwZSAgID0gY3B1X3RvX2xlMTYoTDJDQVBfSVRfRklYRURfQ0hBTik7CisJCXJzcC0+cmVzdWx0ID0gY3B1X3RvX2xlMTYoTDJDQVBfSVJfU1VDQ0VTUyk7CisJCW1lbWNweShidWYgKyA0LCBsMmNhcF9maXhlZF9jaGFuLCA4KTsKKwkJbDJjYXBfc2VuZF9jbWQoY29ubiwgY21kLT5pZGVudCwKKwkJCQkJTDJDQVBfSU5GT19SU1AsIHNpemVvZihidWYpLCBidWYpOwogCX0gZWxzZSB7CiAJCXN0cnVjdCBsMmNhcF9pbmZvX3JzcCByc3A7CiAJCXJzcC50eXBlICAgPSBjcHVfdG9fbGUxNih0eXBlKTsKQEAgLTE5MjksMTQgKzIyMjUsMzEgQEAKIAogCUJUX0RCRygidHlwZSAweCU0LjR4IHJlc3VsdCAweCUyLjJ4IiwgdHlwZSwgcmVzdWx0KTsKIAotCWNvbm4tPmluZm9faWRlbnQgPSAwOwotCiAJZGVsX3RpbWVyKCZjb25uLT5pbmZvX3RpbWVyKTsKIAotCWlmICh0eXBlID09IEwyQ0FQX0lUX0ZFQVRfTUFTSykKKwlpZiAodHlwZSA9PSBMMkNBUF9JVF9GRUFUX01BU0spIHsKIAkJY29ubi0+ZmVhdF9tYXNrID0gZ2V0X3VuYWxpZ25lZF9sZTMyKHJzcC0+ZGF0YSk7CiAKLQlsMmNhcF9jb25uX3N0YXJ0KGNvbm4pOworCQlpZiAoY29ubi0+ZmVhdF9tYXNrICYgMHgwMDgwKSB7CisJCQlzdHJ1Y3QgbDJjYXBfaW5mb19yZXEgcmVxOworCQkJcmVxLnR5cGUgPSBjcHVfdG9fbGUxNihMMkNBUF9JVF9GSVhFRF9DSEFOKTsKKworCQkJY29ubi0+aW5mb19pZGVudCA9IGwyY2FwX2dldF9pZGVudChjb25uKTsKKworCQkJbDJjYXBfc2VuZF9jbWQoY29ubiwgY29ubi0+aW5mb19pZGVudCwKKwkJCQkJTDJDQVBfSU5GT19SRVEsIHNpemVvZihyZXEpLCAmcmVxKTsKKwkJfSBlbHNlIHsKKwkJCWNvbm4tPmluZm9fc3RhdGUgfD0gTDJDQVBfSU5GT19GRUFUX01BU0tfUkVRX0RPTkU7CisJCQljb25uLT5pbmZvX2lkZW50ID0gMDsKKworCQkJbDJjYXBfY29ubl9zdGFydChjb25uKTsKKwkJfQorCX0gZWxzZSBpZiAodHlwZSA9PSBMMkNBUF9JVF9GSVhFRF9DSEFOKSB7CisJCWNvbm4tPmluZm9fc3RhdGUgfD0gTDJDQVBfSU5GT19GRUFUX01BU0tfUkVRX0RPTkU7CisJCWNvbm4tPmluZm9faWRlbnQgPSAwOworCisJCWwyY2FwX2Nvbm5fc3RhcnQoY29ubik7CisJfQogCiAJcmV0dXJuIDA7CiB9CkBAIC0yMTQzLDEwICsyNDU2LDE1IEBACiAJCQljb250aW51ZTsKIAogCQlpZiAoIWJhY21wKCZidF9zayhzayktPnNyYywgJmhkZXYtPmJkYWRkcikpIHsKLQkJCWxtMSB8PSAoSENJX0xNX0FDQ0VQVCB8IGwyY2FwX3BpKHNrKS0+bGlua19tb2RlKTsKKwkJCWxtMSB8PSBIQ0lfTE1fQUNDRVBUOworCQkJaWYgKGwyY2FwX3BpKHNrKS0+cm9sZV9zd2l0Y2gpCisJCQkJbG0xIHw9IEhDSV9MTV9NQVNURVI7CiAJCQlleGFjdCsrOwotCQl9IGVsc2UgaWYgKCFiYWNtcCgmYnRfc2soc2spLT5zcmMsIEJEQUREUl9BTlkpKQotCQkJbG0yIHw9IChIQ0lfTE1fQUNDRVBUIHwgbDJjYXBfcGkoc2spLT5saW5rX21vZGUpOworCQl9IGVsc2UgaWYgKCFiYWNtcCgmYnRfc2soc2spLT5zcmMsIEJEQUREUl9BTlkpKSB7CisJCQlsbTIgfD0gSENJX0xNX0FDQ0VQVDsKKwkJCWlmIChsMmNhcF9waShzayktPnJvbGVfc3dpdGNoKQorCQkJCWxtMiB8PSBIQ0lfTE1fTUFTVEVSOworCQl9CiAJfQogCXJlYWRfdW5sb2NrKCZsMmNhcF9za19saXN0LmxvY2spOwogCkBAIC0yMTcyLDcgKzI0OTAsMTkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBsMmNhcF9kaXNjb25uX2luZChzdHJ1Y3QgaGNpX2Nvbm4gKmhjb24sIHU4IHJlYXNvbikKK3N0YXRpYyBpbnQgbDJjYXBfZGlzY29ubl9pbmQoc3RydWN0IGhjaV9jb25uICpoY29uKQoreworCXN0cnVjdCBsMmNhcF9jb25uICpjb25uID0gaGNvbi0+bDJjYXBfZGF0YTsKKworCUJUX0RCRygiaGNvbiAlcCIsIGhjb24pOworCisJaWYgKGhjb24tPnR5cGUgIT0gQUNMX0xJTksgfHwgIWNvbm4pCisJCXJldHVybiAweDEzOworCisJcmV0dXJuIGNvbm4tPmRpc2NfcmVhc29uOworfQorCitzdGF0aWMgaW50IGwyY2FwX2Rpc2Nvbm5fY2ZtKHN0cnVjdCBoY2lfY29ubiAqaGNvbiwgdTggcmVhc29uKQogewogCUJUX0RCRygiaGNvbiAlcCByZWFzb24gJWQiLCBoY29uLCByZWFzb24pOwogCkBAIC0yMTg0LDcgKzI1MTQsMjQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBsMmNhcF9hdXRoX2NmbShzdHJ1Y3QgaGNpX2Nvbm4gKmhjb24sIHU4IHN0YXR1cykKK3N0YXRpYyBpbmxpbmUgdm9pZCBsMmNhcF9jaGVja19lbmNyeXB0aW9uKHN0cnVjdCBzb2NrICpzaywgdTggZW5jcnlwdCkKK3sKKwlpZiAoc2stPnNrX3R5cGUgIT0gU09DS19TRVFQQUNLRVQpCisJCXJldHVybjsKKworCWlmIChlbmNyeXB0ID09IDB4MDApIHsKKwkJaWYgKGwyY2FwX3BpKHNrKS0+c2VjX2xldmVsID09IEJUX1NFQ1VSSVRZX01FRElVTSkgeworCQkJbDJjYXBfc29ja19jbGVhcl90aW1lcihzayk7CisJCQlsMmNhcF9zb2NrX3NldF90aW1lcihzaywgSFogKiA1KTsKKwkJfSBlbHNlIGlmIChsMmNhcF9waShzayktPnNlY19sZXZlbCA9PSBCVF9TRUNVUklUWV9ISUdIKQorCQkJX19sMmNhcF9zb2NrX2Nsb3NlKHNrLCBFQ09OTlJFRlVTRUQpOworCX0gZWxzZSB7CisJCWlmIChsMmNhcF9waShzayktPnNlY19sZXZlbCA9PSBCVF9TRUNVUklUWV9NRURJVU0pCisJCQlsMmNhcF9zb2NrX2NsZWFyX3RpbWVyKHNrKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbDJjYXBfc2VjdXJpdHlfY2ZtKHN0cnVjdCBoY2lfY29ubiAqaGNvbiwgdTggc3RhdHVzLCB1OCBlbmNyeXB0KQogewogCXN0cnVjdCBsMmNhcF9jaGFuX2xpc3QgKmw7CiAJc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4gPSBoY29uLT5sMmNhcF9kYXRhOwpAQCAtMjIwMCw4NSArMjU0NywxNiBAQAogCXJlYWRfbG9jaygmbC0+bG9jayk7CiAKIAlmb3IgKHNrID0gbC0+aGVhZDsgc2s7IHNrID0gbDJjYXBfcGkoc2spLT5uZXh0X2MpIHsKLQkJc3RydWN0IGwyY2FwX3BpbmZvICpwaSA9IGwyY2FwX3BpKHNrKTsKLQogCQliaF9sb2NrX3NvY2soc2spOwogCi0JCWlmICgocGktPmxpbmtfbW9kZSAmIChMMkNBUF9MTV9FTkNSWVBUIHwgTDJDQVBfTE1fU0VDVVJFKSkgJiYKLQkJCQkJIShoY29uLT5saW5rX21vZGUgJiBIQ0lfTE1fRU5DUllQVCkgJiYKLQkJCQkJCQkJIXN0YXR1cykgeworCQlpZiAobDJjYXBfcGkoc2spLT5jb25mX3N0YXRlICYgTDJDQVBfQ09ORl9DT05ORUNUX1BFTkQpIHsKIAkJCWJoX3VubG9ja19zb2NrKHNrKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJaWYgKHNrLT5za19zdGF0ZSA9PSBCVF9DT05ORUNUKSB7Ci0JCQlpZiAoIXN0YXR1cykgewotCQkJCXN0cnVjdCBsMmNhcF9jb25uX3JlcSByZXE7Ci0JCQkJcmVxLnNjaWQgPSBjcHVfdG9fbGUxNihsMmNhcF9waShzayktPnNjaWQpOwotCQkJCXJlcS5wc20gID0gbDJjYXBfcGkoc2spLT5wc207Ci0KLQkJCQlsMmNhcF9waShzayktPmlkZW50ID0gbDJjYXBfZ2V0X2lkZW50KGNvbm4pOwotCi0JCQkJbDJjYXBfc2VuZF9jbWQoY29ubiwgbDJjYXBfcGkoc2spLT5pZGVudCwKLQkJCQkJTDJDQVBfQ09OTl9SRVEsIHNpemVvZihyZXEpLCAmcmVxKTsKLQkJCX0gZWxzZSB7Ci0JCQkJbDJjYXBfc29ja19jbGVhcl90aW1lcihzayk7Ci0JCQkJbDJjYXBfc29ja19zZXRfdGltZXIoc2ssIEhaIC8gMTApOwotCQkJfQotCQl9IGVsc2UgaWYgKHNrLT5za19zdGF0ZSA9PSBCVF9DT05ORUNUMikgewotCQkJc3RydWN0IGwyY2FwX2Nvbm5fcnNwIHJzcDsKLQkJCV9fdTE2IHJlc3VsdDsKLQotCQkJaWYgKCFzdGF0dXMpIHsKLQkJCQlzay0+c2tfc3RhdGUgPSBCVF9DT05GSUc7Ci0JCQkJcmVzdWx0ID0gTDJDQVBfQ1JfU1VDQ0VTUzsKLQkJCX0gZWxzZSB7Ci0JCQkJc2stPnNrX3N0YXRlID0gQlRfRElTQ09OTjsKLQkJCQlsMmNhcF9zb2NrX3NldF90aW1lcihzaywgSFogLyAxMCk7Ci0JCQkJcmVzdWx0ID0gTDJDQVBfQ1JfU0VDX0JMT0NLOwotCQkJfQotCi0JCQlyc3Auc2NpZCAgID0gY3B1X3RvX2xlMTYobDJjYXBfcGkoc2spLT5kY2lkKTsKLQkJCXJzcC5kY2lkICAgPSBjcHVfdG9fbGUxNihsMmNhcF9waShzayktPnNjaWQpOwotCQkJcnNwLnJlc3VsdCA9IGNwdV90b19sZTE2KHJlc3VsdCk7Ci0JCQlyc3Auc3RhdHVzID0gY3B1X3RvX2xlMTYoTDJDQVBfQ1NfTk9fSU5GTyk7Ci0JCQlsMmNhcF9zZW5kX2NtZChjb25uLCBsMmNhcF9waShzayktPmlkZW50LAotCQkJCQlMMkNBUF9DT05OX1JTUCwgc2l6ZW9mKHJzcCksICZyc3ApOwotCQl9Ci0KLQkJYmhfdW5sb2NrX3NvY2soc2spOwotCX0KLQotCXJlYWRfdW5sb2NrKCZsLT5sb2NrKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGwyY2FwX2VuY3J5cHRfY2ZtKHN0cnVjdCBoY2lfY29ubiAqaGNvbiwgdTggc3RhdHVzLCB1OCBlbmNyeXB0KQotewotCXN0cnVjdCBsMmNhcF9jaGFuX2xpc3QgKmw7Ci0Jc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4gPSBoY29uLT5sMmNhcF9kYXRhOwotCXN0cnVjdCBzb2NrICpzazsKLQotCWlmICghY29ubikKLQkJcmV0dXJuIDA7Ci0KLQlsID0gJmNvbm4tPmNoYW5fbGlzdDsKLQotCUJUX0RCRygiY29ubiAlcCIsIGNvbm4pOwotCi0JcmVhZF9sb2NrKCZsLT5sb2NrKTsKLQotCWZvciAoc2sgPSBsLT5oZWFkOyBzazsgc2sgPSBsMmNhcF9waShzayktPm5leHRfYykgewotCQlzdHJ1Y3QgbDJjYXBfcGluZm8gKnBpID0gbDJjYXBfcGkoc2spOwotCi0JCWJoX2xvY2tfc29jayhzayk7Ci0KLQkJaWYgKChwaS0+bGlua19tb2RlICYgKEwyQ0FQX0xNX0VOQ1JZUFQgfCBMMkNBUF9MTV9TRUNVUkUpKSAmJgotCQkJCQkoc2stPnNrX3N0YXRlID09IEJUX0NPTk5FQ1RFRCB8fAotCQkJCQkJc2stPnNrX3N0YXRlID09IEJUX0NPTkZJRykgJiYKLQkJCQkJCSFzdGF0dXMgJiYgZW5jcnlwdCA9PSAweDAwKSB7Ci0JCQlfX2wyY2FwX3NvY2tfY2xvc2Uoc2ssIEVDT05OUkVGVVNFRCk7CisJCWlmICghc3RhdHVzICYmIChzay0+c2tfc3RhdGUgPT0gQlRfQ09OTkVDVEVEIHx8CisJCQkJCQlzay0+c2tfc3RhdGUgPT0gQlRfQ09ORklHKSkgeworCQkJbDJjYXBfY2hlY2tfZW5jcnlwdGlvbihzaywgZW5jcnlwdCk7CiAJCQliaF91bmxvY2tfc29jayhzayk7CiAJCQljb250aW51ZTsKIAkJfQpAQCAtMjM3Niw3ICsyNjU0LDcgQEAKIAkJCWdvdG8gZHJvcDsKIAogCQlza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhKHNrYiwgc2tiX3B1dChjb25uLT5yeF9za2IsIHNrYi0+bGVuKSwKLQkJCSAgICAgIHNrYi0+bGVuKTsKKwkJCQkJCQkJc2tiLT5sZW4pOwogCQljb25uLT5yeF9sZW4gPSBsZW4gLSBza2ItPmxlbjsKIAl9IGVsc2UgewogCQlCVF9EQkcoIkNvbnQ6IGZyYWcgbGVuICVkIChleHBlY3RpbmcgJWQpIiwgc2tiLT5sZW4sIGNvbm4tPnJ4X2xlbik7CkBAIC0yMzk4LDcgKzI2NzYsNyBAQAogCQl9CiAKIAkJc2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YShza2IsIHNrYl9wdXQoY29ubi0+cnhfc2tiLCBza2ItPmxlbiksCi0JCQkgICAgICBza2ItPmxlbik7CisJCQkJCQkJCXNrYi0+bGVuKTsKIAkJY29ubi0+cnhfbGVuIC09IHNrYi0+bGVuOwogCiAJCWlmICghY29ubi0+cnhfbGVuKSB7CkBAIC0yNDI0LDEwICsyNzAyLDEwIEBACiAJc2tfZm9yX2VhY2goc2ssIG5vZGUsICZsMmNhcF9za19saXN0LmhlYWQpIHsKIAkJc3RydWN0IGwyY2FwX3BpbmZvICpwaSA9IGwyY2FwX3BpKHNrKTsKIAotCQlzdHIgKz0gc3ByaW50ZihzdHIsICIlcyAlcyAlZCAlZCAweCU0LjR4IDB4JTQuNHggJWQgJWQgMHgleFxuIiwKKwkJc3RyICs9IHNwcmludGYoc3RyLCAiJXMgJXMgJWQgJWQgMHglNC40eCAweCU0LjR4ICVkICVkICVkXG4iLAogCQkJCWJhdG9zdHIoJmJ0X3NrKHNrKS0+c3JjKSwgYmF0b3N0cigmYnRfc2soc2spLT5kc3QpLAogCQkJCXNrLT5za19zdGF0ZSwgYnRvaHMocGktPnBzbSksIHBpLT5zY2lkLCBwaS0+ZGNpZCwKLQkJCQlwaS0+aW10dSwgcGktPm9tdHUsIHBpLT5saW5rX21vZGUpOworCQkJCXBpLT5pbXR1LCBwaS0+b210dSwgcGktPnNlY19sZXZlbCk7CiAJfQogCiAJcmVhZF91bmxvY2tfYmgoJmwyY2FwX3NrX2xpc3QubG9jayk7CkBAIC0yNDQ3LDcgKzI3MjUsNyBAQAogCS5hY2NlcHQJCT0gbDJjYXBfc29ja19hY2NlcHQsCiAJLmdldG5hbWUJPSBsMmNhcF9zb2NrX2dldG5hbWUsCiAJLnNlbmRtc2cJPSBsMmNhcF9zb2NrX3NlbmRtc2csCi0JLnJlY3Ztc2cJPSBidF9zb2NrX3JlY3Ztc2csCisJLnJlY3Ztc2cJPSBsMmNhcF9zb2NrX3JlY3Ztc2csCiAJLnBvbGwJCT0gYnRfc29ja19wb2xsLAogCS5pb2N0bAkJPSBidF9zb2NrX2lvY3RsLAogCS5tbWFwCQk9IHNvY2tfbm9fbW1hcCwKQEAgLTI0NjksOCArMjc0Nyw4IEBACiAJLmNvbm5lY3RfaW5kCT0gbDJjYXBfY29ubmVjdF9pbmQsCiAJLmNvbm5lY3RfY2ZtCT0gbDJjYXBfY29ubmVjdF9jZm0sCiAJLmRpc2Nvbm5faW5kCT0gbDJjYXBfZGlzY29ubl9pbmQsCi0JLmF1dGhfY2ZtCT0gbDJjYXBfYXV0aF9jZm0sCi0JLmVuY3J5cHRfY2ZtCT0gbDJjYXBfZW5jcnlwdF9jZm0sCisJLmRpc2Nvbm5fY2ZtCT0gbDJjYXBfZGlzY29ubl9jZm0sCisJLnNlY3VyaXR5X2NmbQk9IGwyY2FwX3NlY3VyaXR5X2NmbSwKIAkucmVjdl9hY2xkYXRhCT0gbDJjYXBfcmVjdl9hY2xkYXRhCiB9OwogCmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL3JmY29tbS9jb3JlLmMgYi9uZXQvYmx1ZXRvb3RoL3JmY29tbS9jb3JlLmMKaW5kZXggYWNkODRmZC4uMWQwZmIwZiAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9yZmNvbW0vY29yZS5jCisrKyBiL25ldC9ibHVldG9vdGgvcmZjb21tL2NvcmUuYwpAQCAtNDYsNyArNDYsNyBAQAogI2luY2x1ZGUgPG5ldC9ibHVldG9vdGgvbDJjYXAuaD4KICNpbmNsdWRlIDxuZXQvYmx1ZXRvb3RoL3JmY29tbS5oPgogCi0jZGVmaW5lIFZFUlNJT04gIjEuMTAiCisjZGVmaW5lIFZFUlNJT04gIjEuMTEiCiAKIHN0YXRpYyBpbnQgZGlzYWJsZV9jZmMgPSAwOwogc3RhdGljIGludCBjaGFubmVsX210dSA9IC0xOwpAQCAtMjIzLDE5ICsyMjMsMjUgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW5saW5lIGludCByZmNvbW1fY2hlY2tfbGlua19tb2RlKHN0cnVjdCByZmNvbW1fZGxjICpkKQorc3RhdGljIGlubGluZSBpbnQgcmZjb21tX2NoZWNrX3NlY3VyaXR5KHN0cnVjdCByZmNvbW1fZGxjICpkKQogewogCXN0cnVjdCBzb2NrICpzayA9IGQtPnNlc3Npb24tPnNvY2stPnNrOworCV9fdTggYXV0aF90eXBlOwogCi0JaWYgKGQtPmxpbmtfbW9kZSAmIChSRkNPTU1fTE1fRU5DUllQVCB8IFJGQ09NTV9MTV9TRUNVUkUpKSB7Ci0JCWlmICghaGNpX2Nvbm5fZW5jcnlwdChsMmNhcF9waShzayktPmNvbm4tPmhjb24pKQotCQkJcmV0dXJuIDE7Ci0JfSBlbHNlIGlmIChkLT5saW5rX21vZGUgJiBSRkNPTU1fTE1fQVVUSCkgewotCQlpZiAoIWhjaV9jb25uX2F1dGgobDJjYXBfcGkoc2spLT5jb25uLT5oY29uKSkKLQkJCXJldHVybiAxOworCXN3aXRjaCAoZC0+c2VjX2xldmVsKSB7CisJY2FzZSBCVF9TRUNVUklUWV9ISUdIOgorCQlhdXRoX3R5cGUgPSBIQ0lfQVRfR0VORVJBTF9CT05ESU5HX01JVE07CisJCWJyZWFrOworCWNhc2UgQlRfU0VDVVJJVFlfTUVESVVNOgorCQlhdXRoX3R5cGUgPSBIQ0lfQVRfR0VORVJBTF9CT05ESU5HOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlhdXRoX3R5cGUgPSBIQ0lfQVRfTk9fQk9ORElORzsKKwkJYnJlYWs7CiAJfQogCi0JcmV0dXJuIDA7CisJcmV0dXJuIGhjaV9jb25uX3NlY3VyaXR5KGwyY2FwX3BpKHNrKS0+Y29ubi0+aGNvbiwgZC0+c2VjX2xldmVsLAorCQkJCQkJCQlhdXRoX3R5cGUpOwogfQogCiAvKiAtLS0tIFJGQ09NTSBETENzIC0tLS0gKi8KQEAgLTM4OCwxMCArMzk0LDEwIEBACiAJZC0+Y2ZjID0gKHMtPmNmYyA9PSBSRkNPTU1fQ0ZDX1VOS05PV04pID8gMCA6IHMtPmNmYzsKIAogCWlmIChzLT5zdGF0ZSA9PSBCVF9DT05ORUNURUQpIHsKLQkJaWYgKHJmY29tbV9jaGVja19saW5rX21vZGUoZCkpCi0JCQlzZXRfYml0KFJGQ09NTV9BVVRIX1BFTkRJTkcsICZkLT5mbGFncyk7Ci0JCWVsc2UKKwkJaWYgKHJmY29tbV9jaGVja19zZWN1cml0eShkKSkKIAkJCXJmY29tbV9zZW5kX3BuKHMsIDEsIGQpOworCQllbHNlCisJCQlzZXRfYml0KFJGQ09NTV9BVVRIX1BFTkRJTkcsICZkLT5mbGFncyk7CiAJfQogCiAJcmZjb21tX2RsY19zZXRfdGltZXIoZCwgUkZDT01NX0NPTk5fVElNRU9VVCk7CkBAIC00MjEsOSArNDI3LDE2IEBACiAJCQlkLCBkLT5zdGF0ZSwgZC0+ZGxjaSwgZXJyLCBzKTsKIAogCXN3aXRjaCAoZC0+c3RhdGUpIHsKLQljYXNlIEJUX0NPTk5FQ1RFRDoKLQljYXNlIEJUX0NPTkZJRzoKIAljYXNlIEJUX0NPTk5FQ1Q6CisJY2FzZSBCVF9DT05GSUc6CisJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUkZDT01NX0RFRkVSX1NFVFVQLCAmZC0+ZmxhZ3MpKSB7CisJCQlzZXRfYml0KFJGQ09NTV9BVVRIX1JFSkVDVCwgJmQtPmZsYWdzKTsKKwkJCXJmY29tbV9zY2hlZHVsZShSRkNPTU1fU0NIRURfQVVUSCk7CisJCQlicmVhazsKKwkJfQorCQkvKiBGYWxsIHRocm91Z2ggKi8KKworCWNhc2UgQlRfQ09OTkVDVEVEOgogCQlkLT5zdGF0ZSA9IEJUX0RJU0NPTk47CiAJCWlmIChza2JfcXVldWVfZW1wdHkoJmQtPnR4X3F1ZXVlKSkgewogCQkJcmZjb21tX3NlbmRfZGlzYyhzLCBkLT5kbGNpKTsKQEAgLTQzNCw2ICs0NDcsMTUgQEAKIAkJfQogCQlicmVhazsKIAorCWNhc2UgQlRfT1BFTjoKKwljYXNlIEJUX0NPTk5FQ1QyOgorCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFJGQ09NTV9ERUZFUl9TRVRVUCwgJmQtPmZsYWdzKSkgeworCQkJc2V0X2JpdChSRkNPTU1fQVVUSF9SRUpFQ1QsICZkLT5mbGFncyk7CisJCQlyZmNvbW1fc2NoZWR1bGUoUkZDT01NX1NDSEVEX0FVVEgpOworCQkJYnJlYWs7CisJCX0KKwkJLyogRmFsbCB0aHJvdWdoICovCisKIAlkZWZhdWx0OgogCQlyZmNvbW1fZGxjX2NsZWFyX3RpbWVyKGQpOwogCkBAIC02MzYsNiArNjU4LDcgQEAKIAliYWNweSgmYWRkci5sMl9iZGFkZHIsIHNyYyk7CiAJYWRkci5sMl9mYW1pbHkgPSBBRl9CTFVFVE9PVEg7CiAJYWRkci5sMl9wc20gICAgPSAwOworCWFkZHIubDJfY2lkICAgID0gMDsKIAkqZXJyID0ga2VybmVsX2JpbmQoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSAmYWRkciwgc2l6ZW9mKGFkZHIpKTsKIAlpZiAoKmVyciA8IDApCiAJCWdvdG8gZmFpbGVkOwpAQCAtNjU3LDYgKzY4MCw3IEBACiAJYmFjcHkoJmFkZHIubDJfYmRhZGRyLCBkc3QpOwogCWFkZHIubDJfZmFtaWx5ID0gQUZfQkxVRVRPT1RIOwogCWFkZHIubDJfcHNtICAgID0gaHRvYnMoUkZDT01NX1BTTSk7CisJYWRkci5sMl9jaWQgICAgPSAwOwogCSplcnIgPSBrZXJuZWxfY29ubmVjdChzb2NrLCAoc3RydWN0IHNvY2thZGRyICopICZhZGRyLCBzaXplb2YoYWRkciksIE9fTk9OQkxPQ0spOwogCWlmICgqZXJyID09IDAgfHwgKmVyciA9PSAtRUlOUFJPR1JFU1MpCiAJCXJldHVybiBzOwpAQCAtMTE2Miw3ICsxMTg2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgcmZjb21tX2RsY19hY2NlcHQoc3RydWN0IHJmY29tbV9kbGMgKmQpCit2b2lkIHJmY29tbV9kbGNfYWNjZXB0KHN0cnVjdCByZmNvbW1fZGxjICpkKQogewogCXN0cnVjdCBzb2NrICpzayA9IGQtPnNlc3Npb24tPnNvY2stPnNrOwogCkBAIC0xMTc1LDEyICsxMTk5LDMxIEBACiAJZC0+c3RhdGVfY2hhbmdlKGQsIDApOwogCXJmY29tbV9kbGNfdW5sb2NrKGQpOwogCi0JaWYgKGQtPmxpbmtfbW9kZSAmIFJGQ09NTV9MTV9NQVNURVIpCisJaWYgKGQtPnJvbGVfc3dpdGNoKQogCQloY2lfY29ubl9zd2l0Y2hfcm9sZShsMmNhcF9waShzayktPmNvbm4tPmhjb24sIDB4MDApOwogCiAJcmZjb21tX3NlbmRfbXNjKGQtPnNlc3Npb24sIDEsIGQtPmRsY2ksIGQtPnYyNF9zaWcpOwogfQogCitzdGF0aWMgdm9pZCByZmNvbW1fY2hlY2tfYWNjZXB0KHN0cnVjdCByZmNvbW1fZGxjICpkKQoreworCWlmIChyZmNvbW1fY2hlY2tfc2VjdXJpdHkoZCkpIHsKKwkJaWYgKGQtPmRlZmVyX3NldHVwKSB7CisJCQlzZXRfYml0KFJGQ09NTV9ERUZFUl9TRVRVUCwgJmQtPmZsYWdzKTsKKwkJCXJmY29tbV9kbGNfc2V0X3RpbWVyKGQsIFJGQ09NTV9BVVRIX1RJTUVPVVQpOworCisJCQlyZmNvbW1fZGxjX2xvY2soZCk7CisJCQlkLT5zdGF0ZSA9IEJUX0NPTk5FQ1QyOworCQkJZC0+c3RhdGVfY2hhbmdlKGQsIDApOworCQkJcmZjb21tX2RsY191bmxvY2soZCk7CisJCX0gZWxzZQorCQkJcmZjb21tX2RsY19hY2NlcHQoZCk7CisJfSBlbHNlIHsKKwkJc2V0X2JpdChSRkNPTU1fQVVUSF9QRU5ESU5HLCAmZC0+ZmxhZ3MpOworCQlyZmNvbW1fZGxjX3NldF90aW1lcihkLCBSRkNPTU1fQVVUSF9USU1FT1VUKTsKKwl9Cit9CisKIHN0YXRpYyBpbnQgcmZjb21tX3JlY3Zfc2FibShzdHJ1Y3QgcmZjb21tX3Nlc3Npb24gKnMsIHU4IGRsY2kpCiB7CiAJc3RydWN0IHJmY29tbV9kbGMgKmQ7CkBAIC0xMjAzLDExICsxMjQ2LDcgQEAKIAlpZiAoZCkgewogCQlpZiAoZC0+c3RhdGUgPT0gQlRfT1BFTikgewogCQkJLyogRExDIHdhcyBwcmV2aW91c2x5IG9wZW5lZCBieSBQTiByZXF1ZXN0ICovCi0JCQlpZiAocmZjb21tX2NoZWNrX2xpbmtfbW9kZShkKSkgewotCQkJCXNldF9iaXQoUkZDT01NX0FVVEhfUEVORElORywgJmQtPmZsYWdzKTsKLQkJCQlyZmNvbW1fZGxjX3NldF90aW1lcihkLCBSRkNPTU1fQVVUSF9USU1FT1VUKTsKLQkJCX0gZWxzZQotCQkJCXJmY29tbV9kbGNfYWNjZXB0KGQpOworCQkJcmZjb21tX2NoZWNrX2FjY2VwdChkKTsKIAkJfQogCQlyZXR1cm4gMDsKIAl9CkBAIC0xMjE5LDExICsxMjU4LDcgQEAKIAkJZC0+YWRkciA9IF9fYWRkcihzLT5pbml0aWF0b3IsIGRsY2kpOwogCQlyZmNvbW1fZGxjX2xpbmsocywgZCk7CiAKLQkJaWYgKHJmY29tbV9jaGVja19saW5rX21vZGUoZCkpIHsKLQkJCXNldF9iaXQoUkZDT01NX0FVVEhfUEVORElORywgJmQtPmZsYWdzKTsKLQkJCXJmY29tbV9kbGNfc2V0X3RpbWVyKGQsIFJGQ09NTV9BVVRIX1RJTUVPVVQpOwotCQl9IGVsc2UKLQkJCXJmY29tbV9kbGNfYWNjZXB0KGQpOworCQlyZmNvbW1fY2hlY2tfYWNjZXB0KGQpOwogCX0gZWxzZSB7CiAJCXJmY29tbV9zZW5kX2RtKHMsIGRsY2kpOwogCX0KQEAgLTE2MzcsMTEgKzE2NzIsMTIgQEAKIAkJZCA9IGxpc3RfZW50cnkocCwgc3RydWN0IHJmY29tbV9kbGMsIGxpc3QpOwogCQlpZiAoZC0+c3RhdGUgPT0gQlRfQ09ORklHKSB7CiAJCQlkLT5tdHUgPSBzLT5tdHU7Ci0JCQlpZiAocmZjb21tX2NoZWNrX2xpbmtfbW9kZShkKSkgeworCQkJaWYgKHJmY29tbV9jaGVja19zZWN1cml0eShkKSkgeworCQkJCXJmY29tbV9zZW5kX3BuKHMsIDEsIGQpOworCQkJfSBlbHNlIHsKIAkJCQlzZXRfYml0KFJGQ09NTV9BVVRIX1BFTkRJTkcsICZkLT5mbGFncyk7CiAJCQkJcmZjb21tX2RsY19zZXRfdGltZXIoZCwgUkZDT01NX0FVVEhfVElNRU9VVCk7Ci0JCQl9IGVsc2UKLQkJCQlyZmNvbW1fc2VuZF9wbihzLCAxLCBkKTsKKwkJCX0KIAkJfQogCX0KIH0KQEAgLTE3MTcsMTEgKzE3NTMsMTcgQEAKIAkJCWlmIChkLT5vdXQpIHsKIAkJCQlyZmNvbW1fc2VuZF9wbihzLCAxLCBkKTsKIAkJCQlyZmNvbW1fZGxjX3NldF90aW1lcihkLCBSRkNPTU1fQ09OTl9USU1FT1VUKTsKLQkJCX0gZWxzZQotCQkJCXJmY29tbV9kbGNfYWNjZXB0KGQpOwotCQkJaWYgKGQtPmxpbmtfbW9kZSAmIFJGQ09NTV9MTV9TRUNVUkUpIHsKLQkJCQlzdHJ1Y3Qgc29jayAqc2sgPSBzLT5zb2NrLT5zazsKLQkJCQloY2lfY29ubl9jaGFuZ2VfbGlua19rZXkobDJjYXBfcGkoc2spLT5jb25uLT5oY29uKTsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKGQtPmRlZmVyX3NldHVwKSB7CisJCQkJCXNldF9iaXQoUkZDT01NX0RFRkVSX1NFVFVQLCAmZC0+ZmxhZ3MpOworCQkJCQlyZmNvbW1fZGxjX3NldF90aW1lcihkLCBSRkNPTU1fQVVUSF9USU1FT1VUKTsKKworCQkJCQlyZmNvbW1fZGxjX2xvY2soZCk7CisJCQkJCWQtPnN0YXRlID0gQlRfQ09OTkVDVDI7CisJCQkJCWQtPnN0YXRlX2NoYW5nZShkLCAwKTsKKwkJCQkJcmZjb21tX2RsY191bmxvY2soZCk7CisJCQkJfSBlbHNlCisJCQkJCXJmY29tbV9kbGNfYWNjZXB0KGQpOwogCQkJfQogCQkJY29udGludWU7CiAJCX0gZWxzZSBpZiAodGVzdF9hbmRfY2xlYXJfYml0KFJGQ09NTV9BVVRIX1JFSkVDVCwgJmQtPmZsYWdzKSkgewpAQCAtMTczNCw2ICsxNzc2LDkgQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAKKwkJaWYgKHRlc3RfYml0KFJGQ09NTV9TRUNfUEVORElORywgJmQtPmZsYWdzKSkKKwkJCWNvbnRpbnVlOworCiAJCWlmICh0ZXN0X2JpdChSRkNPTU1fVFhfVEhST1RUTEVELCAmcy0+ZmxhZ3MpKQogCQkJY29udGludWU7CiAKQEAgLTE4NzYsNiArMTkyMSw3IEBACiAJYmFjcHkoJmFkZHIubDJfYmRhZGRyLCBiYSk7CiAJYWRkci5sMl9mYW1pbHkgPSBBRl9CTFVFVE9PVEg7CiAJYWRkci5sMl9wc20gICAgPSBodG9icyhSRkNPTU1fUFNNKTsKKwlhZGRyLmwyX2NpZCAgICA9IDA7CiAJZXJyID0ga2VybmVsX2JpbmQoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSAmYWRkciwgc2l6ZW9mKGFkZHIpKTsKIAlpZiAoZXJyIDwgMCkgewogCQlCVF9FUlIoIkJpbmQgZmFpbGVkICVkIiwgZXJyKTsKQEAgLTE5NDcsNDIgKzE5OTMsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCByZmNvbW1fYXV0aF9jZm0oc3RydWN0IGhjaV9jb25uICpjb25uLCB1OCBzdGF0dXMpCi17Ci0Jc3RydWN0IHJmY29tbV9zZXNzaW9uICpzOwotCXN0cnVjdCByZmNvbW1fZGxjICpkOwotCXN0cnVjdCBsaXN0X2hlYWQgKnAsICpuOwotCi0JQlRfREJHKCJjb25uICVwIHN0YXR1cyAweCUwMngiLCBjb25uLCBzdGF0dXMpOwotCi0JcyA9IHJmY29tbV9zZXNzaW9uX2dldCgmY29ubi0+aGRldi0+YmRhZGRyLCAmY29ubi0+ZHN0KTsKLQlpZiAoIXMpCi0JCXJldHVybjsKLQotCXJmY29tbV9zZXNzaW9uX2hvbGQocyk7Ci0KLQlsaXN0X2Zvcl9lYWNoX3NhZmUocCwgbiwgJnMtPmRsY3MpIHsKLQkJZCA9IGxpc3RfZW50cnkocCwgc3RydWN0IHJmY29tbV9kbGMsIGxpc3QpOwotCi0JCWlmICgoZC0+bGlua19tb2RlICYgKFJGQ09NTV9MTV9FTkNSWVBUIHwgUkZDT01NX0xNX1NFQ1VSRSkpICYmCi0JCQkJIShjb25uLT5saW5rX21vZGUgJiBIQ0lfTE1fRU5DUllQVCkgJiYgIXN0YXR1cykKLQkJCWNvbnRpbnVlOwotCi0JCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KFJGQ09NTV9BVVRIX1BFTkRJTkcsICZkLT5mbGFncykpCi0JCQljb250aW51ZTsKLQotCQlpZiAoIXN0YXR1cykKLQkJCXNldF9iaXQoUkZDT01NX0FVVEhfQUNDRVBULCAmZC0+ZmxhZ3MpOwotCQllbHNlCi0JCQlzZXRfYml0KFJGQ09NTV9BVVRIX1JFSkVDVCwgJmQtPmZsYWdzKTsKLQl9Ci0KLQlyZmNvbW1fc2Vzc2lvbl9wdXQocyk7Ci0KLQlyZmNvbW1fc2NoZWR1bGUoUkZDT01NX1NDSEVEX0FVVEgpOwotfQotCi1zdGF0aWMgdm9pZCByZmNvbW1fZW5jcnlwdF9jZm0oc3RydWN0IGhjaV9jb25uICpjb25uLCB1OCBzdGF0dXMsIHU4IGVuY3J5cHQpCitzdGF0aWMgdm9pZCByZmNvbW1fc2VjdXJpdHlfY2ZtKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgdTggc3RhdHVzLCB1OCBlbmNyeXB0KQogewogCXN0cnVjdCByZmNvbW1fc2Vzc2lvbiAqczsKIAlzdHJ1Y3QgcmZjb21tX2RsYyAqZDsKQEAgLTE5OTksMTggKzIwMTAsMjkgQEAKIAlsaXN0X2Zvcl9lYWNoX3NhZmUocCwgbiwgJnMtPmRsY3MpIHsKIAkJZCA9IGxpc3RfZW50cnkocCwgc3RydWN0IHJmY29tbV9kbGMsIGxpc3QpOwogCi0JCWlmICgoZC0+bGlua19tb2RlICYgKFJGQ09NTV9MTV9FTkNSWVBUIHwgUkZDT01NX0xNX1NFQ1VSRSkpICYmCi0JCQkJCShkLT5zdGF0ZSA9PSBCVF9DT05ORUNURUQgfHwKLQkJCQkJCWQtPnN0YXRlID09IEJUX0NPTkZJRykgJiYKLQkJCQkJCSFzdGF0dXMgJiYgZW5jcnlwdCA9PSAweDAwKSB7Ci0JCQlfX3JmY29tbV9kbGNfY2xvc2UoZCwgRUNPTk5SRUZVU0VEKTsKLQkJCWNvbnRpbnVlOworCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFJGQ09NTV9TRUNfUEVORElORywgJmQtPmZsYWdzKSkgeworCQkJcmZjb21tX2RsY19jbGVhcl90aW1lcihkKTsKKwkJCWlmIChzdGF0dXMgfHwgZW5jcnlwdCA9PSAweDAwKSB7CisJCQkJX19yZmNvbW1fZGxjX2Nsb3NlKGQsIEVDT05OUkVGVVNFRCk7CisJCQkJY29udGludWU7CisJCQl9CisJCX0KKworCQlpZiAoZC0+c3RhdGUgPT0gQlRfQ09OTkVDVEVEICYmICFzdGF0dXMgJiYgZW5jcnlwdCA9PSAweDAwKSB7CisJCQlpZiAoZC0+c2VjX2xldmVsID09IEJUX1NFQ1VSSVRZX01FRElVTSkgeworCQkJCXNldF9iaXQoUkZDT01NX1NFQ19QRU5ESU5HLCAmZC0+ZmxhZ3MpOworCQkJCXJmY29tbV9kbGNfc2V0X3RpbWVyKGQsIFJGQ09NTV9BVVRIX1RJTUVPVVQpOworCQkJCWNvbnRpbnVlOworCQkJfSBlbHNlIGlmIChkLT5zZWNfbGV2ZWwgPT0gQlRfU0VDVVJJVFlfSElHSCkgeworCQkJCV9fcmZjb21tX2RsY19jbG9zZShkLCBFQ09OTlJFRlVTRUQpOworCQkJCWNvbnRpbnVlOworCQkJfQogCQl9CiAKIAkJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoUkZDT01NX0FVVEhfUEVORElORywgJmQtPmZsYWdzKSkKIAkJCWNvbnRpbnVlOwogCi0JCWlmICghc3RhdHVzICYmIGVuY3J5cHQpCisJCWlmICghc3RhdHVzKQogCQkJc2V0X2JpdChSRkNPTU1fQVVUSF9BQ0NFUFQsICZkLT5mbGFncyk7CiAJCWVsc2UKIAkJCXNldF9iaXQoUkZDT01NX0FVVEhfUkVKRUNULCAmZC0+ZmxhZ3MpOwpAQCAtMjAyMyw4ICsyMDQ1LDcgQEAKIAogc3RhdGljIHN0cnVjdCBoY2lfY2IgcmZjb21tX2NiID0gewogCS5uYW1lCQk9ICJSRkNPTU0iLAotCS5hdXRoX2NmbQk9IHJmY29tbV9hdXRoX2NmbSwKLQkuZW5jcnlwdF9jZm0JPSByZmNvbW1fZW5jcnlwdF9jZm0KKwkuc2VjdXJpdHlfY2ZtCT0gcmZjb21tX3NlY3VyaXR5X2NmbQogfTsKIAogc3RhdGljIHNzaXplX3QgcmZjb21tX2RsY19zeXNmc19zaG93KHN0cnVjdCBjbGFzcyAqZGV2LCBjaGFyICpidWYpCmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL3JmY29tbS9zb2NrLmMgYi9uZXQvYmx1ZXRvb3RoL3JmY29tbS9zb2NrLmMKaW5kZXggZDNmYzZmYy4uN2Y0ODI3OCAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9yZmNvbW0vc29jay5jCisrKyBiL25ldC9ibHVldG9vdGgvcmZjb21tL3NvY2suYwpAQCAtMjYxLDEyICsyNjEsMTkgQEAKIAogCWlmIChwYXJlbnQpIHsKIAkJc2stPnNrX3R5cGUgPSBwYXJlbnQtPnNrX3R5cGU7Ci0JCXBpLT5saW5rX21vZGUgPSByZmNvbW1fcGkocGFyZW50KS0+bGlua19tb2RlOworCQlwaS0+ZGxjLT5kZWZlcl9zZXR1cCA9IGJ0X3NrKHBhcmVudCktPmRlZmVyX3NldHVwOworCisJCXBpLT5zZWNfbGV2ZWwgPSByZmNvbW1fcGkocGFyZW50KS0+c2VjX2xldmVsOworCQlwaS0+cm9sZV9zd2l0Y2ggPSByZmNvbW1fcGkocGFyZW50KS0+cm9sZV9zd2l0Y2g7CiAJfSBlbHNlIHsKLQkJcGktPmxpbmtfbW9kZSA9IDA7CisJCXBpLT5kbGMtPmRlZmVyX3NldHVwID0gMDsKKworCQlwaS0+c2VjX2xldmVsID0gQlRfU0VDVVJJVFlfTE9XOworCQlwaS0+cm9sZV9zd2l0Y2ggPSAwOwogCX0KIAotCXBpLT5kbGMtPmxpbmtfbW9kZSA9IHBpLT5saW5rX21vZGU7CisJcGktPmRsYy0+c2VjX2xldmVsID0gcGktPnNlY19sZXZlbDsKKwlwaS0+ZGxjLT5yb2xlX3N3aXRjaCA9IHBpLT5yb2xlX3N3aXRjaDsKIH0KIAogc3RhdGljIHN0cnVjdCBwcm90byByZmNvbW1fcHJvdG8gPSB7CkBAIC00MDYsNyArNDEzLDggQEAKIAliYWNweSgmYnRfc2soc2spLT5kc3QsICZzYS0+cmNfYmRhZGRyKTsKIAlyZmNvbW1fcGkoc2spLT5jaGFubmVsID0gc2EtPnJjX2NoYW5uZWw7CiAKLQlkLT5saW5rX21vZGUgPSByZmNvbW1fcGkoc2spLT5saW5rX21vZGU7CisJZC0+c2VjX2xldmVsID0gcmZjb21tX3BpKHNrKS0+c2VjX2xldmVsOworCWQtPnJvbGVfc3dpdGNoID0gcmZjb21tX3BpKHNrKS0+cm9sZV9zd2l0Y2g7CiAKIAllcnIgPSByZmNvbW1fZGxjX29wZW4oZCwgJmJ0X3NrKHNrKS0+c3JjLCAmc2EtPnJjX2JkYWRkciwgc2EtPnJjX2NoYW5uZWwpOwogCWlmICghZXJyKQpAQCAtNTU0LDYgKzU2Miw5IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlpbnQgc2VudCA9IDA7CiAKKwlpZiAodGVzdF9iaXQoUkZDT01NX0RFRkVSX1NFVFVQLCAmZC0+ZmxhZ3MpKQorCQlyZXR1cm4gLUVOT1RDT05OOworCiAJaWYgKG1zZy0+bXNnX2ZsYWdzICYgTVNHX09PQikKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCkBAIC01NzAsOCArNTgxLDExIEBACiAKIAkJc2tiID0gc29ja19hbGxvY19zZW5kX3NrYihzaywgc2l6ZSArIFJGQ09NTV9TS0JfUkVTRVJWRSwKIAkJCQltc2ctPm1zZ19mbGFncyAmIE1TR19ET05UV0FJVCwgJmVycik7Ci0JCWlmICghc2tiKQorCQlpZiAoIXNrYikgeworCQkJaWYgKHNlbnQgPT0gMCkKKwkJCQlzZW50ID0gZXJyOwogCQkJYnJlYWs7CisJCX0KIAkJc2tiX3Jlc2VydmUoc2tiLCBSRkNPTU1fU0tCX0hFQURfUkVTRVJWRSk7CiAKIAkJZXJyID0gbWVtY3B5X2Zyb21pb3ZlYyhza2JfcHV0KHNrYiwgc2l6ZSksIG1zZy0+bXNnX2lvdiwgc2l6ZSk7CkBAIC02MzAsMTAgKzY0NCwxNiBAQAogCQkJICAgICAgIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUsIGludCBmbGFncykKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKKwlzdHJ1Y3QgcmZjb21tX2RsYyAqZCA9IHJmY29tbV9waShzayktPmRsYzsKIAlpbnQgZXJyID0gMDsKIAlzaXplX3QgdGFyZ2V0LCBjb3BpZWQgPSAwOwogCWxvbmcgdGltZW87CiAKKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFJGQ09NTV9ERUZFUl9TRVRVUCwgJmQtPmZsYWdzKSkgeworCQlyZmNvbW1fZGxjX2FjY2VwdChkKTsKKwkJcmV0dXJuIDA7CisJfQorCiAJaWYgKGZsYWdzICYgTVNHX09PQikKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCkBAIC03MTAsNyArNzMwLDcgQEAKIAlyZXR1cm4gY29waWVkID8gOiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgcmZjb21tX3NvY2tfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLCBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgb3B0bGVuKQorc3RhdGljIGludCByZmNvbW1fc29ja19zZXRzb2Nrb3B0X29sZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgb3B0bmFtZSwgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IG9wdGxlbikKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKIAlpbnQgZXJyID0gMDsKQEAgLTcyNyw3ICs3NDcsMTQ0IEBACiAJCQlicmVhazsKIAkJfQogCi0JCXJmY29tbV9waShzayktPmxpbmtfbW9kZSA9IG9wdDsKKwkJaWYgKG9wdCAmIFJGQ09NTV9MTV9BVVRIKQorCQkJcmZjb21tX3BpKHNrKS0+c2VjX2xldmVsID0gQlRfU0VDVVJJVFlfTE9XOworCQlpZiAob3B0ICYgUkZDT01NX0xNX0VOQ1JZUFQpCisJCQlyZmNvbW1fcGkoc2spLT5zZWNfbGV2ZWwgPSBCVF9TRUNVUklUWV9NRURJVU07CisJCWlmIChvcHQgJiBSRkNPTU1fTE1fU0VDVVJFKQorCQkJcmZjb21tX3BpKHNrKS0+c2VjX2xldmVsID0gQlRfU0VDVVJJVFlfSElHSDsKKworCQlyZmNvbW1fcGkoc2spLT5yb2xlX3N3aXRjaCA9IChvcHQgJiBSRkNPTU1fTE1fTUFTVEVSKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQllcnIgPSAtRU5PUFJPVE9PUFQ7CisJCWJyZWFrOworCX0KKworCXJlbGVhc2Vfc29jayhzayk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCByZmNvbW1fc29ja19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBvcHRsZW4pCit7CisJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CisJc3RydWN0IGJ0X3NlY3VyaXR5IHNlYzsKKwlpbnQgbGVuLCBlcnIgPSAwOworCXUzMiBvcHQ7CisKKwlCVF9EQkcoInNrICVwIiwgc2spOworCisJaWYgKGxldmVsID09IFNPTF9SRkNPTU0pCisJCXJldHVybiByZmNvbW1fc29ja19zZXRzb2Nrb3B0X29sZChzb2NrLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7CisKKwlpZiAobGV2ZWwgIT0gU09MX0JMVUVUT09USCkKKwkJcmV0dXJuIC1FTk9QUk9UT09QVDsKKworCWxvY2tfc29jayhzayk7CisKKwlzd2l0Y2ggKG9wdG5hbWUpIHsKKwljYXNlIEJUX1NFQ1VSSVRZOgorCQlpZiAoc2stPnNrX3R5cGUgIT0gU09DS19TVFJFQU0pIHsKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCisJCXNlYy5sZXZlbCA9IEJUX1NFQ1VSSVRZX0xPVzsKKworCQlsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHNpemVvZihzZWMpLCBvcHRsZW4pOworCQlpZiAoY29weV9mcm9tX3VzZXIoKGNoYXIgKikgJnNlYywgb3B0dmFsLCBsZW4pKSB7CisJCQllcnIgPSAtRUZBVUxUOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoc2VjLmxldmVsID4gQlRfU0VDVVJJVFlfSElHSCkgeworCQkJZXJyID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisKKwkJcmZjb21tX3BpKHNrKS0+c2VjX2xldmVsID0gc2VjLmxldmVsOworCQlicmVhazsKKworCWNhc2UgQlRfREVGRVJfU0VUVVA6CisJCWlmIChzay0+c2tfc3RhdGUgIT0gQlRfQk9VTkQgJiYgc2stPnNrX3N0YXRlICE9IEJUX0xJU1RFTikgeworCQkJZXJyID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKGdldF91c2VyKG9wdCwgKHUzMiBfX3VzZXIgKikgb3B0dmFsKSkgeworCQkJZXJyID0gLUVGQVVMVDsKKwkJCWJyZWFrOworCQl9CisKKwkJYnRfc2soc2spLT5kZWZlcl9zZXR1cCA9IG9wdDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQllcnIgPSAtRU5PUFJPVE9PUFQ7CisJCWJyZWFrOworCX0KKworCXJlbGVhc2Vfc29jayhzayk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCByZmNvbW1fc29ja19nZXRzb2Nrb3B0X29sZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgb3B0bmFtZSwgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKQoreworCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOworCXN0cnVjdCBzb2NrICpsMmNhcF9zazsKKwlzdHJ1Y3QgcmZjb21tX2Nvbm5pbmZvIGNpbmZvOworCWludCBsZW4sIGVyciA9IDA7CisJdTMyIG9wdDsKKworCUJUX0RCRygic2sgJXAiLCBzayk7CisKKwlpZiAoZ2V0X3VzZXIobGVuLCBvcHRsZW4pKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWxvY2tfc29jayhzayk7CisKKwlzd2l0Y2ggKG9wdG5hbWUpIHsKKwljYXNlIFJGQ09NTV9MTToKKwkJc3dpdGNoIChyZmNvbW1fcGkoc2spLT5zZWNfbGV2ZWwpIHsKKwkJY2FzZSBCVF9TRUNVUklUWV9MT1c6CisJCQlvcHQgPSBSRkNPTU1fTE1fQVVUSDsKKwkJCWJyZWFrOworCQljYXNlIEJUX1NFQ1VSSVRZX01FRElVTToKKwkJCW9wdCA9IFJGQ09NTV9MTV9BVVRIIHwgUkZDT01NX0xNX0VOQ1JZUFQ7CisJCQlicmVhazsKKwkJY2FzZSBCVF9TRUNVUklUWV9ISUdIOgorCQkJb3B0ID0gUkZDT01NX0xNX0FVVEggfCBSRkNPTU1fTE1fRU5DUllQVCB8CisJCQkJCQkJUkZDT01NX0xNX1NFQ1VSRTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJb3B0ID0gMDsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKHJmY29tbV9waShzayktPnJvbGVfc3dpdGNoKQorCQkJb3B0IHw9IFJGQ09NTV9MTV9NQVNURVI7CisKKwkJaWYgKHB1dF91c2VyKG9wdCwgKHUzMiBfX3VzZXIgKikgb3B0dmFsKSkKKwkJCWVyciA9IC1FRkFVTFQ7CisJCWJyZWFrOworCisJY2FzZSBSRkNPTU1fQ09OTklORk86CisJCWlmIChzay0+c2tfc3RhdGUgIT0gQlRfQ09OTkVDVEVEICYmCisJCQkJCSFyZmNvbW1fcGkoc2spLT5kbGMtPmRlZmVyX3NldHVwKSB7CisJCQllcnIgPSAtRU5PVENPTk47CisJCQlicmVhazsKKwkJfQorCisJCWwyY2FwX3NrID0gcmZjb21tX3BpKHNrKS0+ZGxjLT5zZXNzaW9uLT5zb2NrLT5zazsKKworCQljaW5mby5oY2lfaGFuZGxlID0gbDJjYXBfcGkobDJjYXBfc2spLT5jb25uLT5oY29uLT5oYW5kbGU7CisJCW1lbWNweShjaW5mby5kZXZfY2xhc3MsIGwyY2FwX3BpKGwyY2FwX3NrKS0+Y29ubi0+aGNvbi0+ZGV2X2NsYXNzLCAzKTsKKworCQlsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGxlbiwgc2l6ZW9mKGNpbmZvKSk7CisJCWlmIChjb3B5X3RvX3VzZXIob3B0dmFsLCAoY2hhciAqKSAmY2luZm8sIGxlbikpCisJCQllcnIgPSAtRUZBVUxUOworCiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKQEAgLTc0MiwzNiArODk5LDQ0IEBACiBzdGF0aWMgaW50IHJmY29tbV9zb2NrX2dldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKQogewogCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOwotCXN0cnVjdCBzb2NrICpsMmNhcF9zazsKLQlzdHJ1Y3QgcmZjb21tX2Nvbm5pbmZvIGNpbmZvOworCXN0cnVjdCBidF9zZWN1cml0eSBzZWM7CiAJaW50IGxlbiwgZXJyID0gMDsKIAogCUJUX0RCRygic2sgJXAiLCBzayk7CiAKKwlpZiAobGV2ZWwgPT0gU09MX1JGQ09NTSkKKwkJcmV0dXJuIHJmY29tbV9zb2NrX2dldHNvY2tvcHRfb2xkKHNvY2ssIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTsKKworCWlmIChsZXZlbCAhPSBTT0xfQkxVRVRPT1RIKQorCQlyZXR1cm4gLUVOT1BST1RPT1BUOworCiAJaWYgKGdldF91c2VyKGxlbiwgb3B0bGVuKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlsb2NrX3NvY2soc2spOwogCiAJc3dpdGNoIChvcHRuYW1lKSB7Ci0JY2FzZSBSRkNPTU1fTE06Ci0JCWlmIChwdXRfdXNlcihyZmNvbW1fcGkoc2spLT5saW5rX21vZGUsICh1MzIgX191c2VyICopIG9wdHZhbCkpCi0JCQllcnIgPSAtRUZBVUxUOwotCQlicmVhazsKLQotCWNhc2UgUkZDT01NX0NPTk5JTkZPOgotCQlpZiAoc2stPnNrX3N0YXRlICE9IEJUX0NPTk5FQ1RFRCkgewotCQkJZXJyID0gLUVOT1RDT05OOworCWNhc2UgQlRfU0VDVVJJVFk6CisJCWlmIChzay0+c2tfdHlwZSAhPSBTT0NLX1NUUkVBTSkgeworCQkJZXJyID0gLUVJTlZBTDsKIAkJCWJyZWFrOwogCQl9CiAKLQkJbDJjYXBfc2sgPSByZmNvbW1fcGkoc2spLT5kbGMtPnNlc3Npb24tPnNvY2stPnNrOworCQlzZWMubGV2ZWwgPSByZmNvbW1fcGkoc2spLT5zZWNfbGV2ZWw7CiAKLQkJY2luZm8uaGNpX2hhbmRsZSA9IGwyY2FwX3BpKGwyY2FwX3NrKS0+Y29ubi0+aGNvbi0+aGFuZGxlOwotCQltZW1jcHkoY2luZm8uZGV2X2NsYXNzLCBsMmNhcF9waShsMmNhcF9zayktPmNvbm4tPmhjb24tPmRldl9jbGFzcywgMyk7CisJCWxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgbGVuLCBzaXplb2Yoc2VjKSk7CisJCWlmIChjb3B5X3RvX3VzZXIob3B0dmFsLCAoY2hhciAqKSAmc2VjLCBsZW4pKQorCQkJZXJyID0gLUVGQVVMVDsKIAotCQlsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGxlbiwgc2l6ZW9mKGNpbmZvKSk7Ci0JCWlmIChjb3B5X3RvX3VzZXIob3B0dmFsLCAoY2hhciAqKSAmY2luZm8sIGxlbikpCisJCWJyZWFrOworCisJY2FzZSBCVF9ERUZFUl9TRVRVUDoKKwkJaWYgKHNrLT5za19zdGF0ZSAhPSBCVF9CT1VORCAmJiBzay0+c2tfc3RhdGUgIT0gQlRfTElTVEVOKSB7CisJCQllcnIgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAocHV0X3VzZXIoYnRfc2soc2spLT5kZWZlcl9zZXR1cCwgKHUzMiBfX3VzZXIgKikgb3B0dmFsKSkKIAkJCWVyciA9IC1FRkFVTFQ7CiAKIAkJYnJlYWs7CkBAIC04ODgsNiArMTA1MywxMCBAQAogCiBkb25lOgogCWJoX3VubG9ja19zb2NrKHBhcmVudCk7CisKKwlpZiAoYnRfc2socGFyZW50KS0+ZGVmZXJfc2V0dXApCisJCXBhcmVudC0+c2tfc3RhdGVfY2hhbmdlKHBhcmVudCk7CisKIAlyZXR1cm4gcmVzdWx0OwogfQogCmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL3JmY29tbS90dHkuYyBiL25ldC9ibHVldG9vdGgvcmZjb21tL3R0eS5jCmluZGV4IGQwMzBjNjkuLmFiZGM3MDMgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvcmZjb21tL3R0eS5jCisrKyBiL25ldC9ibHVldG9vdGgvcmZjb21tL3R0eS5jCkBAIC03MzEsNyArNzMxLDggQEAKIAlyZW1vdmVfd2FpdF9xdWV1ZSgmZGV2LT53YWl0LCAmd2FpdCk7CiAKIAlpZiAoZXJyID09IDApCi0JCWRldmljZV9tb3ZlKGRldi0+dHR5X2RldiwgcmZjb21tX2dldF9kZXZpY2UoZGV2KSk7CisJCWRldmljZV9tb3ZlKGRldi0+dHR5X2RldiwgcmZjb21tX2dldF9kZXZpY2UoZGV2KSwKKwkJCSAgICBEUE1fT1JERVJfREVWX0FGVEVSX1BBUkVOVCk7CiAKIAlyZmNvbW1fdHR5X2NvcHlfcGVuZGluZyhkZXYpOwogCkBAIC03NTEsNyArNzUyLDcgQEAKIAogCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZkZXYtPm9wZW5lZCkpIHsKIAkJaWYgKGRldi0+dHR5X2Rldi0+cGFyZW50KQotCQkJZGV2aWNlX21vdmUoZGV2LT50dHlfZGV2LCBOVUxMKTsKKwkJCWRldmljZV9tb3ZlKGRldi0+dHR5X2RldiwgTlVMTCwgRFBNX09SREVSX0RFVl9MQVNUKTsKIAogCQkvKiBDbG9zZSBETEMgYW5kIGRldHRhY2ggVFRZICovCiAJCXJmY29tbV9kbGNfY2xvc2UoZGV2LT5kbGMsIDApOwpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9zY28uYyBiL25ldC9ibHVldG9vdGgvc2NvLmMKaW5kZXggNDZmZDhiZi4uNTFhZTBjMyAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9zY28uYworKysgYi9uZXQvYmx1ZXRvb3RoL3Njby5jCkBAIC0xOTUsNyArMTk1LDcgQEAKIAllbHNlCiAJCXR5cGUgPSBTQ09fTElOSzsKIAotCWhjb24gPSBoY2lfY29ubmVjdChoZGV2LCB0eXBlLCBkc3QsIEhDSV9BVF9OT19CT05ESU5HKTsKKwloY29uID0gaGNpX2Nvbm5lY3QoaGRldiwgdHlwZSwgZHN0LCBCVF9TRUNVUklUWV9MT1csIEhDSV9BVF9OT19CT05ESU5HKTsKIAlpZiAoIWhjb24pCiAJCWdvdG8gZG9uZTsKIApAQCAtNjY4LDcgKzY2OCw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBzY29fc29ja19nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbikKK3N0YXRpYyBpbnQgc2NvX3NvY2tfZ2V0c29ja29wdF9vbGQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbikKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKIAlzdHJ1Y3Qgc2NvX29wdGlvbnMgb3B0czsKQEAgLTcyMyw2ICs3MjMsMzEgQEAKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgaW50IHNjb19zb2NrX2dldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKQoreworCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOworCWludCBsZW4sIGVyciA9IDA7CisKKwlCVF9EQkcoInNrICVwIiwgc2spOworCisJaWYgKGxldmVsID09IFNPTF9TQ08pCisJCXJldHVybiBzY29fc29ja19nZXRzb2Nrb3B0X29sZChzb2NrLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7CisKKwlpZiAoZ2V0X3VzZXIobGVuLCBvcHRsZW4pKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWxvY2tfc29jayhzayk7CisKKwlzd2l0Y2ggKG9wdG5hbWUpIHsKKwlkZWZhdWx0OgorCQllcnIgPSAtRU5PUFJPVE9PUFQ7CisJCWJyZWFrOworCX0KKworCXJlbGVhc2Vfc29jayhzayk7CisJcmV0dXJuIGVycjsKK30KKwogc3RhdGljIGludCBzY29fc29ja19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spCiB7CiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CkBAIC04MzIsMTAgKzg1NywzMCBAQAogLyogLS0tLS0gU0NPIGludGVyZmFjZSB3aXRoIGxvd2VyIGxheWVyIChIQ0kpIC0tLS0tICovCiBzdGF0aWMgaW50IHNjb19jb25uZWN0X2luZChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgYmRhZGRyX3QgKmJkYWRkciwgX191OCB0eXBlKQogeworCXJlZ2lzdGVyIHN0cnVjdCBzb2NrICpzazsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKKwlpbnQgbG0gPSAwOworCisJaWYgKHR5cGUgIT0gU0NPX0xJTksgJiYgdHlwZSAhPSBFU0NPX0xJTkspCisJCXJldHVybiAwOworCiAJQlRfREJHKCJoZGV2ICVzLCBiZGFkZHIgJXMiLCBoZGV2LT5uYW1lLCBiYXRvc3RyKGJkYWRkcikpOwogCi0JLyogQWx3YXlzIGFjY2VwdCBjb25uZWN0aW9uICovCi0JcmV0dXJuIEhDSV9MTV9BQ0NFUFQ7CisJLyogRmluZCBsaXN0ZW5pbmcgc29ja2V0cyAqLworCXJlYWRfbG9jaygmc2NvX3NrX2xpc3QubG9jayk7CisJc2tfZm9yX2VhY2goc2ssIG5vZGUsICZzY29fc2tfbGlzdC5oZWFkKSB7CisJCWlmIChzay0+c2tfc3RhdGUgIT0gQlRfTElTVEVOKQorCQkJY29udGludWU7CisKKwkJaWYgKCFiYWNtcCgmYnRfc2soc2spLT5zcmMsICZoZGV2LT5iZGFkZHIpIHx8CisJCQkJIWJhY21wKCZidF9zayhzayktPnNyYywgQkRBRERSX0FOWSkpIHsKKwkJCWxtIHw9IEhDSV9MTV9BQ0NFUFQ7CisJCQlicmVhazsKKwkJfQorCX0KKwlyZWFkX3VubG9jaygmc2NvX3NrX2xpc3QubG9jayk7CisKKwlyZXR1cm4gbG07CiB9CiAKIHN0YXRpYyBpbnQgc2NvX2Nvbm5lY3RfY2ZtKHN0cnVjdCBoY2lfY29ubiAqaGNvbiwgX191OCBzdGF0dXMpCkBAIC04NTcsNyArOTAyLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzY29fZGlzY29ubl9pbmQoc3RydWN0IGhjaV9jb25uICpoY29uLCBfX3U4IHJlYXNvbikKK3N0YXRpYyBpbnQgc2NvX2Rpc2Nvbm5fY2ZtKHN0cnVjdCBoY2lfY29ubiAqaGNvbiwgX191OCByZWFzb24pCiB7CiAJQlRfREJHKCJoY29uICVwIHJlYXNvbiAlZCIsIGhjb24sIHJlYXNvbik7CiAKQEAgLTk0MCw3ICs5ODUsNyBAQAogCS5pZAkJPSBIQ0lfUFJPVE9fU0NPLAogCS5jb25uZWN0X2luZAk9IHNjb19jb25uZWN0X2luZCwKIAkuY29ubmVjdF9jZm0JPSBzY29fY29ubmVjdF9jZm0sCi0JLmRpc2Nvbm5faW5kCT0gc2NvX2Rpc2Nvbm5faW5kLAorCS5kaXNjb25uX2NmbQk9IHNjb19kaXNjb25uX2NmbSwKIAkucmVjdl9zY29kYXRhCT0gc2NvX3JlY3Zfc2NvZGF0YQogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9pZi5jIGIvbmV0L2JyaWRnZS9icl9pZi5jCmluZGV4IDcyN2M1YzUuLjhhOTY2NzIgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfaWYuYworKysgYi9uZXQvYnJpZGdlL2JyX2lmLmMKQEAgLTQyNiw3ICs0MjYsNiBAQAogZXJyMToKIAlrb2JqZWN0X2RlbCgmcC0+a29iaik7CiBlcnIwOgotCWtvYmplY3RfcHV0KCZwLT5rb2JqKTsKIAlkZXZfc2V0X3Byb21pc2N1aXR5KGRldiwgLTEpOwogcHV0X2JhY2s6CiAJZGV2X3B1dChkZXYpOwpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXIuYyBiL25ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyLmMKaW5kZXggY2Y3NTRhYy4uMzk1M2FjNCAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXIuYworKysgYi9uZXQvYnJpZGdlL2JyX25ldGZpbHRlci5jCkBAIC0xMDcsNyArMTA3LDcgQEAKIAogc3RhdGljIHN0cnVjdCBkc3Rfb3BzIGZha2VfZHN0X29wcyA9IHsKIAkuZmFtaWx5ID0JCUFGX0lORVQsCi0JLnByb3RvY29sID0JCV9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVApLAorCS5wcm90b2NvbCA9CQljcHVfdG9fYmUxNihFVEhfUF9JUCksCiAJLnVwZGF0ZV9wbXR1ID0JCWZha2VfdXBkYXRlX3BtdHUsCiAJLmVudHJpZXMgPQkJQVRPTUlDX0lOSVQoMCksCiB9OwpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9uZXRsaW5rLmMgYi9uZXQvYnJpZGdlL2JyX25ldGxpbmsuYwppbmRleCBiYTdiZTE5Li5mY2ZmYjNmIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX25ldGxpbmsuYworKysgYi9uZXQvYnJpZGdlL2JyX25ldGxpbmsuYwpAQCAtOTgsNyArOTgsOCBAQAogCQlrZnJlZV9za2Ioc2tiKTsKIAkJZ290byBlcnJvdXQ7CiAJfQotCWVyciA9IHJ0bmxfbm90aWZ5KHNrYiwgbmV0LCAwLCBSVE5MR1JQX0xJTkssIE5VTEwsIEdGUF9BVE9NSUMpOworCXJ0bmxfbm90aWZ5KHNrYiwgbmV0LCAwLCBSVE5MR1JQX0xJTkssIE5VTEwsIEdGUF9BVE9NSUMpOworCXJldHVybjsKIGVycm91dDoKIAlpZiAoZXJyIDwgMCkKIAkJcnRubF9zZXRfc2tfZXJyKG5ldCwgUlROTEdSUF9MSU5LLCBlcnIpOwpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X2xvZy5jIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X2xvZy5jCmluZGV4IGQ0NGNiZjguLmE5NGYzY2MgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF9sb2cuYworKysgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfbG9nLmMKQEAgLTIxNCw3ICsyMTQsNyBAQAogCS5tZQkJPSBUSElTX01PRFVMRSwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfbG9nZ2VyIGVidF9sb2dfbG9nZ2VyID0geworc3RhdGljIHN0cnVjdCBuZl9sb2dnZXIgZWJ0X2xvZ19sb2dnZXIgX19yZWFkX21vc3RseSA9IHsKIAkubmFtZSAJCT0gImVidF9sb2ciLAogCS5sb2dmbgkJPSAmZWJ0X2xvZ19wYWNrZXQsCiAJLm1lCQk9IFRISVNfTU9EVUxFLApkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X3Vsb2cuYyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF91bG9nLmMKaW5kZXggMmM2ZDY4Mi4uMTMzZWVhZSAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X3Vsb2cuYworKysgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfdWxvZy5jCkBAIC0yNzksMjEgKzI3OSwyMSBAQAogCS5tZQkJPSBUSElTX01PRFVMRSwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfbG9nZ2VyIGVidF91bG9nX2xvZ2dlciA9IHsKLQkubmFtZQkJPSAidWxvZyIsCitzdGF0aWMgc3RydWN0IG5mX2xvZ2dlciBlYnRfdWxvZ19sb2dnZXIgX19yZWFkX21vc3RseSA9IHsKKwkubmFtZQkJPSAiZWJ0X3Vsb2ciLAogCS5sb2dmbgkJPSAmZWJ0X2xvZ19wYWNrZXQsCiAJLm1lCQk9IFRISVNfTU9EVUxFLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgZWJ0X3Vsb2dfaW5pdCh2b2lkKQogewotCWJvb2wgcmV0ID0gdHJ1ZTsKKwlpbnQgcmV0OwogCWludCBpOwogCiAJaWYgKG5sYnVmc2l6ID49IDEyOCoxMDI0KSB7CiAJCXByaW50ayhLRVJOX05PVElDRSAiZWJ0X3Vsb2c6IE5ldGxpbmsgYnVmZmVyIGhhcyB0byBiZSA8PSAxMjhrQiwiCiAJCSAgICAgICAiIHBsZWFzZSB0cnkgYSBzbWFsbGVyIG5sYnVmc2l6IHBhcmFtZXRlci5cbiIpOwotCQlyZXR1cm4gZmFsc2U7CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCS8qIGluaXRpYWxpemUgdWxvZ19idWZmZXJzICovCkBAIC0zMDgsMTIgKzMwOCwxMiBAQAogCWlmICghZWJ0dWxvZ25sKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgS0JVSUxEX01PRE5BTUUgIjogb3V0IG9mIG1lbW9yeSB0cnlpbmcgdG8gIgogCQkgICAgICAgImNhbGwgbmV0bGlua19rZXJuZWxfY3JlYXRlXG4iKTsKLQkJcmV0ID0gZmFsc2U7Ci0JfSBlbHNlIGlmICh4dF9yZWdpc3Rlcl90YXJnZXQoJmVidF91bG9nX3RnX3JlZykgIT0gMCkgeworCQlyZXQgPSAtRU5PTUVNOworCX0gZWxzZSBpZiAoKHJldCA9IHh0X3JlZ2lzdGVyX3RhcmdldCgmZWJ0X3Vsb2dfdGdfcmVnKSkgIT0gMCkgewogCQluZXRsaW5rX2tlcm5lbF9yZWxlYXNlKGVidHVsb2dubCk7CiAJfQogCi0JaWYgKHJldCkKKwlpZiAocmV0ID09IDApCiAJCW5mX2xvZ19yZWdpc3RlcihORlBST1RPX0JSSURHRSwgJmVidF91bG9nX2xvZ2dlcik7CiAKIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZV9icm91dGUuYyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVfYnJvdXRlLmMKaW5kZXggODYwNGRmYy4uYzc1MTExMSAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZV9icm91dGUuYworKysgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlX2Jyb3V0ZS5jCkBAIC00Niw3ICs0Niw2IEBACiAJLm5hbWUJCT0gImJyb3V0ZSIsCiAJLnRhYmxlCQk9ICZpbml0aWFsX3RhYmxlLAogCS52YWxpZF9ob29rcwk9IDEgPDwgTkZfQlJfQlJPVVRJTkcsCi0JLmxvY2sJCT0gX19SV19MT0NLX1VOTE9DS0VEKGJyb3V0ZV90YWJsZS5sb2NrKSwKIAkuY2hlY2sJCT0gY2hlY2ssCiAJLm1lCQk9IFRISVNfTU9EVUxFLAogfTsKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVfZmlsdGVyLmMgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlX2ZpbHRlci5jCmluZGV4IDJiMmU4MDQuLmE1ZWVhNzIgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVfZmlsdGVyLmMKKysrIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZV9maWx0ZXIuYwpAQCAtNTUsNyArNTUsNiBAQAogCS5uYW1lCQk9ICJmaWx0ZXIiLAogCS50YWJsZQkJPSAmaW5pdGlhbF90YWJsZSwKIAkudmFsaWRfaG9va3MJPSBGSUxURVJfVkFMSURfSE9PS1MsCi0JLmxvY2sJCT0gX19SV19MT0NLX1VOTE9DS0VEKGZyYW1lX2ZpbHRlci5sb2NrKSwKIAkuY2hlY2sJCT0gY2hlY2ssCiAJLm1lCQk9IFRISVNfTU9EVUxFLAogfTsKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVfbmF0LmMgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlX25hdC5jCmluZGV4IDNmZTFhZTguLjYwMjRjNTUgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVfbmF0LmMKKysrIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZV9uYXQuYwpAQCAtNTUsNyArNTUsNiBAQAogCS5uYW1lCQk9ICJuYXQiLAogCS50YWJsZQkJPSAmaW5pdGlhbF90YWJsZSwKIAkudmFsaWRfaG9va3MJPSBOQVRfVkFMSURfSE9PS1MsCi0JLmxvY2sJCT0gX19SV19MT0NLX1VOTE9DS0VEKGZyYW1lX25hdC5sb2NrKSwKIAkuY2hlY2sJCT0gY2hlY2ssCiAJLm1lCQk9IFRISVNfTU9EVUxFLAogfTsKZGlmZiAtLWdpdCBhL25ldC9jYW4vYWZfY2FuLmMgYi9uZXQvY2FuL2FmX2Nhbi5jCmluZGV4IGZhNDE3Y2EuLjU0N2JhZmMgMTAwNjQ0Ci0tLSBhL25ldC9jYW4vYWZfY2FuLmMKKysrIGIvbmV0L2Nhbi9hZl9jYW4uYwpAQCAtMjczLDggKzI3Myw3IEBACiAJCWVyciA9IG5ldF94bWl0X2Vycm5vKGVycik7CiAKIAlpZiAoZXJyKSB7Ci0JCWlmIChuZXdza2IpCi0JCQlrZnJlZV9za2IobmV3c2tiKTsKKwkJa2ZyZWVfc2tiKG5ld3NrYik7CiAJCXJldHVybiBlcnI7CiAJfQogCkBAIC04MjgsNyArODI3LDcgQEAKICAqLwogCiBzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGNhbl9wYWNrZXQgX19yZWFkX21vc3RseSA9IHsKLQkudHlwZSA9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfQ0FOKSwKKwkudHlwZSA9IGNwdV90b19iZTE2KEVUSF9QX0NBTiksCiAJLmRldiAgPSBOVUxMLAogCS5mdW5jID0gY2FuX3JjdiwKIH07CmRpZmYgLS1naXQgYS9uZXQvY2FuL3Jhdy5jIGIvbmV0L2Nhbi9yYXcuYwppbmRleCAwNzAzY2JhLi42YWExNTRlIDEwMDY0NAotLS0gYS9uZXQvY2FuL3Jhdy5jCisrKyBiL25ldC9jYW4vcmF3LmMKQEAgLTY0OCw2ICs2NDgsOSBAQAogCWVyciA9IG1lbWNweV9mcm9taW92ZWMoc2tiX3B1dChza2IsIHNpemUpLCBtc2ctPm1zZ19pb3YsIHNpemUpOwogCWlmIChlcnIgPCAwKQogCQlnb3RvIGZyZWVfc2tiOworCWVyciA9IHNvY2tfdHhfdGltZXN0YW1wKG1zZywgc2ssIHNrYl90eChza2IpKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBmcmVlX3NrYjsKIAlza2ItPmRldiA9IGRldjsKIAlza2ItPnNrICA9IHNrOwogCmRpZmYgLS1naXQgYS9uZXQvY29tcGF0LmMgYi9uZXQvY29tcGF0LmMKaW5kZXggYTNhMmJhMC4uOGQ3MzkwNSAxMDA2NDQKLS0tIGEvbmV0L2NvbXBhdC5jCisrKyBiL25ldC9jb21wYXQuYwpAQCAtMjE2LDcgKzIxNiw3IEBACiBpbnQgcHV0X2Ntc2dfY29tcGF0KHN0cnVjdCBtc2doZHIgKmttc2csIGludCBsZXZlbCwgaW50IHR5cGUsIGludCBsZW4sIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IGNvbXBhdF90aW1ldmFsIGN0djsKLQlzdHJ1Y3QgY29tcGF0X3RpbWVzcGVjIGN0czsKKwlzdHJ1Y3QgY29tcGF0X3RpbWVzcGVjIGN0c1szXTsKIAlzdHJ1Y3QgY29tcGF0X2Ntc2doZHIgX191c2VyICpjbSA9IChzdHJ1Y3QgY29tcGF0X2Ntc2doZHIgX191c2VyICopIGttc2ctPm1zZ19jb250cm9sOwogCXN0cnVjdCBjb21wYXRfY21zZ2hkciBjbWhkcjsKIAlpbnQgY21sZW47CkBAIC0yMzMsMTIgKzIzMywxNyBAQAogCQlkYXRhID0gJmN0djsKIAkJbGVuID0gc2l6ZW9mKGN0dik7CiAJfQotCWlmIChsZXZlbCA9PSBTT0xfU09DS0VUICYmIHR5cGUgPT0gU0NNX1RJTUVTVEFNUE5TKSB7CisJaWYgKGxldmVsID09IFNPTF9TT0NLRVQgJiYKKwkgICAgKHR5cGUgPT0gU0NNX1RJTUVTVEFNUE5TIHx8IHR5cGUgPT0gU0NNX1RJTUVTVEFNUElORykpIHsKKwkJaW50IGNvdW50ID0gdHlwZSA9PSBTQ01fVElNRVNUQU1QTlMgPyAxIDogMzsKKwkJaW50IGk7CiAJCXN0cnVjdCB0aW1lc3BlYyAqdHMgPSAoc3RydWN0IHRpbWVzcGVjICopZGF0YTsKLQkJY3RzLnR2X3NlYyA9IHRzLT50dl9zZWM7Ci0JCWN0cy50dl9uc2VjID0gdHMtPnR2X25zZWM7CisJCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCQljdHNbaV0udHZfc2VjID0gdHNbaV0udHZfc2VjOworCQkJY3RzW2ldLnR2X25zZWMgPSB0c1tpXS50dl9uc2VjOworCQl9CiAJCWRhdGEgPSAmY3RzOwotCQlsZW4gPSBzaXplb2YoY3RzKTsKKwkJbGVuID0gc2l6ZW9mKGN0c1swXSkgKiBjb3VudDsKIAl9CiAKIAljbWxlbiA9IENNU0dfQ09NUEFUX0xFTihsZW4pOwpAQCAtNDU1LDcgKzQ2MCw3IEBACiAJc3RydWN0IHRpbWV2YWwgdHY7CiAKIAlpZiAoIXNvY2tfZmxhZyhzaywgU09DS19USU1FU1RBTVApKQotCQlzb2NrX2VuYWJsZV90aW1lc3RhbXAoc2spOworCQlzb2NrX2VuYWJsZV90aW1lc3RhbXAoc2ssIFNPQ0tfVElNRVNUQU1QKTsKIAl0diA9IGt0aW1lX3RvX3RpbWV2YWwoc2stPnNrX3N0YW1wKTsKIAlpZiAodHYudHZfc2VjID09IC0xKQogCQlyZXR1cm4gZXJyOwpAQCAtNDc5LDcgKzQ4NCw3IEBACiAJc3RydWN0IHRpbWVzcGVjIHRzOwogCiAJaWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfVElNRVNUQU1QKSkKLQkJc29ja19lbmFibGVfdGltZXN0YW1wKHNrKTsKKwkJc29ja19lbmFibGVfdGltZXN0YW1wKHNrLCBTT0NLX1RJTUVTVEFNUCk7CiAJdHMgPSBrdGltZV90b190aW1lc3BlYyhzay0+c2tfc3RhbXApOwogCWlmICh0cy50dl9zZWMgPT0gLTEpCiAJCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9NYWtlZmlsZSBiL25ldC9jb3JlL01ha2VmaWxlCmluZGV4IDI2YTM3Y2IuLjc5NmY0NmUgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL01ha2VmaWxlCisrKyBiL25ldC9jb3JlL01ha2VmaWxlCkBAIC0xNywzICsxNyw2IEBACiBvYmotJChDT05GSUdfTkVUUE9MTCkgKz0gbmV0cG9sbC5vCiBvYmotJChDT05GSUdfTkVUX0RNQSkgKz0gdXNlcl9kbWEubwogb2JqLSQoQ09ORklHX0ZJQl9SVUxFUykgKz0gZmliX3J1bGVzLm8KK29iai0kKENPTkZJR19UUkFDRVBPSU5UUykgKz0gbmV0LXRyYWNlcy5vCitvYmotJChDT05GSUdfTkVUX0RST1BfTU9OSVRPUikgKz0gZHJvcF9tb25pdG9yLm8KKwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGF0YWdyYW0uYyBiL25ldC9jb3JlL2RhdGFncmFtLmMKaW5kZXggNWUyYWMwYy4uZDBkZTY0NCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGF0YWdyYW0uYworKysgYi9uZXQvY29yZS9kYXRhZ3JhbS5jCkBAIC0yMDgsNyArMjA4LDcgQEAKIAogdm9pZCBza2JfZnJlZV9kYXRhZ3JhbShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Ja2ZyZWVfc2tiKHNrYik7CisJY29uc3VtZV9za2Ioc2tiKTsKIAlza19tZW1fcmVjbGFpbV9wYXJ0aWFsKHNrKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuYwppbmRleCBlM2ZlNWM3Li4wNTJkZDQ3IDEwMDY0NAotLS0gYS9uZXQvY29yZS9kZXYuYworKysgYi9uZXQvY29yZS9kZXYuYwpAQCAtMTY2OCw4ICsxNjY4LDggQEAKIAkJCXN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cSkKIHsKIAljb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgKm9wcyA9IGRldi0+bmV0ZGV2X29wczsKKwlpbnQgcmM7CiAKLQlwcmVmZXRjaCgmZGV2LT5uZXRkZXZfb3BzLT5uZG9fc3RhcnRfeG1pdCk7CiAJaWYgKGxpa2VseSghc2tiLT5uZXh0KSkgewogCQlpZiAoIWxpc3RfZW1wdHkoJnB0eXBlX2FsbCkpCiAJCQlkZXZfcXVldWVfeG1pdF9uaXQoc2tiLCBkZXYpOwpAQCAtMTY4MSwxMyArMTY4MSwyNyBAQAogCQkJCWdvdG8gZ3NvOwogCQl9CiAKLQkJcmV0dXJuIG9wcy0+bmRvX3N0YXJ0X3htaXQoc2tiLCBkZXYpOworCQlyYyA9IG9wcy0+bmRvX3N0YXJ0X3htaXQoc2tiLCBkZXYpOworCQkvKgorCQkgKiBUT0RPOiBpZiBza2Jfb3JwaGFuKCkgd2FzIGNhbGxlZCBieQorCQkgKiBkZXYtPmhhcmRfc3RhcnRfeG1pdCgpIChmb3IgZXhhbXBsZSwgdGhlIHVubW9kaWZpZWQKKwkJICogaWdiIGRyaXZlciBkb2VzIHRoYXQ7IGJueDIgZG9lc24ndCksIHRoZW4KKwkJICogc2tiX3R4X3NvZnR3YXJlX3RpbWVzdGFtcCgpIHdpbGwgYmUgdW5hYmxlIHRvIHNlbmQKKwkJICogYmFjayB0aGUgdGltZSBzdGFtcC4KKwkJICoKKwkJICogSG93IGNhbiB0aGlzIGJlIHByZXZlbnRlZD8gQWx3YXlzIGNyZWF0ZSBhbm90aGVyCisJCSAqIHJlZmVyZW5jZSB0byB0aGUgc29ja2V0IGJlZm9yZSBjYWxsaW5nCisJCSAqIGRldi0+aGFyZF9zdGFydF94bWl0KCk/IFByZXZlbnQgdGhhdCBza2Jfb3JwaGFuKCkKKwkJICogZG9lcyBhbnl0aGluZyBpbiBkZXYtPmhhcmRfc3RhcnRfeG1pdCgpIGJ5IGNsZWFyaW5nCisJCSAqIHRoZSBza2IgZGVzdHJ1Y3RvciBiZWZvcmUgdGhlIGNhbGwgYW5kIHJlc3RvcmluZyBpdAorCQkgKiBhZnRlcndhcmRzLCB0aGVuIGRvaW5nIHRoZSBza2Jfb3JwaGFuKCkgb3Vyc2VsdmVzPworCQkgKi8KKwkJcmV0dXJuIHJjOwogCX0KIAogZ3NvOgogCWRvIHsKIAkJc3RydWN0IHNrX2J1ZmYgKm5za2IgPSBza2ItPm5leHQ7Ci0JCWludCByYzsKIAogCQlza2ItPm5leHQgPSBuc2tiLT5uZXh0OwogCQluc2tiLT5uZXh0ID0gTlVMTDsKQEAgLTE3MDgsNTkgKzE3MjIsMjQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHUzMiBzaW1wbGVfdHhfaGFzaHJuZDsKLXN0YXRpYyBpbnQgc2ltcGxlX3R4X2hhc2hybmRfaW5pdGlhbGl6ZWQgPSAwOworc3RhdGljIHUzMiBza2JfdHhfaGFzaHJuZDsKIAotc3RhdGljIHUxNiBzaW1wbGVfdHhfaGFzaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQordTE2IHNrYl90eF9oYXNoKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JdTMyIGFkZHIxLCBhZGRyMiwgcG9ydHM7Ci0JdTMyIGhhc2gsIGlobDsKLQl1OCBpcF9wcm90byA9IDA7CisJdTMyIGhhc2g7CiAKLQlpZiAodW5saWtlbHkoIXNpbXBsZV90eF9oYXNocm5kX2luaXRpYWxpemVkKSkgewotCQlnZXRfcmFuZG9tX2J5dGVzKCZzaW1wbGVfdHhfaGFzaHJuZCwgNCk7Ci0JCXNpbXBsZV90eF9oYXNocm5kX2luaXRpYWxpemVkID0gMTsKLQl9CisJaWYgKHNrYl9yeF9xdWV1ZV9yZWNvcmRlZChza2IpKSB7CisJCWhhc2ggPSBza2JfZ2V0X3J4X3F1ZXVlKHNrYik7CisJfSBlbHNlIGlmIChza2ItPnNrICYmIHNrYi0+c2stPnNrX2hhc2gpIHsKKwkJaGFzaCA9IHNrYi0+c2stPnNrX2hhc2g7CisJfSBlbHNlCisJCWhhc2ggPSBza2ItPnByb3RvY29sOwogCi0Jc3dpdGNoIChza2ItPnByb3RvY29sKSB7Ci0JY2FzZSBodG9ucyhFVEhfUF9JUCk6Ci0JCWlmICghKGlwX2hkcihza2IpLT5mcmFnX29mZiAmIGh0b25zKElQX01GIHwgSVBfT0ZGU0VUKSkpCi0JCQlpcF9wcm90byA9IGlwX2hkcihza2IpLT5wcm90b2NvbDsKLQkJYWRkcjEgPSBpcF9oZHIoc2tiKS0+c2FkZHI7Ci0JCWFkZHIyID0gaXBfaGRyKHNrYiktPmRhZGRyOwotCQlpaGwgPSBpcF9oZHIoc2tiKS0+aWhsOwotCQlicmVhazsKLQljYXNlIGh0b25zKEVUSF9QX0lQVjYpOgotCQlpcF9wcm90byA9IGlwdjZfaGRyKHNrYiktPm5leHRoZHI7Ci0JCWFkZHIxID0gaXB2Nl9oZHIoc2tiKS0+c2FkZHIuczZfYWRkcjMyWzNdOwotCQlhZGRyMiA9IGlwdjZfaGRyKHNrYiktPmRhZGRyLnM2X2FkZHIzMlszXTsKLQkJaWhsID0gKDQwID4+IDIpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gMDsKLQl9Ci0KLQotCXN3aXRjaCAoaXBfcHJvdG8pIHsKLQljYXNlIElQUFJPVE9fVENQOgotCWNhc2UgSVBQUk9UT19VRFA6Ci0JY2FzZSBJUFBST1RPX0RDQ1A6Ci0JY2FzZSBJUFBST1RPX0VTUDoKLQljYXNlIElQUFJPVE9fQUg6Ci0JY2FzZSBJUFBST1RPX1NDVFA6Ci0JY2FzZSBJUFBST1RPX1VEUExJVEU6Ci0JCXBvcnRzID0gKigodTMyICopIChza2JfbmV0d29ya19oZWFkZXIoc2tiKSArIChpaGwgKiA0KSkpOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCXBvcnRzID0gMDsKLQkJYnJlYWs7Ci0JfQotCi0JaGFzaCA9IGpoYXNoXzN3b3JkcyhhZGRyMSwgYWRkcjIsIHBvcnRzLCBzaW1wbGVfdHhfaGFzaHJuZCk7CisJaGFzaCA9IGpoYXNoXzF3b3JkKGhhc2gsIHNrYl90eF9oYXNocm5kKTsKIAogCXJldHVybiAodTE2KSAoKCh1NjQpIGhhc2ggKiBkZXYtPnJlYWxfbnVtX3R4X3F1ZXVlcykgPj4gMzIpOwogfQorRVhQT1JUX1NZTUJPTChza2JfdHhfaGFzaCk7CiAKIHN0YXRpYyBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICpkZXZfcGlja190eChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQpAQCAtMTc3MSw3ICsxNzUwLDcgQEAKIAlpZiAob3BzLT5uZG9fc2VsZWN0X3F1ZXVlKQogCQlxdWV1ZV9pbmRleCA9IG9wcy0+bmRvX3NlbGVjdF9xdWV1ZShkZXYsIHNrYik7CiAJZWxzZSBpZiAoZGV2LT5yZWFsX251bV90eF9xdWV1ZXMgPiAxKQotCQlxdWV1ZV9pbmRleCA9IHNpbXBsZV90eF9oYXNoKGRldiwgc2tiKTsKKwkJcXVldWVfaW5kZXggPSBza2JfdHhfaGFzaChkZXYsIHNrYik7CiAKIAlza2Jfc2V0X3F1ZXVlX21hcHBpbmcoc2tiLCBxdWV1ZV9pbmRleCk7CiAJcmV0dXJuIG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCBxdWV1ZV9pbmRleCk7CkBAIC0yMjk3LDYgKzIyNzYsOCBAQAogCWlmICghc2tiKQogCQlnb3RvIG91dDsKIAorCXNrYl9vcnBoYW4oc2tiKTsKKwogCXR5cGUgPSBza2ItPnByb3RvY29sOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHB0eXBlLAogCQkJJnB0eXBlX2Jhc2VbbnRvaHModHlwZSkgJiBQVFlQRV9IQVNIX01BU0tdLCBsaXN0KSB7CkBAIC0yMzY2LDcgKzIzNDcsNiBAQAogCiBvdXQ6CiAJc2tiX3NoaW5mbyhza2IpLT5nc29fc2l6ZSA9IDA7Ci0JX19za2JfcHVzaChza2IsIC1za2JfbmV0d29ya19vZmZzZXQoc2tiKSk7CiAJcmV0dXJuIG5ldGlmX3JlY2VpdmVfc2tiKHNrYik7CiB9CiAKQEAgLTIzODAsMjAgKzIzNjAsNDAgQEAKIAkJbmFwaV9ncm9fY29tcGxldGUoc2tiKTsKIAl9CiAKKwluYXBpLT5ncm9fY291bnQgPSAwOwogCW5hcGktPmdyb19saXN0ID0gTlVMTDsKIH0KIEVYUE9SVF9TWU1CT0wobmFwaV9ncm9fZmx1c2gpOwogCit2b2lkICpza2JfZ3JvX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaGxlbikKK3sKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gc2tiX2dyb19vZmZzZXQoc2tiKTsKKworCWhsZW4gKz0gb2Zmc2V0OworCWlmIChobGVuIDw9IHNrYl9oZWFkbGVuKHNrYikpCisJCXJldHVybiBza2ItPmRhdGEgKyBvZmZzZXQ7CisKKwlpZiAodW5saWtlbHkoIXNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgfHwKKwkJICAgICBza2Jfc2hpbmZvKHNrYiktPmZyYWdzWzBdLnNpemUgPD0KKwkJICAgICBobGVuIC0gc2tiX2hlYWRsZW4oc2tiKSB8fAorCQkgICAgIFBhZ2VIaWdoTWVtKHNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbMF0ucGFnZSkpKQorCQlyZXR1cm4gcHNrYl9tYXlfcHVsbChza2IsIGhsZW4pID8gc2tiLT5kYXRhICsgb2Zmc2V0IDogTlVMTDsKKworCXJldHVybiBwYWdlX2FkZHJlc3Moc2tiX3NoaW5mbyhza2IpLT5mcmFnc1swXS5wYWdlKSArCisJICAgICAgIHNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbMF0ucGFnZV9vZmZzZXQgKworCSAgICAgICBvZmZzZXQgLSBza2JfaGVhZGxlbihza2IpOworfQorRVhQT1JUX1NZTUJPTChza2JfZ3JvX2hlYWRlcik7CisKIGludCBkZXZfZ3JvX3JlY2VpdmUoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBza19idWZmICoqcHAgPSBOVUxMOwogCXN0cnVjdCBwYWNrZXRfdHlwZSAqcHR5cGU7CiAJX19iZTE2IHR5cGUgPSBza2ItPnByb3RvY29sOwogCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQgPSAmcHR5cGVfYmFzZVtudG9ocyh0eXBlKSAmIFBUWVBFX0hBU0hfTUFTS107Ci0JaW50IGNvdW50ID0gMDsKIAlpbnQgc2FtZV9mbG93OwogCWludCBtYWNfbGVuOwotCWludCBmcmVlOworCWludCByZXQ7CiAKIAlpZiAoIShza2ItPmRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0dSTykpCiAJCWdvdG8gbm9ybWFsOwpAQCAtMjQwMywzMCArMjQwMywxNiBAQAogCiAJcmN1X3JlYWRfbG9jaygpOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHB0eXBlLCBoZWFkLCBsaXN0KSB7Ci0JCXN0cnVjdCBza19idWZmICpwOwotCiAJCWlmIChwdHlwZS0+dHlwZSAhPSB0eXBlIHx8IHB0eXBlLT5kZXYgfHwgIXB0eXBlLT5ncm9fcmVjZWl2ZSkKIAkJCWNvbnRpbnVlOwogCi0JCXNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpOworCQlza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgc2tiX2dyb19vZmZzZXQoc2tiKSk7CiAJCW1hY19sZW4gPSBza2ItPm5ldHdvcmtfaGVhZGVyIC0gc2tiLT5tYWNfaGVhZGVyOwogCQlza2ItPm1hY19sZW4gPSBtYWNfbGVuOwogCQlOQVBJX0dST19DQihza2IpLT5zYW1lX2Zsb3cgPSAwOwogCQlOQVBJX0dST19DQihza2IpLT5mbHVzaCA9IDA7CiAJCU5BUElfR1JPX0NCKHNrYiktPmZyZWUgPSAwOwogCi0JCWZvciAocCA9IG5hcGktPmdyb19saXN0OyBwOyBwID0gcC0+bmV4dCkgewotCQkJY291bnQrKzsKLQotCQkJaWYgKCFOQVBJX0dST19DQihwKS0+c2FtZV9mbG93KQotCQkJCWNvbnRpbnVlOwotCi0JCQlpZiAocC0+bWFjX2xlbiAhPSBtYWNfbGVuIHx8Ci0JCQkgICAgbWVtY21wKHNrYl9tYWNfaGVhZGVyKHApLCBza2JfbWFjX2hlYWRlcihza2IpLAotCQkJCSAgIG1hY19sZW4pKQotCQkJCU5BUElfR1JPX0NCKHApLT5zYW1lX2Zsb3cgPSAwOwotCQl9Ci0KIAkJcHAgPSBwdHlwZS0+Z3JvX3JlY2VpdmUoJm5hcGktPmdyb19saXN0LCBza2IpOwogCQlicmVhazsKIAl9CkBAIC0yNDM2LDcgKzI0MjIsNyBAQAogCQlnb3RvIG5vcm1hbDsKIAogCXNhbWVfZmxvdyA9IE5BUElfR1JPX0NCKHNrYiktPnNhbWVfZmxvdzsKLQlmcmVlID0gTkFQSV9HUk9fQ0Ioc2tiKS0+ZnJlZTsKKwlyZXQgPSBOQVBJX0dST19DQihza2IpLT5mcmVlID8gR1JPX01FUkdFRF9GUkVFIDogR1JPX01FUkdFRDsKIAogCWlmIChwcCkgewogCQlzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9ICpwcDsKQEAgLTI0NDQsMjcgKzI0MzAsMzUgQEAKIAkJKnBwID0gbnNrYi0+bmV4dDsKIAkJbnNrYi0+bmV4dCA9IE5VTEw7CiAJCW5hcGlfZ3JvX2NvbXBsZXRlKG5za2IpOwotCQljb3VudC0tOworCQluYXBpLT5ncm9fY291bnQtLTsKIAl9CiAKIAlpZiAoc2FtZV9mbG93KQogCQlnb3RvIG9rOwogCi0JaWYgKE5BUElfR1JPX0NCKHNrYiktPmZsdXNoIHx8IGNvdW50ID49IE1BWF9HUk9fU0tCUykgewotCQlfX3NrYl9wdXNoKHNrYiwgLXNrYl9uZXR3b3JrX29mZnNldChza2IpKTsKKwlpZiAoTkFQSV9HUk9fQ0Ioc2tiKS0+Zmx1c2ggfHwgbmFwaS0+Z3JvX2NvdW50ID49IE1BWF9HUk9fU0tCUykKIAkJZ290byBub3JtYWw7Ci0JfQogCisJbmFwaS0+Z3JvX2NvdW50Kys7CiAJTkFQSV9HUk9fQ0Ioc2tiKS0+Y291bnQgPSAxOwotCXNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemUgPSBza2ItPmxlbjsKKwlza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplID0gc2tiX2dyb19sZW4oc2tiKTsKIAlza2ItPm5leHQgPSBuYXBpLT5ncm9fbGlzdDsKIAluYXBpLT5ncm9fbGlzdCA9IHNrYjsKKwlyZXQgPSBHUk9fSEVMRDsKKworcHVsbDoKKwlpZiAodW5saWtlbHkoIXBza2JfbWF5X3B1bGwoc2tiLCBza2JfZ3JvX29mZnNldChza2IpKSkpIHsKKwkJaWYgKG5hcGktPmdyb19saXN0ID09IHNrYikKKwkJCW5hcGktPmdyb19saXN0ID0gc2tiLT5uZXh0OworCQlyZXQgPSBHUk9fRFJPUDsKKwl9CiAKIG9rOgotCXJldHVybiBmcmVlOworCXJldHVybiByZXQ7CiAKIG5vcm1hbDoKLQlyZXR1cm4gLTE7CisJcmV0ID0gR1JPX05PUk1BTDsKKwlnb3RvIHB1bGw7CiB9CiBFWFBPUlRfU1lNQk9MKGRldl9ncm9fcmVjZWl2ZSk7CiAKQEAgLTI0NzIsMjkgKzI0NjYsNDQgQEAKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqcDsKIAorCWlmIChuZXRwb2xsX3J4X29uKHNrYikpCisJCXJldHVybiBHUk9fTk9STUFMOworCiAJZm9yIChwID0gbmFwaS0+Z3JvX2xpc3Q7IHA7IHAgPSBwLT5uZXh0KSB7Ci0JCU5BUElfR1JPX0NCKHApLT5zYW1lX2Zsb3cgPSAxOworCQlOQVBJX0dST19DQihwKS0+c2FtZV9mbG93ID0gIWNvbXBhcmVfZXRoZXJfaGVhZGVyKAorCQkJc2tiX21hY19oZWFkZXIocCksIHNrYl9ncm9fbWFjX2hlYWRlcihza2IpKTsKIAkJTkFQSV9HUk9fQ0IocCktPmZsdXNoID0gMDsKIAl9CiAKIAlyZXR1cm4gZGV2X2dyb19yZWNlaXZlKG5hcGksIHNrYik7CiB9CiAKLWludCBuYXBpX2dyb19yZWNlaXZlKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK2ludCBuYXBpX3NrYl9maW5pc2goaW50IHJldCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlpZiAobmV0cG9sbF9yZWNlaXZlX3NrYihza2IpKQotCQlyZXR1cm4gTkVUX1JYX0RST1A7CisJaW50IGVyciA9IE5FVF9SWF9TVUNDRVNTOwogCi0Jc3dpdGNoIChfX25hcGlfZ3JvX3JlY2VpdmUobmFwaSwgc2tiKSkgewotCWNhc2UgLTE6CisJc3dpdGNoIChyZXQpIHsKKwljYXNlIEdST19OT1JNQUw6CiAJCXJldHVybiBuZXRpZl9yZWNlaXZlX3NrYihza2IpOwogCi0JY2FzZSAxOgorCWNhc2UgR1JPX0RST1A6CisJCWVyciA9IE5FVF9SWF9EUk9QOworCQkvKiBmYWxsIHRocm91Z2ggKi8KKworCWNhc2UgR1JPX01FUkdFRF9GUkVFOgogCQlrZnJlZV9za2Ioc2tiKTsKIAkJYnJlYWs7CiAJfQogCi0JcmV0dXJuIE5FVF9SWF9TVUNDRVNTOworCXJldHVybiBlcnI7Cit9CitFWFBPUlRfU1lNQk9MKG5hcGlfc2tiX2ZpbmlzaCk7CisKK2ludCBuYXBpX2dyb19yZWNlaXZlKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlza2JfZ3JvX3Jlc2V0X29mZnNldChza2IpOworCisJcmV0dXJuIG5hcGlfc2tiX2ZpbmlzaChfX25hcGlfZ3JvX3JlY2VpdmUobmFwaSwgc2tiKSwgc2tiKTsKIH0KIEVYUE9SVF9TWU1CT0wobmFwaV9ncm9fcmVjZWl2ZSk7CiAKQEAgLTI1MTIsNiArMjUyMSw5IEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5hcGktPmRldjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gbmFwaS0+c2tiOworCXN0cnVjdCBldGhoZHIgKmV0aDsKKwlza2JfZnJhZ190ICpmcmFnOworCWludCBpOwogCiAJbmFwaS0+c2tiID0gTlVMTDsKIApAQCAtMjUyNCwyMCArMjUzNiwzNiBAQAogCX0KIAogCUJVR19PTihpbmZvLT5ucl9mcmFncyA+IE1BWF9TS0JfRlJBR1MpOworCWZyYWcgPSAmaW5mby0+ZnJhZ3NbaW5mby0+bnJfZnJhZ3MgLSAxXTsKKworCWZvciAoaSA9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7IGkgPCBpbmZvLT5ucl9mcmFnczsgaSsrKSB7CisJCXNrYl9maWxsX3BhZ2VfZGVzYyhza2IsIGksIGZyYWctPnBhZ2UsIGZyYWctPnBhZ2Vfb2Zmc2V0LAorCQkJCSAgIGZyYWctPnNpemUpOworCQlmcmFnKys7CisJfQogCXNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgPSBpbmZvLT5ucl9mcmFnczsKLQltZW1jcHkoc2tiX3NoaW5mbyhza2IpLT5mcmFncywgaW5mby0+ZnJhZ3MsIHNpemVvZihpbmZvLT5mcmFncykpOwogCiAJc2tiLT5kYXRhX2xlbiA9IGluZm8tPmxlbjsKIAlza2ItPmxlbiArPSBpbmZvLT5sZW47CiAJc2tiLT50cnVlc2l6ZSArPSBpbmZvLT5sZW47CiAKLQlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBFVEhfSExFTikpIHsKKwlza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOworCXNrYl9ncm9fcmVzZXRfb2Zmc2V0KHNrYik7CisKKwlldGggPSBza2JfZ3JvX2hlYWRlcihza2IsIHNpemVvZigqZXRoKSk7CisJaWYgKCFldGgpIHsKIAkJbmFwaV9yZXVzZV9za2IobmFwaSwgc2tiKTsKIAkJc2tiID0gTlVMTDsKIAkJZ290byBvdXQ7CiAJfQogCi0Jc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTsKKwlza2JfZ3JvX3B1bGwoc2tiLCBzaXplb2YoKmV0aCkpOworCisJLyoKKwkgKiBUaGlzIHdvcmtzIGJlY2F1c2UgdGhlIG9ubHkgcHJvdG9jb2xzIHdlIGNhcmUgYWJvdXQgZG9uJ3QgcmVxdWlyZQorCSAqIHNwZWNpYWwgaGFuZGxpbmcuICBXZSdsbCBmaXggaXQgdXAgcHJvcGVybHkgYXQgdGhlIGVuZC4KKwkgKi8KKwlza2ItPnByb3RvY29sID0gZXRoLT5oX3Byb3RvOwogCiAJc2tiLT5pcF9zdW1tZWQgPSBpbmZvLT5pcF9zdW1tZWQ7CiAJc2tiLT5jc3VtID0gaW5mby0+Y3N1bTsKQEAgLTI1NDcsMzEgKzI1NzUsNDIgQEAKIH0KIEVYUE9SVF9TWU1CT0wobmFwaV9mcmFnaW5mb19za2IpOwogCitpbnQgbmFwaV9mcmFnc19maW5pc2goc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcmV0KQoreworCWludCBlcnIgPSBORVRfUlhfU1VDQ0VTUzsKKworCXN3aXRjaCAocmV0KSB7CisJY2FzZSBHUk9fTk9STUFMOgorCWNhc2UgR1JPX0hFTEQ6CisJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIG5hcGktPmRldik7CisKKwkJaWYgKHJldCA9PSBHUk9fTk9STUFMKQorCQkJcmV0dXJuIG5ldGlmX3JlY2VpdmVfc2tiKHNrYik7CisKKwkJc2tiX2dyb19wdWxsKHNrYiwgLUVUSF9ITEVOKTsKKwkJYnJlYWs7CisKKwljYXNlIEdST19EUk9QOgorCQllcnIgPSBORVRfUlhfRFJPUDsKKwkJLyogZmFsbCB0aHJvdWdoICovCisKKwljYXNlIEdST19NRVJHRURfRlJFRToKKwkJbmFwaV9yZXVzZV9za2IobmFwaSwgc2tiKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0wobmFwaV9mcmFnc19maW5pc2gpOworCiBpbnQgbmFwaV9ncm9fZnJhZ3Moc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBzdHJ1Y3QgbmFwaV9ncm9fZnJhZ2luZm8gKmluZm8pCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IG5hcGlfZnJhZ2luZm9fc2tiKG5hcGksIGluZm8pOwotCWludCBlcnIgPSBORVRfUlhfRFJPUDsKIAogCWlmICghc2tiKQotCQlnb3RvIG91dDsKKwkJcmV0dXJuIE5FVF9SWF9EUk9QOwogCi0JaWYgKG5ldHBvbGxfcmVjZWl2ZV9za2Ioc2tiKSkKLQkJZ290byBvdXQ7Ci0KLQllcnIgPSBORVRfUlhfU1VDQ0VTUzsKLQotCXN3aXRjaCAoX19uYXBpX2dyb19yZWNlaXZlKG5hcGksIHNrYikpIHsKLQljYXNlIC0xOgotCQlyZXR1cm4gbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsKLQotCWNhc2UgMDoKLQkJZ290byBvdXQ7Ci0JfQotCi0JbmFwaV9yZXVzZV9za2IobmFwaSwgc2tiKTsKLQotb3V0OgotCXJldHVybiBlcnI7CisJcmV0dXJuIG5hcGlfZnJhZ3NfZmluaXNoKG5hcGksIHNrYiwgX19uYXBpX2dyb19yZWNlaXZlKG5hcGksIHNrYikpOwogfQogRVhQT1JUX1NZTUJPTChuYXBpX2dyb19mcmFncyk7CiAKQEAgLTI2NTMsNiArMjY5Miw3IEBACiAJCSAgICBpbnQgKCpwb2xsKShzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKiwgaW50KSwgaW50IHdlaWdodCkKIHsKIAlJTklUX0xJU1RfSEVBRCgmbmFwaS0+cG9sbF9saXN0KTsKKwluYXBpLT5ncm9fY291bnQgPSAwOwogCW5hcGktPmdyb19saXN0ID0gTlVMTDsKIAluYXBpLT5za2IgPSBOVUxMOwogCW5hcGktPnBvbGwgPSBwb2xsOwpAQCAtMjY4MSw2ICsyNzIxLDcgQEAKIAl9CiAKIAluYXBpLT5ncm9fbGlzdCA9IE5VTEw7CisJbmFwaS0+Z3JvX2NvdW50ID0gMDsKIH0KIEVYUE9SVF9TWU1CT0wobmV0aWZfbmFwaV9kZWwpOwogCkBAIC0zOTQ5LDYgKzM5OTAsNyBAQAogCQkJICAgIGNtZCA9PSBTSU9DU01JSVJFRyB8fAogCQkJICAgIGNtZCA9PSBTSU9DQlJBRERJRiB8fAogCQkJICAgIGNtZCA9PSBTSU9DQlJERUxJRiB8fAorCQkJICAgIGNtZCA9PSBTSU9DU0hXVFNUQU1QIHx8CiAJCQkgICAgY21kID09IFNJT0NXQU5ERVYpIHsKIAkJCQllcnIgPSAtRU9QTk9UU1VQUDsKIAkJCQlpZiAob3BzLT5uZG9fZG9faW9jdGwpIHsKQEAgLTQxMDMsNiArNDE0NSw3IEBACiAJCWNhc2UgU0lPQ0JPTkRDSEFOR0VBQ1RJVkU6CiAJCWNhc2UgU0lPQ0JSQURESUY6CiAJCWNhc2UgU0lPQ0JSREVMSUY6CisJCWNhc2UgU0lPQ1NIV1RTVEFNUDoKIAkJCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKIAkJCQlyZXR1cm4gLUVQRVJNOwogCQkJLyogZmFsbCB0aHJvdWdoICovCkBAIC01MTk5LDYgKzUyNDIsNyBAQAogCQlxdWV1ZS0+YmFja2xvZy5wb2xsID0gcHJvY2Vzc19iYWNrbG9nOwogCQlxdWV1ZS0+YmFja2xvZy53ZWlnaHQgPSB3ZWlnaHRfcDsKIAkJcXVldWUtPmJhY2tsb2cuZ3JvX2xpc3QgPSBOVUxMOworCQlxdWV1ZS0+YmFja2xvZy5ncm9fY291bnQgPSAwOwogCX0KIAogCWRldl9ib290X3BoYXNlID0gMDsKQEAgLTUyMzEsNiArNTI3NSwxNCBAQAogCiBzdWJzeXNfaW5pdGNhbGwobmV0X2Rldl9pbml0KTsKIAorc3RhdGljIGludCBfX2luaXQgaW5pdGlhbGl6ZV9oYXNocm5kKHZvaWQpCit7CisJZ2V0X3JhbmRvbV9ieXRlcygmc2tiX3R4X2hhc2hybmQsIHNpemVvZihza2JfdHhfaGFzaHJuZCkpOworCXJldHVybiAwOworfQorCitsYXRlX2luaXRjYWxsX3N5bmMoaW5pdGlhbGl6ZV9oYXNocm5kKTsKKwogRVhQT1JUX1NZTUJPTChfX2Rldl9nZXRfYnlfaW5kZXgpOwogRVhQT1JUX1NZTUJPTChfX2Rldl9nZXRfYnlfbmFtZSk7CiBFWFBPUlRfU1lNQk9MKF9fZGV2X3JlbW92ZV9wYWNrKTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Ryb3BfbW9uaXRvci5jIGIvbmV0L2NvcmUvZHJvcF9tb25pdG9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZkMGRjMwotLS0gL2Rldi9udWxsCisrKyBiL25ldC9jb3JlL2Ryb3BfbW9uaXRvci5jCkBAIC0wLDAgKzEsMjYzIEBACisvKgorICogTW9uaXRvcmluZyBjb2RlIGZvciBuZXR3b3JrIGRyb3BwZWQgcGFja2V0IGFsZXJ0cworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBOZWlsIEhvcm1hbiA8bmhvcm1hbkB0dXhkcml2ZXIuY29tPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorI2luY2x1ZGUgPGxpbnV4L2luZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbmV0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbmV0cG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGxpbmsuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRfZHJvcG1vbi5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bmV0L2dlbmV0bGluay5oPgorCisjaW5jbHVkZSA8dHJhY2Uvc2tiLmg+CisKKyNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CisKKyNkZWZpbmUgVFJBQ0VfT04gMQorI2RlZmluZSBUUkFDRV9PRkYgMAorCitzdGF0aWMgdm9pZCBzZW5kX2RtX2FsZXJ0KHN0cnVjdCB3b3JrX3N0cnVjdCAqdW51c2VkKTsKKworCisvKgorICogR2xvYmFscywgb3VyIG5ldGxpbmsgc29ja2V0IHBvaW50ZXIKKyAqIGFuZCB0aGUgd29yayBoYW5kbGUgdGhhdCB3aWxsIHNlbmQgdXAKKyAqIG5ldGxpbmsgYWxlcnRzCisgKi8KK3N0cnVjdCBzb2NrICpkbV9zb2NrOworCitzdHJ1Y3QgcGVyX2NwdV9kbV9kYXRhIHsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgZG1fYWxlcnRfd29yazsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCWF0b21pY190IGRtX2hpdF9jb3VudDsKKwlzdHJ1Y3QgdGltZXJfbGlzdCBzZW5kX3RpbWVyOworfTsKKworc3RhdGljIHN0cnVjdCBnZW5sX2ZhbWlseSBuZXRfZHJvcF9tb25pdG9yX2ZhbWlseSA9IHsKKwkuaWQgICAgICAgICAgICAgPSBHRU5MX0lEX0dFTkVSQVRFLAorCS5oZHJzaXplICAgICAgICA9IDAsCisJLm5hbWUgICAgICAgICAgID0gIk5FVF9ETSIsCisJLnZlcnNpb24gICAgICAgID0gMSwKKwkubWF4YXR0ciAgICAgICAgPSBORVRfRE1fQ01EX01BWCwKK307CisKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcGVyX2NwdV9kbV9kYXRhLCBkbV9jcHVfZGF0YSk7CisKK3N0YXRpYyBpbnQgZG1faGl0X2xpbWl0ID0gNjQ7CitzdGF0aWMgaW50IGRtX2RlbGF5ID0gMTsKKworCitzdGF0aWMgdm9pZCByZXNldF9wZXJfY3B1X2RhdGEoc3RydWN0IHBlcl9jcHVfZG1fZGF0YSAqZGF0YSkKK3sKKwlzaXplX3QgYWw7CisJc3RydWN0IG5ldF9kbV9hbGVydF9tc2cgKm1zZzsKKworCWFsID0gc2l6ZW9mKHN0cnVjdCBuZXRfZG1fYWxlcnRfbXNnKTsKKwlhbCArPSBkbV9oaXRfbGltaXQgKiBzaXplb2Yoc3RydWN0IG5ldF9kbV9kcm9wX3BvaW50KTsKKwlkYXRhLT5za2IgPSBnZW5sbXNnX25ldyhhbCwgR0ZQX0tFUk5FTCk7CisJZ2VubG1zZ19wdXQoZGF0YS0+c2tiLCAwLCAwLCAmbmV0X2Ryb3BfbW9uaXRvcl9mYW1pbHksCisJCQkwLCBORVRfRE1fQ01EX0FMRVJUKTsKKwltc2cgPSBfX25sYV9yZXNlcnZlX25vaGRyKGRhdGEtPnNrYiwgc2l6ZW9mKHN0cnVjdCBuZXRfZG1fYWxlcnRfbXNnKSk7CisJbWVtc2V0KG1zZywgMCwgYWwpOworCWF0b21pY19zZXQoJmRhdGEtPmRtX2hpdF9jb3VudCwgZG1faGl0X2xpbWl0KTsKK30KKworc3RhdGljIHZvaWQgc2VuZF9kbV9hbGVydChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnVudXNlZCkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBwZXJfY3B1X2RtX2RhdGEgKmRhdGEgPSAmX19nZXRfY3B1X3ZhcihkbV9jcHVfZGF0YSk7CisKKwkvKgorCSAqIEdyYWIgdGhlIHNrYiB3ZSdyZSBhYm91dCB0byBzZW5kCisJICovCisJc2tiID0gZGF0YS0+c2tiOworCisJLyoKKwkgKiBSZXBsYWNlIGl0IHdpdGggYSBuZXcgb25lCisJICovCisJcmVzZXRfcGVyX2NwdV9kYXRhKGRhdGEpOworCisJLyoKKwkgKiBTaGlwIGl0IQorCSAqLworCWdlbmxtc2dfbXVsdGljYXN0KHNrYiwgMCwgTkVUX0RNX0dSUF9BTEVSVCwgR0ZQX0tFUk5FTCk7CisKK30KKworLyoKKyAqIFRoaXMgaXMgdGhlIHRpbWVyIGZ1bmN0aW9uIHRvIGRlbGF5IHRoZSBzZW5kaW5nIG9mIGFuIGFsZXJ0CisgKiBpbiB0aGUgZXZlbnQgdGhhdCBtb3JlIGRyb3BzIHdpbGwgYXJyaXZlIGR1cmluZyB0aGUKKyAqIGh5c3RlcmVzaXMgcGVyaW9kLiAgTm90ZSB0aGF0IGl0IG9wZXJhdGVzIHVuZGVyIHRoZSB0aW1lciBpbnRlcnJ1cHQKKyAqIHNvIHdlIGRvbid0IG5lZWQgdG8gZGlzYWJsZSBwcmVlbXB0aW9uIGhlcmUKKyAqLworc3RhdGljIHZvaWQgc2NoZWRfc2VuZF93b3JrKHVuc2lnbmVkIGxvbmcgdW51c2VkKQoreworCXN0cnVjdCBwZXJfY3B1X2RtX2RhdGEgKmRhdGEgPSAgJl9fZ2V0X2NwdV92YXIoZG1fY3B1X2RhdGEpOworCisJc2NoZWR1bGVfd29yaygmZGF0YS0+ZG1fYWxlcnRfd29yayk7Cit9CisKK3N0YXRpYyB2b2lkIHRyYWNlX2tmcmVlX3NrYl9oaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqbG9jYXRpb24pCit7CisJc3RydWN0IG5ldF9kbV9hbGVydF9tc2cgKm1zZzsKKwlzdHJ1Y3Qgbmxtc2doZHIgKm5saDsKKwlpbnQgaTsKKwlzdHJ1Y3QgcGVyX2NwdV9kbV9kYXRhICpkYXRhID0gJl9fZ2V0X2NwdV92YXIoZG1fY3B1X2RhdGEpOworCisKKwlpZiAoIWF0b21pY19hZGRfdW5sZXNzKCZkYXRhLT5kbV9oaXRfY291bnQsIC0xLCAwKSkgeworCQkvKgorCQkgKiB3ZSdyZSBhbHJlYWR5IGF0IHplcm8sIGRpc2NhcmQgdGhpcyBoaXQKKwkJICovCisJCWdvdG8gb3V0OworCX0KKworCW5saCA9IChzdHJ1Y3Qgbmxtc2doZHIgKilkYXRhLT5za2ItPmRhdGE7CisJbXNnID0gZ2VubG1zZ19kYXRhKG5sbXNnX2RhdGEobmxoKSk7CisJZm9yIChpID0gMDsgaSA8IG1zZy0+ZW50cmllczsgaSsrKSB7CisJCWlmICghbWVtY21wKCZsb2NhdGlvbiwgbXNnLT5wb2ludHNbaV0ucGMsIHNpemVvZih2b2lkICopKSkgeworCQkJbXNnLT5wb2ludHNbaV0uY291bnQrKzsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJLyoKKwkgKiBXZSBuZWVkIHRvIGNyZWF0ZSBhIG5ldyBlbnRyeQorCSAqLworCV9fbmxhX3Jlc2VydmVfbm9oZHIoZGF0YS0+c2tiLCBzaXplb2Yoc3RydWN0IG5ldF9kbV9kcm9wX3BvaW50KSk7CisJbWVtY3B5KG1zZy0+cG9pbnRzW21zZy0+ZW50cmllc10ucGMsICZsb2NhdGlvbiwgc2l6ZW9mKHZvaWQgKikpOworCW1zZy0+cG9pbnRzW21zZy0+ZW50cmllc10uY291bnQgPSAxOworCW1zZy0+ZW50cmllcysrOworCisJaWYgKCF0aW1lcl9wZW5kaW5nKCZkYXRhLT5zZW5kX3RpbWVyKSkgeworCQlkYXRhLT5zZW5kX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgZG1fZGVsYXkgKiBIWjsKKwkJYWRkX3RpbWVyX29uKCZkYXRhLT5zZW5kX3RpbWVyLCBzbXBfcHJvY2Vzc29yX2lkKCkpOworCX0KKworb3V0OgorCXJldHVybjsKK30KKworc3RhdGljIGludCBzZXRfYWxsX21vbml0b3JfdHJhY2VzKGludCBzdGF0ZSkKK3sKKwlpbnQgcmMgPSAwOworCisJc3dpdGNoIChzdGF0ZSkgeworCWNhc2UgVFJBQ0VfT046CisJCXJjIHw9IHJlZ2lzdGVyX3RyYWNlX2tmcmVlX3NrYih0cmFjZV9rZnJlZV9za2JfaGl0KTsKKwkJYnJlYWs7CisJY2FzZSBUUkFDRV9PRkY6CisJCXJjIHw9IHVucmVnaXN0ZXJfdHJhY2Vfa2ZyZWVfc2tiKHRyYWNlX2tmcmVlX3NrYl9oaXQpOworCisJCXRyYWNlcG9pbnRfc3luY2hyb25pemVfdW5yZWdpc3RlcigpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyYyA9IDE7CisJCWJyZWFrOworCX0KKworCWlmIChyYykKKwkJcmV0dXJuIC1FSU5QUk9HUkVTUzsKKwlyZXR1cm4gcmM7Cit9CisKKworc3RhdGljIGludCBuZXRfZG1fY21kX2NvbmZpZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKK3sKKwlyZXR1cm4gLUVOT1RTVVBQOworfQorCitzdGF0aWMgaW50IG5ldF9kbV9jbWRfdHJhY2Uoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCXN0cnVjdCBnZW5sX2luZm8gKmluZm8pCit7CisJc3dpdGNoIChpbmZvLT5nZW5saGRyLT5jbWQpIHsKKwljYXNlIE5FVF9ETV9DTURfU1RBUlQ6CisJCXJldHVybiBzZXRfYWxsX21vbml0b3JfdHJhY2VzKFRSQUNFX09OKTsKKwkJYnJlYWs7CisJY2FzZSBORVRfRE1fQ01EX1NUT1A6CisJCXJldHVybiBzZXRfYWxsX21vbml0b3JfdHJhY2VzKFRSQUNFX09GRik7CisJCWJyZWFrOworCX0KKworCXJldHVybiAtRU5PVFNVUFA7Cit9CisKKworc3RhdGljIHN0cnVjdCBnZW5sX29wcyBkcm9wbW9uX29wc1tdID0geworCXsKKwkJLmNtZCA9IE5FVF9ETV9DTURfQ09ORklHLAorCQkuZG9pdCA9IG5ldF9kbV9jbWRfY29uZmlnLAorCX0sCisJeworCQkuY21kID0gTkVUX0RNX0NNRF9TVEFSVCwKKwkJLmRvaXQgPSBuZXRfZG1fY21kX3RyYWNlLAorCX0sCisJeworCQkuY21kID0gTkVUX0RNX0NNRF9TVE9QLAorCQkuZG9pdCA9IG5ldF9kbV9jbWRfdHJhY2UsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGluaXRfbmV0X2Ryb3BfbW9uaXRvcih2b2lkKQoreworCWludCBjcHU7CisJaW50IHJjLCBpLCByZXQ7CisJc3RydWN0IHBlcl9jcHVfZG1fZGF0YSAqZGF0YTsKKwlwcmludGsoS0VSTl9JTkZPICJJbml0YWxpemluZyBuZXR3b3JrIGRyb3AgbW9uaXRvciBzZXJ2aWNlXG4iKTsKKworCWlmIChzaXplb2Yodm9pZCAqKSA+IDgpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gc3RvcmUgcHJvZ3JhbSBjb3VudGVycyBvbiB0aGlzIGFyY2gsIERyb3AgbW9uaXRvciBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVOT1NQQzsKKwl9CisKKwlpZiAoZ2VubF9yZWdpc3Rlcl9mYW1pbHkoJm5ldF9kcm9wX21vbml0b3JfZmFtaWx5KSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZCBub3QgY3JlYXRlIGRyb3AgbW9uaXRvciBuZXRsaW5rIGZhbWlseVxuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCXJjID0gLUVGQVVMVDsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRyb3Btb25fb3BzKTsgaSsrKSB7CisJCXJldCA9IGdlbmxfcmVnaXN0ZXJfb3BzKCZuZXRfZHJvcF9tb25pdG9yX2ZhbWlseSwKKwkJCQkJJmRyb3Btb25fb3BzW2ldKTsKKwkJaWYgKHJldCkgeworCQkJcHJpbnRrKEtFUk5fQ1JJVCAiZmFpbGVkIHRvIHJlZ2lzdGVyIG9wZXJhdGlvbiAlZFxuIiwKKwkJCQlkcm9wbW9uX29wc1tpXS5jbWQpOworCQkJZ290byBvdXRfdW5yZWc7CisJCX0KKwl9CisKKwlyYyA9IDA7CisKKwlmb3JfZWFjaF9wcmVzZW50X2NwdShjcHUpIHsKKwkJZGF0YSA9ICZwZXJfY3B1KGRtX2NwdV9kYXRhLCBjcHUpOworCQlyZXNldF9wZXJfY3B1X2RhdGEoZGF0YSk7CisJCUlOSVRfV09SSygmZGF0YS0+ZG1fYWxlcnRfd29yaywgc2VuZF9kbV9hbGVydCk7CisJCWluaXRfdGltZXIoJmRhdGEtPnNlbmRfdGltZXIpOworCQlkYXRhLT5zZW5kX3RpbWVyLmRhdGEgPSBjcHU7CisJCWRhdGEtPnNlbmRfdGltZXIuZnVuY3Rpb24gPSBzY2hlZF9zZW5kX3dvcms7CisJfQorCWdvdG8gb3V0OworCitvdXRfdW5yZWc6CisJZ2VubF91bnJlZ2lzdGVyX2ZhbWlseSgmbmV0X2Ryb3BfbW9uaXRvcl9mYW1pbHkpOworb3V0OgorCXJldHVybiByYzsKK30KKworbGF0ZV9pbml0Y2FsbChpbml0X25ldF9kcm9wX21vbml0b3IpOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZXRodG9vbC5jIGIvbmV0L2NvcmUvZXRodG9vbC5jCmluZGV4IDk0NzcxMGEuLjI0NGNhNTYgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2V0aHRvb2wuYworKysgYi9uZXQvY29yZS9ldGh0b29sLmMKQEAgLTIwOSwzNCArMjA5LDYyIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZXRodG9vbF9zZXRfcnhoYXNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgX191c2VyICp1c2VyYWRkcikKK3N0YXRpYyBpbnQgZXRodG9vbF9zZXRfcnhuZmMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCBfX3VzZXIgKnVzZXJhZGRyKQogewogCXN0cnVjdCBldGh0b29sX3J4bmZjIGNtZDsKIAotCWlmICghZGV2LT5ldGh0b29sX29wcy0+c2V0X3J4aGFzaCkKKwlpZiAoIWRldi0+ZXRodG9vbF9vcHMtPnNldF9yeG5mYykKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJaWYgKGNvcHlfZnJvbV91c2VyKCZjbWQsIHVzZXJhZGRyLCBzaXplb2YoY21kKSkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JcmV0dXJuIGRldi0+ZXRodG9vbF9vcHMtPnNldF9yeGhhc2goZGV2LCAmY21kKTsKKwlyZXR1cm4gZGV2LT5ldGh0b29sX29wcy0+c2V0X3J4bmZjKGRldiwgJmNtZCk7CiB9CiAKLXN0YXRpYyBpbnQgZXRodG9vbF9nZXRfcnhoYXNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgX191c2VyICp1c2VyYWRkcikKK3N0YXRpYyBpbnQgZXRodG9vbF9nZXRfcnhuZmMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCBfX3VzZXIgKnVzZXJhZGRyKQogewogCXN0cnVjdCBldGh0b29sX3J4bmZjIGluZm87CisJY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzICpvcHMgPSBkZXYtPmV0aHRvb2xfb3BzOworCWludCByZXQ7CisJdm9pZCAqcnVsZV9idWYgPSBOVUxMOwogCi0JaWYgKCFkZXYtPmV0aHRvb2xfb3BzLT5nZXRfcnhoYXNoKQorCWlmICghb3BzLT5nZXRfcnhuZmMpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAogCWlmIChjb3B5X2Zyb21fdXNlcigmaW5mbywgdXNlcmFkZHIsIHNpemVvZihpbmZvKSkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JZGV2LT5ldGh0b29sX29wcy0+Z2V0X3J4aGFzaChkZXYsICZpbmZvKTsKKwlpZiAoaW5mby5jbWQgPT0gRVRIVE9PTF9HUlhDTFNSTEFMTCkgeworCQlpZiAoaW5mby5ydWxlX2NudCA+IDApIHsKKwkJCXJ1bGVfYnVmID0ga21hbGxvYyhpbmZvLnJ1bGVfY250ICogc2l6ZW9mKHUzMiksCisJCQkJCSAgIEdGUF9VU0VSKTsKKwkJCWlmICghcnVsZV9idWYpCisJCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwl9CiAKKwlyZXQgPSBvcHMtPmdldF9yeG5mYyhkZXYsICZpbmZvLCBydWxlX2J1Zik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyX291dDsKKworCXJldCA9IC1FRkFVTFQ7CiAJaWYgKGNvcHlfdG9fdXNlcih1c2VyYWRkciwgJmluZm8sIHNpemVvZihpbmZvKSkpCi0JCXJldHVybiAtRUZBVUxUOwotCXJldHVybiAwOworCQlnb3RvIGVycl9vdXQ7CisKKwlpZiAocnVsZV9idWYpIHsKKwkJdXNlcmFkZHIgKz0gb2Zmc2V0b2Yoc3RydWN0IGV0aHRvb2xfcnhuZmMsIHJ1bGVfbG9jcyk7CisJCWlmIChjb3B5X3RvX3VzZXIodXNlcmFkZHIsIHJ1bGVfYnVmLAorCQkJCSBpbmZvLnJ1bGVfY250ICogc2l6ZW9mKHUzMikpKQorCQkJZ290byBlcnJfb3V0OworCX0KKwlyZXQgPSAwOworCitlcnJfb3V0OgorCWlmIChydWxlX2J1ZikKKwkJa2ZyZWUocnVsZV9idWYpOworCisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBldGh0b29sX2dldF9yZWdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNoYXIgX191c2VyICp1c2VyYWRkcikKQEAgLTkwMSw2ICs5MjksMTAgQEAKIAljYXNlIEVUSFRPT0xfR0ZMQUdTOgogCWNhc2UgRVRIVE9PTF9HUEZMQUdTOgogCWNhc2UgRVRIVE9PTF9HUlhGSDoKKwljYXNlIEVUSFRPT0xfR1JYUklOR1M6CisJY2FzZSBFVEhUT09MX0dSWENMU1JMQ05UOgorCWNhc2UgRVRIVE9PTF9HUlhDTFNSVUxFOgorCWNhc2UgRVRIVE9PTF9HUlhDTFNSTEFMTDoKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQpAQCAtMTA1MiwxMCArMTA4NCwxNiBAQAogCQkJCSAgICAgICBkZXYtPmV0aHRvb2xfb3BzLT5zZXRfcHJpdl9mbGFncyk7CiAJCWJyZWFrOwogCWNhc2UgRVRIVE9PTF9HUlhGSDoKLQkJcmMgPSBldGh0b29sX2dldF9yeGhhc2goZGV2LCB1c2VyYWRkcik7CisJY2FzZSBFVEhUT09MX0dSWFJJTkdTOgorCWNhc2UgRVRIVE9PTF9HUlhDTFNSTENOVDoKKwljYXNlIEVUSFRPT0xfR1JYQ0xTUlVMRToKKwljYXNlIEVUSFRPT0xfR1JYQ0xTUkxBTEw6CisJCXJjID0gZXRodG9vbF9nZXRfcnhuZmMoZGV2LCB1c2VyYWRkcik7CiAJCWJyZWFrOwogCWNhc2UgRVRIVE9PTF9TUlhGSDoKLQkJcmMgPSBldGh0b29sX3NldF9yeGhhc2goZGV2LCB1c2VyYWRkcik7CisJY2FzZSBFVEhUT09MX1NSWENMU1JMREVMOgorCWNhc2UgRVRIVE9PTF9TUlhDTFNSTElOUzoKKwkJcmMgPSBldGh0b29sX3NldF9yeG5mYyhkZXYsIHVzZXJhZGRyKTsKIAkJYnJlYWs7CiAJY2FzZSBFVEhUT09MX0dHUk86CiAJCXJjID0gZXRodG9vbF9nZXRfZ3JvKGRldiwgdXNlcmFkZHIpOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmliX3J1bGVzLmMgYi9uZXQvY29yZS9maWJfcnVsZXMuYwppbmRleCAzMmIzYTAxLi45ODY5MWUxIDEwMDY0NAotLS0gYS9uZXQvY29yZS9maWJfcnVsZXMuYworKysgYi9uZXQvY29yZS9maWJfcnVsZXMuYwpAQCAtNTg4LDcgKzU4OCw4IEBACiAJCWdvdG8gZXJyb3V0OwogCX0KIAotCWVyciA9IHJ0bmxfbm90aWZ5KHNrYiwgbmV0LCBwaWQsIG9wcy0+bmxncm91cCwgbmxoLCBHRlBfS0VSTkVMKTsKKwlydG5sX25vdGlmeShza2IsIG5ldCwgcGlkLCBvcHMtPm5sZ3JvdXAsIG5saCwgR0ZQX0tFUk5FTCk7CisJcmV0dXJuOwogZXJyb3V0OgogCWlmIChlcnIgPCAwKQogCQlydG5sX3NldF9za19lcnIobmV0LCBvcHMtPm5sZ3JvdXAsIGVycik7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZWlnaGJvdXIuYyBiL25ldC9jb3JlL25laWdoYm91ci5jCmluZGV4IDI3OGExNDIuLmExY2JjZTcgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL25laWdoYm91ci5jCisrKyBiL25ldC9jb3JlL25laWdoYm91ci5jCkBAIC04NzEsOCArODcxLDcgQEAKIAkJd3JpdGVfdW5sb2NrKCZuZWlnaC0+bG9jayk7CiAJCW5laWdoLT5vcHMtPnNvbGljaXQobmVpZ2gsIHNrYik7CiAJCWF0b21pY19pbmMoJm5laWdoLT5wcm9iZXMpOwotCQlpZiAoc2tiKQotCQkJa2ZyZWVfc2tiKHNrYik7CisJCWtmcmVlX3NrYihza2IpOwogCX0gZWxzZSB7CiBvdXQ6CiAJCXdyaXRlX3VubG9jaygmbmVpZ2gtPmxvY2spOwpAQCAtOTA4LDggKzkwNyw3IEBACiAJCQluZWlnaC0+dXBkYXRlZCA9IGppZmZpZXM7CiAJCQl3cml0ZV91bmxvY2tfYmgoJm5laWdoLT5sb2NrKTsKIAotCQkJaWYgKHNrYikKLQkJCQlrZnJlZV9za2Ioc2tiKTsKKwkJCWtmcmVlX3NrYihza2IpOwogCQkJcmV0dXJuIDE7CiAJCX0KIAl9IGVsc2UgaWYgKG5laWdoLT5udWRfc3RhdGUgJiBOVURfU1RBTEUpIHsKQEAgLTE2NTYsNyArMTY1NCwxMSBAQAogCQkJCWZsYWdzICY9IH5ORUlHSF9VUERBVEVfRl9PVkVSUklERTsKIAkJfQogCi0JCWVyciA9IG5laWdoX3VwZGF0ZShuZWlnaCwgbGxhZGRyLCBuZG0tPm5kbV9zdGF0ZSwgZmxhZ3MpOworCQlpZiAobmRtLT5uZG1fZmxhZ3MgJiBOVEZfVVNFKSB7CisJCQluZWlnaF9ldmVudF9zZW5kKG5laWdoLCBOVUxMKTsKKwkJCWVyciA9IDA7CisJCX0gZWxzZQorCQkJZXJyID0gbmVpZ2hfdXBkYXRlKG5laWdoLCBsbGFkZHIsIG5kbS0+bmRtX3N0YXRlLCBmbGFncyk7CiAJCW5laWdoX3JlbGVhc2UobmVpZ2gpOwogCQlnb3RvIG91dF9kZXZfcHV0OwogCX0KQEAgLTI1MzQsNyArMjUzNiw4IEBACiAJCWtmcmVlX3NrYihza2IpOwogCQlnb3RvIGVycm91dDsKIAl9Ci0JZXJyID0gcnRubF9ub3RpZnkoc2tiLCBuZXQsIDAsIFJUTkxHUlBfTkVJR0gsIE5VTEwsIEdGUF9BVE9NSUMpOworCXJ0bmxfbm90aWZ5KHNrYiwgbmV0LCAwLCBSVE5MR1JQX05FSUdILCBOVUxMLCBHRlBfQVRPTUlDKTsKKwlyZXR1cm47CiBlcnJvdXQ6CiAJaWYgKGVyciA8IDApCiAJCXJ0bmxfc2V0X3NrX2VycihuZXQsIFJUTkxHUlBfTkVJR0gsIGVycik7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZXQtc3lzZnMuYyBiL25ldC9jb3JlL25ldC1zeXNmcy5jCmluZGV4IDQ4NGY1ODcuLjJkYTU5YTAgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL25ldC1zeXNmcy5jCisrKyBiL25ldC9jb3JlL25ldC1zeXNmcy5jCkBAIC00OTgsNyArNDk4LDcgQEAKIAlkZXYtPmdyb3VwcyA9IGdyb3VwczsKIAogCUJVSUxEX0JVR19PTihCVVNfSURfU0laRSA8IElGTkFNU0laKTsKLQlkZXZfc2V0X25hbWUoZGV2LCBuZXQtPm5hbWUpOworCWRldl9zZXRfbmFtZShkZXYsICIlcyIsIG5ldC0+bmFtZSk7CiAKICNpZmRlZiBDT05GSUdfU1lTRlMKIAkqZ3JvdXBzKysgPSAmbmV0c3RhdF9ncm91cDsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldC10cmFjZXMuYyBiL25ldC9jb3JlL25ldC10cmFjZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGZiNDU2Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L2NvcmUvbmV0LXRyYWNlcy5jCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgKiBjb25zb2xpZGF0ZXMgdHJhY2UgcG9pbnQgZGVmaW5pdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTmVpbCBIb3JtYW4gPG5ob3JtYW5AdHV4ZHJpdmVyLmNvbT4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KKyNpbmNsdWRlIDxsaW51eC9pbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW5ldC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldHBvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGxpbmsuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRfZHJvcG1vbi5oPgorI2luY2x1ZGUgPHRyYWNlL3NrYi5oPgorCisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorI2luY2x1ZGUgPGFzbS9iaXRvcHMuaD4KKworCitERUZJTkVfVFJBQ0Uoa2ZyZWVfc2tiKTsKK0VYUE9SVF9UUkFDRVBPSU5UX1NZTUJPTF9HUEwoa2ZyZWVfc2tiKTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3BrdGdlbi5jIGIvbmV0L2NvcmUvcGt0Z2VuLmMKaW5kZXggNjU0OTg0OC4uMzJkNDE5ZiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvcGt0Z2VuLmMKKysrIGIvbmV0L2NvcmUvcGt0Z2VuLmMKQEAgLTMyNzUsOCArMzI3NSw3IEBACiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBrdF9kZXYsICZ0LT5pZl9saXN0LCBsaXN0KSB7CiAJCXBrdGdlbl9zdG9wX2RldmljZShwa3RfZGV2KTsKLQkJaWYgKHBrdF9kZXYtPnNrYikKLQkJCWtmcmVlX3NrYihwa3RfZGV2LT5za2IpOworCQlrZnJlZV9za2IocGt0X2Rldi0+c2tiKTsKIAogCQlwa3RfZGV2LT5za2IgPSBOVUxMOwogCX0KQEAgLTMzMDMsOCArMzMwMiw3IEBACiAJCWlmICghY3VyLT5yZW1vdmFsX21hcmspCiAJCQljb250aW51ZTsKIAotCQlpZiAoY3VyLT5za2IpCi0JCQlrZnJlZV9za2IoY3VyLT5za2IpOworCQlrZnJlZV9za2IoY3VyLT5za2IpOwogCQljdXItPnNrYiA9IE5VTEw7CiAKIAkJcGt0Z2VuX3JlbW92ZV9kZXZpY2UodCwgY3VyKTsKQEAgLTMzMjgsOCArMzMyNiw3IEBACiAJbGlzdF9mb3JfZWFjaF9zYWZlKHEsIG4sICZ0LT5pZl9saXN0KSB7CiAJCWN1ciA9IGxpc3RfZW50cnkocSwgc3RydWN0IHBrdGdlbl9kZXYsIGxpc3QpOwogCi0JCWlmIChjdXItPnNrYikKLQkJCWtmcmVlX3NrYihjdXItPnNrYik7CisJCWtmcmVlX3NrYihjdXItPnNrYik7CiAJCWN1ci0+c2tiID0gTlVMTDsKIAogCQlwa3RnZW5fcmVtb3ZlX2RldmljZSh0LCBjdXIpOwpAQCAtMzM5Myw4ICszMzkwLDcgQEAKIAogCQlpZiAoIW5ldGlmX3J1bm5pbmcob2RldikpIHsKIAkJCXBrdGdlbl9zdG9wX2RldmljZShwa3RfZGV2KTsKLQkJCWlmIChwa3RfZGV2LT5za2IpCi0JCQkJa2ZyZWVfc2tiKHBrdF9kZXYtPnNrYik7CisJCQlrZnJlZV9za2IocGt0X2Rldi0+c2tiKTsKIAkJCXBrdF9kZXYtPnNrYiA9IE5VTEw7CiAJCQlnb3RvIG91dDsKIAkJfQpAQCAtMzQxNSw4ICszNDExLDcgQEAKIAkJaWYgKCgrK3BrdF9kZXYtPmNsb25lX2NvdW50ID49IHBrdF9kZXYtPmNsb25lX3NrYikKIAkJICAgIHx8ICghcGt0X2Rldi0+c2tiKSkgewogCQkJLyogYnVpbGQgYSBuZXcgcGt0ICovCi0JCQlpZiAocGt0X2Rldi0+c2tiKQotCQkJCWtmcmVlX3NrYihwa3RfZGV2LT5za2IpOworCQkJa2ZyZWVfc2tiKHBrdF9kZXYtPnNrYik7CiAKIAkJCXBrdF9kZXYtPnNrYiA9IGZpbGxfcGFja2V0KG9kZXYsIHBrdF9kZXYpOwogCQkJaWYgKHBrdF9kZXYtPnNrYiA9PSBOVUxMKSB7CkBAIC0zNDk4LDggKzM0OTMsNyBAQAogCiAJCS8qIERvbmUgd2l0aCB0aGlzICovCiAJCXBrdGdlbl9zdG9wX2RldmljZShwa3RfZGV2KTsKLQkJaWYgKHBrdF9kZXYtPnNrYikKLQkJCWtmcmVlX3NrYihwa3RfZGV2LT5za2IpOworCQlrZnJlZV9za2IocGt0X2Rldi0+c2tiKTsKIAkJcGt0X2Rldi0+c2tiID0gTlVMTDsKIAl9CiBvdXQ6OwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMgYi9uZXQvY29yZS9ydG5ldGxpbmsuYwppbmRleCA3OTBkZDIwLi5kNzgwMzBmIDEwMDY0NAotLS0gYS9uZXQvY29yZS9ydG5ldGxpbmsuYworKysgYi9uZXQvY29yZS9ydG5ldGxpbmsuYwpAQCAtNDU1LDggKzQ1NSw4IEBACiAJcmV0dXJuIG5sbXNnX3VuaWNhc3QocnRubCwgc2tiLCBwaWQpOwogfQogCi1pbnQgcnRubF9ub3RpZnkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldCAqbmV0LCB1MzIgcGlkLCB1MzIgZ3JvdXAsCi0JCXN0cnVjdCBubG1zZ2hkciAqbmxoLCBnZnBfdCBmbGFncykKK3ZvaWQgcnRubF9ub3RpZnkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldCAqbmV0LCB1MzIgcGlkLCB1MzIgZ3JvdXAsCisJCSBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgZ2ZwX3QgZmxhZ3MpCiB7CiAJc3RydWN0IHNvY2sgKnJ0bmwgPSBuZXQtPnJ0bmw7CiAJaW50IHJlcG9ydCA9IDA7CkBAIC00NjQsNyArNDY0LDcgQEAKIAlpZiAobmxoKQogCQlyZXBvcnQgPSBubG1zZ19yZXBvcnQobmxoKTsKIAotCXJldHVybiBubG1zZ19ub3RpZnkocnRubCwgc2tiLCBwaWQsIGdyb3VwLCByZXBvcnQsIGZsYWdzKTsKKwlubG1zZ19ub3RpZnkocnRubCwgc2tiLCBwaWQsIGdyb3VwLCByZXBvcnQsIGZsYWdzKTsKIH0KIAogdm9pZCBydG5sX3NldF9za19lcnIoc3RydWN0IG5ldCAqbmV0LCB1MzIgZ3JvdXAsIGludCBlcnJvcikKQEAgLTEyNDYsNyArMTI0Niw4IEBACiAJCWtmcmVlX3NrYihza2IpOwogCQlnb3RvIGVycm91dDsKIAl9Ci0JZXJyID0gcnRubF9ub3RpZnkoc2tiLCBuZXQsIDAsIFJUTkxHUlBfTElOSywgTlVMTCwgR0ZQX0tFUk5FTCk7CisJcnRubF9ub3RpZnkoc2tiLCBuZXQsIDAsIFJUTkxHUlBfTElOSywgTlVMTCwgR0ZQX0tFUk5FTCk7CisJcmV0dXJuOwogZXJyb3V0OgogCWlmIChlcnIgPCAwKQogCQlydG5sX3NldF9za19lcnIobmV0LCBSVE5MR1JQX0xJTkssIGVycik7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9za2J1ZmYuYyBiL25ldC9jb3JlL3NrYnVmZi5jCmluZGV4IGM2YTZiMTYuLjZhY2JmOWUgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3NrYnVmZi5jCisrKyBiL25ldC9jb3JlL3NrYnVmZi5jCkBAIC01NSw2ICs1NSw3IEBACiAjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJycXVldWUuaD4KIAogI2luY2x1ZGUgPG5ldC9wcm90b2NvbC5oPgogI2luY2x1ZGUgPG5ldC9kc3QuaD4KQEAgLTY0LDYgKzY1LDcgQEAKIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPHRyYWNlL3NrYi5oPgogCiAjaW5jbHVkZSAia21hcF9za2IuaCIKIApAQCAtMTIzLDYgKzEyNSw3IEBACiAJICAgICAgIHNrYi0+ZGV2ID8gc2tiLT5kZXYtPm5hbWUgOiAiPE5VTEw+Iik7CiAJQlVHKCk7CiB9CitFWFBPUlRfU1lNQk9MKHNrYl9vdmVyX3BhbmljKTsKIAogLyoqCiAgKglza2JfdW5kZXJfcGFuaWMJLSAJcHJpdmF0ZSBmdW5jdGlvbgpAQCAtMTQyLDYgKzE0NSw3IEBACiAJICAgICAgIHNrYi0+ZGV2ID8gc2tiLT5kZXYtPm5hbWUgOiAiPE5VTEw+Iik7CiAJQlVHKCk7CiB9CitFWFBPUlRfU1lNQk9MKHNrYl91bmRlcl9wYW5pYyk7CiAKIC8qIAlBbGxvY2F0ZSBhIG5ldyBza2J1ZmYuIFdlIGRvIHRoaXMgb3Vyc2VsdmVzIHNvIHdlIGNhbiBmaWxsIGluIGEgZmV3CiAgKgkncHJpdmF0ZScgZmllbGRzIGFuZCBhbHNvIGRvIG1lbW9yeSBzdGF0aXN0aWNzIHRvIGZpbmQgYWxsIHRoZQpAQCAtMjA1LDcgKzIwOSw5IEBACiAJc2hpbmZvLT5nc29fc2VncyA9IDA7CiAJc2hpbmZvLT5nc29fdHlwZSA9IDA7CiAJc2hpbmZvLT5pcDZfZnJhZ19pZCA9IDA7CisJc2hpbmZvLT50eF9mbGFncy5mbGFncyA9IDA7CiAJc2hpbmZvLT5mcmFnX2xpc3QgPSBOVUxMOworCW1lbXNldCgmc2hpbmZvLT5od3RzdGFtcHMsIDAsIHNpemVvZihzaGluZm8tPmh3dHN0YW1wcykpOwogCiAJaWYgKGZjbG9uZSkgewogCQlzdHJ1Y3Qgc2tfYnVmZiAqY2hpbGQgPSBza2IgKyAxOwpAQCAtMjIzLDYgKzIyOSw3IEBACiAJc2tiID0gTlVMTDsKIAlnb3RvIG91dDsKIH0KK0VYUE9SVF9TWU1CT0woX19hbGxvY19za2IpOwogCiAvKioKICAqCV9fbmV0ZGV2X2FsbG9jX3NrYiAtIGFsbG9jYXRlIGFuIHNrYnVmZiBmb3Igcnggb24gYSBzcGVjaWZpYyBkZXZpY2UKQEAgLTI1MCw2ICsyNTcsNyBAQAogCX0KIAlyZXR1cm4gc2tiOwogfQorRVhQT1JUX1NZTUJPTChfX25ldGRldl9hbGxvY19za2IpOwogCiBzdHJ1Y3QgcGFnZSAqX19uZXRkZXZfYWxsb2NfcGFnZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBnZnBfdCBnZnBfbWFzaykKIHsKQEAgLTQxOCw2ICs0MjYsNyBAQAogCXNrYl9yZWxlYXNlX2FsbChza2IpOwogCWtmcmVlX3NrYm1lbShza2IpOwogfQorRVhQT1JUX1NZTUJPTChfX2tmcmVlX3NrYik7CiAKIC8qKgogICoJa2ZyZWVfc2tiIC0gZnJlZSBhbiBza19idWZmCkBAIC00MzQsOCArNDQzLDMwIEBACiAJCXNtcF9ybWIoKTsKIAllbHNlIGlmIChsaWtlbHkoIWF0b21pY19kZWNfYW5kX3Rlc3QoJnNrYi0+dXNlcnMpKSkKIAkJcmV0dXJuOworCXRyYWNlX2tmcmVlX3NrYihza2IsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CiAJX19rZnJlZV9za2Ioc2tiKTsKIH0KK0VYUE9SVF9TWU1CT0woa2ZyZWVfc2tiKTsKKworLyoqCisgKgljb25zdW1lX3NrYiAtIGZyZWUgYW4gc2tidWZmCisgKglAc2tiOiBidWZmZXIgdG8gZnJlZQorICoKKyAqCURyb3AgYSByZWYgdG8gdGhlIGJ1ZmZlciBhbmQgZnJlZSBpdCBpZiB0aGUgdXNhZ2UgY291bnQgaGFzIGhpdCB6ZXJvCisgKglGdW5jdGlvbnMgaWRlbnRpY2FsbHkgdG8ga2ZyZWVfc2tiLCBidXQga2ZyZWVfc2tiIGFzc3VtZXMgdGhhdCB0aGUgZnJhbWUKKyAqCWlzIGJlaW5nIGRyb3BwZWQgYWZ0ZXIgYSBmYWlsdXJlIGFuZCBub3RlcyB0aGF0CisgKi8KK3ZvaWQgY29uc3VtZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlpZiAodW5saWtlbHkoIXNrYikpCisJCXJldHVybjsKKwlpZiAobGlrZWx5KGF0b21pY19yZWFkKCZza2ItPnVzZXJzKSA9PSAxKSkKKwkJc21wX3JtYigpOworCWVsc2UgaWYgKGxpa2VseSghYXRvbWljX2RlY19hbmRfdGVzdCgmc2tiLT51c2VycykpKQorCQlyZXR1cm47CisJX19rZnJlZV9za2Ioc2tiKTsKK30KK0VYUE9SVF9TWU1CT0woY29uc3VtZV9za2IpOwogCiAvKioKICAqCXNrYl9yZWN5Y2xlX2NoZWNrIC0gY2hlY2sgaWYgc2tiIGNhbiBiZSByZXVzZWQgZm9yIHJlY2VpdmUKQEAgLTYwNSw2ICs2MzYsNyBAQAogCiAJcmV0dXJuIF9fc2tiX2Nsb25lKG4sIHNrYik7CiB9CitFWFBPUlRfU1lNQk9MKHNrYl9jbG9uZSk7CiAKIHN0YXRpYyB2b2lkIGNvcHlfc2tiX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqbmV3LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqb2xkKQogewpAQCAtNjcxLDcgKzcwMyw3IEBACiAJY29weV9za2JfaGVhZGVyKG4sIHNrYik7CiAJcmV0dXJuIG47CiB9Ci0KK0VYUE9SVF9TWU1CT0woc2tiX2NvcHkpOwogCiAvKioKICAqCXBza2JfY29weQktCWNyZWF0ZSBjb3B5IG9mIGFuIHNrX2J1ZmYgd2l0aCBwcml2YXRlIGhlYWQuCkBAIC03MzAsNiArNzYyLDcgQEAKIG91dDoKIAlyZXR1cm4gbjsKIH0KK0VYUE9SVF9TWU1CT0wocHNrYl9jb3B5KTsKIAogLyoqCiAgKglwc2tiX2V4cGFuZF9oZWFkIC0gcmVhbGxvY2F0ZSBoZWFkZXIgb2YgJnNrX2J1ZmYKQEAgLTgxMyw2ICs4NDYsNyBAQAogbm9kYXRhOgogCXJldHVybiAtRU5PTUVNOwogfQorRVhQT1JUX1NZTUJPTChwc2tiX2V4cGFuZF9oZWFkKTsKIAogLyogTWFrZSBwcml2YXRlIGNvcHkgb2Ygc2tiIHdpdGggd3JpdGFibGUgaGVhZCBhbmQgc29tZSBoZWFkcm9vbSAqLwogCkBAIC04MzMsNyArODY3LDcgQEAKIAl9CiAJcmV0dXJuIHNrYjI7CiB9Ci0KK0VYUE9SVF9TWU1CT0woc2tiX3JlYWxsb2NfaGVhZHJvb20pOwogCiAvKioKICAqCXNrYl9jb3B5X2V4cGFuZAktCWNvcHkgYW5kIGV4cGFuZCBza19idWZmCkBAIC04OTgsNiArOTMyLDcgQEAKIAogCXJldHVybiBuOwogfQorRVhQT1JUX1NZTUJPTChza2JfY29weV9leHBhbmQpOwogCiAvKioKICAqCXNrYl9wYWQJCQktCXplcm8gcGFkIHRoZSB0YWlsIG9mIGFuIHNrYgpAQCAtOTQzLDYgKzk3OCw3IEBACiAJa2ZyZWVfc2tiKHNrYik7CiAJcmV0dXJuIGVycjsKIH0KK0VYUE9SVF9TWU1CT0woc2tiX3BhZCk7CiAKIC8qKgogICoJc2tiX3B1dCAtIGFkZCBkYXRhIHRvIGEgYnVmZmVyCkBAIC0xMTAwLDYgKzExMzYsNyBAQAogCiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MKF9fX3Bza2JfdHJpbSk7CiAKIC8qKgogICoJX19wc2tiX3B1bGxfdGFpbCAtIGFkdmFuY2UgdGFpbCBvZiBza2IgaGVhZGVyCkBAIC0xMTkzLDggKzEyMzAsNyBAQAogCQkJCQlpbnNwID0gbGlzdDsKIAkJCQl9CiAJCQkJaWYgKCFwc2tiX3B1bGwobGlzdCwgZWF0KSkgewotCQkJCQlpZiAoY2xvbmUpCi0JCQkJCQlrZnJlZV9za2IoY2xvbmUpOworCQkJCQlrZnJlZV9za2IoY2xvbmUpOwogCQkJCQlyZXR1cm4gTlVMTDsKIAkJCQl9CiAJCQkJYnJlYWs7CkBAIC0xMjM4LDYgKzEyNzQsNyBAQAogCiAJcmV0dXJuIHNrYl90YWlsX3BvaW50ZXIoc2tiKTsKIH0KK0VYUE9SVF9TWU1CT0woX19wc2tiX3B1bGxfdGFpbCk7CiAKIC8qIENvcHkgc29tZSBkYXRhIGJpdHMgZnJvbSBza2IgdG8ga2VybmVsIGJ1ZmZlci4gKi8KIApAQCAtMTMxNSw2ICsxMzUyLDcgQEAKIGZhdWx0OgogCXJldHVybiAtRUZBVUxUOwogfQorRVhQT1JUX1NZTUJPTChza2JfY29weV9iaXRzKTsKIAogLyoKICAqIENhbGxiYWNrIGZyb20gc3BsaWNlX3RvX3BpcGUoKSwgaWYgd2UgbmVlZCB0byByZWxlYXNlIHNvbWUgcGFnZXMKQEAgLTEzMjUsMTQgKzEzNjMsMzkgQEAKIAlwdXRfcGFnZShzcGQtPnBhZ2VzW2ldKTsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqbGluZWFyX3RvX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBsZW4sCi0JCQkJCSAgdW5zaWduZWQgaW50IG9mZnNldCkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKmxpbmVhcl90b19wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgKmxlbiwKKwkJCQkJICB1bnNpZ25lZCBpbnQgKm9mZnNldCwKKwkJCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBwYWdlICpwID0gYWxsb2NfcGFnZXMoR0ZQX0tFUk5FTCwgMCk7CisJc3RydWN0IHNvY2sgKnNrID0gc2tiLT5zazsKKwlzdHJ1Y3QgcGFnZSAqcCA9IHNrLT5za19zbmRtc2dfcGFnZTsKKwl1bnNpZ25lZCBpbnQgb2ZmOwogCi0JaWYgKCFwKQotCQlyZXR1cm4gTlVMTDsKLQltZW1jcHkocGFnZV9hZGRyZXNzKHApICsgb2Zmc2V0LCBwYWdlX2FkZHJlc3MocGFnZSkgKyBvZmZzZXQsIGxlbik7CisJaWYgKCFwKSB7CituZXdfcGFnZToKKwkJcCA9IHNrLT5za19zbmRtc2dfcGFnZSA9IGFsbG9jX3BhZ2VzKHNrLT5za19hbGxvY2F0aW9uLCAwKTsKKwkJaWYgKCFwKQorCQkJcmV0dXJuIE5VTEw7CisKKwkJb2ZmID0gc2stPnNrX3NuZG1zZ19vZmYgPSAwOworCQkvKiBob2xkIG9uZSByZWYgdG8gdGhpcyBwYWdlIHVudGlsIGl0J3MgZnVsbCAqLworCX0gZWxzZSB7CisJCXVuc2lnbmVkIGludCBtbGVuOworCisJCW9mZiA9IHNrLT5za19zbmRtc2dfb2ZmOworCQltbGVuID0gUEFHRV9TSVpFIC0gb2ZmOworCQlpZiAobWxlbiA8IDY0ICYmIG1sZW4gPCAqbGVuKSB7CisJCQlwdXRfcGFnZShwKTsKKwkJCWdvdG8gbmV3X3BhZ2U7CisJCX0KKworCQkqbGVuID0gbWluX3QodW5zaWduZWQgaW50LCAqbGVuLCBtbGVuKTsKKwl9CisKKwltZW1jcHkocGFnZV9hZGRyZXNzKHApICsgb2ZmLCBwYWdlX2FkZHJlc3MocGFnZSkgKyAqb2Zmc2V0LCAqbGVuKTsKKwlzay0+c2tfc25kbXNnX29mZiArPSAqbGVuOworCSpvZmZzZXQgPSBvZmY7CisJZ2V0X3BhZ2UocCk7CiAKIAlyZXR1cm4gcDsKIH0KQEAgLTEzNDEsMjEgKzE0MDQsMjEgQEAKICAqIEZpbGwgcGFnZS9vZmZzZXQvbGVuZ3RoIGludG8gc3BkLCBpZiBpdCBjYW4gaG9sZCBtb3JlIHBhZ2VzLgogICovCiBzdGF0aWMgaW5saW5lIGludCBzcGRfZmlsbF9wYWdlKHN0cnVjdCBzcGxpY2VfcGlwZV9kZXNjICpzcGQsIHN0cnVjdCBwYWdlICpwYWdlLAotCQkJCXVuc2lnbmVkIGludCBsZW4sIHVuc2lnbmVkIGludCBvZmZzZXQsCisJCQkJdW5zaWduZWQgaW50ICpsZW4sIHVuc2lnbmVkIGludCBvZmZzZXQsCiAJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxpbmVhcikKIHsKIAlpZiAodW5saWtlbHkoc3BkLT5ucl9wYWdlcyA9PSBQSVBFX0JVRkZFUlMpKQogCQlyZXR1cm4gMTsKIAogCWlmIChsaW5lYXIpIHsKLQkJcGFnZSA9IGxpbmVhcl90b19wYWdlKHBhZ2UsIGxlbiwgb2Zmc2V0KTsKKwkJcGFnZSA9IGxpbmVhcl90b19wYWdlKHBhZ2UsIGxlbiwgJm9mZnNldCwgc2tiKTsKIAkJaWYgKCFwYWdlKQogCQkJcmV0dXJuIDE7CiAJfSBlbHNlCiAJCWdldF9wYWdlKHBhZ2UpOwogCiAJc3BkLT5wYWdlc1tzcGQtPm5yX3BhZ2VzXSA9IHBhZ2U7Ci0Jc3BkLT5wYXJ0aWFsW3NwZC0+bnJfcGFnZXNdLmxlbiA9IGxlbjsKKwlzcGQtPnBhcnRpYWxbc3BkLT5ucl9wYWdlc10ubGVuID0gKmxlbjsKIAlzcGQtPnBhcnRpYWxbc3BkLT5ucl9wYWdlc10ub2Zmc2V0ID0gb2Zmc2V0OwogCXNwZC0+bnJfcGFnZXMrKzsKIApAQCAtMTM2NSw4ICsxNDI4LDEzIEBACiBzdGF0aWMgaW5saW5lIHZvaWQgX19zZWdtZW50X3NlZWsoc3RydWN0IHBhZ2UgKipwYWdlLCB1bnNpZ25lZCBpbnQgKnBvZmYsCiAJCQkJICB1bnNpZ25lZCBpbnQgKnBsZW4sIHVuc2lnbmVkIGludCBvZmYpCiB7CisJdW5zaWduZWQgbG9uZyBuOworCiAJKnBvZmYgKz0gb2ZmOwotCSpwYWdlICs9ICpwb2ZmIC8gUEFHRV9TSVpFOworCW4gPSAqcG9mZiAvIFBBR0VfU0laRTsKKwlpZiAobikKKwkJKnBhZ2UgPSBudGhfcGFnZSgqcGFnZSwgbik7CisKIAkqcG9mZiA9ICpwb2ZmICUgUEFHRV9TSVpFOwogCSpwbGVuIC09IG9mZjsKIH0KQEAgLTEzOTcsNyArMTQ2NSw3IEBACiAJCS8qIHRoZSBsaW5lYXIgcmVnaW9uIG1heSBzcHJlYWQgYWNyb3NzIHNldmVyYWwgcGFnZXMgICovCiAJCWZsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGZsZW4sIFBBR0VfU0laRSAtIHBvZmYpOwogCi0JCWlmIChzcGRfZmlsbF9wYWdlKHNwZCwgcGFnZSwgZmxlbiwgcG9mZiwgc2tiLCBsaW5lYXIpKQorCQlpZiAoc3BkX2ZpbGxfcGFnZShzcGQsIHBhZ2UsICZmbGVuLCBwb2ZmLCBza2IsIGxpbmVhcikpCiAJCQlyZXR1cm4gMTsKIAogCQlfX3NlZ21lbnRfc2VlaygmcGFnZSwgJnBvZmYsICZwbGVuLCBmbGVuKTsKQEAgLTE1OTAsNyArMTY1OCw2IEBACiBmYXVsdDoKIAlyZXR1cm4gLUVGQVVMVDsKIH0KLQogRVhQT1JUX1NZTUJPTChza2Jfc3RvcmVfYml0cyk7CiAKIC8qIENoZWNrc3VtIHNrYiBkYXRhLiAqLwpAQCAtMTY2Nyw2ICsxNzM0LDcgQEAKIAogCXJldHVybiBjc3VtOwogfQorRVhQT1JUX1NZTUJPTChza2JfY2hlY2tzdW0pOwogCiAvKiBCb3RoIG9mIGFib3ZlIGluIG9uZSBib3R0bGUuICovCiAKQEAgLTE3NDgsNiArMTgxNiw3IEBACiAJQlVHX09OKGxlbik7CiAJcmV0dXJuIGNzdW07CiB9CitFWFBPUlRfU1lNQk9MKHNrYl9jb3B5X2FuZF9jc3VtX2JpdHMpOwogCiB2b2lkIHNrYl9jb3B5X2FuZF9jc3VtX2Rldihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCAqdG8pCiB7CkBAIC0xNzc0LDYgKzE4NDMsNyBAQAogCQkqKChfX3N1bTE2ICopKHRvICsgY3NzdHVmZikpID0gY3N1bV9mb2xkKGNzdW0pOwogCX0KIH0KK0VYUE9SVF9TWU1CT0woc2tiX2NvcHlfYW5kX2NzdW1fZGV2KTsKIAogLyoqCiAgKglza2JfZGVxdWV1ZSAtIHJlbW92ZSBmcm9tIHRoZSBoZWFkIG9mIHRoZSBxdWV1ZQpAQCAtMTc5NCw2ICsxODY0LDcgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsaXN0LT5sb2NrLCBmbGFncyk7CiAJcmV0dXJuIHJlc3VsdDsKIH0KK0VYUE9SVF9TWU1CT0woc2tiX2RlcXVldWUpOwogCiAvKioKICAqCXNrYl9kZXF1ZXVlX3RhaWwgLSByZW1vdmUgZnJvbSB0aGUgdGFpbCBvZiB0aGUgcXVldWUKQEAgLTE4MTMsNiArMTg4NCw3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGlzdC0+bG9jaywgZmxhZ3MpOwogCXJldHVybiByZXN1bHQ7CiB9CitFWFBPUlRfU1lNQk9MKHNrYl9kZXF1ZXVlX3RhaWwpOwogCiAvKioKICAqCXNrYl9xdWV1ZV9wdXJnZSAtIGVtcHR5IGEgbGlzdApAQCAtMTgyOCw2ICsxOTAwLDcgQEAKIAl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKGxpc3QpKSAhPSBOVUxMKQogCQlrZnJlZV9za2Ioc2tiKTsKIH0KK0VYUE9SVF9TWU1CT0woc2tiX3F1ZXVlX3B1cmdlKTsKIAogLyoqCiAgKglza2JfcXVldWVfaGVhZCAtIHF1ZXVlIGEgYnVmZmVyIGF0IHRoZSBsaXN0IGhlYWQKQEAgLTE4NDgsNiArMTkyMSw3IEBACiAJX19za2JfcXVldWVfaGVhZChsaXN0LCBuZXdzayk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGlzdC0+bG9jaywgZmxhZ3MpOwogfQorRVhQT1JUX1NZTUJPTChza2JfcXVldWVfaGVhZCk7CiAKIC8qKgogICoJc2tiX3F1ZXVlX3RhaWwgLSBxdWV1ZSBhIGJ1ZmZlciBhdCB0aGUgbGlzdCB0YWlsCkBAIC0xODY4LDYgKzE5NDIsNyBAQAogCV9fc2tiX3F1ZXVlX3RhaWwobGlzdCwgbmV3c2spOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxpc3QtPmxvY2ssIGZsYWdzKTsKIH0KK0VYUE9SVF9TWU1CT0woc2tiX3F1ZXVlX3RhaWwpOwogCiAvKioKICAqCXNrYl91bmxpbmsJLQlyZW1vdmUgYSBidWZmZXIgZnJvbSBhIGxpc3QKQEAgLTE4ODcsNiArMTk2Miw3IEBACiAJX19za2JfdW5saW5rKHNrYiwgbGlzdCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGlzdC0+bG9jaywgZmxhZ3MpOwogfQorRVhQT1JUX1NZTUJPTChza2JfdW5saW5rKTsKIAogLyoqCiAgKglza2JfYXBwZW5kCS0JYXBwZW5kIGEgYnVmZmVyCkBAIC0xOTA2LDcgKzE5ODIsNyBAQAogCV9fc2tiX3F1ZXVlX2FmdGVyKGxpc3QsIG9sZCwgbmV3c2spOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxpc3QtPmxvY2ssIGZsYWdzKTsKIH0KLQorRVhQT1JUX1NZTUJPTChza2JfYXBwZW5kKTsKIAogLyoqCiAgKglza2JfaW5zZXJ0CS0JaW5zZXJ0IGEgYnVmZmVyCkBAIC0xOTI4LDYgKzIwMDQsNyBAQAogCV9fc2tiX2luc2VydChuZXdzaywgb2xkLT5wcmV2LCBvbGQsIGxpc3QpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxpc3QtPmxvY2ssIGZsYWdzKTsKIH0KK0VYUE9SVF9TWU1CT0woc2tiX2luc2VydCk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBza2Jfc3BsaXRfaW5zaWRlX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiogc2tiMSwKQEAgLTIwMDYsNiArMjA4Myw3IEBACiAJZWxzZQkJLyogU2Vjb25kIGNodW5rIGhhcyBubyBoZWFkZXIsIG5vdGhpbmcgdG8gY29weS4gKi8KIAkJc2tiX3NwbGl0X25vX2hlYWRlcihza2IsIHNrYjEsIGxlbiwgcG9zKTsKIH0KK0VYUE9SVF9TWU1CT0woc2tiX3NwbGl0KTsKIAogLyogU2hpZnRpbmcgZnJvbS90byBhIGNsb25lZCBza2IgaXMgYSBuby1nby4KICAqCkBAIC0yMTY4LDYgKzIyNDYsNyBAQAogCXN0LT5mcmFnX2lkeCA9IHN0LT5zdGVwcGVkX29mZnNldCA9IDA7CiAJc3QtPmZyYWdfZGF0YSA9IE5VTEw7CiB9CitFWFBPUlRfU1lNQk9MKHNrYl9wcmVwYXJlX3NlcV9yZWFkKTsKIAogLyoqCiAgKiBza2Jfc2VxX3JlYWQgLSBTZXF1ZW50aWFsbHkgcmVhZCBza2IgZGF0YQpAQCAtMjI1NSw2ICsyMzM0LDcgQEAKIAogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTChza2Jfc2VxX3JlYWQpOwogCiAvKioKICAqIHNrYl9hYm9ydF9zZXFfcmVhZCAtIEFib3J0IGEgc2VxdWVudGlhbCByZWFkIG9mIHNrYiBkYXRhCkBAIC0yMjY4LDYgKzIzNDgsNyBAQAogCWlmIChzdC0+ZnJhZ19kYXRhKQogCQlrdW5tYXBfc2tiX2ZyYWcoc3QtPmZyYWdfZGF0YSk7CiB9CitFWFBPUlRfU1lNQk9MKHNrYl9hYm9ydF9zZXFfcmVhZCk7CiAKICNkZWZpbmUgVFNfU0tCX0NCKHN0YXRlKQkoKHN0cnVjdCBza2Jfc2VxX3N0YXRlICopICYoKHN0YXRlKS0+Y2IpKQogCkBAIC0yMzEwLDYgKzIzOTEsNyBAQAogCXJldCA9IHRleHRzZWFyY2hfZmluZChjb25maWcsIHN0YXRlKTsKIAlyZXR1cm4gKHJldCA8PSB0byAtIGZyb20gPyByZXQgOiBVSU5UX01BWCk7CiB9CitFWFBPUlRfU1lNQk9MKHNrYl9maW5kX3RleHQpOwogCiAvKioKICAqIHNrYl9hcHBlbmRfZGF0YXRvX2ZyYWdzOiAtIGFwcGVuZCB0aGUgdXNlciBkYXRhIHRvIGEgc2tiCkBAIC0yMzgyLDYgKzI0NjQsNyBAQAogCiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MKHNrYl9hcHBlbmRfZGF0YXRvX2ZyYWdzKTsKIAogLyoqCiAgKglza2JfcHVsbF9yY3N1bSAtIHB1bGwgc2tiIGFuZCB1cGRhdGUgcmVjZWl2ZSBjaGVja3N1bQpAQCAtMjU2OSw3ICsyNjUyLDYgQEAKIAl9CiAJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIH0KLQogRVhQT1JUX1NZTUJPTF9HUEwoc2tiX3NlZ21lbnQpOwogCiBpbnQgc2tiX2dyb19yZWNlaXZlKHN0cnVjdCBza19idWZmICoqaGVhZCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKQEAgLTI1NzcsMTcgKzI2NTksMjMgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqcCA9ICpoZWFkOwogCXN0cnVjdCBza19idWZmICpuc2tiOwogCXVuc2lnbmVkIGludCBoZWFkcm9vbTsKLQl1bnNpZ25lZCBpbnQgaGxlbiA9IHAtPmRhdGEgLSBza2JfbWFjX2hlYWRlcihwKTsKLQl1bnNpZ25lZCBpbnQgbGVuID0gc2tiLT5sZW47CisJdW5zaWduZWQgaW50IGxlbiA9IHNrYl9ncm9fbGVuKHNrYik7CiAKLQlpZiAoaGxlbiArIHAtPmxlbiArIGxlbiA+PSA2NTUzNikKKwlpZiAocC0+bGVuICsgbGVuID49IDY1NTM2KQogCQlyZXR1cm4gLUUyQklHOwogCiAJaWYgKHNrYl9zaGluZm8ocCktPmZyYWdfbGlzdCkKIAkJZ290byBtZXJnZTsKLQllbHNlIGlmICghc2tiX2hlYWRsZW4ocCkgJiYgIXNrYl9oZWFkbGVuKHNrYikgJiYKLQkJIHNrYl9zaGluZm8ocCktPm5yX2ZyYWdzICsgc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyA8Ci0JCSBNQVhfU0tCX0ZSQUdTKSB7CisJZWxzZSBpZiAoc2tiX2hlYWRsZW4oc2tiKSA8PSBza2JfZ3JvX29mZnNldChza2IpKSB7CisJCWlmIChza2Jfc2hpbmZvKHApLT5ucl9mcmFncyArIHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgPgorCQkgICAgTUFYX1NLQl9GUkFHUykKKwkJCXJldHVybiAtRTJCSUc7CisKKwkJc2tiX3NoaW5mbyhza2IpLT5mcmFnc1swXS5wYWdlX29mZnNldCArPQorCQkJc2tiX2dyb19vZmZzZXQoc2tiKSAtIHNrYl9oZWFkbGVuKHNrYik7CisJCXNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbMF0uc2l6ZSAtPQorCQkJc2tiX2dyb19vZmZzZXQoc2tiKSAtIHNrYl9oZWFkbGVuKHNrYik7CisKIAkJbWVtY3B5KHNrYl9zaGluZm8ocCktPmZyYWdzICsgc2tiX3NoaW5mbyhwKS0+bnJfZnJhZ3MsCiAJCSAgICAgICBza2Jfc2hpbmZvKHNrYiktPmZyYWdzLAogCQkgICAgICAgc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyAqIHNpemVvZihza2JfZnJhZ190KSk7CkBAIC0yNjA0LDcgKzI2OTIsNyBAQAogCX0KIAogCWhlYWRyb29tID0gc2tiX2hlYWRyb29tKHApOwotCW5za2IgPSBuZXRkZXZfYWxsb2Nfc2tiKHAtPmRldiwgaGVhZHJvb20pOworCW5za2IgPSBuZXRkZXZfYWxsb2Nfc2tiKHAtPmRldiwgaGVhZHJvb20gKyBza2JfZ3JvX29mZnNldChwKSk7CiAJaWYgKHVubGlrZWx5KCFuc2tiKSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTI2MTIsMTIgKzI3MDAsMTUgQEAKIAluc2tiLT5tYWNfbGVuID0gcC0+bWFjX2xlbjsKIAogCXNrYl9yZXNlcnZlKG5za2IsIGhlYWRyb29tKTsKKwlfX3NrYl9wdXQobnNrYiwgc2tiX2dyb19vZmZzZXQocCkpOwogCi0Jc2tiX3NldF9tYWNfaGVhZGVyKG5za2IsIC1obGVuKTsKKwlza2Jfc2V0X21hY19oZWFkZXIobnNrYiwgc2tiX21hY19oZWFkZXIocCkgLSBwLT5kYXRhKTsKIAlza2Jfc2V0X25ldHdvcmtfaGVhZGVyKG5za2IsIHNrYl9uZXR3b3JrX29mZnNldChwKSk7CiAJc2tiX3NldF90cmFuc3BvcnRfaGVhZGVyKG5za2IsIHNrYl90cmFuc3BvcnRfb2Zmc2V0KHApKTsKIAotCW1lbWNweShza2JfbWFjX2hlYWRlcihuc2tiKSwgc2tiX21hY19oZWFkZXIocCksIGhsZW4pOworCV9fc2tiX3B1bGwocCwgc2tiX2dyb19vZmZzZXQocCkpOworCW1lbWNweShza2JfbWFjX2hlYWRlcihuc2tiKSwgc2tiX21hY19oZWFkZXIocCksCisJICAgICAgIHAtPmRhdGEgLSBza2JfbWFjX2hlYWRlcihwKSk7CiAKIAkqTkFQSV9HUk9fQ0IobnNrYikgPSAqTkFQSV9HUk9fQ0IocCk7CiAJc2tiX3NoaW5mbyhuc2tiKS0+ZnJhZ19saXN0ID0gcDsKQEAgLTI2MzYsNiArMjcyNywxNyBAQAogCXAgPSBuc2tiOwogCiBtZXJnZToKKwlpZiAoc2tiX2dyb19vZmZzZXQoc2tiKSA+IHNrYl9oZWFkbGVuKHNrYikpIHsKKwkJc2tiX3NoaW5mbyhza2IpLT5mcmFnc1swXS5wYWdlX29mZnNldCArPQorCQkJc2tiX2dyb19vZmZzZXQoc2tiKSAtIHNrYl9oZWFkbGVuKHNrYik7CisJCXNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbMF0uc2l6ZSAtPQorCQkJc2tiX2dyb19vZmZzZXQoc2tiKSAtIHNrYl9oZWFkbGVuKHNrYik7CisJCXNrYl9ncm9fcmVzZXRfb2Zmc2V0KHNrYik7CisJCXNrYl9ncm9fcHVsbChza2IsIHNrYl9oZWFkbGVuKHNrYikpOworCX0KKworCV9fc2tiX3B1bGwoc2tiLCBza2JfZ3JvX29mZnNldChza2IpKTsKKwogCXAtPnByZXYtPm5leHQgPSBza2I7CiAJcC0+cHJldiA9IHNrYjsKIAlza2JfaGVhZGVyX3JlbGVhc2Uoc2tiKTsKQEAgLTI3NDcsNiArMjg0OSw3IEBACiAKIAlyZXR1cm4gbnNnOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoc2tiX3RvX3NndmVjKTsKIAogLyoqCiAgKglza2JfY293X2RhdGEgLSBDaGVjayB0aGF0IGEgc29ja2V0IGJ1ZmZlcidzIGRhdGEgYnVmZmVycyBhcmUgd3JpdGFibGUKQEAgLTI4NTYsNiArMjk1OSw0NSBAQAogCiAJcmV0dXJuIGVsdDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHNrYl9jb3dfZGF0YSk7CisKK3ZvaWQgc2tiX3RzdGFtcF90eChzdHJ1Y3Qgc2tfYnVmZiAqb3JpZ19za2IsCisJCXN0cnVjdCBza2Jfc2hhcmVkX2h3dHN0YW1wcyAqaHd0c3RhbXBzKQoreworCXN0cnVjdCBzb2NrICpzayA9IG9yaWdfc2tiLT5zazsKKwlzdHJ1Y3Qgc29ja19leHRlcnJfc2tiICpzZXJyOworCXN0cnVjdCBza19idWZmICpza2I7CisJaW50IGVycjsKKworCWlmICghc2spCisJCXJldHVybjsKKworCXNrYiA9IHNrYl9jbG9uZShvcmlnX3NrYiwgR0ZQX0FUT01JQyk7CisJaWYgKCFza2IpCisJCXJldHVybjsKKworCWlmIChod3RzdGFtcHMpIHsKKwkJKnNrYl9od3RzdGFtcHMoc2tiKSA9CisJCQkqaHd0c3RhbXBzOworCX0gZWxzZSB7CisJCS8qCisJCSAqIG5vIGhhcmR3YXJlIHRpbWUgc3RhbXBzIGF2YWlsYWJsZSwKKwkJICogc28ga2VlcCB0aGUgc2tiX3NoYXJlZF90eCBhbmQgb25seQorCQkgKiBzdG9yZSBzb2Z0d2FyZSB0aW1lIHN0YW1wCisJCSAqLworCQlza2ItPnRzdGFtcCA9IGt0aW1lX2dldF9yZWFsKCk7CisJfQorCisJc2VyciA9IFNLQl9FWFRfRVJSKHNrYik7CisJbWVtc2V0KHNlcnIsIDAsIHNpemVvZigqc2VycikpOworCXNlcnItPmVlLmVlX2Vycm5vID0gRU5PTVNHOworCXNlcnItPmVlLmVlX29yaWdpbiA9IFNPX0VFX09SSUdJTl9USU1FU1RBTVBJTkc7CisJZXJyID0gc29ja19xdWV1ZV9lcnJfc2tiKHNrLCBza2IpOworCWlmIChlcnIpCisJCWtmcmVlX3NrYihza2IpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc2tiX3RzdGFtcF90eCk7CisKIAogLyoqCiAgKiBza2JfcGFydGlhbF9jc3VtX3NldCAtIHNldCB1cCBhbmQgdmVyaWZ5IHBhcnRpYWwgY3N1bSB2YWx1ZXMgZm9yIHBhY2tldApAQCAtMjg4NCw2ICszMDI2LDcgQEAKIAlza2ItPmNzdW1fb2Zmc2V0ID0gb2ZmOwogCXJldHVybiB0cnVlOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoc2tiX3BhcnRpYWxfY3N1bV9zZXQpOwogCiB2b2lkIF9fc2tiX3dhcm5fbHJvX2ZvcndhcmRpbmcoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKQEAgLTI4OTEsNDIgKzMwMzQsNCBAQAogCQlwcl93YXJuaW5nKCIlczogcmVjZWl2ZWQgcGFja2V0cyBjYW5ub3QgYmUgZm9yd2FyZGVkIgogCQkJICAgIiB3aGlsZSBMUk8gaXMgZW5hYmxlZFxuIiwgc2tiLT5kZXYtPm5hbWUpOwogfQotCi1FWFBPUlRfU1lNQk9MKF9fX3Bza2JfdHJpbSk7Ci1FWFBPUlRfU1lNQk9MKF9fa2ZyZWVfc2tiKTsKLUVYUE9SVF9TWU1CT0woa2ZyZWVfc2tiKTsKLUVYUE9SVF9TWU1CT0woX19wc2tiX3B1bGxfdGFpbCk7Ci1FWFBPUlRfU1lNQk9MKF9fYWxsb2Nfc2tiKTsKLUVYUE9SVF9TWU1CT0woX19uZXRkZXZfYWxsb2Nfc2tiKTsKLUVYUE9SVF9TWU1CT0wocHNrYl9jb3B5KTsKLUVYUE9SVF9TWU1CT0wocHNrYl9leHBhbmRfaGVhZCk7Ci1FWFBPUlRfU1lNQk9MKHNrYl9jaGVja3N1bSk7Ci1FWFBPUlRfU1lNQk9MKHNrYl9jbG9uZSk7Ci1FWFBPUlRfU1lNQk9MKHNrYl9jb3B5KTsKLUVYUE9SVF9TWU1CT0woc2tiX2NvcHlfYW5kX2NzdW1fYml0cyk7Ci1FWFBPUlRfU1lNQk9MKHNrYl9jb3B5X2FuZF9jc3VtX2Rldik7Ci1FWFBPUlRfU1lNQk9MKHNrYl9jb3B5X2JpdHMpOwotRVhQT1JUX1NZTUJPTChza2JfY29weV9leHBhbmQpOwotRVhQT1JUX1NZTUJPTChza2Jfb3Zlcl9wYW5pYyk7Ci1FWFBPUlRfU1lNQk9MKHNrYl9wYWQpOwotRVhQT1JUX1NZTUJPTChza2JfcmVhbGxvY19oZWFkcm9vbSk7Ci1FWFBPUlRfU1lNQk9MKHNrYl91bmRlcl9wYW5pYyk7Ci1FWFBPUlRfU1lNQk9MKHNrYl9kZXF1ZXVlKTsKLUVYUE9SVF9TWU1CT0woc2tiX2RlcXVldWVfdGFpbCk7Ci1FWFBPUlRfU1lNQk9MKHNrYl9pbnNlcnQpOwotRVhQT1JUX1NZTUJPTChza2JfcXVldWVfcHVyZ2UpOwotRVhQT1JUX1NZTUJPTChza2JfcXVldWVfaGVhZCk7Ci1FWFBPUlRfU1lNQk9MKHNrYl9xdWV1ZV90YWlsKTsKLUVYUE9SVF9TWU1CT0woc2tiX3VubGluayk7Ci1FWFBPUlRfU1lNQk9MKHNrYl9hcHBlbmQpOwotRVhQT1JUX1NZTUJPTChza2Jfc3BsaXQpOwotRVhQT1JUX1NZTUJPTChza2JfcHJlcGFyZV9zZXFfcmVhZCk7Ci1FWFBPUlRfU1lNQk9MKHNrYl9zZXFfcmVhZCk7Ci1FWFBPUlRfU1lNQk9MKHNrYl9hYm9ydF9zZXFfcmVhZCk7Ci1FWFBPUlRfU1lNQk9MKHNrYl9maW5kX3RleHQpOwotRVhQT1JUX1NZTUJPTChza2JfYXBwZW5kX2RhdGF0b19mcmFncyk7CiBFWFBPUlRfU1lNQk9MKF9fc2tiX3dhcm5fbHJvX2ZvcndhcmRpbmcpOwotCi1FWFBPUlRfU1lNQk9MX0dQTChza2JfdG9fc2d2ZWMpOwotRVhQT1JUX1NZTUJPTF9HUEwoc2tiX2Nvd19kYXRhKTsKLUVYUE9SVF9TWU1CT0xfR1BMKHNrYl9wYXJ0aWFsX2NzdW1fc2V0KTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NvY2suYyBiL25ldC9jb3JlL3NvY2suYwppbmRleCA1Zjk3Y2FhLi4wNjIwMDQ2IDEwMDY0NAotLS0gYS9uZXQvY29yZS9zb2NrLmMKKysrIGIvbmV0L2NvcmUvc29jay5jCkBAIC0xMjAsNiArMTIwLDcgQEAKICNpbmNsdWRlIDxuZXQvbmV0X25hbWVzcGFjZS5oPgogI2luY2x1ZGUgPG5ldC9yZXF1ZXN0X3NvY2suaD4KICNpbmNsdWRlIDxuZXQvc29jay5oPgorI2luY2x1ZGUgPGxpbnV4L25ldF90c3RhbXAuaD4KICNpbmNsdWRlIDxuZXQveGZybS5oPgogI2luY2x1ZGUgPGxpbnV4L2lwc2VjLmg+CiAKQEAgLTE0OSw3ICsxNTAsNyBAQAogICAic2tfbG9jay1BRl9ERUNuZXQiLCAic2tfbG9jay1BRl9ORVRCRVVJIiAgLCAic2tfbG9jay1BRl9TRUNVUklUWSIgLAogICAic2tfbG9jay1BRl9LRVkiICAgLCAic2tfbG9jay1BRl9ORVRMSU5LIiAgLCAic2tfbG9jay1BRl9QQUNLRVQiICAgLAogICAic2tfbG9jay1BRl9BU0giICAgLCAic2tfbG9jay1BRl9FQ09ORVQiICAgLCAic2tfbG9jay1BRl9BVE1TVkMiICAgLAotICAic2tfbG9jay0yMSIgICAgICAgLCAic2tfbG9jay1BRl9TTkEiICAgICAgLCAic2tfbG9jay1BRl9JUkRBIiAgICAgLAorICAic2tfbG9jay1BRl9SRFMiICAgLCAic2tfbG9jay1BRl9TTkEiICAgICAgLCAic2tfbG9jay1BRl9JUkRBIiAgICAgLAogICAic2tfbG9jay1BRl9QUFBPWCIgLCAic2tfbG9jay1BRl9XQU5QSVBFIiAgLCAic2tfbG9jay1BRl9MTEMiICAgICAgLAogICAic2tfbG9jay0yNyIgICAgICAgLCAic2tfbG9jay0yOCIgICAgICAgICAgLCAic2tfbG9jay1BRl9DQU4iICAgICAgLAogICAic2tfbG9jay1BRl9USVBDIiAgLCAic2tfbG9jay1BRl9CTFVFVE9PVEgiLCAic2tfbG9jay1JVUNWIiAgICAgICAgLApAQCAtMTY0LDcgKzE2NSw3IEBACiAgICJzbG9jay1BRl9ERUNuZXQiLCAic2xvY2stQUZfTkVUQkVVSSIgICwgInNsb2NrLUFGX1NFQ1VSSVRZIiAsCiAgICJzbG9jay1BRl9LRVkiICAgLCAic2xvY2stQUZfTkVUTElOSyIgICwgInNsb2NrLUFGX1BBQ0tFVCIgICAsCiAgICJzbG9jay1BRl9BU0giICAgLCAic2xvY2stQUZfRUNPTkVUIiAgICwgInNsb2NrLUFGX0FUTVNWQyIgICAsCi0gICJzbG9jay0yMSIgICAgICAgLCAic2xvY2stQUZfU05BIiAgICAgICwgInNsb2NrLUFGX0lSREEiICAgICAsCisgICJzbG9jay1BRl9SRFMiICAgLCAic2xvY2stQUZfU05BIiAgICAgICwgInNsb2NrLUFGX0lSREEiICAgICAsCiAgICJzbG9jay1BRl9QUFBPWCIgLCAic2xvY2stQUZfV0FOUElQRSIgICwgInNsb2NrLUFGX0xMQyIgICAgICAsCiAgICJzbG9jay0yNyIgICAgICAgLCAic2xvY2stMjgiICAgICAgICAgICwgInNsb2NrLUFGX0NBTiIgICAgICAsCiAgICJzbG9jay1BRl9USVBDIiAgLCAic2xvY2stQUZfQkxVRVRPT1RIIiwgInNsb2NrLUFGX0lVQ1YiICAgICAsCkBAIC0xNzksNyArMTgwLDcgQEAKICAgImNsb2NrLUFGX0RFQ25ldCIsICJjbG9jay1BRl9ORVRCRVVJIiAgLCAiY2xvY2stQUZfU0VDVVJJVFkiICwKICAgImNsb2NrLUFGX0tFWSIgICAsICJjbG9jay1BRl9ORVRMSU5LIiAgLCAiY2xvY2stQUZfUEFDS0VUIiAgICwKICAgImNsb2NrLUFGX0FTSCIgICAsICJjbG9jay1BRl9FQ09ORVQiICAgLCAiY2xvY2stQUZfQVRNU1ZDIiAgICwKLSAgImNsb2NrLTIxIiAgICAgICAsICJjbG9jay1BRl9TTkEiICAgICAgLCAiY2xvY2stQUZfSVJEQSIgICAgICwKKyAgImNsb2NrLUFGX1JEUyIgICAsICJjbG9jay1BRl9TTkEiICAgICAgLCAiY2xvY2stQUZfSVJEQSIgICAgICwKICAgImNsb2NrLUFGX1BQUE9YIiAsICJjbG9jay1BRl9XQU5QSVBFIiAgLCAiY2xvY2stQUZfTExDIiAgICAgICwKICAgImNsb2NrLTI3IiAgICAgICAsICJjbG9jay0yOCIgICAgICAgICAgLCAiY2xvY2stQUZfQ0FOIiAgICAgICwKICAgImNsb2NrLUFGX1RJUEMiICAsICJjbG9jay1BRl9CTFVFVE9PVEgiLCAiY2xvY2stQUZfSVVDViIgICAgICwKQEAgLTI1NSwxMSArMjU2LDE0IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBzb2NrX2Rpc2FibGVfdGltZXN0YW1wKHN0cnVjdCBzb2NrICpzaykKK3N0YXRpYyB2b2lkIHNvY2tfZGlzYWJsZV90aW1lc3RhbXAoc3RydWN0IHNvY2sgKnNrLCBpbnQgZmxhZykKIHsKLQlpZiAoc29ja19mbGFnKHNrLCBTT0NLX1RJTUVTVEFNUCkpIHsKLQkJc29ja19yZXNldF9mbGFnKHNrLCBTT0NLX1RJTUVTVEFNUCk7Ci0JCW5ldF9kaXNhYmxlX3RpbWVzdGFtcCgpOworCWlmIChzb2NrX2ZsYWcoc2ssIGZsYWcpKSB7CisJCXNvY2tfcmVzZXRfZmxhZyhzaywgZmxhZyk7CisJCWlmICghc29ja19mbGFnKHNrLCBTT0NLX1RJTUVTVEFNUCkgJiYKKwkJICAgICFzb2NrX2ZsYWcoc2ssIFNPQ0tfVElNRVNUQU1QSU5HX1JYX1NPRlRXQVJFKSkgeworCQkJbmV0X2Rpc2FibGVfdGltZXN0YW1wKCk7CisJCX0KIAl9CiB9CiAKQEAgLTYxNCwxMyArNjE4LDM4IEBACiAJCQllbHNlCiAJCQkJc29ja19zZXRfZmxhZyhzaywgU09DS19SQ1ZUU1RBTVBOUyk7CiAJCQlzb2NrX3NldF9mbGFnKHNrLCBTT0NLX1JDVlRTVEFNUCk7Ci0JCQlzb2NrX2VuYWJsZV90aW1lc3RhbXAoc2spOworCQkJc29ja19lbmFibGVfdGltZXN0YW1wKHNrLCBTT0NLX1RJTUVTVEFNUCk7CiAJCX0gZWxzZSB7CiAJCQlzb2NrX3Jlc2V0X2ZsYWcoc2ssIFNPQ0tfUkNWVFNUQU1QKTsKIAkJCXNvY2tfcmVzZXRfZmxhZyhzaywgU09DS19SQ1ZUU1RBTVBOUyk7CiAJCX0KIAkJYnJlYWs7CiAKKwljYXNlIFNPX1RJTUVTVEFNUElORzoKKwkJaWYgKHZhbCAmIH5TT0ZfVElNRVNUQU1QSU5HX01BU0spIHsKKwkJCXJldCA9IEVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisJCXNvY2tfdmFsYm9vbF9mbGFnKHNrLCBTT0NLX1RJTUVTVEFNUElOR19UWF9IQVJEV0FSRSwKKwkJCQkgIHZhbCAmIFNPRl9USU1FU1RBTVBJTkdfVFhfSEFSRFdBUkUpOworCQlzb2NrX3ZhbGJvb2xfZmxhZyhzaywgU09DS19USU1FU1RBTVBJTkdfVFhfU09GVFdBUkUsCisJCQkJICB2YWwgJiBTT0ZfVElNRVNUQU1QSU5HX1RYX1NPRlRXQVJFKTsKKwkJc29ja192YWxib29sX2ZsYWcoc2ssIFNPQ0tfVElNRVNUQU1QSU5HX1JYX0hBUkRXQVJFLAorCQkJCSAgdmFsICYgU09GX1RJTUVTVEFNUElOR19SWF9IQVJEV0FSRSk7CisJCWlmICh2YWwgJiBTT0ZfVElNRVNUQU1QSU5HX1JYX1NPRlRXQVJFKQorCQkJc29ja19lbmFibGVfdGltZXN0YW1wKHNrLAorCQkJCQkgICAgICBTT0NLX1RJTUVTVEFNUElOR19SWF9TT0ZUV0FSRSk7CisJCWVsc2UKKwkJCXNvY2tfZGlzYWJsZV90aW1lc3RhbXAoc2ssCisJCQkJCSAgICAgICBTT0NLX1RJTUVTVEFNUElOR19SWF9TT0ZUV0FSRSk7CisJCXNvY2tfdmFsYm9vbF9mbGFnKHNrLCBTT0NLX1RJTUVTVEFNUElOR19TT0ZUV0FSRSwKKwkJCQkgIHZhbCAmIFNPRl9USU1FU1RBTVBJTkdfU09GVFdBUkUpOworCQlzb2NrX3ZhbGJvb2xfZmxhZyhzaywgU09DS19USU1FU1RBTVBJTkdfU1lTX0hBUkRXQVJFLAorCQkJCSAgdmFsICYgU09GX1RJTUVTVEFNUElOR19TWVNfSEFSRFdBUkUpOworCQlzb2NrX3ZhbGJvb2xfZmxhZyhzaywgU09DS19USU1FU1RBTVBJTkdfUkFXX0hBUkRXQVJFLAorCQkJCSAgdmFsICYgU09GX1RJTUVTVEFNUElOR19SQVdfSEFSRFdBUkUpOworCQlicmVhazsKKwogCWNhc2UgU09fUkNWTE9XQVQ6CiAJCWlmICh2YWwgPCAwKQogCQkJdmFsID0gSU5UX01BWDsKQEAgLTc2OCw2ICs3OTcsMjQgQEAKIAkJdi52YWwgPSBzb2NrX2ZsYWcoc2ssIFNPQ0tfUkNWVFNUQU1QTlMpOwogCQlicmVhazsKIAorCWNhc2UgU09fVElNRVNUQU1QSU5HOgorCQl2LnZhbCA9IDA7CisJCWlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfVElNRVNUQU1QSU5HX1RYX0hBUkRXQVJFKSkKKwkJCXYudmFsIHw9IFNPRl9USU1FU1RBTVBJTkdfVFhfSEFSRFdBUkU7CisJCWlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfVElNRVNUQU1QSU5HX1RYX1NPRlRXQVJFKSkKKwkJCXYudmFsIHw9IFNPRl9USU1FU1RBTVBJTkdfVFhfU09GVFdBUkU7CisJCWlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfVElNRVNUQU1QSU5HX1JYX0hBUkRXQVJFKSkKKwkJCXYudmFsIHw9IFNPRl9USU1FU1RBTVBJTkdfUlhfSEFSRFdBUkU7CisJCWlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfVElNRVNUQU1QSU5HX1JYX1NPRlRXQVJFKSkKKwkJCXYudmFsIHw9IFNPRl9USU1FU1RBTVBJTkdfUlhfU09GVFdBUkU7CisJCWlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfVElNRVNUQU1QSU5HX1NPRlRXQVJFKSkKKwkJCXYudmFsIHw9IFNPRl9USU1FU1RBTVBJTkdfU09GVFdBUkU7CisJCWlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfVElNRVNUQU1QSU5HX1NZU19IQVJEV0FSRSkpCisJCQl2LnZhbCB8PSBTT0ZfVElNRVNUQU1QSU5HX1NZU19IQVJEV0FSRTsKKwkJaWYgKHNvY2tfZmxhZyhzaywgU09DS19USU1FU1RBTVBJTkdfUkFXX0hBUkRXQVJFKSkKKwkJCXYudmFsIHw9IFNPRl9USU1FU1RBTVBJTkdfUkFXX0hBUkRXQVJFOworCQlicmVhazsKKwogCWNhc2UgU09fUkNWVElNRU86CiAJCWx2PXNpemVvZihzdHJ1Y3QgdGltZXZhbCk7CiAJCWlmIChzay0+c2tfcmN2dGltZW8gPT0gTUFYX1NDSEVEVUxFX1RJTUVPVVQpIHsKQEAgLTk2OSw3ICsxMDE2LDggQEAKIAkJcmN1X2Fzc2lnbl9wb2ludGVyKHNrLT5za19maWx0ZXIsIE5VTEwpOwogCX0KIAotCXNvY2tfZGlzYWJsZV90aW1lc3RhbXAoc2spOworCXNvY2tfZGlzYWJsZV90aW1lc3RhbXAoc2ssIFNPQ0tfVElNRVNUQU1QKTsKKwlzb2NrX2Rpc2FibGVfdGltZXN0YW1wKHNrLCBTT0NLX1RJTUVTVEFNUElOR19SWF9TT0ZUV0FSRSk7CiAKIAlpZiAoYXRvbWljX3JlYWQoJnNrLT5za19vbWVtX2FsbG9jKSkKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBvcHRtZW0gbGVha2FnZSAoJWQgYnl0ZXMpIGRldGVjdGVkLlxuIiwKQEAgLTEyNTUsMTAgKzEzMDMsOSBAQAogICoJR2VuZXJpYyBzZW5kL3JlY2VpdmUgYnVmZmVyIGhhbmRsZXJzCiAgKi8KIAotc3RhdGljIHN0cnVjdCBza19idWZmICpzb2NrX2FsbG9jX3NlbmRfcHNrYihzdHJ1Y3Qgc29jayAqc2ssCi0JCQkJCSAgICB1bnNpZ25lZCBsb25nIGhlYWRlcl9sZW4sCi0JCQkJCSAgICB1bnNpZ25lZCBsb25nIGRhdGFfbGVuLAotCQkJCQkgICAgaW50IG5vYmxvY2ssIGludCAqZXJyY29kZSkKK3N0cnVjdCBza19idWZmICpzb2NrX2FsbG9jX3NlbmRfcHNrYihzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGxvbmcgaGVhZGVyX2xlbiwKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgZGF0YV9sZW4sIGludCBub2Jsb2NrLAorCQkJCSAgICAgaW50ICplcnJjb2RlKQogewogCXN0cnVjdCBza19idWZmICpza2I7CiAJZ2ZwX3QgZ2ZwX21hc2s7CkBAIC0xMzM4LDYgKzEzODUsNyBAQAogCSplcnJjb2RlID0gZXJyOwogCXJldHVybiBOVUxMOwogfQorRVhQT1JUX1NZTUJPTChzb2NrX2FsbG9jX3NlbmRfcHNrYik7CiAKIHN0cnVjdCBza19idWZmICpzb2NrX2FsbG9jX3NlbmRfc2tiKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgbG9uZyBzaXplLAogCQkJCSAgICBpbnQgbm9ibG9jaywgaW50ICplcnJjb2RlKQpAQCAtMTc4Niw3ICsxODM0LDcgQEAKIHsKIAlzdHJ1Y3QgdGltZXZhbCB0djsKIAlpZiAoIXNvY2tfZmxhZyhzaywgU09DS19USU1FU1RBTVApKQotCQlzb2NrX2VuYWJsZV90aW1lc3RhbXAoc2spOworCQlzb2NrX2VuYWJsZV90aW1lc3RhbXAoc2ssIFNPQ0tfVElNRVNUQU1QKTsKIAl0diA9IGt0aW1lX3RvX3RpbWV2YWwoc2stPnNrX3N0YW1wKTsKIAlpZiAodHYudHZfc2VjID09IC0xKQogCQlyZXR1cm4gLUVOT0VOVDsKQEAgLTE4MDIsNyArMTg1MCw3IEBACiB7CiAJc3RydWN0IHRpbWVzcGVjIHRzOwogCWlmICghc29ja19mbGFnKHNrLCBTT0NLX1RJTUVTVEFNUCkpCi0JCXNvY2tfZW5hYmxlX3RpbWVzdGFtcChzayk7CisJCXNvY2tfZW5hYmxlX3RpbWVzdGFtcChzaywgU09DS19USU1FU1RBTVApOwogCXRzID0ga3RpbWVfdG9fdGltZXNwZWMoc2stPnNrX3N0YW1wKTsKIAlpZiAodHMudHZfc2VjID09IC0xKQogCQlyZXR1cm4gLUVOT0VOVDsKQEAgLTE4MTQsMTEgKzE4NjIsMjAgQEAKIH0KIEVYUE9SVF9TWU1CT0woc29ja19nZXRfdGltZXN0YW1wbnMpOwogCi12b2lkIHNvY2tfZW5hYmxlX3RpbWVzdGFtcChzdHJ1Y3Qgc29jayAqc2spCit2b2lkIHNvY2tfZW5hYmxlX3RpbWVzdGFtcChzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFnKQogewotCWlmICghc29ja19mbGFnKHNrLCBTT0NLX1RJTUVTVEFNUCkpIHsKLQkJc29ja19zZXRfZmxhZyhzaywgU09DS19USU1FU1RBTVApOwotCQluZXRfZW5hYmxlX3RpbWVzdGFtcCgpOworCWlmICghc29ja19mbGFnKHNrLCBmbGFnKSkgeworCQlzb2NrX3NldF9mbGFnKHNrLCBmbGFnKTsKKwkJLyoKKwkJICogd2UganVzdCBzZXQgb25lIG9mIHRoZSB0d28gZmxhZ3Mgd2hpY2ggcmVxdWlyZSBuZXQKKwkJICogdGltZSBzdGFtcGluZywgYnV0IHRpbWUgc3RhbXBpbmcgbWlnaHQgaGF2ZSBiZWVuIG9uCisJCSAqIGFscmVhZHkgYmVjYXVzZSBvZiB0aGUgb3RoZXIgb25lCisJCSAqLworCQlpZiAoIXNvY2tfZmxhZyhzaywKKwkJCQlmbGFnID09IFNPQ0tfVElNRVNUQU1QID8KKwkJCQlTT0NLX1RJTUVTVEFNUElOR19SWF9TT0ZUV0FSRSA6CisJCQkJU09DS19USU1FU1RBTVApKQorCQkJbmV0X2VuYWJsZV90aW1lc3RhbXAoKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jIGIvbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMKaW5kZXggODNkMzM5OC4uN2RiMWRlMCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMKKysrIGIvbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMKQEAgLTExLDYgKzExLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bmV0L2lwLmg+CiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KIAogc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgbmV0X2NvcmVfdGFibGVbXSA9IHsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3V0aWxzLmMgYi9uZXQvY29yZS91dGlscy5jCmluZGV4IDcyZTBlYmUuLjgzMjIxYWUgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3V0aWxzLmMKKysrIGIvbmV0L2NvcmUvdXRpbHMuYwpAQCAtMjIsNyArMjIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L25ldC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CiAjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CmRpZmYgLS1naXQgYS9uZXQvZGNjcC9hY2t2ZWMuaCBiL25ldC9kY2NwL2Fja3ZlYy5oCmluZGV4IDQ1Zjk1ZTUuLjdlYTU1N2IgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL2Fja3ZlYy5oCisrKyBiL25ldC9kY2NwL2Fja3ZlYy5oCkBAIC0yMCw2ICsyMCw5IEBACiAvKiBXZSBjYW4gc3ByZWFkIGFuIGFjayB2ZWN0b3IgYWNyb3NzIG11bHRpcGxlIG9wdGlvbnMgKi8KICNkZWZpbmUgRENDUF9NQVhfQUNLVkVDX0xFTiAoRENDUF9TSU5HTEVfT1BUX01BWExFTiAqIDIpCiAKKy8qIEVzdGltYXRlZCBtaW5pbXVtIGF2ZXJhZ2UgQWNrIFZlY3RvciBsZW5ndGggLSB1c2VkIGZvciB1cGRhdGluZyBNUFMgKi8KKyNkZWZpbmUgRENDUEFWX01JTl9PUFRMRU4JMTYKKwogI2RlZmluZSBEQ0NQX0FDS1ZFQ19TVEFURV9SRUNFSVZFRAkwCiAjZGVmaW5lIERDQ1BfQUNLVkVDX1NUQVRFX0VDTl9NQVJLRUQJKDEgPDwgNikKICNkZWZpbmUgRENDUF9BQ0tWRUNfU1RBVEVfTk9UX1JFQ0VJVkVECSgzIDw8IDYpCmRpZmYgLS1naXQgYS9uZXQvZGNjcC9kY2NwLmggYi9uZXQvZGNjcC9kY2NwLmgKaW5kZXggZjIyMzBmYy4uZDZiYzQ3MyAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvZGNjcC5oCisrKyBiL25ldC9kY2NwL2RjY3AuaApAQCAtNDIsOSArNDIsMTEgQEAKIGV4dGVybiBpbnQgZGNjcF9kZWJ1ZzsKICNkZWZpbmUgZGNjcF9wcl9kZWJ1Zyhmb3JtYXQsIGEuLi4pCSAgRENDUF9QUl9ERUJVRyhkY2NwX2RlYnVnLCBmb3JtYXQsICMjYSkKICNkZWZpbmUgZGNjcF9wcl9kZWJ1Z19jYXQoZm9ybWF0LCBhLi4uKSAgIERDQ1BfUFJJTlRLKGRjY3BfZGVidWcsIGZvcm1hdCwgIyNhKQorI2RlZmluZSBkY2NwX2RlYnVnKGZtdCwgYS4uLikJCSAgZGNjcF9wcl9kZWJ1Z19jYXQoS0VSTl9ERUJVRyBmbXQsICMjYSkKICNlbHNlCiAjZGVmaW5lIGRjY3BfcHJfZGVidWcoZm9ybWF0LCBhLi4uKQogI2RlZmluZSBkY2NwX3ByX2RlYnVnX2NhdChmb3JtYXQsIGEuLi4pCisjZGVmaW5lIGRjY3BfZGVidWcoZm9ybWF0LCBhLi4uKQogI2VuZGlmCiAKIGV4dGVybiBzdHJ1Y3QgaW5ldF9oYXNoaW5mbyBkY2NwX2hhc2hpbmZvOwpAQCAtNjEsMTEgKzYzLDE0IEBACiAgKiAgICAtIERDQ1AtUmVzZXQgICAgd2l0aCBBQ0sgU3ViaGVhZGVyIGFuZCA0IGJ5dGVzIG9mIFJlc2V0IENvZGUgZmllbGRzCiAgKiAgSGVuY2UgYSBzYWZlIHVwcGVyIGJvdW5kIGZvciB0aGUgbWF4aW11bSBvcHRpb24gbGVuZ3RoIGlzIDEwMjAtMjggPSA5OTIKICAqLwotI2RlZmluZSBNQVhfRENDUF9TUEVDSUZJQ19IRUFERVIgKDI1NSAqIHNpemVvZihpbnQpKQorI2RlZmluZSBNQVhfRENDUF9TUEVDSUZJQ19IRUFERVIgKDI1NSAqIHNpemVvZih1aW50MzJfdCkpCiAjZGVmaW5lIERDQ1BfTUFYX1BBQ0tFVF9IRFIgMjgKICNkZWZpbmUgRENDUF9NQVhfT1BUX0xFTiAoTUFYX0RDQ1BfU1BFQ0lGSUNfSEVBREVSIC0gRENDUF9NQVhfUEFDS0VUX0hEUikKICNkZWZpbmUgTUFYX0RDQ1BfSEVBREVSIChNQVhfRENDUF9TUEVDSUZJQ19IRUFERVIgKyBNQVhfSEVBREVSKQogCisvKiBVcHBlciBib3VuZCBmb3IgaW5pdGlhbCBmZWF0dXJlLW5lZ290aWF0aW9uIG92ZXJoZWFkIChwYWRkZWQgdG8gMzIgYml0cykgKi8KKyNkZWZpbmUgRENDUF9GRUFUTkVHX09WRVJIRUFECSAoMzIgKiBzaXplb2YodWludDMyX3QpKQorCiAjZGVmaW5lIERDQ1BfVElNRVdBSVRfTEVOICg2MCAqIEhaKSAvKiBob3cgbG9uZyB0byB3YWl0IHRvIGRlc3Ryb3kgVElNRS1XQUlUCiAJCQkJICAgICAqIHN0YXRlLCBhYm91dCA2MCBzZWNvbmRzICovCiAKQEAgLTk1LDkgKzEwMCw2IEBACiBleHRlcm4gaW50ICBzeXNjdGxfZGNjcF9yZXF1ZXN0X3JldHJpZXM7CiBleHRlcm4gaW50ICBzeXNjdGxfZGNjcF9yZXRyaWVzMTsKIGV4dGVybiBpbnQgIHN5c2N0bF9kY2NwX3JldHJpZXMyOwotZXh0ZXJuIGludCAgc3lzY3RsX2RjY3BfZmVhdF9zZXF1ZW5jZV93aW5kb3c7Ci1leHRlcm4gaW50ICBzeXNjdGxfZGNjcF9mZWF0X3J4X2NjaWQ7Ci1leHRlcm4gaW50ICBzeXNjdGxfZGNjcF9mZWF0X3R4X2NjaWQ7CiBleHRlcm4gaW50ICBzeXNjdGxfZGNjcF90eF9xbGVuOwogZXh0ZXJuIGludCAgc3lzY3RsX2RjY3Bfc3luY19yYXRlbGltaXQ7CiAKQEAgLTQwOSwyMyArNDExLDIxIEBACiBzdGF0aWMgaW5saW5lIHZvaWQgZGNjcF91cGRhdGVfZ3NyKHN0cnVjdCBzb2NrICpzaywgdTY0IHNlcSkKIHsKIAlzdHJ1Y3QgZGNjcF9zb2NrICpkcCA9IGRjY3Bfc2soc2spOwotCWNvbnN0IHN0cnVjdCBkY2NwX21pbmlzb2NrICpkbXNrID0gZGNjcF9tc2soc2spOwogCiAJZHAtPmRjY3BzX2dzciA9IHNlcTsKLQlkY2NwX3NldF9zZXFubygmZHAtPmRjY3BzX3N3bCwKLQkJICAgICAgIGRwLT5kY2Nwc19nc3IgKyAxIC0gKGRtc2stPmRjY3Btc19zZXF1ZW5jZV93aW5kb3cgLyA0KSk7Ci0JZGNjcF9zZXRfc2Vxbm8oJmRwLT5kY2Nwc19zd2gsCi0JCSAgICAgICBkcC0+ZGNjcHNfZ3NyICsgKDMgKiBkbXNrLT5kY2NwbXNfc2VxdWVuY2Vfd2luZG93KSAvIDQpOworCS8qIFNlcXVlbmNlIHZhbGlkaXR5IHdpbmRvdyBkZXBlbmRzIG9uIHJlbW90ZSBTZXF1ZW5jZSBXaW5kb3cgKDcuNS4xKSAqLworCWRwLT5kY2Nwc19zd2wgPSBTVUI0OChBREQ0OChkcC0+ZGNjcHNfZ3NyLCAxKSwgZHAtPmRjY3BzX3Jfc2VxX3dpbiAvIDQpOworCWRwLT5kY2Nwc19zd2ggPSBBREQ0OChkcC0+ZGNjcHNfZ3NyLCAoMyAqIGRwLT5kY2Nwc19yX3NlcV93aW4pIC8gNCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkY2NwX3VwZGF0ZV9nc3Moc3RydWN0IHNvY2sgKnNrLCB1NjQgc2VxKQogewogCXN0cnVjdCBkY2NwX3NvY2sgKmRwID0gZGNjcF9zayhzayk7CiAKLQlkcC0+ZGNjcHNfYXdoID0gZHAtPmRjY3BzX2dzcyA9IHNlcTsKLQlkY2NwX3NldF9zZXFubygmZHAtPmRjY3BzX2F3bCwKLQkJICAgICAgIChkcC0+ZGNjcHNfZ3NzIC0KLQkJCWRjY3BfbXNrKHNrKS0+ZGNjcG1zX3NlcXVlbmNlX3dpbmRvdyArIDEpKTsKKwlkcC0+ZGNjcHNfZ3NzID0gc2VxOworCS8qIEFjayB2YWxpZGl0eSB3aW5kb3cgZGVwZW5kcyBvbiBsb2NhbCBTZXF1ZW5jZSBXaW5kb3cgdmFsdWUgKDcuNS4xKSAqLworCWRwLT5kY2Nwc19hd2wgPSBTVUI0OChBREQ0OChkcC0+ZGNjcHNfZ3NzLCAxKSwgZHAtPmRjY3BzX2xfc2VxX3dpbik7CisJZHAtPmRjY3BzX2F3aCA9IGRwLT5kY2Nwc19nc3M7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGRjY3BfYWNrX3BlbmRpbmcoY29uc3Qgc3RydWN0IHNvY2sgKnNrKQpkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvZmVhdC5jIGIvbmV0L2RjY3AvZmVhdC5jCmluZGV4IDQxNTIzMDguLmIwNDE2MGEgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL2ZlYXQuYworKysgYi9uZXQvZGNjcC9mZWF0LmMKQEAgLTI1LDYgKzI1LDExIEBACiAjaW5jbHVkZSAiY2NpZC5oIgogI2luY2x1ZGUgImZlYXQuaCIKIAorLyogZmVhdHVyZS1zcGVjaWZpYyBzeXNjdGxzIC0gaW5pdGlhbGlzZWQgdG8gdGhlIGRlZmF1bHRzIGZyb20gUkZDIDQzNDAsIDYuNCAqLwordW5zaWduZWQgbG9uZwlzeXNjdGxfZGNjcF9zZXF1ZW5jZV93aW5kb3cgX19yZWFkX21vc3RseSA9IDEwMDsKK2ludAkJc3lzY3RsX2RjY3BfcnhfY2NpZAkgICAgX19yZWFkX21vc3RseSA9IDIsCisJCXN5c2N0bF9kY2NwX3R4X2NjaWQJICAgIF9fcmVhZF9tb3N0bHkgPSAyOworCiAvKgogICogRmVhdHVyZSBhY3RpdmF0aW9uIGhhbmRsZXJzLgogICoKQEAgLTUxLDggKzU2LDE3IEBACiAKIHN0YXRpYyBpbnQgZGNjcF9oZGxyX3NlcV93aW4oc3RydWN0IHNvY2sgKnNrLCB1NjQgc2VxX3dpbiwgYm9vbCByeCkKIHsKLQlpZiAoIXJ4KQotCQlkY2NwX21zayhzayktPmRjY3Btc19zZXF1ZW5jZV93aW5kb3cgPSBzZXFfd2luOworCXN0cnVjdCBkY2NwX3NvY2sgKmRwID0gZGNjcF9zayhzayk7CisKKwlpZiAocngpIHsKKwkJZHAtPmRjY3BzX3Jfc2VxX3dpbiA9IHNlcV93aW47CisJCS8qIHByb3BhZ2F0ZSBjaGFuZ2VzIHRvIHVwZGF0ZSBTV0wvU1dIICovCisJCWRjY3BfdXBkYXRlX2dzcihzaywgZHAtPmRjY3BzX2dzcik7CisJfSBlbHNlIHsKKwkJZHAtPmRjY3BzX2xfc2VxX3dpbiA9IHNlcV93aW47CisJCS8qIHByb3BhZ2F0ZSBjaGFuZ2VzIHRvIHVwZGF0ZSBBV0wgKi8KKwkJZGNjcF91cGRhdGVfZ3NzKHNrLCBkcC0+ZGNjcHNfZ3NzKTsKKwl9CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE5NCw2ICsyMDgsMTAwIEBACiAJcmV0dXJuIGlkeCA8IDAgPyAwIDogZGNjcF9mZWF0X3RhYmxlW2lkeF0uZGVmYXVsdF92YWx1ZTsKIH0KIAorLyoKKyAqCURlYnVnZ2luZyBhbmQgdmVyYm9zZS1wcmludGluZyBzZWN0aW9uCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICpkY2NwX2ZlYXRfZm5hbWUoY29uc3QgdTggZmVhdCkKK3sKKwlzdGF0aWMgY29uc3QgY2hhciAqZmVhdHVyZV9uYW1lc1tdID0geworCQlbRENDUEZfUkVTRVJWRURdCT0gIlJlc2VydmVkIiwKKwkJW0RDQ1BGX0NDSURdCQk9ICJDQ0lEIiwKKwkJW0RDQ1BGX1NIT1JUX1NFUU5PU10JPSAiQWxsb3cgU2hvcnQgU2Vxbm9zIiwKKwkJW0RDQ1BGX1NFUVVFTkNFX1dJTkRPV10JPSAiU2VxdWVuY2UgV2luZG93IiwKKwkJW0RDQ1BGX0VDTl9JTkNBUEFCTEVdCT0gIkVDTiBJbmNhcGFibGUiLAorCQlbRENDUEZfQUNLX1JBVElPXQk9ICJBY2sgUmF0aW8iLAorCQlbRENDUEZfU0VORF9BQ0tfVkVDVE9SXQk9ICJTZW5kIEFDSyBWZWN0b3IiLAorCQlbRENDUEZfU0VORF9ORFBfQ09VTlRdCT0gIlNlbmQgTkRQIENvdW50IiwKKwkJW0RDQ1BGX01JTl9DU1VNX0NPVkVSXQk9ICJNaW4uIENzdW0gQ292ZXJhZ2UiLAorCQlbRENDUEZfREFUQV9DSEVDS1NVTV0JPSAiU2VuZCBEYXRhIENoZWNrc3VtIiwKKwl9OworCWlmIChmZWF0ID4gRENDUEZfREFUQV9DSEVDS1NVTSAmJiBmZWF0IDwgRENDUEZfTUlOX0NDSURfU1BFQ0lGSUMpCisJCXJldHVybiBmZWF0dXJlX25hbWVzW0RDQ1BGX1JFU0VSVkVEXTsKKworCWlmIChmZWF0ID09ICBEQ0NQRl9TRU5EX0xFVl9SQVRFKQorCQlyZXR1cm4gIlNlbmQgTG9zcyBFdmVudCBSYXRlIjsKKwlpZiAoZmVhdCA+PSBEQ0NQRl9NSU5fQ0NJRF9TUEVDSUZJQykKKwkJcmV0dXJuICJDQ0lELXNwZWNpZmljIjsKKworCXJldHVybiBmZWF0dXJlX25hbWVzW2ZlYXRdOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqZGNjcF9mZWF0X3NuYW1lW10gPSB7ICJERUZBVUxUIiwgIklOSVRJQUxJU0lORyIsICJDSEFOR0lORyIsCisJCQkJCSAiVU5TVEFCTEUiLCAiU1RBQkxFIiB9OworCisjaWZkZWYgQ09ORklHX0lQX0RDQ1BfREVCVUcKK3N0YXRpYyBjb25zdCBjaGFyICpkY2NwX2ZlYXRfb25hbWUoY29uc3QgdTggb3B0KQoreworCXN3aXRjaCAob3B0KSB7CisJY2FzZSBEQ0NQT19DSEFOR0VfTDogIHJldHVybiAiQ2hhbmdlX0wiOworCWNhc2UgRENDUE9fQ09ORklSTV9MOiByZXR1cm4gIkNvbmZpcm1fTCI7CisJY2FzZSBEQ0NQT19DSEFOR0VfUjogIHJldHVybiAiQ2hhbmdlX1IiOworCWNhc2UgRENDUE9fQ09ORklSTV9SOiByZXR1cm4gIkNvbmZpcm1fUiI7CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBkY2NwX2ZlYXRfcHJpbnR2YWwodTggZmVhdF9udW0sIGRjY3BfZmVhdF92YWwgY29uc3QgKnZhbCkKK3sKKwl1OCBpLCB0eXBlID0gZGNjcF9mZWF0X3R5cGUoZmVhdF9udW0pOworCisJaWYgKHZhbCA9PSBOVUxMIHx8ICh0eXBlID09IEZFQVRfU1AgJiYgdmFsLT5zcC52ZWMgPT0gTlVMTCkpCisJCWRjY3BfcHJfZGVidWdfY2F0KCIoTlVMTCkiKTsKKwllbHNlIGlmICh0eXBlID09IEZFQVRfU1ApCisJCWZvciAoaSA9IDA7IGkgPCB2YWwtPnNwLmxlbjsgaSsrKQorCQkJZGNjcF9wcl9kZWJ1Z19jYXQoIiVzJXUiLCBpID8gIiAiIDogIiIsIHZhbC0+c3AudmVjW2ldKTsKKwllbHNlIGlmICh0eXBlID09IEZFQVRfTk4pCisJCWRjY3BfcHJfZGVidWdfY2F0KCIlbGx1IiwgKHVuc2lnbmVkIGxvbmcgbG9uZyl2YWwtPm5uKTsKKwllbHNlCisJCWRjY3BfcHJfZGVidWdfY2F0KCJ1bmtub3duIHR5cGUgJXUiLCB0eXBlKTsKK30KKworc3RhdGljIHZvaWQgZGNjcF9mZWF0X3ByaW50dmFscyh1OCBmZWF0X251bSwgdTggKmxpc3QsIHU4IGxlbikKK3sKKwl1OCB0eXBlID0gZGNjcF9mZWF0X3R5cGUoZmVhdF9udW0pOworCWRjY3BfZmVhdF92YWwgZnZhbCA9IHsgLnNwLnZlYyA9IGxpc3QsIC5zcC5sZW4gPSBsZW4gfTsKKworCWlmICh0eXBlID09IEZFQVRfTk4pCisJCWZ2YWwubm4gPSBkY2NwX2RlY29kZV92YWx1ZV92YXIobGlzdCwgbGVuKTsKKwlkY2NwX2ZlYXRfcHJpbnR2YWwoZmVhdF9udW0sICZmdmFsKTsKK30KKworc3RhdGljIHZvaWQgZGNjcF9mZWF0X3ByaW50X2VudHJ5KHN0cnVjdCBkY2NwX2ZlYXRfZW50cnkgY29uc3QgKmVudHJ5KQoreworCWRjY3BfZGVidWcoIiAgICogJXMgJXMgPSAiLCBlbnRyeS0+aXNfbG9jYWwgPyAibG9jYWwiIDogInJlbW90ZSIsCisJCQkJICAgIGRjY3BfZmVhdF9mbmFtZShlbnRyeS0+ZmVhdF9udW0pKTsKKwlkY2NwX2ZlYXRfcHJpbnR2YWwoZW50cnktPmZlYXRfbnVtLCAmZW50cnktPnZhbCk7CisJZGNjcF9wcl9kZWJ1Z19jYXQoIiwgc3RhdGU9JXMgJXNcbiIsIGRjY3BfZmVhdF9zbmFtZVtlbnRyeS0+c3RhdGVdLAorCQkJICBlbnRyeS0+bmVlZHNfY29uZmlybSA/ICIoQ29uZmlybSBwZW5kaW5nKSIgOiAiIik7Cit9CisKKyNkZWZpbmUgZGNjcF9mZWF0X3ByaW50X29wdChvcHQsIGZlYXQsIHZhbCwgbGVuLCBtYW5kYXRvcnkpCWRvIHsJICAgICAgXAorCWRjY3BfcHJfZGVidWcoIiVzKCVzLCAiLCBkY2NwX2ZlYXRfb25hbWUob3B0KSwgZGNjcF9mZWF0X2ZuYW1lKGZlYXQpKTtcCisJZGNjcF9mZWF0X3ByaW50dmFscyhmZWF0LCB2YWwsIGxlbik7CQkJCSAgICAgIFwKKwlkY2NwX3ByX2RlYnVnX2NhdCgiKSAlc1xuIiwgbWFuZGF0b3J5ID8gIiEiIDogIiIpOwl9IHdoaWxlICgwKQorCisjZGVmaW5lIGRjY3BfZmVhdF9wcmludF9mbmxpc3QoZm5fbGlzdCkgIHsJCVwKKwljb25zdCBzdHJ1Y3QgZGNjcF9mZWF0X2VudHJ5ICpfX19lbnRyeTsJCVwKKwkJCQkJCQlcCisJZGNjcF9wcl9kZWJ1ZygiTGlzdCBEdW1wOlxuIik7CQkJXAorCWxpc3RfZm9yX2VhY2hfZW50cnkoX19fZW50cnksIGZuX2xpc3QsIG5vZGUpCVwKKwkJZGNjcF9mZWF0X3ByaW50X2VudHJ5KF9fX2VudHJ5KTsJXAorfQorI2Vsc2UJLyogISBDT05GSUdfSVBfRENDUF9ERUJVRyAqLworI2RlZmluZSBkY2NwX2ZlYXRfcHJpbnRfb3B0KG9wdCwgZmVhdCwgdmFsLCBsZW4sIG1hbmRhdG9yeSkKKyNkZWZpbmUgZGNjcF9mZWF0X3ByaW50X2ZubGlzdChmbl9saXN0KQorI2VuZGlmCisKIHN0YXRpYyBpbnQgX19kY2NwX2ZlYXRfYWN0aXZhdGUoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBpbnQgaWR4LAogCQkJCWNvbnN0IGJvb2wgaXNfbG9jYWwsIGRjY3BfZmVhdF92YWwgY29uc3QgKmZ2YWwpCiB7CkBAIC0yMjYsNiArMzM0LDEwIEBACiAJLyogTG9jYXRpb24gaXMgUlggaWYgdGhpcyBpcyBhIGxvY2FsLVJYIG9yIHJlbW90ZS1UWCBmZWF0dXJlICovCiAJcnggPSAoaXNfbG9jYWwgPT0gKGRjY3BfZmVhdF90YWJsZVtpZHhdLnJ4dHggPT0gRkVBVF9BVF9SWCkpOwogCisJZGNjcF9kZWJ1ZygiICAgLT4gYWN0aXZhdGluZyAlcyAlcywgJXN2YWw9JWxsdVxuIiwgcnggPyAiUlgiIDogIlRYIiwKKwkJICAgZGNjcF9mZWF0X2ZuYW1lKGRjY3BfZmVhdF90YWJsZVtpZHhdLmZlYXRfbnVtKSwKKwkJICAgZnZhbCA/ICIiIDogImRlZmF1bHQgIiwgICh1bnNpZ25lZCBsb25nIGxvbmcpdmFsKTsKKwogCXJldHVybiBkY2NwX2ZlYXRfdGFibGVbaWR4XS5hY3RpdmF0aW9uX2hkbHIoc2ssIHZhbCwgcngpOwogfQogCkBAIC01MzAsNiArNjQyLDcgQEAKIAkJCQlyZXR1cm4gLTE7CiAJCQl9CiAJCX0KKwkJZGNjcF9mZWF0X3ByaW50X29wdChvcHQsIHBvcy0+ZmVhdF9udW0sIHB0ciwgbGVuLCAwKTsKIAogCQlpZiAoZGNjcF9pbnNlcnRfZm5fb3B0KHNrYiwgb3B0LCBwb3MtPmZlYXRfbnVtLCBwdHIsIGxlbiwgcnB0KSkKIAkJCXJldHVybiAtMTsKQEAgLTc4Myw2ICs4OTYsNyBAQAogCXdoaWxlIChpLS0pCiAJCWlmIChjY2lkc1tpXSA+IDAgJiYgZGNjcF9mZWF0X3Byb3BhZ2F0ZV9jY2lkKGZuLCBjY2lkc1tpXSwgaSkpCiAJCQlyZXR1cm4gLTE7CisJZGNjcF9mZWF0X3ByaW50X2ZubGlzdChmbik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTkwMSw2ICsxMDE1LDggQEAKIAlpZiAobGVuID09IDAgfHwgdHlwZSA9PSBGRUFUX1VOS05PV04pCQkvKiA2LjEgYW5kIDYuNi44ICovCiAJCWdvdG8gdW5rbm93bl9mZWF0dXJlX29yX3ZhbHVlOwogCisJZGNjcF9mZWF0X3ByaW50X29wdChvcHQsIGZlYXQsIHZhbCwgbGVuLCBpc19tYW5kYXRvcnkpOworCiAJLyoKIAkgKglOZWdvdGlhdGlvbiBvZiBOTiBmZWF0dXJlczogQ2hhbmdlIFIgaXMgaW52YWxpZCwgc28gdGhlcmUgaXMgbm8KIAkgKglzaW11bHRhbmVvdXMgbmVnb3RpYXRpb247IGhlbmNlIHdlIGRvIG5vdCBsb29rIHVwIGluIHRoZSBsaXN0LgpAQCAtMTAwNiw2ICsxMTIyLDggQEAKIAljb25zdCBib29sIGxvY2FsID0gKG9wdCA9PSBEQ0NQT19DT05GSVJNX1IpOwogCXN0cnVjdCBkY2NwX2ZlYXRfZW50cnkgKmVudHJ5ID0gZGNjcF9mZWF0X2xpc3RfbG9va3VwKGZuLCBmZWF0LCBsb2NhbCk7CiAKKwlkY2NwX2ZlYXRfcHJpbnRfb3B0KG9wdCwgZmVhdCwgdmFsLCBsZW4sIGlzX21hbmRhdG9yeSk7CisKIAlpZiAoZW50cnkgPT0gTlVMTCkgewkvKiBub3RoaW5nIHF1ZXVlZDogaWdub3JlIG9yIGhhbmRsZSBlcnJvciAqLwogCQlpZiAoaXNfbWFuZGF0b3J5ICYmIHR5cGUgPT0gRkVBVF9VTktOT1dOKQogCQkJcmV0dXJuIERDQ1BfUkVTRVRfQ09ERV9NQU5EQVRPUllfRVJST1I7CkBAIC0xMTE1LDIzICsxMjMzLDcwIEBACiAJcmV0dXJuIDA7CS8qIGlnbm9yZSBGTiBvcHRpb25zIGluIGFsbCBvdGhlciBzdGF0ZXMgKi8KIH0KIAorLyoqCisgKiBkY2NwX2ZlYXRfaW5pdCAgLSAgU2VlZCBmZWF0dXJlIG5lZ290aWF0aW9uIHdpdGggaG9zdC1zcGVjaWZpYyBkZWZhdWx0cworICogVGhpcyBpbml0aWFsaXNlcyBnbG9iYWwgZGVmYXVsdHMsIGRlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgdGhlIHN5c2N0bHMuCisgKiBUaGVzZSBjYW4gbGF0ZXIgYmUgb3ZlcnJpZGRlbiBieSByZWdpc3RlcmluZyBjaGFuZ2VzIHZpYSBzZXRzb2Nrb3B0IGNhbGxzLgorICogVGhlIGxhc3QgbGluayBpbiB0aGUgY2hhaW4gaXMgZmluYWxpc2Vfc2V0dGluZ3MsIHRvIG1ha2Ugc3VyZSB0aGF0IGJldHdlZW4KKyAqIGhlcmUgYW5kIHRoZSBzdGFydCBvZiBhY3R1YWwgZmVhdHVyZSBuZWdvdGlhdGlvbiBubyBpbmNvbnNpc3RlbmNpZXMgZW50ZXIuCisgKgorICogQWxsIGZlYXR1cmVzIG5vdCBhcHBlYXJpbmcgYmVsb3cgdXNlIGVpdGhlciBkZWZhdWx0cyBvciBhcmUgb3RoZXJ3aXNlCisgKiBsYXRlciBhZGp1c3RlZCB0aHJvdWdoIGRjY3BfZmVhdF9maW5hbGlzZV9zZXR0aW5ncygpLgorICovCiBpbnQgZGNjcF9mZWF0X2luaXQoc3RydWN0IHNvY2sgKnNrKQogewotCXN0cnVjdCBkY2NwX3NvY2sgKmRwID0gZGNjcF9zayhzayk7Ci0Jc3RydWN0IGRjY3BfbWluaXNvY2sgKmRtc2sgPSBkY2NwX21zayhzayk7CisJc3RydWN0IGxpc3RfaGVhZCAqZm4gPSAmZGNjcF9zayhzayktPmRjY3BzX2ZlYXRuZWc7CisJdTggb24gPSAxLCBvZmYgPSAwOwogCWludCByYzsKKwlzdHJ1Y3QgeworCQl1OCAqdmFsOworCQl1OCBsZW47CisJfSB0eCwgcng7CiAKLQlJTklUX0xJU1RfSEVBRCgmZG1zay0+ZGNjcG1zX3BlbmRpbmcpOwkvKiBYWFggbm8gbG9uZ2VyIHVzZWQgKi8KLQlJTklUX0xJU1RfSEVBRCgmZG1zay0+ZGNjcG1zX2NvbmYpOwkvKiBYWFggbm8gbG9uZ2VyIHVzZWQgKi8KKwkvKiBOb24tbmVnb3RpYWJsZSAoTk4pIGZlYXR1cmVzICovCisJcmMgPSBfX2ZlYXRfcmVnaXN0ZXJfbm4oZm4sIERDQ1BGX1NFUVVFTkNFX1dJTkRPVywgMCwKKwkJCQkgICAgc3lzY3RsX2RjY3Bfc2VxdWVuY2Vfd2luZG93KTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKIAotCS8qIEFjayByYXRpbyAqLwotCXJjID0gX19mZWF0X3JlZ2lzdGVyX25uKCZkcC0+ZGNjcHNfZmVhdG5lZywgRENDUEZfQUNLX1JBVElPLCAwLAotCQkJCWRwLT5kY2Nwc19sX2Fja19yYXRpbyk7CisJLyogU2VydmVyLXByaW9yaXR5IChTUCkgZmVhdHVyZXMgKi8KKworCS8qIEFkdmVydGlzZSB0aGF0IHNob3J0IHNlcW5vcyBhcmUgbm90IHN1cHBvcnRlZCAoNy42LjEpICovCisJcmMgPSBfX2ZlYXRfcmVnaXN0ZXJfc3AoZm4sIERDQ1BGX1NIT1JUX1NFUU5PUywgdHJ1ZSwgdHJ1ZSwgJm9mZiwgMSk7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisKKwkvKiBSRkMgNDM0MCAxMi4xOiAiSWYgYSBEQ0NQIGlzIG5vdCBFQ04gY2FwYWJsZSwgLi4uIiAqLworCXJjID0gX19mZWF0X3JlZ2lzdGVyX3NwKGZuLCBEQ0NQRl9FQ05fSU5DQVBBQkxFLCB0cnVlLCB0cnVlLCAmb24sIDEpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJLyoKKwkgKiBXZSBhZHZlcnRpc2UgdGhlIGF2YWlsYWJsZSBsaXN0IG9mIENDSURzIGFuZCByZW9yZGVyIGFjY29yZGluZyB0bworCSAqIHByZWZlcmVuY2VzLCB0byBhdm9pZCBmYWlsdXJlIHJlc3VsdGluZyBmcm9tIG5lZ290aWF0aW5nIGRpZmZlcmVudAorCSAqIHNpbmdsZXRvbiB2YWx1ZXMgKHdoaWNoIGFsd2F5cyBsZWFkcyB0byBmYWlsdXJlKS4KKwkgKiBUaGVzZSBzZXR0aW5ncyBjYW4gc3RpbGwgKGxhdGVyKSBiZSBvdmVycmlkZGVuIHZpYSBzb2Nrb3B0cy4KKwkgKi8KKwlpZiAoY2NpZF9nZXRfYnVpbHRpbl9jY2lkcygmdHgudmFsLCAmdHgubGVuKSB8fAorCSAgICBjY2lkX2dldF9idWlsdGluX2NjaWRzKCZyeC52YWwsICZyeC5sZW4pKQorCQlyZXR1cm4gLUVOT0JVRlM7CisKKwlpZiAoIWRjY3BfZmVhdF9wcmVmZXIoc3lzY3RsX2RjY3BfdHhfY2NpZCwgdHgudmFsLCB0eC5sZW4pIHx8CisJICAgICFkY2NwX2ZlYXRfcHJlZmVyKHN5c2N0bF9kY2NwX3J4X2NjaWQsIHJ4LnZhbCwgcngubGVuKSkKKwkJZ290byBmcmVlX2NjaWRfbGlzdHM7CisKKwlyYyA9IF9fZmVhdF9yZWdpc3Rlcl9zcChmbiwgRENDUEZfQ0NJRCwgdHJ1ZSwgZmFsc2UsIHR4LnZhbCwgdHgubGVuKTsKKwlpZiAocmMpCisJCWdvdG8gZnJlZV9jY2lkX2xpc3RzOworCisJcmMgPSBfX2ZlYXRfcmVnaXN0ZXJfc3AoZm4sIERDQ1BGX0NDSUQsIGZhbHNlLCBmYWxzZSwgcngudmFsLCByeC5sZW4pOworCitmcmVlX2NjaWRfbGlzdHM6CisJa2ZyZWUodHgudmFsKTsKKwlrZnJlZShyeC52YWwpOwogCXJldHVybiByYzsKIH0KIAotRVhQT1JUX1NZTUJPTF9HUEwoZGNjcF9mZWF0X2luaXQpOwotCiBpbnQgZGNjcF9mZWF0X2FjdGl2YXRlX3ZhbHVlcyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBsaXN0X2hlYWQgKmZuX2xpc3QpCiB7CiAJc3RydWN0IGRjY3Bfc29jayAqZHAgPSBkY2NwX3NrKHNrKTsKQEAgLTExNTYsOSArMTMyMSwxMCBAQAogCQkJZ290byBhY3RpdmF0aW9uX2ZhaWxlZDsKIAkJfQogCQlpZiAoY3VyLT5zdGF0ZSAhPSBGRUFUX1NUQUJMRSkgewotCQkJRENDUF9DUklUKCJOZWdvdGlhdGlvbiBvZiAlcyAldSBmYWlsZWQgaW4gc3RhdGUgJXUiLAorCQkJRENDUF9DUklUKCJOZWdvdGlhdGlvbiBvZiAlcyAlcyBmYWlsZWQgaW4gc3RhdGUgJXMiLAogCQkJCSAgY3VyLT5pc19sb2NhbCA/ICJsb2NhbCIgOiAicmVtb3RlIiwKLQkJCQkgIGN1ci0+ZmVhdF9udW0sIGN1ci0+c3RhdGUpOworCQkJCSAgZGNjcF9mZWF0X2ZuYW1lKGN1ci0+ZmVhdF9udW0pLAorCQkJCSAgZGNjcF9mZWF0X3NuYW1lW2N1ci0+c3RhdGVdKTsKIAkJCWdvdG8gYWN0aXZhdGlvbl9mYWlsZWQ7CiAJCX0KIAkJZnZhbHNbaWR4XVtjdXItPmlzX2xvY2FsXSA9ICZjdXItPnZhbDsKQEAgLTExOTksNDMgKzEzNjUsMyBAQAogCWRwLT5kY2Nwc19oY19yeF9hY2t2ZWMgPSBOVUxMOwogCXJldHVybiAtMTsKIH0KLQotI2lmZGVmIENPTkZJR19JUF9EQ0NQX0RFQlVHCi1jb25zdCBjaGFyICpkY2NwX2ZlYXRfdHlwZW5hbWUoY29uc3QgdTggdHlwZSkKLXsKLQlzd2l0Y2godHlwZSkgewotCWNhc2UgRENDUE9fQ0hBTkdFX0w6ICByZXR1cm4oIkNoYW5nZUwiKTsKLQljYXNlIERDQ1BPX0NPTkZJUk1fTDogcmV0dXJuKCJDb25maXJtTCIpOwotCWNhc2UgRENDUE9fQ0hBTkdFX1I6ICByZXR1cm4oIkNoYW5nZVIiKTsKLQljYXNlIERDQ1BPX0NPTkZJUk1fUjogcmV0dXJuKCJDb25maXJtUiIpOwotCS8qIHRoZSBmb2xsb3dpbmcgY2FzZSBtdXN0IG5vdCBhcHBlYXIgaW4gZmVhdHVyZSBuZWdvdGF0aW9uICAqLwotCWRlZmF1bHQ6CSAgICAgIGRjY3BfcHJfZGVidWcoInVua25vd24gdHlwZSAlZCBbQlVHIV1cbiIsIHR5cGUpOwotCX0KLQlyZXR1cm4gTlVMTDsKLX0KLQotY29uc3QgY2hhciAqZGNjcF9mZWF0X25hbWUoY29uc3QgdTggZmVhdCkKLXsKLQlzdGF0aWMgY29uc3QgY2hhciAqZmVhdHVyZV9uYW1lc1tdID0gewotCQlbRENDUEZfUkVTRVJWRURdCT0gIlJlc2VydmVkIiwKLQkJW0RDQ1BGX0NDSURdCQk9ICJDQ0lEIiwKLQkJW0RDQ1BGX1NIT1JUX1NFUU5PU10JPSAiQWxsb3cgU2hvcnQgU2Vxbm9zIiwKLQkJW0RDQ1BGX1NFUVVFTkNFX1dJTkRPV10JPSAiU2VxdWVuY2UgV2luZG93IiwKLQkJW0RDQ1BGX0VDTl9JTkNBUEFCTEVdCT0gIkVDTiBJbmNhcGFibGUiLAotCQlbRENDUEZfQUNLX1JBVElPXQk9ICJBY2sgUmF0aW8iLAotCQlbRENDUEZfU0VORF9BQ0tfVkVDVE9SXQk9ICJTZW5kIEFDSyBWZWN0b3IiLAotCQlbRENDUEZfU0VORF9ORFBfQ09VTlRdCT0gIlNlbmQgTkRQIENvdW50IiwKLQkJW0RDQ1BGX01JTl9DU1VNX0NPVkVSXQk9ICJNaW4uIENzdW0gQ292ZXJhZ2UiLAotCQlbRENDUEZfREFUQV9DSEVDS1NVTV0JPSAiU2VuZCBEYXRhIENoZWNrc3VtIiwKLQl9OwotCWlmIChmZWF0ID4gRENDUEZfREFUQV9DSEVDS1NVTSAmJiBmZWF0IDwgRENDUEZfTUlOX0NDSURfU1BFQ0lGSUMpCi0JCXJldHVybiBmZWF0dXJlX25hbWVzW0RDQ1BGX1JFU0VSVkVEXTsKLQotCWlmIChmZWF0ID09ICBEQ0NQRl9TRU5EX0xFVl9SQVRFKQotCQlyZXR1cm4gIlNlbmQgTG9zcyBFdmVudCBSYXRlIjsKLQlpZiAoZmVhdCA+PSBEQ0NQRl9NSU5fQ0NJRF9TUEVDSUZJQykKLQkJcmV0dXJuICJDQ0lELXNwZWNpZmljIjsKLQotCXJldHVybiBmZWF0dXJlX25hbWVzW2ZlYXRdOwotfQotI2VuZGlmIC8qIENPTkZJR19JUF9EQ0NQX0RFQlVHICovCmRpZmYgLS1naXQgYS9uZXQvZGNjcC9mZWF0LmggYi9uZXQvZGNjcC9mZWF0LmgKaW5kZXggOWI0NmUyYS4uZjk2NzIxNiAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvZmVhdC5oCisrKyBiL25ldC9kY2NwL2ZlYXQuaApAQCAtMTAwLDI2ICsxMDAsMjEgQEAKIAl1OAl2YWw7CiB9OwogCi0jaWZkZWYgQ09ORklHX0lQX0RDQ1BfREVCVUcKLWV4dGVybiBjb25zdCBjaGFyICpkY2NwX2ZlYXRfdHlwZW5hbWUoY29uc3QgdTggdHlwZSk7Ci1leHRlcm4gY29uc3QgY2hhciAqZGNjcF9mZWF0X25hbWUoY29uc3QgdTggZmVhdCk7CisvKgorICogU3lzY3RscyB0byBzZWVkIGRlZmF1bHRzIGZvciBmZWF0dXJlIG5lZ290aWF0aW9uCisgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIHN5c2N0bF9kY2NwX3NlcXVlbmNlX3dpbmRvdzsKK2V4dGVybiBpbnQJICAgICBzeXNjdGxfZGNjcF9yeF9jY2lkOworZXh0ZXJuIGludAkgICAgIHN5c2N0bF9kY2NwX3R4X2NjaWQ7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBkY2NwX2ZlYXRfZGVidWcoY29uc3QgdTggdHlwZSwgY29uc3QgdTggZmVhdCwgY29uc3QgdTggdmFsKQotewotCWRjY3BfcHJfZGVidWcoIiVzKCVzICglZCksICVkKVxuIiwgZGNjcF9mZWF0X3R5cGVuYW1lKHR5cGUpLAotCQkJCQkgICBkY2NwX2ZlYXRfbmFtZShmZWF0KSwgZmVhdCwgdmFsKTsKLX0KLSNlbHNlCi0jZGVmaW5lIGRjY3BfZmVhdF9kZWJ1Zyh0eXBlLCBmZWF0LCB2YWwpCi0jZW5kaWYgLyogQ09ORklHX0lQX0RDQ1BfREVCVUcgKi8KLQorZXh0ZXJuIGludCAgZGNjcF9mZWF0X2luaXQoc3RydWN0IHNvY2sgKnNrKTsKK2V4dGVybiB2b2lkIGRjY3BfZmVhdF9pbml0aWFsaXNlX3N5c2N0bHModm9pZCk7CiBleHRlcm4gaW50ICBkY2NwX2ZlYXRfcmVnaXN0ZXJfc3Aoc3RydWN0IHNvY2sgKnNrLCB1OCBmZWF0LCB1OCBpc19sb2NhbCwKIAkJCQkgIHU4IGNvbnN0ICpsaXN0LCB1OCBsZW4pOwogZXh0ZXJuIGludCAgZGNjcF9mZWF0X3JlZ2lzdGVyX25uKHN0cnVjdCBzb2NrICpzaywgdTggZmVhdCwgdTY0IHZhbCk7CiBleHRlcm4gaW50ICBkY2NwX2ZlYXRfcGFyc2Vfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqLCBzdHJ1Y3QgZGNjcF9yZXF1ZXN0X3NvY2sgKiwKIAkJCQkgICAgdTggbWFuZCwgdTggb3B0LCB1OCBmZWF0LCB1OCAqdmFsLCB1OCBsZW4pOwogZXh0ZXJuIGludCAgZGNjcF9mZWF0X2Nsb25lX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCBjb25zdCAqLCBzdHJ1Y3QgbGlzdF9oZWFkICopOwotZXh0ZXJuIGludCAgZGNjcF9mZWF0X2luaXQoc3RydWN0IHNvY2sgKnNrKTsKIAogLyoKICAqIEVuY29kaW5nIHZhcmlhYmxlLWxlbmd0aCBvcHRpb25zIGFuZCB0aGVpciBtYXhpbXVtIGxlbmd0aC4KZGlmZiAtLWdpdCBhL25ldC9kY2NwL21pbmlzb2Nrcy5jIGIvbmV0L2RjY3AvbWluaXNvY2tzLmMKaW5kZXggNjgyMWFlMy4uNWNhNDljZSAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvbWluaXNvY2tzLmMKKysrIGIvbmV0L2RjY3AvbWluaXNvY2tzLmMKQEAgLTQyLDExICs0Miw2IEBACiAKIEVYUE9SVF9TWU1CT0xfR1BMKGRjY3BfZGVhdGhfcm93KTsKIAotdm9pZCBkY2NwX21pbmlzb2NrX2luaXQoc3RydWN0IGRjY3BfbWluaXNvY2sgKmRtc2spCi17Ci0JZG1zay0+ZGNjcG1zX3NlcXVlbmNlX3dpbmRvdyA9IHN5c2N0bF9kY2NwX2ZlYXRfc2VxdWVuY2Vfd2luZG93OwotfQotCiB2b2lkIGRjY3BfdGltZV93YWl0KHN0cnVjdCBzb2NrICpzaywgaW50IHN0YXRlLCBpbnQgdGltZW8pCiB7CiAJc3RydWN0IGluZXRfdGltZXdhaXRfc29jayAqdHcgPSBOVUxMOwpAQCAtMTEwLDcgKzEwNSw2IEBACiAJCXN0cnVjdCBkY2NwX3JlcXVlc3Rfc29jayAqZHJlcSA9IGRjY3BfcnNrKHJlcSk7CiAJCXN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqbmV3aWNzayA9IGluZXRfY3NrKG5ld3NrKTsKIAkJc3RydWN0IGRjY3Bfc29jayAqbmV3ZHAgPSBkY2NwX3NrKG5ld3NrKTsKLQkJc3RydWN0IGRjY3BfbWluaXNvY2sgKm5ld2Rtc2sgPSBkY2NwX21zayhuZXdzayk7CiAKIAkJbmV3ZHAtPmRjY3BzX3JvbGUJICAgID0gRENDUF9ST0xFX1NFUlZFUjsKIAkJbmV3ZHAtPmRjY3BzX2hjX3J4X2Fja3ZlYyAgID0gTlVMTDsKQEAgLTEyOCwxMCArMTIyLDYgQEAKIAkJICogICAgSW5pdGlhbGl6ZSBTLkdBUiA6PSBTLklTUwogCQkgKiAgICBTZXQgUy5JU1IsIFMuR1NSLCBTLlNXTCwgUy5TV0ggZnJvbSBwYWNrZXQgb3IgSW5pdCBDb29raWVzCiAJCSAqLwotCi0JCS8qIFNlZSBkY2NwX3Y0X2Nvbm5fcmVxdWVzdCAqLwotCQluZXdkbXNrLT5kY2NwbXNfc2VxdWVuY2Vfd2luZG93ID0gcmVxLT5yY3Zfd25kOwotCiAJCW5ld2RwLT5kY2Nwc19nYXIgPSBuZXdkcC0+ZGNjcHNfaXNzID0gZHJlcS0+ZHJlcV9pc3M7CiAJCWRjY3BfdXBkYXRlX2dzcyhuZXdzaywgZHJlcS0+ZHJlcV9pc3MpOwogCkBAIC0yOTAsNyArMjgwLDYgQEAKIAlpbmV0X3JzayhyZXEpLT5ybXRfcG9ydAkgID0gZGNjcF9oZHIoc2tiKS0+ZGNjcGhfc3BvcnQ7CiAJaW5ldF9yc2socmVxKS0+bG9jX3BvcnQJICA9IGRjY3BfaGRyKHNrYiktPmRjY3BoX2Rwb3J0OwogCWluZXRfcnNrKHJlcSktPmFja2VkCSAgPSAwOwotCXJlcS0+cmN2X3duZAkJICA9IHN5c2N0bF9kY2NwX2ZlYXRfc2VxdWVuY2Vfd2luZG93OwogCWRyZXEtPmRyZXFfdGltZXN0YW1wX2VjaG8gPSAwOwogCiAJLyogaW5oZXJpdCBmZWF0dXJlIG5lZ290aWF0aW9uIG9wdGlvbnMgZnJvbSBsaXN0ZW5pbmcgc29ja2V0ICovCmRpZmYgLS1naXQgYS9uZXQvZGNjcC9vcHRpb25zLmMgYi9uZXQvZGNjcC9vcHRpb25zLmMKaW5kZXggN2IxMTY1Yy4uMWIwOGNhZSAxMDA2NDQKLS0tIGEvbmV0L2RjY3Avb3B0aW9ucy5jCisrKyBiL25ldC9kY2NwL29wdGlvbnMuYwpAQCAtMjMsMTAgKzIzLDYgQEAKICNpbmNsdWRlICJkY2NwLmgiCiAjaW5jbHVkZSAiZmVhdC5oIgogCi1pbnQgc3lzY3RsX2RjY3BfZmVhdF9zZXF1ZW5jZV93aW5kb3cgPSBEQ0NQRl9JTklUSUFMX1NFUVVFTkNFX1dJTkRPVzsKLWludCBzeXNjdGxfZGNjcF9mZWF0X3J4X2NjaWQJICAgICAgPSBEQ0NQRl9JTklUSUFMX0NDSUQ7Ci1pbnQgc3lzY3RsX2RjY3BfZmVhdF90eF9jY2lkCSAgICAgID0gRENDUEZfSU5JVElBTF9DQ0lEOwotCiB1NjQgZGNjcF9kZWNvZGVfdmFsdWVfdmFyKGNvbnN0IHU4ICpiZiwgY29uc3QgdTggbGVuKQogewogCXU2NCB2YWx1ZSA9IDA7CkBAIC01MDIsMTAgKzQ5OCw2IEBACiAJCSp0bysrID0gKnZhbDsKIAlpZiAobGVuKQogCQltZW1jcHkodG8sIHZhbCwgbGVuKTsKLQotCWRjY3BfcHJfZGVidWcoIiVzKCVzICglZCksIC4uLiksIGxlbmd0aCAlZFxuIiwKLQkJICAgICAgZGNjcF9mZWF0X3R5cGVuYW1lKHR5cGUpLAotCQkgICAgICBkY2NwX2ZlYXRfbmFtZShmZWF0KSwgZmVhdCwgbGVuKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2RjY3Avb3V0cHV0LmMgYi9uZXQvZGNjcC9vdXRwdXQuYwppbmRleCAyMmE2MThhLi4zNmJjYzAwIDEwMDY0NAotLS0gYS9uZXQvZGNjcC9vdXRwdXQuYworKysgYi9uZXQvZGNjcC9vdXRwdXQuYwpAQCAtMTYxLDIxICsxNjEsMjcgQEAKIAlzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7CiAJc3RydWN0IGRjY3Bfc29jayAqZHAgPSBkY2NwX3NrKHNrKTsKIAl1MzIgY2NtcHMgPSBkY2NwX2RldGVybWluZV9jY21wcyhkcCk7Ci0JaW50IGN1cl9tcHMgPSBjY21wcyA/IG1pbihwbXR1LCBjY21wcykgOiBwbXR1OworCXUzMiBjdXJfbXBzID0gY2NtcHMgPyBtaW4ocG10dSwgY2NtcHMpIDogcG10dTsKIAogCS8qIEFjY291bnQgZm9yIGhlYWRlciBsZW5ndGhzIGFuZCBJUHY0L3Y2IG9wdGlvbiBvdmVyaGVhZCAqLwogCWN1cl9tcHMgLT0gKGljc2stPmljc2tfYWZfb3BzLT5uZXRfaGVhZGVyX2xlbiArIGljc2stPmljc2tfZXh0X2hkcl9sZW4gKwogCQkgICAgc2l6ZW9mKHN0cnVjdCBkY2NwX2hkcikgKyBzaXplb2Yoc3RydWN0IGRjY3BfaGRyX2V4dCkpOwogCiAJLyoKLQkgKiBGSVhNRTogdGhpcyBzaG91bGQgY29tZSBmcm9tIHRoZSBDQ0lEIGluZnJhc3RydWN0dXJlLCB3aGVyZSwgc2F5LAotCSAqIFRGUkMgd2lsbCBzYXkgaXQgd2FudHMgVElNRVNUQU1QUywgRUxBUFNFRCB0aW1lLCBldGMsIGZvciBub3cgbGV0cwotCSAqIHB1dCBhIHJvdWdoIGVzdGltYXRlIGZvciBORFAgKyBUSU1FU1RBTVAgKyBUSU1FU1RBTVBfRUNITyArIEVMQVBTRUQKLQkgKiBUSU1FICsgVEZSQ19PUFRfTE9TU19FVkVOVF9SQVRFICsgVEZSQ19PUFRfUkVDRUlWRV9SQVRFICsgcGFkZGluZyB0bwotCSAqIG1ha2UgaXQgYSBtdWx0aXBsZSBvZiA0CisJICogTGVhdmUgZW5vdWdoIGhlYWRyb29tIGZvciBjb21tb24gRENDUCBoZWFkZXIgb3B0aW9ucy4KKwkgKiBUaGlzIG9ubHkgY29uc2lkZXJzIG9wdGlvbnMgd2hpY2ggbWF5IGFwcGVhciBvbiBEQ0NQLURhdGEgcGFja2V0cywgYXMKKwkgKiBwZXIgdGFibGUgMyBpbiBSRkMgNDM0MCwgNS44LiBXaGVuIHJ1bm5pbmcgb3V0IG9mIHNwYWNlIGZvciBvdGhlcgorCSAqIG9wdGlvbnMgKGVnLiBBY2sgVmVjdG9yIHdoaWNoIGNhbiB0YWtlIHVwIHRvIDI1NSBieXRlcyksIGl0IGlzIGJldHRlcgorCSAqIHRvIHNjaGVkdWxlIGEgc2VwYXJhdGUgQWNrLiBUaHVzIHdlIGxlYXZlIGhlYWRyb29tIGZvciB0aGUgZm9sbG93aW5nOgorCSAqICAtIDEgYnl0ZSBmb3IgU2xvdyBSZWNlaXZlciAoMTEuNikKKwkgKiAgLSA2IGJ5dGVzIGZvciBUaW1lc3RhbXAgKDEzLjEpCisJICogIC0gMTAgYnl0ZXMgZm9yIFRpbWVzdGFtcCBFY2hvICgxMy4zKQorCSAqICAtIDggYnl0ZXMgZm9yIE5EUCBjb3VudCAoNy43LCB3aGVuIGFjdGl2YXRlZCkKKwkgKiAgLSA2IGJ5dGVzIGZvciBEYXRhIENoZWNrc3VtICg5LjMpCisJICogIC0gJURDQ1BBVl9NSU5fT1BUTEVOIGJ5dGVzIGZvciBBY2sgVmVjdG9yIHNpemUgKDExLjQsIHdoZW4gZW5hYmxlZCkKIAkgKi8KLQotCWN1cl9tcHMgLT0gcm91bmR1cCg1ICsgNiArIDEwICsgNiArIDYgKyA2LCA0KTsKKwljdXJfbXBzIC09IHJvdW5kdXAoMSArIDYgKyAxMCArIGRwLT5kY2Nwc19zZW5kX25kcF9jb3VudCAqIDggKyA2ICsKKwkJCSAgIChkcC0+ZGNjcHNfaGNfcnhfYWNrdmVjID8gRENDUEFWX01JTl9PUFRMRU4gOiAwKSwgNCk7CiAKIAkvKiBBbmQgc3RvcmUgY2FjaGVkIHJlc3VsdHMgKi8KIAlpY3NrLT5pY3NrX3BtdHVfY29va2llID0gcG10dTsKQEAgLTI3MCw3ICsyNzYsMjAgQEAKIAkJCWNvbnN0IGludCBsZW4gPSBza2ItPmxlbjsKIAogCQkJaWYgKHNrLT5za19zdGF0ZSA9PSBEQ0NQX1BBUlRPUEVOKSB7Ci0JCQkJLyogU2VlIDguMS41LiAgSGFuZHNoYWtlIENvbXBsZXRpb24gKi8KKwkJCQljb25zdCB1MzIgY3VyX21wcyA9IGRwLT5kY2Nwc19tc3NfY2FjaGUgLSBEQ0NQX0ZFQVRORUdfT1ZFUkhFQUQ7CisJCQkJLyoKKwkJCQkgKiBTZWUgOC4xLjUgLSBIYW5kc2hha2UgQ29tcGxldGlvbi4KKwkJCQkgKgorCQkJCSAqIEZvciByb2J1c3RuZXNzIHdlIHJlc2VuZCBDb25maXJtIG9wdGlvbnMgdW50aWwgdGhlIGNsaWVudCBoYXMKKwkJCQkgKiBlbnRlcmVkIE9QRU4uIER1cmluZyB0aGUgaW5pdGlhbCBmZWF0dXJlIG5lZ290aWF0aW9uLCB0aGUgTVBTCisJCQkJICogaXMgc21hbGxlciB0aGFuIHVzdWFsLCByZWR1Y2VkIGJ5IHRoZSBDaGFuZ2UvQ29uZmlybSBvcHRpb25zLgorCQkJCSAqLworCQkJCWlmICghbGlzdF9lbXB0eSgmZHAtPmRjY3BzX2ZlYXRuZWcpICYmIGxlbiA+IGN1cl9tcHMpIHsKKwkJCQkJRENDUF9XQVJOKCJQYXlsb2FkIHRvbyBsYXJnZSAoJWQpIGZvciBmZWF0bmVnLlxuIiwgbGVuKTsKKwkJCQkJZGNjcF9zZW5kX2Fjayhzayk7CisJCQkJCWRjY3BfZmVhdF9saXN0X3B1cmdlKCZkcC0+ZGNjcHNfZmVhdG5lZyk7CisJCQkJfQorCiAJCQkJaW5ldF9jc2tfc2NoZWR1bGVfYWNrKHNrKTsKIAkJCQlpbmV0X2Nza19yZXNldF94bWl0X3RpbWVyKHNrLCBJQ1NLX1RJTUVfREFDSywKIAkJCQkJCSAgaW5ldF9jc2soc2spLT5pY3NrX3J0bywKZGlmZiAtLWdpdCBhL25ldC9kY2NwL3Byb3RvLmMgYi9uZXQvZGNjcC9wcm90by5jCmluZGV4IDk0NWI0ZDUuLjMxNGExYjUgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL3Byb3RvLmMKKysrIGIvbmV0L2RjY3AvcHJvdG8uYwpAQCAtMTc0LDggKzE3NCw2IEBACiAJc3RydWN0IGRjY3Bfc29jayAqZHAgPSBkY2NwX3NrKHNrKTsKIAlzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7CiAKLQlkY2NwX21pbmlzb2NrX2luaXQoJmRwLT5kY2Nwc19taW5pc29jayk7Ci0KIAlpY3NrLT5pY3NrX3J0bwkJPSBEQ0NQX1RJTUVPVVRfSU5JVDsKIAlpY3NrLT5pY3NrX3N5bl9yZXRyaWVzCT0gc3lzY3RsX2RjY3BfcmVxdWVzdF9yZXRyaWVzOwogCXNrLT5za19zdGF0ZQkJPSBEQ0NQX0NMT1NFRDsKZGlmZiAtLWdpdCBhL25ldC9kY2NwL3N5c2N0bC5jIGIvbmV0L2RjY3Avc3lzY3RsLmMKaW5kZXggMDE4ZTIxMC4uYTVhMTg1NiAxMDA2NDQKLS0tIGEvbmV0L2RjY3Avc3lzY3RsLmMKKysrIGIvbmV0L2RjY3Avc3lzY3RsLmMKQEAgLTE4LDU1ICsxOCw3MiBAQAogI2Vycm9yIFRoaXMgZmlsZSBzaG91bGQgbm90IGJlIGNvbXBpbGVkIHdpdGhvdXQgQ09ORklHX1NZU0NUTCBkZWZpbmVkCiAjZW5kaWYKIAorLyogQm91bmRhcnkgdmFsdWVzICovCitzdGF0aWMgaW50CQl6ZXJvICAgICA9IDAsCisJCQl1OF9tYXggICA9IDB4RkY7CitzdGF0aWMgdW5zaWduZWQgbG9uZwlzZXF3X21pbiA9IDMyOworCiBzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBkY2NwX2RlZmF1bHRfdGFibGVbXSA9IHsKIAl7CiAJCS5wcm9jbmFtZQk9ICJzZXFfd2luZG93IiwKLQkJLmRhdGEJCT0gJnN5c2N0bF9kY2NwX2ZlYXRfc2VxdWVuY2Vfd2luZG93LAotCQkubWF4bGVuCQk9IHNpemVvZihzeXNjdGxfZGNjcF9mZWF0X3NlcXVlbmNlX3dpbmRvdyksCisJCS5kYXRhCQk9ICZzeXNjdGxfZGNjcF9zZXF1ZW5jZV93aW5kb3csCisJCS5tYXhsZW4JCT0gc2l6ZW9mKHN5c2N0bF9kY2NwX3NlcXVlbmNlX3dpbmRvdyksCiAJCS5tb2RlCQk9IDA2NDQsCi0JCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjLAorCQkucHJvY19oYW5kbGVyCT0gcHJvY19kb3Vsb25ndmVjX21pbm1heCwKKwkJLmV4dHJhMQkJPSAmc2Vxd19taW4sCQkvKiBSRkMgNDM0MCwgNy41LjIgKi8KIAl9LAogCXsKIAkJLnByb2NuYW1lCT0gInJ4X2NjaWQiLAotCQkuZGF0YQkJPSAmc3lzY3RsX2RjY3BfZmVhdF9yeF9jY2lkLAotCQkubWF4bGVuCQk9IHNpemVvZihzeXNjdGxfZGNjcF9mZWF0X3J4X2NjaWQpLAorCQkuZGF0YQkJPSAmc3lzY3RsX2RjY3BfcnhfY2NpZCwKKwkJLm1heGxlbgkJPSBzaXplb2Yoc3lzY3RsX2RjY3BfcnhfY2NpZCksCiAJCS5tb2RlCQk9IDA2NDQsCi0JCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjLAorCQkucHJvY19oYW5kbGVyCT0gcHJvY19kb2ludHZlY19taW5tYXgsCisJCS5leHRyYTEJCT0gJnplcm8sCisJCS5leHRyYTIJCT0gJnU4X21heCwJCS8qIFJGQyA0MzQwLCAxMC4gKi8KIAl9LAogCXsKIAkJLnByb2NuYW1lCT0gInR4X2NjaWQiLAotCQkuZGF0YQkJPSAmc3lzY3RsX2RjY3BfZmVhdF90eF9jY2lkLAotCQkubWF4bGVuCQk9IHNpemVvZihzeXNjdGxfZGNjcF9mZWF0X3R4X2NjaWQpLAorCQkuZGF0YQkJPSAmc3lzY3RsX2RjY3BfdHhfY2NpZCwKKwkJLm1heGxlbgkJPSBzaXplb2Yoc3lzY3RsX2RjY3BfdHhfY2NpZCksCiAJCS5tb2RlCQk9IDA2NDQsCi0JCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjLAorCQkucHJvY19oYW5kbGVyCT0gcHJvY19kb2ludHZlY19taW5tYXgsCisJCS5leHRyYTEJCT0gJnplcm8sCisJCS5leHRyYTIJCT0gJnU4X21heCwJCS8qIFJGQyA0MzQwLCAxMC4gKi8KIAl9LAogCXsKIAkJLnByb2NuYW1lCT0gInJlcXVlc3RfcmV0cmllcyIsCiAJCS5kYXRhCQk9ICZzeXNjdGxfZGNjcF9yZXF1ZXN0X3JldHJpZXMsCiAJCS5tYXhsZW4JCT0gc2l6ZW9mKHN5c2N0bF9kY2NwX3JlcXVlc3RfcmV0cmllcyksCiAJCS5tb2RlCQk9IDA2NDQsCi0JCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjLAorCQkucHJvY19oYW5kbGVyCT0gcHJvY19kb2ludHZlY19taW5tYXgsCisJCS5leHRyYTEJCT0gJnplcm8sCisJCS5leHRyYTIJCT0gJnU4X21heCwKIAl9LAogCXsKIAkJLnByb2NuYW1lCT0gInJldHJpZXMxIiwKIAkJLmRhdGEJCT0gJnN5c2N0bF9kY2NwX3JldHJpZXMxLAogCQkubWF4bGVuCQk9IHNpemVvZihzeXNjdGxfZGNjcF9yZXRyaWVzMSksCiAJCS5tb2RlCQk9IDA2NDQsCi0JCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjLAorCQkucHJvY19oYW5kbGVyCT0gcHJvY19kb2ludHZlY19taW5tYXgsCisJCS5leHRyYTEJCT0gJnplcm8sCisJCS5leHRyYTIJCT0gJnU4X21heCwKIAl9LAogCXsKIAkJLnByb2NuYW1lCT0gInJldHJpZXMyIiwKIAkJLmRhdGEJCT0gJnN5c2N0bF9kY2NwX3JldHJpZXMyLAogCQkubWF4bGVuCQk9IHNpemVvZihzeXNjdGxfZGNjcF9yZXRyaWVzMiksCiAJCS5tb2RlCQk9IDA2NDQsCi0JCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjLAorCQkucHJvY19oYW5kbGVyCT0gcHJvY19kb2ludHZlY19taW5tYXgsCisJCS5leHRyYTEJCT0gJnplcm8sCisJCS5leHRyYTIJCT0gJnU4X21heCwKIAl9LAogCXsKIAkJLnByb2NuYW1lCT0gInR4X3FsZW4iLAogCQkuZGF0YQkJPSAmc3lzY3RsX2RjY3BfdHhfcWxlbiwKIAkJLm1heGxlbgkJPSBzaXplb2Yoc3lzY3RsX2RjY3BfdHhfcWxlbiksCiAJCS5tb2RlCQk9IDA2NDQsCi0JCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjLAorCQkucHJvY19oYW5kbGVyCT0gcHJvY19kb2ludHZlY19taW5tYXgsCisJCS5leHRyYTEJCT0gJnplcm8sCiAJfSwKIAl7CiAJCS5wcm9jbmFtZQk9ICJzeW5jX3JhdGVsaW1pdCIsCmRpZmYgLS1naXQgYS9uZXQvZGVjbmV0L2FmX2RlY25ldC5jIGIvbmV0L2RlY25ldC9hZl9kZWNuZXQuYwppbmRleCBjZjBlMTg0Li45NjQ3ZDkxIDEwMDY0NAotLS0gYS9uZXQvZGVjbmV0L2FmX2RlY25ldC5jCisrKyBiL25ldC9kZWNuZXQvYWZfZGVjbmV0LmMKQEAgLTEyNDYsMTEgKzEyNDYsMTIgQEAKIAogCWNhc2UgVElPQ0lOUToKIAkJbG9ja19zb2NrKHNrKTsKLQkJaWYgKChza2IgPSBza2JfcGVlaygmc2NwLT5vdGhlcl9yZWNlaXZlX3F1ZXVlKSkgIT0gTlVMTCkgeworCQlza2IgPSBza2JfcGVlaygmc2NwLT5vdGhlcl9yZWNlaXZlX3F1ZXVlKTsKKwkJaWYgKHNrYikgewogCQkJYW1vdW50ID0gc2tiLT5sZW47CiAJCX0gZWxzZSB7Ci0JCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gc2stPnNrX3JlY2VpdmVfcXVldWUubmV4dDsKLQkJCWZvcig7OykgeworCQkJc2tiID0gc2stPnNrX3JlY2VpdmVfcXVldWUubmV4dDsKKwkJCWZvciAoOzspIHsKIAkJCQlpZiAoc2tiID09CiAJCQkJICAgIChzdHJ1Y3Qgc2tfYnVmZiAqKSZzay0+c2tfcmVjZWl2ZV9xdWV1ZSkKIAkJCQkJYnJlYWs7CkBAIC0xNTc5LDE2ICsxNTgwLDE2IEBACiAJCWRlZmF1bHQ6CiAjaWZkZWYgQ09ORklHX05FVEZJTFRFUgogCQl7Ci0JCQlpbnQgdmFsLCBsZW47CisJCQlpbnQgcmV0LCBsZW47CiAKIAkJCWlmKGdldF91c2VyKGxlbiwgb3B0bGVuKSkKIAkJCQlyZXR1cm4gLUVGQVVMVDsKIAotCQkJdmFsID0gbmZfZ2V0c29ja29wdChzaywgUEZfREVDbmV0LCBvcHRuYW1lLAorCQkJcmV0ID0gbmZfZ2V0c29ja29wdChzaywgUEZfREVDbmV0LCBvcHRuYW1lLAogCQkJCQkJCW9wdHZhbCwgJmxlbik7Ci0JCQlpZiAodmFsID49IDApCi0JCQkJdmFsID0gcHV0X3VzZXIobGVuLCBvcHRsZW4pOwotCQkJcmV0dXJuIHZhbDsKKwkJCWlmIChyZXQgPj0gMCkKKwkJCQlyZXQgPSBwdXRfdXNlcihsZW4sIG9wdGxlbik7CisJCQlyZXR1cm4gcmV0OwogCQl9CiAjZW5kaWYKIAkJY2FzZSBEU09fU1RSRUFNOgpAQCAtMjA3MSw4ICsyMDcyLDcgQEAKIAl9CiBvdXQ6CiAKLQlpZiAoc2tiKQotCQlrZnJlZV9za2Ioc2tiKTsKKwlrZnJlZV9za2Ioc2tiKTsKIAogCXJlbGVhc2Vfc29jayhzayk7CiAKQEAgLTIxMTIsOSArMjExMiw4IEBACiAKIGV4dGVybiBpbnQgZG5fcm91dGVfcmN2KHN0cnVjdCBza19idWZmICosIHN0cnVjdCBuZXRfZGV2aWNlICosIHN0cnVjdCBwYWNrZXRfdHlwZSAqLCBzdHJ1Y3QgbmV0X2RldmljZSAqKTsKIAotc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBkbl9kaXhfcGFja2V0X3R5cGUgPSB7Ci0JLnR5cGUgPQkJX19jb25zdGFudF9odG9ucyhFVEhfUF9ETkFfUlQpLAotCS5kZXYgPQkJTlVMTCwJCS8qIEFsbCBkZXZpY2VzICovCitzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGRuX2RpeF9wYWNrZXRfdHlwZSBfX3JlYWRfbW9zdGx5ID0geworCS50eXBlID0JCWNwdV90b19iZTE2KEVUSF9QX0ROQV9SVCksCiAJLmZ1bmMgPQkJZG5fcm91dGVfcmN2LAogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L2RlY25ldC9kbl9kZXYuYyBiL25ldC9kZWNuZXQvZG5fZGV2LmMKaW5kZXggZGFmMmI5OC4uMWM2YTViYiAxMDA2NDQKLS0tIGEvbmV0L2RlY25ldC9kbl9kZXYuYworKysgYi9uZXQvZGVjbmV0L2RuX2Rldi5jCkBAIC02ODQsNyArNjg0LDYgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlpZiAoKGRuX2RiID0gZGV2LT5kbl9wdHIpID09IE5VTEwpIHsKLQkJaW50IGVycjsKIAkJZG5fZGIgPSBkbl9kZXZfY3JlYXRlKGRldiwgJmVycik7CiAJCWlmICghZG5fZGIpCiAJCQlyZXR1cm4gZXJyOwpAQCAtNzY5LDcgKzc2OCw4IEBACiAJCWtmcmVlX3NrYihza2IpOwogCQlnb3RvIGVycm91dDsKIAl9Ci0JZXJyID0gcnRubF9ub3RpZnkoc2tiLCAmaW5pdF9uZXQsIDAsIFJUTkxHUlBfREVDbmV0X0lGQUREUiwgTlVMTCwgR0ZQX0tFUk5FTCk7CisJcnRubF9ub3RpZnkoc2tiLCAmaW5pdF9uZXQsIDAsIFJUTkxHUlBfREVDbmV0X0lGQUREUiwgTlVMTCwgR0ZQX0tFUk5FTCk7CisJcmV0dXJuOwogZXJyb3V0OgogCWlmIChlcnIgPCAwKQogCQlydG5sX3NldF9za19lcnIoJmluaXRfbmV0LCBSVE5MR1JQX0RFQ25ldF9JRkFERFIsIGVycik7CkBAIC0xMzIyLDYgKzEzMjIsNyBAQAogfQogCiBzdGF0aWMgdm9pZCAqZG5fZGV2X3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCisJX19hY3F1aXJlcygmZGV2X2Jhc2VfbG9jaykKIHsKIAlpbnQgaTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwpAQCAtMTM2NCw2ICsxMzY1LDcgQEAKIH0KIAogc3RhdGljIHZvaWQgZG5fZGV2X3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQorCV9fcmVsZWFzZXMoJmRldl9iYXNlX2xvY2spCiB7CiAJcmVhZF91bmxvY2soJmRldl9iYXNlX2xvY2spOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2RlY25ldC9kbl9yb3V0ZS5jIGIvbmV0L2RlY25ldC9kbl9yb3V0ZS5jCmluZGV4IGM3NTQ2NzAuLjBjYzQzOTQgMTAwNjQ0Ci0tLSBhL25ldC9kZWNuZXQvZG5fcm91dGUuYworKysgYi9uZXQvZGVjbmV0L2RuX3JvdXRlLmMKQEAgLTEyNCw3ICsxMjQsNyBAQAogCiBzdGF0aWMgc3RydWN0IGRzdF9vcHMgZG5fZHN0X29wcyA9IHsKIAkuZmFtaWx5ID0JCVBGX0RFQ25ldCwKLQkucHJvdG9jb2wgPQkJX19jb25zdGFudF9odG9ucyhFVEhfUF9ETkFfUlQpLAorCS5wcm90b2NvbCA9CQljcHVfdG9fYmUxNihFVEhfUF9ETkFfUlQpLAogCS5nY190aHJlc2ggPQkJMTI4LAogCS5nYyA9CQkJZG5fZHN0X2djLAogCS5jaGVjayA9CQlkbl9kc3RfY2hlY2ssCkBAIC0zODAsNyArMzgwLDYgQEAKIAl1bnNpZ25lZCBjaGFyICpwdHI7CiAJX19sZTE2ICpzcmM7CiAJX19sZTE2ICpkc3Q7Ci0JX19sZTE2IHRtcDsKIAogCS8qIEFkZCBiYWNrIGhlYWRlcnMgKi8KIAlza2JfcHVzaChza2IsIHNrYi0+ZGF0YSAtIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpKTsKQEAgLTM5OSwxMCArMzk4LDcgQEAKIAlwdHIgKz0gMjsKIAkqcHRyID0gMDsgLyogWmVybyBob3AgY291bnQgKi8KIAotCS8qIFN3YXAgc291cmNlIGFuZCBkZXN0aW5hdGlvbiAqLwotCXRtcCAgPSAqc3JjOwotCSpzcmMgPSAqZHN0OwotCSpkc3QgPSB0bXA7CisJc3dhcCgqc3JjLCAqZHN0KTsKIAogCXNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfT1VUR09JTkc7CiAJZG5fcnRfZmluaXNoX291dHB1dChza2IsIE5VTEwsIE5VTEwpOwpkaWZmIC0tZ2l0IGEvbmV0L2RlY25ldC9kbl90YWJsZS5jIGIvbmV0L2RlY25ldC9kbl90YWJsZS5jCmluZGV4IDY5YWQ5MjguLjY3MDU0YjAgMTAwNjQ0Ci0tLSBhL25ldC9kZWNuZXQvZG5fdGFibGUuYworKysgYi9uZXQvZGVjbmV0L2RuX3RhYmxlLmMKQEAgLTM3NSw3ICszNzUsOCBAQAogCQlrZnJlZV9za2Ioc2tiKTsKIAkJZ290byBlcnJvdXQ7CiAJfQotCWVyciA9IHJ0bmxfbm90aWZ5KHNrYiwgJmluaXRfbmV0LCBwaWQsIFJUTkxHUlBfREVDbmV0X1JPVVRFLCBubGgsIEdGUF9LRVJORUwpOworCXJ0bmxfbm90aWZ5KHNrYiwgJmluaXRfbmV0LCBwaWQsIFJUTkxHUlBfREVDbmV0X1JPVVRFLCBubGgsIEdGUF9LRVJORUwpOworCXJldHVybjsKIGVycm91dDoKIAlpZiAoZXJyIDwgMCkKIAkJcnRubF9zZXRfc2tfZXJyKCZpbml0X25ldCwgUlROTEdSUF9ERUNuZXRfUk9VVEUsIGVycik7CmRpZmYgLS1naXQgYS9uZXQvZGVjbmV0L3N5c2N0bF9uZXRfZGVjbmV0LmMgYi9uZXQvZGVjbmV0L3N5c2N0bF9uZXRfZGVjbmV0LmMKaW5kZXggOTY1Mzk3YS4uNWJjZDU5MiAxMDA2NDQKLS0tIGEvbmV0L2RlY25ldC9zeXNjdGxfbmV0X2RlY25ldC5jCisrKyBiL25ldC9kZWNuZXQvc3lzY3RsX25ldF9kZWNuZXQuYwpAQCAtMTc5LDcgKzE3OSw3IEBACiAJfQogCiAJaWYgKHdyaXRlKSB7Ci0JCWludCBsZW4gPSAoKmxlbnAgPCBETl9BU0NCVUZfTEVOKSA/ICpsZW5wIDogKEROX0FTQ0JVRl9MRU4tMSk7CisJCWxlbiA9ICgqbGVucCA8IEROX0FTQ0JVRl9MRU4pID8gKmxlbnAgOiAoRE5fQVNDQlVGX0xFTi0xKTsKIAogCQlpZiAoY29weV9mcm9tX3VzZXIoYWRkciwgYnVmZmVyLCBsZW4pKQogCQkJcmV0dXJuIC1FRkFVTFQ7CmRpZmYgLS1naXQgYS9uZXQvZHNhL0tjb25maWcgYi9uZXQvZHNhL0tjb25maWcKaW5kZXggNDkyMTFiMy4uYzUxYjU1NCAxMDA2NDQKLS0tIGEvbmV0L2RzYS9LY29uZmlnCisrKyBiL25ldC9kc2EvS2NvbmZpZwpAQCAtNDEsMTMgKzQxLDEzIEBACiAJZGVmYXVsdCBuCiAKIGNvbmZpZyBORVRfRFNBX01WODhFNjEzMQotCWJvb2wgIk1hcnZlbGwgODhFNjEzMSBldGhlcm5ldCBzd2l0Y2ggY2hpcCBzdXBwb3J0IgorCWJvb2wgIk1hcnZlbGwgODhFNjA5NS82MDk1Ri82MTMxIGV0aGVybmV0IHN3aXRjaCBjaGlwIHN1cHBvcnQiCiAJc2VsZWN0IE5FVF9EU0FfTVY4OEU2WFhYCiAJc2VsZWN0IE5FVF9EU0FfTVY4OEU2WFhYX05FRURfUFBVCiAJc2VsZWN0IE5FVF9EU0FfVEFHX0RTQQogCS0tLWhlbHAtLS0KLQkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTWFydmVsbCA4OEU2MTMxIGV0aGVybmV0IHN3aXRjaAotCSAgY2hpcC4KKwkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTWFydmVsbCA4OEU2MDk1LzYwOTVGLzYxMzEKKwkgIGV0aGVybmV0IHN3aXRjaCBjaGlwcy4KIAogY29uZmlnIE5FVF9EU0FfTVY4OEU2MTIzXzYxXzY1CiAJYm9vbCAiTWFydmVsbCA4OEU2MTIzLzYxNjEvNjE2NSBldGhlcm5ldCBzd2l0Y2ggY2hpcCBzdXBwb3J0IgpkaWZmIC0tZ2l0IGEvbmV0L2RzYS9kc2EuYyBiL25ldC9kc2EvZHNhLmMKaW5kZXggMzNlOTk0Ni4uNzE0ODlmNiAxMDA2NDQKLS0tIGEvbmV0L2RzYS9kc2EuYworKysgYi9uZXQvZHNhL2RzYS5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIG5ldC9kc2EvZHNhLmMgLSBIYXJkd2FyZSBzd2l0Y2ggaGFuZGxpbmcKLSAqIENvcHlyaWdodCAoYykgMjAwOCBNYXJ2ZWxsIFNlbWljb25kdWN0b3IKKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IE1hcnZlbGwgU2VtaWNvbmR1Y3RvcgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtNjcsMTIgKzY3LDEzIEBACiAKIC8qIGJhc2ljIHN3aXRjaCBvcGVyYXRpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIHN0cnVjdCBkc2Ffc3dpdGNoICoKLWRzYV9zd2l0Y2hfc2V0dXAoc3RydWN0IGRldmljZSAqcGFyZW50LCBzdHJ1Y3QgZHNhX3BsYXRmb3JtX2RhdGEgKnBkLAotCQkgc3RydWN0IG1paV9idXMgKmJ1cywgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK2RzYV9zd2l0Y2hfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2hfdHJlZSAqZHN0LCBpbnQgaW5kZXgsCisJCSBzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIHN0cnVjdCBtaWlfYnVzICpidXMpCiB7CisJc3RydWN0IGRzYV9jaGlwX2RhdGEgKnBkID0gZHN0LT5wZC0+Y2hpcCArIGluZGV4OworCXN0cnVjdCBkc2Ffc3dpdGNoX2RyaXZlciAqZHJ2OwogCXN0cnVjdCBkc2Ffc3dpdGNoICpkczsKIAlpbnQgcmV0OwotCXN0cnVjdCBkc2Ffc3dpdGNoX2RyaXZlciAqZHJ2OwogCWNoYXIgKm5hbWU7CiAJaW50IGk7CiAKQEAgLTgxLDExICs4MiwxMiBAQAogCSAqLwogCWRydiA9IGRzYV9zd2l0Y2hfcHJvYmUoYnVzLCBwZC0+c3dfYWRkciwgJm5hbWUpOwogCWlmIChkcnYgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjb3VsZCBub3QgZGV0ZWN0IGF0dGFjaGVkIHN3aXRjaFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7CisJCXByaW50ayhLRVJOX0VSUiAiJXNbJWRdOiBjb3VsZCBub3QgZGV0ZWN0IGF0dGFjaGVkIHN3aXRjaFxuIiwKKwkJICAgICAgIGRzdC0+bWFzdGVyX25ldGRldi0+bmFtZSwgaW5kZXgpOwogCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIAl9Ci0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGRldGVjdGVkIGEgJXMgc3dpdGNoXG4iLCBkZXYtPm5hbWUsIG5hbWUpOworCXByaW50ayhLRVJOX0lORk8gIiVzWyVkXTogZGV0ZWN0ZWQgYSAlcyBzd2l0Y2hcbiIsCisJCWRzdC0+bWFzdGVyX25ldGRldi0+bmFtZSwgaW5kZXgsIG5hbWUpOwogCiAKIAkvKgpAQCAtOTUsMTggKzk3LDE2IEBACiAJaWYgKGRzID09IE5VTEwpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCi0JZHMtPnBkID0gcGQ7Ci0JZHMtPm1hc3Rlcl9uZXRkZXYgPSBkZXY7Ci0JZHMtPm1hc3Rlcl9taWlfYnVzID0gYnVzOwotCisJZHMtPmRzdCA9IGRzdDsKKwlkcy0+aW5kZXggPSBpbmRleDsKKwlkcy0+cGQgPSBkc3QtPnBkLT5jaGlwICsgaW5kZXg7CiAJZHMtPmRydiA9IGRydjsKLQlkcy0+dGFnX3Byb3RvY29sID0gZHJ2LT50YWdfcHJvdG9jb2w7CisJZHMtPm1hc3Rlcl9taWlfYnVzID0gYnVzOwogCiAKIAkvKgogCSAqIFZhbGlkYXRlIHN1cHBsaWVkIHN3aXRjaCBjb25maWd1cmF0aW9uLgogCSAqLwotCWRzLT5jcHVfcG9ydCA9IC0xOwogCWZvciAoaSA9IDA7IGkgPCBEU0FfTUFYX1BPUlRTOyBpKyspIHsKIAkJY2hhciAqbmFtZTsKIApAQCAtMTE1LDMyICsxMTUsMjggQEAKIAkJCWNvbnRpbnVlOwogCiAJCWlmICghc3RyY21wKG5hbWUsICJjcHUiKSkgewotCQkJaWYgKGRzLT5jcHVfcG9ydCAhPSAtMSkgeworCQkJaWYgKGRzdC0+Y3B1X3N3aXRjaCAhPSAtMSkgewogCQkJCXByaW50ayhLRVJOX0VSUiAibXVsdGlwbGUgY3B1IHBvcnRzPyFcbiIpOwogCQkJCXJldCA9IC1FSU5WQUw7CiAJCQkJZ290byBvdXQ7CiAJCQl9Ci0JCQlkcy0+Y3B1X3BvcnQgPSBpOworCQkJZHN0LT5jcHVfc3dpdGNoID0gaW5kZXg7CisJCQlkc3QtPmNwdV9wb3J0ID0gaTsKKwkJfSBlbHNlIGlmICghc3RyY21wKG5hbWUsICJkc2EiKSkgeworCQkJZHMtPmRzYV9wb3J0X21hc2sgfD0gMSA8PCBpOwogCQl9IGVsc2UgewotCQkJZHMtPnZhbGlkX3BvcnRfbWFzayB8PSAxIDw8IGk7CisJCQlkcy0+cGh5c19wb3J0X21hc2sgfD0gMSA8PCBpOwogCQl9CiAJfQogCi0JaWYgKGRzLT5jcHVfcG9ydCA9PSAtMSkgewotCQlwcmludGsoS0VSTl9FUlIgIm5vIGNwdSBwb3J0PyFcbiIpOwotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIG91dDsKLQl9Ci0KIAogCS8qCi0JICogSWYgd2UgdXNlIGEgdGFnZ2luZyBmb3JtYXQgdGhhdCBkb2Vzbid0IGhhdmUgYW4gZXRoZXJ0eXBlCi0JICogZmllbGQsIG1ha2Ugc3VyZSB0aGF0IGFsbCBwYWNrZXRzIGZyb20gdGhpcyBwb2ludCBvbiBnZXQKLQkgKiBzZW50IHRvIHRoZSB0YWcgZm9ybWF0J3MgcmVjZWl2ZSBmdW5jdGlvbi4gIChXaGljaCB3aWxsCi0JICogZGlzY2FyZCByZWNlaXZlZCBwYWNrZXRzIHVudGlsIHdlIHNldCBkcy0+cG9ydHNbXSBiZWxvdy4pCisJICogSWYgdGhlIENQVSBjb25uZWN0cyB0byB0aGlzIHN3aXRjaCwgc2V0IHRoZSBzd2l0Y2ggdHJlZQorCSAqIHRhZ2dpbmcgcHJvdG9jb2wgdG8gdGhlIHByZWZlcnJlZCB0YWdnaW5nIGZvcm1hdCBvZiB0aGlzCisJICogc3dpdGNoLgogCSAqLwotCXdtYigpOwotCWRldi0+ZHNhX3B0ciA9ICh2b2lkICopZHM7CisJaWYgKGRzLT5kc3QtPmNwdV9zd2l0Y2ggPT0gaW5kZXgpCisJCWRzLT5kc3QtPnRhZ19wcm90b2NvbCA9IGRydi0+dGFnX3Byb3RvY29sOwogCiAKIAkvKgpAQCAtMTUwLDcgKzE0Niw3IEBACiAJaWYgKHJldCA8IDApCiAJCWdvdG8gb3V0OwogCi0JcmV0ID0gZHJ2LT5zZXRfYWRkcihkcywgZGV2LT5kZXZfYWRkcik7CisJcmV0ID0gZHJ2LT5zZXRfYWRkcihkcywgZHN0LT5tYXN0ZXJfbmV0ZGV2LT5kZXZfYWRkcik7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gb3V0OwogCkBAIC0xNjksMTggKzE2NSwxOCBAQAogCS8qCiAJICogQ3JlYXRlIG5ldHdvcmsgZGV2aWNlcyBmb3IgcGh5c2ljYWwgc3dpdGNoIHBvcnRzLgogCSAqLwotCXdtYigpOwogCWZvciAoaSA9IDA7IGkgPCBEU0FfTUFYX1BPUlRTOyBpKyspIHsKIAkJc3RydWN0IG5ldF9kZXZpY2UgKnNsYXZlX2RldjsKIAotCQlpZiAoIShkcy0+dmFsaWRfcG9ydF9tYXNrICYgKDEgPDwgaSkpKQorCQlpZiAoIShkcy0+cGh5c19wb3J0X21hc2sgJiAoMSA8PCBpKSkpCiAJCQljb250aW51ZTsKIAogCQlzbGF2ZV9kZXYgPSBkc2Ffc2xhdmVfY3JlYXRlKGRzLCBwYXJlbnQsIGksIHBkLT5wb3J0X25hbWVzW2ldKTsKIAkJaWYgKHNsYXZlX2RldiA9PSBOVUxMKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjYW4ndCBjcmVhdGUgZHNhIHNsYXZlICIKLQkJCSAgICAgICAiZGV2aWNlIGZvciBwb3J0ICVkKCVzKVxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIGksIHBkLT5wb3J0X25hbWVzW2ldKTsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXNbJWRdOiBjYW4ndCBjcmVhdGUgZHNhICIKKwkJCSAgICAgICAic2xhdmUgZGV2aWNlIGZvciBwb3J0ICVkKCVzKVxuIiwKKwkJCSAgICAgICBkc3QtPm1hc3Rlcl9uZXRkZXYtPm5hbWUsCisJCQkgICAgICAgaW5kZXgsIGksIHBkLT5wb3J0X25hbWVzW2ldKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKQEAgLTE5Miw3ICsxODgsNiBAQAogb3V0X2ZyZWU6CiAJbWRpb2J1c19mcmVlKGRzLT5zbGF2ZV9taWlfYnVzKTsKIG91dDoKLQlkZXYtPmRzYV9wdHIgPSBOVUxMOwogCWtmcmVlKGRzKTsKIAlyZXR1cm4gRVJSX1BUUihyZXQpOwogfQpAQCAtMjEyLDM1ICsyMDcsNDIgQEAKICAqLwogYm9vbCBkc2FfdXNlc19kc2FfdGFncyh2b2lkICpkc2FfcHRyKQogewotCXN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGRzYV9wdHI7CisJc3RydWN0IGRzYV9zd2l0Y2hfdHJlZSAqZHN0ID0gZHNhX3B0cjsKIAotCXJldHVybiAhIShkcy0+dGFnX3Byb3RvY29sID09IGh0b25zKEVUSF9QX0RTQSkpOworCXJldHVybiAhIShkc3QtPnRhZ19wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9EU0EpKTsKIH0KIAogYm9vbCBkc2FfdXNlc190cmFpbGVyX3RhZ3Modm9pZCAqZHNhX3B0cikKIHsKLQlzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBkc2FfcHRyOworCXN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdCA9IGRzYV9wdHI7CiAKLQlyZXR1cm4gISEoZHMtPnRhZ19wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9UUkFJTEVSKSk7CisJcmV0dXJuICEhKGRzdC0+dGFnX3Byb3RvY29sID09IGh0b25zKEVUSF9QX1RSQUlMRVIpKTsKIH0KIAogCiAvKiBsaW5rIHBvbGxpbmcgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyB2b2lkIGRzYV9saW5rX3BvbGxfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnVnbHkpCiB7Ci0Jc3RydWN0IGRzYV9zd2l0Y2ggKmRzOworCXN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdDsKKwlpbnQgaTsKIAotCWRzID0gY29udGFpbmVyX29mKHVnbHksIHN0cnVjdCBkc2Ffc3dpdGNoLCBsaW5rX3BvbGxfd29yayk7CisJZHN0ID0gY29udGFpbmVyX29mKHVnbHksIHN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUsIGxpbmtfcG9sbF93b3JrKTsKIAotCWRzLT5kcnYtPnBvbGxfbGluayhkcyk7Ci0JbW9kX3RpbWVyKCZkcy0+bGlua19wb2xsX3RpbWVyLCByb3VuZF9qaWZmaWVzKGppZmZpZXMgKyBIWikpOworCWZvciAoaSA9IDA7IGkgPCBkc3QtPnBkLT5ucl9jaGlwczsgaSsrKSB7CisJCXN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGRzdC0+ZHNbaV07CisKKwkJaWYgKGRzICE9IE5VTEwgJiYgZHMtPmRydi0+cG9sbF9saW5rICE9IE5VTEwpCisJCQlkcy0+ZHJ2LT5wb2xsX2xpbmsoZHMpOworCX0KKworCW1vZF90aW1lcigmZHN0LT5saW5rX3BvbGxfdGltZXIsIHJvdW5kX2ppZmZpZXMoamlmZmllcyArIEhaKSk7CiB9CiAKLXN0YXRpYyB2b2lkIGRzYV9saW5rX3BvbGxfdGltZXIodW5zaWduZWQgbG9uZyBfZHMpCitzdGF0aWMgdm9pZCBkc2FfbGlua19wb2xsX3RpbWVyKHVuc2lnbmVkIGxvbmcgX2RzdCkKIHsKLQlzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSAodm9pZCAqKV9kczsKKwlzdHJ1Y3QgZHNhX3N3aXRjaF90cmVlICpkc3QgPSAodm9pZCAqKV9kc3Q7CiAKLQlzY2hlZHVsZV93b3JrKCZkcy0+bGlua19wb2xsX3dvcmspOworCXNjaGVkdWxlX3dvcmsoJmRzdC0+bGlua19wb2xsX3dvcmspOwogfQogCiAKQEAgLTMwMywxOCArMzA1LDE0IEBACiAJc3RhdGljIGludCBkc2FfdmVyc2lvbl9wcmludGVkOwogCXN0cnVjdCBkc2FfcGxhdGZvcm1fZGF0YSAqcGQgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotCXN0cnVjdCBtaWlfYnVzICpidXM7Ci0Jc3RydWN0IGRzYV9zd2l0Y2ggKmRzOworCXN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdDsKKwlpbnQgaTsKIAogCWlmICghZHNhX3ZlcnNpb25fcHJpbnRlZCsrKQogCQlwcmludGsoS0VSTl9OT1RJQ0UgIkRpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUgIgogCQkJImRyaXZlciB2ZXJzaW9uICVzXG4iLCBkc2FfZHJpdmVyX3ZlcnNpb24pOwogCi0JaWYgKHBkID09IE5VTEwgfHwgcGQtPm1paV9idXMgPT0gTlVMTCB8fCBwZC0+bmV0ZGV2ID09IE5VTEwpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JYnVzID0gZGV2X3RvX21paV9idXMocGQtPm1paV9idXMpOwotCWlmIChidXMgPT0gTlVMTCkKKwlpZiAocGQgPT0gTlVMTCB8fCBwZC0+bmV0ZGV2ID09IE5VTEwpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJZGV2ID0gZGV2X3RvX25ldF9kZXZpY2UocGQtPm5ldGRldik7CkBAIC0zMjYsMzYgKzMyNCw3OSBAQAogCQlyZXR1cm4gLUVFWElTVDsKIAl9CiAKLQlkcyA9IGRzYV9zd2l0Y2hfc2V0dXAoJnBkZXYtPmRldiwgcGQsIGJ1cywgZGV2KTsKLQlpZiAoSVNfRVJSKGRzKSkgeworCWRzdCA9IGt6YWxsb2Moc2l6ZW9mKCpkc3QpLCBHRlBfS0VSTkVMKTsKKwlpZiAoZHN0ID09IE5VTEwpIHsKIAkJZGV2X3B1dChkZXYpOwotCQlyZXR1cm4gUFRSX0VSUihkcyk7CisJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCWlmIChkcy0+ZHJ2LT5wb2xsX2xpbmsgIT0gTlVMTCkgewotCQlJTklUX1dPUksoJmRzLT5saW5rX3BvbGxfd29yaywgZHNhX2xpbmtfcG9sbF93b3JrKTsKLQkJaW5pdF90aW1lcigmZHMtPmxpbmtfcG9sbF90aW1lcik7Ci0JCWRzLT5saW5rX3BvbGxfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWRzOwotCQlkcy0+bGlua19wb2xsX3RpbWVyLmZ1bmN0aW9uID0gZHNhX2xpbmtfcG9sbF90aW1lcjsKLQkJZHMtPmxpbmtfcG9sbF90aW1lci5leHBpcmVzID0gcm91bmRfamlmZmllcyhqaWZmaWVzICsgSFopOwotCQlhZGRfdGltZXIoJmRzLT5saW5rX3BvbGxfdGltZXIpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRzdCk7CisKKwlkc3QtPnBkID0gcGQ7CisJZHN0LT5tYXN0ZXJfbmV0ZGV2ID0gZGV2OworCWRzdC0+Y3B1X3N3aXRjaCA9IC0xOworCWRzdC0+Y3B1X3BvcnQgPSAtMTsKKworCWZvciAoaSA9IDA7IGkgPCBwZC0+bnJfY2hpcHM7IGkrKykgeworCQlzdHJ1Y3QgbWlpX2J1cyAqYnVzOworCQlzdHJ1Y3QgZHNhX3N3aXRjaCAqZHM7CisKKwkJYnVzID0gZGV2X3RvX21paV9idXMocGQtPmNoaXBbaV0ubWlpX2J1cyk7CisJCWlmIChidXMgPT0gTlVMTCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlc1slZF06IG5vIG1paSBidXMgZm91bmQgZm9yICIKKwkJCQkiZHNhIHN3aXRjaFxuIiwgZGV2LT5uYW1lLCBpKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJZHMgPSBkc2Ffc3dpdGNoX3NldHVwKGRzdCwgaSwgJnBkZXYtPmRldiwgYnVzKTsKKwkJaWYgKElTX0VSUihkcykpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXNbJWRdOiBjb3VsZG4ndCBjcmVhdGUgZHNhIHN3aXRjaCAiCisJCQkJImluc3RhbmNlIChlcnJvciAlbGQpXG4iLCBkZXYtPm5hbWUsIGksCisJCQkJUFRSX0VSUihkcykpOworCQkJY29udGludWU7CisJCX0KKworCQlkc3QtPmRzW2ldID0gZHM7CisJCWlmIChkcy0+ZHJ2LT5wb2xsX2xpbmsgIT0gTlVMTCkKKwkJCWRzdC0+bGlua19wb2xsX25lZWRlZCA9IDE7CiAJfQogCi0JcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZHMpOworCS8qCisJICogSWYgd2UgdXNlIGEgdGFnZ2luZyBmb3JtYXQgdGhhdCBkb2Vzbid0IGhhdmUgYW4gZXRoZXJ0eXBlCisJICogZmllbGQsIG1ha2Ugc3VyZSB0aGF0IGFsbCBwYWNrZXRzIGZyb20gdGhpcyBwb2ludCBvbiBnZXQKKwkgKiBzZW50IHRvIHRoZSB0YWcgZm9ybWF0J3MgcmVjZWl2ZSBmdW5jdGlvbi4KKwkgKi8KKwl3bWIoKTsKKwlkZXYtPmRzYV9wdHIgPSAodm9pZCAqKWRzdDsKKworCWlmIChkc3QtPmxpbmtfcG9sbF9uZWVkZWQpIHsKKwkJSU5JVF9XT1JLKCZkc3QtPmxpbmtfcG9sbF93b3JrLCBkc2FfbGlua19wb2xsX3dvcmspOworCQlpbml0X3RpbWVyKCZkc3QtPmxpbmtfcG9sbF90aW1lcik7CisJCWRzdC0+bGlua19wb2xsX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylkc3Q7CisJCWRzdC0+bGlua19wb2xsX3RpbWVyLmZ1bmN0aW9uID0gZHNhX2xpbmtfcG9sbF90aW1lcjsKKwkJZHN0LT5saW5rX3BvbGxfdGltZXIuZXhwaXJlcyA9IHJvdW5kX2ppZmZpZXMoamlmZmllcyArIEhaKTsKKwkJYWRkX3RpbWVyKCZkc3QtPmxpbmtfcG9sbF90aW1lcik7CisJfQogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgZHNhX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCWludCBpOwogCi0JaWYgKGRzLT5kcnYtPnBvbGxfbGluayAhPSBOVUxMKQotCQlkZWxfdGltZXJfc3luYygmZHMtPmxpbmtfcG9sbF90aW1lcik7CisJaWYgKGRzdC0+bGlua19wb2xsX25lZWRlZCkKKwkJZGVsX3RpbWVyX3N5bmMoJmRzdC0+bGlua19wb2xsX3RpbWVyKTsKIAogCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CiAKLQlkc2Ffc3dpdGNoX2Rlc3Ryb3koZHMpOworCWZvciAoaSA9IDA7IGkgPCBkc3QtPnBkLT5ucl9jaGlwczsgaSsrKSB7CisJCXN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGRzdC0+ZHNbaV07CisKKwkJaWYgKGRzICE9IE5VTEwpCisJCQlkc2Ffc3dpdGNoX2Rlc3Ryb3koZHMpOworCX0KIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2RzYS9kc2FfcHJpdi5oIGIvbmV0L2RzYS9kc2FfcHJpdi5oCmluZGV4IDcwNjMzNzguLjQxMDU1ZjMgMTAwNjQ0Ci0tLSBhL25ldC9kc2EvZHNhX3ByaXYuaAorKysgYi9uZXQvZHNhL2RzYV9wcml2LmgKQEAgLTEsNiArMSw2IEBACiAvKgogICogbmV0L2RzYS9kc2FfcHJpdi5oIC0gSGFyZHdhcmUgc3dpdGNoIGhhbmRsaW5nCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggTWFydmVsbCBTZW1pY29uZHVjdG9yCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAwOSBNYXJ2ZWxsIFNlbWljb25kdWN0b3IKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTE5LDQyICsxOSwxMDcgQEAKIAogc3RydWN0IGRzYV9zd2l0Y2ggewogCS8qCi0JICogQ29uZmlndXJhdGlvbiBkYXRhIGZvciB0aGUgcGxhdGZvcm0gZGV2aWNlIHRoYXQgb3ducwotCSAqIHRoaXMgZHNhIHN3aXRjaCBpbnN0YW5jZS4KKwkgKiBQYXJlbnQgc3dpdGNoIHRyZWUsIGFuZCBzd2l0Y2ggaW5kZXguCiAJICovCi0Jc3RydWN0IGRzYV9wbGF0Zm9ybV9kYXRhCSpwZDsKKwlzdHJ1Y3QgZHNhX3N3aXRjaF90cmVlCSpkc3Q7CisJaW50CQkJaW5kZXg7CiAKIAkvKgotCSAqIFJlZmVyZW5jZXMgdG8gbmV0d29yayBkZXZpY2UgYW5kIG1paSBidXMgdG8gdXNlLgorCSAqIENvbmZpZ3VyYXRpb24gZGF0YSBmb3IgdGhpcyBzd2l0Y2guCiAJICovCi0Jc3RydWN0IG5ldF9kZXZpY2UJCSptYXN0ZXJfbmV0ZGV2OwotCXN0cnVjdCBtaWlfYnVzCQkJKm1hc3Rlcl9taWlfYnVzOworCXN0cnVjdCBkc2FfY2hpcF9kYXRhCSpwZDsKIAogCS8qCi0JICogVGhlIHVzZWQgc3dpdGNoIGRyaXZlciBhbmQgZnJhbWUgdGFnZ2luZyB0eXBlLgorCSAqIFRoZSB1c2VkIHN3aXRjaCBkcml2ZXIuCiAJICovCiAJc3RydWN0IGRzYV9zd2l0Y2hfZHJpdmVyCSpkcnY7Ci0JX19iZTE2CQkJCXRhZ19wcm90b2NvbDsKKworCS8qCisJICogUmVmZXJlbmNlIHRvIG1paSBidXMgdG8gdXNlLgorCSAqLworCXN0cnVjdCBtaWlfYnVzCQkqbWFzdGVyX21paV9idXM7CiAKIAkvKgogCSAqIFNsYXZlIG1paV9idXMgYW5kIGRldmljZXMgZm9yIHRoZSBpbmRpdmlkdWFsIHBvcnRzLgogCSAqLwotCWludAkJCQljcHVfcG9ydDsKLQl1MzIJCQkJdmFsaWRfcG9ydF9tYXNrOwotCXN0cnVjdCBtaWlfYnVzCQkJKnNsYXZlX21paV9idXM7Ci0Jc3RydWN0IG5ldF9kZXZpY2UJCSpwb3J0c1tEU0FfTUFYX1BPUlRTXTsKKwl1MzIJCQlkc2FfcG9ydF9tYXNrOworCXUzMgkJCXBoeXNfcG9ydF9tYXNrOworCXN0cnVjdCBtaWlfYnVzCQkqc2xhdmVfbWlpX2J1czsKKwlzdHJ1Y3QgbmV0X2RldmljZQkqcG9ydHNbRFNBX01BWF9QT1JUU107Cit9OworCitzdHJ1Y3QgZHNhX3N3aXRjaF90cmVlIHsKKwkvKgorCSAqIENvbmZpZ3VyYXRpb24gZGF0YSBmb3IgdGhlIHBsYXRmb3JtIGRldmljZSB0aGF0IG93bnMKKwkgKiB0aGlzIGRzYSBzd2l0Y2ggdHJlZSBpbnN0YW5jZS4KKwkgKi8KKwlzdHJ1Y3QgZHNhX3BsYXRmb3JtX2RhdGEJKnBkOworCisJLyoKKwkgKiBSZWZlcmVuY2UgdG8gbmV0d29yayBkZXZpY2UgdG8gdXNlLCBhbmQgd2hpY2ggdGFnZ2luZworCSAqIHByb3RvY29sIHRvIHVzZS4KKwkgKi8KKwlzdHJ1Y3QgbmV0X2RldmljZQkqbWFzdGVyX25ldGRldjsKKwlfX2JlMTYJCQl0YWdfcHJvdG9jb2w7CisKKwkvKgorCSAqIFRoZSBzd2l0Y2ggYW5kIHBvcnQgdG8gd2hpY2ggdGhlIENQVSBpcyBhdHRhY2hlZC4KKwkgKi8KKwlzOAkJCWNwdV9zd2l0Y2g7CisJczgJCQljcHVfcG9ydDsKIAogCS8qCiAJICogTGluayBzdGF0ZSBwb2xsaW5nLgogCSAqLwotCXN0cnVjdCB3b3JrX3N0cnVjdAkJbGlua19wb2xsX3dvcms7Ci0Jc3RydWN0IHRpbWVyX2xpc3QJCWxpbmtfcG9sbF90aW1lcjsKKwlpbnQJCQlsaW5rX3BvbGxfbmVlZGVkOworCXN0cnVjdCB3b3JrX3N0cnVjdAlsaW5rX3BvbGxfd29yazsKKwlzdHJ1Y3QgdGltZXJfbGlzdAlsaW5rX3BvbGxfdGltZXI7CisKKwkvKgorCSAqIERhdGEgZm9yIHRoZSBpbmRpdmlkdWFsIHN3aXRjaCBjaGlwcy4KKwkgKi8KKwlzdHJ1Y3QgZHNhX3N3aXRjaAkqZHNbRFNBX01BWF9TV0lUQ0hFU107CiB9OwogCitzdGF0aWMgaW5saW5lIGJvb2wgZHNhX2lzX2NwdV9wb3J0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHApCit7CisJcmV0dXJuICEhKGRzLT5pbmRleCA9PSBkcy0+ZHN0LT5jcHVfc3dpdGNoICYmIHAgPT0gZHMtPmRzdC0+Y3B1X3BvcnQpOworfQorCitzdGF0aWMgaW5saW5lIHU4IGRzYV91cHN0cmVhbV9wb3J0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcykKK3sKKwlzdHJ1Y3QgZHNhX3N3aXRjaF90cmVlICpkc3QgPSBkcy0+ZHN0OworCisJLyoKKwkgKiBJZiB0aGlzIGlzIHRoZSByb290IHN3aXRjaCAoaS5lLiB0aGUgc3dpdGNoIHRoYXQgY29ubmVjdHMKKwkgKiB0byB0aGUgQ1BVKSwgcmV0dXJuIHRoZSBjcHUgcG9ydCBudW1iZXIgb24gdGhpcyBzd2l0Y2guCisJICogRWxzZSByZXR1cm4gdGhlIChEU0EpIHBvcnQgbnVtYmVyIHRoYXQgY29ubmVjdHMgdG8gdGhlCisJICogc3dpdGNoIHRoYXQgaXMgb25lIGhvcCBjbG9zZXIgdG8gdGhlIGNwdS4KKwkgKi8KKwlpZiAoZHN0LT5jcHVfc3dpdGNoID09IGRzLT5pbmRleCkKKwkJcmV0dXJuIGRzdC0+Y3B1X3BvcnQ7CisJZWxzZQorCQlyZXR1cm4gZHMtPnBkLT5ydGFibGVbZHN0LT5jcHVfc3dpdGNoXTsKK30KKwogc3RydWN0IGRzYV9zbGF2ZV9wcml2IHsKKwkvKgorCSAqIFRoZSBsaW51eCBuZXR3b3JrIGludGVyZmFjZSBjb3JyZXNwb25kaW5nIHRvIHRoaXMKKwkgKiBzd2l0Y2ggcG9ydC4KKwkgKi8KIAlzdHJ1Y3QgbmV0X2RldmljZQkqZGV2OworCisJLyoKKwkgKiBXaGljaCBzd2l0Y2ggdGhpcyBwb3J0IGlzIGEgcGFydCBvZiwgYW5kIHRoZSBwb3J0IGluZGV4CisJICogZm9yIHRoaXMgcG9ydC4KKwkgKi8KIAlzdHJ1Y3QgZHNhX3N3aXRjaAkqcGFyZW50OwotCWludAkJCXBvcnQ7CisJdTgJCQlwb3J0OworCisJLyoKKwkgKiBUaGUgcGh5bGliIHBoeV9kZXZpY2UgcG9pbnRlciBmb3IgdGhlIFBIWSBjb25uZWN0ZWQKKwkgKiB0byB0aGlzIHBvcnQuCisJICovCiAJc3RydWN0IHBoeV9kZXZpY2UJKnBoeTsKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9kc2EvbXY4OGU2MDYwLmMgYi9uZXQvZHNhL212ODhlNjA2MC5jCmluZGV4IDg1MDgxYWUuLjgzMjc3ZjQgMTAwNjQ0Ci0tLSBhL25ldC9kc2EvbXY4OGU2MDYwLmMKKysrIGIvbmV0L2RzYS9tdjg4ZTYwNjAuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBuZXQvZHNhL212ODhlNjA2MC5jIC0gRHJpdmVyIGZvciBNYXJ2ZWxsIDg4ZTYwNjAgc3dpdGNoIGNoaXBzCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggTWFydmVsbCBTZW1pY29uZHVjdG9yCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAwOSBNYXJ2ZWxsIFNlbWljb25kdWN0b3IKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTgxLDcgKzgxLDcgQEAKIAkvKgogCSAqIFJlc2V0IHRoZSBzd2l0Y2guCiAJICovCi0JUkVHX1dSSVRFKFJFR19HTE9CQUwsIDB4MEEsIDB4YTEzMCk7CisJUkVHX1dSSVRFKFJFR19HTE9CQUwsIDB4MGEsIDB4YTEzMCk7CiAKIAkvKgogCSAqIFdhaXQgdXAgdG8gb25lIHNlY29uZCBmb3IgcmVzZXQgdG8gY29tcGxldGUuCkBAIC0xMjgsNyArMTI4LDcgQEAKIAkgKiBzdGF0ZSB0byBGb3J3YXJkaW5nLiAgQWRkaXRpb25hbGx5LCBpZiB0aGlzIGlzIHRoZSBDUFUKIAkgKiBwb3J0LCBlbmFibGUgSW5ncmVzcyBhbmQgRWdyZXNzIFRyYWlsZXIgdGFnZ2luZyBtb2RlLgogCSAqLwotCVJFR19XUklURShhZGRyLCAweDA0LCAocCA9PSBkcy0+Y3B1X3BvcnQpID8gMHg0MTAzIDogMHgwMDAzKTsKKwlSRUdfV1JJVEUoYWRkciwgMHgwNCwgZHNhX2lzX2NwdV9wb3J0KGRzLCBwKSA/ICAweDQxMDMgOiAweDAwMDMpOwogCiAJLyoKIAkgKiBQb3J0IGJhc2VkIFZMQU4gbWFwOiBnaXZlIGVhY2ggcG9ydCBpdHMgb3duIGFkZHJlc3MKQEAgLTEzOCw5ICsxMzgsOSBAQAogCSAqLwogCVJFR19XUklURShhZGRyLCAweDA2LAogCQkJKChwICYgMHhmKSA8PCAxMikgfAotCQkJICgocCA9PSBkcy0+Y3B1X3BvcnQpID8KLQkJCQlkcy0+dmFsaWRfcG9ydF9tYXNrIDoKLQkJCQkoMSA8PCBkcy0+Y3B1X3BvcnQpKSk7CisJCQkgKGRzYV9pc19jcHVfcG9ydChkcywgcCkgPworCQkJCWRzLT5waHlzX3BvcnRfbWFzayA6CisJCQkJKDEgPDwgZHMtPmRzdC0+Y3B1X3BvcnQpKSk7CiAKIAkvKgogCSAqIFBvcnQgQXNzb2NpYXRpb24gVmVjdG9yOiB3aGVuIGxlYXJuaW5nIHNvdXJjZSBhZGRyZXNzZXMKZGlmZiAtLWdpdCBhL25ldC9kc2EvbXY4OGU2MTIzXzYxXzY1LmMgYi9uZXQvZHNhL212ODhlNjEyM182MV82NS5jCmluZGV4IGVjOGM2YTAuLjUyZmFhYTIgMTAwNjQ0Ci0tLSBhL25ldC9kc2EvbXY4OGU2MTIzXzYxXzY1LmMKKysrIGIvbmV0L2RzYS9tdjg4ZTYxMjNfNjFfNjUuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBuZXQvZHNhL212ODhlNjEyM182MV82NS5jIC0gTWFydmVsbCA4OGU2MTIzLzYxNjEvNjE2NSBzd2l0Y2ggY2hpcCBzdXBwb3J0Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMDggTWFydmVsbCBTZW1pY29uZHVjdG9yCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAwOSBNYXJ2ZWxsIFNlbWljb25kdWN0b3IKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTk4LDE3ICs5OCwxNyBAQAogCQlyZXR1cm4gcmV0OwogCiAJLyoKLQkgKiBDb25maWd1cmUgdGhlIGNwdSBwb3J0LCBhbmQgY29uZmlndXJlIHRoZSBjcHUgcG9ydCBhcyB0aGUKLQkgKiBwb3J0IHRvIHdoaWNoIGluZ3Jlc3MgYW5kIGVncmVzcyBtb25pdG9yIGZyYW1lcyBhcmUgdG8gYmUKLQkgKiBzZW50LgorCSAqIENvbmZpZ3VyZSB0aGUgdXBzdHJlYW0gcG9ydCwgYW5kIGNvbmZpZ3VyZSB0aGUgdXBzdHJlYW0KKwkgKiBwb3J0IGFzIHRoZSBwb3J0IHRvIHdoaWNoIGluZ3Jlc3MgYW5kIGVncmVzcyBtb25pdG9yIGZyYW1lcworCSAqIGFyZSB0byBiZSBzZW50LgogCSAqLwotCVJFR19XUklURShSRUdfR0xPQkFMLCAweDFhLCAoZHMtPmNwdV9wb3J0ICogMHgxMTEwKSk7CisJUkVHX1dSSVRFKFJFR19HTE9CQUwsIDB4MWEsIChkc2FfdXBzdHJlYW1fcG9ydChkcykgKiAweDExMTApKTsKIAogCS8qCiAJICogRGlzYWJsZSByZW1vdGUgbWFuYWdlbWVudCBmb3Igbm93LCBhbmQgc2V0IHRoZSBzd2l0Y2gncwotCSAqIERTQSBkZXZpY2UgbnVtYmVyIHRvIHplcm8uCisJICogRFNBIGRldmljZSBudW1iZXIuCiAJICovCi0JUkVHX1dSSVRFKFJFR19HTE9CQUwsIDB4MWMsIDB4MDAwMCk7CisJUkVHX1dSSVRFKFJFR19HTE9CQUwsIDB4MWMsIGRzLT5pbmRleCAmIDB4MWYpOwogCiAJLyoKIAkgKiBTZW5kIGFsbCBmcmFtZXMgd2l0aCBkZXN0aW5hdGlvbiBhZGRyZXNzZXMgbWF0Y2hpbmcKQEAgLTEzMywxMCArMTMzLDE3IEBACiAJUkVHX1dSSVRFKFJFR19HTE9CQUwyLCAweDA1LCAweDAwZmYpOwogCiAJLyoKLQkgKiBNYXAgYWxsIERTQSBkZXZpY2UgSURzIHRvIHRoZSBDUFUgcG9ydC4KKwkgKiBQcm9ncmFtIHRoZSBEU0Egcm91dGluZyB0YWJsZS4KIAkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykKLQkJUkVHX1dSSVRFKFJFR19HTE9CQUwyLCAweDA2LCAweDgwMDAgfCAoaSA8PCA4KSB8IGRzLT5jcHVfcG9ydCk7CisJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKKwkJaW50IG5leHRob3A7CisKKwkJbmV4dGhvcCA9IDB4MWY7CisJCWlmIChpICE9IGRzLT5pbmRleCAmJiBpIDwgZHMtPmRzdC0+cGQtPm5yX2NoaXBzKQorCQkJbmV4dGhvcCA9IGRzLT5wZC0+cnRhYmxlW2ldICYgMHgxZjsKKworCQlSRUdfV1JJVEUoUkVHX0dMT0JBTDIsIDB4MDYsIDB4ODAwMCB8IChpIDw8IDgpIHwgbmV4dGhvcCk7CisJfQogCiAJLyoKIAkgKiBDbGVhciBhbGwgdHJ1bmsgbWFza3MuCkBAIC0xNzYsMTIgKzE4MywxOCBAQAogc3RhdGljIGludCBtdjg4ZTYxMjNfNjFfNjVfc2V0dXBfcG9ydChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwKQogewogCWludCBhZGRyID0gUkVHX1BPUlQocCk7CisJdTE2IHZhbDsKIAogCS8qCiAJICogTUFDIEZvcmNpbmcgcmVnaXN0ZXI6IGRvbid0IGZvcmNlIGxpbmssIHNwZWVkLCBkdXBsZXgKLQkgKiBvciBmbG93IGNvbnRyb2wgc3RhdGUgdG8gYW55IHBhcnRpY3VsYXIgdmFsdWVzLgorCSAqIG9yIGZsb3cgY29udHJvbCBzdGF0ZSB0byBhbnkgcGFydGljdWxhciB2YWx1ZXMgb24gcGh5c2ljYWwKKwkgKiBwb3J0cywgYnV0IGZvcmNlIHRoZSBDUFUgcG9ydCBhbmQgYWxsIERTQSBwb3J0cyB0byAxMDAwIE1iL3MKKwkgKiBmdWxsIGR1cGxleC4KIAkgKi8KLQlSRUdfV1JJVEUoYWRkciwgMHgwMSwgMHgwMDAzKTsKKwlpZiAoZHNhX2lzX2NwdV9wb3J0KGRzLCBwKSB8fCBkcy0+ZHNhX3BvcnRfbWFzayAmICgxIDw8IHApKQorCQlSRUdfV1JJVEUoYWRkciwgMHgwMSwgMHgwMDNlKTsKKwllbHNlCisJCVJFR19XUklURShhZGRyLCAweDAxLCAweDAwMDMpOwogCiAJLyoKIAkgKiBEbyBub3QgbGltaXQgdGhlIHBlcmlvZCBvZiB0aW1lIHRoYXQgdGhpcyBwb3J0IGNhbiBiZQpAQCAtMTkyLDM3ICsyMDUsNTAgQEAKIAogCS8qCiAJICogUG9ydCBDb250cm9sOiBkaXNhYmxlIERyb3Atb24tVW5sb2NrLCBkaXNhYmxlIERyb3Atb24tTG9jaywKLQkgKiBjb25maWd1cmUgdGhlIHJlcXVlc3RlZCAoRFNBL0VEU0EpIHRhZ2dpbmcgbW9kZSBpZiB0aGlzIGlzCi0JICogdGhlIENQVSBwb3J0LCBkaXNhYmxlIEhlYWRlciBtb2RlLCBlbmFibGUgSUdNUC9NTEQgc25vb3BpbmcsCi0JICogZGlzYWJsZSBWTEFOIHR1bm5lbGluZywgZGV0ZXJtaW5lIHByaW9yaXR5IGJ5IGxvb2tpbmcgYXQKLQkgKiA4MDIuMXAgYW5kIElQIHByaW9yaXR5IGZpZWxkcyAoSVAgcHJpbyBoYXMgcHJlY2VkZW5jZSksIGFuZAotCSAqIHNldCBTVFAgc3RhdGUgdG8gRm9yd2FyZGluZy4gIEZpbmFsbHksIGlmIHRoaXMgaXMgdGhlIENQVQotCSAqIHBvcnQsIGFkZGl0aW9uYWxseSBlbmFibGUgZm9yd2FyZGluZyBvZiB1bmtub3duIHVuaWNhc3QgYW5kCi0JICogbXVsdGljYXN0IGFkZHJlc3Nlcy4KKwkgKiBkaXNhYmxlIEhlYWRlciBtb2RlLCBlbmFibGUgSUdNUC9NTEQgc25vb3BpbmcsIGRpc2FibGUgVkxBTgorCSAqIHR1bm5lbGluZywgZGV0ZXJtaW5lIHByaW9yaXR5IGJ5IGxvb2tpbmcgYXQgODAyLjFwIGFuZCBJUAorCSAqIHByaW9yaXR5IGZpZWxkcyAoSVAgcHJpbyBoYXMgcHJlY2VkZW5jZSksIGFuZCBzZXQgU1RQIHN0YXRlCisJICogdG8gRm9yd2FyZGluZy4KKwkgKgorCSAqIElmIHRoaXMgaXMgdGhlIENQVSBsaW5rLCB1c2UgRFNBIG9yIEVEU0EgdGFnZ2luZyBkZXBlbmRpbmcKKwkgKiBvbiB3aGljaCB0YWdnaW5nIG1vZGUgd2FzIGNvbmZpZ3VyZWQuCisJICoKKwkgKiBJZiB0aGlzIGlzIGEgbGluayB0byBhbm90aGVyIHN3aXRjaCwgdXNlIERTQSB0YWdnaW5nIG1vZGUuCisJICoKKwkgKiBJZiB0aGlzIGlzIHRoZSB1cHN0cmVhbSBwb3J0IGZvciB0aGlzIHN3aXRjaCwgZW5hYmxlCisJICogZm9yd2FyZGluZyBvZiB1bmtub3duIHVuaWNhc3RzIGFuZCBtdWx0aWNhc3RzLgogCSAqLwotCVJFR19XUklURShhZGRyLCAweDA0LAotCQkJKHAgPT0gZHMtPmNwdV9wb3J0KSA/Ci0JCQkgKGRzLT50YWdfcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfRFNBKSkgPwotCQkJICAweDA1M2YgOiAweDM3M2YgOgotCQkJIDB4MDQzMyk7CisJdmFsID0gMHgwNDMzOworCWlmIChkc2FfaXNfY3B1X3BvcnQoZHMsIHApKSB7CisJCWlmIChkcy0+ZHN0LT50YWdfcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfRURTQSkpCisJCQl2YWwgfD0gMHgzMzAwOworCQllbHNlCisJCQl2YWwgfD0gMHgwMTAwOworCX0KKwlpZiAoZHMtPmRzYV9wb3J0X21hc2sgJiAoMSA8PCBwKSkKKwkJdmFsIHw9IDB4MDEwMDsKKwlpZiAocCA9PSBkc2FfdXBzdHJlYW1fcG9ydChkcykpCisJCXZhbCB8PSAweDAwMGM7CisJUkVHX1dSSVRFKGFkZHIsIDB4MDQsIHZhbCk7CiAKIAkvKgogCSAqIFBvcnQgQ29udHJvbCAxOiBkaXNhYmxlIHRydW5raW5nLiAgQWxzbywgaWYgdGhpcyBpcyB0aGUKIAkgKiBDUFUgcG9ydCwgZW5hYmxlIGxlYXJuIG1lc3NhZ2VzIHRvIGJlIHNlbnQgdG8gdGhpcyBwb3J0LgogCSAqLwotCVJFR19XUklURShhZGRyLCAweDA1LCAocCA9PSBkcy0+Y3B1X3BvcnQpID8gMHg4MDAwIDogMHgwMDAwKTsKKwlSRUdfV1JJVEUoYWRkciwgMHgwNSwgZHNhX2lzX2NwdV9wb3J0KGRzLCBwKSA/IDB4ODAwMCA6IDB4MDAwMCk7CiAKIAkvKgogCSAqIFBvcnQgYmFzZWQgVkxBTiBtYXA6IGdpdmUgZWFjaCBwb3J0IGl0cyBvd24gYWRkcmVzcwogCSAqIGRhdGFiYXNlLCBhbGxvdyB0aGUgQ1BVIHBvcnQgdG8gdGFsayB0byBlYWNoIG9mIHRoZSAncmVhbCcKIAkgKiBwb3J0cywgYW5kIGFsbG93IGVhY2ggb2YgdGhlICdyZWFsJyBwb3J0cyB0byBvbmx5IHRhbGsgdG8KLQkgKiB0aGUgQ1BVIHBvcnQuCisJICogdGhlIHVwc3RyZWFtIHBvcnQuCiAJICovCi0JUkVHX1dSSVRFKGFkZHIsIDB4MDYsCi0JCQkoKHAgJiAweGYpIDw8IDEyKSB8Ci0JCQkgKChwID09IGRzLT5jcHVfcG9ydCkgPwotCQkJCWRzLT52YWxpZF9wb3J0X21hc2sgOgotCQkJCSgxIDw8IGRzLT5jcHVfcG9ydCkpKTsKKwl2YWwgPSAocCAmIDB4ZikgPDwgMTI7CisJaWYgKGRzYV9pc19jcHVfcG9ydChkcywgcCkpCisJCXZhbCB8PSBkcy0+cGh5c19wb3J0X21hc2s7CisJZWxzZQorCQl2YWwgfD0gMSA8PCBkc2FfdXBzdHJlYW1fcG9ydChkcyk7CisJUkVHX1dSSVRFKGFkZHIsIDB4MDYsIHZhbCk7CiAKIAkvKgogCSAqIERlZmF1bHQgVkxBTiBJRCBhbmQgcHJpb3JpdHk6IGRvbid0IHNldCBhIGRlZmF1bHQgVkxBTgpAQCAtMzk0LDcgKzQyMCw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZHNhX3N3aXRjaF9kcml2ZXIgbXY4OGU2MTIzXzYxXzY1X3N3aXRjaF9kcml2ZXIgPSB7Ci0JLnRhZ19wcm90b2NvbAkJPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0VEU0EpLAorCS50YWdfcHJvdG9jb2wJCT0gY3B1X3RvX2JlMTYoRVRIX1BfRURTQSksCiAJLnByaXZfc2l6ZQkJPSBzaXplb2Yoc3RydWN0IG12ODhlNnh4eF9wcml2X3N0YXRlKSwKIAkucHJvYmUJCQk9IG12ODhlNjEyM182MV82NV9wcm9iZSwKIAkuc2V0dXAJCQk9IG12ODhlNjEyM182MV82NV9zZXR1cCwKZGlmZiAtLWdpdCBhL25ldC9kc2EvbXY4OGU2MTMxLmMgYi9uZXQvZHNhL212ODhlNjEzMS5jCmluZGV4IDM3NGQ0NmEuLmJiMmI0MWIgMTAwNjQ0Ci0tLSBhL25ldC9kc2EvbXY4OGU2MTMxLmMKKysrIGIvbmV0L2RzYS9tdjg4ZTYxMzEuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCi0gKiBuZXQvZHNhL212ODhlNjEzMS5jIC0gTWFydmVsbCA4OGU2MTMxIHN3aXRjaCBjaGlwIHN1cHBvcnQKLSAqIENvcHlyaWdodCAoYykgMjAwOCBNYXJ2ZWxsIFNlbWljb25kdWN0b3IKKyAqIG5ldC9kc2EvbXY4OGU2MTMxLmMgLSBNYXJ2ZWxsIDg4ZTYwOTUvNjA5NWYvNjEzMSBzd2l0Y2ggY2hpcCBzdXBwb3J0CisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAwOSBNYXJ2ZWxsIFNlbWljb25kdWN0b3IKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTIxLDYgKzIxLDggQEAKIAlyZXQgPSBfX212ODhlNnh4eF9yZWdfcmVhZChidXMsIHN3X2FkZHIsIFJFR19QT1JUKDApLCAweDAzKTsKIAlpZiAocmV0ID49IDApIHsKIAkJcmV0ICY9IDB4ZmZmMDsKKwkJaWYgKHJldCA9PSAweDA5NTApCisJCQlyZXR1cm4gIk1hcnZlbGwgODhFNjA5NS84OEU2MDk1RiI7CiAJCWlmIChyZXQgPT0gMHgxMDYwKQogCQkJcmV0dXJuICJNYXJ2ZWxsIDg4RTYxMzEiOwogCX0KQEAgLTM2LDcgKzM4LDcgQEAKIAkvKgogCSAqIFNldCBhbGwgcG9ydHMgdG8gdGhlIGRpc2FibGVkIHN0YXRlLgogCSAqLwotCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgMTE7IGkrKykgewogCQlyZXQgPSBSRUdfUkVBRChSRUdfUE9SVChpKSwgMHgwNCk7CiAJCVJFR19XUklURShSRUdfUE9SVChpKSwgMHgwNCwgcmV0ICYgMHhmZmZjKTsKIAl9CkBAIC0xMDAsMTcgKzEwMiwxNyBAQAogCVJFR19XUklURShSRUdfR0xPQkFMLCAweDE5LCAweDgxMDApOwogCiAJLyoKLQkgKiBEaXNhYmxlIEFSUCBtaXJyb3JpbmcsIGFuZCBjb25maWd1cmUgdGhlIGNwdSBwb3J0IGFzIHRoZQotCSAqIHBvcnQgdG8gd2hpY2ggaW5ncmVzcyBhbmQgZWdyZXNzIG1vbml0b3IgZnJhbWVzIGFyZSB0byBiZQotCSAqIHNlbnQuCisJICogRGlzYWJsZSBBUlAgbWlycm9yaW5nLCBhbmQgY29uZmlndXJlIHRoZSB1cHN0cmVhbSBwb3J0IGFzCisJICogdGhlIHBvcnQgdG8gd2hpY2ggaW5ncmVzcyBhbmQgZWdyZXNzIG1vbml0b3IgZnJhbWVzIGFyZSB0bworCSAqIGJlIHNlbnQuCiAJICovCi0JUkVHX1dSSVRFKFJFR19HTE9CQUwsIDB4MWEsIChkcy0+Y3B1X3BvcnQgKiAweDExMDApIHwgMHgwMGYwKTsKKwlSRUdfV1JJVEUoUkVHX0dMT0JBTCwgMHgxYSwgKGRzYV91cHN0cmVhbV9wb3J0KGRzKSAqIDB4MTEwMCkgfCAweDAwZjApOwogCiAJLyoKIAkgKiBEaXNhYmxlIGNhc2NhZGUgcG9ydCBmdW5jdGlvbmFsaXR5LCBhbmQgc2V0IHRoZSBzd2l0Y2gncwotCSAqIERTQSBkZXZpY2UgbnVtYmVyIHRvIHplcm8uCisJICogRFNBIGRldmljZSBudW1iZXIuCiAJICovCi0JUkVHX1dSSVRFKFJFR19HTE9CQUwsIDB4MWMsIDB4ZTAwMCk7CisJUkVHX1dSSVRFKFJFR19HTE9CQUwsIDB4MWMsIDB4ZTAwMCB8IChkcy0+aW5kZXggJiAweDFmKSk7CiAKIAkvKgogCSAqIFNlbmQgYWxsIGZyYW1lcyB3aXRoIGRlc3RpbmF0aW9uIGFkZHJlc3NlcyBtYXRjaGluZwpAQCAtMTI3LDE2ICsxMjksMjMgQEAKIAlSRUdfV1JJVEUoUkVHX0dMT0JBTDIsIDB4MDUsIDB4MDBmZik7CiAKIAkvKgotCSAqIE1hcCBhbGwgRFNBIGRldmljZSBJRHMgdG8gdGhlIENQVSBwb3J0LgorCSAqIFByb2dyYW0gdGhlIERTQSByb3V0aW5nIHRhYmxlLgogCSAqLwotCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKQotCQlSRUdfV1JJVEUoUkVHX0dMT0JBTDIsIDB4MDYsIDB4ODAwMCB8IChpIDw8IDgpIHwgZHMtPmNwdV9wb3J0KTsKKwlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgeworCQlpbnQgbmV4dGhvcDsKKworCQluZXh0aG9wID0gMHgxZjsKKwkJaWYgKGkgIT0gZHMtPmluZGV4ICYmIGkgPCBkcy0+ZHN0LT5wZC0+bnJfY2hpcHMpCisJCQluZXh0aG9wID0gZHMtPnBkLT5ydGFibGVbaV0gJiAweDFmOworCisJCVJFR19XUklURShSRUdfR0xPQkFMMiwgMHgwNiwgMHg4MDAwIHwgKGkgPDwgOCkgfCBuZXh0aG9wKTsKKwl9CiAKIAkvKgogCSAqIENsZWFyIGFsbCB0cnVuayBtYXNrcy4KIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQotCQlSRUdfV1JJVEUoUkVHX0dMT0JBTDIsIDB4MDcsIDB4ODAwMCB8IChpIDw8IDEyKSB8IDB4ZmYpOworCQlSRUdfV1JJVEUoUkVHX0dMT0JBTDIsIDB4MDcsIDB4ODAwMCB8IChpIDw8IDEyKSB8IDB4N2ZmKTsKIAogCS8qCiAJICogQ2xlYXIgYWxsIHRydW5rIG1hcHBpbmdzLgpAQCAtMTU2LDEyICsxNjUsMTggQEAKIHN0YXRpYyBpbnQgbXY4OGU2MTMxX3NldHVwX3BvcnQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcCkKIHsKIAlpbnQgYWRkciA9IFJFR19QT1JUKHApOworCXUxNiB2YWw7CiAKIAkvKgogCSAqIE1BQyBGb3JjaW5nIHJlZ2lzdGVyOiBkb24ndCBmb3JjZSBsaW5rLCBzcGVlZCwgZHVwbGV4Ci0JICogb3IgZmxvdyBjb250cm9sIHN0YXRlIHRvIGFueSBwYXJ0aWN1bGFyIHZhbHVlcy4KKwkgKiBvciBmbG93IGNvbnRyb2wgc3RhdGUgdG8gYW55IHBhcnRpY3VsYXIgdmFsdWVzIG9uIHBoeXNpY2FsCisJICogcG9ydHMsIGJ1dCBmb3JjZSB0aGUgQ1BVIHBvcnQgYW5kIGFsbCBEU0EgcG9ydHMgdG8gMTAwMCBNYi9zCisJICogZnVsbCBkdXBsZXguCiAJICovCi0JUkVHX1dSSVRFKGFkZHIsIDB4MDEsIDB4MDAwMyk7CisJaWYgKGRzYV9pc19jcHVfcG9ydChkcywgcCkgfHwgZHMtPmRzYV9wb3J0X21hc2sgJiAoMSA8PCBwKSkKKwkJUkVHX1dSSVRFKGFkZHIsIDB4MDEsIDB4MDAzZSk7CisJZWxzZQorCQlSRUdfV1JJVEUoYWRkciwgMHgwMSwgMHgwMDAzKTsKIAogCS8qCiAJICogUG9ydCBDb250cm9sOiBkaXNhYmxlIENvcmUgVGFnLCBkaXNhYmxlIERyb3Atb24tTG9jaywKQEAgLTE2OSwyOSArMTg0LDQwIEBACiAJICogZW5hYmxlIElHTVAvTUxEIHNub29wLCBkaXNhYmxlIERvdWJsZVRhZywgZGlzYWJsZSBWTEFOCiAJICogdHVubmVsaW5nLCBkZXRlcm1pbmUgcHJpb3JpdHkgYnkgbG9va2luZyBhdCA4MDIuMXAgYW5kCiAJICogSVAgcHJpb3JpdHkgZmllbGRzIChJUCBwcmlvIGhhcyBwcmVjZWRlbmNlKSwgYW5kIHNldCBTVFAKLQkgKiBzdGF0ZSB0byBGb3J3YXJkaW5nLiAgRmluYWxseSwgaWYgdGhpcyBpcyB0aGUgQ1BVIHBvcnQsCi0JICogYWRkaXRpb25hbGx5IGVuYWJsZSBEU0EgdGFnZ2luZyBhbmQgZm9yd2FyZGluZyBvZiB1bmtub3duCi0JICogdW5pY2FzdCBhZGRyZXNzZXMuCisJICogc3RhdGUgdG8gRm9yd2FyZGluZy4KKwkgKgorCSAqIElmIHRoaXMgaXMgdGhlIHVwc3RyZWFtIHBvcnQgZm9yIHRoaXMgc3dpdGNoLCBlbmFibGUKKwkgKiBmb3J3YXJkaW5nIG9mIHVua25vd24gdW5pY2FzdHMsIGFuZCBlbmFibGUgRFNBIHRhZ2dpbmcKKwkgKiBtb2RlLgorCSAqCisJICogSWYgdGhpcyBpcyB0aGUgbGluayB0byBhbm90aGVyIHN3aXRjaCwgdXNlIERTQSB0YWdnaW5nCisJICogbW9kZSwgYnV0IGRvIG5vdCBlbmFibGUgZm9yd2FyZGluZyBvZiB1bmtub3duIHVuaWNhc3RzLgogCSAqLwotCVJFR19XUklURShhZGRyLCAweDA0LCAocCA9PSBkcy0+Y3B1X3BvcnQpID8gMHgwNTM3IDogMHgwNDMzKTsKKwl2YWwgPSAweDA0MzM7CisJaWYgKHAgPT0gZHNhX3Vwc3RyZWFtX3BvcnQoZHMpKQorCQl2YWwgfD0gMHgwMTA0OworCWlmIChkcy0+ZHNhX3BvcnRfbWFzayAmICgxIDw8IHApKQorCQl2YWwgfD0gMHgwMTAwOworCVJFR19XUklURShhZGRyLCAweDA0LCB2YWwpOwogCiAJLyoKIAkgKiBQb3J0IENvbnRyb2wgMTogZGlzYWJsZSB0cnVua2luZy4gIEFsc28sIGlmIHRoaXMgaXMgdGhlCiAJICogQ1BVIHBvcnQsIGVuYWJsZSBsZWFybiBtZXNzYWdlcyB0byBiZSBzZW50IHRvIHRoaXMgcG9ydC4KIAkgKi8KLQlSRUdfV1JJVEUoYWRkciwgMHgwNSwgKHAgPT0gZHMtPmNwdV9wb3J0KSA/IDB4ODAwMCA6IDB4MDAwMCk7CisJUkVHX1dSSVRFKGFkZHIsIDB4MDUsIGRzYV9pc19jcHVfcG9ydChkcywgcCkgPyAweDgwMDAgOiAweDAwMDApOwogCiAJLyoKIAkgKiBQb3J0IGJhc2VkIFZMQU4gbWFwOiBnaXZlIGVhY2ggcG9ydCBpdHMgb3duIGFkZHJlc3MKIAkgKiBkYXRhYmFzZSwgYWxsb3cgdGhlIENQVSBwb3J0IHRvIHRhbGsgdG8gZWFjaCBvZiB0aGUgJ3JlYWwnCiAJICogcG9ydHMsIGFuZCBhbGxvdyBlYWNoIG9mIHRoZSAncmVhbCcgcG9ydHMgdG8gb25seSB0YWxrIHRvCi0JICogdGhlIENQVSBwb3J0LgorCSAqIHRoZSB1cHN0cmVhbSBwb3J0LgogCSAqLwotCVJFR19XUklURShhZGRyLCAweDA2LAotCQkJKChwICYgMHhmKSA8PCAxMikgfAotCQkJICgocCA9PSBkcy0+Y3B1X3BvcnQpID8KLQkJCQlkcy0+dmFsaWRfcG9ydF9tYXNrIDoKLQkJCQkoMSA8PCBkcy0+Y3B1X3BvcnQpKSk7CisJdmFsID0gKHAgJiAweGYpIDw8IDEyOworCWlmIChkc2FfaXNfY3B1X3BvcnQoZHMsIHApKQorCQl2YWwgfD0gZHMtPnBoeXNfcG9ydF9tYXNrOworCWVsc2UKKwkJdmFsIHw9IDEgPDwgZHNhX3Vwc3RyZWFtX3BvcnQoZHMpOworCVJFR19XUklURShhZGRyLCAweDA2LCB2YWwpOwogCiAJLyoKIAkgKiBEZWZhdWx0IFZMQU4gSUQgYW5kIHByaW9yaXR5OiBkb24ndCBzZXQgYSBkZWZhdWx0IFZMQU4KQEAgLTIwNywxMyArMjMzLDE1IEBACiAJICogdW50YWdnZWQgZnJhbWVzIG9uIHRoaXMgcG9ydCwgZG8gYSBkZXN0aW5hdGlvbiBhZGRyZXNzCiAJICogbG9va3VwIG9uIHJlY2VpdmVkIHBhY2tldHMgYXMgdXN1YWwsIGRvbid0IHNlbmQgYSBjb3B5CiAJICogb2YgYWxsIHRyYW5zbWl0dGVkL3JlY2VpdmVkIGZyYW1lcyBvbiB0aGlzIHBvcnQgdG8gdGhlCi0JICogQ1BVLCBhbmQgY29uZmlndXJlIHRoZSBDUFUgcG9ydCBudW1iZXIuICBBbHNvLCBpZiB0aGlzCi0JICogaXMgdGhlIENQVSBwb3J0LCBlbmFibGUgZm9yd2FyZGluZyBvZiB1bmtub3duIG11bHRpY2FzdAotCSAqIGFkZHJlc3Nlcy4KKwkgKiBDUFUsIGFuZCBjb25maWd1cmUgdGhlIHVwc3RyZWFtIHBvcnQgbnVtYmVyLgorCSAqCisJICogSWYgdGhpcyBpcyB0aGUgdXBzdHJlYW0gcG9ydCBmb3IgdGhpcyBzd2l0Y2gsIGVuYWJsZQorCSAqIGZvcndhcmRpbmcgb2YgdW5rbm93biBtdWx0aWNhc3QgYWRkcmVzc2VzLgogCSAqLwotCVJFR19XUklURShhZGRyLCAweDA4LAotCQkJKChwID09IGRzLT5jcHVfcG9ydCkgPyAweDAwYzAgOiAweDAwODApIHwKLQkJCSBkcy0+Y3B1X3BvcnQpOworCXZhbCA9IDB4MDA4MCB8IGRzYV91cHN0cmVhbV9wb3J0KGRzKTsKKwlpZiAocCA9PSBkc2FfdXBzdHJlYW1fcG9ydChkcykpCisJCXZhbCB8PSAweDAwNDA7CisJUkVHX1dSSVRFKGFkZHIsIDB4MDgsIHZhbCk7CiAKIAkvKgogCSAqIFJhdGUgQ29udHJvbDogZGlzYWJsZSBpbmdyZXNzIHJhdGUgbGltaXRpbmcuCkBAIC0yNjgsNyArMjk2LDcgQEAKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAotCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgMTE7IGkrKykgewogCQlyZXQgPSBtdjg4ZTYxMzFfc2V0dXBfcG9ydChkcywgaSk7CiAJCWlmIChyZXQgPCAwKQogCQkJcmV0dXJuIHJldDsKQEAgLTI3OSw3ICszMDcsNyBAQAogCiBzdGF0aWMgaW50IG12ODhlNjEzMV9wb3J0X3RvX3BoeV9hZGRyKGludCBwb3J0KQogewotCWlmIChwb3J0ID49IDAgJiYgcG9ydCAhPSAzICYmIHBvcnQgPD0gNykKKwlpZiAocG9ydCA+PSAwICYmIHBvcnQgPD0gMTEpCiAJCXJldHVybiBwb3J0OwogCXJldHVybiAtMTsKIH0KQEAgLTM1Myw3ICszODEsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGRzYV9zd2l0Y2hfZHJpdmVyIG12ODhlNjEzMV9zd2l0Y2hfZHJpdmVyID0gewotCS50YWdfcHJvdG9jb2wJCT0gX19jb25zdGFudF9odG9ucyhFVEhfUF9EU0EpLAorCS50YWdfcHJvdG9jb2wJCT0gY3B1X3RvX2JlMTYoRVRIX1BfRFNBKSwKIAkucHJpdl9zaXplCQk9IHNpemVvZihzdHJ1Y3QgbXY4OGU2eHh4X3ByaXZfc3RhdGUpLAogCS5wcm9iZQkJCT0gbXY4OGU2MTMxX3Byb2JlLAogCS5zZXR1cAkJCT0gbXY4OGU2MTMxX3NldHVwLApkaWZmIC0tZ2l0IGEvbmV0L2RzYS9zbGF2ZS5jIGIvbmV0L2RzYS9zbGF2ZS5jCmluZGV4IGE2OGZkNzkuLmVkMTMxMTggMTAwNjQ0Ci0tLSBhL25ldC9kc2Evc2xhdmUuYworKysgYi9uZXQvZHNhL3NsYXZlLmMKQEAgLTEsNiArMSw2IEBACiAvKgogICogbmV0L2RzYS9zbGF2ZS5jIC0gU2xhdmUgZGV2aWNlIGhhbmRsaW5nCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggTWFydmVsbCBTZW1pY29uZHVjdG9yCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAwOSBNYXJ2ZWxsIFNlbWljb25kdWN0b3IKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTE5LDcgKzE5LDcgQEAKIHsKIAlzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBidXMtPnByaXY7CiAKLQlpZiAoZHMtPnZhbGlkX3BvcnRfbWFzayAmICgxIDw8IGFkZHIpKQorCWlmIChkcy0+cGh5c19wb3J0X21hc2sgJiAoMSA8PCBhZGRyKSkKIAkJcmV0dXJuIGRzLT5kcnYtPnBoeV9yZWFkKGRzLCBhZGRyLCByZWcpOwogCiAJcmV0dXJuIDB4ZmZmZjsKQEAgLTI5LDcgKzI5LDcgQEAKIHsKIAlzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBidXMtPnByaXY7CiAKLQlpZiAoZHMtPnZhbGlkX3BvcnRfbWFzayAmICgxIDw8IGFkZHIpKQorCWlmIChkcy0+cGh5c19wb3J0X21hc2sgJiAoMSA8PCBhZGRyKSkKIAkJcmV0dXJuIGRzLT5kcnYtPnBoeV93cml0ZShkcywgYWRkciwgcmVnLCB2YWwpOwogCiAJcmV0dXJuIDA7CkBAIC00MywxNSArNDMsMjQgQEAKIAlkcy0+c2xhdmVfbWlpX2J1cy0+d3JpdGUgPSBkc2Ffc2xhdmVfcGh5X3dyaXRlOwogCXNucHJpbnRmKGRzLT5zbGF2ZV9taWlfYnVzLT5pZCwgTUlJX0JVU19JRF9TSVpFLCAiJXM6JS4yeCIsCiAJCQlkcy0+bWFzdGVyX21paV9idXMtPmlkLCBkcy0+cGQtPnN3X2FkZHIpOwotCWRzLT5zbGF2ZV9taWlfYnVzLT5wYXJlbnQgPSAmKGRzLT5tYXN0ZXJfbWlpX2J1cy0+ZGV2KTsKKwlkcy0+c2xhdmVfbWlpX2J1cy0+cGFyZW50ID0gJmRzLT5tYXN0ZXJfbWlpX2J1cy0+ZGV2OwogfQogCiAKIC8qIHNsYXZlIGRldmljZSBoYW5kbGluZyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBkc2Ffc2xhdmVfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkc2Ffc2xhdmVfcHJpdiAqcCA9IG5ldGRldl9wcml2KGRldik7CisKKwlkZXYtPmlmbGluayA9IHAtPnBhcmVudC0+ZHN0LT5tYXN0ZXJfbmV0ZGV2LT5pZmluZGV4OworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgZHNhX3NsYXZlX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZHNhX3NsYXZlX3ByaXYgKnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBuZXRfZGV2aWNlICptYXN0ZXIgPSBwLT5wYXJlbnQtPm1hc3Rlcl9uZXRkZXY7CisJc3RydWN0IG5ldF9kZXZpY2UgKm1hc3RlciA9IHAtPnBhcmVudC0+ZHN0LT5tYXN0ZXJfbmV0ZGV2OwogCWludCBlcnI7CiAKIAlpZiAoIShtYXN0ZXItPmZsYWdzICYgSUZGX1VQKSkKQEAgLTg5LDcgKzk4LDcgQEAKIHN0YXRpYyBpbnQgZHNhX3NsYXZlX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRzYV9zbGF2ZV9wcml2ICpwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbWFzdGVyID0gcC0+cGFyZW50LT5tYXN0ZXJfbmV0ZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlICptYXN0ZXIgPSBwLT5wYXJlbnQtPmRzdC0+bWFzdGVyX25ldGRldjsKIAogCWRldl9tY191bnN5bmMobWFzdGVyLCBkZXYpOwogCWRldl91bmljYXN0X3Vuc3luYyhtYXN0ZXIsIGRldik7CkBAIC0xMDcsNyArMTE2LDcgQEAKIHN0YXRpYyB2b2lkIGRzYV9zbGF2ZV9jaGFuZ2VfcnhfZmxhZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGNoYW5nZSkKIHsKIAlzdHJ1Y3QgZHNhX3NsYXZlX3ByaXYgKnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBuZXRfZGV2aWNlICptYXN0ZXIgPSBwLT5wYXJlbnQtPm1hc3Rlcl9uZXRkZXY7CisJc3RydWN0IG5ldF9kZXZpY2UgKm1hc3RlciA9IHAtPnBhcmVudC0+ZHN0LT5tYXN0ZXJfbmV0ZGV2OwogCiAJaWYgKGNoYW5nZSAmIElGRl9BTExNVUxUSSkKIAkJZGV2X3NldF9hbGxtdWx0aShtYXN0ZXIsIGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkgPyAxIDogLTEpOwpAQCAtMTE4LDcgKzEyNyw3IEBACiBzdGF0aWMgdm9pZCBkc2Ffc2xhdmVfc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZHNhX3NsYXZlX3ByaXYgKnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBuZXRfZGV2aWNlICptYXN0ZXIgPSBwLT5wYXJlbnQtPm1hc3Rlcl9uZXRkZXY7CisJc3RydWN0IG5ldF9kZXZpY2UgKm1hc3RlciA9IHAtPnBhcmVudC0+ZHN0LT5tYXN0ZXJfbmV0ZGV2OwogCiAJZGV2X21jX3N5bmMobWFzdGVyLCBkZXYpOwogCWRldl91bmljYXN0X3N5bmMobWFzdGVyLCBkZXYpOwpAQCAtMTI3LDcgKzEzNiw3IEBACiBzdGF0aWMgaW50IGRzYV9zbGF2ZV9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqYSkKIHsKIAlzdHJ1Y3QgZHNhX3NsYXZlX3ByaXYgKnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBuZXRfZGV2aWNlICptYXN0ZXIgPSBwLT5wYXJlbnQtPm1hc3Rlcl9uZXRkZXY7CisJc3RydWN0IG5ldF9kZXZpY2UgKm1hc3RlciA9IHAtPnBhcmVudC0+ZHN0LT5tYXN0ZXJfbmV0ZGV2OwogCXN0cnVjdCBzb2NrYWRkciAqYWRkciA9IGE7CiAJaW50IGVycjsKIApAQCAtMjg4LDYgKzI5Nyw3IEBACiAKICNpZmRlZiBDT05GSUdfTkVUX0RTQV9UQUdfRFNBCiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGRzYV9uZXRkZXZfb3BzID0geworCS5uZG9faW5pdAkJPSBkc2Ffc2xhdmVfaW5pdCwKIAkubmRvX29wZW4JIAk9IGRzYV9zbGF2ZV9vcGVuLAogCS5uZG9fc3RvcAkJPSBkc2Ffc2xhdmVfY2xvc2UsCiAJLm5kb19zdGFydF94bWl0CQk9IGRzYV94bWl0LApAQCAtMzAwLDYgKzMxMCw3IEBACiAjZW5kaWYKICNpZmRlZiBDT05GSUdfTkVUX0RTQV9UQUdfRURTQQogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBlZHNhX25ldGRldl9vcHMgPSB7CisJLm5kb19pbml0CQk9IGRzYV9zbGF2ZV9pbml0LAogCS5uZG9fb3BlbgkgCT0gZHNhX3NsYXZlX29wZW4sCiAJLm5kb19zdG9wCQk9IGRzYV9zbGF2ZV9jbG9zZSwKIAkubmRvX3N0YXJ0X3htaXQJCT0gZWRzYV94bWl0LApAQCAtMzEyLDYgKzMyMyw3IEBACiAjZW5kaWYKICNpZmRlZiBDT05GSUdfTkVUX0RTQV9UQUdfVFJBSUxFUgogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB0cmFpbGVyX25ldGRldl9vcHMgPSB7CisJLm5kb19pbml0CQk9IGRzYV9zbGF2ZV9pbml0LAogCS5uZG9fb3BlbgkgCT0gZHNhX3NsYXZlX29wZW4sCiAJLm5kb19zdG9wCQk9IGRzYV9zbGF2ZV9jbG9zZSwKIAkubmRvX3N0YXJ0X3htaXQJCT0gdHJhaWxlcl94bWl0LApAQCAtMzI4LDcgKzM0MCw3IEBACiBkc2Ffc2xhdmVfY3JlYXRlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgc3RydWN0IGRldmljZSAqcGFyZW50LAogCQkgaW50IHBvcnQsIGNoYXIgKm5hbWUpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm1hc3RlciA9IGRzLT5tYXN0ZXJfbmV0ZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlICptYXN0ZXIgPSBkcy0+ZHN0LT5tYXN0ZXJfbmV0ZGV2OwogCXN0cnVjdCBuZXRfZGV2aWNlICpzbGF2ZV9kZXY7CiAJc3RydWN0IGRzYV9zbGF2ZV9wcml2ICpwOwogCWludCByZXQ7CkBAIC0zNDMsNyArMzU1LDcgQEAKIAltZW1jcHkoc2xhdmVfZGV2LT5kZXZfYWRkciwgbWFzdGVyLT5kZXZfYWRkciwgRVRIX0FMRU4pOwogCXNsYXZlX2Rldi0+dHhfcXVldWVfbGVuID0gMDsKIAotCXN3aXRjaCAoZHMtPnRhZ19wcm90b2NvbCkgeworCXN3aXRjaCAoZHMtPmRzdC0+dGFnX3Byb3RvY29sKSB7CiAjaWZkZWYgQ09ORklHX05FVF9EU0FfVEFHX0RTQQogCWNhc2UgaHRvbnMoRVRIX1BfRFNBKToKIAkJc2xhdmVfZGV2LT5uZXRkZXZfb3BzID0gJmRzYV9uZXRkZXZfb3BzOwpkaWZmIC0tZ2l0IGEvbmV0L2RzYS90YWdfZHNhLmMgYi9uZXQvZHNhL3RhZ19kc2EuYwppbmRleCBmOTlhMDE5Li44ZmEyNWJhIDEwMDY0NAotLS0gYS9uZXQvZHNhL3RhZ19kc2EuYworKysgYi9uZXQvZHNhL3RhZ19kc2EuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBuZXQvZHNhL3RhZ19kc2EuYyAtIChOb24tZXRoZXJ0eXBlKSBEU0EgdGFnZ2luZwotICogQ29weXJpZ2h0IChjKSAyMDA4IE1hcnZlbGwgU2VtaWNvbmR1Y3RvcgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMDkgTWFydmVsbCBTZW1pY29uZHVjdG9yCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0zNiw3ICszNiw3IEBACiAJCSAqIENvbnN0cnVjdCB0YWdnZWQgRlJPTV9DUFUgRFNBIHRhZyBmcm9tIDgwMi4xcSB0YWcuCiAJCSAqLwogCQlkc2FfaGVhZGVyID0gc2tiLT5kYXRhICsgMiAqIEVUSF9BTEVOOwotCQlkc2FfaGVhZGVyWzBdID0gMHg2MDsKKwkJZHNhX2hlYWRlclswXSA9IDB4NjAgfCBwLT5wYXJlbnQtPmluZGV4OwogCQlkc2FfaGVhZGVyWzFdID0gcC0+cG9ydCA8PCAzOwogCiAJCS8qCkBAIC01Nyw3ICs1Nyw3IEBACiAJCSAqIENvbnN0cnVjdCB1bnRhZ2dlZCBGUk9NX0NQVSBEU0EgdGFnLgogCQkgKi8KIAkJZHNhX2hlYWRlciA9IHNrYi0+ZGF0YSArIDIgKiBFVEhfQUxFTjsKLQkJZHNhX2hlYWRlclswXSA9IDB4NDA7CisJCWRzYV9oZWFkZXJbMF0gPSAweDQwIHwgcC0+cGFyZW50LT5pbmRleDsKIAkJZHNhX2hlYWRlclsxXSA9IHAtPnBvcnQgPDwgMzsKIAkJZHNhX2hlYWRlclsyXSA9IDB4MDA7CiAJCWRzYV9oZWFkZXJbM10gPSAweDAwOwpAQCAtNjUsNyArNjUsNyBAQAogCiAJc2tiLT5wcm90b2NvbCA9IGh0b25zKEVUSF9QX0RTQSk7CiAKLQlza2ItPmRldiA9IHAtPnBhcmVudC0+bWFzdGVyX25ldGRldjsKKwlza2ItPmRldiA9IHAtPnBhcmVudC0+ZHN0LT5tYXN0ZXJfbmV0ZGV2OwogCWRldl9xdWV1ZV94bWl0KHNrYik7CiAKIAlyZXR1cm4gTkVUREVWX1RYX09LOwpAQCAtNzgsMTEgKzc4LDEzIEBACiBzdGF0aWMgaW50IGRzYV9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJICAgc3RydWN0IHBhY2tldF90eXBlICpwdCwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KQogewotCXN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGRldi0+ZHNhX3B0cjsKKwlzdHJ1Y3QgZHNhX3N3aXRjaF90cmVlICpkc3QgPSBkZXYtPmRzYV9wdHI7CisJc3RydWN0IGRzYV9zd2l0Y2ggKmRzOwogCXU4ICpkc2FfaGVhZGVyOworCWludCBzb3VyY2VfZGV2aWNlOwogCWludCBzb3VyY2VfcG9ydDsKIAotCWlmICh1bmxpa2VseShkcyA9PSBOVUxMKSkKKwlpZiAodW5saWtlbHkoZHN0ID09IE5VTEwpKQogCQlnb3RvIG91dF9kcm9wOwogCiAJc2tiID0gc2tiX3Vuc2hhcmUoc2tiLCBHRlBfQVRPTUlDKTsKQEAgLTk4LDE2ICsxMDAsMjQgQEAKIAlkc2FfaGVhZGVyID0gc2tiLT5kYXRhIC0gMjsKIAogCS8qCi0JICogQ2hlY2sgdGhhdCBmcmFtZSB0eXBlIGlzIGVpdGhlciBUT19DUFUgb3IgRk9SV0FSRCwgYW5kCi0JICogdGhhdCB0aGUgc291cmNlIGRldmljZSBpcyB6ZXJvLgorCSAqIENoZWNrIHRoYXQgZnJhbWUgdHlwZSBpcyBlaXRoZXIgVE9fQ1BVIG9yIEZPUldBUkQuCiAJICovCi0JaWYgKChkc2FfaGVhZGVyWzBdICYgMHhkZikgIT0gMHgwMCAmJiAoZHNhX2hlYWRlclswXSAmIDB4ZGYpICE9IDB4YzApCisJaWYgKChkc2FfaGVhZGVyWzBdICYgMHhjMCkgIT0gMHgwMCAmJiAoZHNhX2hlYWRlclswXSAmIDB4YzApICE9IDB4YzApCiAJCWdvdG8gb3V0X2Ryb3A7CiAKIAkvKgotCSAqIENoZWNrIHRoYXQgdGhlIHNvdXJjZSBwb3J0IGlzIGEgcmVnaXN0ZXJlZCBEU0EgcG9ydC4KKwkgKiBEZXRlcm1pbmUgc291cmNlIGRldmljZSBhbmQgcG9ydC4KIAkgKi8KKwlzb3VyY2VfZGV2aWNlID0gZHNhX2hlYWRlclswXSAmIDB4MWY7CiAJc291cmNlX3BvcnQgPSAoZHNhX2hlYWRlclsxXSA+PiAzKSAmIDB4MWY7CisKKwkvKgorCSAqIENoZWNrIHRoYXQgdGhlIHNvdXJjZSBkZXZpY2UgZXhpc3RzIGFuZCB0aGF0IHRoZSBzb3VyY2UKKwkgKiBwb3J0IGlzIGEgcmVnaXN0ZXJlZCBEU0EgcG9ydC4KKwkgKi8KKwlpZiAoc291cmNlX2RldmljZSA+PSBkc3QtPnBkLT5ucl9jaGlwcykKKwkJZ290byBvdXRfZHJvcDsKKwlkcyA9IGRzdC0+ZHNbc291cmNlX2RldmljZV07CiAJaWYgKHNvdXJjZV9wb3J0ID49IERTQV9NQVhfUE9SVFMgfHwgZHMtPnBvcnRzW3NvdXJjZV9wb3J0XSA9PSBOVUxMKQogCQlnb3RvIG91dF9kcm9wOwogCkBAIC0xNzUsOCArMTg1LDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBkc2FfcGFja2V0X3R5cGUgPSB7Ci0JLnR5cGUJPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0RTQSksCitzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGRzYV9wYWNrZXRfdHlwZSBfX3JlYWRfbW9zdGx5ID0geworCS50eXBlCT0gY3B1X3RvX2JlMTYoRVRIX1BfRFNBKSwKIAkuZnVuYwk9IGRzYV9yY3YsCiB9OwogCmRpZmYgLS1naXQgYS9uZXQvZHNhL3RhZ19lZHNhLmMgYi9uZXQvZHNhL3RhZ19lZHNhLmMKaW5kZXggMzI4ZWM5NS4uODE1NjA3YiAxMDA2NDQKLS0tIGEvbmV0L2RzYS90YWdfZWRzYS5jCisrKyBiL25ldC9kc2EvdGFnX2Vkc2EuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBuZXQvZHNhL3RhZ19lZHNhLmMgLSBFdGhlcnR5cGUgRFNBIHRhZ2dpbmcKLSAqIENvcHlyaWdodCAoYykgMjAwOCBNYXJ2ZWxsIFNlbWljb25kdWN0b3IKKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IE1hcnZlbGwgU2VtaWNvbmR1Y3RvcgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtNDUsNyArNDUsNyBAQAogCQllZHNhX2hlYWRlclsxXSA9IEVUSF9QX0VEU0EgJiAweGZmOwogCQllZHNhX2hlYWRlclsyXSA9IDB4MDA7CiAJCWVkc2FfaGVhZGVyWzNdID0gMHgwMDsKLQkJZWRzYV9oZWFkZXJbNF0gPSAweDYwOworCQllZHNhX2hlYWRlcls0XSA9IDB4NjAgfCBwLT5wYXJlbnQtPmluZGV4OwogCQllZHNhX2hlYWRlcls1XSA9IHAtPnBvcnQgPDwgMzsKIAogCQkvKgpAQCAtNzAsNyArNzAsNyBAQAogCQllZHNhX2hlYWRlclsxXSA9IEVUSF9QX0VEU0EgJiAweGZmOwogCQllZHNhX2hlYWRlclsyXSA9IDB4MDA7CiAJCWVkc2FfaGVhZGVyWzNdID0gMHgwMDsKLQkJZWRzYV9oZWFkZXJbNF0gPSAweDQwOworCQllZHNhX2hlYWRlcls0XSA9IDB4NDAgfCBwLT5wYXJlbnQtPmluZGV4OwogCQllZHNhX2hlYWRlcls1XSA9IHAtPnBvcnQgPDwgMzsKIAkJZWRzYV9oZWFkZXJbNl0gPSAweDAwOwogCQllZHNhX2hlYWRlcls3XSA9IDB4MDA7CkBAIC03OCw3ICs3OCw3IEBACiAKIAlza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfRURTQSk7CiAKLQlza2ItPmRldiA9IHAtPnBhcmVudC0+bWFzdGVyX25ldGRldjsKKwlza2ItPmRldiA9IHAtPnBhcmVudC0+ZHN0LT5tYXN0ZXJfbmV0ZGV2OwogCWRldl9xdWV1ZV94bWl0KHNrYik7CiAKIAlyZXR1cm4gTkVUREVWX1RYX09LOwpAQCAtOTEsMTEgKzkxLDEzIEBACiBzdGF0aWMgaW50IGVkc2FfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCSAgICBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpCiB7Ci0Jc3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gZGV2LT5kc2FfcHRyOworCXN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdCA9IGRldi0+ZHNhX3B0cjsKKwlzdHJ1Y3QgZHNhX3N3aXRjaCAqZHM7CiAJdTggKmVkc2FfaGVhZGVyOworCWludCBzb3VyY2VfZGV2aWNlOwogCWludCBzb3VyY2VfcG9ydDsKIAotCWlmICh1bmxpa2VseShkcyA9PSBOVUxMKSkKKwlpZiAodW5saWtlbHkoZHN0ID09IE5VTEwpKQogCQlnb3RvIG91dF9kcm9wOwogCiAJc2tiID0gc2tiX3Vuc2hhcmUoc2tiLCBHRlBfQVRPTUlDKTsKQEAgLTExMSwxNiArMTEzLDI0IEBACiAJZWRzYV9oZWFkZXIgPSBza2ItPmRhdGEgKyAyOwogCiAJLyoKLQkgKiBDaGVjayB0aGF0IGZyYW1lIHR5cGUgaXMgZWl0aGVyIFRPX0NQVSBvciBGT1JXQVJELCBhbmQKLQkgKiB0aGF0IHRoZSBzb3VyY2UgZGV2aWNlIGlzIHplcm8uCisJICogQ2hlY2sgdGhhdCBmcmFtZSB0eXBlIGlzIGVpdGhlciBUT19DUFUgb3IgRk9SV0FSRC4KIAkgKi8KLQlpZiAoKGVkc2FfaGVhZGVyWzBdICYgMHhkZikgIT0gMHgwMCAmJiAoZWRzYV9oZWFkZXJbMF0gJiAweGRmKSAhPSAweGMwKQorCWlmICgoZWRzYV9oZWFkZXJbMF0gJiAweGMwKSAhPSAweDAwICYmIChlZHNhX2hlYWRlclswXSAmIDB4YzApICE9IDB4YzApCiAJCWdvdG8gb3V0X2Ryb3A7CiAKIAkvKgotCSAqIENoZWNrIHRoYXQgdGhlIHNvdXJjZSBwb3J0IGlzIGEgcmVnaXN0ZXJlZCBEU0EgcG9ydC4KKwkgKiBEZXRlcm1pbmUgc291cmNlIGRldmljZSBhbmQgcG9ydC4KIAkgKi8KKwlzb3VyY2VfZGV2aWNlID0gZWRzYV9oZWFkZXJbMF0gJiAweDFmOwogCXNvdXJjZV9wb3J0ID0gKGVkc2FfaGVhZGVyWzFdID4+IDMpICYgMHgxZjsKKworCS8qCisJICogQ2hlY2sgdGhhdCB0aGUgc291cmNlIGRldmljZSBleGlzdHMgYW5kIHRoYXQgdGhlIHNvdXJjZQorCSAqIHBvcnQgaXMgYSByZWdpc3RlcmVkIERTQSBwb3J0LgorCSAqLworCWlmIChzb3VyY2VfZGV2aWNlID49IGRzdC0+cGQtPm5yX2NoaXBzKQorCQlnb3RvIG91dF9kcm9wOworCWRzID0gZHN0LT5kc1tzb3VyY2VfZGV2aWNlXTsKIAlpZiAoc291cmNlX3BvcnQgPj0gRFNBX01BWF9QT1JUUyB8fCBkcy0+cG9ydHNbc291cmNlX3BvcnRdID09IE5VTEwpCiAJCWdvdG8gb3V0X2Ryb3A7CiAKQEAgLTE5NCw4ICsyMDQsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGVkc2FfcGFja2V0X3R5cGUgPSB7Ci0JLnR5cGUJPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0VEU0EpLAorc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBlZHNhX3BhY2tldF90eXBlIF9fcmVhZF9tb3N0bHkgPSB7CisJLnR5cGUJPSBjcHVfdG9fYmUxNihFVEhfUF9FRFNBKSwKIAkuZnVuYwk9IGVkc2FfcmN2LAogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L2RzYS90YWdfdHJhaWxlci5jIGIvbmV0L2RzYS90YWdfdHJhaWxlci5jCmluZGV4IGI1OTEzMjguLjFjM2UzMGMgMTAwNjQ0Ci0tLSBhL25ldC9kc2EvdGFnX3RyYWlsZXIuYworKysgYi9uZXQvZHNhL3RhZ190cmFpbGVyLmMKQEAgLTEsNiArMSw2IEBACiAvKgogICogbmV0L2RzYS90YWdfdHJhaWxlci5jIC0gVHJhaWxlciB0YWcgZm9ybWF0IGhhbmRsaW5nCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggTWFydmVsbCBTZW1pY29uZHVjdG9yCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAwOSBNYXJ2ZWxsIFNlbWljb25kdWN0b3IKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTU5LDcgKzU5LDcgQEAKIAogCW5za2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfVFJBSUxFUik7CiAKLQluc2tiLT5kZXYgPSBwLT5wYXJlbnQtPm1hc3Rlcl9uZXRkZXY7CisJbnNrYi0+ZGV2ID0gcC0+cGFyZW50LT5kc3QtPm1hc3Rlcl9uZXRkZXY7CiAJZGV2X3F1ZXVlX3htaXQobnNrYik7CiAKIAlyZXR1cm4gTkVUREVWX1RYX09LOwpAQCAtNjgsMTIgKzY4LDE0IEBACiBzdGF0aWMgaW50IHRyYWlsZXJfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCSAgICAgICBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpCiB7Ci0Jc3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gZGV2LT5kc2FfcHRyOworCXN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdCA9IGRldi0+ZHNhX3B0cjsKKwlzdHJ1Y3QgZHNhX3N3aXRjaCAqZHM7CiAJdTggKnRyYWlsZXI7CiAJaW50IHNvdXJjZV9wb3J0OwogCi0JaWYgKHVubGlrZWx5KGRzID09IE5VTEwpKQorCWlmICh1bmxpa2VseShkc3QgPT0gTlVMTCkpCiAJCWdvdG8gb3V0X2Ryb3A7CisJZHMgPSBkc3QtPmRzWzBdOwogCiAJc2tiID0gc2tiX3Vuc2hhcmUoc2tiLCBHRlBfQVRPTUlDKTsKIAlpZiAoc2tiID09IE5VTEwpCkBAIC0xMTEsOCArMTEzLDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSB0cmFpbGVyX3BhY2tldF90eXBlID0gewotCS50eXBlCT0gX19jb25zdGFudF9odG9ucyhFVEhfUF9UUkFJTEVSKSwKK3N0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgdHJhaWxlcl9wYWNrZXRfdHlwZSBfX3JlYWRfbW9zdGx5ID0geworCS50eXBlCT0gY3B1X3RvX2JlMTYoRVRIX1BfVFJBSUxFUiksCiAJLmZ1bmMJPSB0cmFpbGVyX3JjdiwKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9lY29uZXQvYWZfZWNvbmV0LmMgYi9uZXQvZWNvbmV0L2FmX2Vjb25ldC5jCmluZGV4IDg3ODlkMmIuLjZmNDc5ZmEgMTAwNjQ0Ci0tLSBhL25ldC9lY29uZXQvYWZfZWNvbmV0LmMKKysrIGIvbmV0L2Vjb25ldC9hZl9lY29uZXQuYwpAQCAtMTEwMiw4ICsxMTAyLDggQEAKIAlyZXR1cm4gTkVUX1JYX0RST1A7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgZWNvbmV0X3BhY2tldF90eXBlID0gewotCS50eXBlID0JCV9fY29uc3RhbnRfaHRvbnMoRVRIX1BfRUNPTkVUKSwKK3N0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgZWNvbmV0X3BhY2tldF90eXBlIF9fcmVhZF9tb3N0bHkgPSB7CisJLnR5cGUgPQkJY3B1X3RvX2JlMTYoRVRIX1BfRUNPTkVUKSwKIAkuZnVuYyA9CQllY29uZXRfcmN2LAogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvS2NvbmZpZyBiL25ldC9pcHY0L0tjb25maWcKaW5kZXggNjkxMjY4Zi4uYjJjZjkxZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvS2NvbmZpZworKysgYi9uZXQvaXB2NC9LY29uZmlnCkBAIC0zNSw3ICszNSw3IEBACiAKIAkgIGF0IGJvb3QgdGltZSBhZnRlciB0aGUgL3Byb2MgZmlsZSBzeXN0ZW0gaGFzIGJlZW4gbW91bnRlZC4KIAotCSAgSWYgeW91IHR1cm4gb24gSVAgZm9yd2FyZGluZywgeW91IHdpbGwgYWxzbyBnZXQgdGhlIHJwX2ZpbHRlciwgd2hpY2gKKwkgIElmIHlvdSB0dXJuIG9uIElQIGZvcndhcmRpbmcsIHlvdSBzaG91bGQgY29uc2lkZXIgdGhlIHJwX2ZpbHRlciwgd2hpY2gKIAkgIGF1dG9tYXRpY2FsbHkgcmVqZWN0cyBpbmNvbWluZyBwYWNrZXRzIGlmIHRoZSByb3V0aW5nIHRhYmxlIGVudHJ5CiAJICBmb3IgdGhlaXIgc291cmNlIGFkZHJlc3MgZG9lc24ndCBtYXRjaCB0aGUgbmV0d29yayBpbnRlcmZhY2UgdGhleSdyZQogCSAgYXJyaXZpbmcgb24uIFRoaXMgaGFzIHNlY3VyaXR5IGFkdmFudGFnZXMgYmVjYXVzZSBpdCBwcmV2ZW50cyB0aGUKQEAgLTQ2LDEyICs0NiwxNiBAQAogCSAgcnBfZmlsdGVyIG9uIHVzZToKIAogCSAgZWNobyAxID4gL3Byb2Mvc3lzL25ldC9pcHY0L2NvbmYvPGRldmljZT4vcnBfZmlsdGVyCi0JICBvcgorCSAgIGFuZAogCSAgZWNobyAxID4gL3Byb2Mvc3lzL25ldC9pcHY0L2NvbmYvYWxsL3JwX2ZpbHRlcgogCisJICBOb3RlIHRoYXQgc29tZSBkaXN0cmlidXRpb25zIGVuYWJsZSBpdCBpbiBzdGFydHVwIHNjcmlwdHMuCisJICBGb3IgZGV0YWlscyBhYm91dCBycF9maWx0ZXIgc3RyaWN0IGFuZCBsb29zZSBtb2RlIHJlYWQKKwkgIDxmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwudHh0Pi4KKwogCSAgSWYgdW5zdXJlLCBzYXkgTiBoZXJlLgogCi1jaG9pY2UgCitjaG9pY2UKIAlwcm9tcHQgIkNob29zZSBJUDogRklCIGxvb2t1cCBhbGdvcml0aG0gKGNob29zZSBGSUJfSEFTSCBpZiB1bnN1cmUpIgogCWRlcGVuZHMgb24gSVBfQURWQU5DRURfUk9VVEVSCiAJZGVmYXVsdCBBU0tfSVBfRklCX0hBU0gKQEAgLTU5LDI3ICs2MywyOSBAQAogY29uZmlnIEFTS19JUF9GSUJfSEFTSAogCWJvb2wgIkZJQl9IQVNIIgogCS0tLWhlbHAtLS0KLQlDdXJyZW50IEZJQiBpcyB2ZXJ5IHByb3ZlbiBhbmQgZ29vZCBlbm91Z2ggZm9yIG1vc3QgdXNlcnMuCisJICBDdXJyZW50IEZJQiBpcyB2ZXJ5IHByb3ZlbiBhbmQgZ29vZCBlbm91Z2ggZm9yIG1vc3QgdXNlcnMuCiAKIGNvbmZpZyBJUF9GSUJfVFJJRQogCWJvb2wgIkZJQl9UUklFIgogCS0tLWhlbHAtLS0KLQlVc2UgbmV3IGV4cGVyaW1lbnRhbCBMQy10cmllIGFzIEZJQiBsb29rdXAgYWxnb3JpdGhtLiAKLSAgICAgICAgVGhpcyBpbXByb3ZlcyBsb29rdXAgcGVyZm9ybWFuY2UgaWYgeW91IGhhdmUgYSBsYXJnZQotCW51bWJlciBvZiByb3V0ZXMuCisJICBVc2UgbmV3IGV4cGVyaW1lbnRhbCBMQy10cmllIGFzIEZJQiBsb29rdXAgYWxnb3JpdGhtLgorCSAgVGhpcyBpbXByb3ZlcyBsb29rdXAgcGVyZm9ybWFuY2UgaWYgeW91IGhhdmUgYSBsYXJnZQorCSAgbnVtYmVyIG9mIHJvdXRlcy4KIAotCUxDLXRyaWUgaXMgYSBsb25nZXN0IG1hdGNoaW5nIHByZWZpeCBsb29rdXAgYWxnb3JpdGhtIHdoaWNoCi0JcGVyZm9ybXMgYmV0dGVyIHRoYW4gRklCX0hBU0ggZm9yIGxhcmdlIHJvdXRpbmcgdGFibGVzLgotCUJ1dCwgaXQgY29uc3VtZXMgbW9yZSBtZW1vcnkgYW5kIGlzIG1vcmUgY29tcGxleC4KLQkKLQlMQy10cmllIGlzIGRlc2NyaWJlZCBpbjoKLQkKLSAJSVAtYWRkcmVzcyBsb29rdXAgdXNpbmcgTEMtdHJpZXMuIFN0ZWZhbiBOaWxzc29uIGFuZCBHdW5uYXIgS2FybHNzb24KLSAJSUVFRSBKb3VybmFsIG9uIFNlbGVjdGVkIEFyZWFzIGluIENvbW11bmljYXRpb25zLCAxNyg2KToxMDgzLTEwOTIsIEp1bmUgMTk5OQotCUFuIGV4cGVyaW1lbnRhbCBzdHVkeSBvZiBjb21wcmVzc2lvbiBtZXRob2RzIGZvciBkeW5hbWljIHRyaWVzCi0gCVN0ZWZhbiBOaWxzc29uIGFuZCBNYXR0aSBUaWtrYW5lbi4gQWxnb3JpdGhtaWNhLCAzMygxKToxOS0zMywgMjAwMi4KLSAJaHR0cDovL3d3dy5uYWRhLmt0aC5zZS9+c25pbHNzb24vcHVibGljL3BhcGVycy9keW50cmllMi8KLSAgICAgICAKKwkgIExDLXRyaWUgaXMgYSBsb25nZXN0IG1hdGNoaW5nIHByZWZpeCBsb29rdXAgYWxnb3JpdGhtIHdoaWNoCisJICBwZXJmb3JtcyBiZXR0ZXIgdGhhbiBGSUJfSEFTSCBmb3IgbGFyZ2Ugcm91dGluZyB0YWJsZXMuCisJICBCdXQsIGl0IGNvbnN1bWVzIG1vcmUgbWVtb3J5IGFuZCBpcyBtb3JlIGNvbXBsZXguCisKKwkgIExDLXRyaWUgaXMgZGVzY3JpYmVkIGluOgorCisJICBJUC1hZGRyZXNzIGxvb2t1cCB1c2luZyBMQy10cmllcy4gU3RlZmFuIE5pbHNzb24gYW5kIEd1bm5hciBLYXJsc3NvbgorCSAgSUVFRSBKb3VybmFsIG9uIFNlbGVjdGVkIEFyZWFzIGluIENvbW11bmljYXRpb25zLCAxNyg2KToxMDgzLTEwOTIsCisJICBKdW5lIDE5OTkKKworCSAgQW4gZXhwZXJpbWVudGFsIHN0dWR5IG9mIGNvbXByZXNzaW9uIG1ldGhvZHMgZm9yIGR5bmFtaWMgdHJpZXMKKwkgIFN0ZWZhbiBOaWxzc29uIGFuZCBNYXR0aSBUaWtrYW5lbi4gQWxnb3JpdGhtaWNhLCAzMygxKToxOS0zMywgMjAwMi4KKwkgIGh0dHA6Ly93d3cubmFkYS5rdGguc2UvfnNuaWxzc29uL3B1YmxpYy9wYXBlcnMvZHludHJpZTIvCisKIGVuZGNob2ljZQogCiBjb25maWcgSVBfRklCX0hBU0gKQEAgLTE5MSw3ICsxOTcsNyBAQAogCSAgPGZpbGU6RG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnNyb290LnR4dD4gZm9yIGRldGFpbHMuCiAKICMgbm90IHlldCByZWFkeS4uCi0jICAgYm9vbCAnICAgIElQOiBBUlAgc3VwcG9ydCcgQ09ORklHX0lQX1BOUF9BUlAJCQorIyAgIGJvb2wgJyAgICBJUDogQVJQIHN1cHBvcnQnIENPTkZJR19JUF9QTlBfQVJQCiBjb25maWcgTkVUX0lQSVAKIAl0cmlzdGF0ZSAiSVA6IHR1bm5lbGluZyIKIAlzZWxlY3QgSU5FVF9UVU5ORUwKQEAgLTM2MSw3ICszNjcsNyBAQAogCS0tLWhlbHAtLS0KIAkgIFN1cHBvcnQgZm9yIElQIFBheWxvYWQgQ29tcHJlc3Npb24gUHJvdG9jb2wgKElQQ29tcCkgKFJGQzMxNzMpLAogCSAgdHlwaWNhbGx5IG5lZWRlZCBmb3IgSVBzZWMuCi0JICAKKwogCSAgSWYgdW5zdXJlLCBzYXkgWS4KIAogY29uZmlnIElORVRfWEZSTV9UVU5ORUwKQEAgLTQxNSw3ICs0MjEsNyBAQAogCSAgU3VwcG9ydCBmb3IgSU5FVCAoVENQLCBEQ0NQLCBldGMpIHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZSB1c2VkIGJ5CiAJICBuYXRpdmUgTGludXggdG9vbHMgc3VjaCBhcyBzcy4gc3MgaXMgaW5jbHVkZWQgaW4gaXByb3V0ZTIsIGN1cnJlbnRseQogCSAgZG93bmxvYWRhYmxlIGF0IDxodHRwOi8vbGludXgtbmV0Lm9zZGwub3JnL2luZGV4LnBocC9JcHJvdXRlMj4uCi0JICAKKwogCSAgSWYgdW5zdXJlLCBzYXkgWS4KIAogY29uZmlnIElORVRfVENQX0RJQUcKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2FmX2luZXQuYyBiL25ldC9pcHY0L2FmX2luZXQuYwppbmRleCA3NDNmNTU0Li5kNWFhYWJiIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9hZl9pbmV0LmMKKysrIGIvbmV0L2lwdjQvYWZfaW5ldC5jCkBAIC0zNjksNyArMzY5LDYgQEAKIAlzb2NrX2luaXRfZGF0YShzb2NrLCBzayk7CiAKIAlzay0+c2tfZGVzdHJ1Y3QJICAgPSBpbmV0X3NvY2tfZGVzdHJ1Y3Q7Ci0Jc2stPnNrX2ZhbWlseQkgICA9IFBGX0lORVQ7CiAJc2stPnNrX3Byb3RvY29sCSAgID0gcHJvdG9jb2w7CiAJc2stPnNrX2JhY2tsb2dfcmN2ID0gc2stPnNrX3Byb3QtPmJhY2tsb2dfcmN2OwogCkBAIC0xMjUzLDEwICsxMjUyLDEwIEBACiAJaW50IHByb3RvOwogCWludCBpZDsKIAotCWlmICh1bmxpa2VseSghcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZigqaXBoKSkpKQorCWlwaCA9IHNrYl9ncm9faGVhZGVyKHNrYiwgc2l6ZW9mKCppcGgpKTsKKwlpZiAodW5saWtlbHkoIWlwaCkpCiAJCWdvdG8gb3V0OwogCi0JaXBoID0gaXBfaGRyKHNrYik7CiAJcHJvdG8gPSBpcGgtPnByb3RvY29sICYgKE1BWF9JTkVUX1BST1RPUyAtIDEpOwogCiAJcmN1X3JlYWRfbG9jaygpOwpAQCAtMTI2NCwxMyArMTI2MywxMyBAQAogCWlmICghb3BzIHx8ICFvcHMtPmdyb19yZWNlaXZlKQogCQlnb3RvIG91dF91bmxvY2s7CiAKLQlpZiAoaXBoLT52ZXJzaW9uICE9IDQgfHwgaXBoLT5paGwgIT0gNSkKKwlpZiAoKih1OCAqKWlwaCAhPSAweDQ1KQogCQlnb3RvIG91dF91bmxvY2s7CiAKIAlpZiAodW5saWtlbHkoaXBfZmFzdF9jc3VtKCh1OCAqKWlwaCwgaXBoLT5paGwpKSkKIAkJZ290byBvdXRfdW5sb2NrOwogCi0JZmx1c2ggPSBudG9ocyhpcGgtPnRvdF9sZW4pICE9IHNrYi0+bGVuIHx8CisJZmx1c2ggPSBudG9ocyhpcGgtPnRvdF9sZW4pICE9IHNrYl9ncm9fbGVuKHNrYikgfHwKIAkJaXBoLT5mcmFnX29mZiAhPSBodG9ucyhJUF9ERik7CiAJaWQgPSBudG9ocyhpcGgtPmlkKTsKIApAQCAtMTI4MiwyNCArMTI4MSwyNSBAQAogCiAJCWlwaDIgPSBpcF9oZHIocCk7CiAKLQkJaWYgKGlwaC0+cHJvdG9jb2wgIT0gaXBoMi0+cHJvdG9jb2wgfHwKLQkJICAgIGlwaC0+dG9zICE9IGlwaDItPnRvcyB8fAotCQkgICAgbWVtY21wKCZpcGgtPnNhZGRyLCAmaXBoMi0+c2FkZHIsIDgpKSB7CisJCWlmICgoaXBoLT5wcm90b2NvbCBeIGlwaDItPnByb3RvY29sKSB8CisJCSAgICAoaXBoLT50b3MgXiBpcGgyLT50b3MpIHwKKwkJICAgIChpcGgtPnNhZGRyIF4gaXBoMi0+c2FkZHIpIHwKKwkJICAgIChpcGgtPmRhZGRyIF4gaXBoMi0+ZGFkZHIpKSB7CiAJCQlOQVBJX0dST19DQihwKS0+c2FtZV9mbG93ID0gMDsKIAkJCWNvbnRpbnVlOwogCQl9CiAKIAkJLyogQWxsIGZpZWxkcyBtdXN0IG1hdGNoIGV4Y2VwdCBsZW5ndGggYW5kIGNoZWNrc3VtLiAqLwogCQlOQVBJX0dST19DQihwKS0+Zmx1c2ggfD0KLQkJCW1lbWNtcCgmaXBoLT5mcmFnX29mZiwgJmlwaDItPmZyYWdfb2ZmLCA0KSB8fAotCQkJKHUxNikobnRvaHMoaXBoMi0+aWQpICsgTkFQSV9HUk9fQ0IocCktPmNvdW50KSAhPSBpZDsKKwkJCShpcGgtPnR0bCBeIGlwaDItPnR0bCkgfAorCQkJKCh1MTYpKG50b2hzKGlwaDItPmlkKSArIE5BUElfR1JPX0NCKHApLT5jb3VudCkgXiBpZCk7CiAKIAkJTkFQSV9HUk9fQ0IocCktPmZsdXNoIHw9IGZsdXNoOwogCX0KIAogCU5BUElfR1JPX0NCKHNrYiktPmZsdXNoIHw9IGZsdXNoOwotCV9fc2tiX3B1bGwoc2tiLCBzaXplb2YoKmlwaCkpOwotCXNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7CisJc2tiX2dyb19wdWxsKHNrYiwgc2l6ZW9mKCppcGgpKTsKKwlza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiLCBza2JfZ3JvX29mZnNldChza2IpKTsKIAogCXBwID0gb3BzLT5ncm9fcmVjZWl2ZShoZWFkLCBza2IpOwogCkBAIC0xNTAwLDggKzE1MDAsOCBAQAogICoJSVAgcHJvdG9jb2wgbGF5ZXIgaW5pdGlhbGlzZXIKICAqLwogCi1zdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGlwX3BhY2tldF90eXBlID0gewotCS50eXBlID0gX19jb25zdGFudF9odG9ucyhFVEhfUF9JUCksCitzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGlwX3BhY2tldF90eXBlIF9fcmVhZF9tb3N0bHkgPSB7CisJLnR5cGUgPSBjcHVfdG9fYmUxNihFVEhfUF9JUCksCiAJLmZ1bmMgPSBpcF9yY3YsCiAJLmdzb19zZW5kX2NoZWNrID0gaW5ldF9nc29fc2VuZF9jaGVjaywKIAkuZ3NvX3NlZ21lbnQgPSBpbmV0X2dzb19zZWdtZW50LApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvYXJwLmMgYi9uZXQvaXB2NC9hcnAuYwppbmRleCAyOWE3NGMwLi5mMTE5MzFjIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9hcnAuYworKysgYi9uZXQvaXB2NC9hcnAuYwpAQCAtODAxLDggKzgwMSwxMSBAQAogICogIGNhY2hlLgogICovCiAKLQkvKiBTcGVjaWFsIGNhc2U6IElQdjQgZHVwbGljYXRlIGFkZHJlc3MgZGV0ZWN0aW9uIHBhY2tldCAoUkZDMjEzMSkgKi8KLQlpZiAoc2lwID09IDApIHsKKwkvKgorCSAqICBTcGVjaWFsIGNhc2U6IElQdjQgZHVwbGljYXRlIGFkZHJlc3MgZGV0ZWN0aW9uIHBhY2tldCAoUkZDMjEzMSkKKwkgKiAgYW5kIEdyYXR1aXRvdXMgQVJQL0FSUCBBbm5vdW5jZS4gKFJGQzM5MjcsIFNlY3Rpb24gMi40KQorCSAqLworCWlmIChzaXAgPT0gMCB8fCB0aXAgPT0gc2lwKSB7CiAJCWlmIChhcnAtPmFyX29wID09IGh0b25zKEFSUE9QX1JFUVVFU1QpICYmCiAJCSAgICBpbmV0X2FkZHJfdHlwZShuZXQsIHRpcCkgPT0gUlROX0xPQ0FMICYmCiAJCSAgICAhYXJwX2lnbm9yZShpbl9kZXYsIHNpcCwgdGlwKSkKQEAgLTg5Miw3ICs4OTUsNyBAQAogb3V0OgogCWlmIChpbl9kZXYpCiAJCWluX2Rldl9wdXQoaW5fZGV2KTsKLQlrZnJlZV9za2Ioc2tiKTsKKwljb25zdW1lX3NrYihza2IpOwogCXJldHVybiAwOwogfQogCkBAIC0xMjI1LDggKzEyMjgsOCBAQAogICoJQ2FsbGVkIG9uY2Ugb24gc3RhcnR1cC4KICAqLwogCi1zdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGFycF9wYWNrZXRfdHlwZSA9IHsKLQkudHlwZSA9CV9fY29uc3RhbnRfaHRvbnMoRVRIX1BfQVJQKSwKK3N0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgYXJwX3BhY2tldF90eXBlIF9fcmVhZF9tb3N0bHkgPSB7CisJLnR5cGUgPQljcHVfdG9fYmUxNihFVEhfUF9BUlApLAogCS5mdW5jID0JYXJwX3JjdiwKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2RldmluZXQuYyBiL25ldC9pcHY0L2RldmluZXQuYwppbmRleCAzMDk5OTdlLi4xMjZiYjkxIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9kZXZpbmV0LmMKKysrIGIvbmV0L2lwdjQvZGV2aW5ldC5jCkBAIC0xMDc1LDYgKzEwNzUsMTQgQEAKIAkJCX0KIAkJfQogCQlpcF9tY191cChpbl9kZXYpOworCQkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIE5FVERFVl9DSEFOR0VBRERSOgorCQlpZiAoSU5fREVWX0FSUF9OT1RJRlkoaW5fZGV2KSkKKwkJCWFycF9zZW5kKEFSUE9QX1JFUVVFU1QsIEVUSF9QX0FSUCwKKwkJCQkgaW5fZGV2LT5pZmFfbGlzdC0+aWZhX2FkZHJlc3MsCisJCQkJIGRldiwKKwkJCQkgaW5fZGV2LT5pZmFfbGlzdC0+aWZhX2FkZHJlc3MsCisJCQkJIE5VTEwsIGRldi0+ZGV2X2FkZHIsIE5VTEwpOwogCQlicmVhazsKIAljYXNlIE5FVERFVl9ET1dOOgogCQlpcF9tY19kb3duKGluX2Rldik7CkBAIC0xMjA4LDcgKzEyMTYsOCBAQAogCQlrZnJlZV9za2Ioc2tiKTsKIAkJZ290byBlcnJvdXQ7CiAJfQotCWVyciA9IHJ0bmxfbm90aWZ5KHNrYiwgbmV0LCBwaWQsIFJUTkxHUlBfSVBWNF9JRkFERFIsIG5saCwgR0ZQX0tFUk5FTCk7CisJcnRubF9ub3RpZnkoc2tiLCBuZXQsIHBpZCwgUlROTEdSUF9JUFY0X0lGQUREUiwgbmxoLCBHRlBfS0VSTkVMKTsKKwlyZXR1cm47CiBlcnJvdXQ6CiAJaWYgKGVyciA8IDApCiAJCXJ0bmxfc2V0X3NrX2VycihuZXQsIFJUTkxHUlBfSVBWNF9JRkFERFIsIGVycik7CkBAIC0xNDM5LDYgKzE0NDgsNyBAQAogCQlERVZJTkVUX1NZU0NUTF9SV19FTlRSWShBUlBfQU5OT1VOQ0UsICJhcnBfYW5ub3VuY2UiKSwKIAkJREVWSU5FVF9TWVNDVExfUldfRU5UUlkoQVJQX0lHTk9SRSwgImFycF9pZ25vcmUiKSwKIAkJREVWSU5FVF9TWVNDVExfUldfRU5UUlkoQVJQX0FDQ0VQVCwgImFycF9hY2NlcHQiKSwKKwkJREVWSU5FVF9TWVNDVExfUldfRU5UUlkoQVJQX05PVElGWSwgImFycF9ub3RpZnkiKSwKIAogCQlERVZJTkVUX1NZU0NUTF9GTFVTSElOR19FTlRSWShOT1hGUk0sICJkaXNhYmxlX3hmcm0iKSwKIAkJREVWSU5FVF9TWVNDVExfRkxVU0hJTkdfRU5UUlkoTk9QT0xJQ1ksICJkaXNhYmxlX3BvbGljeSIpLApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvZmliX2Zyb250ZW5kLmMgYi9uZXQvaXB2NC9maWJfZnJvbnRlbmQuYwppbmRleCA3NDFlNGZhLi5jYWZjYzQ5IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9maWJfZnJvbnRlbmQuYworKysgYi9uZXQvaXB2NC9maWJfZnJvbnRlbmQuYwpAQCAtMjc1LDcgKzI3NSw3IEBACiAJZmliX3Jlc19wdXQoJnJlcyk7CiAJaWYgKG5vX2FkZHIpCiAJCWdvdG8gbGFzdF9yZXNvcnQ7Ci0JaWYgKHJwZikKKwlpZiAocnBmID09IDEpCiAJCWdvdG8gZV9pbnZhbDsKIAlmbC5vaWYgPSBkZXYtPmlmaW5kZXg7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYyBiL25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYwppbmRleCA0ODE3ZGVhLi5mODMxZGY1IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMKKysrIGIvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jCkBAIC0zMjIsOCArMzIyLDkgQEAKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCWdvdG8gZXJyb3V0OwogCX0KLQllcnIgPSBydG5sX25vdGlmeShza2IsIGluZm8tPm5sX25ldCwgaW5mby0+cGlkLCBSVE5MR1JQX0lQVjRfUk9VVEUsCi0JCQkgIGluZm8tPm5saCwgR0ZQX0tFUk5FTCk7CisJcnRubF9ub3RpZnkoc2tiLCBpbmZvLT5ubF9uZXQsIGluZm8tPnBpZCwgUlROTEdSUF9JUFY0X1JPVVRFLAorCQkgICAgaW5mby0+bmxoLCBHRlBfS0VSTkVMKTsKKwlyZXR1cm47CiBlcnJvdXQ6CiAJaWYgKGVyciA8IDApCiAJCXJ0bmxfc2V0X3NrX2VycihpbmZvLT5ubF9uZXQsIFJUTkxHUlBfSVBWNF9ST1VURSwgZXJyKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2ljbXAuYyBiL25ldC9pcHY0L2ljbXAuYwppbmRleCBmYzU2MmQyLi4zZjUwODA3IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pY21wLmMKKysrIGIvbmV0L2lwdjQvaWNtcC5jCkBAIC0zNzUsNiArMzc1LDcgQEAKIAlpbmV0LT50b3MgPSBpcF9oZHIoc2tiKS0+dG9zOwogCWRhZGRyID0gaXBjLmFkZHIgPSBydC0+cnRfc3JjOwogCWlwYy5vcHQgPSBOVUxMOworCWlwYy5zaHR4LmZsYWdzID0gMDsKIAlpZiAoaWNtcF9wYXJhbS0+cmVwbHlvcHRzLm9wdGxlbikgewogCQlpcGMub3B0ID0gJmljbXBfcGFyYW0tPnJlcGx5b3B0czsKIAkJaWYgKGlwYy5vcHQtPnNycikKQEAgLTUzMiw2ICs1MzMsNyBAQAogCWluZXRfc2soc2spLT50b3MgPSB0b3M7CiAJaXBjLmFkZHIgPSBpcGgtPnNhZGRyOwogCWlwYy5vcHQgPSAmaWNtcF9wYXJhbS5yZXBseW9wdHM7CisJaXBjLnNodHguZmxhZ3MgPSAwOwogCiAJewogCQlzdHJ1Y3QgZmxvd2kgZmwgPSB7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jIGIvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYwppbmRleCBmMjZhYjM4Li4yMmNkMTllIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jCisrKyBiL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMKQEAgLTkzLDI0ICs5Myw0MCBAQAogCXN0cnVjdCBpbmV0X2JpbmRfaGFzaGJ1Y2tldCAqaGVhZDsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKIAlzdHJ1Y3QgaW5ldF9iaW5kX2J1Y2tldCAqdGI7Ci0JaW50IHJldDsKKwlpbnQgcmV0LCBhdHRlbXB0cyA9IDU7CiAJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spOworCWludCBzbWFsbGVzdF9zaXplID0gLTEsIHNtYWxsZXN0X3JvdmVyOwogCiAJbG9jYWxfYmhfZGlzYWJsZSgpOwogCWlmICghc251bSkgewogCQlpbnQgcmVtYWluaW5nLCByb3ZlciwgbG93LCBoaWdoOwogCithZ2FpbjoKIAkJaW5ldF9nZXRfbG9jYWxfcG9ydF9yYW5nZSgmbG93LCAmaGlnaCk7CiAJCXJlbWFpbmluZyA9IChoaWdoIC0gbG93KSArIDE7Ci0JCXJvdmVyID0gbmV0X3JhbmRvbSgpICUgcmVtYWluaW5nICsgbG93OworCQlzbWFsbGVzdF9yb3ZlciA9IHJvdmVyID0gbmV0X3JhbmRvbSgpICUgcmVtYWluaW5nICsgbG93OwogCisJCXNtYWxsZXN0X3NpemUgPSAtMTsKIAkJZG8gewogCQkJaGVhZCA9ICZoYXNoaW5mby0+Ymhhc2hbaW5ldF9iaGFzaGZuKG5ldCwgcm92ZXIsCiAJCQkJCWhhc2hpbmZvLT5iaGFzaF9zaXplKV07CiAJCQlzcGluX2xvY2soJmhlYWQtPmxvY2spOwogCQkJaW5ldF9iaW5kX2J1Y2tldF9mb3JfZWFjaCh0Yiwgbm9kZSwgJmhlYWQtPmNoYWluKQotCQkJCWlmIChpYl9uZXQodGIpID09IG5ldCAmJiB0Yi0+cG9ydCA9PSByb3ZlcikKKwkJCQlpZiAoaWJfbmV0KHRiKSA9PSBuZXQgJiYgdGItPnBvcnQgPT0gcm92ZXIpIHsKKwkJCQkJaWYgKHRiLT5mYXN0cmV1c2UgPiAwICYmCisJCQkJCSAgICBzay0+c2tfcmV1c2UgJiYKKwkJCQkJICAgIHNrLT5za19zdGF0ZSAhPSBUQ1BfTElTVEVOICYmCisJCQkJCSAgICAodGItPm51bV9vd25lcnMgPCBzbWFsbGVzdF9zaXplIHx8IHNtYWxsZXN0X3NpemUgPT0gLTEpKSB7CisJCQkJCQlzbWFsbGVzdF9zaXplID0gdGItPm51bV9vd25lcnM7CisJCQkJCQlzbWFsbGVzdF9yb3ZlciA9IHJvdmVyOworCQkJCQkJaWYgKGF0b21pY19yZWFkKCZoYXNoaW5mby0+YnNvY2tldHMpID4gKGhpZ2ggLSBsb3cpICsgMSkgeworCQkJCQkJCXNwaW5fdW5sb2NrKCZoZWFkLT5sb2NrKTsKKwkJCQkJCQlzbnVtID0gc21hbGxlc3Rfcm92ZXI7CisJCQkJCQkJZ290byBoYXZlX3NudW07CisJCQkJCQl9CisJCQkJCX0KIAkJCQkJZ290byBuZXh0OworCQkJCX0KIAkJCWJyZWFrOwogCQluZXh0OgogCQkJc3Bpbl91bmxvY2soJmhlYWQtPmxvY2spOwpAQCAtMTI1LDE0ICsxNDEsMTkgQEAKIAkJICogdGhlIHRvcCBsZXZlbCwgbm90IGZyb20gdGhlICdicmVhazsnIHN0YXRlbWVudC4KIAkJICovCiAJCXJldCA9IDE7Ci0JCWlmIChyZW1haW5pbmcgPD0gMCkKKwkJaWYgKHJlbWFpbmluZyA8PSAwKSB7CisJCQlpZiAoc21hbGxlc3Rfc2l6ZSAhPSAtMSkgeworCQkJCXNudW0gPSBzbWFsbGVzdF9yb3ZlcjsKKwkJCQlnb3RvIGhhdmVfc251bTsKKwkJCX0KIAkJCWdvdG8gZmFpbDsKLQorCQl9CiAJCS8qIE9LLCBoZXJlIGlzIHRoZSBvbmUgd2Ugd2lsbCB1c2UuICBIRUFEIGlzCiAJCSAqIG5vbi1OVUxMIGFuZCB3ZSBob2xkIGl0J3MgbXV0ZXguCiAJCSAqLwogCQlzbnVtID0gcm92ZXI7CiAJfSBlbHNlIHsKK2hhdmVfc251bToKIAkJaGVhZCA9ICZoYXNoaW5mby0+Ymhhc2hbaW5ldF9iaGFzaGZuKG5ldCwgc251bSwKIAkJCQloYXNoaW5mby0+Ymhhc2hfc2l6ZSldOwogCQlzcGluX2xvY2soJmhlYWQtPmxvY2spOwpAQCAtMTQ1LDEyICsxNjYsMTkgQEAKIHRiX2ZvdW5kOgogCWlmICghaGxpc3RfZW1wdHkoJnRiLT5vd25lcnMpKSB7CiAJCWlmICh0Yi0+ZmFzdHJldXNlID4gMCAmJgotCQkgICAgc2stPnNrX3JldXNlICYmIHNrLT5za19zdGF0ZSAhPSBUQ1BfTElTVEVOKSB7CisJCSAgICBzay0+c2tfcmV1c2UgJiYgc2stPnNrX3N0YXRlICE9IFRDUF9MSVNURU4gJiYKKwkJICAgIHNtYWxsZXN0X3NpemUgPT0gLTEpIHsKIAkJCWdvdG8gc3VjY2VzczsKIAkJfSBlbHNlIHsKIAkJCXJldCA9IDE7Ci0JCQlpZiAoaW5ldF9jc2soc2spLT5pY3NrX2FmX29wcy0+YmluZF9jb25mbGljdChzaywgdGIpKQorCQkJaWYgKGluZXRfY3NrKHNrKS0+aWNza19hZl9vcHMtPmJpbmRfY29uZmxpY3Qoc2ssIHRiKSkgeworCQkJCWlmIChzay0+c2tfcmV1c2UgJiYgc2stPnNrX3N0YXRlICE9IFRDUF9MSVNURU4gJiYKKwkJCQkgICAgc21hbGxlc3Rfc2l6ZSAhPSAtMSAmJiAtLWF0dGVtcHRzID49IDApIHsKKwkJCQkJc3Bpbl91bmxvY2soJmhlYWQtPmxvY2spOworCQkJCQlnb3RvIGFnYWluOworCQkJCX0KIAkJCQlnb3RvIGZhaWxfdW5sb2NrOworCQkJfQogCQl9CiAJfQogdGJfbm90X2ZvdW5kOgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaW5ldF9mcmFnbWVudC5jIGIvbmV0L2lwdjQvaW5ldF9mcmFnbWVudC5jCmluZGV4IDZjNTJlMDguLmVhZjNlMmMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2luZXRfZnJhZ21lbnQuYworKysgYi9uZXQvaXB2NC9pbmV0X2ZyYWdtZW50LmMKQEAgLTI2Nyw2ICsyNjcsNyBAQAogCiBzdHJ1Y3QgaW5ldF9mcmFnX3F1ZXVlICppbmV0X2ZyYWdfZmluZChzdHJ1Y3QgbmV0bnNfZnJhZ3MgKm5mLAogCQlzdHJ1Y3QgaW5ldF9mcmFncyAqZiwgdm9pZCAqa2V5LCB1bnNpZ25lZCBpbnQgaGFzaCkKKwlfX3JlbGVhc2VzKCZmLT5sb2NrKQogewogCXN0cnVjdCBpbmV0X2ZyYWdfcXVldWUgKnE7CiAJc3RydWN0IGhsaXN0X25vZGUgKm47CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pbmV0X2hhc2h0YWJsZXMuYyBiL25ldC9pcHY0L2luZXRfaGFzaHRhYmxlcy5jCmluZGV4IDZhMTA0NWQuLjYyNWNjNWYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2luZXRfaGFzaHRhYmxlcy5jCisrKyBiL25ldC9pcHY0L2luZXRfaGFzaHRhYmxlcy5jCkBAIC0zOCw2ICszOCw3IEBACiAJCXdyaXRlX3BuZXQoJnRiLT5pYl9uZXQsIGhvbGRfbmV0KG5ldCkpOwogCQl0Yi0+cG9ydCAgICAgID0gc251bTsKIAkJdGItPmZhc3RyZXVzZSA9IDA7CisJCXRiLT5udW1fb3duZXJzID0gMDsKIAkJSU5JVF9ITElTVF9IRUFEKCZ0Yi0+b3duZXJzKTsKIAkJaGxpc3RfYWRkX2hlYWQoJnRiLT5ub2RlLCAmaGVhZC0+Y2hhaW4pOwogCX0KQEAgLTU5LDggKzYwLDEzIEBACiB2b2lkIGluZXRfYmluZF9oYXNoKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGluZXRfYmluZF9idWNrZXQgKnRiLAogCQkgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgc251bSkKIHsKKwlzdHJ1Y3QgaW5ldF9oYXNoaW5mbyAqaGFzaGluZm8gPSBzay0+c2tfcHJvdC0+aC5oYXNoaW5mbzsKKworCWF0b21pY19pbmMoJmhhc2hpbmZvLT5ic29ja2V0cyk7CisKIAlpbmV0X3NrKHNrKS0+bnVtID0gc251bTsKIAlza19hZGRfYmluZF9ub2RlKHNrLCAmdGItPm93bmVycyk7CisJdGItPm51bV9vd25lcnMrKzsKIAlpbmV0X2NzayhzayktPmljc2tfYmluZF9oYXNoID0gdGI7CiB9CiAKQEAgLTc1LDkgKzgxLDEyIEBACiAJc3RydWN0IGluZXRfYmluZF9oYXNoYnVja2V0ICpoZWFkID0gJmhhc2hpbmZvLT5iaGFzaFtiaGFzaF07CiAJc3RydWN0IGluZXRfYmluZF9idWNrZXQgKnRiOwogCisJYXRvbWljX2RlYygmaGFzaGluZm8tPmJzb2NrZXRzKTsKKwogCXNwaW5fbG9jaygmaGVhZC0+bG9jayk7CiAJdGIgPSBpbmV0X2NzayhzayktPmljc2tfYmluZF9oYXNoOwogCV9fc2tfZGVsX2JpbmRfbm9kZShzayk7CisJdGItPm51bV9vd25lcnMtLTsKIAlpbmV0X2NzayhzayktPmljc2tfYmluZF9oYXNoID0gTlVMTDsKIAlpbmV0X3NrKHNrKS0+bnVtID0gMDsKIAlpbmV0X2JpbmRfYnVja2V0X2Rlc3Ryb3koaGFzaGluZm8tPmJpbmRfYnVja2V0X2NhY2hlcCwgdGIpOwpAQCAtNDQ0LDkgKzQ1Myw5IEBACiAJCQkgKi8KIAkJCWluZXRfYmluZF9idWNrZXRfZm9yX2VhY2godGIsIG5vZGUsICZoZWFkLT5jaGFpbikgewogCQkJCWlmIChpYl9uZXQodGIpID09IG5ldCAmJiB0Yi0+cG9ydCA9PSBwb3J0KSB7Ci0JCQkJCVdBUk5fT04oaGxpc3RfZW1wdHkoJnRiLT5vd25lcnMpKTsKIAkJCQkJaWYgKHRiLT5mYXN0cmV1c2UgPj0gMCkKIAkJCQkJCWdvdG8gbmV4dF9wb3J0OworCQkJCQlXQVJOX09OKGhsaXN0X2VtcHR5KCZ0Yi0+b3duZXJzKSk7CiAJCQkJCWlmICghY2hlY2tfZXN0YWJsaXNoZWQoZGVhdGhfcm93LCBzaywKIAkJCQkJCQkJcG9ydCwgJnR3KSkKIAkJCQkJCWdvdG8gb2s7CkBAIC01MjMsNiArNTMyLDcgQEAKIHsKIAlpbnQgaTsKIAorCWF0b21pY19zZXQoJmgtPmJzb2NrZXRzLCAwKTsKIAlmb3IgKGkgPSAwOyBpIDwgSU5FVF9MSFRBQkxFX1NJWkU7IGkrKykgewogCQlzcGluX2xvY2tfaW5pdCgmaC0+bGlzdGVuaW5nX2hhc2hbaV0ubG9jayk7CiAJCUlOSVRfSExJU1RfTlVMTFNfSEVBRCgmaC0+bGlzdGVuaW5nX2hhc2hbaV0uaGVhZCwKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX2dyZS5jIGIvbmV0L2lwdjQvaXBfZ3JlLmMKaW5kZXggMDEwMTUyMS4uZTYyNTEwZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfZ3JlLmMKKysrIGIvbmV0L2lwdjQvaXBfZ3JlLmMKQEAgLTE2NCw2NyArMTY0LDEyNCBAQAogCiAvKiBHaXZlbiBzcmMsIGRzdCBhbmQga2V5LCBmaW5kIGFwcHJvcHJpYXRlIGZvciBpbnB1dCB0dW5uZWwuICovCiAKLXN0YXRpYyBzdHJ1Y3QgaXBfdHVubmVsICogaXBncmVfdHVubmVsX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsCitzdGF0aWMgc3RydWN0IGlwX3R1bm5lbCAqIGlwZ3JlX3R1bm5lbF9sb29rdXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkJICAgICAgX19iZTMyIHJlbW90ZSwgX19iZTMyIGxvY2FsLAogCQkJCQkgICAgICBfX2JlMzIga2V5LCBfX2JlMTYgZ3JlX3Byb3RvKQogeworCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoZGV2KTsKKwlpbnQgbGluayA9IGRldi0+aWZpbmRleDsKIAl1bnNpZ25lZCBoMCA9IEhBU0gocmVtb3RlKTsKIAl1bnNpZ25lZCBoMSA9IEhBU0goa2V5KTsKLQlzdHJ1Y3QgaXBfdHVubmVsICp0OwotCXN0cnVjdCBpcF90dW5uZWwgKnQyID0gTlVMTDsKKwlzdHJ1Y3QgaXBfdHVubmVsICp0LCAqY2FuZCA9IE5VTEw7CiAJc3RydWN0IGlwZ3JlX25ldCAqaWduID0gbmV0X2dlbmVyaWMobmV0LCBpcGdyZV9uZXRfaWQpOwogCWludCBkZXZfdHlwZSA9IChncmVfcHJvdG8gPT0gaHRvbnMoRVRIX1BfVEVCKSkgPwogCQkgICAgICAgQVJQSFJEX0VUSEVSIDogQVJQSFJEX0lQR1JFOworCWludCBzY29yZSwgY2FuZF9zY29yZSA9IDQ7CiAKIAlmb3IgKHQgPSBpZ24tPnR1bm5lbHNfcl9sW2gwXmgxXTsgdDsgdCA9IHQtPm5leHQpIHsKLQkJaWYgKGxvY2FsID09IHQtPnBhcm1zLmlwaC5zYWRkciAmJiByZW1vdGUgPT0gdC0+cGFybXMuaXBoLmRhZGRyKSB7Ci0JCQlpZiAodC0+cGFybXMuaV9rZXkgPT0ga2V5ICYmIHQtPmRldi0+ZmxhZ3MgJiBJRkZfVVApIHsKLQkJCQlpZiAodC0+ZGV2LT50eXBlID09IGRldl90eXBlKQotCQkJCQlyZXR1cm4gdDsKLQkJCQlpZiAodC0+ZGV2LT50eXBlID09IEFSUEhSRF9JUEdSRSAmJiAhdDIpCi0JCQkJCXQyID0gdDsKLQkJCX0KKwkJaWYgKGxvY2FsICE9IHQtPnBhcm1zLmlwaC5zYWRkciB8fAorCQkgICAgcmVtb3RlICE9IHQtPnBhcm1zLmlwaC5kYWRkciB8fAorCQkgICAga2V5ICE9IHQtPnBhcm1zLmlfa2V5IHx8CisJCSAgICAhKHQtPmRldi0+ZmxhZ3MgJiBJRkZfVVApKQorCQkJY29udGludWU7CisKKwkJaWYgKHQtPmRldi0+dHlwZSAhPSBBUlBIUkRfSVBHUkUgJiYKKwkJICAgIHQtPmRldi0+dHlwZSAhPSBkZXZfdHlwZSkKKwkJCWNvbnRpbnVlOworCisJCXNjb3JlID0gMDsKKwkJaWYgKHQtPnBhcm1zLmxpbmsgIT0gbGluaykKKwkJCXNjb3JlIHw9IDE7CisJCWlmICh0LT5kZXYtPnR5cGUgIT0gZGV2X3R5cGUpCisJCQlzY29yZSB8PSAyOworCQlpZiAoc2NvcmUgPT0gMCkKKwkJCXJldHVybiB0OworCisJCWlmIChzY29yZSA8IGNhbmRfc2NvcmUpIHsKKwkJCWNhbmQgPSB0OworCQkJY2FuZF9zY29yZSA9IHNjb3JlOwogCQl9CiAJfQogCiAJZm9yICh0ID0gaWduLT50dW5uZWxzX3JbaDBeaDFdOyB0OyB0ID0gdC0+bmV4dCkgewotCQlpZiAocmVtb3RlID09IHQtPnBhcm1zLmlwaC5kYWRkcikgewotCQkJaWYgKHQtPnBhcm1zLmlfa2V5ID09IGtleSAmJiB0LT5kZXYtPmZsYWdzICYgSUZGX1VQKSB7Ci0JCQkJaWYgKHQtPmRldi0+dHlwZSA9PSBkZXZfdHlwZSkKLQkJCQkJcmV0dXJuIHQ7Ci0JCQkJaWYgKHQtPmRldi0+dHlwZSA9PSBBUlBIUkRfSVBHUkUgJiYgIXQyKQotCQkJCQl0MiA9IHQ7Ci0JCQl9CisJCWlmIChyZW1vdGUgIT0gdC0+cGFybXMuaXBoLmRhZGRyIHx8CisJCSAgICBrZXkgIT0gdC0+cGFybXMuaV9rZXkgfHwKKwkJICAgICEodC0+ZGV2LT5mbGFncyAmIElGRl9VUCkpCisJCQljb250aW51ZTsKKworCQlpZiAodC0+ZGV2LT50eXBlICE9IEFSUEhSRF9JUEdSRSAmJgorCQkgICAgdC0+ZGV2LT50eXBlICE9IGRldl90eXBlKQorCQkJY29udGludWU7CisKKwkJc2NvcmUgPSAwOworCQlpZiAodC0+cGFybXMubGluayAhPSBsaW5rKQorCQkJc2NvcmUgfD0gMTsKKwkJaWYgKHQtPmRldi0+dHlwZSAhPSBkZXZfdHlwZSkKKwkJCXNjb3JlIHw9IDI7CisJCWlmIChzY29yZSA9PSAwKQorCQkJcmV0dXJuIHQ7CisKKwkJaWYgKHNjb3JlIDwgY2FuZF9zY29yZSkgeworCQkJY2FuZCA9IHQ7CisJCQljYW5kX3Njb3JlID0gc2NvcmU7CiAJCX0KIAl9CiAKIAlmb3IgKHQgPSBpZ24tPnR1bm5lbHNfbFtoMV07IHQ7IHQgPSB0LT5uZXh0KSB7Ci0JCWlmIChsb2NhbCA9PSB0LT5wYXJtcy5pcGguc2FkZHIgfHwKLQkJICAgICAobG9jYWwgPT0gdC0+cGFybXMuaXBoLmRhZGRyICYmCi0JCSAgICAgIGlwdjRfaXNfbXVsdGljYXN0KGxvY2FsKSkpIHsKLQkJCWlmICh0LT5wYXJtcy5pX2tleSA9PSBrZXkgJiYgdC0+ZGV2LT5mbGFncyAmIElGRl9VUCkgewotCQkJCWlmICh0LT5kZXYtPnR5cGUgPT0gZGV2X3R5cGUpCi0JCQkJCXJldHVybiB0OwotCQkJCWlmICh0LT5kZXYtPnR5cGUgPT0gQVJQSFJEX0lQR1JFICYmICF0MikKLQkJCQkJdDIgPSB0OwotCQkJfQorCQlpZiAoKGxvY2FsICE9IHQtPnBhcm1zLmlwaC5zYWRkciAmJgorCQkgICAgIChsb2NhbCAhPSB0LT5wYXJtcy5pcGguZGFkZHIgfHwKKwkJICAgICAgIWlwdjRfaXNfbXVsdGljYXN0KGxvY2FsKSkpIHx8CisJCSAgICBrZXkgIT0gdC0+cGFybXMuaV9rZXkgfHwKKwkJICAgICEodC0+ZGV2LT5mbGFncyAmIElGRl9VUCkpCisJCQljb250aW51ZTsKKworCQlpZiAodC0+ZGV2LT50eXBlICE9IEFSUEhSRF9JUEdSRSAmJgorCQkgICAgdC0+ZGV2LT50eXBlICE9IGRldl90eXBlKQorCQkJY29udGludWU7CisKKwkJc2NvcmUgPSAwOworCQlpZiAodC0+cGFybXMubGluayAhPSBsaW5rKQorCQkJc2NvcmUgfD0gMTsKKwkJaWYgKHQtPmRldi0+dHlwZSAhPSBkZXZfdHlwZSkKKwkJCXNjb3JlIHw9IDI7CisJCWlmIChzY29yZSA9PSAwKQorCQkJcmV0dXJuIHQ7CisKKwkJaWYgKHNjb3JlIDwgY2FuZF9zY29yZSkgeworCQkJY2FuZCA9IHQ7CisJCQljYW5kX3Njb3JlID0gc2NvcmU7CiAJCX0KIAl9CiAKIAlmb3IgKHQgPSBpZ24tPnR1bm5lbHNfd2NbaDFdOyB0OyB0ID0gdC0+bmV4dCkgewotCQlpZiAodC0+cGFybXMuaV9rZXkgPT0ga2V5ICYmIHQtPmRldi0+ZmxhZ3MgJiBJRkZfVVApIHsKLQkJCWlmICh0LT5kZXYtPnR5cGUgPT0gZGV2X3R5cGUpCi0JCQkJcmV0dXJuIHQ7Ci0JCQlpZiAodC0+ZGV2LT50eXBlID09IEFSUEhSRF9JUEdSRSAmJiAhdDIpCi0JCQkJdDIgPSB0OworCQlpZiAodC0+cGFybXMuaV9rZXkgIT0ga2V5IHx8CisJCSAgICAhKHQtPmRldi0+ZmxhZ3MgJiBJRkZfVVApKQorCQkJY29udGludWU7CisKKwkJaWYgKHQtPmRldi0+dHlwZSAhPSBBUlBIUkRfSVBHUkUgJiYKKwkJICAgIHQtPmRldi0+dHlwZSAhPSBkZXZfdHlwZSkKKwkJCWNvbnRpbnVlOworCisJCXNjb3JlID0gMDsKKwkJaWYgKHQtPnBhcm1zLmxpbmsgIT0gbGluaykKKwkJCXNjb3JlIHw9IDE7CisJCWlmICh0LT5kZXYtPnR5cGUgIT0gZGV2X3R5cGUpCisJCQlzY29yZSB8PSAyOworCQlpZiAoc2NvcmUgPT0gMCkKKwkJCXJldHVybiB0OworCisJCWlmIChzY29yZSA8IGNhbmRfc2NvcmUpIHsKKwkJCWNhbmQgPSB0OworCQkJY2FuZF9zY29yZSA9IHNjb3JlOwogCQl9CiAJfQogCi0JaWYgKHQyKQotCQlyZXR1cm4gdDI7CisJaWYgKGNhbmQgIT0gTlVMTCkKKwkJcmV0dXJuIGNhbmQ7CiAKLQlpZiAoaWduLT5mYl90dW5uZWxfZGV2LT5mbGFncyZJRkZfVVApCisJaWYgKGlnbi0+ZmJfdHVubmVsX2Rldi0+ZmxhZ3MgJiBJRkZfVVApCiAJCXJldHVybiBuZXRkZXZfcHJpdihpZ24tPmZiX3R1bm5lbF9kZXYpOworCiAJcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTI4NCw2ICszNDEsNyBAQAogCV9fYmUzMiByZW1vdGUgPSBwYXJtcy0+aXBoLmRhZGRyOwogCV9fYmUzMiBsb2NhbCA9IHBhcm1zLT5pcGguc2FkZHI7CiAJX19iZTMyIGtleSA9IHBhcm1zLT5pX2tleTsKKwlpbnQgbGluayA9IHBhcm1zLT5saW5rOwogCXN0cnVjdCBpcF90dW5uZWwgKnQsICoqdHA7CiAJc3RydWN0IGlwZ3JlX25ldCAqaWduID0gbmV0X2dlbmVyaWMobmV0LCBpcGdyZV9uZXRfaWQpOwogCkBAIC0yOTEsNiArMzQ5LDcgQEAKIAkJaWYgKGxvY2FsID09IHQtPnBhcm1zLmlwaC5zYWRkciAmJgogCQkgICAgcmVtb3RlID09IHQtPnBhcm1zLmlwaC5kYWRkciAmJgogCQkgICAga2V5ID09IHQtPnBhcm1zLmlfa2V5ICYmCisJCSAgICBsaW5rID09IHQtPnBhcm1zLmxpbmsgJiYKIAkJICAgIHR5cGUgPT0gdC0+ZGV2LT50eXBlKQogCQkJYnJlYWs7CiAKQEAgLTQyMSw3ICs0ODAsNyBAQAogCX0KIAogCXJlYWRfbG9jaygmaXBncmVfbG9jayk7Ci0JdCA9IGlwZ3JlX3R1bm5lbF9sb29rdXAoZGV2X25ldChza2ItPmRldiksIGlwaC0+ZGFkZHIsIGlwaC0+c2FkZHIsCisJdCA9IGlwZ3JlX3R1bm5lbF9sb29rdXAoc2tiLT5kZXYsIGlwaC0+ZGFkZHIsIGlwaC0+c2FkZHIsCiAJCQkJZmxhZ3MgJiBHUkVfS0VZID8KIAkJCQkqKCgoX19iZTMyICopcCkgKyAoZ3JlaGxlbiAvIDQpIC0gMSkgOiAwLAogCQkJCXBbMV0pOwpAQCAtNDMyLDcgKzQ5MSw3IEBACiAJaWYgKHQtPnBhcm1zLmlwaC50dGwgPT0gMCAmJiB0eXBlID09IElDTVBfVElNRV9FWENFRURFRCkKIAkJZ290byBvdXQ7CiAKLQlpZiAoamlmZmllcyAtIHQtPmVycl90aW1lIDwgSVBUVU5ORUxfRVJSX1RJTUVPKQorCWlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCB0LT5lcnJfdGltZSArIElQVFVOTkVMX0VSUl9USU1FTykpCiAJCXQtPmVycl9jb3VudCsrOwogCWVsc2UKIAkJdC0+ZXJyX2NvdW50ID0gMTsKQEAgLTUxOCw3ICs1NzcsNyBAQAogCWdyZV9wcm90byA9ICooX19iZTE2ICopKGggKyAyKTsKIAogCXJlYWRfbG9jaygmaXBncmVfbG9jayk7Ci0JaWYgKCh0dW5uZWwgPSBpcGdyZV90dW5uZWxfbG9va3VwKGRldl9uZXQoc2tiLT5kZXYpLAorCWlmICgodHVubmVsID0gaXBncmVfdHVubmVsX2xvb2t1cChza2ItPmRldiwKIAkJCQkJICBpcGgtPnNhZGRyLCBpcGgtPmRhZGRyLCBrZXksCiAJCQkJCSAgZ3JlX3Byb3RvKSkpIHsKIAkJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJnR1bm5lbC0+ZGV2LT5zdGF0czsKQEAgLTc0NCw3ICs4MDMsOCBAQAogI2VuZGlmCiAKIAlpZiAodHVubmVsLT5lcnJfY291bnQgPiAwKSB7Ci0JCWlmIChqaWZmaWVzIC0gdHVubmVsLT5lcnJfdGltZSA8IElQVFVOTkVMX0VSUl9USU1FTykgeworCQlpZiAodGltZV9iZWZvcmUoamlmZmllcywKKwkJCQl0dW5uZWwtPmVycl90aW1lICsgSVBUVU5ORUxfRVJSX1RJTUVPKSkgewogCQkJdHVubmVsLT5lcnJfY291bnQtLTsKIAogCQkJZHN0X2xpbmtfZmFpbHVyZShza2IpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfb3V0cHV0LmMgYi9uZXQvaXB2NC9pcF9vdXRwdXQuYwppbmRleCA4ZWJlODZkZC4uM2U3ZTkxMCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfb3V0cHV0LmMKKysrIGIvbmV0L2lwdjQvaXBfb3V0cHV0LmMKQEAgLTkzNSw2ICs5MzUsMTAgQEAKIAkJCQkJCQkgICBzay0+c2tfYWxsb2NhdGlvbik7CiAJCQkJaWYgKHVubGlrZWx5KHNrYiA9PSBOVUxMKSkKIAkJCQkJZXJyID0gLUVOT0JVRlM7CisJCQkJZWxzZQorCQkJCQkvKiBvbmx5IHRoZSBpbml0aWFsIGZyYWdtZW50IGlzCisJCQkJCSAgIHRpbWUgc3RhbXBlZCAqLworCQkJCQlpcGMtPnNodHguZmxhZ3MgPSAwOwogCQkJfQogCQkJaWYgKHNrYiA9PSBOVUxMKQogCQkJCWdvdG8gZXJyb3I7CkBAIC05NDUsNiArOTQ5LDcgQEAKIAkJCXNrYi0+aXBfc3VtbWVkID0gY3N1bW1vZGU7CiAJCQlza2ItPmNzdW0gPSAwOwogCQkJc2tiX3Jlc2VydmUoc2tiLCBoaF9sZW4pOworCQkJKnNrYl90eChza2IpID0gaXBjLT5zaHR4OwogCiAJCQkvKgogCQkJICoJRmluZCB3aGVyZSB0byBzdGFydCBwdXR0aW5nIGJ5dGVzLgpAQCAtMTM2NCw2ICsxMzY5LDcgQEAKIAogCWRhZGRyID0gaXBjLmFkZHIgPSBydC0+cnRfc3JjOwogCWlwYy5vcHQgPSBOVUxMOworCWlwYy5zaHR4LmZsYWdzID0gMDsKIAogCWlmIChyZXBseW9wdHMub3B0Lm9wdGxlbikgewogCQlpcGMub3B0ID0gJnJlcGx5b3B0cy5vcHQ7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcGNvbmZpZy5jIGIvbmV0L2lwdjQvaXBjb25maWcuYwppbmRleCBkNzIyMDEzLi45MGQyMmFlIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcGNvbmZpZy5jCisrKyBiL25ldC9pcHY0L2lwY29uZmlnLmMKQEAgLTEwMCw4ICsxMDAsOCBAQAogI2RlZmluZSBDT05GX05BTUVTRVJWRVJTX01BWCAgIDMgICAgICAgLyogTWF4aW11bSBudW1iZXIgb2YgbmFtZXNlcnZlcnMKIAkJCQkJICAgLSAnMycgZnJvbSByZXNvbHYuaCAqLwogCi0jZGVmaW5lIE5PTkUgX19jb25zdGFudF9odG9ubChJTkFERFJfTk9ORSkKLSNkZWZpbmUgQU5ZIF9fY29uc3RhbnRfaHRvbmwoSU5BRERSX0FOWSkKKyNkZWZpbmUgTk9ORSBjcHVfdG9fYmUzMihJTkFERFJfTk9ORSkKKyNkZWZpbmUgQU5ZIGNwdV90b19iZTMyKElOQUREUl9BTlkpCiAKIC8qCiAgKiBQdWJsaWMgSVAgY29uZmlndXJhdGlvbgpAQCAtNDA2LDcgKzQwNiw3IEBACiBzdGF0aWMgaW50IGljX3JhcnBfcmVjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpOwogCiBzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIHJhcnBfcGFja2V0X3R5cGUgX19pbml0ZGF0YSA9IHsKLQkudHlwZSA9CV9fY29uc3RhbnRfaHRvbnMoRVRIX1BfUkFSUCksCisJLnR5cGUgPQljcHVfdG9fYmUxNihFVEhfUF9SQVJQKSwKIAkuZnVuYyA9CWljX3JhcnBfcmVjdiwKIH07CiAKQEAgLTU2OCw3ICs1NjgsNyBAQAogc3RhdGljIGludCBpY19ib290cF9yZWN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwYWNrZXRfdHlwZSAqcHQsIHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2Rldik7CiAKIHN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgYm9vdHBfcGFja2V0X3R5cGUgX19pbml0ZGF0YSA9IHsKLQkudHlwZSA9CV9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVApLAorCS50eXBlID0JY3B1X3RvX2JlMTYoRVRIX1BfSVApLAogCS5mdW5jID0JaWNfYm9vdHBfcmVjdiwKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwaXAuYyBiL25ldC9pcHY0L2lwaXAuYwppbmRleCA1MDc5ZGZiLi45MDU0MTM5IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcGlwLmMKKysrIGIvbmV0L2lwdjQvaXBpcC5jCkBAIC0zMjcsNyArMzI3LDcgQEAKIAlpZiAodC0+cGFybXMuaXBoLnR0bCA9PSAwICYmIHR5cGUgPT0gSUNNUF9USU1FX0VYQ0VFREVEKQogCQlnb3RvIG91dDsKIAotCWlmIChqaWZmaWVzIC0gdC0+ZXJyX3RpbWUgPCBJUFRVTk5FTF9FUlJfVElNRU8pCisJaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHQtPmVycl90aW1lICsgSVBUVU5ORUxfRVJSX1RJTUVPKSkKIAkJdC0+ZXJyX2NvdW50Kys7CiAJZWxzZQogCQl0LT5lcnJfY291bnQgPSAxOwpAQCAtNDY2LDcgKzQ2Niw4IEBACiAJfQogCiAJaWYgKHR1bm5lbC0+ZXJyX2NvdW50ID4gMCkgewotCQlpZiAoamlmZmllcyAtIHR1bm5lbC0+ZXJyX3RpbWUgPCBJUFRVTk5FTF9FUlJfVElNRU8pIHsKKwkJaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsCisJCQkJdHVubmVsLT5lcnJfdGltZSArIElQVFVOTkVMX0VSUl9USU1FTykpIHsKIAkJCXR1bm5lbC0+ZXJyX2NvdW50LS07CiAJCQlkc3RfbGlua19mYWlsdXJlKHNrYik7CiAJCX0gZWxzZQpAQCAtNzUwLDcgKzc1MSw3IEBACiAJLnByaW9yaXR5CT0JMSwKIH07CiAKLXN0YXRpYyBjaGFyIGJhbm5lcltdIF9faW5pdGRhdGEgPQorc3RhdGljIGNvbnN0IGNoYXIgYmFubmVyW10gX19pbml0Y29uc3QgPQogCUtFUk5fSU5GTyAiSVB2NCBvdmVyIElQdjQgdHVubmVsaW5nIGRyaXZlclxuIjsKIAogc3RhdGljIHZvaWQgaXBpcF9kZXN0cm95X3R1bm5lbHMoc3RydWN0IGlwaXBfbmV0ICppcG4pCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcG1yLmMgYi9uZXQvaXB2NC9pcG1yLmMKaW5kZXggMTQ2NjY0NC4uMTNlOWRkMzAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwbXIuYworKysgYi9uZXQvaXB2NC9pcG1yLmMKQEAgLTY3LDkgKzY3LDYgQEAKICNkZWZpbmUgQ09ORklHX0lQX1BJTVNNCTEKICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IHNvY2sgKm1yb3V0ZV9zb2NrZXQ7Ci0KLQogLyogQmlnIGxvY2ssIHByb3RlY3RpbmcgdmlmIHRhYmxlLCBtcnQgY2FjaGUgYW5kIG1yb3V0ZSBzb2NrZXQgc3RhdGUuCiAgICBOb3RlIHRoYXQgdGhlIGNoYW5nZXMgYXJlIHNlbWFwaG9yZWQgdmlhIHJ0bmxfbG9jay4KICAqLwpAQCAtODAsMTggKzc3LDkgQEAKICAqCU11bHRpY2FzdCByb3V0ZXIgY29udHJvbCB2YXJpYWJsZXMKICAqLwogCi1zdGF0aWMgc3RydWN0IHZpZl9kZXZpY2UgdmlmX3RhYmxlW01BWFZJRlNdOwkJLyogRGV2aWNlcyAJCSovCi1zdGF0aWMgaW50IG1heHZpZjsKLQotI2RlZmluZSBWSUZfRVhJU1RTKGlkeCkgKHZpZl90YWJsZVtpZHhdLmRldiAhPSBOVUxMKQotCi1zdGF0aWMgaW50IG1yb3V0ZV9kb19hc3NlcnQ7CQkJCS8qIFNldCBpbiBQSU0gYXNzZXJ0CSovCi1zdGF0aWMgaW50IG1yb3V0ZV9kb19waW07Ci0KLXN0YXRpYyBzdHJ1Y3QgbWZjX2NhY2hlICptZmNfY2FjaGVfYXJyYXlbTUZDX0xJTkVTXTsJLyogRm9yd2FyZGluZyBjYWNoZQkqLworI2RlZmluZSBWSUZfRVhJU1RTKF9uZXQsIF9pZHgpICgoX25ldCktPmlwdjQudmlmX3RhYmxlW19pZHhdLmRldiAhPSBOVUxMKQogCiBzdGF0aWMgc3RydWN0IG1mY19jYWNoZSAqbWZjX3VucmVzX3F1ZXVlOwkJLyogUXVldWUgb2YgdW5yZXNvbHZlZCBlbnRyaWVzICovCi1zdGF0aWMgYXRvbWljX3QgY2FjaGVfcmVzb2x2ZV9xdWV1ZV9sZW47CQkvKiBTaXplIG9mIHVucmVzb2x2ZWQJKi8KIAogLyogU3BlY2lhbCBzcGlubG9jayBmb3IgcXVldWUgb2YgdW5yZXNvbHZlZCBlbnRyaWVzICovCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKG1mY191bnJlc19sb2NrKTsKQEAgLTEwNyw3ICs5NSw4IEBACiBzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKm1ydF9jYWNoZXAgX19yZWFkX21vc3RseTsKIAogc3RhdGljIGludCBpcF9tcl9mb3J3YXJkKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBtZmNfY2FjaGUgKmNhY2hlLCBpbnQgbG9jYWwpOwotc3RhdGljIGludCBpcG1yX2NhY2hlX3JlcG9ydChzdHJ1Y3Qgc2tfYnVmZiAqcGt0LCB2aWZpX3QgdmlmaSwgaW50IGFzc2VydCk7CitzdGF0aWMgaW50IGlwbXJfY2FjaGVfcmVwb3J0KHN0cnVjdCBuZXQgKm5ldCwKKwkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnBrdCwgdmlmaV90IHZpZmksIGludCBhc3NlcnQpOwogc3RhdGljIGludCBpcG1yX2ZpbGxfbXJvdXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBtZmNfY2FjaGUgKmMsIHN0cnVjdCBydG1zZyAqcnRtKTsKIAogI2lmZGVmIENPTkZJR19JUF9QSU1TTV9WMgpAQCAtMTIwLDkgKzEwOSwxMSBAQAogCiBzdGF0aWMgdm9pZCBpcG1yX2RlbF90dW5uZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHZpZmN0bCAqdikKIHsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGRldik7CisKIAlkZXZfY2xvc2UoZGV2KTsKIAotCWRldiA9IF9fZGV2X2dldF9ieV9uYW1lKCZpbml0X25ldCwgInR1bmwwIik7CisJZGV2ID0gX19kZXZfZ2V0X2J5X25hbWUobmV0LCAidHVubDAiKTsKIAlpZiAoZGV2KSB7CiAJCWNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyAqb3BzID0gZGV2LT5uZXRkZXZfb3BzOwogCQlzdHJ1Y3QgaWZyZXEgaWZyOwpAQCAtMTQ4LDExICsxMzksMTEgQEAKIH0KIAogc3RhdGljCi1zdHJ1Y3QgbmV0X2RldmljZSAqaXBtcl9uZXdfdHVubmVsKHN0cnVjdCB2aWZjdGwgKnYpCitzdHJ1Y3QgbmV0X2RldmljZSAqaXBtcl9uZXdfdHVubmVsKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHZpZmN0bCAqdikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAgKmRldjsKIAotCWRldiA9IF9fZGV2X2dldF9ieV9uYW1lKCZpbml0X25ldCwgInR1bmwwIik7CisJZGV2ID0gX19kZXZfZ2V0X2J5X25hbWUobmV0LCAidHVubDAiKTsKIAogCWlmIChkZXYpIHsKIAkJY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpvcHMgPSBkZXYtPm5ldGRldl9vcHM7CkBAIC0xODEsNyArMTcyLDggQEAKIAogCQlkZXYgPSBOVUxMOwogCi0JCWlmIChlcnIgPT0gMCAmJiAoZGV2ID0gX19kZXZfZ2V0X2J5X25hbWUoJmluaXRfbmV0LCBwLm5hbWUpKSAhPSBOVUxMKSB7CisJCWlmIChlcnIgPT0gMCAmJgorCQkgICAgKGRldiA9IF9fZGV2X2dldF9ieV9uYW1lKG5ldCwgcC5uYW1lKSkgIT0gTlVMTCkgewogCQkJZGV2LT5mbGFncyB8PSBJRkZfTVVMVElDQVNUOwogCiAJCQlpbl9kZXYgPSBfX2luX2Rldl9nZXRfcnRubChkZXYpOwpAQCAtMjA5LDE0ICsyMDEsMTUgQEAKIAogI2lmZGVmIENPTkZJR19JUF9QSU1TTQogCi1zdGF0aWMgaW50IHJlZ192aWZfbnVtID0gLTE7Ci0KIHN0YXRpYyBpbnQgcmVnX3ZpZl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChkZXYpOworCiAJcmVhZF9sb2NrKCZtcnRfbG9jayk7CiAJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKIAlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKLQlpcG1yX2NhY2hlX3JlcG9ydChza2IsIHJlZ192aWZfbnVtLCBJR01QTVNHX1dIT0xFUEtUKTsKKwlpcG1yX2NhY2hlX3JlcG9ydChuZXQsIHNrYiwgbmV0LT5pcHY0Lm1yb3V0ZV9yZWdfdmlmX251bSwKKwkJCSAgSUdNUE1TR19XSE9MRVBLVCk7CiAJcmVhZF91bmxvY2soJm1ydF9sb2NrKTsKIAlrZnJlZV9za2Ioc2tiKTsKIAlyZXR1cm4gMDsKQEAgLTI4MywxNiArMjc2LDE2IEBACiAgKglAbm90aWZ5OiBTZXQgdG8gMSwgaWYgdGhlIGNhbGxlciBpcyBhIG5vdGlmaWVyX2NhbGwKICAqLwogCi1zdGF0aWMgaW50IHZpZl9kZWxldGUoaW50IHZpZmksIGludCBub3RpZnkpCitzdGF0aWMgaW50IHZpZl9kZWxldGUoc3RydWN0IG5ldCAqbmV0LCBpbnQgdmlmaSwgaW50IG5vdGlmeSkKIHsKIAlzdHJ1Y3QgdmlmX2RldmljZSAqdjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBpbl9kZXZpY2UgKmluX2RldjsKIAotCWlmICh2aWZpIDwgMCB8fCB2aWZpID49IG1heHZpZikKKwlpZiAodmlmaSA8IDAgfHwgdmlmaSA+PSBuZXQtPmlwdjQubWF4dmlmKQogCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7CiAKLQl2ID0gJnZpZl90YWJsZVt2aWZpXTsKKwl2ID0gJm5ldC0+aXB2NC52aWZfdGFibGVbdmlmaV07CiAKIAl3cml0ZV9sb2NrX2JoKCZtcnRfbG9jayk7CiAJZGV2ID0gdi0+ZGV2OwpAQCAtMzA0LDE3ICsyOTcsMTcgQEAKIAl9CiAKICNpZmRlZiBDT05GSUdfSVBfUElNU00KLQlpZiAodmlmaSA9PSByZWdfdmlmX251bSkKLQkJcmVnX3ZpZl9udW0gPSAtMTsKKwlpZiAodmlmaSA9PSBuZXQtPmlwdjQubXJvdXRlX3JlZ192aWZfbnVtKQorCQluZXQtPmlwdjQubXJvdXRlX3JlZ192aWZfbnVtID0gLTE7CiAjZW5kaWYKIAotCWlmICh2aWZpKzEgPT0gbWF4dmlmKSB7CisJaWYgKHZpZmkrMSA9PSBuZXQtPmlwdjQubWF4dmlmKSB7CiAJCWludCB0bXA7CiAJCWZvciAodG1wPXZpZmktMTsgdG1wPj0wOyB0bXAtLSkgewotCQkJaWYgKFZJRl9FWElTVFModG1wKSkKKwkJCWlmIChWSUZfRVhJU1RTKG5ldCwgdG1wKSkKIAkJCQlicmVhazsKIAkJfQotCQltYXh2aWYgPSB0bXArMTsKKwkJbmV0LT5pcHY0Lm1heHZpZiA9IHRtcCsxOwogCX0KIAogCXdyaXRlX3VubG9ja19iaCgmbXJ0X2xvY2spOwpAQCAtMzMzLDYgKzMyNiwxMiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgaXBtcl9jYWNoZV9mcmVlKHN0cnVjdCBtZmNfY2FjaGUgKmMpCit7CisJcmVsZWFzZV9uZXQobWZjX25ldChjKSk7CisJa21lbV9jYWNoZV9mcmVlKG1ydF9jYWNoZXAsIGMpOworfQorCiAvKiBEZXN0cm95IGFuIHVucmVzb2x2ZWQgY2FjaGUgZW50cnksIGtpbGxpbmcgcXVldWVkIHNrYnMKICAgIGFuZCByZXBvcnRpbmcgZXJyb3IgdG8gbmV0bGluayByZWFkZXJzLgogICovCkBAIC0zNDEsOCArMzQwLDkgQEAKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBubG1zZ2VyciAqZTsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBtZmNfbmV0KGMpOwogCi0JYXRvbWljX2RlYygmY2FjaGVfcmVzb2x2ZV9xdWV1ZV9sZW4pOworCWF0b21pY19kZWMoJm5ldC0+aXB2NC5jYWNoZV9yZXNvbHZlX3F1ZXVlX2xlbik7CiAKIAl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZjLT5tZmNfdW4udW5yZXMudW5yZXNvbHZlZCkpKSB7CiAJCWlmIChpcF9oZHIoc2tiKS0+dmVyc2lvbiA9PSAwKSB7CkBAIC0zNTQsMTIgKzM1NCwxMiBAQAogCQkJZS0+ZXJyb3IgPSAtRVRJTUVET1VUOwogCQkJbWVtc2V0KCZlLT5tc2csIDAsIHNpemVvZihlLT5tc2cpKTsKIAotCQkJcnRubF91bmljYXN0KHNrYiwgJmluaXRfbmV0LCBORVRMSU5LX0NCKHNrYikucGlkKTsKKwkJCXJ0bmxfdW5pY2FzdChza2IsIG5ldCwgTkVUTElOS19DQihza2IpLnBpZCk7CiAJCX0gZWxzZQogCQkJa2ZyZWVfc2tiKHNrYik7CiAJfQogCi0Ja21lbV9jYWNoZV9mcmVlKG1ydF9jYWNoZXAsIGMpOworCWlwbXJfY2FjaGVfZnJlZShjKTsKIH0KIAogCkBAIC0zNzYsNyArMzc2LDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCWlmIChhdG9taWNfcmVhZCgmY2FjaGVfcmVzb2x2ZV9xdWV1ZV9sZW4pID09IDApCisJaWYgKG1mY191bnJlc19xdWV1ZSA9PSBOVUxMKQogCQlnb3RvIG91dDsKIAogCW5vdyA9IGppZmZpZXM7CkBAIC0zOTcsNyArMzk3LDcgQEAKIAkJaXBtcl9kZXN0cm95X3VucmVzKGMpOwogCX0KIAotCWlmIChhdG9taWNfcmVhZCgmY2FjaGVfcmVzb2x2ZV9xdWV1ZV9sZW4pKQorCWlmIChtZmNfdW5yZXNfcXVldWUgIT0gTlVMTCkKIAkJbW9kX3RpbWVyKCZpcG1yX2V4cGlyZV90aW1lciwgamlmZmllcyArIGV4cGlyZXMpOwogCiBvdXQ6CkBAIC00MDksMTMgKzQwOSwxNSBAQAogc3RhdGljIHZvaWQgaXBtcl91cGRhdGVfdGhyZXNob2xkcyhzdHJ1Y3QgbWZjX2NhY2hlICpjYWNoZSwgdW5zaWduZWQgY2hhciAqdHRscykKIHsKIAlpbnQgdmlmaTsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBtZmNfbmV0KGNhY2hlKTsKIAogCWNhY2hlLT5tZmNfdW4ucmVzLm1pbnZpZiA9IE1BWFZJRlM7CiAJY2FjaGUtPm1mY191bi5yZXMubWF4dmlmID0gMDsKIAltZW1zZXQoY2FjaGUtPm1mY191bi5yZXMudHRscywgMjU1LCBNQVhWSUZTKTsKIAotCWZvciAodmlmaT0wOyB2aWZpPG1heHZpZjsgdmlmaSsrKSB7Ci0JCWlmIChWSUZfRVhJU1RTKHZpZmkpICYmIHR0bHNbdmlmaV0gJiYgdHRsc1t2aWZpXSA8IDI1NSkgeworCWZvciAodmlmaSA9IDA7IHZpZmkgPCBuZXQtPmlwdjQubWF4dmlmOyB2aWZpKyspIHsKKwkJaWYgKFZJRl9FWElTVFMobmV0LCB2aWZpKSAmJgorCQkgICAgdHRsc1t2aWZpXSAmJiB0dGxzW3ZpZmldIDwgMjU1KSB7CiAJCQljYWNoZS0+bWZjX3VuLnJlcy50dGxzW3ZpZmldID0gdHRsc1t2aWZpXTsKIAkJCWlmIChjYWNoZS0+bWZjX3VuLnJlcy5taW52aWYgPiB2aWZpKQogCQkJCWNhY2hlLT5tZmNfdW4ucmVzLm1pbnZpZiA9IHZpZmk7CkBAIC00MjUsMTYgKzQyNywxNiBAQAogCX0KIH0KIAotc3RhdGljIGludCB2aWZfYWRkKHN0cnVjdCB2aWZjdGwgKnZpZmMsIGludCBtcnRzb2NrKQorc3RhdGljIGludCB2aWZfYWRkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHZpZmN0bCAqdmlmYywgaW50IG1ydHNvY2spCiB7CiAJaW50IHZpZmkgPSB2aWZjLT52aWZjX3ZpZmk7Ci0Jc3RydWN0IHZpZl9kZXZpY2UgKnYgPSAmdmlmX3RhYmxlW3ZpZmldOworCXN0cnVjdCB2aWZfZGV2aWNlICp2ID0gJm5ldC0+aXB2NC52aWZfdGFibGVbdmlmaV07CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXY7CiAJaW50IGVycjsKIAogCS8qIElzIHZpZiBidXN5ID8gKi8KLQlpZiAoVklGX0VYSVNUUyh2aWZpKSkKKwlpZiAoVklGX0VYSVNUUyhuZXQsIHZpZmkpKQogCQlyZXR1cm4gLUVBRERSSU5VU0U7CiAKIAlzd2l0Y2ggKHZpZmMtPnZpZmNfZmxhZ3MpIHsKQEAgLTQ0NCw3ICs0NDYsNyBAQAogCQkgKiBTcGVjaWFsIFB1cnBvc2UgVklGIGluIFBJTQogCQkgKiBBbGwgdGhlIHBhY2tldHMgd2lsbCBiZSBzZW50IHRvIHRoZSBkYWVtb24KIAkJICovCi0JCWlmIChyZWdfdmlmX251bSA+PSAwKQorCQlpZiAobmV0LT5pcHY0Lm1yb3V0ZV9yZWdfdmlmX251bSA+PSAwKQogCQkJcmV0dXJuIC1FQUREUklOVVNFOwogCQlkZXYgPSBpcG1yX3JlZ192aWYoKTsKIAkJaWYgKCFkZXYpCkBAIC00NTgsNyArNDYwLDcgQEAKIAkJYnJlYWs7CiAjZW5kaWYKIAljYXNlIFZJRkZfVFVOTkVMOgotCQlkZXYgPSBpcG1yX25ld190dW5uZWwodmlmYyk7CisJCWRldiA9IGlwbXJfbmV3X3R1bm5lbChuZXQsIHZpZmMpOwogCQlpZiAoIWRldikKIAkJCXJldHVybiAtRU5PQlVGUzsKIAkJZXJyID0gZGV2X3NldF9hbGxtdWx0aShkZXYsIDEpOwpAQCAtNDY5LDcgKzQ3MSw3IEBACiAJCX0KIAkJYnJlYWs7CiAJY2FzZSAwOgotCQlkZXYgPSBpcF9kZXZfZmluZCgmaW5pdF9uZXQsIHZpZmMtPnZpZmNfbGNsX2FkZHIuc19hZGRyKTsKKwkJZGV2ID0gaXBfZGV2X2ZpbmQobmV0LCB2aWZjLT52aWZjX2xjbF9hZGRyLnNfYWRkcik7CiAJCWlmICghZGV2KQogCQkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOwogCQllcnIgPSBkZXZfc2V0X2FsbG11bHRpKGRldiwgMSk7CkBAIC01MTAsMjAgKzUxMiwyMiBAQAogCXYtPmRldiA9IGRldjsKICNpZmRlZiBDT05GSUdfSVBfUElNU00KIAlpZiAodi0+ZmxhZ3MmVklGRl9SRUdJU1RFUikKLQkJcmVnX3ZpZl9udW0gPSB2aWZpOworCQluZXQtPmlwdjQubXJvdXRlX3JlZ192aWZfbnVtID0gdmlmaTsKICNlbmRpZgotCWlmICh2aWZpKzEgPiBtYXh2aWYpCi0JCW1heHZpZiA9IHZpZmkrMTsKKwlpZiAodmlmaSsxID4gbmV0LT5pcHY0Lm1heHZpZikKKwkJbmV0LT5pcHY0Lm1heHZpZiA9IHZpZmkrMTsKIAl3cml0ZV91bmxvY2tfYmgoJm1ydF9sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBtZmNfY2FjaGUgKmlwbXJfY2FjaGVfZmluZChfX2JlMzIgb3JpZ2luLCBfX2JlMzIgbWNhc3RncnApCitzdGF0aWMgc3RydWN0IG1mY19jYWNoZSAqaXBtcl9jYWNoZV9maW5kKHN0cnVjdCBuZXQgKm5ldCwKKwkJCQkJIF9fYmUzMiBvcmlnaW4sCisJCQkJCSBfX2JlMzIgbWNhc3RncnApCiB7CiAJaW50IGxpbmUgPSBNRkNfSEFTSChtY2FzdGdycCwgb3JpZ2luKTsKIAlzdHJ1Y3QgbWZjX2NhY2hlICpjOwogCi0JZm9yIChjPW1mY19jYWNoZV9hcnJheVtsaW5lXTsgYzsgYyA9IGMtPm5leHQpIHsKKwlmb3IgKGMgPSBuZXQtPmlwdjQubWZjX2NhY2hlX2FycmF5W2xpbmVdOyBjOyBjID0gYy0+bmV4dCkgewogCQlpZiAoYy0+bWZjX29yaWdpbj09b3JpZ2luICYmIGMtPm1mY19tY2FzdGdycD09bWNhc3RncnApCiAJCQlicmVhazsKIAl9CkBAIC01MzMsMjIgKzUzNywyNCBAQAogLyoKICAqCUFsbG9jYXRlIGEgbXVsdGljYXN0IGNhY2hlIGVudHJ5CiAgKi8KLXN0YXRpYyBzdHJ1Y3QgbWZjX2NhY2hlICppcG1yX2NhY2hlX2FsbG9jKHZvaWQpCitzdGF0aWMgc3RydWN0IG1mY19jYWNoZSAqaXBtcl9jYWNoZV9hbGxvYyhzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJc3RydWN0IG1mY19jYWNoZSAqYyA9IGttZW1fY2FjaGVfemFsbG9jKG1ydF9jYWNoZXAsIEdGUF9LRVJORUwpOwogCWlmIChjID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwogCWMtPm1mY191bi5yZXMubWludmlmID0gTUFYVklGUzsKKwltZmNfbmV0X3NldChjLCBuZXQpOwogCXJldHVybiBjOwogfQogCi1zdGF0aWMgc3RydWN0IG1mY19jYWNoZSAqaXBtcl9jYWNoZV9hbGxvY191bnJlcyh2b2lkKQorc3RhdGljIHN0cnVjdCBtZmNfY2FjaGUgKmlwbXJfY2FjaGVfYWxsb2NfdW5yZXMoc3RydWN0IG5ldCAqbmV0KQogewogCXN0cnVjdCBtZmNfY2FjaGUgKmMgPSBrbWVtX2NhY2hlX3phbGxvYyhtcnRfY2FjaGVwLCBHRlBfQVRPTUlDKTsKIAlpZiAoYyA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKIAlza2JfcXVldWVfaGVhZF9pbml0KCZjLT5tZmNfdW4udW5yZXMudW5yZXNvbHZlZCk7CiAJYy0+bWZjX3VuLnVucmVzLmV4cGlyZXMgPSBqaWZmaWVzICsgMTAqSFo7CisJbWZjX25ldF9zZXQoYywgbmV0KTsKIAlyZXR1cm4gYzsKIH0KIApAQCAtNTgxLDcgKzU4Nyw3IEBACiAJCQkJbWVtc2V0KCZlLT5tc2csIDAsIHNpemVvZihlLT5tc2cpKTsKIAkJCX0KIAotCQkJcnRubF91bmljYXN0KHNrYiwgJmluaXRfbmV0LCBORVRMSU5LX0NCKHNrYikucGlkKTsKKwkJCXJ0bmxfdW5pY2FzdChza2IsIG1mY19uZXQoYyksIE5FVExJTktfQ0Ioc2tiKS5waWQpOwogCQl9IGVsc2UKIAkJCWlwX21yX2ZvcndhcmQoc2tiLCBjLCAwKTsKIAl9CkBAIC01OTQsNyArNjAwLDggQEAKICAqCUNhbGxlZCB1bmRlciBtcnRfbG9jay4KICAqLwogCi1zdGF0aWMgaW50IGlwbXJfY2FjaGVfcmVwb3J0KHN0cnVjdCBza19idWZmICpwa3QsIHZpZmlfdCB2aWZpLCBpbnQgYXNzZXJ0KQorc3RhdGljIGludCBpcG1yX2NhY2hlX3JlcG9ydChzdHJ1Y3QgbmV0ICpuZXQsCisJCQkgICAgIHN0cnVjdCBza19idWZmICpwa3QsIHZpZmlfdCB2aWZpLCBpbnQgYXNzZXJ0KQogewogCXN0cnVjdCBza19idWZmICpza2I7CiAJY29uc3QgaW50IGlobCA9IGlwX2hkcmxlbihwa3QpOwpAQCAtNjI2LDcgKzYzMyw3IEBACiAJCW1lbWNweShtc2csIHNrYl9uZXR3b3JrX2hlYWRlcihwa3QpLCBzaXplb2Yoc3RydWN0IGlwaGRyKSk7CiAJCW1zZy0+aW1fbXNndHlwZSA9IElHTVBNU0dfV0hPTEVQS1Q7CiAJCW1zZy0+aW1fbWJ6ID0gMDsKLQkJbXNnLT5pbV92aWYgPSByZWdfdmlmX251bTsKKwkJbXNnLT5pbV92aWYgPSBuZXQtPmlwdjQubXJvdXRlX3JlZ192aWZfbnVtOwogCQlpcF9oZHIoc2tiKS0+aWhsID0gc2l6ZW9mKHN0cnVjdCBpcGhkcikgPj4gMjsKIAkJaXBfaGRyKHNrYiktPnRvdF9sZW4gPSBodG9ucyhudG9ocyhpcF9oZHIocGt0KS0+dG90X2xlbikgKwogCQkJCQkgICAgIHNpemVvZihzdHJ1Y3QgaXBoZHIpKTsKQEAgLTY1OCw3ICs2NjUsNyBAQAogCXNrYi0+dHJhbnNwb3J0X2hlYWRlciA9IHNrYi0+bmV0d29ya19oZWFkZXI7CiAJfQogCi0JaWYgKG1yb3V0ZV9zb2NrZXQgPT0gTlVMTCkgeworCWlmIChuZXQtPmlwdjQubXJvdXRlX3NrID09IE5VTEwpIHsKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTY2Niw3ICs2NzMsOCBAQAogCS8qCiAJICoJRGVsaXZlciB0byBtcm91dGVkCiAJICovCi0JaWYgKChyZXQgPSBzb2NrX3F1ZXVlX3Jjdl9za2IobXJvdXRlX3NvY2tldCwgc2tiKSk8MCkgeworCXJldCA9IHNvY2tfcXVldWVfcmN2X3NrYihuZXQtPmlwdjQubXJvdXRlX3NrLCBza2IpOworCWlmIChyZXQgPCAwKSB7CiAJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJtcm91dGU6IHBlbmRpbmcgcXVldWUgZnVsbCwgZHJvcHBpbmcgZW50cmllcy5cbiIpOwogCQlrZnJlZV9za2Ioc2tiKTsKQEAgLTY4MCw3ICs2ODgsNyBAQAogICovCiAKIHN0YXRpYyBpbnQKLWlwbXJfY2FjaGVfdW5yZXNvbHZlZCh2aWZpX3QgdmlmaSwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK2lwbXJfY2FjaGVfdW5yZXNvbHZlZChzdHJ1Y3QgbmV0ICpuZXQsIHZpZmlfdCB2aWZpLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCWludCBlcnI7CiAJc3RydWN0IG1mY19jYWNoZSAqYzsKQEAgLTY4OCw3ICs2OTYsOCBAQAogCiAJc3Bpbl9sb2NrX2JoKCZtZmNfdW5yZXNfbG9jayk7CiAJZm9yIChjPW1mY191bnJlc19xdWV1ZTsgYzsgYz1jLT5uZXh0KSB7Ci0JCWlmIChjLT5tZmNfbWNhc3RncnAgPT0gaXBoLT5kYWRkciAmJgorCQlpZiAobmV0X2VxKG1mY19uZXQoYyksIG5ldCkgJiYKKwkJICAgIGMtPm1mY19tY2FzdGdycCA9PSBpcGgtPmRhZGRyICYmCiAJCSAgICBjLT5tZmNfb3JpZ2luID09IGlwaC0+c2FkZHIpCiAJCQlicmVhazsKIAl9CkBAIC02OTgsOCArNzA3LDggQEAKIAkJICoJQ3JlYXRlIGEgbmV3IGVudHJ5IGlmIGFsbG93YWJsZQogCQkgKi8KIAotCQlpZiAoYXRvbWljX3JlYWQoJmNhY2hlX3Jlc29sdmVfcXVldWVfbGVuKSA+PSAxMCB8fAotCQkgICAgKGM9aXBtcl9jYWNoZV9hbGxvY191bnJlcygpKT09TlVMTCkgeworCQlpZiAoYXRvbWljX3JlYWQoJm5ldC0+aXB2NC5jYWNoZV9yZXNvbHZlX3F1ZXVlX2xlbikgPj0gMTAgfHwKKwkJICAgIChjID0gaXBtcl9jYWNoZV9hbGxvY191bnJlcyhuZXQpKSA9PSBOVUxMKSB7CiAJCQlzcGluX3VubG9ja19iaCgmbWZjX3VucmVzX2xvY2spOwogCiAJCQlrZnJlZV9za2Ioc2tiKTsKQEAgLTcxNiwxOCArNzI1LDE5IEBACiAJCS8qCiAJCSAqCVJlZmxlY3QgZmlyc3QgcXVlcnkgYXQgbXJvdXRlZC4KIAkJICovCi0JCWlmICgoZXJyID0gaXBtcl9jYWNoZV9yZXBvcnQoc2tiLCB2aWZpLCBJR01QTVNHX05PQ0FDSEUpKTwwKSB7CisJCWVyciA9IGlwbXJfY2FjaGVfcmVwb3J0KG5ldCwgc2tiLCB2aWZpLCBJR01QTVNHX05PQ0FDSEUpOworCQlpZiAoZXJyIDwgMCkgewogCQkJLyogSWYgdGhlIHJlcG9ydCBmYWlsZWQgdGhyb3cgdGhlIGNhY2hlIGVudHJ5CiAJCQkgICBvdXQgLSBCcmFkIFBhcmtlcgogCQkJICovCiAJCQlzcGluX3VubG9ja19iaCgmbWZjX3VucmVzX2xvY2spOwogCi0JCQlrbWVtX2NhY2hlX2ZyZWUobXJ0X2NhY2hlcCwgYyk7CisJCQlpcG1yX2NhY2hlX2ZyZWUoYyk7CiAJCQlrZnJlZV9za2Ioc2tiKTsKIAkJCXJldHVybiBlcnI7CiAJCX0KIAotCQlhdG9taWNfaW5jKCZjYWNoZV9yZXNvbHZlX3F1ZXVlX2xlbik7CisJCWF0b21pY19pbmMoJm5ldC0+aXB2NC5jYWNoZV9yZXNvbHZlX3F1ZXVlX2xlbik7CiAJCWMtPm5leHQgPSBtZmNfdW5yZXNfcXVldWU7CiAJCW1mY191bnJlc19xdWV1ZSA9IGM7CiAKQEAgLTc1MywzNSArNzYzLDM3IEBACiAgKglNRkMgY2FjaGUgbWFuaXB1bGF0aW9uIGJ5IHVzZXIgc3BhY2UgbXJvdXRlIGRhZW1vbgogICovCiAKLXN0YXRpYyBpbnQgaXBtcl9tZmNfZGVsZXRlKHN0cnVjdCBtZmNjdGwgKm1mYykKK3N0YXRpYyBpbnQgaXBtcl9tZmNfZGVsZXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG1mY2N0bCAqbWZjKQogewogCWludCBsaW5lOwogCXN0cnVjdCBtZmNfY2FjaGUgKmMsICoqY3A7CiAKIAlsaW5lID0gTUZDX0hBU0gobWZjLT5tZmNjX21jYXN0Z3JwLnNfYWRkciwgbWZjLT5tZmNjX29yaWdpbi5zX2FkZHIpOwogCi0JZm9yIChjcD0mbWZjX2NhY2hlX2FycmF5W2xpbmVdOyAoYz0qY3ApICE9IE5VTEw7IGNwID0gJmMtPm5leHQpIHsKKwlmb3IgKGNwID0gJm5ldC0+aXB2NC5tZmNfY2FjaGVfYXJyYXlbbGluZV07CisJICAgICAoYyA9ICpjcCkgIT0gTlVMTDsgY3AgPSAmYy0+bmV4dCkgewogCQlpZiAoYy0+bWZjX29yaWdpbiA9PSBtZmMtPm1mY2Nfb3JpZ2luLnNfYWRkciAmJgogCQkgICAgYy0+bWZjX21jYXN0Z3JwID09IG1mYy0+bWZjY19tY2FzdGdycC5zX2FkZHIpIHsKIAkJCXdyaXRlX2xvY2tfYmgoJm1ydF9sb2NrKTsKIAkJCSpjcCA9IGMtPm5leHQ7CiAJCQl3cml0ZV91bmxvY2tfYmgoJm1ydF9sb2NrKTsKIAotCQkJa21lbV9jYWNoZV9mcmVlKG1ydF9jYWNoZXAsIGMpOworCQkJaXBtcl9jYWNoZV9mcmVlKGMpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAl9CiAJcmV0dXJuIC1FTk9FTlQ7CiB9CiAKLXN0YXRpYyBpbnQgaXBtcl9tZmNfYWRkKHN0cnVjdCBtZmNjdGwgKm1mYywgaW50IG1ydHNvY2spCitzdGF0aWMgaW50IGlwbXJfbWZjX2FkZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBtZmNjdGwgKm1mYywgaW50IG1ydHNvY2spCiB7CiAJaW50IGxpbmU7CiAJc3RydWN0IG1mY19jYWNoZSAqdWMsICpjLCAqKmNwOwogCiAJbGluZSA9IE1GQ19IQVNIKG1mYy0+bWZjY19tY2FzdGdycC5zX2FkZHIsIG1mYy0+bWZjY19vcmlnaW4uc19hZGRyKTsKIAotCWZvciAoY3A9Jm1mY19jYWNoZV9hcnJheVtsaW5lXTsgKGM9KmNwKSAhPSBOVUxMOyBjcCA9ICZjLT5uZXh0KSB7CisJZm9yIChjcCA9ICZuZXQtPmlwdjQubWZjX2NhY2hlX2FycmF5W2xpbmVdOworCSAgICAgKGMgPSAqY3ApICE9IE5VTEw7IGNwID0gJmMtPm5leHQpIHsKIAkJaWYgKGMtPm1mY19vcmlnaW4gPT0gbWZjLT5tZmNjX29yaWdpbi5zX2FkZHIgJiYKIAkJICAgIGMtPm1mY19tY2FzdGdycCA9PSBtZmMtPm1mY2NfbWNhc3RncnAuc19hZGRyKQogCQkJYnJlYWs7CkBAIC04MDAsNyArODEyLDcgQEAKIAlpZiAoIWlwdjRfaXNfbXVsdGljYXN0KG1mYy0+bWZjY19tY2FzdGdycC5zX2FkZHIpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWMgPSBpcG1yX2NhY2hlX2FsbG9jKCk7CisJYyA9IGlwbXJfY2FjaGVfYWxsb2MobmV0KTsKIAlpZiAoYyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtODEyLDggKzgyNCw4IEBACiAJCWMtPm1mY19mbGFncyB8PSBNRkNfU1RBVElDOwogCiAJd3JpdGVfbG9ja19iaCgmbXJ0X2xvY2spOwotCWMtPm5leHQgPSBtZmNfY2FjaGVfYXJyYXlbbGluZV07Ci0JbWZjX2NhY2hlX2FycmF5W2xpbmVdID0gYzsKKwljLT5uZXh0ID0gbmV0LT5pcHY0Lm1mY19jYWNoZV9hcnJheVtsaW5lXTsKKwluZXQtPmlwdjQubWZjX2NhY2hlX2FycmF5W2xpbmVdID0gYzsKIAl3cml0ZV91bmxvY2tfYmgoJm1ydF9sb2NrKTsKIAogCS8qCkBAIC04MjMsMTkgKzgzNSwyMSBAQAogCXNwaW5fbG9ja19iaCgmbWZjX3VucmVzX2xvY2spOwogCWZvciAoY3AgPSAmbWZjX3VucmVzX3F1ZXVlOyAodWM9KmNwKSAhPSBOVUxMOwogCSAgICAgY3AgPSAmdWMtPm5leHQpIHsKLQkJaWYgKHVjLT5tZmNfb3JpZ2luID09IGMtPm1mY19vcmlnaW4gJiYKKwkJaWYgKG5ldF9lcShtZmNfbmV0KHVjKSwgbmV0KSAmJgorCQkgICAgdWMtPm1mY19vcmlnaW4gPT0gYy0+bWZjX29yaWdpbiAmJgogCQkgICAgdWMtPm1mY19tY2FzdGdycCA9PSBjLT5tZmNfbWNhc3RncnApIHsKIAkJCSpjcCA9IHVjLT5uZXh0OwotCQkJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmNhY2hlX3Jlc29sdmVfcXVldWVfbGVuKSkKLQkJCQlkZWxfdGltZXIoJmlwbXJfZXhwaXJlX3RpbWVyKTsKKwkJCWF0b21pY19kZWMoJm5ldC0+aXB2NC5jYWNoZV9yZXNvbHZlX3F1ZXVlX2xlbik7CiAJCQlicmVhazsKIAkJfQogCX0KKwlpZiAobWZjX3VucmVzX3F1ZXVlID09IE5VTEwpCisJCWRlbF90aW1lcigmaXBtcl9leHBpcmVfdGltZXIpOwogCXNwaW5fdW5sb2NrX2JoKCZtZmNfdW5yZXNfbG9jayk7CiAKIAlpZiAodWMpIHsKIAkJaXBtcl9jYWNoZV9yZXNvbHZlKHVjLCBjKTsKLQkJa21lbV9jYWNoZV9mcmVlKG1ydF9jYWNoZXAsIHVjKTsKKwkJaXBtcl9jYWNoZV9mcmVlKHVjKTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC04NDQsMTYgKzg1OCwxNiBAQAogICoJQ2xvc2UgdGhlIG11bHRpY2FzdCBzb2NrZXQsIGFuZCBjbGVhciB0aGUgdmlmIHRhYmxlcyBldGMKICAqLwogCi1zdGF0aWMgdm9pZCBtcm91dGVfY2xlYW5fdGFibGVzKHN0cnVjdCBzb2NrICpzaykKK3N0YXRpYyB2b2lkIG1yb3V0ZV9jbGVhbl90YWJsZXMoc3RydWN0IG5ldCAqbmV0KQogewogCWludCBpOwogCiAJLyoKIAkgKglTaHV0IGRvd24gYWxsIGFjdGl2ZSB2aWYgZW50cmllcwogCSAqLwotCWZvciAoaT0wOyBpPG1heHZpZjsgaSsrKSB7Ci0JCWlmICghKHZpZl90YWJsZVtpXS5mbGFncyZWSUZGX1NUQVRJQykpCi0JCQl2aWZfZGVsZXRlKGksIDApOworCWZvciAoaSA9IDA7IGkgPCBuZXQtPmlwdjQubWF4dmlmOyBpKyspIHsKKwkJaWYgKCEobmV0LT5pcHY0LnZpZl90YWJsZVtpXS5mbGFncyZWSUZGX1NUQVRJQykpCisJCQl2aWZfZGVsZXRlKG5ldCwgaSwgMCk7CiAJfQogCiAJLyoKQEAgLTg2Miw3ICs4NzYsNyBAQAogCWZvciAoaT0wOyBpPE1GQ19MSU5FUzsgaSsrKSB7CiAJCXN0cnVjdCBtZmNfY2FjaGUgKmMsICoqY3A7CiAKLQkJY3AgPSAmbWZjX2NhY2hlX2FycmF5W2ldOworCQljcCA9ICZuZXQtPmlwdjQubWZjX2NhY2hlX2FycmF5W2ldOwogCQl3aGlsZSAoKGMgPSAqY3ApICE9IE5VTEwpIHsKIAkJCWlmIChjLT5tZmNfZmxhZ3MmTUZDX1NUQVRJQykgewogCQkJCWNwID0gJmMtPm5leHQ7CkBAIC04NzIsMjIgKzg4NiwyMyBAQAogCQkJKmNwID0gYy0+bmV4dDsKIAkJCXdyaXRlX3VubG9ja19iaCgmbXJ0X2xvY2spOwogCi0JCQlrbWVtX2NhY2hlX2ZyZWUobXJ0X2NhY2hlcCwgYyk7CisJCQlpcG1yX2NhY2hlX2ZyZWUoYyk7CiAJCX0KIAl9CiAKLQlpZiAoYXRvbWljX3JlYWQoJmNhY2hlX3Jlc29sdmVfcXVldWVfbGVuKSAhPSAwKSB7Ci0JCXN0cnVjdCBtZmNfY2FjaGUgKmM7CisJaWYgKGF0b21pY19yZWFkKCZuZXQtPmlwdjQuY2FjaGVfcmVzb2x2ZV9xdWV1ZV9sZW4pICE9IDApIHsKKwkJc3RydWN0IG1mY19jYWNoZSAqYywgKipjcDsKIAogCQlzcGluX2xvY2tfYmgoJm1mY191bnJlc19sb2NrKTsKLQkJd2hpbGUgKG1mY191bnJlc19xdWV1ZSAhPSBOVUxMKSB7Ci0JCQljID0gbWZjX3VucmVzX3F1ZXVlOwotCQkJbWZjX3VucmVzX3F1ZXVlID0gYy0+bmV4dDsKLQkJCXNwaW5fdW5sb2NrX2JoKCZtZmNfdW5yZXNfbG9jayk7CisJCWNwID0gJm1mY191bnJlc19xdWV1ZTsKKwkJd2hpbGUgKChjID0gKmNwKSAhPSBOVUxMKSB7CisJCQlpZiAoIW5ldF9lcShtZmNfbmV0KGMpLCBuZXQpKSB7CisJCQkJY3AgPSAmYy0+bmV4dDsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCSpjcCA9IGMtPm5leHQ7CiAKIAkJCWlwbXJfZGVzdHJveV91bnJlcyhjKTsKLQotCQkJc3Bpbl9sb2NrX2JoKCZtZmNfdW5yZXNfbG9jayk7CiAJCX0KIAkJc3Bpbl91bmxvY2tfYmgoJm1mY191bnJlc19sb2NrKTsKIAl9CkBAIC04OTUsMTUgKzkxMCwxNyBAQAogCiBzdGF0aWMgdm9pZCBtcnRzb2NrX2Rlc3RydWN0KHN0cnVjdCBzb2NrICpzaykKIHsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7CisKIAlydG5sX2xvY2soKTsKLQlpZiAoc2sgPT0gbXJvdXRlX3NvY2tldCkgewotCQlJUFY0X0RFVkNPTkZfQUxMKHNvY2tfbmV0KHNrKSwgTUNfRk9SV0FSRElORyktLTsKKwlpZiAoc2sgPT0gbmV0LT5pcHY0Lm1yb3V0ZV9zaykgeworCQlJUFY0X0RFVkNPTkZfQUxMKG5ldCwgTUNfRk9SV0FSRElORyktLTsKIAogCQl3cml0ZV9sb2NrX2JoKCZtcnRfbG9jayk7Ci0JCW1yb3V0ZV9zb2NrZXQgPSBOVUxMOworCQluZXQtPmlwdjQubXJvdXRlX3NrID0gTlVMTDsKIAkJd3JpdGVfdW5sb2NrX2JoKCZtcnRfbG9jayk7CiAKLQkJbXJvdXRlX2NsZWFuX3RhYmxlcyhzayk7CisJCW1yb3V0ZV9jbGVhbl90YWJsZXMobmV0KTsKIAl9CiAJcnRubF91bmxvY2soKTsKIH0KQEAgLTkyMCw5ICs5MzcsMTAgQEAKIAlpbnQgcmV0OwogCXN0cnVjdCB2aWZjdGwgdmlmOwogCXN0cnVjdCBtZmNjdGwgbWZjOworCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTsKIAogCWlmIChvcHRuYW1lICE9IE1SVF9JTklUKSB7Ci0JCWlmIChzayAhPSBtcm91dGVfc29ja2V0ICYmICFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQorCQlpZiAoc2sgIT0gbmV0LT5pcHY0Lm1yb3V0ZV9zayAmJiAhY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKIAkJCXJldHVybiAtRUFDQ0VTOwogCX0KIApAQCAtOTM1LDcgKzk1Myw3IEBACiAJCQlyZXR1cm4gLUVOT1BST1RPT1BUOwogCiAJCXJ0bmxfbG9jaygpOwotCQlpZiAobXJvdXRlX3NvY2tldCkgeworCQlpZiAobmV0LT5pcHY0Lm1yb3V0ZV9zaykgewogCQkJcnRubF91bmxvY2soKTsKIAkJCXJldHVybiAtRUFERFJJTlVTRTsKIAkJfQpAQCAtOTQzLDE1ICs5NjEsMTUgQEAKIAkJcmV0ID0gaXBfcmFfY29udHJvbChzaywgMSwgbXJ0c29ja19kZXN0cnVjdCk7CiAJCWlmIChyZXQgPT0gMCkgewogCQkJd3JpdGVfbG9ja19iaCgmbXJ0X2xvY2spOwotCQkJbXJvdXRlX3NvY2tldCA9IHNrOworCQkJbmV0LT5pcHY0Lm1yb3V0ZV9zayA9IHNrOwogCQkJd3JpdGVfdW5sb2NrX2JoKCZtcnRfbG9jayk7CiAKLQkJCUlQVjRfREVWQ09ORl9BTEwoc29ja19uZXQoc2spLCBNQ19GT1JXQVJESU5HKSsrOworCQkJSVBWNF9ERVZDT05GX0FMTChuZXQsIE1DX0ZPUldBUkRJTkcpKys7CiAJCX0KIAkJcnRubF91bmxvY2soKTsKIAkJcmV0dXJuIHJldDsKIAljYXNlIE1SVF9ET05FOgotCQlpZiAoc2sgIT0gbXJvdXRlX3NvY2tldCkKKwkJaWYgKHNrICE9IG5ldC0+aXB2NC5tcm91dGVfc2spCiAJCQlyZXR1cm4gLUVBQ0NFUzsKIAkJcmV0dXJuIGlwX3JhX2NvbnRyb2woc2ssIDAsIE5VTEwpOwogCWNhc2UgTVJUX0FERF9WSUY6CkBAIC05NjQsOSArOTgyLDkgQEAKIAkJCXJldHVybiAtRU5GSUxFOwogCQlydG5sX2xvY2soKTsKIAkJaWYgKG9wdG5hbWUgPT0gTVJUX0FERF9WSUYpIHsKLQkJCXJldCA9IHZpZl9hZGQoJnZpZiwgc2s9PW1yb3V0ZV9zb2NrZXQpOworCQkJcmV0ID0gdmlmX2FkZChuZXQsICZ2aWYsIHNrID09IG5ldC0+aXB2NC5tcm91dGVfc2spOwogCQl9IGVsc2UgewotCQkJcmV0ID0gdmlmX2RlbGV0ZSh2aWYudmlmY192aWZpLCAwKTsKKwkJCXJldCA9IHZpZl9kZWxldGUobmV0LCB2aWYudmlmY192aWZpLCAwKTsKIAkJfQogCQlydG5sX3VubG9jaygpOwogCQlyZXR1cm4gcmV0OwpAQCAtOTgzLDkgKzEwMDEsOSBAQAogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCXJ0bmxfbG9jaygpOwogCQlpZiAob3B0bmFtZSA9PSBNUlRfREVMX01GQykKLQkJCXJldCA9IGlwbXJfbWZjX2RlbGV0ZSgmbWZjKTsKKwkJCXJldCA9IGlwbXJfbWZjX2RlbGV0ZShuZXQsICZtZmMpOwogCQllbHNlCi0JCQlyZXQgPSBpcG1yX21mY19hZGQoJm1mYywgc2s9PW1yb3V0ZV9zb2NrZXQpOworCQkJcmV0ID0gaXBtcl9tZmNfYWRkKG5ldCwgJm1mYywgc2sgPT0gbmV0LT5pcHY0Lm1yb3V0ZV9zayk7CiAJCXJ0bmxfdW5sb2NrKCk7CiAJCXJldHVybiByZXQ7CiAJCS8qCkBAIC05OTYsNyArMTAxNCw3IEBACiAJCWludCB2OwogCQlpZiAoZ2V0X3VzZXIodiwoaW50IF9fdXNlciAqKW9wdHZhbCkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKLQkJbXJvdXRlX2RvX2Fzc2VydD0odik/MTowOworCQluZXQtPmlwdjQubXJvdXRlX2RvX2Fzc2VydCA9ICh2KSA/IDEgOiAwOwogCQlyZXR1cm4gMDsKIAl9CiAjaWZkZWYgQ09ORklHX0lQX1BJTVNNCkBAIC0xMDEwLDExICsxMDI4LDExIEBACiAKIAkJcnRubF9sb2NrKCk7CiAJCXJldCA9IDA7Ci0JCWlmICh2ICE9IG1yb3V0ZV9kb19waW0pIHsKLQkJCW1yb3V0ZV9kb19waW0gPSB2OwotCQkJbXJvdXRlX2RvX2Fzc2VydCA9IHY7CisJCWlmICh2ICE9IG5ldC0+aXB2NC5tcm91dGVfZG9fcGltKSB7CisJCQluZXQtPmlwdjQubXJvdXRlX2RvX3BpbSA9IHY7CisJCQluZXQtPmlwdjQubXJvdXRlX2RvX2Fzc2VydCA9IHY7CiAjaWZkZWYgQ09ORklHX0lQX1BJTVNNX1YyCi0JCQlpZiAobXJvdXRlX2RvX3BpbSkKKwkJCWlmIChuZXQtPmlwdjQubXJvdXRlX2RvX3BpbSkKIAkJCQlyZXQgPSBpbmV0X2FkZF9wcm90b2NvbCgmcGltX3Byb3RvY29sLAogCQkJCQkJCUlQUFJPVE9fUElNKTsKIAkJCWVsc2UKQEAgLTEwNDUsNiArMTA2Myw3IEBACiB7CiAJaW50IG9scjsKIAlpbnQgdmFsOworCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTsKIAogCWlmIChvcHRuYW1lICE9IE1SVF9WRVJTSU9OICYmCiAjaWZkZWYgQ09ORklHX0lQX1BJTVNNCkBAIC0xMDY2LDEwICsxMDg1LDEwIEBACiAJCXZhbCA9IDB4MDMwNTsKICNpZmRlZiBDT05GSUdfSVBfUElNU00KIAllbHNlIGlmIChvcHRuYW1lID09IE1SVF9QSU0pCi0JCXZhbCA9IG1yb3V0ZV9kb19waW07CisJCXZhbCA9IG5ldC0+aXB2NC5tcm91dGVfZG9fcGltOwogI2VuZGlmCiAJZWxzZQotCQl2YWwgPSBtcm91dGVfZG9fYXNzZXJ0OworCQl2YWwgPSBuZXQtPmlwdjQubXJvdXRlX2RvX2Fzc2VydDsKIAlpZiAoY29weV90b191c2VyKG9wdHZhbCwgJnZhbCwgb2xyKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJcmV0dXJuIDA7CkBAIC0xMDg1LDE2ICsxMTA0LDE3IEBACiAJc3RydWN0IHNpb2NfdmlmX3JlcSB2cjsKIAlzdHJ1Y3QgdmlmX2RldmljZSAqdmlmOwogCXN0cnVjdCBtZmNfY2FjaGUgKmM7CisJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spOwogCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFNJT0NHRVRWSUZDTlQ6CiAJCWlmIChjb3B5X2Zyb21fdXNlcigmdnIsIGFyZywgc2l6ZW9mKHZyKSkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKLQkJaWYgKHZyLnZpZmkgPj0gbWF4dmlmKQorCQlpZiAodnIudmlmaSA+PSBuZXQtPmlwdjQubWF4dmlmKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCXJlYWRfbG9jaygmbXJ0X2xvY2spOwotCQl2aWY9JnZpZl90YWJsZVt2ci52aWZpXTsKLQkJaWYgKFZJRl9FWElTVFModnIudmlmaSkpCXsKKwkJdmlmID0gJm5ldC0+aXB2NC52aWZfdGFibGVbdnIudmlmaV07CisJCWlmIChWSUZfRVhJU1RTKG5ldCwgdnIudmlmaSkpIHsKIAkJCXZyLmljb3VudCA9IHZpZi0+cGt0X2luOwogCQkJdnIub2NvdW50ID0gdmlmLT5wa3Rfb3V0OwogCQkJdnIuaWJ5dGVzID0gdmlmLT5ieXRlc19pbjsKQEAgLTExMTIsNyArMTEzMiw3IEBACiAJCQlyZXR1cm4gLUVGQVVMVDsKIAogCQlyZWFkX2xvY2soJm1ydF9sb2NrKTsKLQkJYyA9IGlwbXJfY2FjaGVfZmluZChzci5zcmMuc19hZGRyLCBzci5ncnAuc19hZGRyKTsKKwkJYyA9IGlwbXJfY2FjaGVfZmluZChuZXQsIHNyLnNyYy5zX2FkZHIsIHNyLmdycC5zX2FkZHIpOwogCQlpZiAoYykgewogCQkJc3IucGt0Y250ID0gYy0+bWZjX3VuLnJlcy5wa3Q7CiAJCQlzci5ieXRlY250ID0gYy0+bWZjX3VuLnJlcy5ieXRlczsKQEAgLTExMzQsMTggKzExNTQsMTkgQEAKIHN0YXRpYyBpbnQgaXBtcl9kZXZpY2VfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHB0cjsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGRldik7CiAJc3RydWN0IHZpZl9kZXZpY2UgKnY7CiAJaW50IGN0OwogCi0JaWYgKCFuZXRfZXEoZGV2X25ldChkZXYpLCAmaW5pdF9uZXQpKQorCWlmICghbmV0X2VxKGRldl9uZXQoZGV2KSwgbmV0KSkKIAkJcmV0dXJuIE5PVElGWV9ET05FOwogCiAJaWYgKGV2ZW50ICE9IE5FVERFVl9VTlJFR0lTVEVSKQogCQlyZXR1cm4gTk9USUZZX0RPTkU7Ci0Jdj0mdmlmX3RhYmxlWzBdOwotCWZvciAoY3Q9MDsgY3Q8bWF4dmlmOyBjdCsrLHYrKykgeworCXYgPSAmbmV0LT5pcHY0LnZpZl90YWJsZVswXTsKKwlmb3IgKGN0ID0gMDsgY3QgPCBuZXQtPmlwdjQubWF4dmlmOyBjdCsrLCB2KyspIHsKIAkJaWYgKHYtPmRldiA9PSBkZXYpCi0JCQl2aWZfZGVsZXRlKGN0LCAxKTsKKwkJCXZpZl9kZWxldGUobmV0LCBjdCwgMSk7CiAJfQogCXJldHVybiBOT1RJRllfRE9ORTsKIH0KQEAgLTEyMDUsOCArMTIyNiw5IEBACiAKIHN0YXRpYyB2b2lkIGlwbXJfcXVldWVfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbWZjX2NhY2hlICpjLCBpbnQgdmlmaSkKIHsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBtZmNfbmV0KGMpOwogCWNvbnN0IHN0cnVjdCBpcGhkciAqaXBoID0gaXBfaGRyKHNrYik7Ci0Jc3RydWN0IHZpZl9kZXZpY2UgKnZpZiA9ICZ2aWZfdGFibGVbdmlmaV07CisJc3RydWN0IHZpZl9kZXZpY2UgKnZpZiA9ICZuZXQtPmlwdjQudmlmX3RhYmxlW3ZpZmldOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IHJ0YWJsZSAqcnQ7CiAJaW50ICAgIGVuY2FwID0gMDsKQEAgLTEyMjAsOSArMTI0Miw4IEBACiAJCXZpZi0+Ynl0ZXNfb3V0ICs9IHNrYi0+bGVuOwogCQl2aWYtPmRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CiAJCXZpZi0+ZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7Ci0JCWlwbXJfY2FjaGVfcmVwb3J0KHNrYiwgdmlmaSwgSUdNUE1TR19XSE9MRVBLVCk7Ci0JCWtmcmVlX3NrYihza2IpOwotCQlyZXR1cm47CisJCWlwbXJfY2FjaGVfcmVwb3J0KG5ldCwgc2tiLCB2aWZpLCBJR01QTVNHX1dIT0xFUEtUKTsKKwkJZ290byBvdXRfZnJlZTsKIAl9CiAjZW5kaWYKIApAQCAtMTIzMyw3ICsxMjU0LDcgQEAKIAkJCQkJCS5zYWRkciA9IHZpZi0+bG9jYWwsCiAJCQkJCQkudG9zID0gUlRfVE9TKGlwaC0+dG9zKSB9IH0sCiAJCQkJICAgIC5wcm90byA9IElQUFJPVE9fSVBJUCB9OwotCQlpZiAoaXBfcm91dGVfb3V0cHV0X2tleSgmaW5pdF9uZXQsICZydCwgJmZsKSkKKwkJaWYgKGlwX3JvdXRlX291dHB1dF9rZXkobmV0LCAmcnQsICZmbCkpCiAJCQlnb3RvIG91dF9mcmVlOwogCQllbmNhcCA9IHNpemVvZihzdHJ1Y3QgaXBoZHIpOwogCX0gZWxzZSB7CkBAIC0xMjQyLDcgKzEyNjMsNyBAQAogCQkJCQkgICAgICB7IC5kYWRkciA9IGlwaC0+ZGFkZHIsCiAJCQkJCQkudG9zID0gUlRfVE9TKGlwaC0+dG9zKSB9IH0sCiAJCQkJICAgIC5wcm90byA9IElQUFJPVE9fSVBJUCB9OwotCQlpZiAoaXBfcm91dGVfb3V0cHV0X2tleSgmaW5pdF9uZXQsICZydCwgJmZsKSkKKwkJaWYgKGlwX3JvdXRlX291dHB1dF9rZXkobmV0LCAmcnQsICZmbCkpCiAJCQlnb3RvIG91dF9mcmVlOwogCX0KIApAQCAtMTMwNiw5ICsxMzI3LDEwIEBACiAKIHN0YXRpYyBpbnQgaXBtcl9maW5kX3ZpZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogeworCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoZGV2KTsKIAlpbnQgY3Q7Ci0JZm9yIChjdD1tYXh2aWYtMTsgY3Q+PTA7IGN0LS0pIHsKLQkJaWYgKHZpZl90YWJsZVtjdF0uZGV2ID09IGRldikKKwlmb3IgKGN0ID0gbmV0LT5pcHY0Lm1heHZpZi0xOyBjdCA+PSAwOyBjdC0tKSB7CisJCWlmIChuZXQtPmlwdjQudmlmX3RhYmxlW2N0XS5kZXYgPT0gZGV2KQogCQkJYnJlYWs7CiAJfQogCXJldHVybiBjdDsKQEAgLTEzMjAsNiArMTM0Miw3IEBACiB7CiAJaW50IHBzZW5kID0gLTE7CiAJaW50IHZpZiwgY3Q7CisJc3RydWN0IG5ldCAqbmV0ID0gbWZjX25ldChjYWNoZSk7CiAKIAl2aWYgPSBjYWNoZS0+bWZjX3BhcmVudDsKIAljYWNoZS0+bWZjX3VuLnJlcy5wa3QrKzsKQEAgLTEzMjgsNyArMTM1MSw3IEBACiAJLyoKIAkgKiBXcm9uZyBpbnRlcmZhY2U6IGRyb3AgcGFja2V0IGFuZCAobWF5YmUpIHNlbmQgUElNIGFzc2VydC4KIAkgKi8KLQlpZiAodmlmX3RhYmxlW3ZpZl0uZGV2ICE9IHNrYi0+ZGV2KSB7CisJaWYgKG5ldC0+aXB2NC52aWZfdGFibGVbdmlmXS5kZXYgIT0gc2tiLT5kZXYpIHsKIAkJaW50IHRydWVfdmlmaTsKIAogCQlpZiAoc2tiLT5ydGFibGUtPmZsLmlpZiA9PSAwKSB7CkBAIC0xMzQ5LDIzICsxMzcyLDI0IEBACiAJCWNhY2hlLT5tZmNfdW4ucmVzLndyb25nX2lmKys7CiAJCXRydWVfdmlmaSA9IGlwbXJfZmluZF92aWYoc2tiLT5kZXYpOwogCi0JCWlmICh0cnVlX3ZpZmkgPj0gMCAmJiBtcm91dGVfZG9fYXNzZXJ0ICYmCisJCWlmICh0cnVlX3ZpZmkgPj0gMCAmJiBuZXQtPmlwdjQubXJvdXRlX2RvX2Fzc2VydCAmJgogCQkgICAgLyogcGltc20gdXNlcyBhc3NlcnRzLCB3aGVuIHN3aXRjaGluZyBmcm9tIFJQVCB0byBTUFQsCiAJCSAgICAgICBzbyB0aGF0IHdlIGNhbm5vdCBjaGVjayB0aGF0IHBhY2tldCBhcnJpdmVkIG9uIGFuIG9pZi4KIAkJICAgICAgIEl0IGlzIGJhZCwgYnV0IG90aGVyd2lzZSB3ZSB3b3VsZCBuZWVkIHRvIG1vdmUgcHJldHR5CiAJCSAgICAgICBsYXJnZSBjaHVuayBvZiBwaW1kIHRvIGtlcm5lbC4gT3VnaC4uLiAtLUFOSwogCQkgICAgICovCi0JCSAgICAobXJvdXRlX2RvX3BpbSB8fCBjYWNoZS0+bWZjX3VuLnJlcy50dGxzW3RydWVfdmlmaV0gPCAyNTUpICYmCisJCSAgICAobmV0LT5pcHY0Lm1yb3V0ZV9kb19waW0gfHwKKwkJICAgICBjYWNoZS0+bWZjX3VuLnJlcy50dGxzW3RydWVfdmlmaV0gPCAyNTUpICYmCiAJCSAgICB0aW1lX2FmdGVyKGppZmZpZXMsCiAJCQkgICAgICAgY2FjaGUtPm1mY191bi5yZXMubGFzdF9hc3NlcnQgKyBNRkNfQVNTRVJUX1RIUkVTSCkpIHsKIAkJCWNhY2hlLT5tZmNfdW4ucmVzLmxhc3RfYXNzZXJ0ID0gamlmZmllczsKLQkJCWlwbXJfY2FjaGVfcmVwb3J0KHNrYiwgdHJ1ZV92aWZpLCBJR01QTVNHX1dST05HVklGKTsKKwkJCWlwbXJfY2FjaGVfcmVwb3J0KG5ldCwgc2tiLCB0cnVlX3ZpZmksIElHTVBNU0dfV1JPTkdWSUYpOwogCQl9CiAJCWdvdG8gZG9udF9mb3J3YXJkOwogCX0KIAotCXZpZl90YWJsZVt2aWZdLnBrdF9pbisrOwotCXZpZl90YWJsZVt2aWZdLmJ5dGVzX2luICs9IHNrYi0+bGVuOworCW5ldC0+aXB2NC52aWZfdGFibGVbdmlmXS5wa3RfaW4rKzsKKwluZXQtPmlwdjQudmlmX3RhYmxlW3ZpZl0uYnl0ZXNfaW4gKz0gc2tiLT5sZW47CiAKIAkvKgogCSAqCUZvcndhcmQgdGhlIGZyYW1lCkBAIC0xNDA1LDYgKzE0MjksNyBAQAogaW50IGlwX21yX2lucHV0KHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IG1mY19jYWNoZSAqY2FjaGU7CisJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChza2ItPmRldik7CiAJaW50IGxvY2FsID0gc2tiLT5ydGFibGUtPnJ0X2ZsYWdzJlJUQ0ZfTE9DQUw7CiAKIAkvKiBQYWNrZXQgaXMgbG9vcGVkIGJhY2sgYWZ0ZXIgZm9yd2FyZCwgaXQgc2hvdWxkIG5vdCBiZQpAQCAtMTQyNSw5ICsxNDUwLDkgQEAKIAkJCSAgICAgICB0aGF0IHdlIGNhbiBmb3J3YXJkIE5PIElHTVAgbWVzc2FnZXMuCiAJCQkgICAgICovCiAJCQkgICAgcmVhZF9sb2NrKCZtcnRfbG9jayk7Ci0JCQkgICAgaWYgKG1yb3V0ZV9zb2NrZXQpIHsKKwkJCSAgICBpZiAobmV0LT5pcHY0Lm1yb3V0ZV9zaykgewogCQkJCSAgICBuZl9yZXNldChza2IpOwotCQkJCSAgICByYXdfcmN2KG1yb3V0ZV9zb2NrZXQsIHNrYik7CisJCQkJICAgIHJhd19yY3YobmV0LT5pcHY0Lm1yb3V0ZV9zaywgc2tiKTsKIAkJCQkgICAgcmVhZF91bmxvY2soJm1ydF9sb2NrKTsKIAkJCQkgICAgcmV0dXJuIDA7CiAJCQkgICAgfQpAQCAtMTQzNiw3ICsxNDYxLDcgQEAKIAl9CiAKIAlyZWFkX2xvY2soJm1ydF9sb2NrKTsKLQljYWNoZSA9IGlwbXJfY2FjaGVfZmluZChpcF9oZHIoc2tiKS0+c2FkZHIsIGlwX2hkcihza2IpLT5kYWRkcik7CisJY2FjaGUgPSBpcG1yX2NhY2hlX2ZpbmQobmV0LCBpcF9oZHIoc2tiKS0+c2FkZHIsIGlwX2hkcihza2IpLT5kYWRkcik7CiAKIAkvKgogCSAqCU5vIHVzYWJsZSBjYWNoZSBlbnRyeQpAQCAtMTQ1Niw3ICsxNDgxLDcgQEAKIAogCQl2aWYgPSBpcG1yX2ZpbmRfdmlmKHNrYi0+ZGV2KTsKIAkJaWYgKHZpZiA+PSAwKSB7Ci0JCQlpbnQgZXJyID0gaXBtcl9jYWNoZV91bnJlc29sdmVkKHZpZiwgc2tiKTsKKwkJCWludCBlcnIgPSBpcG1yX2NhY2hlX3VucmVzb2x2ZWQobmV0LCB2aWYsIHNrYik7CiAJCQlyZWFkX3VubG9jaygmbXJ0X2xvY2spOwogCiAJCQlyZXR1cm4gZXJyOwpAQCAtMTQ4Nyw2ICsxNTEyLDcgQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqcmVnX2RldiA9IE5VTEw7CiAJc3RydWN0IGlwaGRyICplbmNhcDsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYi0+ZGV2KTsKIAogCWVuY2FwID0gKHN0cnVjdCBpcGhkciAqKShza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpICsgcGltbGVuKTsKIAkvKgpAQCAtMTUwMSw4ICsxNTI3LDggQEAKIAkJcmV0dXJuIDE7CiAKIAlyZWFkX2xvY2soJm1ydF9sb2NrKTsKLQlpZiAocmVnX3ZpZl9udW0gPj0gMCkKLQkJcmVnX2RldiA9IHZpZl90YWJsZVtyZWdfdmlmX251bV0uZGV2OworCWlmIChuZXQtPmlwdjQubXJvdXRlX3JlZ192aWZfbnVtID49IDApCisJCXJlZ19kZXYgPSBuZXQtPmlwdjQudmlmX3RhYmxlW25ldC0+aXB2NC5tcm91dGVfcmVnX3ZpZl9udW1dLmRldjsKIAlpZiAocmVnX2RldikKIAkJZGV2X2hvbGQocmVnX2Rldik7CiAJcmVhZF91bmxvY2soJm1ydF9sb2NrKTsKQEAgLTE1MzcsMTMgKzE1NjMsMTQgQEAKIGludCBwaW1fcmN2X3YxKHN0cnVjdCBza19idWZmICogc2tiKQogewogCXN0cnVjdCBpZ21waGRyICpwaW07CisJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChza2ItPmRldik7CiAKIAlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2YoKnBpbSkgKyBzaXplb2Yoc3RydWN0IGlwaGRyKSkpCiAJCWdvdG8gZHJvcDsKIAogCXBpbSA9IGlnbXBfaGRyKHNrYik7CiAKLQlpZiAoIW1yb3V0ZV9kb19waW0gfHwKKwlpZiAoIW5ldC0+aXB2NC5tcm91dGVfZG9fcGltIHx8CiAJICAgIHBpbS0+Z3JvdXAgIT0gUElNX1YxX1ZFUlNJT04gfHwgcGltLT5jb2RlICE9IFBJTV9WMV9SRUdJU1RFUikKIAkJZ290byBkcm9wOwogCkBAIC0xNTgzLDcgKzE2MTAsOCBAQAogewogCWludCBjdDsKIAlzdHJ1Y3QgcnRuZXh0aG9wICpuaHA7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHZpZl90YWJsZVtjLT5tZmNfcGFyZW50XS5kZXY7CisJc3RydWN0IG5ldCAqbmV0ID0gbWZjX25ldChjKTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0LT5pcHY0LnZpZl90YWJsZVtjLT5tZmNfcGFyZW50XS5kZXY7CiAJdTggKmIgPSBza2JfdGFpbF9wb2ludGVyKHNrYik7CiAJc3RydWN0IHJ0YXR0ciAqbXBfaGVhZDsKIApAQCAtMTU5OSw3ICsxNjI3LDcgQEAKIAkJCW5ocCA9IChzdHJ1Y3QgcnRuZXh0aG9wICopc2tiX3B1dChza2IsIFJUQV9BTElHTihzaXplb2YoKm5ocCkpKTsKIAkJCW5ocC0+cnRuaF9mbGFncyA9IDA7CiAJCQluaHAtPnJ0bmhfaG9wcyA9IGMtPm1mY191bi5yZXMudHRsc1tjdF07Ci0JCQluaHAtPnJ0bmhfaWZpbmRleCA9IHZpZl90YWJsZVtjdF0uZGV2LT5pZmluZGV4OworCQkJbmhwLT5ydG5oX2lmaW5kZXggPSBuZXQtPmlwdjQudmlmX3RhYmxlW2N0XS5kZXYtPmlmaW5kZXg7CiAJCQluaHAtPnJ0bmhfbGVuID0gc2l6ZW9mKCpuaHApOwogCQl9CiAJfQpAQCAtMTYxMywxNCArMTY0MSwxNSBAQAogCXJldHVybiAtRU1TR1NJWkU7CiB9CiAKLWludCBpcG1yX2dldF9yb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgcnRtc2cgKnJ0bSwgaW50IG5vd2FpdCkKK2ludCBpcG1yX2dldF9yb3V0ZShzdHJ1Y3QgbmV0ICpuZXQsCisJCSAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBydG1zZyAqcnRtLCBpbnQgbm93YWl0KQogewogCWludCBlcnI7CiAJc3RydWN0IG1mY19jYWNoZSAqY2FjaGU7CiAJc3RydWN0IHJ0YWJsZSAqcnQgPSBza2ItPnJ0YWJsZTsKIAogCXJlYWRfbG9jaygmbXJ0X2xvY2spOwotCWNhY2hlID0gaXBtcl9jYWNoZV9maW5kKHJ0LT5ydF9zcmMsIHJ0LT5ydF9kc3QpOworCWNhY2hlID0gaXBtcl9jYWNoZV9maW5kKG5ldCwgcnQtPnJ0X3NyYywgcnQtPnJ0X2RzdCk7CiAKIAlpZiAoY2FjaGUgPT0gTlVMTCkgewogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiMjsKQEAgLTE2NTEsNyArMTY4MCw3IEBACiAJCWlwaC0+c2FkZHIgPSBydC0+cnRfc3JjOwogCQlpcGgtPmRhZGRyID0gcnQtPnJ0X2RzdDsKIAkJaXBoLT52ZXJzaW9uID0gMDsKLQkJZXJyID0gaXBtcl9jYWNoZV91bnJlc29sdmVkKHZpZiwgc2tiMik7CisJCWVyciA9IGlwbXJfY2FjaGVfdW5yZXNvbHZlZChuZXQsIHZpZiwgc2tiMik7CiAJCXJlYWRfdW5sb2NrKCZtcnRfbG9jayk7CiAJCXJldHVybiBlcnI7CiAJfQpAQCAtMTY2OCwxNyArMTY5NywxOSBAQAogICoJVGhlIC9wcm9jIGludGVyZmFjZXMgdG8gbXVsdGljYXN0IHJvdXRpbmcgL3Byb2MvaXBfbXJfY2FjaGUgL3Byb2MvaXBfbXJfdmlmCiAgKi8KIHN0cnVjdCBpcG1yX3ZpZl9pdGVyIHsKKwlzdHJ1Y3Qgc2VxX25ldF9wcml2YXRlIHA7CiAJaW50IGN0OwogfTsKIAotc3RhdGljIHN0cnVjdCB2aWZfZGV2aWNlICppcG1yX3ZpZl9zZXFfaWR4KHN0cnVjdCBpcG1yX3ZpZl9pdGVyICppdGVyLAorc3RhdGljIHN0cnVjdCB2aWZfZGV2aWNlICppcG1yX3ZpZl9zZXFfaWR4KHN0cnVjdCBuZXQgKm5ldCwKKwkJCQkJICAgc3RydWN0IGlwbXJfdmlmX2l0ZXIgKml0ZXIsCiAJCQkJCSAgIGxvZmZfdCBwb3MpCiB7Ci0JZm9yIChpdGVyLT5jdCA9IDA7IGl0ZXItPmN0IDwgbWF4dmlmOyArK2l0ZXItPmN0KSB7Ci0JCWlmICghVklGX0VYSVNUUyhpdGVyLT5jdCkpCisJZm9yIChpdGVyLT5jdCA9IDA7IGl0ZXItPmN0IDwgbmV0LT5pcHY0Lm1heHZpZjsgKytpdGVyLT5jdCkgeworCQlpZiAoIVZJRl9FWElTVFMobmV0LCBpdGVyLT5jdCkpCiAJCQljb250aW51ZTsKIAkJaWYgKHBvcy0tID09IDApCi0JCQlyZXR1cm4gJnZpZl90YWJsZVtpdGVyLT5jdF07CisJCQlyZXR1cm4gJm5ldC0+aXB2NC52aWZfdGFibGVbaXRlci0+Y3RdOwogCX0KIAlyZXR1cm4gTlVMTDsKIH0KQEAgLTE2ODYsMjMgKzE3MTcsMjYgQEAKIHN0YXRpYyB2b2lkICppcG1yX3ZpZl9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQogCV9fYWNxdWlyZXMobXJ0X2xvY2spCiB7CisJc3RydWN0IG5ldCAqbmV0ID0gc2VxX2ZpbGVfbmV0KHNlcSk7CisKIAlyZWFkX2xvY2soJm1ydF9sb2NrKTsKLQlyZXR1cm4gKnBvcyA/IGlwbXJfdmlmX3NlcV9pZHgoc2VxLT5wcml2YXRlLCAqcG9zIC0gMSkKKwlyZXR1cm4gKnBvcyA/IGlwbXJfdmlmX3NlcV9pZHgobmV0LCBzZXEtPnByaXZhdGUsICpwb3MgLSAxKQogCQk6IFNFUV9TVEFSVF9UT0tFTjsKIH0KIAogc3RhdGljIHZvaWQgKmlwbXJfdmlmX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKIHsKIAlzdHJ1Y3QgaXBtcl92aWZfaXRlciAqaXRlciA9IHNlcS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzZXFfZmlsZV9uZXQoc2VxKTsKIAogCSsrKnBvczsKIAlpZiAodiA9PSBTRVFfU1RBUlRfVE9LRU4pCi0JCXJldHVybiBpcG1yX3ZpZl9zZXFfaWR4KGl0ZXIsIDApOworCQlyZXR1cm4gaXBtcl92aWZfc2VxX2lkeChuZXQsIGl0ZXIsIDApOwogCi0Jd2hpbGUgKCsraXRlci0+Y3QgPCBtYXh2aWYpIHsKLQkJaWYgKCFWSUZfRVhJU1RTKGl0ZXItPmN0KSkKKwl3aGlsZSAoKytpdGVyLT5jdCA8IG5ldC0+aXB2NC5tYXh2aWYpIHsKKwkJaWYgKCFWSUZfRVhJU1RTKG5ldCwgaXRlci0+Y3QpKQogCQkJY29udGludWU7Ci0JCXJldHVybiAmdmlmX3RhYmxlW2l0ZXItPmN0XTsKKwkJcmV0dXJuICZuZXQtPmlwdjQudmlmX3RhYmxlW2l0ZXItPmN0XTsKIAl9CiAJcmV0dXJuIE5VTEw7CiB9CkBAIC0xNzE1LDYgKzE3NDksOCBAQAogCiBzdGF0aWMgaW50IGlwbXJfdmlmX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQogeworCXN0cnVjdCBuZXQgKm5ldCA9IHNlcV9maWxlX25ldChzZXEpOworCiAJaWYgKHYgPT0gU0VRX1NUQVJUX1RPS0VOKSB7CiAJCXNlcV9wdXRzKHNlcSwKIAkJCSAiSW50ZXJmYWNlICAgICAgQnl0ZXNJbiAgUGt0c0luICBCeXRlc091dCBQa3RzT3V0IEZsYWdzIExvY2FsICAgIFJlbW90ZVxuIik7CkBAIC0xNzI0LDcgKzE3NjAsNyBAQAogCiAJCXNlcV9wcmludGYoc2VxLAogCQkJICAgIiUyWmQgJS0xMHMgJThsZCAlN2xkICAlOGxkICU3bGQgJTA1WCAlMDhYICUwOFhcbiIsCi0JCQkgICB2aWYgLSB2aWZfdGFibGUsCisJCQkgICB2aWYgLSBuZXQtPmlwdjQudmlmX3RhYmxlLAogCQkJICAgbmFtZSwgdmlmLT5ieXRlc19pbiwgdmlmLT5wa3RfaW4sCiAJCQkgICB2aWYtPmJ5dGVzX291dCwgdmlmLT5wa3Rfb3V0LAogCQkJICAgdmlmLT5mbGFncywgdmlmLT5sb2NhbCwgdmlmLT5yZW1vdGUpOwpAQCAtMTc0MSw4ICsxNzc3LDggQEAKIAogc3RhdGljIGludCBpcG1yX3ZpZl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCXJldHVybiBzZXFfb3Blbl9wcml2YXRlKGZpbGUsICZpcG1yX3ZpZl9zZXFfb3BzLAotCQkJc2l6ZW9mKHN0cnVjdCBpcG1yX3ZpZl9pdGVyKSk7CisJcmV0dXJuIHNlcV9vcGVuX25ldChpbm9kZSwgZmlsZSwgJmlwbXJfdmlmX3NlcV9vcHMsCisJCQkgICAgc2l6ZW9mKHN0cnVjdCBpcG1yX3ZpZl9pdGVyKSk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGlwbXJfdmlmX2ZvcHMgPSB7CkBAIC0xNzUwLDIzICsxNzg2LDI2IEBACiAJLm9wZW4gICAgPSBpcG1yX3ZpZl9vcGVuLAogCS5yZWFkICAgID0gc2VxX3JlYWQsCiAJLmxsc2VlayAgPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UgPSBzZXFfcmVsZWFzZV9wcml2YXRlLAorCS5yZWxlYXNlID0gc2VxX3JlbGVhc2VfbmV0LAogfTsKIAogc3RydWN0IGlwbXJfbWZjX2l0ZXIgeworCXN0cnVjdCBzZXFfbmV0X3ByaXZhdGUgcDsKIAlzdHJ1Y3QgbWZjX2NhY2hlICoqY2FjaGU7CiAJaW50IGN0OwogfTsKIAogCi1zdGF0aWMgc3RydWN0IG1mY19jYWNoZSAqaXBtcl9tZmNfc2VxX2lkeChzdHJ1Y3QgaXBtcl9tZmNfaXRlciAqaXQsIGxvZmZfdCBwb3MpCitzdGF0aWMgc3RydWN0IG1mY19jYWNoZSAqaXBtcl9tZmNfc2VxX2lkeChzdHJ1Y3QgbmV0ICpuZXQsCisJCQkJCSAgc3RydWN0IGlwbXJfbWZjX2l0ZXIgKml0LCBsb2ZmX3QgcG9zKQogewogCXN0cnVjdCBtZmNfY2FjaGUgKm1mYzsKIAotCWl0LT5jYWNoZSA9IG1mY19jYWNoZV9hcnJheTsKKwlpdC0+Y2FjaGUgPSBuZXQtPmlwdjQubWZjX2NhY2hlX2FycmF5OwogCXJlYWRfbG9jaygmbXJ0X2xvY2spOwogCWZvciAoaXQtPmN0ID0gMDsgaXQtPmN0IDwgTUZDX0xJTkVTOyBpdC0+Y3QrKykKLQkJZm9yIChtZmMgPSBtZmNfY2FjaGVfYXJyYXlbaXQtPmN0XTsgbWZjOyBtZmMgPSBtZmMtPm5leHQpCisJCWZvciAobWZjID0gbmV0LT5pcHY0Lm1mY19jYWNoZV9hcnJheVtpdC0+Y3RdOworCQkgICAgIG1mYzsgbWZjID0gbWZjLT5uZXh0KQogCQkJaWYgKHBvcy0tID09IDApCiAJCQkJcmV0dXJuIG1mYzsKIAlyZWFkX3VubG9jaygmbXJ0X2xvY2spOwpAQCAtMTc3NCw3ICsxODEzLDggQEAKIAlpdC0+Y2FjaGUgPSAmbWZjX3VucmVzX3F1ZXVlOwogCXNwaW5fbG9ja19iaCgmbWZjX3VucmVzX2xvY2spOwogCWZvciAobWZjID0gbWZjX3VucmVzX3F1ZXVlOyBtZmM7IG1mYyA9IG1mYy0+bmV4dCkKLQkJaWYgKHBvcy0tID09IDApCisJCWlmIChuZXRfZXEobWZjX25ldChtZmMpLCBuZXQpICYmCisJCSAgICBwb3MtLSA9PSAwKQogCQkJcmV0dXJuIG1mYzsKIAlzcGluX3VubG9ja19iaCgmbWZjX3VucmVzX2xvY2spOwogCkBAIC0xNzg2LDkgKzE4MjYsMTEgQEAKIHN0YXRpYyB2b2lkICppcG1yX21mY19zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQogewogCXN0cnVjdCBpcG1yX21mY19pdGVyICppdCA9IHNlcS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzZXFfZmlsZV9uZXQoc2VxKTsKKwogCWl0LT5jYWNoZSA9IE5VTEw7CiAJaXQtPmN0ID0gMDsKLQlyZXR1cm4gKnBvcyA/IGlwbXJfbWZjX3NlcV9pZHgoc2VxLT5wcml2YXRlLCAqcG9zIC0gMSkKKwlyZXR1cm4gKnBvcyA/IGlwbXJfbWZjX3NlcV9pZHgobmV0LCBzZXEtPnByaXZhdGUsICpwb3MgLSAxKQogCQk6IFNFUV9TVEFSVF9UT0tFTjsKIH0KIApAQCAtMTc5NiwxMSArMTgzOCwxMiBAQAogewogCXN0cnVjdCBtZmNfY2FjaGUgKm1mYyA9IHY7CiAJc3RydWN0IGlwbXJfbWZjX2l0ZXIgKml0ID0gc2VxLT5wcml2YXRlOworCXN0cnVjdCBuZXQgKm5ldCA9IHNlcV9maWxlX25ldChzZXEpOwogCiAJKysqcG9zOwogCiAJaWYgKHYgPT0gU0VRX1NUQVJUX1RPS0VOKQotCQlyZXR1cm4gaXBtcl9tZmNfc2VxX2lkeChzZXEtPnByaXZhdGUsIDApOworCQlyZXR1cm4gaXBtcl9tZmNfc2VxX2lkeChuZXQsIHNlcS0+cHJpdmF0ZSwgMCk7CiAKIAlpZiAobWZjLT5uZXh0KQogCQlyZXR1cm4gbWZjLT5uZXh0OwpAQCAtMTgwOCwxMCArMTg1MSwxMCBAQAogCWlmIChpdC0+Y2FjaGUgPT0gJm1mY191bnJlc19xdWV1ZSkKIAkJZ290byBlbmRfb2ZfbGlzdDsKIAotCUJVR19PTihpdC0+Y2FjaGUgIT0gbWZjX2NhY2hlX2FycmF5KTsKKwlCVUdfT04oaXQtPmNhY2hlICE9IG5ldC0+aXB2NC5tZmNfY2FjaGVfYXJyYXkpOwogCiAJd2hpbGUgKCsraXQtPmN0IDwgTUZDX0xJTkVTKSB7Ci0JCW1mYyA9IG1mY19jYWNoZV9hcnJheVtpdC0+Y3RdOworCQltZmMgPSBuZXQtPmlwdjQubWZjX2NhY2hlX2FycmF5W2l0LT5jdF07CiAJCWlmIChtZmMpCiAJCQlyZXR1cm4gbWZjOwogCX0KQEAgLTE4MjMsNiArMTg2Niw4IEBACiAKIAlzcGluX2xvY2tfYmgoJm1mY191bnJlc19sb2NrKTsKIAltZmMgPSBtZmNfdW5yZXNfcXVldWU7CisJd2hpbGUgKG1mYyAmJiAhbmV0X2VxKG1mY19uZXQobWZjKSwgbmV0KSkKKwkJbWZjID0gbWZjLT5uZXh0OwogCWlmIChtZmMpCiAJCXJldHVybiBtZmM7CiAKQEAgLTE4MzYsMTYgKzE4ODEsMTggQEAKIHN0YXRpYyB2b2lkIGlwbXJfbWZjX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQogewogCXN0cnVjdCBpcG1yX21mY19pdGVyICppdCA9IHNlcS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzZXFfZmlsZV9uZXQoc2VxKTsKIAogCWlmIChpdC0+Y2FjaGUgPT0gJm1mY191bnJlc19xdWV1ZSkKIAkJc3Bpbl91bmxvY2tfYmgoJm1mY191bnJlc19sb2NrKTsKLQllbHNlIGlmIChpdC0+Y2FjaGUgPT0gbWZjX2NhY2hlX2FycmF5KQorCWVsc2UgaWYgKGl0LT5jYWNoZSA9PSBuZXQtPmlwdjQubWZjX2NhY2hlX2FycmF5KQogCQlyZWFkX3VubG9jaygmbXJ0X2xvY2spOwogfQogCiBzdGF0aWMgaW50IGlwbXJfbWZjX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQogewogCWludCBuOworCXN0cnVjdCBuZXQgKm5ldCA9IHNlcV9maWxlX25ldChzZXEpOwogCiAJaWYgKHYgPT0gU0VRX1NUQVJUX1RPS0VOKSB7CiAJCXNlcV9wdXRzKHNlcSwKQEAgLTE4NjYsOSArMTkxMyw5IEBACiAJCQkJICAgbWZjLT5tZmNfdW4ucmVzLndyb25nX2lmKTsKIAkJCWZvciAobiA9IG1mYy0+bWZjX3VuLnJlcy5taW52aWY7CiAJCQkgICAgIG4gPCBtZmMtPm1mY191bi5yZXMubWF4dmlmOyBuKysgKSB7Ci0JCQkJaWYgKFZJRl9FWElTVFMobikKLQkJCQkgICAmJiBtZmMtPm1mY191bi5yZXMudHRsc1tuXSA8IDI1NSkKLQkJCQlzZXFfcHJpbnRmKHNlcSwKKwkJCQlpZiAoVklGX0VYSVNUUyhuZXQsIG4pICYmCisJCQkJICAgIG1mYy0+bWZjX3VuLnJlcy50dGxzW25dIDwgMjU1KQorCQkJCQlzZXFfcHJpbnRmKHNlcSwKIAkJCQkJICAgIiAlMmQ6JS0zZCIsCiAJCQkJCSAgIG4sIG1mYy0+bWZjX3VuLnJlcy50dGxzW25dKTsKIAkJCX0KQEAgLTE4OTIsOCArMTkzOSw4IEBACiAKIHN0YXRpYyBpbnQgaXBtcl9tZmNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlyZXR1cm4gc2VxX29wZW5fcHJpdmF0ZShmaWxlLCAmaXBtcl9tZmNfc2VxX29wcywKLQkJCXNpemVvZihzdHJ1Y3QgaXBtcl9tZmNfaXRlcikpOworCXJldHVybiBzZXFfb3Blbl9uZXQoaW5vZGUsIGZpbGUsICZpcG1yX21mY19zZXFfb3BzLAorCQkJICAgIHNpemVvZihzdHJ1Y3QgaXBtcl9tZmNfaXRlcikpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpcG1yX21mY19mb3BzID0gewpAQCAtMTkwMSw3ICsxOTQ4LDcgQEAKIAkub3BlbiAgICA9IGlwbXJfbWZjX29wZW4sCiAJLnJlYWQgICAgPSBzZXFfcmVhZCwKIAkubGxzZWVrICA9IHNlcV9sc2VlaywKLQkucmVsZWFzZSA9IHNlcV9yZWxlYXNlX3ByaXZhdGUsCisJLnJlbGVhc2UgPSBzZXFfcmVsZWFzZV9uZXQsCiB9OwogI2VuZGlmCiAKQEAgLTE5MTUsNiArMTk2Miw2NSBAQAogLyoKICAqCVNldHVwIGZvciBJUCBtdWx0aWNhc3Qgcm91dGluZwogICovCitzdGF0aWMgaW50IF9fbmV0X2luaXQgaXBtcl9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCit7CisJaW50IGVyciA9IDA7CisKKwluZXQtPmlwdjQudmlmX3RhYmxlID0ga2NhbGxvYyhNQVhWSUZTLCBzaXplb2Yoc3RydWN0IHZpZl9kZXZpY2UpLAorCQkJCSAgICAgIEdGUF9LRVJORUwpOworCWlmICghbmV0LT5pcHY0LnZpZl90YWJsZSkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGZhaWw7CisJfQorCisJLyogRm9yd2FyZGluZyBjYWNoZSAqLworCW5ldC0+aXB2NC5tZmNfY2FjaGVfYXJyYXkgPSBrY2FsbG9jKE1GQ19MSU5FUywKKwkJCQkJICAgIHNpemVvZihzdHJ1Y3QgbWZjX2NhY2hlICopLAorCQkJCQkgICAgR0ZQX0tFUk5FTCk7CisJaWYgKCFuZXQtPmlwdjQubWZjX2NhY2hlX2FycmF5KSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZmFpbF9tZmNfY2FjaGU7CisJfQorCisjaWZkZWYgQ09ORklHX0lQX1BJTVNNCisJbmV0LT5pcHY0Lm1yb3V0ZV9yZWdfdmlmX251bSA9IC0xOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworCWVyciA9IC1FTk9NRU07CisJaWYgKCFwcm9jX25ldF9mb3BzX2NyZWF0ZShuZXQsICJpcF9tcl92aWYiLCAwLCAmaXBtcl92aWZfZm9wcykpCisJCWdvdG8gcHJvY192aWZfZmFpbDsKKwlpZiAoIXByb2NfbmV0X2ZvcHNfY3JlYXRlKG5ldCwgImlwX21yX2NhY2hlIiwgMCwgJmlwbXJfbWZjX2ZvcHMpKQorCQlnb3RvIHByb2NfY2FjaGVfZmFpbDsKKyNlbmRpZgorCXJldHVybiAwOworCisjaWZkZWYgQ09ORklHX1BST0NfRlMKK3Byb2NfY2FjaGVfZmFpbDoKKwlwcm9jX25ldF9yZW1vdmUobmV0LCAiaXBfbXJfdmlmIik7Citwcm9jX3ZpZl9mYWlsOgorCWtmcmVlKG5ldC0+aXB2NC5tZmNfY2FjaGVfYXJyYXkpOworI2VuZGlmCitmYWlsX21mY19jYWNoZToKKwlrZnJlZShuZXQtPmlwdjQudmlmX3RhYmxlKTsKK2ZhaWw6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgX19uZXRfZXhpdCBpcG1yX25ldF9leGl0KHN0cnVjdCBuZXQgKm5ldCkKK3sKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworCXByb2NfbmV0X3JlbW92ZShuZXQsICJpcF9tcl9jYWNoZSIpOworCXByb2NfbmV0X3JlbW92ZShuZXQsICJpcF9tcl92aWYiKTsKKyNlbmRpZgorCWtmcmVlKG5ldC0+aXB2NC5tZmNfY2FjaGVfYXJyYXkpOworCWtmcmVlKG5ldC0+aXB2NC52aWZfdGFibGUpOworfQorCitzdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIGlwbXJfbmV0X29wcyA9IHsKKwkuaW5pdCA9IGlwbXJfbmV0X2luaXQsCisJLmV4aXQgPSBpcG1yX25ldF9leGl0LAorfTsKIAogaW50IF9faW5pdCBpcF9tcl9pbml0KHZvaWQpCiB7CkBAIC0xOTI3LDI2ICsyMDMzLDIwIEBACiAJaWYgKCFtcnRfY2FjaGVwKQogCQlyZXR1cm4gLUVOT01FTTsKIAorCWVyciA9IHJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJmlwbXJfbmV0X29wcyk7CisJaWYgKGVycikKKwkJZ290byByZWdfcGVybmV0X2ZhaWw7CisKIAlzZXR1cF90aW1lcigmaXBtcl9leHBpcmVfdGltZXIsIGlwbXJfZXhwaXJlX3Byb2Nlc3MsIDApOwogCWVyciA9IHJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmaXBfbXJfbm90aWZpZXIpOwogCWlmIChlcnIpCiAJCWdvdG8gcmVnX25vdGlmX2ZhaWw7Ci0jaWZkZWYgQ09ORklHX1BST0NfRlMKLQllcnIgPSAtRU5PTUVNOwotCWlmICghcHJvY19uZXRfZm9wc19jcmVhdGUoJmluaXRfbmV0LCAiaXBfbXJfdmlmIiwgMCwgJmlwbXJfdmlmX2ZvcHMpKQotCQlnb3RvIHByb2NfdmlmX2ZhaWw7Ci0JaWYgKCFwcm9jX25ldF9mb3BzX2NyZWF0ZSgmaW5pdF9uZXQsICJpcF9tcl9jYWNoZSIsIDAsICZpcG1yX21mY19mb3BzKSkKLQkJZ290byBwcm9jX2NhY2hlX2ZhaWw7Ci0jZW5kaWYKIAlyZXR1cm4gMDsKLSNpZmRlZiBDT05GSUdfUFJPQ19GUwotcHJvY19jYWNoZV9mYWlsOgotCXByb2NfbmV0X3JlbW92ZSgmaW5pdF9uZXQsICJpcF9tcl92aWYiKTsKLXByb2NfdmlmX2ZhaWw6Ci0JdW5yZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJmlwX21yX25vdGlmaWVyKTsKLSNlbmRpZgorCiByZWdfbm90aWZfZmFpbDoKIAlkZWxfdGltZXIoJmlwbXJfZXhwaXJlX3RpbWVyKTsKKwl1bnJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJmlwbXJfbmV0X29wcyk7CityZWdfcGVybmV0X2ZhaWw6CiAJa21lbV9jYWNoZV9kZXN0cm95KG1ydF9jYWNoZXApOwogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZyBiL25ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnCmluZGV4IDM4MTZlMWQuLjE4MzNiZGIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnCkBAIC0zMSw3ICszMSw3IEBACiAJZGVmYXVsdCB5CiAJaGVscAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyAvcHJvYyBhbmQgc3lzY3RsIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgb2xkCi0JICBsYXllciAzIGRlcGVuZGFudCBjb25uZWN0aW9uIHRyYWNraW5nLiBUaGlzIGlzIG5lZWRlZCB0byBrZWVwCisJICBsYXllciAzIGRlcGVuZGVudCBjb25uZWN0aW9uIHRyYWNraW5nLiBUaGlzIGlzIG5lZWRlZCB0byBrZWVwCiAJICBvbGQgcHJvZ3JhbXMgdGhhdCBoYXZlIG5vdCBiZWVuIGFkYXB0ZWQgdG8gdGhlIG5ldyBuYW1lcyB3b3JraW5nLgogCiAJICBJZiB1bnN1cmUsIHNheSBZLgpAQCAtOTUsMTEgKzk1LDExIEBACiBjb25maWcgSVBfTkZfTUFUQ0hfVFRMCiAJdHJpc3RhdGUgJyJ0dGwiIG1hdGNoIHN1cHBvcnQnCiAJZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRUQKLQloZWxwCi0JICBUaGlzIGFkZHMgQ09ORklHX0lQX05GX01BVENIX1RUTCBvcHRpb24sIHdoaWNoIGVuYWJsZWQgdGhlIHVzZXIKLQkgIHRvIG1hdGNoIHBhY2tldHMgYnkgdGhlaXIgVFRMIHZhbHVlLgotCi0JICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi4KKwlzZWxlY3QgTkVURklMVEVSX1hUX01BVENIX0hMCisJLS0taGVscC0tLQorCVRoaXMgaXMgYSBiYWNrd2FyZHMtY29tcGF0IG9wdGlvbiBmb3IgdGhlIHVzZXIncyBjb252ZW5pZW5jZQorCShlLmcuIHdoZW4gcnVubmluZyBvbGRjb25maWcpLiBJdCBzZWxlY3RzCisJQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9ITC4KIAogIyBgZmlsdGVyJywgZ2VuZXJpYyBhbmQgc3BlY2lmaWMgdGFyZ2V0cwogY29uZmlnIElQX05GX0ZJTFRFUgpAQCAtMzIzLDE5ICszMjMsMTMgQEAKIAkgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLgogCiBjb25maWcgSVBfTkZfVEFSR0VUX1RUTAotCXRyaXN0YXRlICAnVFRMIHRhcmdldCBzdXBwb3J0JwotCWRlcGVuZHMgb24gSVBfTkZfTUFOR0xFCisJdHJpc3RhdGUgJyJUVEwiIHRhcmdldCBzdXBwb3J0JwogCWRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VECi0JaGVscAotCSAgVGhpcyBvcHRpb24gYWRkcyBhIGBUVEwnIHRhcmdldCwgd2hpY2ggZW5hYmxlcyB0aGUgdXNlciB0byBtb2RpZnkKLQkgIHRoZSBUVEwgdmFsdWUgb2YgdGhlIElQIGhlYWRlci4KLQotCSAgV2hpbGUgaXQgaXMgc2FmZSB0byBkZWNyZW1lbnQvbG93ZXIgdGhlIFRUTCwgdGhpcyB0YXJnZXQgYWxzbyBlbmFibGVzCi0JICBmdW5jdGlvbmFsaXR5IHRvIGluY3JlbWVudCBhbmQgc2V0IHRoZSBUVEwgdmFsdWUgb2YgdGhlIElQIGhlYWRlciB0bwotCSAgYXJiaXRyYXJ5IHZhbHVlcy4gIFRoaXMgaXMgRVhUUkVNRUxZIERBTkdFUk9VUyBzaW5jZSB5b3UgY2FuIGVhc2lseQotCSAgY3JlYXRlIGltbW9ydGFsIHBhY2tldHMgdGhhdCBsb29wIGZvcmV2ZXIgb24gdGhlIG5ldHdvcmsuCi0KLQkgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLgorCXNlbGVjdCBORVRGSUxURVJfWFRfVEFSR0VUX0hMCisJLS0taGVscC0tLQorCVRoaXMgaXMgYSBiYWNrd2FyZHMtY29tcGF0IG9wdGlvbiBmb3IgdGhlIHVzZXIncyBjb252ZW5pZW5jZQorCShlLmcuIHdoZW4gcnVubmluZyBvbGRjb25maWcpLiBJdCBzZWxlY3RzCisJQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfSEwuCiAKICMgcmF3ICsgc3BlY2lmaWMgdGFyZ2V0cwogY29uZmlnIElQX05GX1JBVwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlCmluZGV4IDVmOWI2NTAuLjQ4MTExNTkgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZQorKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGUKQEAgLTUxLDcgKzUxLDYgQEAKIG9iai0kKENPTkZJR19JUF9ORl9NQVRDSF9BRERSVFlQRSkgKz0gaXB0X2FkZHJ0eXBlLm8KIG9iai0kKENPTkZJR19JUF9ORl9NQVRDSF9BSCkgKz0gaXB0X2FoLm8KIG9iai0kKENPTkZJR19JUF9ORl9NQVRDSF9FQ04pICs9IGlwdF9lY24ubwotb2JqLSQoQ09ORklHX0lQX05GX01BVENIX1RUTCkgKz0gaXB0X3R0bC5vCiAKICMgdGFyZ2V0cwogb2JqLSQoQ09ORklHX0lQX05GX1RBUkdFVF9DTFVTVEVSSVApICs9IGlwdF9DTFVTVEVSSVAubwpAQCAtNjEsNyArNjAsNiBAQAogb2JqLSQoQ09ORklHX0lQX05GX1RBUkdFVF9ORVRNQVApICs9IGlwdF9ORVRNQVAubwogb2JqLSQoQ09ORklHX0lQX05GX1RBUkdFVF9SRURJUkVDVCkgKz0gaXB0X1JFRElSRUNULm8KIG9iai0kKENPTkZJR19JUF9ORl9UQVJHRVRfUkVKRUNUKSArPSBpcHRfUkVKRUNULm8KLW9iai0kKENPTkZJR19JUF9ORl9UQVJHRVRfVFRMKSArPSBpcHRfVFRMLm8KIG9iai0kKENPTkZJR19JUF9ORl9UQVJHRVRfVUxPRykgKz0gaXB0X1VMT0cubwogCiAjIGdlbmVyaWMgQVJQIHRhYmxlcwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYyBiL25ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmMKaW5kZXggN2VhODhiNi4uODRiOWMxNyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jCkBAIC03Myw2ICs3Myw0MCBAQAogCXJldHVybiAocmV0ICE9IDApOwogfQogCisvKgorICogVW5mb3J0dW5hdGx5LCBfYiBhbmQgX21hc2sgYXJlIG5vdCBhbGlnbmVkIHRvIGFuIGludCAob3IgbG9uZyBpbnQpCisgKiBTb21lIGFyY2hlcyBkb250IGNhcmUsIHVucm9sbGluZyB0aGUgbG9vcCBpcyBhIHdpbiBvbiB0aGVtLgorICogRm9yIG90aGVyIGFyY2hlcywgd2Ugb25seSBoYXZlIGEgMTZiaXQgYWxpZ25lbWVudC4KKyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgaWZuYW1lX2NvbXBhcmUoY29uc3QgY2hhciAqX2EsIGNvbnN0IGNoYXIgKl9iLCBjb25zdCBjaGFyICpfbWFzaykKK3sKKyNpZmRlZiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUworCWNvbnN0IHVuc2lnbmVkIGxvbmcgKmEgPSAoY29uc3QgdW5zaWduZWQgbG9uZyAqKV9hOworCWNvbnN0IHVuc2lnbmVkIGxvbmcgKmIgPSAoY29uc3QgdW5zaWduZWQgbG9uZyAqKV9iOworCWNvbnN0IHVuc2lnbmVkIGxvbmcgKm1hc2sgPSAoY29uc3QgdW5zaWduZWQgbG9uZyAqKV9tYXNrOworCXVuc2lnbmVkIGxvbmcgcmV0OworCisJcmV0ID0gKGFbMF0gXiBiWzBdKSAmIG1hc2tbMF07CisJaWYgKElGTkFNU0laID4gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKQorCQlyZXQgfD0gKGFbMV0gXiBiWzFdKSAmIG1hc2tbMV07CisJaWYgKElGTkFNU0laID4gMiAqIHNpemVvZih1bnNpZ25lZCBsb25nKSkKKwkJcmV0IHw9IChhWzJdIF4gYlsyXSkgJiBtYXNrWzJdOworCWlmIChJRk5BTVNJWiA+IDMgKiBzaXplb2YodW5zaWduZWQgbG9uZykpCisJCXJldCB8PSAoYVszXSBeIGJbM10pICYgbWFza1szXTsKKwlCVUlMRF9CVUdfT04oSUZOQU1TSVogPiA0ICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKKyNlbHNlCisJdW5zaWduZWQgbG9uZyByZXQgPSAwOworCWNvbnN0IHUxNiAqYSA9IChjb25zdCB1MTYgKilfYTsKKwljb25zdCB1MTYgKmIgPSAoY29uc3QgdTE2ICopX2I7CisJY29uc3QgdTE2ICptYXNrID0gKGNvbnN0IHUxNiAqKV9tYXNrOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IElGTkFNU0laL3NpemVvZih1MTYpOyBpKyspCisJCXJldCB8PSAoYVtpXSBeIGJbaV0pICYgbWFza1tpXTsKKyNlbmRpZgorCXJldHVybiByZXQ7Cit9CisKIC8qIFJldHVybnMgd2hldGhlciBwYWNrZXQgbWF0Y2hlcyBydWxlIG9yIG5vdC4gKi8KIHN0YXRpYyBpbmxpbmUgaW50IGFycF9wYWNrZXRfbWF0Y2goY29uc3Qgc3RydWN0IGFycGhkciAqYXJwaGRyLAogCQkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCkBAIC04Myw3ICsxMTcsNyBAQAogCWNvbnN0IGNoYXIgKmFycHB0ciA9IChjaGFyICopKGFycGhkciArIDEpOwogCWNvbnN0IGNoYXIgKnNyY19kZXZhZGRyLCAqdGd0X2RldmFkZHI7CiAJX19iZTMyIHNyY19pcGFkZHIsIHRndF9pcGFkZHI7Ci0JaW50IGksIHJldDsKKwlsb25nIHJldDsKIAogI2RlZmluZSBGV0lOVihib29sLCBpbnZmbGcpICgoYm9vbCkgXiAhIShhcnBpbmZvLT5pbnZmbGFncyAmIChpbnZmbGcpKSkKIApAQCAtMTU2LDEwICsxOTAsNyBAQAogCX0KIAogCS8qIExvb2sgZm9yIGlmbmFtZSBtYXRjaGVzLiAgKi8KLQlmb3IgKGkgPSAwLCByZXQgPSAwOyBpIDwgSUZOQU1TSVo7IGkrKykgewotCQlyZXQgfD0gKGluZGV2W2ldIF4gYXJwaW5mby0+aW5pZmFjZVtpXSkKLQkJCSYgYXJwaW5mby0+aW5pZmFjZV9tYXNrW2ldOwotCX0KKwlyZXQgPSBpZm5hbWVfY29tcGFyZShpbmRldiwgYXJwaW5mby0+aW5pZmFjZSwgYXJwaW5mby0+aW5pZmFjZV9tYXNrKTsKIAogCWlmIChGV0lOVihyZXQgIT0gMCwgQVJQVF9JTlZfVklBX0lOKSkgewogCQlkcHJpbnRmKCJWSUEgaW4gbWlzbWF0Y2ggKCVzIHZzICVzKS4lc1xuIiwKQEAgLTE2OCwxMCArMTk5LDcgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JZm9yIChpID0gMCwgcmV0ID0gMDsgaSA8IElGTkFNU0laOyBpKyspIHsKLQkJcmV0IHw9IChvdXRkZXZbaV0gXiBhcnBpbmZvLT5vdXRpZmFjZVtpXSkKLQkJCSYgYXJwaW5mby0+b3V0aWZhY2VfbWFza1tpXTsKLQl9CisJcmV0ID0gaWZuYW1lX2NvbXBhcmUob3V0ZGV2LCBhcnBpbmZvLT5vdXRpZmFjZSwgYXJwaW5mby0+b3V0aWZhY2VfbWFzayk7CiAKIAlpZiAoRldJTlYocmV0ICE9IDAsIEFSUFRfSU5WX1ZJQV9PVVQpKSB7CiAJCWRwcmludGYoIlZJQSBvdXQgbWlzbWF0Y2ggKCVzIHZzICVzKS4lc1xuIiwKQEAgLTIyMSw3ICsyNDksNyBAQAogCQkJICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKIAkJCSAgIHN0cnVjdCB4dF90YWJsZSAqdGFibGUpCiB7Ci0Jc3RhdGljIGNvbnN0IGNoYXIgbnVsbGRldm5hbWVbSUZOQU1TSVpdOworCXN0YXRpYyBjb25zdCBjaGFyIG51bGxkZXZuYW1lW0lGTkFNU0laXSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKHNpemVvZihsb25nKSkpKTsKIAl1bnNpZ25lZCBpbnQgdmVyZGljdCA9IE5GX0RST1A7CiAJY29uc3Qgc3RydWN0IGFycGhkciAqYXJwOwogCWJvb2wgaG90ZHJvcCA9IGZhbHNlOwpAQCAtMjM3LDkgKzI2NSwxMCBAQAogCWluZGV2ID0gaW4gPyBpbi0+bmFtZSA6IG51bGxkZXZuYW1lOwogCW91dGRldiA9IG91dCA/IG91dC0+bmFtZSA6IG51bGxkZXZuYW1lOwogCi0JcmVhZF9sb2NrX2JoKCZ0YWJsZS0+bG9jayk7Ci0JcHJpdmF0ZSA9IHRhYmxlLT5wcml2YXRlOwotCXRhYmxlX2Jhc2UgPSAodm9pZCAqKXByaXZhdGUtPmVudHJpZXNbc21wX3Byb2Nlc3Nvcl9pZCgpXTsKKwlyY3VfcmVhZF9sb2NrKCk7CisJcHJpdmF0ZSA9IHJjdV9kZXJlZmVyZW5jZSh0YWJsZS0+cHJpdmF0ZSk7CisJdGFibGVfYmFzZSA9IHJjdV9kZXJlZmVyZW5jZShwcml2YXRlLT5lbnRyaWVzW3NtcF9wcm9jZXNzb3JfaWQoKV0pOworCiAJZSA9IGdldF9lbnRyeSh0YWJsZV9iYXNlLCBwcml2YXRlLT5ob29rX2VudHJ5W2hvb2tdKTsKIAliYWNrID0gZ2V0X2VudHJ5KHRhYmxlX2Jhc2UsIHByaXZhdGUtPnVuZGVyZmxvd1tob29rXSk7CiAKQEAgLTMxMSw3ICszNDAsOCBAQAogCQkJZSA9ICh2b2lkICopZSArIGUtPm5leHRfb2Zmc2V0OwogCQl9CiAJfSB3aGlsZSAoIWhvdGRyb3ApOwotCXJlYWRfdW5sb2NrX2JoKCZ0YWJsZS0+bG9jayk7CisKKwlyY3VfcmVhZF91bmxvY2soKTsKIAogCWlmIChob3Rkcm9wKQogCQlyZXR1cm4gTkZfRFJPUDsKQEAgLTcxNCwxMSArNzQ0LDY1IEBACiAJfQogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCB4dF9jb3VudGVycyAqYWxsb2NfY291bnRlcnMoc3RydWN0IHh0X3RhYmxlICp0YWJsZSkKKworLyogV2UncmUgbGF6eSwgYW5kIGFkZCB0byB0aGUgZmlyc3QgQ1BVOyBvdmVyZmxvdyB3b3JrcyBpdHMgZmV5IG1hZ2ljCisgKiBhbmQgZXZlcnl0aGluZyBpcyBPSy4gKi8KK3N0YXRpYyBpbnQKK2FkZF9jb3VudGVyX3RvX2VudHJ5KHN0cnVjdCBhcnB0X2VudHJ5ICplLAorCQkgICAgIGNvbnN0IHN0cnVjdCB4dF9jb3VudGVycyBhZGRtZVtdLAorCQkgICAgIHVuc2lnbmVkIGludCAqaSkKK3sKKwlBRERfQ09VTlRFUihlLT5jb3VudGVycywgYWRkbWVbKmldLmJjbnQsIGFkZG1lWyppXS5wY250KTsKKworCSgqaSkrKzsKKwlyZXR1cm4gMDsKK30KKworLyogVGFrZSB2YWx1ZXMgZnJvbSBjb3VudGVycyBhbmQgYWRkIHRoZW0gYmFjayBvbnRvIHRoZSBjdXJyZW50IGNwdSAqLworc3RhdGljIHZvaWQgcHV0X2NvdW50ZXJzKHN0cnVjdCB4dF90YWJsZV9pbmZvICp0LAorCQkJIGNvbnN0IHN0cnVjdCB4dF9jb3VudGVycyBjb3VudGVyc1tdKQoreworCXVuc2lnbmVkIGludCBpLCBjcHU7CisKKwlsb2NhbF9iaF9kaXNhYmxlKCk7CisJY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCWkgPSAwOworCUFSUFRfRU5UUllfSVRFUkFURSh0LT5lbnRyaWVzW2NwdV0sCisJCQkgIHQtPnNpemUsCisJCQkgIGFkZF9jb3VudGVyX3RvX2VudHJ5LAorCQkJICBjb3VudGVycywKKwkJCSAgJmkpOworCWxvY2FsX2JoX2VuYWJsZSgpOworfQorCitzdGF0aWMgaW5saW5lIGludAoremVyb19lbnRyeV9jb3VudGVyKHN0cnVjdCBhcnB0X2VudHJ5ICplLCB2b2lkICphcmcpCit7CisJZS0+Y291bnRlcnMuYmNudCA9IDA7CisJZS0+Y291bnRlcnMucGNudCA9IDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitjbG9uZV9jb3VudGVycyhzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqbmV3aW5mbywgY29uc3Qgc3RydWN0IHh0X3RhYmxlX2luZm8gKmluZm8pCit7CisJdW5zaWduZWQgaW50IGNwdTsKKwljb25zdCB2b2lkICpsb2NfY3B1X2VudHJ5ID0gaW5mby0+ZW50cmllc1tyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpXTsKKworCW1lbWNweShuZXdpbmZvLCBpbmZvLCBvZmZzZXRvZihzdHJ1Y3QgeHRfdGFibGVfaW5mbywgZW50cmllcykpOworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKKwkJbWVtY3B5KG5ld2luZm8tPmVudHJpZXNbY3B1XSwgbG9jX2NwdV9lbnRyeSwgaW5mby0+c2l6ZSk7CisJCUFSUFRfRU5UUllfSVRFUkFURShuZXdpbmZvLT5lbnRyaWVzW2NwdV0sIG5ld2luZm8tPnNpemUsCisJCQkJICB6ZXJvX2VudHJ5X2NvdW50ZXIsIE5VTEwpOworCX0KK30KKworc3RhdGljIHN0cnVjdCB4dF9jb3VudGVycyAqYWxsb2NfY291bnRlcnMoc3RydWN0IHh0X3RhYmxlICp0YWJsZSkKIHsKIAl1bnNpZ25lZCBpbnQgY291bnRlcnNpemU7CiAJc3RydWN0IHh0X2NvdW50ZXJzICpjb3VudGVyczsKLQljb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZSA9IHRhYmxlLT5wcml2YXRlOworCXN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlID0gdGFibGUtPnByaXZhdGU7CisJc3RydWN0IHh0X3RhYmxlX2luZm8gKmluZm87CiAKIAkvKiBXZSBuZWVkIGF0b21pYyBzbmFwc2hvdCBvZiBjb3VudGVyczogcmVzdCBkb2Vzbid0IGNoYW5nZQogCSAqIChvdGhlciB0aGFuIGNvbWVmcm9tLCB3aGljaCB1c2Vyc3BhY2UgZG9lc24ndCBjYXJlCkBAIC03MjgsMTQgKzgxMiwzMCBAQAogCWNvdW50ZXJzID0gdm1hbGxvY19ub2RlKGNvdW50ZXJzaXplLCBudW1hX25vZGVfaWQoKSk7CiAKIAlpZiAoY291bnRlcnMgPT0gTlVMTCkKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJCWdvdG8gbm9tZW07CiAKLQkvKiBGaXJzdCwgc3VtIGNvdW50ZXJzLi4uICovCi0Jd3JpdGVfbG9ja19iaCgmdGFibGUtPmxvY2spOwotCWdldF9jb3VudGVycyhwcml2YXRlLCBjb3VudGVycyk7Ci0Jd3JpdGVfdW5sb2NrX2JoKCZ0YWJsZS0+bG9jayk7CisJaW5mbyA9IHh0X2FsbG9jX3RhYmxlX2luZm8ocHJpdmF0ZS0+c2l6ZSk7CisJaWYgKCFpbmZvKQorCQlnb3RvIGZyZWVfY291bnRlcnM7CisKKwljbG9uZV9jb3VudGVycyhpbmZvLCBwcml2YXRlKTsKKworCW11dGV4X2xvY2soJnRhYmxlLT5sb2NrKTsKKwl4dF90YWJsZV9lbnRyeV9zd2FwX3JjdShwcml2YXRlLCBpbmZvKTsKKwlzeW5jaHJvbml6ZV9uZXQoKTsJLyogV2FpdCB1bnRpbCBzbW9rZSBoYXMgY2xlYXJlZCAqLworCisJZ2V0X2NvdW50ZXJzKGluZm8sIGNvdW50ZXJzKTsKKwlwdXRfY291bnRlcnMocHJpdmF0ZSwgY291bnRlcnMpOworCW11dGV4X3VubG9jaygmdGFibGUtPmxvY2spOworCisJeHRfZnJlZV90YWJsZV9pbmZvKGluZm8pOwogCiAJcmV0dXJuIGNvdW50ZXJzOworCisgZnJlZV9jb3VudGVyczoKKwl2ZnJlZShjb3VudGVycyk7Cisgbm9tZW06CisJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiB9CiAKIHN0YXRpYyBpbnQgY29weV9lbnRyaWVzX3RvX3VzZXIodW5zaWduZWQgaW50IHRvdGFsX3NpemUsCkBAIC0xMDc1LDIwICsxMTc1LDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0vKiBXZSdyZSBsYXp5LCBhbmQgYWRkIHRvIHRoZSBmaXJzdCBDUFU7IG92ZXJmbG93IHdvcmtzIGl0cyBmZXkgbWFnaWMKLSAqIGFuZCBldmVyeXRoaW5nIGlzIE9LLgotICovCi1zdGF0aWMgaW5saW5lIGludCBhZGRfY291bnRlcl90b19lbnRyeShzdHJ1Y3QgYXJwdF9lbnRyeSAqZSwKLQkJCQkgICAgICAgY29uc3Qgc3RydWN0IHh0X2NvdW50ZXJzIGFkZG1lW10sCi0JCQkJICAgICAgIHVuc2lnbmVkIGludCAqaSkKLXsKLQotCUFERF9DT1VOVEVSKGUtPmNvdW50ZXJzLCBhZGRtZVsqaV0uYmNudCwgYWRkbWVbKmldLnBjbnQpOwotCi0JKCppKSsrOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IGRvX2FkZF9jb3VudGVycyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCB1bnNpZ25lZCBpbnQgbGVuLAogCQkJICAgaW50IGNvbXBhdCkKIHsKQEAgLTExNDgsMTMgKzEyMzQsMTQgQEAKIAkJZ290byBmcmVlOwogCX0KIAotCXdyaXRlX2xvY2tfYmgoJnQtPmxvY2spOworCW11dGV4X2xvY2soJnQtPmxvY2spOwogCXByaXZhdGUgPSB0LT5wcml2YXRlOwogCWlmIChwcml2YXRlLT5udW1iZXIgIT0gbnVtX2NvdW50ZXJzKSB7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gdW5sb2NrX3VwX2ZyZWU7CiAJfQogCisJcHJlZW1wdF9kaXNhYmxlKCk7CiAJaSA9IDA7CiAJLyogQ2hvb3NlIHRoZSBjb3B5IHRoYXQgaXMgb24gb3VyIG5vZGUgKi8KIAlsb2NfY3B1X2VudHJ5ID0gcHJpdmF0ZS0+ZW50cmllc1tzbXBfcHJvY2Vzc29yX2lkKCldOwpAQCAtMTE2Myw4ICsxMjUwLDEwIEBACiAJCQkgICBhZGRfY291bnRlcl90b19lbnRyeSwKIAkJCSAgIHBhZGRjLAogCQkJICAgJmkpOworCXByZWVtcHRfZW5hYmxlKCk7CiAgdW5sb2NrX3VwX2ZyZWU6Ci0Jd3JpdGVfdW5sb2NrX2JoKCZ0LT5sb2NrKTsKKwltdXRleF91bmxvY2soJnQtPmxvY2spOworCiAJeHRfdGFibGVfdW5sb2NrKHQpOwogCW1vZHVsZV9wdXQodC0+bWUpOwogIGZyZWU6CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwdGFibGVfZmlsdGVyLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwdGFibGVfZmlsdGVyLmMKaW5kZXggZTA5MTE4Ny4uNmVjZmRhZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycHRhYmxlX2ZpbHRlci5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9hcnB0YWJsZV9maWx0ZXIuYwpAQCAtNDgsOCArNDgsNiBAQAogc3RhdGljIHN0cnVjdCB4dF90YWJsZSBwYWNrZXRfZmlsdGVyID0gewogCS5uYW1lCQk9ICJmaWx0ZXIiLAogCS52YWxpZF9ob29rcwk9IEZJTFRFUl9WQUxJRF9IT09LUywKLQkubG9jawkJPSBfX1JXX0xPQ0tfVU5MT0NLRUQocGFja2V0X2ZpbHRlci5sb2NrKSwKLQkucHJpdmF0ZQk9IE5VTEwsCiAJLm1lCQk9IFRISVNfTU9EVUxFLAogCS5hZgkJPSBORlBST1RPX0FSUCwKIH07CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfcXVldWUuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9xdWV1ZS5jCmluZGV4IDQzMmNlOWQuLjVmMjJjOTEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9xdWV1ZS5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9xdWV1ZS5jCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXQuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPG5ldC9uZXRfbmFtZXNwYWNlLmg+CiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KQEAgLTY0MCw2ICs2NDEsNyBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJJUHY0IHBhY2tldCBxdWV1ZSBoYW5kbGVyIik7CiBNT0RVTEVfQVVUSE9SKCJKYW1lcyBNb3JyaXMgPGptb3JyaXNAaW50ZXJjb2RlLmNvbS5hdT4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBU19ORVRfUEZfUFJPVE8oUEZfTkVUTElOSywgTkVUTElOS19GSVJFV0FMTCk7CiAKIG1vZHVsZV9pbml0KGlwX3F1ZXVlX2luaXQpOwogbW9kdWxlX2V4aXQoaXBfcXVldWVfZmluaSk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMKaW5kZXggZWY4YjZjYS4uZTUyOTRhZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYwpAQCAtNzQsNiArNzQsMjUgQEAKIAogICAgSGVuY2UgdGhlIHN0YXJ0IG9mIGFueSB0YWJsZSBpcyBnaXZlbiBieSBnZXRfdGFibGUoKSBiZWxvdy4gICovCiAKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGlmbmFtZV9jb21wYXJlKGNvbnN0IGNoYXIgKl9hLCBjb25zdCBjaGFyICpfYiwKKwkJCQkgICAgY29uc3QgdW5zaWduZWQgY2hhciAqX21hc2spCit7CisJY29uc3QgdW5zaWduZWQgbG9uZyAqYSA9IChjb25zdCB1bnNpZ25lZCBsb25nICopX2E7CisJY29uc3QgdW5zaWduZWQgbG9uZyAqYiA9IChjb25zdCB1bnNpZ25lZCBsb25nICopX2I7CisJY29uc3QgdW5zaWduZWQgbG9uZyAqbWFzayA9IChjb25zdCB1bnNpZ25lZCBsb25nICopX21hc2s7CisJdW5zaWduZWQgbG9uZyByZXQ7CisKKwlyZXQgPSAoYVswXSBeIGJbMF0pICYgbWFza1swXTsKKwlpZiAoSUZOQU1TSVogPiBzaXplb2YodW5zaWduZWQgbG9uZykpCisJCXJldCB8PSAoYVsxXSBeIGJbMV0pICYgbWFza1sxXTsKKwlpZiAoSUZOQU1TSVogPiAyICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKQorCQlyZXQgfD0gKGFbMl0gXiBiWzJdKSAmIG1hc2tbMl07CisJaWYgKElGTkFNU0laID4gMyAqIHNpemVvZih1bnNpZ25lZCBsb25nKSkKKwkJcmV0IHw9IChhWzNdIF4gYlszXSkgJiBtYXNrWzNdOworCUJVSUxEX0JVR19PTihJRk5BTVNJWiA+IDQgKiBzaXplb2YodW5zaWduZWQgbG9uZykpOworCXJldHVybiByZXQ7Cit9CisKIC8qIFJldHVybnMgd2hldGhlciBtYXRjaGVzIHJ1bGUgb3Igbm90LiAqLwogLyogUGVyZm9ybWFuY2UgY3JpdGljYWwgLSBjYWxsZWQgZm9yIGV2ZXJ5IHBhY2tldCAqLwogc3RhdGljIGlubGluZSBib29sCkBAIC04Myw3ICsxMDIsNiBAQAogCQljb25zdCBzdHJ1Y3QgaXB0X2lwICppcGluZm8sCiAJCWludCBpc2ZyYWcpCiB7Ci0Jc2l6ZV90IGk7CiAJdW5zaWduZWQgbG9uZyByZXQ7CiAKICNkZWZpbmUgRldJTlYoYm9vbCwgaW52ZmxnKSAoKGJvb2wpIF4gISEoaXBpbmZvLT5pbnZmbGFncyAmIChpbnZmbGcpKSkKQEAgLTEwMywxMiArMTIxLDcgQEAKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAotCS8qIExvb2sgZm9yIGlmbmFtZSBtYXRjaGVzOyB0aGlzIHNob3VsZCB1bnJvbGwgbmljZWx5LiAqLwotCWZvciAoaSA9IDAsIHJldCA9IDA7IGkgPCBJRk5BTVNJWi9zaXplb2YodW5zaWduZWQgbG9uZyk7IGkrKykgewotCQlyZXQgfD0gKCgoY29uc3QgdW5zaWduZWQgbG9uZyAqKWluZGV2KVtpXQotCQkJXiAoKGNvbnN0IHVuc2lnbmVkIGxvbmcgKilpcGluZm8tPmluaWZhY2UpW2ldKQotCQkJJiAoKGNvbnN0IHVuc2lnbmVkIGxvbmcgKilpcGluZm8tPmluaWZhY2VfbWFzaylbaV07Ci0JfQorCXJldCA9IGlmbmFtZV9jb21wYXJlKGluZGV2LCBpcGluZm8tPmluaWZhY2UsIGlwaW5mby0+aW5pZmFjZV9tYXNrKTsKIAogCWlmIChGV0lOVihyZXQgIT0gMCwgSVBUX0lOVl9WSUFfSU4pKSB7CiAJCWRwcmludGYoIlZJQSBpbiBtaXNtYXRjaCAoJXMgdnMgJXMpLiVzXG4iLApAQCAtMTE3LDExICsxMzAsNyBAQAogCQlyZXR1cm4gZmFsc2U7CiAJfQogCi0JZm9yIChpID0gMCwgcmV0ID0gMDsgaSA8IElGTkFNU0laL3NpemVvZih1bnNpZ25lZCBsb25nKTsgaSsrKSB7Ci0JCXJldCB8PSAoKChjb25zdCB1bnNpZ25lZCBsb25nICopb3V0ZGV2KVtpXQotCQkJXiAoKGNvbnN0IHVuc2lnbmVkIGxvbmcgKilpcGluZm8tPm91dGlmYWNlKVtpXSkKLQkJCSYgKChjb25zdCB1bnNpZ25lZCBsb25nICopaXBpbmZvLT5vdXRpZmFjZV9tYXNrKVtpXTsKLQl9CisJcmV0ID0gaWZuYW1lX2NvbXBhcmUob3V0ZGV2LCBpcGluZm8tPm91dGlmYWNlLCBpcGluZm8tPm91dGlmYWNlX21hc2spOwogCiAJaWYgKEZXSU5WKHJldCAhPSAwLCBJUFRfSU5WX1ZJQV9PVVQpKSB7CiAJCWRwcmludGYoIlZJQSBvdXQgbWlzbWF0Y2ggKCVzIHZzICVzKS4lc1xuIiwKQEAgLTM0NywxMCArMzU2LDEyIEBACiAJbXRwYXIuZmFtaWx5ICA9IHRncGFyLmZhbWlseSA9IE5GUFJPVE9fSVBWNDsKIAl0Z3Bhci5ob29rbnVtID0gaG9vazsKIAotCXJlYWRfbG9ja19iaCgmdGFibGUtPmxvY2spOwogCUlQX05GX0FTU0VSVCh0YWJsZS0+dmFsaWRfaG9va3MgJiAoMSA8PCBob29rKSk7Ci0JcHJpdmF0ZSA9IHRhYmxlLT5wcml2YXRlOwotCXRhYmxlX2Jhc2UgPSAodm9pZCAqKXByaXZhdGUtPmVudHJpZXNbc21wX3Byb2Nlc3Nvcl9pZCgpXTsKKworCXJjdV9yZWFkX2xvY2soKTsKKwlwcml2YXRlID0gcmN1X2RlcmVmZXJlbmNlKHRhYmxlLT5wcml2YXRlKTsKKwl0YWJsZV9iYXNlID0gcmN1X2RlcmVmZXJlbmNlKHByaXZhdGUtPmVudHJpZXNbc21wX3Byb2Nlc3Nvcl9pZCgpXSk7CisKIAllID0gZ2V0X2VudHJ5KHRhYmxlX2Jhc2UsIHByaXZhdGUtPmhvb2tfZW50cnlbaG9va10pOwogCiAJLyogRm9yIHJldHVybiBmcm9tIGJ1aWx0aW4gY2hhaW4gKi8KQEAgLTQ0NSw3ICs0NTYsNyBAQAogCQl9CiAJfSB3aGlsZSAoIWhvdGRyb3ApOwogCi0JcmVhZF91bmxvY2tfYmgoJnRhYmxlLT5sb2NrKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKIAogI2lmZGVmIERFQlVHX0FMTE9XX0FMTAogCXJldHVybiBORl9BQ0NFUFQ7CkBAIC05MjQsMTMgKzkzNSw2OCBAQAogCQkJCSAgY291bnRlcnMsCiAJCQkJICAmaSk7CiAJfQorCit9CisKKy8qIFdlJ3JlIGxhenksIGFuZCBhZGQgdG8gdGhlIGZpcnN0IENQVTsgb3ZlcmZsb3cgd29ya3MgaXRzIGZleSBtYWdpYworICogYW5kIGV2ZXJ5dGhpbmcgaXMgT0suICovCitzdGF0aWMgaW50CithZGRfY291bnRlcl90b19lbnRyeShzdHJ1Y3QgaXB0X2VudHJ5ICplLAorCQkgICAgIGNvbnN0IHN0cnVjdCB4dF9jb3VudGVycyBhZGRtZVtdLAorCQkgICAgIHVuc2lnbmVkIGludCAqaSkKK3sKKwlBRERfQ09VTlRFUihlLT5jb3VudGVycywgYWRkbWVbKmldLmJjbnQsIGFkZG1lWyppXS5wY250KTsKKworCSgqaSkrKzsKKwlyZXR1cm4gMDsKK30KKworLyogVGFrZSB2YWx1ZXMgZnJvbSBjb3VudGVycyBhbmQgYWRkIHRoZW0gYmFjayBvbnRvIHRoZSBjdXJyZW50IGNwdSAqLworc3RhdGljIHZvaWQgcHV0X2NvdW50ZXJzKHN0cnVjdCB4dF90YWJsZV9pbmZvICp0LAorCQkJIGNvbnN0IHN0cnVjdCB4dF9jb3VudGVycyBjb3VudGVyc1tdKQoreworCXVuc2lnbmVkIGludCBpLCBjcHU7CisKKwlsb2NhbF9iaF9kaXNhYmxlKCk7CisJY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCWkgPSAwOworCUlQVF9FTlRSWV9JVEVSQVRFKHQtPmVudHJpZXNbY3B1XSwKKwkJCSAgdC0+c2l6ZSwKKwkJCSAgYWRkX2NvdW50ZXJfdG9fZW50cnksCisJCQkgIGNvdW50ZXJzLAorCQkJICAmaSk7CisJbG9jYWxfYmhfZW5hYmxlKCk7Cit9CisKKworc3RhdGljIGlubGluZSBpbnQKK3plcm9fZW50cnlfY291bnRlcihzdHJ1Y3QgaXB0X2VudHJ5ICplLCB2b2lkICphcmcpCit7CisJZS0+Y291bnRlcnMuYmNudCA9IDA7CisJZS0+Y291bnRlcnMucGNudCA9IDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitjbG9uZV9jb3VudGVycyhzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqbmV3aW5mbywgY29uc3Qgc3RydWN0IHh0X3RhYmxlX2luZm8gKmluZm8pCit7CisJdW5zaWduZWQgaW50IGNwdTsKKwljb25zdCB2b2lkICpsb2NfY3B1X2VudHJ5ID0gaW5mby0+ZW50cmllc1tyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpXTsKKworCW1lbWNweShuZXdpbmZvLCBpbmZvLCBvZmZzZXRvZihzdHJ1Y3QgeHRfdGFibGVfaW5mbywgZW50cmllcykpOworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKKwkJbWVtY3B5KG5ld2luZm8tPmVudHJpZXNbY3B1XSwgbG9jX2NwdV9lbnRyeSwgaW5mby0+c2l6ZSk7CisJCUlQVF9FTlRSWV9JVEVSQVRFKG5ld2luZm8tPmVudHJpZXNbY3B1XSwgbmV3aW5mby0+c2l6ZSwKKwkJCQkgIHplcm9fZW50cnlfY291bnRlciwgTlVMTCk7CisJfQogfQogCiBzdGF0aWMgc3RydWN0IHh0X2NvdW50ZXJzICogYWxsb2NfY291bnRlcnMoc3RydWN0IHh0X3RhYmxlICp0YWJsZSkKIHsKIAl1bnNpZ25lZCBpbnQgY291bnRlcnNpemU7CiAJc3RydWN0IHh0X2NvdW50ZXJzICpjb3VudGVyczsKLQljb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZSA9IHRhYmxlLT5wcml2YXRlOworCXN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlID0gdGFibGUtPnByaXZhdGU7CisJc3RydWN0IHh0X3RhYmxlX2luZm8gKmluZm87CiAKIAkvKiBXZSBuZWVkIGF0b21pYyBzbmFwc2hvdCBvZiBjb3VudGVyczogcmVzdCBkb2Vzbid0IGNoYW5nZQogCSAgIChvdGhlciB0aGFuIGNvbWVmcm9tLCB3aGljaCB1c2Vyc3BhY2UgZG9lc24ndCBjYXJlCkBAIC05MzksMTQgKzEwMDUsMzAgQEAKIAljb3VudGVycyA9IHZtYWxsb2Nfbm9kZShjb3VudGVyc2l6ZSwgbnVtYV9ub2RlX2lkKCkpOwogCiAJaWYgKGNvdW50ZXJzID09IE5VTEwpCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCQlnb3RvIG5vbWVtOwogCi0JLyogRmlyc3QsIHN1bSBjb3VudGVycy4uLiAqLwotCXdyaXRlX2xvY2tfYmgoJnRhYmxlLT5sb2NrKTsKLQlnZXRfY291bnRlcnMocHJpdmF0ZSwgY291bnRlcnMpOwotCXdyaXRlX3VubG9ja19iaCgmdGFibGUtPmxvY2spOworCWluZm8gPSB4dF9hbGxvY190YWJsZV9pbmZvKHByaXZhdGUtPnNpemUpOworCWlmICghaW5mbykKKwkJZ290byBmcmVlX2NvdW50ZXJzOworCisJY2xvbmVfY291bnRlcnMoaW5mbywgcHJpdmF0ZSk7CisKKwltdXRleF9sb2NrKCZ0YWJsZS0+bG9jayk7CisJeHRfdGFibGVfZW50cnlfc3dhcF9yY3UocHJpdmF0ZSwgaW5mbyk7CisJc3luY2hyb25pemVfbmV0KCk7CS8qIFdhaXQgdW50aWwgc21va2UgaGFzIGNsZWFyZWQgKi8KKworCWdldF9jb3VudGVycyhpbmZvLCBjb3VudGVycyk7CisJcHV0X2NvdW50ZXJzKHByaXZhdGUsIGNvdW50ZXJzKTsKKwltdXRleF91bmxvY2soJnRhYmxlLT5sb2NrKTsKKworCXh0X2ZyZWVfdGFibGVfaW5mbyhpbmZvKTsKIAogCXJldHVybiBjb3VudGVyczsKKworIGZyZWVfY291bnRlcnM6CisJdmZyZWUoY291bnRlcnMpOworIG5vbWVtOgorCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogfQogCiBzdGF0aWMgaW50CkBAIC0xMzEyLDI3ICsxMzk0LDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0vKiBXZSdyZSBsYXp5LCBhbmQgYWRkIHRvIHRoZSBmaXJzdCBDUFU7IG92ZXJmbG93IHdvcmtzIGl0cyBmZXkgbWFnaWMKLSAqIGFuZCBldmVyeXRoaW5nIGlzIE9LLiAqLwotc3RhdGljIGludAotYWRkX2NvdW50ZXJfdG9fZW50cnkoc3RydWN0IGlwdF9lbnRyeSAqZSwKLQkJICAgICBjb25zdCBzdHJ1Y3QgeHRfY291bnRlcnMgYWRkbWVbXSwKLQkJICAgICB1bnNpZ25lZCBpbnQgKmkpCi17Ci0jaWYgMAotCWR1cHJpbnRmKCJhZGRfY291bnRlcjogRW50cnkgJXUgJWx1LyVsdSArICVsdS8lbHVcbiIsCi0JCSAqaSwKLQkJIChsb25nIHVuc2lnbmVkIGludCllLT5jb3VudGVycy5wY250LAotCQkgKGxvbmcgdW5zaWduZWQgaW50KWUtPmNvdW50ZXJzLmJjbnQsCi0JCSAobG9uZyB1bnNpZ25lZCBpbnQpYWRkbWVbKmldLnBjbnQsCi0JCSAobG9uZyB1bnNpZ25lZCBpbnQpYWRkbWVbKmldLmJjbnQpOwotI2VuZGlmCi0KLQlBRERfQ09VTlRFUihlLT5jb3VudGVycywgYWRkbWVbKmldLmJjbnQsIGFkZG1lWyppXS5wY250KTsKLQotCSgqaSkrKzsKLQlyZXR1cm4gMDsKLX0KIAogc3RhdGljIGludAogZG9fYWRkX2NvdW50ZXJzKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCBfX3VzZXIgKnVzZXIsIHVuc2lnbmVkIGludCBsZW4sIGludCBjb21wYXQpCkBAIC0xMzkzLDEzICsxNDU0LDE0IEBACiAJCWdvdG8gZnJlZTsKIAl9CiAKLQl3cml0ZV9sb2NrX2JoKCZ0LT5sb2NrKTsKKwltdXRleF9sb2NrKCZ0LT5sb2NrKTsKIAlwcml2YXRlID0gdC0+cHJpdmF0ZTsKIAlpZiAocHJpdmF0ZS0+bnVtYmVyICE9IG51bV9jb3VudGVycykgewogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIHVubG9ja191cF9mcmVlOwogCX0KIAorCXByZWVtcHRfZGlzYWJsZSgpOwogCWkgPSAwOwogCS8qIENob29zZSB0aGUgY29weSB0aGF0IGlzIG9uIG91ciBub2RlICovCiAJbG9jX2NwdV9lbnRyeSA9IHByaXZhdGUtPmVudHJpZXNbcmF3X3NtcF9wcm9jZXNzb3JfaWQoKV07CkBAIC0xNDA4LDggKzE0NzAsOSBAQAogCQkJICBhZGRfY291bnRlcl90b19lbnRyeSwKIAkJCSAgcGFkZGMsCiAJCQkgICZpKTsKKwlwcmVlbXB0X2VuYWJsZSgpOwogIHVubG9ja191cF9mcmVlOgotCXdyaXRlX3VubG9ja19iaCgmdC0+bG9jayk7CisJbXV0ZXhfdW5sb2NrKCZ0LT5sb2NrKTsKIAl4dF90YWJsZV91bmxvY2sodCk7CiAJbW9kdWxlX3B1dCh0LT5tZSk7CiAgZnJlZToKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfTE9HLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X0xPRy5jCmluZGV4IDI3YTc4ZmIuLmFjYzQ0YzYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfTE9HLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9MT0cuYwpAQCAtNDY0LDcgKzQ2NCw3IEBACiAJLm1lCQk9IFRISVNfTU9EVUxFLAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBuZl9sb2dnZXIgaXB0X2xvZ19sb2dnZXIgPXsKK3N0YXRpYyBzdHJ1Y3QgbmZfbG9nZ2VyIGlwdF9sb2dfbG9nZ2VyIF9fcmVhZF9tb3N0bHkgPSB7CiAJLm5hbWUJCT0gImlwdF9MT0ciLAogCS5sb2dmbgkJPSAmaXB0X2xvZ19wYWNrZXQsCiAJLm1lCQk9IFRISVNfTU9EVUxFLApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9UVEwuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfVFRMLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkNzZhYWUuLjAwMDAwMDAKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9UVEwuYworKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLS8qIFRUTCBtb2RpZmljYXRpb24gdGFyZ2V0IGZvciBJUCB0YWJsZXMKLSAqIChDKSAyMDAwLDIwMDUgYnkgSGFyYWxkIFdlbHRlIDxsYWZvcmdlQG5ldGZpbHRlci5vcmc+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgotI2luY2x1ZGUgPGxpbnV4L2lwLmg+Ci0jaW5jbHVkZSA8bmV0L2NoZWNrc3VtLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfVFRMLmg+Ci0KLU1PRFVMRV9BVVRIT1IoIkhhcmFsZCBXZWx0ZSA8bGFmb3JnZUBuZXRmaWx0ZXIub3JnPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJYdGFibGVzOiBJUHY0IFRUTCBmaWVsZCBtb2RpZmljYXRpb24gdGFyZ2V0Iik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQKLXR0bF90ZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgeHRfdGFyZ2V0X3BhcmFtICpwYXIpCi17Ci0Jc3RydWN0IGlwaGRyICppcGg7Ci0JY29uc3Qgc3RydWN0IGlwdF9UVExfaW5mbyAqaW5mbyA9IHBhci0+dGFyZ2luZm87Ci0JaW50IG5ld190dGw7Ci0KLQlpZiAoIXNrYl9tYWtlX3dyaXRhYmxlKHNrYiwgc2tiLT5sZW4pKQotCQlyZXR1cm4gTkZfRFJPUDsKLQotCWlwaCA9IGlwX2hkcihza2IpOwotCi0Jc3dpdGNoIChpbmZvLT5tb2RlKSB7Ci0JCWNhc2UgSVBUX1RUTF9TRVQ6Ci0JCQluZXdfdHRsID0gaW5mby0+dHRsOwotCQkJYnJlYWs7Ci0JCWNhc2UgSVBUX1RUTF9JTkM6Ci0JCQluZXdfdHRsID0gaXBoLT50dGwgKyBpbmZvLT50dGw7Ci0JCQlpZiAobmV3X3R0bCA+IDI1NSkKLQkJCQluZXdfdHRsID0gMjU1OwotCQkJYnJlYWs7Ci0JCWNhc2UgSVBUX1RUTF9ERUM6Ci0JCQluZXdfdHRsID0gaXBoLT50dGwgLSBpbmZvLT50dGw7Ci0JCQlpZiAobmV3X3R0bCA8IDApCi0JCQkJbmV3X3R0bCA9IDA7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCW5ld190dGwgPSBpcGgtPnR0bDsKLQkJCWJyZWFrOwotCX0KLQotCWlmIChuZXdfdHRsICE9IGlwaC0+dHRsKSB7Ci0JCWNzdW1fcmVwbGFjZTIoJmlwaC0+Y2hlY2ssIGh0b25zKGlwaC0+dHRsIDw8IDgpLAotCQkJCQkgICBodG9ucyhuZXdfdHRsIDw8IDgpKTsKLQkJaXBoLT50dGwgPSBuZXdfdHRsOwotCX0KLQotCXJldHVybiBYVF9DT05USU5VRTsKLX0KLQotc3RhdGljIGJvb2wgdHRsX3RnX2NoZWNrKGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyKQotewotCWNvbnN0IHN0cnVjdCBpcHRfVFRMX2luZm8gKmluZm8gPSBwYXItPnRhcmdpbmZvOwotCi0JaWYgKGluZm8tPm1vZGUgPiBJUFRfVFRMX01BWE1PREUpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiaXB0X1RUTDogaW52YWxpZCBvciB1bmtub3duIE1vZGUgJXVcbiIsCi0JCQlpbmZvLT5tb2RlKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQlpZiAoaW5mby0+bW9kZSAhPSBJUFRfVFRMX1NFVCAmJiBpbmZvLT50dGwgPT0gMCkKLQkJcmV0dXJuIGZhbHNlOwotCXJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgc3RydWN0IHh0X3RhcmdldCB0dGxfdGdfcmVnIF9fcmVhZF9tb3N0bHkgPSB7Ci0JLm5hbWUgCQk9ICJUVEwiLAotCS5mYW1pbHkJCT0gTkZQUk9UT19JUFY0LAotCS50YXJnZXQgCT0gdHRsX3RnLAotCS50YXJnZXRzaXplCT0gc2l6ZW9mKHN0cnVjdCBpcHRfVFRMX2luZm8pLAotCS50YWJsZQkJPSAibWFuZ2xlIiwKLQkuY2hlY2tlbnRyeSAJPSB0dGxfdGdfY2hlY2ssCi0JLm1lIAkJPSBUSElTX01PRFVMRSwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IHR0bF90Z19pbml0KHZvaWQpCi17Ci0JcmV0dXJuIHh0X3JlZ2lzdGVyX3RhcmdldCgmdHRsX3RnX3JlZyk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCB0dGxfdGdfZXhpdCh2b2lkKQotewotCXh0X3VucmVnaXN0ZXJfdGFyZ2V0KCZ0dGxfdGdfcmVnKTsKLX0KLQotbW9kdWxlX2luaXQodHRsX3RnX2luaXQpOwotbW9kdWxlX2V4aXQodHRsX3RnX2V4aXQpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9VTE9HLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1VMT0cuYwppbmRleCAxOGEyODI2Li5kMzJjYzRiIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1VMT0cuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1VMT0cuYwpAQCAtMzc5LDcgKzM3OSw3IEBACiAJLm1lCQk9IFRISVNfTU9EVUxFLAogfTsKIAotc3RhdGljIHN0cnVjdCBuZl9sb2dnZXIgaXB0X3Vsb2dfbG9nZ2VyID0geworc3RhdGljIHN0cnVjdCBuZl9sb2dnZXIgaXB0X3Vsb2dfbG9nZ2VyIF9fcmVhZF9tb3N0bHkgPSB7CiAJLm5hbWUJCT0gImlwdF9VTE9HIiwKIAkubG9nZm4JCT0gaXB0X2xvZ2ZuLAogCS5tZQkJPSBUSElTX01PRFVMRSwKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfdHRsLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X3R0bC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOTdmMWNiLi4wMDAwMDAwCi0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfdHRsLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKiBJUCB0YWJsZXMgbW9kdWxlIGZvciBtYXRjaGluZyB0aGUgdmFsdWUgb2YgdGhlIFRUTAotICoKLSAqIChDKSAyMDAwLDIwMDEgYnkgSGFyYWxkIFdlbHRlIDxsYWZvcmdlQG5ldGZpbHRlci5vcmc+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvaXAuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KLQotI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF90dGwuaD4KLSNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaD4KLQotTU9EVUxFX0FVVEhPUigiSGFyYWxkIFdlbHRlIDxsYWZvcmdlQG5ldGZpbHRlci5vcmc+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIlh0YWJsZXM6IElQdjQgVFRMIGZpZWxkIG1hdGNoIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLXN0YXRpYyBib29sIHR0bF9tdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgeHRfbWF0Y2hfcGFyYW0gKnBhcikKLXsKLQljb25zdCBzdHJ1Y3QgaXB0X3R0bF9pbmZvICppbmZvID0gcGFyLT5tYXRjaGluZm87Ci0JY29uc3QgdTggdHRsID0gaXBfaGRyKHNrYiktPnR0bDsKLQotCXN3aXRjaCAoaW5mby0+bW9kZSkgewotCQljYXNlIElQVF9UVExfRVE6Ci0JCQlyZXR1cm4gdHRsID09IGluZm8tPnR0bDsKLQkJY2FzZSBJUFRfVFRMX05FOgotCQkJcmV0dXJuIHR0bCAhPSBpbmZvLT50dGw7Ci0JCWNhc2UgSVBUX1RUTF9MVDoKLQkJCXJldHVybiB0dGwgPCBpbmZvLT50dGw7Ci0JCWNhc2UgSVBUX1RUTF9HVDoKLQkJCXJldHVybiB0dGwgPiBpbmZvLT50dGw7Ci0JCWRlZmF1bHQ6Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJpcHRfdHRsOiB1bmtub3duIG1vZGUgJWRcbiIsCi0JCQkJaW5mby0+bW9kZSk7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgc3RydWN0IHh0X21hdGNoIHR0bF9tdF9yZWcgX19yZWFkX21vc3RseSA9IHsKLQkubmFtZQkJPSAidHRsIiwKLQkuZmFtaWx5CQk9IE5GUFJPVE9fSVBWNCwKLQkubWF0Y2gJCT0gdHRsX210LAotCS5tYXRjaHNpemUJPSBzaXplb2Yoc3RydWN0IGlwdF90dGxfaW5mbyksCi0JLm1lCQk9IFRISVNfTU9EVUxFLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgdHRsX210X2luaXQodm9pZCkKLXsKLQlyZXR1cm4geHRfcmVnaXN0ZXJfbWF0Y2goJnR0bF9tdF9yZWcpOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgdHRsX210X2V4aXQodm9pZCkKLXsKLQl4dF91bnJlZ2lzdGVyX21hdGNoKCZ0dGxfbXRfcmVnKTsKLX0KLQotbW9kdWxlX2luaXQodHRsX210X2luaXQpOwotbW9kdWxlX2V4aXQodHRsX210X2V4aXQpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdGFibGVfZmlsdGVyLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9maWx0ZXIuYwppbmRleCA1MmNiNjkzLi5jMzBhOTY5IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9maWx0ZXIuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9maWx0ZXIuYwpAQCAtNTYsNyArNTYsNiBAQAogc3RhdGljIHN0cnVjdCB4dF90YWJsZSBwYWNrZXRfZmlsdGVyID0gewogCS5uYW1lCQk9ICJmaWx0ZXIiLAogCS52YWxpZF9ob29rcwk9IEZJTFRFUl9WQUxJRF9IT09LUywKLQkubG9jawkJPSBfX1JXX0xPQ0tfVU5MT0NLRUQocGFja2V0X2ZpbHRlci5sb2NrKSwKIAkubWUJCT0gVEhJU19NT0RVTEUsCiAJLmFmCQk9IEFGX0lORVQsCiB9OwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdGFibGVfbWFuZ2xlLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9tYW5nbGUuYwppbmRleCAzOTI5ZDIwLi40MDg3NjE0IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9tYW5nbGUuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9tYW5nbGUuYwpAQCAtNjcsNyArNjcsNiBAQAogc3RhdGljIHN0cnVjdCB4dF90YWJsZSBwYWNrZXRfbWFuZ2xlciA9IHsKIAkubmFtZQkJPSAibWFuZ2xlIiwKIAkudmFsaWRfaG9va3MJPSBNQU5HTEVfVkFMSURfSE9PS1MsCi0JLmxvY2sJCT0gX19SV19MT0NLX1VOTE9DS0VEKHBhY2tldF9tYW5nbGVyLmxvY2spLAogCS5tZQkJPSBUSElTX01PRFVMRSwKIAkuYWYJCT0gQUZfSU5FVCwKIH07CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9yYXcuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX3Jhdy5jCmluZGV4IDdmNjVkMTguLmU1MzU2ZGEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX3Jhdy5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX3Jhdy5jCkBAIC0zOSw3ICszOSw2IEBACiBzdGF0aWMgc3RydWN0IHh0X3RhYmxlIHBhY2tldF9yYXcgPSB7CiAJLm5hbWUgPSAicmF3IiwKIAkudmFsaWRfaG9va3MgPSAgUkFXX1ZBTElEX0hPT0tTLAotCS5sb2NrID0gX19SV19MT0NLX1VOTE9DS0VEKHBhY2tldF9yYXcubG9jayksCiAJLm1lID0gVEhJU19NT0RVTEUsCiAJLmFmID0gQUZfSU5FVCwKIH07CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9zZWN1cml0eS5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdGFibGVfc2VjdXJpdHkuYwppbmRleCBhNTJhMzVmLi4yOWFiNjMwIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9zZWN1cml0eS5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX3NlY3VyaXR5LmMKQEAgLTYwLDcgKzYwLDYgQEAKIHN0YXRpYyBzdHJ1Y3QgeHRfdGFibGUgc2VjdXJpdHlfdGFibGUgPSB7CiAJLm5hbWUJCT0gInNlY3VyaXR5IiwKIAkudmFsaWRfaG9va3MJPSBTRUNVUklUWV9WQUxJRF9IT09LUywKLQkubG9jawkJPSBfX1JXX0xPQ0tfVU5MT0NLRUQoc2VjdXJpdHlfdGFibGUubG9jayksCiAJLm1lCQk9IFRISVNfTU9EVUxFLAogCS5hZgkJPSBBRl9JTkVULAogfTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY0LmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NC5jCmluZGV4IDRiZWIwNGYuLjhiNjgxZjIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY0LmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjQuYwpAQCAtMTIwLDggKzEyMCwxMCBAQAogCQl0eXBlb2YobmZfbmF0X3NlcV9hZGp1c3RfaG9vaykgc2VxX2FkanVzdDsKIAogCQlzZXFfYWRqdXN0ID0gcmN1X2RlcmVmZXJlbmNlKG5mX25hdF9zZXFfYWRqdXN0X2hvb2spOwotCQlpZiAoIXNlcV9hZGp1c3QgfHwgIXNlcV9hZGp1c3Qoc2tiLCBjdCwgY3RpbmZvKSkKKwkJaWYgKCFzZXFfYWRqdXN0IHx8ICFzZXFfYWRqdXN0KHNrYiwgY3QsIGN0aW5mbykpIHsKKwkJCU5GX0NUX1NUQVRfSU5DX0FUT01JQyhuZl9jdF9uZXQoY3QpLCBkcm9wKTsKIAkJCXJldHVybiBORl9EUk9QOworCQl9CiAJfQogb3V0OgogCS8qIFdlJ3ZlIHNlZW4gaXQgY29taW5nIG91dCB0aGUgb3RoZXIgc2lkZTogY29uZmlybSBpdCAqLwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9ydWxlLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3J1bGUuYwppbmRleCBhN2ViMDQ3Li42MzQ4YTc5IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3J1bGUuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3J1bGUuYwpAQCAtNjEsNyArNjEsNiBAQAogc3RhdGljIHN0cnVjdCB4dF90YWJsZSBuYXRfdGFibGUgPSB7CiAJLm5hbWUJCT0gIm5hdCIsCiAJLnZhbGlkX2hvb2tzCT0gTkFUX1ZBTElEX0hPT0tTLAotCS5sb2NrCQk9IF9fUldfTE9DS19VTkxPQ0tFRChuYXRfdGFibGUubG9jayksCiAJLm1lCQk9IFRISVNfTU9EVUxFLAogCS5hZgkJPSBBRl9JTkVULAogfTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfc25tcF9iYXNpYy5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9zbm1wX2Jhc2ljLmMKaW5kZXggMTgyZjg0NS4uZDk1MjFmNiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9zbm1wX2Jhc2ljLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9zbm1wX2Jhc2ljLmMKQEAgLTEyOTIsNyArMTI5Miw3IEBACiAJLmV4cGVjdF9wb2xpY3kJCT0gJnNubXBfZXhwX3BvbGljeSwKIAkubmFtZQkJCT0gInNubXAiLAogCS50dXBsZS5zcmMubDNudW0JPSBBRl9JTkVULAotCS50dXBsZS5zcmMudS51ZHAucG9ydAk9IF9fY29uc3RhbnRfaHRvbnMoU05NUF9QT1JUKSwKKwkudHVwbGUuc3JjLnUudWRwLnBvcnQJPSBjcHVfdG9fYmUxNihTTk1QX1BPUlQpLAogCS50dXBsZS5kc3QucHJvdG9udW0JPSBJUFBST1RPX1VEUCwKIH07CiAKQEAgLTEzMDIsNyArMTMwMiw3IEBACiAJLmV4cGVjdF9wb2xpY3kJCT0gJnNubXBfZXhwX3BvbGljeSwKIAkubmFtZQkJCT0gInNubXBfdHJhcCIsCiAJLnR1cGxlLnNyYy5sM251bQk9IEFGX0lORVQsCi0JLnR1cGxlLnNyYy51LnVkcC5wb3J0CT0gX19jb25zdGFudF9odG9ucyhTTk1QX1RSQVBfUE9SVCksCisJLnR1cGxlLnNyYy51LnVkcC5wb3J0CT0gY3B1X3RvX2JlMTYoU05NUF9UUkFQX1BPUlQpLAogCS50dXBsZS5kc3QucHJvdG9udW0JPSBJUFBST1RPX1VEUCwKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3Byb2MuYyBiL25ldC9pcHY0L3Byb2MuYwppbmRleCBlYjYyZTU4Li5jZjBjZGVlIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9wcm9jLmMKKysrIGIvbmV0L2lwdjQvcHJvYy5jCkBAIC01NCw4ICs1NCw4IEBACiAJaW50IG9ycGhhbnMsIHNvY2tldHM7CiAKIAlsb2NhbF9iaF9kaXNhYmxlKCk7Ci0Jb3JwaGFucyA9IHBlcmNwdV9jb3VudGVyX3N1bV9wb3NpdGl2ZSgmdGNwX29ycGhhbl9jb3VudCksCi0Jc29ja2V0cyA9IHBlcmNwdV9jb3VudGVyX3N1bV9wb3NpdGl2ZSgmdGNwX3NvY2tldHNfYWxsb2NhdGVkKSwKKwlvcnBoYW5zID0gcGVyY3B1X2NvdW50ZXJfc3VtX3Bvc2l0aXZlKCZ0Y3Bfb3JwaGFuX2NvdW50KTsKKwlzb2NrZXRzID0gcGVyY3B1X2NvdW50ZXJfc3VtX3Bvc2l0aXZlKCZ0Y3Bfc29ja2V0c19hbGxvY2F0ZWQpOwogCWxvY2FsX2JoX2VuYWJsZSgpOwogCiAJc29ja2V0X3NlcV9zaG93KHNlcSk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9yYXcuYyBiL25ldC9pcHY0L3Jhdy5jCmluZGV4IGRmZjhiYzQuLmY3NzQ2NTEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3Jhdy5jCisrKyBiL25ldC9pcHY0L3Jhdy5jCkBAIC00OTMsNiArNDkzLDcgQEAKIAogCWlwYy5hZGRyID0gaW5ldC0+c2FkZHI7CiAJaXBjLm9wdCA9IE5VTEw7CisJaXBjLnNodHguZmxhZ3MgPSAwOwogCWlwYy5vaWYgPSBzay0+c2tfYm91bmRfZGV2X2lmOwogCiAJaWYgKG1zZy0+bXNnX2NvbnRyb2xsZW4pIHsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3JvdXRlLmMgYi9uZXQvaXB2NC9yb3V0ZS5jCmluZGV4IDk3ZjcxMTUuLjVjYWVlNjAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3JvdXRlLmMKKysrIGIvbmV0L2lwdjQvcm91dGUuYwpAQCAtMTUxLDcgKzE1MSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgZHN0X29wcyBpcHY0X2RzdF9vcHMgPSB7CiAJLmZhbWlseSA9CQlBRl9JTkVULAotCS5wcm90b2NvbCA9CQlfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQKSwKKwkucHJvdG9jb2wgPQkJY3B1X3RvX2JlMTYoRVRIX1BfSVApLAogCS5nYyA9CQkJcnRfZ2FyYmFnZV9jb2xsZWN0LAogCS5jaGVjayA9CQlpcHY0X2RzdF9jaGVjaywKIAkuZGVzdHJveSA9CQlpcHY0X2RzdF9kZXN0cm95LApAQCAtMjY5Niw3ICsyNjk2LDcgQEAKIAogc3RhdGljIHN0cnVjdCBkc3Rfb3BzIGlwdjRfZHN0X2JsYWNraG9sZV9vcHMgPSB7CiAJLmZhbWlseQkJCT0JQUZfSU5FVCwKLQkucHJvdG9jb2wJCT0JX19jb25zdGFudF9odG9ucyhFVEhfUF9JUCksCisJLnByb3RvY29sCQk9CWNwdV90b19iZTE2KEVUSF9QX0lQKSwKIAkuZGVzdHJveQkJPQlpcHY0X2RzdF9kZXN0cm95LAogCS5jaGVjawkJCT0JaXB2NF9kc3RfY2hlY2ssCiAJLnVwZGF0ZV9wbXR1CQk9CWlwdjRfcnRfYmxhY2tob2xlX3VwZGF0ZV9wbXR1LApAQCAtMjc3OSw3ICsyNzc5LDggQEAKIAlyZXR1cm4gaXBfcm91dGVfb3V0cHV0X2Zsb3cobmV0LCBycCwgZmxwLCBOVUxMLCAwKTsKIH0KIAotc3RhdGljIGludCBydF9maWxsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSwgaW50IGV2ZW50LAorc3RhdGljIGludCBydF9maWxsX2luZm8oc3RydWN0IG5ldCAqbmV0LAorCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSwgaW50IGV2ZW50LAogCQkJaW50IG5vd2FpdCwgdW5zaWduZWQgaW50IGZsYWdzKQogewogCXN0cnVjdCBydGFibGUgKnJ0ID0gc2tiLT5ydGFibGU7CkBAIC0yODQ0LDggKzI4NDUsOCBAQAogCQlfX2JlMzIgZHN0ID0gcnQtPnJ0X2RzdDsKIAogCQlpZiAoaXB2NF9pc19tdWx0aWNhc3QoZHN0KSAmJiAhaXB2NF9pc19sb2NhbF9tdWx0aWNhc3QoZHN0KSAmJgotCQkgICAgSVBWNF9ERVZDT05GX0FMTCgmaW5pdF9uZXQsIE1DX0ZPUldBUkRJTkcpKSB7Ci0JCQlpbnQgZXJyID0gaXBtcl9nZXRfcm91dGUoc2tiLCByLCBub3dhaXQpOworCQkgICAgSVBWNF9ERVZDT05GX0FMTChuZXQsIE1DX0ZPUldBUkRJTkcpKSB7CisJCQlpbnQgZXJyID0gaXBtcl9nZXRfcm91dGUobmV0LCBza2IsIHIsIG5vd2FpdCk7CiAJCQlpZiAoZXJyIDw9IDApIHsKIAkJCQlpZiAoIW5vd2FpdCkgewogCQkJCQlpZiAoZXJyID09IDApCkBAIC0yOTUwLDcgKzI5NTEsNyBAQAogCWlmIChydG0tPnJ0bV9mbGFncyAmIFJUTV9GX05PVElGWSkKIAkJcnQtPnJ0X2ZsYWdzIHw9IFJUQ0ZfTk9USUZZOwogCi0JZXJyID0gcnRfZmlsbF9pbmZvKHNrYiwgTkVUTElOS19DQihpbl9za2IpLnBpZCwgbmxoLT5ubG1zZ19zZXEsCisJZXJyID0gcnRfZmlsbF9pbmZvKG5ldCwgc2tiLCBORVRMSU5LX0NCKGluX3NrYikucGlkLCBubGgtPm5sbXNnX3NlcSwKIAkJCSAgIFJUTV9ORVdST1VURSwgMCwgMCk7CiAJaWYgKGVyciA8PSAwKQogCQlnb3RvIGVycm91dF9mcmVlOwpAQCAtMjk4OCw3ICsyOTg5LDcgQEAKIAkJCWlmIChydF9pc19leHBpcmVkKHJ0KSkKIAkJCQljb250aW51ZTsKIAkJCXNrYi0+ZHN0ID0gZHN0X2Nsb25lKCZydC0+dS5kc3QpOwotCQkJaWYgKHJ0X2ZpbGxfaW5mbyhza2IsIE5FVExJTktfQ0IoY2ItPnNrYikucGlkLAorCQkJaWYgKHJ0X2ZpbGxfaW5mbyhuZXQsIHNrYiwgTkVUTElOS19DQihjYi0+c2tiKS5waWQsCiAJCQkJCSBjYi0+bmxoLT5ubG1zZ19zZXEsIFJUTV9ORVdST1VURSwKIAkJCQkJIDEsIE5MTV9GX01VTFRJKSA8PSAwKSB7CiAJCQkJZHN0X3JlbGVhc2UoeGNoZygmc2tiLT5kc3QsIE5VTEwpKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcC5jIGIvbmV0L2lwdjQvdGNwLmMKaW5kZXggNzZiMTQ4Yi4uMjQ1MWFlYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwLmMKKysrIGIvbmV0L2lwdjQvdGNwLmMKQEAgLTY2MSw2ICs2NjEsNDcgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAorc3RhdGljIHVuc2lnbmVkIGludCB0Y3BfeG1pdF9zaXplX2dvYWwoc3RydWN0IHNvY2sgKnNrLCB1MzIgbXNzX25vdywKKwkJCQkgICAgICAgaW50IGxhcmdlX2FsbG93ZWQpCit7CisJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CisJdTMyIHhtaXRfc2l6ZV9nb2FsLCBvbGRfc2l6ZV9nb2FsOworCisJeG1pdF9zaXplX2dvYWwgPSBtc3Nfbm93OworCisJaWYgKGxhcmdlX2FsbG93ZWQgJiYgc2tfY2FuX2dzbyhzaykpIHsKKwkJeG1pdF9zaXplX2dvYWwgPSAoKHNrLT5za19nc29fbWF4X3NpemUgLSAxKSAtCisJCQkJICBpbmV0X2NzayhzayktPmljc2tfYWZfb3BzLT5uZXRfaGVhZGVyX2xlbiAtCisJCQkJICBpbmV0X2NzayhzayktPmljc2tfZXh0X2hkcl9sZW4gLQorCQkJCSAgdHAtPnRjcF9oZWFkZXJfbGVuKTsKKworCQl4bWl0X3NpemVfZ29hbCA9IHRjcF9ib3VuZF90b19oYWxmX3duZCh0cCwgeG1pdF9zaXplX2dvYWwpOworCisJCS8qIFdlIHRyeSBoYXJkIHRvIGF2b2lkIGRpdmlkZXMgaGVyZSAqLworCQlvbGRfc2l6ZV9nb2FsID0gdHAtPnhtaXRfc2l6ZV9nb2FsX3NlZ3MgKiBtc3Nfbm93OworCisJCWlmIChsaWtlbHkob2xkX3NpemVfZ29hbCA8PSB4bWl0X3NpemVfZ29hbCAmJgorCQkJICAgb2xkX3NpemVfZ29hbCArIG1zc19ub3cgPiB4bWl0X3NpemVfZ29hbCkpIHsKKwkJCXhtaXRfc2l6ZV9nb2FsID0gb2xkX3NpemVfZ29hbDsKKwkJfSBlbHNlIHsKKwkJCXRwLT54bWl0X3NpemVfZ29hbF9zZWdzID0geG1pdF9zaXplX2dvYWwgLyBtc3Nfbm93OworCQkJeG1pdF9zaXplX2dvYWwgPSB0cC0+eG1pdF9zaXplX2dvYWxfc2VncyAqIG1zc19ub3c7CisJCX0KKwl9CisKKwlyZXR1cm4gbWF4KHhtaXRfc2l6ZV9nb2FsLCBtc3Nfbm93KTsKK30KKworc3RhdGljIGludCB0Y3Bfc2VuZF9tc3Moc3RydWN0IHNvY2sgKnNrLCBpbnQgKnNpemVfZ29hbCwgaW50IGZsYWdzKQoreworCWludCBtc3Nfbm93OworCisJbXNzX25vdyA9IHRjcF9jdXJyZW50X21zcyhzayk7CisJKnNpemVfZ29hbCA9IHRjcF94bWl0X3NpemVfZ29hbChzaywgbXNzX25vdywgIShmbGFncyAmIE1TR19PT0IpKTsKKworCXJldHVybiBtc3Nfbm93OworfQorCiBzdGF0aWMgc3NpemVfdCBkb190Y3Bfc2VuZHBhZ2VzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHBhZ2UgKipwYWdlcywgaW50IHBvZmZzZXQsCiAJCQkgc2l6ZV90IHBzaXplLCBpbnQgZmxhZ3MpCiB7CkBAIC02NzcsMTMgKzcxOCwxMiBAQAogCiAJY2xlYXJfYml0KFNPQ0tfQVNZTkNfTk9TUEFDRSwgJnNrLT5za19zb2NrZXQtPmZsYWdzKTsKIAotCW1zc19ub3cgPSB0Y3BfY3VycmVudF9tc3Moc2ssICEoZmxhZ3MmTVNHX09PQikpOwotCXNpemVfZ29hbCA9IHRwLT54bWl0X3NpemVfZ29hbDsKKwltc3Nfbm93ID0gdGNwX3NlbmRfbXNzKHNrLCAmc2l6ZV9nb2FsLCBmbGFncyk7CiAJY29waWVkID0gMDsKIAogCWVyciA9IC1FUElQRTsKIAlpZiAoc2stPnNrX2VyciB8fCAoc2stPnNrX3NodXRkb3duICYgU0VORF9TSFVURE9XTikpCi0JCWdvdG8gZG9fZXJyb3I7CisJCWdvdG8gb3V0X2VycjsKIAogCXdoaWxlIChwc2l6ZSA+IDApIHsKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHRjcF93cml0ZV9xdWV1ZV90YWlsKHNrKTsKQEAgLTc2MSw4ICs4MDEsNyBAQAogCQlpZiAoKGVyciA9IHNrX3N0cmVhbV93YWl0X21lbW9yeShzaywgJnRpbWVvKSkgIT0gMCkKIAkJCWdvdG8gZG9fZXJyb3I7CiAKLQkJbXNzX25vdyA9IHRjcF9jdXJyZW50X21zcyhzaywgIShmbGFncyZNU0dfT09CKSk7Ci0JCXNpemVfZ29hbCA9IHRwLT54bWl0X3NpemVfZ29hbDsKKwkJbXNzX25vdyA9IHRjcF9zZW5kX21zcyhzaywgJnNpemVfZ29hbCwgZmxhZ3MpOwogCX0KIAogb3V0OgpAQCAtODQ0LDggKzg4Myw3IEBACiAJLyogVGhpcyBzaG91bGQgYmUgaW4gcG9sbCAqLwogCWNsZWFyX2JpdChTT0NLX0FTWU5DX05PU1BBQ0UsICZzay0+c2tfc29ja2V0LT5mbGFncyk7CiAKLQltc3Nfbm93ID0gdGNwX2N1cnJlbnRfbXNzKHNrLCAhKGZsYWdzJk1TR19PT0IpKTsKLQlzaXplX2dvYWwgPSB0cC0+eG1pdF9zaXplX2dvYWw7CisJbXNzX25vdyA9IHRjcF9zZW5kX21zcyhzaywgJnNpemVfZ29hbCwgZmxhZ3MpOwogCiAJLyogT2sgY29tbWVuY2Ugc2VuZGluZy4gKi8KIAlpb3ZsZW4gPSBtc2ctPm1zZ19pb3ZsZW47CkBAIC04NTQsNyArODkyLDcgQEAKIAogCWVyciA9IC1FUElQRTsKIAlpZiAoc2stPnNrX2VyciB8fCAoc2stPnNrX3NodXRkb3duICYgU0VORF9TSFVURE9XTikpCi0JCWdvdG8gZG9fZXJyb3I7CisJCWdvdG8gb3V0X2VycjsKIAogCXdoaWxlICgtLWlvdmxlbiA+PSAwKSB7CiAJCWludCBzZWdsZW4gPSBpb3YtPmlvdl9sZW47CkBAIC0xMDA3LDggKzEwNDUsNyBAQAogCQkJaWYgKChlcnIgPSBza19zdHJlYW1fd2FpdF9tZW1vcnkoc2ssICZ0aW1lbykpICE9IDApCiAJCQkJZ290byBkb19lcnJvcjsKIAotCQkJbXNzX25vdyA9IHRjcF9jdXJyZW50X21zcyhzaywgIShmbGFncyZNU0dfT09CKSk7Ci0JCQlzaXplX2dvYWwgPSB0cC0+eG1pdF9zaXplX2dvYWw7CisJCQltc3Nfbm93ID0gdGNwX3NlbmRfbXNzKHNrLCAmc2l6ZV9nb2FsLCBmbGFncyk7CiAJCX0KIAl9CiAKQEAgLTEwNDUsOCArMTA4Miw3IEBACiAgKi8KIAogc3RhdGljIGludCB0Y3BfcmVjdl91cmcoc3RydWN0IHNvY2sgKnNrLCBsb25nIHRpbWVvLAotCQkJc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgbGVuLCBpbnQgZmxhZ3MsCi0JCQlpbnQgKmFkZHJfbGVuKQorCQkJc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgbGVuLCBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CiAKQEAgLTE2NjEsNyArMTY5Nyw3IEBACiAJcmV0dXJuIGVycjsKIAogcmVjdl91cmc6Ci0JZXJyID0gdGNwX3JlY3ZfdXJnKHNrLCB0aW1lbywgbXNnLCBsZW4sIGZsYWdzLCBhZGRyX2xlbik7CisJZXJyID0gdGNwX3JlY3ZfdXJnKHNrLCB0aW1lbywgbXNnLCBsZW4sIGZsYWdzKTsKIAlnb3RvIG91dDsKIH0KIApAQCAtMjQ3OCwyMyArMjUxNCwyMyBAQAogCXN0cnVjdCB0Y3BoZHIgKnRoMjsKIAl1bnNpZ25lZCBpbnQgdGhsZW47CiAJdW5zaWduZWQgaW50IGZsYWdzOwotCXVuc2lnbmVkIGludCB0b3RhbDsKIAl1bnNpZ25lZCBpbnQgbXNzID0gMTsKIAlpbnQgZmx1c2ggPSAxOworCWludCBpOwogCi0JaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKCp0aCkpKQorCXRoID0gc2tiX2dyb19oZWFkZXIoc2tiLCBzaXplb2YoKnRoKSk7CisJaWYgKHVubGlrZWx5KCF0aCkpCiAJCWdvdG8gb3V0OwogCi0JdGggPSB0Y3BfaGRyKHNrYik7CiAJdGhsZW4gPSB0aC0+ZG9mZiAqIDQ7CiAJaWYgKHRobGVuIDwgc2l6ZW9mKCp0aCkpCiAJCWdvdG8gb3V0OwogCi0JaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgdGhsZW4pKQorCXRoID0gc2tiX2dyb19oZWFkZXIoc2tiLCB0aGxlbik7CisJaWYgKHVubGlrZWx5KCF0aCkpCiAJCWdvdG8gb3V0OwogCi0JdGggPSB0Y3BfaGRyKHNrYik7Ci0JX19za2JfcHVsbChza2IsIHRobGVuKTsKKwlza2JfZ3JvX3B1bGwoc2tiLCB0aGxlbik7CiAKIAlmbGFncyA9IHRjcF9mbGFnX3dvcmQodGgpOwogCkBAIC0yNTA0LDcgKzI1NDAsNyBAQAogCiAJCXRoMiA9IHRjcF9oZHIocCk7CiAKLQkJaWYgKHRoLT5zb3VyY2UgIT0gdGgyLT5zb3VyY2UgfHwgdGgtPmRlc3QgIT0gdGgyLT5kZXN0KSB7CisJCWlmICgodGgtPnNvdXJjZSBeIHRoMi0+c291cmNlKSB8ICh0aC0+ZGVzdCBeIHRoMi0+ZGVzdCkpIHsKIAkJCU5BUElfR1JPX0NCKHApLT5zYW1lX2Zsb3cgPSAwOwogCQkJY29udGludWU7CiAJCX0KQEAgLTI1MTksMTQgKzI1NTUsMTUgQEAKIAlmbHVzaCB8PSBmbGFncyAmIFRDUF9GTEFHX0NXUjsKIAlmbHVzaCB8PSAoZmxhZ3MgXiB0Y3BfZmxhZ193b3JkKHRoMikpICYKIAkJICB+KFRDUF9GTEFHX0NXUiB8IFRDUF9GTEFHX0ZJTiB8IFRDUF9GTEFHX1BTSCk7Ci0JZmx1c2ggfD0gdGgtPmFja19zZXEgIT0gdGgyLT5hY2tfc2VxIHx8IHRoLT53aW5kb3cgIT0gdGgyLT53aW5kb3c7Ci0JZmx1c2ggfD0gbWVtY21wKHRoICsgMSwgdGgyICsgMSwgdGhsZW4gLSBzaXplb2YoKnRoKSk7CisJZmx1c2ggfD0gKHRoLT5hY2tfc2VxIF4gdGgyLT5hY2tfc2VxKSB8ICh0aC0+d2luZG93IF4gdGgyLT53aW5kb3cpOworCWZvciAoaSA9IHNpemVvZigqdGgpOyAhZmx1c2ggJiYgaSA8IHRobGVuOyBpICs9IDQpCisJCWZsdXNoIHw9ICoodTMyICopKCh1OCAqKXRoICsgaSkgXgorCQkJICoodTMyICopKCh1OCAqKXRoMiArIGkpOwogCi0JdG90YWwgPSBwLT5sZW47CiAJbXNzID0gc2tiX3NoaW5mbyhwKS0+Z3NvX3NpemU7CiAKLQlmbHVzaCB8PSBza2ItPmxlbiA+IG1zcyB8fCBza2ItPmxlbiA8PSAwOwotCWZsdXNoIHw9IG50b2hsKHRoMi0+c2VxKSArIHRvdGFsICE9IG50b2hsKHRoLT5zZXEpOworCWZsdXNoIHw9IChza2JfZ3JvX2xlbihza2IpID4gbXNzKSB8ICFza2JfZ3JvX2xlbihza2IpOworCWZsdXNoIHw9IChudG9obCh0aDItPnNlcSkgKyBza2JfZ3JvX2xlbihwKSkgXiBudG9obCh0aC0+c2VxKTsKIAogCWlmIChmbHVzaCB8fCBza2JfZ3JvX3JlY2VpdmUoaGVhZCwgc2tiKSkgewogCQltc3MgPSAxOwpAQCAtMjUzOCw3ICsyNTc1LDcgQEAKIAl0Y3BfZmxhZ193b3JkKHRoMikgfD0gZmxhZ3MgJiAoVENQX0ZMQUdfRklOIHwgVENQX0ZMQUdfUFNIKTsKIAogb3V0X2NoZWNrX2ZpbmFsOgotCWZsdXNoID0gc2tiLT5sZW4gPCBtc3M7CisJZmx1c2ggPSBza2JfZ3JvX2xlbihza2IpIDwgbXNzOwogCWZsdXNoIHw9IGZsYWdzICYgKFRDUF9GTEFHX1VSRyB8IFRDUF9GTEFHX1BTSCB8IFRDUF9GTEFHX1JTVCB8CiAJCQkgIFRDUF9GTEFHX1NZTiB8IFRDUF9GTEFHX0ZJTik7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9iaWMuYyBiL25ldC9pcHY0L3RjcF9iaWMuYwppbmRleCA3ZWI3NjM2Li4zYjUzZmQxIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfYmljLmMKKysrIGIvbmV0L2lwdjQvdGNwX2JpYy5jCkBAIC0xNDksMTYgKzE0OSw3IEBACiAJCXRjcF9zbG93X3N0YXJ0KHRwKTsKIAllbHNlIHsKIAkJYmljdGNwX3VwZGF0ZShjYSwgdHAtPnNuZF9jd25kKTsKLQotCQkvKiBJbiBkYW5nZXJvdXMgYXJlYSwgaW5jcmVhc2Ugc2xvd2x5LgotCQkgKiBJbiB0aGVvcnkgdGhpcyBpcyB0cC0+c25kX2N3bmQgKz0gMSAvIHRwLT5zbmRfY3duZAotCQkgKi8KLQkJaWYgKHRwLT5zbmRfY3duZF9jbnQgPj0gY2EtPmNudCkgewotCQkJaWYgKHRwLT5zbmRfY3duZCA8IHRwLT5zbmRfY3duZF9jbGFtcCkKLQkJCQl0cC0+c25kX2N3bmQrKzsKLQkJCXRwLT5zbmRfY3duZF9jbnQgPSAwOwotCQl9IGVsc2UKLQkJCXRwLT5zbmRfY3duZF9jbnQrKzsKKwkJdGNwX2NvbmdfYXZvaWRfYWkodHAsIGNhLT5jbnQpOwogCX0KIAogfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2NvbmcuYyBiL25ldC9pcHY0L3RjcF9jb25nLmMKaW5kZXggNGVjNWI0ZS4uZTkyYmViOSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2NvbmcuYworKysgYi9uZXQvaXB2NC90Y3BfY29uZy5jCkBAIC0zMzYsNiArMzM2LDE5IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh0Y3Bfc2xvd19zdGFydCk7CiAKKy8qIEluIHRoZW9yeSB0aGlzIGlzIHRwLT5zbmRfY3duZCArPSAxIC8gdHAtPnNuZF9jd25kIChvciBhbHRlcm5hdGl2ZSB3KSAqLwordm9pZCB0Y3BfY29uZ19hdm9pZF9haShzdHJ1Y3QgdGNwX3NvY2sgKnRwLCB1MzIgdykKK3sKKwlpZiAodHAtPnNuZF9jd25kX2NudCA+PSB3KSB7CisJCWlmICh0cC0+c25kX2N3bmQgPCB0cC0+c25kX2N3bmRfY2xhbXApCisJCQl0cC0+c25kX2N3bmQrKzsKKwkJdHAtPnNuZF9jd25kX2NudCA9IDA7CisJfSBlbHNlIHsKKwkJdHAtPnNuZF9jd25kX2NudCsrOworCX0KK30KK0VYUE9SVF9TWU1CT0xfR1BMKHRjcF9jb25nX2F2b2lkX2FpKTsKKwogLyoKICAqIFRDUCBSZW5vIGNvbmdlc3Rpb24gY29udHJvbAogICogVGhpcyBpcyBzcGVjaWFsIGNhc2UgdXNlZCBmb3IgZmFsbGJhY2sgYXMgd2VsbC4KQEAgLTM2NSwxMyArMzc4LDcgQEAKIAkJCQl0cC0+c25kX2N3bmQrKzsKIAkJfQogCX0gZWxzZSB7Ci0JCS8qIEluIHRoZW9yeSB0aGlzIGlzIHRwLT5zbmRfY3duZCArPSAxIC8gdHAtPnNuZF9jd25kICovCi0JCWlmICh0cC0+c25kX2N3bmRfY250ID49IHRwLT5zbmRfY3duZCkgewotCQkJaWYgKHRwLT5zbmRfY3duZCA8IHRwLT5zbmRfY3duZF9jbGFtcCkKLQkJCQl0cC0+c25kX2N3bmQrKzsKLQkJCXRwLT5zbmRfY3duZF9jbnQgPSAwOwotCQl9IGVsc2UKLQkJCXRwLT5zbmRfY3duZF9jbnQrKzsKKwkJdGNwX2NvbmdfYXZvaWRfYWkodHAsIHRwLT5zbmRfY3duZCk7CiAJfQogfQogRVhQT1JUX1NZTUJPTF9HUEwodGNwX3Jlbm9fY29uZ19hdm9pZCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfY3ViaWMuYyBiL25ldC9pcHY0L3RjcF9jdWJpYy5jCmluZGV4IGVlNDY3ZWMuLjcxZDVmMmYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9jdWJpYy5jCisrKyBiL25ldC9pcHY0L3RjcF9jdWJpYy5jCkBAIC0yOTQsMTYgKzI5NCw3IEBACiAJCXRjcF9zbG93X3N0YXJ0KHRwKTsKIAl9IGVsc2UgewogCQliaWN0Y3BfdXBkYXRlKGNhLCB0cC0+c25kX2N3bmQpOwotCi0JCS8qIEluIGRhbmdlcm91cyBhcmVhLCBpbmNyZWFzZSBzbG93bHkuCi0JCSAqIEluIHRoZW9yeSB0aGlzIGlzIHRwLT5zbmRfY3duZCArPSAxIC8gdHAtPnNuZF9jd25kCi0JCSAqLwotCQlpZiAodHAtPnNuZF9jd25kX2NudCA+PSBjYS0+Y250KSB7Ci0JCQlpZiAodHAtPnNuZF9jd25kIDwgdHAtPnNuZF9jd25kX2NsYW1wKQotCQkJCXRwLT5zbmRfY3duZCsrOwotCQkJdHAtPnNuZF9jd25kX2NudCA9IDA7Ci0JCX0gZWxzZQotCQkJdHAtPnNuZF9jd25kX2NudCsrOworCQl0Y3BfY29uZ19hdm9pZF9haSh0cCwgY2EtPmNudCk7CiAJfQogCiB9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfaHRjcC5jIGIvbmV0L2lwdjQvdGNwX2h0Y3AuYwppbmRleCA5Mzc1NDliLi4yNmQ1YzdmIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfaHRjcC5jCisrKyBiL25ldC9pcHY0L3RjcF9odGNwLmMKQEAgLTExNSw4ICsxMTUsNyBAQAogCQlyZXR1cm47CiAKIAkvKiBhY2hpZXZlZCB0aHJvdWdocHV0IGNhbGN1bGF0aW9ucyAqLwotCWlmIChpY3NrLT5pY3NrX2NhX3N0YXRlICE9IFRDUF9DQV9PcGVuICYmCi0JICAgIGljc2stPmljc2tfY2Ffc3RhdGUgIT0gVENQX0NBX0Rpc29yZGVyKSB7CisJaWYgKCEoKDEgPDwgaWNzay0+aWNza19jYV9zdGF0ZSkgJiAoVENQRl9DQV9PcGVuIHwgVENQRl9DQV9EaXNvcmRlcikpKSB7CiAJCWNhLT5wYWNrZXRjb3VudCA9IDA7CiAJCWNhLT5sYXN0dGltZSA9IG5vdzsKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2lucHV0LmMgYi9uZXQvaXB2NC90Y3BfaW5wdXQuYwppbmRleCBjMjg5NzZhNy4uMmJjOGUyNyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2lucHV0LmMKKysrIGIvbmV0L2lwdjQvdGNwX2lucHV0LmMKQEAgLTY0LDYgKzY0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPG5ldC9kc3QuaD4KICNpbmNsdWRlIDxuZXQvdGNwLmg+CiAjaW5jbHVkZSA8bmV0L2luZXRfY29tbW9uLmg+CkBAIC0xMTc4LDEwICsxMTc5LDE4IEBACiAJCWlmICghKFRDUF9TS0JfQ0Ioc2tiKS0+c2Fja2VkICYgVENQQ0JfU0FDS0VEX1JFVFJBTlMpKQogCQkJY29udGludWU7CiAKLQkJaWYgKGFmdGVyKHJlY2VpdmVkX3VwdG8sIGFja19zZXEpICYmCi0JCSAgICAodGNwX2lzX2ZhY2sodHApIHx8Ci0JCSAgICAgIWJlZm9yZShyZWNlaXZlZF91cHRvLAotCQkJICAgICBhY2tfc2VxICsgdHAtPnJlb3JkZXJpbmcgKiB0cC0+bXNzX2NhY2hlKSkpIHsKKwkJLyogVE9ETzogV2Ugd291bGQgbGlrZSB0byBnZXQgcmlkIG9mIHRjcF9pc19mYWNrKHRwKSBvbmx5CisJCSAqIGNvbnN0cmFpbnQgaGVyZSAoc2VlIGFib3ZlKSBidXQgZmlndXJpbmcgb3V0IHRoYXQgYXQKKwkJICogbGVhc3QgdHAtPnJlb3JkZXJpbmcgU0FDSyBibG9ja3MgcmVzaWRlIGJldHdlZW4gYWNrX3NlcQorCQkgKiBhbmQgcmVjZWl2ZWRfdXB0byBpcyBub3QgZWFzeSB0YXNrIHRvIGRvIGNoZWFwbHkgd2l0aAorCQkgKiB0aGUgYXZhaWxhYmxlIGRhdGFzdHJ1Y3R1cmVzLgorCQkgKgorCQkgKiBXaGV0aGVyIEZBQ0sgc2hvdWxkIGNoZWNrIGhlcmUgZm9yIHRwLT5yZW9yZGVyaW5nIHNlZ3MKKwkJICogaW4tYmV0d2VlbiBvbmUgY291bGQgYXJndWUgZm9yIGVpdGhlciB3YXkgKGl0IHdvdWxkIGJlCisJCSAqIHJhdGhlciBzaW1wbGUgdG8gaW1wbGVtZW50IGFzIHdlIGNvdWxkIGNvdW50IGZhY2tfY291bnQKKwkJICogZHVyaW5nIHRoZSB3YWxrIGFuZCBkbyB0cC0+ZmFja2V0c19vdXQgLSBmYWNrX2NvdW50KS4KKwkJICovCisJCWlmIChhZnRlcihyZWNlaXZlZF91cHRvLCBhY2tfc2VxKSkgewogCQkJVENQX1NLQl9DQihza2IpLT5zYWNrZWQgJj0gflRDUENCX1NBQ0tFRF9SRVRSQU5TOwogCQkJdHAtPnJldHJhbnNfb3V0IC09IHRjcF9za2JfcGNvdW50KHNrYik7CiAKQEAgLTE3OTQsMTEgKzE4MDMsNyBAQAogCWZvciAoaSA9IHVzZWRfc2Fja3MgLSAxOyBpID4gMDsgaS0tKSB7CiAJCWZvciAoaiA9IDA7IGogPCBpOyBqKyspIHsKIAkJCWlmIChhZnRlcihzcFtqXS5zdGFydF9zZXEsIHNwW2ogKyAxXS5zdGFydF9zZXEpKSB7Ci0JCQkJc3RydWN0IHRjcF9zYWNrX2Jsb2NrIHRtcDsKLQotCQkJCXRtcCA9IHNwW2pdOwotCQkJCXNwW2pdID0gc3BbaiArIDFdOwotCQkJCXNwW2ogKyAxXSA9IHRtcDsKKwkJCQlzd2FwKHNwW2pdLCBzcFtqICsgMV0pOwogCiAJCQkJLyogVHJhY2sgd2hlcmUgdGhlIGZpcnN0IFNBQ0sgYmxvY2sgZ29lcyB0byAqLwogCQkJCWlmIChqID09IGZpcnN0X3NhY2tfaW5kZXgpCkBAIC0yNDUzLDYgKzI0NTgsNDQgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyogTmV3IGhldXJpc3RpY3M6IGl0IGlzIHBvc3NpYmxlIG9ubHkgYWZ0ZXIgd2Ugc3dpdGNoZWQgdG8gcmVzdGFydCB0aW1lcgorICogZWFjaCB0aW1lIHdoZW4gc29tZXRoaW5nIGlzIEFDS2VkLiBIZW5jZSwgd2UgY2FuIGRldGVjdCB0aW1lZCBvdXQgcGFja2V0cworICogZHVyaW5nIGZhc3QgcmV0cmFuc21pdCB3aXRob3V0IGZhbGxpbmcgdG8gc2xvdyBzdGFydC4KKyAqCisgKiBVc2VmdWxuZXNzIG9mIHRoaXMgYXMgaXMgdmVyeSBxdWVzdGlvbmFibGUsIHNpbmNlIHdlIHNob3VsZCBrbm93IHdoaWNoIG9mCisgKiB0aGUgc2VnbWVudHMgaXMgdGhlIG5leHQgdG8gdGltZW91dCB3aGljaCBpcyByZWxhdGl2ZWx5IGV4cGVuc2l2ZSB0byBmaW5kCisgKiBpbiBnZW5lcmFsIGNhc2UgdW5sZXNzIHdlIGFkZCBzb21lIGRhdGEgc3RydWN0dXJlIGp1c3QgZm9yIHRoYXQuIFRoZQorICogY3VycmVudCBhcHByb2FjaCBjZXJ0YWlubHkgd29uJ3QgZmluZCB0aGUgcmlnaHQgb25lIHRvbyBvZnRlbiBhbmQgd2hlbiBpdAorICogZmluYWxseSBkb2VzIGZpbmQgX3NvbWV0aGluZ18gaXQgdXN1YWxseSBtYXJrcyBsYXJnZSBwYXJ0IG9mIHRoZSB3aW5kb3cKKyAqIHJpZ2h0IGF3YXkgKGJlY2F1c2UgYSByZXRyYW5zbWlzc2lvbiB3aXRoIGEgbGFyZ2VyIHRpbWVzdGFtcCBibG9ja3MgdGhlCisgKiBsb29wIGZyb20gYWR2YW5jaW5nKS4gLWlqCisgKi8KK3N0YXRpYyB2b2lkIHRjcF90aW1lb3V0X3NrYnMoc3RydWN0IHNvY2sgKnNrKQoreworCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOworCXN0cnVjdCBza19idWZmICpza2I7CisKKwlpZiAoIXRjcF9pc19mYWNrKHRwKSB8fCAhdGNwX2hlYWRfdGltZWRvdXQoc2spKQorCQlyZXR1cm47CisKKwlza2IgPSB0cC0+c2NvcmVib2FyZF9za2JfaGludDsKKwlpZiAodHAtPnNjb3JlYm9hcmRfc2tiX2hpbnQgPT0gTlVMTCkKKwkJc2tiID0gdGNwX3dyaXRlX3F1ZXVlX2hlYWQoc2spOworCisJdGNwX2Zvcl93cml0ZV9xdWV1ZV9mcm9tKHNrYiwgc2spIHsKKwkJaWYgKHNrYiA9PSB0Y3Bfc2VuZF9oZWFkKHNrKSkKKwkJCWJyZWFrOworCQlpZiAoIXRjcF9za2JfdGltZWRvdXQoc2ssIHNrYikpCisJCQlicmVhazsKKworCQl0Y3Bfc2tiX21hcmtfbG9zdCh0cCwgc2tiKTsKKwl9CisKKwl0cC0+c2NvcmVib2FyZF9za2JfaGludCA9IHNrYjsKKworCXRjcF92ZXJpZnlfbGVmdF9vdXQodHApOworfQorCiAvKiBNYXJrIGhlYWQgb2YgcXVldWUgdXAgYXMgbG9zdC4gV2l0aCBSRkMzNTE3IFNBQ0ssIHRoZSBwYWNrZXRzIGlzCiAgKiBpcyBhZ2FpbnN0IHNhY2tlZCAiY250Iiwgb3RoZXJ3aXNlIGl0J3MgYWdhaW5zdCBmYWNrZWQgImNudCIKICAqLwpAQCAtMjUyNSwzMCArMjU2OCw3IEBACiAJCXRjcF9tYXJrX2hlYWRfbG9zdChzaywgc2Fja2VkX3VwdG8pOwogCX0KIAotCS8qIE5ldyBoZXVyaXN0aWNzOiBpdCBpcyBwb3NzaWJsZSBvbmx5IGFmdGVyIHdlIHN3aXRjaGVkCi0JICogdG8gcmVzdGFydCB0aW1lciBlYWNoIHRpbWUgd2hlbiBzb21ldGhpbmcgaXMgQUNLZWQuCi0JICogSGVuY2UsIHdlIGNhbiBkZXRlY3QgdGltZWQgb3V0IHBhY2tldHMgZHVyaW5nIGZhc3QKLQkgKiByZXRyYW5zbWl0IHdpdGhvdXQgZmFsbGluZyB0byBzbG93IHN0YXJ0LgotCSAqLwotCWlmICh0Y3BfaXNfZmFjayh0cCkgJiYgdGNwX2hlYWRfdGltZWRvdXQoc2spKSB7Ci0JCXN0cnVjdCBza19idWZmICpza2I7Ci0KLQkJc2tiID0gdHAtPnNjb3JlYm9hcmRfc2tiX2hpbnQgPyB0cC0+c2NvcmVib2FyZF9za2JfaGludAotCQkJOiB0Y3Bfd3JpdGVfcXVldWVfaGVhZChzayk7Ci0KLQkJdGNwX2Zvcl93cml0ZV9xdWV1ZV9mcm9tKHNrYiwgc2spIHsKLQkJCWlmIChza2IgPT0gdGNwX3NlbmRfaGVhZChzaykpCi0JCQkJYnJlYWs7Ci0JCQlpZiAoIXRjcF9za2JfdGltZWRvdXQoc2ssIHNrYikpCi0JCQkJYnJlYWs7Ci0KLQkJCXRjcF9za2JfbWFya19sb3N0KHRwLCBza2IpOwotCQl9Ci0KLQkJdHAtPnNjb3JlYm9hcmRfc2tiX2hpbnQgPSBza2I7Ci0KLQkJdGNwX3ZlcmlmeV9sZWZ0X291dCh0cCk7Ci0JfQorCXRjcF90aW1lb3V0X3NrYnMoc2spOwogfQogCiAvKiBDV05EIG1vZGVyYXRpb24sIHByZXZlbnRpbmcgYnVyc3RzIGR1ZSB0byB0b28gYmlnIEFDS3MKQEAgLTI4MTMsNyArMjgzMyw3IEBACiAJaWNzay0+aWNza19tdHVwLnByb2JlX3NpemUgPSAwOwogfQogCi1zdGF0aWMgdm9pZCB0Y3BfbXR1cF9wcm9iZV9zdWNjZXNzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyB2b2lkIHRjcF9tdHVwX3Byb2JlX3N1Y2Nlc3Moc3RydWN0IHNvY2sgKnNrKQogewogCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwogCXN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTsKQEAgLTI4NDEsNyArMjg2MSw3IEBACiAJY29uc3Qgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spOwogCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwogCXN0cnVjdCBza19idWZmICpza2I7Ci0JdW5zaWduZWQgaW50IG1zcyA9IHRjcF9jdXJyZW50X21zcyhzaywgMCk7CisJdW5zaWduZWQgaW50IG1zcyA9IHRjcF9jdXJyZW50X21zcyhzayk7CiAJdTMyIHByaW9yX2xvc3QgPSB0cC0+bG9zdF9vdXQ7CiAKIAl0Y3BfZm9yX3dyaXRlX3F1ZXVlKHNrYiwgc2spIHsKQEAgLTMxNzgsNyArMzE5OCw2IEBACiAKIAl3aGlsZSAoKHNrYiA9IHRjcF93cml0ZV9xdWV1ZV9oZWFkKHNrKSkgJiYgc2tiICE9IHRjcF9zZW5kX2hlYWQoc2spKSB7CiAJCXN0cnVjdCB0Y3Bfc2tiX2NiICpzY2IgPSBUQ1BfU0tCX0NCKHNrYik7Ci0JCXUzMiBlbmRfc2VxOwogCQl1MzIgYWNrZWRfcGNvdW50OwogCQl1OCBzYWNrZWQgPSBzY2ItPnNhY2tlZDsKIApAQCAtMzE5MywxNiArMzIxMiw4IEBACiAJCQkJYnJlYWs7CiAKIAkJCWZ1bGx5X2Fja2VkID0gMDsKLQkJCWVuZF9zZXEgPSB0cC0+c25kX3VuYTsKIAkJfSBlbHNlIHsKIAkJCWFja2VkX3Bjb3VudCA9IHRjcF9za2JfcGNvdW50KHNrYik7Ci0JCQllbmRfc2VxID0gc2NiLT5lbmRfc2VxOwotCQl9Ci0KLQkJLyogTVRVIHByb2JpbmcgY2hlY2tzICovCi0JCWlmIChmdWxseV9hY2tlZCAmJiBpY3NrLT5pY3NrX210dXAucHJvYmVfc2l6ZSAmJgotCQkgICAgIWFmdGVyKHRwLT5tdHVfcHJvYmUucHJvYmVfc2VxX2VuZCwgc2NiLT5lbmRfc2VxKSkgewotCQkJdGNwX210dXBfcHJvYmVfc3VjY2Vzcyhzaywgc2tiKTsKIAkJfQogCiAJCWlmIChzYWNrZWQgJiBUQ1BDQl9SRVRSQU5TKSB7CkBAIC0zMjY3LDI0ICszMjc4LDI2IEBACiAJCWNvbnN0IHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKmNhX29wcwogCQkJPSBpbmV0X2NzayhzayktPmljc2tfY2Ffb3BzOwogCisJCWlmICh1bmxpa2VseShpY3NrLT5pY3NrX210dXAucHJvYmVfc2l6ZSAmJgorCQkJICAgICAhYWZ0ZXIodHAtPm10dV9wcm9iZS5wcm9iZV9zZXFfZW5kLCB0cC0+c25kX3VuYSkpKSB7CisJCQl0Y3BfbXR1cF9wcm9iZV9zdWNjZXNzKHNrKTsKKwkJfQorCiAJCXRjcF9hY2tfdXBkYXRlX3J0dChzaywgZmxhZywgc2VxX3J0dCk7CiAJCXRjcF9yZWFybV9ydG8oc2spOwogCiAJCWlmICh0Y3BfaXNfcmVubyh0cCkpIHsKIAkJCXRjcF9yZW1vdmVfcmVub19zYWNrcyhzaywgcGt0c19hY2tlZCk7CiAJCX0gZWxzZSB7CisJCQlpbnQgZGVsdGE7CisKIAkJCS8qIE5vbi1yZXRyYW5zbWl0dGVkIGhvbGUgZ290IGZpbGxlZD8gVGhhdCdzIHJlb3JkZXJpbmcgKi8KIAkJCWlmIChyZW9yZCA8IHByaW9yX2ZhY2tldHMpCiAJCQkJdGNwX3VwZGF0ZV9yZW9yZGVyaW5nKHNrLCB0cC0+ZmFja2V0c19vdXQgLSByZW9yZCwgMCk7CiAKLQkJCS8qIE5vIG5lZWQgdG8gY2FyZSBmb3IgdW5kZXJmbG93cyBoZXJlIGJlY2F1c2UKLQkJCSAqIHRoZSBsb3N0X3NrYl9oaW50IGdldHMgTlVMTGVkIGlmIHdlJ3JlIHBhc3QgaXQKLQkJCSAqIChvciBzb21ldGhpbmcgbm9uLXRyaXZpYWwgaGFwcGVuZWQpCi0JCQkgKi8KLQkJCWlmICh0Y3BfaXNfZmFjayh0cCkpCi0JCQkJdHAtPmxvc3RfY250X2hpbnQgLT0gcGt0c19hY2tlZDsKLQkJCWVsc2UKLQkJCQl0cC0+bG9zdF9jbnRfaGludCAtPSBwcmlvcl9zYWNrZWQgLSB0cC0+c2Fja2VkX291dDsKKwkJCWRlbHRhID0gdGNwX2lzX2ZhY2sodHApID8gcGt0c19hY2tlZCA6CisJCQkJCQkgIHByaW9yX3NhY2tlZCAtIHRwLT5zYWNrZWRfb3V0OworCQkJdHAtPmxvc3RfY250X2hpbnQgLT0gbWluKHRwLT5sb3N0X2NudF9oaW50LCBkZWx0YSk7CiAJCX0KIAogCQl0cC0+ZmFja2V0c19vdXQgLT0gbWluKHBrdHNfYWNrZWQsIHRwLT5mYWNrZXRzX291dCk7CkBAIC0zMzk2LDcgKzM0MDksNyBAQAogCiAJaWYgKHRjcF9tYXlfdXBkYXRlX3dpbmRvdyh0cCwgYWNrLCBhY2tfc2VxLCBud2luKSkgewogCQlmbGFnIHw9IEZMQUdfV0lOX1VQREFURTsKLQkJdGNwX3VwZGF0ZV93bCh0cCwgYWNrLCBhY2tfc2VxKTsKKwkJdGNwX3VwZGF0ZV93bCh0cCwgYWNrX3NlcSk7CiAKIAkJaWYgKHRwLT5zbmRfd25kICE9IG53aW4pIHsKIAkJCXRwLT5zbmRfd25kID0gbndpbjsKQEAgLTM1NzIsMTUgKzM1ODUsMTggQEAKIAlpbnQgcHJpb3JfcGFja2V0czsKIAlpbnQgZnJ0b19jd25kID0gMDsKIAotCS8qIElmIHRoZSBhY2sgaXMgbmV3ZXIgdGhhbiBzZW50IG9yIG9sZGVyIHRoYW4gcHJldmlvdXMgYWNrcworCS8qIElmIHRoZSBhY2sgaXMgb2xkZXIgdGhhbiBwcmV2aW91cyBhY2tzCiAJICogdGhlbiB3ZSBjYW4gcHJvYmFibHkgaWdub3JlIGl0LgogCSAqLwotCWlmIChhZnRlcihhY2ssIHRwLT5zbmRfbnh0KSkKLQkJZ290byB1bmludGVyZXN0aW5nX2FjazsKLQogCWlmIChiZWZvcmUoYWNrLCBwcmlvcl9zbmRfdW5hKSkKIAkJZ290byBvbGRfYWNrOwogCisJLyogSWYgdGhlIGFjayBpbmNsdWRlcyBkYXRhIHdlIGhhdmVuJ3Qgc2VudCB5ZXQsIGRpc2NhcmQKKwkgKiB0aGlzIHNlZ21lbnQgKFJGQzc5MyBTZWN0aW9uIDMuOSkuCisJICovCisJaWYgKGFmdGVyKGFjaywgdHAtPnNuZF9ueHQpKQorCQlnb3RvIGludmFsaWRfYWNrOworCiAJaWYgKGFmdGVyKGFjaywgcHJpb3Jfc25kX3VuYSkpCiAJCWZsYWcgfD0gRkxBR19TTkRfVU5BX0FEVkFOQ0VEOwogCkBAIC0zNjAxLDcgKzM2MTcsNyBAQAogCQkgKiBObyBtb3JlIGNoZWNrcyBhcmUgcmVxdWlyZWQuCiAJCSAqIE5vdGUsIHdlIHVzZSB0aGUgZmFjdCB0aGF0IFNORC5VTkE+PVNORC5XTDIuCiAJCSAqLwotCQl0Y3BfdXBkYXRlX3dsKHRwLCBhY2ssIGFja19zZXEpOworCQl0Y3BfdXBkYXRlX3dsKHRwLCBhY2tfc2VxKTsKIAkJdHAtPnNuZF91bmEgPSBhY2s7CiAJCWZsYWcgfD0gRkxBR19XSU5fVVBEQVRFOwogCkBAIC0zNjcwLDYgKzM2ODYsMTAgQEAKIAkJdGNwX2Fja19wcm9iZShzayk7CiAJcmV0dXJuIDE7CiAKK2ludmFsaWRfYWNrOgorCVNPQ0tfREVCVUcoc2ssICJBY2sgJXUgYWZ0ZXIgJXU6JXVcbiIsIGFjaywgdHAtPnNuZF91bmEsIHRwLT5zbmRfbnh0KTsKKwlyZXR1cm4gLTE7CisKIG9sZF9hY2s6CiAJaWYgKFRDUF9TS0JfQ0Ioc2tiKS0+c2Fja2VkKSB7CiAJCXRjcF9zYWNrdGFnX3dyaXRlX3F1ZXVlKHNrLCBza2IsIHByaW9yX3NuZF91bmEpOwpAQCAtMzY3Nyw4ICszNjk3LDcgQEAKIAkJCXRjcF90cnlfa2VlcF9vcGVuKHNrKTsKIAl9CiAKLXVuaW50ZXJlc3RpbmdfYWNrOgotCVNPQ0tfREVCVUcoc2ssICJBY2sgJXUgb3V0IG9mICV1OiV1XG4iLCBhY2ssIHRwLT5zbmRfdW5hLCB0cC0+c25kX254dCk7CisJU09DS19ERUJVRyhzaywgIkFjayAldSBiZWZvcmUgJXU6JXVcbiIsIGFjaywgdHAtPnNuZF91bmEsIHRwLT5zbmRfbnh0KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzg2Niw4ICszODg1LDcgQEAKIAkJICogTm90IG9ubHksIGFsc28gaXQgb2NjdXJzIGZvciBleHBpcmVkIHRpbWVzdGFtcHMuCiAJCSAqLwogCi0JCWlmICgoczMyKSh0cC0+cnhfb3B0LnJjdl90c3ZhbCAtIHRwLT5yeF9vcHQudHNfcmVjZW50KSA+PSAwIHx8Ci0JCSAgIGdldF9zZWNvbmRzKCkgPj0gdHAtPnJ4X29wdC50c19yZWNlbnRfc3RhbXAgKyBUQ1BfUEFXU18yNERBWVMpCisJCWlmICh0Y3BfcGF3c19jaGVjaygmdHAtPnJ4X29wdCwgMCkpCiAJCQl0Y3Bfc3RvcmVfdHNfcmVjZW50KHRwKTsKIAl9CiB9CkBAIC0zOTE5LDkgKzM5MzcsOSBAQAogCQkJCSAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJY29uc3Qgc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7Ci0JcmV0dXJuICgoczMyKSh0cC0+cnhfb3B0LnRzX3JlY2VudCAtIHRwLT5yeF9vcHQucmN2X3RzdmFsKSA+IFRDUF9QQVdTX1dJTkRPVyAmJgotCQlnZXRfc2Vjb25kcygpIDwgdHAtPnJ4X29wdC50c19yZWNlbnRfc3RhbXAgKyBUQ1BfUEFXU18yNERBWVMgJiYKLQkJIXRjcF9kaXNvcmRlcmVkX2Fjayhzaywgc2tiKSk7CisKKwlyZXR1cm4gIXRjcF9wYXdzX2NoZWNrKCZ0cC0+cnhfb3B0LCBUQ1BfUEFXU19XSU5ET1cpICYmCisJICAgICAgICF0Y3BfZGlzb3JkZXJlZF9hY2soc2ssIHNrYik7CiB9CiAKIC8qIENoZWNrIHNlZ21lbnQgc2VxdWVuY2UgbnVtYmVyIGZvciB2YWxpZGl0eS4KQEAgLTQwNzksNyArNDA5Nyw2IEBACiAJCXRwLT5yeF9vcHQuZHNhY2sgPSAxOwogCQl0cC0+ZHVwbGljYXRlX3NhY2tbMF0uc3RhcnRfc2VxID0gc2VxOwogCQl0cC0+ZHVwbGljYXRlX3NhY2tbMF0uZW5kX3NlcSA9IGVuZF9zZXE7Ci0JCXRwLT5yeF9vcHQuZWZmX3NhY2tzID0gdHAtPnJ4X29wdC5udW1fc2Fja3MgKyAxOwogCX0KIH0KIApAQCAtNDEzNCw4ICs0MTUxLDYgQEAKIAkJCSAqIERlY3JlYXNlIG51bV9zYWNrcy4KIAkJCSAqLwogCQkJdHAtPnJ4X29wdC5udW1fc2Fja3MtLTsKLQkJCXRwLT5yeF9vcHQuZWZmX3NhY2tzID0gdHAtPnJ4X29wdC5udW1fc2Fja3MgKwotCQkJCQkgICAgICAgdHAtPnJ4X29wdC5kc2FjazsKIAkJCWZvciAoaSA9IHRoaXNfc2FjazsgaSA8IHRwLT5yeF9vcHQubnVtX3NhY2tzOyBpKyspCiAJCQkJc3BbaV0gPSBzcFtpICsgMV07CiAJCQljb250aW51ZTsKQEAgLTQxNDQsMjAgKzQxNTksNiBAQAogCX0KIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHRjcF9zYWNrX3N3YXAoc3RydWN0IHRjcF9zYWNrX2Jsb2NrICpzYWNrMSwKLQkJCQkgc3RydWN0IHRjcF9zYWNrX2Jsb2NrICpzYWNrMikKLXsKLQlfX3UzMiB0bXA7Ci0KLQl0bXAgPSBzYWNrMS0+c3RhcnRfc2VxOwotCXNhY2sxLT5zdGFydF9zZXEgPSBzYWNrMi0+c3RhcnRfc2VxOwotCXNhY2syLT5zdGFydF9zZXEgPSB0bXA7Ci0KLQl0bXAgPSBzYWNrMS0+ZW5kX3NlcTsKLQlzYWNrMS0+ZW5kX3NlcSA9IHNhY2syLT5lbmRfc2VxOwotCXNhY2syLT5lbmRfc2VxID0gdG1wOwotfQotCiBzdGF0aWMgdm9pZCB0Y3Bfc2Fja19uZXdfb2ZvX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHUzMiBzZXEsIHUzMiBlbmRfc2VxKQogewogCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwpAQCAtNDE3Miw3ICs0MTczLDcgQEAKIAkJaWYgKHRjcF9zYWNrX2V4dGVuZChzcCwgc2VxLCBlbmRfc2VxKSkgewogCQkJLyogUm90YXRlIHRoaXNfc2FjayB0byB0aGUgZmlyc3Qgb25lLiAqLwogCQkJZm9yICg7IHRoaXNfc2FjayA+IDA7IHRoaXNfc2Fjay0tLCBzcC0tKQotCQkJCXRjcF9zYWNrX3N3YXAoc3AsIHNwIC0gMSk7CisJCQkJc3dhcCgqc3AsICooc3AgLSAxKSk7CiAJCQlpZiAoY3VyX3NhY2tzID4gMSkKIAkJCQl0Y3Bfc2Fja19tYXliZV9jb2FsZXNjZSh0cCk7CiAJCQlyZXR1cm47CkBAIC00MTk4LDcgKzQxOTksNiBAQAogCXNwLT5zdGFydF9zZXEgPSBzZXE7CiAJc3AtPmVuZF9zZXEgPSBlbmRfc2VxOwogCXRwLT5yeF9vcHQubnVtX3NhY2tzKys7Ci0JdHAtPnJ4X29wdC5lZmZfc2Fja3MgPSB0cC0+cnhfb3B0Lm51bV9zYWNrcyArIHRwLT5yeF9vcHQuZHNhY2s7CiB9CiAKIC8qIFJDVi5OWFQgYWR2YW5jZXMsIHNvbWUgU0FDS3Mgc2hvdWxkIGJlIGVhdGVuLiAqLwpAQCAtNDIxMiw3ICs0MjEyLDYgQEAKIAkvKiBFbXB0eSBvZm8gcXVldWUsIGhlbmNlLCBhbGwgdGhlIFNBQ0tzIGFyZSBlYXRlbi4gQ2xlYXIuICovCiAJaWYgKHNrYl9xdWV1ZV9lbXB0eSgmdHAtPm91dF9vZl9vcmRlcl9xdWV1ZSkpIHsKIAkJdHAtPnJ4X29wdC5udW1fc2Fja3MgPSAwOwotCQl0cC0+cnhfb3B0LmVmZl9zYWNrcyA9IHRwLT5yeF9vcHQuZHNhY2s7CiAJCXJldHVybjsKIAl9CiAKQEAgLTQyMzMsMTEgKzQyMzIsNyBAQAogCQl0aGlzX3NhY2srKzsKIAkJc3ArKzsKIAl9Ci0JaWYgKG51bV9zYWNrcyAhPSB0cC0+cnhfb3B0Lm51bV9zYWNrcykgewotCQl0cC0+cnhfb3B0Lm51bV9zYWNrcyA9IG51bV9zYWNrczsKLQkJdHAtPnJ4X29wdC5lZmZfc2Fja3MgPSB0cC0+cnhfb3B0Lm51bV9zYWNrcyArCi0JCQkJICAgICAgIHRwLT5yeF9vcHQuZHNhY2s7Ci0JfQorCXRwLT5yeF9vcHQubnVtX3NhY2tzID0gbnVtX3NhY2tzOwogfQogCiAvKiBUaGlzIG9uZSBjaGVja3MgdG8gc2VlIGlmIHdlIGNhbiBwdXQgZGF0YSBmcm9tIHRoZQpAQCAtNDMxMywxMCArNDMwOCw3IEBACiAKIAlUQ1BfRUNOX2FjY2VwdF9jd3IodHAsIHNrYik7CiAKLQlpZiAodHAtPnJ4X29wdC5kc2FjaykgewotCQl0cC0+cnhfb3B0LmRzYWNrID0gMDsKLQkJdHAtPnJ4X29wdC5lZmZfc2Fja3MgPSB0cC0+cnhfb3B0Lm51bV9zYWNrczsKLQl9CisJdHAtPnJ4X29wdC5kc2FjayA9IDA7CiAKIAkvKiAgUXVldWUgZGF0YSBmb3IgZGVsaXZlcnkgdG8gdGhlIHVzZXIuCiAJICogIFBhY2tldHMgaW4gc2VxdWVuY2UgZ28gdG8gdGhlIHJlY2VpdmUgcXVldWUuCkBAIC00NDM1LDggKzQ0MjcsNiBAQAogCQkvKiBJbml0aWFsIG91dCBvZiBvcmRlciBzZWdtZW50LCBidWlsZCAxIFNBQ0suICovCiAJCWlmICh0Y3BfaXNfc2Fjayh0cCkpIHsKIAkJCXRwLT5yeF9vcHQubnVtX3NhY2tzID0gMTsKLQkJCXRwLT5yeF9vcHQuZHNhY2sgICAgID0gMDsKLQkJCXRwLT5yeF9vcHQuZWZmX3NhY2tzID0gMTsKIAkJCXRwLT5zZWxlY3RpdmVfYWNrc1swXS5zdGFydF9zZXEgPSBUQ1BfU0tCX0NCKHNrYiktPnNlcTsKIAkJCXRwLT5zZWxlY3RpdmVfYWNrc1swXS5lbmRfc2VxID0KIAkJCQkJCVRDUF9TS0JfQ0Ioc2tiKS0+ZW5kX3NlcTsKQEAgLTUxNTcsNyArNTE0Nyw4IEBACiAJICovCiAKIAlpZiAoKHRjcF9mbGFnX3dvcmQodGgpICYgVENQX0hQX0JJVFMpID09IHRwLT5wcmVkX2ZsYWdzICYmCi0JICAgIFRDUF9TS0JfQ0Ioc2tiKS0+c2VxID09IHRwLT5yY3Zfbnh0KSB7CisJICAgIFRDUF9TS0JfQ0Ioc2tiKS0+c2VxID09IHRwLT5yY3Zfbnh0ICYmCisJICAgICFhZnRlcihUQ1BfU0tCX0NCKHNrYiktPmFja19zZXEsIHRwLT5zbmRfbnh0KSkgewogCQlpbnQgdGNwX2hlYWRlcl9sZW4gPSB0cC0+dGNwX2hlYWRlcl9sZW47CiAKIAkJLyogVGltZXN0YW1wIGhlYWRlciBwcmVkaWN0aW9uOiB0Y3BfaGVhZGVyX2xlbgpAQCAtNTMxMCw4ICs1MzAxLDggQEAKIAkJcmV0dXJuIC1yZXM7CiAKIHN0ZXA1OgotCWlmICh0aC0+YWNrKQotCQl0Y3BfYWNrKHNrLCBza2IsIEZMQUdfU0xPV1BBVEgpOworCWlmICh0aC0+YWNrICYmIHRjcF9hY2soc2ssIHNrYiwgRkxBR19TTE9XUEFUSCkgPCAwKQorCQlnb3RvIGRpc2NhcmQ7CiAKIAl0Y3BfcmN2X3J0dF9tZWFzdXJlX3RzKHNrLCBza2IpOwogCkBAIC01NDA5LDcgKzU0MDAsNyBAQAogCQkgKiBuZXZlciBzY2FsZWQuCiAJCSAqLwogCQl0cC0+c25kX3duZCA9IG50b2hzKHRoLT53aW5kb3cpOwotCQl0Y3BfaW5pdF93bCh0cCwgVENQX1NLQl9DQihza2IpLT5hY2tfc2VxLCBUQ1BfU0tCX0NCKHNrYiktPnNlcSk7CisJCXRjcF9pbml0X3dsKHRwLCBUQ1BfU0tCX0NCKHNrYiktPnNlcSk7CiAKIAkJaWYgKCF0cC0+cnhfb3B0LndzY2FsZV9vaykgewogCQkJdHAtPnJ4X29wdC5zbmRfd3NjYWxlID0gdHAtPnJ4X29wdC5yY3Zfd3NjYWxlID0gMDsKQEAgLTU1MTAsNyArNTUwMSw3IEBACiAKIAkvKiBQQVdTIGNoZWNrLiAqLwogCWlmICh0cC0+cnhfb3B0LnRzX3JlY2VudF9zdGFtcCAmJiB0cC0+cnhfb3B0LnNhd190c3RhbXAgJiYKLQkgICAgdGNwX3Bhd3NfY2hlY2soJnRwLT5yeF9vcHQsIDApKQorCSAgICB0Y3BfcGF3c19yZWplY3QoJnRwLT5yeF9vcHQsIDApKQogCQlnb3RvIGRpc2NhcmRfYW5kX3VuZG87CiAKIAlpZiAodGgtPnN5bikgewpAQCAtNTY0OCw3ICs1NjM5LDcgQEAKIAogCS8qIHN0ZXAgNTogY2hlY2sgdGhlIEFDSyBmaWVsZCAqLwogCWlmICh0aC0+YWNrKSB7Ci0JCWludCBhY2NlcHRhYmxlID0gdGNwX2Fjayhzaywgc2tiLCBGTEFHX1NMT1dQQVRIKTsKKwkJaW50IGFjY2VwdGFibGUgPSB0Y3BfYWNrKHNrLCBza2IsIEZMQUdfU0xPV1BBVEgpID4gMDsKIAogCQlzd2l0Y2ggKHNrLT5za19zdGF0ZSkgewogCQljYXNlIFRDUF9TWU5fUkVDVjoKQEAgLTU2NzAsOCArNTY2MSw3IEBACiAJCQkJdHAtPnNuZF91bmEgPSBUQ1BfU0tCX0NCKHNrYiktPmFja19zZXE7CiAJCQkJdHAtPnNuZF93bmQgPSBudG9ocyh0aC0+d2luZG93KSA8PAogCQkJCQkgICAgICB0cC0+cnhfb3B0LnNuZF93c2NhbGU7Ci0JCQkJdGNwX2luaXRfd2wodHAsIFRDUF9TS0JfQ0Ioc2tiKS0+YWNrX3NlcSwKLQkJCQkJICAgIFRDUF9TS0JfQ0Ioc2tiKS0+c2VxKTsKKwkJCQl0Y3BfaW5pdF93bCh0cCwgVENQX1NLQl9DQihza2IpLT5zZXEpOwogCiAJCQkJLyogdGNwX2FjayBjb25zaWRlcnMgdGhpcyBBQ0sgYXMgZHVwbGljYXRlCiAJCQkJICogYW5kIGRvZXMgbm90IGNhbGN1bGF0ZSBydHQuCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfaXB2NC5jIGIvbmV0L2lwdjQvdGNwX2lwdjQuYwppbmRleCBjZjc0YzQxLi5kMGEzMTQ4IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfaXB2NC5jCisrKyBiL25ldC9pcHY0L3RjcF9pcHY0LmMKQEAgLTEyMjYsMTUgKzEyMjYsNiBAQAogCWlmICh3YW50X2Nvb2tpZSAmJiAhdG1wX29wdC5zYXdfdHN0YW1wKQogCQl0Y3BfY2xlYXJfb3B0aW9ucygmdG1wX29wdCk7CiAKLQlpZiAodG1wX29wdC5zYXdfdHN0YW1wICYmICF0bXBfb3B0LnJjdl90c3ZhbCkgewotCQkvKiBTb21lIE9TZXMgKHVua25vd24gb25lcywgYnV0IEkgc2VlIHRoZW0gb24gd2ViIHNlcnZlciwgd2hpY2gKLQkJICogY29udGFpbnMgaW5mb3JtYXRpb24gaW50ZXJlc3Rpbmcgb25seSBmb3Igd2luZG93cycKLQkJICogdXNlcnMpIGRvIG5vdCBzZW5kIHRoZWlyIHN0YW1wIGluIFNZTi4gSXQgaXMgZWFzeSBjYXNlLgotCQkgKiBXZSBzaW1wbHkgZG8gbm90IGFkdmVydGlzZSBUUyBzdXBwb3J0LgotCQkgKi8KLQkJdG1wX29wdC5zYXdfdHN0YW1wID0gMDsKLQkJdG1wX29wdC50c3RhbXBfb2sgID0gMDsKLQl9CiAJdG1wX29wdC50c3RhbXBfb2sgPSB0bXBfb3B0LnNhd190c3RhbXA7CiAKIAl0Y3Bfb3BlbnJlcV9pbml0KHJlcSwgJnRtcF9vcHQsIHNrYik7CkBAIC0yMzU1LDcgKzIzNDYsNyBAQAogCiAJc3dpdGNoIChza2ItPmlwX3N1bW1lZCkgewogCWNhc2UgQ0hFQ0tTVU1fQ09NUExFVEU6Ci0JCWlmICghdGNwX3Y0X2NoZWNrKHNrYi0+bGVuLCBpcGgtPnNhZGRyLCBpcGgtPmRhZGRyLAorCQlpZiAoIXRjcF92NF9jaGVjayhza2JfZ3JvX2xlbihza2IpLCBpcGgtPnNhZGRyLCBpcGgtPmRhZGRyLAogCQkJCSAgc2tiLT5jc3VtKSkgewogCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jIGIvbmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jCmluZGV4IGY2N2VmZmIuLjQzYmJiYTcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9taW5pc29ja3MuYworKysgYi9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMKQEAgLTEwNyw3ICsxMDcsNyBAQAogCQlpZiAodG1wX29wdC5zYXdfdHN0YW1wKSB7CiAJCQl0bXBfb3B0LnRzX3JlY2VudAk9IHRjcHR3LT50d190c19yZWNlbnQ7CiAJCQl0bXBfb3B0LnRzX3JlY2VudF9zdGFtcAk9IHRjcHR3LT50d190c19yZWNlbnRfc3RhbXA7Ci0JCQlwYXdzX3JlamVjdCA9IHRjcF9wYXdzX2NoZWNrKCZ0bXBfb3B0LCB0aC0+cnN0KTsKKwkJCXBhd3NfcmVqZWN0ID0gdGNwX3Bhd3NfcmVqZWN0KCZ0bXBfb3B0LCB0aC0+cnN0KTsKIAkJfQogCX0KIApAQCAtMzk5LDcgKzM5OSw3IEBACiAKIAkJdGNwX3ByZXF1ZXVlX2luaXQobmV3dHApOwogCi0JCXRjcF9pbml0X3dsKG5ld3RwLCB0cmVxLT5zbnRfaXNuLCB0cmVxLT5yY3ZfaXNuKTsKKwkJdGNwX2luaXRfd2wobmV3dHAsIHRyZXEtPnJjdl9pc24pOwogCiAJCW5ld3RwLT5zcnR0ID0gMDsKIAkJbmV3dHAtPm1kZXYgPSBUQ1BfVElNRU9VVF9JTklUOwpAQCAtNDM0LDkgKzQzNCw4IEBACiAJCW5ld3RwLT5yeF9vcHQuc2F3X3RzdGFtcCA9IDA7CiAKIAkJbmV3dHAtPnJ4X29wdC5kc2FjayA9IDA7Ci0JCW5ld3RwLT5yeF9vcHQuZWZmX3NhY2tzID0gMDsKLQogCQluZXd0cC0+cnhfb3B0Lm51bV9zYWNrcyA9IDA7CisKIAkJbmV3dHAtPnVyZ19kYXRhID0gMDsKIAogCQlpZiAoc29ja19mbGFnKG5ld3NrLCBTT0NLX0tFRVBPUEVOKSkKQEAgLTUxMiw3ICs1MTEsNyBAQAogCQkJICogZnJvbSBhbm90aGVyIGRhdGEuCiAJCQkgKi8KIAkJCXRtcF9vcHQudHNfcmVjZW50X3N0YW1wID0gZ2V0X3NlY29uZHMoKSAtICgoVENQX1RJTUVPVVRfSU5JVC9IWik8PHJlcS0+cmV0cmFucyk7Ci0JCQlwYXdzX3JlamVjdCA9IHRjcF9wYXdzX2NoZWNrKCZ0bXBfb3B0LCB0aC0+cnN0KTsKKwkJCXBhd3NfcmVqZWN0ID0gdGNwX3Bhd3NfcmVqZWN0KCZ0bXBfb3B0LCB0aC0+cnN0KTsKIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX291dHB1dC5jIGIvbmV0L2lwdjQvdGNwX291dHB1dC5jCmluZGV4IGRhMmMzYjguLmMxZjI1OWQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9vdXRwdXQuYworKysgYi9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMKQEAgLTQ0MSwxMCArNDQxLDcgQEAKIAkJCSpwdHIrKyA9IGh0b25sKHNwW3RoaXNfc2Fja10uZW5kX3NlcSk7CiAJCX0KIAotCQlpZiAodHAtPnJ4X29wdC5kc2FjaykgewotCQkJdHAtPnJ4X29wdC5kc2FjayA9IDA7Ci0JCQl0cC0+cnhfb3B0LmVmZl9zYWNrcyA9IHRwLT5yeF9vcHQubnVtX3NhY2tzOwotCQl9CisJCXRwLT5yeF9vcHQuZHNhY2sgPSAwOwogCX0KIH0KIApAQCAtNTUwLDYgKzU0Nyw3IEBACiAJc3RydWN0IHRjcF9za2JfY2IgKnRjYiA9IHNrYiA/IFRDUF9TS0JfQ0Ioc2tiKSA6IE5VTEw7CiAJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CiAJdW5zaWduZWQgc2l6ZSA9IDA7CisJdW5zaWduZWQgaW50IGVmZl9zYWNrczsKIAogI2lmZGVmIENPTkZJR19UQ1BfTUQ1U0lHCiAJKm1kNSA9IHRwLT5hZl9zcGVjaWZpYy0+bWQ1X2xvb2t1cChzaywgc2spOwpAQCAtNTY4LDEwICs1NjYsMTEgQEAKIAkJc2l6ZSArPSBUQ1BPTEVOX1RTVEFNUF9BTElHTkVEOwogCX0KIAotCWlmICh1bmxpa2VseSh0cC0+cnhfb3B0LmVmZl9zYWNrcykpIHsKKwllZmZfc2Fja3MgPSB0cC0+cnhfb3B0Lm51bV9zYWNrcyArIHRwLT5yeF9vcHQuZHNhY2s7CisJaWYgKHVubGlrZWx5KGVmZl9zYWNrcykpIHsKIAkJY29uc3QgdW5zaWduZWQgcmVtYWluaW5nID0gTUFYX1RDUF9PUFRJT05fU1BBQ0UgLSBzaXplOwogCQlvcHRzLT5udW1fc2Fja19ibG9ja3MgPQotCQkJbWluX3QodW5zaWduZWQsIHRwLT5yeF9vcHQuZWZmX3NhY2tzLAorCQkJbWluX3QodW5zaWduZWQsIGVmZl9zYWNrcywKIAkJCSAgICAgIChyZW1haW5pbmcgLSBUQ1BPTEVOX1NBQ0tfQkFTRV9BTElHTkVEKSAvCiAJCQkgICAgICBUQ1BPTEVOX1NBQ0tfUEVSQkxPQ0spOwogCQlzaXplICs9IFRDUE9MRU5fU0FDS19CQVNFX0FMSUdORUQgKwpAQCAtNjYzLDEwICs2NjIsMTQgQEAKIAl0aC0+dXJnX3B0cgkJPSAwOwogCiAJLyogVGhlIHVyZ19tb2RlIGNoZWNrIGlzIG5lY2Vzc2FyeSBkdXJpbmcgYSBiZWxvdyBzbmRfdW5hIHdpbiBwcm9iZSAqLwotCWlmICh1bmxpa2VseSh0Y3BfdXJnX21vZGUodHApICYmCi0JCSAgICAgYmV0d2Vlbih0cC0+c25kX3VwLCB0Y2ItPnNlcSArIDEsIHRjYi0+c2VxICsgMHhGRkZGKSkpIHsKLQkJdGgtPnVyZ19wdHIJCT0gaHRvbnModHAtPnNuZF91cCAtIHRjYi0+c2VxKTsKLQkJdGgtPnVyZwkJCT0gMTsKKwlpZiAodW5saWtlbHkodGNwX3VyZ19tb2RlKHRwKSAmJiBiZWZvcmUodGNiLT5zZXEsIHRwLT5zbmRfdXApKSkgeworCQlpZiAoYmVmb3JlKHRwLT5zbmRfdXAsIHRjYi0+c2VxICsgMHgxMDAwMCkpIHsKKwkJCXRoLT51cmdfcHRyID0gaHRvbnModHAtPnNuZF91cCAtIHRjYi0+c2VxKTsKKwkJCXRoLT51cmcgPSAxOworCQl9IGVsc2UgaWYgKGFmdGVyKHRjYi0+c2VxICsgMHhGRkZGLCB0cC0+c25kX254dCkpIHsKKwkJCXRoLT51cmdfcHRyID0gMHhGRkZGOworCQkJdGgtPnVyZyA9IDE7CisJCX0KIAl9CiAKIAl0Y3Bfb3B0aW9uc193cml0ZSgoX19iZTMyICopKHRoICsgMSksIHRwLCAmb3B0cywgJm1kNV9oYXNoX2xvY2F0aW9uKTsKQEAgLTc2MywxMSArNzY2LDEwIEBACiAJc3RydWN0IHNrX2J1ZmYgKmJ1ZmY7CiAJaW50IG5zaXplLCBvbGRfZmFjdG9yOwogCWludCBubGVuOwotCXUxNiBmbGFnczsKKwl1OCBmbGFnczsKIAogCUJVR19PTihsZW4gPiBza2ItPmxlbik7CiAKLQl0Y3BfY2xlYXJfcmV0cmFuc19oaW50c19wYXJ0aWFsKHRwKTsKIAluc2l6ZSA9IHNrYl9oZWFkbGVuKHNrYikgLSBsZW47CiAJaWYgKG5zaXplIDwgMCkKIAkJbnNpemUgPSAwOwpAQCAtODUwLDYgKzg1MiwxMiBAQAogCQkJdGNwX3ZlcmlmeV9sZWZ0X291dCh0cCk7CiAJCX0KIAkJdGNwX2FkanVzdF9mYWNrZXRzX291dChzaywgc2tiLCBkaWZmKTsKKworCQlpZiAodHAtPmxvc3Rfc2tiX2hpbnQgJiYKKwkJICAgIGJlZm9yZShUQ1BfU0tCX0NCKHNrYiktPnNlcSwKKwkJCSAgIFRDUF9TS0JfQ0IodHAtPmxvc3Rfc2tiX2hpbnQpLT5zZXEpICYmCisJCSAgICAodGNwX2lzX2ZhY2sodHApIHx8IFRDUF9TS0JfQ0Ioc2tiKS0+c2Fja2VkKSkKKwkJCXRwLT5sb3N0X2NudF9oaW50IC09IGRpZmY7CiAJfQogCiAJLyogTGluayBCVUZGIGludG8gdGhlIHNlbmQgcXVldWUuICovCkBAIC05MTMsNyArOTIxLDcgQEAKIAkgKiBmYWN0b3IgYW5kIG1zcy4KIAkgKi8KIAlpZiAodGNwX3NrYl9wY291bnQoc2tiKSA+IDEpCi0JCXRjcF9zZXRfc2tiX3Rzb19zZWdzKHNrLCBza2IsIHRjcF9jdXJyZW50X21zcyhzaywgMSkpOworCQl0Y3Bfc2V0X3NrYl90c29fc2Vncyhzaywgc2tiLCB0Y3BfY3VycmVudF9tc3Moc2spKTsKIAogCXJldHVybiAwOwogfQpAQCAtOTc0LDE1ICs5ODIsNiBAQAogCWljc2stPmljc2tfbXR1cC5wcm9iZV9zaXplID0gMDsKIH0KIAotLyogQm91bmQgTVNTIC8gVFNPIHBhY2tldCBzaXplIHdpdGggdGhlIGhhbGYgb2YgdGhlIHdpbmRvdyAqLwotc3RhdGljIGludCB0Y3BfYm91bmRfdG9faGFsZl93bmQoc3RydWN0IHRjcF9zb2NrICp0cCwgaW50IHBrdHNpemUpCi17Ci0JaWYgKHRwLT5tYXhfd2luZG93ICYmIHBrdHNpemUgPiAodHAtPm1heF93aW5kb3cgPj4gMSkpCi0JCXJldHVybiBtYXgodHAtPm1heF93aW5kb3cgPj4gMSwgNjhVIC0gdHAtPnRjcF9oZWFkZXJfbGVuKTsKLQllbHNlCi0JCXJldHVybiBwa3RzaXplOwotfQotCiAvKiBUaGlzIGZ1bmN0aW9uIHN5bmNocm9uaXplIHNuZCBtc3MgdG8gY3VycmVudCBwbXR1L2V4dGhkciBzZXQuCiAKICAgIHRwLT5yeF9vcHQudXNlcl9tc3MgaXMgbXNzIHNldCBieSB1c2VyIGJ5IFRDUF9NQVhTRUcuIEl0IGRvZXMgTk9UIGNvdW50cwpAQCAtMTAyOSwyMiArMTAyOCwxNyBAQAogLyogQ29tcHV0ZSB0aGUgY3VycmVudCBlZmZlY3RpdmUgTVNTLCB0YWtpbmcgU0FDS3MgYW5kIElQIG9wdGlvbnMsCiAgKiBhbmQgZXZlbiBQTVRVIGRpc2NvdmVyeSBldmVudHMgaW50byBhY2NvdW50LgogICovCi11bnNpZ25lZCBpbnQgdGNwX2N1cnJlbnRfbXNzKHN0cnVjdCBzb2NrICpzaywgaW50IGxhcmdlX2FsbG93ZWQpCit1bnNpZ25lZCBpbnQgdGNwX2N1cnJlbnRfbXNzKHN0cnVjdCBzb2NrICpzaykKIHsKIAlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKIAlzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QgPSBfX3NrX2RzdF9nZXQoc2spOwogCXUzMiBtc3Nfbm93OwotCXUxNiB4bWl0X3NpemVfZ29hbDsKLQlpbnQgZG9pbmdfdHNvID0gMDsKIAl1bnNpZ25lZCBoZWFkZXJfbGVuOwogCXN0cnVjdCB0Y3Bfb3V0X29wdGlvbnMgb3B0czsKIAlzdHJ1Y3QgdGNwX21kNXNpZ19rZXkgKm1kNTsKIAogCW1zc19ub3cgPSB0cC0+bXNzX2NhY2hlOwogCi0JaWYgKGxhcmdlX2FsbG93ZWQgJiYgc2tfY2FuX2dzbyhzaykpCi0JCWRvaW5nX3RzbyA9IDE7Ci0KIAlpZiAoZHN0KSB7CiAJCXUzMiBtdHUgPSBkc3RfbXR1KGRzdCk7CiAJCWlmIChtdHUgIT0gaW5ldF9jc2soc2spLT5pY3NrX3BtdHVfY29va2llKQpAQCAtMTA2MiwxOSArMTA1Niw2IEBACiAJCW1zc19ub3cgLT0gZGVsdGE7CiAJfQogCi0JeG1pdF9zaXplX2dvYWwgPSBtc3Nfbm93OwotCi0JaWYgKGRvaW5nX3RzbykgewotCQl4bWl0X3NpemVfZ29hbCA9ICgoc2stPnNrX2dzb19tYXhfc2l6ZSAtIDEpIC0KLQkJCQkgIGluZXRfY3NrKHNrKS0+aWNza19hZl9vcHMtPm5ldF9oZWFkZXJfbGVuIC0KLQkJCQkgIGluZXRfY3NrKHNrKS0+aWNza19leHRfaGRyX2xlbiAtCi0JCQkJICB0cC0+dGNwX2hlYWRlcl9sZW4pOwotCi0JCXhtaXRfc2l6ZV9nb2FsID0gdGNwX2JvdW5kX3RvX2hhbGZfd25kKHRwLCB4bWl0X3NpemVfZ29hbCk7Ci0JCXhtaXRfc2l6ZV9nb2FsIC09ICh4bWl0X3NpemVfZ29hbCAlIG1zc19ub3cpOwotCX0KLQl0cC0+eG1pdF9zaXplX2dvYWwgPSB4bWl0X3NpemVfZ29hbDsKLQogCXJldHVybiBtc3Nfbm93OwogfQogCkBAIC0xMjU2LDcgKzEyMzcsNyBAQAogCXN0cnVjdCBza19idWZmICpza2IgPSB0Y3Bfc2VuZF9oZWFkKHNrKTsKIAogCXJldHVybiAoc2tiICYmCi0JCXRjcF9zbmRfdGVzdChzaywgc2tiLCB0Y3BfY3VycmVudF9tc3Moc2ssIDEpLAorCQl0Y3Bfc25kX3Rlc3Qoc2ssIHNrYiwgdGNwX2N1cnJlbnRfbXNzKHNrKSwKIAkJCSAgICAgKHRjcF9za2JfaXNfbGFzdChzaywgc2tiKSA/CiAJCQkgICAgICB0cC0+bm9uYWdsZSA6IFRDUF9OQUdMRV9QVVNIKSkpOwogfQpAQCAtMTI3Myw3ICsxMjU0LDcgQEAKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqYnVmZjsKIAlpbnQgbmxlbiA9IHNrYi0+bGVuIC0gbGVuOwotCXUxNiBmbGFnczsKKwl1OCBmbGFnczsKIAogCS8qIEFsbCBvZiBhIFRTTyBmcmFtZSBtdXN0IGJlIGNvbXBvc2VkIG9mIHBhZ2VkIGRhdGEuICAqLwogCWlmIChza2ItPmxlbiAhPSBza2ItPmRhdGFfbGVuKQpAQCAtMTM1Miw2ICsxMzMzLDEwIEBACiAJaWYgKGxpbWl0ID49IHNrLT5za19nc29fbWF4X3NpemUpCiAJCWdvdG8gc2VuZF9ub3c7CiAKKwkvKiBNaWRkbGUgaW4gcXVldWUgd29uJ3QgZ2V0IGFueSBtb3JlIGRhdGEsIGZ1bGwgc2VuZGFibGUgYWxyZWFkeT8gKi8KKwlpZiAoKHNrYiAhPSB0Y3Bfd3JpdGVfcXVldWVfdGFpbChzaykpICYmIChsaW1pdCA+PSBza2ItPmxlbikpCisJCWdvdG8gc2VuZF9ub3c7CisKIAlpZiAoc3lzY3RsX3RjcF90c29fd2luX2Rpdmlzb3IpIHsKIAkJdTMyIGNodW5rID0gbWluKHRwLT5zbmRfd25kLCB0cC0+c25kX2N3bmQgKiB0cC0+bXNzX2NhY2hlKTsKIApAQCAtMTQwNSwxMSArMTM5MCwxMSBAQAogCSAgICBpY3NrLT5pY3NrX210dXAucHJvYmVfc2l6ZSB8fAogCSAgICBpbmV0X2NzayhzayktPmljc2tfY2Ffc3RhdGUgIT0gVENQX0NBX09wZW4gfHwKIAkgICAgdHAtPnNuZF9jd25kIDwgMTEgfHwKLQkgICAgdHAtPnJ4X29wdC5lZmZfc2Fja3MpCisJICAgIHRwLT5yeF9vcHQubnVtX3NhY2tzIHx8IHRwLT5yeF9vcHQuZHNhY2spCiAJCXJldHVybiAtMTsKIAogCS8qIFZlcnkgc2ltcGxlIHNlYXJjaCBzdHJhdGVneToganVzdCBkb3VibGUgdGhlIE1TUy4gKi8KLQltc3Nfbm93ID0gdGNwX2N1cnJlbnRfbXNzKHNrLCAwKTsKKwltc3Nfbm93ID0gdGNwX2N1cnJlbnRfbXNzKHNrKTsKIAlwcm9iZV9zaXplID0gMiAqIHRwLT5tc3NfY2FjaGU7CiAJc2l6ZV9uZWVkZWQgPSBwcm9iZV9zaXplICsgKHRwLT5yZW9yZGVyaW5nICsgMSkgKiB0cC0+bXNzX2NhY2hlOwogCWlmIChwcm9iZV9zaXplID4gdGNwX210dV90b19tc3Moc2ssIGljc2stPmljc2tfbXR1cC5zZWFyY2hfaGlnaCkpIHsKQEAgLTE3NTQsMTEgKzE3MzksOSBAQAogCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwogCXN0cnVjdCBza19idWZmICpuZXh0X3NrYiA9IHRjcF93cml0ZV9xdWV1ZV9uZXh0KHNrLCBza2IpOwogCWludCBza2Jfc2l6ZSwgbmV4dF9za2Jfc2l6ZTsKLQl1MTYgZmxhZ3M7CiAKIAlza2Jfc2l6ZSA9IHNrYi0+bGVuOwogCW5leHRfc2tiX3NpemUgPSBuZXh0X3NrYi0+bGVuOwotCWZsYWdzID0gVENQX1NLQl9DQihza2IpLT5mbGFnczsKIAogCUJVR19PTih0Y3Bfc2tiX3Bjb3VudChza2IpICE9IDEgfHwgdGNwX3NrYl9wY291bnQobmV4dF9za2IpICE9IDEpOwogCkBAIC0xNzc4LDkgKzE3NjEsOCBAQAogCS8qIFVwZGF0ZSBzZXF1ZW5jZSByYW5nZSBvbiBvcmlnaW5hbCBza2IuICovCiAJVENQX1NLQl9DQihza2IpLT5lbmRfc2VxID0gVENQX1NLQl9DQihuZXh0X3NrYiktPmVuZF9zZXE7CiAKLQkvKiBNZXJnZSBvdmVyIGNvbnRyb2wgaW5mb3JtYXRpb24uICovCi0JZmxhZ3MgfD0gVENQX1NLQl9DQihuZXh0X3NrYiktPmZsYWdzOyAvKiBUaGlzIG1vdmVzIFBTSC9GSU4gZXRjLiBvdmVyICovCi0JVENQX1NLQl9DQihza2IpLT5mbGFncyA9IGZsYWdzOworCS8qIE1lcmdlIG92ZXIgY29udHJvbCBpbmZvcm1hdGlvbi4gVGhpcyBtb3ZlcyBQU0gvRklOIGV0Yy4gb3ZlciAqLworCVRDUF9TS0JfQ0Ioc2tiKS0+ZmxhZ3MgfD0gVENQX1NLQl9DQihuZXh0X3NrYiktPmZsYWdzOwogCiAJLyogQWxsIGRvbmUsIGdldCByaWQgb2Ygc2Vjb25kIFNLQiBhbmQgYWNjb3VudCBmb3IgaXQgc28KIAkgKiBwYWNrZXQgY291bnRpbmcgZG9lcyBub3QgYnJlYWsuCkBAIC0xODk0LDcgKzE4NzYsNyBAQAogCWlmIChpbmV0X2NzayhzayktPmljc2tfYWZfb3BzLT5yZWJ1aWxkX2hlYWRlcihzaykpCiAJCXJldHVybiAtRUhPU1RVTlJFQUNIOyAvKiBSb3V0aW5nIGZhaWx1cmUgb3Igc2ltaWxhci4gKi8KIAotCWN1cl9tc3MgPSB0Y3BfY3VycmVudF9tc3Moc2ssIDApOworCWN1cl9tc3MgPSB0Y3BfY3VycmVudF9tc3Moc2spOwogCiAJLyogSWYgcmVjZWl2ZXIgaGFzIHNocnVuayBoaXMgd2luZG93LCBhbmQgc2tiIGlzIG91dCBvZgogCSAqIG5ldyB3aW5kb3csIGRvIG5vdCByZXRyYW5zbWl0IGl0LiBUaGUgZXhjZXB0aW9uIGlzIHRoZQpAQCAtMTkwOCw2ICsxODkwLDggQEAKIAlpZiAoc2tiLT5sZW4gPiBjdXJfbXNzKSB7CiAJCWlmICh0Y3BfZnJhZ21lbnQoc2ssIHNrYiwgY3VyX21zcywgY3VyX21zcykpCiAJCQlyZXR1cm4gLUVOT01FTTsgLyogV2UnbGwgdHJ5IGFnYWluIGxhdGVyLiAqLworCX0gZWxzZSB7CisJCXRjcF9pbml0X3Rzb19zZWdzKHNrLCBza2IsIGN1cl9tc3MpOwogCX0KIAogCXRjcF9yZXRyYW5zX3RyeV9jb2xsYXBzZShzaywgc2tiLCBjdXJfbXNzKTsKQEAgLTIwNjEsNyArMjA0NSw3IEBACiAJCQlnb3RvIGJlZ2luX2Z3ZDsKIAogCQl9IGVsc2UgaWYgKCEoc2Fja2VkICYgVENQQ0JfTE9TVCkpIHsKLQkJCWlmIChob2xlID09IE5VTEwgJiYgIShzYWNrZWQgJiBUQ1BDQl9TQUNLRURfUkVUUkFOUykpCisJCQlpZiAoaG9sZSA9PSBOVUxMICYmICEoc2Fja2VkICYgKFRDUENCX1NBQ0tFRF9SRVRSQU5TfFRDUENCX1NBQ0tFRF9BQ0tFRCkpKQogCQkJCWhvbGUgPSBza2I7CiAJCQljb250aW51ZTsKIApAQCAtMjEwMCw3ICsyMDg0LDcgQEAKIAkgKiB1bnNlbnQgZnJhbWVzLiAgQnV0IGJlIGNhcmVmdWwgYWJvdXQgb3V0Z29pbmcgU0FDS1MKIAkgKiBhbmQgSVAgb3B0aW9ucy4KIAkgKi8KLQltc3Nfbm93ID0gdGNwX2N1cnJlbnRfbXNzKHNrLCAxKTsKKwltc3Nfbm93ID0gdGNwX2N1cnJlbnRfbXNzKHNrKTsKIAogCWlmICh0Y3Bfc2VuZF9oZWFkKHNrKSAhPSBOVUxMKSB7CiAJCVRDUF9TS0JfQ0Ioc2tiKS0+ZmxhZ3MgfD0gVENQQ0JfRkxBR19GSU47CkBAIC0yMzI1LDcgKzIzMDksNyBAQAogCXNrLT5za19lcnIgPSAwOwogCXNvY2tfcmVzZXRfZmxhZyhzaywgU09DS19ET05FKTsKIAl0cC0+c25kX3duZCA9IDA7Ci0JdGNwX2luaXRfd2wodHAsIHRwLT53cml0ZV9zZXEsIDApOworCXRjcF9pbml0X3dsKHRwLCAwKTsKIAl0cC0+c25kX3VuYSA9IHRwLT53cml0ZV9zZXE7CiAJdHAtPnNuZF9zbWwgPSB0cC0+d3JpdGVfc2VxOwogCXRwLT5zbmRfdXAgPSB0cC0+d3JpdGVfc2VxOwpAQCAtMjUxMiw3ICsyNDk2LDcgQEAKIAlpZiAoKHNrYiA9IHRjcF9zZW5kX2hlYWQoc2spKSAhPSBOVUxMICYmCiAJICAgIGJlZm9yZShUQ1BfU0tCX0NCKHNrYiktPnNlcSwgdGNwX3duZF9lbmQodHApKSkgewogCQlpbnQgZXJyOwotCQl1bnNpZ25lZCBpbnQgbXNzID0gdGNwX2N1cnJlbnRfbXNzKHNrLCAwKTsKKwkJdW5zaWduZWQgaW50IG1zcyA9IHRjcF9jdXJyZW50X21zcyhzayk7CiAJCXVuc2lnbmVkIGludCBzZWdfc2l6ZSA9IHRjcF93bmRfZW5kKHRwKSAtIFRDUF9TS0JfQ0Ioc2tiKS0+c2VxOwogCiAJCWlmIChiZWZvcmUodHAtPnB1c2hlZF9zZXEsIFRDUF9TS0JfQ0Ioc2tiKS0+ZW5kX3NlcSkpCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfcHJvYmUuYyBiL25ldC9pcHY0L3RjcF9wcm9iZS5jCmluZGV4IDI1NTI0ZDQuLjU5ZjViNWUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9wcm9iZS5jCisrKyBiL25ldC9pcHY0L3RjcF9wcm9iZS5jCkBAIC0xNjUsOSArMTY1LDEwIEBACiBzdGF0aWMgc3NpemVfdCB0Y3Bwcm9iZV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLAogCQkJICAgICBzaXplX3QgbGVuLCBsb2ZmX3QgKnBwb3MpCiB7Ci0JaW50IGVycm9yID0gMCwgY250ID0gMDsKKwlpbnQgZXJyb3IgPSAwOworCXNpemVfdCBjbnQgPSAwOwogCi0JaWYgKCFidWYgfHwgbGVuIDwgMCkKKwlpZiAoIWJ1ZikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAl3aGlsZSAoY250IDwgbGVuKSB7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3Bfc2NhbGFibGUuYyBiL25ldC9pcHY0L3RjcF9zY2FsYWJsZS5jCmluZGV4IDQ2NjBiMDguLmE3NjUxMzcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9zY2FsYWJsZS5jCisrKyBiL25ldC9pcHY0L3RjcF9zY2FsYWJsZS5jCkBAIC0yNCwxNCArMjQsOCBAQAogCiAJaWYgKHRwLT5zbmRfY3duZCA8PSB0cC0+c25kX3NzdGhyZXNoKQogCQl0Y3Bfc2xvd19zdGFydCh0cCk7Ci0JZWxzZSB7Ci0JCXRwLT5zbmRfY3duZF9jbnQrKzsKLQkJaWYgKHRwLT5zbmRfY3duZF9jbnQgPiBtaW4odHAtPnNuZF9jd25kLCBUQ1BfU0NBTEFCTEVfQUlfQ05UKSl7Ci0JCQlpZiAodHAtPnNuZF9jd25kIDwgdHAtPnNuZF9jd25kX2NsYW1wKQotCQkJCXRwLT5zbmRfY3duZCsrOwotCQkJdHAtPnNuZF9jd25kX2NudCA9IDA7Ci0JCX0KLQl9CisJZWxzZQorCQl0Y3BfY29uZ19hdm9pZF9haSh0cCwgbWluKHRwLT5zbmRfY3duZCwgVENQX1NDQUxBQkxFX0FJX0NOVCkpOwogfQogCiBzdGF0aWMgdTMyIHRjcF9zY2FsYWJsZV9zc3RocmVzaChzdHJ1Y3Qgc29jayAqc2spCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfdGltZXIuYyBiL25ldC9pcHY0L3RjcF90aW1lci5jCmluZGV4IDAxNzBlOTEuLmIxNDRhMjYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF90aW1lci5jCisrKyBiL25ldC9pcHY0L3RjcF90aW1lci5jCkBAIC0zMjgsMTkgKzMyOCwxNiBAQAogCWlmIChpY3NrLT5pY3NrX3JldHJhbnNtaXRzID09IDApIHsKIAkJaW50IG1pYl9pZHg7CiAKLQkJaWYgKGljc2stPmljc2tfY2Ffc3RhdGUgPT0gVENQX0NBX0Rpc29yZGVyIHx8Ci0JCSAgICBpY3NrLT5pY3NrX2NhX3N0YXRlID09IFRDUF9DQV9SZWNvdmVyeSkgewotCQkJaWYgKHRjcF9pc19zYWNrKHRwKSkgewotCQkJCWlmIChpY3NrLT5pY3NrX2NhX3N0YXRlID09IFRDUF9DQV9SZWNvdmVyeSkKLQkJCQkJbWliX2lkeCA9IExJTlVYX01JQl9UQ1BTQUNLUkVDT1ZFUllGQUlMOwotCQkJCWVsc2UKLQkJCQkJbWliX2lkeCA9IExJTlVYX01JQl9UQ1BTQUNLRkFJTFVSRVM7Ci0JCQl9IGVsc2UgewotCQkJCWlmIChpY3NrLT5pY3NrX2NhX3N0YXRlID09IFRDUF9DQV9SZWNvdmVyeSkKLQkJCQkJbWliX2lkeCA9IExJTlVYX01JQl9UQ1BSRU5PUkVDT1ZFUllGQUlMOwotCQkJCWVsc2UKLQkJCQkJbWliX2lkeCA9IExJTlVYX01JQl9UQ1BSRU5PRkFJTFVSRVM7Ci0JCQl9CisJCWlmIChpY3NrLT5pY3NrX2NhX3N0YXRlID09IFRDUF9DQV9EaXNvcmRlcikgeworCQkJaWYgKHRjcF9pc19zYWNrKHRwKSkKKwkJCQltaWJfaWR4ID0gTElOVVhfTUlCX1RDUFNBQ0tGQUlMVVJFUzsKKwkJCWVsc2UKKwkJCQltaWJfaWR4ID0gTElOVVhfTUlCX1RDUFJFTk9GQUlMVVJFUzsKKwkJfSBlbHNlIGlmIChpY3NrLT5pY3NrX2NhX3N0YXRlID09IFRDUF9DQV9SZWNvdmVyeSkgeworCQkJaWYgKHRjcF9pc19zYWNrKHRwKSkKKwkJCQltaWJfaWR4ID0gTElOVVhfTUlCX1RDUFNBQ0tSRUNPVkVSWUZBSUw7CisJCQllbHNlCisJCQkJbWliX2lkeCA9IExJTlVYX01JQl9UQ1BSRU5PUkVDT1ZFUllGQUlMOwogCQl9IGVsc2UgaWYgKGljc2stPmljc2tfY2Ffc3RhdGUgPT0gVENQX0NBX0xvc3MpIHsKIAkJCW1pYl9pZHggPSBMSU5VWF9NSUJfVENQTE9TU0ZBSUxVUkVTOwogCQl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX3Zlbm8uYyBiL25ldC9pcHY0L3RjcF92ZW5vLmMKaW5kZXggZDA4YjJlOC4uZTliYmZmNyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX3Zlbm8uYworKysgYi9uZXQvaXB2NC90Y3BfdmVuby5jCkBAIC0xNTksMTIgKzE1OSw3IEBACiAJCQkJLyogSW4gdGhlICJub24tY29uZ2VzdGl2ZSBzdGF0ZSIsIGluY3JlYXNlIGN3bmQKIAkJCQkgKiAgZXZlcnkgcnR0LgogCQkJCSAqLwotCQkJCWlmICh0cC0+c25kX2N3bmRfY250ID49IHRwLT5zbmRfY3duZCkgewotCQkJCQlpZiAodHAtPnNuZF9jd25kIDwgdHAtPnNuZF9jd25kX2NsYW1wKQotCQkJCQkJdHAtPnNuZF9jd25kKys7Ci0JCQkJCXRwLT5zbmRfY3duZF9jbnQgPSAwOwotCQkJCX0gZWxzZQotCQkJCQl0cC0+c25kX2N3bmRfY250Kys7CisJCQkJdGNwX2NvbmdfYXZvaWRfYWkodHAsIHRwLT5zbmRfY3duZCk7CiAJCQl9IGVsc2UgewogCQkJCS8qIEluIHRoZSAiY29uZ2VzdGl2ZSBzdGF0ZSIsIGluY3JlYXNlIGN3bmQKIAkJCQkgKiBldmVyeSBvdGhlciBydHQuCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfeWVhaC5jIGIvbmV0L2lwdjQvdGNwX3llYWguYwppbmRleCA5ZWM4NDNhLi42NmI2ODIxIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfeWVhaC5jCisrKyBiL25ldC9pcHY0L3RjcF95ZWFoLmMKQEAgLTk0LDE0ICs5NCw3IEBACiAKIAl9IGVsc2UgewogCQkvKiBSZW5vICovCi0KLQkJaWYgKHRwLT5zbmRfY3duZF9jbnQgPCB0cC0+c25kX2N3bmQpCi0JCQl0cC0+c25kX2N3bmRfY250Kys7Ci0KLQkJaWYgKHRwLT5zbmRfY3duZF9jbnQgPj0gdHAtPnNuZF9jd25kKSB7Ci0JCQl0cC0+c25kX2N3bmQrKzsKLQkJCXRwLT5zbmRfY3duZF9jbnQgPSAwOwotCQl9CisJCXRjcF9jb25nX2F2b2lkX2FpKHRwLCB0cC0+c25kX2N3bmQpOwogCX0KIAogCS8qIFRoZSBrZXkgcGxheWVycyBhcmUgdl92ZWdhcy5iZWdfc25kX3VuYSBhbmQgdl9iZWdfc25kX254dC4KZGlmZiAtLWdpdCBhL25ldC9pcHY0L3VkcC5jIGIvbmV0L2lwdjQvdWRwLmMKaW5kZXggYzQ3Yzk4OS4uYmRhMDhhMCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdWRwLmMKKysrIGIvbmV0L2lwdjQvdWRwLmMKQEAgLTIyMiw3ICsyMjIsNyBAQAogCXJldHVybiBlcnJvcjsKIH0KIAotc3RhdGljIGludCBpcHY0X3Jjdl9zYWRkcl9lcXVhbChjb25zdCBzdHJ1Y3Qgc29jayAqc2sxLCBjb25zdCBzdHJ1Y3Qgc29jayAqc2syKQoraW50IGlwdjRfcmN2X3NhZGRyX2VxdWFsKGNvbnN0IHN0cnVjdCBzb2NrICpzazEsIGNvbnN0IHN0cnVjdCBzb2NrICpzazIpCiB7CiAJc3RydWN0IGluZXRfc29jayAqaW5ldDEgPSBpbmV0X3NrKHNrMSksICppbmV0MiA9IGluZXRfc2soc2syKTsKIApAQCAtNTk2LDYgKzU5Niw3IEBACiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAogCWlwYy5vcHQgPSBOVUxMOworCWlwYy5zaHR4LmZsYWdzID0gMDsKIAogCWlmICh1cC0+cGVuZGluZykgewogCQkvKgpAQCAtNjQzLDYgKzY0NCw5IEBACiAJaXBjLmFkZHIgPSBpbmV0LT5zYWRkcjsKIAogCWlwYy5vaWYgPSBzay0+c2tfYm91bmRfZGV2X2lmOworCWVyciA9IHNvY2tfdHhfdGltZXN0YW1wKG1zZywgc2ssICZpcGMuc2h0eCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKIAlpZiAobXNnLT5tc2dfY29udHJvbGxlbikgewogCQllcnIgPSBpcF9jbXNnX3NlbmQoc29ja19uZXQoc2spLCBtc2csICZpcGMpOwogCQlpZiAoZXJyKQpAQCAtMTE4MCw3ICsxMTg0LDcgQEAKIAkJCXNrID0gc2tuZXh0OwogCQl9IHdoaWxlIChza25leHQpOwogCX0gZWxzZQotCQlrZnJlZV9za2Ioc2tiKTsKKwkJY29uc3VtZV9za2Ioc2tiKTsKIAlzcGluX3VubG9jaygmaHNsb3QtPmxvY2spOwogCXJldHVybiAwOwogfQpAQCAtMTYxNCw3ICsxNjE4LDggQEAKIAl9IHdoaWxlIChzayAmJiAoIW5ldF9lcShzb2NrX25ldChzayksIG5ldCkgfHwgc2stPnNrX2ZhbWlseSAhPSBzdGF0ZS0+ZmFtaWx5KSk7CiAKIAlpZiAoIXNrKSB7Ci0JCXNwaW5fdW5sb2NrX2JoKCZzdGF0ZS0+dWRwX3RhYmxlLT5oYXNoW3N0YXRlLT5idWNrZXRdLmxvY2spOworCQlpZiAoc3RhdGUtPmJ1Y2tldCA8IFVEUF9IVEFCTEVfU0laRSkKKwkJCXNwaW5fdW5sb2NrX2JoKCZzdGF0ZS0+dWRwX3RhYmxlLT5oYXNoW3N0YXRlLT5idWNrZXRdLmxvY2spOwogCQlyZXR1cm4gdWRwX2dldF9maXJzdChzZXEsIHN0YXRlLT5idWNrZXQgKyAxKTsKIAl9CiAJcmV0dXJuIHNrOwpAQCAtMTYzMiw2ICsxNjM3LDkgQEAKIAogc3RhdGljIHZvaWQgKnVkcF9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQogeworCXN0cnVjdCB1ZHBfaXRlcl9zdGF0ZSAqc3RhdGUgPSBzZXEtPnByaXZhdGU7CisJc3RhdGUtPmJ1Y2tldCA9IFVEUF9IVEFCTEVfU0laRTsKKwogCXJldHVybiAqcG9zID8gdWRwX2dldF9pZHgoc2VxLCAqcG9zLTEpIDogU0VRX1NUQVJUX1RPS0VOOwogfQogCkBAIC0xODE1LDYgKzE4MjMsNyBAQAogRVhQT1JUX1NZTUJPTCh1ZHBfbGliX3NldHNvY2tvcHQpOwogRVhQT1JUX1NZTUJPTCh1ZHBfcG9sbCk7CiBFWFBPUlRfU1lNQk9MKHVkcF9saWJfZ2V0X3BvcnQpOworRVhQT1JUX1NZTUJPTChpcHY0X3Jjdl9zYWRkcl9lcXVhbCk7CiAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogRVhQT1JUX1NZTUJPTCh1ZHBfcHJvY19yZWdpc3Rlcik7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC94ZnJtNF9wb2xpY3kuYyBiL25ldC9pcHY0L3hmcm00X3BvbGljeS5jCmluZGV4IDJhZDI0YmEuLjYwZDkxOGMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3hmcm00X3BvbGljeS5jCisrKyBiL25ldC9pcHY0L3hmcm00X3BvbGljeS5jCkBAIC0yNDEsNyArMjQxLDcgQEAKIAogc3RhdGljIHN0cnVjdCBkc3Rfb3BzIHhmcm00X2RzdF9vcHMgPSB7CiAJLmZhbWlseSA9CQlBRl9JTkVULAotCS5wcm90b2NvbCA9CQlfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQKSwKKwkucHJvdG9jb2wgPQkJY3B1X3RvX2JlMTYoRVRIX1BfSVApLAogCS5nYyA9CQkJeGZybTRfZ2FyYmFnZV9jb2xsZWN0LAogCS51cGRhdGVfcG10dSA9CQl4ZnJtNF91cGRhdGVfcG10dSwKIAkuZGVzdHJveSA9CQl4ZnJtNF9kc3RfZGVzdHJveSwKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2FkZHJjb25mLmMgYi9uZXQvaXB2Ni9hZGRyY29uZi5jCmluZGV4IDEyMjBlMmMuLmE4MjE4YmMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2FkZHJjb25mLmMKKysrIGIvbmV0L2lwdjYvYWRkcmNvbmYuYwpAQCAtNDAsNiArNDAsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NvY2tldC5oPgogI2luY2x1ZGUgPGxpbnV4L3NvY2tpb3MuaD4KICNpbmNsdWRlIDxsaW51eC9uZXQuaD4KQEAgLTU5MCw2ICs1OTEsNyBAQAogewogCXN0cnVjdCBpbmV0Nl9pZmFkZHIgKmlmYSA9IE5VTEw7CiAJc3RydWN0IHJ0Nl9pbmZvICpydDsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGlkZXYtPmRldik7CiAJaW50IGhhc2g7CiAJaW50IGVyciA9IDA7CiAJaW50IGFkZHJfdHlwZSA9IGlwdjZfYWRkcl90eXBlKGFkZHIpOwpAQCAtNjA2LDYgKzYwOCwxMSBAQAogCQlnb3RvIG91dDI7CiAJfQogCisJaWYgKGlkZXYtPmNuZi5kaXNhYmxlX2lwdjYgfHwgbmV0LT5pcHY2LmRldmNvbmZfYWxsLT5kaXNhYmxlX2lwdjYpIHsKKwkJZXJyID0gLUVBQ0NFUzsKKwkJZ290byBvdXQyOworCX0KKwogCXdyaXRlX2xvY2soJmFkZHJjb25mX2hhc2hfbG9jayk7CiAKIAkvKiBJZ25vcmUgYWRkaW5nIGR1cGxpY2F0ZSBhZGRyZXNzZXMgb24gYW4gaW50ZXJmYWNlICovCkBAIC0xMjA5LDE2ICsxMjE2LDEyIEBACiAJCQkJCX0KIAkJCQkJYnJlYWs7CiAJCQkJfSBlbHNlIGlmIChtaW5paGlzY29yZSA8IG1pbmlzY29yZSkgewotCQkJCQlzdHJ1Y3QgaXB2Nl9zYWRkcl9zY29yZSAqdG1wOwotCiAJCQkJCWlmIChoaXNjb3JlLT5pZmEpCiAJCQkJCQlpbjZfaWZhX3B1dChoaXNjb3JlLT5pZmEpOwogCiAJCQkJCWluNl9pZmFfaG9sZChzY29yZS0+aWZhKTsKIAotCQkJCQl0bXAgPSBoaXNjb3JlOwotCQkJCQloaXNjb3JlID0gc2NvcmU7Ci0JCQkJCXNjb3JlID0gdG1wOworCQkJCQlzd2FwKGhpc2NvcmUsIHNjb3JlKTsKIAogCQkJCQkvKiByZXN0b3JlIG91ciBpdGVyYXRvciAqLwogCQkJCQlzY29yZS0+aWZhID0gaGlzY29yZS0+aWZhOwpAQCAtMTM2Nyw0MCArMTM3MCw2IEBACiAJcmV0dXJuIGlmcDsKIH0KIAotaW50IGlwdjZfcmN2X3NhZGRyX2VxdWFsKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNvY2sgKnNrMikKLXsKLQljb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNrX3Jjdl9zYWRkcjYgPSAmaW5ldDZfc2soc2spLT5yY3Zfc2FkZHI7Ci0JY29uc3Qgc3RydWN0IGluNl9hZGRyICpzazJfcmN2X3NhZGRyNiA9IGluZXQ2X3Jjdl9zYWRkcihzazIpOwotCV9fYmUzMiBza19yY3Zfc2FkZHIgPSBpbmV0X3NrKHNrKS0+cmN2X3NhZGRyOwotCV9fYmUzMiBzazJfcmN2X3NhZGRyID0gaW5ldF9yY3Zfc2FkZHIoc2syKTsKLQlpbnQgc2tfaXB2Nm9ubHkgPSBpcHY2X29ubHlfc29jayhzayk7Ci0JaW50IHNrMl9pcHY2b25seSA9IGluZXRfdjZfaXB2Nm9ubHkoc2syKTsKLQlpbnQgYWRkcl90eXBlID0gaXB2Nl9hZGRyX3R5cGUoc2tfcmN2X3NhZGRyNik7Ci0JaW50IGFkZHJfdHlwZTIgPSBzazJfcmN2X3NhZGRyNiA/IGlwdjZfYWRkcl90eXBlKHNrMl9yY3Zfc2FkZHI2KSA6IElQVjZfQUREUl9NQVBQRUQ7Ci0KLQlpZiAoIXNrMl9yY3Zfc2FkZHIgJiYgIXNrX2lwdjZvbmx5KQotCQlyZXR1cm4gMTsKLQotCWlmIChhZGRyX3R5cGUyID09IElQVjZfQUREUl9BTlkgJiYKLQkgICAgIShzazJfaXB2Nm9ubHkgJiYgYWRkcl90eXBlID09IElQVjZfQUREUl9NQVBQRUQpKQotCQlyZXR1cm4gMTsKLQotCWlmIChhZGRyX3R5cGUgPT0gSVBWNl9BRERSX0FOWSAmJgotCSAgICAhKHNrX2lwdjZvbmx5ICYmIGFkZHJfdHlwZTIgPT0gSVBWNl9BRERSX01BUFBFRCkpCi0JCXJldHVybiAxOwotCi0JaWYgKHNrMl9yY3Zfc2FkZHI2ICYmCi0JICAgIGlwdjZfYWRkcl9lcXVhbChza19yY3Zfc2FkZHI2LCBzazJfcmN2X3NhZGRyNikpCi0JCXJldHVybiAxOwotCi0JaWYgKGFkZHJfdHlwZSA9PSBJUFY2X0FERFJfTUFQUEVEICYmCi0JICAgICFzazJfaXB2Nm9ubHkgJiYKLQkgICAgKCFzazJfcmN2X3NhZGRyIHx8ICFza19yY3Zfc2FkZHIgfHwgc2tfcmN2X3NhZGRyID09IHNrMl9yY3Zfc2FkZHIpKQotCQlyZXR1cm4gMTsKLQotCXJldHVybiAwOwotfQotCiAvKiBHZXRzIHJlZmVyZW5jZWQgYWRkcmVzcywgZGVzdHJveXMgaWZhZGRyICovCiAKIHN0YXRpYyB2b2lkIGFkZHJjb25mX2RhZF9zdG9wKHN0cnVjdCBpbmV0Nl9pZmFkZHIgKmlmcCkKQEAgLTE0MzMsNiArMTQwMiwxMSBAQAogdm9pZCBhZGRyY29uZl9kYWRfZmFpbHVyZShzdHJ1Y3QgaW5ldDZfaWZhZGRyICppZnApCiB7CiAJc3RydWN0IGluZXQ2X2RldiAqaWRldiA9IGlmcC0+aWRldjsKKworCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBJUHY2IGR1cGxpY2F0ZSBhZGRyZXNzIGRldGVjdGVkIVxuIiwKKwkJCWlmcC0+aWRldi0+ZGV2LT5uYW1lKTsKKwogCWlmIChpZGV2LT5jbmYuYWNjZXB0X2RhZCA+IDEgJiYgIWlkZXYtPmNuZi5kaXNhYmxlX2lwdjYpIHsKIAkJc3RydWN0IGluNl9hZGRyIGFkZHI7CiAKQEAgLTE0NDMsMTEgKzE0MTcsMTIgQEAKIAkJICAgIGlwdjZfYWRkcl9lcXVhbCgmaWZwLT5hZGRyLCAmYWRkcikpIHsKIAkJCS8qIERBRCBmYWlsZWQgZm9yIGxpbmstbG9jYWwgYmFzZWQgb24gTUFDIGFkZHJlc3MgKi8KIAkJCWlkZXYtPmNuZi5kaXNhYmxlX2lwdjYgPSAxOworCisJCQlwcmludGsoS0VSTl9JTkZPICIlczogSVB2NiBiZWluZyBkaXNhYmxlZCFcbiIsCisJCQkJaWZwLT5pZGV2LT5kZXYtPm5hbWUpOwogCQl9CiAJfQogCi0JaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGR1cGxpY2F0ZSBhZGRyZXNzIGRldGVjdGVkIVxuIiwgaWZwLT5pZGV2LT5kZXYtPm5hbWUpOwogCWFkZHJjb25mX2RhZF9zdG9wKGlmcCk7CiB9CiAKQEAgLTIyMjcsMTAgKzIyMDIsMjQgQEAKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgdm9pZCBhZGRfYWRkcihzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2LCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsCisJCSAgICAgaW50IHBsZW4sIGludCBzY29wZSkKK3sKKwlzdHJ1Y3QgaW5ldDZfaWZhZGRyICppZnA7CisKKwlpZnAgPSBpcHY2X2FkZF9hZGRyKGlkZXYsIGFkZHIsIHBsZW4sIHNjb3BlLCBJRkFfRl9QRVJNQU5FTlQpOworCWlmICghSVNfRVJSKGlmcCkpIHsKKwkJc3Bpbl9sb2NrX2JoKCZpZnAtPmxvY2spOworCQlpZnAtPmZsYWdzICY9IH5JRkFfRl9URU5UQVRJVkU7CisJCXNwaW5fdW5sb2NrX2JoKCZpZnAtPmxvY2spOworCQlpcHY2X2lmYV9ub3RpZnkoUlRNX05FV0FERFIsIGlmcCk7CisJCWluNl9pZmFfcHV0KGlmcCk7CisJfQorfQorCiAjaWYgZGVmaW5lZChDT05GSUdfSVBWNl9TSVQpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfU0lUX01PRFVMRSkKIHN0YXRpYyB2b2lkIHNpdF9hZGRfdjRfYWRkcnMoc3RydWN0IGluZXQ2X2RldiAqaWRldikKIHsKLQlzdHJ1Y3QgaW5ldDZfaWZhZGRyICogaWZwOwogCXN0cnVjdCBpbjZfYWRkciBhZGRyOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChpZGV2LT5kZXYpOwpAQCAtMjI0OSwxNCArMjIzOCw3IEBACiAJfQogCiAJaWYgKGFkZHIuczZfYWRkcjMyWzNdKSB7Ci0JCWlmcCA9IGlwdjZfYWRkX2FkZHIoaWRldiwgJmFkZHIsIDEyOCwgc2NvcGUsIElGQV9GX1BFUk1BTkVOVCk7Ci0JCWlmICghSVNfRVJSKGlmcCkpIHsKLQkJCXNwaW5fbG9ja19iaCgmaWZwLT5sb2NrKTsKLQkJCWlmcC0+ZmxhZ3MgJj0gfklGQV9GX1RFTlRBVElWRTsKLQkJCXNwaW5fdW5sb2NrX2JoKCZpZnAtPmxvY2spOwotCQkJaXB2Nl9pZmFfbm90aWZ5KFJUTV9ORVdBRERSLCBpZnApOwotCQkJaW42X2lmYV9wdXQoaWZwKTsKLQkJfQorCQlhZGRfYWRkcihpZGV2LCAmYWRkciwgMTI4LCBzY29wZSk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTIyODQsMTUgKzIyNjYsNyBAQAogCQkJCWVsc2UKIAkJCQkJcGxlbiA9IDk2OwogCi0JCQkJaWZwID0gaXB2Nl9hZGRfYWRkcihpZGV2LCAmYWRkciwgcGxlbiwgZmxhZywKLQkJCQkJCSAgICBJRkFfRl9QRVJNQU5FTlQpOwotCQkJCWlmICghSVNfRVJSKGlmcCkpIHsKLQkJCQkJc3Bpbl9sb2NrX2JoKCZpZnAtPmxvY2spOwotCQkJCQlpZnAtPmZsYWdzICY9IH5JRkFfRl9URU5UQVRJVkU7Ci0JCQkJCXNwaW5fdW5sb2NrX2JoKCZpZnAtPmxvY2spOwotCQkJCQlpcHY2X2lmYV9ub3RpZnkoUlRNX05FV0FERFIsIGlmcCk7Ci0JCQkJCWluNl9pZmFfcHV0KGlmcCk7Ci0JCQkJfQorCQkJCWFkZF9hZGRyKGlkZXYsICZhZGRyLCBwbGVuLCBmbGFnKTsKIAkJCX0KIAkJfQogCX0KQEAgLTIzMDIsNyArMjI3Niw2IEBACiBzdGF0aWMgdm9pZCBpbml0X2xvb3BiYWNrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGluZXQ2X2RldiAgKmlkZXY7Ci0Jc3RydWN0IGluZXQ2X2lmYWRkciAqIGlmcDsKIAogCS8qIDo6MSAqLwogCkBAIC0yMzEzLDE0ICsyMjg2LDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCWlmcCA9IGlwdjZfYWRkX2FkZHIoaWRldiwgJmluNmFkZHJfbG9vcGJhY2ssIDEyOCwgSUZBX0hPU1QsIElGQV9GX1BFUk1BTkVOVCk7Ci0JaWYgKCFJU19FUlIoaWZwKSkgewotCQlzcGluX2xvY2tfYmgoJmlmcC0+bG9jayk7Ci0JCWlmcC0+ZmxhZ3MgJj0gfklGQV9GX1RFTlRBVElWRTsKLQkJc3Bpbl91bmxvY2tfYmgoJmlmcC0+bG9jayk7Ci0JCWlwdjZfaWZhX25vdGlmeShSVE1fTkVXQUREUiwgaWZwKTsKLQkJaW42X2lmYV9wdXQoaWZwKTsKLQl9CisJYWRkX2FkZHIoaWRldiwgJmluNmFkZHJfbG9vcGJhY2ssIDEyOCwgSUZBX0hPU1QpOwogfQogCiBzdGF0aWMgdm9pZCBhZGRyY29uZl9hZGRfbGlua2xvY2FsKHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYsIHN0cnVjdCBpbjZfYWRkciAqYWRkcikKQEAgLTI4MzIsMTEgKzI3OTgsNiBAQAogCQlyZWFkX3VubG9ja19iaCgmaWRldi0+bG9jayk7CiAJCWdvdG8gb3V0OwogCX0KLQlpZiAoaWRldi0+Y25mLmFjY2VwdF9kYWQgPiAxICYmIGlkZXYtPmNuZi5kaXNhYmxlX2lwdjYpIHsKLQkJcmVhZF91bmxvY2tfYmgoJmlkZXYtPmxvY2spOwotCQlhZGRyY29uZl9kYWRfZmFpbHVyZShpZnApOwotCQlyZXR1cm47Ci0JfQogCXNwaW5fbG9ja19iaCgmaWZwLT5sb2NrKTsKIAlpZiAoaWZwLT5wcm9iZXMgPT0gMCkgewogCQkvKgpAQCAtMzY0Nyw3ICszNjA4LDggQEAKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCWdvdG8gZXJyb3V0OwogCX0KLQllcnIgPSBydG5sX25vdGlmeShza2IsIG5ldCwgMCwgUlROTEdSUF9JUFY2X0lGQUREUiwgTlVMTCwgR0ZQX0FUT01JQyk7CisJcnRubF9ub3RpZnkoc2tiLCBuZXQsIDAsIFJUTkxHUlBfSVBWNl9JRkFERFIsIE5VTEwsIEdGUF9BVE9NSUMpOworCXJldHVybjsKIGVycm91dDoKIAlpZiAoZXJyIDwgMCkKIAkJcnRubF9zZXRfc2tfZXJyKG5ldCwgUlROTEdSUF9JUFY2X0lGQUREUiwgZXJyKTsKQEAgLTM4NTgsNyArMzgyMCw4IEBACiAJCWtmcmVlX3NrYihza2IpOwogCQlnb3RvIGVycm91dDsKIAl9Ci0JZXJyID0gcnRubF9ub3RpZnkoc2tiLCBuZXQsIDAsIFJUTkxHUlBfSVBWNl9JRkFERFIsIE5VTEwsIEdGUF9BVE9NSUMpOworCXJ0bmxfbm90aWZ5KHNrYiwgbmV0LCAwLCBSVE5MR1JQX0lQVjZfSUZBRERSLCBOVUxMLCBHRlBfQVRPTUlDKTsKKwlyZXR1cm47CiBlcnJvdXQ6CiAJaWYgKGVyciA8IDApCiAJCXJ0bmxfc2V0X3NrX2VycihuZXQsIFJUTkxHUlBfSVBWNl9JRkFERFIsIGVycik7CkBAIC0zOTI4LDcgKzM4OTEsOCBAQAogCQlrZnJlZV9za2Ioc2tiKTsKIAkJZ290byBlcnJvdXQ7CiAJfQotCWVyciA9IHJ0bmxfbm90aWZ5KHNrYiwgbmV0LCAwLCBSVE5MR1JQX0lQVjZfUFJFRklYLCBOVUxMLCBHRlBfQVRPTUlDKTsKKwlydG5sX25vdGlmeShza2IsIG5ldCwgMCwgUlROTEdSUF9JUFY2X1BSRUZJWCwgTlVMTCwgR0ZQX0FUT01JQyk7CisJcmV0dXJuOwogZXJyb3V0OgogCWlmIChlcnIgPCAwKQogCQlydG5sX3NldF9za19lcnIobmV0LCBSVE5MR1JQX0lQVjZfUFJFRklYLCBlcnIpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWZfaW5ldDYuYyBiL25ldC9pcHY2L2FmX2luZXQ2LmMKaW5kZXggOWM4MzA5ZS4uNjFmNTUzOCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvYWZfaW5ldDYuYworKysgYi9uZXQvaXB2Ni9hZl9pbmV0Ni5jCkBAIC0yNzYsMTEgKzI3NiwyNiBAQAogCiAJLyogQ2hlY2sgaWYgdGhlIGFkZHJlc3MgYmVsb25ncyB0byB0aGUgaG9zdC4gKi8KIAlpZiAoYWRkcl90eXBlID09IElQVjZfQUREUl9NQVBQRUQpIHsKLQkJdjRhZGRyID0gYWRkci0+c2luNl9hZGRyLnM2X2FkZHIzMlszXTsKLQkJaWYgKGluZXRfYWRkcl90eXBlKG5ldCwgdjRhZGRyKSAhPSBSVE5fTE9DQUwpIHsKLQkJCWVyciA9IC1FQUREUk5PVEFWQUlMOworCQlpbnQgY2hrX2FkZHJfcmV0OworCisJCS8qIEJpbmRpbmcgdG8gdjQtbWFwcGVkIGFkZHJlc3Mgb24gYSB2Ni1vbmx5IHNvY2tldAorCQkgKiBtYWtlcyBubyBzZW5zZQorCQkgKi8KKwkJaWYgKG5wLT5pcHY2b25seSkgeworCQkJZXJyID0gLUVJTlZBTDsKIAkJCWdvdG8gb3V0OwogCQl9CisKKwkJLyogUmVwcm9kdWNlIEFGX0lORVQgY2hlY2tzIHRvIG1ha2UgdGhlIGJpbmRpbmdzIGNvbnNpdGFudCAqLworCQl2NGFkZHIgPSBhZGRyLT5zaW42X2FkZHIuczZfYWRkcjMyWzNdOworCQljaGtfYWRkcl9yZXQgPSBpbmV0X2FkZHJfdHlwZShuZXQsIHY0YWRkcik7CisJCWlmICghc3lzY3RsX2lwX25vbmxvY2FsX2JpbmQgJiYKKwkJICAgICEoaW5ldC0+ZnJlZWJpbmQgfHwgaW5ldC0+dHJhbnNwYXJlbnQpICYmCisJCSAgICB2NGFkZHIgIT0gaHRvbmwoSU5BRERSX0FOWSkgJiYKKwkJICAgIGNoa19hZGRyX3JldCAhPSBSVE5fTE9DQUwgJiYKKwkJICAgIGNoa19hZGRyX3JldCAhPSBSVE5fTVVMVElDQVNUICYmCisJCSAgICBjaGtfYWRkcl9yZXQgIT0gUlROX0JST0FEQ0FTVCkKKwkJCWdvdG8gb3V0OwogCX0gZWxzZSB7CiAJCWlmIChhZGRyX3R5cGUgIT0gSVBWNl9BRERSX0FOWSkgewogCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IE5VTEw7CkBAIC0zMzksOCArMzU0LDExIEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWlmIChhZGRyX3R5cGUgIT0gSVBWNl9BRERSX0FOWSkKKwlpZiAoYWRkcl90eXBlICE9IElQVjZfQUREUl9BTlkpIHsKIAkJc2stPnNrX3VzZXJsb2NrcyB8PSBTT0NLX0JJTkRBRERSX0xPQ0s7CisJCWlmIChhZGRyX3R5cGUgIT0gSVBWNl9BRERSX01BUFBFRCkKKwkJCW5wLT5pcHY2b25seSA9IDE7CisJfQogCWlmIChzbnVtKQogCQlzay0+c2tfdXNlcmxvY2tzIHw9IFNPQ0tfQklORFBPUlRfTE9DSzsKIAlpbmV0LT5zcG9ydCA9IGh0b25zKGluZXQtPm51bSk7CkBAIC04MDMsMjQgKzgyMSwzNCBAQAogCWludCBwcm90bzsKIAlfX3dzdW0gY3N1bTsKIAotCWlmICh1bmxpa2VseSghcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZigqaXBoKSkpKQorCWlwaCA9IHNrYl9ncm9faGVhZGVyKHNrYiwgc2l6ZW9mKCppcGgpKTsKKwlpZiAodW5saWtlbHkoIWlwaCkpCiAJCWdvdG8gb3V0OwogCi0JaXBoID0gaXB2Nl9oZHIoc2tiKTsKLQlfX3NrYl9wdWxsKHNrYiwgc2l6ZW9mKCppcGgpKTsKKwlza2JfZ3JvX3B1bGwoc2tiLCBzaXplb2YoKmlwaCkpOworCXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcihza2IsIHNrYl9ncm9fb2Zmc2V0KHNrYikpOwogCi0JZmx1c2ggKz0gbnRvaHMoaXBoLT5wYXlsb2FkX2xlbikgIT0gc2tiLT5sZW47CisJZmx1c2ggKz0gbnRvaHMoaXBoLT5wYXlsb2FkX2xlbikgIT0gc2tiX2dyb19sZW4oc2tiKTsKIAogCXJjdV9yZWFkX2xvY2soKTsKLQlwcm90byA9IGlwdjZfZ3NvX3B1bGxfZXh0aGRycyhza2IsIGlwaC0+bmV4dGhkcik7Ci0JaXBoID0gaXB2Nl9oZHIoc2tiKTsKLQlJUFY2X0dST19DQihza2IpLT5wcm90byA9IHByb3RvOworCXByb3RvID0gaXBoLT5uZXh0aGRyOwogCW9wcyA9IHJjdV9kZXJlZmVyZW5jZShpbmV0Nl9wcm90b3NbcHJvdG9dKTsKLQlpZiAoIW9wcyB8fCAhb3BzLT5ncm9fcmVjZWl2ZSkKLQkJZ290byBvdXRfdW5sb2NrOworCWlmICghb3BzIHx8ICFvcHMtPmdyb19yZWNlaXZlKSB7CisJCV9fcHNrYl9wdWxsKHNrYiwgc2tiX2dyb19vZmZzZXQoc2tiKSk7CisJCXByb3RvID0gaXB2Nl9nc29fcHVsbF9leHRoZHJzKHNrYiwgcHJvdG8pOworCQlza2JfZ3JvX3B1bGwoc2tiLCAtc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSk7CisJCXNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7CisJCV9fc2tiX3B1c2goc2tiLCBza2JfZ3JvX29mZnNldChza2IpKTsKKworCQlpZiAoIW9wcyB8fCAhb3BzLT5ncm9fcmVjZWl2ZSkKKwkJCWdvdG8gb3V0X3VubG9jazsKKworCQlpcGggPSBpcHY2X2hkcihza2IpOworCX0KKworCUlQVjZfR1JPX0NCKHNrYiktPnByb3RvID0gcHJvdG87CiAKIAlmbHVzaC0tOwotCXNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7CiAJbmxlbiA9IHNrYl9uZXR3b3JrX2hlYWRlcl9sZW4oc2tiKTsKIAogCWZvciAocCA9ICpoZWFkOyBwOyBwID0gcC0+bmV4dCkgewpAQCAtODgzLDggKzkxMSw4IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBpcHY2X3BhY2tldF90eXBlID0gewotCS50eXBlID0gX19jb25zdGFudF9odG9ucyhFVEhfUF9JUFY2KSwKK3N0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgaXB2Nl9wYWNrZXRfdHlwZSBfX3JlYWRfbW9zdGx5ID0geworCS50eXBlID0gY3B1X3RvX2JlMTYoRVRIX1BfSVBWNiksCiAJLmZ1bmMgPSBpcHY2X3JjdiwKIAkuZ3NvX3NlbmRfY2hlY2sgPSBpcHY2X2dzb19zZW5kX2NoZWNrLAogCS5nc29fc2VnbWVudCA9IGlwdjZfZ3NvX3NlZ21lbnQsCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMgYi9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMKaW5kZXggNDBmMzI0Ni4uZDMxZGYwZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jCisrKyBiL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuYwpAQCAtMjE4LDggKzIxOCw3IEBACiAJCQlpZiAob3B0KQogCQkJCXNvY2tfa2ZyZWVfcyhzaywgb3B0LCBvcHQtPnRvdF9sZW4pOwogCQkJcGt0b3B0ID0geGNoZygmbnAtPnBrdG9wdGlvbnMsIE5VTEwpOwotCQkJaWYgKHBrdG9wdCkKLQkJCQlrZnJlZV9za2IocGt0b3B0KTsKKwkJCWtmcmVlX3NrYihwa3RvcHQpOwogCiAJCQlzay0+c2tfZGVzdHJ1Y3QgPSBpbmV0X3NvY2tfZGVzdHJ1Y3Q7CiAJCQkvKgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmRpc2MuYyBiL25ldC9pcHY2L25kaXNjLmMKaW5kZXggM2UyOTcwOC4uOWYwNjFkMSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmRpc2MuYworKysgYi9uZXQvaXB2Ni9uZGlzYy5jCkBAIC0xMDk1LDExICsxMDk1LDcgQEAKIAkJJmlwdjZfaGRyKHJhKS0+c2FkZHIpOwogCW5sbXNnX2VuZChza2IsIG5saCk7CiAKLQllcnIgPSBydG5sX25vdGlmeShza2IsIG5ldCwgMCwgUlROTEdSUF9ORF9VU0VST1BULCBOVUxMLAotCQkJICBHRlBfQVRPTUlDKTsKLQlpZiAoZXJyIDwgMCkKLQkJZ290byBlcnJvdXQ7Ci0KKwlydG5sX25vdGlmeShza2IsIG5ldCwgMCwgUlROTEdSUF9ORF9VU0VST1BULCBOVUxMLCBHRlBfQVRPTUlDKTsKIAlyZXR1cm47CiAKIG5sYV9wdXRfZmFpbHVyZToKQEAgLTE1MzgsMTMgKzE1MzQsMTAgQEAKIAlpZiAocnQtPnJ0NmlfZmxhZ3MgJiBSVEZfR0FURVdBWSkgewogCQlORF9QUklOVEsyKEtFUk5fV0FSTklORwogCQkJICAgIklDTVB2NiBSZWRpcmVjdDogZGVzdGluYXRpb24gaXMgbm90IGEgbmVpZ2hib3VyLlxuIik7Ci0JCWRzdF9yZWxlYXNlKGRzdCk7Ci0JCXJldHVybjsKKwkJZ290byByZWxlYXNlOwogCX0KLQlpZiAoIXhybGltX2FsbG93KGRzdCwgMSpIWikpIHsKLQkJZHN0X3JlbGVhc2UoZHN0KTsKLQkJcmV0dXJuOwotCX0KKwlpZiAoIXhybGltX2FsbG93KGRzdCwgMSpIWikpCisJCWdvdG8gcmVsZWFzZTsKIAogCWlmIChkZXYtPmFkZHJfbGVuKSB7CiAJCXJlYWRfbG9ja19iaCgmbmVpZ2gtPmxvY2spOwpAQCAtMTU3MCw4ICsxNTYzLDcgQEAKIAkJTkRfUFJJTlRLMChLRVJOX0VSUgogCQkJICAgIklDTVB2NiBSZWRpcmVjdDogJXMoKSBmYWlsZWQgdG8gYWxsb2NhdGUgYW4gc2tiLlxuIiwKIAkJCSAgIF9fZnVuY19fKTsKLQkJZHN0X3JlbGVhc2UoZHN0KTsKLQkJcmV0dXJuOworCQlnb3RvIHJlbGVhc2U7CiAJfQogCiAJc2tiX3Jlc2VydmUoYnVmZiwgTExfUkVTRVJWRURfU1BBQ0UoZGV2KSk7CkBAIC0xNjMxLDYgKzE2MjMsMTAgQEAKIAogCWlmIChsaWtlbHkoaWRldiAhPSBOVUxMKSkKIAkJaW42X2Rldl9wdXQoaWRldik7CisJcmV0dXJuOworCityZWxlYXNlOgorCWRzdF9yZWxlYXNlKGRzdCk7CiB9CiAKIHN0YXRpYyB2b2lkIHBuZGlzY19yZWRvKHN0cnVjdCBza19idWZmICpza2IpCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZyBiL25ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnCmluZGV4IDUzZWE1MTIuLjI5ZDY0M2IgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnCkBAIC05NSwxMyArOTUsMTMgQEAKIAkgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLgogCiBjb25maWcgSVA2X05GX01BVENIX0hMCi0JdHJpc3RhdGUgJyJobCIgbWF0Y2ggc3VwcG9ydCcKKwl0cmlzdGF0ZSAnImhsIiBob3BsaW1pdCBtYXRjaCBzdXBwb3J0JwogCWRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VECi0JaGVscAotCSAgSEwgbWF0Y2hpbmcgYWxsb3dzIHlvdSB0byBtYXRjaCBwYWNrZXRzIGJhc2VkIG9uIHRoZSBob3AKLQkgIGxpbWl0IG9mIHRoZSBwYWNrZXQuCi0KLQkgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLgorCXNlbGVjdCBORVRGSUxURVJfWFRfTUFUQ0hfSEwKKwktLS1oZWxwLS0tCisJVGhpcyBpcyBhIGJhY2t3YXJkcy1jb21wYXQgb3B0aW9uIGZvciB0aGUgdXNlcidzIGNvbnZlbmllbmNlCisJKGUuZy4gd2hlbiBydW5uaW5nIG9sZGNvbmZpZykuIEl0IHNlbGVjdHMKKwlDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hMLgogCiBjb25maWcgSVA2X05GX01BVENIX0lQVjZIRUFERVIKIAl0cmlzdGF0ZSAnImlwdjZoZWFkZXIiIElQdjYgRXh0ZW5zaW9uIEhlYWRlcnMgTWF0Y2gnCkBAIC0xMzAsNiArMTMwLDE1IEBACiAJICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi4KIAogIyBUaGUgdGFyZ2V0cworY29uZmlnIElQNl9ORl9UQVJHRVRfSEwKKwl0cmlzdGF0ZSAnIkhMIiBob3BsaW1pdCB0YXJnZXQgc3VwcG9ydCcKKwlkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRAorCXNlbGVjdCBORVRGSUxURVJfWFRfVEFSR0VUX0hMCisJLS0taGVscC0tLQorCVRoaXMgaXMgYSBiYWNrd2FyZHMtY29tcGF0IG9wdGlvbiBmb3IgdGhlIHVzZXIncyBjb252ZW5pZW5jZQorCShlLmcuIHdoZW4gcnVubmluZyBvbGRjb25maWcpLiBJdCBzZWxlY3RzCisJQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfSEwuCisKIGNvbmZpZyBJUDZfTkZfVEFSR0VUX0xPRwogCXRyaXN0YXRlICJMT0cgdGFyZ2V0IHN1cHBvcnQiCiAJZGVmYXVsdCBtIGlmIE5FVEZJTFRFUl9BRFZBTkNFRD1uCkBAIC0xNzAsMjMgKzE3OSw2IEBACiAKIAkgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLgogCi1jb25maWcgSVA2X05GX1RBUkdFVF9ITAotCXRyaXN0YXRlICAnSEwgKGhvcGxpbWl0KSB0YXJnZXQgc3VwcG9ydCcKLQlkZXBlbmRzIG9uIElQNl9ORl9NQU5HTEUKLQlkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRAotCWhlbHAKLQkgIFRoaXMgb3B0aW9uIGFkZHMgYSBgSEwnIHRhcmdldCwgd2hpY2ggZW5hYmxlcyB0aGUgdXNlciB0byBkZWNyZW1lbnQKLQkgIHRoZSBob3BsaW1pdCB2YWx1ZSBvZiB0aGUgSVB2NiBoZWFkZXIgb3Igc2V0IGl0IHRvIGEgZ2l2ZW4gKGxvd2VyKQotCSAgdmFsdWUuCi0KLQkgIFdoaWxlIGl0IGlzIHNhZmUgdG8gZGVjcmVtZW50IHRoZSBob3BsaW1pdCB2YWx1ZSwgdGhpcyBvcHRpb24gYWxzbwotCSAgZW5hYmxlcyBmdW5jdGlvbmFsaXR5IHRvIGluY3JlbWVudCBhbmQgc2V0IHRoZSBob3BsaW1pdCB2YWx1ZSBvZiB0aGUKLQkgIElQdjYgaGVhZGVyIHRvIGFyYml0cmFyeSB2YWx1ZXMuICBUaGlzIGlzIEVYVFJFTUVMWSBEQU5HRVJPVVMgc2luY2UKLQkgIHlvdSBjYW4gZWFzaWx5IGNyZWF0ZSBpbW1vcnRhbCBwYWNrZXRzIHRoYXQgbG9vcCBmb3JldmVyIG9uIHRoZQotCSAgbmV0d29yay4KLQotCSAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uCi0KIGNvbmZpZyBJUDZfTkZfUkFXCiAJdHJpc3RhdGUgICdyYXcgdGFibGUgc3VwcG9ydCAocmVxdWlyZWQgZm9yIFRSQUNFKScKIAlkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL01ha2VmaWxlIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL01ha2VmaWxlCmluZGV4IDNmMTdjOTQuLmFhZmJiYTMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9NYWtlZmlsZQorKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvTWFrZWZpbGUKQEAgLTIwLDEzICsyMCwxMSBAQAogb2JqLSQoQ09ORklHX0lQNl9ORl9NQVRDSF9BSCkgKz0gaXA2dF9haC5vCiBvYmotJChDT05GSUdfSVA2X05GX01BVENIX0VVSTY0KSArPSBpcDZ0X2V1aTY0Lm8KIG9iai0kKENPTkZJR19JUDZfTkZfTUFUQ0hfRlJBRykgKz0gaXA2dF9mcmFnLm8KLW9iai0kKENPTkZJR19JUDZfTkZfTUFUQ0hfSEwpICs9IGlwNnRfaGwubwogb2JqLSQoQ09ORklHX0lQNl9ORl9NQVRDSF9JUFY2SEVBREVSKSArPSBpcDZ0X2lwdjZoZWFkZXIubwogb2JqLSQoQ09ORklHX0lQNl9ORl9NQVRDSF9NSCkgKz0gaXA2dF9taC5vCiBvYmotJChDT05GSUdfSVA2X05GX01BVENIX09QVFMpICs9IGlwNnRfaGJoLm8KIG9iai0kKENPTkZJR19JUDZfTkZfTUFUQ0hfUlQpICs9IGlwNnRfcnQubwogCiAjIHRhcmdldHMKLW9iai0kKENPTkZJR19JUDZfTkZfVEFSR0VUX0hMKSArPSBpcDZ0X0hMLm8KIG9iai0kKENPTkZJR19JUDZfTkZfVEFSR0VUX0xPRykgKz0gaXA2dF9MT0cubwogb2JqLSQoQ09ORklHX0lQNl9ORl9UQVJHRVRfUkVKRUNUKSArPSBpcDZ0X1JFSkVDVC5vCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3F1ZXVlLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3F1ZXVlLmMKaW5kZXggNTg1OWMwNC4uYjY5M2Y4NCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl9xdWV1ZS5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZfcXVldWUuYwpAQCAtNjQzLDYgKzY0Myw3IEBACiAKIE1PRFVMRV9ERVNDUklQVElPTigiSVB2NiBwYWNrZXQgcXVldWUgaGFuZGxlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTX05FVF9QRl9QUk9UTyhQRl9ORVRMSU5LLCBORVRMSU5LX0lQNl9GVyk7CiAKIG1vZHVsZV9pbml0KGlwNl9xdWV1ZV9pbml0KTsKIG1vZHVsZV9leGl0KGlwNl9xdWV1ZV9maW5pKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jCmluZGV4IGEzMzQ4NWQuLjM0YWY3YmIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYwpAQCAtODksNiArODksMjUgQEAKIAkJIChuZXh0aGRyID09IElQUFJPVE9fRFNUT1BUUykgKTsKIH0KIAorc3RhdGljIHVuc2lnbmVkIGxvbmcgaWZuYW1lX2NvbXBhcmUoY29uc3QgY2hhciAqX2EsIGNvbnN0IGNoYXIgKl9iLAorCQkJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpfbWFzaykKK3sKKwljb25zdCB1bnNpZ25lZCBsb25nICphID0gKGNvbnN0IHVuc2lnbmVkIGxvbmcgKilfYTsKKwljb25zdCB1bnNpZ25lZCBsb25nICpiID0gKGNvbnN0IHVuc2lnbmVkIGxvbmcgKilfYjsKKwljb25zdCB1bnNpZ25lZCBsb25nICptYXNrID0gKGNvbnN0IHVuc2lnbmVkIGxvbmcgKilfbWFzazsKKwl1bnNpZ25lZCBsb25nIHJldDsKKworCXJldCA9IChhWzBdIF4gYlswXSkgJiBtYXNrWzBdOworCWlmIChJRk5BTVNJWiA+IHNpemVvZih1bnNpZ25lZCBsb25nKSkKKwkJcmV0IHw9IChhWzFdIF4gYlsxXSkgJiBtYXNrWzFdOworCWlmIChJRk5BTVNJWiA+IDIgKiBzaXplb2YodW5zaWduZWQgbG9uZykpCisJCXJldCB8PSAoYVsyXSBeIGJbMl0pICYgbWFza1syXTsKKwlpZiAoSUZOQU1TSVogPiAzICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKQorCQlyZXQgfD0gKGFbM10gXiBiWzNdKSAmIG1hc2tbM107CisJQlVJTERfQlVHX09OKElGTkFNU0laID4gNCAqIHNpemVvZih1bnNpZ25lZCBsb25nKSk7CisJcmV0dXJuIHJldDsKK30KKwogLyogUmV0dXJucyB3aGV0aGVyIG1hdGNoZXMgcnVsZSBvciBub3QuICovCiAvKiBQZXJmb3JtYW5jZSBjcml0aWNhbCAtIGNhbGxlZCBmb3IgZXZlcnkgcGFja2V0ICovCiBzdGF0aWMgaW5saW5lIGJvb2wKQEAgLTk5LDcgKzExOCw2IEBACiAJCSB1bnNpZ25lZCBpbnQgKnByb3RvZmYsCiAJCSBpbnQgKmZyYWdvZmYsIGJvb2wgKmhvdGRyb3ApCiB7Ci0Jc2l6ZV90IGk7CiAJdW5zaWduZWQgbG9uZyByZXQ7CiAJY29uc3Qgc3RydWN0IGlwdjZoZHIgKmlwdjYgPSBpcHY2X2hkcihza2IpOwogCkBAIC0xMjAsMTIgKzEzOCw3IEBACiAJCXJldHVybiBmYWxzZTsKIAl9CiAKLQkvKiBMb29rIGZvciBpZm5hbWUgbWF0Y2hlczsgdGhpcyBzaG91bGQgdW5yb2xsIG5pY2VseS4gKi8KLQlmb3IgKGkgPSAwLCByZXQgPSAwOyBpIDwgSUZOQU1TSVovc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOyBpKyspIHsKLQkJcmV0IHw9ICgoKGNvbnN0IHVuc2lnbmVkIGxvbmcgKilpbmRldilbaV0KLQkJCV4gKChjb25zdCB1bnNpZ25lZCBsb25nICopaXA2aW5mby0+aW5pZmFjZSlbaV0pCi0JCQkmICgoY29uc3QgdW5zaWduZWQgbG9uZyAqKWlwNmluZm8tPmluaWZhY2VfbWFzaylbaV07Ci0JfQorCXJldCA9IGlmbmFtZV9jb21wYXJlKGluZGV2LCBpcDZpbmZvLT5pbmlmYWNlLCBpcDZpbmZvLT5pbmlmYWNlX21hc2spOwogCiAJaWYgKEZXSU5WKHJldCAhPSAwLCBJUDZUX0lOVl9WSUFfSU4pKSB7CiAJCWRwcmludGYoIlZJQSBpbiBtaXNtYXRjaCAoJXMgdnMgJXMpLiVzXG4iLApAQCAtMTM0LDExICsxNDcsNyBAQAogCQlyZXR1cm4gZmFsc2U7CiAJfQogCi0JZm9yIChpID0gMCwgcmV0ID0gMDsgaSA8IElGTkFNU0laL3NpemVvZih1bnNpZ25lZCBsb25nKTsgaSsrKSB7Ci0JCXJldCB8PSAoKChjb25zdCB1bnNpZ25lZCBsb25nICopb3V0ZGV2KVtpXQotCQkJXiAoKGNvbnN0IHVuc2lnbmVkIGxvbmcgKilpcDZpbmZvLT5vdXRpZmFjZSlbaV0pCi0JCQkmICgoY29uc3QgdW5zaWduZWQgbG9uZyAqKWlwNmluZm8tPm91dGlmYWNlX21hc2spW2ldOwotCX0KKwlyZXQgPSBpZm5hbWVfY29tcGFyZShvdXRkZXYsIGlwNmluZm8tPm91dGlmYWNlLCBpcDZpbmZvLT5vdXRpZmFjZV9tYXNrKTsKIAogCWlmIChGV0lOVihyZXQgIT0gMCwgSVA2VF9JTlZfVklBX09VVCkpIHsKIAkJZHByaW50ZigiVklBIG91dCBtaXNtYXRjaCAoJXMgdnMgJXMpLiVzXG4iLApAQCAtMzczLDEwICszODIsMTIgQEAKIAltdHBhci5mYW1pbHkgID0gdGdwYXIuZmFtaWx5ID0gTkZQUk9UT19JUFY2OwogCXRncGFyLmhvb2tudW0gPSBob29rOwogCi0JcmVhZF9sb2NrX2JoKCZ0YWJsZS0+bG9jayk7CiAJSVBfTkZfQVNTRVJUKHRhYmxlLT52YWxpZF9ob29rcyAmICgxIDw8IGhvb2spKTsKLQlwcml2YXRlID0gdGFibGUtPnByaXZhdGU7Ci0JdGFibGVfYmFzZSA9ICh2b2lkICopcHJpdmF0ZS0+ZW50cmllc1tzbXBfcHJvY2Vzc29yX2lkKCldOworCisJcmN1X3JlYWRfbG9jaygpOworCXByaXZhdGUgPSByY3VfZGVyZWZlcmVuY2UodGFibGUtPnByaXZhdGUpOworCXRhYmxlX2Jhc2UgPSByY3VfZGVyZWZlcmVuY2UocHJpdmF0ZS0+ZW50cmllc1tzbXBfcHJvY2Vzc29yX2lkKCldKTsKKwogCWUgPSBnZXRfZW50cnkodGFibGVfYmFzZSwgcHJpdmF0ZS0+aG9va19lbnRyeVtob29rXSk7CiAKIAkvKiBGb3IgcmV0dXJuIGZyb20gYnVpbHRpbiBjaGFpbiAqLwpAQCAtNDc0LDcgKzQ4NSw3IEBACiAjaWZkZWYgQ09ORklHX05FVEZJTFRFUl9ERUJVRwogCSgoc3RydWN0IGlwNnRfZW50cnkgKil0YWJsZV9iYXNlKS0+Y29tZWZyb20gPSBORVRGSUxURVJfTElOS19QT0lTT047CiAjZW5kaWYKLQlyZWFkX3VubG9ja19iaCgmdGFibGUtPmxvY2spOworCXJjdV9yZWFkX3VubG9jaygpOwogCiAjaWZkZWYgREVCVUdfQUxMT1dfQUxMCiAJcmV0dXJuIE5GX0FDQ0VQVDsKQEAgLTk1NSwxMSArOTY2LDY0IEBACiAJfQogfQogCisvKiBXZSdyZSBsYXp5LCBhbmQgYWRkIHRvIHRoZSBmaXJzdCBDUFU7IG92ZXJmbG93IHdvcmtzIGl0cyBmZXkgbWFnaWMKKyAqIGFuZCBldmVyeXRoaW5nIGlzIE9LLiAqLworc3RhdGljIGludAorYWRkX2NvdW50ZXJfdG9fZW50cnkoc3RydWN0IGlwNnRfZW50cnkgKmUsCisJCSAgICAgY29uc3Qgc3RydWN0IHh0X2NvdW50ZXJzIGFkZG1lW10sCisJCSAgICAgdW5zaWduZWQgaW50ICppKQoreworCUFERF9DT1VOVEVSKGUtPmNvdW50ZXJzLCBhZGRtZVsqaV0uYmNudCwgYWRkbWVbKmldLnBjbnQpOworCisJKCppKSsrOworCXJldHVybiAwOworfQorCisvKiBUYWtlIHZhbHVlcyBmcm9tIGNvdW50ZXJzIGFuZCBhZGQgdGhlbSBiYWNrIG9udG8gdGhlIGN1cnJlbnQgY3B1ICovCitzdGF0aWMgdm9pZCBwdXRfY291bnRlcnMoc3RydWN0IHh0X3RhYmxlX2luZm8gKnQsCisJCQkgY29uc3Qgc3RydWN0IHh0X2NvdW50ZXJzIGNvdW50ZXJzW10pCit7CisJdW5zaWduZWQgaW50IGksIGNwdTsKKworCWxvY2FsX2JoX2Rpc2FibGUoKTsKKwljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJaSA9IDA7CisJSVA2VF9FTlRSWV9JVEVSQVRFKHQtPmVudHJpZXNbY3B1XSwKKwkJCSAgIHQtPnNpemUsCisJCQkgICBhZGRfY291bnRlcl90b19lbnRyeSwKKwkJCSAgIGNvdW50ZXJzLAorCQkJICAgJmkpOworCWxvY2FsX2JoX2VuYWJsZSgpOworfQorCitzdGF0aWMgaW5saW5lIGludAoremVyb19lbnRyeV9jb3VudGVyKHN0cnVjdCBpcDZ0X2VudHJ5ICplLCB2b2lkICphcmcpCit7CisJZS0+Y291bnRlcnMuYmNudCA9IDA7CisJZS0+Y291bnRlcnMucGNudCA9IDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitjbG9uZV9jb3VudGVycyhzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqbmV3aW5mbywgY29uc3Qgc3RydWN0IHh0X3RhYmxlX2luZm8gKmluZm8pCit7CisJdW5zaWduZWQgaW50IGNwdTsKKwljb25zdCB2b2lkICpsb2NfY3B1X2VudHJ5ID0gaW5mby0+ZW50cmllc1tyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpXTsKKworCW1lbWNweShuZXdpbmZvLCBpbmZvLCBvZmZzZXRvZihzdHJ1Y3QgeHRfdGFibGVfaW5mbywgZW50cmllcykpOworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKKwkJbWVtY3B5KG5ld2luZm8tPmVudHJpZXNbY3B1XSwgbG9jX2NwdV9lbnRyeSwgaW5mby0+c2l6ZSk7CisJCUlQNlRfRU5UUllfSVRFUkFURShuZXdpbmZvLT5lbnRyaWVzW2NwdV0sIG5ld2luZm8tPnNpemUsCisJCQkJICAgemVyb19lbnRyeV9jb3VudGVyLCBOVUxMKTsKKwl9Cit9CisKIHN0YXRpYyBzdHJ1Y3QgeHRfY291bnRlcnMgKmFsbG9jX2NvdW50ZXJzKHN0cnVjdCB4dF90YWJsZSAqdGFibGUpCiB7CiAJdW5zaWduZWQgaW50IGNvdW50ZXJzaXplOwogCXN0cnVjdCB4dF9jb3VudGVycyAqY291bnRlcnM7Ci0JY29uc3Qgc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGUgPSB0YWJsZS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZSA9IHRhYmxlLT5wcml2YXRlOworCXN0cnVjdCB4dF90YWJsZV9pbmZvICppbmZvOwogCiAJLyogV2UgbmVlZCBhdG9taWMgc25hcHNob3Qgb2YgY291bnRlcnM6IHJlc3QgZG9lc24ndCBjaGFuZ2UKIAkgICAob3RoZXIgdGhhbiBjb21lZnJvbSwgd2hpY2ggdXNlcnNwYWNlIGRvZXNuJ3QgY2FyZQpAQCAtOTY4LDE0ICsxMDMyLDI4IEBACiAJY291bnRlcnMgPSB2bWFsbG9jX25vZGUoY291bnRlcnNpemUsIG51bWFfbm9kZV9pZCgpKTsKIAogCWlmIChjb3VudGVycyA9PSBOVUxMKQotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwkJZ290byBub21lbTsKIAotCS8qIEZpcnN0LCBzdW0gY291bnRlcnMuLi4gKi8KLQl3cml0ZV9sb2NrX2JoKCZ0YWJsZS0+bG9jayk7Ci0JZ2V0X2NvdW50ZXJzKHByaXZhdGUsIGNvdW50ZXJzKTsKLQl3cml0ZV91bmxvY2tfYmgoJnRhYmxlLT5sb2NrKTsKKwlpbmZvID0geHRfYWxsb2NfdGFibGVfaW5mbyhwcml2YXRlLT5zaXplKTsKKwlpZiAoIWluZm8pCisJCWdvdG8gZnJlZV9jb3VudGVyczsKIAotCXJldHVybiBjb3VudGVyczsKKwljbG9uZV9jb3VudGVycyhpbmZvLCBwcml2YXRlKTsKKworCW11dGV4X2xvY2soJnRhYmxlLT5sb2NrKTsKKwl4dF90YWJsZV9lbnRyeV9zd2FwX3JjdShwcml2YXRlLCBpbmZvKTsKKwlzeW5jaHJvbml6ZV9uZXQoKTsJLyogV2FpdCB1bnRpbCBzbW9rZSBoYXMgY2xlYXJlZCAqLworCisJZ2V0X2NvdW50ZXJzKGluZm8sIGNvdW50ZXJzKTsKKwlwdXRfY291bnRlcnMocHJpdmF0ZSwgY291bnRlcnMpOworCW11dGV4X3VubG9jaygmdGFibGUtPmxvY2spOworCisJeHRfZnJlZV90YWJsZV9pbmZvKGluZm8pOworCisgZnJlZV9jb3VudGVyczoKKwl2ZnJlZShjb3VudGVycyk7Cisgbm9tZW06CisJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTEzNDIsMjggKzE0MjAsNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLS8qIFdlJ3JlIGxhenksIGFuZCBhZGQgdG8gdGhlIGZpcnN0IENQVTsgb3ZlcmZsb3cgd29ya3MgaXRzIGZleSBtYWdpYwotICogYW5kIGV2ZXJ5dGhpbmcgaXMgT0suICovCi1zdGF0aWMgaW5saW5lIGludAotYWRkX2NvdW50ZXJfdG9fZW50cnkoc3RydWN0IGlwNnRfZW50cnkgKmUsCi0JCSAgICAgY29uc3Qgc3RydWN0IHh0X2NvdW50ZXJzIGFkZG1lW10sCi0JCSAgICAgdW5zaWduZWQgaW50ICppKQotewotI2lmIDAKLQlkdXByaW50ZigiYWRkX2NvdW50ZXI6IEVudHJ5ICV1ICVsdS8lbHUgKyAlbHUvJWx1XG4iLAotCQkgKmksCi0JCSAobG9uZyB1bnNpZ25lZCBpbnQpZS0+Y291bnRlcnMucGNudCwKLQkJIChsb25nIHVuc2lnbmVkIGludCllLT5jb3VudGVycy5iY250LAotCQkgKGxvbmcgdW5zaWduZWQgaW50KWFkZG1lWyppXS5wY250LAotCQkgKGxvbmcgdW5zaWduZWQgaW50KWFkZG1lWyppXS5iY250KTsKLSNlbmRpZgotCi0JQUREX0NPVU5URVIoZS0+Y291bnRlcnMsIGFkZG1lWyppXS5iY250LCBhZGRtZVsqaV0ucGNudCk7Ci0KLQkoKmkpKys7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQKIGRvX2FkZF9jb3VudGVycyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCB1bnNpZ25lZCBpbnQgbGVuLAogCQlpbnQgY29tcGF0KQpAQCAtMTQyNCwxMyArMTQ4MCwxNCBAQAogCQlnb3RvIGZyZWU7CiAJfQogCi0Jd3JpdGVfbG9ja19iaCgmdC0+bG9jayk7CisJbXV0ZXhfbG9jaygmdC0+bG9jayk7CiAJcHJpdmF0ZSA9IHQtPnByaXZhdGU7CiAJaWYgKHByaXZhdGUtPm51bWJlciAhPSBudW1fY291bnRlcnMpIHsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byB1bmxvY2tfdXBfZnJlZTsKIAl9CiAKKwlwcmVlbXB0X2Rpc2FibGUoKTsKIAlpID0gMDsKIAkvKiBDaG9vc2UgdGhlIGNvcHkgdGhhdCBpcyBvbiBvdXIgbm9kZSAqLwogCWxvY19jcHVfZW50cnkgPSBwcml2YXRlLT5lbnRyaWVzW3Jhd19zbXBfcHJvY2Vzc29yX2lkKCldOwpAQCAtMTQzOSw4ICsxNDk2LDkgQEAKIAkJCSAgYWRkX2NvdW50ZXJfdG9fZW50cnksCiAJCQkgIHBhZGRjLAogCQkJICAmaSk7CisJcHJlZW1wdF9lbmFibGUoKTsKICB1bmxvY2tfdXBfZnJlZToKLQl3cml0ZV91bmxvY2tfYmgoJnQtPmxvY2spOworCW11dGV4X3VubG9jaygmdC0+bG9jayk7CiAJeHRfdGFibGVfdW5sb2NrKHQpOwogCW1vZHVsZV9wdXQodC0+bWUpOwogIGZyZWU6CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9ITC5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfSEwuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjdiNWFkZi4uMDAwMDAwMAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9ITC5jCisrKyAvZGV2L251bGwKQEAgLTEsOTUgKzAsMCBAQAotLyoKLSAqIEhvcCBMaW1pdCBtb2RpZmljYXRpb24gdGFyZ2V0IGZvciBpcDZ0YWJsZXMKLSAqIE1hY2llaiBTb2x0eXNpYWsgPHNvbHRAZG5zLnRveGljZmlsbXMudHY+Ci0gKiBCYXNlZCBvbiBIVydzIFRUTCBtb2R1bGUKLSAqCi0gKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBHTlUgR1BMCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgotI2luY2x1ZGUgPGxpbnV4L2lwLmg+Ci0jaW5jbHVkZSA8bGludXgvaXB2Ni5oPgotCi0jaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9ITC5oPgotCi1NT0RVTEVfQVVUSE9SKCJNYWNpZWogU29sdHlzaWFrIDxzb2x0QGRucy50b3hpY2ZpbG1zLnR2PiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJYdGFibGVzOiBJUHY2IEhvcCBMaW1pdCBmaWVsZCBtb2RpZmljYXRpb24gdGFyZ2V0Iik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQKLWhsX3RnNihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgeHRfdGFyZ2V0X3BhcmFtICpwYXIpCi17Ci0Jc3RydWN0IGlwdjZoZHIgKmlwNmg7Ci0JY29uc3Qgc3RydWN0IGlwNnRfSExfaW5mbyAqaW5mbyA9IHBhci0+dGFyZ2luZm87Ci0JaW50IG5ld19obDsKLQotCWlmICghc2tiX21ha2Vfd3JpdGFibGUoc2tiLCBza2ItPmxlbikpCi0JCXJldHVybiBORl9EUk9QOwotCi0JaXA2aCA9IGlwdjZfaGRyKHNrYik7Ci0KLQlzd2l0Y2ggKGluZm8tPm1vZGUpIHsKLQkJY2FzZSBJUDZUX0hMX1NFVDoKLQkJCW5ld19obCA9IGluZm8tPmhvcF9saW1pdDsKLQkJCWJyZWFrOwotCQljYXNlIElQNlRfSExfSU5DOgotCQkJbmV3X2hsID0gaXA2aC0+aG9wX2xpbWl0ICsgaW5mby0+aG9wX2xpbWl0OwotCQkJaWYgKG5ld19obCA+IDI1NSkKLQkJCQluZXdfaGwgPSAyNTU7Ci0JCQlicmVhazsKLQkJY2FzZSBJUDZUX0hMX0RFQzoKLQkJCW5ld19obCA9IGlwNmgtPmhvcF9saW1pdCAtIGluZm8tPmhvcF9saW1pdDsKLQkJCWlmIChuZXdfaGwgPCAwKQotCQkJCW5ld19obCA9IDA7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCW5ld19obCA9IGlwNmgtPmhvcF9saW1pdDsKLQkJCWJyZWFrOwotCX0KLQotCWlwNmgtPmhvcF9saW1pdCA9IG5ld19obDsKLQotCXJldHVybiBYVF9DT05USU5VRTsKLX0KLQotc3RhdGljIGJvb2wgaGxfdGc2X2NoZWNrKGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyKQotewotCWNvbnN0IHN0cnVjdCBpcDZ0X0hMX2luZm8gKmluZm8gPSBwYXItPnRhcmdpbmZvOwotCi0JaWYgKGluZm8tPm1vZGUgPiBJUDZUX0hMX01BWE1PREUpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiaXA2dF9ITDogaW52YWxpZCBvciB1bmtub3duIE1vZGUgJXVcbiIsCi0JCQlpbmZvLT5tb2RlKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQlpZiAoaW5mby0+bW9kZSAhPSBJUDZUX0hMX1NFVCAmJiBpbmZvLT5ob3BfbGltaXQgPT0gMCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJpcDZ0X0hMOiBpbmNyZW1lbnQvZGVjcmVtZW50IGRvZXNuJ3QgIgotCQkJIm1ha2Ugc2Vuc2Ugd2l0aCB2YWx1ZSAwXG4iKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIHN0cnVjdCB4dF90YXJnZXQgaGxfdGc2X3JlZyBfX3JlYWRfbW9zdGx5ID0gewotCS5uYW1lIAkJPSAiSEwiLAotCS5mYW1pbHkJCT0gTkZQUk9UT19JUFY2LAotCS50YXJnZXQJCT0gaGxfdGc2LAotCS50YXJnZXRzaXplCT0gc2l6ZW9mKHN0cnVjdCBpcDZ0X0hMX2luZm8pLAotCS50YWJsZQkJPSAibWFuZ2xlIiwKLQkuY2hlY2tlbnRyeQk9IGhsX3RnNl9jaGVjaywKLQkubWUJCT0gVEhJU19NT0RVTEUKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGhsX3RnNl9pbml0KHZvaWQpCi17Ci0JcmV0dXJuIHh0X3JlZ2lzdGVyX3RhcmdldCgmaGxfdGc2X3JlZyk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBobF90ZzZfZXhpdCh2b2lkKQotewotCXh0X3VucmVnaXN0ZXJfdGFyZ2V0KCZobF90ZzZfcmVnKTsKLX0KLQotbW9kdWxlX2luaXQoaGxfdGc2X2luaXQpOwotbW9kdWxlX2V4aXQoaGxfdGc2X2V4aXQpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfTE9HLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9MT0cuYwppbmRleCAzN2FkZjVhLi43MDE4Y2FjIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9MT0cuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9MT0cuYwpAQCAtNDc3LDcgKzQ3Nyw3IEBACiAJLm1lIAkJPSBUSElTX01PRFVMRSwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfbG9nZ2VyIGlwNnRfbG9nZ2VyID0geworc3RhdGljIHN0cnVjdCBuZl9sb2dnZXIgaXA2dF9sb2dnZXIgX19yZWFkX21vc3RseSA9IHsKIAkubmFtZQkJPSAiaXA2dF9MT0ciLAogCS5sb2dmbgkJPSAmaXA2dF9sb2dfcGFja2V0LAogCS5tZQkJPSBUSElTX01PRFVMRSwKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hsLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9obC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOTY0ZGNhLi4wMDAwMDAwCi0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hsLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi0vKiBIb3AgTGltaXQgbWF0Y2hpbmcgbW9kdWxlICovCi0KLS8qIChDKSAyMDAxLTIwMDIgTWFjaWVqIFNvbHR5c2lhayA8c29sdEBkbnMudG94aWNmaWxtcy50dj4KLSAqIEJhc2VkIG9uIEhXJ3MgdHRsIG1vZHVsZQotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2lwdjYuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KLQotI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfaGwuaD4KLSNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaD4KLQotTU9EVUxFX0FVVEhPUigiTWFjaWVqIFNvbHR5c2lhayA8c29sdEBkbnMudG94aWNmaWxtcy50dj4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiWHRhYmxlczogSVB2NiBIb3AgTGltaXQgZmllbGQgbWF0Y2giKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotc3RhdGljIGJvb2wgaGxfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF9tYXRjaF9wYXJhbSAqcGFyKQotewotCWNvbnN0IHN0cnVjdCBpcDZ0X2hsX2luZm8gKmluZm8gPSBwYXItPm1hdGNoaW5mbzsKLQljb25zdCBzdHJ1Y3QgaXB2NmhkciAqaXA2aCA9IGlwdjZfaGRyKHNrYik7Ci0KLQlzd2l0Y2ggKGluZm8tPm1vZGUpIHsKLQkJY2FzZSBJUDZUX0hMX0VROgotCQkJcmV0dXJuIGlwNmgtPmhvcF9saW1pdCA9PSBpbmZvLT5ob3BfbGltaXQ7Ci0JCQlicmVhazsKLQkJY2FzZSBJUDZUX0hMX05FOgotCQkJcmV0dXJuIGlwNmgtPmhvcF9saW1pdCAhPSBpbmZvLT5ob3BfbGltaXQ7Ci0JCQlicmVhazsKLQkJY2FzZSBJUDZUX0hMX0xUOgotCQkJcmV0dXJuIGlwNmgtPmhvcF9saW1pdCA8IGluZm8tPmhvcF9saW1pdDsKLQkJCWJyZWFrOwotCQljYXNlIElQNlRfSExfR1Q6Ci0JCQlyZXR1cm4gaXA2aC0+aG9wX2xpbWl0ID4gaW5mby0+aG9wX2xpbWl0OwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJpcDZ0X2hsOiB1bmtub3duIG1vZGUgJWRcbiIsCi0JCQkJaW5mby0+bW9kZSk7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgc3RydWN0IHh0X21hdGNoIGhsX210Nl9yZWcgX19yZWFkX21vc3RseSA9IHsKLQkubmFtZQkJPSAiaGwiLAotCS5mYW1pbHkJCT0gTkZQUk9UT19JUFY2LAotCS5tYXRjaAkJPSBobF9tdDYsCi0JLm1hdGNoc2l6ZQk9IHNpemVvZihzdHJ1Y3QgaXA2dF9obF9pbmZvKSwKLQkubWUJCT0gVEhJU19NT0RVTEUsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBobF9tdDZfaW5pdCh2b2lkKQotewotCXJldHVybiB4dF9yZWdpc3Rlcl9tYXRjaCgmaGxfbXQ2X3JlZyk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBobF9tdDZfZXhpdCh2b2lkKQotewotCXh0X3VucmVnaXN0ZXJfbWF0Y2goJmhsX210Nl9yZWcpOwotfQotCi1tb2R1bGVfaW5pdChobF9tdDZfaW5pdCk7Ci1tb2R1bGVfZXhpdChobF9tdDZfZXhpdCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfZmlsdGVyLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfZmlsdGVyLmMKaW5kZXggNDBkMmUzNi4uZWY1YTBhMyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRhYmxlX2ZpbHRlci5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9maWx0ZXIuYwpAQCAtNTQsNyArNTQsNiBAQAogc3RhdGljIHN0cnVjdCB4dF90YWJsZSBwYWNrZXRfZmlsdGVyID0gewogCS5uYW1lCQk9ICJmaWx0ZXIiLAogCS52YWxpZF9ob29rcwk9IEZJTFRFUl9WQUxJRF9IT09LUywKLQkubG9jawkJPSBfX1JXX0xPQ0tfVU5MT0NLRUQocGFja2V0X2ZpbHRlci5sb2NrKSwKIAkubWUJCT0gVEhJU19NT0RVTEUsCiAJLmFmCQk9IEFGX0lORVQ2LAogfTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9tYW5nbGUuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9tYW5nbGUuYwppbmRleCBkMGIzMWIyLi5hYjBkMzk4IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfbWFuZ2xlLmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRhYmxlX21hbmdsZS5jCkBAIC02MCw3ICs2MCw2IEBACiBzdGF0aWMgc3RydWN0IHh0X3RhYmxlIHBhY2tldF9tYW5nbGVyID0gewogCS5uYW1lCQk9ICJtYW5nbGUiLAogCS52YWxpZF9ob29rcwk9IE1BTkdMRV9WQUxJRF9IT09LUywKLQkubG9jawkJPSBfX1JXX0xPQ0tfVU5MT0NLRUQocGFja2V0X21hbmdsZXIubG9jayksCiAJLm1lCQk9IFRISVNfTU9EVUxFLAogCS5hZgkJPSBBRl9JTkVUNiwKIH07CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfcmF3LmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfcmF3LmMKaW5kZXggMTA5ZmFiNi4uNGI3OTJiNiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRhYmxlX3Jhdy5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9yYXcuYwpAQCAtMzgsNyArMzgsNiBAQAogc3RhdGljIHN0cnVjdCB4dF90YWJsZSBwYWNrZXRfcmF3ID0gewogCS5uYW1lID0gInJhdyIsCiAJLnZhbGlkX2hvb2tzID0gUkFXX1ZBTElEX0hPT0tTLAotCS5sb2NrID0gX19SV19MT0NLX1VOTE9DS0VEKHBhY2tldF9yYXcubG9jayksCiAJLm1lID0gVEhJU19NT0RVTEUsCiAJLmFmID0gQUZfSU5FVDYsCiB9OwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRhYmxlX3NlY3VyaXR5LmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfc2VjdXJpdHkuYwppbmRleCAyMGJjNTJmLi4wZWEzN2ZmIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfc2VjdXJpdHkuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfc2VjdXJpdHkuYwpAQCAtNTksNyArNTksNiBAQAogc3RhdGljIHN0cnVjdCB4dF90YWJsZSBzZWN1cml0eV90YWJsZSA9IHsKIAkubmFtZQkJPSAic2VjdXJpdHkiLAogCS52YWxpZF9ob29rcwk9IFNFQ1VSSVRZX1ZBTElEX0hPT0tTLAotCS5sb2NrCQk9IF9fUldfTE9DS19VTkxPQ0tFRChzZWN1cml0eV90YWJsZS5sb2NrKSwKIAkubWUJCT0gVEhJU19NT0RVTEUsCiAJLmFmCQk9IEFGX0lORVQ2LAogfTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY2LmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2Ni5jCmluZGV4IDcyN2I5NTMuLmU2ODUyZjYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY2LmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjYuYwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvLmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvaXB2Ni9uZl9jb25udHJhY2tfaXB2Ni5oPgogCiBzdGF0aWMgYm9vbCBpcHY2X3BrdF90b190dXBsZShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbmhvZmYsCiAJCQkgICAgICBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSkKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcHY2LmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXB2Ni5jCmluZGV4IDcyZGJiNmQuLjQxYjhhOTUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcHY2LmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wdjYuYwpAQCAtMTI2LDYgKzEyNiwxMCBAQAogCQlwcl9kZWJ1ZygiaWNtcHY2OiBjYW4ndCBjcmVhdGUgbmV3IGNvbm4gd2l0aCB0eXBlICV1XG4iLAogCQkJIHR5cGUgKyAxMjgpOwogCQluZl9jdF9kdW1wX3R1cGxlX2lwdjYoJmN0LT50dXBsZWhhc2hbMF0udHVwbGUpOworCQlpZiAoTE9HX0lOVkFMSUQobmZfY3RfbmV0KGN0KSwgSVBQUk9UT19JQ01QVjYpKQorCQkJbmZfbG9nX3BhY2tldChQRl9JTkVUNiwgMCwgc2tiLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkJCSAgICAgICJuZl9jdF9pY21wdjY6IGludmFsaWQgbmV3IHdpdGggdHlwZSAlZCAiLAorCQkJCSAgICAgIHR5cGUgKyAxMjgpOwogCQlyZXR1cm4gZmFsc2U7CiAJfQogCWF0b21pY19zZXQoJmN0LT5wcm90by5pY21wLmNvdW50LCAwKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3JvdXRlLmMgYi9uZXQvaXB2Ni9yb3V0ZS5jCmluZGV4IDljNTc0MjMuLjEzOTRkZGIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3JvdXRlLmMKKysrIGIvbmV0L2lwdjYvcm91dGUuYwpAQCAtOTgsNyArOTgsNyBAQAogCiBzdGF0aWMgc3RydWN0IGRzdF9vcHMgaXA2X2RzdF9vcHNfdGVtcGxhdGUgPSB7CiAJLmZhbWlseQkJCT0JQUZfSU5FVDYsCi0JLnByb3RvY29sCQk9CV9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVBWNiksCisJLnByb3RvY29sCQk9CWNwdV90b19iZTE2KEVUSF9QX0lQVjYpLAogCS5nYwkJCT0JaXA2X2RzdF9nYywKIAkuZ2NfdGhyZXNoCQk9CTEwMjQsCiAJLmNoZWNrCQkJPQlpcDZfZHN0X2NoZWNrLApAQCAtMTE3LDcgKzExNyw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgZHN0X29wcyBpcDZfZHN0X2JsYWNraG9sZV9vcHMgPSB7CiAJLmZhbWlseQkJCT0JQUZfSU5FVDYsCi0JLnByb3RvY29sCQk9CV9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVBWNiksCisJLnByb3RvY29sCQk9CWNwdV90b19iZTE2KEVUSF9QX0lQVjYpLAogCS5kZXN0cm95CQk9CWlwNl9kc3RfZGVzdHJveSwKIAkuY2hlY2sJCQk9CWlwNl9kc3RfY2hlY2ssCiAJLnVwZGF0ZV9wbXR1CQk9CWlwNl9ydF9ibGFja2hvbGVfdXBkYXRlX3BtdHUsCkBAIC0yNDAwLDggKzI0MDAsOSBAQAogCQlrZnJlZV9za2Ioc2tiKTsKIAkJZ290byBlcnJvdXQ7CiAJfQotCWVyciA9IHJ0bmxfbm90aWZ5KHNrYiwgbmV0LCBpbmZvLT5waWQsIFJUTkxHUlBfSVBWNl9ST1VURSwKLQkJCSAgaW5mby0+bmxoLCBnZnBfYW55KCkpOworCXJ0bmxfbm90aWZ5KHNrYiwgbmV0LCBpbmZvLT5waWQsIFJUTkxHUlBfSVBWNl9ST1VURSwKKwkJICAgIGluZm8tPm5saCwgZ2ZwX2FueSgpKTsKKwlyZXR1cm47CiBlcnJvdXQ6CiAJaWYgKGVyciA8IDApCiAJCXJ0bmxfc2V0X3NrX2VycihuZXQsIFJUTkxHUlBfSVBWNl9ST1VURSwgZXJyKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3NpdC5jIGIvbmV0L2lwdjYvc2l0LmMKaW5kZXggNWNlZTJiYy4uNjY0YWI4MiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvc2l0LmMKKysrIGIvbmV0L2lwdjYvc2l0LmMKQEAgLTQ1NCw3ICs0NTQsNyBAQAogCWlmICh0LT5wYXJtcy5pcGgudHRsID09IDAgJiYgdHlwZSA9PSBJQ01QX1RJTUVfRVhDRUVERUQpCiAJCWdvdG8gb3V0OwogCi0JaWYgKGppZmZpZXMgLSB0LT5lcnJfdGltZSA8IElQVFVOTkVMX0VSUl9USU1FTykKKwlpZiAodGltZV9iZWZvcmUoamlmZmllcywgdC0+ZXJyX3RpbWUgKyBJUFRVTk5FTF9FUlJfVElNRU8pKQogCQl0LT5lcnJfY291bnQrKzsKIAllbHNlCiAJCXQtPmVycl9jb3VudCA9IDE7CkBAIC02NTgsNyArNjU4LDggQEAKIAl9CiAKIAlpZiAodHVubmVsLT5lcnJfY291bnQgPiAwKSB7Ci0JCWlmIChqaWZmaWVzIC0gdHVubmVsLT5lcnJfdGltZSA8IElQVFVOTkVMX0VSUl9USU1FTykgeworCQlpZiAodGltZV9iZWZvcmUoamlmZmllcywKKwkJCQl0dW5uZWwtPmVycl90aW1lICsgSVBUVU5ORUxfRVJSX1RJTUVPKSkgewogCQkJdHVubmVsLT5lcnJfY291bnQtLTsKIAkJCWRzdF9saW5rX2ZhaWx1cmUoc2tiKTsKIAkJfSBlbHNlCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni90Y3BfaXB2Ni5jIGIvbmV0L2lwdjYvdGNwX2lwdjYuYwppbmRleCBlNWI4NWQ0Li40YjVhYTE4IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni90Y3BfaXB2Ni5jCisrKyBiL25ldC9pcHY2L3RjcF9pcHY2LmMKQEAgLTUzMyw4ICs1MzMsNyBAQAogCiBzdGF0aWMgdm9pZCB0Y3BfdjZfcmVxc2tfZGVzdHJ1Y3RvcihzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpCiB7Ci0JaWYgKGluZXQ2X3JzayhyZXEpLT5wa3RvcHRzKQotCQlrZnJlZV9za2IoaW5ldDZfcnNrKHJlcSktPnBrdG9wdHMpOworCWtmcmVlX3NrYihpbmV0Nl9yc2socmVxKS0+cGt0b3B0cyk7CiB9CiAKICNpZmRlZiBDT05GSUdfVENQX01ENVNJRwpAQCAtOTQ4LDcgKzk0Nyw3IEBACiAKIAlzd2l0Y2ggKHNrYi0+aXBfc3VtbWVkKSB7CiAJY2FzZSBDSEVDS1NVTV9DT01QTEVURToKLQkJaWYgKCF0Y3BfdjZfY2hlY2soc2tiLT5sZW4sICZpcGgtPnNhZGRyLCAmaXBoLT5kYWRkciwKKwkJaWYgKCF0Y3BfdjZfY2hlY2soc2tiX2dyb19sZW4oc2tiKSwgJmlwaC0+c2FkZHIsICZpcGgtPmRhZGRyLAogCQkJCSAgc2tiLT5jc3VtKSkgewogCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKIAkJCWJyZWFrOwpAQCAtMTYxMSw4ICsxNjEwLDcgQEAKIAkJfQogCX0KIAotCWlmIChvcHRfc2tiKQotCQlrZnJlZV9za2Iob3B0X3NrYik7CisJa2ZyZWVfc2tiKG9wdF9za2IpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni91ZHAuYyBiL25ldC9pcHY2L3VkcC5jCmluZGV4IDg0YjFhMjkuLjY4NDJkZDIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3VkcC5jCisrKyBiL25ldC9pcHY2L3VkcC5jCkBAIC00OSw2ICs0OSwzNCBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSAidWRwX2ltcGwuaCIKIAoraW50IGlwdjZfcmN2X3NhZGRyX2VxdWFsKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNvY2sgKnNrMikKK3sKKwljb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNrX3Jjdl9zYWRkcjYgPSAmaW5ldDZfc2soc2spLT5yY3Zfc2FkZHI7CisJY29uc3Qgc3RydWN0IGluNl9hZGRyICpzazJfcmN2X3NhZGRyNiA9IGluZXQ2X3Jjdl9zYWRkcihzazIpOworCWludCBza19pcHY2b25seSA9IGlwdjZfb25seV9zb2NrKHNrKTsKKwlpbnQgc2syX2lwdjZvbmx5ID0gaW5ldF92Nl9pcHY2b25seShzazIpOworCWludCBhZGRyX3R5cGUgPSBpcHY2X2FkZHJfdHlwZShza19yY3Zfc2FkZHI2KTsKKwlpbnQgYWRkcl90eXBlMiA9IHNrMl9yY3Zfc2FkZHI2ID8gaXB2Nl9hZGRyX3R5cGUoc2syX3Jjdl9zYWRkcjYpIDogSVBWNl9BRERSX01BUFBFRDsKKworCS8qIGlmIGJvdGggYXJlIG1hcHBlZCwgdHJlYXQgYXMgSVB2NCAqLworCWlmIChhZGRyX3R5cGUgPT0gSVBWNl9BRERSX01BUFBFRCAmJiBhZGRyX3R5cGUyID09IElQVjZfQUREUl9NQVBQRUQpCisJCXJldHVybiBpcHY0X3Jjdl9zYWRkcl9lcXVhbChzaywgc2syKTsKKworCWlmIChhZGRyX3R5cGUyID09IElQVjZfQUREUl9BTlkgJiYKKwkgICAgIShzazJfaXB2Nm9ubHkgJiYgYWRkcl90eXBlID09IElQVjZfQUREUl9NQVBQRUQpKQorCQlyZXR1cm4gMTsKKworCWlmIChhZGRyX3R5cGUgPT0gSVBWNl9BRERSX0FOWSAmJgorCSAgICAhKHNrX2lwdjZvbmx5ICYmIGFkZHJfdHlwZTIgPT0gSVBWNl9BRERSX01BUFBFRCkpCisJCXJldHVybiAxOworCisJaWYgKHNrMl9yY3Zfc2FkZHI2ICYmCisJICAgIGlwdjZfYWRkcl9lcXVhbChza19yY3Zfc2FkZHI2LCBzazJfcmN2X3NhZGRyNikpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKIGludCB1ZHBfdjZfZ2V0X3BvcnQoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBzaG9ydCBzbnVtKQogewogCXJldHVybiB1ZHBfbGliX2dldF9wb3J0KHNrLCBzbnVtLCBpcHY2X3Jjdl9zYWRkcl9lcXVhbCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYyBiL25ldC9pcHY2L3hmcm02X3BvbGljeS5jCmluZGV4IDk3YWIwNjguLmI0YjE2YTQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3hmcm02X3BvbGljeS5jCisrKyBiL25ldC9pcHY2L3hmcm02X3BvbGljeS5jCkBAIC0yNzIsNyArMjcyLDcgQEAKIAogc3RhdGljIHN0cnVjdCBkc3Rfb3BzIHhmcm02X2RzdF9vcHMgPSB7CiAJLmZhbWlseSA9CQlBRl9JTkVUNiwKLQkucHJvdG9jb2wgPQkJX19jb25zdGFudF9odG9ucyhFVEhfUF9JUFY2KSwKKwkucHJvdG9jb2wgPQkJY3B1X3RvX2JlMTYoRVRIX1BfSVBWNiksCiAJLmdjID0JCQl4ZnJtNl9nYXJiYWdlX2NvbGxlY3QsCiAJLnVwZGF0ZV9wbXR1ID0JCXhmcm02X3VwZGF0ZV9wbXR1LAogCS5kZXN0cm95ID0JCXhmcm02X2RzdF9kZXN0cm95LApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYveGZybTZfc3RhdGUuYyBiL25ldC9pcHY2L3hmcm02X3N0YXRlLmMKaW5kZXggMGU2ODViMC4uZjQxN2I3NyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYveGZybTZfc3RhdGUuYworKysgYi9uZXQvaXB2Ni94ZnJtNl9zdGF0ZS5jCkBAIC02OSw3ICs2OSw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAJCWRzdFtjb3VudFtjbGFzc1tpXSAtIDFdKytdID0gc3JjW2ldOwotCQlzcmNbaV0gPSAwOworCQlzcmNbaV0gPSBOVUxMOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvbmV0L2lweC9hZl9pcHguYyBiL25ldC9pcHgvYWZfaXB4LmMKaW5kZXggYjZlNzBmOS4uMTYyNzA1MCAxMDA2NDQKLS0tIGEvbmV0L2lweC9hZl9pcHguYworKysgYi9uZXQvaXB4L2FmX2lweC5jCkBAIC0xOTU4LDEzICsxOTU4LDEzIEBACiAKIFNPQ0tPUFNfV1JBUChpcHhfZGdyYW0sIFBGX0lQWCk7CiAKLXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgaXB4XzgwMjNfcGFja2V0X3R5cGUgPSB7Ci0JLnR5cGUJCT0gX19jb25zdGFudF9odG9ucyhFVEhfUF84MDJfMyksCitzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGlweF84MDIzX3BhY2tldF90eXBlIF9fcmVhZF9tb3N0bHkgPSB7CisJLnR5cGUJCT0gY3B1X3RvX2JlMTYoRVRIX1BfODAyXzMpLAogCS5mdW5jCQk9IGlweF9yY3YsCiB9OwogCi1zdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGlweF9kaXhfcGFja2V0X3R5cGUgPSB7Ci0JLnR5cGUJCT0gX19jb25zdGFudF9odG9ucyhFVEhfUF9JUFgpLAorc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBpcHhfZGl4X3BhY2tldF90eXBlIF9fcmVhZF9tb3N0bHkgPSB7CisJLnR5cGUJCT0gY3B1X3RvX2JlMTYoRVRIX1BfSVBYKSwKIAkuZnVuYwkJPSBpcHhfcmN2LAogfTsKIApAQCAtMTk3NSwxNSArMTk3NSwxNSBAQAogZXh0ZXJuIHN0cnVjdCBkYXRhbGlua19wcm90byAqbWFrZV9FSUlfY2xpZW50KHZvaWQpOwogZXh0ZXJuIHZvaWQgZGVzdHJveV9FSUlfY2xpZW50KHN0cnVjdCBkYXRhbGlua19wcm90byAqKTsKIAotc3RhdGljIHVuc2lnbmVkIGNoYXIgaXB4XzgwMjJfdHlwZSA9IDB4RTA7Ci1zdGF0aWMgdW5zaWduZWQgY2hhciBpcHhfc25hcF9pZFs1XSA9IHsgMHgwLCAweDAsIDB4MCwgMHg4MSwgMHgzNyB9Owotc3RhdGljIGNoYXIgaXB4X0VJSV9lcnJfbXNnW10gX19pbml0ZGF0YSA9CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBpcHhfODAyMl90eXBlID0gMHhFMDsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGlweF9zbmFwX2lkWzVdID0geyAweDAsIDB4MCwgMHgwLCAweDgxLCAweDM3IH07CitzdGF0aWMgY29uc3QgY2hhciBpcHhfRUlJX2Vycl9tc2dbXSBfX2luaXRjb25zdCA9CiAJS0VSTl9DUklUICJJUFg6IFVuYWJsZSB0byByZWdpc3RlciB3aXRoIEV0aGVybmV0IElJXG4iOwotc3RhdGljIGNoYXIgaXB4XzgwMjNfZXJyX21zZ1tdIF9faW5pdGRhdGEgPQorc3RhdGljIGNvbnN0IGNoYXIgaXB4XzgwMjNfZXJyX21zZ1tdIF9faW5pdGNvbnN0ID0KIAlLRVJOX0NSSVQgIklQWDogVW5hYmxlIHRvIHJlZ2lzdGVyIHdpdGggODAyLjNcbiI7Ci1zdGF0aWMgY2hhciBpcHhfbGxjX2Vycl9tc2dbXSBfX2luaXRkYXRhID0KK3N0YXRpYyBjb25zdCBjaGFyIGlweF9sbGNfZXJyX21zZ1tdIF9faW5pdGNvbnN0ID0KIAlLRVJOX0NSSVQgIklQWDogVW5hYmxlIHRvIHJlZ2lzdGVyIHdpdGggODAyLjJcbiI7Ci1zdGF0aWMgY2hhciBpcHhfc25hcF9lcnJfbXNnW10gX19pbml0ZGF0YSA9CitzdGF0aWMgY29uc3QgY2hhciBpcHhfc25hcF9lcnJfbXNnW10gX19pbml0Y29uc3QgPQogCUtFUk5fQ1JJVCAiSVBYOiBVbmFibGUgdG8gcmVnaXN0ZXIgd2l0aCBTTkFQXG4iOwogCiBzdGF0aWMgaW50IF9faW5pdCBpcHhfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJkYV9kZXZpY2UuYyBiL25ldC9pcmRhL2lyZGFfZGV2aWNlLmMKaW5kZXggZWEzMTllMy4uYmY5MmUxNCAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJkYV9kZXZpY2UuYworKysgYi9uZXQvaXJkYS9pcmRhX2RldmljZS5jCkBAIC0xNDksMTMgKzE0OSwxNCBAQAogCiAJSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19mdW5jX18pOwogCi0JaWYgKCFkZXYtPmRvX2lvY3RsKSB7CisJaWYgKCFkZXYtPm5ldGRldl9vcHMtPm5kb19kb19pb2N0bCkgewogCQlJUkRBX0VSUk9SKCIlczogZG9faW9jdGwgbm90IGltcGwuIGJ5IGRldmljZSBkcml2ZXJcbiIsCiAJCQkgICBfX2Z1bmNfXyk7CiAJCXJldHVybiAtMTsKIAl9CiAKLQlyZXQgPSBkZXYtPmRvX2lvY3RsKGRldiwgKHN0cnVjdCBpZnJlcSAqKSAmcmVxLCBTSU9DR1JFQ0VJVklORyk7CisJcmV0ID0gKGRldi0+bmV0ZGV2X29wcy0+bmRvX2RvX2lvY3RsKShkZXYsIChzdHJ1Y3QgaWZyZXEgKikgJnJlcSwKKwkJCQkJICAgICAgU0lPQ0dSRUNFSVZJTkcpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcmxhbi9pcmxhbl9ldGguYyBiL25ldC9pcmRhL2lybGFuL2lybGFuX2V0aC5jCmluZGV4IDA1MTEyYmUuLjcyNGJjZjkgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lybGFuL2lybGFuX2V0aC5jCisrKyBiL25ldC9pcmRhL2lybGFuL2lybGFuX2V0aC5jCkBAIC00NSw2ICs0NSwxNiBAQAogc3RhdGljIHZvaWQgaXJsYW5fZXRoX3NldF9tdWx0aWNhc3RfbGlzdCggc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmlybGFuX2V0aF9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaXJsYW5fZXRoX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuICAgICAgICAgICAgICAgPSBpcmxhbl9ldGhfb3BlbiwKKwkubmRvX3N0b3AgICAgICAgICAgICAgICA9IGlybGFuX2V0aF9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQgICAgCT0gaXJsYW5fZXRoX3htaXQsCisJLm5kb19nZXRfc3RhdHMJICAgICAgICA9IGlybGFuX2V0aF9nZXRfc3RhdHMsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBpcmxhbl9ldGhfc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIC8qCiAgKiBGdW5jdGlvbiBpcmxhbl9ldGhfc2V0dXAgKGRldikKICAqCkBAIC01MywxNCArNjMsMTEgQEAKICAqLwogc3RhdGljIHZvaWQgaXJsYW5fZXRoX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0JZGV2LT5vcGVuICAgICAgICAgICAgICAgPSBpcmxhbl9ldGhfb3BlbjsKLQlkZXYtPnN0b3AgICAgICAgICAgICAgICA9IGlybGFuX2V0aF9jbG9zZTsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCAgICA9IGlybGFuX2V0aF94bWl0OwotCWRldi0+Z2V0X3N0YXRzCSAgICAgICAgPSBpcmxhbl9ldGhfZ2V0X3N0YXRzOwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gaXJsYW5fZXRoX3NldF9tdWx0aWNhc3RfbGlzdDsKKwlldGhlcl9zZXR1cChkZXYpOworCisJZGV2LT5uZXRkZXZfb3BzCQk9ICZpcmxhbl9ldGhfbmV0ZGV2X29wczsKIAlkZXYtPmRlc3RydWN0b3IJCT0gZnJlZV9uZXRkZXY7CiAKLQlldGhlcl9zZXR1cChkZXYpOwogCiAJLyoKIAkgKiBMZXRzIGRvIGFsbCBxdWV1ZWluZyBpbiBJclRUUCBpbnN0ZWFkIG9mIHRoaXMgZGV2aWNlIGRyaXZlci4KZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lybW9kLmMgYi9uZXQvaXJkYS9pcm1vZC5jCmluZGV4IDRjNDg3YTguLjMwM2E2OGQgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lybW9kLmMKKysrIGIvbmV0L2lyZGEvaXJtb2QuYwpAQCAtNTUsOCArNTUsOCBAQAogLyogUGFja2V0IHR5cGUgaGFuZGxlci4KICAqIFRlbGwgdGhlIGtlcm5lbCBob3cgSXJEQSBwYWNrZXRzIHNob3VsZCBiZSBoYW5kbGVkLgogICovCi1zdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGlyZGFfcGFja2V0X3R5cGUgPSB7Ci0JLnR5cGUJPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lSREEpLAorc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBpcmRhX3BhY2tldF90eXBlIF9fcmVhZF9tb3N0bHkgPSB7CisJLnR5cGUJPSBjcHVfdG9fYmUxNihFVEhfUF9JUkRBKSwKIAkuZnVuYwk9IGlybGFwX2RyaXZlcl9yY3YsCS8qIFBhY2tldCB0eXBlIGhhbmRsZXIgaXJsYXBfZnJhbWUuYyAqLwogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L2l1Y3YvYWZfaXVjdi5jIGIvbmV0L2l1Y3YvYWZfaXVjdi5jCmluZGV4IGViOGEyYTAuLjQ5ZTc4NjUgMTAwNjQ0Ci0tLSBhL25ldC9pdWN2L2FmX2l1Y3YuYworKysgYi9uZXQvaXVjdi9hZl9pdWN2LmMKQEAgLTExNzEsOCArMTE3MSw3IEBACiAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGlzdC0+bG9jaywgZmxhZ3MpOwogCi0JCWlmICh0aGlzKQotCQkJa2ZyZWVfc2tiKHRoaXMpOworCQlrZnJlZV9za2IodGhpcyk7CiAJfQogCUJVR19PTighdGhpcyk7CiAKZGlmZiAtLWdpdCBhL25ldC9rZXkvYWZfa2V5LmMgYi9uZXQva2V5L2FmX2tleS5jCmluZGV4IDdkY2JkZTMuLjY0M2MxYmUgMTAwNjQ0Ci0tLSBhL25ldC9rZXkvYWZfa2V5LmMKKysrIGIvbmV0L2tleS9hZl9rZXkuYwpAQCAtMzEzLDggKzMxMyw3IEBACiAJaWYgKG9uZV9zayAhPSBOVUxMKQogCQllcnIgPSBwZmtleV9icm9hZGNhc3Rfb25lKHNrYiwgJnNrYjIsIGFsbG9jYXRpb24sIG9uZV9zayk7CiAKLQlpZiAoc2tiMikKLQkJa2ZyZWVfc2tiKHNrYjIpOworCWtmcmVlX3NrYihza2IyKTsKIAlrZnJlZV9za2Ioc2tiKTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtMzU3Myw4ICszNTcyLDcgQEAKIG91dDoKIAlpZiAoZXJyICYmIGhkciAmJiBwZmtleV9lcnJvcihoZHIsIGVyciwgc2spID09IDApCiAJCWVyciA9IDA7Ci0JaWYgKHNrYikKLQkJa2ZyZWVfc2tiKHNrYik7CisJa2ZyZWVfc2tiKHNrYik7CiAKIAlyZXR1cm4gZXJyID8gOiBsZW47CiB9CmRpZmYgLS1naXQgYS9uZXQvbGxjL2FmX2xsYy5jIGIvbmV0L2xsYy9hZl9sbGMuYwppbmRleCA1NmZkODVhLi5mZWJhZTcwIDEwMDY0NAotLS0gYS9uZXQvbGxjL2FmX2xsYy5jCisrKyBiL25ldC9sbGMvYWZfbGxjLmMKQEAgLTExMTgsMTEgKzExMTgsMTEgQEAKIAkuc2VuZHBhZ2UgICAgPSBzb2NrX25vX3NlbmRwYWdlLAogfTsKIAotc3RhdGljIGNoYXIgbGxjX3Byb2NfZXJyX21zZ1tdIF9faW5pdGRhdGEgPQorc3RhdGljIGNvbnN0IGNoYXIgbGxjX3Byb2NfZXJyX21zZ1tdIF9faW5pdGNvbnN0ID0KIAlLRVJOX0NSSVQgIkxMQzogVW5hYmxlIHRvIHJlZ2lzdGVyIHRoZSBwcm9jX2ZzIGVudHJpZXNcbiI7Ci1zdGF0aWMgY2hhciBsbGNfc3lzY3RsX2Vycl9tc2dbXSBfX2luaXRkYXRhID0KK3N0YXRpYyBjb25zdCBjaGFyIGxsY19zeXNjdGxfZXJyX21zZ1tdIF9faW5pdGNvbnN0ID0KIAlLRVJOX0NSSVQgIkxMQzogVW5hYmxlIHRvIHJlZ2lzdGVyIHRoZSBzeXNjdGwgZW50cmllc1xuIjsKLXN0YXRpYyBjaGFyIGxsY19zb2NrX2Vycl9tc2dbXSBfX2luaXRkYXRhID0KK3N0YXRpYyBjb25zdCBjaGFyIGxsY19zb2NrX2Vycl9tc2dbXSBfX2luaXRjb25zdCA9CiAJS0VSTl9DUklUICJMTEM6IFVuYWJsZSB0byByZWdpc3RlciB0aGUgbmV0d29yayBmYW1pbHlcbiI7CiAKIHN0YXRpYyBpbnQgX19pbml0IGxsYzJfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvbmV0L2xsYy9sbGNfY29ubi5jIGIvbmV0L2xsYy9sbGNfY29ubi5jCmluZGV4IDVjNmQ4OWMuLjM0Nzc2MjQgMTAwNjQ0Ci0tLSBhL25ldC9sbGMvbGxjX2Nvbm4uYworKysgYi9uZXQvbGxjL2xsY19jb25uLmMKQEAgLTMzMiw4ICszMzIsNyBAQAogCiAJZm9yIChpID0gMDsgaSA8IHBkdV9wb3MgJiYgaSA8IHFfbGVuOyBpKyspIHsKIAkJc2tiID0gc2tiX2RlcXVldWUoJmxsYy0+cGR1X3VuYWNrX3EpOwotCQlpZiAoc2tiKQotCQkJa2ZyZWVfc2tiKHNrYik7CisJCWtmcmVlX3NrYihza2IpOwogCQluYnJfYWNrZWQrKzsKIAl9CiBvdXQ6CmRpZmYgLS1naXQgYS9uZXQvbGxjL2xsY19jb3JlLmMgYi9uZXQvbGxjL2xsY19jb3JlLmMKaW5kZXggNTBkNWIxMC4uZmY0YzBhYiAxMDA2NDQKLS0tIGEvbmV0L2xsYy9sbGNfY29yZS5jCisrKyBiL25ldC9sbGMvbGxjX2NvcmUuYwpAQCAtMTQ3LDEzICsxNDcsMTMgQEAKIAlrZnJlZShzYXApOwogfQogCi1zdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGxsY19wYWNrZXRfdHlwZSA9IHsKLQkudHlwZSA9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfODAyXzIpLAorc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBsbGNfcGFja2V0X3R5cGUgX19yZWFkX21vc3RseSA9IHsKKwkudHlwZSA9IGNwdV90b19iZTE2KEVUSF9QXzgwMl8yKSwKIAkuZnVuYyA9IGxsY19yY3YsCiB9OwogCi1zdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGxsY190cl9wYWNrZXRfdHlwZSA9IHsKLQkudHlwZSA9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfVFJfODAyXzIpLAorc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBsbGNfdHJfcGFja2V0X3R5cGUgX19yZWFkX21vc3RseSA9IHsKKwkudHlwZSA9IGNwdV90b19iZTE2KEVUSF9QX1RSXzgwMl8yKSwKIAkuZnVuYyA9IGxsY19yY3YsCiB9OwogCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvTWFrZWZpbGUgYi9uZXQvbWFjODAyMTEvTWFrZWZpbGUKaW5kZXggN2Q0OTcxYS4uMGUzYWI4OCAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL01ha2VmaWxlCisrKyBiL25ldC9tYWM4MDIxMS9NYWtlZmlsZQpAQCAtOCwxMyArOCwxNSBAQAogCXdlcC5vIFwKIAl3cGEubyBcCiAJc2Nhbi5vIFwKLQlodC5vIFwKKwlodC5vIGFnZy10eC5vIGFnZy1yeC5vIFwKKwlpYnNzLm8gXAogCW1sbWUubyBcCiAJaWZhY2UubyBcCiAJcmF0ZS5vIFwKIAltaWNoYWVsLm8gXAogCXRraXAubyBcCiAJYWVzX2NjbS5vIFwKKwlhZXNfY21hYy5vIFwKIAljZmcubyBcCiAJcngubyBcCiAJc3BlY3RtZ210Lm8gXApAQCAtMzcsNiArMzksOCBAQAogCW1lc2hfcGxpbmsubyBcCiAJbWVzaF9od21wLm8KIAorbWFjODAyMTEtJChDT05GSUdfUE0pICs9IHBtLm8KKwogIyBvYmplY3RzIGZvciBQSUQgYWxnb3JpdGhtCiByYzgwMjExX3BpZC15IDo9IHJjODAyMTFfcGlkX2FsZ28ubwogcmM4MDIxMV9waWQtJChDT05GSUdfTUFDODAyMTFfREVCVUdGUykgKz0gcmM4MDIxMV9waWRfZGVidWdmcy5vCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvYWVzX2NtYWMuYyBiL25ldC9tYWM4MDIxMS9hZXNfY21hYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkMDk3YjMKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvbWFjODAyMTEvYWVzX2NtYWMuYwpAQCAtMCwwICsxLDEzNSBAQAorLyoKKyAqIEFFUy0xMjgtQ01BQyB3aXRoIFRMZW4gMTYgZm9yIElFRUUgODAyLjExdyBCSVAKKyAqIENvcHlyaWdodCAyMDA4LCBKb3VuaSBNYWxpbmVuIDxqQHcxLmZpPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisKKyNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KKyNpbmNsdWRlICJrZXkuaCIKKyNpbmNsdWRlICJhZXNfY21hYy5oIgorCisjZGVmaW5lIEFFU19CTE9DS19TSVpFIDE2CisjZGVmaW5lIEFFU19DTUFDX0tFWV9MRU4gMTYKKyNkZWZpbmUgQ01BQ19UTEVOIDggLyogQ01BQyBUTGVuID0gNjQgYml0cyAoOCBvY3RldHMpICovCisjZGVmaW5lIEFBRF9MRU4gMjAKKworCitzdGF0aWMgdm9pZCBnZl9tdWx4KHU4ICpwYWQpCit7CisJaW50IGksIGNhcnJ5OworCisJY2FycnkgPSBwYWRbMF0gJiAweDgwOworCWZvciAoaSA9IDA7IGkgPCBBRVNfQkxPQ0tfU0laRSAtIDE7IGkrKykKKwkJcGFkW2ldID0gKHBhZFtpXSA8PCAxKSB8IChwYWRbaSArIDFdID4+IDcpOworCXBhZFtBRVNfQkxPQ0tfU0laRSAtIDFdIDw8PSAxOworCWlmIChjYXJyeSkKKwkJcGFkW0FFU19CTE9DS19TSVpFIC0gMV0gXj0gMHg4NzsKK30KKworCitzdGF0aWMgdm9pZCBhZXNfMTI4X2NtYWNfdmVjdG9yKHN0cnVjdCBjcnlwdG9fY2lwaGVyICp0Zm0sIHU4ICpzY3JhdGNoLAorCQkJCXNpemVfdCBudW1fZWxlbSwKKwkJCQljb25zdCB1OCAqYWRkcltdLCBjb25zdCBzaXplX3QgKmxlbiwgdTggKm1hYykKK3sKKwl1OCAqY2JjLCAqcGFkOworCWNvbnN0IHU4ICpwb3MsICplbmQ7CisJc2l6ZV90IGksIGUsIGxlZnQsIHRvdGFsX2xlbjsKKworCWNiYyA9IHNjcmF0Y2g7CisJcGFkID0gc2NyYXRjaCArIEFFU19CTE9DS19TSVpFOworCisJbWVtc2V0KGNiYywgMCwgQUVTX0JMT0NLX1NJWkUpOworCisJdG90YWxfbGVuID0gMDsKKwlmb3IgKGUgPSAwOyBlIDwgbnVtX2VsZW07IGUrKykKKwkJdG90YWxfbGVuICs9IGxlbltlXTsKKwlsZWZ0ID0gdG90YWxfbGVuOworCisJZSA9IDA7CisJcG9zID0gYWRkclswXTsKKwllbmQgPSBwb3MgKyBsZW5bMF07CisKKwl3aGlsZSAobGVmdCA+PSBBRVNfQkxPQ0tfU0laRSkgeworCQlmb3IgKGkgPSAwOyBpIDwgQUVTX0JMT0NLX1NJWkU7IGkrKykgeworCQkJY2JjW2ldIF49ICpwb3MrKzsKKwkJCWlmIChwb3MgPj0gZW5kKSB7CisJCQkJZSsrOworCQkJCXBvcyA9IGFkZHJbZV07CisJCQkJZW5kID0gcG9zICsgbGVuW2VdOworCQkJfQorCQl9CisJCWlmIChsZWZ0ID4gQUVTX0JMT0NLX1NJWkUpCisJCQljcnlwdG9fY2lwaGVyX2VuY3J5cHRfb25lKHRmbSwgY2JjLCBjYmMpOworCQlsZWZ0IC09IEFFU19CTE9DS19TSVpFOworCX0KKworCW1lbXNldChwYWQsIDAsIEFFU19CTE9DS19TSVpFKTsKKwljcnlwdG9fY2lwaGVyX2VuY3J5cHRfb25lKHRmbSwgcGFkLCBwYWQpOworCWdmX211bHgocGFkKTsKKworCWlmIChsZWZ0IHx8IHRvdGFsX2xlbiA9PSAwKSB7CisJCWZvciAoaSA9IDA7IGkgPCBsZWZ0OyBpKyspIHsKKwkJCWNiY1tpXSBePSAqcG9zKys7CisJCQlpZiAocG9zID49IGVuZCkgeworCQkJCWUrKzsKKwkJCQlwb3MgPSBhZGRyW2VdOworCQkJCWVuZCA9IHBvcyArIGxlbltlXTsKKwkJCX0KKwkJfQorCQljYmNbbGVmdF0gXj0gMHg4MDsKKwkJZ2ZfbXVseChwYWQpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBBRVNfQkxPQ0tfU0laRTsgaSsrKQorCQlwYWRbaV0gXj0gY2JjW2ldOworCWNyeXB0b19jaXBoZXJfZW5jcnlwdF9vbmUodGZtLCBwYWQsIHBhZCk7CisJbWVtY3B5KG1hYywgcGFkLCBDTUFDX1RMRU4pOworfQorCisKK3ZvaWQgaWVlZTgwMjExX2Flc19jbWFjKHN0cnVjdCBjcnlwdG9fY2lwaGVyICp0Zm0sIHU4ICpzY3JhdGNoLCBjb25zdCB1OCAqYWFkLAorCQkJY29uc3QgdTggKmRhdGEsIHNpemVfdCBkYXRhX2xlbiwgdTggKm1pYykKK3sKKwljb25zdCB1OCAqYWRkclszXTsKKwlzaXplX3QgbGVuWzNdOworCXU4IHplcm9bQ01BQ19UTEVOXTsKKworCW1lbXNldCh6ZXJvLCAwLCBDTUFDX1RMRU4pOworCWFkZHJbMF0gPSBhYWQ7CisJbGVuWzBdID0gQUFEX0xFTjsKKwlhZGRyWzFdID0gZGF0YTsKKwlsZW5bMV0gPSBkYXRhX2xlbiAtIENNQUNfVExFTjsKKwlhZGRyWzJdID0gemVybzsKKwlsZW5bMl0gPSBDTUFDX1RMRU47CisKKwlhZXNfMTI4X2NtYWNfdmVjdG9yKHRmbSwgc2NyYXRjaCwgMywgYWRkciwgbGVuLCBtaWMpOworfQorCisKK3N0cnVjdCBjcnlwdG9fY2lwaGVyICogaWVlZTgwMjExX2Flc19jbWFjX2tleV9zZXR1cChjb25zdCB1OCBrZXlbXSkKK3sKKwlzdHJ1Y3QgY3J5cHRvX2NpcGhlciAqdGZtOworCisJdGZtID0gY3J5cHRvX2FsbG9jX2NpcGhlcigiYWVzIiwgMCwgQ1JZUFRPX0FMR19BU1lOQyk7CisJaWYgKElTX0VSUih0Zm0pKQorCQlyZXR1cm4gTlVMTDsKKworCWNyeXB0b19jaXBoZXJfc2V0a2V5KHRmbSwga2V5LCBBRVNfQ01BQ19LRVlfTEVOKTsKKworCXJldHVybiB0Zm07Cit9CisKKwordm9pZCBpZWVlODAyMTFfYWVzX2NtYWNfa2V5X2ZyZWUoc3RydWN0IGNyeXB0b19jaXBoZXIgKnRmbSkKK3sKKwlpZiAodGZtKQorCQljcnlwdG9fZnJlZV9jaXBoZXIodGZtKTsKK30KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9hZXNfY21hYy5oIGIvbmV0L21hYzgwMjExL2Flc19jbWFjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGViOWE0OAotLS0gL2Rldi9udWxsCisrKyBiL25ldC9tYWM4MDIxMS9hZXNfY21hYy5oCkBAIC0wLDAgKzEsMTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOCwgSm91bmkgTWFsaW5lbiA8akB3MS5maT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgQUVTX0NNQUNfSAorI2RlZmluZSBBRVNfQ01BQ19ICisKKyNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KKworc3RydWN0IGNyeXB0b19jaXBoZXIgKiBpZWVlODAyMTFfYWVzX2NtYWNfa2V5X3NldHVwKGNvbnN0IHU4IGtleVtdKTsKK3ZvaWQgaWVlZTgwMjExX2Flc19jbWFjKHN0cnVjdCBjcnlwdG9fY2lwaGVyICp0Zm0sIHU4ICpzY3JhdGNoLCBjb25zdCB1OCAqYWFkLAorCQkJY29uc3QgdTggKmRhdGEsIHNpemVfdCBkYXRhX2xlbiwgdTggKm1pYyk7Cit2b2lkIGllZWU4MDIxMV9hZXNfY21hY19rZXlfZnJlZShzdHJ1Y3QgY3J5cHRvX2NpcGhlciAqdGZtKTsKKworI2VuZGlmIC8qIEFFU19DTUFDX0ggKi8KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9hZ2ctcnguYyBiL25ldC9tYWM4MDIxMS9hZ2ctcnguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTVhZmZjCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L21hYzgwMjExL2FnZy1yeC5jCkBAIC0wLDAgKzEsMzAyIEBACisvKgorICogSFQgaGFuZGxpbmcKKyAqCisgKiBDb3B5cmlnaHQgMjAwMywgSm91bmkgTWFsaW5lbiA8amttYWxpbmVAY2MuaHV0LmZpPgorICogQ29weXJpZ2h0IDIwMDItMjAwNSwgSW5zdGFudDgwMiBOZXR3b3JrcywgSW5jLgorICogQ29weXJpZ2h0IDIwMDUtMjAwNiwgRGV2aWNlc2NhcGUgU29mdHdhcmUsIEluYy4KKyAqIENvcHlyaWdodCAyMDA2LTIwMDcJSmlyaSBCZW5jIDxqYmVuY0BzdXNlLmN6PgorICogQ29weXJpZ2h0IDIwMDcsIE1pY2hhZWwgV3UgPGZsYW1pbmdpY2VAc291cm1pbGsubmV0PgorICogQ29weXJpZ2h0IDIwMDctMjAwOCwgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pZWVlODAyMTEuaD4KKyNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KKyNpbmNsdWRlICJpZWVlODAyMTFfaS5oIgorCit2b2lkIF9faWVlZTgwMjExX3N0b3BfcnhfYmFfc2Vzc2lvbihzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgdTE2IHRpZCwKKwkJCQkgICAgdTE2IGluaXRpYXRvciwgdTE2IHJlYXNvbikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHN0YS0+bG9jYWw7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSAmbG9jYWwtPmh3OworCWludCBpOworCisJLyogY2hlY2sgaWYgVElEIGlzIGluIG9wZXJhdGlvbmFsIHN0YXRlICovCisJc3Bpbl9sb2NrX2JoKCZzdGEtPmxvY2spOworCWlmIChzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3J4W3RpZF0gIT0gSFRfQUdHX1NUQVRFX09QRVJBVElPTkFMKSB7CisJCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOworCQlyZXR1cm47CisJfQorCisJc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV9yeFt0aWRdID0KKwkJSFRfQUdHX1NUQVRFX1JFUV9TVE9QX0JBX01TSyB8CisJCShpbml0aWF0b3IgPDwgSFRfQUdHX1NUQVRFX0lOSVRJQVRPUl9TSElGVCk7CisJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CisKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKKwlwcmludGsoS0VSTl9ERUJVRyAiUnggQkEgc2Vzc2lvbiBzdG9wIHJlcXVlc3RlZCBmb3IgJXBNIHRpZCAldVxuIiwKKwkgICAgICAgc3RhLT5zdGEuYWRkciwgdGlkKTsKKyNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcgKi8KKworCWlmIChsb2NhbC0+b3BzLT5hbXBkdV9hY3Rpb24oaHcsIElFRUU4MDIxMV9BTVBEVV9SWF9TVE9QLAorCQkJCSAgICAgJnN0YS0+c3RhLCB0aWQsIE5VTEwpKQorCQlwcmludGsoS0VSTl9ERUJVRyAiSFcgcHJvYmxlbSAtIGNhbiBub3Qgc3RvcCByeCAiCisJCQkJImFnZ3JlZ2F0aW9uIGZvciB0aWQgJWRcbiIsIHRpZCk7CisKKwkvKiBzaHV0ZG93biB0aW1lciBoYXMgbm90IGV4cGlyZWQgKi8KKwlpZiAoaW5pdGlhdG9yICE9IFdMQU5fQkFDS19USU1FUikKKwkJZGVsX3RpbWVyX3N5bmMoJnN0YS0+YW1wZHVfbWxtZS50aWRfcnhbdGlkXS0+c2Vzc2lvbl90aW1lcik7CisKKwkvKiBjaGVjayBpZiB0aGlzIGlzIGEgc2VsZiBnZW5lcmF0ZWQgYWdncmVnYXRpb24gaGFsdCAqLworCWlmIChpbml0aWF0b3IgPT0gV0xBTl9CQUNLX1JFQ0lQSUVOVCB8fCBpbml0aWF0b3IgPT0gV0xBTl9CQUNLX1RJTUVSKQorCQlpZWVlODAyMTFfc2VuZF9kZWxiYShzdGEtPnNkYXRhLCBzdGEtPnN0YS5hZGRyLAorCQkJCSAgICAgdGlkLCAwLCByZWFzb24pOworCisJLyogZnJlZSB0aGUgcmVvcmRlcmluZyBidWZmZXIgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdLT5idWZfc2l6ZTsgaSsrKSB7CisJCWlmIChzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF0tPnJlb3JkZXJfYnVmW2ldKSB7CisJCQkvKiByZWxlYXNlIHRoZSByZW9yZGVyZWQgZnJhbWVzICovCisJCQlkZXZfa2ZyZWVfc2tiKHN0YS0+YW1wZHVfbWxtZS50aWRfcnhbdGlkXS0+cmVvcmRlcl9idWZbaV0pOworCQkJc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdLT5zdG9yZWRfbXBkdV9udW0tLTsKKwkJCXN0YS0+YW1wZHVfbWxtZS50aWRfcnhbdGlkXS0+cmVvcmRlcl9idWZbaV0gPSBOVUxMOworCQl9CisJfQorCisJc3Bpbl9sb2NrX2JoKCZzdGEtPmxvY2spOworCS8qIGZyZWUgcmVzb3VyY2VzICovCisJa2ZyZWUoc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdLT5yZW9yZGVyX2J1Zik7CisKKwlpZiAoIXN0YS0+YW1wZHVfbWxtZS50aWRfcnhbdGlkXS0+c2h1dGRvd24pIHsKKwkJa2ZyZWUoc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdKTsKKwkJc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdID0gTlVMTDsKKwl9CisKKwlzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3J4W3RpZF0gPSBIVF9BR0dfU1RBVEVfSURMRTsKKwlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKK30KKwordm9pZCBpZWVlODAyMTFfc3RhX3N0b3BfcnhfYmFfc2Vzc2lvbihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgdTggKnJhLCB1MTYgdGlkLAorCQkJCQl1MTYgaW5pdGlhdG9yLCB1MTYgcmVhc29uKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOworCXN0cnVjdCBzdGFfaW5mbyAqc3RhOworCisJLyogc3RvcCBIVyBSeCBhZ2dyZWdhdGlvbi4gYW1wZHVfYWN0aW9uIGV4aXN0ZW5jZQorCSAqIGFscmVhZHkgdmVyaWZpZWQgaW4gc2Vzc2lvbiBpbml0IHNvIHdlIGFkZCB0aGUgQlVHX09OICovCisJQlVHX09OKCFsb2NhbC0+b3BzLT5hbXBkdV9hY3Rpb24pOworCisJcmN1X3JlYWRfbG9jaygpOworCisJc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCByYSk7CisJaWYgKCFzdGEpIHsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCXJldHVybjsKKwl9CisKKwlfX2llZWU4MDIxMV9zdG9wX3J4X2JhX3Nlc3Npb24oc3RhLCB0aWQsIGluaXRpYXRvciwgcmVhc29uKTsKKworCXJjdV9yZWFkX3VubG9jaygpOworfQorCisvKgorICogQWZ0ZXIgYWNjZXB0aW5nIHRoZSBBZGRCQSBSZXF1ZXN0IHdlIGFjdGl2YXRlZCBhIHRpbWVyLAorICogcmVzZXR0aW5nIGl0IGFmdGVyIGVhY2ggZnJhbWUgdGhhdCBhcnJpdmVzIGZyb20gdGhlIG9yaWdpbmF0b3IuCisgKiBpZiB0aGlzIHRpbWVyIGV4cGlyZXMgaWVlZTgwMjExX3N0YV9zdG9wX3J4X2JhX3Nlc3Npb24gd2lsbCBiZSBleGVjdXRlZC4KKyAqLworc3RhdGljIHZvaWQgc3RhX3J4X2FnZ19zZXNzaW9uX3RpbWVyX2V4cGlyZWQodW5zaWduZWQgbG9uZyBkYXRhKQoreworCS8qIG5vdCBhbiBlbGVnYW50IGRldG91ciwgYnV0IHRoZXJlIGlzIG5vIGNob2ljZSBhcyB0aGUgdGltZXIgcGFzc2VzCisJICogb25seSBvbmUgYXJndW1lbnQsIGFuZCB2YXJpb3VzIHN0YV9pbmZvIGFyZSBuZWVkZWQgaGVyZSwgc28gaW5pdAorCSAqIGZsb3cgaW4gc3RhX2luZm9fY3JlYXRlIGdpdmVzIHRoZSBUSUQgYXMgZGF0YSwgd2hpbGUgdGhlIHRpbWVyX3RvX2lkCisJICogYXJyYXkgZ2l2ZXMgdGhlIHN0YSB0aHJvdWdoIGNvbnRhaW5lcl9vZiAqLworCXU4ICpwdGlkID0gKHU4ICopZGF0YTsKKwl1OCAqdGltZXJfdG9faWQgPSBwdGlkIC0gKnB0aWQ7CisJc3RydWN0IHN0YV9pbmZvICpzdGEgPSBjb250YWluZXJfb2YodGltZXJfdG9faWQsIHN0cnVjdCBzdGFfaW5mbywKKwkJCQkJIHRpbWVyX3RvX3RpZFswXSk7CisKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKKwlwcmludGsoS0VSTl9ERUJVRyAicnggc2Vzc2lvbiB0aW1lciBleHBpcmVkIG9uIHRpZCAlZFxuIiwgKHUxNikqcHRpZCk7CisjZW5kaWYKKwlpZWVlODAyMTFfc3RhX3N0b3BfcnhfYmFfc2Vzc2lvbihzdGEtPnNkYXRhLCBzdGEtPnN0YS5hZGRyLAorCQkJCQkgKHUxNikqcHRpZCwgV0xBTl9CQUNLX1RJTUVSLAorCQkJCQkgV0xBTl9SRUFTT05fUVNUQV9USU1FT1VUKTsKK30KKworc3RhdGljIHZvaWQgaWVlZTgwMjExX3NlbmRfYWRkYmFfcmVzcChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgdTggKmRhLCB1MTYgdGlkLAorCQkJCSAgICAgIHU4IGRpYWxvZ190b2tlbiwgdTE2IHN0YXR1cywgdTE2IHBvbGljeSwKKwkJCQkgICAgICB1MTYgYnVmX3NpemUsIHUxNiB0aW1lb3V0KQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OworCXUxNiBjYXBhYjsKKworCXNrYiA9IGRldl9hbGxvY19za2Ioc2l6ZW9mKCptZ210KSArIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7CisKKwlpZiAoIXNrYikgeworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBidWZmZXIgIgorCQkgICAgICAgImZvciBhZGRiYSByZXNwIGZyYW1lXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKKwkJcmV0dXJuOworCX0KKworCXNrYl9yZXNlcnZlKHNrYiwgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tKTsKKwltZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSBza2JfcHV0KHNrYiwgMjQpOworCW1lbXNldChtZ210LCAwLCAyNCk7CisJbWVtY3B5KG1nbXQtPmRhLCBkYSwgRVRIX0FMRU4pOworCW1lbWNweShtZ210LT5zYSwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQIHx8CisJICAgIHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOKQorCQltZW1jcHkobWdtdC0+YnNzaWQsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJZWxzZSBpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCisJCW1lbWNweShtZ210LT5ic3NpZCwgc2RhdGEtPnUubWdkLmJzc2lkLCBFVEhfQUxFTik7CisKKwltZ210LT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfAorCQkJCQkgIElFRUU4MDIxMV9TVFlQRV9BQ1RJT04pOworCisJc2tiX3B1dChza2IsIDEgKyBzaXplb2YobWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXNwKSk7CisJbWdtdC0+dS5hY3Rpb24uY2F0ZWdvcnkgPSBXTEFOX0NBVEVHT1JZX0JBQ0s7CisJbWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXNwLmFjdGlvbl9jb2RlID0gV0xBTl9BQ1RJT05fQUREQkFfUkVTUDsKKwltZ210LT51LmFjdGlvbi51LmFkZGJhX3Jlc3AuZGlhbG9nX3Rva2VuID0gZGlhbG9nX3Rva2VuOworCisJY2FwYWIgPSAodTE2KShwb2xpY3kgPDwgMSk7CS8qIGJpdCAxIGFnZ3JlZ2F0aW9uIHBvbGljeSAqLworCWNhcGFiIHw9ICh1MTYpKHRpZCA8PCAyKTsgCS8qIGJpdCA1OjIgVElEIG51bWJlciAqLworCWNhcGFiIHw9ICh1MTYpKGJ1Zl9zaXplIDw8IDYpOwkvKiBiaXQgMTU6NiBtYXggc2l6ZSBvZiBhZ2dyZWdhdGlvbiAqLworCisJbWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXNwLmNhcGFiID0gY3B1X3RvX2xlMTYoY2FwYWIpOworCW1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVzcC50aW1lb3V0ID0gY3B1X3RvX2xlMTYodGltZW91dCk7CisJbWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXNwLnN0YXR1cyA9IGNwdV90b19sZTE2KHN0YXR1cyk7CisKKwlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IsIDEpOworfQorCit2b2lkIGllZWU4MDIxMV9wcm9jZXNzX2FkZGJhX3JlcXVlc3Qoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCQkJICAgICBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwKKwkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwKKwkJCQkgICAgIHNpemVfdCBsZW4pCit7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSAmbG9jYWwtPmh3OworCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9ICZody0+Y29uZjsKKwlzdHJ1Y3QgdGlkX2FtcGR1X3J4ICp0aWRfYWdnX3J4OworCXUxNiBjYXBhYiwgdGlkLCB0aW1lb3V0LCBiYV9wb2xpY3ksIGJ1Zl9zaXplLCBzdGFydF9zZXFfbnVtLCBzdGF0dXM7CisJdTggZGlhbG9nX3Rva2VuOworCWludCByZXQgPSAtRU9QTk9UU1VQUDsKKworCS8qIGV4dHJhY3Qgc2Vzc2lvbiBwYXJhbWV0ZXJzIGZyb20gYWRkYmEgcmVxdWVzdCBmcmFtZSAqLworCWRpYWxvZ190b2tlbiA9IG1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVxLmRpYWxvZ190b2tlbjsKKwl0aW1lb3V0ID0gbGUxNl90b19jcHUobWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXEudGltZW91dCk7CisJc3RhcnRfc2VxX251bSA9CisJCWxlMTZfdG9fY3B1KG1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVxLnN0YXJ0X3NlcV9udW0pID4+IDQ7CisKKwljYXBhYiA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVxLmNhcGFiKTsKKwliYV9wb2xpY3kgPSAoY2FwYWIgJiBJRUVFODAyMTFfQUREQkFfUEFSQU1fUE9MSUNZX01BU0spID4+IDE7CisJdGlkID0gKGNhcGFiICYgSUVFRTgwMjExX0FEREJBX1BBUkFNX1RJRF9NQVNLKSA+PiAyOworCWJ1Zl9zaXplID0gKGNhcGFiICYgSUVFRTgwMjExX0FEREJBX1BBUkFNX0JVRl9TSVpFX01BU0spID4+IDY7CisKKwlzdGF0dXMgPSBXTEFOX1NUQVRVU19SRVFVRVNUX0RFQ0xJTkVEOworCisJLyogc2FuaXR5IGNoZWNrIGZvciBpbmNvbWluZyBwYXJhbWV0ZXJzOgorCSAqIGNoZWNrIGlmIGNvbmZpZ3VyYXRpb24gY2FuIHN1cHBvcnQgdGhlIEJBIHBvbGljeQorCSAqIGFuZCBpZiBidWZmZXIgc2l6ZSBkb2VzIG5vdCBleGNlZWRzIG1heCB2YWx1ZSAqLworCS8qIFhYWDogY2hlY2sgb3duIGh0IGRlbGF5ZWQgQkEgY2FwYWJpbGl0eT8/ICovCisJaWYgKCgoYmFfcG9saWN5ICE9IDEpCisJCSYmICghKHN0YS0+c3RhLmh0X2NhcC5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX0RFTEFZX0JBKSkpCisJCXx8IChidWZfc2l6ZSA+IElFRUU4MDIxMV9NQVhfQU1QRFVfQlVGKSkgeworCQlzdGF0dXMgPSBXTEFOX1NUQVRVU19JTlZBTElEX1FPU19QQVJBTTsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKKwkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCXByaW50ayhLRVJOX0RFQlVHICJBZGRCQSBSZXEgd2l0aCBiYWQgcGFyYW1zIGZyb20gIgorCQkJCSIlcE0gb24gdGlkICV1LiBwb2xpY3kgJWQsIGJ1ZmZlciBzaXplICVkXG4iLAorCQkJCW1nbXQtPnNhLCB0aWQsIGJhX3BvbGljeSwKKwkJCQlidWZfc2l6ZSk7CisjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0hUX0RFQlVHICovCisJCWdvdG8gZW5kX25vX2xvY2s7CisJfQorCS8qIGRldGVybWluZSBkZWZhdWx0IGJ1ZmZlciBzaXplICovCisJaWYgKGJ1Zl9zaXplID09IDApIHsKKwkJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CisKKwkJc2JhbmQgPSBsb2NhbC0+aHcud2lwaHktPmJhbmRzW2NvbmYtPmNoYW5uZWwtPmJhbmRdOworCQlidWZfc2l6ZSA9IElFRUU4MDIxMV9NSU5fQU1QRFVfQlVGOworCQlidWZfc2l6ZSA9IGJ1Zl9zaXplIDw8IHNiYW5kLT5odF9jYXAuYW1wZHVfZmFjdG9yOworCX0KKworCisJLyogZXhhbWluZSBzdGF0ZSBtYWNoaW5lICovCisJc3Bpbl9sb2NrX2JoKCZzdGEtPmxvY2spOworCisJaWYgKHN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfcnhbdGlkXSAhPSBIVF9BR0dfU1RBVEVfSURMRSkgeworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRworCQlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQkJcHJpbnRrKEtFUk5fREVCVUcgInVuZXhwZWN0ZWQgQWRkQkEgUmVxIGZyb20gIgorCQkJCSIlcE0gb24gdGlkICV1XG4iLAorCQkJCW1nbXQtPnNhLCB0aWQpOworI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRyAqLworCQlnb3RvIGVuZDsKKwl9CisKKwkvKiBwcmVwYXJlIEEtTVBEVSBNTE1FIGZvciBSeCBhZ2dyZWdhdGlvbiAqLworCXN0YS0+YW1wZHVfbWxtZS50aWRfcnhbdGlkXSA9CisJCQlrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdGlkX2FtcGR1X3J4KSwgR0ZQX0FUT01JQyk7CisJaWYgKCFzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF0pIHsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKKwkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCXByaW50ayhLRVJOX0VSUiAiYWxsb2NhdGUgcnggbWxtZSB0byB0aWQgJWQgZmFpbGVkXG4iLAorCQkJCQl0aWQpOworI2VuZGlmCisJCWdvdG8gZW5kOworCX0KKwkvKiByeCB0aW1lciAqLworCXN0YS0+YW1wZHVfbWxtZS50aWRfcnhbdGlkXS0+c2Vzc2lvbl90aW1lci5mdW5jdGlvbiA9CisJCQkJc3RhX3J4X2FnZ19zZXNzaW9uX3RpbWVyX2V4cGlyZWQ7CisJc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdLT5zZXNzaW9uX3RpbWVyLmRhdGEgPQorCQkJCSh1bnNpZ25lZCBsb25nKSZzdGEtPnRpbWVyX3RvX3RpZFt0aWRdOworCWluaXRfdGltZXIoJnN0YS0+YW1wZHVfbWxtZS50aWRfcnhbdGlkXS0+c2Vzc2lvbl90aW1lcik7CisKKwl0aWRfYWdnX3J4ID0gc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdOworCisJLyogcHJlcGFyZSByZW9yZGVyaW5nIGJ1ZmZlciAqLworCXRpZF9hZ2dfcngtPnJlb3JkZXJfYnVmID0KKwkJa2NhbGxvYyhidWZfc2l6ZSwgc2l6ZW9mKHN0cnVjdCBza19idWZmICopLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXRpZF9hZ2dfcngtPnJlb3JkZXJfYnVmKSB7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCisJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQlwcmludGsoS0VSTl9FUlIgImNhbiBub3QgYWxsb2NhdGUgcmVvcmRlcmluZyBidWZmZXIgIgorCQkJICAgICAgICJ0byB0aWQgJWRcbiIsIHRpZCk7CisjZW5kaWYKKwkJa2ZyZWUoc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdKTsKKwkJZ290byBlbmQ7CisJfQorCisJaWYgKGxvY2FsLT5vcHMtPmFtcGR1X2FjdGlvbikKKwkJcmV0ID0gbG9jYWwtPm9wcy0+YW1wZHVfYWN0aW9uKGh3LCBJRUVFODAyMTFfQU1QRFVfUlhfU1RBUlQsCisJCQkJCSAgICAgICAmc3RhLT5zdGEsIHRpZCwgJnN0YXJ0X3NlcV9udW0pOworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRworCXByaW50ayhLRVJOX0RFQlVHICJSeCBBLU1QRFUgcmVxdWVzdCBvbiB0aWQgJWQgcmVzdWx0ICVkXG4iLCB0aWQsIHJldCk7CisjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0hUX0RFQlVHICovCisKKwlpZiAocmV0KSB7CisJCWtmcmVlKHRpZF9hZ2dfcngtPnJlb3JkZXJfYnVmKTsKKwkJa2ZyZWUodGlkX2FnZ19yeCk7CisJCXN0YS0+YW1wZHVfbWxtZS50aWRfcnhbdGlkXSA9IE5VTEw7CisJCWdvdG8gZW5kOworCX0KKworCS8qIGNoYW5nZSBzdGF0ZSBhbmQgc2VuZCBhZGRiYSByZXNwICovCisJc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV9yeFt0aWRdID0gSFRfQUdHX1NUQVRFX09QRVJBVElPTkFMOworCXRpZF9hZ2dfcngtPmRpYWxvZ190b2tlbiA9IGRpYWxvZ190b2tlbjsKKwl0aWRfYWdnX3J4LT5zc24gPSBzdGFydF9zZXFfbnVtOworCXRpZF9hZ2dfcngtPmhlYWRfc2VxX251bSA9IHN0YXJ0X3NlcV9udW07CisJdGlkX2FnZ19yeC0+YnVmX3NpemUgPSBidWZfc2l6ZTsKKwl0aWRfYWdnX3J4LT50aW1lb3V0ID0gdGltZW91dDsKKwl0aWRfYWdnX3J4LT5zdG9yZWRfbXBkdV9udW0gPSAwOworCXN0YXR1cyA9IFdMQU5fU1RBVFVTX1NVQ0NFU1M7CitlbmQ6CisJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CisKK2VuZF9ub19sb2NrOgorCWllZWU4MDIxMV9zZW5kX2FkZGJhX3Jlc3Aoc3RhLT5zZGF0YSwgc3RhLT5zdGEuYWRkciwgdGlkLAorCQkJCSAgZGlhbG9nX3Rva2VuLCBzdGF0dXMsIDEsIGJ1Zl9zaXplLCB0aW1lb3V0KTsKK30KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9hZ2ctdHguYyBiL25ldC9tYWM4MDIxMS9hZ2ctdHguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGYxMTZkCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L21hYzgwMjExL2FnZy10eC5jCkBAIC0wLDAgKzEsNzAxIEBACisvKgorICogSFQgaGFuZGxpbmcKKyAqCisgKiBDb3B5cmlnaHQgMjAwMywgSm91bmkgTWFsaW5lbiA8amttYWxpbmVAY2MuaHV0LmZpPgorICogQ29weXJpZ2h0IDIwMDItMjAwNSwgSW5zdGFudDgwMiBOZXR3b3JrcywgSW5jLgorICogQ29weXJpZ2h0IDIwMDUtMjAwNiwgRGV2aWNlc2NhcGUgU29mdHdhcmUsIEluYy4KKyAqIENvcHlyaWdodCAyMDA2LTIwMDcJSmlyaSBCZW5jIDxqYmVuY0BzdXNlLmN6PgorICogQ29weXJpZ2h0IDIwMDcsIE1pY2hhZWwgV3UgPGZsYW1pbmdpY2VAc291cm1pbGsubmV0PgorICogQ29weXJpZ2h0IDIwMDctMjAwOSwgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pZWVlODAyMTEuaD4KKyNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KKyNpbmNsdWRlICJpZWVlODAyMTFfaS5oIgorI2luY2x1ZGUgIndtZS5oIgorCisvKioKKyAqIERPQzogVFggYWdncmVnYXRpb24KKyAqCisgKiBBZ2dyZWdhdGlvbiBvbiB0aGUgVFggc2lkZSByZXF1aXJlcyBzZXR0aW5nIHRoZSBoYXJkd2FyZSBmbGFnCisgKiAlSUVFRTgwMjExX0hXX0FNUERVX0FHR1JFR0FUSU9OIGFzIHdlbGwgYXMsIGlmIHByZXNlbnQsIHRoZSBAYW1wZHVfcXVldWVzCisgKiBoYXJkd2FyZSBwYXJhbWV0ZXIgdG8gdGhlIG51bWJlciBvZiBoYXJkd2FyZSBBTVBEVSBxdWV1ZXMuIElmIHRoZXJlIGFyZSBubworICogaGFyZHdhcmUgcXVldWVzIHRoZW4gdGhlIGRyaXZlciB3aWxsIChjdXJyZW50bHkpIGhhdmUgdG8gZG8gYWxsIGZyYW1lCisgKiBidWZmZXJpbmcuCisgKgorICogV2hlbiBUWCBhZ2dyZWdhdGlvbiBpcyBzdGFydGVkIGJ5IHNvbWUgc3Vic3lzdGVtICh1c3VhbGx5IHRoZSByYXRlIGNvbnRyb2wKKyAqIGFsZ29yaXRobSB3b3VsZCBiZSBhcHByb3ByaWF0ZSkgYnkgY2FsbGluZyB0aGUKKyAqIGllZWU4MDIxMV9zdGFydF90eF9iYV9zZXNzaW9uKCkgZnVuY3Rpb24sIHRoZSBkcml2ZXIgd2lsbCBiZSBub3RpZmllZCB2aWEKKyAqIGl0cyBAYW1wZHVfYWN0aW9uIGZ1bmN0aW9uLCB3aXRoIHRoZSAlSUVFRTgwMjExX0FNUERVX1RYX1NUQVJUIGFjdGlvbi4KKyAqCisgKiBJbiByZXNwb25zZSB0byB0aGF0LCB0aGUgZHJpdmVyIGlzIGxhdGVyIHJlcXVpcmVkIHRvIGNhbGwgdGhlCisgKiBpZWVlODAyMTFfc3RhcnRfdHhfYmFfY2IoKSAob3IgaWVlZTgwMjExX3N0YXJ0X3R4X2JhX2NiX2lycXNhZmUoKSkKKyAqIGZ1bmN0aW9uLCB3aGljaCB3aWxsIHN0YXJ0IHRoZSBhZ2dyZWdhdGlvbiBzZXNzaW9uLgorICoKKyAqIFNpbWlsYXJseSwgd2hlbiB0aGUgYWdncmVnYXRpb24gc2Vzc2lvbiBpcyBzdG9wcGVkIGJ5CisgKiBpZWVlODAyMTFfc3RvcF90eF9iYV9zZXNzaW9uKCksIHRoZSBkcml2ZXIncyBAYW1wZHVfYWN0aW9uIGZ1bmN0aW9uIHdpbGwKKyAqIGJlIGNhbGxlZCB3aXRoIHRoZSBhY3Rpb24gJUlFRUU4MDIxMV9BTVBEVV9UWF9TVE9QLiBJbiB0aGlzIGNhc2UsIHRoZQorICogY2FsbCBtdXN0IG5vdCBmYWlsLCBhbmQgdGhlIGRyaXZlciBtdXN0IGxhdGVyIGNhbGwgaWVlZTgwMjExX3N0b3BfdHhfYmFfY2IoKQorICogKG9yIGllZWU4MDIxMV9zdG9wX3R4X2JhX2NiX2lycXNhZmUoKSkuCisgKi8KKworc3RhdGljIHZvaWQgaWVlZTgwMjExX3NlbmRfYWRkYmFfcmVxdWVzdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCQkJIGNvbnN0IHU4ICpkYSwgdTE2IHRpZCwKKwkJCQkJIHU4IGRpYWxvZ190b2tlbiwgdTE2IHN0YXJ0X3NlcV9udW0sCisJCQkJCSB1MTYgYWdnX3NpemUsIHUxNiB0aW1lb3V0KQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OworCXUxNiBjYXBhYjsKKworCXNrYiA9IGRldl9hbGxvY19za2Ioc2l6ZW9mKCptZ210KSArIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7CisKKwlpZiAoIXNrYikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgYnVmZmVyICIKKwkJCQkiZm9yIGFkZGJhIHJlcXVlc3QgZnJhbWVcbiIsIHNkYXRhLT5kZXYtPm5hbWUpOworCQlyZXR1cm47CisJfQorCXNrYl9yZXNlcnZlKHNrYiwgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tKTsKKwltZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSBza2JfcHV0KHNrYiwgMjQpOworCW1lbXNldChtZ210LCAwLCAyNCk7CisJbWVtY3B5KG1nbXQtPmRhLCBkYSwgRVRIX0FMRU4pOworCW1lbWNweShtZ210LT5zYSwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQIHx8CisJICAgIHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOKQorCQltZW1jcHkobWdtdC0+YnNzaWQsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJZWxzZSBpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCisJCW1lbWNweShtZ210LT5ic3NpZCwgc2RhdGEtPnUubWdkLmJzc2lkLCBFVEhfQUxFTik7CisKKwltZ210LT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfAorCQkJCQkgIElFRUU4MDIxMV9TVFlQRV9BQ1RJT04pOworCisJc2tiX3B1dChza2IsIDEgKyBzaXplb2YobWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXEpKTsKKworCW1nbXQtPnUuYWN0aW9uLmNhdGVnb3J5ID0gV0xBTl9DQVRFR09SWV9CQUNLOworCW1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVxLmFjdGlvbl9jb2RlID0gV0xBTl9BQ1RJT05fQUREQkFfUkVROworCisJbWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXEuZGlhbG9nX3Rva2VuID0gZGlhbG9nX3Rva2VuOworCWNhcGFiID0gKHUxNikoMSA8PCAxKTsJCS8qIGJpdCAxIGFnZ3JlZ2F0aW9uIHBvbGljeSAqLworCWNhcGFiIHw9ICh1MTYpKHRpZCA8PCAyKTsgCS8qIGJpdCA1OjIgVElEIG51bWJlciAqLworCWNhcGFiIHw9ICh1MTYpKGFnZ19zaXplIDw8IDYpOwkvKiBiaXQgMTU6NiBtYXggc2l6ZSBvZiBhZ2dlcmdhdGlvbiAqLworCisJbWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXEuY2FwYWIgPSBjcHVfdG9fbGUxNihjYXBhYik7CisKKwltZ210LT51LmFjdGlvbi51LmFkZGJhX3JlcS50aW1lb3V0ID0gY3B1X3RvX2xlMTYodGltZW91dCk7CisJbWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXEuc3RhcnRfc2VxX251bSA9CisJCQkJCWNwdV90b19sZTE2KHN0YXJ0X3NlcV9udW0gPDwgNCk7CisKKwlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IsIDEpOworfQorCit2b2lkIGllZWU4MDIxMV9zZW5kX2JhcihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgdTggKnJhLCB1MTYgdGlkLCB1MTYgc3NuKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IGllZWU4MDIxMV9iYXIgKmJhcjsKKwl1MTYgYmFyX2NvbnRyb2wgPSAwOworCisJc2tiID0gZGV2X2FsbG9jX3NrYihzaXplb2YoKmJhcikgKyBsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20pOworCWlmICghc2tiKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBidWZmZXIgZm9yICIKKwkJCSJiYXIgZnJhbWVcbiIsIHNkYXRhLT5kZXYtPm5hbWUpOworCQlyZXR1cm47CisJfQorCXNrYl9yZXNlcnZlKHNrYiwgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tKTsKKwliYXIgPSAoc3RydWN0IGllZWU4MDIxMV9iYXIgKilza2JfcHV0KHNrYiwgc2l6ZW9mKCpiYXIpKTsKKwltZW1zZXQoYmFyLCAwLCBzaXplb2YoKmJhcikpOworCWJhci0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9DVEwgfAorCQkJCQkgSUVFRTgwMjExX1NUWVBFX0JBQ0tfUkVRKTsKKwltZW1jcHkoYmFyLT5yYSwgcmEsIEVUSF9BTEVOKTsKKwltZW1jcHkoYmFyLT50YSwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwliYXJfY29udHJvbCB8PSAodTE2KUlFRUU4MDIxMV9CQVJfQ1RSTF9BQ0tfUE9MSUNZX05PUk1BTDsKKwliYXJfY29udHJvbCB8PSAodTE2KUlFRUU4MDIxMV9CQVJfQ1RSTF9DQk1USURfQ09NUFJFU1NFRF9CQTsKKwliYXJfY29udHJvbCB8PSAodTE2KSh0aWQgPDwgMTIpOworCWJhci0+Y29udHJvbCA9IGNwdV90b19sZTE2KGJhcl9jb250cm9sKTsKKwliYXItPnN0YXJ0X3NlcV9udW0gPSBjcHVfdG9fbGUxNihzc24pOworCisJaWVlZTgwMjExX3R4X3NrYihzZGF0YSwgc2tiLCAwKTsKK30KKworc3RhdGljIGludCBfX19pZWVlODAyMTFfc3RvcF90eF9iYV9zZXNzaW9uKHN0cnVjdCBzdGFfaW5mbyAqc3RhLCB1MTYgdGlkLAorCQkJCQkgICBlbnVtIGllZWU4MDIxMV9iYWNrX3BhcnRpZXMgaW5pdGlhdG9yKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc3RhLT5sb2NhbDsKKwlpbnQgcmV0OworCXU4ICpzdGF0ZTsKKworCXN0YXRlID0gJnN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfdHhbdGlkXTsKKworCWlmIChsb2NhbC0+aHcuYW1wZHVfcXVldWVzKSB7CisJCWlmIChpbml0aWF0b3IpIHsKKwkJCS8qCisJCQkgKiBTdG9wIHRoZSBBQyBxdWV1ZSB0byBhdm9pZCBpc3N1ZXMgd2hlcmUgd2Ugc2VuZAorCQkJICogdW5hZ2dyZWdhdGVkIGZyYW1lcyBhbHJlYWR5IGJlZm9yZSB0aGUgZGVsYmEuCisJCQkgKi8KKwkJCWllZWU4MDIxMV9zdG9wX3F1ZXVlX2J5X3JlYXNvbigmbG9jYWwtPmh3LAorCQkJCWxvY2FsLT5ody5xdWV1ZXMgKyBzdGEtPnRpZF90b190eF9xW3RpZF0sCisJCQkJSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX0FHR1JFR0FUSU9OKTsKKwkJfQorCisJCS8qCisJCSAqIFByZXRlbmQgdGhlIGRyaXZlciB3b2tlIHRoZSBxdWV1ZSwganVzdCBpbiBjYXNlCisJCSAqIGl0IGRpc2FibGVkIGl0IGJlZm9yZSB0aGUgc2Vzc2lvbiB3YXMgc3RvcHBlZC4KKwkJICovCisJCWllZWU4MDIxMV93YWtlX3F1ZXVlKAorCQkJJmxvY2FsLT5odywgbG9jYWwtPmh3LnF1ZXVlcyArIHN0YS0+dGlkX3RvX3R4X3FbdGlkXSk7CisJfQorCSpzdGF0ZSA9IEhUX0FHR19TVEFURV9SRVFfU1RPUF9CQV9NU0sgfAorCQkoaW5pdGlhdG9yIDw8IEhUX0FHR19TVEFURV9JTklUSUFUT1JfU0hJRlQpOworCisJcmV0ID0gbG9jYWwtPm9wcy0+YW1wZHVfYWN0aW9uKCZsb2NhbC0+aHcsIElFRUU4MDIxMV9BTVBEVV9UWF9TVE9QLAorCQkJCSAgICAgICAmc3RhLT5zdGEsIHRpZCwgTlVMTCk7CisKKwkvKiBIVyBzaGFsbCBub3QgZGVueSBnb2luZyBiYWNrIHRvIGxlZ2FjeSAqLworCWlmIChXQVJOX09OKHJldCkpIHsKKwkJKnN0YXRlID0gSFRfQUdHX1NUQVRFX09QRVJBVElPTkFMOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBBZnRlciBzZW5kaW5nIGFkZCBCbG9jayBBY2sgcmVxdWVzdCB3ZSBhY3RpdmF0ZWQgYSB0aW1lciB1bnRpbAorICogYWRkIEJsb2NrIEFjayByZXNwb25zZSB3aWxsIGFycml2ZSBmcm9tIHRoZSByZWNpcGllbnQuCisgKiBJZiB0aGlzIHRpbWVyIGV4cGlyZXMgc3RhX2FkZGJhX3Jlc3BfdGltZXJfZXhwaXJlZCB3aWxsIGJlIGV4ZWN1dGVkLgorICovCitzdGF0aWMgdm9pZCBzdGFfYWRkYmFfcmVzcF90aW1lcl9leHBpcmVkKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwkvKiBub3QgYW4gZWxlZ2FudCBkZXRvdXIsIGJ1dCB0aGVyZSBpcyBubyBjaG9pY2UgYXMgdGhlIHRpbWVyIHBhc3NlcworCSAqIG9ubHkgb25lIGFyZ3VtZW50LCBhbmQgYm90aCBzdGFfaW5mbyBhbmQgVElEIGFyZSBuZWVkZWQsIHNvIGluaXQKKwkgKiBmbG93IGluIHN0YV9pbmZvX2NyZWF0ZSBnaXZlcyB0aGUgVElEIGFzIGRhdGEsIHdoaWxlIHRoZSB0aW1lcl90b19pZAorCSAqIGFycmF5IGdpdmVzIHRoZSBzdGEgdGhyb3VnaCBjb250YWluZXJfb2YgKi8KKwl1MTYgdGlkID0gKih1OCAqKWRhdGE7CisJc3RydWN0IHN0YV9pbmZvICpzdGEgPSBjb250YWluZXJfb2YoKHZvaWQgKilkYXRhLAorCQlzdHJ1Y3Qgc3RhX2luZm8sIHRpbWVyX3RvX3RpZFt0aWRdKTsKKwl1OCAqc3RhdGU7CisKKwlzdGF0ZSA9ICZzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3R4W3RpZF07CisKKwkvKiBjaGVjayBpZiB0aGUgVElEIHdhaXRzIGZvciBhZGRCQSByZXNwb25zZSAqLworCXNwaW5fbG9ja19iaCgmc3RhLT5sb2NrKTsKKwlpZiAoISgqc3RhdGUgJiBIVF9BRERCQV9SRVFVRVNURURfTVNLKSkgeworCQlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKKwkJKnN0YXRlID0gSFRfQUdHX1NUQVRFX0lETEU7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCisJCXByaW50ayhLRVJOX0RFQlVHICJ0aW1lciBleHBpcmVkIG9uIHRpZCAlZCBidXQgd2UgYXJlIG5vdCAiCisJCQkJImV4cGVjdGluZyBhZGRCQSByZXNwb25zZSB0aGVyZSIsIHRpZCk7CisjZW5kaWYKKwkJcmV0dXJuOworCX0KKworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRworCXByaW50ayhLRVJOX0RFQlVHICJhZGRCQSByZXNwb25zZSB0aW1lciBleHBpcmVkIG9uIHRpZCAlZFxuIiwgdGlkKTsKKyNlbmRpZgorCisJX19faWVlZTgwMjExX3N0b3BfdHhfYmFfc2Vzc2lvbihzdGEsIHRpZCwgV0xBTl9CQUNLX0lOSVRJQVRPUik7CisJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGllZWU4MDIxMV9hY19mcm9tX3RpZChpbnQgdGlkKQoreworCXJldHVybiBpZWVlODAyXzFkX3RvX2FjW3RpZCAmIDddOworfQorCitpbnQgaWVlZTgwMjExX3N0YXJ0X3R4X2JhX3Nlc3Npb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4ICpyYSwgdTE2IHRpZCkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTsKKwlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKKwl1OCAqc3RhdGU7CisJaW50IGksIHFuID0gLTEsIHJldCA9IDA7CisJdTE2IHN0YXJ0X3NlcV9udW07CisKKwlpZiAoV0FSTl9PTighbG9jYWwtPm9wcy0+YW1wZHVfYWN0aW9uKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoKHRpZCA+PSBTVEFfVElEX05VTSkgfHwgIShody0+ZmxhZ3MgJiBJRUVFODAyMTFfSFdfQU1QRFVfQUdHUkVHQVRJT04pKQorCQlyZXR1cm4gLUVJTlZBTDsKKworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRworCXByaW50ayhLRVJOX0RFQlVHICJPcGVuIEJBIHNlc3Npb24gcmVxdWVzdGVkIGZvciAlcE0gdGlkICV1XG4iLAorCSAgICAgICByYSwgdGlkKTsKKyNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcgKi8KKworCWlmIChody0+YW1wZHVfcXVldWVzICYmIGllZWU4MDIxMV9hY19mcm9tX3RpZCh0aWQpID09IDApIHsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKKwkJcHJpbnRrKEtFUk5fREVCVUcgInJlamVjdGluZyBvbiB2b2ljZSBBQ1xuIik7CisjZW5kaWYKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmN1X3JlYWRfbG9jaygpOworCisJc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCByYSk7CisJaWYgKCFzdGEpIHsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkNvdWxkIG5vdCBmaW5kIHRoZSBzdGF0aW9uXG4iKTsKKyNlbmRpZgorCQlyZXQgPSAtRU5PRU5UOworCQlnb3RvIHVubG9jazsKKwl9CisKKwkvKgorCSAqIFRoZSBhZ2dyZWdhdGlvbiBjb2RlIGlzIG5vdCBwcmVwYXJlZCB0byBoYW5kbGUKKwkgKiBhbnl0aGluZyBidXQgU1RBL0FQIGR1ZSB0byB0aGUgQlNTSUQgaGFuZGxpbmcuCisJICogSUJTUyBjb3VsZCB3b3JrIGluIHRoZSBjb2RlIGJ1dCBpc24ndCBzdXBwb3J0ZWQKKwkgKiBieSBkcml2ZXJzIG9yIHRoZSBzdGFuZGFyZC4KKwkgKi8KKwlpZiAoc3RhLT5zZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiAmJgorCSAgICBzdGEtPnNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOICYmCisJICAgIHN0YS0+c2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FQKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gdW5sb2NrOworCX0KKworCXNwaW5fbG9ja19iaCgmc3RhLT5sb2NrKTsKKworCXNkYXRhID0gc3RhLT5zZGF0YTsKKworCS8qIHdlIGhhdmUgdHJpZWQgdG9vIG1hbnkgdGltZXMsIHJlY2VpdmVyIGRvZXMgbm90IHdhbnQgQS1NUERVICovCisJaWYgKHN0YS0+YW1wZHVfbWxtZS5hZGRiYV9yZXFfbnVtW3RpZF0gPiBIVF9BR0dfTUFYX1JFVFJJRVMpIHsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIGVycl91bmxvY2tfc3RhOworCX0KKworCXN0YXRlID0gJnN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfdHhbdGlkXTsKKwkvKiBjaGVjayBpZiB0aGUgVElEIGlzIG5vdCBpbiBhZ2dyZWdhdGlvbiBmbG93IGFscmVhZHkgKi8KKwlpZiAoKnN0YXRlICE9IEhUX0FHR19TVEFURV9JRExFKSB7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCisJCXByaW50ayhLRVJOX0RFQlVHICJCQSByZXF1ZXN0IGRlbmllZCAtIHNlc3Npb24gaXMgbm90ICIKKwkJCQkgImlkbGUgb24gdGlkICV1XG4iLCB0aWQpOworI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRyAqLworCQlyZXQgPSAtRUFHQUlOOworCQlnb3RvIGVycl91bmxvY2tfc3RhOworCX0KKworCWlmIChody0+YW1wZHVfcXVldWVzKSB7CisJCXNwaW5fbG9jaygmbG9jYWwtPnF1ZXVlX3N0b3BfcmVhc29uX2xvY2spOworCQkvKiByZXNlcnZlIGEgbmV3IHF1ZXVlIGZvciB0aGlzIHNlc3Npb24gKi8KKwkJZm9yIChpID0gMDsgaSA8IGxvY2FsLT5ody5hbXBkdV9xdWV1ZXM7IGkrKykgeworCQkJaWYgKGxvY2FsLT5hbXBkdV9hY19xdWV1ZVtpXSA8IDApIHsKKwkJCQlxbiA9IGk7CisJCQkJbG9jYWwtPmFtcGR1X2FjX3F1ZXVlW3FuXSA9CisJCQkJCWllZWU4MDIxMV9hY19mcm9tX3RpZCh0aWQpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCXNwaW5fdW5sb2NrKCZsb2NhbC0+cXVldWVfc3RvcF9yZWFzb25fbG9jayk7CisKKwkJaWYgKHFuIDwgMCkgeworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRworCQkJcHJpbnRrKEtFUk5fREVCVUcgIkJBIHJlcXVlc3QgZGVuaWVkIC0gIgorCQkJICAgICAgICJxdWV1ZSB1bmF2YWlsYWJsZSBmb3IgdGlkICVkXG4iLCB0aWQpOworI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRyAqLworCQkJcmV0ID0gLUVOT1NQQzsKKwkJCWdvdG8gZXJyX3VubG9ja19zdGE7CisJCX0KKworCQkvKgorCQkgKiBJZiB3ZSBzdWNjZXNzZnVsbHkgYWxsb2NhdGUgdGhlIHNlc3Npb24sIHdlIGNhbid0IGhhdmUKKwkJICogYW55dGhpbmcgZ29pbmcgb24gb24gdGhlIHF1ZXVlIHRoaXMgVElEIG1hcHMgaW50bywgc28KKwkJICogc3RvcCBpdCBmb3Igbm93LiBUaGlzIGlzIGEgInZpcnR1YWwiIHN0b3AgdXNpbmcgdGhlIHNhbWUKKwkJICogbWVjaGFuaXNtIHRoYXQgZHJpdmVycyB3aWxsIHVzZS4KKwkJICoKKwkJICogWFhYOiBxdWV1ZSB1cCBmcmFtZXMgZm9yIHRoaXMgc2Vzc2lvbiBpbiB0aGUgc3RhX2luZm8KKwkJICoJc3RydWN0IGluc3RlYWQgdG8gYXZvaWQgaGl0dGluZyBhbGwgb3RoZXIgU1RBcy4KKwkJICovCisJCWllZWU4MDIxMV9zdG9wX3F1ZXVlX2J5X3JlYXNvbigKKwkJCSZsb2NhbC0+aHcsIGh3LT5xdWV1ZXMgKyBxbiwKKwkJCUlFRUU4MDIxMV9RVUVVRV9TVE9QX1JFQVNPTl9BR0dSRUdBVElPTik7CisJfQorCisJLyogcHJlcGFyZSBBLU1QRFUgTUxNRSBmb3IgVHggYWdncmVnYXRpb24gKi8KKwlzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0gPQorCQkJa21hbGxvYyhzaXplb2Yoc3RydWN0IHRpZF9hbXBkdV90eCksIEdGUF9BVE9NSUMpOworCWlmICghc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdKSB7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCisJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQlwcmludGsoS0VSTl9FUlIgImFsbG9jYXRlIHR4IG1sbWUgdG8gdGlkICVkIGZhaWxlZFxuIiwKKwkJCQkJdGlkKTsKKyNlbmRpZgorCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycl9yZXR1cm5fcXVldWU7CisJfQorCisJLyogVHggdGltZXIgKi8KKwlzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0tPmFkZGJhX3Jlc3BfdGltZXIuZnVuY3Rpb24gPQorCQkJc3RhX2FkZGJhX3Jlc3BfdGltZXJfZXhwaXJlZDsKKwlzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0tPmFkZGJhX3Jlc3BfdGltZXIuZGF0YSA9CisJCQkodW5zaWduZWQgbG9uZykmc3RhLT50aW1lcl90b190aWRbdGlkXTsKKwlpbml0X3RpbWVyKCZzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0tPmFkZGJhX3Jlc3BfdGltZXIpOworCisJLyogT2ssIHRoZSBBZGRiYSBmcmFtZSBoYXNuJ3QgYmVlbiBzZW50IHlldCwgYnV0IGlmIHRoZSBkcml2ZXIgY2FsbHMgdGhlCisJICogY2FsbCBiYWNrIHJpZ2h0IGF3YXksIGl0IG11c3Qgc2VlIHRoYXQgdGhlIGZsb3cgaGFzIGJlZ3VuICovCisJKnN0YXRlIHw9IEhUX0FEREJBX1JFUVVFU1RFRF9NU0s7CisKKwlzdGFydF9zZXFfbnVtID0gc3RhLT50aWRfc2VxW3RpZF07CisKKwlyZXQgPSBsb2NhbC0+b3BzLT5hbXBkdV9hY3Rpb24oaHcsIElFRUU4MDIxMV9BTVBEVV9UWF9TVEFSVCwKKwkJCQkgICAgICAgJnN0YS0+c3RhLCB0aWQsICZzdGFydF9zZXFfbnVtKTsKKworCWlmIChyZXQpIHsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkJBIHJlcXVlc3QgZGVuaWVkIC0gSFcgdW5hdmFpbGFibGUgZm9yIgorCQkJCQkiIHRpZCAlZFxuIiwgdGlkKTsKKyNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcgKi8KKwkJKnN0YXRlID0gSFRfQUdHX1NUQVRFX0lETEU7CisJCWdvdG8gZXJyX2ZyZWU7CisJfQorCXN0YS0+dGlkX3RvX3R4X3FbdGlkXSA9IHFuOworCisJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CisKKwkvKiBzZW5kIGFuIGFkZEJBIHJlcXVlc3QgKi8KKwlzdGEtPmFtcGR1X21sbWUuZGlhbG9nX3Rva2VuX2FsbG9jYXRvcisrOworCXN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXS0+ZGlhbG9nX3Rva2VuID0KKwkJCXN0YS0+YW1wZHVfbWxtZS5kaWFsb2dfdG9rZW5fYWxsb2NhdG9yOworCXN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXS0+c3NuID0gc3RhcnRfc2VxX251bTsKKworCWllZWU4MDIxMV9zZW5kX2FkZGJhX3JlcXVlc3Qoc3RhLT5zZGF0YSwgcmEsIHRpZCwKKwkJCSBzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0tPmRpYWxvZ190b2tlbiwKKwkJCSBzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0tPnNzbiwKKwkJCSAweDQwLCA1MDAwKTsKKwkvKiBhY3RpdmF0ZSB0aGUgdGltZXIgZm9yIHRoZSByZWNpcGllbnQncyBhZGRCQSByZXNwb25zZSAqLworCXN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXS0+YWRkYmFfcmVzcF90aW1lci5leHBpcmVzID0KKwkJCQlqaWZmaWVzICsgQUREQkFfUkVTUF9JTlRFUlZBTDsKKwlhZGRfdGltZXIoJnN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXS0+YWRkYmFfcmVzcF90aW1lcik7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCisJcHJpbnRrKEtFUk5fREVCVUcgImFjdGl2YXRlZCBhZGRCQSByZXNwb25zZSB0aW1lciBvbiB0aWQgJWRcbiIsIHRpZCk7CisjZW5kaWYKKwlnb3RvIHVubG9jazsKKworIGVycl9mcmVlOgorCWtmcmVlKHN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXSk7CisJc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdID0gTlVMTDsKKyBlcnJfcmV0dXJuX3F1ZXVlOgorCWlmIChxbiA+PSAwKSB7CisJCS8qIFdlIGZhaWxlZCwgc28gc3RhcnQgcXVldWUgYWdhaW4gcmlnaHQgYXdheS4gKi8KKwkJaWVlZTgwMjExX3dha2VfcXVldWVfYnlfcmVhc29uKGh3LCBody0+cXVldWVzICsgcW4sCisJCQlJRUVFODAyMTFfUVVFVUVfU1RPUF9SRUFTT05fQUdHUkVHQVRJT04pOworCQkvKiBnaXZlIHF1ZXVlIGJhY2sgdG8gcG9vbCAqLworCQlzcGluX2xvY2soJmxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbl9sb2NrKTsKKwkJbG9jYWwtPmFtcGR1X2FjX3F1ZXVlW3FuXSA9IC0xOworCQlzcGluX3VubG9jaygmbG9jYWwtPnF1ZXVlX3N0b3BfcmVhc29uX2xvY2spOworCX0KKyBlcnJfdW5sb2NrX3N0YToKKwlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKKyB1bmxvY2s6CisJcmN1X3JlYWRfdW5sb2NrKCk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX3N0YXJ0X3R4X2JhX3Nlc3Npb24pOworCit2b2lkIGllZWU4MDIxMV9zdGFydF90eF9iYV9jYihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggKnJhLCB1MTYgdGlkKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOworCXN0cnVjdCBzdGFfaW5mbyAqc3RhOworCXU4ICpzdGF0ZTsKKworCWlmICh0aWQgPj0gU1RBX1RJRF9OVU0pIHsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkJhZCBUSUQgdmFsdWU6IHRpZCA9ICVkICg+PSAlZClcbiIsCisJCQkJdGlkLCBTVEFfVElEX05VTSk7CisjZW5kaWYKKwkJcmV0dXJuOworCX0KKworCXJjdV9yZWFkX2xvY2soKTsKKwlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIHJhKTsKKwlpZiAoIXN0YSkgeworCQlyY3VfcmVhZF91bmxvY2soKTsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkNvdWxkIG5vdCBmaW5kIHN0YXRpb246ICVwTVxuIiwgcmEpOworI2VuZGlmCisJCXJldHVybjsKKwl9CisKKwlzdGF0ZSA9ICZzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3R4W3RpZF07CisJc3Bpbl9sb2NrX2JoKCZzdGEtPmxvY2spOworCisJaWYgKFdBUk5fT04oISgqc3RhdGUgJiBIVF9BRERCQV9SRVFVRVNURURfTVNLKSkpIHsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKKwkJcHJpbnRrKEtFUk5fREVCVUcgImFkZEJBIHdhcyBub3QgcmVxdWVzdGVkIHlldCwgc3RhdGUgaXMgJWRcbiIsCisJCQkJKnN0YXRlKTsKKyNlbmRpZgorCQlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoV0FSTl9PTigqc3RhdGUgJiBIVF9BRERCQV9EUlZfUkVBRFlfTVNLKSkKKwkJZ290byBvdXQ7CisKKwkqc3RhdGUgfD0gSFRfQUREQkFfRFJWX1JFQURZX01TSzsKKworCWlmICgqc3RhdGUgPT0gSFRfQUdHX1NUQVRFX09QRVJBVElPTkFMKSB7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCisJCXByaW50ayhLRVJOX0RFQlVHICJBZ2dyZWdhdGlvbiBpcyBvbiBmb3IgdGlkICVkIFxuIiwgdGlkKTsKKyNlbmRpZgorCQlpZiAoaHctPmFtcGR1X3F1ZXVlcykgeworCQkJLyoKKwkJCSAqIFdha2UgdXAgdGhpcyBxdWV1ZSwgd2Ugc3RvcHBlZCBpdCBlYXJsaWVyLAorCQkJICogdGhpcyB3aWxsIGluIHR1cm4gd2FrZSB0aGUgZW50aXJlIEFDLgorCQkJICovCisJCQlpZWVlODAyMTFfd2FrZV9xdWV1ZV9ieV9yZWFzb24oaHcsCisJCQkJaHctPnF1ZXVlcyArIHN0YS0+dGlkX3RvX3R4X3FbdGlkXSwKKwkJCQlJRUVFODAyMTFfUVVFVUVfU1RPUF9SRUFTT05fQUdHUkVHQVRJT04pOworCQl9CisJfQorCisgb3V0OgorCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOworCXJjdV9yZWFkX3VubG9jaygpOworfQorRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfc3RhcnRfdHhfYmFfY2IpOworCit2b2lkIGllZWU4MDIxMV9zdGFydF90eF9iYV9jYl9pcnFzYWZlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICAgIGNvbnN0IHU4ICpyYSwgdTE2IHRpZCkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3JhX3RpZCAqcmFfdGlkOworCXN0cnVjdCBza19idWZmICpza2IgPSBkZXZfYWxsb2Nfc2tiKDApOworCisJaWYgKHVubGlrZWx5KCFza2IpKSB7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCisJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogTm90IGVub3VnaCBtZW1vcnksICIKKwkJCSAgICAgICAiZHJvcHBpbmcgc3RhcnQgQkEgc2Vzc2lvbiIsIHNrYi0+ZGV2LT5uYW1lKTsKKyNlbmRpZgorCQlyZXR1cm47CisJfQorCXJhX3RpZCA9IChzdHJ1Y3QgaWVlZTgwMjExX3JhX3RpZCAqKSAmc2tiLT5jYjsKKwltZW1jcHkoJnJhX3RpZC0+cmEsIHJhLCBFVEhfQUxFTik7CisJcmFfdGlkLT50aWQgPSB0aWQ7CisKKwlza2ItPnBrdF90eXBlID0gSUVFRTgwMjExX0FEREJBX01TRzsKKwlza2JfcXVldWVfdGFpbCgmbG9jYWwtPnNrYl9xdWV1ZSwgc2tiKTsKKwl0YXNrbGV0X3NjaGVkdWxlKCZsb2NhbC0+dGFza2xldCk7Cit9CitFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9zdGFydF90eF9iYV9jYl9pcnFzYWZlKTsKKworaW50IF9faWVlZTgwMjExX3N0b3BfdHhfYmFfc2Vzc2lvbihzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgdTE2IHRpZCwKKwkJCQkgICBlbnVtIGllZWU4MDIxMV9iYWNrX3BhcnRpZXMgaW5pdGlhdG9yKQoreworCXU4ICpzdGF0ZTsKKwlpbnQgcmV0OworCisJLyogY2hlY2sgaWYgdGhlIFRJRCBpcyBpbiBhZ2dyZWdhdGlvbiAqLworCXN0YXRlID0gJnN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfdHhbdGlkXTsKKwlzcGluX2xvY2tfYmgoJnN0YS0+bG9jayk7CisKKwlpZiAoKnN0YXRlICE9IEhUX0FHR19TVEFURV9PUEVSQVRJT05BTCkgeworCQlyZXQgPSAtRU5PRU5UOworCQlnb3RvIHVubG9jazsKKwl9CisKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKKwlwcmludGsoS0VSTl9ERUJVRyAiVHggQkEgc2Vzc2lvbiBzdG9wIHJlcXVlc3RlZCBmb3IgJXBNIHRpZCAldVxuIiwKKwkgICAgICAgc3RhLT5zdGEuYWRkciwgdGlkKTsKKyNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcgKi8KKworCXJldCA9IF9fX2llZWU4MDIxMV9zdG9wX3R4X2JhX3Nlc3Npb24oc3RhLCB0aWQsIGluaXRpYXRvcik7CisKKyB1bmxvY2s6CisJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CisJcmV0dXJuIHJldDsKK30KKworaW50IGllZWU4MDIxMV9zdG9wX3R4X2JhX3Nlc3Npb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJIHU4ICpyYSwgdTE2IHRpZCwKKwkJCQkgZW51bSBpZWVlODAyMTFfYmFja19wYXJ0aWVzIGluaXRpYXRvcikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTsKKwlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChXQVJOX09OKCFsb2NhbC0+b3BzLT5hbXBkdV9hY3Rpb24pKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICh0aWQgPj0gU1RBX1RJRF9OVU0pCisJCXJldHVybiAtRUlOVkFMOworCisJcmN1X3JlYWRfbG9jaygpOworCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgcmEpOworCWlmICghc3RhKSB7CisJCXJjdV9yZWFkX3VubG9jaygpOworCQlyZXR1cm4gLUVOT0VOVDsKKwl9CisKKwlyZXQgPSBfX2llZWU4MDIxMV9zdG9wX3R4X2JhX3Nlc3Npb24oc3RhLCB0aWQsIGluaXRpYXRvcik7CisJcmN1X3JlYWRfdW5sb2NrKCk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX3N0b3BfdHhfYmFfc2Vzc2lvbik7CisKK3ZvaWQgaWVlZTgwMjExX3N0b3BfdHhfYmFfY2Ioc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4ICpyYSwgdTggdGlkKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOworCXN0cnVjdCBzdGFfaW5mbyAqc3RhOworCXU4ICpzdGF0ZTsKKworCWlmICh0aWQgPj0gU1RBX1RJRF9OVU0pIHsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkJhZCBUSUQgdmFsdWU6IHRpZCA9ICVkICg+PSAlZClcbiIsCisJCQkJdGlkLCBTVEFfVElEX05VTSk7CisjZW5kaWYKKwkJcmV0dXJuOworCX0KKworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRworCXByaW50ayhLRVJOX0RFQlVHICJTdG9wcGluZyBUeCBCQSBzZXNzaW9uIGZvciAlcE0gdGlkICVkXG4iLAorCSAgICAgICByYSwgdGlkKTsKKyNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcgKi8KKworCXJjdV9yZWFkX2xvY2soKTsKKwlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIHJhKTsKKwlpZiAoIXN0YSkgeworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRworCQlwcmludGsoS0VSTl9ERUJVRyAiQ291bGQgbm90IGZpbmQgc3RhdGlvbjogJXBNXG4iLCByYSk7CisjZW5kaWYKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCXJldHVybjsKKwl9CisJc3RhdGUgPSAmc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV90eFt0aWRdOworCisJLyogTk9URTogbm8gbmVlZCB0byB1c2Ugc3RhLT5sb2NrIGluIHRoaXMgc3RhdGUgY2hlY2ssIGFzCisJICogaWVlZTgwMjExX3N0b3BfdHhfYmFfc2Vzc2lvbiB3aWxsIGxldCBvbmx5IG9uZSBzdG9wIGNhbGwgdG8KKwkgKiBwYXNzIHRocm91Z2ggcGVyIHN0YS90aWQKKwkgKi8KKwlpZiAoKCpzdGF0ZSAmIEhUX0FHR19TVEFURV9SRVFfU1RPUF9CQV9NU0spID09IDApIHsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKKwkJcHJpbnRrKEtFUk5fREVCVUcgInVuZXhwZWN0ZWQgY2FsbGJhY2sgdG8gQS1NUERVIHN0b3BcbiIpOworI2VuZGlmCisJCXJjdV9yZWFkX3VubG9jaygpOworCQlyZXR1cm47CisJfQorCisJaWYgKCpzdGF0ZSAmIEhUX0FHR19TVEFURV9JTklUSUFUT1JfTVNLKQorCQlpZWVlODAyMTFfc2VuZF9kZWxiYShzdGEtPnNkYXRhLCByYSwgdGlkLAorCQkJV0xBTl9CQUNLX0lOSVRJQVRPUiwgV0xBTl9SRUFTT05fUVNUQV9OT1RfVVNFKTsKKworCXNwaW5fbG9ja19iaCgmc3RhLT5sb2NrKTsKKworCWlmICgqc3RhdGUgJiBIVF9BR0dfU1RBVEVfSU5JVElBVE9SX01TSyAmJgorCSAgICBody0+YW1wZHVfcXVldWVzKSB7CisJCS8qCisJCSAqIFdha2UgdXAgdGhpcyBxdWV1ZSwgd2Ugc3RvcHBlZCBpdCBlYXJsaWVyLAorCQkgKiB0aGlzIHdpbGwgaW4gdHVybiB3YWtlIHRoZSBlbnRpcmUgQUMuCisJCSAqLworCQlpZWVlODAyMTFfd2FrZV9xdWV1ZV9ieV9yZWFzb24oaHcsCisJCQlody0+cXVldWVzICsgc3RhLT50aWRfdG9fdHhfcVt0aWRdLAorCQkJSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX0FHR1JFR0FUSU9OKTsKKwl9CisKKwkqc3RhdGUgPSBIVF9BR0dfU1RBVEVfSURMRTsKKwlzdGEtPmFtcGR1X21sbWUuYWRkYmFfcmVxX251bVt0aWRdID0gMDsKKwlrZnJlZShzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0pOworCXN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXSA9IE5VTEw7CisJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CisKKwlyY3VfcmVhZF91bmxvY2soKTsKK30KK0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX3N0b3BfdHhfYmFfY2IpOworCit2b2lkIGllZWU4MDIxMV9zdG9wX3R4X2JhX2NiX2lycXNhZmUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgICBjb25zdCB1OCAqcmEsIHUxNiB0aWQpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7CisJc3RydWN0IGllZWU4MDIxMV9yYV90aWQgKnJhX3RpZDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gZGV2X2FsbG9jX3NrYigwKTsKKworCWlmICh1bmxpa2VseSghc2tiKSkgeworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRworCQlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IE5vdCBlbm91Z2ggbWVtb3J5LCAiCisJCQkgICAgICAgImRyb3BwaW5nIHN0b3AgQkEgc2Vzc2lvbiIsIHNrYi0+ZGV2LT5uYW1lKTsKKyNlbmRpZgorCQlyZXR1cm47CisJfQorCXJhX3RpZCA9IChzdHJ1Y3QgaWVlZTgwMjExX3JhX3RpZCAqKSAmc2tiLT5jYjsKKwltZW1jcHkoJnJhX3RpZC0+cmEsIHJhLCBFVEhfQUxFTik7CisJcmFfdGlkLT50aWQgPSB0aWQ7CisKKwlza2ItPnBrdF90eXBlID0gSUVFRTgwMjExX0RFTEJBX01TRzsKKwlza2JfcXVldWVfdGFpbCgmbG9jYWwtPnNrYl9xdWV1ZSwgc2tiKTsKKwl0YXNrbGV0X3NjaGVkdWxlKCZsb2NhbC0+dGFza2xldCk7Cit9CitFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9zdG9wX3R4X2JhX2NiX2lycXNhZmUpOworCisKK3ZvaWQgaWVlZTgwMjExX3Byb2Nlc3NfYWRkYmFfcmVzcChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJCQkgIHN0cnVjdCBzdGFfaW5mbyAqc3RhLAorCQkJCSAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LAorCQkJCSAgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9ICZsb2NhbC0+aHc7CisJdTE2IGNhcGFiOworCXUxNiB0aWQsIHN0YXJ0X3NlcV9udW07CisJdTggKnN0YXRlOworCisJY2FwYWIgPSBsZTE2X3RvX2NwdShtZ210LT51LmFjdGlvbi51LmFkZGJhX3Jlc3AuY2FwYWIpOworCXRpZCA9IChjYXBhYiAmIElFRUU4MDIxMV9BRERCQV9QQVJBTV9USURfTUFTSykgPj4gMjsKKworCXN0YXRlID0gJnN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfdHhbdGlkXTsKKworCXNwaW5fbG9ja19iaCgmc3RhLT5sb2NrKTsKKworCWlmICghKCpzdGF0ZSAmIEhUX0FEREJBX1JFUVVFU1RFRF9NU0spKSB7CisJCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOworCQlyZXR1cm47CisJfQorCisJaWYgKG1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVzcC5kaWFsb2dfdG9rZW4gIT0KKwkJc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5kaWFsb2dfdG9rZW4pIHsKKwkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCisJCXByaW50ayhLRVJOX0RFQlVHICJ3cm9uZyBhZGRCQSByZXNwb25zZSB0b2tlbiwgdGlkICVkXG4iLCB0aWQpOworI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRyAqLworCQlyZXR1cm47CisJfQorCisJZGVsX3RpbWVyX3N5bmMoJnN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXS0+YWRkYmFfcmVzcF90aW1lcik7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCisJcHJpbnRrKEtFUk5fREVCVUcgInN3aXRjaGVkIG9mZiBhZGRCQSB0aW1lciBmb3IgdGlkICVkIFxuIiwgdGlkKTsKKyNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcgKi8KKwlpZiAobGUxNl90b19jcHUobWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXNwLnN0YXR1cykKKwkJCT09IFdMQU5fU1RBVFVTX1NVQ0NFU1MpIHsKKwkJdTggY3Vyc3RhdGUgPSAqc3RhdGU7CisKKwkJKnN0YXRlIHw9IEhUX0FEREJBX1JFQ0VJVkVEX01TSzsKKworCQlpZiAoaHctPmFtcGR1X3F1ZXVlcyAmJiAqc3RhdGUgIT0gY3Vyc3RhdGUgJiYKKwkJICAgICpzdGF0ZSA9PSBIVF9BR0dfU1RBVEVfT1BFUkFUSU9OQUwpIHsKKwkJCS8qCisJCQkgKiBXYWtlIHVwIHRoaXMgcXVldWUsIHdlIHN0b3BwZWQgaXQgZWFybGllciwKKwkJCSAqIHRoaXMgd2lsbCBpbiB0dXJuIHdha2UgdGhlIGVudGlyZSBBQy4KKwkJCSAqLworCQkJaWVlZTgwMjExX3dha2VfcXVldWVfYnlfcmVhc29uKGh3LAorCQkJCWh3LT5xdWV1ZXMgKyBzdGEtPnRpZF90b190eF9xW3RpZF0sCisJCQkJSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX0FHR1JFR0FUSU9OKTsKKwkJfQorCQlzdGEtPmFtcGR1X21sbWUuYWRkYmFfcmVxX251bVt0aWRdID0gMDsKKworCQlpZiAobG9jYWwtPm9wcy0+YW1wZHVfYWN0aW9uKSB7CisJCQkodm9pZClsb2NhbC0+b3BzLT5hbXBkdV9hY3Rpb24oaHcsCisJCQkJCSAgICAgICBJRUVFODAyMTFfQU1QRFVfVFhfUkVTVU1FLAorCQkJCQkgICAgICAgJnN0YS0+c3RhLCB0aWQsICZzdGFydF9zZXFfbnVtKTsKKwkJfQorI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRworCQlwcmludGsoS0VSTl9ERUJVRyAiUmVzdW1pbmcgVFggYWdncmVnYXRpb24gZm9yIHRpZCAlZFxuIiwgdGlkKTsKKyNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcgKi8KKwl9IGVsc2UgeworCQlzdGEtPmFtcGR1X21sbWUuYWRkYmFfcmVxX251bVt0aWRdKys7CisJCV9fX2llZWU4MDIxMV9zdG9wX3R4X2JhX3Nlc3Npb24oc3RhLCB0aWQsIFdMQU5fQkFDS19JTklUSUFUT1IpOworCX0KKwlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKK30KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9jZmcuYyBiL25ldC9tYWM4MDIxMS9jZmcuYwppbmRleCA5ZDRlNGQ4Li41ODY5M2U1IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvY2ZnLmMKKysrIGIvbmV0L21hYzgwMjExL2NmZy5jCkBAIC0xMzMsNiArMTMzLDkgQEAKIAljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX0NDTVA6CiAJCWFsZyA9IEFMR19DQ01QOwogCQlicmVhazsKKwljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX0FFU19DTUFDOgorCQlhbGcgPSBBTEdfQUVTX0NNQUM7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTI3NSw2ICsyNzgsMTcgQEAKIAkJZWxzZQogCQkJcGFyYW1zLmNpcGhlciA9IFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDEwNDsKIAkJYnJlYWs7CisJY2FzZSBBTEdfQUVTX0NNQUM6CisJCXBhcmFtcy5jaXBoZXIgPSBXTEFOX0NJUEhFUl9TVUlURV9BRVNfQ01BQzsKKwkJc2VxWzBdID0ga2V5LT51LmFlc19jbWFjLnR4X3BuWzVdOworCQlzZXFbMV0gPSBrZXktPnUuYWVzX2NtYWMudHhfcG5bNF07CisJCXNlcVsyXSA9IGtleS0+dS5hZXNfY21hYy50eF9wblszXTsKKwkJc2VxWzNdID0ga2V5LT51LmFlc19jbWFjLnR4X3BuWzJdOworCQlzZXFbNF0gPSBrZXktPnUuYWVzX2NtYWMudHhfcG5bMV07CisJCXNlcVs1XSA9IGtleS0+dS5hZXNfY21hYy50eF9wblswXTsKKwkJcGFyYW1zLnNlcSA9IHNlcTsKKwkJcGFyYW1zLnNlcV9sZW4gPSA2OworCQlicmVhazsKIAl9CiAKIAlwYXJhbXMua2V5ID0ga2V5LT5jb25mLmtleTsKQEAgLTMwNCw2ICszMTgsMjIgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBpZWVlODAyMTFfY29uZmlnX2RlZmF1bHRfbWdtdF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCQkJICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCQkgICAgIHU4IGtleV9pZHgpCit7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisKKwlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CisJaWVlZTgwMjExX3NldF9kZWZhdWx0X21nbXRfa2V5KHNkYXRhLCBrZXlfaWR4KTsKKworCXJjdV9yZWFkX3VubG9jaygpOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyB2b2lkIHN0YV9zZXRfc2luZm8oc3RydWN0IHN0YV9pbmZvICpzdGEsIHN0cnVjdCBzdGF0aW9uX2luZm8gKnNpbmZvKQogewogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gc3RhLT5zZGF0YTsKQEAgLTMxMSwxMSArMzQxLDE1IEBACiAJc2luZm8tPmZpbGxlZCA9IFNUQVRJT05fSU5GT19JTkFDVElWRV9USU1FIHwKIAkJCVNUQVRJT05fSU5GT19SWF9CWVRFUyB8CiAJCQlTVEFUSU9OX0lORk9fVFhfQllURVMgfAorCQkJU1RBVElPTl9JTkZPX1JYX1BBQ0tFVFMgfAorCQkJU1RBVElPTl9JTkZPX1RYX1BBQ0tFVFMgfAogCQkJU1RBVElPTl9JTkZPX1RYX0JJVFJBVEU7CiAKIAlzaW5mby0+aW5hY3RpdmVfdGltZSA9IGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtIHN0YS0+bGFzdF9yeCk7CiAJc2luZm8tPnJ4X2J5dGVzID0gc3RhLT5yeF9ieXRlczsKIAlzaW5mby0+dHhfYnl0ZXMgPSBzdGEtPnR4X2J5dGVzOworCXNpbmZvLT5yeF9wYWNrZXRzID0gc3RhLT5yeF9wYWNrZXRzOworCXNpbmZvLT50eF9wYWNrZXRzID0gc3RhLT50eF9wYWNrZXRzOwogCiAJaWYgKHN0YS0+bG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1NJR05BTF9EQk0pIHsKIAkJc2luZm8tPmZpbGxlZCB8PSBTVEFUSU9OX0lORk9fU0lHTkFMOwpAQCAtNDE3LDcgKzQ1MSw4IEBACiAJICogVGhpcyBpcyBhIGtsdWRnZS4gYmVhY29uIGludGVydmFsIHNob3VsZCByZWFsbHkgYmUgcGFydAogCSAqIG9mIHRoZSBiZWFjb24gaW5mb3JtYXRpb24uCiAJICovCi0JaWYgKHBhcmFtcy0+aW50ZXJ2YWwpIHsKKwlpZiAocGFyYW1zLT5pbnRlcnZhbCAmJiAoc2RhdGEtPmxvY2FsLT5ody5jb25mLmJlYWNvbl9pbnQgIT0KKwkJCQkgcGFyYW1zLT5pbnRlcnZhbCkpIHsKIAkJc2RhdGEtPmxvY2FsLT5ody5jb25mLmJlYWNvbl9pbnQgPSBwYXJhbXMtPmludGVydmFsOwogCQllcnIgPSBpZWVlODAyMTFfaHdfY29uZmlnKHNkYXRhLT5sb2NhbCwKIAkJCQkJSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0JFQUNPTl9JTlRFUlZBTCk7CkBAIC00OTMsNyArNTI4LDggQEAKIAogCWtmcmVlKG9sZCk7CiAKLQlyZXR1cm4gaWVlZTgwMjExX2lmX2NvbmZpZyhzZGF0YSwgSUVFRTgwMjExX0lGQ0NfQkVBQ09OKTsKKwlyZXR1cm4gaWVlZTgwMjExX2lmX2NvbmZpZyhzZGF0YSwgSUVFRTgwMjExX0lGQ0NfQkVBQ09OIHwKKwkJCQkJICBJRUVFODAyMTFfSUZDQ19CRUFDT05fRU5BQkxFRCk7CiB9CiAKIHN0YXRpYyBpbnQgaWVlZTgwMjExX2FkZF9iZWFjb24oc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKQEAgLTU1Myw3ICs1ODksNyBAQAogCXN5bmNocm9uaXplX3JjdSgpOwogCWtmcmVlKG9sZCk7CiAKLQlyZXR1cm4gaWVlZTgwMjExX2lmX2NvbmZpZyhzZGF0YSwgSUVFRTgwMjExX0lGQ0NfQkVBQ09OKTsKKwlyZXR1cm4gaWVlZTgwMjExX2lmX2NvbmZpZyhzZGF0YSwgSUVFRTgwMjExX0lGQ0NfQkVBQ09OX0VOQUJMRUQpOwogfQogCiAvKiBMYXllciAyIFVwZGF0ZSBmcmFtZSAoODAyLjIgVHlwZSAxIExMQyBYSUQgVXBkYXRlIHJlc3BvbnNlKSAqLwpAQCAtNjMwLDYgKzY2NiwxMCBAQAogCQlzdGEtPmZsYWdzICY9IH5XTEFOX1NUQV9XTUU7CiAJCWlmIChwYXJhbXMtPnN0YXRpb25fZmxhZ3MgJiBTVEFUSU9OX0ZMQUdfV01FKQogCQkJc3RhLT5mbGFncyB8PSBXTEFOX1NUQV9XTUU7CisKKwkJc3RhLT5mbGFncyAmPSB+V0xBTl9TVEFfTUZQOworCQlpZiAocGFyYW1zLT5zdGF0aW9uX2ZsYWdzICYgU1RBVElPTl9GTEFHX01GUCkKKwkJCXN0YS0+ZmxhZ3MgfD0gV0xBTl9TVEFfTUZQOwogCQlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKIAl9CiAKQEAgLTExNDEsNiArMTE4MSwxMjUgQEAKIAlyZXR1cm4gaWVlZTgwMjExX2h3X2NvbmZpZyhsb2NhbCwgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0NIQU5ORUwpOwogfQogCitzdGF0aWMgaW50IHNldF9tZ210X2V4dHJhX2llX3N0YShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCQkgdTggc3VidHlwZSwgdTggKmllcywgc2l6ZV90IGllc19sZW4pCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CisKKwlzd2l0Y2ggKHN1YnR5cGUpIHsKKwljYXNlIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVEgPj4gNDoKKwkJaWYgKGxvY2FsLT5vcHMtPmh3X3NjYW4pCisJCQlicmVhazsKKwkJa2ZyZWUoaWZtZ2QtPmllX3Byb2JlcmVxKTsKKwkJaWZtZ2QtPmllX3Byb2JlcmVxID0gaWVzOworCQlpZm1nZC0+aWVfcHJvYmVyZXFfbGVuID0gaWVzX2xlbjsKKwkJcmV0dXJuIDA7CisJY2FzZSBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUCA+PiA0OgorCQlrZnJlZShpZm1nZC0+aWVfcHJvYmVyZXNwKTsKKwkJaWZtZ2QtPmllX3Byb2JlcmVzcCA9IGllczsKKwkJaWZtZ2QtPmllX3Byb2JlcmVzcF9sZW4gPSBpZXNfbGVuOworCQlyZXR1cm4gMDsKKwljYXNlIElFRUU4MDIxMV9TVFlQRV9BVVRIID4+IDQ6CisJCWtmcmVlKGlmbWdkLT5pZV9hdXRoKTsKKwkJaWZtZ2QtPmllX2F1dGggPSBpZXM7CisJCWlmbWdkLT5pZV9hdXRoX2xlbiA9IGllc19sZW47CisJCXJldHVybiAwOworCWNhc2UgSUVFRTgwMjExX1NUWVBFX0FTU09DX1JFUSA+PiA0OgorCQlrZnJlZShpZm1nZC0+aWVfYXNzb2NyZXEpOworCQlpZm1nZC0+aWVfYXNzb2NyZXEgPSBpZXM7CisJCWlmbWdkLT5pZV9hc3NvY3JlcV9sZW4gPSBpZXNfbGVuOworCQlyZXR1cm4gMDsKKwljYXNlIElFRUU4MDIxMV9TVFlQRV9SRUFTU09DX1JFUSA+PiA0OgorCQlrZnJlZShpZm1nZC0+aWVfcmVhc3NvY3JlcSk7CisJCWlmbWdkLT5pZV9yZWFzc29jcmVxID0gaWVzOworCQlpZm1nZC0+aWVfcmVhc3NvY3JlcV9sZW4gPSBpZXNfbGVuOworCQlyZXR1cm4gMDsKKwljYXNlIElFRUU4MDIxMV9TVFlQRV9ERUFVVEggPj4gNDoKKwkJa2ZyZWUoaWZtZ2QtPmllX2RlYXV0aCk7CisJCWlmbWdkLT5pZV9kZWF1dGggPSBpZXM7CisJCWlmbWdkLT5pZV9kZWF1dGhfbGVuID0gaWVzX2xlbjsKKwkJcmV0dXJuIDA7CisJY2FzZSBJRUVFODAyMTFfU1RZUEVfRElTQVNTT0MgPj4gNDoKKwkJa2ZyZWUoaWZtZ2QtPmllX2Rpc2Fzc29jKTsKKwkJaWZtZ2QtPmllX2Rpc2Fzc29jID0gaWVzOworCQlpZm1nZC0+aWVfZGlzYXNzb2NfbGVuID0gaWVzX2xlbjsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIC1FT1BOT1RTVVBQOworfQorCitzdGF0aWMgaW50IGllZWU4MDIxMV9zZXRfbWdtdF9leHRyYV9pZShzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJCSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgICAgICBzdHJ1Y3QgbWdtdF9leHRyYV9pZV9wYXJhbXMgKnBhcmFtcykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKKwl1OCAqaWVzOworCXNpemVfdCBpZXNfbGVuOworCWludCByZXQgPSAtRU9QTk9UU1VQUDsKKworCWlmIChwYXJhbXMtPmllcykgeworCQlpZXMgPSBrbWVtZHVwKHBhcmFtcy0+aWVzLCBwYXJhbXMtPmllc19sZW4sIEdGUF9LRVJORUwpOworCQlpZiAoaWVzID09IE5VTEwpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJaWVzX2xlbiA9IHBhcmFtcy0+aWVzX2xlbjsKKwl9IGVsc2UgeworCQlpZXMgPSBOVUxMOworCQlpZXNfbGVuID0gMDsKKwl9CisKKwlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CisKKwlzd2l0Y2ggKHNkYXRhLT52aWYudHlwZSkgeworCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKKwkJcmV0ID0gc2V0X21nbXRfZXh0cmFfaWVfc3RhKHNkYXRhLCBwYXJhbXMtPnN1YnR5cGUsCisJCQkJCSAgICBpZXMsIGllc19sZW4pOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSAtRU9QTk9UU1VQUDsKKwkJYnJlYWs7CisJfQorCisJaWYgKHJldCkKKwkJa2ZyZWUoaWVzKTsKKwlyZXR1cm4gcmV0OworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IGllZWU4MDIxMV9zdXNwZW5kKHN0cnVjdCB3aXBoeSAqd2lwaHkpCit7CisJcmV0dXJuIF9faWVlZTgwMjExX3N1c3BlbmQod2lwaHlfcHJpdih3aXBoeSkpOworfQorCitzdGF0aWMgaW50IGllZWU4MDIxMV9yZXN1bWUoc3RydWN0IHdpcGh5ICp3aXBoeSkKK3sKKwlyZXR1cm4gX19pZWVlODAyMTFfcmVzdW1lKHdpcGh5X3ByaXYod2lwaHkpKTsKK30KKyNlbHNlCisjZGVmaW5lIGllZWU4MDIxMV9zdXNwZW5kIE5VTEwKKyNkZWZpbmUgaWVlZTgwMjExX3Jlc3VtZSBOVUxMCisjZW5kaWYKKworc3RhdGljIGludCBpZWVlODAyMTFfc2NhbihzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICBzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpyZXEpCit7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CisKKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJcmV0dXJuIC1FTkVURE9XTjsKKworCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKKworCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiAmJgorCSAgICBzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgJiYKKwkgICAgc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCXJldHVybiBpZWVlODAyMTFfcmVxdWVzdF9zY2FuKHNkYXRhLCByZXEpOworfQorCiBzdHJ1Y3QgY2ZnODAyMTFfb3BzIG1hYzgwMjExX2NvbmZpZ19vcHMgPSB7CiAJLmFkZF92aXJ0dWFsX2ludGYgPSBpZWVlODAyMTFfYWRkX2lmYWNlLAogCS5kZWxfdmlydHVhbF9pbnRmID0gaWVlZTgwMjExX2RlbF9pZmFjZSwKQEAgLTExNDksNiArMTMwOCw3IEBACiAJLmRlbF9rZXkgPSBpZWVlODAyMTFfZGVsX2tleSwKIAkuZ2V0X2tleSA9IGllZWU4MDIxMV9nZXRfa2V5LAogCS5zZXRfZGVmYXVsdF9rZXkgPSBpZWVlODAyMTFfY29uZmlnX2RlZmF1bHRfa2V5LAorCS5zZXRfZGVmYXVsdF9tZ210X2tleSA9IGllZWU4MDIxMV9jb25maWdfZGVmYXVsdF9tZ210X2tleSwKIAkuYWRkX2JlYWNvbiA9IGllZWU4MDIxMV9hZGRfYmVhY29uLAogCS5zZXRfYmVhY29uID0gaWVlZTgwMjExX3NldF9iZWFjb24sCiAJLmRlbF9iZWFjb24gPSBpZWVlODAyMTFfZGVsX2JlYWNvbiwKQEAgLTExNjksNCArMTMyOSw4IEBACiAJLmNoYW5nZV9ic3MgPSBpZWVlODAyMTFfY2hhbmdlX2JzcywKIAkuc2V0X3R4cV9wYXJhbXMgPSBpZWVlODAyMTFfc2V0X3R4cV9wYXJhbXMsCiAJLnNldF9jaGFubmVsID0gaWVlZTgwMjExX3NldF9jaGFubmVsLAorCS5zZXRfbWdtdF9leHRyYV9pZSA9IGllZWU4MDIxMV9zZXRfbWdtdF9leHRyYV9pZSwKKwkuc3VzcGVuZCA9IGllZWU4MDIxMV9zdXNwZW5kLAorCS5yZXN1bWUgPSBpZWVlODAyMTFfcmVzdW1lLAorCS5zY2FuID0gaWVlZTgwMjExX3NjYW4sCiB9OwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2RlYnVnZnMuYyBiL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmMKaW5kZXggMjY5N2EyZi4uZTM3ZjU1NyAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2RlYnVnZnMuYworKysgYi9uZXQvbWFjODAyMTEvZGVidWdmcy5jCkBAIC01NywxMSArNTcsNjIgQEAKIAkJICAgICAgbG9jYWwtPmh3LmNvbmYubG9uZ19mcmFtZV9tYXhfdHhfY291bnQpOwogREVCVUdGU19SRUFET05MWV9GSUxFKHRvdGFsX3BzX2J1ZmZlcmVkLCAyMCwgIiVkIiwKIAkJICAgICAgbG9jYWwtPnRvdGFsX3BzX2J1ZmZlcmVkKTsKLURFQlVHRlNfUkVBRE9OTFlfRklMRSh3ZXBfaXYsIDIwLCAiJSMwNngiLAorREVCVUdGU19SRUFET05MWV9GSUxFKHdlcF9pdiwgMjAsICIlIzA4eCIsCiAJCSAgICAgIGxvY2FsLT53ZXBfaXYgJiAweGZmZmZmZik7CiBERUJVR0ZTX1JFQURPTkxZX0ZJTEUocmF0ZV9jdHJsX2FsZywgMTAwLCAiJXMiLAogCQkgICAgICBsb2NhbC0+cmF0ZV9jdHJsID8gbG9jYWwtPnJhdGVfY3RybC0+b3BzLT5uYW1lIDogIjx1bnNldD4iKTsKIAorc3RhdGljIHNzaXplX3QgdHNmX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCSAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJdTY0IHRzZiA9IDA7CisJY2hhciBidWZbMTAwXTsKKworCWlmIChsb2NhbC0+b3BzLT5nZXRfdHNmKQorCQl0c2YgPSBsb2NhbC0+b3BzLT5nZXRfdHNmKGxvY2FsX3RvX2h3KGxvY2FsKSk7CisKKwlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiMHglMDE2bGx4XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKSB0c2YpOworCisJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCAxOSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHRzZl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJdW5zaWduZWQgbG9uZyBsb25nIHRzZjsKKwljaGFyIGJ1ZlsxMDBdOworCXNpemVfdCBsZW47CisKKwlsZW4gPSBtaW4oY291bnQsIHNpemVvZihidWYpIC0gMSk7CisJaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgdXNlcl9idWYsIGxlbikpCisJCXJldHVybiAtRUZBVUxUOworCWJ1ZltsZW5dID0gJ1wwJzsKKworCWlmIChzdHJuY21wKGJ1ZiwgInJlc2V0IiwgNSkgPT0gMCkgeworCQlpZiAobG9jYWwtPm9wcy0+cmVzZXRfdHNmKSB7CisJCQlsb2NhbC0+b3BzLT5yZXNldF90c2YobG9jYWxfdG9faHcobG9jYWwpKTsKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBkZWJ1Z2ZzIHJlc2V0IFRTRlxuIiwgd2lwaHlfbmFtZShsb2NhbC0+aHcud2lwaHkpKTsKKwkJfQorCX0gZWxzZSB7CisJCXRzZiA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMCk7CisJCWlmIChsb2NhbC0+b3BzLT5zZXRfdHNmKSB7CisJCQlsb2NhbC0+b3BzLT5zZXRfdHNmKGxvY2FsX3RvX2h3KGxvY2FsKSwgdHNmKTsKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBkZWJ1Z2ZzIHNldCBUU0YgdG8gJSMwMThsbHhcbiIsIHdpcGh5X25hbWUobG9jYWwtPmh3LndpcGh5KSwgdHNmKTsKKwkJfQorCX0KKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdHNmX29wcyA9IHsKKwkucmVhZCA9IHRzZl9yZWFkLAorCS53cml0ZSA9IHRzZl93cml0ZSwKKwkub3BlbiA9IG1hYzgwMjExX29wZW5fZmlsZV9nZW5lcmljCit9OworCiAvKiBzdGF0aXN0aWNzIHN0dWZmICovCiAKICNkZWZpbmUgREVCVUdGU19TVEFUU19GSUxFKG5hbWUsIGJ1ZmxlbiwgZm10LCB2YWx1ZS4uLikJCQlcCkBAIC0xMzYsOCArMTg3LDYgQEAKIAkJICAgbG9jYWwtPmRvdDExTXVsdGljYXN0UmVjZWl2ZWRGcmFtZUNvdW50KTsKIERFQlVHRlNfU1RBVFNfRklMRSh0cmFuc21pdHRlZF9mcmFtZV9jb3VudCwgMjAsICIldSIsCiAJCSAgIGxvY2FsLT5kb3QxMVRyYW5zbWl0dGVkRnJhbWVDb3VudCk7Ci1ERUJVR0ZTX1NUQVRTX0ZJTEUod2VwX3VuZGVjcnlwdGFibGVfY291bnQsIDIwLCAiJXUiLAotCQkgICBsb2NhbC0+ZG90MTFXRVBVbmRlY3J5cHRhYmxlQ291bnQpOwogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR19DT1VOVEVSUwogREVCVUdGU19TVEFUU19GSUxFKHR4X2hhbmRsZXJzX2Ryb3AsIDIwLCAiJXUiLAogCQkgICBsb2NhbC0+dHhfaGFuZGxlcnNfZHJvcCk7CkBAIC0yMDQsNiArMjUzLDcgQEAKIAlERUJVR0ZTX0FERChsb25nX3JldHJ5X2xpbWl0KTsKIAlERUJVR0ZTX0FERCh0b3RhbF9wc19idWZmZXJlZCk7CiAJREVCVUdGU19BREQod2VwX2l2KTsKKwlERUJVR0ZTX0FERCh0c2YpOwogCiAJc3RhdHNkID0gZGVidWdmc19jcmVhdGVfZGlyKCJzdGF0aXN0aWNzIiwgcGh5ZCk7CiAJbG9jYWwtPmRlYnVnZnMuc3RhdGlzdGljcyA9IHN0YXRzZDsKQEAgLTIyMSw3ICsyNzEsNiBAQAogCURFQlVHRlNfU1RBVFNfQUREKHJlY2VpdmVkX2ZyYWdtZW50X2NvdW50KTsKIAlERUJVR0ZTX1NUQVRTX0FERChtdWx0aWNhc3RfcmVjZWl2ZWRfZnJhbWVfY291bnQpOwogCURFQlVHRlNfU1RBVFNfQUREKHRyYW5zbWl0dGVkX2ZyYW1lX2NvdW50KTsKLQlERUJVR0ZTX1NUQVRTX0FERCh3ZXBfdW5kZWNyeXB0YWJsZV9jb3VudCk7CiAjaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHX0NPVU5URVJTCiAJREVCVUdGU19TVEFUU19BREQodHhfaGFuZGxlcnNfZHJvcCk7CiAJREVCVUdGU19TVEFUU19BREQodHhfaGFuZGxlcnNfcXVldWVkKTsKQEAgLTI1OCw2ICszMDcsNyBAQAogCURFQlVHRlNfREVMKGxvbmdfcmV0cnlfbGltaXQpOwogCURFQlVHRlNfREVMKHRvdGFsX3BzX2J1ZmZlcmVkKTsKIAlERUJVR0ZTX0RFTCh3ZXBfaXYpOworCURFQlVHRlNfREVMKHRzZik7CiAKIAlERUJVR0ZTX1NUQVRTX0RFTCh0cmFuc21pdHRlZF9mcmFnbWVudF9jb3VudCk7CiAJREVCVUdGU19TVEFUU19ERUwobXVsdGljYXN0X3RyYW5zbWl0dGVkX2ZyYW1lX2NvdW50KTsKQEAgLTI2OCw3ICszMTgsNiBAQAogCURFQlVHRlNfU1RBVFNfREVMKHJlY2VpdmVkX2ZyYWdtZW50X2NvdW50KTsKIAlERUJVR0ZTX1NUQVRTX0RFTChtdWx0aWNhc3RfcmVjZWl2ZWRfZnJhbWVfY291bnQpOwogCURFQlVHRlNfU1RBVFNfREVMKHRyYW5zbWl0dGVkX2ZyYW1lX2NvdW50KTsKLQlERUJVR0ZTX1NUQVRTX0RFTCh3ZXBfdW5kZWNyeXB0YWJsZV9jb3VudCk7CiAJREVCVUdGU19TVEFUU19ERUwobnVtX3NjYW5zKTsKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdfQ09VTlRFUlMKIAlERUJVR0ZTX1NUQVRTX0RFTCh0eF9oYW5kbGVyc19kcm9wKTsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX2tleS5jIGIvbmV0L21hYzgwMjExL2RlYnVnZnNfa2V5LmMKaW5kZXggNjQyNGFjNS4uOTljNzUyNSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2RlYnVnZnNfa2V5LmMKKysrIGIvbmV0L21hYzgwMjExL2RlYnVnZnNfa2V5LmMKQEAgLTc2LDYgKzc2LDkgQEAKIAljYXNlIEFMR19DQ01QOgogCQlhbGcgPSAiQ0NNUFxuIjsKIAkJYnJlYWs7CisJY2FzZSBBTEdfQUVTX0NNQUM6CisJCWFsZyA9ICJBRVMtMTI4LUNNQUNcbiI7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAwOwogCX0KQEAgLTEwNSw2ICsxMDgsMTIgQEAKIAkJbGVuID0gc2NucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnhcbiIsCiAJCQkJdHBuWzBdLCB0cG5bMV0sIHRwblsyXSwgdHBuWzNdLCB0cG5bNF0sIHRwbls1XSk7CiAJCWJyZWFrOworCWNhc2UgQUxHX0FFU19DTUFDOgorCQl0cG4gPSBrZXktPnUuYWVzX2NtYWMudHhfcG47CisJCWxlbiA9IHNjbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4XG4iLAorCQkJCXRwblswXSwgdHBuWzFdLCB0cG5bMl0sIHRwblszXSwgdHBuWzRdLAorCQkJCXRwbls1XSk7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAwOwogCX0KQEAgLTE0Miw2ICsxNTEsMTQgQEAKIAkJfQogCQlsZW4gPSBwIC0gYnVmOwogCQlicmVhazsKKwljYXNlIEFMR19BRVNfQ01BQzoKKwkJcnBuID0ga2V5LT51LmFlc19jbWFjLnJ4X3BuOworCQlwICs9IHNjbnByaW50ZihwLCBzaXplb2YoYnVmKStidWYtcCwKKwkJCSAgICAgICAiJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4XG4iLAorCQkJICAgICAgIHJwblswXSwgcnBuWzFdLCBycG5bMl0sCisJCQkgICAgICAgcnBuWzNdLCBycG5bNF0sIHJwbls1XSk7CisJCWxlbiA9IHAgLSBidWY7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAwOwogCX0KQEAgLTE1NiwxMyArMTczLDQwIEBACiAJY2hhciBidWZbMjBdOwogCWludCBsZW47CiAKLQlpZiAoa2V5LT5jb25mLmFsZyAhPSBBTEdfQ0NNUCkKKwlzd2l0Y2ggKGtleS0+Y29uZi5hbGcpIHsKKwljYXNlIEFMR19DQ01QOgorCQlsZW4gPSBzY25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiV1XG4iLCBrZXktPnUuY2NtcC5yZXBsYXlzKTsKKwkJYnJlYWs7CisJY2FzZSBBTEdfQUVTX0NNQUM6CisJCWxlbiA9IHNjbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXVcbiIsCisJCQkJa2V5LT51LmFlc19jbWFjLnJlcGxheXMpOworCQlicmVhazsKKwlkZWZhdWx0OgogCQlyZXR1cm4gMDsKLQlsZW4gPSBzY25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiV1XG4iLCBrZXktPnUuY2NtcC5yZXBsYXlzKTsKKwl9CiAJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJidWYsIGNvdW50LCBwcG9zLCBidWYsIGxlbik7CiB9CiBLRVlfT1BTKHJlcGxheXMpOwogCitzdGF0aWMgc3NpemVfdCBrZXlfaWN2ZXJyb3JzX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyYnVmLAorCQkJCSAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwljaGFyIGJ1ZlsyMF07CisJaW50IGxlbjsKKworCXN3aXRjaCAoa2V5LT5jb25mLmFsZykgeworCWNhc2UgQUxHX0FFU19DTUFDOgorCQlsZW4gPSBzY25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiV1XG4iLAorCQkJCWtleS0+dS5hZXNfY21hYy5pY3ZlcnJvcnMpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJidWYsIGNvdW50LCBwcG9zLCBidWYsIGxlbik7Cit9CitLRVlfT1BTKGljdmVycm9ycyk7CisKIHN0YXRpYyBzc2l6ZV90IGtleV9rZXlfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJidWYsCiAJCQkgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CkBAIC0yMjIsNiArMjY2LDcgQEAKIAlERUJVR0ZTX0FERCh0eF9zcGVjKTsKIAlERUJVR0ZTX0FERChyeF9zcGVjKTsKIAlERUJVR0ZTX0FERChyZXBsYXlzKTsKKwlERUJVR0ZTX0FERChpY3ZlcnJvcnMpOwogCURFQlVHRlNfQUREKGtleSk7CiAJREVCVUdGU19BREQoaWZpbmRleCk7CiB9OwpAQCAtMjQzLDYgKzI4OCw3IEBACiAJREVCVUdGU19ERUwodHhfc3BlYyk7CiAJREVCVUdGU19ERUwocnhfc3BlYyk7CiAJREVCVUdGU19ERUwocmVwbGF5cyk7CisJREVCVUdGU19ERUwoaWN2ZXJyb3JzKTsKIAlERUJVR0ZTX0RFTChrZXkpOwogCURFQlVHRlNfREVMKGlmaW5kZXgpOwogCkBAIC0yODAsNiArMzI2LDM1IEBACiAJc2RhdGEtPmNvbW1vbl9kZWJ1Z2ZzLmRlZmF1bHRfa2V5ID0gTlVMTDsKIH0KIAordm9pZCBpZWVlODAyMTFfZGVidWdmc19rZXlfYWRkX21nbXRfZGVmYXVsdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKK3sKKwljaGFyIGJ1Zls1MF07CisJc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleTsKKworCWlmICghc2RhdGEtPmRlYnVnZnNkaXIpCisJCXJldHVybjsKKworCS8qIHRoaXMgaXMgcnVubmluZyB1bmRlciB0aGUga2V5IGxvY2sgKi8KKworCWtleSA9IHNkYXRhLT5kZWZhdWx0X21nbXRfa2V5OworCWlmIChrZXkpIHsKKwkJc3ByaW50ZihidWYsICIuLi9rZXlzLyVkIiwga2V5LT5kZWJ1Z2ZzLmNudCk7CisJCXNkYXRhLT5jb21tb25fZGVidWdmcy5kZWZhdWx0X21nbXRfa2V5ID0KKwkJCWRlYnVnZnNfY3JlYXRlX3N5bWxpbmsoImRlZmF1bHRfbWdtdF9rZXkiLAorCQkJCQkgICAgICAgc2RhdGEtPmRlYnVnZnNkaXIsIGJ1Zik7CisJfSBlbHNlCisJCWllZWU4MDIxMV9kZWJ1Z2ZzX2tleV9yZW1vdmVfbWdtdF9kZWZhdWx0KHNkYXRhKTsKK30KKwordm9pZCBpZWVlODAyMTFfZGVidWdmc19rZXlfcmVtb3ZlX21nbXRfZGVmYXVsdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKK3sKKwlpZiAoIXNkYXRhKQorCQlyZXR1cm47CisKKwlkZWJ1Z2ZzX3JlbW92ZShzZGF0YS0+Y29tbW9uX2RlYnVnZnMuZGVmYXVsdF9tZ210X2tleSk7CisJc2RhdGEtPmNvbW1vbl9kZWJ1Z2ZzLmRlZmF1bHRfbWdtdF9rZXkgPSBOVUxMOworfQorCiB2b2lkIGllZWU4MDIxMV9kZWJ1Z2ZzX2tleV9zdGFfZGVsKHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXksCiAJCQkJICAgc3RydWN0IHN0YV9pbmZvICpzdGEpCiB7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvZGVidWdmc19rZXkuaCBiL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX2tleS5oCmluZGV4IGIxYTM3NTQuLjU0NzE3YjQgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX2tleS5oCisrKyBiL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX2tleS5oCkBAIC02LDYgKzYsMTAgQEAKIHZvaWQgaWVlZTgwMjExX2RlYnVnZnNfa2V5X3JlbW92ZShzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5KTsKIHZvaWQgaWVlZTgwMjExX2RlYnVnZnNfa2V5X2FkZF9kZWZhdWx0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKIHZvaWQgaWVlZTgwMjExX2RlYnVnZnNfa2V5X3JlbW92ZV9kZWZhdWx0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKK3ZvaWQgaWVlZTgwMjExX2RlYnVnZnNfa2V5X2FkZF9tZ210X2RlZmF1bHQoCisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOwordm9pZCBpZWVlODAyMTFfZGVidWdmc19rZXlfcmVtb3ZlX21nbXRfZGVmYXVsdCgKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7CiB2b2lkIGllZWU4MDIxMV9kZWJ1Z2ZzX2tleV9zdGFfZGVsKHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXksCiAJCQkJICAgc3RydWN0IHN0YV9pbmZvICpzdGEpOwogI2Vsc2UKQEAgLTE5LDYgKzIzLDEyIEBACiBzdGF0aWMgaW5saW5lIHZvaWQgaWVlZTgwMjExX2RlYnVnZnNfa2V5X3JlbW92ZV9kZWZhdWx0KAogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQoge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBpZWVlODAyMTFfZGVidWdmc19rZXlfYWRkX21nbXRfZGVmYXVsdCgKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKK3t9CitzdGF0aWMgaW5saW5lIHZvaWQgaWVlZTgwMjExX2RlYnVnZnNfa2V5X3JlbW92ZV9tZ210X2RlZmF1bHQoCisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCit7fQogc3RhdGljIGlubGluZSB2b2lkIGllZWU4MDIxMV9kZWJ1Z2ZzX2tleV9zdGFfZGVsKHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXksCiAJCQkJCQkgc3RydWN0IHN0YV9pbmZvICpzdGEpCiB7fQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2LmMgYi9uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYwppbmRleCBjNTQyMTkzLi5lMzQyMDMyIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYworKysgYi9uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYwpAQCAtOTQsMzEgKzk0LDMxIEBACiBJRUVFODAyMTFfSUZfRklMRShmb3JjZV91bmljYXN0X3JhdGVpZHgsIGZvcmNlX3VuaWNhc3RfcmF0ZWlkeCwgREVDKTsKIElFRUU4MDIxMV9JRl9GSUxFKG1heF9yYXRlY3RybF9yYXRlaWR4LCBtYXhfcmF0ZWN0cmxfcmF0ZWlkeCwgREVDKTsKIAotLyogU1RBL0lCU1MgYXR0cmlidXRlcyAqLwotSUVFRTgwMjExX0lGX0ZJTEUoc3RhdGUsIHUuc3RhLnN0YXRlLCBERUMpOwotSUVFRTgwMjExX0lGX0ZJTEUoYnNzaWQsIHUuc3RhLmJzc2lkLCBNQUMpOwotSUVFRTgwMjExX0lGX0ZJTEUocHJldl9ic3NpZCwgdS5zdGEucHJldl9ic3NpZCwgTUFDKTsKLUlFRUU4MDIxMV9JRl9GSUxFKHNzaWRfbGVuLCB1LnN0YS5zc2lkX2xlbiwgU0laRSk7Ci1JRUVFODAyMTFfSUZfRklMRShhaWQsIHUuc3RhLmFpZCwgREVDKTsKLUlFRUU4MDIxMV9JRl9GSUxFKGFwX2NhcGFiLCB1LnN0YS5hcF9jYXBhYiwgSEVYKTsKLUlFRUU4MDIxMV9JRl9GSUxFKGNhcGFiLCB1LnN0YS5jYXBhYiwgSEVYKTsKLUlFRUU4MDIxMV9JRl9GSUxFKGV4dHJhX2llX2xlbiwgdS5zdGEuZXh0cmFfaWVfbGVuLCBTSVpFKTsKLUlFRUU4MDIxMV9JRl9GSUxFKGF1dGhfdHJpZXMsIHUuc3RhLmF1dGhfdHJpZXMsIERFQyk7Ci1JRUVFODAyMTFfSUZfRklMRShhc3NvY190cmllcywgdS5zdGEuYXNzb2NfdHJpZXMsIERFQyk7Ci1JRUVFODAyMTFfSUZfRklMRShhdXRoX2FsZ3MsIHUuc3RhLmF1dGhfYWxncywgSEVYKTsKLUlFRUU4MDIxMV9JRl9GSUxFKGF1dGhfYWxnLCB1LnN0YS5hdXRoX2FsZywgREVDKTsKLUlFRUU4MDIxMV9JRl9GSUxFKGF1dGhfdHJhbnNhY3Rpb24sIHUuc3RhLmF1dGhfdHJhbnNhY3Rpb24sIERFQyk7CisvKiBTVEEgYXR0cmlidXRlcyAqLworSUVFRTgwMjExX0lGX0ZJTEUoc3RhdGUsIHUubWdkLnN0YXRlLCBERUMpOworSUVFRTgwMjExX0lGX0ZJTEUoYnNzaWQsIHUubWdkLmJzc2lkLCBNQUMpOworSUVFRTgwMjExX0lGX0ZJTEUocHJldl9ic3NpZCwgdS5tZ2QucHJldl9ic3NpZCwgTUFDKTsKK0lFRUU4MDIxMV9JRl9GSUxFKHNzaWRfbGVuLCB1Lm1nZC5zc2lkX2xlbiwgU0laRSk7CitJRUVFODAyMTFfSUZfRklMRShhaWQsIHUubWdkLmFpZCwgREVDKTsKK0lFRUU4MDIxMV9JRl9GSUxFKGFwX2NhcGFiLCB1Lm1nZC5hcF9jYXBhYiwgSEVYKTsKK0lFRUU4MDIxMV9JRl9GSUxFKGNhcGFiLCB1Lm1nZC5jYXBhYiwgSEVYKTsKK0lFRUU4MDIxMV9JRl9GSUxFKGV4dHJhX2llX2xlbiwgdS5tZ2QuZXh0cmFfaWVfbGVuLCBTSVpFKTsKK0lFRUU4MDIxMV9JRl9GSUxFKGF1dGhfdHJpZXMsIHUubWdkLmF1dGhfdHJpZXMsIERFQyk7CitJRUVFODAyMTFfSUZfRklMRShhc3NvY190cmllcywgdS5tZ2QuYXNzb2NfdHJpZXMsIERFQyk7CitJRUVFODAyMTFfSUZfRklMRShhdXRoX2FsZ3MsIHUubWdkLmF1dGhfYWxncywgSEVYKTsKK0lFRUU4MDIxMV9JRl9GSUxFKGF1dGhfYWxnLCB1Lm1nZC5hdXRoX2FsZywgREVDKTsKK0lFRUU4MDIxMV9JRl9GSUxFKGF1dGhfdHJhbnNhY3Rpb24sIHUubWdkLmF1dGhfdHJhbnNhY3Rpb24sIERFQyk7CiAKIHN0YXRpYyBzc2l6ZV90IGllZWU4MDIxMV9pZl9mbXRfZmxhZ3MoCiAJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGNoYXIgKmJ1ZiwgaW50IGJ1ZmxlbikKIHsKIAlyZXR1cm4gc2NucHJpbnRmKGJ1ZiwgYnVmbGVuLCAiJXMlcyVzJXMlcyVzJXNcbiIsCi0JCSBzZGF0YS0+dS5zdGEuZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1NTSURfU0VUID8gIlNTSURcbiIgOiAiIiwKLQkJIHNkYXRhLT51LnN0YS5mbGFncyAmIElFRUU4MDIxMV9TVEFfQlNTSURfU0VUID8gIkJTU0lEXG4iIDogIiIsCi0JCSBzZGF0YS0+dS5zdGEuZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1BSRVZfQlNTSURfU0VUID8gInByZXYgQlNTSURcbiIgOiAiIiwKLQkJIHNkYXRhLT51LnN0YS5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVVUSEVOVElDQVRFRCA/ICJBVVRIXG4iIDogIiIsCi0JCSBzZGF0YS0+dS5zdGEuZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FTU09DSUFURUQgPyAiQVNTT0NcbiIgOiAiIiwKLQkJIHNkYXRhLT51LnN0YS5mbGFncyAmIElFRUU4MDIxMV9TVEFfUFJPQkVSRVFfUE9MTCA/ICJQUk9CRVJFUSBQT0xMXG4iIDogIiIsCisJCSBzZGF0YS0+dS5tZ2QuZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1NTSURfU0VUID8gIlNTSURcbiIgOiAiIiwKKwkJIHNkYXRhLT51Lm1nZC5mbGFncyAmIElFRUU4MDIxMV9TVEFfQlNTSURfU0VUID8gIkJTU0lEXG4iIDogIiIsCisJCSBzZGF0YS0+dS5tZ2QuZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1BSRVZfQlNTSURfU0VUID8gInByZXYgQlNTSURcbiIgOiAiIiwKKwkJIHNkYXRhLT51Lm1nZC5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVVUSEVOVElDQVRFRCA/ICJBVVRIXG4iIDogIiIsCisJCSBzZGF0YS0+dS5tZ2QuZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FTU09DSUFURUQgPyAiQVNTT0NcbiIgOiAiIiwKKwkJIHNkYXRhLT51Lm1nZC5mbGFncyAmIElFRUU4MDIxMV9TVEFfUFJPQkVSRVFfUE9MTCA/ICJQUk9CRVJFUSBQT0xMXG4iIDogIiIsCiAJCSBzZGF0YS0+dmlmLmJzc19jb25mLnVzZV9jdHNfcHJvdCA/ICJDVFMgcHJvdFxuIiA6ICIiKTsKIH0KIF9fSUVFRTgwMjExX0lGX0ZJTEUoZmxhZ3MpOwpAQCAtMjgzLDkgKzI4MywxMSBAQAogI2VuZGlmCiAJCWJyZWFrOwogCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKLQljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgogCQlhZGRfc3RhX2ZpbGVzKHNkYXRhKTsKIAkJYnJlYWs7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKKwkJLyogWFhYICovCisJCWJyZWFrOwogCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6CiAJCWFkZF9hcF9maWxlcyhzZGF0YSk7CiAJCWJyZWFrOwpAQCAtNDE4LDkgKzQyMCwxMSBAQAogI2VuZGlmCiAJCWJyZWFrOwogCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKLQljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgogCQlkZWxfc3RhX2ZpbGVzKHNkYXRhKTsKIAkJYnJlYWs7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKKwkJLyogWFhYICovCisJCWJyZWFrOwogCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6CiAJCWRlbF9hcF9maWxlcyhzZGF0YSk7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2RlYnVnZnNfc3RhLmMgYi9uZXQvbWFjODAyMTEvZGVidWdmc19zdGEuYwppbmRleCBhMmZiZTAxLi45MDIzMGM3IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvZGVidWdmc19zdGEuYworKysgYi9uZXQvbWFjODAyMTEvZGVidWdmc19zdGEuYwpAQCAtNjcsMTQgKzY3LDE1IEBACiAJY2hhciBidWZbMTAwXTsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAl1MzIgc3RhZmxhZ3MgPSBnZXRfc3RhX2ZsYWdzKHN0YSk7Ci0JaW50IHJlcyA9IHNjbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXMlcyVzJXMlcyVzJXMiLAorCWludCByZXMgPSBzY25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVzJXMlcyVzJXMlcyVzJXMiLAogCQlzdGFmbGFncyAmIFdMQU5fU1RBX0FVVEggPyAiQVVUSFxuIiA6ICIiLAogCQlzdGFmbGFncyAmIFdMQU5fU1RBX0FTU09DID8gIkFTU09DXG4iIDogIiIsCiAJCXN0YWZsYWdzICYgV0xBTl9TVEFfUFMgPyAiUFNcbiIgOiAiIiwKIAkJc3RhZmxhZ3MgJiBXTEFOX1NUQV9BVVRIT1JJWkVEID8gIkFVVEhPUklaRURcbiIgOiAiIiwKIAkJc3RhZmxhZ3MgJiBXTEFOX1NUQV9TSE9SVF9QUkVBTUJMRSA/ICJTSE9SVCBQUkVBTUJMRVxuIiA6ICIiLAogCQlzdGFmbGFncyAmIFdMQU5fU1RBX1dNRSA/ICJXTUVcbiIgOiAiIiwKLQkJc3RhZmxhZ3MgJiBXTEFOX1NUQV9XRFMgPyAiV0RTXG4iIDogIiIpOworCQlzdGFmbGFncyAmIFdMQU5fU1RBX1dEUyA/ICJXRFNcbiIgOiAiIiwKKwkJc3RhZmxhZ3MgJiBXTEFOX1NUQV9NRlAgPyAiTUZQXG4iIDogIiIpOwogCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyYnVmLCBjb3VudCwgcHBvcywgYnVmLCByZXMpOwogfQogU1RBX09QUyhmbGFncyk7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaHQuYyBiL25ldC9tYWM4MDIxMS9odC5jCmluZGV4IGM1YzBjNTIuLjRlM2M3MmYgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9odC5jCisrKyBiL25ldC9tYWM4MDIxMS9odC5jCkBAIC0xNyw4ICsxNyw3IEBACiAjaW5jbHVkZSA8bmV0L3dpcmVsZXNzLmg+CiAjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CiAjaW5jbHVkZSAiaWVlZTgwMjExX2kuaCIKLSNpbmNsdWRlICJzdGFfaW5mby5oIgotI2luY2x1ZGUgIndtZS5oIgorI2luY2x1ZGUgInJhdGUuaCIKIAogdm9pZCBpZWVlODAyMTFfaHRfY2FwX2llX3RvX3N0YV9odF9jYXAoc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQsCiAJCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfaHRfY2FwICpodF9jYXBfaWUsCkBAIC05NSw3ICs5NCw5IEBACiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CiAJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAJc3RydWN0IGllZWU4MDIxMV9ic3NfaHRfY29uZiBodDsKKwlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKIAl1MzIgY2hhbmdlZCA9IDA7CiAJYm9vbCBlbmFibGVfaHQgPSB0cnVlLCBodF9jaGFuZ2VkOwogCWVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgY2hhbm5lbF90eXBlID0gTkw4MDIxMV9DSEFOX05PX0hUOwpAQCAtMTMwLDE0ICsxMzEsMjUgQEAKIAkJfQogCX0KIAotCWh0X2NoYW5nZWQgPSBsb2NhbC0+aHcuY29uZi5odC5lbmFibGVkICE9IGVuYWJsZV9odCB8fAotCQkgICAgIGNoYW5uZWxfdHlwZSAhPSBsb2NhbC0+aHcuY29uZi5odC5jaGFubmVsX3R5cGU7CisJaHRfY2hhbmdlZCA9IGNvbmZfaXNfaHQoJmxvY2FsLT5ody5jb25mKSAhPSBlbmFibGVfaHQgfHwKKwkJICAgICBjaGFubmVsX3R5cGUgIT0gbG9jYWwtPmh3LmNvbmYuY2hhbm5lbF90eXBlOwogCiAJbG9jYWwtPm9wZXJfY2hhbm5lbF90eXBlID0gY2hhbm5lbF90eXBlOwotCWxvY2FsLT5ody5jb25mLmh0LmVuYWJsZWQgPSBlbmFibGVfaHQ7CiAKLQlpZiAoaHRfY2hhbmdlZCkKLQkJaWVlZTgwMjExX2h3X2NvbmZpZyhsb2NhbCwgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0hUKTsKKwlpZiAoaHRfY2hhbmdlZCkgeworICAgICAgICAgICAgICAgIC8qIGNoYW5uZWxfdHlwZSBjaGFuZ2UgYXV0b21hdGljYWxseSBkZXRlY3RlZCAqLworCQlpZWVlODAyMTFfaHdfY29uZmlnKGxvY2FsLCAwKTsKKworCQlyY3VfcmVhZF9sb2NrKCk7CisKKwkJc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBpZm1nZC0+YnNzaWQpOworCQlpZiAoc3RhKQorCQkJcmF0ZV9jb250cm9sX3JhdGVfdXBkYXRlKGxvY2FsLCBzYmFuZCwgc3RhLAorCQkJCQkJIElFRUU4MDIxMV9SQ19IVF9DSEFOR0VEKTsKKworCQlyY3VfcmVhZF91bmxvY2soKTsKKworICAgICAgICB9CiAKIAkvKiBkaXNhYmxlIEhUICovCiAJaWYgKCFlbmFibGVfaHQpCkBAIC0xNTQsMTA4ICsxNjYsMjIgQEAKIAlyZXR1cm4gY2hhbmdlZDsKIH0KIAotc3RhdGljIHZvaWQgaWVlZTgwMjExX3NlbmRfYWRkYmFfcmVxdWVzdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkJIGNvbnN0IHU4ICpkYSwgdTE2IHRpZCwKLQkJCQkJIHU4IGRpYWxvZ190b2tlbiwgdTE2IHN0YXJ0X3NlcV9udW0sCi0JCQkJCSB1MTYgYWdnX3NpemUsIHUxNiB0aW1lb3V0KQordm9pZCBpZWVlODAyMTFfc3RhX3RlYXJfZG93bl9CQV9zZXNzaW9ucyhzdHJ1Y3Qgc3RhX2luZm8gKnN0YSkKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEgPSAmc2RhdGEtPnUuc3RhOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0Jc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OwotCXUxNiBjYXBhYjsKKwlpbnQgaTsKIAotCXNrYiA9IGRldl9hbGxvY19za2Ioc2l6ZW9mKCptZ210KSArIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7Ci0KLQlpZiAoIXNrYikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgYnVmZmVyICIKLQkJCQkiZm9yIGFkZGJhIHJlcXVlc3QgZnJhbWVcbiIsIHNkYXRhLT5kZXYtPm5hbWUpOwotCQlyZXR1cm47CisJZm9yIChpID0gMDsgaSA8ICBTVEFfVElEX05VTTsgaSsrKSB7CisJCV9faWVlZTgwMjExX3N0b3BfdHhfYmFfc2Vzc2lvbihzdGEsIGksIFdMQU5fQkFDS19JTklUSUFUT1IpOworCQlfX2llZWU4MDIxMV9zdG9wX3J4X2JhX3Nlc3Npb24oc3RhLCBpLCBXTEFOX0JBQ0tfUkVDSVBJRU5ULAorCQkJCQkgICAgICAgV0xBTl9SRUFTT05fUVNUQV9MRUFWRV9RQlNTKTsKIAl9Ci0Jc2tiX3Jlc2VydmUoc2tiLCBsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20pOwotCW1nbXQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopIHNrYl9wdXQoc2tiLCAyNCk7Ci0JbWVtc2V0KG1nbXQsIDAsIDI0KTsKLQltZW1jcHkobWdtdC0+ZGEsIGRhLCBFVEhfQUxFTik7Ci0JbWVtY3B5KG1nbXQtPnNhLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwotCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApCi0JCW1lbWNweShtZ210LT5ic3NpZCwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKLQllbHNlCi0JCW1lbWNweShtZ210LT5ic3NpZCwgaWZzdGEtPmJzc2lkLCBFVEhfQUxFTik7Ci0KLQltZ210LT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfAotCQkJCQkgIElFRUU4MDIxMV9TVFlQRV9BQ1RJT04pOwotCi0Jc2tiX3B1dChza2IsIDEgKyBzaXplb2YobWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXEpKTsKLQotCW1nbXQtPnUuYWN0aW9uLmNhdGVnb3J5ID0gV0xBTl9DQVRFR09SWV9CQUNLOwotCW1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVxLmFjdGlvbl9jb2RlID0gV0xBTl9BQ1RJT05fQUREQkFfUkVROwotCi0JbWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXEuZGlhbG9nX3Rva2VuID0gZGlhbG9nX3Rva2VuOwotCWNhcGFiID0gKHUxNikoMSA8PCAxKTsJCS8qIGJpdCAxIGFnZ3JlZ2F0aW9uIHBvbGljeSAqLwotCWNhcGFiIHw9ICh1MTYpKHRpZCA8PCAyKTsgCS8qIGJpdCA1OjIgVElEIG51bWJlciAqLwotCWNhcGFiIHw9ICh1MTYpKGFnZ19zaXplIDw8IDYpOwkvKiBiaXQgMTU6NiBtYXggc2l6ZSBvZiBhZ2dlcmdhdGlvbiAqLwotCi0JbWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXEuY2FwYWIgPSBjcHVfdG9fbGUxNihjYXBhYik7Ci0KLQltZ210LT51LmFjdGlvbi51LmFkZGJhX3JlcS50aW1lb3V0ID0gY3B1X3RvX2xlMTYodGltZW91dCk7Ci0JbWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXEuc3RhcnRfc2VxX251bSA9Ci0JCQkJCWNwdV90b19sZTE2KHN0YXJ0X3NlcV9udW0gPDwgNCk7Ci0KLQlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IsIDApOwogfQogCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfc2VuZF9hZGRiYV9yZXNwKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCB1OCAqZGEsIHUxNiB0aWQsCi0JCQkJICAgICAgdTggZGlhbG9nX3Rva2VuLCB1MTYgc3RhdHVzLCB1MTYgcG9saWN5LAotCQkJCSAgICAgIHUxNiBidWZfc2l6ZSwgdTE2IHRpbWVvdXQpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhID0gJnNkYXRhLT51LnN0YTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDsKLQl1MTYgY2FwYWI7Ci0KLQlza2IgPSBkZXZfYWxsb2Nfc2tiKHNpemVvZigqbWdtdCkgKyBsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20pOwotCi0JaWYgKCFza2IpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgYnVmZmVyICIKLQkJICAgICAgICJmb3IgYWRkYmEgcmVzcCBmcmFtZVxuIiwgc2RhdGEtPmRldi0+bmFtZSk7Ci0JCXJldHVybjsKLQl9Ci0KLQlza2JfcmVzZXJ2ZShza2IsIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7Ci0JbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiX3B1dChza2IsIDI0KTsKLQltZW1zZXQobWdtdCwgMCwgMjQpOwotCW1lbWNweShtZ210LT5kYSwgZGEsIEVUSF9BTEVOKTsKLQltZW1jcHkobWdtdC0+c2EsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7Ci0JaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkKLQkJbWVtY3B5KG1nbXQtPmJzc2lkLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwotCWVsc2UKLQkJbWVtY3B5KG1nbXQtPmJzc2lkLCBpZnN0YS0+YnNzaWQsIEVUSF9BTEVOKTsKLQltZ210LT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfAotCQkJCQkgIElFRUU4MDIxMV9TVFlQRV9BQ1RJT04pOwotCi0Jc2tiX3B1dChza2IsIDEgKyBzaXplb2YobWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXNwKSk7Ci0JbWdtdC0+dS5hY3Rpb24uY2F0ZWdvcnkgPSBXTEFOX0NBVEVHT1JZX0JBQ0s7Ci0JbWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXNwLmFjdGlvbl9jb2RlID0gV0xBTl9BQ1RJT05fQUREQkFfUkVTUDsKLQltZ210LT51LmFjdGlvbi51LmFkZGJhX3Jlc3AuZGlhbG9nX3Rva2VuID0gZGlhbG9nX3Rva2VuOwotCi0JY2FwYWIgPSAodTE2KShwb2xpY3kgPDwgMSk7CS8qIGJpdCAxIGFnZ3JlZ2F0aW9uIHBvbGljeSAqLwotCWNhcGFiIHw9ICh1MTYpKHRpZCA8PCAyKTsgCS8qIGJpdCA1OjIgVElEIG51bWJlciAqLwotCWNhcGFiIHw9ICh1MTYpKGJ1Zl9zaXplIDw8IDYpOwkvKiBiaXQgMTU6NiBtYXggc2l6ZSBvZiBhZ2dyZWdhdGlvbiAqLwotCi0JbWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXNwLmNhcGFiID0gY3B1X3RvX2xlMTYoY2FwYWIpOwotCW1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVzcC50aW1lb3V0ID0gY3B1X3RvX2xlMTYodGltZW91dCk7Ci0JbWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXNwLnN0YXR1cyA9IGNwdV90b19sZTE2KHN0YXR1cyk7Ci0KLQlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IsIDApOwotfQotCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfc2VuZF9kZWxiYShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkgY29uc3QgdTggKmRhLCB1MTYgdGlkLAotCQkJCSB1MTYgaW5pdGlhdG9yLCB1MTYgcmVhc29uX2NvZGUpCit2b2lkIGllZWU4MDIxMV9zZW5kX2RlbGJhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJICBjb25zdCB1OCAqZGEsIHUxNiB0aWQsCisJCQkgIHUxNiBpbml0aWF0b3IsIHUxNiByZWFzb25fY29kZSkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEgPSAmc2RhdGEtPnUuc3RhOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OwogCXUxNiBwYXJhbXM7CkBAIC0yNzMsMTAgKzE5OSwxMiBAQAogCW1lbXNldChtZ210LCAwLCAyNCk7CiAJbWVtY3B5KG1nbXQtPmRhLCBkYSwgRVRIX0FMRU4pOwogCW1lbWNweShtZ210LT5zYSwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKLQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKQorCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVAgfHwKKwkgICAgc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4pCiAJCW1lbWNweShtZ210LT5ic3NpZCwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKLQllbHNlCi0JCW1lbWNweShtZ210LT5ic3NpZCwgaWZzdGEtPmJzc2lkLCBFVEhfQUxFTik7CisJZWxzZSBpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCisJCW1lbWNweShtZ210LT5ic3NpZCwgc2RhdGEtPnUubWdkLmJzc2lkLCBFVEhfQUxFTik7CisKIAltZ210LT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfAogCQkJCQkgIElFRUU4MDIxMV9TVFlQRV9BQ1RJT04pOwogCkBAIC0yOTAsNzcwICsyMTgsNyBAQAogCW1nbXQtPnUuYWN0aW9uLnUuZGVsYmEucGFyYW1zID0gY3B1X3RvX2xlMTYocGFyYW1zKTsKIAltZ210LT51LmFjdGlvbi51LmRlbGJhLnJlYXNvbl9jb2RlID0gY3B1X3RvX2xlMTYocmVhc29uX2NvZGUpOwogCi0JaWVlZTgwMjExX3R4X3NrYihzZGF0YSwgc2tiLCAwKTsKLX0KLQotdm9pZCBpZWVlODAyMTFfc2VuZF9iYXIoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHU4ICpyYSwgdTE2IHRpZCwgdTE2IHNzbikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXN0cnVjdCBpZWVlODAyMTFfYmFyICpiYXI7Ci0JdTE2IGJhcl9jb250cm9sID0gMDsKLQotCXNrYiA9IGRldl9hbGxvY19za2Ioc2l6ZW9mKCpiYXIpICsgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tKTsKLQlpZiAoIXNrYikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgYnVmZmVyIGZvciAiCi0JCQkiYmFyIGZyYW1lXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKLQkJcmV0dXJuOwotCX0KLQlza2JfcmVzZXJ2ZShza2IsIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7Ci0JYmFyID0gKHN0cnVjdCBpZWVlODAyMTFfYmFyICopc2tiX3B1dChza2IsIHNpemVvZigqYmFyKSk7Ci0JbWVtc2V0KGJhciwgMCwgc2l6ZW9mKCpiYXIpKTsKLQliYXItPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfQ1RMIHwKLQkJCQkJIElFRUU4MDIxMV9TVFlQRV9CQUNLX1JFUSk7Ci0JbWVtY3B5KGJhci0+cmEsIHJhLCBFVEhfQUxFTik7Ci0JbWVtY3B5KGJhci0+dGEsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7Ci0JYmFyX2NvbnRyb2wgfD0gKHUxNilJRUVFODAyMTFfQkFSX0NUUkxfQUNLX1BPTElDWV9OT1JNQUw7Ci0JYmFyX2NvbnRyb2wgfD0gKHUxNilJRUVFODAyMTFfQkFSX0NUUkxfQ0JNVElEX0NPTVBSRVNTRURfQkE7Ci0JYmFyX2NvbnRyb2wgfD0gKHUxNikodGlkIDw8IDEyKTsKLQliYXItPmNvbnRyb2wgPSBjcHVfdG9fbGUxNihiYXJfY29udHJvbCk7Ci0JYmFyLT5zdGFydF9zZXFfbnVtID0gY3B1X3RvX2xlMTYoc3NuKTsKLQotCWllZWU4MDIxMV90eF9za2Ioc2RhdGEsIHNrYiwgMCk7Ci19Ci0KLXZvaWQgaWVlZTgwMjExX3N0YV9zdG9wX3J4X2JhX3Nlc3Npb24oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHU4ICpyYSwgdTE2IHRpZCwKLQkJCQkJdTE2IGluaXRpYXRvciwgdTE2IHJlYXNvbikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9ICZsb2NhbC0+aHc7Ci0Jc3RydWN0IHN0YV9pbmZvICpzdGE7Ci0JaW50IHJldCwgaTsKLQotCXJjdV9yZWFkX2xvY2soKTsKLQotCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgcmEpOwotCWlmICghc3RhKSB7Ci0JCXJjdV9yZWFkX3VubG9jaygpOwotCQlyZXR1cm47Ci0JfQotCi0JLyogY2hlY2sgaWYgVElEIGlzIGluIG9wZXJhdGlvbmFsIHN0YXRlICovCi0Jc3Bpbl9sb2NrX2JoKCZzdGEtPmxvY2spOwotCWlmIChzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3J4W3RpZF0KLQkJCQkhPSBIVF9BR0dfU1RBVEVfT1BFUkFUSU9OQUwpIHsKLQkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7Ci0JCXJjdV9yZWFkX3VubG9jaygpOwotCQlyZXR1cm47Ci0JfQotCXN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfcnhbdGlkXSA9Ci0JCUhUX0FHR19TVEFURV9SRVFfU1RPUF9CQV9NU0sgfAotCQkoaW5pdGlhdG9yIDw8IEhUX0FHR19TVEFURV9JTklUSUFUT1JfU0hJRlQpOwotCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOwotCi0JLyogc3RvcCBIVyBSeCBhZ2dyZWdhdGlvbi4gYW1wZHVfYWN0aW9uIGV4aXN0ZW5jZQotCSAqIGFscmVhZHkgdmVyaWZpZWQgaW4gc2Vzc2lvbiBpbml0IHNvIHdlIGFkZCB0aGUgQlVHX09OICovCi0JQlVHX09OKCFsb2NhbC0+b3BzLT5hbXBkdV9hY3Rpb24pOwotCi0jaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCi0JcHJpbnRrKEtFUk5fREVCVUcgIlJ4IEJBIHNlc3Npb24gc3RvcCByZXF1ZXN0ZWQgZm9yICVwTSB0aWQgJXVcbiIsCi0JICAgICAgIHJhLCB0aWQpOwotI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRyAqLwotCi0JcmV0ID0gbG9jYWwtPm9wcy0+YW1wZHVfYWN0aW9uKGh3LCBJRUVFODAyMTFfQU1QRFVfUlhfU1RPUCwKLQkJCQkgICAgICAgJnN0YS0+c3RhLCB0aWQsIE5VTEwpOwotCWlmIChyZXQpCi0JCXByaW50ayhLRVJOX0RFQlVHICJIVyBwcm9ibGVtIC0gY2FuIG5vdCBzdG9wIHJ4ICIKLQkJCQkiYWdncmVnYXRpb24gZm9yIHRpZCAlZFxuIiwgdGlkKTsKLQotCS8qIHNodXRkb3duIHRpbWVyIGhhcyBub3QgZXhwaXJlZCAqLwotCWlmIChpbml0aWF0b3IgIT0gV0xBTl9CQUNLX1RJTUVSKQotCQlkZWxfdGltZXJfc3luYygmc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdLT5zZXNzaW9uX3RpbWVyKTsKLQotCS8qIGNoZWNrIGlmIHRoaXMgaXMgYSBzZWxmIGdlbmVyYXRlZCBhZ2dyZWdhdGlvbiBoYWx0ICovCi0JaWYgKGluaXRpYXRvciA9PSBXTEFOX0JBQ0tfUkVDSVBJRU5UIHx8IGluaXRpYXRvciA9PSBXTEFOX0JBQ0tfVElNRVIpCi0JCWllZWU4MDIxMV9zZW5kX2RlbGJhKHNkYXRhLCByYSwgdGlkLCAwLCByZWFzb24pOwotCi0JLyogZnJlZSB0aGUgcmVvcmRlcmluZyBidWZmZXIgKi8KLQlmb3IgKGkgPSAwOyBpIDwgc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdLT5idWZfc2l6ZTsgaSsrKSB7Ci0JCWlmIChzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF0tPnJlb3JkZXJfYnVmW2ldKSB7Ci0JCQkvKiByZWxlYXNlIHRoZSByZW9yZGVyZWQgZnJhbWVzICovCi0JCQlkZXZfa2ZyZWVfc2tiKHN0YS0+YW1wZHVfbWxtZS50aWRfcnhbdGlkXS0+cmVvcmRlcl9idWZbaV0pOwotCQkJc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdLT5zdG9yZWRfbXBkdV9udW0tLTsKLQkJCXN0YS0+YW1wZHVfbWxtZS50aWRfcnhbdGlkXS0+cmVvcmRlcl9idWZbaV0gPSBOVUxMOwotCQl9Ci0JfQotCS8qIGZyZWUgcmVzb3VyY2VzICovCi0Ja2ZyZWUoc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdLT5yZW9yZGVyX2J1Zik7Ci0Ja2ZyZWUoc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdKTsKLQlzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF0gPSBOVUxMOwotCXN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfcnhbdGlkXSA9IEhUX0FHR19TVEFURV9JRExFOwotCi0JcmN1X3JlYWRfdW5sb2NrKCk7Ci19Ci0KLQotLyoKLSAqIEFmdGVyIHNlbmRpbmcgYWRkIEJsb2NrIEFjayByZXF1ZXN0IHdlIGFjdGl2YXRlZCBhIHRpbWVyIHVudGlsCi0gKiBhZGQgQmxvY2sgQWNrIHJlc3BvbnNlIHdpbGwgYXJyaXZlIGZyb20gdGhlIHJlY2lwaWVudC4KLSAqIElmIHRoaXMgdGltZXIgZXhwaXJlcyBzdGFfYWRkYmFfcmVzcF90aW1lcl9leHBpcmVkIHdpbGwgYmUgZXhlY3V0ZWQuCi0gKi8KLXN0YXRpYyB2b2lkIHN0YV9hZGRiYV9yZXNwX3RpbWVyX2V4cGlyZWQodW5zaWduZWQgbG9uZyBkYXRhKQotewotCS8qIG5vdCBhbiBlbGVnYW50IGRldG91ciwgYnV0IHRoZXJlIGlzIG5vIGNob2ljZSBhcyB0aGUgdGltZXIgcGFzc2VzCi0JICogb25seSBvbmUgYXJndW1lbnQsIGFuZCBib3RoIHN0YV9pbmZvIGFuZCBUSUQgYXJlIG5lZWRlZCwgc28gaW5pdAotCSAqIGZsb3cgaW4gc3RhX2luZm9fY3JlYXRlIGdpdmVzIHRoZSBUSUQgYXMgZGF0YSwgd2hpbGUgdGhlIHRpbWVyX3RvX2lkCi0JICogYXJyYXkgZ2l2ZXMgdGhlIHN0YSB0aHJvdWdoIGNvbnRhaW5lcl9vZiAqLwotCXUxNiB0aWQgPSAqKHU4ICopZGF0YTsKLQlzdHJ1Y3Qgc3RhX2luZm8gKnRlbXBfc3RhID0gY29udGFpbmVyX29mKCh2b2lkICopZGF0YSwKLQkJc3RydWN0IHN0YV9pbmZvLCB0aW1lcl90b190aWRbdGlkXSk7Ci0KLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHRlbXBfc3RhLT5sb2NhbDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9ICZsb2NhbC0+aHc7Ci0Jc3RydWN0IHN0YV9pbmZvICpzdGE7Ci0JdTggKnN0YXRlOwotCi0JcmN1X3JlYWRfbG9jaygpOwotCi0Jc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCB0ZW1wX3N0YS0+c3RhLmFkZHIpOwotCWlmICghc3RhKSB7Ci0JCXJjdV9yZWFkX3VubG9jaygpOwotCQlyZXR1cm47Ci0JfQotCi0Jc3RhdGUgPSAmc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV90eFt0aWRdOwotCS8qIGNoZWNrIGlmIHRoZSBUSUQgd2FpdHMgZm9yIGFkZEJBIHJlc3BvbnNlICovCi0Jc3Bpbl9sb2NrX2JoKCZzdGEtPmxvY2spOwotCWlmICghKCpzdGF0ZSAmIEhUX0FEREJBX1JFUVVFU1RFRF9NU0spKSB7Ci0JCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOwotCQkqc3RhdGUgPSBIVF9BR0dfU1RBVEVfSURMRTsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKLQkJcHJpbnRrKEtFUk5fREVCVUcgInRpbWVyIGV4cGlyZWQgb24gdGlkICVkIGJ1dCB3ZSBhcmUgbm90ICIKLQkJCQkiZXhwZWN0aW5nIGFkZEJBIHJlc3BvbnNlIHRoZXJlIiwgdGlkKTsKLSNlbmRpZgotCQlnb3RvIHRpbWVyX2V4cGlyZWRfZXhpdDsKLQl9Ci0KLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKLQlwcmludGsoS0VSTl9ERUJVRyAiYWRkQkEgcmVzcG9uc2UgdGltZXIgZXhwaXJlZCBvbiB0aWQgJWRcbiIsIHRpZCk7Ci0jZW5kaWYKLQotCS8qIGdvIHRocm91Z2ggdGhlIHN0YXRlIGNoZWNrIGluIHN0b3BfQkFfc2Vzc2lvbiAqLwotCSpzdGF0ZSA9IEhUX0FHR19TVEFURV9PUEVSQVRJT05BTDsKLQlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKLQlpZWVlODAyMTFfc3RvcF90eF9iYV9zZXNzaW9uKGh3LCB0ZW1wX3N0YS0+c3RhLmFkZHIsIHRpZCwKLQkJCQkgICAgIFdMQU5fQkFDS19JTklUSUFUT1IpOwotCi10aW1lcl9leHBpcmVkX2V4aXQ6Ci0JcmN1X3JlYWRfdW5sb2NrKCk7Ci19Ci0KLXZvaWQgaWVlZTgwMjExX3N0YV90ZWFyX2Rvd25fQkFfc2Vzc2lvbnMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHU4ICphZGRyKQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8ICBTVEFfVElEX05VTTsgaSsrKSB7Ci0JCWllZWU4MDIxMV9zdG9wX3R4X2JhX3Nlc3Npb24oJmxvY2FsLT5odywgYWRkciwgaSwKLQkJCQkJICAgICBXTEFOX0JBQ0tfSU5JVElBVE9SKTsKLQkJaWVlZTgwMjExX3N0YV9zdG9wX3J4X2JhX3Nlc3Npb24oc2RhdGEsIGFkZHIsIGksCi0JCQkJCQkgV0xBTl9CQUNLX1JFQ0lQSUVOVCwKLQkJCQkJCSBXTEFOX1JFQVNPTl9RU1RBX0xFQVZFX1FCU1MpOwotCX0KLX0KLQotaW50IGllZWU4MDIxMV9zdGFydF90eF9iYV9zZXNzaW9uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCAqcmEsIHUxNiB0aWQpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7Ci0Jc3RydWN0IHN0YV9pbmZvICpzdGE7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7Ci0JdTE2IHN0YXJ0X3NlcV9udW07Ci0JdTggKnN0YXRlOwotCWludCByZXQgPSAwOwotCi0JaWYgKCh0aWQgPj0gU1RBX1RJRF9OVU0pIHx8ICEoaHctPmZsYWdzICYgSUVFRTgwMjExX0hXX0FNUERVX0FHR1JFR0FUSU9OKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKLQlwcmludGsoS0VSTl9ERUJVRyAiT3BlbiBCQSBzZXNzaW9uIHJlcXVlc3RlZCBmb3IgJXBNIHRpZCAldVxuIiwKLQkgICAgICAgcmEsIHRpZCk7Ci0jZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0hUX0RFQlVHICovCi0KLQlyY3VfcmVhZF9sb2NrKCk7Ci0KLQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIHJhKTsKLQlpZiAoIXN0YSkgewotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwotCQlwcmludGsoS0VSTl9ERUJVRyAiQ291bGQgbm90IGZpbmQgdGhlIHN0YXRpb25cbiIpOwotI2VuZGlmCi0JCXJldCA9IC1FTk9FTlQ7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQlzcGluX2xvY2tfYmgoJnN0YS0+bG9jayk7Ci0KLQkvKiB3ZSBoYXZlIHRyaWVkIHRvbyBtYW55IHRpbWVzLCByZWNlaXZlciBkb2VzIG5vdCB3YW50IEEtTVBEVSAqLwotCWlmIChzdGEtPmFtcGR1X21sbWUuYWRkYmFfcmVxX251bVt0aWRdID4gSFRfQUdHX01BWF9SRVRSSUVTKSB7Ci0JCXJldCA9IC1FQlVTWTsKLQkJZ290byBlcnJfdW5sb2NrX3N0YTsKLQl9Ci0KLQlzdGF0ZSA9ICZzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3R4W3RpZF07Ci0JLyogY2hlY2sgaWYgdGhlIFRJRCBpcyBub3QgaW4gYWdncmVnYXRpb24gZmxvdyBhbHJlYWR5ICovCi0JaWYgKCpzdGF0ZSAhPSBIVF9BR0dfU1RBVEVfSURMRSkgewotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwotCQlwcmludGsoS0VSTl9ERUJVRyAiQkEgcmVxdWVzdCBkZW5pZWQgLSBzZXNzaW9uIGlzIG5vdCAiCi0JCQkJICJpZGxlIG9uIHRpZCAldVxuIiwgdGlkKTsKLSNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcgKi8KLQkJcmV0ID0gLUVBR0FJTjsKLQkJZ290byBlcnJfdW5sb2NrX3N0YTsKLQl9Ci0KLQkvKiBwcmVwYXJlIEEtTVBEVSBNTE1FIGZvciBUeCBhZ2dyZWdhdGlvbiAqLwotCXN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXSA9Ci0JCQlrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdGlkX2FtcGR1X3R4KSwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0pIHsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKLQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJCXByaW50ayhLRVJOX0VSUiAiYWxsb2NhdGUgdHggbWxtZSB0byB0aWQgJWQgZmFpbGVkXG4iLAotCQkJCQl0aWQpOwotI2VuZGlmCi0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyX3VubG9ja19zdGE7Ci0JfQotCS8qIFR4IHRpbWVyICovCi0Jc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5hZGRiYV9yZXNwX3RpbWVyLmZ1bmN0aW9uID0KLQkJCXN0YV9hZGRiYV9yZXNwX3RpbWVyX2V4cGlyZWQ7Ci0Jc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5hZGRiYV9yZXNwX3RpbWVyLmRhdGEgPQotCQkJKHVuc2lnbmVkIGxvbmcpJnN0YS0+dGltZXJfdG9fdGlkW3RpZF07Ci0JaW5pdF90aW1lcigmc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5hZGRiYV9yZXNwX3RpbWVyKTsKLQotCWlmIChody0+YW1wZHVfcXVldWVzKSB7Ci0JCS8qIGNyZWF0ZSBhIG5ldyBxdWV1ZSBmb3IgdGhpcyBhZ2dyZWdhdGlvbiAqLwotCQlyZXQgPSBpZWVlODAyMTFfaHRfYWdnX3F1ZXVlX2FkZChsb2NhbCwgc3RhLCB0aWQpOwotCi0JCS8qIGNhc2Ugbm8gcXVldWUgaXMgYXZhaWxhYmxlIHRvIGFnZ3JlZ2F0aW9uCi0JCSAqIGRvbid0IHN3aXRjaCB0byBhZ2dyZWdhdGlvbiAqLwotCQlpZiAocmV0KSB7Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiQkEgcmVxdWVzdCBkZW5pZWQgLSAiCi0JCQkgICAgICAgInF1ZXVlIHVuYXZhaWxhYmxlIGZvciB0aWQgJWRcbiIsIHRpZCk7Ci0jZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0hUX0RFQlVHICovCi0JCQlnb3RvIGVycl91bmxvY2tfcXVldWU7Ci0JCX0KLQl9Ci0Jc2RhdGEgPSBzdGEtPnNkYXRhOwotCi0JLyogT2ssIHRoZSBBZGRiYSBmcmFtZSBoYXNuJ3QgYmVlbiBzZW50IHlldCwgYnV0IGlmIHRoZSBkcml2ZXIgY2FsbHMgdGhlCi0JICogY2FsbCBiYWNrIHJpZ2h0IGF3YXksIGl0IG11c3Qgc2VlIHRoYXQgdGhlIGZsb3cgaGFzIGJlZ3VuICovCi0JKnN0YXRlIHw9IEhUX0FEREJBX1JFUVVFU1RFRF9NU0s7Ci0KLQkvKiBUaGlzIGlzIHNsaWdodGx5IHJhY3kgYmVjYXVzZSB0aGUgcXVldWUgaXNuJ3Qgc3RvcHBlZCAqLwotCXN0YXJ0X3NlcV9udW0gPSBzdGEtPnRpZF9zZXFbdGlkXTsKLQotCWlmIChsb2NhbC0+b3BzLT5hbXBkdV9hY3Rpb24pCi0JCXJldCA9IGxvY2FsLT5vcHMtPmFtcGR1X2FjdGlvbihodywgSUVFRTgwMjExX0FNUERVX1RYX1NUQVJULAotCQkJCQkgICAgICAgJnN0YS0+c3RhLCB0aWQsICZzdGFydF9zZXFfbnVtKTsKLQotCWlmIChyZXQpIHsKLQkJLyogTm8gbmVlZCB0byByZXF1ZXVlIHRoZSBwYWNrZXRzIGluIHRoZSBhZ2cgcXVldWUsIHNpbmNlIHdlCi0JCSAqIGhlbGQgdGhlIHR4IGxvY2s6IG5vIHBhY2tldCBjb3VsZCBiZSBlbnF1ZXVlZCB0byB0aGUgbmV3bHkKLQkJICogYWxsb2NhdGVkIHF1ZXVlICovCi0JCWlmIChody0+YW1wZHVfcXVldWVzKQotCQkJaWVlZTgwMjExX2h0X2FnZ19xdWV1ZV9yZW1vdmUobG9jYWwsIHN0YSwgdGlkLCAwKTsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKLQkJcHJpbnRrKEtFUk5fREVCVUcgIkJBIHJlcXVlc3QgZGVuaWVkIC0gSFcgdW5hdmFpbGFibGUgZm9yIgotCQkJCQkiIHRpZCAlZFxuIiwgdGlkKTsKLSNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcgKi8KLQkJKnN0YXRlID0gSFRfQUdHX1NUQVRFX0lETEU7Ci0JCWdvdG8gZXJyX3VubG9ja19xdWV1ZTsKLQl9Ci0KLQkvKiBXaWxsIHB1dCBhbGwgdGhlIHBhY2tldHMgaW4gdGhlIG5ldyBTVyBxdWV1ZSAqLwotCWlmIChody0+YW1wZHVfcXVldWVzKQotCQlpZWVlODAyMTFfcmVxdWV1ZShsb2NhbCwgaWVlZTgwMl8xZF90b19hY1t0aWRdKTsKLQlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKLQotCS8qIHNlbmQgYW4gYWRkQkEgcmVxdWVzdCAqLwotCXN0YS0+YW1wZHVfbWxtZS5kaWFsb2dfdG9rZW5fYWxsb2NhdG9yKys7Ci0Jc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5kaWFsb2dfdG9rZW4gPQotCQkJc3RhLT5hbXBkdV9tbG1lLmRpYWxvZ190b2tlbl9hbGxvY2F0b3I7Ci0Jc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5zc24gPSBzdGFydF9zZXFfbnVtOwotCi0KLQlpZWVlODAyMTFfc2VuZF9hZGRiYV9yZXF1ZXN0KHN0YS0+c2RhdGEsIHJhLCB0aWQsCi0JCQkgc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5kaWFsb2dfdG9rZW4sCi0JCQkgc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5zc24sCi0JCQkgMHg0MCwgNTAwMCk7Ci0JLyogYWN0aXZhdGUgdGhlIHRpbWVyIGZvciB0aGUgcmVjaXBpZW50J3MgYWRkQkEgcmVzcG9uc2UgKi8KLQlzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0tPmFkZGJhX3Jlc3BfdGltZXIuZXhwaXJlcyA9Ci0JCQkJamlmZmllcyArIEFEREJBX1JFU1BfSU5URVJWQUw7Ci0JYWRkX3RpbWVyKCZzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0tPmFkZGJhX3Jlc3BfdGltZXIpOwotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwotCXByaW50ayhLRVJOX0RFQlVHICJhY3RpdmF0ZWQgYWRkQkEgcmVzcG9uc2UgdGltZXIgb24gdGlkICVkXG4iLCB0aWQpOwotI2VuZGlmCi0JZ290byBleGl0OwotCi1lcnJfdW5sb2NrX3F1ZXVlOgotCWtmcmVlKHN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXSk7Ci0Jc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdID0gTlVMTDsKLQlyZXQgPSAtRUJVU1k7Ci1lcnJfdW5sb2NrX3N0YToKLQlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKLWV4aXQ6Ci0JcmN1X3JlYWRfdW5sb2NrKCk7Ci0JcmV0dXJuIHJldDsKLX0KLUVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3N0YXJ0X3R4X2JhX3Nlc3Npb24pOwotCi1pbnQgaWVlZTgwMjExX3N0b3BfdHhfYmFfc2Vzc2lvbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkgdTggKnJhLCB1MTYgdGlkLAotCQkJCSBlbnVtIGllZWU4MDIxMV9iYWNrX3BhcnRpZXMgaW5pdGlhdG9yKQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOwotCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwotCXU4ICpzdGF0ZTsKLQlpbnQgcmV0ID0gMDsKLQotCWlmICh0aWQgPj0gU1RBX1RJRF9OVU0pCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmN1X3JlYWRfbG9jaygpOwotCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgcmEpOwotCWlmICghc3RhKSB7Ci0JCXJjdV9yZWFkX3VubG9jaygpOwotCQlyZXR1cm4gLUVOT0VOVDsKLQl9Ci0KLQkvKiBjaGVjayBpZiB0aGUgVElEIGlzIGluIGFnZ3JlZ2F0aW9uICovCi0Jc3RhdGUgPSAmc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV90eFt0aWRdOwotCXNwaW5fbG9ja19iaCgmc3RhLT5sb2NrKTsKLQotCWlmICgqc3RhdGUgIT0gSFRfQUdHX1NUQVRFX09QRVJBVElPTkFMKSB7Ci0JCXJldCA9IC1FTk9FTlQ7Ci0JCWdvdG8gc3RvcF9CQV9leGl0OwotCX0KLQotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwotCXByaW50ayhLRVJOX0RFQlVHICJUeCBCQSBzZXNzaW9uIHN0b3AgcmVxdWVzdGVkIGZvciAlcE0gdGlkICV1XG4iLAotCSAgICAgICByYSwgdGlkKTsKLSNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcgKi8KLQotCWlmIChody0+YW1wZHVfcXVldWVzKQotCQlpZWVlODAyMTFfc3RvcF9xdWV1ZShodywgc3RhLT50aWRfdG9fdHhfcVt0aWRdKTsKLQotCSpzdGF0ZSA9IEhUX0FHR19TVEFURV9SRVFfU1RPUF9CQV9NU0sgfAotCQkoaW5pdGlhdG9yIDw8IEhUX0FHR19TVEFURV9JTklUSUFUT1JfU0hJRlQpOwotCi0JaWYgKGxvY2FsLT5vcHMtPmFtcGR1X2FjdGlvbikKLQkJcmV0ID0gbG9jYWwtPm9wcy0+YW1wZHVfYWN0aW9uKGh3LCBJRUVFODAyMTFfQU1QRFVfVFhfU1RPUCwKLQkJCQkJICAgICAgICZzdGEtPnN0YSwgdGlkLCBOVUxMKTsKLQotCS8qIGNhc2UgSFcgZGVuaWVkIGdvaW5nIGJhY2sgdG8gbGVnYWN5ICovCi0JaWYgKHJldCkgewotCQlXQVJOX09OKHJldCAhPSAtRUJVU1kpOwotCQkqc3RhdGUgPSBIVF9BR0dfU1RBVEVfT1BFUkFUSU9OQUw7Ci0JCWlmIChody0+YW1wZHVfcXVldWVzKQotCQkJaWVlZTgwMjExX3dha2VfcXVldWUoaHcsIHN0YS0+dGlkX3RvX3R4X3FbdGlkXSk7Ci0JCWdvdG8gc3RvcF9CQV9leGl0OwotCX0KLQotc3RvcF9CQV9leGl0OgotCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOwotCXJjdV9yZWFkX3VubG9jaygpOwotCXJldHVybiByZXQ7Ci19Ci1FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9zdG9wX3R4X2JhX3Nlc3Npb24pOwotCi12b2lkIGllZWU4MDIxMV9zdGFydF90eF9iYV9jYihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggKnJhLCB1MTYgdGlkKQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOwotCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwotCXU4ICpzdGF0ZTsKLQotCWlmICh0aWQgPj0gU1RBX1RJRF9OVU0pIHsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKLQkJcHJpbnRrKEtFUk5fREVCVUcgIkJhZCBUSUQgdmFsdWU6IHRpZCA9ICVkICg+PSAlZClcbiIsCi0JCQkJdGlkLCBTVEFfVElEX05VTSk7Ci0jZW5kaWYKLQkJcmV0dXJuOwotCX0KLQotCXJjdV9yZWFkX2xvY2soKTsKLQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIHJhKTsKLQlpZiAoIXN0YSkgewotCQlyY3VfcmVhZF91bmxvY2soKTsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKLQkJcHJpbnRrKEtFUk5fREVCVUcgIkNvdWxkIG5vdCBmaW5kIHN0YXRpb246ICVwTVxuIiwgcmEpOwotI2VuZGlmCi0JCXJldHVybjsKLQl9Ci0KLQlzdGF0ZSA9ICZzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3R4W3RpZF07Ci0Jc3Bpbl9sb2NrX2JoKCZzdGEtPmxvY2spOwotCi0JaWYgKCEoKnN0YXRlICYgSFRfQUREQkFfUkVRVUVTVEVEX01TSykpIHsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKLQkJcHJpbnRrKEtFUk5fREVCVUcgImFkZEJBIHdhcyBub3QgcmVxdWVzdGVkIHlldCwgc3RhdGUgaXMgJWRcbiIsCi0JCQkJKnN0YXRlKTsKLSNlbmRpZgotCQlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKLQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCXJldHVybjsKLQl9Ci0KLQlXQVJOX09OX09OQ0UoKnN0YXRlICYgSFRfQUREQkFfRFJWX1JFQURZX01TSyk7Ci0KLQkqc3RhdGUgfD0gSFRfQUREQkFfRFJWX1JFQURZX01TSzsKLQotCWlmICgqc3RhdGUgPT0gSFRfQUdHX1NUQVRFX09QRVJBVElPTkFMKSB7Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCi0JCXByaW50ayhLRVJOX0RFQlVHICJBZ2dyZWdhdGlvbiBpcyBvbiBmb3IgdGlkICVkIFxuIiwgdGlkKTsKLSNlbmRpZgotCQlpZiAoaHctPmFtcGR1X3F1ZXVlcykKLQkJCWllZWU4MDIxMV93YWtlX3F1ZXVlKGh3LCBzdGEtPnRpZF90b190eF9xW3RpZF0pOwotCX0KLQlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKLQlyY3VfcmVhZF91bmxvY2soKTsKLX0KLUVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3N0YXJ0X3R4X2JhX2NiKTsKLQotdm9pZCBpZWVlODAyMTFfc3RvcF90eF9iYV9jYihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggKnJhLCB1OCB0aWQpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7Ci0Jc3RydWN0IHN0YV9pbmZvICpzdGE7Ci0JdTggKnN0YXRlOwotCWludCBhZ2dfcXVldWU7Ci0KLQlpZiAodGlkID49IFNUQV9USURfTlVNKSB7Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCi0JCXByaW50ayhLRVJOX0RFQlVHICJCYWQgVElEIHZhbHVlOiB0aWQgPSAlZCAoPj0gJWQpXG4iLAotCQkJCXRpZCwgU1RBX1RJRF9OVU0pOwotI2VuZGlmCi0JCXJldHVybjsKLQl9Ci0KLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKLQlwcmludGsoS0VSTl9ERUJVRyAiU3RvcHBpbmcgVHggQkEgc2Vzc2lvbiBmb3IgJXBNIHRpZCAlZFxuIiwKLQkgICAgICAgcmEsIHRpZCk7Ci0jZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0hUX0RFQlVHICovCi0KLQlyY3VfcmVhZF9sb2NrKCk7Ci0Jc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCByYSk7Ci0JaWYgKCFzdGEpIHsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKLQkJcHJpbnRrKEtFUk5fREVCVUcgIkNvdWxkIG5vdCBmaW5kIHN0YXRpb246ICVwTVxuIiwgcmEpOwotI2VuZGlmCi0JCXJjdV9yZWFkX3VubG9jaygpOwotCQlyZXR1cm47Ci0JfQotCXN0YXRlID0gJnN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfdHhbdGlkXTsKLQotCS8qIE5PVEU6IG5vIG5lZWQgdG8gdXNlIHN0YS0+bG9jayBpbiB0aGlzIHN0YXRlIGNoZWNrLCBhcwotCSAqIGllZWU4MDIxMV9zdG9wX3R4X2JhX3Nlc3Npb24gd2lsbCBsZXQgb25seSBvbmUgc3RvcCBjYWxsIHRvCi0JICogcGFzcyB0aHJvdWdoIHBlciBzdGEvdGlkCi0JICovCi0JaWYgKCgqc3RhdGUgJiBIVF9BR0dfU1RBVEVfUkVRX1NUT1BfQkFfTVNLKSA9PSAwKSB7Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCi0JCXByaW50ayhLRVJOX0RFQlVHICJ1bmV4cGVjdGVkIGNhbGxiYWNrIHRvIEEtTVBEVSBzdG9wXG4iKTsKLSNlbmRpZgotCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmICgqc3RhdGUgJiBIVF9BR0dfU1RBVEVfSU5JVElBVE9SX01TSykKLQkJaWVlZTgwMjExX3NlbmRfZGVsYmEoc3RhLT5zZGF0YSwgcmEsIHRpZCwKLQkJCVdMQU5fQkFDS19JTklUSUFUT1IsIFdMQU5fUkVBU09OX1FTVEFfTk9UX1VTRSk7Ci0KLQlpZiAoaHctPmFtcGR1X3F1ZXVlcykgewotCQlhZ2dfcXVldWUgPSBzdGEtPnRpZF90b190eF9xW3RpZF07Ci0JCWllZWU4MDIxMV9odF9hZ2dfcXVldWVfcmVtb3ZlKGxvY2FsLCBzdGEsIHRpZCwgMSk7Ci0KLQkJLyogV2UganVzdCByZXF1ZXVlZCB0aGUgYWxsIHRoZSBmcmFtZXMgdGhhdCB3ZXJlIGluIHRoZQotCQkgKiByZW1vdmVkIHF1ZXVlLCBhbmQgc2luY2Ugd2UgbWlnaHQgbWlzcyBhIHNvZnRpcnEgd2UgZG8KLQkJICogbmV0aWZfc2NoZWR1bGVfcXVldWUuICBpZWVlODAyMTFfd2FrZV9xdWV1ZSBpcyBub3QgdXNlZAotCQkgKiBoZXJlIGFzIHRoaXMgcXVldWUgaXMgbm90IG5lY2Vzc2FyaWx5IHN0b3BwZWQKLQkJICovCi0JCW5ldGlmX3NjaGVkdWxlX3F1ZXVlKG5ldGRldl9nZXRfdHhfcXVldWUobG9jYWwtPm1kZXYsCi0JCQkJCQkJIGFnZ19xdWV1ZSkpOwotCX0KLQlzcGluX2xvY2tfYmgoJnN0YS0+bG9jayk7Ci0JKnN0YXRlID0gSFRfQUdHX1NUQVRFX0lETEU7Ci0Jc3RhLT5hbXBkdV9tbG1lLmFkZGJhX3JlcV9udW1bdGlkXSA9IDA7Ci0Ja2ZyZWUoc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdKTsKLQlzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0gPSBOVUxMOwotCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOwotCi0JcmN1X3JlYWRfdW5sb2NrKCk7Ci19Ci1FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9zdG9wX3R4X2JhX2NiKTsKLQotdm9pZCBpZWVlODAyMTFfc3RhcnRfdHhfYmFfY2JfaXJxc2FmZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkgICAgICBjb25zdCB1OCAqcmEsIHUxNiB0aWQpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7Ci0Jc3RydWN0IGllZWU4MDIxMV9yYV90aWQgKnJhX3RpZDsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gZGV2X2FsbG9jX3NrYigwKTsKLQotCWlmICh1bmxpa2VseSghc2tiKSkgewotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwotCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IE5vdCBlbm91Z2ggbWVtb3J5LCAiCi0JCQkgICAgICAgImRyb3BwaW5nIHN0YXJ0IEJBIHNlc3Npb24iLCBza2ItPmRldi0+bmFtZSk7Ci0jZW5kaWYKLQkJcmV0dXJuOwotCX0KLQlyYV90aWQgPSAoc3RydWN0IGllZWU4MDIxMV9yYV90aWQgKikgJnNrYi0+Y2I7Ci0JbWVtY3B5KCZyYV90aWQtPnJhLCByYSwgRVRIX0FMRU4pOwotCXJhX3RpZC0+dGlkID0gdGlkOwotCi0Jc2tiLT5wa3RfdHlwZSA9IElFRUU4MDIxMV9BRERCQV9NU0c7Ci0Jc2tiX3F1ZXVlX3RhaWwoJmxvY2FsLT5za2JfcXVldWUsIHNrYik7Ci0JdGFza2xldF9zY2hlZHVsZSgmbG9jYWwtPnRhc2tsZXQpOwotfQotRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfc3RhcnRfdHhfYmFfY2JfaXJxc2FmZSk7Ci0KLXZvaWQgaWVlZTgwMjExX3N0b3BfdHhfYmFfY2JfaXJxc2FmZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkgICAgIGNvbnN0IHU4ICpyYSwgdTE2IHRpZCkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3JhX3RpZCAqcmFfdGlkOwotCXN0cnVjdCBza19idWZmICpza2IgPSBkZXZfYWxsb2Nfc2tiKDApOwotCi0JaWYgKHVubGlrZWx5KCFza2IpKSB7Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCi0JCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogTm90IGVub3VnaCBtZW1vcnksICIKLQkJCSAgICAgICAiZHJvcHBpbmcgc3RvcCBCQSBzZXNzaW9uIiwgc2tiLT5kZXYtPm5hbWUpOwotI2VuZGlmCi0JCXJldHVybjsKLQl9Ci0JcmFfdGlkID0gKHN0cnVjdCBpZWVlODAyMTFfcmFfdGlkICopICZza2ItPmNiOwotCW1lbWNweSgmcmFfdGlkLT5yYSwgcmEsIEVUSF9BTEVOKTsKLQlyYV90aWQtPnRpZCA9IHRpZDsKLQotCXNrYi0+cGt0X3R5cGUgPSBJRUVFODAyMTFfREVMQkFfTVNHOwotCXNrYl9xdWV1ZV90YWlsKCZsb2NhbC0+c2tiX3F1ZXVlLCBza2IpOwotCXRhc2tsZXRfc2NoZWR1bGUoJmxvY2FsLT50YXNrbGV0KTsKLX0KLUVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3N0b3BfdHhfYmFfY2JfaXJxc2FmZSk7Ci0KLS8qCi0gKiBBZnRlciBhY2NlcHRpbmcgdGhlIEFkZEJBIFJlcXVlc3Qgd2UgYWN0aXZhdGVkIGEgdGltZXIsCi0gKiByZXNldHRpbmcgaXQgYWZ0ZXIgZWFjaCBmcmFtZSB0aGF0IGFycml2ZXMgZnJvbSB0aGUgb3JpZ2luYXRvci4KLSAqIGlmIHRoaXMgdGltZXIgZXhwaXJlcyBpZWVlODAyMTFfc3RhX3N0b3BfcnhfYmFfc2Vzc2lvbiB3aWxsIGJlIGV4ZWN1dGVkLgotICovCi1zdGF0aWMgdm9pZCBzdGFfcnhfYWdnX3Nlc3Npb25fdGltZXJfZXhwaXJlZCh1bnNpZ25lZCBsb25nIGRhdGEpCi17Ci0JLyogbm90IGFuIGVsZWdhbnQgZGV0b3VyLCBidXQgdGhlcmUgaXMgbm8gY2hvaWNlIGFzIHRoZSB0aW1lciBwYXNzZXMKLQkgKiBvbmx5IG9uZSBhcmd1bWVudCwgYW5kIHZhcmlvdXMgc3RhX2luZm8gYXJlIG5lZWRlZCBoZXJlLCBzbyBpbml0Ci0JICogZmxvdyBpbiBzdGFfaW5mb19jcmVhdGUgZ2l2ZXMgdGhlIFRJRCBhcyBkYXRhLCB3aGlsZSB0aGUgdGltZXJfdG9faWQKLQkgKiBhcnJheSBnaXZlcyB0aGUgc3RhIHRocm91Z2ggY29udGFpbmVyX29mICovCi0JdTggKnB0aWQgPSAodTggKilkYXRhOwotCXU4ICp0aW1lcl90b19pZCA9IHB0aWQgLSAqcHRpZDsKLQlzdHJ1Y3Qgc3RhX2luZm8gKnN0YSA9IGNvbnRhaW5lcl9vZih0aW1lcl90b19pZCwgc3RydWN0IHN0YV9pbmZvLAotCQkJCQkgdGltZXJfdG9fdGlkWzBdKTsKLQotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwotCXByaW50ayhLRVJOX0RFQlVHICJyeCBzZXNzaW9uIHRpbWVyIGV4cGlyZWQgb24gdGlkICVkXG4iLCAodTE2KSpwdGlkKTsKLSNlbmRpZgotCWllZWU4MDIxMV9zdGFfc3RvcF9yeF9iYV9zZXNzaW9uKHN0YS0+c2RhdGEsIHN0YS0+c3RhLmFkZHIsCi0JCQkJCSAodTE2KSpwdGlkLCBXTEFOX0JBQ0tfVElNRVIsCi0JCQkJCSBXTEFOX1JFQVNPTl9RU1RBX1RJTUVPVVQpOwotfQotCi12b2lkIGllZWU4MDIxMV9wcm9jZXNzX2FkZGJhX3JlcXVlc3Qoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCi0JCQkJICAgICBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwKLQkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwKLQkJCQkgICAgIHNpemVfdCBsZW4pCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSAmbG9jYWwtPmh3OwotCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9ICZody0+Y29uZjsKLQlzdHJ1Y3QgdGlkX2FtcGR1X3J4ICp0aWRfYWdnX3J4OwotCXUxNiBjYXBhYiwgdGlkLCB0aW1lb3V0LCBiYV9wb2xpY3ksIGJ1Zl9zaXplLCBzdGFydF9zZXFfbnVtLCBzdGF0dXM7Ci0JdTggZGlhbG9nX3Rva2VuOwotCWludCByZXQgPSAtRU9QTk9UU1VQUDsKLQotCS8qIGV4dHJhY3Qgc2Vzc2lvbiBwYXJhbWV0ZXJzIGZyb20gYWRkYmEgcmVxdWVzdCBmcmFtZSAqLwotCWRpYWxvZ190b2tlbiA9IG1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVxLmRpYWxvZ190b2tlbjsKLQl0aW1lb3V0ID0gbGUxNl90b19jcHUobWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXEudGltZW91dCk7Ci0Jc3RhcnRfc2VxX251bSA9Ci0JCWxlMTZfdG9fY3B1KG1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVxLnN0YXJ0X3NlcV9udW0pID4+IDQ7Ci0KLQljYXBhYiA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVxLmNhcGFiKTsKLQliYV9wb2xpY3kgPSAoY2FwYWIgJiBJRUVFODAyMTFfQUREQkFfUEFSQU1fUE9MSUNZX01BU0spID4+IDE7Ci0JdGlkID0gKGNhcGFiICYgSUVFRTgwMjExX0FEREJBX1BBUkFNX1RJRF9NQVNLKSA+PiAyOwotCWJ1Zl9zaXplID0gKGNhcGFiICYgSUVFRTgwMjExX0FEREJBX1BBUkFNX0JVRl9TSVpFX01BU0spID4+IDY7Ci0KLQlzdGF0dXMgPSBXTEFOX1NUQVRVU19SRVFVRVNUX0RFQ0xJTkVEOwotCi0JLyogc2FuaXR5IGNoZWNrIGZvciBpbmNvbWluZyBwYXJhbWV0ZXJzOgotCSAqIGNoZWNrIGlmIGNvbmZpZ3VyYXRpb24gY2FuIHN1cHBvcnQgdGhlIEJBIHBvbGljeQotCSAqIGFuZCBpZiBidWZmZXIgc2l6ZSBkb2VzIG5vdCBleGNlZWRzIG1heCB2YWx1ZSAqLwotCS8qIFhYWDogY2hlY2sgb3duIGh0IGRlbGF5ZWQgQkEgY2FwYWJpbGl0eT8/ICovCi0JaWYgKCgoYmFfcG9saWN5ICE9IDEpCi0JCSYmICghKHN0YS0+c3RhLmh0X2NhcC5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX0RFTEFZX0JBKSkpCi0JCXx8IChidWZfc2l6ZSA+IElFRUU4MDIxMV9NQVhfQU1QRFVfQlVGKSkgewotCQlzdGF0dXMgPSBXTEFOX1NUQVRVU19JTlZBTElEX1FPU19QQVJBTTsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKLQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJCXByaW50ayhLRVJOX0RFQlVHICJBZGRCQSBSZXEgd2l0aCBiYWQgcGFyYW1zIGZyb20gIgotCQkJCSIlcE0gb24gdGlkICV1LiBwb2xpY3kgJWQsIGJ1ZmZlciBzaXplICVkXG4iLAotCQkJCW1nbXQtPnNhLCB0aWQsIGJhX3BvbGljeSwKLQkJCQlidWZfc2l6ZSk7Ci0jZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0hUX0RFQlVHICovCi0JCWdvdG8gZW5kX25vX2xvY2s7Ci0JfQotCS8qIGRldGVybWluZSBkZWZhdWx0IGJ1ZmZlciBzaXplICovCi0JaWYgKGJ1Zl9zaXplID09IDApIHsKLQkJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7Ci0KLQkJc2JhbmQgPSBsb2NhbC0+aHcud2lwaHktPmJhbmRzW2NvbmYtPmNoYW5uZWwtPmJhbmRdOwotCQlidWZfc2l6ZSA9IElFRUU4MDIxMV9NSU5fQU1QRFVfQlVGOwotCQlidWZfc2l6ZSA9IGJ1Zl9zaXplIDw8IHNiYW5kLT5odF9jYXAuYW1wZHVfZmFjdG9yOwotCX0KLQotCi0JLyogZXhhbWluZSBzdGF0ZSBtYWNoaW5lICovCi0Jc3Bpbl9sb2NrX2JoKCZzdGEtPmxvY2spOwotCi0JaWYgKHN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfcnhbdGlkXSAhPSBIVF9BR0dfU1RBVEVfSURMRSkgewotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwotCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJcHJpbnRrKEtFUk5fREVCVUcgInVuZXhwZWN0ZWQgQWRkQkEgUmVxIGZyb20gIgotCQkJCSIlcE0gb24gdGlkICV1XG4iLAotCQkJCW1nbXQtPnNhLCB0aWQpOwotI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRyAqLwotCQlnb3RvIGVuZDsKLQl9Ci0KLQkvKiBwcmVwYXJlIEEtTVBEVSBNTE1FIGZvciBSeCBhZ2dyZWdhdGlvbiAqLwotCXN0YS0+YW1wZHVfbWxtZS50aWRfcnhbdGlkXSA9Ci0JCQlrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdGlkX2FtcGR1X3J4KSwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF0pIHsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKLQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJCXByaW50ayhLRVJOX0VSUiAiYWxsb2NhdGUgcnggbWxtZSB0byB0aWQgJWQgZmFpbGVkXG4iLAotCQkJCQl0aWQpOwotI2VuZGlmCi0JCWdvdG8gZW5kOwotCX0KLQkvKiByeCB0aW1lciAqLwotCXN0YS0+YW1wZHVfbWxtZS50aWRfcnhbdGlkXS0+c2Vzc2lvbl90aW1lci5mdW5jdGlvbiA9Ci0JCQkJc3RhX3J4X2FnZ19zZXNzaW9uX3RpbWVyX2V4cGlyZWQ7Ci0Jc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdLT5zZXNzaW9uX3RpbWVyLmRhdGEgPQotCQkJCSh1bnNpZ25lZCBsb25nKSZzdGEtPnRpbWVyX3RvX3RpZFt0aWRdOwotCWluaXRfdGltZXIoJnN0YS0+YW1wZHVfbWxtZS50aWRfcnhbdGlkXS0+c2Vzc2lvbl90aW1lcik7Ci0KLQl0aWRfYWdnX3J4ID0gc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdOwotCi0JLyogcHJlcGFyZSByZW9yZGVyaW5nIGJ1ZmZlciAqLwotCXRpZF9hZ2dfcngtPnJlb3JkZXJfYnVmID0KLQkJa21hbGxvYyhidWZfc2l6ZSAqIHNpemVvZihzdHJ1Y3Qgc2tfYnVmZiAqKSwgR0ZQX0FUT01JQyk7Ci0JaWYgKCF0aWRfYWdnX3J4LT5yZW9yZGVyX2J1ZikgewotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwotCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJcHJpbnRrKEtFUk5fRVJSICJjYW4gbm90IGFsbG9jYXRlIHJlb3JkZXJpbmcgYnVmZmVyICIKLQkJCSAgICAgICAidG8gdGlkICVkXG4iLCB0aWQpOwotI2VuZGlmCi0JCWtmcmVlKHN0YS0+YW1wZHVfbWxtZS50aWRfcnhbdGlkXSk7Ci0JCWdvdG8gZW5kOwotCX0KLQltZW1zZXQodGlkX2FnZ19yeC0+cmVvcmRlcl9idWYsIDAsCi0JCWJ1Zl9zaXplICogc2l6ZW9mKHN0cnVjdCBza19idWZmICopKTsKLQotCWlmIChsb2NhbC0+b3BzLT5hbXBkdV9hY3Rpb24pCi0JCXJldCA9IGxvY2FsLT5vcHMtPmFtcGR1X2FjdGlvbihodywgSUVFRTgwMjExX0FNUERVX1JYX1NUQVJULAotCQkJCQkgICAgICAgJnN0YS0+c3RhLCB0aWQsICZzdGFydF9zZXFfbnVtKTsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKLQlwcmludGsoS0VSTl9ERUJVRyAiUnggQS1NUERVIHJlcXVlc3Qgb24gdGlkICVkIHJlc3VsdCAlZFxuIiwgdGlkLCByZXQpOwotI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRyAqLwotCi0JaWYgKHJldCkgewotCQlrZnJlZSh0aWRfYWdnX3J4LT5yZW9yZGVyX2J1Zik7Ci0JCWtmcmVlKHRpZF9hZ2dfcngpOwotCQlzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF0gPSBOVUxMOwotCQlnb3RvIGVuZDsKLQl9Ci0KLQkvKiBjaGFuZ2Ugc3RhdGUgYW5kIHNlbmQgYWRkYmEgcmVzcCAqLwotCXN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfcnhbdGlkXSA9IEhUX0FHR19TVEFURV9PUEVSQVRJT05BTDsKLQl0aWRfYWdnX3J4LT5kaWFsb2dfdG9rZW4gPSBkaWFsb2dfdG9rZW47Ci0JdGlkX2FnZ19yeC0+c3NuID0gc3RhcnRfc2VxX251bTsKLQl0aWRfYWdnX3J4LT5oZWFkX3NlcV9udW0gPSBzdGFydF9zZXFfbnVtOwotCXRpZF9hZ2dfcngtPmJ1Zl9zaXplID0gYnVmX3NpemU7Ci0JdGlkX2FnZ19yeC0+dGltZW91dCA9IHRpbWVvdXQ7Ci0JdGlkX2FnZ19yeC0+c3RvcmVkX21wZHVfbnVtID0gMDsKLQlzdGF0dXMgPSBXTEFOX1NUQVRVU19TVUNDRVNTOwotZW5kOgotCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOwotCi1lbmRfbm9fbG9jazoKLQlpZWVlODAyMTFfc2VuZF9hZGRiYV9yZXNwKHN0YS0+c2RhdGEsIHN0YS0+c3RhLmFkZHIsIHRpZCwKLQkJCQkgIGRpYWxvZ190b2tlbiwgc3RhdHVzLCAxLCBidWZfc2l6ZSwgdGltZW91dCk7Ci19Ci0KLXZvaWQgaWVlZTgwMjExX3Byb2Nlc3NfYWRkYmFfcmVzcChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKLQkJCQkgIHN0cnVjdCBzdGFfaW5mbyAqc3RhLAotCQkJCSAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LAotCQkJCSAgc2l6ZV90IGxlbikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9ICZsb2NhbC0+aHc7Ci0JdTE2IGNhcGFiOwotCXUxNiB0aWQsIHN0YXJ0X3NlcV9udW07Ci0JdTggKnN0YXRlOwotCi0JY2FwYWIgPSBsZTE2X3RvX2NwdShtZ210LT51LmFjdGlvbi51LmFkZGJhX3Jlc3AuY2FwYWIpOwotCXRpZCA9IChjYXBhYiAmIElFRUU4MDIxMV9BRERCQV9QQVJBTV9USURfTUFTSykgPj4gMjsKLQotCXN0YXRlID0gJnN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfdHhbdGlkXTsKLQotCXNwaW5fbG9ja19iaCgmc3RhLT5sb2NrKTsKLQotCWlmICghKCpzdGF0ZSAmIEhUX0FEREJBX1JFUVVFU1RFRF9NU0spKSB7Ci0JCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKG1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVzcC5kaWFsb2dfdG9rZW4gIT0KLQkJc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5kaWFsb2dfdG9rZW4pIHsKLQkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCi0JCXByaW50ayhLRVJOX0RFQlVHICJ3cm9uZyBhZGRCQSByZXNwb25zZSB0b2tlbiwgdGlkICVkXG4iLCB0aWQpOwotI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRyAqLwotCQlyZXR1cm47Ci0JfQotCi0JZGVsX3RpbWVyX3N5bmMoJnN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXS0+YWRkYmFfcmVzcF90aW1lcik7Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCi0JcHJpbnRrKEtFUk5fREVCVUcgInN3aXRjaGVkIG9mZiBhZGRCQSB0aW1lciBmb3IgdGlkICVkIFxuIiwgdGlkKTsKLSNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcgKi8KLQlpZiAobGUxNl90b19jcHUobWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXNwLnN0YXR1cykKLQkJCT09IFdMQU5fU1RBVFVTX1NVQ0NFU1MpIHsKLQkJKnN0YXRlIHw9IEhUX0FEREJBX1JFQ0VJVkVEX01TSzsKLQkJc3RhLT5hbXBkdV9tbG1lLmFkZGJhX3JlcV9udW1bdGlkXSA9IDA7Ci0KLQkJaWYgKCpzdGF0ZSA9PSBIVF9BR0dfU1RBVEVfT1BFUkFUSU9OQUwgJiYKLQkJICAgIGxvY2FsLT5ody5hbXBkdV9xdWV1ZXMpCi0JCQlpZWVlODAyMTFfd2FrZV9xdWV1ZShodywgc3RhLT50aWRfdG9fdHhfcVt0aWRdKTsKLQotCQlpZiAobG9jYWwtPm9wcy0+YW1wZHVfYWN0aW9uKSB7Ci0JCQkodm9pZClsb2NhbC0+b3BzLT5hbXBkdV9hY3Rpb24oaHcsCi0JCQkJCSAgICAgICBJRUVFODAyMTFfQU1QRFVfVFhfUkVTVU1FLAotCQkJCQkgICAgICAgJnN0YS0+c3RhLCB0aWQsICZzdGFydF9zZXFfbnVtKTsKLQkJfQotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwotCQlwcmludGsoS0VSTl9ERUJVRyAiUmVzdW1pbmcgVFggYWdncmVnYXRpb24gZm9yIHRpZCAlZFxuIiwgdGlkKTsKLSNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcgKi8KLQkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7Ci0JfSBlbHNlIHsKLQkJc3RhLT5hbXBkdV9tbG1lLmFkZGJhX3JlcV9udW1bdGlkXSsrOwotCQkvKiB0aGlzIHdpbGwgYWxsb3cgdGhlIHN0YXRlIGNoZWNrIGluIHN0b3BfQkFfc2Vzc2lvbiAqLwotCQkqc3RhdGUgPSBIVF9BR0dfU1RBVEVfT1BFUkFUSU9OQUw7Ci0JCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOwotCQlpZWVlODAyMTFfc3RvcF90eF9iYV9zZXNzaW9uKGh3LCBzdGEtPnN0YS5hZGRyLCB0aWQsCi0JCQkJCSAgICAgV0xBTl9CQUNLX0lOSVRJQVRPUik7Ci0JfQorCWllZWU4MDIxMV90eF9za2Ioc2RhdGEsIHNrYiwgMSk7CiB9CiAKIHZvaWQgaWVlZTgwMjExX3Byb2Nlc3NfZGVsYmEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWJzcy5jIGIvbmV0L21hYzgwMjExL2lic3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGJlY2MxCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L21hYzgwMjExL2lic3MuYwpAQCAtMCwwICsxLDkwNyBAQAorLyoKKyAqIElCU1MgbW9kZSBpbXBsZW1lbnRhdGlvbgorICogQ29weXJpZ2h0IDIwMDMtMjAwOCwgSm91bmkgTWFsaW5lbiA8akB3MS5maT4KKyAqIENvcHlyaWdodCAyMDA0LCBJbnN0YW50ODAyIE5ldHdvcmtzLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwNSwgRGV2aWNlc2NhcGUgU29mdHdhcmUsIEluYy4KKyAqIENvcHlyaWdodCAyMDA2LTIwMDcJSmlyaSBCZW5jIDxqYmVuY0BzdXNlLmN6PgorICogQ29weXJpZ2h0IDIwMDcsIE1pY2hhZWwgV3UgPGZsYW1pbmdpY2VAc291cm1pbGsubmV0PgorICogQ29weXJpZ2h0IDIwMDksIEpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+CisjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorCisjaW5jbHVkZSAiaWVlZTgwMjExX2kuaCIKKyNpbmNsdWRlICJyYXRlLmgiCisKKyNkZWZpbmUgSUVFRTgwMjExX1NDQU5fSU5URVJWQUwgKDIgKiBIWikKKyNkZWZpbmUgSUVFRTgwMjExX1NDQU5fSU5URVJWQUxfU0xPVyAoMTUgKiBIWikKKyNkZWZpbmUgSUVFRTgwMjExX0lCU1NfSk9JTl9USU1FT1VUICg3ICogSFopCisKKyNkZWZpbmUgSUVFRTgwMjExX0lCU1NfTUVSR0VfSU5URVJWQUwgKDMwICogSFopCisjZGVmaW5lIElFRUU4MDIxMV9JQlNTX01FUkdFX0RFTEFZIDB4NDAwMDAwCisjZGVmaW5lIElFRUU4MDIxMV9JQlNTX0lOQUNUSVZJVFlfTElNSVQgKDYwICogSFopCisKKyNkZWZpbmUgSUVFRTgwMjExX0lCU1NfTUFYX1NUQV9FTlRSSUVTIDEyOAorCisKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9yeF9tZ210X2F1dGhfaWJzcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCQkJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LAorCQkJCQlzaXplX3QgbGVuKQoreworCXUxNiBhdXRoX2FsZywgYXV0aF90cmFuc2FjdGlvbiwgc3RhdHVzX2NvZGU7CisKKwlpZiAobGVuIDwgMjQgKyA2KQorCQlyZXR1cm47CisKKwlhdXRoX2FsZyA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuYXV0aC5hdXRoX2FsZyk7CisJYXV0aF90cmFuc2FjdGlvbiA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuYXV0aC5hdXRoX3RyYW5zYWN0aW9uKTsKKwlzdGF0dXNfY29kZSA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuYXV0aC5zdGF0dXNfY29kZSk7CisKKwkvKgorCSAqIElFRUUgODAyLjExIHN0YW5kYXJkIGRvZXMgbm90IHJlcXVpcmUgYXV0aGVudGljYXRpb24gaW4gSUJTUworCSAqIG5ldHdvcmtzIGFuZCBtb3N0IGltcGxlbWVudGF0aW9ucyBkbyBub3Qgc2VlbSB0byB1c2UgaXQuCisJICogSG93ZXZlciwgdHJ5IHRvIHJlcGx5IHRvIGF1dGhlbnRpY2F0aW9uIGF0dGVtcHRzIGlmIHNvbWVvbmUKKwkgKiBoYXMgYWN0dWFsbHkgaW1wbGVtZW50ZWQgdGhpcy4KKwkgKi8KKwlpZiAoYXV0aF9hbGcgPT0gV0xBTl9BVVRIX09QRU4gJiYgYXV0aF90cmFuc2FjdGlvbiA9PSAxKQorCQlpZWVlODAyMTFfc2VuZF9hdXRoKHNkYXRhLCAyLCBXTEFOX0FVVEhfT1BFTiwgTlVMTCwgMCwKKwkJCQkgICAgc2RhdGEtPnUuaWJzcy5ic3NpZCwgMCk7Cit9CisKK3N0YXRpYyBpbnQgX19pZWVlODAyMTFfc3RhX2pvaW5faWJzcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCQkgICAgIGNvbnN0IHU4ICpic3NpZCwgY29uc3QgaW50IGJlYWNvbl9pbnQsCisJCQkJICAgICBjb25zdCBpbnQgZnJlcSwKKwkJCQkgICAgIGNvbnN0IHNpemVfdCBzdXBwX3JhdGVzX2xlbiwKKwkJCQkgICAgIGNvbnN0IHU4ICpzdXBwX3JhdGVzLAorCQkJCSAgICAgY29uc3QgdTE2IGNhcGFiaWxpdHksIHU2NCB0c2YpCit7CisJc3RydWN0IGllZWU4MDIxMV9pZl9pYnNzICppZmlic3MgPSAmc2RhdGEtPnUuaWJzczsKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKKwlpbnQgcmVzID0gMCwgcmF0ZXMsIGksIGo7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQ7CisJdTggKnBvczsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKKwl1bmlvbiBpd3JlcV9kYXRhIHdycXU7CisKKwlpZiAobG9jYWwtPm9wcy0+cmVzZXRfdHNmKSB7CisJCS8qIFJlc2V0IG93biBUU0YgdG8gYWxsb3cgdGltZSBzeW5jaHJvbml6YXRpb24gd29yay4gKi8KKwkJbG9jYWwtPm9wcy0+cmVzZXRfdHNmKGxvY2FsX3RvX2h3KGxvY2FsKSk7CisJfQorCisJaWYgKChpZmlic3MtPmZsYWdzICYgSUVFRTgwMjExX0lCU1NfUFJFVl9CU1NJRF9TRVQpICYmCisJICAgbWVtY21wKGlmaWJzcy0+YnNzaWQsIGJzc2lkLCBFVEhfQUxFTikgPT0gMCkKKwkJcmV0dXJuIHJlczsKKworCXNrYiA9IGRldl9hbGxvY19za2IobG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tICsgNDAwKTsKKwlpZiAoIXNrYikgeworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBidWZmZXIgZm9yIHByb2JlICIKKwkJICAgICAgICJyZXNwb25zZVxuIiwgc2RhdGEtPmRldi0+bmFtZSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWlmICghKGlmaWJzcy0+ZmxhZ3MgJiBJRUVFODAyMTFfSUJTU19QUkVWX0JTU0lEX1NFVCkpIHsKKwkJLyogUmVtb3ZlIHBvc3NpYmxlIFNUQSBlbnRyaWVzIGZyb20gb3RoZXIgSUJTUyBuZXR3b3Jrcy4gKi8KKwkJc3RhX2luZm9fZmx1c2hfZGVsYXllZChzZGF0YSk7CisJfQorCisJbWVtY3B5KGlmaWJzcy0+YnNzaWQsIGJzc2lkLCBFVEhfQUxFTik7CisJcmVzID0gaWVlZTgwMjExX2lmX2NvbmZpZyhzZGF0YSwgSUVFRTgwMjExX0lGQ0NfQlNTSUQpOworCWlmIChyZXMpCisJCXJldHVybiByZXM7CisKKwlsb2NhbC0+aHcuY29uZi5iZWFjb25faW50ID0gYmVhY29uX2ludCA+PSAxMCA/IGJlYWNvbl9pbnQgOiAxMDsKKworCXNkYXRhLT5kcm9wX3VuZW5jcnlwdGVkID0gY2FwYWJpbGl0eSAmCisJCVdMQU5fQ0FQQUJJTElUWV9QUklWQUNZID8gMSA6IDA7CisKKwlyZXMgPSBpZWVlODAyMTFfc2V0X2ZyZXEoc2RhdGEsIGZyZXEpOworCisJaWYgKHJlcykKKwkJcmV0dXJuIHJlczsKKworCXNiYW5kID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kXTsKKworCS8qIEJ1aWxkIElCU1MgcHJvYmUgcmVzcG9uc2UgKi8KKworCXNrYl9yZXNlcnZlKHNrYiwgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tKTsKKworCW1nbXQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopCisJCXNrYl9wdXQoc2tiLCAyNCArIHNpemVvZihtZ210LT51LmJlYWNvbikpOworCW1lbXNldChtZ210LCAwLCAyNCArIHNpemVvZihtZ210LT51LmJlYWNvbikpOworCW1nbXQtPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfTUdNVCB8CisJCQkJCSAgSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFU1ApOworCW1lbXNldChtZ210LT5kYSwgMHhmZiwgRVRIX0FMRU4pOworCW1lbWNweShtZ210LT5zYSwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwltZW1jcHkobWdtdC0+YnNzaWQsIGlmaWJzcy0+YnNzaWQsIEVUSF9BTEVOKTsKKwltZ210LT51LmJlYWNvbi5iZWFjb25faW50ID0KKwkJY3B1X3RvX2xlMTYobG9jYWwtPmh3LmNvbmYuYmVhY29uX2ludCk7CisJbWdtdC0+dS5iZWFjb24udGltZXN0YW1wID0gY3B1X3RvX2xlNjQodHNmKTsKKwltZ210LT51LmJlYWNvbi5jYXBhYl9pbmZvID0gY3B1X3RvX2xlMTYoY2FwYWJpbGl0eSk7CisKKwlwb3MgPSBza2JfcHV0KHNrYiwgMiArIGlmaWJzcy0+c3NpZF9sZW4pOworCSpwb3MrKyA9IFdMQU5fRUlEX1NTSUQ7CisJKnBvcysrID0gaWZpYnNzLT5zc2lkX2xlbjsKKwltZW1jcHkocG9zLCBpZmlic3MtPnNzaWQsIGlmaWJzcy0+c3NpZF9sZW4pOworCisJcmF0ZXMgPSBzdXBwX3JhdGVzX2xlbjsKKwlpZiAocmF0ZXMgPiA4KQorCQlyYXRlcyA9IDg7CisJcG9zID0gc2tiX3B1dChza2IsIDIgKyByYXRlcyk7CisJKnBvcysrID0gV0xBTl9FSURfU1VQUF9SQVRFUzsKKwkqcG9zKysgPSByYXRlczsKKwltZW1jcHkocG9zLCBzdXBwX3JhdGVzLCByYXRlcyk7CisKKwlpZiAoc2JhbmQtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikgeworCQlwb3MgPSBza2JfcHV0KHNrYiwgMiArIDEpOworCQkqcG9zKysgPSBXTEFOX0VJRF9EU19QQVJBTVM7CisJCSpwb3MrKyA9IDE7CisJCSpwb3MrKyA9IGllZWU4MDIxMV9mcmVxdWVuY3lfdG9fY2hhbm5lbChmcmVxKTsKKwl9CisKKwlwb3MgPSBza2JfcHV0KHNrYiwgMiArIDIpOworCSpwb3MrKyA9IFdMQU5fRUlEX0lCU1NfUEFSQU1TOworCSpwb3MrKyA9IDI7CisJLyogRklYOiBzZXQgQVRJTSB3aW5kb3cgYmFzZWQgb24gc2NhbiByZXN1bHRzICovCisJKnBvcysrID0gMDsKKwkqcG9zKysgPSAwOworCisJaWYgKHN1cHBfcmF0ZXNfbGVuID4gOCkgeworCQlyYXRlcyA9IHN1cHBfcmF0ZXNfbGVuIC0gODsKKwkJcG9zID0gc2tiX3B1dChza2IsIDIgKyByYXRlcyk7CisJCSpwb3MrKyA9IFdMQU5fRUlEX0VYVF9TVVBQX1JBVEVTOworCQkqcG9zKysgPSByYXRlczsKKwkJbWVtY3B5KHBvcywgJnN1cHBfcmF0ZXNbOF0sIHJhdGVzKTsKKwl9CisKKwlpZmlic3MtPnByb2JlX3Jlc3AgPSBza2I7CisKKwlpZWVlODAyMTFfaWZfY29uZmlnKHNkYXRhLCBJRUVFODAyMTFfSUZDQ19CRUFDT04gfAorCQkJCSAgIElFRUU4MDIxMV9JRkNDX0JFQUNPTl9FTkFCTEVEKTsKKworCisJcmF0ZXMgPSAwOworCWZvciAoaSA9IDA7IGkgPCBzdXBwX3JhdGVzX2xlbjsgaSsrKSB7CisJCWludCBiaXRyYXRlID0gKHN1cHBfcmF0ZXNbaV0gJiAweDdmKSAqIDU7CisJCWZvciAoaiA9IDA7IGogPCBzYmFuZC0+bl9iaXRyYXRlczsgaisrKQorCQkJaWYgKHNiYW5kLT5iaXRyYXRlc1tqXS5iaXRyYXRlID09IGJpdHJhdGUpCisJCQkJcmF0ZXMgfD0gQklUKGopOworCX0KKworCWllZWU4MDIxMV9zdGFfZGVmX3dtbV9wYXJhbXMoc2RhdGEsIHN1cHBfcmF0ZXNfbGVuLCBzdXBwX3JhdGVzKTsKKworCWlmaWJzcy0+ZmxhZ3MgfD0gSUVFRTgwMjExX0lCU1NfUFJFVl9CU1NJRF9TRVQ7CisJaWZpYnNzLT5zdGF0ZSA9IElFRUU4MDIxMV9JQlNTX01MTUVfSk9JTkVEOworCW1vZF90aW1lcigmaWZpYnNzLT50aW1lciwgamlmZmllcyArIElFRUU4MDIxMV9JQlNTX01FUkdFX0lOVEVSVkFMKTsKKworCW1lbXNldCgmd3JxdSwgMCwgc2l6ZW9mKHdycXUpKTsKKwltZW1jcHkod3JxdS5hcF9hZGRyLnNhX2RhdGEsIGJzc2lkLCBFVEhfQUxFTik7CisJd2lyZWxlc3Nfc2VuZF9ldmVudChzZGF0YS0+ZGV2LCBTSU9DR0lXQVAsICZ3cnF1LCBOVUxMKTsKKworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQgaWVlZTgwMjExX3N0YV9qb2luX2lic3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkJICAgc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzcykKK3sKKwlyZXR1cm4gX19pZWVlODAyMTFfc3RhX2pvaW5faWJzcyhzZGF0YSwKKwkJCQkJIGJzcy0+Y2Jzcy5ic3NpZCwKKwkJCQkJIGJzcy0+Y2Jzcy5iZWFjb25faW50ZXJ2YWwsCisJCQkJCSBic3MtPmNic3MuY2hhbm5lbC0+Y2VudGVyX2ZyZXEsCisJCQkJCSBic3MtPnN1cHBfcmF0ZXNfbGVuLCBic3MtPnN1cHBfcmF0ZXMsCisJCQkJCSBic3MtPmNic3MuY2FwYWJpbGl0eSwKKwkJCQkJIGJzcy0+Y2Jzcy50c2YpOworfQorCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfYnNzX2luZm8oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsCisJCQkJICBzaXplX3QgbGVuLAorCQkJCSAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cywKKwkJCQkgIHN0cnVjdCBpZWVlODAyXzExX2VsZW1zICplbGVtcywKKwkJCQkgIGJvb2wgYmVhY29uKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOworCWludCBmcmVxOworCXN0cnVjdCBpZWVlODAyMTFfYnNzICpic3M7CisJc3RydWN0IHN0YV9pbmZvICpzdGE7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsOworCXU2NCBiZWFjb25fdGltZXN0YW1wLCByeF90aW1lc3RhbXA7CisJdTMyIHN1cHBfcmF0ZXMgPSAwOworCWVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCA9IHJ4X3N0YXR1cy0+YmFuZDsKKworCWlmIChlbGVtcy0+ZHNfcGFyYW1zICYmIGVsZW1zLT5kc19wYXJhbXNfbGVuID09IDEpCisJCWZyZXEgPSBpZWVlODAyMTFfY2hhbm5lbF90b19mcmVxdWVuY3koZWxlbXMtPmRzX3BhcmFtc1swXSk7CisJZWxzZQorCQlmcmVxID0gcnhfc3RhdHVzLT5mcmVxOworCisJY2hhbm5lbCA9IGllZWU4MDIxMV9nZXRfY2hhbm5lbChsb2NhbC0+aHcud2lwaHksIGZyZXEpOworCisJaWYgKCFjaGFubmVsIHx8IGNoYW5uZWwtPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fRElTQUJMRUQpCisJCXJldHVybjsKKworCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgJiYgZWxlbXMtPnN1cHBfcmF0ZXMgJiYKKwkgICAgbWVtY21wKG1nbXQtPmJzc2lkLCBzZGF0YS0+dS5pYnNzLmJzc2lkLCBFVEhfQUxFTikgPT0gMCkgeworCQlzdXBwX3JhdGVzID0gaWVlZTgwMjExX3N0YV9nZXRfcmF0ZXMobG9jYWwsIGVsZW1zLCBiYW5kKTsKKworCQlyY3VfcmVhZF9sb2NrKCk7CisKKwkJc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBtZ210LT5zYSk7CisJCWlmIChzdGEpIHsKKwkJCXUzMiBwcmV2X3JhdGVzOworCisJCQlwcmV2X3JhdGVzID0gc3RhLT5zdGEuc3VwcF9yYXRlc1tiYW5kXTsKKwkJCS8qIG1ha2Ugc3VyZSBtYW5kYXRvcnkgcmF0ZXMgYXJlIGFsd2F5cyBhZGRlZCAqLworCQkJc3RhLT5zdGEuc3VwcF9yYXRlc1tiYW5kXSA9IHN1cHBfcmF0ZXMgfAorCQkJCWllZWU4MDIxMV9tYW5kYXRvcnlfcmF0ZXMobG9jYWwsIGJhbmQpOworCisjaWZkZWYgQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcKKwkJCWlmIChzdGEtPnN0YS5zdXBwX3JhdGVzW2JhbmRdICE9IHByZXZfcmF0ZXMpCisJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB1cGRhdGVkIHN1cHBfcmF0ZXMgc2V0ICIKKwkJCQkgICAgImZvciAlcE0gYmFzZWQgb24gYmVhY29uIGluZm8gKDB4JWxseCB8ICIKKwkJCQkgICAgIjB4JWxseCAtPiAweCVsbHgpXG4iLAorCQkJCSAgICBzZGF0YS0+ZGV2LT5uYW1lLAorCQkJCSAgICBzdGEtPnN0YS5hZGRyLAorCQkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKSBwcmV2X3JhdGVzLAorCQkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKSBzdXBwX3JhdGVzLAorCQkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKSBzdGEtPnN0YS5zdXBwX3JhdGVzW2JhbmRdKTsKKyNlbmRpZgorCQl9IGVsc2UKKwkJCWllZWU4MDIxMV9pYnNzX2FkZF9zdGEoc2RhdGEsIG1nbXQtPmJzc2lkLCBtZ210LT5zYSwgc3VwcF9yYXRlcyk7CisKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisJfQorCisJYnNzID0gaWVlZTgwMjExX2Jzc19pbmZvX3VwZGF0ZShsb2NhbCwgcnhfc3RhdHVzLCBtZ210LCBsZW4sIGVsZW1zLAorCQkJCQljaGFubmVsLCBiZWFjb24pOworCWlmICghYnNzKQorCQlyZXR1cm47CisKKwkvKiB3YXMganVzdCB1cGRhdGVkIGluIGllZWU4MDIxMV9ic3NfaW5mb191cGRhdGUgKi8KKwliZWFjb25fdGltZXN0YW1wID0gYnNzLT5jYnNzLnRzZjsKKworCS8qIGNoZWNrIGlmIHdlIG5lZWQgdG8gbWVyZ2UgSUJTUyAqLworCisJLyogbWVyZ2Ugb25seSBvbiBiZWFjb25zICg/Pz8pICovCisJaWYgKCFiZWFjb24pCisJCWdvdG8gcHV0X2JzczsKKworCS8qIHdlIHVzZSBhIGZpeGVkIEJTU0lEICovCisJaWYgKHNkYXRhLT51Lmlic3MuZmxhZ3MgJiBJRUVFODAyMTFfSUJTU19CU1NJRF9TRVQpCisJCWdvdG8gcHV0X2JzczsKKworCS8qIG5vdCBhbiBJQlNTICovCisJaWYgKCEoYnNzLT5jYnNzLmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfSUJTUykpCisJCWdvdG8gcHV0X2JzczsKKworCS8qIGRpZmZlcmVudCBjaGFubmVsICovCisJaWYgKGJzcy0+Y2Jzcy5jaGFubmVsICE9IGxvY2FsLT5vcGVyX2NoYW5uZWwpCisJCWdvdG8gcHV0X2JzczsKKworCS8qIGRpZmZlcmVudCBTU0lEICovCisJaWYgKGVsZW1zLT5zc2lkX2xlbiAhPSBzZGF0YS0+dS5pYnNzLnNzaWRfbGVuIHx8CisJICAgIG1lbWNtcChlbGVtcy0+c3NpZCwgc2RhdGEtPnUuaWJzcy5zc2lkLAorCQkJCXNkYXRhLT51Lmlic3Muc3NpZF9sZW4pKQorCQlnb3RvIHB1dF9ic3M7CisKKwkvKiBzYW1lIEJTU0lEICovCisJaWYgKG1lbWNtcChic3MtPmNic3MuYnNzaWQsIHNkYXRhLT51Lmlic3MuYnNzaWQsIEVUSF9BTEVOKSA9PSAwKQorCQlnb3RvIHB1dF9ic3M7CisKKwlpZiAocnhfc3RhdHVzLT5mbGFnICYgUlhfRkxBR19UU0ZUKSB7CisJCS8qCisJCSAqIEZvciBjb3JyZWN0IElCU1MgbWVyZ2luZyB3ZSBuZWVkIG1hY3RpbWU7IHNpbmNlIG1hY3RpbWUgaXMKKwkJICogZGVmaW5lZCBhcyB0aGUgdGltZSB0aGUgZmlyc3QgZGF0YSBzeW1ib2wgb2YgdGhlIGZyYW1lIGhpdHMKKwkJICogdGhlIFBIWSwgYW5kIHRoZSB0aW1lc3RhbXAgb2YgdGhlIGJlYWNvbiBpcyBkZWZpbmVkIGFzICJ0aGUKKwkJICogdGltZSB0aGF0IHRoZSBkYXRhIHN5bWJvbCBjb250YWluaW5nIHRoZSBmaXJzdCBiaXQgb2YgdGhlCisJCSAqIHRpbWVzdGFtcCBpcyB0cmFuc21pdHRlZCB0byB0aGUgUEhZIHBsdXMgdGhlIHRyYW5zbWl0dGluZworCQkgKiBTVEEncyBkZWxheXMgdGhyb3VnaCBpdHMgbG9jYWwgUEhZIGZyb20gdGhlIE1BQy1QSFkKKwkJICogaW50ZXJmYWNlIHRvIGl0cyBpbnRlcmZhY2Ugd2l0aCB0aGUgV00iICg4MDIuMTEgMTEuMS4yKQorCQkgKiAtIGVxdWFscyB0aGUgdGltZSB0aGlzIGJpdCBhcnJpdmVzIGF0IHRoZSByZWNlaXZlciAtIHdlIGhhdmUKKwkJICogdG8gdGFrZSBpbnRvIGFjY291bnQgdGhlIG9mZnNldCBiZXR3ZWVuIHRoZSB0d28uCisJCSAqCisJCSAqIEUuZy4gYXQgMSBNQml0IHRoYXQgbWVhbnMgbWFjdGltZSBpcyAxOTIgdXNlYyBlYXJsaWVyCisJCSAqICg9MjQgYnl0ZXMgKiA4IHVzZWNzL2J5dGUpIHRoYW4gdGhlIGJlYWNvbiB0aW1lc3RhbXAuCisJCSAqLworCQlpbnQgcmF0ZTsKKworCQlpZiAocnhfc3RhdHVzLT5mbGFnICYgUlhfRkxBR19IVCkKKwkJCXJhdGUgPSA2NTsgLyogVE9ETzogSFQgcmF0ZXMgKi8KKwkJZWxzZQorCQkJcmF0ZSA9IGxvY2FsLT5ody53aXBoeS0+YmFuZHNbYmFuZF0tPgorCQkJCWJpdHJhdGVzW3J4X3N0YXR1cy0+cmF0ZV9pZHhdLmJpdHJhdGU7CisKKwkJcnhfdGltZXN0YW1wID0gcnhfc3RhdHVzLT5tYWN0aW1lICsgKDI0ICogOCAqIDEwIC8gcmF0ZSk7CisJfSBlbHNlIGlmIChsb2NhbCAmJiBsb2NhbC0+b3BzICYmIGxvY2FsLT5vcHMtPmdldF90c2YpCisJCS8qIHNlY29uZCBiZXN0IG9wdGlvbjogZ2V0IGN1cnJlbnQgVFNGICovCisJCXJ4X3RpbWVzdGFtcCA9IGxvY2FsLT5vcHMtPmdldF90c2YobG9jYWxfdG9faHcobG9jYWwpKTsKKwllbHNlCisJCS8qIGNhbid0IG1lcmdlIHdpdGhvdXQga25vd2luZyB0aGUgVFNGICovCisJCXJ4X3RpbWVzdGFtcCA9IC0xTExVOworCisjaWZkZWYgQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcKKwlwcmludGsoS0VSTl9ERUJVRyAiUlggYmVhY29uIFNBPSVwTSBCU1NJRD0iCisJICAgICAgICIlcE0gVFNGPTB4JWxseCBCQ049MHglbGx4IGRpZmY9JWxsZCBAJWx1XG4iLAorCSAgICAgICBtZ210LT5zYSwgbWdtdC0+YnNzaWQsCisJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcnhfdGltZXN0YW1wLAorCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWJlYWNvbl90aW1lc3RhbXAsCisJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpKHJ4X3RpbWVzdGFtcCAtIGJlYWNvbl90aW1lc3RhbXApLAorCSAgICAgICBqaWZmaWVzKTsKKyNlbmRpZgorCisJLyogZ2l2ZSBzbG93IGhhcmR3YXJlIHNvbWUgdGltZSB0byBkbyB0aGUgVFNGIHN5bmMgKi8KKwlpZiAocnhfdGltZXN0YW1wIDwgSUVFRTgwMjExX0lCU1NfTUVSR0VfREVMQVkpCisJCWdvdG8gcHV0X2JzczsKKworCWlmIChiZWFjb25fdGltZXN0YW1wID4gcnhfdGltZXN0YW1wKSB7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBiZWFjb24gVFNGIGhpZ2hlciB0aGFuICIKKwkJICAgICAgICJsb2NhbCBUU0YgLSBJQlNTIG1lcmdlIHdpdGggQlNTSUQgJXBNXG4iLAorCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgbWdtdC0+YnNzaWQpOworI2VuZGlmCisJCWllZWU4MDIxMV9zdGFfam9pbl9pYnNzKHNkYXRhLCBic3MpOworCQlpZWVlODAyMTFfaWJzc19hZGRfc3RhKHNkYXRhLCBtZ210LT5ic3NpZCwgbWdtdC0+c2EsIHN1cHBfcmF0ZXMpOworCX0KKworIHB1dF9ic3M6CisJaWVlZTgwMjExX3J4X2Jzc19wdXQobG9jYWwsIGJzcyk7Cit9CisKKy8qCisgKiBBZGQgYSBuZXcgSUJTUyBzdGF0aW9uLCB3aWxsIGFsc28gYmUgY2FsbGVkIGJ5IHRoZSBSWCBjb2RlIHdoZW4sCisgKiBpbiBJQlNTIG1vZGUsIHJlY2VpdmluZyBhIGZyYW1lIGZyb20gYSB5ZXQtdW5rbm93biBzdGF0aW9uLCBoZW5jZQorICogbXVzdCBiZSBjYWxsYWJsZSBpbiBhdG9taWMgY29udGV4dC4KKyAqLworc3RydWN0IHN0YV9pbmZvICppZWVlODAyMTFfaWJzc19hZGRfc3RhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCQl1OCAqYnNzaWQsdTggKmFkZHIsIHUzMiBzdXBwX3JhdGVzKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOworCXN0cnVjdCBzdGFfaW5mbyAqc3RhOworCWludCBiYW5kID0gbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+YmFuZDsKKworCS8qIFRPRE86IENvdWxkIGNvbnNpZGVyIHJlbW92aW5nIHRoZSBsZWFzdCByZWNlbnRseSB1c2VkIGVudHJ5IGFuZAorCSAqIGFsbG93IG5ldyBvbmUgdG8gYmUgYWRkZWQuICovCisJaWYgKGxvY2FsLT5udW1fc3RhID49IElFRUU4MDIxMV9JQlNTX01BWF9TVEFfRU5UUklFUykgeworCQlpZiAobmV0X3JhdGVsaW1pdCgpKSB7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IE5vIHJvb20gZm9yIGEgbmV3IElCU1MgU1RBICIKKwkJCSAgICAgICAiZW50cnkgJXBNXG4iLCBzZGF0YS0+ZGV2LT5uYW1lLCBhZGRyKTsKKwkJfQorCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpZiAoY29tcGFyZV9ldGhlcl9hZGRyKGJzc2lkLCBzZGF0YS0+dS5pYnNzLmJzc2lkKSkKKwkJcmV0dXJuIE5VTEw7CisKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9ERUJVRworCXByaW50ayhLRVJOX0RFQlVHICIlczogQWRkaW5nIG5ldyBJQlNTIHN0YXRpb24gJXBNIChkZXY9JXMpXG4iLAorCSAgICAgICB3aXBoeV9uYW1lKGxvY2FsLT5ody53aXBoeSksIGFkZHIsIHNkYXRhLT5kZXYtPm5hbWUpOworI2VuZGlmCisKKwlzdGEgPSBzdGFfaW5mb19hbGxvYyhzZGF0YSwgYWRkciwgR0ZQX0FUT01JQyk7CisJaWYgKCFzdGEpCisJCXJldHVybiBOVUxMOworCisJc2V0X3N0YV9mbGFncyhzdGEsIFdMQU5fU1RBX0FVVEhPUklaRUQpOworCisJLyogbWFrZSBzdXJlIG1hbmRhdG9yeSByYXRlcyBhcmUgYWx3YXlzIGFkZGVkICovCisJc3RhLT5zdGEuc3VwcF9yYXRlc1tiYW5kXSA9IHN1cHBfcmF0ZXMgfAorCQkJaWVlZTgwMjExX21hbmRhdG9yeV9yYXRlcyhsb2NhbCwgYmFuZCk7CisKKwlyYXRlX2NvbnRyb2xfcmF0ZV9pbml0KHN0YSk7CisKKwlpZiAoc3RhX2luZm9faW5zZXJ0KHN0YSkpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIHN0YTsKK30KKworc3RhdGljIGludCBpZWVlODAyMTFfc3RhX2FjdGl2ZV9pYnNzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOworCWludCBhY3RpdmUgPSAwOworCXN0cnVjdCBzdGFfaW5mbyAqc3RhOworCisJcmN1X3JlYWRfbG9jaygpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoc3RhLCAmbG9jYWwtPnN0YV9saXN0LCBsaXN0KSB7CisJCWlmIChzdGEtPnNkYXRhID09IHNkYXRhICYmCisJCSAgICB0aW1lX2FmdGVyKHN0YS0+bGFzdF9yeCArIElFRUU4MDIxMV9JQlNTX01FUkdFX0lOVEVSVkFMLAorCQkJICAgICAgIGppZmZpZXMpKSB7CisJCQlhY3RpdmUrKzsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwlyZXR1cm4gYWN0aXZlOworfQorCisKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9zdGFfbWVyZ2VfaWJzcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX2lic3MgKmlmaWJzcyA9ICZzZGF0YS0+dS5pYnNzOworCisJbW9kX3RpbWVyKCZpZmlic3MtPnRpbWVyLCBqaWZmaWVzICsgSUVFRTgwMjExX0lCU1NfTUVSR0VfSU5URVJWQUwpOworCisJaWVlZTgwMjExX3N0YV9leHBpcmUoc2RhdGEsIElFRUU4MDIxMV9JQlNTX0lOQUNUSVZJVFlfTElNSVQpOworCWlmIChpZWVlODAyMTFfc3RhX2FjdGl2ZV9pYnNzKHNkYXRhKSkKKwkJcmV0dXJuOworCisJaWYgKChpZmlic3MtPmZsYWdzICYgSUVFRTgwMjExX0lCU1NfQlNTSURfU0VUKSAmJgorCSAgICAoIShpZmlic3MtPmZsYWdzICYgSUVFRTgwMjExX0lCU1NfQVVUT19DSEFOTkVMX1NFTCkpKQorCQlyZXR1cm47CisKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IE5vIGFjdGl2ZSBJQlNTIFNUQXMgLSB0cnlpbmcgdG8gc2NhbiBmb3Igb3RoZXIgIgorCSAgICAgICAiSUJTUyBuZXR3b3JrcyB3aXRoIHNhbWUgU1NJRCAobWVyZ2UpXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKKworCS8qIFhYWCBtYXliZSByYWN5PyAqLworCWlmIChzZGF0YS0+bG9jYWwtPnNjYW5fcmVxKQorCQlyZXR1cm47CisKKwltZW1jcHkoc2RhdGEtPmxvY2FsLT5pbnRfc2Nhbl9yZXEuc3NpZHNbMF0uc3NpZCwKKwkgICAgICAgaWZpYnNzLT5zc2lkLCBJRUVFODAyMTFfTUFYX1NTSURfTEVOKTsKKwlzZGF0YS0+bG9jYWwtPmludF9zY2FuX3JlcS5zc2lkc1swXS5zc2lkX2xlbiA9IGlmaWJzcy0+c3NpZF9sZW47CisJaWVlZTgwMjExX3JlcXVlc3Rfc2NhbihzZGF0YSwgJnNkYXRhLT5sb2NhbC0+aW50X3NjYW5fcmVxKTsKK30KKworc3RhdGljIGludCBpZWVlODAyMTFfc3RhX2NyZWF0ZV9pYnNzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQoreworCXN0cnVjdCBpZWVlODAyMTFfaWZfaWJzcyAqaWZpYnNzID0gJnNkYXRhLT51Lmlic3M7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CisJdTggKnBvczsKKwl1OCBic3NpZFtFVEhfQUxFTl07CisJdTggc3VwcF9yYXRlc1tJRUVFODAyMTFfTUFYX1NVUFBfUkFURVNdOworCXUxNiBjYXBhYmlsaXR5OworCWludCBpOworCisJaWYgKGlmaWJzcy0+ZmxhZ3MgJiBJRUVFODAyMTFfSUJTU19CU1NJRF9TRVQpIHsKKwkJbWVtY3B5KGJzc2lkLCBpZmlic3MtPmJzc2lkLCBFVEhfQUxFTik7CisJfSBlbHNlIHsKKwkJLyogR2VuZXJhdGUgcmFuZG9tLCBub3QgYnJvYWRjYXN0LCBsb2NhbGx5IGFkbWluaXN0ZXJlZCBCU1NJRC4gTWl4IGluCisJCSAqIG93biBNQUMgYWRkcmVzcyB0byBtYWtlIHN1cmUgdGhhdCBkZXZpY2VzIHRoYXQgZG8gbm90IGhhdmUgcHJvcGVyCisJCSAqIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGdldCBkaWZmZXJlbnQgQlNTSUQuICovCisJCWdldF9yYW5kb21fYnl0ZXMoYnNzaWQsIEVUSF9BTEVOKTsKKwkJZm9yIChpID0gMDsgaSA8IEVUSF9BTEVOOyBpKyspCisJCQlic3NpZFtpXSBePSBzZGF0YS0+ZGV2LT5kZXZfYWRkcltpXTsKKwkJYnNzaWRbMF0gJj0gfjB4MDE7CisJCWJzc2lkWzBdIHw9IDB4MDI7CisJfQorCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBDcmVhdGluZyBuZXcgSUJTUyBuZXR3b3JrLCBCU1NJRCAlcE1cbiIsCisJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIGJzc2lkKTsKKworCXNiYW5kID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kXTsKKworCWlmIChsb2NhbC0+aHcuY29uZi5iZWFjb25faW50ID09IDApCisJCWxvY2FsLT5ody5jb25mLmJlYWNvbl9pbnQgPSAxMDA7CisKKwljYXBhYmlsaXR5ID0gV0xBTl9DQVBBQklMSVRZX0lCU1M7CisKKwlpZiAoc2RhdGEtPmRlZmF1bHRfa2V5KQorCQljYXBhYmlsaXR5IHw9IFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZOworCWVsc2UKKwkJc2RhdGEtPmRyb3BfdW5lbmNyeXB0ZWQgPSAwOworCisJcG9zID0gc3VwcF9yYXRlczsKKwlmb3IgKGkgPSAwOyBpIDwgc2JhbmQtPm5fYml0cmF0ZXM7IGkrKykgeworCQlpbnQgcmF0ZSA9IHNiYW5kLT5iaXRyYXRlc1tpXS5iaXRyYXRlOworCQkqcG9zKysgPSAodTgpIChyYXRlIC8gNSk7CisJfQorCisJcmV0dXJuIF9faWVlZTgwMjExX3N0YV9qb2luX2lic3Moc2RhdGEsCisJCQkJCSBic3NpZCwgbG9jYWwtPmh3LmNvbmYuYmVhY29uX2ludCwKKwkJCQkJIGxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmNlbnRlcl9mcmVxLAorCQkJCQkgc2JhbmQtPm5fYml0cmF0ZXMsIHN1cHBfcmF0ZXMsCisJCQkJCSBjYXBhYmlsaXR5LCAwKTsKK30KKworc3RhdGljIGludCBpZWVlODAyMTFfc3RhX2ZpbmRfaWJzcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX2lic3MgKmlmaWJzcyA9ICZzZGF0YS0+dS5pYnNzOworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOworCXN0cnVjdCBpZWVlODAyMTFfYnNzICpic3M7CisJY29uc3QgdTggKmJzc2lkID0gTlVMTDsKKwlpbnQgYWN0aXZlX2lic3M7CisKKwlpZiAoaWZpYnNzLT5zc2lkX2xlbiA9PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWFjdGl2ZV9pYnNzID0gaWVlZTgwMjExX3N0YV9hY3RpdmVfaWJzcyhzZGF0YSk7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHN0YV9maW5kX2lic3MgKGFjdGl2ZV9pYnNzPSVkKVxuIiwKKwkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgYWN0aXZlX2lic3MpOworI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHICovCisKKwlpZiAoYWN0aXZlX2lic3MpCisJCXJldHVybiAwOworCisJaWYgKGlmaWJzcy0+ZmxhZ3MgJiBJRUVFODAyMTFfSUJTU19CU1NJRF9TRVQpCisJCWJzc2lkID0gaWZpYnNzLT5ic3NpZDsKKwlic3MgPSAodm9pZCAqKWNmZzgwMjExX2dldF9ic3MobG9jYWwtPmh3LndpcGh5LCBOVUxMLCBic3NpZCwKKwkJCQkgICAgICAgaWZpYnNzLT5zc2lkLCBpZmlic3MtPnNzaWRfbGVuLAorCQkJCSAgICAgICBXTEFOX0NBUEFCSUxJVFlfSUJTUywKKwkJCQkgICAgICAgV0xBTl9DQVBBQklMSVRZX0lCU1MpOworCisjaWZkZWYgQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcKKwlpZiAoYnNzKQorCQlwcmludGsoS0VSTl9ERUJVRyAiICAgc3RhX2ZpbmRfaWJzczogc2VsZWN0ZWQgJXBNIGN1cnJlbnQgIgorCQkgICAgICAgIiVwTVxuIiwgYnNzLT5jYnNzLmJzc2lkLCBpZmlic3MtPmJzc2lkKTsKKyNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRyAqLworCisJaWYgKGJzcyAmJgorCSAgICAoIShpZmlic3MtPmZsYWdzICYgSUVFRTgwMjExX0lCU1NfUFJFVl9CU1NJRF9TRVQpIHx8CisJICAgICBtZW1jbXAoaWZpYnNzLT5ic3NpZCwgYnNzLT5jYnNzLmJzc2lkLCBFVEhfQUxFTikpKSB7CisJCWludCByZXQ7CisKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBTZWxlY3RlZCBJQlNTIEJTU0lEICVwTSIKKwkJICAgICAgICIgYmFzZWQgb24gY29uZmlndXJlZCBTU0lEXG4iLAorCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgYnNzLT5jYnNzLmJzc2lkKTsKKworCQlyZXQgPSBpZWVlODAyMTFfc3RhX2pvaW5faWJzcyhzZGF0YSwgYnNzKTsKKwkJaWVlZTgwMjExX3J4X2Jzc19wdXQobG9jYWwsIGJzcyk7CisJCXJldHVybiByZXQ7CisJfSBlbHNlIGlmIChic3MpCisJCWllZWU4MDIxMV9yeF9ic3NfcHV0KGxvY2FsLCBic3MpOworCisjaWZkZWYgQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcKKwlwcmludGsoS0VSTl9ERUJVRyAiICAgZGlkIG5vdCB0cnkgdG8gam9pbiBpYnNzXG4iKTsKKyNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRyAqLworCisJLyogU2VsZWN0ZWQgSUJTUyBub3QgZm91bmQgaW4gY3VycmVudCBzY2FuIHJlc3VsdHMgLSB0cnkgdG8gc2NhbiAqLworCWlmIChpZmlic3MtPnN0YXRlID09IElFRUU4MDIxMV9JQlNTX01MTUVfSk9JTkVEICYmCisJICAgICFpZWVlODAyMTFfc3RhX2FjdGl2ZV9pYnNzKHNkYXRhKSkgeworCQltb2RfdGltZXIoJmlmaWJzcy0+dGltZXIsIGppZmZpZXMgKworCQkJCQkgIElFRUU4MDIxMV9JQlNTX01FUkdFX0lOVEVSVkFMKTsKKwl9IGVsc2UgaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgbG9jYWwtPmxhc3Rfc2Nhbl9jb21wbGV0ZWQgKworCQkJCQlJRUVFODAyMTFfU0NBTl9JTlRFUlZBTCkpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBUcmlnZ2VyIG5ldyBzY2FuIHRvIGZpbmQgYW4gSUJTUyB0byAiCisJCSAgICAgICAiam9pblxuIiwgc2RhdGEtPmRldi0+bmFtZSk7CisKKwkJLyogWFhYIG1heWJlIHJhY3k/ICovCisJCWlmIChsb2NhbC0+c2Nhbl9yZXEpCisJCQlyZXR1cm4gLUVCVVNZOworCisJCW1lbWNweShsb2NhbC0+aW50X3NjYW5fcmVxLnNzaWRzWzBdLnNzaWQsCisJCSAgICAgICBpZmlic3MtPnNzaWQsIElFRUU4MDIxMV9NQVhfU1NJRF9MRU4pOworCQlsb2NhbC0+aW50X3NjYW5fcmVxLnNzaWRzWzBdLnNzaWRfbGVuID0gaWZpYnNzLT5zc2lkX2xlbjsKKwkJcmV0dXJuIGllZWU4MDIxMV9yZXF1ZXN0X3NjYW4oc2RhdGEsICZsb2NhbC0+aW50X3NjYW5fcmVxKTsKKwl9IGVsc2UgaWYgKGlmaWJzcy0+c3RhdGUgIT0gSUVFRTgwMjExX0lCU1NfTUxNRV9KT0lORUQpIHsKKwkJaW50IGludGVydmFsID0gSUVFRTgwMjExX1NDQU5fSU5URVJWQUw7CisKKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgaWZpYnNzLT5pYnNzX2pvaW5fcmVxICsKKwkJCSAgICAgICBJRUVFODAyMTFfSUJTU19KT0lOX1RJTUVPVVQpKSB7CisJCQlpZiAoIShsb2NhbC0+b3Blcl9jaGFubmVsLT5mbGFncyAmCisJCQkJCQlJRUVFODAyMTFfQ0hBTl9OT19JQlNTKSkKKwkJCQlyZXR1cm4gaWVlZTgwMjExX3N0YV9jcmVhdGVfaWJzcyhzZGF0YSk7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IElCU1Mgbm90IGFsbG93ZWQgb24iCisJCQkgICAgICAgIiAlZCBNSHpcbiIsIHNkYXRhLT5kZXYtPm5hbWUsCisJCQkgICAgICAgbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+Y2VudGVyX2ZyZXEpOworCisJCQkvKiBObyBJQlNTIGZvdW5kIC0gZGVjcmVhc2Ugc2NhbiBpbnRlcnZhbCBhbmQgY29udGludWUKKwkJCSAqIHNjYW5uaW5nLiAqLworCQkJaW50ZXJ2YWwgPSBJRUVFODAyMTFfU0NBTl9JTlRFUlZBTF9TTE9XOworCQl9CisKKwkJaWZpYnNzLT5zdGF0ZSA9IElFRUU4MDIxMV9JQlNTX01MTUVfU0VBUkNIOworCQltb2RfdGltZXIoJmlmaWJzcy0+dGltZXIsIGppZmZpZXMgKyBpbnRlcnZhbCk7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfbWdtdF9wcm9iZV9yZXEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkJCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwKKwkJCQkJc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX2lic3MgKmlmaWJzcyA9ICZzZGF0YS0+dS5pYnNzOworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOworCWludCB0eF9sYXN0X2JlYWNvbjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqcmVzcDsKKwl1OCAqcG9zLCAqZW5kOworCisJaWYgKGlmaWJzcy0+c3RhdGUgIT0gSUVFRTgwMjExX0lCU1NfTUxNRV9KT0lORUQgfHwKKwkgICAgbGVuIDwgMjQgKyAyIHx8ICFpZmlic3MtPnByb2JlX3Jlc3ApCisJCXJldHVybjsKKworCWlmIChsb2NhbC0+b3BzLT50eF9sYXN0X2JlYWNvbikKKwkJdHhfbGFzdF9iZWFjb24gPSBsb2NhbC0+b3BzLT50eF9sYXN0X2JlYWNvbihsb2NhbF90b19odyhsb2NhbCkpOworCWVsc2UKKwkJdHhfbGFzdF9iZWFjb24gPSAxOworCisjaWZkZWYgQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFJYIFByb2JlUmVxIFNBPSVwTSBEQT0lcE0gQlNTSUQ9JXBNIgorCSAgICAgICAiICh0eF9sYXN0X2JlYWNvbj0lZClcbiIsCisJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIG1nbXQtPnNhLCBtZ210LT5kYSwKKwkgICAgICAgbWdtdC0+YnNzaWQsIHR4X2xhc3RfYmVhY29uKTsKKyNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRyAqLworCisJaWYgKCF0eF9sYXN0X2JlYWNvbikKKwkJcmV0dXJuOworCisJaWYgKG1lbWNtcChtZ210LT5ic3NpZCwgaWZpYnNzLT5ic3NpZCwgRVRIX0FMRU4pICE9IDAgJiYKKwkgICAgbWVtY21wKG1nbXQtPmJzc2lkLCAiXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmIiwgRVRIX0FMRU4pICE9IDApCisJCXJldHVybjsKKworCWVuZCA9ICgodTggKikgbWdtdCkgKyBsZW47CisJcG9zID0gbWdtdC0+dS5wcm9iZV9yZXEudmFyaWFibGU7CisJaWYgKHBvc1swXSAhPSBXTEFOX0VJRF9TU0lEIHx8CisJICAgIHBvcyArIDIgKyBwb3NbMV0gPiBlbmQpIHsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEludmFsaWQgU1NJRCBJRSBpbiBQcm9iZVJlcSAiCisJCSAgICAgICAiZnJvbSAlcE1cbiIsCisJCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBtZ210LT5zYSk7CisjZW5kaWYKKwkJcmV0dXJuOworCX0KKwlpZiAocG9zWzFdICE9IDAgJiYKKwkgICAgKHBvc1sxXSAhPSBpZmlic3MtPnNzaWRfbGVuIHx8CisJICAgICBtZW1jbXAocG9zICsgMiwgaWZpYnNzLT5zc2lkLCBpZmlic3MtPnNzaWRfbGVuKSAhPSAwKSkgeworCQkvKiBJZ25vcmUgUHJvYmVSZXEgZm9yIGZvcmVpZ24gU1NJRCAqLworCQlyZXR1cm47CisJfQorCisJLyogUmVwbHkgd2l0aCBQcm9iZVJlc3AgKi8KKwlza2IgPSBza2JfY29weShpZmlic3MtPnByb2JlX3Jlc3AsIEdGUF9LRVJORUwpOworCWlmICghc2tiKQorCQlyZXR1cm47CisKKwlyZXNwID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSBza2ItPmRhdGE7CisJbWVtY3B5KHJlc3AtPmRhLCBtZ210LT5zYSwgRVRIX0FMRU4pOworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBTZW5kaW5nIFByb2JlUmVzcCB0byAlcE1cbiIsCisJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIHJlc3AtPmRhKTsKKyNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRyAqLworCWllZWU4MDIxMV90eF9za2Ioc2RhdGEsIHNrYiwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9yeF9tZ210X3Byb2JlX3Jlc3Aoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsCisJCQkJCSBzaXplX3QgbGVuLAorCQkJCQkgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cykKK3sKKwlzaXplX3QgYmFzZWxlbjsKKwlzdHJ1Y3QgaWVlZTgwMl8xMV9lbGVtcyBlbGVtczsKKworCWlmIChtZW1jbXAobWdtdC0+ZGEsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTikpCisJCXJldHVybjsgLyogaWdub3JlIFByb2JlUmVzcCB0byBmb3JlaWduIGFkZHJlc3MgKi8KKworCWJhc2VsZW4gPSAodTggKikgbWdtdC0+dS5wcm9iZV9yZXNwLnZhcmlhYmxlIC0gKHU4ICopIG1nbXQ7CisJaWYgKGJhc2VsZW4gPiBsZW4pCisJCXJldHVybjsKKworCWllZWU4MDJfMTFfcGFyc2VfZWxlbXMobWdtdC0+dS5wcm9iZV9yZXNwLnZhcmlhYmxlLCBsZW4gLSBiYXNlbGVuLAorCQkJCSZlbGVtcyk7CisKKwlpZWVlODAyMTFfcnhfYnNzX2luZm8oc2RhdGEsIG1nbXQsIGxlbiwgcnhfc3RhdHVzLCAmZWxlbXMsIGZhbHNlKTsKK30KKworc3RhdGljIHZvaWQgaWVlZTgwMjExX3J4X21nbXRfYmVhY29uKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LAorCQkJCSAgICAgc2l6ZV90IGxlbiwKKwkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMpCit7CisJc2l6ZV90IGJhc2VsZW47CisJc3RydWN0IGllZWU4MDJfMTFfZWxlbXMgZWxlbXM7CisKKwkvKiBQcm9jZXNzIGJlYWNvbiBmcm9tIHRoZSBjdXJyZW50IEJTUyAqLworCWJhc2VsZW4gPSAodTggKikgbWdtdC0+dS5iZWFjb24udmFyaWFibGUgLSAodTggKikgbWdtdDsKKwlpZiAoYmFzZWxlbiA+IGxlbikKKwkJcmV0dXJuOworCisJaWVlZTgwMl8xMV9wYXJzZV9lbGVtcyhtZ210LT51LmJlYWNvbi52YXJpYWJsZSwgbGVuIC0gYmFzZWxlbiwgJmVsZW1zKTsKKworCWllZWU4MDIxMV9yeF9ic3NfaW5mbyhzZGF0YSwgbWdtdCwgbGVuLCByeF9zdGF0dXMsICZlbGVtcywgdHJ1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9pYnNzX3J4X3F1ZXVlZF9tZ210KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCQkgIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1czsKKwlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQ7CisJdTE2IGZjOworCisJcnhfc3RhdHVzID0gKHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICopIHNrYi0+Y2I7CisJbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiLT5kYXRhOworCWZjID0gbGUxNl90b19jcHUobWdtdC0+ZnJhbWVfY29udHJvbCk7CisKKwlzd2l0Y2ggKGZjICYgSUVFRTgwMjExX0ZDVExfU1RZUEUpIHsKKwljYXNlIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVE6CisJCWllZWU4MDIxMV9yeF9tZ210X3Byb2JlX3JlcShzZGF0YSwgbWdtdCwgc2tiLT5sZW4pOworCQlicmVhazsKKwljYXNlIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVNQOgorCQlpZWVlODAyMTFfcnhfbWdtdF9wcm9iZV9yZXNwKHNkYXRhLCBtZ210LCBza2ItPmxlbiwKKwkJCQkJICAgICByeF9zdGF0dXMpOworCQlicmVhazsKKwljYXNlIElFRUU4MDIxMV9TVFlQRV9CRUFDT046CisJCWllZWU4MDIxMV9yeF9tZ210X2JlYWNvbihzZGF0YSwgbWdtdCwgc2tiLT5sZW4sCisJCQkJCSByeF9zdGF0dXMpOworCQlicmVhazsKKwljYXNlIElFRUU4MDIxMV9TVFlQRV9BVVRIOgorCQlpZWVlODAyMTFfcnhfbWdtdF9hdXRoX2lic3Moc2RhdGEsIG1nbXQsIHNrYi0+bGVuKTsKKwkJYnJlYWs7CisJfQorCisJa2ZyZWVfc2tiKHNrYik7Cit9CisKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9pYnNzX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEsIHUuaWJzcy53b3JrKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX2lic3MgKmlmaWJzczsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCisJaWYgKCFuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKQorCQlyZXR1cm47CisKKwlpZiAobG9jYWwtPnN3X3NjYW5uaW5nIHx8IGxvY2FsLT5od19zY2FubmluZykKKwkJcmV0dXJuOworCisJaWYgKFdBUk5fT04oc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FESE9DKSkKKwkJcmV0dXJuOworCWlmaWJzcyA9ICZzZGF0YS0+dS5pYnNzOworCisJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmaWZpYnNzLT5za2JfcXVldWUpKSkKKwkJaWVlZTgwMjExX2lic3NfcnhfcXVldWVkX21nbXQoc2RhdGEsIHNrYik7CisKKwlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChJRUVFODAyMTFfSUJTU19SRVFfUlVOLCAmaWZpYnNzLT5yZXF1ZXN0KSkKKwkJcmV0dXJuOworCisJc3dpdGNoIChpZmlic3MtPnN0YXRlKSB7CisJY2FzZSBJRUVFODAyMTFfSUJTU19NTE1FX1NFQVJDSDoKKwkJaWVlZTgwMjExX3N0YV9maW5kX2lic3Moc2RhdGEpOworCQlicmVhazsKKwljYXNlIElFRUU4MDIxMV9JQlNTX01MTUVfSk9JTkVEOgorCQlpZWVlODAyMTFfc3RhX21lcmdlX2lic3Moc2RhdGEpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlXQVJOX09OKDEpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9pYnNzX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9CisJCShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICopIGRhdGE7CisJc3RydWN0IGllZWU4MDIxMV9pZl9pYnNzICppZmlic3MgPSAmc2RhdGEtPnUuaWJzczsKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKKworCXNldF9iaXQoSUVFRTgwMjExX0lCU1NfUkVRX1JVTiwgJmlmaWJzcy0+cmVxdWVzdCk7CisJcXVldWVfd29yayhsb2NhbC0+aHcud29ya3F1ZXVlLCAmaWZpYnNzLT53b3JrKTsKK30KKwordm9pZCBpZWVlODAyMTFfaWJzc19zZXR1cF9zZGF0YShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX2lic3MgKmlmaWJzcyA9ICZzZGF0YS0+dS5pYnNzOworCisJSU5JVF9XT1JLKCZpZmlic3MtPndvcmssIGllZWU4MDIxMV9pYnNzX3dvcmspOworCXNldHVwX3RpbWVyKCZpZmlic3MtPnRpbWVyLCBpZWVlODAyMTFfaWJzc190aW1lciwKKwkJICAgICh1bnNpZ25lZCBsb25nKSBzZGF0YSk7CisJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmaWZpYnNzLT5za2JfcXVldWUpOworCisJaWZpYnNzLT5mbGFncyB8PSBJRUVFODAyMTFfSUJTU19BVVRPX0JTU0lEX1NFTCB8CisJCQlJRUVFODAyMTFfSUJTU19BVVRPX0NIQU5ORUxfU0VMOworfQorCitpbnQgaWVlZTgwMjExX2lic3NfY29tbWl0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQoreworCXN0cnVjdCBpZWVlODAyMTFfaWZfaWJzcyAqaWZpYnNzID0gJnNkYXRhLT51Lmlic3M7CisKKwlpZmlic3MtPmZsYWdzICY9IH5JRUVFODAyMTFfSUJTU19QUkVWX0JTU0lEX1NFVDsKKworCWlmIChpZmlic3MtPnNzaWRfbGVuKQorCQlpZmlic3MtPmZsYWdzIHw9IElFRUU4MDIxMV9JQlNTX1NTSURfU0VUOworCWVsc2UKKwkJaWZpYnNzLT5mbGFncyAmPSB+SUVFRTgwMjExX0lCU1NfU1NJRF9TRVQ7CisKKwlpZmlic3MtPmlic3Nfam9pbl9yZXEgPSBqaWZmaWVzOworCWlmaWJzcy0+c3RhdGUgPSBJRUVFODAyMTFfSUJTU19NTE1FX1NFQVJDSDsKKworCXJldHVybiBpZWVlODAyMTFfc3RhX2ZpbmRfaWJzcyhzZGF0YSk7Cit9CisKK2ludCBpZWVlODAyMTFfaWJzc19zZXRfc3NpZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgY2hhciAqc3NpZCwgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX2lic3MgKmlmaWJzcyA9ICZzZGF0YS0+dS5pYnNzOworCisJaWYgKGxlbiA+IElFRUU4MDIxMV9NQVhfU1NJRF9MRU4pCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGlmaWJzcy0+c3NpZF9sZW4gIT0gbGVuIHx8IG1lbWNtcChpZmlic3MtPnNzaWQsIHNzaWQsIGxlbikgIT0gMCkgeworCQltZW1zZXQoaWZpYnNzLT5zc2lkLCAwLCBzaXplb2YoaWZpYnNzLT5zc2lkKSk7CisJCW1lbWNweShpZmlic3MtPnNzaWQsIHNzaWQsIGxlbik7CisJCWlmaWJzcy0+c3NpZF9sZW4gPSBsZW47CisJfQorCisJcmV0dXJuIGllZWU4MDIxMV9pYnNzX2NvbW1pdChzZGF0YSk7Cit9CisKK2ludCBpZWVlODAyMTFfaWJzc19nZXRfc3NpZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgY2hhciAqc3NpZCwgc2l6ZV90ICpsZW4pCit7CisJc3RydWN0IGllZWU4MDIxMV9pZl9pYnNzICppZmlic3MgPSAmc2RhdGEtPnUuaWJzczsKKworCW1lbWNweShzc2lkLCBpZmlic3MtPnNzaWQsIGlmaWJzcy0+c3NpZF9sZW4pOworCSpsZW4gPSBpZmlic3MtPnNzaWRfbGVuOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBpZWVlODAyMTFfaWJzc19zZXRfYnNzaWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHU4ICpic3NpZCkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX2lic3MgKmlmaWJzcyA9ICZzZGF0YS0+dS5pYnNzOworCisJaWYgKGlzX3ZhbGlkX2V0aGVyX2FkZHIoYnNzaWQpKSB7CisJCW1lbWNweShpZmlic3MtPmJzc2lkLCBic3NpZCwgRVRIX0FMRU4pOworCQlpZmlic3MtPmZsYWdzIHw9IElFRUU4MDIxMV9JQlNTX0JTU0lEX1NFVDsKKwl9IGVsc2UgeworCQltZW1zZXQoaWZpYnNzLT5ic3NpZCwgMCwgRVRIX0FMRU4pOworCQlpZmlic3MtPmZsYWdzICY9IH5JRUVFODAyMTFfSUJTU19CU1NJRF9TRVQ7CisJfQorCisJaWYgKG5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldikpIHsKKwkJaWYgKGllZWU4MDIxMV9pZl9jb25maWcoc2RhdGEsIElFRUU4MDIxMV9JRkNDX0JTU0lEKSkgeworCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBGYWlsZWQgdG8gY29uZmlnIG5ldyBCU1NJRCB0byAiCisJCQkgICAgICAgInRoZSBsb3ctbGV2ZWwgZHJpdmVyXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKKwkJfQorCX0KKworCXJldHVybiBpZWVlODAyMTFfaWJzc19jb21taXQoc2RhdGEpOworfQorCisvKiBzY2FuIGZpbmlzaGVkIG5vdGlmaWNhdGlvbiAqLwordm9pZCBpZWVlODAyMTFfaWJzc19ub3RpZnlfc2Nhbl9jb21wbGV0ZWQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpCit7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBsb2NhbC0+c2Nhbl9zZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX2lic3MgKmlmaWJzczsKKworCWlmIChzZGF0YSAmJiBzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHsKKwkJaWZpYnNzID0gJnNkYXRhLT51Lmlic3M7CisJCWlmICgoIShpZmlic3MtPmZsYWdzICYgSUVFRTgwMjExX0lCU1NfUFJFVl9CU1NJRF9TRVQpKSB8fAorCQkgICAgIWllZWU4MDIxMV9zdGFfYWN0aXZlX2lic3Moc2RhdGEpKQorCQkJaWVlZTgwMjExX3N0YV9maW5kX2lic3Moc2RhdGEpOworCX0KK30KKworaWVlZTgwMjExX3J4X3Jlc3VsdAoraWVlZTgwMjExX2lic3NfcnhfbWdtdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OworCXUxNiBmYzsKKworCWlmIChza2ItPmxlbiA8IDI0KQorCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOworCisJbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiLT5kYXRhOworCWZjID0gbGUxNl90b19jcHUobWdtdC0+ZnJhbWVfY29udHJvbCk7CisKKwlzd2l0Y2ggKGZjICYgSUVFRTgwMjExX0ZDVExfU1RZUEUpIHsKKwljYXNlIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVNQOgorCWNhc2UgSUVFRTgwMjExX1NUWVBFX0JFQUNPTjoKKwkJbWVtY3B5KHNrYi0+Y2IsIHJ4X3N0YXR1cywgc2l6ZW9mKCpyeF9zdGF0dXMpKTsKKwljYXNlIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVE6CisJY2FzZSBJRUVFODAyMTFfU1RZUEVfQVVUSDoKKwkJc2tiX3F1ZXVlX3RhaWwoJnNkYXRhLT51Lmlic3Muc2tiX3F1ZXVlLCBza2IpOworCQlxdWV1ZV93b3JrKGxvY2FsLT5ody53b3JrcXVldWUsICZzZGF0YS0+dS5pYnNzLndvcmspOworCQlyZXR1cm4gUlhfUVVFVUVEOworCX0KKworCXJldHVybiBSWF9EUk9QX01PTklUT1I7Cit9CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaCBiL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oCmluZGV4IGYzZWVjOTg5Li5mYmI5MWYxIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaAorKysgYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaApAQCAtNDMsNyArNDMsNyBAQAogCiAvKiBSZXF1aXJlZCBlbmNyeXB0aW9uIGhlYWQgYW5kIHRhaWxyb29tICovCiAjZGVmaW5lIElFRUU4MDIxMV9FTkNSWVBUX0hFQURST09NIDgKLSNkZWZpbmUgSUVFRTgwMjExX0VOQ1JZUFRfVEFJTFJPT00gMTIKKyNkZWZpbmUgSUVFRTgwMjExX0VOQ1JZUFRfVEFJTFJPT00gMTgKIAogLyogSUVFRSA4MDIuMTEgKENoLiA5LjUgRGVmcmFnbWVudGF0aW9uKSByZXF1aXJlcyBzdXBwb3J0IGZvciBjb25jdXJyZW50CiAgKiByZWNlcHRpb24gb2YgYXQgbGVhc3QgdGhyZWUgZnJhZ21lbnRlZCBmcmFtZXMuIFRoaXMgbGltaXQgY2FuIGJlIGluY3JlYXNlZApAQCAtNTcsNiArNTcsOCBAQAogICovCiAjZGVmaW5lIElFRUU4MDIxMV9TQ0FOX1JFU1VMVF9FWFBJUkUgKDEwICogSFopCiAKKyNkZWZpbmUgVFVfVE9fRVhQX1RJTUUoeCkJKGppZmZpZXMgKyB1c2Vjc190b19qaWZmaWVzKCh4KSAqIDEwMjQpKQorCiBzdHJ1Y3QgaWVlZTgwMjExX2ZyYWdtZW50X2VudHJ5IHsKIAl1bnNpZ25lZCBsb25nIGZpcnN0X2ZyYWdfdGltZTsKIAl1bnNpZ25lZCBpbnQgc2VxOwpAQCAtNzAsNDMgKzcyLDM2IEBACiAKIAogc3RydWN0IGllZWU4MDIxMV9ic3MgewotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqaG5leHQ7CisJLyogWWVzLCB0aGlzIGlzIGEgaGFjayAqLworCXN0cnVjdCBjZmc4MDIxMV9ic3MgY2JzczsKKworCS8qIGRvbid0IHdhbnQgdG8gbG9vayB1cCBhbGwgdGhlIHRpbWUgKi8KIAlzaXplX3Qgc3NpZF9sZW47Ci0KLQlhdG9taWNfdCB1c2VyczsKLQotCXU4IGJzc2lkW0VUSF9BTEVOXTsKIAl1OCBzc2lkW0lFRUU4MDIxMV9NQVhfU1NJRF9MRU5dOworCiAJdTggZHRpbV9wZXJpb2Q7Ci0JdTE2IGNhcGFiaWxpdHk7IC8qIGhvc3QgYnl0ZSBvcmRlciAqLwotCWVudW0gaWVlZTgwMjExX2JhbmQgYmFuZDsKLQlpbnQgZnJlcTsKLQlpbnQgc2lnbmFsLCBub2lzZSwgcXVhbDsKLQl1OCAqaWVzOyAvKiBhbGwgaW5mb3JtYXRpb24gZWxlbWVudHMgZnJvbSB0aGUgbGFzdCBCZWFjb24gb3IgUHJvYmUKLQkJICAqIFJlc3BvbnNlIGZyYW1lczsgbm90ZSBCZWFjb24gZnJhbWUgaXMgbm90IGFsbG93ZWQgdG8KLQkJICAqIG92ZXJyaWRlIHZhbHVlcyBmcm9tIFByb2JlIFJlc3BvbnNlICovCi0Jc2l6ZV90IGllc19sZW47CisKIAlib29sIHdtbV91c2VkOworCisJdW5zaWduZWQgbG9uZyBsYXN0X3Byb2JlX3Jlc3A7CisKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSAogCXU4ICptZXNoX2lkOwogCXNpemVfdCBtZXNoX2lkX2xlbjsKIAl1OCAqbWVzaF9jZmc7CiAjZW5kaWYKKwogI2RlZmluZSBJRUVFODAyMTFfTUFYX1NVUFBfUkFURVMgMzIKIAl1OCBzdXBwX3JhdGVzW0lFRUU4MDIxMV9NQVhfU1VQUF9SQVRFU107CiAJc2l6ZV90IHN1cHBfcmF0ZXNfbGVuOwotCXU2NCB0aW1lc3RhbXA7Ci0JaW50IGJlYWNvbl9pbnQ7CiAKLQl1bnNpZ25lZCBsb25nIGxhc3RfcHJvYmVfcmVzcDsKLQl1bnNpZ25lZCBsb25nIGxhc3RfdXBkYXRlOwotCi0JLyogZHVyaW5nIGFzc29jYXRpb24sIHdlIHNhdmUgYW4gRVJQIHZhbHVlIGZyb20gYSBwcm9iZSByZXNwb25zZSBzbworCS8qCisJICogRHVyaW5nIGFzc29jYXRpb24sIHdlIHNhdmUgYW4gRVJQIHZhbHVlIGZyb20gYSBwcm9iZSByZXNwb25zZSBzbwogCSAqIHRoYXQgd2UgY2FuIGZlZWQgRVJQIGluZm8gdG8gdGhlIGRyaXZlciB3aGVuIGhhbmRsaW5nIHRoZQogCSAqIGFzc29jaWF0aW9uIGNvbXBsZXRlcy4gdGhlc2UgZmllbGRzIHByb2JhYmx5IHdvbid0IGJlIHVwLXRvLWRhdGUKLQkgKiBvdGhlcndpc2UsIHlvdSBwcm9iYWJseSBkb24ndCB3YW50IHRvIHVzZSB0aGVtLiAqLwotCWludCBoYXNfZXJwX3ZhbHVlOworCSAqIG90aGVyd2lzZSwgeW91IHByb2JhYmx5IGRvbid0IHdhbnQgdG8gdXNlIHRoZW0uCisJICovCisJYm9vbCBoYXNfZXJwX3ZhbHVlOwogCXU4IGVycF92YWx1ZTsKIH07CiAKQEAgLTI0NCw3ICsyMzksNyBAQAogCXU4IGZsYWdzOwogfTsKIAotLyogZmxhZ3MgdXNlZCBpbiBzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YS5mbGFncyAqLworLyogZmxhZ3MgdXNlZCBpbiBzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQuZmxhZ3MgKi8KICNkZWZpbmUgSUVFRTgwMjExX1NUQV9TU0lEX1NFVAkJQklUKDApCiAjZGVmaW5lIElFRUU4MDIxMV9TVEFfQlNTSURfU0VUCQlCSVQoMSkKICNkZWZpbmUgSUVFRTgwMjExX1NUQV9QUkVWX0JTU0lEX1NFVAlCSVQoMikKQEAgLTI1OCwzNyArMjUzLDM5IEBACiAjZGVmaW5lIElFRUU4MDIxMV9TVEFfQVVUT19CU1NJRF9TRUwJQklUKDExKQogI2RlZmluZSBJRUVFODAyMTFfU1RBX0FVVE9fQ0hBTk5FTF9TRUwJQklUKDEyKQogI2RlZmluZSBJRUVFODAyMTFfU1RBX1BSSVZBQ1lfSU5WT0tFRAlCSVQoMTMpCisjZGVmaW5lIElFRUU4MDIxMV9TVEFfVEtJUF9XRVBfVVNFRAlCSVQoMTQpCisjZGVmaW5lIElFRUU4MDIxMV9TVEFfQ1NBX1JFQ0VJVkVECUJJVCgxNSkKKyNkZWZpbmUgSUVFRTgwMjExX1NUQV9NRlBfRU5BQkxFRAlCSVQoMTYpCiAvKiBmbGFncyBmb3IgTUxNRSByZXF1ZXN0ICovCiAjZGVmaW5lIElFRUU4MDIxMV9TVEFfUkVRX1NDQU4gMAogI2RlZmluZSBJRUVFODAyMTFfU1RBX1JFUV9ESVJFQ1RfUFJPQkUgMQogI2RlZmluZSBJRUVFODAyMTFfU1RBX1JFUV9BVVRIIDIKICNkZWZpbmUgSUVFRTgwMjExX1NUQV9SRVFfUlVOICAzCiAKLS8qIFNUQS9JQlNTIE1MTUUgc3RhdGVzICovCi1lbnVtIGllZWU4MDIxMV9zdGFfbWxtZV9zdGF0ZSB7Ci0JSUVFRTgwMjExX1NUQV9NTE1FX0RJU0FCTEVELAotCUlFRUU4MDIxMV9TVEFfTUxNRV9ESVJFQ1RfUFJPQkUsCi0JSUVFRTgwMjExX1NUQV9NTE1FX0FVVEhFTlRJQ0FURSwKLQlJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFLAotCUlFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEVELAotCUlFRUU4MDIxMV9TVEFfTUxNRV9JQlNTX1NFQVJDSCwKLQlJRUVFODAyMTFfU1RBX01MTUVfSUJTU19KT0lORUQsCi19OwotCiAvKiBiaXRmaWVsZCBvZiBhbGxvd2VkIGF1dGggYWxncyAqLwogI2RlZmluZSBJRUVFODAyMTFfQVVUSF9BTEdfT1BFTiBCSVQoMCkKICNkZWZpbmUgSUVFRTgwMjExX0FVVEhfQUxHX1NIQVJFRF9LRVkgQklUKDEpCiAjZGVmaW5lIElFRUU4MDIxMV9BVVRIX0FMR19MRUFQIEJJVCgyKQogCi1zdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSB7CitzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgewogCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOworCXN0cnVjdCB0aW1lcl9saXN0IGNoc3dpdGNoX3RpbWVyOwogCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOworCXN0cnVjdCB3b3JrX3N0cnVjdCBjaHN3aXRjaF93b3JrOworCiAJdTggYnNzaWRbRVRIX0FMRU5dLCBwcmV2X2Jzc2lkW0VUSF9BTEVOXTsKKwogCXU4IHNzaWRbSUVFRTgwMjExX01BWF9TU0lEX0xFTl07Ci0JZW51bSBpZWVlODAyMTFfc3RhX21sbWVfc3RhdGUgc3RhdGU7CiAJc2l6ZV90IHNzaWRfbGVuOwotCXU4IHNjYW5fc3NpZFtJRUVFODAyMTFfTUFYX1NTSURfTEVOXTsKLQlzaXplX3Qgc2Nhbl9zc2lkX2xlbjsKKworCWVudW0geworCQlJRUVFODAyMTFfU1RBX01MTUVfRElTQUJMRUQsCisJCUlFRUU4MDIxMV9TVEFfTUxNRV9ESVJFQ1RfUFJPQkUsCisJCUlFRUU4MDIxMV9TVEFfTUxNRV9BVVRIRU5USUNBVEUsCisJCUlFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEUsCisJCUlFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEVELAorCX0gc3RhdGU7CisKIAl1MTYgYWlkOwogCXUxNiBhcF9jYXBhYiwgY2FwYWI7CiAJdTggKmV4dHJhX2llOyAvKiB0byBiZSBhZGRlZCB0byB0aGUgZW5kIG9mIEFzc29jUmVxICovCkBAIC0zMTUsMTEgKzMxMiw2NSBAQAogCWludCBhdXRoX2FsZzsgLyogY3VycmVudGx5IHVzZWQgSUVFRSA4MDIuMTEgYXV0aGVudGljYXRpb24gYWxnb3JpdGhtICovCiAJaW50IGF1dGhfdHJhbnNhY3Rpb247CiAKLQl1bnNpZ25lZCBsb25nIGlic3Nfam9pbl9yZXE7Ci0Jc3RydWN0IHNrX2J1ZmYgKnByb2JlX3Jlc3A7IC8qIFByb2JlUmVzcCB0ZW1wbGF0ZSBmb3IgSUJTUyAqLwotCXUzMiBzdXBwX3JhdGVzX2JpdHNbSUVFRTgwMjExX05VTV9CQU5EU107CisJZW51bSB7CisJCUlFRUU4MDIxMV9NRlBfRElTQUJMRUQsCisJCUlFRUU4MDIxMV9NRlBfT1BUSU9OQUwsCisJCUlFRUU4MDIxMV9NRlBfUkVRVUlSRUQKKwl9IG1mcDsgLyogbWFuYWdlbWVudCBmcmFtZSBwcm90ZWN0aW9uICovCiAKIAlpbnQgd21tX2xhc3RfcGFyYW1fc2V0OworCisJLyogRXh0cmEgSUUgZGF0YSBmb3IgbWFuYWdlbWVudCBmcmFtZXMgKi8KKwl1OCAqaWVfcHJvYmVyZXE7CisJc2l6ZV90IGllX3Byb2JlcmVxX2xlbjsKKwl1OCAqaWVfcHJvYmVyZXNwOworCXNpemVfdCBpZV9wcm9iZXJlc3BfbGVuOworCXU4ICppZV9hdXRoOworCXNpemVfdCBpZV9hdXRoX2xlbjsKKwl1OCAqaWVfYXNzb2NyZXE7CisJc2l6ZV90IGllX2Fzc29jcmVxX2xlbjsKKwl1OCAqaWVfcmVhc3NvY3JlcTsKKwlzaXplX3QgaWVfcmVhc3NvY3JlcV9sZW47CisJdTggKmllX2RlYXV0aDsKKwlzaXplX3QgaWVfZGVhdXRoX2xlbjsKKwl1OCAqaWVfZGlzYXNzb2M7CisJc2l6ZV90IGllX2Rpc2Fzc29jX2xlbjsKK307CisKK2VudW0gaWVlZTgwMjExX2lic3NfZmxhZ3MgeworCUlFRUU4MDIxMV9JQlNTX0FVVE9fQ0hBTk5FTF9TRUwJCT0gQklUKDApLAorCUlFRUU4MDIxMV9JQlNTX0FVVE9fQlNTSURfU0VMCQk9IEJJVCgxKSwKKwlJRUVFODAyMTFfSUJTU19CU1NJRF9TRVQJCT0gQklUKDIpLAorCUlFRUU4MDIxMV9JQlNTX1BSRVZfQlNTSURfU0VUCQk9IEJJVCgzKSwKKwlJRUVFODAyMTFfSUJTU19TU0lEX1NFVAkJCT0gQklUKDQpLAorfTsKKworZW51bSBpZWVlODAyMTFfaWJzc19yZXF1ZXN0IHsKKwlJRUVFODAyMTFfSUJTU19SRVFfUlVOCT0gMCwKK307CisKK3N0cnVjdCBpZWVlODAyMTFfaWZfaWJzcyB7CisJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CisJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CisKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHNrYl9xdWV1ZTsKKworCXU4IHNzaWRbSUVFRTgwMjExX01BWF9TU0lEX0xFTl07CisJdTggc3NpZF9sZW47CisKKwl1MzIgZmxhZ3M7CisKKwl1OCBic3NpZFtFVEhfQUxFTl07CisKKwl1bnNpZ25lZCBsb25nIHJlcXVlc3Q7CisKKwl1bnNpZ25lZCBsb25nIGlic3Nfam9pbl9yZXE7CisJc3RydWN0IHNrX2J1ZmYgKnByb2JlX3Jlc3A7IC8qIFByb2JlUmVzcCB0ZW1wbGF0ZSBmb3IgSUJTUyAqLworCisJZW51bSB7CisJCUlFRUU4MDIxMV9JQlNTX01MTUVfU0VBUkNILAorCQlJRUVFODAyMTFfSUJTU19NTE1FX0pPSU5FRCwKKwl9IHN0YXRlOwogfTsKIAogc3RydWN0IGllZWU4MDIxMV9pZl9tZXNoIHsKQEAgLTQwNCw4ICs0NTUsMTAgQEAKIAl1bnNpZ25lZCBpbnQgZnJhZ21lbnRfbmV4dDsKIAogI2RlZmluZSBOVU1fREVGQVVMVF9LRVlTIDQKLQlzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5c1tOVU1fREVGQVVMVF9LRVlTXTsKKyNkZWZpbmUgTlVNX0RFRkFVTFRfTUdNVF9LRVlTIDIKKwlzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5c1tOVU1fREVGQVVMVF9LRVlTICsgTlVNX0RFRkFVTFRfTUdNVF9LRVlTXTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2tleSAqZGVmYXVsdF9rZXk7CisJc3RydWN0IGllZWU4MDIxMV9rZXkgKmRlZmF1bHRfbWdtdF9rZXk7CiAKIAl1MTYgc2VxdWVuY2VfbnVtYmVyOwogCkBAIC00MjMsNyArNDc2LDggQEAKIAkJc3RydWN0IGllZWU4MDIxMV9pZl9hcCBhcDsKIAkJc3RydWN0IGllZWU4MDIxMV9pZl93ZHMgd2RzOwogCQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3ZsYW4gdmxhbjsKLQkJc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgc3RhOworCQlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgbWdkOworCQlzdHJ1Y3QgaWVlZTgwMjExX2lmX2lic3MgaWJzczsKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSAogCQlzdHJ1Y3QgaWVlZTgwMjExX2lmX21lc2ggbWVzaDsKICNlbmRpZgpAQCAtNDc3LDYgKzUzMSw3IEBACiAJfSBkZWJ1Z2ZzOwogCXN0cnVjdCB7CiAJCXN0cnVjdCBkZW50cnkgKmRlZmF1bHRfa2V5OworCQlzdHJ1Y3QgZGVudHJ5ICpkZWZhdWx0X21nbXRfa2V5OwogCX0gY29tbW9uX2RlYnVnZnM7CiAKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSApAQCAtNTQxLDExICs1OTYsMTAgQEAKIGVudW0gcXVldWVfc3RvcF9yZWFzb24gewogCUlFRUU4MDIxMV9RVUVVRV9TVE9QX1JFQVNPTl9EUklWRVIsCiAJSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX1BTLAorCUlFRUU4MDIxMV9RVUVVRV9TVE9QX1JFQVNPTl9DU0EsCisJSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX0FHR1JFR0FUSU9OLAogfTsKIAotLyogbWF4aW11bSBudW1iZXIgb2YgaGFyZHdhcmUgcXVldWVzIHdlIHN1cHBvcnQuICovCi0jZGVmaW5lIFFEX01BWF9RVUVVRVMgKElFRUU4MDIxMV9NQVhfQU1QRFVfUVVFVUVTICsgSUVFRTgwMjExX01BWF9RVUVVRVMpCi0KIHN0cnVjdCBpZWVlODAyMTFfbWFzdGVyX3ByaXYgewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsOwogfTsKQEAgLTU1OCw5ICs2MTIsMTUgQEAKIAogCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzICpvcHM7CiAKLQl1bnNpZ25lZCBsb25nIHF1ZXVlX3Bvb2xbQklUU19UT19MT05HUyhRRF9NQVhfUVVFVUVTKV07Ci0JdW5zaWduZWQgbG9uZyBxdWV1ZV9zdG9wX3JlYXNvbnNbSUVFRTgwMjExX01BWF9RVUVVRVNdOworCS8qIEFDIHF1ZXVlIGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBBTVBEVSBxdWV1ZSAqLworCXM4IGFtcGR1X2FjX3F1ZXVlW0lFRUU4MDIxMV9NQVhfQU1QRFVfUVVFVUVTXTsKKwl1bnNpZ25lZCBpbnQgYW1kcHVfYWNfc3RvcF9yZWZjbnRbSUVFRTgwMjExX01BWF9BTVBEVV9RVUVVRVNdOworCisJdW5zaWduZWQgbG9uZyBxdWV1ZV9zdG9wX3JlYXNvbnNbSUVFRTgwMjExX01BWF9RVUVVRVMgKworCQkJCQkgSUVFRTgwMjExX01BWF9BTVBEVV9RVUVVRVNdOworCS8qIGFsc28gdXNlZCB0byBwcm90ZWN0IGFtcGR1X2FjX3F1ZXVlIGFuZCBhbWRwdV9hY19zdG9wX3JlZmNudCAqLwogCXNwaW5sb2NrX3QgcXVldWVfc3RvcF9yZWFzb25fbG9jazsKKwogCXN0cnVjdCBuZXRfZGV2aWNlICptZGV2OyAvKiB3bWFzdGVyIyAtICJtYXN0ZXIiIDgwMi4xMSBkZXZpY2UgKi8KIAlpbnQgb3Blbl9jb3VudDsKIAlpbnQgbW9uaXRvcnMsIGNvb2tlZF9tbnRyczsKQEAgLTU2OCw3ICs2MjgsNiBAQAogCWludCBmaWZfZmNzZmFpbCwgZmlmX3BsY3BmYWlsLCBmaWZfY29udHJvbCwgZmlmX290aGVyX2JzczsKIAl1bnNpZ25lZCBpbnQgZmlsdGVyX2ZsYWdzOyAvKiBGSUZfKiAqLwogCXN0cnVjdCBpd19zdGF0aXN0aWNzIHdzdGF0czsKLQl1OCB3c3RhdHNfZmxhZ3M7CiAJYm9vbCB0aW1faW5fbG9ja2VkX3NlY3Rpb247IC8qIHNlZSBpZWVlODAyMTFfYmVhY29uX2dldCgpICovCiAJaW50IHR4X2hlYWRyb29tOyAvKiByZXF1aXJlZCBoZWFkcm9vbSBmb3IgaGFyZHdhcmUvcmFkaW90YXAgKi8KIApAQCAtNjEyLDcgKzY3MSw5IEBACiAJc3RydWN0IGNyeXB0b19ibGtjaXBoZXIgKndlcF9yeF90Zm07CiAJdTMyIHdlcF9pdjsKIAorCS8qIHNlZSBpZmFjZS5jICovCiAJc3RydWN0IGxpc3RfaGVhZCBpbnRlcmZhY2VzOworCXN0cnVjdCBtdXRleCBpZmxpc3RfbXR4OwogCiAJLyoKIAkgKiBLZXkgbG9jaywgcHJvdGVjdHMgc2RhdGEncyBrZXlfbGlzdCBhbmQgc3RhX2luZm8ncwpAQCAtNjIzLDIwICs2ODQsMTggQEAKIAogCS8qIFNjYW5uaW5nIGFuZCBCU1MgbGlzdCAqLwogCWJvb2wgc3dfc2Nhbm5pbmcsIGh3X3NjYW5uaW5nOworCXN0cnVjdCBjZmc4MDIxMV9zc2lkIHNjYW5fc3NpZDsKKwlzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0IGludF9zY2FuX3JlcTsKKwlzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpzY2FuX3JlcTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKnNjYW5fY2hhbm5lbDsKIAlpbnQgc2Nhbl9jaGFubmVsX2lkeDsKLQllbnVtIGllZWU4MDIxMV9iYW5kIHNjYW5fYmFuZDsKIAogCWVudW0geyBTQ0FOX1NFVF9DSEFOTkVMLCBTQ0FOX1NFTkRfUFJPQkUgfSBzY2FuX3N0YXRlOwogCXVuc2lnbmVkIGxvbmcgbGFzdF9zY2FuX2NvbXBsZXRlZDsKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIHNjYW5fd29yazsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzY2FuX3NkYXRhOwotCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqb3Blcl9jaGFubmVsLCAqc2Nhbl9jaGFubmVsOwogCWVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgb3Blcl9jaGFubmVsX3R5cGU7Ci0JdTggc2Nhbl9zc2lkW0lFRUU4MDIxMV9NQVhfU1NJRF9MRU5dOwotCXNpemVfdCBzY2FuX3NzaWRfbGVuOwotCXN0cnVjdCBsaXN0X2hlYWQgYnNzX2xpc3Q7Ci0Jc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzc19oYXNoW1NUQV9IQVNIX1NJWkVdOwotCXNwaW5sb2NrX3QgYnNzX2xvY2s7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpvcGVyX2NoYW5uZWwsICpjc2FfY2hhbm5lbDsKIAogCS8qIFNOTVAgY291bnRlcnMgKi8KIAkvKiBkb3QxMUNvdW50ZXJzVGFibGUgKi8KQEAgLTY0OSw3ICs3MDgsNiBAQAogCXUzMiBkb3QxMVJlY2VpdmVkRnJhZ21lbnRDb3VudDsKIAl1MzIgZG90MTFNdWx0aWNhc3RSZWNlaXZlZEZyYW1lQ291bnQ7CiAJdTMyIGRvdDExVHJhbnNtaXR0ZWRGcmFtZUNvdW50OwotCXUzMiBkb3QxMVdFUFVuZGVjcnlwdGFibGVDb3VudDsKIAogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9MRURTCiAJaW50IHR4X2xlZF9jb3VudGVyLCByeF9sZWRfY291bnRlcjsKQEAgLTY5NiwxMSArNzU0LDE0IEBACiAJdW5zaWduZWQgaW50IHdtbV9hY207IC8qIGJpdCBmaWVsZCBvZiBBQ00gYml0cyAoQklUKDgwMi4xRCB0YWcpKSAqLwogCiAJYm9vbCBwb3dlcnNhdmU7Ci0JaW50IGR5bmFtaWNfcHNfdGltZW91dDsKKwlib29sIHBzcG9sbGluZzsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgZHluYW1pY19wc19lbmFibGVfd29yazsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgZHluYW1pY19wc19kaXNhYmxlX3dvcms7CiAJc3RydWN0IHRpbWVyX2xpc3QgZHluYW1pY19wc190aW1lcjsKIAorCWludCB1c2VyX3Bvd2VyX2xldmVsOyAvKiBpbiBkQm0gKi8KKwlpbnQgcG93ZXJfY29uc3RyX2xldmVsOyAvKiBpbiBkQm0gKi8KKwogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTCiAJc3RydWN0IGxvY2FsX2RlYnVnZnNkZW50cmllcyB7CiAJCXN0cnVjdCBkZW50cnkgKnJjZGlyOwpAQCAtNzEyLDYgKzc3Myw3IEBACiAJCXN0cnVjdCBkZW50cnkgKmxvbmdfcmV0cnlfbGltaXQ7CiAJCXN0cnVjdCBkZW50cnkgKnRvdGFsX3BzX2J1ZmZlcmVkOwogCQlzdHJ1Y3QgZGVudHJ5ICp3ZXBfaXY7CisJCXN0cnVjdCBkZW50cnkgKnRzZjsKIAkJc3RydWN0IGRlbnRyeSAqc3RhdGlzdGljczsKIAkJc3RydWN0IGxvY2FsX2RlYnVnZnNkZW50cmllc19zdGF0c2RlbnRyaWVzIHsKIAkJCXN0cnVjdCBkZW50cnkgKnRyYW5zbWl0dGVkX2ZyYWdtZW50X2NvdW50OwpAQCAtODA1LDYgKzg2Nyw3IEBACiAJdTggKmNvdW50cnlfZWxlbTsKIAl1OCAqcHdyX2NvbnN0cl9lbGVtOwogCXU4ICpxdWlldF9lbGVtOyAJLyogZmlyc3QgcXVpdGUgZWxlbWVudCAqLworCXU4ICp0aW1lb3V0X2ludDsKIAogCS8qIGxlbmd0aCBvZiB0aGVtLCByZXNwZWN0aXZlbHkgKi8KIAl1OCBzc2lkX2xlbjsKQEAgLTgzMiw2ICs4OTUsNyBAQAogCXU4IHB3cl9jb25zdHJfZWxlbV9sZW47CiAJdTggcXVpZXRfZWxlbV9sZW47CiAJdTggbnVtX29mX3F1aWV0X2VsZW07CS8qIGNhbiBiZSBtb3JlIHRoZSBvbmUgKi8KKwl1OCB0aW1lb3V0X2ludF9sZW47CiB9OwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmh3X3RvX2xvY2FsKApAQCAtODYwLDM0ICs5MjQsNDMgQEAKIHZvaWQgaWVlZTgwMjExX2Jzc19pbmZvX2NoYW5nZV9ub3RpZnkoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCQkJICAgICAgdTMyIGNoYW5nZWQpOwogdm9pZCBpZWVlODAyMTFfY29uZmlndXJlX2ZpbHRlcihzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCk7Cit1MzIgaWVlZTgwMjExX3Jlc2V0X2VycF9pbmZvKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKIAogLyogd2lyZWxlc3MgZXh0ZW5zaW9ucyAqLwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpd19oYW5kbGVyX2RlZiBpZWVlODAyMTFfaXdfaGFuZGxlcl9kZWY7CiAKLS8qIFNUQS9JQlNTIGNvZGUgKi8KKy8qIFNUQSBjb2RlICovCiB2b2lkIGllZWU4MDIxMV9zdGFfc2V0dXBfc2RhdGEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOwotdm9pZCBpZWVlODAyMTFfc2Nhbl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7Ci12b2lkIGllZWU4MDIxMV9zdGFfcnhfbWdtdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMpOworaWVlZTgwMjExX3J4X3Jlc3VsdCBpZWVlODAyMTFfc3RhX3J4X21nbXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzKTsKK2ludCBpZWVlODAyMTFfc3RhX2NvbW1pdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7CiBpbnQgaWVlZTgwMjExX3N0YV9zZXRfc3NpZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgY2hhciAqc3NpZCwgc2l6ZV90IGxlbik7CiBpbnQgaWVlZTgwMjExX3N0YV9nZXRfc3NpZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgY2hhciAqc3NpZCwgc2l6ZV90ICpsZW4pOwogaW50IGllZWU4MDIxMV9zdGFfc2V0X2Jzc2lkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCB1OCAqYnNzaWQpOwotdm9pZCBpZWVlODAyMTFfc3RhX3JlcV9hdXRoKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSk7Ci1zdHJ1Y3Qgc3RhX2luZm8gKmllZWU4MDIxMV9pYnNzX2FkZF9zdGEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJCXU4ICpic3NpZCwgdTggKmFkZHIsIHU2NCBzdXBwX3JhdGVzKTsKK3ZvaWQgaWVlZTgwMjExX3N0YV9yZXFfYXV0aChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7CiBpbnQgaWVlZTgwMjExX3N0YV9kZWF1dGhlbnRpY2F0ZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgdTE2IHJlYXNvbik7CiBpbnQgaWVlZTgwMjExX3N0YV9kaXNhc3NvY2lhdGUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHUxNiByZWFzb24pOwotdTMyIGllZWU4MDIxMV9yZXNldF9lcnBfaW5mbyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7Ci11NjQgaWVlZTgwMjExX3N0YV9nZXRfcmF0ZXMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCi0JCQkgICAgc3RydWN0IGllZWU4MDJfMTFfZWxlbXMgKmVsZW1zLAotCQkJICAgIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCk7Ci12b2lkIGllZWU4MDIxMV9zZW5kX3Byb2JlX3JlcShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgdTggKmRzdCwKLQkJCSAgICAgIHU4ICpzc2lkLCBzaXplX3Qgc3NpZF9sZW4pOwordm9pZCBpZWVlODAyMTFfc2VuZF9wc3BvbGwoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7CisKKy8qIElCU1MgY29kZSAqLworaW50IGllZWU4MDIxMV9pYnNzX2NvbW1pdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7CitpbnQgaWVlZTgwMjExX2lic3Nfc2V0X3NzaWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGNoYXIgKnNzaWQsIHNpemVfdCBsZW4pOworaW50IGllZWU4MDIxMV9pYnNzX2dldF9zc2lkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBjaGFyICpzc2lkLCBzaXplX3QgKmxlbik7CitpbnQgaWVlZTgwMjExX2lic3Nfc2V0X2Jzc2lkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCB1OCAqYnNzaWQpOwordm9pZCBpZWVlODAyMTFfaWJzc19ub3RpZnlfc2Nhbl9jb21wbGV0ZWQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpOwordm9pZCBpZWVlODAyMTFfaWJzc19zZXR1cF9zZGF0YShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7CitpZWVlODAyMTFfcnhfcmVzdWx0CitpZWVlODAyMTFfaWJzc19yeF9tZ210KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cyk7CitzdHJ1Y3Qgc3RhX2luZm8gKmllZWU4MDIxMV9pYnNzX2FkZF9zdGEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkJCXU4ICpic3NpZCwgdTggKmFkZHIsIHUzMiBzdXBwX3JhdGVzKTsKIAogLyogc2Nhbi9CU1MgaGFuZGxpbmcgKi8KK3ZvaWQgaWVlZTgwMjExX3NjYW5fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogaW50IGllZWU4MDIxMV9yZXF1ZXN0X3NjYW4oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkgICB1OCAqc3NpZCwgc2l6ZV90IHNzaWRfbGVuKTsKKwkJCSAgIHN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnJlcSk7CiBpbnQgaWVlZTgwMjExX3NjYW5fcmVzdWx0cyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKIAkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkgICBjaGFyICpidWYsIHNpemVfdCBsZW4pOwpAQCAtODk1LDI5ICs5NjgsMjggQEAKIGllZWU4MDIxMV9zY2FuX3J4KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkgIHN0cnVjdCBza19idWZmICpza2IsCiAJCSAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cyk7Ci12b2lkIGllZWU4MDIxMV9yeF9ic3NfbGlzdF9pbml0KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKTsKLXZvaWQgaWVlZTgwMjExX3J4X2Jzc19saXN0X2RlaW5pdChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCk7CiBpbnQgaWVlZTgwMjExX3N0YV9zZXRfZXh0cmFfaWUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCQkgICAgICAgY2hhciAqaWUsIHNpemVfdCBsZW4pOwogCiB2b2lkIGllZWU4MDIxMV9tbG1lX25vdGlmeV9zY2FuX2NvbXBsZXRlZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCk7Cit2b2lkIGllZWU4MDIxMV9zY2FuX2ZhaWxlZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCk7CiBpbnQgaWVlZTgwMjExX3N0YXJ0X3NjYW4oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2Nhbl9zZGF0YSwKLQkJCSB1OCAqc3NpZCwgc2l6ZV90IHNzaWRfbGVuKTsKKwkJCSBzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpyZXEpOwogc3RydWN0IGllZWU4MDIxMV9ic3MgKgogaWVlZTgwMjExX2Jzc19pbmZvX3VwZGF0ZShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKIAkJCSAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cywKIAkJCSAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LAogCQkJICBzaXplX3QgbGVuLAogCQkJICBzdHJ1Y3QgaWVlZTgwMl8xMV9lbGVtcyAqZWxlbXMsCi0JCQkgIGludCBmcmVxLCBib29sIGJlYWNvbik7Ci1zdHJ1Y3QgaWVlZTgwMjExX2JzcyAqCi1pZWVlODAyMTFfcnhfYnNzX2FkZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgdTggKmJzc2lkLCBpbnQgZnJlcSwKLQkJICAgICB1OCAqc3NpZCwgdTggc3NpZF9sZW4pOworCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwsCisJCQkgIGJvb2wgYmVhY29uKTsKIHN0cnVjdCBpZWVlODAyMTFfYnNzICoKIGllZWU4MDIxMV9yeF9ic3NfZ2V0KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCB1OCAqYnNzaWQsIGludCBmcmVxLAogCQkgICAgIHU4ICpzc2lkLCB1OCBzc2lkX2xlbik7CiB2b2lkIGllZWU4MDIxMV9yeF9ic3NfcHV0KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAogCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzKTsKK3ZvaWQgaWVlZTgwMjExX3J4X2Jzc19yZW1vdmUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHU4ICpic3NpZCwKKwkJCSAgICAgaW50IGZyZXEsIHU4ICpzc2lkLCB1OCBzc2lkX2xlbik7CiAKIC8qIGludGVyZmFjZSBoYW5kbGluZyAqLwogaW50IGllZWU4MDIxMV9pZl9hZGQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIGNvbnN0IGNoYXIgKm5hbWUsCkBAIC05NDMsMTAgKzEwMTUsMTUgQEAKIAkJCXN0cnVjdCBpZWVlODAyMTFfaHRfaW5mbyAqaHRpLAogCQkJdTE2IGFwX2h0X2NhcF9mbGFncyk7CiB2b2lkIGllZWU4MDIxMV9zZW5kX2JhcihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgdTggKnJhLCB1MTYgdGlkLCB1MTYgc3NuKTsKK3ZvaWQgaWVlZTgwMjExX3NlbmRfZGVsYmEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkgIGNvbnN0IHU4ICpkYSwgdTE2IHRpZCwKKwkJCSAgdTE2IGluaXRpYXRvciwgdTE2IHJlYXNvbl9jb2RlKTsKIAogdm9pZCBpZWVlODAyMTFfc3RhX3N0b3BfcnhfYmFfc2Vzc2lvbihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgdTggKmRhLAogCQkJCXUxNiB0aWQsIHUxNiBpbml0aWF0b3IsIHUxNiByZWFzb24pOwotdm9pZCBpZWVlODAyMTFfc3RhX3RlYXJfZG93bl9CQV9zZXNzaW9ucyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgdTggKmFkZHIpOwordm9pZCBfX2llZWU4MDIxMV9zdG9wX3J4X2JhX3Nlc3Npb24oc3RydWN0IHN0YV9pbmZvICpzdGEsIHUxNiB0aWQsCisJCQkJICAgIHUxNiBpbml0aWF0b3IsIHUxNiByZWFzb24pOwordm9pZCBpZWVlODAyMTFfc3RhX3RlYXJfZG93bl9CQV9zZXNzaW9ucyhzdHJ1Y3Qgc3RhX2luZm8gKnN0YSk7CiB2b2lkIGllZWU4MDIxMV9wcm9jZXNzX2RlbGJhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJICAgICBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwKIAkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LCBzaXplX3QgbGVuKTsKQEAgLTk1OSwxMCArMTAzNiwyNSBAQAogCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LAogCQkJCSAgICAgc2l6ZV90IGxlbik7CiAKK2ludCBfX2llZWU4MDIxMV9zdG9wX3R4X2JhX3Nlc3Npb24oc3RydWN0IHN0YV9pbmZvICpzdGEsIHUxNiB0aWQsCisJCQkJICAgZW51bSBpZWVlODAyMTFfYmFja19wYXJ0aWVzIGluaXRpYXRvcik7CisKIC8qIFNwZWN0cnVtIG1hbmFnZW1lbnQgKi8KIHZvaWQgaWVlZTgwMjExX3Byb2Nlc3NfbWVhc3VyZW1lbnRfcmVxKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsCiAJCQkJICAgICAgIHNpemVfdCBsZW4pOwordm9pZCBpZWVlODAyMTFfY2hzd2l0Y2hfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKTsKK3ZvaWQgaWVlZTgwMjExX2Noc3dpdGNoX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKK3ZvaWQgaWVlZTgwMjExX3Byb2Nlc3NfY2hhbnN3aXRjaChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCQkgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbF9zd19pZSAqc3dfZWxlbSwKKwkJCQkgIHN0cnVjdCBpZWVlODAyMTFfYnNzICpic3MpOwordm9pZCBpZWVlODAyMTFfaGFuZGxlX3B3cl9jb25zdHIoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkJIHUxNiBjYXBhYl9pbmZvLCB1OCAqcHdyX2NvbnN0cl9lbGVtLAorCQkJCSB1OCBwd3JfY29uc3RyX2VsZW1fbGVuKTsKKworLyogU3VzcGVuZC9yZXN1bWUgKi8KK2ludCBfX2llZWU4MDIxMV9zdXNwZW5kKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK2ludCBfX2llZWU4MDIxMV9yZXN1bWUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwogCiAvKiB1dGlsaXR5IGZ1bmN0aW9ucy9jb25zdGFudHMgKi8KIGV4dGVybiB2b2lkICptYWM4MDIxMV93aXBoeV9wcml2aWQ7IC8qIGZvciB3aXBoeSBwcml2aWQgKi8KQEAgLTk4MCwxNyArMTA3MiwzOSBAQAogdm9pZCBpZWVlODAyXzExX3BhcnNlX2VsZW1zKHU4ICpzdGFydCwgc2l6ZV90IGxlbiwKIAkJCSAgICBzdHJ1Y3QgaWVlZTgwMl8xMV9lbGVtcyAqZWxlbXMpOwogaW50IGllZWU4MDIxMV9zZXRfZnJlcShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgaW50IGZyZXEpOwotdTY0IGllZWU4MDIxMV9tYW5kYXRvcnlfcmF0ZXMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCit1MzIgaWVlZTgwMjExX21hbmRhdG9yeV9yYXRlcyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKIAkJCSAgICAgIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCk7CiAKIHZvaWQgaWVlZTgwMjExX2R5bmFtaWNfcHNfZW5hYmxlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIHZvaWQgaWVlZTgwMjExX2R5bmFtaWNfcHNfZGlzYWJsZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiB2b2lkIGllZWU4MDIxMV9keW5hbWljX3BzX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSk7Cit2b2lkIGllZWU4MDIxMV9zZW5kX251bGxmdW5jKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCSAgICAgaW50IHBvd2Vyc2F2ZSk7CiAKIHZvaWQgaWVlZTgwMjExX3dha2VfcXVldWVzX2J5X3JlYXNvbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkgICAgIGVudW0gcXVldWVfc3RvcF9yZWFzb24gcmVhc29uKTsKIHZvaWQgaWVlZTgwMjExX3N0b3BfcXVldWVzX2J5X3JlYXNvbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkgICAgIGVudW0gcXVldWVfc3RvcF9yZWFzb24gcmVhc29uKTsKK3ZvaWQgaWVlZTgwMjExX3dha2VfcXVldWVfYnlfcmVhc29uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgcXVldWUsCisJCQkJICAgIGVudW0gcXVldWVfc3RvcF9yZWFzb24gcmVhc29uKTsKK3ZvaWQgaWVlZTgwMjExX3N0b3BfcXVldWVfYnlfcmVhc29uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgcXVldWUsCisJCQkJICAgIGVudW0gcXVldWVfc3RvcF9yZWFzb24gcmVhc29uKTsKKwordm9pZCBpZWVlODAyMTFfc2VuZF9hdXRoKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJIHUxNiB0cmFuc2FjdGlvbiwgdTE2IGF1dGhfYWxnLAorCQkJIHU4ICpleHRyYSwgc2l6ZV90IGV4dHJhX2xlbiwKKwkJCSBjb25zdCB1OCAqYnNzaWQsIGludCBlbmNyeXB0KTsKK3ZvaWQgaWVlZTgwMjExX3NlbmRfcHJvYmVfcmVxKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCB1OCAqZHN0LAorCQkJICAgICAgdTggKnNzaWQsIHNpemVfdCBzc2lkX2xlbiwKKwkJCSAgICAgIHU4ICppZSwgc2l6ZV90IGllX2xlbik7CisKK3ZvaWQgaWVlZTgwMjExX3N0YV9kZWZfd21tX3BhcmFtcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCQkgIGNvbnN0IHNpemVfdCBzdXBwX3JhdGVzX2xlbiwKKwkJCQkgIGNvbnN0IHU4ICpzdXBwX3JhdGVzKTsKK3UzMiBpZWVlODAyMTFfc3RhX2dldF9yYXRlcyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJCSAgICBzdHJ1Y3QgaWVlZTgwMl8xMV9lbGVtcyAqZWxlbXMsCisJCQkgICAgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kKTsKIAogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9OT0lOTElORQogI2RlZmluZSBkZWJ1Z19ub2lubGluZSBub2lubGluZQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2lmYWNlLmMgYi9uZXQvbWFjODAyMTEvaWZhY2UuYwppbmRleCBiOTA3NDgyLi5mOWYyN2I5IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvaWZhY2UuYworKysgYi9uZXQvbWFjODAyMTEvaWZhY2UuYwpAQCAtMjEsNiArMjEsMjMgQEAKICNpbmNsdWRlICJtZXNoLmgiCiAjaW5jbHVkZSAibGVkLmgiCiAKKy8qKgorICogRE9DOiBJbnRlcmZhY2UgbGlzdCBsb2NraW5nCisgKgorICogVGhlIGludGVyZmFjZSBsaXN0IGluIGVhY2ggc3RydWN0IGllZWU4MDIxMV9sb2NhbCBpcyBwcm90ZWN0ZWQKKyAqIHRocmVlLWZvbGQ6CisgKgorICogKDEpIG1vZGlmaWNhdGlvbnMgbWF5IG9ubHkgYmUgZG9uZSB1bmRlciB0aGUgUlROTAorICogKDIpIG1vZGlmaWNhdGlvbnMgYW5kIHJlYWRlcnMgYXJlIHByb3RlY3RlZCBhZ2FpbnN0IGVhY2ggb3RoZXIgYnkKKyAqICAgICB0aGUgaWZsaXN0X210eC4KKyAqICgzKSBtb2RpZmljYXRpb25zIGFyZSBkb25lIGluIGFuIFJDVSBtYW5uZXIgc28gYXRvbWljIHJlYWRlcnMKKyAqICAgICBjYW4gdHJhdmVyc2UgdGhlIGxpc3QgaW4gUkNVLXNhZmUgYmxvY2tzLgorICoKKyAqIEFzIGEgY29uc2VxdWVuY2UsIHJlYWRzICh0cmF2ZXJzYWxzKSBvZiB0aGUgbGlzdCBjYW4gYmUgcHJvdGVjdGVkCisgKiBieSBlaXRoZXIgdGhlIFJUTkwsIHRoZSBpZmxpc3RfbXR4IG9yIFJDVS4KKyAqLworCisKIHN0YXRpYyBpbnQgaWVlZTgwMjExX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpCiB7CiAJaW50IG1lc2hoZHJsZW47CkBAIC0yMTksNyArMjM2LDEwIEBACiAJCWJyZWFrOwogCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKIAljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgotCQlzZGF0YS0+dS5zdGEuZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfUFJFVl9CU1NJRF9TRVQ7CisJCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKKwkJCXNkYXRhLT51Lm1nZC5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9QUkVWX0JTU0lEX1NFVDsKKwkJZWxzZQorCQkJc2RhdGEtPnUuaWJzcy5mbGFncyAmPSB+SUVFRTgwMjExX0lCU1NfUFJFVl9CU1NJRF9TRVQ7CiAJCS8qIGZhbGwgdGhyb3VnaCAqLwogCWRlZmF1bHQ6CiAJCWNvbmYudmlmID0gJnNkYXRhLT52aWY7CkBAIC0zMDQsMTEgKzMyNCwxMCBAQAogCSAqIHlldCBiZSBlZmZlY3RpdmUuIFRyaWdnZXIgZXhlY3V0aW9uIG9mIGllZWU4MDIxMV9zdGFfd29yawogCSAqIHRvIGZpeCB0aGlzLgogCSAqLwotCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiB8fAotCSAgICBzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHsKLQkJc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhID0gJnNkYXRhLT51LnN0YTsKLQkJcXVldWVfd29yayhsb2NhbC0+aHcud29ya3F1ZXVlLCAmaWZzdGEtPndvcmspOwotCX0KKwlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCisJCXF1ZXVlX3dvcmsobG9jYWwtPmh3LndvcmtxdWV1ZSwgJnNkYXRhLT51Lm1nZC53b3JrKTsKKwllbHNlIGlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCisJCXF1ZXVlX3dvcmsobG9jYWwtPmh3LndvcmtxdWV1ZSwgJnNkYXRhLT51Lmlic3Mud29yayk7CiAKIAluZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKGRldik7CiAKQEAgLTM0NSwxMyArMzY0LDI0IEBACiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShzdGEsICZsb2NhbC0+c3RhX2xpc3QsIGxpc3QpIHsKIAkJaWYgKHN0YS0+c2RhdGEgPT0gc2RhdGEpCi0JCQlpZWVlODAyMTFfc3RhX3RlYXJfZG93bl9CQV9zZXNzaW9ucyhzZGF0YSwKLQkJCQkJCQkgICAgc3RhLT5zdGEuYWRkcik7CisJCQlpZWVlODAyMTFfc3RhX3RlYXJfZG93bl9CQV9zZXNzaW9ucyhzdGEpOwogCX0KIAogCXJjdV9yZWFkX3VubG9jaygpOwogCiAJLyoKKwkgKiBBbm5vdW5jZSB0aGF0IHdlIGFyZSBsZWF2aW5nIHRoZSBuZXR3b3JrLCBpbiBjYXNlIHdlIGFyZSBhCisJICogc3RhdGlvbiBpbnRlcmZhY2UgdHlwZS4gVGhpcyBtdXN0IGJlIGRvbmUgYmVmb3JlIHJlbW92aW5nCisJICogYWxsIHN0YXRpb25zIGFzc29jaWF0ZWQgd2l0aCBzdGFfaW5mb19mbHVzaCwgb3RoZXJ3aXNlIFNUQQorCSAqIGluZm9ybWF0aW9uIHdpbGwgYmUgZ29uZSBhbmQgbm8gYW5ub3VuY2UgYmVpbmcgZG9uZS4KKwkgKi8KKwlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHsKKwkJaWYgKHNkYXRhLT51Lm1nZC5zdGF0ZSAhPSBJRUVFODAyMTFfU1RBX01MTUVfRElTQUJMRUQpCisJCQlpZWVlODAyMTFfc3RhX2RlYXV0aGVudGljYXRlKHNkYXRhLAorCQkJCVdMQU5fUkVBU09OX0RFQVVUSF9MRUFWSU5HKTsKKwl9CisKKwkvKgogCSAqIFJlbW92ZSBhbGwgc3RhdGlvbnMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgaW50ZXJmYWNlLgogCSAqCiAJICogVGhpcyBtdXN0IGJlIGRvbmUgYmVmb3JlIGNhbGxpbmcgb3BzLT5yZW1vdmVfaW50ZXJmYWNlKCkKQEAgLTM4Myw2ICs0MTMsOCBAQAogCQlhdG9taWNfZGVjKCZsb2NhbC0+aWZmX3Byb21pc2NzKTsKIAogCWRldl9tY191bnN5bmMobG9jYWwtPm1kZXYsIGRldik7CisJZGVsX3RpbWVyX3N5bmMoJmxvY2FsLT5keW5hbWljX3BzX3RpbWVyKTsKKwljYW5jZWxfd29ya19zeW5jKCZsb2NhbC0+ZHluYW1pY19wc19lbmFibGVfd29yayk7CiAKIAkvKiBBUHMgbmVlZCBzcGVjaWFsIHRyZWF0bWVudCAqLwogCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApIHsKQEAgLTQzNCwxNCArNDY2LDkgQEAKIAkJbmV0aWZfYWRkcl91bmxvY2tfYmgobG9jYWwtPm1kZXYpOwogCQlicmVhazsKIAljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046Ci0JY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKLQkJLyogQW5ub3VuY2UgdGhhdCB3ZSBhcmUgbGVhdmluZyB0aGUgbmV0d29yay4gKi8KLQkJaWYgKHNkYXRhLT51LnN0YS5zdGF0ZSAhPSBJRUVFODAyMTFfU1RBX01MTUVfRElTQUJMRUQpCi0JCQlpZWVlODAyMTFfc3RhX2RlYXV0aGVudGljYXRlKHNkYXRhLAotCQkJCQkJV0xBTl9SRUFTT05fREVBVVRIX0xFQVZJTkcpOwotCi0JCW1lbXNldChzZGF0YS0+dS5zdGEuYnNzaWQsIDAsIEVUSF9BTEVOKTsKLQkJZGVsX3RpbWVyX3N5bmMoJnNkYXRhLT51LnN0YS50aW1lcik7CisJCW1lbXNldChzZGF0YS0+dS5tZ2QuYnNzaWQsIDAsIEVUSF9BTEVOKTsKKwkJZGVsX3RpbWVyX3N5bmMoJnNkYXRhLT51Lm1nZC5jaHN3aXRjaF90aW1lcik7CisJCWRlbF90aW1lcl9zeW5jKCZzZGF0YS0+dS5tZ2QudGltZXIpOwogCQkvKgogCQkgKiBJZiB0aGUgdGltZXIgZmlyZWQgd2hpbGUgd2Ugd2FpdGVkIGZvciBpdCwgaXQgd2lsbCBoYXZlCiAJCSAqIHJlcXVldWVkIHRoZSB3b3JrLiBOb3cgdGhlIHdvcmsgd2lsbCBiZSBydW5uaW5nIGFnYWluCkBAIC00NDksNyArNDc2LDggQEAKIAkJICogd2hldGhlciB0aGUgaW50ZXJmYWNlIGlzIHJ1bm5pbmcsIHdoaWNoLCBhdCB0aGlzIHBvaW50LAogCQkgKiBpdCBubyBsb25nZXIgaXMuCiAJCSAqLwotCQljYW5jZWxfd29ya19zeW5jKCZzZGF0YS0+dS5zdGEud29yayk7CisJCWNhbmNlbF93b3JrX3N5bmMoJnNkYXRhLT51Lm1nZC53b3JrKTsKKwkJY2FuY2VsX3dvcmtfc3luYygmc2RhdGEtPnUubWdkLmNoc3dpdGNoX3dvcmspOwogCQkvKgogCQkgKiBXaGVuIHdlIGdldCBoZXJlLCB0aGUgaW50ZXJmYWNlIGlzIG1hcmtlZCBkb3duLgogCQkgKiBDYWxsIHN5bmNocm9uaXplX3JjdSgpIHRvIHdhaXQgZm9yIHRoZSBSWCBwYXRoCkBAIC00NTcsMTIgKzQ4NSwyMiBAQAogCQkgKiBmcmFtZXMgYXQgdGhpcyB2ZXJ5IHRpbWUgb24gYW5vdGhlciBDUFUuCiAJCSAqLwogCQlzeW5jaHJvbml6ZV9yY3UoKTsKLQkJc2tiX3F1ZXVlX3B1cmdlKCZzZGF0YS0+dS5zdGEuc2tiX3F1ZXVlKTsKKwkJc2tiX3F1ZXVlX3B1cmdlKCZzZGF0YS0+dS5tZ2Quc2tiX3F1ZXVlKTsKIAotCQlzZGF0YS0+dS5zdGEuZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfUFJJVkFDWV9JTlZPS0VEOwotCQlrZnJlZShzZGF0YS0+dS5zdGEuZXh0cmFfaWUpOwotCQlzZGF0YS0+dS5zdGEuZXh0cmFfaWUgPSBOVUxMOwotCQlzZGF0YS0+dS5zdGEuZXh0cmFfaWVfbGVuID0gMDsKKwkJc2RhdGEtPnUubWdkLmZsYWdzICY9IH4oSUVFRTgwMjExX1NUQV9QUklWQUNZX0lOVk9LRUQgfAorCQkJCQlJRUVFODAyMTFfU1RBX1RLSVBfV0VQX1VTRUQpOworCQlrZnJlZShzZGF0YS0+dS5tZ2QuZXh0cmFfaWUpOworCQlzZGF0YS0+dS5tZ2QuZXh0cmFfaWUgPSBOVUxMOworCQlzZGF0YS0+dS5tZ2QuZXh0cmFfaWVfbGVuID0gMDsKKwkJLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKKwkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgeworCQkJbWVtc2V0KHNkYXRhLT51Lmlic3MuYnNzaWQsIDAsIEVUSF9BTEVOKTsKKwkJCWRlbF90aW1lcl9zeW5jKCZzZGF0YS0+dS5pYnNzLnRpbWVyKTsKKwkJCWNhbmNlbF93b3JrX3N5bmMoJnNkYXRhLT51Lmlic3Mud29yayk7CisJCQlzeW5jaHJvbml6ZV9yY3UoKTsKKwkJCXNrYl9xdWV1ZV9wdXJnZSgmc2RhdGEtPnUuaWJzcy5za2JfcXVldWUpOworCQl9CiAJCS8qIGZhbGwgdGhyb3VnaCAqLwogCWNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDoKIAkJaWYgKGllZWU4MDIxMV92aWZfaXNfbWVzaCgmc2RhdGEtPnZpZikpIHsKQEAgLTUwMSw3ICs1MzksNyBAQAogCQkJICogc2NhbiBldmVudCB0byB1c2Vyc3BhY2UgLS0gdGhlIHNjYW4gaXMgaW5jb21wbGV0ZS4KIAkJCSAqLwogCQkJaWYgKGxvY2FsLT5zd19zY2FubmluZykKLQkJCQlpZWVlODAyMTFfc2Nhbl9jb21wbGV0ZWQoJmxvY2FsLT5odyk7CisJCQkJaWVlZTgwMjExX3NjYW5fY29tcGxldGVkKCZsb2NhbC0+aHcsIHRydWUpOwogCQl9CiAKIAkJY29uZi52aWYgPSAmc2RhdGEtPnZpZjsKQEAgLTU2OSwxOSArNjA3LDYgQEAKIAlkZXZfbWNfc3luYyhsb2NhbC0+bWRldiwgZGV2KTsKIH0KIAotc3RhdGljIHZvaWQgaWVlZTgwMjExX2lmX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JZXRoZXJfc2V0dXAoZGV2KTsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGllZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0OwotCWRldi0+d2lyZWxlc3NfaGFuZGxlcnMgPSAmaWVlZTgwMjExX2l3X2hhbmRsZXJfZGVmOwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gaWVlZTgwMjExX3NldF9tdWx0aWNhc3RfbGlzdDsKLQlkZXYtPmNoYW5nZV9tdHUgPSBpZWVlODAyMTFfY2hhbmdlX210dTsKLQlkZXYtPm9wZW4gPSBpZWVlODAyMTFfb3BlbjsKLQlkZXYtPnN0b3AgPSBpZWVlODAyMTFfc3RvcDsKLQlkZXYtPmRlc3RydWN0b3IgPSBmcmVlX25ldGRldjsKLQkvKiB3ZSB3aWxsIHZhbGlkYXRlIHRoZSBhZGRyZXNzIG91cnNlbHZlcyBpbiAtPm9wZW4gKi8KLQlkZXYtPnZhbGlkYXRlX2FkZHIgPSBOVUxMOwotfQogLyoKICAqIENhbGxlZCB3aGVuIHRoZSBuZXRkZXYgaXMgcmVtb3ZlZCBvciwgYnkgdGhlIGNvZGUgYmVsb3csIGJlZm9yZQogICogdGhlIGludGVyZmFjZSB0eXBlIGNoYW5nZXMuCkBAIC02MjEsMTIgKzY0NiwyMCBAQAogCQlpZiAoaWVlZTgwMjExX3ZpZl9pc19tZXNoKCZzZGF0YS0+dmlmKSkKIAkJCW1lc2hfcm1jX2ZyZWUoc2RhdGEpOwogCQlicmVhazsKLQljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKLQkJa2ZyZWUoc2RhdGEtPnUuc3RhLmV4dHJhX2llKTsKLQkJa2ZyZWUoc2RhdGEtPnUuc3RhLmFzc29jcmVxX2llcyk7Ci0JCWtmcmVlKHNkYXRhLT51LnN0YS5hc3NvY3Jlc3BfaWVzKTsKLQkJa2ZyZWVfc2tiKHNkYXRhLT51LnN0YS5wcm9iZV9yZXNwKTsKKwkJa2ZyZWVfc2tiKHNkYXRhLT51Lmlic3MucHJvYmVfcmVzcCk7CisJCWJyZWFrOworCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKKwkJa2ZyZWUoc2RhdGEtPnUubWdkLmV4dHJhX2llKTsKKwkJa2ZyZWUoc2RhdGEtPnUubWdkLmFzc29jcmVxX2llcyk7CisJCWtmcmVlKHNkYXRhLT51Lm1nZC5hc3NvY3Jlc3BfaWVzKTsKKwkJa2ZyZWUoc2RhdGEtPnUubWdkLmllX3Byb2JlcmVxKTsKKwkJa2ZyZWUoc2RhdGEtPnUubWdkLmllX3Byb2JlcmVzcCk7CisJCWtmcmVlKHNkYXRhLT51Lm1nZC5pZV9hdXRoKTsKKwkJa2ZyZWUoc2RhdGEtPnUubWdkLmllX2Fzc29jcmVxKTsKKwkJa2ZyZWUoc2RhdGEtPnUubWdkLmllX3JlYXNzb2NyZXEpOworCQlrZnJlZShzZGF0YS0+dS5tZ2QuaWVfZGVhdXRoKTsKKwkJa2ZyZWUoc2RhdGEtPnUubWdkLmllX2Rpc2Fzc29jKTsKIAkJYnJlYWs7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9XRFM6CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOOgpAQCAtNjQyLDYgKzY3NSwzNCBAQAogCVdBUk5fT04oZmx1c2hlZCk7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaWVlZTgwMjExX2RhdGFpZl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IGllZWU4MDIxMV9vcGVuLAorCS5uZG9fc3RvcAkJPSBpZWVlODAyMTFfc3RvcCwKKwkubmRvX3VuaW5pdAkJPSBpZWVlODAyMTFfdGVhcmRvd25fc2RhdGEsCisJLm5kb19zdGFydF94bWl0CQk9IGllZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gaWVlZTgwMjExX3NldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX2NoYW5nZV9tdHUgCT0gaWVlZTgwMjExX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpZWVlODAyMTFfbW9uaXRvcmlmX29wcyA9IHsKKwkubmRvX29wZW4JCT0gaWVlZTgwMjExX29wZW4sCisJLm5kb19zdG9wCQk9IGllZWU4MDIxMV9zdG9wLAorCS5uZG9fdW5pbml0CQk9IGllZWU4MDIxMV90ZWFyZG93bl9zZGF0YSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gaWVlZTgwMjExX21vbml0b3Jfc3RhcnRfeG1pdCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IGllZWU4MDIxMV9zZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb19jaGFuZ2VfbXR1IAk9IGllZWU4MDIxMV9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKK307CisKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9pZl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCWV0aGVyX3NldHVwKGRldik7CisJZGV2LT5uZXRkZXZfb3BzID0gJmllZWU4MDIxMV9kYXRhaWZfb3BzOworCWRldi0+d2lyZWxlc3NfaGFuZGxlcnMgPSAmaWVlZTgwMjExX2l3X2hhbmRsZXJfZGVmOworCWRldi0+ZGVzdHJ1Y3RvciA9IGZyZWVfbmV0ZGV2OworfQorCiAvKgogICogSGVscGVyIGZ1bmN0aW9uIHRvIGluaXRpYWxpc2UgYW4gaW50ZXJmYWNlIHRvIGEgc3BlY2lmaWMgdHlwZS4KICAqLwpAQCAtNjUzLDcgKzcxNCw3IEBACiAKIAkvKiBhbmQgc2V0IHNvbWUgdHlwZS1kZXBlbmRlbnQgdmFsdWVzICovCiAJc2RhdGEtPnZpZi50eXBlID0gdHlwZTsKLQlzZGF0YS0+ZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBpZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdDsKKwlzZGF0YS0+ZGV2LT5uZXRkZXZfb3BzID0gJmllZWU4MDIxMV9kYXRhaWZfb3BzOwogCXNkYXRhLT53ZGV2LmlmdHlwZSA9IHR5cGU7CiAKIAkvKiBvbmx5IG1vbml0b3IgZGlmZmVycyAqLwpAQCAtNjY1LDE2ICs3MjYsMTggQEAKIAkJSU5JVF9MSVNUX0hFQUQoJnNkYXRhLT51LmFwLnZsYW5zKTsKIAkJYnJlYWs7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgotCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6CiAJCWllZWU4MDIxMV9zdGFfc2V0dXBfc2RhdGEoc2RhdGEpOwogCQlicmVhazsKKwljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgorCQlpZWVlODAyMTFfaWJzc19zZXR1cF9zZGF0YShzZGF0YSk7CisJCWJyZWFrOwogCWNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDoKIAkJaWYgKGllZWU4MDIxMV92aWZfaXNfbWVzaCgmc2RhdGEtPnZpZikpCiAJCQlpZWVlODAyMTFfbWVzaF9pbml0X3NkYXRhKHNkYXRhKTsKIAkJYnJlYWs7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9NT05JVE9SOgogCQlzZGF0YS0+ZGV2LT50eXBlID0gQVJQSFJEX0lFRUU4MDIxMV9SQURJT1RBUDsKLQkJc2RhdGEtPmRldi0+aGFyZF9zdGFydF94bWl0ID0gaWVlZTgwMjExX21vbml0b3Jfc3RhcnRfeG1pdDsKKwkJc2RhdGEtPmRldi0+bmV0ZGV2X29wcyA9ICZpZWVlODAyMTFfbW9uaXRvcmlmX29wczsKIAkJc2RhdGEtPnUubW50cl9mbGFncyA9IE1PTklUT1JfRkxBR19DT05UUk9MIHwKIAkJCQkgICAgICBNT05JVE9SX0ZMQUdfT1RIRVJfQlNTOwogCQlicmVhazsKQEAgLTc1NSw2ICs4MTgsNyBAQAogCiAJbWVtY3B5KG5kZXYtPmRldl9hZGRyLCBsb2NhbC0+aHcud2lwaHktPnBlcm1fYWRkciwgRVRIX0FMRU4pOwogCVNFVF9ORVRERVZfREVWKG5kZXYsIHdpcGh5X2Rldihsb2NhbC0+aHcud2lwaHkpKTsKKwluZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX05FVE5TX0xPQ0FMOwogCiAJLyogZG9uJ3QgdXNlIElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGIGJlY2F1c2UgaXQgY2hlY2tzIHRvbyBtdWNoICovCiAJc2RhdGEgPSBuZXRkZXZfcHJpdihuZGV2KTsKQEAgLTc4MCwxNSArODQ0LDE1IEBACiAJaWYgKHJldCkKIAkJZ290byBmYWlsOwogCi0JbmRldi0+dW5pbml0ID0gaWVlZTgwMjExX3RlYXJkb3duX3NkYXRhOwotCiAJaWYgKGllZWU4MDIxMV92aWZfaXNfbWVzaCgmc2RhdGEtPnZpZikgJiYKIAkgICAgcGFyYW1zICYmIHBhcmFtcy0+bWVzaF9pZF9sZW4pCiAJCWllZWU4MDIxMV9zZGF0YV9zZXRfbWVzaF9pZChzZGF0YSwKIAkJCQkJICAgIHBhcmFtcy0+bWVzaF9pZF9sZW4sCiAJCQkJCSAgICBwYXJhbXMtPm1lc2hfaWQpOwogCisJbXV0ZXhfbG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOwogCWxpc3RfYWRkX3RhaWxfcmN1KCZzZGF0YS0+bGlzdCwgJmxvY2FsLT5pbnRlcmZhY2VzKTsKKwltdXRleF91bmxvY2soJmxvY2FsLT5pZmxpc3RfbXR4KTsKIAogCWlmIChuZXdfZGV2KQogCQkqbmV3X2RldiA9IG5kZXY7CkBAIC04MDQsNyArODY4LDEwIEBACiB7CiAJQVNTRVJUX1JUTkwoKTsKIAorCW11dGV4X2xvY2soJnNkYXRhLT5sb2NhbC0+aWZsaXN0X210eCk7CiAJbGlzdF9kZWxfcmN1KCZzZGF0YS0+bGlzdCk7CisJbXV0ZXhfdW5sb2NrKCZzZGF0YS0+bG9jYWwtPmlmbGlzdF9tdHgpOworCiAJc3luY2hyb25pemVfcmN1KCk7CiAJdW5yZWdpc3Rlcl9uZXRkZXZpY2Uoc2RhdGEtPmRldik7CiB9CkBAIC04MjAsNyArODg3LDE2IEBACiAJQVNTRVJUX1JUTkwoKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzZGF0YSwgdG1wLCAmbG9jYWwtPmludGVyZmFjZXMsIGxpc3QpIHsKKwkJLyoKKwkJICogd2UgY2Fubm90IGhvbGQgdGhlIGlmbGlzdF9tdHggYWNyb3NzIHVucmVnaXN0ZXJfbmV0ZGV2aWNlLAorCQkgKiBidXQgd2Ugb25seSBuZWVkIHRvIGhvbGQgaXQgZm9yIGxpc3QgbW9kaWZpY2F0aW9ucyB0byBsb2NrCisJCSAqIG91dCByZWFkZXJzIHNpbmNlIHdlJ3JlIHVuZGVyIHRoZSBSVE5MIGhlcmUgYXMgYWxsIG90aGVyCisJCSAqIHdyaXRlcnMuCisJCSAqLworCQltdXRleF9sb2NrKCZsb2NhbC0+aWZsaXN0X210eCk7CiAJCWxpc3RfZGVsKCZzZGF0YS0+bGlzdCk7CisJCW11dGV4X3VubG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOworCiAJCXVucmVnaXN0ZXJfbmV0ZGV2aWNlKHNkYXRhLT5kZXYpOwogCX0KIH0KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9rZXkuYyBiL25ldC9tYWM4MDIxMS9rZXkuYwppbmRleCA5OTlmN2FhLi42ODdhY2YyIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEva2V5LmMKKysrIGIvbmV0L21hYzgwMjExL2tleS5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSAiaWVlZTgwMjExX2kuaCIKICNpbmNsdWRlICJkZWJ1Z2ZzX2tleS5oIgogI2luY2x1ZGUgImFlc19jY20uaCIKKyNpbmNsdWRlICJhZXNfY21hYy5oIgogCiAKIC8qKgpAQCAtNDcsNyArNDgsNiBAQAogICovCiAKIHN0YXRpYyBjb25zdCB1OCBiY2FzdF9hZGRyW0VUSF9BTEVOXSA9IHsgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiB9Owotc3RhdGljIGNvbnN0IHU4IHplcm9fYWRkcltFVEhfQUxFTl07CiAKIC8qIGtleSBtdXRleDogdXNlZCB0byBzeW5jaHJvbmlzZSB0b2RvIHJ1bm5lcnMgKi8KIHN0YXRpYyBERUZJTkVfTVVURVgoa2V5X211dGV4KTsKQEAgLTEwOCwyOSArMTA4LDE4IEBACiAJV0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKCZrZXlfbXV0ZXgpKTsKIH0KIAotc3RhdGljIGNvbnN0IHU4ICpnZXRfbWFjX2Zvcl9rZXkoc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSkKK3N0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqZ2V0X3N0YV9mb3Jfa2V5KHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXkpCiB7Ci0JY29uc3QgdTggKmFkZHIgPSBiY2FzdF9hZGRyOwotCi0JLyoKLQkgKiBJZiB3ZSdyZSBhbiBBUCB3ZSB3b24ndCBldmVyIHJlY2VpdmUgZnJhbWVzIHdpdGggYSBub24tV0VQCi0JICogZ3JvdXAga2V5IHNvIHdlIHRlbGwgdGhlIGRyaXZlciB0aGF0IGJ5IHVzaW5nIHRoZSB6ZXJvIE1BQwotCSAqIGFkZHJlc3MgdG8gaW5kaWNhdGUgYSB0cmFuc21pdC1vbmx5IGtleS4KLQkgKi8KLQlpZiAoa2V5LT5jb25mLmFsZyAhPSBBTEdfV0VQICYmCi0JICAgIChrZXktPnNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCB8fAotCSAgICAga2V5LT5zZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVBfVkxBTikpCi0JCWFkZHIgPSB6ZXJvX2FkZHI7Ci0KIAlpZiAoa2V5LT5zdGEpCi0JCWFkZHIgPSBrZXktPnN0YS0+c3RhLmFkZHI7CisJCXJldHVybiAma2V5LT5zdGEtPnN0YTsKIAotCXJldHVybiBhZGRyOworCXJldHVybiBOVUxMOwogfQogCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfa2V5X2VuYWJsZV9od19hY2NlbChzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5KQogewotCWNvbnN0IHU4ICphZGRyOworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOworCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGE7CiAJaW50IHJldDsKIAogCWFzc2VydF9rZXlfbG9jaygpOwpAQCAtMTM5LDExICsxMjgsMTYgQEAKIAlpZiAoIWtleS0+bG9jYWwtPm9wcy0+c2V0X2tleSkKIAkJcmV0dXJuOwogCi0JYWRkciA9IGdldF9tYWNfZm9yX2tleShrZXkpOworCXN0YSA9IGdldF9zdGFfZm9yX2tleShrZXkpOworCisJc2RhdGEgPSBrZXktPnNkYXRhOworCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVBfVkxBTikKKwkJc2RhdGEgPSBjb250YWluZXJfb2Yoc2RhdGEtPmJzcywKKwkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEsCisJCQkJICAgICB1LmFwKTsKIAogCXJldCA9IGtleS0+bG9jYWwtPm9wcy0+c2V0X2tleShsb2NhbF90b19odyhrZXktPmxvY2FsKSwgU0VUX0tFWSwKLQkJCQkgICAgICAga2V5LT5zZGF0YS0+ZGV2LT5kZXZfYWRkciwgYWRkciwKLQkJCQkgICAgICAgJmtleS0+Y29uZik7CisJCQkJICAgICAgICZzZGF0YS0+dmlmLCBzdGEsICZrZXktPmNvbmYpOwogCiAJaWYgKCFyZXQpIHsKIAkJc3Bpbl9sb2NrKCZ0b2RvX2xvY2spOwpAQCAtMTU1LDEyICsxNDksMTMgQEAKIAkJcHJpbnRrKEtFUk5fRVJSICJtYWM4MDIxMS0lczogZmFpbGVkIHRvIHNldCBrZXkgIgogCQkgICAgICAgIiglZCwgJXBNKSB0byBoYXJkd2FyZSAoJWQpXG4iLAogCQkgICAgICAgd2lwaHlfbmFtZShrZXktPmxvY2FsLT5ody53aXBoeSksCi0JCSAgICAgICBrZXktPmNvbmYua2V5aWR4LCBhZGRyLCByZXQpOworCQkgICAgICAga2V5LT5jb25mLmtleWlkeCwgc3RhID8gc3RhLT5hZGRyIDogYmNhc3RfYWRkciwgcmV0KTsKIH0KIAogc3RhdGljIHZvaWQgaWVlZTgwMjExX2tleV9kaXNhYmxlX2h3X2FjY2VsKHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXkpCiB7Ci0JY29uc3QgdTggKmFkZHI7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CisJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YTsKIAlpbnQgcmV0OwogCiAJYXNzZXJ0X2tleV9sb2NrKCk7CkBAIC0xNzYsMTcgKzE3MSwyMiBAQAogCX0KIAlzcGluX3VubG9jaygmdG9kb19sb2NrKTsKIAotCWFkZHIgPSBnZXRfbWFjX2Zvcl9rZXkoa2V5KTsKKwlzdGEgPSBnZXRfc3RhX2Zvcl9rZXkoa2V5KTsKKwlzZGF0YSA9IGtleS0+c2RhdGE7CisKKwlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4pCisJCXNkYXRhID0gY29udGFpbmVyX29mKHNkYXRhLT5ic3MsCisJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhLAorCQkJCSAgICAgdS5hcCk7CiAKIAlyZXQgPSBrZXktPmxvY2FsLT5vcHMtPnNldF9rZXkobG9jYWxfdG9faHcoa2V5LT5sb2NhbCksIERJU0FCTEVfS0VZLAotCQkJCSAgICAgICBrZXktPnNkYXRhLT5kZXYtPmRldl9hZGRyLCBhZGRyLAotCQkJCSAgICAgICAma2V5LT5jb25mKTsKKwkJCQkgICAgICAgJnNkYXRhLT52aWYsIHN0YSwgJmtleS0+Y29uZik7CiAKIAlpZiAocmV0KQogCQlwcmludGsoS0VSTl9FUlIgIm1hYzgwMjExLSVzOiBmYWlsZWQgdG8gcmVtb3ZlIGtleSAiCiAJCSAgICAgICAiKCVkLCAlcE0pIGZyb20gaGFyZHdhcmUgKCVkKVxuIiwKIAkJICAgICAgIHdpcGh5X25hbWUoa2V5LT5sb2NhbC0+aHcud2lwaHkpLAotCQkgICAgICAga2V5LT5jb25mLmtleWlkeCwgYWRkciwgcmV0KTsKKwkJICAgICAgIGtleS0+Y29uZi5rZXlpZHgsIHN0YSA/IHN0YS0+YWRkciA6IGJjYXN0X2FkZHIsIHJldCk7CiAKIAlzcGluX2xvY2soJnRvZG9fbG9jayk7CiAJa2V5LT5mbGFncyAmPSB+S0VZX0ZMQUdfVVBMT0FERURfVE9fSEFSRFdBUkU7CkBAIC0yMTYsMTMgKzIxNiwzOCBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNkYXRhLT5sb2NhbC0+a2V5X2xvY2ssIGZsYWdzKTsKIH0KIAorc3RhdGljIHZvaWQKK19faWVlZTgwMjExX3NldF9kZWZhdWx0X21nbXRfa2V5KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBpbnQgaWR4KQoreworCXN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXkgPSBOVUxMOworCisJaWYgKGlkeCA+PSBOVU1fREVGQVVMVF9LRVlTICYmCisJICAgIGlkeCA8IE5VTV9ERUZBVUxUX0tFWVMgKyBOVU1fREVGQVVMVF9NR01UX0tFWVMpCisJCWtleSA9IHNkYXRhLT5rZXlzW2lkeF07CisKKwlyY3VfYXNzaWduX3BvaW50ZXIoc2RhdGEtPmRlZmF1bHRfbWdtdF9rZXksIGtleSk7CisKKwlpZiAoa2V5KQorCQlhZGRfdG9kbyhrZXksIEtFWV9GTEFHX1RPRE9fREVGTUdNVEtFWSk7Cit9CisKK3ZvaWQgaWVlZTgwMjExX3NldF9kZWZhdWx0X21nbXRfa2V5KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCSAgICBpbnQgaWR4KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2RhdGEtPmxvY2FsLT5rZXlfbG9jaywgZmxhZ3MpOworCV9faWVlZTgwMjExX3NldF9kZWZhdWx0X21nbXRfa2V5KHNkYXRhLCBpZHgpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNkYXRhLT5sb2NhbC0+a2V5X2xvY2ssIGZsYWdzKTsKK30KKwogCiBzdGF0aWMgdm9pZCBfX2llZWU4MDIxMV9rZXlfcmVwbGFjZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJCQkgICAgc3RydWN0IHN0YV9pbmZvICpzdGEsCiAJCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfa2V5ICpvbGQsCiAJCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfa2V5ICpuZXcpCiB7Ci0JaW50IGlkeCwgZGVma2V5OworCWludCBpZHgsIGRlZmtleSwgZGVmbWdtdGtleTsKIAogCWlmIChuZXcpCiAJCWxpc3RfYWRkKCZuZXctPmxpc3QsICZzZGF0YS0+a2V5X2xpc3QpOwpAQCAtMjM4LDEzICsyNjMsMTkgQEAKIAkJCWlkeCA9IG5ldy0+Y29uZi5rZXlpZHg7CiAKIAkJZGVma2V5ID0gb2xkICYmIHNkYXRhLT5kZWZhdWx0X2tleSA9PSBvbGQ7CisJCWRlZm1nbXRrZXkgPSBvbGQgJiYgc2RhdGEtPmRlZmF1bHRfbWdtdF9rZXkgPT0gb2xkOwogCiAJCWlmIChkZWZrZXkgJiYgIW5ldykKIAkJCV9faWVlZTgwMjExX3NldF9kZWZhdWx0X2tleShzZGF0YSwgLTEpOworCQlpZiAoZGVmbWdtdGtleSAmJiAhbmV3KQorCQkJX19pZWVlODAyMTFfc2V0X2RlZmF1bHRfbWdtdF9rZXkoc2RhdGEsIC0xKTsKIAogCQlyY3VfYXNzaWduX3BvaW50ZXIoc2RhdGEtPmtleXNbaWR4XSwgbmV3KTsKIAkJaWYgKGRlZmtleSAmJiBuZXcpCiAJCQlfX2llZWU4MDIxMV9zZXRfZGVmYXVsdF9rZXkoc2RhdGEsIG5ldy0+Y29uZi5rZXlpZHgpOworCQlpZiAoZGVmbWdtdGtleSAmJiBuZXcpCisJCQlfX2llZWU4MDIxMV9zZXRfZGVmYXVsdF9tZ210X2tleShzZGF0YSwKKwkJCQkJCQkgbmV3LT5jb25mLmtleWlkeCk7CiAJfQogCiAJaWYgKG9sZCkgewpAQCAtMjYzLDcgKzI5NCw3IEBACiB7CiAJc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleTsKIAotCUJVR19PTihpZHggPCAwIHx8IGlkeCA+PSBOVU1fREVGQVVMVF9LRVlTKTsKKwlCVUdfT04oaWR4IDwgMCB8fCBpZHggPj0gTlVNX0RFRkFVTFRfS0VZUyArIE5VTV9ERUZBVUxUX01HTVRfS0VZUyk7CiAKIAlrZXkgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2tleSkgKyBrZXlfbGVuLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWtleSkKQEAgLTI5Miw2ICszMjMsMTAgQEAKIAkJa2V5LT5jb25mLml2X2xlbiA9IENDTVBfSERSX0xFTjsKIAkJa2V5LT5jb25mLmljdl9sZW4gPSBDQ01QX01JQ19MRU47CiAJCWJyZWFrOworCWNhc2UgQUxHX0FFU19DTUFDOgorCQlrZXktPmNvbmYuaXZfbGVuID0gMDsKKwkJa2V5LT5jb25mLmljdl9sZW4gPSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9tbWllKTsKKwkJYnJlYWs7CiAJfQogCW1lbWNweShrZXktPmNvbmYua2V5LCBrZXlfZGF0YSwga2V5X2xlbik7CiAJSU5JVF9MSVNUX0hFQUQoJmtleS0+bGlzdCk7CkBAIC0zMDksNiArMzQ0LDE5IEBACiAJCX0KIAl9CiAKKwlpZiAoYWxnID09IEFMR19BRVNfQ01BQykgeworCQkvKgorCQkgKiBJbml0aWFsaXplIEFFUyBrZXkgc3RhdGUgaGVyZSBhcyBhbiBvcHRpbWl6YXRpb24gc28gdGhhdAorCQkgKiBpdCBkb2VzIG5vdCBuZWVkIHRvIGJlIGluaXRpYWxpemVkIGZvciBldmVyeSBwYWNrZXQuCisJCSAqLworCQlrZXktPnUuYWVzX2NtYWMudGZtID0KKwkJCWllZWU4MDIxMV9hZXNfY21hY19rZXlfc2V0dXAoa2V5X2RhdGEpOworCQlpZiAoIWtleS0+dS5hZXNfY21hYy50Zm0pIHsKKwkJCWtmcmVlKGtleSk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCX0KKwogCXJldHVybiBrZXk7CiB9CiAKQEAgLTM1Miw3ICs0MDAsNyBAQAogCQkJICovCiAKIAkJCS8qIHNhbWUgaGVyZSwgdGhlIEFQIGNvdWxkIGJlIHVzaW5nIFFvUyAqLwotCQkJYXAgPSBzdGFfaW5mb19nZXQoa2V5LT5sb2NhbCwga2V5LT5zZGF0YS0+dS5zdGEuYnNzaWQpOworCQkJYXAgPSBzdGFfaW5mb19nZXQoa2V5LT5sb2NhbCwga2V5LT5zZGF0YS0+dS5tZ2QuYnNzaWQpOwogCQkJaWYgKGFwKSB7CiAJCQkJaWYgKHRlc3Rfc3RhX2ZsYWdzKGFwLCBXTEFOX1NUQV9XTUUpKQogCQkJCQlrZXktPmNvbmYuZmxhZ3MgfD0KQEAgLTQ2Miw2ICs1MTAsOCBAQAogCiAJaWYgKGtleS0+Y29uZi5hbGcgPT0gQUxHX0NDTVApCiAJCWllZWU4MDIxMV9hZXNfa2V5X2ZyZWUoa2V5LT51LmNjbXAudGZtKTsKKwlpZiAoa2V5LT5jb25mLmFsZyA9PSBBTEdfQUVTX0NNQUMpCisJCWllZWU4MDIxMV9hZXNfY21hY19rZXlfZnJlZShrZXktPnUuYWVzX2NtYWMudGZtKTsKIAlpZWVlODAyMTFfZGVidWdmc19rZXlfcmVtb3ZlKGtleSk7CiAKIAlrZnJlZShrZXkpOwpAQCAtNDg0LDYgKzUzNCw3IEBACiAJCWxpc3RfZGVsX2luaXQoJmtleS0+dG9kbyk7CiAJCXRvZG9mbGFncyA9IGtleS0+ZmxhZ3MgJiAoS0VZX0ZMQUdfVE9ET19BRERfREVCVUdGUyB8CiAJCQkJCSAgS0VZX0ZMQUdfVE9ET19ERUZLRVkgfAorCQkJCQkgIEtFWV9GTEFHX1RPRE9fREVGTUdNVEtFWSB8CiAJCQkJCSAgS0VZX0ZMQUdfVE9ET19IV0FDQ0VMX0FERCB8CiAJCQkJCSAgS0VZX0ZMQUdfVE9ET19IV0FDQ0VMX1JFTU9WRSB8CiAJCQkJCSAgS0VZX0ZMQUdfVE9ET19ERUxFVEUpOwpAQCAtNTAxLDYgKzU1MiwxMSBAQAogCQkJaWVlZTgwMjExX2RlYnVnZnNfa2V5X2FkZF9kZWZhdWx0KGtleS0+c2RhdGEpOwogCQkJd29ya19kb25lID0gdHJ1ZTsKIAkJfQorCQlpZiAodG9kb2ZsYWdzICYgS0VZX0ZMQUdfVE9ET19ERUZNR01US0VZKSB7CisJCQlpZWVlODAyMTFfZGVidWdmc19rZXlfcmVtb3ZlX21nbXRfZGVmYXVsdChrZXktPnNkYXRhKTsKKwkJCWllZWU4MDIxMV9kZWJ1Z2ZzX2tleV9hZGRfbWdtdF9kZWZhdWx0KGtleS0+c2RhdGEpOworCQkJd29ya19kb25lID0gdHJ1ZTsKKwkJfQogCQlpZiAodG9kb2ZsYWdzICYgS0VZX0ZMQUdfVE9ET19IV0FDQ0VMX0FERCkgewogCQkJaWVlZTgwMjExX2tleV9lbmFibGVfaHdfYWNjZWwoa2V5KTsKIAkJCXdvcmtfZG9uZSA9IHRydWU7CkBAIC01MzYsNiArNTkyLDcgQEAKIAlpZWVlODAyMTFfa2V5X2xvY2soKTsKIAogCWllZWU4MDIxMV9kZWJ1Z2ZzX2tleV9yZW1vdmVfZGVmYXVsdChzZGF0YSk7CisJaWVlZTgwMjExX2RlYnVnZnNfa2V5X3JlbW92ZV9tZ210X2RlZmF1bHQoc2RhdGEpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnNkYXRhLT5sb2NhbC0+a2V5X2xvY2ssIGZsYWdzKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoa2V5LCB0bXAsICZzZGF0YS0+a2V5X2xpc3QsIGxpc3QpCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEva2V5LmggYi9uZXQvbWFjODAyMTEva2V5LmgKaW5kZXggNDI1ODE2ZS4uMjE1ZDNlZiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2tleS5oCisrKyBiL25ldC9tYWM4MDIxMS9rZXkuaApAQCAtNDYsNiArNDYsOCBAQAogICoJYWNjZWxlcmF0aW9uLgogICogQEtFWV9GTEFHX1RPRE9fREVGS0VZOiBLZXkgaXMgZGVmYXVsdCBrZXkgYW5kIGRlYnVnZnMgbmVlZHMgdG8gYmUgdXBkYXRlZC4KICAqIEBLRVlfRkxBR19UT0RPX0FERF9ERUJVR0ZTOiBLZXkgbmVlZHMgdG8gYmUgYWRkZWQgdG8gZGVidWdmcy4KKyAqIEBLRVlfRkxBR19UT0RPX0RFRk1HTVRLRVk6IEtleSBpcyBkZWZhdWx0IG1hbmFnZW1lbnQga2V5IGFuZCBkZWJ1Z2ZzIG5lZWRzCisgKgl0byBiZSB1cGRhdGVkLgogICovCiBlbnVtIGllZWU4MDIxMV9pbnRlcm5hbF9rZXlfZmxhZ3MgewogCUtFWV9GTEFHX1VQTE9BREVEX1RPX0hBUkRXQVJFCT0gQklUKDApLApAQCAtNTQsNiArNTYsNyBAQAogCUtFWV9GTEFHX1RPRE9fSFdBQ0NFTF9SRU1PVkUJPSBCSVQoMyksCiAJS0VZX0ZMQUdfVE9ET19ERUZLRVkJCT0gQklUKDQpLAogCUtFWV9GTEFHX1RPRE9fQUREX0RFQlVHRlMJPSBCSVQoNSksCisJS0VZX0ZMQUdfVE9ET19ERUZNR01US0VZCT0gQklUKDYpLAogfTsKIAogc3RydWN0IHRraXBfY3R4IHsKQEAgLTk2LDYgKzk5LDE2IEBACiAJCQl1OCB0eF9jcnlwdG9fYnVmWzYgKiBBRVNfQkxPQ0tfTEVOXTsKIAkJCXU4IHJ4X2NyeXB0b19idWZbNiAqIEFFU19CTE9DS19MRU5dOwogCQl9IGNjbXA7CisJCXN0cnVjdCB7CisJCQl1OCB0eF9wbls2XTsKKwkJCXU4IHJ4X3BuWzZdOworCQkJc3RydWN0IGNyeXB0b19jaXBoZXIgKnRmbTsKKwkJCXUzMiByZXBsYXlzOyAvKiBkb3QxMVJTTkFTdGF0c0NNQUNSZXBsYXlzICovCisJCQl1MzIgaWN2ZXJyb3JzOyAvKiBkb3QxMVJTTkFTdGF0c0NNQUNJQ1ZFcnJvcnMgKi8KKwkJCS8qIHNjcmF0Y2ggYnVmZmVycyBmb3IgdmlydF90b19wYWdlKCkgKGNyeXB0byBBUEkpICovCisJCQl1OCB0eF9jcnlwdG9fYnVmWzIgKiBBRVNfQkxPQ0tfTEVOXTsKKwkJCXU4IHJ4X2NyeXB0b19idWZbMiAqIEFFU19CTE9DS19MRU5dOworCQl9IGFlc19jbWFjOwogCX0gdTsKIAogCS8qIG51bWJlciBvZiB0aW1lcyB0aGlzIGtleSBoYXMgYmVlbiB1c2VkICovCkBAIC0xMTQsNiArMTI3LDcgQEAKIAkJc3RydWN0IGRlbnRyeSAqdHhfc3BlYzsKIAkJc3RydWN0IGRlbnRyeSAqcnhfc3BlYzsKIAkJc3RydWN0IGRlbnRyeSAqcmVwbGF5czsKKwkJc3RydWN0IGRlbnRyeSAqaWN2ZXJyb3JzOwogCQlzdHJ1Y3QgZGVudHJ5ICprZXk7CiAJCXN0cnVjdCBkZW50cnkgKmlmaW5kZXg7CiAJCWludCBjbnQ7CkBAIC0xNDAsNiArMTU0LDggQEAKIAkJCXN0cnVjdCBzdGFfaW5mbyAqc3RhKTsKIHZvaWQgaWVlZTgwMjExX2tleV9mcmVlKHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXkpOwogdm9pZCBpZWVlODAyMTFfc2V0X2RlZmF1bHRfa2V5KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBpbnQgaWR4KTsKK3ZvaWQgaWVlZTgwMjExX3NldF9kZWZhdWx0X21nbXRfa2V5KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCSAgICBpbnQgaWR4KTsKIHZvaWQgaWVlZTgwMjExX2ZyZWVfa2V5cyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7CiB2b2lkIGllZWU4MDIxMV9lbmFibGVfa2V5cyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7CiB2b2lkIGllZWU4MDIxMV9kaXNhYmxlX2tleXMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL21haW4uYyBiL25ldC9tYWM4MDIxMS9tYWluLmMKaW5kZXggMjRiMTQzNi4uZjM4ZGI0ZCAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL21haW4uYworKysgYi9uZXQvbWFjODAyMTEvbWFpbi5jCkBAIC0xNjgsMjQgKzE2OCw2NyBAQAogCQlyZXR1cm4gMDsKIAogCW1lbXNldCgmY29uZiwgMCwgc2l6ZW9mKGNvbmYpKTsKLQljb25mLmNoYW5nZWQgPSBjaGFuZ2VkOwogCi0JaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OIHx8Ci0JICAgIHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykKLQkJY29uZi5ic3NpZCA9IHNkYXRhLT51LnN0YS5ic3NpZDsKKwlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCisJCWNvbmYuYnNzaWQgPSBzZGF0YS0+dS5tZ2QuYnNzaWQ7CisJZWxzZSBpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKQorCQljb25mLmJzc2lkID0gc2RhdGEtPnUuaWJzcy5ic3NpZDsKIAllbHNlIGlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApCiAJCWNvbmYuYnNzaWQgPSBzZGF0YS0+ZGV2LT5kZXZfYWRkcjsKIAllbHNlIGlmIChpZWVlODAyMTFfdmlmX2lzX21lc2goJnNkYXRhLT52aWYpKSB7Ci0JCXU4IHplcm9bRVRIX0FMRU5dID0geyAwIH07CisJCXN0YXRpYyBjb25zdCB1OCB6ZXJvW0VUSF9BTEVOXSA9IHsgMCB9OwogCQljb25mLmJzc2lkID0gemVybzsKIAl9IGVsc2UgewogCQlXQVJOX09OKDEpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwlzd2l0Y2ggKHNkYXRhLT52aWYudHlwZSkgeworCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6CisJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKKwljYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIGRvIG5vdCB3YXJuIHRvIHNpbXBsaWZ5IGNhbGxlciBpbiBzY2FuLmMgKi8KKwkJY2hhbmdlZCAmPSB+SUVFRTgwMjExX0lGQ0NfQkVBQ09OX0VOQUJMRUQ7CisJCWlmIChXQVJOX09OKGNoYW5nZWQgJiBJRUVFODAyMTFfSUZDQ19CRUFDT04pKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWNoYW5nZWQgJj0gfklFRUU4MDIxMV9JRkNDX0JFQUNPTjsKKwkJYnJlYWs7CisJfQorCisJaWYgKGNoYW5nZWQgJiBJRUVFODAyMTFfSUZDQ19CRUFDT05fRU5BQkxFRCkgeworCQlpZiAobG9jYWwtPnN3X3NjYW5uaW5nKSB7CisJCQljb25mLmVuYWJsZV9iZWFjb24gPSBmYWxzZTsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBCZWFjb24gc2hvdWxkIGJlIGVuYWJsZWQsIGJ1dCBBUCBtb2RlIG11c3QKKwkJCSAqIGNoZWNrIHdoZXRoZXIgdGhlcmUgaXMgYSBiZWFjb24gY29uZmlndXJlZC4KKwkJCSAqLworCQkJc3dpdGNoIChzZGF0YS0+dmlmLnR5cGUpIHsKKwkJCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6CisJCQkJY29uZi5lbmFibGVfYmVhY29uID0KKwkJCQkJISFyY3VfZGVyZWZlcmVuY2Uoc2RhdGEtPnUuYXAuYmVhY29uKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6CisJCQkJY29uZi5lbmFibGVfYmVhY29uID0gISFzZGF0YS0+dS5pYnNzLnByb2JlX3Jlc3A7CisJCQkJYnJlYWs7CisJCQljYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6CisJCQkJY29uZi5lbmFibGVfYmVhY29uID0gdHJ1ZTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJLyogbm90IHJlYWNoZWQgKi8KKwkJCQlXQVJOX09OKDEpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCiAJaWYgKFdBUk5fT04oIWNvbmYuYnNzaWQgJiYgKGNoYW5nZWQgJiBJRUVFODAyMTFfSUZDQ19CU1NJRCkpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCWNvbmYuY2hhbmdlZCA9IGNoYW5nZWQ7CisKIAlyZXR1cm4gbG9jYWwtPm9wcy0+Y29uZmlnX2ludGVyZmFjZShsb2NhbF90b19odyhsb2NhbCksCiAJCQkJCSAgICAmc2RhdGEtPnZpZiwgJmNvbmYpOwogfQpAQCAtMjA4LDI2ICsyNTEsMjIgQEAKIAl9CiAKIAlpZiAoY2hhbiAhPSBsb2NhbC0+aHcuY29uZi5jaGFubmVsIHx8Ci0JICAgIGNoYW5uZWxfdHlwZSAhPSBsb2NhbC0+aHcuY29uZi5odC5jaGFubmVsX3R5cGUpIHsKKwkgICAgY2hhbm5lbF90eXBlICE9IGxvY2FsLT5ody5jb25mLmNoYW5uZWxfdHlwZSkgewogCQlsb2NhbC0+aHcuY29uZi5jaGFubmVsID0gY2hhbjsKLQkJbG9jYWwtPmh3LmNvbmYuaHQuY2hhbm5lbF90eXBlID0gY2hhbm5lbF90eXBlOwotCQlzd2l0Y2ggKGNoYW5uZWxfdHlwZSkgewotCQljYXNlIE5MODAyMTFfQ0hBTl9OT19IVDoKLQkJCWxvY2FsLT5ody5jb25mLmh0LmVuYWJsZWQgPSBmYWxzZTsKLQkJCWJyZWFrOwotCQljYXNlIE5MODAyMTFfQ0hBTl9IVDIwOgotCQljYXNlIE5MODAyMTFfQ0hBTl9IVDQwTUlOVVM6Ci0JCWNhc2UgTkw4MDIxMV9DSEFOX0hUNDBQTFVTOgotCQkJbG9jYWwtPmh3LmNvbmYuaHQuZW5hYmxlZCA9IHRydWU7Ci0JCQlicmVhazsKLQkJfQorCQlsb2NhbC0+aHcuY29uZi5jaGFubmVsX3R5cGUgPSBjaGFubmVsX3R5cGU7CiAJCWNoYW5nZWQgfD0gSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0NIQU5ORUw7CiAJfQogCi0JaWYgKCFsb2NhbC0+aHcuY29uZi5wb3dlcl9sZXZlbCkKKwlpZiAobG9jYWwtPnN3X3NjYW5uaW5nKQogCQlwb3dlciA9IGNoYW4tPm1heF9wb3dlcjsKIAllbHNlCi0JCXBvd2VyID0gbWluKGNoYW4tPm1heF9wb3dlciwgbG9jYWwtPmh3LmNvbmYucG93ZXJfbGV2ZWwpOworCQlwb3dlciA9IGxvY2FsLT5wb3dlcl9jb25zdHJfbGV2ZWwgPworCQkJKGNoYW4tPm1heF9wb3dlciAtIGxvY2FsLT5wb3dlcl9jb25zdHJfbGV2ZWwpIDoKKwkJCWNoYW4tPm1heF9wb3dlcjsKKworCWlmIChsb2NhbC0+dXNlcl9wb3dlcl9sZXZlbCkKKwkJcG93ZXIgPSBtaW4ocG93ZXIsIGxvY2FsLT51c2VyX3Bvd2VyX2xldmVsKTsKKwogCWlmIChsb2NhbC0+aHcuY29uZi5wb3dlcl9sZXZlbCAhPSBwb3dlcikgewogCQljaGFuZ2VkIHw9IElFRUU4MDIxMV9DT05GX0NIQU5HRV9QT1dFUjsKIAkJbG9jYWwtPmh3LmNvbmYucG93ZXJfbGV2ZWwgPSBwb3dlcjsKQEAgLTY2Nyw3ICs3MDYsNyBAQAogCQkJCQljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX29wcyAqb3BzKQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsOwotCWludCBwcml2X3NpemU7CisJaW50IHByaXZfc2l6ZSwgaTsKIAlzdHJ1Y3Qgd2lwaHkgKndpcGh5OwogCiAJLyogRW5zdXJlIDMyLWJ5dGUgYWxpZ25tZW50IG9mIG91ciBwcml2YXRlIGRhdGEgYW5kIGh3IHByaXZhdGUgZGF0YS4KQEAgLTY5NSw2ICs3MzQsMTAgQEAKIAkJcmV0dXJuIE5VTEw7CiAKIAl3aXBoeS0+cHJpdmlkID0gbWFjODAyMTFfd2lwaHlfcHJpdmlkOworCXdpcGh5LT5tYXhfc2Nhbl9zc2lkcyA9IDQ7CisJLyogWWVzLCBwdXR0aW5nIGNmZzgwMjExX2JzcyBpbnRvIGllZWU4MDIxMV9ic3MgaXMgYSBoYWNrICovCisJd2lwaHktPmJzc19wcml2X3NpemUgPSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9ic3MpIC0KKwkJCSAgICAgICBzaXplb2Yoc3RydWN0IGNmZzgwMjExX2Jzcyk7CiAKIAlsb2NhbCA9IHdpcGh5X3ByaXYod2lwaHkpOwogCWxvY2FsLT5ody53aXBoeSA9IHdpcGh5OwpAQCAtNzIyLDYgKzc2NSw3IEBACiAJbG9jYWwtPmh3LmNvbmYucmFkaW9fZW5hYmxlZCA9IHRydWU7CiAKIAlJTklUX0xJU1RfSEVBRCgmbG9jYWwtPmludGVyZmFjZXMpOworCW11dGV4X2luaXQoJmxvY2FsLT5pZmxpc3RfbXR4KTsKIAogCXNwaW5fbG9ja19pbml0KCZsb2NhbC0+a2V5X2xvY2spOwogCkBAIC03MzYsNiArNzgwLDExIEBACiAJc2V0dXBfdGltZXIoJmxvY2FsLT5keW5hbWljX3BzX3RpbWVyLAogCQkgICAgaWVlZTgwMjExX2R5bmFtaWNfcHNfdGltZXIsICh1bnNpZ25lZCBsb25nKSBsb2NhbCk7CiAKKwlmb3IgKGkgPSAwOyBpIDwgSUVFRTgwMjExX01BWF9BTVBEVV9RVUVVRVM7IGkrKykKKwkJbG9jYWwtPmFtcGR1X2FjX3F1ZXVlW2ldID0gLTE7CisJLyogdXNpbmcgYW4gczggd29uJ3Qgd29yayB3aXRoIG1vcmUgdGhhbiB0aGF0ICovCisJQlVJTERfQlVHX09OKElFRUU4MDIxMV9NQVhfQU1QRFVfUVVFVUVTID4gMTI3KTsKKwogCXN0YV9pbmZvX2luaXQobG9jYWwpOwogCiAJdGFza2xldF9pbml0KCZsb2NhbC0+dHhfcGVuZGluZ190YXNrbGV0LCBpZWVlODAyMTFfdHhfcGVuZGluZywKQEAgLTc1NCw2ICs4MDMsMjMgQEAKIH0KIEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX2FsbG9jX2h3KTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpZWVlODAyMTFfbWFzdGVyX29wcyA9IHsKKwkubmRvX3N0YXJ0X3htaXQgPSBpZWVlODAyMTFfbWFzdGVyX3N0YXJ0X3htaXQsCisJLm5kb19vcGVuID0gaWVlZTgwMjExX21hc3Rlcl9vcGVuLAorCS5uZG9fc3RvcCA9IGllZWU4MDIxMV9tYXN0ZXJfc3RvcCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IGllZWU4MDIxMV9tYXN0ZXJfc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fc2VsZWN0X3F1ZXVlID0gaWVlZTgwMjExX3NlbGVjdF9xdWV1ZSwKK307CisKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9tYXN0ZXJfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKm1kZXYpCit7CisJbWRldi0+dHlwZSA9IEFSUEhSRF9JRUVFODAyMTE7CisJbWRldi0+bmV0ZGV2X29wcyA9ICZpZWVlODAyMTFfbWFzdGVyX29wczsKKwltZGV2LT5oZWFkZXJfb3BzID0gJmllZWU4MDIxMV9oZWFkZXJfb3BzOworCW1kZXYtPnR4X3F1ZXVlX2xlbiA9IDEwMDA7CisJbWRldi0+YWRkcl9sZW4gPSBFVEhfQUxFTjsKK30KKwogaW50IGllZWU4MDIxMV9yZWdpc3Rlcl9odyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTsKQEAgLTc2MSwyNSArODI3LDMzIEBACiAJZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kOwogCXN0cnVjdCBuZXRfZGV2aWNlICptZGV2OwogCXN0cnVjdCBpZWVlODAyMTFfbWFzdGVyX3ByaXYgKm1wcml2OworCWludCBjaGFubmVscywgaSwgajsKIAogCS8qCiAJICogZ2VuZXJpYyBjb2RlIGd1YXJhbnRlZXMgYXQgbGVhc3Qgb25lIGJhbmQsCiAJICogc2V0IHRoaXMgdmVyeSBlYXJseSBiZWNhdXNlIG11Y2ggY29kZSBhc3N1bWVzCiAJICogdGhhdCBody5jb25mLmNoYW5uZWwgaXMgYXNzaWduZWQKIAkgKi8KKwljaGFubmVscyA9IDA7CiAJZm9yIChiYW5kID0gMDsgYmFuZCA8IElFRUU4MDIxMV9OVU1fQkFORFM7IGJhbmQrKykgewogCQlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKIAogCQlzYmFuZCA9IGxvY2FsLT5ody53aXBoeS0+YmFuZHNbYmFuZF07Ci0JCWlmIChzYmFuZCkgeworCQlpZiAoc2JhbmQgJiYgIWxvY2FsLT5vcGVyX2NoYW5uZWwpIHsKIAkJCS8qIGluaXQgY2hhbm5lbCB3ZSdyZSBvbiAqLwogCQkJbG9jYWwtPmh3LmNvbmYuY2hhbm5lbCA9CiAJCQlsb2NhbC0+b3Blcl9jaGFubmVsID0KIAkJCWxvY2FsLT5zY2FuX2NoYW5uZWwgPSAmc2JhbmQtPmNoYW5uZWxzWzBdOwotCQkJYnJlYWs7CiAJCX0KKwkJaWYgKHNiYW5kKQorCQkJY2hhbm5lbHMgKz0gc2JhbmQtPm5fY2hhbm5lbHM7CiAJfQogCisJbG9jYWwtPmludF9zY2FuX3JlcS5uX2NoYW5uZWxzID0gY2hhbm5lbHM7CisJbG9jYWwtPmludF9zY2FuX3JlcS5jaGFubmVscyA9IGt6YWxsb2Moc2l6ZW9mKHZvaWQgKikgKiBjaGFubmVscywgR0ZQX0tFUk5FTCk7CisJaWYgKCFsb2NhbC0+aW50X3NjYW5fcmVxLmNoYW5uZWxzKQorCQlyZXR1cm4gLUVOT01FTTsKKwogCS8qIGlmIGxvdy1sZXZlbCBkcml2ZXIgc3VwcG9ydHMgQVAsIHdlIGFsc28gc3VwcG9ydCBWTEFOICovCiAJaWYgKGxvY2FsLT5ody53aXBoeS0+aW50ZXJmYWNlX21vZGVzICYgQklUKE5MODAyMTFfSUZUWVBFX0FQKSkKIAkJbG9jYWwtPmh3LndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgfD0gQklUKE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4pOwpAQCAtNzg3LDkgKzg2MSwxNCBAQAogCS8qIG1hYzgwMjExIGFsd2F5cyBzdXBwb3J0cyBtb25pdG9yICovCiAJbG9jYWwtPmh3LndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgfD0gQklUKE5MODAyMTFfSUZUWVBFX01PTklUT1IpOwogCisJaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TSUdOQUxfREJNKQorCQlsb2NhbC0+aHcud2lwaHktPnNpZ25hbF90eXBlID0gQ0ZHODAyMTFfU0lHTkFMX1RZUEVfTUJNOworCWVsc2UgaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TSUdOQUxfVU5TUEVDKQorCQlsb2NhbC0+aHcud2lwaHktPnNpZ25hbF90eXBlID0gQ0ZHODAyMTFfU0lHTkFMX1RZUEVfVU5TUEVDOworCiAJcmVzdWx0ID0gd2lwaHlfcmVnaXN0ZXIobG9jYWwtPmh3LndpcGh5KTsKIAlpZiAocmVzdWx0IDwgMCkKLQkJcmV0dXJuIHJlc3VsdDsKKwkJZ290byBmYWlsX3dpcGh5X3JlZ2lzdGVyOwogCiAJLyoKIAkgKiBXZSB1c2UgdGhlIG51bWJlciBvZiBxdWV1ZXMgZm9yIGZlYXR1cmUgdGVzdHMgKFFvUywgSFQpIGludGVybmFsbHkKQEAgLTgwMyw4ICs4ODIsOCBAQAogCQlody0+YW1wZHVfcXVldWVzID0gMDsKIAogCW1kZXYgPSBhbGxvY19uZXRkZXZfbXEoc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfbWFzdGVyX3ByaXYpLAotCQkJICAgICAgICJ3bWFzdGVyJWQiLCBldGhlcl9zZXR1cCwKLQkJCSAgICAgICBpZWVlODAyMTFfbnVtX3F1ZXVlcyhodykpOworCQkJICAgICAgICJ3bWFzdGVyJWQiLCBpZWVlODAyMTFfbWFzdGVyX3NldHVwLAorCQkJICAgICAgIGh3LT5xdWV1ZXMpOwogCWlmICghbWRldikKIAkJZ290byBmYWlsX21kZXZfYWxsb2M7CiAKQEAgLTgxMiwxNyArODkxLDggQEAKIAltcHJpdi0+bG9jYWwgPSBsb2NhbDsKIAlsb2NhbC0+bWRldiA9IG1kZXY7CiAKLQlpZWVlODAyMTFfcnhfYnNzX2xpc3RfaW5pdChsb2NhbCk7Ci0KLQltZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBpZWVlODAyMTFfbWFzdGVyX3N0YXJ0X3htaXQ7Ci0JbWRldi0+b3BlbiA9IGllZWU4MDIxMV9tYXN0ZXJfb3BlbjsKLQltZGV2LT5zdG9wID0gaWVlZTgwMjExX21hc3Rlcl9zdG9wOwotCW1kZXYtPnR5cGUgPSBBUlBIUkRfSUVFRTgwMjExOwotCW1kZXYtPmhlYWRlcl9vcHMgPSAmaWVlZTgwMjExX2hlYWRlcl9vcHM7Ci0JbWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gaWVlZTgwMjExX21hc3Rlcl9zZXRfbXVsdGljYXN0X2xpc3Q7Ci0KIAlsb2NhbC0+aHcud29ya3F1ZXVlID0KLQkJY3JlYXRlX2ZyZWV6ZWFibGVfd29ya3F1ZXVlKHdpcGh5X25hbWUobG9jYWwtPmh3LndpcGh5KSk7CisJCWNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKHdpcGh5X25hbWUobG9jYWwtPmh3LndpcGh5KSk7CiAJaWYgKCFsb2NhbC0+aHcud29ya3F1ZXVlKSB7CiAJCXJlc3VsdCA9IC1FTk9NRU07CiAJCWdvdG8gZmFpbF93b3JrcXVldWU7CkBAIC04NDYsMTUgKzkxNiw2IEBACiAKIAlsb2NhbC0+aHcuY29uZi5saXN0ZW5faW50ZXJ2YWwgPSBsb2NhbC0+aHcubWF4X2xpc3Rlbl9pbnRlcnZhbDsKIAotCWxvY2FsLT53c3RhdHNfZmxhZ3MgfD0gbG9jYWwtPmh3LmZsYWdzICYgKElFRUU4MDIxMV9IV19TSUdOQUxfVU5TUEVDIHwKLQkJCQkJCSAgSUVFRTgwMjExX0hXX1NJR05BTF9EQiB8Ci0JCQkJCQkgIElFRUU4MDIxMV9IV19TSUdOQUxfREJNKSA/Ci0JCQkgICAgICAgSVdfUVVBTF9RVUFMX1VQREFURUQgOiBJV19RVUFMX1FVQUxfSU5WQUxJRDsKLQlsb2NhbC0+d3N0YXRzX2ZsYWdzIHw9IGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19OT0lTRV9EQk0gPwotCQkJICAgICAgIElXX1FVQUxfTk9JU0VfVVBEQVRFRCA6IElXX1FVQUxfTk9JU0VfSU5WQUxJRDsKLQlpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1NJR05BTF9EQk0pCi0JCWxvY2FsLT53c3RhdHNfZmxhZ3MgfD0gSVdfUVVBTF9EQk07Ci0KIAlyZXN1bHQgPSBzdGFfaW5mb19zdGFydChsb2NhbCk7CiAJaWYgKHJlc3VsdCA8IDApCiAJCWdvdG8gZmFpbF9zdGFfaW5mbzsKQEAgLTg2Niw2ICs5MjcsNyBAQAogCiAJbWVtY3B5KGxvY2FsLT5tZGV2LT5kZXZfYWRkciwgbG9jYWwtPmh3LndpcGh5LT5wZXJtX2FkZHIsIEVUSF9BTEVOKTsKIAlTRVRfTkVUREVWX0RFVihsb2NhbC0+bWRldiwgd2lwaHlfZGV2KGxvY2FsLT5ody53aXBoeSkpOworCWxvY2FsLT5tZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX05FVE5TX0xPQ0FMOwogCiAJcmVzdWx0ID0gcmVnaXN0ZXJfbmV0ZGV2aWNlKGxvY2FsLT5tZGV2KTsKIAlpZiAocmVzdWx0IDwgMCkKQEAgLTg4Nyw4ICs5NDksNiBAQAogCQlnb3RvIGZhaWxfd2VwOwogCX0KIAotCWxvY2FsLT5tZGV2LT5zZWxlY3RfcXVldWUgPSBpZWVlODAyMTFfc2VsZWN0X3F1ZXVlOwotCiAJLyogYWRkIG9uZSBkZWZhdWx0IFNUQSBpbnRlcmZhY2UgaWYgc3VwcG9ydGVkICovCiAJaWYgKGxvY2FsLT5ody53aXBoeS0+aW50ZXJmYWNlX21vZGVzICYgQklUKE5MODAyMTFfSUZUWVBFX1NUQVRJT04pKSB7CiAJCXJlc3VsdCA9IGllZWU4MDIxMV9pZl9hZGQobG9jYWwsICJ3bGFuJWQiLCBOVUxMLApAQCAtOTAyLDYgKzk2MiwyMCBAQAogCiAJaWVlZTgwMjExX2xlZF9pbml0KGxvY2FsKTsKIAorCS8qIGFsbG9jIGludGVybmFsIHNjYW4gcmVxdWVzdCAqLworCWkgPSAwOworCWxvY2FsLT5pbnRfc2Nhbl9yZXEuc3NpZHMgPSAmbG9jYWwtPnNjYW5fc3NpZDsKKwlsb2NhbC0+aW50X3NjYW5fcmVxLm5fc3NpZHMgPSAxOworCWZvciAoYmFuZCA9IDA7IGJhbmQgPCBJRUVFODAyMTFfTlVNX0JBTkRTOyBiYW5kKyspIHsKKwkJaWYgKCFody0+d2lwaHktPmJhbmRzW2JhbmRdKQorCQkJY29udGludWU7CisJCWZvciAoaiA9IDA7IGogPCBody0+d2lwaHktPmJhbmRzW2JhbmRdLT5uX2NoYW5uZWxzOyBqKyspIHsKKwkJCWxvY2FsLT5pbnRfc2Nhbl9yZXEuY2hhbm5lbHNbaV0gPQorCQkJCSZody0+d2lwaHktPmJhbmRzW2JhbmRdLT5jaGFubmVsc1tqXTsKKwkJCWkrKzsKKwkJfQorCX0KKwogCXJldHVybiAwOwogCiBmYWlsX3dlcDoKQEAgLTkyMCw2ICs5OTQsOCBAQAogCQlmcmVlX25ldGRldihsb2NhbC0+bWRldik7CiBmYWlsX21kZXZfYWxsb2M6CiAJd2lwaHlfdW5yZWdpc3Rlcihsb2NhbC0+aHcud2lwaHkpOworZmFpbF93aXBoeV9yZWdpc3RlcjoKKwlrZnJlZShsb2NhbC0+aW50X3NjYW5fcmVxLmNoYW5uZWxzKTsKIAlyZXR1cm4gcmVzdWx0OwogfQogRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfcmVnaXN0ZXJfaHcpOwpAQCAtOTQ3LDcgKzEwMjMsNiBAQAogCiAJcnRubF91bmxvY2soKTsKIAotCWllZWU4MDIxMV9yeF9ic3NfbGlzdF9kZWluaXQobG9jYWwpOwogCWllZWU4MDIxMV9jbGVhcl90eF9wZW5kaW5nKGxvY2FsKTsKIAlzdGFfaW5mb19zdG9wKGxvY2FsKTsKIAlyYXRlX2NvbnRyb2xfZGVpbml0aWFsaXplKGxvY2FsKTsKQEAgLTk2NSw2ICsxMDQwLDcgQEAKIAlpZWVlODAyMTFfd2VwX2ZyZWUobG9jYWwpOwogCWllZWU4MDIxMV9sZWRfZXhpdChsb2NhbCk7CiAJZnJlZV9uZXRkZXYobG9jYWwtPm1kZXYpOworCWtmcmVlKGxvY2FsLT5pbnRfc2Nhbl9yZXEuY2hhbm5lbHMpOwogfQogRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfdW5yZWdpc3Rlcl9odyk7CiAKQEAgLTk3Miw2ICsxMDQ4LDggQEAKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTsKIAorCW11dGV4X2Rlc3Ryb3koJmxvY2FsLT5pZmxpc3RfbXR4KTsKKwogCXdpcGh5X2ZyZWUobG9jYWwtPmh3LndpcGh5KTsKIH0KIEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX2ZyZWVfaHcpOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL21lc2guYyBiL25ldC9tYWM4MDIxMS9tZXNoLmMKaW5kZXggODJmNTY4ZS4uOWEzZTVkZSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL21lc2guYworKysgYi9uZXQvbWFjODAyMTEvbWVzaC5jCkBAIC0yNzUsMTYgKzI3NSw2IEBACiAJCSYgdGJsLT5oYXNoX21hc2s7CiB9CiAKLXU4IG1lc2hfaWRfaGFzaCh1OCAqbWVzaF9pZCwgaW50IG1lc2hfaWRfbGVuKQotewotCWlmICghbWVzaF9pZF9sZW4pCi0JCXJldHVybiAxOwotCWVsc2UgaWYgKG1lc2hfaWRfbGVuID09IDEpCi0JCXJldHVybiAodTgpIG1lc2hfaWRbMF07Ci0JZWxzZQotCQlyZXR1cm4gKHU4KSAobWVzaF9pZFswXSArIDIgKiBtZXNoX2lkWzFdKTsKLX0KLQogc3RydWN0IG1lc2hfdGFibGUgKm1lc2hfdGFibGVfYWxsb2MoaW50IHNpemVfb3JkZXIpCiB7CiAJaW50IGk7CkBAIC00NDIsNyArNDMyLDggQEAKIAogCWlmbXNoLT5ob3VzZWtlZXBpbmcgPSB0cnVlOwogCXF1ZXVlX3dvcmsobG9jYWwtPmh3LndvcmtxdWV1ZSwgJmlmbXNoLT53b3JrKTsKLQlpZWVlODAyMTFfaWZfY29uZmlnKHNkYXRhLCBJRUVFODAyMTFfSUZDQ19CRUFDT04pOworCWllZWU4MDIxMV9pZl9jb25maWcoc2RhdGEsIElFRUU4MDIxMV9JRkNDX0JFQUNPTiB8CisJCQkJICAgSUVFRTgwMjExX0lGQ0NfQkVBQ09OX0VOQUJMRUQpOwogfQogCiB2b2lkIGllZWU4MDIxMV9zdG9wX21lc2goc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCkBAIC00NzYsNyArNDY3LDcgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKIAlzdHJ1Y3QgaWVlZTgwMl8xMV9lbGVtcyBlbGVtczsKIAlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWw7Ci0JdTY0IHN1cHBfcmF0ZXMgPSAwOworCXUzMiBzdXBwX3JhdGVzID0gMDsKIAlzaXplX3QgYmFzZWxlbjsKIAlpbnQgZnJlcTsKIAllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQgPSByeF9zdGF0dXMtPmJhbmQ7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvbWVzaC5oIGIvbmV0L21hYzgwMjExL21lc2guaAppbmRleCBjMTk3YWI1Li5kODkxZDdkIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvbWVzaC5oCisrKyBiL25ldC9tYWM4MDIxMS9tZXNoLmgKQEAgLTI0LDE1ICsyNCwxNSBAQAogICoKICAqCiAgKgotICogQE1FU0hfUEFUSF9BQ1RJVkU6IHRoZSBtZXNoIHBhdGggaXMgY2FuIGJlIHVzZWQgZm9yIGZvcndhcmRpbmcKLSAqIEBNRVNIX1BBVEhfUkVTT0xWRUQ6IHRoZSBkaXNjb3ZlcnkgcHJvY2VzcyBpcyBydW5uaW5nIGZvciB0aGlzIG1lc2ggcGF0aAorICogQE1FU0hfUEFUSF9BQ1RJVkU6IHRoZSBtZXNoIHBhdGggY2FuIGJlIHVzZWQgZm9yIGZvcndhcmRpbmcKKyAqIEBNRVNIX1BBVEhfUkVTT0xWSU5HOiB0aGUgZGlzY292ZXJ5IHByb2Nlc3MgaXMgcnVubmluZyBmb3IgdGhpcyBtZXNoIHBhdGgKICAqIEBNRVNIX1BBVEhfRFNOX1ZBTElEOiB0aGUgbWVzaCBwYXRoIGNvbnRhaW5zIGEgdmFsaWQgZGVzdGluYXRpb24gc2VxdWVuY2UKICAqIAludW1iZXIKICAqIEBNRVNIX1BBVEhfRklYRUQ6IHRoZSBtZXNoIHBhdGggaGFzIGJlZW4gbWFudWFsbHkgc2V0IGFuZCBzaG91bGQgbm90IGJlCiAgKiAJbW9kaWZpZWQKICAqIEBNRVNIX1BBVEhfUkVTT0xWRUQ6IHRoZSBtZXNoIHBhdGggY2FuIGhhcyBiZWVuIHJlc29sdmVkCiAgKgotICogTUVTSF9QQVRIX1JFU09MVkVEIGFuZCBNRVNIX1BBVEhfREVMRVRFIGFyZSB1c2VkIGJ5IHRoZSBtZXNoIHBhdGggdGltZXIgdG8KKyAqIE1FU0hfUEFUSF9SRVNPTFZFRCBpcyB1c2VkIGJ5IHRoZSBtZXNoIHBhdGggdGltZXIgdG8KICAqIGRlY2lkZSB3aGVuIHRvIHN0b3Agb3IgY2FuY2VsIHRoZSBtZXNoIHBhdGggZGlzY292ZXJ5LgogICovCiBlbnVtIG1lc2hfcGF0aF9mbGFncyB7CkBAIC0xOTYsNyArMTk2LDYgQEAKIAogLyogUHVibGljIGludGVyZmFjZXMgKi8KIC8qIFZhcmlvdXMgKi8KLXU4IG1lc2hfaWRfaGFzaCh1OCAqbWVzaF9pZCwgaW50IG1lc2hfaWRfbGVuKTsKIGludCBpZWVlODAyMTFfZ2V0X21lc2hfaGRybGVuKHN0cnVjdCBpZWVlODAyMTFzX2hkciAqbWVzaGhkcik7CiBpbnQgaWVlZTgwMjExX25ld19tZXNoX2hlYWRlcihzdHJ1Y3QgaWVlZTgwMjExc19oZHIgKm1lc2hoZHIsCiAJCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKQEAgLTIzNiwxNCArMjM1LDEzIEBACiAJCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwgc2l6ZV90IGxlbik7CiBpbnQgbWVzaF9wYXRoX2FkZCh1OCAqZHN0LCBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7CiAvKiBNZXNoIHBsaW5rcyAqLwotdm9pZCBtZXNoX25laWdoYm91cl91cGRhdGUodTggKmh3X2FkZHIsIHU2NCByYXRlcywKK3ZvaWQgbWVzaF9uZWlnaGJvdXJfdXBkYXRlKHU4ICpod19hZGRyLCB1MzIgcmF0ZXMsCiAJCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBib29sIGFkZCk7CiBib29sIG1lc2hfcGVlcl9hY2NlcHRzX3BsaW5rcyhzdHJ1Y3QgaWVlZTgwMl8xMV9lbGVtcyAqaWUpOwogdm9pZCBtZXNoX2FjY2VwdF9wbGlua3NfdXBkYXRlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKIHZvaWQgbWVzaF9wbGlua19icm9rZW4oc3RydWN0IHN0YV9pbmZvICpzdGEpOwogdm9pZCBtZXNoX3BsaW5rX2RlYWN0aXZhdGUoc3RydWN0IHN0YV9pbmZvICpzdGEpOwogaW50IG1lc2hfcGxpbmtfb3BlbihzdHJ1Y3Qgc3RhX2luZm8gKnN0YSk7Ci1pbnQgbWVzaF9wbGlua19jbG9zZShzdHJ1Y3Qgc3RhX2luZm8gKnN0YSk7CiB2b2lkIG1lc2hfcGxpbmtfYmxvY2soc3RydWN0IHN0YV9pbmZvICpzdGEpOwogdm9pZCBtZXNoX3J4X3BsaW5rX2ZyYW1lKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwgc2l6ZV90IGxlbiwKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tZXNoX2h3bXAuYyBiL25ldC9tYWM4MDIxMS9tZXNoX2h3bXAuYwppbmRleCA3MWZlNjA5Li42MGIzNWFjIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvbWVzaF9od21wLmMKKysrIGIvbmV0L21hYzgwMjExL21lc2hfaHdtcC5jCkBAIC01OCw3ICs1OCw2IEBACiAjZGVmaW5lIFBFUlJfSUVfRFNUX0FERFIoeCkJKHggKyAyKQogI2RlZmluZSBQRVJSX0lFX0RTVF9EU04oeCkJdTMyX2ZpZWxkX2dldCh4LCA4LCAwKTsKIAotI2RlZmluZSBUVV9UT19FWFBfVElNRSh4KSAoamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoeCAqIDEwMjQgLyAxMDAwKSkKICNkZWZpbmUgTVNFQ19UT19UVSh4KSAoeCoxMDAwLzEwMjQpCiAjZGVmaW5lIERTTl9HVCh4LCB5KSAoKGxvbmcpICh5KSAtIChsb25nKSAoeCkgPCAwKQogI2RlZmluZSBEU05fTFQoeCwgeSkgKChsb25nKSAoeCkgLSAobG9uZykgKHkpIDwgMCkKQEAgLTE0OSw3ICsxNDgsNyBAQAogCXBvcyArPSBFVEhfQUxFTjsKIAltZW1jcHkocG9zLCAmZHN0X2RzbiwgNCk7CiAKLQlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IsIDApOworCWllZWU4MDIxMV90eF9za2Ioc2RhdGEsIHNrYiwgMSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE5OCw3ICsxOTcsNyBAQAogCXBvcyArPSBFVEhfQUxFTjsKIAltZW1jcHkocG9zLCAmZHN0X2RzbiwgNCk7CiAKLQlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IsIDApOworCWllZWU4MDIxMV90eF9za2Ioc2RhdGEsIHNrYiwgMSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTc1OSw3ICs3NTgsNyBAQAogfQogCiAvKioKLSAqIGllZWU4MDIxMXNfbG9va3VwX25leHRob3AgLSBwdXQgdGhlIGFwcHJvcHJpYXRlIG5leHQgaG9wIG9uIGEgbWVzaCBmcmFtZQorICogbWVzaF9uZXh0aG9wX2xvb2t1cCAtIHB1dCB0aGUgYXBwcm9wcmlhdGUgbmV4dCBob3Agb24gYSBtZXNoIGZyYW1lCiAgKgogICogQHNrYjogODAyLjExIGZyYW1lIHRvIGJlIHNlbnQKICAqIEBzZGF0YTogbmV0d29yayBzdWJpZiB0aGUgZnJhbWUgd2lsbCBiZSBzZW50IHRocm91Z2gKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tZXNoX3BsaW5rLmMgYi9uZXQvbWFjODAyMTEvbWVzaF9wbGluay5jCmluZGV4IDExNTliZGIuLmE4YmJkZWMgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9tZXNoX3BsaW5rLmMKKysrIGIvbmV0L21hYzgwMjExL21lc2hfcGxpbmsuYwpAQCAtOTMsNyArOTMsNyBAQAogICogICAgICAgb24gaXQgaW4gdGhlIGxpZmVjeWNsZSBtYW5hZ2VtZW50IHNlY3Rpb24hCiAgKi8KIHN0YXRpYyBzdHJ1Y3Qgc3RhX2luZm8gKm1lc2hfcGxpbmtfYWxsb2Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJCSB1OCAqaHdfYWRkciwgdTY0IHJhdGVzKQorCQkJCQkgdTggKmh3X2FkZHIsIHUzMiByYXRlcykKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKQEAgLTIxOCwxMSArMjE4LDExIEBACiAJCW1lbWNweShwb3MsICZyZWFzb24sIDIpOwogCX0KIAotCWllZWU4MDIxMV90eF9za2Ioc2RhdGEsIHNrYiwgMCk7CisJaWVlZTgwMjExX3R4X3NrYihzZGF0YSwgc2tiLCAxKTsKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBtZXNoX25laWdoYm91cl91cGRhdGUodTggKmh3X2FkZHIsIHU2NCByYXRlcywgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCit2b2lkIG1lc2hfbmVpZ2hib3VyX3VwZGF0ZSh1OCAqaHdfYWRkciwgdTMyIHJhdGVzLCBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJCSAgIGJvb2wgcGVlcl9hY2NlcHRpbmdfcGxpbmtzKQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwpAQCAtMzYxLDM2ICszNjEsNiBAQAogCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOwogfQogCi1pbnQgbWVzaF9wbGlua19jbG9zZShzdHJ1Y3Qgc3RhX2luZm8gKnN0YSkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IHN0YS0+c2RhdGE7Ci0JX19sZTE2IGxsaWQsIHBsaWQsIHJlYXNvbjsKLQotCW1wbF9kYmcoIk1lc2ggcGxpbms6IGNsb3NpbmcgbGluayB3aXRoICVwTVxuIiwgc3RhLT5zdGEuYWRkcik7Ci0Jc3Bpbl9sb2NrX2JoKCZzdGEtPmxvY2spOwotCXN0YS0+cmVhc29uID0gY3B1X3RvX2xlMTYoTUVTSF9MSU5LX0NBTkNFTExFRCk7Ci0JcmVhc29uID0gc3RhLT5yZWFzb247Ci0KLQlpZiAoc3RhLT5wbGlua19zdGF0ZSA9PSBQTElOS19MSVNURU4gfHwKLQkgICAgc3RhLT5wbGlua19zdGF0ZSA9PSBQTElOS19CTE9DS0VEKSB7Ci0JCW1lc2hfcGxpbmtfZnNtX3Jlc3RhcnQoc3RhKTsKLQkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7Ci0JCXJldHVybiAwOwotCX0gZWxzZSBpZiAoc3RhLT5wbGlua19zdGF0ZSA9PSBQTElOS19FU1RBQikgewotCQlfX21lc2hfcGxpbmtfZGVhY3RpdmF0ZShzdGEpOwotCQkvKiBUaGUgdGltZXIgc2hvdWxkIG5vdCBiZSBydW5uaW5nICovCi0JCW1vZF9wbGlua190aW1lcihzdGEsIGRvdDExTWVzaEhvbGRpbmdUaW1lb3V0KHNkYXRhKSk7Ci0JfSBlbHNlIGlmICghbW9kX3BsaW5rX3RpbWVyKHN0YSwgZG90MTFNZXNoSG9sZGluZ1RpbWVvdXQoc2RhdGEpKSkKLQkJc3RhLT5pZ25vcmVfcGxpbmtfdGltZXIgPSB0cnVlOwotCi0Jc3RhLT5wbGlua19zdGF0ZSA9IFBMSU5LX0hPTERJTkc7Ci0JbGxpZCA9IHN0YS0+bGxpZDsKLQlwbGlkID0gc3RhLT5wbGlkOwotCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOwotCW1lc2hfcGxpbmtfZnJhbWVfdHgoc3RhLT5zZGF0YSwgUExJTktfQ0xPU0UsIHN0YS0+c3RhLmFkZHIsIGxsaWQsCi0JCQkgICAgcGxpZCwgcmVhc29uKTsKLQlyZXR1cm4gMDsKLX0KIAogdm9pZCBtZXNoX3J4X3BsaW5rX2ZyYW1lKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsCiAJCQkgc2l6ZV90IGxlbiwgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cykKQEAgLTQ3Nyw3ICs0NDcsNyBAQAogCQlzcGluX2xvY2tfYmgoJnN0YS0+bG9jayk7CiAJfSBlbHNlIGlmICghc3RhKSB7CiAJCS8qIGZ0eXBlID09IFBMSU5LX09QRU4gKi8KLQkJdTY0IHJhdGVzOworCQl1MzIgcmF0ZXM7CiAJCWlmICghbWVzaF9wbGlua19mcmVlX2NvdW50KHNkYXRhKSkgewogCQkJbXBsX2RiZygiTWVzaCBwbGluayBlcnJvcjogbm8gbW9yZSBmcmVlIHBsaW5rc1xuIik7CiAJCQlyY3VfcmVhZF91bmxvY2soKTsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tbG1lLmMgYi9uZXQvbWFjODAyMTEvbWxtZS5jCmluZGV4IDJiODkwYWYuLjg0MWI4NDUgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9tbG1lLmMKKysrIGIvbmV0L21hYzgwMjExL21sbWUuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBCU1MgY2xpZW50IG1vZGUgaW1wbGVtZW50YXRpb24KLSAqIENvcHlyaWdodCAyMDAzLCBKb3VuaSBNYWxpbmVuIDxqa21hbGluZUBjYy5odXQuZmk+CisgKiBDb3B5cmlnaHQgMjAwMy0yMDA4LCBKb3VuaSBNYWxpbmVuIDxqQHcxLmZpPgogICogQ29weXJpZ2h0IDIwMDQsIEluc3RhbnQ4MDIgTmV0d29ya3MsIEluYy4KICAqIENvcHlyaWdodCAyMDA1LCBEZXZpY2VzY2FwZSBTb2Z0d2FyZSwgSW5jLgogICogQ29weXJpZ2h0IDIwMDYtMjAwNwlKaXJpIEJlbmMgPGpiZW5jQHN1c2UuY3o+CkBAIC0xNSwxMSArMTUsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+Ci0jaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KLSNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgotI2luY2x1ZGUgPG5ldC9pd19oYW5kbGVyLmg+CiAjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CiAjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgogCkBAIC0zNSwxNSArMzIsNiBAQAogI2RlZmluZSBJRUVFODAyMTFfTU9OSVRPUklOR19JTlRFUlZBTCAoMiAqIEhaKQogI2RlZmluZSBJRUVFODAyMTFfUFJPQkVfSU5URVJWQUwgKDYwICogSFopCiAjZGVmaW5lIElFRUU4MDIxMV9SRVRSWV9BVVRIX0lOVEVSVkFMICgxICogSFopCi0jZGVmaW5lIElFRUU4MDIxMV9TQ0FOX0lOVEVSVkFMICgyICogSFopCi0jZGVmaW5lIElFRUU4MDIxMV9TQ0FOX0lOVEVSVkFMX1NMT1cgKDE1ICogSFopCi0jZGVmaW5lIElFRUU4MDIxMV9JQlNTX0pPSU5fVElNRU9VVCAoNyAqIEhaKQotCi0jZGVmaW5lIElFRUU4MDIxMV9JQlNTX01FUkdFX0lOVEVSVkFMICgzMCAqIEhaKQotI2RlZmluZSBJRUVFODAyMTFfSUJTU19JTkFDVElWSVRZX0xJTUlUICg2MCAqIEhaKQotCi0jZGVmaW5lIElFRUU4MDIxMV9JQlNTX01BWF9TVEFfRU5UUklFUyAxMjgKLQogCiAvKiB1dGlscyAqLwogc3RhdGljIGludCBlY3cyY3coaW50IGVjdykKQEAgLTU1LDEwICs0MywxMCBAQAogewogCXU4ICplbmQsICpwb3M7CiAKLQlwb3MgPSBic3MtPmllczsKKwlwb3MgPSBic3MtPmNic3MuaW5mb3JtYXRpb25fZWxlbWVudHM7CiAJaWYgKHBvcyA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKLQllbmQgPSBwb3MgKyBic3MtPmllc19sZW47CisJZW5kID0gcG9zICsgYnNzLT5jYnNzLmxlbl9pbmZvcm1hdGlvbl9lbGVtZW50czsKIAogCXdoaWxlIChwb3MgKyAxIDwgZW5kKSB7CiAJCWlmIChwb3MgKyAyICsgcG9zWzFdID4gZW5kKQpAQCAtNzMsNyArNjEsNyBAQAogCiBzdGF0aWMgaW50IGllZWU4MDIxMV9jb21wYXRpYmxlX3JhdGVzKHN0cnVjdCBpZWVlODAyMTFfYnNzICpic3MsCiAJCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQsCi0JCQkJICAgICAgdTY0ICpyYXRlcykKKwkJCQkgICAgICB1MzIgKnJhdGVzKQogewogCWludCBpLCBqLCBjb3VudDsKIAkqcmF0ZXMgPSAwOwpAQCAtOTIsMTYwICs4MCw0MCBAQAogCXJldHVybiBjb3VudDsKIH0KIAotLyogYWxzbyB1c2VkIGJ5IG1lc2ggY29kZSAqLwotdTY0IGllZWU4MDIxMV9zdGFfZ2V0X3JhdGVzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAotCQkJICAgIHN0cnVjdCBpZWVlODAyXzExX2VsZW1zICplbGVtcywKLQkJCSAgICBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7Ci0Jc3RydWN0IGllZWU4MDIxMV9yYXRlICpiaXRyYXRlczsKLQlzaXplX3QgbnVtX3JhdGVzOwotCXU2NCBzdXBwX3JhdGVzOwotCWludCBpLCBqOwotCXNiYW5kID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tiYW5kXTsKLQotCWlmICghc2JhbmQpIHsKLQkJV0FSTl9PTigxKTsKLQkJc2JhbmQgPSBsb2NhbC0+aHcud2lwaHktPmJhbmRzW2xvY2FsLT5ody5jb25mLmNoYW5uZWwtPmJhbmRdOwotCX0KLQotCWJpdHJhdGVzID0gc2JhbmQtPmJpdHJhdGVzOwotCW51bV9yYXRlcyA9IHNiYW5kLT5uX2JpdHJhdGVzOwotCXN1cHBfcmF0ZXMgPSAwOwotCWZvciAoaSA9IDA7IGkgPCBlbGVtcy0+c3VwcF9yYXRlc19sZW4gKwotCQkgICAgIGVsZW1zLT5leHRfc3VwcF9yYXRlc19sZW47IGkrKykgewotCQl1OCByYXRlID0gMDsKLQkJaW50IG93bl9yYXRlOwotCQlpZiAoaSA8IGVsZW1zLT5zdXBwX3JhdGVzX2xlbikKLQkJCXJhdGUgPSBlbGVtcy0+c3VwcF9yYXRlc1tpXTsKLQkJZWxzZSBpZiAoZWxlbXMtPmV4dF9zdXBwX3JhdGVzKQotCQkJcmF0ZSA9IGVsZW1zLT5leHRfc3VwcF9yYXRlcwotCQkJCVtpIC0gZWxlbXMtPnN1cHBfcmF0ZXNfbGVuXTsKLQkJb3duX3JhdGUgPSA1ICogKHJhdGUgJiAweDdmKTsKLQkJZm9yIChqID0gMDsgaiA8IG51bV9yYXRlczsgaisrKQotCQkJaWYgKGJpdHJhdGVzW2pdLmJpdHJhdGUgPT0gb3duX3JhdGUpCi0JCQkJc3VwcF9yYXRlcyB8PSBCSVQoaik7Ci0JfQotCXJldHVybiBzdXBwX3JhdGVzOwotfQotCiAvKiBmcmFtZSBzZW5kaW5nIGZ1bmN0aW9ucyAqLwogCi0vKiBhbHNvIHVzZWQgYnkgc2Nhbm5pbmcgY29kZSAqLwotdm9pZCBpZWVlODAyMTFfc2VuZF9wcm9iZV9yZXEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHU4ICpkc3QsCi0JCQkgICAgICB1OCAqc3NpZCwgc2l6ZV90IHNzaWRfbGVuKQorc3RhdGljIHZvaWQgYWRkX2V4dHJhX2llcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCAqaWVzLCBzaXplX3QgaWVzX2xlbikKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDsKLQl1OCAqcG9zLCAqc3VwcF9yYXRlcywgKmVzdXBwX3JhdGVzID0gTlVMTDsKLQlpbnQgaTsKLQotCXNrYiA9IGRldl9hbGxvY19za2IobG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tICsgc2l6ZW9mKCptZ210KSArIDIwMCk7Ci0JaWYgKCFza2IpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgYnVmZmVyIGZvciBwcm9iZSAiCi0JCSAgICAgICAicmVxdWVzdFxuIiwgc2RhdGEtPmRldi0+bmFtZSk7Ci0JCXJldHVybjsKLQl9Ci0Jc2tiX3Jlc2VydmUoc2tiLCBsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20pOwotCi0JbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiX3B1dChza2IsIDI0KTsKLQltZW1zZXQobWdtdCwgMCwgMjQpOwotCW1nbXQtPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfTUdNVCB8Ci0JCQkJCSAgSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFUSk7Ci0JbWVtY3B5KG1nbXQtPnNhLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwotCWlmIChkc3QpIHsKLQkJbWVtY3B5KG1nbXQtPmRhLCBkc3QsIEVUSF9BTEVOKTsKLQkJbWVtY3B5KG1nbXQtPmJzc2lkLCBkc3QsIEVUSF9BTEVOKTsKLQl9IGVsc2UgewotCQltZW1zZXQobWdtdC0+ZGEsIDB4ZmYsIEVUSF9BTEVOKTsKLQkJbWVtc2V0KG1nbXQtPmJzc2lkLCAweGZmLCBFVEhfQUxFTik7Ci0JfQotCXBvcyA9IHNrYl9wdXQoc2tiLCAyICsgc3NpZF9sZW4pOwotCSpwb3MrKyA9IFdMQU5fRUlEX1NTSUQ7Ci0JKnBvcysrID0gc3NpZF9sZW47Ci0JbWVtY3B5KHBvcywgc3NpZCwgc3NpZF9sZW4pOwotCi0Jc3VwcF9yYXRlcyA9IHNrYl9wdXQoc2tiLCAyKTsKLQlzdXBwX3JhdGVzWzBdID0gV0xBTl9FSURfU1VQUF9SQVRFUzsKLQlzdXBwX3JhdGVzWzFdID0gMDsKLQlzYmFuZCA9IGxvY2FsLT5ody53aXBoeS0+YmFuZHNbbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+YmFuZF07Ci0KLQlmb3IgKGkgPSAwOyBpIDwgc2JhbmQtPm5fYml0cmF0ZXM7IGkrKykgewotCQlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnJhdGUgPSAmc2JhbmQtPmJpdHJhdGVzW2ldOwotCQlpZiAoZXN1cHBfcmF0ZXMpIHsKLQkJCXBvcyA9IHNrYl9wdXQoc2tiLCAxKTsKLQkJCWVzdXBwX3JhdGVzWzFdKys7Ci0JCX0gZWxzZSBpZiAoc3VwcF9yYXRlc1sxXSA9PSA4KSB7Ci0JCQllc3VwcF9yYXRlcyA9IHNrYl9wdXQoc2tiLCAzKTsKLQkJCWVzdXBwX3JhdGVzWzBdID0gV0xBTl9FSURfRVhUX1NVUFBfUkFURVM7Ci0JCQllc3VwcF9yYXRlc1sxXSA9IDE7Ci0JCQlwb3MgPSAmZXN1cHBfcmF0ZXNbMl07Ci0JCX0gZWxzZSB7Ci0JCQlwb3MgPSBza2JfcHV0KHNrYiwgMSk7Ci0JCQlzdXBwX3JhdGVzWzFdKys7Ci0JCX0KLQkJKnBvcyA9IHJhdGUtPmJpdHJhdGUgLyA1OwotCX0KLQotCWllZWU4MDIxMV90eF9za2Ioc2RhdGEsIHNrYiwgMCk7CisJaWYgKGllcykKKwkJbWVtY3B5KHNrYl9wdXQoc2tiLCBpZXNfbGVuKSwgaWVzLCBpZXNfbGVuKTsKIH0KIAotc3RhdGljIHZvaWQgaWVlZTgwMjExX3NlbmRfYXV0aChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEsCi0JCQkJaW50IHRyYW5zYWN0aW9uLCB1OCAqZXh0cmEsIHNpemVfdCBleHRyYV9sZW4sCi0JCQkJaW50IGVuY3J5cHQpCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfc2VuZF9hc3NvYyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDsKLQotCXNrYiA9IGRldl9hbGxvY19za2IobG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tICsKLQkJCSAgICBzaXplb2YoKm1nbXQpICsgNiArIGV4dHJhX2xlbik7Ci0JaWYgKCFza2IpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgYnVmZmVyIGZvciBhdXRoICIKLQkJICAgICAgICJmcmFtZVxuIiwgc2RhdGEtPmRldi0+bmFtZSk7Ci0JCXJldHVybjsKLQl9Ci0Jc2tiX3Jlc2VydmUoc2tiLCBsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20pOwotCi0JbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiX3B1dChza2IsIDI0ICsgNik7Ci0JbWVtc2V0KG1nbXQsIDAsIDI0ICsgNik7Ci0JbWdtdC0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9NR01UIHwKLQkJCQkJICBJRUVFODAyMTFfU1RZUEVfQVVUSCk7Ci0JaWYgKGVuY3J5cHQpCi0JCW1nbXQtPmZyYW1lX2NvbnRyb2wgfD0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfUFJPVEVDVEVEKTsKLQltZW1jcHkobWdtdC0+ZGEsIGlmc3RhLT5ic3NpZCwgRVRIX0FMRU4pOwotCW1lbWNweShtZ210LT5zYSwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKLQltZW1jcHkobWdtdC0+YnNzaWQsIGlmc3RhLT5ic3NpZCwgRVRIX0FMRU4pOwotCW1nbXQtPnUuYXV0aC5hdXRoX2FsZyA9IGNwdV90b19sZTE2KGlmc3RhLT5hdXRoX2FsZyk7Ci0JbWdtdC0+dS5hdXRoLmF1dGhfdHJhbnNhY3Rpb24gPSBjcHVfdG9fbGUxNih0cmFuc2FjdGlvbik7Ci0JaWZzdGEtPmF1dGhfdHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlvbiArIDE7Ci0JbWdtdC0+dS5hdXRoLnN0YXR1c19jb2RlID0gY3B1X3RvX2xlMTYoMCk7Ci0JaWYgKGV4dHJhKQotCQltZW1jcHkoc2tiX3B1dChza2IsIGV4dHJhX2xlbiksIGV4dHJhLCBleHRyYV9sZW4pOwotCi0JaWVlZTgwMjExX3R4X3NrYihzZGF0YSwgc2tiLCBlbmNyeXB0KTsKLX0KLQotc3RhdGljIHZvaWQgaWVlZTgwMjExX3NlbmRfYXNzb2Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJIHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDsKLQl1OCAqcG9zLCAqaWVzLCAqaHRfaWU7CisJdTggKnBvcywgKmllcywgKmh0X2llLCAqZV9pZXM7CiAJaW50IGksIGxlbiwgY291bnQsIHJhdGVzX2xlbiwgc3VwcF9yYXRlc19sZW47CiAJdTE2IGNhcGFiOwogCXN0cnVjdCBpZWVlODAyMTFfYnNzICpic3M7CiAJaW50IHdtbSA9IDA7CiAJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7Ci0JdTY0IHJhdGVzID0gMDsKKwl1MzIgcmF0ZXMgPSAwOworCXNpemVfdCBlX2llc19sZW47CisKKwlpZiAoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX0lCU1NfUFJFVl9CU1NJRF9TRVQpIHsKKwkJZV9pZXMgPSBzZGF0YS0+dS5tZ2QuaWVfcmVhc3NvY3JlcTsKKwkJZV9pZXNfbGVuID0gc2RhdGEtPnUubWdkLmllX3JlYXNzb2NyZXFfbGVuOworCX0gZWxzZSB7CisJCWVfaWVzID0gc2RhdGEtPnUubWdkLmllX2Fzc29jcmVxOworCQllX2llc19sZW4gPSBzZGF0YS0+dS5tZ2QuaWVfYXNzb2NyZXFfbGVuOworCX0KIAogCXNrYiA9IGRldl9hbGxvY19za2IobG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tICsKLQkJCSAgICBzaXplb2YoKm1nbXQpICsgMjAwICsgaWZzdGEtPmV4dHJhX2llX2xlbiArCi0JCQkgICAgaWZzdGEtPnNzaWRfbGVuKTsKKwkJCSAgICBzaXplb2YoKm1nbXQpICsgMjAwICsgaWZtZ2QtPmV4dHJhX2llX2xlbiArCisJCQkgICAgaWZtZ2QtPnNzaWRfbGVuICsgZV9pZXNfbGVuKTsKIAlpZiAoIXNrYikgewogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBidWZmZXIgZm9yIGFzc29jICIKIAkJICAgICAgICJmcmFtZVxuIiwgc2RhdGEtPmRldi0+bmFtZSk7CkBAIC0yNTUsNyArMTIzLDcgQEAKIAogCXNiYW5kID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kXTsKIAotCWNhcGFiID0gaWZzdGEtPmNhcGFiOworCWNhcGFiID0gaWZtZ2QtPmNhcGFiOwogCiAJaWYgKGxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikgewogCQlpZiAoIShsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfMkdIWl9TSE9SVF9TTE9UX0lOQ0FQQUJMRSkpCkBAIC0yNjQsMTEgKzEzMiwxMSBAQAogCQkJY2FwYWIgfD0gV0xBTl9DQVBBQklMSVRZX1NIT1JUX1BSRUFNQkxFOwogCX0KIAotCWJzcyA9IGllZWU4MDIxMV9yeF9ic3NfZ2V0KGxvY2FsLCBpZnN0YS0+YnNzaWQsCisJYnNzID0gaWVlZTgwMjExX3J4X2Jzc19nZXQobG9jYWwsIGlmbWdkLT5ic3NpZCwKIAkJCQkgICBsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5jZW50ZXJfZnJlcSwKLQkJCQkgICBpZnN0YS0+c3NpZCwgaWZzdGEtPnNzaWRfbGVuKTsKKwkJCQkgICBpZm1nZC0+c3NpZCwgaWZtZ2QtPnNzaWRfbGVuKTsKIAlpZiAoYnNzKSB7Ci0JCWlmIChic3MtPmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWSkKKwkJaWYgKGJzcy0+Y2Jzcy5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1kpCiAJCQljYXBhYiB8PSBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWTsKIAkJaWYgKGJzcy0+d21tX3VzZWQpCiAJCQl3bW0gPSAxOwpAQCAtMjc5LDcgKzE0Nyw3IEBACiAJCSAqIGItb25seSBtb2RlKSAqLwogCQlyYXRlc19sZW4gPSBpZWVlODAyMTFfY29tcGF0aWJsZV9yYXRlcyhic3MsIHNiYW5kLCAmcmF0ZXMpOwogCi0JCWlmICgoYnNzLT5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX1NQRUNUUlVNX01HTVQpICYmCisJCWlmICgoYnNzLT5jYnNzLmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfU1BFQ1RSVU1fTUdNVCkgJiYKIAkJICAgIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfU1BFQ1RSVU1fTUdNVCkpCiAJCQljYXBhYiB8PSBXTEFOX0NBUEFCSUxJVFlfU1BFQ1RSVU1fTUdNVDsKIApAQCAtMjkxLDE4ICsxNTksMTggQEAKIAogCW1nbXQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopIHNrYl9wdXQoc2tiLCAyNCk7CiAJbWVtc2V0KG1nbXQsIDAsIDI0KTsKLQltZW1jcHkobWdtdC0+ZGEsIGlmc3RhLT5ic3NpZCwgRVRIX0FMRU4pOworCW1lbWNweShtZ210LT5kYSwgaWZtZ2QtPmJzc2lkLCBFVEhfQUxFTik7CiAJbWVtY3B5KG1nbXQtPnNhLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwotCW1lbWNweShtZ210LT5ic3NpZCwgaWZzdGEtPmJzc2lkLCBFVEhfQUxFTik7CisJbWVtY3B5KG1nbXQtPmJzc2lkLCBpZm1nZC0+YnNzaWQsIEVUSF9BTEVOKTsKIAotCWlmIChpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1BSRVZfQlNTSURfU0VUKSB7CisJaWYgKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfUFJFVl9CU1NJRF9TRVQpIHsKIAkJc2tiX3B1dChza2IsIDEwKTsKIAkJbWdtdC0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9NR01UIHwKIAkJCQkJCSAgSUVFRTgwMjExX1NUWVBFX1JFQVNTT0NfUkVRKTsKIAkJbWdtdC0+dS5yZWFzc29jX3JlcS5jYXBhYl9pbmZvID0gY3B1X3RvX2xlMTYoY2FwYWIpOwogCQltZ210LT51LnJlYXNzb2NfcmVxLmxpc3Rlbl9pbnRlcnZhbCA9CiAJCQkJY3B1X3RvX2xlMTYobG9jYWwtPmh3LmNvbmYubGlzdGVuX2ludGVydmFsKTsKLQkJbWVtY3B5KG1nbXQtPnUucmVhc3NvY19yZXEuY3VycmVudF9hcCwgaWZzdGEtPnByZXZfYnNzaWQsCisJCW1lbWNweShtZ210LT51LnJlYXNzb2NfcmVxLmN1cnJlbnRfYXAsIGlmbWdkLT5wcmV2X2Jzc2lkLAogCQkgICAgICAgRVRIX0FMRU4pOwogCX0gZWxzZSB7CiAJCXNrYl9wdXQoc2tiLCA0KTsKQEAgLTMxNCwxMCArMTgyLDEwIEBACiAJfQogCiAJLyogU1NJRCAqLwotCWllcyA9IHBvcyA9IHNrYl9wdXQoc2tiLCAyICsgaWZzdGEtPnNzaWRfbGVuKTsKKwlpZXMgPSBwb3MgPSBza2JfcHV0KHNrYiwgMiArIGlmbWdkLT5zc2lkX2xlbik7CiAJKnBvcysrID0gV0xBTl9FSURfU1NJRDsKLQkqcG9zKysgPSBpZnN0YS0+c3NpZF9sZW47Ci0JbWVtY3B5KHBvcywgaWZzdGEtPnNzaWQsIGlmc3RhLT5zc2lkX2xlbik7CisJKnBvcysrID0gaWZtZ2QtPnNzaWRfbGVuOworCW1lbWNweShwb3MsIGlmbWdkLT5zc2lkLCBpZm1nZC0+c3NpZF9sZW4pOwogCiAJLyogYWRkIGFsbCByYXRlcyB3aGljaCB3ZXJlIG1hcmtlZCB0byBiZSB1c2VkIGFib3ZlICovCiAJc3VwcF9yYXRlc19sZW4gPSByYXRlc19sZW47CkBAIC0zNzIsMTIgKzI0MCwxMiBAQAogCQl9CiAJfQogCi0JaWYgKGlmc3RhLT5leHRyYV9pZSkgewotCQlwb3MgPSBza2JfcHV0KHNrYiwgaWZzdGEtPmV4dHJhX2llX2xlbik7Ci0JCW1lbWNweShwb3MsIGlmc3RhLT5leHRyYV9pZSwgaWZzdGEtPmV4dHJhX2llX2xlbik7CisJaWYgKGlmbWdkLT5leHRyYV9pZSkgeworCQlwb3MgPSBza2JfcHV0KHNrYiwgaWZtZ2QtPmV4dHJhX2llX2xlbik7CisJCW1lbWNweShwb3MsIGlmbWdkLT5leHRyYV9pZSwgaWZtZ2QtPmV4dHJhX2llX2xlbik7CiAJfQogCi0JaWYgKHdtbSAmJiAoaWZzdGEtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9XTU1fRU5BQkxFRCkpIHsKKwlpZiAod21tICYmIChpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1dNTV9FTkFCTEVEKSkgewogCQlwb3MgPSBza2JfcHV0KHNrYiwgOSk7CiAJCSpwb3MrKyA9IFdMQU5fRUlEX1ZFTkRPUl9TUEVDSUZJQzsKIAkJKnBvcysrID0gNzsgLyogbGVuICovCkBAIC0zOTEsMTAgKzI1OSwxNyBAQAogCX0KIAogCS8qIHdtbSBzdXBwb3J0IGlzIGEgbXVzdCB0byBIVCAqLwotCWlmICh3bW0gJiYgKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfV01NX0VOQUJMRUQpICYmCisJLyoKKwkgKiBJRUVFODAyLjExbiBkb2VzIG5vdCBhbGxvdyBUS0lQL1dFUCBhcyBwYWlyd2lzZQorCSAqIGNpcGhlcnMgaW4gSFQgbW9kZS4gV2Ugc3RpbGwgYXNzb2NpYXRlIGluIG5vbi1odAorCSAqIG1vZGUgKDExYS9iL2cpIGlmIGFueSBvbmUgb2YgdGhlc2UgY2lwaGVycyBpcworCSAqIGNvbmZpZ3VyZWQgYXMgcGFpcndpc2UuCisJICovCisJaWYgKHdtbSAmJiAoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9XTU1fRU5BQkxFRCkgJiYKIAkgICAgc2JhbmQtPmh0X2NhcC5odF9zdXBwb3J0ZWQgJiYKIAkgICAgKGh0X2llID0gaWVlZTgwMjExX2Jzc19nZXRfaWUoYnNzLCBXTEFOX0VJRF9IVF9JTkZPUk1BVElPTikpICYmCi0JICAgIGh0X2llWzFdID49IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2h0X2luZm8pKSB7CisJICAgIGh0X2llWzFdID49IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2h0X2luZm8pICYmCisJICAgICghKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfVEtJUF9XRVBfVVNFRCkpKSB7CiAJCXN0cnVjdCBpZWVlODAyMTFfaHRfaW5mbyAqaHRfaW5mbyA9CiAJCQkoc3RydWN0IGllZWU4MDIxMV9odF9pbmZvICopKGh0X2llICsgMik7CiAJCXUxNiBjYXAgPSBzYmFuZC0+aHRfY2FwLmNhcDsKQEAgLTQyOSwxMSArMzA0LDEzIEBACiAJCW1lbWNweShwb3MsICZzYmFuZC0+aHRfY2FwLm1jcywgc2l6ZW9mKHNiYW5kLT5odF9jYXAubWNzKSk7CiAJfQogCi0Ja2ZyZWUoaWZzdGEtPmFzc29jcmVxX2llcyk7Ci0JaWZzdGEtPmFzc29jcmVxX2llc19sZW4gPSAoc2tiLT5kYXRhICsgc2tiLT5sZW4pIC0gaWVzOwotCWlmc3RhLT5hc3NvY3JlcV9pZXMgPSBrbWFsbG9jKGlmc3RhLT5hc3NvY3JlcV9pZXNfbGVuLCBHRlBfS0VSTkVMKTsKLQlpZiAoaWZzdGEtPmFzc29jcmVxX2llcykKLQkJbWVtY3B5KGlmc3RhLT5hc3NvY3JlcV9pZXMsIGllcywgaWZzdGEtPmFzc29jcmVxX2llc19sZW4pOworCWFkZF9leHRyYV9pZXMoc2tiLCBlX2llcywgZV9pZXNfbGVuKTsKKworCWtmcmVlKGlmbWdkLT5hc3NvY3JlcV9pZXMpOworCWlmbWdkLT5hc3NvY3JlcV9pZXNfbGVuID0gKHNrYi0+ZGF0YSArIHNrYi0+bGVuKSAtIGllczsKKwlpZm1nZC0+YXNzb2NyZXFfaWVzID0ga21hbGxvYyhpZm1nZC0+YXNzb2NyZXFfaWVzX2xlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKGlmbWdkLT5hc3NvY3JlcV9pZXMpCisJCW1lbWNweShpZm1nZC0+YXNzb2NyZXFfaWVzLCBpZXMsIGlmbWdkLT5hc3NvY3JlcV9pZXNfbGVuKTsKIAogCWllZWU4MDIxMV90eF9za2Ioc2RhdGEsIHNrYiwgMCk7CiB9CkBAIC00NDMsMTEgKzMyMCwyMiBAQAogCQkJCQkgICB1MTYgc3R5cGUsIHUxNiByZWFzb24pCiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhID0gJnNkYXRhLT51LnN0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDsKKwl1OCAqaWVzOworCXNpemVfdCBpZXNfbGVuOwogCi0Jc2tiID0gZGV2X2FsbG9jX3NrYihsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20gKyBzaXplb2YoKm1nbXQpKTsKKwlpZiAoc3R5cGUgPT0gSUVFRTgwMjExX1NUWVBFX0RFQVVUSCkgeworCQlpZXMgPSBzZGF0YS0+dS5tZ2QuaWVfZGVhdXRoOworCQlpZXNfbGVuID0gc2RhdGEtPnUubWdkLmllX2RlYXV0aF9sZW47CisJfSBlbHNlIHsKKwkJaWVzID0gc2RhdGEtPnUubWdkLmllX2Rpc2Fzc29jOworCQlpZXNfbGVuID0gc2RhdGEtPnUubWdkLmllX2Rpc2Fzc29jX2xlbjsKKwl9CisKKwlza2IgPSBkZXZfYWxsb2Nfc2tiKGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSArIHNpemVvZigqbWdtdCkgKworCQkJICAgIGllc19sZW4pOwogCWlmICghc2tiKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlciBmb3IgIgogCQkgICAgICAgImRlYXV0aC9kaXNhc3NvYyBmcmFtZVxuIiwgc2RhdGEtPmRldi0+bmFtZSk7CkBAIC00NTcsNDAgKzM0NSw1MyBAQAogCiAJbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiX3B1dChza2IsIDI0KTsKIAltZW1zZXQobWdtdCwgMCwgMjQpOwotCW1lbWNweShtZ210LT5kYSwgaWZzdGEtPmJzc2lkLCBFVEhfQUxFTik7CisJbWVtY3B5KG1nbXQtPmRhLCBpZm1nZC0+YnNzaWQsIEVUSF9BTEVOKTsKIAltZW1jcHkobWdtdC0+c2EsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7Ci0JbWVtY3B5KG1nbXQtPmJzc2lkLCBpZnN0YS0+YnNzaWQsIEVUSF9BTEVOKTsKKwltZW1jcHkobWdtdC0+YnNzaWQsIGlmbWdkLT5ic3NpZCwgRVRIX0FMRU4pOwogCW1nbXQtPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfTUdNVCB8IHN0eXBlKTsKIAlza2JfcHV0KHNrYiwgMik7CiAJLyogdS5kZWF1dGgucmVhc29uX2NvZGUgPT0gdS5kaXNhc3NvYy5yZWFzb25fY29kZSAqLwogCW1nbXQtPnUuZGVhdXRoLnJlYXNvbl9jb2RlID0gY3B1X3RvX2xlMTYocmVhc29uKTsKIAorCWFkZF9leHRyYV9pZXMoc2tiLCBpZXMsIGllc19sZW4pOworCisJaWVlZTgwMjExX3R4X3NrYihzZGF0YSwgc2tiLCBpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX01GUF9FTkFCTEVEKTsKK30KKwordm9pZCBpZWVlODAyMTFfc2VuZF9wc3BvbGwoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3BzcG9sbCAqcHNwb2xsOworCXN0cnVjdCBza19idWZmICpza2I7CisJdTE2IGZjOworCisJc2tiID0gZGV2X2FsbG9jX3NrYihsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20gKyBzaXplb2YoKnBzcG9sbCkpOworCWlmICghc2tiKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlciBmb3IgIgorCQkgICAgICAgInBzcG9sbCBmcmFtZVxuIiwgc2RhdGEtPmRldi0+bmFtZSk7CisJCXJldHVybjsKKwl9CisJc2tiX3Jlc2VydmUoc2tiLCBsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20pOworCisJcHNwb2xsID0gKHN0cnVjdCBpZWVlODAyMTFfcHNwb2xsICopIHNrYl9wdXQoc2tiLCBzaXplb2YoKnBzcG9sbCkpOworCW1lbXNldChwc3BvbGwsIDAsIHNpemVvZigqcHNwb2xsKSk7CisJZmMgPSBJRUVFODAyMTFfRlRZUEVfQ1RMIHwgSUVFRTgwMjExX1NUWVBFX1BTUE9MTCB8IElFRUU4MDIxMV9GQ1RMX1BNOworCXBzcG9sbC0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KGZjKTsKKwlwc3BvbGwtPmFpZCA9IGNwdV90b19sZTE2KGlmbWdkLT5haWQpOworCisJLyogYWlkIGluIFBTLVBvbGwgaGFzIGl0cyB0d28gTVNCcyBlYWNoIHNldCB0byAxICovCisJcHNwb2xsLT5haWQgfD0gY3B1X3RvX2xlMTYoMSA8PCAxNSB8IDEgPDwgMTQpOworCisJbWVtY3B5KHBzcG9sbC0+YnNzaWQsIGlmbWdkLT5ic3NpZCwgRVRIX0FMRU4pOworCW1lbWNweShwc3BvbGwtPnRhLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCiAJaWVlZTgwMjExX3R4X3NrYihzZGF0YSwgc2tiLCAwKTsKIH0KIAogLyogTUxNRSAqLwotc3RhdGljIHZvaWQgaWVlZTgwMjExX3N0YV9kZWZfd21tX3BhcmFtcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkJIHN0cnVjdCBpZWVlODAyMTFfYnNzICpic3MpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7Ci0JaW50IGksIGhhdmVfaGlnaGVyX3RoYW5fMTFtYml0ID0gMDsKLQotCS8qIGNmLiBJRUVFIDgwMi4xMSA5LjIuMTIgKi8KLQlmb3IgKGkgPSAwOyBpIDwgYnNzLT5zdXBwX3JhdGVzX2xlbjsgaSsrKQotCQlpZiAoKGJzcy0+c3VwcF9yYXRlc1tpXSAmIDB4N2YpICogNSA+IDExMCkKLQkJCWhhdmVfaGlnaGVyX3RoYW5fMTFtYml0ID0gMTsKLQotCWlmIChsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFogJiYKLQkgICAgaGF2ZV9oaWdoZXJfdGhhbl8xMW1iaXQpCi0JCXNkYXRhLT5mbGFncyB8PSBJRUVFODAyMTFfU0RBVEFfT1BFUkFUSU5HX0dNT0RFOwotCWVsc2UKLQkJc2RhdGEtPmZsYWdzICY9IH5JRUVFODAyMTFfU0RBVEFfT1BFUkFUSU5HX0dNT0RFOwotCi0JaWVlZTgwMjExX3NldF93bW1fZGVmYXVsdChzZGF0YSk7Ci19Ci0KIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9zdGFfd21tX3BhcmFtcyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKLQkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSwKKwkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QsCiAJCQkJICAgICB1OCAqd21tX3BhcmFtLCBzaXplX3Qgd21tX3BhcmFtX2xlbikKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3BhcmFtcyBwYXJhbXM7CkBAIC00OTgsNyArMzk5LDcgQEAKIAlpbnQgY291bnQ7CiAJdTggKnBvczsKIAotCWlmICghKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfV01NX0VOQUJMRUQpKQorCWlmICghKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfV01NX0VOQUJMRUQpKQogCQlyZXR1cm47CiAKIAlpZiAoIXdtbV9wYXJhbSkKQEAgLTUwNywxOCArNDA4LDE1IEBACiAJaWYgKHdtbV9wYXJhbV9sZW4gPCA4IHx8IHdtbV9wYXJhbVs1XSAvKiB2ZXJzaW9uICovICE9IDEpCiAJCXJldHVybjsKIAljb3VudCA9IHdtbV9wYXJhbVs2XSAmIDB4MGY7Ci0JaWYgKGNvdW50ID09IGlmc3RhLT53bW1fbGFzdF9wYXJhbV9zZXQpCisJaWYgKGNvdW50ID09IGlmbWdkLT53bW1fbGFzdF9wYXJhbV9zZXQpCiAJCXJldHVybjsKLQlpZnN0YS0+d21tX2xhc3RfcGFyYW1fc2V0ID0gY291bnQ7CisJaWZtZ2QtPndtbV9sYXN0X3BhcmFtX3NldCA9IGNvdW50OwogCiAJcG9zID0gd21tX3BhcmFtICsgODsKIAlsZWZ0ID0gd21tX3BhcmFtX2xlbiAtIDg7CiAKIAltZW1zZXQoJnBhcmFtcywgMCwgc2l6ZW9mKHBhcmFtcykpOwogCi0JaWYgKCFsb2NhbC0+b3BzLT5jb25mX3R4KQotCQlyZXR1cm47Ci0KIAlsb2NhbC0+d21tX2FjbSA9IDA7CiAJZm9yICg7IGxlZnQgPj0gNDsgbGVmdCAtPSA0LCBwb3MgKz0gNCkgewogCQlpbnQgYWNpID0gKHBvc1swXSA+PiA1KSAmIDB4MDM7CkBAIC01MjYsMjYgKzQyNCwyNiBAQAogCQlpbnQgcXVldWU7CiAKIAkJc3dpdGNoIChhY2kpIHsKLQkJY2FzZSAxOgorCQljYXNlIDE6IC8qIEFDX0JLICovCiAJCQlxdWV1ZSA9IDM7CiAJCQlpZiAoYWNtKQotCQkJCWxvY2FsLT53bW1fYWNtIHw9IEJJVCgwKSB8IEJJVCgzKTsKKwkJCQlsb2NhbC0+d21tX2FjbSB8PSBCSVQoMSkgfCBCSVQoMik7IC8qIEJLLy0gKi8KIAkJCWJyZWFrOwotCQljYXNlIDI6CisJCWNhc2UgMjogLyogQUNfVkkgKi8KIAkJCXF1ZXVlID0gMTsKIAkJCWlmIChhY20pCi0JCQkJbG9jYWwtPndtbV9hY20gfD0gQklUKDQpIHwgQklUKDUpOworCQkJCWxvY2FsLT53bW1fYWNtIHw9IEJJVCg0KSB8IEJJVCg1KTsgLyogQ0wvVkkgKi8KIAkJCWJyZWFrOwotCQljYXNlIDM6CisJCWNhc2UgMzogLyogQUNfVk8gKi8KIAkJCXF1ZXVlID0gMDsKIAkJCWlmIChhY20pCi0JCQkJbG9jYWwtPndtbV9hY20gfD0gQklUKDYpIHwgQklUKDcpOworCQkJCWxvY2FsLT53bW1fYWNtIHw9IEJJVCg2KSB8IEJJVCg3KTsgLyogVk8vTkMgKi8KIAkJCWJyZWFrOwotCQljYXNlIDA6CisJCWNhc2UgMDogLyogQUNfQkUgKi8KIAkJZGVmYXVsdDoKIAkJCXF1ZXVlID0gMjsKIAkJCWlmIChhY20pCi0JCQkJbG9jYWwtPndtbV9hY20gfD0gQklUKDEpIHwgQklUKDIpOworCQkJCWxvY2FsLT53bW1fYWNtIHw9IEJJVCgwKSB8IEJJVCgzKTsgLyogQkUvRUUgKi8KIAkJCWJyZWFrOwogCQl9CiAKQEAgLTU1OSwyMSArNDU3LDQxIEBACiAJCSAgICAgICBsb2NhbC0+bWRldi0+bmFtZSwgcXVldWUsIGFjaSwgYWNtLCBwYXJhbXMuYWlmcywgcGFyYW1zLmN3X21pbiwKIAkJICAgICAgIHBhcmFtcy5jd19tYXgsIHBhcmFtcy50eG9wKTsKICNlbmRpZgotCQkvKiBUT0RPOiBoYW5kbGUgQUNNIChibG9jayBUWCwgZmFsbGJhY2sgdG8gbmV4dCBsb3dlc3QgYWxsb3dlZAotCQkgKiBBQyBmb3Igbm93KSAqLwotCQlpZiAobG9jYWwtPm9wcy0+Y29uZl90eChsb2NhbF90b19odyhsb2NhbCksIHF1ZXVlLCAmcGFyYW1zKSkgeworCQlpZiAobG9jYWwtPm9wcy0+Y29uZl90eCAmJgorCQkgICAgbG9jYWwtPm9wcy0+Y29uZl90eChsb2NhbF90b19odyhsb2NhbCksIHF1ZXVlLCAmcGFyYW1zKSkgewogCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBmYWlsZWQgdG8gc2V0IFRYIHF1ZXVlICIKIAkJCSAgICAgICAicGFyYW1ldGVycyBmb3IgcXVldWUgJWRcbiIsIGxvY2FsLT5tZGV2LT5uYW1lLCBxdWV1ZSk7CiAJCX0KIAl9CiB9CiAKK3N0YXRpYyBib29sIGllZWU4MDIxMV9jaGVja190aW0oc3RydWN0IGllZWU4MDJfMTFfZWxlbXMgKmVsZW1zLCB1MTYgYWlkKQoreworCXU4IG1hc2s7CisJdTggaW5kZXgsIGluZGV4bjEsIGluZGV4bjI7CisJc3RydWN0IGllZWU4MDIxMV90aW1faWUgKnRpbSA9IChzdHJ1Y3QgaWVlZTgwMjExX3RpbV9pZSAqKSBlbGVtcy0+dGltOworCisJYWlkICY9IDB4M2ZmZjsKKwlpbmRleCA9IGFpZCAvIDg7CisJbWFzayAgPSAxIDw8IChhaWQgJiA3KTsKKworCWluZGV4bjEgPSB0aW0tPmJpdG1hcF9jdHJsICYgMHhmZTsKKwlpbmRleG4yID0gZWxlbXMtPnRpbV9sZW4gKyBpbmRleG4xIC0gNDsKKworCWlmIChpbmRleCA8IGluZGV4bjEgfHwgaW5kZXggPiBpbmRleG4yKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpbmRleCAtPSBpbmRleG4xOworCisJcmV0dXJuICEhKHRpbS0+dmlydHVhbF9tYXBbaW5kZXhdICYgbWFzayk7Cit9CisKIHN0YXRpYyB1MzIgaWVlZTgwMjExX2hhbmRsZV9ic3NfY2FwYWJpbGl0eShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJCQkJICAgdTE2IGNhcGFiLCBib29sIGVycF92YWxpZCwgdTggZXJwKQogewogCXN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmJzc19jb25mID0gJnNkYXRhLT52aWYuYnNzX2NvbmY7CiAjaWZkZWYgQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfREVCVUcKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEgPSAmc2RhdGEtPnUuc3RhOworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwogI2VuZGlmCiAJdTMyIGNoYW5nZWQgPSAwOwogCWJvb2wgdXNlX3Byb3RlY3Rpb247CkBAIC01OTYsNyArNTE0LDcgQEAKIAkJCXByaW50ayhLRVJOX0RFQlVHICIlczogQ1RTIHByb3RlY3Rpb24gJXMgKEJTU0lEPSVwTSlcbiIsCiAJCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwKIAkJCSAgICAgICB1c2VfcHJvdGVjdGlvbiA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIsCi0JCQkgICAgICAgaWZzdGEtPmJzc2lkKTsKKwkJCSAgICAgICBpZm1nZC0+YnNzaWQpOwogCQl9CiAjZW5kaWYKIAkJYnNzX2NvbmYtPnVzZV9jdHNfcHJvdCA9IHVzZV9wcm90ZWN0aW9uOwpAQCAtNjEwLDcgKzUyOCw3IEBACiAJCQkgICAgICAgIiAoQlNTSUQ9JXBNKVxuIiwKIAkJCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLAogCQkJICAgICAgIHVzZV9zaG9ydF9wcmVhbWJsZSA/ICJzaG9ydCIgOiAibG9uZyIsCi0JCQkgICAgICAgaWZzdGEtPmJzc2lkKTsKKwkJCSAgICAgICBpZm1nZC0+YnNzaWQpOwogCQl9CiAjZW5kaWYKIAkJYnNzX2NvbmYtPnVzZV9zaG9ydF9wcmVhbWJsZSA9IHVzZV9zaG9ydF9wcmVhbWJsZTsKQEAgLTYyNCw3ICs1NDIsNyBAQAogCQkJICAgICAgICIgKEJTU0lEPSVwTSlcbiIsCiAJCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwKIAkJCSAgICAgICB1c2Vfc2hvcnRfc2xvdCA/ICJzaG9ydCIgOiAibG9uZyIsCi0JCQkgICAgICAgaWZzdGEtPmJzc2lkKTsKKwkJCSAgICAgICBpZm1nZC0+YnNzaWQpOwogCQl9CiAjZW5kaWYKIAkJYnNzX2NvbmYtPnVzZV9zaG9ydF9zbG90ID0gdXNlX3Nob3J0X3Nsb3Q7CkBAIC02MzQsNTcgKzU1Miw1NyBAQAogCXJldHVybiBjaGFuZ2VkOwogfQogCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfc3RhX3NlbmRfYXBpbmZvKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEpCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfc3RhX3NlbmRfYXBpbmZvKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQogewogCXVuaW9uIGl3cmVxX2RhdGEgd3JxdTsKKwogCW1lbXNldCgmd3JxdSwgMCwgc2l6ZW9mKHdycXUpKTsKLQlpZiAoaWZzdGEtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9BU1NPQ0lBVEVEKQotCQltZW1jcHkod3JxdS5hcF9hZGRyLnNhX2RhdGEsIHNkYXRhLT51LnN0YS5ic3NpZCwgRVRIX0FMRU4pOworCWlmIChzZGF0YS0+dS5tZ2QuZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FTU09DSUFURUQpCisJCW1lbWNweSh3cnF1LmFwX2FkZHIuc2FfZGF0YSwgc2RhdGEtPnUubWdkLmJzc2lkLCBFVEhfQUxFTik7CiAJd3JxdS5hcF9hZGRyLnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKIAl3aXJlbGVzc19zZW5kX2V2ZW50KHNkYXRhLT5kZXYsIFNJT0NHSVdBUCwgJndycXUsIE5VTEwpOwogfQogCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfc3RhX3NlbmRfYXNzb2NpbmZvKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCQkgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhKQorc3RhdGljIHZvaWQgaWVlZTgwMjExX3N0YV9zZW5kX2Fzc29jaW5mbyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAljaGFyICpidWY7CiAJc2l6ZV90IGxlbjsKIAlpbnQgaTsKIAl1bmlvbiBpd3JlcV9kYXRhIHdycXU7CiAKLQlpZiAoIWlmc3RhLT5hc3NvY3JlcV9pZXMgJiYgIWlmc3RhLT5hc3NvY3Jlc3BfaWVzKQorCWlmICghaWZtZ2QtPmFzc29jcmVxX2llcyAmJiAhaWZtZ2QtPmFzc29jcmVzcF9pZXMpCiAJCXJldHVybjsKIAotCWJ1ZiA9IGttYWxsb2MoNTAgKyAyICogKGlmc3RhLT5hc3NvY3JlcV9pZXNfbGVuICsKLQkJCQlpZnN0YS0+YXNzb2NyZXNwX2llc19sZW4pLCBHRlBfS0VSTkVMKTsKKwlidWYgPSBrbWFsbG9jKDUwICsgMiAqIChpZm1nZC0+YXNzb2NyZXFfaWVzX2xlbiArCisJCQkJaWZtZ2QtPmFzc29jcmVzcF9pZXNfbGVuKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFidWYpCiAJCXJldHVybjsKIAogCWxlbiA9IHNwcmludGYoYnVmLCAiQVNTT0NJTkZPKCIpOwotCWlmIChpZnN0YS0+YXNzb2NyZXFfaWVzKSB7CisJaWYgKGlmbWdkLT5hc3NvY3JlcV9pZXMpIHsKIAkJbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAiUmVxSUVzPSIpOwotCQlmb3IgKGkgPSAwOyBpIDwgaWZzdGEtPmFzc29jcmVxX2llc19sZW47IGkrKykgeworCQlmb3IgKGkgPSAwOyBpIDwgaWZtZ2QtPmFzc29jcmVxX2llc19sZW47IGkrKykgewogCQkJbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAiJTAyeCIsCi0JCQkJICAgICAgIGlmc3RhLT5hc3NvY3JlcV9pZXNbaV0pOworCQkJCSAgICAgICBpZm1nZC0+YXNzb2NyZXFfaWVzW2ldKTsKIAkJfQogCX0KLQlpZiAoaWZzdGEtPmFzc29jcmVzcF9pZXMpIHsKLQkJaWYgKGlmc3RhLT5hc3NvY3JlcV9pZXMpCisJaWYgKGlmbWdkLT5hc3NvY3Jlc3BfaWVzKSB7CisJCWlmIChpZm1nZC0+YXNzb2NyZXFfaWVzKQogCQkJbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAiICIpOwogCQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICJSZXNwSUVzPSIpOwotCQlmb3IgKGkgPSAwOyBpIDwgaWZzdGEtPmFzc29jcmVzcF9pZXNfbGVuOyBpKyspIHsKKwkJZm9yIChpID0gMDsgaSA8IGlmbWdkLT5hc3NvY3Jlc3BfaWVzX2xlbjsgaSsrKSB7CiAJCQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICIlMDJ4IiwKLQkJCQkgICAgICAgaWZzdGEtPmFzc29jcmVzcF9pZXNbaV0pOworCQkJCSAgICAgICBpZm1nZC0+YXNzb2NyZXNwX2llc1tpXSk7CiAJCX0KIAl9CiAJbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAiKSIpOwogCiAJaWYgKGxlbiA+IElXX0NVU1RPTV9NQVgpIHsKIAkJbGVuID0gc3ByaW50ZihidWYsICJBU1NPQ1JFU1BJRT0iKTsKLQkJZm9yIChpID0gMDsgaSA8IGlmc3RhLT5hc3NvY3Jlc3BfaWVzX2xlbjsgaSsrKSB7CisJCWZvciAoaSA9IDA7IGkgPCBpZm1nZC0+YXNzb2NyZXNwX2llc19sZW47IGkrKykgewogCQkJbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAiJTAyeCIsCi0JCQkJICAgICAgIGlmc3RhLT5hc3NvY3Jlc3BfaWVzW2ldKTsKKwkJCQkgICAgICAgaWZtZ2QtPmFzc29jcmVzcF9pZXNbaV0pOwogCQl9CiAJfQogCkBAIC02OTksNDAgKzYxNywzNyBAQAogCiAKIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9zZXRfYXNzb2NpYXRlZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSwKIAkJCQkgICAgIHUzMiBic3NfaW5mb19jaGFuZ2VkKQogeworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwogCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9ICZsb2NhbF90b19odyhsb2NhbCktPmNvbmY7CiAKIAlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzOwogCiAJYnNzX2luZm9fY2hhbmdlZCB8PSBCU1NfQ0hBTkdFRF9BU1NPQzsKLQlpZnN0YS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9BU1NPQ0lBVEVEOworCWlmbWdkLT5mbGFncyB8PSBJRUVFODAyMTFfU1RBX0FTU09DSUFURUQ7CiAKLQlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCi0JCXJldHVybjsKLQotCWJzcyA9IGllZWU4MDIxMV9yeF9ic3NfZ2V0KGxvY2FsLCBpZnN0YS0+YnNzaWQsCisJYnNzID0gaWVlZTgwMjExX3J4X2Jzc19nZXQobG9jYWwsIGlmbWdkLT5ic3NpZCwKIAkJCQkgICBjb25mLT5jaGFubmVsLT5jZW50ZXJfZnJlcSwKLQkJCQkgICBpZnN0YS0+c3NpZCwgaWZzdGEtPnNzaWRfbGVuKTsKKwkJCQkgICBpZm1nZC0+c3NpZCwgaWZtZ2QtPnNzaWRfbGVuKTsKIAlpZiAoYnNzKSB7CiAJCS8qIHNldCB0aW1pbmcgaW5mb3JtYXRpb24gKi8KLQkJc2RhdGEtPnZpZi5ic3NfY29uZi5iZWFjb25faW50ID0gYnNzLT5iZWFjb25faW50OwotCQlzZGF0YS0+dmlmLmJzc19jb25mLnRpbWVzdGFtcCA9IGJzcy0+dGltZXN0YW1wOworCQlzZGF0YS0+dmlmLmJzc19jb25mLmJlYWNvbl9pbnQgPSBic3MtPmNic3MuYmVhY29uX2ludGVydmFsOworCQlzZGF0YS0+dmlmLmJzc19jb25mLnRpbWVzdGFtcCA9IGJzcy0+Y2Jzcy50c2Y7CiAJCXNkYXRhLT52aWYuYnNzX2NvbmYuZHRpbV9wZXJpb2QgPSBic3MtPmR0aW1fcGVyaW9kOwogCiAJCWJzc19pbmZvX2NoYW5nZWQgfD0gaWVlZTgwMjExX2hhbmRsZV9ic3NfY2FwYWJpbGl0eShzZGF0YSwKLQkJCWJzcy0+Y2FwYWJpbGl0eSwgYnNzLT5oYXNfZXJwX3ZhbHVlLCBic3MtPmVycF92YWx1ZSk7CisJCQlic3MtPmNic3MuY2FwYWJpbGl0eSwgYnNzLT5oYXNfZXJwX3ZhbHVlLCBic3MtPmVycF92YWx1ZSk7CiAKIAkJaWVlZTgwMjExX3J4X2Jzc19wdXQobG9jYWwsIGJzcyk7CiAJfQogCi0JaWZzdGEtPmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfUFJFVl9CU1NJRF9TRVQ7Ci0JbWVtY3B5KGlmc3RhLT5wcmV2X2Jzc2lkLCBzZGF0YS0+dS5zdGEuYnNzaWQsIEVUSF9BTEVOKTsKLQlpZWVlODAyMTFfc3RhX3NlbmRfYXNzb2NpbmZvKHNkYXRhLCBpZnN0YSk7CisJaWZtZ2QtPmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfUFJFVl9CU1NJRF9TRVQ7CisJbWVtY3B5KGlmbWdkLT5wcmV2X2Jzc2lkLCBzZGF0YS0+dS5tZ2QuYnNzaWQsIEVUSF9BTEVOKTsKKwlpZWVlODAyMTFfc3RhX3NlbmRfYXNzb2NpbmZvKHNkYXRhKTsKIAotCWlmc3RhLT5sYXN0X3Byb2JlID0gamlmZmllczsKKwlpZm1nZC0+bGFzdF9wcm9iZSA9IGppZmZpZXM7CiAJaWVlZTgwMjExX2xlZF9hc3NvYyhsb2NhbCwgMSk7CiAKIAlzZGF0YS0+dmlmLmJzc19jb25mLmFzc29jID0gMTsKQEAgLTc0NSw3MiArNjYwLDkwIEBACiAJaWVlZTgwMjExX2Jzc19pbmZvX2NoYW5nZV9ub3RpZnkoc2RhdGEsIGJzc19pbmZvX2NoYW5nZWQpOwogCiAJaWYgKGxvY2FsLT5wb3dlcnNhdmUpIHsKLQkJaWYgKGxvY2FsLT5keW5hbWljX3BzX3RpbWVvdXQgPiAwKQorCQlpZiAoIShsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfU1VQUE9SVFNfRFlOQU1JQ19QUykgJiYKKwkJICAgIGxvY2FsLT5ody5jb25mLmR5bmFtaWNfcHNfdGltZW91dCA+IDApIHsKIAkJCW1vZF90aW1lcigmbG9jYWwtPmR5bmFtaWNfcHNfdGltZXIsIGppZmZpZXMgKwotCQkJCSAgbXNlY3NfdG9famlmZmllcyhsb2NhbC0+ZHluYW1pY19wc190aW1lb3V0KSk7Ci0JCWVsc2UgeworCQkJCSAgbXNlY3NfdG9famlmZmllcygKKwkJCQkJbG9jYWwtPmh3LmNvbmYuZHluYW1pY19wc190aW1lb3V0KSk7CisJCX0gZWxzZSB7CisJCQlpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1BTX05VTExGVU5DX1NUQUNLKQorCQkJCWllZWU4MDIxMV9zZW5kX251bGxmdW5jKGxvY2FsLCBzZGF0YSwgMSk7CiAJCQljb25mLT5mbGFncyB8PSBJRUVFODAyMTFfQ09ORl9QUzsKLQkJCWllZWU4MDIxMV9od19jb25maWcobG9jYWwsCi0JCQkJCSAgICBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUFMpOworCQkJaWVlZTgwMjExX2h3X2NvbmZpZyhsb2NhbCwgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BTKTsKIAkJfQogCX0KIAogCW5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXMoc2RhdGEtPmRldik7CiAJbmV0aWZfY2Fycmllcl9vbihzZGF0YS0+ZGV2KTsKIAotCWllZWU4MDIxMV9zdGFfc2VuZF9hcGluZm8oc2RhdGEsIGlmc3RhKTsKKwlpZWVlODAyMTFfc3RhX3NlbmRfYXBpbmZvKHNkYXRhKTsKIH0KIAotc3RhdGljIHZvaWQgaWVlZTgwMjExX2RpcmVjdF9wcm9iZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEpCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfZGlyZWN0X3Byb2JlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQogewotCWlmc3RhLT5kaXJlY3RfcHJvYmVfdHJpZXMrKzsKLQlpZiAoaWZzdGEtPmRpcmVjdF9wcm9iZV90cmllcyA+IElFRUU4MDIxMV9BVVRIX01BWF9UUklFUykgeworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOworCisJaWZtZ2QtPmRpcmVjdF9wcm9iZV90cmllcysrOworCWlmIChpZm1nZC0+ZGlyZWN0X3Byb2JlX3RyaWVzID4gSUVFRTgwMjExX0FVVEhfTUFYX1RSSUVTKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogZGlyZWN0IHByb2JlIHRvIEFQICVwTSB0aW1lZCBvdXRcbiIsCi0JCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBpZnN0YS0+YnNzaWQpOwotCQlpZnN0YS0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfRElTQUJMRUQ7Ci0JCWllZWU4MDIxMV9zdGFfc2VuZF9hcGluZm8oc2RhdGEsIGlmc3RhKTsKKwkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIGlmbWdkLT5ic3NpZCk7CisJCWlmbWdkLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9ESVNBQkxFRDsKKwkJaWVlZTgwMjExX3N0YV9zZW5kX2FwaW5mbyhzZGF0YSk7CisKKwkJLyoKKwkJICogTW9zdCBsaWtlbHkgQVAgaXMgbm90IGluIHRoZSByYW5nZSBzbyByZW1vdmUgdGhlCisJCSAqIGJzcyBpbmZvcm1hdGlvbiBhc3NvY2lhdGVkIHRvIHRoZSBBUAorCQkgKi8KKwkJaWVlZTgwMjExX3J4X2Jzc19yZW1vdmUoc2RhdGEsIGlmbWdkLT5ic3NpZCwKKwkJCQlzZGF0YS0+bG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+Y2VudGVyX2ZyZXEsCisJCQkJaWZtZ2QtPnNzaWQsIGlmbWdkLT5zc2lkX2xlbik7CiAJCXJldHVybjsKIAl9CiAKIAlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGRpcmVjdCBwcm9iZSB0byBBUCAlcE0gdHJ5ICVkXG4iLAotCQkJc2RhdGEtPmRldi0+bmFtZSwgaWZzdGEtPmJzc2lkLAotCQkJaWZzdGEtPmRpcmVjdF9wcm9iZV90cmllcyk7CisJCQlzZGF0YS0+ZGV2LT5uYW1lLCBpZm1nZC0+YnNzaWQsCisJCQlpZm1nZC0+ZGlyZWN0X3Byb2JlX3RyaWVzKTsKIAotCWlmc3RhLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9ESVJFQ1RfUFJPQkU7CisJaWZtZ2QtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0RJUkVDVF9QUk9CRTsKIAotCXNldF9iaXQoSUVFRTgwMjExX1NUQV9SRVFfRElSRUNUX1BST0JFLCAmaWZzdGEtPnJlcXVlc3QpOworCXNldF9iaXQoSUVFRTgwMjExX1NUQV9SRVFfRElSRUNUX1BST0JFLCAmaWZtZ2QtPnJlcXVlc3QpOwogCiAJLyogRGlyZWN0IHByb2JlIGlzIHNlbnQgdG8gYnJvYWRjYXN0IGFkZHJlc3MgYXMgc29tZSBBUHMKIAkgKiB3aWxsIG5vdCBhbnN3ZXIgdG8gZGlyZWN0IHBhY2tldCBpbiB1bmFzc29jaWF0ZWQgc3RhdGUuCiAJICovCiAJaWVlZTgwMjExX3NlbmRfcHJvYmVfcmVxKHNkYXRhLCBOVUxMLAotCQkJCSBpZnN0YS0+c3NpZCwgaWZzdGEtPnNzaWRfbGVuKTsKKwkJCQkgaWZtZ2QtPnNzaWQsIGlmbWdkLT5zc2lkX2xlbiwgTlVMTCwgMCk7CiAKLQltb2RfdGltZXIoJmlmc3RhLT50aW1lciwgamlmZmllcyArIElFRUU4MDIxMV9BVVRIX1RJTUVPVVQpOworCW1vZF90aW1lcigmaWZtZ2QtPnRpbWVyLCBqaWZmaWVzICsgSUVFRTgwMjExX0FVVEhfVElNRU9VVCk7CiB9CiAKIAotc3RhdGljIHZvaWQgaWVlZTgwMjExX2F1dGhlbnRpY2F0ZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEpCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfYXV0aGVudGljYXRlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQogewotCWlmc3RhLT5hdXRoX3RyaWVzKys7Ci0JaWYgKGlmc3RhLT5hdXRoX3RyaWVzID4gSUVFRTgwMjExX0FVVEhfTUFYX1RSSUVTKSB7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CisKKwlpZm1nZC0+YXV0aF90cmllcysrOworCWlmIChpZm1nZC0+YXV0aF90cmllcyA+IElFRUU4MDIxMV9BVVRIX01BWF9UUklFUykgewogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGF1dGhlbnRpY2F0aW9uIHdpdGggQVAgJXBNIgogCQkgICAgICAgIiB0aW1lZCBvdXRcbiIsCi0JCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBpZnN0YS0+YnNzaWQpOwotCQlpZnN0YS0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfRElTQUJMRUQ7Ci0JCWllZWU4MDIxMV9zdGFfc2VuZF9hcGluZm8oc2RhdGEsIGlmc3RhKTsKKwkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIGlmbWdkLT5ic3NpZCk7CisJCWlmbWdkLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9ESVNBQkxFRDsKKwkJaWVlZTgwMjExX3N0YV9zZW5kX2FwaW5mbyhzZGF0YSk7CisJCWllZWU4MDIxMV9yeF9ic3NfcmVtb3ZlKHNkYXRhLCBpZm1nZC0+YnNzaWQsCisJCQkJc2RhdGEtPmxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmNlbnRlcl9mcmVxLAorCQkJCWlmbWdkLT5zc2lkLCBpZm1nZC0+c3NpZF9sZW4pOwogCQlyZXR1cm47CiAJfQogCi0JaWZzdGEtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0FVVEhFTlRJQ0FURTsKKwlpZm1nZC0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfQVVUSEVOVElDQVRFOwogCXByaW50ayhLRVJOX0RFQlVHICIlczogYXV0aGVudGljYXRlIHdpdGggQVAgJXBNXG4iLAotCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBpZnN0YS0+YnNzaWQpOworCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBpZm1nZC0+YnNzaWQpOwogCi0JaWVlZTgwMjExX3NlbmRfYXV0aChzZGF0YSwgaWZzdGEsIDEsIE5VTEwsIDAsIDApOworCWllZWU4MDIxMV9zZW5kX2F1dGgoc2RhdGEsIDEsIGlmbWdkLT5hdXRoX2FsZywgTlVMTCwgMCwKKwkJCSAgICBpZm1nZC0+YnNzaWQsIDApOworCWlmbWdkLT5hdXRoX3RyYW5zYWN0aW9uID0gMjsKIAotCW1vZF90aW1lcigmaWZzdGEtPnRpbWVyLCBqaWZmaWVzICsgSUVFRTgwMjExX0FVVEhfVElNRU9VVCk7CisJbW9kX3RpbWVyKCZpZm1nZC0+dGltZXIsIGppZmZpZXMgKyBJRUVFODAyMTFfQVVUSF9USU1FT1VUKTsKIH0KIAogLyoKQEAgLTgxOCwzMiArNzUxLDMzIEBACiAgKiBpZiBzZWxmIGRpc2Nvbm5lY3RlZCBvciBhIHJlYXNvbiBjb2RlIGZyb20gdGhlIEFQLgogICovCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfc2V0X2Rpc2Fzc29jKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSwgYm9vbCBkZWF1dGgsCi0JCQkJICAgYm9vbCBzZWxmX2Rpc2Nvbm5lY3RlZCwgdTE2IHJlYXNvbikKKwkJCQkgICBib29sIGRlYXV0aCwgYm9vbCBzZWxmX2Rpc2Nvbm5lY3RlZCwKKwkJCQkgICB1MTYgcmVhc29uKQogeworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwogCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwogCXUzMiBjaGFuZ2VkID0gMCwgY29uZmlnX2NoYW5nZWQgPSAwOwogCiAJcmN1X3JlYWRfbG9jaygpOwogCi0Jc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBpZnN0YS0+YnNzaWQpOworCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgaWZtZ2QtPmJzc2lkKTsKIAlpZiAoIXN0YSkgewogCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJcmV0dXJuOwogCX0KIAogCWlmIChkZWF1dGgpIHsKLQkJaWZzdGEtPmRpcmVjdF9wcm9iZV90cmllcyA9IDA7Ci0JCWlmc3RhLT5hdXRoX3RyaWVzID0gMDsKKwkJaWZtZ2QtPmRpcmVjdF9wcm9iZV90cmllcyA9IDA7CisJCWlmbWdkLT5hdXRoX3RyaWVzID0gMDsKIAl9Ci0JaWZzdGEtPmFzc29jX3NjYW5fdHJpZXMgPSAwOwotCWlmc3RhLT5hc3NvY190cmllcyA9IDA7CisJaWZtZ2QtPmFzc29jX3NjYW5fdHJpZXMgPSAwOworCWlmbWdkLT5hc3NvY190cmllcyA9IDA7CiAKIAluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMoc2RhdGEtPmRldik7CiAJbmV0aWZfY2Fycmllcl9vZmYoc2RhdGEtPmRldik7CiAKLQlpZWVlODAyMTFfc3RhX3RlYXJfZG93bl9CQV9zZXNzaW9ucyhzZGF0YSwgc3RhLT5zdGEuYWRkcik7CisJaWVlZTgwMjExX3N0YV90ZWFyX2Rvd25fQkFfc2Vzc2lvbnMoc3RhKTsKIAogCWlmIChzZWxmX2Rpc2Nvbm5lY3RlZCkgewogCQlpZiAoZGVhdXRoKQpAQCAtODU0LDIzICs3ODgsMjggQEAKIAkJCQlJRUVFODAyMTFfU1RZUEVfRElTQVNTT0MsIHJlYXNvbik7CiAJfQogCi0JaWZzdGEtPmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX0FTU09DSUFURUQ7CisJaWZtZ2QtPmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX0FTU09DSUFURUQ7CiAJY2hhbmdlZCB8PSBpZWVlODAyMTFfcmVzZXRfZXJwX2luZm8oc2RhdGEpOwogCiAJaWVlZTgwMjExX2xlZF9hc3NvYyhsb2NhbCwgMCk7CiAJY2hhbmdlZCB8PSBCU1NfQ0hBTkdFRF9BU1NPQzsKIAlzZGF0YS0+dmlmLmJzc19jb25mLmFzc29jID0gZmFsc2U7CiAKLQlpZWVlODAyMTFfc3RhX3NlbmRfYXBpbmZvKHNkYXRhLCBpZnN0YSk7CisJaWVlZTgwMjExX3N0YV9zZW5kX2FwaW5mbyhzZGF0YSk7CiAKLQlpZiAoc2VsZl9kaXNjb25uZWN0ZWQgfHwgcmVhc29uID09IFdMQU5fUkVBU09OX0RJU0FTU09DX1NUQV9IQVNfTEVGVCkKLQkJaWZzdGEtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0RJU0FCTEVEOworCWlmIChzZWxmX2Rpc2Nvbm5lY3RlZCB8fCByZWFzb24gPT0gV0xBTl9SRUFTT05fRElTQVNTT0NfU1RBX0hBU19MRUZUKSB7CisJCWlmbWdkLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9ESVNBQkxFRDsKKwkJaWVlZTgwMjExX3J4X2Jzc19yZW1vdmUoc2RhdGEsIGlmbWdkLT5ic3NpZCwKKwkJCQlzZGF0YS0+bG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+Y2VudGVyX2ZyZXEsCisJCQkJaWZtZ2QtPnNzaWQsIGlmbWdkLT5zc2lkX2xlbik7CisJfQogCiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKLQlsb2NhbC0+aHcuY29uZi5odC5lbmFibGVkID0gZmFsc2U7CisJLyogY2hhbm5lbChfdHlwZSkgY2hhbmdlcyBhcmUgaGFuZGxlZCBieSBpZWVlODAyMTFfaHdfY29uZmlnICovCiAJbG9jYWwtPm9wZXJfY2hhbm5lbF90eXBlID0gTkw4MDIxMV9DSEFOX05PX0hUOwotCWNvbmZpZ19jaGFuZ2VkIHw9IElFRUU4MDIxMV9DT05GX0NIQU5HRV9IVDsKKworCWxvY2FsLT5wb3dlcl9jb25zdHJfbGV2ZWwgPSAwOwogCiAJZGVsX3RpbWVyX3N5bmMoJmxvY2FsLT5keW5hbWljX3BzX3RpbWVyKTsKIAljYW5jZWxfd29ya19zeW5jKCZsb2NhbC0+ZHluYW1pY19wc19lbmFibGVfd29yayk7CkBAIC04ODUsNyArODI0LDcgQEAKIAogCXJjdV9yZWFkX2xvY2soKTsKIAotCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgaWZzdGEtPmJzc2lkKTsKKwlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIGlmbWdkLT5ic3NpZCk7CiAJaWYgKCFzdGEpIHsKIAkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCXJldHVybjsKQEAgLTkwNiwyNyArODQ1LDI3IEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBpbnQgaWVlZTgwMjExX3ByaXZhY3lfbWlzbWF0Y2goc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhKQorc3RhdGljIGludCBpZWVlODAyMTFfcHJpdmFjeV9taXNtYXRjaChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzOwogCWludCBic3NfcHJpdmFjeTsKIAlpbnQgd2VwX3ByaXZhY3k7CiAJaW50IHByaXZhY3lfaW52b2tlZDsKIAotCWlmICghaWZzdGEgfHwgKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfTUlYRURfQ0VMTCkpCisJaWYgKCFpZm1nZCB8fCAoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9NSVhFRF9DRUxMKSkKIAkJcmV0dXJuIDA7CiAKLQlic3MgPSBpZWVlODAyMTFfcnhfYnNzX2dldChsb2NhbCwgaWZzdGEtPmJzc2lkLAorCWJzcyA9IGllZWU4MDIxMV9yeF9ic3NfZ2V0KGxvY2FsLCBpZm1nZC0+YnNzaWQsCiAJCQkJICAgbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+Y2VudGVyX2ZyZXEsCi0JCQkJICAgaWZzdGEtPnNzaWQsIGlmc3RhLT5zc2lkX2xlbik7CisJCQkJICAgaWZtZ2QtPnNzaWQsIGlmbWdkLT5zc2lkX2xlbik7CiAJaWYgKCFic3MpCiAJCXJldHVybiAwOwogCi0JYnNzX3ByaXZhY3kgPSAhIShic3MtPmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWSk7CisJYnNzX3ByaXZhY3kgPSAhIShic3MtPmNic3MuY2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZKTsKIAl3ZXBfcHJpdmFjeSA9ICEhaWVlZTgwMjExX3N0YV93ZXBfY29uZmlndXJlZChzZGF0YSk7Ci0JcHJpdmFjeV9pbnZva2VkID0gISEoaWZzdGEtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9QUklWQUNZX0lOVk9LRUQpOworCXByaXZhY3lfaW52b2tlZCA9ICEhKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfUFJJVkFDWV9JTlZPS0VEKTsKIAogCWllZWU4MDIxMV9yeF9ic3NfcHV0KGxvY2FsLCBic3MpOwogCkBAIC05MzYsMzggKzg3NSw0MiBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfYXNzb2NpYXRlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSkKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9hc3NvY2lhdGUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCiB7Ci0JaWZzdGEtPmFzc29jX3RyaWVzKys7Ci0JaWYgKGlmc3RhLT5hc3NvY190cmllcyA+IElFRUU4MDIxMV9BU1NPQ19NQVhfVFJJRVMpIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKKworCWlmbWdkLT5hc3NvY190cmllcysrOworCWlmIChpZm1nZC0+YXNzb2NfdHJpZXMgPiBJRUVFODAyMTFfQVNTT0NfTUFYX1RSSUVTKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogYXNzb2NpYXRpb24gd2l0aCBBUCAlcE0iCiAJCSAgICAgICAiIHRpbWVkIG91dFxuIiwKLQkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIGlmc3RhLT5ic3NpZCk7Ci0JCWlmc3RhLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9ESVNBQkxFRDsKLQkJaWVlZTgwMjExX3N0YV9zZW5kX2FwaW5mbyhzZGF0YSwgaWZzdGEpOworCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgaWZtZ2QtPmJzc2lkKTsKKwkJaWZtZ2QtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0RJU0FCTEVEOworCQlpZWVlODAyMTFfc3RhX3NlbmRfYXBpbmZvKHNkYXRhKTsKKwkJaWVlZTgwMjExX3J4X2Jzc19yZW1vdmUoc2RhdGEsIGlmbWdkLT5ic3NpZCwKKwkJCQlzZGF0YS0+bG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+Y2VudGVyX2ZyZXEsCisJCQkJaWZtZ2QtPnNzaWQsIGlmbWdkLT5zc2lkX2xlbik7CiAJCXJldHVybjsKIAl9CiAKLQlpZnN0YS0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFOworCWlmbWdkLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEU7CiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBhc3NvY2lhdGUgd2l0aCBBUCAlcE1cbiIsCi0JICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIGlmc3RhLT5ic3NpZCk7Ci0JaWYgKGllZWU4MDIxMV9wcml2YWN5X21pc21hdGNoKHNkYXRhLCBpZnN0YSkpIHsKKwkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgaWZtZ2QtPmJzc2lkKTsKKwlpZiAoaWVlZTgwMjExX3ByaXZhY3lfbWlzbWF0Y2goc2RhdGEpKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogbWlzbWF0Y2ggaW4gcHJpdmFjeSBjb25maWd1cmF0aW9uIGFuZCAiCiAJCSAgICAgICAibWl4ZWQtY2VsbCBkaXNhYmxlZCAtIGFib3J0IGFzc29jaWF0aW9uXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKLQkJaWZzdGEtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0RJU0FCTEVEOworCQlpZm1nZC0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfRElTQUJMRUQ7CiAJCXJldHVybjsKIAl9CiAKLQlpZWVlODAyMTFfc2VuZF9hc3NvYyhzZGF0YSwgaWZzdGEpOworCWllZWU4MDIxMV9zZW5kX2Fzc29jKHNkYXRhKTsKIAotCW1vZF90aW1lcigmaWZzdGEtPnRpbWVyLCBqaWZmaWVzICsgSUVFRTgwMjExX0FTU09DX1RJTUVPVVQpOworCW1vZF90aW1lcigmaWZtZ2QtPnRpbWVyLCBqaWZmaWVzICsgSUVFRTgwMjExX0FTU09DX1RJTUVPVVQpOwogfQogCiAKLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9hc3NvY2lhdGVkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEpCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfYXNzb2NpYXRlZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKIAlpbnQgZGlzYXNzb2M7CkBAIC05NzcsMzggKzkyMCw0MCBAQAogCSAqIGZvciBiZXR0ZXIgQVBzLiAqLwogCS8qIFRPRE86IHJlbW92ZSBleHBpcmVkIEJTU2VzICovCiAKLQlpZnN0YS0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFRDsKKwlpZm1nZC0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFRDsKIAogCXJjdV9yZWFkX2xvY2soKTsKIAotCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgaWZzdGEtPmJzc2lkKTsKKwlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIGlmbWdkLT5ic3NpZCk7CiAJaWYgKCFzdGEpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBObyBTVEEgZW50cnkgZm9yIG93biBBUCAlcE1cbiIsCi0JCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBpZnN0YS0+YnNzaWQpOworCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgaWZtZ2QtPmJzc2lkKTsKIAkJZGlzYXNzb2MgPSAxOwogCX0gZWxzZSB7CiAJCWRpc2Fzc29jID0gMDsKIAkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywKIAkJCSAgICAgICBzdGEtPmxhc3RfcnggKyBJRUVFODAyMTFfTU9OSVRPUklOR19JTlRFUlZBTCkpIHsKLQkJCWlmIChpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1BST0JFUkVRX1BPTEwpIHsKKwkJCWlmIChpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1BST0JFUkVRX1BPTEwpIHsKIAkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IE5vIFByb2JlUmVzcCBmcm9tICIKIAkJCQkgICAgICAgImN1cnJlbnQgQVAgJXBNIC0gYXNzdW1lIG91dCBvZiAiCiAJCQkJICAgICAgICJyYW5nZVxuIiwKLQkJCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgaWZzdGEtPmJzc2lkKTsKKwkJCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgaWZtZ2QtPmJzc2lkKTsKIAkJCQlkaXNhc3NvYyA9IDE7CiAJCQl9IGVsc2UKLQkJCQlpZWVlODAyMTFfc2VuZF9wcm9iZV9yZXEoc2RhdGEsIGlmc3RhLT5ic3NpZCwKLQkJCQkJCQkgaWZzdGEtPnNzaWQsCi0JCQkJCQkJIGlmc3RhLT5zc2lkX2xlbik7Ci0JCQlpZnN0YS0+ZmxhZ3MgXj0gSUVFRTgwMjExX1NUQV9QUk9CRVJFUV9QT0xMOworCQkJCWllZWU4MDIxMV9zZW5kX3Byb2JlX3JlcShzZGF0YSwgaWZtZ2QtPmJzc2lkLAorCQkJCQkJCSBpZm1nZC0+c3NpZCwKKwkJCQkJCQkgaWZtZ2QtPnNzaWRfbGVuLAorCQkJCQkJCSBOVUxMLCAwKTsKKwkJCWlmbWdkLT5mbGFncyBePSBJRUVFODAyMTFfU1RBX1BST0JFUkVRX1BPTEw7CiAJCX0gZWxzZSB7Ci0JCQlpZnN0YS0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfUFJPQkVSRVFfUE9MTDsKLQkJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGlmc3RhLT5sYXN0X3Byb2JlICsKKwkJCWlmbWdkLT5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9QUk9CRVJFUV9QT0xMOworCQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgaWZtZ2QtPmxhc3RfcHJvYmUgKwogCQkJCSAgICAgICBJRUVFODAyMTFfUFJPQkVfSU5URVJWQUwpKSB7Ci0JCQkJaWZzdGEtPmxhc3RfcHJvYmUgPSBqaWZmaWVzOwotCQkJCWllZWU4MDIxMV9zZW5kX3Byb2JlX3JlcShzZGF0YSwgaWZzdGEtPmJzc2lkLAotCQkJCQkJCSBpZnN0YS0+c3NpZCwKLQkJCQkJCQkgaWZzdGEtPnNzaWRfbGVuKTsKKwkJCQlpZm1nZC0+bGFzdF9wcm9iZSA9IGppZmZpZXM7CisJCQkJaWVlZTgwMjExX3NlbmRfcHJvYmVfcmVxKHNkYXRhLCBpZm1nZC0+YnNzaWQsCisJCQkJCQkJIGlmbWdkLT5zc2lkLAorCQkJCQkJCSBpZm1nZC0+c3NpZF9sZW4sCisJCQkJCQkJIE5VTEwsIDApOwogCQkJfQogCQl9CiAJfQpAQCAtMTAxNiwyNSArOTYxLDI1IEBACiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlpZiAoZGlzYXNzb2MpCi0JCWllZWU4MDIxMV9zZXRfZGlzYXNzb2Moc2RhdGEsIGlmc3RhLCB0cnVlLCB0cnVlLAorCQlpZWVlODAyMTFfc2V0X2Rpc2Fzc29jKHNkYXRhLCB0cnVlLCB0cnVlLAogCQkJCQlXTEFOX1JFQVNPTl9QUkVWX0FVVEhfTk9UX1ZBTElEKTsKIAllbHNlCi0JCW1vZF90aW1lcigmaWZzdGEtPnRpbWVyLCBqaWZmaWVzICsKKwkJbW9kX3RpbWVyKCZpZm1nZC0+dGltZXIsIGppZmZpZXMgKwogCQkJCSAgICAgIElFRUU4MDIxMV9NT05JVE9SSU5HX0lOVEVSVkFMKTsKIH0KIAogCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfYXV0aF9jb21wbGV0ZWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEpCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfYXV0aF9jb21wbGV0ZWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCiB7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CisKIAlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGF1dGhlbnRpY2F0ZWRcbiIsIHNkYXRhLT5kZXYtPm5hbWUpOwotCWlmc3RhLT5mbGFncyB8PSBJRUVFODAyMTFfU1RBX0FVVEhFTlRJQ0FURUQ7Ci0JaWVlZTgwMjExX2Fzc29jaWF0ZShzZGF0YSwgaWZzdGEpOworCWlmbWdkLT5mbGFncyB8PSBJRUVFODAyMTFfU1RBX0FVVEhFTlRJQ0FURUQ7CisJaWVlZTgwMjExX2Fzc29jaWF0ZShzZGF0YSk7CiB9CiAKIAogc3RhdGljIHZvaWQgaWVlZTgwMjExX2F1dGhfY2hhbGxlbmdlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhLAogCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LAogCQkJCSAgICAgc2l6ZV90IGxlbikKIHsKQEAgLTEwNDUsNTAgKzk5MCwzNyBAQAogCWllZWU4MDJfMTFfcGFyc2VfZWxlbXMocG9zLCBsZW4gLSAocG9zIC0gKHU4ICopIG1nbXQpLCAmZWxlbXMpOwogCWlmICghZWxlbXMuY2hhbGxlbmdlKQogCQlyZXR1cm47Ci0JaWVlZTgwMjExX3NlbmRfYXV0aChzZGF0YSwgaWZzdGEsIDMsIGVsZW1zLmNoYWxsZW5nZSAtIDIsCi0JCQkgICAgZWxlbXMuY2hhbGxlbmdlX2xlbiArIDIsIDEpOworCWllZWU4MDIxMV9zZW5kX2F1dGgoc2RhdGEsIDMsIHNkYXRhLT51Lm1nZC5hdXRoX2FsZywKKwkJCSAgICBlbGVtcy5jaGFsbGVuZ2UgLSAyLCBlbGVtcy5jaGFsbGVuZ2VfbGVuICsgMiwKKwkJCSAgICBzZGF0YS0+dS5tZ2QuYnNzaWQsIDEpOworCXNkYXRhLT51Lm1nZC5hdXRoX3RyYW5zYWN0aW9uID0gNDsKIH0KIAogc3RhdGljIHZvaWQgaWVlZTgwMjExX3J4X21nbXRfYXV0aChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEsCiAJCQkJICAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LAogCQkJCSAgIHNpemVfdCBsZW4pCiB7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAJdTE2IGF1dGhfYWxnLCBhdXRoX3RyYW5zYWN0aW9uLCBzdGF0dXNfY29kZTsKIAotCWlmIChpZnN0YS0+c3RhdGUgIT0gSUVFRTgwMjExX1NUQV9NTE1FX0FVVEhFTlRJQ0FURSAmJgotCSAgICBzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCisJaWYgKGlmbWdkLT5zdGF0ZSAhPSBJRUVFODAyMTFfU1RBX01MTUVfQVVUSEVOVElDQVRFKQogCQlyZXR1cm47CiAKIAlpZiAobGVuIDwgMjQgKyA2KQogCQlyZXR1cm47CiAKLQlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FESE9DICYmCi0JICAgIG1lbWNtcChpZnN0YS0+YnNzaWQsIG1nbXQtPnNhLCBFVEhfQUxFTikgIT0gMCkKKwlpZiAobWVtY21wKGlmbWdkLT5ic3NpZCwgbWdtdC0+c2EsIEVUSF9BTEVOKSAhPSAwKQogCQlyZXR1cm47CiAKLQlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FESE9DICYmCi0JICAgIG1lbWNtcChpZnN0YS0+YnNzaWQsIG1nbXQtPmJzc2lkLCBFVEhfQUxFTikgIT0gMCkKKwlpZiAobWVtY21wKGlmbWdkLT5ic3NpZCwgbWdtdC0+YnNzaWQsIEVUSF9BTEVOKSAhPSAwKQogCQlyZXR1cm47CiAKIAlhdXRoX2FsZyA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuYXV0aC5hdXRoX2FsZyk7CiAJYXV0aF90cmFuc2FjdGlvbiA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuYXV0aC5hdXRoX3RyYW5zYWN0aW9uKTsKIAlzdGF0dXNfY29kZSA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuYXV0aC5zdGF0dXNfY29kZSk7CiAKLQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7Ci0JCS8qCi0JCSAqIElFRUUgODAyLjExIHN0YW5kYXJkIGRvZXMgbm90IHJlcXVpcmUgYXV0aGVudGljYXRpb24gaW4gSUJTUwotCQkgKiBuZXR3b3JrcyBhbmQgbW9zdCBpbXBsZW1lbnRhdGlvbnMgZG8gbm90IHNlZW0gdG8gdXNlIGl0LgotCQkgKiBIb3dldmVyLCB0cnkgdG8gcmVwbHkgdG8gYXV0aGVudGljYXRpb24gYXR0ZW1wdHMgaWYgc29tZW9uZQotCQkgKiBoYXMgYWN0dWFsbHkgaW1wbGVtZW50ZWQgdGhpcy4KLQkJICovCi0JCWlmIChhdXRoX2FsZyAhPSBXTEFOX0FVVEhfT1BFTiB8fCBhdXRoX3RyYW5zYWN0aW9uICE9IDEpCi0JCQlyZXR1cm47Ci0JCWllZWU4MDIxMV9zZW5kX2F1dGgoc2RhdGEsIGlmc3RhLCAyLCBOVUxMLCAwLCAwKTsKLQl9Ci0KLQlpZiAoYXV0aF9hbGcgIT0gaWZzdGEtPmF1dGhfYWxnIHx8Ci0JICAgIGF1dGhfdHJhbnNhY3Rpb24gIT0gaWZzdGEtPmF1dGhfdHJhbnNhY3Rpb24pCisJaWYgKGF1dGhfYWxnICE9IGlmbWdkLT5hdXRoX2FsZyB8fAorCSAgICBhdXRoX3RyYW5zYWN0aW9uICE9IGlmbWdkLT5hdXRoX3RyYW5zYWN0aW9uKQogCQlyZXR1cm47CiAKIAlpZiAoc3RhdHVzX2NvZGUgIT0gV0xBTl9TVEFUVVNfU1VDQ0VTUykgewpAQCAtMTA5NywxNSArMTAyOSwxNSBAQAogCQkJY29uc3QgaW50IG51bV9hbGdzID0gQVJSQVlfU0laRShhbGdzKTsKIAkJCWludCBpLCBwb3M7CiAJCQlhbGdzWzBdID0gYWxnc1sxXSA9IGFsZ3NbMl0gPSAweGZmOwotCQkJaWYgKGlmc3RhLT5hdXRoX2FsZ3MgJiBJRUVFODAyMTFfQVVUSF9BTEdfT1BFTikKKwkJCWlmIChpZm1nZC0+YXV0aF9hbGdzICYgSUVFRTgwMjExX0FVVEhfQUxHX09QRU4pCiAJCQkJYWxnc1swXSA9IFdMQU5fQVVUSF9PUEVOOwotCQkJaWYgKGlmc3RhLT5hdXRoX2FsZ3MgJiBJRUVFODAyMTFfQVVUSF9BTEdfU0hBUkVEX0tFWSkKKwkJCWlmIChpZm1nZC0+YXV0aF9hbGdzICYgSUVFRTgwMjExX0FVVEhfQUxHX1NIQVJFRF9LRVkpCiAJCQkJYWxnc1sxXSA9IFdMQU5fQVVUSF9TSEFSRURfS0VZOwotCQkJaWYgKGlmc3RhLT5hdXRoX2FsZ3MgJiBJRUVFODAyMTFfQVVUSF9BTEdfTEVBUCkKKwkJCWlmIChpZm1nZC0+YXV0aF9hbGdzICYgSUVFRTgwMjExX0FVVEhfQUxHX0xFQVApCiAJCQkJYWxnc1syXSA9IFdMQU5fQVVUSF9MRUFQOwotCQkJaWYgKGlmc3RhLT5hdXRoX2FsZyA9PSBXTEFOX0FVVEhfT1BFTikKKwkJCWlmIChpZm1nZC0+YXV0aF9hbGcgPT0gV0xBTl9BVVRIX09QRU4pCiAJCQkJcG9zID0gMDsKLQkJCWVsc2UgaWYgKGlmc3RhLT5hdXRoX2FsZyA9PSBXTEFOX0FVVEhfU0hBUkVEX0tFWSkKKwkJCWVsc2UgaWYgKGlmbWdkLT5hdXRoX2FsZyA9PSBXTEFOX0FVVEhfU0hBUkVEX0tFWSkKIAkJCQlwb3MgPSAxOwogCQkJZWxzZQogCQkJCXBvcyA9IDI7CkBAIC0xMTEzLDEwNSArMTA0NSwxMDUgQEAKIAkJCQlwb3MrKzsKIAkJCQlpZiAocG9zID49IG51bV9hbGdzKQogCQkJCQlwb3MgPSAwOwotCQkJCWlmIChhbGdzW3Bvc10gPT0gaWZzdGEtPmF1dGhfYWxnIHx8CisJCQkJaWYgKGFsZ3NbcG9zXSA9PSBpZm1nZC0+YXV0aF9hbGcgfHwKIAkJCQkgICAgYWxnc1twb3NdID09IDB4ZmYpCiAJCQkJCWNvbnRpbnVlOwogCQkJCWlmIChhbGdzW3Bvc10gPT0gV0xBTl9BVVRIX1NIQVJFRF9LRVkgJiYKIAkJCQkgICAgIWllZWU4MDIxMV9zdGFfd2VwX2NvbmZpZ3VyZWQoc2RhdGEpKQogCQkJCQljb250aW51ZTsKLQkJCQlpZnN0YS0+YXV0aF9hbGcgPSBhbGdzW3Bvc107CisJCQkJaWZtZ2QtPmF1dGhfYWxnID0gYWxnc1twb3NdOwogCQkJCWJyZWFrOwogCQkJfQogCQl9CiAJCXJldHVybjsKIAl9CiAKLQlzd2l0Y2ggKGlmc3RhLT5hdXRoX2FsZykgeworCXN3aXRjaCAoaWZtZ2QtPmF1dGhfYWxnKSB7CiAJY2FzZSBXTEFOX0FVVEhfT1BFTjoKIAljYXNlIFdMQU5fQVVUSF9MRUFQOgotCQlpZWVlODAyMTFfYXV0aF9jb21wbGV0ZWQoc2RhdGEsIGlmc3RhKTsKKwkJaWVlZTgwMjExX2F1dGhfY29tcGxldGVkKHNkYXRhKTsKIAkJYnJlYWs7CiAJY2FzZSBXTEFOX0FVVEhfU0hBUkVEX0tFWToKLQkJaWYgKGlmc3RhLT5hdXRoX3RyYW5zYWN0aW9uID09IDQpCi0JCQlpZWVlODAyMTFfYXV0aF9jb21wbGV0ZWQoc2RhdGEsIGlmc3RhKTsKKwkJaWYgKGlmbWdkLT5hdXRoX3RyYW5zYWN0aW9uID09IDQpCisJCQlpZWVlODAyMTFfYXV0aF9jb21wbGV0ZWQoc2RhdGEpOwogCQllbHNlCi0JCQlpZWVlODAyMTFfYXV0aF9jaGFsbGVuZ2Uoc2RhdGEsIGlmc3RhLCBtZ210LCBsZW4pOworCQkJaWVlZTgwMjExX2F1dGhfY2hhbGxlbmdlKHNkYXRhLCBtZ210LCBsZW4pOwogCQlicmVhazsKIAl9CiB9CiAKIAogc3RhdGljIHZvaWQgaWVlZTgwMjExX3J4X21nbXRfZGVhdXRoKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhLAogCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LAogCQkJCSAgICAgc2l6ZV90IGxlbikKIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAl1MTYgcmVhc29uX2NvZGU7CiAKIAlpZiAobGVuIDwgMjQgKyAyKQogCQlyZXR1cm47CiAKLQlpZiAobWVtY21wKGlmc3RhLT5ic3NpZCwgbWdtdC0+c2EsIEVUSF9BTEVOKSkKKwlpZiAobWVtY21wKGlmbWdkLT5ic3NpZCwgbWdtdC0+c2EsIEVUSF9BTEVOKSkKIAkJcmV0dXJuOwogCiAJcmVhc29uX2NvZGUgPSBsZTE2X3RvX2NwdShtZ210LT51LmRlYXV0aC5yZWFzb25fY29kZSk7CiAKLQlpZiAoaWZzdGEtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9BVVRIRU5USUNBVEVEKQorCWlmIChpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FVVEhFTlRJQ0FURUQpCiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogZGVhdXRoZW50aWNhdGVkIChSZWFzb246ICV1KVxuIiwKIAkJCQlzZGF0YS0+ZGV2LT5uYW1lLCByZWFzb25fY29kZSk7CiAKLQlpZiAoaWZzdGEtPnN0YXRlID09IElFRUU4MDIxMV9TVEFfTUxNRV9BVVRIRU5USUNBVEUgfHwKLQkgICAgaWZzdGEtPnN0YXRlID09IElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEUgfHwKLQkgICAgaWZzdGEtPnN0YXRlID09IElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEVEKSB7Ci0JCWlmc3RhLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9ESVJFQ1RfUFJPQkU7Ci0JCW1vZF90aW1lcigmaWZzdGEtPnRpbWVyLCBqaWZmaWVzICsKKwlpZiAoaWZtZ2QtPnN0YXRlID09IElFRUU4MDIxMV9TVEFfTUxNRV9BVVRIRU5USUNBVEUgfHwKKwkgICAgaWZtZ2QtPnN0YXRlID09IElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEUgfHwKKwkgICAgaWZtZ2QtPnN0YXRlID09IElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEVEKSB7CisJCWlmbWdkLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9ESVJFQ1RfUFJPQkU7CisJCW1vZF90aW1lcigmaWZtZ2QtPnRpbWVyLCBqaWZmaWVzICsKIAkJCQkgICAgICBJRUVFODAyMTFfUkVUUllfQVVUSF9JTlRFUlZBTCk7CiAJfQogCi0JaWVlZTgwMjExX3NldF9kaXNhc3NvYyhzZGF0YSwgaWZzdGEsIHRydWUsIGZhbHNlLCAwKTsKLQlpZnN0YS0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfQVVUSEVOVElDQVRFRDsKKwlpZWVlODAyMTFfc2V0X2Rpc2Fzc29jKHNkYXRhLCB0cnVlLCBmYWxzZSwgMCk7CisJaWZtZ2QtPmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX0FVVEhFTlRJQ0FURUQ7CiB9CiAKIAogc3RhdGljIHZvaWQgaWVlZTgwMjExX3J4X21nbXRfZGlzYXNzb2Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSwKIAkJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LAogCQkJCSAgICAgICBzaXplX3QgbGVuKQogeworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwogCXUxNiByZWFzb25fY29kZTsKIAogCWlmIChsZW4gPCAyNCArIDIpCiAJCXJldHVybjsKIAotCWlmIChtZW1jbXAoaWZzdGEtPmJzc2lkLCBtZ210LT5zYSwgRVRIX0FMRU4pKQorCWlmIChtZW1jbXAoaWZtZ2QtPmJzc2lkLCBtZ210LT5zYSwgRVRIX0FMRU4pKQogCQlyZXR1cm47CiAKIAlyZWFzb25fY29kZSA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuZGlzYXNzb2MucmVhc29uX2NvZGUpOwogCi0JaWYgKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRCkKKwlpZiAoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9BU1NPQ0lBVEVEKQogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGRpc2Fzc29jaWF0ZWQgKFJlYXNvbjogJXUpXG4iLAogCQkJCXNkYXRhLT5kZXYtPm5hbWUsIHJlYXNvbl9jb2RlKTsKIAotCWlmIChpZnN0YS0+c3RhdGUgPT0gSUVFRTgwMjExX1NUQV9NTE1FX0FTU09DSUFURUQpIHsKLQkJaWZzdGEtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0FTU09DSUFURTsKLQkJbW9kX3RpbWVyKCZpZnN0YS0+dGltZXIsIGppZmZpZXMgKworCWlmIChpZm1nZC0+c3RhdGUgPT0gSUVFRTgwMjExX1NUQV9NTE1FX0FTU09DSUFURUQpIHsKKwkJaWZtZ2QtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0FTU09DSUFURTsKKwkJbW9kX3RpbWVyKCZpZm1nZC0+dGltZXIsIGppZmZpZXMgKwogCQkJCSAgICAgIElFRUU4MDIxMV9SRVRSWV9BVVRIX0lOVEVSVkFMKTsKIAl9CiAKLQlpZWVlODAyMTFfc2V0X2Rpc2Fzc29jKHNkYXRhLCBpZnN0YSwgZmFsc2UsIGZhbHNlLCByZWFzb25fY29kZSk7CisJaWVlZTgwMjExX3NldF9kaXNhc3NvYyhzZGF0YSwgZmFsc2UsIGZhbHNlLCByZWFzb25fY29kZSk7CiB9CiAKIAogc3RhdGljIHZvaWQgaWVlZTgwMjExX3J4X21nbXRfYXNzb2NfcmVzcChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkJIHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSwKIAkJCQkJIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwKIAkJCQkJIHNpemVfdCBsZW4sCiAJCQkJCSBpbnQgcmVhc3NvYykKIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKLQl1NjQgcmF0ZXMsIGJhc2ljX3JhdGVzOworCXUzMiByYXRlcywgYmFzaWNfcmF0ZXM7CiAJdTE2IGNhcGFiX2luZm8sIHN0YXR1c19jb2RlLCBhaWQ7CiAJc3RydWN0IGllZWU4MDJfMTFfZWxlbXMgZWxlbXM7CiAJc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqYnNzX2NvbmYgPSAmc2RhdGEtPnZpZi5ic3NfY29uZjsKQEAgLTEyMjQsMTMgKzExNTYsMTMgQEAKIAkvKiBBc3NvY1Jlc3AgYW5kIFJlYXNzb2NSZXNwIGhhdmUgaWRlbnRpY2FsIHN0cnVjdHVyZSwgc28gcHJvY2VzcyBib3RoCiAJICogb2YgdGhlbSBpbiB0aGlzIGZ1bmN0aW9uLiAqLwogCi0JaWYgKGlmc3RhLT5zdGF0ZSAhPSBJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFKQorCWlmIChpZm1nZC0+c3RhdGUgIT0gSUVFRTgwMjExX1NUQV9NTE1FX0FTU09DSUFURSkKIAkJcmV0dXJuOwogCiAJaWYgKGxlbiA8IDI0ICsgNikKIAkJcmV0dXJuOwogCi0JaWYgKG1lbWNtcChpZnN0YS0+YnNzaWQsIG1nbXQtPnNhLCBFVEhfQUxFTikgIT0gMCkKKwlpZiAobWVtY21wKGlmbWdkLT5ic3NpZCwgbWdtdC0+c2EsIEVUSF9BTEVOKSAhPSAwKQogCQlyZXR1cm47CiAKIAljYXBhYl9pbmZvID0gbGUxNl90b19jcHUobWdtdC0+dS5hc3NvY19yZXNwLmNhcGFiX2luZm8pOwpAQCAtMTI0MiwxMyArMTE3NCwzMSBAQAogCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCByZWFzc29jID8gIlJlYSIgOiAiQSIsIG1nbXQtPnNhLAogCSAgICAgICBjYXBhYl9pbmZvLCBzdGF0dXNfY29kZSwgKHUxNikoYWlkICYgfihCSVQoMTUpIHwgQklUKDE0KSkpKTsKIAorCXBvcyA9IG1nbXQtPnUuYXNzb2NfcmVzcC52YXJpYWJsZTsKKwlpZWVlODAyXzExX3BhcnNlX2VsZW1zKHBvcywgbGVuIC0gKHBvcyAtICh1OCAqKSBtZ210KSwgJmVsZW1zKTsKKworCWlmIChzdGF0dXNfY29kZSA9PSBXTEFOX1NUQVRVU19BU1NPQ19SRUpFQ1RFRF9URU1QT1JBUklMWSAmJgorCSAgICBlbGVtcy50aW1lb3V0X2ludCAmJiBlbGVtcy50aW1lb3V0X2ludF9sZW4gPT0gNSAmJgorCSAgICBlbGVtcy50aW1lb3V0X2ludFswXSA9PSBXTEFOX1RJTUVPVVRfQVNTT0NfQ09NRUJBQ0spIHsKKwkJdTMyIHR1LCBtczsKKwkJdHUgPSBnZXRfdW5hbGlnbmVkX2xlMzIoZWxlbXMudGltZW91dF9pbnQgKyAxKTsKKwkJbXMgPSB0dSAqIDEwMjQgLyAxMDAwOworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEFQIHJlamVjdGVkIGFzc29jaWF0aW9uIHRlbXBvcmFyaWx5OyAiCisJCSAgICAgICAiY29tZWJhY2sgZHVyYXRpb24gJXUgVFUgKCV1IG1zKVxuIiwKKwkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIHR1LCBtcyk7CisJCWlmIChtcyA+IElFRUU4MDIxMV9BU1NPQ19USU1FT1VUKQorCQkJbW9kX3RpbWVyKCZpZm1nZC0+dGltZXIsCisJCQkJICBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhtcykpOworCQlyZXR1cm47CisJfQorCiAJaWYgKHN0YXR1c19jb2RlICE9IFdMQU5fU1RBVFVTX1NVQ0NFU1MpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBBUCBkZW5pZWQgYXNzb2NpYXRpb24gKGNvZGU9JWQpXG4iLAogCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgc3RhdHVzX2NvZGUpOwogCQkvKiBpZiB0aGlzIHdhcyBhIHJlYXNzb2NpYXRpb24sIGVuc3VyZSB3ZSB0cnkgYSAiZnVsbCIKIAkJICogYXNzb2NpYXRpb24gbmV4dCB0aW1lLiBUaGlzIHdvcmtzIGFyb3VuZCBzb21lIGJyb2tlbiBBUHMKIAkJICogd2hpY2ggZG8gbm90IGNvcnJlY3RseSByZWplY3QgcmVhc3NvY2lhdGlvbiByZXF1ZXN0cy4gKi8KLQkJaWZzdGEtPmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX1BSRVZfQlNTSURfU0VUOworCQlpZm1nZC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfUFJFVl9CU1NJRF9TRVQ7CiAJCXJldHVybjsKIAl9CiAKQEAgLTEyNTcsOSArMTIwNyw2IEBACiAJCSAgICAgICAic2V0XG4iLCBzZGF0YS0+ZGV2LT5uYW1lLCBhaWQpOwogCWFpZCAmPSB+KEJJVCgxNSkgfCBCSVQoMTQpKTsKIAotCXBvcyA9IG1nbXQtPnUuYXNzb2NfcmVzcC52YXJpYWJsZTsKLQlpZWVlODAyXzExX3BhcnNlX2VsZW1zKHBvcywgbGVuIC0gKHBvcyAtICh1OCAqKSBtZ210KSwgJmVsZW1zKTsKLQogCWlmICghZWxlbXMuc3VwcF9yYXRlcykgewogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IG5vIFN1cHBSYXRlcyBlbGVtZW50IGluIEFzc29jUmVzcFxuIiwKIAkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUpOwpAQCAtMTI2Nyw0MCArMTIxNCwyOSBAQAogCX0KIAogCXByaW50ayhLRVJOX0RFQlVHICIlczogYXNzb2NpYXRlZFxuIiwgc2RhdGEtPmRldi0+bmFtZSk7Ci0JaWZzdGEtPmFpZCA9IGFpZDsKLQlpZnN0YS0+YXBfY2FwYWIgPSBjYXBhYl9pbmZvOworCWlmbWdkLT5haWQgPSBhaWQ7CisJaWZtZ2QtPmFwX2NhcGFiID0gY2FwYWJfaW5mbzsKIAotCWtmcmVlKGlmc3RhLT5hc3NvY3Jlc3BfaWVzKTsKLQlpZnN0YS0+YXNzb2NyZXNwX2llc19sZW4gPSBsZW4gLSAocG9zIC0gKHU4ICopIG1nbXQpOwotCWlmc3RhLT5hc3NvY3Jlc3BfaWVzID0ga21hbGxvYyhpZnN0YS0+YXNzb2NyZXNwX2llc19sZW4sIEdGUF9LRVJORUwpOwotCWlmIChpZnN0YS0+YXNzb2NyZXNwX2llcykKLQkJbWVtY3B5KGlmc3RhLT5hc3NvY3Jlc3BfaWVzLCBwb3MsIGlmc3RhLT5hc3NvY3Jlc3BfaWVzX2xlbik7CisJa2ZyZWUoaWZtZ2QtPmFzc29jcmVzcF9pZXMpOworCWlmbWdkLT5hc3NvY3Jlc3BfaWVzX2xlbiA9IGxlbiAtIChwb3MgLSAodTggKikgbWdtdCk7CisJaWZtZ2QtPmFzc29jcmVzcF9pZXMgPSBrbWFsbG9jKGlmbWdkLT5hc3NvY3Jlc3BfaWVzX2xlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKGlmbWdkLT5hc3NvY3Jlc3BfaWVzKQorCQltZW1jcHkoaWZtZ2QtPmFzc29jcmVzcF9pZXMsIHBvcywgaWZtZ2QtPmFzc29jcmVzcF9pZXNfbGVuKTsKIAogCXJjdV9yZWFkX2xvY2soKTsKIAogCS8qIEFkZCBTVEEgZW50cnkgZm9yIHRoZSBBUCAqLwotCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgaWZzdGEtPmJzc2lkKTsKKwlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIGlmbWdkLT5ic3NpZCk7CiAJaWYgKCFzdGEpIHsKLQkJc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzczsKLQogCQluZXdzdGEgPSB0cnVlOwogCi0JCXN0YSA9IHN0YV9pbmZvX2FsbG9jKHNkYXRhLCBpZnN0YS0+YnNzaWQsIEdGUF9BVE9NSUMpOworCQlzdGEgPSBzdGFfaW5mb19hbGxvYyhzZGF0YSwgaWZtZ2QtPmJzc2lkLCBHRlBfQVRPTUlDKTsKIAkJaWYgKCFzdGEpIHsKIAkJCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIGFsbG9jIFNUQSBlbnRyeSBmb3IiCiAJCQkgICAgICAgIiB0aGUgQVBcbiIsIHNkYXRhLT5kZXYtPm5hbWUpOwogCQkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCQlyZXR1cm47CiAJCX0KLQkJYnNzID0gaWVlZTgwMjExX3J4X2Jzc19nZXQobG9jYWwsIGlmc3RhLT5ic3NpZCwKLQkJCQkJICAgbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+Y2VudGVyX2ZyZXEsCi0JCQkJCSAgIGlmc3RhLT5zc2lkLCBpZnN0YS0+c3NpZF9sZW4pOwotCQlpZiAoYnNzKSB7Ci0JCQlzdGEtPmxhc3Rfc2lnbmFsID0gYnNzLT5zaWduYWw7Ci0JCQlzdGEtPmxhc3RfcXVhbCA9IGJzcy0+cXVhbDsKLQkJCXN0YS0+bGFzdF9ub2lzZSA9IGJzcy0+bm9pc2U7Ci0JCQlpZWVlODAyMTFfcnhfYnNzX3B1dChsb2NhbCwgYnNzKTsKLQkJfQogCiAJCS8qIHVwZGF0ZSBuZXcgc3RhIHdpdGggaXRzIGxhc3QgcnggYWN0aXZpdHkgKi8KIAkJc3RhLT5sYXN0X3J4ID0gamlmZmllczsKQEAgLTEzNjcsNyArMTMwMyw4IEBACiAJZWxzZQogCQlzZGF0YS0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TREFUQV9PUEVSQVRJTkdfR01PREU7CiAKLQlpZiAoZWxlbXMuaHRfY2FwX2VsZW0pCisJLyogSWYgVEtJUC9XRVAgaXMgdXNlZCwgbm8gbmVlZCB0byBwYXJzZSBBUCdzIEhUIGNhcGFiaWxpdGllcyAqLworCWlmIChlbGVtcy5odF9jYXBfZWxlbSAmJiAhKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfVEtJUF9XRVBfVVNFRCkpCiAJCWllZWU4MDIxMV9odF9jYXBfaWVfdG9fc3RhX2h0X2NhcChzYmFuZCwKIAkJCQllbGVtcy5odF9jYXBfZWxlbSwgJnN0YS0+c3RhLmh0X2NhcCk7CiAKQEAgLTEzNzUsNiArMTMxMiw5IEBACiAKIAlyYXRlX2NvbnRyb2xfcmF0ZV9pbml0KHN0YSk7CiAKKwlpZiAoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9NRlBfRU5BQkxFRCkKKwkJc2V0X3N0YV9mbGFncyhzdGEsIFdMQU5fU1RBX01GUCk7CisKIAlpZiAoZWxlbXMud21tX3BhcmFtKQogCQlzZXRfc3RhX2ZsYWdzKHN0YSwgV0xBTl9TVEFfV01FKTsKIApAQCAtMTM5MSwxMSArMTMzMSwxMiBAQAogCXJjdV9yZWFkX3VubG9jaygpOwogCiAJaWYgKGVsZW1zLndtbV9wYXJhbSkKLQkJaWVlZTgwMjExX3N0YV93bW1fcGFyYW1zKGxvY2FsLCBpZnN0YSwgZWxlbXMud21tX3BhcmFtLAorCQlpZWVlODAyMTFfc3RhX3dtbV9wYXJhbXMobG9jYWwsIGlmbWdkLCBlbGVtcy53bW1fcGFyYW0sCiAJCQkJCSBlbGVtcy53bW1fcGFyYW1fbGVuKTsKIAogCWlmIChlbGVtcy5odF9pbmZvX2VsZW0gJiYgZWxlbXMud21tX3BhcmFtICYmCi0JICAgIChpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1dNTV9FTkFCTEVEKSkKKwkgICAgKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfV01NX0VOQUJMRUQpICYmCisJICAgICEoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9US0lQX1dFUF9VU0VEKSkKIAkJY2hhbmdlZCB8PSBpZWVlODAyMTFfZW5hYmxlX2h0KHNkYXRhLCBlbGVtcy5odF9pbmZvX2VsZW0sCiAJCQkJCSAgICAgICBhcF9odF9jYXBfZmxhZ3MpOwogCkBAIC0xNDAzLDEzNiArMTM0NCwxMiBAQAogCSAqIGllZWU4MDIxMV9zZXRfYXNzb2NpYXRlZCgpIHdpbGwgdGVsbCB0aGUgZHJpdmVyICovCiAJYnNzX2NvbmYtPmFpZCA9IGFpZDsKIAlic3NfY29uZi0+YXNzb2NfY2FwYWJpbGl0eSA9IGNhcGFiX2luZm87Ci0JaWVlZTgwMjExX3NldF9hc3NvY2lhdGVkKHNkYXRhLCBpZnN0YSwgY2hhbmdlZCk7CisJaWVlZTgwMjExX3NldF9hc3NvY2lhdGVkKHNkYXRhLCBjaGFuZ2VkKTsKIAotCWllZWU4MDIxMV9hc3NvY2lhdGVkKHNkYXRhLCBpZnN0YSk7CisJaWVlZTgwMjExX2Fzc29jaWF0ZWQoc2RhdGEpOwogfQogCiAKLXN0YXRpYyBpbnQgaWVlZTgwMjExX3N0YV9qb2luX2lic3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJICAgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhLAotCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfYnNzICpic3MpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7Ci0JaW50IHJlcywgcmF0ZXMsIGksIGo7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQ7Ci0JdTggKnBvczsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKLQl1bmlvbiBpd3JlcV9kYXRhIHdycXU7Ci0KLQlza2IgPSBkZXZfYWxsb2Nfc2tiKGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSArIDQwMCk7Ci0JaWYgKCFza2IpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgYnVmZmVyIGZvciBwcm9iZSAiCi0JCSAgICAgICAicmVzcG9uc2VcbiIsIHNkYXRhLT5kZXYtPm5hbWUpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlzYmFuZCA9IGxvY2FsLT5ody53aXBoeS0+YmFuZHNbbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+YmFuZF07Ci0KLQkvKiBSZW1vdmUgcG9zc2libGUgU1RBIGVudHJpZXMgZnJvbSBvdGhlciBJQlNTIG5ldHdvcmtzLiAqLwotCXN0YV9pbmZvX2ZsdXNoX2RlbGF5ZWQoc2RhdGEpOwotCi0JaWYgKGxvY2FsLT5vcHMtPnJlc2V0X3RzZikgewotCQkvKiBSZXNldCBvd24gVFNGIHRvIGFsbG93IHRpbWUgc3luY2hyb25pemF0aW9uIHdvcmsuICovCi0JCWxvY2FsLT5vcHMtPnJlc2V0X3RzZihsb2NhbF90b19odyhsb2NhbCkpOwotCX0KLQltZW1jcHkoaWZzdGEtPmJzc2lkLCBic3MtPmJzc2lkLCBFVEhfQUxFTik7Ci0JcmVzID0gaWVlZTgwMjExX2lmX2NvbmZpZyhzZGF0YSwgSUVFRTgwMjExX0lGQ0NfQlNTSUQpOwotCWlmIChyZXMpCi0JCXJldHVybiByZXM7Ci0KLQlsb2NhbC0+aHcuY29uZi5iZWFjb25faW50ID0gYnNzLT5iZWFjb25faW50ID49IDEwID8gYnNzLT5iZWFjb25faW50IDogMTA7Ci0KLQlzZGF0YS0+ZHJvcF91bmVuY3J5cHRlZCA9IGJzcy0+Y2FwYWJpbGl0eSAmCi0JCVdMQU5fQ0FQQUJJTElUWV9QUklWQUNZID8gMSA6IDA7Ci0KLQlyZXMgPSBpZWVlODAyMTFfc2V0X2ZyZXEoc2RhdGEsIGJzcy0+ZnJlcSk7Ci0KLQlpZiAocmVzKQotCQlyZXR1cm4gcmVzOwotCi0JLyogQnVpbGQgSUJTUyBwcm9iZSByZXNwb25zZSAqLwotCi0Jc2tiX3Jlc2VydmUoc2tiLCBsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20pOwotCi0JbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikKLQkJc2tiX3B1dChza2IsIDI0ICsgc2l6ZW9mKG1nbXQtPnUuYmVhY29uKSk7Ci0JbWVtc2V0KG1nbXQsIDAsIDI0ICsgc2l6ZW9mKG1nbXQtPnUuYmVhY29uKSk7Ci0JbWdtdC0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9NR01UIHwKLQkJCQkJCUlFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVNQKTsKLQltZW1zZXQobWdtdC0+ZGEsIDB4ZmYsIEVUSF9BTEVOKTsKLQltZW1jcHkobWdtdC0+c2EsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7Ci0JbWVtY3B5KG1nbXQtPmJzc2lkLCBpZnN0YS0+YnNzaWQsIEVUSF9BTEVOKTsKLQltZ210LT51LmJlYWNvbi5iZWFjb25faW50ID0KLQkJY3B1X3RvX2xlMTYobG9jYWwtPmh3LmNvbmYuYmVhY29uX2ludCk7Ci0JbWdtdC0+dS5iZWFjb24udGltZXN0YW1wID0gY3B1X3RvX2xlNjQoYnNzLT50aW1lc3RhbXApOwotCW1nbXQtPnUuYmVhY29uLmNhcGFiX2luZm8gPSBjcHVfdG9fbGUxNihic3MtPmNhcGFiaWxpdHkpOwotCi0JcG9zID0gc2tiX3B1dChza2IsIDIgKyBpZnN0YS0+c3NpZF9sZW4pOwotCSpwb3MrKyA9IFdMQU5fRUlEX1NTSUQ7Ci0JKnBvcysrID0gaWZzdGEtPnNzaWRfbGVuOwotCW1lbWNweShwb3MsIGlmc3RhLT5zc2lkLCBpZnN0YS0+c3NpZF9sZW4pOwotCi0JcmF0ZXMgPSBic3MtPnN1cHBfcmF0ZXNfbGVuOwotCWlmIChyYXRlcyA+IDgpCi0JCXJhdGVzID0gODsKLQlwb3MgPSBza2JfcHV0KHNrYiwgMiArIHJhdGVzKTsKLQkqcG9zKysgPSBXTEFOX0VJRF9TVVBQX1JBVEVTOwotCSpwb3MrKyA9IHJhdGVzOwotCW1lbWNweShwb3MsIGJzcy0+c3VwcF9yYXRlcywgcmF0ZXMpOwotCi0JaWYgKGJzcy0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haKSB7Ci0JCXBvcyA9IHNrYl9wdXQoc2tiLCAyICsgMSk7Ci0JCSpwb3MrKyA9IFdMQU5fRUlEX0RTX1BBUkFNUzsKLQkJKnBvcysrID0gMTsKLQkJKnBvcysrID0gaWVlZTgwMjExX2ZyZXF1ZW5jeV90b19jaGFubmVsKGJzcy0+ZnJlcSk7Ci0JfQotCi0JcG9zID0gc2tiX3B1dChza2IsIDIgKyAyKTsKLQkqcG9zKysgPSBXTEFOX0VJRF9JQlNTX1BBUkFNUzsKLQkqcG9zKysgPSAyOwotCS8qIEZJWDogc2V0IEFUSU0gd2luZG93IGJhc2VkIG9uIHNjYW4gcmVzdWx0cyAqLwotCSpwb3MrKyA9IDA7Ci0JKnBvcysrID0gMDsKLQotCWlmIChic3MtPnN1cHBfcmF0ZXNfbGVuID4gOCkgewotCQlyYXRlcyA9IGJzcy0+c3VwcF9yYXRlc19sZW4gLSA4OwotCQlwb3MgPSBza2JfcHV0KHNrYiwgMiArIHJhdGVzKTsKLQkJKnBvcysrID0gV0xBTl9FSURfRVhUX1NVUFBfUkFURVM7Ci0JCSpwb3MrKyA9IHJhdGVzOwotCQltZW1jcHkocG9zLCAmYnNzLT5zdXBwX3JhdGVzWzhdLCByYXRlcyk7Ci0JfQotCi0JaWZzdGEtPnByb2JlX3Jlc3AgPSBza2I7Ci0KLQlpZWVlODAyMTFfaWZfY29uZmlnKHNkYXRhLCBJRUVFODAyMTFfSUZDQ19CRUFDT04pOwotCi0KLQlyYXRlcyA9IDA7Ci0Jc2JhbmQgPSBsb2NhbC0+aHcud2lwaHktPmJhbmRzW2xvY2FsLT5ody5jb25mLmNoYW5uZWwtPmJhbmRdOwotCWZvciAoaSA9IDA7IGkgPCBic3MtPnN1cHBfcmF0ZXNfbGVuOyBpKyspIHsKLQkJaW50IGJpdHJhdGUgPSAoYnNzLT5zdXBwX3JhdGVzW2ldICYgMHg3ZikgKiA1OwotCQlmb3IgKGogPSAwOyBqIDwgc2JhbmQtPm5fYml0cmF0ZXM7IGorKykKLQkJCWlmIChzYmFuZC0+Yml0cmF0ZXNbal0uYml0cmF0ZSA9PSBiaXRyYXRlKQotCQkJCXJhdGVzIHw9IEJJVChqKTsKLQl9Ci0JaWZzdGEtPnN1cHBfcmF0ZXNfYml0c1tsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kXSA9IHJhdGVzOwotCi0JaWVlZTgwMjExX3N0YV9kZWZfd21tX3BhcmFtcyhzZGF0YSwgYnNzKTsKLQotCWlmc3RhLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9JQlNTX0pPSU5FRDsKLQltb2RfdGltZXIoJmlmc3RhLT50aW1lciwgamlmZmllcyArIElFRUU4MDIxMV9JQlNTX01FUkdFX0lOVEVSVkFMKTsKLQotCWllZWU4MDIxMV9sZWRfYXNzb2MobG9jYWwsIHRydWUpOwotCi0JbWVtc2V0KCZ3cnF1LCAwLCBzaXplb2Yod3JxdSkpOwotCW1lbWNweSh3cnF1LmFwX2FkZHIuc2FfZGF0YSwgYnNzLT5ic3NpZCwgRVRIX0FMRU4pOwotCXdpcmVsZXNzX3NlbmRfZXZlbnQoc2RhdGEtPmRldiwgU0lPQ0dJV0FQLCAmd3JxdSwgTlVMTCk7Ci0KLQlyZXR1cm4gcmVzOwotfQotCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfYnNzX2luZm8oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsCiAJCQkJICBzaXplX3QgbGVuLApAQCAtMTU0MywxMSArMTM2MCw3IEBACiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CiAJaW50IGZyZXE7CiAJc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzczsKLQlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWw7Ci0JdTY0IGJlYWNvbl90aW1lc3RhbXAsIHJ4X3RpbWVzdGFtcDsKLQl1NjQgc3VwcF9yYXRlcyA9IDA7Ci0JZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kID0gcnhfc3RhdHVzLT5iYW5kOwogCiAJaWYgKGVsZW1zLT5kc19wYXJhbXMgJiYgZWxlbXMtPmRzX3BhcmFtc19sZW4gPT0gMSkKIAkJZnJlcSA9IGllZWU4MDIxMV9jaGFubmVsX3RvX2ZyZXF1ZW5jeShlbGVtcy0+ZHNfcGFyYW1zWzBdKTsKQEAgLTE1NTksMTEyICsxMzcyLDE2IEBACiAJaWYgKCFjaGFubmVsIHx8IGNoYW5uZWwtPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fRElTQUJMRUQpCiAJCXJldHVybjsKIAotCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgJiYgZWxlbXMtPnN1cHBfcmF0ZXMgJiYKLQkgICAgbWVtY21wKG1nbXQtPmJzc2lkLCBzZGF0YS0+dS5zdGEuYnNzaWQsIEVUSF9BTEVOKSA9PSAwKSB7Ci0JCXN1cHBfcmF0ZXMgPSBpZWVlODAyMTFfc3RhX2dldF9yYXRlcyhsb2NhbCwgZWxlbXMsIGJhbmQpOwotCi0JCXJjdV9yZWFkX2xvY2soKTsKLQotCQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIG1nbXQtPnNhKTsKLQkJaWYgKHN0YSkgewotCQkJdTY0IHByZXZfcmF0ZXM7Ci0KLQkJCXByZXZfcmF0ZXMgPSBzdGEtPnN0YS5zdXBwX3JhdGVzW2JhbmRdOwotCQkJLyogbWFrZSBzdXJlIG1hbmRhdG9yeSByYXRlcyBhcmUgYWx3YXlzIGFkZGVkICovCi0JCQlzdGEtPnN0YS5zdXBwX3JhdGVzW2JhbmRdID0gc3VwcF9yYXRlcyB8Ci0JCQkJaWVlZTgwMjExX21hbmRhdG9yeV9yYXRlcyhsb2NhbCwgYmFuZCk7Ci0KLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRwotCQkJaWYgKHN0YS0+c3RhLnN1cHBfcmF0ZXNbYmFuZF0gIT0gcHJldl9yYXRlcykKLQkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHVwZGF0ZWQgc3VwcF9yYXRlcyBzZXQgIgotCQkJCSAgICAiZm9yICVwTSBiYXNlZCBvbiBiZWFjb24gaW5mbyAoMHglbGx4IHwgIgotCQkJCSAgICAiMHglbGx4IC0+IDB4JWxseClcbiIsCi0JCQkJICAgIHNkYXRhLT5kZXYtPm5hbWUsCi0JCQkJICAgIHN0YS0+c3RhLmFkZHIsCi0JCQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHByZXZfcmF0ZXMsCi0JCQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHN1cHBfcmF0ZXMsCi0JCQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHN0YS0+c3RhLnN1cHBfcmF0ZXNbYmFuZF0pOwotI2VuZGlmCi0JCX0gZWxzZSB7Ci0JCQlpZWVlODAyMTFfaWJzc19hZGRfc3RhKHNkYXRhLCBtZ210LT5ic3NpZCwgbWdtdC0+c2EsIHN1cHBfcmF0ZXMpOwotCQl9Ci0KLQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JfQotCiAJYnNzID0gaWVlZTgwMjExX2Jzc19pbmZvX3VwZGF0ZShsb2NhbCwgcnhfc3RhdHVzLCBtZ210LCBsZW4sIGVsZW1zLAotCQkJCQlmcmVxLCBiZWFjb24pOworCQkJCQljaGFubmVsLCBiZWFjb24pOwogCWlmICghYnNzKQogCQlyZXR1cm47CiAKLQkvKiB3YXMganVzdCB1cGRhdGVkIGluIGllZWU4MDIxMV9ic3NfaW5mb191cGRhdGUgKi8KLQliZWFjb25fdGltZXN0YW1wID0gYnNzLT50aW1lc3RhbXA7Ci0KLQkvKgotCSAqIEluIFNUQSBtb2RlLCB0aGUgcmVtYWluaW5nIHBhcmFtZXRlcnMgc2hvdWxkIG5vdCBiZSBvdmVycmlkZGVuCi0JICogYnkgYmVhY29ucyBiZWNhdXNlIHRoZXkncmUgbm90IG5lY2Vzc2FyaWx5IGFjY3VyYXRlIHRoZXJlLgotCSAqLwotCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgJiYKLQkgICAgYnNzLT5sYXN0X3Byb2JlX3Jlc3AgJiYgYmVhY29uKSB7Ci0JCWllZWU4MDIxMV9yeF9ic3NfcHV0KGxvY2FsLCBic3MpOwotCQlyZXR1cm47Ci0JfQotCi0JLyogY2hlY2sgaWYgd2UgbmVlZCB0byBtZXJnZSBJQlNTICovCi0JaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQyAmJiBiZWFjb24gJiYKLQkgICAgYnNzLT5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX0lCU1MgJiYKLQkgICAgYnNzLT5mcmVxID09IGxvY2FsLT5vcGVyX2NoYW5uZWwtPmNlbnRlcl9mcmVxICYmCi0JICAgIGVsZW1zLT5zc2lkX2xlbiA9PSBzZGF0YS0+dS5zdGEuc3NpZF9sZW4gJiYKLQkgICAgbWVtY21wKGVsZW1zLT5zc2lkLCBzZGF0YS0+dS5zdGEuc3NpZCwKLQkJCQlzZGF0YS0+dS5zdGEuc3NpZF9sZW4pID09IDApIHsKLQkJaWYgKHJ4X3N0YXR1cy0+ZmxhZyAmIFJYX0ZMQUdfVFNGVCkgewotCQkJLyogaW4gb3JkZXIgZm9yIGNvcnJlY3QgSUJTUyBtZXJnaW5nIHdlIG5lZWQgbWFjdGltZQotCQkJICoKLQkJCSAqIHNpbmNlIG1hY3RpbWUgaXMgZGVmaW5lZCBhcyB0aGUgdGltZSB0aGUgZmlyc3QgZGF0YQotCQkJICogc3ltYm9sIG9mIHRoZSBmcmFtZSBoaXRzIHRoZSBQSFksIGFuZCB0aGUgdGltZXN0YW1wCi0JCQkgKiBvZiB0aGUgYmVhY29uIGlzIGRlZmluZWQgYXMgInRoZSB0aW1lIHRoYXQgdGhlIGRhdGEKLQkJCSAqIHN5bWJvbCBjb250YWluaW5nIHRoZSBmaXJzdCBiaXQgb2YgdGhlIHRpbWVzdGFtcCBpcwotCQkJICogdHJhbnNtaXR0ZWQgdG8gdGhlIFBIWSBwbHVzIHRoZSB0cmFuc21pdHRpbmcgU1RB4oCZcwotCQkJICogZGVsYXlzIHRocm91Z2ggaXRzIGxvY2FsIFBIWSBmcm9tIHRoZSBNQUMtUEhZCi0JCQkgKiBpbnRlcmZhY2UgdG8gaXRzIGludGVyZmFjZSB3aXRoIHRoZSBXTSIKLQkJCSAqICg4MDIuMTEgMTEuMS4yKSAtIGVxdWFscyB0aGUgdGltZSB0aGlzIGJpdCBhcnJpdmVzIGF0Ci0JCQkgKiB0aGUgcmVjZWl2ZXIgLSB3ZSBoYXZlIHRvIHRha2UgaW50byBhY2NvdW50IHRoZQotCQkJICogb2Zmc2V0IGJldHdlZW4gdGhlIHR3by4KLQkJCSAqIGUuZzogYXQgMSBNQml0IHRoYXQgbWVhbnMgbWFjdGltZSBpcyAxOTIgdXNlYyBlYXJsaWVyCi0JCQkgKiAoPTI0IGJ5dGVzICogOCB1c2Vjcy9ieXRlKSB0aGFuIHRoZSBiZWFjb24gdGltZXN0YW1wLgotCQkJICovCi0JCQlpbnQgcmF0ZTsKLQkJCWlmIChyeF9zdGF0dXMtPmZsYWcgJiBSWF9GTEFHX0hUKSB7Ci0JCQkJcmF0ZSA9IDY1OyAvKiBUT0RPOiBIVCByYXRlcyAqLwotCQkJfSBlbHNlIHsKLQkJCQlyYXRlID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tiYW5kXS0+Ci0JCQkJCWJpdHJhdGVzW3J4X3N0YXR1cy0+cmF0ZV9pZHhdLmJpdHJhdGU7Ci0JCQl9Ci0JCQlyeF90aW1lc3RhbXAgPSByeF9zdGF0dXMtPm1hY3RpbWUgKyAoMjQgKiA4ICogMTAgLyByYXRlKTsKLQkJfSBlbHNlIGlmIChsb2NhbCAmJiBsb2NhbC0+b3BzICYmIGxvY2FsLT5vcHMtPmdldF90c2YpCi0JCQkvKiBzZWNvbmQgYmVzdCBvcHRpb246IGdldCBjdXJyZW50IFRTRiAqLwotCQkJcnhfdGltZXN0YW1wID0gbG9jYWwtPm9wcy0+Z2V0X3RzZihsb2NhbF90b19odyhsb2NhbCkpOwotCQllbHNlCi0JCQkvKiBjYW4ndCBtZXJnZSB3aXRob3V0IGtub3dpbmcgdGhlIFRTRiAqLwotCQkJcnhfdGltZXN0YW1wID0gLTFMTFU7Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcKLQkJcHJpbnRrKEtFUk5fREVCVUcgIlJYIGJlYWNvbiBTQT0lcE0gQlNTSUQ9IgotCQkgICAgICAgIiVwTSBUU0Y9MHglbGx4IEJDTj0weCVsbHggZGlmZj0lbGxkIEAlbHVcbiIsCi0JCSAgICAgICBtZ210LT5zYSwgbWdtdC0+YnNzaWQsCi0JCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXJ4X3RpbWVzdGFtcCwKLQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYmVhY29uX3RpbWVzdGFtcCwKLQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpKHJ4X3RpbWVzdGFtcCAtIGJlYWNvbl90aW1lc3RhbXApLAotCQkgICAgICAgamlmZmllcyk7Ci0jZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcgKi8KLQkJaWYgKGJlYWNvbl90aW1lc3RhbXAgPiByeF90aW1lc3RhbXApIHsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRwotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBiZWFjb24gVFNGIGhpZ2hlciB0aGFuICIKLQkJCSAgICAgICAibG9jYWwgVFNGIC0gSUJTUyBtZXJnZSB3aXRoIEJTU0lEICVwTVxuIiwKLQkJCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBtZ210LT5ic3NpZCk7Ci0jZW5kaWYKLQkJCWllZWU4MDIxMV9zdGFfam9pbl9pYnNzKHNkYXRhLCAmc2RhdGEtPnUuc3RhLCBic3MpOwotCQkJaWVlZTgwMjExX2lic3NfYWRkX3N0YShzZGF0YSwgbWdtdC0+YnNzaWQsIG1nbXQtPnNhLCBzdXBwX3JhdGVzKTsKLQkJfQorCWlmIChlbGVtcy0+Y2hfc3dpdGNoX2VsZW0gJiYgKGVsZW1zLT5jaF9zd2l0Y2hfZWxlbV9sZW4gPT0gMykgJiYKKwkgICAgKG1lbWNtcChtZ210LT5ic3NpZCwgc2RhdGEtPnUubWdkLmJzc2lkLCBFVEhfQUxFTikgPT0gMCkpIHsKKwkJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsX3N3X2llICpzd19lbGVtID0KKwkJCShzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWxfc3dfaWUgKillbGVtcy0+Y2hfc3dpdGNoX2VsZW07CisJCWllZWU4MDIxMV9wcm9jZXNzX2NoYW5zd2l0Y2goc2RhdGEsIHN3X2VsZW0sIGJzcyk7CiAJfQogCiAJaWVlZTgwMjExX3J4X2Jzc19wdXQobG9jYWwsIGJzcyk7CkBAIC0xNjc4LDcgKzEzOTUsNiBAQAogewogCXNpemVfdCBiYXNlbGVuOwogCXN0cnVjdCBpZWVlODAyXzExX2VsZW1zIGVsZW1zOwotCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSA9ICZzZGF0YS0+dS5zdGE7CiAKIAlpZiAobWVtY21wKG1nbXQtPmRhLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pKQogCQlyZXR1cm47IC8qIGlnbm9yZSBQcm9iZVJlc3AgdG8gZm9yZWlnbiBhZGRyZXNzICovCkBAIC0xNjk0LDI1ICsxNDEwLDI0IEBACiAKIAkvKiBkaXJlY3QgcHJvYmUgbWF5IGJlIHBhcnQgb2YgdGhlIGFzc29jaWF0aW9uIGZsb3cgKi8KIAlpZiAodGVzdF9hbmRfY2xlYXJfYml0KElFRUU4MDIxMV9TVEFfUkVRX0RJUkVDVF9QUk9CRSwKLQkJCQkJCQkmaWZzdGEtPnJlcXVlc3QpKSB7CisJICAgICZzZGF0YS0+dS5tZ2QucmVxdWVzdCkpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzIGRpcmVjdCBwcm9iZSByZXNwb25kZWRcbiIsCiAJCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lKTsKLQkJaWVlZTgwMjExX2F1dGhlbnRpY2F0ZShzZGF0YSwgaWZzdGEpOworCQlpZWVlODAyMTFfYXV0aGVudGljYXRlKHNkYXRhKTsKIAl9CiB9CiAKLQogc3RhdGljIHZvaWQgaWVlZTgwMjExX3J4X21nbXRfYmVhY29uKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LAogCQkJCSAgICAgc2l6ZV90IGxlbiwKIAkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMpCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhOworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2Q7CiAJc2l6ZV90IGJhc2VsZW47CiAJc3RydWN0IGllZWU4MDJfMTFfZWxlbXMgZWxlbXM7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CiAJdTMyIGNoYW5nZWQgPSAwOwotCWJvb2wgZXJwX3ZhbGlkOworCWJvb2wgZXJwX3ZhbGlkLCBkaXJlY3RlZF90aW07CiAJdTggZXJwX3ZhbHVlID0gMDsKIAogCS8qIFByb2Nlc3MgYmVhY29uIGZyb20gdGhlIGN1cnJlbnQgQlNTICovCkBAIC0xNzI2LDE1ICsxNDQxLDQzIEBACiAKIAlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCiAJCXJldHVybjsKLQlpZnN0YSA9ICZzZGF0YS0+dS5zdGE7CiAKLQlpZiAoIShpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FTU09DSUFURUQpIHx8Ci0JICAgIG1lbWNtcChpZnN0YS0+YnNzaWQsIG1nbXQtPmJzc2lkLCBFVEhfQUxFTikgIT0gMCkKKwlpZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CisKKwlpZiAoIShpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FTU09DSUFURUQpIHx8CisJICAgIG1lbWNtcChpZm1nZC0+YnNzaWQsIG1nbXQtPmJzc2lkLCBFVEhfQUxFTikgIT0gMCkKIAkJcmV0dXJuOwogCi0JaWVlZTgwMjExX3N0YV93bW1fcGFyYW1zKGxvY2FsLCBpZnN0YSwgZWxlbXMud21tX3BhcmFtLAorCWlmIChyeF9zdGF0dXMtPmZyZXEgIT0gbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+Y2VudGVyX2ZyZXEpCisJCXJldHVybjsKKworCWllZWU4MDIxMV9zdGFfd21tX3BhcmFtcyhsb2NhbCwgaWZtZ2QsIGVsZW1zLndtbV9wYXJhbSwKIAkJCQkgZWxlbXMud21tX3BhcmFtX2xlbik7CiAKKwlpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1BTX05VTExGVU5DX1NUQUNLKSB7CisJCWRpcmVjdGVkX3RpbSA9IGllZWU4MDIxMV9jaGVja190aW0oJmVsZW1zLCBpZm1nZC0+YWlkKTsKKworCQlpZiAoZGlyZWN0ZWRfdGltKSB7CisJCQlpZiAobG9jYWwtPmh3LmNvbmYuZHluYW1pY19wc190aW1lb3V0ID4gMCkgeworCQkJCWxvY2FsLT5ody5jb25mLmZsYWdzICY9IH5JRUVFODAyMTFfQ09ORl9QUzsKKwkJCQlpZWVlODAyMTFfaHdfY29uZmlnKGxvY2FsLAorCQkJCQkJICAgIElFRUU4MDIxMV9DT05GX0NIQU5HRV9QUyk7CisJCQkJaWVlZTgwMjExX3NlbmRfbnVsbGZ1bmMobG9jYWwsIHNkYXRhLCAwKTsKKwkJCX0gZWxzZSB7CisJCQkJbG9jYWwtPnBzcG9sbGluZyA9IHRydWU7CisKKwkJCQkvKgorCQkJCSAqIEhlcmUgaXMgYXNzdW1lZCB0aGF0IHRoZSBkcml2ZXIgd2lsbCBiZQorCQkJCSAqIGFibGUgdG8gc2VuZCBwcy1wb2xsIGZyYW1lIGFuZCByZWNlaXZlIGEKKwkJCQkgKiByZXNwb25zZSBldmVuIHRob3VnaCBwb3dlciBzYXZlIG1vZGUgaXMKKwkJCQkgKiBlbmFibGVkLCBidXQgc29tZSBkcml2ZXJzIG1pZ2h0IHJlcXVpcmUKKwkJCQkgKiB0byBkaXNhYmxlIHBvd2VyIHNhdmUgaGVyZS4gVGhpcyBuZWVkcworCQkJCSAqIHRvIGJlIGludmVzdGlnYXRlZC4KKwkJCQkgKi8KKwkJCQlpZWVlODAyMTFfc2VuZF9wc3BvbGwobG9jYWwsIHNkYXRhKTsKKwkJCX0KKwkJfQorCX0KIAogCWlmIChlbGVtcy5lcnBfaW5mbyAmJiBlbGVtcy5lcnBfaW5mb19sZW4gPj0gMSkgewogCQllcnBfdmFsaWQgPSB0cnVlOwpAQCAtMTc0NywxNCArMTQ5MCwxNSBAQAogCQkJZXJwX3ZhbGlkLCBlcnBfdmFsdWUpOwogCiAKLQlpZiAoZWxlbXMuaHRfY2FwX2VsZW0gJiYgZWxlbXMuaHRfaW5mb19lbGVtICYmIGVsZW1zLndtbV9wYXJhbSkgeworCWlmIChlbGVtcy5odF9jYXBfZWxlbSAmJiBlbGVtcy5odF9pbmZvX2VsZW0gJiYgZWxlbXMud21tX3BhcmFtICYmCisJICAgICEoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9US0lQX1dFUF9VU0VEKSkgewogCQlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKIAkJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CiAJCXUxNiBhcF9odF9jYXBfZmxhZ3M7CiAKIAkJcmN1X3JlYWRfbG9jaygpOwogCi0JCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgaWZzdGEtPmJzc2lkKTsKKwkJc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBpZm1nZC0+YnNzaWQpOwogCQlpZiAoIXN0YSkgewogCQkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCQlyZXR1cm47CkBAIC0xNzc4LDkyICsxNTIyLDI4IEBACiAJCSAqIGZvciB0aGUgQlNTSUQgd2UgYXJlIGFzc29jaWF0ZWQgdG8gKi8KIAkJcmVndWxhdG9yeV9oaW50XzExZChsb2NhbC0+aHcud2lwaHksCiAJCQllbGVtcy5jb3VudHJ5X2VsZW0sIGVsZW1zLmNvdW50cnlfZWxlbV9sZW4pOworCisJCS8qIFRPRE86IElCU1MgYWxzbyBuZWVkcyB0aGlzICovCisJCWlmIChlbGVtcy5wd3JfY29uc3RyX2VsZW0pCisJCQlpZWVlODAyMTFfaGFuZGxlX3B3cl9jb25zdHIoc2RhdGEsCisJCQkJbGUxNl90b19jcHUobWdtdC0+dS5wcm9iZV9yZXNwLmNhcGFiX2luZm8pLAorCQkJCWVsZW1zLnB3cl9jb25zdHJfZWxlbSwKKwkJCQllbGVtcy5wd3JfY29uc3RyX2VsZW1fbGVuKTsKIAl9CiAKIAlpZWVlODAyMTFfYnNzX2luZm9fY2hhbmdlX25vdGlmeShzZGF0YSwgY2hhbmdlZCk7CiB9CiAKLQotc3RhdGljIHZvaWQgaWVlZTgwMjExX3J4X21nbXRfcHJvYmVfcmVxKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEsCi0JCQkJCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwKLQkJCQkJc2l6ZV90IGxlbiwKLQkJCQkJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cykKK2llZWU4MDIxMV9yeF9yZXN1bHQgaWVlZTgwMjExX3N0YV9yeF9tZ210KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCQkgIHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cykKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKLQlpbnQgdHhfbGFzdF9iZWFjb247Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKnJlc3A7Ci0JdTggKnBvcywgKmVuZDsKLQotCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgfHwKLQkgICAgaWZzdGEtPnN0YXRlICE9IElFRUU4MDIxMV9TVEFfTUxNRV9JQlNTX0pPSU5FRCB8fAotCSAgICBsZW4gPCAyNCArIDIgfHwgIWlmc3RhLT5wcm9iZV9yZXNwKQotCQlyZXR1cm47Ci0KLQlpZiAobG9jYWwtPm9wcy0+dHhfbGFzdF9iZWFjb24pCi0JCXR4X2xhc3RfYmVhY29uID0gbG9jYWwtPm9wcy0+dHhfbGFzdF9iZWFjb24obG9jYWxfdG9faHcobG9jYWwpKTsKLQllbHNlCi0JCXR4X2xhc3RfYmVhY29uID0gMTsKLQotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHCi0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBSWCBQcm9iZVJlcSBTQT0lcE0gREE9JXBNIEJTU0lEPSVwTSIKLQkgICAgICAgIiAodHhfbGFzdF9iZWFjb249JWQpXG4iLAotCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBtZ210LT5zYSwgbWdtdC0+ZGEsCi0JICAgICAgIG1nbXQtPmJzc2lkLCB0eF9sYXN0X2JlYWNvbik7Ci0jZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcgKi8KLQotCWlmICghdHhfbGFzdF9iZWFjb24pCi0JCXJldHVybjsKLQotCWlmIChtZW1jbXAobWdtdC0+YnNzaWQsIGlmc3RhLT5ic3NpZCwgRVRIX0FMRU4pICE9IDAgJiYKLQkgICAgbWVtY21wKG1nbXQtPmJzc2lkLCAiXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmIiwgRVRIX0FMRU4pICE9IDApCi0JCXJldHVybjsKLQotCWVuZCA9ICgodTggKikgbWdtdCkgKyBsZW47Ci0JcG9zID0gbWdtdC0+dS5wcm9iZV9yZXEudmFyaWFibGU7Ci0JaWYgKHBvc1swXSAhPSBXTEFOX0VJRF9TU0lEIHx8Ci0JICAgIHBvcyArIDIgKyBwb3NbMV0gPiBlbmQpIHsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRwotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEludmFsaWQgU1NJRCBJRSBpbiBQcm9iZVJlcSAiCi0JCSAgICAgICAiZnJvbSAlcE1cbiIsCi0JCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBtZ210LT5zYSk7Ci0jZW5kaWYKLQkJcmV0dXJuOwotCX0KLQlpZiAocG9zWzFdICE9IDAgJiYKLQkgICAgKHBvc1sxXSAhPSBpZnN0YS0+c3NpZF9sZW4gfHwKLQkgICAgIG1lbWNtcChwb3MgKyAyLCBpZnN0YS0+c3NpZCwgaWZzdGEtPnNzaWRfbGVuKSAhPSAwKSkgewotCQkvKiBJZ25vcmUgUHJvYmVSZXEgZm9yIGZvcmVpZ24gU1NJRCAqLwotCQlyZXR1cm47Ci0JfQotCi0JLyogUmVwbHkgd2l0aCBQcm9iZVJlc3AgKi8KLQlza2IgPSBza2JfY29weShpZnN0YS0+cHJvYmVfcmVzcCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFza2IpCi0JCXJldHVybjsKLQotCXJlc3AgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopIHNrYi0+ZGF0YTsKLQltZW1jcHkocmVzcC0+ZGEsIG1nbXQtPnNhLCBFVEhfQUxFTik7Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFNlbmRpbmcgUHJvYmVSZXNwIHRvICVwTVxuIiwKLQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgcmVzcC0+ZGEpOwotI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHICovCi0JaWVlZTgwMjExX3R4X3NrYihzZGF0YSwgc2tiLCAwKTsKLX0KLQotdm9pZCBpZWVlODAyMTFfc3RhX3J4X21nbXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzKQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwotCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YTsKIAlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQ7CiAJdTE2IGZjOwogCiAJaWYgKHNrYi0+bGVuIDwgMjQpCi0JCWdvdG8gZmFpbDsKLQotCWlmc3RhID0gJnNkYXRhLT51LnN0YTsKKwkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKIAogCW1nbXQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopIHNrYi0+ZGF0YTsKIAlmYyA9IGxlMTZfdG9fY3B1KG1nbXQtPmZyYW1lX2NvbnRyb2wpOwpAQCAtMTg3OCwxMTMgKzE1NTgsNjggQEAKIAljYXNlIElFRUU4MDIxMV9TVFlQRV9SRUFTU09DX1JFU1A6CiAJY2FzZSBJRUVFODAyMTFfU1RZUEVfREVBVVRIOgogCWNhc2UgSUVFRTgwMjExX1NUWVBFX0RJU0FTU09DOgotCQlza2JfcXVldWVfdGFpbCgmaWZzdGEtPnNrYl9xdWV1ZSwgc2tiKTsKLQkJcXVldWVfd29yayhsb2NhbC0+aHcud29ya3F1ZXVlLCAmaWZzdGEtPndvcmspOwotCQlyZXR1cm47CisJCXNrYl9xdWV1ZV90YWlsKCZzZGF0YS0+dS5tZ2Quc2tiX3F1ZXVlLCBza2IpOworCQlxdWV1ZV93b3JrKGxvY2FsLT5ody53b3JrcXVldWUsICZzZGF0YS0+dS5tZ2Qud29yayk7CisJCXJldHVybiBSWF9RVUVVRUQ7CiAJfQogCi0gZmFpbDoKLQlrZnJlZV9za2Ioc2tiKTsKKwlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOwogfQogCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfc3RhX3J4X3F1ZXVlZF9tZ210KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzOwotCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YTsKIAlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQ7CiAJdTE2IGZjOwogCi0JaWZzdGEgPSAmc2RhdGEtPnUuc3RhOwotCiAJcnhfc3RhdHVzID0gKHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICopIHNrYi0+Y2I7CiAJbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiLT5kYXRhOwogCWZjID0gbGUxNl90b19jcHUobWdtdC0+ZnJhbWVfY29udHJvbCk7CiAKIAlzd2l0Y2ggKGZjICYgSUVFRTgwMjExX0ZDVExfU1RZUEUpIHsKLQljYXNlIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVE6Ci0JCWllZWU4MDIxMV9yeF9tZ210X3Byb2JlX3JlcShzZGF0YSwgaWZzdGEsIG1nbXQsIHNrYi0+bGVuLAotCQkJCQkgICAgcnhfc3RhdHVzKTsKLQkJYnJlYWs7CiAJY2FzZSBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUDoKLQkJaWVlZTgwMjExX3J4X21nbXRfcHJvYmVfcmVzcChzZGF0YSwgbWdtdCwgc2tiLT5sZW4sIHJ4X3N0YXR1cyk7CisJCWllZWU4MDIxMV9yeF9tZ210X3Byb2JlX3Jlc3Aoc2RhdGEsIG1nbXQsIHNrYi0+bGVuLAorCQkJCQkgICAgIHJ4X3N0YXR1cyk7CiAJCWJyZWFrOwogCWNhc2UgSUVFRTgwMjExX1NUWVBFX0JFQUNPTjoKLQkJaWVlZTgwMjExX3J4X21nbXRfYmVhY29uKHNkYXRhLCBtZ210LCBza2ItPmxlbiwgcnhfc3RhdHVzKTsKKwkJaWVlZTgwMjExX3J4X21nbXRfYmVhY29uKHNkYXRhLCBtZ210LCBza2ItPmxlbiwKKwkJCQkJIHJ4X3N0YXR1cyk7CiAJCWJyZWFrOwogCWNhc2UgSUVFRTgwMjExX1NUWVBFX0FVVEg6Ci0JCWllZWU4MDIxMV9yeF9tZ210X2F1dGgoc2RhdGEsIGlmc3RhLCBtZ210LCBza2ItPmxlbik7CisJCWllZWU4MDIxMV9yeF9tZ210X2F1dGgoc2RhdGEsIG1nbXQsIHNrYi0+bGVuKTsKIAkJYnJlYWs7CiAJY2FzZSBJRUVFODAyMTFfU1RZUEVfQVNTT0NfUkVTUDoKLQkJaWVlZTgwMjExX3J4X21nbXRfYXNzb2NfcmVzcChzZGF0YSwgaWZzdGEsIG1nbXQsIHNrYi0+bGVuLCAwKTsKKwkJaWVlZTgwMjExX3J4X21nbXRfYXNzb2NfcmVzcChzZGF0YSwgbWdtdCwgc2tiLT5sZW4sIDApOwogCQlicmVhazsKIAljYXNlIElFRUU4MDIxMV9TVFlQRV9SRUFTU09DX1JFU1A6Ci0JCWllZWU4MDIxMV9yeF9tZ210X2Fzc29jX3Jlc3Aoc2RhdGEsIGlmc3RhLCBtZ210LCBza2ItPmxlbiwgMSk7CisJCWllZWU4MDIxMV9yeF9tZ210X2Fzc29jX3Jlc3Aoc2RhdGEsIG1nbXQsIHNrYi0+bGVuLCAxKTsKIAkJYnJlYWs7CiAJY2FzZSBJRUVFODAyMTFfU1RZUEVfREVBVVRIOgotCQlpZWVlODAyMTFfcnhfbWdtdF9kZWF1dGgoc2RhdGEsIGlmc3RhLCBtZ210LCBza2ItPmxlbik7CisJCWllZWU4MDIxMV9yeF9tZ210X2RlYXV0aChzZGF0YSwgbWdtdCwgc2tiLT5sZW4pOwogCQlicmVhazsKIAljYXNlIElFRUU4MDIxMV9TVFlQRV9ESVNBU1NPQzoKLQkJaWVlZTgwMjExX3J4X21nbXRfZGlzYXNzb2Moc2RhdGEsIGlmc3RhLCBtZ210LCBza2ItPmxlbik7CisJCWllZWU4MDIxMV9yeF9tZ210X2Rpc2Fzc29jKHNkYXRhLCBtZ210LCBza2ItPmxlbik7CiAJCWJyZWFrOwogCX0KIAogCWtmcmVlX3NrYihza2IpOwogfQogCi0KLXN0YXRpYyBpbnQgaWVlZTgwMjExX3N0YV9hY3RpdmVfaWJzcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKLQlpbnQgYWN0aXZlID0gMDsKLQlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKLQotCXJjdV9yZWFkX2xvY2soKTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHN0YSwgJmxvY2FsLT5zdGFfbGlzdCwgbGlzdCkgewotCQlpZiAoc3RhLT5zZGF0YSA9PSBzZGF0YSAmJgotCQkgICAgdGltZV9hZnRlcihzdGEtPmxhc3RfcnggKyBJRUVFODAyMTFfSUJTU19NRVJHRV9JTlRFUlZBTCwKLQkJCSAgICAgICBqaWZmaWVzKSkgewotCQkJYWN0aXZlKys7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCXJjdV9yZWFkX3VubG9jaygpOwotCi0JcmV0dXJuIGFjdGl2ZTsKLX0KLQotCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfc3RhX21lcmdlX2lic3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEpCi17Ci0JbW9kX3RpbWVyKCZpZnN0YS0+dGltZXIsIGppZmZpZXMgKyBJRUVFODAyMTFfSUJTU19NRVJHRV9JTlRFUlZBTCk7Ci0KLQlpZWVlODAyMTFfc3RhX2V4cGlyZShzZGF0YSwgSUVFRTgwMjExX0lCU1NfSU5BQ1RJVklUWV9MSU1JVCk7Ci0JaWYgKGllZWU4MDIxMV9zdGFfYWN0aXZlX2lic3Moc2RhdGEpKQotCQlyZXR1cm47Ci0KLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IE5vIGFjdGl2ZSBJQlNTIFNUQXMgLSB0cnlpbmcgdG8gc2NhbiBmb3Igb3RoZXIgIgotCSAgICAgICAiSUJTUyBuZXR3b3JrcyB3aXRoIHNhbWUgU1NJRCAobWVyZ2UpXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKLQlpZWVlODAyMTFfcmVxdWVzdF9zY2FuKHNkYXRhLCBpZnN0YS0+c3NpZCwgaWZzdGEtPnNzaWRfbGVuKTsKLX0KLQotCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfc3RhX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9CiAJCShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICopIGRhdGE7Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhID0gJnNkYXRhLT51LnN0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKIAotCXNldF9iaXQoSUVFRTgwMjExX1NUQV9SRVFfUlVOLCAmaWZzdGEtPnJlcXVlc3QpOwotCXF1ZXVlX3dvcmsobG9jYWwtPmh3LndvcmtxdWV1ZSwgJmlmc3RhLT53b3JrKTsKKwlzZXRfYml0KElFRUU4MDIxMV9TVEFfUkVRX1JVTiwgJmlmbWdkLT5yZXF1ZXN0KTsKKwlxdWV1ZV93b3JrKGxvY2FsLT5ody53b3JrcXVldWUsICZpZm1nZC0+d29yayk7CiB9CiAKLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9zdGFfcmVzZXRfYXV0aChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSkKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9zdGFfcmVzZXRfYXV0aChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKIAogCWlmIChsb2NhbC0+b3BzLT5yZXNldF90c2YpIHsKQEAgLTE5OTIsMjk4ICsxNjI3LDEwOSBAQAogCQlsb2NhbC0+b3BzLT5yZXNldF90c2YobG9jYWxfdG9faHcobG9jYWwpKTsKIAl9CiAKLQlpZnN0YS0+d21tX2xhc3RfcGFyYW1fc2V0ID0gLTE7IC8qIGFsbG93IGFueSBXTU0gdXBkYXRlICovCisJaWZtZ2QtPndtbV9sYXN0X3BhcmFtX3NldCA9IC0xOyAvKiBhbGxvdyBhbnkgV01NIHVwZGF0ZSAqLwogCiAKLQlpZiAoaWZzdGEtPmF1dGhfYWxncyAmIElFRUU4MDIxMV9BVVRIX0FMR19PUEVOKQotCQlpZnN0YS0+YXV0aF9hbGcgPSBXTEFOX0FVVEhfT1BFTjsKLQllbHNlIGlmIChpZnN0YS0+YXV0aF9hbGdzICYgSUVFRTgwMjExX0FVVEhfQUxHX1NIQVJFRF9LRVkpCi0JCWlmc3RhLT5hdXRoX2FsZyA9IFdMQU5fQVVUSF9TSEFSRURfS0VZOwotCWVsc2UgaWYgKGlmc3RhLT5hdXRoX2FsZ3MgJiBJRUVFODAyMTFfQVVUSF9BTEdfTEVBUCkKLQkJaWZzdGEtPmF1dGhfYWxnID0gV0xBTl9BVVRIX0xFQVA7CisJaWYgKGlmbWdkLT5hdXRoX2FsZ3MgJiBJRUVFODAyMTFfQVVUSF9BTEdfT1BFTikKKwkJaWZtZ2QtPmF1dGhfYWxnID0gV0xBTl9BVVRIX09QRU47CisJZWxzZSBpZiAoaWZtZ2QtPmF1dGhfYWxncyAmIElFRUU4MDIxMV9BVVRIX0FMR19TSEFSRURfS0VZKQorCQlpZm1nZC0+YXV0aF9hbGcgPSBXTEFOX0FVVEhfU0hBUkVEX0tFWTsKKwllbHNlIGlmIChpZm1nZC0+YXV0aF9hbGdzICYgSUVFRTgwMjExX0FVVEhfQUxHX0xFQVApCisJCWlmbWdkLT5hdXRoX2FsZyA9IFdMQU5fQVVUSF9MRUFQOwogCWVsc2UKLQkJaWZzdGEtPmF1dGhfYWxnID0gV0xBTl9BVVRIX09QRU47Ci0JaWZzdGEtPmF1dGhfdHJhbnNhY3Rpb24gPSAtMTsKLQlpZnN0YS0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRDsKLQlpZnN0YS0+YXNzb2Nfc2Nhbl90cmllcyA9IDA7Ci0JaWZzdGEtPmRpcmVjdF9wcm9iZV90cmllcyA9IDA7Ci0JaWZzdGEtPmF1dGhfdHJpZXMgPSAwOwotCWlmc3RhLT5hc3NvY190cmllcyA9IDA7CisJCWlmbWdkLT5hdXRoX2FsZyA9IFdMQU5fQVVUSF9PUEVOOworCWlmbWdkLT5hdXRoX3RyYW5zYWN0aW9uID0gLTE7CisJaWZtZ2QtPmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX0FTU09DSUFURUQ7CisJaWZtZ2QtPmFzc29jX3NjYW5fdHJpZXMgPSAwOworCWlmbWdkLT5kaXJlY3RfcHJvYmVfdHJpZXMgPSAwOworCWlmbWdkLT5hdXRoX3RyaWVzID0gMDsKKwlpZm1nZC0+YXNzb2NfdHJpZXMgPSAwOwogCW5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhzZGF0YS0+ZGV2KTsKIAluZXRpZl9jYXJyaWVyX29mZihzZGF0YS0+ZGV2KTsKIH0KIAotCi1zdGF0aWMgaW50IGllZWU4MDIxMV9zdGFfbWF0Y2hfc3NpZChzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEsCi0JCQkJICAgIGNvbnN0IGNoYXIgKnNzaWQsIGludCBzc2lkX2xlbikKK3N0YXRpYyBpbnQgaWVlZTgwMjExX3N0YV9jb25maWdfYXV0aChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKIHsKLQlpbnQgdG1wLCBoaWRkZW5fc3NpZDsKLQotCWlmIChzc2lkX2xlbiA9PSBpZnN0YS0+c3NpZF9sZW4gJiYKLQkgICAgIW1lbWNtcChpZnN0YS0+c3NpZCwgc3NpZCwgc3NpZF9sZW4pKQotCQlyZXR1cm4gMTsKLQotCWlmIChpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FVVE9fQlNTSURfU0VMKQotCQlyZXR1cm4gMDsKLQotCWhpZGRlbl9zc2lkID0gMTsKLQl0bXAgPSBzc2lkX2xlbjsKLQl3aGlsZSAodG1wLS0pIHsKLQkJaWYgKHNzaWRbdG1wXSAhPSAnXDAnKSB7Ci0JCQloaWRkZW5fc3NpZCA9IDA7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCWlmIChoaWRkZW5fc3NpZCAmJiAoaWZzdGEtPnNzaWRfbGVuID09IHNzaWRfbGVuIHx8IHNzaWRfbGVuID09IDApKQotCQlyZXR1cm4gMTsKLQotCWlmIChzc2lkX2xlbiA9PSAxICYmIHNzaWRbMF0gPT0gJyAnKQotCQlyZXR1cm4gMTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGllZWU4MDIxMV9zdGFfY3JlYXRlX2lic3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEpCi17CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CiAJc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzczsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKLQl1OCBic3NpZFtFVEhfQUxFTl0sICpwb3M7Ci0JaW50IGk7Ci0JaW50IHJldDsKKwl1OCAqYnNzaWQgPSBpZm1nZC0+YnNzaWQsICpzc2lkID0gaWZtZ2QtPnNzaWQ7CisJdTggc3NpZF9sZW4gPSBpZm1nZC0+c3NpZF9sZW47CisJdTE2IGNhcGFfbWFzayA9IFdMQU5fQ0FQQUJJTElUWV9FU1M7CisJdTE2IGNhcGFfdmFsID0gV0xBTl9DQVBBQklMSVRZX0VTUzsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4gPSBsb2NhbC0+b3Blcl9jaGFubmVsOwogCi0jaWYgMAotCS8qIEVhc2llciB0ZXN0aW5nLCB1c2UgZml4ZWQgQlNTSUQuICovCi0JbWVtc2V0KGJzc2lkLCAweGZlLCBFVEhfQUxFTik7Ci0jZWxzZQotCS8qIEdlbmVyYXRlIHJhbmRvbSwgbm90IGJyb2FkY2FzdCwgbG9jYWxseSBhZG1pbmlzdGVyZWQgQlNTSUQuIE1peCBpbgotCSAqIG93biBNQUMgYWRkcmVzcyB0byBtYWtlIHN1cmUgdGhhdCBkZXZpY2VzIHRoYXQgZG8gbm90IGhhdmUgcHJvcGVyCi0JICogcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgZ2V0IGRpZmZlcmVudCBCU1NJRC4gKi8KLQlnZXRfcmFuZG9tX2J5dGVzKGJzc2lkLCBFVEhfQUxFTik7Ci0JZm9yIChpID0gMDsgaSA8IEVUSF9BTEVOOyBpKyspCi0JCWJzc2lkW2ldIF49IHNkYXRhLT5kZXYtPmRldl9hZGRyW2ldOwotCWJzc2lkWzBdICY9IH4weDAxOwotCWJzc2lkWzBdIHw9IDB4MDI7Ci0jZW5kaWYKLQotCXByaW50ayhLRVJOX0RFQlVHICIlczogQ3JlYXRpbmcgbmV3IElCU1MgbmV0d29yaywgQlNTSUQgJXBNXG4iLAotCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBic3NpZCk7Ci0KLQlic3MgPSBpZWVlODAyMTFfcnhfYnNzX2FkZChsb2NhbCwgYnNzaWQsCi0JCQkJICAgbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+Y2VudGVyX2ZyZXEsCi0JCQkJICAgc2RhdGEtPnUuc3RhLnNzaWQsIHNkYXRhLT51LnN0YS5zc2lkX2xlbik7Ci0JaWYgKCFic3MpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JYnNzLT5iYW5kID0gbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+YmFuZDsKLQlzYmFuZCA9IGxvY2FsLT5ody53aXBoeS0+YmFuZHNbYnNzLT5iYW5kXTsKLQotCWlmIChsb2NhbC0+aHcuY29uZi5iZWFjb25faW50ID09IDApCi0JCWxvY2FsLT5ody5jb25mLmJlYWNvbl9pbnQgPSAxMDA7Ci0JYnNzLT5iZWFjb25faW50ID0gbG9jYWwtPmh3LmNvbmYuYmVhY29uX2ludDsKLQlic3MtPmxhc3RfdXBkYXRlID0gamlmZmllczsKLQlic3MtPmNhcGFiaWxpdHkgPSBXTEFOX0NBUEFCSUxJVFlfSUJTUzsKLQotCWlmIChzZGF0YS0+ZGVmYXVsdF9rZXkpCi0JCWJzcy0+Y2FwYWJpbGl0eSB8PSBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWTsKLQllbHNlCi0JCXNkYXRhLT5kcm9wX3VuZW5jcnlwdGVkID0gMDsKLQotCWJzcy0+c3VwcF9yYXRlc19sZW4gPSBzYmFuZC0+bl9iaXRyYXRlczsKLQlwb3MgPSBic3MtPnN1cHBfcmF0ZXM7Ci0JZm9yIChpID0gMDsgaSA8IHNiYW5kLT5uX2JpdHJhdGVzOyBpKyspIHsKLQkJaW50IHJhdGUgPSBzYmFuZC0+Yml0cmF0ZXNbaV0uYml0cmF0ZTsKLQkJKnBvcysrID0gKHU4KSAocmF0ZSAvIDUpOworCWlmIChpZm1nZC0+ZmxhZ3MgJiAoSUVFRTgwMjExX1NUQV9BVVRPX1NTSURfU0VMIHwKKwkJCSAgICBJRUVFODAyMTFfU1RBX0FVVE9fQlNTSURfU0VMIHwKKwkJCSAgICBJRUVFODAyMTFfU1RBX0FVVE9fQ0hBTk5FTF9TRUwpKSB7CisJCWNhcGFfbWFzayB8PSBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWTsKKwkJaWYgKHNkYXRhLT5kZWZhdWx0X2tleSkKKwkJCWNhcGFfdmFsIHw9IFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZOwogCX0KIAotCXJldCA9IGllZWU4MDIxMV9zdGFfam9pbl9pYnNzKHNkYXRhLCBpZnN0YSwgYnNzKTsKLQlpZWVlODAyMTFfcnhfYnNzX3B1dChsb2NhbCwgYnNzKTsKLQlyZXR1cm4gcmV0OwotfQorCWlmIChpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FVVE9fQ0hBTk5FTF9TRUwpCisJCWNoYW4gPSBOVUxMOwogCisJaWYgKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVVUT19CU1NJRF9TRUwpCisJCWJzc2lkID0gTlVMTDsKIAotc3RhdGljIGludCBpZWVlODAyMTFfc3RhX2ZpbmRfaWJzcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7Ci0Jc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzczsKLQlpbnQgZm91bmQgPSAwOwotCXU4IGJzc2lkW0VUSF9BTEVOXTsKLQlpbnQgYWN0aXZlX2lic3M7Ci0KLQlpZiAoaWZzdGEtPnNzaWRfbGVuID09IDApCi0JCXJldHVybiAtRUlOVkFMOwotCi0JYWN0aXZlX2lic3MgPSBpZWVlODAyMTFfc3RhX2FjdGl2ZV9pYnNzKHNkYXRhKTsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRwotCXByaW50ayhLRVJOX0RFQlVHICIlczogc3RhX2ZpbmRfaWJzcyAoYWN0aXZlX2lic3M9JWQpXG4iLAotCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBhY3RpdmVfaWJzcyk7Ci0jZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcgKi8KLQlzcGluX2xvY2tfYmgoJmxvY2FsLT5ic3NfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShic3MsICZsb2NhbC0+YnNzX2xpc3QsIGxpc3QpIHsKLQkJaWYgKGlmc3RhLT5zc2lkX2xlbiAhPSBic3MtPnNzaWRfbGVuIHx8Ci0JCSAgICBtZW1jbXAoaWZzdGEtPnNzaWQsIGJzcy0+c3NpZCwgYnNzLT5zc2lkX2xlbikgIT0gMAotCQkgICAgfHwgIShic3MtPmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfSUJTUykpCi0JCQljb250aW51ZTsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRwotCQlwcmludGsoS0VSTl9ERUJVRyAiICAgYnNzaWQ9JXBNIGZvdW5kXG4iLCBic3MtPmJzc2lkKTsKLSNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRyAqLwotCQltZW1jcHkoYnNzaWQsIGJzcy0+YnNzaWQsIEVUSF9BTEVOKTsKLQkJZm91bmQgPSAxOwotCQlpZiAoYWN0aXZlX2lic3MgfHwgbWVtY21wKGJzc2lkLCBpZnN0YS0+YnNzaWQsIEVUSF9BTEVOKSAhPSAwKQotCQkJYnJlYWs7CisJaWYgKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVVUT19TU0lEX1NFTCkgeworCQlzc2lkID0gTlVMTDsKKwkJc3NpZF9sZW4gPSAwOwogCX0KLQlzcGluX3VubG9ja19iaCgmbG9jYWwtPmJzc19sb2NrKTsKIAotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHCi0JaWYgKGZvdW5kKQotCQlwcmludGsoS0VSTl9ERUJVRyAiICAgc3RhX2ZpbmRfaWJzczogc2VsZWN0ZWQgJXBNIGN1cnJlbnQgIgotCQkgICAgICAgIiVwTVxuIiwgYnNzaWQsIGlmc3RhLT5ic3NpZCk7Ci0jZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcgKi8KKwlic3MgPSAodm9pZCAqKWNmZzgwMjExX2dldF9ic3MobG9jYWwtPmh3LndpcGh5LCBjaGFuLAorCQkJCSAgICAgICBic3NpZCwgc3NpZCwgc3NpZF9sZW4sCisJCQkJICAgICAgIGNhcGFfbWFzaywgY2FwYV92YWwpOwogCi0JaWYgKGZvdW5kICYmIG1lbWNtcChpZnN0YS0+YnNzaWQsIGJzc2lkLCBFVEhfQUxFTikgIT0gMCkgewotCQlpbnQgcmV0OwotCQlpbnQgc2VhcmNoX2ZyZXE7Ci0KLQkJaWYgKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVVUT19DSEFOTkVMX1NFTCkKLQkJCXNlYXJjaF9mcmVxID0gYnNzLT5mcmVxOworCWlmIChic3MpIHsKKwkJaWVlZTgwMjExX3NldF9mcmVxKHNkYXRhLCBic3MtPmNic3MuY2hhbm5lbC0+Y2VudGVyX2ZyZXEpOworCQlpZiAoIShpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1NTSURfU0VUKSkKKwkJCWllZWU4MDIxMV9zdGFfc2V0X3NzaWQoc2RhdGEsIGJzcy0+c3NpZCwKKwkJCQkJICAgICAgIGJzcy0+c3NpZF9sZW4pOworCQlpZWVlODAyMTFfc3RhX3NldF9ic3NpZChzZGF0YSwgYnNzLT5jYnNzLmJzc2lkKTsKKwkJaWVlZTgwMjExX3N0YV9kZWZfd21tX3BhcmFtcyhzZGF0YSwgYnNzLT5zdXBwX3JhdGVzX2xlbiwKKwkJCQkJCSAgICBic3MtPnN1cHBfcmF0ZXMpOworCQlpZiAoc2RhdGEtPnUubWdkLm1mcCA9PSBJRUVFODAyMTFfTUZQX1JFUVVJUkVEKQorCQkJc2RhdGEtPnUubWdkLmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfTUZQX0VOQUJMRUQ7CiAJCWVsc2UKLQkJCXNlYXJjaF9mcmVxID0gbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+Y2VudGVyX2ZyZXE7Ci0KLQkJYnNzID0gaWVlZTgwMjExX3J4X2Jzc19nZXQobG9jYWwsIGJzc2lkLCBzZWFyY2hfZnJlcSwKLQkJCQkJICAgaWZzdGEtPnNzaWQsIGlmc3RhLT5zc2lkX2xlbik7Ci0JCWlmICghYnNzKQotCQkJZ290byBkb250X2pvaW47Ci0KLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBTZWxlY3RlZCBJQlNTIEJTU0lEICVwTSIKLQkJICAgICAgICIgYmFzZWQgb24gY29uZmlndXJlZCBTU0lEXG4iLAotCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgYnNzaWQpOwotCQlyZXQgPSBpZWVlODAyMTFfc3RhX2pvaW5faWJzcyhzZGF0YSwgaWZzdGEsIGJzcyk7Ci0JCWllZWU4MDIxMV9yeF9ic3NfcHV0KGxvY2FsLCBic3MpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotZG9udF9qb2luOgotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHCi0JcHJpbnRrKEtFUk5fREVCVUcgIiAgIGRpZCBub3QgdHJ5IHRvIGpvaW4gaWJzc1xuIik7Ci0jZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcgKi8KLQotCS8qIFNlbGVjdGVkIElCU1Mgbm90IGZvdW5kIGluIGN1cnJlbnQgc2NhbiByZXN1bHRzIC0gdHJ5IHRvIHNjYW4gKi8KLQlpZiAoaWZzdGEtPnN0YXRlID09IElFRUU4MDIxMV9TVEFfTUxNRV9JQlNTX0pPSU5FRCAmJgotCSAgICAhaWVlZTgwMjExX3N0YV9hY3RpdmVfaWJzcyhzZGF0YSkpIHsKLQkJbW9kX3RpbWVyKCZpZnN0YS0+dGltZXIsIGppZmZpZXMgKwotCQkJCSAgICAgIElFRUU4MDIxMV9JQlNTX01FUkdFX0lOVEVSVkFMKTsKLQl9IGVsc2UgaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgbG9jYWwtPmxhc3Rfc2Nhbl9jb21wbGV0ZWQgKwotCQkJICAgICAgSUVFRTgwMjExX1NDQU5fSU5URVJWQUwpKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogVHJpZ2dlciBuZXcgc2NhbiB0byBmaW5kIGFuIElCU1MgdG8gIgotCQkgICAgICAgImpvaW5cbiIsIHNkYXRhLT5kZXYtPm5hbWUpOwotCQlyZXR1cm4gaWVlZTgwMjExX3JlcXVlc3Rfc2NhbihzZGF0YSwgaWZzdGEtPnNzaWQsCi0JCQkJCSAgICAgIGlmc3RhLT5zc2lkX2xlbik7Ci0JfSBlbHNlIGlmIChpZnN0YS0+c3RhdGUgIT0gSUVFRTgwMjExX1NUQV9NTE1FX0lCU1NfSk9JTkVEKSB7Ci0JCWludCBpbnRlcnZhbCA9IElFRUU4MDIxMV9TQ0FOX0lOVEVSVkFMOwotCi0JCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGlmc3RhLT5pYnNzX2pvaW5fcmVxICsKLQkJCSAgICAgICBJRUVFODAyMTFfSUJTU19KT0lOX1RJTUVPVVQpKSB7Ci0JCQlpZiAoKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfQ1JFQVRFX0lCU1MpICYmCi0JCQkgICAgKCEobG9jYWwtPm9wZXJfY2hhbm5lbC0+ZmxhZ3MgJgotCQkJCQlJRUVFODAyMTFfQ0hBTl9OT19JQlNTKSkpCi0JCQkJcmV0dXJuIGllZWU4MDIxMV9zdGFfY3JlYXRlX2lic3Moc2RhdGEsIGlmc3RhKTsKLQkJCWlmIChpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0NSRUFURV9JQlNTKSB7Ci0JCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBJQlNTIG5vdCBhbGxvd2VkIG9uIgotCQkJCSAgICAgICAiICVkIE1IelxuIiwgc2RhdGEtPmRldi0+bmFtZSwKLQkJCQkgICAgICAgbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+Y2VudGVyX2ZyZXEpOwotCQkJfQotCi0JCQkvKiBObyBJQlNTIGZvdW5kIC0gZGVjcmVhc2Ugc2NhbiBpbnRlcnZhbCBhbmQgY29udGludWUKLQkJCSAqIHNjYW5uaW5nLiAqLwotCQkJaW50ZXJ2YWwgPSBJRUVFODAyMTFfU0NBTl9JTlRFUlZBTF9TTE9XOwotCQl9Ci0KLQkJaWZzdGEtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0lCU1NfU0VBUkNIOwotCQltb2RfdGltZXIoJmlmc3RhLT50aW1lciwgamlmZmllcyArIGludGVydmFsKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGljIGludCBpZWVlODAyMTFfc3RhX2NvbmZpZ19hdXRoKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhKQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwotCXN0cnVjdCBpZWVlODAyMTFfYnNzICpic3MsICpzZWxlY3RlZCA9IE5VTEw7Ci0JaW50IHRvcF9yc3NpID0gMCwgZnJlcTsKLQotCXNwaW5fbG9ja19iaCgmbG9jYWwtPmJzc19sb2NrKTsKLQlmcmVxID0gbG9jYWwtPm9wZXJfY2hhbm5lbC0+Y2VudGVyX2ZyZXE7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShic3MsICZsb2NhbC0+YnNzX2xpc3QsIGxpc3QpIHsKLQkJaWYgKCEoYnNzLT5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX0VTUykpCi0JCQljb250aW51ZTsKLQotCQlpZiAoKGlmc3RhLT5mbGFncyAmIChJRUVFODAyMTFfU1RBX0FVVE9fU1NJRF9TRUwgfAotCQkJSUVFRTgwMjExX1NUQV9BVVRPX0JTU0lEX1NFTCB8Ci0JCQlJRUVFODAyMTFfU1RBX0FVVE9fQ0hBTk5FTF9TRUwpKSAmJgotCQkgICAgKCEhKGJzcy0+Y2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZKSBeCi0JCSAgICAgISFzZGF0YS0+ZGVmYXVsdF9rZXkpKQotCQkJY29udGludWU7Ci0KLQkJaWYgKCEoaWZzdGEtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9BVVRPX0NIQU5ORUxfU0VMKSAmJgotCQkgICAgYnNzLT5mcmVxICE9IGZyZXEpCi0JCQljb250aW51ZTsKLQotCQlpZiAoIShpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FVVE9fQlNTSURfU0VMKSAmJgotCQkgICAgbWVtY21wKGJzcy0+YnNzaWQsIGlmc3RhLT5ic3NpZCwgRVRIX0FMRU4pKQotCQkJY29udGludWU7Ci0KLQkJaWYgKCEoaWZzdGEtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9BVVRPX1NTSURfU0VMKSAmJgotCQkgICAgIWllZWU4MDIxMV9zdGFfbWF0Y2hfc3NpZChpZnN0YSwgYnNzLT5zc2lkLCBic3MtPnNzaWRfbGVuKSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmICghc2VsZWN0ZWQgfHwgdG9wX3Jzc2kgPCBic3MtPnNpZ25hbCkgewotCQkJc2VsZWN0ZWQgPSBic3M7Ci0JCQl0b3BfcnNzaSA9IGJzcy0+c2lnbmFsOwotCQl9Ci0JfQotCWlmIChzZWxlY3RlZCkKLQkJYXRvbWljX2luYygmc2VsZWN0ZWQtPnVzZXJzKTsKLQlzcGluX3VubG9ja19iaCgmbG9jYWwtPmJzc19sb2NrKTsKLQotCWlmIChzZWxlY3RlZCkgewotCQlpZWVlODAyMTFfc2V0X2ZyZXEoc2RhdGEsIHNlbGVjdGVkLT5mcmVxKTsKLQkJaWYgKCEoaWZzdGEtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9TU0lEX1NFVCkpCi0JCQlpZWVlODAyMTFfc3RhX3NldF9zc2lkKHNkYXRhLCBzZWxlY3RlZC0+c3NpZCwKLQkJCQkJICAgICAgIHNlbGVjdGVkLT5zc2lkX2xlbik7Ci0JCWllZWU4MDIxMV9zdGFfc2V0X2Jzc2lkKHNkYXRhLCBzZWxlY3RlZC0+YnNzaWQpOwotCQlpZWVlODAyMTFfc3RhX2RlZl93bW1fcGFyYW1zKHNkYXRhLCBzZWxlY3RlZCk7CisJCQlzZGF0YS0+dS5tZ2QuZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfTUZQX0VOQUJMRUQ7CiAKIAkJLyogU2VuZCBvdXQgZGlyZWN0IHByb2JlIGlmIG5vIHByb2JlIHJlc3Agd2FzIHJlY2VpdmVkIG9yCiAJCSAqIHRoZSBvbmUgd2UgaGF2ZSBpcyBvdXRkYXRlZAogCQkgKi8KLQkJaWYgKCFzZWxlY3RlZC0+bGFzdF9wcm9iZV9yZXNwIHx8Ci0JCSAgICB0aW1lX2FmdGVyKGppZmZpZXMsIHNlbGVjdGVkLT5sYXN0X3Byb2JlX3Jlc3AKKwkJaWYgKCFic3MtPmxhc3RfcHJvYmVfcmVzcCB8fAorCQkgICAgdGltZV9hZnRlcihqaWZmaWVzLCBic3MtPmxhc3RfcHJvYmVfcmVzcAogCQkJCQkrIElFRUU4MDIxMV9TQ0FOX1JFU1VMVF9FWFBJUkUpKQotCQkJaWZzdGEtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0RJUkVDVF9QUk9CRTsKKwkJCWlmbWdkLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9ESVJFQ1RfUFJPQkU7CiAJCWVsc2UKLQkJCWlmc3RhLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9BVVRIRU5USUNBVEU7CisJCQlpZm1nZC0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfQVVUSEVOVElDQVRFOwogCi0JCWllZWU4MDIxMV9yeF9ic3NfcHV0KGxvY2FsLCBzZWxlY3RlZCk7Ci0JCWllZWU4MDIxMV9zdGFfcmVzZXRfYXV0aChzZGF0YSwgaWZzdGEpOworCQlpZWVlODAyMTFfcnhfYnNzX3B1dChsb2NhbCwgYnNzKTsKKwkJaWVlZTgwMjExX3N0YV9yZXNldF9hdXRoKHNkYXRhKTsKIAkJcmV0dXJuIDA7CiAJfSBlbHNlIHsKLQkJaWYgKGlmc3RhLT5hc3NvY19zY2FuX3RyaWVzIDwgSUVFRTgwMjExX0FTU09DX1NDQU5TX01BWF9UUklFUykgewotCQkJaWZzdGEtPmFzc29jX3NjYW5fdHJpZXMrKzsKLQkJCWlmIChpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FVVE9fU1NJRF9TRUwpCi0JCQkJaWVlZTgwMjExX3N0YXJ0X3NjYW4oc2RhdGEsIE5VTEwsIDApOworCQlpZiAoaWZtZ2QtPmFzc29jX3NjYW5fdHJpZXMgPCBJRUVFODAyMTFfQVNTT0NfU0NBTlNfTUFYX1RSSUVTKSB7CisJCQlpZm1nZC0+YXNzb2Nfc2Nhbl90cmllcysrOworCQkJLyogWFhYIG1heWJlIHJhY3k/ICovCisJCQlpZiAobG9jYWwtPnNjYW5fcmVxKQorCQkJCXJldHVybiAtMTsKKwkJCW1lbWNweShsb2NhbC0+aW50X3NjYW5fcmVxLnNzaWRzWzBdLnNzaWQsCisJCQkgICAgICAgaWZtZ2QtPnNzaWQsIElFRUU4MDIxMV9NQVhfU1NJRF9MRU4pOworCQkJaWYgKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVVUT19TU0lEX1NFTCkKKwkJCQlsb2NhbC0+aW50X3NjYW5fcmVxLnNzaWRzWzBdLnNzaWRfbGVuID0gMDsKIAkJCWVsc2UKLQkJCQlpZWVlODAyMTFfc3RhcnRfc2NhbihzZGF0YSwgaWZzdGEtPnNzaWQsCi0JCQkJCQkJIGlmc3RhLT5zc2lkX2xlbik7Ci0JCQlpZnN0YS0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfQVVUSEVOVElDQVRFOwotCQkJc2V0X2JpdChJRUVFODAyMTFfU1RBX1JFUV9BVVRILCAmaWZzdGEtPnJlcXVlc3QpOwotCQl9IGVsc2UKLQkJCWlmc3RhLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9ESVNBQkxFRDsKKwkJCQlsb2NhbC0+aW50X3NjYW5fcmVxLnNzaWRzWzBdLnNzaWRfbGVuID0gaWZtZ2QtPnNzaWRfbGVuOworCisJCQlpZiAoaWVlZTgwMjExX3N0YXJ0X3NjYW4oc2RhdGEsICZsb2NhbC0+aW50X3NjYW5fcmVxKSkKKwkJCQlpZWVlODAyMTFfc2Nhbl9mYWlsZWQobG9jYWwpOworCisJCQlpZm1nZC0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfQVVUSEVOVElDQVRFOworCQkJc2V0X2JpdChJRUVFODAyMTFfU1RBX1JFUV9BVVRILCAmaWZtZ2QtPnJlcXVlc3QpOworCQl9IGVsc2UgeworCQkJaWZtZ2QtPmFzc29jX3NjYW5fdHJpZXMgPSAwOworCQkJaWZtZ2QtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0RJU0FCTEVEOworCQl9CiAJfQogCXJldHVybiAtMTsKIH0KQEAgLTIyOTIsOSArMTczOCw5IEBACiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfc3RhX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0KLQkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEsIHUuc3RhLndvcmspOworCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSwgdS5tZ2Qud29yayk7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhOworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2Q7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAogCWlmICghbmV0aWZfcnVubmluZyhzZGF0YS0+ZGV2KSkKQEAgLTIzMDMsNjEgKzE3NDksNjAgQEAKIAlpZiAobG9jYWwtPnN3X3NjYW5uaW5nIHx8IGxvY2FsLT5od19zY2FubmluZykKIAkJcmV0dXJuOwogCi0JaWYgKFdBUk5fT04oc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gJiYKLQkJICAgIHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BREhPQykpCisJaWYgKFdBUk5fT04oc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pKQogCQlyZXR1cm47Ci0JaWZzdGEgPSAmc2RhdGEtPnUuc3RhOworCWlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAotCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJmlmc3RhLT5za2JfcXVldWUpKSkKKwl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZpZm1nZC0+c2tiX3F1ZXVlKSkpCiAJCWllZWU4MDIxMV9zdGFfcnhfcXVldWVkX21nbXQoc2RhdGEsIHNrYik7CiAKLQlpZiAoaWZzdGEtPnN0YXRlICE9IElFRUU4MDIxMV9TVEFfTUxNRV9ESVJFQ1RfUFJPQkUgJiYKLQkgICAgaWZzdGEtPnN0YXRlICE9IElFRUU4MDIxMV9TVEFfTUxNRV9BVVRIRU5USUNBVEUgJiYKLQkgICAgaWZzdGEtPnN0YXRlICE9IElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEUgJiYKLQkgICAgdGVzdF9hbmRfY2xlYXJfYml0KElFRUU4MDIxMV9TVEFfUkVRX1NDQU4sICZpZnN0YS0+cmVxdWVzdCkpIHsKLQkJaWVlZTgwMjExX3N0YXJ0X3NjYW4oc2RhdGEsIGlmc3RhLT5zY2FuX3NzaWQsCi0JCQkJICAgICBpZnN0YS0+c2Nhbl9zc2lkX2xlbik7CisJaWYgKGlmbWdkLT5zdGF0ZSAhPSBJRUVFODAyMTFfU1RBX01MTUVfRElSRUNUX1BST0JFICYmCisJICAgIGlmbWdkLT5zdGF0ZSAhPSBJRUVFODAyMTFfU1RBX01MTUVfQVVUSEVOVElDQVRFICYmCisJICAgIGlmbWdkLT5zdGF0ZSAhPSBJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFICYmCisJICAgIHRlc3RfYW5kX2NsZWFyX2JpdChJRUVFODAyMTFfU1RBX1JFUV9TQ0FOLCAmaWZtZ2QtPnJlcXVlc3QpKSB7CisJCS8qCisJCSAqIFRoZSBjYWxsIHRvIGllZWU4MDIxMV9zdGFydF9zY2FuIGNhbiBmYWlsIGJ1dCBpZWVlODAyMTFfcmVxdWVzdF9zY2FuCisJCSAqICh3aGljaCBxdWV1ZWQgaWVlZTgwMjExX3N0YV93b3JrKSBkaWQgbm90IHJldHVybiBhbiBlcnJvci4gVGh1cywgY2FsbAorCQkgKiBpZWVlODAyMTFfc2Nhbl9mYWlsZWQgaGVyZSBpZiBpZWVlODAyMTFfc3RhcnRfc2NhbiBmYWlscyBpbiBvcmRlciB0bworCQkgKiBub3RpZnkgdGhlIHNjYW4gcmVxdWVzdGVyLgorCQkgKi8KKwkJaWYgKGllZWU4MDIxMV9zdGFydF9zY2FuKHNkYXRhLCBsb2NhbC0+c2Nhbl9yZXEpKQorCQkJaWVlZTgwMjExX3NjYW5fZmFpbGVkKGxvY2FsKTsKIAkJcmV0dXJuOwogCX0KIAotCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSUVFRTgwMjExX1NUQV9SRVFfQVVUSCwgJmlmc3RhLT5yZXF1ZXN0KSkgewotCQlpZiAoaWVlZTgwMjExX3N0YV9jb25maWdfYXV0aChzZGF0YSwgaWZzdGEpKQorCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSUVFRTgwMjExX1NUQV9SRVFfQVVUSCwgJmlmbWdkLT5yZXF1ZXN0KSkgeworCQlpZiAoaWVlZTgwMjExX3N0YV9jb25maWdfYXV0aChzZGF0YSkpCiAJCQlyZXR1cm47Ci0JCWNsZWFyX2JpdChJRUVFODAyMTFfU1RBX1JFUV9SVU4sICZpZnN0YS0+cmVxdWVzdCk7Ci0JfSBlbHNlIGlmICghdGVzdF9hbmRfY2xlYXJfYml0KElFRUU4MDIxMV9TVEFfUkVRX1JVTiwgJmlmc3RhLT5yZXF1ZXN0KSkKKwkJY2xlYXJfYml0KElFRUU4MDIxMV9TVEFfUkVRX1JVTiwgJmlmbWdkLT5yZXF1ZXN0KTsKKwl9IGVsc2UgaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoSUVFRTgwMjExX1NUQV9SRVFfUlVOLCAmaWZtZ2QtPnJlcXVlc3QpKQogCQlyZXR1cm47CiAKLQlzd2l0Y2ggKGlmc3RhLT5zdGF0ZSkgeworCXN3aXRjaCAoaWZtZ2QtPnN0YXRlKSB7CiAJY2FzZSBJRUVFODAyMTFfU1RBX01MTUVfRElTQUJMRUQ6CiAJCWJyZWFrOwogCWNhc2UgSUVFRTgwMjExX1NUQV9NTE1FX0RJUkVDVF9QUk9CRToKLQkJaWVlZTgwMjExX2RpcmVjdF9wcm9iZShzZGF0YSwgaWZzdGEpOworCQlpZWVlODAyMTFfZGlyZWN0X3Byb2JlKHNkYXRhKTsKIAkJYnJlYWs7CiAJY2FzZSBJRUVFODAyMTFfU1RBX01MTUVfQVVUSEVOVElDQVRFOgotCQlpZWVlODAyMTFfYXV0aGVudGljYXRlKHNkYXRhLCBpZnN0YSk7CisJCWllZWU4MDIxMV9hdXRoZW50aWNhdGUoc2RhdGEpOwogCQlicmVhazsKIAljYXNlIElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEU6Ci0JCWllZWU4MDIxMV9hc3NvY2lhdGUoc2RhdGEsIGlmc3RhKTsKKwkJaWVlZTgwMjExX2Fzc29jaWF0ZShzZGF0YSk7CiAJCWJyZWFrOwogCWNhc2UgSUVFRTgwMjExX1NUQV9NTE1FX0FTU09DSUFURUQ6Ci0JCWllZWU4MDIxMV9hc3NvY2lhdGVkKHNkYXRhLCBpZnN0YSk7Ci0JCWJyZWFrOwotCWNhc2UgSUVFRTgwMjExX1NUQV9NTE1FX0lCU1NfU0VBUkNIOgotCQlpZWVlODAyMTFfc3RhX2ZpbmRfaWJzcyhzZGF0YSwgaWZzdGEpOwotCQlicmVhazsKLQljYXNlIElFRUU4MDIxMV9TVEFfTUxNRV9JQlNTX0pPSU5FRDoKLQkJaWVlZTgwMjExX3N0YV9tZXJnZV9pYnNzKHNkYXRhLCBpZnN0YSk7CisJCWllZWU4MDIxMV9hc3NvY2lhdGVkKHNkYXRhKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJV0FSTl9PTigxKTsKIAkJYnJlYWs7CiAJfQogCi0JaWYgKGllZWU4MDIxMV9wcml2YWN5X21pc21hdGNoKHNkYXRhLCBpZnN0YSkpIHsKKwlpZiAoaWVlZTgwMjExX3ByaXZhY3lfbWlzbWF0Y2goc2RhdGEpKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogcHJpdmFjeSBjb25maWd1cmF0aW9uIG1pc21hdGNoIGFuZCAiCiAJCSAgICAgICAibWl4ZWQtY2VsbCBkaXNhYmxlZCAtIGRpc2Fzc29jaWF0ZVxuIiwgc2RhdGEtPmRldi0+bmFtZSk7CiAKLQkJaWVlZTgwMjExX3NldF9kaXNhc3NvYyhzZGF0YSwgaWZzdGEsIGZhbHNlLCB0cnVlLAorCQlpZWVlODAyMTFfc2V0X2Rpc2Fzc29jKHNkYXRhLCBmYWxzZSwgdHJ1ZSwKIAkJCQkJV0xBTl9SRUFTT05fVU5TUEVDSUZJRUQpOwogCX0KIH0KQEAgLTIzNjYsMjA4ICsxODExLDE1MyBAQAogewogCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKIAkJcXVldWVfd29yayhzZGF0YS0+bG9jYWwtPmh3LndvcmtxdWV1ZSwKLQkJCSAgICZzZGF0YS0+dS5zdGEud29yayk7CisJCQkgICAmc2RhdGEtPnUubWdkLndvcmspOwogfQogCiAvKiBpbnRlcmZhY2Ugc2V0dXAgKi8KIHZvaWQgaWVlZTgwMjExX3N0YV9zZXR1cF9zZGF0YShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGE7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZDsKIAotCWlmc3RhID0gJnNkYXRhLT51LnN0YTsKLQlJTklUX1dPUksoJmlmc3RhLT53b3JrLCBpZWVlODAyMTFfc3RhX3dvcmspOwotCXNldHVwX3RpbWVyKCZpZnN0YS0+dGltZXIsIGllZWU4MDIxMV9zdGFfdGltZXIsCisJaWZtZ2QgPSAmc2RhdGEtPnUubWdkOworCUlOSVRfV09SSygmaWZtZ2QtPndvcmssIGllZWU4MDIxMV9zdGFfd29yayk7CisJSU5JVF9XT1JLKCZpZm1nZC0+Y2hzd2l0Y2hfd29yaywgaWVlZTgwMjExX2Noc3dpdGNoX3dvcmspOworCXNldHVwX3RpbWVyKCZpZm1nZC0+dGltZXIsIGllZWU4MDIxMV9zdGFfdGltZXIsCiAJCSAgICAodW5zaWduZWQgbG9uZykgc2RhdGEpOwotCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmlmc3RhLT5za2JfcXVldWUpOworCXNldHVwX3RpbWVyKCZpZm1nZC0+Y2hzd2l0Y2hfdGltZXIsIGllZWU4MDIxMV9jaHN3aXRjaF90aW1lciwKKwkJICAgICh1bnNpZ25lZCBsb25nKSBzZGF0YSk7CisJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmaWZtZ2QtPnNrYl9xdWV1ZSk7CiAKLQlpZnN0YS0+Y2FwYWIgPSBXTEFOX0NBUEFCSUxJVFlfRVNTOwotCWlmc3RhLT5hdXRoX2FsZ3MgPSBJRUVFODAyMTFfQVVUSF9BTEdfT1BFTiB8CisJaWZtZ2QtPmNhcGFiID0gV0xBTl9DQVBBQklMSVRZX0VTUzsKKwlpZm1nZC0+YXV0aF9hbGdzID0gSUVFRTgwMjExX0FVVEhfQUxHX09QRU4gfAogCQlJRUVFODAyMTFfQVVUSF9BTEdfU0hBUkVEX0tFWTsKLQlpZnN0YS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9DUkVBVEVfSUJTUyB8CisJaWZtZ2QtPmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfQ1JFQVRFX0lCU1MgfAogCQlJRUVFODAyMTFfU1RBX0FVVE9fQlNTSURfU0VMIHwKIAkJSUVFRTgwMjExX1NUQV9BVVRPX0NIQU5ORUxfU0VMOwogCWlmIChpZWVlODAyMTFfbnVtX3JlZ3VsYXJfcXVldWVzKCZzZGF0YS0+bG9jYWwtPmh3KSA+PSA0KQotCQlpZnN0YS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9XTU1fRU5BQkxFRDsKLX0KLQotLyoKLSAqIEFkZCBhIG5ldyBJQlNTIHN0YXRpb24sIHdpbGwgYWxzbyBiZSBjYWxsZWQgYnkgdGhlIFJYIGNvZGUgd2hlbiwKLSAqIGluIElCU1MgbW9kZSwgcmVjZWl2aW5nIGEgZnJhbWUgZnJvbSBhIHlldC11bmtub3duIHN0YXRpb24sIGhlbmNlCi0gKiBtdXN0IGJlIGNhbGxhYmxlIGluIGF0b21pYyBjb250ZXh0LgotICovCi1zdHJ1Y3Qgc3RhX2luZm8gKmllZWU4MDIxMV9pYnNzX2FkZF9zdGEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJCXU4ICpic3NpZCx1OCAqYWRkciwgdTY0IHN1cHBfcmF0ZXMpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7Ci0Jc3RydWN0IHN0YV9pbmZvICpzdGE7Ci0JaW50IGJhbmQgPSBsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kOwotCi0JLyogVE9ETzogQ291bGQgY29uc2lkZXIgcmVtb3ZpbmcgdGhlIGxlYXN0IHJlY2VudGx5IHVzZWQgZW50cnkgYW5kCi0JICogYWxsb3cgbmV3IG9uZSB0byBiZSBhZGRlZC4gKi8KLQlpZiAobG9jYWwtPm51bV9zdGEgPj0gSUVFRTgwMjExX0lCU1NfTUFYX1NUQV9FTlRSSUVTKSB7Ci0JCWlmIChuZXRfcmF0ZWxpbWl0KCkpIHsKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogTm8gcm9vbSBmb3IgYSBuZXcgSUJTUyBTVEEgIgotCQkJICAgICAgICJlbnRyeSAlcE1cbiIsIHNkYXRhLT5kZXYtPm5hbWUsIGFkZHIpOwotCQl9Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCWlmIChjb21wYXJlX2V0aGVyX2FkZHIoYnNzaWQsIHNkYXRhLT51LnN0YS5ic3NpZCkpCi0JCXJldHVybiBOVUxMOwotCi0jaWZkZWYgQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfREVCVUcKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEFkZGluZyBuZXcgSUJTUyBzdGF0aW9uICVwTSAoZGV2PSVzKVxuIiwKLQkgICAgICAgd2lwaHlfbmFtZShsb2NhbC0+aHcud2lwaHkpLCBhZGRyLCBzZGF0YS0+ZGV2LT5uYW1lKTsKLSNlbmRpZgotCi0Jc3RhID0gc3RhX2luZm9fYWxsb2Moc2RhdGEsIGFkZHIsIEdGUF9BVE9NSUMpOwotCWlmICghc3RhKQotCQlyZXR1cm4gTlVMTDsKLQotCXNldF9zdGFfZmxhZ3Moc3RhLCBXTEFOX1NUQV9BVVRIT1JJWkVEKTsKLQotCS8qIG1ha2Ugc3VyZSBtYW5kYXRvcnkgcmF0ZXMgYXJlIGFsd2F5cyBhZGRlZCAqLwotCXN0YS0+c3RhLnN1cHBfcmF0ZXNbYmFuZF0gPSBzdXBwX3JhdGVzIHwKLQkJCWllZWU4MDIxMV9tYW5kYXRvcnlfcmF0ZXMobG9jYWwsIGJhbmQpOwotCi0JcmF0ZV9jb250cm9sX3JhdGVfaW5pdChzdGEpOwotCi0JaWYgKHN0YV9pbmZvX2luc2VydChzdGEpKQotCQlyZXR1cm4gTlVMTDsKLQotCXJldHVybiBzdGE7CisJCWlmbWdkLT5mbGFncyB8PSBJRUVFODAyMTFfU1RBX1dNTV9FTkFCTEVEOwogfQogCiAvKiBjb25maWd1cmF0aW9uIGhvb2tzICovCi12b2lkIGllZWU4MDIxMV9zdGFfcmVxX2F1dGgoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkgICAgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhKQordm9pZCBpZWVlODAyMTFfc3RhX3JlcV9hdXRoKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQogeworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwogCi0JaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQorCWlmIChXQVJOX09OKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSkKIAkJcmV0dXJuOwogCi0JaWYgKChpZnN0YS0+ZmxhZ3MgJiAoSUVFRTgwMjExX1NUQV9CU1NJRF9TRVQgfAorCWlmICgoaWZtZ2QtPmZsYWdzICYgKElFRUU4MDIxMV9TVEFfQlNTSURfU0VUIHwKIAkJCSAgICAgSUVFRTgwMjExX1NUQV9BVVRPX0JTU0lEX1NFTCkpICYmCi0JICAgIChpZnN0YS0+ZmxhZ3MgJiAoSUVFRTgwMjExX1NUQV9TU0lEX1NFVCB8CisJICAgIChpZm1nZC0+ZmxhZ3MgJiAoSUVFRTgwMjExX1NUQV9TU0lEX1NFVCB8CiAJCQkgICAgIElFRUU4MDIxMV9TVEFfQVVUT19TU0lEX1NFTCkpKSB7CiAKLQkJaWYgKGlmc3RhLT5zdGF0ZSA9PSBJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFRCkKLQkJCWllZWU4MDIxMV9zZXRfZGlzYXNzb2Moc2RhdGEsIGlmc3RhLCB0cnVlLCB0cnVlLAorCQlpZiAoaWZtZ2QtPnN0YXRlID09IElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEVEKQorCQkJaWVlZTgwMjExX3NldF9kaXNhc3NvYyhzZGF0YSwgdHJ1ZSwgdHJ1ZSwKIAkJCQkJICAgICAgIFdMQU5fUkVBU09OX0RFQVVUSF9MRUFWSU5HKTsKIAotCQlzZXRfYml0KElFRUU4MDIxMV9TVEFfUkVRX0FVVEgsICZpZnN0YS0+cmVxdWVzdCk7Ci0JCXF1ZXVlX3dvcmsobG9jYWwtPmh3LndvcmtxdWV1ZSwgJmlmc3RhLT53b3JrKTsKKwkJc2V0X2JpdChJRUVFODAyMTFfU1RBX1JFUV9BVVRILCAmaWZtZ2QtPnJlcXVlc3QpOworCQlxdWV1ZV93b3JrKGxvY2FsLT5ody53b3JrcXVldWUsICZpZm1nZC0+d29yayk7CiAJfQogfQogCi1pbnQgaWVlZTgwMjExX3N0YV9zZXRfc3NpZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgY2hhciAqc3NpZCwgc2l6ZV90IGxlbikKK2ludCBpZWVlODAyMTFfc3RhX2NvbW1pdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGE7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAKLQlpZiAobGVuID4gSUVFRTgwMjExX01BWF9TU0lEX0xFTikKLQkJcmV0dXJuIC1FSU5WQUw7CisJaWZtZ2QtPmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX1BSRVZfQlNTSURfU0VUOwogCi0JaWZzdGEgPSAmc2RhdGEtPnUuc3RhOwotCi0JaWYgKGlmc3RhLT5zc2lkX2xlbiAhPSBsZW4gfHwgbWVtY21wKGlmc3RhLT5zc2lkLCBzc2lkLCBsZW4pICE9IDApIHsKLQkJbWVtc2V0KGlmc3RhLT5zc2lkLCAwLCBzaXplb2YoaWZzdGEtPnNzaWQpKTsKLQkJbWVtY3B5KGlmc3RhLT5zc2lkLCBzc2lkLCBsZW4pOwotCQlpZnN0YS0+c3NpZF9sZW4gPSBsZW47Ci0JCWlmc3RhLT5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9QUkVWX0JTU0lEX1NFVDsKLQl9Ci0KLQlpZiAobGVuKQotCQlpZnN0YS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9TU0lEX1NFVDsKKwlpZiAoaWZtZ2QtPnNzaWRfbGVuKQorCQlpZm1nZC0+ZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9TU0lEX1NFVDsKIAllbHNlCi0JCWlmc3RhLT5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9TU0lEX1NFVDsKLQotCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgJiYKLQkgICAgIShpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0JTU0lEX1NFVCkpIHsKLQkJaWZzdGEtPmlic3Nfam9pbl9yZXEgPSBqaWZmaWVzOwotCQlpZnN0YS0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfSUJTU19TRUFSQ0g7Ci0JCXJldHVybiBpZWVlODAyMTFfc3RhX2ZpbmRfaWJzcyhzZGF0YSwgaWZzdGEpOwotCX0KKwkJaWZtZ2QtPmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX1NTSURfU0VUOwogCiAJcmV0dXJuIDA7CiB9CiAKK2ludCBpZWVlODAyMTFfc3RhX3NldF9zc2lkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBjaGFyICpzc2lkLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2Q7CisKKwlpZiAobGVuID4gSUVFRTgwMjExX01BWF9TU0lEX0xFTikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CisKKwlpZiAoaWZtZ2QtPnNzaWRfbGVuICE9IGxlbiB8fCBtZW1jbXAoaWZtZ2QtPnNzaWQsIHNzaWQsIGxlbikgIT0gMCkgeworCQltZW1zZXQoaWZtZ2QtPnNzaWQsIDAsIHNpemVvZihpZm1nZC0+c3NpZCkpOworCQltZW1jcHkoaWZtZ2QtPnNzaWQsIHNzaWQsIGxlbik7CisJCWlmbWdkLT5zc2lkX2xlbiA9IGxlbjsKKwl9CisKKwlyZXR1cm4gaWVlZTgwMjExX3N0YV9jb21taXQoc2RhdGEpOworfQorCiBpbnQgaWVlZTgwMjExX3N0YV9nZXRfc3NpZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgY2hhciAqc3NpZCwgc2l6ZV90ICpsZW4pCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhID0gJnNkYXRhLT51LnN0YTsKLQltZW1jcHkoc3NpZCwgaWZzdGEtPnNzaWQsIGlmc3RhLT5zc2lkX2xlbik7Ci0JKmxlbiA9IGlmc3RhLT5zc2lkX2xlbjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKKwltZW1jcHkoc3NpZCwgaWZtZ2QtPnNzaWQsIGlmbWdkLT5zc2lkX2xlbik7CisJKmxlbiA9IGlmbWdkLT5zc2lkX2xlbjsKIAlyZXR1cm4gMDsKIH0KIAogaW50IGllZWU4MDIxMV9zdGFfc2V0X2Jzc2lkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCB1OCAqYnNzaWQpCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhOwotCWludCByZXM7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAKLQlpZnN0YSA9ICZzZGF0YS0+dS5zdGE7CisJaWYgKGlzX3ZhbGlkX2V0aGVyX2FkZHIoYnNzaWQpKSB7CisJCW1lbWNweShpZm1nZC0+YnNzaWQsIGJzc2lkLCBFVEhfQUxFTik7CisJCWlmbWdkLT5mbGFncyB8PSBJRUVFODAyMTFfU1RBX0JTU0lEX1NFVDsKKwl9IGVsc2UgeworCQltZW1zZXQoaWZtZ2QtPmJzc2lkLCAwLCBFVEhfQUxFTik7CisJCWlmbWdkLT5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9CU1NJRF9TRVQ7CisJfQogCi0JaWYgKG1lbWNtcChpZnN0YS0+YnNzaWQsIGJzc2lkLCBFVEhfQUxFTikgIT0gMCkgewotCQltZW1jcHkoaWZzdGEtPmJzc2lkLCBic3NpZCwgRVRIX0FMRU4pOwotCQlyZXMgPSAwOwotCQkvKgotCQkgKiBIYWNrISBTZWUgYWxzbyBpZWVlODAyMTFfc3RhX3NldF9zc2lkLgotCQkgKi8KLQkJaWYgKG5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldikpCi0JCQlyZXMgPSBpZWVlODAyMTFfaWZfY29uZmlnKHNkYXRhLCBJRUVFODAyMTFfSUZDQ19CU1NJRCk7Ci0JCWlmIChyZXMpIHsKKwlpZiAobmV0aWZfcnVubmluZyhzZGF0YS0+ZGV2KSkgeworCQlpZiAoaWVlZTgwMjExX2lmX2NvbmZpZyhzZGF0YSwgSUVFRTgwMjExX0lGQ0NfQlNTSUQpKSB7CiAJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEZhaWxlZCB0byBjb25maWcgbmV3IEJTU0lEIHRvICIKIAkJCSAgICAgICAidGhlIGxvdy1sZXZlbCBkcml2ZXJcbiIsIHNkYXRhLT5kZXYtPm5hbWUpOwotCQkJcmV0dXJuIHJlczsKIAkJfQogCX0KIAotCWlmIChpc192YWxpZF9ldGhlcl9hZGRyKGJzc2lkKSkKLQkJaWZzdGEtPmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfQlNTSURfU0VUOwotCWVsc2UKLQkJaWZzdGEtPmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX0JTU0lEX1NFVDsKLQotCXJldHVybiAwOworCXJldHVybiBpZWVlODAyMTFfc3RhX2NvbW1pdChzZGF0YSk7CiB9CiAKIGludCBpZWVlODAyMTFfc3RhX3NldF9leHRyYV9pZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgY2hhciAqaWUsIHNpemVfdCBsZW4pCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhID0gJnNkYXRhLT51LnN0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAotCWtmcmVlKGlmc3RhLT5leHRyYV9pZSk7CisJa2ZyZWUoaWZtZ2QtPmV4dHJhX2llKTsKIAlpZiAobGVuID09IDApIHsKLQkJaWZzdGEtPmV4dHJhX2llID0gTlVMTDsKLQkJaWZzdGEtPmV4dHJhX2llX2xlbiA9IDA7CisJCWlmbWdkLT5leHRyYV9pZSA9IE5VTEw7CisJCWlmbWdkLT5leHRyYV9pZV9sZW4gPSAwOwogCQlyZXR1cm4gMDsKIAl9Ci0JaWZzdGEtPmV4dHJhX2llID0ga21hbGxvYyhsZW4sIEdGUF9LRVJORUwpOwotCWlmICghaWZzdGEtPmV4dHJhX2llKSB7Ci0JCWlmc3RhLT5leHRyYV9pZV9sZW4gPSAwOworCWlmbWdkLT5leHRyYV9pZSA9IGttYWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWlmbWdkLT5leHRyYV9pZSkgeworCQlpZm1nZC0+ZXh0cmFfaWVfbGVuID0gMDsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCW1lbWNweShpZnN0YS0+ZXh0cmFfaWUsIGllLCBsZW4pOwotCWlmc3RhLT5leHRyYV9pZV9sZW4gPSBsZW47CisJbWVtY3B5KGlmbWdkLT5leHRyYV9pZSwgaWUsIGxlbik7CisJaWZtZ2QtPmV4dHJhX2llX2xlbiA9IGxlbjsKIAlyZXR1cm4gMDsKIH0KIAogaW50IGllZWU4MDIxMV9zdGFfZGVhdXRoZW50aWNhdGUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHUxNiByZWFzb24pCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhID0gJnNkYXRhLT51LnN0YTsKLQogCXByaW50ayhLRVJOX0RFQlVHICIlczogZGVhdXRoZW50aWNhdGluZyBieSBsb2NhbCBjaG9pY2UgKHJlYXNvbj0lZClcbiIsCiAJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIHJlYXNvbik7CiAKLQlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gJiYKLQkgICAgc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FESE9DKQorCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZWVlODAyMTFfc2V0X2Rpc2Fzc29jKHNkYXRhLCBpZnN0YSwgdHJ1ZSwgdHJ1ZSwgcmVhc29uKTsKKwlpZWVlODAyMTFfc2V0X2Rpc2Fzc29jKHNkYXRhLCB0cnVlLCB0cnVlLCByZWFzb24pOwogCXJldHVybiAwOwogfQogCiBpbnQgaWVlZTgwMjExX3N0YV9kaXNhc3NvY2lhdGUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHUxNiByZWFzb24pCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhID0gJnNkYXRhLT51LnN0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAogCXByaW50ayhLRVJOX0RFQlVHICIlczogZGlzYXNzb2NpYXRpbmcgYnkgbG9jYWwgY2hvaWNlIChyZWFzb249JWQpXG4iLAogCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCByZWFzb24pOwpAQCAtMjU3NSwxMCArMTk2NSwxMCBAQAogCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoIShpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FTU09DSUFURUQpKQotCQlyZXR1cm4gLTE7CisJaWYgKCEoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9BU1NPQ0lBVEVEKSkKKwkJcmV0dXJuIC1FTk9MSU5LOwogCi0JaWVlZTgwMjExX3NldF9kaXNhc3NvYyhzZGF0YSwgaWZzdGEsIGZhbHNlLCB0cnVlLCByZWFzb24pOworCWllZWU4MDIxMV9zZXRfZGlzYXNzb2Moc2RhdGEsIGZhbHNlLCB0cnVlLCByZWFzb24pOwogCXJldHVybiAwOwogfQogCkBAIC0yNTg2LDE1ICsxOTc2LDYgQEAKIHZvaWQgaWVlZTgwMjExX21sbWVfbm90aWZ5X3NjYW5fY29tcGxldGVkKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKQogewogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gbG9jYWwtPnNjYW5fc2RhdGE7Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhOwotCi0JaWYgKHNkYXRhICYmIHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgewotCQlpZnN0YSA9ICZzZGF0YS0+dS5zdGE7Ci0JCWlmICghKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfQlNTSURfU0VUKSB8fAotCQkgICAgKCEoaWZzdGEtPnN0YXRlID09IElFRUU4MDIxMV9TVEFfTUxNRV9JQlNTX0pPSU5FRCkgJiYKLQkJICAgICFpZWVlODAyMTFfc3RhX2FjdGl2ZV9pYnNzKHNkYXRhKSkpCi0JCQlpZWVlODAyMTFfc3RhX2ZpbmRfaWJzcyhzZGF0YSwgaWZzdGEpOwotCX0KIAogCS8qIFJlc3RhcnQgU1RBIHRpbWVycyAqLwogCXJjdV9yZWFkX2xvY2soKTsKQEAgLTI2MjMsMTIgKzIwMDQsMTUgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9CiAJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsLAogCQkJICAgICBkeW5hbWljX3BzX2VuYWJsZV93b3JrKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IGxvY2FsLT5zY2FuX3NkYXRhOwogCiAJaWYgKGxvY2FsLT5ody5jb25mLmZsYWdzICYgSUVFRTgwMjExX0NPTkZfUFMpCiAJCXJldHVybjsKIAotCWxvY2FsLT5ody5jb25mLmZsYWdzIHw9IElFRUU4MDIxMV9DT05GX1BTOworCWlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfUFNfTlVMTEZVTkNfU1RBQ0spCisJCWllZWU4MDIxMV9zZW5kX251bGxmdW5jKGxvY2FsLCBzZGF0YSwgMSk7CiAKKwlsb2NhbC0+aHcuY29uZi5mbGFncyB8PSBJRUVFODAyMTFfQ09ORl9QUzsKIAlpZWVlODAyMTFfaHdfY29uZmlnKGxvY2FsLCBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUFMpOwogfQogCkBAIC0yNjM4LDMgKzIwMjIsMzYgQEAKIAogCXF1ZXVlX3dvcmsobG9jYWwtPmh3LndvcmtxdWV1ZSwgJmxvY2FsLT5keW5hbWljX3BzX2VuYWJsZV93b3JrKTsKIH0KKwordm9pZCBpZWVlODAyMTFfc2VuZF9udWxsZnVuYyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkgICAgIGludCBwb3dlcnNhdmUpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqbnVsbGZ1bmM7CisJX19sZTE2IGZjOworCisJaWYgKFdBUk5fT04oc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pKQorCQlyZXR1cm47CisKKwlza2IgPSBkZXZfYWxsb2Nfc2tiKGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSArIDI0KTsKKwlpZiAoIXNrYikgeworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBidWZmZXIgZm9yIG51bGxmdW5jICIKKwkJICAgICAgICJmcmFtZVxuIiwgc2RhdGEtPmRldi0+bmFtZSk7CisJCXJldHVybjsKKwl9CisJc2tiX3Jlc2VydmUoc2tiLCBsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20pOworCisJbnVsbGZ1bmMgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiX3B1dChza2IsIDI0KTsKKwltZW1zZXQobnVsbGZ1bmMsIDAsIDI0KTsKKwlmYyA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9EQVRBIHwgSUVFRTgwMjExX1NUWVBFX05VTExGVU5DIHwKKwkJCSBJRUVFODAyMTFfRkNUTF9UT0RTKTsKKwlpZiAocG93ZXJzYXZlKQorCQlmYyB8PSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9QTSk7CisJbnVsbGZ1bmMtPmZyYW1lX2NvbnRyb2wgPSBmYzsKKwltZW1jcHkobnVsbGZ1bmMtPmFkZHIxLCBzZGF0YS0+dS5tZ2QuYnNzaWQsIEVUSF9BTEVOKTsKKwltZW1jcHkobnVsbGZ1bmMtPmFkZHIyLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCW1lbWNweShudWxsZnVuYy0+YWRkcjMsIHNkYXRhLT51Lm1nZC5ic3NpZCwgRVRIX0FMRU4pOworCisJaWVlZTgwMjExX3R4X3NrYihzZGF0YSwgc2tiLCAwKTsKK30KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9wbS5jIGIvbmV0L21hYzgwMjExL3BtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ1MjVmNQotLS0gL2Rldi9udWxsCisrKyBiL25ldC9tYWM4MDIxMS9wbS5jCkBAIC0wLDAgKzEsMTE3IEBACisjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CisjaW5jbHVkZSA8bmV0L3J0bmV0bGluay5oPgorCisjaW5jbHVkZSAiaWVlZTgwMjExX2kuaCIKKyNpbmNsdWRlICJsZWQuaCIKKworaW50IF9faWVlZTgwMjExX3N1c3BlbmQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CisJc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgY29uZjsKKwlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKKworCWZsdXNoX3dvcmtxdWV1ZShsb2NhbC0+aHcud29ya3F1ZXVlKTsKKworCS8qIGRpc2FibGUga2V5cyAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkoc2RhdGEsICZsb2NhbC0+aW50ZXJmYWNlcywgbGlzdCkKKwkJaWVlZTgwMjExX2Rpc2FibGVfa2V5cyhzZGF0YSk7CisKKwkvKiByZW1vdmUgU1RBcyAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkoc3RhLCAmbG9jYWwtPnN0YV9saXN0LCBsaXN0KSB7CisKKwkJaWYgKGxvY2FsLT5vcHMtPnN0YV9ub3RpZnkpIHsKKwkJCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVBfVkxBTikKKwkJCQlzZGF0YSA9IGNvbnRhaW5lcl9vZihzZGF0YS0+YnNzLAorCQkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEsCisJCQkJCSAgICAgdS5hcCk7CisKKwkJCWxvY2FsLT5vcHMtPnN0YV9ub3RpZnkoaHcsICZzZGF0YS0+dmlmLAorCQkJCVNUQV9OT1RJRllfUkVNT1ZFLCAmc3RhLT5zdGEpOworCQl9CisJfQorCisJLyogcmVtb3ZlIGFsbCBpbnRlcmZhY2VzICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShzZGF0YSwgJmxvY2FsLT5pbnRlcmZhY2VzLCBsaXN0KSB7CisKKwkJaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOICYmCisJCSAgICBzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUiAmJgorCQkgICAgbmV0aWZfcnVubmluZyhzZGF0YS0+ZGV2KSkgeworCQkJY29uZi52aWYgPSAmc2RhdGEtPnZpZjsKKwkJCWNvbmYudHlwZSA9IHNkYXRhLT52aWYudHlwZTsKKwkJCWNvbmYubWFjX2FkZHIgPSBzZGF0YS0+ZGV2LT5kZXZfYWRkcjsKKwkJCWxvY2FsLT5vcHMtPnJlbW92ZV9pbnRlcmZhY2UoaHcsICZjb25mKTsKKwkJfQorCX0KKworCS8qIGZsdXNoIGFnYWluLCBpbiBjYXNlIGRyaXZlciBxdWV1ZWQgd29yayAqLworCWZsdXNoX3dvcmtxdWV1ZShsb2NhbC0+aHcud29ya3F1ZXVlKTsKKworCS8qIHN0b3AgaGFyZHdhcmUgKi8KKwlpZiAobG9jYWwtPm9wZW5fY291bnQpIHsKKwkJaWVlZTgwMjExX2xlZF9yYWRpbyhsb2NhbCwgZmFsc2UpOworCQlsb2NhbC0+b3BzLT5zdG9wKGh3KTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCBfX2llZWU4MDIxMV9yZXN1bWUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CisJc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgY29uZjsKKwlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKKwlpbnQgcmVzOworCisJLyogcmVzdGFydCBoYXJkd2FyZSAqLworCWlmIChsb2NhbC0+b3Blbl9jb3VudCkgeworCQlyZXMgPSBsb2NhbC0+b3BzLT5zdGFydChodyk7CisKKwkJaWVlZTgwMjExX2xlZF9yYWRpbyhsb2NhbCwgaHctPmNvbmYucmFkaW9fZW5hYmxlZCk7CisJfQorCisJLyogYWRkIGludGVyZmFjZXMgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkYXRhLCAmbG9jYWwtPmludGVyZmFjZXMsIGxpc3QpIHsKKworCQlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4gJiYKKwkJICAgIHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9NT05JVE9SICYmCisJCSAgICBuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKSB7CisJCQljb25mLnZpZiA9ICZzZGF0YS0+dmlmOworCQkJY29uZi50eXBlID0gc2RhdGEtPnZpZi50eXBlOworCQkJY29uZi5tYWNfYWRkciA9IHNkYXRhLT5kZXYtPmRldl9hZGRyOworCQkJcmVzID0gbG9jYWwtPm9wcy0+YWRkX2ludGVyZmFjZShodywgJmNvbmYpOworCQl9CisJfQorCisJLyogYWRkIFNUQXMgYmFjayAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkoc3RhLCAmbG9jYWwtPnN0YV9saXN0LCBsaXN0KSB7CisKKwkJaWYgKGxvY2FsLT5vcHMtPnN0YV9ub3RpZnkpIHsKKwkJCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVBfVkxBTikKKwkJCQlzZGF0YSA9IGNvbnRhaW5lcl9vZihzZGF0YS0+YnNzLAorCQkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEsCisJCQkJCSAgICAgdS5hcCk7CisKKwkJCWxvY2FsLT5vcHMtPnN0YV9ub3RpZnkoaHcsICZzZGF0YS0+dmlmLAorCQkJCVNUQV9OT1RJRllfQURELCAmc3RhLT5zdGEpOworCQl9CisJfQorCisJLyogYWRkIGJhY2sga2V5cyAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkoc2RhdGEsICZsb2NhbC0+aW50ZXJmYWNlcywgbGlzdCkKKwkJaWYgKG5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldikpCisJCQlpZWVlODAyMTFfZW5hYmxlX2tleXMoc2RhdGEpOworCisJLyogc2V0dXAgUlRTIHRocmVzaG9sZCAqLworCWlmIChsb2NhbC0+b3BzLT5zZXRfcnRzX3RocmVzaG9sZCkKKwkJbG9jYWwtPm9wcy0+c2V0X3J0c190aHJlc2hvbGQoaHcsIGxvY2FsLT5ydHNfdGhyZXNob2xkKTsKKworCS8qIHJlY29uZmlndXJlIGhhcmR3YXJlICovCisJaWVlZTgwMjExX2h3X2NvbmZpZyhsb2NhbCwgfjApOworCisJbmV0aWZfYWRkcl9sb2NrX2JoKGxvY2FsLT5tZGV2KTsKKwlpZWVlODAyMTFfY29uZmlndXJlX2ZpbHRlcihsb2NhbCk7CisJbmV0aWZfYWRkcl91bmxvY2tfYmgobG9jYWwtPm1kZXYpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvcmF0ZS5oIGIvbmV0L21hYzgwMjExL3JhdGUuaAppbmRleCA5MjhkYTYyLi5iOTE2NGM5IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvcmF0ZS5oCisrKyBiL25ldC9tYWM4MDIxMS9yYXRlLmgKQEAgLTYyLDYgKzYyLDE4IEBACiAJcmVmLT5vcHMtPnJhdGVfaW5pdChyZWYtPnByaXYsIHNiYW5kLCBpc3RhLCBwcml2X3N0YSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCByYXRlX2NvbnRyb2xfcmF0ZV91cGRhdGUoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kLAorCQkJCSAgICBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgdTMyIGNoYW5nZWQpCit7CisJc3RydWN0IHJhdGVfY29udHJvbF9yZWYgKnJlZiA9IGxvY2FsLT5yYXRlX2N0cmw7CisJc3RydWN0IGllZWU4MDIxMV9zdGEgKmlzdGEgPSAmc3RhLT5zdGE7CisJdm9pZCAqcHJpdl9zdGEgPSBzdGEtPnJhdGVfY3RybF9wcml2OworCisJaWYgKHJlZi0+b3BzLT5yYXRlX3VwZGF0ZSkKKwkJcmVmLT5vcHMtPnJhdGVfdXBkYXRlKHJlZi0+cHJpdiwgc2JhbmQsIGlzdGEsCisJCQkJICAgICAgcHJpdl9zdGEsIGNoYW5nZWQpOworfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgKnJhdGVfY29udHJvbF9hbGxvY19zdGEoc3RydWN0IHJhdGVfY29udHJvbF9yZWYgKnJlZiwKIAkJCQkJICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9yeC5jIGIvbmV0L21hYzgwMjExL3J4LmMKaW5kZXggNzE3NWFlOC4uNjZmN2VjZiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3J4LmMKKysrIGIvbmV0L21hYzgwMjExL3J4LmMKQEAgLTg2LDggKzg2LDcgQEAKIAogCWlmIChzdGF0dXMtPmZsYWcgJiBSWF9GTEFHX1RTRlQpCiAJCWxlbiArPSA4OwotCWlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfU0lHTkFMX0RCIHx8Ci0JICAgIGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TSUdOQUxfREJNKQorCWlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfU0lHTkFMX0RCTSkKIAkJbGVuICs9IDE7CiAJaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19OT0lTRV9EQk0pCiAJCWxlbiArPSAxOwpAQCAtMTAyLDcgKzEwMSw3IEBACiAJcmV0dXJuIGxlbjsKIH0KIAotLyoqCisvKgogICogaWVlZTgwMjExX2FkZF9yeF9yYWRpb3RhcF9oZWFkZXIgLSBhZGQgcmFkaW90YXAgaGVhZGVyCiAgKgogICogYWRkIGEgcmFkaW90YXAgaGVhZGVyIGNvbnRhaW5pbmcgYWxsIHRoZSBmaWVsZHMgd2hpY2ggdGhlIGhhcmR3YXJlIHByb3ZpZGVkLgpAQCAtMTU4LDcgKzE1Nyw3IEBACiAJCSAqLwogCQkqcG9zID0gMDsKIAl9IGVsc2UgewotCQlydGhkci0+aXRfcHJlc2VudCB8PSAoMSA8PCBJRUVFODAyMTFfUkFESU9UQVBfUkFURSk7CisJCXJ0aGRyLT5pdF9wcmVzZW50IHw9IGNwdV90b19sZTMyKDEgPDwgSUVFRTgwMjExX1JBRElPVEFQX1JBVEUpOwogCQkqcG9zID0gcmF0ZS0+Yml0cmF0ZSAvIDU7CiAJfQogCXBvcysrOwpAQCAtMTk5LDE0ICsxOTgsNiBAQAogCSpwb3MgPSBzdGF0dXMtPmFudGVubmE7CiAJcG9zKys7CiAKLQkvKiBJRUVFODAyMTFfUkFESU9UQVBfREJfQU5UU0lHTkFMICovCi0JaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TSUdOQUxfREIpIHsKLQkJKnBvcyA9IHN0YXR1cy0+c2lnbmFsOwotCQlydGhkci0+aXRfcHJlc2VudCB8PQotCQkJY3B1X3RvX2xlMzIoMSA8PCBJRUVFODAyMTFfUkFESU9UQVBfREJfQU5UU0lHTkFMKTsKLQkJcG9zKys7Ci0JfQotCiAJLyogSUVFRTgwMjExX1JBRElPVEFQX0RCX0FOVE5PSVNFIGlzIG5vdCB1c2VkICovCiAKIAkvKiBJRUVFODAyMTFfUkFESU9UQVBfUlhfRkxBR1MgKi8KQEAgLTM3MSwzOSArMzYyLDUwIEBACiAJcngtPnNrYi0+cHJpb3JpdHkgPSAodGlkID4gNykgPyAwIDogdGlkOwogfQogCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfdmVyaWZ5X2lwX2FsaWdubWVudChzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KQorLyoqCisgKiBET0M6IFBhY2tldCBhbGlnbm1lbnQKKyAqCisgKiBEcml2ZXJzIGFsd2F5cyBuZWVkIHRvIHBhc3MgcGFja2V0cyB0aGF0IGFyZSBhbGlnbmVkIHRvIHR3by1ieXRlIGJvdW5kYXJpZXMKKyAqIHRvIHRoZSBzdGFjay4KKyAqCisgKiBBZGRpdGlvbmFsbHksIHNob3VsZCwgaWYgcG9zc2libGUsIGFsaWduIHRoZSBwYXlsb2FkIGRhdGEgaW4gYSB3YXkgdGhhdAorICogZ3VhcmFudGVlcyB0aGF0IHRoZSBjb250YWluZWQgSVAgaGVhZGVyIGlzIGFsaWduZWQgdG8gYSBmb3VyLWJ5dGUKKyAqIGJvdW5kYXJ5LiBJbiB0aGUgY2FzZSBvZiByZWd1bGFyIGZyYW1lcywgdGhpcyBzaW1wbHkgbWVhbnMgYWxpZ25pbmcgdGhlCisgKiBwYXlsb2FkIHRvIGEgZm91ci1ieXRlIGJvdW5kYXJ5IChiZWNhdXNlIGVpdGhlciB0aGUgSVAgaGVhZGVyIGlzIGRpcmVjdGx5CisgKiBjb250YWluZWQsIG9yIElWL1JGQzEwNDIgaGVhZGVycyB0aGF0IGhhdmUgYSBsZW5ndGggZGl2aXNpYmxlIGJ5IGZvdXIgYXJlCisgKiBpbiBmcm9udCBvZiBpdCkuCisgKgorICogV2l0aCBBLU1TRFUgZnJhbWVzLCBob3dldmVyLCB0aGUgcGF5bG9hZCBkYXRhIGFkZHJlc3MgbXVzdCB5aWVsZCB0d28gbW9kdWxvCisgKiBmb3VyIGJlY2F1c2UgdGhlcmUgYXJlIDE0LWJ5dGUgODAyLjMgaGVhZGVycyB3aXRoaW4gdGhlIEEtTVNEVSBmcmFtZXMgdGhhdAorICogcHVzaCB0aGUgSVAgaGVhZGVyIGZ1cnRoZXIgYmFjayB0byBhIG11bHRpcGxlIG9mIGZvdXIgYWdhaW4uIFRoYW5rZnVsbHksIHRoZQorICogc3BlY3Mgd2VyZSBzYW5lIGVub3VnaCB0aGlzIHRpbWUgYXJvdW5kIHRvIHJlcXVpcmUgcGFkZGluZyBlYWNoIEEtTVNEVQorICogc3ViZnJhbWUgdG8gYSBsZW5ndGggdGhhdCBpcyBhIG11bHRpcGxlIG9mIGZvdXIuCisgKgorICogUGFkZGluZyBsaWtlIEF0aGVyb3MgaGFyZHdhcmUgYWRkcyB3aGljaCBpcyBpbmJldHdlZW4gdGhlIDgwMi4xMSBoZWFkZXIgYW5kCisgKiB0aGUgcGF5bG9hZCBpcyBub3Qgc3VwcG9ydGVkLCB0aGUgZHJpdmVyIGlzIHJlcXVpcmVkIHRvIG1vdmUgdGhlIDgwMi4xMQorICogaGVhZGVyIHRvIGJlIGRpcmVjdGx5IGluIGZyb250IG9mIHRoZSBwYXlsb2FkIGluIHRoYXQgY2FzZS4KKyAqLworc3RhdGljIHZvaWQgaWVlZTgwMjExX3ZlcmlmeV9hbGlnbm1lbnQoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCkKIHsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdfUEFDS0VUX0FMSUdOTUVOVAogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilyeC0+c2tiLT5kYXRhOwogCWludCBoZHJsZW47CiAKKyNpZm5kZWYgQ09ORklHX01BQzgwMjExX0RFQlVHX1BBQ0tFVF9BTElHTk1FTlQKKwlyZXR1cm47CisjZW5kaWYKKworCWlmIChXQVJOX09OQ0UoKHVuc2lnbmVkIGxvbmcpcngtPnNrYi0+ZGF0YSAmIDEsCisJCSAgICAgICJ1bmFsaWduZWQgcGFja2V0IGF0IDB4JXBcbiIsIHJ4LT5za2ItPmRhdGEpKQorCQlyZXR1cm47CisKIAlpZiAoIWllZWU4MDIxMV9pc19kYXRhX3ByZXNlbnQoaGRyLT5mcmFtZV9jb250cm9sKSkKIAkJcmV0dXJuOwogCi0JLyoKLQkgKiBEcml2ZXJzIGFyZSByZXF1aXJlZCB0byBhbGlnbiB0aGUgcGF5bG9hZCBkYXRhIGluIGEgd2F5IHRoYXQKLQkgKiBndWFyYW50ZWVzIHRoYXQgdGhlIGNvbnRhaW5lZCBJUCBoZWFkZXIgaXMgYWxpZ25lZCB0byBhIGZvdXItCi0JICogYnl0ZSBib3VuZGFyeS4gSW4gdGhlIGNhc2Ugb2YgcmVndWxhciBmcmFtZXMsIHRoaXMgc2ltcGx5IG1lYW5zCi0JICogYWxpZ25pbmcgdGhlIHBheWxvYWQgdG8gYSBmb3VyLWJ5dGUgYm91bmRhcnkgKGJlY2F1c2UgZWl0aGVyCi0JICogdGhlIElQIGhlYWRlciBpcyBkaXJlY3RseSBjb250YWluZWQsIG9yIElWL1JGQzEwNDIgaGVhZGVycyB0aGF0Ci0JICogaGF2ZSBhIGxlbmd0aCBkaXZpc2libGUgYnkgZm91ciBhcmUgaW4gZnJvbnQgb2YgaXQuCi0JICoKLQkgKiBXaXRoIEEtTVNEVSBmcmFtZXMsIGhvd2V2ZXIsIHRoZSBwYXlsb2FkIGRhdGEgYWRkcmVzcyBtdXN0Ci0JICogeWllbGQgdHdvIG1vZHVsbyBmb3VyIGJlY2F1c2UgdGhlcmUgYXJlIDE0LWJ5dGUgODAyLjMgaGVhZGVycwotCSAqIHdpdGhpbiB0aGUgQS1NU0RVIGZyYW1lcyB0aGF0IHB1c2ggdGhlIElQIGhlYWRlciBmdXJ0aGVyIGJhY2sKLQkgKiB0byBhIG11bHRpcGxlIG9mIGZvdXIgYWdhaW4uIFRoYW5rZnVsbHksIHRoZSBzcGVjcyB3ZXJlIHNhbmUKLQkgKiBlbm91Z2ggdGhpcyB0aW1lIGFyb3VuZCB0byByZXF1aXJlIHBhZGRpbmcgZWFjaCBBLU1TRFUgc3ViZnJhbWUKLQkgKiB0byBhIGxlbmd0aCB0aGF0IGlzIGEgbXVsdGlwbGUgb2YgZm91ci4KLQkgKgotCSAqIFBhZGRpbmcgbGlrZSBhdGhlcm9zIGhhcmR3YXJlIGFkZHMgd2hpY2ggaXMgaW5iZXR3ZWVuIHRoZSA4MDIuMTEKLQkgKiBoZWFkZXIgYW5kIHRoZSBwYXlsb2FkIGlzIG5vdCBzdXBwb3J0ZWQsIHRoZSBkcml2ZXIgaXMgcmVxdWlyZWQKLQkgKiB0byBtb3ZlIHRoZSA4MDIuMTEgaGVhZGVyIGZ1cnRoZXIgYmFjayBpbiB0aGF0IGNhc2UuCi0JICovCiAJaGRybGVuID0gaWVlZTgwMjExX2hkcmxlbihoZHItPmZyYW1lX2NvbnRyb2wpOwogCWlmIChyeC0+ZmxhZ3MgJiBJRUVFODAyMTFfUlhfQU1TRFUpCiAJCWhkcmxlbiArPSBFVEhfSExFTjsKLQlXQVJOX09OX09OQ0UoKCh1bnNpZ25lZCBsb25nKShyeC0+c2tiLT5kYXRhICsgaGRybGVuKSkgJiAzKTsKLSNlbmRpZgorCVdBUk5fT05DRSgoKHVuc2lnbmVkIGxvbmcpKHJ4LT5za2ItPmRhdGEgKyBoZHJsZW4pKSAmIDMsCisJCSAgInVuYWxpZ25lZCBJUCBwYXlsb2FkIGF0IDB4JXBcbiIsIHJ4LT5za2ItPmRhdGEgKyBoZHJsZW4pOwogfQogCiAKQEAgLTQzNSw2ICs0MzcsNTIgQEAKIAlyZXR1cm4gUlhfQ09OVElOVUU7CiB9CiAKKworc3RhdGljIGludCBpZWVlODAyMTFfaXNfdW5pY2FzdF9yb2J1c3RfbWdtdF9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOworCisJaWYgKHNrYi0+bGVuIDwgMjQgfHwgaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLT5hZGRyMSkpCisJCXJldHVybiAwOworCisJcmV0dXJuIGllZWU4MDIxMV9pc19yb2J1c3RfbWdtdF9mcmFtZShoZHIpOworfQorCisKK3N0YXRpYyBpbnQgaWVlZTgwMjExX2lzX211bHRpY2FzdF9yb2J1c3RfbWdtdF9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOworCisJaWYgKHNrYi0+bGVuIDwgMjQgfHwgIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBpZWVlODAyMTFfaXNfcm9idXN0X21nbXRfZnJhbWUoaGRyKTsKK30KKworCisvKiBHZXQgdGhlIEJJUCBrZXkgaW5kZXggZnJvbSBNTUlFOyByZXR1cm4gLTEgaWYgdGhpcyBpcyBub3QgYSBCSVAgZnJhbWUgKi8KK3N0YXRpYyBpbnQgaWVlZTgwMjExX2dldF9tbWllX2tleWlkeChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSBza2ItPmRhdGE7CisJc3RydWN0IGllZWU4MDIxMV9tbWllICptbWllOworCisJaWYgKHNrYi0+bGVuIDwgMjQgKyBzaXplb2YoKm1taWUpIHx8CisJICAgICFpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHItPmRhKSkKKwkJcmV0dXJuIC0xOworCisJaWYgKCFpZWVlODAyMTFfaXNfcm9idXN0X21nbXRfZnJhbWUoKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIGhkcikpCisJCXJldHVybiAtMTsgLyogbm90IGEgcm9idXN0IG1hbmFnZW1lbnQgZnJhbWUgKi8KKworCW1taWUgPSAoc3RydWN0IGllZWU4MDIxMV9tbWllICopCisJCShza2ItPmRhdGEgKyBza2ItPmxlbiAtIHNpemVvZigqbW1pZSkpOworCWlmIChtbWllLT5lbGVtZW50X2lkICE9IFdMQU5fRUlEX01NSUUgfHwKKwkgICAgbW1pZS0+bGVuZ3RoICE9IHNpemVvZigqbW1pZSkgLSAyKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gbGUxNl90b19jcHUobW1pZS0+a2V5X2lkKTsKK30KKworCiBzdGF0aWMgaWVlZTgwMjExX3J4X3Jlc3VsdAogaWVlZTgwMjExX3J4X21lc2hfY2hlY2soc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCkKIHsKQEAgLTU1MCwyMSArNTk4LDIzIEBACiAJaW50IGhkcmxlbjsKIAlpZWVlODAyMTFfcnhfcmVzdWx0IHJlc3VsdCA9IFJYX0RST1BfVU5VU0FCTEU7CiAJc3RydWN0IGllZWU4MDIxMV9rZXkgKnN0YWtleSA9IE5VTEw7CisJaW50IG1taWVfa2V5aWR4ID0gLTE7CiAKIAkvKgogCSAqIEtleSBzZWxlY3Rpb24gMTAxCiAJICoKLQkgKiBUaGVyZSBhcmUgdGhyZWUgdHlwZXMgb2Yga2V5czoKKwkgKiBUaGVyZSBhcmUgZm91ciB0eXBlcyBvZiBrZXlzOgogCSAqICAtIEdUSyAoZ3JvdXAga2V5cykKKwkgKiAgLSBJR1RLIChncm91cCBrZXlzIGZvciBtYW5hZ2VtZW50IGZyYW1lcykKIAkgKiAgLSBQVEsgKHBhaXJ3aXNlIGtleXMpCiAJICogIC0gU1RLIChzdGF0aW9uLXRvLXN0YXRpb24gcGFpcndpc2Uga2V5cykKIAkgKgogCSAqIFdoZW4gc2VsZWN0aW5nIGEga2V5LCB3ZSBoYXZlIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gbXVsdGljYXN0CiAJICogKGluY2x1ZGluZyBicm9hZGNhc3QpIGFuZCB1bmljYXN0IGZyYW1lcywgdGhlIGxhdHRlciBjYW4gb25seQotCSAqIHVzZSBQVEtzIGFuZCBTVEtzIHdoaWxlIHRoZSBmb3JtZXIgYWx3YXlzIHVzZSBHVEtzLiBVbmxlc3MsIG9mCi0JICogY291cnNlLCBhY3R1YWwgV0VQIGtleXMgKCJwcmUtUlNOQSIpIGFyZSB1c2VkLCB0aGVuIHVuaWNhc3QKLQkgKiBmcmFtZXMgY2FuIGFsc28gdXNlIGtleSBpbmRpemVzIGxpa2UgR1RLcy4gSGVuY2UsIGlmIHdlIGRvbid0Ci0JICogaGF2ZSBhIFBUSy9TVEsgd2UgY2hlY2sgdGhlIGtleSBpbmRleCBmb3IgYSBXRVAga2V5LgorCSAqIHVzZSBQVEtzIGFuZCBTVEtzIHdoaWxlIHRoZSBmb3JtZXIgYWx3YXlzIHVzZSBHVEtzIGFuZCBJR1RLcy4KKwkgKiBVbmxlc3MsIG9mIGNvdXJzZSwgYWN0dWFsIFdFUCBrZXlzICgicHJlLVJTTkEiKSBhcmUgdXNlZCwgdGhlbgorCSAqIHVuaWNhc3QgZnJhbWVzIGNhbiBhbHNvIHVzZSBrZXkgaW5kaWNlcyBsaWtlIEdUS3MuIEhlbmNlLCBpZiB3ZQorCSAqIGRvbid0IGhhdmUgYSBQVEsvU1RLIHdlIGNoZWNrIHRoZSBrZXkgaW5kZXggZm9yIGEgV0VQIGtleS4KIAkgKgogCSAqIE5vdGUgdGhhdCBpbiBhIHJlZ3VsYXIgQlNTLCBtdWx0aWNhc3QgZnJhbWVzIGFyZSBzZW50IGJ5IHRoZQogCSAqIEFQIG9ubHksIGFzc29jaWF0ZWQgc3RhdGlvbnMgdW5pY2FzdCB0aGUgZnJhbWUgdG8gdGhlIEFQIGZpcnN0CkBAIC01NzcsOCArNjI3LDE0IEBACiAJICogcG9zc2libGUuCiAJICovCiAKLQlpZiAoIWllZWU4MDIxMV9oYXNfcHJvdGVjdGVkKGhkci0+ZnJhbWVfY29udHJvbCkpCi0JCXJldHVybiBSWF9DT05USU5VRTsKKwlpZiAoIWllZWU4MDIxMV9oYXNfcHJvdGVjdGVkKGhkci0+ZnJhbWVfY29udHJvbCkpIHsKKwkJaWYgKCFpZWVlODAyMTFfaXNfbWdtdChoZHItPmZyYW1lX2NvbnRyb2wpIHx8CisJCSAgICByeC0+c3RhID09IE5VTEwgfHwgIXRlc3Rfc3RhX2ZsYWdzKHJ4LT5zdGEsIFdMQU5fU1RBX01GUCkpCisJCQlyZXR1cm4gUlhfQ09OVElOVUU7CisJCW1taWVfa2V5aWR4ID0gaWVlZTgwMjExX2dldF9tbWllX2tleWlkeChyeC0+c2tiKTsKKwkJaWYgKG1taWVfa2V5aWR4IDwgMCkKKwkJCXJldHVybiBSWF9DT05USU5VRTsKKwl9CiAKIAkvKgogCSAqIE5vIHBvaW50IGluIGZpbmRpbmcgYSBrZXkgYW5kIGRlY3J5cHRpbmcgaWYgdGhlIGZyYW1lIGlzIG5laXRoZXIKQEAgLTU5Miw2ICs2NDgsMTYgQEAKIAogCWlmICghaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLT5hZGRyMSkgJiYgc3Rha2V5KSB7CiAJCXJ4LT5rZXkgPSBzdGFrZXk7CisJfSBlbHNlIGlmIChtbWllX2tleWlkeCA+PSAwKSB7CisJCS8qIEJyb2FkY2FzdC9tdWx0aWNhc3Qgcm9idXN0IG1hbmFnZW1lbnQgZnJhbWUgLyBCSVAgKi8KKwkJaWYgKChyeC0+c3RhdHVzLT5mbGFnICYgUlhfRkxBR19ERUNSWVBURUQpICYmCisJCSAgICAocngtPnN0YXR1cy0+ZmxhZyAmIFJYX0ZMQUdfSVZfU1RSSVBQRUQpKQorCQkJcmV0dXJuIFJYX0NPTlRJTlVFOworCisJCWlmIChtbWllX2tleWlkeCA8IE5VTV9ERUZBVUxUX0tFWVMgfHwKKwkJICAgIG1taWVfa2V5aWR4ID49IE5VTV9ERUZBVUxUX0tFWVMgKyBOVU1fREVGQVVMVF9NR01UX0tFWVMpCisJCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOyAvKiB1bmV4cGVjdGVkIEJJUCBrZXlpZHggKi8KKwkJcngtPmtleSA9IHJjdV9kZXJlZmVyZW5jZShyeC0+c2RhdGEtPmtleXNbbW1pZV9rZXlpZHhdKTsKIAl9IGVsc2UgewogCQkvKgogCQkgKiBUaGUgZGV2aWNlIGRvZXNuJ3QgZ2l2ZSB1cyB0aGUgSVYgc28gd2Ugd29uJ3QgYmUKQEAgLTY1NCw2ICs3MjAsOSBAQAogCWNhc2UgQUxHX0NDTVA6CiAJCXJlc3VsdCA9IGllZWU4MDIxMV9jcnlwdG9fY2NtcF9kZWNyeXB0KHJ4KTsKIAkJYnJlYWs7CisJY2FzZSBBTEdfQUVTX0NNQUM6CisJCXJlc3VsdCA9IGllZWU4MDIxMV9jcnlwdG9fYWVzX2NtYWNfZGVjcnlwdChyeCk7CisJCWJyZWFrOwogCX0KIAogCS8qIGVpdGhlciB0aGUgZnJhbWUgaGFzIGJlZW4gZGVjcnlwdGVkIG9yIHdpbGwgYmUgZHJvcHBlZCAqLwpAQCAtNjYyLDYgKzczMSwzOSBAQAogCXJldHVybiByZXN1bHQ7CiB9CiAKK3N0YXRpYyBpZWVlODAyMTFfcnhfcmVzdWx0IGRlYnVnX25vaW5saW5lCitpZWVlODAyMTFfcnhfaF9jaGVja19tb3JlX2RhdGEoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOworCXN0cnVjdCBza19idWZmICpza2I7CisKKwlsb2NhbCA9IHJ4LT5sb2NhbDsKKwlza2IgPSByeC0+c2tiOworCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CisKKwlpZiAoIWxvY2FsLT5wc3BvbGxpbmcpCisJCXJldHVybiBSWF9DT05USU5VRTsKKworCWlmICghaWVlZTgwMjExX2hhc19mcm9tZHMoaGRyLT5mcmFtZV9jb250cm9sKSkKKwkJLyogdGhpcyBpcyBub3QgZnJvbSBBUCAqLworCQlyZXR1cm4gUlhfQ09OVElOVUU7CisKKwlpZiAoIWllZWU4MDIxMV9pc19kYXRhKGhkci0+ZnJhbWVfY29udHJvbCkpCisJCXJldHVybiBSWF9DT05USU5VRTsKKworCWlmICghaWVlZTgwMjExX2hhc19tb3JlZGF0YShoZHItPmZyYW1lX2NvbnRyb2wpKSB7CisJCS8qIEFQIGhhcyBubyBtb3JlIGZyYW1lcyBidWZmZXJlZCBmb3IgdXMgKi8KKwkJbG9jYWwtPnBzcG9sbGluZyA9IGZhbHNlOworCQlyZXR1cm4gUlhfQ09OVElOVUU7CisJfQorCisJLyogbW9yZSBkYXRhIGJpdCBpcyBzZXQsIGxldCdzIHJlcXVlc3QgYSBuZXcgZnJhbWUgZnJvbSB0aGUgQVAgKi8KKwlpZWVlODAyMTFfc2VuZF9wc3BvbGwobG9jYWwsIHJ4LT5zZGF0YSk7CisKKwlyZXR1cm4gUlhfQ09OVElOVUU7Cit9CisKIHN0YXRpYyB2b2lkIGFwX3N0YV9wc19zdGFydChzdHJ1Y3Qgc3RhX2luZm8gKnN0YSkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IHN0YS0+c2RhdGE7CkBAIC03MzYsNyArODM4LDcgQEAKIAlpZiAocngtPnNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgewogCQl1OCAqYnNzaWQgPSBpZWVlODAyMTFfZ2V0X2Jzc2lkKGhkciwgcngtPnNrYi0+bGVuLAogCQkJCQkJTkw4MDIxMV9JRlRZUEVfQURIT0MpOwotCQlpZiAoY29tcGFyZV9ldGhlcl9hZGRyKGJzc2lkLCByeC0+c2RhdGEtPnUuc3RhLmJzc2lkKSA9PSAwKQorCQlpZiAoY29tcGFyZV9ldGhlcl9hZGRyKGJzc2lkLCByeC0+c2RhdGEtPnUuaWJzcy5ic3NpZCkgPT0gMCkKIAkJCXN0YS0+bGFzdF9yeCA9IGppZmZpZXM7CiAJfSBlbHNlCiAJaWYgKCFpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHItPmFkZHIxKSB8fApAQCAtMTEwMSw2ICsxMjAzLDE1IEBACiAJLyogRHJvcCB1bmVuY3J5cHRlZCBmcmFtZXMgaWYga2V5IGlzIHNldC4gKi8KIAlpZiAodW5saWtlbHkoIWllZWU4MDIxMV9oYXNfcHJvdGVjdGVkKGZjKSAmJgogCQkgICAgICFpZWVlODAyMTFfaXNfbnVsbGZ1bmMoZmMpICYmCisJCSAgICAgKCFpZWVlODAyMTFfaXNfbWdtdChmYykgfHwKKwkJICAgICAgKGllZWU4MDIxMV9pc191bmljYXN0X3JvYnVzdF9tZ210X2ZyYW1lKHJ4LT5za2IpICYmCisJCSAgICAgICByeC0+c3RhICYmIHRlc3Rfc3RhX2ZsYWdzKHJ4LT5zdGEsIFdMQU5fU1RBX01GUCkpKSAmJgorCQkgICAgIChyeC0+a2V5IHx8IHJ4LT5zZGF0YS0+ZHJvcF91bmVuY3J5cHRlZCkpKQorCQlyZXR1cm4gLUVBQ0NFUzsKKwkvKiBCSVAgZG9lcyBub3QgdXNlIFByb3RlY3RlZCBmaWVsZCwgc28gbmVlZCB0byBjaGVjayBNTUlFICovCisJaWYgKHVubGlrZWx5KHJ4LT5zdGEgJiYgdGVzdF9zdGFfZmxhZ3MocngtPnN0YSwgV0xBTl9TVEFfTUZQKSAmJgorCQkgICAgIGllZWU4MDIxMV9pc19tdWx0aWNhc3Rfcm9idXN0X21nbXRfZnJhbWUocngtPnNrYikgJiYKKwkJICAgICBpZWVlODAyMTFfZ2V0X21taWVfa2V5aWR4KHJ4LT5za2IpIDwgMCAmJgogCQkgICAgIChyeC0+a2V5IHx8IHJ4LT5zZGF0YS0+ZHJvcF91bmVuY3J5cHRlZCkpKQogCQlyZXR1cm4gLUVBQ0NFUzsKIApAQCAtMTEzOCwxMiArMTI0OSwxMiBAQAogCiAJc3dpdGNoIChoZHItPmZyYW1lX2NvbnRyb2wgJgogCQljcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9UT0RTIHwgSUVFRTgwMjExX0ZDVExfRlJPTURTKSkgewotCWNhc2UgX19jb25zdGFudF9jcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9UT0RTKToKKwljYXNlIGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX1RPRFMpOgogCQlpZiAodW5saWtlbHkoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FQICYmCiAJCQkgICAgIHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOKSkKIAkJCXJldHVybiAtMTsKIAkJYnJlYWs7Ci0JY2FzZSBfX2NvbnN0YW50X2NwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX1RPRFMgfCBJRUVFODAyMTFfRkNUTF9GUk9NRFMpOgorCWNhc2UgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfVE9EUyB8IElFRUU4MDIxMV9GQ1RMX0ZST01EUyk6CiAJCWlmICh1bmxpa2VseShzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfV0RTICYmCiAJCQkgICAgIHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKSkKIAkJCXJldHVybiAtMTsKQEAgLTExNTcsMTMgKzEyNjgsMTMgQEAKIAkJCX0KIAkJfQogCQlicmVhazsKLQljYXNlIF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfRlJPTURTKToKKwljYXNlIGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX0ZST01EUyk6CiAJCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiB8fAogCQkgICAgKGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGRzdCkgJiYKIAkJICAgICAhY29tcGFyZV9ldGhlcl9hZGRyKHNyYywgZGV2LT5kZXZfYWRkcikpKQogCQkJcmV0dXJuIC0xOwogCQlicmVhazsKLQljYXNlIF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMCk6CisJY2FzZSBjcHVfdG9fbGUxNigwKToKIAkJaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BREhPQykKIAkJCXJldHVybiAtMTsKIAkJYnJlYWs7CkBAIC0xMjY3LDEwICsxMzc4LDM3IEBACiAJfQogCiAJaWYgKHNrYikgewotCQkvKiBkZWxpdmVyIHRvIGxvY2FsIHN0YWNrICovCi0JCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7Ci0JCW1lbXNldChza2ItPmNiLCAwLCBzaXplb2Yoc2tiLT5jYikpOwotCQluZXRpZl9yeChza2IpOworCQlpbnQgYWxpZ24gX19tYXliZV91bnVzZWQ7CisKKyNpZiBkZWZpbmVkKENPTkZJR19NQUM4MDIxMV9ERUJVR19QQUNLRVRfQUxJR05NRU5UKSB8fCAhZGVmaW5lZChDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUykKKwkJLyoKKwkJICogJ2FsaWduJyB3aWxsIG9ubHkgdGFrZSB0aGUgdmFsdWVzIDAgb3IgMiBoZXJlCisJCSAqIHNpbmNlIGFsbCBmcmFtZXMgYXJlIHJlcXVpcmVkIHRvIGJlIGFsaWduZWQKKwkJICogdG8gMi1ieXRlIGJvdW5kYXJpZXMgd2hlbiBiZWluZyBwYXNzZWQgdG8KKwkJICogbWFjODAyMTEuIFRoYXQgYWxzbyBleHBsYWlucyB0aGUgX19za2JfcHVzaCgpCisJCSAqIGJlbG93LgorCQkgKi8KKwkJYWxpZ24gPSAodW5zaWduZWQgbG9uZylza2ItPmRhdGEgJiA0OworCQlpZiAoYWxpZ24pIHsKKwkJCWlmIChXQVJOX09OKHNrYl9oZWFkcm9vbShza2IpIDwgMykpIHsKKwkJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCQkJc2tiID0gTlVMTDsKKwkJCX0gZWxzZSB7CisJCQkJdTggKmRhdGEgPSBza2ItPmRhdGE7CisJCQkJc2l6ZV90IGxlbiA9IHNrYi0+bGVuOworCQkJCXU4ICpuZXcgPSBfX3NrYl9wdXNoKHNrYiwgYWxpZ24pOworCQkJCW1lbW1vdmUobmV3LCBkYXRhLCBsZW4pOworCQkJCV9fc2tiX3RyaW0oc2tiLCBsZW4pOworCQkJfQorCQl9CisjZW5kaWYKKworCQlpZiAoc2tiKSB7CisJCQkvKiBkZWxpdmVyIHRvIGxvY2FsIHN0YWNrICovCisJCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYpOworCQkJbWVtc2V0KHNrYi0+Y2IsIDAsIHNpemVvZihza2ItPmNiKSk7CisJCQluZXRpZl9yeChza2IpOworCQl9CiAJfQogCiAJaWYgKHhtaXRfc2tiKSB7CkBAIC0xMzM5LDE0ICsxNDc3LDIwIEBACiAJCWlmIChyZW1haW5pbmcgPD0gc3ViZnJhbWVfbGVuICsgcGFkZGluZykKIAkJCWZyYW1lID0gc2tiOwogCQllbHNlIHsKLQkJCWZyYW1lID0gZGV2X2FsbG9jX3NrYihsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20gKwotCQkJCQkgICAgICBzdWJmcmFtZV9sZW4pOworCQkJLyoKKwkJCSAqIEFsbG9jYXRlIGFuZCByZXNlcnZlIHR3byBieXRlcyBtb3JlIGZvciBwYXlsb2FkCisJCQkgKiBhbGlnbm1lbnQgc2luY2Ugc2l6ZW9mKHN0cnVjdCBldGhoZHIpIGlzIDE0LgorCQkJICovCisJCQlmcmFtZSA9IGRldl9hbGxvY19za2IoCisJCQkJQUxJR04obG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tLCA0KSArCisJCQkJc3ViZnJhbWVfbGVuICsgMik7CiAKIAkJCWlmIChmcmFtZSA9PSBOVUxMKQogCQkJCXJldHVybiBSWF9EUk9QX1VOVVNBQkxFOwogCi0JCQlza2JfcmVzZXJ2ZShmcmFtZSwgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tICsKLQkJCQkgICAgc2l6ZW9mKHN0cnVjdCBldGhoZHIpKTsKKwkJCXNrYl9yZXNlcnZlKGZyYW1lLAorCQkJCSAgICBBTElHTihsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20sIDQpICsKKwkJCQkgICAgc2l6ZW9mKHN0cnVjdCBldGhoZHIpICsgMik7CiAJCQltZW1jcHkoc2tiX3B1dChmcmFtZSwgbnRvaHMobGVuKSksIHNrYi0+ZGF0YSwKIAkJCQludG9ocyhsZW4pKTsKIApAQCAtMTUyOSwxMSArMTY3Myw5IEBACiAJCXN0YXJ0X3NlcV9udW0gPSBsZTE2X3RvX2NwdShiYXItPnN0YXJ0X3NlcV9udW0pID4+IDQ7CiAKIAkJLyogcmVzZXQgc2Vzc2lvbiB0aW1lciAqLwotCQlpZiAodGlkX2FnZ19yeC0+dGltZW91dCkgewotCQkJdW5zaWduZWQgbG9uZyBleHBpcmVzID0KLQkJCQlqaWZmaWVzICsgKHRpZF9hZ2dfcngtPnRpbWVvdXQgLyAxMDAwKSAqIEhaOwotCQkJbW9kX3RpbWVyKCZ0aWRfYWdnX3J4LT5zZXNzaW9uX3RpbWVyLCBleHBpcmVzKTsKLQkJfQorCQlpZiAodGlkX2FnZ19yeC0+dGltZW91dCkKKwkJCW1vZF90aW1lcigmdGlkX2FnZ19yeC0+c2Vzc2lvbl90aW1lciwKKwkJCQkgIFRVX1RPX0VYUF9USU1FKHRpZF9hZ2dfcngtPnRpbWVvdXQpKTsKIAogCQkvKiBtYW5hZ2UgcmVvcmRlcmluZyBidWZmZXIgYWNjb3JkaW5nIHRvIHJlcXVlc3RlZCAqLwogCQkvKiBzZXF1ZW5jZSBudW1iZXIgKi8KQEAgLTE1NDcsMTIgKzE2ODksNjQgQEAKIAlyZXR1cm4gUlhfQ09OVElOVUU7CiB9CiAKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9wcm9jZXNzX3NhX3F1ZXJ5X3JlcShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCQkJICAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LAorCQkJCQkgICBzaXplX3QgbGVuKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IGllZWU4MDIxMV9tZ210ICpyZXNwOworCisJaWYgKGNvbXBhcmVfZXRoZXJfYWRkcihtZ210LT5kYSwgc2RhdGEtPmRldi0+ZGV2X2FkZHIpICE9IDApIHsKKwkJLyogTm90IHRvIG93biB1bmljYXN0IGFkZHJlc3MgKi8KKwkJcmV0dXJuOworCX0KKworCWlmIChjb21wYXJlX2V0aGVyX2FkZHIobWdtdC0+c2EsIHNkYXRhLT51Lm1nZC5ic3NpZCkgIT0gMCB8fAorCSAgICBjb21wYXJlX2V0aGVyX2FkZHIobWdtdC0+YnNzaWQsIHNkYXRhLT51Lm1nZC5ic3NpZCkgIT0gMCkgeworCQkvKiBOb3QgZnJvbSB0aGUgY3VycmVudCBBUC4gKi8KKwkJcmV0dXJuOworCX0KKworCWlmIChzZGF0YS0+dS5tZ2Quc3RhdGUgPT0gSUVFRTgwMjExX1NUQV9NTE1FX0FTU09DSUFURSkgeworCQkvKiBBc3NvY2lhdGlvbiBpbiBwcm9ncmVzczsgaWdub3JlIFNBIFF1ZXJ5ICovCisJCXJldHVybjsKKwl9CisKKwlpZiAobGVuIDwgMjQgKyAxICsgc2l6ZW9mKHJlc3AtPnUuYWN0aW9uLnUuc2FfcXVlcnkpKSB7CisJCS8qIFRvbyBzaG9ydCBTQSBRdWVyeSByZXF1ZXN0IGZyYW1lICovCisJCXJldHVybjsKKwl9CisKKwlza2IgPSBkZXZfYWxsb2Nfc2tiKHNpemVvZigqcmVzcCkgKyBsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20pOworCWlmIChza2IgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJc2tiX3Jlc2VydmUoc2tiLCBsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20pOworCXJlc3AgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopIHNrYl9wdXQoc2tiLCAyNCk7CisJbWVtc2V0KHJlc3AsIDAsIDI0KTsKKwltZW1jcHkocmVzcC0+ZGEsIG1nbXQtPnNhLCBFVEhfQUxFTik7CisJbWVtY3B5KHJlc3AtPnNhLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCW1lbWNweShyZXNwLT5ic3NpZCwgc2RhdGEtPnUubWdkLmJzc2lkLCBFVEhfQUxFTik7CisJcmVzcC0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9NR01UIHwKKwkJCQkJICBJRUVFODAyMTFfU1RZUEVfQUNUSU9OKTsKKwlza2JfcHV0KHNrYiwgMSArIHNpemVvZihyZXNwLT51LmFjdGlvbi51LnNhX3F1ZXJ5KSk7CisJcmVzcC0+dS5hY3Rpb24uY2F0ZWdvcnkgPSBXTEFOX0NBVEVHT1JZX1NBX1FVRVJZOworCXJlc3AtPnUuYWN0aW9uLnUuc2FfcXVlcnkuYWN0aW9uID0gV0xBTl9BQ1RJT05fU0FfUVVFUllfUkVTUE9OU0U7CisJbWVtY3B5KHJlc3AtPnUuYWN0aW9uLnUuc2FfcXVlcnkudHJhbnNfaWQsCisJICAgICAgIG1nbXQtPnUuYWN0aW9uLnUuc2FfcXVlcnkudHJhbnNfaWQsCisJICAgICAgIFdMQU5fU0FfUVVFUllfVFJfSURfTEVOKTsKKworCWllZWU4MDIxMV90eF9za2Ioc2RhdGEsIHNrYiwgMSk7Cit9CisKIHN0YXRpYyBpZWVlODAyMTFfcnhfcmVzdWx0IGRlYnVnX25vaW5saW5lCiBpZWVlODAyMTFfcnhfaF9hY3Rpb24oc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHJ4LT5sb2NhbDsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKHJ4LT5kZXYpOwogCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgcngtPnNrYi0+ZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzOwogCWludCBsZW4gPSByeC0+c2tiLT5sZW47CiAKIAlpZiAoIWllZWU4MDIxMV9pc19hY3Rpb24obWdtdC0+ZnJhbWVfY29udHJvbCkpCkBAIC0xNTY0LDEyICsxNzU4LDI2IEBACiAJaWYgKCEocngtPmZsYWdzICYgSUVFRTgwMjExX1JYX1JBX01BVENIKSkKIAkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKIAorCWlmIChpZWVlODAyMTFfZHJvcF91bmVuY3J5cHRlZChyeCwgbWdtdC0+ZnJhbWVfY29udHJvbCkpCisJCXJldHVybiBSWF9EUk9QX01PTklUT1I7CisKIAkvKiBhbGwgY2F0ZWdvcmllcyB3ZSBjdXJyZW50bHkgaGFuZGxlIGhhdmUgYWN0aW9uX2NvZGUgKi8KIAlpZiAobGVuIDwgSUVFRTgwMjExX01JTl9BQ1RJT05fU0laRSArIDEpCiAJCXJldHVybiBSWF9EUk9QX01PTklUT1I7CiAKIAlzd2l0Y2ggKG1nbXQtPnUuYWN0aW9uLmNhdGVnb3J5KSB7CiAJY2FzZSBXTEFOX0NBVEVHT1JZX0JBQ0s6CisJCS8qCisJCSAqIFRoZSBhZ2dyZWdhdGlvbiBjb2RlIGlzIG5vdCBwcmVwYXJlZCB0byBoYW5kbGUKKwkJICogYW55dGhpbmcgYnV0IFNUQS9BUCBkdWUgdG8gdGhlIEJTU0lEIGhhbmRsaW5nOworCQkgKiBJQlNTIGNvdWxkIHdvcmsgaW4gdGhlIGNvZGUgYnV0IGlzbid0IHN1cHBvcnRlZAorCQkgKiBieSBkcml2ZXJzIG9yIHRoZSBzdGFuZGFyZC4KKwkJICovCisJCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiAmJgorCQkgICAgc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4gJiYKKwkJICAgIHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUCkKKwkJCXJldHVybiBSWF9EUk9QX01PTklUT1I7CisKIAkJc3dpdGNoIChtZ210LT51LmFjdGlvbi51LmFkZGJhX3JlcS5hY3Rpb25fY29kZSkgewogCQljYXNlIFdMQU5fQUNUSU9OX0FEREJBX1JFUToKIAkJCWlmIChsZW4gPCAoSUVFRTgwMjExX01JTl9BQ1RJT05fU0laRSArCkBAIC0xNTk0LDYgKzE4MDIsMTAgQEAKIAljYXNlIFdMQU5fQ0FURUdPUllfU1BFQ1RSVU1fTUdNVDoKIAkJaWYgKGxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmJhbmQgIT0gSUVFRTgwMjExX0JBTkRfNUdIWikKIAkJCXJldHVybiBSWF9EUk9QX01PTklUT1I7CisKKwkJaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQorCQkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKKwogCQlzd2l0Y2ggKG1nbXQtPnUuYWN0aW9uLnUubWVhc3VyZW1lbnQuYWN0aW9uX2NvZGUpIHsKIAkJY2FzZSBXTEFOX0FDVElPTl9TUENUX01TUl9SRVE6CiAJCQlpZiAobGVuIDwgKElFRUU4MDIxMV9NSU5fQUNUSU9OX1NJWkUgKwpAQCAtMTYwMSw2ICsxODEzLDQzIEBACiAJCQkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKIAkJCWllZWU4MDIxMV9wcm9jZXNzX21lYXN1cmVtZW50X3JlcShzZGF0YSwgbWdtdCwgbGVuKTsKIAkJCWJyZWFrOworCQljYXNlIFdMQU5fQUNUSU9OX1NQQ1RfQ0hMX1NXSVRDSDoKKwkJCWlmIChsZW4gPCAoSUVFRTgwMjExX01JTl9BQ1RJT05fU0laRSArCisJCQkJICAgc2l6ZW9mKG1nbXQtPnUuYWN0aW9uLnUuY2hhbl9zd2l0Y2gpKSkKKwkJCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOworCisJCQlpZiAobWVtY21wKG1nbXQtPmJzc2lkLCBzZGF0YS0+dS5tZ2QuYnNzaWQsIEVUSF9BTEVOKSkKKwkJCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOworCisJCQlic3MgPSBpZWVlODAyMTFfcnhfYnNzX2dldChsb2NhbCwgc2RhdGEtPnUubWdkLmJzc2lkLAorCQkJCQkgICBsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5jZW50ZXJfZnJlcSwKKwkJCQkJICAgc2RhdGEtPnUubWdkLnNzaWQsCisJCQkJCSAgIHNkYXRhLT51Lm1nZC5zc2lkX2xlbik7CisJCQlpZiAoIWJzcykKKwkJCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOworCisJCQlpZWVlODAyMTFfcHJvY2Vzc19jaGFuc3dpdGNoKHNkYXRhLAorCQkJCSAgICAgJm1nbXQtPnUuYWN0aW9uLnUuY2hhbl9zd2l0Y2guc3dfZWxlbSwgYnNzKTsKKwkJCWllZWU4MDIxMV9yeF9ic3NfcHV0KGxvY2FsLCBic3MpOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBXTEFOX0NBVEVHT1JZX1NBX1FVRVJZOgorCQlpZiAobGVuIDwgKElFRUU4MDIxMV9NSU5fQUNUSU9OX1NJWkUgKworCQkJICAgc2l6ZW9mKG1nbXQtPnUuYWN0aW9uLnUuc2FfcXVlcnkpKSkKKwkJCXJldHVybiBSWF9EUk9QX01PTklUT1I7CisJCXN3aXRjaCAobWdtdC0+dS5hY3Rpb24udS5zYV9xdWVyeS5hY3Rpb24pIHsKKwkJY2FzZSBXTEFOX0FDVElPTl9TQV9RVUVSWV9SRVFVRVNUOgorCQkJaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQorCQkJCXJldHVybiBSWF9EUk9QX01PTklUT1I7CisJCQlpZWVlODAyMTFfcHJvY2Vzc19zYV9xdWVyeV9yZXEoc2RhdGEsIG1nbXQsIGxlbik7CisJCQlicmVhazsKKwkJY2FzZSBXTEFOX0FDVElPTl9TQV9RVUVSWV9SRVNQT05TRToKKwkJCS8qCisJCQkgKiBTQSBRdWVyeSByZXNwb25zZSBpcyBjdXJyZW50bHkgb25seSB1c2VkIGluIEFQIG1vZGUKKwkJCSAqIGFuZCBpdCBpcyBwcm9jZXNzZWQgaW4gdXNlciBzcGFjZS4KKwkJCSAqLworCQkJcmV0dXJuIFJYX0NPTlRJTlVFOwogCQl9CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC0xNjE2LDEwICsxODY1LDE0IEBACiBpZWVlODAyMTFfcnhfaF9tZ210KHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihyeC0+ZGV2KTsKKwlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopIHJ4LT5za2ItPmRhdGE7CiAKIAlpZiAoIShyeC0+ZmxhZ3MgJiBJRUVFODAyMTFfUlhfUkFfTUFUQ0gpKQogCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOwogCisJaWYgKGllZWU4MDIxMV9kcm9wX3VuZW5jcnlwdGVkKHJ4LCBtZ210LT5mcmFtZV9jb250cm9sKSkKKwkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKKwogCWlmIChpZWVlODAyMTFfdmlmX2lzX21lc2goJnNkYXRhLT52aWYpKQogCQlyZXR1cm4gaWVlZTgwMjExX21lc2hfcnhfbWdtdChzZGF0YSwgcngtPnNrYiwgcngtPnN0YXR1cyk7CiAKQEAgLTE2MjcsMTEgKzE4ODAsMTQgQEAKIAkgICAgc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FESE9DKQogCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOwogCi0JaWYgKHNkYXRhLT5mbGFncyAmIElFRUU4MDIxMV9TREFUQV9VU0VSU1BBQ0VfTUxNRSkKLQkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKIAotCWllZWU4MDIxMV9zdGFfcnhfbWdtdChzZGF0YSwgcngtPnNrYiwgcngtPnN0YXR1cyk7Ci0JcmV0dXJuIFJYX1FVRVVFRDsKKwlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHsKKwkJaWYgKHNkYXRhLT5mbGFncyAmIElFRUU4MDIxMV9TREFUQV9VU0VSU1BBQ0VfTUxNRSkKKwkJCXJldHVybiBSWF9EUk9QX01PTklUT1I7CisJCXJldHVybiBpZWVlODAyMTFfc3RhX3J4X21nbXQoc2RhdGEsIHJ4LT5za2IsIHJ4LT5zdGF0dXMpOworCX0KKworCXJldHVybiBpZWVlODAyMTFfaWJzc19yeF9tZ210KHNkYXRhLCByeC0+c2tiLCByeC0+c3RhdHVzKTsKIH0KIAogc3RhdGljIHZvaWQgaWVlZTgwMjExX3J4X21pY2hhZWxfbWljX3JlcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LApAQCAtMTc4MCw2ICsyMDM2LDcgQEAKIAlDQUxMX1JYSChpZWVlODAyMTFfcnhfaF9wYXNzaXZlX3NjYW4pCiAJQ0FMTF9SWEgoaWVlZTgwMjExX3J4X2hfY2hlY2spCiAJQ0FMTF9SWEgoaWVlZTgwMjExX3J4X2hfZGVjcnlwdCkKKwlDQUxMX1JYSChpZWVlODAyMTFfcnhfaF9jaGVja19tb3JlX2RhdGEpCiAJQ0FMTF9SWEgoaWVlZTgwMjExX3J4X2hfc3RhX3Byb2Nlc3MpCiAJQ0FMTF9SWEgoaWVlZTgwMjExX3J4X2hfZGVmcmFnbWVudCkKIAlDQUxMX1JYSChpZWVlODAyMTFfcnhfaF9wc19wb2xsKQpAQCAtMTgyMywxNiArMjA4MCwxNyBAQAogLyogbWFpbiByZWNlaXZlIHBhdGggKi8KIAogc3RhdGljIGludCBwcmVwYXJlX2Zvcl9oYW5kbGVycyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQl1OCAqYnNzaWQsIHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngsCisJCQkJc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCwKIAkJCQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyKQogeworCXU4ICpic3NpZCA9IGllZWU4MDIxMV9nZXRfYnNzaWQoaGRyLCByeC0+c2tiLT5sZW4sIHNkYXRhLT52aWYudHlwZSk7CiAJaW50IG11bHRpY2FzdCA9IGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpOwogCiAJc3dpdGNoIChzZGF0YS0+dmlmLnR5cGUpIHsKIAljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CiAJCWlmICghYnNzaWQpCiAJCQlyZXR1cm4gMDsKLQkJaWYgKCFpZWVlODAyMTFfYnNzaWRfbWF0Y2goYnNzaWQsIHNkYXRhLT51LnN0YS5ic3NpZCkpIHsKKwkJaWYgKCFpZWVlODAyMTFfYnNzaWRfbWF0Y2goYnNzaWQsIHNkYXRhLT51Lm1nZC5ic3NpZCkpIHsKIAkJCWlmICghKHJ4LT5mbGFncyAmIElFRUU4MDIxMV9SWF9JTl9TQ0FOKSkKIAkJCQlyZXR1cm4gMDsKIAkJCXJ4LT5mbGFncyAmPSB+SUVFRTgwMjExX1JYX1JBX01BVENIOwpAQCAtMTg1MCw3ICsyMTA4LDcgQEAKIAkJaWYgKGllZWU4MDIxMV9pc19iZWFjb24oaGRyLT5mcmFtZV9jb250cm9sKSkgewogCQkJcmV0dXJuIDE7CiAJCX0KLQkJZWxzZSBpZiAoIWllZWU4MDIxMV9ic3NpZF9tYXRjaChic3NpZCwgc2RhdGEtPnUuc3RhLmJzc2lkKSkgeworCQllbHNlIGlmICghaWVlZTgwMjExX2Jzc2lkX21hdGNoKGJzc2lkLCBzZGF0YS0+dS5pYnNzLmJzc2lkKSkgewogCQkJaWYgKCEocngtPmZsYWdzICYgSUVFRTgwMjExX1JYX0lOX1NDQU4pKQogCQkJCXJldHVybiAwOwogCQkJcngtPmZsYWdzICY9IH5JRUVFODAyMTFfUlhfUkFfTUFUQ0g7CkBAIC0xOTI4LDcgKzIxODYsNiBAQAogCWludCBwcmVwYXJlczsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpwcmV2ID0gTlVMTDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiX25ldzsKLQl1OCAqYnNzaWQ7CiAKIAloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7CiAJbWVtc2V0KCZyeCwgMCwgc2l6ZW9mKHJ4KSk7CkBAIC0xOTU2LDcgKzIyMTMsNyBAQAogCQlyeC5mbGFncyB8PSBJRUVFODAyMTFfUlhfSU5fU0NBTjsKIAogCWllZWU4MDIxMV9wYXJzZV9xb3MoJnJ4KTsKLQlpZWVlODAyMTFfdmVyaWZ5X2lwX2FsaWdubWVudCgmcngpOworCWllZWU4MDIxMV92ZXJpZnlfYWxpZ25tZW50KCZyeCk7CiAKIAlza2IgPSByeC5za2I7CiAKQEAgLTE5NjcsOSArMjIyNCw4IEBACiAJCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUikKIAkJCWNvbnRpbnVlOwogCi0JCWJzc2lkID0gaWVlZTgwMjExX2dldF9ic3NpZChoZHIsIHNrYi0+bGVuLCBzZGF0YS0+dmlmLnR5cGUpOwogCQlyeC5mbGFncyB8PSBJRUVFODAyMTFfUlhfUkFfTUFUQ0g7Ci0JCXByZXBhcmVzID0gcHJlcGFyZV9mb3JfaGFuZGxlcnMoc2RhdGEsIGJzc2lkLCAmcngsIGhkcik7CisJCXByZXBhcmVzID0gcHJlcGFyZV9mb3JfaGFuZGxlcnMoc2RhdGEsICZyeCwgaGRyKTsKIAogCQlpZiAoIXByZXBhcmVzKQogCQkJY29udGludWU7CkBAIC0yMTc0LDExICsyNDMwLDkgQEAKIAkvKiBuZXcgdW4tb3JkZXJlZCBhbXBkdSBmcmFtZSAtIHByb2Nlc3MgaXQgKi8KIAogCS8qIHJlc2V0IHNlc3Npb24gdGltZXIgKi8KLQlpZiAodGlkX2FnZ19yeC0+dGltZW91dCkgewotCQl1bnNpZ25lZCBsb25nIGV4cGlyZXMgPQotCQkJamlmZmllcyArICh0aWRfYWdnX3J4LT50aW1lb3V0IC8gMTAwMCkgKiBIWjsKLQkJbW9kX3RpbWVyKCZ0aWRfYWdnX3J4LT5zZXNzaW9uX3RpbWVyLCBleHBpcmVzKTsKLQl9CisJaWYgKHRpZF9hZ2dfcngtPnRpbWVvdXQpCisJCW1vZF90aW1lcigmdGlkX2FnZ19yeC0+c2Vzc2lvbl90aW1lciwKKwkJCSAgVFVfVE9fRVhQX1RJTUUodGlkX2FnZ19yeC0+dGltZW91dCkpOwogCiAJLyogaWYgdGhpcyBtcGR1IGlzIGZyYWdtZW50ZWQgLSB0ZXJtaW5hdGUgcnggYWdncmVnYXRpb24gc2Vzc2lvbiAqLwogCXNjID0gbGUxNl90b19jcHUoaGRyLT5zZXFfY3RybCk7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvc2Nhbi5jIGIvbmV0L21hYzgwMjExL3NjYW4uYwppbmRleCBmNWM3YzMzLi41MDMwYTNjIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvc2Nhbi5jCisrKyBiL25ldC9tYWM4MDIxMS9zY2FuLmMKQEAgLTEyLDE0ICsxMiwxMSBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAotLyogVE9ETzoKLSAqIG9yZGVyIEJTUyBsaXN0IGJ5IFJTU0koPykgKCJxdWFsaXR5IG9mIEFQIikKLSAqIHNjYW4gcmVzdWx0IHRhYmxlIGZpbHRlcmluZyAoYnkgY2FwYWJpbGl0eSAocHJpdmFjeSwgSUJTUy9CU1MsIFdQQS9SU04gSUUsCi0gKiAgICBTU0lEKQotICovCisvKiBUT0RPOiBmaWd1cmUgb3V0IGhvdyB0byBhdm9pZCB0aGF0IHRoZSAiY3VycmVudCBCU1MiIGV4cGlyZXMgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CisjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+CiAjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CiAjaW5jbHVkZSA8bmV0L2l3X2hhbmRsZXIuaD4KIApAQCAtMzAsMTkyICsyNywyOSBAQAogI2RlZmluZSBJRUVFODAyMTFfQ0hBTk5FTF9USU1FIChIWiAvIDMzKQogI2RlZmluZSBJRUVFODAyMTFfUEFTU0lWRV9DSEFOTkVMX1RJTUUgKEhaIC8gNSkKIAotdm9pZCBpZWVlODAyMTFfcnhfYnNzX2xpc3RfaW5pdChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCkKLXsKLQlzcGluX2xvY2tfaW5pdCgmbG9jYWwtPmJzc19sb2NrKTsKLQlJTklUX0xJU1RfSEVBRCgmbG9jYWwtPmJzc19saXN0KTsKLX0KLQotdm9pZCBpZWVlODAyMTFfcnhfYnNzX2xpc3RfZGVpbml0KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKQotewotCXN0cnVjdCBpZWVlODAyMTFfYnNzICpic3MsICp0bXA7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoYnNzLCB0bXAsICZsb2NhbC0+YnNzX2xpc3QsIGxpc3QpCi0JCWllZWU4MDIxMV9yeF9ic3NfcHV0KGxvY2FsLCBic3MpOwotfQotCiBzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqCiBpZWVlODAyMTFfcnhfYnNzX2dldChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgdTggKmJzc2lkLCBpbnQgZnJlcSwKIAkJICAgICB1OCAqc3NpZCwgdTggc3NpZF9sZW4pCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzczsKLQotCXNwaW5fbG9ja19iaCgmbG9jYWwtPmJzc19sb2NrKTsKLQlic3MgPSBsb2NhbC0+YnNzX2hhc2hbU1RBX0hBU0goYnNzaWQpXTsKLQl3aGlsZSAoYnNzKSB7Ci0JCWlmICghYnNzX21lc2hfY2ZnKGJzcykgJiYKLQkJICAgICFtZW1jbXAoYnNzLT5ic3NpZCwgYnNzaWQsIEVUSF9BTEVOKSAmJgotCQkgICAgYnNzLT5mcmVxID09IGZyZXEgJiYKLQkJICAgIGJzcy0+c3NpZF9sZW4gPT0gc3NpZF9sZW4gJiYKLQkJICAgIChzc2lkX2xlbiA9PSAwIHx8ICFtZW1jbXAoYnNzLT5zc2lkLCBzc2lkLCBzc2lkX2xlbikpKSB7Ci0JCQlhdG9taWNfaW5jKCZic3MtPnVzZXJzKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWJzcyA9IGJzcy0+aG5leHQ7Ci0JfQotCXNwaW5fdW5sb2NrX2JoKCZsb2NhbC0+YnNzX2xvY2spOwotCXJldHVybiBic3M7CisJcmV0dXJuICh2b2lkICopY2ZnODAyMTFfZ2V0X2Jzcyhsb2NhbC0+aHcud2lwaHksCisJCQkJCWllZWU4MDIxMV9nZXRfY2hhbm5lbChsb2NhbC0+aHcud2lwaHksCisJCQkJCQkJICAgICAgZnJlcSksCisJCQkJCWJzc2lkLCBzc2lkLCBzc2lkX2xlbiwKKwkJCQkJMCwgMCk7CiB9CiAKLS8qIENhbGxlciBtdXN0IGhvbGQgbG9jYWwtPmJzc19sb2NrICovCi1zdGF0aWMgdm9pZCBfX2llZWU4MDIxMV9yeF9ic3NfaGFzaF9hZGQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCi0JCQkJCXN0cnVjdCBpZWVlODAyMTFfYnNzICpic3MpCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfYnNzX2ZyZWUoc3RydWN0IGNmZzgwMjExX2JzcyAqY2JzcykKIHsKLQl1OCBoYXNoX2lkeDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzID0gKHZvaWQgKiljYnNzOwogCi0JaWYgKGJzc19tZXNoX2NmZyhic3MpKQotCQloYXNoX2lkeCA9IG1lc2hfaWRfaGFzaChic3NfbWVzaF9pZChic3MpLAotCQkJCQlic3NfbWVzaF9pZF9sZW4oYnNzKSk7Ci0JZWxzZQotCQloYXNoX2lkeCA9IFNUQV9IQVNIKGJzcy0+YnNzaWQpOwotCi0JYnNzLT5obmV4dCA9IGxvY2FsLT5ic3NfaGFzaFtoYXNoX2lkeF07Ci0JbG9jYWwtPmJzc19oYXNoW2hhc2hfaWR4XSA9IGJzczsKLX0KLQotLyogQ2FsbGVyIG11c3QgaG9sZCBsb2NhbC0+YnNzX2xvY2sgKi8KLXN0YXRpYyB2b2lkIF9faWVlZTgwMjExX3J4X2Jzc19oYXNoX2RlbChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKLQkJCQkJc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzcykKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYiwgKnByZXYgPSBOVUxMOwotCWIgPSBsb2NhbC0+YnNzX2hhc2hbU1RBX0hBU0goYnNzLT5ic3NpZCldOwotCXdoaWxlIChiKSB7Ci0JCWlmIChiID09IGJzcykgewotCQkJaWYgKCFwcmV2KQotCQkJCWxvY2FsLT5ic3NfaGFzaFtTVEFfSEFTSChic3MtPmJzc2lkKV0gPQotCQkJCQlic3MtPmhuZXh0OwotCQkJZWxzZQotCQkJCXByZXYtPmhuZXh0ID0gYnNzLT5obmV4dDsKLQkJCWJyZWFrOwotCQl9Ci0JCXByZXYgPSBiOwotCQliID0gYi0+aG5leHQ7Ci0JfQotfQotCi1zdHJ1Y3QgaWVlZTgwMjExX2JzcyAqCi1pZWVlODAyMTFfcnhfYnNzX2FkZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgdTggKmJzc2lkLCBpbnQgZnJlcSwKLQkJICAgICB1OCAqc3NpZCwgdTggc3NpZF9sZW4pCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzczsKLQotCWJzcyA9IGt6YWxsb2Moc2l6ZW9mKCpic3MpLCBHRlBfQVRPTUlDKTsKLQlpZiAoIWJzcykKLQkJcmV0dXJuIE5VTEw7Ci0JYXRvbWljX3NldCgmYnNzLT51c2VycywgMik7Ci0JbWVtY3B5KGJzcy0+YnNzaWQsIGJzc2lkLCBFVEhfQUxFTik7Ci0JYnNzLT5mcmVxID0gZnJlcTsKLQlpZiAoc3NpZCAmJiBzc2lkX2xlbiA8PSBJRUVFODAyMTFfTUFYX1NTSURfTEVOKSB7Ci0JCW1lbWNweShic3MtPnNzaWQsIHNzaWQsIHNzaWRfbGVuKTsKLQkJYnNzLT5zc2lkX2xlbiA9IHNzaWRfbGVuOwotCX0KLQotCXNwaW5fbG9ja19iaCgmbG9jYWwtPmJzc19sb2NrKTsKLQkvKiBUT0RPOiBvcmRlciBieSBSU1NJPyAqLwotCWxpc3RfYWRkX3RhaWwoJmJzcy0+bGlzdCwgJmxvY2FsLT5ic3NfbGlzdCk7Ci0JX19pZWVlODAyMTFfcnhfYnNzX2hhc2hfYWRkKGxvY2FsLCBic3MpOwotCXNwaW5fdW5sb2NrX2JoKCZsb2NhbC0+YnNzX2xvY2spOwotCXJldHVybiBic3M7Ci19Ci0KLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSAotc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfYnNzICoKLWllZWU4MDIxMV9yeF9tZXNoX2Jzc19nZXQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIHU4ICptZXNoX2lkLCBpbnQgbWVzaF9pZF9sZW4sCi0JCQkgIHU4ICptZXNoX2NmZywgaW50IGZyZXEpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzczsKLQotCXNwaW5fbG9ja19iaCgmbG9jYWwtPmJzc19sb2NrKTsKLQlic3MgPSBsb2NhbC0+YnNzX2hhc2hbbWVzaF9pZF9oYXNoKG1lc2hfaWQsIG1lc2hfaWRfbGVuKV07Ci0Jd2hpbGUgKGJzcykgewotCQlpZiAoYnNzX21lc2hfY2ZnKGJzcykgJiYKLQkJICAgICFtZW1jbXAoYnNzX21lc2hfY2ZnKGJzcyksIG1lc2hfY2ZnLCBNRVNIX0NGR19DTVBfTEVOKSAmJgotCQkgICAgYnNzLT5mcmVxID09IGZyZXEgJiYKLQkJICAgIG1lc2hfaWRfbGVuID09IGJzcy0+bWVzaF9pZF9sZW4gJiYKLQkJICAgIChtZXNoX2lkX2xlbiA9PSAwIHx8ICFtZW1jbXAoYnNzLT5tZXNoX2lkLCBtZXNoX2lkLAotCQkJCQkJIG1lc2hfaWRfbGVuKSkpIHsKLQkJCWF0b21pY19pbmMoJmJzcy0+dXNlcnMpOwotCQkJYnJlYWs7Ci0JCX0KLQkJYnNzID0gYnNzLT5obmV4dDsKLQl9Ci0Jc3Bpbl91bmxvY2tfYmgoJmxvY2FsLT5ic3NfbG9jayk7Ci0JcmV0dXJuIGJzczsKLX0KLQotc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfYnNzICoKLWllZWU4MDIxMV9yeF9tZXNoX2Jzc19hZGQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIHU4ICptZXNoX2lkLCBpbnQgbWVzaF9pZF9sZW4sCi0JCQkgIHU4ICptZXNoX2NmZywgaW50IG1lc2hfY29uZmlnX2xlbiwgaW50IGZyZXEpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzczsKLQotCWlmIChtZXNoX2NvbmZpZ19sZW4gIT0gSUVFRTgwMjExX01FU0hfQ09ORklHX0xFTikKLQkJcmV0dXJuIE5VTEw7Ci0KLQlic3MgPSBremFsbG9jKHNpemVvZigqYnNzKSwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFic3MpCi0JCXJldHVybiBOVUxMOwotCi0JYnNzLT5tZXNoX2NmZyA9IGttYWxsb2MoTUVTSF9DRkdfQ01QX0xFTiwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFic3MtPm1lc2hfY2ZnKSB7Ci0JCWtmcmVlKGJzcyk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCWlmIChtZXNoX2lkX2xlbiAmJiBtZXNoX2lkX2xlbiA8PSBJRUVFODAyMTFfTUFYX01FU0hfSURfTEVOKSB7Ci0JCWJzcy0+bWVzaF9pZCA9IGttYWxsb2MobWVzaF9pZF9sZW4sIEdGUF9BVE9NSUMpOwotCQlpZiAoIWJzcy0+bWVzaF9pZCkgewotCQkJa2ZyZWUoYnNzLT5tZXNoX2NmZyk7Ci0JCQlrZnJlZShic3MpOwotCQkJcmV0dXJuIE5VTEw7Ci0JCX0KLQkJbWVtY3B5KGJzcy0+bWVzaF9pZCwgbWVzaF9pZCwgbWVzaF9pZF9sZW4pOwotCX0KLQotCWF0b21pY19zZXQoJmJzcy0+dXNlcnMsIDIpOwotCW1lbWNweShic3MtPm1lc2hfY2ZnLCBtZXNoX2NmZywgTUVTSF9DRkdfQ01QX0xFTik7Ci0JYnNzLT5tZXNoX2lkX2xlbiA9IG1lc2hfaWRfbGVuOwotCWJzcy0+ZnJlcSA9IGZyZXE7Ci0Jc3Bpbl9sb2NrX2JoKCZsb2NhbC0+YnNzX2xvY2spOwotCS8qIFRPRE86IG9yZGVyIGJ5IFJTU0k/ICovCi0JbGlzdF9hZGRfdGFpbCgmYnNzLT5saXN0LCAmbG9jYWwtPmJzc19saXN0KTsKLQlfX2llZWU4MDIxMV9yeF9ic3NfaGFzaF9hZGQobG9jYWwsIGJzcyk7Ci0Jc3Bpbl91bmxvY2tfYmgoJmxvY2FsLT5ic3NfbG9jayk7Ci0JcmV0dXJuIGJzczsKLX0KLSNlbmRpZgotCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfYnNzX2ZyZWUoc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzcykKLXsKLQlrZnJlZShic3MtPmllcyk7CiAJa2ZyZWUoYnNzX21lc2hfaWQoYnNzKSk7CiAJa2ZyZWUoYnNzX21lc2hfY2ZnKGJzcykpOwotCWtmcmVlKGJzcyk7CiB9CiAKIHZvaWQgaWVlZTgwMjExX3J4X2Jzc19wdXQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCiAJCQkgIHN0cnVjdCBpZWVlODAyMTFfYnNzICpic3MpCiB7Ci0JbG9jYWxfYmhfZGlzYWJsZSgpOwotCWlmICghYXRvbWljX2RlY19hbmRfbG9jaygmYnNzLT51c2VycywgJmxvY2FsLT5ic3NfbG9jaykpIHsKLQkJbG9jYWxfYmhfZW5hYmxlKCk7Ci0JCXJldHVybjsKLQl9Ci0KLQlfX2llZWU4MDIxMV9yeF9ic3NfaGFzaF9kZWwobG9jYWwsIGJzcyk7Ci0JbGlzdF9kZWwoJmJzcy0+bGlzdCk7Ci0Jc3Bpbl91bmxvY2tfYmgoJmxvY2FsLT5ic3NfbG9jayk7Ci0JaWVlZTgwMjExX3J4X2Jzc19mcmVlKGJzcyk7CisJY2ZnODAyMTFfcHV0X2Jzcygoc3RydWN0IGNmZzgwMjExX2JzcyAqKWJzcyk7CiB9CiAKIHN0cnVjdCBpZWVlODAyMTFfYnNzICoKQEAgLTIyNCwzOSArNTgsMjUgQEAKIAkJCSAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LAogCQkJICBzaXplX3QgbGVuLAogCQkJICBzdHJ1Y3QgaWVlZTgwMl8xMV9lbGVtcyAqZWxlbXMsCi0JCQkgIGludCBmcmVxLCBib29sIGJlYWNvbikKKwkJCSAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsLAorCQkJICBib29sIGJlYWNvbikKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzOwogCWludCBjbGVuOworCXMzMiBzaWduYWwgPSAwOwogCi0jaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0gKLQlpZiAoZWxlbXMtPm1lc2hfY29uZmlnKQotCQlic3MgPSBpZWVlODAyMTFfcnhfbWVzaF9ic3NfZ2V0KGxvY2FsLCBlbGVtcy0+bWVzaF9pZCwKLQkJCQllbGVtcy0+bWVzaF9pZF9sZW4sIGVsZW1zLT5tZXNoX2NvbmZpZywgZnJlcSk7Ci0JZWxzZQotI2VuZGlmCi0JCWJzcyA9IGllZWU4MDIxMV9yeF9ic3NfZ2V0KGxvY2FsLCBtZ210LT5ic3NpZCwgZnJlcSwKLQkJCQkJICAgZWxlbXMtPnNzaWQsIGVsZW1zLT5zc2lkX2xlbik7Ci0JaWYgKCFic3MpIHsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSAotCQlpZiAoZWxlbXMtPm1lc2hfY29uZmlnKQotCQkJYnNzID0gaWVlZTgwMjExX3J4X21lc2hfYnNzX2FkZChsb2NhbCwgZWxlbXMtPm1lc2hfaWQsCi0JCQkJZWxlbXMtPm1lc2hfaWRfbGVuLCBlbGVtcy0+bWVzaF9jb25maWcsCi0JCQkJZWxlbXMtPm1lc2hfY29uZmlnX2xlbiwgZnJlcSk7Ci0JCWVsc2UKLSNlbmRpZgotCQkJYnNzID0gaWVlZTgwMjExX3J4X2Jzc19hZGQobG9jYWwsIG1nbXQtPmJzc2lkLCBmcmVxLAotCQkJCQkJICBlbGVtcy0+c3NpZCwgZWxlbXMtPnNzaWRfbGVuKTsKLQkJaWYgKCFic3MpCi0JCQlyZXR1cm4gTlVMTDsKLQl9IGVsc2UgewotI2lmIDAKLQkJLyogVE9ETzogb3JkZXIgYnkgUlNTST8gKi8KLQkJc3Bpbl9sb2NrX2JoKCZsb2NhbC0+YnNzX2xvY2spOwotCQlsaXN0X21vdmVfdGFpbCgmYnNzLT5saXN0LCAmbG9jYWwtPmJzc19saXN0KTsKLQkJc3Bpbl91bmxvY2tfYmgoJmxvY2FsLT5ic3NfbG9jayk7Ci0jZW5kaWYKLQl9CisJaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TSUdOQUxfREJNKQorCQlzaWduYWwgPSByeF9zdGF0dXMtPnNpZ25hbCAqIDEwMDsKKwllbHNlIGlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfU0lHTkFMX1VOU1BFQykKKwkJc2lnbmFsID0gKHJ4X3N0YXR1cy0+c2lnbmFsICogMTAwKSAvIGxvY2FsLT5ody5tYXhfc2lnbmFsOworCisJYnNzID0gKHZvaWQgKiljZmc4MDIxMV9pbmZvcm1fYnNzX2ZyYW1lKGxvY2FsLT5ody53aXBoeSwgY2hhbm5lbCwKKwkJCQkJCW1nbXQsIGxlbiwgc2lnbmFsLCBHRlBfQVRPTUlDKTsKKworCWlmICghYnNzKQorCQlyZXR1cm4gTlVMTDsKKworCWJzcy0+Y2Jzcy5mcmVlX3ByaXYgPSBpZWVlODAyMTFfcnhfYnNzX2ZyZWU7CiAKIAkvKiBzYXZlIHRoZSBFUlAgdmFsdWUgc28gdGhhdCBpdCBpcyBhdmFpbGFibGUgYXQgYXNzb2NpYXRpb24gdGltZSAqLwogCWlmIChlbGVtcy0+ZXJwX2luZm8gJiYgZWxlbXMtPmVycF9pbmZvX2xlbiA+PSAxKSB7CkBAIC0yNjQsOSArODQsNiBAQAogCQlic3MtPmhhc19lcnBfdmFsdWUgPSAxOwogCX0KIAotCWJzcy0+YmVhY29uX2ludCA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuYmVhY29uLmJlYWNvbl9pbnQpOwotCWJzcy0+Y2FwYWJpbGl0eSA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuYmVhY29uLmNhcGFiX2luZm8pOwotCiAJaWYgKGVsZW1zLT50aW0pIHsKIAkJc3RydWN0IGllZWU4MDIxMV90aW1faWUgKnRpbV9pZSA9CiAJCQkoc3RydWN0IGllZWU4MDIxMV90aW1faWUgKillbGVtcy0+dGltOwpAQCAtMjk1LDM3ICsxMTIsMjcgQEAKIAkJYnNzLT5zdXBwX3JhdGVzX2xlbiArPSBjbGVuOwogCX0KIAotCWJzcy0+YmFuZCA9IHJ4X3N0YXR1cy0+YmFuZDsKLQotCWJzcy0+dGltZXN0YW1wID0gbGU2NF90b19jcHUobWdtdC0+dS5iZWFjb24udGltZXN0YW1wKTsKLQlic3MtPmxhc3RfdXBkYXRlID0gamlmZmllczsKLQlic3MtPnNpZ25hbCA9IHJ4X3N0YXR1cy0+c2lnbmFsOwotCWJzcy0+bm9pc2UgPSByeF9zdGF0dXMtPm5vaXNlOwotCWJzcy0+cXVhbCA9IHJ4X3N0YXR1cy0+cXVhbDsKIAlic3MtPndtbV91c2VkID0gZWxlbXMtPndtbV9wYXJhbSB8fCBlbGVtcy0+d21tX2luZm87CiAKIAlpZiAoIWJlYWNvbikKIAkJYnNzLT5sYXN0X3Byb2JlX3Jlc3AgPSBqaWZmaWVzOwogCi0JLyoKLQkgKiBGb3IgcHJvYmUgcmVzcG9uc2VzLCBvciBpZiB3ZSBkb24ndCBoYXZlIGFueSBpbmZvcm1hdGlvbiB5ZXQsCi0JICogdXNlIHRoZSBJRXMgZnJvbSB0aGUgYmVhY29uLgotCSAqLwotCWlmICghYnNzLT5pZXMgfHwgIWJlYWNvbikgewotCQlpZiAoYnNzLT5pZXMgPT0gTlVMTCB8fCBic3MtPmllc19sZW4gPCBlbGVtcy0+dG90YWxfbGVuKSB7Ci0JCQlrZnJlZShic3MtPmllcyk7Ci0JCQlic3MtPmllcyA9IGttYWxsb2MoZWxlbXMtPnRvdGFsX2xlbiwgR0ZQX0FUT01JQyk7Ci0JCX0KLQkJaWYgKGJzcy0+aWVzKSB7Ci0JCQltZW1jcHkoYnNzLT5pZXMsIGVsZW1zLT5pZV9zdGFydCwgZWxlbXMtPnRvdGFsX2xlbik7Ci0JCQlic3MtPmllc19sZW4gPSBlbGVtcy0+dG90YWxfbGVuOwotCQl9IGVsc2UKLQkJCWJzcy0+aWVzX2xlbiA9IDA7Ci0JfQotCiAJcmV0dXJuIGJzczsKIH0KIAordm9pZCBpZWVlODAyMTFfcnhfYnNzX3JlbW92ZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgdTggKmJzc2lkLAorCQkJICAgICBpbnQgZnJlcSwgdTggKnNzaWQsIHU4IHNzaWRfbGVuKQoreworCXN0cnVjdCBpZWVlODAyMTFfYnNzICpic3M7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisKKwlic3MgPSBpZWVlODAyMTFfcnhfYnNzX2dldChsb2NhbCwgYnNzaWQsIGZyZXEsIHNzaWQsIHNzaWRfbGVuKTsKKwlpZiAoYnNzKSB7CisJCWNmZzgwMjExX3VubGlua19ic3MobG9jYWwtPmh3LndpcGh5LCAodm9pZCAqKWJzcyk7CisJCWllZWU4MDIxMV9yeF9ic3NfcHV0KGxvY2FsLCBic3MpOworCX0KK30KKwogaWVlZTgwMjExX3J4X3Jlc3VsdAogaWVlZTgwMjExX3NjYW5fcngoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHN0cnVjdCBza19idWZmICpza2IsCiAJCSAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cykKQEAgLTM4Nyw3ICsxOTQsNyBAQAogCiAJYnNzID0gaWVlZTgwMjExX2Jzc19pbmZvX3VwZGF0ZShzZGF0YS0+bG9jYWwsIHJ4X3N0YXR1cywKIAkJCQkJbWdtdCwgc2tiLT5sZW4sICZlbGVtcywKLQkJCQkJZnJlcSwgYmVhY29uKTsKKwkJCQkJY2hhbm5lbCwgYmVhY29uKTsKIAlpZiAoYnNzKQogCQlpZWVlODAyMTFfcnhfYnNzX3B1dChzZGF0YS0+bG9jYWwsIGJzcyk7CiAKQEAgLTM5NSw1NiArMjAyLDM0IEBACiAJcmV0dXJuIFJYX1FVRVVFRDsKIH0KIAotc3RhdGljIHZvaWQgaWVlZTgwMjExX3NlbmRfbnVsbGZ1bmMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCi0JCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCSAgICBpbnQgcG93ZXJzYXZlKQordm9pZCBpZWVlODAyMTFfc2Nhbl9mYWlsZWQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpCiB7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqbnVsbGZ1bmM7Ci0JX19sZTE2IGZjOwotCi0Jc2tiID0gZGV2X2FsbG9jX3NrYihsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20gKyAyNCk7Ci0JaWYgKCFza2IpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgYnVmZmVyIGZvciBudWxsZnVuYyAiCi0JCSAgICAgICAiZnJhbWVcbiIsIHNkYXRhLT5kZXYtPm5hbWUpOworCWlmIChXQVJOX09OKCFsb2NhbC0+c2Nhbl9yZXEpKQogCQlyZXR1cm47Ci0JfQotCXNrYl9yZXNlcnZlKHNrYiwgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tKTsKIAotCW51bGxmdW5jID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYl9wdXQoc2tiLCAyNCk7Ci0JbWVtc2V0KG51bGxmdW5jLCAwLCAyNCk7Ci0JZmMgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfREFUQSB8IElFRUU4MDIxMV9TVFlQRV9OVUxMRlVOQyB8Ci0JCQkgSUVFRTgwMjExX0ZDVExfVE9EUyk7Ci0JaWYgKHBvd2Vyc2F2ZSkKLQkJZmMgfD0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfUE0pOwotCW51bGxmdW5jLT5mcmFtZV9jb250cm9sID0gZmM7Ci0JbWVtY3B5KG51bGxmdW5jLT5hZGRyMSwgc2RhdGEtPnUuc3RhLmJzc2lkLCBFVEhfQUxFTik7Ci0JbWVtY3B5KG51bGxmdW5jLT5hZGRyMiwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKLQltZW1jcHkobnVsbGZ1bmMtPmFkZHIzLCBzZGF0YS0+dS5zdGEuYnNzaWQsIEVUSF9BTEVOKTsKKwkvKiBub3RpZnkgY2ZnODAyMTEgYWJvdXQgdGhlIGZhaWxlZCBzY2FuICovCisJaWYgKGxvY2FsLT5zY2FuX3JlcSAhPSAmbG9jYWwtPmludF9zY2FuX3JlcSkKKwkJY2ZnODAyMTFfc2Nhbl9kb25lKGxvY2FsLT5zY2FuX3JlcSwgdHJ1ZSk7CiAKLQlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IsIDApOworCWxvY2FsLT5zY2FuX3JlcSA9IE5VTEw7CiB9CiAKLXZvaWQgaWVlZTgwMjExX3NjYW5fY29tcGxldGVkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQordm9pZCBpZWVlODAyMTFfc2Nhbl9jb21wbGV0ZWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGJvb2wgYWJvcnRlZCkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKLQl1bmlvbiBpd3JlcV9kYXRhIHdycXU7CiAKIAlpZiAoV0FSTl9PTighbG9jYWwtPmh3X3NjYW5uaW5nICYmICFsb2NhbC0+c3dfc2Nhbm5pbmcpKQogCQlyZXR1cm47CiAKLQlsb2NhbC0+bGFzdF9zY2FuX2NvbXBsZXRlZCA9IGppZmZpZXM7Ci0JbWVtc2V0KCZ3cnF1LCAwLCBzaXplb2Yod3JxdSkpOworCWlmIChXQVJOX09OKCFsb2NhbC0+c2Nhbl9yZXEpKQorCQlyZXR1cm47CiAKLQkvKgotCSAqIGxvY2FsLT5zY2FuX3NkYXRhIGNvdWxkIGhhdmUgYmVlbiBOVUxMZWQgYnkgdGhlIGludGVyZmFjZQotCSAqIGRvd24gY29kZSBpbiBjYXNlIHdlIHdlcmUgc2Nhbm5pbmcgb24gYW4gaW50ZXJmYWNlIHRoYXQgaXMKLQkgKiBiZWluZyB0YWtlbiBkb3duLgotCSAqLwotCXNkYXRhID0gbG9jYWwtPnNjYW5fc2RhdGE7Ci0JaWYgKHNkYXRhKQotCQl3aXJlbGVzc19zZW5kX2V2ZW50KHNkYXRhLT5kZXYsIFNJT0NHSVdTQ0FOLCAmd3JxdSwgTlVMTCk7CisJaWYgKGxvY2FsLT5zY2FuX3JlcSAhPSAmbG9jYWwtPmludF9zY2FuX3JlcSkKKwkJY2ZnODAyMTFfc2Nhbl9kb25lKGxvY2FsLT5zY2FuX3JlcSwgYWJvcnRlZCk7CisJbG9jYWwtPnNjYW5fcmVxID0gTlVMTDsKKworCWxvY2FsLT5sYXN0X3NjYW5fY29tcGxldGVkID0gamlmZmllczsKIAogCWlmIChsb2NhbC0+aHdfc2Nhbm5pbmcpIHsKIAkJbG9jYWwtPmh3X3NjYW5uaW5nID0gZmFsc2U7CkBAIC00NzIsMzQgKzI1Nyw0NiBAQAogCW5ldGlmX2FkZHJfdW5sb2NrKGxvY2FsLT5tZGV2KTsKIAluZXRpZl90eF91bmxvY2tfYmgobG9jYWwtPm1kZXYpOwogCi0JcmN1X3JlYWRfbG9jaygpOwotCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHNkYXRhLCAmbG9jYWwtPmludGVyZmFjZXMsIGxpc3QpIHsKKwlpZiAobG9jYWwtPm9wcy0+c3dfc2Nhbl9jb21wbGV0ZSkKKwkJbG9jYWwtPm9wcy0+c3dfc2Nhbl9jb21wbGV0ZShsb2NhbF90b19odyhsb2NhbCkpOworCisJbXV0ZXhfbG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoc2RhdGEsICZsb2NhbC0+aW50ZXJmYWNlcywgbGlzdCkgeworCQlpZiAoIW5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldikpCisJCQljb250aW51ZTsKKwogCQkvKiBUZWxsIEFQIHdlJ3JlIGJhY2sgKi8KIAkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7Ci0JCQlpZiAoc2RhdGEtPnUuc3RhLmZsYWdzICYgSUVFRTgwMjExX1NUQV9BU1NPQ0lBVEVEKSB7CisJCQlpZiAoc2RhdGEtPnUubWdkLmZsYWdzICYgSUVFRTgwMjExX1NUQV9BU1NPQ0lBVEVEKSB7CiAJCQkJaWVlZTgwMjExX3NlbmRfbnVsbGZ1bmMobG9jYWwsIHNkYXRhLCAwKTsKIAkJCQluZXRpZl90eF93YWtlX2FsbF9xdWV1ZXMoc2RhdGEtPmRldik7CiAJCQl9CiAJCX0gZWxzZQogCQkJbmV0aWZfdHhfd2FrZV9hbGxfcXVldWVzKHNkYXRhLT5kZXYpOworCisJCS8qIHJlLWVuYWJsZSBiZWFjb25pbmcgKi8KKwkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCB8fAorCQkgICAgc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DIHx8CisJCSAgICBzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCkKKwkJCWllZWU4MDIxMV9pZl9jb25maWcoc2RhdGEsCisJCQkJCSAgICBJRUVFODAyMTFfSUZDQ19CRUFDT05fRU5BQkxFRCk7CiAJfQotCXJjdV9yZWFkX3VubG9jaygpOworCW11dGV4X3VubG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOwogCiAgZG9uZToKIAlpZWVlODAyMTFfbWxtZV9ub3RpZnlfc2Nhbl9jb21wbGV0ZWQobG9jYWwpOworCWllZWU4MDIxMV9pYnNzX25vdGlmeV9zY2FuX2NvbXBsZXRlZChsb2NhbCk7CiAJaWVlZTgwMjExX21lc2hfbm90aWZ5X3NjYW5fY29tcGxldGVkKGxvY2FsKTsKIH0KIEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3NjYW5fY29tcGxldGVkKTsKIAotCiB2b2lkIGllZWU4MDIxMV9zY2FuX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0KIAkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpZWVlODAyMTFfbG9jYWwsIHNjYW5fd29yay53b3JrKTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IGxvY2FsLT5zY2FuX3NkYXRhOwotCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOwogCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbjsKLQlpbnQgc2tpcDsKKwlpbnQgc2tpcCwgaTsKIAl1bnNpZ25lZCBsb25nIG5leHRfZGVsYXkgPSAwOwogCiAJLyoKQEAgLTUxMCwzMyArMzA3LDEzIEBACiAKIAlzd2l0Y2ggKGxvY2FsLT5zY2FuX3N0YXRlKSB7CiAJY2FzZSBTQ0FOX1NFVF9DSEFOTkVMOgotCQkvKgotCQkgKiBHZXQgY3VycmVudCBzY2FuIGJhbmQuIHNjYW5fYmFuZCBtYXkgYmUgSUVFRTgwMjExX05VTV9CQU5EUwotCQkgKiBhZnRlciB3ZSBzdWNjZXNzZnVsbHkgc2Nhbm5lZCB0aGUgbGFzdCBjaGFubmVsIG9mIHRoZSBsYXN0Ci0JCSAqIGJhbmQgKGFuZCB0aGUgbGFzdCBiYW5kIGlzIHN1cHBvcnRlZCBieSB0aGUgaHcpCi0JCSAqLwotCQlpZiAobG9jYWwtPnNjYW5fYmFuZCA8IElFRUU4MDIxMV9OVU1fQkFORFMpCi0JCQlzYmFuZCA9IGxvY2FsLT5ody53aXBoeS0+YmFuZHNbbG9jYWwtPnNjYW5fYmFuZF07Ci0JCWVsc2UKLQkJCXNiYW5kID0gTlVMTDsKLQotCQkvKgotCQkgKiBJZiB3ZSBhcmUgYXQgYW4gdW5zdXBwb3J0ZWQgYmFuZCBhbmQgaGF2ZSBtb3JlIGJhbmRzCi0JCSAqIGxlZnQgdG8gc2NhbiwgYWR2YW5jZSB0byB0aGUgbmV4dCBzdXBwb3J0ZWQgb25lLgotCQkgKi8KLQkJd2hpbGUgKCFzYmFuZCAmJiBsb2NhbC0+c2Nhbl9iYW5kIDwgSUVFRTgwMjExX05VTV9CQU5EUyAtIDEpIHsKLQkJCWxvY2FsLT5zY2FuX2JhbmQrKzsKLQkJCXNiYW5kID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tsb2NhbC0+c2Nhbl9iYW5kXTsKLQkJCWxvY2FsLT5zY2FuX2NoYW5uZWxfaWR4ID0gMDsKLQkJfQotCiAJCS8qIGlmIG5vIG1vcmUgYmFuZHMvY2hhbm5lbHMgbGVmdCwgY29tcGxldGUgc2NhbiAqLwotCQlpZiAoIXNiYW5kIHx8IGxvY2FsLT5zY2FuX2NoYW5uZWxfaWR4ID49IHNiYW5kLT5uX2NoYW5uZWxzKSB7Ci0JCQlpZWVlODAyMTFfc2Nhbl9jb21wbGV0ZWQobG9jYWxfdG9faHcobG9jYWwpKTsKKwkJaWYgKGxvY2FsLT5zY2FuX2NoYW5uZWxfaWR4ID49IGxvY2FsLT5zY2FuX3JlcS0+bl9jaGFubmVscykgeworCQkJaWVlZTgwMjExX3NjYW5fY29tcGxldGVkKGxvY2FsX3RvX2h3KGxvY2FsKSwgZmFsc2UpOwogCQkJcmV0dXJuOwogCQl9CiAJCXNraXAgPSAwOwotCQljaGFuID0gJnNiYW5kLT5jaGFubmVsc1tsb2NhbC0+c2Nhbl9jaGFubmVsX2lkeF07CisJCWNoYW4gPSBsb2NhbC0+c2Nhbl9yZXEtPmNoYW5uZWxzW2xvY2FsLT5zY2FuX2NoYW5uZWxfaWR4XTsKIAogCQlpZiAoY2hhbi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRCB8fAogCQkgICAgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQyAmJgpAQCAtNTUyLDE1ICszMjksNiBAQAogCiAJCS8qIGFkdmFuY2Ugc3RhdGUgbWFjaGluZSB0byBuZXh0IGNoYW5uZWwvYmFuZCAqLwogCQlsb2NhbC0+c2Nhbl9jaGFubmVsX2lkeCsrOwotCQlpZiAobG9jYWwtPnNjYW5fY2hhbm5lbF9pZHggPj0gc2JhbmQtPm5fY2hhbm5lbHMpIHsKLQkJCS8qCi0JCQkgKiBzY2FuX2JhbmQgbWF5IGVuZCB1cCA9PSBJRUVFODAyMTFfTlVNX0JBTkRTLCBidXQKLQkJCSAqIHdlJ2xsIGNhdGNoIHRoYXQgY2FzZSBhYm92ZSBhbmQgY29tcGxldGUgdGhlIHNjYW4KLQkJCSAqIGlmIHRoYXQgaXMgdGhlIGNhc2UuCi0JCQkgKi8KLQkJCWxvY2FsLT5zY2FuX2JhbmQrKzsKLQkJCWxvY2FsLT5zY2FuX2NoYW5uZWxfaWR4ID0gMDsKLQkJfQogCiAJCWlmIChza2lwKQogCQkJYnJlYWs7CkBAIC01NzMsMTAgKzM0MSwxNSBAQAogCQluZXh0X2RlbGF5ID0gSUVFRTgwMjExX1BBU1NJVkVfQ0hBTk5FTF9USU1FOwogCQlsb2NhbC0+c2Nhbl9zdGF0ZSA9IFNDQU5fU0VUX0NIQU5ORUw7CiAKLQkJaWYgKGxvY2FsLT5zY2FuX2NoYW5uZWwtPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fUEFTU0lWRV9TQ0FOKQorCQlpZiAobG9jYWwtPnNjYW5fY2hhbm5lbC0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9QQVNTSVZFX1NDQU4gfHwKKwkJICAgICFsb2NhbC0+c2Nhbl9yZXEtPm5fc3NpZHMpCiAJCQlicmVhazsKLQkJaWVlZTgwMjExX3NlbmRfcHJvYmVfcmVxKHNkYXRhLCBOVUxMLCBsb2NhbC0+c2Nhbl9zc2lkLAotCQkJCQkgbG9jYWwtPnNjYW5fc3NpZF9sZW4pOworCQlmb3IgKGkgPSAwOyBpIDwgbG9jYWwtPnNjYW5fcmVxLT5uX3NzaWRzOyBpKyspCisJCQlpZWVlODAyMTFfc2VuZF9wcm9iZV9yZXEoCisJCQkJc2RhdGEsIE5VTEwsCisJCQkJbG9jYWwtPnNjYW5fcmVxLT5zc2lkc1tpXS5zc2lkLAorCQkJCWxvY2FsLT5zY2FuX3JlcS0+c3NpZHNbaV0uc3NpZF9sZW4sCisJCQkJbG9jYWwtPnNjYW5fcmVxLT5pZSwgbG9jYWwtPnNjYW5fcmVxLT5pZV9sZW4pOwogCQluZXh0X2RlbGF5ID0gSUVFRTgwMjExX0NIQU5ORUxfVElNRTsKIAkJYnJlYWs7CiAJfQpAQCAtNTg3LDE0ICszNjAsMTkgQEAKIAogCiBpbnQgaWVlZTgwMjExX3N0YXJ0X3NjYW4oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2Nhbl9zZGF0YSwKLQkJCSB1OCAqc3NpZCwgc2l6ZV90IHNzaWRfbGVuKQorCQkJIHN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnJlcSkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNjYW5fc2RhdGEtPmxvY2FsOwogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwogCi0JaWYgKHNzaWRfbGVuID4gSUVFRTgwMjExX01BWF9TU0lEX0xFTikKKwlpZiAoIXJlcSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwlpZiAobG9jYWwtPnNjYW5fcmVxICYmIGxvY2FsLT5zY2FuX3JlcSAhPSByZXEpCisJCXJldHVybiAtRUJVU1k7CisKKwlsb2NhbC0+c2Nhbl9yZXEgPSByZXE7CisKIAkvKiBNTE1FLVNDQU4ucmVxdWVzdCAocGFnZSAxMTgpICBwYWdlIDE0NCAoMTEuMS4zLjEpCiAJICogQlNTVHlwZTogSU5GUkFTVFJVQ1RVUkUsIElOREVQRU5ERU5ULCBBTllfQlNTCiAJICogQlNTSUQ6IE1BQ0FkZHJlc3MKQEAgLTYyMiw3ICs0MDAsNyBAQAogCQlpbnQgcmM7CiAKIAkJbG9jYWwtPmh3X3NjYW5uaW5nID0gdHJ1ZTsKLQkJcmMgPSBsb2NhbC0+b3BzLT5od19zY2FuKGxvY2FsX3RvX2h3KGxvY2FsKSwgc3NpZCwgc3NpZF9sZW4pOworCQlyYyA9IGxvY2FsLT5vcHMtPmh3X3NjYW4obG9jYWxfdG9faHcobG9jYWwpLCByZXEpOwogCQlpZiAocmMpIHsKIAkJCWxvY2FsLT5od19zY2FubmluZyA9IGZhbHNlOwogCQkJcmV0dXJuIHJjOwpAQCAtNjMyLDI4ICs0MTAsMzUgQEAKIAl9CiAKIAlsb2NhbC0+c3dfc2Nhbm5pbmcgPSB0cnVlOworCWlmIChsb2NhbC0+b3BzLT5zd19zY2FuX3N0YXJ0KQorCQlsb2NhbC0+b3BzLT5zd19zY2FuX3N0YXJ0KGxvY2FsX3RvX2h3KGxvY2FsKSk7CiAKLQlyY3VfcmVhZF9sb2NrKCk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoc2RhdGEsICZsb2NhbC0+aW50ZXJmYWNlcywgbGlzdCkgeworCW11dGV4X2xvY2soJmxvY2FsLT5pZmxpc3RfbXR4KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkYXRhLCAmbG9jYWwtPmludGVyZmFjZXMsIGxpc3QpIHsKKwkJaWYgKCFuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKQorCQkJY29udGludWU7CisKKwkJLyogZGlzYWJsZSBiZWFjb25pbmcgKi8KKwkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCB8fAorCQkgICAgc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DIHx8CisJCSAgICBzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCkKKwkJCWllZWU4MDIxMV9pZl9jb25maWcoc2RhdGEsCisJCQkJCSAgICBJRUVFODAyMTFfSUZDQ19CRUFDT05fRU5BQkxFRCk7CisKIAkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7Ci0JCQlpZiAoc2RhdGEtPnUuc3RhLmZsYWdzICYgSUVFRTgwMjExX1NUQV9BU1NPQ0lBVEVEKSB7CisJCQlpZiAoc2RhdGEtPnUubWdkLmZsYWdzICYgSUVFRTgwMjExX1NUQV9BU1NPQ0lBVEVEKSB7CiAJCQkJbmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKHNkYXRhLT5kZXYpOwogCQkJCWllZWU4MDIxMV9zZW5kX251bGxmdW5jKGxvY2FsLCBzZGF0YSwgMSk7CiAJCQl9CiAJCX0gZWxzZQogCQkJbmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKHNkYXRhLT5kZXYpOwogCX0KLQlyY3VfcmVhZF91bmxvY2soKTsKKwltdXRleF91bmxvY2soJmxvY2FsLT5pZmxpc3RfbXR4KTsKIAotCWlmIChzc2lkKSB7Ci0JCWxvY2FsLT5zY2FuX3NzaWRfbGVuID0gc3NpZF9sZW47Ci0JCW1lbWNweShsb2NhbC0+c2Nhbl9zc2lkLCBzc2lkLCBzc2lkX2xlbik7Ci0JfSBlbHNlCi0JCWxvY2FsLT5zY2FuX3NzaWRfbGVuID0gMDsKIAlsb2NhbC0+c2Nhbl9zdGF0ZSA9IFNDQU5fU0VUX0NIQU5ORUw7CiAJbG9jYWwtPnNjYW5fY2hhbm5lbF9pZHggPSAwOwotCWxvY2FsLT5zY2FuX2JhbmQgPSBJRUVFODAyMTFfQkFORF8yR0haOwogCWxvY2FsLT5zY2FuX3NkYXRhID0gc2Nhbl9zZGF0YTsKKwlsb2NhbC0+c2Nhbl9yZXEgPSByZXE7CiAKIAluZXRpZl9hZGRyX2xvY2tfYmgobG9jYWwtPm1kZXYpOwogCWxvY2FsLT5maWx0ZXJfZmxhZ3MgfD0gRklGX0JDTl9QUkJSRVNQX1BST01JU0M7CkBAIC02NzMsMTMgKzQ1OCwyMSBAQAogCiAKIGludCBpZWVlODAyMTFfcmVxdWVzdF9zY2FuKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJICAgdTggKnNzaWQsIHNpemVfdCBzc2lkX2xlbikKKwkJCSAgIHN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnJlcSkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGE7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZDsKKworCWlmICghcmVxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChsb2NhbC0+c2Nhbl9yZXEgJiYgbG9jYWwtPnNjYW5fcmVxICE9IHJlcSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWxvY2FsLT5zY2FuX3JlcSA9IHJlcTsKIAogCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKLQkJcmV0dXJuIGllZWU4MDIxMV9zdGFydF9zY2FuKHNkYXRhLCBzc2lkLCBzc2lkX2xlbik7CisJCXJldHVybiBpZWVlODAyMTFfc3RhcnRfc2NhbihzZGF0YSwgcmVxKTsKIAogCS8qCiAJICogU1RBIGhhcyBhIHN0YXRlIG1hY2hpbmUgdGhhdCBtaWdodCBuZWVkIHRvIGRlZmVyIHNjYW5uaW5nCkBAIC02OTMsMjQyICs0ODYsOSBAQAogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAotCWlmc3RhID0gJnNkYXRhLT51LnN0YTsKLQotCWlmc3RhLT5zY2FuX3NzaWRfbGVuID0gc3NpZF9sZW47Ci0JaWYgKHNzaWRfbGVuKQotCQltZW1jcHkoaWZzdGEtPnNjYW5fc3NpZCwgc3NpZCwgc3NpZF9sZW4pOwotCXNldF9iaXQoSUVFRTgwMjExX1NUQV9SRVFfU0NBTiwgJmlmc3RhLT5yZXF1ZXN0KTsKLQlxdWV1ZV93b3JrKGxvY2FsLT5ody53b3JrcXVldWUsICZpZnN0YS0+d29yayk7CisJaWZtZ2QgPSAmc2RhdGEtPnUubWdkOworCXNldF9iaXQoSUVFRTgwMjExX1NUQV9SRVFfU0NBTiwgJmlmbWdkLT5yZXF1ZXN0KTsKKwlxdWV1ZV93b3JrKGxvY2FsLT5ody53b3JrcXVldWUsICZpZm1nZC0+d29yayk7CiAKIAlyZXR1cm4gMDsKIH0KLQotCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfc2Nhbl9hZGRfaWVzKHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJICAgc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzcywKLQkJCQkgICBjaGFyICoqY3VycmVudF9ldiwgY2hhciAqZW5kX2J1ZikKLXsKLQl1OCAqcG9zLCAqZW5kLCAqbmV4dDsKLQlzdHJ1Y3QgaXdfZXZlbnQgaXdlOwotCi0JaWYgKGJzcyA9PSBOVUxMIHx8IGJzcy0+aWVzID09IE5VTEwpCi0JCXJldHVybjsKLQotCS8qCi0JICogSWYgbmVlZGVkLCBmcmFnbWVudCB0aGUgSUVzIGJ1ZmZlciAoYXQgSUUgYm91bmRhcmllcykgaW50byBzaG9ydAotCSAqIGVub3VnaCBmcmFnbWVudHMgdG8gZml0IGludG8gSVdfR0VORVJJQ19JRV9NQVggb2N0ZXQgbWVzc2FnZXMuCi0JICovCi0JcG9zID0gYnNzLT5pZXM7Ci0JZW5kID0gcG9zICsgYnNzLT5pZXNfbGVuOwotCi0Jd2hpbGUgKGVuZCAtIHBvcyA+IElXX0dFTkVSSUNfSUVfTUFYKSB7Ci0JCW5leHQgPSBwb3MgKyAyICsgcG9zWzFdOwotCQl3aGlsZSAobmV4dCArIDIgKyBuZXh0WzFdIC0gcG9zIDwgSVdfR0VORVJJQ19JRV9NQVgpCi0JCQluZXh0ID0gbmV4dCArIDIgKyBuZXh0WzFdOwotCi0JCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7Ci0JCWl3ZS5jbWQgPSBJV0VWR0VOSUU7Ci0JCWl3ZS51LmRhdGEubGVuZ3RoID0gbmV4dCAtIHBvczsKLQkJKmN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCAqY3VycmVudF9ldiwKLQkJCQkJCSAgIGVuZF9idWYsICZpd2UsIHBvcyk7Ci0KLQkJcG9zID0gbmV4dDsKLQl9Ci0KLQlpZiAoZW5kID4gcG9zKSB7Ci0JCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7Ci0JCWl3ZS5jbWQgPSBJV0VWR0VOSUU7Ci0JCWl3ZS51LmRhdGEubGVuZ3RoID0gZW5kIC0gcG9zOwotCQkqY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sICpjdXJyZW50X2V2LAotCQkJCQkJICAgZW5kX2J1ZiwgJml3ZSwgcG9zKTsKLQl9Ci19Ci0KLQotc3RhdGljIGNoYXIgKgotaWVlZTgwMjExX3NjYW5fcmVzdWx0KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAotCQkgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzLAotCQkgICAgICBjaGFyICpjdXJyZW50X2V2LCBjaGFyICplbmRfYnVmKQotewotCXN0cnVjdCBpd19ldmVudCBpd2U7Ci0JY2hhciAqYnVmOwotCi0JaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywKLQkJICAgICAgIGJzcy0+bGFzdF91cGRhdGUgKyBJRUVFODAyMTFfU0NBTl9SRVNVTFRfRVhQSVJFKSkKLQkJcmV0dXJuIGN1cnJlbnRfZXY7Ci0KLQltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOwotCWl3ZS5jbWQgPSBTSU9DR0lXQVA7Ci0JaXdlLnUuYXBfYWRkci5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7Ci0JbWVtY3B5KGl3ZS51LmFwX2FkZHIuc2FfZGF0YSwgYnNzLT5ic3NpZCwgRVRIX0FMRU4pOwotCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLAotCQkJCQkgIElXX0VWX0FERFJfTEVOKTsKLQotCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7Ci0JaXdlLmNtZCA9IFNJT0NHSVdFU1NJRDsKLQlpZiAoYnNzX21lc2hfY2ZnKGJzcykpIHsKLQkJaXdlLnUuZGF0YS5sZW5ndGggPSBic3NfbWVzaF9pZF9sZW4oYnNzKTsKLQkJaXdlLnUuZGF0YS5mbGFncyA9IDE7Ci0JCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAotCQkJCQkJICAmaXdlLCBic3NfbWVzaF9pZChic3MpKTsKLQl9IGVsc2UgewotCQlpd2UudS5kYXRhLmxlbmd0aCA9IGJzcy0+c3NpZF9sZW47Ci0JCWl3ZS51LmRhdGEuZmxhZ3MgPSAxOwotCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKLQkJCQkJCSAgJml3ZSwgYnNzLT5zc2lkKTsKLQl9Ci0KLQlpZiAoYnNzLT5jYXBhYmlsaXR5ICYgKFdMQU5fQ0FQQUJJTElUWV9FU1MgfCBXTEFOX0NBUEFCSUxJVFlfSUJTUykKLQkgICAgfHwgYnNzX21lc2hfY2ZnKGJzcykpIHsKLQkJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKLQkJaXdlLmNtZCA9IFNJT0NHSVdNT0RFOwotCQlpZiAoYnNzX21lc2hfY2ZnKGJzcykpCi0JCQlpd2UudS5tb2RlID0gSVdfTU9ERV9NRVNIOwotCQllbHNlIGlmIChic3MtPmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfRVNTKQotCQkJaXdlLnUubW9kZSA9IElXX01PREVfTUFTVEVSOwotCQllbHNlCi0JCQlpd2UudS5tb2RlID0gSVdfTU9ERV9BREhPQzsKLQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCi0JCQkJCQkgICZpd2UsIElXX0VWX1VJTlRfTEVOKTsKLQl9Ci0KLQltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOwotCWl3ZS5jbWQgPSBTSU9DR0lXRlJFUTsKLQlpd2UudS5mcmVxLm0gPSBpZWVlODAyMTFfZnJlcXVlbmN5X3RvX2NoYW5uZWwoYnNzLT5mcmVxKTsKLQlpd2UudS5mcmVxLmUgPSAwOwotCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLAotCQkJCQkgIElXX0VWX0ZSRVFfTEVOKTsKLQotCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7Ci0JaXdlLmNtZCA9IFNJT0NHSVdGUkVROwotCWl3ZS51LmZyZXEubSA9IGJzcy0+ZnJlcTsKLQlpd2UudS5mcmVxLmUgPSA2OwotCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLAotCQkJCQkgIElXX0VWX0ZSRVFfTEVOKTsKLQltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOwotCWl3ZS5jbWQgPSBJV0VWUVVBTDsKLQlpd2UudS5xdWFsLnF1YWwgPSBic3MtPnF1YWw7Ci0JaXdlLnUucXVhbC5sZXZlbCA9IGJzcy0+c2lnbmFsOwotCWl3ZS51LnF1YWwubm9pc2UgPSBic3MtPm5vaXNlOwotCWl3ZS51LnF1YWwudXBkYXRlZCA9IGxvY2FsLT53c3RhdHNfZmxhZ3M7Ci0JY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsCi0JCQkJCSAgSVdfRVZfUVVBTF9MRU4pOwotCi0JbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKLQlpd2UuY21kID0gU0lPQ0dJV0VOQ09ERTsKLQlpZiAoYnNzLT5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1kpCi0JCWl3ZS51LmRhdGEuZmxhZ3MgPSBJV19FTkNPREVfRU5BQkxFRCB8IElXX0VOQ09ERV9OT0tFWTsKLQllbHNlCi0JCWl3ZS51LmRhdGEuZmxhZ3MgPSBJV19FTkNPREVfRElTQUJMRUQ7Ci0JaXdlLnUuZGF0YS5sZW5ndGggPSAwOwotCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAotCQkJCQkgICZpd2UsICIiKTsKLQotCWllZWU4MDIxMV9zY2FuX2FkZF9pZXMoaW5mbywgYnNzLCAmY3VycmVudF9ldiwgZW5kX2J1Zik7Ci0KLQlpZiAoYnNzLT5zdXBwX3JhdGVzX2xlbiA+IDApIHsKLQkJLyogZGlzcGxheSBhbGwgc3VwcG9ydGVkIHJhdGVzIGluIHJlYWRhYmxlIGZvcm1hdCAqLwotCQljaGFyICpwID0gY3VycmVudF9ldiArIGl3ZV9zdHJlYW1fbGNwX2xlbihpbmZvKTsKLQkJaW50IGk7Ci0KLQkJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKLQkJaXdlLmNtZCA9IFNJT0NHSVdSQVRFOwotCQkvKiBUaG9zZSB0d28gZmxhZ3MgYXJlIGlnbm9yZWQuLi4gKi8KLQkJaXdlLnUuYml0cmF0ZS5maXhlZCA9IGl3ZS51LmJpdHJhdGUuZGlzYWJsZWQgPSAwOwotCi0JCWZvciAoaSA9IDA7IGkgPCBic3MtPnN1cHBfcmF0ZXNfbGVuOyBpKyspIHsKLQkJCWl3ZS51LmJpdHJhdGUudmFsdWUgPSAoKGJzcy0+c3VwcF9yYXRlc1tpXSAmCi0JCQkJCQkJMHg3ZikgKiA1MDAwMDApOwotCQkJcCA9IGl3ZV9zdHJlYW1fYWRkX3ZhbHVlKGluZm8sIGN1cnJlbnRfZXYsIHAsCi0JCQkJCWVuZF9idWYsICZpd2UsIElXX0VWX1BBUkFNX0xFTik7Ci0JCX0KLQkJY3VycmVudF9ldiA9IHA7Ci0JfQotCi0JYnVmID0ga21hbGxvYygzMCwgR0ZQX0FUT01JQyk7Ci0JaWYgKGJ1ZikgewotCQltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOwotCQlpd2UuY21kID0gSVdFVkNVU1RPTTsKLQkJc3ByaW50ZihidWYsICJ0c2Y9JTAxNmxseCIsICh1bnNpZ25lZCBsb25nIGxvbmcpKGJzcy0+dGltZXN0YW1wKSk7Ci0JCWl3ZS51LmRhdGEubGVuZ3RoID0gc3RybGVuKGJ1Zik7Ci0JCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAotCQkJCQkJICAmaXdlLCBidWYpOwotCQltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOwotCQlpd2UuY21kID0gSVdFVkNVU1RPTTsKLQkJc3ByaW50ZihidWYsICIgTGFzdCBiZWFjb246ICVkbXMgYWdvIiwKLQkJCWppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtIGJzcy0+bGFzdF91cGRhdGUpKTsKLQkJaXdlLnUuZGF0YS5sZW5ndGggPSBzdHJsZW4oYnVmKTsKLQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsCi0JCQkJCQkgIGVuZF9idWYsICZpd2UsIGJ1Zik7Ci0JCWtmcmVlKGJ1Zik7Ci0JfQotCi0JaWYgKGJzc19tZXNoX2NmZyhic3MpKSB7Ci0JCXU4ICpjZmcgPSBic3NfbWVzaF9jZmcoYnNzKTsKLQkJYnVmID0ga21hbGxvYyg1MCwgR0ZQX0FUT01JQyk7Ci0JCWlmIChidWYpIHsKLQkJCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7Ci0JCQlpd2UuY21kID0gSVdFVkNVU1RPTTsKLQkJCXNwcmludGYoYnVmLCAiTWVzaCBuZXR3b3JrICh2ZXJzaW9uICVkKSIsIGNmZ1swXSk7Ci0JCQlpd2UudS5kYXRhLmxlbmd0aCA9IHN0cmxlbihidWYpOwotCQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsCi0JCQkJCQkJICBlbmRfYnVmLAotCQkJCQkJCSAgJml3ZSwgYnVmKTsKLQkJCXNwcmludGYoYnVmLCAiUGF0aCBTZWxlY3Rpb24gUHJvdG9jb2wgSUQ6ICIKLQkJCQkiMHglMDJYJTAyWCUwMlglMDJYIiwgY2ZnWzFdLCBjZmdbMl0sIGNmZ1szXSwKLQkJCQkJCQljZmdbNF0pOwotCQkJaXdlLnUuZGF0YS5sZW5ndGggPSBzdHJsZW4oYnVmKTsKLQkJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LAotCQkJCQkJCSAgZW5kX2J1ZiwKLQkJCQkJCQkgICZpd2UsIGJ1Zik7Ci0JCQlzcHJpbnRmKGJ1ZiwgIlBhdGggU2VsZWN0aW9uIE1ldHJpYyBJRDogIgotCQkJCSIweCUwMlglMDJYJTAyWCUwMlgiLCBjZmdbNV0sIGNmZ1s2XSwgY2ZnWzddLAotCQkJCQkJCWNmZ1s4XSk7Ci0JCQlpd2UudS5kYXRhLmxlbmd0aCA9IHN0cmxlbihidWYpOwotCQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsCi0JCQkJCQkJICBlbmRfYnVmLAotCQkJCQkJCSAgJml3ZSwgYnVmKTsKLQkJCXNwcmludGYoYnVmLCAiQ29uZ2VzdGlvbiBDb250cm9sIE1vZGUgSUQ6ICIKLQkJCQkiMHglMDJYJTAyWCUwMlglMDJYIiwgY2ZnWzldLCBjZmdbMTBdLAotCQkJCQkJCWNmZ1sxMV0sIGNmZ1sxMl0pOwotCQkJaXdlLnUuZGF0YS5sZW5ndGggPSBzdHJsZW4oYnVmKTsKLQkJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LAotCQkJCQkJCSAgZW5kX2J1ZiwKLQkJCQkJCQkgICZpd2UsIGJ1Zik7Ci0JCQlzcHJpbnRmKGJ1ZiwgIkNoYW5uZWwgUHJlY2VkZW5jZTogIgotCQkJCSIweCUwMlglMDJYJTAyWCUwMlgiLCBjZmdbMTNdLCBjZmdbMTRdLAotCQkJCQkJCWNmZ1sxNV0sIGNmZ1sxNl0pOwotCQkJaXdlLnUuZGF0YS5sZW5ndGggPSBzdHJsZW4oYnVmKTsKLQkJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LAotCQkJCQkJCSAgZW5kX2J1ZiwKLQkJCQkJCQkgICZpd2UsIGJ1Zik7Ci0JCQlrZnJlZShidWYpOwotCQl9Ci0JfQotCi0JcmV0dXJuIGN1cnJlbnRfZXY7Ci19Ci0KLQotaW50IGllZWU4MDIxMV9zY2FuX3Jlc3VsdHMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCi0JCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJICAgY2hhciAqYnVmLCBzaXplX3QgbGVuKQotewotCWNoYXIgKmN1cnJlbnRfZXYgPSBidWY7Ci0JY2hhciAqZW5kX2J1ZiA9IGJ1ZiArIGxlbjsKLQlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzOwotCi0Jc3Bpbl9sb2NrX2JoKCZsb2NhbC0+YnNzX2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoYnNzLCAmbG9jYWwtPmJzc19saXN0LCBsaXN0KSB7Ci0JCWlmIChidWYgKyBsZW4gLSBjdXJyZW50X2V2IDw9IElXX0VWX0FERFJfTEVOKSB7Ci0JCQlzcGluX3VubG9ja19iaCgmbG9jYWwtPmJzc19sb2NrKTsKLQkJCXJldHVybiAtRTJCSUc7Ci0JCX0KLQkJY3VycmVudF9ldiA9IGllZWU4MDIxMV9zY2FuX3Jlc3VsdChsb2NhbCwgaW5mbywgYnNzLAotCQkJCQkJICAgICAgIGN1cnJlbnRfZXYsIGVuZF9idWYpOwotCX0KLQlzcGluX3VubG9ja19iaCgmbG9jYWwtPmJzc19sb2NrKTsKLQlyZXR1cm4gY3VycmVudF9ldiAtIGJ1ZjsKLX0KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9zcGVjdG1nbXQuYyBiL25ldC9tYWM4MDIxMS9zcGVjdG1nbXQuYwppbmRleCBmNzJiYWQ2Li41ZjdhMjYyIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvc3BlY3RtZ210LmMKKysrIGIvbmV0L21hYzgwMjExL3NwZWN0bWdtdC5jCkBAIC02NSw3ICs2NSw3IEBACiAJCQlJRUVFODAyMTFfU1BDVF9NU1JfUlBSVF9NT0RFX1JFRlVTRUQ7CiAJbXNyX3JlcG9ydC0+dS5hY3Rpb24udS5tZWFzdXJlbWVudC5tc3JfZWxlbS50eXBlID0gcmVxdWVzdF9pZS0+dHlwZTsKIAotCWllZWU4MDIxMV90eF9za2Ioc2RhdGEsIHNrYiwgMCk7CisJaWVlZTgwMjExX3R4X3NrYihzZGF0YSwgc2tiLCAxKTsKIH0KIAogdm9pZCBpZWVlODAyMTFfcHJvY2Vzc19tZWFzdXJlbWVudF9yZXEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCkBAIC04NCwzICs4NCwxMDQgQEAKIAkJCW1nbXQtPnNhLCBtZ210LT5ic3NpZCwKIAkJCW1nbXQtPnUuYWN0aW9uLnUubWVhc3VyZW1lbnQuZGlhbG9nX3Rva2VuKTsKIH0KKwordm9pZCBpZWVlODAyMTFfY2hzd2l0Y2hfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSwgdS5tZ2QuY2hzd2l0Y2hfd29yayk7CisJc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzczsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKKworCWlmICghbmV0aWZfcnVubmluZyhzZGF0YS0+ZGV2KSkKKwkJcmV0dXJuOworCisJYnNzID0gaWVlZTgwMjExX3J4X2Jzc19nZXQoc2RhdGEtPmxvY2FsLCBpZm1nZC0+YnNzaWQsCisJCQkJICAgc2RhdGEtPmxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmNlbnRlcl9mcmVxLAorCQkJCSAgIGlmbWdkLT5zc2lkLCBpZm1nZC0+c3NpZF9sZW4pOworCWlmICghYnNzKQorCQlnb3RvIGV4aXQ7CisKKwlzZGF0YS0+bG9jYWwtPm9wZXJfY2hhbm5lbCA9IHNkYXRhLT5sb2NhbC0+Y3NhX2NoYW5uZWw7CisJLyogWFhYOiBzaG91bGRuJ3QgcmVhbGx5IG1vZGlmeSBjZmc4MDIxMS1vd25lZCBkYXRhISAqLworCWlmICghaWVlZTgwMjExX2h3X2NvbmZpZyhzZGF0YS0+bG9jYWwsIElFRUU4MDIxMV9DT05GX0NIQU5HRV9DSEFOTkVMKSkKKwkJYnNzLT5jYnNzLmNoYW5uZWwgPSBzZGF0YS0+bG9jYWwtPm9wZXJfY2hhbm5lbDsKKworCWllZWU4MDIxMV9yeF9ic3NfcHV0KHNkYXRhLT5sb2NhbCwgYnNzKTsKK2V4aXQ6CisJaWZtZ2QtPmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX0NTQV9SRUNFSVZFRDsKKwlpZWVlODAyMTFfd2FrZV9xdWV1ZXNfYnlfcmVhc29uKCZzZGF0YS0+bG9jYWwtPmh3LAorCQkJCQlJRUVFODAyMTFfUVVFVUVfU1RPUF9SRUFTT05fQ1NBKTsKK30KKwordm9pZCBpZWVlODAyMTFfY2hzd2l0Y2hfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0KKwkJKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKikgZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKKworCXF1ZXVlX3dvcmsoc2RhdGEtPmxvY2FsLT5ody53b3JrcXVldWUsICZpZm1nZC0+Y2hzd2l0Y2hfd29yayk7Cit9CisKK3ZvaWQgaWVlZTgwMjExX3Byb2Nlc3NfY2hhbnN3aXRjaChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCQkgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbF9zd19pZSAqc3dfZWxlbSwKKwkJCQkgIHN0cnVjdCBpZWVlODAyMTFfYnNzICpic3MpCit7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpuZXdfY2g7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CisJaW50IG5ld19mcmVxID0gaWVlZTgwMjExX2NoYW5uZWxfdG9fZnJlcXVlbmN5KHN3X2VsZW0tPm5ld19jaF9udW0pOworCisJLyogRklYTUU6IEhhbmRsZSBBREhPQyBsYXRlciAqLworCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKKwkJcmV0dXJuOworCisJaWYgKGlmbWdkLT5zdGF0ZSAhPSBJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFRCkKKwkJcmV0dXJuOworCisJaWYgKHNkYXRhLT5sb2NhbC0+c3dfc2Nhbm5pbmcgfHwgc2RhdGEtPmxvY2FsLT5od19zY2FubmluZykKKwkJcmV0dXJuOworCisJLyogRGlzcmVnYXJkIHN1YnNlcXVlbnQgYmVhY29ucyBpZiB3ZSBhcmUgYWxyZWFkeSBydW5uaW5nIGEgdGltZXIKKwkgICBwcm9jZXNzaW5nIGEgQ1NBICovCisKKwlpZiAoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9DU0FfUkVDRUlWRUQpCisJCXJldHVybjsKKworCW5ld19jaCA9IGllZWU4MDIxMV9nZXRfY2hhbm5lbChzZGF0YS0+bG9jYWwtPmh3LndpcGh5LCBuZXdfZnJlcSk7CisJaWYgKCFuZXdfY2ggfHwgbmV3X2NoLT5mbGFncyAmIElFRUU4MDIxMV9DSEFOX0RJU0FCTEVEKQorCQlyZXR1cm47CisKKwlzZGF0YS0+bG9jYWwtPmNzYV9jaGFubmVsID0gbmV3X2NoOworCisJaWYgKHN3X2VsZW0tPmNvdW50IDw9IDEpIHsKKwkJcXVldWVfd29yayhzZGF0YS0+bG9jYWwtPmh3LndvcmtxdWV1ZSwgJmlmbWdkLT5jaHN3aXRjaF93b3JrKTsKKwl9IGVsc2UgeworCQlpZWVlODAyMTFfc3RvcF9xdWV1ZXNfYnlfcmVhc29uKCZzZGF0YS0+bG9jYWwtPmh3LAorCQkJCQkJSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX0NTQSk7CisJCWlmbWdkLT5mbGFncyB8PSBJRUVFODAyMTFfU1RBX0NTQV9SRUNFSVZFRDsKKwkJbW9kX3RpbWVyKCZpZm1nZC0+Y2hzd2l0Y2hfdGltZXIsCisJCQkgIGppZmZpZXMgKworCQkJICBtc2Vjc190b19qaWZmaWVzKHN3X2VsZW0tPmNvdW50ICoKKwkJCQkJICAgYnNzLT5jYnNzLmJlYWNvbl9pbnRlcnZhbCkpOworCX0KK30KKwordm9pZCBpZWVlODAyMTFfaGFuZGxlX3B3cl9jb25zdHIoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkJIHUxNiBjYXBhYl9pbmZvLCB1OCAqcHdyX2NvbnN0cl9lbGVtLAorCQkJCSB1OCBwd3JfY29uc3RyX2VsZW1fbGVuKQoreworCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9ICZzZGF0YS0+bG9jYWwtPmh3LmNvbmY7CisKKwlpZiAoIShjYXBhYl9pbmZvICYgV0xBTl9DQVBBQklMSVRZX1NQRUNUUlVNX01HTVQpKQorCQlyZXR1cm47CisKKwkvKiBQb3dlciBjb25zdHJhaW50IElFIGxlbmd0aCBzaG91bGQgYmUgMSBvY3RldCAqLworCWlmIChwd3JfY29uc3RyX2VsZW1fbGVuICE9IDEpCisJCXJldHVybjsKKworCWlmICgoKnB3cl9jb25zdHJfZWxlbSA8PSBjb25mLT5jaGFubmVsLT5tYXhfcG93ZXIpICYmCisJICAgICgqcHdyX2NvbnN0cl9lbGVtICE9IHNkYXRhLT5sb2NhbC0+cG93ZXJfY29uc3RyX2xldmVsKSkgeworCQlzZGF0YS0+bG9jYWwtPnBvd2VyX2NvbnN0cl9sZXZlbCA9ICpwd3JfY29uc3RyX2VsZW07CisJCWllZWU4MDIxMV9od19jb25maWcoc2RhdGEtPmxvY2FsLCAwKTsKKwl9Cit9CisKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9zdGFfaW5mby5jIGIvbmV0L21hYzgwMjExL3N0YV9pbmZvLmMKaW5kZXggMTBjNTUzOS4uNGJhM2M1NCAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3N0YV9pbmZvLmMKKysrIGIvbmV0L21hYzgwMjExL3N0YV9pbmZvLmMKQEAgLTE5NCwxMiArMTk0LDUzIEBACiAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgIFNUQV9USURfTlVNOyBpKyspIHsKKwkJc3RydWN0IHRpZF9hbXBkdV9yeCAqdGlkX3J4OworCQlzdHJ1Y3QgdGlkX2FtcGR1X3R4ICp0aWRfdHg7CisKIAkJc3Bpbl9sb2NrX2JoKCZzdGEtPmxvY2spOwotCQlpZiAoc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFtpXSkKLQkJICBkZWxfdGltZXJfc3luYygmc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFtpXS0+c2Vzc2lvbl90aW1lcik7Ci0JCWlmIChzdGEtPmFtcGR1X21sbWUudGlkX3R4W2ldKQotCQkgIGRlbF90aW1lcl9zeW5jKCZzdGEtPmFtcGR1X21sbWUudGlkX3R4W2ldLT5hZGRiYV9yZXNwX3RpbWVyKTsKKwkJdGlkX3J4ID0gc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFtpXTsKKwkJLyogTWFrZSBzdXJlIHRpbWVyIHdvbid0IGZyZWUgdGhlIHRpZF9yeCBzdHJ1Y3QsIHNlZSBiZWxvdyAqLworCQlpZiAodGlkX3J4KQorCQkJdGlkX3J4LT5zaHV0ZG93biA9IHRydWU7CisKKwkJLyoKKwkJICogVGhlIHN0b3AgY2FsbGJhY2sgY2Fubm90IGZpbmQgdGhpcyBzdGF0aW9uIGFueSBtb3JlLCBidXQKKwkJICogaXQgZGlkbid0IGNvbXBsZXRlIGl0cyB3b3JrIC0tIHN0YXJ0IHRoZSBxdWV1ZSBpZiBuZWNlc3NhcnkKKwkJICovCisJCWlmIChzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3R4W2ldICYgSFRfQUdHX1NUQVRFX0lOSVRJQVRPUl9NU0sgJiYKKwkJICAgIHN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfdHhbaV0gJiBIVF9BR0dfU1RBVEVfUkVRX1NUT1BfQkFfTVNLICYmCisJCSAgICBsb2NhbC0+aHcuYW1wZHVfcXVldWVzKQorCQkJaWVlZTgwMjExX3dha2VfcXVldWVfYnlfcmVhc29uKCZsb2NhbC0+aHcsCisJCQkJbG9jYWwtPmh3LnF1ZXVlcyArIHN0YS0+dGlkX3RvX3R4X3FbaV0sCisJCQkJSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX0FHR1JFR0FUSU9OKTsKKwogCQlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKKworCQkvKgorCQkgKiBPdXRzaWRlIHNwaW5sb2NrIC0gc2h1dGRvd24gaXMgdHJ1ZSBub3cgc28gdGhhdCB0aGUgdGltZXIKKwkJICogd29uJ3QgZnJlZSB0aWRfcngsIHdlIGhhdmUgdG8gZG8gdGhhdCBub3cuIENhbid0IGxldCB0aGUKKwkJICogdGltZXIgZG8gaXQgYmVjYXVzZSB3ZSBoYXZlIHRvIHN5bmMgdGhlIHRpbWVyIG91dHNpZGUgdGhlCisJCSAqIGxvY2sgdGhhdCBpdCB0YWtlcyBpdHNlbGYuCisJCSAqLworCQlpZiAodGlkX3J4KSB7CisJCQlkZWxfdGltZXJfc3luYygmdGlkX3J4LT5zZXNzaW9uX3RpbWVyKTsKKwkJCWtmcmVlKHRpZF9yeCk7CisJCX0KKworCQkvKgorCQkgKiBObyBuZWVkIHRvIGRvIHN1Y2ggY29tcGxpY2F0aW9ucyBmb3IgVFggYWdnIHNlc3Npb25zLCB0aGUKKwkJICogcGF0aCBsZWFkaW5nIHRvIGZyZWVpbmcgdGhlIHRpZF90eCBzdHJ1Y3QgZ29lcyB2aWEgYSBjYWxsCisJCSAqIGZyb20gdGhlIGRyaXZlciwgYW5kIHRodXMgbmVlZHMgdG8gbG9vayB1cCB0aGUgc3RhIHN0cnVjdAorCQkgKiBhZ2Fpbiwgd2hpY2ggY2Fubm90IGJlIGZvdW5kIHdoZW4gd2UgZ2V0IGhlcmUuIEhlbmNlLCB3ZQorCQkgKiBqdXN0IG5lZWQgdG8gZGVsZXRlIHRoZSB0aW1lciBhbmQgZnJlZSB0aGUgYWdncmVnYXRpb24KKwkJICogaW5mbzsgd2Ugd29uJ3QgYmUgdGVsbGluZyB0aGUgcGVlciBhYm91dCBpdCB0aGVuIGJ1dCB0aGF0CisJCSAqIGRvZXNuJ3QgbWF0dGVyIGlmIHdlJ3JlIG5vdCB0YWxraW5nIHRvIGl0IGFnYWluIGFueXdheS4KKwkJICovCisJCXRpZF90eCA9IHN0YS0+YW1wZHVfbWxtZS50aWRfdHhbaV07CisJCWlmICh0aWRfdHgpIHsKKwkJCWRlbF90aW1lcl9zeW5jKCZ0aWRfdHgtPmFkZGJhX3Jlc3BfdGltZXIpOworCQkJa2ZyZWUodGlkX3R4KTsKKwkJfQogCX0KIAogCV9fc3RhX2luZm9fZnJlZShsb2NhbCwgc3RhKTsKQEAgLTI0Niw4ICsyODcsNyBAQAogCQkgKiBlbmFibGUgc2Vzc2lvbl90aW1lcidzIGRhdGEgZGlmZmVyZW50aWF0aW9uLiByZWZlciB0bwogCQkgKiBzdGFfcnhfYWdnX3Nlc3Npb25fdGltZXJfZXhwaXJlZCBmb3IgdXNlYWdlICovCiAJCXN0YS0+dGltZXJfdG9fdGlkW2ldID0gaTsKLQkJLyogdGlkIHRvIHR4IHF1ZXVlOiBpbml0aWFsaXplIGFjY29yZGluZyB0byBIVyAoMCBpcyB2YWxpZCkgKi8KLQkJc3RhLT50aWRfdG9fdHhfcVtpXSA9IGllZWU4MDIxMV9udW1fcXVldWVzKCZsb2NhbC0+aHcpOworCQlzdGEtPnRpZF90b190eF9xW2ldID0gLTE7CiAJCS8qIHJ4ICovCiAJCXN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfcnhbaV0gPSBIVF9BR0dfU1RBVEVfSURMRTsKIAkJc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFtpXSA9IE5VTEw7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvc3RhX2luZm8uaCBiL25ldC9tYWM4MDIxMS9zdGFfaW5mby5oCmluZGV4IGU0OWE1YjkuLjFmNDU1NzMgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9zdGFfaW5mby5oCisrKyBiL25ldC9tYWM4MDIxMS9zdGFfaW5mby5oCkBAIC0zNCw2ICszNCw3IEBACiAgKiBAV0xBTl9TVEFfQ0xFQVJfUFNfRklMVDogQ2xlYXIgUFMgZmlsdGVyIGluIGhhcmR3YXJlICh1c2luZyB0aGUKICAqCUlFRUU4MDIxMV9UWF9DVExfQ0xFQVJfUFNfRklMVCBjb250cm9sIGZsYWcpIHdoZW4gdGhlIG5leHQKICAqCWZyYW1lIHRvIHRoaXMgc3RhdGlvbiBpcyB0cmFuc21pdHRlZC4KKyAqIEBXTEFOX1NUQV9NRlA6IE1hbmFnZW1lbnQgZnJhbWUgcHJvdGVjdGlvbiBpcyB1c2VkIHdpdGggdGhpcyBTVEEuCiAgKi8KIGVudW0gaWVlZTgwMjExX3N0YV9pbmZvX2ZsYWdzIHsKIAlXTEFOX1NUQV9BVVRICQk9IDE8PDAsCkBAIC00Niw2ICs0Nyw3IEBACiAJV0xBTl9TVEFfV0RTCQk9IDE8PDcsCiAJV0xBTl9TVEFfUFNQT0xMCQk9IDE8PDgsCiAJV0xBTl9TVEFfQ0xFQVJfUFNfRklMVAk9IDE8PDksCisJV0xBTl9TVEFfTUZQCQk9IDE8PDEwLAogfTsKIAogI2RlZmluZSBTVEFfVElEX05VTSAxNgpAQCAtNjMsNyArNjUsNiBAQAogI2RlZmluZSBIVF9BR0dfU1RBVEVfT1BFUkFUSU9OQUwJKEhUX0FEREJBX1JFUVVFU1RFRF9NU0sgfAlcCiAJCQkJCSBIVF9BRERCQV9EUlZfUkVBRFlfTVNLIHwJXAogCQkJCQkgSFRfQUREQkFfUkVDRUlWRURfTVNLKQotI2RlZmluZSBIVF9BR0dfU1RBVEVfREVCVUdGU19DVEwJQklUKDcpCiAKIC8qKgogICogc3RydWN0IHRpZF9hbXBkdV90eCAtIFRJRCBhZ2dyZWdhdGlvbiBpbmZvcm1hdGlvbiAoVHgpLgpAQCAtODcsOCArODgsOSBAQAogICogQHN0b3JlZF9tcGR1X251bTogbnVtYmVyIG9mIE1QRFVzIGluIHJlb3JkZXJpbmcgYnVmZmVyCiAgKiBAc3NuOiBTdGFydGluZyBTZXF1ZW5jZSBOdW1iZXIgZXhwZWN0ZWQgdG8gYmUgYWdncmVnYXRlZC4KICAqIEBidWZfc2l6ZTogYnVmZmVyIHNpemUgZm9yIGluY29taW5nIEEtTVBEVXMKLSAqIEB0aW1lb3V0OiByZXNldCB0aW1lciB2YWx1ZS4KKyAqIEB0aW1lb3V0OiByZXNldCB0aW1lciB2YWx1ZSAoaW4gVFVzKS4KICAqIEBkaWFsb2dfdG9rZW46IGRpYWxvZyB0b2tlbiBmb3IgYWdncmVnYXRpb24gc2Vzc2lvbgorICogQHNodXRkb3duOiB0aGlzIHNlc3Npb24gaXMgYmVpbmcgc2h1dCBkb3duIGR1ZSB0byBTVEEgcmVtb3ZhbAogICovCiBzdHJ1Y3QgdGlkX2FtcGR1X3J4IHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqKnJlb3JkZXJfYnVmOwpAQCAtOTksNiArMTAxLDcgQEAKIAl1MTYgYnVmX3NpemU7CiAJdTE2IHRpbWVvdXQ7CiAJdTggZGlhbG9nX3Rva2VuOworCWJvb2wgc2h1dGRvd247CiB9OwogCiAvKioKQEAgLTE5OCw3ICsyMDEsNyBAQAogICogQHRpZF9zZXE6IHBlci1USUQgc2VxdWVuY2UgbnVtYmVycyBmb3Igc2VuZGluZyB0byB0aGlzIFNUQQogICogQGFtcGR1X21sbWU6IEEtTVBEVSBzdGF0ZSBtYWNoaW5lIHN0YXRlCiAgKiBAdGltZXJfdG9fdGlkOiBpZGVudGl0eSBtYXBwaW5nIHRvIElEIHRpbWVycwotICogQHRpZF90b190eF9xOiBtYXAgdGlkIHRvIHR4IHF1ZXVlCisgKiBAdGlkX3RvX3R4X3E6IG1hcCB0aWQgdG8gdHggcXVldWUgKGludmFsaWQgPT0gbmVnYXRpdmUgdmFsdWVzKQogICogQGxsaWQ6IExvY2FsIGxpbmsgSUQKICAqIEBwbGlkOiBQZWVyIGxpbmsgSUQKICAqIEByZWFzb246IENhbmNlbCByZWFzb24gb24gUExJTktfSE9MRElORyBzdGF0ZQpAQCAtMjczLDcgKzI3Niw3IEBACiAJICovCiAJc3RydWN0IHN0YV9hbXBkdV9tbG1lIGFtcGR1X21sbWU7CiAJdTggdGltZXJfdG9fdGlkW1NUQV9USURfTlVNXTsKLQl1OCB0aWRfdG9fdHhfcVtTVEFfVElEX05VTV07CisJczggdGlkX3RvX3R4X3FbU1RBX1RJRF9OVU1dOwogCiAjaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0gKIAkvKgpAQCAtMzgyLDggKzM4NSw2IEBACiB9CiAKIAotLyogTWF4aW11bSBudW1iZXIgb2YgY29uY3VycmVudGx5IHJlZ2lzdGVyZWQgc3RhdGlvbnMgKi8KLSNkZWZpbmUgTUFYX1NUQV9DT1VOVCAyMDA3CiAKICNkZWZpbmUgU1RBX0hBU0hfU0laRSAyNTYKICNkZWZpbmUgU1RBX0hBU0goc3RhKSAoc3RhWzVdKQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3R4LmMgYi9uZXQvbWFjODAyMTEvdHguYwppbmRleCAzN2UzZDVlZi4uNDU3MjM4YSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3R4LmMKKysrIGIvbmV0L21hYzgwMjExL3R4LmMKQEAgLTM1LDYgKzM1LDcgQEAKICNkZWZpbmUgSUVFRTgwMjExX1RYX09LCQkwCiAjZGVmaW5lIElFRUU4MDIxMV9UWF9BR0FJTgkxCiAjZGVmaW5lIElFRUU4MDIxMV9UWF9GUkFHX0FHQUlOCTIKKyNkZWZpbmUgSUVFRTgwMjExX1RYX1BFTkRJTkcJMwogCiAvKiBtaXNjIHV0aWxzICovCiAKQEAgLTMzMCw2ICszMzEsMjIgQEAKIAlyZXR1cm4gVFhfQ09OVElOVUU7CiB9CiAKK3N0YXRpYyBpbnQgaWVlZTgwMjExX3VzZV9tZnAoX19sZTE2IGZjLCBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwKKwkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlpZiAoIWllZWU4MDIxMV9pc19tZ210KGZjKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoc3RhID09IE5VTEwgfHwgIXRlc3Rfc3RhX2ZsYWdzKHN0YSwgV0xBTl9TVEFfTUZQKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIWllZWU4MDIxMV9pc19yb2J1c3RfbWdtdF9mcmFtZSgoc3RydWN0IGllZWU4MDIxMV9oZHIgKikKKwkJCQkJICAgIHNrYi0+ZGF0YSkpCisJCXJldHVybiAwOworCisJcmV0dXJuIDE7Cit9CisKIHN0YXRpYyBpZWVlODAyMTFfdHhfcmVzdWx0CiBpZWVlODAyMTFfdHhfaF91bmljYXN0X3BzX2J1ZihzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KQogewpAQCAtNDA5LDExICs0MjYsMTcgQEAKIAkJdHgtPmtleSA9IE5VTEw7CiAJZWxzZSBpZiAodHgtPnN0YSAmJiAoa2V5ID0gcmN1X2RlcmVmZXJlbmNlKHR4LT5zdGEtPmtleSkpKQogCQl0eC0+a2V5ID0ga2V5OworCWVsc2UgaWYgKGllZWU4MDIxMV9pc19tZ210KGhkci0+ZnJhbWVfY29udHJvbCkgJiYKKwkJIChrZXkgPSByY3VfZGVyZWZlcmVuY2UodHgtPnNkYXRhLT5kZWZhdWx0X21nbXRfa2V5KSkpCisJCXR4LT5rZXkgPSBrZXk7CiAJZWxzZSBpZiAoKGtleSA9IHJjdV9kZXJlZmVyZW5jZSh0eC0+c2RhdGEtPmRlZmF1bHRfa2V5KSkpCiAJCXR4LT5rZXkgPSBrZXk7CiAJZWxzZSBpZiAodHgtPnNkYXRhLT5kcm9wX3VuZW5jcnlwdGVkICYmCiAJCSAodHgtPnNrYi0+cHJvdG9jb2wgIT0gY3B1X3RvX2JlMTYoRVRIX1BfUEFFKSkgJiYKLQkJICEoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0lOSkVDVEVEKSkgeworCQkgIShpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfSU5KRUNURUQpICYmCisJCSAoIWllZWU4MDIxMV9pc19yb2J1c3RfbWdtdF9mcmFtZShoZHIpIHx8CisJCSAgKGllZWU4MDIxMV9pc19hY3Rpb24oaGRyLT5mcmFtZV9jb250cm9sKSAmJgorCQkgICB0eC0+c3RhICYmIHRlc3Rfc3RhX2ZsYWdzKHR4LT5zdGEsIFdMQU5fU1RBX01GUCkpKSkgewogCQlJODAyX0RFQlVHX0lOQyh0eC0+bG9jYWwtPnR4X2hhbmRsZXJzX2Ryb3BfdW5lbmNyeXB0ZWQpOwogCQlyZXR1cm4gVFhfRFJPUDsKIAl9IGVsc2UKQEAgLTQyOCwxMCArNDUxLDE5IEBACiAJCQlpZiAoaWVlZTgwMjExX2lzX2F1dGgoaGRyLT5mcmFtZV9jb250cm9sKSkKIAkJCQlicmVhazsKIAkJY2FzZSBBTEdfVEtJUDoKLQkJY2FzZSBBTEdfQ0NNUDoKIAkJCWlmICghaWVlZTgwMjExX2lzX2RhdGFfcHJlc2VudChoZHItPmZyYW1lX2NvbnRyb2wpKQogCQkJCXR4LT5rZXkgPSBOVUxMOwogCQkJYnJlYWs7CisJCWNhc2UgQUxHX0NDTVA6CisJCQlpZiAoIWllZWU4MDIxMV9pc19kYXRhX3ByZXNlbnQoaGRyLT5mcmFtZV9jb250cm9sKSAmJgorCQkJICAgICFpZWVlODAyMTFfdXNlX21mcChoZHItPmZyYW1lX2NvbnRyb2wsIHR4LT5zdGEsCisJCQkJCSAgICAgICB0eC0+c2tiKSkKKwkJCQl0eC0+a2V5ID0gTlVMTDsKKwkJCWJyZWFrOworCQljYXNlIEFMR19BRVNfQ01BQzoKKwkJCWlmICghaWVlZTgwMjExX2lzX21nbXQoaGRyLT5mcmFtZV9jb250cm9sKSkKKwkJCQl0eC0+a2V5ID0gTlVMTDsKKwkJCWJyZWFrOwogCQl9CiAJfQogCkBAIC03ODksNiArODIxLDggQEAKIAkJcmV0dXJuIGllZWU4MDIxMV9jcnlwdG9fdGtpcF9lbmNyeXB0KHR4KTsKIAljYXNlIEFMR19DQ01QOgogCQlyZXR1cm4gaWVlZTgwMjExX2NyeXB0b19jY21wX2VuY3J5cHQodHgpOworCWNhc2UgQUxHX0FFU19DTUFDOgorCQlyZXR1cm4gaWVlZTgwMjExX2NyeXB0b19hZXNfY21hY19lbmNyeXB0KHR4KTsKIAl9CiAKIAkvKiBub3QgcmVhY2hlZCAqLwpAQCAtODQ0LDcgKzg3OCw2IEBACiAJcmV0dXJuIFRYX0NPTlRJTlVFOwogfQogCi0KIC8qIGFjdHVhbCB0cmFuc21pdCBwYXRoICovCiAKIC8qCkBAIC05ODQsMTIgKzEwMTcsMjAgQEAKIAl0eC0+c3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBoZHItPmFkZHIxKTsKIAogCWlmICh0eC0+c3RhICYmIGllZWU4MDIxMV9pc19kYXRhX3FvcyhoZHItPmZyYW1lX2NvbnRyb2wpKSB7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJCXFjID0gaWVlZTgwMjExX2dldF9xb3NfY3RsKGhkcik7CiAJCXRpZCA9ICpxYyAmIElFRUU4MDIxMV9RT1NfQ1RMX1RJRF9NQVNLOwogCisJCXNwaW5fbG9ja19pcnFzYXZlKCZ0eC0+c3RhLT5sb2NrLCBmbGFncyk7CiAJCXN0YXRlID0gJnR4LT5zdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3R4W3RpZF07Ci0JCWlmICgqc3RhdGUgPT0gSFRfQUdHX1NUQVRFX09QRVJBVElPTkFMKQorCQlpZiAoKnN0YXRlID09IEhUX0FHR19TVEFURV9PUEVSQVRJT05BTCkgewogCQkJaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0NUTF9BTVBEVTsKKwkJCWlmIChsb2NhbC0+aHcuYW1wZHVfcXVldWVzKQorCQkJCXNrYl9zZXRfcXVldWVfbWFwcGluZygKKwkJCQkJc2tiLCB0eC0+bG9jYWwtPmh3LnF1ZXVlcyArCisJCQkJCSAgICAgdHgtPnN0YS0+dGlkX3RvX3R4X3FbdGlkXSk7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHgtPnN0YS0+bG9jaywgZmxhZ3MpOwogCX0KIAogCWlmIChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHItPmFkZHIxKSkgewpAQCAtMTA1Myw5ICsxMDk0LDkgQEAKIAlpbnQgcmV0LCBpOwogCiAJaWYgKHNrYikgewotCQlpZiAobmV0aWZfc3VicXVldWVfc3RvcHBlZChsb2NhbC0+bWRldiwgc2tiKSkKLQkJCXJldHVybiBJRUVFODAyMTFfVFhfQUdBSU47Ci0JCWluZm8gPSAgSUVFRTgwMjExX1NLQl9DQihza2IpOworCQlpZiAoaWVlZTgwMjExX3F1ZXVlX3N0b3BwZWQoJmxvY2FsLT5odywKKwkJCQkJICAgIHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpKSkKKwkJCXJldHVybiBJRUVFODAyMTFfVFhfUEVORElORzsKIAogCQlyZXQgPSBsb2NhbC0+b3BzLT50eChsb2NhbF90b19odyhsb2NhbCksIHNrYik7CiAJCWlmIChyZXQpCkBAIC0xMDcwLDggKzExMTEsOCBAQAogCQkJaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IodHgtPmV4dHJhX2ZyYWdbaV0pOwogCQkJaW5mby0+ZmxhZ3MgJj0gfihJRUVFODAyMTFfVFhfQ1RMX0NMRUFSX1BTX0ZJTFQgfAogCQkJCQkgSUVFRTgwMjExX1RYX0NUTF9GSVJTVF9GUkFHTUVOVCk7Ci0JCQlpZiAobmV0aWZfc3VicXVldWVfc3RvcHBlZChsb2NhbC0+bWRldiwKLQkJCQkJCSAgIHR4LT5leHRyYV9mcmFnW2ldKSkKKwkJCWlmIChpZWVlODAyMTFfcXVldWVfc3RvcHBlZCgmbG9jYWwtPmh3LAorCQkJCQlza2JfZ2V0X3F1ZXVlX21hcHBpbmcodHgtPmV4dHJhX2ZyYWdbaV0pKSkKIAkJCQlyZXR1cm4gSUVFRTgwMjExX1RYX0ZSQUdfQUdBSU47CiAKIAkJCXJldCA9IGxvY2FsLT5vcHMtPnR4KGxvY2FsX3RvX2h3KGxvY2FsKSwKQEAgLTExODEsOCArMTIyMiw5IEBACiAJCSAqIHF1ZXVlcywgdGhlcmUncyBubyByZWFzb24gZm9yIGEgZHJpdmVyIHRvIHJlamVjdAogCQkgKiBhIGZyYW1lIHRoZXJlLCB3YXJuIGFuZCBkcm9wIGl0LgogCQkgKi8KLQkJaWYgKFdBUk5fT04oaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0FNUERVKSkKLQkJCWdvdG8gZHJvcDsKKwkJaWYgKHJldCAhPSBJRUVFODAyMTFfVFhfUEVORElORykKKwkJCWlmIChXQVJOX09OKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BTVBEVSkpCisJCQkJZ290byBkcm9wOwogCiAJCXN0b3JlID0gJmxvY2FsLT5wZW5kaW5nX3BhY2tldFtxdWV1ZV07CiAKQEAgLTEyOTgsNiArMTM0MCwxOSBAQAogCQlyZXR1cm4gMDsKIAl9CiAKKwlpZiAoKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19QU19OVUxMRlVOQ19TVEFDSykgJiYKKwkgICAgbG9jYWwtPmh3LmNvbmYuZHluYW1pY19wc190aW1lb3V0ID4gMCkgeworCQlpZiAobG9jYWwtPmh3LmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9QUykgeworCQkJaWVlZTgwMjExX3N0b3BfcXVldWVzX2J5X3JlYXNvbigmbG9jYWwtPmh3LAorCQkJCQlJRUVFODAyMTFfUVVFVUVfU1RPUF9SRUFTT05fUFMpOworCQkJcXVldWVfd29yayhsb2NhbC0+aHcud29ya3F1ZXVlLAorCQkJCQkmbG9jYWwtPmR5bmFtaWNfcHNfZGlzYWJsZV93b3JrKTsKKwkJfQorCisJCW1vZF90aW1lcigmbG9jYWwtPmR5bmFtaWNfcHNfdGltZXIsIGppZmZpZXMgKworCQkgICAgICAgIG1zZWNzX3RvX2ppZmZpZXMobG9jYWwtPmh3LmNvbmYuZHluYW1pY19wc190aW1lb3V0KSk7CisJfQorCiAJbWVtc2V0KGluZm8sIDAsIHNpemVvZigqaW5mbykpOwogCiAJaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0NUTF9SRVFfVFhfU1RBVFVTOwpAQCAtMTM5MiwxMCArMTQ0NywzMSBAQAogCQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuID0gbG9jYWwtPmh3LmNvbmYuY2hhbm5lbDsKIAlzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2hlYWRlciAqcHJ0aGRyID0KIAkJKHN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaGVhZGVyICopc2tiLT5kYXRhOwogCXUxNiBsZW5fcnRoZHI7CiAKKwkvKgorCSAqIEZyYW1lIGluamVjdGlvbiBpcyBub3QgYWxsb3dlZCBpZiBiZWFjb25pbmcgaXMgbm90IGFsbG93ZWQKKwkgKiBvciBpZiB3ZSBuZWVkIHJhZGFyIGRldGVjdGlvbi4gQmVhY29uaW5nIGlzIHVzdWFsbHkgbm90IGFsbG93ZWQgd2hlbgorCSAqIHRoZSBtb2RlIG9yIG9wZXJhdGlvbiAoQWRob2MsIEFQLCBNZXNoKSBkb2VzIG5vdCBzdXBwb3J0IERGUy4KKwkgKiBQYXNzaXZlIHNjYW4gaXMgYWxzbyB1c2VkIGluIHdvcmxkIHJlZ3VsYXRvcnkgZG9tYWlucyB3aGVyZQorCSAqIHlvdXIgY291bnRyeSBpcyBub3Qga25vd24gYW5kIGFzIHN1Y2ggaXQgc2hvdWxkIGJlIHRyZWF0ZWQgYXMKKwkgKiBOTyBUWCB1bmxlc3MgdGhlIGNoYW5uZWwgaXMgZXhwbGljaXRseSBhbGxvd2VkIGluIHdoaWNoIGNhc2UKKwkgKiB5b3VyIGN1cnJlbnQgcmVndWxhdG9yeSBkb21haW4gd291bGQgbm90IGhhdmUgdGhlIHBhc3NpdmUgc2NhbgorCSAqIGZsYWcuCisJICoKKwkgKiBTaW5jZSBBUCBtb2RlIHVzZXMgbW9uaXRvciBpbnRlcmZhY2VzIHRvIGluamVjdC9UWCBtYW5hZ2VtZW50CisJICogZnJhbWVzIHdlIGNhbiBtYWtlIEFQIG1vZGUgdGhlIGV4Y2VwdGlvbiB0byB0aGlzIHJ1bGUgb25jZSBpdAorCSAqIHN1cHBvcnRzIHJhZGFyIGRldGVjdGlvbiBhcyBpdHMgaW1wbGVtZW50YXRpb24gY2FuIGRlYWwgd2l0aAorCSAqIHJhZGFyIGRldGVjdGlvbiBieSBpdHNlbGYuIFdlIGNhbiBkbyB0aGF0IGxhdGVyIGJ5IGFkZGluZyBhCisJICogbW9uaXRvciBmbGFnIGludGVyZmFjZXMgdXNlZCBmb3IgQVAgc3VwcG9ydC4KKwkgKi8KKwlpZiAoKGNoYW4tPmZsYWdzICYgKElFRUU4MDIxMV9DSEFOX05PX0lCU1MgfCBJRUVFODAyMTFfQ0hBTl9SQURBUiB8CisJICAgICBJRUVFODAyMTFfQ0hBTl9QQVNTSVZFX1NDQU4pKSkKKwkJZ290byBmYWlsOworCiAJLyogY2hlY2sgZm9yIG5vdCBldmVuIGhhdmluZyB0aGUgZml4ZWQgcmFkaW90YXAgaGVhZGVyIHBhcnQgKi8KIAlpZiAodW5saWtlbHkoc2tiLT5sZW4gPCBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9yYWRpb3RhcF9oZWFkZXIpKSkKIAkJZ290byBmYWlsOyAvKiB0b28gc2hvcnQgdG8gYmUgcG9zc2libHkgdmFsaWQgKi8KQEAgLTE0NzksMTkgKzE1NTUsNiBAQAogCQlnb3RvIGZhaWw7CiAJfQogCi0JaWYgKCEobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX05PX1NUQUNLX0RZTkFNSUNfUFMpICYmCi0JICAgIGxvY2FsLT5keW5hbWljX3BzX3RpbWVvdXQgPiAwKSB7Ci0JCWlmIChsb2NhbC0+aHcuY29uZi5mbGFncyAmIElFRUU4MDIxMV9DT05GX1BTKSB7Ci0JCQlpZWVlODAyMTFfc3RvcF9xdWV1ZXNfYnlfcmVhc29uKCZsb2NhbC0+aHcsCi0JCQkJCQkJSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX1BTKTsKLQkJCXF1ZXVlX3dvcmsobG9jYWwtPmh3LndvcmtxdWV1ZSwKLQkJCQkgICAmbG9jYWwtPmR5bmFtaWNfcHNfZGlzYWJsZV93b3JrKTsKLQkJfQotCi0JCW1vZF90aW1lcigmbG9jYWwtPmR5bmFtaWNfcHNfdGltZXIsIGppZmZpZXMgKwotCQkJICBtc2Vjc190b19qaWZmaWVzKGxvY2FsLT5keW5hbWljX3BzX3RpbWVvdXQpKTsKLQl9Ci0KIAluaF9wb3MgPSBza2JfbmV0d29ya19oZWFkZXIoc2tiKSAtIHNrYi0+ZGF0YTsKIAloX3BvcyA9IHNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYikgLSBza2ItPmRhdGE7CiAKQEAgLTE1NzIsNyArMTYzNSw3IEBACiAJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgogCQlmYyB8PSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9UT0RTKTsKIAkJLyogQlNTSUQgU0EgREEgKi8KLQkJbWVtY3B5KGhkci5hZGRyMSwgc2RhdGEtPnUuc3RhLmJzc2lkLCBFVEhfQUxFTik7CisJCW1lbWNweShoZHIuYWRkcjEsIHNkYXRhLT51Lm1nZC5ic3NpZCwgRVRIX0FMRU4pOwogCQltZW1jcHkoaGRyLmFkZHIyLCBza2ItPmRhdGEgKyBFVEhfQUxFTiwgRVRIX0FMRU4pOwogCQltZW1jcHkoaGRyLmFkZHIzLCBza2ItPmRhdGEsIEVUSF9BTEVOKTsKIAkJaGRybGVuID0gMjQ7CkBAIC0xNTgxLDcgKzE2NDQsNyBAQAogCQkvKiBEQSBTQSBCU1NJRCAqLwogCQltZW1jcHkoaGRyLmFkZHIxLCBza2ItPmRhdGEsIEVUSF9BTEVOKTsKIAkJbWVtY3B5KGhkci5hZGRyMiwgc2tiLT5kYXRhICsgRVRIX0FMRU4sIEVUSF9BTEVOKTsKLQkJbWVtY3B5KGhkci5hZGRyMywgc2RhdGEtPnUuc3RhLmJzc2lkLCBFVEhfQUxFTik7CisJCW1lbWNweShoZHIuYWRkcjMsIHNkYXRhLT51Lmlic3MuYnNzaWQsIEVUSF9BTEVOKTsKIAkJaGRybGVuID0gMjQ7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC0xODY3LDcgKzE5MzAsNiBAQAogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbzsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IE5VTEw7CiAJc3RydWN0IGllZWU4MDIxMV9pZl9hcCAqYXAgPSBOVUxMOwotCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSA9IE5VTEw7CiAJc3RydWN0IGJlYWNvbl9kYXRhICpiZWFjb247CiAJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CiAJZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kID0gbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+YmFuZDsKQEAgLTE5MTksMTMgKzE5ODEsMTMgQEAKIAkJfSBlbHNlCiAJCQlnb3RvIG91dDsKIAl9IGVsc2UgaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgeworCQlzdHJ1Y3QgaWVlZTgwMjExX2lmX2lic3MgKmlmaWJzcyA9ICZzZGF0YS0+dS5pYnNzOwogCQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwotCQlpZnN0YSA9ICZzZGF0YS0+dS5zdGE7CiAKLQkJaWYgKCFpZnN0YS0+cHJvYmVfcmVzcCkKKwkJaWYgKCFpZmlic3MtPnByb2JlX3Jlc3ApCiAJCQlnb3RvIG91dDsKIAotCQlza2IgPSBza2JfY29weShpZnN0YS0+cHJvYmVfcmVzcCwgR0ZQX0FUT01JQyk7CisJCXNrYiA9IHNrYl9jb3B5KGlmaWJzcy0+cHJvYmVfcmVzcCwgR0ZQX0FUT01JQyk7CiAJCWlmICghc2tiKQogCQkJZ290byBvdXQ7CiAKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS91dGlsLmMgYi9uZXQvbWFjODAyMTEvdXRpbC5jCmluZGV4IGZiODllMWQuLmUwNDMxYTEgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS91dGlsLmMKKysrIGIvbmV0L21hYzgwMjExL3V0aWwuYwpAQCAtNDEsNiArNDEsMTUgQEAKIGNvbnN0IHVuc2lnbmVkIGNoYXIgYnJpZGdlX3R1bm5lbF9oZWFkZXJbXSBfX2FsaWduZWQoMikgPQogCXsgMHhhYSwgMHhhYSwgMHgwMywgMHgwMCwgMHgwMCwgMHhmOCB9OwogCitzdHJ1Y3QgaWVlZTgwMjExX2h3ICp3aXBoeV90b19pZWVlODAyMTFfaHcoc3RydWN0IHdpcGh5ICp3aXBoeSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbDsKKwlCVUdfT04oIXdpcGh5KTsKKworCWxvY2FsID0gd2lwaHlfcHJpdih3aXBoeSk7CisJcmV0dXJuICZsb2NhbC0+aHc7Cit9CitFWFBPUlRfU1lNQk9MKHdpcGh5X3RvX2llZWU4MDIxMV9odyk7CiAKIHU4ICppZWVlODAyMTFfZ2V0X2Jzc2lkKHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsIHNpemVfdCBsZW4sCiAJCQllbnVtIG5sODAyMTFfaWZ0eXBlIHR5cGUpCkBAIC0zMzUsMTUgKzM0NCwzNiBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOwogCi0JLyogd2UgZG9uJ3QgbmVlZCB0byB0cmFjayBhbXBkdSBxdWV1ZXMgKi8KLQlpZiAocXVldWUgPCBpZWVlODAyMTFfbnVtX3JlZ3VsYXJfcXVldWVzKGh3KSkgewotCQlfX2NsZWFyX2JpdChyZWFzb24sICZsb2NhbC0+cXVldWVfc3RvcF9yZWFzb25zW3F1ZXVlXSk7Ci0KLQkJaWYgKGxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbnNbcXVldWVdICE9IDApCi0JCQkvKiBzb21lb25lIHN0aWxsIGhhcyB0aGlzIHF1ZXVlIHN0b3BwZWQgKi8KKwlpZiAocXVldWUgPj0gaHctPnF1ZXVlcykgeworCQlpZiAobG9jYWwtPmFtcGR1X2FjX3F1ZXVlW3F1ZXVlIC0gaHctPnF1ZXVlc10gPCAwKQogCQkJcmV0dXJuOworCisJCS8qCisJCSAqIGZvciB2aXJ0dWFsIGFnZ3JlZ2F0aW9uIHF1ZXVlcywgd2UgbmVlZCB0byByZWZjb3VudCB0aGUKKwkJICogaW50ZXJuYWwgbWFjODAyMTEgZGlzYWJsZSAobXVsdGlwbGUgdGltZXMhKSwga2VlcCB0cmFjayBvZgorCQkgKiBkcml2ZXIgZGlzYWJsZSBfYW5kXyBtYWtlIHN1cmUgdGhlIHJlZ3VsYXIgcXVldWUgaXMKKwkJICogYWN0dWFsbHkgZW5hYmxlZC4KKwkJICovCisJCWlmIChyZWFzb24gPT0gSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX0FHR1JFR0FUSU9OKQorCQkJbG9jYWwtPmFtZHB1X2FjX3N0b3BfcmVmY250W3F1ZXVlIC0gaHctPnF1ZXVlc10tLTsKKwkJZWxzZQorCQkJX19jbGVhcl9iaXQocmVhc29uLCAmbG9jYWwtPnF1ZXVlX3N0b3BfcmVhc29uc1txdWV1ZV0pOworCisJCWlmIChsb2NhbC0+cXVldWVfc3RvcF9yZWFzb25zW3F1ZXVlXSB8fAorCQkgICAgbG9jYWwtPmFtZHB1X2FjX3N0b3BfcmVmY250W3F1ZXVlIC0gaHctPnF1ZXVlc10pCisJCQlyZXR1cm47CisKKwkJLyogbm93IGdvIG9uIHRvIHRyZWF0IHRoZSBjb3JyZXNwb25kaW5nIHJlZ3VsYXIgcXVldWUgKi8KKwkJcXVldWUgPSBsb2NhbC0+YW1wZHVfYWNfcXVldWVbcXVldWUgLSBody0+cXVldWVzXTsKKwkJcmVhc29uID0gSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX0FHR1JFR0FUSU9OOwogCX0KIAorCV9fY2xlYXJfYml0KHJlYXNvbiwgJmxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbnNbcXVldWVdKTsKKworCWlmIChsb2NhbC0+cXVldWVfc3RvcF9yZWFzb25zW3F1ZXVlXSAhPSAwKQorCQkvKiBzb21lb25lIHN0aWxsIGhhcyB0aGlzIHF1ZXVlIHN0b3BwZWQgKi8KKwkJcmV0dXJuOworCiAJaWYgKHRlc3RfYml0KHF1ZXVlLCBsb2NhbC0+cXVldWVzX3BlbmRpbmcpKSB7CiAJCXNldF9iaXQocXVldWUsIGxvY2FsLT5xdWV1ZXNfcGVuZGluZ19ydW4pOwogCQl0YXNrbGV0X3NjaGVkdWxlKCZsb2NhbC0+dHhfcGVuZGluZ190YXNrbGV0KTsKQEAgLTM3NSw5ICs0MDUsMjcgQEAKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTsKIAotCS8qIHdlIGRvbid0IG5lZWQgdG8gdHJhY2sgYW1wZHUgcXVldWVzICovCi0JaWYgKHF1ZXVlIDwgaWVlZTgwMjExX251bV9yZWd1bGFyX3F1ZXVlcyhodykpCi0JCV9fc2V0X2JpdChyZWFzb24sICZsb2NhbC0+cXVldWVfc3RvcF9yZWFzb25zW3F1ZXVlXSk7CisJaWYgKHF1ZXVlID49IGh3LT5xdWV1ZXMpIHsKKwkJaWYgKGxvY2FsLT5hbXBkdV9hY19xdWV1ZVtxdWV1ZSAtIGh3LT5xdWV1ZXNdIDwgMCkKKwkJCXJldHVybjsKKworCQkvKgorCQkgKiBmb3IgdmlydHVhbCBhZ2dyZWdhdGlvbiBxdWV1ZXMsIHdlIG5lZWQgdG8gcmVmY291bnQgdGhlCisJCSAqIGludGVybmFsIG1hYzgwMjExIGRpc2FibGUgKG11bHRpcGxlIHRpbWVzISksIGtlZXAgdHJhY2sgb2YKKwkJICogZHJpdmVyIGRpc2FibGUgX2FuZF8gbWFrZSBzdXJlIHRoZSByZWd1bGFyIHF1ZXVlIGlzCisJCSAqIGFjdHVhbGx5IGVuYWJsZWQuCisJCSAqLworCQlpZiAocmVhc29uID09IElFRUU4MDIxMV9RVUVVRV9TVE9QX1JFQVNPTl9BR0dSRUdBVElPTikKKwkJCWxvY2FsLT5hbWRwdV9hY19zdG9wX3JlZmNudFtxdWV1ZSAtIGh3LT5xdWV1ZXNdKys7CisJCWVsc2UKKwkJCV9fc2V0X2JpdChyZWFzb24sICZsb2NhbC0+cXVldWVfc3RvcF9yZWFzb25zW3F1ZXVlXSk7CisKKwkJLyogbm93IGdvIG9uIHRvIHRyZWF0IHRoZSBjb3JyZXNwb25kaW5nIHJlZ3VsYXIgcXVldWUgKi8KKwkJcXVldWUgPSBsb2NhbC0+YW1wZHVfYWNfcXVldWVbcXVldWUgLSBody0+cXVldWVzXTsKKwkJcmVhc29uID0gSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX0FHR1JFR0FUSU9OOworCX0KKworCV9fc2V0X2JpdChyZWFzb24sICZsb2NhbC0+cXVldWVfc3RvcF9yZWFzb25zW3F1ZXVlXSk7CiAKIAluZXRpZl9zdG9wX3N1YnF1ZXVlKGxvY2FsLT5tZGV2LCBxdWV1ZSk7CiB9CkBAIC00MDksNyArNDU3LDcgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZsb2NhbC0+cXVldWVfc3RvcF9yZWFzb25fbG9jaywgZmxhZ3MpOwogCi0JZm9yIChpID0gMDsgaSA8IGllZWU4MDIxMV9udW1fcXVldWVzKGh3KTsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBody0+cXVldWVzOyBpKyspCiAJCV9faWVlZTgwMjExX3N0b3BfcXVldWUoaHcsIGksIHJlYXNvbik7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb2NhbC0+cXVldWVfc3RvcF9yZWFzb25fbG9jaywgZmxhZ3MpOwpAQCAtNDI1LDYgKzQ3MywxNiBAQAogaW50IGllZWU4MDIxMV9xdWV1ZV9zdG9wcGVkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgcXVldWUpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChxdWV1ZSA+PSBody0+cXVldWVzKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZsb2NhbC0+cXVldWVfc3RvcF9yZWFzb25fbG9jaywgZmxhZ3MpOworCQlxdWV1ZSA9IGxvY2FsLT5hbXBkdV9hY19xdWV1ZVtxdWV1ZSAtIGh3LT5xdWV1ZXNdOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb2NhbC0+cXVldWVfc3RvcF9yZWFzb25fbG9jaywgZmxhZ3MpOworCQlpZiAocXVldWUgPCAwKQorCQkJcmV0dXJuIHRydWU7CisJfQorCiAJcmV0dXJuIF9fbmV0aWZfc3VicXVldWVfc3RvcHBlZChsb2NhbC0+bWRldiwgcXVldWUpOwogfQogRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfcXVldWVfc3RvcHBlZCk7CkBAIC00NTksNyArNTE3LDcgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKIAotCXJ0bmxfbG9jaygpOworCW11dGV4X2xvY2soJmxvY2FsLT5pZmxpc3RfbXR4KTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoc2RhdGEsICZsb2NhbC0+aW50ZXJmYWNlcywgbGlzdCkgewogCQlzd2l0Y2ggKHNkYXRhLT52aWYudHlwZSkgewpAQCAtNDgwLDcgKzUzOCw3IEBACiAJCQkJICZzZGF0YS0+dmlmKTsKIAl9CiAKLQlydG5sX3VubG9jaygpOworCW11dGV4X3VubG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaWVlZTgwMjExX2l0ZXJhdGVfYWN0aXZlX2ludGVyZmFjZXMpOwogCkBAIC02NTMsNiArNzExLDEwIEBACiAJCQllbGVtcy0+cHdyX2NvbnN0cl9lbGVtID0gcG9zOwogCQkJZWxlbXMtPnB3cl9jb25zdHJfZWxlbV9sZW4gPSBlbGVuOwogCQkJYnJlYWs7CisJCWNhc2UgV0xBTl9FSURfVElNRU9VVF9JTlRFUlZBTDoKKwkJCWVsZW1zLT50aW1lb3V0X2ludCA9IHBvczsKKwkJCWVsZW1zLT50aW1lb3V0X2ludF9sZW4gPSBlbGVuOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlicmVhazsKIAkJfQpAQCAtNjg4LDYgKzc1MCwyNyBAQAogCQlsb2NhbC0+b3BzLT5jb25mX3R4KGxvY2FsX3RvX2h3KGxvY2FsKSwgaSwgJnFwYXJhbSk7CiB9CiAKK3ZvaWQgaWVlZTgwMjExX3N0YV9kZWZfd21tX3BhcmFtcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCQkgIGNvbnN0IHNpemVfdCBzdXBwX3JhdGVzX2xlbiwKKwkJCQkgIGNvbnN0IHU4ICpzdXBwX3JhdGVzKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOworCWludCBpLCBoYXZlX2hpZ2hlcl90aGFuXzExbWJpdCA9IDA7CisKKwkvKiBjZi4gSUVFRSA4MDIuMTEgOS4yLjEyICovCisJZm9yIChpID0gMDsgaSA8IHN1cHBfcmF0ZXNfbGVuOyBpKyspCisJCWlmICgoc3VwcF9yYXRlc1tpXSAmIDB4N2YpICogNSA+IDExMCkKKwkJCWhhdmVfaGlnaGVyX3RoYW5fMTFtYml0ID0gMTsKKworCWlmIChsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFogJiYKKwkgICAgaGF2ZV9oaWdoZXJfdGhhbl8xMW1iaXQpCisJCXNkYXRhLT5mbGFncyB8PSBJRUVFODAyMTFfU0RBVEFfT1BFUkFUSU5HX0dNT0RFOworCWVsc2UKKwkJc2RhdGEtPmZsYWdzICY9IH5JRUVFODAyMTFfU0RBVEFfT1BFUkFUSU5HX0dNT0RFOworCisJaWVlZTgwMjExX3NldF93bW1fZGVmYXVsdChzZGF0YSk7Cit9CisKIHZvaWQgaWVlZTgwMjExX3R4X3NrYihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJICAgICAgaW50IGVuY3J5cHQpCiB7CkBAIC03MjcsMTIgKzgxMCwxMiBAQAogCXJldHVybiByZXQ7CiB9CiAKLXU2NCBpZWVlODAyMTFfbWFuZGF0b3J5X3JhdGVzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAordTMyIGllZWU4MDIxMV9tYW5kYXRvcnlfcmF0ZXMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCiAJCQkgICAgICBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CiAJc3RydWN0IGllZWU4MDIxMV9yYXRlICpiaXRyYXRlczsKLQl1NjQgbWFuZGF0b3J5X3JhdGVzOworCXUzMiBtYW5kYXRvcnlfcmF0ZXM7CiAJZW51bSBpZWVlODAyMTFfcmF0ZV9mbGFncyBtYW5kYXRvcnlfZmxhZzsKIAlpbnQgaTsKIApAQCAtNzU0LDMgKzgzNywxNjEgQEAKIAkJCW1hbmRhdG9yeV9yYXRlcyB8PSBCSVQoaSk7CiAJcmV0dXJuIG1hbmRhdG9yeV9yYXRlczsKIH0KKwordm9pZCBpZWVlODAyMTFfc2VuZF9hdXRoKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJIHUxNiB0cmFuc2FjdGlvbiwgdTE2IGF1dGhfYWxnLAorCQkJIHU4ICpleHRyYSwgc2l6ZV90IGV4dHJhX2xlbiwKKwkJCSBjb25zdCB1OCAqYnNzaWQsIGludCBlbmNyeXB0KQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OworCWNvbnN0IHU4ICppZV9hdXRoID0gTlVMTDsKKwlpbnQgaWVfYXV0aF9sZW4gPSAwOworCisJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7CisJCWllX2F1dGhfbGVuID0gc2RhdGEtPnUubWdkLmllX2F1dGhfbGVuOworCQlpZV9hdXRoID0gc2RhdGEtPnUubWdkLmllX2F1dGg7CisJfQorCisJc2tiID0gZGV2X2FsbG9jX3NrYihsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20gKworCQkJICAgIHNpemVvZigqbWdtdCkgKyA2ICsgZXh0cmFfbGVuICsgaWVfYXV0aF9sZW4pOworCWlmICghc2tiKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlciBmb3IgYXV0aCAiCisJCSAgICAgICAiZnJhbWVcbiIsIHNkYXRhLT5kZXYtPm5hbWUpOworCQlyZXR1cm47CisJfQorCXNrYl9yZXNlcnZlKHNrYiwgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tKTsKKworCW1nbXQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopIHNrYl9wdXQoc2tiLCAyNCArIDYpOworCW1lbXNldChtZ210LCAwLCAyNCArIDYpOworCW1nbXQtPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfTUdNVCB8CisJCQkJCSAgSUVFRTgwMjExX1NUWVBFX0FVVEgpOworCWlmIChlbmNyeXB0KQorCQltZ210LT5mcmFtZV9jb250cm9sIHw9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX1BST1RFQ1RFRCk7CisJbWVtY3B5KG1nbXQtPmRhLCBic3NpZCwgRVRIX0FMRU4pOworCW1lbWNweShtZ210LT5zYSwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwltZW1jcHkobWdtdC0+YnNzaWQsIGJzc2lkLCBFVEhfQUxFTik7CisJbWdtdC0+dS5hdXRoLmF1dGhfYWxnID0gY3B1X3RvX2xlMTYoYXV0aF9hbGcpOworCW1nbXQtPnUuYXV0aC5hdXRoX3RyYW5zYWN0aW9uID0gY3B1X3RvX2xlMTYodHJhbnNhY3Rpb24pOworCW1nbXQtPnUuYXV0aC5zdGF0dXNfY29kZSA9IGNwdV90b19sZTE2KDApOworCWlmIChleHRyYSkKKwkJbWVtY3B5KHNrYl9wdXQoc2tiLCBleHRyYV9sZW4pLCBleHRyYSwgZXh0cmFfbGVuKTsKKwlpZiAoaWVfYXV0aCkKKwkJbWVtY3B5KHNrYl9wdXQoc2tiLCBpZV9hdXRoX2xlbiksIGllX2F1dGgsIGllX2F1dGhfbGVuKTsKKworCWllZWU4MDIxMV90eF9za2Ioc2RhdGEsIHNrYiwgZW5jcnlwdCk7Cit9CisKK3ZvaWQgaWVlZTgwMjExX3NlbmRfcHJvYmVfcmVxKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCB1OCAqZHN0LAorCQkJICAgICAgdTggKnNzaWQsIHNpemVfdCBzc2lkX2xlbiwKKwkJCSAgICAgIHU4ICppZSwgc2l6ZV90IGllX2xlbikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDsKKwl1OCAqcG9zLCAqc3VwcF9yYXRlcywgKmVzdXBwX3JhdGVzID0gTlVMTCwgKmV4dHJhX3ByZXFfaWUgPSBOVUxMOworCWludCBpLCBleHRyYV9wcmVxX2llX2xlbiA9IDA7CisKKwlzd2l0Y2ggKHNkYXRhLT52aWYudHlwZSkgeworCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKKwkJZXh0cmFfcHJlcV9pZV9sZW4gPSBzZGF0YS0+dS5tZ2QuaWVfcHJvYmVyZXFfbGVuOworCQlleHRyYV9wcmVxX2llID0gc2RhdGEtPnUubWdkLmllX3Byb2JlcmVxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlza2IgPSBkZXZfYWxsb2Nfc2tiKGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSArIHNpemVvZigqbWdtdCkgKyAyMDAgKworCQkJICAgIGllX2xlbiArIGV4dHJhX3ByZXFfaWVfbGVuKTsKKwlpZiAoIXNrYikgeworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBidWZmZXIgZm9yIHByb2JlICIKKwkJICAgICAgICJyZXF1ZXN0XG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKKwkJcmV0dXJuOworCX0KKwlza2JfcmVzZXJ2ZShza2IsIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7CisKKwltZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSBza2JfcHV0KHNrYiwgMjQpOworCW1lbXNldChtZ210LCAwLCAyNCk7CisJbWdtdC0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9NR01UIHwKKwkJCQkJICBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVRKTsKKwltZW1jcHkobWdtdC0+c2EsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJaWYgKGRzdCkgeworCQltZW1jcHkobWdtdC0+ZGEsIGRzdCwgRVRIX0FMRU4pOworCQltZW1jcHkobWdtdC0+YnNzaWQsIGRzdCwgRVRIX0FMRU4pOworCX0gZWxzZSB7CisJCW1lbXNldChtZ210LT5kYSwgMHhmZiwgRVRIX0FMRU4pOworCQltZW1zZXQobWdtdC0+YnNzaWQsIDB4ZmYsIEVUSF9BTEVOKTsKKwl9CisJcG9zID0gc2tiX3B1dChza2IsIDIgKyBzc2lkX2xlbik7CisJKnBvcysrID0gV0xBTl9FSURfU1NJRDsKKwkqcG9zKysgPSBzc2lkX2xlbjsKKwltZW1jcHkocG9zLCBzc2lkLCBzc2lkX2xlbik7CisKKwlzdXBwX3JhdGVzID0gc2tiX3B1dChza2IsIDIpOworCXN1cHBfcmF0ZXNbMF0gPSBXTEFOX0VJRF9TVVBQX1JBVEVTOworCXN1cHBfcmF0ZXNbMV0gPSAwOworCXNiYW5kID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kXTsKKworCWZvciAoaSA9IDA7IGkgPCBzYmFuZC0+bl9iaXRyYXRlczsgaSsrKSB7CisJCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqcmF0ZSA9ICZzYmFuZC0+Yml0cmF0ZXNbaV07CisJCWlmIChlc3VwcF9yYXRlcykgeworCQkJcG9zID0gc2tiX3B1dChza2IsIDEpOworCQkJZXN1cHBfcmF0ZXNbMV0rKzsKKwkJfSBlbHNlIGlmIChzdXBwX3JhdGVzWzFdID09IDgpIHsKKwkJCWVzdXBwX3JhdGVzID0gc2tiX3B1dChza2IsIDMpOworCQkJZXN1cHBfcmF0ZXNbMF0gPSBXTEFOX0VJRF9FWFRfU1VQUF9SQVRFUzsKKwkJCWVzdXBwX3JhdGVzWzFdID0gMTsKKwkJCXBvcyA9ICZlc3VwcF9yYXRlc1syXTsKKwkJfSBlbHNlIHsKKwkJCXBvcyA9IHNrYl9wdXQoc2tiLCAxKTsKKwkJCXN1cHBfcmF0ZXNbMV0rKzsKKwkJfQorCQkqcG9zID0gcmF0ZS0+Yml0cmF0ZSAvIDU7CisJfQorCisJaWYgKGllKQorCQltZW1jcHkoc2tiX3B1dChza2IsIGllX2xlbiksIGllLCBpZV9sZW4pOworCWlmIChleHRyYV9wcmVxX2llKQorCQltZW1jcHkoc2tiX3B1dChza2IsIGV4dHJhX3ByZXFfaWVfbGVuKSwgZXh0cmFfcHJlcV9pZSwKKwkJICAgICAgIGV4dHJhX3ByZXFfaWVfbGVuKTsKKworCWllZWU4MDIxMV90eF9za2Ioc2RhdGEsIHNrYiwgMCk7Cit9CisKK3UzMiBpZWVlODAyMTFfc3RhX2dldF9yYXRlcyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJCSAgICBzdHJ1Y3QgaWVlZTgwMl8xMV9lbGVtcyAqZWxlbXMsCisJCQkgICAgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kKQoreworCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOworCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqYml0cmF0ZXM7CisJc2l6ZV90IG51bV9yYXRlczsKKwl1MzIgc3VwcF9yYXRlczsKKwlpbnQgaSwgajsKKwlzYmFuZCA9IGxvY2FsLT5ody53aXBoeS0+YmFuZHNbYmFuZF07CisKKwlpZiAoIXNiYW5kKSB7CisJCVdBUk5fT04oMSk7CisJCXNiYW5kID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kXTsKKwl9CisKKwliaXRyYXRlcyA9IHNiYW5kLT5iaXRyYXRlczsKKwludW1fcmF0ZXMgPSBzYmFuZC0+bl9iaXRyYXRlczsKKwlzdXBwX3JhdGVzID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgZWxlbXMtPnN1cHBfcmF0ZXNfbGVuICsKKwkJICAgICBlbGVtcy0+ZXh0X3N1cHBfcmF0ZXNfbGVuOyBpKyspIHsKKwkJdTggcmF0ZSA9IDA7CisJCWludCBvd25fcmF0ZTsKKwkJaWYgKGkgPCBlbGVtcy0+c3VwcF9yYXRlc19sZW4pCisJCQlyYXRlID0gZWxlbXMtPnN1cHBfcmF0ZXNbaV07CisJCWVsc2UgaWYgKGVsZW1zLT5leHRfc3VwcF9yYXRlcykKKwkJCXJhdGUgPSBlbGVtcy0+ZXh0X3N1cHBfcmF0ZXMKKwkJCQlbaSAtIGVsZW1zLT5zdXBwX3JhdGVzX2xlbl07CisJCW93bl9yYXRlID0gNSAqIChyYXRlICYgMHg3Zik7CisJCWZvciAoaiA9IDA7IGogPCBudW1fcmF0ZXM7IGorKykKKwkJCWlmIChiaXRyYXRlc1tqXS5iaXRyYXRlID09IG93bl9yYXRlKQorCQkJCXN1cHBfcmF0ZXMgfD0gQklUKGopOworCX0KKwlyZXR1cm4gc3VwcF9yYXRlczsKK30KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS93ZXh0LmMgYi9uZXQvbWFjODAyMTEvd2V4dC5jCmluZGV4IDcxNjJkNTguLjkzNWM2M2UgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS93ZXh0LmMKKysrIGIvbmV0L21hYzgwMjExL3dleHQuYwpAQCAtMzcsNyArMzcsMTQgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5OwogCWludCBlcnI7CiAKLQlpZiAoaWR4IDwgMCB8fCBpZHggPj0gTlVNX0RFRkFVTFRfS0VZUykgeworCWlmIChhbGcgPT0gQUxHX0FFU19DTUFDKSB7CisJCWlmIChpZHggPCBOVU1fREVGQVVMVF9LRVlTIHx8CisJCSAgICBpZHggPj0gTlVNX0RFRkFVTFRfS0VZUyArIE5VTV9ERUZBVUxUX01HTVRfS0VZUykgeworCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBzZXRfZW5jcnlwdCAtIGludmFsaWQgaWR4PSVkICIKKwkJCSAgICAgICAiKEJJUClcbiIsIHNkYXRhLT5kZXYtPm5hbWUsIGlkeCk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0gZWxzZSBpZiAoaWR4IDwgMCB8fCBpZHggPj0gTlVNX0RFRkFVTFRfS0VZUykgewogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHNldF9lbmNyeXB0IC0gaW52YWxpZCBpZHg9JWRcbiIsCiAJCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBpZHgpOwogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTEwMyw2ICsxMTAsOSBAQAogCiAJCWlmIChzZXRfdHhfa2V5IHx8ICghc3RhICYmICFzZGF0YS0+ZGVmYXVsdF9rZXkgJiYga2V5KSkKIAkJCWllZWU4MDIxMV9zZXRfZGVmYXVsdF9rZXkoc2RhdGEsIGlkeCk7CisJCWlmIChhbGcgPT0gQUxHX0FFU19DTUFDICYmCisJCSAgICAoc2V0X3R4X2tleSB8fCAoIXN0YSAmJiAhc2RhdGEtPmRlZmF1bHRfbWdtdF9rZXkgJiYga2V5KSkpCisJCQlpZWVlODAyMTFfc2V0X2RlZmF1bHRfbWdtdF9rZXkoc2RhdGEsIGlkeCk7CiAJfQogCiAgb3V0X3VubG9jazoKQEAgLTEyMiwxMjIgKzEzMiwzNyBAQAogCWlmIChzZGF0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU0RBVEFfVVNFUlNQQUNFX01MTUUpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiB8fAotCSAgICBzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHsKKwlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHsKIAkJaW50IHJldCA9IGllZWU4MDIxMV9zdGFfc2V0X2V4dHJhX2llKHNkYXRhLCBleHRyYSwgZGF0YS0+bGVuZ3RoKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7Ci0JCXNkYXRhLT51LnN0YS5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9BVVRPX0JTU0lEX1NFTDsKLQkJaWVlZTgwMjExX3N0YV9yZXFfYXV0aChzZGF0YSwgJnNkYXRhLT51LnN0YSk7CisJCXNkYXRhLT51Lm1nZC5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9BVVRPX0JTU0lEX1NFTDsKKwkJaWVlZTgwMjExX3N0YV9yZXFfYXV0aChzZGF0YSk7CiAJCXJldHVybiAwOwogCX0KIAogCXJldHVybiAtRU9QTk9UU1VQUDsKIH0KIAotc3RhdGljIGludCBpZWVlODAyMTFfaW9jdGxfZ2l3cmFuZ2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOwotCXN0cnVjdCBpd19yYW5nZSAqcmFuZ2UgPSAoc3RydWN0IGl3X3JhbmdlICopIGV4dHJhOwotCWVudW0gaWVlZTgwMjExX2JhbmQgYmFuZDsKLQlpbnQgYyA9IDA7Ci0KLQlkYXRhLT5sZW5ndGggPSBzaXplb2Yoc3RydWN0IGl3X3JhbmdlKTsKLQltZW1zZXQocmFuZ2UsIDAsIHNpemVvZihzdHJ1Y3QgaXdfcmFuZ2UpKTsKLQotCXJhbmdlLT53ZV92ZXJzaW9uX2NvbXBpbGVkID0gV0lSRUxFU1NfRVhUOwotCXJhbmdlLT53ZV92ZXJzaW9uX3NvdXJjZSA9IDIxOwotCXJhbmdlLT5yZXRyeV9jYXBhID0gSVdfUkVUUllfTElNSVQ7Ci0JcmFuZ2UtPnJldHJ5X2ZsYWdzID0gSVdfUkVUUllfTElNSVQ7Ci0JcmFuZ2UtPm1pbl9yZXRyeSA9IDA7Ci0JcmFuZ2UtPm1heF9yZXRyeSA9IDI1NTsKLQlyYW5nZS0+bWluX3J0cyA9IDA7Ci0JcmFuZ2UtPm1heF9ydHMgPSAyMzQ3OwotCXJhbmdlLT5taW5fZnJhZyA9IDI1NjsKLQlyYW5nZS0+bWF4X2ZyYWcgPSAyMzQ2OwotCi0JcmFuZ2UtPmVuY29kaW5nX3NpemVbMF0gPSA1OwotCXJhbmdlLT5lbmNvZGluZ19zaXplWzFdID0gMTM7Ci0JcmFuZ2UtPm51bV9lbmNvZGluZ19zaXplcyA9IDI7Ci0JcmFuZ2UtPm1heF9lbmNvZGluZ190b2tlbnMgPSBOVU1fREVGQVVMVF9LRVlTOwotCi0JaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TSUdOQUxfVU5TUEVDIHx8Ci0JICAgIGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TSUdOQUxfREIpCi0JCXJhbmdlLT5tYXhfcXVhbC5sZXZlbCA9IGxvY2FsLT5ody5tYXhfc2lnbmFsOwotCWVsc2UgaWYgIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfU0lHTkFMX0RCTSkKLQkJcmFuZ2UtPm1heF9xdWFsLmxldmVsID0gLTExMDsKLQllbHNlCi0JCXJhbmdlLT5tYXhfcXVhbC5sZXZlbCA9IDA7Ci0KLQlpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX05PSVNFX0RCTSkKLQkJcmFuZ2UtPm1heF9xdWFsLm5vaXNlID0gLTExMDsKLQllbHNlCi0JCXJhbmdlLT5tYXhfcXVhbC5ub2lzZSA9IDA7Ci0KLQlyYW5nZS0+bWF4X3F1YWwucXVhbCA9IDEwMDsKLQlyYW5nZS0+bWF4X3F1YWwudXBkYXRlZCA9IGxvY2FsLT53c3RhdHNfZmxhZ3M7Ci0KLQlyYW5nZS0+YXZnX3F1YWwucXVhbCA9IDUwOwotCS8qIG5vdCBhbHdheXMgdHJ1ZSBidXQgYmV0dGVyIHRoYW4gbm90aGluZyAqLwotCXJhbmdlLT5hdmdfcXVhbC5sZXZlbCA9IHJhbmdlLT5tYXhfcXVhbC5sZXZlbCAvIDI7Ci0JcmFuZ2UtPmF2Z19xdWFsLm5vaXNlID0gcmFuZ2UtPm1heF9xdWFsLm5vaXNlIC8gMjsKLQlyYW5nZS0+YXZnX3F1YWwudXBkYXRlZCA9IGxvY2FsLT53c3RhdHNfZmxhZ3M7Ci0KLQlyYW5nZS0+ZW5jX2NhcGEgPSBJV19FTkNfQ0FQQV9XUEEgfCBJV19FTkNfQ0FQQV9XUEEyIHwKLQkJCSAgSVdfRU5DX0NBUEFfQ0lQSEVSX1RLSVAgfCBJV19FTkNfQ0FQQV9DSVBIRVJfQ0NNUDsKLQotCi0JZm9yIChiYW5kID0gMDsgYmFuZCA8IElFRUU4MDIxMV9OVU1fQkFORFM7IGJhbmQgKyspIHsKLQkJaW50IGk7Ci0JCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOwotCi0JCXNiYW5kID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tiYW5kXTsKLQotCQlpZiAoIXNiYW5kKQotCQkJY29udGludWU7Ci0KLQkJZm9yIChpID0gMDsgaSA8IHNiYW5kLT5uX2NoYW5uZWxzICYmIGMgPCBJV19NQVhfRlJFUVVFTkNJRVM7IGkrKykgewotCQkJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuID0gJnNiYW5kLT5jaGFubmVsc1tpXTsKLQotCQkJaWYgKCEoY2hhbi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRCkpIHsKLQkJCQlyYW5nZS0+ZnJlcVtjXS5pID0KLQkJCQkJaWVlZTgwMjExX2ZyZXF1ZW5jeV90b19jaGFubmVsKAotCQkJCQkJY2hhbi0+Y2VudGVyX2ZyZXEpOwotCQkJCXJhbmdlLT5mcmVxW2NdLm0gPSBjaGFuLT5jZW50ZXJfZnJlcTsKLQkJCQlyYW5nZS0+ZnJlcVtjXS5lID0gNjsKLQkJCQljKys7Ci0JCQl9Ci0JCX0KLQl9Ci0JcmFuZ2UtPm51bV9jaGFubmVscyA9IGM7Ci0JcmFuZ2UtPm51bV9mcmVxdWVuY3kgPSBjOwotCi0JSVdfRVZFTlRfQ0FQQV9TRVRfS0VSTkVMKHJhbmdlLT5ldmVudF9jYXBhKTsKLQlJV19FVkVOVF9DQVBBX1NFVChyYW5nZS0+ZXZlbnRfY2FwYSwgU0lPQ0dJV0FQKTsKLQlJV19FVkVOVF9DQVBBX1NFVChyYW5nZS0+ZXZlbnRfY2FwYSwgU0lPQ0dJV1NDQU4pOwotCi0JcmFuZ2UtPnNjYW5fY2FwYSB8PSBJV19TQ0FOX0NBUEFfRVNTSUQ7Ci0KLQlyZXR1cm4gMDsKLX0KLQotCiBzdGF0aWMgaW50IGllZWU4MDIxMV9pb2N0bF9zaXdmcmVxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCQkgICBzdHJ1Y3QgaXdfZnJlcSAqZnJlcSwgY2hhciAqZXh0cmEpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwogCi0JaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQotCQlzZGF0YS0+dS5zdGEuZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfQVVUT19DSEFOTkVMX1NFTDsKKwlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKQorCQlzZGF0YS0+dS5pYnNzLmZsYWdzICY9IH5JRUVFODAyMTFfSUJTU19BVVRPX0NIQU5ORUxfU0VMOworCWVsc2UgaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQorCQlzZGF0YS0+dS5tZ2QuZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfQVVUT19DSEFOTkVMX1NFTDsKIAogCS8qIGZyZXEtPmUgPT0gMDogZnJlcS0+bSA9IGNoYW5uZWw7IG90aGVyd2lzZSBmcmVxID0gbSAqIDEwXmUgKi8KIAlpZiAoZnJlcS0+ZSA9PSAwKSB7CiAJCWlmIChmcmVxLT5tIDwgMCkgewotCQkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQotCQkJCXNkYXRhLT51LnN0YS5mbGFncyB8PQorCQkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykKKwkJCQlzZGF0YS0+dS5pYnNzLmZsYWdzIHw9CisJCQkJCUlFRUU4MDIxMV9JQlNTX0FVVE9fQ0hBTk5FTF9TRUw7CisJCQllbHNlIGlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKKwkJCQlzZGF0YS0+dS5tZ2QuZmxhZ3MgfD0KIAkJCQkJSUVFRTgwMjExX1NUQV9BVVRPX0NIQU5ORUxfU0VMOwogCQkJcmV0dXJuIDA7CiAJCX0gZWxzZQpAQCAtMjc0LDMyICsxOTksMzUgQEAKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKIAlzaXplX3QgbGVuID0gZGF0YS0+bGVuZ3RoOworCWludCByZXQ7CiAKIAkvKiBpd2NvbmZpZyB1c2VzIG51bCB0ZXJtaW5hdGlvbiBpbiBTU0lELi4gKi8KIAlpZiAobGVuID4gMCAmJiBzc2lkW2xlbiAtIDFdID09ICdcMCcpCiAJCWxlbi0tOwogCiAJc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwotCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiB8fAotCSAgICBzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHsKLQkJaW50IHJldDsKKwlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHsKIAkJaWYgKHNkYXRhLT5mbGFncyAmIElFRUU4MDIxMV9TREFUQV9VU0VSU1BBQ0VfTUxNRSkgewogCQkJaWYgKGxlbiA+IElFRUU4MDIxMV9NQVhfU1NJRF9MRU4pCiAJCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQltZW1jcHkoc2RhdGEtPnUuc3RhLnNzaWQsIHNzaWQsIGxlbik7Ci0JCQlzZGF0YS0+dS5zdGEuc3NpZF9sZW4gPSBsZW47CisJCQltZW1jcHkoc2RhdGEtPnUubWdkLnNzaWQsIHNzaWQsIGxlbik7CisJCQlzZGF0YS0+dS5tZ2Quc3NpZF9sZW4gPSBsZW47CiAJCQlyZXR1cm4gMDsKIAkJfQorCiAJCWlmIChkYXRhLT5mbGFncykKLQkJCXNkYXRhLT51LnN0YS5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9BVVRPX1NTSURfU0VMOworCQkJc2RhdGEtPnUubWdkLmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX0FVVE9fU1NJRF9TRUw7CiAJCWVsc2UKLQkJCXNkYXRhLT51LnN0YS5mbGFncyB8PSBJRUVFODAyMTFfU1RBX0FVVE9fU1NJRF9TRUw7CisJCQlzZGF0YS0+dS5tZ2QuZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9BVVRPX1NTSURfU0VMOworCiAJCXJldCA9IGllZWU4MDIxMV9zdGFfc2V0X3NzaWQoc2RhdGEsIHNzaWQsIGxlbik7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwotCQlpZWVlODAyMTFfc3RhX3JlcV9hdXRoKHNkYXRhLCAmc2RhdGEtPnUuc3RhKTsKKworCQlpZWVlODAyMTFfc3RhX3JlcV9hdXRoKHNkYXRhKTsKIAkJcmV0dXJuIDA7Ci0JfQorCX0gZWxzZSBpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKQorCQlyZXR1cm4gaWVlZTgwMjExX2lic3Nfc2V0X3NzaWQoc2RhdGEsIHNzaWQsIGxlbik7CiAKIAlyZXR1cm4gLUVPUE5PVFNVUFA7CiB9CkBAIC0zMTMsOCArMjQxLDcgQEAKIAogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwogCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKLQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gfHwKLQkgICAgc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7CisJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7CiAJCWludCByZXMgPSBpZWVlODAyMTFfc3RhX2dldF9zc2lkKHNkYXRhLCBzc2lkLCAmbGVuKTsKIAkJaWYgKHJlcyA9PSAwKSB7CiAJCQlkYXRhLT5sZW5ndGggPSBsZW47CkBAIC0zMjIsNiArMjQ5LDE0IEBACiAJCX0gZWxzZQogCQkJZGF0YS0+ZmxhZ3MgPSAwOwogCQlyZXR1cm4gcmVzOworCX0gZWxzZSBpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7CisJCWludCByZXMgPSBpZWVlODAyMTFfaWJzc19nZXRfc3NpZChzZGF0YSwgc3NpZCwgJmxlbik7CisJCWlmIChyZXMgPT0gMCkgeworCQkJZGF0YS0+bGVuZ3RoID0gbGVuOworCQkJZGF0YS0+ZmxhZ3MgPSAxOworCQl9IGVsc2UKKwkJCWRhdGEtPmZsYWdzID0gMDsKKwkJcmV0dXJuIHJlczsKIAl9CiAKIAlyZXR1cm4gLUVPUE5PVFNVUFA7CkBAIC0zMzUsMjYgKzI3MCwzNSBAQAogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwogCiAJc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwotCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiB8fAotCSAgICBzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHsKKwlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHsKIAkJaW50IHJldDsKIAkJaWYgKHNkYXRhLT5mbGFncyAmIElFRUU4MDIxMV9TREFUQV9VU0VSU1BBQ0VfTUxNRSkgewotCQkJbWVtY3B5KHNkYXRhLT51LnN0YS5ic3NpZCwgKHU4ICopICZhcF9hZGRyLT5zYV9kYXRhLAorCQkJbWVtY3B5KHNkYXRhLT51Lm1nZC5ic3NpZCwgKHU4ICopICZhcF9hZGRyLT5zYV9kYXRhLAogCQkJICAgICAgIEVUSF9BTEVOKTsKIAkJCXJldHVybiAwOwogCQl9CiAJCWlmIChpc196ZXJvX2V0aGVyX2FkZHIoKHU4ICopICZhcF9hZGRyLT5zYV9kYXRhKSkKLQkJCXNkYXRhLT51LnN0YS5mbGFncyB8PSBJRUVFODAyMTFfU1RBX0FVVE9fQlNTSURfU0VMIHwKKwkJCXNkYXRhLT51Lm1nZC5mbGFncyB8PSBJRUVFODAyMTFfU1RBX0FVVE9fQlNTSURfU0VMIHwKIAkJCQlJRUVFODAyMTFfU1RBX0FVVE9fQ0hBTk5FTF9TRUw7CiAJCWVsc2UgaWYgKGlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKCh1OCAqKSAmYXBfYWRkci0+c2FfZGF0YSkpCi0JCQlzZGF0YS0+dS5zdGEuZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9BVVRPX0JTU0lEX1NFTDsKKwkJCXNkYXRhLT51Lm1nZC5mbGFncyB8PSBJRUVFODAyMTFfU1RBX0FVVE9fQlNTSURfU0VMOwogCQllbHNlCi0JCQlzZGF0YS0+dS5zdGEuZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfQVVUT19CU1NJRF9TRUw7CisJCQlzZGF0YS0+dS5tZ2QuZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfQVVUT19CU1NJRF9TRUw7CiAJCXJldCA9IGllZWU4MDIxMV9zdGFfc2V0X2Jzc2lkKHNkYXRhLCAodTggKikgJmFwX2FkZHItPnNhX2RhdGEpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKLQkJaWVlZTgwMjExX3N0YV9yZXFfYXV0aChzZGF0YSwgJnNkYXRhLT51LnN0YSk7CisJCWllZWU4MDIxMV9zdGFfcmVxX2F1dGgoc2RhdGEpOwogCQlyZXR1cm4gMDsKKwl9IGVsc2UgaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgeworCQlpZiAoaXNfemVyb19ldGhlcl9hZGRyKCh1OCAqKSAmYXBfYWRkci0+c2FfZGF0YSkpCisJCQlzZGF0YS0+dS5pYnNzLmZsYWdzIHw9IElFRUU4MDIxMV9JQlNTX0FVVE9fQlNTSURfU0VMIHwKKwkJCQkJICAgICAgIElFRUU4MDIxMV9JQlNTX0FVVE9fQ0hBTk5FTF9TRUw7CisJCWVsc2UgaWYgKGlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKCh1OCAqKSAmYXBfYWRkci0+c2FfZGF0YSkpCisJCQlzZGF0YS0+dS5pYnNzLmZsYWdzIHw9IElFRUU4MDIxMV9JQlNTX0FVVE9fQlNTSURfU0VMOworCQllbHNlCisJCQlzZGF0YS0+dS5pYnNzLmZsYWdzICY9IH5JRUVFODAyMTFfSUJTU19BVVRPX0JTU0lEX1NFTDsKKworCQlyZXR1cm4gaWVlZTgwMjExX2lic3Nfc2V0X2Jzc2lkKHNkYXRhLCAodTggKikgJmFwX2FkZHItPnNhX2RhdGEpOwogCX0gZWxzZSBpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1dEUykgewogCQkvKgogCQkgKiBJZiBpdCBpcyBuZWNlc3NhcnkgdG8gdXBkYXRlIHRoZSBXRFMgcGVlciBhZGRyZXNzCkBAIC0zODMsMTcgKzMyNywyMCBAQAogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwogCiAJc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwotCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiB8fAotCSAgICBzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHsKLQkJaWYgKHNkYXRhLT51LnN0YS5zdGF0ZSA9PSBJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFRCB8fAotCQkgICAgc2RhdGEtPnUuc3RhLnN0YXRlID09IElFRUU4MDIxMV9TVEFfTUxNRV9JQlNTX0pPSU5FRCkgeworCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgeworCQlpZiAoc2RhdGEtPnUubWdkLnN0YXRlID09IElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEVEKSB7CiAJCQlhcF9hZGRyLT5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7Ci0JCQltZW1jcHkoJmFwX2FkZHItPnNhX2RhdGEsIHNkYXRhLT51LnN0YS5ic3NpZCwgRVRIX0FMRU4pOwotCQkJcmV0dXJuIDA7Ci0JCX0gZWxzZSB7CisJCQltZW1jcHkoJmFwX2FkZHItPnNhX2RhdGEsIHNkYXRhLT51Lm1nZC5ic3NpZCwgRVRIX0FMRU4pOworCQl9IGVsc2UKIAkJCW1lbXNldCgmYXBfYWRkci0+c2FfZGF0YSwgMCwgRVRIX0FMRU4pOwotCQkJcmV0dXJuIDA7Ci0JCX0KKwkJcmV0dXJuIDA7CisJfSBlbHNlIGlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHsKKwkJaWYgKHNkYXRhLT51Lmlic3Muc3RhdGUgPT0gSUVFRTgwMjExX0lCU1NfTUxNRV9KT0lORUQpIHsKKwkJCWFwX2FkZHItPnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKKwkJCW1lbWNweSgmYXBfYWRkci0+c2FfZGF0YSwgc2RhdGEtPnUuaWJzcy5ic3NpZCwgRVRIX0FMRU4pOworCQl9IGVsc2UKKwkJCW1lbXNldCgmYXBfYWRkci0+c2FfZGF0YSwgMCwgRVRIX0FMRU4pOworCQlyZXR1cm4gMDsKIAl9IGVsc2UgaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9XRFMpIHsKIAkJYXBfYWRkci0+c2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOwogCQltZW1jcHkoJmFwX2FkZHItPnNhX2RhdGEsIHNkYXRhLT51Lndkcy5yZW1vdGVfYWRkciwgRVRIX0FMRU4pOwpAQCAtNDA0LDU4ICszNTEsNiBAQAogfQogCiAKLXN0YXRpYyBpbnQgaWVlZTgwMjExX2lvY3RsX3Npd3NjYW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKLQlzdHJ1Y3QgaXdfc2Nhbl9yZXEgKnJlcSA9IE5VTEw7Ci0JdTggKnNzaWQgPSBOVUxMOwotCXNpemVfdCBzc2lkX2xlbiA9IDA7Ci0KLQlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKLQkJcmV0dXJuIC1FTkVURE9XTjsKLQotCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiAmJgotCSAgICBzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgJiYKLQkgICAgc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQotCS8qIGlmIFNTSUQgd2FzIHNwZWNpZmllZCBleHBsaWNpdGx5IHRoZW4gdXNlIHRoYXQgKi8KLQlpZiAod3JxdS0+ZGF0YS5sZW5ndGggPT0gc2l6ZW9mKHN0cnVjdCBpd19zY2FuX3JlcSkgJiYKLQkgICAgd3JxdS0+ZGF0YS5mbGFncyAmIElXX1NDQU5fVEhJU19FU1NJRCkgewotCQlyZXEgPSAoc3RydWN0IGl3X3NjYW5fcmVxICopZXh0cmE7Ci0JCXNzaWQgPSByZXEtPmVzc2lkOwotCQlzc2lkX2xlbiA9IHJlcS0+ZXNzaWRfbGVuOwotCX0KLQotCXJldHVybiBpZWVlODAyMTFfcmVxdWVzdF9zY2FuKHNkYXRhLCBzc2lkLCBzc2lkX2xlbik7Ci19Ci0KLQotc3RhdGljIGludCBpZWVlODAyMTFfaW9jdGxfZ2l3c2NhbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJICAgc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICpleHRyYSkKLXsKLQlpbnQgcmVzOwotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7Ci0KLQlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7Ci0KLQlpZiAobG9jYWwtPnN3X3NjYW5uaW5nIHx8IGxvY2FsLT5od19zY2FubmluZykKLQkJcmV0dXJuIC1FQUdBSU47Ci0KLQlyZXMgPSBpZWVlODAyMTFfc2Nhbl9yZXN1bHRzKGxvY2FsLCBpbmZvLCBleHRyYSwgZGF0YS0+bGVuZ3RoKTsKLQlpZiAocmVzID49IDApIHsKLQkJZGF0YS0+bGVuZ3RoID0gcmVzOwotCQlyZXR1cm4gMDsKLQl9Ci0JZGF0YS0+bGVuZ3RoID0gMDsKLQlyZXR1cm4gcmVzOwotfQotCi0KIHN0YXRpYyBpbnQgaWVlZTgwMjExX2lvY3RsX3Npd3JhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkJICBzdHJ1Y3QgaXdfcGFyYW0gKnJhdGUsIGNoYXIgKmV4dHJhKQpAQCAtNTExLDcgKzQwNiw3IEBACiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAKLQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIHNkYXRhLT51LnN0YS5ic3NpZCk7CisJc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBzZGF0YS0+dS5tZ2QuYnNzaWQpOwogCiAJaWYgKHN0YSAmJiAhKHN0YS0+bGFzdF90eF9yYXRlLmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX01DUykpCiAJCXJhdGUtPnZhbHVlID0gc2JhbmQtPmJpdHJhdGVzW3N0YS0+bGFzdF90eF9yYXRlLmlkeF0uYml0cmF0ZTsKQEAgLTU0OSwxMCArNDQ0LDkgQEAKIAllbHNlIC8qIEF1dG9tYXRpYyBwb3dlciBsZXZlbCBzZXR0aW5nICovCiAJCW5ld19wb3dlcl9sZXZlbCA9IGNoYW4tPm1heF9wb3dlcjsKIAotCWlmIChsb2NhbC0+aHcuY29uZi5wb3dlcl9sZXZlbCAhPSBuZXdfcG93ZXJfbGV2ZWwpIHsKLQkJbG9jYWwtPmh3LmNvbmYucG93ZXJfbGV2ZWwgPSBuZXdfcG93ZXJfbGV2ZWw7CisJbG9jYWwtPnVzZXJfcG93ZXJfbGV2ZWwgPSBuZXdfcG93ZXJfbGV2ZWw7CisJaWYgKGxvY2FsLT5ody5jb25mLnBvd2VyX2xldmVsICE9IG5ld19wb3dlcl9sZXZlbCkKIAkJcmVjb25mX2ZsYWdzIHw9IElFRUU4MDIxMV9DT05GX0NIQU5HRV9QT1dFUjsKLQl9CiAKIAlpZiAobG9jYWwtPmh3LmNvbmYucmFkaW9fZW5hYmxlZCAhPSAhKGRhdGEtPnR4cG93ZXIuZGlzYWJsZWQpKSB7CiAJCWxvY2FsLT5ody5jb25mLnJhZGlvX2VuYWJsZWQgPSAhKGRhdGEtPnR4cG93ZXIuZGlzYWJsZWQpOwpAQCAtNzEzLDggKzYwNyw3IEBACiAJc3RydWN0IGl3X21sbWUgKm1sbWUgPSAoc3RydWN0IGl3X21sbWUgKikgZXh0cmE7CiAKIAlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7Ci0JaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OICYmCi0JICAgIHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BREhPQykKKwlpZiAoIShzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJc3dpdGNoIChtbG1lLT5jbWQpIHsKQEAgLTgxMCw4ICs3MDMsNyBAQAogCWVycS0+ZmxhZ3MgfD0gSVdfRU5DT0RFX0VOQUJMRUQ7CiAKIAlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHsKLQkJc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhID0gJnNkYXRhLT51LnN0YTsKLQkJc3dpdGNoIChpZnN0YS0+YXV0aF9hbGcpIHsKKwkJc3dpdGNoIChzZGF0YS0+dS5tZ2QuYXV0aF9hbGcpIHsKIAkJY2FzZSBXTEFOX0FVVEhfT1BFTjoKIAkJY2FzZSBXTEFOX0FVVEhfTEVBUDoKIAkJCWVycS0+ZmxhZ3MgfD0gSVdfRU5DT0RFX09QRU47CkBAIC04MzYsNiArNzI4LDkgQEAKIAlpbnQgcmV0ID0gMCwgdGltZW91dCA9IDA7CiAJYm9vbCBwczsKIAorCWlmICghKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TVVBQT1JUU19QUykpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwogCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTg1MiwzMSArNzQ3LDQ5IEBACiAJCXBzID0gdHJ1ZTsKIAkJYnJlYWs7CiAJZGVmYXVsdDogICAgICAgICAgICAgICAgLyogT3RoZXJ3aXNlIHdlIGlnbm9yZSAqLwotCQlicmVhazsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJaWYgKHdycS0+ZmxhZ3MgJiB+KElXX1BPV0VSX01PREUgfCBJV19QT1dFUl9USU1FT1VUKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlpZiAod3JxLT5mbGFncyAmIElXX1BPV0VSX1RJTUVPVVQpCiAJCXRpbWVvdXQgPSB3cnEtPnZhbHVlIC8gMTAwMDsKIAotc2V0OgotCWlmIChwcyA9PSBsb2NhbC0+cG93ZXJzYXZlICYmIHRpbWVvdXQgPT0gbG9jYWwtPmR5bmFtaWNfcHNfdGltZW91dCkKKyBzZXQ6CisJaWYgKHBzID09IGxvY2FsLT5wb3dlcnNhdmUgJiYgdGltZW91dCA9PSBjb25mLT5keW5hbWljX3BzX3RpbWVvdXQpCiAJCXJldHVybiByZXQ7CiAKIAlsb2NhbC0+cG93ZXJzYXZlID0gcHM7Ci0JbG9jYWwtPmR5bmFtaWNfcHNfdGltZW91dCA9IHRpbWVvdXQ7CisJY29uZi0+ZHluYW1pY19wc190aW1lb3V0ID0gdGltZW91dDsKIAotCWlmIChzZGF0YS0+dS5zdGEuZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FTU09DSUFURUQpIHsKLQkJaWYgKCEobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX05PX1NUQUNLX0RZTkFNSUNfUFMpICYmCi0JCSAgICBsb2NhbC0+ZHluYW1pY19wc190aW1lb3V0ID4gMCkKLQkJCW1vZF90aW1lcigmbG9jYWwtPmR5bmFtaWNfcHNfdGltZXIsIGppZmZpZXMgKwotCQkJCSAgbXNlY3NfdG9famlmZmllcyhsb2NhbC0+ZHluYW1pY19wc190aW1lb3V0KSk7Ci0JCWVsc2UgewotCQkJaWYgKGxvY2FsLT5wb3dlcnNhdmUpCi0JCQkJY29uZi0+ZmxhZ3MgfD0gSUVFRTgwMjExX0NPTkZfUFM7Ci0JCQllbHNlCi0JCQkJY29uZi0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9DT05GX1BTOworCWlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfU1VQUE9SVFNfRFlOQU1JQ19QUykKKwkJcmV0ID0gaWVlZTgwMjExX2h3X2NvbmZpZyhsb2NhbCwKKwkJCQkJICBJRUVFODAyMTFfQ09ORl9DSEFOR0VfRFlOUFNfVElNRU9VVCk7CisKKwlpZiAoIShzZGF0YS0+dS5tZ2QuZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FTU09DSUFURUQpKQorCQlyZXR1cm4gcmV0OworCisJaWYgKGNvbmYtPmR5bmFtaWNfcHNfdGltZW91dCA+IDAgJiYKKwkgICAgIShsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfU1VQUE9SVFNfRFlOQU1JQ19QUykpIHsKKwkJbW9kX3RpbWVyKCZsb2NhbC0+ZHluYW1pY19wc190aW1lciwgamlmZmllcyArCisJCQkgIG1zZWNzX3RvX2ppZmZpZXMoY29uZi0+ZHluYW1pY19wc190aW1lb3V0KSk7CisJfSBlbHNlIHsKKwkJaWYgKGxvY2FsLT5wb3dlcnNhdmUpIHsKKwkJCWlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfUFNfTlVMTEZVTkNfU1RBQ0spCisJCQkJaWVlZTgwMjExX3NlbmRfbnVsbGZ1bmMobG9jYWwsIHNkYXRhLCAxKTsKKwkJCWNvbmYtPmZsYWdzIHw9IElFRUU4MDIxMV9DT05GX1BTOworCQkJcmV0ID0gaWVlZTgwMjExX2h3X2NvbmZpZyhsb2NhbCwKKwkJCQkJSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BTKTsKKwkJfSBlbHNlIHsKKwkJCWNvbmYtPmZsYWdzICY9IH5JRUVFODAyMTFfQ09ORl9QUzsKKwkJCXJldCA9IGllZWU4MDIxMV9od19jb25maWcobG9jYWwsCisJCQkJCUlFRUU4MDIxMV9DT05GX0NIQU5HRV9QUyk7CisJCQlpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1BTX05VTExGVU5DX1NUQUNLKQorCQkJCWllZWU4MDIxMV9zZW5kX251bGxmdW5jKGxvY2FsLCBzZGF0YSwgMCk7CisJCQlkZWxfdGltZXJfc3luYygmbG9jYWwtPmR5bmFtaWNfcHNfdGltZXIpOworCQkJY2FuY2VsX3dvcmtfc3luYygmbG9jYWwtPmR5bmFtaWNfcHNfZW5hYmxlX3dvcmspOwogCQl9Ci0JCXJldCA9IGllZWU4MDIxMV9od19jb25maWcobG9jYWwsIElFRUU4MDIxMV9DT05GX0NIQU5HRV9QUyk7CiAJfQogCiAJcmV0dXJuIHJldDsKQEAgLTkwMywxMSArODE2LDIyIEBACiAKIAlzd2l0Y2ggKGRhdGEtPmZsYWdzICYgSVdfQVVUSF9JTkRFWCkgewogCWNhc2UgSVdfQVVUSF9XUEFfVkVSU0lPTjoKLQljYXNlIElXX0FVVEhfQ0lQSEVSX1BBSVJXSVNFOgogCWNhc2UgSVdfQVVUSF9DSVBIRVJfR1JPVVA6CiAJY2FzZSBJV19BVVRIX1dQQV9FTkFCTEVEOgogCWNhc2UgSVdfQVVUSF9SWF9VTkVOQ1JZUFRFRF9FQVBPTDoKIAljYXNlIElXX0FVVEhfS0VZX01HTVQ6CisJY2FzZSBJV19BVVRIX0NJUEhFUl9HUk9VUF9NR01UOgorCQlicmVhazsKKwljYXNlIElXX0FVVEhfQ0lQSEVSX1BBSVJXSVNFOgorCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHsKKwkJCWlmIChkYXRhLT52YWx1ZSAmIChJV19BVVRIX0NJUEhFUl9XRVA0MCB8CisJCQkgICAgSVdfQVVUSF9DSVBIRVJfV0VQMTA0IHwgSVdfQVVUSF9DSVBIRVJfVEtJUCkpCisJCQkJc2RhdGEtPnUubWdkLmZsYWdzIHw9CisJCQkJCUlFRUU4MDIxMV9TVEFfVEtJUF9XRVBfVVNFRDsKKwkJCWVsc2UKKwkJCQlzZGF0YS0+dS5tZ2QuZmxhZ3MgJj0KKwkJCQkJfklFRUU4MDIxMV9TVEFfVEtJUF9XRVBfVVNFRDsKKwkJfQogCQlicmVhazsKIAljYXNlIElXX0FVVEhfRFJPUF9VTkVOQ1JZUFRFRDoKIAkJc2RhdGEtPmRyb3BfdW5lbmNyeXB0ZWQgPSAhIWRhdGEtPnZhbHVlOwpAQCAtOTE2LDI0ICs4NDAsNDUgQEAKIAkJaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQogCQkJcmV0ID0gLUVJTlZBTDsKIAkJZWxzZSB7Ci0JCQlzZGF0YS0+dS5zdGEuZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfUFJJVkFDWV9JTlZPS0VEOworCQkJc2RhdGEtPnUubWdkLmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX1BSSVZBQ1lfSU5WT0tFRDsKIAkJCS8qCiAJCQkgKiBQcml2YWN5IGludm9rZWQgYnkgd3BhX3N1cHBsaWNhbnQsIHN0b3JlIHRoZQogCQkJICogdmFsdWUgYW5kIGFsbG93IGFzc29jaWF0aW5nIHRvIGEgcHJvdGVjdGVkCiAJCQkgKiBuZXR3b3JrIHdpdGhvdXQgaGF2aW5nIGEga2V5IHVwIGZyb250LgogCQkJICovCiAJCQlpZiAoZGF0YS0+dmFsdWUpCi0JCQkJc2RhdGEtPnUuc3RhLmZsYWdzIHw9CisJCQkJc2RhdGEtPnUubWdkLmZsYWdzIHw9CiAJCQkJCUlFRUU4MDIxMV9TVEFfUFJJVkFDWV9JTlZPS0VEOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgSVdfQVVUSF84MDIxMV9BVVRIX0FMRzoKLQkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OIHx8Ci0JCSAgICBzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCi0JCQlzZGF0YS0+dS5zdGEuYXV0aF9hbGdzID0gZGF0YS0+dmFsdWU7CisJCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKKwkJCXNkYXRhLT51Lm1nZC5hdXRoX2FsZ3MgPSBkYXRhLT52YWx1ZTsKIAkJZWxzZQogCQkJcmV0ID0gLUVPUE5PVFNVUFA7CiAJCWJyZWFrOworCWNhc2UgSVdfQVVUSF9NRlA6CisJCWlmICghKHNkYXRhLT5sb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfTUZQX0NBUEFCTEUpKSB7CisJCQlyZXQgPSAtRU9QTk9UU1VQUDsKKwkJCWJyZWFrOworCQl9CisJCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgeworCQkJc3dpdGNoIChkYXRhLT52YWx1ZSkgeworCQkJY2FzZSBJV19BVVRIX01GUF9ESVNBQkxFRDoKKwkJCQlzZGF0YS0+dS5tZ2QubWZwID0gSUVFRTgwMjExX01GUF9ESVNBQkxFRDsKKwkJCQlicmVhazsKKwkJCWNhc2UgSVdfQVVUSF9NRlBfT1BUSU9OQUw6CisJCQkJc2RhdGEtPnUubWdkLm1mcCA9IElFRUU4MDIxMV9NRlBfT1BUSU9OQUw7CisJCQkJYnJlYWs7CisJCQljYXNlIElXX0FVVEhfTUZQX1JFUVVJUkVEOgorCQkJCXNkYXRhLT51Lm1nZC5tZnAgPSBJRUVFODAyMTFfTUZQX1JFUVVJUkVEOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlyZXQgPSAtRUlOVkFMOworCQkJfQorCQl9IGVsc2UKKwkJCXJldCA9IC1FT1BOT1RTVVBQOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXQgPSAtRU9QTk9UU1VQUDsKIAkJYnJlYWs7CkBAIC05NTEsOSArODk2LDkgQEAKIAogCXJjdV9yZWFkX2xvY2soKTsKIAotCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiB8fAotCSAgICBzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCi0JCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgc2RhdGEtPnUuc3RhLmJzc2lkKTsKKwlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCisJCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgc2RhdGEtPnUubWdkLmJzc2lkKTsKKwogCWlmICghc3RhKSB7CiAJCXdzdGF0cy0+ZGlzY2FyZC5mcmFnbWVudCA9IDA7CiAJCXdzdGF0cy0+ZGlzY2FyZC5taXNjID0gMDsKQEAgLTk2MiwxMCArOTA3LDQ1IEBACiAJCXdzdGF0cy0+cXVhbC5ub2lzZSA9IDA7CiAJCXdzdGF0cy0+cXVhbC51cGRhdGVkID0gSVdfUVVBTF9BTExfSU5WQUxJRDsKIAl9IGVsc2UgewotCQl3c3RhdHMtPnF1YWwubGV2ZWwgPSBzdGEtPmxhc3Rfc2lnbmFsOwotCQl3c3RhdHMtPnF1YWwucXVhbCA9IHN0YS0+bGFzdF9xdWFsOwotCQl3c3RhdHMtPnF1YWwubm9pc2UgPSBzdGEtPmxhc3Rfbm9pc2U7Ci0JCXdzdGF0cy0+cXVhbC51cGRhdGVkID0gbG9jYWwtPndzdGF0c19mbGFnczsKKwkJd3N0YXRzLT5xdWFsLnVwZGF0ZWQgPSAwOworCQkvKgorCQkgKiBtaXJyb3Igd2hhdCBjZmc4MDIxMSBkb2VzIGZvciBpd3JhbmdlL3NjYW4gcmVzdWx0cywKKwkJICogb3RoZXJ3aXNlIHVzZXJzcGFjZSBnZXRzIGNvbmZ1c2VkLgorCQkgKi8KKwkJaWYgKGxvY2FsLT5ody5mbGFncyAmIChJRUVFODAyMTFfSFdfU0lHTkFMX1VOU1BFQyB8CisJCQkJICAgICAgIElFRUU4MDIxMV9IV19TSUdOQUxfREJNKSkgeworCQkJd3N0YXRzLT5xdWFsLnVwZGF0ZWQgfD0gSVdfUVVBTF9MRVZFTF9VUERBVEVEOworCQkJd3N0YXRzLT5xdWFsLnVwZGF0ZWQgfD0gSVdfUVVBTF9RVUFMX1VQREFURUQ7CisJCX0gZWxzZSB7CisJCQl3c3RhdHMtPnF1YWwudXBkYXRlZCB8PSBJV19RVUFMX0xFVkVMX0lOVkFMSUQ7CisJCQl3c3RhdHMtPnF1YWwudXBkYXRlZCB8PSBJV19RVUFMX1FVQUxfSU5WQUxJRDsKKwkJfQorCisJCWlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfU0lHTkFMX1VOU1BFQykgeworCQkJd3N0YXRzLT5xdWFsLmxldmVsID0gc3RhLT5sYXN0X3NpZ25hbDsKKwkJCXdzdGF0cy0+cXVhbC5xdWFsID0gc3RhLT5sYXN0X3NpZ25hbDsKKwkJfSBlbHNlIGlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfU0lHTkFMX0RCTSkgeworCQkJaW50IHNpZyA9IHN0YS0+bGFzdF9zaWduYWw7CisKKwkJCXdzdGF0cy0+cXVhbC51cGRhdGVkIHw9IElXX1FVQUxfREJNOworCQkJd3N0YXRzLT5xdWFsLmxldmVsID0gc2lnOworCQkJaWYgKHNpZyA8IC0xMTApCisJCQkJc2lnID0gLTExMDsKKwkJCWVsc2UgaWYgKHNpZyA+IC00MCkKKwkJCQlzaWcgPSAtNDA7CisJCQl3c3RhdHMtPnF1YWwucXVhbCA9IHNpZyArIDExMDsKKwkJfQorCisJCWlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfTk9JU0VfREJNKSB7CisJCQkvKgorCQkJICogVGhpcyBhc3N1bWVzIHRoYXQgaWYgZHJpdmVyIHJlcG9ydHMgbm9pc2UsIGl0IGFsc28KKwkJCSAqIHJlcG9ydHMgc2lnbmFsIGluIGRCbS4KKwkJCSAqLworCQkJd3N0YXRzLT5xdWFsLm5vaXNlID0gc3RhLT5sYXN0X25vaXNlOworCQkJd3N0YXRzLT5xdWFsLnVwZGF0ZWQgfD0gSVdfUVVBTF9OT0lTRV9VUERBVEVEOworCQl9IGVsc2UgeworCQkJd3N0YXRzLT5xdWFsLnVwZGF0ZWQgfD0gSVdfUVVBTF9OT0lTRV9JTlZBTElEOworCQl9CiAJfQogCiAJcmN1X3JlYWRfdW5sb2NrKCk7CkBAIC05ODIsOSArOTYyLDggQEAKIAogCXN3aXRjaCAoZGF0YS0+ZmxhZ3MgJiBJV19BVVRIX0lOREVYKSB7CiAJY2FzZSBJV19BVVRIXzgwMjExX0FVVEhfQUxHOgotCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gfHwKLQkJICAgIHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykKLQkJCWRhdGEtPnZhbHVlID0gc2RhdGEtPnUuc3RhLmF1dGhfYWxnczsKKwkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQorCQkJZGF0YS0+dmFsdWUgPSBzZGF0YS0+dS5tZ2QuYXV0aF9hbGdzOwogCQllbHNlCiAJCQlyZXQgPSAtRU9QTk9UU1VQUDsKIAkJYnJlYWs7CkBAIC0xMDE3LDYgKzk5Niw5IEBACiAJY2FzZSBJV19FTkNPREVfQUxHX0NDTVA6CiAJCWFsZyA9IEFMR19DQ01QOwogCQlicmVhazsKKwljYXNlIElXX0VOQ09ERV9BTEdfQUVTX0NNQUM6CisJCWFsZyA9IEFMR19BRVNfQ01BQzsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCX0KQEAgLTEwMjUsMjAgKzEwMDcsNDEgQEAKIAkJcmVtb3ZlID0gMTsKIAogCWlkeCA9IGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfSU5ERVg7Ci0JaWYgKGlkeCA8IDEgfHwgaWR4ID4gNCkgewotCQlpZHggPSAtMTsKLQkJaWYgKCFzZGF0YS0+ZGVmYXVsdF9rZXkpCi0JCQlpZHggPSAwOwotCQllbHNlIGZvciAoaSA9IDA7IGkgPCBOVU1fREVGQVVMVF9LRVlTOyBpKyspIHsKLQkJCWlmIChzZGF0YS0+ZGVmYXVsdF9rZXkgPT0gc2RhdGEtPmtleXNbaV0pIHsKLQkJCQlpZHggPSBpOwotCQkJCWJyZWFrOworCWlmIChhbGcgPT0gQUxHX0FFU19DTUFDKSB7CisJCWlmIChpZHggPCBOVU1fREVGQVVMVF9LRVlTICsgMSB8fAorCQkgICAgaWR4ID4gTlVNX0RFRkFVTFRfS0VZUyArIE5VTV9ERUZBVUxUX01HTVRfS0VZUykgeworCQkJaWR4ID0gLTE7CisJCQlpZiAoIXNkYXRhLT5kZWZhdWx0X21nbXRfa2V5KQorCQkJCWlkeCA9IDA7CisJCQllbHNlIGZvciAoaSA9IE5VTV9ERUZBVUxUX0tFWVM7CisJCQkJICBpIDwgTlVNX0RFRkFVTFRfS0VZUyArIE5VTV9ERUZBVUxUX01HTVRfS0VZUzsKKwkJCQkgIGkrKykgeworCQkJCWlmIChzZGF0YS0+ZGVmYXVsdF9tZ210X2tleSA9PSBzZGF0YS0+a2V5c1tpXSkKKwkJCQl7CisJCQkJCWlkeCA9IGk7CisJCQkJCWJyZWFrOworCQkJCX0KIAkJCX0KLQkJfQotCQlpZiAoaWR4IDwgMCkKLQkJCXJldHVybiAtRUlOVkFMOwotCX0gZWxzZQotCQlpZHgtLTsKKwkJCWlmIChpZHggPCAwKQorCQkJCXJldHVybiAtRUlOVkFMOworCQl9IGVsc2UKKwkJCWlkeC0tOworCX0gZWxzZSB7CisJCWlmIChpZHggPCAxIHx8IGlkeCA+IDQpIHsKKwkJCWlkeCA9IC0xOworCQkJaWYgKCFzZGF0YS0+ZGVmYXVsdF9rZXkpCisJCQkJaWR4ID0gMDsKKwkJCWVsc2UgZm9yIChpID0gMDsgaSA8IE5VTV9ERUZBVUxUX0tFWVM7IGkrKykgeworCQkJCWlmIChzZGF0YS0+ZGVmYXVsdF9rZXkgPT0gc2RhdGEtPmtleXNbaV0pIHsKKwkJCQkJaWR4ID0gaTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJaWYgKGlkeCA8IDApCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0gZWxzZQorCQkJaWR4LS07CisJfQogCiAJcmV0dXJuIGllZWU4MDIxMV9zZXRfZW5jcnlwdGlvbihzZGF0YSwgZXh0LT5hZGRyLnNhX2RhdGEsIGlkeCwgYWxnLAogCQkJCQlyZW1vdmUsCkBAIC0xMDYzLDcgKzEwNjYsNyBAQAogCShpd19oYW5kbGVyKSBOVUxMLAkJCQkvKiBTSU9DU0lXU0VOUyAqLwogCShpd19oYW5kbGVyKSBOVUxMLAkJCQkvKiBTSU9DR0lXU0VOUyAqLwogCShpd19oYW5kbGVyKSBOVUxMIC8qIG5vdCB1c2VkICovLAkJLyogU0lPQ1NJV1JBTkdFICovCi0JKGl3X2hhbmRsZXIpIGllZWU4MDIxMV9pb2N0bF9naXdyYW5nZSwJCS8qIFNJT0NHSVdSQU5HRSAqLworCShpd19oYW5kbGVyKSBjZmc4MDIxMV93ZXh0X2dpd3JhbmdlLAkJLyogU0lPQ0dJV1JBTkdFICovCiAJKGl3X2hhbmRsZXIpIE5VTEwgLyogbm90IHVzZWQgKi8sCQkvKiBTSU9DU0lXUFJJViAqLwogCShpd19oYW5kbGVyKSBOVUxMIC8qIGtlcm5lbCBjb2RlICovLAkJLyogU0lPQ0dJV1BSSVYgKi8KIAkoaXdfaGFuZGxlcikgTlVMTCAvKiBub3QgdXNlZCAqLywJCS8qIFNJT0NTSVdTVEFUUyAqLwpAQCAtMTA3Niw4ICsxMDc5LDggQEAKIAkoaXdfaGFuZGxlcikgaWVlZTgwMjExX2lvY3RsX2dpd2FwLAkJLyogU0lPQ0dJV0FQICovCiAJKGl3X2hhbmRsZXIpIGllZWU4MDIxMV9pb2N0bF9zaXdtbG1lLAkJLyogU0lPQ1NJV01MTUUgKi8KIAkoaXdfaGFuZGxlcikgTlVMTCwJCQkJLyogU0lPQ0dJV0FQTElTVCAqLwotCShpd19oYW5kbGVyKSBpZWVlODAyMTFfaW9jdGxfc2l3c2NhbiwJCS8qIFNJT0NTSVdTQ0FOICovCi0JKGl3X2hhbmRsZXIpIGllZWU4MDIxMV9pb2N0bF9naXdzY2FuLAkJLyogU0lPQ0dJV1NDQU4gKi8KKwkoaXdfaGFuZGxlcikgY2ZnODAyMTFfd2V4dF9zaXdzY2FuLAkJLyogU0lPQ1NJV1NDQU4gKi8KKwkoaXdfaGFuZGxlcikgY2ZnODAyMTFfd2V4dF9naXdzY2FuLAkJLyogU0lPQ0dJV1NDQU4gKi8KIAkoaXdfaGFuZGxlcikgaWVlZTgwMjExX2lvY3RsX3Npd2Vzc2lkLAkJLyogU0lPQ1NJV0VTU0lEICovCiAJKGl3X2hhbmRsZXIpIGllZWU4MDIxMV9pb2N0bF9naXdlc3NpZCwJCS8qIFNJT0NHSVdFU1NJRCAqLwogCShpd19oYW5kbGVyKSBOVUxMLAkJCQkvKiBTSU9DU0lXTklDS04gKi8KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS93bWUuYyBiL25ldC9tYWM4MDIxMS93bWUuYwppbmRleCBhYzcxYjM4Li4wYjhhZDFmNCAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3dtZS5jCisrKyBiL25ldC9tYWM4MDIxMS93bWUuYwpAQCAtOTksMTAgKzk5LDEzIEBACiAJLyogaW4gY2FzZSB3ZSBhcmUgYSBjbGllbnQgdmVyaWZ5IGFjbSBpcyBub3Qgc2V0IGZvciB0aGlzIGFjICovCiAJd2hpbGUgKHVubGlrZWx5KGxvY2FsLT53bW1fYWNtICYgQklUKHNrYi0+cHJpb3JpdHkpKSkgewogCQlpZiAod21lX2Rvd25ncmFkZV9hYyhza2IpKSB7Ci0JCQkvKiBUaGUgb2xkIGNvZGUgd291bGQgZHJvcCB0aGUgcGFja2V0IGluIHRoaXMKLQkJCSAqIGNhc2UuCisJCQkvKgorCQkJICogVGhpcyBzaG91bGQgbm90IHJlYWxseSBoYXBwZW4uIFRoZSBBUCBoYXMgbWFya2VkIGFsbAorCQkJICogbG93ZXIgQUNzIHRvIHJlcXVpcmUgYWRtaXNzaW9uIGNvbnRyb2wgd2hpY2ggaXMgbm90CisJCQkgKiBhIHJlYXNvbmFibGUgY29uZmlndXJhdGlvbi4gQWxsb3cgdGhlIGZyYW1lIHRvIGJlCisJCQkgKiB0cmFuc21pdHRlZCB1c2luZyBBQ19CSyBhcyBhIHdvcmthcm91bmQuCiAJCQkgKi8KLQkJCXJldHVybiAwOworCQkJYnJlYWs7CiAJCX0KIAl9CiAKQEAgLTExNCw5ICsxMTcsNyBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfbWFzdGVyX3ByaXYgKm1wcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IG1wcml2LT5sb2NhbDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9ICZsb2NhbC0+aHc7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7Ci0Jc3RydWN0IHN0YV9pbmZvICpzdGE7CiAJdTE2IHF1ZXVlOwogCXU4IHRpZDsKIApAQCAtMTI0LDI5ICsxMjUsMTEgQEAKIAlpZiAodW5saWtlbHkocXVldWUgPj0gbG9jYWwtPmh3LnF1ZXVlcykpCiAJCXF1ZXVlID0gbG9jYWwtPmh3LnF1ZXVlcyAtIDE7CiAKLQlpZiAoc2tiLT5yZXF1ZXVlKSB7Ci0JCWlmICghaHctPmFtcGR1X3F1ZXVlcykKLQkJCXJldHVybiBxdWV1ZTsKLQotCQlyY3VfcmVhZF9sb2NrKCk7Ci0JCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgaGRyLT5hZGRyMSk7Ci0JCXRpZCA9IHNrYi0+cHJpb3JpdHkgJiBJRUVFODAyMTFfUU9TX0NUTF9UQUcxRF9NQVNLOwotCQlpZiAoc3RhKSB7Ci0JCQlpbnQgYW1wZHVfcXVldWUgPSBzdGEtPnRpZF90b190eF9xW3RpZF07Ci0KLQkJCWlmICgoYW1wZHVfcXVldWUgPCBpZWVlODAyMTFfbnVtX3F1ZXVlcyhodykpICYmCi0JCQkgICAgdGVzdF9iaXQoYW1wZHVfcXVldWUsIGxvY2FsLT5xdWV1ZV9wb29sKSkKLQkJCQlxdWV1ZSA9IGFtcGR1X3F1ZXVlOwotCQl9Ci0JCXJjdV9yZWFkX3VubG9jaygpOwotCi0JCXJldHVybiBxdWV1ZTsKLQl9Ci0KLQkvKiBOb3cgd2Uga25vdyB0aGUgMWQgcHJpb3JpdHksIGZpbGwgaW4gdGhlIFFvUyBoZWFkZXIgaWYKLQkgKiB0aGVyZSBpcyBvbmUuCisJLyoKKwkgKiBOb3cgd2Uga25vdyB0aGUgMWQgcHJpb3JpdHksIGZpbGwgaW4gdGhlIFFvUyBoZWFkZXIgaWYKKwkgKiB0aGVyZSBpcyBvbmUgKGFuZCB3ZSBoYXZlbid0IGRvbmUgdGhpcyBiZWZvcmUpLgogCSAqLwotCWlmIChpZWVlODAyMTFfaXNfZGF0YV9xb3MoaGRyLT5mcmFtZV9jb250cm9sKSkgeworCWlmICghc2tiLT5yZXF1ZXVlICYmIGllZWU4MDIxMV9pc19kYXRhX3FvcyhoZHItPmZyYW1lX2NvbnRyb2wpKSB7CiAJCXU4ICpwID0gaWVlZTgwMjExX2dldF9xb3NfY3RsKGhkcik7CiAJCXU4IGFja19wb2xpY3kgPSAwOwogCQl0aWQgPSBza2ItPnByaW9yaXR5ICYgSUVFRTgwMjExX1FPU19DVExfVEFHMURfTUFTSzsKQEAgLTE1NiwxNDAgKzEzOSw3IEBACiAJCS8qIHFvcyBoZWFkZXIgaXMgMiBieXRlcywgc2Vjb25kIHJlc2VydmVkICovCiAJCSpwKysgPSBhY2tfcG9saWN5IHwgdGlkOwogCQkqcCA9IDA7Ci0KLQkJaWYgKCFody0+YW1wZHVfcXVldWVzKQotCQkJcmV0dXJuIHF1ZXVlOwotCi0JCXJjdV9yZWFkX2xvY2soKTsKLQotCQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIGhkci0+YWRkcjEpOwotCQlpZiAoc3RhKSB7Ci0JCQlpbnQgYW1wZHVfcXVldWUgPSBzdGEtPnRpZF90b190eF9xW3RpZF07Ci0KLQkJCWlmICgoYW1wZHVfcXVldWUgPCBpZWVlODAyMTFfbnVtX3F1ZXVlcyhodykpICYmCi0JCQkgICAgdGVzdF9iaXQoYW1wZHVfcXVldWUsIGxvY2FsLT5xdWV1ZV9wb29sKSkKLQkJCQlxdWV1ZSA9IGFtcGR1X3F1ZXVlOwotCQl9Ci0KLQkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJfQogCiAJcmV0dXJuIHF1ZXVlOwogfQotCi1pbnQgaWVlZTgwMjExX2h0X2FnZ19xdWV1ZV9hZGQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCi0JCQkgICAgICAgc3RydWN0IHN0YV9pbmZvICpzdGEsIHUxNiB0aWQpCi17Ci0JaW50IGk7Ci0KLQkvKiBYWFg6IGN1cnJlbnRseSBicm9rZW4gZHVlIHRvIGNiL3JlcXVldWUgdXNlICovCi0JcmV0dXJuIC1FUEVSTTsKLQotCS8qIHByZXBhcmUgdGhlIGZpbHRlciBhbmQgc2F2ZSBpdCBmb3IgdGhlIFNXIHF1ZXVlCi0JICogbWF0Y2hpbmcgdGhlIHJlY2VpdmVkIEhXIHF1ZXVlICovCi0KLQlpZiAoIWxvY2FsLT5ody5hbXBkdV9xdWV1ZXMpCi0JCXJldHVybiAtRVBFUk07Ci0KLQkvKiB0cnkgdG8gZ2V0IGEgUWRpc2MgZnJvbSB0aGUgcG9vbCAqLwotCWZvciAoaSA9IGxvY2FsLT5ody5xdWV1ZXM7IGkgPCBpZWVlODAyMTFfbnVtX3F1ZXVlcygmbG9jYWwtPmh3KTsgaSsrKQotCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoaSwgbG9jYWwtPnF1ZXVlX3Bvb2wpKSB7Ci0JCQlpZWVlODAyMTFfc3RvcF9xdWV1ZShsb2NhbF90b19odyhsb2NhbCksIGkpOwotCQkJc3RhLT50aWRfdG9fdHhfcVt0aWRdID0gaTsKLQotCQkJLyogSUYgdGhlcmUgYXJlIGFscmVhZHkgcGVuZGluZyBwYWNrZXRzCi0JCQkgKiBvbiB0aGlzIHRpZCBmaXJzdCB3ZSBuZWVkIHRvIGRyYWluIHRoZW0KLQkJCSAqIG9uIHRoZSBwcmV2aW91cyBxdWV1ZQotCQkJICogc2luY2UgSFQgaXMgc3RyaWN0IGluIG9yZGVyICovCi0jaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCi0JCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJCXByaW50ayhLRVJOX0RFQlVHICJhbGxvY2F0ZWQgYWdncmVnYXRpb24gcXVldWUiCi0JCQkJCSIgJWQgdGlkICVkIGFkZHIgJXBNIHBvb2w9MHglbFhcbiIsCi0JCQkJCWksIHRpZCwgc3RhLT5zdGEuYWRkciwKLQkJCQkJbG9jYWwtPnF1ZXVlX3Bvb2xbMF0pOwotI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRyAqLwotCQkJcmV0dXJuIDA7Ci0JCX0KLQotCXJldHVybiAtRUFHQUlOOwotfQotCi0vKioKLSAqIHRoZSBjYWxsZXIgbmVlZHMgdG8gaG9sZCBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGxvY2FsLT5tZGV2LCBYKS0+bG9jawotICovCi12b2lkIGllZWU4MDIxMV9odF9hZ2dfcXVldWVfcmVtb3ZlKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAotCQkJCSAgIHN0cnVjdCBzdGFfaW5mbyAqc3RhLCB1MTYgdGlkLAotCQkJCSAgIHU4IHJlcXVldWUpCi17Ci0JaW50IGFnZ19xdWV1ZSA9IHN0YS0+dGlkX3RvX3R4X3FbdGlkXTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9ICZsb2NhbC0+aHc7Ci0KLQkvKiByZXR1cm4gdGhlIHFkaXNjIHRvIHRoZSBwb29sICovCi0JY2xlYXJfYml0KGFnZ19xdWV1ZSwgbG9jYWwtPnF1ZXVlX3Bvb2wpOwotCXN0YS0+dGlkX3RvX3R4X3FbdGlkXSA9IGllZWU4MDIxMV9udW1fcXVldWVzKGh3KTsKLQotCWlmIChyZXF1ZXVlKSB7Ci0JCWllZWU4MDIxMV9yZXF1ZXVlKGxvY2FsLCBhZ2dfcXVldWUpOwotCX0gZWxzZSB7Ci0JCXN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cTsKLQkJc3BpbmxvY2tfdCAqcm9vdF9sb2NrOwotCQlzdHJ1Y3QgUWRpc2MgKnE7Ci0KLQkJdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShsb2NhbC0+bWRldiwgYWdnX3F1ZXVlKTsKLQkJcSA9IHJjdV9kZXJlZmVyZW5jZSh0eHEtPnFkaXNjKTsKLQkJcm9vdF9sb2NrID0gcWRpc2NfbG9jayhxKTsKLQotCQlzcGluX2xvY2tfYmgocm9vdF9sb2NrKTsKLQkJcWRpc2NfcmVzZXQocSk7Ci0JCXNwaW5fdW5sb2NrX2JoKHJvb3RfbG9jayk7Ci0JfQotfQotCi12b2lkIGllZWU4MDIxMV9yZXF1ZXVlKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCBpbnQgcXVldWUpCi17Ci0Jc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShsb2NhbC0+bWRldiwgcXVldWUpOwotCXN0cnVjdCBza19idWZmX2hlYWQgbGlzdDsKLQlzcGlubG9ja190ICpyb290X2xvY2s7Ci0Jc3RydWN0IFFkaXNjICpxZGlzYzsKLQl1MzIgbGVuOwotCi0JcmN1X3JlYWRfbG9ja19iaCgpOwotCi0JcWRpc2MgPSByY3VfZGVyZWZlcmVuY2UodHhxLT5xZGlzYyk7Ci0JaWYgKCFxZGlzYyB8fCAhcWRpc2MtPmRlcXVldWUpCi0JCWdvdG8gb3V0X3VubG9jazsKLQotCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmxpc3QpOwotCi0Jcm9vdF9sb2NrID0gcWRpc2Nfcm9vdF9sb2NrKHFkaXNjKTsKLQlzcGluX2xvY2socm9vdF9sb2NrKTsKLQlmb3IgKGxlbiA9IHFkaXNjLT5xLnFsZW47IGxlbiA+IDA7IGxlbi0tKSB7Ci0JCXN0cnVjdCBza19idWZmICpza2IgPSBxZGlzYy0+ZGVxdWV1ZShxZGlzYyk7Ci0KLQkJaWYgKHNrYikKLQkJCV9fc2tiX3F1ZXVlX3RhaWwoJmxpc3QsIHNrYik7Ci0JfQotCXNwaW5fdW5sb2NrKHJvb3RfbG9jayk7Ci0KLQlmb3IgKGxlbiA9IGxpc3QucWxlbjsgbGVuID4gMDsgbGVuLS0pIHsKLQkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IF9fc2tiX2RlcXVldWUoJmxpc3QpOwotCQl1MTYgbmV3X3F1ZXVlOwotCi0JCUJVR19PTighc2tiKTsKLQkJbmV3X3F1ZXVlID0gaWVlZTgwMjExX3NlbGVjdF9xdWV1ZShsb2NhbC0+bWRldiwgc2tiKTsKLQkJc2tiX3NldF9xdWV1ZV9tYXBwaW5nKHNrYiwgbmV3X3F1ZXVlKTsKLQotCQl0eHEgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGxvY2FsLT5tZGV2LCBuZXdfcXVldWUpOwotCi0KLQkJcWRpc2MgPSByY3VfZGVyZWZlcmVuY2UodHhxLT5xZGlzYyk7Ci0JCXJvb3RfbG9jayA9IHFkaXNjX3Jvb3RfbG9jayhxZGlzYyk7Ci0KLQkJc3Bpbl9sb2NrKHJvb3RfbG9jayk7Ci0JCXFkaXNjX2VucXVldWVfcm9vdChza2IsIHFkaXNjKTsKLQkJc3Bpbl91bmxvY2socm9vdF9sb2NrKTsKLQl9Ci0KLW91dF91bmxvY2s6Ci0JcmN1X3JlYWRfdW5sb2NrX2JoKCk7Ci19CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvd21lLmggYi9uZXQvbWFjODAyMTEvd21lLmgKaW5kZXggYmM2MmYyOC4uNzUyMGQyZSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3dtZS5oCisrKyBiL25ldC9tYWM4MDIxMS93bWUuaApAQCAtMjEsMTEgKzIxLDUgQEAKIGV4dGVybiBjb25zdCBpbnQgaWVlZTgwMl8xZF90b19hY1s4XTsKIAogdTE2IGllZWU4MDIxMV9zZWxlY3RfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci1pbnQgaWVlZTgwMjExX2h0X2FnZ19xdWV1ZV9hZGQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCi0JCQkgICAgICAgc3RydWN0IHN0YV9pbmZvICpzdGEsIHUxNiB0aWQpOwotdm9pZCBpZWVlODAyMTFfaHRfYWdnX3F1ZXVlX3JlbW92ZShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKLQkJCQkgICBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgdTE2IHRpZCwKLQkJCQkgICB1OCByZXF1ZXVlKTsKLXZvaWQgaWVlZTgwMjExX3JlcXVldWUoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIGludCBxdWV1ZSk7CiAKICNlbmRpZiAvKiBfV01FX0ggKi8KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS93cGEuYyBiL25ldC9tYWM4MDIxMS93cGEuYwppbmRleCA3YWE2M2NhLi45MTAxYjQ4IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvd3BhLmMKKysrIGIvbmV0L21hYzgwMjExL3dwYS5jCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAyMDAyLTIwMDQsIEluc3RhbnQ4MDIgTmV0d29ya3MsIEluYy4KKyAqIENvcHlyaWdodCAyMDA4LCBKb3VuaSBNYWxpbmVuIDxqQHcxLmZpPgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwpAQCAtMTksNiArMjAsNyBAQAogI2luY2x1ZGUgIm1pY2hhZWwuaCIKICNpbmNsdWRlICJ0a2lwLmgiCiAjaW5jbHVkZSAiYWVzX2NjbS5oIgorI2luY2x1ZGUgImFlc19jbWFjLmgiCiAjaW5jbHVkZSAid3BhLmgiCiAKIGllZWU4MDIxMV90eF9yZXN1bHQKQEAgLTI2Niw3ICsyNjgsNyBAQAogCQkJCWludCBlbmNyeXB0ZWQpCiB7CiAJX19sZTE2IG1hc2tfZmM7Ci0JaW50IGE0X2luY2x1ZGVkOworCWludCBhNF9pbmNsdWRlZCwgbWdtdDsKIAl1OCBxb3NfdGlkOwogCXU4ICpiXzAsICphYWQ7CiAJdTE2IGRhdGFfbGVuLCBsZW5fYTsKQEAgLTI3NywxMiArMjc5LDE1IEBACiAJYWFkID0gc2NyYXRjaCArIDQgKiBBRVNfQkxPQ0tfTEVOOwogCiAJLyoKLQkgKiBNYXNrIEZDOiB6ZXJvIHN1YnR5cGUgYjQgYjUgYjYKKwkgKiBNYXNrIEZDOiB6ZXJvIHN1YnR5cGUgYjQgYjUgYjYgKGlmIG5vdCBtZ210KQogCSAqIFJldHJ5LCBQd3JNZ3QsIE1vcmVEYXRhOyBzZXQgUHJvdGVjdGVkCiAJICovCisJbWdtdCA9IGllZWU4MDIxMV9pc19tZ210KGhkci0+ZnJhbWVfY29udHJvbCk7CiAJbWFza19mYyA9IGhkci0+ZnJhbWVfY29udHJvbDsKLQltYXNrX2ZjICY9IH5jcHVfdG9fbGUxNigweDAwNzAgfCBJRUVFODAyMTFfRkNUTF9SRVRSWSB8CisJbWFza19mYyAmPSB+Y3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfUkVUUlkgfAogCQkJCUlFRUU4MDIxMV9GQ1RMX1BNIHwgSUVFRTgwMjExX0ZDVExfTU9SRURBVEEpOworCWlmICghbWdtdCkKKwkJbWFza19mYyAmPSB+Y3B1X3RvX2xlMTYoMHgwMDcwKTsKIAltYXNrX2ZjIHw9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX1BST1RFQ1RFRCk7CiAKIAloZHJsZW4gPSBpZWVlODAyMTFfaGRybGVuKGhkci0+ZnJhbWVfY29udHJvbCk7CkBAIC0zMDAsOCArMzA1LDEwIEBACiAKIAkvKiBGaXJzdCBibG9jaywgYl8wICovCiAJYl8wWzBdID0gMHg1OTsgLyogZmxhZ3M6IEFkYXRhOiAxLCBNOiAwMTEsIEw6IDAwMSAqLwotCS8qIE5vbmNlOiBRb1MgUHJpb3JpdHkgfCBBMiB8IFBOICovCi0JYl8wWzFdID0gcW9zX3RpZDsKKwkvKiBOb25jZTogTm9uY2UgRmxhZ3MgfCBBMiB8IFBOCisJICogTm9uY2UgRmxhZ3M6IFByaW9yaXR5IChiMC4uYjMpIHwgTWFuYWdlbWVudCAoYjQpIHwgUmVzZXJ2ZWQgKGI1Li5iNykKKwkgKi8KKwliXzBbMV0gPSBxb3NfdGlkIHwgKG1nbXQgPDwgNCk7CiAJbWVtY3B5KCZiXzBbMl0sIGhkci0+YWRkcjIsIEVUSF9BTEVOKTsKIAltZW1jcHkoJmJfMFs4XSwgcG4sIENDTVBfUE5fTEVOKTsKIAkvKiBsKG0pICovCkBAIC0zNjAsOSArMzY3LDE0IEBACiAJaW50IGhkcmxlbiwgbGVuLCB0YWlsOwogCXU4ICpwb3MsICpwbjsKIAlpbnQgaTsKKwlib29sIHNraXBfaHc7CisKKwlza2lwX2h3ID0gKHR4LT5rZXktPmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfS0VZX0ZMQUdfU1dfTUdNVCkgJiYKKwkJaWVlZTgwMjExX2lzX21nbXQoaGRyLT5mcmFtZV9jb250cm9sKTsKIAogCWlmICgodHgtPmtleS0+ZmxhZ3MgJiBLRVlfRkxBR19VUExPQURFRF9UT19IQVJEV0FSRSkgJiYKLQkgICAgISh0eC0+a2V5LT5jb25mLmZsYWdzICYgSUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX0lWKSkgeworCSAgICAhKHR4LT5rZXktPmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfS0VZX0ZMQUdfR0VORVJBVEVfSVYpICYmCisJICAgICFza2lwX2h3KSB7CiAJCS8qIGh3YWNjZWwgLSB3aXRoIG5vIG5lZWQgZm9yIHByZWFsbG9jYXRlZCByb29tIGZvciBDQ01QCiAJCSAqIGhlYWRlciBvciBNSUMgZmllbGRzICovCiAJCWluZm8tPmNvbnRyb2wuaHdfa2V5ID0gJnR4LT5rZXktPmNvbmY7CkBAIC0zOTcsNyArNDA5LDcgQEAKIAogCWNjbXBfcG4yaGRyKHBvcywgcG4sIGtleS0+Y29uZi5rZXlpZHgpOwogCi0JaWYgKGtleS0+ZmxhZ3MgJiBLRVlfRkxBR19VUExPQURFRF9UT19IQVJEV0FSRSkgeworCWlmICgoa2V5LT5mbGFncyAmIEtFWV9GTEFHX1VQTE9BREVEX1RPX0hBUkRXQVJFKSAmJiAhc2tpcF9odykgewogCQkvKiBod2FjY2VsIC0gd2l0aCBwcmVhbGxvY2F0ZWQgcm9vbSBmb3IgQ0NNUCBoZWFkZXIgKi8KIAkJaW5mby0+Y29udHJvbC5od19rZXkgPSAmdHgtPmtleS0+Y29uZjsKIAkJcmV0dXJuIDA7CkBAIC00NDYsNyArNDU4LDggQEAKIAogCWhkcmxlbiA9IGllZWU4MDIxMV9oZHJsZW4oaGRyLT5mcmFtZV9jb250cm9sKTsKIAotCWlmICghaWVlZTgwMjExX2lzX2RhdGEoaGRyLT5mcmFtZV9jb250cm9sKSkKKwlpZiAoIWllZWU4MDIxMV9pc19kYXRhKGhkci0+ZnJhbWVfY29udHJvbCkgJiYKKwkgICAgIWllZWU4MDIxMV9pc19yb2J1c3RfbWdtdF9mcmFtZShoZHIpKQogCQlyZXR1cm4gUlhfQ09OVElOVUU7CiAKIAlkYXRhX2xlbiA9IHNrYi0+bGVuIC0gaGRybGVuIC0gQ0NNUF9IRFJfTEVOIC0gQ0NNUF9NSUNfTEVOOwpAQCAtNDg1LDMgKzQ5OCwxMjYgQEAKIAogCXJldHVybiBSWF9DT05USU5VRTsKIH0KKworCitzdGF0aWMgdm9pZCBiaXBfYWFkKHN0cnVjdCBza19idWZmICpza2IsIHU4ICphYWQpCit7CisJLyogQklQIEFBRDogRkMobWFza2VkKSB8fCBBMSB8fCBBMiB8fCBBMyAqLworCisJLyogRkMgdHlwZS9zdWJ0eXBlICovCisJYWFkWzBdID0gc2tiLT5kYXRhWzBdOworCS8qIE1hc2sgRkMgUmV0cnksIFB3ck1ndCwgTW9yZURhdGEgZmxhZ3MgdG8gemVybyAqLworCWFhZFsxXSA9IHNrYi0+ZGF0YVsxXSAmIH4oQklUKDQpIHwgQklUKDUpIHwgQklUKDYpKTsKKwkvKiBBMSB8fCBBMiB8fCBBMyAqLworCW1lbWNweShhYWQgKyAyLCBza2ItPmRhdGEgKyA0LCAzICogRVRIX0FMRU4pOworfQorCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBiaXBfaXBuX3N3YXAodTggKmQsIGNvbnN0IHU4ICpzKQoreworCSpkKysgPSBzWzVdOworCSpkKysgPSBzWzRdOworCSpkKysgPSBzWzNdOworCSpkKysgPSBzWzJdOworCSpkKysgPSBzWzFdOworCSpkID0gc1swXTsKK30KKworCitpZWVlODAyMTFfdHhfcmVzdWx0CitpZWVlODAyMTFfY3J5cHRvX2Flc19jbWFjX2VuY3J5cHQoc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eCkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gdHgtPnNrYjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisJc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSA9IHR4LT5rZXk7CisJc3RydWN0IGllZWU4MDIxMV9tbWllICptbWllOworCXU4ICpwbiwgYWFkWzIwXTsKKwlpbnQgaTsKKworCWlmICh0eC0+a2V5LT5mbGFncyAmIEtFWV9GTEFHX1VQTE9BREVEX1RPX0hBUkRXQVJFKSB7CisJCS8qIGh3YWNjZWwgKi8KKwkJaW5mby0+Y29udHJvbC5od19rZXkgPSAmdHgtPmtleS0+Y29uZjsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKFdBUk5fT04oc2tiX3RhaWxyb29tKHNrYikgPCBzaXplb2YoKm1taWUpKSkKKwkJcmV0dXJuIFRYX0RST1A7CisKKwltbWllID0gKHN0cnVjdCBpZWVlODAyMTFfbW1pZSAqKSBza2JfcHV0KHNrYiwgc2l6ZW9mKCptbWllKSk7CisJbW1pZS0+ZWxlbWVudF9pZCA9IFdMQU5fRUlEX01NSUU7CisJbW1pZS0+bGVuZ3RoID0gc2l6ZW9mKCptbWllKSAtIDI7CisJbW1pZS0+a2V5X2lkID0gY3B1X3RvX2xlMTYoa2V5LT5jb25mLmtleWlkeCk7CisKKwkvKiBQTiA9IFBOICsgMSAqLworCXBuID0ga2V5LT51LmFlc19jbWFjLnR4X3BuOworCisJZm9yIChpID0gc2l6ZW9mKGtleS0+dS5hZXNfY21hYy50eF9wbikgLSAxOyBpID49IDA7IGktLSkgeworCQlwbltpXSsrOworCQlpZiAocG5baV0pCisJCQlicmVhazsKKwl9CisJYmlwX2lwbl9zd2FwKG1taWUtPnNlcXVlbmNlX251bWJlciwgcG4pOworCisJYmlwX2FhZChza2IsIGFhZCk7CisKKwkvKgorCSAqIE1JQyA9IEFFUy0xMjgtQ01BQyhJR1RLLCBBQUQgfHwgTWFuYWdlbWVudCBGcmFtZSBCb2R5IHx8IE1NSUUsIDY0KQorCSAqLworCWllZWU4MDIxMV9hZXNfY21hYyhrZXktPnUuYWVzX2NtYWMudGZtLCBrZXktPnUuYWVzX2NtYWMudHhfY3J5cHRvX2J1ZiwKKwkJCSAgIGFhZCwgc2tiLT5kYXRhICsgMjQsIHNrYi0+bGVuIC0gMjQsIG1taWUtPm1pYyk7CisKKwlyZXR1cm4gVFhfQ09OVElOVUU7Cit9CisKKworaWVlZTgwMjExX3J4X3Jlc3VsdAoraWVlZTgwMjExX2NyeXB0b19hZXNfY21hY19kZWNyeXB0KHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHJ4LT5za2I7CisJc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSA9IHJ4LT5rZXk7CisJc3RydWN0IGllZWU4MDIxMV9tbWllICptbWllOworCXU4IGFhZFsyMF0sIG1pY1s4XSwgaXBuWzZdOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOworCisJaWYgKCFpZWVlODAyMTFfaXNfbWdtdChoZHItPmZyYW1lX2NvbnRyb2wpKQorCQlyZXR1cm4gUlhfQ09OVElOVUU7CisKKwlpZiAoKHJ4LT5zdGF0dXMtPmZsYWcgJiBSWF9GTEFHX0RFQ1JZUFRFRCkgJiYKKwkgICAgKHJ4LT5zdGF0dXMtPmZsYWcgJiBSWF9GTEFHX0lWX1NUUklQUEVEKSkKKwkJcmV0dXJuIFJYX0NPTlRJTlVFOworCisJaWYgKHNrYi0+bGVuIDwgMjQgKyBzaXplb2YoKm1taWUpKQorCQlyZXR1cm4gUlhfRFJPUF9VTlVTQUJMRTsKKworCW1taWUgPSAoc3RydWN0IGllZWU4MDIxMV9tbWllICopCisJCShza2ItPmRhdGEgKyBza2ItPmxlbiAtIHNpemVvZigqbW1pZSkpOworCWlmIChtbWllLT5lbGVtZW50X2lkICE9IFdMQU5fRUlEX01NSUUgfHwKKwkgICAgbW1pZS0+bGVuZ3RoICE9IHNpemVvZigqbW1pZSkgLSAyKQorCQlyZXR1cm4gUlhfRFJPUF9VTlVTQUJMRTsgLyogSW52YWxpZCBNTUlFICovCisKKwliaXBfaXBuX3N3YXAoaXBuLCBtbWllLT5zZXF1ZW5jZV9udW1iZXIpOworCisJaWYgKG1lbWNtcChpcG4sIGtleS0+dS5hZXNfY21hYy5yeF9wbiwgNikgPD0gMCkgeworCQlrZXktPnUuYWVzX2NtYWMucmVwbGF5cysrOworCQlyZXR1cm4gUlhfRFJPUF9VTlVTQUJMRTsKKwl9CisKKwlpZiAoIShyeC0+c3RhdHVzLT5mbGFnICYgUlhfRkxBR19ERUNSWVBURUQpKSB7CisJCS8qIGhhcmR3YXJlIGRpZG4ndCBkZWNyeXB0L3ZlcmlmeSBNSUMgKi8KKwkJYmlwX2FhZChza2IsIGFhZCk7CisJCWllZWU4MDIxMV9hZXNfY21hYyhrZXktPnUuYWVzX2NtYWMudGZtLAorCQkJCSAgIGtleS0+dS5hZXNfY21hYy5yeF9jcnlwdG9fYnVmLCBhYWQsCisJCQkJICAgc2tiLT5kYXRhICsgMjQsIHNrYi0+bGVuIC0gMjQsIG1pYyk7CisJCWlmIChtZW1jbXAobWljLCBtbWllLT5taWMsIHNpemVvZihtbWllLT5taWMpKSAhPSAwKSB7CisJCQlrZXktPnUuYWVzX2NtYWMuaWN2ZXJyb3JzKys7CisJCQlyZXR1cm4gUlhfRFJPUF9VTlVTQUJMRTsKKwkJfQorCX0KKworCW1lbWNweShrZXktPnUuYWVzX2NtYWMucnhfcG4sIGlwbiwgNik7CisKKwkvKiBSZW1vdmUgTU1JRSAqLworCXNrYl90cmltKHNrYiwgc2tiLT5sZW4gLSBzaXplb2YoKm1taWUpKTsKKworCXJldHVybiBSWF9DT05USU5VRTsKK30KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS93cGEuaCBiL25ldC9tYWM4MDIxMS93cGEuaAppbmRleCBkNDJkMjIxLi5iYWJhMDYwIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvd3BhLmgKKysrIGIvbmV0L21hYzgwMjExL3dwYS5oCkBAIC0yOCw0ICsyOCw5IEBACiBpZWVlODAyMTFfcnhfcmVzdWx0CiBpZWVlODAyMTFfY3J5cHRvX2NjbXBfZGVjcnlwdChzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KTsKIAoraWVlZTgwMjExX3R4X3Jlc3VsdAoraWVlZTgwMjExX2NyeXB0b19hZXNfY21hY19lbmNyeXB0KHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqdHgpOworaWVlZTgwMjExX3J4X3Jlc3VsdAoraWVlZTgwMjExX2NyeXB0b19hZXNfY21hY19kZWNyeXB0KHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpOworCiAjZW5kaWYgLyogV1BBX0ggKi8KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvS2NvbmZpZyBiL25ldC9uZXRmaWx0ZXIvS2NvbmZpZwppbmRleCBjMmJhYzljLi4yNTYyZDA1IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL0tjb25maWcKKysrIGIvbmV0L25ldGZpbHRlci9LY29uZmlnCkBAIC0zNTcsNiArMzU3LDQ1IEBACiAKIAkgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLgogCitjb25maWcgTkVURklMVEVSX1hUX1RBUkdFVF9ITAorCXRyaXN0YXRlICciSEwiIGhvcGxpbWl0IHRhcmdldCBzdXBwb3J0JworCWRlcGVuZHMgb24gSVBfTkZfTUFOR0xFIHx8IElQNl9ORl9NQU5HTEUKKwlkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRAorCS0tLWhlbHAtLS0KKwlUaGlzIG9wdGlvbiBhZGRzIHRoZSAiSEwiIChmb3IgSVB2NikgYW5kICJUVEwiIChmb3IgSVB2NCkKKwl0YXJnZXRzLCB3aGljaCBlbmFibGUgdGhlIHVzZXIgdG8gY2hhbmdlIHRoZQorCWhvcGxpbWl0L3RpbWUtdG8tbGl2ZSB2YWx1ZSBvZiB0aGUgSVAgaGVhZGVyLgorCisJV2hpbGUgaXQgaXMgc2FmZSB0byBkZWNyZW1lbnQgdGhlIGhvcGxpbWl0L1RUTCB2YWx1ZSwgdGhlCisJbW9kdWxlcyBhbHNvIGFsbG93IHRvIGluY3JlbWVudCBhbmQgc2V0IHRoZSBob3BsaW1pdCB2YWx1ZSBvZgorCXRoZSBoZWFkZXIgdG8gYXJiaXRyYXJ5IHZhbHVlcy4gVGhpcyBpcyBFWFRSRU1FTFkgREFOR0VST1VTCisJc2luY2UgeW91IGNhbiBlYXNpbHkgY3JlYXRlIGltbW9ydGFsIHBhY2tldHMgdGhhdCBsb29wCisJZm9yZXZlciBvbiB0aGUgbmV0d29yay4KKworY29uZmlnIE5FVEZJTFRFUl9YVF9UQVJHRVRfTEVECisJdHJpc3RhdGUgJyJMRUQiIHRhcmdldCBzdXBwb3J0JworCWRlcGVuZHMgb24gTEVEU19DTEFTUworCWRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VECisJaGVscAorCSAgVGhpcyBvcHRpb24gYWRkcyBhIGBMRUQnIHRhcmdldCwgd2hpY2ggYWxsb3dzIHlvdSB0byBibGluayBMRURzIGluCisJICByZXNwb25zZSB0byBwYXJ0aWN1bGFyIHBhY2tldHMgcGFzc2luZyB0aHJvdWdoIHlvdXIgbWFjaGluZS4KKworCSAgVGhpcyBjYW4gYmUgdXNlZCB0byB0dXJuIGEgc3BhcmUgTEVEIGludG8gYSBuZXR3b3JrIGFjdGl2aXR5IExFRCwKKwkgIHdoaWNoIG9ubHkgZmxhc2hlcyBpbiByZXNwb25zZSB0byBGVFAgdHJhbnNmZXJzLCBmb3IgZXhhbXBsZS4gIE9yCisJICB5b3UgY291bGQgaGF2ZSBhbiBMRUQgd2hpY2ggbGlnaHRzIHVwIGZvciBhIG1pbnV0ZSBvciB0d28gZXZlcnkgdGltZQorCSAgc29tZWJvZHkgY29ubmVjdHMgdG8geW91ciBtYWNoaW5lIHZpYSBTU0guCisKKwkgIFlvdSB3aWxsIG5lZWQgc3VwcG9ydCBmb3IgdGhlICJsZWQiIGNsYXNzIHRvIG1ha2UgdGhpcyB3b3JrLgorCisJICBUbyBjcmVhdGUgYW4gTEVEIHRyaWdnZXIgZm9yIGluY29taW5nIFNTSCB0cmFmZmljOgorCSAgICBpcHRhYmxlcyAtQSBJTlBVVCAtcCB0Y3AgLS1kcG9ydCAyMiAtaiBMRUQgLS1sZWQtdHJpZ2dlci1pZCBzc2ggLS1sZWQtZGVsYXkgMTAwMAorCisJICBUaGVuIGF0dGFjaCB0aGUgbmV3IHRyaWdnZXIgdG8gYW4gTEVEIG9uIHlvdXIgc3lzdGVtOgorCSAgICBlY2hvIG5ldGZpbHRlci1zc2ggPiAvc3lzL2NsYXNzL2xlZHMvPGxlZG5hbWU+L3RyaWdnZXIKKworCSAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIExFRHMgYXZhaWxhYmxlIG9uIHlvdXIgc3lzdGVtLCBzZWUKKwkgIERvY3VtZW50YXRpb24vbGVkcy1jbGFzcy50eHQKKwogY29uZmlnIE5FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSwogCXRyaXN0YXRlICciTUFSSyIgdGFyZ2V0IHN1cHBvcnQnCiAJZGVmYXVsdCBtIGlmIE5FVEZJTFRFUl9BRFZBTkNFRD1uCkBAIC00ODgsNiArNTI3LDIyIEBACiAJICBUaGlzIG9wdGlvbiBhZGRzIGEgIlRDUE9QVFNUUklQIiB0YXJnZXQsIHdoaWNoIGFsbG93cyB5b3UgdG8gc3RyaXAKIAkgIFRDUCBvcHRpb25zIGZyb20gVENQIHBhY2tldHMuCiAKK2NvbmZpZyBORVRGSUxURVJfWFRfTUFUQ0hfQ0xVU1RFUgorCXRyaXN0YXRlICciY2x1c3RlciIgbWF0Y2ggc3VwcG9ydCcKKwlkZXBlbmRzIG9uIE5GX0NPTk5UUkFDSworCWRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VECisJLS0taGVscC0tLQorCSAgVGhpcyBvcHRpb24gYWxsb3dzIHlvdSB0byBidWlsZCB3b3JrLWxvYWQtc2hhcmluZyBjbHVzdGVycyBvZgorCSAgbmV0d29yayBzZXJ2ZXJzL3N0YXRlZnVsIGZpcmV3YWxscyB3aXRob3V0IGhhdmluZyBhIGRlZGljYXRlZAorCSAgbG9hZC1iYWxhbmNpbmcgcm91dGVyL3NlcnZlci9zd2l0Y2guIEJhc2ljYWxseSwgdGhpcyBtYXRjaCByZXR1cm5zCisJICB0cnVlIHdoZW4gdGhlIHBhY2tldCBtdXN0IGJlIGhhbmRsZWQgYnkgdGhpcyBjbHVzdGVyIG5vZGUuIFRodXMsCisJICBhbGwgbm9kZXMgc2VlIGFsbCBwYWNrZXRzIGFuZCB0aGlzIG1hdGNoIGRlY2lkZXMgd2hpY2ggbm9kZSBoYW5kbGVzCisJICB3aGF0IHBhY2tldHMuIFRoZSB3b3JrLWxvYWQgc2hhcmluZyBhbGdvcml0aG0gaXMgYmFzZWQgb24gc291cmNlCisJICBhZGRyZXNzIGhhc2hpbmcuCisKKwkgIElmIHlvdSBzYXkgWSBvciBNIGhlcmUsIHRyeSBgaXB0YWJsZXMgLW0gY2x1c3RlciAtLWhlbHBgIGZvcgorCSAgbW9yZSBpbmZvcm1hdGlvbi4KKwogY29uZmlnIE5FVEZJTFRFUl9YVF9NQVRDSF9DT01NRU5UCiAJdHJpc3RhdGUgICciY29tbWVudCIgbWF0Y2ggc3VwcG9ydCcKIAlkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRApAQCAtNjA1LDYgKzY2MCwxNCBAQAogCiAJICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgWS4KIAorY29uZmlnIE5FVEZJTFRFUl9YVF9NQVRDSF9ITAorCXRyaXN0YXRlICciaGwiIGhvcGxpbWl0L1RUTCBtYXRjaCBzdXBwb3J0JworCWRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VECisJLS0taGVscC0tLQorCUhMIG1hdGNoaW5nIGFsbG93cyB5b3UgdG8gbWF0Y2ggcGFja2V0cyBiYXNlZCBvbiB0aGUgaG9wbGltaXQKKwlpbiB0aGUgSVB2NiBoZWFkZXIsIG9yIHRoZSB0aW1lLXRvLWxpdmUgZmllbGQgaW4gdGhlIElQdjQKKwloZWFkZXIgb2YgdGhlIHBhY2tldC4KKwogY29uZmlnIE5FVEZJTFRFUl9YVF9NQVRDSF9JUFJBTkdFCiAJdHJpc3RhdGUgJyJpcHJhbmdlIiBhZGRyZXNzIHJhbmdlIG1hdGNoIHN1cHBvcnQnCiAJZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRUQKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvTWFrZWZpbGUgYi9uZXQvbmV0ZmlsdGVyL01ha2VmaWxlCmluZGV4IGRhM2Q5MDkuLjYyODIwNjAgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvTWFrZWZpbGUKKysrIGIvbmV0L25ldGZpbHRlci9NYWtlZmlsZQpAQCAtNDUsNiArNDUsOCBAQAogb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ09OTk1BUkspICs9IHh0X0NPTk5NQVJLLm8KIG9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NPTk5TRUNNQVJLKSArPSB4dF9DT05OU0VDTUFSSy5vCiBvYmotJChDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9EU0NQKSArPSB4dF9EU0NQLm8KK29iai0kKENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0hMKSArPSB4dF9ITC5vCitvYmotJChDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9MRUQpICs9IHh0X0xFRC5vCiBvYmotJChDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9NQVJLKSArPSB4dF9NQVJLLm8KIG9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GTE9HKSArPSB4dF9ORkxPRy5vCiBvYmotJChDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORlFVRVVFKSArPSB4dF9ORlFVRVVFLm8KQEAgLTU3LDYgKzU5LDcgQEAKIG9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RSQUNFKSArPSB4dF9UUkFDRS5vCiAKICMgbWF0Y2hlcworb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DTFVTVEVSKSArPSB4dF9jbHVzdGVyLm8KIG9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVCkgKz0geHRfY29tbWVudC5vCiBvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5CWVRFUykgKz0geHRfY29ubmJ5dGVzLm8KIG9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTkxJTUlUKSArPSB4dF9jb25ubGltaXQubwpAQCAtNjcsNiArNzAsNyBAQAogb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1ApICs9IHh0X2VzcC5vCiBvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hBU0hMSU1JVCkgKz0geHRfaGFzaGxpbWl0Lm8KIG9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEVMUEVSKSArPSB4dF9oZWxwZXIubworb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9ITCkgKz0geHRfaGwubwogb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9JUFJBTkdFKSArPSB4dF9pcHJhbmdlLm8KIG9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIKSArPSB4dF9sZW5ndGgubwogb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MSU1JVCkgKz0geHRfbGltaXQubwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL2NvcmUuYwppbmRleCBhOTBhYzgzLi41YmIzNDczIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2NvcmUuYworKysgYi9uZXQvbmV0ZmlsdGVyL2NvcmUuYwpAQCAtMTc0LDcgKzE3NCw2IEBACiAJCQkgICAgIG91dGRldiwgJmVsZW0sIG9rZm4sIGhvb2tfdGhyZXNoKTsKIAlpZiAodmVyZGljdCA9PSBORl9BQ0NFUFQgfHwgdmVyZGljdCA9PSBORl9TVE9QKSB7CiAJCXJldCA9IDE7Ci0JCWdvdG8gdW5sb2NrOwogCX0gZWxzZSBpZiAodmVyZGljdCA9PSBORl9EUk9QKSB7CiAJCWtmcmVlX3NrYihza2IpOwogCQlyZXQgPSAtRVBFUk07CkBAIC0xODMsNyArMTgyLDYgQEAKIAkJCSAgICAgIHZlcmRpY3QgPj4gTkZfVkVSRElDVF9CSVRTKSkKIAkJCWdvdG8gbmV4dF9ob29rOwogCX0KLXVubG9jazoKIAlyY3VfcmVhZF91bmxvY2soKTsKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMKaW5kZXggNmJlNWQ0ZS4uNWM0ODM3OCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYworKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jCkBAIC0xNDksOCArMTQ5LDggQEAKIC8qIG11bHRpY2FzdCBhZGRyICovCiBzdGF0aWMgc3RydWN0IHNvY2thZGRyX2luIG1jYXN0X2FkZHIgPSB7CiAJLnNpbl9mYW1pbHkJCT0gQUZfSU5FVCwKLQkuc2luX3BvcnQJCT0gX19jb25zdGFudF9odG9ucyhJUF9WU19TWU5DX1BPUlQpLAotCS5zaW5fYWRkci5zX2FkZHIJPSBfX2NvbnN0YW50X2h0b25sKElQX1ZTX1NZTkNfR1JPVVApLAorCS5zaW5fcG9ydAkJPSBjcHVfdG9fYmUxNihJUF9WU19TWU5DX1BPUlQpLAorCS5zaW5fYWRkci5zX2FkZHIJPSBjcHVfdG9fYmUzMihJUF9WU19TWU5DX0dST1VQKSwKIH07CiAKIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYwppbmRleCA0ZjhmY2Y0Li4wN2Q5ZDg4IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYwpAQCAtMTc3LDcgKzE3Nyw3IEBACiAJCS5tZQkJCT0gVEhJU19NT0RVTEUsCiAJCS5oZWxwCQkJPSBhbWFuZGFfaGVscCwKIAkJLnR1cGxlLnNyYy5sM251bQk9IEFGX0lORVQsCi0JCS50dXBsZS5zcmMudS51ZHAucG9ydAk9IF9fY29uc3RhbnRfaHRvbnMoMTAwODApLAorCQkudHVwbGUuc3JjLnUudWRwLnBvcnQJPSBjcHVfdG9fYmUxNigxMDA4MCksCiAJCS50dXBsZS5kc3QucHJvdG9udW0JPSBJUFBST1RPX1VEUCwKIAkJLmV4cGVjdF9wb2xpY3kJCT0gJmFtYW5kYV9leHBfcG9saWN5LAogCX0sCkBAIC0xODYsNyArMTg2LDcgQEAKIAkJLm1lCQkJPSBUSElTX01PRFVMRSwKIAkJLmhlbHAJCQk9IGFtYW5kYV9oZWxwLAogCQkudHVwbGUuc3JjLmwzbnVtCT0gQUZfSU5FVDYsCi0JCS50dXBsZS5zcmMudS51ZHAucG9ydAk9IF9fY29uc3RhbnRfaHRvbnMoMTAwODApLAorCQkudHVwbGUuc3JjLnUudWRwLnBvcnQJPSBjcHVfdG9fYmUxNigxMDA4MCksCiAJCS50dXBsZS5kc3QucHJvdG9udW0JPSBJUFBST1RPX1VEUCwKIAkJLmV4cGVjdF9wb2xpY3kJCT0gJmFtYW5kYV9leHBfcG9saWN5LAogCX0sCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMKaW5kZXggZjQ5MzVlMy4uZGZiNDQ3YiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYwpAQCAtNTQsNyArNTQsNyBAQAogdW5zaWduZWQgaW50IG5mX2Nvbm50cmFja19odGFibGVfc2l6ZSBfX3JlYWRfbW9zdGx5OwogRVhQT1JUX1NZTUJPTF9HUEwobmZfY29ubnRyYWNrX2h0YWJsZV9zaXplKTsKIAotaW50IG5mX2Nvbm50cmFja19tYXggX19yZWFkX21vc3RseTsKK3Vuc2lnbmVkIGludCBuZl9jb25udHJhY2tfbWF4IF9fcmVhZF9tb3N0bHk7CiBFWFBPUlRfU1lNQk9MX0dQTChuZl9jb25udHJhY2tfbWF4KTsKIAogc3RydWN0IG5mX2Nvbm4gbmZfY29ubnRyYWNrX3VudHJhY2tlZCBfX3JlYWRfbW9zdGx5OwpAQCAtNDcyLDcgKzQ3Miw4IEBACiAJc3RydWN0IG5mX2Nvbm4gKmN0OwogCiAJaWYgKHVubGlrZWx5KCFuZl9jb25udHJhY2tfaGFzaF9ybmRfaW5pdHRlZCkpIHsKLQkJZ2V0X3JhbmRvbV9ieXRlcygmbmZfY29ubnRyYWNrX2hhc2hfcm5kLCA0KTsKKwkJZ2V0X3JhbmRvbV9ieXRlcygmbmZfY29ubnRyYWNrX2hhc2hfcm5kLAorCQkJCXNpemVvZihuZl9jb25udHJhY2tfaGFzaF9ybmQpKTsKIAkJbmZfY29ubnRyYWNrX2hhc2hfcm5kX2luaXR0ZWQgPSAxOwogCX0KIApAQCAtNTE2LDE2ICs1MTcsMTcgQEAKIHN0YXRpYyB2b2lkIG5mX2Nvbm50cmFja19mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCiB7CiAJc3RydWN0IG5mX2Nvbm4gKmN0ID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBuZl9jb25uLCByY3UpOwotCXN0cnVjdCBuZXQgKm5ldCA9IG5mX2N0X25ldChjdCk7CiAKIAluZl9jdF9leHRfZnJlZShjdCk7CiAJa21lbV9jYWNoZV9mcmVlKG5mX2Nvbm50cmFja19jYWNoZXAsIGN0KTsKLQlhdG9taWNfZGVjKCZuZXQtPmN0LmNvdW50KTsKIH0KIAogdm9pZCBuZl9jb25udHJhY2tfZnJlZShzdHJ1Y3QgbmZfY29ubiAqY3QpCiB7CisJc3RydWN0IG5ldCAqbmV0ID0gbmZfY3RfbmV0KGN0KTsKKwogCW5mX2N0X2V4dF9kZXN0cm95KGN0KTsKKwlhdG9taWNfZGVjKCZuZXQtPmN0LmNvdW50KTsKIAljYWxsX3JjdSgmY3QtPnJjdSwgbmZfY29ubnRyYWNrX2ZyZWVfcmN1KTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2Nvbm50cmFja19mcmVlKTsKQEAgLTczMyw2ICs3MzUsOCBAQAogCQluZl9jb25udHJhY2tfcHV0KHNrYi0+bmZjdCk7CiAJCXNrYi0+bmZjdCA9IE5VTEw7CiAJCU5GX0NUX1NUQVRfSU5DX0FUT01JQyhuZXQsIGludmFsaWQpOworCQlpZiAocmV0ID09IC1ORl9EUk9QKQorCQkJTkZfQ1RfU1RBVF9JTkNfQVRPTUlDKG5ldCwgZHJvcCk7CiAJCXJldHVybiAtcmV0OwogCX0KIApAQCAtMTEwMyw3ICsxMTA3LDcgQEAKIAogCS8qIFdlIGhhdmUgdG8gcmVoYWhzIGZvciB0aGUgbmV3IHRhYmxlIGFueXdheSwgc28gd2UgYWxzbyBjYW4KIAkgKiB1c2UgYSBuZXdyYW5kb20gc2VlZCAqLwotCWdldF9yYW5kb21fYnl0ZXMoJnJuZCwgNCk7CisJZ2V0X3JhbmRvbV9ieXRlcygmcm5kLCBzaXplb2Yocm5kKSk7CiAKIAkvKiBMb29rdXBzIGluIHRoZSBvbGQgaGFzaCBtaWdodCBoYXBwZW4gaW4gcGFyYWxsZWwsIHdoaWNoIG1lYW5zIHdlCiAJICogbWlnaHQgZ2V0IGZhbHNlIG5lZ2F0aXZlcyBkdXJpbmcgY29ubmVjdGlvbiBsb29rdXAuIE5ldyBjb25uZWN0aW9ucwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuYwppbmRleCAzYThhMzRhLi4zNTdiYTM5IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuYwpAQCAtNzIsNyArNzIsOCBAQAogCXVuc2lnbmVkIGludCBoYXNoOwogCiAJaWYgKHVubGlrZWx5KCFuZl9jdF9leHBlY3RfaGFzaF9ybmRfaW5pdHRlZCkpIHsKLQkJZ2V0X3JhbmRvbV9ieXRlcygmbmZfY3RfZXhwZWN0X2hhc2hfcm5kLCA0KTsKKwkJZ2V0X3JhbmRvbV9ieXRlcygmbmZfY3RfZXhwZWN0X2hhc2hfcm5kLAorCQkJCSBzaXplb2YobmZfY3RfZXhwZWN0X2hhc2hfcm5kKSk7CiAJCW5mX2N0X2V4cGVjdF9oYXNoX3JuZF9pbml0dGVkID0gMTsKIAl9CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMKaW5kZXggNjg3YmQ2My4uNjYzNjk0OSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMKQEAgLTExNjcsNyArMTE2Nyw3IEBACiAJCS5uYW1lCQkJPSAiUS45MzEiLAogCQkubWUJCQk9IFRISVNfTU9EVUxFLAogCQkudHVwbGUuc3JjLmwzbnVtCT0gQUZfSU5FVCwKLQkJLnR1cGxlLnNyYy51LnRjcC5wb3J0CT0gX19jb25zdGFudF9odG9ucyhROTMxX1BPUlQpLAorCQkudHVwbGUuc3JjLnUudGNwLnBvcnQJPSBjcHVfdG9fYmUxNihROTMxX1BPUlQpLAogCQkudHVwbGUuZHN0LnByb3RvbnVtCT0gSVBQUk9UT19UQ1AsCiAJCS5oZWxwCQkJPSBxOTMxX2hlbHAsCiAJCS5leHBlY3RfcG9saWN5CQk9ICZxOTMxX2V4cF9wb2xpY3ksCkBAIC0xMTc2LDcgKzExNzYsNyBAQAogCQkubmFtZQkJCT0gIlEuOTMxIiwKIAkJLm1lCQkJPSBUSElTX01PRFVMRSwKIAkJLnR1cGxlLnNyYy5sM251bQk9IEFGX0lORVQ2LAotCQkudHVwbGUuc3JjLnUudGNwLnBvcnQJPSBfX2NvbnN0YW50X2h0b25zKFE5MzFfUE9SVCksCisJCS50dXBsZS5zcmMudS50Y3AucG9ydAk9IGNwdV90b19iZTE2KFE5MzFfUE9SVCksCiAJCS50dXBsZS5kc3QucHJvdG9udW0JPSBJUFBST1RPX1RDUCwKIAkJLmhlbHAJCQk9IHE5MzFfaGVscCwKIAkJLmV4cGVjdF9wb2xpY3kJCT0gJnE5MzFfZXhwX3BvbGljeSwKQEAgLTE3NDEsNyArMTc0MSw3IEBACiAJCS5uYW1lCQkJPSAiUkFTIiwKIAkJLm1lCQkJPSBUSElTX01PRFVMRSwKIAkJLnR1cGxlLnNyYy5sM251bQk9IEFGX0lORVQsCi0JCS50dXBsZS5zcmMudS51ZHAucG9ydAk9IF9fY29uc3RhbnRfaHRvbnMoUkFTX1BPUlQpLAorCQkudHVwbGUuc3JjLnUudWRwLnBvcnQJPSBjcHVfdG9fYmUxNihSQVNfUE9SVCksCiAJCS50dXBsZS5kc3QucHJvdG9udW0JPSBJUFBST1RPX1VEUCwKIAkJLmhlbHAJCQk9IHJhc19oZWxwLAogCQkuZXhwZWN0X3BvbGljeQkJPSAmcmFzX2V4cF9wb2xpY3ksCkBAIC0xNzUwLDcgKzE3NTAsNyBAQAogCQkubmFtZQkJCT0gIlJBUyIsCiAJCS5tZQkJCT0gVEhJU19NT0RVTEUsCiAJCS50dXBsZS5zcmMubDNudW0JPSBBRl9JTkVUNiwKLQkJLnR1cGxlLnNyYy51LnVkcC5wb3J0CT0gX19jb25zdGFudF9odG9ucyhSQVNfUE9SVCksCisJCS50dXBsZS5zcmMudS51ZHAucG9ydAk9IGNwdV90b19iZTE2KFJBU19QT1JUKSwKIAkJLnR1cGxlLmRzdC5wcm90b251bQk9IElQUFJPVE9fVURQLAogCQkuaGVscAkJCT0gcmFzX2hlbHAsCiAJCS5leHBlY3RfcG9saWN5CQk9ICZyYXNfZXhwX3BvbGljeSwKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGJpb3NfbnMuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGJpb3NfbnMuYwppbmRleCA1YWY0MjczLi44YTM4NzVlIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRiaW9zX25zLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0Ymlvc19ucy5jCkBAIC0xMDUsNyArMTA1LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciBoZWxwZXIgX19yZWFkX21vc3RseSA9IHsKIAkubmFtZQkJCT0gIm5ldGJpb3MtbnMiLAogCS50dXBsZS5zcmMubDNudW0JPSBBRl9JTkVULAotCS50dXBsZS5zcmMudS51ZHAucG9ydAk9IF9fY29uc3RhbnRfaHRvbnMoTk1CRF9QT1JUKSwKKwkudHVwbGUuc3JjLnUudWRwLnBvcnQJPSBjcHVfdG9fYmUxNihOTUJEX1BPUlQpLAogCS50dXBsZS5kc3QucHJvdG9udW0JPSBJUFBST1RPX1VEUCwKIAkubWUJCQk9IFRISVNfTU9EVUxFLAogCS5oZWxwCQkJPSBoZWxwLApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jCmluZGV4IGVkNmQ4NzMuLjdhMTZiZDQgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMKQEAgLTUxOCw2ICs1MTgsNyBAQAogbmxhX3B1dF9mYWlsdXJlOgogCXJjdV9yZWFkX3VubG9jaygpOwogbmxtc2dfZmFpbHVyZToKKwluZm5ldGxpbmtfc2V0X2VycigwLCBncm91cCwgLUVOT0JVRlMpOwogCWtmcmVlX3NrYihza2IpOwogCXJldHVybiBOT1RJRllfRE9ORTsKIH0KQEAgLTU5OSw3ICs2MDAsOCBAQAogCiAJbmxhX3BhcnNlX25lc3RlZCh0YiwgQ1RBX0lQX01BWCwgYXR0ciwgTlVMTCk7CiAKLQlsM3Byb3RvID0gbmZfY3RfbDNwcm90b19maW5kX2dldCh0dXBsZS0+c3JjLmwzbnVtKTsKKwlyY3VfcmVhZF9sb2NrKCk7CisJbDNwcm90byA9IF9fbmZfY3RfbDNwcm90b19maW5kKHR1cGxlLT5zcmMubDNudW0pOwogCiAJaWYgKGxpa2VseShsM3Byb3RvLT5ubGF0dHJfdG9fdHVwbGUpKSB7CiAJCXJldCA9IG5sYV92YWxpZGF0ZV9uZXN0ZWQoYXR0ciwgQ1RBX0lQX01BWCwKQEAgLTYwOCw3ICs2MTAsNyBAQAogCQkJcmV0ID0gbDNwcm90by0+bmxhdHRyX3RvX3R1cGxlKHRiLCB0dXBsZSk7CiAJfQogCi0JbmZfY3RfbDNwcm90b19wdXQobDNwcm90byk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtNjMzLDcgKzYzNSw4IEBACiAJCXJldHVybiAtRUlOVkFMOwogCXR1cGxlLT5kc3QucHJvdG9udW0gPSBubGFfZ2V0X3U4KHRiW0NUQV9QUk9UT19OVU1dKTsKIAotCWw0cHJvdG8gPSBuZl9jdF9sNHByb3RvX2ZpbmRfZ2V0KHR1cGxlLT5zcmMubDNudW0sIHR1cGxlLT5kc3QucHJvdG9udW0pOworCXJjdV9yZWFkX2xvY2soKTsKKwlsNHByb3RvID0gX19uZl9jdF9sNHByb3RvX2ZpbmQodHVwbGUtPnNyYy5sM251bSwgdHVwbGUtPmRzdC5wcm90b251bSk7CiAKIAlpZiAobGlrZWx5KGw0cHJvdG8tPm5sYXR0cl90b190dXBsZSkpIHsKIAkJcmV0ID0gbmxhX3ZhbGlkYXRlX25lc3RlZChhdHRyLCBDVEFfUFJPVE9fTUFYLApAQCAtNjQyLDcgKzY0NSw3IEBACiAJCQlyZXQgPSBsNHByb3RvLT5ubGF0dHJfdG9fdHVwbGUodGIsIHR1cGxlKTsKIAl9CiAKLQluZl9jdF9sNHByb3RvX3B1dChsNHByb3RvKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC05ODksMTAgKzk5MiwxMSBAQAogCiAJbmxhX3BhcnNlX25lc3RlZCh0YiwgQ1RBX1BST1RPSU5GT19NQVgsIGF0dHIsIE5VTEwpOwogCi0JbDRwcm90byA9IG5mX2N0X2w0cHJvdG9fZmluZF9nZXQobmZfY3RfbDNudW0oY3QpLCBuZl9jdF9wcm90b251bShjdCkpOworCXJjdV9yZWFkX2xvY2soKTsKKwlsNHByb3RvID0gX19uZl9jdF9sNHByb3RvX2ZpbmQobmZfY3RfbDNudW0oY3QpLCBuZl9jdF9wcm90b251bShjdCkpOwogCWlmIChsNHByb3RvLT5mcm9tX25sYXR0cikKIAkJZXJyID0gbDRwcm90by0+ZnJvbV9ubGF0dHIodGIsIGN0KTsKLQluZl9jdF9sNHByb3RvX3B1dChsNHByb3RvKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKIAogCXJldHVybiBlcnI7CiB9CkBAIC0xMDYyLDYgKzEwNjYsMTAgQEAKIHsKIAlpbnQgZXJyOwogCisJLyogb25seSBhbGxvdyBOQVQgY2hhbmdlcyBhbmQgbWFzdGVyIGFzc2lnbmF0aW9uIGZvciBuZXcgY29ubnRyYWNrcyAqLworCWlmIChjZGFbQ1RBX05BVF9TUkNdIHx8IGNkYVtDVEFfTkFUX0RTVF0gfHwgY2RhW0NUQV9UVVBMRV9NQVNURVJdKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKIAlpZiAoY2RhW0NUQV9IRUxQXSkgewogCQllcnIgPSBjdG5ldGxpbmtfY2hhbmdlX2hlbHBlcihjdCwgY2RhKTsKIAkJaWYgKGVyciA8IDApCkBAIC0xMTI0LDEzICsxMTMyLDExIEBACiAJCQkJICByZXBvcnQpOwogfQogCi1zdGF0aWMgaW50CitzdGF0aWMgc3RydWN0IG5mX2Nvbm4gKgogY3RuZXRsaW5rX2NyZWF0ZV9jb25udHJhY2soc3RydWN0IG5sYXR0ciAqY2RhW10sCiAJCQkgICBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICpvdHVwbGUsCiAJCQkgICBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICpydHVwbGUsCi0JCQkgICBzdHJ1Y3QgbmZfY29ubiAqbWFzdGVyX2N0LAotCQkJICAgdTMyIHBpZCwKLQkJCSAgIGludCByZXBvcnQpCisJCQkgICB1OCB1MykKIHsKIAlzdHJ1Y3QgbmZfY29ubiAqY3Q7CiAJaW50IGVyciA9IC1FSU5WQUw7CkBAIC0xMTM4LDEwICsxMTQ0LDEwIEBACiAKIAljdCA9IG5mX2Nvbm50cmFja19hbGxvYygmaW5pdF9uZXQsIG90dXBsZSwgcnR1cGxlLCBHRlBfQVRPTUlDKTsKIAlpZiAoSVNfRVJSKGN0KSkKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCiAJaWYgKCFjZGFbQ1RBX1RJTUVPVVRdKQotCQlnb3RvIGVycjsKKwkJZ290byBlcnIxOwogCWN0LT50aW1lb3V0LmV4cGlyZXMgPSBudG9obChubGFfZ2V0X2JlMzIoY2RhW0NUQV9USU1FT1VUXSkpOwogCiAJY3QtPnRpbWVvdXQuZXhwaXJlcyA9IGppZmZpZXMgKyBjdC0+dGltZW91dC5leHBpcmVzICogSFo7CkBAIC0xMTUyLDEwICsxMTU4LDggQEAKICAJCWNoYXIgKmhlbHBuYW1lOwogIAogIAkJZXJyID0gY3RuZXRsaW5rX3BhcnNlX2hlbHAoY2RhW0NUQV9IRUxQXSwgJmhlbHBuYW1lKTsKLSAJCWlmIChlcnIgPCAwKSB7Ci0JCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJCWdvdG8gZXJyOwotCQl9CisgCQlpZiAoZXJyIDwgMCkKKwkJCWdvdG8gZXJyMjsKIAogCQloZWxwZXIgPSBfX25mX2Nvbm50cmFja19oZWxwZXJfZmluZF9ieW5hbWUoaGVscG5hbWUpOwogCQlpZiAoaGVscGVyID09IE5VTEwpIHsKQEAgLTExNjMsMjggKzExNjcsMjYgQEAKICNpZmRlZiBDT05GSUdfTU9EVUxFUwogCQkJaWYgKHJlcXVlc3RfbW9kdWxlKCJuZmN0LWhlbHBlci0lcyIsIGhlbHBuYW1lKSA8IDApIHsKIAkJCQllcnIgPSAtRU9QTk9UU1VQUDsKLQkJCQlnb3RvIGVycjsKKwkJCQlnb3RvIGVycjE7CiAJCQl9CiAKIAkJCXJjdV9yZWFkX2xvY2soKTsKIAkJCWhlbHBlciA9IF9fbmZfY29ubnRyYWNrX2hlbHBlcl9maW5kX2J5bmFtZShoZWxwbmFtZSk7CiAJCQlpZiAoaGVscGVyKSB7Ci0JCQkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCQkJZXJyID0gLUVBR0FJTjsKLQkJCQlnb3RvIGVycjsKKwkJCQlnb3RvIGVycjI7CiAJCQl9CiAJCQlyY3VfcmVhZF91bmxvY2soKTsKICNlbmRpZgogCQkJZXJyID0gLUVPUE5PVFNVUFA7Ci0JCQlnb3RvIGVycjsKKwkJCWdvdG8gZXJyMTsKIAkJfSBlbHNlIHsKIAkJCXN0cnVjdCBuZl9jb25uX2hlbHAgKmhlbHA7CiAKIAkJCWhlbHAgPSBuZl9jdF9oZWxwZXJfZXh0X2FkZChjdCwgR0ZQX0FUT01JQyk7CiAJCQlpZiAoaGVscCA9PSBOVUxMKSB7Ci0JCQkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCQkJZXJyID0gLUVOT01FTTsKLQkJCQlnb3RvIGVycjsKKwkJCQlnb3RvIGVycjI7CiAJCQl9CiAKIAkJCS8qIG5vdCBpbiBoYXNoIHRhYmxlIHlldCBzbyBub3Qgc3RyaWN0bHkgbmVjZXNzYXJ5ICovCkBAIC0xMTkzLDQ0ICsxMTk1LDM0IEBACiAJfSBlbHNlIHsKIAkJLyogdHJ5IGFuIGltcGxpY2l0IGhlbHBlciBhc3NpZ25hdGlvbiAqLwogCQllcnIgPSBfX25mX2N0X3RyeV9hc3NpZ25faGVscGVyKGN0LCBHRlBfQVRPTUlDKTsKLQkJaWYgKGVyciA8IDApIHsKLQkJCXJjdV9yZWFkX3VubG9jaygpOwotCQkJZ290byBlcnI7Ci0JCX0KKwkJaWYgKGVyciA8IDApCisJCQlnb3RvIGVycjI7CiAJfQogCiAJaWYgKGNkYVtDVEFfU1RBVFVTXSkgewogCQllcnIgPSBjdG5ldGxpbmtfY2hhbmdlX3N0YXR1cyhjdCwgY2RhKTsKLQkJaWYgKGVyciA8IDApIHsKLQkJCXJjdV9yZWFkX3VubG9jaygpOwotCQkJZ290byBlcnI7Ci0JCX0KKwkJaWYgKGVyciA8IDApCisJCQlnb3RvIGVycjI7CiAJfQogCiAJaWYgKGNkYVtDVEFfTkFUX1NSQ10gfHwgY2RhW0NUQV9OQVRfRFNUXSkgewogCQllcnIgPSBjdG5ldGxpbmtfY2hhbmdlX25hdChjdCwgY2RhKTsKLQkJaWYgKGVyciA8IDApIHsKLQkJCXJjdV9yZWFkX3VubG9jaygpOwotCQkJZ290byBlcnI7Ci0JCX0KKwkJaWYgKGVyciA8IDApCisJCQlnb3RvIGVycjI7CiAJfQogCiAjaWZkZWYgQ09ORklHX05GX05BVF9ORUVERUQKIAlpZiAoY2RhW0NUQV9OQVRfU0VRX0FESl9PUklHXSB8fCBjZGFbQ1RBX05BVF9TRVFfQURKX1JFUExZXSkgewogCQllcnIgPSBjdG5ldGxpbmtfY2hhbmdlX25hdF9zZXFfYWRqKGN0LCBjZGEpOwotCQlpZiAoZXJyIDwgMCkgewotCQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCQlnb3RvIGVycjsKLQkJfQorCQlpZiAoZXJyIDwgMCkKKwkJCWdvdG8gZXJyMjsKIAl9CiAjZW5kaWYKIAogCWlmIChjZGFbQ1RBX1BST1RPSU5GT10pIHsKIAkJZXJyID0gY3RuZXRsaW5rX2NoYW5nZV9wcm90b2luZm8oY3QsIGNkYSk7Ci0JCWlmIChlcnIgPCAwKSB7Ci0JCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJCWdvdG8gZXJyOwotCQl9CisJCWlmIChlcnIgPCAwKQorCQkJZ290byBlcnIyOwogCX0KIAogCW5mX2N0X2FjY3RfZXh0X2FkZChjdCwgR0ZQX0FUT01JQyk7CkBAIC0xMjQxLDIzICsxMjMzLDM3IEBACiAjZW5kaWYKIAogCS8qIHNldHVwIG1hc3RlciBjb25udHJhY2s6IHRoaXMgaXMgYSBjb25maXJtZWQgZXhwZWN0YXRpb24gKi8KLQlpZiAobWFzdGVyX2N0KSB7CisJaWYgKGNkYVtDVEFfVFVQTEVfTUFTVEVSXSkgeworCQlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlIG1hc3RlcjsKKwkJc3RydWN0IG5mX2Nvbm50cmFja190dXBsZV9oYXNoICptYXN0ZXJfaDsKKwkJc3RydWN0IG5mX2Nvbm4gKm1hc3Rlcl9jdDsKKworCQllcnIgPSBjdG5ldGxpbmtfcGFyc2VfdHVwbGUoY2RhLCAmbWFzdGVyLCBDVEFfVFVQTEVfTUFTVEVSLCB1Myk7CisJCWlmIChlcnIgPCAwKQorCQkJZ290byBlcnIyOworCisJCW1hc3Rlcl9oID0gX19uZl9jb25udHJhY2tfZmluZCgmaW5pdF9uZXQsICZtYXN0ZXIpOworCQlpZiAobWFzdGVyX2ggPT0gTlVMTCkgeworCQkJZXJyID0gLUVOT0VOVDsKKwkJCWdvdG8gZXJyMjsKKwkJfQorCQltYXN0ZXJfY3QgPSBuZl9jdF90dXBsZWhhc2hfdG9fY3RyYWNrKG1hc3Rlcl9oKTsKKwkJbmZfY29ubnRyYWNrX2dldCgmbWFzdGVyX2N0LT5jdF9nZW5lcmFsKTsKIAkJX19zZXRfYml0KElQU19FWFBFQ1RFRF9CSVQsICZjdC0+c3RhdHVzKTsKIAkJY3QtPm1hc3RlciA9IG1hc3Rlcl9jdDsKIAl9CiAKLQluZl9jb25udHJhY2tfZ2V0KCZjdC0+Y3RfZ2VuZXJhbCk7CiAJYWRkX3RpbWVyKCZjdC0+dGltZW91dCk7CiAJbmZfY29ubnRyYWNrX2hhc2hfaW5zZXJ0KGN0KTsKIAlyY3VfcmVhZF91bmxvY2soKTsKLQljdG5ldGxpbmtfZXZlbnRfcmVwb3J0KGN0LCBwaWQsIHJlcG9ydCk7Ci0JbmZfY3RfcHV0KGN0KTsKIAotCXJldHVybiAwOworCXJldHVybiBjdDsKIAotZXJyOgorZXJyMjoKKwlyY3VfcmVhZF91bmxvY2soKTsKK2VycjE6CiAJbmZfY29ubnRyYWNrX2ZyZWUoY3QpOwotCXJldHVybiBlcnI7CisJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIH0KIAogc3RhdGljIGludApAQCAtMTI4OSwzOCArMTI5NSwyNSBAQAogCQloID0gX19uZl9jb25udHJhY2tfZmluZCgmaW5pdF9uZXQsICZydHVwbGUpOwogCiAJaWYgKGggPT0gTlVMTCkgewotCQlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlIG1hc3RlcjsKLQkJc3RydWN0IG5mX2Nvbm50cmFja190dXBsZV9oYXNoICptYXN0ZXJfaCA9IE5VTEw7Ci0JCXN0cnVjdCBuZl9jb25uICptYXN0ZXJfY3QgPSBOVUxMOworCQllcnIgPSAtRU5PRU5UOworCQlpZiAobmxoLT5ubG1zZ19mbGFncyAmIE5MTV9GX0NSRUFURSkgeworCQkJc3RydWN0IG5mX2Nvbm4gKmN0OwogCi0JCWlmIChjZGFbQ1RBX1RVUExFX01BU1RFUl0pIHsKLQkJCWVyciA9IGN0bmV0bGlua19wYXJzZV90dXBsZShjZGEsCi0JCQkJCQkgICAgJm1hc3RlciwKLQkJCQkJCSAgICBDVEFfVFVQTEVfTUFTVEVSLAotCQkJCQkJICAgIHUzKTsKLQkJCWlmIChlcnIgPCAwKQotCQkJCWdvdG8gb3V0X3VubG9jazsKLQotCQkJbWFzdGVyX2ggPSBfX25mX2Nvbm50cmFja19maW5kKCZpbml0X25ldCwgJm1hc3Rlcik7Ci0JCQlpZiAobWFzdGVyX2ggPT0gTlVMTCkgewotCQkJCWVyciA9IC1FTk9FTlQ7CisJCQljdCA9IGN0bmV0bGlua19jcmVhdGVfY29ubnRyYWNrKGNkYSwgJm90dXBsZSwKKwkJCQkJCQkmcnR1cGxlLCB1Myk7CisJCQlpZiAoSVNfRVJSKGN0KSkgeworCQkJCWVyciA9IFBUUl9FUlIoY3QpOwogCQkJCWdvdG8gb3V0X3VubG9jazsKIAkJCX0KLQkJCW1hc3Rlcl9jdCA9IG5mX2N0X3R1cGxlaGFzaF90b19jdHJhY2sobWFzdGVyX2gpOwotCQkJbmZfY29ubnRyYWNrX2dldCgmbWFzdGVyX2N0LT5jdF9nZW5lcmFsKTsKLQkJfQotCi0JCWVyciA9IC1FTk9FTlQ7Ci0JCWlmIChubGgtPm5sbXNnX2ZsYWdzICYgTkxNX0ZfQ1JFQVRFKQotCQkJZXJyID0gY3RuZXRsaW5rX2NyZWF0ZV9jb25udHJhY2soY2RhLAotCQkJCQkJCSAmb3R1cGxlLAotCQkJCQkJCSAmcnR1cGxlLAotCQkJCQkJCSBtYXN0ZXJfY3QsCi0JCQkJCQkJIE5FVExJTktfQ0Ioc2tiKS5waWQsCi0JCQkJCQkJIG5sbXNnX3JlcG9ydChubGgpKTsKLQkJc3Bpbl91bmxvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKLQkJaWYgKGVyciA8IDAgJiYgbWFzdGVyX2N0KQotCQkJbmZfY3RfcHV0KG1hc3Rlcl9jdCk7CisJCQllcnIgPSAwOworCQkJbmZfY29ubnRyYWNrX2dldCgmY3QtPmN0X2dlbmVyYWwpOworCQkJc3Bpbl91bmxvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKKwkJCWN0bmV0bGlua19ldmVudF9yZXBvcnQoY3QsCisJCQkJCSAgICAgICBORVRMSU5LX0NCKHNrYikucGlkLAorCQkJCQkgICAgICAgbmxtc2dfcmVwb3J0KG5saCkpOworCQkJbmZfY3RfcHV0KGN0KTsKKwkJfSBlbHNlCisJCQlzcGluX3VubG9ja19iaCgmbmZfY29ubnRyYWNrX2xvY2spOwogCiAJCXJldHVybiBlcnI7CiAJfQpAQCAtMTMzMiwxNyArMTMyNSw2IEBACiAJaWYgKCEobmxoLT5ubG1zZ19mbGFncyAmIE5MTV9GX0VYQ0wpKSB7CiAJCXN0cnVjdCBuZl9jb25uICpjdCA9IG5mX2N0X3R1cGxlaGFzaF90b19jdHJhY2soaCk7CiAKLQkJLyogd2Ugb25seSBhbGxvdyBuYXQgY29uZmlnIGZvciBuZXcgY29ubnRyYWNrcyAqLwotCQlpZiAoY2RhW0NUQV9OQVRfU1JDXSB8fCBjZGFbQ1RBX05BVF9EU1RdKSB7Ci0JCQllcnIgPSAtRU9QTk9UU1VQUDsKLQkJCWdvdG8gb3V0X3VubG9jazsKLQkJfQotCQkvKiBjYW4ndCBsaW5rIGFuIGV4aXN0aW5nIGNvbm50cmFjayB0byBhIG1hc3RlciAqLwotCQlpZiAoY2RhW0NUQV9UVVBMRV9NQVNURVJdKSB7Ci0JCQllcnIgPSAtRU9QTk9UU1VQUDsKLQkJCWdvdG8gb3V0X3VubG9jazsKLQkJfQotCiAJCWVyciA9IGN0bmV0bGlua19jaGFuZ2VfY29ubnRyYWNrKGN0LCBjZGEpOwogCQlpZiAoZXJyID09IDApIHsKIAkJCW5mX2Nvbm50cmFja19nZXQoJmN0LT5jdF9nZW5lcmFsKTsKQEAgLTE1MzMsNiArMTUxNSw3IEBACiBubGFfcHV0X2ZhaWx1cmU6CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiBubG1zZ19mYWlsdXJlOgorCW5mbmV0bGlua19zZXRfZXJyKDAsIDAsIC1FTk9CVUZTKTsKIAlrZnJlZV9za2Ioc2tiKTsKIAlyZXR1cm4gTk9USUZZX0RPTkU7CiB9CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmMKaW5kZXggOWUxNjllZi4uMzgwN2FjNyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuYwpAQCAtNjYsNyArNjYsNyBAQAogCQkJICAgICBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwKSBfX3JlYWRfbW9zdGx5OwogRVhQT1JUX1NZTUJPTF9HUEwobmZfbmF0X3BwdHBfaG9va19leHBlY3Rmbik7CiAKLSNpZiBkZWZpbmVkKERFQlVHKSB8fCBkZWZpbmVkKENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRykKKyNpZiBkZWZpbmVkKERFQlVHKSB8fCBkZWZpbmVkKENPTkZJR19EWU5BTUlDX0RFQlVHKQogLyogUHB0cENvbnRyb2xNZXNzYWdlVHlwZSBuYW1lcyAqLwogY29uc3QgY2hhciAqY29uc3QgcHB0cF9tc2dfbmFtZVtdID0gewogCSJVTktOT1dOX01FU1NBR0UiLApAQCAtNTkxLDcgKzU5MSw3IEBACiAJLm5hbWUJCQk9ICJwcHRwIiwKIAkubWUJCQk9IFRISVNfTU9EVUxFLAogCS50dXBsZS5zcmMubDNudW0JPSBBRl9JTkVULAotCS50dXBsZS5zcmMudS50Y3AucG9ydAk9IF9fY29uc3RhbnRfaHRvbnMoUFBUUF9DT05UUk9MX1BPUlQpLAorCS50dXBsZS5zcmMudS50Y3AucG9ydAk9IGNwdV90b19iZTE2KFBQVFBfQ09OVFJPTF9QT1JUKSwKIAkudHVwbGUuZHN0LnByb3RvbnVtCT0gSVBQUk9UT19UQ1AsCiAJLmhlbHAJCQk9IGNvbm50cmFja19wcHRwX2hlbHAsCiAJLmRlc3Ryb3kJCT0gcHB0cF9kZXN0cm95X3NpYmxpbmdzLApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMKaW5kZXggNTkyZDczMy4uOWE2MmI0ZSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jCkBAIC03NCwyNyArNzQsNiBAQAogCiAvKiB0aGlzIGlzIGd1YXJhbnRlZWQgdG8gYWx3YXlzIHJldHVybiBhIHZhbGlkIHByb3RvY29sIGhlbHBlciwgc2luY2UKICAqIGl0IGZhbGxzIGJhY2sgdG8gZ2VuZXJpY19wcm90b2NvbCAqLwotc3RydWN0IG5mX2Nvbm50cmFja19sNHByb3RvICoKLW5mX2N0X2w0cHJvdG9fZmluZF9nZXQodV9pbnQxNl90IGwzcHJvdG8sIHVfaW50OF90IGw0cHJvdG8pCi17Ci0Jc3RydWN0IG5mX2Nvbm50cmFja19sNHByb3RvICpwOwotCi0JcmN1X3JlYWRfbG9jaygpOwotCXAgPSBfX25mX2N0X2w0cHJvdG9fZmluZChsM3Byb3RvLCBsNHByb3RvKTsKLQlpZiAoIXRyeV9tb2R1bGVfZ2V0KHAtPm1lKSkKLQkJcCA9ICZuZl9jb25udHJhY2tfbDRwcm90b19nZW5lcmljOwotCXJjdV9yZWFkX3VubG9jaygpOwotCi0JcmV0dXJuIHA7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChuZl9jdF9sNHByb3RvX2ZpbmRfZ2V0KTsKLQotdm9pZCBuZl9jdF9sNHByb3RvX3B1dChzdHJ1Y3QgbmZfY29ubnRyYWNrX2w0cHJvdG8gKnApCi17Ci0JbW9kdWxlX3B1dChwLT5tZSk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChuZl9jdF9sNHByb3RvX3B1dCk7Ci0KIHN0cnVjdCBuZl9jb25udHJhY2tfbDNwcm90byAqCiBuZl9jdF9sM3Byb3RvX2ZpbmRfZ2V0KHVfaW50MTZfdCBsM3Byb3RvKQogewpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fZGNjcC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fZGNjcC5jCmluZGV4IDhmY2YxNzYuLmQzZDVhN2YgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2RjY3AuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19kY2NwLmMKQEAgLTE2LDYgKzE2LDkgQEAKICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC9kY2NwLmg+CiAKKyNpbmNsdWRlIDxuZXQvbmV0X25hbWVzcGFjZS5oPgorI2luY2x1ZGUgPG5ldC9uZXRucy9nZW5lcmljLmg+CisKICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2Nvbm50cmFjay5oPgogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oPgpAQCAtMjMsOCArMjYsNiBAQAogCiBzdGF0aWMgREVGSU5FX1JXTE9DSyhkY2NwX2xvY2spOwogCi1zdGF0aWMgaW50IG5mX2N0X2RjY3BfbG9vc2UgX19yZWFkX21vc3RseSA9IDE7Ci0KIC8qIFRpbWVvdXRzIGFyZSBiYXNlZCBvbiB2YWx1ZXMgZnJvbSBSRkM0MzQwOgogICoKICAqIC0gUkVRVUVTVDoKQEAgLTcyLDE2ICs3Myw2IEBACiAKICNkZWZpbmUgRENDUF9NU0wgKDIgKiA2MCAqIEhaKQogCi1zdGF0aWMgdW5zaWduZWQgaW50IGRjY3BfdGltZW91dFtDVF9EQ0NQX01BWCArIDFdIF9fcmVhZF9tb3N0bHkgPSB7Ci0JW0NUX0RDQ1BfUkVRVUVTVF0JPSAyICogRENDUF9NU0wsCi0JW0NUX0RDQ1BfUkVTUE9ORF0JPSA0ICogRENDUF9NU0wsCi0JW0NUX0RDQ1BfUEFSVE9QRU5dCT0gNCAqIERDQ1BfTVNMLAotCVtDVF9EQ0NQX09QRU5dCQk9IDEyICogMzYwMCAqIEhaLAotCVtDVF9EQ0NQX0NMT1NFUkVRXQk9IDY0ICogSFosCi0JW0NUX0RDQ1BfQ0xPU0lOR10JPSA2NCAqIEhaLAotCVtDVF9EQ0NQX1RJTUVXQUlUXQk9IDIgKiBEQ0NQX01TTCwKLX07Ci0KIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZGNjcF9zdGF0ZV9uYW1lc1tdID0gewogCVtDVF9EQ0NQX05PTkVdCQk9ICJOT05FIiwKIAlbQ1RfRENDUF9SRVFVRVNUXQk9ICJSRVFVRVNUIiwKQEAgLTM5Myw2ICszODQsMjIgQEAKIAl9LAogfTsKIAorLyogdGhpcyBtb2R1bGUgcGVyLW5ldCBzcGVjaWZpY3MgKi8KK3N0YXRpYyBpbnQgZGNjcF9uZXRfaWQ7CitzdHJ1Y3QgZGNjcF9uZXQgeworCWludCBkY2NwX2xvb3NlOworCXVuc2lnbmVkIGludCBkY2NwX3RpbWVvdXRbQ1RfRENDUF9NQVggKyAxXTsKKyNpZmRlZiBDT05GSUdfU1lTQ1RMCisJc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKnN5c2N0bF9oZWFkZXI7CisJc3RydWN0IGN0bF90YWJsZSAqc3lzY3RsX3RhYmxlOworI2VuZGlmCit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkY2NwX25ldCAqZGNjcF9wZXJuZXQoc3RydWN0IG5ldCAqbmV0KQoreworCXJldHVybiBuZXRfZ2VuZXJpYyhuZXQsIGRjY3BfbmV0X2lkKTsKK30KKwogc3RhdGljIGJvb2wgZGNjcF9wa3RfdG9fdHVwbGUoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGRhdGFvZmYsCiAJCQkgICAgICBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSkKIHsKQEAgLTQxOSw2ICs0MjYsNyBAQAogCQkgICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmKQogewogCXN0cnVjdCBuZXQgKm5ldCA9IG5mX2N0X25ldChjdCk7CisJc3RydWN0IGRjY3BfbmV0ICpkbjsKIAlzdHJ1Y3QgZGNjcF9oZHIgX2RoLCAqZGg7CiAJY29uc3QgY2hhciAqbXNnOwogCXVfaW50OF90IHN0YXRlOwpAQCAtNDI5LDcgKzQzNyw4IEBACiAJc3RhdGUgPSBkY2NwX3N0YXRlX3RhYmxlW0NUX0RDQ1BfUk9MRV9DTElFTlRdW2RoLT5kY2NwaF90eXBlXVtDVF9EQ0NQX05PTkVdOwogCXN3aXRjaCAoc3RhdGUpIHsKIAlkZWZhdWx0OgotCQlpZiAobmZfY3RfZGNjcF9sb29zZSA9PSAwKSB7CisJCWRuID0gZGNjcF9wZXJuZXQobmV0KTsKKwkJaWYgKGRuLT5kY2NwX2xvb3NlID09IDApIHsKIAkJCW1zZyA9ICJuZl9jdF9kY2NwOiBub3QgcGlja2luZyB1cCBleGlzdGluZyBjb25uZWN0aW9uICI7CiAJCQlnb3RvIG91dF9pbnZhbGlkOwogCQl9CkBAIC00NjUsNiArNDc0LDcgQEAKIAkJICAgICAgIHVfaW50OF90IHBmLCB1bnNpZ25lZCBpbnQgaG9va251bSkKIHsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBuZl9jdF9uZXQoY3QpOworCXN0cnVjdCBkY2NwX25ldCAqZG47CiAJZW51bSBpcF9jb25udHJhY2tfZGlyIGRpciA9IENUSU5GTzJESVIoY3RpbmZvKTsKIAlzdHJ1Y3QgZGNjcF9oZHIgX2RoLCAqZGg7CiAJdV9pbnQ4X3QgdHlwZSwgb2xkX3N0YXRlLCBuZXdfc3RhdGU7CkBAIC01NDIsNyArNTUyLDkgQEAKIAljdC0+cHJvdG8uZGNjcC5sYXN0X3BrdCA9IHR5cGU7CiAJY3QtPnByb3RvLmRjY3Auc3RhdGUgPSBuZXdfc3RhdGU7CiAJd3JpdGVfdW5sb2NrX2JoKCZkY2NwX2xvY2spOwotCW5mX2N0X3JlZnJlc2hfYWNjdChjdCwgY3RpbmZvLCBza2IsIGRjY3BfdGltZW91dFtuZXdfc3RhdGVdKTsKKworCWRuID0gZGNjcF9wZXJuZXQobmV0KTsKKwluZl9jdF9yZWZyZXNoX2FjY3QoY3QsIGN0aW5mbywgc2tiLCBkbi0+ZGNjcF90aW1lb3V0W25ld19zdGF0ZV0pOwogCiAJcmV0dXJuIE5GX0FDQ0VQVDsKIH0KQEAgLTY2MCwxMyArNjcyLDExIEBACiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19TWVNDVEwKLXN0YXRpYyB1bnNpZ25lZCBpbnQgZGNjcF9zeXNjdGxfdGFibGVfdXNlcnM7Ci1zdGF0aWMgc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKmRjY3Bfc3lzY3RsX2hlYWRlcjsKLXN0YXRpYyBjdGxfdGFibGUgZGNjcF9zeXNjdGxfdGFibGVbXSA9IHsKKy8qIHRlbXBsYXRlLCBkYXRhIGFzc2lnbmVkIGxhdGVyICovCitzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBkY2NwX3N5c2N0bF90YWJsZVtdID0gewogCXsKIAkJLmN0bF9uYW1lCT0gQ1RMX1VOTlVNQkVSRUQsCiAJCS5wcm9jbmFtZQk9ICJuZl9jb25udHJhY2tfZGNjcF90aW1lb3V0X3JlcXVlc3QiLAotCQkuZGF0YQkJPSAmZGNjcF90aW1lb3V0W0NUX0RDQ1BfUkVRVUVTVF0sCiAJCS5tYXhsZW4JCT0gc2l6ZW9mKHVuc2lnbmVkIGludCksCiAJCS5tb2RlCQk9IDA2NDQsCiAJCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjX2ppZmZpZXMsCkBAIC02NzQsNyArNjg0LDYgQEAKIAl7CiAJCS5jdGxfbmFtZQk9IENUTF9VTk5VTUJFUkVELAogCQkucHJvY25hbWUJPSAibmZfY29ubnRyYWNrX2RjY3BfdGltZW91dF9yZXNwb25kIiwKLQkJLmRhdGEJCT0gJmRjY3BfdGltZW91dFtDVF9EQ0NQX1JFU1BPTkRdLAogCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCBpbnQpLAogCQkubW9kZQkJPSAwNjQ0LAogCQkucHJvY19oYW5kbGVyCT0gcHJvY19kb2ludHZlY19qaWZmaWVzLApAQCAtNjgyLDcgKzY5MSw2IEBACiAJewogCQkuY3RsX25hbWUJPSBDVExfVU5OVU1CRVJFRCwKIAkJLnByb2NuYW1lCT0gIm5mX2Nvbm50cmFja19kY2NwX3RpbWVvdXRfcGFydG9wZW4iLAotCQkuZGF0YQkJPSAmZGNjcF90aW1lb3V0W0NUX0RDQ1BfUEFSVE9QRU5dLAogCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCBpbnQpLAogCQkubW9kZQkJPSAwNjQ0LAogCQkucHJvY19oYW5kbGVyCT0gcHJvY19kb2ludHZlY19qaWZmaWVzLApAQCAtNjkwLDcgKzY5OCw2IEBACiAJewogCQkuY3RsX25hbWUJPSBDVExfVU5OVU1CRVJFRCwKIAkJLnByb2NuYW1lCT0gIm5mX2Nvbm50cmFja19kY2NwX3RpbWVvdXRfb3BlbiIsCi0JCS5kYXRhCQk9ICZkY2NwX3RpbWVvdXRbQ1RfRENDUF9PUEVOXSwKIAkJLm1heGxlbgkJPSBzaXplb2YodW5zaWduZWQgaW50KSwKIAkJLm1vZGUJCT0gMDY0NCwKIAkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWNfamlmZmllcywKQEAgLTY5OCw3ICs3MDUsNiBAQAogCXsKIAkJLmN0bF9uYW1lCT0gQ1RMX1VOTlVNQkVSRUQsCiAJCS5wcm9jbmFtZQk9ICJuZl9jb25udHJhY2tfZGNjcF90aW1lb3V0X2Nsb3NlcmVxIiwKLQkJLmRhdGEJCT0gJmRjY3BfdGltZW91dFtDVF9EQ0NQX0NMT1NFUkVRXSwKIAkJLm1heGxlbgkJPSBzaXplb2YodW5zaWduZWQgaW50KSwKIAkJLm1vZGUJCT0gMDY0NCwKIAkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWNfamlmZmllcywKQEAgLTcwNiw3ICs3MTIsNiBAQAogCXsKIAkJLmN0bF9uYW1lCT0gQ1RMX1VOTlVNQkVSRUQsCiAJCS5wcm9jbmFtZQk9ICJuZl9jb25udHJhY2tfZGNjcF90aW1lb3V0X2Nsb3NpbmciLAotCQkuZGF0YQkJPSAmZGNjcF90aW1lb3V0W0NUX0RDQ1BfQ0xPU0lOR10sCiAJCS5tYXhsZW4JCT0gc2l6ZW9mKHVuc2lnbmVkIGludCksCiAJCS5tb2RlCQk9IDA2NDQsCiAJCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjX2ppZmZpZXMsCkBAIC03MTQsNyArNzE5LDYgQEAKIAl7CiAJCS5jdGxfbmFtZQk9IENUTF9VTk5VTUJFUkVELAogCQkucHJvY25hbWUJPSAibmZfY29ubnRyYWNrX2RjY3BfdGltZW91dF90aW1ld2FpdCIsCi0JCS5kYXRhCQk9ICZkY2NwX3RpbWVvdXRbQ1RfRENDUF9USU1FV0FJVF0sCiAJCS5tYXhsZW4JCT0gc2l6ZW9mKHVuc2lnbmVkIGludCksCiAJCS5tb2RlCQk9IDA2NDQsCiAJCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjX2ppZmZpZXMsCkBAIC03MjIsOCArNzI2LDcgQEAKIAl7CiAJCS5jdGxfbmFtZQk9IENUTF9VTk5VTUJFUkVELAogCQkucHJvY25hbWUJPSAibmZfY29ubnRyYWNrX2RjY3BfbG9vc2UiLAotCQkuZGF0YQkJPSAmbmZfY3RfZGNjcF9sb29zZSwKLQkJLm1heGxlbgkJPSBzaXplb2YobmZfY3RfZGNjcF9sb29zZSksCisJCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCiAJCS5tb2RlCQk9IDA2NDQsCiAJCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjLAogCX0sCkBAIC03NTEsMTEgKzc1NCw2IEBACiAJLm5sYXR0cl90b190dXBsZQk9IG5mX2N0X3BvcnRfbmxhdHRyX3RvX3R1cGxlLAogCS5ubGFfcG9saWN5CQk9IG5mX2N0X3BvcnRfbmxhX3BvbGljeSwKICNlbmRpZgotI2lmZGVmIENPTkZJR19TWVNDVEwKLQkuY3RsX3RhYmxlX3VzZXJzCT0gJmRjY3Bfc3lzY3RsX3RhYmxlX3VzZXJzLAotCS5jdGxfdGFibGVfaGVhZGVyCT0gJmRjY3Bfc3lzY3RsX2hlYWRlciwKLQkuY3RsX3RhYmxlCQk9IGRjY3Bfc3lzY3RsX3RhYmxlLAotI2VuZGlmCiB9OwogCiBzdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19sNHByb3RvIGRjY3BfcHJvdG82IF9fcmVhZF9tb3N0bHkgPSB7CkBAIC03NzYsMzQgKzc3NCwxMDcgQEAKIAkubmxhdHRyX3RvX3R1cGxlCT0gbmZfY3RfcG9ydF9ubGF0dHJfdG9fdHVwbGUsCiAJLm5sYV9wb2xpY3kJCT0gbmZfY3RfcG9ydF9ubGFfcG9saWN5LAogI2VuZGlmCit9OworCitzdGF0aWMgX19uZXRfaW5pdCBpbnQgZGNjcF9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCit7CisJc3RydWN0IGRjY3BfbmV0ICpkbjsKKwlpbnQgZXJyOworCisJZG4gPSBrbWFsbG9jKHNpemVvZigqZG4pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRuKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIGRlZmF1bHQgdmFsdWVzICovCisJZG4tPmRjY3BfbG9vc2UgPSAxOworCWRuLT5kY2NwX3RpbWVvdXRbQ1RfRENDUF9SRVFVRVNUXQk9IDIgKiBEQ0NQX01TTDsKKwlkbi0+ZGNjcF90aW1lb3V0W0NUX0RDQ1BfUkVTUE9ORF0JPSA0ICogRENDUF9NU0w7CisJZG4tPmRjY3BfdGltZW91dFtDVF9EQ0NQX1BBUlRPUEVOXQk9IDQgKiBEQ0NQX01TTDsKKwlkbi0+ZGNjcF90aW1lb3V0W0NUX0RDQ1BfT1BFTl0JCT0gMTIgKiAzNjAwICogSFo7CisJZG4tPmRjY3BfdGltZW91dFtDVF9EQ0NQX0NMT1NFUkVRXQk9IDY0ICogSFo7CisJZG4tPmRjY3BfdGltZW91dFtDVF9EQ0NQX0NMT1NJTkddCT0gNjQgKiBIWjsKKwlkbi0+ZGNjcF90aW1lb3V0W0NUX0RDQ1BfVElNRVdBSVRdCT0gMiAqIERDQ1BfTVNMOworCisJZXJyID0gbmV0X2Fzc2lnbl9nZW5lcmljKG5ldCwgZGNjcF9uZXRfaWQsIGRuKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKwogI2lmZGVmIENPTkZJR19TWVNDVEwKLQkuY3RsX3RhYmxlX3VzZXJzCT0gJmRjY3Bfc3lzY3RsX3RhYmxlX3VzZXJzLAotCS5jdGxfdGFibGVfaGVhZGVyCT0gJmRjY3Bfc3lzY3RsX2hlYWRlciwKLQkuY3RsX3RhYmxlCQk9IGRjY3Bfc3lzY3RsX3RhYmxlLAorCWVyciA9IC1FTk9NRU07CisJZG4tPnN5c2N0bF90YWJsZSA9IGttZW1kdXAoZGNjcF9zeXNjdGxfdGFibGUsCisJCQlzaXplb2YoZGNjcF9zeXNjdGxfdGFibGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRuLT5zeXNjdGxfdGFibGUpCisJCWdvdG8gb3V0OworCisJZG4tPnN5c2N0bF90YWJsZVswXS5kYXRhID0gJmRuLT5kY2NwX3RpbWVvdXRbQ1RfRENDUF9SRVFVRVNUXTsKKwlkbi0+c3lzY3RsX3RhYmxlWzFdLmRhdGEgPSAmZG4tPmRjY3BfdGltZW91dFtDVF9EQ0NQX1JFU1BPTkRdOworCWRuLT5zeXNjdGxfdGFibGVbMl0uZGF0YSA9ICZkbi0+ZGNjcF90aW1lb3V0W0NUX0RDQ1BfUEFSVE9QRU5dOworCWRuLT5zeXNjdGxfdGFibGVbM10uZGF0YSA9ICZkbi0+ZGNjcF90aW1lb3V0W0NUX0RDQ1BfT1BFTl07CisJZG4tPnN5c2N0bF90YWJsZVs0XS5kYXRhID0gJmRuLT5kY2NwX3RpbWVvdXRbQ1RfRENDUF9DTE9TRVJFUV07CisJZG4tPnN5c2N0bF90YWJsZVs1XS5kYXRhID0gJmRuLT5kY2NwX3RpbWVvdXRbQ1RfRENDUF9DTE9TSU5HXTsKKwlkbi0+c3lzY3RsX3RhYmxlWzZdLmRhdGEgPSAmZG4tPmRjY3BfdGltZW91dFtDVF9EQ0NQX1RJTUVXQUlUXTsKKwlkbi0+c3lzY3RsX3RhYmxlWzddLmRhdGEgPSAmZG4tPmRjY3BfbG9vc2U7CisKKwlkbi0+c3lzY3RsX2hlYWRlciA9IHJlZ2lzdGVyX25ldF9zeXNjdGxfdGFibGUobmV0LAorCQkJbmZfbmV0X25ldGZpbHRlcl9zeXNjdGxfcGF0aCwgZG4tPnN5c2N0bF90YWJsZSk7CisJaWYgKCFkbi0+c3lzY3RsX2hlYWRlcikgeworCQlrZnJlZShkbi0+c3lzY3RsX3RhYmxlKTsKKwkJZ290byBvdXQ7CisJfQogI2VuZGlmCisKKwlyZXR1cm4gMDsKKworb3V0OgorCWtmcmVlKGRuKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgX19uZXRfZXhpdCB2b2lkIGRjY3BfbmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KQoreworCXN0cnVjdCBkY2NwX25ldCAqZG4gPSBkY2NwX3Blcm5ldChuZXQpOworI2lmZGVmIENPTkZJR19TWVNDVEwKKwl1bnJlZ2lzdGVyX25ldF9zeXNjdGxfdGFibGUoZG4tPnN5c2N0bF9oZWFkZXIpOworCWtmcmVlKGRuLT5zeXNjdGxfdGFibGUpOworI2VuZGlmCisJa2ZyZWUoZG4pOworCisJbmV0X2Fzc2lnbl9nZW5lcmljKG5ldCwgZGNjcF9uZXRfaWQsIE5VTEwpOworfQorCitzdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIGRjY3BfbmV0X29wcyA9IHsKKwkuaW5pdCA9IGRjY3BfbmV0X2luaXQsCisJLmV4aXQgPSBkY2NwX25ldF9leGl0LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX3Byb3RvX2RjY3BfaW5pdCh2b2lkKQogewogCWludCBlcnI7CiAKLQllcnIgPSBuZl9jb25udHJhY2tfbDRwcm90b19yZWdpc3RlcigmZGNjcF9wcm90bzQpOworCWVyciA9IHJlZ2lzdGVyX3Blcm5ldF9nZW5fc3Vic3lzKCZkY2NwX25ldF9pZCwgJmRjY3BfbmV0X29wcyk7CiAJaWYgKGVyciA8IDApCiAJCWdvdG8gZXJyMTsKIAotCWVyciA9IG5mX2Nvbm50cmFja19sNHByb3RvX3JlZ2lzdGVyKCZkY2NwX3Byb3RvNik7CisJZXJyID0gbmZfY29ubnRyYWNrX2w0cHJvdG9fcmVnaXN0ZXIoJmRjY3BfcHJvdG80KTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBlcnIyOworCisJZXJyID0gbmZfY29ubnRyYWNrX2w0cHJvdG9fcmVnaXN0ZXIoJmRjY3BfcHJvdG82KTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnIzOwogCXJldHVybiAwOwogCi1lcnIyOgorZXJyMzoKIAluZl9jb25udHJhY2tfbDRwcm90b191bnJlZ2lzdGVyKCZkY2NwX3Byb3RvNCk7CitlcnIyOgorCXVucmVnaXN0ZXJfcGVybmV0X2dlbl9zdWJzeXMoZGNjcF9uZXRfaWQsICZkY2NwX25ldF9vcHMpOwogZXJyMToKIAlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgbmZfY29ubnRyYWNrX3Byb3RvX2RjY3BfZmluaSh2b2lkKQogeworCXVucmVnaXN0ZXJfcGVybmV0X2dlbl9zdWJzeXMoZGNjcF9uZXRfaWQsICZkY2NwX25ldF9vcHMpOwogCW5mX2Nvbm50cmFja19sNHByb3RvX3VucmVnaXN0ZXIoJmRjY3BfcHJvdG82KTsKIAluZl9jb25udHJhY2tfbDRwcm90b191bnJlZ2lzdGVyKCZkY2NwX3Byb3RvNCk7CiB9CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19nZW5lcmljLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19nZW5lcmljLmMKaW5kZXggNGJlODBkNy4uODI5Mzc0ZjQgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2dlbmVyaWMuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19nZW5lcmljLmMKQEAgLTkyLDcgKzkyLDcgQEAKIHN0cnVjdCBuZl9jb25udHJhY2tfbDRwcm90byBuZl9jb25udHJhY2tfbDRwcm90b19nZW5lcmljIF9fcmVhZF9tb3N0bHkgPQogewogCS5sM3Byb3RvCQk9IFBGX1VOU1BFQywKLQkubDRwcm90bwkJPSAwLAorCS5sNHByb3RvCQk9IDI1NSwKIAkubmFtZQkJCT0gInVua25vd24iLAogCS5wa3RfdG9fdHVwbGUJCT0gZ2VuZXJpY19wa3RfdG9fdHVwbGUsCiAJLmludmVydF90dXBsZQkJPSBnZW5lcmljX2ludmVydF90dXBsZSwKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMKaW5kZXggZjNmZDE1NC4uMGFlYjhiMCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC9pcHY2Lmg+CiAjaW5jbHVkZSA8bmV0L2lwNl9jaGVja3N1bS5oPgorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KIAogI2luY2x1ZGUgPG5ldC90Y3AuaD4KIApAQCAtMjUsNiArMjYsOCBAQAogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19lY2FjaGUuaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2xvZy5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvaXB2NC9uZl9jb25udHJhY2tfaXB2NC5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvaXB2Ni9uZl9jb25udHJhY2tfaXB2Ni5oPgogCiAvKiBQcm90ZWN0cyBjdC0+cHJvdG8udGNwICovCiBzdGF0aWMgREVGSU5FX1JXTE9DSyh0Y3BfbG9jayk7CkBAIC00NjYsNyArNDY5LDcgQEAKIAkJCQlmb3IgKGkgPSAwOwogCQkJCSAgICAgaSA8IChvcHNpemUgLSBUQ1BPTEVOX1NBQ0tfQkFTRSk7CiAJCQkJICAgICBpICs9IFRDUE9MRU5fU0FDS19QRVJCTE9DSykgewotCQkJCQl0bXAgPSBudG9obCgqKChfX2JlMzIgKikocHRyK2kpKzEpKTsKKwkJCQkJdG1wID0gZ2V0X3VuYWxpZ25lZF9iZTMyKChfX2JlMzIgKikocHRyK2kpKzEpOwogCiAJCQkJCWlmIChhZnRlcih0bXAsICpzYWNrKSkKIAkJCQkJCSpzYWNrID0gdG1wOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdWRwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b191ZHAuYwppbmRleCAyYjhiMWY1Li5kNDAyMTE3IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b191ZHAuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b191ZHAuYwpAQCAtMjIsNiArMjIsOCBAQAogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19lY2FjaGUuaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2xvZy5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvaXB2NC9uZl9jb25udHJhY2tfaXB2NC5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvaXB2Ni9uZl9jb25udHJhY2tfaXB2Ni5oPgogCiBzdGF0aWMgdW5zaWduZWQgaW50IG5mX2N0X3VkcF90aW1lb3V0IF9fcmVhZF9tb3N0bHkgPSAzMCpIWjsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbmZfY3RfdWRwX3RpbWVvdXRfc3RyZWFtIF9fcmVhZF9tb3N0bHkgPSAxODAqSFo7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2xvZy5jIGIvbmV0L25ldGZpbHRlci9uZl9sb2cuYwppbmRleCBmYThhZTVkLi44YmI5OThmIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2xvZy5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfbG9nLmMKQEAgLTE0LDU4ICsxNCw2MyBAQAogICAgTE9HIHRhcmdldCBtb2R1bGVzICovCiAKICNkZWZpbmUgTkZfTE9HX1BSRUZJWExFTgkJMTI4CisjZGVmaW5lIE5GTE9HR0VSX05BTUVfTEVOCQk2NAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG5mX2xvZ2dlciAqbmZfbG9nZ2Vyc1tORlBST1RPX05VTVBST1RPXSBfX3JlYWRfbW9zdGx5Oworc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgbmZfbG9nZ2Vyc19sW05GUFJPVE9fTlVNUFJPVE9dIF9fcmVhZF9tb3N0bHk7CiBzdGF0aWMgREVGSU5FX01VVEVYKG5mX2xvZ19tdXRleCk7CiAKLS8qIHJldHVybiBFQlVTWSBpZiBzb21lYm9keSBlbHNlIGlzIHJlZ2lzdGVyZWQsIEVFWElTVCBpZiB0aGUgc2FtZSBsb2dnZXIKLSAqIGlzIHJlZ2lzdHJlZCwgMCBvbiBzdWNjZXNzLiAqLwotaW50IG5mX2xvZ19yZWdpc3Rlcih1X2ludDhfdCBwZiwgY29uc3Qgc3RydWN0IG5mX2xvZ2dlciAqbG9nZ2VyKQorc3RhdGljIHN0cnVjdCBuZl9sb2dnZXIgKl9fZmluZF9sb2dnZXIoaW50IHBmLCBjb25zdCBjaGFyICpzdHJfbG9nZ2VyKQogewotCWludCByZXQ7CisJc3RydWN0IG5mX2xvZ2dlciAqdDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkodCwgJm5mX2xvZ2dlcnNfbFtwZl0sIGxpc3RbcGZdKSB7CisJCWlmICghc3RybmljbXAoc3RyX2xvZ2dlciwgdC0+bmFtZSwgc3RybGVuKHQtPm5hbWUpKSkKKwkJCXJldHVybiB0OworCX0KKworCXJldHVybiBOVUxMOworfQorCisvKiByZXR1cm4gRUVYSVNUIGlmIHRoZSBzYW1lIGxvZ2dlciBpcyByZWdpc3RyZWQsIDAgb24gc3VjY2Vzcy4gKi8KK2ludCBuZl9sb2dfcmVnaXN0ZXIodV9pbnQ4X3QgcGYsIHN0cnVjdCBuZl9sb2dnZXIgKmxvZ2dlcikKK3sKKwljb25zdCBzdHJ1Y3QgbmZfbG9nZ2VyICpsbG9nOwogCiAJaWYgKHBmID49IEFSUkFZX1NJWkUobmZfbG9nZ2VycykpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JLyogQW55IHNldHVwIG9mIGxvZ2dpbmcgbWVtYmVycyBtdXN0IGJlIGRvbmUgYmVmb3JlCi0JICogc3Vic3RpdHV0aW5nIHBvaW50ZXIuICovCi0JcmV0ID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZuZl9sb2dfbXV0ZXgpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OworCW11dGV4X2xvY2soJm5mX2xvZ19tdXRleCk7CiAKLQlpZiAoIW5mX2xvZ2dlcnNbcGZdKQotCQlyY3VfYXNzaWduX3BvaW50ZXIobmZfbG9nZ2Vyc1twZl0sIGxvZ2dlcik7Ci0JZWxzZSBpZiAobmZfbG9nZ2Vyc1twZl0gPT0gbG9nZ2VyKQotCQlyZXQgPSAtRUVYSVNUOwotCWVsc2UKLQkJcmV0ID0gLUVCVVNZOworCWlmIChwZiA9PSBORlBST1RPX1VOU1BFQykgeworCQlpbnQgaTsKKwkJZm9yIChpID0gTkZQUk9UT19VTlNQRUM7IGkgPCBORlBST1RPX05VTVBST1RPOyBpKyspCisJCQlsaXN0X2FkZF90YWlsKCYobG9nZ2VyLT5saXN0W2ldKSwgJihuZl9sb2dnZXJzX2xbaV0pKTsKKwl9IGVsc2UgeworCQkvKiByZWdpc3RlciBhdCBlbmQgb2YgbGlzdCB0byBob25vciBmaXJzdCByZWdpc3RlciB3aW4gKi8KKwkJbGlzdF9hZGRfdGFpbCgmbG9nZ2VyLT5saXN0W3BmXSwgJm5mX2xvZ2dlcnNfbFtwZl0pOworCQlsbG9nID0gcmN1X2RlcmVmZXJlbmNlKG5mX2xvZ2dlcnNbcGZdKTsKKwkJaWYgKGxsb2cgPT0gTlVMTCkKKwkJCXJjdV9hc3NpZ25fcG9pbnRlcihuZl9sb2dnZXJzW3BmXSwgbG9nZ2VyKTsKKwl9CiAKIAltdXRleF91bmxvY2soJm5mX2xvZ19tdXRleCk7Ci0JcmV0dXJuIHJldDsKKworCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChuZl9sb2dfcmVnaXN0ZXIpOwogCi12b2lkIG5mX2xvZ191bnJlZ2lzdGVyX3BmKHVfaW50OF90IHBmKQordm9pZCBuZl9sb2dfdW5yZWdpc3RlcihzdHJ1Y3QgbmZfbG9nZ2VyICpsb2dnZXIpCiB7Ci0JaWYgKHBmID49IEFSUkFZX1NJWkUobmZfbG9nZ2VycykpCi0JCXJldHVybjsKLQltdXRleF9sb2NrKCZuZl9sb2dfbXV0ZXgpOwotCXJjdV9hc3NpZ25fcG9pbnRlcihuZl9sb2dnZXJzW3BmXSwgTlVMTCk7Ci0JbXV0ZXhfdW5sb2NrKCZuZl9sb2dfbXV0ZXgpOwotCi0JLyogR2l2ZSB0aW1lIHRvIGNvbmN1cnJlbnQgcmVhZGVycy4gKi8KLQlzeW5jaHJvbml6ZV9yY3UoKTsKLX0KLUVYUE9SVF9TWU1CT0wobmZfbG9nX3VucmVnaXN0ZXJfcGYpOwotCi12b2lkIG5mX2xvZ191bnJlZ2lzdGVyKGNvbnN0IHN0cnVjdCBuZl9sb2dnZXIgKmxvZ2dlcikKLXsKKwljb25zdCBzdHJ1Y3QgbmZfbG9nZ2VyICpjX2xvZ2dlcjsKIAlpbnQgaTsKIAogCW11dGV4X2xvY2soJm5mX2xvZ19tdXRleCk7CiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobmZfbG9nZ2Vycyk7IGkrKykgewotCQlpZiAobmZfbG9nZ2Vyc1tpXSA9PSBsb2dnZXIpCisJCWNfbG9nZ2VyID0gcmN1X2RlcmVmZXJlbmNlKG5mX2xvZ2dlcnNbaV0pOworCQlpZiAoY19sb2dnZXIgPT0gbG9nZ2VyKQogCQkJcmN1X2Fzc2lnbl9wb2ludGVyKG5mX2xvZ2dlcnNbaV0sIE5VTEwpOworCQlsaXN0X2RlbCgmbG9nZ2VyLT5saXN0W2ldKTsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZuZl9sb2dfbXV0ZXgpOwogCkBAIC03Myw2ICs3OCwyNyBAQAogfQogRVhQT1JUX1NZTUJPTChuZl9sb2dfdW5yZWdpc3Rlcik7CiAKK2ludCBuZl9sb2dfYmluZF9wZih1X2ludDhfdCBwZiwgY29uc3Qgc3RydWN0IG5mX2xvZ2dlciAqbG9nZ2VyKQoreworCW11dGV4X2xvY2soJm5mX2xvZ19tdXRleCk7CisJaWYgKF9fZmluZF9sb2dnZXIocGYsIGxvZ2dlci0+bmFtZSkgPT0gTlVMTCkgeworCQltdXRleF91bmxvY2soJm5mX2xvZ19tdXRleCk7CisJCXJldHVybiAtRU5PRU5UOworCX0KKwlyY3VfYXNzaWduX3BvaW50ZXIobmZfbG9nZ2Vyc1twZl0sIGxvZ2dlcik7CisJbXV0ZXhfdW5sb2NrKCZuZl9sb2dfbXV0ZXgpOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChuZl9sb2dfYmluZF9wZik7CisKK3ZvaWQgbmZfbG9nX3VuYmluZF9wZih1X2ludDhfdCBwZikKK3sKKwltdXRleF9sb2NrKCZuZl9sb2dfbXV0ZXgpOworCXJjdV9hc3NpZ25fcG9pbnRlcihuZl9sb2dnZXJzW3BmXSwgTlVMTCk7CisJbXV0ZXhfdW5sb2NrKCZuZl9sb2dfbXV0ZXgpOworfQorRVhQT1JUX1NZTUJPTChuZl9sb2dfdW5iaW5kX3BmKTsKKwogdm9pZCBuZl9sb2dfcGFja2V0KHVfaW50OF90IHBmLAogCQkgICB1bnNpZ25lZCBpbnQgaG9va251bSwKIAkJICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKQEAgLTEyOSwxMyArMTU1LDM3IEBACiB7CiAJbG9mZl90ICpwb3MgPSB2OwogCWNvbnN0IHN0cnVjdCBuZl9sb2dnZXIgKmxvZ2dlcjsKKwlzdHJ1Y3QgbmZfbG9nZ2VyICp0OworCWludCByZXQ7CiAKIAlsb2dnZXIgPSByY3VfZGVyZWZlcmVuY2UobmZfbG9nZ2Vyc1sqcG9zXSk7CiAKIAlpZiAoIWxvZ2dlcikKLQkJcmV0dXJuIHNlcV9wcmludGYocywgIiUybGxkIE5PTkVcbiIsICpwb3MpOworCQlyZXQgPSBzZXFfcHJpbnRmKHMsICIlMmxsZCBOT05FICgiLCAqcG9zKTsKKwllbHNlCisJCXJldCA9IHNlcV9wcmludGYocywgIiUybGxkICVzICgiLCAqcG9zLCBsb2dnZXItPm5hbWUpOwogCi0JcmV0dXJuIHNlcV9wcmludGYocywgIiUybGxkICVzXG4iLCAqcG9zLCBsb2dnZXItPm5hbWUpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJbXV0ZXhfbG9jaygmbmZfbG9nX211dGV4KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHQsICZuZl9sb2dnZXJzX2xbKnBvc10sIGxpc3RbKnBvc10pIHsKKwkJcmV0ID0gc2VxX3ByaW50ZihzLCAiJXMiLCB0LT5uYW1lKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCW11dGV4X3VubG9jaygmbmZfbG9nX211dGV4KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwkJaWYgKCZ0LT5saXN0Wypwb3NdICE9IG5mX2xvZ2dlcnNfbFsqcG9zXS5wcmV2KSB7CisJCQlyZXQgPSBzZXFfcHJpbnRmKHMsICIsIik7CisJCQlpZiAocmV0IDwgMCkgeworCQkJCW11dGV4X3VubG9jaygmbmZfbG9nX211dGV4KTsKKwkJCQlyZXR1cm4gcmV0OworCQkJfQorCQl9CisJfQorCW11dGV4X3VubG9jaygmbmZfbG9nX211dGV4KTsKKworCXJldHVybiBzZXFfcHJpbnRmKHMsICIpXG4iKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBuZmxvZ19zZXFfb3BzID0gewpAQCAtMTU4LDE1ICsyMDgsMTAyIEBACiAJLnJlbGVhc2UgPSBzZXFfcmVsZWFzZSwKIH07CiAKKwogI2VuZGlmIC8qIFBST0NfRlMgKi8KIAorI2lmZGVmIENPTkZJR19TWVNDVEwKK3N0cnVjdCBjdGxfcGF0aCBuZl9sb2dfc3lzY3RsX3BhdGhbXSA9IHsKKwl7IC5wcm9jbmFtZSA9ICJuZXQiLCAuY3RsX25hbWUgPSBDVExfTkVULCB9LAorCXsgLnByb2NuYW1lID0gIm5ldGZpbHRlciIsIC5jdGxfbmFtZSA9IE5FVF9ORVRGSUxURVIsIH0sCisJeyAucHJvY25hbWUgPSAibmZfbG9nIiwgLmN0bF9uYW1lID0gQ1RMX1VOTlVNQkVSRUQsIH0sCisJeyB9Cit9OworCitzdGF0aWMgY2hhciBuZl9sb2dfc3lzY3RsX2ZuYW1lc1tORlBST1RPX05VTVBST1RPLU5GUFJPVE9fVU5TUEVDXVszXTsKK3N0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIG5mX2xvZ19zeXNjdGxfdGFibGVbTkZQUk9UT19OVU1QUk9UTysxXTsKK3N0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqbmZfbG9nX2Rpcl9oZWFkZXI7CisKK3N0YXRpYyBpbnQgbmZfbG9nX3Byb2NfZG9zdHJpbmcoY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKKwkJCSB2b2lkICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKQoreworCWNvbnN0IHN0cnVjdCBuZl9sb2dnZXIgKmxvZ2dlcjsKKwlpbnQgciA9IDA7CisJaW50IHRpbmRleCA9ICh1bnNpZ25lZCBsb25nKXRhYmxlLT5leHRyYTE7CisKKwlpZiAod3JpdGUpIHsKKwkJaWYgKCFzdHJjbXAoYnVmZmVyLCAiTk9ORSIpKSB7CisJCQluZl9sb2dfdW5iaW5kX3BmKHRpbmRleCk7CisJCQlyZXR1cm4gMDsKKwkJfQorCQltdXRleF9sb2NrKCZuZl9sb2dfbXV0ZXgpOworCQlsb2dnZXIgPSBfX2ZpbmRfbG9nZ2VyKHRpbmRleCwgYnVmZmVyKTsKKwkJaWYgKGxvZ2dlciA9PSBOVUxMKSB7CisJCQltdXRleF91bmxvY2soJm5mX2xvZ19tdXRleCk7CisJCQlyZXR1cm4gLUVOT0VOVDsKKwkJfQorCQlyY3VfYXNzaWduX3BvaW50ZXIobmZfbG9nZ2Vyc1t0aW5kZXhdLCBsb2dnZXIpOworCQltdXRleF91bmxvY2soJm5mX2xvZ19tdXRleCk7CisJfSBlbHNlIHsKKwkJcmN1X3JlYWRfbG9jaygpOworCQlsb2dnZXIgPSByY3VfZGVyZWZlcmVuY2UobmZfbG9nZ2Vyc1t0aW5kZXhdKTsKKwkJaWYgKCFsb2dnZXIpCisJCQl0YWJsZS0+ZGF0YSA9ICJOT05FIjsKKwkJZWxzZQorCQkJdGFibGUtPmRhdGEgPSBsb2dnZXItPm5hbWU7CisJCXIgPSBwcm9jX2Rvc3RyaW5nKHRhYmxlLCB3cml0ZSwgZmlscCwgYnVmZmVyLCBsZW5wLCBwcG9zKTsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisJfQorCisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyBfX2luaXQgaW50IG5ldGZpbHRlcl9sb2dfc3lzY3RsX2luaXQodm9pZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IE5GUFJPVE9fVU5TUEVDOyBpIDwgTkZQUk9UT19OVU1QUk9UTzsgaSsrKSB7CisJCXNucHJpbnRmKG5mX2xvZ19zeXNjdGxfZm5hbWVzW2ktTkZQUk9UT19VTlNQRUNdLCAzLCAiJWQiLCBpKTsKKwkJbmZfbG9nX3N5c2N0bF90YWJsZVtpXS5jdGxfbmFtZQk9IENUTF9VTk5VTUJFUkVEOworCQluZl9sb2dfc3lzY3RsX3RhYmxlW2ldLnByb2NuYW1lCT0KKwkJCW5mX2xvZ19zeXNjdGxfZm5hbWVzW2ktTkZQUk9UT19VTlNQRUNdOworCQluZl9sb2dfc3lzY3RsX3RhYmxlW2ldLmRhdGEgPSBOVUxMOworCQluZl9sb2dfc3lzY3RsX3RhYmxlW2ldLm1heGxlbiA9CisJCQlORkxPR0dFUl9OQU1FX0xFTiAqIHNpemVvZihjaGFyKTsKKwkJbmZfbG9nX3N5c2N0bF90YWJsZVtpXS5tb2RlID0gMDY0NDsKKwkJbmZfbG9nX3N5c2N0bF90YWJsZVtpXS5wcm9jX2hhbmRsZXIgPSBuZl9sb2dfcHJvY19kb3N0cmluZzsKKwkJbmZfbG9nX3N5c2N0bF90YWJsZVtpXS5leHRyYTEgPSAodm9pZCAqKSh1bnNpZ25lZCBsb25nKSBpOworCX0KKworCW5mX2xvZ19kaXJfaGVhZGVyID0gcmVnaXN0ZXJfc3lzY3RsX3BhdGhzKG5mX2xvZ19zeXNjdGxfcGF0aCwKKwkJCQkgICAgICAgbmZfbG9nX3N5c2N0bF90YWJsZSk7CisJaWYgKCFuZl9sb2dfZGlyX2hlYWRlcikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXR1cm4gMDsKK30KKyNlbHNlCitzdGF0aWMgX19pbml0IGludCBuZXRmaWx0ZXJfbG9nX3N5c2N0bF9pbml0KHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogQ09ORklHX1NZU0NUTCAqLwogCiBpbnQgX19pbml0IG5ldGZpbHRlcl9sb2dfaW5pdCh2b2lkKQogeworCWludCBpLCByOwogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiAJaWYgKCFwcm9jX2NyZWF0ZSgibmZfbG9nIiwgU19JUlVHTywKIAkJCSBwcm9jX25ldF9uZXRmaWx0ZXIsICZuZmxvZ19maWxlX29wcykpCiAJCXJldHVybiAtMTsKICNlbmRpZgorCisJLyogRXJyb3JzIHdpbGwgdHJpZ2dlciBwYW5pYywgdW5yb2xsIG9uIGVycm9yIGlzIHVubmVjZXNzYXJ5LiAqLworCXIgPSBuZXRmaWx0ZXJfbG9nX3N5c2N0bF9pbml0KCk7CisJaWYgKHIgPCAwKQorCQlyZXR1cm4gcjsKKworCWZvciAoaSA9IE5GUFJPVE9fVU5TUEVDOyBpIDwgTkZQUk9UT19OVU1QUk9UTzsgaSsrKQorCQlJTklUX0xJU1RfSEVBRCgmKG5mX2xvZ2dlcnNfbFtpXSkpOworCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX3Rwcm94eV9jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL25mX3Rwcm94eV9jb3JlLmMKaW5kZXggY2RjOTdmMy4uNTQ5MGZjMyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl90cHJveHlfY29yZS5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfdHByb3h5X2NvcmUuYwpAQCAtNzEsNiArNzEsNyBAQAogbmZfdHByb3h5X2Fzc2lnbl9zb2NrKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaykKIHsKIAlpZiAoaW5ldF9zayhzayktPnRyYW5zcGFyZW50KSB7CisJCXNrYl9vcnBoYW4oc2tiKTsKIAkJc2tiLT5zayA9IHNrOwogCQlza2ItPmRlc3RydWN0b3IgPSBuZl90cHJveHlfZGVzdHJ1Y3RvcjsKIAkJcmV0dXJuIDE7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGluay5jIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmsuYwppbmRleCA5YzBiYTE3Li4yNzg1ZDY2IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGluay5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmMKQEAgLTExMyw2ICsxMTMsMTIgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG5mbmV0bGlua19zZW5kKTsKIAordm9pZCBuZm5ldGxpbmtfc2V0X2Vycih1MzIgcGlkLCB1MzIgZ3JvdXAsIGludCBlcnJvcikKK3sKKwluZXRsaW5rX3NldF9lcnIobmZubCwgcGlkLCBncm91cCwgZXJyb3IpOworfQorRVhQT1JUX1NZTUJPTF9HUEwobmZuZXRsaW5rX3NldF9lcnIpOworCiBpbnQgbmZuZXRsaW5rX3VuaWNhc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdV9pbnQzMl90IHBpZCwgaW50IGZsYWdzKQogewogCXJldHVybiBuZXRsaW5rX3VuaWNhc3QobmZubCwgc2tiLCBwaWQsIGZsYWdzKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmMKaW5kZXggYzcxMmU5Zi4uZmQzMjZhYyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmMKQEAgLTY5Myw3ICs2OTMsNyBAQAogCXJldHVybiAtRU5PVFNVUFA7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfbG9nZ2VyIG5mdWxubF9sb2dnZXIgPSB7CitzdGF0aWMgc3RydWN0IG5mX2xvZ2dlciBuZnVsbmxfbG9nZ2VyIF9fcmVhZF9tb3N0bHkgPSB7CiAJLm5hbWUJPSAibmZuZXRsaW5rX2xvZyIsCiAJLmxvZ2ZuCT0gJm5mdWxubF9sb2dfcGFja2V0LAogCS5tZQk9IFRISVNfTU9EVUxFLApAQCAtNzI1LDkgKzcyNSw5IEBACiAJCS8qIENvbW1hbmRzIHdpdGhvdXQgcXVldWUgY29udGV4dCAqLwogCQlzd2l0Y2ggKGNtZC0+Y29tbWFuZCkgewogCQljYXNlIE5GVUxOTF9DRkdfQ01EX1BGX0JJTkQ6Ci0JCQlyZXR1cm4gbmZfbG9nX3JlZ2lzdGVyKHBmLCAmbmZ1bG5sX2xvZ2dlcik7CisJCQlyZXR1cm4gbmZfbG9nX2JpbmRfcGYocGYsICZuZnVsbmxfbG9nZ2VyKTsKIAkJY2FzZSBORlVMTkxfQ0ZHX0NNRF9QRl9VTkJJTkQ6Ci0JCQluZl9sb2dfdW5yZWdpc3Rlcl9wZihwZik7CisJCQluZl9sb2dfdW5iaW5kX3BmKHBmKTsKIAkJCXJldHVybiAwOwogCQl9CiAJfQpAQCAtOTUyLDE3ICs5NTIsMjUgQEAKIAkJZ290byBjbGVhbnVwX25ldGxpbmtfbm90aWZpZXI7CiAJfQogCisJc3RhdHVzID0gbmZfbG9nX3JlZ2lzdGVyKE5GUFJPVE9fVU5TUEVDLCAmbmZ1bG5sX2xvZ2dlcik7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJsb2c6IGZhaWxlZCB0byByZWdpc3RlciBsb2dnZXJcbiIpOworCQlnb3RvIGNsZWFudXBfc3Vic3lzOworCX0KKwogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiAJaWYgKCFwcm9jX2NyZWF0ZSgibmZuZXRsaW5rX2xvZyIsIDA0NDAsCiAJCQkgcHJvY19uZXRfbmV0ZmlsdGVyLCAmbmZ1bF9maWxlX29wcykpCi0JCWdvdG8gY2xlYW51cF9zdWJzeXM7CisJCWdvdG8gY2xlYW51cF9sb2dnZXI7CiAjZW5kaWYKIAlyZXR1cm4gc3RhdHVzOwogCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKK2NsZWFudXBfbG9nZ2VyOgorCW5mX2xvZ191bnJlZ2lzdGVyKCZuZnVsbmxfbG9nZ2VyKTsKKyNlbmRpZgogY2xlYW51cF9zdWJzeXM6CiAJbmZuZXRsaW5rX3N1YnN5c191bnJlZ2lzdGVyKCZuZnVsbmxfc3Vic3lzKTsKLSNlbmRpZgogY2xlYW51cF9uZXRsaW5rX25vdGlmaWVyOgogCW5ldGxpbmtfdW5yZWdpc3Rlcl9ub3RpZmllcigmbmZ1bG5sX3J0bmxfbm90aWZpZXIpOwogCXJldHVybiBzdGF0dXM7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMgYi9uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMKaW5kZXggNWJhY2NmYS4uNTA5YTk1NiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94X3RhYmxlcy5jCisrKyBiL25ldC9uZXRmaWx0ZXIveF90YWJsZXMuYwpAQCAtNjI1LDYgKzYyNSwyMCBAQAogfQogRVhQT1JUX1NZTUJPTCh4dF9mcmVlX3RhYmxlX2luZm8pOwogCit2b2lkIHh0X3RhYmxlX2VudHJ5X3N3YXBfcmN1KHN0cnVjdCB4dF90YWJsZV9pbmZvICpvbGRpbmZvLAorCQkJICAgICBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqbmV3aW5mbykKK3sKKwl1bnNpZ25lZCBpbnQgY3B1OworCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgeworCQl2b2lkICpwID0gb2xkaW5mby0+ZW50cmllc1tjcHVdOworCQlyY3VfYXNzaWduX3BvaW50ZXIob2xkaW5mby0+ZW50cmllc1tjcHVdLCBuZXdpbmZvLT5lbnRyaWVzW2NwdV0pOworCQluZXdpbmZvLT5lbnRyaWVzW2NwdV0gPSBwOworCX0KKworfQorRVhQT1JUX1NZTUJPTF9HUEwoeHRfdGFibGVfZW50cnlfc3dhcF9yY3UpOworCiAvKiBGaW5kIHRhYmxlIGJ5IG5hbWUsIGdyYWJzIG11dGV4ICYgcmVmLiAgUmV0dXJucyBFUlJfUFRSKCkgb24gZXJyb3IuICovCiBzdHJ1Y3QgeHRfdGFibGUgKnh0X2ZpbmRfdGFibGVfbG9jayhzdHJ1Y3QgbmV0ICpuZXQsIHVfaW50OF90IGFmLAogCQkJCSAgICBjb25zdCBjaGFyICpuYW1lKQpAQCAtNjcxLDIxICs2ODUsMjIgQEAKIAlzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqb2xkaW5mbywgKnByaXZhdGU7CiAKIAkvKiBEbyB0aGUgc3Vic3RpdHV0aW9uLiAqLwotCXdyaXRlX2xvY2tfYmgoJnRhYmxlLT5sb2NrKTsKKwltdXRleF9sb2NrKCZ0YWJsZS0+bG9jayk7CiAJcHJpdmF0ZSA9IHRhYmxlLT5wcml2YXRlOwogCS8qIENoZWNrIGluc2lkZSBsb2NrOiBpcyB0aGUgb2xkIG51bWJlciBjb3JyZWN0PyAqLwogCWlmIChudW1fY291bnRlcnMgIT0gcHJpdmF0ZS0+bnVtYmVyKSB7CiAJCWR1cHJpbnRmKCJudW1fY291bnRlcnMgIT0gdGFibGUtPnByaXZhdGUtPm51bWJlciAoJXUvJXUpXG4iLAogCQkJIG51bV9jb3VudGVycywgcHJpdmF0ZS0+bnVtYmVyKTsKLQkJd3JpdGVfdW5sb2NrX2JoKCZ0YWJsZS0+bG9jayk7CisJCW11dGV4X3VubG9jaygmdGFibGUtPmxvY2spOwogCQkqZXJyb3IgPSAtRUFHQUlOOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAJb2xkaW5mbyA9IHByaXZhdGU7Ci0JdGFibGUtPnByaXZhdGUgPSBuZXdpbmZvOworCXJjdV9hc3NpZ25fcG9pbnRlcih0YWJsZS0+cHJpdmF0ZSwgbmV3aW5mbyk7CiAJbmV3aW5mby0+aW5pdGlhbF9lbnRyaWVzID0gb2xkaW5mby0+aW5pdGlhbF9lbnRyaWVzOwotCXdyaXRlX3VubG9ja19iaCgmdGFibGUtPmxvY2spOworCW11dGV4X3VubG9jaygmdGFibGUtPmxvY2spOwogCisJc3luY2hyb25pemVfbmV0KCk7CiAJcmV0dXJuIG9sZGluZm87CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh4dF9yZXBsYWNlX3RhYmxlKTsKQEAgLTcxOSw3ICs3MzQsOCBAQAogCiAJLyogU2ltcGxpZmllcyByZXBsYWNlX3RhYmxlIGNvZGUuICovCiAJdGFibGUtPnByaXZhdGUgPSBib290c3RyYXA7Ci0Jcndsb2NrX2luaXQoJnRhYmxlLT5sb2NrKTsKKwltdXRleF9pbml0KCZ0YWJsZS0+bG9jayk7CisKIAlpZiAoIXh0X3JlcGxhY2VfdGFibGUodGFibGUsIDAsIG5ld2luZm8sICZyZXQpKQogCQlnb3RvIHVubG9jazsKIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9ITC5jIGIvbmV0L25ldGZpbHRlci94dF9ITC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwZTc4OWUKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvbmV0ZmlsdGVyL3h0X0hMLmMKQEAgLTAsMCArMSwxNzEgQEAKKy8qCisgKiBUVEwgbW9kaWZpY2F0aW9uIHRhcmdldCBmb3IgSVAgdGFibGVzCisgKiAoQykgMjAwMCwyMDA1IGJ5IEhhcmFsZCBXZWx0ZSA8bGFmb3JnZUBuZXRmaWx0ZXIub3JnPgorICoKKyAqIEhvcCBMaW1pdCBtb2RpZmljYXRpb24gdGFyZ2V0IGZvciBpcDZ0YWJsZXMKKyAqIE1hY2llaiBTb2x0eXNpYWsgPHNvbHRAZG5zLnRveGljZmlsbXMudHY+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvaXAuaD4KKyNpbmNsdWRlIDxsaW51eC9pcHY2Lmg+CisjaW5jbHVkZSA8bmV0L2NoZWNrc3VtLmg+CisKKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfVFRMLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9ITC5oPgorCitNT0RVTEVfQVVUSE9SKCJIYXJhbGQgV2VsdGUgPGxhZm9yZ2VAbmV0ZmlsdGVyLm9yZz4iKTsKK01PRFVMRV9BVVRIT1IoIk1hY2llaiBTb2x0eXNpYWsgPHNvbHRAZG5zLnRveGljZmlsbXMudHY+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlh0YWJsZXM6IEhvcGxpbWl0L1RUTCBMaW1pdCBmaWVsZCBtb2RpZmljYXRpb24gdGFyZ2V0Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK3R0bF90ZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgeHRfdGFyZ2V0X3BhcmFtICpwYXIpCit7CisJc3RydWN0IGlwaGRyICppcGg7CisJY29uc3Qgc3RydWN0IGlwdF9UVExfaW5mbyAqaW5mbyA9IHBhci0+dGFyZ2luZm87CisJaW50IG5ld190dGw7CisKKwlpZiAoIXNrYl9tYWtlX3dyaXRhYmxlKHNrYiwgc2tiLT5sZW4pKQorCQlyZXR1cm4gTkZfRFJPUDsKKworCWlwaCA9IGlwX2hkcihza2IpOworCisJc3dpdGNoIChpbmZvLT5tb2RlKSB7CisJCWNhc2UgSVBUX1RUTF9TRVQ6CisJCQluZXdfdHRsID0gaW5mby0+dHRsOworCQkJYnJlYWs7CisJCWNhc2UgSVBUX1RUTF9JTkM6CisJCQluZXdfdHRsID0gaXBoLT50dGwgKyBpbmZvLT50dGw7CisJCQlpZiAobmV3X3R0bCA+IDI1NSkKKwkJCQluZXdfdHRsID0gMjU1OworCQkJYnJlYWs7CisJCWNhc2UgSVBUX1RUTF9ERUM6CisJCQluZXdfdHRsID0gaXBoLT50dGwgLSBpbmZvLT50dGw7CisJCQlpZiAobmV3X3R0bCA8IDApCisJCQkJbmV3X3R0bCA9IDA7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCW5ld190dGwgPSBpcGgtPnR0bDsKKwkJCWJyZWFrOworCX0KKworCWlmIChuZXdfdHRsICE9IGlwaC0+dHRsKSB7CisJCWNzdW1fcmVwbGFjZTIoJmlwaC0+Y2hlY2ssIGh0b25zKGlwaC0+dHRsIDw8IDgpLAorCQkJCQkgICBodG9ucyhuZXdfdHRsIDw8IDgpKTsKKwkJaXBoLT50dGwgPSBuZXdfdHRsOworCX0KKworCXJldHVybiBYVF9DT05USU5VRTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludAoraGxfdGc2KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF90YXJnZXRfcGFyYW0gKnBhcikKK3sKKwlzdHJ1Y3QgaXB2NmhkciAqaXA2aDsKKwljb25zdCBzdHJ1Y3QgaXA2dF9ITF9pbmZvICppbmZvID0gcGFyLT50YXJnaW5mbzsKKwlpbnQgbmV3X2hsOworCisJaWYgKCFza2JfbWFrZV93cml0YWJsZShza2IsIHNrYi0+bGVuKSkKKwkJcmV0dXJuIE5GX0RST1A7CisKKwlpcDZoID0gaXB2Nl9oZHIoc2tiKTsKKworCXN3aXRjaCAoaW5mby0+bW9kZSkgeworCQljYXNlIElQNlRfSExfU0VUOgorCQkJbmV3X2hsID0gaW5mby0+aG9wX2xpbWl0OworCQkJYnJlYWs7CisJCWNhc2UgSVA2VF9ITF9JTkM6CisJCQluZXdfaGwgPSBpcDZoLT5ob3BfbGltaXQgKyBpbmZvLT5ob3BfbGltaXQ7CisJCQlpZiAobmV3X2hsID4gMjU1KQorCQkJCW5ld19obCA9IDI1NTsKKwkJCWJyZWFrOworCQljYXNlIElQNlRfSExfREVDOgorCQkJbmV3X2hsID0gaXA2aC0+aG9wX2xpbWl0IC0gaW5mby0+aG9wX2xpbWl0OworCQkJaWYgKG5ld19obCA8IDApCisJCQkJbmV3X2hsID0gMDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJbmV3X2hsID0gaXA2aC0+aG9wX2xpbWl0OworCQkJYnJlYWs7CisJfQorCisJaXA2aC0+aG9wX2xpbWl0ID0gbmV3X2hsOworCisJcmV0dXJuIFhUX0NPTlRJTlVFOworfQorCitzdGF0aWMgYm9vbCB0dGxfdGdfY2hlY2soY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpCit7CisJY29uc3Qgc3RydWN0IGlwdF9UVExfaW5mbyAqaW5mbyA9IHBhci0+dGFyZ2luZm87CisKKwlpZiAoaW5mby0+bW9kZSA+IElQVF9UVExfTUFYTU9ERSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJpcHRfVFRMOiBpbnZhbGlkIG9yIHVua25vd24gTW9kZSAldVxuIiwKKwkJCWluZm8tPm1vZGUpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCWlmIChpbmZvLT5tb2RlICE9IElQVF9UVExfU0VUICYmIGluZm8tPnR0bCA9PSAwKQorCQlyZXR1cm4gZmFsc2U7CisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIGhsX3RnNl9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gKnBhcikKK3sKKwljb25zdCBzdHJ1Y3QgaXA2dF9ITF9pbmZvICppbmZvID0gcGFyLT50YXJnaW5mbzsKKworCWlmIChpbmZvLT5tb2RlID4gSVA2VF9ITF9NQVhNT0RFKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImlwNnRfSEw6IGludmFsaWQgb3IgdW5rbm93biBNb2RlICV1XG4iLAorCQkJaW5mby0+bW9kZSk7CisJCXJldHVybiBmYWxzZTsKKwl9CisJaWYgKGluZm8tPm1vZGUgIT0gSVA2VF9ITF9TRVQgJiYgaW5mby0+aG9wX2xpbWl0ID09IDApIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiaXA2dF9ITDogaW5jcmVtZW50L2RlY3JlbWVudCBkb2Vzbid0ICIKKwkJCSJtYWtlIHNlbnNlIHdpdGggdmFsdWUgMFxuIik7CisJCXJldHVybiBmYWxzZTsKKwl9CisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgeHRfdGFyZ2V0IGhsX3RnX3JlZ1tdIF9fcmVhZF9tb3N0bHkgPSB7CisJeworCQkubmFtZSAgICAgICA9ICJUVEwiLAorCQkucmV2aXNpb24gICA9IDAsCisJCS5mYW1pbHkgICAgID0gTkZQUk9UT19JUFY0LAorCQkudGFyZ2V0ICAgICA9IHR0bF90ZywKKwkJLnRhcmdldHNpemUgPSBzaXplb2Yoc3RydWN0IGlwdF9UVExfaW5mbyksCisJCS50YWJsZSAgICAgID0gIm1hbmdsZSIsCisJCS5jaGVja2VudHJ5ID0gdHRsX3RnX2NoZWNrLAorCQkubWUgICAgICAgICA9IFRISVNfTU9EVUxFLAorCX0sCisJeworCQkubmFtZSAgICAgICA9ICJITCIsCisJCS5yZXZpc2lvbiAgID0gMCwKKwkJLmZhbWlseSAgICAgPSBORlBST1RPX0lQVjYsCisJCS50YXJnZXQgICAgID0gaGxfdGc2LAorCQkudGFyZ2V0c2l6ZSA9IHNpemVvZihzdHJ1Y3QgaXA2dF9ITF9pbmZvKSwKKwkJLnRhYmxlICAgICAgPSAibWFuZ2xlIiwKKwkJLmNoZWNrZW50cnkgPSBobF90ZzZfY2hlY2ssCisJCS5tZSAgICAgICAgID0gVEhJU19NT0RVTEUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGhsX3RnX2luaXQodm9pZCkKK3sKKwlyZXR1cm4geHRfcmVnaXN0ZXJfdGFyZ2V0cyhobF90Z19yZWcsIEFSUkFZX1NJWkUoaGxfdGdfcmVnKSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBobF90Z19leGl0KHZvaWQpCit7CisJeHRfdW5yZWdpc3Rlcl90YXJnZXRzKGhsX3RnX3JlZywgQVJSQVlfU0laRShobF90Z19yZWcpKTsKK30KKworbW9kdWxlX2luaXQoaGxfdGdfaW5pdCk7Cittb2R1bGVfZXhpdChobF90Z19leGl0KTsKK01PRFVMRV9BTElBUygiaXB0X1RUTCIpOworTU9EVUxFX0FMSUFTKCJpcDZ0X0hMIik7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X0xFRC5jIGIvbmV0L25ldGZpbHRlci94dF9MRUQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmY3ODQzCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L25ldGZpbHRlci94dF9MRUQuYwpAQCAtMCwwICsxLDE2MSBAQAorLyoKKyAqIHh0X0xFRC5jIC0gbmV0ZmlsdGVyIHRhcmdldCB0byBtYWtlIExFRHMgYmxpbmsgdXBvbiBwYWNrZXQgbWF0Y2hlcworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBZGFtIE5pZWxzZW4gPGEubmllbHNlbkBzaGlrYWRpLm5ldD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSBVU0EuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKworI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94dF9MRUQuaD4KKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiQWRhbSBOaWVsc2VuIDxhLm5pZWxzZW5Ac2hpa2FkaS5uZXQ+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlh0YWJsZXM6IHRyaWdnZXIgTEVEIGRldmljZXMgb24gcGFja2V0IG1hdGNoIik7CisKKy8qCisgKiBUaGlzIGlzIGRlY2xhcmVkIGluIGhlcmUgKHRoZSBrZXJuZWwgbW9kdWxlKSBvbmx5LCB0byBhdm9pZCBoYXZpbmcgdGhlc2UKKyAqIGRlcGVuZGVuY2llcyBpbiB1c2Vyc3BhY2UgY29kZS4gIFRoaXMgaXMgd2hhdCB4dF9sZWRfaW5mby5pbnRlcm5hbF9kYXRhCisgKiBwb2ludHMgdG8uCisgKi8KK3N0cnVjdCB4dF9sZWRfaW5mb19pbnRlcm5hbCB7CisJc3RydWN0IGxlZF90cmlnZ2VyIG5ldGZpbHRlcl9sZWRfdHJpZ2dlcjsKKwlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKK307CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK2xlZF90ZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgeHRfdGFyZ2V0X3BhcmFtICpwYXIpCit7CisJY29uc3Qgc3RydWN0IHh0X2xlZF9pbmZvICpsZWRpbmZvID0gcGFyLT50YXJnaW5mbzsKKwlzdHJ1Y3QgeHRfbGVkX2luZm9faW50ZXJuYWwgKmxlZGludGVybmFsID0gbGVkaW5mby0+aW50ZXJuYWxfZGF0YTsKKworCS8qCisJICogSWYgImFsd2F5cyBibGluayIgaXMgZW5hYmxlZCwgYW5kIHRoZXJlJ3Mgc3RpbGwgc29tZSB0aW1lIHVudGlsIHRoZQorCSAqIExFRCB3aWxsIHN3aXRjaCBvZmYsIGJyaWVmbHkgc3dpdGNoIGl0IG9mZiBub3cuCisJICovCisJaWYgKChsZWRpbmZvLT5kZWxheSA+IDApICYmIGxlZGluZm8tPmFsd2F5c19ibGluayAmJgorCSAgICB0aW1lcl9wZW5kaW5nKCZsZWRpbnRlcm5hbC0+dGltZXIpKQorCQlsZWRfdHJpZ2dlcl9ldmVudCgmbGVkaW50ZXJuYWwtPm5ldGZpbHRlcl9sZWRfdHJpZ2dlcixMRURfT0ZGKTsKKworCWxlZF90cmlnZ2VyX2V2ZW50KCZsZWRpbnRlcm5hbC0+bmV0ZmlsdGVyX2xlZF90cmlnZ2VyLCBMRURfRlVMTCk7CisKKwkvKiBJZiB0aGVyZSdzIGEgcG9zaXRpdmUgZGVsYXksIHN0YXJ0L3VwZGF0ZSB0aGUgdGltZXIgKi8KKwlpZiAobGVkaW5mby0+ZGVsYXkgPiAwKSB7CisJCW1vZF90aW1lcigmbGVkaW50ZXJuYWwtPnRpbWVyLAorCQkJICBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhsZWRpbmZvLT5kZWxheSkpOworCisJLyogT3RoZXJ3aXNlIGlmIHRoZXJlIHdhcyBubyBkZWxheSBnaXZlbiwgYmxpbmsgYXMgZmFzdCBhcyBwb3NzaWJsZSAqLworCX0gZWxzZSBpZiAobGVkaW5mby0+ZGVsYXkgPT0gMCkgeworCQlsZWRfdHJpZ2dlcl9ldmVudCgmbGVkaW50ZXJuYWwtPm5ldGZpbHRlcl9sZWRfdHJpZ2dlciwgTEVEX09GRik7CisJfQorCisJLyogZWxzZSB0aGUgZGVsYXkgaXMgbmVnYXRpdmUsIHdoaWNoIG1lYW5zIHN3aXRjaCBvbiBhbmQgc3RheSBvbiAqLworCisJcmV0dXJuIFhUX0NPTlRJTlVFOworfQorCitzdGF0aWMgdm9pZCBsZWRfdGltZW91dF9jYWxsYmFjayh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IHh0X2xlZF9pbmZvICpsZWRpbmZvID0gKHN0cnVjdCB4dF9sZWRfaW5mbyAqKWRhdGE7CisJc3RydWN0IHh0X2xlZF9pbmZvX2ludGVybmFsICpsZWRpbnRlcm5hbCA9IGxlZGluZm8tPmludGVybmFsX2RhdGE7CisKKwlsZWRfdHJpZ2dlcl9ldmVudCgmbGVkaW50ZXJuYWwtPm5ldGZpbHRlcl9sZWRfdHJpZ2dlciwgTEVEX09GRik7Cit9CisKK3N0YXRpYyBib29sIGxlZF90Z19jaGVjayhjb25zdCBzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gKnBhcikKK3sKKwlzdHJ1Y3QgeHRfbGVkX2luZm8gKmxlZGluZm8gPSBwYXItPnRhcmdpbmZvOworCXN0cnVjdCB4dF9sZWRfaW5mb19pbnRlcm5hbCAqbGVkaW50ZXJuYWw7CisJaW50IGVycjsKKworCWlmIChsZWRpbmZvLT5pZFswXSA9PSAnXDAnKSB7CisJCXByaW50ayhLRVJOX0VSUiBLQlVJTERfTU9ETkFNRSAiOiBObyAnaWQnIHBhcmFtZXRlciBnaXZlbi5cbiIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJbGVkaW50ZXJuYWwgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgeHRfbGVkX2luZm9faW50ZXJuYWwpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWxlZGludGVybmFsKSB7CisJCXByaW50ayhLRVJOX0NSSVQgS0JVSUxEX01PRE5BTUUgIjogb3V0IG9mIG1lbW9yeVxuIik7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlsZWRpbnRlcm5hbC0+bmV0ZmlsdGVyX2xlZF90cmlnZ2VyLm5hbWUgPSBsZWRpbmZvLT5pZDsKKworCWVyciA9IGxlZF90cmlnZ2VyX3JlZ2lzdGVyKCZsZWRpbnRlcm5hbC0+bmV0ZmlsdGVyX2xlZF90cmlnZ2VyKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0NSSVQgS0JVSUxEX01PRE5BTUUKKwkJCSI6IGxlZF90cmlnZ2VyX3JlZ2lzdGVyKCkgZmFpbGVkXG4iKTsKKwkJaWYgKGVyciA9PSAtRUVYSVNUKQorCQkJcHJpbnRrKEtFUk5fRVJSIEtCVUlMRF9NT0ROQU1FCisJCQkJIjogVHJpZ2dlciBuYW1lIGlzIGFscmVhZHkgaW4gdXNlLlxuIik7CisJCWdvdG8gZXhpdF9hbGxvYzsKKwl9CisKKwkvKiBTZWUgaWYgd2UgbmVlZCB0byBzZXQgdXAgYSB0aW1lciAqLworCWlmIChsZWRpbmZvLT5kZWxheSA+IDApCisJCXNldHVwX3RpbWVyKCZsZWRpbnRlcm5hbC0+dGltZXIsIGxlZF90aW1lb3V0X2NhbGxiYWNrLAorCQkJICAgICh1bnNpZ25lZCBsb25nKWxlZGluZm8pOworCisJbGVkaW5mby0+aW50ZXJuYWxfZGF0YSA9IGxlZGludGVybmFsOworCisJcmV0dXJuIHRydWU7CisKK2V4aXRfYWxsb2M6CisJa2ZyZWUobGVkaW50ZXJuYWwpOworCisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgdm9pZCBsZWRfdGdfZGVzdHJveShjb25zdCBzdHJ1Y3QgeHRfdGdkdG9yX3BhcmFtICpwYXIpCit7CisJY29uc3Qgc3RydWN0IHh0X2xlZF9pbmZvICpsZWRpbmZvID0gcGFyLT50YXJnaW5mbzsKKwlzdHJ1Y3QgeHRfbGVkX2luZm9faW50ZXJuYWwgKmxlZGludGVybmFsID0gbGVkaW5mby0+aW50ZXJuYWxfZGF0YTsKKworCWlmIChsZWRpbmZvLT5kZWxheSA+IDApCisJCWRlbF90aW1lcl9zeW5jKCZsZWRpbnRlcm5hbC0+dGltZXIpOworCisJbGVkX3RyaWdnZXJfdW5yZWdpc3RlcigmbGVkaW50ZXJuYWwtPm5ldGZpbHRlcl9sZWRfdHJpZ2dlcik7CisJa2ZyZWUobGVkaW50ZXJuYWwpOworfQorCitzdGF0aWMgc3RydWN0IHh0X3RhcmdldCBsZWRfdGdfcmVnIF9fcmVhZF9tb3N0bHkgPSB7CisJLm5hbWUJCT0gIkxFRCIsCisJLnJldmlzaW9uCT0gMCwKKwkuZmFtaWx5CQk9IE5GUFJPVE9fVU5TUEVDLAorCS50YXJnZXQJCT0gbGVkX3RnLAorCS50YXJnZXRzaXplCT0gWFRfQUxJR04oc2l6ZW9mKHN0cnVjdCB4dF9sZWRfaW5mbykpLAorCS5jaGVja2VudHJ5CT0gbGVkX3RnX2NoZWNrLAorCS5kZXN0cm95CT0gbGVkX3RnX2Rlc3Ryb3ksCisJLm1lCQk9IFRISVNfTU9EVUxFLAorfTsKKworc3RhdGljIGludCBfX2luaXQgbGVkX3RnX2luaXQodm9pZCkKK3sKKwlyZXR1cm4geHRfcmVnaXN0ZXJfdGFyZ2V0KCZsZWRfdGdfcmVnKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGxlZF90Z19leGl0KHZvaWQpCit7CisJeHRfdW5yZWdpc3Rlcl90YXJnZXQoJmxlZF90Z19yZWcpOworfQorCittb2R1bGVfaW5pdChsZWRfdGdfaW5pdCk7Cittb2R1bGVfZXhpdChsZWRfdGdfZXhpdCk7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X2NsdXN0ZXIuYyBiL25ldC9uZXRmaWx0ZXIveHRfY2x1c3Rlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkNWJkODkKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvbmV0ZmlsdGVyL3h0X2NsdXN0ZXIuYwpAQCAtMCwwICsxLDE2NCBAQAorLyoKKyAqIChDKSAyMDA4LTIwMDkgUGFibG8gTmVpcmEgQXl1c28gPHBhYmxvQG5ldGZpbHRlci5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L2poYXNoLmg+CisjaW5jbHVkZSA8bGludXgvaXAuaD4KKyNpbmNsdWRlIDxuZXQvaXB2Ni5oPgorCisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfY2x1c3Rlci5oPgorCitzdGF0aWMgaW5saW5lIHVfaW50MzJfdCBuZl9jdF9vcmlnX2lwdjRfc3JjKGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCkKK3sKKwlyZXR1cm4gY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlLnNyYy51My5pcDsKK30KKworc3RhdGljIGlubGluZSBjb25zdCB2b2lkICpuZl9jdF9vcmlnX2lwdjZfc3JjKGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCkKK3sKKwlyZXR1cm4gY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlLnNyYy51My5pcDY7Cit9CisKK3N0YXRpYyBpbmxpbmUgdV9pbnQzMl90Cit4dF9jbHVzdGVyX2hhc2hfaXB2NCh1X2ludDMyX3QgaXAsIGNvbnN0IHN0cnVjdCB4dF9jbHVzdGVyX21hdGNoX2luZm8gKmluZm8pCit7CisJcmV0dXJuIGpoYXNoXzF3b3JkKGlwLCBpbmZvLT5oYXNoX3NlZWQpOworfQorCitzdGF0aWMgaW5saW5lIHVfaW50MzJfdAoreHRfY2x1c3Rlcl9oYXNoX2lwdjYoY29uc3Qgdm9pZCAqaXAsIGNvbnN0IHN0cnVjdCB4dF9jbHVzdGVyX21hdGNoX2luZm8gKmluZm8pCit7CisJcmV0dXJuIGpoYXNoMihpcCwgTkZfQ1RfVFVQTEVfTDNTSVpFIC8gc2l6ZW9mKF9fdTMyKSwgaW5mby0+aGFzaF9zZWVkKTsKK30KKworc3RhdGljIGlubGluZSB1X2ludDMyX3QKK3h0X2NsdXN0ZXJfaGFzaChjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsCisJCWNvbnN0IHN0cnVjdCB4dF9jbHVzdGVyX21hdGNoX2luZm8gKmluZm8pCit7CisJdV9pbnQzMl90IGhhc2ggPSAwOworCisJc3dpdGNoKG5mX2N0X2wzbnVtKGN0KSkgeworCWNhc2UgQUZfSU5FVDoKKwkJaGFzaCA9IHh0X2NsdXN0ZXJfaGFzaF9pcHY0KG5mX2N0X29yaWdfaXB2NF9zcmMoY3QpLCBpbmZvKTsKKwkJYnJlYWs7CisJY2FzZSBBRl9JTkVUNjoKKwkJaGFzaCA9IHh0X2NsdXN0ZXJfaGFzaF9pcHY2KG5mX2N0X29yaWdfaXB2Nl9zcmMoY3QpLCBpbmZvKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJV0FSTl9PTigxKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAoKCh1NjQpaGFzaCAqIGluZm8tPnRvdGFsX25vZGVzKSA+PiAzMik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbAoreHRfY2x1c3Rlcl9pc19tdWx0aWNhc3RfYWRkcihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1X2ludDhfdCBmYW1pbHkpCit7CisJYm9vbCBpc19tdWx0aWNhc3QgPSBmYWxzZTsKKworCXN3aXRjaChmYW1pbHkpIHsKKwljYXNlIE5GUFJPVE9fSVBWNDoKKwkJaXNfbXVsdGljYXN0ID0gaXB2NF9pc19tdWx0aWNhc3QoaXBfaGRyKHNrYiktPmRhZGRyKTsKKwkJYnJlYWs7CisJY2FzZSBORlBST1RPX0lQVjY6CisJCWlzX211bHRpY2FzdCA9IGlwdjZfYWRkcl90eXBlKCZpcHY2X2hkcihza2IpLT5kYWRkcikgJgorCQkJCQkJSVBWNl9BRERSX01VTFRJQ0FTVDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJV0FSTl9PTigxKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiBpc19tdWx0aWNhc3Q7Cit9CisKK3N0YXRpYyBib29sCit4dF9jbHVzdGVyX210KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF9tYXRjaF9wYXJhbSAqcGFyKQoreworCXN0cnVjdCBza19idWZmICpwc2tiID0gKHN0cnVjdCBza19idWZmICopc2tiOworCWNvbnN0IHN0cnVjdCB4dF9jbHVzdGVyX21hdGNoX2luZm8gKmluZm8gPSBwYXItPm1hdGNoaW5mbzsKKwljb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3Q7CisJZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm87CisJdW5zaWduZWQgbG9uZyBoYXNoOworCisJLyogVGhpcyBtYXRjaCBhc3N1bWVzIHRoYXQgYWxsIG5vZGVzIHNlZSB0aGUgc2FtZSBwYWNrZXRzLiBUaGlzIGNhbiBiZQorCSAqIGFjaGlldmVkIGlmIHRoZSBzd2l0Y2ggdGhhdCBjb25uZWN0cyB0aGUgY2x1c3RlciBub2RlcyBzdXBwb3J0IHNvbWUKKwkgKiBzb3J0IG9mICdwb3J0IG1pcnJvcmluZycuIEhvd2V2ZXIsIGlmIHlvdXIgc3dpdGNoIGRvZXMgbm90IHN1cHBvcnQKKwkgKiB0aGlzLCB5b3VyIGNsdXN0ZXIgbm9kZXMgY2FuIHJlcGx5IEFSUCByZXF1ZXN0IHVzaW5nIGEgbXVsdGljYXN0IE1BQworCSAqIGFkZHJlc3MuIFRodXMsIHlvdXIgc3dpdGNoIHdpbGwgZmxvb2QgdGhlIHNhbWUgcGFja2V0cyB0byB0aGUKKwkgKiBjbHVzdGVyIG5vZGVzIHdpdGggdGhlIHNhbWUgbXVsdGljYXN0IE1BQyBhZGRyZXNzLiBVc2luZyBhIG11bHRpY2FzdAorCSAqIGxpbmsgYWRkcmVzcyBpcyBhIFJGQyAxODEyIChzZWN0aW9uIDMuMy4yKSB2aW9sYXRpb24sIGJ1dCB0aGlzIHdvcmtzCisJICogZmluZSBpbiBwcmFjdGlzZS4KKwkgKgorCSAqIFVuZm9ydHVuYXRlbHksIGlmIHlvdSB1c2UgdGhlIG11bHRpY2FzdCBNQUMgYWRkcmVzcywgdGhlIGxpbmsgbGF5ZXIKKwkgKiBzZXRzIHNrYnVmZidzIHBrdF90eXBlIHRvIFBBQ0tFVF9NVUxUSUNBU1QsIHdoaWNoIGlzIG5vdCBhY2NlcHRlZAorCSAqIGJ5IFRDUCBhbmQgb3RoZXJzIGZvciBwYWNrZXRzIGNvbWluZyB0byB0aGlzIG5vZGUuIEZvciB0aGF0IHJlYXNvbiwKKwkgKiB0aGlzIG1hdGNoIG1hbmdsZXMgc2tidWZmJ3MgcGt0X3R5cGUgaWYgaXQgZGV0ZWN0cyBhIHBhY2tldAorCSAqIGFkZHJlc3NlZCB0byBhIHVuaWNhc3QgYWRkcmVzcyBidXQgdXNpbmcgUEFDS0VUX01VTFRJQ0FTVC4gWWVzLCBJCisJICoga25vdywgbWF0Y2hlcyBzaG91bGQgbm90IGFsdGVyIHBhY2tldHMsIGJ1dCB3ZSBhcmUgZG9pbmcgdGhpcyBoZXJlCisJICogYmVjYXVzZSB3ZSB3b3VsZCBuZWVkIHRvIGFkZCBhIFBLVFRZUEUgdGFyZ2V0IGZvciB0aGlzIHNvbGUgcHVycG9zZS4KKwkgKi8KKwlpZiAoIXh0X2NsdXN0ZXJfaXNfbXVsdGljYXN0X2FkZHIoc2tiLCBwYXItPmZhbWlseSkgJiYKKwkgICAgc2tiLT5wa3RfdHlwZSA9PSBQQUNLRVRfTVVMVElDQVNUKSB7CisJICAgIAlwc2tiLT5wa3RfdHlwZSA9IFBBQ0tFVF9IT1NUOworCX0KKworCWN0ID0gbmZfY3RfZ2V0KHNrYiwgJmN0aW5mbyk7CisJaWYgKGN0ID09IE5VTEwpCisJCXJldHVybiBmYWxzZTsKKworCWlmIChjdCA9PSAmbmZfY29ubnRyYWNrX3VudHJhY2tlZCkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKGN0LT5tYXN0ZXIpCisJCWhhc2ggPSB4dF9jbHVzdGVyX2hhc2goY3QtPm1hc3RlciwgaW5mbyk7CisJZWxzZQorCQloYXNoID0geHRfY2x1c3Rlcl9oYXNoKGN0LCBpbmZvKTsKKworCXJldHVybiAhISgoMSA8PCBoYXNoKSAmIGluZm8tPm5vZGVfbWFzaykgXgorCSAgICAgICAhIShpbmZvLT5mbGFncyAmIFhUX0NMVVNURVJfRl9JTlYpOworfQorCitzdGF0aWMgYm9vbCB4dF9jbHVzdGVyX210X2NoZWNrZW50cnkoY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpCit7CisJc3RydWN0IHh0X2NsdXN0ZXJfbWF0Y2hfaW5mbyAqaW5mbyA9IHBhci0+bWF0Y2hpbmZvOworCisJaWYgKGluZm8tPm5vZGVfbWFzayA+PSAoMSA8PCBpbmZvLT50b3RhbF9ub2RlcykpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ4dF9jbHVzdGVyOiB0aGlzIG5vZGUgbWFzayBjYW5ub3QgYmUgIgorCQkJCSJoaWdoZXIgdGhhbiB0aGUgdG90YWwgbnVtYmVyIG9mIG5vZGVzXG4iKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHN0cnVjdCB4dF9tYXRjaCB4dF9jbHVzdGVyX21hdGNoIF9fcmVhZF9tb3N0bHkgPSB7CisJLm5hbWUJCT0gImNsdXN0ZXIiLAorCS5mYW1pbHkJCT0gTkZQUk9UT19VTlNQRUMsCisJLm1hdGNoCQk9IHh0X2NsdXN0ZXJfbXQsCisJLmNoZWNrZW50cnkJPSB4dF9jbHVzdGVyX210X2NoZWNrZW50cnksCisJLm1hdGNoc2l6ZQk9IHNpemVvZihzdHJ1Y3QgeHRfY2x1c3Rlcl9tYXRjaF9pbmZvKSwKKwkubWUJCT0gVEhJU19NT0RVTEUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCB4dF9jbHVzdGVyX210X2luaXQodm9pZCkKK3sKKwlyZXR1cm4geHRfcmVnaXN0ZXJfbWF0Y2goJnh0X2NsdXN0ZXJfbWF0Y2gpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgeHRfY2x1c3Rlcl9tdF9maW5pKHZvaWQpCit7CisJeHRfdW5yZWdpc3Rlcl9tYXRjaCgmeHRfY2x1c3Rlcl9tYXRjaCk7Cit9CisKK01PRFVMRV9BVVRIT1IoIlBhYmxvIE5laXJhIEF5dXNvIDxwYWJsb0BuZXRmaWx0ZXIub3JnPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJYdGFibGVzOiBoYXNoLWJhc2VkIGNsdXN0ZXIgbWF0Y2giKTsKK01PRFVMRV9BTElBUygiaXB0X2NsdXN0ZXIiKTsKK01PRFVMRV9BTElBUygiaXA2dF9jbHVzdGVyIik7Cittb2R1bGVfaW5pdCh4dF9jbHVzdGVyX210X2luaXQpOworbW9kdWxlX2V4aXQoeHRfY2x1c3Rlcl9tdF9maW5pKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfaGFzaGxpbWl0LmMgYi9uZXQvbmV0ZmlsdGVyL3h0X2hhc2hsaW1pdC5jCmluZGV4IGY5N2ZkZWQuLmE1YjUzNjkgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfaGFzaGxpbWl0LmMKKysrIGIvbmV0L25ldGZpbHRlci94dF9oYXNobGltaXQuYwpAQCAtMTQ5LDcgKzE0OSw3IEBACiAJLyogaW5pdGlhbGl6ZSBoYXNoIHdpdGggcmFuZG9tIHZhbCBhdCB0aGUgdGltZSB3ZSBhbGxvY2F0ZQogCSAqIHRoZSBmaXJzdCBoYXNodGFibGUgZW50cnkgKi8KIAlpZiAoIWh0LT5ybmRfaW5pdGlhbGl6ZWQpIHsKLQkJZ2V0X3JhbmRvbV9ieXRlcygmaHQtPnJuZCwgNCk7CisJCWdldF9yYW5kb21fYnl0ZXMoJmh0LT5ybmQsIHNpemVvZihodC0+cm5kKSk7CiAJCWh0LT5ybmRfaW5pdGlhbGl6ZWQgPSAxOwogCX0KIApAQCAtNTY1LDggKzU2NSw3IEBACiBzdGF0aWMgYm9vbAogaGFzaGxpbWl0X210X3YwKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF9tYXRjaF9wYXJhbSAqcGFyKQogewotCWNvbnN0IHN0cnVjdCB4dF9oYXNobGltaXRfaW5mbyAqciA9Ci0JCSgoY29uc3Qgc3RydWN0IHh0X2hhc2hsaW1pdF9pbmZvICopcGFyLT5tYXRjaGluZm8pLT51Lm1hc3RlcjsKKwljb25zdCBzdHJ1Y3QgeHRfaGFzaGxpbWl0X2luZm8gKnIgPSBwYXItPm1hdGNoaW5mbzsKIAlzdHJ1Y3QgeHRfaGFzaGxpbWl0X2h0YWJsZSAqaGluZm8gPSByLT5oaW5mbzsKIAl1bnNpZ25lZCBsb25nIG5vdyA9IGppZmZpZXM7CiAJc3RydWN0IGRzdGhhc2hfZW50ICpkaDsKQEAgLTcwMiw4ICs3MDEsNiBAQAogCX0KIAltdXRleF91bmxvY2soJmhsaW1pdF9tdXRleCk7CiAKLQkvKiBVZ2x5IGhhY2s6IEZvciBTTVAsIHdlIG9ubHkgd2FudCB0byB1c2Ugb25lIHNldCAqLwotCXItPnUubWFzdGVyID0gcjsKIAlyZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9obC5jIGIvbmV0L25ldGZpbHRlci94dF9obC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3MjYxNTQKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvbmV0ZmlsdGVyL3h0X2hsLmMKQEAgLTAsMCArMSwxMDggQEAKKy8qCisgKiBJUCB0YWJsZXMgbW9kdWxlIGZvciBtYXRjaGluZyB0aGUgdmFsdWUgb2YgdGhlIFRUTAorICogKEMpIDIwMDAsMjAwMSBieSBIYXJhbGQgV2VsdGUgPGxhZm9yZ2VAbmV0ZmlsdGVyLm9yZz4KKyAqCisgKiBIb3AgTGltaXQgbWF0Y2hpbmcgbW9kdWxlCisgKiAoQykgMjAwMS0yMDAyIE1hY2llaiBTb2x0eXNpYWsgPHNvbHRAZG5zLnRveGljZmlsbXMudHY+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaXAuaD4KKyNpbmNsdWRlIDxsaW51eC9pcHY2Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisKKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfdHRsLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9obC5oPgorCitNT0RVTEVfQVVUSE9SKCJNYWNpZWogU29sdHlzaWFrIDxzb2x0QGRucy50b3hpY2ZpbG1zLnR2PiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJYdGFibGVzOiBIb3BsaW1pdC9UVEwgZmllbGQgbWF0Y2giKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBUygiaXB0X3R0bCIpOworTU9EVUxFX0FMSUFTKCJpcDZ0X2hsIik7CisKK3N0YXRpYyBib29sIHR0bF9tdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgeHRfbWF0Y2hfcGFyYW0gKnBhcikKK3sKKwljb25zdCBzdHJ1Y3QgaXB0X3R0bF9pbmZvICppbmZvID0gcGFyLT5tYXRjaGluZm87CisJY29uc3QgdTggdHRsID0gaXBfaGRyKHNrYiktPnR0bDsKKworCXN3aXRjaCAoaW5mby0+bW9kZSkgeworCQljYXNlIElQVF9UVExfRVE6CisJCQlyZXR1cm4gdHRsID09IGluZm8tPnR0bDsKKwkJY2FzZSBJUFRfVFRMX05FOgorCQkJcmV0dXJuIHR0bCAhPSBpbmZvLT50dGw7CisJCWNhc2UgSVBUX1RUTF9MVDoKKwkJCXJldHVybiB0dGwgPCBpbmZvLT50dGw7CisJCWNhc2UgSVBUX1RUTF9HVDoKKwkJCXJldHVybiB0dGwgPiBpbmZvLT50dGw7CisJCWRlZmF1bHQ6CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJpcHRfdHRsOiB1bmtub3duIG1vZGUgJWRcbiIsCisJCQkJaW5mby0+bW9kZSk7CisJCQlyZXR1cm4gZmFsc2U7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgYm9vbCBobF9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHh0X21hdGNoX3BhcmFtICpwYXIpCit7CisJY29uc3Qgc3RydWN0IGlwNnRfaGxfaW5mbyAqaW5mbyA9IHBhci0+bWF0Y2hpbmZvOworCWNvbnN0IHN0cnVjdCBpcHY2aGRyICppcDZoID0gaXB2Nl9oZHIoc2tiKTsKKworCXN3aXRjaCAoaW5mby0+bW9kZSkgeworCQljYXNlIElQNlRfSExfRVE6CisJCQlyZXR1cm4gaXA2aC0+aG9wX2xpbWl0ID09IGluZm8tPmhvcF9saW1pdDsKKwkJCWJyZWFrOworCQljYXNlIElQNlRfSExfTkU6CisJCQlyZXR1cm4gaXA2aC0+aG9wX2xpbWl0ICE9IGluZm8tPmhvcF9saW1pdDsKKwkJCWJyZWFrOworCQljYXNlIElQNlRfSExfTFQ6CisJCQlyZXR1cm4gaXA2aC0+aG9wX2xpbWl0IDwgaW5mby0+aG9wX2xpbWl0OworCQkJYnJlYWs7CisJCWNhc2UgSVA2VF9ITF9HVDoKKwkJCXJldHVybiBpcDZoLT5ob3BfbGltaXQgPiBpbmZvLT5ob3BfbGltaXQ7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgImlwNnRfaGw6IHVua25vd24gbW9kZSAlZFxuIiwKKwkJCQlpbmZvLT5tb2RlKTsKKwkJCXJldHVybiBmYWxzZTsKKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgeHRfbWF0Y2ggaGxfbXRfcmVnW10gX19yZWFkX21vc3RseSA9IHsKKwl7CisJCS5uYW1lICAgICAgID0gInR0bCIsCisJCS5yZXZpc2lvbiAgID0gMCwKKwkJLmZhbWlseSAgICAgPSBORlBST1RPX0lQVjQsCisJCS5tYXRjaCAgICAgID0gdHRsX210LAorCQkubWF0Y2hzaXplICA9IHNpemVvZihzdHJ1Y3QgaXB0X3R0bF9pbmZvKSwKKwkJLm1lICAgICAgICAgPSBUSElTX01PRFVMRSwKKwl9LAorCXsKKwkJLm5hbWUgICAgICAgPSAiaGwiLAorCQkucmV2aXNpb24gICA9IDAsCisJCS5mYW1pbHkgICAgID0gTkZQUk9UT19JUFY2LAorCQkubWF0Y2ggICAgICA9IGhsX210NiwKKwkJLm1hdGNoc2l6ZSAgPSBzaXplb2Yoc3RydWN0IGlwNnRfaGxfaW5mbyksCisJCS5tZSAgICAgICAgID0gVEhJU19NT0RVTEUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGhsX210X2luaXQodm9pZCkKK3sKKwlyZXR1cm4geHRfcmVnaXN0ZXJfbWF0Y2hlcyhobF9tdF9yZWcsIEFSUkFZX1NJWkUoaGxfbXRfcmVnKSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBobF9tdF9leGl0KHZvaWQpCit7CisJeHRfdW5yZWdpc3Rlcl9tYXRjaGVzKGhsX210X3JlZywgQVJSQVlfU0laRShobF9tdF9yZWcpKTsKK30KKworbW9kdWxlX2luaXQoaGxfbXRfaW5pdCk7Cittb2R1bGVfZXhpdChobF9tdF9leGl0KTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfbGltaXQuYyBiL25ldC9uZXRmaWx0ZXIveHRfbGltaXQuYwppbmRleCBjOTA4ZDY5Li4yZTgwODllIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X2xpbWl0LmMKKysrIGIvbmV0L25ldGZpbHRlci94dF9saW1pdC5jCkBAIC0xNCw2ICsxNCwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94dF9saW1pdC5oPgogCitzdHJ1Y3QgeHRfbGltaXRfcHJpdiB7CisJdW5zaWduZWQgbG9uZyBwcmV2OworCXVpbnQzMl90IGNyZWRpdDsKK307CisKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BVVRIT1IoIkhlcnZlIEV5Y2hlbm5lIDxydkB3YWxsZmlyZS5vcmc+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlh0YWJsZXM6IHJhdGUtbGltaXQgbWF0Y2giKTsKQEAgLTYwLDE4ICs2NSwxOCBAQAogc3RhdGljIGJvb2wKIGxpbWl0X210KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF9tYXRjaF9wYXJhbSAqcGFyKQogewotCXN0cnVjdCB4dF9yYXRlaW5mbyAqciA9Ci0JCSgoY29uc3Qgc3RydWN0IHh0X3JhdGVpbmZvICopcGFyLT5tYXRjaGluZm8pLT5tYXN0ZXI7CisJY29uc3Qgc3RydWN0IHh0X3JhdGVpbmZvICpyID0gcGFyLT5tYXRjaGluZm87CisJc3RydWN0IHh0X2xpbWl0X3ByaXYgKnByaXYgPSByLT5tYXN0ZXI7CiAJdW5zaWduZWQgbG9uZyBub3cgPSBqaWZmaWVzOwogCiAJc3Bpbl9sb2NrX2JoKCZsaW1pdF9sb2NrKTsKLQlyLT5jcmVkaXQgKz0gKG5vdyAtIHhjaGcoJnItPnByZXYsIG5vdykpICogQ1JFRElUU19QRVJfSklGRlk7Ci0JaWYgKHItPmNyZWRpdCA+IHItPmNyZWRpdF9jYXApCi0JCXItPmNyZWRpdCA9IHItPmNyZWRpdF9jYXA7CisJcHJpdi0+Y3JlZGl0ICs9IChub3cgLSB4Y2hnKCZwcml2LT5wcmV2LCBub3cpKSAqIENSRURJVFNfUEVSX0pJRkZZOworCWlmIChwcml2LT5jcmVkaXQgPiByLT5jcmVkaXRfY2FwKQorCQlwcml2LT5jcmVkaXQgPSByLT5jcmVkaXRfY2FwOwogCi0JaWYgKHItPmNyZWRpdCA+PSByLT5jb3N0KSB7CisJaWYgKHByaXYtPmNyZWRpdCA+PSByLT5jb3N0KSB7CiAJCS8qIFdlJ3JlIG5vdCBsaW1pdGVkLiAqLwotCQlyLT5jcmVkaXQgLT0gci0+Y29zdDsKKwkJcHJpdi0+Y3JlZGl0IC09IHItPmNvc3Q7CiAJCXNwaW5fdW5sb2NrX2JoKCZsaW1pdF9sb2NrKTsKIAkJcmV0dXJuIHRydWU7CiAJfQpAQCAtOTUsNiArMTAwLDcgQEAKIHN0YXRpYyBib29sIGxpbWl0X210X2NoZWNrKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKQogewogCXN0cnVjdCB4dF9yYXRlaW5mbyAqciA9IHBhci0+bWF0Y2hpbmZvOworCXN0cnVjdCB4dF9saW1pdF9wcml2ICpwcml2OwogCiAJLyogQ2hlY2sgZm9yIG92ZXJmbG93LiAqLwogCWlmIChyLT5idXJzdCA9PSAwCkBAIC0xMDQsMTkgKzExMCwzMCBAQAogCQlyZXR1cm4gZmFsc2U7CiAJfQogCi0JLyogRm9yIFNNUCwgd2Ugb25seSB3YW50IHRvIHVzZSBvbmUgc2V0IG9mIGNvdW50ZXJzLiAqLwotCXItPm1hc3RlciA9IHI7CisJcHJpdiA9IGttYWxsb2Moc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKHByaXYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiBGb3IgU01QLCB3ZSBvbmx5IHdhbnQgdG8gdXNlIG9uZSBzZXQgb2Ygc3RhdGUuICovCisJci0+bWFzdGVyID0gcHJpdjsKIAlpZiAoci0+Y29zdCA9PSAwKSB7CiAJCS8qIFVzZXIgYXZnIGluIHNlY29uZHMgKiBYVF9MSU1JVF9TQ0FMRTogY29udmVydCB0byBqaWZmaWVzICoKIAkJICAgMTI4LiAqLwotCQlyLT5wcmV2ID0gamlmZmllczsKLQkJci0+Y3JlZGl0ID0gdXNlcjJjcmVkaXRzKHItPmF2ZyAqIHItPmJ1cnN0KTsJIC8qIENyZWRpdHMgZnVsbC4gKi8KKwkJcHJpdi0+cHJldiA9IGppZmZpZXM7CisJCXByaXYtPmNyZWRpdCA9IHVzZXIyY3JlZGl0cyhyLT5hdmcgKiByLT5idXJzdCk7IC8qIENyZWRpdHMgZnVsbC4gKi8KIAkJci0+Y3JlZGl0X2NhcCA9IHVzZXIyY3JlZGl0cyhyLT5hdmcgKiByLT5idXJzdCk7IC8qIENyZWRpdHMgZnVsbC4gKi8KIAkJci0+Y29zdCA9IHVzZXIyY3JlZGl0cyhyLT5hdmcpOwogCX0KIAlyZXR1cm4gdHJ1ZTsKIH0KIAorc3RhdGljIHZvaWQgbGltaXRfbXRfZGVzdHJveShjb25zdCBzdHJ1Y3QgeHRfbXRkdG9yX3BhcmFtICpwYXIpCit7CisJY29uc3Qgc3RydWN0IHh0X3JhdGVpbmZvICppbmZvID0gcGFyLT5tYXRjaGluZm87CisKKwlrZnJlZShpbmZvLT5tYXN0ZXIpOworfQorCiAjaWZkZWYgQ09ORklHX0NPTVBBVAogc3RydWN0IGNvbXBhdF94dF9yYXRlaW5mbyB7CiAJdV9pbnQzMl90IGF2ZzsKQEAgLTE2Nyw2ICsxODQsNyBAQAogCS5mYW1pbHkgICAgICAgICAgID0gTkZQUk9UT19VTlNQRUMsCiAJLm1hdGNoICAgICAgICAgICAgPSBsaW1pdF9tdCwKIAkuY2hlY2tlbnRyeSAgICAgICA9IGxpbWl0X210X2NoZWNrLAorCS5kZXN0cm95ICAgICAgICAgID0gbGltaXRfbXRfZGVzdHJveSwKIAkubWF0Y2hzaXplICAgICAgICA9IHNpemVvZihzdHJ1Y3QgeHRfcmF0ZWluZm8pLAogI2lmZGVmIENPTkZJR19DT01QQVQKIAkuY29tcGF0c2l6ZSAgICAgICA9IHNpemVvZihzdHJ1Y3QgY29tcGF0X3h0X3JhdGVpbmZvKSwKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfcGh5c2Rldi5jIGIvbmV0L25ldGZpbHRlci94dF9waHlzZGV2LmMKaW5kZXggMWJjZGZjMS4uNDRhMjM0ZSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9waHlzZGV2LmMKKysrIGIvbmV0L25ldGZpbHRlci94dF9waHlzZGV2LmMKQEAgLTIwLDEzICsyMCwzMCBAQAogTU9EVUxFX0FMSUFTKCJpcHRfcGh5c2RldiIpOwogTU9EVUxFX0FMSUFTKCJpcDZ0X3BoeXNkZXYiKTsKIAorc3RhdGljIHVuc2lnbmVkIGxvbmcgaWZuYW1lX2NvbXBhcmUoY29uc3QgY2hhciAqX2EsIGNvbnN0IGNoYXIgKl9iLCBjb25zdCBjaGFyICpfbWFzaykKK3sKKwljb25zdCB1bnNpZ25lZCBsb25nICphID0gKGNvbnN0IHVuc2lnbmVkIGxvbmcgKilfYTsKKwljb25zdCB1bnNpZ25lZCBsb25nICpiID0gKGNvbnN0IHVuc2lnbmVkIGxvbmcgKilfYjsKKwljb25zdCB1bnNpZ25lZCBsb25nICptYXNrID0gKGNvbnN0IHVuc2lnbmVkIGxvbmcgKilfbWFzazsKKwl1bnNpZ25lZCBsb25nIHJldDsKKworCXJldCA9IChhWzBdIF4gYlswXSkgJiBtYXNrWzBdOworCWlmIChJRk5BTVNJWiA+IHNpemVvZih1bnNpZ25lZCBsb25nKSkKKwkJcmV0IHw9IChhWzFdIF4gYlsxXSkgJiBtYXNrWzFdOworCWlmIChJRk5BTVNJWiA+IDIgKiBzaXplb2YodW5zaWduZWQgbG9uZykpCisJCXJldCB8PSAoYVsyXSBeIGJbMl0pICYgbWFza1syXTsKKwlpZiAoSUZOQU1TSVogPiAzICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKQorCQlyZXQgfD0gKGFbM10gXiBiWzNdKSAmIG1hc2tbM107CisJQlVJTERfQlVHX09OKElGTkFNU0laID4gNCAqIHNpemVvZih1bnNpZ25lZCBsb25nKSk7CisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIGJvb2wKIHBoeXNkZXZfbXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHh0X21hdGNoX3BhcmFtICpwYXIpCiB7Ci0JaW50IGk7Ci0Jc3RhdGljIGNvbnN0IGNoYXIgbnVsbGRldm5hbWVbSUZOQU1TSVpdOworCXN0YXRpYyBjb25zdCBjaGFyIG51bGxkZXZuYW1lW0lGTkFNU0laXSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKHNpemVvZihsb25nKSkpKTsKIAljb25zdCBzdHJ1Y3QgeHRfcGh5c2Rldl9pbmZvICppbmZvID0gcGFyLT5tYXRjaGluZm87Ci0JYm9vbCByZXQ7CisJdW5zaWduZWQgbG9uZyByZXQ7CiAJY29uc3QgY2hhciAqaW5kZXYsICpvdXRkZXY7CiAJY29uc3Qgc3RydWN0IG5mX2JyaWRnZV9pbmZvICpuZl9icmlkZ2U7CiAKQEAgLTY4LDExICs4NSw3IEBACiAJaWYgKCEoaW5mby0+Yml0bWFzayAmIFhUX1BIWVNERVZfT1BfSU4pKQogCQlnb3RvIG1hdGNoX291dGRldjsKIAlpbmRldiA9IG5mX2JyaWRnZS0+cGh5c2luZGV2ID8gbmZfYnJpZGdlLT5waHlzaW5kZXYtPm5hbWUgOiBudWxsZGV2bmFtZTsKLQlmb3IgKGkgPSAwLCByZXQgPSBmYWxzZTsgaSA8IElGTkFNU0laL3NpemVvZih1bnNpZ25lZCBpbnQpOyBpKyspIHsKLQkJcmV0IHw9ICgoKGNvbnN0IHVuc2lnbmVkIGludCAqKWluZGV2KVtpXQotCQkJXiAoKGNvbnN0IHVuc2lnbmVkIGludCAqKWluZm8tPnBoeXNpbmRldilbaV0pCi0JCQkmICgoY29uc3QgdW5zaWduZWQgaW50ICopaW5mby0+aW5fbWFzaylbaV07Ci0JfQorCXJldCA9IGlmbmFtZV9jb21wYXJlKGluZGV2LCBpbmZvLT5waHlzaW5kZXYsIGluZm8tPmluX21hc2spOwogCiAJaWYgKCFyZXQgXiAhKGluZm8tPmludmVydCAmIFhUX1BIWVNERVZfT1BfSU4pKQogCQlyZXR1cm4gZmFsc2U7CkBAIC04MiwxMyArOTUsOSBAQAogCQlyZXR1cm4gdHJ1ZTsKIAlvdXRkZXYgPSBuZl9icmlkZ2UtPnBoeXNvdXRkZXYgPwogCQkgbmZfYnJpZGdlLT5waHlzb3V0ZGV2LT5uYW1lIDogbnVsbGRldm5hbWU7Ci0JZm9yIChpID0gMCwgcmV0ID0gZmFsc2U7IGkgPCBJRk5BTVNJWi9zaXplb2YodW5zaWduZWQgaW50KTsgaSsrKSB7Ci0JCXJldCB8PSAoKChjb25zdCB1bnNpZ25lZCBpbnQgKilvdXRkZXYpW2ldCi0JCQleICgoY29uc3QgdW5zaWduZWQgaW50ICopaW5mby0+cGh5c291dGRldilbaV0pCi0JCQkmICgoY29uc3QgdW5zaWduZWQgaW50ICopaW5mby0+b3V0X21hc2spW2ldOwotCX0KKwlyZXQgPSBpZm5hbWVfY29tcGFyZShvdXRkZXYsIGluZm8tPnBoeXNvdXRkZXYsIGluZm8tPm91dF9tYXNrKTsKIAotCXJldHVybiByZXQgXiAhKGluZm8tPmludmVydCAmIFhUX1BIWVNERVZfT1BfT1VUKTsKKwlyZXR1cm4gKCEhcmV0IF4gIShpbmZvLT5pbnZlcnQgJiBYVF9QSFlTREVWX09QX09VVCkpOwogfQogCiBzdGF0aWMgYm9vbCBwaHlzZGV2X210X2NoZWNrKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9xdW90YS5jIGIvbmV0L25ldGZpbHRlci94dF9xdW90YS5jCmluZGV4IGM4NGZjZTUuLjAxZGQwN2IgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfcXVvdGEuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X3F1b3RhLmMKQEAgLTksNiArOSwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94dF9xdW90YS5oPgogCitzdHJ1Y3QgeHRfcXVvdGFfcHJpdiB7CisJdWludDY0X3QgcXVvdGE7Cit9OworCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfQVVUSE9SKCJTYW0gSm9obnN0b24gPHNhbWpAc2Ftai5uZXQ+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlh0YWJsZXM6IGNvdW50ZG93biBxdW90YSBtYXRjaCIpOwpAQCAtMjAsMTggKzI0LDIwIEBACiBzdGF0aWMgYm9vbAogcXVvdGFfbXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHh0X21hdGNoX3BhcmFtICpwYXIpCiB7Ci0Jc3RydWN0IHh0X3F1b3RhX2luZm8gKnEgPQotCQkoKGNvbnN0IHN0cnVjdCB4dF9xdW90YV9pbmZvICopcGFyLT5tYXRjaGluZm8pLT5tYXN0ZXI7CisJc3RydWN0IHh0X3F1b3RhX2luZm8gKnEgPSAodm9pZCAqKXBhci0+bWF0Y2hpbmZvOworCXN0cnVjdCB4dF9xdW90YV9wcml2ICpwcml2ID0gcS0+bWFzdGVyOwogCWJvb2wgcmV0ID0gcS0+ZmxhZ3MgJiBYVF9RVU9UQV9JTlZFUlQ7CiAKIAlzcGluX2xvY2tfYmgoJnF1b3RhX2xvY2spOwotCWlmIChxLT5xdW90YSA+PSBza2ItPmxlbikgewotCQlxLT5xdW90YSAtPSBza2ItPmxlbjsKKwlpZiAocHJpdi0+cXVvdGEgPj0gc2tiLT5sZW4pIHsKKwkJcHJpdi0+cXVvdGEgLT0gc2tiLT5sZW47CiAJCXJldCA9ICFyZXQ7CiAJfSBlbHNlIHsKIAkJLyogd2UgZG8gbm90IGFsbG93IGV2ZW4gc21hbGwgcGFja2V0cyBmcm9tIG5vdyBvbiAqLwotCQlxLT5xdW90YSA9IDA7CisJCXByaXYtPnF1b3RhID0gMDsKIAl9CisJLyogQ29weSBxdW90YSBiYWNrIHRvIG1hdGNoaW5mbyBzbyB0aGF0IGlwdGFibGVzIGNhbiBkaXNwbGF5IGl0ICovCisJcS0+cXVvdGEgPSBwcml2LT5xdW90YTsKIAlzcGluX3VubG9ja19iaCgmcXVvdGFfbG9jayk7CiAKIAlyZXR1cm4gcmV0OwpAQCAtNDMsMTcgKzQ5LDI4IEBACiAKIAlpZiAocS0+ZmxhZ3MgJiB+WFRfUVVPVEFfTUFTSykKIAkJcmV0dXJuIGZhbHNlOwotCS8qIEZvciBTTVAsIHdlIG9ubHkgd2FudCB0byB1c2Ugb25lIHNldCBvZiBjb3VudGVycy4gKi8KLQlxLT5tYXN0ZXIgPSBxOworCisJcS0+bWFzdGVyID0ga21hbGxvYyhzaXplb2YoKnEtPm1hc3RlciksIEdGUF9LRVJORUwpOworCWlmIChxLT5tYXN0ZXIgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKIAlyZXR1cm4gdHJ1ZTsKIH0KIAorc3RhdGljIHZvaWQgcXVvdGFfbXRfZGVzdHJveShjb25zdCBzdHJ1Y3QgeHRfbXRkdG9yX3BhcmFtICpwYXIpCit7CisJY29uc3Qgc3RydWN0IHh0X3F1b3RhX2luZm8gKnEgPSBwYXItPm1hdGNoaW5mbzsKKworCWtmcmVlKHEtPm1hc3Rlcik7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgeHRfbWF0Y2ggcXVvdGFfbXRfcmVnIF9fcmVhZF9tb3N0bHkgPSB7CiAJLm5hbWUgICAgICAgPSAicXVvdGEiLAogCS5yZXZpc2lvbiAgID0gMCwKIAkuZmFtaWx5ICAgICA9IE5GUFJPVE9fVU5TUEVDLAogCS5tYXRjaCAgICAgID0gcXVvdGFfbXQsCiAJLmNoZWNrZW50cnkgPSBxdW90YV9tdF9jaGVjaywKKwkuZGVzdHJveSAgICA9IHF1b3RhX210X2Rlc3Ryb3ksCiAJLm1hdGNoc2l6ZSAgPSBzaXplb2Yoc3RydWN0IHh0X3F1b3RhX2luZm8pLAogCS5tZSAgICAgICAgID0gVEhJU19NT0RVTEUsCiB9OwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9zdGF0aXN0aWMuYyBiL25ldC9uZXRmaWx0ZXIveHRfc3RhdGlzdGljLmMKaW5kZXggMGQ3NTE0MS4uZDhjMGY4ZiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9zdGF0aXN0aWMuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X3N0YXRpc3RpYy5jCkBAIC0xNiw2ICsxNiwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94dF9zdGF0aXN0aWMuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaD4KIAorc3RydWN0IHh0X3N0YXRpc3RpY19wcml2IHsKKwl1aW50MzJfdCBjb3VudDsKK307CisKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BVVRIT1IoIlBhdHJpY2sgTWNIYXJkeSA8a2FiZXJAdHJhc2gubmV0PiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJYdGFibGVzOiBzdGF0aXN0aWNzLWJhc2VkIG1hdGNoaW5nIChcIk50aFwiLCByYW5kb20pIik7CkBAIC0yNyw3ICszMSw3IEBACiBzdGF0aWMgYm9vbAogc3RhdGlzdGljX210KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF9tYXRjaF9wYXJhbSAqcGFyKQogewotCXN0cnVjdCB4dF9zdGF0aXN0aWNfaW5mbyAqaW5mbyA9ICh2b2lkICopcGFyLT5tYXRjaGluZm87CisJY29uc3Qgc3RydWN0IHh0X3N0YXRpc3RpY19pbmZvICppbmZvID0gcGFyLT5tYXRjaGluZm87CiAJYm9vbCByZXQgPSBpbmZvLT5mbGFncyAmIFhUX1NUQVRJU1RJQ19JTlZFUlQ7CiAKIAlzd2l0Y2ggKGluZm8tPm1vZGUpIHsKQEAgLTM2LDEwICs0MCw5IEBACiAJCQlyZXQgPSAhcmV0OwogCQlicmVhazsKIAljYXNlIFhUX1NUQVRJU1RJQ19NT0RFX05USDoKLQkJaW5mbyA9IGluZm8tPm1hc3RlcjsKIAkJc3Bpbl9sb2NrX2JoKCZudGhfbG9jayk7Ci0JCWlmIChpbmZvLT51Lm50aC5jb3VudCsrID09IGluZm8tPnUubnRoLmV2ZXJ5KSB7Ci0JCQlpbmZvLT51Lm50aC5jb3VudCA9IDA7CisJCWlmIChpbmZvLT5tYXN0ZXItPmNvdW50KysgPT0gaW5mby0+dS5udGguZXZlcnkpIHsKKwkJCWluZm8tPm1hc3Rlci0+Y291bnQgPSAwOwogCQkJcmV0ID0gIXJldDsKIAkJfQogCQlzcGluX3VubG9ja19iaCgmbnRoX2xvY2spOwpAQCAtNTYsMTYgKzU5LDMxIEBACiAJaWYgKGluZm8tPm1vZGUgPiBYVF9TVEFUSVNUSUNfTU9ERV9NQVggfHwKIAkgICAgaW5mby0+ZmxhZ3MgJiB+WFRfU1RBVElTVElDX01BU0spCiAJCXJldHVybiBmYWxzZTsKLQlpbmZvLT5tYXN0ZXIgPSBpbmZvOworCisJaW5mby0+bWFzdGVyID0ga3phbGxvYyhzaXplb2YoKmluZm8tPm1hc3RlciksIEdGUF9LRVJORUwpOworCWlmIChpbmZvLT5tYXN0ZXIgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgS0JVSUxEX01PRE5BTUUgIjogT3V0IG9mIG1lbW9yeVxuIik7CisJCXJldHVybiBmYWxzZTsKKwl9CisJaW5mby0+bWFzdGVyLT5jb3VudCA9IGluZm8tPnUubnRoLmNvdW50OworCiAJcmV0dXJuIHRydWU7CiB9CiAKK3N0YXRpYyB2b2lkIHN0YXRpc3RpY19tdF9kZXN0cm95KGNvbnN0IHN0cnVjdCB4dF9tdGR0b3JfcGFyYW0gKnBhcikKK3sKKwljb25zdCBzdHJ1Y3QgeHRfc3RhdGlzdGljX2luZm8gKmluZm8gPSBwYXItPm1hdGNoaW5mbzsKKworCWtmcmVlKGluZm8tPm1hc3Rlcik7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgeHRfbWF0Y2ggeHRfc3RhdGlzdGljX210X3JlZyBfX3JlYWRfbW9zdGx5ID0gewogCS5uYW1lICAgICAgID0gInN0YXRpc3RpYyIsCiAJLnJldmlzaW9uICAgPSAwLAogCS5mYW1pbHkgICAgID0gTkZQUk9UT19VTlNQRUMsCiAJLm1hdGNoICAgICAgPSBzdGF0aXN0aWNfbXQsCiAJLmNoZWNrZW50cnkgPSBzdGF0aXN0aWNfbXRfY2hlY2ssCisJLmRlc3Ryb3kgICAgPSBzdGF0aXN0aWNfbXRfZGVzdHJveSwKIAkubWF0Y2hzaXplICA9IHNpemVvZihzdHJ1Y3QgeHRfc3RhdGlzdGljX2luZm8pLAogCS5tZSAgICAgICAgID0gVEhJU19NT0RVTEUsCiB9OwpkaWZmIC0tZ2l0IGEvbmV0L25ldGxpbmsvTWFrZWZpbGUgYi9uZXQvbmV0bGluay9NYWtlZmlsZQppbmRleCBlMzU4OWMyLi5iZGQ2ZGRmIDEwMDY0NAotLS0gYS9uZXQvbmV0bGluay9NYWtlZmlsZQorKysgYi9uZXQvbmV0bGluay9NYWtlZmlsZQpAQCAtMiw0ICsyLDQgQEAKICMgTWFrZWZpbGUgZm9yIHRoZSBuZXRsaW5rIGRyaXZlci4KICMKIAotb2JqLXkgIAkJCQk6PSBhZl9uZXRsaW5rLm8gYXR0ci5vIGdlbmV0bGluay5vCitvYmoteSAgCQkJCTo9IGFmX25ldGxpbmsubyBnZW5ldGxpbmsubwpkaWZmIC0tZ2l0IGEvbmV0L25ldGxpbmsvYWZfbmV0bGluay5jIGIvbmV0L25ldGxpbmsvYWZfbmV0bGluay5jCmluZGV4IDNhZTNjYjguLjhiNmJiYjMgMTAwNjQ0Ci0tLSBhL25ldC9uZXRsaW5rL2FmX25ldGxpbmsuYworKysgYi9uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMKQEAgLTg1LDYgKzg1LDggQEAKIAogI2RlZmluZSBORVRMSU5LX0tFUk5FTF9TT0NLRVQJMHgxCiAjZGVmaW5lIE5FVExJTktfUkVDVl9QS1RJTkZPCTB4MgorI2RlZmluZSBORVRMSU5LX0JST0FEQ0FTVF9TRU5EX0VSUk9SCTB4NAorI2RlZmluZSBORVRMSU5LX1JFQ1ZfTk9fRU5PQlVGUwkweDgKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0bGlua19zb2NrICpubGtfc2soc3RydWN0IHNvY2sgKnNrKQogewpAQCAtNzE2LDEwICs3MTgsMTUgQEAKIAogc3RhdGljIHZvaWQgbmV0bGlua19vdmVycnVuKHN0cnVjdCBzb2NrICpzaykKIHsKLQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoMCwgJm5sa19zayhzayktPnN0YXRlKSkgewotCQlzay0+c2tfZXJyID0gRU5PQlVGUzsKLQkJc2stPnNrX2Vycm9yX3JlcG9ydChzayk7CisJc3RydWN0IG5ldGxpbmtfc29jayAqbmxrID0gbmxrX3NrKHNrKTsKKworCWlmICghKG5say0+ZmxhZ3MgJiBORVRMSU5LX1JFQ1ZfTk9fRU5PQlVGUykpIHsKKwkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KDAsICZubGtfc2soc2spLT5zdGF0ZSkpIHsKKwkJCXNrLT5za19lcnIgPSBFTk9CVUZTOworCQkJc2stPnNrX2Vycm9yX3JlcG9ydChzayk7CisJCX0KIAl9CisJYXRvbWljX2luYygmc2stPnNrX2Ryb3BzKTsKIH0KIAogc3RhdGljIHN0cnVjdCBzb2NrICpuZXRsaW5rX2dldHNvY2tieXBpZChzdHJ1Y3Qgc29jayAqc3NrLCB1MzIgcGlkKQpAQCAtOTUwLDYgKzk1Nyw3IEBACiAJdTMyIHBpZDsKIAl1MzIgZ3JvdXA7CiAJaW50IGZhaWx1cmU7CisJaW50IGRlbGl2ZXJ5X2ZhaWx1cmU7CiAJaW50IGNvbmdlc3RlZDsKIAlpbnQgZGVsaXZlcmVkOwogCWdmcF90IGFsbG9jYXRpb247CkBAIC05OTQsMTEgKzEwMDIsMTUgQEAKIAkJbmV0bGlua19vdmVycnVuKHNrKTsKIAkJLyogQ2xvbmUgZmFpbGVkLiBOb3RpZnkgQUxMIGxpc3RlbmVycy4gKi8KIAkJcC0+ZmFpbHVyZSA9IDE7CisJCWlmIChubGstPmZsYWdzICYgTkVUTElOS19CUk9BRENBU1RfU0VORF9FUlJPUikKKwkJCXAtPmRlbGl2ZXJ5X2ZhaWx1cmUgPSAxOwogCX0gZWxzZSBpZiAoc2tfZmlsdGVyKHNrLCBwLT5za2IyKSkgewogCQlrZnJlZV9za2IocC0+c2tiMik7CiAJCXAtPnNrYjIgPSBOVUxMOwogCX0gZWxzZSBpZiAoKHZhbCA9IG5ldGxpbmtfYnJvYWRjYXN0X2RlbGl2ZXIoc2ssIHAtPnNrYjIpKSA8IDApIHsKIAkJbmV0bGlua19vdmVycnVuKHNrKTsKKwkJaWYgKG5say0+ZmxhZ3MgJiBORVRMSU5LX0JST0FEQ0FTVF9TRU5EX0VSUk9SKQorCQkJcC0+ZGVsaXZlcnlfZmFpbHVyZSA9IDE7CiAJfSBlbHNlIHsKIAkJcC0+Y29uZ2VzdGVkIHw9IHZhbDsKIAkJcC0+ZGVsaXZlcmVkID0gMTsKQEAgLTEwMjUsNiArMTAzNyw3IEBACiAJaW5mby5waWQgPSBwaWQ7CiAJaW5mby5ncm91cCA9IGdyb3VwOwogCWluZm8uZmFpbHVyZSA9IDA7CisJaW5mby5kZWxpdmVyeV9mYWlsdXJlID0gMDsKIAlpbmZvLmNvbmdlc3RlZCA9IDA7CiAJaW5mby5kZWxpdmVyZWQgPSAwOwogCWluZm8uYWxsb2NhdGlvbiA9IGFsbG9jYXRpb247CkBAIC0xMDQyLDE2ICsxMDU1LDE2IEBACiAKIAluZXRsaW5rX3VubG9ja190YWJsZSgpOwogCi0JaWYgKGluZm8uc2tiMikKLQkJa2ZyZWVfc2tiKGluZm8uc2tiMik7CisJa2ZyZWVfc2tiKGluZm8uc2tiMik7CisKKwlpZiAoaW5mby5kZWxpdmVyeV9mYWlsdXJlKQorCQlyZXR1cm4gLUVOT0JVRlM7CiAKIAlpZiAoaW5mby5kZWxpdmVyZWQpIHsKIAkJaWYgKGluZm8uY29uZ2VzdGVkICYmIChhbGxvY2F0aW9uICYgX19HRlBfV0FJVCkpCiAJCQl5aWVsZCgpOwogCQlyZXR1cm4gMDsKIAl9Ci0JaWYgKGluZm8uZmFpbHVyZSkKLQkJcmV0dXJuIC1FTk9CVUZTOwogCXJldHVybiAtRVNSQ0g7CiB9CiBFWFBPUlRfU1lNQk9MKG5ldGxpbmtfYnJvYWRjYXN0KTsKQEAgLTExMTAsNiArMTEyMyw3IEBACiAKIAlyZWFkX3VubG9jaygmbmxfdGFibGVfbG9jayk7CiB9CitFWFBPUlRfU1lNQk9MKG5ldGxpbmtfc2V0X2Vycik7CiAKIC8qIG11c3QgYmUgY2FsbGVkIHdpdGggbmV0bGluayB0YWJsZSBncmFiYmVkICovCiBzdGF0aWMgdm9pZCBuZXRsaW5rX3VwZGF0ZV9zb2NrZXRfbWMoc3RydWN0IG5ldGxpbmtfc29jayAqbmxrLApAQCAtMTE2Nyw2ICsxMTgxLDIyIEBACiAJCWVyciA9IDA7CiAJCWJyZWFrOwogCX0KKwljYXNlIE5FVExJTktfQlJPQURDQVNUX0VSUk9SOgorCQlpZiAodmFsKQorCQkJbmxrLT5mbGFncyB8PSBORVRMSU5LX0JST0FEQ0FTVF9TRU5EX0VSUk9SOworCQllbHNlCisJCQlubGstPmZsYWdzICY9IH5ORVRMSU5LX0JST0FEQ0FTVF9TRU5EX0VSUk9SOworCQllcnIgPSAwOworCQlicmVhazsKKwljYXNlIE5FVExJTktfTk9fRU5PQlVGUzoKKwkJaWYgKHZhbCkgeworCQkJbmxrLT5mbGFncyB8PSBORVRMSU5LX1JFQ1ZfTk9fRU5PQlVGUzsKKwkJCWNsZWFyX2JpdCgwLCAmbmxrLT5zdGF0ZSk7CisJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJm5say0+d2FpdCk7CisJCX0gZWxzZQorCQkJbmxrLT5mbGFncyAmPSB+TkVUTElOS19SRUNWX05PX0VOT0JVRlM7CisJCWVyciA9IDA7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWVyciA9IC1FTk9QUk9UT09QVDsKIAl9CkBAIC0xMTk5LDYgKzEyMjksMjYgQEAKIAkJCXJldHVybiAtRUZBVUxUOwogCQllcnIgPSAwOwogCQlicmVhazsKKwljYXNlIE5FVExJTktfQlJPQURDQVNUX0VSUk9SOgorCQlpZiAobGVuIDwgc2l6ZW9mKGludCkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJbGVuID0gc2l6ZW9mKGludCk7CisJCXZhbCA9IG5say0+ZmxhZ3MgJiBORVRMSU5LX0JST0FEQ0FTVF9TRU5EX0VSUk9SID8gMSA6IDA7CisJCWlmIChwdXRfdXNlcihsZW4sIG9wdGxlbikgfHwKKwkJICAgIHB1dF91c2VyKHZhbCwgb3B0dmFsKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQllcnIgPSAwOworCQlicmVhazsKKwljYXNlIE5FVExJTktfTk9fRU5PQlVGUzoKKwkJaWYgKGxlbiA8IHNpemVvZihpbnQpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWxlbiA9IHNpemVvZihpbnQpOworCQl2YWwgPSBubGstPmZsYWdzICYgTkVUTElOS19SRUNWX05PX0VOT0JVRlMgPyAxIDogMDsKKwkJaWYgKHB1dF91c2VyKGxlbiwgb3B0bGVuKSB8fAorCQkgICAgcHV0X3VzZXIodmFsLCBvcHR2YWwpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWVyciA9IDA7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWVyciA9IC1FTk9QUk9UT09QVDsKIAl9CkBAIC0xNTI1LDggKzE1NzUsNyBAQAogCiBzdGF0aWMgdm9pZCBuZXRsaW5rX2Rlc3Ryb3lfY2FsbGJhY2soc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQogewotCWlmIChjYi0+c2tiKQotCQlrZnJlZV9za2IoY2ItPnNrYik7CisJa2ZyZWVfc2tiKGNiLT5za2IpOwogCWtmcmVlKGNiKTsKIH0KIApAQCAtMTc0MywxMiArMTc5MiwxOCBAQAogCQkJZXhjbHVkZV9waWQgPSBwaWQ7CiAJCX0KIAotCQkvKiBlcnJvcnMgcmVwb3J0ZWQgdmlhIGRlc3RpbmF0aW9uIHNrLT5za19lcnIgKi8KLQkJbmxtc2dfbXVsdGljYXN0KHNrLCBza2IsIGV4Y2x1ZGVfcGlkLCBncm91cCwgZmxhZ3MpOworCQkvKiBlcnJvcnMgcmVwb3J0ZWQgdmlhIGRlc3RpbmF0aW9uIHNrLT5za19lcnIsIGJ1dCBwcm9wYWdhdGUKKwkJICogZGVsaXZlcnkgZXJyb3JzIGlmIE5FVExJTktfQlJPQURDQVNUX0VSUk9SIGZsYWcgaXMgc2V0ICovCisJCWVyciA9IG5sbXNnX211bHRpY2FzdChzaywgc2tiLCBleGNsdWRlX3BpZCwgZ3JvdXAsIGZsYWdzKTsKIAl9CiAKLQlpZiAocmVwb3J0KQotCQllcnIgPSBubG1zZ191bmljYXN0KHNrLCBza2IsIHBpZCk7CisJaWYgKHJlcG9ydCkgeworCQlpbnQgZXJyMjsKKworCQllcnIyID0gbmxtc2dfdW5pY2FzdChzaywgc2tiLCBwaWQpOworCQlpZiAoIWVyciB8fCBlcnIgPT0gLUVTUkNIKQorCQkJZXJyID0gZXJyMjsKKwl9CiAKIAlyZXR1cm4gZXJyOwogfQpAQCAtMTg0OSwxMiArMTkwNCwxMiBAQAogCWlmICh2ID09IFNFUV9TVEFSVF9UT0tFTikKIAkJc2VxX3B1dHMoc2VxLAogCQkJICJzayAgICAgICBFdGggUGlkICAgIEdyb3VwcyAgICIKLQkJCSAiUm1lbSAgICAgV21lbSAgICAgRHVtcCAgICAgTG9ja3NcbiIpOworCQkJICJSbWVtICAgICBXbWVtICAgICBEdW1wICAgICBMb2NrcyAgICAgRHJvcHNcbiIpOwogCWVsc2UgewogCQlzdHJ1Y3Qgc29jayAqcyA9IHY7CiAJCXN0cnVjdCBuZXRsaW5rX3NvY2sgKm5sayA9IG5sa19zayhzKTsKIAotCQlzZXFfcHJpbnRmKHNlcSwgIiVwICUtM2QgJS02ZCAlMDh4ICUtOGQgJS04ZCAlcCAlZFxuIiwKKwkJc2VxX3ByaW50ZihzZXEsICIlcCAlLTNkICUtNmQgJTA4eCAlLThkICUtOGQgJXAgJS04ZCAlLThkXG4iLAogCQkJICAgcywKIAkJCSAgIHMtPnNrX3Byb3RvY29sLAogCQkJICAgbmxrLT5waWQsCkBAIC0xODYyLDcgKzE5MTcsOCBAQAogCQkJICAgYXRvbWljX3JlYWQoJnMtPnNrX3JtZW1fYWxsb2MpLAogCQkJICAgYXRvbWljX3JlYWQoJnMtPnNrX3dtZW1fYWxsb2MpLAogCQkJICAgbmxrLT5jYiwKLQkJCSAgIGF0b21pY19yZWFkKCZzLT5za19yZWZjbnQpCisJCQkgICBhdG9taWNfcmVhZCgmcy0+c2tfcmVmY250KSwKKwkJCSAgIGF0b21pY19yZWFkKCZzLT5za19kcm9wcykKIAkJCSk7CiAKIAl9CmRpZmYgLS1naXQgYS9uZXQvbmV0cm9tL2FmX25ldHJvbS5jIGIvbmV0L25ldHJvbS9hZl9uZXRyb20uYwppbmRleCBlOWMwNWI4Zi4uNmQ5YzU4ZSAxMDA2NDQKLS0tIGEvbmV0L25ldHJvbS9hZl9uZXRyb20uYworKysgYi9uZXQvbmV0cm9tL2FmX25ldHJvbS5jCkBAIC0xMDM3LDYgKzEwMzcsMTAgQEAKIAl1bnNpZ25lZCBjaGFyICphc21wdHI7CiAJaW50IHNpemU7CiAKKwkvKiBOZXRyb20gZW1wdHkgZGF0YSBmcmFtZSBoYXMgbm8gbWVhbmluZyA6IGRvbid0IHNlbmQgKi8KKwlpZiAobGVuID09IDApCisJCXJldHVybiAwOworCiAJaWYgKG1zZy0+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+cmVmY250ID09IDApOworCS8qCisJICogVGhpcyBzaG91bGRuJ3QgaGFwcGVuOiB3ZSAiaG9sZCIgb25lIGNvcHMtPmdldCgpIHdoZW4gY2FsbGVkCisJICogZnJvbSB0Y19jdGxfdGNsYXNzOyB0aGUgZGVzdHJveSBtZXRob2QgaXMgZG9uZSBmcm9tIGNvcHMtPnB1dCgpLgorCSAqLwogCiAJc2NoX3RyZWVfdW5sb2NrKHNjaCk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX211bHRpcS5jIGIvbmV0L3NjaGVkL3NjaF9tdWx0aXEuYwppbmRleCA3ZTE1MTg2Li45MTI3MzEyIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX211bHRpcS5jCisrKyBiL25ldC9zY2hlZC9zY2hfbXVsdGlxLmMKQEAgLTIwMiw3ICsyMDIsNyBAQAogCWludCBpOwogCiAJaWYgKCFuZXRpZl9pc19tdWx0aXF1ZXVlKHFkaXNjX2RldihzY2gpKSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiAtRU9QTk9UU1VQUDsKIAlpZiAobmxhX2xlbihvcHQpIDwgc2l6ZW9mKCpxb3B0KSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfdGJmLmMgYi9uZXQvc2NoZWQvc2NoX3RiZi5jCmluZGV4IGEyZjkzYzAuLmUyMmRmZTggMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfdGJmLmMKKysrIGIvbmV0L3NjaGVkL3NjaF90YmYuYwpAQCAtMjM2LDcgKzIzNiw2IEBACiAJc3RydWN0IHRjX3RiZl9xb3B0ICpxb3B0OwogCXN0cnVjdCBxZGlzY19yYXRlX3RhYmxlICpydGFiID0gTlVMTDsKIAlzdHJ1Y3QgcWRpc2NfcmF0ZV90YWJsZSAqcHRhYiA9IE5VTEw7Ci0Jc3RydWN0IHFkaXNjX3JhdGVfdGFibGUgKnRtcDsKIAlzdHJ1Y3QgUWRpc2MgKmNoaWxkID0gTlVMTDsKIAlpbnQgbWF4X3NpemUsbjsKIApAQCAtMjk1LDEzICsyOTQsOSBAQAogCXEtPnRva2VucyA9IHEtPmJ1ZmZlcjsKIAlxLT5wdG9rZW5zID0gcS0+bXR1OwogCi0JdG1wID0gcS0+Ul90YWI7Ci0JcS0+Ul90YWIgPSBydGFiOwotCXJ0YWIgPSB0bXA7CisJc3dhcChxLT5SX3RhYiwgcnRhYik7CisJc3dhcChxLT5QX3RhYiwgcHRhYik7CiAKLQl0bXAgPSBxLT5QX3RhYjsKLQlxLT5QX3RhYiA9IHB0YWI7Ci0JcHRhYiA9IHRtcDsKIAlzY2hfdHJlZV91bmxvY2soc2NoKTsKIAllcnIgPSAwOwogZG9uZToKZGlmZiAtLWdpdCBhL25ldC9zY3RwL2RlYnVnLmMgYi9uZXQvc2N0cC9kZWJ1Zy5jCmluZGV4IDY3NzE1ZjQuLjdmZjU0OGEgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL2RlYnVnLmMKKysrIGIvbmV0L3NjdHAvZGVidWcuYwpAQCAtODYsNiArODYsOSBAQAogCWNhc2UgU0NUUF9DSURfRldEX1RTTjoKIAkJcmV0dXJuICJGV0RfVFNOIjsKIAorCWNhc2UgU0NUUF9DSURfQVVUSDoKKwkJcmV0dXJuICJBVVRIIjsKKwogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KQEAgLTEzNSw2ICsxMzgsNyBAQAogCSJQUklNSVRJVkVfQUJPUlQiLAogCSJQUklNSVRJVkVfU0VORCIsCiAJIlBSSU1JVElWRV9SRVFVRVNUSEVBUlRCRUFUIiwKKwkiUFJJTUlUSVZFX0FTQ09ORiIsCiB9OwogCiAvKiBMb29rdXAgcHJpbWl0aXZlIGRlYnVnIG5hbWUuICovCmRpZmYgLS1naXQgYS9uZXQvc2N0cC9pbnB1dC5jIGIvbmV0L3NjdHAvaW5wdXQuYwppbmRleCAyZTRhODY0Li5kMmU5ODgwIDEwMDY0NAotLS0gYS9uZXQvc2N0cC9pbnB1dC5jCisrKyBiL25ldC9zY3RwL2lucHV0LmMKQEAgLTgzLDE0ICs4MywxNSBAQAogewogCXN0cnVjdCBza19idWZmICpsaXN0ID0gc2tiX3NoaW5mbyhza2IpLT5mcmFnX2xpc3Q7CiAJc3RydWN0IHNjdHBoZHIgKnNoID0gc2N0cF9oZHIoc2tiKTsKLQlfX2JlMzIgY21wID0gc2gtPmNoZWNrc3VtOwotCV9fYmUzMiB2YWwgPSBzY3RwX3N0YXJ0X2Nrc3VtKChfX3U4ICopc2gsIHNrYl9oZWFkbGVuKHNrYikpOworCV9fbGUzMiBjbXAgPSBzaC0+Y2hlY2tzdW07CisJX19sZTMyIHZhbDsKKwlfX3UzMiB0bXAgPSBzY3RwX3N0YXJ0X2Nrc3VtKChfX3U4ICopc2gsIHNrYl9oZWFkbGVuKHNrYikpOwogCiAJZm9yICg7IGxpc3Q7IGxpc3QgPSBsaXN0LT5uZXh0KQotCQl2YWwgPSBzY3RwX3VwZGF0ZV9ja3N1bSgoX191OCAqKWxpc3QtPmRhdGEsIHNrYl9oZWFkbGVuKGxpc3QpLAotCQkJCQl2YWwpOworCQl0bXAgPSBzY3RwX3VwZGF0ZV9ja3N1bSgoX191OCAqKWxpc3QtPmRhdGEsIHNrYl9oZWFkbGVuKGxpc3QpLAorCQkJCQl0bXApOwogCi0JdmFsID0gc2N0cF9lbmRfY2tzdW0odmFsKTsKKwl2YWwgPSBzY3RwX2VuZF9ja3N1bSh0bXApOwogCiAJaWYgKHZhbCAhPSBjbXApIHsKIAkJLyogQ1JDIGZhaWx1cmUsIGR1bXAgaXQuICovCkBAIC0xNDIsNyArMTQzLDggQEAKIAlfX3NrYl9wdWxsKHNrYiwgc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSk7CiAJaWYgKHNrYi0+bGVuIDwgc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKSkKIAkJZ290byBkaXNjYXJkX2l0OwotCWlmICghc2tiX2NzdW1fdW5uZWNlc3Nhcnkoc2tiKSAmJiBzY3RwX3Jjdl9jaGVja3N1bShza2IpIDwgMCkKKwlpZiAoIXNjdHBfY2hlY2tzdW1fZGlzYWJsZSAmJiAhc2tiX2NzdW1fdW5uZWNlc3Nhcnkoc2tiKSAmJgorCQkgIHNjdHBfcmN2X2NoZWNrc3VtKHNrYikgPCAwKQogCQlnb3RvIGRpc2NhcmRfaXQ7CiAKIAlza2JfcHVsbChza2IsIHNpemVvZihzdHJ1Y3Qgc2N0cGhkcikpOwpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvaXB2Ni5jIGIvbmV0L3NjdHAvaXB2Ni5jCmluZGV4IGNlYWE0YWEuLmE2M2RlM2YgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL2lwdjYuYworKysgYi9uZXQvc2N0cC9pcHY2LmMKQEAgLTk3LDggKzk3LDcgQEAKIAkJaWYgKGFkZHIpIHsKIAkJCWFkZHItPmEudjYuc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKIAkJCWFkZHItPmEudjYuc2luNl9wb3J0ID0gMDsKLQkJCW1lbWNweSgmYWRkci0+YS52Ni5zaW42X2FkZHIsICZpZmEtPmFkZHIsCi0JCQkJIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKTsKKwkJCWlwdjZfYWRkcl9jb3B5KCZhZGRyLT5hLnY2LnNpbjZfYWRkciwgJmlmYS0+YWRkcik7CiAJCQlhZGRyLT5hLnY2LnNpbjZfc2NvcGVfaWQgPSBpZmEtPmlkZXYtPmRldi0+aWZpbmRleDsKIAkJCWFkZHItPnZhbGlkID0gMTsKIAkJCXNwaW5fbG9ja19iaCgmc2N0cF9sb2NhbF9hZGRyX2xvY2spOwpAQCAtNjI4LDkgKzYyNyw3IEBACiBzdGF0aWMgc3RydWN0IHNvY2sgKnNjdHBfdjZfY3JlYXRlX2FjY2VwdF9zayhzdHJ1Y3Qgc29jayAqc2ssCiAJCQkJCSAgICAgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpCiB7Ci0Jc3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spOwogCXN0cnVjdCBzb2NrICpuZXdzazsKLQlzdHJ1Y3QgaW5ldF9zb2NrICpuZXdpbmV0OwogCXN0cnVjdCBpcHY2X3BpbmZvICpuZXducCwgKm5wID0gaW5ldDZfc2soc2spOwogCXN0cnVjdCBzY3RwNl9zb2NrICpuZXdzY3RwNnNrOwogCkBAIC02NDAsMTcgKzYzNyw3IEBACiAKIAlzb2NrX2luaXRfZGF0YShOVUxMLCBuZXdzayk7CiAKLQluZXdzay0+c2tfdHlwZSA9IFNPQ0tfU1RSRUFNOwotCi0JbmV3c2stPnNrX3Byb3QgPSBzay0+c2tfcHJvdDsKLQluZXdzay0+c2tfbm9fY2hlY2sgPSBzay0+c2tfbm9fY2hlY2s7Ci0JbmV3c2stPnNrX3JldXNlID0gc2stPnNrX3JldXNlOwotCi0JbmV3c2stPnNrX2Rlc3RydWN0ID0gaW5ldF9zb2NrX2Rlc3RydWN0OwotCW5ld3NrLT5za19mYW1pbHkgPSBQRl9JTkVUNjsKLQluZXdzay0+c2tfcHJvdG9jb2wgPSBJUFBST1RPX1NDVFA7Ci0JbmV3c2stPnNrX2JhY2tsb2dfcmN2ID0gc2stPnNrX3Byb3QtPmJhY2tsb2dfcmN2OwotCW5ld3NrLT5za19zaHV0ZG93biA9IHNrLT5za19zaHV0ZG93bjsKKwlzY3RwX2NvcHlfc29jayhuZXdzaywgc2ssIGFzb2MpOwogCXNvY2tfcmVzZXRfZmxhZyhzaywgU09DS19aQVBQRUQpOwogCiAJbmV3c2N0cDZzayA9IChzdHJ1Y3Qgc2N0cDZfc29jayAqKW5ld3NrOwpAQCAtNjU4LDcgKzY0NSw2IEBACiAKIAlzY3RwX3NrKG5ld3NrKS0+djRtYXBwZWQgPSBzY3RwX3NrKHNrKS0+djRtYXBwZWQ7CiAKLQluZXdpbmV0ID0gaW5ldF9zayhuZXdzayk7CiAJbmV3bnAgPSBpbmV0Nl9zayhuZXdzayk7CiAKIAltZW1jcHkobmV3bnAsIG5wLCBzaXplb2Yoc3RydWN0IGlwdjZfcGluZm8pKTsKQEAgLTY2NiwyNiArNjUyLDggQEAKIAkvKiBJbml0aWFsaXplIHNrJ3Mgc3BvcnQsIGRwb3J0LCByY3Zfc2FkZHIgYW5kIGRhZGRyIGZvciBnZXRzb2NrbmFtZSgpCiAJICogYW5kIGdldHBlZXJuYW1lKCkuCiAJICovCi0JbmV3aW5ldC0+c3BvcnQgPSBpbmV0LT5zcG9ydDsKLQluZXducC0+c2FkZHIgPSBucC0+c2FkZHI7Ci0JbmV3bnAtPnJjdl9zYWRkciA9IG5wLT5yY3Zfc2FkZHI7Ci0JbmV3aW5ldC0+ZHBvcnQgPSBodG9ucyhhc29jLT5wZWVyLnBvcnQpOwogCXNjdHBfdjZfdG9fc2tfZGFkZHIoJmFzb2MtPnBlZXIucHJpbWFyeV9hZGRyLCBuZXdzayk7CiAKLQkvKiBJbml0IHRoZSBpcHY0IHBhcnQgb2YgdGhlIHNvY2tldCBzaW5jZSB3ZSBjYW4gaGF2ZSBzb2NrZXRzCi0JICogdXNpbmcgdjYgQVBJIGZvciBpcHY0LgotCSAqLwotCW5ld2luZXQtPnVjX3R0bCA9IC0xOwotCW5ld2luZXQtPm1jX2xvb3AgPSAxOwotCW5ld2luZXQtPm1jX3R0bCA9IDE7Ci0JbmV3aW5ldC0+bWNfaW5kZXggPSAwOwotCW5ld2luZXQtPm1jX2xpc3QgPSBOVUxMOwotCi0JaWYgKGlwdjRfY29uZmlnLm5vX3BtdHVfZGlzYykKLQkJbmV3aW5ldC0+cG10dWRpc2MgPSBJUF9QTVRVRElTQ19ET05UOwotCWVsc2UKLQkJbmV3aW5ldC0+cG10dWRpc2MgPSBJUF9QTVRVRElTQ19XQU5UOwotCiAJc2tfcmVmY250X2RlYnVnX2luYyhuZXdzayk7CiAKIAlpZiAobmV3c2stPnNrX3Byb3QtPmluaXQobmV3c2spKSB7CmRpZmYgLS1naXQgYS9uZXQvc2N0cC9vdXRwdXQuYyBiL25ldC9zY3RwL291dHB1dC5jCmluZGV4IDczNjM5MzUuLjdkMDhmNTIgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL291dHB1dC5jCisrKyBiL25ldC9zY3RwL291dHB1dC5jCkBAIC00OSwxMyArNDksMTAgQEAKICNpbmNsdWRlIDxsaW51eC9pcHY2Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPG5ldC9pbmV0X2Vjbi5oPgorI2luY2x1ZGUgPG5ldC9pcC5oPgogI2luY2x1ZGUgPG5ldC9pY21wLmg+CiAjaW5jbHVkZSA8bmV0L25ldF9uYW1lc3BhY2UuaD4KIAotI2lmbmRlZiBURVNUX0ZSQU1FCi0jaW5jbHVkZSA8bmV0L3RjcC5oPgotI2VuZGlmIC8qIFRFU1RfRlJBTUUgKG5vdCBkZWZpbmVkKSAqLwotCiAjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+IC8qIGZvciBzYV9mYW1pbHlfdCAqLwogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CiAKQEAgLTM2Nyw3ICszNjQsNiBAQAogCXN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqdHAgPSBwYWNrZXQtPnRyYW5zcG9ydDsKIAlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyA9IHRwLT5hc29jOwogCXN0cnVjdCBzY3RwaGRyICpzaDsKLQlfX2JlMzIgY3JjMzIgPSBfX2NvbnN0YW50X2NwdV90b19iZTMyKDApOwogCXN0cnVjdCBza19idWZmICpuc2tiOwogCXN0cnVjdCBzY3RwX2NodW5rICpjaHVuaywgKnRtcDsKIAlzdHJ1Y3Qgc29jayAqc2s7CkBAIC01MzEsMTcgKzUyNywxNiBAQAogCSAqIE5vdGU6IEFkbGVyLTMyIGlzIG5vIGxvbmdlciBhcHBsaWNhYmxlLCBhcyBoYXMgYmVlbiByZXBsYWNlZAogCSAqIGJ5IENSQzMyLUMgYXMgZGVzY3JpYmVkIGluIDxkcmFmdC1pZXRmLXRzdndnLXNjdHBjc3VtLTAyLnR4dD4uCiAJICovCi0JaWYgKCEoZHN0LT5kZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9OT19DU1VNKSkgewotCQljcmMzMiA9IHNjdHBfc3RhcnRfY2tzdW0oKF9fdTggKilzaCwgY2tzdW1fYnVmX2xlbik7Ci0JCWNyYzMyID0gc2N0cF9lbmRfY2tzdW0oY3JjMzIpOworCWlmICghc2N0cF9jaGVja3N1bV9kaXNhYmxlICYmICEoZHN0LT5kZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9OT19DU1VNKSkgeworCQlfX3UzMiBjcmMzMiA9IHNjdHBfc3RhcnRfY2tzdW0oKF9fdTggKilzaCwgY2tzdW1fYnVmX2xlbik7CisKKwkJLyogMykgUHV0IHRoZSByZXN1bHRhbnQgdmFsdWUgaW50byB0aGUgY2hlY2tzdW0gZmllbGQgaW4gdGhlCisJCSAqICAgIGNvbW1vbiBoZWFkZXIsIGFuZCBsZWF2ZSB0aGUgcmVzdCBvZiB0aGUgYml0cyB1bmNoYW5nZWQuCisJCSAqLworCQlzaC0+Y2hlY2tzdW0gPSBzY3RwX2VuZF9ja3N1bShjcmMzMik7CiAJfSBlbHNlCiAJCW5za2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwogCi0JLyogMykgUHV0IHRoZSByZXN1bHRhbnQgdmFsdWUgaW50byB0aGUgY2hlY2tzdW0gZmllbGQgaW4gdGhlCi0JICogICAgY29tbW9uIGhlYWRlciwgYW5kIGxlYXZlIHRoZSByZXN0IG9mIHRoZSBiaXRzIHVuY2hhbmdlZC4KLQkgKi8KLQlzaC0+Y2hlY2tzdW0gPSBjcmMzMjsKLQogCS8qIElQIGxheWVyIEVDTiBzdXBwb3J0CiAJICogRnJvbSBSRkMgMjQ4MQogCSAqICAiVGhlIEVDTi1DYXBhYmxlIFRyYW5zcG9ydCAoRUNUKSBiaXQgd291bGQgYmUgc2V0IGJ5IHRoZQpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvb3V0cXVldWUuYyBiL25ldC9zY3RwL291dHF1ZXVlLmMKaW5kZXggYmM0MTFjOC4uZDc2NWZjNSAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvb3V0cXVldWUuYworKysgYi9uZXQvc2N0cC9vdXRxdWV1ZS5jCkBAIC00MjgsNyArNDI4LDggQEAKIAkJCSAqIHJldHJhbnNtaXR0aW5nIGR1ZSB0byBUMyB0aW1lb3V0LgogCQkJICovCiAJCQlpZiAocmVhc29uID09IFNDVFBfUlRYUl9UM19SVFggJiYKLQkJCSAgICAoamlmZmllcyAtIGNodW5rLT5zZW50X2F0KSA8IHRyYW5zcG9ydC0+bGFzdF9ydG8pCisJCQkgICAgdGltZV9iZWZvcmUoamlmZmllcywgY2h1bmstPnNlbnRfYXQgKworCQkJCQkJIHRyYW5zcG9ydC0+bGFzdF9ydG8pKQogCQkJCWNvbnRpbnVlOwogCiAJCQkvKiBSRkMgMjk2MCA2LjIuMSBQcm9jZXNzaW5nIGEgUmVjZWl2ZWQgU0FDSwpAQCAtMTc1Nyw2ICsxNzU4LDkgQEAKIAlzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bms7CiAJc3RydWN0IGxpc3RfaGVhZCAqbGNodW5rLCAqdGVtcDsKIAorCWlmICghYXNvYy0+cGVlci5wcnNjdHBfY2FwYWJsZSkKKwkJcmV0dXJuOworCiAJLyogUFItU0NUUCBDMSkgTGV0IFNhY2tDdW1BY2sgYmUgdGhlIEN1bXVsYXRpdmUgVFNOIEFDSyBjYXJyaWVkIGluIHRoZQogCSAqIHJlY2VpdmVkIFNBQ0suCiAJICoKZGlmZiAtLWdpdCBhL25ldC9zY3RwL3Byb3RvY29sLmMgYi9uZXQvc2N0cC9wcm90b2NvbC5jCmluZGV4IGM0OTg2ZDAuLmNiMTk4YWYgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3Byb3RvY29sLmMKKysrIGIvbmV0L3NjdHAvcHJvdG9jb2wuYwpAQCAtNTg5LDQ2ICs1ODksMjEgQEAKIHN0YXRpYyBzdHJ1Y3Qgc29jayAqc2N0cF92NF9jcmVhdGVfYWNjZXB0X3NrKHN0cnVjdCBzb2NrICpzaywKIAkJCQkJICAgICBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYykKIHsKLQlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7Ci0Jc3RydWN0IGluZXRfc29jayAqbmV3aW5ldDsKIAlzdHJ1Y3Qgc29jayAqbmV3c2sgPSBza19hbGxvYyhzb2NrX25ldChzayksIFBGX0lORVQsIEdGUF9LRVJORUwsCiAJCQlzay0+c2tfcHJvdCk7CisJc3RydWN0IGluZXRfc29jayAqbmV3aW5ldDsKIAogCWlmICghbmV3c2spCiAJCWdvdG8gb3V0OwogCiAJc29ja19pbml0X2RhdGEoTlVMTCwgbmV3c2spOwogCi0JbmV3c2stPnNrX3R5cGUgPSBTT0NLX1NUUkVBTTsKLQotCW5ld3NrLT5za19ub19jaGVjayA9IHNrLT5za19ub19jaGVjazsKLQluZXdzay0+c2tfcmV1c2UgPSBzay0+c2tfcmV1c2U7Ci0JbmV3c2stPnNrX3NodXRkb3duID0gc2stPnNrX3NodXRkb3duOwotCi0JbmV3c2stPnNrX2Rlc3RydWN0ID0gaW5ldF9zb2NrX2Rlc3RydWN0OwotCW5ld3NrLT5za19mYW1pbHkgPSBQRl9JTkVUOwotCW5ld3NrLT5za19wcm90b2NvbCA9IElQUFJPVE9fU0NUUDsKLQluZXdzay0+c2tfYmFja2xvZ19yY3YgPSBzay0+c2tfcHJvdC0+YmFja2xvZ19yY3Y7CisJc2N0cF9jb3B5X3NvY2sobmV3c2ssIHNrLCBhc29jKTsKIAlzb2NrX3Jlc2V0X2ZsYWcobmV3c2ssIFNPQ0tfWkFQUEVEKTsKIAogCW5ld2luZXQgPSBpbmV0X3NrKG5ld3NrKTsKIAotCS8qIEluaXRpYWxpemUgc2sncyBzcG9ydCwgZHBvcnQsIHJjdl9zYWRkciBhbmQgZGFkZHIgZm9yCi0JICogZ2V0c29ja25hbWUoKSBhbmQgZ2V0cGVlcm5hbWUoKQotCSAqLwotCW5ld2luZXQtPnNwb3J0ID0gaW5ldC0+c3BvcnQ7Ci0JbmV3aW5ldC0+c2FkZHIgPSBpbmV0LT5zYWRkcjsKLQluZXdpbmV0LT5yY3Zfc2FkZHIgPSBpbmV0LT5yY3Zfc2FkZHI7Ci0JbmV3aW5ldC0+ZHBvcnQgPSBodG9ucyhhc29jLT5wZWVyLnBvcnQpOwogCW5ld2luZXQtPmRhZGRyID0gYXNvYy0+cGVlci5wcmltYXJ5X2FkZHIudjQuc2luX2FkZHIuc19hZGRyOwotCW5ld2luZXQtPnBtdHVkaXNjID0gaW5ldC0+cG10dWRpc2M7Ci0JbmV3aW5ldC0+aWQgPSBhc29jLT5uZXh0X3RzbiBeIGppZmZpZXM7Ci0KLQluZXdpbmV0LT51Y190dGwgPSAtMTsKLQluZXdpbmV0LT5tY19sb29wID0gMTsKLQluZXdpbmV0LT5tY190dGwgPSAxOwotCW5ld2luZXQtPm1jX2luZGV4ID0gMDsKLQluZXdpbmV0LT5tY19saXN0ID0gTlVMTDsKIAogCXNrX3JlZmNudF9kZWJ1Z19pbmMobmV3c2spOwogCkBAIC0xNDEzLDQgKzEzODgsNiBAQAogTU9EVUxFX0FMSUFTKCJuZXQtcGYtIiBfX3N0cmluZ2lmeShQRl9JTkVUNikgIi1wcm90by0xMzIiKTsKIE1PRFVMRV9BVVRIT1IoIkxpbnV4IEtlcm5lbCBTQ1RQIGRldmVsb3BlcnMgPGxrc2N0cC1kZXZlbG9wZXJzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiU3VwcG9ydCBmb3IgdGhlIFNDVFAgcHJvdG9jb2wgKFJGQzI5NjApIik7Cittb2R1bGVfcGFyYW1fbmFtZWQobm9fY2hlY2tzdW1zLCBzY3RwX2NoZWNrc3VtX2Rpc2FibGUsIGJvb2wsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhub19jaGVja3N1bXMsICJEaXNhYmxlIGNoZWNrc3VtcyBjb21wdXRpbmcgYW5kIHZlcmlmaWNhdGlvbiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvc21fbWFrZV9jaHVuay5jIGIvbmV0L3NjdHAvc21fbWFrZV9jaHVuay5jCmluZGV4IGZkOGFjYjQuLjY4NTFlZTkgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3NtX21ha2VfY2h1bmsuYworKysgYi9uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMKQEAgLTEwMCwxMSArMTAwLDExIEBACiAgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2N0cF9wYXJhbWhkciBlY2FwX3BhcmFtID0gewogCVNDVFBfUEFSQU1fRUNOX0NBUEFCTEUsCi0JX19jb25zdGFudF9odG9ucyhzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpKSwKKwljcHVfdG9fYmUxNihzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpKSwKIH07CiBzdGF0aWMgY29uc3Qgc3RydWN0IHNjdHBfcGFyYW1oZHIgcHJzY3RwX3BhcmFtID0gewogCVNDVFBfUEFSQU1fRldEX1RTTl9TVVBQT1JULAotCV9fY29uc3RhbnRfaHRvbnMoc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSksCisJY3B1X3RvX2JlMTYoc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSksCiB9OwogCiAvKiBBIGhlbHBlciB0byBpbml0aWFsaXplIHRvIGluaXRpYWxpemUgYW4gb3AgZXJyb3IgaW5zaWRlIGEKQEAgLTIyNCw3ICsyMjQsOSBAQAogCQludW1fZXh0ICs9IDI7CiAJfQogCi0JY2h1bmtzaXplICs9IHNpemVvZihhaXBhcmFtKTsKKwlpZiAoc3AtPmFkYXB0YXRpb25faW5kKQorCQljaHVua3NpemUgKz0gc2l6ZW9mKGFpcGFyYW0pOworCiAJY2h1bmtzaXplICs9IHZwYXJhbV9sZW47CiAKIAkvKiBBY2NvdW50IGZvciBBVVRIIHJlbGF0ZWQgcGFyYW1ldGVycyAqLwpAQCAtMzA0LDEwICszMDYsMTIgQEAKIAlpZiAoc2N0cF9wcnNjdHBfZW5hYmxlKQogCQlzY3RwX2FkZHRvX2NodW5rKHJldHZhbCwgc2l6ZW9mKHByc2N0cF9wYXJhbSksICZwcnNjdHBfcGFyYW0pOwogCi0JYWlwYXJhbS5wYXJhbV9oZHIudHlwZSA9IFNDVFBfUEFSQU1fQURBUFRBVElPTl9MQVlFUl9JTkQ7Ci0JYWlwYXJhbS5wYXJhbV9oZHIubGVuZ3RoID0gaHRvbnMoc2l6ZW9mKGFpcGFyYW0pKTsKLQlhaXBhcmFtLmFkYXB0YXRpb25faW5kID0gaHRvbmwoc3AtPmFkYXB0YXRpb25faW5kKTsKLQlzY3RwX2FkZHRvX2NodW5rKHJldHZhbCwgc2l6ZW9mKGFpcGFyYW0pLCAmYWlwYXJhbSk7CisJaWYgKHNwLT5hZGFwdGF0aW9uX2luZCkgeworCQlhaXBhcmFtLnBhcmFtX2hkci50eXBlID0gU0NUUF9QQVJBTV9BREFQVEFUSU9OX0xBWUVSX0lORDsKKwkJYWlwYXJhbS5wYXJhbV9oZHIubGVuZ3RoID0gaHRvbnMoc2l6ZW9mKGFpcGFyYW0pKTsKKwkJYWlwYXJhbS5hZGFwdGF0aW9uX2luZCA9IGh0b25sKHNwLT5hZGFwdGF0aW9uX2luZCk7CisJCXNjdHBfYWRkdG9fY2h1bmsocmV0dmFsLCBzaXplb2YoYWlwYXJhbSksICZhaXBhcmFtKTsKKwl9CiAKIAkvKiBBZGQgU0NUUC1BVVRIIGNodW5rcyB0byB0aGUgcGFyYW1ldGVyIGxpc3QgKi8KIAlpZiAoc2N0cF9hdXRoX2VuYWJsZSkgewpAQCAtMzMyLDYgKzMzNiw3IEBACiAJc2N0cF9pbml0aGRyX3QgaW5pdGFjazsKIAlzdHJ1Y3Qgc2N0cF9jaHVuayAqcmV0dmFsOwogCXVuaW9uIHNjdHBfcGFyYW1zIGFkZHJzOworCXN0cnVjdCBzY3RwX3NvY2sgKnNwOwogCWludCBhZGRyc19sZW47CiAJc2N0cF9jb29raWVfcGFyYW1fdCAqY29va2llOwogCWludCBjb29raWVfbGVuOwpAQCAtMzY2LDIyICszNzEsMjQgQEAKIAkvKiBDYWxjdWxhdGUgdGhlIHRvdGFsIHNpemUgb2YgYWxsb2NhdGlvbiwgaW5jbHVkZSB0aGUgcmVzZXJ2ZWQKIAkgKiBzcGFjZSBmb3IgcmVwb3J0aW5nIHVua25vd24gcGFyYW1ldGVycyBpZiBpdCBpcyBzcGVjaWZpZWQuCiAJICovCisJc3AgPSBzY3RwX3NrKGFzb2MtPmJhc2Uuc2spOwogCWNodW5rc2l6ZSA9IHNpemVvZihpbml0YWNrKSArIGFkZHJzX2xlbiArIGNvb2tpZV9sZW4gKyB1bmtwYXJhbV9sZW47CiAKIAkvKiBUZWxsIHBlZXIgdGhhdCB3ZSdsbCBkbyBFQ04gb25seSBpZiBwZWVyIGFkdmVydGlzZWQgc3VjaCBjYXAuICAqLwogCWlmIChhc29jLT5wZWVyLmVjbl9jYXBhYmxlKQogCQljaHVua3NpemUgKz0gc2l6ZW9mKGVjYXBfcGFyYW0pOwogCi0JaWYgKHNjdHBfcHJzY3RwX2VuYWJsZSkKKwlpZiAoYXNvYy0+cGVlci5wcnNjdHBfY2FwYWJsZSkKIAkJY2h1bmtzaXplICs9IHNpemVvZihwcnNjdHBfcGFyYW0pOwogCi0JaWYgKHNjdHBfYWRkaXBfZW5hYmxlKSB7CisJaWYgKGFzb2MtPnBlZXIuYXNjb25mX2NhcGFibGUpIHsKIAkJZXh0ZW5zaW9uc1tudW1fZXh0XSA9IFNDVFBfQ0lEX0FTQ09ORjsKIAkJZXh0ZW5zaW9uc1tudW1fZXh0KzFdID0gU0NUUF9DSURfQVNDT05GX0FDSzsKIAkJbnVtX2V4dCArPSAyOwogCX0KIAotCWNodW5rc2l6ZSArPSBzaXplb2YoYWlwYXJhbSk7CisJaWYgKHNwLT5hZGFwdGF0aW9uX2luZCkKKwkJY2h1bmtzaXplICs9IHNpemVvZihhaXBhcmFtKTsKIAogCWlmIChhc29jLT5wZWVyLmF1dGhfY2FwYWJsZSkgewogCQlhdXRoX3JhbmRvbSA9IChzY3RwX3BhcmFtaGRyX3QgKilhc29jLT5jLmF1dGhfcmFuZG9tOwpAQCAtNDMyLDEwICs0MzksMTIgQEAKIAlpZiAoYXNvYy0+cGVlci5wcnNjdHBfY2FwYWJsZSkKIAkJc2N0cF9hZGR0b19jaHVuayhyZXR2YWwsIHNpemVvZihwcnNjdHBfcGFyYW0pLCAmcHJzY3RwX3BhcmFtKTsKIAotCWFpcGFyYW0ucGFyYW1faGRyLnR5cGUgPSBTQ1RQX1BBUkFNX0FEQVBUQVRJT05fTEFZRVJfSU5EOwotCWFpcGFyYW0ucGFyYW1faGRyLmxlbmd0aCA9IGh0b25zKHNpemVvZihhaXBhcmFtKSk7Ci0JYWlwYXJhbS5hZGFwdGF0aW9uX2luZCA9IGh0b25sKHNjdHBfc2soYXNvYy0+YmFzZS5zayktPmFkYXB0YXRpb25faW5kKTsKLQlzY3RwX2FkZHRvX2NodW5rKHJldHZhbCwgc2l6ZW9mKGFpcGFyYW0pLCAmYWlwYXJhbSk7CisJaWYgKHNwLT5hZGFwdGF0aW9uX2luZCkgeworCQlhaXBhcmFtLnBhcmFtX2hkci50eXBlID0gU0NUUF9QQVJBTV9BREFQVEFUSU9OX0xBWUVSX0lORDsKKwkJYWlwYXJhbS5wYXJhbV9oZHIubGVuZ3RoID0gaHRvbnMoc2l6ZW9mKGFpcGFyYW0pKTsKKwkJYWlwYXJhbS5hZGFwdGF0aW9uX2luZCA9IGh0b25sKHNwLT5hZGFwdGF0aW9uX2luZCk7CisJCXNjdHBfYWRkdG9fY2h1bmsocmV0dmFsLCBzaXplb2YoYWlwYXJhbSksICZhaXBhcmFtKTsKKwl9CiAKIAlpZiAoYXNvYy0+cGVlci5hdXRoX2NhcGFibGUpIHsKIAkJc2N0cF9hZGR0b19jaHVuayhyZXR2YWwsIG50b2hzKGF1dGhfcmFuZG9tLT5sZW5ndGgpLApkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvc21fc2lkZWVmZmVjdC5jIGIvbmV0L3NjdHAvc21fc2lkZWVmZmVjdC5jCmluZGV4IGI1NDk1YWUuLmUyMDIwZWIgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3NtX3NpZGVlZmZlY3QuYworKysgYi9uZXQvc2N0cC9zbV9zaWRlZWZmZWN0LmMKQEAgLTQzNCw3ICs0MzQsOCBAQAogICoKICAqLwogc3RhdGljIHZvaWQgc2N0cF9kb184XzJfdHJhbnNwb3J0X3N0cmlrZShzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKLQkJCQkJIHN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqdHJhbnNwb3J0KQorCQkJCQkgc3RydWN0IHNjdHBfdHJhbnNwb3J0ICp0cmFuc3BvcnQsCisJCQkJCSBpbnQgaXNfaGIpCiB7CiAJLyogVGhlIGNoZWNrIGZvciBhc3NvY2lhdGlvbidzIG92ZXJhbGwgZXJyb3IgY291bnRlciBleGNlZWRpbmcgdGhlCiAJICogdGhyZXNob2xkIGlzIGRvbmUgaW4gdGhlIHN0YXRlIGZ1bmN0aW9uLgpAQCAtNDYxLDkgKzQ2MiwxNSBAQAogCSAqIGV4cGlyZXMsIHNldCBSVE8gPC0gUlRPICogMiAoImJhY2sgb2ZmIHRoZSB0aW1lciIpLiAgVGhlCiAJICogbWF4aW11bSB2YWx1ZSBkaXNjdXNzZWQgaW4gcnVsZSBDNyBhYm92ZSAoUlRPLm1heCkgbWF5IGJlCiAJICogdXNlZCB0byBwcm92aWRlIGFuIHVwcGVyIGJvdW5kIHRvIHRoaXMgZG91Ymxpbmcgb3BlcmF0aW9uLgorCSAqCisJICogU3BlY2lhbCBDYXNlOiAgdGhlIGZpcnN0IEhCIGRvZXNuJ3QgdHJpZ2dlciBleHBvbmVudGlhbCBiYWNrb2ZmLgorCSAqIFRoZSBmaXJzdCB1bmFja25vd2xlZ2VkIEhCIHRyaWdnZXJzIGl0LiAgV2UgZG8gdGhpcyB3aXRoIGEgZmxhZworCSAqIHRoYXQgaW5kaWNhdGVzIHRoYXQgd2UgaGF2ZSBhbiBvdXRzdGFuZGluZyBIQi4KIAkgKi8KLQl0cmFuc3BvcnQtPmxhc3RfcnRvID0gdHJhbnNwb3J0LT5ydG87Ci0JdHJhbnNwb3J0LT5ydG8gPSBtaW4oKHRyYW5zcG9ydC0+cnRvICogMiksIHRyYW5zcG9ydC0+YXNvYy0+cnRvX21heCk7CisJaWYgKCFpc19oYiB8fCB0cmFuc3BvcnQtPmhiX3NlbnQpIHsKKwkJdHJhbnNwb3J0LT5sYXN0X3J0byA9IHRyYW5zcG9ydC0+cnRvOworCQl0cmFuc3BvcnQtPnJ0byA9IG1pbigodHJhbnNwb3J0LT5ydG8gKiAyKSwgdHJhbnNwb3J0LT5hc29jLT5ydG9fbWF4KTsKKwl9CiB9CiAKIC8qIFdvcmtlciByb3V0aW5lIHRvIGhhbmRsZSBJTklUIGNvbW1hbmQgZmFpbHVyZS4gICovCkBAIC02MjEsNiArNjI4LDExIEBACiAJdC0+ZXJyb3JfY291bnQgPSAwOwogCXQtPmFzb2MtPm92ZXJhbGxfZXJyb3JfY291bnQgPSAwOwogCisJLyogQ2xlYXIgdGhlIGhiX3NlbnQgZmxhZyB0byBzaWduYWwgdGhhdCB3ZSBoYWQgYSBnb29kCisJICogYWNrbm93bGVkZ2VtZW50LgorCSAqLworCXQtPmhiX3NlbnQgPSAwOworCiAJLyogTWFyayB0aGUgZGVzdGluYXRpb24gdHJhbnNwb3J0IGFkZHJlc3MgYXMgYWN0aXZlIGlmIGl0IGlzIG5vdCBzbwogCSAqIG1hcmtlZC4KIAkgKi8KQEAgLTY0NiwxOCArNjU4LDYgQEAKIAkJc2N0cF90cmFuc3BvcnRfaG9sZCh0KTsKIH0KIAotLyogSGVscGVyIGZ1bmN0aW9uIHRvIGRvIGEgdHJhbnNwb3J0IHJlc2V0IGF0IHRoZSBleHBpcnkgb2YgdGhlIGhlYXJiZWF0Ci0gKiB0aW1lci4KLSAqLwotc3RhdGljIHZvaWQgc2N0cF9jbWRfdHJhbnNwb3J0X3Jlc2V0KHNjdHBfY21kX3NlcV90ICpjbWRzLAotCQkJCSAgICAgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCi0JCQkJICAgICBzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKnQpCi17Ci0Jc2N0cF90cmFuc3BvcnRfbG93ZXJfY3duZCh0LCBTQ1RQX0xPV0VSX0NXTkRfSU5BQ1RJVkUpOwotCi0JLyogTWFyayBvbmUgc3RyaWtlIGFnYWluc3QgYSB0cmFuc3BvcnQuICAqLwotCXNjdHBfZG9fOF8yX3RyYW5zcG9ydF9zdHJpa2UoYXNvYywgdCk7Ci19CiAKIC8qIEhlbHBlciBmdW5jdGlvbiB0byBwcm9jZXNzIHRoZSBwcm9jZXNzIFNBQ0sgY29tbWFuZC4gICovCiBzdGF0aWMgaW50IHNjdHBfY21kX3Byb2Nlc3Nfc2FjayhzY3RwX2NtZF9zZXFfdCAqY21kcywKQEAgLTE0NTgsMTIgKzE0NTgsMTkgQEAKIAogCQljYXNlIFNDVFBfQ01EX1NUUklLRToKIAkJCS8qIE1hcmsgb25lIHN0cmlrZSBhZ2FpbnN0IGEgdHJhbnNwb3J0LiAgKi8KLQkJCXNjdHBfZG9fOF8yX3RyYW5zcG9ydF9zdHJpa2UoYXNvYywgY21kLT5vYmoudHJhbnNwb3J0KTsKKwkJCXNjdHBfZG9fOF8yX3RyYW5zcG9ydF9zdHJpa2UoYXNvYywgY21kLT5vYmoudHJhbnNwb3J0LAorCQkJCQkJICAgIDApOwogCQkJYnJlYWs7CiAKLQkJY2FzZSBTQ1RQX0NNRF9UUkFOU1BPUlRfUkVTRVQ6CisJCWNhc2UgU0NUUF9DTURfVFJBTlNQT1JUX0lETEU6CiAJCQl0ID0gY21kLT5vYmoudHJhbnNwb3J0OwotCQkJc2N0cF9jbWRfdHJhbnNwb3J0X3Jlc2V0KGNvbW1hbmRzLCBhc29jLCB0KTsKKwkJCXNjdHBfdHJhbnNwb3J0X2xvd2VyX2N3bmQodCwgU0NUUF9MT1dFUl9DV05EX0lOQUNUSVZFKTsKKwkJCWJyZWFrOworCisJCWNhc2UgU0NUUF9DTURfVFJBTlNQT1JUX0hCX1NFTlQ6CisJCQl0ID0gY21kLT5vYmoudHJhbnNwb3J0OworCQkJc2N0cF9kb184XzJfdHJhbnNwb3J0X3N0cmlrZShhc29jLCB0LCAxKTsKKwkJCXQtPmhiX3NlbnQgPSAxOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBTQ1RQX0NNRF9UUkFOU1BPUlRfT046CmRpZmYgLS1naXQgYS9uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYyBiL25ldC9zY3RwL3NtX3N0YXRlZnVucy5jCmluZGV4IGY4OGRmZGUuLjU1YTYxYWEgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3NtX3N0YXRlZnVucy5jCisrKyBiL25ldC9zY3RwL3NtX3N0YXRlZnVucy5jCkBAIC05ODgsNyArOTg4LDkgQEAKIAkJLyogU2V0IHRyYW5zcG9ydCBlcnJvciBjb3VudGVyIGFuZCBhc3NvY2lhdGlvbiBlcnJvciBjb3VudGVyCiAJCSAqIHdoZW4gc2VuZGluZyBoZWFydGJlYXQuCiAJCSAqLwotCQlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX1RSQU5TUE9SVF9SRVNFVCwKKwkJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9UUkFOU1BPUlRfSURMRSwKKwkJCQlTQ1RQX1RSQU5TUE9SVCh0cmFuc3BvcnQpKTsKKwkJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9UUkFOU1BPUlRfSEJfU0VOVCwKIAkJCQlTQ1RQX1RSQU5TUE9SVCh0cmFuc3BvcnQpKTsKIAl9CiAJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9IQl9USU1FUl9VUERBVEUsCkBAIC00OTU1LDcgKzQ5NTcsNyBAQAogCSAqICAgIHRvIHRoYXQgYWRkcmVzcyBhbmQgbm90IGFja25vd2xlZGdlZCB3aXRoaW4gb25lIFJUTy4KIAkgKgogCSAqLwotCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfVFJBTlNQT1JUX1JFU0VULAorCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfVFJBTlNQT1JUX0hCX1NFTlQsCiAJCQlTQ1RQX1RSQU5TUE9SVChhcmcpKTsKIAlyZXR1cm4gU0NUUF9ESVNQT1NJVElPTl9DT05TVU1FOwogfQpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvc29ja2V0LmMgYi9uZXQvc2N0cC9zb2NrZXQuYwppbmRleCBmZjBhOGY4Li41ZmIzYThjIDEwMDY0NAotLS0gYS9uZXQvc2N0cC9zb2NrZXQuYworKysgYi9uZXQvc2N0cC9zb2NrZXQuYwpAQCAtMzA2OSw5ICszMDY5LDYgQEAKIAlpbnQgdmFsOwogCWludCBhc3NvY19pZCA9IDA7CiAKLQlpZiAob3B0bGVuIDwgc2l6ZW9mKGludCkpCi0JCXJldHVybiAtRUlOVkFMOwotCiAJaWYgKG9wdGxlbiA9PSBzaXplb2YoaW50KSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCSAgICJTQ1RQOiBVc2Ugb2YgaW50IGluIG1heF9idXJzdCBzb2NrZXQgb3B0aW9uIGRlcHJlY2F0ZWRcbiIpOwpAQCAtMzkzOSw3ICszOTM2LDYgQEAKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBhc29jLT5iYXNlLnNrOwogCXN0cnVjdCBzb2NrZXQgKnNvY2s7Ci0Jc3RydWN0IGluZXRfc29jayAqaW5ldHNrOwogCXN0cnVjdCBzY3RwX2FmICphZjsKIAlpbnQgZXJyID0gMDsKIApAQCAtMzk1NCwxOCArMzk1MCwxOCBAQAogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JLyogUG9wdWxhdGUgdGhlIGZpZWxkcyBvZiB0aGUgbmV3c2sgZnJvbSB0aGUgb2xkc2sgYW5kIG1pZ3JhdGUgdGhlCi0JICogYXNvYyB0byB0aGUgbmV3c2suCi0JICovCi0Jc2N0cF9zb2NrX21pZ3JhdGUoc2ssIHNvY2stPnNrLCBhc29jLCBTQ1RQX1NPQ0tFVF9VRFBfSElHSF9CQU5EV0lEVEgpOworCXNjdHBfY29weV9zb2NrKHNvY2stPnNrLCBzaywgYXNvYyk7CiAKIAkvKiBNYWtlIHBlZWxlZC1vZmYgc29ja2V0cyBtb3JlIGxpa2UgMS0xIGFjY2VwdGVkIHNvY2tldHMuCiAJICogU2V0IHRoZSBkYWRkciBhbmQgaW5pdGlhbGl6ZSBpZCB0byBzb21ldGhpbmcgbW9yZSByYW5kb20KIAkgKi8KIAlhZiA9IHNjdHBfZ2V0X2FmX3NwZWNpZmljKGFzb2MtPnBlZXIucHJpbWFyeV9hZGRyLnNhLnNhX2ZhbWlseSk7CiAJYWYtPnRvX3NrX2RhZGRyKCZhc29jLT5wZWVyLnByaW1hcnlfYWRkciwgc2spOwotCWluZXRzayA9IGluZXRfc2soc29jay0+c2spOwotCWluZXRzay0+aWQgPSBhc29jLT5uZXh0X3RzbiBeIGppZmZpZXM7CisKKwkvKiBQb3B1bGF0ZSB0aGUgZmllbGRzIG9mIHRoZSBuZXdzayBmcm9tIHRoZSBvbGRzayBhbmQgbWlncmF0ZSB0aGUKKwkgKiBhc29jIHRvIHRoZSBuZXdzay4KKwkgKi8KKwlzY3RwX3NvY2tfbWlncmF0ZShzaywgc29jay0+c2ssIGFzb2MsIFNDVFBfU09DS0VUX1VEUF9ISUdIX0JBTkRXSURUSCk7CiAKIAkqc29ja3AgPSBzb2NrOwogCkBAIC01Mjg0LDE2ICs1MjgwLDE0IEBACiAJc3RydWN0IHNjdHBfc29jayAqc3A7CiAJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7CiAKLQlpZiAobGVuIDwgc2l6ZW9mKGludCkpCi0JCXJldHVybiAtRUlOVkFMOwotCiAJaWYgKGxlbiA9PSBzaXplb2YoaW50KSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCSAgICJTQ1RQOiBVc2Ugb2YgaW50IGluIG1heF9idXJzdCBzb2NrZXQgb3B0aW9uIGRlcHJlY2F0ZWRcbiIpOwogCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCSAgICJTQ1RQOiBVc2Ugc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgaW5zdGVhZFxuIik7CiAJCXBhcmFtcy5hc3NvY19pZCA9IDA7Ci0JfSBlbHNlIGlmIChsZW4gPT0gc2l6ZW9mIChzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSkpIHsKKwl9IGVsc2UgaWYgKGxlbiA+PSBzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUpKSB7CisJCWxlbiA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSk7CiAJCWlmIChjb3B5X2Zyb21fdXNlcigmcGFyYW1zLCBvcHR2YWwsIGxlbikpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAl9IGVsc2UKQEAgLTU4NDksMTI3ICs1ODQzLDEzIEBACiB9CiAKIC8qCi0gKiAzLjEuMyBsaXN0ZW4oKSAtIFVEUCBTdHlsZSBTeW50YXgKLSAqCi0gKiAgIEJ5IGRlZmF1bHQsIG5ldyBhc3NvY2lhdGlvbnMgYXJlIG5vdCBhY2NlcHRlZCBmb3IgVURQIHN0eWxlIHNvY2tldHMuCi0gKiAgIEFuIGFwcGxpY2F0aW9uIHVzZXMgbGlzdGVuKCkgdG8gbWFyayBhIHNvY2tldCBhcyBiZWluZyBhYmxlIHRvCi0gKiAgIGFjY2VwdCBuZXcgYXNzb2NpYXRpb25zLgotICovCi1TQ1RQX1NUQVRJQyBpbnQgc2N0cF9zZXFwYWNrZXRfbGlzdGVuKHN0cnVjdCBzb2NrICpzaywgaW50IGJhY2tsb2cpCi17Ci0Jc3RydWN0IHNjdHBfc29jayAqc3AgPSBzY3RwX3NrKHNrKTsKLQlzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAgPSBzcC0+ZXA7Ci0KLQkvKiBPbmx5IFVEUCBzdHlsZSBzb2NrZXRzIHRoYXQgYXJlIG5vdCBwZWVsZWQgb2ZmIGFyZSBhbGxvd2VkIHRvCi0JICogbGlzdGVuKCkuCi0JICovCi0JaWYgKCFzY3RwX3N0eWxlKHNrLCBVRFApKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCS8qIElmIGJhY2tsb2cgaXMgemVybywgZGlzYWJsZSBsaXN0ZW5pbmcuICovCi0JaWYgKCFiYWNrbG9nKSB7Ci0JCWlmIChzY3RwX3NzdGF0ZShzaywgQ0xPU0VEKSkKLQkJCXJldHVybiAwOwotCi0JCXNjdHBfdW5oYXNoX2VuZHBvaW50KGVwKTsKLQkJc2stPnNrX3N0YXRlID0gU0NUUF9TU19DTE9TRUQ7Ci0JCXJldHVybiAwOwotCX0KLQotCS8qIFJldHVybiBpZiB3ZSBhcmUgYWxyZWFkeSBsaXN0ZW5pbmcuICovCi0JaWYgKHNjdHBfc3N0YXRlKHNrLCBMSVNURU5JTkcpKQotCQlyZXR1cm4gMDsKLQotCS8qCi0JICogSWYgYSBiaW5kKCkgb3Igc2N0cF9iaW5keCgpIGlzIG5vdCBjYWxsZWQgcHJpb3IgdG8gYSBsaXN0ZW4oKQotCSAqIGNhbGwgdGhhdCBhbGxvd3MgbmV3IGFzc29jaWF0aW9ucyB0byBiZSBhY2NlcHRlZCwgdGhlIHN5c3RlbQotCSAqIHBpY2tzIGFuIGVwaGVtZXJhbCBwb3J0IGFuZCB3aWxsIGNob29zZSBhbiBhZGRyZXNzIHNldCBlcXVpdmFsZW50Ci0JICogdG8gYmluZGluZyB3aXRoIGEgd2lsZGNhcmQgYWRkcmVzcy4KLQkgKgotCSAqIFRoaXMgaXMgbm90IGN1cnJlbnRseSBzcGVsbGVkIG91dCBpbiB0aGUgU0NUUCBzb2NrZXRzCi0JICogZXh0ZW5zaW9ucyBkcmFmdCwgYnV0IGZvbGxvd3MgdGhlIHByYWN0aWNlIGFzIHNlZW4gaW4gVENQCi0JICogc29ja2V0cy4KLQkgKgotCSAqIEFkZGl0aW9uYWxseSwgdHVybiBvZmYgZmFzdHJldXNlIGZsYWcgc2luY2Ugd2UgYXJlIG5vdCBsaXN0ZW5pbmcKLQkgKi8KLQlzay0+c2tfc3RhdGUgPSBTQ1RQX1NTX0xJU1RFTklORzsKLQlpZiAoIWVwLT5iYXNlLmJpbmRfYWRkci5wb3J0KSB7Ci0JCWlmIChzY3RwX2F1dG9iaW5kKHNrKSkKLQkJCXJldHVybiAtRUFHQUlOOwotCX0gZWxzZSB7Ci0JCWlmIChzY3RwX2dldF9wb3J0KHNrLCBpbmV0X3NrKHNrKS0+bnVtKSkgewotCQkJc2stPnNrX3N0YXRlID0gU0NUUF9TU19DTE9TRUQ7Ci0JCQlyZXR1cm4gLUVBRERSSU5VU0U7Ci0JCX0KLQkJc2N0cF9zayhzayktPmJpbmRfaGFzaC0+ZmFzdHJldXNlID0gMDsKLQl9Ci0KLQlzY3RwX2hhc2hfZW5kcG9pbnQoZXApOwotCXJldHVybiAwOwotfQotCi0vKgotICogNC4xLjMgbGlzdGVuKCkgLSBUQ1AgU3R5bGUgU3ludGF4Ci0gKgotICogICBBcHBsaWNhdGlvbnMgdXNlcyBsaXN0ZW4oKSB0byByZWFkeSB0aGUgU0NUUCBlbmRwb2ludCBmb3IgYWNjZXB0aW5nCi0gKiAgIGluYm91bmQgYXNzb2NpYXRpb25zLgotICovCi1TQ1RQX1NUQVRJQyBpbnQgc2N0cF9zdHJlYW1fbGlzdGVuKHN0cnVjdCBzb2NrICpzaywgaW50IGJhY2tsb2cpCi17Ci0Jc3RydWN0IHNjdHBfc29jayAqc3AgPSBzY3RwX3NrKHNrKTsKLQlzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAgPSBzcC0+ZXA7Ci0KLQkvKiBJZiBiYWNrbG9nIGlzIHplcm8sIGRpc2FibGUgbGlzdGVuaW5nLiAqLwotCWlmICghYmFja2xvZykgewotCQlpZiAoc2N0cF9zc3RhdGUoc2ssIENMT1NFRCkpCi0JCQlyZXR1cm4gMDsKLQotCQlzY3RwX3VuaGFzaF9lbmRwb2ludChlcCk7Ci0JCXNrLT5za19zdGF0ZSA9IFNDVFBfU1NfQ0xPU0VEOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAoc2N0cF9zc3RhdGUoc2ssIExJU1RFTklORykpCi0JCXJldHVybiAwOwotCi0JLyoKLQkgKiBJZiBhIGJpbmQoKSBvciBzY3RwX2JpbmR4KCkgaXMgbm90IGNhbGxlZCBwcmlvciB0byBhIGxpc3RlbigpCi0JICogY2FsbCB0aGF0IGFsbG93cyBuZXcgYXNzb2NpYXRpb25zIHRvIGJlIGFjY2VwdGVkLCB0aGUgc3lzdGVtCi0JICogcGlja3MgYW4gZXBoZW1lcmFsIHBvcnQgYW5kIHdpbGwgY2hvb3NlIGFuIGFkZHJlc3Mgc2V0IGVxdWl2YWxlbnQKLQkgKiB0byBiaW5kaW5nIHdpdGggYSB3aWxkY2FyZCBhZGRyZXNzLgotCSAqCi0JICogVGhpcyBpcyBub3QgY3VycmVudGx5IHNwZWxsZWQgb3V0IGluIHRoZSBTQ1RQIHNvY2tldHMKLQkgKiBleHRlbnNpb25zIGRyYWZ0LCBidXQgZm9sbG93cyB0aGUgcHJhY3RpY2UgYXMgc2VlbiBpbiBUQ1AKLQkgKiBzb2NrZXRzLgotCSAqLwotCXNrLT5za19zdGF0ZSA9IFNDVFBfU1NfTElTVEVOSU5HOwotCWlmICghZXAtPmJhc2UuYmluZF9hZGRyLnBvcnQpIHsKLQkJaWYgKHNjdHBfYXV0b2JpbmQoc2spKQotCQkJcmV0dXJuIC1FQUdBSU47Ci0JfSBlbHNlCi0JCXNjdHBfc2soc2spLT5iaW5kX2hhc2gtPmZhc3RyZXVzZSA9IDA7Ci0KLQlzay0+c2tfbWF4X2Fja19iYWNrbG9nID0gYmFja2xvZzsKLQlzY3RwX2hhc2hfZW5kcG9pbnQoZXApOwotCXJldHVybiAwOwotfQotCi0vKgogICogIE1vdmUgYSBzb2NrZXQgdG8gTElTVEVOSU5HIHN0YXRlLgogICovCi1pbnQgc2N0cF9pbmV0X2xpc3RlbihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgYmFja2xvZykKK1NDVFBfU1RBVElDIGludCBzY3RwX2xpc3Rlbl9zdGFydChzdHJ1Y3Qgc29jayAqc2ssIGludCBiYWNrbG9nKQogewotCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOworCXN0cnVjdCBzY3RwX3NvY2sgKnNwID0gc2N0cF9zayhzayk7CisJc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwID0gc3AtPmVwOwogCXN0cnVjdCBjcnlwdG9faGFzaCAqdGZtID0gTlVMTDsKLQlpbnQgZXJyID0gLUVJTlZBTDsKLQotCWlmICh1bmxpa2VseShiYWNrbG9nIDwgMCkpCi0JCWdvdG8gb3V0OwotCi0Jc2N0cF9sb2NrX3NvY2soc2spOwotCi0JaWYgKHNvY2stPnN0YXRlICE9IFNTX1VOQ09OTkVDVEVEKQotCQlnb3RvIG91dDsKIAogCS8qIEFsbG9jYXRlIEhNQUMgZm9yIGdlbmVyYXRpbmcgY29va2llLiAqLwogCWlmICghc2N0cF9zayhzayktPmhtYWMgJiYgc2N0cF9obWFjX2FsZykgewpAQCAtNTk4MCwzNCArNTg2MCw5NiBAQAogCQkJCSAgICAgICAiU0NUUDogZmFpbGVkIHRvIGxvYWQgdHJhbnNmb3JtIGZvciAlczogJWxkXG4iLAogCQkJCQlzY3RwX2htYWNfYWxnLCBQVFJfRVJSKHRmbSkpOwogCQkJfQotCQkJZXJyID0gLUVOT1NZUzsKLQkJCWdvdG8gb3V0OworCQkJcmV0dXJuIC1FTk9TWVM7CisJCX0KKwkJc2N0cF9zayhzayktPmhtYWMgPSB0Zm07CisJfQorCisJLyoKKwkgKiBJZiBhIGJpbmQoKSBvciBzY3RwX2JpbmR4KCkgaXMgbm90IGNhbGxlZCBwcmlvciB0byBhIGxpc3RlbigpCisJICogY2FsbCB0aGF0IGFsbG93cyBuZXcgYXNzb2NpYXRpb25zIHRvIGJlIGFjY2VwdGVkLCB0aGUgc3lzdGVtCisJICogcGlja3MgYW4gZXBoZW1lcmFsIHBvcnQgYW5kIHdpbGwgY2hvb3NlIGFuIGFkZHJlc3Mgc2V0IGVxdWl2YWxlbnQKKwkgKiB0byBiaW5kaW5nIHdpdGggYSB3aWxkY2FyZCBhZGRyZXNzLgorCSAqCisJICogVGhpcyBpcyBub3QgY3VycmVudGx5IHNwZWxsZWQgb3V0IGluIHRoZSBTQ1RQIHNvY2tldHMKKwkgKiBleHRlbnNpb25zIGRyYWZ0LCBidXQgZm9sbG93cyB0aGUgcHJhY3RpY2UgYXMgc2VlbiBpbiBUQ1AKKwkgKiBzb2NrZXRzLgorCSAqCisJICovCisJc2stPnNrX3N0YXRlID0gU0NUUF9TU19MSVNURU5JTkc7CisJaWYgKCFlcC0+YmFzZS5iaW5kX2FkZHIucG9ydCkgeworCQlpZiAoc2N0cF9hdXRvYmluZChzaykpCisJCQlyZXR1cm4gLUVBR0FJTjsKKwl9IGVsc2UgeworCQlpZiAoc2N0cF9nZXRfcG9ydChzaywgaW5ldF9zayhzayktPm51bSkpIHsKKwkJCXNrLT5za19zdGF0ZSA9IFNDVFBfU1NfQ0xPU0VEOworCQkJcmV0dXJuIC1FQUREUklOVVNFOwogCQl9CiAJfQogCi0Jc3dpdGNoIChzb2NrLT50eXBlKSB7Ci0JY2FzZSBTT0NLX1NFUVBBQ0tFVDoKLQkJZXJyID0gc2N0cF9zZXFwYWNrZXRfbGlzdGVuKHNrLCBiYWNrbG9nKTsKLQkJYnJlYWs7Ci0JY2FzZSBTT0NLX1NUUkVBTToKLQkJZXJyID0gc2N0cF9zdHJlYW1fbGlzdGVuKHNrLCBiYWNrbG9nKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7CisJc2stPnNrX21heF9hY2tfYmFja2xvZyA9IGJhY2tsb2c7CisJc2N0cF9oYXNoX2VuZHBvaW50KGVwKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIDQuMS4zIC8gNS4xLjMgbGlzdGVuKCkKKyAqCisgKiAgIEJ5IGRlZmF1bHQsIG5ldyBhc3NvY2lhdGlvbnMgYXJlIG5vdCBhY2NlcHRlZCBmb3IgVURQIHN0eWxlIHNvY2tldHMuCisgKiAgIEFuIGFwcGxpY2F0aW9uIHVzZXMgbGlzdGVuKCkgdG8gbWFyayBhIHNvY2tldCBhcyBiZWluZyBhYmxlIHRvCisgKiAgIGFjY2VwdCBuZXcgYXNzb2NpYXRpb25zLgorICoKKyAqICAgT24gVENQIHN0eWxlIHNvY2tldHMsIGFwcGxpY2F0aW9ucyB1c2UgbGlzdGVuKCkgdG8gcmVhZHkgdGhlIFNDVFAKKyAqICAgZW5kcG9pbnQgZm9yIGFjY2VwdGluZyBpbmJvdW5kIGFzc29jaWF0aW9ucy4KKyAqCisgKiAgIE9uIGJvdGggdHlwZXMgb2YgZW5kcG9pbnRzIGEgYmFja2xvZyBvZiAnMCcgZGlzYWJsZXMgbGlzdGVuaW5nLgorICoKKyAqICBNb3ZlIGEgc29ja2V0IHRvIExJU1RFTklORyBzdGF0ZS4KKyAqLworaW50IHNjdHBfaW5ldF9saXN0ZW4oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGJhY2tsb2cpCit7CisJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CisJc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwID0gc2N0cF9zayhzayktPmVwOworCWludCBlcnIgPSAtRUlOVkFMOworCisJaWYgKHVubGlrZWx5KGJhY2tsb2cgPCAwKSkKKwkJcmV0dXJuIGVycjsKKworCXNjdHBfbG9ja19zb2NrKHNrKTsKKworCS8qIFBlZWxlZC1vZmYgc29ja2V0cyBhcmUgbm90IGFsbG93ZWQgdG8gbGlzdGVuKCkuICAqLworCWlmIChzY3RwX3N0eWxlKHNrLCBVRFBfSElHSF9CQU5EV0lEVEgpKQorCQlnb3RvIG91dDsKKworCWlmIChzb2NrLT5zdGF0ZSAhPSBTU19VTkNPTk5FQ1RFRCkKKwkJZ290byBvdXQ7CisKKwkvKiBJZiBiYWNrbG9nIGlzIHplcm8sIGRpc2FibGUgbGlzdGVuaW5nLiAqLworCWlmICghYmFja2xvZykgeworCQlpZiAoc2N0cF9zc3RhdGUoc2ssIENMT1NFRCkpCisJCQlnb3RvIG91dDsKKworCQllcnIgPSAwOworCQlzY3RwX3VuaGFzaF9lbmRwb2ludChlcCk7CisJCXNrLT5za19zdGF0ZSA9IFNDVFBfU1NfQ0xPU0VEOworCQlpZiAoc2stPnNrX3JldXNlKQorCQkJc2N0cF9zayhzayktPmJpbmRfaGFzaC0+ZmFzdHJldXNlID0gMTsKKwkJZ290byBvdXQ7CiAJfQogCi0JaWYgKGVycikKLQkJZ290byBjbGVhbnVwOworCS8qIElmIHdlIGFyZSBhbHJlYWR5IGxpc3RlbmluZywganVzdCB1cGRhdGUgdGhlIGJhY2tsb2cgKi8KKwlpZiAoc2N0cF9zc3RhdGUoc2ssIExJU1RFTklORykpCisJCXNrLT5za19tYXhfYWNrX2JhY2tsb2cgPSBiYWNrbG9nOworCWVsc2UgeworCQllcnIgPSBzY3RwX2xpc3Rlbl9zdGFydChzaywgYmFja2xvZyk7CisJCWlmIChlcnIpCisJCQlnb3RvIG91dDsKKwl9CiAKLQkvKiBTdG9yZSBhd2F5IHRoZSB0cmFuc2Zvcm0gcmVmZXJlbmNlLiAqLwotCWlmICghc2N0cF9zayhzayktPmhtYWMpCi0JCXNjdHBfc2soc2spLT5obWFjID0gdGZtOworCWVyciA9IDA7CiBvdXQ6CiAJc2N0cF9yZWxlYXNlX3NvY2soc2spOwogCXJldHVybiBlcnI7Ci1jbGVhbnVwOgotCWNyeXB0b19mcmVlX2hhc2godGZtKTsKLQlnb3RvIG91dDsKIH0KIAogLyoKQEAgLTY3MDAsNiArNjY0Miw0OCBAQAogCXNjdHBfc2tiX3NldF9vd25lcl9yKHNrYiwgc2spOwogfQogCit2b2lkIHNjdHBfY29weV9zb2NrKHN0cnVjdCBzb2NrICpuZXdzaywgc3RydWN0IHNvY2sgKnNrLAorCQkgICAgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpCit7CisJc3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spOworCXN0cnVjdCBpbmV0X3NvY2sgKm5ld2luZXQgPSBpbmV0X3NrKG5ld3NrKTsKKworCW5ld3NrLT5za190eXBlID0gc2stPnNrX3R5cGU7CisJbmV3c2stPnNrX2JvdW5kX2Rldl9pZiA9IHNrLT5za19ib3VuZF9kZXZfaWY7CisJbmV3c2stPnNrX2ZsYWdzID0gc2stPnNrX2ZsYWdzOworCW5ld3NrLT5za19ub19jaGVjayA9IHNrLT5za19ub19jaGVjazsKKwluZXdzay0+c2tfcmV1c2UgPSBzay0+c2tfcmV1c2U7CisKKwluZXdzay0+c2tfc2h1dGRvd24gPSBzay0+c2tfc2h1dGRvd247CisJbmV3c2stPnNrX2Rlc3RydWN0ID0gaW5ldF9zb2NrX2Rlc3RydWN0OworCW5ld3NrLT5za19mYW1pbHkgPSBzay0+c2tfZmFtaWx5OworCW5ld3NrLT5za19wcm90b2NvbCA9IElQUFJPVE9fU0NUUDsKKwluZXdzay0+c2tfYmFja2xvZ19yY3YgPSBzay0+c2tfcHJvdC0+YmFja2xvZ19yY3Y7CisJbmV3c2stPnNrX3NuZGJ1ZiA9IHNrLT5za19zbmRidWY7CisJbmV3c2stPnNrX3JjdmJ1ZiA9IHNrLT5za19yY3ZidWY7CisJbmV3c2stPnNrX2xpbmdlcnRpbWUgPSBzay0+c2tfbGluZ2VydGltZTsKKwluZXdzay0+c2tfcmN2dGltZW8gPSBzay0+c2tfcmN2dGltZW87CisJbmV3c2stPnNrX3NuZHRpbWVvID0gc2stPnNrX3NuZHRpbWVvOworCisJbmV3aW5ldCA9IGluZXRfc2sobmV3c2spOworCisJLyogSW5pdGlhbGl6ZSBzaydzIHNwb3J0LCBkcG9ydCwgcmN2X3NhZGRyIGFuZCBkYWRkciBmb3IKKwkgKiBnZXRzb2NrbmFtZSgpIGFuZCBnZXRwZWVybmFtZSgpCisJICovCisJbmV3aW5ldC0+c3BvcnQgPSBpbmV0LT5zcG9ydDsKKwluZXdpbmV0LT5zYWRkciA9IGluZXQtPnNhZGRyOworCW5ld2luZXQtPnJjdl9zYWRkciA9IGluZXQtPnJjdl9zYWRkcjsKKwluZXdpbmV0LT5kcG9ydCA9IGh0b25zKGFzb2MtPnBlZXIucG9ydCk7CisJbmV3aW5ldC0+cG10dWRpc2MgPSBpbmV0LT5wbXR1ZGlzYzsKKwluZXdpbmV0LT5pZCA9IGFzb2MtPm5leHRfdHNuIF4gamlmZmllczsKKworCW5ld2luZXQtPnVjX3R0bCA9IGluZXQtPnVjX3R0bDsKKwluZXdpbmV0LT5tY19sb29wID0gMTsKKwluZXdpbmV0LT5tY190dGwgPSAxOworCW5ld2luZXQtPm1jX2luZGV4ID0gMDsKKwluZXdpbmV0LT5tY19saXN0ID0gTlVMTDsKK30KKwogLyogUG9wdWxhdGUgdGhlIGZpZWxkcyBvZiB0aGUgbmV3c2sgZnJvbSB0aGUgb2xkc2sgYW5kIG1pZ3JhdGUgdGhlIGFzc29jCiAgKiBhbmQgaXRzIG1lc3NhZ2VzIHRvIHRoZSBuZXdzay4KICAqLwpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvdHJhbnNwb3J0LmMgYi9uZXQvc2N0cC90cmFuc3BvcnQuYwppbmRleCBlNzQ1YzExLi5lNWRkZTQ1IDEwMDY0NAotLS0gYS9uZXQvc2N0cC90cmFuc3BvcnQuYworKysgYi9uZXQvc2N0cC90cmFuc3BvcnQuYwpAQCAtNzksNiArNzksNyBAQAogCXBlZXItPnJ0dHZhciA9IDA7CiAJcGVlci0+c3J0dCA9IDA7CiAJcGVlci0+cnRvX3BlbmRpbmcgPSAwOworCXBlZXItPmhiX3NlbnQgPSAwOwogCXBlZXItPmZhc3RfcmVjb3ZlcnkgPSAwOwogCiAJcGVlci0+bGFzdF90aW1lX2hlYXJkID0gamlmZmllczsKQEAgLTU0Miw4ICs1NDMsOCBAQAogCQkgKiBjb25nZXN0aW9uIGluZGljYXRpb25zIG1vcmUgdGhhbiBvbmNlIGV2ZXJ5IHdpbmRvdyBvZgogCQkgKiBkYXRhIChvciBtb3JlIGxvb3NlbHkgbW9yZSB0aGFuIG9uY2UgZXZlcnkgcm91bmQtdHJpcCB0aW1lKS4KIAkJICovCi0JCWlmICgoamlmZmllcyAtIHRyYW5zcG9ydC0+bGFzdF90aW1lX2VjbmVfcmVkdWNlZCkgPgotCQkgICAgdHJhbnNwb3J0LT5ydHQpIHsKKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdHJhbnNwb3J0LT5sYXN0X3RpbWVfZWNuZV9yZWR1Y2VkICsKKwkJCQkJdHJhbnNwb3J0LT5ydHQpKSB7CiAJCQl0cmFuc3BvcnQtPnNzdGhyZXNoID0gbWF4KHRyYW5zcG9ydC0+Y3duZC8yLAogCQkJCQkJICA0KnRyYW5zcG9ydC0+YXNvYy0+cGF0aG10dSk7CiAJCQl0cmFuc3BvcnQtPmN3bmQgPSB0cmFuc3BvcnQtPnNzdGhyZXNoOwpAQCAtNTYwLDcgKzU2MSw4IEBACiAJCSAqIHRvIGJlIGRvbmUgZXZlcnkgUlRPIGludGVydmFsLCB3ZSBkbyBpdCBldmVyeSBoZWFyYmVhdAogCQkgKiBpbnRlcnZhbC4KIAkJICovCi0JCWlmICgoamlmZmllcyAtIHRyYW5zcG9ydC0+bGFzdF90aW1lX3VzZWQpID4gdHJhbnNwb3J0LT5ydG8pCisJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRyYW5zcG9ydC0+bGFzdF90aW1lX3VzZWQgKworCQkJCQl0cmFuc3BvcnQtPnJ0bykpCiAJCQl0cmFuc3BvcnQtPmN3bmQgPSBtYXgodHJhbnNwb3J0LT5jd25kLzIsCiAJCQkJCQkgNCp0cmFuc3BvcnQtPmFzb2MtPnBhdGhtdHUpOwogCQlicmVhazsKQEAgLTYwOCw2ICs2MTAsNyBAQAogCXQtPmZsaWdodF9zaXplID0gMDsKIAl0LT5lcnJvcl9jb3VudCA9IDA7CiAJdC0+cnRvX3BlbmRpbmcgPSAwOworCXQtPmhiX3NlbnQgPSAwOwogCXQtPmZhc3RfcmVjb3ZlcnkgPSAwOwogCiAJLyogSW5pdGlhbGl6ZSB0aGUgc3RhdGUgaW5mb3JtYXRpb24gZm9yIFNGUi1DQUNDICovCmRpZmYgLS1naXQgYS9uZXQvc29ja2V0LmMgYi9uZXQvc29ja2V0LmMKaW5kZXggMzVkZDczNy4uYWYwMjA1ZiAxMDA2NDQKLS0tIGEvbmV0L3NvY2tldC5jCisrKyBiL25ldC9zb2NrZXQuYwpAQCAtNTQ1LDYgKzU0NSwxOCBAQAogCXNvY2stPmZpbGUgPSBOVUxMOwogfQogCitpbnQgc29ja190eF90aW1lc3RhbXAoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc29jayAqc2ssCisJCSAgICAgIHVuaW9uIHNrYl9zaGFyZWRfdHggKnNodHgpCit7CisJc2h0eC0+ZmxhZ3MgPSAwOworCWlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfVElNRVNUQU1QSU5HX1RYX0hBUkRXQVJFKSkKKwkJc2h0eC0+aGFyZHdhcmUgPSAxOworCWlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfVElNRVNUQU1QSU5HX1RYX1NPRlRXQVJFKSkKKwkJc2h0eC0+c29mdHdhcmUgPSAxOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChzb2NrX3R4X3RpbWVzdGFtcCk7CisKIHN0YXRpYyBpbmxpbmUgaW50IF9fc29ja19zZW5kbXNnKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IHNvY2tldCAqc29jaywKIAkJCQkgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSkKIHsKQEAgLTU5NSwzMyArNjA3LDY1IEBACiAJcmV0dXJuIHJlc3VsdDsKIH0KIAorc3RhdGljIGludCBrdGltZTJ0cyhrdGltZV90IGt0LCBzdHJ1Y3QgdGltZXNwZWMgKnRzKQoreworCWlmIChrdC50djY0KSB7CisJCSp0cyA9IGt0aW1lX3RvX3RpbWVzcGVjKGt0KTsKKwkJcmV0dXJuIDE7CisJfSBlbHNlIHsKKwkJcmV0dXJuIDA7CisJfQorfQorCiAvKgogICogY2FsbGVkIGZyb20gc29ja19yZWN2X3RpbWVzdGFtcCgpIGlmIHNvY2tfZmxhZyhzaywgU09DS19SQ1ZUU1RBTVApCiAgKi8KIHZvaWQgX19zb2NrX3JlY3ZfdGltZXN0YW1wKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNvY2sgKnNrLAogCXN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Ja3RpbWVfdCBrdCA9IHNrYi0+dHN0YW1wOworCWludCBuZWVkX3NvZnR3YXJlX3RzdGFtcCA9IHNvY2tfZmxhZyhzaywgU09DS19SQ1ZUU1RBTVApOworCXN0cnVjdCB0aW1lc3BlYyB0c1szXTsKKwlpbnQgZW1wdHkgPSAxOworCXN0cnVjdCBza2Jfc2hhcmVkX2h3dHN0YW1wcyAqc2hod3RzdGFtcHMgPQorCQlza2JfaHd0c3RhbXBzKHNrYik7CiAKLQlpZiAoIXNvY2tfZmxhZyhzaywgU09DS19SQ1ZUU1RBTVBOUykpIHsKLQkJc3RydWN0IHRpbWV2YWwgdHY7Ci0JCS8qIFJhY2Ugb2NjdXJyZWQgYmV0d2VlbiB0aW1lc3RhbXAgZW5hYmxpbmcgYW5kIHBhY2tldAotCQkgICByZWNlaXZpbmcuICBGaWxsIGluIHRoZSBjdXJyZW50IHRpbWUgZm9yIG5vdy4gKi8KLQkJaWYgKGt0LnR2NjQgPT0gMCkKLQkJCWt0ID0ga3RpbWVfZ2V0X3JlYWwoKTsKLQkJc2tiLT50c3RhbXAgPSBrdDsKLQkJdHYgPSBrdGltZV90b190aW1ldmFsKGt0KTsKLQkJcHV0X2Ntc2cobXNnLCBTT0xfU09DS0VULCBTQ01fVElNRVNUQU1QLCBzaXplb2YodHYpLCAmdHYpOwotCX0gZWxzZSB7Ci0JCXN0cnVjdCB0aW1lc3BlYyB0czsKLQkJLyogUmFjZSBvY2N1cnJlZCBiZXR3ZWVuIHRpbWVzdGFtcCBlbmFibGluZyBhbmQgcGFja2V0Ci0JCSAgIHJlY2VpdmluZy4gIEZpbGwgaW4gdGhlIGN1cnJlbnQgdGltZSBmb3Igbm93LiAqLwotCQlpZiAoa3QudHY2NCA9PSAwKQotCQkJa3QgPSBrdGltZV9nZXRfcmVhbCgpOwotCQlza2ItPnRzdGFtcCA9IGt0OwotCQl0cyA9IGt0aW1lX3RvX3RpbWVzcGVjKGt0KTsKLQkJcHV0X2Ntc2cobXNnLCBTT0xfU09DS0VULCBTQ01fVElNRVNUQU1QTlMsIHNpemVvZih0cyksICZ0cyk7CisJLyogUmFjZSBvY2N1cnJlZCBiZXR3ZWVuIHRpbWVzdGFtcCBlbmFibGluZyBhbmQgcGFja2V0CisJICAgcmVjZWl2aW5nLiAgRmlsbCBpbiB0aGUgY3VycmVudCB0aW1lIGZvciBub3cuICovCisJaWYgKG5lZWRfc29mdHdhcmVfdHN0YW1wICYmIHNrYi0+dHN0YW1wLnR2NjQgPT0gMCkKKwkJX19uZXRfdGltZXN0YW1wKHNrYik7CisKKwlpZiAobmVlZF9zb2Z0d2FyZV90c3RhbXApIHsKKwkJaWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfUkNWVFNUQU1QTlMpKSB7CisJCQlzdHJ1Y3QgdGltZXZhbCB0djsKKwkJCXNrYl9nZXRfdGltZXN0YW1wKHNrYiwgJnR2KTsKKwkJCXB1dF9jbXNnKG1zZywgU09MX1NPQ0tFVCwgU0NNX1RJTUVTVEFNUCwKKwkJCQkgc2l6ZW9mKHR2KSwgJnR2KTsKKwkJfSBlbHNlIHsKKwkJCXN0cnVjdCB0aW1lc3BlYyB0czsKKwkJCXNrYl9nZXRfdGltZXN0YW1wbnMoc2tiLCAmdHMpOworCQkJcHV0X2Ntc2cobXNnLCBTT0xfU09DS0VULCBTQ01fVElNRVNUQU1QTlMsCisJCQkJIHNpemVvZih0cyksICZ0cyk7CisJCX0KIAl9CisKKworCW1lbXNldCh0cywgMCwgc2l6ZW9mKHRzKSk7CisJaWYgKHNrYi0+dHN0YW1wLnR2NjQgJiYKKwkgICAgc29ja19mbGFnKHNrLCBTT0NLX1RJTUVTVEFNUElOR19TT0ZUV0FSRSkpIHsKKwkJc2tiX2dldF90aW1lc3RhbXBucyhza2IsIHRzICsgMCk7CisJCWVtcHR5ID0gMDsKKwl9CisJaWYgKHNoaHd0c3RhbXBzKSB7CisJCWlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfVElNRVNUQU1QSU5HX1NZU19IQVJEV0FSRSkgJiYKKwkJICAgIGt0aW1lMnRzKHNoaHd0c3RhbXBzLT5zeXN0c3RhbXAsIHRzICsgMSkpCisJCQllbXB0eSA9IDA7CisJCWlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfVElNRVNUQU1QSU5HX1JBV19IQVJEV0FSRSkgJiYKKwkJICAgIGt0aW1lMnRzKHNoaHd0c3RhbXBzLT5od3RzdGFtcCwgdHMgKyAyKSkKKwkJCWVtcHR5ID0gMDsKKwl9CisJaWYgKCFlbXB0eSkKKwkJcHV0X2Ntc2cobXNnLCBTT0xfU09DS0VULAorCQkJIFNDTV9USU1FU1RBTVBJTkcsIHNpemVvZih0cyksICZ0cyk7CiB9CiAKIEVYUE9SVF9TWU1CT0xfR1BMKF9fc29ja19yZWN2X3RpbWVzdGFtcCk7CkBAIC0xMDMwLDYgKzEwNzQsMTMgQEAKIAogCWxvY2tfc29jayhzayk7CiAKKwlzcGluX2xvY2soJmZpbHAtPmZfbG9jayk7CisJaWYgKG9uKQorCQlmaWxwLT5mX2ZsYWdzIHw9IEZBU1lOQzsKKwllbHNlCisJCWZpbHAtPmZfZmxhZ3MgJj0gfkZBU1lOQzsKKwlzcGluX3VubG9jaygmZmlscC0+Zl9sb2NrKTsKKwogCXByZXYgPSAmKHNvY2stPmZhc3luY19saXN0KTsKIAogCWZvciAoZmEgPSAqcHJldjsgZmEgIT0gTlVMTDsgcHJldiA9ICZmYS0+ZmFfbmV4dCwgZmEgPSAqcHJldikKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMveHBydHNvY2suYyBiL25ldC9zdW5ycGMveHBydHNvY2suYwppbmRleCAyOWM3MWU2Li41NjgzMzBlIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3hwcnRzb2NrLmMKKysrIGIvbmV0L3N1bnJwYy94cHJ0c29jay5jCkBAIC0xMjI1LDYgKzEyMjUsMjMgQEAKIAlyZWFkX3VubG9jaygmc2stPnNrX2NhbGxiYWNrX2xvY2spOwogfQogCitzdGF0aWMgdm9pZCB4c193cml0ZV9zcGFjZShzdHJ1Y3Qgc29jayAqc2spCit7CisJc3RydWN0IHNvY2tldCAqc29jazsKKwlzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQ7CisKKwlpZiAodW5saWtlbHkoIShzb2NrID0gc2stPnNrX3NvY2tldCkpKQorCQlyZXR1cm47CisJY2xlYXJfYml0KFNPQ0tfTk9TUEFDRSwgJnNvY2stPmZsYWdzKTsKKworCWlmICh1bmxpa2VseSghKHhwcnQgPSB4cHJ0X2Zyb21fc29jayhzaykpKSkKKwkJcmV0dXJuOworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoU09DS19BU1lOQ19OT1NQQUNFLCAmc29jay0+ZmxhZ3MpID09IDApCisJCXJldHVybjsKKworCXhwcnRfd3JpdGVfc3BhY2UoeHBydCk7Cit9CisKIC8qKgogICogeHNfdWRwX3dyaXRlX3NwYWNlIC0gY2FsbGJhY2sgaW52b2tlZCB3aGVuIHNvY2tldCBidWZmZXIgc3BhY2UKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWNvbWVzIGF2YWlsYWJsZQpAQCAtMTI0MCwyMyArMTI1Nyw5IEBACiAJcmVhZF9sb2NrKCZzay0+c2tfY2FsbGJhY2tfbG9jayk7CiAKIAkvKiBmcm9tIG5ldC9jb3JlL3NvY2suYzpzb2NrX2RlZl93cml0ZV9zcGFjZSAqLwotCWlmIChzb2NrX3dyaXRlYWJsZShzaykpIHsKLQkJc3RydWN0IHNvY2tldCAqc29jazsKLQkJc3RydWN0IHJwY194cHJ0ICp4cHJ0OworCWlmIChzb2NrX3dyaXRlYWJsZShzaykpCisJCXhzX3dyaXRlX3NwYWNlKHNrKTsKIAotCQlpZiAodW5saWtlbHkoIShzb2NrID0gc2stPnNrX3NvY2tldCkpKQotCQkJZ290byBvdXQ7Ci0JCWNsZWFyX2JpdChTT0NLX05PU1BBQ0UsICZzb2NrLT5mbGFncyk7Ci0KLQkJaWYgKHVubGlrZWx5KCEoeHBydCA9IHhwcnRfZnJvbV9zb2NrKHNrKSkpKQotCQkJZ290byBvdXQ7Ci0JCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoU09DS19BU1lOQ19OT1NQQUNFLCAmc29jay0+ZmxhZ3MpID09IDApCi0JCQlnb3RvIG91dDsKLQotCQl4cHJ0X3dyaXRlX3NwYWNlKHhwcnQpOwotCX0KLQotIG91dDoKIAlyZWFkX3VubG9jaygmc2stPnNrX2NhbGxiYWNrX2xvY2spOwogfQogCkBAIC0xMjc1LDIzICsxMjc4LDkgQEAKIAlyZWFkX2xvY2soJnNrLT5za19jYWxsYmFja19sb2NrKTsKIAogCS8qIGZyb20gbmV0L2NvcmUvc3RyZWFtLmM6c2tfc3RyZWFtX3dyaXRlX3NwYWNlICovCi0JaWYgKHNrX3N0cmVhbV93c3BhY2Uoc2spID49IHNrX3N0cmVhbV9taW5fd3NwYWNlKHNrKSkgewotCQlzdHJ1Y3Qgc29ja2V0ICpzb2NrOwotCQlzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQ7CisJaWYgKHNrX3N0cmVhbV93c3BhY2Uoc2spID49IHNrX3N0cmVhbV9taW5fd3NwYWNlKHNrKSkKKwkJeHNfd3JpdGVfc3BhY2Uoc2spOwogCi0JCWlmICh1bmxpa2VseSghKHNvY2sgPSBzay0+c2tfc29ja2V0KSkpCi0JCQlnb3RvIG91dDsKLQkJY2xlYXJfYml0KFNPQ0tfTk9TUEFDRSwgJnNvY2stPmZsYWdzKTsKLQotCQlpZiAodW5saWtlbHkoISh4cHJ0ID0geHBydF9mcm9tX3NvY2soc2spKSkpCi0JCQlnb3RvIG91dDsKLQkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChTT0NLX0FTWU5DX05PU1BBQ0UsICZzb2NrLT5mbGFncykgPT0gMCkKLQkJCWdvdG8gb3V0OwotCi0JCXhwcnRfd3JpdGVfc3BhY2UoeHBydCk7Ci0JfQotCi0gb3V0OgogCXJlYWRfdW5sb2NrKCZzay0+c2tfY2FsbGJhY2tfbG9jayk7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9zeXNjdGxfbmV0LmMgYi9uZXQvc3lzY3RsX25ldC5jCmluZGV4IDk3MjIwMWMuLjBiMTVkNzIgMTAwNjQ0Ci0tLSBhL25ldC9zeXNjdGxfbmV0LmMKKysrIGIvbmV0L3N5c2N0bF9uZXQuYwpAQCAtNjEsNyArNjEsNyBAQAogc3RhdGljIGludCBuZXRfY3RsX3JvX2hlYWRlcl9wZXJtcyhzdHJ1Y3QgY3RsX3RhYmxlX3Jvb3QgKnJvb3QsCiAJCXN0cnVjdCBuc3Byb3h5ICpuYW1lc3BhY2VzLCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSkKIHsKLQlpZiAobmFtZXNwYWNlcy0+bmV0X25zID09ICZpbml0X25ldCkKKwlpZiAobmV0X2VxKG5hbWVzcGFjZXMtPm5ldF9ucywgJmluaXRfbmV0KSkKIAkJcmV0dXJuIHRhYmxlLT5tb2RlOwogCWVsc2UKIAkJcmV0dXJuIHRhYmxlLT5tb2RlICYgfjAyMjI7CmRpZmYgLS1naXQgYS9uZXQvdGlwYy9iY2FzdC5jIGIvbmV0L3RpcGMvYmNhc3QuYwppbmRleCAzZGRhZmY0Li5hM2JmZDQwIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9iY2FzdC5jCisrKyBiL25ldC90aXBjL2JjYXN0LmMKQEAgLTExOSw3ICsxMTksNyBAQAogc3RhdGljIHN0cnVjdCBsaW5rICpiY2wgPSBOVUxMOwogc3RhdGljIERFRklORV9TUElOTE9DSyhiY19sb2NrKTsKIAotY2hhciB0aXBjX2JjbGlua19uYW1lW10gPSAibXVsdGljYXN0LWxpbmsiOworY29uc3QgY2hhciB0aXBjX2JjbGlua19uYW1lW10gPSAibXVsdGljYXN0LWxpbmsiOwogCiAKIHN0YXRpYyB1MzIgYnVmX3NlcW5vKHN0cnVjdCBza19idWZmICpidWYpCkBAIC04MDAsNyArODAwLDcgQEAKIAl0aXBjX2xpbmtfc2V0X3F1ZXVlX2xpbWl0cyhiY2wsIEJDTElOS19XSU5fREVGQVVMVCk7CiAJYmNsLT5iX3B0ciA9ICZiY2JlYXJlci0+YmVhcmVyOwogCWJjbC0+c3RhdGUgPSBXT1JLSU5HX1dPUktJTkc7Ci0Jc3ByaW50ZihiY2wtPm5hbWUsIHRpcGNfYmNsaW5rX25hbWUpOworCXN0cmxjcHkoYmNsLT5uYW1lLCB0aXBjX2JjbGlua19uYW1lLCBUSVBDX01BWF9MSU5LX05BTUUpOwogCiAJaWYgKEJDTElOS19MT0dfQlVGX1NJWkUpIHsKIAkJY2hhciAqcGIgPSBrbWFsbG9jKEJDTElOS19MT0dfQlVGX1NJWkUsIEdGUF9BVE9NSUMpOwpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvYmNhc3QuaCBiL25ldC90aXBjL2JjYXN0LmgKaW5kZXggMmYyZDczMS4uNGMxNzcxZSAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvYmNhc3QuaAorKysgYi9uZXQvdGlwYy9iY2FzdC5oCkBAIC03MCw3ICs3MCw3IEBACiAKIHN0cnVjdCB0aXBjX25vZGU7CiAKLWV4dGVybiBjaGFyIHRpcGNfYmNsaW5rX25hbWVbXTsKK2V4dGVybiBjb25zdCBjaGFyIHRpcGNfYmNsaW5rX25hbWVbXTsKIAogCiAvKioKZGlmZiAtLWdpdCBhL25ldC90aXBjL2RiZy5jIGIvbmV0L3RpcGMvZGJnLmMKaW5kZXggMjllY2FlOC4uMTg4NWE3ZSAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvZGJnLmMKKysrIGIvbmV0L3RpcGMvZGJnLmMKQEAgLTI1OCw3ICsyNTgsNyBAQAogCX0KIAogCWlmIChwYi0+ZWNobykKLQkJcHJpbnRrKHByaW50X3N0cmluZyk7CisJCXByaW50aygiJXMiLCBwcmludF9zdHJpbmcpOwogCiAJc3Bpbl91bmxvY2tfYmgoJnByaW50X2xvY2spOwogfQpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbm9kZS5jIGIvbmV0L3RpcGMvbm9kZS5jCmluZGV4IDIwZDk4YzUuLjJjMjRlN2QgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL25vZGUuYworKysgYi9uZXQvdGlwYy9ub2RlLmMKQEAgLTcwMyw3ICs3MDMsNyBAQAogCiAJbGlua19pbmZvLmRlc3QgPSBodG9ubCh0aXBjX293bl9hZGRyICYgMHhmZmZmZjAwKTsKIAlsaW5rX2luZm8udXAgPSBodG9ubCgxKTsKLQlzcHJpbnRmKGxpbmtfaW5mby5zdHIsIHRpcGNfYmNsaW5rX25hbWUpOworCXN0cmxjcHkobGlua19pbmZvLnN0ciwgdGlwY19iY2xpbmtfbmFtZSwgVElQQ19NQVhfTElOS19OQU1FKTsKIAl0aXBjX2NmZ19hcHBlbmRfdGx2KGJ1ZiwgVElQQ19UTFZfTElOS19JTkZPLCAmbGlua19pbmZvLCBzaXplb2YobGlua19pbmZvKSk7CiAKIAkvKiBBZGQgVExWcyBmb3IgYW55IG90aGVyIGxpbmtzIGluIHNjb3BlICovCmRpZmYgLS1naXQgYS9uZXQvdW5peC9hZl91bml4LmMgYi9uZXQvdW5peC9hZl91bml4LmMKaW5kZXggZDFiODk4Mi4uYmFhYzkxMCAxMDA2NDQKLS0tIGEvbmV0L3VuaXgvYWZfdW5peC5jCisrKyBiL25ldC91bml4L2FmX3VuaXguYwpAQCAtMTE3OCw4ICsxMTc4LDcgQEAKIAkJdW5peF9zdGF0ZV91bmxvY2sob3RoZXIpOwogCiBvdXQ6Ci0JaWYgKHNrYikKLQkJa2ZyZWVfc2tiKHNrYik7CisJa2ZyZWVfc2tiKHNrYik7CiAJaWYgKG5ld3NrKQogCQl1bml4X3JlbGVhc2Vfc29jayhuZXdzaywgMCk7CiAJaWYgKG90aGVyKQpkaWZmIC0tZ2l0IGEvbmV0L3dhbnJvdXRlci93YW5tYWluLmMgYi9uZXQvd2Fucm91dGVyL3dhbm1haW4uYwppbmRleCAzOTcwMWRlLi40NjZlMmQyIDEwMDY0NAotLS0gYS9uZXQvd2Fucm91dGVyL3dhbm1haW4uYworKysgYi9uZXQvd2Fucm91dGVyL3dhbm1haW4uYwpAQCAtODYsOCArODYsMTAgQEAKIAogc3RhdGljIHN0cnVjdCB3YW5fZGV2aWNlICp3YW5yb3V0ZXJfZmluZF9kZXZpY2UoY2hhciAqbmFtZSk7CiBzdGF0aWMgaW50IHdhbnJvdXRlcl9kZWxldGVfaW50ZXJmYWNlKHN0cnVjdCB3YW5fZGV2aWNlICp3YW5kZXYsIGNoYXIgKm5hbWUpOwotc3RhdGljIHZvaWQgbG9ja19hZGFwdGVyX2lycShzcGlubG9ja190ICpsb2NrLCB1bnNpZ25lZCBsb25nICpzbXBfZmxhZ3MpOwotc3RhdGljIHZvaWQgdW5sb2NrX2FkYXB0ZXJfaXJxKHNwaW5sb2NrX3QgKmxvY2ssIHVuc2lnbmVkIGxvbmcgKnNtcF9mbGFncyk7CitzdGF0aWMgdm9pZCBsb2NrX2FkYXB0ZXJfaXJxKHNwaW5sb2NrX3QgKmxvY2ssIHVuc2lnbmVkIGxvbmcgKnNtcF9mbGFncykKKwlfX2FjcXVpcmVzKGxvY2spOworc3RhdGljIHZvaWQgdW5sb2NrX2FkYXB0ZXJfaXJxKHNwaW5sb2NrX3QgKmxvY2ssIHVuc2lnbmVkIGxvbmcgKnNtcF9mbGFncykKKwlfX3JlbGVhc2VzKGxvY2spOwogCiAKIApAQCAtNzYzLDEyICs3NjUsMTQgQEAKIH0KIAogc3RhdGljIHZvaWQgbG9ja19hZGFwdGVyX2lycShzcGlubG9ja190ICpsb2NrLCB1bnNpZ25lZCBsb25nICpzbXBfZmxhZ3MpCisJX19hY3F1aXJlcyhsb2NrKQogewogCXNwaW5fbG9ja19pcnFzYXZlKGxvY2ssICpzbXBfZmxhZ3MpOwogfQogCiAKIHN0YXRpYyB2b2lkIHVubG9ja19hZGFwdGVyX2lycShzcGlubG9ja190ICpsb2NrLCB1bnNpZ25lZCBsb25nICpzbXBfZmxhZ3MpCisJX19yZWxlYXNlcyhsb2NrKQogewogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUobG9jaywgKnNtcF9mbGFncyk7CiB9CmRpZmYgLS1naXQgYS9uZXQvd2Fucm91dGVyL3dhbnByb2MuYyBiL25ldC93YW5yb3V0ZXIvd2FucHJvYy5jCmluZGV4IDI2N2Y3ZmYuLmM0NGQ5NmIgMTAwNjQ0Ci0tLSBhL25ldC93YW5yb3V0ZXIvd2FucHJvYy5jCisrKyBiL25ldC93YW5yb3V0ZXIvd2FucHJvYy5jCkBAIC04MCw2ICs4MCw3IEBACiAgKglJdGVyYXRvcgogICovCiBzdGF0aWMgdm9pZCAqcl9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqcG9zKQorCV9fYWNxdWlyZXMoa2VybmVsX2xvY2spCiB7CiAJc3RydWN0IHdhbl9kZXZpY2UgKndhbmRldjsKIAlsb2ZmX3QgbCA9ICpwb3M7CkBAIC0xMDEsNiArMTAyLDcgQEAKIH0KIAogc3RhdGljIHZvaWQgcl9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKKwlfX3JlbGVhc2VzKGtlcm5lbF9sb2NrKQogewogCXVubG9ja19rZXJuZWwoKTsKIH0KZGlmZiAtLWdpdCBhL25ldC93aW1heC9vcC1tc2cuYyBiL25ldC93aW1heC9vcC1tc2cuYwppbmRleCBjYjNiNGFkLi41ZDE0OWMxIDEwMDY0NAotLS0gYS9uZXQvd2ltYXgvb3AtbXNnLmMKKysrIGIvbmV0L3dpbWF4L29wLW1zZy5jCkBAIC0yNTgsNyArMjU4LDYgQEAKICAqLwogaW50IHdpbWF4X21zZ19zZW5kKHN0cnVjdCB3aW1heF9kZXYgKndpbWF4X2Rldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlpbnQgcmVzdWx0OwogCXN0cnVjdCBkZXZpY2UgKmRldiA9IHdpbWF4X2Rldi0+bmV0X2Rldi0+ZGV2LnBhcmVudDsKIAl2b2lkICptc2cgPSBza2ItPmRhdGE7CiAJc2l6ZV90IHNpemUgPSBza2ItPmxlbjsKQEAgLTI2NiwxMSArMjY1LDkgQEAKIAogCWRfcHJpbnRmKDEsIGRldiwgIkNUWDogd2ltYXggbXNnLCAlenUgYnl0ZXNcbiIsIHNpemUpOwogCWRfZHVtcCgyLCBkZXYsIG1zZywgc2l6ZSk7Ci0JcmVzdWx0ID0gZ2VubG1zZ19tdWx0aWNhc3Qoc2tiLCAwLCB3aW1heF9nbmxfbWNnLmlkLCBHRlBfS0VSTkVMKTsKLQlkX3ByaW50ZigxLCBkZXYsICJDVFg6IGdlbmwgbXVsdGljYXN0IHJlc3VsdCAlZFxuIiwgcmVzdWx0KTsKLQlpZiAocmVzdWx0ID09IC1FU1JDSCkJLyogTm9ib2R5IGNvbm5lY3RlZCwgaWdub3JlIGl0ICovCi0JCXJlc3VsdCA9IDA7CS8qIGJ0dywgdGhlIHNrYiBpcyBmcmVlZCBhbHJlYWR5ICovCi0JcmV0dXJuIHJlc3VsdDsKKwlnZW5sbXNnX211bHRpY2FzdChza2IsIDAsIHdpbWF4X2dubF9tY2cuaWQsIEdGUF9LRVJORUwpOworCWRfcHJpbnRmKDEsIGRldiwgIkNUWDogZ2VubCBtdWx0aWNhc3QgZG9uZVxuIik7CisJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh3aW1heF9tc2dfc2VuZCk7CiAKZGlmZiAtLWdpdCBhL25ldC93aW1heC9zdGFjay5jIGIvbmV0L3dpbWF4L3N0YWNrLmMKaW5kZXggMzg2OWMwMy4uYTBlZTc2YiAxMDA2NDQKLS0tIGEvbmV0L3dpbWF4L3N0YWNrLmMKKysrIGIvbmV0L3dpbWF4L3N0YWNrLmMKQEAgLTE2MywxNiArMTYzLDEyIEBACiAJc3RydWN0IGRldmljZSAqZGV2ID0gd2ltYXhfZGV2X3RvX2Rldih3aW1heF9kZXYpOwogCWRfZm5zdGFydCgzLCBkZXYsICIod2ltYXhfZGV2ICVwIHJlcG9ydF9za2IgJXApXG4iLAogCQkgIHdpbWF4X2RldiwgcmVwb3J0X3NrYik7Ci0JaWYgKHJlcG9ydF9za2IgPT0gTlVMTCkKKwlpZiAocmVwb3J0X3NrYiA9PSBOVUxMKSB7CisJCXJlc3VsdCA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwotCWdlbmxtc2dfZW5kKHJlcG9ydF9za2IsIGhlYWRlcik7Ci0JcmVzdWx0ID0gZ2VubG1zZ19tdWx0aWNhc3QocmVwb3J0X3NrYiwgMCwgd2ltYXhfZ25sX21jZy5pZCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHJlc3VsdCA9PSAtRVNSQ0gpCS8qIE5vYm9keSBjb25uZWN0ZWQsIGlnbm9yZSBpdCAqLwotCQlyZXN1bHQgPSAwOwkvKiBidHcsIHRoZSBza2IgaXMgZnJlZWQgYWxyZWFkeSAqLwotCWlmIChyZXN1bHQgPCAwKSB7Ci0JCWRldl9lcnIoZGV2LCAiUkVfU1RDSDogRXJyb3Igc2VuZGluZzogJWRcbiIsIHJlc3VsdCk7Ci0JCW5sbXNnX2ZyZWUocmVwb3J0X3NrYik7CiAJfQorCWdlbmxtc2dfZW5kKHJlcG9ydF9za2IsIGhlYWRlcik7CisJZ2VubG1zZ19tdWx0aWNhc3QocmVwb3J0X3NrYiwgMCwgd2ltYXhfZ25sX21jZy5pZCwgR0ZQX0tFUk5FTCk7CiBvdXQ6CiAJZF9mbmVuZCgzLCBkZXYsICIod2ltYXhfZGV2ICVwIHJlcG9ydF9za2IgJXApID0gJWRcbiIsCiAJCXdpbWF4X2RldiwgcmVwb3J0X3NrYiwgcmVzdWx0KTsKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9NYWtlZmlsZSBiL25ldC93aXJlbGVzcy9NYWtlZmlsZQppbmRleCA5MzhhMzM0Li5kYWQ0M2MyIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvTWFrZWZpbGUKKysrIGIvbmV0L3dpcmVsZXNzL01ha2VmaWxlCkBAIC01LDcgKzUsNyBAQAogb2JqLSQoQ09ORklHX0xJQjgwMjExX0NSWVBUX0NDTVApICs9IGxpYjgwMjExX2NyeXB0X2NjbXAubwogb2JqLSQoQ09ORklHX0xJQjgwMjExX0NSWVBUX1RLSVApICs9IGxpYjgwMjExX2NyeXB0X3RraXAubwogCi1jZmc4MDIxMS15ICs9IGNvcmUubyBzeXNmcy5vIHJhZGlvdGFwLm8gdXRpbC5vIHJlZy5vCitjZmc4MDIxMS15ICs9IGNvcmUubyBzeXNmcy5vIHJhZGlvdGFwLm8gdXRpbC5vIHJlZy5vIHNjYW4ubwogY2ZnODAyMTEtJChDT05GSUdfV0lSRUxFU1NfRVhUKSArPSB3ZXh0LWNvbXBhdC5vCiBjZmc4MDIxMS0kKENPTkZJR19OTDgwMjExKSArPSBubDgwMjExLm8KIApkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL2NvcmUuYyBiL25ldC93aXJlbGVzcy9jb3JlLmMKaW5kZXggYjk2ZmMwYy4uMTdmZTM5MCAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL2NvcmUuYworKysgYi9uZXQvd2lyZWxlc3MvY29yZS5jCkBAIC03LDcgKzcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2lmLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+Ci0jaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvbmw4MDIxMS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KQEAgLTMxLDE4ICszMCwyOSBAQAogICogb25seSByZWFkIHRoZSBsaXN0LCBhbmQgdGhhdCBjYW4gaGFwcGVuIHF1aXRlCiAgKiBvZnRlbiBiZWNhdXNlIHdlIG5lZWQgdG8gZG8gaXQgZm9yIGVhY2ggY29tbWFuZCAqLwogTElTVF9IRUFEKGNmZzgwMjExX2Rydl9saXN0KTsKLURFRklORV9NVVRFWChjZmc4MDIxMV9kcnZfbXV0ZXgpOworCisvKgorICogVGhpcyBpcyB1c2VkIHRvIHByb3RlY3QgdGhlIGNmZzgwMjExX2Rydl9saXN0LCBjZmc4MDIxMV9yZWdkb21haW4sCisgKiBjb3VudHJ5X2llX3JlZ2RvbWFpbiwgdGhlIHJlZ19iZWFjb25fbGlzdCBhbmQgdGhlIHRoZSBsYXN0IHJlZ3VsYXRvcnkKKyAqIHJlcXVlc3QgcmVjZWlwdCAobGFzdF9yZXF1ZXN0KS4KKyAqLworREVGSU5FX01VVEVYKGNmZzgwMjExX211dGV4KTsKIAogLyogZm9yIGRlYnVnZnMgKi8KIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICppZWVlODAyMTFfZGVidWdmc19kaXI7CiAKLS8qIHJlcXVpcmVzIGNmZzgwMjExX2Rydl9tdXRleCB0byBiZSBoZWxkISAqLwotc3RhdGljIHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqY2ZnODAyMTFfZHJ2X2J5X3dpcGh5KGludCB3aXBoeSkKKy8qIHJlcXVpcmVzIGNmZzgwMjExX211dGV4IHRvIGJlIGhlbGQhICovCitzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmNmZzgwMjExX2Rydl9ieV93aXBoeV9pZHgoaW50IHdpcGh5X2lkeCkKIHsKIAlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJlc3VsdCA9IE5VTEwsICpkcnY7CiAKKwlpZiAoIXdpcGh5X2lkeF92YWxpZCh3aXBoeV9pZHgpKQorCQlyZXR1cm4gTlVMTDsKKworCWFzc2VydF9jZmc4MDIxMV9sb2NrKCk7CisKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRydiwgJmNmZzgwMjExX2Rydl9saXN0LCBsaXN0KSB7Ci0JCWlmIChkcnYtPmlkeCA9PSB3aXBoeSkgeworCQlpZiAoZHJ2LT53aXBoeV9pZHggPT0gd2lwaHlfaWR4KSB7CiAJCQlyZXN1bHQgPSBkcnY7CiAJCQlicmVhazsKIAkJfQpAQCAtNTEsMTcgKzYxLDQ0IEBACiAJcmV0dXJuIHJlc3VsdDsKIH0KIAoraW50IGdldF93aXBoeV9pZHgoc3RydWN0IHdpcGh5ICp3aXBoeSkKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRydjsKKwlpZiAoIXdpcGh5KQorCQlyZXR1cm4gV0lQSFlfSURYX1NUQUxFOworCWRydiA9IHdpcGh5X3RvX2Rldih3aXBoeSk7CisJcmV0dXJuIGRydi0+d2lwaHlfaWR4OworfQorCiAvKiByZXF1aXJlcyBjZmc4MDIxMV9kcnZfbXV0ZXggdG8gYmUgaGVsZCEgKi8KK3N0cnVjdCB3aXBoeSAqd2lwaHlfaWR4X3RvX3dpcGh5KGludCB3aXBoeV9pZHgpCit7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnY7CisKKwlpZiAoIXdpcGh5X2lkeF92YWxpZCh3aXBoeV9pZHgpKQorCQlyZXR1cm4gTlVMTDsKKworCWFzc2VydF9jZmc4MDIxMV9sb2NrKCk7CisKKwlkcnYgPSBjZmc4MDIxMV9kcnZfYnlfd2lwaHlfaWR4KHdpcGh5X2lkeCk7CisJaWYgKCFkcnYpCisJCXJldHVybiBOVUxMOworCXJldHVybiAmZHJ2LT53aXBoeTsKK30KKworLyogcmVxdWlyZXMgY2ZnODAyMTFfbXV0ZXggdG8gYmUgaGVsZCEgKi8KIHN0YXRpYyBzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKgogX19jZmc4MDIxMV9kcnZfZnJvbV9pbmZvKHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiB7CiAJaW50IGlmaW5kZXg7Ci0Jc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpieXdpcGh5ID0gTlVMTCwgKmJ5aWZpZHggPSBOVUxMOworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqYnl3aXBoeWlkeCA9IE5VTEwsICpieWlmaWR4ID0gTlVMTDsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCWludCBlcnIgPSAtRUlOVkFMOwogCisJYXNzZXJ0X2NmZzgwMjExX2xvY2soKTsKKwogCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfV0lQSFldKSB7Ci0JCWJ5d2lwaHkgPSBjZmc4MDIxMV9kcnZfYnlfd2lwaHkoCisJCWJ5d2lwaHlpZHggPSBjZmc4MDIxMV9kcnZfYnlfd2lwaHlfaWR4KAogCQkJCW5sYV9nZXRfdTMyKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9XSVBIWV0pKTsKIAkJZXJyID0gLUVOT0RFVjsKIAl9CkBAIC03OCwxNCArMTE1LDE0IEBACiAJCWVyciA9IC1FTk9ERVY7CiAJfQogCi0JaWYgKGJ5d2lwaHkgJiYgYnlpZmlkeCkgewotCQlpZiAoYnl3aXBoeSAhPSBieWlmaWR4KQorCWlmIChieXdpcGh5aWR4ICYmIGJ5aWZpZHgpIHsKKwkJaWYgKGJ5d2lwaHlpZHggIT0gYnlpZmlkeCkKIAkJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCQllbHNlCi0JCQlyZXR1cm4gYnl3aXBoeTsgLyogPT0gYnlpZmlkeCAqLworCQkJcmV0dXJuIGJ5d2lwaHlpZHg7IC8qID09IGJ5aWZpZHggKi8KIAl9Ci0JaWYgKGJ5d2lwaHkpCi0JCXJldHVybiBieXdpcGh5OworCWlmIChieXdpcGh5aWR4KQorCQlyZXR1cm4gYnl3aXBoeWlkeDsKIAogCWlmIChieWlmaWR4KQogCQlyZXR1cm4gYnlpZmlkeDsKQEAgLTk4LDcgKzEzNSw3IEBACiB7CiAJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnY7CiAKLQltdXRleF9sb2NrKCZjZmc4MDIxMV9kcnZfbXV0ZXgpOworCW11dGV4X2xvY2soJmNmZzgwMjExX211dGV4KTsKIAlkcnYgPSBfX2NmZzgwMjExX2Rydl9mcm9tX2luZm8oaW5mbyk7CiAKIAkvKiBpZiBpdCBpcyBub3QgYW4gZXJyb3Igd2UgZ3JhYiB0aGUgbG9jayBvbgpAQCAtMTA3LDcgKzE0NCw3IEBACiAJaWYgKCFJU19FUlIoZHJ2KSkKIAkJbXV0ZXhfbG9jaygmZHJ2LT5tdHgpOwogCi0JbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9kcnZfbXV0ZXgpOworCW11dGV4X3VubG9jaygmY2ZnODAyMTFfbXV0ZXgpOwogCiAJcmV0dXJuIGRydjsKIH0KQEAgLTExOCw3ICsxNTUsNyBAQAogCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZHJ2ID0gRVJSX1BUUigtRU5PREVWKTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCi0JbXV0ZXhfbG9jaygmY2ZnODAyMTFfZHJ2X211dGV4KTsKKwltdXRleF9sb2NrKCZjZmc4MDIxMV9tdXRleCk7CiAJZGV2ID0gZGV2X2dldF9ieV9pbmRleCgmaW5pdF9uZXQsIGlmaW5kZXgpOwogCWlmICghZGV2KQogCQlnb3RvIG91dDsKQEAgLTEyOSw3ICsxNjYsNyBAQAogCQlkcnYgPSBFUlJfUFRSKC1FTk9ERVYpOwogCWRldl9wdXQoZGV2KTsKICBvdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9kcnZfbXV0ZXgpOworCW11dGV4X3VubG9jaygmY2ZnODAyMTFfbXV0ZXgpOwogCXJldHVybiBkcnY7CiB9CiAKQEAgLTE0MywxNiArMTgwLDE2IEBACiAJCQljaGFyICpuZXduYW1lKQogewogCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZHJ2OwotCWludCBpZHgsIHRha2VuID0gLTEsIHJlc3VsdCwgZGlnaXRzOworCWludCB3aXBoeV9pZHgsIHRha2VuID0gLTEsIHJlc3VsdCwgZGlnaXRzOwogCi0JbXV0ZXhfbG9jaygmY2ZnODAyMTFfZHJ2X211dGV4KTsKKwltdXRleF9sb2NrKCZjZmc4MDIxMV9tdXRleCk7CiAKIAkvKiBwcm9oaWJpdCBjYWxsaW5nIHRoZSB0aGluZyBwaHklZCB3aGVuICVkIGlzIG5vdCBpdHMgbnVtYmVyICovCi0Jc3NjYW5mKG5ld25hbWUsIFBIWV9OQU1FICIlZCVuIiwgJmlkeCwgJnRha2VuKTsKLQlpZiAodGFrZW4gPT0gc3RybGVuKG5ld25hbWUpICYmIGlkeCAhPSByZGV2LT5pZHgpIHsKLQkJLyogY291bnQgbnVtYmVyIG9mIHBsYWNlcyBuZWVkZWQgdG8gcHJpbnQgaWR4ICovCisJc3NjYW5mKG5ld25hbWUsIFBIWV9OQU1FICIlZCVuIiwgJndpcGh5X2lkeCwgJnRha2VuKTsKKwlpZiAodGFrZW4gPT0gc3RybGVuKG5ld25hbWUpICYmIHdpcGh5X2lkeCAhPSByZGV2LT53aXBoeV9pZHgpIHsKKwkJLyogY291bnQgbnVtYmVyIG9mIHBsYWNlcyBuZWVkZWQgdG8gcHJpbnQgd2lwaHlfaWR4ICovCiAJCWRpZ2l0cyA9IDE7Ci0JCXdoaWxlIChpZHggLz0gMTApCisJCXdoaWxlICh3aXBoeV9pZHggLz0gMTApCiAJCQlkaWdpdHMrKzsKIAkJLyoKIAkJICogZGVueSB0aGUgbmFtZSBpZiBpdCBpcyBwaHk8aWR4PiB3aGVyZSA8aWR4PiBpcyBwcmludGVkCkBAIC0xOTMsNyArMjMwLDcgQEAKIAogCXJlc3VsdCA9IDA7CiBvdXRfdW5sb2NrOgotCW11dGV4X3VubG9jaygmY2ZnODAyMTFfZHJ2X211dGV4KTsKKwltdXRleF91bmxvY2soJmNmZzgwMjExX211dGV4KTsKIAlpZiAocmVzdWx0ID09IDApCiAJCW5sODAyMTFfbm90aWZ5X2Rldl9yZW5hbWUocmRldik7CiAKQEAgLTIyMCwyNiArMjU3LDI4IEBACiAKIAlkcnYtPm9wcyA9IG9wczsKIAotCW11dGV4X2xvY2soJmNmZzgwMjExX2Rydl9tdXRleCk7CisJbXV0ZXhfbG9jaygmY2ZnODAyMTFfbXV0ZXgpOwogCi0JZHJ2LT5pZHggPSB3aXBoeV9jb3VudGVyKys7CisJZHJ2LT53aXBoeV9pZHggPSB3aXBoeV9jb3VudGVyKys7CiAKLQlpZiAodW5saWtlbHkoZHJ2LT5pZHggPCAwKSkgeworCWlmICh1bmxpa2VseSghd2lwaHlfaWR4X3ZhbGlkKGRydi0+d2lwaHlfaWR4KSkpIHsKIAkJd2lwaHlfY291bnRlci0tOwotCQltdXRleF91bmxvY2soJmNmZzgwMjExX2Rydl9tdXRleCk7CisJCW11dGV4X3VubG9jaygmY2ZnODAyMTFfbXV0ZXgpOwogCQkvKiB1Z2gsIHdyYXBwZWQhICovCiAJCWtmcmVlKGRydik7CiAJCXJldHVybiBOVUxMOwogCX0KIAotCW11dGV4X3VubG9jaygmY2ZnODAyMTFfZHJ2X211dGV4KTsKKwltdXRleF91bmxvY2soJmNmZzgwMjExX211dGV4KTsKIAogCS8qIGdpdmUgaXQgYSBwcm9wZXIgbmFtZSAqLwotCWRldl9zZXRfbmFtZSgmZHJ2LT53aXBoeS5kZXYsIFBIWV9OQU1FICIlZCIsIGRydi0+aWR4KTsKKwlkZXZfc2V0X25hbWUoJmRydi0+d2lwaHkuZGV2LCBQSFlfTkFNRSAiJWQiLCBkcnYtPndpcGh5X2lkeCk7CiAKIAltdXRleF9pbml0KCZkcnYtPm10eCk7CiAJbXV0ZXhfaW5pdCgmZHJ2LT5kZXZsaXN0X210eCk7CiAJSU5JVF9MSVNUX0hFQUQoJmRydi0+bmV0ZGV2X2xpc3QpOworCXNwaW5fbG9ja19pbml0KCZkcnYtPmJzc19sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmZHJ2LT5ic3NfbGlzdCk7CiAKIAlkZXZpY2VfaW5pdGlhbGl6ZSgmZHJ2LT53aXBoeS5kZXYpOwogCWRydi0+d2lwaHkuZGV2LmNsYXNzID0gJmllZWU4MDIxMV9jbGFzczsKQEAgLTI1OSw2ICsyOTgsOSBAQAogCWludCBpOwogCXUxNiBpZm1vZGVzID0gd2lwaHktPmludGVyZmFjZV9tb2RlczsKIAorCWlmIChXQVJOX09OKHdpcGh5LT5tYXhfc2Nhbl9zc2lkcyA8IDEpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCS8qIHNhbml0eSBjaGVjayBpZm1vZGVzICovCiAJV0FSTl9PTighaWZtb2Rlcyk7CiAJaWZtb2RlcyAmPSAoKDEgPDwgX19OTDgwMjExX0lGVFlQRV9BRlRFUl9MQVNUKSAtIDEpICYgfjE7CkBAIC0yNzMsMTAgKzMxNSwxNiBAQAogCiAJCXNiYW5kLT5iYW5kID0gYmFuZDsKIAotCQlpZiAoIXNiYW5kLT5uX2NoYW5uZWxzIHx8ICFzYmFuZC0+bl9iaXRyYXRlcykgewotCQkJV0FSTl9PTigxKTsKKwkJaWYgKFdBUk5fT04oIXNiYW5kLT5uX2NoYW5uZWxzIHx8ICFzYmFuZC0+bl9iaXRyYXRlcykpCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQorCisJCS8qCisJCSAqIFNpbmNlIHdlIHVzZSBhIHUzMiBmb3IgcmF0ZSBiaXRtYXBzIGluCisJCSAqIGllZWU4MDIxMV9nZXRfcmVzcG9uc2VfcmF0ZSwgd2UgY2Fubm90CisJCSAqIGhhdmUgbW9yZSB0aGFuIDMyIGxlZ2FjeSByYXRlcy4KKwkJICovCisJCWlmIChXQVJOX09OKHNiYW5kLT5uX2JpdHJhdGVzID4gMzIpKQorCQkJcmV0dXJuIC1FSU5WQUw7CiAKIAkJZm9yIChpID0gMDsgaSA8IHNiYW5kLT5uX2NoYW5uZWxzOyBpKyspIHsKIAkJCXNiYW5kLT5jaGFubmVsc1tpXS5vcmlnX2ZsYWdzID0KQEAgLTI5OSwxMCArMzQ3LDEwIEBACiAJLyogY2hlY2sgYW5kIHNldCB1cCBiaXRyYXRlcyAqLwogCWllZWU4MDIxMV9zZXRfYml0cmF0ZV9mbGFncyh3aXBoeSk7CiAKLQltdXRleF9sb2NrKCZjZmc4MDIxMV9kcnZfbXV0ZXgpOworCW11dGV4X2xvY2soJmNmZzgwMjExX211dGV4KTsKIAogCS8qIHNldCB1cCByZWd1bGF0b3J5IGluZm8gKi8KLQl3aXBoeV91cGRhdGVfcmVndWxhdG9yeSh3aXBoeSwgUkVHRE9NX1NFVF9CWV9DT1JFKTsKKwl3aXBoeV91cGRhdGVfcmVndWxhdG9yeSh3aXBoeSwgTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPUkUpOwogCiAJcmVzID0gZGV2aWNlX2FkZCgmZHJ2LT53aXBoeS5kZXYpOwogCWlmIChyZXMpCkBAIC0zMTcsOSArMzY1LDIwIEBACiAJaWYgKElTX0VSUihkcnYtPndpcGh5LmRlYnVnZnNkaXIpKQogCQlkcnYtPndpcGh5LmRlYnVnZnNkaXIgPSBOVUxMOwogCisJaWYgKHdpcGh5LT5jdXN0b21fcmVndWxhdG9yeSkgeworCQlzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0IHJlcXVlc3Q7CisKKwkJcmVxdWVzdC53aXBoeV9pZHggPSBnZXRfd2lwaHlfaWR4KHdpcGh5KTsKKwkJcmVxdWVzdC5pbml0aWF0b3IgPSBOTDgwMjExX1JFR0RPTV9TRVRfQllfRFJJVkVSOworCQlyZXF1ZXN0LmFscGhhMlswXSA9ICc5JzsKKwkJcmVxdWVzdC5hbHBoYTJbMV0gPSAnOSc7CisKKwkJbmw4MDIxMV9zZW5kX3JlZ19jaGFuZ2VfZXZlbnQoJnJlcXVlc3QpOworCX0KKwogCXJlcyA9IDA7CiBvdXRfdW5sb2NrOgotCW11dGV4X3VubG9jaygmY2ZnODAyMTFfZHJ2X211dGV4KTsKKwltdXRleF91bmxvY2soJmNmZzgwMjExX211dGV4KTsKIAlyZXR1cm4gcmVzOwogfQogRVhQT1JUX1NZTUJPTCh3aXBoeV9yZWdpc3Rlcik7CkBAIC0zMjksNyArMzg4LDcgQEAKIAlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRydiA9IHdpcGh5X3RvX2Rldih3aXBoeSk7CiAKIAkvKiBwcm90ZWN0IHRoZSBkZXZpY2UgbGlzdCAqLwotCW11dGV4X2xvY2soJmNmZzgwMjExX2Rydl9tdXRleCk7CisJbXV0ZXhfbG9jaygmY2ZnODAyMTFfbXV0ZXgpOwogCiAJQlVHX09OKCFsaXN0X2VtcHR5KCZkcnYtPm5ldGRldl9saXN0KSk7CiAKQEAgLTM1NSwxNCArNDE0LDE3IEBACiAJZGV2aWNlX2RlbCgmZHJ2LT53aXBoeS5kZXYpOwogCWRlYnVnZnNfcmVtb3ZlKGRydi0+d2lwaHkuZGVidWdmc2Rpcik7CiAKLQltdXRleF91bmxvY2soJmNmZzgwMjExX2Rydl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9tdXRleCk7CiB9CiBFWFBPUlRfU1lNQk9MKHdpcGh5X3VucmVnaXN0ZXIpOwogCiB2b2lkIGNmZzgwMjExX2Rldl9mcmVlKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZHJ2KQogeworCXN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MgKnNjYW4sICp0bXA7CiAJbXV0ZXhfZGVzdHJveSgmZHJ2LT5tdHgpOwogCW11dGV4X2Rlc3Ryb3koJmRydi0+ZGV2bGlzdF9tdHgpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzY2FuLCB0bXAsICZkcnYtPmJzc19saXN0LCBsaXN0KQorCQljZmc4MDIxMV9wdXRfYnNzKCZzY2FuLT5wdWIpOwogCWtmcmVlKGRydik7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9jb3JlLmggYi9uZXQvd2lyZWxlc3MvY29yZS5oCmluZGV4IGY3ZmI5ZjQuLjZhY2Q0ODMgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9jb3JlLmgKKysrIGIvbmV0L3dpcmVsZXNzL2NvcmUuaApAQCAtOCw2ICs4LDkgQEAKICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9rcmVmLmg+CisjaW5jbHVkZSA8bGludXgvcmJ0cmVlLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxuZXQvZ2VuZXRsaW5rLmg+CiAjaW5jbHVkZSA8bmV0L3dpcmVsZXNzLmg+CiAjaW5jbHVkZSA8bmV0L2NmZzgwMjExLmg+CkBAIC0zNSwxMiArMzgsMjAgQEAKIAllbnVtIGVudmlyb25tZW50X2NhcCBlbnY7CiAKIAkvKiB3aXBoeSBpbmRleCwgaW50ZXJuYWwgb25seSAqLwotCWludCBpZHg7CisJaW50IHdpcGh5X2lkeDsKIAogCS8qIGFzc29jaWF0ZSBuZXRkZXYgbGlzdCAqLwogCXN0cnVjdCBtdXRleCBkZXZsaXN0X210eDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIG5ldGRldl9saXN0OwogCisJLyogQlNTZXMvc2Nhbm5pbmcgKi8KKwlzcGlubG9ja190IGJzc19sb2NrOworCXN0cnVjdCBsaXN0X2hlYWQgYnNzX2xpc3Q7CisJc3RydWN0IHJiX3Jvb3QgYnNzX3RyZWU7CisJdTMyIGJzc19nZW5lcmF0aW9uOworCXN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnNjYW5fcmVxOyAvKiBwcm90ZWN0ZWQgYnkgUlROTCAqLworCXVuc2lnbmVkIGxvbmcgc3VzcGVuZF9hdDsKKwogCS8qIG11c3QgYmUgbGFzdCBiZWNhdXNlIG9mIHRoZSB3YXkgd2UgZG8gd2lwaHlfcHJpdigpLAogCSAqIGFuZCBpdCBzaG91bGQgYXQgbGVhc3QgYmUgYWxpZ25lZCB0byBORVRERVZfQUxJR04gKi8KIAlzdHJ1Y3Qgd2lwaHkgd2lwaHkgX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oTkVUREVWX0FMSUdOKSkpOwpAQCAtNTMsOSArNjQsMzkgQEAKIAlyZXR1cm4gY29udGFpbmVyX29mKHdpcGh5LCBzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UsIHdpcGh5KTsKIH0KIAotZXh0ZXJuIHN0cnVjdCBtdXRleCBjZmc4MDIxMV9kcnZfbXV0ZXg7CisvKiBOb3RlIDAgaXMgdmFsaWQsIGhlbmNlIHBoeTAgKi8KK3N0YXRpYyBpbmxpbmUKK2Jvb2wgd2lwaHlfaWR4X3ZhbGlkKGludCB3aXBoeV9pZHgpCit7CisJcmV0dXJuICh3aXBoeV9pZHggPj0gMCk7Cit9CisKK2V4dGVybiBzdHJ1Y3QgbXV0ZXggY2ZnODAyMTFfbXV0ZXg7CiBleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBjZmc4MDIxMV9kcnZfbGlzdDsKIAorc3RhdGljIGlubGluZSB2b2lkIGFzc2VydF9jZmc4MDIxMV9sb2NrKHZvaWQpCit7CisJV0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKCZjZmc4MDIxMV9tdXRleCkpOworfQorCisvKgorICogWW91IGNhbiB1c2UgdGhpcyB0byBtYXJrIGEgd2lwaHlfaWR4IGFzIG5vdCBoYXZpbmcgYW4gYXNzb2NpYXRlZCB3aXBoeS4KKyAqIEl0IGd1YXJhbnRlZXMgY2ZnODAyMTFfZHJ2X2J5X3dpcGh5X2lkeCh3aXBoeV9pZHgpIHdpbGwgcmV0dXJuIE5VTEwKKyAqLworI2RlZmluZSBXSVBIWV9JRFhfU1RBTEUgLTEKKworc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXN0cnVjdCByYl9ub2RlIHJibjsKKwl1bnNpZ25lZCBsb25nIHRzOworCXN0cnVjdCBrcmVmIHJlZjsKKwkvKiBtdXN0IGJlIGxhc3QgYmVjYXVzZSBvZiBwcml2IG1lbWJlciAqLworCXN0cnVjdCBjZmc4MDIxMV9ic3MgcHViOworfTsKKworc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpjZmc4MDIxMV9kcnZfYnlfd2lwaHlfaWR4KGludCB3aXBoeV9pZHgpOworaW50IGdldF93aXBoeV9pZHgoc3RydWN0IHdpcGh5ICp3aXBoeSk7CisKIC8qCiAgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBkcml2ZXIKICAqIHRoYXQgdGhlIGdlbmxfaW5mbyBpdGVtIHRoYXQgaXMgcGFzc2VkIHJlZmVycyB0by4KQEAgLTYzLDEzICsxMDQsMTMgQEAKICAqIHRoZSBkcml2ZXIncyBtdXRleCEKICAqCiAgKiBUaGlzIG1lYW5zIHRoYXQgeW91IG5lZWQgdG8gY2FsbCBjZmc4MDIxMV9wdXRfZGV2KCkKLSAqIGJlZm9yZSBiZWluZyBhbGxvd2VkIHRvIGFjcXVpcmUgJmNmZzgwMjExX2Rydl9tdXRleCEKKyAqIGJlZm9yZSBiZWluZyBhbGxvd2VkIHRvIGFjcXVpcmUgJmNmZzgwMjExX211dGV4IQogICoKICAqIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugd2UgbmVlZCB0byBsb2NrIHRoZSBnbG9iYWwKICAqIG11dGV4IHRvIGdldCBhbiBpdGVtIG9mZiB0aGUgbGlzdCBzYWZlbHksIGFuZCB0aGVuCiAgKiB3ZSBsb2NrIHRoZSBkcnYgbXV0ZXggc28gaXQgZG9lc24ndCBnbyBhd2F5IHVuZGVyIHVzLgogICoKLSAqIFdlIGRvbid0IHdhbnQgdG8ga2VlcCBjZmc4MDIxMV9kcnZfbXV0ZXggbG9ja2VkCisgKiBXZSBkb24ndCB3YW50IHRvIGtlZXAgY2ZnODAyMTFfbXV0ZXggbG9ja2VkCiAgKiBmb3IgYWxsIHRoZSB0aW1lIGluIG9yZGVyIHRvIGFsbG93IHJlcXVlc3RzIG9uCiAgKiBvdGhlciBpbnRlcmZhY2VzIHRvIGdvIHRocm91Z2ggYXQgdGhlIHNhbWUgdGltZS4KICAqCkBAIC03OSw2ICsxMjAsOSBAQAogZXh0ZXJuIHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqCiBjZmc4MDIxMV9nZXRfZGV2X2Zyb21faW5mbyhzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTsKIAorLyogcmVxdWlyZXMgY2ZnODAyMTFfZHJ2X211dGV4IHRvIGJlIGhlbGQhICovCitzdHJ1Y3Qgd2lwaHkgKndpcGh5X2lkeF90b193aXBoeShpbnQgd2lwaHlfaWR4KTsKKwogLyogaWRlbnRpY2FsIHRvIGNmZzgwMjExX2dldF9kZXZfZnJvbV9pbmZvIGJ1dCBvbmx5IG9wZXJhdGUgb24gaWZpbmRleCAqLwogZXh0ZXJuIHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqCiBjZmc4MDIxMV9nZXRfZGV2X2Zyb21faWZpbmRleChpbnQgaWZpbmRleCk7CkBAIC05Miw2ICsxMzYsMTEgQEAKIAkJCSAgICAgICBjaGFyICpuZXduYW1lKTsKIAogdm9pZCBpZWVlODAyMTFfc2V0X2JpdHJhdGVfZmxhZ3Moc3RydWN0IHdpcGh5ICp3aXBoeSk7Ci12b2lkIHdpcGh5X3VwZGF0ZV9yZWd1bGF0b3J5KHN0cnVjdCB3aXBoeSAqd2lwaHksIGVudW0gcmVnX3NldF9ieSBzZXRieSk7Cit2b2lkIHdpcGh5X3VwZGF0ZV9yZWd1bGF0b3J5KHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkgICAgIGVudW0gbmw4MDIxMV9yZWdfaW5pdGlhdG9yIHNldGJ5KTsKKwordm9pZCBjZmc4MDIxMV9ic3NfZXhwaXJlKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZGV2KTsKK3ZvaWQgY2ZnODAyMTFfYnNzX2FnZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRldiwKKyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGFnZV9zZWNzKTsKIAogI2VuZGlmIC8qIF9fTkVUX1dJUkVMRVNTX0NPUkVfSCAqLwpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL25sODAyMTEuYyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmMKaW5kZXggMzFiODA3YS4uYWI5ZDhmMSAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL25sODAyMTEuYworKysgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jCkBAIC03LDEzICs3LDEzIEBACiAjaW5jbHVkZSA8bGludXgvaWYuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KLSNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgogI2luY2x1ZGUgPGxpbnV4L2llZWU4MDIxMS5oPgogI2luY2x1ZGUgPGxpbnV4L25sODAyMTEuaD4KICNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRsaW5rLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxuZXQvZ2VuZXRsaW5rLmg+CiAjaW5jbHVkZSA8bmV0L2NmZzgwMjExLmg+CiAjaW5jbHVkZSAiY29yZS5oIgpAQCAtMTA1LDYgKzEwNSwxMiBAQAogCiAJW05MODAyMTFfQVRUUl9IVF9DQVBBQklMSVRZXSA9IHsgLnR5cGUgPSBOTEFfQklOQVJZLAogCQkJCQkgLmxlbiA9IE5MODAyMTFfSFRfQ0FQQUJJTElUWV9MRU4gfSwKKworCVtOTDgwMjExX0FUVFJfTUdNVF9TVUJUWVBFXSA9IHsgLnR5cGUgPSBOTEFfVTggfSwKKwlbTkw4MDIxMV9BVFRSX0lFXSA9IHsgLnR5cGUgPSBOTEFfQklOQVJZLAorCQkJICAgICAgLmxlbiA9IElFRUU4MDIxMV9NQVhfREFUQV9MRU4gfSwKKwlbTkw4MDIxMV9BVFRSX1NDQU5fRlJFUVVFTkNJRVNdID0geyAudHlwZSA9IE5MQV9ORVNURUQgfSwKKwlbTkw4MDIxMV9BVFRSX1NDQU5fU1NJRFNdID0geyAudHlwZSA9IE5MQV9ORVNURUQgfSwKIH07CiAKIC8qIG1lc3NhZ2UgYnVpbGRpbmcgaGVscGVyICovCkBAIC0xMzUsOCArMTQxLDEwIEBACiAJaWYgKCFoZHIpCiAJCXJldHVybiAtMTsKIAotCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9BVFRSX1dJUEhZLCBkZXYtPmlkeCk7CisJTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX0FUVFJfV0lQSFksIGRldi0+d2lwaHlfaWR4KTsKIAlOTEFfUFVUX1NUUklORyhtc2csIE5MODAyMTFfQVRUUl9XSVBIWV9OQU1FLCB3aXBoeV9uYW1lKCZkZXYtPndpcGh5KSk7CisJTkxBX1BVVF9VOChtc2csIE5MODAyMTFfQVRUUl9NQVhfTlVNX1NDQU5fU1NJRFMsCisJCSAgIGRldi0+d2lwaHkubWF4X3NjYW5fc3NpZHMpOwogCiAJbmxfbW9kZXMgPSBubGFfbmVzdF9zdGFydChtc2csIE5MODAyMTFfQVRUUl9TVVBQT1JURURfSUZUWVBFUyk7CiAJaWYgKCFubF9tb2RlcykKQEAgLTI0Nyw3ICsyNTUsNyBAQAogCWludCBzdGFydCA9IGNiLT5hcmdzWzBdOwogCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZGV2OwogCi0JbXV0ZXhfbG9jaygmY2ZnODAyMTFfZHJ2X211dGV4KTsKKwltdXRleF9sb2NrKCZjZmc4MDIxMV9tdXRleCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZjZmc4MDIxMV9kcnZfbGlzdCwgbGlzdCkgewogCQlpZiAoKytpZHggPD0gc3RhcnQpCiAJCQljb250aW51ZTsKQEAgLTI1OCw3ICsyNjYsNyBAQAogCQkJYnJlYWs7CiAJCX0KIAl9Ci0JbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9kcnZfbXV0ZXgpOworCW11dGV4X3VubG9jaygmY2ZnODAyMTFfbXV0ZXgpOwogCiAJY2ItPmFyZ3NbMF0gPSBpZHg7CiAKQEAgLTQ2MSw3ICs0NjksNyBAQAogCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZGV2OwogCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXY7CiAKLQltdXRleF9sb2NrKCZjZmc4MDIxMV9kcnZfbXV0ZXgpOworCW11dGV4X2xvY2soJmNmZzgwMjExX211dGV4KTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJmNmZzgwMjExX2Rydl9saXN0LCBsaXN0KSB7CiAJCWlmICh3cF9pZHggPCB3cF9zdGFydCkgewogCQkJd3BfaWR4Kys7CkBAIC00ODgsNyArNDk2LDcgQEAKIAkJd3BfaWR4Kys7CiAJfQogIG91dDoKLQltdXRleF91bmxvY2soJmNmZzgwMjExX2Rydl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9tdXRleCk7CiAKIAljYi0+YXJnc1swXSA9IHdwX2lkeDsKIAljYi0+YXJnc1sxXSA9IGlmX2lkeDsKQEAgLTczOCw3ICs3NDYsNyBAQAogCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfS0VZX0lEWF0pCiAJCWtleV9pZHggPSBubGFfZ2V0X3U4KGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9LRVlfSURYXSk7CiAKLQlpZiAoa2V5X2lkeCA+IDMpCisJaWYgKGtleV9pZHggPiA1KQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfTUFDXSkKQEAgLTgwNCwzMCArODEyLDQxIEBACiAJaW50IGVycjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXU4IGtleV9pZHg7CisJaW50ICgqZnVuYykoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJICAgIHU4IGtleV9pbmRleCk7CiAKIAlpZiAoIWluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9LRVlfSURYXSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlrZXlfaWR4ID0gbmxhX2dldF91OChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfS0VZX0lEWF0pOwogCi0JaWYgKGtleV9pZHggPiAzKQorCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfS0VZX0RFRkFVTFRfTUdNVF0pIHsKKwkJaWYgKGtleV9pZHggPCA0IHx8IGtleV9pZHggPiA1KQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfSBlbHNlIGlmIChrZXlfaWR4ID4gMykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBjdXJyZW50bHkgb25seSBzdXBwb3J0IHNldHRpbmcgZGVmYXVsdCBrZXkgKi8KLQlpZiAoIWluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9LRVlfREVGQVVMVF0pCisJaWYgKCFpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfS0VZX0RFRkFVTFRdICYmCisJICAgICFpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfS0VZX0RFRkFVTFRfTUdNVF0pCiAJCXJldHVybiAtRUlOVkFMOwogCiAJZXJyID0gZ2V0X2Rydl9kZXZfYnlfaW5mb19pZmluZGV4KGluZm8tPmF0dHJzLCAmZHJ2LCAmZGV2KTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0JaWYgKCFkcnYtPm9wcy0+c2V0X2RlZmF1bHRfa2V5KSB7CisJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9LRVlfREVGQVVMVF0pCisJCWZ1bmMgPSBkcnYtPm9wcy0+c2V0X2RlZmF1bHRfa2V5OworCWVsc2UKKwkJZnVuYyA9IGRydi0+b3BzLT5zZXRfZGVmYXVsdF9tZ210X2tleTsKKworCWlmICghZnVuYykgewogCQllcnIgPSAtRU9QTk9UU1VQUDsKIAkJZ290byBvdXQ7CiAJfQogCiAJcnRubF9sb2NrKCk7Ci0JZXJyID0gZHJ2LT5vcHMtPnNldF9kZWZhdWx0X2tleSgmZHJ2LT53aXBoeSwgZGV2LCBrZXlfaWR4KTsKKwllcnIgPSBmdW5jKCZkcnYtPndpcGh5LCBkZXYsIGtleV9pZHgpOwogCXJ0bmxfdW5sb2NrKCk7CiAKICBvdXQ6CkBAIC04NjMsNyArODgyLDcgQEAKIAlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pCiAJCW1hY19hZGRyID0gbmxhX2RhdGEoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pOwogCi0JaWYgKGtleV9pZHggPiAzKQorCWlmIChrZXlfaWR4ID4gNSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKgpAQCAtODk0LDYgKzkxMywxMCBAQAogCQlpZiAocGFyYW1zLmtleV9sZW4gIT0gMTMpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJYnJlYWs7CisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9BRVNfQ01BQzoKKwkJaWYgKHBhcmFtcy5rZXlfbGVuICE9IDE2KQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTkyOCw3ICs5NTEsNyBAQAogCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfS0VZX0lEWF0pCiAJCWtleV9pZHggPSBubGFfZ2V0X3U4KGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9LRVlfSURYXSk7CiAKLQlpZiAoa2V5X2lkeCA+IDMpCisJaWYgKGtleV9pZHggPiA1KQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfTUFDXSkKQEAgLTExODIsNiArMTIwNSwxMiBAQAogCiAJCW5sYV9uZXN0X2VuZChtc2csIHR4cmF0ZSk7CiAJfQorCWlmIChzaW5mby0+ZmlsbGVkICYgU1RBVElPTl9JTkZPX1JYX1BBQ0tFVFMpCisJCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9TVEFfSU5GT19SWF9QQUNLRVRTLAorCQkJICAgIHNpbmZvLT5yeF9wYWNrZXRzKTsKKwlpZiAoc2luZm8tPmZpbGxlZCAmIFNUQVRJT05fSU5GT19UWF9QQUNLRVRTKQorCQlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfU1RBX0lORk9fVFhfUEFDS0VUUywKKwkJCSAgICBzaW5mby0+dHhfcGFja2V0cyk7CiAJbmxhX25lc3RfZW5kKG1zZywgc2luZm9hdHRyKTsKIAogCXJldHVybiBnZW5sbXNnX2VuZChtc2csIGhkcik7CkBAIC0xODc2LDYgKzE5MDUsMTkgQEAKIAlpbnQgcjsKIAljaGFyICpkYXRhID0gTlVMTDsKIAorCS8qCisJICogWW91IHNob3VsZCBvbmx5IGdldCB0aGlzIHdoZW4gY2ZnODAyMTEgaGFzbid0IHlldCBpbml0aWFsaXplZAorCSAqIGNvbXBsZXRlbHkgd2hlbiBidWlsdC1pbiB0byB0aGUga2VybmVsIHJpZ2h0IGJldHdlZW4gdGhlIHRpbWUKKwkgKiB3aW5kb3cgYmV0d2VlbiBubDgwMjExX2luaXQoKSBhbmQgcmVndWxhdG9yeV9pbml0KCksIGlmIHRoYXQgaXMKKwkgKiBldmVuIHBvc3NpYmxlLgorCSAqLworCW11dGV4X2xvY2soJmNmZzgwMjExX211dGV4KTsKKwlpZiAodW5saWtlbHkoIWNmZzgwMjExX3JlZ2RvbWFpbikpIHsKKwkJbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9tdXRleCk7CisJCXJldHVybiAtRUlOUFJPR1JFU1M7CisJfQorCW11dGV4X3VubG9jaygmY2ZnODAyMTFfbXV0ZXgpOworCiAJaWYgKCFpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfUkVHX0FMUEhBMl0pCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC0xODg2LDkgKzE5MjgsOSBAQAogCWlmIChpc193b3JsZF9yZWdkb20oZGF0YSkpCiAJCXJldHVybiAtRUlOVkFMOwogI2VuZGlmCi0JbXV0ZXhfbG9jaygmY2ZnODAyMTFfZHJ2X211dGV4KTsKLQlyID0gX19yZWd1bGF0b3J5X2hpbnQoTlVMTCwgUkVHRE9NX1NFVF9CWV9VU0VSLCBkYXRhLCAwLCBFTlZJUk9OX0FOWSk7Ci0JbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9kcnZfbXV0ZXgpOworCisJciA9IHJlZ3VsYXRvcnlfaGludF91c2VyKGRhdGEpOworCiAJcmV0dXJuIHI7CiB9CiAKQEAgLTIwODAsNiArMjEyMiw4MSBAQAogCiAjdW5kZWYgRklMTF9JTl9NRVNIX1BBUkFNX0lGX1NFVAogCitzdGF0aWMgaW50IG5sODAyMTFfZ2V0X3JlZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQoreworCXN0cnVjdCBza19idWZmICptc2c7CisJdm9pZCAqaGRyID0gTlVMTDsKKwlzdHJ1Y3QgbmxhdHRyICpubF9yZWdfcnVsZXM7CisJdW5zaWduZWQgaW50IGk7CisJaW50IGVyciA9IC1FSU5WQUw7CisKKwltdXRleF9sb2NrKCZjZmc4MDIxMV9tdXRleCk7CisKKwlpZiAoIWNmZzgwMjExX3JlZ2RvbWFpbikKKwkJZ290byBvdXQ7CisKKwltc2cgPSBubG1zZ19uZXcoTkxNU0dfR09PRFNJWkUsIEdGUF9LRVJORUwpOworCWlmICghbXNnKSB7CisJCWVyciA9IC1FTk9CVUZTOworCQlnb3RvIG91dDsKKwl9CisKKwloZHIgPSBubDgwMjExaGRyX3B1dChtc2csIGluZm8tPnNuZF9waWQsIGluZm8tPnNuZF9zZXEsIDAsCisJCQkgICAgIE5MODAyMTFfQ01EX0dFVF9SRUcpOworCWlmICghaGRyKQorCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKKworCU5MQV9QVVRfU1RSSU5HKG1zZywgTkw4MDIxMV9BVFRSX1JFR19BTFBIQTIsCisJCWNmZzgwMjExX3JlZ2RvbWFpbi0+YWxwaGEyKTsKKworCW5sX3JlZ19ydWxlcyA9IG5sYV9uZXN0X3N0YXJ0KG1zZywgTkw4MDIxMV9BVFRSX1JFR19SVUxFUyk7CisJaWYgKCFubF9yZWdfcnVsZXMpCisJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOworCisJZm9yIChpID0gMDsgaSA8IGNmZzgwMjExX3JlZ2RvbWFpbi0+bl9yZWdfcnVsZXM7IGkrKykgeworCQlzdHJ1Y3QgbmxhdHRyICpubF9yZWdfcnVsZTsKKwkJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdfcnVsZSAqcmVnX3J1bGU7CisJCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfZnJlcV9yYW5nZSAqZnJlcV9yYW5nZTsKKwkJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9wb3dlcl9ydWxlICpwb3dlcl9ydWxlOworCisJCXJlZ19ydWxlID0gJmNmZzgwMjExX3JlZ2RvbWFpbi0+cmVnX3J1bGVzW2ldOworCQlmcmVxX3JhbmdlID0gJnJlZ19ydWxlLT5mcmVxX3JhbmdlOworCQlwb3dlcl9ydWxlID0gJnJlZ19ydWxlLT5wb3dlcl9ydWxlOworCisJCW5sX3JlZ19ydWxlID0gbmxhX25lc3Rfc3RhcnQobXNnLCBpKTsKKwkJaWYgKCFubF9yZWdfcnVsZSkKKwkJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOworCisJCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9BVFRSX1JFR19SVUxFX0ZMQUdTLAorCQkJcmVnX3J1bGUtPmZsYWdzKTsKKwkJTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX0FUVFJfRlJFUV9SQU5HRV9TVEFSVCwKKwkJCWZyZXFfcmFuZ2UtPnN0YXJ0X2ZyZXFfa2h6KTsKKwkJTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX0FUVFJfRlJFUV9SQU5HRV9FTkQsCisJCQlmcmVxX3JhbmdlLT5lbmRfZnJlcV9raHopOworCQlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfQVRUUl9GUkVRX1JBTkdFX01BWF9CVywKKwkJCWZyZXFfcmFuZ2UtPm1heF9iYW5kd2lkdGhfa2h6KTsKKwkJTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX0FUVFJfUE9XRVJfUlVMRV9NQVhfQU5UX0dBSU4sCisJCQlwb3dlcl9ydWxlLT5tYXhfYW50ZW5uYV9nYWluKTsKKwkJTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX0FUVFJfUE9XRVJfUlVMRV9NQVhfRUlSUCwKKwkJCXBvd2VyX3J1bGUtPm1heF9laXJwKTsKKworCQlubGFfbmVzdF9lbmQobXNnLCBubF9yZWdfcnVsZSk7CisJfQorCisJbmxhX25lc3RfZW5kKG1zZywgbmxfcmVnX3J1bGVzKTsKKworCWdlbmxtc2dfZW5kKG1zZywgaGRyKTsKKwllcnIgPSBnZW5sbXNnX3VuaWNhc3QobXNnLCBpbmZvLT5zbmRfcGlkKTsKKwlnb3RvIG91dDsKKworbmxhX3B1dF9mYWlsdXJlOgorCWdlbmxtc2dfY2FuY2VsKG1zZywgaGRyKTsKKwllcnIgPSAtRU1TR1NJWkU7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9tdXRleCk7CisJcmV0dXJuIGVycjsKK30KKwogc3RhdGljIGludCBubDgwMjExX3NldF9yZWcoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3QgbmxhdHRyICp0YltOTDgwMjExX1JFR19SVUxFX0FUVFJfTUFYICsgMV07CkBAIC0yMTM1LDkgKzIyNTIsOSBAQAogCiAJQlVHX09OKHJ1bGVfaWR4ICE9IG51bV9ydWxlcyk7CiAKLQltdXRleF9sb2NrKCZjZmc4MDIxMV9kcnZfbXV0ZXgpOworCW11dGV4X2xvY2soJmNmZzgwMjExX211dGV4KTsKIAlyID0gc2V0X3JlZ2RvbShyZCk7Ci0JbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9kcnZfbXV0ZXgpOworCW11dGV4X3VubG9jaygmY2ZnODAyMTFfbXV0ZXgpOwogCXJldHVybiByOwogCiAgYmFkX3JlZzoKQEAgLTIxNDUsNiArMjI2MiwzMDIgQEAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAorc3RhdGljIGludCBubDgwMjExX3NldF9tZ210X2V4dHJhX2llKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQoreworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZHJ2OworCWludCBlcnI7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgbWdtdF9leHRyYV9pZV9wYXJhbXMgcGFyYW1zOworCisJbWVtc2V0KCZwYXJhbXMsIDAsIHNpemVvZihwYXJhbXMpKTsKKworCWlmICghaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX01HTVRfU1VCVFlQRV0pCisJCXJldHVybiAtRUlOVkFMOworCXBhcmFtcy5zdWJ0eXBlID0gbmxhX2dldF91OChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfTUdNVF9TVUJUWVBFXSk7CisJaWYgKHBhcmFtcy5zdWJ0eXBlID4gMTUpCisJCXJldHVybiAtRUlOVkFMOyAvKiBGQyBTdWJ0eXBlIGZpZWxkIGlzIDQgYml0cyAoMC4uMTUpICovCisKKwlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0lFXSkgeworCQlwYXJhbXMuaWVzID0gbmxhX2RhdGEoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0lFXSk7CisJCXBhcmFtcy5pZXNfbGVuID0gbmxhX2xlbihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfSUVdKTsKKwl9CisKKwllcnIgPSBnZXRfZHJ2X2Rldl9ieV9pbmZvX2lmaW5kZXgoaW5mby0+YXR0cnMsICZkcnYsICZkZXYpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlpZiAoZHJ2LT5vcHMtPnNldF9tZ210X2V4dHJhX2llKSB7CisJCXJ0bmxfbG9jaygpOworCQllcnIgPSBkcnYtPm9wcy0+c2V0X21nbXRfZXh0cmFfaWUoJmRydi0+d2lwaHksIGRldiwgJnBhcmFtcyk7CisJCXJ0bmxfdW5sb2NrKCk7CisJfSBlbHNlCisJCWVyciA9IC1FT1BOT1RTVVBQOworCisJY2ZnODAyMTFfcHV0X2RldihkcnYpOworCWRldl9wdXQoZGV2KTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IG5sODAyMTFfdHJpZ2dlcl9zY2FuKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCit7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnY7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpyZXF1ZXN0OworCXN0cnVjdCBjZmc4MDIxMV9zc2lkICpzc2lkOworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbDsKKwlzdHJ1Y3QgbmxhdHRyICphdHRyOworCXN0cnVjdCB3aXBoeSAqd2lwaHk7CisJaW50IGVyciwgdG1wLCBuX3NzaWRzID0gMCwgbl9jaGFubmVscyA9IDAsIGk7CisJZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kOworCXNpemVfdCBpZV9sZW47CisKKwllcnIgPSBnZXRfZHJ2X2Rldl9ieV9pbmZvX2lmaW5kZXgoaW5mby0+YXR0cnMsICZkcnYsICZkZXYpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwl3aXBoeSA9ICZkcnYtPndpcGh5OworCisJaWYgKCFkcnYtPm9wcy0+c2NhbikgeworCQllcnIgPSAtRU9QTk9UU1VQUDsKKwkJZ290byBvdXQ7CisJfQorCisJcnRubF9sb2NrKCk7CisKKwlpZiAoZHJ2LT5zY2FuX3JlcSkgeworCQllcnIgPSAtRUJVU1k7CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisKKwlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1NDQU5fRlJFUVVFTkNJRVNdKSB7CisJCW5sYV9mb3JfZWFjaF9uZXN0ZWQoYXR0ciwgaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1NDQU5fRlJFUVVFTkNJRVNdLCB0bXApCisJCQluX2NoYW5uZWxzKys7CisJCWlmICghbl9jaGFubmVscykgeworCQkJZXJyID0gLUVJTlZBTDsKKwkJCWdvdG8gb3V0X3VubG9jazsKKwkJfQorCX0gZWxzZSB7CisJCWZvciAoYmFuZCA9IDA7IGJhbmQgPCBJRUVFODAyMTFfTlVNX0JBTkRTOyBiYW5kKyspCisJCQlpZiAod2lwaHktPmJhbmRzW2JhbmRdKQorCQkJCW5fY2hhbm5lbHMgKz0gd2lwaHktPmJhbmRzW2JhbmRdLT5uX2NoYW5uZWxzOworCX0KKworCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfU0NBTl9TU0lEU10pCisJCW5sYV9mb3JfZWFjaF9uZXN0ZWQoYXR0ciwgaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1NDQU5fU1NJRFNdLCB0bXApCisJCQluX3NzaWRzKys7CisKKwlpZiAobl9zc2lkcyA+IHdpcGh5LT5tYXhfc2Nhbl9zc2lkcykgeworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dF91bmxvY2s7CisJfQorCisJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9JRV0pCisJCWllX2xlbiA9IG5sYV9sZW4oaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0lFXSk7CisJZWxzZQorCQlpZV9sZW4gPSAwOworCisJcmVxdWVzdCA9IGt6YWxsb2Moc2l6ZW9mKCpyZXF1ZXN0KQorCQkJKyBzaXplb2YoKnNzaWQpICogbl9zc2lkcworCQkJKyBzaXplb2YoY2hhbm5lbCkgKiBuX2NoYW5uZWxzCisJCQkrIGllX2xlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyZXF1ZXN0KSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisKKwlyZXF1ZXN0LT5jaGFubmVscyA9ICh2b2lkICopKChjaGFyICopcmVxdWVzdCArIHNpemVvZigqcmVxdWVzdCkpOworCXJlcXVlc3QtPm5fY2hhbm5lbHMgPSBuX2NoYW5uZWxzOworCWlmIChuX3NzaWRzKQorCQlyZXF1ZXN0LT5zc2lkcyA9ICh2b2lkICopKHJlcXVlc3QtPmNoYW5uZWxzICsgbl9jaGFubmVscyk7CisJcmVxdWVzdC0+bl9zc2lkcyA9IG5fc3NpZHM7CisJaWYgKGllX2xlbikgeworCQlpZiAocmVxdWVzdC0+c3NpZHMpCisJCQlyZXF1ZXN0LT5pZSA9ICh2b2lkICopKHJlcXVlc3QtPnNzaWRzICsgbl9zc2lkcyk7CisJCWVsc2UKKwkJCXJlcXVlc3QtPmllID0gKHZvaWQgKikocmVxdWVzdC0+Y2hhbm5lbHMgKyBuX2NoYW5uZWxzKTsKKwl9CisKKwlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1NDQU5fRlJFUVVFTkNJRVNdKSB7CisJCS8qIHVzZXIgc3BlY2lmaWVkLCBiYWlsIG91dCBpZiBjaGFubmVsIG5vdCBmb3VuZCAqLworCQlyZXF1ZXN0LT5uX2NoYW5uZWxzID0gbl9jaGFubmVsczsKKwkJaSA9IDA7CisJCW5sYV9mb3JfZWFjaF9uZXN0ZWQoYXR0ciwgaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1NDQU5fRlJFUVVFTkNJRVNdLCB0bXApIHsKKwkJCXJlcXVlc3QtPmNoYW5uZWxzW2ldID0gaWVlZTgwMjExX2dldF9jaGFubmVsKHdpcGh5LCBubGFfZ2V0X3UzMihhdHRyKSk7CisJCQlpZiAoIXJlcXVlc3QtPmNoYW5uZWxzW2ldKSB7CisJCQkJZXJyID0gLUVJTlZBTDsKKwkJCQlnb3RvIG91dF9mcmVlOworCQkJfQorCQkJaSsrOworCQl9CisJfSBlbHNlIHsKKwkJLyogYWxsIGNoYW5uZWxzICovCisJCWkgPSAwOworCQlmb3IgKGJhbmQgPSAwOyBiYW5kIDwgSUVFRTgwMjExX05VTV9CQU5EUzsgYmFuZCsrKSB7CisJCQlpbnQgajsKKwkJCWlmICghd2lwaHktPmJhbmRzW2JhbmRdKQorCQkJCWNvbnRpbnVlOworCQkJZm9yIChqID0gMDsgaiA8IHdpcGh5LT5iYW5kc1tiYW5kXS0+bl9jaGFubmVsczsgaisrKSB7CisJCQkJcmVxdWVzdC0+Y2hhbm5lbHNbaV0gPSAmd2lwaHktPmJhbmRzW2JhbmRdLT5jaGFubmVsc1tqXTsKKwkJCQlpKys7CisJCQl9CisJCX0KKwl9CisKKwlpID0gMDsKKwlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1NDQU5fU1NJRFNdKSB7CisJCW5sYV9mb3JfZWFjaF9uZXN0ZWQoYXR0ciwgaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1NDQU5fU1NJRFNdLCB0bXApIHsKKwkJCWlmIChyZXF1ZXN0LT5zc2lkc1tpXS5zc2lkX2xlbiA+IElFRUU4MDIxMV9NQVhfU1NJRF9MRU4pIHsKKwkJCQllcnIgPSAtRUlOVkFMOworCQkJCWdvdG8gb3V0X2ZyZWU7CisJCQl9CisJCQltZW1jcHkocmVxdWVzdC0+c3NpZHNbaV0uc3NpZCwgbmxhX2RhdGEoYXR0ciksIG5sYV9sZW4oYXR0cikpOworCQkJcmVxdWVzdC0+c3NpZHNbaV0uc3NpZF9sZW4gPSBubGFfbGVuKGF0dHIpOworCQkJaSsrOworCQl9CisJfQorCisJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9JRV0pIHsKKwkJcmVxdWVzdC0+aWVfbGVuID0gbmxhX2xlbihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfSUVdKTsKKwkJbWVtY3B5KHJlcXVlc3QtPmllLCBubGFfZGF0YShpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfSUVdKSwKKwkJICAgICAgIHJlcXVlc3QtPmllX2xlbik7CisJfQorCisJcmVxdWVzdC0+aWZpZHggPSBkZXYtPmlmaW5kZXg7CisJcmVxdWVzdC0+d2lwaHkgPSAmZHJ2LT53aXBoeTsKKworCWRydi0+c2Nhbl9yZXEgPSByZXF1ZXN0OworCWVyciA9IGRydi0+b3BzLT5zY2FuKCZkcnYtPndpcGh5LCBkZXYsIHJlcXVlc3QpOworCisgb3V0X2ZyZWU6CisJaWYgKGVycikgeworCQlkcnYtPnNjYW5fcmVxID0gTlVMTDsKKwkJa2ZyZWUocmVxdWVzdCk7CisJfQorIG91dF91bmxvY2s6CisJcnRubF91bmxvY2soKTsKKyBvdXQ6CisJY2ZnODAyMTFfcHV0X2RldihkcnYpOworCWRldl9wdXQoZGV2KTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IG5sODAyMTFfc2VuZF9ic3Moc3RydWN0IHNrX2J1ZmYgKm1zZywgdTMyIHBpZCwgdTMyIHNlcSwgaW50IGZsYWdzLAorCQkJICAgIHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgIHN0cnVjdCBjZmc4MDIxMV9ic3MgKnJlcykKK3sKKwl2b2lkICpoZHI7CisJc3RydWN0IG5sYXR0ciAqYnNzOworCisJaGRyID0gbmw4MDIxMWhkcl9wdXQobXNnLCBwaWQsIHNlcSwgZmxhZ3MsCisJCQkgICAgIE5MODAyMTFfQ01EX05FV19TQ0FOX1JFU1VMVFMpOworCWlmICghaGRyKQorCQlyZXR1cm4gLTE7CisKKwlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfQVRUUl9TQ0FOX0dFTkVSQVRJT04sCisJCSAgICByZGV2LT5ic3NfZ2VuZXJhdGlvbik7CisJTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX0FUVFJfSUZJTkRFWCwgZGV2LT5pZmluZGV4KTsKKworCWJzcyA9IG5sYV9uZXN0X3N0YXJ0KG1zZywgTkw4MDIxMV9BVFRSX0JTUyk7CisJaWYgKCFic3MpCisJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOworCWlmICghaXNfemVyb19ldGhlcl9hZGRyKHJlcy0+YnNzaWQpKQorCQlOTEFfUFVUKG1zZywgTkw4MDIxMV9CU1NfQlNTSUQsIEVUSF9BTEVOLCByZXMtPmJzc2lkKTsKKwlpZiAocmVzLT5pbmZvcm1hdGlvbl9lbGVtZW50cyAmJiByZXMtPmxlbl9pbmZvcm1hdGlvbl9lbGVtZW50cykKKwkJTkxBX1BVVChtc2csIE5MODAyMTFfQlNTX0lORk9STUFUSU9OX0VMRU1FTlRTLAorCQkJcmVzLT5sZW5faW5mb3JtYXRpb25fZWxlbWVudHMsCisJCQlyZXMtPmluZm9ybWF0aW9uX2VsZW1lbnRzKTsKKwlpZiAocmVzLT50c2YpCisJCU5MQV9QVVRfVTY0KG1zZywgTkw4MDIxMV9CU1NfVFNGLCByZXMtPnRzZik7CisJaWYgKHJlcy0+YmVhY29uX2ludGVydmFsKQorCQlOTEFfUFVUX1UxNihtc2csIE5MODAyMTFfQlNTX0JFQUNPTl9JTlRFUlZBTCwgcmVzLT5iZWFjb25faW50ZXJ2YWwpOworCU5MQV9QVVRfVTE2KG1zZywgTkw4MDIxMV9CU1NfQ0FQQUJJTElUWSwgcmVzLT5jYXBhYmlsaXR5KTsKKwlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfQlNTX0ZSRVFVRU5DWSwgcmVzLT5jaGFubmVsLT5jZW50ZXJfZnJlcSk7CisKKwlzd2l0Y2ggKHJkZXYtPndpcGh5LnNpZ25hbF90eXBlKSB7CisJY2FzZSBDRkc4MDIxMV9TSUdOQUxfVFlQRV9NQk06CisJCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9CU1NfU0lHTkFMX01CTSwgcmVzLT5zaWduYWwpOworCQlicmVhazsKKwljYXNlIENGRzgwMjExX1NJR05BTF9UWVBFX1VOU1BFQzoKKwkJTkxBX1BVVF9VOChtc2csIE5MODAyMTFfQlNTX1NJR05BTF9VTlNQRUMsIHJlcy0+c2lnbmFsKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJbmxhX25lc3RfZW5kKG1zZywgYnNzKTsKKworCXJldHVybiBnZW5sbXNnX2VuZChtc2csIGhkcik7CisKKyBubGFfcHV0X2ZhaWx1cmU6CisJZ2VubG1zZ19jYW5jZWwobXNnLCBoZHIpOworCXJldHVybiAtRU1TR1NJWkU7Cit9CisKK3N0YXRpYyBpbnQgbmw4MDIxMV9kdW1wX3NjYW4oc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgICAgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQoreworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CisJc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqc2NhbjsKKwlpbnQgaWZpZHggPSBjYi0+YXJnc1swXTsKKwlpbnQgc3RhcnQgPSBjYi0+YXJnc1sxXSwgaWR4ID0gMDsKKwlpbnQgZXJyOworCisJaWYgKCFpZmlkeCkgeworCQllcnIgPSBubG1zZ19wYXJzZShjYi0+bmxoLCBHRU5MX0hEUkxFTiArIG5sODAyMTFfZmFtLmhkcnNpemUsCisJCQkJICBubDgwMjExX2ZhbS5hdHRyYnVmLCBubDgwMjExX2ZhbS5tYXhhdHRyLAorCQkJCSAgbmw4MDIxMV9wb2xpY3kpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKworCQlpZiAoIW5sODAyMTFfZmFtLmF0dHJidWZbTkw4MDIxMV9BVFRSX0lGSU5ERVhdKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJaWZpZHggPSBubGFfZ2V0X3UzMihubDgwMjExX2ZhbS5hdHRyYnVmW05MODAyMTFfQVRUUl9JRklOREVYXSk7CisJCWlmICghaWZpZHgpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJY2ItPmFyZ3NbMF0gPSBpZmlkeDsKKwl9CisKKwluZXRkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KCZpbml0X25ldCwgaWZpZHgpOworCWlmICghbmV0ZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWRldiA9IGNmZzgwMjExX2dldF9kZXZfZnJvbV9pZmluZGV4KGlmaWR4KTsKKwlpZiAoSVNfRVJSKGRldikpIHsKKwkJZXJyID0gUFRSX0VSUihkZXYpOworCQlnb3RvIG91dF9wdXRfbmV0ZGV2OworCX0KKworCXNwaW5fbG9ja19iaCgmZGV2LT5ic3NfbG9jayk7CisJY2ZnODAyMTFfYnNzX2V4cGlyZShkZXYpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShzY2FuLCAmZGV2LT5ic3NfbGlzdCwgbGlzdCkgeworCQlpZiAoKytpZHggPD0gc3RhcnQpCisJCQljb250aW51ZTsKKwkJaWYgKG5sODAyMTFfc2VuZF9ic3Moc2tiLAorCQkJCU5FVExJTktfQ0IoY2ItPnNrYikucGlkLAorCQkJCWNiLT5ubGgtPm5sbXNnX3NlcSwgTkxNX0ZfTVVMVEksCisJCQkJZGV2LCBuZXRkZXYsICZzY2FuLT5wdWIpIDwgMCkgeworCQkJaWR4LS07CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworIG91dDoKKwlzcGluX3VubG9ja19iaCgmZGV2LT5ic3NfbG9jayk7CisKKwljYi0+YXJnc1sxXSA9IGlkeDsKKwllcnIgPSBza2ItPmxlbjsKKwljZmc4MDIxMV9wdXRfZGV2KGRldik7Cisgb3V0X3B1dF9uZXRkZXY6CisJZGV2X3B1dChuZXRkZXYpOworCisJcmV0dXJuIGVycjsKK30KKwogc3RhdGljIHN0cnVjdCBnZW5sX29wcyBubDgwMjExX29wc1tdID0gewogCXsKIAkJLmNtZCA9IE5MODAyMTFfQ01EX0dFVF9XSVBIWSwKQEAgLTIyMzEsNyArMjY0NCw2IEBACiAJCS5kb2l0ID0gbmw4MDIxMV9nZXRfc3RhdGlvbiwKIAkJLmR1bXBpdCA9IG5sODAyMTFfZHVtcF9zdGF0aW9uLAogCQkucG9saWN5ID0gbmw4MDIxMV9wb2xpY3ksCi0JCS5mbGFncyA9IEdFTkxfQURNSU5fUEVSTSwKIAl9LAogCXsKIAkJLmNtZCA9IE5MODAyMTFfQ01EX1NFVF9TVEFUSU9OLApAQCAtMjI4Myw2ICsyNjk1LDEyIEBACiAJCS5mbGFncyA9IEdFTkxfQURNSU5fUEVSTSwKIAl9LAogCXsKKwkJLmNtZCA9IE5MODAyMTFfQ01EX0dFVF9SRUcsCisJCS5kb2l0ID0gbmw4MDIxMV9nZXRfcmVnLAorCQkucG9saWN5ID0gbmw4MDIxMV9wb2xpY3ksCisJCS8qIGNhbiBiZSByZXRyaWV2ZWQgYnkgdW5wcml2aWxlZ2VkIHVzZXJzICovCisJfSwKKwl7CiAJCS5jbWQgPSBOTDgwMjExX0NNRF9TRVRfUkVHLAogCQkuZG9pdCA9IG5sODAyMTFfc2V0X3JlZywKIAkJLnBvbGljeSA9IG5sODAyMTFfcG9saWN5LApAQCAtMjMwNiwxMiArMjcyNCwzNSBAQAogCQkucG9saWN5ID0gbmw4MDIxMV9wb2xpY3ksCiAJCS5mbGFncyA9IEdFTkxfQURNSU5fUEVSTSwKIAl9LAorCXsKKwkJLmNtZCA9IE5MODAyMTFfQ01EX1NFVF9NR01UX0VYVFJBX0lFLAorCQkuZG9pdCA9IG5sODAyMTFfc2V0X21nbXRfZXh0cmFfaWUsCisJCS5wb2xpY3kgPSBubDgwMjExX3BvbGljeSwKKwkJLmZsYWdzID0gR0VOTF9BRE1JTl9QRVJNLAorCX0sCisJeworCQkuY21kID0gTkw4MDIxMV9DTURfVFJJR0dFUl9TQ0FOLAorCQkuZG9pdCA9IG5sODAyMTFfdHJpZ2dlcl9zY2FuLAorCQkucG9saWN5ID0gbmw4MDIxMV9wb2xpY3ksCisJCS5mbGFncyA9IEdFTkxfQURNSU5fUEVSTSwKKwl9LAorCXsKKwkJLmNtZCA9IE5MODAyMTFfQ01EX0dFVF9TQ0FOLAorCQkucG9saWN5ID0gbmw4MDIxMV9wb2xpY3ksCisJCS5kdW1waXQgPSBubDgwMjExX2R1bXBfc2NhbiwKKwl9LAogfTsKIAogLyogbXVsdGljYXN0IGdyb3VwcyAqLwogc3RhdGljIHN0cnVjdCBnZW5sX211bHRpY2FzdF9ncm91cCBubDgwMjExX2NvbmZpZ19tY2dycCA9IHsKIAkubmFtZSA9ICJjb25maWciLAogfTsKK3N0YXRpYyBzdHJ1Y3QgZ2VubF9tdWx0aWNhc3RfZ3JvdXAgbmw4MDIxMV9zY2FuX21jZ3JwID0geworCS5uYW1lID0gInNjYW4iLAorfTsKK3N0YXRpYyBzdHJ1Y3QgZ2VubF9tdWx0aWNhc3RfZ3JvdXAgbmw4MDIxMV9yZWd1bGF0b3J5X21jZ3JwID0geworCS5uYW1lID0gInJlZ3VsYXRvcnkiLAorfTsKIAogLyogbm90aWZpY2F0aW9uIGZ1bmN0aW9ucyAqLwogCkBAIC0yMzMxLDYgKzI3NzIsMTIxIEBACiAJZ2VubG1zZ19tdWx0aWNhc3QobXNnLCAwLCBubDgwMjExX2NvbmZpZ19tY2dycC5pZCwgR0ZQX0tFUk5FTCk7CiB9CiAKK3N0YXRpYyBpbnQgbmw4MDIxMV9zZW5kX3NjYW5fZG9uZW1zZyhzdHJ1Y3Qgc2tfYnVmZiAqbXNnLAorCQkJCSAgICBzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkJICAgIHUzMiBwaWQsIHUzMiBzZXEsIGludCBmbGFncywKKwkJCQkgICAgdTMyIGNtZCkKK3sKKwl2b2lkICpoZHI7CisKKwloZHIgPSBubDgwMjExaGRyX3B1dChtc2csIHBpZCwgc2VxLCBmbGFncywgY21kKTsKKwlpZiAoIWhkcikKKwkJcmV0dXJuIC0xOworCisJTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX0FUVFJfV0lQSFksIHJkZXYtPndpcGh5X2lkeCk7CisJTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX0FUVFJfSUZJTkRFWCwgbmV0ZGV2LT5pZmluZGV4KTsKKworCS8qIFhYWDogd2Ugc2hvdWxkIHByb2JhYmx5IGJvdW5jZSBiYWNrIHRoZSByZXF1ZXN0PyAqLworCisJcmV0dXJuIGdlbmxtc2dfZW5kKG1zZywgaGRyKTsKKworIG5sYV9wdXRfZmFpbHVyZToKKwlnZW5sbXNnX2NhbmNlbChtc2csIGhkcik7CisJcmV0dXJuIC1FTVNHU0laRTsKK30KKwordm9pZCBubDgwMjExX3NlbmRfc2Nhbl9kb25lKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBza19idWZmICptc2c7CisKKwltc2cgPSBubG1zZ19uZXcoTkxNU0dfR09PRFNJWkUsIEdGUF9LRVJORUwpOworCWlmICghbXNnKQorCQlyZXR1cm47CisKKwlpZiAobmw4MDIxMV9zZW5kX3NjYW5fZG9uZW1zZyhtc2csIHJkZXYsIG5ldGRldiwgMCwgMCwgMCwKKwkJCQkgICAgICBOTDgwMjExX0NNRF9ORVdfU0NBTl9SRVNVTFRTKSA8IDApIHsKKwkJbmxtc2dfZnJlZShtc2cpOworCQlyZXR1cm47CisJfQorCisJZ2VubG1zZ19tdWx0aWNhc3QobXNnLCAwLCBubDgwMjExX3NjYW5fbWNncnAuaWQsIEdGUF9LRVJORUwpOworfQorCit2b2lkIG5sODAyMTFfc2VuZF9zY2FuX2Fib3J0ZWQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IHNrX2J1ZmYgKm1zZzsKKworCW1zZyA9IG5sbXNnX25ldyhOTE1TR19HT09EU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtc2cpCisJCXJldHVybjsKKworCWlmIChubDgwMjExX3NlbmRfc2Nhbl9kb25lbXNnKG1zZywgcmRldiwgbmV0ZGV2LCAwLCAwLCAwLAorCQkJCSAgICAgIE5MODAyMTFfQ01EX1NDQU5fQUJPUlRFRCkgPCAwKSB7CisJCW5sbXNnX2ZyZWUobXNnKTsKKwkJcmV0dXJuOworCX0KKworCWdlbmxtc2dfbXVsdGljYXN0KG1zZywgMCwgbmw4MDIxMV9zY2FuX21jZ3JwLmlkLCBHRlBfS0VSTkVMKTsKK30KKworLyoKKyAqIFRoaXMgY2FuIGhhcHBlbiBvbiBnbG9iYWwgcmVndWxhdG9yeSBjaGFuZ2VzIG9yIGRldmljZSBzcGVjaWZpYyBzZXR0aW5ncworICogYmFzZWQgb24gY3VzdG9tIHdvcmxkIHJlZ3VsYXRvcnkgZG9tYWlucy4KKyAqLwordm9pZCBubDgwMjExX3NlbmRfcmVnX2NoYW5nZV9ldmVudChzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0ICpyZXF1ZXN0KQoreworCXN0cnVjdCBza19idWZmICptc2c7CisJdm9pZCAqaGRyOworCisJbXNnID0gbmxtc2dfbmV3KE5MTVNHX0dPT0RTSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1zZykKKwkJcmV0dXJuOworCisJaGRyID0gbmw4MDIxMWhkcl9wdXQobXNnLCAwLCAwLCAwLCBOTDgwMjExX0NNRF9SRUdfQ0hBTkdFKTsKKwlpZiAoIWhkcikgeworCQlubG1zZ19mcmVlKG1zZyk7CisJCXJldHVybjsKKwl9CisKKwkvKiBVc2Vyc3BhY2UgY2FuIGFsd2F5cyBjb3VudCB0aGlzIG9uZSBhbHdheXMgYmVpbmcgc2V0ICovCisJTkxBX1BVVF9VOChtc2csIE5MODAyMTFfQVRUUl9SRUdfSU5JVElBVE9SLCByZXF1ZXN0LT5pbml0aWF0b3IpOworCisJaWYgKHJlcXVlc3QtPmFscGhhMlswXSA9PSAnMCcgJiYgcmVxdWVzdC0+YWxwaGEyWzFdID09ICcwJykKKwkJTkxBX1BVVF9VOChtc2csIE5MODAyMTFfQVRUUl9SRUdfVFlQRSwKKwkJCSAgIE5MODAyMTFfUkVHRE9NX1RZUEVfV09STEQpOworCWVsc2UgaWYgKHJlcXVlc3QtPmFscGhhMlswXSA9PSAnOScgJiYgcmVxdWVzdC0+YWxwaGEyWzFdID09ICc5JykKKwkJTkxBX1BVVF9VOChtc2csIE5MODAyMTFfQVRUUl9SRUdfVFlQRSwKKwkJCSAgIE5MODAyMTFfUkVHRE9NX1RZUEVfQ1VTVE9NX1dPUkxEKTsKKwllbHNlIGlmICgocmVxdWVzdC0+YWxwaGEyWzBdID09ICc5JyAmJiByZXF1ZXN0LT5hbHBoYTJbMV0gPT0gJzgnKSB8fAorCQkgcmVxdWVzdC0+aW50ZXJzZWN0KQorCQlOTEFfUFVUX1U4KG1zZywgTkw4MDIxMV9BVFRSX1JFR19UWVBFLAorCQkJICAgTkw4MDIxMV9SRUdET01fVFlQRV9JTlRFUlNFQ1RJT04pOworCWVsc2UgeworCQlOTEFfUFVUX1U4KG1zZywgTkw4MDIxMV9BVFRSX1JFR19UWVBFLAorCQkJICAgTkw4MDIxMV9SRUdET01fVFlQRV9DT1VOVFJZKTsKKwkJTkxBX1BVVF9TVFJJTkcobXNnLCBOTDgwMjExX0FUVFJfUkVHX0FMUEhBMiwgcmVxdWVzdC0+YWxwaGEyKTsKKwl9CisKKwlpZiAod2lwaHlfaWR4X3ZhbGlkKHJlcXVlc3QtPndpcGh5X2lkeCkpCisJCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9BVFRSX1dJUEhZLCByZXF1ZXN0LT53aXBoeV9pZHgpOworCisJaWYgKGdlbmxtc2dfZW5kKG1zZywgaGRyKSA8IDApIHsKKwkJbmxtc2dfZnJlZShtc2cpOworCQlyZXR1cm47CisJfQorCisJZ2VubG1zZ19tdWx0aWNhc3QobXNnLCAwLCBubDgwMjExX3JlZ3VsYXRvcnlfbWNncnAuaWQsIEdGUF9LRVJORUwpOworCisJcmV0dXJuOworCitubGFfcHV0X2ZhaWx1cmU6CisJZ2VubG1zZ19jYW5jZWwobXNnLCBoZHIpOworCW5sbXNnX2ZyZWUobXNnKTsKK30KKwogLyogaW5pdGlhbGlzYXRpb24vZXhpdCBmdW5jdGlvbnMgKi8KIAogaW50IG5sODAyMTFfaW5pdCh2b2lkKQpAQCAtMjM1MSw2ICsyOTA3LDE0IEBACiAJaWYgKGVycikKIAkJZ290byBlcnJfb3V0OwogCisJZXJyID0gZ2VubF9yZWdpc3Rlcl9tY19ncm91cCgmbmw4MDIxMV9mYW0sICZubDgwMjExX3NjYW5fbWNncnApOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dDsKKworCWVyciA9IGdlbmxfcmVnaXN0ZXJfbWNfZ3JvdXAoJm5sODAyMTFfZmFtLCAmbmw4MDIxMV9yZWd1bGF0b3J5X21jZ3JwKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXQ7CisKIAlyZXR1cm4gMDsKICBlcnJfb3V0OgogCWdlbmxfdW5yZWdpc3Rlcl9mYW1pbHkoJm5sODAyMTFfZmFtKTsKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9ubDgwMjExLmggYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5oCmluZGV4IGYzZWE1YzAuLmU2NWEzYzMgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9ubDgwMjExLmgKKysrIGIvbmV0L3dpcmVsZXNzL25sODAyMTEuaApAQCAtNyw2ICs3LDExIEBACiBleHRlcm4gaW50IG5sODAyMTFfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIG5sODAyMTFfZXhpdCh2b2lkKTsKIGV4dGVybiB2b2lkIG5sODAyMTFfbm90aWZ5X2Rldl9yZW5hbWUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2KTsKK2V4dGVybiB2b2lkIG5sODAyMTFfc2VuZF9zY2FuX2RvbmUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOworZXh0ZXJuIHZvaWQgbmw4MDIxMV9zZW5kX3NjYW5fYWJvcnRlZChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQkJICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CitleHRlcm4gdm9pZCBubDgwMjExX3NlbmRfcmVnX2NoYW5nZV9ldmVudChzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0ICpyZXF1ZXN0KTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIGludCBubDgwMjExX2luaXQodm9pZCkKIHsKQEAgLTE5LDYgKzI0LDE4IEBACiAJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2KQogewogfQorc3RhdGljIGlubGluZSB2b2lkCitubDgwMjExX3NlbmRfc2Nhbl9kb25lKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7fQorc3RhdGljIGlubGluZSB2b2lkIG5sODAyMTFfc2VuZF9zY2FuX2Fib3J0ZWQoCisJCQkJCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJCQkJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3t9CitzdGF0aWMgaW5saW5lIHZvaWQKK25sODAyMTFfc2VuZF9yZWdfY2hhbmdlX2V2ZW50KHN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKnJlcXVlc3QpCit7Cit9CiAjZW5kaWYgLyogQ09ORklHX05MODAyMTEgKi8KIAogI2VuZGlmIC8qIF9fTkVUX1dJUkVMRVNTX05MODAyMTFfSCAqLwpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3JlZy5jIGIvbmV0L3dpcmVsZXNzL3JlZy5jCmluZGV4IGJkMGExNmMuLmViOGI4ZWQgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9yZWcuYworKysgYi9uZXQvd2lyZWxlc3MvcmVnLmMKQEAgLTQxLDM4ICs0MSw3IEBACiAjaW5jbHVkZSA8bmV0L2NmZzgwMjExLmg+CiAjaW5jbHVkZSAiY29yZS5oIgogI2luY2x1ZGUgInJlZy5oIgotCi0vKioKLSAqIHN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgLSByZWNlaXB0IG9mIGxhc3QgcmVndWxhdG9yeSByZXF1ZXN0Ci0gKgotICogQHdpcGh5OiB0aGlzIGlzIHNldCBpZiB0aGlzIHJlcXVlc3QncyBpbml0aWF0b3IgaXMKLSAqIAklUkVHRE9NX1NFVF9CWV9DT1VOVFJZX0lFIG9yICVSRUdET01fU0VUX0JZX0RSSVZFUi4gVGhpcwotICogCWNhbiBiZSB1c2VkIGJ5IHRoZSB3aXJlbGVzcyBjb3JlIHRvIGRlYWwgd2l0aCBjb25mbGljdHMKLSAqIAlhbmQgcG90ZW50aWFsbHkgaW5mb3JtIHVzZXJzIG9mIHdoaWNoIGRldmljZXMgc3BlY2lmaWNhbGx5Ci0gKiAJY2FzZWQgdGhlIGNvbmZsaWN0cy4KLSAqIEBpbml0aWF0b3I6IGluZGljYXRlcyB3aG8gc2VudCB0aGlzIHJlcXVlc3QsIGNvdWxkIGJlIGFueSBvZgotICogCW9mIHRob3NlIHNldCBpbiByZWdfc2V0X2J5LCAlUkVHRE9NX1NFVF9CWV8qCi0gKiBAYWxwaGEyOiB0aGUgSVNPIC8gSUVDIDMxNjYgYWxwaGEyIGNvdW50cnkgY29kZSBvZiB0aGUgcmVxdWVzdGVkCi0gKiAJcmVndWxhdG9yeSBkb21haW4uIFdlIGhhdmUgYSBmZXcgc3BlY2lhbCBjb2RlczoKLSAqIAkwMCAtIFdvcmxkIHJlZ3VsYXRvcnkgZG9tYWluCi0gKiAJOTkgLSBidWlsdCBieSBkcml2ZXIgYnV0IGEgc3BlY2lmaWMgYWxwaGEyIGNhbm5vdCBiZSBkZXRlcm1pbmVkCi0gKiAJOTggLSByZXN1bHQgb2YgYW4gaW50ZXJzZWN0aW9uIGJldHdlZW4gdHdvIHJlZ3VsYXRvcnkgZG9tYWlucwotICogQGludGVyc2VjdDogaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHdpcmVsZXNzIGNvcmUgc2hvdWxkIGludGVyc2VjdAotICogCXRoZSByZXF1ZXN0ZWQgcmVndWxhdG9yeSBkb21haW4gd2l0aCB0aGUgcHJlc2VudGx5IHNldCByZWd1bGF0b3J5Ci0gKiAJZG9tYWluLgotICogQGNvdW50cnlfaWVfY2hlY2tzdW06IGNoZWNrc3VtIG9mIHRoZSBsYXN0IHByb2Nlc3NlZCBhbmQgYWNjZXB0ZWQKLSAqIAljb3VudHJ5IElFCi0gKiBAY291bnRyeV9pZV9lbnY6IGxldHMgdXMga25vdyBpZiB0aGUgQVAgaXMgdGVsbGluZyB1cyB3ZSBhcmUgb3V0ZG9vciwKLSAqIAlpbmRvb3IsIG9yIGlmIGl0IGRvZXNuJ3QgbWF0dGVyCi0gKi8KLXN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgewotCXN0cnVjdCB3aXBoeSAqd2lwaHk7Ci0JZW51bSByZWdfc2V0X2J5IGluaXRpYXRvcjsKLQljaGFyIGFscGhhMlsyXTsKLQlib29sIGludGVyc2VjdDsKLQl1MzIgY291bnRyeV9pZV9jaGVja3N1bTsKLQllbnVtIGVudmlyb25tZW50X2NhcCBjb3VudHJ5X2llX2VudjsKLX07CisjaW5jbHVkZSAibmw4MDIxMS5oIgogCiAvKiBSZWNlaXB0IG9mIGluZm9ybWF0aW9uIGZyb20gbGFzdCByZWd1bGF0b3J5IHJlcXVlc3QgKi8KIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0ICpsYXN0X3JlcXVlc3Q7CkBAIC04NiwyMiArNTUsNjMgQEAKIAlNSFpfVE9fS0haKDIwKSwKIH07CiAKLS8qIENlbnRyYWwgd2lyZWxlc3MgY29yZSByZWd1bGF0b3J5IGRvbWFpbnMsIHdlIG9ubHkgbmVlZCB0d28sCisvKgorICogQ2VudHJhbCB3aXJlbGVzcyBjb3JlIHJlZ3VsYXRvcnkgZG9tYWlucywgd2Ugb25seSBuZWVkIHR3bywKICAqIHRoZSBjdXJyZW50IG9uZSBhbmQgYSB3b3JsZCByZWd1bGF0b3J5IGRvbWFpbiBpbiBjYXNlIHdlIGhhdmUgbm8KLSAqIGluZm9ybWF0aW9uIHRvIGdpdmUgdXMgYW4gYWxwaGEyICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKmNmZzgwMjExX3JlZ2RvbWFpbjsKKyAqIGluZm9ybWF0aW9uIHRvIGdpdmUgdXMgYW4gYWxwaGEyCisgKi8KK2NvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpjZmc4MDIxMV9yZWdkb21haW47CiAKLS8qIFdlIHVzZSB0aGlzIGFzIGEgcGxhY2UgZm9yIHRoZSByZCBzdHJ1Y3R1cmUgYnVpbHQgZnJvbSB0aGUKKy8qCisgKiBXZSB1c2UgdGhpcyBhcyBhIHBsYWNlIGZvciB0aGUgcmQgc3RydWN0dXJlIGJ1aWx0IGZyb20gdGhlCiAgKiBsYXN0IHBhcnNlZCBjb3VudHJ5IElFIHRvIHJlc3QgdW50aWwgQ1JEQSBnZXRzIGJhY2sgdG8gdXMgd2l0aAotICogd2hhdCBpdCB0aGlua3Mgc2hvdWxkIGFwcGx5IGZvciB0aGUgc2FtZSBjb3VudHJ5ICovCisgKiB3aGF0IGl0IHRoaW5rcyBzaG91bGQgYXBwbHkgZm9yIHRoZSBzYW1lIGNvdW50cnkKKyAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpjb3VudHJ5X2llX3JlZ2RvbWFpbjsKIAorLyogVXNlZCB0byBxdWV1ZSB1cCByZWd1bGF0b3J5IGhpbnRzICovCitzdGF0aWMgTElTVF9IRUFEKHJlZ19yZXF1ZXN0c19saXN0KTsKK3N0YXRpYyBzcGlubG9ja190IHJlZ19yZXF1ZXN0c19sb2NrOworCisvKiBVc2VkIHRvIHF1ZXVlIHVwIGJlYWNvbiBoaW50cyBmb3IgcmV2aWV3ICovCitzdGF0aWMgTElTVF9IRUFEKHJlZ19wZW5kaW5nX2JlYWNvbnMpOworc3RhdGljIHNwaW5sb2NrX3QgcmVnX3BlbmRpbmdfYmVhY29uc19sb2NrOworCisvKiBVc2VkIHRvIGtlZXAgdHJhY2sgb2YgcHJvY2Vzc2VkIGJlYWNvbiBoaW50cyAqLworc3RhdGljIExJU1RfSEVBRChyZWdfYmVhY29uX2xpc3QpOworCitzdHJ1Y3QgcmVnX2JlYWNvbiB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCBjaGFuOworfTsKKwogLyogV2Uga2VlcCBhIHN0YXRpYyB3b3JsZCByZWd1bGF0b3J5IGRvbWFpbiBpbiBjYXNlIG9mIHRoZSBhYnNlbmNlIG9mIENSREEgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiB3b3JsZF9yZWdkb20gPSB7Ci0JLm5fcmVnX3J1bGVzID0gMSwKKwkubl9yZWdfcnVsZXMgPSA1LAogCS5hbHBoYTIgPSAgIjAwIiwKIAkucmVnX3J1bGVzID0gewotCQlSRUdfUlVMRSgyNDEyLTEwLCAyNDYyKzEwLCA0MCwgNiwgMjAsCisJCS8qIElFRUUgODAyLjExYi9nLCBjaGFubmVscyAxLi4xMSAqLworCQlSRUdfUlVMRSgyNDEyLTEwLCAyNDYyKzEwLCA0MCwgNiwgMjAsIDApLAorCQkvKiBJRUVFIDgwMi4xMWIvZywgY2hhbm5lbHMgMTIuLjEzLiBObyBIVDQwCisJCSAqIGNoYW5uZWwgZml0cyBoZXJlLiAqLworCQlSRUdfUlVMRSgyNDY3LTEwLCAyNDcyKzEwLCAyMCwgNiwgMjAsCisJCQlOTDgwMjExX1JSRl9QQVNTSVZFX1NDQU4gfAorCQkJTkw4MDIxMV9SUkZfTk9fSUJTUyksCisJCS8qIElFRUUgODAyLjExIGNoYW5uZWwgMTQgLSBPbmx5IEpQIGVuYWJsZXMKKwkJICogdGhpcyBhbmQgZm9yIDgwMi4xMWIgb25seSAqLworCQlSRUdfUlVMRSgyNDg0LTEwLCAyNDg0KzEwLCAyMCwgNiwgMjAsCisJCQlOTDgwMjExX1JSRl9QQVNTSVZFX1NDQU4gfAorCQkJTkw4MDIxMV9SUkZfTk9fSUJTUyB8CisJCQlOTDgwMjExX1JSRl9OT19PRkRNKSwKKwkJLyogSUVFRSA4MDIuMTFhLCBjaGFubmVsIDM2Li40OCAqLworCQlSRUdfUlVMRSg1MTgwLTEwLCA1MjQwKzEwLCA0MCwgNiwgMjAsCisgICAgICAgICAgICAgICAgICAgICAgICBOTDgwMjExX1JSRl9QQVNTSVZFX1NDQU4gfAorICAgICAgICAgICAgICAgICAgICAgICAgTkw4MDIxMV9SUkZfTk9fSUJTUyksCisKKwkJLyogTkI6IDUyNjAgTUh6IC0gNTcwMCBNSHogcmVxdWllcyBERlMgKi8KKworCQkvKiBJRUVFIDgwMi4xMWEsIGNoYW5uZWwgMTQ5Li4xNjUgKi8KKwkJUkVHX1JVTEUoNTc0NS0xMCwgNTgyNSsxMCwgNDAsIDYsIDIwLAogCQkJTkw4MDIxMV9SUkZfUEFTU0lWRV9TQ0FOIHwKIAkJCU5MODAyMTFfUlJGX05PX0lCU1MpLAogCX0KQEAgLTExNSw5ICsxMjUsMTEgQEAKIG1vZHVsZV9wYXJhbShpZWVlODAyMTFfcmVnZG9tLCBjaGFycCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGllZWU4MDIxMV9yZWdkb20sICJJRUVFIDgwMi4xMSByZWd1bGF0b3J5IGRvbWFpbiBjb2RlIik7CiAKLS8qIFdlIGFzc3VtZSA0MCBNSHogYmFuZHdpZHRoIGZvciB0aGUgb2xkIHJlZ3VsYXRvcnkgd29yay4KKy8qCisgKiBXZSBhc3N1bWUgNDAgTUh6IGJhbmR3aWR0aCBmb3IgdGhlIG9sZCByZWd1bGF0b3J5IHdvcmsuCiAgKiBXZSBtYWtlIGVtcGhhc2lzIHdlIGFyZSB1c2luZyB0aGUgZXhhY3Qgc2FtZSBmcmVxdWVuY2llcwotICogYXMgYmVmb3JlICovCisgKiBhcyBiZWZvcmUKKyAqLwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gdXNfcmVnZG9tID0gewogCS5uX3JlZ19ydWxlcyA9IDYsCkBAIC0xNTYsOCArMTY4LDEwIEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiBldV9yZWdkb20gPSB7CiAJLm5fcmVnX3J1bGVzID0gNiwKLQkvKiBUaGlzIGFscGhhMiBpcyBib2d1cywgd2UgbGVhdmUgaXQgaGVyZSBqdXN0IGZvciBzdHVwaWQKLQkgKiBiYWNrd2FyZCBjb21wYXRpYmlsaXR5ICovCisJLyoKKwkgKiBUaGlzIGFscGhhMiBpcyBib2d1cywgd2UgbGVhdmUgaXQgaGVyZSBqdXN0IGZvciBzdHVwaWQKKwkgKiBiYWNrd2FyZCBjb21wYXRpYmlsaXR5CisJICovCiAJLmFscGhhMiA9ICAiRVUiLAogCS5yZWdfcnVsZXMgPSB7CiAJCS8qIElFRUUgODAyLjExYi9nLCBjaGFubmVscyAxLi4xMyAqLwpAQCAtMjI2LDggKzI0MCwxMCBAQAogCWNmZzgwMjExX3JlZ2RvbWFpbiA9IE5VTEw7CiB9CiAKLS8qIER5bmFtaWMgd29ybGQgcmVndWxhdG9yeSBkb21haW4gcmVxdWVzdGVkIGJ5IHRoZSB3aXJlbGVzcwotICogY29yZSB1cG9uIGluaXRpYWxpemF0aW9uICovCisvKgorICogRHluYW1pYyB3b3JsZCByZWd1bGF0b3J5IGRvbWFpbiByZXF1ZXN0ZWQgYnkgdGhlIHdpcmVsZXNzCisgKiBjb3JlIHVwb24gaW5pdGlhbGl6YXRpb24KKyAqLwogc3RhdGljIHZvaWQgdXBkYXRlX3dvcmxkX3JlZ2RvbWFpbihjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqcmQpCiB7CiAJQlVHX09OKCFsYXN0X3JlcXVlc3QpOwpAQCAtMjY4LDggKzI4NCwxMCBAQAogewogCWlmICghYWxwaGEyKQogCQlyZXR1cm4gZmFsc2U7Ci0JLyogU3BlY2lhbCBjYXNlIHdoZXJlIHJlZ3VsYXRvcnkgZG9tYWluIHdhcyBidWlsdCBieSBkcml2ZXIKLQkgKiBidXQgYSBzcGVjaWZpYyBhbHBoYTIgY2Fubm90IGJlIGRldGVybWluZWQgKi8KKwkvKgorCSAqIFNwZWNpYWwgY2FzZSB3aGVyZSByZWd1bGF0b3J5IGRvbWFpbiB3YXMgYnVpbHQgYnkgZHJpdmVyCisJICogYnV0IGEgc3BlY2lmaWMgYWxwaGEyIGNhbm5vdCBiZSBkZXRlcm1pbmVkCisJICovCiAJaWYgKGFscGhhMlswXSA9PSAnOScgJiYgYWxwaGEyWzFdID09ICc5JykKIAkJcmV0dXJuIHRydWU7CiAJcmV0dXJuIGZhbHNlOwpAQCAtMjc5LDkgKzI5NywxMSBAQAogewogCWlmICghYWxwaGEyKQogCQlyZXR1cm4gZmFsc2U7Ci0JLyogU3BlY2lhbCBjYXNlIHdoZXJlIHJlZ3VsYXRvcnkgZG9tYWluIGlzIHRoZQorCS8qCisJICogU3BlY2lhbCBjYXNlIHdoZXJlIHJlZ3VsYXRvcnkgZG9tYWluIGlzIHRoZQogCSAqIHJlc3VsdCBvZiBhbiBpbnRlcnNlY3Rpb24gYmV0d2VlbiB0d28gcmVndWxhdG9yeSBkb21haW4KLQkgKiBzdHJ1Y3R1cmVzICovCisJICogc3RydWN0dXJlcworCSAqLwogCWlmIChhbHBoYTJbMF0gPT0gJzknICYmIGFscGhhMlsxXSA9PSAnOCcpCiAJCXJldHVybiB0cnVlOwogCXJldHVybiBmYWxzZTsKQEAgLTMwNiw4ICszMjYsMTAgQEAKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBib29sIHJlZ2RvbV9jaGFuZ2VkKGNvbnN0IGNoYXIgKmFscGhhMikKK3N0YXRpYyBib29sIHJlZ2RvbV9jaGFuZ2VzKGNvbnN0IGNoYXIgKmFscGhhMikKIHsKKwlhc3NlcnRfY2ZnODAyMTFfbG9jaygpOworCiAJaWYgKCFjZmc4MDIxMV9yZWdkb21haW4pCiAJCXJldHVybiB0cnVlOwogCWlmIChhbHBoYTJfZXF1YWwoY2ZnODAyMTFfcmVnZG9tYWluLT5hbHBoYTIsIGFscGhhMikpCkBAIC0zMzQsOCArMzU2LDEwIEBACiAJcmV0dXJuIGZhbHNlOwogfQogCi0vKiBUaGlzIGxldHMgdXMga2VlcCByZWd1bGF0b3J5IGNvZGUgd2hpY2ggaXMgdXBkYXRlZCBvbiBhIHJlZ3VsYXRvcnkKLSAqIGJhc2lzIGluIHVzZXJzcGFjZS4gKi8KKy8qCisgKiBUaGlzIGxldHMgdXMga2VlcCByZWd1bGF0b3J5IGNvZGUgd2hpY2ggaXMgdXBkYXRlZCBvbiBhIHJlZ3VsYXRvcnkKKyAqIGJhc2lzIGluIHVzZXJzcGFjZS4KKyAqLwogc3RhdGljIGludCBjYWxsX2NyZGEoY29uc3QgY2hhciAqYWxwaGEyKQogewogCWNoYXIgY291bnRyeV9lbnZbOSArIDJdID0gIkNPVU5UUlk9IjsKQEAgLTQ0NywxMCArNDcxLDEyIEBACiAjdW5kZWYgT05FX0dIWl9JTl9LSFoKIH0KIAotLyogQ29udmVydHMgYSBjb3VudHJ5IElFIHRvIGEgcmVndWxhdG9yeSBkb21haW4uIEEgcmVndWxhdG9yeSBkb21haW4KKy8qCisgKiBDb252ZXJ0cyBhIGNvdW50cnkgSUUgdG8gYSByZWd1bGF0b3J5IGRvbWFpbi4gQSByZWd1bGF0b3J5IGRvbWFpbgogICogc3RydWN0dXJlIGhhcyBhIGxvdCBvZiBpbmZvcm1hdGlvbiB3aGljaCB0aGUgSUUgZG9lc24ndCB5ZXQgaGF2ZSwKICAqIHNvIGZvciB0aGUgb3RoZXIgdmFsdWVzIHdlIHVzZSB1cHBlciBtYXggdmFsdWVzIGFzIHdlIHdpbGwgaW50ZXJzZWN0Ci0gKiB3aXRoIG91ciB1c2Vyc3BhY2UgcmVndWxhdG9yeSBhZ2VudCB0byBnZXQgbG93ZXIgYm91bmRzLiAqLworICogd2l0aCBvdXIgdXNlcnNwYWNlIHJlZ3VsYXRvcnkgYWdlbnQgdG8gZ2V0IGxvd2VyIGJvdW5kcy4KKyAqLwogc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpjb3VudHJ5X2llXzJfcmQoCiAJCQkJdTggKmNvdW50cnlfaWUsCiAJCQkJdTggY291bnRyeV9pZV9sZW4sCkBAIC00OTUsOSArNTIxLDExIEBACiAKIAkqY2hlY2tzdW0gXj0gKChmbGFncyBeIGFscGhhMlswXSBeIGFscGhhMlsxXSkgPDwgOCk7CiAKLQkvKiBXZSBuZWVkIHRvIGJ1aWxkIGEgcmVnIHJ1bGUgZm9yIGVhY2ggdHJpcGxldCwgYnV0IGZpcnN0IHdlIG11c3QKKwkvKgorCSAqIFdlIG5lZWQgdG8gYnVpbGQgYSByZWcgcnVsZSBmb3IgZWFjaCB0cmlwbGV0LCBidXQgZmlyc3Qgd2UgbXVzdAogCSAqIGNhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIHJlZyBydWxlcyB3ZSB3aWxsIG5lZWQuIFdlIHdpbGwgbmVlZCBvbmUKLQkgKiBmb3IgZWFjaCBjaGFubmVsIHN1YmJhbmQgKi8KKwkgKiBmb3IgZWFjaCBjaGFubmVsIHN1YmJhbmQKKwkgKi8KIAl3aGlsZSAoY291bnRyeV9pZV9sZW4gPj0gMykgewogCQlpbnQgZW5kX2NoYW5uZWwgPSAwOwogCQlzdHJ1Y3QgaWVlZTgwMjExX2NvdW50cnlfaWVfdHJpcGxldCAqdHJpcGxldCA9CkBAIC01MzUsOSArNTYzLDExIEBACiAJCWlmIChjdXJfc3ViX21heF9jaGFubmVsIDwgY3VyX2NoYW5uZWwpCiAJCQlyZXR1cm4gTlVMTDsKIAotCQkvKiBEbyBub3QgYWxsb3cgb3ZlcmxhcHBpbmcgY2hhbm5lbHMuIEFsc28gY2hhbm5lbHMKKwkJLyoKKwkJICogRG8gbm90IGFsbG93IG92ZXJsYXBwaW5nIGNoYW5uZWxzLiBBbHNvIGNoYW5uZWxzCiAJCSAqIHBhc3NlZCBpbiBlYWNoIHN1YmJhbmQgbXVzdCBiZSBtb25vdG9uaWNhbGx5Ci0JCSAqIGluY3JlYXNpbmcgKi8KKwkJICogaW5jcmVhc2luZworCQkgKi8KIAkJaWYgKGxhc3Rfc3ViX21heF9jaGFubmVsKSB7CiAJCQlpZiAoY3VyX2NoYW5uZWwgPD0gbGFzdF9zdWJfbWF4X2NoYW5uZWwpCiAJCQkJcmV0dXJuIE5VTEw7CkBAIC01NDUsMTAgKzU3NSwxMiBAQAogCQkJCXJldHVybiBOVUxMOwogCQl9CiAKLQkJLyogV2hlbiBkb3QxMVJlZ3VsYXRvcnlDbGFzc2VzUmVxdWlyZWQgaXMgc3VwcG9ydGVkCisJCS8qCisJCSAqIFdoZW4gZG90MTFSZWd1bGF0b3J5Q2xhc3Nlc1JlcXVpcmVkIGlzIHN1cHBvcnRlZAogCQkgKiB3ZSBjYW4gdGhyb3cgZXh0IHRyaXBsZXRzIGFzIHBhcnQgb2YgdGhpcyBzb3VwLAogCQkgKiBmb3Igbm93IHdlIGRvbid0IGNhcmUgd2hlbiB0aG9zZSBjaGFuZ2UgYXMgd2UKLQkJICogZG9uJ3Qgc3VwcG9ydCB0aGVtICovCisJCSAqIGRvbid0IHN1cHBvcnQgdGhlbQorCQkgKi8KIAkJKmNoZWNrc3VtIF49ICgoY3VyX2NoYW5uZWwgXiBjdXJfc3ViX21heF9jaGFubmVsKSA8PCA4KSB8CiAJCSAgKChjdXJfc3ViX21heF9jaGFubmVsIF4gY3VyX3N1Yl9tYXhfY2hhbm5lbCkgPDwgMTYpIHwKIAkJICAoKHRyaXBsZXQtPmNoYW5zLm1heF9wb3dlciBeIGN1cl9zdWJfbWF4X2NoYW5uZWwpIDw8IDI0KTsKQEAgLTU1OSw4ICs1OTEsMTAgQEAKIAkJY291bnRyeV9pZV9sZW4gLT0gMzsKIAkJbnVtX3J1bGVzKys7CiAKLQkJLyogTm90ZTogdGhpcyBpcyBub3QgYSBJRUVFIHJlcXVpcmVtZW50IGJ1dAotCQkgKiBzaW1wbHkgYSBtZW1vcnkgcmVxdWlyZW1lbnQgKi8KKwkJLyoKKwkJICogTm90ZTogdGhpcyBpcyBub3QgYSBJRUVFIHJlcXVpcmVtZW50IGJ1dAorCQkgKiBzaW1wbHkgYSBtZW1vcnkgcmVxdWlyZW1lbnQKKwkJICovCiAJCWlmIChudW1fcnVsZXMgPiBOTDgwMjExX01BWF9TVVBQX1JFR19SVUxFUykKIAkJCXJldHVybiBOVUxMOwogCX0KQEAgLTU4OCw4ICs2MjIsMTAgQEAKIAkJc3RydWN0IGllZWU4MDIxMV9mcmVxX3JhbmdlICpmcmVxX3JhbmdlID0gTlVMTDsKIAkJc3RydWN0IGllZWU4MDIxMV9wb3dlcl9ydWxlICpwb3dlcl9ydWxlID0gTlVMTDsKIAotCQkvKiBNdXN0IHBhcnNlIGlmIGRvdDExUmVndWxhdG9yeUNsYXNzZXNSZXF1aXJlZCBpcyB0cnVlLAotCQkgKiB3ZSBkb24ndCBzdXBwb3J0IHRoaXMgeWV0ICovCisJCS8qCisJCSAqIE11c3QgcGFyc2UgaWYgZG90MTFSZWd1bGF0b3J5Q2xhc3Nlc1JlcXVpcmVkIGlzIHRydWUsCisJCSAqIHdlIGRvbid0IHN1cHBvcnQgdGhpcyB5ZXQKKwkJICovCiAJCWlmICh0cmlwbGV0LT5leHQucmVnX2V4dGVuc2lvbl9pZCA+PQogCQkJCUlFRUU4MDIxMV9DT1VOVFJZX0VYVEVOU0lPTl9JRCkgewogCQkJY291bnRyeV9pZSArPSAzOwpAQCAtNjExLDEwICs2NDcsMTIgQEAKIAkJCWVuZF9jaGFubmVsID0gIHRyaXBsZXQtPmNoYW5zLmZpcnN0X2NoYW5uZWwgKwogCQkJCSg0ICogKHRyaXBsZXQtPmNoYW5zLm51bV9jaGFubmVscyAtIDEpKTsKIAotCQkvKiBUaGUgKzEwIGlzIHNpbmNlIHRoZSByZWd1bGF0b3J5IGRvbWFpbiBleHBlY3RzCisJCS8qCisJCSAqIFRoZSArMTAgaXMgc2luY2UgdGhlIHJlZ3VsYXRvcnkgZG9tYWluIGV4cGVjdHMKIAkJICogdGhlIGFjdHVhbCBiYW5kIGVkZ2UsIG5vdCB0aGUgY2VudGVyIG9mIGZyZXEgZm9yCiAJCSAqIGl0cyBzdGFydCBhbmQgZW5kIGZyZXFzLCBhc3N1bWluZyAyMCBNSHogYmFuZHdpZHRoIG9uCi0JCSAqIHRoZSBjaGFubmVscyBwYXNzZWQgKi8KKwkJICogdGhlIGNoYW5uZWxzIHBhc3NlZAorCQkgKi8KIAkJZnJlcV9yYW5nZS0+c3RhcnRfZnJlcV9raHogPQogCQkJTUhaX1RPX0tIWihpZWVlODAyMTFfY2hhbm5lbF90b19mcmVxdWVuY3koCiAJCQkJdHJpcGxldC0+Y2hhbnMuZmlyc3RfY2hhbm5lbCkgLSAxMCk7CkBAIC02MjIsOSArNjYwLDExIEBACiAJCQlNSFpfVE9fS0haKGllZWU4MDIxMV9jaGFubmVsX3RvX2ZyZXF1ZW5jeSgKIAkJCQllbmRfY2hhbm5lbCkgKyAxMCk7CiAKLQkJLyogTGFyZ2UgYXJiaXRyYXJ5IHZhbHVlcywgd2UgaW50ZXJzZWN0IGxhdGVyICovCi0JCS8qIEluY3JlbWVudCB0aGlzIGlmIHdlIGV2ZXIgc3VwcG9ydCA+PSA0MCBNSHogY2hhbm5lbHMKLQkJICogaW4gSUVFRSA4MDIuMTEgKi8KKwkJLyoKKwkJICogVGhlc2UgYXJlIGxhcmdlIGFyYml0cmFyeSB2YWx1ZXMgd2UgdXNlIHRvIGludGVyc2VjdCBsYXRlci4KKwkJICogSW5jcmVtZW50IHRoaXMgaWYgd2UgZXZlciBzdXBwb3J0ID49IDQwIE1IeiBjaGFubmVscworCQkgKiBpbiBJRUVFIDgwMi4xMQorCQkgKi8KIAkJZnJlcV9yYW5nZS0+bWF4X2JhbmR3aWR0aF9raHogPSBNSFpfVE9fS0haKDQwKTsKIAkJcG93ZXJfcnVsZS0+bWF4X2FudGVubmFfZ2FpbiA9IERCSV9UT19NQkkoMTAwKTsKIAkJcG93ZXJfcnVsZS0+bWF4X2VpcnAgPSBEQk1fVE9fTUJNKDEwMCk7CkBAIC02NDAsOCArNjgwLDEwIEBACiB9CiAKIAotLyogSGVscGVyIGZvciByZWdkb21faW50ZXJzZWN0KCksIHRoaXMgZG9lcyB0aGUgcmVhbAotICogbWF0aGVtYXRpY2FsIGludGVyc2VjdGlvbiBmdW4gKi8KKy8qCisgKiBIZWxwZXIgZm9yIHJlZ2RvbV9pbnRlcnNlY3QoKSwgdGhpcyBkb2VzIHRoZSByZWFsCisgKiBtYXRoZW1hdGljYWwgaW50ZXJzZWN0aW9uIGZ1bgorICovCiBzdGF0aWMgaW50IHJlZ19ydWxlc19pbnRlcnNlY3QoCiAJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdfcnVsZSAqcnVsZTEsCiAJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdfcnVsZSAqcnVsZTIsCkBAIC03MTksMTEgKzc2MSwxMyBAQAogCWlmICghcmQxIHx8ICFyZDIpCiAJCXJldHVybiBOVUxMOwogCi0JLyogRmlyc3Qgd2UgZ2V0IGEgY291bnQgb2YgdGhlIHJ1bGVzIHdlJ2xsIG5lZWQsIHRoZW4gd2UgYWN0dWFsbHkKKwkvKgorCSAqIEZpcnN0IHdlIGdldCBhIGNvdW50IG9mIHRoZSBydWxlcyB3ZSdsbCBuZWVkLCB0aGVuIHdlIGFjdHVhbGx5CiAJICogYnVpbGQgdGhlbS4gVGhpcyBpcyB0byBzbyB3ZSBjYW4gbWFsbG9jKCkgYW5kIGZyZWUoKSBhCiAJICogcmVnZG9tYWluIG9uY2UuIFRoZSByZWFzb24gd2UgdXNlIHJlZ19ydWxlc19pbnRlcnNlY3QoKSBoZXJlCiAJICogaXMgaXQgd2lsbCByZXR1cm4gLUVJTlZBTCBpZiB0aGUgcnVsZSBjb21wdXRlZCBtYWtlcyBubyBzZW5zZS4KLQkgKiBBbGwgcnVsZXMgdGhhdCBkbyBjaGVjayBvdXQgT0sgYXJlIHZhbGlkLiAqLworCSAqIEFsbCBydWxlcyB0aGF0IGRvIGNoZWNrIG91dCBPSyBhcmUgdmFsaWQuCisJICovCiAKIAlmb3IgKHggPSAwOyB4IDwgcmQxLT5uX3JlZ19ydWxlczsgeCsrKSB7CiAJCXJ1bGUxID0gJnJkMS0+cmVnX3J1bGVzW3hdOwpAQCAtNzUxLDE0ICs3OTUsMTggQEAKIAkJcnVsZTEgPSAmcmQxLT5yZWdfcnVsZXNbeF07CiAJCWZvciAoeSA9IDA7IHkgPCByZDItPm5fcmVnX3J1bGVzOyB5KyspIHsKIAkJCXJ1bGUyID0gJnJkMi0+cmVnX3J1bGVzW3ldOwotCQkJLyogVGhpcyB0aW1lIGFyb3VuZCBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBzdGFjayBsZXRzCisJCQkvKgorCQkJICogVGhpcyB0aW1lIGFyb3VuZCBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBzdGFjayBsZXRzCiAJCQkgKiB3cml0ZSB0byB0aGUgdGFyZ2V0IHJ1bGUgZGlyZWN0bHkgc2F2aW5nIG91cnNlbHZlcwotCQkJICogYSBtZW1jcHkoKSAqLworCQkJICogYSBtZW1jcHkoKQorCQkJICovCiAJCQlpbnRlcnNlY3RlZF9ydWxlID0gJnJkLT5yZWdfcnVsZXNbcnVsZV9pZHhdOwogCQkJciA9IHJlZ19ydWxlc19pbnRlcnNlY3QocnVsZTEsIHJ1bGUyLAogCQkJCWludGVyc2VjdGVkX3J1bGUpOwotCQkJLyogTm8gbmVlZCB0byBtZW1zZXQgaGVyZSB0aGUgaW50ZXJzZWN0ZWQgcnVsZSBoZXJlIGFzCi0JCQkgKiB3ZSdyZSBub3QgdXNpbmcgdGhlIHN0YWNrIGFueW1vcmUgKi8KKwkJCS8qCisJCQkgKiBObyBuZWVkIHRvIG1lbXNldCBoZXJlIHRoZSBpbnRlcnNlY3RlZCBydWxlIGhlcmUgYXMKKwkJCSAqIHdlJ3JlIG5vdCB1c2luZyB0aGUgc3RhY2sgYW55bW9yZQorCQkJICovCiAJCQlpZiAocikKIAkJCQljb250aW51ZTsKIAkJCXJ1bGVfaWR4Kys7CkBAIC03NzcsOCArODI1LDEwIEBACiAJcmV0dXJuIHJkOwogfQogCi0vKiBYWFg6IGFkZCBzdXBwb3J0IGZvciB0aGUgcmVzdCBvZiBlbnVtIG5sODAyMTFfcmVnX3J1bGVfZmxhZ3MsIHdlIG1heQotICogd2FudCB0byBqdXN0IGhhdmUgdGhlIGNoYW5uZWwgc3RydWN0dXJlIHVzZSB0aGVzZSAqLworLyoKKyAqIFhYWDogYWRkIHN1cHBvcnQgZm9yIHRoZSByZXN0IG9mIGVudW0gbmw4MDIxMV9yZWdfcnVsZV9mbGFncywgd2UgbWF5CisgKiB3YW50IHRvIGp1c3QgaGF2ZSB0aGUgY2hhbm5lbCBzdHJ1Y3R1cmUgdXNlIHRoZXNlCisgKi8KIHN0YXRpYyB1MzIgbWFwX3JlZ2RvbV9mbGFncyh1MzIgcmRfZmxhZ3MpCiB7CiAJdTMyIGNoYW5uZWxfZmxhZ3MgPSAwOwpAQCAtNzkxLDQ4ICs4NDEsNDUgQEAKIAlyZXR1cm4gY2hhbm5lbF9mbGFnczsKIH0KIAotLyoqCi0gKiBmcmVxX3JlZ19pbmZvIC0gZ2V0IHJlZ3VsYXRvcnkgaW5mb3JtYXRpb24gZm9yIHRoZSBnaXZlbiBmcmVxdWVuY3kKLSAqIEBjZW50ZXJfZnJlcTogRnJlcXVlbmN5IGluIEtIeiBmb3Igd2hpY2ggd2Ugd2FudCByZWd1bGF0b3J5IGluZm9ybWF0aW9uIGZvcgotICogQGJhbmR3aWR0aDogdGhlIGJhbmR3aWR0aCByZXF1aXJlbWVudCB5b3UgaGF2ZSBpbiBLSHosIGlmIHlvdSBkbyBub3QgaGF2ZSBvbmUKLSAqIAl5b3UgY2FuIHNldCB0aGlzIHRvIDAuIElmIHRoaXMgZnJlcXVlbmN5IGlzIGFsbG93ZWQgd2UgdGhlbiBzZXQKLSAqIAl0aGlzIHZhbHVlIHRvIHRoZSBtYXhpbXVtIGFsbG93ZWQgYmFuZHdpZHRoLgotICogQHJlZ19ydWxlOiB0aGUgcmVndWxhdG9yeSBydWxlIHdoaWNoIHdlIGhhdmUgZm9yIHRoaXMgZnJlcXVlbmN5Ci0gKgotICogVXNlIHRoaXMgZnVuY3Rpb24gdG8gZ2V0IHRoZSByZWd1bGF0b3J5IHJ1bGUgZm9yIGEgc3BlY2lmaWMgZnJlcXVlbmN5IG9uCi0gKiBhIGdpdmVuIHdpcmVsZXNzIGRldmljZS4gSWYgdGhlIGRldmljZSBoYXMgYSBzcGVjaWZpYyByZWd1bGF0b3J5IGRvbWFpbgotICogaXQgd2FudHMgdG8gZm9sbG93IHdlIHJlc3BlY3QgdGhhdCB1bmxlc3MgYSBjb3VudHJ5IElFIGhhcyBiZWVuIHJlY2VpdmVkCi0gKiBhbmQgcHJvY2Vzc2VkIGFscmVhZHkuCi0gKgotICogUmV0dXJucyAwIGlmIGl0IHdhcyBhYmxlIHRvIGZpbmQgYSB2YWxpZCByZWd1bGF0b3J5IHJ1bGUgd2hpY2ggZG9lcwotICogYXBwbHkgdG8gdGhlIGdpdmVuIGNlbnRlcl9mcmVxIG90aGVyd2lzZSBpdCByZXR1cm5zIG5vbi16ZXJvLiBJdCB3aWxsCi0gKiBhbHNvIHJldHVybiAtRVJBTkdFIGlmIHdlIGRldGVybWluZSB0aGUgZ2l2ZW4gY2VudGVyX2ZyZXEgZG9lcyBub3QgZXZlbiBoYXZlCi0gKiBhIHJlZ3VsYXRvcnkgcnVsZSBmb3IgYSBmcmVxdWVuY3kgcmFuZ2UgaW4gdGhlIGNlbnRlcl9mcmVxJ3MgYmFuZC4gU2VlCi0gKiBmcmVxX2luX3J1bGVfYmFuZCgpIGZvciBvdXIgY3VycmVudCBkZWZpbml0aW9uIG9mIGEgYmFuZCAtLSB0aGlzIGlzIHB1cmVseQotICogc3ViamVjdGl2ZSBhbmQgcmlnaHQgbm93IGl0cyA4MDIuMTEgc3BlY2lmaWMuCi0gKi8KLXN0YXRpYyBpbnQgZnJlcV9yZWdfaW5mbyh1MzIgY2VudGVyX2ZyZXEsIHUzMiAqYmFuZHdpZHRoLAotCQkJIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnX3J1bGUgKipyZWdfcnVsZSkKK3N0YXRpYyBpbnQgZnJlcV9yZWdfaW5mb19yZWdkKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkgICAgICB1MzIgY2VudGVyX2ZyZXEsCisJCQkgICAgICB1MzIgKmJhbmR3aWR0aCwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnX3J1bGUgKipyZWdfcnVsZSwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpjdXN0b21fcmVnZCkKIHsKIAlpbnQgaTsKIAlib29sIGJhbmRfcnVsZV9mb3VuZCA9IGZhbHNlOworCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpyZWdkOwogCXUzMiBtYXhfYmFuZHdpZHRoID0gMDsKIAotCWlmICghY2ZnODAyMTFfcmVnZG9tYWluKQorCXJlZ2QgPSBjdXN0b21fcmVnZCA/IGN1c3RvbV9yZWdkIDogY2ZnODAyMTFfcmVnZG9tYWluOworCisJLyoKKwkgKiBGb2xsb3cgdGhlIGRyaXZlcidzIHJlZ3VsYXRvcnkgZG9tYWluLCBpZiBwcmVzZW50LCB1bmxlc3MgYSBjb3VudHJ5CisJICogSUUgaGFzIGJlZW4gcHJvY2Vzc2VkIG9yIGEgdXNlciB3YW50cyB0byBoZWxwIGNvbXBsYWluY2UgZnVydGhlcgorCSAqLworCWlmIChsYXN0X3JlcXVlc3QtPmluaXRpYXRvciAhPSBOTDgwMjExX1JFR0RPTV9TRVRfQllfQ09VTlRSWV9JRSAmJgorCSAgICBsYXN0X3JlcXVlc3QtPmluaXRpYXRvciAhPSBOTDgwMjExX1JFR0RPTV9TRVRfQllfVVNFUiAmJgorCSAgICB3aXBoeS0+cmVnZCkKKwkJcmVnZCA9IHdpcGh5LT5yZWdkOworCisJaWYgKCFyZWdkKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWZvciAoaSA9IDA7IGkgPCBjZmc4MDIxMV9yZWdkb21haW4tPm5fcmVnX3J1bGVzOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgcmVnZC0+bl9yZWdfcnVsZXM7IGkrKykgewogCQljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ19ydWxlICpycjsKIAkJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9mcmVxX3JhbmdlICpmciA9IE5VTEw7CiAJCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcG93ZXJfcnVsZSAqcHIgPSBOVUxMOwogCi0JCXJyID0gJmNmZzgwMjExX3JlZ2RvbWFpbi0+cmVnX3J1bGVzW2ldOworCQlyciA9ICZyZWdkLT5yZWdfcnVsZXNbaV07CiAJCWZyID0gJnJyLT5mcmVxX3JhbmdlOwogCQlwciA9ICZyci0+cG93ZXJfcnVsZTsKIAotCQkvKiBXZSBvbmx5IG5lZWQgdG8ga25vdyBpZiBvbmUgZnJlcXVlbmN5IHJ1bGUgd2FzCisJCS8qCisJCSAqIFdlIG9ubHkgbmVlZCB0byBrbm93IGlmIG9uZSBmcmVxdWVuY3kgcnVsZSB3YXMKIAkJICogd2FzIGluIGNlbnRlcl9mcmVxJ3MgYmFuZCwgdGhhdCdzIGVub3VnaCwgc28gbGV0cwotCQkgKiBub3Qgb3ZlcndyaXRlIGl0IG9uY2UgZm91bmQgKi8KKwkJICogbm90IG92ZXJ3cml0ZSBpdCBvbmNlIGZvdW5kCisJCSAqLwogCQlpZiAoIWJhbmRfcnVsZV9mb3VuZCkKIAkJCWJhbmRfcnVsZV9mb3VuZCA9IGZyZXFfaW5fcnVsZV9iYW5kKGZyLCBjZW50ZXJfZnJlcSk7CiAKQEAgLTg1MCw2ICs4OTcsMTQgQEAKIAogCXJldHVybiAhbWF4X2JhbmR3aWR0aDsKIH0KK0VYUE9SVF9TWU1CT0woZnJlcV9yZWdfaW5mbyk7CisKK2ludCBmcmVxX3JlZ19pbmZvKHN0cnVjdCB3aXBoeSAqd2lwaHksIHUzMiBjZW50ZXJfZnJlcSwgdTMyICpiYW5kd2lkdGgsCisJCQkgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdfcnVsZSAqKnJlZ19ydWxlKQoreworCXJldHVybiBmcmVxX3JlZ19pbmZvX3JlZ2Qod2lwaHksIGNlbnRlcl9mcmVxLAorCQliYW5kd2lkdGgsIHJlZ19ydWxlLCBOVUxMKTsKK30KIAogc3RhdGljIHZvaWQgaGFuZGxlX2NoYW5uZWwoc3RydWN0IHdpcGh5ICp3aXBoeSwgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kLAogCQkJICAgdW5zaWduZWQgaW50IGNoYW5faWR4KQpAQCAtODYxLDYgKzkxNiwxMSBAQAogCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcG93ZXJfcnVsZSAqcG93ZXJfcnVsZSA9IE5VTEw7CiAJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CiAJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuOworCXN0cnVjdCB3aXBoeSAqcmVxdWVzdF93aXBoeSA9IE5VTEw7CisKKwlhc3NlcnRfY2ZnODAyMTFfbG9jaygpOworCisJcmVxdWVzdF93aXBoeSA9IHdpcGh5X2lkeF90b193aXBoeShsYXN0X3JlcXVlc3QtPndpcGh5X2lkeCk7CiAKIAlzYmFuZCA9IHdpcGh5LT5iYW5kc1tiYW5kXTsKIAlCVUdfT04oY2hhbl9pZHggPj0gc2JhbmQtPm5fY2hhbm5lbHMpOwpAQCAtODY4LDExICs5MjgsMTIgQEAKIAogCWZsYWdzID0gY2hhbi0+b3JpZ19mbGFnczsKIAotCXIgPSBmcmVxX3JlZ19pbmZvKE1IWl9UT19LSFooY2hhbi0+Y2VudGVyX2ZyZXEpLAorCXIgPSBmcmVxX3JlZ19pbmZvKHdpcGh5LCBNSFpfVE9fS0haKGNoYW4tPmNlbnRlcl9mcmVxKSwKIAkJJm1heF9iYW5kd2lkdGgsICZyZWdfcnVsZSk7CiAKIAlpZiAocikgewotCQkvKiBUaGlzIG1lYW5zIG5vIHJlZ3VsYXRvcnkgcnVsZSB3YXMgZm91bmQgaW4gdGhlIGNvdW50cnkgSUUKKwkJLyoKKwkJICogVGhpcyBtZWFucyBubyByZWd1bGF0b3J5IHJ1bGUgd2FzIGZvdW5kIGluIHRoZSBjb3VudHJ5IElFCiAJCSAqIHdpdGggYSBmcmVxdWVuY3kgcmFuZ2Ugb24gdGhlIGNlbnRlcl9mcmVxJ3MgYmFuZCwgc2luY2UKIAkJICogSUVFRS04MDIuMTEgYWxsb3dzIGZvciBhIGNvdW50cnkgSUUgdG8gaGF2ZSBhIHN1YnNldCBvZiB0aGUKIAkJICogcmVndWxhdG9yeSBpbmZvcm1hdGlvbiBwcm92aWRlZCBpbiBhIGNvdW50cnkgd2UgaWdub3JlCkBAIC04ODMsNyArOTQ0LDggQEAKIAkJICogaHR0cDovL3Rpbnl1cmwuY29tLzExZC1jbGFyaWZpY2F0aW9uCiAJCSAqLwogCQlpZiAociA9PSAtRVJBTkdFICYmCi0JCSAgICBsYXN0X3JlcXVlc3QtPmluaXRpYXRvciA9PSBSRUdET01fU0VUX0JZX0NPVU5UUllfSUUpIHsKKwkJICAgIGxhc3RfcmVxdWVzdC0+aW5pdGlhdG9yID09CisJCSAgICBOTDgwMjExX1JFR0RPTV9TRVRfQllfQ09VTlRSWV9JRSkgewogI2lmZGVmIENPTkZJR19DRkc4MDIxMV9SRUdfREVCVUcKIAkJCXByaW50ayhLRVJOX0RFQlVHICJjZmc4MDIxMTogTGVhdmluZyBjaGFubmVsICVkIE1IeiAiCiAJCQkJImludGFjdCBvbiAlcyAtIG5vIHJ1bGUgZm91bmQgaW4gYmFuZCBvbiAiCkBAIC04OTEsMTAgKzk1MywxMyBAQAogCQkJCWNoYW4tPmNlbnRlcl9mcmVxLCB3aXBoeV9uYW1lKHdpcGh5KSk7CiAjZW5kaWYKIAkJfSBlbHNlIHsKLQkJLyogSW4gdGhpcyBjYXNlIHdlIGtub3cgdGhlIGNvdW50cnkgSUUgaGFzIGF0IGxlYXN0IG9uZSByZWcgcnVsZQotCQkgKiBmb3IgdGhlIGJhbmQgc28gd2UgcmVzcGVjdCBpdHMgYmFuZCBkZWZpbml0aW9ucyAqLworCQkvKgorCQkgKiBJbiB0aGlzIGNhc2Ugd2Uga25vdyB0aGUgY291bnRyeSBJRSBoYXMgYXQgbGVhc3Qgb25lIHJlZyBydWxlCisJCSAqIGZvciB0aGUgYmFuZCBzbyB3ZSByZXNwZWN0IGl0cyBiYW5kIGRlZmluaXRpb25zCisJCSAqLwogI2lmZGVmIENPTkZJR19DRkc4MDIxMV9SRUdfREVCVUcKLQkJCWlmIChsYXN0X3JlcXVlc3QtPmluaXRpYXRvciA9PSBSRUdET01fU0VUX0JZX0NPVU5UUllfSUUpCisJCQlpZiAobGFzdF9yZXF1ZXN0LT5pbml0aWF0b3IgPT0KKwkJCSAgICBOTDgwMjExX1JFR0RPTV9TRVRfQllfQ09VTlRSWV9JRSkKIAkJCQlwcmludGsoS0VSTl9ERUJVRyAiY2ZnODAyMTE6IERpc2FibGluZyAiCiAJCQkJCSJjaGFubmVsICVkIE1IeiBvbiAlcyBkdWUgdG8gIgogCQkJCQkiQ291bnRyeSBJRVxuIiwKQEAgLTkwOCw2ICs5NzMsMjQgQEAKIAogCXBvd2VyX3J1bGUgPSAmcmVnX3J1bGUtPnBvd2VyX3J1bGU7CiAKKwlpZiAobGFzdF9yZXF1ZXN0LT5pbml0aWF0b3IgPT0gTkw4MDIxMV9SRUdET01fU0VUX0JZX0RSSVZFUiAmJgorCSAgICByZXF1ZXN0X3dpcGh5ICYmIHJlcXVlc3Rfd2lwaHkgPT0gd2lwaHkgJiYKKwkgICAgcmVxdWVzdF93aXBoeS0+c3RyaWN0X3JlZ3VsYXRvcnkpIHsKKwkJLyoKKwkJICogVGhpcyBnYXVyYW50ZWVzIHRoZSBkcml2ZXIncyByZXF1ZXN0ZWQgcmVndWxhdG9yeSBkb21haW4KKwkJICogd2lsbCBhbHdheXMgYmUgdXNlZCBhcyBhIGJhc2UgZm9yIGZ1cnRoZXIgcmVndWxhdG9yeQorCQkgKiBzZXR0aW5ncworCQkgKi8KKwkJY2hhbi0+ZmxhZ3MgPSBjaGFuLT5vcmlnX2ZsYWdzID0KKwkJCW1hcF9yZWdkb21fZmxhZ3MocmVnX3J1bGUtPmZsYWdzKTsKKwkJY2hhbi0+bWF4X2FudGVubmFfZ2FpbiA9IGNoYW4tPm9yaWdfbWFnID0KKwkJCShpbnQpIE1CSV9UT19EQkkocG93ZXJfcnVsZS0+bWF4X2FudGVubmFfZ2Fpbik7CisJCWNoYW4tPm1heF9iYW5kd2lkdGggPSBLSFpfVE9fTUhaKG1heF9iYW5kd2lkdGgpOworCQljaGFuLT5tYXhfcG93ZXIgPSBjaGFuLT5vcmlnX21wd3IgPQorCQkJKGludCkgTUJNX1RPX0RCTShwb3dlcl9ydWxlLT5tYXhfZWlycCk7CisJCXJldHVybjsKKwl9CisKIAljaGFuLT5mbGFncyA9IGZsYWdzIHwgbWFwX3JlZ2RvbV9mbGFncyhyZWdfcnVsZS0+ZmxhZ3MpOwogCWNoYW4tPm1heF9hbnRlbm5hX2dhaW4gPSBtaW4oY2hhbi0+b3JpZ19tYWcsCiAJCShpbnQpIE1CSV9UT19EQkkocG93ZXJfcnVsZS0+bWF4X2FudGVubmFfZ2FpbikpOwpAQCAtOTMxLDEzMiArMTAxNCw0MDcgQEAKIAkJaGFuZGxlX2NoYW5uZWwod2lwaHksIGJhbmQsIGkpOwogfQogCi1zdGF0aWMgYm9vbCBpZ25vcmVfcmVnX3VwZGF0ZShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBlbnVtIHJlZ19zZXRfYnkgc2V0YnkpCitzdGF0aWMgYm9vbCBpZ25vcmVfcmVnX3VwZGF0ZShzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJICAgICAgZW51bSBubDgwMjExX3JlZ19pbml0aWF0b3IgaW5pdGlhdG9yKQogewogCWlmICghbGFzdF9yZXF1ZXN0KQogCQlyZXR1cm4gdHJ1ZTsKLQlpZiAoc2V0YnkgPT0gUkVHRE9NX1NFVF9CWV9DT1JFICYmCi0JCSAgd2lwaHktPmZ3X2hhbmRsZXNfcmVndWxhdG9yeSkKKwlpZiAoaW5pdGlhdG9yID09IE5MODAyMTFfUkVHRE9NX1NFVF9CWV9DT1JFICYmCisJCSAgd2lwaHktPmN1c3RvbV9yZWd1bGF0b3J5KQorCQlyZXR1cm4gdHJ1ZTsKKwkvKgorCSAqIHdpcGh5LT5yZWdkIHdpbGwgYmUgc2V0IG9uY2UgdGhlIGRldmljZSBoYXMgaXRzIG93bgorCSAqIGRlc2lyZWQgcmVndWxhdG9yeSBkb21haW4gc2V0CisJICovCisJaWYgKHdpcGh5LT5zdHJpY3RfcmVndWxhdG9yeSAmJiAhd2lwaHktPnJlZ2QgJiYKKwkgICAgIWlzX3dvcmxkX3JlZ2RvbShsYXN0X3JlcXVlc3QtPmFscGhhMikpCiAJCXJldHVybiB0cnVlOwogCXJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIHZvaWQgdXBkYXRlX2FsbF93aXBoeV9yZWd1bGF0b3J5KGVudW0gcmVnX3NldF9ieSBzZXRieSkKK3N0YXRpYyB2b2lkIHVwZGF0ZV9hbGxfd2lwaHlfcmVndWxhdG9yeShlbnVtIG5sODAyMTFfcmVnX2luaXRpYXRvciBpbml0aWF0b3IpCiB7CiAJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnY7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRydiwgJmNmZzgwMjExX2Rydl9saXN0LCBsaXN0KQotCQlpZiAoIWlnbm9yZV9yZWdfdXBkYXRlKCZkcnYtPndpcGh5LCBzZXRieSkpCi0JCQl3aXBoeV91cGRhdGVfcmVndWxhdG9yeSgmZHJ2LT53aXBoeSwgc2V0YnkpOworCQl3aXBoeV91cGRhdGVfcmVndWxhdG9yeSgmZHJ2LT53aXBoeSwgaW5pdGlhdG9yKTsKIH0KIAotdm9pZCB3aXBoeV91cGRhdGVfcmVndWxhdG9yeShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBlbnVtIHJlZ19zZXRfYnkgc2V0YnkpCitzdGF0aWMgdm9pZCBoYW5kbGVfcmVnX2JlYWNvbihzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJICAgICAgdW5zaWduZWQgaW50IGNoYW5faWR4LAorCQkJICAgICAgc3RydWN0IHJlZ19iZWFjb24gKnJlZ19iZWFjb24pCit7CisjaWZkZWYgQ09ORklHX0NGRzgwMjExX1JFR19ERUJVRworI2RlZmluZSBSRUdfREVCVUdfQkVBQ09OX0ZMQUcoZGVzYykgXAorCXByaW50ayhLRVJOX0RFQlVHICJjZmc4MDIxMTogRW5hYmxpbmcgIiBkZXNjICIgb24gIiBcCisJCSJmcmVxdWVuY3k6ICVkIE1IeiAoQ2ggJWQpIG9uICVzXG4iLCBcCisJCXJlZ19iZWFjb24tPmNoYW4uY2VudGVyX2ZyZXEsIFwKKwkJaWVlZTgwMjExX2ZyZXF1ZW5jeV90b19jaGFubmVsKHJlZ19iZWFjb24tPmNoYW4uY2VudGVyX2ZyZXEpLCBcCisJCXdpcGh5X25hbWUod2lwaHkpKTsKKyNlbHNlCisjZGVmaW5lIFJFR19ERUJVR19CRUFDT05fRkxBRyhkZXNjKSBkbyB7fSB3aGlsZSAoMCkKKyNlbmRpZgorCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbjsKKworCWFzc2VydF9jZmc4MDIxMV9sb2NrKCk7CisKKwlzYmFuZCA9IHdpcGh5LT5iYW5kc1tyZWdfYmVhY29uLT5jaGFuLmJhbmRdOworCWNoYW4gPSAmc2JhbmQtPmNoYW5uZWxzW2NoYW5faWR4XTsKKworCWlmIChsaWtlbHkoY2hhbi0+Y2VudGVyX2ZyZXEgIT0gcmVnX2JlYWNvbi0+Y2hhbi5jZW50ZXJfZnJlcSkpCisJCXJldHVybjsKKworCWlmIChjaGFuLT5mbGFncyAmIElFRUU4MDIxMV9DSEFOX1BBU1NJVkVfU0NBTikgeworCQljaGFuLT5mbGFncyAmPSB+SUVFRTgwMjExX0NIQU5fUEFTU0lWRV9TQ0FOOworCQlSRUdfREVCVUdfQkVBQ09OX0ZMQUcoImFjdGl2ZSBzY2FubmluZyIpOworCX0KKworCWlmIChjaGFuLT5mbGFncyAmIElFRUU4MDIxMV9DSEFOX05PX0lCU1MpIHsKKwkJY2hhbi0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9DSEFOX05PX0lCU1M7CisJCVJFR19ERUJVR19CRUFDT05fRkxBRygiYmVhY29uaW5nIik7CisJfQorCisJY2hhbi0+YmVhY29uX2ZvdW5kID0gdHJ1ZTsKKyN1bmRlZiBSRUdfREVCVUdfQkVBQ09OX0ZMQUcKK30KKworLyoKKyAqIENhbGxlZCB3aGVuIGEgc2NhbiBvbiBhIHdpcGh5IGZpbmRzIGEgYmVhY29uIG9uCisgKiBuZXcgY2hhbm5lbAorICovCitzdGF0aWMgdm9pZCB3aXBoeV91cGRhdGVfbmV3X2JlYWNvbihzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJCSAgICBzdHJ1Y3QgcmVnX2JlYWNvbiAqcmVnX2JlYWNvbikKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKKworCWFzc2VydF9jZmc4MDIxMV9sb2NrKCk7CisKKwlpZiAoIXdpcGh5LT5iYW5kc1tyZWdfYmVhY29uLT5jaGFuLmJhbmRdKQorCQlyZXR1cm47CisKKwlzYmFuZCA9IHdpcGh5LT5iYW5kc1tyZWdfYmVhY29uLT5jaGFuLmJhbmRdOworCisJZm9yIChpID0gMDsgaSA8IHNiYW5kLT5uX2NoYW5uZWxzOyBpKyspCisJCWhhbmRsZV9yZWdfYmVhY29uKHdpcGh5LCBpLCByZWdfYmVhY29uKTsKK30KKworLyoKKyAqIENhbGxlZCB1cG9uIHJlZyBjaGFuZ2VzIG9yIGEgbmV3IHdpcGh5IGlzIGFkZGVkCisgKi8KK3N0YXRpYyB2b2lkIHdpcGh5X3VwZGF0ZV9iZWFjb25fcmVnKHN0cnVjdCB3aXBoeSAqd2lwaHkpCit7CisJdW5zaWduZWQgaW50IGk7CisJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CisJc3RydWN0IHJlZ19iZWFjb24gKnJlZ19iZWFjb247CisKKwlhc3NlcnRfY2ZnODAyMTFfbG9jaygpOworCisJaWYgKGxpc3RfZW1wdHkoJnJlZ19iZWFjb25fbGlzdCkpCisJCXJldHVybjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocmVnX2JlYWNvbiwgJnJlZ19iZWFjb25fbGlzdCwgbGlzdCkgeworCQlpZiAoIXdpcGh5LT5iYW5kc1tyZWdfYmVhY29uLT5jaGFuLmJhbmRdKQorCQkJY29udGludWU7CisJCXNiYW5kID0gd2lwaHktPmJhbmRzW3JlZ19iZWFjb24tPmNoYW4uYmFuZF07CisJCWZvciAoaSA9IDA7IGkgPCBzYmFuZC0+bl9jaGFubmVsczsgaSsrKQorCQkJaGFuZGxlX3JlZ19iZWFjb24od2lwaHksIGksIHJlZ19iZWFjb24pOworCX0KK30KKworc3RhdGljIGJvb2wgcmVnX2lzX3dvcmxkX3JvYW1pbmcoc3RydWN0IHdpcGh5ICp3aXBoeSkKK3sKKwlpZiAoaXNfd29ybGRfcmVnZG9tKGNmZzgwMjExX3JlZ2RvbWFpbi0+YWxwaGEyKSB8fAorCSAgICAod2lwaHktPnJlZ2QgJiYgaXNfd29ybGRfcmVnZG9tKHdpcGh5LT5yZWdkLT5hbHBoYTIpKSkKKwkJcmV0dXJuIHRydWU7CisJaWYgKGxhc3RfcmVxdWVzdC0+aW5pdGlhdG9yICE9IE5MODAyMTFfUkVHRE9NX1NFVF9CWV9DT1VOVFJZX0lFICYmCisJICAgIHdpcGh5LT5jdXN0b21fcmVndWxhdG9yeSkKKwkJcmV0dXJuIHRydWU7CisJcmV0dXJuIGZhbHNlOworfQorCisvKiBSZWFwIHRoZSBhZHZhbnRhZ2VzIG9mIHByZXZpb3VzbHkgZm91bmQgYmVhY29ucyAqLworc3RhdGljIHZvaWQgcmVnX3Byb2Nlc3NfYmVhY29ucyhzdHJ1Y3Qgd2lwaHkgKndpcGh5KQoreworCWlmICghcmVnX2lzX3dvcmxkX3JvYW1pbmcod2lwaHkpKQorCQlyZXR1cm47CisJd2lwaHlfdXBkYXRlX2JlYWNvbl9yZWcod2lwaHkpOworfQorCit2b2lkIHdpcGh5X3VwZGF0ZV9yZWd1bGF0b3J5KHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkgICAgIGVudW0gbmw4MDIxMV9yZWdfaW5pdGlhdG9yIGluaXRpYXRvcikKK3sKKwllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQ7CisKKwlpZiAoaWdub3JlX3JlZ191cGRhdGUod2lwaHksIGluaXRpYXRvcikpCisJCWdvdG8gb3V0OworCWZvciAoYmFuZCA9IDA7IGJhbmQgPCBJRUVFODAyMTFfTlVNX0JBTkRTOyBiYW5kKyspIHsKKwkJaWYgKHdpcGh5LT5iYW5kc1tiYW5kXSkKKwkJCWhhbmRsZV9iYW5kKHdpcGh5LCBiYW5kKTsKKwl9CitvdXQ6CisJcmVnX3Byb2Nlc3NfYmVhY29ucyh3aXBoeSk7CisJaWYgKHdpcGh5LT5yZWdfbm90aWZpZXIpCisJCXdpcGh5LT5yZWdfbm90aWZpZXIod2lwaHksIGxhc3RfcmVxdWVzdCk7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9jaGFubmVsX2N1c3RvbShzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJCSAgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kLAorCQkJCSAgdW5zaWduZWQgaW50IGNoYW5faWR4LAorCQkJCSAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKnJlZ2QpCit7CisJaW50IHI7CisJdTMyIG1heF9iYW5kd2lkdGggPSAwOworCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnX3J1bGUgKnJlZ19ydWxlID0gTlVMTDsKKwljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3Bvd2VyX3J1bGUgKnBvd2VyX3J1bGUgPSBOVUxMOworCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbjsKKworCXNiYW5kID0gd2lwaHktPmJhbmRzW2JhbmRdOworCUJVR19PTihjaGFuX2lkeCA+PSBzYmFuZC0+bl9jaGFubmVscyk7CisJY2hhbiA9ICZzYmFuZC0+Y2hhbm5lbHNbY2hhbl9pZHhdOworCisJciA9IGZyZXFfcmVnX2luZm9fcmVnZCh3aXBoeSwgTUhaX1RPX0tIWihjaGFuLT5jZW50ZXJfZnJlcSksCisJCSZtYXhfYmFuZHdpZHRoLCAmcmVnX3J1bGUsIHJlZ2QpOworCisJaWYgKHIpIHsKKwkJY2hhbi0+ZmxhZ3MgPSBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRDsKKwkJcmV0dXJuOworCX0KKworCXBvd2VyX3J1bGUgPSAmcmVnX3J1bGUtPnBvd2VyX3J1bGU7CisKKwljaGFuLT5mbGFncyB8PSBtYXBfcmVnZG9tX2ZsYWdzKHJlZ19ydWxlLT5mbGFncyk7CisJY2hhbi0+bWF4X2FudGVubmFfZ2FpbiA9IChpbnQpIE1CSV9UT19EQkkocG93ZXJfcnVsZS0+bWF4X2FudGVubmFfZ2Fpbik7CisJY2hhbi0+bWF4X2JhbmR3aWR0aCA9IEtIWl9UT19NSFoobWF4X2JhbmR3aWR0aCk7CisJY2hhbi0+bWF4X3Bvd2VyID0gKGludCkgTUJNX1RPX0RCTShwb3dlcl9ydWxlLT5tYXhfZWlycCk7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9iYW5kX2N1c3RvbShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKnJlZ2QpCit7CisJdW5zaWduZWQgaW50IGk7CisJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CisKKwlCVUdfT04oIXdpcGh5LT5iYW5kc1tiYW5kXSk7CisJc2JhbmQgPSB3aXBoeS0+YmFuZHNbYmFuZF07CisKKwlmb3IgKGkgPSAwOyBpIDwgc2JhbmQtPm5fY2hhbm5lbHM7IGkrKykKKwkJaGFuZGxlX2NoYW5uZWxfY3VzdG9tKHdpcGh5LCBiYW5kLCBpLCByZWdkKTsKK30KKworLyogVXNlZCBieSBkcml2ZXJzIHByaW9yIHRvIHdpcGh5IHJlZ2lzdHJhdGlvbiAqLwordm9pZCB3aXBoeV9hcHBseV9jdXN0b21fcmVndWxhdG9yeShzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJCSAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpyZWdkKQogewogCWVudW0gaWVlZTgwMjExX2JhbmQgYmFuZDsKIAlmb3IgKGJhbmQgPSAwOyBiYW5kIDwgSUVFRTgwMjExX05VTV9CQU5EUzsgYmFuZCsrKSB7CiAJCWlmICh3aXBoeS0+YmFuZHNbYmFuZF0pCi0JCQloYW5kbGVfYmFuZCh3aXBoeSwgYmFuZCk7Ci0JCWlmICh3aXBoeS0+cmVnX25vdGlmaWVyKQotCQkJd2lwaHktPnJlZ19ub3RpZmllcih3aXBoeSwgc2V0YnkpOworCQkJaGFuZGxlX2JhbmRfY3VzdG9tKHdpcGh5LCBiYW5kLCByZWdkKTsKIAl9CiB9CitFWFBPUlRfU1lNQk9MKHdpcGh5X2FwcGx5X2N1c3RvbV9yZWd1bGF0b3J5KTsKIAotLyogUmV0dXJuIHZhbHVlIHdoaWNoIGNhbiBiZSB1c2VkIGJ5IGlnbm9yZV9yZXF1ZXN0KCkgdG8gaW5kaWNhdGUKLSAqIGl0IGhhcyBiZWVuIGRldGVybWluZWQgd2Ugc2hvdWxkIGludGVyc2VjdCB0d28gcmVndWxhdG9yeSBkb21haW5zICovCitzdGF0aWMgaW50IHJlZ19jb3B5X3JlZ2QoY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKipkc3RfcmVnZCwKKwkJCSBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqc3JjX3JlZ2QpCit7CisJc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKnJlZ2Q7CisJaW50IHNpemVfb2ZfcmVnZCA9IDA7CisJdW5zaWduZWQgaW50IGk7CisKKwlzaXplX29mX3JlZ2QgPSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4pICsKKwkgICgoc3JjX3JlZ2QtPm5fcmVnX3J1bGVzICsgMSkgKiBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9yZWdfcnVsZSkpOworCisJcmVnZCA9IGt6YWxsb2Moc2l6ZV9vZl9yZWdkLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJlZ2QpCisJCXJldHVybiAtRU5PTUVNOworCisJbWVtY3B5KHJlZ2QsIHNyY19yZWdkLCBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4pKTsKKworCWZvciAoaSA9IDA7IGkgPCBzcmNfcmVnZC0+bl9yZWdfcnVsZXM7IGkrKykKKwkJbWVtY3B5KCZyZWdkLT5yZWdfcnVsZXNbaV0sICZzcmNfcmVnZC0+cmVnX3J1bGVzW2ldLAorCQkJc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfcmVnX3J1bGUpKTsKKworCSpkc3RfcmVnZCA9IHJlZ2Q7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBSZXR1cm4gdmFsdWUgd2hpY2ggY2FuIGJlIHVzZWQgYnkgaWdub3JlX3JlcXVlc3QoKSB0byBpbmRpY2F0ZQorICogaXQgaGFzIGJlZW4gZGV0ZXJtaW5lZCB3ZSBzaG91bGQgaW50ZXJzZWN0IHR3byByZWd1bGF0b3J5IGRvbWFpbnMKKyAqLwogI2RlZmluZSBSRUdfSU5URVJTRUNUCTEKIAogLyogVGhpcyBoYXMgdGhlIGxvZ2ljIHdoaWNoIGRldGVybWluZXMgd2hlbiBhIG5ldyByZXF1ZXN0CiAgKiBzaG91bGQgYmUgaWdub3JlZC4gKi8KLXN0YXRpYyBpbnQgaWdub3JlX3JlcXVlc3Qoc3RydWN0IHdpcGh5ICp3aXBoeSwgZW51bSByZWdfc2V0X2J5IHNldF9ieSwKLQkJCSAgY29uc3QgY2hhciAqYWxwaGEyKQorc3RhdGljIGludCBpZ25vcmVfcmVxdWVzdChzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJICBzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0ICpwZW5kaW5nX3JlcXVlc3QpCiB7CisJc3RydWN0IHdpcGh5ICpsYXN0X3dpcGh5ID0gTlVMTDsKKworCWFzc2VydF9jZmc4MDIxMV9sb2NrKCk7CisKIAkvKiBBbGwgaW5pdGlhbCByZXF1ZXN0cyBhcmUgcmVzcGVjdGVkICovCiAJaWYgKCFsYXN0X3JlcXVlc3QpCiAJCXJldHVybiAwOwogCi0Jc3dpdGNoIChzZXRfYnkpIHsKLQljYXNlIFJFR0RPTV9TRVRfQllfSU5JVDoKKwlzd2l0Y2ggKHBlbmRpbmdfcmVxdWVzdC0+aW5pdGlhdG9yKSB7CisJY2FzZSBOTDgwMjExX1JFR0RPTV9TRVRfQllfQ09SRToKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JY2FzZSBSRUdET01fU0VUX0JZX0NPUkU6Ci0JCS8qCi0JCSAqIEFsd2F5cyByZXNwZWN0IG5ldyB3aXJlbGVzcyBjb3JlIGhpbnRzLCBzaG91bGQgb25seSBoYXBwZW4KLQkJICogd2hlbiB1cGRhdGluZyB0aGUgd29ybGQgcmVndWxhdG9yeSBkb21haW4gYXQgaW5pdC4KLQkJICovCi0JCXJldHVybiAwOwotCWNhc2UgUkVHRE9NX1NFVF9CWV9DT1VOVFJZX0lFOgotCQlpZiAodW5saWtlbHkoIWlzX2FuX2FscGhhMihhbHBoYTIpKSkKKwljYXNlIE5MODAyMTFfUkVHRE9NX1NFVF9CWV9DT1VOVFJZX0lFOgorCisJCWxhc3Rfd2lwaHkgPSB3aXBoeV9pZHhfdG9fd2lwaHkobGFzdF9yZXF1ZXN0LT53aXBoeV9pZHgpOworCisJCWlmICh1bmxpa2VseSghaXNfYW5fYWxwaGEyKHBlbmRpbmdfcmVxdWVzdC0+YWxwaGEyKSkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJaWYgKGxhc3RfcmVxdWVzdC0+aW5pdGlhdG9yID09IFJFR0RPTV9TRVRfQllfQ09VTlRSWV9JRSkgewotCQkJaWYgKGxhc3RfcmVxdWVzdC0+d2lwaHkgIT0gd2lwaHkpIHsKKwkJaWYgKGxhc3RfcmVxdWVzdC0+aW5pdGlhdG9yID09CisJCSAgICBOTDgwMjExX1JFR0RPTV9TRVRfQllfQ09VTlRSWV9JRSkgeworCQkJaWYgKGxhc3Rfd2lwaHkgIT0gd2lwaHkpIHsKIAkJCQkvKgogCQkJCSAqIFR3byBjYXJkcyB3aXRoIHR3byBBUHMgY2xhaW1pbmcgZGlmZmVyZW50CiAJCQkJICogZGlmZmVyZW50IENvdW50cnkgSUUgYWxwaGEycy4gV2UgY291bGQKIAkJCQkgKiBpbnRlcnNlY3QgdGhlbSwgYnV0IHRoYXQgc2VlbXMgdW5saWtlbHkKIAkJCQkgKiB0byBiZSBjb3JyZWN0LiBSZWplY3Qgc2Vjb25kIG9uZSBmb3Igbm93LgogCQkJCSAqLwotCQkJCWlmICghYWxwaGEyX2VxdWFsKGFscGhhMiwKLQkJCQkJCSAgY2ZnODAyMTFfcmVnZG9tYWluLT5hbHBoYTIpKQorCQkJCWlmIChyZWdkb21fY2hhbmdlcyhwZW5kaW5nX3JlcXVlc3QtPmFscGhhMikpCiAJCQkJCXJldHVybiAtRU9QTk9UU1VQUDsKIAkJCQlyZXR1cm4gLUVBTFJFQURZOwogCQkJfQotCQkJLyogVHdvIGNvbnNlY3V0aXZlIENvdW50cnkgSUUgaGludHMgb24gdGhlIHNhbWUgd2lwaHkuCi0JCQkgKiBUaGlzIHNob3VsZCBiZSBwaWNrZWQgdXAgZWFybHkgYnkgdGhlIGRyaXZlci9zdGFjayAqLwotCQkJaWYgKFdBUk5fT04oIWFscGhhMl9lcXVhbChjZmc4MDIxMV9yZWdkb21haW4tPmFscGhhMiwKLQkJCQkgIGFscGhhMikpKQorCQkJLyoKKwkJCSAqIFR3byBjb25zZWN1dGl2ZSBDb3VudHJ5IElFIGhpbnRzIG9uIHRoZSBzYW1lIHdpcGh5LgorCQkJICogVGhpcyBzaG91bGQgYmUgcGlja2VkIHVwIGVhcmx5IGJ5IHRoZSBkcml2ZXIvc3RhY2sKKwkJCSAqLworCQkJaWYgKFdBUk5fT04ocmVnZG9tX2NoYW5nZXMocGVuZGluZ19yZXF1ZXN0LT5hbHBoYTIpKSkKIAkJCQlyZXR1cm4gMDsKIAkJCXJldHVybiAtRUFMUkVBRFk7CiAJCX0KIAkJcmV0dXJuIFJFR19JTlRFUlNFQ1Q7Ci0JY2FzZSBSRUdET01fU0VUX0JZX0RSSVZFUjoKLQkJaWYgKGxhc3RfcmVxdWVzdC0+aW5pdGlhdG9yID09IFJFR0RPTV9TRVRfQllfRFJJVkVSKQorCWNhc2UgTkw4MDIxMV9SRUdET01fU0VUX0JZX0RSSVZFUjoKKwkJaWYgKGxhc3RfcmVxdWVzdC0+aW5pdGlhdG9yID09IE5MODAyMTFfUkVHRE9NX1NFVF9CWV9DT1JFKSB7CisJCQlpZiAoaXNfb2xkX3N0YXRpY19yZWdkb20oY2ZnODAyMTFfcmVnZG9tYWluKSkKKwkJCQlyZXR1cm4gMDsKKwkJCWlmIChyZWdkb21fY2hhbmdlcyhwZW5kaW5nX3JlcXVlc3QtPmFscGhhMikpCisJCQkJcmV0dXJuIDA7CiAJCQlyZXR1cm4gLUVBTFJFQURZOwotCQlyZXR1cm4gMDsKLQljYXNlIFJFR0RPTV9TRVRfQllfVVNFUjoKLQkJaWYgKGxhc3RfcmVxdWVzdC0+aW5pdGlhdG9yID09IFJFR0RPTV9TRVRfQllfQ09VTlRSWV9JRSkKKwkJfQorCisJCS8qCisJCSAqIFRoaXMgd291bGQgaGFwcGVuIGlmIHlvdSB1bnBsdWcgYW5kIHBsdWcgeW91ciBjYXJkCisJCSAqIGJhY2sgaW4gb3IgaWYgeW91IGFkZCBhIG5ldyBkZXZpY2UgZm9yIHdoaWNoIHRoZSBwcmV2aW91c2x5CisJCSAqIGxvYWRlZCBjYXJkIGFsc28gYWdyZWVzIG9uIHRoZSByZWd1bGF0b3J5IGRvbWFpbi4KKwkJICovCisJCWlmIChsYXN0X3JlcXVlc3QtPmluaXRpYXRvciA9PSBOTDgwMjExX1JFR0RPTV9TRVRfQllfRFJJVkVSICYmCisJCSAgICAhcmVnZG9tX2NoYW5nZXMocGVuZGluZ19yZXF1ZXN0LT5hbHBoYTIpKQorCQkJcmV0dXJuIC1FQUxSRUFEWTsKKworCQlyZXR1cm4gUkVHX0lOVEVSU0VDVDsKKwljYXNlIE5MODAyMTFfUkVHRE9NX1NFVF9CWV9VU0VSOgorCQlpZiAobGFzdF9yZXF1ZXN0LT5pbml0aWF0b3IgPT0gTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPVU5UUllfSUUpCiAJCQlyZXR1cm4gUkVHX0lOVEVSU0VDVDsKLQkJLyogSWYgdGhlIHVzZXIga25vd3MgYmV0dGVyIHRoZSB1c2VyIHNob3VsZCBzZXQgdGhlIHJlZ2RvbQotCQkgKiB0byB0aGVpciBjb3VudHJ5IGJlZm9yZSB0aGUgSUUgaXMgcGlja2VkIHVwICovCi0JCWlmIChsYXN0X3JlcXVlc3QtPmluaXRpYXRvciA9PSBSRUdET01fU0VUX0JZX1VTRVIgJiYKKwkJLyoKKwkJICogSWYgdGhlIHVzZXIga25vd3MgYmV0dGVyIHRoZSB1c2VyIHNob3VsZCBzZXQgdGhlIHJlZ2RvbQorCQkgKiB0byB0aGVpciBjb3VudHJ5IGJlZm9yZSB0aGUgSUUgaXMgcGlja2VkIHVwCisJCSAqLworCQlpZiAobGFzdF9yZXF1ZXN0LT5pbml0aWF0b3IgPT0gTkw4MDIxMV9SRUdET01fU0VUX0JZX1VTRVIgJiYKIAkJCSAgbGFzdF9yZXF1ZXN0LT5pbnRlcnNlY3QpCiAJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJCS8qCisJCSAqIFByb2Nlc3MgdXNlciByZXF1ZXN0cyBvbmx5IGFmdGVyIHByZXZpb3VzIHVzZXIvZHJpdmVyL2NvcmUKKwkJICogcmVxdWVzdHMgaGF2ZSBiZWVuIHByb2Nlc3NlZAorCQkgKi8KKwkJaWYgKGxhc3RfcmVxdWVzdC0+aW5pdGlhdG9yID09IE5MODAyMTFfUkVHRE9NX1NFVF9CWV9DT1JFIHx8CisJCSAgICBsYXN0X3JlcXVlc3QtPmluaXRpYXRvciA9PSBOTDgwMjExX1JFR0RPTV9TRVRfQllfRFJJVkVSIHx8CisJCSAgICBsYXN0X3JlcXVlc3QtPmluaXRpYXRvciA9PSBOTDgwMjExX1JFR0RPTV9TRVRfQllfVVNFUikgeworCQkJaWYgKHJlZ2RvbV9jaGFuZ2VzKGxhc3RfcmVxdWVzdC0+YWxwaGEyKSkKKwkJCQlyZXR1cm4gLUVBR0FJTjsKKwkJfQorCisJCWlmICghaXNfb2xkX3N0YXRpY19yZWdkb20oY2ZnODAyMTFfcmVnZG9tYWluKSAmJgorCQkgICAgIXJlZ2RvbV9jaGFuZ2VzKHBlbmRpbmdfcmVxdWVzdC0+YWxwaGEyKSkKKwkJCXJldHVybiAtRUFMUkVBRFk7CisKIAkJcmV0dXJuIDA7CiAJfQogCiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLS8qIENhbGxlciBtdXN0IGhvbGQgJmNmZzgwMjExX2Rydl9tdXRleCAqLwotaW50IF9fcmVndWxhdG9yeV9oaW50KHN0cnVjdCB3aXBoeSAqd2lwaHksIGVudW0gcmVnX3NldF9ieSBzZXRfYnksCi0JCQljb25zdCBjaGFyICphbHBoYTIsCi0JCQl1MzIgY291bnRyeV9pZV9jaGVja3N1bSwKLQkJCWVudW0gZW52aXJvbm1lbnRfY2FwIGVudikKKy8qKgorICogX19yZWd1bGF0b3J5X2hpbnQgLSBoaW50IHRvIHRoZSB3aXJlbGVzcyBjb3JlIGEgcmVndWxhdG9yeSBkb21haW4KKyAqIEB3aXBoeTogaWYgdGhlIGhpbnQgY29tZXMgZnJvbSBjb3VudHJ5IGluZm9ybWF0aW9uIGZyb20gYW4gQVAsIHRoaXMKKyAqCWlzIHJlcXVpcmVkIHRvIGJlIHNldCB0byB0aGUgd2lwaHkgdGhhdCByZWNlaXZlZCB0aGUgaW5mb3JtYXRpb24KKyAqIEBwZW5kaW5nX3JlcXVlc3Q6IHRoZSByZWd1bGF0b3J5IHJlcXVlc3QgY3VycmVudGx5IGJlaW5nIHByb2Nlc3NlZAorICoKKyAqIFRoZSBXaXJlbGVzcyBzdWJzeXN0ZW0gY2FuIHVzZSB0aGlzIGZ1bmN0aW9uIHRvIGhpbnQgdG8gdGhlIHdpcmVsZXNzIGNvcmUKKyAqIHdoYXQgaXQgYmVsaWV2ZXMgc2hvdWxkIGJlIHRoZSBjdXJyZW50IHJlZ3VsYXRvcnkgZG9tYWluLgorICoKKyAqIFJldHVybnMgemVybyBpZiBhbGwgd2VudCBmaW5lLCAlLUVBTFJFQURZIGlmIGEgcmVndWxhdG9yeSBkb21haW4gaGFkCisgKiBhbHJlYWR5IGJlZW4gc2V0IG9yIG90aGVyIHN0YW5kYXJkIGVycm9yIGNvZGVzLgorICoKKyAqIENhbGxlciBtdXN0IGhvbGQgJmNmZzgwMjExX211dGV4CisgKi8KK3N0YXRpYyBpbnQgX19yZWd1bGF0b3J5X2hpbnQoc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCSAgICAgc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCAqcGVuZGluZ19yZXF1ZXN0KQogewotCXN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKnJlcXVlc3Q7CiAJYm9vbCBpbnRlcnNlY3QgPSBmYWxzZTsKIAlpbnQgciA9IDA7CiAKLQlyID0gaWdub3JlX3JlcXVlc3Qod2lwaHksIHNldF9ieSwgYWxwaGEyKTsKKwlhc3NlcnRfY2ZnODAyMTFfbG9jaygpOwogCi0JaWYgKHIgPT0gUkVHX0lOVEVSU0VDVCkKKwlyID0gaWdub3JlX3JlcXVlc3Qod2lwaHksIHBlbmRpbmdfcmVxdWVzdCk7CisKKwlpZiAociA9PSBSRUdfSU5URVJTRUNUKSB7CisJCWlmIChwZW5kaW5nX3JlcXVlc3QtPmluaXRpYXRvciA9PQorCQkgICAgTkw4MDIxMV9SRUdET01fU0VUX0JZX0RSSVZFUikgeworCQkJciA9IHJlZ19jb3B5X3JlZ2QoJndpcGh5LT5yZWdkLCBjZmc4MDIxMV9yZWdkb21haW4pOworCQkJaWYgKHIpIHsKKwkJCQlrZnJlZShwZW5kaW5nX3JlcXVlc3QpOworCQkJCXJldHVybiByOworCQkJfQorCQl9CiAJCWludGVyc2VjdCA9IHRydWU7Ci0JZWxzZSBpZiAocikKKwl9IGVsc2UgaWYgKHIpIHsKKwkJLyoKKwkJICogSWYgdGhlIHJlZ3VsYXRvcnkgZG9tYWluIGJlaW5nIHJlcXVlc3RlZCBieSB0aGUKKwkJICogZHJpdmVyIGhhcyBhbHJlYWR5IGJlZW4gc2V0IGp1c3QgY29weSBpdCB0byB0aGUKKwkJICogd2lwaHkKKwkJICovCisJCWlmIChyID09IC1FQUxSRUFEWSAmJgorCQkgICAgcGVuZGluZ19yZXF1ZXN0LT5pbml0aWF0b3IgPT0KKwkJICAgIE5MODAyMTFfUkVHRE9NX1NFVF9CWV9EUklWRVIpIHsKKwkJCXIgPSByZWdfY29weV9yZWdkKCZ3aXBoeS0+cmVnZCwgY2ZnODAyMTFfcmVnZG9tYWluKTsKKwkJCWlmIChyKSB7CisJCQkJa2ZyZWUocGVuZGluZ19yZXF1ZXN0KTsKKwkJCQlyZXR1cm4gcjsKKwkJCX0KKwkJCXIgPSAtRUFMUkVBRFk7CisJCQlnb3RvIG5ld19yZXF1ZXN0OworCQl9CisJCWtmcmVlKHBlbmRpbmdfcmVxdWVzdCk7CiAJCXJldHVybiByOworCX0KIAotCXJlcXVlc3QgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0KSwKLQkJCSAgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFyZXF1ZXN0KQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXJlcXVlc3QtPmFscGhhMlswXSA9IGFscGhhMlswXTsKLQlyZXF1ZXN0LT5hbHBoYTJbMV0gPSBhbHBoYTJbMV07Ci0JcmVxdWVzdC0+aW5pdGlhdG9yID0gc2V0X2J5OwotCXJlcXVlc3QtPndpcGh5ID0gd2lwaHk7Ci0JcmVxdWVzdC0+aW50ZXJzZWN0ID0gaW50ZXJzZWN0OwotCXJlcXVlc3QtPmNvdW50cnlfaWVfY2hlY2tzdW0gPSBjb3VudHJ5X2llX2NoZWNrc3VtOwotCXJlcXVlc3QtPmNvdW50cnlfaWVfZW52ID0gZW52OwotCituZXdfcmVxdWVzdDoKIAlrZnJlZShsYXN0X3JlcXVlc3QpOwotCWxhc3RfcmVxdWVzdCA9IHJlcXVlc3Q7CisKKwlsYXN0X3JlcXVlc3QgPSBwZW5kaW5nX3JlcXVlc3Q7CisJbGFzdF9yZXF1ZXN0LT5pbnRlcnNlY3QgPSBpbnRlcnNlY3Q7CisKKwlwZW5kaW5nX3JlcXVlc3QgPSBOVUxMOworCisJLyogV2hlbiByID09IFJFR19JTlRFUlNFQ1Qgd2UgZG8gbmVlZCB0byBjYWxsIENSREEgKi8KKwlpZiAociA8IDApIHsKKwkJLyoKKwkJICogU2luY2UgQ1JEQSB3aWxsIG5vdCBiZSBjYWxsZWQgaW4gdGhpcyBjYXNlIGFzIHdlIGFscmVhZHkKKwkJICogaGF2ZSBhcHBsaWVkIHRoZSByZXF1ZXN0ZWQgcmVndWxhdG9yeSBkb21haW4gYmVmb3JlIHdlIGp1c3QKKwkJICogaW5mb3JtIHVzZXJzcGFjZSB3ZSBoYXZlIHByb2Nlc3NlZCB0aGUgcmVxdWVzdAorCQkgKi8KKwkJaWYgKHIgPT0gLUVBTFJFQURZKQorCQkJbmw4MDIxMV9zZW5kX3JlZ19jaGFuZ2VfZXZlbnQobGFzdF9yZXF1ZXN0KTsKKwkJcmV0dXJuIHI7CisJfQorCiAJLyoKIAkgKiBOb3RlOiBXaGVuIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBlbmFibGVkCiAJICogQU5EIGlmIENSREEgaXMgTk9UIHByZXNlbnQgbm90aGluZyB3aWxsIGhhcHBlbiwgaWYgc29tZW9uZQpAQCAtMTA2NywyOSArMTQyNSwxOTQgQEAKIAkgKgogCSAqIHRvIGludGVyc2VjdCB3aXRoIHRoZSBzdGF0aWMgcmQKIAkgKi8KLQlyZXR1cm4gY2FsbF9jcmRhKGFscGhhMik7CisJcmV0dXJuIGNhbGxfY3JkYShsYXN0X3JlcXVlc3QtPmFscGhhMik7CiB9CiAKLXZvaWQgcmVndWxhdG9yeV9oaW50KHN0cnVjdCB3aXBoeSAqd2lwaHksIGNvbnN0IGNoYXIgKmFscGhhMikKKy8qIFRoaXMgY3VycmVudGx5IG9ubHkgcHJvY2Vzc2VzIHVzZXIgYW5kIGRyaXZlciByZWd1bGF0b3J5IGhpbnRzICovCitzdGF0aWMgdm9pZCByZWdfcHJvY2Vzc19oaW50KHN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKnJlZ19yZXF1ZXN0KQogeworCWludCByID0gMDsKKwlzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gTlVMTDsKKworCUJVR19PTighcmVnX3JlcXVlc3QtPmFscGhhMik7CisKKwltdXRleF9sb2NrKCZjZmc4MDIxMV9tdXRleCk7CisKKwlpZiAod2lwaHlfaWR4X3ZhbGlkKHJlZ19yZXF1ZXN0LT53aXBoeV9pZHgpKQorCQl3aXBoeSA9IHdpcGh5X2lkeF90b193aXBoeShyZWdfcmVxdWVzdC0+d2lwaHlfaWR4KTsKKworCWlmIChyZWdfcmVxdWVzdC0+aW5pdGlhdG9yID09IE5MODAyMTFfUkVHRE9NX1NFVF9CWV9EUklWRVIgJiYKKwkgICAgIXdpcGh5KSB7CisJCWtmcmVlKHJlZ19yZXF1ZXN0KTsKKwkJZ290byBvdXQ7CisJfQorCisJciA9IF9fcmVndWxhdG9yeV9oaW50KHdpcGh5LCByZWdfcmVxdWVzdCk7CisJLyogVGhpcyBpcyByZXF1aXJlZCBzbyB0aGF0IHRoZSBvcmlnXyogcGFyYW1ldGVycyBhcmUgc2F2ZWQgKi8KKwlpZiAociA9PSAtRUFMUkVBRFkgJiYgd2lwaHkgJiYgd2lwaHktPnN0cmljdF9yZWd1bGF0b3J5KQorCQl3aXBoeV91cGRhdGVfcmVndWxhdG9yeSh3aXBoeSwgcmVnX3JlcXVlc3QtPmluaXRpYXRvcik7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9tdXRleCk7Cit9CisKKy8qIFByb2Nlc3NlcyByZWd1bGF0b3J5IGhpbnRzLCB0aGlzIGlzIGFsbCB0aGUgTkw4MDIxMV9SRUdET01fU0VUX0JZXyogKi8KK3N0YXRpYyB2b2lkIHJlZ19wcm9jZXNzX3BlbmRpbmdfaGludHModm9pZCkKKwl7CisJc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCAqcmVnX3JlcXVlc3Q7CisKKwlzcGluX2xvY2soJnJlZ19yZXF1ZXN0c19sb2NrKTsKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJnJlZ19yZXF1ZXN0c19saXN0KSkgeworCQlyZWdfcmVxdWVzdCA9IGxpc3RfZmlyc3RfZW50cnkoJnJlZ19yZXF1ZXN0c19saXN0LAorCQkJCQkgICAgICAgc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCwKKwkJCQkJICAgICAgIGxpc3QpOworCQlsaXN0X2RlbF9pbml0KCZyZWdfcmVxdWVzdC0+bGlzdCk7CisKKwkJc3Bpbl91bmxvY2soJnJlZ19yZXF1ZXN0c19sb2NrKTsKKwkJcmVnX3Byb2Nlc3NfaGludChyZWdfcmVxdWVzdCk7CisJCXNwaW5fbG9jaygmcmVnX3JlcXVlc3RzX2xvY2spOworCX0KKwlzcGluX3VubG9jaygmcmVnX3JlcXVlc3RzX2xvY2spOworfQorCisvKiBQcm9jZXNzZXMgYmVhY29uIGhpbnRzIC0tIHRoaXMgaGFzIG5vdGhpbmcgdG8gZG8gd2l0aCBjb3VudHJ5IElFcyAqLworc3RhdGljIHZvaWQgcmVnX3Byb2Nlc3NfcGVuZGluZ19iZWFjb25faGludHModm9pZCkKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRydjsKKwlzdHJ1Y3QgcmVnX2JlYWNvbiAqcGVuZGluZ19iZWFjb24sICp0bXA7CisKKwltdXRleF9sb2NrKCZjZmc4MDIxMV9tdXRleCk7CisKKwkvKiBUaGlzIGdvZXMgdGhyb3VnaCB0aGUgX3BlbmRpbmdfIGJlYWNvbiBsaXN0ICovCisJc3Bpbl9sb2NrX2JoKCZyZWdfcGVuZGluZ19iZWFjb25zX2xvY2spOworCisJaWYgKGxpc3RfZW1wdHkoJnJlZ19wZW5kaW5nX2JlYWNvbnMpKSB7CisJCXNwaW5fdW5sb2NrX2JoKCZyZWdfcGVuZGluZ19iZWFjb25zX2xvY2spOworCQlnb3RvIG91dDsKKwl9CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocGVuZGluZ19iZWFjb24sIHRtcCwKKwkJCQkgJnJlZ19wZW5kaW5nX2JlYWNvbnMsIGxpc3QpIHsKKworCQlsaXN0X2RlbF9pbml0KCZwZW5kaW5nX2JlYWNvbi0+bGlzdCk7CisKKwkJLyogQXBwbGllcyB0aGUgYmVhY29uIGhpbnQgdG8gY3VycmVudCB3aXBoeXMgKi8KKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShkcnYsICZjZmc4MDIxMV9kcnZfbGlzdCwgbGlzdCkKKwkJCXdpcGh5X3VwZGF0ZV9uZXdfYmVhY29uKCZkcnYtPndpcGh5LCBwZW5kaW5nX2JlYWNvbik7CisKKwkJLyogUmVtZW1iZXJzIHRoZSBiZWFjb24gaGludCBmb3IgbmV3IHdpcGh5cyBvciByZWcgY2hhbmdlcyAqLworCQlsaXN0X2FkZF90YWlsKCZwZW5kaW5nX2JlYWNvbi0+bGlzdCwgJnJlZ19iZWFjb25fbGlzdCk7CisJfQorCisJc3Bpbl91bmxvY2tfYmgoJnJlZ19wZW5kaW5nX2JlYWNvbnNfbG9jayk7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9tdXRleCk7Cit9CisKK3N0YXRpYyB2b2lkIHJlZ190b2RvKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlyZWdfcHJvY2Vzc19wZW5kaW5nX2hpbnRzKCk7CisJcmVnX3Byb2Nlc3NfcGVuZGluZ19iZWFjb25faGludHMoKTsKK30KKworc3RhdGljIERFQ0xBUkVfV09SSyhyZWdfd29yaywgcmVnX3RvZG8pOworCitzdGF0aWMgdm9pZCBxdWV1ZV9yZWd1bGF0b3J5X3JlcXVlc3Qoc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCAqcmVxdWVzdCkKK3sKKwlzcGluX2xvY2soJnJlZ19yZXF1ZXN0c19sb2NrKTsKKwlsaXN0X2FkZF90YWlsKCZyZXF1ZXN0LT5saXN0LCAmcmVnX3JlcXVlc3RzX2xpc3QpOworCXNwaW5fdW5sb2NrKCZyZWdfcmVxdWVzdHNfbG9jayk7CisKKwlzY2hlZHVsZV93b3JrKCZyZWdfd29yayk7Cit9CisKKy8qIENvcmUgcmVndWxhdG9yeSBoaW50IC0tIGhhcHBlbnMgb25jZSBkdXJpbmcgY2ZnODAyMTFfaW5pdCgpICovCitzdGF0aWMgaW50IHJlZ3VsYXRvcnlfaGludF9jb3JlKGNvbnN0IGNoYXIgKmFscGhhMikKK3sKKwlzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0ICpyZXF1ZXN0OworCisJQlVHX09OKGxhc3RfcmVxdWVzdCk7CisKKwlyZXF1ZXN0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCksCisJCQkgIEdGUF9LRVJORUwpOworCWlmICghcmVxdWVzdCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXF1ZXN0LT5hbHBoYTJbMF0gPSBhbHBoYTJbMF07CisJcmVxdWVzdC0+YWxwaGEyWzFdID0gYWxwaGEyWzFdOworCXJlcXVlc3QtPmluaXRpYXRvciA9IE5MODAyMTFfUkVHRE9NX1NFVF9CWV9DT1JFOworCisJcXVldWVfcmVndWxhdG9yeV9yZXF1ZXN0KHJlcXVlc3QpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIFVzZXIgaGludHMgKi8KK2ludCByZWd1bGF0b3J5X2hpbnRfdXNlcihjb25zdCBjaGFyICphbHBoYTIpCit7CisJc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCAqcmVxdWVzdDsKKwogCUJVR19PTighYWxwaGEyKTsKIAotCW11dGV4X2xvY2soJmNmZzgwMjExX2Rydl9tdXRleCk7Ci0JX19yZWd1bGF0b3J5X2hpbnQod2lwaHksIFJFR0RPTV9TRVRfQllfRFJJVkVSLCBhbHBoYTIsIDAsIEVOVklST05fQU5ZKTsKLQltdXRleF91bmxvY2soJmNmZzgwMjExX2Rydl9tdXRleCk7CisJcmVxdWVzdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJlcXVlc3QpCisJCXJldHVybiAtRU5PTUVNOworCisJcmVxdWVzdC0+d2lwaHlfaWR4ID0gV0lQSFlfSURYX1NUQUxFOworCXJlcXVlc3QtPmFscGhhMlswXSA9IGFscGhhMlswXTsKKwlyZXF1ZXN0LT5hbHBoYTJbMV0gPSBhbHBoYTJbMV07CisJcmVxdWVzdC0+aW5pdGlhdG9yID0gTkw4MDIxMV9SRUdET01fU0VUX0JZX1VTRVIsCisKKwlxdWV1ZV9yZWd1bGF0b3J5X3JlcXVlc3QocmVxdWVzdCk7CisKKwlyZXR1cm4gMDsKK30KKworLyogRHJpdmVyIGhpbnRzICovCitpbnQgcmVndWxhdG9yeV9oaW50KHN0cnVjdCB3aXBoeSAqd2lwaHksIGNvbnN0IGNoYXIgKmFscGhhMikKK3sKKwlzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0ICpyZXF1ZXN0OworCisJQlVHX09OKCFhbHBoYTIpOworCUJVR19PTighd2lwaHkpOworCisJcmVxdWVzdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJlcXVlc3QpCisJCXJldHVybiAtRU5PTUVNOworCisJcmVxdWVzdC0+d2lwaHlfaWR4ID0gZ2V0X3dpcGh5X2lkeCh3aXBoeSk7CisKKwkvKiBNdXN0IGhhdmUgcmVnaXN0ZXJlZCB3aXBoeSBmaXJzdCAqLworCUJVR19PTighd2lwaHlfaWR4X3ZhbGlkKHJlcXVlc3QtPndpcGh5X2lkeCkpOworCisJcmVxdWVzdC0+YWxwaGEyWzBdID0gYWxwaGEyWzBdOworCXJlcXVlc3QtPmFscGhhMlsxXSA9IGFscGhhMlsxXTsKKwlyZXF1ZXN0LT5pbml0aWF0b3IgPSBOTDgwMjExX1JFR0RPTV9TRVRfQllfRFJJVkVSOworCisJcXVldWVfcmVndWxhdG9yeV9yZXF1ZXN0KHJlcXVlc3QpOworCisJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKHJlZ3VsYXRvcnlfaGludCk7CiAKIHN0YXRpYyBib29sIHJlZ19zYW1lX2NvdW50cnlfaWVfaGludChzdHJ1Y3Qgd2lwaHkgKndpcGh5LAogCQkJdTMyIGNvdW50cnlfaWVfY2hlY2tzdW0pCiB7Ci0JaWYgKCFsYXN0X3JlcXVlc3QtPndpcGh5KQorCXN0cnVjdCB3aXBoeSAqcmVxdWVzdF93aXBoeTsKKworCWFzc2VydF9jZmc4MDIxMV9sb2NrKCk7CisKKwlyZXF1ZXN0X3dpcGh5ID0gd2lwaHlfaWR4X3RvX3dpcGh5KGxhc3RfcmVxdWVzdC0+d2lwaHlfaWR4KTsKKworCWlmICghcmVxdWVzdF93aXBoeSkKIAkJcmV0dXJuIGZhbHNlOwotCWlmIChsaWtlbHkobGFzdF9yZXF1ZXN0LT53aXBoeSAhPSB3aXBoeSkpCisKKwlpZiAobGlrZWx5KHJlcXVlc3Rfd2lwaHkgIT0gd2lwaHkpKQogCQlyZXR1cm4gIWNvdW50cnlfaWVfaW50ZWdyaXR5X2NoYW5nZXMoY291bnRyeV9pZV9jaGVja3N1bSk7Ci0JLyogV2Ugc2hvdWxkIG5vdCBoYXZlIGxldCB0aGVzZSB0aHJvdWdoIGF0IHRoaXMgcG9pbnQsIHRoZXkKKwkvKgorCSAqIFdlIHNob3VsZCBub3QgaGF2ZSBsZXQgdGhlc2UgdGhyb3VnaCBhdCB0aGlzIHBvaW50LCB0aGV5CiAJICogc2hvdWxkIGhhdmUgYmVlbiBwaWNrZWQgdXAgZWFybGllciBieSB0aGUgZmlyc3QgYWxwaGEyIGNoZWNrCi0JICogb24gdGhlIGRldmljZSAqLworCSAqIG9uIHRoZSBkZXZpY2UKKwkgKi8KIAlpZiAoV0FSTl9PTighY291bnRyeV9pZV9pbnRlZ3JpdHlfY2hhbmdlcyhjb3VudHJ5X2llX2NoZWNrc3VtKSkpCiAJCXJldHVybiB0cnVlOwogCXJldHVybiBmYWxzZTsKQEAgLTExMDMsMTEgKzE2MjYsMTQgQEAKIAljaGFyIGFscGhhMlsyXTsKIAl1MzIgY2hlY2tzdW0gPSAwOwogCWVudW0gZW52aXJvbm1lbnRfY2FwIGVudiA9IEVOVklST05fQU5ZOworCXN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKnJlcXVlc3Q7CiAKLQlpZiAoIWxhc3RfcmVxdWVzdCkKKwltdXRleF9sb2NrKCZjZmc4MDIxMV9tdXRleCk7CisKKwlpZiAodW5saWtlbHkoIWxhc3RfcmVxdWVzdCkpIHsKKwkJbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9tdXRleCk7CiAJCXJldHVybjsKLQotCW11dGV4X2xvY2soJmNmZzgwMjExX2Rydl9tdXRleCk7CisJfQogCiAJLyogSUUgbGVuIG11c3QgYmUgZXZlbmx5IGRpdmlzaWJsZSBieSAyICovCiAJaWYgKGNvdW50cnlfaWVfbGVuICYgMHgwMSkKQEAgLTExMTYsOSArMTY0MiwxMSBAQAogCWlmIChjb3VudHJ5X2llX2xlbiA8IElFRUU4MDIxMV9DT1VOVFJZX0lFX01JTl9MRU4pCiAJCWdvdG8gb3V0OwogCi0JLyogUGVuZGluZyBjb3VudHJ5IElFIHByb2Nlc3NpbmcsIHRoaXMgY2FuIGhhcHBlbiBhZnRlciB3ZQorCS8qCisJICogUGVuZGluZyBjb3VudHJ5IElFIHByb2Nlc3NpbmcsIHRoaXMgY2FuIGhhcHBlbiBhZnRlciB3ZQogCSAqIGNhbGwgQ1JEQSBhbmQgd2FpdCBmb3IgYSByZXNwb25zZSBpZiBhIGJlYWNvbiB3YXMgcmVjZWl2ZWQgYmVmb3JlCi0JICogd2Ugd2VyZSBhYmxlIHRvIHByb2Nlc3MgdGhlIGxhc3QgcmVndWxhdG9yeV9oaW50XzExZCgpIGNhbGwgKi8KKwkgKiB3ZSB3ZXJlIGFibGUgdG8gcHJvY2VzcyB0aGUgbGFzdCByZWd1bGF0b3J5X2hpbnRfMTFkKCkgY2FsbAorCSAqLwogCWlmIChjb3VudHJ5X2llX3JlZ2RvbWFpbikKIAkJZ290byBvdXQ7CiAKQEAgLTExMzAsMzMgKzE2NTgsNDQgQEAKIAllbHNlIGlmIChjb3VudHJ5X2llWzJdID09ICdPJykKIAkJZW52ID0gRU5WSVJPTl9PVVRET09SOwogCi0JLyogV2Ugd2lsbCBydW4gdGhpcyBmb3IgKmV2ZXJ5KiBiZWFjb24gcHJvY2Vzc2VkIGZvciB0aGUgQlNTSUQsIHNvCisJLyoKKwkgKiBXZSB3aWxsIHJ1biB0aGlzIGZvciAqZXZlcnkqIGJlYWNvbiBwcm9jZXNzZWQgZm9yIHRoZSBCU1NJRCwgc28KIAkgKiB3ZSBvcHRpbWl6ZSBhbiBlYXJseSBjaGVjayB0byBleGl0IG91dCBlYXJseSBpZiB3ZSBkb24ndCBoYXZlIHRvCi0JICogZG8gYW55dGhpbmcgKi8KLQlpZiAobGlrZWx5KGxhc3RfcmVxdWVzdC0+d2lwaHkpKSB7CisJICogZG8gYW55dGhpbmcKKwkgKi8KKwlpZiAobGlrZWx5KHdpcGh5X2lkeF92YWxpZChsYXN0X3JlcXVlc3QtPndpcGh5X2lkeCkpKSB7CiAJCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZHJ2X2xhc3RfaWU7CiAKLQkJZHJ2X2xhc3RfaWUgPSB3aXBoeV90b19kZXYobGFzdF9yZXF1ZXN0LT53aXBoeSk7CisJCWRydl9sYXN0X2llID0KKwkJCWNmZzgwMjExX2Rydl9ieV93aXBoeV9pZHgobGFzdF9yZXF1ZXN0LT53aXBoeV9pZHgpOwogCi0JCS8qIExldHMga2VlcCB0aGlzIHNpbXBsZSAtLSB3ZSB0cnVzdCB0aGUgZmlyc3QgQVAKLQkJICogYWZ0ZXIgd2UgaW50ZXJzZWN0IHdpdGggQ1JEQSAqLwotCQlpZiAobGlrZWx5KGxhc3RfcmVxdWVzdC0+d2lwaHkgPT0gd2lwaHkpKSB7Ci0JCQkvKiBJZ25vcmUgSUVzIGNvbWluZyBpbiBvbiB0aGlzIHdpcGh5IHdpdGgKLQkJCSAqIHRoZSBzYW1lIGFscGhhMiBhbmQgZW52aXJvbm1lbnQgY2FwICovCisJCS8qCisJCSAqIExldHMga2VlcCB0aGlzIHNpbXBsZSAtLSB3ZSB0cnVzdCB0aGUgZmlyc3QgQVAKKwkJICogYWZ0ZXIgd2UgaW50ZXJzZWN0IHdpdGggQ1JEQQorCQkgKi8KKwkJaWYgKGxpa2VseSgmZHJ2X2xhc3RfaWUtPndpcGh5ID09IHdpcGh5KSkgeworCQkJLyoKKwkJCSAqIElnbm9yZSBJRXMgY29taW5nIGluIG9uIHRoaXMgd2lwaHkgd2l0aAorCQkJICogdGhlIHNhbWUgYWxwaGEyIGFuZCBlbnZpcm9ubWVudCBjYXAKKwkJCSAqLwogCQkJaWYgKGxpa2VseShhbHBoYTJfZXF1YWwoZHJ2X2xhc3RfaWUtPmNvdW50cnlfaWVfYWxwaGEyLAogCQkJCSAgYWxwaGEyKSAmJgogCQkJCSAgZW52ID09IGRydl9sYXN0X2llLT5lbnYpKSB7CiAJCQkJZ290byBvdXQ7CiAJCQl9Ci0JCQkvKiB0aGUgd2lwaHkgbW92ZWQgb24gdG8gYW5vdGhlciBCU1NJRCBvciB0aGUgQVAKKwkJCS8qCisJCQkgKiB0aGUgd2lwaHkgbW92ZWQgb24gdG8gYW5vdGhlciBCU1NJRCBvciB0aGUgQVAKIAkJCSAqIHdhcyByZWNvbmZpZ3VyZWQuIFhYWDogV2UgbmVlZCB0byBkZWFsIHdpdGggdGhlCiAJCQkgKiBjYXNlIHdoZXJlIHRoZSB1c2VyIHN1c3BlbmRzIGFuZCBnb2VzIHRvIGdvZXMKIAkJCSAqIHRvIGFub3RoZXIgY291bnRyeSwgYW5kIHRoZW4gZ2V0cyBJRXMgZnJvbSBhbgotCQkJICogQVAgd2l0aCBkaWZmZXJlbnQgc2V0dGluZ3MgKi8KKwkJCSAqIEFQIHdpdGggZGlmZmVyZW50IHNldHRpbmdzCisJCQkgKi8KIAkJCWdvdG8gb3V0OwogCQl9IGVsc2UgewotCQkJLyogSWdub3JlIElFcyBjb21pbmcgaW4gb24gdHdvIHNlcGFyYXRlIHdpcGh5cyB3aXRoCi0JCQkgKiB0aGUgc2FtZSBhbHBoYTIgYW5kIGVudmlyb25tZW50IGNhcCAqLworCQkJLyoKKwkJCSAqIElnbm9yZSBJRXMgY29taW5nIGluIG9uIHR3byBzZXBhcmF0ZSB3aXBoeXMgd2l0aAorCQkJICogdGhlIHNhbWUgYWxwaGEyIGFuZCBlbnZpcm9ubWVudCBjYXAKKwkJCSAqLwogCQkJaWYgKGxpa2VseShhbHBoYTJfZXF1YWwoZHJ2X2xhc3RfaWUtPmNvdW50cnlfaWVfYWxwaGEyLAogCQkJCSAgYWxwaGEyKSAmJgogCQkJCSAgZW52ID09IGRydl9sYXN0X2llLT5lbnYpKSB7CkBAIC0xMTcxLDI4ICsxNzEwLDk3IEBACiAJaWYgKCFyZCkKIAkJZ290byBvdXQ7CiAKLQkvKiBUaGlzIHdpbGwgbm90IGhhcHBlbiByaWdodCBub3cgYnV0IHdlIGxlYXZlIGl0IGhlcmUgZm9yIHRoZQorCS8qCisJICogVGhpcyB3aWxsIG5vdCBoYXBwZW4gcmlnaHQgbm93IGJ1dCB3ZSBsZWF2ZSBpdCBoZXJlIGZvciB0aGUKIAkgKiB0aGUgZnV0dXJlIHdoZW4gd2Ugd2FudCB0byBhZGQgc3VzcGVuZC9yZXN1bWUgc3VwcG9ydCBhbmQgaGF2aW5nCiAJICogdGhlIHVzZXIgbW92ZSB0byBhbm90aGVyIGNvdW50cnkgYWZ0ZXIgZG9pbmcgc28sIG9yIGhhdmluZyB0aGUgdXNlcgotCSAqIG1vdmUgdG8gYW5vdGhlciBBUC4gUmlnaHQgbm93IHdlIGp1c3QgdHJ1c3QgdGhlIGZpcnN0IEFQLiBUaGlzIGlzIHdoeQotCSAqIHRoaXMgaXMgbWFya2VkIGFzIGxpa2xleSgpLiBJZiB3ZSBoaXQgdGhpcyBiZWZvcmUgd2UgYWRkIHRoaXMgc3VwcG9ydAotCSAqIHdlIHdhbnQgdG8gYmUgaW5mb3JtZWQgb2YgaXQgYXMgaXQgd291bGQgaW5kaWNhdGUgYSBtaXN0YWtlIGluIHRoZQotCSAqIGN1cnJlbnQgZGVzaWduICAqLwotCWlmIChsaWtlbHkoV0FSTl9PTihyZWdfc2FtZV9jb3VudHJ5X2llX2hpbnQod2lwaHksIGNoZWNrc3VtKSkpKQotCQlnb3RvIG91dDsKKwkgKiBtb3ZlIHRvIGFub3RoZXIgQVAuIFJpZ2h0IG5vdyB3ZSBqdXN0IHRydXN0IHRoZSBmaXJzdCBBUC4KKwkgKgorCSAqIElmIHdlIGhpdCB0aGlzIGJlZm9yZSB3ZSBhZGQgdGhpcyBzdXBwb3J0IHdlIHdhbnQgdG8gYmUgaW5mb3JtZWQgb2YKKwkgKiBpdCBhcyBpdCB3b3VsZCBpbmRpY2F0ZSBhIG1pc3Rha2UgaW4gdGhlIGN1cnJlbnQgZGVzaWduCisJICovCisJaWYgKFdBUk5fT04ocmVnX3NhbWVfY291bnRyeV9pZV9oaW50KHdpcGh5LCBjaGVja3N1bSkpKQorCQlnb3RvIGZyZWVfcmRfb3V0OwogCi0JLyogV2Uga2VlcCB0aGlzIGFyb3VuZCBmb3Igd2hlbiBDUkRBIGNvbWVzIGJhY2sgd2l0aCBhIHJlc3BvbnNlIHNvCi0JICogd2UgY2FuIGludGVyc2VjdCB3aXRoIHRoYXQgKi8KKwlyZXF1ZXN0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCksIEdGUF9LRVJORUwpOworCWlmICghcmVxdWVzdCkKKwkJZ290byBmcmVlX3JkX291dDsKKworCS8qCisJICogV2Uga2VlcCB0aGlzIGFyb3VuZCBmb3Igd2hlbiBDUkRBIGNvbWVzIGJhY2sgd2l0aCBhIHJlc3BvbnNlIHNvCisJICogd2UgY2FuIGludGVyc2VjdCB3aXRoIHRoYXQKKwkgKi8KIAljb3VudHJ5X2llX3JlZ2RvbWFpbiA9IHJkOwogCi0JX19yZWd1bGF0b3J5X2hpbnQod2lwaHksIFJFR0RPTV9TRVRfQllfQ09VTlRSWV9JRSwKLQkJY291bnRyeV9pZV9yZWdkb21haW4tPmFscGhhMiwgY2hlY2tzdW0sIGVudik7CisJcmVxdWVzdC0+d2lwaHlfaWR4ID0gZ2V0X3dpcGh5X2lkeCh3aXBoeSk7CisJcmVxdWVzdC0+YWxwaGEyWzBdID0gcmQtPmFscGhhMlswXTsKKwlyZXF1ZXN0LT5hbHBoYTJbMV0gPSByZC0+YWxwaGEyWzFdOworCXJlcXVlc3QtPmluaXRpYXRvciA9IE5MODAyMTFfUkVHRE9NX1NFVF9CWV9DT1VOVFJZX0lFOworCXJlcXVlc3QtPmNvdW50cnlfaWVfY2hlY2tzdW0gPSBjaGVja3N1bTsKKwlyZXF1ZXN0LT5jb3VudHJ5X2llX2VudiA9IGVudjsKIAorCW11dGV4X3VubG9jaygmY2ZnODAyMTFfbXV0ZXgpOworCisJcXVldWVfcmVndWxhdG9yeV9yZXF1ZXN0KHJlcXVlc3QpOworCisJcmV0dXJuOworCitmcmVlX3JkX291dDoKKwlrZnJlZShyZCk7CiBvdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9kcnZfbXV0ZXgpOworCW11dGV4X3VubG9jaygmY2ZnODAyMTFfbXV0ZXgpOwogfQogRVhQT1JUX1NZTUJPTChyZWd1bGF0b3J5X2hpbnRfMTFkKTsKIAorc3RhdGljIGJvb2wgZnJlcV9pc19jaGFuXzEyXzEzXzE0KHUxNiBmcmVxKQoreworCWlmIChmcmVxID09IGllZWU4MDIxMV9jaGFubmVsX3RvX2ZyZXF1ZW5jeSgxMikgfHwKKwkgICAgZnJlcSA9PSBpZWVlODAyMTFfY2hhbm5lbF90b19mcmVxdWVuY3koMTMpIHx8CisJICAgIGZyZXEgPT0gaWVlZTgwMjExX2NoYW5uZWxfdG9fZnJlcXVlbmN5KDE0KSkKKwkJcmV0dXJuIHRydWU7CisJcmV0dXJuIGZhbHNlOworfQorCitpbnQgcmVndWxhdG9yeV9oaW50X2ZvdW5kX2JlYWNvbihzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmJlYWNvbl9jaGFuLAorCQkJCSBnZnBfdCBnZnApCit7CisJc3RydWN0IHJlZ19iZWFjb24gKnJlZ19iZWFjb247CisKKwlpZiAobGlrZWx5KChiZWFjb25fY2hhbi0+YmVhY29uX2ZvdW5kIHx8CisJICAgIChiZWFjb25fY2hhbi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9SQURBUikgfHwKKwkgICAgKGJlYWNvbl9jaGFuLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFogJiYKKwkgICAgICFmcmVxX2lzX2NoYW5fMTJfMTNfMTQoYmVhY29uX2NoYW4tPmNlbnRlcl9mcmVxKSkpKSkKKwkJcmV0dXJuIDA7CisKKwlyZWdfYmVhY29uID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJlZ19iZWFjb24pLCBnZnApOworCWlmICghcmVnX2JlYWNvbikKKwkJcmV0dXJuIC1FTk9NRU07CisKKyNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfUkVHX0RFQlVHCisJcHJpbnRrKEtFUk5fREVCVUcgImNmZzgwMjExOiBGb3VuZCBuZXcgYmVhY29uIG9uICIKKwkJImZyZXF1ZW5jeTogJWQgTUh6IChDaCAlZCkgb24gJXNcbiIsCisJCWJlYWNvbl9jaGFuLT5jZW50ZXJfZnJlcSwKKwkJaWVlZTgwMjExX2ZyZXF1ZW5jeV90b19jaGFubmVsKGJlYWNvbl9jaGFuLT5jZW50ZXJfZnJlcSksCisJCXdpcGh5X25hbWUod2lwaHkpKTsKKyNlbmRpZgorCW1lbWNweSgmcmVnX2JlYWNvbi0+Y2hhbiwgYmVhY29uX2NoYW4sCisJCXNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwpKTsKKworCisJLyoKKwkgKiBTaW5jZSB3ZSBjYW4gYmUgY2FsbGVkIGZyb20gQkggb3IgYW5kIG5vbi1CSCBjb250ZXh0CisJICogd2UgbXVzdCB1c2Ugc3Bpbl9sb2NrX2JoKCkKKwkgKi8KKwlzcGluX2xvY2tfYmgoJnJlZ19wZW5kaW5nX2JlYWNvbnNfbG9jayk7CisJbGlzdF9hZGRfdGFpbCgmcmVnX2JlYWNvbi0+bGlzdCwgJnJlZ19wZW5kaW5nX2JlYWNvbnMpOworCXNwaW5fdW5sb2NrX2JoKCZyZWdfcGVuZGluZ19iZWFjb25zX2xvY2spOworCisJc2NoZWR1bGVfd29yaygmcmVnX3dvcmspOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyB2b2lkIHByaW50X3JkX3J1bGVzKGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpyZCkKIHsKIAl1bnNpZ25lZCBpbnQgaTsKQEAgLTEyMDgsOCArMTgxNiwxMCBAQAogCQlmcmVxX3JhbmdlID0gJnJlZ19ydWxlLT5mcmVxX3JhbmdlOwogCQlwb3dlcl9ydWxlID0gJnJlZ19ydWxlLT5wb3dlcl9ydWxlOwogCi0JCS8qIFRoZXJlIG1heSBub3QgYmUgZG9jdW1lbnRhdGlvbiBmb3IgbWF4IGFudGVubmEgZ2FpbgotCQkgKiBpbiBjZXJ0YWluIHJlZ2lvbnMgKi8KKwkJLyoKKwkJICogVGhlcmUgbWF5IG5vdCBiZSBkb2N1bWVudGF0aW9uIGZvciBtYXggYW50ZW5uYSBnYWluCisJCSAqIGluIGNlcnRhaW4gcmVnaW9ucworCQkgKi8KIAkJaWYgKHBvd2VyX3J1bGUtPm1heF9hbnRlbm5hX2dhaW4pCiAJCQlwcmludGsoS0VSTl9JTkZPICJcdCglZCBLSHogLSAlZCBLSHogQCAlZCBLSHopLCAiCiAJCQkJIiglZCBtQmksICVkIG1CbSlcbiIsCkBAIC0xMjMyLDEzICsxODQyLDEzIEBACiB7CiAKIAlpZiAoaXNfaW50ZXJzZWN0ZWRfYWxwaGEyKHJkLT5hbHBoYTIpKSB7Ci0JCXN0cnVjdCB3aXBoeSAqd2lwaHkgPSBOVUxMOwotCQlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRydjsKIAotCQlpZiAobGFzdF9yZXF1ZXN0LT5pbml0aWF0b3IgPT0gUkVHRE9NX1NFVF9CWV9DT1VOVFJZX0lFKSB7Ci0JCQlpZiAobGFzdF9yZXF1ZXN0LT53aXBoeSkgewotCQkJCXdpcGh5ID0gbGFzdF9yZXF1ZXN0LT53aXBoeTsKLQkJCQlkcnYgPSB3aXBoeV90b19kZXYod2lwaHkpOworCQlpZiAobGFzdF9yZXF1ZXN0LT5pbml0aWF0b3IgPT0KKwkJICAgIE5MODAyMTFfUkVHRE9NX1NFVF9CWV9DT1VOVFJZX0lFKSB7CisJCQlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRydjsKKwkJCWRydiA9IGNmZzgwMjExX2Rydl9ieV93aXBoeV9pZHgoCisJCQkJbGFzdF9yZXF1ZXN0LT53aXBoeV9pZHgpOworCQkJaWYgKGRydikgewogCQkJCXByaW50ayhLRVJOX0lORk8gImNmZzgwMjExOiBDdXJyZW50IHJlZ3VsYXRvcnkgIgogCQkJCQkiZG9tYWluIHVwZGF0ZWQgYnkgQVAgdG86ICVjJWNcbiIsCiAJCQkJCWRydi0+Y291bnRyeV9pZV9hbHBoYTJbMF0sCkBAIC0xMjQ4LDcgKzE4NTgsNyBAQAogCQkJCQkiZG9tYWluIGludGVyc2VjdGVkOiBcbiIpOwogCQl9IGVsc2UKIAkJCQlwcmludGsoS0VSTl9JTkZPICJjZmc4MDIxMTogQ3VycmVudCByZWd1bGF0b3J5ICIKLQkJCQkJImludGVyc2VjdGVkOiBcbiIpOworCQkJCQkiZG9tYWluIGludGVyc2VjdGVkOiBcbiIpOwogCX0gZWxzZSBpZiAoaXNfd29ybGRfcmVnZG9tKHJkLT5hbHBoYTIpKQogCQlwcmludGsoS0VSTl9JTkZPICJjZmc4MDIxMTogV29ybGQgcmVndWxhdG9yeSAiCiAJCQkiZG9tYWluIHVwZGF0ZWQ6XG4iKTsKQEAgLTEzMDQsNyArMTkxNCw3IEBACiB7CiAJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKmludGVyc2VjdGVkX3JkID0gTlVMTDsKIAlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRydiA9IE5VTEw7Ci0Jc3RydWN0IHdpcGh5ICp3aXBoeSA9IE5VTEw7CisJc3RydWN0IHdpcGh5ICpyZXF1ZXN0X3dpcGh5OwogCS8qIFNvbWUgYmFzaWMgc2FuaXR5IGNoZWNrcyBmaXJzdCAqLwogCiAJaWYgKGlzX3dvcmxkX3JlZ2RvbShyZC0+YWxwaGEyKSkgewpAQCAtMTMyMSwyMyArMTkzMSwyNyBAQAogCWlmICghbGFzdF9yZXF1ZXN0KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCS8qIExldHMgb25seSBib3RoZXIgcHJvY2VlZGluZyBvbiB0aGUgc2FtZSBhbHBoYTIgaWYgdGhlIGN1cnJlbnQKKwkvKgorCSAqIExldHMgb25seSBib3RoZXIgcHJvY2VlZGluZyBvbiB0aGUgc2FtZSBhbHBoYTIgaWYgdGhlIGN1cnJlbnQKIAkgKiByZCBpcyBub24gc3RhdGljIChpdCBtZWFucyBDUkRBIHdhcyBwcmVzZW50IGFuZCB3YXMgdXNlZCBsYXN0KQotCSAqIGFuZCB0aGUgcGVuZGluZyByZXF1ZXN0IGNhbWUgaW4gZnJvbSBhIGNvdW50cnkgSUUgKi8KLQlpZiAobGFzdF9yZXF1ZXN0LT5pbml0aWF0b3IgIT0gUkVHRE9NX1NFVF9CWV9DT1VOVFJZX0lFKSB7Ci0JCS8qIElmIHNvbWVvbmUgZWxzZSBhc2tlZCB1cyB0byBjaGFuZ2UgdGhlIHJkIGxldHMgb25seSBib3RoZXIKLQkJICogY2hlY2tpbmcgaWYgdGhlIGFscGhhMiBjaGFuZ2VzIGlmIENSREEgd2FzIGFscmVhZHkgY2FsbGVkICovCisJICogYW5kIHRoZSBwZW5kaW5nIHJlcXVlc3QgY2FtZSBpbiBmcm9tIGEgY291bnRyeSBJRQorCSAqLworCWlmIChsYXN0X3JlcXVlc3QtPmluaXRpYXRvciAhPSBOTDgwMjExX1JFR0RPTV9TRVRfQllfQ09VTlRSWV9JRSkgeworCQkvKgorCQkgKiBJZiBzb21lb25lIGVsc2UgYXNrZWQgdXMgdG8gY2hhbmdlIHRoZSByZCBsZXRzIG9ubHkgYm90aGVyCisJCSAqIGNoZWNraW5nIGlmIHRoZSBhbHBoYTIgY2hhbmdlcyBpZiBDUkRBIHdhcyBhbHJlYWR5IGNhbGxlZAorCQkgKi8KIAkJaWYgKCFpc19vbGRfc3RhdGljX3JlZ2RvbShjZmc4MDIxMV9yZWdkb21haW4pICYmCi0JCSAgICAhcmVnZG9tX2NoYW5nZWQocmQtPmFscGhhMikpCisJCSAgICAhcmVnZG9tX2NoYW5nZXMocmQtPmFscGhhMikpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQl3aXBoeSA9IGxhc3RfcmVxdWVzdC0+d2lwaHk7Ci0KLQkvKiBOb3cgbGV0cyBzZXQgdGhlIHJlZ3VsYXRvcnkgZG9tYWluLCB1cGRhdGUgYWxsIGRyaXZlciBjaGFubmVscworCS8qCisJICogTm93IGxldHMgc2V0IHRoZSByZWd1bGF0b3J5IGRvbWFpbiwgdXBkYXRlIGFsbCBkcml2ZXIgY2hhbm5lbHMKIAkgKiBhbmQgZmluYWxseSBpbmZvcm0gdGhlbSBvZiB3aGF0IHdlIGhhdmUgZG9uZSwgaW4gY2FzZSB0aGV5IHdhbnQKIAkgKiB0byByZXZpZXcgb3IgYWRqdXN0IHRoZWlyIG93biBzZXR0aW5ncyBiYXNlZCBvbiB0aGVpciBvd24KLQkgKiBpbnRlcm5hbCBFRVBST00gZGF0YSAqLworCSAqIGludGVybmFsIEVFUFJPTSBkYXRhCisJICovCiAKIAlpZiAoV0FSTl9PTighcmVnX2lzX3ZhbGlkX3JlcXVlc3QocmQtPmFscGhhMikpKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTEzNDksNyArMTk2MywyOCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwlyZXF1ZXN0X3dpcGh5ID0gd2lwaHlfaWR4X3RvX3dpcGh5KGxhc3RfcmVxdWVzdC0+d2lwaHlfaWR4KTsKKwogCWlmICghbGFzdF9yZXF1ZXN0LT5pbnRlcnNlY3QpIHsKKwkJaW50IHI7CisKKwkJaWYgKGxhc3RfcmVxdWVzdC0+aW5pdGlhdG9yICE9IE5MODAyMTFfUkVHRE9NX1NFVF9CWV9EUklWRVIpIHsKKwkJCXJlc2V0X3JlZ2RvbWFpbnMoKTsKKwkJCWNmZzgwMjExX3JlZ2RvbWFpbiA9IHJkOworCQkJcmV0dXJuIDA7CisJCX0KKworCQkvKgorCQkgKiBGb3IgYSBkcml2ZXIgaGludCwgbGV0cyBjb3B5IHRoZSByZWd1bGF0b3J5IGRvbWFpbiB0aGUKKwkJICogZHJpdmVyIHdhbnRlZCB0byB0aGUgd2lwaHkgdG8gZGVhbCB3aXRoIGNvbmZsaWN0cworCQkgKi8KKworCQlCVUdfT04ocmVxdWVzdF93aXBoeS0+cmVnZCk7CisKKwkJciA9IHJlZ19jb3B5X3JlZ2QoJnJlcXVlc3Rfd2lwaHktPnJlZ2QsIHJkKTsKKwkJaWYgKHIpCisJCQlyZXR1cm4gcjsKKwogCQlyZXNldF9yZWdkb21haW5zKCk7CiAJCWNmZzgwMjExX3JlZ2RvbWFpbiA9IHJkOwogCQlyZXR1cm4gMDsKQEAgLTEzNTcsMTQgKzE5OTIsMjIgQEAKIAogCS8qIEludGVyc2VjdGlvbiByZXF1aXJlcyBhIGJpdCBtb3JlIHdvcmsgKi8KIAotCWlmIChsYXN0X3JlcXVlc3QtPmluaXRpYXRvciAhPSBSRUdET01fU0VUX0JZX0NPVU5UUllfSUUpIHsKKwlpZiAobGFzdF9yZXF1ZXN0LT5pbml0aWF0b3IgIT0gTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPVU5UUllfSUUpIHsKIAogCQlpbnRlcnNlY3RlZF9yZCA9IHJlZ2RvbV9pbnRlcnNlY3QocmQsIGNmZzgwMjExX3JlZ2RvbWFpbik7CiAJCWlmICghaW50ZXJzZWN0ZWRfcmQpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAotCQkvKiBXZSBjYW4gdHJhc2ggd2hhdCBDUkRBIHByb3ZpZGVkIG5vdyAqLwotCQlrZnJlZShyZCk7CisJCS8qCisJCSAqIFdlIGNhbiB0cmFzaCB3aGF0IENSREEgcHJvdmlkZWQgbm93LgorCQkgKiBIb3dldmVyIGlmIGEgZHJpdmVyIHJlcXVlc3RlZCB0aGlzIHNwZWNpZmljIHJlZ3VsYXRvcnkKKwkJICogZG9tYWluIHdlIGtlZXAgaXQgZm9yIGl0cyBwcml2YXRlIHVzZQorCQkgKi8KKwkJaWYgKGxhc3RfcmVxdWVzdC0+aW5pdGlhdG9yID09IE5MODAyMTFfUkVHRE9NX1NFVF9CWV9EUklWRVIpCisJCQlyZXF1ZXN0X3dpcGh5LT5yZWdkID0gcmQ7CisJCWVsc2UKKwkJCWtmcmVlKHJkKTsKKwogCQlyZCA9IE5VTEw7CiAKIAkJcmVzZXRfcmVnZG9tYWlucygpOwpAQCAtMTM4MSw4ICsyMDI0LDEwIEBACiAJQlVHX09OKCFjb3VudHJ5X2llX3JlZ2RvbWFpbik7CiAKIAlpZiAocmQgIT0gY291bnRyeV9pZV9yZWdkb21haW4pIHsKLQkJLyogSW50ZXJzZWN0IHdoYXQgQ1JEQSByZXR1cm5lZCBhbmQgb3VyIHdoYXQgd2UKLQkJICogaGFkIGJ1aWx0IGZyb20gdGhlIENvdW50cnkgSUUgcmVjZWl2ZWQgKi8KKwkJLyoKKwkJICogSW50ZXJzZWN0IHdoYXQgQ1JEQSByZXR1cm5lZCBhbmQgb3VyIHdoYXQgd2UKKwkJICogaGFkIGJ1aWx0IGZyb20gdGhlIENvdW50cnkgSUUgcmVjZWl2ZWQKKwkJICovCiAKIAkJaW50ZXJzZWN0ZWRfcmQgPSByZWdkb21faW50ZXJzZWN0KHJkLCBjb3VudHJ5X2llX3JlZ2RvbWFpbik7CiAKQEAgLTEzOTIsMTYgKzIwMzcsMTggQEAKIAkJa2ZyZWUoY291bnRyeV9pZV9yZWdkb21haW4pOwogCQljb3VudHJ5X2llX3JlZ2RvbWFpbiA9IE5VTEw7CiAJfSBlbHNlIHsKLQkJLyogVGhpcyB3b3VsZCBoYXBwZW4gd2hlbiBDUkRBIHdhcyBub3QgcHJlc2VudCBhbmQKKwkJLyoKKwkJICogVGhpcyB3b3VsZCBoYXBwZW4gd2hlbiBDUkRBIHdhcyBub3QgcHJlc2VudCBhbmQKIAkJICogT0xEX1JFR1VMQVRPUlkgd2FzIGVuYWJsZWQuIFdlIGludGVyc2VjdCBvdXIgQ291bnRyeQotCQkgKiBJRSByZCBhbmQgd2hhdCB3YXMgc2V0IG9uIGNmZzgwMjExIG9yaWdpbmFsbHkgKi8KKwkJICogSUUgcmQgYW5kIHdoYXQgd2FzIHNldCBvbiBjZmc4MDIxMSBvcmlnaW5hbGx5CisJCSAqLwogCQlpbnRlcnNlY3RlZF9yZCA9IHJlZ2RvbV9pbnRlcnNlY3QocmQsIGNmZzgwMjExX3JlZ2RvbWFpbik7CiAJfQogCiAJaWYgKCFpbnRlcnNlY3RlZF9yZCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlkcnYgPSB3aXBoeV90b19kZXYod2lwaHkpOworCWRydiA9IHdpcGh5X3RvX2RldihyZXF1ZXN0X3dpcGh5KTsKIAogCWRydi0+Y291bnRyeV9pZV9hbHBoYTJbMF0gPSByZC0+YWxwaGEyWzBdOwogCWRydi0+Y291bnRyeV9pZV9hbHBoYTJbMV0gPSByZC0+YWxwaGEyWzFdOwpAQCAtMTQxOSwxMyArMjA2NiwxNyBAQAogfQogCiAKLS8qIFVzZSB0aGlzIGNhbGwgdG8gc2V0IHRoZSBjdXJyZW50IHJlZ3VsYXRvcnkgZG9tYWluLiBDb25mbGljdHMgd2l0aAorLyoKKyAqIFVzZSB0aGlzIGNhbGwgdG8gc2V0IHRoZSBjdXJyZW50IHJlZ3VsYXRvcnkgZG9tYWluLiBDb25mbGljdHMgd2l0aAogICogbXVsdGlwbGUgZHJpdmVycyBjYW4gYmUgaXJvbmVkIG91dCBsYXRlci4gQ2FsbGVyIG11c3QndmUgYWxyZWFkeQotICoga21hbGxvYydkIHRoZSByZCBzdHJ1Y3R1cmUuIENhbGxlciBtdXN0IGhvbGQgY2ZnODAyMTFfZHJ2X211dGV4ICovCisgKiBrbWFsbG9jJ2QgdGhlIHJkIHN0cnVjdHVyZS4gQ2FsbGVyIG11c3QgaG9sZCBjZmc4MDIxMV9tdXRleAorICovCiBpbnQgc2V0X3JlZ2RvbShjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqcmQpCiB7CiAJaW50IHI7CiAKKwlhc3NlcnRfY2ZnODAyMTFfbG9jaygpOworCiAJLyogTm90ZSB0aGF0IHRoaXMgZG9lc24ndCB1cGRhdGUgdGhlIHdpcGh5cywgdGhpcyBpcyBkb25lIGJlbG93ICovCiAJciA9IF9fc2V0X3JlZ2RvbShyZCk7CiAJaWYgKHIpIHsKQEAgLTE0NDIsNTYgKzIwOTMsODcgQEAKIAogCXByaW50X3JlZ2RvbWFpbihjZmc4MDIxMV9yZWdkb21haW4pOwogCisJbmw4MDIxMV9zZW5kX3JlZ19jaGFuZ2VfZXZlbnQobGFzdF9yZXF1ZXN0KTsKKwogCXJldHVybiByOwogfQogCi0vKiBDYWxsZXIgbXVzdCBob2xkIGNmZzgwMjExX2Rydl9tdXRleCAqLworLyogQ2FsbGVyIG11c3QgaG9sZCBjZmc4MDIxMV9tdXRleCAqLwogdm9pZCByZWdfZGV2aWNlX3JlbW92ZShzdHJ1Y3Qgd2lwaHkgKndpcGh5KQogewotCWlmICghbGFzdF9yZXF1ZXN0IHx8ICFsYXN0X3JlcXVlc3QtPndpcGh5KQorCXN0cnVjdCB3aXBoeSAqcmVxdWVzdF93aXBoeTsKKworCWFzc2VydF9jZmc4MDIxMV9sb2NrKCk7CisKKwlyZXF1ZXN0X3dpcGh5ID0gd2lwaHlfaWR4X3RvX3dpcGh5KGxhc3RfcmVxdWVzdC0+d2lwaHlfaWR4KTsKKworCWtmcmVlKHdpcGh5LT5yZWdkKTsKKwlpZiAoIWxhc3RfcmVxdWVzdCB8fCAhcmVxdWVzdF93aXBoeSkKIAkJcmV0dXJuOwotCWlmIChsYXN0X3JlcXVlc3QtPndpcGh5ICE9IHdpcGh5KQorCWlmIChyZXF1ZXN0X3dpcGh5ICE9IHdpcGh5KQogCQlyZXR1cm47Ci0JbGFzdF9yZXF1ZXN0LT53aXBoeSA9IE5VTEw7CisJbGFzdF9yZXF1ZXN0LT53aXBoeV9pZHggPSBXSVBIWV9JRFhfU1RBTEU7CiAJbGFzdF9yZXF1ZXN0LT5jb3VudHJ5X2llX2VudiA9IEVOVklST05fQU5ZOwogfQogCiBpbnQgcmVndWxhdG9yeV9pbml0KHZvaWQpCiB7Ci0JaW50IGVycjsKKwlpbnQgZXJyID0gMDsKIAogCXJlZ19wZGV2ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgicmVndWxhdG9yeSIsIDAsIE5VTEwsIDApOwogCWlmIChJU19FUlIocmVnX3BkZXYpKQogCQlyZXR1cm4gUFRSX0VSUihyZWdfcGRldik7CiAKKwlzcGluX2xvY2tfaW5pdCgmcmVnX3JlcXVlc3RzX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZyZWdfcGVuZGluZ19iZWFjb25zX2xvY2spOworCiAjaWZkZWYgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZCiAJY2ZnODAyMTFfcmVnZG9tYWluID0gc3RhdGljX3JlZ2RvbShpZWVlODAyMTFfcmVnZG9tKTsKIAogCXByaW50ayhLRVJOX0lORk8gImNmZzgwMjExOiBVc2luZyBzdGF0aWMgcmVndWxhdG9yeSBkb21haW4gaW5mb1xuIik7CiAJcHJpbnRfcmVnZG9tYWluX2luZm8oY2ZnODAyMTFfcmVnZG9tYWluKTsKLQkvKiBUaGUgb2xkIGNvZGUgc3RpbGwgcmVxdWVzdHMgZm9yIGEgbmV3IHJlZ2RvbWFpbiBhbmQgaWYKKwkvKgorCSAqIFRoZSBvbGQgY29kZSBzdGlsbCByZXF1ZXN0cyBmb3IgYSBuZXcgcmVnZG9tYWluIGFuZCBpZgogCSAqIHlvdSBoYXZlIENSREEgeW91IGdldCBpdCB1cGRhdGVkLCBvdGhlcndpc2UgeW91IGdldAogCSAqIHN0dWNrIHdpdGggdGhlIHN0YXRpYyB2YWx1ZXMuIFdlIGlnbm9yZSAiRVUiIGNvZGUgYXMKLQkgKiB0aGF0IGlzIG5vdCBhIHZhbGlkIElTTyAvIElFQyAzMTY2IGFscGhhMiAqLworCSAqIHRoYXQgaXMgbm90IGEgdmFsaWQgSVNPIC8gSUVDIDMxNjYgYWxwaGEyCisJICovCiAJaWYgKGllZWU4MDIxMV9yZWdkb21bMF0gIT0gJ0UnIHx8IGllZWU4MDIxMV9yZWdkb21bMV0gIT0gJ1UnKQotCQllcnIgPSBfX3JlZ3VsYXRvcnlfaGludChOVUxMLCBSRUdET01fU0VUX0JZX0NPUkUsCi0JCQkJCWllZWU4MDIxMV9yZWdkb20sIDAsIEVOVklST05fQU5ZKTsKKwkJZXJyID0gcmVndWxhdG9yeV9oaW50X2NvcmUoaWVlZTgwMjExX3JlZ2RvbSk7CiAjZWxzZQogCWNmZzgwMjExX3JlZ2RvbWFpbiA9IGNmZzgwMjExX3dvcmxkX3JlZ2RvbTsKIAotCWVyciA9IF9fcmVndWxhdG9yeV9oaW50KE5VTEwsIFJFR0RPTV9TRVRfQllfQ09SRSwgIjAwIiwgMCwgRU5WSVJPTl9BTlkpOwotCWlmIChlcnIpCi0JCXByaW50ayhLRVJOX0VSUiAiY2ZnODAyMTE6IGNhbGxpbmcgQ1JEQSBmYWlsZWQgLSAiCi0JCSAgICAgICAidW5hYmxlIHRvIHVwZGF0ZSB3b3JsZCByZWd1bGF0b3J5IGRvbWFpbiwgIgotCQkgICAgICAgInVzaW5nIHN0YXRpYyBkZWZpbml0aW9uXG4iKTsKKwllcnIgPSByZWd1bGF0b3J5X2hpbnRfY29yZSgiMDAiKTsKICNlbmRpZgorCWlmIChlcnIpIHsKKwkJaWYgKGVyciA9PSAtRU5PTUVNKQorCQkJcmV0dXJuIGVycjsKKwkJLyoKKwkJICogTi5CLiBrb2JqZWN0X3VldmVudF9lbnYoKSBjYW4gZmFpbCBtYWlubHkgZm9yIHdoZW4gd2UncmUgb3V0CisJCSAqIG1lbW9yeSB3aGljaCBpcyBoYW5kbGVkIGFuZCBwcm9wYWdhdGVkIGFwcHJvcHJpYXRlbHkgYWJvdmUKKwkJICogYnV0IGl0IGNhbiBhbHNvIGZhaWwgZHVyaW5nIGEgbmV0bGlua19icm9hZGNhc3QoKSBvciBkdXJpbmcKKwkJICogZWFybHkgYm9vdCBmb3IgY2FsbF91c2VybW9kZWhlbHBlcigpLiBGb3Igbm93IHRyZWF0IHRoZXNlCisJCSAqIGVycm9ycyBhcyBub24tZmF0YWwuCisJCSAqLworCQlwcmludGsoS0VSTl9FUlIgImNmZzgwMjExOiBrb2JqZWN0X3VldmVudF9lbnYoKSB3YXMgdW5hYmxlICIKKwkJCSJ0byBjYWxsIENSREEgZHVyaW5nIGluaXQiKTsKKyNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfUkVHX0RFQlVHCisJCS8qIFdlIHdhbnQgdG8gZmluZCBvdXQgZXhhY3RseSB3aHkgd2hlbiBkZWJ1Z2dpbmcgKi8KKwkJV0FSTl9PTihlcnIpOworI2VuZGlmCisJfQogCiAJcmV0dXJuIDA7CiB9CiAKIHZvaWQgcmVndWxhdG9yeV9leGl0KHZvaWQpCiB7Ci0JbXV0ZXhfbG9jaygmY2ZnODAyMTFfZHJ2X211dGV4KTsKKwlzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0ICpyZWdfcmVxdWVzdCwgKnRtcDsKKwlzdHJ1Y3QgcmVnX2JlYWNvbiAqcmVnX2JlYWNvbiwgKmJ0bXA7CisKKwljYW5jZWxfd29ya19zeW5jKCZyZWdfd29yayk7CisKKwltdXRleF9sb2NrKCZjZmc4MDIxMV9tdXRleCk7CiAKIAlyZXNldF9yZWdkb21haW5zKCk7CiAKQEAgLTE1MDIsNSArMjE4NCwzMyBAQAogCiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIocmVnX3BkZXYpOwogCi0JbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9kcnZfbXV0ZXgpOworCXNwaW5fbG9ja19iaCgmcmVnX3BlbmRpbmdfYmVhY29uc19sb2NrKTsKKwlpZiAoIWxpc3RfZW1wdHkoJnJlZ19wZW5kaW5nX2JlYWNvbnMpKSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyZWdfYmVhY29uLCBidG1wLAorCQkJCQkgJnJlZ19wZW5kaW5nX2JlYWNvbnMsIGxpc3QpIHsKKwkJCWxpc3RfZGVsKCZyZWdfYmVhY29uLT5saXN0KTsKKwkJCWtmcmVlKHJlZ19iZWFjb24pOworCQl9CisJfQorCXNwaW5fdW5sb2NrX2JoKCZyZWdfcGVuZGluZ19iZWFjb25zX2xvY2spOworCisJaWYgKCFsaXN0X2VtcHR5KCZyZWdfYmVhY29uX2xpc3QpKSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyZWdfYmVhY29uLCBidG1wLAorCQkJCQkgJnJlZ19iZWFjb25fbGlzdCwgbGlzdCkgeworCQkJbGlzdF9kZWwoJnJlZ19iZWFjb24tPmxpc3QpOworCQkJa2ZyZWUocmVnX2JlYWNvbik7CisJCX0KKwl9CisKKwlzcGluX2xvY2soJnJlZ19yZXF1ZXN0c19sb2NrKTsKKwlpZiAoIWxpc3RfZW1wdHkoJnJlZ19yZXF1ZXN0c19saXN0KSkgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmVnX3JlcXVlc3QsIHRtcCwKKwkJCQkJICZyZWdfcmVxdWVzdHNfbGlzdCwgbGlzdCkgeworCQkJbGlzdF9kZWwoJnJlZ19yZXF1ZXN0LT5saXN0KTsKKwkJCWtmcmVlKHJlZ19yZXF1ZXN0KTsKKwkJfQorCX0KKwlzcGluX3VubG9jaygmcmVnX3JlcXVlc3RzX2xvY2spOworCisJbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9tdXRleCk7CiB9CmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvcmVnLmggYi9uZXQvd2lyZWxlc3MvcmVnLmgKaW5kZXggYTc2ZWEzZi4uZTM3ODI5YSAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL3JlZy5oCisrKyBiL25ldC93aXJlbGVzcy9yZWcuaApAQCAtMSw5ICsxLDEzIEBACiAjaWZuZGVmIF9fTkVUX1dJUkVMRVNTX1JFR19ICiAjZGVmaW5lIF9fTkVUX1dJUkVMRVNTX1JFR19ICiAKK2V4dGVybiBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqY2ZnODAyMTFfcmVnZG9tYWluOworCiBib29sIGlzX3dvcmxkX3JlZ2RvbShjb25zdCBjaGFyICphbHBoYTIpOwogYm9vbCByZWdfaXNfdmFsaWRfcmVxdWVzdChjb25zdCBjaGFyICphbHBoYTIpOwogCitpbnQgcmVndWxhdG9yeV9oaW50X3VzZXIoY29uc3QgY2hhciAqYWxwaGEyKTsKKwogdm9pZCByZWdfZGV2aWNlX3JlbW92ZShzdHJ1Y3Qgd2lwaHkgKndpcGh5KTsKIAogaW50IHJlZ3VsYXRvcnlfaW5pdCh2b2lkKTsKQEAgLTExLDM0ICsxNSwyNSBAQAogCiBpbnQgc2V0X3JlZ2RvbShjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqcmQpOwogCi1lbnVtIGVudmlyb25tZW50X2NhcCB7Ci0JRU5WSVJPTl9BTlksCi0JRU5WSVJPTl9JTkRPT1IsCi0JRU5WSVJPTl9PVVRET09SLAotfTsKLQotCiAvKioKLSAqIF9fcmVndWxhdG9yeV9oaW50IC0gaGludCB0byB0aGUgd2lyZWxlc3MgY29yZSBhIHJlZ3VsYXRvcnkgZG9tYWluCi0gKiBAd2lwaHk6IGlmIHRoZSBoaW50IGNvbWVzIGZyb20gY291bnRyeSBpbmZvcm1hdGlvbiBmcm9tIGFuIEFQLCB0aGlzCi0gKglpcyByZXF1aXJlZCB0byBiZSBzZXQgdG8gdGhlIHdpcGh5IHRoYXQgcmVjZWl2ZWQgdGhlIGluZm9ybWF0aW9uCi0gKiBAYWxwaGEyOiB0aGUgSVNPL0lFQyAzMTY2IGFscGhhMiBiZWluZyBjbGFpbWVkIHRoZSByZWd1bGF0b3J5IGRvbWFpbgotICoJc2hvdWxkIGJlIGluLgotICogQGNvdW50cnlfaWVfY2hlY2tzdW06IGNoZWNrc3VtIG9mIHByb2Nlc3NlZCBjb3VudHJ5IElFLCBzZXQgdGhpcyB0byAwCi0gKiAJaWYgdGhlIGhpbnQgZGlkIG5vdCBjb21lIGZyb20gYSBjb3VudHJ5IElFCi0gKiBAY291bnRyeV9pZV9lbnY6IHRoZSBlbnZpcm9ubWVudCB0aGUgSUUgdG9sZCB1cyB3ZSBhcmUgaW4sICVFTlZJUk9OXyoKKyAqIHJlZ3VsYXRvcnlfaGludF9mb3VuZF9iZWFjb24gLSBoaW50cyBhIGJlYWNvbiB3YXMgZm91bmQgb24gYSBjaGFubmVsCisgKiBAd2lwaHk6IHRoZSB3aXJlbGVzcyBkZXZpY2Ugd2hlcmUgdGhlIGJlYWNvbiB3YXMgZm91bmQgb24KKyAqIEBiZWFjb25fY2hhbjogdGhlIGNoYW5uZWwgb24gd2hpY2ggdGhlIGJlYWNvbiB3YXMgZm91bmQgb24KKyAqIEBnZnA6IGNvbnRleHQgZmxhZ3MKICAqCi0gKiBUaGUgV2lyZWxlc3Mgc3Vic3lzdGVtIGNhbiB1c2UgdGhpcyBmdW5jdGlvbiB0byBoaW50IHRvIHRoZSB3aXJlbGVzcyBjb3JlCi0gKiB3aGF0IGl0IGJlbGlldmVzIHNob3VsZCBiZSB0aGUgY3VycmVudCByZWd1bGF0b3J5IGRvbWFpbiBieSBnaXZpbmcgaXQgYW4KLSAqIElTTy9JRUMgMzE2NiBhbHBoYTIgY291bnRyeSBjb2RlIGl0IGtub3dzIGl0cyByZWd1bGF0b3J5IGRvbWFpbiBzaG91bGQgYmUKLSAqIGluLgorICogVGhpcyBpbmZvcm1zIHRoZSB3aXJlbGVzcyBjb3JlIHRoYXQgYSBiZWFjb24gZnJvbSBhbiBBUCB3YXMgZm91bmQgb24KKyAqIHRoZSBjaGFubmVsIHByb3ZpZGVkLiBUaGlzIGFsbG93cyB0aGUgd2lyZWxlc3MgY29yZSB0byBtYWtlIGVkdWNhdGVkCisgKiBndWVzc2VzIG9uIHJlZ3VsYXRvcnkgdG8gaGVscCB3aXRoIHdvcmxkIHJvYW1pbmcuIFRoaXMgaXMgb25seSB1c2VkIGZvcgorICogd29ybGQgcm9hbWluZyAtLSB3aGVuIHdlIGRvIG5vdCBrbm93IG91ciBjdXJyZW50IGxvY2F0aW9uLiBUaGlzIGlzCisgKiBvbmx5IHVzZWZ1bCBvbiBjaGFubmVscyAxMiwgMTMgYW5kIDE0IG9uIHRoZSAyIEdIeiBiYW5kIGFzIGNoYW5uZWxzCisgKiAxLTExIGFyZSBhbHJlYWR5IGVuYWJsZWQgYnkgdGhlIHdvcmxkIHJlZ3VsYXRvcnkgZG9tYWluOyBhbmQgb24KKyAqIG5vbi1yYWRhciA1IEdIeiBjaGFubmVscy4KICAqCi0gKiBSZXR1cm5zIHplcm8gaWYgYWxsIHdlbnQgZmluZSwgJS1FQUxSRUFEWSBpZiBhIHJlZ3VsYXRvcnkgZG9tYWluIGhhZAotICogYWxyZWFkeSBiZWVuIHNldCBvciBvdGhlciBzdGFuZGFyZCBlcnJvciBjb2Rlcy4KLSAqCisgKiBEcml2ZXJzIGRvIG5vdCBuZWVkIHRvIGNhbGwgdGhpcywgY2ZnODAyMTEgd2lsbCBkbyBpdCBmb3IgYWZ0ZXIgYSBzY2FuCisgKiBvbiBhIG5ld2x5IGZvdW5kIEJTUy4KICAqLwotZXh0ZXJuIGludCBfX3JlZ3VsYXRvcnlfaGludChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBlbnVtIHJlZ19zZXRfYnkgc2V0X2J5LAotCQkJICAgICBjb25zdCBjaGFyICphbHBoYTIsIHUzMiBjb3VudHJ5X2llX2NoZWNrc3VtLAotCQkJICAgICBlbnVtIGVudmlyb25tZW50X2NhcCBjb3VudHJ5X2llX2Vudik7CitpbnQgcmVndWxhdG9yeV9oaW50X2ZvdW5kX2JlYWNvbihzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmJlYWNvbl9jaGFuLAorCQkJCQlnZnBfdCBnZnApOwogCiAjZW5kaWYgIC8qIF9fTkVUX1dJUkVMRVNTX1JFR19IICovCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvc2Nhbi5jIGIvbmV0L3dpcmVsZXNzL3NjYW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODBkYmNkCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L3dpcmVsZXNzL3NjYW4uYwpAQCAtMCwwICsxLDg2NiBAQAorLyoKKyAqIGNmZzgwMjExIHNjYW4gcmVzdWx0IGhhbmRsaW5nCisgKgorICogQ29weXJpZ2h0IDIwMDggSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CisjaW5jbHVkZSA8bGludXgvbmw4MDIxMS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bmV0L2FycC5oPgorI2luY2x1ZGUgPG5ldC9jZmc4MDIxMS5oPgorI2luY2x1ZGUgPG5ldC9pd19oYW5kbGVyLmg+CisjaW5jbHVkZSAiY29yZS5oIgorI2luY2x1ZGUgIm5sODAyMTEuaCIKKworI2RlZmluZSBJRUVFODAyMTFfU0NBTl9SRVNVTFRfRVhQSVJFCSgxMCAqIEhaKQorCit2b2lkIGNmZzgwMjExX3NjYW5fZG9uZShzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpyZXF1ZXN0LCBib29sIGFib3J0ZWQpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKyNpZmRlZiBDT05GSUdfV0lSRUxFU1NfRVhUCisJdW5pb24gaXdyZXFfZGF0YSB3cnF1OworI2VuZGlmCisKKwlkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KCZpbml0X25ldCwgcmVxdWVzdC0+aWZpZHgpOworCWlmICghZGV2KQorCQlnb3RvIG91dDsKKworCVdBUk5fT04ocmVxdWVzdCAhPSB3aXBoeV90b19kZXYocmVxdWVzdC0+d2lwaHkpLT5zY2FuX3JlcSk7CisJd2lwaHlfdG9fZGV2KHJlcXVlc3QtPndpcGh5KS0+c2Nhbl9yZXEgPSBOVUxMOworCisJaWYgKGFib3J0ZWQpCisJCW5sODAyMTFfc2VuZF9zY2FuX2Fib3J0ZWQod2lwaHlfdG9fZGV2KHJlcXVlc3QtPndpcGh5KSwgZGV2KTsKKwllbHNlCisJCW5sODAyMTFfc2VuZF9zY2FuX2RvbmUod2lwaHlfdG9fZGV2KHJlcXVlc3QtPndpcGh5KSwgZGV2KTsKKworI2lmZGVmIENPTkZJR19XSVJFTEVTU19FWFQKKwlpZiAoIWFib3J0ZWQpIHsKKwkJbWVtc2V0KCZ3cnF1LCAwLCBzaXplb2Yod3JxdSkpOworCisJCXdpcmVsZXNzX3NlbmRfZXZlbnQoZGV2LCBTSU9DR0lXU0NBTiwgJndycXUsIE5VTEwpOworCX0KKyNlbmRpZgorCisJZGV2X3B1dChkZXYpOworCisgb3V0OgorCWtmcmVlKHJlcXVlc3QpOworfQorRVhQT1JUX1NZTUJPTChjZmc4MDIxMV9zY2FuX2RvbmUpOworCitzdGF0aWMgdm9pZCBic3NfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqcmVmKQoreworCXN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MgKmJzczsKKworCWJzcyA9IGNvbnRhaW5lcl9vZihyZWYsIHN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MsIHJlZik7CisJaWYgKGJzcy0+cHViLmZyZWVfcHJpdikKKwkJYnNzLT5wdWIuZnJlZV9wcml2KCZic3MtPnB1Yik7CisJa2ZyZWUoYnNzKTsKK30KKworLyogbXVzdCBob2xkIGRldi0+YnNzX2xvY2shICovCit2b2lkIGNmZzgwMjExX2Jzc19hZ2Uoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkZXYsCisgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBhZ2Vfc2VjcykKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICpic3M7CisJdW5zaWduZWQgbG9uZyBhZ2VfamlmZmllcyA9IG1zZWNzX3RvX2ppZmZpZXMoYWdlX3NlY3MgKiBNU0VDX1BFUl9TRUMpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShic3MsICZkZXYtPmJzc19saXN0LCBsaXN0KSB7CisJCWJzcy0+dHMgLT0gYWdlX2ppZmZpZXM7CisJfQorfQorCisvKiBtdXN0IGhvbGQgZGV2LT5ic3NfbG9jayEgKi8KK3ZvaWQgY2ZnODAyMTFfYnNzX2V4cGlyZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICpic3MsICp0bXA7CisJYm9vbCBleHBpcmVkID0gZmFsc2U7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoYnNzLCB0bXAsICZkZXYtPmJzc19saXN0LCBsaXN0KSB7CisJCWlmICghdGltZV9hZnRlcihqaWZmaWVzLCBic3MtPnRzICsgSUVFRTgwMjExX1NDQU5fUkVTVUxUX0VYUElSRSkpCisJCQljb250aW51ZTsKKwkJbGlzdF9kZWwoJmJzcy0+bGlzdCk7CisJCXJiX2VyYXNlKCZic3MtPnJibiwgJmRldi0+YnNzX3RyZWUpOworCQlrcmVmX3B1dCgmYnNzLT5yZWYsIGJzc19yZWxlYXNlKTsKKwkJZXhwaXJlZCA9IHRydWU7CisJfQorCisJaWYgKGV4cGlyZWQpCisJCWRldi0+YnNzX2dlbmVyYXRpb24rKzsKK30KKworc3RhdGljIHU4ICpmaW5kX2llKHU4IG51bSwgdTggKmllcywgc2l6ZV90IGxlbikKK3sKKwl3aGlsZSAobGVuID4gMiAmJiBpZXNbMF0gIT0gbnVtKSB7CisJCWxlbiAtPSBpZXNbMV0gKyAyOworCQlpZXMgKz0gaWVzWzFdICsgMjsKKwl9CisJaWYgKGxlbiA8IDIpCisJCXJldHVybiBOVUxMOworCWlmIChsZW4gPCAyICsgaWVzWzFdKQorCQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gaWVzOworfQorCitzdGF0aWMgaW50IGNtcF9pZXModTggbnVtLCB1OCAqaWVzMSwgc2l6ZV90IGxlbjEsIHU4ICppZXMyLCBzaXplX3QgbGVuMikKK3sKKwljb25zdCB1OCAqaWUxID0gZmluZF9pZShudW0sIGllczEsIGxlbjEpOworCWNvbnN0IHU4ICppZTIgPSBmaW5kX2llKG51bSwgaWVzMiwgbGVuMik7CisJaW50IHI7CisKKwlpZiAoIWllMSAmJiAhaWUyKQorCQlyZXR1cm4gMDsKKwlpZiAoIWllMSkKKwkJcmV0dXJuIC0xOworCisJciA9IG1lbWNtcChpZTEgKyAyLCBpZTIgKyAyLCBtaW4oaWUxWzFdLCBpZTJbMV0pKTsKKwlpZiAociA9PSAwICYmIGllMVsxXSAhPSBpZTJbMV0pCisJCXJldHVybiBpZTJbMV0gLSBpZTFbMV07CisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyBib29sIGlzX2JzcyhzdHJ1Y3QgY2ZnODAyMTFfYnNzICphLAorCQkgICBjb25zdCB1OCAqYnNzaWQsCisJCSAgIGNvbnN0IHU4ICpzc2lkLCBzaXplX3Qgc3NpZF9sZW4pCit7CisJY29uc3QgdTggKnNzaWRpZTsKKworCWlmIChic3NpZCAmJiBjb21wYXJlX2V0aGVyX2FkZHIoYS0+YnNzaWQsIGJzc2lkKSkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKCFzc2lkKQorCQlyZXR1cm4gdHJ1ZTsKKworCXNzaWRpZSA9IGZpbmRfaWUoV0xBTl9FSURfU1NJRCwKKwkJCSBhLT5pbmZvcm1hdGlvbl9lbGVtZW50cywKKwkJCSBhLT5sZW5faW5mb3JtYXRpb25fZWxlbWVudHMpOworCWlmICghc3NpZGllKQorCQlyZXR1cm4gZmFsc2U7CisJaWYgKHNzaWRpZVsxXSAhPSBzc2lkX2xlbikKKwkJcmV0dXJuIGZhbHNlOworCXJldHVybiBtZW1jbXAoc3NpZGllICsgMiwgc3NpZCwgc3NpZF9sZW4pID09IDA7Cit9CisKK3N0YXRpYyBib29sIGlzX21lc2goc3RydWN0IGNmZzgwMjExX2JzcyAqYSwKKwkJICAgIGNvbnN0IHU4ICptZXNoaWQsIHNpemVfdCBtZXNoaWRsZW4sCisJCSAgICBjb25zdCB1OCAqbWVzaGNmZykKK3sKKwljb25zdCB1OCAqaWU7CisKKwlpZiAoIWlzX3plcm9fZXRoZXJfYWRkcihhLT5ic3NpZCkpCisJCXJldHVybiBmYWxzZTsKKworCWllID0gZmluZF9pZShXTEFOX0VJRF9NRVNIX0lELAorCQkgICAgIGEtPmluZm9ybWF0aW9uX2VsZW1lbnRzLAorCQkgICAgIGEtPmxlbl9pbmZvcm1hdGlvbl9lbGVtZW50cyk7CisJaWYgKCFpZSkKKwkJcmV0dXJuIGZhbHNlOworCWlmIChpZVsxXSAhPSBtZXNoaWRsZW4pCisJCXJldHVybiBmYWxzZTsKKwlpZiAobWVtY21wKGllICsgMiwgbWVzaGlkLCBtZXNoaWRsZW4pKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZSA9IGZpbmRfaWUoV0xBTl9FSURfTUVTSF9DT05GSUcsCisJCSAgICAgYS0+aW5mb3JtYXRpb25fZWxlbWVudHMsCisJCSAgICAgYS0+bGVuX2luZm9ybWF0aW9uX2VsZW1lbnRzKTsKKwlpZiAoaWVbMV0gIT0gSUVFRTgwMjExX01FU0hfQ09ORklHX0xFTikKKwkJcmV0dXJuIGZhbHNlOworCisJLyoKKwkgKiBJZ25vcmUgbWVzaCBjYXBhYmlsaXR5IChsYXN0IHR3byBieXRlcyBvZiB0aGUgSUUpIHdoZW4KKwkgKiBjb21wYXJpbmcgc2luY2UgdGhhdCBtYXkgZGlmZmVyIGJldHdlZW4gc3RhdGlvbnMgdGFraW5nCisJICogcGFydCBpbiB0aGUgc2FtZSBtZXNoLgorCSAqLworCXJldHVybiBtZW1jbXAoaWUgKyAyLCBtZXNoY2ZnLCBJRUVFODAyMTFfTUVTSF9DT05GSUdfTEVOIC0gMikgPT0gMDsKK30KKworc3RhdGljIGludCBjbXBfYnNzKHN0cnVjdCBjZmc4MDIxMV9ic3MgKmEsCisJCSAgIHN0cnVjdCBjZmc4MDIxMV9ic3MgKmIpCit7CisJaW50IHI7CisKKwlpZiAoYS0+Y2hhbm5lbCAhPSBiLT5jaGFubmVsKQorCQlyZXR1cm4gYi0+Y2hhbm5lbC0+Y2VudGVyX2ZyZXEgLSBhLT5jaGFubmVsLT5jZW50ZXJfZnJlcTsKKworCXIgPSBtZW1jbXAoYS0+YnNzaWQsIGItPmJzc2lkLCBFVEhfQUxFTik7CisJaWYgKHIpCisJCXJldHVybiByOworCisJaWYgKGlzX3plcm9fZXRoZXJfYWRkcihhLT5ic3NpZCkpIHsKKwkJciA9IGNtcF9pZXMoV0xBTl9FSURfTUVTSF9JRCwKKwkJCSAgICBhLT5pbmZvcm1hdGlvbl9lbGVtZW50cywKKwkJCSAgICBhLT5sZW5faW5mb3JtYXRpb25fZWxlbWVudHMsCisJCQkgICAgYi0+aW5mb3JtYXRpb25fZWxlbWVudHMsCisJCQkgICAgYi0+bGVuX2luZm9ybWF0aW9uX2VsZW1lbnRzKTsKKwkJaWYgKHIpCisJCQlyZXR1cm4gcjsKKwkJcmV0dXJuIGNtcF9pZXMoV0xBTl9FSURfTUVTSF9DT05GSUcsCisJCQkgICAgICAgYS0+aW5mb3JtYXRpb25fZWxlbWVudHMsCisJCQkgICAgICAgYS0+bGVuX2luZm9ybWF0aW9uX2VsZW1lbnRzLAorCQkJICAgICAgIGItPmluZm9ybWF0aW9uX2VsZW1lbnRzLAorCQkJICAgICAgIGItPmxlbl9pbmZvcm1hdGlvbl9lbGVtZW50cyk7CisJfQorCisJcmV0dXJuIGNtcF9pZXMoV0xBTl9FSURfU1NJRCwKKwkJICAgICAgIGEtPmluZm9ybWF0aW9uX2VsZW1lbnRzLAorCQkgICAgICAgYS0+bGVuX2luZm9ybWF0aW9uX2VsZW1lbnRzLAorCQkgICAgICAgYi0+aW5mb3JtYXRpb25fZWxlbWVudHMsCisJCSAgICAgICBiLT5sZW5faW5mb3JtYXRpb25fZWxlbWVudHMpOworfQorCitzdHJ1Y3QgY2ZnODAyMTFfYnNzICpjZmc4MDIxMV9nZXRfYnNzKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsLAorCQkJCSAgICAgIGNvbnN0IHU4ICpic3NpZCwKKwkJCQkgICAgICBjb25zdCB1OCAqc3NpZCwgc2l6ZV90IHNzaWRfbGVuLAorCQkJCSAgICAgIHUxNiBjYXBhX21hc2ssIHUxNiBjYXBhX3ZhbCkKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRldiA9IHdpcGh5X3RvX2Rldih3aXBoeSk7CisJc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqYnNzLCAqcmVzID0gTlVMTDsKKworCXNwaW5fbG9ja19iaCgmZGV2LT5ic3NfbG9jayk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJzcywgJmRldi0+YnNzX2xpc3QsIGxpc3QpIHsKKwkJaWYgKChic3MtPnB1Yi5jYXBhYmlsaXR5ICYgY2FwYV9tYXNrKSAhPSBjYXBhX3ZhbCkKKwkJCWNvbnRpbnVlOworCQlpZiAoY2hhbm5lbCAmJiBic3MtPnB1Yi5jaGFubmVsICE9IGNoYW5uZWwpCisJCQljb250aW51ZTsKKwkJaWYgKGlzX2JzcygmYnNzLT5wdWIsIGJzc2lkLCBzc2lkLCBzc2lkX2xlbikpIHsKKwkJCXJlcyA9IGJzczsKKwkJCWtyZWZfZ2V0KCZyZXMtPnJlZik7CisJCQlicmVhazsKKwkJfQorCX0KKworCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmJzc19sb2NrKTsKKwlpZiAoIXJlcykKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuICZyZXMtPnB1YjsKK30KK0VYUE9SVF9TWU1CT0woY2ZnODAyMTFfZ2V0X2Jzcyk7CisKK3N0cnVjdCBjZmc4MDIxMV9ic3MgKmNmZzgwMjExX2dldF9tZXNoKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCwKKwkJCQkgICAgICAgY29uc3QgdTggKm1lc2hpZCwgc2l6ZV90IG1lc2hpZGxlbiwKKwkJCQkgICAgICAgY29uc3QgdTggKm1lc2hjZmcpCit7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkZXYgPSB3aXBoeV90b19kZXYod2lwaHkpOworCXN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MgKmJzcywgKnJlcyA9IE5VTEw7CisKKwlzcGluX2xvY2tfYmgoJmRldi0+YnNzX2xvY2spOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShic3MsICZkZXYtPmJzc19saXN0LCBsaXN0KSB7CisJCWlmIChjaGFubmVsICYmIGJzcy0+cHViLmNoYW5uZWwgIT0gY2hhbm5lbCkKKwkJCWNvbnRpbnVlOworCQlpZiAoaXNfbWVzaCgmYnNzLT5wdWIsIG1lc2hpZCwgbWVzaGlkbGVuLCBtZXNoY2ZnKSkgeworCQkJcmVzID0gYnNzOworCQkJa3JlZl9nZXQoJnJlcy0+cmVmKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJc3Bpbl91bmxvY2tfYmgoJmRldi0+YnNzX2xvY2spOworCWlmICghcmVzKQorCQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gJnJlcy0+cHViOworfQorRVhQT1JUX1NZTUJPTChjZmc4MDIxMV9nZXRfbWVzaCk7CisKKworc3RhdGljIHZvaWQgcmJfaW5zZXJ0X2JzcyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRldiwKKwkJCSAgc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqYnNzKQoreworCXN0cnVjdCByYl9ub2RlICoqcCA9ICZkZXYtPmJzc190cmVlLnJiX25vZGU7CisJc3RydWN0IHJiX25vZGUgKnBhcmVudCA9IE5VTEw7CisJc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqdGJzczsKKwlpbnQgY21wOworCisJd2hpbGUgKCpwKSB7CisJCXBhcmVudCA9ICpwOworCQl0YnNzID0gcmJfZW50cnkocGFyZW50LCBzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzLCByYm4pOworCisJCWNtcCA9IGNtcF9ic3MoJmJzcy0+cHViLCAmdGJzcy0+cHViKTsKKworCQlpZiAoV0FSTl9PTighY21wKSkgeworCQkJLyogd2lsbCBzb3J0IG9mIGxlYWsgdGhpcyBCU1MgKi8KKwkJCXJldHVybjsKKwkJfQorCisJCWlmIChjbXAgPCAwKQorCQkJcCA9ICYoKnApLT5yYl9sZWZ0OworCQllbHNlCisJCQlwID0gJigqcCktPnJiX3JpZ2h0OworCX0KKworCXJiX2xpbmtfbm9kZSgmYnNzLT5yYm4sIHBhcmVudCwgcCk7CisJcmJfaW5zZXJ0X2NvbG9yKCZic3MtPnJibiwgJmRldi0+YnNzX3RyZWUpOworfQorCitzdGF0aWMgc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqCityYl9maW5kX2JzcyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRldiwKKwkgICAgc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqcmVzKQoreworCXN0cnVjdCByYl9ub2RlICpuID0gZGV2LT5ic3NfdHJlZS5yYl9ub2RlOworCXN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MgKmJzczsKKwlpbnQgcjsKKworCXdoaWxlIChuKSB7CisJCWJzcyA9IHJiX2VudHJ5KG4sIHN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MsIHJibik7CisJCXIgPSBjbXBfYnNzKCZyZXMtPnB1YiwgJmJzcy0+cHViKTsKKworCQlpZiAociA9PSAwKQorCQkJcmV0dXJuIGJzczsKKwkJZWxzZSBpZiAociA8IDApCisJCQluID0gbi0+cmJfbGVmdDsKKwkJZWxzZQorCQkJbiA9IG4tPnJiX3JpZ2h0OworCX0KKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqCitjZmc4MDIxMV9ic3NfdXBkYXRlKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZGV2LAorCQkgICAgc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqcmVzLAorCQkgICAgYm9vbCBvdmVyd3JpdGUpCit7CisJc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqZm91bmQgPSBOVUxMOworCWNvbnN0IHU4ICptZXNoaWQsICptZXNoY2ZnOworCisJLyoKKwkgKiBUaGUgcmVmZXJlbmNlIHRvICJyZXMiIGlzIGRvbmF0ZWQgdG8gdGhpcyBmdW5jdGlvbi4KKwkgKi8KKworCWlmIChXQVJOX09OKCFyZXMtPnB1Yi5jaGFubmVsKSkgeworCQlrcmVmX3B1dCgmcmVzLT5yZWYsIGJzc19yZWxlYXNlKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcmVzLT50cyA9IGppZmZpZXM7CisKKwlpZiAoaXNfemVyb19ldGhlcl9hZGRyKHJlcy0+cHViLmJzc2lkKSkgeworCQkvKiBtdXN0IGJlIG1lc2gsIHZlcmlmeSAqLworCQltZXNoaWQgPSBmaW5kX2llKFdMQU5fRUlEX01FU0hfSUQsIHJlcy0+cHViLmluZm9ybWF0aW9uX2VsZW1lbnRzLAorCQkJCSByZXMtPnB1Yi5sZW5faW5mb3JtYXRpb25fZWxlbWVudHMpOworCQltZXNoY2ZnID0gZmluZF9pZShXTEFOX0VJRF9NRVNIX0NPTkZJRywKKwkJCQkgIHJlcy0+cHViLmluZm9ybWF0aW9uX2VsZW1lbnRzLAorCQkJCSAgcmVzLT5wdWIubGVuX2luZm9ybWF0aW9uX2VsZW1lbnRzKTsKKwkJaWYgKCFtZXNoaWQgfHwgIW1lc2hjZmcgfHwKKwkJICAgIG1lc2hjZmdbMV0gIT0gSUVFRTgwMjExX01FU0hfQ09ORklHX0xFTikgeworCQkJLyogYm9ndXMgbWVzaCAqLworCQkJa3JlZl9wdXQoJnJlcy0+cmVmLCBic3NfcmVsZWFzZSk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCX0KKworCXNwaW5fbG9ja19iaCgmZGV2LT5ic3NfbG9jayk7CisKKwlmb3VuZCA9IHJiX2ZpbmRfYnNzKGRldiwgcmVzKTsKKworCWlmIChmb3VuZCAmJiBvdmVyd3JpdGUpIHsKKwkJbGlzdF9yZXBsYWNlKCZmb3VuZC0+bGlzdCwgJnJlcy0+bGlzdCk7CisJCXJiX3JlcGxhY2Vfbm9kZSgmZm91bmQtPnJibiwgJnJlcy0+cmJuLAorCQkJCSZkZXYtPmJzc190cmVlKTsKKwkJa3JlZl9wdXQoJmZvdW5kLT5yZWYsIGJzc19yZWxlYXNlKTsKKwkJZm91bmQgPSByZXM7CisJfSBlbHNlIGlmIChmb3VuZCkgeworCQlrcmVmX2dldCgmZm91bmQtPnJlZik7CisJCWZvdW5kLT5wdWIuYmVhY29uX2ludGVydmFsID0gcmVzLT5wdWIuYmVhY29uX2ludGVydmFsOworCQlmb3VuZC0+cHViLnRzZiA9IHJlcy0+cHViLnRzZjsKKwkJZm91bmQtPnB1Yi5zaWduYWwgPSByZXMtPnB1Yi5zaWduYWw7CisJCWZvdW5kLT5wdWIuY2FwYWJpbGl0eSA9IHJlcy0+cHViLmNhcGFiaWxpdHk7CisJCWZvdW5kLT50cyA9IHJlcy0+dHM7CisJCWtyZWZfcHV0KCZyZXMtPnJlZiwgYnNzX3JlbGVhc2UpOworCX0gZWxzZSB7CisJCS8qIHRoaXMgImNvbnN1bWVzIiB0aGUgcmVmZXJlbmNlICovCisJCWxpc3RfYWRkX3RhaWwoJnJlcy0+bGlzdCwgJmRldi0+YnNzX2xpc3QpOworCQlyYl9pbnNlcnRfYnNzKGRldiwgcmVzKTsKKwkJZm91bmQgPSByZXM7CisJfQorCisJZGV2LT5ic3NfZ2VuZXJhdGlvbisrOworCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmJzc19sb2NrKTsKKworCWtyZWZfZ2V0KCZmb3VuZC0+cmVmKTsKKwlyZXR1cm4gZm91bmQ7Cit9CisKK3N0cnVjdCBjZmc4MDIxMV9ic3MgKgorY2ZnODAyMTFfaW5mb3JtX2Jzc19mcmFtZShzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwsCisJCQkgIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwgc2l6ZV90IGxlbiwKKwkJCSAgczMyIHNpZ25hbCwgZ2ZwX3QgZ2ZwKQoreworCXN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MgKnJlczsKKwlzaXplX3QgaWVsZW4gPSBsZW4gLSBvZmZzZXRvZihzdHJ1Y3QgaWVlZTgwMjExX21nbXQsCisJCQkJICAgICAgdS5wcm9iZV9yZXNwLnZhcmlhYmxlKTsKKwlib29sIG92ZXJ3cml0ZTsKKwlzaXplX3QgcHJpdnN6ID0gd2lwaHktPmJzc19wcml2X3NpemU7CisKKwlpZiAoV0FSTl9PTih3aXBoeS0+c2lnbmFsX3R5cGUgPT0gTkw4MDIxMV9CU1NfU0lHTkFMX1VOU1BFQyAmJgorCSAgICAgICAgICAgIChzaWduYWwgPCAwIHx8IHNpZ25hbCA+IDEwMCkpKQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChXQVJOX09OKCFtZ210IHx8ICF3aXBoeSB8fAorCQkgICAgbGVuIDwgb2Zmc2V0b2Yoc3RydWN0IGllZWU4MDIxMV9tZ210LCB1LnByb2JlX3Jlc3AudmFyaWFibGUpKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXMgPSBremFsbG9jKHNpemVvZigqcmVzKSArIHByaXZzeiArIGllbGVuLCBnZnApOworCWlmICghcmVzKQorCQlyZXR1cm4gTlVMTDsKKworCW1lbWNweShyZXMtPnB1Yi5ic3NpZCwgbWdtdC0+YnNzaWQsIEVUSF9BTEVOKTsKKwlyZXMtPnB1Yi5jaGFubmVsID0gY2hhbm5lbDsKKwlyZXMtPnB1Yi5zaWduYWwgPSBzaWduYWw7CisJcmVzLT5wdWIudHNmID0gbGU2NF90b19jcHUobWdtdC0+dS5wcm9iZV9yZXNwLnRpbWVzdGFtcCk7CisJcmVzLT5wdWIuYmVhY29uX2ludGVydmFsID0gbGUxNl90b19jcHUobWdtdC0+dS5wcm9iZV9yZXNwLmJlYWNvbl9pbnQpOworCXJlcy0+cHViLmNhcGFiaWxpdHkgPSBsZTE2X3RvX2NwdShtZ210LT51LnByb2JlX3Jlc3AuY2FwYWJfaW5mbyk7CisJLyogcG9pbnQgdG8gYWZ0ZXIgdGhlIHByaXZhdGUgYXJlYSAqLworCXJlcy0+cHViLmluZm9ybWF0aW9uX2VsZW1lbnRzID0gKHU4ICopcmVzICsgc2l6ZW9mKCpyZXMpICsgcHJpdnN6OworCW1lbWNweShyZXMtPnB1Yi5pbmZvcm1hdGlvbl9lbGVtZW50cywgbWdtdC0+dS5wcm9iZV9yZXNwLnZhcmlhYmxlLCBpZWxlbik7CisJcmVzLT5wdWIubGVuX2luZm9ybWF0aW9uX2VsZW1lbnRzID0gaWVsZW47CisKKwlrcmVmX2luaXQoJnJlcy0+cmVmKTsKKworCW92ZXJ3cml0ZSA9IGllZWU4MDIxMV9pc19wcm9iZV9yZXNwKG1nbXQtPmZyYW1lX2NvbnRyb2wpOworCisJcmVzID0gY2ZnODAyMTFfYnNzX3VwZGF0ZSh3aXBoeV90b19kZXYod2lwaHkpLCByZXMsIG92ZXJ3cml0ZSk7CisJaWYgKCFyZXMpCisJCXJldHVybiBOVUxMOworCisJaWYgKHJlcy0+cHViLmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfRVNTKQorCQlyZWd1bGF0b3J5X2hpbnRfZm91bmRfYmVhY29uKHdpcGh5LCBjaGFubmVsLCBnZnApOworCisJLyogY2ZnODAyMTFfYnNzX3VwZGF0ZSBnaXZlcyB1cyBhIHJlZmVyZW5jZWQgcmVzdWx0ICovCisJcmV0dXJuICZyZXMtPnB1YjsKK30KK0VYUE9SVF9TWU1CT0woY2ZnODAyMTFfaW5mb3JtX2Jzc19mcmFtZSk7CisKK3ZvaWQgY2ZnODAyMTFfcHV0X2JzcyhzdHJ1Y3QgY2ZnODAyMTFfYnNzICpwdWIpCit7CisJc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqYnNzOworCisJaWYgKCFwdWIpCisJCXJldHVybjsKKworCWJzcyA9IGNvbnRhaW5lcl9vZihwdWIsIHN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MsIHB1Yik7CisJa3JlZl9wdXQoJmJzcy0+cmVmLCBic3NfcmVsZWFzZSk7Cit9CitFWFBPUlRfU1lNQk9MKGNmZzgwMjExX3B1dF9ic3MpOworCit2b2lkIGNmZzgwMjExX3VubGlua19ic3Moc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IGNmZzgwMjExX2JzcyAqcHViKQoreworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZGV2ID0gd2lwaHlfdG9fZGV2KHdpcGh5KTsKKwlzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICpic3M7CisKKwlpZiAoV0FSTl9PTighcHViKSkKKwkJcmV0dXJuOworCisJYnNzID0gY29udGFpbmVyX29mKHB1Yiwgc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcywgcHViKTsKKworCXNwaW5fbG9ja19iaCgmZGV2LT5ic3NfbG9jayk7CisKKwlsaXN0X2RlbCgmYnNzLT5saXN0KTsKKwlyYl9lcmFzZSgmYnNzLT5yYm4sICZkZXYtPmJzc190cmVlKTsKKworCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmJzc19sb2NrKTsKKworCWtyZWZfcHV0KCZic3MtPnJlZiwgYnNzX3JlbGVhc2UpOworfQorRVhQT1JUX1NZTUJPTChjZmc4MDIxMV91bmxpbmtfYnNzKTsKKworI2lmZGVmIENPTkZJR19XSVJFTEVTU19FWFQKK2ludCBjZmc4MDIxMV93ZXh0X3Npd3NjYW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2OworCXN0cnVjdCB3aXBoeSAqd2lwaHk7CisJc3RydWN0IGl3X3NjYW5fcmVxICp3cmVxID0gTlVMTDsKKwlzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpjcmVxOworCWludCBpLCBlcnIsIG5fY2hhbm5lbHMgPSAwOworCWVudW0gaWVlZTgwMjExX2JhbmQgYmFuZDsKKworCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQorCQlyZXR1cm4gLUVORVRET1dOOworCisJcmRldiA9IGNmZzgwMjExX2dldF9kZXZfZnJvbV9pZmluZGV4KGRldi0+aWZpbmRleCk7CisKKwlpZiAoSVNfRVJSKHJkZXYpKQorCQlyZXR1cm4gUFRSX0VSUihyZGV2KTsKKworCWlmIChyZGV2LT5zY2FuX3JlcSkgeworCQllcnIgPSAtRUJVU1k7CisJCWdvdG8gb3V0OworCX0KKworCXdpcGh5ID0gJnJkZXYtPndpcGh5OworCisJZm9yIChiYW5kID0gMDsgYmFuZCA8IElFRUU4MDIxMV9OVU1fQkFORFM7IGJhbmQrKykKKwkJaWYgKHdpcGh5LT5iYW5kc1tiYW5kXSkKKwkJCW5fY2hhbm5lbHMgKz0gd2lwaHktPmJhbmRzW2JhbmRdLT5uX2NoYW5uZWxzOworCisJY3JlcSA9IGt6YWxsb2Moc2l6ZW9mKCpjcmVxKSArIHNpemVvZihzdHJ1Y3QgY2ZnODAyMTFfc3NpZCkgKworCQkgICAgICAgbl9jaGFubmVscyAqIHNpemVvZih2b2lkICopLAorCQkgICAgICAgR0ZQX0FUT01JQyk7CisJaWYgKCFjcmVxKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCWNyZXEtPndpcGh5ID0gd2lwaHk7CisJY3JlcS0+aWZpZHggPSBkZXYtPmlmaW5kZXg7CisJY3JlcS0+c3NpZHMgPSAodm9pZCAqKShjcmVxICsgMSk7CisJY3JlcS0+Y2hhbm5lbHMgPSAodm9pZCAqKShjcmVxLT5zc2lkcyArIDEpOworCWNyZXEtPm5fY2hhbm5lbHMgPSBuX2NoYW5uZWxzOworCWNyZXEtPm5fc3NpZHMgPSAxOworCisJLyogYWxsIGNoYW5uZWxzICovCisJaSA9IDA7CisJZm9yIChiYW5kID0gMDsgYmFuZCA8IElFRUU4MDIxMV9OVU1fQkFORFM7IGJhbmQrKykgeworCQlpbnQgajsKKwkJaWYgKCF3aXBoeS0+YmFuZHNbYmFuZF0pCisJCQljb250aW51ZTsKKwkJZm9yIChqID0gMDsgaiA8IHdpcGh5LT5iYW5kc1tiYW5kXS0+bl9jaGFubmVsczsgaisrKSB7CisJCQljcmVxLT5jaGFubmVsc1tpXSA9ICZ3aXBoeS0+YmFuZHNbYmFuZF0tPmNoYW5uZWxzW2pdOworCQkJaSsrOworCQl9CisJfQorCisJLyogdHJhbnNsYXRlIHNjYW4gcmVxdWVzdCAqLworCWlmICh3cnF1LT5kYXRhLmxlbmd0aCA9PSBzaXplb2Yoc3RydWN0IGl3X3NjYW5fcmVxKSkgeworCQl3cmVxID0gKHN0cnVjdCBpd19zY2FuX3JlcSAqKWV4dHJhOworCisJCWlmICh3cnF1LT5kYXRhLmZsYWdzICYgSVdfU0NBTl9USElTX0VTU0lEKSB7CisJCQlpZiAod3JlcS0+ZXNzaWRfbGVuID4gSUVFRTgwMjExX01BWF9TU0lEX0xFTikKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCW1lbWNweShjcmVxLT5zc2lkc1swXS5zc2lkLCB3cmVxLT5lc3NpZCwgd3JlcS0+ZXNzaWRfbGVuKTsKKwkJCWNyZXEtPnNzaWRzWzBdLnNzaWRfbGVuID0gd3JlcS0+ZXNzaWRfbGVuOworCQl9CisJCWlmICh3cmVxLT5zY2FuX3R5cGUgPT0gSVdfU0NBTl9UWVBFX1BBU1NJVkUpCisJCQljcmVxLT5uX3NzaWRzID0gMDsKKwl9CisKKwlyZGV2LT5zY2FuX3JlcSA9IGNyZXE7CisJZXJyID0gcmRldi0+b3BzLT5zY2FuKHdpcGh5LCBkZXYsIGNyZXEpOworCWlmIChlcnIpIHsKKwkJcmRldi0+c2Nhbl9yZXEgPSBOVUxMOworCQlrZnJlZShjcmVxKTsKKwl9Cisgb3V0OgorCWNmZzgwMjExX3B1dF9kZXYocmRldik7CisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0woY2ZnODAyMTFfd2V4dF9zaXdzY2FuKTsKKworc3RhdGljIHZvaWQgaWVlZTgwMjExX3NjYW5fYWRkX2llcyhzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgIHN0cnVjdCBjZmc4MDIxMV9ic3MgKmJzcywKKwkJCQkgICBjaGFyICoqY3VycmVudF9ldiwgY2hhciAqZW5kX2J1ZikKK3sKKwl1OCAqcG9zLCAqZW5kLCAqbmV4dDsKKwlzdHJ1Y3QgaXdfZXZlbnQgaXdlOworCisJaWYgKCFic3MtPmluZm9ybWF0aW9uX2VsZW1lbnRzIHx8CisJICAgICFic3MtPmxlbl9pbmZvcm1hdGlvbl9lbGVtZW50cykKKwkJcmV0dXJuOworCisJLyoKKwkgKiBJZiBuZWVkZWQsIGZyYWdtZW50IHRoZSBJRXMgYnVmZmVyIChhdCBJRSBib3VuZGFyaWVzKSBpbnRvIHNob3J0CisJICogZW5vdWdoIGZyYWdtZW50cyB0byBmaXQgaW50byBJV19HRU5FUklDX0lFX01BWCBvY3RldCBtZXNzYWdlcy4KKwkgKi8KKwlwb3MgPSBic3MtPmluZm9ybWF0aW9uX2VsZW1lbnRzOworCWVuZCA9IHBvcyArIGJzcy0+bGVuX2luZm9ybWF0aW9uX2VsZW1lbnRzOworCisJd2hpbGUgKGVuZCAtIHBvcyA+IElXX0dFTkVSSUNfSUVfTUFYKSB7CisJCW5leHQgPSBwb3MgKyAyICsgcG9zWzFdOworCQl3aGlsZSAobmV4dCArIDIgKyBuZXh0WzFdIC0gcG9zIDwgSVdfR0VORVJJQ19JRV9NQVgpCisJCQluZXh0ID0gbmV4dCArIDIgKyBuZXh0WzFdOworCisJCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7CisJCWl3ZS5jbWQgPSBJV0VWR0VOSUU7CisJCWl3ZS51LmRhdGEubGVuZ3RoID0gbmV4dCAtIHBvczsKKwkJKmN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCAqY3VycmVudF9ldiwKKwkJCQkJCSAgIGVuZF9idWYsICZpd2UsIHBvcyk7CisKKwkJcG9zID0gbmV4dDsKKwl9CisKKwlpZiAoZW5kID4gcG9zKSB7CisJCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7CisJCWl3ZS5jbWQgPSBJV0VWR0VOSUU7CisJCWl3ZS51LmRhdGEubGVuZ3RoID0gZW5kIC0gcG9zOworCQkqY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sICpjdXJyZW50X2V2LAorCQkJCQkJICAgZW5kX2J1ZiwgJml3ZSwgcG9zKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGVsYXBzZWRfamlmZmllc19tc2Vjcyh1bnNpZ25lZCBsb25nIHN0YXJ0KQoreworCXVuc2lnbmVkIGxvbmcgZW5kID0gamlmZmllczsKKworCWlmIChlbmQgPj0gc3RhcnQpCisJCXJldHVybiBqaWZmaWVzX3RvX21zZWNzKGVuZCAtIHN0YXJ0KTsKKworCXJldHVybiBqaWZmaWVzX3RvX21zZWNzKGVuZCArIChNQVhfSklGRllfT0ZGU0VUIC0gc3RhcnQpICsgMSk7Cit9CisKK3N0YXRpYyBjaGFyICoKK2llZWU4MDIxMV9ic3Moc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkgICAgICBzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICpic3MsIGNoYXIgKmN1cnJlbnRfZXYsCisJICAgICAgY2hhciAqZW5kX2J1ZikKK3sKKwlzdHJ1Y3QgaXdfZXZlbnQgaXdlOworCXU4ICpidWYsICpjZmcsICpwOworCXU4ICppZSA9IGJzcy0+cHViLmluZm9ybWF0aW9uX2VsZW1lbnRzOworCWludCByZW0gPSBic3MtPnB1Yi5sZW5faW5mb3JtYXRpb25fZWxlbWVudHMsIGksIHNpZzsKKwlib29sIGlzbWVzaCA9IGZhbHNlOworCisJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKKwlpd2UuY21kID0gU0lPQ0dJV0FQOworCWl3ZS51LmFwX2FkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOworCW1lbWNweShpd2UudS5hcF9hZGRyLnNhX2RhdGEsIGJzcy0+cHViLmJzc2lkLCBFVEhfQUxFTik7CisJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsCisJCQkJCSAgSVdfRVZfQUREUl9MRU4pOworCisJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKKwlpd2UuY21kID0gU0lPQ0dJV0ZSRVE7CisJaXdlLnUuZnJlcS5tID0gaWVlZTgwMjExX2ZyZXF1ZW5jeV90b19jaGFubmVsKGJzcy0+cHViLmNoYW5uZWwtPmNlbnRlcl9mcmVxKTsKKwlpd2UudS5mcmVxLmUgPSAwOworCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLAorCQkJCQkgIElXX0VWX0ZSRVFfTEVOKTsKKworCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7CisJaXdlLmNtZCA9IFNJT0NHSVdGUkVROworCWl3ZS51LmZyZXEubSA9IGJzcy0+cHViLmNoYW5uZWwtPmNlbnRlcl9mcmVxOworCWl3ZS51LmZyZXEuZSA9IDY7CisJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsCisJCQkJCSAgSVdfRVZfRlJFUV9MRU4pOworCisJaWYgKHdpcGh5LT5zaWduYWxfdHlwZSAhPSBDRkc4MDIxMV9TSUdOQUxfVFlQRV9OT05FKSB7CisJCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7CisJCWl3ZS5jbWQgPSBJV0VWUVVBTDsKKwkJaXdlLnUucXVhbC51cGRhdGVkID0gSVdfUVVBTF9MRVZFTF9VUERBVEVEIHwKKwkJCQkgICAgIElXX1FVQUxfTk9JU0VfSU5WQUxJRCB8CisJCQkJICAgICBJV19RVUFMX1FVQUxfVVBEQVRFRDsKKwkJc3dpdGNoICh3aXBoeS0+c2lnbmFsX3R5cGUpIHsKKwkJY2FzZSBDRkc4MDIxMV9TSUdOQUxfVFlQRV9NQk06CisJCQlzaWcgPSBic3MtPnB1Yi5zaWduYWwgLyAxMDA7CisJCQlpd2UudS5xdWFsLmxldmVsID0gc2lnOworCQkJaXdlLnUucXVhbC51cGRhdGVkIHw9IElXX1FVQUxfREJNOworCQkJaWYgKHNpZyA8IC0xMTApCQkvKiByYXRoZXIgYmFkICovCisJCQkJc2lnID0gLTExMDsKKwkJCWVsc2UgaWYgKHNpZyA+IC00MCkJLyogcGVyZmVjdCAqLworCQkJCXNpZyA9IC00MDsKKwkJCS8qIHdpbGwgZ2l2ZSBhIHJhbmdlIG9mIDAgLi4gNzAgKi8KKwkJCWl3ZS51LnF1YWwucXVhbCA9IHNpZyArIDExMDsKKwkJCWJyZWFrOworCQljYXNlIENGRzgwMjExX1NJR05BTF9UWVBFX1VOU1BFQzoKKwkJCWl3ZS51LnF1YWwubGV2ZWwgPSBic3MtPnB1Yi5zaWduYWw7CisJCQkvKiB3aWxsIGdpdmUgcmFuZ2UgMCAuLiAxMDAgKi8KKwkJCWl3ZS51LnF1YWwucXVhbCA9IGJzcy0+cHViLnNpZ25hbDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJLyogbm90IHJlYWNoZWQgKi8KKwkJCWJyZWFrOworCQl9CisJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAorCQkJCQkJICAmaXdlLCBJV19FVl9RVUFMX0xFTik7CisJfQorCisJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKKwlpd2UuY21kID0gU0lPQ0dJV0VOQ09ERTsKKwlpZiAoYnNzLT5wdWIuY2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZKQorCQlpd2UudS5kYXRhLmZsYWdzID0gSVdfRU5DT0RFX0VOQUJMRUQgfCBJV19FTkNPREVfTk9LRVk7CisJZWxzZQorCQlpd2UudS5kYXRhLmZsYWdzID0gSVdfRU5DT0RFX0RJU0FCTEVEOworCWl3ZS51LmRhdGEubGVuZ3RoID0gMDsKKwljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKKwkJCQkJICAmaXdlLCAiIik7CisKKwl3aGlsZSAocmVtID49IDIpIHsKKwkJLyogaW52YWxpZCBkYXRhICovCisJCWlmIChpZVsxXSA+IHJlbSAtIDIpCisJCQlicmVhazsKKworCQlzd2l0Y2ggKGllWzBdKSB7CisJCWNhc2UgV0xBTl9FSURfU1NJRDoKKwkJCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7CisJCQlpd2UuY21kID0gU0lPQ0dJV0VTU0lEOworCQkJaXdlLnUuZGF0YS5sZW5ndGggPSBpZVsxXTsKKwkJCWl3ZS51LmRhdGEuZmxhZ3MgPSAxOworCQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCisJCQkJCQkJICAmaXdlLCBpZSArIDIpOworCQkJYnJlYWs7CisJCWNhc2UgV0xBTl9FSURfTUVTSF9JRDoKKwkJCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7CisJCQlpd2UuY21kID0gU0lPQ0dJV0VTU0lEOworCQkJaXdlLnUuZGF0YS5sZW5ndGggPSBpZVsxXTsKKwkJCWl3ZS51LmRhdGEuZmxhZ3MgPSAxOworCQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCisJCQkJCQkJICAmaXdlLCBpZSArIDIpOworCQkJYnJlYWs7CisJCWNhc2UgV0xBTl9FSURfTUVTSF9DT05GSUc6CisJCQlpc21lc2ggPSB0cnVlOworCQkJaWYgKGllWzFdICE9IElFRUU4MDIxMV9NRVNIX0NPTkZJR19MRU4pCisJCQkJYnJlYWs7CisJCQlidWYgPSBrbWFsbG9jKDUwLCBHRlBfQVRPTUlDKTsKKwkJCWlmICghYnVmKQorCQkJCWJyZWFrOworCQkJY2ZnID0gaWUgKyAyOworCQkJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKKwkJCWl3ZS5jbWQgPSBJV0VWQ1VTVE9NOworCQkJc3ByaW50ZihidWYsICJNZXNoIG5ldHdvcmsgKHZlcnNpb24gJWQpIiwgY2ZnWzBdKTsKKwkJCWl3ZS51LmRhdGEubGVuZ3RoID0gc3RybGVuKGJ1Zik7CisJCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwKKwkJCQkJCQkgIGVuZF9idWYsCisJCQkJCQkJICAmaXdlLCBidWYpOworCQkJc3ByaW50ZihidWYsICJQYXRoIFNlbGVjdGlvbiBQcm90b2NvbCBJRDogIgorCQkJCSIweCUwMlglMDJYJTAyWCUwMlgiLCBjZmdbMV0sIGNmZ1syXSwgY2ZnWzNdLAorCQkJCQkJCWNmZ1s0XSk7CisJCQlpd2UudS5kYXRhLmxlbmd0aCA9IHN0cmxlbihidWYpOworCQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsCisJCQkJCQkJICBlbmRfYnVmLAorCQkJCQkJCSAgJml3ZSwgYnVmKTsKKwkJCXNwcmludGYoYnVmLCAiUGF0aCBTZWxlY3Rpb24gTWV0cmljIElEOiAiCisJCQkJIjB4JTAyWCUwMlglMDJYJTAyWCIsIGNmZ1s1XSwgY2ZnWzZdLCBjZmdbN10sCisJCQkJCQkJY2ZnWzhdKTsKKwkJCWl3ZS51LmRhdGEubGVuZ3RoID0gc3RybGVuKGJ1Zik7CisJCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwKKwkJCQkJCQkgIGVuZF9idWYsCisJCQkJCQkJICAmaXdlLCBidWYpOworCQkJc3ByaW50ZihidWYsICJDb25nZXN0aW9uIENvbnRyb2wgTW9kZSBJRDogIgorCQkJCSIweCUwMlglMDJYJTAyWCUwMlgiLCBjZmdbOV0sIGNmZ1sxMF0sCisJCQkJCQkJY2ZnWzExXSwgY2ZnWzEyXSk7CisJCQlpd2UudS5kYXRhLmxlbmd0aCA9IHN0cmxlbihidWYpOworCQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsCisJCQkJCQkJICBlbmRfYnVmLAorCQkJCQkJCSAgJml3ZSwgYnVmKTsKKwkJCXNwcmludGYoYnVmLCAiQ2hhbm5lbCBQcmVjZWRlbmNlOiAiCisJCQkJIjB4JTAyWCUwMlglMDJYJTAyWCIsIGNmZ1sxM10sIGNmZ1sxNF0sCisJCQkJCQkJY2ZnWzE1XSwgY2ZnWzE2XSk7CisJCQlpd2UudS5kYXRhLmxlbmd0aCA9IHN0cmxlbihidWYpOworCQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsCisJCQkJCQkJICBlbmRfYnVmLAorCQkJCQkJCSAgJml3ZSwgYnVmKTsKKwkJCWtmcmVlKGJ1Zik7CisJCQlicmVhazsKKwkJY2FzZSBXTEFOX0VJRF9TVVBQX1JBVEVTOgorCQljYXNlIFdMQU5fRUlEX0VYVF9TVVBQX1JBVEVTOgorCQkJLyogZGlzcGxheSBhbGwgc3VwcG9ydGVkIHJhdGVzIGluIHJlYWRhYmxlIGZvcm1hdCAqLworCQkJcCA9IGN1cnJlbnRfZXYgKyBpd2Vfc3RyZWFtX2xjcF9sZW4oaW5mbyk7CisKKwkJCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7CisJCQlpd2UuY21kID0gU0lPQ0dJV1JBVEU7CisJCQkvKiBUaG9zZSB0d28gZmxhZ3MgYXJlIGlnbm9yZWQuLi4gKi8KKwkJCWl3ZS51LmJpdHJhdGUuZml4ZWQgPSBpd2UudS5iaXRyYXRlLmRpc2FibGVkID0gMDsKKworCQkJZm9yIChpID0gMDsgaSA8IGllWzFdOyBpKyspIHsKKwkJCQlpd2UudS5iaXRyYXRlLnZhbHVlID0KKwkJCQkJKChpZVtpICsgMl0gJiAweDdmKSAqIDUwMDAwMCk7CisJCQkJcCA9IGl3ZV9zdHJlYW1fYWRkX3ZhbHVlKGluZm8sIGN1cnJlbnRfZXYsIHAsCisJCQkJCQllbmRfYnVmLCAmaXdlLCBJV19FVl9QQVJBTV9MRU4pOworCQkJfQorCQkJY3VycmVudF9ldiA9IHA7CisJCQlicmVhazsKKwkJfQorCQlyZW0gLT0gaWVbMV0gKyAyOworCQlpZSArPSBpZVsxXSArIDI7CisJfQorCisJaWYgKGJzcy0+cHViLmNhcGFiaWxpdHkgJiAoV0xBTl9DQVBBQklMSVRZX0VTUyB8IFdMQU5fQ0FQQUJJTElUWV9JQlNTKQorCSAgICB8fCBpc21lc2gpIHsKKwkJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKKwkJaXdlLmNtZCA9IFNJT0NHSVdNT0RFOworCQlpZiAoaXNtZXNoKQorCQkJaXdlLnUubW9kZSA9IElXX01PREVfTUVTSDsKKwkJZWxzZSBpZiAoYnNzLT5wdWIuY2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9FU1MpCisJCQlpd2UudS5tb2RlID0gSVdfTU9ERV9NQVNURVI7CisJCWVsc2UKKwkJCWl3ZS51Lm1vZGUgPSBJV19NT0RFX0FESE9DOworCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKKwkJCQkJCSAgJml3ZSwgSVdfRVZfVUlOVF9MRU4pOworCX0KKworCWJ1ZiA9IGttYWxsb2MoMzAsIEdGUF9BVE9NSUMpOworCWlmIChidWYpIHsKKwkJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKKwkJaXdlLmNtZCA9IElXRVZDVVNUT007CisJCXNwcmludGYoYnVmLCAidHNmPSUwMTZsbHgiLCAodW5zaWduZWQgbG9uZyBsb25nKShic3MtPnB1Yi50c2YpKTsKKwkJaXdlLnUuZGF0YS5sZW5ndGggPSBzdHJsZW4oYnVmKTsKKwkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCisJCQkJCQkgICZpd2UsIGJ1Zik7CisJCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7CisJCWl3ZS5jbWQgPSBJV0VWQ1VTVE9NOworCQlzcHJpbnRmKGJ1ZiwgIiBMYXN0IGJlYWNvbjogJXVtcyBhZ28iLAorCQkJZWxhcHNlZF9qaWZmaWVzX21zZWNzKGJzcy0+dHMpKTsKKwkJaXdlLnUuZGF0YS5sZW5ndGggPSBzdHJsZW4oYnVmKTsKKwkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsCisJCQkJCQkgIGVuZF9idWYsICZpd2UsIGJ1Zik7CisJCWtmcmVlKGJ1Zik7CisJfQorCisJaWVlZTgwMjExX3NjYW5fYWRkX2llcyhpbmZvLCAmYnNzLT5wdWIsICZjdXJyZW50X2V2LCBlbmRfYnVmKTsKKworCXJldHVybiBjdXJyZW50X2V2OworfQorCisKK3N0YXRpYyBpbnQgaWVlZTgwMjExX3NjYW5fcmVzdWx0cyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRldiwKKwkJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICBjaGFyICpidWYsIHNpemVfdCBsZW4pCit7CisJY2hhciAqY3VycmVudF9ldiA9IGJ1ZjsKKwljaGFyICplbmRfYnVmID0gYnVmICsgbGVuOworCXN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MgKmJzczsKKworCXNwaW5fbG9ja19iaCgmZGV2LT5ic3NfbG9jayk7CisJY2ZnODAyMTFfYnNzX2V4cGlyZShkZXYpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShic3MsICZkZXYtPmJzc19saXN0LCBsaXN0KSB7CisJCWlmIChidWYgKyBsZW4gLSBjdXJyZW50X2V2IDw9IElXX0VWX0FERFJfTEVOKSB7CisJCQlzcGluX3VubG9ja19iaCgmZGV2LT5ic3NfbG9jayk7CisJCQlyZXR1cm4gLUUyQklHOworCQl9CisJCWN1cnJlbnRfZXYgPSBpZWVlODAyMTFfYnNzKCZkZXYtPndpcGh5LCBpbmZvLCBic3MsCisJCQkJCSAgIGN1cnJlbnRfZXYsIGVuZF9idWYpOworCX0KKwlzcGluX3VubG9ja19iaCgmZGV2LT5ic3NfbG9jayk7CisJcmV0dXJuIGN1cnJlbnRfZXYgLSBidWY7Cit9CisKKworaW50IGNmZzgwMjExX3dleHRfZ2l3c2NhbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICBzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldjsKKwlpbnQgcmVzOworCisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCisJCXJldHVybiAtRU5FVERPV047CisKKwlyZGV2ID0gY2ZnODAyMTFfZ2V0X2Rldl9mcm9tX2lmaW5kZXgoZGV2LT5pZmluZGV4KTsKKworCWlmIChJU19FUlIocmRldikpCisJCXJldHVybiBQVFJfRVJSKHJkZXYpOworCisJaWYgKHJkZXYtPnNjYW5fcmVxKSB7CisJCXJlcyA9IC1FQUdBSU47CisJCWdvdG8gb3V0OworCX0KKworCXJlcyA9IGllZWU4MDIxMV9zY2FuX3Jlc3VsdHMocmRldiwgaW5mbywgZXh0cmEsIGRhdGEtPmxlbmd0aCk7CisJZGF0YS0+bGVuZ3RoID0gMDsKKwlpZiAocmVzID49IDApIHsKKwkJZGF0YS0+bGVuZ3RoID0gcmVzOworCQlyZXMgPSAwOworCX0KKworIG91dDoKKwljZmc4MDIxMV9wdXRfZGV2KHJkZXYpOworCXJldHVybiByZXM7Cit9CitFWFBPUlRfU1lNQk9MKGNmZzgwMjExX3dleHRfZ2l3c2Nhbik7CisjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9zeXNmcy5jIGIvbmV0L3dpcmVsZXNzL3N5c2ZzLmMKaW5kZXggNzlhMzgyOC4uZWZlM2M1YyAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL3N5c2ZzLmMKKysrIGIvbmV0L3dpcmVsZXNzL3N5c2ZzLmMKQEAgLTMxLDcgKzMxLDcgQEAKIAlyZXR1cm4gc3ByaW50ZihidWYsIGZtdCAiXG4iLCBkZXZfdG9fcmRldihkZXYpLT5tZW1iZXIpOwlcCiB9CiAKLVNIT1dfRk1UKGluZGV4LCAiJWQiLCBpZHgpOworU0hPV19GTVQoaW5kZXgsICIlZCIsIHdpcGh5X2lkeCk7CiBTSE9XX0ZNVChtYWNhZGRyZXNzLCAiJXBNIiwgd2lwaHkucGVybV9hZGRyKTsKIAogc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGllZWU4MDIxMV9kZXZfYXR0cnNbXSA9IHsKQEAgLTU1LDYgKzU1LDQxIEBACiB9CiAjZW5kaWYKIAorc3RhdGljIGludCB3aXBoeV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IGRldl90b19yZGV2KGRldik7CisJaW50IHJldCA9IDA7CisKKwlyZGV2LT5zdXNwZW5kX2F0ID0gZ2V0X3NlY29uZHMoKTsKKworCWlmIChyZGV2LT5vcHMtPnN1c3BlbmQpIHsKKwkJcnRubF9sb2NrKCk7CisJCXJldCA9IHJkZXYtPm9wcy0+c3VzcGVuZCgmcmRldi0+d2lwaHkpOworCQlydG5sX3VubG9jaygpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgd2lwaHlfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSBkZXZfdG9fcmRldihkZXYpOworCWludCByZXQgPSAwOworCisJLyogQWdlIHNjYW4gcmVzdWx0cyB3aXRoIHRpbWUgc3BlbnQgaW4gc3VzcGVuZCAqLworCXNwaW5fbG9ja19iaCgmcmRldi0+YnNzX2xvY2spOworCWNmZzgwMjExX2Jzc19hZ2UocmRldiwgZ2V0X3NlY29uZHMoKSAtIHJkZXYtPnN1c3BlbmRfYXQpOworCXNwaW5fdW5sb2NrX2JoKCZyZGV2LT5ic3NfbG9jayk7CisKKwlpZiAocmRldi0+b3BzLT5yZXN1bWUpIHsKKwkJcnRubF9sb2NrKCk7CisJCXJldCA9IHJkZXYtPm9wcy0+cmVzdW1lKCZyZGV2LT53aXBoeSk7CisJCXJ0bmxfdW5sb2NrKCk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKwogc3RydWN0IGNsYXNzIGllZWU4MDIxMV9jbGFzcyA9IHsKIAkubmFtZSA9ICJpZWVlODAyMTEiLAogCS5vd25lciA9IFRISVNfTU9EVUxFLApAQCAtNjMsNiArOTgsOCBAQAogI2lmZGVmIENPTkZJR19IT1RQTFVHCiAJLmRldl91ZXZlbnQgPSB3aXBoeV91ZXZlbnQsCiAjZW5kaWYKKwkuc3VzcGVuZCA9IHdpcGh5X3N1c3BlbmQsCisJLnJlc3VtZSA9IHdpcGh5X3Jlc3VtZSwKIH07CiAKIGludCB3aXBoeV9zeXNmc19pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvdXRpbC5jIGIvbmV0L3dpcmVsZXNzL3V0aWwuYwppbmRleCBlNzZjYzI4Li40ODdjZGQ5IDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvdXRpbC5jCisrKyBiL25ldC93aXJlbGVzcy91dGlsLmMKQEAgLTksNyArOSw3IEBACiAKIHN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqCiBpZWVlODAyMTFfZ2V0X3Jlc3BvbnNlX3JhdGUoc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQsCi0JCQkgICAgdTY0IGJhc2ljX3JhdGVzLCBpbnQgYml0cmF0ZSkKKwkJCSAgICB1MzIgYmFzaWNfcmF0ZXMsIGludCBiaXRyYXRlKQogewogCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqcmVzdWx0ID0gJnNiYW5kLT5iaXRyYXRlc1swXTsKIAlpbnQgaTsKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5jIGIvbmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmMKaW5kZXggNThlNDg5Zi4uYjg0YTliNCAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmMKKysrIGIvbmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmMKQEAgLTEzNywzICsxMzcsMTAwIEBACiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKGNmZzgwMjExX3dleHRfZ2l3bW9kZSk7CisKKworaW50IGNmZzgwMjExX3dleHRfZ2l3cmFuZ2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICBzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtPmllZWU4MDIxMV9wdHI7CisJc3RydWN0IGl3X3JhbmdlICpyYW5nZSA9IChzdHJ1Y3QgaXdfcmFuZ2UgKikgZXh0cmE7CisJZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kOworCWludCBjID0gMDsKKworCWlmICghd2RldikKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJZGF0YS0+bGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBpd19yYW5nZSk7CisJbWVtc2V0KHJhbmdlLCAwLCBzaXplb2Yoc3RydWN0IGl3X3JhbmdlKSk7CisKKwlyYW5nZS0+d2VfdmVyc2lvbl9jb21waWxlZCA9IFdJUkVMRVNTX0VYVDsKKwlyYW5nZS0+d2VfdmVyc2lvbl9zb3VyY2UgPSAyMTsKKwlyYW5nZS0+cmV0cnlfY2FwYSA9IElXX1JFVFJZX0xJTUlUOworCXJhbmdlLT5yZXRyeV9mbGFncyA9IElXX1JFVFJZX0xJTUlUOworCXJhbmdlLT5taW5fcmV0cnkgPSAwOworCXJhbmdlLT5tYXhfcmV0cnkgPSAyNTU7CisJcmFuZ2UtPm1pbl9ydHMgPSAwOworCXJhbmdlLT5tYXhfcnRzID0gMjM0NzsKKwlyYW5nZS0+bWluX2ZyYWcgPSAyNTY7CisJcmFuZ2UtPm1heF9mcmFnID0gMjM0NjsKKworCXJhbmdlLT5lbmNvZGluZ19zaXplWzBdID0gNTsKKwlyYW5nZS0+ZW5jb2Rpbmdfc2l6ZVsxXSA9IDEzOworCXJhbmdlLT5udW1fZW5jb2Rpbmdfc2l6ZXMgPSAyOworCXJhbmdlLT5tYXhfZW5jb2RpbmdfdG9rZW5zID0gNDsKKworCXJhbmdlLT5tYXhfcXVhbC51cGRhdGVkID0gSVdfUVVBTF9OT0lTRV9JTlZBTElEOworCisJc3dpdGNoICh3ZGV2LT53aXBoeS0+c2lnbmFsX3R5cGUpIHsKKwljYXNlIENGRzgwMjExX1NJR05BTF9UWVBFX05PTkU6CisJCWJyZWFrOworCWNhc2UgQ0ZHODAyMTFfU0lHTkFMX1RZUEVfTUJNOgorCQlyYW5nZS0+bWF4X3F1YWwubGV2ZWwgPSAtMTEwOworCQlyYW5nZS0+bWF4X3F1YWwucXVhbCA9IDcwOworCQlyYW5nZS0+YXZnX3F1YWwucXVhbCA9IDM1OworCQlyYW5nZS0+bWF4X3F1YWwudXBkYXRlZCB8PSBJV19RVUFMX0RCTTsKKwkJcmFuZ2UtPm1heF9xdWFsLnVwZGF0ZWQgfD0gSVdfUVVBTF9RVUFMX1VQREFURUQ7CisJCXJhbmdlLT5tYXhfcXVhbC51cGRhdGVkIHw9IElXX1FVQUxfTEVWRUxfVVBEQVRFRDsKKwkJYnJlYWs7CisJY2FzZSBDRkc4MDIxMV9TSUdOQUxfVFlQRV9VTlNQRUM6CisJCXJhbmdlLT5tYXhfcXVhbC5sZXZlbCA9IDEwMDsKKwkJcmFuZ2UtPm1heF9xdWFsLnF1YWwgPSAxMDA7CisJCXJhbmdlLT5hdmdfcXVhbC5xdWFsID0gNTA7CisJCXJhbmdlLT5tYXhfcXVhbC51cGRhdGVkIHw9IElXX1FVQUxfUVVBTF9VUERBVEVEOworCQlyYW5nZS0+bWF4X3F1YWwudXBkYXRlZCB8PSBJV19RVUFMX0xFVkVMX1VQREFURUQ7CisJCWJyZWFrOworCX0KKworCXJhbmdlLT5hdmdfcXVhbC5sZXZlbCA9IHJhbmdlLT5tYXhfcXVhbC5sZXZlbCAvIDI7CisJcmFuZ2UtPmF2Z19xdWFsLm5vaXNlID0gcmFuZ2UtPm1heF9xdWFsLm5vaXNlIC8gMjsKKwlyYW5nZS0+YXZnX3F1YWwudXBkYXRlZCA9IHJhbmdlLT5tYXhfcXVhbC51cGRhdGVkOworCisJcmFuZ2UtPmVuY19jYXBhID0gSVdfRU5DX0NBUEFfV1BBIHwgSVdfRU5DX0NBUEFfV1BBMiB8CisJCQkgIElXX0VOQ19DQVBBX0NJUEhFUl9US0lQIHwgSVdfRU5DX0NBUEFfQ0lQSEVSX0NDTVA7CisKKworCWZvciAoYmFuZCA9IDA7IGJhbmQgPCBJRUVFODAyMTFfTlVNX0JBTkRTOyBiYW5kICsrKSB7CisJCWludCBpOworCQlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKKworCQlzYmFuZCA9IHdkZXYtPndpcGh5LT5iYW5kc1tiYW5kXTsKKworCQlpZiAoIXNiYW5kKQorCQkJY29udGludWU7CisKKwkJZm9yIChpID0gMDsgaSA8IHNiYW5kLT5uX2NoYW5uZWxzICYmIGMgPCBJV19NQVhfRlJFUVVFTkNJRVM7IGkrKykgeworCQkJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuID0gJnNiYW5kLT5jaGFubmVsc1tpXTsKKworCQkJaWYgKCEoY2hhbi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRCkpIHsKKwkJCQlyYW5nZS0+ZnJlcVtjXS5pID0KKwkJCQkJaWVlZTgwMjExX2ZyZXF1ZW5jeV90b19jaGFubmVsKAorCQkJCQkJY2hhbi0+Y2VudGVyX2ZyZXEpOworCQkJCXJhbmdlLT5mcmVxW2NdLm0gPSBjaGFuLT5jZW50ZXJfZnJlcTsKKwkJCQlyYW5nZS0+ZnJlcVtjXS5lID0gNjsKKwkJCQljKys7CisJCQl9CisJCX0KKwl9CisJcmFuZ2UtPm51bV9jaGFubmVscyA9IGM7CisJcmFuZ2UtPm51bV9mcmVxdWVuY3kgPSBjOworCisJSVdfRVZFTlRfQ0FQQV9TRVRfS0VSTkVMKHJhbmdlLT5ldmVudF9jYXBhKTsKKwlJV19FVkVOVF9DQVBBX1NFVChyYW5nZS0+ZXZlbnRfY2FwYSwgU0lPQ0dJV0FQKTsKKwlJV19FVkVOVF9DQVBBX1NFVChyYW5nZS0+ZXZlbnRfY2FwYSwgU0lPQ0dJV1NDQU4pOworCisJcmFuZ2UtPnNjYW5fY2FwYSB8PSBJV19TQ0FOX0NBUEFfRVNTSUQ7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woY2ZnODAyMTFfd2V4dF9naXdyYW5nZSk7CmRpZmYgLS1naXQgYS9uZXQveDI1L2FmX3gyNS5jIGIvbmV0L3gyNS9hZl94MjUuYwppbmRleCA5ZmM1YjAyLi45Y2ExN2IxIDEwMDY0NAotLS0gYS9uZXQveDI1L2FmX3gyNS5jCisrKyBiL25ldC94MjUvYWZfeDI1LmMKQEAgLTk1MSwxMCArOTUxLDggQEAKIAkvKgogCSAqCUluY29taW5nIENhbGwgVXNlciBEYXRhLgogCSAqLwotCWlmIChza2ItPmxlbiA+PSAwKSB7Ci0JCXNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGEoc2tiLCBtYWtleDI1LT5jYWxsdXNlcmRhdGEuY3VkZGF0YSwgc2tiLT5sZW4pOwotCQltYWtleDI1LT5jYWxsdXNlcmRhdGEuY3VkbGVuZ3RoID0gc2tiLT5sZW47Ci0JfQorCXNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGEoc2tiLCBtYWtleDI1LT5jYWxsdXNlcmRhdGEuY3VkZGF0YSwgc2tiLT5sZW4pOworCW1ha2V4MjUtPmNhbGx1c2VyZGF0YS5jdWRsZW5ndGggPSBza2ItPmxlbjsKIAogCXNrLT5za19hY2tfYmFja2xvZysrOwogCkBAIC0xMTIyLDggKzExMjAsOSBAQAogCWlmIChtc2ctPm1zZ19mbGFncyAmIE1TR19PT0IpCiAJCXNrYl9xdWV1ZV90YWlsKCZ4MjUtPmludGVycnVwdF9vdXRfcXVldWUsIHNrYik7CiAJZWxzZSB7Ci0JCWxlbiA9IHgyNV9vdXRwdXQoc2ssIHNrYik7Ci0JCWlmIChsZW4gPCAwKQorCQlyYyA9IHgyNV9vdXRwdXQoc2ssIHNrYik7CisJCWxlbiA9IHJjOworCQlpZiAocmMgPCAwKQogCQkJa2ZyZWVfc2tiKHNrYik7CiAJCWVsc2UgaWYgKHgyNS0+cWJpdGluY2wpCiAJCQlsZW4rKzsKQEAgLTE2MDgsOCArMTYwNyw4IEBACiAKIFNPQ0tPUFNfV1JBUCh4MjVfcHJvdG8sIEFGX1gyNSk7CiAKLXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgeDI1X3BhY2tldF90eXBlID0gewotCS50eXBlID0JX19jb25zdGFudF9odG9ucyhFVEhfUF9YMjUpLAorc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSB4MjVfcGFja2V0X3R5cGUgX19yZWFkX21vc3RseSA9IHsKKwkudHlwZSA9CWNwdV90b19iZTE2KEVUSF9QX1gyNSksCiAJLmZ1bmMgPQl4MjVfbGFwYl9yZWNlaXZlX2ZyYW1lLAogfTsKIApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9NYWtlZmlsZS5saWIgYi9zY3JpcHRzL01ha2VmaWxlLmxpYgppbmRleCBlMDYzNjU3Ny4uYzE4ZmExNSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9NYWtlZmlsZS5saWIKKysrIGIvc2NyaXB0cy9NYWtlZmlsZS5saWIKQEAgLTk3LDcgKzk3LDcgQEAKICAgICAgICAgICAgICAgICAgLUQiS0JVSUxEX01PRE5BTUU9S0JVSUxEX1NUUigkKGNhbGwgbmFtZS1maXgsJChtb2RuYW1lKSkpIikKIAogI2hhc2ggdmFsdWVzCi1pZmRlZiBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcKK2lmZGVmIENPTkZJR19EWU5BTUlDX0RFQlVHCiBkZWJ1Z19mbGFncyA9IC1EIkRFQlVHX0hBU0g9JChzaGVsbCAuL3NjcmlwdHMvYmFzaWMvaGFzaCBkamIyICQoQEQpJChtb2RuYW1lKSkiXAogICAgICAgICAgICAgICAtRCJERUJVR19IQVNIMj0kKHNoZWxsIC4vc2NyaXB0cy9iYXNpYy9oYXNoIHI1ICQoQEQpJChtb2RuYW1lKSkiCiBlbHNlCmRpZmYgLS1naXQgYS9zY3JpcHRzL2hlYWRlcnNfY2hlY2sucGwgYi9zY3JpcHRzL2hlYWRlcnNfY2hlY2sucGwKaW5kZXggZGIzMGZhYy4uNTZmOTBhNCAxMDA2NDQKLS0tIGEvc2NyaXB0cy9oZWFkZXJzX2NoZWNrLnBsCisrKyBiL3NjcmlwdHMvaGVhZGVyc19jaGVjay5wbApAQCAtMzgsNyArMzgsNyBAQAogCQkmY2hlY2tfYXNtX3R5cGVzKCk7CiAJCSZjaGVja19zaXpldHlwZXMoKTsKIAkJJmNoZWNrX3Byb3RvdHlwZXMoKTsKLQkJJmNoZWNrX2NvbmZpZygpOworCQkjIERyb3BwZWQgZm9yIG5vdy4gVG9vIG11Y2ggbm9pc2UgJmNoZWNrX2NvbmZpZygpOwogCX0KIAljbG9zZSBGSDsKIH0KZGlmZiAtLWdpdCBhL3NjcmlwdHMvbW9kL2ZpbGUyYWxpYXMuYyBiL3NjcmlwdHMvbW9kL2ZpbGUyYWxpYXMuYwppbmRleCA0ZWVhNjBiLi5hMzM0NDI4IDEwMDY0NAotLS0gYS9zY3JpcHRzL21vZC9maWxlMmFsaWFzLmMKKysrIGIvc2NyaXB0cy9tb2QvZmlsZTJhbGlhcy5jCkBAIC03MTAsNiArNzEwLDE0IEBACiAJc3RyY2F0KGFsaWFzLCAiOiIpOwogCXJldHVybiAxOwogfQorCitzdGF0aWMgaW50IGRvX3BsYXRmb3JtX2VudHJ5KGNvbnN0IGNoYXIgKmZpbGVuYW1lLAorCQkJICAgICBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlX2lkICppZCwgY2hhciAqYWxpYXMpCit7CisJc3ByaW50ZihhbGlhcywgUExBVEZPUk1fTU9EVUxFX1BSRUZJWCAiJXMiLCBpZC0+bmFtZSk7CisJcmV0dXJuIDE7Cit9CisKIC8qIElnbm9yZSBhbnkgcHJlZml4LCBlZy4gc29tZSBhcmNoaXRlY3R1cmVzIHByZXBlbmQgXyAqLwogc3RhdGljIGlubGluZSBpbnQgc3ltX2lzKGNvbnN0IGNoYXIgKnN5bWJvbCwgY29uc3QgY2hhciAqbmFtZSkKIHsKQEAgLTg0OSw2ICs4NTcsMTAgQEAKIAkJZG9fdGFibGUoc3ltdmFsLCBzeW0tPnN0X3NpemUsCiAJCQkgc2l6ZW9mKHN0cnVjdCBkbWlfc3lzdGVtX2lkKSwgImRtaSIsCiAJCQkgZG9fZG1pX2VudHJ5LCBtb2QpOworCWVsc2UgaWYgKHN5bV9pcyhzeW1uYW1lLCAiX19tb2RfcGxhdGZvcm1fZGV2aWNlX3RhYmxlIikpCisJCWRvX3RhYmxlKHN5bXZhbCwgc3ltLT5zdF9zaXplLAorCQkJIHNpemVvZihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlX2lkKSwgInBsYXRmb3JtIiwKKwkJCSBkb19wbGF0Zm9ybV9lbnRyeSwgbW9kKTsKIAlmcmVlKHplcm9zKTsKIH0KIApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvS2NvbmZpZyBiL3NlY3VyaXR5L0tjb25maWcKaW5kZXggOTQzODUzNS4uYmIyNDQ3NyAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvS2NvbmZpZworKysgYi9zZWN1cml0eS9LY29uZmlnCkBAIC01NSw3ICs1NSw4IEBACiAJYm9vbCAiRW5hYmxlIHRoZSBzZWN1cml0eWZzIGZpbGVzeXN0ZW0iCiAJaGVscAogCSAgVGhpcyB3aWxsIGJ1aWxkIHRoZSBzZWN1cml0eWZzIGZpbGVzeXN0ZW0uICBJdCBpcyBjdXJyZW50bHkgdXNlZCBieQotCSAgdGhlIFRQTSBiaW9zIGNoYXJhY3RlciBkcml2ZXIuICBJdCBpcyBub3QgdXNlZCBieSBTRUxpbnV4IG9yIFNNQUNLLgorCSAgdGhlIFRQTSBiaW9zIGNoYXJhY3RlciBkcml2ZXIgYW5kIElNQSwgYW4gaW50ZWdyaXR5IHByb3ZpZGVyLiAgSXQgaXMKKwkgIG5vdCB1c2VkIGJ5IFNFTGludXggb3IgU01BQ0suCiAKIAkgIElmIHlvdSBhcmUgdW5zdXJlIGhvdyB0byBhbnN3ZXIgdGhpcyBxdWVzdGlvbiwgYW5zd2VyIE4uCiAKQEAgLTEzNCw2ICsxMzUsOSBAQAogCiBzb3VyY2Ugc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnCiBzb3VyY2Ugc2VjdXJpdHkvc21hY2svS2NvbmZpZworc291cmNlIHNlY3VyaXR5L3RvbW95by9LY29uZmlnCisKK3NvdXJjZSBzZWN1cml0eS9pbnRlZ3JpdHkvaW1hL0tjb25maWcKIAogZW5kbWVudQogCmRpZmYgLS1naXQgYS9zZWN1cml0eS9NYWtlZmlsZSBiL3NlY3VyaXR5L01ha2VmaWxlCmluZGV4IGMwNWMxMjcuLmZhNzcwMjEgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L01ha2VmaWxlCisrKyBiL3NlY3VyaXR5L01ha2VmaWxlCkBAIC01LDYgKzUsNyBAQAogb2JqLSQoQ09ORklHX0tFWVMpCQkJKz0ga2V5cy8KIHN1YmRpci0kKENPTkZJR19TRUNVUklUWV9TRUxJTlVYKQkrPSBzZWxpbnV4CiBzdWJkaXItJChDT05GSUdfU0VDVVJJVFlfU01BQ0spCQkrPSBzbWFjaworc3ViZGlyLSQoQ09ORklHX1NFQ1VSSVRZX1RPTU9ZTykgICAgICAgICs9IHRvbW95bwogCiAjIGFsd2F5cyBlbmFibGUgZGVmYXVsdCBjYXBhYmlsaXRpZXMKIG9iai15CQkrPSBjb21tb25jYXAubwpAQCAtMTUsNSArMTYsMTAgQEAKICMgTXVzdCBwcmVjZWRlIGNhcGFiaWxpdHkubyBpbiBvcmRlciB0byBzdGFjayBwcm9wZXJseS4KIG9iai0kKENPTkZJR19TRUNVUklUWV9TRUxJTlVYKQkJKz0gc2VsaW51eC9idWlsdC1pbi5vCiBvYmotJChDT05GSUdfU0VDVVJJVFlfU01BQ0spCQkrPSBzbWFjay9idWlsdC1pbi5vCitvYmotJChDT05GSUdfU0VDVVJJVFlfVE9NT1lPKQkJKz0gdG9tb3lvL2J1aWx0LWluLm8KIG9iai0kKENPTkZJR19TRUNVUklUWV9ST09UUExVRykJCSs9IHJvb3RfcGx1Zy5vCiBvYmotJChDT05GSUdfQ0dST1VQX0RFVklDRSkJCSs9IGRldmljZV9jZ3JvdXAubworCisjIE9iamVjdCBpbnRlZ3JpdHkgZmlsZSBsaXN0cworc3ViZGlyLSQoQ09ORklHX0lNQSkJCQkrPSBpbnRlZ3JpdHkvaW1hCitvYmotJChDT05GSUdfSU1BKQkJCSs9IGludGVncml0eS9pbWEvYnVpbHQtaW4ubwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvaW5vZGUuYyBiL3NlY3VyaXR5L2lub2RlLmMKaW5kZXggMDA3ZWYyNS4uZjNiOTFiZiAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvaW5vZGUuYworKysgYi9zZWN1cml0eS9pbm9kZS5jCkBAIC0yMDIsMTIgKzIwMiwxMSBAQAogICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgcG9pbnRlciB0byBhIGRlbnRyeSBpZiBpdCBzdWNjZWVkcy4gIFRoaXMKICAqIHBvaW50ZXIgbXVzdCBiZSBwYXNzZWQgdG8gdGhlIHNlY3VyaXR5ZnNfcmVtb3ZlKCkgZnVuY3Rpb24gd2hlbiB0aGUgZmlsZSBpcwogICogdG8gYmUgcmVtb3ZlZCAobm8gYXV0b21hdGljIGNsZWFudXAgaGFwcGVucyBpZiB5b3VyIG1vZHVsZSBpcyB1bmxvYWRlZCwKLSAqIHlvdSBhcmUgcmVzcG9uc2libGUgaGVyZSkuICBJZiBhbiBlcnJvciBvY2N1cnMsICVOVUxMIGlzIHJldHVybmVkLgorICogeW91IGFyZSByZXNwb25zaWJsZSBoZXJlKS4gIElmIGFuIGVycm9yIG9jY3VycywgdGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuCisgKiB0aGUgZXJvcnIgdmFsdWUgKHZpYSBFUlJfUFRSKS4KICAqCiAgKiBJZiBzZWN1cml0eWZzIGlzIG5vdCBlbmFibGVkIGluIHRoZSBrZXJuZWwsIHRoZSB2YWx1ZSAlLUVOT0RFViBpcwotICogcmV0dXJuZWQuICBJdCBpcyBub3Qgd2lzZSB0byBjaGVjayBmb3IgdGhpcyB2YWx1ZSwgYnV0IHJhdGhlciwgY2hlY2sgZm9yCi0gKiAlTlVMTCBvciAhJU5VTEwgaW5zdGVhZCBhcyB0byBlbGltaW5hdGUgdGhlIG5lZWQgZm9yICNpZmRlZiBpbiB0aGUgY2FsbGluZwotICogY29kZS4KKyAqIHJldHVybmVkLgogICovCiBzdHJ1Y3QgZGVudHJ5ICpzZWN1cml0eWZzX2NyZWF0ZV9maWxlKGNvbnN0IGNoYXIgKm5hbWUsIG1vZGVfdCBtb2RlLAogCQkJCSAgIHN0cnVjdCBkZW50cnkgKnBhcmVudCwgdm9pZCAqZGF0YSwKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2ludGVncml0eS9pbWEvS2NvbmZpZyBiL3NlY3VyaXR5L2ludGVncml0eS9pbWEvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2Q5NzY0Ci0tLSAvZGV2L251bGwKKysrIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9LY29uZmlnCkBAIC0wLDAgKzEsNTUgQEAKKyMgSUJNIEludGVncml0eSBNZWFzdXJlbWVudCBBcmNoaXRlY3R1cmUKKyMKK2NvbmZpZyBJTUEKKwlib29sICJJbnRlZ3JpdHkgTWVhc3VyZW1lbnQgQXJjaGl0ZWN0dXJlKElNQSkiCisJZGVwZW5kcyBvbiBBQ1BJCisJc2VsZWN0IFNFQ1VSSVRZRlMKKwlzZWxlY3QgQ1JZUFRPCisJc2VsZWN0IENSWVBUT19ITUFDCisJc2VsZWN0IENSWVBUT19NRDUKKwlzZWxlY3QgQ1JZUFRPX1NIQTEKKwlzZWxlY3QgVENHX1RQTQorCXNlbGVjdCBUQ0dfVElTCisJaGVscAorCSAgVGhlIFRydXN0ZWQgQ29tcHV0aW5nIEdyb3VwKFRDRykgcnVudGltZSBJbnRlZ3JpdHkKKwkgIE1lYXN1cmVtZW50IEFyY2hpdGVjdHVyZShJTUEpIG1haW50YWlucyBhIGxpc3Qgb2YgaGFzaAorCSAgdmFsdWVzIG9mIGV4ZWN1dGFibGVzIGFuZCBvdGhlciBzZW5zaXRpdmUgc3lzdGVtIGZpbGVzLAorCSAgYXMgdGhleSBhcmUgcmVhZCBvciBleGVjdXRlZC4gSWYgYW4gYXR0YWNrZXIgbWFuYWdlcworCSAgdG8gY2hhbmdlIHRoZSBjb250ZW50cyBvZiBhbiBpbXBvcnRhbnQgc3lzdGVtIGZpbGUKKwkgIGJlaW5nIG1lYXN1cmVkLCB3ZSBjYW4gdGVsbC4KKworCSAgSWYgeW91ciBzeXN0ZW0gaGFzIGEgVFBNIGNoaXAsIHRoZW4gSU1BIGFsc28gbWFpbnRhaW5zCisJICBhbiBhZ2dyZWdhdGUgaW50ZWdyaXR5IHZhbHVlIG92ZXIgdGhpcyBsaXN0IGluc2lkZSB0aGUKKwkgIFRQTSBoYXJkd2FyZSwgc28gdGhhdCB0aGUgVFBNIGNhbiBwcm92ZSB0byBhIHRoaXJkIHBhcnR5CisJICB3aGV0aGVyIG9yIG5vdCBjcml0aWNhbCBzeXN0ZW0gZmlsZXMgaGF2ZSBiZWVuIG1vZGlmaWVkLgorCSAgUmVhZCA8aHR0cDovL3d3dy51c2VuaXgub3JnL2V2ZW50cy9zZWMwNC90ZWNoL3NhaWxlci5odG1sPgorCSAgdG8gbGVhcm4gbW9yZSBhYm91dCBJTUEuCisJICBJZiB1bnN1cmUsIHNheSBOLgorCitjb25maWcgSU1BX01FQVNVUkVfUENSX0lEWAorCWludAorCWRlcGVuZHMgb24gSU1BCisJcmFuZ2UgOCAxNAorCWRlZmF1bHQgMTAKKwloZWxwCisJICBJTUFfTUVBU1VSRV9QQ1JfSURYIGRldGVybWluZXMgdGhlIFRQTSBQQ1IgcmVnaXN0ZXIgaW5kZXgKKwkgIHRoYXQgSU1BIHVzZXMgdG8gbWFpbnRhaW4gdGhlIGludGVncml0eSBhZ2dyZWdhdGUgb2YgdGhlCisJICBtZWFzdXJlbWVudCBsaXN0LiAgSWYgdW5zdXJlLCB1c2UgdGhlIGRlZmF1bHQgMTAuCisKK2NvbmZpZyBJTUFfQVVESVQKKwlib29sCisJZGVwZW5kcyBvbiBJTUEKKwlkZWZhdWx0IHkKKwloZWxwCisJICBUaGlzIG9wdGlvbiBhZGRzIGEga2VybmVsIHBhcmFtZXRlciAnaW1hX2F1ZGl0Jywgd2hpY2gKKwkgIGFsbG93cyBpbmZvcm1hdGlvbmFsIGF1ZGl0aW5nIG1lc3NhZ2VzIHRvIGJlIGVuYWJsZWQKKwkgIGF0IGJvb3QuICBJZiB0aGlzIG9wdGlvbiBpcyBzZWxlY3RlZCwgaW5mb3JtYXRpb25hbCBpbnRlZ3JpdHkKKwkgIGF1ZGl0aW5nIG1lc3NhZ2VzIGNhbiBiZSBlbmFibGVkIHdpdGggJ2ltYV9hdWRpdD0xJyBvbgorCSAgdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUuCisKK2NvbmZpZyBJTUFfTFNNX1JVTEVTCisJYm9vbAorCWRlcGVuZHMgb24gSU1BICYmIEFVRElUICYmIChTRUNVUklUWV9TRUxJTlVYIHx8IFNFQ1VSSVRZX1NNQUNLKQorCWRlZmF1bHQgeQorCWhlbHAKKwkgIERpc2FibGluZyB0aGlzIG9wdGlvbiB3aWxsIGRpc3JlZ2FyZCBMU00gYmFzZWQgcG9saWN5IHJ1bGVzLgpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9NYWtlZmlsZSBiL3NlY3VyaXR5L2ludGVncml0eS9pbWEvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg3YzRjYgotLS0gL2Rldi9udWxsCisrKyBiL3NlY3VyaXR5L2ludGVncml0eS9pbWEvTWFrZWZpbGUKQEAgLTAsMCArMSw5IEBACisjCisjIE1ha2VmaWxlIGZvciBidWlsZGluZyBUcnVzdGVkIENvbXB1dGluZyBHcm91cCdzKFRDRykgcnVudGltZSBJbnRlZ3JpdHkKKyMgTWVhc3VyZW1lbnQgQXJjaGl0ZWN0dXJlKElNQSkuCisjCisKK29iai0kKENPTkZJR19JTUEpICs9IGltYS5vCisKK2ltYS15IDo9IGltYV9mcy5vIGltYV9xdWV1ZS5vIGltYV9pbml0Lm8gaW1hX21haW4ubyBpbWFfY3J5cHRvLm8gaW1hX2FwaS5vIFwKKwkgaW1hX3BvbGljeS5vIGltYV9paW50Lm8gaW1hX2F1ZGl0Lm8KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hLmggYi9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2NWViNTMKLS0tIC9kZXYvbnVsbAorKysgYi9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYS5oCkBAIC0wLDAgKzEsMTY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LDIwMDYsMjAwNywyMDA4IElCTSBDb3Jwb3JhdGlvbgorICoKKyAqIEF1dGhvcnM6CisgKiBSZWluZXIgU2FpbGVyIDxzYWlsZXJAd2F0c29uLmlibS5jb20+CisgKiBNaW1pIFpvaGFyIDx6b2hhckB1cy5pYm0uY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyIG9mIHRoZQorICogTGljZW5zZS4KKyAqCisgKiBGaWxlOiBpbWEuaAorICoJaW50ZXJuYWwgSW50ZWdyaXR5IE1lYXN1cmVtZW50IEFyY2hpdGVjdHVyZSAoSU1BKSBkZWZpbml0aW9ucworICovCisKKyNpZm5kZWYgX19MSU5VWF9JTUFfSAorI2RlZmluZSBfX0xJTlVYX0lNQV9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgorI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CisjaW5jbHVkZSA8bGludXgvaGFzaC5oPgorI2luY2x1ZGUgPGxpbnV4L3RwbS5oPgorI2luY2x1ZGUgPGxpbnV4L2F1ZGl0Lmg+CisKK2VudW0gaW1hX3Nob3dfdHlwZSB7IElNQV9TSE9XX0JJTkFSWSwgSU1BX1NIT1dfQVNDSUkgfTsKK2VudW0gdHBtX3BjcnMgeyBUUE1fUENSMCA9IDAsIFRQTV9QQ1I4ID0gOCB9OworCisvKiBkaWdlc3Qgc2l6ZSBmb3IgSU1BLCBmaXRzIFNIQTEgb3IgTUQ1ICovCisjZGVmaW5lIElNQV9ESUdFU1RfU0laRQkJMjAKKyNkZWZpbmUgSU1BX0VWRU5UX05BTUVfTEVOX01BWAkyNTUKKworI2RlZmluZSBJTUFfSEFTSF9CSVRTIDkKKyNkZWZpbmUgSU1BX01FQVNVUkVfSFRBQkxFX1NJWkUgKDEgPDwgSU1BX0hBU0hfQklUUykKKworLyogc2V0IGR1cmluZyBpbml0aWFsaXphdGlvbiAqLworZXh0ZXJuIGludCBpbWFfaW5pdGlhbGl6ZWQ7CitleHRlcm4gaW50IGltYV91c2VkX2NoaXA7CitleHRlcm4gY2hhciAqaW1hX2hhc2g7CisKKy8qIElNQSBpbm9kZSB0ZW1wbGF0ZSBkZWZpbml0aW9uICovCitzdHJ1Y3QgaW1hX3RlbXBsYXRlX2RhdGEgeworCXU4IGRpZ2VzdFtJTUFfRElHRVNUX1NJWkVdOwkvKiBzaGExL21kNSBtZWFzdXJlbWVudCBoYXNoICovCisJY2hhciBmaWxlX25hbWVbSU1BX0VWRU5UX05BTUVfTEVOX01BWCArIDFdOwkvKiBuYW1lICsgXDAgKi8KK307CisKK3N0cnVjdCBpbWFfdGVtcGxhdGVfZW50cnkgeworCXU4IGRpZ2VzdFtJTUFfRElHRVNUX1NJWkVdOwkvKiBzaGExIG9yIG1kNSBtZWFzdXJlbWVudCBoYXNoICovCisJY29uc3QgY2hhciAqdGVtcGxhdGVfbmFtZTsKKwlpbnQgdGVtcGxhdGVfbGVuOworCXN0cnVjdCBpbWFfdGVtcGxhdGVfZGF0YSB0ZW1wbGF0ZTsKK307CisKK3N0cnVjdCBpbWFfcXVldWVfZW50cnkgeworCXN0cnVjdCBobGlzdF9ub2RlIGhuZXh0OwkvKiBwbGFjZSBpbiBoYXNoIGNvbGxpc2lvbiBsaXN0ICovCisJc3RydWN0IGxpc3RfaGVhZCBsYXRlcjsJCS8qIHBsYWNlIGluIGltYV9tZWFzdXJlbWVudHMgbGlzdCAqLworCXN0cnVjdCBpbWFfdGVtcGxhdGVfZW50cnkgKmVudHJ5OworfTsKK2V4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIGltYV9tZWFzdXJlbWVudHM7CS8qIGxpc3Qgb2YgYWxsIG1lYXN1cmVtZW50cyAqLworCisvKiBkZWNsYXJhdGlvbnMgKi8KK3ZvaWQgaW50ZWdyaXR5X2F1ZGl0X21zZyhpbnQgYXVkaXRfbXNnbm8sIHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkgY29uc3QgdW5zaWduZWQgY2hhciAqZm5hbWUsIGNvbnN0IGNoYXIgKm9wLAorCQkJIGNvbnN0IGNoYXIgKmNhdXNlLCBpbnQgcmVzdWx0LCBpbnQgaW5mbyk7CisKKy8qIEludGVybmFsIElNQSBmdW5jdGlvbiBkZWZpbml0aW9ucyAqLwordm9pZCBpbWFfaWludGNhY2hlX2luaXQodm9pZCk7CitpbnQgaW1hX2luaXQodm9pZCk7Cit2b2lkIGltYV9jbGVhbnVwKHZvaWQpOworaW50IGltYV9mc19pbml0KHZvaWQpOwordm9pZCBpbWFfZnNfY2xlYW51cCh2b2lkKTsKK2ludCBpbWFfYWRkX3RlbXBsYXRlX2VudHJ5KHN0cnVjdCBpbWFfdGVtcGxhdGVfZW50cnkgKmVudHJ5LCBpbnQgdmlvbGF0aW9uLAorCQkJICAgY29uc3QgY2hhciAqb3AsIHN0cnVjdCBpbm9kZSAqaW5vZGUpOworaW50IGltYV9jYWxjX2hhc2goc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgKmRpZ2VzdCk7CitpbnQgaW1hX2NhbGNfdGVtcGxhdGVfaGFzaChpbnQgdGVtcGxhdGVfbGVuLCB2b2lkICp0ZW1wbGF0ZSwgY2hhciAqZGlnZXN0KTsKK2ludCBpbWFfY2FsY19ib290X2FnZ3JlZ2F0ZShjaGFyICpkaWdlc3QpOwordm9pZCBpbWFfYWRkX3Zpb2xhdGlvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpmaWxlbmFtZSwKKwkJICAgICAgIGNvbnN0IGNoYXIgKm9wLCBjb25zdCBjaGFyICpjYXVzZSk7CisKKy8qCisgKiB1c2VkIHRvIHByb3RlY3QgaF90YWJsZSBhbmQgc2hhX3RhYmxlCisgKi8KK2V4dGVybiBzcGlubG9ja190IGltYV9xdWV1ZV9sb2NrOworCitzdHJ1Y3QgaW1hX2hfdGFibGUgeworCWF0b21pY19sb25nX3QgbGVuOwkvKiBudW1iZXIgb2Ygc3RvcmVkIG1lYXN1cmVtZW50cyBpbiB0aGUgbGlzdCAqLworCWF0b21pY19sb25nX3QgdmlvbGF0aW9uczsKKwlzdHJ1Y3QgaGxpc3RfaGVhZCBxdWV1ZVtJTUFfTUVBU1VSRV9IVEFCTEVfU0laRV07Cit9OworZXh0ZXJuIHN0cnVjdCBpbWFfaF90YWJsZSBpbWFfaHRhYmxlOworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgaW1hX2hhc2hfa2V5KHU4ICpkaWdlc3QpCit7CisJcmV0dXJuIGhhc2hfbG9uZygqZGlnZXN0LCBJTUFfSEFTSF9CSVRTKTsKK30KKworLyogaWludCBjYWNoZSBmbGFncyAqLworI2RlZmluZSBJTUFfTUVBU1VSRUQJCTEKKyNkZWZpbmUgSU1BX0lJTlRfRFVNUF9TVEFDSwk1MTIKKworLyogaW50ZWdyaXR5IGRhdGEgYXNzb2NpYXRlZCB3aXRoIGFuIGlub2RlICovCitzdHJ1Y3QgaW1hX2lpbnRfY2FjaGUgeworCXU2NCB2ZXJzaW9uOwkJLyogdHJhY2sgaW5vZGUgY2hhbmdlcyAqLworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTggZGlnZXN0W0lNQV9ESUdFU1RfU0laRV07CisJc3RydWN0IG11dGV4IG11dGV4OwkvKiBwcm90ZWN0czogdmVyc2lvbiwgZmxhZ3MsIGRpZ2VzdCAqLworCWxvbmcgcmVhZGNvdW50OwkJLyogbWVhc3VyZWQgZmlsZXMgcmVhZGNvdW50ICovCisJbG9uZyB3cml0ZWNvdW50OwkvKiBtZWFzdXJlZCBmaWxlcyB3cml0ZWNvdW50ICovCisJbG9uZyBvcGVuY291bnQ7CQkvKiBvcGVucyByZWZlcmVuY2UgY291bnQgKi8KKwlzdHJ1Y3Qga3JlZiByZWZjb3VudDsJLyogaW1hX2lpbnRfY2FjaGUgcmVmZXJlbmNlIGNvdW50ICovCisJc3RydWN0IHJjdV9oZWFkIHJjdTsKK307CisKKy8qIExJTSBBUEkgZnVuY3Rpb24gZGVmaW5pdGlvbnMgKi8KK2ludCBpbWFfbXVzdF9tZWFzdXJlKHN0cnVjdCBpbWFfaWludF9jYWNoZSAqaWludCwgc3RydWN0IGlub2RlICppbm9kZSwKKwkJICAgICBpbnQgbWFzaywgaW50IGZ1bmN0aW9uKTsKK2ludCBpbWFfY29sbGVjdF9tZWFzdXJlbWVudChzdHJ1Y3QgaW1hX2lpbnRfY2FjaGUgKmlpbnQsIHN0cnVjdCBmaWxlICpmaWxlKTsKK3ZvaWQgaW1hX3N0b3JlX21lYXN1cmVtZW50KHN0cnVjdCBpbWFfaWludF9jYWNoZSAqaWludCwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgICBjb25zdCB1bnNpZ25lZCBjaGFyICpmaWxlbmFtZSk7CitpbnQgaW1hX3N0b3JlX3RlbXBsYXRlKHN0cnVjdCBpbWFfdGVtcGxhdGVfZW50cnkgKmVudHJ5LCBpbnQgdmlvbGF0aW9uLAorCQkgICAgICAgc3RydWN0IGlub2RlICppbm9kZSk7Cit2b2lkIGltYV90ZW1wbGF0ZV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZSwKKwkJICAgICAgIGVudW0gaW1hX3Nob3dfdHlwZSBzaG93KTsKKworLyogcmFkaXggdHJlZSBjYWxscyB0byBsb29rdXAsIGluc2VydCwgZGVsZXRlCisgKiBpbnRlZ3JpdHkgZGF0YSBhc3NvY2lhdGVkIHdpdGggYW4gaW5vZGUuCisgKi8KK3N0cnVjdCBpbWFfaWludF9jYWNoZSAqaW1hX2lpbnRfaW5zZXJ0KHN0cnVjdCBpbm9kZSAqaW5vZGUpOworc3RydWN0IGltYV9paW50X2NhY2hlICppbWFfaWludF9maW5kX2dldChzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKK3N0cnVjdCBpbWFfaWludF9jYWNoZSAqaW1hX2lpbnRfZmluZF9pbnNlcnRfZ2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUpOwordm9pZCBpbWFfaWludF9kZWxldGUoc3RydWN0IGlub2RlICppbm9kZSk7Cit2b2lkIGlpbnRfZnJlZShzdHJ1Y3Qga3JlZiAqa3JlZik7Cit2b2lkIGlpbnRfcmN1X2ZyZWUoc3RydWN0IHJjdV9oZWFkICpyY3UpOworCisvKiBJTUEgcG9saWN5IHJlbGF0ZWQgZnVuY3Rpb25zICovCitlbnVtIGltYV9ob29rcyB7IFBBVEhfQ0hFQ0sgPSAxLCBGSUxFX01NQVAsIEJQUk1fQ0hFQ0sgfTsKKworaW50IGltYV9tYXRjaF9wb2xpY3koc3RydWN0IGlub2RlICppbm9kZSwgZW51bSBpbWFfaG9va3MgZnVuYywgaW50IG1hc2spOwordm9pZCBpbWFfaW5pdF9wb2xpY3kodm9pZCk7Cit2b2lkIGltYV91cGRhdGVfcG9saWN5KHZvaWQpOworaW50IGltYV9wYXJzZV9hZGRfcnVsZShjaGFyICopOwordm9pZCBpbWFfZGVsZXRlX3J1bGVzKHZvaWQpOworCisvKiBMU00gYmFzZWQgcG9saWN5IHJ1bGVzIHJlcXVpcmUgYXVkaXQgKi8KKyNpZmRlZiBDT05GSUdfSU1BX0xTTV9SVUxFUworCisjZGVmaW5lIHNlY3VyaXR5X2ZpbHRlcl9ydWxlX2luaXQgc2VjdXJpdHlfYXVkaXRfcnVsZV9pbml0CisjZGVmaW5lIHNlY3VyaXR5X2ZpbHRlcl9ydWxlX21hdGNoIHNlY3VyaXR5X2F1ZGl0X3J1bGVfbWF0Y2gKKworI2Vsc2UKKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfZmlsdGVyX3J1bGVfaW5pdCh1MzIgZmllbGQsIHUzMiBvcCwgY2hhciAqcnVsZXN0ciwKKwkJCQkJICAgIHZvaWQgKipsc21ydWxlKQoreworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9maWx0ZXJfcnVsZV9tYXRjaCh1MzIgc2VjaWQsIHUzMiBmaWVsZCwgdTMyIG9wLAorCQkJCQkgICAgIHZvaWQgKmxzbXJ1bGUsCisJCQkJCSAgICAgc3RydWN0IGF1ZGl0X2NvbnRleHQgKmFjdHgpCit7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisjZW5kaWYgLyogQ09ORklHX0lNQV9MU01fUlVMRVMgKi8KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfYXBpLmMgYi9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9hcGkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2Q1OGI2Ci0tLSAvZGV2L251bGwKKysrIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfYXBpLmMKQEAgLTAsMCArMSwxOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggSUJNIENvcnBvcmF0aW9uCisgKgorICogQXV0aG9yOiBNaW1pIFpvaGFyIDx6b2hhckB1cy5pYm0uY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyIG9mIHRoZQorICogTGljZW5zZS4KKyAqCisgKiBGaWxlOiBpbWFfYXBpLmMKKyAqCUltcGxlbWVudHMgbXVzdF9tZWFzdXJlLCBjb2xsZWN0X21lYXN1cmVtZW50LCBzdG9yZV9tZWFzdXJlbWVudCwKKyAqCWFuZCBzdG9yZV90ZW1wbGF0ZS4KKyAqLworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCisjaW5jbHVkZSAiaW1hLmgiCitzdGF0aWMgY29uc3QgY2hhciAqSU1BX1RFTVBMQVRFX05BTUUgPSAiaW1hIjsKKworLyoKKyAqIGltYV9zdG9yZV90ZW1wbGF0ZSAtIHN0b3JlIGltYSB0ZW1wbGF0ZSBtZWFzdXJlbWVudHMKKyAqCisgKiBDYWxjdWxhdGUgdGhlIGhhc2ggb2YgYSB0ZW1wbGF0ZSBlbnRyeSwgYWRkIHRoZSB0ZW1wbGF0ZSBlbnRyeQorICogdG8gYW4gb3JkZXJlZCBsaXN0IG9mIG1lYXN1cmVtZW50IGVudHJpZXMgbWFpbnRhaW5lZCBpbnNpZGUgdGhlIGtlcm5lbCwKKyAqIGFuZCBhbHNvIHVwZGF0ZSB0aGUgYWdncmVnYXRlIGludGVncml0eSB2YWx1ZSAobWFpbnRhaW5lZCBpbnNpZGUgdGhlCisgKiBjb25maWd1cmVkIFRQTSBQQ1IpIG92ZXIgdGhlIGhhc2hlcyBvZiB0aGUgY3VycmVudCBsaXN0IG9mIG1lYXN1cmVtZW50CisgKiBlbnRyaWVzLgorICoKKyAqIEFwcGxpY2F0aW9ucyByZXRyaWV2ZSB0aGUgY3VycmVudCBrZXJuZWwtaGVsZCBtZWFzdXJlbWVudCBsaXN0IHRocm91Z2gKKyAqIHRoZSBzZWN1cml0eWZzIGVudHJpZXMgaW4gL3N5cy9rZXJuZWwvc2VjdXJpdHkvaW1hLiBUaGUgc2lnbmVkIGFnZ3JlZ2F0ZQorICogVFBNIFBDUiAoY2FsbGVkIHF1b3RlKSBjYW4gYmUgcmV0cmlldmVkIHVzaW5nIGEgVFBNIHVzZXIgc3BhY2UgbGlicmFyeQorICogYW5kIGlzIHVzZWQgdG8gdmFsaWRhdGUgdGhlIG1lYXN1cmVtZW50IGxpc3QuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIGVycm9yIGNvZGUgb3RoZXJ3aXNlCisgKi8KK2ludCBpbWFfc3RvcmVfdGVtcGxhdGUoc3RydWN0IGltYV90ZW1wbGF0ZV9lbnRyeSAqZW50cnksCisJCSAgICAgICBpbnQgdmlvbGF0aW9uLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCWNvbnN0IGNoYXIgKm9wID0gImFkZF90ZW1wbGF0ZV9tZWFzdXJlIjsKKwljb25zdCBjaGFyICphdWRpdF9jYXVzZSA9ICJoYXNoaW5nX2Vycm9yIjsKKwlpbnQgcmVzdWx0OworCisJbWVtc2V0KGVudHJ5LT5kaWdlc3QsIDAsIHNpemVvZihlbnRyeS0+ZGlnZXN0KSk7CisJZW50cnktPnRlbXBsYXRlX25hbWUgPSBJTUFfVEVNUExBVEVfTkFNRTsKKwllbnRyeS0+dGVtcGxhdGVfbGVuID0gc2l6ZW9mKGVudHJ5LT50ZW1wbGF0ZSk7CisKKwlpZiAoIXZpb2xhdGlvbikgeworCQlyZXN1bHQgPSBpbWFfY2FsY190ZW1wbGF0ZV9oYXNoKGVudHJ5LT50ZW1wbGF0ZV9sZW4sCisJCQkJCQkmZW50cnktPnRlbXBsYXRlLAorCQkJCQkJZW50cnktPmRpZ2VzdCk7CisJCWlmIChyZXN1bHQgPCAwKSB7CisJCQlpbnRlZ3JpdHlfYXVkaXRfbXNnKEFVRElUX0lOVEVHUklUWV9QQ1IsIGlub2RlLAorCQkJCQkgICAgZW50cnktPnRlbXBsYXRlX25hbWUsIG9wLAorCQkJCQkgICAgYXVkaXRfY2F1c2UsIHJlc3VsdCwgMCk7CisJCQlyZXR1cm4gcmVzdWx0OworCQl9CisJfQorCXJlc3VsdCA9IGltYV9hZGRfdGVtcGxhdGVfZW50cnkoZW50cnksIHZpb2xhdGlvbiwgb3AsIGlub2RlKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogaW1hX2FkZF92aW9sYXRpb24gLSBhZGQgdmlvbGF0aW9uIHRvIG1lYXN1cmVtZW50IGxpc3QuCisgKgorICogVmlvbGF0aW9ucyBhcmUgZmxhZ2dlZCBpbiB0aGUgbWVhc3VyZW1lbnQgbGlzdCB3aXRoIHplcm8gaGFzaCB2YWx1ZXMuCisgKiBCeSBleHRlbmRpbmcgdGhlIFBDUiB3aXRoIDB4RkYncyBpbnN0ZWFkIG9mIHdpdGggemVyb2VzLCB0aGUgUENSCisgKiB2YWx1ZSBpcyBpbnZhbGlkYXRlZC4KKyAqLwordm9pZCBpbWFfYWRkX3Zpb2xhdGlvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpmaWxlbmFtZSwKKwkJICAgICAgIGNvbnN0IGNoYXIgKm9wLCBjb25zdCBjaGFyICpjYXVzZSkKK3sKKwlzdHJ1Y3QgaW1hX3RlbXBsYXRlX2VudHJ5ICplbnRyeTsKKwlpbnQgdmlvbGF0aW9uID0gMTsKKwlpbnQgcmVzdWx0OworCisJLyogY2FuIG92ZXJmbG93LCBvbmx5IGluZGljYXRvciAqLworCWF0b21pY19sb25nX2luYygmaW1hX2h0YWJsZS52aW9sYXRpb25zKTsKKworCWVudHJ5ID0ga21hbGxvYyhzaXplb2YoKmVudHJ5KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFlbnRyeSkgeworCQlyZXN1bHQgPSAtRU5PTUVNOworCQlnb3RvIGVycl9vdXQ7CisJfQorCW1lbXNldCgmZW50cnktPnRlbXBsYXRlLCAwLCBzaXplb2YoZW50cnktPnRlbXBsYXRlKSk7CisJc3RybmNweShlbnRyeS0+dGVtcGxhdGUuZmlsZV9uYW1lLCBmaWxlbmFtZSwgSU1BX0VWRU5UX05BTUVfTEVOX01BWCk7CisJcmVzdWx0ID0gaW1hX3N0b3JlX3RlbXBsYXRlKGVudHJ5LCB2aW9sYXRpb24sIGlub2RlKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJa2ZyZWUoZW50cnkpOworZXJyX291dDoKKwlpbnRlZ3JpdHlfYXVkaXRfbXNnKEFVRElUX0lOVEVHUklUWV9QQ1IsIGlub2RlLCBmaWxlbmFtZSwKKwkJCSAgICBvcCwgY2F1c2UsIHJlc3VsdCwgMCk7Cit9CisKKy8qKgorICogaW1hX211c3RfbWVhc3VyZSAtIG1lYXN1cmUgZGVjaXNpb24gYmFzZWQgb24gcG9saWN5LgorICogQGlub2RlOiBwb2ludGVyIHRvIGlub2RlIHRvIG1lYXN1cmUKKyAqIEBtYXNrOiBjb250YWlucyB0aGUgcGVybWlzc2lvbiBtYXNrIChNQVlfUkVBRCwgTUFZX1dSSVRFLCBNQVlfRVhFQ1VURSkKKyAqIEBmdW5jdGlvbjogY2FsbGluZyBmdW5jdGlvbiAoUEFUSF9DSEVDSywgQlBSTV9DSEVDSywgRklMRV9NTUFQKQorICoKKyAqIFRoZSBwb2xpY3kgaXMgZGVmaW5lZCBpbiB0ZXJtcyBvZiBrZXlwYWlyczoKKyAqIAkJc3Viaj0sIG9iaj0sIHR5cGU9LCBmdW5jPSwgbWFzaz0sIGZzbWFnaWM9CisgKglzdWJqLG9iaiwgYW5kIHR5cGU6IGFyZSBMU00gc3BlY2lmaWMuCisgKiAJZnVuYzogUEFUSF9DSEVDSyB8IEJQUk1fQ0hFQ0sgfCBGSUxFX01NQVAKKyAqIAltYXNrOiBjb250YWlucyB0aGUgcGVybWlzc2lvbiBtYXNrCisgKglmc21hZ2ljOiBoZXggdmFsdWUKKyAqCisgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGlpbnQtPm11dGV4IGhlbGQuCisgKgorICogUmV0dXJuIDAgdG8gbWVhc3VyZS4gUmV0dXJuIDEgaWYgYWxyZWFkeSBtZWFzdXJlZC4KKyAqIEZvciBtYXRjaGluZyBhIERPTlRfTUVBU1VSRSBwb2xpY3ksIG5vIHBvbGljeSwgb3Igb3RoZXIKKyAqIGVycm9yLCByZXR1cm4gYW4gZXJyb3IgY29kZS4KKyovCitpbnQgaW1hX211c3RfbWVhc3VyZShzdHJ1Y3QgaW1hX2lpbnRfY2FjaGUgKmlpbnQsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCSAgICAgaW50IG1hc2ssIGludCBmdW5jdGlvbikKK3sKKwlpbnQgbXVzdF9tZWFzdXJlOworCisJaWYgKGlpbnQtPmZsYWdzICYgSU1BX01FQVNVUkVEKQorCQlyZXR1cm4gMTsKKworCW11c3RfbWVhc3VyZSA9IGltYV9tYXRjaF9wb2xpY3koaW5vZGUsIGZ1bmN0aW9uLCBtYXNrKTsKKwlyZXR1cm4gbXVzdF9tZWFzdXJlID8gMCA6IC1FQUNDRVM7Cit9CisKKy8qCisgKiBpbWFfY29sbGVjdF9tZWFzdXJlbWVudCAtIGNvbGxlY3QgZmlsZSBtZWFzdXJlbWVudAorICoKKyAqIENhbGN1bGF0ZSB0aGUgZmlsZSBoYXNoLCBpZiBpdCBkb2Vzbid0IGFscmVhZHkgZXhpc3QsCisgKiBzdG9yaW5nIHRoZSBtZWFzdXJlbWVudCBhbmQgaV92ZXJzaW9uIGluIHRoZSBpaW50LgorICoKKyAqIE11c3QgYmUgY2FsbGVkIHdpdGggaWludC0+bXV0ZXggaGVsZC4KKyAqCisgKiBSZXR1cm4gMCBvbiBzdWNjZXNzLCBlcnJvciBjb2RlIG90aGVyd2lzZQorICovCitpbnQgaW1hX2NvbGxlY3RfbWVhc3VyZW1lbnQoc3RydWN0IGltYV9paW50X2NhY2hlICppaW50LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlpbnQgcmVzdWx0ID0gLUVFWElTVDsKKworCWlmICghKGlpbnQtPmZsYWdzICYgSU1BX01FQVNVUkVEKSkgeworCQl1NjQgaV92ZXJzaW9uID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfdmVyc2lvbjsKKworCQltZW1zZXQoaWludC0+ZGlnZXN0LCAwLCBJTUFfRElHRVNUX1NJWkUpOworCQlyZXN1bHQgPSBpbWFfY2FsY19oYXNoKGZpbGUsIGlpbnQtPmRpZ2VzdCk7CisJCWlmICghcmVzdWx0KQorCQkJaWludC0+dmVyc2lvbiA9IGlfdmVyc2lvbjsKKwl9CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIGltYV9zdG9yZV9tZWFzdXJlbWVudCAtIHN0b3JlIGZpbGUgbWVhc3VyZW1lbnQKKyAqCisgKiBDcmVhdGUgYW4gImltYSIgdGVtcGxhdGUgYW5kIHRoZW4gc3RvcmUgdGhlIHRlbXBsYXRlIGJ5IGNhbGxpbmcKKyAqIGltYV9zdG9yZV90ZW1wbGF0ZS4KKyAqCisgKiBXZSBvbmx5IGdldCBoZXJlIGlmIHRoZSBpbm9kZSBoYXMgbm90IGFscmVhZHkgYmVlbiBtZWFzdXJlZCwKKyAqIGJ1dCB0aGUgbWVhc3VyZW1lbnQgY291bGQgYWxyZWFkeSBleGlzdDoKKyAqIAktIG11bHRpcGxlIGNvcGllcyBvZiB0aGUgc2FtZSBmaWxlIG9uIGVpdGhlciB0aGUgc2FtZSBvcgorICoJICBkaWZmZXJlbnQgZmlsZXN5c3RlbXMuCisgKgktIHRoZSBpbm9kZSB3YXMgcHJldmlvdXNseSBmbHVzaGVkIGFzIHdlbGwgYXMgdGhlIGlpbnQgaW5mbywKKyAqCSAgY29udGFpbmluZyB0aGUgaGFzaGluZyBpbmZvLgorICoKKyAqIE11c3QgYmUgY2FsbGVkIHdpdGggaWludC0+bXV0ZXggaGVsZC4KKyAqLwordm9pZCBpbWFfc3RvcmVfbWVhc3VyZW1lbnQoc3RydWN0IGltYV9paW50X2NhY2hlICppaW50LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmZpbGVuYW1lKQoreworCWNvbnN0IGNoYXIgKm9wID0gImFkZF90ZW1wbGF0ZV9tZWFzdXJlIjsKKwljb25zdCBjaGFyICphdWRpdF9jYXVzZSA9ICJFTk9NRU0iOworCWludCByZXN1bHQgPSAtRU5PTUVNOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgaW1hX3RlbXBsYXRlX2VudHJ5ICplbnRyeTsKKwlpbnQgdmlvbGF0aW9uID0gMDsKKworCWVudHJ5ID0ga21hbGxvYyhzaXplb2YoKmVudHJ5KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFlbnRyeSkgeworCQlpbnRlZ3JpdHlfYXVkaXRfbXNnKEFVRElUX0lOVEVHUklUWV9QQ1IsIGlub2RlLCBmaWxlbmFtZSwKKwkJCQkgICAgb3AsIGF1ZGl0X2NhdXNlLCByZXN1bHQsIDApOworCQlyZXR1cm47CisJfQorCW1lbXNldCgmZW50cnktPnRlbXBsYXRlLCAwLCBzaXplb2YoZW50cnktPnRlbXBsYXRlKSk7CisJbWVtY3B5KGVudHJ5LT50ZW1wbGF0ZS5kaWdlc3QsIGlpbnQtPmRpZ2VzdCwgSU1BX0RJR0VTVF9TSVpFKTsKKwlzdHJuY3B5KGVudHJ5LT50ZW1wbGF0ZS5maWxlX25hbWUsIGZpbGVuYW1lLCBJTUFfRVZFTlRfTkFNRV9MRU5fTUFYKTsKKworCXJlc3VsdCA9IGltYV9zdG9yZV90ZW1wbGF0ZShlbnRyeSwgdmlvbGF0aW9uLCBpbm9kZSk7CisJaWYgKCFyZXN1bHQpCisJCWlpbnQtPmZsYWdzIHw9IElNQV9NRUFTVVJFRDsKKwllbHNlCisJCWtmcmVlKGVudHJ5KTsKK30KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX2F1ZGl0LmMgYi9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9hdWRpdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlMDgyYmIKLS0tIC9kZXYvbnVsbAorKysgYi9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9hdWRpdC5jCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggSUJNIENvcnBvcmF0aW9uCisgKiBBdXRob3I6IE1pbWkgWm9oYXIgPHpvaGFyQHVzLmlibS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogRmlsZTogaW50ZWdyaXR5X2F1ZGl0LmMKKyAqIAlBdWRpdCBjYWxscyBmb3IgdGhlIGludGVncml0eSBzdWJzeXN0ZW0KKyAqLworCisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9hdWRpdC5oPgorI2luY2x1ZGUgImltYS5oIgorCitzdGF0aWMgaW50IGltYV9hdWRpdDsKKworI2lmZGVmIENPTkZJR19JTUFfQVVESVQKKworLyogaW1hX2F1ZGl0X3NldHVwIC0gZW5hYmxlIGluZm9ybWF0aW9uYWwgYXVkaXRpbmcgbWVzc2FnZXMgKi8KK3N0YXRpYyBpbnQgX19pbml0IGltYV9hdWRpdF9zZXR1cChjaGFyICpzdHIpCit7CisJdW5zaWduZWQgbG9uZyBhdWRpdDsKKwlpbnQgcmMsIHJlc3VsdCA9IDA7CisJY2hhciAqb3AgPSAiaW1hX2F1ZGl0IjsKKwljaGFyICpjYXVzZTsKKworCXJjID0gc3RyaWN0X3N0cnRvdWwoc3RyLCAwLCAmYXVkaXQpOworCWlmIChyYyB8fCBhdWRpdCA+IDEpCisJCXJlc3VsdCA9IDE7CisJZWxzZQorCQlpbWFfYXVkaXQgPSBhdWRpdDsKKwljYXVzZSA9IGltYV9hdWRpdCA/ICJlbmFibGVkIiA6ICJub3RfZW5hYmxlZCI7CisJaW50ZWdyaXR5X2F1ZGl0X21zZyhBVURJVF9JTlRFR1JJVFlfU1RBVFVTLCBOVUxMLCBOVUxMLAorCQkJICAgIG9wLCBjYXVzZSwgcmVzdWx0LCAwKTsKKwlyZXR1cm4gMTsKK30KK19fc2V0dXAoImltYV9hdWRpdD0iLCBpbWFfYXVkaXRfc2V0dXApOworI2VuZGlmCisKK3ZvaWQgaW50ZWdyaXR5X2F1ZGl0X21zZyhpbnQgYXVkaXRfbXNnbm8sIHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkgY29uc3QgdW5zaWduZWQgY2hhciAqZm5hbWUsIGNvbnN0IGNoYXIgKm9wLAorCQkJIGNvbnN0IGNoYXIgKmNhdXNlLCBpbnQgcmVzdWx0LCBpbnQgYXVkaXRfaW5mbykKK3sKKwlzdHJ1Y3QgYXVkaXRfYnVmZmVyICphYjsKKworCWlmICghaW1hX2F1ZGl0ICYmIGF1ZGl0X2luZm8gPT0gMSkgLyogU2tpcCBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzICovCisJCXJldHVybjsKKworCWFiID0gYXVkaXRfbG9nX3N0YXJ0KGN1cnJlbnQtPmF1ZGl0X2NvbnRleHQsIEdGUF9LRVJORUwsIGF1ZGl0X21zZ25vKTsKKwlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiaW50ZWdyaXR5OiBwaWQ9JWQgdWlkPSV1IGF1aWQ9JXUgc2VzPSV1IiwKKwkJCSBjdXJyZW50LT5waWQsIGN1cnJlbnQtPmNyZWQtPnVpZCwKKwkJCSBhdWRpdF9nZXRfbG9naW51aWQoY3VycmVudCksCisJCQkgYXVkaXRfZ2V0X3Nlc3Npb25pZChjdXJyZW50KSk7CisJYXVkaXRfbG9nX3Rhc2tfY29udGV4dChhYik7CisJc3dpdGNoIChhdWRpdF9tc2dubykgeworCWNhc2UgQVVESVRfSU5URUdSSVRZX0RBVEE6CisJY2FzZSBBVURJVF9JTlRFR1JJVFlfTUVUQURBVEE6CisJY2FzZSBBVURJVF9JTlRFR1JJVFlfUENSOgorCWNhc2UgQVVESVRfSU5URUdSSVRZX1NUQVRVUzoKKwkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIiBvcD0lcyBjYXVzZT0lcyIsIG9wLCBjYXVzZSk7CisJCWJyZWFrOworCWNhc2UgQVVESVRfSU5URUdSSVRZX0hBU0g6CisJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgb3A9JXMgaGFzaD0lcyIsIG9wLCBjYXVzZSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgb3A9JXMiLCBvcCk7CisJfQorCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgY29tbT0iKTsKKwlhdWRpdF9sb2dfdW50cnVzdGVkc3RyaW5nKGFiLCBjdXJyZW50LT5jb21tKTsKKwlpZiAoZm5hbWUpIHsKKwkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIiBuYW1lPSIpOworCQlhdWRpdF9sb2dfdW50cnVzdGVkc3RyaW5nKGFiLCBmbmFtZSk7CisJfQorCWlmIChpbm9kZSkKKwkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIiBkZXY9JXMgaW5vPSVsdSIsCisJCQkJIGlub2RlLT5pX3NiLT5zX2lkLCBpbm9kZS0+aV9pbm8pOworCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgcmVzPSVkIiwgIXJlc3VsdCA/IDAgOiAxKTsKKwlhdWRpdF9sb2dfZW5kKGFiKTsKK30KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX2NyeXB0by5jIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfY3J5cHRvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBkNTcyYgotLS0gL2Rldi9udWxsCisrKyBiL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX2NyeXB0by5jCkBAIC0wLDAgKzEsMTQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LDIwMDYsMjAwNywyMDA4IElCTSBDb3Jwb3JhdGlvbgorICoKKyAqIEF1dGhvcnM6CisgKiBNaW1pIFpvaGFyIDx6b2hhckB1cy5pYm0uY29tPgorICogS3lsZW5lIEhhbGwgPGtqaGFsbEB1cy5pYm0uY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqIEZpbGU6IGltYV9jcnlwdG8uYworICogCUNhbGN1bGF0ZXMgbWQ1L3NoYTEgZmlsZSBoYXNoLCB0ZW1wbGF0ZSBoYXNoLCBib290LWFnZ3JlYXRlIGhhc2gKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgorI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSAiaW1hLmgiCisKK3N0YXRpYyBpbnQgaW5pdF9kZXNjKHN0cnVjdCBoYXNoX2Rlc2MgKmRlc2MpCit7CisJaW50IHJjOworCisJZGVzYy0+dGZtID0gY3J5cHRvX2FsbG9jX2hhc2goaW1hX2hhc2gsIDAsIENSWVBUT19BTEdfQVNZTkMpOworCWlmIChJU19FUlIoZGVzYy0+dGZtKSkgeworCQlwcl9pbmZvKCJmYWlsZWQgdG8gbG9hZCAlcyB0cmFuc2Zvcm06ICVsZFxuIiwKKwkJCWltYV9oYXNoLCBQVFJfRVJSKGRlc2MtPnRmbSkpOworCQlyYyA9IFBUUl9FUlIoZGVzYy0+dGZtKTsKKwkJcmV0dXJuIHJjOworCX0KKwlkZXNjLT5mbGFncyA9IDA7CisJcmMgPSBjcnlwdG9faGFzaF9pbml0KGRlc2MpOworCWlmIChyYykKKwkJY3J5cHRvX2ZyZWVfaGFzaChkZXNjLT50Zm0pOworCXJldHVybiByYzsKK30KKworLyoKKyAqIENhbGN1bGF0ZSB0aGUgTUQ1L1NIQTEgZmlsZSBkaWdlc3QKKyAqLworaW50IGltYV9jYWxjX2hhc2goc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgKmRpZ2VzdCkKK3sKKwlzdHJ1Y3QgaGFzaF9kZXNjIGRlc2M7CisJc3RydWN0IHNjYXR0ZXJsaXN0IHNnWzFdOworCWxvZmZfdCBpX3NpemU7CisJY2hhciAqcmJ1ZjsKKwlpbnQgcmMsIG9mZnNldCA9IDA7CisKKwlyYyA9IGluaXRfZGVzYygmZGVzYyk7CisJaWYgKHJjICE9IDApCisJCXJldHVybiByYzsKKworCXJidWYgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyYnVmKSB7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCWlfc2l6ZSA9IGlfc2l6ZV9yZWFkKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKTsKKwl3aGlsZSAob2Zmc2V0IDwgaV9zaXplKSB7CisJCWludCByYnVmX2xlbjsKKworCQlyYnVmX2xlbiA9IGtlcm5lbF9yZWFkKGZpbGUsIG9mZnNldCwgcmJ1ZiwgUEFHRV9TSVpFKTsKKwkJaWYgKHJidWZfbGVuIDwgMCkgeworCQkJcmMgPSByYnVmX2xlbjsKKwkJCWJyZWFrOworCQl9CisJCW9mZnNldCArPSByYnVmX2xlbjsKKwkJc2dfaW5pdF9vbmUoc2csIHJidWYsIHJidWZfbGVuKTsKKworCQlyYyA9IGNyeXB0b19oYXNoX3VwZGF0ZSgmZGVzYywgc2csIHJidWZfbGVuKTsKKwkJaWYgKHJjKQorCQkJYnJlYWs7CisJfQorCWtmcmVlKHJidWYpOworCWlmICghcmMpCisJCXJjID0gY3J5cHRvX2hhc2hfZmluYWwoJmRlc2MsIGRpZ2VzdCk7CitvdXQ6CisJY3J5cHRvX2ZyZWVfaGFzaChkZXNjLnRmbSk7CisJcmV0dXJuIHJjOworfQorCisvKgorICogQ2FsY3VsYXRlIHRoZSBoYXNoIG9mIGEgZ2l2ZW4gdGVtcGxhdGUKKyAqLworaW50IGltYV9jYWxjX3RlbXBsYXRlX2hhc2goaW50IHRlbXBsYXRlX2xlbiwgdm9pZCAqdGVtcGxhdGUsIGNoYXIgKmRpZ2VzdCkKK3sKKwlzdHJ1Y3QgaGFzaF9kZXNjIGRlc2M7CisJc3RydWN0IHNjYXR0ZXJsaXN0IHNnWzFdOworCWludCByYzsKKworCXJjID0gaW5pdF9kZXNjKCZkZXNjKTsKKwlpZiAocmMgIT0gMCkKKwkJcmV0dXJuIHJjOworCisJc2dfaW5pdF9vbmUoc2csIHRlbXBsYXRlLCB0ZW1wbGF0ZV9sZW4pOworCXJjID0gY3J5cHRvX2hhc2hfdXBkYXRlKCZkZXNjLCBzZywgdGVtcGxhdGVfbGVuKTsKKwlpZiAoIXJjKQorCQlyYyA9IGNyeXB0b19oYXNoX2ZpbmFsKCZkZXNjLCBkaWdlc3QpOworCWNyeXB0b19mcmVlX2hhc2goZGVzYy50Zm0pOworCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgaW1hX3BjcnJlYWQoaW50IGlkeCwgdTggKnBjcikKK3sKKwlpZiAoIWltYV91c2VkX2NoaXApCisJCXJldHVybjsKKworCWlmICh0cG1fcGNyX3JlYWQoVFBNX0FOWV9OVU0sIGlkeCwgcGNyKSAhPSAwKQorCQlwcl9lcnIoIkVycm9yIENvbW11bmljYXRpbmcgdG8gVFBNIGNoaXBcbiIpOworfQorCisvKgorICogQ2FsY3VsYXRlIHRoZSBib290IGFnZ3JlZ2F0ZSBoYXNoCisgKi8KK2ludCBpbWFfY2FsY19ib290X2FnZ3JlZ2F0ZShjaGFyICpkaWdlc3QpCit7CisJc3RydWN0IGhhc2hfZGVzYyBkZXNjOworCXN0cnVjdCBzY2F0dGVybGlzdCBzZzsKKwl1OCBwY3JfaVtJTUFfRElHRVNUX1NJWkVdOworCWludCByYywgaTsKKworCXJjID0gaW5pdF9kZXNjKCZkZXNjKTsKKwlpZiAocmMgIT0gMCkKKwkJcmV0dXJuIHJjOworCisJLyogY3VtdWxhdGl2ZSBzaGExIG92ZXIgdHBtIHJlZ2lzdGVycyAwLTcgKi8KKwlmb3IgKGkgPSBUUE1fUENSMDsgaSA8IFRQTV9QQ1I4OyBpKyspIHsKKwkJaW1hX3BjcnJlYWQoaSwgcGNyX2kpOworCQkvKiBub3cgYWNjdW11bGF0ZSB3aXRoIGN1cnJlbnQgYWdncmVnYXRlICovCisJCXNnX2luaXRfb25lKCZzZywgcGNyX2ksIElNQV9ESUdFU1RfU0laRSk7CisJCXJjID0gY3J5cHRvX2hhc2hfdXBkYXRlKCZkZXNjLCAmc2csIElNQV9ESUdFU1RfU0laRSk7CisJfQorCWlmICghcmMpCisJCWNyeXB0b19oYXNoX2ZpbmFsKCZkZXNjLCBkaWdlc3QpOworCWNyeXB0b19mcmVlX2hhc2goZGVzYy50Zm0pOworCXJldHVybiByYzsKK30KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX2ZzLmMgYi9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9mcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmYmUyNTkKLS0tIC9kZXYvbnVsbAorKysgYi9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9mcy5jCkBAIC0wLDAgKzEsMzc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LDIwMDYsMjAwNywyMDA4IElCTSBDb3Jwb3JhdGlvbgorICoKKyAqIEF1dGhvcnM6CisgKiBLeWxlbmUgSGFsbCA8a2poYWxsQHVzLmlibS5jb20+CisgKiBSZWluZXIgU2FpbGVyIDxzYWlsZXJAdXMuaWJtLmNvbT4KKyAqIE1pbWkgWm9oYXIgPHpvaGFyQHVzLmlibS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIgb2YgdGhlCisgKiBMaWNlbnNlLgorICoKKyAqIEZpbGU6IGltYV9mcy5jCisgKglpbXBsZW1lbmVudHMgc2VjdXJpdHkgZmlsZSBzeXN0ZW0gZm9yIHJlcG9ydGluZworICoJY3VycmVudCBtZWFzdXJlbWVudCBsaXN0IGFuZCBJTUEgc3RhdGlzdGljcworICovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9yY3VsaXN0Lmg+CisjaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wYXJzZXIuaD4KKworI2luY2x1ZGUgImltYS5oIgorCitzdGF0aWMgaW50IHZhbGlkX3BvbGljeSA9IDE7CisjZGVmaW5lIFRNUEJVRkxFTiAxMgorc3RhdGljIHNzaXplX3QgaW1hX3Nob3dfaHRhYmxlX3ZhbHVlKGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwKKwkJCQkgICAgIGxvZmZfdCAqcHBvcywgYXRvbWljX2xvbmdfdCAqdmFsKQoreworCWNoYXIgdG1wYnVmW1RNUEJVRkxFTl07CisJc3NpemVfdCBsZW47CisKKwlsZW4gPSBzY25wcmludGYodG1wYnVmLCBUTVBCVUZMRU4sICIlbGlcbiIsIGF0b21pY19sb25nX3JlYWQodmFsKSk7CisJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKGJ1ZiwgY291bnQsIHBwb3MsIHRtcGJ1ZiwgbGVuKTsKK30KKworc3RhdGljIHNzaXplX3QgaW1hX3Nob3dfaHRhYmxlX3Zpb2xhdGlvbnMoc3RydWN0IGZpbGUgKmZpbHAsCisJCQkJCSAgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCQkJICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlyZXR1cm4gaW1hX3Nob3dfaHRhYmxlX3ZhbHVlKGJ1ZiwgY291bnQsIHBwb3MsICZpbWFfaHRhYmxlLnZpb2xhdGlvbnMpOworfQorCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpbWFfaHRhYmxlX3Zpb2xhdGlvbnNfb3BzID0geworCS5yZWFkID0gaW1hX3Nob3dfaHRhYmxlX3Zpb2xhdGlvbnMKK307CisKK3N0YXRpYyBzc2l6ZV90IGltYV9zaG93X21lYXN1cmVtZW50c19jb3VudChzdHJ1Y3QgZmlsZSAqZmlscCwKKwkJCQkJICAgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCQkJICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJcmV0dXJuIGltYV9zaG93X2h0YWJsZV92YWx1ZShidWYsIGNvdW50LCBwcG9zLCAmaW1hX2h0YWJsZS5sZW4pOworCit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGltYV9tZWFzdXJlbWVudHNfY291bnRfb3BzID0geworCS5yZWFkID0gaW1hX3Nob3dfbWVhc3VyZW1lbnRzX2NvdW50Cit9OworCisvKiByZXR1cm5zIHBvaW50ZXIgdG8gaGxpc3Rfbm9kZSAqLworc3RhdGljIHZvaWQgKmltYV9tZWFzdXJlbWVudHNfc3RhcnQoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKnBvcykKK3sKKwlsb2ZmX3QgbCA9ICpwb3M7CisJc3RydWN0IGltYV9xdWV1ZV9lbnRyeSAqcWU7CisKKwkvKiB3ZSBuZWVkIGEgbG9jayBzaW5jZSBwb3MgY291bGQgcG9pbnQgYmV5b25kIGxhc3QgZWxlbWVudCAqLworCXJjdV9yZWFkX2xvY2soKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShxZSwgJmltYV9tZWFzdXJlbWVudHMsIGxhdGVyKSB7CisJCWlmICghbC0tKSB7CisJCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJCXJldHVybiBxZTsKKwkJfQorCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgKmltYV9tZWFzdXJlbWVudHNfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQoreworCXN0cnVjdCBpbWFfcXVldWVfZW50cnkgKnFlID0gdjsKKworCS8qIGxvY2sgcHJvdGVjdHMgd2hlbiByZWFkaW5nIGJleW9uZCBsYXN0IGVsZW1lbnQKKwkgKiBhZ2FpbnN0IGNvbmN1cnJlbnQgbGlzdC1leHRlbnNpb24KKwkgKi8KKwlyY3VfcmVhZF9sb2NrKCk7CisJcWUgPSBsaXN0X2VudHJ5KHJjdV9kZXJlZmVyZW5jZShxZS0+bGF0ZXIubmV4dCksCisJCQlzdHJ1Y3QgaW1hX3F1ZXVlX2VudHJ5LCBsYXRlcik7CisJcmN1X3JlYWRfdW5sb2NrKCk7CisJKCpwb3MpKys7CisKKwlyZXR1cm4gKCZxZS0+bGF0ZXIgPT0gJmltYV9tZWFzdXJlbWVudHMpID8gTlVMTCA6IHFlOworfQorCitzdGF0aWMgdm9pZCBpbWFfbWVhc3VyZW1lbnRzX3N0b3Aoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQoreworfQorCitzdGF0aWMgdm9pZCBpbWFfcHV0YyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEsIGludCBkYXRhbGVuKQoreworCXdoaWxlIChkYXRhbGVuLS0pCisJCXNlcV9wdXRjKG0sICooY2hhciAqKWRhdGErKyk7Cit9CisKKy8qIHByaW50IGZvcm1hdDoKKyAqICAgICAgIDMyYml0LWxlPXBjciMKKyAqICAgICAgIGNoYXJbMjBdPXRlbXBsYXRlIGRpZ2VzdAorICogICAgICAgMzJiaXQtbGU9dGVtcGxhdGUgbmFtZSBzaXplCisgKiAgICAgICBjaGFyW25dPXRlbXBsYXRlIG5hbWUKKyAqICAgICAgIGV2ZW50ZGF0YVtuXT10ZW1wbGF0ZSBzcGVjaWZpYyBkYXRhCisgKi8KK3N0YXRpYyBpbnQgaW1hX21lYXN1cmVtZW50c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKK3sKKwkvKiB0aGUgbGlzdCBuZXZlciBzaHJpbmtzLCBzbyB3ZSBkb24ndCBuZWVkIGEgbG9jayBoZXJlICovCisJc3RydWN0IGltYV9xdWV1ZV9lbnRyeSAqcWUgPSB2OworCXN0cnVjdCBpbWFfdGVtcGxhdGVfZW50cnkgKmU7CisJaW50IG5hbWVsZW47CisJdTMyIHBjciA9IENPTkZJR19JTUFfTUVBU1VSRV9QQ1JfSURYOworCisJLyogZ2V0IGVudHJ5ICovCisJZSA9IHFlLT5lbnRyeTsKKwlpZiAoZSA9PSBOVUxMKQorCQlyZXR1cm4gLTE7CisKKwkvKgorCSAqIDFzdDogUENSSW5kZXgKKwkgKiBQQ1IgdXNlZCBpcyBhbHdheXMgdGhlIHNhbWUgKGNvbmZpZyBvcHRpb24pIGluCisJICogbGl0dGxlLWVuZGlhbiBmb3JtYXQKKwkgKi8KKwlpbWFfcHV0YyhtLCAmcGNyLCBzaXplb2YgcGNyKTsKKworCS8qIDJuZDogdGVtcGxhdGUgZGlnZXN0ICovCisJaW1hX3B1dGMobSwgZS0+ZGlnZXN0LCBJTUFfRElHRVNUX1NJWkUpOworCisJLyogM3JkOiB0ZW1wbGF0ZSBuYW1lIHNpemUgKi8KKwluYW1lbGVuID0gc3RybGVuKGUtPnRlbXBsYXRlX25hbWUpOworCWltYV9wdXRjKG0sICZuYW1lbGVuLCBzaXplb2YgbmFtZWxlbik7CisKKwkvKiA0dGg6ICB0ZW1wbGF0ZSBuYW1lICovCisJaW1hX3B1dGMobSwgKHZvaWQgKillLT50ZW1wbGF0ZV9uYW1lLCBuYW1lbGVuKTsKKworCS8qIDV0aDogIHRlbXBsYXRlIHNwZWNpZmljIGRhdGEgKi8KKwlpbWFfdGVtcGxhdGVfc2hvdyhtLCAoc3RydWN0IGltYV90ZW1wbGF0ZV9kYXRhICopJmUtPnRlbXBsYXRlLAorCQkJICBJTUFfU0hPV19CSU5BUlkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIGltYV9tZWFzdXJtZW50c19zZXFvcHMgPSB7CisJLnN0YXJ0ID0gaW1hX21lYXN1cmVtZW50c19zdGFydCwKKwkubmV4dCA9IGltYV9tZWFzdXJlbWVudHNfbmV4dCwKKwkuc3RvcCA9IGltYV9tZWFzdXJlbWVudHNfc3RvcCwKKwkuc2hvdyA9IGltYV9tZWFzdXJlbWVudHNfc2hvdworfTsKKworc3RhdGljIGludCBpbWFfbWVhc3VyZW1lbnRzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNlcV9vcGVuKGZpbGUsICZpbWFfbWVhc3VybWVudHNfc2Vxb3BzKTsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaW1hX21lYXN1cmVtZW50c19vcHMgPSB7CisJLm9wZW4gPSBpbWFfbWVhc3VyZW1lbnRzX29wZW4sCisJLnJlYWQgPSBzZXFfcmVhZCwKKwkubGxzZWVrID0gc2VxX2xzZWVrLAorCS5yZWxlYXNlID0gc2VxX3JlbGVhc2UsCit9OworCitzdGF0aWMgdm9pZCBpbWFfcHJpbnRfZGlnZXN0KHN0cnVjdCBzZXFfZmlsZSAqbSwgdTggKmRpZ2VzdCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBJTUFfRElHRVNUX1NJWkU7IGkrKykKKwkJc2VxX3ByaW50ZihtLCAiJTAyeCIsICooZGlnZXN0ICsgaSkpOworfQorCit2b2lkIGltYV90ZW1wbGF0ZV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZSwgZW51bSBpbWFfc2hvd190eXBlIHNob3cpCit7CisJc3RydWN0IGltYV90ZW1wbGF0ZV9kYXRhICplbnRyeSA9IGU7CisJaW50IG5hbWVsZW47CisKKwlzd2l0Y2ggKHNob3cpIHsKKwljYXNlIElNQV9TSE9XX0FTQ0lJOgorCQlpbWFfcHJpbnRfZGlnZXN0KG0sIGVudHJ5LT5kaWdlc3QpOworCQlzZXFfcHJpbnRmKG0sICIgJXNcbiIsIGVudHJ5LT5maWxlX25hbWUpOworCQlicmVhazsKKwljYXNlIElNQV9TSE9XX0JJTkFSWToKKwkJaW1hX3B1dGMobSwgZW50cnktPmRpZ2VzdCwgSU1BX0RJR0VTVF9TSVpFKTsKKworCQluYW1lbGVuID0gc3RybGVuKGVudHJ5LT5maWxlX25hbWUpOworCQlpbWFfcHV0YyhtLCAmbmFtZWxlbiwgc2l6ZW9mIG5hbWVsZW4pOworCQlpbWFfcHV0YyhtLCBlbnRyeS0+ZmlsZV9uYW1lLCBuYW1lbGVuKTsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKKy8qIHByaW50IGluIGFzY2lpICovCitzdGF0aWMgaW50IGltYV9hc2NpaV9tZWFzdXJlbWVudHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCit7CisJLyogdGhlIGxpc3QgbmV2ZXIgc2hyaW5rcywgc28gd2UgZG9uJ3QgbmVlZCBhIGxvY2sgaGVyZSAqLworCXN0cnVjdCBpbWFfcXVldWVfZW50cnkgKnFlID0gdjsKKwlzdHJ1Y3QgaW1hX3RlbXBsYXRlX2VudHJ5ICplOworCisJLyogZ2V0IGVudHJ5ICovCisJZSA9IHFlLT5lbnRyeTsKKwlpZiAoZSA9PSBOVUxMKQorCQlyZXR1cm4gLTE7CisKKwkvKiAxc3Q6IFBDUiB1c2VkIChjb25maWcgb3B0aW9uKSAqLworCXNlcV9wcmludGYobSwgIiUyZCAiLCBDT05GSUdfSU1BX01FQVNVUkVfUENSX0lEWCk7CisKKwkvKiAybmQ6IFNIQTEgdGVtcGxhdGUgaGFzaCAqLworCWltYV9wcmludF9kaWdlc3QobSwgZS0+ZGlnZXN0KTsKKworCS8qIDN0aDogIHRlbXBsYXRlIG5hbWUgKi8KKwlzZXFfcHJpbnRmKG0sICIgJXMgIiwgZS0+dGVtcGxhdGVfbmFtZSk7CisKKwkvKiA0dGg6ICB0ZW1wbGF0ZSBzcGVjaWZpYyBkYXRhICovCisJaW1hX3RlbXBsYXRlX3Nob3cobSwgKHN0cnVjdCBpbWFfdGVtcGxhdGVfZGF0YSAqKSZlLT50ZW1wbGF0ZSwKKwkJCSAgSU1BX1NIT1dfQVNDSUkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIGltYV9hc2NpaV9tZWFzdXJlbWVudHNfc2Vxb3BzID0geworCS5zdGFydCA9IGltYV9tZWFzdXJlbWVudHNfc3RhcnQsCisJLm5leHQgPSBpbWFfbWVhc3VyZW1lbnRzX25leHQsCisJLnN0b3AgPSBpbWFfbWVhc3VyZW1lbnRzX3N0b3AsCisJLnNob3cgPSBpbWFfYXNjaWlfbWVhc3VyZW1lbnRzX3Nob3cKK307CisKK3N0YXRpYyBpbnQgaW1hX2FzY2lpX21lYXN1cmVtZW50c19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzZXFfb3BlbihmaWxlLCAmaW1hX2FzY2lpX21lYXN1cmVtZW50c19zZXFvcHMpOworfQorCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpbWFfYXNjaWlfbWVhc3VyZW1lbnRzX29wcyA9IHsKKwkub3BlbiA9IGltYV9hc2NpaV9tZWFzdXJlbWVudHNfb3BlbiwKKwkucmVhZCA9IHNlcV9yZWFkLAorCS5sbHNlZWsgPSBzZXFfbHNlZWssCisJLnJlbGVhc2UgPSBzZXFfcmVsZWFzZSwKK307CisKK3N0YXRpYyBzc2l6ZV90IGltYV93cml0ZV9wb2xpY3koc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCisJCQkJc2l6ZV90IGRhdGFsZW4sIGxvZmZfdCAqcHBvcykKK3sKKwljaGFyICpkYXRhOworCWludCByYzsKKworCWlmIChkYXRhbGVuID49IFBBR0VfU0laRSkKKwkJcmV0dXJuIC1FTk9NRU07CisJaWYgKCpwcG9zICE9IDApIHsKKwkJLyogTm8gcGFydGlhbCB3cml0ZXMuICovCisJCXJldHVybiAtRUlOVkFMOworCX0KKwlkYXRhID0ga21hbGxvYyhkYXRhbGVuICsgMSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkYXRhKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChjb3B5X2Zyb21fdXNlcihkYXRhLCBidWYsIGRhdGFsZW4pKSB7CisJCWtmcmVlKGRhdGEpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisJKihkYXRhICsgZGF0YWxlbikgPSAnXDAnOworCXJjID0gaW1hX3BhcnNlX2FkZF9ydWxlKGRhdGEpOworCWlmIChyYyA8IDApIHsKKwkJZGF0YWxlbiA9IC1FSU5WQUw7CisJCXZhbGlkX3BvbGljeSA9IDA7CisJfQorCisJa2ZyZWUoZGF0YSk7CisJcmV0dXJuIGRhdGFsZW47Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICppbWFfZGlyOworc3RhdGljIHN0cnVjdCBkZW50cnkgKmJpbmFyeV9ydW50aW1lX21lYXN1cmVtZW50czsKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICphc2NpaV9ydW50aW1lX21lYXN1cmVtZW50czsKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpydW50aW1lX21lYXN1cmVtZW50c19jb3VudDsKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICp2aW9sYXRpb25zOworc3RhdGljIHN0cnVjdCBkZW50cnkgKmltYV9wb2xpY3k7CisKK3N0YXRpYyBhdG9taWNfdCBwb2xpY3lfb3BlbmNvdW50ID0gQVRPTUlDX0lOSVQoMSk7CisvKgorICogaW1hX29wZW5fcG9saWN5OiBzZXF1ZW50aWFsaXplIGFjY2VzcyB0byB0aGUgcG9saWN5IGZpbGUKKyAqLworaW50IGltYV9vcGVuX3BvbGljeShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgc3RydWN0IGZpbGUgKiBmaWxwKQoreworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZwb2xpY3lfb3BlbmNvdW50KSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIC1FQlVTWTsKK30KKworLyoKKyAqIGltYV9yZWxlYXNlX3BvbGljeSAtIHN0YXJ0IHVzaW5nIHRoZSBuZXcgbWVhc3VyZSBwb2xpY3kgcnVsZXMuCisgKgorICogSW5pdGlhbGx5LCBpbWFfbWVhc3VyZSBwb2ludHMgdG8gdGhlIGRlZmF1bHQgcG9saWN5IHJ1bGVzLCBub3cKKyAqIHBvaW50IHRvIHRoZSBuZXcgcG9saWN5IHJ1bGVzLCBhbmQgcmVtb3ZlIHRoZSBzZWN1cml0eWZzIHBvbGljeSBmaWxlLAorICogYXNzdW1pbmcgYSB2YWxpZCBwb2xpY3kuCisgKi8KK3N0YXRpYyBpbnQgaW1hX3JlbGVhc2VfcG9saWN5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWlmICghdmFsaWRfcG9saWN5KSB7CisJCWltYV9kZWxldGVfcnVsZXMoKTsKKwkJdmFsaWRfcG9saWN5ID0gMTsKKwkJYXRvbWljX3NldCgmcG9saWN5X29wZW5jb3VudCwgMSk7CisJCXJldHVybiAwOworCX0KKwlpbWFfdXBkYXRlX3BvbGljeSgpOworCXNlY3VyaXR5ZnNfcmVtb3ZlKGltYV9wb2xpY3kpOworCWltYV9wb2xpY3kgPSBOVUxMOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpbWFfbWVhc3VyZV9wb2xpY3lfb3BzID0geworCS5vcGVuID0gaW1hX29wZW5fcG9saWN5LAorCS53cml0ZSA9IGltYV93cml0ZV9wb2xpY3ksCisJLnJlbGVhc2UgPSBpbWFfcmVsZWFzZV9wb2xpY3kKK307CisKK2ludCBpbWFfZnNfaW5pdCh2b2lkKQoreworCWltYV9kaXIgPSBzZWN1cml0eWZzX2NyZWF0ZV9kaXIoImltYSIsIE5VTEwpOworCWlmIChJU19FUlIoaW1hX2RpcikpCisJCXJldHVybiAtMTsKKworCWJpbmFyeV9ydW50aW1lX21lYXN1cmVtZW50cyA9CisJICAgIHNlY3VyaXR5ZnNfY3JlYXRlX2ZpbGUoImJpbmFyeV9ydW50aW1lX21lYXN1cmVtZW50cyIsCisJCQkJICAgU19JUlVTUiB8IFNfSVJHUlAsIGltYV9kaXIsIE5VTEwsCisJCQkJICAgJmltYV9tZWFzdXJlbWVudHNfb3BzKTsKKwlpZiAoSVNfRVJSKGJpbmFyeV9ydW50aW1lX21lYXN1cmVtZW50cykpCisJCWdvdG8gb3V0OworCisJYXNjaWlfcnVudGltZV9tZWFzdXJlbWVudHMgPQorCSAgICBzZWN1cml0eWZzX2NyZWF0ZV9maWxlKCJhc2NpaV9ydW50aW1lX21lYXN1cmVtZW50cyIsCisJCQkJICAgU19JUlVTUiB8IFNfSVJHUlAsIGltYV9kaXIsIE5VTEwsCisJCQkJICAgJmltYV9hc2NpaV9tZWFzdXJlbWVudHNfb3BzKTsKKwlpZiAoSVNfRVJSKGFzY2lpX3J1bnRpbWVfbWVhc3VyZW1lbnRzKSkKKwkJZ290byBvdXQ7CisKKwlydW50aW1lX21lYXN1cmVtZW50c19jb3VudCA9CisJICAgIHNlY3VyaXR5ZnNfY3JlYXRlX2ZpbGUoInJ1bnRpbWVfbWVhc3VyZW1lbnRzX2NvdW50IiwKKwkJCQkgICBTX0lSVVNSIHwgU19JUkdSUCwgaW1hX2RpciwgTlVMTCwKKwkJCQkgICAmaW1hX21lYXN1cmVtZW50c19jb3VudF9vcHMpOworCWlmIChJU19FUlIocnVudGltZV9tZWFzdXJlbWVudHNfY291bnQpKQorCQlnb3RvIG91dDsKKworCXZpb2xhdGlvbnMgPQorCSAgICBzZWN1cml0eWZzX2NyZWF0ZV9maWxlKCJ2aW9sYXRpb25zIiwgU19JUlVTUiB8IFNfSVJHUlAsCisJCQkJICAgaW1hX2RpciwgTlVMTCwgJmltYV9odGFibGVfdmlvbGF0aW9uc19vcHMpOworCWlmIChJU19FUlIodmlvbGF0aW9ucykpCisJCWdvdG8gb3V0OworCisJaW1hX3BvbGljeSA9IHNlY3VyaXR5ZnNfY3JlYXRlX2ZpbGUoInBvbGljeSIsCisJCQkJCSAgICBTX0lSVVNSIHwgU19JUkdSUCB8IFNfSVdVU1IsCisJCQkJCSAgICBpbWFfZGlyLCBOVUxMLAorCQkJCQkgICAgJmltYV9tZWFzdXJlX3BvbGljeV9vcHMpOworCWlmIChJU19FUlIoaW1hX3BvbGljeSkpCisJCWdvdG8gb3V0OworCisJcmV0dXJuIDA7CitvdXQ6CisJc2VjdXJpdHlmc19yZW1vdmUocnVudGltZV9tZWFzdXJlbWVudHNfY291bnQpOworCXNlY3VyaXR5ZnNfcmVtb3ZlKGFzY2lpX3J1bnRpbWVfbWVhc3VyZW1lbnRzKTsKKwlzZWN1cml0eWZzX3JlbW92ZShiaW5hcnlfcnVudGltZV9tZWFzdXJlbWVudHMpOworCXNlY3VyaXR5ZnNfcmVtb3ZlKGltYV9kaXIpOworCXNlY3VyaXR5ZnNfcmVtb3ZlKGltYV9wb2xpY3kpOworCXJldHVybiAtMTsKK30KKwordm9pZCBfX2V4aXQgaW1hX2ZzX2NsZWFudXAodm9pZCkKK3sKKwlzZWN1cml0eWZzX3JlbW92ZSh2aW9sYXRpb25zKTsKKwlzZWN1cml0eWZzX3JlbW92ZShydW50aW1lX21lYXN1cmVtZW50c19jb3VudCk7CisJc2VjdXJpdHlmc19yZW1vdmUoYXNjaWlfcnVudGltZV9tZWFzdXJlbWVudHMpOworCXNlY3VyaXR5ZnNfcmVtb3ZlKGJpbmFyeV9ydW50aW1lX21lYXN1cmVtZW50cyk7CisJc2VjdXJpdHlmc19yZW1vdmUoaW1hX2Rpcik7CisJc2VjdXJpdHlmc19yZW1vdmUoaW1hX3BvbGljeSk7Cit9CmRpZmYgLS1naXQgYS9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9paW50LmMgYi9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9paW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM3OWYxZQotLS0gL2Rldi9udWxsCisrKyBiL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX2lpbnQuYwpAQCAtMCwwICsxLDIwNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBJQk0gQ29ycG9yYXRpb24KKyAqCisgKiBBdXRob3JzOgorICogTWltaSBab2hhciA8em9oYXJAdXMuaWJtLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMiBvZiB0aGUKKyAqIExpY2Vuc2UuCisgKgorICogRmlsZTogaW1hX2lpbnQuYworICogCS0gaW1wbGVtZW50cyB0aGUgSU1BIGhvb2tzOiBpbWFfaW5vZGVfYWxsb2MsIGltYV9pbm9kZV9mcmVlCisgKgktIGNhY2hlIGludGVncml0eSBpbmZvcm1hdGlvbiBhc3NvY2lhdGVkIHdpdGggYW4gaW5vZGUKKyAqCSAgdXNpbmcgYSByYWRpeCB0cmVlLgorICovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9yYWRpeC10cmVlLmg+CisjaW5jbHVkZSAiaW1hLmgiCisKKyNkZWZpbmUgaW1hX2lpbnRfZGVsZXRlIGltYV9pbm9kZV9mcmVlCisKK1JBRElYX1RSRUUoaW1hX2lpbnRfc3RvcmUsIEdGUF9BVE9NSUMpOworREVGSU5FX1NQSU5MT0NLKGltYV9paW50X2xvY2spOworCitzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmlpbnRfY2FjaGUgX19yZWFkX21vc3RseTsKKworLyogaW1hX2lpbnRfZmluZF9nZXQgLSByZXR1cm4gdGhlIGlpbnQgYXNzb2NpYXRlZCB3aXRoIGFuIGlub2RlCisgKgorICogaW1hX2lpbnRfZmluZF9nZXQgZ2V0cyBhIHJlZmVyZW5jZSB0byB0aGUgaWludC4gQ2FsbGVyIG11c3QKKyAqIHJlbWVtYmVyIHRvIHB1dCB0aGUgaWludCByZWZlcmVuY2UuCisgKi8KK3N0cnVjdCBpbWFfaWludF9jYWNoZSAqaW1hX2lpbnRfZmluZF9nZXQoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlzdHJ1Y3QgaW1hX2lpbnRfY2FjaGUgKmlpbnQ7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJaWludCA9IHJhZGl4X3RyZWVfbG9va3VwKCZpbWFfaWludF9zdG9yZSwgKHVuc2lnbmVkIGxvbmcpaW5vZGUpOworCWlmICghaWludCkKKwkJZ290byBvdXQ7CisJa3JlZl9nZXQoJmlpbnQtPnJlZmNvdW50KTsKK291dDoKKwlyY3VfcmVhZF91bmxvY2soKTsKKwlyZXR1cm4gaWludDsKK30KKworLyogQWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgaWludCBhc3NvY2lhdGVkIHdpdGggdGhlIGlub2RlCisgKiBmcm9tIHRoZSBpaW50X2NhY2hlIHNsYWIsIGluaXRpYWxpemUgdGhlIGlpbnQsIGFuZAorICogaW5zZXJ0IGl0IGludG8gdGhlIHJhZGl4IHRyZWUuCisgKgorICogT24gc3VjY2VzcyByZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBpaW50OyBvbiBmYWlsdXJlIHJldHVybiBOVUxMLgorICovCitzdHJ1Y3QgaW1hX2lpbnRfY2FjaGUgKmltYV9paW50X2luc2VydChzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXN0cnVjdCBpbWFfaWludF9jYWNoZSAqaWludCA9IE5VTEw7CisJaW50IHJjID0gMDsKKworCWlmICghaW1hX2luaXRpYWxpemVkKQorCQlyZXR1cm4gaWludDsKKwlpaW50ID0ga21lbV9jYWNoZV9hbGxvYyhpaW50X2NhY2hlLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWlpbnQpCisJCXJldHVybiBpaW50OworCisJcmMgPSByYWRpeF90cmVlX3ByZWxvYWQoR0ZQX0tFUk5FTCk7CisJaWYgKHJjIDwgMCkKKwkJZ290byBvdXQ7CisKKwlzcGluX2xvY2soJmltYV9paW50X2xvY2spOworCXJjID0gcmFkaXhfdHJlZV9pbnNlcnQoJmltYV9paW50X3N0b3JlLCAodW5zaWduZWQgbG9uZylpbm9kZSwgaWludCk7CisJc3Bpbl91bmxvY2soJmltYV9paW50X2xvY2spOworb3V0OgorCWlmIChyYyA8IDApIHsKKwkJa21lbV9jYWNoZV9mcmVlKGlpbnRfY2FjaGUsIGlpbnQpOworCQlpZiAocmMgPT0gLUVFWElTVCkgeworCQkJc3Bpbl9sb2NrKCZpbWFfaWludF9sb2NrKTsKKwkJCWlpbnQgPSByYWRpeF90cmVlX2xvb2t1cCgmaW1hX2lpbnRfc3RvcmUsCisJCQkJCQkgKHVuc2lnbmVkIGxvbmcpaW5vZGUpOworCQkJc3Bpbl91bmxvY2soJmltYV9paW50X2xvY2spOworCQl9IGVsc2UKKwkJCWlpbnQgPSBOVUxMOworCX0KKwlyYWRpeF90cmVlX3ByZWxvYWRfZW5kKCk7CisJcmV0dXJuIGlpbnQ7Cit9CisKKy8qKgorICogaW1hX2lub2RlX2FsbG9jIC0gYWxsb2NhdGUgYW4gaWludCBhc3NvY2lhdGVkIHdpdGggYW4gaW5vZGUKKyAqIEBpbm9kZTogcG9pbnRlciB0byB0aGUgaW5vZGUKKyAqCisgKiBSZXR1cm4gMCBvbiBzdWNjZXNzLCAxIG9uIGZhaWx1cmUuCisgKi8KK2ludCBpbWFfaW5vZGVfYWxsb2Moc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlzdHJ1Y3QgaW1hX2lpbnRfY2FjaGUgKmlpbnQ7CisKKwlpZiAoIWltYV9pbml0aWFsaXplZCkKKwkJcmV0dXJuIDA7CisKKwlpaW50ID0gaW1hX2lpbnRfaW5zZXJ0KGlub2RlKTsKKwlpZiAoIWlpbnQpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCisvKiBpbWFfaWludF9maW5kX2luc2VydF9nZXQgLSBnZXQgdGhlIGlpbnQgYXNzb2NpYXRlZCB3aXRoIGFuIGlub2RlCisgKgorICogTW9zdCBpbnNlcnRpb25zIGFyZSBkb25lIGF0IGlub2RlX2FsbG9jLCBleGNlcHQgdGhvc2UgYWxsb2NhdGVkCisgKiBiZWZvcmUgbGF0ZV9pbml0Y2FsbC4gV2hlbiB0aGUgaWludCBkb2VzIG5vdCBleGlzdCwgYWxsb2NhdGUgaXQsCisgKiBpbml0aWFsaXplIGFuZCBpbnNlcnQgaXQsIGFuZCBpbmNyZW1lbnQgdGhlIGlpbnQgcmVmY291bnQuCisgKgorICogKENhbid0IGluaXRpYWxpemUgYXQgc2VjdXJpdHlfaW5pdGNhbGwgYmVmb3JlIGFueSBpbm9kZXMgYXJlCisgKiBhbGxvY2F0ZWQsIGdvdCB0byB3YWl0IGF0IGxlYXN0IHVudGlsIHByb2NfaW5pdC4pCisgKgorICogIFJldHVybiB0aGUgaWludC4KKyAqLworc3RydWN0IGltYV9paW50X2NhY2hlICppbWFfaWludF9maW5kX2luc2VydF9nZXQoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlzdHJ1Y3QgaW1hX2lpbnRfY2FjaGUgKmlpbnQgPSBOVUxMOworCisJaWludCA9IGltYV9paW50X2ZpbmRfZ2V0KGlub2RlKTsKKwlpZiAoaWludCkKKwkJcmV0dXJuIGlpbnQ7CisKKwlpaW50ID0gaW1hX2lpbnRfaW5zZXJ0KGlub2RlKTsKKwlpZiAoaWludCkKKwkJa3JlZl9nZXQoJmlpbnQtPnJlZmNvdW50KTsKKworCXJldHVybiBpaW50OworfQorRVhQT1JUX1NZTUJPTF9HUEwoaW1hX2lpbnRfZmluZF9pbnNlcnRfZ2V0KTsKKworLyogaWludF9mcmVlIC0gY2FsbGVkIHdoZW4gdGhlIGlpbnQgcmVmY291bnQgZ29lcyB0byB6ZXJvICovCit2b2lkIGlpbnRfZnJlZShzdHJ1Y3Qga3JlZiAqa3JlZikKK3sKKwlzdHJ1Y3QgaW1hX2lpbnRfY2FjaGUgKmlpbnQgPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IGltYV9paW50X2NhY2hlLAorCQkJCQkJICAgcmVmY291bnQpOworCWlpbnQtPnZlcnNpb24gPSAwOworCWlpbnQtPmZsYWdzID0gMFVMOworCWlmIChpaW50LT5yZWFkY291bnQgIT0gMCkgeworCQlwcmludGsoS0VSTl9JTkZPICIlczogcmVhZGNvdW50OiAlbGRcbiIsIF9fRlVOQ1RJT05fXywKKwkJICAgICAgIGlpbnQtPnJlYWRjb3VudCk7CisJCWlpbnQtPnJlYWRjb3VudCA9IDA7CisJfQorCWlmIChpaW50LT53cml0ZWNvdW50ICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHdyaXRlY291bnQ6ICVsZFxuIiwgX19GVU5DVElPTl9fLAorCQkgICAgICAgaWludC0+d3JpdGVjb3VudCk7CisJCWlpbnQtPndyaXRlY291bnQgPSAwOworCX0KKwlpZiAoaWludC0+b3BlbmNvdW50ICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IG9wZW5jb3VudDogJWxkXG4iLCBfX0ZVTkNUSU9OX18sCisJCSAgICAgICBpaW50LT5vcGVuY291bnQpOworCQlpaW50LT5vcGVuY291bnQgPSAwOworCX0KKwlrcmVmX3NldCgmaWludC0+cmVmY291bnQsIDEpOworCWttZW1fY2FjaGVfZnJlZShpaW50X2NhY2hlLCBpaW50KTsKK30KKwordm9pZCBpaW50X3JjdV9mcmVlKHN0cnVjdCByY3VfaGVhZCAqcmN1X2hlYWQpCit7CisJc3RydWN0IGltYV9paW50X2NhY2hlICppaW50ID0gY29udGFpbmVyX29mKHJjdV9oZWFkLAorCQkJCQkJICAgc3RydWN0IGltYV9paW50X2NhY2hlLCByY3UpOworCWtyZWZfcHV0KCZpaW50LT5yZWZjb3VudCwgaWludF9mcmVlKTsKK30KKworLyoqCisgKiBpbWFfaWludF9kZWxldGUgLSBjYWxsZWQgb24gaW50ZWdyaXR5X2lub2RlX2ZyZWUKKyAqIEBpbm9kZTogcG9pbnRlciB0byB0aGUgaW5vZGUKKyAqCisgKiBGcmVlIHRoZSBpbnRlZ3JpdHkgaW5mb3JtYXRpb24oaWludCkgYXNzb2NpYXRlZCB3aXRoIGFuIGlub2RlLgorICovCit2b2lkIGltYV9paW50X2RlbGV0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXN0cnVjdCBpbWFfaWludF9jYWNoZSAqaWludDsKKworCWlmICghaW1hX2luaXRpYWxpemVkKQorCQlyZXR1cm47CisJc3Bpbl9sb2NrKCZpbWFfaWludF9sb2NrKTsKKwlpaW50ID0gcmFkaXhfdHJlZV9kZWxldGUoJmltYV9paW50X3N0b3JlLCAodW5zaWduZWQgbG9uZylpbm9kZSk7CisJc3Bpbl91bmxvY2soJmltYV9paW50X2xvY2spOworCWlmIChpaW50KQorCQljYWxsX3JjdSgmaWludC0+cmN1LCBpaW50X3JjdV9mcmVlKTsKK30KKworc3RhdGljIHZvaWQgaW5pdF9vbmNlKHZvaWQgKmZvbykKK3sKKwlzdHJ1Y3QgaW1hX2lpbnRfY2FjaGUgKmlpbnQgPSBmb287CisKKwltZW1zZXQoaWludCwgMCwgc2l6ZW9mICppaW50KTsKKwlpaW50LT52ZXJzaW9uID0gMDsKKwlpaW50LT5mbGFncyA9IDBVTDsKKwltdXRleF9pbml0KCZpaW50LT5tdXRleCk7CisJaWludC0+cmVhZGNvdW50ID0gMDsKKwlpaW50LT53cml0ZWNvdW50ID0gMDsKKwlpaW50LT5vcGVuY291bnQgPSAwOworCWtyZWZfc2V0KCZpaW50LT5yZWZjb3VudCwgMSk7Cit9CisKK3ZvaWQgaW1hX2lpbnRjYWNoZV9pbml0KHZvaWQpCit7CisJaWludF9jYWNoZSA9CisJICAgIGttZW1fY2FjaGVfY3JlYXRlKCJpaW50X2NhY2hlIiwgc2l6ZW9mKHN0cnVjdCBpbWFfaWludF9jYWNoZSksIDAsCisJCQkgICAgICBTTEFCX1BBTklDLCBpbml0X29uY2UpOworfQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfaW5pdC5jIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfaW5pdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiMGJiOGMKLS0tIC9kZXYvbnVsbAorKysgYi9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9pbml0LmMKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSwyMDA2LDIwMDcsMjAwOCBJQk0gQ29ycG9yYXRpb24KKyAqCisgKiBBdXRob3JzOgorICogUmVpbmVyIFNhaWxlciAgICAgIDxzYWlsZXJAd2F0c29uLmlibS5jb20+CisgKiBMZWVuZGVydCB2YW4gRG9vcm4gPGxlZW5kZXJ0QHdhdHNvbi5pYm0uY29tPgorICogTWltaSBab2hhciAgICAgICAgIDx6b2hhckB1cy5pYm0uY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyIG9mIHRoZQorICogTGljZW5zZS4KKyAqCisgKiBGaWxlOiBpbWFfaW5pdC5jCisgKiAgICAgICAgICAgICBpbml0aWFsaXphdGlvbiBhbmQgY2xlYW51cCBmdW5jdGlvbnMKKyAqLworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSAiaW1hLmgiCisKKy8qIG5hbWUgZm9yIGJvb3QgYWdncmVnYXRlIGVudHJ5ICovCitzdGF0aWMgY29uc3QgY2hhciAqYm9vdF9hZ2dyZWdhdGVfbmFtZSA9ICJib290X2FnZ3JlZ2F0ZSI7CitpbnQgaW1hX3VzZWRfY2hpcDsKKworLyogQWRkIHRoZSBib290IGFnZ3JlZ2F0ZSB0byB0aGUgSU1BIG1lYXN1cmVtZW50IGxpc3QgYW5kIGV4dGVuZAorICogdGhlIFBDUiByZWdpc3Rlci4KKyAqCisgKiBDYWxjdWxhdGUgdGhlIGJvb3QgYWdncmVnYXRlLCBhIFNIQTEgb3ZlciB0cG0gcmVnaXN0ZXJzIDAtNywKKyAqIGFzc3VtaW5nIGEgVFBNIGNoaXAgZXhpc3RzLCBhbmQgemVyb2VzIGlmIHRoZSBUUE0gY2hpcCBkb2VzIG5vdAorICogZXhpc3QuICBBZGQgdGhlIGJvb3QgYWdncmVnYXRlIG1lYXN1cmVtZW50IHRvIHRoZSBtZWFzdXJlbWVudAorICogbGlzdCBhbmQgZXh0ZW5kIHRoZSBQQ1IgcmVnaXN0ZXIuCisgKgorICogSWYgYSB0cG0gY2hpcCBkb2VzIG5vdCBleGlzdCwgaW5kaWNhdGUgdGhlIGNvcmUgcm9vdCBvZiB0cnVzdCBpcworICogbm90IGhhcmR3YXJlIGJhc2VkIGJ5IGludmFsaWRhdGluZyB0aGUgYWdncmVnYXRlIFBDUiB2YWx1ZS4KKyAqIChUaGUgYWdncmVnYXRlIFBDUiB2YWx1ZSBpcyBpbnZhbGlkYXRlZCBieSBhZGRpbmcgb25lIHZhbHVlIHRvCisgKiB0aGUgbWVhc3VyZW1lbnQgbGlzdCBhbmQgZXh0ZW5kaW5nIHRoZSBhZ2dyZWdhdGUgUENSIHZhbHVlIHdpdGgKKyAqIGEgZGlmZmVyZW50IHZhbHVlLikgVmlvbGF0aW9ucyBhZGQgYSB6ZXJvIGVudHJ5IHRvIHRoZSBtZWFzdXJlbWVudAorICogbGlzdCBhbmQgZXh0ZW5kIHRoZSBhZ2dyZWdhdGUgUENSIHZhbHVlIHdpdGggZmYuLi5mZidzLgorICovCitzdGF0aWMgdm9pZCBpbWFfYWRkX2Jvb3RfYWdncmVnYXRlKHZvaWQpCit7CisJc3RydWN0IGltYV90ZW1wbGF0ZV9lbnRyeSAqZW50cnk7CisJY29uc3QgY2hhciAqb3AgPSAiYWRkX2Jvb3RfYWdncmVnYXRlIjsKKwljb25zdCBjaGFyICphdWRpdF9jYXVzZSA9ICJFTk9NRU0iOworCWludCByZXN1bHQgPSAtRU5PTUVNOworCWludCB2aW9sYXRpb24gPSAxOworCisJZW50cnkgPSBrbWFsbG9jKHNpemVvZigqZW50cnkpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWVudHJ5KQorCQlnb3RvIGVycl9vdXQ7CisKKwltZW1zZXQoJmVudHJ5LT50ZW1wbGF0ZSwgMCwgc2l6ZW9mKGVudHJ5LT50ZW1wbGF0ZSkpOworCXN0cm5jcHkoZW50cnktPnRlbXBsYXRlLmZpbGVfbmFtZSwgYm9vdF9hZ2dyZWdhdGVfbmFtZSwKKwkJSU1BX0VWRU5UX05BTUVfTEVOX01BWCk7CisJaWYgKGltYV91c2VkX2NoaXApIHsKKwkJdmlvbGF0aW9uID0gMDsKKwkJcmVzdWx0ID0gaW1hX2NhbGNfYm9vdF9hZ2dyZWdhdGUoZW50cnktPnRlbXBsYXRlLmRpZ2VzdCk7CisJCWlmIChyZXN1bHQgPCAwKSB7CisJCQlhdWRpdF9jYXVzZSA9ICJoYXNoaW5nX2Vycm9yIjsKKwkJCWtmcmVlKGVudHJ5KTsKKwkJCWdvdG8gZXJyX291dDsKKwkJfQorCX0KKwlyZXN1bHQgPSBpbWFfc3RvcmVfdGVtcGxhdGUoZW50cnksIHZpb2xhdGlvbiwgTlVMTCk7CisJaWYgKHJlc3VsdCA8IDApCisJCWtmcmVlKGVudHJ5KTsKKwlyZXR1cm47CitlcnJfb3V0OgorCWludGVncml0eV9hdWRpdF9tc2coQVVESVRfSU5URUdSSVRZX1BDUiwgTlVMTCwgYm9vdF9hZ2dyZWdhdGVfbmFtZSwgb3AsCisJCQkgICAgYXVkaXRfY2F1c2UsIHJlc3VsdCwgMCk7Cit9CisKK2ludCBpbWFfaW5pdCh2b2lkKQoreworCXU4IHBjcl9pW0lNQV9ESUdFU1RfU0laRV07CisJaW50IHJjOworCisJaW1hX3VzZWRfY2hpcCA9IDA7CisJcmMgPSB0cG1fcGNyX3JlYWQoVFBNX0FOWV9OVU0sIDAsIHBjcl9pKTsKKwlpZiAocmMgPT0gMCkKKwkJaW1hX3VzZWRfY2hpcCA9IDE7CisKKwlpZiAoIWltYV91c2VkX2NoaXApCisJCXByX2luZm8oIk5vIFRQTSBjaGlwIGZvdW5kLCBhY3RpdmF0aW5nIFRQTS1ieXBhc3MhXG4iKTsKKworCWltYV9hZGRfYm9vdF9hZ2dyZWdhdGUoKTsJLyogYm9vdCBhZ2dyZWdhdGUgbXVzdCBiZSBmaXJzdCBlbnRyeSAqLworCWltYV9pbml0X3BvbGljeSgpOworCisJcmV0dXJuIGltYV9mc19pbml0KCk7Cit9CisKK3ZvaWQgX19leGl0IGltYV9jbGVhbnVwKHZvaWQpCit7CisJaW1hX2ZzX2NsZWFudXAoKTsKK30KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX21haW4uYyBiL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGU3MjY2Ci0tLSAvZGV2L251bGwKKysrIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfbWFpbi5jCkBAIC0wLDAgKzEsMzI3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LDIwMDYsMjAwNywyMDA4IElCTSBDb3Jwb3JhdGlvbgorICoKKyAqIEF1dGhvcnM6CisgKiBSZWluZXIgU2FpbGVyIDxzYWlsZXJAd2F0c29uLmlibS5jb20+CisgKiBTZXJnZSBIYWxseW4gPHNlcnVlQHVzLmlibS5jb20+CisgKiBLeWxlbmUgSGFsbCA8a3lsZW5lQHVzLmlibS5jb20+CisgKiBNaW1pIFpvaGFyIDx6b2hhckB1cy5pYm0uY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyIG9mIHRoZQorICogTGljZW5zZS4KKyAqCisgKiBGaWxlOiBpbWFfbWFpbi5jCisgKiAgICAgICAgICAgICBpbXBsZW1lbnRzIHRoZSBJTUEgaG9va3M6IGltYV9icHJtX2NoZWNrLCBpbWFfZmlsZV9tbWFwLAorICogICAgICAgICAgICAgYW5kIGltYV9wYXRoX2NoZWNrLgorICovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2JpbmZtdHMuaD4KKyNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgorI2luY2x1ZGUgPGxpbnV4L21tYW4uaD4KKworI2luY2x1ZGUgImltYS5oIgorCitpbnQgaW1hX2luaXRpYWxpemVkOworCitjaGFyICppbWFfaGFzaCA9ICJzaGExIjsKK3N0YXRpYyBpbnQgX19pbml0IGhhc2hfc2V0dXAoY2hhciAqc3RyKQoreworCWNvbnN0IGNoYXIgKm9wID0gImhhc2hfc2V0dXAiOworCWNvbnN0IGNoYXIgKmhhc2ggPSAic2hhMSI7CisJaW50IHJlc3VsdCA9IDA7CisJaW50IGF1ZGl0X2luZm8gPSAwOworCisJaWYgKHN0cm5jbXAoc3RyLCAibWQ1IiwgMykgPT0gMCkgeworCQloYXNoID0gIm1kNSI7CisJCWltYV9oYXNoID0gc3RyOworCX0gZWxzZSBpZiAoc3RybmNtcChzdHIsICJzaGExIiwgNCkgIT0gMCkgeworCQloYXNoID0gImludmFsaWRfaGFzaF90eXBlIjsKKwkJcmVzdWx0ID0gMTsKKwl9CisJaW50ZWdyaXR5X2F1ZGl0X21zZyhBVURJVF9JTlRFR1JJVFlfSEFTSCwgTlVMTCwgTlVMTCwgb3AsIGhhc2gsCisJCQkgICAgcmVzdWx0LCBhdWRpdF9pbmZvKTsKKwlyZXR1cm4gMTsKK30KK19fc2V0dXAoImltYV9oYXNoPSIsIGhhc2hfc2V0dXApOworCisvKioKKyAqIGltYV9maWxlX2ZyZWUgLSBjYWxsZWQgb24gX19mcHV0KCkKKyAqIEBmaWxlOiBwb2ludGVyIHRvIGZpbGUgc3RydWN0dXJlIGJlaW5nIGZyZWVkCisgKgorICogRmxhZyBmaWxlcyB0aGF0IGNoYW5nZWQsIGJhc2VkIG9uIGlfdmVyc2lvbjsKKyAqIGFuZCBkZWNyZW1lbnQgdGhlIGlpbnQgcmVhZGNvdW50L3dyaXRlY291bnQuCisgKi8KK3ZvaWQgaW1hX2ZpbGVfZnJlZShzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGltYV9paW50X2NhY2hlICppaW50OworCisJaWYgKCFpbWFfaW5pdGlhbGl6ZWQgfHwgIVNfSVNSRUcoaW5vZGUtPmlfbW9kZSkpCisJCXJldHVybjsKKwlpaW50ID0gaW1hX2lpbnRfZmluZF9nZXQoaW5vZGUpOworCWlmICghaWludCkKKwkJcmV0dXJuOworCisJbXV0ZXhfbG9jaygmaWludC0+bXV0ZXgpOworCWlmIChpaW50LT5vcGVuY291bnQgPD0gMCkgeworCQlwcmludGsoS0VSTl9JTkZPCisJCSAgICAgICAiJXM6ICVzIG9wZW4vZnJlZSBpbWJhbGFuY2UgKHI6JWxkIHc6JWxkIG86JWxkIGY6JWxkKVxuIiwKKwkJICAgICAgIF9fRlVOQ1RJT05fXywgZmlsZS0+Zl9kZW50cnktPmRfbmFtZS5uYW1lLAorCQkgICAgICAgaWludC0+cmVhZGNvdW50LCBpaW50LT53cml0ZWNvdW50LAorCQkgICAgICAgaWludC0+b3BlbmNvdW50LCBhdG9taWNfbG9uZ19yZWFkKCZmaWxlLT5mX2NvdW50KSk7CisJCWlmICghKGlpbnQtPmZsYWdzICYgSU1BX0lJTlRfRFVNUF9TVEFDSykpIHsKKwkJCWR1bXBfc3RhY2soKTsKKwkJCWlpbnQtPmZsYWdzIHw9IElNQV9JSU5UX0RVTVBfU1RBQ0s7CisJCX0KKwl9CisJaWludC0+b3BlbmNvdW50LS07CisKKwlpZiAoKGZpbGUtPmZfbW9kZSAmIChGTU9ERV9SRUFEIHwgRk1PREVfV1JJVEUpKSA9PSBGTU9ERV9SRUFEKQorCQlpaW50LT5yZWFkY291bnQtLTsKKworCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkgeworCQlpaW50LT53cml0ZWNvdW50LS07CisJCWlmIChpaW50LT53cml0ZWNvdW50ID09IDApIHsKKwkJCWlmIChpaW50LT52ZXJzaW9uICE9IGlub2RlLT5pX3ZlcnNpb24pCisJCQkJaWludC0+ZmxhZ3MgJj0gfklNQV9NRUFTVVJFRDsKKwkJfQorCX0KKwltdXRleF91bmxvY2soJmlpbnQtPm11dGV4KTsKKwlrcmVmX3B1dCgmaWludC0+cmVmY291bnQsIGlpbnRfZnJlZSk7Cit9CisKKy8qIGltYV9yZWFkX3dyaXRlX2NoZWNrIC0gcmVmbGVjdCBwb3NzaWJsZSByZWFkaW5nL3dyaXRpbmcgZXJyb3JzIGluIHRoZSBQQ1IuCisgKgorICogV2hlbiBvcGVuaW5nIGEgZmlsZSBmb3IgcmVhZCwgaWYgdGhlIGZpbGUgaXMgYWxyZWFkeSBvcGVuIGZvciB3cml0ZSwKKyAqIHRoZSBmaWxlIGNvdWxkIGNoYW5nZSwgcmVzdWx0aW5nIGluIGEgZmlsZSBtZWFzdXJlbWVudCBlcnJvci4KKyAqCisgKiBPcGVuaW5nIGEgZmlsZSBmb3Igd3JpdGUsIGlmIHRoZSBmaWxlIGlzIGFscmVhZHkgb3BlbiBmb3IgcmVhZCwgcmVzdWx0cworICogaW4gYSB0aW1lIG9mIG1lYXN1cmUsIHRpbWUgb2YgdXNlIChUb01Ub1UpIGVycm9yLgorICoKKyAqIEluIGVpdGhlciBjYXNlIGludmFsaWRhdGUgdGhlIFBDUi4KKyAqLworZW51bSBpaW50X3Bjcl9lcnJvciB7IFRPTVRPVSwgT1BFTl9XUklURVJTIH07CitzdGF0aWMgdm9pZCBpbWFfcmVhZF93cml0ZV9jaGVjayhlbnVtIGlpbnRfcGNyX2Vycm9yIGVycm9yLAorCQkJCSBzdHJ1Y3QgaW1hX2lpbnRfY2FjaGUgKmlpbnQsCisJCQkJIHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmZpbGVuYW1lKQoreworCXN3aXRjaCAoZXJyb3IpIHsKKwljYXNlIFRPTVRPVToKKwkJaWYgKGlpbnQtPnJlYWRjb3VudCA+IDApCisJCQlpbWFfYWRkX3Zpb2xhdGlvbihpbm9kZSwgZmlsZW5hbWUsICJpbnZhbGlkX3BjciIsCisJCQkJCSAgIlRvTVRvVSIpOworCQlicmVhazsKKwljYXNlIE9QRU5fV1JJVEVSUzoKKwkJaWYgKGlpbnQtPndyaXRlY291bnQgPiAwKQorCQkJaW1hX2FkZF92aW9sYXRpb24oaW5vZGUsIGZpbGVuYW1lLCAiaW52YWxpZF9wY3IiLAorCQkJCQkgICJvcGVuX3dyaXRlcnMiKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW50IGdldF9wYXRoX21lYXN1cmVtZW50KHN0cnVjdCBpbWFfaWludF9jYWNoZSAqaWludCwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqZmlsZW5hbWUpCit7CisJaW50IHJjID0gMDsKKworCWlmIChJU19FUlIoZmlsZSkpIHsKKwkJcHJfaW5mbygiJXMgZGVudHJ5X29wZW4gZmFpbGVkXG4iLCBmaWxlbmFtZSk7CisJCXJldHVybiByYzsKKwl9CisJaWludC0+b3BlbmNvdW50Kys7CisJaWludC0+cmVhZGNvdW50Kys7CisKKwlyYyA9IGltYV9jb2xsZWN0X21lYXN1cmVtZW50KGlpbnQsIGZpbGUpOworCWlmICghcmMpCisJCWltYV9zdG9yZV9tZWFzdXJlbWVudChpaW50LCBmaWxlLCBmaWxlbmFtZSk7CisJcmV0dXJuIHJjOworfQorCisvKioKKyAqIGltYV9wYXRoX2NoZWNrIC0gYmFzZWQgb24gcG9saWN5LCBjb2xsZWN0L3N0b3JlIG1lYXN1cmVtZW50LgorICogQHBhdGg6IGNvbnRhaW5zIGEgcG9pbnRlciB0byB0aGUgcGF0aCB0byBiZSBtZWFzdXJlZAorICogQG1hc2s6IGNvbnRhaW5zIE1BWV9SRUFELCBNQVlfV1JJVEUgb3IgTUFZX0VYRUNVVEUKKyAqCisgKiBNZWFzdXJlIHRoZSBmaWxlIGJlaW5nIG9wZW4gZm9yIHJlYWRvbmx5LCBiYXNlZCBvbiB0aGUKKyAqIGltYV9tdXN0X21lYXN1cmUoKSBwb2xpY3kgZGVjaXNpb24uCisgKgorICogS2VlcCByZWFkL3dyaXRlIGNvdW50ZXJzIGZvciBhbGwgZmlsZXMsIGJ1dCBvbmx5CisgKiBpbnZhbGlkYXRlIHRoZSBQQ1IgZm9yIG1lYXN1cmVkIGZpbGVzOgorICogCS0gT3BlbmluZyBhIGZpbGUgZm9yIHdyaXRlIHdoZW4gYWxyZWFkeSBvcGVuIGZvciByZWFkLAorICoJICByZXN1bHRzIGluIGEgdGltZSBvZiBtZWFzdXJlLCB0aW1lIG9mIHVzZSAoVG9NVG9VKSBlcnJvci4KKyAqCS0gT3BlbmluZyBhIGZpbGUgZm9yIHJlYWQgd2hlbiBhbHJlYWR5IG9wZW4gZm9yIHdyaXRlLAorICogCSAgY291bGQgcmVzdWx0IGluIGEgZmlsZSBtZWFzdXJlbWVudCBlcnJvci4KKyAqCisgKiBSZXR1cm4gMCBvbiBzdWNjZXNzLCBhbiBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCisgKiAoQmFzZWQgb24gdGhlIHJlc3VsdHMgb2YgYXBwcmFpc2VfbWVhc3VyZW1lbnQoKS4pCisgKi8KK2ludCBpbWFfcGF0aF9jaGVjayhzdHJ1Y3QgcGF0aCAqcGF0aCwgaW50IG1hc2spCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IHBhdGgtPmRlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgaW1hX2lpbnRfY2FjaGUgKmlpbnQ7CisJc3RydWN0IGZpbGUgKmZpbGUgPSBOVUxMOworCWludCByYzsKKworCWlmICghaW1hX2luaXRpYWxpemVkIHx8ICFTX0lTUkVHKGlub2RlLT5pX21vZGUpKQorCQlyZXR1cm4gMDsKKwlpaW50ID0gaW1hX2lpbnRfZmluZF9pbnNlcnRfZ2V0KGlub2RlKTsKKwlpZiAoIWlpbnQpCisJCXJldHVybiAwOworCisJbXV0ZXhfbG9jaygmaWludC0+bXV0ZXgpOworCWlpbnQtPm9wZW5jb3VudCsrOworCWlmICgobWFzayAmIE1BWV9XUklURSkgfHwgKG1hc2sgPT0gMCkpCisJCWlpbnQtPndyaXRlY291bnQrKzsKKwllbHNlIGlmIChtYXNrICYgKE1BWV9SRUFEIHwgTUFZX0VYRUMpKQorCQlpaW50LT5yZWFkY291bnQrKzsKKworCXJjID0gaW1hX211c3RfbWVhc3VyZShpaW50LCBpbm9kZSwgTUFZX1JFQUQsIFBBVEhfQ0hFQ0spOworCWlmIChyYyA8IDApCisJCWdvdG8gb3V0OworCisJaWYgKChtYXNrICYgTUFZX1dSSVRFKSB8fCAobWFzayA9PSAwKSkKKwkJaW1hX3JlYWRfd3JpdGVfY2hlY2soVE9NVE9VLCBpaW50LCBpbm9kZSwKKwkJCQkgICAgIHBhdGgtPmRlbnRyeS0+ZF9uYW1lLm5hbWUpOworCisJaWYgKChtYXNrICYgKE1BWV9XUklURSB8IE1BWV9SRUFEIHwgTUFZX0VYRUMpKSAhPSBNQVlfUkVBRCkKKwkJZ290byBvdXQ7CisKKwlpbWFfcmVhZF93cml0ZV9jaGVjayhPUEVOX1dSSVRFUlMsIGlpbnQsIGlub2RlLAorCQkJICAgICBwYXRoLT5kZW50cnktPmRfbmFtZS5uYW1lKTsKKwlpZiAoIShpaW50LT5mbGFncyAmIElNQV9NRUFTVVJFRCkpIHsKKwkJc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gZGdldChwYXRoLT5kZW50cnkpOworCQlzdHJ1Y3QgdmZzbW91bnQgKm1udCA9IG1udGdldChwYXRoLT5tbnQpOworCisJCWZpbGUgPSBkZW50cnlfb3BlbihkZW50cnksIG1udCwgT19SRE9OTFksIGN1cnJlbnQtPmNyZWQpOworCQlyYyA9IGdldF9wYXRoX21lYXN1cmVtZW50KGlpbnQsIGZpbGUsIGRlbnRyeS0+ZF9uYW1lLm5hbWUpOworCX0KK291dDoKKwltdXRleF91bmxvY2soJmlpbnQtPm11dGV4KTsKKwlpZiAoZmlsZSkKKwkJZnB1dChmaWxlKTsKKwlrcmVmX3B1dCgmaWludC0+cmVmY291bnQsIGlpbnRfZnJlZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHJvY2Vzc19tZWFzdXJlbWVudChzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgdW5zaWduZWQgY2hhciAqZmlsZW5hbWUsCisJCQkgICAgICAgaW50IG1hc2ssIGludCBmdW5jdGlvbikKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGltYV9paW50X2NhY2hlICppaW50OworCWludCByYzsKKworCWlmICghaW1hX2luaXRpYWxpemVkIHx8ICFTX0lTUkVHKGlub2RlLT5pX21vZGUpKQorCQlyZXR1cm4gMDsKKwlpaW50ID0gaW1hX2lpbnRfZmluZF9pbnNlcnRfZ2V0KGlub2RlKTsKKwlpZiAoIWlpbnQpCisJCXJldHVybiAtRU5PTUVNOworCisJbXV0ZXhfbG9jaygmaWludC0+bXV0ZXgpOworCXJjID0gaW1hX211c3RfbWVhc3VyZShpaW50LCBpbm9kZSwgbWFzaywgZnVuY3Rpb24pOworCWlmIChyYyAhPSAwKQorCQlnb3RvIG91dDsKKworCXJjID0gaW1hX2NvbGxlY3RfbWVhc3VyZW1lbnQoaWludCwgZmlsZSk7CisJaWYgKCFyYykKKwkJaW1hX3N0b3JlX21lYXN1cmVtZW50KGlpbnQsIGZpbGUsIGZpbGVuYW1lKTsKK291dDoKKwltdXRleF91bmxvY2soJmlpbnQtPm11dGV4KTsKKwlrcmVmX3B1dCgmaWludC0+cmVmY291bnQsIGlpbnRfZnJlZSk7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZCBvcGVuY291bnRfZ2V0KHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgaW1hX2lpbnRfY2FjaGUgKmlpbnQ7CisKKwlpZiAoIWltYV9pbml0aWFsaXplZCB8fCAhU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkKKwkJcmV0dXJuOworCWlpbnQgPSBpbWFfaWludF9maW5kX2luc2VydF9nZXQoaW5vZGUpOworCWlmICghaWludCkKKwkJcmV0dXJuOworCW11dGV4X2xvY2soJmlpbnQtPm11dGV4KTsKKwlpaW50LT5vcGVuY291bnQrKzsKKwltdXRleF91bmxvY2soJmlpbnQtPm11dGV4KTsKK30KKworLyoqCisgKiBpbWFfZmlsZV9tbWFwIC0gYmFzZWQgb24gcG9saWN5LCBjb2xsZWN0L3N0b3JlIG1lYXN1cmVtZW50LgorICogQGZpbGU6IHBvaW50ZXIgdG8gdGhlIGZpbGUgdG8gYmUgbWVhc3VyZWQgKE1heSBiZSBOVUxMKQorICogQHByb3Q6IGNvbnRhaW5zIHRoZSBwcm90ZWN0aW9uIHRoYXQgd2lsbCBiZSBhcHBsaWVkIGJ5IHRoZSBrZXJuZWwuCisgKgorICogTWVhc3VyZSBmaWxlcyBiZWluZyBtbWFwcGVkIGV4ZWN1dGFibGUgYmFzZWQgb24gdGhlIGltYV9tdXN0X21lYXN1cmUoKQorICogcG9saWN5IGRlY2lzaW9uLgorICoKKyAqIFJldHVybiAwIG9uIHN1Y2Nlc3MsIGFuIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KKyAqIChCYXNlZCBvbiB0aGUgcmVzdWx0cyBvZiBhcHByYWlzZV9tZWFzdXJlbWVudCgpLikKKyAqLworaW50IGltYV9maWxlX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgcHJvdCkKK3sKKwlpbnQgcmM7CisKKwlpZiAoIWZpbGUpCisJCXJldHVybiAwOworCWlmIChwcm90ICYgUFJPVF9FWEVDKQorCQlyYyA9IHByb2Nlc3NfbWVhc3VyZW1lbnQoZmlsZSwgZmlsZS0+Zl9kZW50cnktPmRfbmFtZS5uYW1lLAorCQkJCQkgTUFZX0VYRUMsIEZJTEVfTU1BUCk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBpbWFfc2htX2NoZWNrIC0gSVBDIHNobSBhbmQgc2htYXQgY3JlYXRlL2ZwdXQgYSBmaWxlCisgKgorICogTWFpbnRhaW4gdGhlIG9wZW5jb3VudCBmb3IgdGhlc2UgZmlsZXMgdG8gcHJldmVudCB1bm5lY2Vzc2FyeQorICogaW1iYWxhbmNlIG1lc3NhZ2VzLgorICovCit2b2lkIGltYV9zaG1fY2hlY2soc3RydWN0IGZpbGUgKmZpbGUpCit7CisJb3BlbmNvdW50X2dldChmaWxlKTsKKwlyZXR1cm47Cit9CisKKy8qKgorICogaW1hX2Jwcm1fY2hlY2sgLSBiYXNlZCBvbiBwb2xpY3ksIGNvbGxlY3Qvc3RvcmUgbWVhc3VyZW1lbnQuCisgKiBAYnBybTogY29udGFpbnMgdGhlIGxpbnV4X2JpbnBybSBzdHJ1Y3R1cmUKKyAqCisgKiBUaGUgT1MgcHJvdGVjdHMgYWdhaW5zdCBhbiBleGVjdXRhYmxlIGZpbGUsIGFscmVhZHkgb3BlbiBmb3Igd3JpdGUsCisgKiBmcm9tIGJlaW5nIGV4ZWN1dGVkIGluIGRlbnlfd3JpdGVfYWNjZXNzKCkgYW5kIGFuIGV4ZWN1dGFibGUgZmlsZSwKKyAqIGFscmVhZHkgb3BlbiBmb3IgZXhlY3V0ZSwgZnJvbSBiZWluZyBtb2RpZmllZCBpbiBnZXRfd3JpdGVfYWNjZXNzKCkuCisgKiBTbyB3ZSBjYW4gYmUgY2VydGFpbiB0aGF0IHdoYXQgd2UgdmVyaWZ5IGFuZCBtZWFzdXJlIGhlcmUgaXMgYWN0dWFsbHkKKyAqIHdoYXQgaXMgYmVpbmcgZXhlY3V0ZWQuCisgKgorICogUmV0dXJuIDAgb24gc3VjY2VzcywgYW4gZXJyb3IgY29kZSBvbiBmYWlsdXJlLgorICogKEJhc2VkIG9uIHRoZSByZXN1bHRzIG9mIGFwcHJhaXNlX21lYXN1cmVtZW50KCkuKQorICovCitpbnQgaW1hX2Jwcm1fY2hlY2soc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSkKK3sKKwlpbnQgcmM7CisKKwlyYyA9IHByb2Nlc3NfbWVhc3VyZW1lbnQoYnBybS0+ZmlsZSwgYnBybS0+ZmlsZW5hbWUsCisJCQkJIE1BWV9FWEVDLCBCUFJNX0NIRUNLKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2luaXQgaW5pdF9pbWEodm9pZCkKK3sKKwlpbnQgZXJyb3I7CisKKwlpbWFfaWludGNhY2hlX2luaXQoKTsKKwllcnJvciA9IGltYV9pbml0KCk7CisJaW1hX2luaXRpYWxpemVkID0gMTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBjbGVhbnVwX2ltYSh2b2lkKQoreworCWltYV9jbGVhbnVwKCk7Cit9CisKK2xhdGVfaW5pdGNhbGwoaW5pdF9pbWEpOwkvKiBTdGFydCBJTUEgYWZ0ZXIgdGhlIFRQTSBpcyBhdmFpbGFibGUgKi8KKworTU9EVUxFX0RFU0NSSVBUSU9OKCJJbnRlZ3JpdHkgTWVhc3VyZW1lbnQgQXJjaGl0ZWN0dXJlIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9wb2xpY3kuYyBiL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX3BvbGljeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1MjkxYWQKLS0tIC9kZXYvbnVsbAorKysgYi9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9wb2xpY3kuYwpAQCAtMCwwICsxLDQxNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBJQk0gQ29ycG9yYXRpb24KKyAqIEF1dGhvcjogTWltaSBab2hhciA8em9oYXJAdXMuaWJtLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiBpbWFfcG9saWN5LmMKKyAqIAktIGluaXRpYWxpemUgZGVmYXVsdCBtZWFzdXJlIHBvbGljeSBydWxlcworICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgorI2luY2x1ZGUgPGxpbnV4L21hZ2ljLmg+CisjaW5jbHVkZSA8bGludXgvcGFyc2VyLmg+CisKKyNpbmNsdWRlICJpbWEuaCIKKworLyogZmxhZ3MgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgSU1BX0ZVTkMgCTB4MDAwMQorI2RlZmluZSBJTUFfTUFTSyAJMHgwMDAyCisjZGVmaW5lIElNQV9GU01BR0lDCTB4MDAwNAorI2RlZmluZSBJTUFfVUlECQkweDAwMDgKKworZW51bSBpbWFfYWN0aW9uIHsgVU5LTk9XTiA9IC0xLCBET05UX01FQVNVUkUgPSAwLCBNRUFTVVJFIH07CisKKyNkZWZpbmUgTUFYX0xTTV9SVUxFUyA2CitlbnVtIGxzbV9ydWxlX3R5cGVzIHsgTFNNX09CSl9VU0VSLCBMU01fT0JKX1JPTEUsIExTTV9PQkpfVFlQRSwKKwlMU01fU1VCSl9VU0VSLCBMU01fU1VCSl9ST0xFLCBMU01fU1VCSl9UWVBFCit9OworCitzdHJ1Y3QgaW1hX21lYXN1cmVfcnVsZV9lbnRyeSB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCWVudW0gaW1hX2FjdGlvbiBhY3Rpb247CisJdW5zaWduZWQgaW50IGZsYWdzOworCWVudW0gaW1hX2hvb2tzIGZ1bmM7CisJaW50IG1hc2s7CisJdW5zaWduZWQgbG9uZyBmc21hZ2ljOworCXVpZF90IHVpZDsKKwlzdHJ1Y3QgeworCQl2b2lkICpydWxlOwkvKiBMU00gZmlsZSBtZXRhZGF0YSBzcGVjaWZpYyAqLworCQlpbnQgdHlwZTsJLyogYXVkaXQgdHlwZSAqLworCX0gbHNtW01BWF9MU01fUlVMRVNdOworfTsKKworLyogV2l0aG91dCBMU00gc3BlY2lmaWMga25vd2xlZGdlLCB0aGUgZGVmYXVsdCBwb2xpY3kgY2FuIG9ubHkgYmUKKyAqIHdyaXR0ZW4gaW4gdGVybXMgb2YgLmFjdGlvbiwgLmZ1bmMsIC5tYXNrLCAuZnNtYWdpYywgYW5kIC51aWQKKyAqLworc3RhdGljIHN0cnVjdCBpbWFfbWVhc3VyZV9ydWxlX2VudHJ5IGRlZmF1bHRfcnVsZXNbXSA9IHsKKwl7LmFjdGlvbiA9IERPTlRfTUVBU1VSRSwuZnNtYWdpYyA9IFBST0NfU1VQRVJfTUFHSUMsCisJIC5mbGFncyA9IElNQV9GU01BR0lDfSwKKwl7LmFjdGlvbiA9IERPTlRfTUVBU1VSRSwuZnNtYWdpYyA9IFNZU0ZTX01BR0lDLC5mbGFncyA9IElNQV9GU01BR0lDfSwKKwl7LmFjdGlvbiA9IERPTlRfTUVBU1VSRSwuZnNtYWdpYyA9IERFQlVHRlNfTUFHSUMsLmZsYWdzID0gSU1BX0ZTTUFHSUN9LAorCXsuYWN0aW9uID0gRE9OVF9NRUFTVVJFLC5mc21hZ2ljID0gVE1QRlNfTUFHSUMsLmZsYWdzID0gSU1BX0ZTTUFHSUN9LAorCXsuYWN0aW9uID0gRE9OVF9NRUFTVVJFLC5mc21hZ2ljID0gU0VDVVJJVFlGU19NQUdJQywKKwkgLmZsYWdzID0gSU1BX0ZTTUFHSUN9LAorCXsuYWN0aW9uID0gRE9OVF9NRUFTVVJFLC5mc21hZ2ljID0gMHhGOTdDRkY4QywuZmxhZ3MgPSBJTUFfRlNNQUdJQ30sCisJey5hY3Rpb24gPSBNRUFTVVJFLC5mdW5jID0gRklMRV9NTUFQLC5tYXNrID0gTUFZX0VYRUMsCisJIC5mbGFncyA9IElNQV9GVU5DIHwgSU1BX01BU0t9LAorCXsuYWN0aW9uID0gTUVBU1VSRSwuZnVuYyA9IEJQUk1fQ0hFQ0ssLm1hc2sgPSBNQVlfRVhFQywKKwkgLmZsYWdzID0gSU1BX0ZVTkMgfCBJTUFfTUFTS30sCisJey5hY3Rpb24gPSBNRUFTVVJFLC5mdW5jID0gUEFUSF9DSEVDSywubWFzayA9IE1BWV9SRUFELC51aWQgPSAwLAorCSAuZmxhZ3MgPSBJTUFfRlVOQyB8IElNQV9NQVNLIHwgSU1BX1VJRH0KK307CisKK3N0YXRpYyBMSVNUX0hFQUQobWVhc3VyZV9kZWZhdWx0X3J1bGVzKTsKK3N0YXRpYyBMSVNUX0hFQUQobWVhc3VyZV9wb2xpY3lfcnVsZXMpOworc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgKmltYV9tZWFzdXJlOworCitzdGF0aWMgREVGSU5FX01VVEVYKGltYV9tZWFzdXJlX211dGV4KTsKKworLyoqCisgKiBpbWFfbWF0Y2hfcnVsZXMgLSBkZXRlcm1pbmUgd2hldGhlciBhbiBpbm9kZSBtYXRjaGVzIHRoZSBtZWFzdXJlIHJ1bGUuCisgKiBAcnVsZTogYSBwb2ludGVyIHRvIGEgcnVsZQorICogQGlub2RlOiBhIHBvaW50ZXIgdG8gYW4gaW5vZGUKKyAqIEBmdW5jOiBMSU0gaG9vayBpZGVudGlmaWVyCisgKiBAbWFzazogcmVxdWVzdGVkIGFjdGlvbiAoTUFZX1JFQUQgfCBNQVlfV1JJVEUgfCBNQVlfQVBQRU5EIHwgTUFZX0VYRUMpCisgKgorICogUmV0dXJucyB0cnVlIG9uIHJ1bGUgbWF0Y2gsIGZhbHNlIG9uIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBib29sIGltYV9tYXRjaF9ydWxlcyhzdHJ1Y3QgaW1hX21lYXN1cmVfcnVsZV9lbnRyeSAqcnVsZSwKKwkJCSAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBlbnVtIGltYV9ob29rcyBmdW5jLCBpbnQgbWFzaykKK3sKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7CisJaW50IGk7CisKKwlpZiAoKHJ1bGUtPmZsYWdzICYgSU1BX0ZVTkMpICYmIHJ1bGUtPmZ1bmMgIT0gZnVuYykKKwkJcmV0dXJuIGZhbHNlOworCWlmICgocnVsZS0+ZmxhZ3MgJiBJTUFfTUFTSykgJiYgcnVsZS0+bWFzayAhPSBtYXNrKQorCQlyZXR1cm4gZmFsc2U7CisJaWYgKChydWxlLT5mbGFncyAmIElNQV9GU01BR0lDKQorCSAgICAmJiBydWxlLT5mc21hZ2ljICE9IGlub2RlLT5pX3NiLT5zX21hZ2ljKQorCQlyZXR1cm4gZmFsc2U7CisJaWYgKChydWxlLT5mbGFncyAmIElNQV9VSUQpICYmIHJ1bGUtPnVpZCAhPSB0c2stPmNyZWQtPnVpZCkKKwkJcmV0dXJuIGZhbHNlOworCWZvciAoaSA9IDA7IGkgPCBNQVhfTFNNX1JVTEVTOyBpKyspIHsKKwkJaW50IHJjOworCQl1MzIgb3NpZCwgc2lkOworCisJCWlmICghcnVsZS0+bHNtW2ldLnJ1bGUpCisJCQljb250aW51ZTsKKworCQlzd2l0Y2ggKGkpIHsKKwkJY2FzZSBMU01fT0JKX1VTRVI6CisJCWNhc2UgTFNNX09CSl9ST0xFOgorCQljYXNlIExTTV9PQkpfVFlQRToKKwkJCXNlY3VyaXR5X2lub2RlX2dldHNlY2lkKGlub2RlLCAmb3NpZCk7CisJCQlyYyA9IHNlY3VyaXR5X2ZpbHRlcl9ydWxlX21hdGNoKG9zaWQsCisJCQkJCQkJcnVsZS0+bHNtW2ldLnR5cGUsCisJCQkJCQkJQVVESVRfRVFVQUwsCisJCQkJCQkJcnVsZS0+bHNtW2ldLnJ1bGUsCisJCQkJCQkJTlVMTCk7CisJCQlicmVhazsKKwkJY2FzZSBMU01fU1VCSl9VU0VSOgorCQljYXNlIExTTV9TVUJKX1JPTEU6CisJCWNhc2UgTFNNX1NVQkpfVFlQRToKKwkJCXNlY3VyaXR5X3Rhc2tfZ2V0c2VjaWQodHNrLCAmc2lkKTsKKwkJCXJjID0gc2VjdXJpdHlfZmlsdGVyX3J1bGVfbWF0Y2goc2lkLAorCQkJCQkJCXJ1bGUtPmxzbVtpXS50eXBlLAorCQkJCQkJCUFVRElUX0VRVUFMLAorCQkJCQkJCXJ1bGUtPmxzbVtpXS5ydWxlLAorCQkJCQkJCU5VTEwpOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwkJaWYgKCFyYykKKwkJCXJldHVybiBmYWxzZTsKKwl9CisJcmV0dXJuIHRydWU7Cit9CisKKy8qKgorICogaW1hX21hdGNoX3BvbGljeSAtIGRlY2lzaW9uIGJhc2VkIG9uIExTTSBhbmQgb3RoZXIgY29uZGl0aW9ucworICogQGlub2RlOiBwb2ludGVyIHRvIGFuIGlub2RlIGZvciB3aGljaCB0aGUgcG9saWN5IGRlY2lzaW9uIGlzIGJlaW5nIG1hZGUKKyAqIEBmdW5jOiBJTUEgaG9vayBpZGVudGlmaWVyCisgKiBAbWFzazogcmVxdWVzdGVkIGFjdGlvbiAoTUFZX1JFQUQgfCBNQVlfV1JJVEUgfCBNQVlfQVBQRU5EIHwgTUFZX0VYRUMpCisgKgorICogTWVhc3VyZSBkZWNpc2lvbiBiYXNlZCBvbiBmdW5jL21hc2svZnNtYWdpYyBhbmQgTFNNKHN1Ymovb2JqL3R5cGUpCisgKiBjb25kaXRpb25zLgorICoKKyAqIChUaGVyZSBpcyBubyBuZWVkIGZvciBsb2NraW5nIHdoZW4gd2Fsa2luZyB0aGUgcG9saWN5IGxpc3QsCisgKiBhcyBlbGVtZW50cyBpbiB0aGUgbGlzdCBhcmUgbmV2ZXIgZGVsZXRlZCwgbm9yIGRvZXMgdGhlIGxpc3QKKyAqIGNoYW5nZS4pCisgKi8KK2ludCBpbWFfbWF0Y2hfcG9saWN5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGVudW0gaW1hX2hvb2tzIGZ1bmMsIGludCBtYXNrKQoreworCXN0cnVjdCBpbWFfbWVhc3VyZV9ydWxlX2VudHJ5ICplbnRyeTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksIGltYV9tZWFzdXJlLCBsaXN0KSB7CisJCWJvb2wgcmM7CisKKwkJcmMgPSBpbWFfbWF0Y2hfcnVsZXMoZW50cnksIGlub2RlLCBmdW5jLCBtYXNrKTsKKwkJaWYgKHJjKQorCQkJcmV0dXJuIGVudHJ5LT5hY3Rpb247CisJfQorCXJldHVybiAwOworfQorCisvKioKKyAqIGltYV9pbml0X3BvbGljeSAtIGluaXRpYWxpemUgdGhlIGRlZmF1bHQgbWVhc3VyZSBydWxlcy4KKyAqCisgKiBpbWFfbWVhc3VyZSBwb2ludHMgdG8gZWl0aGVyIHRoZSBtZWFzdXJlX2RlZmF1bHRfcnVsZXMgb3IgdGhlCisgKiB0aGUgbmV3IG1lYXN1cmVfcG9saWN5X3J1bGVzLgorICovCit2b2lkIGltYV9pbml0X3BvbGljeSh2b2lkKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGVmYXVsdF9ydWxlcyk7IGkrKykKKwkJbGlzdF9hZGRfdGFpbCgmZGVmYXVsdF9ydWxlc1tpXS5saXN0LCAmbWVhc3VyZV9kZWZhdWx0X3J1bGVzKTsKKwlpbWFfbWVhc3VyZSA9ICZtZWFzdXJlX2RlZmF1bHRfcnVsZXM7Cit9CisKKy8qKgorICogaW1hX3VwZGF0ZV9wb2xpY3kgLSB1cGRhdGUgZGVmYXVsdF9ydWxlcyB3aXRoIG5ldyBtZWFzdXJlIHJ1bGVzCisgKgorICogQ2FsbGVkIG9uIGZpbGUgLnJlbGVhc2UgdG8gdXBkYXRlIHRoZSBkZWZhdWx0IHJ1bGVzIHdpdGggYSBjb21wbGV0ZSBuZXcKKyAqIHBvbGljeS4gIE9uY2UgdXBkYXRlZCwgdGhlIHBvbGljeSBpcyBsb2NrZWQsIG5vIGFkZGl0aW9uYWwgcnVsZXMgY2FuIGJlCisgKiBhZGRlZCB0byB0aGUgcG9saWN5LgorICovCit2b2lkIGltYV91cGRhdGVfcG9saWN5KHZvaWQpCit7CisJY29uc3QgY2hhciAqb3AgPSAicG9saWN5X3VwZGF0ZSI7CisJY29uc3QgY2hhciAqY2F1c2UgPSAiYWxyZWFkeSBleGlzdHMiOworCWludCByZXN1bHQgPSAxOworCWludCBhdWRpdF9pbmZvID0gMDsKKworCWlmIChpbWFfbWVhc3VyZSA9PSAmbWVhc3VyZV9kZWZhdWx0X3J1bGVzKSB7CisJCWltYV9tZWFzdXJlID0gJm1lYXN1cmVfcG9saWN5X3J1bGVzOworCQljYXVzZSA9ICJjb21wbGV0ZSI7CisJCXJlc3VsdCA9IDA7CisJfQorCWludGVncml0eV9hdWRpdF9tc2coQVVESVRfSU5URUdSSVRZX1NUQVRVUywgTlVMTCwKKwkJCSAgICBOVUxMLCBvcCwgY2F1c2UsIHJlc3VsdCwgYXVkaXRfaW5mbyk7Cit9CisKK2VudW0geworCU9wdF9lcnIgPSAtMSwKKwlPcHRfbWVhc3VyZSA9IDEsIE9wdF9kb250X21lYXN1cmUsCisJT3B0X29ial91c2VyLCBPcHRfb2JqX3JvbGUsIE9wdF9vYmpfdHlwZSwKKwlPcHRfc3Vial91c2VyLCBPcHRfc3Vial9yb2xlLCBPcHRfc3Vial90eXBlLAorCU9wdF9mdW5jLCBPcHRfbWFzaywgT3B0X2ZzbWFnaWMsIE9wdF91aWQKK307CisKK3N0YXRpYyBtYXRjaF90YWJsZV90IHBvbGljeV90b2tlbnMgPSB7CisJe09wdF9tZWFzdXJlLCAibWVhc3VyZSJ9LAorCXtPcHRfZG9udF9tZWFzdXJlLCAiZG9udF9tZWFzdXJlIn0sCisJe09wdF9vYmpfdXNlciwgIm9ial91c2VyPSVzIn0sCisJe09wdF9vYmpfcm9sZSwgIm9ial9yb2xlPSVzIn0sCisJe09wdF9vYmpfdHlwZSwgIm9ial90eXBlPSVzIn0sCisJe09wdF9zdWJqX3VzZXIsICJzdWJqX3VzZXI9JXMifSwKKwl7T3B0X3N1Ympfcm9sZSwgInN1Ympfcm9sZT0lcyJ9LAorCXtPcHRfc3Vial90eXBlLCAic3Vial90eXBlPSVzIn0sCisJe09wdF9mdW5jLCAiZnVuYz0lcyJ9LAorCXtPcHRfbWFzaywgIm1hc2s9JXMifSwKKwl7T3B0X2ZzbWFnaWMsICJmc21hZ2ljPSVzIn0sCisJe09wdF91aWQsICJ1aWQ9JXMifSwKKwl7T3B0X2VyciwgTlVMTH0KK307CisKK3N0YXRpYyBpbnQgaW1hX2xzbV9ydWxlX2luaXQoc3RydWN0IGltYV9tZWFzdXJlX3J1bGVfZW50cnkgKmVudHJ5LAorCQkJICAgICBjaGFyICphcmdzLCBpbnQgbHNtX3J1bGUsIGludCBhdWRpdF90eXBlKQoreworCWludCByZXN1bHQ7CisKKwllbnRyeS0+bHNtW2xzbV9ydWxlXS50eXBlID0gYXVkaXRfdHlwZTsKKwlyZXN1bHQgPSBzZWN1cml0eV9maWx0ZXJfcnVsZV9pbml0KGVudHJ5LT5sc21bbHNtX3J1bGVdLnR5cGUsCisJCQkJCSAgIEFVRElUX0VRVUFMLCBhcmdzLAorCQkJCQkgICAmZW50cnktPmxzbVtsc21fcnVsZV0ucnVsZSk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludCBpbWFfcGFyc2VfcnVsZShjaGFyICpydWxlLCBzdHJ1Y3QgaW1hX21lYXN1cmVfcnVsZV9lbnRyeSAqZW50cnkpCit7CisJc3RydWN0IGF1ZGl0X2J1ZmZlciAqYWI7CisJY2hhciAqcDsKKwlpbnQgcmVzdWx0ID0gMDsKKworCWFiID0gYXVkaXRfbG9nX3N0YXJ0KE5VTEwsIEdGUF9LRVJORUwsIEFVRElUX0lOVEVHUklUWV9SVUxFKTsKKworCWVudHJ5LT5hY3Rpb24gPSAtMTsKKwl3aGlsZSAoKHAgPSBzdHJzZXAoJnJ1bGUsICIgXG4iKSkgIT0gTlVMTCkgeworCQlzdWJzdHJpbmdfdCBhcmdzW01BWF9PUFRfQVJHU107CisJCWludCB0b2tlbjsKKwkJdW5zaWduZWQgbG9uZyBsbnVtOworCisJCWlmIChyZXN1bHQgPCAwKQorCQkJYnJlYWs7CisJCWlmICghKnApCisJCQljb250aW51ZTsKKwkJdG9rZW4gPSBtYXRjaF90b2tlbihwLCBwb2xpY3lfdG9rZW5zLCBhcmdzKTsKKwkJc3dpdGNoICh0b2tlbikgeworCQljYXNlIE9wdF9tZWFzdXJlOgorCQkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIiVzICIsICJtZWFzdXJlIik7CisJCQllbnRyeS0+YWN0aW9uID0gTUVBU1VSRTsKKwkJCWJyZWFrOworCQljYXNlIE9wdF9kb250X21lYXN1cmU6CisJCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiJXMgIiwgImRvbnRfbWVhc3VyZSIpOworCQkJZW50cnktPmFjdGlvbiA9IERPTlRfTUVBU1VSRTsKKwkJCWJyZWFrOworCQljYXNlIE9wdF9mdW5jOgorCQkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgImZ1bmM9JXMgIiwgYXJnc1swXS5mcm9tKTsKKwkJCWlmIChzdHJjbXAoYXJnc1swXS5mcm9tLCAiUEFUSF9DSEVDSyIpID09IDApCisJCQkJZW50cnktPmZ1bmMgPSBQQVRIX0NIRUNLOworCQkJZWxzZSBpZiAoc3RyY21wKGFyZ3NbMF0uZnJvbSwgIkZJTEVfTU1BUCIpID09IDApCisJCQkJZW50cnktPmZ1bmMgPSBGSUxFX01NQVA7CisJCQllbHNlIGlmIChzdHJjbXAoYXJnc1swXS5mcm9tLCAiQlBSTV9DSEVDSyIpID09IDApCisJCQkJZW50cnktPmZ1bmMgPSBCUFJNX0NIRUNLOworCQkJZWxzZQorCQkJCXJlc3VsdCA9IC1FSU5WQUw7CisJCQlpZiAoIXJlc3VsdCkKKwkJCQllbnRyeS0+ZmxhZ3MgfD0gSU1BX0ZVTkM7CisJCQlicmVhazsKKwkJY2FzZSBPcHRfbWFzazoKKwkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICJtYXNrPSVzICIsIGFyZ3NbMF0uZnJvbSk7CisJCQlpZiAoKHN0cmNtcChhcmdzWzBdLmZyb20sICJNQVlfRVhFQyIpKSA9PSAwKQorCQkJCWVudHJ5LT5tYXNrID0gTUFZX0VYRUM7CisJCQllbHNlIGlmIChzdHJjbXAoYXJnc1swXS5mcm9tLCAiTUFZX1dSSVRFIikgPT0gMCkKKwkJCQllbnRyeS0+bWFzayA9IE1BWV9XUklURTsKKwkJCWVsc2UgaWYgKHN0cmNtcChhcmdzWzBdLmZyb20sICJNQVlfUkVBRCIpID09IDApCisJCQkJZW50cnktPm1hc2sgPSBNQVlfUkVBRDsKKwkJCWVsc2UgaWYgKHN0cmNtcChhcmdzWzBdLmZyb20sICJNQVlfQVBQRU5EIikgPT0gMCkKKwkJCQllbnRyeS0+bWFzayA9IE1BWV9BUFBFTkQ7CisJCQllbHNlCisJCQkJcmVzdWx0ID0gLUVJTlZBTDsKKwkJCWlmICghcmVzdWx0KQorCQkJCWVudHJ5LT5mbGFncyB8PSBJTUFfTUFTSzsKKwkJCWJyZWFrOworCQljYXNlIE9wdF9mc21hZ2ljOgorCQkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgImZzbWFnaWM9JXMgIiwgYXJnc1swXS5mcm9tKTsKKwkJCXJlc3VsdCA9IHN0cmljdF9zdHJ0b3VsKGFyZ3NbMF0uZnJvbSwgMTYsCisJCQkJCQkmZW50cnktPmZzbWFnaWMpOworCQkJaWYgKCFyZXN1bHQpCisJCQkJZW50cnktPmZsYWdzIHw9IElNQV9GU01BR0lDOworCQkJYnJlYWs7CisJCWNhc2UgT3B0X3VpZDoKKwkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICJ1aWQ9JXMgIiwgYXJnc1swXS5mcm9tKTsKKwkJCXJlc3VsdCA9IHN0cmljdF9zdHJ0b3VsKGFyZ3NbMF0uZnJvbSwgMTAsICZsbnVtKTsKKwkJCWlmICghcmVzdWx0KSB7CisJCQkJZW50cnktPnVpZCA9ICh1aWRfdCkgbG51bTsKKwkJCQlpZiAoZW50cnktPnVpZCAhPSBsbnVtKQorCQkJCQlyZXN1bHQgPSAtRUlOVkFMOworCQkJCWVsc2UKKwkJCQkJZW50cnktPmZsYWdzIHw9IElNQV9VSUQ7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBPcHRfb2JqX3VzZXI6CisJCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAib2JqX3VzZXI9JXMgIiwgYXJnc1swXS5mcm9tKTsKKwkJCXJlc3VsdCA9IGltYV9sc21fcnVsZV9pbml0KGVudHJ5LCBhcmdzWzBdLmZyb20sCisJCQkJCQkgICBMU01fT0JKX1VTRVIsCisJCQkJCQkgICBBVURJVF9PQkpfVVNFUik7CisJCQlicmVhazsKKwkJY2FzZSBPcHRfb2JqX3JvbGU6CisJCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAib2JqX3JvbGU9JXMgIiwgYXJnc1swXS5mcm9tKTsKKwkJCXJlc3VsdCA9IGltYV9sc21fcnVsZV9pbml0KGVudHJ5LCBhcmdzWzBdLmZyb20sCisJCQkJCQkgICBMU01fT0JKX1JPTEUsCisJCQkJCQkgICBBVURJVF9PQkpfUk9MRSk7CisJCQlicmVhazsKKwkJY2FzZSBPcHRfb2JqX3R5cGU6CisJCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAib2JqX3R5cGU9JXMgIiwgYXJnc1swXS5mcm9tKTsKKwkJCXJlc3VsdCA9IGltYV9sc21fcnVsZV9pbml0KGVudHJ5LCBhcmdzWzBdLmZyb20sCisJCQkJCQkgICBMU01fT0JKX1RZUEUsCisJCQkJCQkgICBBVURJVF9PQkpfVFlQRSk7CisJCQlicmVhazsKKwkJY2FzZSBPcHRfc3Vial91c2VyOgorCQkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgInN1YmpfdXNlcj0lcyAiLCBhcmdzWzBdLmZyb20pOworCQkJcmVzdWx0ID0gaW1hX2xzbV9ydWxlX2luaXQoZW50cnksIGFyZ3NbMF0uZnJvbSwKKwkJCQkJCSAgIExTTV9TVUJKX1VTRVIsCisJCQkJCQkgICBBVURJVF9TVUJKX1VTRVIpOworCQkJYnJlYWs7CisJCWNhc2UgT3B0X3N1Ympfcm9sZToKKwkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICJzdWJqX3JvbGU9JXMgIiwgYXJnc1swXS5mcm9tKTsKKwkJCXJlc3VsdCA9IGltYV9sc21fcnVsZV9pbml0KGVudHJ5LCBhcmdzWzBdLmZyb20sCisJCQkJCQkgICBMU01fU1VCSl9ST0xFLAorCQkJCQkJICAgQVVESVRfU1VCSl9ST0xFKTsKKwkJCWJyZWFrOworCQljYXNlIE9wdF9zdWJqX3R5cGU6CisJCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAic3Vial90eXBlPSVzICIsIGFyZ3NbMF0uZnJvbSk7CisJCQlyZXN1bHQgPSBpbWFfbHNtX3J1bGVfaW5pdChlbnRyeSwgYXJnc1swXS5mcm9tLAorCQkJCQkJICAgTFNNX1NVQkpfVFlQRSwKKwkJCQkJCSAgIEFVRElUX1NVQkpfVFlQRSk7CisJCQlicmVhazsKKwkJY2FzZSBPcHRfZXJyOgorCQkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIlVOS05PV049JXMgIiwgcCk7CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAoZW50cnktPmFjdGlvbiA9PSBVTktOT1dOKQorCQlyZXN1bHQgPSAtRUlOVkFMOworCisJYXVkaXRfbG9nX2Zvcm1hdChhYiwgInJlcz0lZCIsICFyZXN1bHQgPyAwIDogMSk7CisJYXVkaXRfbG9nX2VuZChhYik7CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoqCisgKiBpbWFfcGFyc2VfYWRkX3J1bGUgLSBhZGQgYSBydWxlIHRvIG1lYXN1cmVfcG9saWN5X3J1bGVzCisgKiBAcnVsZSAtIGltYSBtZWFzdXJlbWVudCBwb2xpY3kgcnVsZQorICoKKyAqIFVzZXMgYSBtdXRleCB0byBwcm90ZWN0IHRoZSBwb2xpY3kgbGlzdCBmcm9tIG11bHRpcGxlIGNvbmN1cnJlbnQgd3JpdGVycy4KKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBhbiBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCisgKi8KK2ludCBpbWFfcGFyc2VfYWRkX3J1bGUoY2hhciAqcnVsZSkKK3sKKwljb25zdCBjaGFyICpvcCA9ICJ1cGRhdGVfcG9saWN5IjsKKwlzdHJ1Y3QgaW1hX21lYXN1cmVfcnVsZV9lbnRyeSAqZW50cnk7CisJaW50IHJlc3VsdCA9IDA7CisJaW50IGF1ZGl0X2luZm8gPSAwOworCisJLyogUHJldmVudCBpbnN0YWxsZWQgcG9saWN5IGZyb20gY2hhbmdpbmcgKi8KKwlpZiAoaW1hX21lYXN1cmUgIT0gJm1lYXN1cmVfZGVmYXVsdF9ydWxlcykgeworCQlpbnRlZ3JpdHlfYXVkaXRfbXNnKEFVRElUX0lOVEVHUklUWV9TVEFUVVMsIE5VTEwsCisJCQkJICAgIE5VTEwsIG9wLCAiYWxyZWFkeSBleGlzdHMiLAorCQkJCSAgICAtRUFDQ0VTLCBhdWRpdF9pbmZvKTsKKwkJcmV0dXJuIC1FQUNDRVM7CisJfQorCisJZW50cnkgPSBremFsbG9jKHNpemVvZigqZW50cnkpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWVudHJ5KSB7CisJCWludGVncml0eV9hdWRpdF9tc2coQVVESVRfSU5URUdSSVRZX1NUQVRVUywgTlVMTCwKKwkJCQkgICAgTlVMTCwgb3AsICItRU5PTUVNIiwgLUVOT01FTSwgYXVkaXRfaW5mbyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCUlOSVRfTElTVF9IRUFEKCZlbnRyeS0+bGlzdCk7CisKKwlyZXN1bHQgPSBpbWFfcGFyc2VfcnVsZShydWxlLCBlbnRyeSk7CisJaWYgKCFyZXN1bHQpIHsKKwkJbXV0ZXhfbG9jaygmaW1hX21lYXN1cmVfbXV0ZXgpOworCQlsaXN0X2FkZF90YWlsKCZlbnRyeS0+bGlzdCwgJm1lYXN1cmVfcG9saWN5X3J1bGVzKTsKKwkJbXV0ZXhfdW5sb2NrKCZpbWFfbWVhc3VyZV9tdXRleCk7CisJfSBlbHNlIHsKKwkJa2ZyZWUoZW50cnkpOworCQlpbnRlZ3JpdHlfYXVkaXRfbXNnKEFVRElUX0lOVEVHUklUWV9TVEFUVVMsIE5VTEwsCisJCQkJICAgIE5VTEwsIG9wLCAiaW52YWxpZCBwb2xpY3kiLCByZXN1bHQsCisJCQkJICAgIGF1ZGl0X2luZm8pOworCX0KKwlyZXR1cm4gcmVzdWx0OworfQorCisvKiBpbWFfZGVsZXRlX3J1bGVzIGNhbGxlZCB0byBjbGVhbnVwIGludmFsaWQgcG9saWN5ICovCit2b2lkIGltYV9kZWxldGVfcnVsZXModm9pZCkKK3sKKwlzdHJ1Y3QgaW1hX21lYXN1cmVfcnVsZV9lbnRyeSAqZW50cnksICp0bXA7CisKKwltdXRleF9sb2NrKCZpbWFfbWVhc3VyZV9tdXRleCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVudHJ5LCB0bXAsICZtZWFzdXJlX3BvbGljeV9ydWxlcywgbGlzdCkgeworCQlsaXN0X2RlbCgmZW50cnktPmxpc3QpOworCQlrZnJlZShlbnRyeSk7CisJfQorCW11dGV4X3VubG9jaygmaW1hX21lYXN1cmVfbXV0ZXgpOworfQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfcXVldWUuYyBiL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX3F1ZXVlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2VjOTQzMQotLS0gL2Rldi9udWxsCisrKyBiL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX3F1ZXVlLmMKQEAgLTAsMCArMSwxNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsMjAwNiwyMDA3LDIwMDggSUJNIENvcnBvcmF0aW9uCisgKgorICogQXV0aG9yczoKKyAqIFNlcmdlIEhhbGx5biA8c2VydWVAdXMuaWJtLmNvbT4KKyAqIFJlaW5lciBTYWlsZXIgPHNhaWxlckB3YXRzb24uaWJtLmNvbT4KKyAqIE1pbWkgWm9oYXIgPHpvaGFyQHVzLmlibS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIgb2YgdGhlCisgKiBMaWNlbnNlLgorICoKKyAqIEZpbGU6IGltYV9xdWV1ZS5jCisgKiAgICAgICBJbXBsZW1lbnRzIHF1ZXVlcyB0aGF0IHN0b3JlIHRlbXBsYXRlIG1lYXN1cmVtZW50cyBhbmQKKyAqICAgICAgIG1haW50YWlucyBhZ2dyZWdhdGUgb3ZlciB0aGUgc3RvcmVkIG1lYXN1cmVtZW50cworICogICAgICAgaW4gdGhlIHByZS1jb25maWd1cmVkIFRQTSBQQ1IgKGlmIGF2YWlsYWJsZSkuCisgKiAgICAgICBUaGUgbWVhc3VyZW1lbnQgbGlzdCBpcyBhcHBlbmQtb25seS4gTm8gZW50cnkgaXMKKyAqICAgICAgIGV2ZXIgcmVtb3ZlZCBvciBjaGFuZ2VkIGR1cmluZyB0aGUgYm9vdC1jeWNsZS4KKyAqLworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JjdWxpc3QuaD4KKyNpbmNsdWRlICJpbWEuaCIKKworTElTVF9IRUFEKGltYV9tZWFzdXJlbWVudHMpOwkvKiBsaXN0IG9mIGFsbCBtZWFzdXJlbWVudHMgKi8KKworLyoga2V5OiBpbm9kZSAoYmVmb3JlIHNlY3VyZS1oYXNoaW5nIGEgZmlsZSkgKi8KK3N0cnVjdCBpbWFfaF90YWJsZSBpbWFfaHRhYmxlID0geworCS5sZW4gPSBBVE9NSUNfTE9OR19JTklUKDApLAorCS52aW9sYXRpb25zID0gQVRPTUlDX0xPTkdfSU5JVCgwKSwKKwkucXVldWVbMCAuLi4gSU1BX01FQVNVUkVfSFRBQkxFX1NJWkUgLSAxXSA9IEhMSVNUX0hFQURfSU5JVAorfTsKKworLyogbXV0ZXggcHJvdGVjdHMgYXRvbWljaXR5IG9mIGV4dGVuZGluZyBtZWFzdXJlbWVudCBsaXN0CisgKiBhbmQgZXh0ZW5kaW5nIHRoZSBUUE0gUENSIGFnZ3JlZ2F0ZS4gU2luY2UgdHBtX2V4dGVuZCBjYW4gdGFrZQorICogbG9uZyAoYW5kIHRoZSB0cG0gZHJpdmVyIHVzZXMgYSBtdXRleCksIHdlIGNhbid0IHVzZSB0aGUgc3BpbmxvY2suCisgKi8KK3N0YXRpYyBERUZJTkVfTVVURVgoaW1hX2V4dGVuZF9saXN0X211dGV4KTsKKworLyogbG9va3VwIHVwIHRoZSBkaWdlc3QgdmFsdWUgaW4gdGhlIGhhc2ggdGFibGUsIGFuZCByZXR1cm4gdGhlIGVudHJ5ICovCitzdGF0aWMgc3RydWN0IGltYV9xdWV1ZV9lbnRyeSAqaW1hX2xvb2t1cF9kaWdlc3RfZW50cnkodTggKmRpZ2VzdF92YWx1ZSkKK3sKKwlzdHJ1Y3QgaW1hX3F1ZXVlX2VudHJ5ICpxZSwgKnJldCA9IE5VTEw7CisJdW5zaWduZWQgaW50IGtleTsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqcG9zOworCWludCByYzsKKworCWtleSA9IGltYV9oYXNoX2tleShkaWdlc3RfdmFsdWUpOworCXJjdV9yZWFkX2xvY2soKTsKKwlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocWUsIHBvcywgJmltYV9odGFibGUucXVldWVba2V5XSwgaG5leHQpIHsKKwkJcmMgPSBtZW1jbXAocWUtPmVudHJ5LT5kaWdlc3QsIGRpZ2VzdF92YWx1ZSwgSU1BX0RJR0VTVF9TSVpFKTsKKwkJaWYgKHJjID09IDApIHsKKwkJCXJldCA9IHFlOworCQkJYnJlYWs7CisJCX0KKwl9CisJcmN1X3JlYWRfdW5sb2NrKCk7CisJcmV0dXJuIHJldDsKK30KKworLyogaW1hX2FkZF90ZW1wbGF0ZV9lbnRyeSBoZWxwZXIgZnVuY3Rpb246CisgKiAtIEFkZCB0ZW1wbGF0ZSBlbnRyeSB0byBtZWFzdXJlbWVudCBsaXN0IGFuZCBoYXNoIHRhYmxlLgorICoKKyAqIChDYWxsZWQgd2l0aCBpbWFfZXh0ZW5kX2xpc3RfbXV0ZXggaGVsZC4pCisgKi8KK3N0YXRpYyBpbnQgaW1hX2FkZF9kaWdlc3RfZW50cnkoc3RydWN0IGltYV90ZW1wbGF0ZV9lbnRyeSAqZW50cnkpCit7CisJc3RydWN0IGltYV9xdWV1ZV9lbnRyeSAqcWU7CisJdW5zaWduZWQgaW50IGtleTsKKworCXFlID0ga21hbGxvYyhzaXplb2YoKnFlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHFlID09IE5VTEwpIHsKKwkJcHJfZXJyKCJPVVQgT0YgTUVNT1JZIEVSUk9SIGNyZWF0aW5nIHF1ZXVlIGVudHJ5LlxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlxZS0+ZW50cnkgPSBlbnRyeTsKKworCUlOSVRfTElTVF9IRUFEKCZxZS0+bGF0ZXIpOworCWxpc3RfYWRkX3RhaWxfcmN1KCZxZS0+bGF0ZXIsICZpbWFfbWVhc3VyZW1lbnRzKTsKKworCWF0b21pY19sb25nX2luYygmaW1hX2h0YWJsZS5sZW4pOworCWtleSA9IGltYV9oYXNoX2tleShlbnRyeS0+ZGlnZXN0KTsKKwlobGlzdF9hZGRfaGVhZF9yY3UoJnFlLT5obmV4dCwgJmltYV9odGFibGUucXVldWVba2V5XSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaW1hX3Bjcl9leHRlbmQoY29uc3QgdTggKmhhc2gpCit7CisJaW50IHJlc3VsdCA9IDA7CisKKwlpZiAoIWltYV91c2VkX2NoaXApCisJCXJldHVybiByZXN1bHQ7CisKKwlyZXN1bHQgPSB0cG1fcGNyX2V4dGVuZChUUE1fQU5ZX05VTSwgQ09ORklHX0lNQV9NRUFTVVJFX1BDUl9JRFgsIGhhc2gpOworCWlmIChyZXN1bHQgIT0gMCkKKwkJcHJfZXJyKCJFcnJvciBDb21tdW5pY2F0aW5nIHRvIFRQTSBjaGlwXG4iKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKiBBZGQgdGVtcGxhdGUgZW50cnkgdG8gdGhlIG1lYXN1cmVtZW50IGxpc3QgYW5kIGhhc2ggdGFibGUsCisgKiBhbmQgZXh0ZW5kIHRoZSBwY3IuCisgKi8KK2ludCBpbWFfYWRkX3RlbXBsYXRlX2VudHJ5KHN0cnVjdCBpbWFfdGVtcGxhdGVfZW50cnkgKmVudHJ5LCBpbnQgdmlvbGF0aW9uLAorCQkJICAgY29uc3QgY2hhciAqb3AsIHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJdTggZGlnZXN0W0lNQV9ESUdFU1RfU0laRV07CisJY29uc3QgY2hhciAqYXVkaXRfY2F1c2UgPSAiaGFzaF9hZGRlZCI7CisJaW50IGF1ZGl0X2luZm8gPSAxOworCWludCByZXN1bHQgPSAwOworCisJbXV0ZXhfbG9jaygmaW1hX2V4dGVuZF9saXN0X211dGV4KTsKKwlpZiAoIXZpb2xhdGlvbikgeworCQltZW1jcHkoZGlnZXN0LCBlbnRyeS0+ZGlnZXN0LCBzaXplb2YgZGlnZXN0KTsKKwkJaWYgKGltYV9sb29rdXBfZGlnZXN0X2VudHJ5KGRpZ2VzdCkpIHsKKwkJCWF1ZGl0X2NhdXNlID0gImhhc2hfZXhpc3RzIjsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJcmVzdWx0ID0gaW1hX2FkZF9kaWdlc3RfZW50cnkoZW50cnkpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCWF1ZGl0X2NhdXNlID0gIkVOT01FTSI7CisJCWF1ZGl0X2luZm8gPSAwOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAodmlvbGF0aW9uKQkJLyogaW52YWxpZGF0ZSBwY3IgKi8KKwkJbWVtc2V0KGRpZ2VzdCwgMHhmZiwgc2l6ZW9mIGRpZ2VzdCk7CisKKwlyZXN1bHQgPSBpbWFfcGNyX2V4dGVuZChkaWdlc3QpOworCWlmIChyZXN1bHQgIT0gMCkgeworCQlhdWRpdF9jYXVzZSA9ICJUUE0gZXJyb3IiOworCQlhdWRpdF9pbmZvID0gMDsKKwl9CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZpbWFfZXh0ZW5kX2xpc3RfbXV0ZXgpOworCWludGVncml0eV9hdWRpdF9tc2coQVVESVRfSU5URUdSSVRZX1BDUiwgaW5vZGUsIGVudHJ5LT50ZW1wbGF0ZV9uYW1lLAorCQkJICAgIG9wLCBhdWRpdF9jYXVzZSwgcmVzdWx0LCBhdWRpdF9pbmZvKTsKKwlyZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy9pbnRlcm5hbC5oIGIvc2VjdXJpdHkva2V5cy9pbnRlcm5hbC5oCmluZGV4IDgxOTMyYWIuLjlmYjY3OWMgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2tleXMvaW50ZXJuYWwuaAorKysgYi9zZWN1cml0eS9rZXlzL2ludGVybmFsLmgKQEAgLTUzLDYgKzUzLDcgQEAKIAlhdG9taWNfdAkJbmtleXM7CQkvKiBudW1iZXIgb2Yga2V5cyAqLwogCWF0b21pY190CQluaWtleXM7CQkvKiBudW1iZXIgb2YgaW5zdGFudGlhdGVkIGtleXMgKi8KIAl1aWRfdAkJCXVpZDsKKwlzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UJKnVzZXJfbnM7CiAJaW50CQkJcW5rZXlzOwkJLyogbnVtYmVyIG9mIGtleXMgYWxsb2NhdGVkIHRvIHRoaXMgdXNlciAqLwogCWludAkJCXFuYnl0ZXM7CS8qIG51bWJlciBvZiBieXRlcyBhbGxvY2F0ZWQgdG8gdGhpcyB1c2VyICovCiB9OwpAQCAtNjEsNyArNjIsOCBAQAogZXh0ZXJuIHNwaW5sb2NrX3QJa2V5X3VzZXJfbG9jazsKIGV4dGVybiBzdHJ1Y3Qga2V5X3VzZXIJcm9vdF9rZXlfdXNlcjsKIAotZXh0ZXJuIHN0cnVjdCBrZXlfdXNlciAqa2V5X3VzZXJfbG9va3VwKHVpZF90IHVpZCk7CitleHRlcm4gc3RydWN0IGtleV91c2VyICprZXlfdXNlcl9sb29rdXAodWlkX3QgdWlkLAorCQkJCQlzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnMpOwogZXh0ZXJuIHZvaWQga2V5X3VzZXJfcHV0KHN0cnVjdCBrZXlfdXNlciAqdXNlcik7CiAKIC8qCmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL2tleS5jIGIvc2VjdXJpdHkva2V5cy9rZXkuYwppbmRleCBmNzZjOGE1Li40YTEyOTdkIDEwMDY0NAotLS0gYS9zZWN1cml0eS9rZXlzL2tleS5jCisrKyBiL3NlY3VyaXR5L2tleXMva2V5LmMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC91c2VyX25hbWVzcGFjZS5oPgogI2luY2x1ZGUgImludGVybmFsLmgiCiAKIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZQkqa2V5X2phcjsKQEAgLTYwLDcgKzYxLDcgQEAKICAqIGdldCB0aGUga2V5IHF1b3RhIHJlY29yZCBmb3IgYSB1c2VyLCBhbGxvY2F0aW5nIGEgbmV3IHJlY29yZCBpZiBvbmUgZG9lc24ndAogICogYWxyZWFkeSBleGlzdAogICovCi1zdHJ1Y3Qga2V5X3VzZXIgKmtleV91c2VyX2xvb2t1cCh1aWRfdCB1aWQpCitzdHJ1Y3Qga2V5X3VzZXIgKmtleV91c2VyX2xvb2t1cCh1aWRfdCB1aWQsIHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9ucykKIHsKIAlzdHJ1Y3Qga2V5X3VzZXIgKmNhbmRpZGF0ZSA9IE5VTEwsICp1c2VyOwogCXN0cnVjdCByYl9ub2RlICpwYXJlbnQgPSBOVUxMOwpAQCAtNzksNiArODAsMTAgQEAKIAkJCXAgPSAmKCpwKS0+cmJfbGVmdDsKIAkJZWxzZSBpZiAodWlkID4gdXNlci0+dWlkKQogCQkJcCA9ICYoKnApLT5yYl9yaWdodDsKKwkJZWxzZSBpZiAodXNlcl9ucyA8IHVzZXItPnVzZXJfbnMpCisJCQlwID0gJigqcCktPnJiX2xlZnQ7CisJCWVsc2UgaWYgKHVzZXJfbnMgPiB1c2VyLT51c2VyX25zKQorCQkJcCA9ICYoKnApLT5yYl9yaWdodDsKIAkJZWxzZQogCQkJZ290byBmb3VuZDsKIAl9CkBAIC0xMDYsNiArMTExLDcgQEAKIAlhdG9taWNfc2V0KCZjYW5kaWRhdGUtPm5rZXlzLCAwKTsKIAlhdG9taWNfc2V0KCZjYW5kaWRhdGUtPm5pa2V5cywgMCk7CiAJY2FuZGlkYXRlLT51aWQgPSB1aWQ7CisJY2FuZGlkYXRlLT51c2VyX25zID0gZ2V0X3VzZXJfbnModXNlcl9ucyk7CiAJY2FuZGlkYXRlLT5xbmtleXMgPSAwOwogCWNhbmRpZGF0ZS0+cW5ieXRlcyA9IDA7CiAJc3Bpbl9sb2NrX2luaXQoJmNhbmRpZGF0ZS0+bG9jayk7CkBAIC0xMzYsNiArMTQyLDcgQEAKIAlpZiAoYXRvbWljX2RlY19hbmRfbG9jaygmdXNlci0+dXNhZ2UsICZrZXlfdXNlcl9sb2NrKSkgewogCQlyYl9lcmFzZSgmdXNlci0+bm9kZSwgJmtleV91c2VyX3RyZWUpOwogCQlzcGluX3VubG9jaygma2V5X3VzZXJfbG9jayk7CisJCXB1dF91c2VyX25zKHVzZXItPnVzZXJfbnMpOwogCiAJCWtmcmVlKHVzZXIpOwogCX0KQEAgLTIzNCw3ICsyNDEsNyBAQAogCXF1b3RhbGVuID0gZGVzY2xlbiArIHR5cGUtPmRlZl9kYXRhbGVuOwogCiAJLyogZ2V0IGhvbGQgb2YgdGhlIGtleSB0cmFja2luZyBmb3IgdGhpcyB1c2VyICovCi0JdXNlciA9IGtleV91c2VyX2xvb2t1cCh1aWQpOworCXVzZXIgPSBrZXlfdXNlcl9sb29rdXAodWlkLCBjcmVkLT51c2VyLT51c2VyX25zKTsKIAlpZiAoIXVzZXIpCiAJCWdvdG8gbm9fbWVtb3J5XzE7CiAKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMva2V5Y3RsLmMgYi9zZWN1cml0eS9rZXlzL2tleWN0bC5jCmluZGV4IGIxZWMzYjQuLjdmMDlmYjggMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2tleXMva2V5Y3RsLmMKKysrIGIvc2VjdXJpdHkva2V5cy9rZXljdGwuYwpAQCAtNzI2LDcgKzcyNiw3IEBACiAJLyogY2hhbmdlIHRoZSBVSUQgKi8KIAlpZiAodWlkICE9ICh1aWRfdCkgLTEgJiYgdWlkICE9IGtleS0+dWlkKSB7CiAJCXJldCA9IC1FTk9NRU07Ci0JCW5ld293bmVyID0ga2V5X3VzZXJfbG9va3VwKHVpZCk7CisJCW5ld293bmVyID0ga2V5X3VzZXJfbG9va3VwKHVpZCwgY3VycmVudF91c2VyX25zKCkpOwogCQlpZiAoIW5ld293bmVyKQogCQkJZ290byBlcnJvcl9wdXQ7CiAKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMva2V5cmluZy5jIGIvc2VjdXJpdHkva2V5cy9rZXlyaW5nLmMKaW5kZXggZWQ4NTE1Ny4uM2RiYTgxYyAxMDA2NDQKLS0tIGEvc2VjdXJpdHkva2V5cy9rZXlyaW5nLmMKKysrIGIvc2VjdXJpdHkva2V5cy9rZXlyaW5nLmMKQEAgLTUzOSw2ICs1MzksOSBAQAogCQkJCSAgICAma2V5cmluZ19uYW1lX2hhc2hbYnVja2V0XSwKIAkJCQkgICAgdHlwZV9kYXRhLmxpbmsKIAkJCQkgICAgKSB7CisJCQlpZiAoa2V5cmluZy0+dXNlci0+dXNlcl9ucyAhPSBjdXJyZW50X3VzZXJfbnMoKSkKKwkJCQljb250aW51ZTsKKwogCQkJaWYgKHRlc3RfYml0KEtFWV9GTEFHX1JFVk9LRUQsICZrZXlyaW5nLT5mbGFncykpCiAJCQkJY29udGludWU7CiAKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMvcGVybWlzc2lvbi5jIGIvc2VjdXJpdHkva2V5cy9wZXJtaXNzaW9uLmMKaW5kZXggNWQ5ZmM3Yi4uMGVkODAyYyAxMDA2NDQKLS0tIGEvc2VjdXJpdHkva2V5cy9wZXJtaXNzaW9uLmMKKysrIGIvc2VjdXJpdHkva2V5cy9wZXJtaXNzaW9uLmMKQEAgLTM1LDYgKzM1LDkgQEAKIAogCWtleSA9IGtleV9yZWZfdG9fcHRyKGtleV9yZWYpOwogCisJaWYgKGtleS0+dXNlci0+dXNlcl9ucyAhPSBjcmVkLT51c2VyLT51c2VyX25zKQorCQlnb3RvIHVzZV9vdGhlcl9wZXJtczsKKwogCS8qIHVzZSB0aGUgc2Vjb25kIDgtYml0cyBvZiBwZXJtaXNzaW9ucyBmb3Iga2V5cyB0aGUgY2FsbGVyIG93bnMgKi8KIAlpZiAoa2V5LT51aWQgPT0gY3JlZC0+ZnN1aWQpIHsKIAkJa3Blcm0gPSBrZXktPnBlcm0gPj4gMTY7CkBAIC01Niw2ICs1OSw4IEBACiAJCX0KIAl9CiAKK3VzZV9vdGhlcl9wZXJtczoKKwogCS8qIG90aGVyd2lzZSB1c2UgdGhlIGxlYXN0LXNpZ25pZmljYW50IDgtYml0cyAqLwogCWtwZXJtID0ga2V5LT5wZXJtOwogCmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL3Byb2MuYyBiL3NlY3VyaXR5L2tleXMvcHJvYy5jCmluZGV4IDdmNTA4ZGUuLjc2OWY5YmQgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2tleXMvcHJvYy5jCisrKyBiL3NlY3VyaXR5L2tleXMvcHJvYy5jCkBAIC05MSw2ICs5MSwyOCBAQAogICovCiAjaWZkZWYgQ09ORklHX0tFWVNfREVCVUdfUFJPQ19LRVlTCiAKK3N0YXRpYyBzdHJ1Y3QgcmJfbm9kZSAqX19rZXlfc2VyaWFsX25leHQoc3RydWN0IHJiX25vZGUgKm4pCit7CisJd2hpbGUgKG4pIHsKKwkJc3RydWN0IGtleSAqa2V5ID0gcmJfZW50cnkobiwgc3RydWN0IGtleSwgc2VyaWFsX25vZGUpOworCQlpZiAoa2V5LT51c2VyLT51c2VyX25zID09IGN1cnJlbnRfdXNlcl9ucygpKQorCQkJYnJlYWs7CisJCW4gPSByYl9uZXh0KG4pOworCX0KKwlyZXR1cm4gbjsKK30KKworc3RhdGljIHN0cnVjdCByYl9ub2RlICprZXlfc2VyaWFsX25leHQoc3RydWN0IHJiX25vZGUgKm4pCit7CisJcmV0dXJuIF9fa2V5X3NlcmlhbF9uZXh0KHJiX25leHQobikpOworfQorCitzdGF0aWMgc3RydWN0IHJiX25vZGUgKmtleV9zZXJpYWxfZmlyc3Qoc3RydWN0IHJiX3Jvb3QgKnIpCit7CisJc3RydWN0IHJiX25vZGUgKm4gPSByYl9maXJzdChyKTsKKwlyZXR1cm4gX19rZXlfc2VyaWFsX25leHQobik7Cit9CisKIHN0YXRpYyBpbnQgcHJvY19rZXlzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJcmV0dXJuIHNlcV9vcGVuKGZpbGUsICZwcm9jX2tleXNfb3BzKTsKQEAgLTEwNCwxMCArMTI2LDEwIEBACiAKIAlzcGluX2xvY2soJmtleV9zZXJpYWxfbG9jayk7CiAKLQlfcCA9IHJiX2ZpcnN0KCZrZXlfc2VyaWFsX3RyZWUpOworCV9wID0ga2V5X3NlcmlhbF9maXJzdCgma2V5X3NlcmlhbF90cmVlKTsKIAl3aGlsZSAocG9zID4gMCAmJiBfcCkgewogCQlwb3MtLTsKLQkJX3AgPSByYl9uZXh0KF9wKTsKKwkJX3AgPSBrZXlfc2VyaWFsX25leHQoX3ApOwogCX0KIAogCXJldHVybiBfcDsKQEAgLTExNyw3ICsxMzksNyBAQAogc3RhdGljIHZvaWQgKnByb2Nfa2V5c19uZXh0KHN0cnVjdCBzZXFfZmlsZSAqcCwgdm9pZCAqdiwgbG9mZl90ICpfcG9zKQogewogCSgqX3BvcykrKzsKLQlyZXR1cm4gcmJfbmV4dCgoc3RydWN0IHJiX25vZGUgKikgdik7CisJcmV0dXJuIGtleV9zZXJpYWxfbmV4dCgoc3RydWN0IHJiX25vZGUgKikgdik7CiAKIH0KIApAQCAtMjAzLDYgKzIyNSwyNyBAQAogCiAjZW5kaWYgLyogQ09ORklHX0tFWVNfREVCVUdfUFJPQ19LRVlTICovCiAKK3N0YXRpYyBzdHJ1Y3QgcmJfbm9kZSAqX19rZXlfdXNlcl9uZXh0KHN0cnVjdCByYl9ub2RlICpuKQoreworCXdoaWxlIChuKSB7CisJCXN0cnVjdCBrZXlfdXNlciAqdXNlciA9IHJiX2VudHJ5KG4sIHN0cnVjdCBrZXlfdXNlciwgbm9kZSk7CisJCWlmICh1c2VyLT51c2VyX25zID09IGN1cnJlbnRfdXNlcl9ucygpKQorCQkJYnJlYWs7CisJCW4gPSByYl9uZXh0KG4pOworCX0KKwlyZXR1cm4gbjsKK30KKworc3RhdGljIHN0cnVjdCByYl9ub2RlICprZXlfdXNlcl9uZXh0KHN0cnVjdCByYl9ub2RlICpuKQoreworCXJldHVybiBfX2tleV91c2VyX25leHQocmJfbmV4dChuKSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmJfbm9kZSAqa2V5X3VzZXJfZmlyc3Qoc3RydWN0IHJiX3Jvb3QgKnIpCit7CisJc3RydWN0IHJiX25vZGUgKm4gPSByYl9maXJzdChyKTsKKwlyZXR1cm4gX19rZXlfdXNlcl9uZXh0KG4pOworfQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoKICAqIGltcGxlbWVudCAiL3Byb2Mva2V5LXVzZXJzIiB0byBwcm92aWRlcyBhIGxpc3Qgb2YgdGhlIGtleSB1c2VycwpAQCAtMjIwLDEwICsyNjMsMTAgQEAKIAogCXNwaW5fbG9jaygma2V5X3VzZXJfbG9jayk7CiAKLQlfcCA9IHJiX2ZpcnN0KCZrZXlfdXNlcl90cmVlKTsKKwlfcCA9IGtleV91c2VyX2ZpcnN0KCZrZXlfdXNlcl90cmVlKTsKIAl3aGlsZSAocG9zID4gMCAmJiBfcCkgewogCQlwb3MtLTsKLQkJX3AgPSByYl9uZXh0KF9wKTsKKwkJX3AgPSBrZXlfdXNlcl9uZXh0KF9wKTsKIAl9CiAKIAlyZXR1cm4gX3A7CkBAIC0yMzMsNyArMjc2LDcgQEAKIHN0YXRpYyB2b2lkICpwcm9jX2tleV91c2Vyc19uZXh0KHN0cnVjdCBzZXFfZmlsZSAqcCwgdm9pZCAqdiwgbG9mZl90ICpfcG9zKQogewogCSgqX3BvcykrKzsKLQlyZXR1cm4gcmJfbmV4dCgoc3RydWN0IHJiX25vZGUgKikgdik7CisJcmV0dXJuIGtleV91c2VyX25leHQoKHN0cnVjdCByYl9ub2RlICopIHYpOwogCiB9CiAKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMvcHJvY2Vzc19rZXlzLmMgYi9zZWN1cml0eS9rZXlzL3Byb2Nlc3Nfa2V5cy5jCmluZGV4IDJmNWQ4OWUuLjI3NmQyNzggMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2tleXMvcHJvY2Vzc19rZXlzLmMKKysrIGIvc2VjdXJpdHkva2V5cy9wcm9jZXNzX2tleXMuYwpAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC91c2VyX25hbWVzcGFjZS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKIApAQCAtMzQsNiArMzUsNyBAQAogCS5ua2V5cwkJPSBBVE9NSUNfSU5JVCgyKSwKIAkubmlrZXlzCQk9IEFUT01JQ19JTklUKDIpLAogCS51aWQJCT0gMCwKKwkudXNlcl9ucwk9ICZpbml0X3VzZXJfbnMsCiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL3JlcXVlc3Rfa2V5LmMgYi9zZWN1cml0eS9rZXlzL3JlcXVlc3Rfa2V5LmMKaW5kZXggMGUwNGY3Mi4uMjJhMzE1OCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkva2V5cy9yZXF1ZXN0X2tleS5jCisrKyBiL3NlY3VyaXR5L2tleXMvcmVxdWVzdF9rZXkuYwpAQCAtMzY1LDcgKzM2NSw3IEBACiAKIAlrZW50ZXIoIiIpOwogCi0JdXNlciA9IGtleV91c2VyX2xvb2t1cChjdXJyZW50X2ZzdWlkKCkpOworCXVzZXIgPSBrZXlfdXNlcl9sb29rdXAoY3VycmVudF9mc3VpZCgpLCBjdXJyZW50X3VzZXJfbnMoKSk7CiAJaWYgKCF1c2VyKQogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9hdmMuYyBiL3NlY3VyaXR5L3NlbGludXgvYXZjLmMKaW5kZXggZWI0MWY0My4uN2Y5YjVmYSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9hdmMuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L2F2Yy5jCkBAIC04OCwxNyArODgsMTYgQEAKIAl1MzIJCQl0c2lkOwogCXUxNgkJCXRjbGFzczsKIAlzdHJ1Y3QgYXZfZGVjaXNpb24JYXZkOwotCWF0b21pY190CQl1c2VkOwkvKiB1c2VkIHJlY2VudGx5ICovCiB9OwogCiBzdHJ1Y3QgYXZjX25vZGUgewogCXN0cnVjdCBhdmNfZW50cnkJYWU7Ci0Jc3RydWN0IGxpc3RfaGVhZAlsaXN0OworCXN0cnVjdCBobGlzdF9ub2RlCWxpc3Q7IC8qIGFuY2hvcmVkIGluIGF2Y19jYWNoZS0+c2xvdHNbaV0gKi8KIAlzdHJ1Y3QgcmN1X2hlYWQJCXJoZWFkOwogfTsKIAogc3RydWN0IGF2Y19jYWNoZSB7Ci0Jc3RydWN0IGxpc3RfaGVhZAlzbG90c1tBVkNfQ0FDSEVfU0xPVFNdOworCXN0cnVjdCBobGlzdF9oZWFkCXNsb3RzW0FWQ19DQUNIRV9TTE9UU107IC8qIGhlYWQgZm9yIGF2Y19ub2RlLT5saXN0ICovCiAJc3BpbmxvY2tfdAkJc2xvdHNfbG9ja1tBVkNfQ0FDSEVfU0xPVFNdOyAvKiBsb2NrIGZvciB3cml0ZXMgKi8KIAlhdG9taWNfdAkJbHJ1X2hpbnQ7CS8qIExSVSBoaW50IGZvciByZWNsYWltIHNjYW4gKi8KIAlhdG9taWNfdAkJYWN0aXZlX25vZGVzOwpAQCAtMjM0LDcgKzIzMyw3IEBACiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVZDX0NBQ0hFX1NMT1RTOyBpKyspIHsKLQkJSU5JVF9MSVNUX0hFQUQoJmF2Y19jYWNoZS5zbG90c1tpXSk7CisJCUlOSVRfSExJU1RfSEVBRCgmYXZjX2NhY2hlLnNsb3RzW2ldKTsKIAkJc3Bpbl9sb2NrX2luaXQoJmF2Y19jYWNoZS5zbG90c19sb2NrW2ldKTsKIAl9CiAJYXRvbWljX3NldCgmYXZjX2NhY2hlLmFjdGl2ZV9ub2RlcywgMCk7CkBAIC0yNTAsMTYgKzI0OSwyMCBAQAogewogCWludCBpLCBjaGFpbl9sZW4sIG1heF9jaGFpbl9sZW4sIHNsb3RzX3VzZWQ7CiAJc3RydWN0IGF2Y19ub2RlICpub2RlOworCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkOwogCiAJcmN1X3JlYWRfbG9jaygpOwogCiAJc2xvdHNfdXNlZCA9IDA7CiAJbWF4X2NoYWluX2xlbiA9IDA7CiAJZm9yIChpID0gMDsgaSA8IEFWQ19DQUNIRV9TTE9UUzsgaSsrKSB7Ci0JCWlmICghbGlzdF9lbXB0eSgmYXZjX2NhY2hlLnNsb3RzW2ldKSkgeworCQloZWFkID0gJmF2Y19jYWNoZS5zbG90c1tpXTsKKwkJaWYgKCFobGlzdF9lbXB0eShoZWFkKSkgeworCQkJc3RydWN0IGhsaXN0X25vZGUgKm5leHQ7CisKIAkJCXNsb3RzX3VzZWQrKzsKIAkJCWNoYWluX2xlbiA9IDA7Ci0JCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShub2RlLCAmYXZjX2NhY2hlLnNsb3RzW2ldLCBsaXN0KQorCQkJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KG5vZGUsIG5leHQsIGhlYWQsIGxpc3QpCiAJCQkJY2hhaW5fbGVuKys7CiAJCQlpZiAoY2hhaW5fbGVuID4gbWF4X2NoYWluX2xlbikKIAkJCQltYXhfY2hhaW5fbGVuID0gY2hhaW5fbGVuOwpAQCAtMjgzLDcgKzI4Niw3IEBACiAKIHN0YXRpYyB2b2lkIGF2Y19ub2RlX2RlbGV0ZShzdHJ1Y3QgYXZjX25vZGUgKm5vZGUpCiB7Ci0JbGlzdF9kZWxfcmN1KCZub2RlLT5saXN0KTsKKwlobGlzdF9kZWxfcmN1KCZub2RlLT5saXN0KTsKIAljYWxsX3JjdSgmbm9kZS0+cmhlYWQsIGF2Y19ub2RlX2ZyZWUpOwogCWF0b21pY19kZWMoJmF2Y19jYWNoZS5hY3RpdmVfbm9kZXMpOwogfQpAQCAtMjk3LDcgKzMwMCw3IEBACiAKIHN0YXRpYyB2b2lkIGF2Y19ub2RlX3JlcGxhY2Uoc3RydWN0IGF2Y19ub2RlICpuZXcsIHN0cnVjdCBhdmNfbm9kZSAqb2xkKQogewotCWxpc3RfcmVwbGFjZV9yY3UoJm9sZC0+bGlzdCwgJm5ldy0+bGlzdCk7CisJaGxpc3RfcmVwbGFjZV9yY3UoJm9sZC0+bGlzdCwgJm5ldy0+bGlzdCk7CiAJY2FsbF9yY3UoJm9sZC0+cmhlYWQsIGF2Y19ub2RlX2ZyZWUpOwogCWF0b21pY19kZWMoJmF2Y19jYWNoZS5hY3RpdmVfbm9kZXMpOwogfQpAQCAtMzA3LDI5ICszMTAsMzEgQEAKIAlzdHJ1Y3QgYXZjX25vZGUgKm5vZGU7CiAJaW50IGh2YWx1ZSwgdHJ5LCBlY3g7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbmV4dDsKKwlzcGlubG9ja190ICpsb2NrOwogCiAJZm9yICh0cnkgPSAwLCBlY3ggPSAwOyB0cnkgPCBBVkNfQ0FDSEVfU0xPVFM7IHRyeSsrKSB7CiAJCWh2YWx1ZSA9IGF0b21pY19pbmNfcmV0dXJuKCZhdmNfY2FjaGUubHJ1X2hpbnQpICYgKEFWQ19DQUNIRV9TTE9UUyAtIDEpOworCQloZWFkID0gJmF2Y19jYWNoZS5zbG90c1todmFsdWVdOworCQlsb2NrID0gJmF2Y19jYWNoZS5zbG90c19sb2NrW2h2YWx1ZV07CiAKLQkJaWYgKCFzcGluX3RyeWxvY2tfaXJxc2F2ZSgmYXZjX2NhY2hlLnNsb3RzX2xvY2tbaHZhbHVlXSwgZmxhZ3MpKQorCQlpZiAoIXNwaW5fdHJ5bG9ja19pcnFzYXZlKGxvY2ssIGZsYWdzKSkKIAkJCWNvbnRpbnVlOwogCiAJCXJjdV9yZWFkX2xvY2soKTsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShub2RlLCAmYXZjX2NhY2hlLnNsb3RzW2h2YWx1ZV0sIGxpc3QpIHsKLQkJCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZub2RlLT5hZS51c2VkKSkgewotCQkJCS8qIFJlY2VudGx5IFVudXNlZCAqLwotCQkJCWF2Y19ub2RlX2RlbGV0ZShub2RlKTsKLQkJCQlhdmNfY2FjaGVfc3RhdHNfaW5jcihyZWNsYWltcyk7Ci0JCQkJZWN4Kys7Ci0JCQkJaWYgKGVjeCA+PSBBVkNfQ0FDSEVfUkVDTEFJTSkgewotCQkJCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXZjX2NhY2hlLnNsb3RzX2xvY2tbaHZhbHVlXSwgZmxhZ3MpOwotCQkJCQlnb3RvIG91dDsKLQkJCQl9CisJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KG5vZGUsIG5leHQsIGhlYWQsIGxpc3QpIHsKKwkJCWF2Y19ub2RlX2RlbGV0ZShub2RlKTsKKwkJCWF2Y19jYWNoZV9zdGF0c19pbmNyKHJlY2xhaW1zKTsKKwkJCWVjeCsrOworCQkJaWYgKGVjeCA+PSBBVkNfQ0FDSEVfUkVDTEFJTSkgeworCQkJCXJjdV9yZWFkX3VubG9jaygpOworCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUobG9jaywgZmxhZ3MpOworCQkJCWdvdG8gb3V0OwogCQkJfQogCQl9CiAJCXJjdV9yZWFkX3VubG9jaygpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhdmNfY2FjaGUuc2xvdHNfbG9ja1todmFsdWVdLCBmbGFncyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUobG9jaywgZmxhZ3MpOwogCX0KIG91dDoKIAlyZXR1cm4gZWN4OwpAQCAtMzQ0LDggKzM0OSw3IEBACiAJCWdvdG8gb3V0OwogCiAJSU5JVF9SQ1VfSEVBRCgmbm9kZS0+cmhlYWQpOwotCUlOSVRfTElTVF9IRUFEKCZub2RlLT5saXN0KTsKLQlhdG9taWNfc2V0KCZub2RlLT5hZS51c2VkLCAxKTsKKwlJTklUX0hMSVNUX05PREUoJm5vZGUtPmxpc3QpOwogCWF2Y19jYWNoZV9zdGF0c19pbmNyKGFsbG9jYXRpb25zKTsKIAogCWlmIChhdG9taWNfaW5jX3JldHVybigmYXZjX2NhY2hlLmFjdGl2ZV9ub2RlcykgPiBhdmNfY2FjaGVfdGhyZXNob2xkKQpAQCAtMzU1LDIxICszNTksMjQgQEAKIAlyZXR1cm4gbm9kZTsKIH0KIAotc3RhdGljIHZvaWQgYXZjX25vZGVfcG9wdWxhdGUoc3RydWN0IGF2Y19ub2RlICpub2RlLCB1MzIgc3NpZCwgdTMyIHRzaWQsIHUxNiB0Y2xhc3MsIHN0cnVjdCBhdmNfZW50cnkgKmFlKQorc3RhdGljIHZvaWQgYXZjX25vZGVfcG9wdWxhdGUoc3RydWN0IGF2Y19ub2RlICpub2RlLCB1MzIgc3NpZCwgdTMyIHRzaWQsIHUxNiB0Y2xhc3MsIHN0cnVjdCBhdl9kZWNpc2lvbiAqYXZkKQogewogCW5vZGUtPmFlLnNzaWQgPSBzc2lkOwogCW5vZGUtPmFlLnRzaWQgPSB0c2lkOwogCW5vZGUtPmFlLnRjbGFzcyA9IHRjbGFzczsKLQltZW1jcHkoJm5vZGUtPmFlLmF2ZCwgJmFlLT5hdmQsIHNpemVvZihub2RlLT5hZS5hdmQpKTsKKwltZW1jcHkoJm5vZGUtPmFlLmF2ZCwgYXZkLCBzaXplb2Yobm9kZS0+YWUuYXZkKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGF2Y19ub2RlICphdmNfc2VhcmNoX25vZGUodTMyIHNzaWQsIHUzMiB0c2lkLCB1MTYgdGNsYXNzKQogewogCXN0cnVjdCBhdmNfbm9kZSAqbm9kZSwgKnJldCA9IE5VTEw7CiAJaW50IGh2YWx1ZTsKKwlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbmV4dDsKIAogCWh2YWx1ZSA9IGF2Y19oYXNoKHNzaWQsIHRzaWQsIHRjbGFzcyk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uobm9kZSwgJmF2Y19jYWNoZS5zbG90c1todmFsdWVdLCBsaXN0KSB7CisJaGVhZCA9ICZhdmNfY2FjaGUuc2xvdHNbaHZhbHVlXTsKKwlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uobm9kZSwgbmV4dCwgaGVhZCwgbGlzdCkgewogCQlpZiAoc3NpZCA9PSBub2RlLT5hZS5zc2lkICYmCiAJCSAgICB0Y2xhc3MgPT0gbm9kZS0+YWUudGNsYXNzICYmCiAJCSAgICB0c2lkID09IG5vZGUtPmFlLnRzaWQpIHsKQEAgLTM3OCwxNSArMzg1LDYgQEAKIAkJfQogCX0KIAotCWlmIChyZXQgPT0gTlVMTCkgewotCQkvKiBjYWNoZSBtaXNzICovCi0JCWdvdG8gb3V0OwotCX0KLQotCS8qIGNhY2hlIGhpdCAqLwotCWlmIChhdG9taWNfcmVhZCgmcmV0LT5hZS51c2VkKSAhPSAxKQotCQlhdG9taWNfc2V0KCZyZXQtPmFlLnVzZWQsIDEpOwotb3V0OgogCXJldHVybiByZXQ7CiB9CiAKQEAgLTM5NSwzMCArMzkzLDI1IEBACiAgKiBAc3NpZDogc291cmNlIHNlY3VyaXR5IGlkZW50aWZpZXIKICAqIEB0c2lkOiB0YXJnZXQgc2VjdXJpdHkgaWRlbnRpZmllcgogICogQHRjbGFzczogdGFyZ2V0IHNlY3VyaXR5IGNsYXNzCi0gKiBAcmVxdWVzdGVkOiByZXF1ZXN0ZWQgcGVybWlzc2lvbnMsIGludGVycHJldGVkIGJhc2VkIG9uIEB0Y2xhc3MKICAqCiAgKiBMb29rIHVwIGFuIEFWQyBlbnRyeSB0aGF0IGlzIHZhbGlkIGZvciB0aGUKLSAqIEByZXF1ZXN0ZWQgcGVybWlzc2lvbnMgYmV0d2VlbiB0aGUgU0lEIHBhaXIKICAqIChAc3NpZCwgQHRzaWQpLCBpbnRlcnByZXRpbmcgdGhlIHBlcm1pc3Npb25zCiAgKiBiYXNlZCBvbiBAdGNsYXNzLiAgSWYgYSB2YWxpZCBBVkMgZW50cnkgZXhpc3RzLAogICogdGhlbiB0aGlzIGZ1bmN0aW9uIHJldHVybiB0aGUgYXZjX25vZGUuCiAgKiBPdGhlcndpc2UsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBOVUxMLgogICovCi1zdGF0aWMgc3RydWN0IGF2Y19ub2RlICphdmNfbG9va3VwKHUzMiBzc2lkLCB1MzIgdHNpZCwgdTE2IHRjbGFzcywgdTMyIHJlcXVlc3RlZCkKK3N0YXRpYyBzdHJ1Y3QgYXZjX25vZGUgKmF2Y19sb29rdXAodTMyIHNzaWQsIHUzMiB0c2lkLCB1MTYgdGNsYXNzKQogewogCXN0cnVjdCBhdmNfbm9kZSAqbm9kZTsKIAogCWF2Y19jYWNoZV9zdGF0c19pbmNyKGxvb2t1cHMpOwogCW5vZGUgPSBhdmNfc2VhcmNoX25vZGUoc3NpZCwgdHNpZCwgdGNsYXNzKTsKIAotCWlmIChub2RlICYmICgobm9kZS0+YWUuYXZkLmRlY2lkZWQgJiByZXF1ZXN0ZWQpID09IHJlcXVlc3RlZCkpIHsKKwlpZiAobm9kZSkKIAkJYXZjX2NhY2hlX3N0YXRzX2luY3IoaGl0cyk7Ci0JCWdvdG8gb3V0OwotCX0KKwllbHNlCisJCWF2Y19jYWNoZV9zdGF0c19pbmNyKG1pc3Nlcyk7CiAKLQlub2RlID0gTlVMTDsKLQlhdmNfY2FjaGVfc3RhdHNfaW5jcihtaXNzZXMpOwotb3V0OgogCXJldHVybiBub2RlOwogfQogCkBAIC00NDksMzQgKzQ0Miw0MSBAQAogICogQHNzaWQ6IHNvdXJjZSBzZWN1cml0eSBpZGVudGlmaWVyCiAgKiBAdHNpZDogdGFyZ2V0IHNlY3VyaXR5IGlkZW50aWZpZXIKICAqIEB0Y2xhc3M6IHRhcmdldCBzZWN1cml0eSBjbGFzcwotICogQGFlOiBBVkMgZW50cnkKKyAqIEBhdmQ6IHJlc3VsdGluZyBhdiBkZWNpc2lvbgogICoKICAqIEluc2VydCBhbiBBVkMgZW50cnkgZm9yIHRoZSBTSUQgcGFpcgogICogKEBzc2lkLCBAdHNpZCkgYW5kIGNsYXNzIEB0Y2xhc3MuCiAgKiBUaGUgYWNjZXNzIHZlY3RvcnMgYW5kIHRoZSBzZXF1ZW5jZSBudW1iZXIgYXJlCiAgKiBub3JtYWxseSBwcm92aWRlZCBieSB0aGUgc2VjdXJpdHkgc2VydmVyIGluCiAgKiByZXNwb25zZSB0byBhIHNlY3VyaXR5X2NvbXB1dGVfYXYoKSBjYWxsLiAgSWYgdGhlCi0gKiBzZXF1ZW5jZSBudW1iZXIgQGFlLT5hdmQuc2Vxbm8gaXMgbm90IGxlc3MgdGhhbiB0aGUgbGF0ZXN0CisgKiBzZXF1ZW5jZSBudW1iZXIgQGF2ZC0+c2Vxbm8gaXMgbm90IGxlc3MgdGhhbiB0aGUgbGF0ZXN0CiAgKiByZXZvY2F0aW9uIG5vdGlmaWNhdGlvbiwgdGhlbiB0aGUgZnVuY3Rpb24gY29waWVzCiAgKiB0aGUgYWNjZXNzIHZlY3RvcnMgaW50byBhIGNhY2hlIGVudHJ5LCByZXR1cm5zCiAgKiBhdmNfbm9kZSBpbnNlcnRlZC4gT3RoZXJ3aXNlLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgTlVMTC4KICAqLwotc3RhdGljIHN0cnVjdCBhdmNfbm9kZSAqYXZjX2luc2VydCh1MzIgc3NpZCwgdTMyIHRzaWQsIHUxNiB0Y2xhc3MsIHN0cnVjdCBhdmNfZW50cnkgKmFlKQorc3RhdGljIHN0cnVjdCBhdmNfbm9kZSAqYXZjX2luc2VydCh1MzIgc3NpZCwgdTMyIHRzaWQsIHUxNiB0Y2xhc3MsIHN0cnVjdCBhdl9kZWNpc2lvbiAqYXZkKQogewogCXN0cnVjdCBhdmNfbm9kZSAqcG9zLCAqbm9kZSA9IE5VTEw7CiAJaW50IGh2YWx1ZTsKIAl1bnNpZ25lZCBsb25nIGZsYWc7CiAKLQlpZiAoYXZjX2xhdGVzdF9ub3RpZl91cGRhdGUoYWUtPmF2ZC5zZXFubywgMSkpCisJaWYgKGF2Y19sYXRlc3Rfbm90aWZfdXBkYXRlKGF2ZC0+c2Vxbm8sIDEpKQogCQlnb3RvIG91dDsKIAogCW5vZGUgPSBhdmNfYWxsb2Nfbm9kZSgpOwogCWlmIChub2RlKSB7Ci0JCWh2YWx1ZSA9IGF2Y19oYXNoKHNzaWQsIHRzaWQsIHRjbGFzcyk7Ci0JCWF2Y19ub2RlX3BvcHVsYXRlKG5vZGUsIHNzaWQsIHRzaWQsIHRjbGFzcywgYWUpOworCQlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsKKwkJc3RydWN0IGhsaXN0X25vZGUgKm5leHQ7CisJCXNwaW5sb2NrX3QgKmxvY2s7CiAKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmF2Y19jYWNoZS5zbG90c19sb2NrW2h2YWx1ZV0sIGZsYWcpOwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgJmF2Y19jYWNoZS5zbG90c1todmFsdWVdLCBsaXN0KSB7CisJCWh2YWx1ZSA9IGF2Y19oYXNoKHNzaWQsIHRzaWQsIHRjbGFzcyk7CisJCWF2Y19ub2RlX3BvcHVsYXRlKG5vZGUsIHNzaWQsIHRzaWQsIHRjbGFzcywgYXZkKTsKKworCQloZWFkID0gJmF2Y19jYWNoZS5zbG90c1todmFsdWVdOworCQlsb2NrID0gJmF2Y19jYWNoZS5zbG90c19sb2NrW2h2YWx1ZV07CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUobG9jaywgZmxhZyk7CisJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgbmV4dCwgaGVhZCwgbGlzdCkgewogCQkJaWYgKHBvcy0+YWUuc3NpZCA9PSBzc2lkICYmCiAJCQkgICAgcG9zLT5hZS50c2lkID09IHRzaWQgJiYKIAkJCSAgICBwb3MtPmFlLnRjbGFzcyA9PSB0Y2xhc3MpIHsKQEAgLTQ4NCw5ICs0ODQsOSBAQAogCQkJCWdvdG8gZm91bmQ7CiAJCQl9CiAJCX0KLQkJbGlzdF9hZGRfcmN1KCZub2RlLT5saXN0LCAmYXZjX2NhY2hlLnNsb3RzW2h2YWx1ZV0pOworCQlobGlzdF9hZGRfaGVhZF9yY3UoJm5vZGUtPmxpc3QsIGhlYWQpOwogZm91bmQ6Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmF2Y19jYWNoZS5zbG90c19sb2NrW2h2YWx1ZV0sIGZsYWcpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGxvY2ssIGZsYWcpOwogCX0KIG91dDoKIAlyZXR1cm4gbm9kZTsKQEAgLTc0MiwxNyArNzQyLDIyIEBACiAgKiBAZXZlbnQgOiBVcGRhdGluZyBldmVudAogICogQHBlcm1zIDogUGVybWlzc2lvbiBtYXNrIGJpdHMKICAqIEBzc2lkLEB0c2lkLEB0Y2xhc3MgOiBpZGVudGlmaWVyIG9mIGFuIEFWQyBlbnRyeQorICogQHNlcW5vIDogc2VxdWVuY2UgbnVtYmVyIHdoZW4gZGVjaXNpb24gd2FzIG1hZGUKICAqCiAgKiBpZiBhIHZhbGlkIEFWQyBlbnRyeSBkb2Vzbid0IGV4aXN0LHRoaXMgZnVuY3Rpb24gcmV0dXJucyAtRU5PRU5ULgogICogaWYga21hbGxvYygpIGNhbGxlZCBpbnRlcm5hbCByZXR1cm5zIE5VTEwsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyAtRU5PTUVNLgogICogb3RoZXJ3aXNlLCB0aGlzIGZ1bmN0aW9uIHVwZGF0ZSB0aGUgQVZDIGVudHJ5LiBUaGUgb3JpZ2luYWwgQVZDLWVudHJ5IG9iamVjdAogICogd2lsbCByZWxlYXNlIGxhdGVyIGJ5IFJDVS4KICAqLwotc3RhdGljIGludCBhdmNfdXBkYXRlX25vZGUodTMyIGV2ZW50LCB1MzIgcGVybXMsIHUzMiBzc2lkLCB1MzIgdHNpZCwgdTE2IHRjbGFzcykKK3N0YXRpYyBpbnQgYXZjX3VwZGF0ZV9ub2RlKHUzMiBldmVudCwgdTMyIHBlcm1zLCB1MzIgc3NpZCwgdTMyIHRzaWQsIHUxNiB0Y2xhc3MsCisJCQkgICB1MzIgc2Vxbm8pCiB7CiAJaW50IGh2YWx1ZSwgcmMgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZzsKIAlzdHJ1Y3QgYXZjX25vZGUgKnBvcywgKm5vZGUsICpvcmlnID0gTlVMTDsKKwlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbmV4dDsKKwlzcGlubG9ja190ICpsb2NrOwogCiAJbm9kZSA9IGF2Y19hbGxvY19ub2RlKCk7CiAJaWYgKCFub2RlKSB7CkBAIC03NjIsMTIgKzc2NywxNyBAQAogCiAJLyogTG9jayB0aGUgdGFyZ2V0IHNsb3QgKi8KIAlodmFsdWUgPSBhdmNfaGFzaChzc2lkLCB0c2lkLCB0Y2xhc3MpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZhdmNfY2FjaGUuc2xvdHNfbG9ja1todmFsdWVdLCBmbGFnKTsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCAmYXZjX2NhY2hlLnNsb3RzW2h2YWx1ZV0sIGxpc3QpIHsKKwloZWFkID0gJmF2Y19jYWNoZS5zbG90c1todmFsdWVdOworCWxvY2sgPSAmYXZjX2NhY2hlLnNsb3RzX2xvY2tbaHZhbHVlXTsKKworCXNwaW5fbG9ja19pcnFzYXZlKGxvY2ssIGZsYWcpOworCisJaGxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCBuZXh0LCBoZWFkLCBsaXN0KSB7CiAJCWlmIChzc2lkID09IHBvcy0+YWUuc3NpZCAmJgogCQkgICAgdHNpZCA9PSBwb3MtPmFlLnRzaWQgJiYKLQkJICAgIHRjbGFzcyA9PSBwb3MtPmFlLnRjbGFzcyl7CisJCSAgICB0Y2xhc3MgPT0gcG9zLT5hZS50Y2xhc3MgJiYKKwkJICAgIHNlcW5vID09IHBvcy0+YWUuYXZkLnNlcW5vKXsKIAkJCW9yaWcgPSBwb3M7CiAJCQlicmVhazsKIAkJfQpAQCAtNzgzLDcgKzc5Myw3IEBACiAJICogQ29weSBhbmQgcmVwbGFjZSBvcmlnaW5hbCBub2RlLgogCSAqLwogCi0JYXZjX25vZGVfcG9wdWxhdGUobm9kZSwgc3NpZCwgdHNpZCwgdGNsYXNzLCAmb3JpZy0+YWUpOworCWF2Y19ub2RlX3BvcHVsYXRlKG5vZGUsIHNzaWQsIHRzaWQsIHRjbGFzcywgJm9yaWctPmFlLmF2ZCk7CiAKIAlzd2l0Y2ggKGV2ZW50KSB7CiAJY2FzZSBBVkNfQ0FMTEJBQ0tfR1JBTlQ6CkBAIC04MDgsNyArODE4LDcgQEAKIAl9CiAJYXZjX25vZGVfcmVwbGFjZShub2RlLCBvcmlnKTsKIG91dF91bmxvY2s6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXZjX2NhY2hlLnNsb3RzX2xvY2tbaHZhbHVlXSwgZmxhZyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShsb2NrLCBmbGFnKTsKIG91dDoKIAlyZXR1cm4gcmM7CiB9CkBAIC04MjMsMTggKzgzMywyNCBAQAogCWludCBpLCByYyA9IDAsIHRtcHJjOwogCXVuc2lnbmVkIGxvbmcgZmxhZzsKIAlzdHJ1Y3QgYXZjX25vZGUgKm5vZGU7CisJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7CisJc3RydWN0IGhsaXN0X25vZGUgKm5leHQ7CisJc3BpbmxvY2tfdCAqbG9jazsKIAogCWZvciAoaSA9IDA7IGkgPCBBVkNfQ0FDSEVfU0xPVFM7IGkrKykgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmYXZjX2NhY2hlLnNsb3RzX2xvY2tbaV0sIGZsYWcpOworCQloZWFkID0gJmF2Y19jYWNoZS5zbG90c1tpXTsKKwkJbG9jayA9ICZhdmNfY2FjaGUuc2xvdHNfbG9ja1tpXTsKKworCQlzcGluX2xvY2tfaXJxc2F2ZShsb2NrLCBmbGFnKTsKIAkJLyoKIAkJICogV2l0aCBwcmVlbXB0YWJsZSBSQ1UsIHRoZSBvdXRlciBzcGlubG9jayBkb2VzIG5vdAogCQkgKiBwcmV2ZW50IFJDVSBncmFjZSBwZXJpb2RzIGZyb20gZW5kaW5nLgogCQkgKi8KIAkJcmN1X3JlYWRfbG9jaygpOwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG5vZGUsICZhdmNfY2FjaGUuc2xvdHNbaV0sIGxpc3QpCisJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KG5vZGUsIG5leHQsIGhlYWQsIGxpc3QpCiAJCQlhdmNfbm9kZV9kZWxldGUobm9kZSk7CiAJCXJjdV9yZWFkX3VubG9jaygpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhdmNfY2FjaGUuc2xvdHNfbG9ja1tpXSwgZmxhZyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUobG9jaywgZmxhZyk7CiAJfQogCiAJZm9yIChjID0gYXZjX2NhbGxiYWNrczsgYzsgYyA9IGMtPm5leHQpIHsKQEAgLTg3NSwxMCArODkxLDEwIEBACiBpbnQgYXZjX2hhc19wZXJtX25vYXVkaXQodTMyIHNzaWQsIHUzMiB0c2lkLAogCQkJIHUxNiB0Y2xhc3MsIHUzMiByZXF1ZXN0ZWQsCiAJCQkgdW5zaWduZWQgZmxhZ3MsCi0JCQkgc3RydWN0IGF2X2RlY2lzaW9uICphdmQpCisJCQkgc3RydWN0IGF2X2RlY2lzaW9uICppbl9hdmQpCiB7CiAJc3RydWN0IGF2Y19ub2RlICpub2RlOwotCXN0cnVjdCBhdmNfZW50cnkgZW50cnksICpwX2FlOworCXN0cnVjdCBhdl9kZWNpc2lvbiBhdmRfZW50cnksICphdmQ7CiAJaW50IHJjID0gMDsKIAl1MzIgZGVuaWVkOwogCkBAIC04ODYsMjkgKzkwMiwzNCBAQAogCiAJcmN1X3JlYWRfbG9jaygpOwogCi0Jbm9kZSA9IGF2Y19sb29rdXAoc3NpZCwgdHNpZCwgdGNsYXNzLCByZXF1ZXN0ZWQpOworCW5vZGUgPSBhdmNfbG9va3VwKHNzaWQsIHRzaWQsIHRjbGFzcyk7CiAJaWYgKCFub2RlKSB7CiAJCXJjdV9yZWFkX3VubG9jaygpOwotCQlyYyA9IHNlY3VyaXR5X2NvbXB1dGVfYXYoc3NpZCwgdHNpZCwgdGNsYXNzLCByZXF1ZXN0ZWQsICZlbnRyeS5hdmQpOworCisJCWlmIChpbl9hdmQpCisJCQlhdmQgPSBpbl9hdmQ7CisJCWVsc2UKKwkJCWF2ZCA9ICZhdmRfZW50cnk7CisKKwkJcmMgPSBzZWN1cml0eV9jb21wdXRlX2F2KHNzaWQsIHRzaWQsIHRjbGFzcywgcmVxdWVzdGVkLCBhdmQpOwogCQlpZiAocmMpCiAJCQlnb3RvIG91dDsKIAkJcmN1X3JlYWRfbG9jaygpOwotCQlub2RlID0gYXZjX2luc2VydChzc2lkLCB0c2lkLCB0Y2xhc3MsICZlbnRyeSk7CisJCW5vZGUgPSBhdmNfaW5zZXJ0KHNzaWQsIHRzaWQsIHRjbGFzcywgYXZkKTsKKwl9IGVsc2UgeworCQlpZiAoaW5fYXZkKQorCQkJbWVtY3B5KGluX2F2ZCwgJm5vZGUtPmFlLmF2ZCwgc2l6ZW9mKCppbl9hdmQpKTsKKwkJYXZkID0gJm5vZGUtPmFlLmF2ZDsKIAl9CiAKLQlwX2FlID0gbm9kZSA/ICZub2RlLT5hZSA6ICZlbnRyeTsKLQotCWlmIChhdmQpCi0JCW1lbWNweShhdmQsICZwX2FlLT5hdmQsIHNpemVvZigqYXZkKSk7Ci0KLQlkZW5pZWQgPSByZXF1ZXN0ZWQgJiB+KHBfYWUtPmF2ZC5hbGxvd2VkKTsKKwlkZW5pZWQgPSByZXF1ZXN0ZWQgJiB+KGF2ZC0+YWxsb3dlZCk7CiAKIAlpZiAoZGVuaWVkKSB7CiAJCWlmIChmbGFncyAmIEFWQ19TVFJJQ1QpCiAJCQlyYyA9IC1FQUNDRVM7CiAJCWVsc2UgaWYgKCFzZWxpbnV4X2VuZm9yY2luZyB8fCBzZWN1cml0eV9wZXJtaXNzaXZlX3NpZChzc2lkKSkKIAkJCWF2Y191cGRhdGVfbm9kZShBVkNfQ0FMTEJBQ0tfR1JBTlQsIHJlcXVlc3RlZCwgc3NpZCwKLQkJCQkJdHNpZCwgdGNsYXNzKTsKKwkJCQkJdHNpZCwgdGNsYXNzLCBhdmQtPnNlcW5vKTsKIAkJZWxzZQogCQkJcmMgPSAtRUFDQ0VTOwogCX0KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYwppbmRleCAwMDgxNTk3Li43YzUyYmEyIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCkBAIC04OSw3ICs4OSw3IEBACiAjZGVmaW5lIFhBVFRSX1NFTElOVVhfU1VGRklYICJzZWxpbnV4IgogI2RlZmluZSBYQVRUUl9OQU1FX1NFTElOVVggWEFUVFJfU0VDVVJJVFlfUFJFRklYIFhBVFRSX1NFTElOVVhfU1VGRklYCiAKLSNkZWZpbmUgTlVNX1NFTF9NTlRfT1BUUyA0CisjZGVmaW5lIE5VTV9TRUxfTU5UX09QVFMgNQogCiBleHRlcm4gdW5zaWduZWQgaW50IHBvbGljeWRiX2xvYWRlZF92ZXJzaW9uOwogZXh0ZXJuIGludCBzZWxpbnV4X25sbXNnX2xvb2t1cCh1MTYgc2NsYXNzLCB1MTYgbmxtc2dfdHlwZSwgdTMyICpwZXJtKTsKQEAgLTM1Myw2ICszNTMsNyBAQAogCU9wdF9mc2NvbnRleHQgPSAyLAogCU9wdF9kZWZjb250ZXh0ID0gMywKIAlPcHRfcm9vdGNvbnRleHQgPSA0LAorCU9wdF9sYWJlbHN1cHBvcnQgPSA1LAogfTsKIAogc3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3QgdG9rZW5zID0gewpAQCAtMzYwLDYgKzM2MSw3IEBACiAJe09wdF9mc2NvbnRleHQsIEZTQ09OVEVYVF9TVFIgIiVzIn0sCiAJe09wdF9kZWZjb250ZXh0LCBERUZDT05URVhUX1NUUiAiJXMifSwKIAl7T3B0X3Jvb3Rjb250ZXh0LCBST09UQ09OVEVYVF9TVFIgIiVzIn0sCisJe09wdF9sYWJlbHN1cHBvcnQsIExBQkVMU1VQUF9TVFJ9LAogCXtPcHRfZXJyb3IsIE5VTEx9LAogfTsKIApAQCAtNDMxLDcgKzQzMyw3IEBACiAJCX0KIAl9CiAKLQlzYnNlYy0+aW5pdGlhbGl6ZWQgPSAxOworCXNic2VjLT5mbGFncyB8PSAoU0VfU0JJTklUSUFMSVpFRCB8IFNFX1NCTEFCRUxTVVBQKTsKIAogCWlmIChzYnNlYy0+YmVoYXZpb3IgPiBBUlJBWV9TSVpFKGxhYmVsaW5nX2JlaGF2aW9ycykpCiAJCXByaW50ayhLRVJOX0VSUiAiU0VMaW51eDogaW5pdGlhbGl6ZWQgKGRldiAlcywgdHlwZSAlcyksIHVua25vd24gYmVoYXZpb3JcbiIsCkBAIC00NDEsNiArNDQzLDEyIEBACiAJCSAgICAgICBzYi0+c19pZCwgc2ItPnNfdHlwZS0+bmFtZSwKIAkJICAgICAgIGxhYmVsaW5nX2JlaGF2aW9yc1tzYnNlYy0+YmVoYXZpb3ItMV0pOwogCisJaWYgKHNic2VjLT5iZWhhdmlvciA9PSBTRUNVUklUWV9GU19VU0VfR0VORlMgfHwKKwkgICAgc2JzZWMtPmJlaGF2aW9yID09IFNFQ1VSSVRZX0ZTX1VTRV9NTlRQT0lOVCB8fAorCSAgICBzYnNlYy0+YmVoYXZpb3IgPT0gU0VDVVJJVFlfRlNfVVNFX05PTkUgfHwKKwkgICAgc2JzZWMtPmJlaGF2aW9yID4gQVJSQVlfU0laRShsYWJlbGluZ19iZWhhdmlvcnMpKQorCQlzYnNlYy0+ZmxhZ3MgJj0gflNFX1NCTEFCRUxTVVBQOworCiAJLyogSW5pdGlhbGl6ZSB0aGUgcm9vdCBpbm9kZS4gKi8KIAlyYyA9IGlub2RlX2RvaW5pdF93aXRoX2RlbnRyeShyb290X2lub2RlLCByb290KTsKIApAQCAtNDg3LDIzICs0OTUsMjIgQEAKIAogCXNlY3VyaXR5X2luaXRfbW50X29wdHMob3B0cyk7CiAKLQlpZiAoIXNic2VjLT5pbml0aWFsaXplZCkKKwlpZiAoIShzYnNlYy0+ZmxhZ3MgJiBTRV9TQklOSVRJQUxJWkVEKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoIXNzX2luaXRpYWxpemVkKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCS8qCi0JICogaWYgd2UgZXZlciB1c2Ugc2JzZWMgZmxhZ3MgZm9yIGFueXRoaW5nIG90aGVyIHRoYW4gdHJhY2tpbmcgbW91bnQKLQkgKiBzZXR0aW5ncyB0aGlzIGlzIGdvaW5nIHRvIG5lZWQgYSBtYXNrCi0JICovCi0JdG1wID0gc2JzZWMtPmZsYWdzOworCXRtcCA9IHNic2VjLT5mbGFncyAmIFNFX01OVE1BU0s7CiAJLyogY291bnQgdGhlIG51bWJlciBvZiBtb3VudCBvcHRpb25zIGZvciB0aGlzIHNiICovCiAJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgewogCQlpZiAodG1wICYgMHgwMSkKIAkJCW9wdHMtPm51bV9tbnRfb3B0cysrOwogCQl0bXAgPj49IDE7CiAJfQorCS8qIENoZWNrIGlmIHRoZSBMYWJlbCBzdXBwb3J0IGZsYWcgaXMgc2V0ICovCisJaWYgKHNic2VjLT5mbGFncyAmIFNFX1NCTEFCRUxTVVBQKQorCQlvcHRzLT5udW1fbW50X29wdHMrKzsKIAogCW9wdHMtPm1udF9vcHRzID0ga2NhbGxvYyhvcHRzLT5udW1fbW50X29wdHMsIHNpemVvZihjaGFyICopLCBHRlBfQVRPTUlDKTsKIAlpZiAoIW9wdHMtPm1udF9vcHRzKSB7CkBAIC01NDksNiArNTU2LDEwIEBACiAJCW9wdHMtPm1udF9vcHRzW2ldID0gY29udGV4dDsKIAkJb3B0cy0+bW50X29wdHNfZmxhZ3NbaSsrXSA9IFJPT1RDT05URVhUX01OVDsKIAl9CisJaWYgKHNic2VjLT5mbGFncyAmIFNFX1NCTEFCRUxTVVBQKSB7CisJCW9wdHMtPm1udF9vcHRzW2ldID0gTlVMTDsKKwkJb3B0cy0+bW50X29wdHNfZmxhZ3NbaSsrXSA9IFNFX1NCTEFCRUxTVVBQOworCX0KIAogCUJVR19PTihpICE9IG9wdHMtPm51bV9tbnRfb3B0cyk7CiAKQEAgLTU2Miw4ICs1NzMsMTAgQEAKIHN0YXRpYyBpbnQgYmFkX29wdGlvbihzdHJ1Y3Qgc3VwZXJibG9ja19zZWN1cml0eV9zdHJ1Y3QgKnNic2VjLCBjaGFyIGZsYWcsCiAJCSAgICAgIHUzMiBvbGRfc2lkLCB1MzIgbmV3X3NpZCkKIHsKKwljaGFyIG1udF9mbGFncyA9IHNic2VjLT5mbGFncyAmIFNFX01OVE1BU0s7CisKIAkvKiBjaGVjayBpZiB0aGUgb2xkIG1vdW50IGNvbW1hbmQgaGFkIHRoZSBzYW1lIG9wdGlvbnMgKi8KLQlpZiAoc2JzZWMtPmluaXRpYWxpemVkKQorCWlmIChzYnNlYy0+ZmxhZ3MgJiBTRV9TQklOSVRJQUxJWkVEKQogCQlpZiAoIShzYnNlYy0+ZmxhZ3MgJiBmbGFnKSB8fAogCQkgICAgKG9sZF9zaWQgIT0gbmV3X3NpZCkpCiAJCQlyZXR1cm4gMTsKQEAgLTU3MSw4ICs1ODQsOCBAQAogCS8qIGNoZWNrIGlmIHdlIHdlcmUgcGFzc2VkIHRoZSBzYW1lIG9wdGlvbnMgdHdpY2UsCiAJICogYWthIHNvbWVvbmUgcGFzc2VkIGNvbnRleHQ9YSxjb250ZXh0PWIKIAkgKi8KLQlpZiAoIXNic2VjLT5pbml0aWFsaXplZCkKLQkJaWYgKHNic2VjLT5mbGFncyAmIGZsYWcpCisJaWYgKCEoc2JzZWMtPmZsYWdzICYgU0VfU0JJTklUSUFMSVpFRCkpCisJCWlmIChtbnRfZmxhZ3MgJiBmbGFnKQogCQkJcmV0dXJuIDE7CiAJcmV0dXJuIDA7CiB9CkBAIC02MjYsNyArNjM5LDcgQEAKIAkgKiB0aGlzIHNiIGRvZXMgbm90IHNldCBhbnkgc2VjdXJpdHkgb3B0aW9ucy4gIChUaGUgZmlyc3Qgb3B0aW9ucwogCSAqIHdpbGwgYmUgdXNlZCBmb3IgYm90aCBtb3VudHMpCiAJICovCi0JaWYgKHNic2VjLT5pbml0aWFsaXplZCAmJiAoc2ItPnNfdHlwZS0+ZnNfZmxhZ3MgJiBGU19CSU5BUllfTU9VTlREQVRBKQorCWlmICgoc2JzZWMtPmZsYWdzICYgU0VfU0JJTklUSUFMSVpFRCkgJiYgKHNiLT5zX3R5cGUtPmZzX2ZsYWdzICYgRlNfQklOQVJZX01PVU5UREFUQSkKIAkgICAgJiYgKG51bV9vcHRzID09IDApKQogCQlnb3RvIG91dDsKIApAQCAtNjM3LDYgKzY1MCw5IEBACiAJICovCiAJZm9yIChpID0gMDsgaSA8IG51bV9vcHRzOyBpKyspIHsKIAkJdTMyIHNpZDsKKworCQlpZiAoZmxhZ3NbaV0gPT0gU0VfU0JMQUJFTFNVUFApCisJCQljb250aW51ZTsKIAkJcmMgPSBzZWN1cml0eV9jb250ZXh0X3RvX3NpZChtb3VudF9vcHRpb25zW2ldLAogCQkJCQkgICAgIHN0cmxlbihtb3VudF9vcHRpb25zW2ldKSwgJnNpZCk7CiAJCWlmIChyYykgewpAQCAtNjkwLDE5ICs3MDYsMTkgQEAKIAkJfQogCX0KIAotCWlmIChzYnNlYy0+aW5pdGlhbGl6ZWQpIHsKKwlpZiAoc2JzZWMtPmZsYWdzICYgU0VfU0JJTklUSUFMSVpFRCkgewogCQkvKiBwcmV2aW91c2x5IG1vdW50ZWQgd2l0aCBvcHRpb25zLCBidXQgbm90IG9uIHRoaXMgYXR0ZW1wdD8gKi8KLQkJaWYgKHNic2VjLT5mbGFncyAmJiAhbnVtX29wdHMpCisJCWlmICgoc2JzZWMtPmZsYWdzICYgU0VfTU5UTUFTSykgJiYgIW51bV9vcHRzKQogCQkJZ290byBvdXRfZG91YmxlX21vdW50OwogCQlyYyA9IDA7CiAJCWdvdG8gb3V0OwogCX0KIAogCWlmIChzdHJjbXAoc2ItPnNfdHlwZS0+bmFtZSwgInByb2MiKSA9PSAwKQotCQlzYnNlYy0+cHJvYyA9IDE7CisJCXNic2VjLT5mbGFncyB8PSBTRV9TQlBST0M7CiAKIAkvKiBEZXRlcm1pbmUgdGhlIGxhYmVsaW5nIGJlaGF2aW9yIHRvIHVzZSBmb3IgdGhpcyBmaWxlc3lzdGVtIHR5cGUuICovCi0JcmMgPSBzZWN1cml0eV9mc191c2Uoc2JzZWMtPnByb2MgPyAicHJvYyIgOiBzYi0+c190eXBlLT5uYW1lLCAmc2JzZWMtPmJlaGF2aW9yLCAmc2JzZWMtPnNpZCk7CisJcmMgPSBzZWN1cml0eV9mc191c2UoKHNic2VjLT5mbGFncyAmIFNFX1NCUFJPQykgPyAicHJvYyIgOiBzYi0+c190eXBlLT5uYW1lLCAmc2JzZWMtPmJlaGF2aW9yLCAmc2JzZWMtPnNpZCk7CiAJaWYgKHJjKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBzZWN1cml0eV9mc191c2UoJXMpIHJldHVybmVkICVkXG4iLAogCQkgICAgICAgX19mdW5jX18sIHNiLT5zX3R5cGUtPm5hbWUsIHJjKTsKQEAgLTgwNiwxMCArODIyLDEwIEBACiAJfQogCiAJLyogaG93IGNhbiB3ZSBjbG9uZSBpZiB0aGUgb2xkIG9uZSB3YXNuJ3Qgc2V0IHVwPz8gKi8KLQlCVUdfT04oIW9sZHNic2VjLT5pbml0aWFsaXplZCk7CisJQlVHX09OKCEob2xkc2JzZWMtPmZsYWdzICYgU0VfU0JJTklUSUFMSVpFRCkpOwogCiAJLyogaWYgZnMgaXMgcmV1c2luZyBhIHNiLCBqdXN0IGxldCBpdHMgb3B0aW9ucyBzdGFuZC4uLiAqLwotCWlmIChuZXdzYnNlYy0+aW5pdGlhbGl6ZWQpCisJaWYgKG5ld3Nic2VjLT5mbGFncyAmIFNFX1NCSU5JVElBTElaRUQpCiAJCXJldHVybjsKIAogCW11dGV4X2xvY2soJm5ld3Nic2VjLT5sb2NrKTsKQEAgLTkxNyw3ICs5MzMsOCBAQAogCQkJCWdvdG8gb3V0X2VycjsKIAkJCX0KIAkJCWJyZWFrOwotCisJCWNhc2UgT3B0X2xhYmVsc3VwcG9ydDoKKwkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJcmMgPSAtRUlOVkFMOwogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiU0VMaW51eDogIHVua25vd24gbW91bnQgb3B0aW9uXG4iKTsKQEAgLTk5OSw3ICsxMDE2LDEyIEBACiAJY2hhciAqcHJlZml4OwogCiAJZm9yIChpID0gMDsgaSA8IG9wdHMtPm51bV9tbnRfb3B0czsgaSsrKSB7Ci0JCWNoYXIgKmhhc19jb21tYSA9IHN0cmNocihvcHRzLT5tbnRfb3B0c1tpXSwgJywnKTsKKwkJY2hhciAqaGFzX2NvbW1hOworCisJCWlmIChvcHRzLT5tbnRfb3B0c1tpXSkKKwkJCWhhc19jb21tYSA9IHN0cmNocihvcHRzLT5tbnRfb3B0c1tpXSwgJywnKTsKKwkJZWxzZQorCQkJaGFzX2NvbW1hID0gTlVMTDsKIAogCQlzd2l0Y2ggKG9wdHMtPm1udF9vcHRzX2ZsYWdzW2ldKSB7CiAJCWNhc2UgQ09OVEVYVF9NTlQ6CkBAIC0xMDE0LDYgKzEwMzYsMTAgQEAKIAkJY2FzZSBERUZDT05URVhUX01OVDoKIAkJCXByZWZpeCA9IERFRkNPTlRFWFRfU1RSOwogCQkJYnJlYWs7CisJCWNhc2UgU0VfU0JMQUJFTFNVUFA6CisJCQlzZXFfcHV0YyhtLCAnLCcpOworCQkJc2VxX3B1dHMobSwgTEFCRUxTVVBQX1NUUik7CisJCQljb250aW51ZTsKIAkJZGVmYXVsdDoKIAkJCUJVRygpOwogCQl9OwpAQCAtMTIwOSw3ICsxMjM1LDcgQEAKIAkJZ290byBvdXRfdW5sb2NrOwogCiAJc2JzZWMgPSBpbm9kZS0+aV9zYi0+c19zZWN1cml0eTsKLQlpZiAoIXNic2VjLT5pbml0aWFsaXplZCkgeworCWlmICghKHNic2VjLT5mbGFncyAmIFNFX1NCSU5JVElBTElaRUQpKSB7CiAJCS8qIERlZmVyIGluaXRpYWxpemF0aW9uIHVudGlsIHNlbGludXhfY29tcGxldGVfaW5pdCwKIAkJICAgYWZ0ZXIgdGhlIGluaXRpYWwgcG9saWN5IGlzIGxvYWRlZCBhbmQgdGhlIHNlY3VyaXR5CiAJCSAgIHNlcnZlciBpcyByZWFkeSB0byBoYW5kbGUgY2FsbHMuICovCkBAIC0xMjM3LDE5ICsxMjYzLDI2IEBACiAJCQlkZW50cnkgPSBkX2ZpbmRfYWxpYXMoaW5vZGUpOwogCQl9CiAJCWlmICghZGVudHJ5KSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJTRUxpbnV4OiAlczogIG5vIGRlbnRyeSBmb3IgZGV2PSVzICIKLQkJCSAgICAgICAiaW5vPSVsZFxuIiwgX19mdW5jX18sIGlub2RlLT5pX3NiLT5zX2lkLAotCQkJICAgICAgIGlub2RlLT5pX2lubyk7CisJCQkvKgorCQkJICogdGhpcyBpcyBjYW4gYmUgaGl0IG9uIGJvb3Qgd2hlbiBhIGZpbGUgaXMgYWNjZXNzZWQKKwkJCSAqIGJlZm9yZSB0aGUgcG9saWN5IGlzIGxvYWRlZC4gIFdoZW4gd2UgbG9hZCBwb2xpY3kgd2UKKwkJCSAqIG1heSBmaW5kIGlub2RlcyB0aGF0IGhhdmUgbm8gZGVudHJ5IG9uIHRoZQorCQkJICogc2JzZWMtPmlzZWNfaGVhZCBsaXN0LiAgTm8gcmVhc29uIHRvIGNvbXBsYWluIGFzIHRoZXNlCisJCQkgKiB3aWxsIGdldCBmaXhlZCB1cCB0aGUgbmV4dCB0aW1lIHdlIGdvIHRocm91Z2gKKwkJCSAqIGlub2RlX2RvaW5pdCB3aXRoIGEgZGVudHJ5LCBiZWZvcmUgdGhlc2UgaW5vZGVzIGNvdWxkCisJCQkgKiBiZSB1c2VkIGFnYWluIGJ5IHVzZXJzcGFjZS4KKwkJCSAqLwogCQkJZ290byBvdXRfdW5sb2NrOwogCQl9CiAKIAkJbGVuID0gSU5JVENPTlRFWFRMRU47Ci0JCWNvbnRleHQgPSBrbWFsbG9jKGxlbiwgR0ZQX05PRlMpOworCQljb250ZXh0ID0ga21hbGxvYyhsZW4rMSwgR0ZQX05PRlMpOwogCQlpZiAoIWNvbnRleHQpIHsKIAkJCXJjID0gLUVOT01FTTsKIAkJCWRwdXQoZGVudHJ5KTsKIAkJCWdvdG8gb3V0X3VubG9jazsKIAkJfQorCQljb250ZXh0W2xlbl0gPSAnXDAnOwogCQlyYyA9IGlub2RlLT5pX29wLT5nZXR4YXR0cihkZW50cnksIFhBVFRSX05BTUVfU0VMSU5VWCwKIAkJCQkJICAgY29udGV4dCwgbGVuKTsKIAkJaWYgKHJjID09IC1FUkFOR0UpIHsKQEAgLTEyNjIsMTIgKzEyOTUsMTMgQEAKIAkJCX0KIAkJCWtmcmVlKGNvbnRleHQpOwogCQkJbGVuID0gcmM7Ci0JCQljb250ZXh0ID0ga21hbGxvYyhsZW4sIEdGUF9OT0ZTKTsKKwkJCWNvbnRleHQgPSBrbWFsbG9jKGxlbisxLCBHRlBfTk9GUyk7CiAJCQlpZiAoIWNvbnRleHQpIHsKIAkJCQlyYyA9IC1FTk9NRU07CiAJCQkJZHB1dChkZW50cnkpOwogCQkJCWdvdG8gb3V0X3VubG9jazsKIAkJCX0KKwkJCWNvbnRleHRbbGVuXSA9ICdcMCc7CiAJCQlyYyA9IGlub2RlLT5pX29wLT5nZXR4YXR0cihkZW50cnksCiAJCQkJCQkgICBYQVRUUl9OQU1FX1NFTElOVVgsCiAJCQkJCQkgICBjb250ZXh0LCBsZW4pOwpAQCAtMTI4OSwxMCArMTMyMywxOSBAQAogCQkJCQkJCSAgICAgc2JzZWMtPmRlZl9zaWQsCiAJCQkJCQkJICAgICBHRlBfTk9GUyk7CiAJCQlpZiAocmMpIHsKLQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJTRUxpbnV4OiAlczogIGNvbnRleHRfdG9fc2lkKCVzKSAiCi0JCQkJICAgICAgICJyZXR1cm5lZCAlZCBmb3IgZGV2PSVzIGlubz0lbGRcbiIsCi0JCQkJICAgICAgIF9fZnVuY19fLCBjb250ZXh0LCAtcmMsCi0JCQkJICAgICAgIGlub2RlLT5pX3NiLT5zX2lkLCBpbm9kZS0+aV9pbm8pOworCQkJCWNoYXIgKmRldiA9IGlub2RlLT5pX3NiLT5zX2lkOworCQkJCXVuc2lnbmVkIGxvbmcgaW5vID0gaW5vZGUtPmlfaW5vOworCisJCQkJaWYgKHJjID09IC1FSU5WQUwpIHsKKwkJCQkJaWYgKHByaW50a19yYXRlbGltaXQoKSkKKwkJCQkJCXByaW50ayhLRVJOX05PVElDRSAiU0VMaW51eDogaW5vZGU9JWx1IG9uIGRldj0lcyB3YXMgZm91bmQgdG8gaGF2ZSBhbiBpbnZhbGlkICIKKwkJCQkJCQkiY29udGV4dD0lcy4gIFRoaXMgaW5kaWNhdGVzIHlvdSBtYXkgbmVlZCB0byByZWxhYmVsIHRoZSBpbm9kZSBvciB0aGUgIgorCQkJCQkJCSJmaWxlc3lzdGVtIGluIHF1ZXN0aW9uLlxuIiwgaW5vLCBkZXYsIGNvbnRleHQpOworCQkJCX0gZWxzZSB7CisJCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIlNFTGludXg6ICVzOiAgY29udGV4dF90b19zaWQoJXMpICIKKwkJCQkJICAgICAgICJyZXR1cm5lZCAlZCBmb3IgZGV2PSVzIGlubz0lbGRcbiIsCisJCQkJCSAgICAgICBfX2Z1bmNfXywgY29udGV4dCwgLXJjLCBkZXYsIGlubyk7CisJCQkJfQogCQkJCWtmcmVlKGNvbnRleHQpOwogCQkJCS8qIExlYXZlIHdpdGggdGhlIHVubGFiZWxlZCBTSUQgKi8KIAkJCQlyYyA9IDA7CkBAIC0xMzI2LDcgKzEzNjksNyBAQAogCQkvKiBEZWZhdWx0IHRvIHRoZSBmcyBzdXBlcmJsb2NrIFNJRC4gKi8KIAkJaXNlYy0+c2lkID0gc2JzZWMtPnNpZDsKIAotCQlpZiAoc2JzZWMtPnByb2MgJiYgIVNfSVNMTksoaW5vZGUtPmlfbW9kZSkpIHsKKwkJaWYgKChzYnNlYy0+ZmxhZ3MgJiBTRV9TQlBST0MpICYmICFTX0lTTE5LKGlub2RlLT5pX21vZGUpKSB7CiAJCQlzdHJ1Y3QgcHJvY19pbm9kZSAqcHJvY2kgPSBQUk9DX0koaW5vZGUpOwogCQkJaWYgKHByb2NpLT5wZGUpIHsKIAkJCQlpc2VjLT5zY2xhc3MgPSBpbm9kZV9tb2RlX3RvX3NlY3VyaXR5X2NsYXNzKGlub2RlLT5pX21vZGUpOwpAQCAtMTU4Nyw3ICsxNjMwLDcgQEAKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIAotCWlmICghbmV3c2lkIHx8IHNic2VjLT5iZWhhdmlvciA9PSBTRUNVUklUWV9GU19VU0VfTU5UUE9JTlQpIHsKKwlpZiAoIW5ld3NpZCB8fCAhKHNic2VjLT5mbGFncyAmIFNFX1NCTEFCRUxTVVBQKSkgewogCQlyYyA9IHNlY3VyaXR5X3RyYW5zaXRpb25fc2lkKHNpZCwgZHNlYy0+c2lkLCB0Y2xhc3MsICZuZXdzaWQpOwogCQlpZiAocmMpCiAJCQlyZXR1cm4gcmM7CkBAIC0xODAxLDYgKzE4NDQsOCBAQAogCQkJYXYgfD0gRklGT19GSUxFX19PUEVOOwogCQllbHNlIGlmIChTX0lTRElSKG1vZGUpKQogCQkJYXYgfD0gRElSX19PUEVOOworCQllbHNlIGlmIChTX0lTU09DSyhtb2RlKSkKKwkJCWF2IHw9IFNPQ0tfRklMRV9fT1BFTjsKIAkJZWxzZQogCQkJcHJpbnRrKEtFUk5fRVJSICJTRUxpbnV4OiBXQVJOSU5HOiBpbnNpZGUgJXMgd2l0aCAiCiAJCQkJInVua25vd24gbW9kZTolb1xuIiwgX19mdW5jX18sIG1vZGUpOwpAQCAtMTgxNSw3ICsxODYwLDcgQEAKIHsKIAlpbnQgcmM7CiAKLQlyYyA9IHNlY29uZGFyeV9vcHMtPnB0cmFjZV9tYXlfYWNjZXNzKGNoaWxkLCBtb2RlKTsKKwlyYyA9IGNhcF9wdHJhY2VfbWF5X2FjY2VzcyhjaGlsZCwgbW9kZSk7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKQEAgLTE4MzIsNyArMTg3Nyw3IEBACiB7CiAJaW50IHJjOwogCi0JcmMgPSBzZWNvbmRhcnlfb3BzLT5wdHJhY2VfdHJhY2VtZShwYXJlbnQpOworCXJjID0gY2FwX3B0cmFjZV90cmFjZW1lKHBhcmVudCk7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKQEAgLTE4NDgsNyArMTg5Myw3IEBACiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAKLQlyZXR1cm4gc2Vjb25kYXJ5X29wcy0+Y2FwZ2V0KHRhcmdldCwgZWZmZWN0aXZlLCBpbmhlcml0YWJsZSwgcGVybWl0dGVkKTsKKwlyZXR1cm4gY2FwX2NhcGdldCh0YXJnZXQsIGVmZmVjdGl2ZSwgaW5oZXJpdGFibGUsIHBlcm1pdHRlZCk7CiB9CiAKIHN0YXRpYyBpbnQgc2VsaW51eF9jYXBzZXQoc3RydWN0IGNyZWQgKm5ldywgY29uc3Qgc3RydWN0IGNyZWQgKm9sZCwKQEAgLTE4NTgsNyArMTkwMyw3IEBACiB7CiAJaW50IGVycm9yOwogCi0JZXJyb3IgPSBzZWNvbmRhcnlfb3BzLT5jYXBzZXQobmV3LCBvbGQsCisJZXJyb3IgPSBjYXBfY2Fwc2V0KG5ldywgb2xkLAogCQkJCSAgICAgIGVmZmVjdGl2ZSwgaW5oZXJpdGFibGUsIHBlcm1pdHRlZCk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CkBAIC0xODY2LDEyICsxOTExLDIyIEBACiAJcmV0dXJuIGNyZWRfaGFzX3Blcm0ob2xkLCBuZXcsIFBST0NFU1NfX1NFVENBUCk7CiB9CiAKKy8qCisgKiAoVGhpcyBjb21tZW50IHVzZWQgdG8gbGl2ZSB3aXRoIHRoZSBzZWxpbnV4X3Rhc2tfc2V0dWlkIGhvb2ssCisgKiB3aGljaCB3YXMgcmVtb3ZlZCkuCisgKgorICogU2luY2Ugc2V0dWlkIG9ubHkgYWZmZWN0cyB0aGUgY3VycmVudCBwcm9jZXNzLCBhbmQgc2luY2UgdGhlIFNFTGludXgKKyAqIGNvbnRyb2xzIGFyZSBub3QgYmFzZWQgb24gdGhlIExpbnV4IGlkZW50aXR5IGF0dHJpYnV0ZXMsIFNFTGludXggZG9lcyBub3QKKyAqIG5lZWQgdG8gY29udHJvbCB0aGlzIG9wZXJhdGlvbi4gIEhvd2V2ZXIsIFNFTGludXggZG9lcyBjb250cm9sIHRoZSB1c2Ugb2YKKyAqIHRoZSBDQVBfU0VUVUlEIGFuZCBDQVBfU0VUR0lEIGNhcGFiaWxpdGllcyB1c2luZyB0aGUgY2FwYWJsZSBob29rLgorICovCisKIHN0YXRpYyBpbnQgc2VsaW51eF9jYXBhYmxlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCwKIAkJCSAgIGludCBjYXAsIGludCBhdWRpdCkKIHsKIAlpbnQgcmM7CiAKLQlyYyA9IHNlY29uZGFyeV9vcHMtPmNhcGFibGUodHNrLCBjcmVkLCBjYXAsIGF1ZGl0KTsKKwlyYyA9IGNhcF9jYXBhYmxlKHRzaywgY3JlZCwgY2FwLCBhdWRpdCk7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKQEAgLTE5OTcsNyArMjA1Miw3IEBACiB7CiAJaW50IHJjOwogCi0JcmMgPSBzZWNvbmRhcnlfb3BzLT5zeXNsb2codHlwZSk7CisJcmMgPSBjYXBfc3lzbG9nKHR5cGUpOwogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCkBAIC0yMDI4LDEwICsyMDgzLDYgQEAKICAqIG1hcHBpbmcuIDAgbWVhbnMgdGhlcmUgaXMgZW5vdWdoIG1lbW9yeSBmb3IgdGhlIGFsbG9jYXRpb24gdG8KICAqIHN1Y2NlZWQgYW5kIC1FTk9NRU0gaW1wbGllcyB0aGVyZSBpcyBub3QuCiAgKgotICogTm90ZSB0aGF0IHNlY29uZGFyeV9vcHMtPmNhcGFibGUgYW5kIHRhc2tfaGFzX3Blcm1fbm9hdWRpdCByZXR1cm4gMAotICogaWYgdGhlIGNhcGFiaWxpdHkgaXMgZ3JhbnRlZCwgYnV0IF9fdm1fZW5vdWdoX21lbW9yeSByZXF1aXJlcyAxIGlmCi0gKiB0aGUgY2FwYWJpbGl0eSBpcyBncmFudGVkLgotICoKICAqIERvIG5vdCBhdWRpdCB0aGUgc2VsaW51eCBwZXJtaXNzaW9uIGNoZWNrLCBhcyB0aGlzIGlzIGFwcGxpZWQgdG8gYWxsCiAgKiBwcm9jZXNzZXMgdGhhdCBhbGxvY2F0ZSBtYXBwaW5ncy4KICAqLwpAQCAtMjA1OCw3ICsyMTA5LDcgQEAKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gYnBybS0+ZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAlpbnQgcmM7CiAKLQlyYyA9IHNlY29uZGFyeV9vcHMtPmJwcm1fc2V0X2NyZWRzKGJwcm0pOworCXJjID0gY2FwX2Jwcm1fc2V0X2NyZWRzKGJwcm0pOwogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCkBAIC0yMTU2LDExICsyMjA3LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzZWxpbnV4X2Jwcm1fY2hlY2tfc2VjdXJpdHkoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSkKLXsKLQlyZXR1cm4gc2Vjb25kYXJ5X29wcy0+YnBybV9jaGVja19zZWN1cml0eShicHJtKTsKLX0KLQogc3RhdGljIGludCBzZWxpbnV4X2Jwcm1fc2VjdXJlZXhlYyhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKQogewogCWNvbnN0IHN0cnVjdCBjcmVkICpjcmVkID0gY3VycmVudF9jcmVkKCk7CkBAIC0yMTgwLDcgKzIyMjYsNyBAQAogCQkJCQlQUk9DRVNTX19OT0FUU0VDVVJFLCBOVUxMKTsKIAl9CiAKLQlyZXR1cm4gKGF0c2VjdXJlIHx8IHNlY29uZGFyeV9vcHMtPmJwcm1fc2VjdXJlZXhlYyhicHJtKSk7CisJcmV0dXJuIChhdHNlY3VyZSB8fCBjYXBfYnBybV9zZWN1cmVleGVjKGJwcm0pKTsKIH0KIAogZXh0ZXJuIHN0cnVjdCB2ZnNtb3VudCAqc2VsaW51eGZzX21vdW50OwpAQCAtMjI5MCw4ICsyMzM2LDYgQEAKIAlzdHJ1Y3QgcmxpbWl0ICpybGltLCAqaW5pdHJsaW07CiAJaW50IHJjLCBpOwogCi0Jc2Vjb25kYXJ5X29wcy0+YnBybV9jb21taXR0aW5nX2NyZWRzKGJwcm0pOwotCiAJbmV3X3RzZWMgPSBicHJtLT5jcmVkLT5zZWN1cml0eTsKIAlpZiAobmV3X3RzZWMtPnNpZCA9PSBuZXdfdHNlYy0+b3NpZCkKIAkJcmV0dXJuOwpAQCAtMjMzNyw4ICsyMzgxLDYgQEAKIAlpbnQgcmMsIGk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNlY29uZGFyeV9vcHMtPmJwcm1fY29tbWl0dGVkX2NyZWRzKGJwcm0pOwotCiAJb3NpZCA9IHRzZWMtPm9zaWQ7CiAJc2lkID0gdHNlYy0+c2lkOwogCkBAIC0yNDAwLDcgKzI0NDIsOCBAQAogCXJldHVybiAobWF0Y2hfcHJlZml4KENPTlRFWFRfU1RSLCBzaXplb2YoQ09OVEVYVF9TVFIpLTEsIG9wdGlvbiwgbGVuKSB8fAogCQltYXRjaF9wcmVmaXgoRlNDT05URVhUX1NUUiwgc2l6ZW9mKEZTQ09OVEVYVF9TVFIpLTEsIG9wdGlvbiwgbGVuKSB8fAogCQltYXRjaF9wcmVmaXgoREVGQ09OVEVYVF9TVFIsIHNpemVvZihERUZDT05URVhUX1NUUiktMSwgb3B0aW9uLCBsZW4pIHx8Ci0JCW1hdGNoX3ByZWZpeChST09UQ09OVEVYVF9TVFIsIHNpemVvZihST09UQ09OVEVYVF9TVFIpLTEsIG9wdGlvbiwgbGVuKSk7CisJCW1hdGNoX3ByZWZpeChST09UQ09OVEVYVF9TVFIsIHNpemVvZihST09UQ09OVEVYVF9TVFIpLTEsIG9wdGlvbiwgbGVuKSB8fAorCQltYXRjaF9wcmVmaXgoTEFCRUxTVVBQX1NUUiwgc2l6ZW9mKExBQkVMU1VQUF9TVFIpLTEsIG9wdGlvbiwgbGVuKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB0YWtlX29wdGlvbihjaGFyICoqdG8sIGNoYXIgKmZyb20sIGludCAqZmlyc3QsIGludCBsZW4pCkBAIC0yNTEzLDExICsyNTU2LDYgQEAKIAkJCSB2b2lkICpkYXRhKQogewogCWNvbnN0IHN0cnVjdCBjcmVkICpjcmVkID0gY3VycmVudF9jcmVkKCk7Ci0JaW50IHJjOwotCi0JcmMgPSBzZWNvbmRhcnlfb3BzLT5zYl9tb3VudChkZXZfbmFtZSwgcGF0aCwgdHlwZSwgZmxhZ3MsIGRhdGEpOwotCWlmIChyYykKLQkJcmV0dXJuIHJjOwogCiAJaWYgKGZsYWdzICYgTVNfUkVNT1VOVCkKIAkJcmV0dXJuIHN1cGVyYmxvY2tfaGFzX3Blcm0oY3JlZCwgcGF0aC0+bW50LT5tbnRfc2IsCkBAIC0yNTMwLDExICsyNTY4LDYgQEAKIHN0YXRpYyBpbnQgc2VsaW51eF91bW91bnQoc3RydWN0IHZmc21vdW50ICptbnQsIGludCBmbGFncykKIHsKIAljb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCA9IGN1cnJlbnRfY3JlZCgpOwotCWludCByYzsKLQotCXJjID0gc2Vjb25kYXJ5X29wcy0+c2JfdW1vdW50KG1udCwgZmxhZ3MpOwotCWlmIChyYykKLQkJcmV0dXJuIHJjOwogCiAJcmV0dXJuIHN1cGVyYmxvY2tfaGFzX3Blcm0oY3JlZCwgbW50LT5tbnRfc2IsCiAJCQkJICAgRklMRVNZU1RFTV9fVU5NT1VOVCwgTlVMTCk7CkBAIC0yNTcwLDcgKzI2MDMsNyBAQAogCXNpZCA9IHRzZWMtPnNpZDsKIAluZXdzaWQgPSB0c2VjLT5jcmVhdGVfc2lkOwogCi0JaWYgKCFuZXdzaWQgfHwgc2JzZWMtPmJlaGF2aW9yID09IFNFQ1VSSVRZX0ZTX1VTRV9NTlRQT0lOVCkgeworCWlmICghbmV3c2lkIHx8ICEoc2JzZWMtPmZsYWdzICYgU0VfU0JMQUJFTFNVUFApKSB7CiAJCXJjID0gc2VjdXJpdHlfdHJhbnNpdGlvbl9zaWQoc2lkLCBkc2VjLT5zaWQsCiAJCQkJCSAgICAgaW5vZGVfbW9kZV90b19zZWN1cml0eV9jbGFzcyhpbm9kZS0+aV9tb2RlKSwKIAkJCQkJICAgICAmbmV3c2lkKTsKQEAgLTI1ODUsMTQgKzI2MTgsMTQgQEAKIAl9CiAKIAkvKiBQb3NzaWJseSBkZWZlciBpbml0aWFsaXphdGlvbiB0byBzZWxpbnV4X2NvbXBsZXRlX2luaXQuICovCi0JaWYgKHNic2VjLT5pbml0aWFsaXplZCkgeworCWlmIChzYnNlYy0+ZmxhZ3MgJiBTRV9TQklOSVRJQUxJWkVEKSB7CiAJCXN0cnVjdCBpbm9kZV9zZWN1cml0eV9zdHJ1Y3QgKmlzZWMgPSBpbm9kZS0+aV9zZWN1cml0eTsKIAkJaXNlYy0+c2NsYXNzID0gaW5vZGVfbW9kZV90b19zZWN1cml0eV9jbGFzcyhpbm9kZS0+aV9tb2RlKTsKIAkJaXNlYy0+c2lkID0gbmV3c2lkOwogCQlpc2VjLT5pbml0aWFsaXplZCA9IDE7CiAJfQogCi0JaWYgKCFzc19pbml0aWFsaXplZCB8fCBzYnNlYy0+YmVoYXZpb3IgPT0gU0VDVVJJVFlfRlNfVVNFX01OVFBPSU5UKQorCWlmICghc3NfaW5pdGlhbGl6ZWQgfHwgIShzYnNlYy0+ZmxhZ3MgJiBTRV9TQkxBQkVMU1VQUCkpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAogCWlmIChuYW1lKSB7CkBAIC0yNjIyLDIxICsyNjU1LDExIEBACiAKIHN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KQogewotCWludCByYzsKLQotCXJjID0gc2Vjb25kYXJ5X29wcy0+aW5vZGVfbGluayhvbGRfZGVudHJ5LCBkaXIsIG5ld19kZW50cnkpOwotCWlmIChyYykKLQkJcmV0dXJuIHJjOwogCXJldHVybiBtYXlfbGluayhkaXIsIG9sZF9kZW50cnksIE1BWV9MSU5LKTsKIH0KIAogc3RhdGljIGludCBzZWxpbnV4X2lub2RlX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogewotCWludCByYzsKLQotCXJjID0gc2Vjb25kYXJ5X29wcy0+aW5vZGVfdW5saW5rKGRpciwgZGVudHJ5KTsKLQlpZiAocmMpCi0JCXJldHVybiByYzsKIAlyZXR1cm4gbWF5X2xpbmsoZGlyLCBkZW50cnksIE1BWV9VTkxJTkspOwogfQogCkBAIC0yNjU3LDEyICsyNjgwLDYgQEAKIAogc3RhdGljIGludCBzZWxpbnV4X2lub2RlX21rbm9kKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBtb2RlLCBkZXZfdCBkZXYpCiB7Ci0JaW50IHJjOwotCi0JcmMgPSBzZWNvbmRhcnlfb3BzLT5pbm9kZV9ta25vZChkaXIsIGRlbnRyeSwgbW9kZSwgZGV2KTsKLQlpZiAocmMpCi0JCXJldHVybiByYzsKLQogCXJldHVybiBtYXlfY3JlYXRlKGRpciwgZGVudHJ5LCBpbm9kZV9tb2RlX3RvX3NlY3VyaXR5X2NsYXNzKG1vZGUpKTsKIH0KIApAQCAtMjY4MiwyMiArMjY5OSwxMyBAQAogc3RhdGljIGludCBzZWxpbnV4X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IG5hbWVpZGF0YSAqbmFtZWlkYXRhKQogewogCWNvbnN0IHN0cnVjdCBjcmVkICpjcmVkID0gY3VycmVudF9jcmVkKCk7Ci0JaW50IHJjOwogCi0JcmMgPSBzZWNvbmRhcnlfb3BzLT5pbm9kZV9mb2xsb3dfbGluayhkZW50cnksIG5hbWVpZGF0YSk7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7CiAJcmV0dXJuIGRlbnRyeV9oYXNfcGVybShjcmVkLCBOVUxMLCBkZW50cnksIEZJTEVfX1JFQUQpOwogfQogCiBzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaykKIHsKIAljb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCA9IGN1cnJlbnRfY3JlZCgpOwotCWludCByYzsKLQotCXJjID0gc2Vjb25kYXJ5X29wcy0+aW5vZGVfcGVybWlzc2lvbihpbm9kZSwgbWFzayk7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7CiAKIAlpZiAoIW1hc2spIHsKIAkJLyogTm8gcGVybWlzc2lvbiB0byBjaGVjay4gIEV4aXN0ZW5jZSB0ZXN0LiAqLwpAQCAtMjcxMSwxMSArMjcxOSw2IEBACiBzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfc2V0YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpYXR0ciAqaWF0dHIpCiB7CiAJY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQgPSBjdXJyZW50X2NyZWQoKTsKLQlpbnQgcmM7Ci0KLQlyYyA9IHNlY29uZGFyeV9vcHMtPmlub2RlX3NldGF0dHIoZGVudHJ5LCBpYXR0cik7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7CiAKIAlpZiAoaWF0dHItPmlhX3ZhbGlkICYgQVRUUl9GT1JDRSkKIAkJcmV0dXJuIDA7CkBAIC0yNzY5LDcgKzI3NzIsNyBAQAogCQlyZXR1cm4gc2VsaW51eF9pbm9kZV9zZXRvdGhlcnhhdHRyKGRlbnRyeSwgbmFtZSk7CiAKIAlzYnNlYyA9IGlub2RlLT5pX3NiLT5zX3NlY3VyaXR5OwotCWlmIChzYnNlYy0+YmVoYXZpb3IgPT0gU0VDVVJJVFlfRlNfVVNFX01OVFBPSU5UKQorCWlmICghKHNic2VjLT5mbGFncyAmIFNFX1NCTEFCRUxTVVBQKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJaWYgKCFpc19vd25lcl9vcl9jYXAoaW5vZGUpKQpAQCAtMjkzMSwxNiArMjkzNCw2IEBACiAJcmV0dXJuIGxlbjsKIH0KIAotc3RhdGljIGludCBzZWxpbnV4X2lub2RlX25lZWRfa2lsbHByaXYoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQotewotCXJldHVybiBzZWNvbmRhcnlfb3BzLT5pbm9kZV9uZWVkX2tpbGxwcml2KGRlbnRyeSk7Ci19Ci0KLXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9raWxscHJpdihzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCi17Ci0JcmV0dXJuIHNlY29uZGFyeV9vcHMtPmlub2RlX2tpbGxwcml2KGRlbnRyeSk7Ci19Ci0KIHN0YXRpYyB2b2lkIHNlbGludXhfaW5vZGVfZ2V0c2VjaWQoY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSwgdTMyICpzZWNpZCkKIHsKIAlzdHJ1Y3QgaW5vZGVfc2VjdXJpdHlfc3RydWN0ICppc2VjID0gaW5vZGUtPmlfc2VjdXJpdHk7CkBAIC0zMDc4LDE4ICszMDcxLDEzIEBACiAJCQkJIHVuc2lnbmVkIGxvbmcgcHJvdCkKIHsKIAljb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCA9IGN1cnJlbnRfY3JlZCgpOwotCWludCByYzsKLQotCXJjID0gc2Vjb25kYXJ5X29wcy0+ZmlsZV9tcHJvdGVjdCh2bWEsIHJlcXByb3QsIHByb3QpOwotCWlmIChyYykKLQkJcmV0dXJuIHJjOwogCiAJaWYgKHNlbGludXhfY2hlY2tyZXFwcm90KQogCQlwcm90ID0gcmVxcHJvdDsKIAogI2lmbmRlZiBDT05GSUdfUFBDMzIKIAlpZiAoKHByb3QgJiBQUk9UX0VYRUMpICYmICEodm1hLT52bV9mbGFncyAmIFZNX0VYRUMpKSB7Ci0JCXJjID0gMDsKKwkJaW50IHJjID0gMDsKIAkJaWYgKHZtYS0+dm1fc3RhcnQgPj0gdm1hLT52bV9tbS0+c3RhcnRfYnJrICYmCiAJCSAgICB2bWEtPnZtX2VuZCA8PSB2bWEtPnZtX21tLT5icmspIHsKIAkJCXJjID0gY3JlZF9oYXNfcGVybShjcmVkLCBjcmVkLCBQUk9DRVNTX19FWEVDSEVBUCk7CkBAIC0zMjM5LDEyICszMjI3LDYgQEAKIAogc3RhdGljIGludCBzZWxpbnV4X3Rhc2tfY3JlYXRlKHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MpCiB7Ci0JaW50IHJjOwotCi0JcmMgPSBzZWNvbmRhcnlfb3BzLT50YXNrX2NyZWF0ZShjbG9uZV9mbGFncyk7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7Ci0KIAlyZXR1cm4gY3VycmVudF9oYXNfcGVybShjdXJyZW50LCBQUk9DRVNTX19GT1JLKTsKIH0KIApAQCAtMzI3OCwxNCArMzI2MCw2IEBACiB9CiAKIC8qCi0gKiBjb21taXQgbmV3IGNyZWRlbnRpYWxzCi0gKi8KLXN0YXRpYyB2b2lkIHNlbGludXhfY3JlZF9jb21taXQoc3RydWN0IGNyZWQgKm5ldywgY29uc3Qgc3RydWN0IGNyZWQgKm9sZCkKLXsKLQlzZWNvbmRhcnlfb3BzLT5jcmVkX2NvbW1pdChuZXcsIG9sZCk7Ci19Ci0KLS8qCiAgKiBzZXQgdGhlIHNlY3VyaXR5IGRhdGEgZm9yIGEga2VybmVsIHNlcnZpY2UKICAqIC0gYWxsIHRoZSBjcmVhdGlvbiBjb250ZXh0cyBhcmUgc2V0IHRvIHVubGFiZWxsZWQKICAqLwpAQCAtMzMyOSwyOSArMzMwMyw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2VsaW51eF90YXNrX3NldHVpZCh1aWRfdCBpZDAsIHVpZF90IGlkMSwgdWlkX3QgaWQyLCBpbnQgZmxhZ3MpCi17Ci0JLyogU2luY2Ugc2V0dWlkIG9ubHkgYWZmZWN0cyB0aGUgY3VycmVudCBwcm9jZXNzLCBhbmQKLQkgICBzaW5jZSB0aGUgU0VMaW51eCBjb250cm9scyBhcmUgbm90IGJhc2VkIG9uIHRoZSBMaW51eAotCSAgIGlkZW50aXR5IGF0dHJpYnV0ZXMsIFNFTGludXggZG9lcyBub3QgbmVlZCB0byBjb250cm9sCi0JICAgdGhpcyBvcGVyYXRpb24uICBIb3dldmVyLCBTRUxpbnV4IGRvZXMgY29udHJvbCB0aGUgdXNlCi0JICAgb2YgdGhlIENBUF9TRVRVSUQgYW5kIENBUF9TRVRHSUQgY2FwYWJpbGl0aWVzIHVzaW5nIHRoZQotCSAgIGNhcGFibGUgaG9vay4gKi8KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzZWxpbnV4X3Rhc2tfZml4X3NldHVpZChzdHJ1Y3QgY3JlZCAqbmV3LCBjb25zdCBzdHJ1Y3QgY3JlZCAqb2xkLAotCQkJCSAgIGludCBmbGFncykKLXsKLQlyZXR1cm4gc2Vjb25kYXJ5X29wcy0+dGFza19maXhfc2V0dWlkKG5ldywgb2xkLCBmbGFncyk7Ci19Ci0KLXN0YXRpYyBpbnQgc2VsaW51eF90YXNrX3NldGdpZChnaWRfdCBpZDAsIGdpZF90IGlkMSwgZ2lkX3QgaWQyLCBpbnQgZmxhZ3MpCi17Ci0JLyogU2VlIHRoZSBjb21tZW50IGZvciBzZXR1aWQgYWJvdmUuICovCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgc2VsaW51eF90YXNrX3NldHBnaWQoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBwaWRfdCBwZ2lkKQogewogCXJldHVybiBjdXJyZW50X2hhc19wZXJtKHAsIFBST0NFU1NfX1NFVFBHSUQpOwpAQCAtMzM3MiwxNyArMzMyMywxMSBAQAogCSpzZWNpZCA9IHRhc2tfc2lkKHApOwogfQogCi1zdGF0aWMgaW50IHNlbGludXhfdGFza19zZXRncm91cHMoc3RydWN0IGdyb3VwX2luZm8gKmdyb3VwX2luZm8pCi17Ci0JLyogU2VlIHRoZSBjb21tZW50IGZvciBzZXR1aWQgYWJvdmUuICovCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgc2VsaW51eF90YXNrX3NldG5pY2Uoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgbmljZSkKIHsKIAlpbnQgcmM7CiAKLQlyYyA9IHNlY29uZGFyeV9vcHMtPnRhc2tfc2V0bmljZShwLCBuaWNlKTsKKwlyYyA9IGNhcF90YXNrX3NldG5pY2UocCwgbmljZSk7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKQEAgLTMzOTMsNyArMzMzOCw3IEBACiB7CiAJaW50IHJjOwogCi0JcmMgPSBzZWNvbmRhcnlfb3BzLT50YXNrX3NldGlvcHJpbyhwLCBpb3ByaW8pOworCXJjID0gY2FwX3Rhc2tfc2V0aW9wcmlvKHAsIGlvcHJpbyk7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKQEAgLTM0MDgsMTEgKzMzNTMsNiBAQAogc3RhdGljIGludCBzZWxpbnV4X3Rhc2tfc2V0cmxpbWl0KHVuc2lnbmVkIGludCByZXNvdXJjZSwgc3RydWN0IHJsaW1pdCAqbmV3X3JsaW0pCiB7CiAJc3RydWN0IHJsaW1pdCAqb2xkX3JsaW0gPSBjdXJyZW50LT5zaWduYWwtPnJsaW0gKyByZXNvdXJjZTsKLQlpbnQgcmM7Ci0KLQlyYyA9IHNlY29uZGFyeV9vcHMtPnRhc2tfc2V0cmxpbWl0KHJlc291cmNlLCBuZXdfcmxpbSk7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7CiAKIAkvKiBDb250cm9sIHRoZSBhYmlsaXR5IHRvIGNoYW5nZSB0aGUgaGFyZCBsaW1pdCAod2hldGhlcgogCSAgIGxvd2VyaW5nIG9yIHJhaXNpbmcgaXQpLCBzbyB0aGF0IHRoZSBoYXJkIGxpbWl0IGNhbgpAQCAtMzQyOCw3ICszMzY4LDcgQEAKIHsKIAlpbnQgcmM7CiAKLQlyYyA9IHNlY29uZGFyeV9vcHMtPnRhc2tfc2V0c2NoZWR1bGVyKHAsIHBvbGljeSwgbHApOworCXJjID0gY2FwX3Rhc2tfc2V0c2NoZWR1bGVyKHAsIHBvbGljeSwgbHApOwogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCkBAIC0zNDUxLDEwICszMzkxLDYgQEAKIAl1MzIgcGVybTsKIAlpbnQgcmM7CiAKLQlyYyA9IHNlY29uZGFyeV9vcHMtPnRhc2tfa2lsbChwLCBpbmZvLCBzaWcsIHNlY2lkKTsKLQlpZiAocmMpCi0JCXJldHVybiByYzsKLQogCWlmICghc2lnKQogCQlwZXJtID0gUFJPQ0VTU19fU0lHTlVMTDsgLyogbnVsbCBzaWduYWw7IGV4aXN0ZW5jZSB0ZXN0ICovCiAJZWxzZQpAQCAtMzQ2NywxOCArMzQwMyw2IEBACiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgaW50IHNlbGludXhfdGFza19wcmN0bChpbnQgb3B0aW9uLAotCQkJICAgICAgdW5zaWduZWQgbG9uZyBhcmcyLAotCQkJICAgICAgdW5zaWduZWQgbG9uZyBhcmczLAotCQkJICAgICAgdW5zaWduZWQgbG9uZyBhcmc0LAotCQkJICAgICAgdW5zaWduZWQgbG9uZyBhcmc1KQotewotCS8qIFRoZSBjdXJyZW50IHByY3RsIG9wZXJhdGlvbnMgZG8gbm90IGFwcGVhciB0byByZXF1aXJlCi0JICAgYW55IFNFTGludXggY29udHJvbHMgc2luY2UgdGhleSBtZXJlbHkgb2JzZXJ2ZSBvciBtb2RpZnkKLQkgICB0aGUgc3RhdGUgb2YgdGhlIGN1cnJlbnQgcHJvY2Vzcy4gKi8KLQlyZXR1cm4gc2Vjb25kYXJ5X29wcy0+dGFza19wcmN0bChvcHRpb24sIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUpOwotfQotCiBzdGF0aWMgaW50IHNlbGludXhfdGFza193YWl0KHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIHsKIAlyZXR1cm4gdGFza19oYXNfcGVybShwLCBjdXJyZW50LCBQUk9DRVNTX19TSUdDSExEKTsKQEAgLTQwNDcsMTAgKzM5NzEsNiBAQAogCXN0cnVjdCBhdmNfYXVkaXRfZGF0YSBhZDsKIAlpbnQgZXJyOwogCi0JZXJyID0gc2Vjb25kYXJ5X29wcy0+dW5peF9zdHJlYW1fY29ubmVjdChzb2NrLCBvdGhlciwgbmV3c2spOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KIAlpc2VjID0gU09DS19JTk9ERShzb2NrKS0+aV9zZWN1cml0eTsKIAlvdGhlcl9pc2VjID0gU09DS19JTk9ERShvdGhlciktPmlfc2VjdXJpdHk7CiAKQEAgLTQ4NDQsNyArNDc2NCw3IEBACiB7CiAJaW50IGVycjsKIAotCWVyciA9IHNlY29uZGFyeV9vcHMtPm5ldGxpbmtfc2VuZChzaywgc2tiKTsKKwllcnIgPSBjYXBfbmV0bGlua19zZW5kKHNrLCBza2IpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKQEAgLTQ4NTksNyArNDc3OSw3IEBACiAJaW50IGVycjsKIAlzdHJ1Y3QgYXZjX2F1ZGl0X2RhdGEgYWQ7CiAKLQllcnIgPSBzZWNvbmRhcnlfb3BzLT5uZXRsaW5rX3JlY3Yoc2tiLCBjYXBhYmlsaXR5KTsKKwllcnIgPSBjYXBfbmV0bGlua19yZWN2KHNrYiwgY2FwYWJpbGl0eSk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApAQCAtNTE2NywxMSArNTA4Nyw2IEBACiAJCQkgICAgIGNoYXIgX191c2VyICpzaG1hZGRyLCBpbnQgc2htZmxnKQogewogCXUzMiBwZXJtczsKLQlpbnQgcmM7Ci0KLQlyYyA9IHNlY29uZGFyeV9vcHMtPnNobV9zaG1hdChzaHAsIHNobWFkZHIsIHNobWZsZyk7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7CiAKIAlpZiAoc2htZmxnICYgU0hNX1JET05MWSkKIAkJcGVybXMgPSBTSE1fX1JFQUQ7CkBAIC01NTgxLDcgKzU0OTYsNiBAQAogCS5uZXRsaW5rX3JlY3YgPQkJCXNlbGludXhfbmV0bGlua19yZWN2LAogCiAJLmJwcm1fc2V0X2NyZWRzID0JCXNlbGludXhfYnBybV9zZXRfY3JlZHMsCi0JLmJwcm1fY2hlY2tfc2VjdXJpdHkgPQkJc2VsaW51eF9icHJtX2NoZWNrX3NlY3VyaXR5LAogCS5icHJtX2NvbW1pdHRpbmdfY3JlZHMgPQlzZWxpbnV4X2Jwcm1fY29tbWl0dGluZ19jcmVkcywKIAkuYnBybV9jb21taXR0ZWRfY3JlZHMgPQkJc2VsaW51eF9icHJtX2NvbW1pdHRlZF9jcmVkcywKIAkuYnBybV9zZWN1cmVleGVjID0JCXNlbGludXhfYnBybV9zZWN1cmVleGVjLApAQCAtNTYyMyw4ICs1NTM3LDYgQEAKIAkuaW5vZGVfZ2V0c2VjdXJpdHkgPQkJc2VsaW51eF9pbm9kZV9nZXRzZWN1cml0eSwKIAkuaW5vZGVfc2V0c2VjdXJpdHkgPQkJc2VsaW51eF9pbm9kZV9zZXRzZWN1cml0eSwKIAkuaW5vZGVfbGlzdHNlY3VyaXR5ID0JCXNlbGludXhfaW5vZGVfbGlzdHNlY3VyaXR5LAotCS5pbm9kZV9uZWVkX2tpbGxwcml2ID0JCXNlbGludXhfaW5vZGVfbmVlZF9raWxscHJpdiwKLQkuaW5vZGVfa2lsbHByaXYgPQkJc2VsaW51eF9pbm9kZV9raWxscHJpdiwKIAkuaW5vZGVfZ2V0c2VjaWQgPQkJc2VsaW51eF9pbm9kZV9nZXRzZWNpZCwKIAogCS5maWxlX3Blcm1pc3Npb24gPQkJc2VsaW51eF9maWxlX3Blcm1pc3Npb24sCkBAIC01NjQ0LDE3ICs1NTU2LDEyIEBACiAJLnRhc2tfY3JlYXRlID0JCQlzZWxpbnV4X3Rhc2tfY3JlYXRlLAogCS5jcmVkX2ZyZWUgPQkJCXNlbGludXhfY3JlZF9mcmVlLAogCS5jcmVkX3ByZXBhcmUgPQkJCXNlbGludXhfY3JlZF9wcmVwYXJlLAotCS5jcmVkX2NvbW1pdCA9CQkJc2VsaW51eF9jcmVkX2NvbW1pdCwKIAkua2VybmVsX2FjdF9hcyA9CQlzZWxpbnV4X2tlcm5lbF9hY3RfYXMsCiAJLmtlcm5lbF9jcmVhdGVfZmlsZXNfYXMgPQlzZWxpbnV4X2tlcm5lbF9jcmVhdGVfZmlsZXNfYXMsCi0JLnRhc2tfc2V0dWlkID0JCQlzZWxpbnV4X3Rhc2tfc2V0dWlkLAotCS50YXNrX2ZpeF9zZXR1aWQgPQkJc2VsaW51eF90YXNrX2ZpeF9zZXR1aWQsCi0JLnRhc2tfc2V0Z2lkID0JCQlzZWxpbnV4X3Rhc2tfc2V0Z2lkLAogCS50YXNrX3NldHBnaWQgPQkJCXNlbGludXhfdGFza19zZXRwZ2lkLAogCS50YXNrX2dldHBnaWQgPQkJCXNlbGludXhfdGFza19nZXRwZ2lkLAogCS50YXNrX2dldHNpZCA9CQkJc2VsaW51eF90YXNrX2dldHNpZCwKIAkudGFza19nZXRzZWNpZCA9CQlzZWxpbnV4X3Rhc2tfZ2V0c2VjaWQsCi0JLnRhc2tfc2V0Z3JvdXBzID0JCXNlbGludXhfdGFza19zZXRncm91cHMsCiAJLnRhc2tfc2V0bmljZSA9CQkJc2VsaW51eF90YXNrX3NldG5pY2UsCiAJLnRhc2tfc2V0aW9wcmlvID0JCXNlbGludXhfdGFza19zZXRpb3ByaW8sCiAJLnRhc2tfZ2V0aW9wcmlvID0JCXNlbGludXhfdGFza19nZXRpb3ByaW8sCkBAIC01NjY0LDcgKzU1NzEsNiBAQAogCS50YXNrX21vdmVtZW1vcnkgPQkJc2VsaW51eF90YXNrX21vdmVtZW1vcnksCiAJLnRhc2tfa2lsbCA9CQkJc2VsaW51eF90YXNrX2tpbGwsCiAJLnRhc2tfd2FpdCA9CQkJc2VsaW51eF90YXNrX3dhaXQsCi0JLnRhc2tfcHJjdGwgPQkJCXNlbGludXhfdGFza19wcmN0bCwKIAkudGFza190b19pbm9kZSA9CQlzZWxpbnV4X3Rhc2tfdG9faW5vZGUsCiAKIAkuaXBjX3Blcm1pc3Npb24gPQkJc2VsaW51eF9pcGNfcGVybWlzc2lvbiwKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdl9wZXJtX3RvX3N0cmluZy5oIGIvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2X3Blcm1fdG9fc3RyaW5nLmgKaW5kZXggYzBjODg1NC4uMzFkZjFkNyAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2X3Blcm1fdG9fc3RyaW5nLmgKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2X3Blcm1fdG9fc3RyaW5nLmgKQEAgLTI0LDYgKzI0LDcgQEAKICAgIFNfKFNFQ0NMQVNTX0NIUl9GSUxFLCBDSFJfRklMRV9fRVhFQ01PRCwgImV4ZWNtb2QiKQogICAgU18oU0VDQ0xBU1NfQ0hSX0ZJTEUsIENIUl9GSUxFX19PUEVOLCAib3BlbiIpCiAgICBTXyhTRUNDTEFTU19CTEtfRklMRSwgQkxLX0ZJTEVfX09QRU4sICJvcGVuIikKKyAgIFNfKFNFQ0NMQVNTX1NPQ0tfRklMRSwgU09DS19GSUxFX19PUEVOLCAib3BlbiIpCiAgICBTXyhTRUNDTEFTU19GSUZPX0ZJTEUsIEZJRk9fRklMRV9fT1BFTiwgIm9wZW4iKQogICAgU18oU0VDQ0xBU1NfRkQsIEZEX19VU0UsICJ1c2UiKQogICAgU18oU0VDQ0xBU1NfVENQX1NPQ0tFVCwgVENQX1NPQ0tFVF9fQ09OTkVDVFRPLCAiY29ubmVjdHRvIikKQEAgLTE1Miw2ICsxNTMsNyBAQAogICAgU18oU0VDQ0xBU1NfTkVUTElOS19BVURJVF9TT0NLRVQsIE5FVExJTktfQVVESVRfU09DS0VUX19OTE1TR19XUklURSwgIm5sbXNnX3dyaXRlIikKICAgIFNfKFNFQ0NMQVNTX05FVExJTktfQVVESVRfU09DS0VULCBORVRMSU5LX0FVRElUX1NPQ0tFVF9fTkxNU0dfUkVMQVksICJubG1zZ19yZWxheSIpCiAgICBTXyhTRUNDTEFTU19ORVRMSU5LX0FVRElUX1NPQ0tFVCwgTkVUTElOS19BVURJVF9TT0NLRVRfX05MTVNHX1JFQURQUklWLCAibmxtc2dfcmVhZHByaXYiKQorICAgU18oU0VDQ0xBU1NfTkVUTElOS19BVURJVF9TT0NLRVQsIE5FVExJTktfQVVESVRfU09DS0VUX19OTE1TR19UVFlfQVVESVQsICJubG1zZ190dHlfYXVkaXQiKQogICAgU18oU0VDQ0xBU1NfTkVUTElOS19JUDZGV19TT0NLRVQsIE5FVExJTktfSVA2RldfU09DS0VUX19OTE1TR19SRUFELCAibmxtc2dfcmVhZCIpCiAgICBTXyhTRUNDTEFTU19ORVRMSU5LX0lQNkZXX1NPQ0tFVCwgTkVUTElOS19JUDZGV19TT0NLRVRfX05MTVNHX1dSSVRFLCAibmxtc2dfd3JpdGUiKQogICAgU18oU0VDQ0xBU1NfQVNTT0NJQVRJT04sIEFTU09DSUFUSU9OX19TRU5EVE8sICJzZW5kdG8iKQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2X3Blcm1pc3Npb25zLmggYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZfcGVybWlzc2lvbnMuaAppbmRleCAwYmE3OWZlLi5kNjQ1MTkyIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZfcGVybWlzc2lvbnMuaAorKysgYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZfcGVybWlzc2lvbnMuaApAQCAtMTc0LDYgKzE3NCw3IEBACiAjZGVmaW5lIFNPQ0tfRklMRV9fU1dBUE9OICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDBVTAogI2RlZmluZSBTT0NLX0ZJTEVfX1FVT1RBT04gICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwVUwKICNkZWZpbmUgU09DS19GSUxFX19NT1VOVE9OICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMFVMCisjZGVmaW5lIFNPQ0tfRklMRV9fT1BFTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDBVTAogI2RlZmluZSBGSUZPX0ZJTEVfX0lPQ1RMICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxVUwKICNkZWZpbmUgRklGT19GSUxFX19SRUFEICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMlVMCiAjZGVmaW5lIEZJRk9fRklMRV9fV1JJVEUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDRVTApAQCAtNzA3LDYgKzcwOCw3IEBACiAjZGVmaW5lIE5FVExJTktfQVVESVRfU09DS0VUX19OTE1TR19XUklURSAgICAgICAgIDB4MDA4MDAwMDBVTAogI2RlZmluZSBORVRMSU5LX0FVRElUX1NPQ0tFVF9fTkxNU0dfUkVMQVkgICAgICAgICAweDAxMDAwMDAwVUwKICNkZWZpbmUgTkVUTElOS19BVURJVF9TT0NLRVRfX05MTVNHX1JFQURQUklWICAgICAgMHgwMjAwMDAwMFVMCisjZGVmaW5lIE5FVExJTktfQVVESVRfU09DS0VUX19OTE1TR19UVFlfQVVESVQgICAgIDB4MDQwMDAwMDBVTAogI2RlZmluZSBORVRMSU5LX0lQNkZXX1NPQ0tFVF9fSU9DVEwgICAgICAgICAgICAgICAweDAwMDAwMDAxVUwKICNkZWZpbmUgTkVUTElOS19JUDZGV19TT0NLRVRfX1JFQUQgICAgICAgICAgICAgICAgMHgwMDAwMDAwMlVMCiAjZGVmaW5lIE5FVExJTktfSVA2RldfU09DS0VUX19XUklURSAgICAgICAgICAgICAgIDB4MDAwMDAwMDRVTApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL29ianNlYy5oIGIvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL29ianNlYy5oCmluZGV4IDNjYzQ1MTYuLmM0ZTA2MjMgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9vYmpzZWMuaAorKysgYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvb2Jqc2VjLmgKQEAgLTYwLDkgKzYwLDcgQEAKIAl1MzIgZGVmX3NpZDsJCQkvKiBkZWZhdWx0IFNJRCBmb3IgbGFiZWxpbmcgKi8KIAl1MzIgbW50cG9pbnRfc2lkOwkJLyogU0VDVVJJVFlfRlNfVVNFX01OVFBPSU5UIGNvbnRleHQgZm9yIGZpbGVzICovCiAJdW5zaWduZWQgaW50IGJlaGF2aW9yOwkJLyogbGFiZWxpbmcgYmVoYXZpb3IgKi8KLQl1bnNpZ25lZCBjaGFyIGluaXRpYWxpemVkOwkvKiBpbml0aWFsaXphdGlvbiBmbGFnICovCiAJdW5zaWduZWQgY2hhciBmbGFnczsJCS8qIHdoaWNoIG1vdW50IG9wdGlvbnMgd2VyZSBzcGVjaWZpZWQgKi8KLQl1bnNpZ25lZCBjaGFyIHByb2M7CQkvKiBwcm9jIGZzICovCiAJc3RydWN0IG11dGV4IGxvY2s7CiAJc3RydWN0IGxpc3RfaGVhZCBpc2VjX2hlYWQ7CiAJc3BpbmxvY2tfdCBpc2VjX2xvY2s7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvc2VjdXJpdHkuaCBiL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9zZWN1cml0eS5oCmluZGV4IDcyNDQ3MzcuLjVjMzQzNGYgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9zZWN1cml0eS5oCisrKyBiL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9zZWN1cml0eS5oCkBAIC0zNywxNSArMzcsMjMgQEAKICNkZWZpbmUgUE9MSUNZREJfVkVSU0lPTl9NQVgJUE9MSUNZREJfVkVSU0lPTl9CT1VOREFSWQogI2VuZGlmCiAKKy8qIE1hc2sgZm9yIGp1c3QgdGhlIG1vdW50IHJlbGF0ZWQgZmxhZ3MgKi8KKyNkZWZpbmUgU0VfTU5UTUFTSwkweDBmCisvKiBTdXBlciBibG9jayBzZWN1cml0eSBzdHJ1Y3QgZmxhZ3MgZm9yIG1vdW50IG9wdGlvbnMgKi8KICNkZWZpbmUgQ09OVEVYVF9NTlQJMHgwMQogI2RlZmluZSBGU0NPTlRFWFRfTU5UCTB4MDIKICNkZWZpbmUgUk9PVENPTlRFWFRfTU5UCTB4MDQKICNkZWZpbmUgREVGQ09OVEVYVF9NTlQJMHgwOAorLyogTm9uLW1vdW50IHJlbGF0ZWQgZmxhZ3MgKi8KKyNkZWZpbmUgU0VfU0JJTklUSUFMSVpFRAkweDEwCisjZGVmaW5lIFNFX1NCUFJPQwkJMHgyMAorI2RlZmluZSBTRV9TQkxBQkVMU1VQUAkweDQwCiAKICNkZWZpbmUgQ09OVEVYVF9TVFIJImNvbnRleHQ9IgogI2RlZmluZSBGU0NPTlRFWFRfU1RSCSJmc2NvbnRleHQ9IgogI2RlZmluZSBST09UQ09OVEVYVF9TVFIJInJvb3Rjb250ZXh0PSIKICNkZWZpbmUgREVGQ09OVEVYVF9TVFIJImRlZmNvbnRleHQ9IgorI2RlZmluZSBMQUJFTFNVUFBfU1RSICJzZWNsYWJlbCIKIAogc3RydWN0IG5ldGxibF9sc21fc2VjYXR0cjsKIApAQCAtODAsNyArODgsNiBAQAogI2RlZmluZSBTRUxfVkVDX01BWCAzMgogc3RydWN0IGF2X2RlY2lzaW9uIHsKIAl1MzIgYWxsb3dlZDsKLQl1MzIgZGVjaWRlZDsKIAl1MzIgYXVkaXRhbGxvdzsKIAl1MzIgYXVkaXRkZW55OwogCXUzMiBzZXFubzsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvbmxtc2d0YWIuYyBiL3NlY3VyaXR5L3NlbGludXgvbmxtc2d0YWIuYwppbmRleCA0ZWQ3YmFiLi5jNjg3NWZkIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L25sbXNndGFiLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9ubG1zZ3RhYi5jCkBAIC0xMTMsNyArMTEzLDcgQEAKIAl7IEFVRElUX1VTRVIsCQlORVRMSU5LX0FVRElUX1NPQ0tFVF9fTkxNU0dfUkVMQVkgICAgfSwKIAl7IEFVRElUX1NJR05BTF9JTkZPLAlORVRMSU5LX0FVRElUX1NPQ0tFVF9fTkxNU0dfUkVBRCAgICAgfSwKIAl7IEFVRElUX1RUWV9HRVQsCU5FVExJTktfQVVESVRfU09DS0VUX19OTE1TR19SRUFEICAgICB9LAotCXsgQVVESVRfVFRZX1NFVCwJTkVUTElOS19BVURJVF9TT0NLRVRfX05MTVNHX1dSSVRFICAgIH0sCisJeyBBVURJVF9UVFlfU0VULAlORVRMSU5LX0FVRElUX1NPQ0tFVF9fTkxNU0dfVFRZX0FVRElUCX0sCiB9OwogCiAKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvc2VsaW51eGZzLmMgYi9zZWN1cml0eS9zZWxpbnV4L3NlbGludXhmcy5jCmluZGV4IDAxZWM2ZDIuLmQzYzhiOTggMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvc2VsaW51eGZzLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9zZWxpbnV4ZnMuYwpAQCAtNTk1LDcgKzU5NSw3IEBACiAKIAlsZW5ndGggPSBzY25wcmludGYoYnVmLCBTSU1QTEVfVFJBTlNBQ1RJT05fTElNSVQsCiAJCQkgICIleCAleCAleCAleCAldSIsCi0JCQkgIGF2ZC5hbGxvd2VkLCBhdmQuZGVjaWRlZCwKKwkJCSAgYXZkLmFsbG93ZWQsIDB4ZmZmZmZmZmYsCiAJCQkgIGF2ZC5hdWRpdGFsbG93LCBhdmQuYXVkaXRkZW55LAogCQkJICBhdmQuc2Vxbm8pOwogb3V0MjoKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvc3Mvc2VydmljZXMuYyBiL3NlY3VyaXR5L3NlbGludXgvc3Mvc2VydmljZXMuYwppbmRleCBjNjVlNGZlLi5kZWVlYzZjIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L3NzL3NlcnZpY2VzLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9zcy9zZXJ2aWNlcy5jCkBAIC00MDcsNyArNDA3LDYgQEAKIAkgKiBJbml0aWFsaXplIHRoZSBhY2Nlc3MgdmVjdG9ycyB0byB0aGUgZGVmYXVsdCB2YWx1ZXMuCiAJICovCiAJYXZkLT5hbGxvd2VkID0gMDsKLQlhdmQtPmRlY2lkZWQgPSAweGZmZmZmZmZmOwogCWF2ZC0+YXVkaXRhbGxvdyA9IDA7CiAJYXZkLT5hdWRpdGRlbnkgPSAweGZmZmZmZmZmOwogCWF2ZC0+c2Vxbm8gPSBsYXRlc3RfZ3JhbnRpbmc7CkBAIC03NDMsNyArNzQyLDYgQEAKIAogCWlmICghc3NfaW5pdGlhbGl6ZWQpIHsKIAkJYXZkLT5hbGxvd2VkID0gMHhmZmZmZmZmZjsKLQkJYXZkLT5kZWNpZGVkID0gMHhmZmZmZmZmZjsKIAkJYXZkLT5hdWRpdGFsbG93ID0gMDsKIAkJYXZkLT5hdWRpdGRlbnkgPSAweGZmZmZmZmZmOwogCQlhdmQtPnNlcW5vID0gbGF0ZXN0X2dyYW50aW5nOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc21hY2svc21hY2tfYWNjZXNzLmMgYi9zZWN1cml0eS9zbWFjay9zbWFja19hY2Nlc3MuYwppbmRleCAyZTBiODNlLi5jZmExOWNhIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zbWFjay9zbWFja19hY2Nlc3MuYworKysgYi9zZWN1cml0eS9zbWFjay9zbWFja19hY2Nlc3MuYwpAQCAtMTYyLDggKzE2Miw4IEBACiAKIC8qKgogICogc21rX2N1cmFjYyAtIGRldGVybWluZSBpZiBjdXJyZW50IGhhcyBhIHNwZWNpZmljIGFjY2VzcyB0byBhbiBvYmplY3QKLSAqIEBvYmplY3RfbGFiZWw6IGEgcG9pbnRlciB0byB0aGUgb2JqZWN0J3MgU21hY2sgbGFiZWwKLSAqIEByZXF1ZXN0OiB0aGUgYWNjZXNzIHJlcXVlc3RlZCwgaW4gIk1BWSIgZm9ybWF0CisgKiBAb2JqX2xhYmVsOiBhIHBvaW50ZXIgdG8gdGhlIG9iamVjdCdzIFNtYWNrIGxhYmVsCisgKiBAbW9kZTogdGhlIGFjY2VzcyByZXF1ZXN0ZWQsIGluICJNQVkiIGZvcm1hdAogICoKICAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIHRoZSBjdXJyZW50IHN1YmplY3QgbGFiZWwvb2JqZWN0IGxhYmVsIHBhaXIKICAqIGluIHRoZSBhY2Nlc3MgcnVsZSBsaXN0IGFuZCByZXR1cm5zIDAgaWYgdGhlIGFjY2VzcyBpcyBwZXJtaXR0ZWQsCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zbWFjay9zbWFja19sc20uYyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jCmluZGV4IGU3ZGVkMTMuLjg0YjYyYjUgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jCisrKyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jCkBAIC05MSw2ICs5MSw3IEBACiAvKioKICAqIHNtYWNrX3B0cmFjZV9tYXlfYWNjZXNzIC0gU21hY2sgYXBwcm92YWwgb24gUFRSQUNFX0FUVEFDSAogICogQGN0cDogY2hpbGQgdGFzayBwb2ludGVyCisgKiBAbW9kZTogcHRyYWNlIGF0dGFjaG1lbnQgbW9kZQogICoKICAqIFJldHVybnMgMCBpZiBhY2Nlc3MgaXMgT0ssIGFuIGVycm9yIGNvZGUgb3RoZXJ3aXNlCiAgKgpAQCAtMjAzLDkgKzIwNCw4IEBACiAKIC8qKgogICogc21hY2tfc2JfY29weV9kYXRhIC0gY29weSBtb3VudCBvcHRpb25zIGRhdGEgZm9yIHByb2Nlc3NpbmcKLSAqIEB0eXBlOiBmaWxlIHN5c3RlbSB0eXBlCiAgKiBAb3JpZzogd2hlcmUgdG8gc3RhcnQKLSAqIEBzbWFja29wdHMKKyAqIEBzbWFja29wdHM6IG1vdW50IG9wdGlvbnMgc3RyaW5nCiAgKgogICogUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgLUVOT01FTSBvbiBlcnJvci4KICAqCkBAIC0zMzEsNyArMzMxLDcgQEAKIC8qKgogICogc21hY2tfc2JfbW91bnQgLSBTbWFjayBjaGVjayBmb3IgbW91bnRpbmcKICAqIEBkZXZfbmFtZTogdW51c2VkCi0gKiBAbmQ6IG1vdW50IHBvaW50CisgKiBAcGF0aDogbW91bnQgcG9pbnQKICAqIEB0eXBlOiB1bnVzZWQKICAqIEBmbGFnczogdW51c2VkCiAgKiBAZGF0YTogdW51c2VkCkBAIC0zNzAsNyArMzcwLDcgQEAKIAogLyoqCiAgKiBzbWFja19pbm9kZV9hbGxvY19zZWN1cml0eSAtIGFsbG9jYXRlIGFuIGlub2RlIGJsb2IKLSAqIEBpbm9kZSAtIHRoZSBpbm9kZSBpbiBuZWVkIG9mIGEgYmxvYgorICogQGlub2RlOiB0aGUgaW5vZGUgaW4gbmVlZCBvZiBhIGJsb2IKICAqCiAgKiBSZXR1cm5zIDAgaWYgaXQgZ2V0cyBhIGJsb2IsIC1FTk9NRU0gb3RoZXJ3aXNlCiAgKi8KQEAgLTM4NCw3ICszODQsNyBAQAogCiAvKioKICAqIHNtYWNrX2lub2RlX2ZyZWVfc2VjdXJpdHkgLSBmcmVlIGFuIGlub2RlIGJsb2IKLSAqIEBpbm9kZSAtIHRoZSBpbm9kZSB3aXRoIGEgYmxvYgorICogQGlub2RlOiB0aGUgaW5vZGUgd2l0aCBhIGJsb2IKICAqCiAgKiBDbGVhcnMgdGhlIGJsb2IgcG9pbnRlciBpbiBpbm9kZQogICovCkBAIC01MzgsNyArNTM4LDYgQEAKICAqIHNtYWNrX2lub2RlX3Blcm1pc3Npb24gLSBTbWFjayB2ZXJzaW9uIG9mIHBlcm1pc3Npb24oKQogICogQGlub2RlOiB0aGUgaW5vZGUgaW4gcXVlc3Rpb24KICAqIEBtYXNrOiB0aGUgYWNjZXNzIHJlcXVlc3RlZAotICogQG5kOiB1bnVzZWQKICAqCiAgKiBUaGlzIGlzIHRoZSBpbXBvcnRhbnQgU21hY2sgaG9vay4KICAqCkBAIC03MDEsOCArNzAwLDcgQEAKICAqIEBpbm9kZTogdGhlIG9iamVjdAogICogQG5hbWU6IGF0dHJpYnV0ZSBuYW1lCiAgKiBAYnVmZmVyOiB3aGVyZSB0byBwdXQgdGhlIHJlc3VsdAotICogQHNpemU6IHNpemUgb2YgdGhlIGJ1ZmZlcgotICogQGVycjogdW51c2VkCisgKiBAYWxsb2M6IHVudXNlZAogICoKICAqIFJldHVybnMgdGhlIHNpemUgb2YgdGhlIGF0dHJpYnV0ZSBvciBhbiBlcnJvciBjb2RlCiAgKi8KQEAgLTg2NCw3ICs4NjIsNyBAQAogLyoqCiAgKiBzbWFja19maWxlX2xvY2sgLSBTbWFjayBjaGVjayBvbiBmaWxlIGxvY2tpbmcKICAqIEBmaWxlOiB0aGUgb2JqZWN0Ci0gKiBAY21kIHVudXNlZAorICogQGNtZDogdW51c2VkCiAgKgogICogUmV0dXJucyAwIGlmIGN1cnJlbnQgaGFzIHdyaXRlIGFjY2VzcywgZXJyb3IgY29kZSBvdGhlcndpc2UKICAqLwpAQCAtMTAwMyw4ICsxMDAxLDggQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIGNvbW1pdCBuZXcgY3JlZGVudGlhbHMKKy8qKgorICogc21hY2tfY3JlZF9jb21taXQgLSBjb21taXQgbmV3IGNyZWRlbnRpYWxzCiAgKiBAbmV3OiB0aGUgbmV3IGNyZWRlbnRpYWxzCiAgKiBAb2xkOiB0aGUgb3JpZ2luYWwgY3JlZGVudGlhbHMKICAqLwpAQCAtMTAxNCw4ICsxMDEyLDggQEAKIAogLyoqCiAgKiBzbWFja19rZXJuZWxfYWN0X2FzIC0gU2V0IHRoZSBzdWJqZWN0aXZlIGNvbnRleHQgaW4gYSBzZXQgb2YgY3JlZGVudGlhbHMKLSAqIEBuZXcgcG9pbnRzIHRvIHRoZSBzZXQgb2YgY3JlZGVudGlhbHMgdG8gYmUgbW9kaWZpZWQuCi0gKiBAc2VjaWQgc3BlY2lmaWVzIHRoZSBzZWN1cml0eSBJRCB0byBiZSBzZXQKKyAqIEBuZXc6IHBvaW50cyB0byB0aGUgc2V0IG9mIGNyZWRlbnRpYWxzIHRvIGJlIG1vZGlmaWVkLgorICogQHNlY2lkOiBzcGVjaWZpZXMgdGhlIHNlY3VyaXR5IElEIHRvIGJlIHNldAogICoKICAqIFNldCB0aGUgc2VjdXJpdHkgZGF0YSBmb3IgYSBrZXJuZWwgc2VydmljZS4KICAqLwpAQCAtMTAzMiw4ICsxMDMwLDggQEAKIAogLyoqCiAgKiBzbWFja19rZXJuZWxfY3JlYXRlX2ZpbGVzX2FzIC0gU2V0IHRoZSBmaWxlIGNyZWF0aW9uIGxhYmVsIGluIGEgc2V0IG9mIGNyZWRzCi0gKiBAbmV3IHBvaW50cyB0byB0aGUgc2V0IG9mIGNyZWRlbnRpYWxzIHRvIGJlIG1vZGlmaWVkCi0gKiBAaW5vZGUgcG9pbnRzIHRvIHRoZSBpbm9kZSB0byB1c2UgYXMgYSByZWZlcmVuY2UKKyAqIEBuZXc6IHBvaW50cyB0byB0aGUgc2V0IG9mIGNyZWRlbnRpYWxzIHRvIGJlIG1vZGlmaWVkCisgKiBAaW5vZGU6IHBvaW50cyB0byB0aGUgaW5vZGUgdG8gdXNlIGFzIGEgcmVmZXJlbmNlCiAgKgogICogU2V0IHRoZSBmaWxlIGNyZWF0aW9uIGNvbnRleHQgaW4gYSBzZXQgb2YgY3JlZGVudGlhbHMgdG8gdGhlIHNhbWUKICAqIGFzIHRoZSBvYmplY3RpdmUgY29udGV4dCBvZiB0aGUgc3BlY2lmaWVkIGlub2RlCkBAIC0xMjQyLDcgKzEyNDAsNyBAQAogLyoqCiAgKiBzbWFja190YXNrX3RvX2lub2RlIC0gY29weSB0YXNrIHNtYWNrIGludG8gdGhlIGlub2RlIGJsb2IKICAqIEBwOiB0YXNrIHRvIGNvcHkgZnJvbQotICogaW5vZGU6IGlub2RlIHRvIGNvcHkgdG8KKyAqIEBpbm9kZTogaW5vZGUgdG8gY29weSB0bwogICoKICAqIFNldHMgdGhlIHNtYWNrIHBvaW50ZXIgaW4gdGhlIGlub2RlIHNlY3VyaXR5IGJsb2IKICAqLwpAQCAtMTI2MCw3ICsxMjU4LDcgQEAKICAqIHNtYWNrX3NrX2FsbG9jX3NlY3VyaXR5IC0gQWxsb2NhdGUgYSBzb2NrZXQgYmxvYgogICogQHNrOiB0aGUgc29ja2V0CiAgKiBAZmFtaWx5OiB1bnVzZWQKLSAqIEBwcmlvcml0eTogbWVtb3J5IGFsbG9jYXRpb24gcHJpb3JpdHkKKyAqIEBnZnBfZmxhZ3M6IG1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzCiAgKgogICogQXNzaWduIFNtYWNrIHBvaW50ZXJzIHRvIGN1cnJlbnQKICAqCkBAIC0xOTc0LDcgKzE5NzIsNyBAQAogCiAvKioKICAqIHNtYWNrX2lwY19nZXRzZWNpZCAtIEV4dHJhY3Qgc21hY2sgc2VjdXJpdHkgaWQKLSAqIEBpcGNwOiB0aGUgb2JqZWN0IHBlcm1pc3Npb25zCisgKiBAaXBwOiB0aGUgb2JqZWN0IHBlcm1pc3Npb25zCiAgKiBAc2VjaWQ6IHdoZXJlIHJlc3VsdCB3aWxsIGJlIHNhdmVkCiAgKi8KIHN0YXRpYyB2b2lkIHNtYWNrX2lwY19nZXRzZWNpZChzdHJ1Y3Qga2Vybl9pcGNfcGVybSAqaXBwLCB1MzIgKnNlY2lkKQpAQCAtMjI1MSw3ICsyMjQ5LDcgQEAKIC8qKgogICogc21hY2tfc29ja2V0X3NlbmRtc2cgLSBTbWFjayBjaGVjayBiYXNlZCBvbiBkZXN0aW5hdGlvbiBob3N0CiAgKiBAc29jazogdGhlIHNvY2tldAotICogQG1zZ2hkcjogdGhlIG1lc3NhZ2UKKyAqIEBtc2c6IHRoZSBtZXNzYWdlCiAgKiBAc2l6ZTogdGhlIHNpemUgb2YgdGhlIG1lc3NhZ2UKICAqCiAgKiBSZXR1cm4gMCBpZiB0aGUgY3VycmVudCBzdWJqZWN0IGNhbiB3cml0ZSB0byB0aGUgZGVzdGluYXRpb24KQEAgLTIyOTIsOCArMjI5MCw3IEBACiAKIAogLyoqCi0gKiBzbWFja19mcm9tX3NlY2F0dHIgLSBDb252ZXJ0IGEgbmV0bGFiZWwgYXR0ci5tbHMubHZsL2F0dHIubWxzLmNhdAotICogCXBhaXIgdG8gc21hY2sKKyAqIHNtYWNrX2Zyb21fc2VjYXR0ciAtIENvbnZlcnQgYSBuZXRsYWJlbCBhdHRyLm1scy5sdmwvYXR0ci5tbHMuY2F0IHBhaXIgdG8gc21hY2sKICAqIEBzYXA6IG5ldGxhYmVsIHNlY2F0dHIKICAqIEBzaXA6IHdoZXJlIHRvIHB1dCB0aGUgcmVzdWx0CiAgKgpAQCAtMjQxNCw3ICsyNDExLDcgQEAKICAqIEBzb2NrOiB0aGUgc29ja2V0CiAgKiBAb3B0dmFsOiB1c2VyJ3MgZGVzdGluYXRpb24KICAqIEBvcHRsZW46IHNpemUgdGhlcmVvZgotICogQGxlbjogbWF4IHRoZXJlb2UKKyAqIEBsZW46IG1heCB0aGVyZW9mCiAgKgogICogcmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIGFuIGVycm9yIGNvZGUgb3RoZXJ3aXNlCiAgKi8KQEAgLTI3NDksNyArMjc0Niw3IEBACiAKICNlbmRpZiAvKiBDT05GSUdfQVVESVQgKi8KIAotLyoKKy8qKgogICogc21hY2tfc2VjaWRfdG9fc2VjY3R4IC0gcmV0dXJuIHRoZSBzbWFjayBsYWJlbCBmb3IgYSBzZWNpZAogICogQHNlY2lkOiBpbmNvbWluZyBpbnRlZ2VyCiAgKiBAc2VjZGF0YTogZGVzdGluYXRpb24KQEAgLTI3NjYsNyArMjc2Myw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qCisvKioKICAqIHNtYWNrX3NlY2N0eF90b19zZWNpZCAtIHJldHVybiB0aGUgc2VjaWQgZm9yIGEgc21hY2sgbGFiZWwKICAqIEBzZWNkYXRhOiBzbWFjayBsYWJlbAogICogQHNlY2xlbjogaG93IGxvbmcgcmVzdWx0IGlzCkBAIC0yNzgwLDExICsyNzc3LDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qCisvKioKICAqIHNtYWNrX3JlbGVhc2Vfc2VjY3R4IC0gZG9uJ3QgZG8gYW55dGhpbmcuCi0gKiBAa2V5X3JlZjogdW51c2VkCi0gKiBAY29udGV4dDogdW51c2VkCi0gKiBAcGVybTogdW51c2VkCisgKiBAc2VjZGF0YTogdW51c2VkCisgKiBAc2VjbGVuOiB1bnVzZWQKICAqCiAgKiBFeGlzdHMgdG8gbWFrZSBzdXJlIG5vdGhpbmcgZ2V0cyBkb25lLCBhbmQgcHJvcGVybHkKICAqLwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc21hY2svc21hY2tmcy5jIGIvc2VjdXJpdHkvc21hY2svc21hY2tmcy5jCmluZGV4IDUxZjBlZmMuLmExYjU3ZTQgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrZnMuYworKysgYi9zZWN1cml0eS9zbWFjay9zbWFja2ZzLmMKQEAgLTI0NSw3ICsyNDUsNyBAQAogCiAvKioKICAqIHNta193cml0ZV9sb2FkIC0gd3JpdGUoKSBmb3IgL3NtYWNrL2xvYWQKLSAqIEBmaWxwOiBmaWxlIHBvaW50ZXIsIG5vdCBhY3R1YWxseSB1c2VkCisgKiBAZmlsZTogZmlsZSBwb2ludGVyLCBub3QgYWN0dWFsbHkgdXNlZAogICogQGJ1Zjogd2hlcmUgdG8gZ2V0IHRoZSBkYXRhIGZyb20KICAqIEBjb3VudDogYnl0ZXMgc2VudAogICogQHBwb3M6IHdoZXJlIHRvIHN0YXJ0IC0gbXVzdCBiZSAwCkBAIC00MDIsNiArNDAyLDcgQEAKIAogLyoqCiAgKiBzbWtfdW5sYmxfYW1iaWVudCAtIGluaXRpYWxpemUgdGhlIHVubGFiZWxlZCBkb21haW4KKyAqIEBvbGRhbWJpZW50OiBwcmV2aW91cyBkb21haW4gc3RyaW5nCiAgKi8KIHN0YXRpYyB2b2lkIHNta191bmxibF9hbWJpZW50KGNoYXIgKm9sZGFtYmllbnQpCiB7CkBAIC01MTMsNyArNTE0LDcgQEAKIAogLyoqCiAgKiBzbWtfd3JpdGVfY2lwc28gLSB3cml0ZSgpIGZvciAvc21hY2svY2lwc28KLSAqIEBmaWxwOiBmaWxlIHBvaW50ZXIsIG5vdCBhY3R1YWxseSB1c2VkCisgKiBAZmlsZTogZmlsZSBwb2ludGVyLCBub3QgYWN0dWFsbHkgdXNlZAogICogQGJ1Zjogd2hlcmUgdG8gZ2V0IHRoZSBkYXRhIGZyb20KICAqIEBjb3VudDogYnl0ZXMgc2VudAogICogQHBwb3M6IHdoZXJlIHRvIHN0YXJ0CkBAIC03MzMsNyArNzM0LDcgQEAKIAogLyoqCiAgKiBzbWtfd3JpdGVfbmV0bGJsYWRkciAtIHdyaXRlKCkgZm9yIC9zbWFjay9uZXRsYWJlbAotICogQGZpbHA6IGZpbGUgcG9pbnRlciwgbm90IGFjdHVhbGx5IHVzZWQKKyAqIEBmaWxlOiBmaWxlIHBvaW50ZXIsIG5vdCBhY3R1YWxseSB1c2VkCiAgKiBAYnVmOiB3aGVyZSB0byBnZXQgdGhlIGRhdGEgZnJvbQogICogQGNvdW50OiBieXRlcyBzZW50CiAgKiBAcHBvczogd2hlcmUgdG8gc3RhcnQKQEAgLTg4NCw3ICs4ODUsNyBAQAogCiAvKioKICAqIHNta193cml0ZV9kb2kgLSB3cml0ZSgpIGZvciAvc21hY2svZG9pCi0gKiBAZmlscDogZmlsZSBwb2ludGVyLCBub3QgYWN0dWFsbHkgdXNlZAorICogQGZpbGU6IGZpbGUgcG9pbnRlciwgbm90IGFjdHVhbGx5IHVzZWQKICAqIEBidWY6IHdoZXJlIHRvIGdldCB0aGUgZGF0YSBmcm9tCiAgKiBAY291bnQ6IGJ5dGVzIHNlbnQKICAqIEBwcG9zOiB3aGVyZSB0byBzdGFydApAQCAtOTQ5LDcgKzk1MCw3IEBACiAKIC8qKgogICogc21rX3dyaXRlX2RpcmVjdCAtIHdyaXRlKCkgZm9yIC9zbWFjay9kaXJlY3QKLSAqIEBmaWxwOiBmaWxlIHBvaW50ZXIsIG5vdCBhY3R1YWxseSB1c2VkCisgKiBAZmlsZTogZmlsZSBwb2ludGVyLCBub3QgYWN0dWFsbHkgdXNlZAogICogQGJ1Zjogd2hlcmUgdG8gZ2V0IHRoZSBkYXRhIGZyb20KICAqIEBjb3VudDogYnl0ZXMgc2VudAogICogQHBwb3M6IHdoZXJlIHRvIHN0YXJ0CkBAIC0xMDI0LDcgKzEwMjUsNyBAQAogCiAvKioKICAqIHNta193cml0ZV9hbWJpZW50IC0gd3JpdGUoKSBmb3IgL3NtYWNrL2FtYmllbnQKLSAqIEBmaWxwOiBmaWxlIHBvaW50ZXIsIG5vdCBhY3R1YWxseSB1c2VkCisgKiBAZmlsZTogZmlsZSBwb2ludGVyLCBub3QgYWN0dWFsbHkgdXNlZAogICogQGJ1Zjogd2hlcmUgdG8gZ2V0IHRoZSBkYXRhIGZyb20KICAqIEBjb3VudDogYnl0ZXMgc2VudAogICogQHBwb3M6IHdoZXJlIHRvIHN0YXJ0CkBAIC0xMDk5LDcgKzExMDAsNyBAQAogCiAvKioKICAqIHNta193cml0ZV9vbmx5Y2FwIC0gd3JpdGUoKSBmb3IgL3NtYWNrL29ubHljYXAKLSAqIEBmaWxwOiBmaWxlIHBvaW50ZXIsIG5vdCBhY3R1YWxseSB1c2VkCisgKiBAZmlsZTogZmlsZSBwb2ludGVyLCBub3QgYWN0dWFsbHkgdXNlZAogICogQGJ1Zjogd2hlcmUgdG8gZ2V0IHRoZSBkYXRhIGZyb20KICAqIEBjb3VudDogYnl0ZXMgc2VudAogICogQHBwb3M6IHdoZXJlIHRvIHN0YXJ0CmRpZmYgLS1naXQgYS9zZWN1cml0eS90b21veW8vS2NvbmZpZyBiL3NlY3VyaXR5L3RvbW95by9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4ZjM4NTcKLS0tIC9kZXYvbnVsbAorKysgYi9zZWN1cml0eS90b21veW8vS2NvbmZpZwpAQCAtMCwwICsxLDExIEBACitjb25maWcgU0VDVVJJVFlfVE9NT1lPCisJYm9vbCAiVE9NT1lPIExpbnV4IFN1cHBvcnQiCisJZGVwZW5kcyBvbiBTRUNVUklUWQorCXNlbGVjdCBTRUNVUklUWUZTCisJc2VsZWN0IFNFQ1VSSVRZX1BBVEgKKwlkZWZhdWx0IG4KKwloZWxwCisJICBUaGlzIHNlbGVjdHMgVE9NT1lPIExpbnV4LCBwYXRobmFtZS1iYXNlZCBhY2Nlc3MgY29udHJvbC4KKwkgIFJlcXVpcmVkIHVzZXJzcGFjZSB0b29scyBhbmQgZnVydGhlciBpbmZvcm1hdGlvbiBtYXkgYmUKKwkgIGZvdW5kIGF0IDxodHRwOi8vdG9tb3lvLnNvdXJjZWZvcmdlLmpwLz4uCisJICBJZiB5b3UgYXJlIHVuc3VyZSBob3cgdG8gYW5zd2VyIHRoaXMgcXVlc3Rpb24sIGFuc3dlciBOLgpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvdG9tb3lvL01ha2VmaWxlIGIvc2VjdXJpdHkvdG9tb3lvL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwY2NkNjgKLS0tIC9kZXYvbnVsbAorKysgYi9zZWN1cml0eS90b21veW8vTWFrZWZpbGUKQEAgLTAsMCArMSBAQAorb2JqLXkgPSBjb21tb24ubyByZWFscGF0aC5vIHRvbW95by5vIGRvbWFpbi5vIGZpbGUubwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvdG9tb3lvL2NvbW1vbi5jIGIvc2VjdXJpdHkvdG9tb3lvL2NvbW1vbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyY2VhNjUKLS0tIC9kZXYvbnVsbAorKysgYi9zZWN1cml0eS90b21veW8vY29tbW9uLmMKQEAgLTAsMCArMSwyMjA2IEBACisvKgorICogc2VjdXJpdHkvdG9tb3lvL2NvbW1vbi5jCisgKgorICogQ29tbW9uIGZ1bmN0aW9ucyBmb3IgVE9NT1lPLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA5ICBOVFQgREFUQSBDT1JQT1JBVElPTgorICoKKyAqIFZlcnNpb246IDIuMi4wLXByZSAgIDIwMDkvMDIvMDEKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgorI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KKyNpbmNsdWRlICJyZWFscGF0aC5oIgorI2luY2x1ZGUgImNvbW1vbi5oIgorI2luY2x1ZGUgInRvbW95by5oIgorCisvKiBIYXMgbG9hZGluZyBwb2xpY3kgZG9uZT8gKi8KK2Jvb2wgdG9tb3lvX3BvbGljeV9sb2FkZWQ7CisKKy8qIFN0cmluZyB0YWJsZSBmb3IgZnVuY3Rpb25hbGl0eSB0aGF0IHRha2VzIDQgbW9kZXMuICovCitzdGF0aWMgY29uc3QgY2hhciAqdG9tb3lvX21vZGVfNFs0XSA9IHsKKwkiZGlzYWJsZWQiLCAibGVhcm5pbmciLCAicGVybWlzc2l2ZSIsICJlbmZvcmNpbmciCit9OworLyogU3RyaW5nIHRhYmxlIGZvciBmdW5jdGlvbmFsaXR5IHRoYXQgdGFrZXMgMiBtb2Rlcy4gKi8KK3N0YXRpYyBjb25zdCBjaGFyICp0b21veW9fbW9kZV8yWzRdID0geworCSJkaXNhYmxlZCIsICJlbmFibGVkIiwgImVuYWJsZWQiLCAiZW5hYmxlZCIKK307CisKKy8qIFRhYmxlIGZvciBwcm9maWxlLiAqLworc3RhdGljIHN0cnVjdCB7CisJY29uc3QgY2hhciAqa2V5d29yZDsKKwl1bnNpZ25lZCBpbnQgY3VycmVudF92YWx1ZTsKKwljb25zdCB1bnNpZ25lZCBpbnQgbWF4X3ZhbHVlOworfSB0b21veW9fY29udHJvbF9hcnJheVtUT01PWU9fTUFYX0NPTlRST0xfSU5ERVhdID0geworCVtUT01PWU9fTUFDX0ZPUl9GSUxFXSAgICAgPSB7ICJNQUNfRk9SX0ZJTEUiLCAgICAgICAgMCwgICAgICAgMyB9LAorCVtUT01PWU9fTUFYX0FDQ0VQVF9FTlRSWV0gPSB7ICJNQVhfQUNDRVBUX0VOVFJZIiwgMjA0OCwgSU5UX01BWCB9LAorCVtUT01PWU9fVkVSQk9TRV0gICAgICAgICAgPSB7ICJUT01PWU9fVkVSQk9TRSIsICAgICAgMSwgICAgICAgMSB9LAorfTsKKworLyogUHJvZmlsZSB0YWJsZS4gTWVtb3J5IGlzIGFsbG9jYXRlZCBhcyBuZWVkZWQuICovCitzdGF0aWMgc3RydWN0IHRvbW95b19wcm9maWxlIHsKKwl1bnNpZ25lZCBpbnQgdmFsdWVbVE9NT1lPX01BWF9DT05UUk9MX0lOREVYXTsKKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqY29tbWVudDsKK30gKnRvbW95b19wcm9maWxlX3B0cltUT01PWU9fTUFYX1BST0ZJTEVTXTsKKworLyogUGVybWl0IHBvbGljeSBtYW5hZ2VtZW50IGJ5IG5vbi1yb290IHVzZXI/ICovCitzdGF0aWMgYm9vbCB0b21veW9fbWFuYWdlX2J5X25vbl9yb290OworCisvKiBVdGlsaXR5IGZ1bmN0aW9ucy4gKi8KKworLyogT3BlbiBvcGVyYXRpb24gZm9yIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by8gaW50ZXJmYWNlLiAqLworc3RhdGljIGludCB0b21veW9fb3Blbl9jb250cm9sKGNvbnN0IHU4IHR5cGUsIHN0cnVjdCBmaWxlICpmaWxlKTsKKy8qIENsb3NlIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by8gaW50ZXJmYWNlLiAqLworc3RhdGljIGludCB0b21veW9fY2xvc2VfY29udHJvbChzdHJ1Y3QgZmlsZSAqZmlsZSk7CisvKiBSZWFkIG9wZXJhdGlvbiBmb3IgL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvLyBpbnRlcmZhY2UuICovCitzdGF0aWMgaW50IHRvbW95b19yZWFkX2NvbnRyb2woc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWZmZXIsCisJCQkgICAgICAgY29uc3QgaW50IGJ1ZmZlcl9sZW4pOworLyogV3JpdGUgb3BlcmF0aW9uIGZvciAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vIGludGVyZmFjZS4gKi8KK3N0YXRpYyBpbnQgdG9tb3lvX3dyaXRlX2NvbnRyb2woc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCisJCQkJY29uc3QgaW50IGJ1ZmZlcl9sZW4pOworCisvKioKKyAqIHRvbW95b19pc19ieXRlX3JhbmdlIC0gQ2hlY2sgd2hldGhlciB0aGUgc3RyaW5nIGlzYSBcb29vIHN0eWxlIG9jdGFsIHZhbHVlLgorICoKKyAqIEBzdHI6IFBvaW50ZXIgdG8gdGhlIHN0cmluZy4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgQHN0ciBpcyBhIFxvb28gc3R5bGUgb2N0YWwgdmFsdWUsIGZhbHNlIG90aGVyd2lzZS4KKyAqCisgKiBUT01PWU8gdXNlcyBcb29vIHN0eWxlIHJlcHJlc2VudGF0aW9uIGZvciAweDAxIC0gMHgyMCBhbmQgMHg3RiAtIDB4RkYuCisgKiBUaGlzIGZ1bmN0aW9uIHZlcmlmaWVzIHRoYXQgXG9vbyBpcyBpbiB2YWxpZCByYW5nZS4KKyAqLworc3RhdGljIGlubGluZSBib29sIHRvbW95b19pc19ieXRlX3JhbmdlKGNvbnN0IGNoYXIgKnN0cikKK3sKKwlyZXR1cm4gKnN0ciA+PSAnMCcgJiYgKnN0cisrIDw9ICczJyAmJgorCQkqc3RyID49ICcwJyAmJiAqc3RyKysgPD0gJzcnICYmCisJCSpzdHIgPj0gJzAnICYmICpzdHIgPD0gJzcnOworfQorCisvKioKKyAqIHRvbW95b19pc19hbHBoYWJldF9jaGFyIC0gQ2hlY2sgd2hldGhlciB0aGUgY2hhcmFjdGVyIGlzIGFuIGFscGhhYmV0LgorICoKKyAqIEBjOiBUaGUgY2hhcmFjdGVyIHRvIGNoZWNrLgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiBAYyBpcyBhbiBhbHBoYWJldCBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGlubGluZSBib29sIHRvbW95b19pc19hbHBoYWJldF9jaGFyKGNvbnN0IGNoYXIgYykKK3sKKwlyZXR1cm4gKGMgPj0gJ0EnICYmIGMgPD0gJ1onKSB8fCAoYyA+PSAnYScgJiYgYyA8PSAneicpOworfQorCisvKioKKyAqIHRvbW95b19tYWtlX2J5dGUgLSBNYWtlIGJ5dGUgdmFsdWUgZnJvbSB0aHJlZSBvY3RhbCBjaGFyYWN0ZXJzLgorICoKKyAqIEBjMTogVGhlIGZpcnN0IGNoYXJhY3Rlci4KKyAqIEBjMjogVGhlIHNlY29uZCBjaGFyYWN0ZXIuCisgKiBAYzM6IFRoZSB0aGlyZCBjaGFyYWN0ZXIuCisgKgorICogUmV0dXJucyBieXRlIHZhbHVlLgorICovCitzdGF0aWMgaW5saW5lIHU4IHRvbW95b19tYWtlX2J5dGUoY29uc3QgdTggYzEsIGNvbnN0IHU4IGMyLCBjb25zdCB1OCBjMykKK3sKKwlyZXR1cm4gKChjMSAtICcwJykgPDwgNikgKyAoKGMyIC0gJzAnKSA8PCAzKSArIChjMyAtICcwJyk7Cit9CisKKy8qKgorICogdG9tb3lvX3N0cl9zdGFydHMgLSBDaGVjayB3aGV0aGVyIHRoZSBnaXZlbiBzdHJpbmcgc3RhcnRzIHdpdGggdGhlIGdpdmVuIGtleXdvcmQuCisgKgorICogQHNyYzogIFBvaW50ZXIgdG8gcG9pbnRlciB0byB0aGUgc3RyaW5nLgorICogQGZpbmQ6IFBvaW50ZXIgdG8gdGhlIGtleXdvcmQuCisgKgorICogUmV0dXJucyB0cnVlIGlmIEBzcmMgc3RhcnRzIHdpdGggQGZpbmQsIGZhbHNlIG90aGVyd2lzZS4KKyAqCisgKiBUaGUgQHNyYyBpcyB1cGRhdGVkIHRvIHBvaW50IHRoZSBmaXJzdCBjaGFyYWN0ZXIgYWZ0ZXIgdGhlIEBmaW5kCisgKiBpZiBAc3JjIHN0YXJ0cyB3aXRoIEBmaW5kLgorICovCitzdGF0aWMgYm9vbCB0b21veW9fc3RyX3N0YXJ0cyhjaGFyICoqc3JjLCBjb25zdCBjaGFyICpmaW5kKQoreworCWNvbnN0IGludCBsZW4gPSBzdHJsZW4oZmluZCk7CisJY2hhciAqdG1wID0gKnNyYzsKKworCWlmIChzdHJuY21wKHRtcCwgZmluZCwgbGVuKSkKKwkJcmV0dXJuIGZhbHNlOworCXRtcCArPSBsZW47CisJKnNyYyA9IHRtcDsKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoqCisgKiB0b21veW9fbm9ybWFsaXplX2xpbmUgLSBGb3JtYXQgc3RyaW5nLgorICoKKyAqIEBidWZmZXI6IFRoZSBsaW5lIHRvIG5vcm1hbGl6ZS4KKyAqCisgKiBMZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlcyBhcmUgcmVtb3ZlZC4KKyAqIE11bHRpcGxlIHdoaXRlc3BhY2VzIGFyZSBwYWNrZWQgaW50byBzaW5nbGUgc3BhY2UuCisgKgorICogUmV0dXJucyBub3RoaW5nLgorICovCitzdGF0aWMgdm9pZCB0b21veW9fbm9ybWFsaXplX2xpbmUodW5zaWduZWQgY2hhciAqYnVmZmVyKQoreworCXVuc2lnbmVkIGNoYXIgKnNwID0gYnVmZmVyOworCXVuc2lnbmVkIGNoYXIgKmRwID0gYnVmZmVyOworCWJvb2wgZmlyc3QgPSB0cnVlOworCisJd2hpbGUgKHRvbW95b19pc19pbnZhbGlkKCpzcCkpCisJCXNwKys7CisJd2hpbGUgKCpzcCkgeworCQlpZiAoIWZpcnN0KQorCQkJKmRwKysgPSAnICc7CisJCWZpcnN0ID0gZmFsc2U7CisJCXdoaWxlICh0b21veW9faXNfdmFsaWQoKnNwKSkKKwkJCSpkcCsrID0gKnNwKys7CisJCXdoaWxlICh0b21veW9faXNfaW52YWxpZCgqc3ApKQorCQkJc3ArKzsKKwl9CisJKmRwID0gJ1wwJzsKK30KKworLyoqCisgKiB0b21veW9faXNfY29ycmVjdF9wYXRoIC0gVmFsaWRhdGUgYSBwYXRobmFtZS4KKyAqIEBmaWxlbmFtZTogICAgIFRoZSBwYXRobmFtZSB0byBjaGVjay4KKyAqIEBzdGFydF90eXBlOiAgIFNob3VsZCB0aGUgcGF0aG5hbWUgc3RhcnQgd2l0aCAnLyc/CisgKiAgICAgICAgICAgICAgICAxID0gbXVzdCAvIC0xID0gbXVzdCBub3QgLyAwID0gZG9uJ3QgY2FyZQorICogQHBhdHRlcm5fdHlwZTogQ2FuIHRoZSBwYXRobmFtZSBjb250YWluIGEgd2lsZGNhcmQ/CisgKiAgICAgICAgICAgICAgICAxID0gbXVzdCAvIC0xID0gbXVzdCBub3QgLyAwID0gZG9uJ3QgY2FyZQorICogQGVuZF90eXBlOiAgICAgU2hvdWxkIHRoZSBwYXRobmFtZSBlbmQgd2l0aCAnLyc/CisgKiAgICAgICAgICAgICAgICAxID0gbXVzdCAvIC0xID0gbXVzdCBub3QgLyAwID0gZG9uJ3QgY2FyZQorICogQGZ1bmN0aW9uOiAgICAgVGhlIG5hbWUgb2YgZnVuY3Rpb24gY2FsbGluZyBtZS4KKyAqCisgKiBDaGVjayB3aGV0aGVyIHRoZSBnaXZlbiBmaWxlbmFtZSBmb2xsb3dzIHRoZSBuYW1pbmcgcnVsZXMuCisgKiBSZXR1cm5zIHRydWUgaWYgQGZpbGVuYW1lIGZvbGxvd3MgdGhlIG5hbWluZyBydWxlcywgZmFsc2Ugb3RoZXJ3aXNlLgorICovCitib29sIHRvbW95b19pc19jb3JyZWN0X3BhdGgoY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IHM4IHN0YXJ0X3R5cGUsCisJCQkgICAgY29uc3QgczggcGF0dGVybl90eXBlLCBjb25zdCBzOCBlbmRfdHlwZSwKKwkJCSAgICBjb25zdCBjaGFyICpmdW5jdGlvbikKK3sKKwlib29sIGNvbnRhaW5zX3BhdHRlcm4gPSBmYWxzZTsKKwl1bnNpZ25lZCBjaGFyIGM7CisJdW5zaWduZWQgY2hhciBkOworCXVuc2lnbmVkIGNoYXIgZTsKKwljb25zdCBjaGFyICpvcmlnaW5hbF9maWxlbmFtZSA9IGZpbGVuYW1lOworCisJaWYgKCFmaWxlbmFtZSkKKwkJZ290byBvdXQ7CisJYyA9ICpmaWxlbmFtZTsKKwlpZiAoc3RhcnRfdHlwZSA9PSAxKSB7IC8qIE11c3Qgc3RhcnQgd2l0aCAnLycgKi8KKwkJaWYgKGMgIT0gJy8nKQorCQkJZ290byBvdXQ7CisJfSBlbHNlIGlmIChzdGFydF90eXBlID09IC0xKSB7IC8qIE11c3Qgbm90IHN0YXJ0IHdpdGggJy8nICovCisJCWlmIChjID09ICcvJykKKwkJCWdvdG8gb3V0OworCX0KKwlpZiAoYykKKwkJYyA9ICooZmlsZW5hbWUgKyBzdHJsZW4oZmlsZW5hbWUpIC0gMSk7CisJaWYgKGVuZF90eXBlID09IDEpIHsgLyogTXVzdCBlbmQgd2l0aCAnLycgKi8KKwkJaWYgKGMgIT0gJy8nKQorCQkJZ290byBvdXQ7CisJfSBlbHNlIGlmIChlbmRfdHlwZSA9PSAtMSkgeyAvKiBNdXN0IG5vdCBlbmQgd2l0aCAnLycgKi8KKwkJaWYgKGMgPT0gJy8nKQorCQkJZ290byBvdXQ7CisJfQorCXdoaWxlICgoYyA9ICpmaWxlbmFtZSsrKSAhPSAnXDAnKSB7CisJCWlmIChjID09ICdcXCcpIHsKKwkJCXN3aXRjaCAoKGMgPSAqZmlsZW5hbWUrKykpIHsKKwkJCWNhc2UgJ1xcJzogIC8qICJcXCIgKi8KKwkJCQljb250aW51ZTsKKwkJCWNhc2UgJyQnOiAgIC8qICJcJCIgKi8KKwkJCWNhc2UgJysnOiAgIC8qICJcKyIgKi8KKwkJCWNhc2UgJz8nOiAgIC8qICJcPyIgKi8KKwkJCWNhc2UgJyonOiAgIC8qICJcKiIgKi8KKwkJCWNhc2UgJ0AnOiAgIC8qICJcQCIgKi8KKwkJCWNhc2UgJ3gnOiAgIC8qICJceCIgKi8KKwkJCWNhc2UgJ1gnOiAgIC8qICJcWCIgKi8KKwkJCWNhc2UgJ2EnOiAgIC8qICJcYSIgKi8KKwkJCWNhc2UgJ0EnOiAgIC8qICJcQSIgKi8KKwkJCWNhc2UgJy0nOiAgIC8qICJcLSIgKi8KKwkJCQlpZiAocGF0dGVybl90eXBlID09IC0xKQorCQkJCQlicmVhazsgLyogTXVzdCBub3QgY29udGFpbiBwYXR0ZXJuICovCisJCQkJY29udGFpbnNfcGF0dGVybiA9IHRydWU7CisJCQkJY29udGludWU7CisJCQljYXNlICcwJzogICAvKiAiXG9vbyIgKi8KKwkJCWNhc2UgJzEnOgorCQkJY2FzZSAnMic6CisJCQljYXNlICczJzoKKwkJCQlkID0gKmZpbGVuYW1lKys7CisJCQkJaWYgKGQgPCAnMCcgfHwgZCA+ICc3JykKKwkJCQkJYnJlYWs7CisJCQkJZSA9ICpmaWxlbmFtZSsrOworCQkJCWlmIChlIDwgJzAnIHx8IGUgPiAnNycpCisJCQkJCWJyZWFrOworCQkJCWMgPSB0b21veW9fbWFrZV9ieXRlKGMsIGQsIGUpOworCQkJCWlmICh0b21veW9faXNfaW52YWxpZChjKSkKKwkJCQkJY29udGludWU7IC8qIHBhdHRlcm4gaXMgbm90IFwwMDAgKi8KKwkJCX0KKwkJCWdvdG8gb3V0OworCQl9IGVsc2UgaWYgKHRvbW95b19pc19pbnZhbGlkKGMpKSB7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKwlpZiAocGF0dGVybl90eXBlID09IDEpIHsgLyogTXVzdCBjb250YWluIHBhdHRlcm4gKi8KKwkJaWYgKCFjb250YWluc19wYXR0ZXJuKQorCQkJZ290byBvdXQ7CisJfQorCXJldHVybiB0cnVlOworIG91dDoKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEludmFsaWQgcGF0aG5hbWUgJyVzJ1xuIiwgZnVuY3Rpb24sCisJICAgICAgIG9yaWdpbmFsX2ZpbGVuYW1lKTsKKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qKgorICogdG9tb3lvX2lzX2NvcnJlY3RfZG9tYWluIC0gQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gZG9tYWlubmFtZSBmb2xsb3dzIHRoZSBuYW1pbmcgcnVsZXMuCisgKiBAZG9tYWlubmFtZTogICBUaGUgZG9tYWlubmFtZSB0byBjaGVjay4KKyAqIEBmdW5jdGlvbjogICAgIFRoZSBuYW1lIG9mIGZ1bmN0aW9uIGNhbGxpbmcgbWUuCisgKgorICogUmV0dXJucyB0cnVlIGlmIEBkb21haW5uYW1lIGZvbGxvd3MgdGhlIG5hbWluZyBydWxlcywgZmFsc2Ugb3RoZXJ3aXNlLgorICovCitib29sIHRvbW95b19pc19jb3JyZWN0X2RvbWFpbihjb25zdCB1bnNpZ25lZCBjaGFyICpkb21haW5uYW1lLAorCQkJICAgICAgY29uc3QgY2hhciAqZnVuY3Rpb24pCit7CisJdW5zaWduZWQgY2hhciBjOworCXVuc2lnbmVkIGNoYXIgZDsKKwl1bnNpZ25lZCBjaGFyIGU7CisJY29uc3QgY2hhciAqb3JnX2RvbWFpbm5hbWUgPSBkb21haW5uYW1lOworCisJaWYgKCFkb21haW5uYW1lIHx8IHN0cm5jbXAoZG9tYWlubmFtZSwgVE9NT1lPX1JPT1RfTkFNRSwKKwkJCQkgICBUT01PWU9fUk9PVF9OQU1FX0xFTikpCisJCWdvdG8gb3V0OworCWRvbWFpbm5hbWUgKz0gVE9NT1lPX1JPT1RfTkFNRV9MRU47CisJaWYgKCEqZG9tYWlubmFtZSkKKwkJcmV0dXJuIHRydWU7CisJZG8geworCQlpZiAoKmRvbWFpbm5hbWUrKyAhPSAnICcpCisJCQlnb3RvIG91dDsKKwkJaWYgKCpkb21haW5uYW1lKysgIT0gJy8nKQorCQkJZ290byBvdXQ7CisJCXdoaWxlICgoYyA9ICpkb21haW5uYW1lKSAhPSAnXDAnICYmIGMgIT0gJyAnKSB7CisJCQlkb21haW5uYW1lKys7CisJCQlpZiAoYyA9PSAnXFwnKSB7CisJCQkJYyA9ICpkb21haW5uYW1lKys7CisJCQkJc3dpdGNoICgoYykpIHsKKwkJCQljYXNlICdcXCc6ICAvKiAiXFwiICovCisJCQkJCWNvbnRpbnVlOworCQkJCWNhc2UgJzAnOiAgIC8qICJcb29vIiAqLworCQkJCWNhc2UgJzEnOgorCQkJCWNhc2UgJzInOgorCQkJCWNhc2UgJzMnOgorCQkJCQlkID0gKmRvbWFpbm5hbWUrKzsKKwkJCQkJaWYgKGQgPCAnMCcgfHwgZCA+ICc3JykKKwkJCQkJCWJyZWFrOworCQkJCQllID0gKmRvbWFpbm5hbWUrKzsKKwkJCQkJaWYgKGUgPCAnMCcgfHwgZSA+ICc3JykKKwkJCQkJCWJyZWFrOworCQkJCQljID0gdG9tb3lvX21ha2VfYnl0ZShjLCBkLCBlKTsKKwkJCQkJaWYgKHRvbW95b19pc19pbnZhbGlkKGMpKQorCQkJCQkJLyogcGF0dGVybiBpcyBub3QgXDAwMCAqLworCQkJCQkJY29udGludWU7CisJCQkJfQorCQkJCWdvdG8gb3V0OworCQkJfSBlbHNlIGlmICh0b21veW9faXNfaW52YWxpZChjKSkgeworCQkJCWdvdG8gb3V0OworCQkJfQorCQl9CisJfSB3aGlsZSAoKmRvbWFpbm5hbWUpOworCXJldHVybiB0cnVlOworIG91dDoKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEludmFsaWQgZG9tYWlubmFtZSAnJXMnXG4iLCBmdW5jdGlvbiwKKwkgICAgICAgb3JnX2RvbWFpbm5hbWUpOworCXJldHVybiBmYWxzZTsKK30KKworLyoqCisgKiB0b21veW9faXNfZG9tYWluX2RlZiAtIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIHRva2VuIGNhbiBiZSBhIGRvbWFpbm5hbWUuCisgKgorICogQGJ1ZmZlcjogVGhlIHRva2VuIHRvIGNoZWNrLgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiBAYnVmZmVyIHBvc3NpYmx5IGJlIGEgZG9tYWlubmFtZSwgZmFsc2Ugb3RoZXJ3aXNlLgorICovCitib29sIHRvbW95b19pc19kb21haW5fZGVmKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZmZlcikKK3sKKwlyZXR1cm4gIXN0cm5jbXAoYnVmZmVyLCBUT01PWU9fUk9PVF9OQU1FLCBUT01PWU9fUk9PVF9OQU1FX0xFTik7Cit9CisKKy8qKgorICogdG9tb3lvX2ZpbmRfZG9tYWluIC0gRmluZCBhIGRvbWFpbiBieSB0aGUgZ2l2ZW4gbmFtZS4KKyAqCisgKiBAZG9tYWlubmFtZTogVGhlIGRvbWFpbm5hbWUgdG8gZmluZC4KKyAqCisgKiBDYWxsZXIgbXVzdCBjYWxsIGRvd25fcmVhZCgmdG9tb3lvX2RvbWFpbl9saXN0X2xvY2spOyBvcgorICogZG93bl93cml0ZSgmdG9tb3lvX2RvbWFpbl9saXN0X2xvY2spOyAuCisgKgorICogUmV0dXJucyBwb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIiBpZiBmb3VuZCwgTlVMTCBvdGhlcndpc2UuCisgKi8KK3N0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKnRvbW95b19maW5kX2RvbWFpbihjb25zdCBjaGFyICpkb21haW5uYW1lKQoreworCXN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbjsKKwlzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyBuYW1lOworCisJbmFtZS5uYW1lID0gZG9tYWlubmFtZTsKKwl0b21veW9fZmlsbF9wYXRoX2luZm8oJm5hbWUpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoZG9tYWluLCAmdG9tb3lvX2RvbWFpbl9saXN0LCBsaXN0KSB7CisJCWlmICghZG9tYWluLT5pc19kZWxldGVkICYmCisJCSAgICAhdG9tb3lvX3BhdGhjbXAoJm5hbWUsIGRvbWFpbi0+ZG9tYWlubmFtZSkpCisJCQlyZXR1cm4gZG9tYWluOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworLyoqCisgKiB0b21veW9fcGF0aF9kZXB0aCAtIEV2YWx1YXRlIHRoZSBudW1iZXIgb2YgJy8nIGluIGEgc3RyaW5nLgorICoKKyAqIEBwYXRobmFtZTogVGhlIHN0cmluZyB0byBldmFsdWF0ZS4KKyAqCisgKiBSZXR1cm5zIHBhdGggZGVwdGggb2YgdGhlIHN0cmluZy4KKyAqCisgKiBJIHNjb3JlIDIgZm9yIGVhY2ggb2YgdGhlICcvJyBpbiB0aGUgQHBhdGhuYW1lCisgKiBhbmQgc2NvcmUgMSBpZiB0aGUgQHBhdGhuYW1lIGVuZHMgd2l0aCAnLycuCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX3BhdGhfZGVwdGgoY29uc3QgY2hhciAqcGF0aG5hbWUpCit7CisJaW50IGkgPSAwOworCisJaWYgKHBhdGhuYW1lKSB7CisJCWNvbnN0IGNoYXIgKmVwID0gcGF0aG5hbWUgKyBzdHJsZW4ocGF0aG5hbWUpOworCQlpZiAocGF0aG5hbWUgPCBlcC0tKSB7CisJCQlpZiAoKmVwICE9ICcvJykKKwkJCQlpKys7CisJCQl3aGlsZSAocGF0aG5hbWUgPD0gZXApCisJCQkJaWYgKCplcC0tID09ICcvJykKKwkJCQkJaSArPSAyOworCQl9CisJfQorCXJldHVybiBpOworfQorCisvKioKKyAqIHRvbW95b19jb25zdF9wYXJ0X2xlbmd0aCAtIEV2YWx1YXRlIHRoZSBpbml0aWFsIGxlbmd0aCB3aXRob3V0IGEgcGF0dGVybiBpbiBhIHRva2VuLgorICoKKyAqIEBmaWxlbmFtZTogVGhlIHN0cmluZyB0byBldmFsdWF0ZS4KKyAqCisgKiBSZXR1cm5zIHRoZSBpbml0aWFsIGxlbmd0aCB3aXRob3V0IGEgcGF0dGVybiBpbiBAZmlsZW5hbWUuCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX2NvbnN0X3BhcnRfbGVuZ3RoKGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworCWNoYXIgYzsKKwlpbnQgbGVuID0gMDsKKworCWlmICghZmlsZW5hbWUpCisJCXJldHVybiAwOworCXdoaWxlICgoYyA9ICpmaWxlbmFtZSsrKSAhPSAnXDAnKSB7CisJCWlmIChjICE9ICdcXCcpIHsKKwkJCWxlbisrOworCQkJY29udGludWU7CisJCX0KKwkJYyA9ICpmaWxlbmFtZSsrOworCQlzd2l0Y2ggKGMpIHsKKwkJY2FzZSAnXFwnOiAgLyogIlxcIiAqLworCQkJbGVuICs9IDI7CisJCQljb250aW51ZTsKKwkJY2FzZSAnMCc6ICAgLyogIlxvb28iICovCisJCWNhc2UgJzEnOgorCQljYXNlICcyJzoKKwkJY2FzZSAnMyc6CisJCQljID0gKmZpbGVuYW1lKys7CisJCQlpZiAoYyA8ICcwJyB8fCBjID4gJzcnKQorCQkJCWJyZWFrOworCQkJYyA9ICpmaWxlbmFtZSsrOworCQkJaWYgKGMgPCAnMCcgfHwgYyA+ICc3JykKKwkJCQlicmVhazsKKwkJCWxlbiArPSA0OworCQkJY29udGludWU7CisJCX0KKwkJYnJlYWs7CisJfQorCXJldHVybiBsZW47Cit9CisKKy8qKgorICogdG9tb3lvX2ZpbGxfcGF0aF9pbmZvIC0gRmlsbCBpbiAic3RydWN0IHRvbW95b19wYXRoX2luZm8iIG1lbWJlcnMuCisgKgorICogQHB0cjogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19wYXRoX2luZm8iIHRvIGZpbGwgaW4uCisgKgorICogVGhlIGNhbGxlciBzZXRzICJzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyItPm5hbWUuCisgKi8KK3ZvaWQgdG9tb3lvX2ZpbGxfcGF0aF9pbmZvKHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpwdHIpCit7CisJY29uc3QgY2hhciAqbmFtZSA9IHB0ci0+bmFtZTsKKwljb25zdCBpbnQgbGVuID0gc3RybGVuKG5hbWUpOworCisJcHRyLT50b3RhbF9sZW4gPSBsZW47CisJcHRyLT5jb25zdF9sZW4gPSB0b21veW9fY29uc3RfcGFydF9sZW5ndGgobmFtZSk7CisJcHRyLT5pc19kaXIgPSBsZW4gJiYgKG5hbWVbbGVuIC0gMV0gPT0gJy8nKTsKKwlwdHItPmlzX3BhdHRlcm5lZCA9IChwdHItPmNvbnN0X2xlbiA8IGxlbik7CisJcHRyLT5oYXNoID0gZnVsbF9uYW1lX2hhc2gobmFtZSwgbGVuKTsKKwlwdHItPmRlcHRoID0gdG9tb3lvX3BhdGhfZGVwdGgobmFtZSk7Cit9CisKKy8qKgorICogdG9tb3lvX2ZpbGVfbWF0Y2hlc190b19wYXR0ZXJuMiAtIFBhdHRlcm4gbWF0Y2hpbmcgd2l0aG91dCAnLycgY2hhcmFjdGVyCisgKiBhbmQgIlwtIiBwYXR0ZXJuLgorICoKKyAqIEBmaWxlbmFtZTogICAgIFRoZSBzdGFydCBvZiBzdHJpbmcgdG8gY2hlY2suCisgKiBAZmlsZW5hbWVfZW5kOiBUaGUgZW5kIG9mIHN0cmluZyB0byBjaGVjay4KKyAqIEBwYXR0ZXJuOiAgICAgIFRoZSBzdGFydCBvZiBwYXR0ZXJuIHRvIGNvbXBhcmUuCisgKiBAcGF0dGVybl9lbmQ6ICBUaGUgZW5kIG9mIHBhdHRlcm4gdG8gY29tcGFyZS4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgQGZpbGVuYW1lIG1hdGNoZXMgQHBhdHRlcm4sIGZhbHNlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGJvb2wgdG9tb3lvX2ZpbGVfbWF0Y2hlc190b19wYXR0ZXJuMihjb25zdCBjaGFyICpmaWxlbmFtZSwKKwkJCQkJICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lX2VuZCwKKwkJCQkJICAgIGNvbnN0IGNoYXIgKnBhdHRlcm4sCisJCQkJCSAgICBjb25zdCBjaGFyICpwYXR0ZXJuX2VuZCkKK3sKKwl3aGlsZSAoZmlsZW5hbWUgPCBmaWxlbmFtZV9lbmQgJiYgcGF0dGVybiA8IHBhdHRlcm5fZW5kKSB7CisJCWNoYXIgYzsKKwkJaWYgKCpwYXR0ZXJuICE9ICdcXCcpIHsKKwkJCWlmICgqZmlsZW5hbWUrKyAhPSAqcGF0dGVybisrKQorCQkJCXJldHVybiBmYWxzZTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWMgPSAqZmlsZW5hbWU7CisJCXBhdHRlcm4rKzsKKwkJc3dpdGNoICgqcGF0dGVybikgeworCQkJaW50IGk7CisJCQlpbnQgajsKKwkJY2FzZSAnPyc6CisJCQlpZiAoYyA9PSAnLycpIHsKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9IGVsc2UgaWYgKGMgPT0gJ1xcJykgeworCQkJCWlmIChmaWxlbmFtZVsxXSA9PSAnXFwnKQorCQkJCQlmaWxlbmFtZSsrOworCQkJCWVsc2UgaWYgKHRvbW95b19pc19ieXRlX3JhbmdlKGZpbGVuYW1lICsgMSkpCisJCQkJCWZpbGVuYW1lICs9IDM7CisJCQkJZWxzZQorCQkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAnXFwnOgorCQkJaWYgKGMgIT0gJ1xcJykKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQlpZiAoKisrZmlsZW5hbWUgIT0gJ1xcJykKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQlicmVhazsKKwkJY2FzZSAnKyc6CisJCQlpZiAoIWlzZGlnaXQoYykpCisJCQkJcmV0dXJuIGZhbHNlOworCQkJYnJlYWs7CisJCWNhc2UgJ3gnOgorCQkJaWYgKCFpc3hkaWdpdChjKSkKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQlicmVhazsKKwkJY2FzZSAnYSc6CisJCQlpZiAoIXRvbW95b19pc19hbHBoYWJldF9jaGFyKGMpKQorCQkJCXJldHVybiBmYWxzZTsKKwkJCWJyZWFrOworCQljYXNlICcwJzoKKwkJY2FzZSAnMSc6CisJCWNhc2UgJzInOgorCQljYXNlICczJzoKKwkJCWlmIChjID09ICdcXCcgJiYgdG9tb3lvX2lzX2J5dGVfcmFuZ2UoZmlsZW5hbWUgKyAxKQorCQkJICAgICYmIHN0cm5jbXAoZmlsZW5hbWUgKyAxLCBwYXR0ZXJuLCAzKSA9PSAwKSB7CisJCQkJZmlsZW5hbWUgKz0gMzsKKwkJCQlwYXR0ZXJuICs9IDI7CisJCQkJYnJlYWs7CisJCQl9CisJCQlyZXR1cm4gZmFsc2U7IC8qIE5vdCBtYXRjaGVkLiAqLworCQljYXNlICcqJzoKKwkJY2FzZSAnQCc6CisJCQlmb3IgKGkgPSAwOyBpIDw9IGZpbGVuYW1lX2VuZCAtIGZpbGVuYW1lOyBpKyspIHsKKwkJCQlpZiAodG9tb3lvX2ZpbGVfbWF0Y2hlc190b19wYXR0ZXJuMigKKwkJCQkJCSAgICBmaWxlbmFtZSArIGksIGZpbGVuYW1lX2VuZCwKKwkJCQkJCSAgICBwYXR0ZXJuICsgMSwgcGF0dGVybl9lbmQpKQorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQljID0gZmlsZW5hbWVbaV07CisJCQkJaWYgKGMgPT0gJy4nICYmICpwYXR0ZXJuID09ICdAJykKKwkJCQkJYnJlYWs7CisJCQkJaWYgKGMgIT0gJ1xcJykKKwkJCQkJY29udGludWU7CisJCQkJaWYgKGZpbGVuYW1lW2kgKyAxXSA9PSAnXFwnKQorCQkJCQlpKys7CisJCQkJZWxzZSBpZiAodG9tb3lvX2lzX2J5dGVfcmFuZ2UoZmlsZW5hbWUgKyBpICsgMSkpCisJCQkJCWkgKz0gMzsKKwkJCQllbHNlCisJCQkJCWJyZWFrOyAvKiBCYWQgcGF0dGVybi4gKi8KKwkJCX0KKwkJCXJldHVybiBmYWxzZTsgLyogTm90IG1hdGNoZWQuICovCisJCWRlZmF1bHQ6CisJCQlqID0gMDsKKwkJCWMgPSAqcGF0dGVybjsKKwkJCWlmIChjID09ICckJykgeworCQkJCXdoaWxlIChpc2RpZ2l0KGZpbGVuYW1lW2pdKSkKKwkJCQkJaisrOworCQkJfSBlbHNlIGlmIChjID09ICdYJykgeworCQkJCXdoaWxlIChpc3hkaWdpdChmaWxlbmFtZVtqXSkpCisJCQkJCWorKzsKKwkJCX0gZWxzZSBpZiAoYyA9PSAnQScpIHsKKwkJCQl3aGlsZSAodG9tb3lvX2lzX2FscGhhYmV0X2NoYXIoZmlsZW5hbWVbal0pKQorCQkJCQlqKys7CisJCQl9CisJCQlmb3IgKGkgPSAxOyBpIDw9IGo7IGkrKykgeworCQkJCWlmICh0b21veW9fZmlsZV9tYXRjaGVzX3RvX3BhdHRlcm4yKAorCQkJCQkJICAgIGZpbGVuYW1lICsgaSwgZmlsZW5hbWVfZW5kLAorCQkJCQkJICAgIHBhdHRlcm4gKyAxLCBwYXR0ZXJuX2VuZCkpCisJCQkJCXJldHVybiB0cnVlOworCQkJfQorCQkJcmV0dXJuIGZhbHNlOyAvKiBOb3QgbWF0Y2hlZCBvciBiYWQgcGF0dGVybi4gKi8KKwkJfQorCQlmaWxlbmFtZSsrOworCQlwYXR0ZXJuKys7CisJfQorCXdoaWxlICgqcGF0dGVybiA9PSAnXFwnICYmCisJICAgICAgICgqKHBhdHRlcm4gKyAxKSA9PSAnKicgfHwgKihwYXR0ZXJuICsgMSkgPT0gJ0AnKSkKKwkJcGF0dGVybiArPSAyOworCXJldHVybiBmaWxlbmFtZSA9PSBmaWxlbmFtZV9lbmQgJiYgcGF0dGVybiA9PSBwYXR0ZXJuX2VuZDsKK30KKworLyoqCisgKiB0b21veW9fZmlsZV9tYXRjaGVzX3RvX3BhdHRlcm4gLSBQYXR0ZXJuIG1hdGNoaW5nIHdpdGhvdXQgd2l0aG91dCAnLycgY2hhcmFjdGVyLgorICoKKyAqIEBmaWxlbmFtZTogICAgIFRoZSBzdGFydCBvZiBzdHJpbmcgdG8gY2hlY2suCisgKiBAZmlsZW5hbWVfZW5kOiBUaGUgZW5kIG9mIHN0cmluZyB0byBjaGVjay4KKyAqIEBwYXR0ZXJuOiAgICAgIFRoZSBzdGFydCBvZiBwYXR0ZXJuIHRvIGNvbXBhcmUuCisgKiBAcGF0dGVybl9lbmQ6ICBUaGUgZW5kIG9mIHBhdHRlcm4gdG8gY29tcGFyZS4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgQGZpbGVuYW1lIG1hdGNoZXMgQHBhdHRlcm4sIGZhbHNlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGJvb2wgdG9tb3lvX2ZpbGVfbWF0Y2hlc190b19wYXR0ZXJuKGNvbnN0IGNoYXIgKmZpbGVuYW1lLAorCQkJCQkgICBjb25zdCBjaGFyICpmaWxlbmFtZV9lbmQsCisJCQkJCSAgIGNvbnN0IGNoYXIgKnBhdHRlcm4sCisJCQkJCSAgIGNvbnN0IGNoYXIgKnBhdHRlcm5fZW5kKQoreworCWNvbnN0IGNoYXIgKnBhdHRlcm5fc3RhcnQgPSBwYXR0ZXJuOworCWJvb2wgZmlyc3QgPSB0cnVlOworCWJvb2wgcmVzdWx0OworCisJd2hpbGUgKHBhdHRlcm4gPCBwYXR0ZXJuX2VuZCAtIDEpIHsKKwkJLyogU3BsaXQgYXQgIlwtIiBwYXR0ZXJuLiAqLworCQlpZiAoKnBhdHRlcm4rKyAhPSAnXFwnIHx8ICpwYXR0ZXJuKysgIT0gJy0nKQorCQkJY29udGludWU7CisJCXJlc3VsdCA9IHRvbW95b19maWxlX21hdGNoZXNfdG9fcGF0dGVybjIoZmlsZW5hbWUsCisJCQkJCQkJIGZpbGVuYW1lX2VuZCwKKwkJCQkJCQkgcGF0dGVybl9zdGFydCwKKwkJCQkJCQkgcGF0dGVybiAtIDIpOworCQlpZiAoZmlyc3QpCisJCQlyZXN1bHQgPSAhcmVzdWx0OworCQlpZiAocmVzdWx0KQorCQkJcmV0dXJuIGZhbHNlOworCQlmaXJzdCA9IGZhbHNlOworCQlwYXR0ZXJuX3N0YXJ0ID0gcGF0dGVybjsKKwl9CisJcmVzdWx0ID0gdG9tb3lvX2ZpbGVfbWF0Y2hlc190b19wYXR0ZXJuMihmaWxlbmFtZSwgZmlsZW5hbWVfZW5kLAorCQkJCQkJIHBhdHRlcm5fc3RhcnQsIHBhdHRlcm5fZW5kKTsKKwlyZXR1cm4gZmlyc3QgPyByZXN1bHQgOiAhcmVzdWx0OworfQorCisvKioKKyAqIHRvbW95b19wYXRoX21hdGNoZXNfcGF0dGVybiAtIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIGZpbGVuYW1lIG1hdGNoZXMgdGhlIGdpdmVuIHBhdHRlcm4uCisgKiBAZmlsZW5hbWU6IFRoZSBmaWxlbmFtZSB0byBjaGVjay4KKyAqIEBwYXR0ZXJuOiAgVGhlIHBhdHRlcm4gdG8gY29tcGFyZS4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgbWF0Y2hlcywgZmFsc2Ugb3RoZXJ3aXNlLgorICoKKyAqIFRoZSBmb2xsb3dpbmcgcGF0dGVybnMgYXJlIGF2YWlsYWJsZS4KKyAqICAgXFwgICAgIFwgaXRzZWxmLgorICogICBcb29vICAgT2N0YWwgcmVwcmVzZW50YXRpb24gb2YgYSBieXRlLgorICogICBcKiAgICAgTW9yZSB0aGFuIG9yIGVxdWFscyB0byAwIGNoYXJhY3RlciBvdGhlciB0aGFuICcvJy4KKyAqICAgXEAgICAgIE1vcmUgdGhhbiBvciBlcXVhbHMgdG8gMCBjaGFyYWN0ZXIgb3RoZXIgdGhhbiAnLycgb3IgJy4nLgorICogICBcPyAgICAgMSBieXRlIGNoYXJhY3RlciBvdGhlciB0aGFuICcvJy4KKyAqICAgXCQgICAgIE1vcmUgdGhhbiBvciBlcXVhbHMgdG8gMSBkZWNpbWFsIGRpZ2l0LgorICogICBcKyAgICAgMSBkZWNpbWFsIGRpZ2l0LgorICogICBcWCAgICAgTW9yZSB0aGFuIG9yIGVxdWFscyB0byAxIGhleGFkZWNpbWFsIGRpZ2l0LgorICogICBceCAgICAgMSBoZXhhZGVjaW1hbCBkaWdpdC4KKyAqICAgXEEgICAgIE1vcmUgdGhhbiBvciBlcXVhbHMgdG8gMSBhbHBoYWJldCBjaGFyYWN0ZXIuCisgKiAgIFxhICAgICAxIGFscGhhYmV0IGNoYXJhY3Rlci4KKyAqICAgXC0gICAgIFN1YnRyYWN0aW9uIG9wZXJhdG9yLgorICovCitib29sIHRvbW95b19wYXRoX21hdGNoZXNfcGF0dGVybihjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqZmlsZW5hbWUsCisJCQkJIGNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpwYXR0ZXJuKQoreworCS8qCisJICBpZiAoIWZpbGVuYW1lIHx8ICFwYXR0ZXJuKQorCSAgcmV0dXJuIGZhbHNlOworCSovCisJY29uc3QgY2hhciAqZiA9IGZpbGVuYW1lLT5uYW1lOworCWNvbnN0IGNoYXIgKnAgPSBwYXR0ZXJuLT5uYW1lOworCWNvbnN0IGludCBsZW4gPSBwYXR0ZXJuLT5jb25zdF9sZW47CisKKwkvKiBJZiBAcGF0dGVybiBkb2Vzbid0IGNvbnRhaW4gcGF0dGVybiwgSSBjYW4gdXNlIHN0cmNtcCgpLiAqLworCWlmICghcGF0dGVybi0+aXNfcGF0dGVybmVkKQorCQlyZXR1cm4gIXRvbW95b19wYXRoY21wKGZpbGVuYW1lLCBwYXR0ZXJuKTsKKwkvKiBEb250IGNvbXBhcmUgaWYgdGhlIG51bWJlciBvZiAnLycgZGlmZmVycy4gKi8KKwlpZiAoZmlsZW5hbWUtPmRlcHRoICE9IHBhdHRlcm4tPmRlcHRoKQorCQlyZXR1cm4gZmFsc2U7CisJLyogQ29tcGFyZSB0aGUgaW5pdGlhbCBsZW5ndGggd2l0aG91dCBwYXR0ZXJucy4gKi8KKwlpZiAoc3RybmNtcChmLCBwLCBsZW4pKQorCQlyZXR1cm4gZmFsc2U7CisJZiArPSBsZW47CisJcCArPSBsZW47CisJLyogTWFpbiBsb29wLiBDb21wYXJlIGVhY2ggZGlyZWN0b3J5IGNvbXBvbmVudC4gKi8KKwl3aGlsZSAoKmYgJiYgKnApIHsKKwkJY29uc3QgY2hhciAqZl9kZWxpbWl0ZXIgPSBzdHJjaHIoZiwgJy8nKTsKKwkJY29uc3QgY2hhciAqcF9kZWxpbWl0ZXIgPSBzdHJjaHIocCwgJy8nKTsKKwkJaWYgKCFmX2RlbGltaXRlcikKKwkJCWZfZGVsaW1pdGVyID0gZiArIHN0cmxlbihmKTsKKwkJaWYgKCFwX2RlbGltaXRlcikKKwkJCXBfZGVsaW1pdGVyID0gcCArIHN0cmxlbihwKTsKKwkJaWYgKCF0b21veW9fZmlsZV9tYXRjaGVzX3RvX3BhdHRlcm4oZiwgZl9kZWxpbWl0ZXIsCisJCQkJCQkgICAgcCwgcF9kZWxpbWl0ZXIpKQorCQkJcmV0dXJuIGZhbHNlOworCQlmID0gZl9kZWxpbWl0ZXI7CisJCWlmICgqZikKKwkJCWYrKzsKKwkJcCA9IHBfZGVsaW1pdGVyOworCQlpZiAoKnApCisJCQlwKys7CisJfQorCS8qIElnbm9yZSB0cmFpbGluZyAiXCoiIGFuZCAiXEAiIGluIEBwYXR0ZXJuLiAqLworCXdoaWxlICgqcCA9PSAnXFwnICYmCisJICAgICAgICgqKHAgKyAxKSA9PSAnKicgfHwgKihwICsgMSkgPT0gJ0AnKSkKKwkJcCArPSAyOworCXJldHVybiAhKmYgJiYgISpwOworfQorCisvKioKKyAqIHRvbW95b19pb19wcmludGYgLSBUcmFuc2FjdGlvbmFsIHByaW50ZigpIHRvICJzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciIgc3RydWN0dXJlLgorICoKKyAqIEBoZWFkOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciIuCisgKiBAZm10OiAgVGhlIHByaW50ZigpJ3MgZm9ybWF0IHN0cmluZywgZm9sbG93ZWQgYnkgcGFyYW1ldGVycy4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgb3V0cHV0IHdhcyB3cml0dGVuLCBmYWxzZSBvdGhlcndpc2UuCisgKgorICogVGhlIHNucHJpbnRmKCkgd2lsbCB0cnVuY2F0ZSwgYnV0IHRvbW95b19pb19wcmludGYoKSB3b24ndC4KKyAqLworYm9vbCB0b21veW9faW9fcHJpbnRmKHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFyZ3M7CisJaW50IGxlbjsKKwlpbnQgcG9zID0gaGVhZC0+cmVhZF9hdmFpbDsKKwlpbnQgc2l6ZSA9IGhlYWQtPnJlYWRidWZfc2l6ZSAtIHBvczsKKworCWlmIChzaXplIDw9IDApCisJCXJldHVybiBmYWxzZTsKKwl2YV9zdGFydChhcmdzLCBmbXQpOworCWxlbiA9IHZzbnByaW50ZihoZWFkLT5yZWFkX2J1ZiArIHBvcywgc2l6ZSwgZm10LCBhcmdzKTsKKwl2YV9lbmQoYXJncyk7CisJaWYgKHBvcyArIGxlbiA+PSBoZWFkLT5yZWFkYnVmX3NpemUpCisJCXJldHVybiBmYWxzZTsKKwloZWFkLT5yZWFkX2F2YWlsICs9IGxlbjsKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoqCisgKiB0b21veW9fZ2V0X2V4ZSAtIEdldCB0b21veW9fcmVhbHBhdGgoKSBvZiBjdXJyZW50IHByb2Nlc3MuCisgKgorICogUmV0dXJucyB0aGUgdG9tb3lvX3JlYWxwYXRoKCkgb2YgY3VycmVudCBwcm9jZXNzIG9uIHN1Y2Nlc3MsIE5VTEwgb3RoZXJ3aXNlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gdXNlcyB0b21veW9fYWxsb2MoKSwgc28gdGhlIGNhbGxlciBtdXN0IGNhbGwgdG9tb3lvX2ZyZWUoKQorICogaWYgdGhpcyBmdW5jdGlvbiBkaWRuJ3QgcmV0dXJuIE5VTEwuCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICp0b21veW9fZ2V0X2V4ZSh2b2lkKQoreworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC0+bW07CisJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CisJY29uc3QgY2hhciAqY3AgPSBOVUxMOworCisJaWYgKCFtbSkKKwkJcmV0dXJuIE5VTEw7CisJZG93bl9yZWFkKCZtbS0+bW1hcF9zZW0pOworCWZvciAodm1hID0gbW0tPm1tYXA7IHZtYTsgdm1hID0gdm1hLT52bV9uZXh0KSB7CisJCWlmICgodm1hLT52bV9mbGFncyAmIFZNX0VYRUNVVEFCTEUpICYmIHZtYS0+dm1fZmlsZSkgeworCQkJY3AgPSB0b21veW9fcmVhbHBhdGhfZnJvbV9wYXRoKCZ2bWEtPnZtX2ZpbGUtPmZfcGF0aCk7CisJCQlicmVhazsKKwkJfQorCX0KKwl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOworCXJldHVybiBjcDsKK30KKworLyoqCisgKiB0b21veW9fZ2V0X21zZyAtIEdldCB3YXJuaW5nIG1lc3NhZ2UuCisgKgorICogQGlzX2VuZm9yY2U6IElzIGl0IGVuZm9yY2luZyBtb2RlPworICoKKyAqIFJldHVybnMgIkVSUk9SIiBvciAiV0FSTklORyIuCisgKi8KK2NvbnN0IGNoYXIgKnRvbW95b19nZXRfbXNnKGNvbnN0IGJvb2wgaXNfZW5mb3JjZSkKK3sKKwlpZiAoaXNfZW5mb3JjZSkKKwkJcmV0dXJuICJFUlJPUiI7CisJZWxzZQorCQlyZXR1cm4gIldBUk5JTkciOworfQorCisvKioKKyAqIHRvbW95b19jaGVja19mbGFncyAtIENoZWNrIG1vZGUgZm9yIHNwZWNpZmllZCBmdW5jdGlvbmFsaXR5LgorICoKKyAqIEBkb21haW46IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iLgorICogQGluZGV4OiAgVGhlIGZ1bmN0aW9uYWxpdHkgdG8gY2hlY2sgbW9kZS4KKyAqCisgKiBUT01PWU8gY2hlY2tzIG9ubHkgcHJvY2VzcyBjb250ZXh0LgorICogVGhpcyBjb2RlIGRpc2FibGVzIFRPTU9ZTydzIGVuZm9yY2VtZW50IGluIGNhc2UgdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tCisgKiBpbnRlcnJ1cHQgY29udGV4dC4KKyAqLwordW5zaWduZWQgaW50IHRvbW95b19jaGVja19mbGFncyhjb25zdCBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4sCisJCQkJY29uc3QgdTggaW5kZXgpCit7CisJY29uc3QgdTggcHJvZmlsZSA9IGRvbWFpbi0+cHJvZmlsZTsKKworCWlmIChXQVJOX09OKGluX2ludGVycnVwdCgpKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHRvbW95b19wb2xpY3lfbG9hZGVkICYmIGluZGV4IDwgVE9NT1lPX01BWF9DT05UUk9MX0lOREVYCisjaWYgVE9NT1lPX01BWF9QUk9GSUxFUyAhPSAyNTYKKwkJJiYgcHJvZmlsZSA8IFRPTU9ZT19NQVhfUFJPRklMRVMKKyNlbmRpZgorCQkmJiB0b21veW9fcHJvZmlsZV9wdHJbcHJvZmlsZV0gPworCQl0b21veW9fcHJvZmlsZV9wdHJbcHJvZmlsZV0tPnZhbHVlW2luZGV4XSA6IDA7Cit9CisKKy8qKgorICogdG9tb3lvX3ZlcmJvc2VfbW9kZSAtIENoZWNrIHdoZXRoZXIgVE9NT1lPIGlzIHZlcmJvc2UgbW9kZS4KKyAqCisgKiBAZG9tYWluOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIi4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgZG9tYWluIHBvbGljeSB2aW9sYXRpb24gd2FybmluZyBzaG91bGQgYmUgcHJpbnRlZCB0bworICogY29uc29sZS4KKyAqLworYm9vbCB0b21veW9fdmVyYm9zZV9tb2RlKGNvbnN0IHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbikKK3sKKwlyZXR1cm4gdG9tb3lvX2NoZWNrX2ZsYWdzKGRvbWFpbiwgVE9NT1lPX1ZFUkJPU0UpICE9IDA7Cit9CisKKy8qKgorICogdG9tb3lvX2RvbWFpbl9xdW90YV9pc19vayAtIENoZWNrIGZvciBkb21haW4ncyBxdW90YS4KKyAqCisgKiBAZG9tYWluOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIi4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGRvbWFpbiBpcyBub3QgZXhjZWVkZWQgcXVvdGEsIGZhbHNlIG90aGVyd2lzZS4KKyAqLworYm9vbCB0b21veW9fZG9tYWluX3F1b3RhX2lzX29rKHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKiBjb25zdCBkb21haW4pCit7CisJdW5zaWduZWQgaW50IGNvdW50ID0gMDsKKwlzdHJ1Y3QgdG9tb3lvX2FjbF9pbmZvICpwdHI7CisKKwlpZiAoIWRvbWFpbikKKwkJcmV0dXJuIHRydWU7CisJZG93bl9yZWFkKCZ0b21veW9fZG9tYWluX2FjbF9pbmZvX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICZkb21haW4tPmFjbF9pbmZvX2xpc3QsIGxpc3QpIHsKKwkJaWYgKHB0ci0+dHlwZSAmIFRPTU9ZT19BQ0xfREVMRVRFRCkKKwkJCWNvbnRpbnVlOworCQlzd2l0Y2ggKHRvbW95b19hY2xfdHlwZTIocHRyKSkgeworCQkJc3RydWN0IHRvbW95b19zaW5nbGVfcGF0aF9hY2xfcmVjb3JkICphY2wxOworCQkJc3RydWN0IHRvbW95b19kb3VibGVfcGF0aF9hY2xfcmVjb3JkICphY2wyOworCQkJdTE2IHBlcm07CisJCWNhc2UgVE9NT1lPX1RZUEVfU0lOR0xFX1BBVEhfQUNMOgorCQkJYWNsMSA9IGNvbnRhaW5lcl9vZihwdHIsCisJCQkJICAgIHN0cnVjdCB0b21veW9fc2luZ2xlX3BhdGhfYWNsX3JlY29yZCwKKwkJCQkJICAgIGhlYWQpOworCQkJcGVybSA9IGFjbDEtPnBlcm07CisJCQlpZiAocGVybSAmICgxIDw8IFRPTU9ZT19UWVBFX0VYRUNVVEVfQUNMKSkKKwkJCQljb3VudCsrOworCQkJaWYgKHBlcm0gJgorCQkJICAgICgoMSA8PCBUT01PWU9fVFlQRV9SRUFEX0FDTCkgfAorCQkJICAgICAoMSA8PCBUT01PWU9fVFlQRV9XUklURV9BQ0wpKSkKKwkJCQljb3VudCsrOworCQkJaWYgKHBlcm0gJiAoMSA8PCBUT01PWU9fVFlQRV9DUkVBVEVfQUNMKSkKKwkJCQljb3VudCsrOworCQkJaWYgKHBlcm0gJiAoMSA8PCBUT01PWU9fVFlQRV9VTkxJTktfQUNMKSkKKwkJCQljb3VudCsrOworCQkJaWYgKHBlcm0gJiAoMSA8PCBUT01PWU9fVFlQRV9NS0RJUl9BQ0wpKQorCQkJCWNvdW50Kys7CisJCQlpZiAocGVybSAmICgxIDw8IFRPTU9ZT19UWVBFX1JNRElSX0FDTCkpCisJCQkJY291bnQrKzsKKwkJCWlmIChwZXJtICYgKDEgPDwgVE9NT1lPX1RZUEVfTUtGSUZPX0FDTCkpCisJCQkJY291bnQrKzsKKwkJCWlmIChwZXJtICYgKDEgPDwgVE9NT1lPX1RZUEVfTUtTT0NLX0FDTCkpCisJCQkJY291bnQrKzsKKwkJCWlmIChwZXJtICYgKDEgPDwgVE9NT1lPX1RZUEVfTUtCTE9DS19BQ0wpKQorCQkJCWNvdW50Kys7CisJCQlpZiAocGVybSAmICgxIDw8IFRPTU9ZT19UWVBFX01LQ0hBUl9BQ0wpKQorCQkJCWNvdW50Kys7CisJCQlpZiAocGVybSAmICgxIDw8IFRPTU9ZT19UWVBFX1RSVU5DQVRFX0FDTCkpCisJCQkJY291bnQrKzsKKwkJCWlmIChwZXJtICYgKDEgPDwgVE9NT1lPX1RZUEVfU1lNTElOS19BQ0wpKQorCQkJCWNvdW50Kys7CisJCQlpZiAocGVybSAmICgxIDw8IFRPTU9ZT19UWVBFX1JFV1JJVEVfQUNMKSkKKwkJCQljb3VudCsrOworCQkJYnJlYWs7CisJCWNhc2UgVE9NT1lPX1RZUEVfRE9VQkxFX1BBVEhfQUNMOgorCQkJYWNsMiA9IGNvbnRhaW5lcl9vZihwdHIsCisJCQkJICAgIHN0cnVjdCB0b21veW9fZG91YmxlX3BhdGhfYWNsX3JlY29yZCwKKwkJCQkJICAgIGhlYWQpOworCQkJcGVybSA9IGFjbDItPnBlcm07CisJCQlpZiAocGVybSAmICgxIDw8IFRPTU9ZT19UWVBFX0xJTktfQUNMKSkKKwkJCQljb3VudCsrOworCQkJaWYgKHBlcm0gJiAoMSA8PCBUT01PWU9fVFlQRV9SRU5BTUVfQUNMKSkKKwkJCQljb3VudCsrOworCQkJYnJlYWs7CisJCX0KKwl9CisJdXBfcmVhZCgmdG9tb3lvX2RvbWFpbl9hY2xfaW5mb19saXN0X2xvY2spOworCWlmIChjb3VudCA8IHRvbW95b19jaGVja19mbGFncyhkb21haW4sIFRPTU9ZT19NQVhfQUNDRVBUX0VOVFJZKSkKKwkJcmV0dXJuIHRydWU7CisJaWYgKCFkb21haW4tPnF1b3RhX3dhcm5lZCkgeworCQlkb21haW4tPnF1b3RhX3dhcm5lZCA9IHRydWU7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlRPTU9ZTy1XQVJOSU5HOiAiCisJCSAgICAgICAiRG9tYWluICclcycgaGFzIHNvIG1hbnkgQUNMcyB0byBob2xkLiAiCisJCSAgICAgICAiU3RvcHBlZCBsZWFybmluZyBtb2RlLlxuIiwgZG9tYWluLT5kb21haW5uYW1lLT5uYW1lKTsKKwl9CisJcmV0dXJuIGZhbHNlOworfQorCisvKioKKyAqIHRvbW95b19maW5kX29yX2Fzc2lnbl9uZXdfcHJvZmlsZSAtIENyZWF0ZSBhIG5ldyBwcm9maWxlLgorICoKKyAqIEBwcm9maWxlOiBQcm9maWxlIG51bWJlciB0byBjcmVhdGUuCisgKgorICogUmV0dXJucyBwb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX3Byb2ZpbGUiIG9uIHN1Y2Nlc3MsIE5VTEwgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgc3RydWN0IHRvbW95b19wcm9maWxlICp0b21veW9fZmluZF9vcl9hc3NpZ25fbmV3X3Byb2ZpbGUoY29uc3QgdW5zaWduZWQKKwkJCQkJCQkJaW50IHByb2ZpbGUpCit7CisJc3RhdGljIERFRklORV9NVVRFWChsb2NrKTsKKwlzdHJ1Y3QgdG9tb3lvX3Byb2ZpbGUgKnB0ciA9IE5VTEw7CisJaW50IGk7CisKKwlpZiAocHJvZmlsZSA+PSBUT01PWU9fTUFYX1BST0ZJTEVTKQorCQlyZXR1cm4gTlVMTDsKKwkvKioqKiogRVhDTFVTSVZFIFNFQ1RJT04gU1RBUlQgKioqKiovCisJbXV0ZXhfbG9jaygmbG9jayk7CisJcHRyID0gdG9tb3lvX3Byb2ZpbGVfcHRyW3Byb2ZpbGVdOworCWlmIChwdHIpCisJCWdvdG8gb2s7CisJcHRyID0gdG9tb3lvX2FsbG9jX2VsZW1lbnQoc2l6ZW9mKCpwdHIpKTsKKwlpZiAoIXB0cikKKwkJZ290byBvazsKKwlmb3IgKGkgPSAwOyBpIDwgVE9NT1lPX01BWF9DT05UUk9MX0lOREVYOyBpKyspCisJCXB0ci0+dmFsdWVbaV0gPSB0b21veW9fY29udHJvbF9hcnJheVtpXS5jdXJyZW50X3ZhbHVlOworCW1iKCk7IC8qIEF2b2lkIG91dC1vZi1vcmRlciBleGVjdXRpb24uICovCisJdG9tb3lvX3Byb2ZpbGVfcHRyW3Byb2ZpbGVdID0gcHRyOworIG9rOgorCW11dGV4X3VubG9jaygmbG9jayk7CisJLyoqKioqIEVYQ0xVU0lWRSBTRUNUSU9OIEVORCAqKioqKi8KKwlyZXR1cm4gcHRyOworfQorCisvKioKKyAqIHRvbW95b193cml0ZV9wcm9maWxlIC0gV3JpdGUgdG8gcHJvZmlsZSB0YWJsZS4KKyAqCisgKiBAaGVhZDogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19pb19idWZmZXIiLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX3dyaXRlX3Byb2ZpbGUoc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpCit7CisJY2hhciAqZGF0YSA9IGhlYWQtPndyaXRlX2J1ZjsKKwl1bnNpZ25lZCBpbnQgaTsKKwl1bnNpZ25lZCBpbnQgdmFsdWU7CisJY2hhciAqY3A7CisJc3RydWN0IHRvbW95b19wcm9maWxlICpwcm9maWxlOworCXVuc2lnbmVkIGxvbmcgbnVtOworCisJY3AgPSBzdHJjaHIoZGF0YSwgJy0nKTsKKwlpZiAoY3ApCisJCSpjcCA9ICdcMCc7CisJaWYgKHN0cmljdF9zdHJ0b3VsKGRhdGEsIDEwLCAmbnVtKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGNwKQorCQlkYXRhID0gY3AgKyAxOworCXByb2ZpbGUgPSB0b21veW9fZmluZF9vcl9hc3NpZ25fbmV3X3Byb2ZpbGUobnVtKTsKKwlpZiAoIXByb2ZpbGUpCisJCXJldHVybiAtRUlOVkFMOworCWNwID0gc3RyY2hyKGRhdGEsICc9Jyk7CisJaWYgKCFjcCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJKmNwID0gJ1wwJzsKKwlpZiAoIXN0cmNtcChkYXRhLCAiQ09NTUVOVCIpKSB7CisJCXByb2ZpbGUtPmNvbW1lbnQgPSB0b21veW9fc2F2ZV9uYW1lKGNwICsgMSk7CisJCXJldHVybiAwOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgVE9NT1lPX01BWF9DT05UUk9MX0lOREVYOyBpKyspIHsKKwkJaWYgKHN0cmNtcChkYXRhLCB0b21veW9fY29udHJvbF9hcnJheVtpXS5rZXl3b3JkKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoc3NjYW5mKGNwICsgMSwgIiV1IiwgJnZhbHVlKSAhPSAxKSB7CisJCQlpbnQgajsKKwkJCWNvbnN0IGNoYXIgKiptb2RlczsKKwkJCXN3aXRjaCAoaSkgeworCQkJY2FzZSBUT01PWU9fVkVSQk9TRToKKwkJCQltb2RlcyA9IHRvbW95b19tb2RlXzI7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCW1vZGVzID0gdG9tb3lvX21vZGVfNDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWZvciAoaiA9IDA7IGogPCA0OyBqKyspIHsKKwkJCQlpZiAoc3RyY21wKGNwICsgMSwgbW9kZXNbal0pKQorCQkJCQljb250aW51ZTsKKwkJCQl2YWx1ZSA9IGo7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoaiA9PSA0KQorCQkJCXJldHVybiAtRUlOVkFMOworCQl9IGVsc2UgaWYgKHZhbHVlID4gdG9tb3lvX2NvbnRyb2xfYXJyYXlbaV0ubWF4X3ZhbHVlKSB7CisJCQl2YWx1ZSA9IHRvbW95b19jb250cm9sX2FycmF5W2ldLm1heF92YWx1ZTsKKwkJfQorCQlwcm9maWxlLT52YWx1ZVtpXSA9IHZhbHVlOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKy8qKgorICogdG9tb3lvX3JlYWRfcHJvZmlsZSAtIFJlYWQgZnJvbSBwcm9maWxlIHRhYmxlLgorICoKKyAqIEBoZWFkOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciIuCisgKgorICogUmV0dXJucyAwLgorICovCitzdGF0aWMgaW50IHRvbW95b19yZWFkX3Byb2ZpbGUoc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpCit7CisJc3RhdGljIGNvbnN0IGludCB0b3RhbCA9IFRPTU9ZT19NQVhfQ09OVFJPTF9JTkRFWCArIDE7CisJaW50IHN0ZXA7CisKKwlpZiAoaGVhZC0+cmVhZF9lb2YpCisJCXJldHVybiAwOworCWZvciAoc3RlcCA9IGhlYWQtPnJlYWRfc3RlcDsgc3RlcCA8IFRPTU9ZT19NQVhfUFJPRklMRVMgKiB0b3RhbDsKKwkgICAgIHN0ZXArKykgeworCQljb25zdCB1OCBpbmRleCA9IHN0ZXAgLyB0b3RhbDsKKwkJdTggdHlwZSA9IHN0ZXAgJSB0b3RhbDsKKwkJY29uc3Qgc3RydWN0IHRvbW95b19wcm9maWxlICpwcm9maWxlCisJCQk9IHRvbW95b19wcm9maWxlX3B0cltpbmRleF07CisJCWhlYWQtPnJlYWRfc3RlcCA9IHN0ZXA7CisJCWlmICghcHJvZmlsZSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXR5cGUpIHsgLyogUHJpbnQgcHJvZmlsZScgY29tbWVudCB0YWcuICovCisJCQlpZiAoIXRvbW95b19pb19wcmludGYoaGVhZCwgIiV1LUNPTU1FTlQ9JXNcbiIsCisJCQkJCSAgICAgIGluZGV4LCBwcm9maWxlLT5jb21tZW50ID8KKwkJCQkJICAgICAgcHJvZmlsZS0+Y29tbWVudC0+bmFtZSA6ICIiKSkKKwkJCQlicmVhazsKKwkJCWNvbnRpbnVlOworCQl9CisJCXR5cGUtLTsKKwkJaWYgKHR5cGUgPCBUT01PWU9fTUFYX0NPTlRST0xfSU5ERVgpIHsKKwkJCWNvbnN0IHVuc2lnbmVkIGludCB2YWx1ZSA9IHByb2ZpbGUtPnZhbHVlW3R5cGVdOworCQkJY29uc3QgY2hhciAqKm1vZGVzID0gTlVMTDsKKwkJCWNvbnN0IGNoYXIgKmtleXdvcmQKKwkJCQk9IHRvbW95b19jb250cm9sX2FycmF5W3R5cGVdLmtleXdvcmQ7CisJCQlzd2l0Y2ggKHRvbW95b19jb250cm9sX2FycmF5W3R5cGVdLm1heF92YWx1ZSkgeworCQkJY2FzZSAzOgorCQkJCW1vZGVzID0gdG9tb3lvX21vZGVfNDsKKwkJCQlicmVhazsKKwkJCWNhc2UgMToKKwkJCQltb2RlcyA9IHRvbW95b19tb2RlXzI7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAobW9kZXMpIHsKKwkJCQlpZiAoIXRvbW95b19pb19wcmludGYoaGVhZCwgIiV1LSVzPSVzXG4iLCBpbmRleCwKKwkJCQkJCSAgICAgIGtleXdvcmQsIG1vZGVzW3ZhbHVlXSkpCisJCQkJCWJyZWFrOworCQkJfSBlbHNlIHsKKwkJCQlpZiAoIXRvbW95b19pb19wcmludGYoaGVhZCwgIiV1LSVzPSV1XG4iLCBpbmRleCwKKwkJCQkJCSAgICAgIGtleXdvcmQsIHZhbHVlKSkKKwkJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisJaWYgKHN0ZXAgPT0gVE9NT1lPX01BWF9QUk9GSUxFUyAqIHRvdGFsKQorCQloZWFkLT5yZWFkX2VvZiA9IHRydWU7CisJcmV0dXJuIDA7Cit9CisKKy8qIFN0cnVjdHVyZSBmb3IgcG9saWN5IG1hbmFnZXIuICovCitzdHJ1Y3QgdG9tb3lvX3BvbGljeV9tYW5hZ2VyX2VudHJ5IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJLyogQSBwYXRoIHRvIHByb2dyYW0gb3IgYSBkb21haW5uYW1lLiAqLworCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICptYW5hZ2VyOworCWJvb2wgaXNfZG9tYWluOyAgLyogVHJ1ZSBpZiBtYW5hZ2VyIGlzIGEgZG9tYWlubmFtZS4gKi8KKwlib29sIGlzX2RlbGV0ZWQ7IC8qIFRydWUgaWYgdGhpcyBlbnRyeSBpcyBkZWxldGVkLiAqLworfTsKKworLyogVGhlIGxpc3QgZm9yICJzdHJ1Y3QgdG9tb3lvX3BvbGljeV9tYW5hZ2VyX2VudHJ5Ii4gKi8KK3N0YXRpYyBMSVNUX0hFQUQodG9tb3lvX3BvbGljeV9tYW5hZ2VyX2xpc3QpOworc3RhdGljIERFQ0xBUkVfUldTRU0odG9tb3lvX3BvbGljeV9tYW5hZ2VyX2xpc3RfbG9jayk7CisKKy8qKgorICogdG9tb3lvX3VwZGF0ZV9tYW5hZ2VyX2VudHJ5IC0gQWRkIGEgbWFuYWdlciBlbnRyeS4KKyAqCisgKiBAbWFuYWdlcjogICBUaGUgcGF0aCB0byBtYW5hZ2VyIG9yIHRoZSBkb21haW5uYW1tZS4KKyAqIEBpc19kZWxldGU6IFRydWUgaWYgaXQgaXMgYSBkZWxldGUgcmVxdWVzdC4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IHRvbW95b191cGRhdGVfbWFuYWdlcl9lbnRyeShjb25zdCBjaGFyICptYW5hZ2VyLAorCQkJCSAgICAgICBjb25zdCBib29sIGlzX2RlbGV0ZSkKK3sKKwlzdHJ1Y3QgdG9tb3lvX3BvbGljeV9tYW5hZ2VyX2VudHJ5ICpuZXdfZW50cnk7CisJc3RydWN0IHRvbW95b19wb2xpY3lfbWFuYWdlcl9lbnRyeSAqcHRyOworCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpzYXZlZF9tYW5hZ2VyOworCWludCBlcnJvciA9IC1FTk9NRU07CisJYm9vbCBpc19kb21haW4gPSBmYWxzZTsKKworCWlmICh0b21veW9faXNfZG9tYWluX2RlZihtYW5hZ2VyKSkgeworCQlpZiAoIXRvbW95b19pc19jb3JyZWN0X2RvbWFpbihtYW5hZ2VyLCBfX2Z1bmNfXykpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaXNfZG9tYWluID0gdHJ1ZTsKKwl9IGVsc2UgeworCQlpZiAoIXRvbW95b19pc19jb3JyZWN0X3BhdGgobWFuYWdlciwgMSwgLTEsIC0xLCBfX2Z1bmNfXykpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJc2F2ZWRfbWFuYWdlciA9IHRvbW95b19zYXZlX25hbWUobWFuYWdlcik7CisJaWYgKCFzYXZlZF9tYW5hZ2VyKQorCQlyZXR1cm4gLUVOT01FTTsKKwkvKioqKiogRVhDTFVTSVZFIFNFQ1RJT04gU1RBUlQgKioqKiovCisJZG93bl93cml0ZSgmdG9tb3lvX3BvbGljeV9tYW5hZ2VyX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICZ0b21veW9fcG9saWN5X21hbmFnZXJfbGlzdCwgbGlzdCkgeworCQlpZiAocHRyLT5tYW5hZ2VyICE9IHNhdmVkX21hbmFnZXIpCisJCQljb250aW51ZTsKKwkJcHRyLT5pc19kZWxldGVkID0gaXNfZGVsZXRlOworCQllcnJvciA9IDA7CisJCWdvdG8gb3V0OworCX0KKwlpZiAoaXNfZGVsZXRlKSB7CisJCWVycm9yID0gLUVOT0VOVDsKKwkJZ290byBvdXQ7CisJfQorCW5ld19lbnRyeSA9IHRvbW95b19hbGxvY19lbGVtZW50KHNpemVvZigqbmV3X2VudHJ5KSk7CisJaWYgKCFuZXdfZW50cnkpCisJCWdvdG8gb3V0OworCW5ld19lbnRyeS0+bWFuYWdlciA9IHNhdmVkX21hbmFnZXI7CisJbmV3X2VudHJ5LT5pc19kb21haW4gPSBpc19kb21haW47CisJbGlzdF9hZGRfdGFpbCgmbmV3X2VudHJ5LT5saXN0LCAmdG9tb3lvX3BvbGljeV9tYW5hZ2VyX2xpc3QpOworCWVycm9yID0gMDsKKyBvdXQ6CisJdXBfd3JpdGUoJnRvbW95b19wb2xpY3lfbWFuYWdlcl9saXN0X2xvY2spOworCS8qKioqKiBFWENMVVNJVkUgU0VDVElPTiBFTkQgKioqKiovCisJcmV0dXJuIGVycm9yOworfQorCisvKioKKyAqIHRvbW95b193cml0ZV9tYW5hZ2VyX3BvbGljeSAtIFdyaXRlIG1hbmFnZXIgcG9saWN5LgorICoKKyAqIEBoZWFkOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciIuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCB0b21veW9fd3JpdGVfbWFuYWdlcl9wb2xpY3koc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpCit7CisJY2hhciAqZGF0YSA9IGhlYWQtPndyaXRlX2J1ZjsKKwlib29sIGlzX2RlbGV0ZSA9IHRvbW95b19zdHJfc3RhcnRzKCZkYXRhLCBUT01PWU9fS0VZV09SRF9ERUxFVEUpOworCisJaWYgKCFzdHJjbXAoZGF0YSwgIm1hbmFnZV9ieV9ub25fcm9vdCIpKSB7CisJCXRvbW95b19tYW5hZ2VfYnlfbm9uX3Jvb3QgPSAhaXNfZGVsZXRlOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIHRvbW95b191cGRhdGVfbWFuYWdlcl9lbnRyeShkYXRhLCBpc19kZWxldGUpOworfQorCisvKioKKyAqIHRvbW95b19yZWFkX21hbmFnZXJfcG9saWN5IC0gUmVhZCBtYW5hZ2VyIHBvbGljeS4KKyAqCisgKiBAaGVhZDogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19pb19idWZmZXIiLgorICoKKyAqIFJldHVybnMgMC4KKyAqLworc3RhdGljIGludCB0b21veW9fcmVhZF9tYW5hZ2VyX3BvbGljeShzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwb3M7CisJYm9vbCBkb25lID0gdHJ1ZTsKKworCWlmIChoZWFkLT5yZWFkX2VvZikKKwkJcmV0dXJuIDA7CisJZG93bl9yZWFkKCZ0b21veW9fcG9saWN5X21hbmFnZXJfbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2Nvb2tpZShwb3MsIGhlYWQtPnJlYWRfdmFyMiwKKwkJCSAgICAgJnRvbW95b19wb2xpY3lfbWFuYWdlcl9saXN0KSB7CisJCXN0cnVjdCB0b21veW9fcG9saWN5X21hbmFnZXJfZW50cnkgKnB0cjsKKwkJcHRyID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCB0b21veW9fcG9saWN5X21hbmFnZXJfZW50cnksCisJCQkJIGxpc3QpOworCQlpZiAocHRyLT5pc19kZWxldGVkKQorCQkJY29udGludWU7CisJCWlmICghdG9tb3lvX2lvX3ByaW50ZihoZWFkLCAiJXNcbiIsIHB0ci0+bWFuYWdlci0+bmFtZSkpIHsKKwkJCWRvbmUgPSBmYWxzZTsKKwkJCWJyZWFrOworCQl9CisJfQorCXVwX3JlYWQoJnRvbW95b19wb2xpY3lfbWFuYWdlcl9saXN0X2xvY2spOworCWhlYWQtPnJlYWRfZW9mID0gZG9uZTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB0b21veW9faXNfcG9saWN5X21hbmFnZXIgLSBDaGVjayB3aGV0aGVyIHRoZSBjdXJyZW50IHByb2Nlc3MgaXMgYSBwb2xpY3kgbWFuYWdlci4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGN1cnJlbnQgcHJvY2VzcyBpcyBwZXJtaXR0ZWQgdG8gbW9kaWZ5IHBvbGljeQorICogdmlhIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by8gaW50ZXJmYWNlLgorICovCitzdGF0aWMgYm9vbCB0b21veW9faXNfcG9saWN5X21hbmFnZXIodm9pZCkKK3sKKwlzdHJ1Y3QgdG9tb3lvX3BvbGljeV9tYW5hZ2VyX2VudHJ5ICpwdHI7CisJY29uc3QgY2hhciAqZXhlOworCWNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayA9IGN1cnJlbnQ7CisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmRvbWFpbm5hbWUgPSB0b21veW9fZG9tYWluKCktPmRvbWFpbm5hbWU7CisJYm9vbCBmb3VuZCA9IGZhbHNlOworCisJaWYgKCF0b21veW9fcG9saWN5X2xvYWRlZCkKKwkJcmV0dXJuIHRydWU7CisJaWYgKCF0b21veW9fbWFuYWdlX2J5X25vbl9yb290ICYmICh0YXNrLT5jcmVkLT51aWQgfHwgdGFzay0+Y3JlZC0+ZXVpZCkpCisJCXJldHVybiBmYWxzZTsKKwlkb3duX3JlYWQoJnRvbW95b19wb2xpY3lfbWFuYWdlcl9saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkocHRyLCAmdG9tb3lvX3BvbGljeV9tYW5hZ2VyX2xpc3QsIGxpc3QpIHsKKwkJaWYgKCFwdHItPmlzX2RlbGV0ZWQgJiYgcHRyLT5pc19kb21haW4KKwkJICAgICYmICF0b21veW9fcGF0aGNtcChkb21haW5uYW1lLCBwdHItPm1hbmFnZXIpKSB7CisJCQlmb3VuZCA9IHRydWU7CisJCQlicmVhazsKKwkJfQorCX0KKwl1cF9yZWFkKCZ0b21veW9fcG9saWN5X21hbmFnZXJfbGlzdF9sb2NrKTsKKwlpZiAoZm91bmQpCisJCXJldHVybiB0cnVlOworCWV4ZSA9IHRvbW95b19nZXRfZXhlKCk7CisJaWYgKCFleGUpCisJCXJldHVybiBmYWxzZTsKKwlkb3duX3JlYWQoJnRvbW95b19wb2xpY3lfbWFuYWdlcl9saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkocHRyLCAmdG9tb3lvX3BvbGljeV9tYW5hZ2VyX2xpc3QsIGxpc3QpIHsKKwkJaWYgKCFwdHItPmlzX2RlbGV0ZWQgJiYgIXB0ci0+aXNfZG9tYWluCisJCSAgICAmJiAhc3RyY21wKGV4ZSwgcHRyLT5tYW5hZ2VyLT5uYW1lKSkgeworCQkJZm91bmQgPSB0cnVlOworCQkJYnJlYWs7CisJCX0KKwl9CisJdXBfcmVhZCgmdG9tb3lvX3BvbGljeV9tYW5hZ2VyX2xpc3RfbG9jayk7CisJaWYgKCFmb3VuZCkgeyAvKiBSZWR1Y2UgZXJyb3IgbWVzc2FnZXMuICovCisJCXN0YXRpYyBwaWRfdCBsYXN0X3BpZDsKKwkJY29uc3QgcGlkX3QgcGlkID0gY3VycmVudC0+cGlkOworCQlpZiAobGFzdF9waWQgIT0gcGlkKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlcyAoICVzICkgaXMgbm90IHBlcm1pdHRlZCB0byAiCisJCQkgICAgICAgInVwZGF0ZSBwb2xpY2llcy5cbiIsIGRvbWFpbm5hbWUtPm5hbWUsIGV4ZSk7CisJCQlsYXN0X3BpZCA9IHBpZDsKKwkJfQorCX0KKwl0b21veW9fZnJlZShleGUpOworCXJldHVybiBmb3VuZDsKK30KKworLyoqCisgKiB0b21veW9faXNfc2VsZWN0X29uZSAtIFBhcnNlIHNlbGVjdCBjb21tYW5kLgorICoKKyAqIEBoZWFkOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciIuCisgKiBAZGF0YTogU3RyaW5nIHRvIHBhcnNlLgorICoKKyAqIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBib29sIHRvbW95b19pc19zZWxlY3Rfb25lKHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkLAorCQkJCSBjb25zdCBjaGFyICpkYXRhKQoreworCXVuc2lnbmVkIGludCBwaWQ7CisJc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluID0gTlVMTDsKKworCWlmIChzc2NhbmYoZGF0YSwgInBpZD0ldSIsICZwaWQpID09IDEpIHsKKwkJc3RydWN0IHRhc2tfc3RydWN0ICpwOworCQkvKioqKiogQ1JJVElDQUwgU0VDVElPTiBTVEFSVCAqKioqKi8KKwkJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwkJcCA9IGZpbmRfdGFza19ieV92cGlkKHBpZCk7CisJCWlmIChwKQorCQkJZG9tYWluID0gdG9tb3lvX3JlYWxfZG9tYWluKHApOworCQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CisJCS8qKioqKiBDUklUSUNBTCBTRUNUSU9OIEVORCAqKioqKi8KKwl9IGVsc2UgaWYgKCFzdHJuY21wKGRhdGEsICJkb21haW49IiwgNykpIHsKKwkJaWYgKHRvbW95b19pc19kb21haW5fZGVmKGRhdGEgKyA3KSkgeworCQkJZG93bl9yZWFkKCZ0b21veW9fZG9tYWluX2xpc3RfbG9jayk7CisJCQlkb21haW4gPSB0b21veW9fZmluZF9kb21haW4oZGF0YSArIDcpOworCQkJdXBfcmVhZCgmdG9tb3lvX2RvbWFpbl9saXN0X2xvY2spOworCQl9CisJfSBlbHNlCisJCXJldHVybiBmYWxzZTsKKwloZWFkLT53cml0ZV92YXIxID0gZG9tYWluOworCS8qIEFjY2Vzc2luZyByZWFkX2J1ZiBpcyBzYWZlIGJlY2F1c2UgaGVhZC0+aW9fc2VtIGlzIGhlbGQuICovCisJaWYgKCFoZWFkLT5yZWFkX2J1ZikKKwkJcmV0dXJuIHRydWU7IC8qIERvIG5vdGhpbmcgaWYgb3BlbihPX1dST05MWSkuICovCisJaGVhZC0+cmVhZF9hdmFpbCA9IDA7CisJdG9tb3lvX2lvX3ByaW50ZihoZWFkLCAiIyBzZWxlY3QgJXNcbiIsIGRhdGEpOworCWhlYWQtPnJlYWRfc2luZ2xlX2RvbWFpbiA9IHRydWU7CisJaGVhZC0+cmVhZF9lb2YgPSAhZG9tYWluOworCWlmIChkb21haW4pIHsKKwkJc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZDsKKwkJaGVhZC0+cmVhZF92YXIxID0gTlVMTDsKKwkJZG93bl9yZWFkKCZ0b21veW9fZG9tYWluX2xpc3RfbG9jayk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoZCwgJnRvbW95b19kb21haW5fbGlzdCwgbGlzdCkgeworCQkJaWYgKGQgPT0gZG9tYWluKQorCQkJCWJyZWFrOworCQkJaGVhZC0+cmVhZF92YXIxID0gJmQtPmxpc3Q7CisJCX0KKwkJdXBfcmVhZCgmdG9tb3lvX2RvbWFpbl9saXN0X2xvY2spOworCQloZWFkLT5yZWFkX3ZhcjIgPSBOVUxMOworCQloZWFkLT5yZWFkX2JpdCA9IDA7CisJCWhlYWQtPnJlYWRfc3RlcCA9IDA7CisJCWlmIChkb21haW4tPmlzX2RlbGV0ZWQpCisJCQl0b21veW9faW9fcHJpbnRmKGhlYWQsICIjIFRoaXMgaXMgYSBkZWxldGVkIGRvbWFpbi5cbiIpOworCX0KKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoqCisgKiB0b21veW9fd3JpdGVfZG9tYWluX3BvbGljeSAtIFdyaXRlIGRvbWFpbiBwb2xpY3kuCisgKgorICogQGhlYWQ6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IHRvbW95b193cml0ZV9kb21haW5fcG9saWN5KHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQoreworCWNoYXIgKmRhdGEgPSBoZWFkLT53cml0ZV9idWY7CisJc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluID0gaGVhZC0+d3JpdGVfdmFyMTsKKwlib29sIGlzX2RlbGV0ZSA9IGZhbHNlOworCWJvb2wgaXNfc2VsZWN0ID0gZmFsc2U7CisJYm9vbCBpc191bmRlbGV0ZSA9IGZhbHNlOworCXVuc2lnbmVkIGludCBwcm9maWxlOworCisJaWYgKHRvbW95b19zdHJfc3RhcnRzKCZkYXRhLCBUT01PWU9fS0VZV09SRF9ERUxFVEUpKQorCQlpc19kZWxldGUgPSB0cnVlOworCWVsc2UgaWYgKHRvbW95b19zdHJfc3RhcnRzKCZkYXRhLCBUT01PWU9fS0VZV09SRF9TRUxFQ1QpKQorCQlpc19zZWxlY3QgPSB0cnVlOworCWVsc2UgaWYgKHRvbW95b19zdHJfc3RhcnRzKCZkYXRhLCBUT01PWU9fS0VZV09SRF9VTkRFTEVURSkpCisJCWlzX3VuZGVsZXRlID0gdHJ1ZTsKKwlpZiAoaXNfc2VsZWN0ICYmIHRvbW95b19pc19zZWxlY3Rfb25lKGhlYWQsIGRhdGEpKQorCQlyZXR1cm4gMDsKKwkvKiBEb24ndCBhbGxvdyB1cGRhdGluZyBwb2xpY2llcyBieSBub24gbWFuYWdlciBwcm9ncmFtcy4gKi8KKwlpZiAoIXRvbW95b19pc19wb2xpY3lfbWFuYWdlcigpKQorCQlyZXR1cm4gLUVQRVJNOworCWlmICh0b21veW9faXNfZG9tYWluX2RlZihkYXRhKSkgeworCQlkb21haW4gPSBOVUxMOworCQlpZiAoaXNfZGVsZXRlKQorCQkJdG9tb3lvX2RlbGV0ZV9kb21haW4oZGF0YSk7CisJCWVsc2UgaWYgKGlzX3NlbGVjdCkgeworCQkJZG93bl9yZWFkKCZ0b21veW9fZG9tYWluX2xpc3RfbG9jayk7CisJCQlkb21haW4gPSB0b21veW9fZmluZF9kb21haW4oZGF0YSk7CisJCQl1cF9yZWFkKCZ0b21veW9fZG9tYWluX2xpc3RfbG9jayk7CisJCX0gZWxzZSBpZiAoaXNfdW5kZWxldGUpCisJCQlkb21haW4gPSB0b21veW9fdW5kZWxldGVfZG9tYWluKGRhdGEpOworCQllbHNlCisJCQlkb21haW4gPSB0b21veW9fZmluZF9vcl9hc3NpZ25fbmV3X2RvbWFpbihkYXRhLCAwKTsKKwkJaGVhZC0+d3JpdGVfdmFyMSA9IGRvbWFpbjsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghZG9tYWluKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChzc2NhbmYoZGF0YSwgVE9NT1lPX0tFWVdPUkRfVVNFX1BST0ZJTEUgIiV1IiwgJnByb2ZpbGUpID09IDEKKwkgICAgJiYgcHJvZmlsZSA8IFRPTU9ZT19NQVhfUFJPRklMRVMpIHsKKwkJaWYgKHRvbW95b19wcm9maWxlX3B0cltwcm9maWxlXSB8fCAhdG9tb3lvX3BvbGljeV9sb2FkZWQpCisJCQlkb21haW4tPnByb2ZpbGUgPSAodTgpIHByb2ZpbGU7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcChkYXRhLCBUT01PWU9fS0VZV09SRF9JR05PUkVfR0xPQkFMX0FMTE9XX1JFQUQpKSB7CisJCXRvbW95b19zZXRfZG9tYWluX2ZsYWcoZG9tYWluLCBpc19kZWxldGUsCisJCQkgICAgICAgVE9NT1lPX0RPTUFJTl9GTEFHU19JR05PUkVfR0xPQkFMX0FMTE9XX1JFQUQpOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIHRvbW95b193cml0ZV9maWxlX3BvbGljeShkYXRhLCBkb21haW4sIGlzX2RlbGV0ZSk7Cit9CisKKy8qKgorICogdG9tb3lvX3ByaW50X3NpbmdsZV9wYXRoX2FjbCAtIFByaW50IGEgc2luZ2xlIHBhdGggQUNMIGVudHJ5LgorICoKKyAqIEBoZWFkOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciIuCisgKiBAcHRyOiAgUG9pbnRlciB0byAic3RydWN0IHRvbW95b19zaW5nbGVfcGF0aF9hY2xfcmVjb3JkIi4KKyAqCisgKiBSZXR1cm5zIHRydWUgb24gc3VjY2VzcywgZmFsc2Ugb3RoZXJ3aXNlLgorICovCitzdGF0aWMgYm9vbCB0b21veW9fcHJpbnRfc2luZ2xlX3BhdGhfYWNsKHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkLAorCQkJCQkgc3RydWN0IHRvbW95b19zaW5nbGVfcGF0aF9hY2xfcmVjb3JkICoKKwkJCQkJIHB0cikKK3sKKwlpbnQgcG9zOworCXU4IGJpdDsKKwljb25zdCBjaGFyICphdG1hcmsgPSAiIjsKKwljb25zdCBjaGFyICpmaWxlbmFtZTsKKwljb25zdCB1MTYgcGVybSA9IHB0ci0+cGVybTsKKworCWZpbGVuYW1lID0gcHRyLT5maWxlbmFtZS0+bmFtZTsKKwlmb3IgKGJpdCA9IGhlYWQtPnJlYWRfYml0OyBiaXQgPCBUT01PWU9fTUFYX1NJTkdMRV9QQVRIX09QRVJBVElPTjsKKwkgICAgIGJpdCsrKSB7CisJCWNvbnN0IGNoYXIgKm1zZzsKKwkJaWYgKCEocGVybSAmICgxIDw8IGJpdCkpKQorCQkJY29udGludWU7CisJCS8qIFByaW50ICJyZWFkL3dyaXRlIiBpbnN0ZWFkIG9mICJyZWFkIiBhbmQgIndyaXRlIi4gKi8KKwkJaWYgKChiaXQgPT0gVE9NT1lPX1RZUEVfUkVBRF9BQ0wgfHwKKwkJICAgICBiaXQgPT0gVE9NT1lPX1RZUEVfV1JJVEVfQUNMKQorCQkgICAgJiYgKHBlcm0gJiAoMSA8PCBUT01PWU9fVFlQRV9SRUFEX1dSSVRFX0FDTCkpKQorCQkJY29udGludWU7CisJCW1zZyA9IHRvbW95b19zcDJrZXl3b3JkKGJpdCk7CisJCXBvcyA9IGhlYWQtPnJlYWRfYXZhaWw7CisJCWlmICghdG9tb3lvX2lvX3ByaW50ZihoZWFkLCAiYWxsb3dfJXMgJXMlc1xuIiwgbXNnLAorCQkJCSAgICAgIGF0bWFyaywgZmlsZW5hbWUpKQorCQkJZ290byBvdXQ7CisJfQorCWhlYWQtPnJlYWRfYml0ID0gMDsKKwlyZXR1cm4gdHJ1ZTsKKyBvdXQ6CisJaGVhZC0+cmVhZF9iaXQgPSBiaXQ7CisJaGVhZC0+cmVhZF9hdmFpbCA9IHBvczsKKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qKgorICogdG9tb3lvX3ByaW50X2RvdWJsZV9wYXRoX2FjbCAtIFByaW50IGEgZG91YmxlIHBhdGggQUNMIGVudHJ5LgorICoKKyAqIEBoZWFkOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciIuCisgKiBAcHRyOiAgUG9pbnRlciB0byAic3RydWN0IHRvbW95b19kb3VibGVfcGF0aF9hY2xfcmVjb3JkIi4KKyAqCisgKiBSZXR1cm5zIHRydWUgb24gc3VjY2VzcywgZmFsc2Ugb3RoZXJ3aXNlLgorICovCitzdGF0aWMgYm9vbCB0b21veW9fcHJpbnRfZG91YmxlX3BhdGhfYWNsKHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkLAorCQkJCQkgc3RydWN0IHRvbW95b19kb3VibGVfcGF0aF9hY2xfcmVjb3JkICoKKwkJCQkJIHB0cikKK3sKKwlpbnQgcG9zOworCWNvbnN0IGNoYXIgKmF0bWFyazEgPSAiIjsKKwljb25zdCBjaGFyICphdG1hcmsyID0gIiI7CisJY29uc3QgY2hhciAqZmlsZW5hbWUxOworCWNvbnN0IGNoYXIgKmZpbGVuYW1lMjsKKwljb25zdCB1OCBwZXJtID0gcHRyLT5wZXJtOworCXU4IGJpdDsKKworCWZpbGVuYW1lMSA9IHB0ci0+ZmlsZW5hbWUxLT5uYW1lOworCWZpbGVuYW1lMiA9IHB0ci0+ZmlsZW5hbWUyLT5uYW1lOworCWZvciAoYml0ID0gaGVhZC0+cmVhZF9iaXQ7IGJpdCA8IFRPTU9ZT19NQVhfRE9VQkxFX1BBVEhfT1BFUkFUSU9OOworCSAgICAgYml0KyspIHsKKwkJY29uc3QgY2hhciAqbXNnOworCQlpZiAoIShwZXJtICYgKDEgPDwgYml0KSkpCisJCQljb250aW51ZTsKKwkJbXNnID0gdG9tb3lvX2RwMmtleXdvcmQoYml0KTsKKwkJcG9zID0gaGVhZC0+cmVhZF9hdmFpbDsKKwkJaWYgKCF0b21veW9faW9fcHJpbnRmKGhlYWQsICJhbGxvd18lcyAlcyVzICVzJXNcbiIsIG1zZywKKwkJCQkgICAgICBhdG1hcmsxLCBmaWxlbmFtZTEsIGF0bWFyazIsIGZpbGVuYW1lMikpCisJCQlnb3RvIG91dDsKKwl9CisJaGVhZC0+cmVhZF9iaXQgPSAwOworCXJldHVybiB0cnVlOworIG91dDoKKwloZWFkLT5yZWFkX2JpdCA9IGJpdDsKKwloZWFkLT5yZWFkX2F2YWlsID0gcG9zOworCXJldHVybiBmYWxzZTsKK30KKworLyoqCisgKiB0b21veW9fcHJpbnRfZW50cnkgLSBQcmludCBhbiBBQ0wgZW50cnkuCisgKgorICogQGhlYWQ6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KKyAqIEBwdHI6ICBQb2ludGVyIHRvIGFuIEFDTCBlbnRyeS4KKyAqCisgKiBSZXR1cm5zIHRydWUgb24gc3VjY2VzcywgZmFsc2Ugb3RoZXJ3aXNlLgorICovCitzdGF0aWMgYm9vbCB0b21veW9fcHJpbnRfZW50cnkoc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQsCisJCQkgICAgICAgc3RydWN0IHRvbW95b19hY2xfaW5mbyAqcHRyKQoreworCWNvbnN0IHU4IGFjbF90eXBlID0gdG9tb3lvX2FjbF90eXBlMihwdHIpOworCisJaWYgKGFjbF90eXBlICYgVE9NT1lPX0FDTF9ERUxFVEVEKQorCQlyZXR1cm4gdHJ1ZTsKKwlpZiAoYWNsX3R5cGUgPT0gVE9NT1lPX1RZUEVfU0lOR0xFX1BBVEhfQUNMKSB7CisJCXN0cnVjdCB0b21veW9fc2luZ2xlX3BhdGhfYWNsX3JlY29yZCAqYWNsCisJCQk9IGNvbnRhaW5lcl9vZihwdHIsCisJCQkJICAgICAgIHN0cnVjdCB0b21veW9fc2luZ2xlX3BhdGhfYWNsX3JlY29yZCwKKwkJCQkgICAgICAgaGVhZCk7CisJCXJldHVybiB0b21veW9fcHJpbnRfc2luZ2xlX3BhdGhfYWNsKGhlYWQsIGFjbCk7CisJfQorCWlmIChhY2xfdHlwZSA9PSBUT01PWU9fVFlQRV9ET1VCTEVfUEFUSF9BQ0wpIHsKKwkJc3RydWN0IHRvbW95b19kb3VibGVfcGF0aF9hY2xfcmVjb3JkICphY2wKKwkJCT0gY29udGFpbmVyX29mKHB0ciwKKwkJCQkgICAgICAgc3RydWN0IHRvbW95b19kb3VibGVfcGF0aF9hY2xfcmVjb3JkLAorCQkJCSAgICAgICBoZWFkKTsKKwkJcmV0dXJuIHRvbW95b19wcmludF9kb3VibGVfcGF0aF9hY2woaGVhZCwgYWNsKTsKKwl9CisJQlVHKCk7IC8qIFRoaXMgbXVzdCBub3QgaGFwcGVuLiAqLworCXJldHVybiBmYWxzZTsKK30KKworLyoqCisgKiB0b21veW9fcmVhZF9kb21haW5fcG9saWN5IC0gUmVhZCBkb21haW4gcG9saWN5LgorICoKKyAqIEBoZWFkOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciIuCisgKgorICogUmV0dXJucyAwLgorICovCitzdGF0aWMgaW50IHRvbW95b19yZWFkX2RvbWFpbl9wb2xpY3koc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqZHBvczsKKwlzdHJ1Y3QgbGlzdF9oZWFkICphcG9zOworCWJvb2wgZG9uZSA9IHRydWU7CisKKwlpZiAoaGVhZC0+cmVhZF9lb2YpCisJCXJldHVybiAwOworCWlmIChoZWFkLT5yZWFkX3N0ZXAgPT0gMCkKKwkJaGVhZC0+cmVhZF9zdGVwID0gMTsKKwlkb3duX3JlYWQoJnRvbW95b19kb21haW5fbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2Nvb2tpZShkcG9zLCBoZWFkLT5yZWFkX3ZhcjEsICZ0b21veW9fZG9tYWluX2xpc3QpIHsKKwkJc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluOworCQljb25zdCBjaGFyICpxdW90YV9leGNlZWRlZCA9ICIiOworCQljb25zdCBjaGFyICp0cmFuc2l0aW9uX2ZhaWxlZCA9ICIiOworCQljb25zdCBjaGFyICppZ25vcmVfZ2xvYmFsX2FsbG93X3JlYWQgPSAiIjsKKwkJZG9tYWluID0gbGlzdF9lbnRyeShkcG9zLCBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvLCBsaXN0KTsKKwkJaWYgKGhlYWQtPnJlYWRfc3RlcCAhPSAxKQorCQkJZ290byBhY2xfbG9vcDsKKwkJaWYgKGRvbWFpbi0+aXNfZGVsZXRlZCAmJiAhaGVhZC0+cmVhZF9zaW5nbGVfZG9tYWluKQorCQkJY29udGludWU7CisJCS8qIFByaW50IGRvbWFpbm5hbWUgYW5kIGZsYWdzLiAqLworCQlpZiAoZG9tYWluLT5xdW90YV93YXJuZWQpCisJCQlxdW90YV9leGNlZWRlZCA9ICJxdW90YV9leGNlZWRlZFxuIjsKKwkJaWYgKGRvbWFpbi0+ZmxhZ3MgJiBUT01PWU9fRE9NQUlOX0ZMQUdTX1RSQU5TSVRJT05fRkFJTEVEKQorCQkJdHJhbnNpdGlvbl9mYWlsZWQgPSAidHJhbnNpdGlvbl9mYWlsZWRcbiI7CisJCWlmIChkb21haW4tPmZsYWdzICYKKwkJICAgIFRPTU9ZT19ET01BSU5fRkxBR1NfSUdOT1JFX0dMT0JBTF9BTExPV19SRUFEKQorCQkJaWdub3JlX2dsb2JhbF9hbGxvd19yZWFkCisJCQkJPSBUT01PWU9fS0VZV09SRF9JR05PUkVfR0xPQkFMX0FMTE9XX1JFQUQgIlxuIjsKKwkJaWYgKCF0b21veW9faW9fcHJpbnRmKGhlYWQsCisJCQkJICAgICAgIiVzXG4iIFRPTU9ZT19LRVlXT1JEX1VTRV9QUk9GSUxFICIldVxuIgorCQkJCSAgICAgICIlcyVzJXNcbiIsIGRvbWFpbi0+ZG9tYWlubmFtZS0+bmFtZSwKKwkJCQkgICAgICBkb21haW4tPnByb2ZpbGUsIHF1b3RhX2V4Y2VlZGVkLAorCQkJCSAgICAgIHRyYW5zaXRpb25fZmFpbGVkLAorCQkJCSAgICAgIGlnbm9yZV9nbG9iYWxfYWxsb3dfcmVhZCkpIHsKKwkJCWRvbmUgPSBmYWxzZTsKKwkJCWJyZWFrOworCQl9CisJCWhlYWQtPnJlYWRfc3RlcCA9IDI7CithY2xfbG9vcDoKKwkJaWYgKGhlYWQtPnJlYWRfc3RlcCA9PSAzKQorCQkJZ290byB0YWlsX21hcms7CisJCS8qIFByaW50IEFDTCBlbnRyaWVzIGluIHRoZSBkb21haW4uICovCisJCWRvd25fcmVhZCgmdG9tb3lvX2RvbWFpbl9hY2xfaW5mb19saXN0X2xvY2spOworCQlsaXN0X2Zvcl9lYWNoX2Nvb2tpZShhcG9zLCBoZWFkLT5yZWFkX3ZhcjIsCisJCQkJICAgICAgJmRvbWFpbi0+YWNsX2luZm9fbGlzdCkgeworCQkJc3RydWN0IHRvbW95b19hY2xfaW5mbyAqcHRyCisJCQkJPSBsaXN0X2VudHJ5KGFwb3MsIHN0cnVjdCB0b21veW9fYWNsX2luZm8sCisJCQkJCSAgICAgIGxpc3QpOworCQkJaWYgKCF0b21veW9fcHJpbnRfZW50cnkoaGVhZCwgcHRyKSkgeworCQkJCWRvbmUgPSBmYWxzZTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQl1cF9yZWFkKCZ0b21veW9fZG9tYWluX2FjbF9pbmZvX2xpc3RfbG9jayk7CisJCWlmICghZG9uZSkKKwkJCWJyZWFrOworCQloZWFkLT5yZWFkX3N0ZXAgPSAzOwordGFpbF9tYXJrOgorCQlpZiAoIXRvbW95b19pb19wcmludGYoaGVhZCwgIlxuIikpIHsKKwkJCWRvbmUgPSBmYWxzZTsKKwkJCWJyZWFrOworCQl9CisJCWhlYWQtPnJlYWRfc3RlcCA9IDE7CisJCWlmIChoZWFkLT5yZWFkX3NpbmdsZV9kb21haW4pCisJCQlicmVhazsKKwl9CisJdXBfcmVhZCgmdG9tb3lvX2RvbWFpbl9saXN0X2xvY2spOworCWhlYWQtPnJlYWRfZW9mID0gZG9uZTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB0b21veW9fd3JpdGVfZG9tYWluX3Byb2ZpbGUgLSBBc3NpZ24gcHJvZmlsZSBmb3Igc3BlY2lmaWVkIGRvbWFpbi4KKyAqCisgKiBAaGVhZDogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19pb19idWZmZXIiLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtRUlOVkFMIG90aGVyd2lzZS4KKyAqCisgKiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gZG9pbmcKKyAqCisgKiAgICAgKCBlY2hvICJzZWxlY3QgIiAkZG9tYWlubmFtZTsgZWNobyAidXNlX3Byb2ZpbGUgIiAkcHJvZmlsZSApIHwKKyAqICAgICAvdXNyL2xpYi9jY3MvbG9hZHBvbGljeSAtZAorICovCitzdGF0aWMgaW50IHRvbW95b193cml0ZV9kb21haW5fcHJvZmlsZShzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCkKK3sKKwljaGFyICpkYXRhID0gaGVhZC0+d3JpdGVfYnVmOworCWNoYXIgKmNwID0gc3RyY2hyKGRhdGEsICcgJyk7CisJc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluOworCXVuc2lnbmVkIGxvbmcgcHJvZmlsZTsKKworCWlmICghY3ApCisJCXJldHVybiAtRUlOVkFMOworCSpjcCA9ICdcMCc7CisJZG93bl9yZWFkKCZ0b21veW9fZG9tYWluX2xpc3RfbG9jayk7CisJZG9tYWluID0gdG9tb3lvX2ZpbmRfZG9tYWluKGNwICsgMSk7CisJdXBfcmVhZCgmdG9tb3lvX2RvbWFpbl9saXN0X2xvY2spOworCWlmIChzdHJpY3Rfc3RydG91bChkYXRhLCAxMCwgJnByb2ZpbGUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoZG9tYWluICYmIHByb2ZpbGUgPCBUT01PWU9fTUFYX1BST0ZJTEVTCisJICAgICYmICh0b21veW9fcHJvZmlsZV9wdHJbcHJvZmlsZV0gfHwgIXRvbW95b19wb2xpY3lfbG9hZGVkKSkKKwkJZG9tYWluLT5wcm9maWxlID0gKHU4KSBwcm9maWxlOworCXJldHVybiAwOworfQorCisvKioKKyAqIHRvbW95b19yZWFkX2RvbWFpbl9wcm9maWxlIC0gUmVhZCBvbmx5IGRvbWFpbm5hbWUgYW5kIHByb2ZpbGUuCisgKgorICogQGhlYWQ6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KKyAqCisgKiBSZXR1cm5zIGxpc3Qgb2YgcHJvZmlsZSBudW1iZXIgYW5kIGRvbWFpbm5hbWUgcGFpcnMuCisgKgorICogVGhpcyBpcyBlcXVpdmFsZW50IHRvIGRvaW5nCisgKgorICogICAgIGdyZXAgLUEgMSAnXjxrZXJuZWw+JyAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vZG9tYWluX3BvbGljeSB8CisgKiAgICAgYXdrICcgeyBpZiAoIGRvbWFpbm5hbWUgPT0gIiIgKSB7IGlmICggJDEgPT0gIjxrZXJuZWw+IiApCisgKiAgICAgZG9tYWlubmFtZSA9ICQwOyB9IGVsc2UgaWYgKCAkMSA9PSAidXNlX3Byb2ZpbGUiICkgeworICogICAgIHByaW50ICQyICIgIiBkb21haW5uYW1lOyBkb21haW5uYW1lID0gIiI7IH0gfSA7ICcKKyAqLworc3RhdGljIGludCB0b21veW9fcmVhZF9kb21haW5fcHJvZmlsZShzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwb3M7CisJYm9vbCBkb25lID0gdHJ1ZTsKKworCWlmIChoZWFkLT5yZWFkX2VvZikKKwkJcmV0dXJuIDA7CisJZG93bl9yZWFkKCZ0b21veW9fZG9tYWluX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9jb29raWUocG9zLCBoZWFkLT5yZWFkX3ZhcjEsICZ0b21veW9fZG9tYWluX2xpc3QpIHsKKwkJc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluOworCQlkb21haW4gPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IHRvbW95b19kb21haW5faW5mbywgbGlzdCk7CisJCWlmIChkb21haW4tPmlzX2RlbGV0ZWQpCisJCQljb250aW51ZTsKKwkJaWYgKCF0b21veW9faW9fcHJpbnRmKGhlYWQsICIldSAlc1xuIiwgZG9tYWluLT5wcm9maWxlLAorCQkJCSAgICAgIGRvbWFpbi0+ZG9tYWlubmFtZS0+bmFtZSkpIHsKKwkJCWRvbmUgPSBmYWxzZTsKKwkJCWJyZWFrOworCQl9CisJfQorCXVwX3JlYWQoJnRvbW95b19kb21haW5fbGlzdF9sb2NrKTsKKwloZWFkLT5yZWFkX2VvZiA9IGRvbmU7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdG9tb3lvX3dyaXRlX3BpZDogU3BlY2lmeSBQSUQgdG8gb2J0YWluIGRvbWFpbm5hbWUuCisgKgorICogQGhlYWQ6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KKyAqCisgKiBSZXR1cm5zIDAuCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX3dyaXRlX3BpZChzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCkKK3sKKwl1bnNpZ25lZCBsb25nIHBpZDsKKwkvKiBObyBlcnJvciBjaGVjay4gKi8KKwlzdHJpY3Rfc3RydG91bChoZWFkLT53cml0ZV9idWYsIDEwLCAmcGlkKTsKKwloZWFkLT5yZWFkX3N0ZXAgPSAoaW50KSBwaWQ7CisJaGVhZC0+cmVhZF9lb2YgPSBmYWxzZTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB0b21veW9fcmVhZF9waWQgLSBHZXQgZG9tYWlubmFtZSBvZiB0aGUgc3BlY2lmaWVkIFBJRC4KKyAqCisgKiBAaGVhZDogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19pb19idWZmZXIiLgorICoKKyAqIFJldHVybnMgdGhlIGRvbWFpbm5hbWUgd2hpY2ggdGhlIHNwZWNpZmllZCBQSUQgaXMgaW4gb24gc3VjY2VzcywKKyAqIGVtcHR5IHN0cmluZyBvdGhlcndpc2UuCisgKiBUaGUgUElEIGlzIHNwZWNpZmllZCBieSB0b21veW9fd3JpdGVfcGlkKCkgc28gdGhhdCB0aGUgdXNlciBjYW4gb2J0YWluCisgKiB1c2luZyByZWFkKCkvd3JpdGUoKSBpbnRlcmZhY2UgcmF0aGVyIHRoYW4gc3lzY3RsKCkgaW50ZXJmYWNlLgorICovCitzdGF0aWMgaW50IHRvbW95b19yZWFkX3BpZChzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCkKK3sKKwlpZiAoaGVhZC0+cmVhZF9hdmFpbCA9PSAwICYmICFoZWFkLT5yZWFkX2VvZikgeworCQljb25zdCBpbnQgcGlkID0gaGVhZC0+cmVhZF9zdGVwOworCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7CisJCXN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiA9IE5VTEw7CisJCS8qKioqKiBDUklUSUNBTCBTRUNUSU9OIFNUQVJUICoqKioqLworCQlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOworCQlwID0gZmluZF90YXNrX2J5X3ZwaWQocGlkKTsKKwkJaWYgKHApCisJCQlkb21haW4gPSB0b21veW9fcmVhbF9kb21haW4ocCk7CisJCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwkJLyoqKioqIENSSVRJQ0FMIFNFQ1RJT04gRU5EICoqKioqLworCQlpZiAoZG9tYWluKQorCQkJdG9tb3lvX2lvX3ByaW50ZihoZWFkLCAiJWQgJXUgJXMiLCBwaWQsIGRvbWFpbi0+cHJvZmlsZSwKKwkJCQkJIGRvbWFpbi0+ZG9tYWlubmFtZS0+bmFtZSk7CisJCWhlYWQtPnJlYWRfZW9mID0gdHJ1ZTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdG9tb3lvX3dyaXRlX2V4Y2VwdGlvbl9wb2xpY3kgLSBXcml0ZSBleGNlcHRpb24gcG9saWN5LgorICoKKyAqIEBoZWFkOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciIuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCB0b21veW9fd3JpdGVfZXhjZXB0aW9uX3BvbGljeShzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCkKK3sKKwljaGFyICpkYXRhID0gaGVhZC0+d3JpdGVfYnVmOworCWJvb2wgaXNfZGVsZXRlID0gdG9tb3lvX3N0cl9zdGFydHMoJmRhdGEsIFRPTU9ZT19LRVlXT1JEX0RFTEVURSk7CisKKwlpZiAodG9tb3lvX3N0cl9zdGFydHMoJmRhdGEsIFRPTU9ZT19LRVlXT1JEX0tFRVBfRE9NQUlOKSkKKwkJcmV0dXJuIHRvbW95b193cml0ZV9kb21haW5fa2VlcGVyX3BvbGljeShkYXRhLCBmYWxzZSwKKwkJCQkJCQkgaXNfZGVsZXRlKTsKKwlpZiAodG9tb3lvX3N0cl9zdGFydHMoJmRhdGEsIFRPTU9ZT19LRVlXT1JEX05PX0tFRVBfRE9NQUlOKSkKKwkJcmV0dXJuIHRvbW95b193cml0ZV9kb21haW5fa2VlcGVyX3BvbGljeShkYXRhLCB0cnVlLCBpc19kZWxldGUpOworCWlmICh0b21veW9fc3RyX3N0YXJ0cygmZGF0YSwgVE9NT1lPX0tFWVdPUkRfSU5JVElBTElaRV9ET01BSU4pKQorCQlyZXR1cm4gdG9tb3lvX3dyaXRlX2RvbWFpbl9pbml0aWFsaXplcl9wb2xpY3koZGF0YSwgZmFsc2UsCisJCQkJCQkJICAgICAgaXNfZGVsZXRlKTsKKwlpZiAodG9tb3lvX3N0cl9zdGFydHMoJmRhdGEsIFRPTU9ZT19LRVlXT1JEX05PX0lOSVRJQUxJWkVfRE9NQUlOKSkKKwkJcmV0dXJuIHRvbW95b193cml0ZV9kb21haW5faW5pdGlhbGl6ZXJfcG9saWN5KGRhdGEsIHRydWUsCisJCQkJCQkJICAgICAgaXNfZGVsZXRlKTsKKwlpZiAodG9tb3lvX3N0cl9zdGFydHMoJmRhdGEsIFRPTU9ZT19LRVlXT1JEX0FMSUFTKSkKKwkJcmV0dXJuIHRvbW95b193cml0ZV9hbGlhc19wb2xpY3koZGF0YSwgaXNfZGVsZXRlKTsKKwlpZiAodG9tb3lvX3N0cl9zdGFydHMoJmRhdGEsIFRPTU9ZT19LRVlXT1JEX0FMTE9XX1JFQUQpKQorCQlyZXR1cm4gdG9tb3lvX3dyaXRlX2dsb2JhbGx5X3JlYWRhYmxlX3BvbGljeShkYXRhLCBpc19kZWxldGUpOworCWlmICh0b21veW9fc3RyX3N0YXJ0cygmZGF0YSwgVE9NT1lPX0tFWVdPUkRfRklMRV9QQVRURVJOKSkKKwkJcmV0dXJuIHRvbW95b193cml0ZV9wYXR0ZXJuX3BvbGljeShkYXRhLCBpc19kZWxldGUpOworCWlmICh0b21veW9fc3RyX3N0YXJ0cygmZGF0YSwgVE9NT1lPX0tFWVdPUkRfREVOWV9SRVdSSVRFKSkKKwkJcmV0dXJuIHRvbW95b193cml0ZV9ub19yZXdyaXRlX3BvbGljeShkYXRhLCBpc19kZWxldGUpOworCXJldHVybiAtRUlOVkFMOworfQorCisvKioKKyAqIHRvbW95b19yZWFkX2V4Y2VwdGlvbl9wb2xpY3kgLSBSZWFkIGV4Y2VwdGlvbiBwb2xpY3kuCisgKgorICogQGhlYWQ6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLUVJTlZBTCBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX3JlYWRfZXhjZXB0aW9uX3BvbGljeShzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCkKK3sKKwlpZiAoIWhlYWQtPnJlYWRfZW9mKSB7CisJCXN3aXRjaCAoaGVhZC0+cmVhZF9zdGVwKSB7CisJCWNhc2UgMDoKKwkJCWhlYWQtPnJlYWRfdmFyMiA9IE5VTEw7CisJCQloZWFkLT5yZWFkX3N0ZXAgPSAxOworCQljYXNlIDE6CisJCQlpZiAoIXRvbW95b19yZWFkX2RvbWFpbl9rZWVwZXJfcG9saWN5KGhlYWQpKQorCQkJCWJyZWFrOworCQkJaGVhZC0+cmVhZF92YXIyID0gTlVMTDsKKwkJCWhlYWQtPnJlYWRfc3RlcCA9IDI7CisJCWNhc2UgMjoKKwkJCWlmICghdG9tb3lvX3JlYWRfZ2xvYmFsbHlfcmVhZGFibGVfcG9saWN5KGhlYWQpKQorCQkJCWJyZWFrOworCQkJaGVhZC0+cmVhZF92YXIyID0gTlVMTDsKKwkJCWhlYWQtPnJlYWRfc3RlcCA9IDM7CisJCWNhc2UgMzoKKwkJCWhlYWQtPnJlYWRfdmFyMiA9IE5VTEw7CisJCQloZWFkLT5yZWFkX3N0ZXAgPSA0OworCQljYXNlIDQ6CisJCQlpZiAoIXRvbW95b19yZWFkX2RvbWFpbl9pbml0aWFsaXplcl9wb2xpY3koaGVhZCkpCisJCQkJYnJlYWs7CisJCQloZWFkLT5yZWFkX3ZhcjIgPSBOVUxMOworCQkJaGVhZC0+cmVhZF9zdGVwID0gNTsKKwkJY2FzZSA1OgorCQkJaWYgKCF0b21veW9fcmVhZF9hbGlhc19wb2xpY3koaGVhZCkpCisJCQkJYnJlYWs7CisJCQloZWFkLT5yZWFkX3ZhcjIgPSBOVUxMOworCQkJaGVhZC0+cmVhZF9zdGVwID0gNjsKKwkJY2FzZSA2OgorCQkJaGVhZC0+cmVhZF92YXIyID0gTlVMTDsKKwkJCWhlYWQtPnJlYWRfc3RlcCA9IDc7CisJCWNhc2UgNzoKKwkJCWlmICghdG9tb3lvX3JlYWRfZmlsZV9wYXR0ZXJuKGhlYWQpKQorCQkJCWJyZWFrOworCQkJaGVhZC0+cmVhZF92YXIyID0gTlVMTDsKKwkJCWhlYWQtPnJlYWRfc3RlcCA9IDg7CisJCWNhc2UgODoKKwkJCWlmICghdG9tb3lvX3JlYWRfbm9fcmV3cml0ZV9wb2xpY3koaGVhZCkpCisJCQkJYnJlYWs7CisJCQloZWFkLT5yZWFkX3ZhcjIgPSBOVUxMOworCQkJaGVhZC0+cmVhZF9zdGVwID0gOTsKKwkJY2FzZSA5OgorCQkJaGVhZC0+cmVhZF9lb2YgPSB0cnVlOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworLyogcGF0aCB0byBwb2xpY3kgbG9hZGVyICovCitzdGF0aWMgY29uc3QgY2hhciAqdG9tb3lvX2xvYWRlciA9ICIvc2Jpbi90b21veW8taW5pdCI7CisKKy8qKgorICogdG9tb3lvX3BvbGljeV9sb2FkZXJfZXhpc3RzIC0gQ2hlY2sgd2hldGhlciAvc2Jpbi90b21veW8taW5pdCBleGlzdHMuCisgKgorICogUmV0dXJucyB0cnVlIGlmIC9zYmluL3RvbW95by1pbml0IGV4aXN0cywgZmFsc2Ugb3RoZXJ3aXNlLgorICovCitzdGF0aWMgYm9vbCB0b21veW9fcG9saWN5X2xvYWRlcl9leGlzdHModm9pZCkKK3sKKwkvKgorCSAqIERvbid0IGFjdGl2YXRlIE1BQyBpZiB0aGUgcG9saWN5IGxvYWRlciBkb2Vzbid0IGV4aXN0LgorCSAqIElmIHRoZSBpbml0cmQgaW5jbHVkZXMgL3NiaW4vaW5pdCBidXQgcmVhbC1yb290LWRldiBoYXMgbm90CisJICogbW91bnRlZCBvbiAvIHlldCwgYWN0aXZhdGluZyBNQUMgd2lsbCBibG9jayB0aGUgc3lzdGVtIHNpbmNlCisJICogcG9saWNpZXMgYXJlIG5vdCBsb2FkZWQgeWV0LgorCSAqIFRodXMsIGxldCBkb19leGVjdmUoKSBjYWxsIHRoaXMgZnVuY3Rpb24gZXZlcnl0aW1lLgorCSAqLworCXN0cnVjdCBuYW1laWRhdGEgbmQ7CisKKwlpZiAocGF0aF9sb29rdXAodG9tb3lvX2xvYWRlciwgTE9PS1VQX0ZPTExPVywgJm5kKSkgeworCQlwcmludGsoS0VSTl9JTkZPICJOb3QgYWN0aXZhdGluZyBNYW5kYXRvcnkgQWNjZXNzIENvbnRyb2wgbm93ICIKKwkJICAgICAgICJzaW5jZSAlcyBkb2Vzbid0IGV4aXN0LlxuIiwgdG9tb3lvX2xvYWRlcik7CisJCXJldHVybiBmYWxzZTsKKwl9CisJcGF0aF9wdXQoJm5kLnBhdGgpOworCXJldHVybiB0cnVlOworfQorCisvKioKKyAqIHRvbW95b19sb2FkX3BvbGljeSAtIFJ1biBleHRlcm5hbCBwb2xpY3kgbG9hZGVyIHRvIGxvYWQgcG9saWN5LgorICoKKyAqIEBmaWxlbmFtZTogVGhlIHByb2dyYW0gYWJvdXQgdG8gc3RhcnQuCisgKgorICogVGhpcyBmdW5jdGlvbiBjaGVja3Mgd2hldGhlciBAZmlsZW5hbWUgaXMgL3NiaW4vaW5pdCAsIGFuZCBpZiBzbworICogaW52b2tlIC9zYmluL3RvbW95by1pbml0IGFuZCB3YWl0IGZvciB0aGUgdGVybWluYXRpb24gb2YgL3NiaW4vdG9tb3lvLWluaXQKKyAqIGFuZCB0aGVuIGNvbnRpbnVlcyBpbnZvY2F0aW9uIG9mIC9zYmluL2luaXQuCisgKiAvc2Jpbi90b21veW8taW5pdCByZWFkcyBwb2xpY3kgZmlsZXMgaW4gL2V0Yy90b21veW8vIGRpcmVjdG9yeSBhbmQKKyAqIHdyaXRlcyB0byAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vIGludGVyZmFjZXMuCisgKgorICogUmV0dXJucyBub3RoaW5nLgorICovCit2b2lkIHRvbW95b19sb2FkX3BvbGljeShjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKwljaGFyICphcmd2WzJdOworCWNoYXIgKmVudnBbM107CisKKwlpZiAodG9tb3lvX3BvbGljeV9sb2FkZWQpCisJCXJldHVybjsKKwkvKgorCSAqIENoZWNrIGZpbGVuYW1lIGlzIC9zYmluL2luaXQgb3IgL3NiaW4vdG9tb3lvLXN0YXJ0LgorCSAqIC9zYmluL3RvbW95by1zdGFydCBpcyBhIGR1bW15IGZpbGVuYW1lIGluIGNhc2Ugd2hlcmUgL3NiaW4vaW5pdCBjYW4ndAorCSAqIGJlIHBhc3NlZC4KKwkgKiBZb3UgY2FuIGNyZWF0ZSAvc2Jpbi90b21veW8tc3RhcnQgYnkKKwkgKiAibG4gLXMgL2Jpbi90cnVlIC9zYmluL3RvbW95by1zdGFydCIuCisJICovCisJaWYgKHN0cmNtcChmaWxlbmFtZSwgIi9zYmluL2luaXQiKSAmJgorCSAgICBzdHJjbXAoZmlsZW5hbWUsICIvc2Jpbi90b21veW8tc3RhcnQiKSkKKwkJcmV0dXJuOworCWlmICghdG9tb3lvX3BvbGljeV9sb2FkZXJfZXhpc3RzKCkpCisJCXJldHVybjsKKworCXByaW50ayhLRVJOX0lORk8gIkNhbGxpbmcgJXMgdG8gbG9hZCBwb2xpY3kuIFBsZWFzZSB3YWl0LlxuIiwKKwkgICAgICAgdG9tb3lvX2xvYWRlcik7CisJYXJndlswXSA9IChjaGFyICopIHRvbW95b19sb2FkZXI7CisJYXJndlsxXSA9IE5VTEw7CisJZW52cFswXSA9ICJIT01FPS8iOworCWVudnBbMV0gPSAiUEFUSD0vc2JpbjovYmluOi91c3Ivc2JpbjovdXNyL2JpbiI7CisJZW52cFsyXSA9IE5VTEw7CisJY2FsbF91c2VybW9kZWhlbHBlcihhcmd2WzBdLCBhcmd2LCBlbnZwLCAxKTsKKworCXByaW50ayhLRVJOX0lORk8gIlRPTU9ZTzogMi4yLjAtcHJlICAgMjAwOS8wMi8wMVxuIik7CisJcHJpbnRrKEtFUk5fSU5GTyAiTWFuZGF0b3J5IEFjY2VzcyBDb250cm9sIGFjdGl2YXRlZC5cbiIpOworCXRvbW95b19wb2xpY3lfbG9hZGVkID0gdHJ1ZTsKKwl7IC8qIENoZWNrIGFsbCBwcm9maWxlcyBjdXJyZW50bHkgYXNzaWduZWQgdG8gZG9tYWlucyBhcmUgZGVmaW5lZC4gKi8KKwkJc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluOworCQlkb3duX3JlYWQoJnRvbW95b19kb21haW5fbGlzdF9sb2NrKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShkb21haW4sICZ0b21veW9fZG9tYWluX2xpc3QsIGxpc3QpIHsKKwkJCWNvbnN0IHU4IHByb2ZpbGUgPSBkb21haW4tPnByb2ZpbGU7CisJCQlpZiAodG9tb3lvX3Byb2ZpbGVfcHRyW3Byb2ZpbGVdKQorCQkJCWNvbnRpbnVlOworCQkJcGFuaWMoIlByb2ZpbGUgJXUgKHVzZWQgYnkgJyVzJykgbm90IGRlZmluZWQuXG4iLAorCQkJICAgICAgcHJvZmlsZSwgZG9tYWluLT5kb21haW5uYW1lLT5uYW1lKTsKKwkJfQorCQl1cF9yZWFkKCZ0b21veW9fZG9tYWluX2xpc3RfbG9jayk7CisJfQorfQorCisvKioKKyAqIHRvbW95b19yZWFkX3ZlcnNpb246IEdldCB2ZXJzaW9uLgorICoKKyAqIEBoZWFkOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciIuCisgKgorICogUmV0dXJucyB2ZXJzaW9uIGluZm9ybWF0aW9uLgorICovCitzdGF0aWMgaW50IHRvbW95b19yZWFkX3ZlcnNpb24oc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpCit7CisJaWYgKCFoZWFkLT5yZWFkX2VvZikgeworCQl0b21veW9faW9fcHJpbnRmKGhlYWQsICIyLjIuMC1wcmUiKTsKKwkJaGVhZC0+cmVhZF9lb2YgPSB0cnVlOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB0b21veW9fcmVhZF9zZWxmX2RvbWFpbiAtIEdldCB0aGUgY3VycmVudCBwcm9jZXNzJ3MgZG9tYWlubmFtZS4KKyAqCisgKiBAaGVhZDogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19pb19idWZmZXIiLgorICoKKyAqIFJldHVybnMgdGhlIGN1cnJlbnQgcHJvY2VzcydzIGRvbWFpbm5hbWUuCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX3JlYWRfc2VsZl9kb21haW4oc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpCit7CisJaWYgKCFoZWFkLT5yZWFkX2VvZikgeworCQkvKgorCQkgKiB0b21veW9fZG9tYWluKCktPmRvbWFpbm5hbWUgIT0gTlVMTAorCQkgKiBiZWNhdXNlIGV2ZXJ5IHByb2Nlc3MgYmVsb25ncyB0byBhIGRvbWFpbiBhbmQKKwkJICogdGhlIGRvbWFpbidzIG5hbWUgY2Fubm90IGJlIE5VTEwuCisJCSAqLworCQl0b21veW9faW9fcHJpbnRmKGhlYWQsICIlcyIsIHRvbW95b19kb21haW4oKS0+ZG9tYWlubmFtZS0+bmFtZSk7CisJCWhlYWQtPnJlYWRfZW9mID0gdHJ1ZTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdG9tb3lvX29wZW5fY29udHJvbCAtIG9wZW4oKSBmb3IgL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvLyBpbnRlcmZhY2UuCisgKgorICogQHR5cGU6IFR5cGUgb2YgaW50ZXJmYWNlLgorICogQGZpbGU6IFBvaW50ZXIgdG8gInN0cnVjdCBmaWxlIi4KKyAqCisgKiBBc3NvY2lhdGVzIHBvbGljeSBoYW5kbGVyIGFuZCByZXR1cm5zIDAgb24gc3VjY2VzcywgLUVOT01FTSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX29wZW5fY29udHJvbChjb25zdCB1OCB0eXBlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCA9IHRvbW95b19hbGxvYyhzaXplb2YoKmhlYWQpKTsKKworCWlmICghaGVhZCkKKwkJcmV0dXJuIC1FTk9NRU07CisJbXV0ZXhfaW5pdCgmaGVhZC0+aW9fc2VtKTsKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIFRPTU9ZT19ET01BSU5QT0xJQ1k6CisJCS8qIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by9kb21haW5fcG9saWN5ICovCisJCWhlYWQtPndyaXRlID0gdG9tb3lvX3dyaXRlX2RvbWFpbl9wb2xpY3k7CisJCWhlYWQtPnJlYWQgPSB0b21veW9fcmVhZF9kb21haW5fcG9saWN5OworCQlicmVhazsKKwljYXNlIFRPTU9ZT19FWENFUFRJT05QT0xJQ1k6CisJCS8qIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by9leGNlcHRpb25fcG9saWN5ICovCisJCWhlYWQtPndyaXRlID0gdG9tb3lvX3dyaXRlX2V4Y2VwdGlvbl9wb2xpY3k7CisJCWhlYWQtPnJlYWQgPSB0b21veW9fcmVhZF9leGNlcHRpb25fcG9saWN5OworCQlicmVhazsKKwljYXNlIFRPTU9ZT19TRUxGRE9NQUlOOgorCQkvKiAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vc2VsZl9kb21haW4gKi8KKwkJaGVhZC0+cmVhZCA9IHRvbW95b19yZWFkX3NlbGZfZG9tYWluOworCQlicmVhazsKKwljYXNlIFRPTU9ZT19ET01BSU5fU1RBVFVTOgorCQkvKiAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vLmRvbWFpbl9zdGF0dXMgKi8KKwkJaGVhZC0+d3JpdGUgPSB0b21veW9fd3JpdGVfZG9tYWluX3Byb2ZpbGU7CisJCWhlYWQtPnJlYWQgPSB0b21veW9fcmVhZF9kb21haW5fcHJvZmlsZTsKKwkJYnJlYWs7CisJY2FzZSBUT01PWU9fUFJPQ0VTU19TVEFUVVM6CisJCS8qIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by8ucHJvY2Vzc19zdGF0dXMgKi8KKwkJaGVhZC0+d3JpdGUgPSB0b21veW9fd3JpdGVfcGlkOworCQloZWFkLT5yZWFkID0gdG9tb3lvX3JlYWRfcGlkOworCQlicmVhazsKKwljYXNlIFRPTU9ZT19WRVJTSU9OOgorCQkvKiAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vdmVyc2lvbiAqLworCQloZWFkLT5yZWFkID0gdG9tb3lvX3JlYWRfdmVyc2lvbjsKKwkJaGVhZC0+cmVhZGJ1Zl9zaXplID0gMTI4OworCQlicmVhazsKKwljYXNlIFRPTU9ZT19NRU1JTkZPOgorCQkvKiAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vbWVtaW5mbyAqLworCQloZWFkLT53cml0ZSA9IHRvbW95b193cml0ZV9tZW1vcnlfcXVvdGE7CisJCWhlYWQtPnJlYWQgPSB0b21veW9fcmVhZF9tZW1vcnlfY291bnRlcjsKKwkJaGVhZC0+cmVhZGJ1Zl9zaXplID0gNTEyOworCQlicmVhazsKKwljYXNlIFRPTU9ZT19QUk9GSUxFOgorCQkvKiAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vcHJvZmlsZSAqLworCQloZWFkLT53cml0ZSA9IHRvbW95b193cml0ZV9wcm9maWxlOworCQloZWFkLT5yZWFkID0gdG9tb3lvX3JlYWRfcHJvZmlsZTsKKwkJYnJlYWs7CisJY2FzZSBUT01PWU9fTUFOQUdFUjoKKwkJLyogL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvL21hbmFnZXIgKi8KKwkJaGVhZC0+d3JpdGUgPSB0b21veW9fd3JpdGVfbWFuYWdlcl9wb2xpY3k7CisJCWhlYWQtPnJlYWQgPSB0b21veW9fcmVhZF9tYW5hZ2VyX3BvbGljeTsKKwkJYnJlYWs7CisJfQorCWlmICghKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpKSB7CisJCS8qCisJCSAqIE5vIG5lZWQgdG8gYWxsb2NhdGUgcmVhZF9idWYgc2luY2UgaXQgaXMgbm90IG9wZW5lZAorCQkgKiBmb3IgcmVhZGluZy4KKwkJICovCisJCWhlYWQtPnJlYWQgPSBOVUxMOworCX0gZWxzZSB7CisJCWlmICghaGVhZC0+cmVhZGJ1Zl9zaXplKQorCQkJaGVhZC0+cmVhZGJ1Zl9zaXplID0gNDA5NiAqIDI7CisJCWhlYWQtPnJlYWRfYnVmID0gdG9tb3lvX2FsbG9jKGhlYWQtPnJlYWRidWZfc2l6ZSk7CisJCWlmICghaGVhZC0+cmVhZF9idWYpIHsKKwkJCXRvbW95b19mcmVlKGhlYWQpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwl9CisJaWYgKCEoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpKSB7CisJCS8qCisJCSAqIE5vIG5lZWQgdG8gYWxsb2NhdGUgd3JpdGVfYnVmIHNpbmNlIGl0IGlzIG5vdCBvcGVuZWQKKwkJICogZm9yIHdyaXRpbmcuCisJCSAqLworCQloZWFkLT53cml0ZSA9IE5VTEw7CisJfSBlbHNlIGlmIChoZWFkLT53cml0ZSkgeworCQloZWFkLT53cml0ZWJ1Zl9zaXplID0gNDA5NiAqIDI7CisJCWhlYWQtPndyaXRlX2J1ZiA9IHRvbW95b19hbGxvYyhoZWFkLT53cml0ZWJ1Zl9zaXplKTsKKwkJaWYgKCFoZWFkLT53cml0ZV9idWYpIHsKKwkJCXRvbW95b19mcmVlKGhlYWQtPnJlYWRfYnVmKTsKKwkJCXRvbW95b19mcmVlKGhlYWQpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwl9CisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gaGVhZDsKKwkvKgorCSAqIENhbGwgdGhlIGhhbmRsZXIgbm93IGlmIHRoZSBmaWxlIGlzCisJICogL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvL3NlbGZfZG9tYWluCisJICogc28gdGhhdCB0aGUgdXNlciBjYW4gdXNlCisJICogY2F0IDwgL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvL3NlbGZfZG9tYWluIgorCSAqIHRvIGtub3cgdGhlIGN1cnJlbnQgcHJvY2VzcydzIGRvbWFpbm5hbWUuCisJICovCisJaWYgKHR5cGUgPT0gVE9NT1lPX1NFTEZET01BSU4pCisJCXRvbW95b19yZWFkX2NvbnRyb2woZmlsZSwgTlVMTCwgMCk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdG9tb3lvX3JlYWRfY29udHJvbCAtIHJlYWQoKSBmb3IgL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvLyBpbnRlcmZhY2UuCisgKgorICogQGZpbGU6ICAgICAgIFBvaW50ZXIgdG8gInN0cnVjdCBmaWxlIi4KKyAqIEBidWZmZXI6ICAgICBQb2luZXIgdG8gYnVmZmVyIHRvIHdyaXRlIHRvLgorICogQGJ1ZmZlcl9sZW46IFNpemUgb2YgQGJ1ZmZlci4KKyAqCisgKiBSZXR1cm5zIGJ5dGVzIHJlYWQgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IHRvbW95b19yZWFkX2NvbnRyb2woc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWZmZXIsCisJCQkgICAgICAgY29uc3QgaW50IGJ1ZmZlcl9sZW4pCit7CisJaW50IGxlbiA9IDA7CisJc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJY2hhciAqY3A7CisKKwlpZiAoIWhlYWQtPnJlYWQpCisJCXJldHVybiAtRU5PU1lTOworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmhlYWQtPmlvX3NlbSkpCisJCXJldHVybiAtRUlOVFI7CisJLyogQ2FsbCB0aGUgcG9saWN5IGhhbmRsZXIuICovCisJbGVuID0gaGVhZC0+cmVhZChoZWFkKTsKKwlpZiAobGVuIDwgMCkKKwkJZ290byBvdXQ7CisJLyogV3JpdGUgdG8gYnVmZmVyLiAqLworCWxlbiA9IGhlYWQtPnJlYWRfYXZhaWw7CisJaWYgKGxlbiA+IGJ1ZmZlcl9sZW4pCisJCWxlbiA9IGJ1ZmZlcl9sZW47CisJaWYgKCFsZW4pCisJCWdvdG8gb3V0OworCS8qIGhlYWQtPnJlYWRfYnVmIGNoYW5nZXMgYnkgc29tZSBmdW5jdGlvbnMuICovCisJY3AgPSBoZWFkLT5yZWFkX2J1ZjsKKwlpZiAoY29weV90b191c2VyKGJ1ZmZlciwgY3AsIGxlbikpIHsKKwkJbGVuID0gLUVGQVVMVDsKKwkJZ290byBvdXQ7CisJfQorCWhlYWQtPnJlYWRfYXZhaWwgLT0gbGVuOworCW1lbW1vdmUoY3AsIGNwICsgbGVuLCBoZWFkLT5yZWFkX2F2YWlsKTsKKyBvdXQ6CisJbXV0ZXhfdW5sb2NrKCZoZWFkLT5pb19zZW0pOworCXJldHVybiBsZW47Cit9CisKKy8qKgorICogdG9tb3lvX3dyaXRlX2NvbnRyb2wgLSB3cml0ZSgpIGZvciAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vIGludGVyZmFjZS4KKyAqCisgKiBAZmlsZTogICAgICAgUG9pbnRlciB0byAic3RydWN0IGZpbGUiLgorICogQGJ1ZmZlcjogICAgIFBvaW50ZXIgdG8gYnVmZmVyIHRvIHJlYWQgZnJvbS4KKyAqIEBidWZmZXJfbGVuOiBTaXplIG9mIEBidWZmZXIuCisgKgorICogUmV0dXJucyBAYnVmZmVyX2xlbiBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX3dyaXRlX2NvbnRyb2woc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCisJCQkJY29uc3QgaW50IGJ1ZmZlcl9sZW4pCit7CisJc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJaW50IGVycm9yID0gYnVmZmVyX2xlbjsKKwlpbnQgYXZhaWxfbGVuID0gYnVmZmVyX2xlbjsKKwljaGFyICpjcDAgPSBoZWFkLT53cml0ZV9idWY7CisKKwlpZiAoIWhlYWQtPndyaXRlKQorCQlyZXR1cm4gLUVOT1NZUzsKKwlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgYnVmZmVyLCBidWZmZXJfbGVuKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJLyogRG9uJ3QgYWxsb3cgdXBkYXRpbmcgcG9saWNpZXMgYnkgbm9uIG1hbmFnZXIgcHJvZ3JhbXMuICovCisJaWYgKGhlYWQtPndyaXRlICE9IHRvbW95b193cml0ZV9waWQgJiYKKwkgICAgaGVhZC0+d3JpdGUgIT0gdG9tb3lvX3dyaXRlX2RvbWFpbl9wb2xpY3kgJiYKKwkgICAgIXRvbW95b19pc19wb2xpY3lfbWFuYWdlcigpKQorCQlyZXR1cm4gLUVQRVJNOworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmhlYWQtPmlvX3NlbSkpCisJCXJldHVybiAtRUlOVFI7CisJLyogUmVhZCBhIGxpbmUgYW5kIGRpc3BhdGNoIGl0IHRvIHRoZSBwb2xpY3kgaGFuZGxlci4gKi8KKwl3aGlsZSAoYXZhaWxfbGVuID4gMCkgeworCQljaGFyIGM7CisJCWlmIChoZWFkLT53cml0ZV9hdmFpbCA+PSBoZWFkLT53cml0ZWJ1Zl9zaXplIC0gMSkgeworCQkJZXJyb3IgPSAtRU5PTUVNOworCQkJYnJlYWs7CisJCX0gZWxzZSBpZiAoZ2V0X3VzZXIoYywgYnVmZmVyKSkgeworCQkJZXJyb3IgPSAtRUZBVUxUOworCQkJYnJlYWs7CisJCX0KKwkJYnVmZmVyKys7CisJCWF2YWlsX2xlbi0tOworCQljcDBbaGVhZC0+d3JpdGVfYXZhaWwrK10gPSBjOworCQlpZiAoYyAhPSAnXG4nKQorCQkJY29udGludWU7CisJCWNwMFtoZWFkLT53cml0ZV9hdmFpbCAtIDFdID0gJ1wwJzsKKwkJaGVhZC0+d3JpdGVfYXZhaWwgPSAwOworCQl0b21veW9fbm9ybWFsaXplX2xpbmUoY3AwKTsKKwkJaGVhZC0+d3JpdGUoaGVhZCk7CisJfQorCW11dGV4X3VubG9jaygmaGVhZC0+aW9fc2VtKTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qKgorICogdG9tb3lvX2Nsb3NlX2NvbnRyb2wgLSBjbG9zZSgpIGZvciAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vIGludGVyZmFjZS4KKyAqCisgKiBAZmlsZTogUG9pbnRlciB0byAic3RydWN0IGZpbGUiLgorICoKKyAqIFJlbGVhc2VzIG1lbW9yeSBhbmQgcmV0dXJucyAwLgorICovCitzdGF0aWMgaW50IHRvbW95b19jbG9zZV9jb250cm9sKHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJLyogUmVsZWFzZSBtZW1vcnkgdXNlZCBmb3IgcG9saWN5IEkvTy4gKi8KKwl0b21veW9fZnJlZShoZWFkLT5yZWFkX2J1Zik7CisJaGVhZC0+cmVhZF9idWYgPSBOVUxMOworCXRvbW95b19mcmVlKGhlYWQtPndyaXRlX2J1Zik7CisJaGVhZC0+d3JpdGVfYnVmID0gTlVMTDsKKwl0b21veW9fZnJlZShoZWFkKTsKKwloZWFkID0gTlVMTDsKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOworCXJldHVybiAwOworfQorCisvKioKKyAqIHRvbW95b19hbGxvY19hY2xfZWxlbWVudCAtIEFsbG9jYXRlIHBlcm1hbmVudCBtZW1vcnkgZm9yIEFDTCBlbnRyeS4KKyAqCisgKiBAYWNsX3R5cGU6ICBUeXBlIG9mIEFDTCBlbnRyeS4KKyAqCisgKiBSZXR1cm5zIHBvaW50ZXIgdG8gdGhlIEFDTCBlbnRyeSBvbiBzdWNjZXNzLCBOVUxMIG90aGVyd2lzZS4KKyAqLwordm9pZCAqdG9tb3lvX2FsbG9jX2FjbF9lbGVtZW50KGNvbnN0IHU4IGFjbF90eXBlKQoreworCWludCBsZW47CisJc3RydWN0IHRvbW95b19hY2xfaW5mbyAqcHRyOworCisJc3dpdGNoIChhY2xfdHlwZSkgeworCWNhc2UgVE9NT1lPX1RZUEVfU0lOR0xFX1BBVEhfQUNMOgorCQlsZW4gPSBzaXplb2Yoc3RydWN0IHRvbW95b19zaW5nbGVfcGF0aF9hY2xfcmVjb3JkKTsKKwkJYnJlYWs7CisJY2FzZSBUT01PWU9fVFlQRV9ET1VCTEVfUEFUSF9BQ0w6CisJCWxlbiA9IHNpemVvZihzdHJ1Y3QgdG9tb3lvX2RvdWJsZV9wYXRoX2FjbF9yZWNvcmQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gTlVMTDsKKwl9CisJcHRyID0gdG9tb3lvX2FsbG9jX2VsZW1lbnQobGVuKTsKKwlpZiAoIXB0cikKKwkJcmV0dXJuIE5VTEw7CisJcHRyLT50eXBlID0gYWNsX3R5cGU7CisJcmV0dXJuIHB0cjsKK30KKworLyoqCisgKiB0b21veW9fb3BlbiAtIG9wZW4oKSBmb3IgL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvLyBpbnRlcmZhY2UuCisgKgorICogQGlub2RlOiBQb2ludGVyIHRvICJzdHJ1Y3QgaW5vZGUiLgorICogQGZpbGU6ICBQb2ludGVyIHRvICJzdHJ1Y3QgZmlsZSIuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCB0b21veW9fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwljb25zdCBpbnQga2V5ID0gKCh1OCAqKSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX3ByaXZhdGUpCisJCS0gKCh1OCAqKSBOVUxMKTsKKwlyZXR1cm4gdG9tb3lvX29wZW5fY29udHJvbChrZXksIGZpbGUpOworfQorCisvKioKKyAqIHRvbW95b19yZWxlYXNlIC0gY2xvc2UoKSBmb3IgL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvLyBpbnRlcmZhY2UuCisgKgorICogQGlub2RlOiBQb2ludGVyIHRvICJzdHJ1Y3QgaW5vZGUiLgorICogQGZpbGU6ICBQb2ludGVyIHRvICJzdHJ1Y3QgZmlsZSIuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCB0b21veW9fcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gdG9tb3lvX2Nsb3NlX2NvbnRyb2woZmlsZSk7Cit9CisKKy8qKgorICogdG9tb3lvX3JlYWQgLSByZWFkKCkgZm9yIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by8gaW50ZXJmYWNlLgorICoKKyAqIEBmaWxlOiAgUG9pbnRlciB0byAic3RydWN0IGZpbGUiLgorICogQGJ1ZjogICBQb2ludGVyIHRvIGJ1ZmZlci4KKyAqIEBjb3VudDogU2l6ZSBvZiBAYnVmLgorICogQHBwb3M6ICBVbnVzZWQuCisgKgorICogUmV0dXJucyBieXRlcyByZWFkIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIHNzaXplX3QgdG9tb3lvX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwKKwkJCSAgIGxvZmZfdCAqcHBvcykKK3sKKwlyZXR1cm4gdG9tb3lvX3JlYWRfY29udHJvbChmaWxlLCBidWYsIGNvdW50KTsKK30KKworLyoqCisgKiB0b21veW9fd3JpdGUgLSB3cml0ZSgpIGZvciAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vIGludGVyZmFjZS4KKyAqCisgKiBAZmlsZTogIFBvaW50ZXIgdG8gInN0cnVjdCBmaWxlIi4KKyAqIEBidWY6ICAgUG9pbnRlciB0byBidWZmZXIuCisgKiBAY291bnQ6IFNpemUgb2YgQGJ1Zi4KKyAqIEBwcG9zOiAgVW51c2VkLgorICoKKyAqIFJldHVybnMgQGNvdW50IG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIHNzaXplX3QgdG9tb3lvX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAorCQkJICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXJldHVybiB0b21veW9fd3JpdGVfY29udHJvbChmaWxlLCBidWYsIGNvdW50KTsKK30KKworLyogT3BlcmF0aW9ucyBmb3IgL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvLyBpbnRlcmZhY2UuICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0b21veW9fb3BlcmF0aW9ucyA9IHsKKwkub3BlbiAgICA9IHRvbW95b19vcGVuLAorCS5yZWxlYXNlID0gdG9tb3lvX3JlbGVhc2UsCisJLnJlYWQgICAgPSB0b21veW9fcmVhZCwKKwkud3JpdGUgICA9IHRvbW95b193cml0ZSwKK307CisKKy8qKgorICogdG9tb3lvX2NyZWF0ZV9lbnRyeSAtIENyZWF0ZSBpbnRlcmZhY2UgZmlsZXMgdW5kZXIgL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvLyBkaXJlY3RvcnkuCisgKgorICogQG5hbWU6ICAgVGhlIG5hbWUgb2YgdGhlIGludGVyZmFjZSBmaWxlLgorICogQG1vZGU6ICAgVGhlIHBlcm1pc3Npb24gb2YgdGhlIGludGVyZmFjZSBmaWxlLgorICogQHBhcmVudDogVGhlIHBhcmVudCBkaXJlY3RvcnkuCisgKiBAa2V5OiAgICBUeXBlIG9mIGludGVyZmFjZS4KKyAqCisgKiBSZXR1cm5zIG5vdGhpbmcuCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCB0b21veW9fY3JlYXRlX2VudHJ5KGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IG1vZGVfdCBtb2RlLAorCQkJCSAgICAgICBzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsIGNvbnN0IHU4IGtleSkKK3sKKwlzZWN1cml0eWZzX2NyZWF0ZV9maWxlKG5hbWUsIG1vZGUsIHBhcmVudCwgKCh1OCAqKSBOVUxMKSArIGtleSwKKwkJCSAgICAgICAmdG9tb3lvX29wZXJhdGlvbnMpOworfQorCisvKioKKyAqIHRvbW95b19pbml0ZXJmYWNlX2luaXQgLSBJbml0aWFsaXplIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by8gaW50ZXJmYWNlLgorICoKKyAqIFJldHVybnMgMC4KKyAqLworc3RhdGljIGludCBfX2luaXQgdG9tb3lvX2luaXRlcmZhY2VfaW5pdCh2b2lkKQoreworCXN0cnVjdCBkZW50cnkgKnRvbW95b19kaXI7CisKKwkvKiBEb24ndCBjcmVhdGUgc2VjdXJpdHlmcyBlbnRyaWVzIHVubGVzcyByZWdpc3RlcmVkLiAqLworCWlmIChjdXJyZW50X2NyZWQoKS0+c2VjdXJpdHkgIT0gJnRvbW95b19rZXJuZWxfZG9tYWluKQorCQlyZXR1cm4gMDsKKworCXRvbW95b19kaXIgPSBzZWN1cml0eWZzX2NyZWF0ZV9kaXIoInRvbW95byIsIE5VTEwpOworCXRvbW95b19jcmVhdGVfZW50cnkoImRvbWFpbl9wb2xpY3kiLCAgICAwNjAwLCB0b21veW9fZGlyLAorCQkJICAgIFRPTU9ZT19ET01BSU5QT0xJQ1kpOworCXRvbW95b19jcmVhdGVfZW50cnkoImV4Y2VwdGlvbl9wb2xpY3kiLCAwNjAwLCB0b21veW9fZGlyLAorCQkJICAgIFRPTU9ZT19FWENFUFRJT05QT0xJQ1kpOworCXRvbW95b19jcmVhdGVfZW50cnkoInNlbGZfZG9tYWluIiwgICAgICAwNDAwLCB0b21veW9fZGlyLAorCQkJICAgIFRPTU9ZT19TRUxGRE9NQUlOKTsKKwl0b21veW9fY3JlYXRlX2VudHJ5KCIuZG9tYWluX3N0YXR1cyIsICAgMDYwMCwgdG9tb3lvX2RpciwKKwkJCSAgICBUT01PWU9fRE9NQUlOX1NUQVRVUyk7CisJdG9tb3lvX2NyZWF0ZV9lbnRyeSgiLnByb2Nlc3Nfc3RhdHVzIiwgIDA2MDAsIHRvbW95b19kaXIsCisJCQkgICAgVE9NT1lPX1BST0NFU1NfU1RBVFVTKTsKKwl0b21veW9fY3JlYXRlX2VudHJ5KCJtZW1pbmZvIiwgICAgICAgICAgMDYwMCwgdG9tb3lvX2RpciwKKwkJCSAgICBUT01PWU9fTUVNSU5GTyk7CisJdG9tb3lvX2NyZWF0ZV9lbnRyeSgicHJvZmlsZSIsICAgICAgICAgIDA2MDAsIHRvbW95b19kaXIsCisJCQkgICAgVE9NT1lPX1BST0ZJTEUpOworCXRvbW95b19jcmVhdGVfZW50cnkoIm1hbmFnZXIiLCAgICAgICAgICAwNjAwLCB0b21veW9fZGlyLAorCQkJICAgIFRPTU9ZT19NQU5BR0VSKTsKKwl0b21veW9fY3JlYXRlX2VudHJ5KCJ2ZXJzaW9uIiwgICAgICAgICAgMDQwMCwgdG9tb3lvX2RpciwKKwkJCSAgICBUT01PWU9fVkVSU0lPTik7CisJcmV0dXJuIDA7Cit9CisKK2ZzX2luaXRjYWxsKHRvbW95b19pbml0ZXJmYWNlX2luaXQpOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvdG9tb3lvL2NvbW1vbi5oIGIvc2VjdXJpdHkvdG9tb3lvL2NvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkY2I3Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9zZWN1cml0eS90b21veW8vY29tbW9uLmgKQEAgLTAsMCArMSwzNTkgQEAKKy8qCisgKiBzZWN1cml0eS90b21veW8vY29tbW9uLmgKKyAqCisgKiBDb21tb24gZnVuY3Rpb25zIGZvciBUT01PWU8uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDkgIE5UVCBEQVRBIENPUlBPUkFUSU9OCisgKgorICogVmVyc2lvbjogMi4yLjAtcHJlICAgMjAwOS8wMi8wMQorICoKKyAqLworCisjaWZuZGVmIF9TRUNVUklUWV9UT01PWU9fQ09NTU9OX0gKKyNkZWZpbmUgX1NFQ1VSSVRZX1RPTU9ZT19DT01NT05fSAorCisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rbW9kLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L25hbWVpLmg+CisjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisKK3N0cnVjdCBkZW50cnk7CitzdHJ1Y3QgdmZzbW91bnQ7CisKKy8qIFRlbXBvcmFyeSBidWZmZXIgZm9yIGhvbGRpbmcgcGF0aG5hbWVzLiAqLworc3RydWN0IHRvbW95b19wYWdlX2J1ZmZlciB7CisJY2hhciBidWZmZXJbNDA5Nl07Cit9OworCisvKiBTdHJ1Y3R1cmUgZm9yIGhvbGRpbmcgYSB0b2tlbi4gKi8KK3N0cnVjdCB0b21veW9fcGF0aF9pbmZvIHsKKwljb25zdCBjaGFyICpuYW1lOworCXUzMiBoYXNoOyAgICAgICAgICAvKiA9IGZ1bGxfbmFtZV9oYXNoKG5hbWUsIHN0cmxlbihuYW1lKSkgKi8KKwl1MTYgdG90YWxfbGVuOyAgICAgLyogPSBzdHJsZW4obmFtZSkgICAgICAgICAgICAgICAgICAgICAgICovCisJdTE2IGNvbnN0X2xlbjsgICAgIC8qID0gdG9tb3lvX2NvbnN0X3BhcnRfbGVuZ3RoKG5hbWUpICAgICAqLworCWJvb2wgaXNfZGlyOyAgICAgICAvKiA9IHRvbW95b19zdHJlbmRzd2l0aChuYW1lLCAiLyIpICAgICAgKi8KKwlib29sIGlzX3BhdHRlcm5lZDsgLyogPSB0b21veW9fcGF0aF9jb250YWluc19wYXR0ZXJuKG5hbWUpICovCisJdTE2IGRlcHRoOyAgICAgICAgIC8qID0gdG9tb3lvX3BhdGhfZGVwdGgobmFtZSkgICAgICAgICAgICAqLworfTsKKworLyoKKyAqIFRoaXMgaXMgdGhlIG1heCBsZW5ndGggb2YgYSB0b2tlbi4KKyAqCisgKiBBIHRva2VuIGNvbnNpc3RzIG9mIG9ubHkgQVNDSUkgcHJpbnRhYmxlIGNoYXJhY3RlcnMuCisgKiBOb24gcHJpbnRhYmxlIGNoYXJhY3RlcnMgaW4gYSB0b2tlbiBpcyByZXByZXNlbnRlZCBpbiBcb29vIHN0eWxlCisgKiBvY3RhbCBzdHJpbmcuIFRodXMsIFwgaXRzZWxmIGlzIHJlcHJlc2VudGVkIGFzIFxcLgorICovCisjZGVmaW5lIFRPTU9ZT19NQVhfUEFUSE5BTUVfTEVOIDQwMDAKKworLyogU3RydWN0dXJlIGZvciBob2xkaW5nIHJlcXVlc3RlZCBwYXRobmFtZS4gKi8KK3N0cnVjdCB0b21veW9fcGF0aF9pbmZvX3dpdGhfZGF0YSB7CisJLyogS2VlcCAiaGVhZCIgZmlyc3QsIGZvciB0aGlzIHBvaW50ZXIgaXMgcGFzc2VkIHRvIHRvbW95b19mcmVlKCkuICovCisJc3RydWN0IHRvbW95b19wYXRoX2luZm8gaGVhZDsKKwljaGFyIGJhcmlpZXIxWzE2XTsgLyogU2FmZWd1YXJkIGZvciBvdmVycnVuLiAqLworCWNoYXIgYm9keVtUT01PWU9fTUFYX1BBVEhOQU1FX0xFTl07CisJY2hhciBiYXJyaWVyMlsxNl07IC8qIFNhZmVndWFyZCBmb3Igb3ZlcnJ1bi4gKi8KK307CisKKy8qCisgKiBDb21tb24gaGVhZGVyIGZvciBob2xkaW5nIEFDTCBlbnRyaWVzLgorICoKKyAqIFBhY2tpbmcgInN0cnVjdCB0b21veW9fYWNsX2luZm8iIGFsbG93cworICogInN0cnVjdCB0b21veW9fc2luZ2xlX3BhdGhfYWNsX3JlY29yZCIgdG8gZW1iZWQgInUxNiIgYW5kCisgKiAic3RydWN0IHRvbW95b19kb3VibGVfcGF0aF9hY2xfcmVjb3JkIiB0byBlbWJlZCAidTgiCisgKiB3aXRob3V0IGVubGFyZ2luZyB0aGVpciBzdHJ1Y3R1cmUgc2l6ZS4KKyAqLworc3RydWN0IHRvbW95b19hY2xfaW5mbyB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCS8qCisJICogVHlwZSBvZiB0aGlzIEFDTCBlbnRyeS4KKwkgKgorCSAqIE1TQiBpcyBpc19kZWxldGVkIGZsYWcuCisJICovCisJdTggdHlwZTsKK30gX19wYWNrZWQ7CisKKy8qIFRoaXMgQUNMIGVudHJ5IGlzIGRlbGV0ZWQuICAgICAgICAgICAqLworI2RlZmluZSBUT01PWU9fQUNMX0RFTEVURUQgICAgICAgIDB4ODAKKworLyogU3RydWN0dXJlIGZvciBkb21haW4gaW5mb3JtYXRpb24uICovCitzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IGxpc3RfaGVhZCBhY2xfaW5mb19saXN0OworCS8qIE5hbWUgb2YgdGhpcyBkb21haW4uIE5ldmVyIE5VTEwuICAgICAgICAgICovCisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmRvbWFpbm5hbWU7CisJdTggcHJvZmlsZTsgICAgICAgIC8qIFByb2ZpbGUgbnVtYmVyIHRvIHVzZS4gKi8KKwl1OCBpc19kZWxldGVkOyAgICAgLyogRGVsZXRlIGZsYWcuCisJCQkgICAgICAwID0gYWN0aXZlLgorCQkJICAgICAgMSA9IGRlbGV0ZWQgYnV0IHVuZGVsZXRhYmxlLgorCQkJICAgICAgMjU1ID0gZGVsZXRlZCBhbmQgbm8gbG9uZ2VyIHVuZGVsZXRhYmxlLiAqLworCWJvb2wgcXVvdGFfd2FybmVkOyAvKiBRdW90YSB3YXJubmluZyBmbGFnLiAgICovCisJLyogRE9NQUlOX0ZMQUdTXyouIFVzZSB0b21veW9fc2V0X2RvbWFpbl9mbGFnKCkgdG8gbW9kaWZ5LiAqLworCXU4IGZsYWdzOworfTsKKworLyogUHJvZmlsZSBudW1iZXIgaXMgYW4gaW50ZWdlciBiZXR3ZWVuIDAgYW5kIDI1NS4gKi8KKyNkZWZpbmUgVE9NT1lPX01BWF9QUk9GSUxFUyAyNTYKKworLyogSWdub3JlICJhbGxvd19yZWFkIiBkaXJlY3RpdmUgaW4gZXhjZXB0aW9uIHBvbGljeS4gKi8KKyNkZWZpbmUgVE9NT1lPX0RPTUFJTl9GTEFHU19JR05PUkVfR0xPQkFMX0FMTE9XX1JFQUQgMQorLyoKKyAqIFRoaXMgZG9tYWluIHdhcyB1bmFibGUgdG8gY3JlYXRlIGEgbmV3IGRvbWFpbiBhdCB0b21veW9fZmluZF9uZXh0X2RvbWFpbigpCisgKiBiZWNhdXNlIHRoZSBuYW1lIG9mIHRoZSBkb21haW4gdG8gYmUgY3JlYXRlZCB3YXMgdG9vIGxvbmcgb3IKKyAqIGl0IGNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkuCisgKiBNb3JlIHRoYW4gb25lIHByb2Nlc3MgY29udGludWVkIGV4ZWN2ZSgpIHdpdGhvdXQgZG9tYWluIHRyYW5zaXRpb24uCisgKi8KKyNkZWZpbmUgVE9NT1lPX0RPTUFJTl9GTEFHU19UUkFOU0lUSU9OX0ZBSUxFRCAgICAgICAgMgorCisvKgorICogU3RydWN0dXJlIGZvciAiYWxsb3dfcmVhZC93cml0ZSIsICJhbGxvd19leGVjdXRlIiwgImFsbG93X3JlYWQiLAorICogImFsbG93X3dyaXRlIiwgImFsbG93X2NyZWF0ZSIsICJhbGxvd191bmxpbmsiLCAiYWxsb3dfbWtkaXIiLCAiYWxsb3dfcm1kaXIiLAorICogImFsbG93X21rZmlmbyIsICJhbGxvd19ta3NvY2siLCAiYWxsb3dfbWtibG9jayIsICJhbGxvd19ta2NoYXIiLAorICogImFsbG93X3RydW5jYXRlIiwgImFsbG93X3N5bWxpbmsiIGFuZCAiYWxsb3dfcmV3cml0ZSIgZGlyZWN0aXZlLgorICovCitzdHJ1Y3QgdG9tb3lvX3NpbmdsZV9wYXRoX2FjbF9yZWNvcmQgeworCXN0cnVjdCB0b21veW9fYWNsX2luZm8gaGVhZDsgLyogdHlwZSA9IFRPTU9ZT19UWVBFX1NJTkdMRV9QQVRIX0FDTCAqLworCXUxNiBwZXJtOworCS8qIFBvaW50ZXIgdG8gc2luZ2xlIHBhdGhuYW1lLiAqLworCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpmaWxlbmFtZTsKK307CisKKy8qIFN0cnVjdHVyZSBmb3IgImFsbG93X3JlbmFtZSIgYW5kICJhbGxvd19saW5rIiBkaXJlY3RpdmUuICovCitzdHJ1Y3QgdG9tb3lvX2RvdWJsZV9wYXRoX2FjbF9yZWNvcmQgeworCXN0cnVjdCB0b21veW9fYWNsX2luZm8gaGVhZDsgLyogdHlwZSA9IFRPTU9ZT19UWVBFX0RPVUJMRV9QQVRIX0FDTCAqLworCXU4IHBlcm07CisJLyogUG9pbnRlciB0byBzaW5nbGUgcGF0aG5hbWUuICovCisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmZpbGVuYW1lMTsKKwkvKiBQb2ludGVyIHRvIHNpbmdsZSBwYXRobmFtZS4gKi8KKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqZmlsZW5hbWUyOworfTsKKworLyogS2V5d29yZHMgZm9yIEFDTHMuICovCisjZGVmaW5lIFRPTU9ZT19LRVlXT1JEX0FMSUFTICAgICAgICAgICAgICAgICAgICAgImFsaWFzICIKKyNkZWZpbmUgVE9NT1lPX0tFWVdPUkRfQUxMT1dfUkVBRCAgICAgICAgICAgICAgICAiYWxsb3dfcmVhZCAiCisjZGVmaW5lIFRPTU9ZT19LRVlXT1JEX0RFTEVURSAgICAgICAgICAgICAgICAgICAgImRlbGV0ZSAiCisjZGVmaW5lIFRPTU9ZT19LRVlXT1JEX0RFTllfUkVXUklURSAgICAgICAgICAgICAgImRlbnlfcmV3cml0ZSAiCisjZGVmaW5lIFRPTU9ZT19LRVlXT1JEX0ZJTEVfUEFUVEVSTiAgICAgICAgICAgICAgImZpbGVfcGF0dGVybiAiCisjZGVmaW5lIFRPTU9ZT19LRVlXT1JEX0lOSVRJQUxJWkVfRE9NQUlOICAgICAgICAgImluaXRpYWxpemVfZG9tYWluICIKKyNkZWZpbmUgVE9NT1lPX0tFWVdPUkRfS0VFUF9ET01BSU4gICAgICAgICAgICAgICAia2VlcF9kb21haW4gIgorI2RlZmluZSBUT01PWU9fS0VZV09SRF9OT19JTklUSUFMSVpFX0RPTUFJTiAgICAgICJub19pbml0aWFsaXplX2RvbWFpbiAiCisjZGVmaW5lIFRPTU9ZT19LRVlXT1JEX05PX0tFRVBfRE9NQUlOICAgICAgICAgICAgIm5vX2tlZXBfZG9tYWluICIKKyNkZWZpbmUgVE9NT1lPX0tFWVdPUkRfU0VMRUNUICAgICAgICAgICAgICAgICAgICAic2VsZWN0ICIKKyNkZWZpbmUgVE9NT1lPX0tFWVdPUkRfVU5ERUxFVEUgICAgICAgICAgICAgICAgICAidW5kZWxldGUgIgorI2RlZmluZSBUT01PWU9fS0VZV09SRF9VU0VfUFJPRklMRSAgICAgICAgICAgICAgICJ1c2VfcHJvZmlsZSAiCisjZGVmaW5lIFRPTU9ZT19LRVlXT1JEX0lHTk9SRV9HTE9CQUxfQUxMT1dfUkVBRCAgImlnbm9yZV9nbG9iYWxfYWxsb3dfcmVhZCIKKy8qIEEgZG9tYWluIGRlZmluaXRpb24gc3RhcnRzIHdpdGggPGtlcm5lbD4uICovCisjZGVmaW5lIFRPTU9ZT19ST09UX05BTUUgICAgICAgICAgICAgICAgICAgICAgICAgIjxrZXJuZWw+IgorI2RlZmluZSBUT01PWU9fUk9PVF9OQU1FX0xFTiAgICAgICAgICAgICAgICAgICAgIChzaXplb2YoVE9NT1lPX1JPT1RfTkFNRSkgLSAxKQorCisvKiBJbmRleCBudW1iZXJzIGZvciBBY2Nlc3MgQ29udHJvbHMuICovCisjZGVmaW5lIFRPTU9ZT19NQUNfRk9SX0ZJTEUgICAgICAgICAgICAgICAgICAwICAvKiBkb21haW5fcG9saWN5LmNvbmYgKi8KKyNkZWZpbmUgVE9NT1lPX01BWF9BQ0NFUFRfRU5UUlkgICAgICAgICAgICAgIDEKKyNkZWZpbmUgVE9NT1lPX1ZFUkJPU0UgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgVE9NT1lPX01BWF9DT05UUk9MX0lOREVYICAgICAgICAgICAgIDMKKworLyogU3RydWN0dXJlIGZvciByZWFkaW5nL3dyaXRpbmcgcG9saWN5IHZpYSBzZWN1cml0eWZzIGludGVyZmFjZXMuICovCitzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciB7CisJaW50ICgqcmVhZCkgKHN0cnVjdCB0b21veW9faW9fYnVmZmVyICopOworCWludCAoKndyaXRlKSAoc3RydWN0IHRvbW95b19pb19idWZmZXIgKik7CisJLyogRXhjbHVzaXZlIGxvY2sgZm9yIHRoaXMgc3RydWN0dXJlLiAgICovCisJc3RydWN0IG11dGV4IGlvX3NlbTsKKwkvKiBUaGUgcG9zaXRpb24gY3VycmVudGx5IHJlYWRpbmcgZnJvbS4gKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkICpyZWFkX3ZhcjE7CisJLyogRXh0cmEgdmFyaWFibGVzIGZvciByZWFkaW5nLiAgICAgICAgICovCisJc3RydWN0IGxpc3RfaGVhZCAqcmVhZF92YXIyOworCS8qIFRoZSBwb3NpdGlvbiBjdXJyZW50bHkgd3JpdGluZyB0by4gICAqLworCXN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKndyaXRlX3ZhcjE7CisJLyogVGhlIHN0ZXAgZm9yIHJlYWRpbmcuICAgICAgICAgICAgICAgICovCisJaW50IHJlYWRfc3RlcDsKKwkvKiBCdWZmZXIgZm9yIHJlYWRpbmcuICAgICAgICAgICAgICAgICAgKi8KKwljaGFyICpyZWFkX2J1ZjsKKwkvKiBFT0YgZmxhZyBmb3IgcmVhZGluZy4gICAgICAgICAgICAgICAgKi8KKwlib29sIHJlYWRfZW9mOworCS8qIFJlYWQgZG9tYWluIEFDTCBvZiBzcGVjaWZpZWQgUElEPyAgICAqLworCWJvb2wgcmVhZF9zaW5nbGVfZG9tYWluOworCS8qIEV4dHJhIHZhcmlhYmxlIGZvciByZWFkaW5nLiAgICAgICAgICAqLworCXU4IHJlYWRfYml0OworCS8qIEJ5dGVzIGF2YWlsYWJsZSBmb3IgcmVhZGluZy4gICAgICAgICAqLworCWludCByZWFkX2F2YWlsOworCS8qIFNpemUgb2YgcmVhZCBidWZmZXIuICAgICAgICAgICAgICAgICAqLworCWludCByZWFkYnVmX3NpemU7CisJLyogQnVmZmVyIGZvciB3cml0aW5nLiAgICAgICAgICAgICAgICAgICovCisJY2hhciAqd3JpdGVfYnVmOworCS8qIEJ5dGVzIGF2YWlsYWJsZSBmb3Igd3JpdGluZy4gICAgICAgICAqLworCWludCB3cml0ZV9hdmFpbDsKKwkvKiBTaXplIG9mIHdyaXRlIGJ1ZmZlci4gICAgICAgICAgICAgICAgKi8KKwlpbnQgd3JpdGVidWZfc2l6ZTsKK307CisKKy8qIENoZWNrIHdoZXRoZXIgdGhlIGRvbWFpbiBoYXMgdG9vIG1hbnkgQUNMIGVudHJpZXMgdG8gaG9sZC4gKi8KK2Jvb2wgdG9tb3lvX2RvbWFpbl9xdW90YV9pc19vayhzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICogY29uc3QgZG9tYWluKTsKKy8qIFRyYW5zYWN0aW9uYWwgc3ByaW50ZigpIGZvciBwb2xpY3kgZHVtcC4gKi8KK2Jvb2wgdG9tb3lvX2lvX3ByaW50ZihzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCwgY29uc3QgY2hhciAqZm10LCAuLi4pCisJX19hdHRyaWJ1dGVfXyAoKGZvcm1hdChwcmludGYsIDIsIDMpKSk7CisvKiBDaGVjayB3aGV0aGVyIHRoZSBkb21haW5uYW1lIGlzIGNvcnJlY3QuICovCitib29sIHRvbW95b19pc19jb3JyZWN0X2RvbWFpbihjb25zdCB1bnNpZ25lZCBjaGFyICpkb21haW5uYW1lLAorCQkJICAgICAgY29uc3QgY2hhciAqZnVuY3Rpb24pOworLyogQ2hlY2sgd2hldGhlciB0aGUgdG9rZW4gaXMgY29ycmVjdC4gKi8KK2Jvb2wgdG9tb3lvX2lzX2NvcnJlY3RfcGF0aChjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3Qgczggc3RhcnRfdHlwZSwKKwkJCSAgICBjb25zdCBzOCBwYXR0ZXJuX3R5cGUsIGNvbnN0IHM4IGVuZF90eXBlLAorCQkJICAgIGNvbnN0IGNoYXIgKmZ1bmN0aW9uKTsKKy8qIENoZWNrIHdoZXRoZXIgdGhlIHRva2VuIGNhbiBiZSBhIGRvbWFpbm5hbWUuICovCitib29sIHRvbW95b19pc19kb21haW5fZGVmKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZmZlcik7CisvKiBDaGVjayB3aGV0aGVyIHRoZSBnaXZlbiBmaWxlbmFtZSBtYXRjaGVzIHRoZSBnaXZlbiBwYXR0ZXJuLiAqLworYm9vbCB0b21veW9fcGF0aF9tYXRjaGVzX3BhdHRlcm4oY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmZpbGVuYW1lLAorCQkJCSBjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqcGF0dGVybik7CisvKiBSZWFkICJhbGlhcyIgZW50cnkgaW4gZXhjZXB0aW9uIHBvbGljeS4gKi8KK2Jvb2wgdG9tb3lvX3JlYWRfYWxpYXNfcG9saWN5KHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKTsKKy8qCisgKiBSZWFkICJpbml0aWFsaXplX2RvbWFpbiIgYW5kICJub19pbml0aWFsaXplX2RvbWFpbiIgZW50cnkKKyAqIGluIGV4Y2VwdGlvbiBwb2xpY3kuCisgKi8KK2Jvb2wgdG9tb3lvX3JlYWRfZG9tYWluX2luaXRpYWxpemVyX3BvbGljeShzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCk7CisvKiBSZWFkICJrZWVwX2RvbWFpbiIgYW5kICJub19rZWVwX2RvbWFpbiIgZW50cnkgaW4gZXhjZXB0aW9uIHBvbGljeS4gKi8KK2Jvb2wgdG9tb3lvX3JlYWRfZG9tYWluX2tlZXBlcl9wb2xpY3koc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpOworLyogUmVhZCAiZmlsZV9wYXR0ZXJuIiBlbnRyeSBpbiBleGNlcHRpb24gcG9saWN5LiAqLworYm9vbCB0b21veW9fcmVhZF9maWxlX3BhdHRlcm4oc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpOworLyogUmVhZCAiYWxsb3dfcmVhZCIgZW50cnkgaW4gZXhjZXB0aW9uIHBvbGljeS4gKi8KK2Jvb2wgdG9tb3lvX3JlYWRfZ2xvYmFsbHlfcmVhZGFibGVfcG9saWN5KHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKTsKKy8qIFJlYWQgImRlbnlfcmV3cml0ZSIgZW50cnkgaW4gZXhjZXB0aW9uIHBvbGljeS4gKi8KK2Jvb2wgdG9tb3lvX3JlYWRfbm9fcmV3cml0ZV9wb2xpY3koc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpOworLyogV3JpdGUgZG9tYWluIHBvbGljeSB2aW9sYXRpb24gd2FybmluZyBtZXNzYWdlIHRvIGNvbnNvbGU/ICovCitib29sIHRvbW95b192ZXJib3NlX21vZGUoY29uc3Qgc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluKTsKKy8qIENvbnZlcnQgZG91YmxlIHBhdGggb3BlcmF0aW9uIHRvIG9wZXJhdGlvbiBuYW1lLiAqLworY29uc3QgY2hhciAqdG9tb3lvX2RwMmtleXdvcmQoY29uc3QgdTggb3BlcmF0aW9uKTsKKy8qIEdldCB0aGUgbGFzdCBjb21wb25lbnQgb2YgdGhlIGdpdmVuIGRvbWFpbm5hbWUuICovCitjb25zdCBjaGFyICp0b21veW9fZ2V0X2xhc3RfbmFtZShjb25zdCBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4pOworLyogR2V0IHdhcm5pbmcgbWVzc2FnZS4gKi8KK2NvbnN0IGNoYXIgKnRvbW95b19nZXRfbXNnKGNvbnN0IGJvb2wgaXNfZW5mb3JjZSk7CisvKiBDb252ZXJ0IHNpbmdsZSBwYXRoIG9wZXJhdGlvbiB0byBvcGVyYXRpb24gbmFtZS4gKi8KK2NvbnN0IGNoYXIgKnRvbW95b19zcDJrZXl3b3JkKGNvbnN0IHU4IG9wZXJhdGlvbik7CisvKiBEZWxldGUgYSBkb21haW4uICovCitpbnQgdG9tb3lvX2RlbGV0ZV9kb21haW4oY2hhciAqZGF0YSk7CisvKiBDcmVhdGUgImFsaWFzIiBlbnRyeSBpbiBleGNlcHRpb24gcG9saWN5LiAqLworaW50IHRvbW95b193cml0ZV9hbGlhc19wb2xpY3koY2hhciAqZGF0YSwgY29uc3QgYm9vbCBpc19kZWxldGUpOworLyoKKyAqIENyZWF0ZSAiaW5pdGlhbGl6ZV9kb21haW4iIGFuZCAibm9faW5pdGlhbGl6ZV9kb21haW4iIGVudHJ5CisgKiBpbiBleGNlcHRpb24gcG9saWN5LgorICovCitpbnQgdG9tb3lvX3dyaXRlX2RvbWFpbl9pbml0aWFsaXplcl9wb2xpY3koY2hhciAqZGF0YSwgY29uc3QgYm9vbCBpc19ub3QsCisJCQkJCSAgIGNvbnN0IGJvb2wgaXNfZGVsZXRlKTsKKy8qIENyZWF0ZSAia2VlcF9kb21haW4iIGFuZCAibm9fa2VlcF9kb21haW4iIGVudHJ5IGluIGV4Y2VwdGlvbiBwb2xpY3kuICovCitpbnQgdG9tb3lvX3dyaXRlX2RvbWFpbl9rZWVwZXJfcG9saWN5KGNoYXIgKmRhdGEsIGNvbnN0IGJvb2wgaXNfbm90LAorCQkJCSAgICAgIGNvbnN0IGJvb2wgaXNfZGVsZXRlKTsKKy8qCisgKiBDcmVhdGUgImFsbG93X3JlYWQvd3JpdGUiLCAiYWxsb3dfZXhlY3V0ZSIsICJhbGxvd19yZWFkIiwgImFsbG93X3dyaXRlIiwKKyAqICJhbGxvd19jcmVhdGUiLCAiYWxsb3dfdW5saW5rIiwgImFsbG93X21rZGlyIiwgImFsbG93X3JtZGlyIiwKKyAqICJhbGxvd19ta2ZpZm8iLCAiYWxsb3dfbWtzb2NrIiwgImFsbG93X21rYmxvY2siLCAiYWxsb3dfbWtjaGFyIiwKKyAqICJhbGxvd190cnVuY2F0ZSIsICJhbGxvd19zeW1saW5rIiwgImFsbG93X3Jld3JpdGUiLCAiYWxsb3dfcmVuYW1lIiBhbmQKKyAqICJhbGxvd19saW5rIiBlbnRyeSBpbiBkb21haW4gcG9saWN5LgorICovCitpbnQgdG9tb3lvX3dyaXRlX2ZpbGVfcG9saWN5KGNoYXIgKmRhdGEsIHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiwKKwkJCSAgICAgY29uc3QgYm9vbCBpc19kZWxldGUpOworLyogQ3JlYXRlICJhbGxvd19yZWFkIiBlbnRyeSBpbiBleGNlcHRpb24gcG9saWN5LiAqLworaW50IHRvbW95b193cml0ZV9nbG9iYWxseV9yZWFkYWJsZV9wb2xpY3koY2hhciAqZGF0YSwgY29uc3QgYm9vbCBpc19kZWxldGUpOworLyogQ3JlYXRlICJkZW55X3Jld3JpdGUiIGVudHJ5IGluIGV4Y2VwdGlvbiBwb2xpY3kuICovCitpbnQgdG9tb3lvX3dyaXRlX25vX3Jld3JpdGVfcG9saWN5KGNoYXIgKmRhdGEsIGNvbnN0IGJvb2wgaXNfZGVsZXRlKTsKKy8qIENyZWF0ZSAiZmlsZV9wYXR0ZXJuIiBlbnRyeSBpbiBleGNlcHRpb24gcG9saWN5LiAqLworaW50IHRvbW95b193cml0ZV9wYXR0ZXJuX3BvbGljeShjaGFyICpkYXRhLCBjb25zdCBib29sIGlzX2RlbGV0ZSk7CisvKiBGaW5kIGEgZG9tYWluIGJ5IHRoZSBnaXZlbiBuYW1lLiAqLworc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqdG9tb3lvX2ZpbmRfZG9tYWluKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUpOworLyogRmluZCBvciBjcmVhdGUgYSBkb21haW4gYnkgdGhlIGdpdmVuIG5hbWUuICovCitzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICp0b21veW9fZmluZF9vcl9hc3NpZ25fbmV3X2RvbWFpbihjb25zdCBjaGFyICoKKwkJCQkJCQkgICAgZG9tYWlubmFtZSwKKwkJCQkJCQkgICAgY29uc3QgdTggcHJvZmlsZSk7CisvKiBVbmRlbGV0ZSBhIGRvbWFpbi4gKi8KK3N0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKnRvbW95b191bmRlbGV0ZV9kb21haW4oY29uc3QgY2hhciAqZG9tYWlubmFtZSk7CisvKiBDaGVjayBtb2RlIGZvciBzcGVjaWZpZWQgZnVuY3Rpb25hbGl0eS4gKi8KK3Vuc2lnbmVkIGludCB0b21veW9fY2hlY2tfZmxhZ3MoY29uc3Qgc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluLAorCQkJCWNvbnN0IHU4IGluZGV4KTsKKy8qIEFsbG9jYXRlIG1lbW9yeSBmb3Igc3RydWN0dXJlcy4gKi8KK3ZvaWQgKnRvbW95b19hbGxvY19hY2xfZWxlbWVudChjb25zdCB1OCBhY2xfdHlwZSk7CisvKiBGaWxsIGluICJzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyIgbWVtYmVycy4gKi8KK3ZvaWQgdG9tb3lvX2ZpbGxfcGF0aF9pbmZvKHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpwdHIpOworLyogUnVuIHBvbGljeSBsb2FkZXIgd2hlbiAvc2Jpbi9pbml0IHN0YXJ0cy4gKi8KK3ZvaWQgdG9tb3lvX2xvYWRfcG9saWN5KGNvbnN0IGNoYXIgKmZpbGVuYW1lKTsKKy8qIENoYW5nZSAic3RydWN0IHRvbW95b19kb21haW5faW5mbyItPmZsYWdzLiAqLwordm9pZCB0b21veW9fc2V0X2RvbWFpbl9mbGFnKHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiwKKwkJCSAgICBjb25zdCBib29sIGlzX2RlbGV0ZSwgY29uc3QgdTggZmxhZ3MpOworCisvKiBzdHJjbXAoKSBmb3IgInN0cnVjdCB0b21veW9fcGF0aF9pbmZvIiBzdHJ1Y3R1cmUuICovCitzdGF0aWMgaW5saW5lIGJvb2wgdG9tb3lvX3BhdGhjbXAoY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmEsCisJCQkJICBjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqYikKK3sKKwlyZXR1cm4gYS0+aGFzaCAhPSBiLT5oYXNoIHx8IHN0cmNtcChhLT5uYW1lLCBiLT5uYW1lKTsKK30KKworLyogR2V0IHR5cGUgb2YgYW4gQUNMIGVudHJ5LiAqLworc3RhdGljIGlubGluZSB1OCB0b21veW9fYWNsX3R5cGUxKHN0cnVjdCB0b21veW9fYWNsX2luZm8gKnB0cikKK3sKKwlyZXR1cm4gcHRyLT50eXBlICYgflRPTU9ZT19BQ0xfREVMRVRFRDsKK30KKworLyogR2V0IHR5cGUgb2YgYW4gQUNMIGVudHJ5LiAqLworc3RhdGljIGlubGluZSB1OCB0b21veW9fYWNsX3R5cGUyKHN0cnVjdCB0b21veW9fYWNsX2luZm8gKnB0cikKK3sKKwlyZXR1cm4gcHRyLT50eXBlOworfQorCisvKioKKyAqIHRvbW95b19pc192YWxpZCAtIENoZWNrIHdoZXRoZXIgdGhlIGNoYXJhY3RlciBpcyBhIHZhbGlkIGNoYXIuCisgKgorICogQGM6IFRoZSBjaGFyYWN0ZXIgdG8gY2hlY2suCisgKgorICogUmV0dXJucyB0cnVlIGlmIEBjIGlzIGEgdmFsaWQgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCB0b21veW9faXNfdmFsaWQoY29uc3QgdW5zaWduZWQgY2hhciBjKQoreworCXJldHVybiBjID4gJyAnICYmIGMgPCAxMjc7Cit9CisKKy8qKgorICogdG9tb3lvX2lzX2ludmFsaWQgLSBDaGVjayB3aGV0aGVyIHRoZSBjaGFyYWN0ZXIgaXMgYW4gaW52YWxpZCBjaGFyLgorICoKKyAqIEBjOiBUaGUgY2hhcmFjdGVyIHRvIGNoZWNrLgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiBAYyBpcyBhbiBpbnZhbGlkIGNoYXJhY3RlciwgZmFsc2Ugb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW5saW5lIGJvb2wgdG9tb3lvX2lzX2ludmFsaWQoY29uc3QgdW5zaWduZWQgY2hhciBjKQoreworCXJldHVybiBjICYmIChjIDw9ICcgJyB8fCBjID49IDEyNyk7Cit9CisKKy8qIFRoZSBsaXN0IGZvciAic3RydWN0IHRvbW95b19kb21haW5faW5mbyIuICovCitleHRlcm4gc3RydWN0IGxpc3RfaGVhZCB0b21veW9fZG9tYWluX2xpc3Q7CitleHRlcm4gc3RydWN0IHJ3X3NlbWFwaG9yZSB0b21veW9fZG9tYWluX2xpc3RfbG9jazsKKworLyogTG9jayBmb3IgZG9tYWluLT5hY2xfaW5mb19saXN0LiAqLworZXh0ZXJuIHN0cnVjdCByd19zZW1hcGhvcmUgdG9tb3lvX2RvbWFpbl9hY2xfaW5mb19saXN0X2xvY2s7CisKKy8qIEhhcyAvc2Jpbi9pbml0IHN0YXJ0ZWQ/ICovCitleHRlcm4gYm9vbCB0b21veW9fcG9saWN5X2xvYWRlZDsKKworLyogVGhlIGtlcm5lbCdzIGRvbWFpbi4gKi8KK2V4dGVybiBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIHRvbW95b19rZXJuZWxfZG9tYWluOworCisvKioKKyAqIGxpc3RfZm9yX2VhY2hfY29va2llIC0gaXRlcmF0ZSBvdmVyIGEgbGlzdCB3aXRoIGNvb2tpZS4KKyAqIEBwb3M6ICAgICAgICB0aGUgJnN0cnVjdCBsaXN0X2hlYWQgdG8gdXNlIGFzIGEgbG9vcCBjdXJzb3IuCisgKiBAY29va2llOiAgICAgdGhlICZzdHJ1Y3QgbGlzdF9oZWFkIHRvIHVzZSBhcyBhIGNvb2tpZS4KKyAqIEBoZWFkOiAgICAgICB0aGUgaGVhZCBmb3IgeW91ciBsaXN0LgorICoKKyAqIFNhbWUgd2l0aCBsaXN0X2Zvcl9lYWNoKCkgZXhjZXB0IHRoYXQgdGhpcyBwcmltaXRpdmUgdXNlcyBAY29va2llCisgKiBzbyB0aGF0IHdlIGNhbiBjb250aW51ZSBpdGVyYXRpb24uCisgKiBAY29va2llIG11c3QgYmUgTlVMTCB3aGVuIGl0ZXJhdGlvbiBzdGFydHMsIGFuZCBAY29va2llIHdpbGwgYmVjb21lCisgKiBOVUxMIHdoZW4gaXRlcmF0aW9uIGZpbmlzaGVzLgorICovCisjZGVmaW5lIGxpc3RfZm9yX2VhY2hfY29va2llKHBvcywgY29va2llLCBoZWFkKSAgICAgICAgICAgICAgICAgICAgICAgXAorCWZvciAoKHsgaWYgKCFjb29raWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJCSAgICAgY29va2llID0gaGVhZDsgfSksICAgICAgICAgICAgICAgXAorCSAgICAgcG9zID0gKGNvb2tpZSktPm5leHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgcHJlZmV0Y2gocG9zLT5uZXh0KSwgcG9zICE9IChoZWFkKSB8fCAoKGNvb2tpZSkgPSBOVUxMKTsgXAorCSAgICAgKGNvb2tpZSkgPSBwb3MsIHBvcyA9IHBvcy0+bmV4dCkKKworI2VuZGlmIC8qICFkZWZpbmVkKF9TRUNVUklUWV9UT01PWU9fQ09NTU9OX0gpICovCmRpZmYgLS1naXQgYS9zZWN1cml0eS90b21veW8vZG9tYWluLmMgYi9zZWN1cml0eS90b21veW8vZG9tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDkzYTc1NgotLS0gL2Rldi9udWxsCisrKyBiL3NlY3VyaXR5L3RvbW95by9kb21haW4uYwpAQCAtMCwwICsxLDg3OCBAQAorLyoKKyAqIHNlY3VyaXR5L3RvbW95by9kb21haW4uYworICoKKyAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBEb21haW4tQmFzZWQgTWFuZGF0b3J5IEFjY2VzcyBDb250cm9sLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA5ICBOVFQgREFUQSBDT1JQT1JBVElPTgorICoKKyAqIFZlcnNpb246IDIuMi4wLXByZSAgIDIwMDkvMDIvMDEKKyAqCisgKi8KKworI2luY2x1ZGUgImNvbW1vbi5oIgorI2luY2x1ZGUgInRvbW95by5oIgorI2luY2x1ZGUgInJlYWxwYXRoLmgiCisjaW5jbHVkZSA8bGludXgvYmluZm10cy5oPgorCisvKiBWYXJpYWJsZXMgZGVmaW5pdGlvbnMuKi8KKworLyogVGhlIGluaXRpYWwgZG9tYWluLiAqLworc3RydWN0IHRvbW95b19kb21haW5faW5mbyB0b21veW9fa2VybmVsX2RvbWFpbjsKKworLyogVGhlIGxpc3QgZm9yICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIi4gKi8KK0xJU1RfSEVBRCh0b21veW9fZG9tYWluX2xpc3QpOworREVDTEFSRV9SV1NFTSh0b21veW9fZG9tYWluX2xpc3RfbG9jayk7CisKKy8qIFN0cnVjdHVyZSBmb3IgImluaXRpYWxpemVfZG9tYWluIiBhbmQgIm5vX2luaXRpYWxpemVfZG9tYWluIiBrZXl3b3JkLiAqLworc3RydWN0IHRvbW95b19kb21haW5faW5pdGlhbGl6ZXJfZW50cnkgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqZG9tYWlubmFtZTsgICAgLyogVGhpcyBtYXkgYmUgTlVMTCAqLworCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpwcm9ncmFtOworCWJvb2wgaXNfZGVsZXRlZDsKKwlib29sIGlzX25vdDsgICAgICAgLyogVHJ1ZSBpZiB0aGlzIGVudHJ5IGlzICJub19pbml0aWFsaXplX2RvbWFpbiIuICAqLworCS8qIFRydWUgaWYgdGhlIGRvbWFpbm5hbWUgaXMgdG9tb3lvX2dldF9sYXN0X25hbWUoKS4gKi8KKwlib29sIGlzX2xhc3RfbmFtZTsKK307CisKKy8qIFN0cnVjdHVyZSBmb3IgImtlZXBfZG9tYWluIiBhbmQgIm5vX2tlZXBfZG9tYWluIiBrZXl3b3JkLiAqLworc3RydWN0IHRvbW95b19kb21haW5fa2VlcGVyX2VudHJ5IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmRvbWFpbm5hbWU7CisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnByb2dyYW07ICAgICAgIC8qIFRoaXMgbWF5IGJlIE5VTEwgKi8KKwlib29sIGlzX2RlbGV0ZWQ7CisJYm9vbCBpc19ub3Q7ICAgICAgIC8qIFRydWUgaWYgdGhpcyBlbnRyeSBpcyAibm9fa2VlcF9kb21haW4iLiAgICAgICAgKi8KKwkvKiBUcnVlIGlmIHRoZSBkb21haW5uYW1lIGlzIHRvbW95b19nZXRfbGFzdF9uYW1lKCkuICovCisJYm9vbCBpc19sYXN0X25hbWU7Cit9OworCisvKiBTdHJ1Y3R1cmUgZm9yICJhbGlhcyIga2V5d29yZC4gKi8KK3N0cnVjdCB0b21veW9fYWxpYXNfZW50cnkgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqb3JpZ2luYWxfbmFtZTsKKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqYWxpYXNlZF9uYW1lOworCWJvb2wgaXNfZGVsZXRlZDsKK307CisKKy8qKgorICogdG9tb3lvX3NldF9kb21haW5fZmxhZyAtIFNldCBvciBjbGVhciBkb21haW4ncyBhdHRyaWJ1dGUgZmxhZ3MuCisgKgorICogQGRvbWFpbjogICAgUG9pbnRlciB0byAic3RydWN0IHRvbW95b19kb21haW5faW5mbyIuCisgKiBAaXNfZGVsZXRlOiBUcnVlIGlmIGl0IGlzIGEgZGVsZXRlIHJlcXVlc3QuCisgKiBAZmxhZ3M6ICAgICBGbGFncyB0byBzZXQgb3IgY2xlYXIuCisgKgorICogUmV0dXJucyBub3RoaW5nLgorICovCit2b2lkIHRvbW95b19zZXRfZG9tYWluX2ZsYWcoc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluLAorCQkJICAgIGNvbnN0IGJvb2wgaXNfZGVsZXRlLCBjb25zdCB1OCBmbGFncykKK3sKKwkvKiBXZSBuZWVkIHRvIHNlcmlhbGl6ZSBiZWNhdXNlIHRoaXMgaXMgYml0ZmllbGQgb3BlcmF0aW9uLiAqLworCXN0YXRpYyBERUZJTkVfU1BJTkxPQ0sobG9jayk7CisJLyoqKioqIENSSVRJQ0FMIFNFQ1RJT04gU1RBUlQgKioqKiovCisJc3Bpbl9sb2NrKCZsb2NrKTsKKwlpZiAoIWlzX2RlbGV0ZSkKKwkJZG9tYWluLT5mbGFncyB8PSBmbGFnczsKKwllbHNlCisJCWRvbWFpbi0+ZmxhZ3MgJj0gfmZsYWdzOworCXNwaW5fdW5sb2NrKCZsb2NrKTsKKwkvKioqKiogQ1JJVElDQUwgU0VDVElPTiBFTkQgKioqKiovCit9CisKKy8qKgorICogdG9tb3lvX2dldF9sYXN0X25hbWUgLSBHZXQgbGFzdCBjb21wb25lbnQgb2YgYSBkb21haW5uYW1lLgorICoKKyAqIEBkb21haW46IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iLgorICoKKyAqIFJldHVybnMgdGhlIGxhc3QgY29tcG9uZW50IG9mIHRoZSBkb21haW5uYW1lLgorICovCitjb25zdCBjaGFyICp0b21veW9fZ2V0X2xhc3RfbmFtZShjb25zdCBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4pCit7CisJY29uc3QgY2hhciAqY3AwID0gZG9tYWluLT5kb21haW5uYW1lLT5uYW1lOworCWNvbnN0IGNoYXIgKmNwMSA9IHN0cnJjaHIoY3AwLCAnICcpOworCisJaWYgKGNwMSkKKwkJcmV0dXJuIGNwMSArIDE7CisJcmV0dXJuIGNwMDsKK30KKworLyogVGhlIGxpc3QgZm9yICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbml0aWFsaXplcl9lbnRyeSIuICovCitzdGF0aWMgTElTVF9IRUFEKHRvbW95b19kb21haW5faW5pdGlhbGl6ZXJfbGlzdCk7CitzdGF0aWMgREVDTEFSRV9SV1NFTSh0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2xpc3RfbG9jayk7CisKKy8qKgorICogdG9tb3lvX3VwZGF0ZV9kb21haW5faW5pdGlhbGl6ZXJfZW50cnkgLSBVcGRhdGUgInN0cnVjdCB0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2VudHJ5IiBsaXN0LgorICoKKyAqIEBkb21haW5uYW1lOiBUaGUgbmFtZSBvZiBkb21haW4uIE1heSBiZSBOVUxMLgorICogQHByb2dyYW06ICAgIFRoZSBuYW1lIG9mIHByb2dyYW0uCisgKiBAaXNfbm90OiAgICAgVHJ1ZSBpZiBpdCBpcyAibm9faW5pdGlhbGl6ZV9kb21haW4iIGVudHJ5LgorICogQGlzX2RlbGV0ZTogIFRydWUgaWYgaXQgaXMgYSBkZWxldGUgcmVxdWVzdC4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IHRvbW95b191cGRhdGVfZG9tYWluX2luaXRpYWxpemVyX2VudHJ5KGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCisJCQkJCQkgIGNvbnN0IGNoYXIgKnByb2dyYW0sCisJCQkJCQkgIGNvbnN0IGJvb2wgaXNfbm90LAorCQkJCQkJICBjb25zdCBib29sIGlzX2RlbGV0ZSkKK3sKKwlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbml0aWFsaXplcl9lbnRyeSAqbmV3X2VudHJ5OworCXN0cnVjdCB0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2VudHJ5ICpwdHI7CisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnNhdmVkX3Byb2dyYW07CisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnNhdmVkX2RvbWFpbm5hbWUgPSBOVUxMOworCWludCBlcnJvciA9IC1FTk9NRU07CisJYm9vbCBpc19sYXN0X25hbWUgPSBmYWxzZTsKKworCWlmICghdG9tb3lvX2lzX2NvcnJlY3RfcGF0aChwcm9ncmFtLCAxLCAtMSwgLTEsIF9fZnVuY19fKSkKKwkJcmV0dXJuIC1FSU5WQUw7IC8qIE5vIHBhdHRlcm5zIGFsbG93ZWQuICovCisJaWYgKGRvbWFpbm5hbWUpIHsKKwkJaWYgKCF0b21veW9faXNfZG9tYWluX2RlZihkb21haW5uYW1lKSAmJgorCQkgICAgdG9tb3lvX2lzX2NvcnJlY3RfcGF0aChkb21haW5uYW1lLCAxLCAtMSwgLTEsIF9fZnVuY19fKSkKKwkJCWlzX2xhc3RfbmFtZSA9IHRydWU7CisJCWVsc2UgaWYgKCF0b21veW9faXNfY29ycmVjdF9kb21haW4oZG9tYWlubmFtZSwgX19mdW5jX18pKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCXNhdmVkX2RvbWFpbm5hbWUgPSB0b21veW9fc2F2ZV9uYW1lKGRvbWFpbm5hbWUpOworCQlpZiAoIXNhdmVkX2RvbWFpbm5hbWUpCisJCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJc2F2ZWRfcHJvZ3JhbSA9IHRvbW95b19zYXZlX25hbWUocHJvZ3JhbSk7CisJaWYgKCFzYXZlZF9wcm9ncmFtKQorCQlyZXR1cm4gLUVOT01FTTsKKwkvKioqKiogRVhDTFVTSVZFIFNFQ1RJT04gU1RBUlQgKioqKiovCisJZG93bl93cml0ZSgmdG9tb3lvX2RvbWFpbl9pbml0aWFsaXplcl9saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkocHRyLCAmdG9tb3lvX2RvbWFpbl9pbml0aWFsaXplcl9saXN0LCBsaXN0KSB7CisJCWlmIChwdHItPmlzX25vdCAhPSBpc19ub3QgfHwKKwkJICAgIHB0ci0+ZG9tYWlubmFtZSAhPSBzYXZlZF9kb21haW5uYW1lIHx8CisJCSAgICBwdHItPnByb2dyYW0gIT0gc2F2ZWRfcHJvZ3JhbSkKKwkJCWNvbnRpbnVlOworCQlwdHItPmlzX2RlbGV0ZWQgPSBpc19kZWxldGU7CisJCWVycm9yID0gMDsKKwkJZ290byBvdXQ7CisJfQorCWlmIChpc19kZWxldGUpIHsKKwkJZXJyb3IgPSAtRU5PRU5UOworCQlnb3RvIG91dDsKKwl9CisJbmV3X2VudHJ5ID0gdG9tb3lvX2FsbG9jX2VsZW1lbnQoc2l6ZW9mKCpuZXdfZW50cnkpKTsKKwlpZiAoIW5ld19lbnRyeSkKKwkJZ290byBvdXQ7CisJbmV3X2VudHJ5LT5kb21haW5uYW1lID0gc2F2ZWRfZG9tYWlubmFtZTsKKwluZXdfZW50cnktPnByb2dyYW0gPSBzYXZlZF9wcm9ncmFtOworCW5ld19lbnRyeS0+aXNfbm90ID0gaXNfbm90OworCW5ld19lbnRyeS0+aXNfbGFzdF9uYW1lID0gaXNfbGFzdF9uYW1lOworCWxpc3RfYWRkX3RhaWwoJm5ld19lbnRyeS0+bGlzdCwgJnRvbW95b19kb21haW5faW5pdGlhbGl6ZXJfbGlzdCk7CisJZXJyb3IgPSAwOworIG91dDoKKwl1cF93cml0ZSgmdG9tb3lvX2RvbWFpbl9pbml0aWFsaXplcl9saXN0X2xvY2spOworCS8qKioqKiBFWENMVVNJVkUgU0VDVElPTiBFTkQgKioqKiovCisJcmV0dXJuIGVycm9yOworfQorCisvKioKKyAqIHRvbW95b19yZWFkX2RvbWFpbl9pbml0aWFsaXplcl9wb2xpY3kgLSBSZWFkICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbml0aWFsaXplcl9lbnRyeSIgbGlzdC4KKyAqCisgKiBAaGVhZDogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19pb19idWZmZXIiLgorICoKKyAqIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK2Jvb2wgdG9tb3lvX3JlYWRfZG9tYWluX2luaXRpYWxpemVyX3BvbGljeShzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwb3M7CisJYm9vbCBkb25lID0gdHJ1ZTsKKworCWRvd25fcmVhZCgmdG9tb3lvX2RvbWFpbl9pbml0aWFsaXplcl9saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfY29va2llKHBvcywgaGVhZC0+cmVhZF92YXIyLAorCQkJICAgICAmdG9tb3lvX2RvbWFpbl9pbml0aWFsaXplcl9saXN0KSB7CisJCWNvbnN0IGNoYXIgKm5vOworCQljb25zdCBjaGFyICpmcm9tID0gIiI7CisJCWNvbnN0IGNoYXIgKmRvbWFpbiA9ICIiOworCQlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbml0aWFsaXplcl9lbnRyeSAqcHRyOworCQlwdHIgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IHRvbW95b19kb21haW5faW5pdGlhbGl6ZXJfZW50cnksCisJCQkJICBsaXN0KTsKKwkJaWYgKHB0ci0+aXNfZGVsZXRlZCkKKwkJCWNvbnRpbnVlOworCQlubyA9IHB0ci0+aXNfbm90ID8gIm5vXyIgOiAiIjsKKwkJaWYgKHB0ci0+ZG9tYWlubmFtZSkgeworCQkJZnJvbSA9ICIgZnJvbSAiOworCQkJZG9tYWluID0gcHRyLT5kb21haW5uYW1lLT5uYW1lOworCQl9CisJCWlmICghdG9tb3lvX2lvX3ByaW50ZihoZWFkLAorCQkJCSAgICAgICIlcyIgVE9NT1lPX0tFWVdPUkRfSU5JVElBTElaRV9ET01BSU4KKwkJCQkgICAgICAiJXMlcyVzXG4iLCBubywgcHRyLT5wcm9ncmFtLT5uYW1lLCBmcm9tLAorCQkJCSAgICAgIGRvbWFpbikpIHsKKwkJCWRvbmUgPSBmYWxzZTsKKwkJCWJyZWFrOworCQl9CisJfQorCXVwX3JlYWQoJnRvbW95b19kb21haW5faW5pdGlhbGl6ZXJfbGlzdF9sb2NrKTsKKwlyZXR1cm4gZG9uZTsKK30KKworLyoqCisgKiB0b21veW9fd3JpdGVfZG9tYWluX2luaXRpYWxpemVyX3BvbGljeSAtIFdyaXRlICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbml0aWFsaXplcl9lbnRyeSIgbGlzdC4KKyAqCisgKiBAZGF0YTogICAgICBTdHJpbmcgdG8gcGFyc2UuCisgKiBAaXNfbm90OiAgICBUcnVlIGlmIGl0IGlzICJub19pbml0aWFsaXplX2RvbWFpbiIgZW50cnkuCisgKiBAaXNfZGVsZXRlOiBUcnVlIGlmIGl0IGlzIGEgZGVsZXRlIHJlcXVlc3QuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqLworaW50IHRvbW95b193cml0ZV9kb21haW5faW5pdGlhbGl6ZXJfcG9saWN5KGNoYXIgKmRhdGEsIGNvbnN0IGJvb2wgaXNfbm90LAorCQkJCQkgICBjb25zdCBib29sIGlzX2RlbGV0ZSkKK3sKKwljaGFyICpjcCA9IHN0cnN0cihkYXRhLCAiIGZyb20gIik7CisKKwlpZiAoY3ApIHsKKwkJKmNwID0gJ1wwJzsKKwkJcmV0dXJuIHRvbW95b191cGRhdGVfZG9tYWluX2luaXRpYWxpemVyX2VudHJ5KGNwICsgNiwgZGF0YSwKKwkJCQkJCQkgICAgICBpc19ub3QsCisJCQkJCQkJICAgICAgaXNfZGVsZXRlKTsKKwl9CisJcmV0dXJuIHRvbW95b191cGRhdGVfZG9tYWluX2luaXRpYWxpemVyX2VudHJ5KE5VTEwsIGRhdGEsIGlzX25vdCwKKwkJCQkJCSAgICAgIGlzX2RlbGV0ZSk7Cit9CisKKy8qKgorICogdG9tb3lvX2lzX2RvbWFpbl9pbml0aWFsaXplciAtIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIHByb2dyYW0gY2F1c2VzIGRvbWFpbm5hbWUgcmVpbml0aWFsaXphdGlvbi4KKyAqCisgKiBAZG9tYWlubmFtZTogVGhlIG5hbWUgb2YgZG9tYWluLgorICogQHByb2dyYW06ICAgIFRoZSBuYW1lIG9mIHByb2dyYW0uCisgKiBAbGFzdF9uYW1lOiAgVGhlIGxhc3QgY29tcG9uZW50IG9mIEBkb21haW5uYW1lLgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiBleGVjdXRpbmcgQHByb2dyYW0gcmVpbml0aWFsaXplcyBkb21haW4gdHJhbnNpdGlvbiwKKyAqIGZhbHNlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGJvb2wgdG9tb3lvX2lzX2RvbWFpbl9pbml0aWFsaXplcihjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqCisJCQkJCSBkb21haW5uYW1lLAorCQkJCQkgY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnByb2dyYW0sCisJCQkJCSBjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqCisJCQkJCSBsYXN0X25hbWUpCit7CisJc3RydWN0IHRvbW95b19kb21haW5faW5pdGlhbGl6ZXJfZW50cnkgKnB0cjsKKwlib29sIGZsYWcgPSBmYWxzZTsKKworCWRvd25fcmVhZCgmdG9tb3lvX2RvbWFpbl9pbml0aWFsaXplcl9saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkocHRyLCAgJnRvbW95b19kb21haW5faW5pdGlhbGl6ZXJfbGlzdCwgbGlzdCkgeworCQlpZiAocHRyLT5pc19kZWxldGVkKQorCQkJY29udGludWU7CisJCWlmIChwdHItPmRvbWFpbm5hbWUpIHsKKwkJCWlmICghcHRyLT5pc19sYXN0X25hbWUpIHsKKwkJCQlpZiAocHRyLT5kb21haW5uYW1lICE9IGRvbWFpbm5hbWUpCisJCQkJCWNvbnRpbnVlOworCQkJfSBlbHNlIHsKKwkJCQlpZiAodG9tb3lvX3BhdGhjbXAocHRyLT5kb21haW5uYW1lLCBsYXN0X25hbWUpKQorCQkJCQljb250aW51ZTsKKwkJCX0KKwkJfQorCQlpZiAodG9tb3lvX3BhdGhjbXAocHRyLT5wcm9ncmFtLCBwcm9ncmFtKSkKKwkJCWNvbnRpbnVlOworCQlpZiAocHRyLT5pc19ub3QpIHsKKwkJCWZsYWcgPSBmYWxzZTsKKwkJCWJyZWFrOworCQl9CisJCWZsYWcgPSB0cnVlOworCX0KKwl1cF9yZWFkKCZ0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2xpc3RfbG9jayk7CisJcmV0dXJuIGZsYWc7Cit9CisKKy8qIFRoZSBsaXN0IGZvciAic3RydWN0IHRvbW95b19kb21haW5fa2VlcGVyX2VudHJ5Ii4gKi8KK3N0YXRpYyBMSVNUX0hFQUQodG9tb3lvX2RvbWFpbl9rZWVwZXJfbGlzdCk7CitzdGF0aWMgREVDTEFSRV9SV1NFTSh0b21veW9fZG9tYWluX2tlZXBlcl9saXN0X2xvY2spOworCisvKioKKyAqIHRvbW95b191cGRhdGVfZG9tYWluX2tlZXBlcl9lbnRyeSAtIFVwZGF0ZSAic3RydWN0IHRvbW95b19kb21haW5fa2VlcGVyX2VudHJ5IiBsaXN0LgorICoKKyAqIEBkb21haW5uYW1lOiBUaGUgbmFtZSBvZiBkb21haW4uCisgKiBAcHJvZ3JhbTogICAgVGhlIG5hbWUgb2YgcHJvZ3JhbS4gTWF5IGJlIE5VTEwuCisgKiBAaXNfbm90OiAgICAgVHJ1ZSBpZiBpdCBpcyAibm9fa2VlcF9kb21haW4iIGVudHJ5LgorICogQGlzX2RlbGV0ZTogIFRydWUgaWYgaXQgaXMgYSBkZWxldGUgcmVxdWVzdC4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IHRvbW95b191cGRhdGVfZG9tYWluX2tlZXBlcl9lbnRyeShjb25zdCBjaGFyICpkb21haW5uYW1lLAorCQkJCQkgICAgIGNvbnN0IGNoYXIgKnByb2dyYW0sCisJCQkJCSAgICAgY29uc3QgYm9vbCBpc19ub3QsCisJCQkJCSAgICAgY29uc3QgYm9vbCBpc19kZWxldGUpCit7CisJc3RydWN0IHRvbW95b19kb21haW5fa2VlcGVyX2VudHJ5ICpuZXdfZW50cnk7CisJc3RydWN0IHRvbW95b19kb21haW5fa2VlcGVyX2VudHJ5ICpwdHI7CisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnNhdmVkX2RvbWFpbm5hbWU7CisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnNhdmVkX3Byb2dyYW0gPSBOVUxMOworCXN0YXRpYyBERUZJTkVfTVVURVgobG9jayk7CisJaW50IGVycm9yID0gLUVOT01FTTsKKwlib29sIGlzX2xhc3RfbmFtZSA9IGZhbHNlOworCisJaWYgKCF0b21veW9faXNfZG9tYWluX2RlZihkb21haW5uYW1lKSAmJgorCSAgICB0b21veW9faXNfY29ycmVjdF9wYXRoKGRvbWFpbm5hbWUsIDEsIC0xLCAtMSwgX19mdW5jX18pKQorCQlpc19sYXN0X25hbWUgPSB0cnVlOworCWVsc2UgaWYgKCF0b21veW9faXNfY29ycmVjdF9kb21haW4oZG9tYWlubmFtZSwgX19mdW5jX18pKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAocHJvZ3JhbSkgeworCQlpZiAoIXRvbW95b19pc19jb3JyZWN0X3BhdGgocHJvZ3JhbSwgMSwgLTEsIC0xLCBfX2Z1bmNfXykpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJc2F2ZWRfcHJvZ3JhbSA9IHRvbW95b19zYXZlX25hbWUocHJvZ3JhbSk7CisJCWlmICghc2F2ZWRfcHJvZ3JhbSkKKwkJCXJldHVybiAtRU5PTUVNOworCX0KKwlzYXZlZF9kb21haW5uYW1lID0gdG9tb3lvX3NhdmVfbmFtZShkb21haW5uYW1lKTsKKwlpZiAoIXNhdmVkX2RvbWFpbm5hbWUpCisJCXJldHVybiAtRU5PTUVNOworCS8qKioqKiBFWENMVVNJVkUgU0VDVElPTiBTVEFSVCAqKioqKi8KKwlkb3duX3dyaXRlKCZ0b21veW9fZG9tYWluX2tlZXBlcl9saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkocHRyLCAmdG9tb3lvX2RvbWFpbl9rZWVwZXJfbGlzdCwgbGlzdCkgeworCQlpZiAocHRyLT5pc19ub3QgIT0gaXNfbm90IHx8CisJCSAgICBwdHItPmRvbWFpbm5hbWUgIT0gc2F2ZWRfZG9tYWlubmFtZSB8fAorCQkgICAgcHRyLT5wcm9ncmFtICE9IHNhdmVkX3Byb2dyYW0pCisJCQljb250aW51ZTsKKwkJcHRyLT5pc19kZWxldGVkID0gaXNfZGVsZXRlOworCQllcnJvciA9IDA7CisJCWdvdG8gb3V0OworCX0KKwlpZiAoaXNfZGVsZXRlKSB7CisJCWVycm9yID0gLUVOT0VOVDsKKwkJZ290byBvdXQ7CisJfQorCW5ld19lbnRyeSA9IHRvbW95b19hbGxvY19lbGVtZW50KHNpemVvZigqbmV3X2VudHJ5KSk7CisJaWYgKCFuZXdfZW50cnkpCisJCWdvdG8gb3V0OworCW5ld19lbnRyeS0+ZG9tYWlubmFtZSA9IHNhdmVkX2RvbWFpbm5hbWU7CisJbmV3X2VudHJ5LT5wcm9ncmFtID0gc2F2ZWRfcHJvZ3JhbTsKKwluZXdfZW50cnktPmlzX25vdCA9IGlzX25vdDsKKwluZXdfZW50cnktPmlzX2xhc3RfbmFtZSA9IGlzX2xhc3RfbmFtZTsKKwlsaXN0X2FkZF90YWlsKCZuZXdfZW50cnktPmxpc3QsICZ0b21veW9fZG9tYWluX2tlZXBlcl9saXN0KTsKKwllcnJvciA9IDA7Cisgb3V0OgorCXVwX3dyaXRlKCZ0b21veW9fZG9tYWluX2tlZXBlcl9saXN0X2xvY2spOworCS8qKioqKiBFWENMVVNJVkUgU0VDVElPTiBFTkQgKioqKiovCisJcmV0dXJuIGVycm9yOworfQorCisvKioKKyAqIHRvbW95b193cml0ZV9kb21haW5fa2VlcGVyX3BvbGljeSAtIFdyaXRlICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9rZWVwZXJfZW50cnkiIGxpc3QuCisgKgorICogQGRhdGE6ICAgICAgU3RyaW5nIHRvIHBhcnNlLgorICogQGlzX25vdDogICAgVHJ1ZSBpZiBpdCBpcyAibm9fa2VlcF9kb21haW4iIGVudHJ5LgorICogQGlzX2RlbGV0ZTogVHJ1ZSBpZiBpdCBpcyBhIGRlbGV0ZSByZXF1ZXN0LgorICoKKyAqLworaW50IHRvbW95b193cml0ZV9kb21haW5fa2VlcGVyX3BvbGljeShjaGFyICpkYXRhLCBjb25zdCBib29sIGlzX25vdCwKKwkJCQkgICAgICBjb25zdCBib29sIGlzX2RlbGV0ZSkKK3sKKwljaGFyICpjcCA9IHN0cnN0cihkYXRhLCAiIGZyb20gIik7CisKKwlpZiAoY3ApIHsKKwkJKmNwID0gJ1wwJzsKKwkJcmV0dXJuIHRvbW95b191cGRhdGVfZG9tYWluX2tlZXBlcl9lbnRyeShjcCArIDYsIGRhdGEsIGlzX25vdCwKKwkJCQkJCQkgaXNfZGVsZXRlKTsKKwl9CisJcmV0dXJuIHRvbW95b191cGRhdGVfZG9tYWluX2tlZXBlcl9lbnRyeShkYXRhLCBOVUxMLCBpc19ub3QsIGlzX2RlbGV0ZSk7Cit9CisKKy8qKgorICogdG9tb3lvX3JlYWRfZG9tYWluX2tlZXBlcl9wb2xpY3kgLSBSZWFkICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9rZWVwZXJfZW50cnkiIGxpc3QuCisgKgorICogQGhlYWQ6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KKyAqCisgKiBSZXR1cm5zIHRydWUgb24gc3VjY2VzcywgZmFsc2Ugb3RoZXJ3aXNlLgorICovCitib29sIHRvbW95b19yZWFkX2RvbWFpbl9rZWVwZXJfcG9saWN5KHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKKwlib29sIGRvbmUgPSB0cnVlOworCisJZG93bl9yZWFkKCZ0b21veW9fZG9tYWluX2tlZXBlcl9saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfY29va2llKHBvcywgaGVhZC0+cmVhZF92YXIyLAorCQkJICAgICAmdG9tb3lvX2RvbWFpbl9rZWVwZXJfbGlzdCkgeworCQlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9rZWVwZXJfZW50cnkgKnB0cjsKKwkJY29uc3QgY2hhciAqbm87CisJCWNvbnN0IGNoYXIgKmZyb20gPSAiIjsKKwkJY29uc3QgY2hhciAqcHJvZ3JhbSA9ICIiOworCisJCXB0ciA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9rZWVwZXJfZW50cnksIGxpc3QpOworCQlpZiAocHRyLT5pc19kZWxldGVkKQorCQkJY29udGludWU7CisJCW5vID0gcHRyLT5pc19ub3QgPyAibm9fIiA6ICIiOworCQlpZiAocHRyLT5wcm9ncmFtKSB7CisJCQlmcm9tID0gIiBmcm9tICI7CisJCQlwcm9ncmFtID0gcHRyLT5wcm9ncmFtLT5uYW1lOworCQl9CisJCWlmICghdG9tb3lvX2lvX3ByaW50ZihoZWFkLAorCQkJCSAgICAgICIlcyIgVE9NT1lPX0tFWVdPUkRfS0VFUF9ET01BSU4KKwkJCQkgICAgICAiJXMlcyVzXG4iLCBubywgcHJvZ3JhbSwgZnJvbSwKKwkJCQkgICAgICBwdHItPmRvbWFpbm5hbWUtPm5hbWUpKSB7CisJCQlkb25lID0gZmFsc2U7CisJCQlicmVhazsKKwkJfQorCX0KKwl1cF9yZWFkKCZ0b21veW9fZG9tYWluX2tlZXBlcl9saXN0X2xvY2spOworCXJldHVybiBkb25lOworfQorCisvKioKKyAqIHRvbW95b19pc19kb21haW5fa2VlcGVyIC0gQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gcHJvZ3JhbSBjYXVzZXMgZG9tYWluIHRyYW5zaXRpb24gc3VwcHJlc3Npb24uCisgKgorICogQGRvbWFpbm5hbWU6IFRoZSBuYW1lIG9mIGRvbWFpbi4KKyAqIEBwcm9ncmFtOiAgICBUaGUgbmFtZSBvZiBwcm9ncmFtLgorICogQGxhc3RfbmFtZTogIFRoZSBsYXN0IGNvbXBvbmVudCBvZiBAZG9tYWlubmFtZS4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgZXhlY3V0aW5nIEBwcm9ncmFtIHN1cHJlc3NlcyBkb21haW4gdHJhbnNpdGlvbiwKKyAqIGZhbHNlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGJvb2wgdG9tb3lvX2lzX2RvbWFpbl9rZWVwZXIoY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmRvbWFpbm5hbWUsCisJCQkJICAgIGNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpwcm9ncmFtLAorCQkJCSAgICBjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqbGFzdF9uYW1lKQoreworCXN0cnVjdCB0b21veW9fZG9tYWluX2tlZXBlcl9lbnRyeSAqcHRyOworCWJvb2wgZmxhZyA9IGZhbHNlOworCisJZG93bl9yZWFkKCZ0b21veW9fZG9tYWluX2tlZXBlcl9saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkocHRyLCAmdG9tb3lvX2RvbWFpbl9rZWVwZXJfbGlzdCwgbGlzdCkgeworCQlpZiAocHRyLT5pc19kZWxldGVkKQorCQkJY29udGludWU7CisJCWlmICghcHRyLT5pc19sYXN0X25hbWUpIHsKKwkJCWlmIChwdHItPmRvbWFpbm5hbWUgIT0gZG9tYWlubmFtZSkKKwkJCQljb250aW51ZTsKKwkJfSBlbHNlIHsKKwkJCWlmICh0b21veW9fcGF0aGNtcChwdHItPmRvbWFpbm5hbWUsIGxhc3RfbmFtZSkpCisJCQkJY29udGludWU7CisJCX0KKwkJaWYgKHB0ci0+cHJvZ3JhbSAmJiB0b21veW9fcGF0aGNtcChwdHItPnByb2dyYW0sIHByb2dyYW0pKQorCQkJY29udGludWU7CisJCWlmIChwdHItPmlzX25vdCkgeworCQkJZmxhZyA9IGZhbHNlOworCQkJYnJlYWs7CisJCX0KKwkJZmxhZyA9IHRydWU7CisJfQorCXVwX3JlYWQoJnRvbW95b19kb21haW5fa2VlcGVyX2xpc3RfbG9jayk7CisJcmV0dXJuIGZsYWc7Cit9CisKKy8qIFRoZSBsaXN0IGZvciAic3RydWN0IHRvbW95b19hbGlhc19lbnRyeSIuICovCitzdGF0aWMgTElTVF9IRUFEKHRvbW95b19hbGlhc19saXN0KTsKK3N0YXRpYyBERUNMQVJFX1JXU0VNKHRvbW95b19hbGlhc19saXN0X2xvY2spOworCisvKioKKyAqIHRvbW95b191cGRhdGVfYWxpYXNfZW50cnkgLSBVcGRhdGUgInN0cnVjdCB0b21veW9fYWxpYXNfZW50cnkiIGxpc3QuCisgKgorICogQG9yaWdpbmFsX25hbWU6IFRoZSBvcmlnaW5hbCBwcm9ncmFtJ3MgcmVhbCBuYW1lLgorICogQGFsaWFzZWRfbmFtZTogIFRoZSBzeW1ib2xpYyBwcm9ncmFtJ3Mgc3ltYm9saWMgbGluaydzIG5hbWUuCisgKiBAaXNfZGVsZXRlOiAgICAgVHJ1ZSBpZiBpdCBpcyBhIGRlbGV0ZSByZXF1ZXN0LgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX3VwZGF0ZV9hbGlhc19lbnRyeShjb25zdCBjaGFyICpvcmlnaW5hbF9uYW1lLAorCQkJCSAgICAgY29uc3QgY2hhciAqYWxpYXNlZF9uYW1lLAorCQkJCSAgICAgY29uc3QgYm9vbCBpc19kZWxldGUpCit7CisJc3RydWN0IHRvbW95b19hbGlhc19lbnRyeSAqbmV3X2VudHJ5OworCXN0cnVjdCB0b21veW9fYWxpYXNfZW50cnkgKnB0cjsKKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqc2F2ZWRfb3JpZ2luYWxfbmFtZTsKKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqc2F2ZWRfYWxpYXNlZF9uYW1lOworCWludCBlcnJvciA9IC1FTk9NRU07CisKKwlpZiAoIXRvbW95b19pc19jb3JyZWN0X3BhdGgob3JpZ2luYWxfbmFtZSwgMSwgLTEsIC0xLCBfX2Z1bmNfXykgfHwKKwkgICAgIXRvbW95b19pc19jb3JyZWN0X3BhdGgoYWxpYXNlZF9uYW1lLCAxLCAtMSwgLTEsIF9fZnVuY19fKSkKKwkJcmV0dXJuIC1FSU5WQUw7IC8qIE5vIHBhdHRlcm5zIGFsbG93ZWQuICovCisJc2F2ZWRfb3JpZ2luYWxfbmFtZSA9IHRvbW95b19zYXZlX25hbWUob3JpZ2luYWxfbmFtZSk7CisJc2F2ZWRfYWxpYXNlZF9uYW1lID0gdG9tb3lvX3NhdmVfbmFtZShhbGlhc2VkX25hbWUpOworCWlmICghc2F2ZWRfb3JpZ2luYWxfbmFtZSB8fCAhc2F2ZWRfYWxpYXNlZF9uYW1lKQorCQlyZXR1cm4gLUVOT01FTTsKKwkvKioqKiogRVhDTFVTSVZFIFNFQ1RJT04gU1RBUlQgKioqKiovCisJZG93bl93cml0ZSgmdG9tb3lvX2FsaWFzX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICZ0b21veW9fYWxpYXNfbGlzdCwgbGlzdCkgeworCQlpZiAocHRyLT5vcmlnaW5hbF9uYW1lICE9IHNhdmVkX29yaWdpbmFsX25hbWUgfHwKKwkJICAgIHB0ci0+YWxpYXNlZF9uYW1lICE9IHNhdmVkX2FsaWFzZWRfbmFtZSkKKwkJCWNvbnRpbnVlOworCQlwdHItPmlzX2RlbGV0ZWQgPSBpc19kZWxldGU7CisJCWVycm9yID0gMDsKKwkJZ290byBvdXQ7CisJfQorCWlmIChpc19kZWxldGUpIHsKKwkJZXJyb3IgPSAtRU5PRU5UOworCQlnb3RvIG91dDsKKwl9CisJbmV3X2VudHJ5ID0gdG9tb3lvX2FsbG9jX2VsZW1lbnQoc2l6ZW9mKCpuZXdfZW50cnkpKTsKKwlpZiAoIW5ld19lbnRyeSkKKwkJZ290byBvdXQ7CisJbmV3X2VudHJ5LT5vcmlnaW5hbF9uYW1lID0gc2F2ZWRfb3JpZ2luYWxfbmFtZTsKKwluZXdfZW50cnktPmFsaWFzZWRfbmFtZSA9IHNhdmVkX2FsaWFzZWRfbmFtZTsKKwlsaXN0X2FkZF90YWlsKCZuZXdfZW50cnktPmxpc3QsICZ0b21veW9fYWxpYXNfbGlzdCk7CisJZXJyb3IgPSAwOworIG91dDoKKwl1cF93cml0ZSgmdG9tb3lvX2FsaWFzX2xpc3RfbG9jayk7CisJLyoqKioqIEVYQ0xVU0lWRSBTRUNUSU9OIEVORCAqKioqKi8KKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qKgorICogdG9tb3lvX3JlYWRfYWxpYXNfcG9saWN5IC0gUmVhZCAic3RydWN0IHRvbW95b19hbGlhc19lbnRyeSIgbGlzdC4KKyAqCisgKiBAaGVhZDogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19pb19idWZmZXIiLgorICoKKyAqIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK2Jvb2wgdG9tb3lvX3JlYWRfYWxpYXNfcG9saWN5KHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKKwlib29sIGRvbmUgPSB0cnVlOworCisJZG93bl9yZWFkKCZ0b21veW9fYWxpYXNfbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2Nvb2tpZShwb3MsIGhlYWQtPnJlYWRfdmFyMiwgJnRvbW95b19hbGlhc19saXN0KSB7CisJCXN0cnVjdCB0b21veW9fYWxpYXNfZW50cnkgKnB0cjsKKworCQlwdHIgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IHRvbW95b19hbGlhc19lbnRyeSwgbGlzdCk7CisJCWlmIChwdHItPmlzX2RlbGV0ZWQpCisJCQljb250aW51ZTsKKwkJaWYgKCF0b21veW9faW9fcHJpbnRmKGhlYWQsIFRPTU9ZT19LRVlXT1JEX0FMSUFTICIlcyAlc1xuIiwKKwkJCQkgICAgICBwdHItPm9yaWdpbmFsX25hbWUtPm5hbWUsCisJCQkJICAgICAgcHRyLT5hbGlhc2VkX25hbWUtPm5hbWUpKSB7CisJCQlkb25lID0gZmFsc2U7CisJCQlicmVhazsKKwkJfQorCX0KKwl1cF9yZWFkKCZ0b21veW9fYWxpYXNfbGlzdF9sb2NrKTsKKwlyZXR1cm4gZG9uZTsKK30KKworLyoqCisgKiB0b21veW9fd3JpdGVfYWxpYXNfcG9saWN5IC0gV3JpdGUgInN0cnVjdCB0b21veW9fYWxpYXNfZW50cnkiIGxpc3QuCisgKgorICogQGRhdGE6ICAgICAgU3RyaW5nIHRvIHBhcnNlLgorICogQGlzX2RlbGV0ZTogVHJ1ZSBpZiBpdCBpcyBhIGRlbGV0ZSByZXF1ZXN0LgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK2ludCB0b21veW9fd3JpdGVfYWxpYXNfcG9saWN5KGNoYXIgKmRhdGEsIGNvbnN0IGJvb2wgaXNfZGVsZXRlKQoreworCWNoYXIgKmNwID0gc3RyY2hyKGRhdGEsICcgJyk7CisKKwlpZiAoIWNwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwkqY3ArKyA9ICdcMCc7CisJcmV0dXJuIHRvbW95b191cGRhdGVfYWxpYXNfZW50cnkoZGF0YSwgY3AsIGlzX2RlbGV0ZSk7Cit9CisKKy8qIERvbWFpbiBjcmVhdGUvZGVsZXRlL3VuZGVsZXRlIGhhbmRsZXIuICovCisKKy8qICNkZWZpbmUgVE9NT1lPX0RFQlVHX0RPTUFJTl9VTkRFTEVURSAqLworCisvKioKKyAqIHRvbW95b19kZWxldGVfZG9tYWluIC0gRGVsZXRlIGEgZG9tYWluLgorICoKKyAqIEBkb21haW5uYW1lOiBUaGUgbmFtZSBvZiBkb21haW4uCisgKgorICogUmV0dXJucyAwLgorICovCitpbnQgdG9tb3lvX2RlbGV0ZV9kb21haW4oY2hhciAqZG9tYWlubmFtZSkKK3sKKwlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW47CisJc3RydWN0IHRvbW95b19wYXRoX2luZm8gbmFtZTsKKworCW5hbWUubmFtZSA9IGRvbWFpbm5hbWU7CisJdG9tb3lvX2ZpbGxfcGF0aF9pbmZvKCZuYW1lKTsKKwkvKioqKiogRVhDTFVTSVZFIFNFQ1RJT04gU1RBUlQgKioqKiovCisJZG93bl93cml0ZSgmdG9tb3lvX2RvbWFpbl9saXN0X2xvY2spOworI2lmZGVmIFRPTU9ZT19ERUJVR19ET01BSU5fVU5ERUxFVEUKKwlwcmludGsoS0VSTl9ERUJVRyAidG9tb3lvX2RlbGV0ZV9kb21haW4gJXNcbiIsIGRvbWFpbm5hbWUpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoZG9tYWluLCAmdG9tb3lvX2RvbWFpbl9saXN0LCBsaXN0KSB7CisJCWlmICh0b21veW9fcGF0aGNtcChkb21haW4tPmRvbWFpbm5hbWUsICZuYW1lKSkKKwkJCWNvbnRpbnVlOworCQlwcmludGsoS0VSTl9ERUJVRyAiTGlzdDogJXAgJXVcbiIsIGRvbWFpbiwgZG9tYWluLT5pc19kZWxldGVkKTsKKwl9CisjZW5kaWYKKwkvKiBJcyB0aGVyZSBhbiBhY3RpdmUgZG9tYWluPyAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkoZG9tYWluLCAmdG9tb3lvX2RvbWFpbl9saXN0LCBsaXN0KSB7CisJCXN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbjI7CisJCS8qIE5ldmVyIGRlbGV0ZSB0b21veW9fa2VybmVsX2RvbWFpbiAqLworCQlpZiAoZG9tYWluID09ICZ0b21veW9fa2VybmVsX2RvbWFpbikKKwkJCWNvbnRpbnVlOworCQlpZiAoZG9tYWluLT5pc19kZWxldGVkIHx8CisJCSAgICB0b21veW9fcGF0aGNtcChkb21haW4tPmRvbWFpbm5hbWUsICZuYW1lKSkKKwkJCWNvbnRpbnVlOworCQkvKiBNYXJrIGFscmVhZHkgZGVsZXRlZCBkb21haW5zIGFzIG5vbiB1bmRlbGV0YWJsZS4gKi8KKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShkb21haW4yLCAmdG9tb3lvX2RvbWFpbl9saXN0LCBsaXN0KSB7CisJCQlpZiAoIWRvbWFpbjItPmlzX2RlbGV0ZWQgfHwKKwkJCSAgICB0b21veW9fcGF0aGNtcChkb21haW4yLT5kb21haW5uYW1lLCAmbmFtZSkpCisJCQkJY29udGludWU7CisjaWZkZWYgVE9NT1lPX0RFQlVHX0RPTUFJTl9VTkRFTEVURQorCQkJaWYgKGRvbWFpbjItPmlzX2RlbGV0ZWQgIT0gMjU1KQorCQkJCXByaW50ayhLRVJOX0RFQlVHCisJCQkJICAgICAgICJNYXJrZWQgJXAgYXMgbm9uIHVuZGVsZXRhYmxlXG4iLAorCQkJCSAgICAgICBkb21haW4yKTsKKyNlbmRpZgorCQkJZG9tYWluMi0+aXNfZGVsZXRlZCA9IDI1NTsKKwkJfQorCQkvKiBEZWxldGUgYW5kIG1hcmsgYWN0aXZlIGRvbWFpbiBhcyB1bmRlbGV0YWJsZS4gKi8KKwkJZG9tYWluLT5pc19kZWxldGVkID0gMTsKKyNpZmRlZiBUT01PWU9fREVCVUdfRE9NQUlOX1VOREVMRVRFCisJCXByaW50ayhLRVJOX0RFQlVHICJNYXJrZWQgJXAgYXMgdW5kZWxldGFibGVcbiIsIGRvbWFpbik7CisjZW5kaWYKKwkJYnJlYWs7CisJfQorCXVwX3dyaXRlKCZ0b21veW9fZG9tYWluX2xpc3RfbG9jayk7CisJLyoqKioqIEVYQ0xVU0lWRSBTRUNUSU9OIEVORCAqKioqKi8KKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB0b21veW9fdW5kZWxldGVfZG9tYWluIC0gVW5kZWxldGUgYSBkb21haW4uCisgKgorICogQGRvbWFpbm5hbWU6IFRoZSBuYW1lIG9mIGRvbWFpbi4KKyAqCisgKiBSZXR1cm5zIHBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iIG9uIHN1Y2Nlc3MsIE5VTEwgb3RoZXJ3aXNlLgorICovCitzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICp0b21veW9fdW5kZWxldGVfZG9tYWluKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUpCit7CisJc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluOworCXN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmNhbmRpZGF0ZV9kb21haW4gPSBOVUxMOworCXN0cnVjdCB0b21veW9fcGF0aF9pbmZvIG5hbWU7CisKKwluYW1lLm5hbWUgPSBkb21haW5uYW1lOworCXRvbW95b19maWxsX3BhdGhfaW5mbygmbmFtZSk7CisJLyoqKioqIEVYQ0xVU0lWRSBTRUNUSU9OIFNUQVJUICoqKioqLworCWRvd25fd3JpdGUoJnRvbW95b19kb21haW5fbGlzdF9sb2NrKTsKKyNpZmRlZiBUT01PWU9fREVCVUdfRE9NQUlOX1VOREVMRVRFCisJcHJpbnRrKEtFUk5fREVCVUcgInRvbW95b191bmRlbGV0ZV9kb21haW4gJXNcbiIsIGRvbWFpbm5hbWUpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoZG9tYWluLCAmdG9tb3lvX2RvbWFpbl9saXN0LCBsaXN0KSB7CisJCWlmICh0b21veW9fcGF0aGNtcChkb21haW4tPmRvbWFpbm5hbWUsICZuYW1lKSkKKwkJCWNvbnRpbnVlOworCQlwcmludGsoS0VSTl9ERUJVRyAiTGlzdDogJXAgJXVcbiIsIGRvbWFpbiwgZG9tYWluLT5pc19kZWxldGVkKTsKKwl9CisjZW5kaWYKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRvbWFpbiwgJnRvbW95b19kb21haW5fbGlzdCwgbGlzdCkgeworCQlpZiAodG9tb3lvX3BhdGhjbXAoJm5hbWUsIGRvbWFpbi0+ZG9tYWlubmFtZSkpCisJCQljb250aW51ZTsKKwkJaWYgKCFkb21haW4tPmlzX2RlbGV0ZWQpIHsKKwkJCS8qIFRoaXMgZG9tYWluIGlzIGFjdGl2ZS4gSSBjYW4ndCB1bmRlbGV0ZS4gKi8KKwkJCWNhbmRpZGF0ZV9kb21haW4gPSBOVUxMOworI2lmZGVmIFRPTU9ZT19ERUJVR19ET01BSU5fVU5ERUxFVEUKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlcCBpcyBhY3RpdmUuIEkgY2FuJ3QgdW5kZWxldGUuXG4iLAorCQkJICAgICAgIGRvbWFpbik7CisjZW5kaWYKKwkJCWJyZWFrOworCQl9CisJCS8qIElzIHRoaXMgZG9tYWluIHVuZGVsZXRhYmxlPyAqLworCQlpZiAoZG9tYWluLT5pc19kZWxldGVkID09IDEpCisJCQljYW5kaWRhdGVfZG9tYWluID0gZG9tYWluOworCX0KKwlpZiAoY2FuZGlkYXRlX2RvbWFpbikgeworCQljYW5kaWRhdGVfZG9tYWluLT5pc19kZWxldGVkID0gMDsKKyNpZmRlZiBUT01PWU9fREVCVUdfRE9NQUlOX1VOREVMRVRFCisJCXByaW50ayhLRVJOX0RFQlVHICIlcCB3YXMgdW5kZWxldGVkLlxuIiwgY2FuZGlkYXRlX2RvbWFpbik7CisjZW5kaWYKKwl9CisJdXBfd3JpdGUoJnRvbW95b19kb21haW5fbGlzdF9sb2NrKTsKKwkvKioqKiogRVhDTFVTSVZFIFNFQ1RJT04gRU5EICoqKioqLworCXJldHVybiBjYW5kaWRhdGVfZG9tYWluOworfQorCisvKioKKyAqIHRvbW95b19maW5kX29yX2Fzc2lnbl9uZXdfZG9tYWluIC0gQ3JlYXRlIGEgZG9tYWluLgorICoKKyAqIEBkb21haW5uYW1lOiBUaGUgbmFtZSBvZiBkb21haW4uCisgKiBAcHJvZmlsZTogICAgUHJvZmlsZSBudW1iZXIgdG8gYXNzaWduIGlmIHRoZSBkb21haW4gd2FzIG5ld2x5IGNyZWF0ZWQuCisgKgorICogUmV0dXJucyBwb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIiBvbiBzdWNjZXNzLCBOVUxMIG90aGVyd2lzZS4KKyAqLworc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqdG9tb3lvX2ZpbmRfb3JfYXNzaWduX25ld19kb21haW4oY29uc3QgY2hhciAqCisJCQkJCQkJICAgIGRvbWFpbm5hbWUsCisJCQkJCQkJICAgIGNvbnN0IHU4IHByb2ZpbGUpCit7CisJc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluID0gTlVMTDsKKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqc2F2ZWRfZG9tYWlubmFtZTsKKworCS8qKioqKiBFWENMVVNJVkUgU0VDVElPTiBTVEFSVCAqKioqKi8KKwlkb3duX3dyaXRlKCZ0b21veW9fZG9tYWluX2xpc3RfbG9jayk7CisJZG9tYWluID0gdG9tb3lvX2ZpbmRfZG9tYWluKGRvbWFpbm5hbWUpOworCWlmIChkb21haW4pCisJCWdvdG8gb3V0OworCWlmICghdG9tb3lvX2lzX2NvcnJlY3RfZG9tYWluKGRvbWFpbm5hbWUsIF9fZnVuY19fKSkKKwkJZ290byBvdXQ7CisJc2F2ZWRfZG9tYWlubmFtZSA9IHRvbW95b19zYXZlX25hbWUoZG9tYWlubmFtZSk7CisJaWYgKCFzYXZlZF9kb21haW5uYW1lKQorCQlnb3RvIG91dDsKKwkvKiBDYW4gSSByZXVzZSBtZW1vcnkgb2YgZGVsZXRlZCBkb21haW4/ICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShkb21haW4sICZ0b21veW9fZG9tYWluX2xpc3QsIGxpc3QpIHsKKwkJc3RydWN0IHRhc2tfc3RydWN0ICpwOworCQlzdHJ1Y3QgdG9tb3lvX2FjbF9pbmZvICpwdHI7CisJCWJvb2wgZmxhZzsKKwkJaWYgKCFkb21haW4tPmlzX2RlbGV0ZWQgfHwKKwkJICAgIGRvbWFpbi0+ZG9tYWlubmFtZSAhPSBzYXZlZF9kb21haW5uYW1lKQorCQkJY29udGludWU7CisJCWZsYWcgPSBmYWxzZTsKKwkJLyoqKioqIENSSVRJQ0FMIFNFQ1RJT04gU1RBUlQgKioqKiovCisJCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CisJCWZvcl9lYWNoX3Byb2Nlc3MocCkgeworCQkJaWYgKHRvbW95b19yZWFsX2RvbWFpbihwKSAhPSBkb21haW4pCisJCQkJY29udGludWU7CisJCQlmbGFnID0gdHJ1ZTsKKwkJCWJyZWFrOworCQl9CisJCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwkJLyoqKioqIENSSVRJQ0FMIFNFQ1RJT04gRU5EICoqKioqLworCQlpZiAoZmxhZykKKwkJCWNvbnRpbnVlOworI2lmZGVmIFRPTU9ZT19ERUJVR19ET01BSU5fVU5ERUxFVEUKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlJldXNpbmcgJXAgJXNcbiIsIGRvbWFpbiwKKwkJICAgICAgIGRvbWFpbi0+ZG9tYWlubmFtZS0+bmFtZSk7CisjZW5kaWYKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICZkb21haW4tPmFjbF9pbmZvX2xpc3QsIGxpc3QpIHsKKwkJCXB0ci0+dHlwZSB8PSBUT01PWU9fQUNMX0RFTEVURUQ7CisJCX0KKwkJdG9tb3lvX3NldF9kb21haW5fZmxhZyhkb21haW4sIHRydWUsIGRvbWFpbi0+ZmxhZ3MpOworCQlkb21haW4tPnByb2ZpbGUgPSBwcm9maWxlOworCQlkb21haW4tPnF1b3RhX3dhcm5lZCA9IGZhbHNlOworCQltYigpOyAvKiBBdm9pZCBvdXQtb2Ytb3JkZXIgZXhlY3V0aW9uLiAqLworCQlkb21haW4tPmlzX2RlbGV0ZWQgPSAwOworCQlnb3RvIG91dDsKKwl9CisJLyogTm8gbWVtb3J5IHJldXNhYmxlLiBDcmVhdGUgdXNpbmcgbmV3IG1lbW9yeS4gKi8KKwlkb21haW4gPSB0b21veW9fYWxsb2NfZWxlbWVudChzaXplb2YoKmRvbWFpbikpOworCWlmIChkb21haW4pIHsKKwkJSU5JVF9MSVNUX0hFQUQoJmRvbWFpbi0+YWNsX2luZm9fbGlzdCk7CisJCWRvbWFpbi0+ZG9tYWlubmFtZSA9IHNhdmVkX2RvbWFpbm5hbWU7CisJCWRvbWFpbi0+cHJvZmlsZSA9IHByb2ZpbGU7CisJCWxpc3RfYWRkX3RhaWwoJmRvbWFpbi0+bGlzdCwgJnRvbW95b19kb21haW5fbGlzdCk7CisJfQorIG91dDoKKwl1cF93cml0ZSgmdG9tb3lvX2RvbWFpbl9saXN0X2xvY2spOworCS8qKioqKiBFWENMVVNJVkUgU0VDVElPTiBFTkQgKioqKiovCisJcmV0dXJuIGRvbWFpbjsKK30KKworLyoqCisgKiB0b21veW9fZmluZF9uZXh0X2RvbWFpbiAtIEZpbmQgYSBkb21haW4uCisgKgorICogQGJwcm06ICAgICAgICAgICBQb2ludGVyIHRvICJzdHJ1Y3QgbGludXhfYmlucHJtIi4KKyAqIEBuZXh0X2RvbWFpbjogICAgUG9pbnRlciB0byBwb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIi4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitpbnQgdG9tb3lvX2ZpbmRfbmV4dF9kb21haW4oc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSwKKwkJCSAgICBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICoqbmV4dF9kb21haW4pCit7CisJLyoKKwkgKiBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhhdCB0aGUgc2l6ZSBvZiBidWZmZXIgcmV0dXJuZWQgYnkKKwkgKiB0b21veW9fcmVhbHBhdGgoKSA9IFRPTU9ZT19NQVhfUEFUSE5BTUVfTEVOLgorCSAqLworCXN0cnVjdCB0b21veW9fcGFnZV9idWZmZXIgKnRtcCA9IHRvbW95b19hbGxvYyhzaXplb2YoKnRtcCkpOworCXN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKm9sZF9kb21haW4gPSB0b21veW9fZG9tYWluKCk7CisJc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluID0gTlVMTDsKKwljb25zdCBjaGFyICpvbGRfZG9tYWluX25hbWUgPSBvbGRfZG9tYWluLT5kb21haW5uYW1lLT5uYW1lOworCWNvbnN0IGNoYXIgKm9yaWdpbmFsX25hbWUgPSBicHJtLT5maWxlbmFtZTsKKwljaGFyICpuZXdfZG9tYWluX25hbWUgPSBOVUxMOworCWNoYXIgKnJlYWxfcHJvZ3JhbV9uYW1lID0gTlVMTDsKKwljaGFyICpzeW1saW5rX3Byb2dyYW1fbmFtZSA9IE5VTEw7CisJY29uc3QgdTggbW9kZSA9IHRvbW95b19jaGVja19mbGFncyhvbGRfZG9tYWluLCBUT01PWU9fTUFDX0ZPUl9GSUxFKTsKKwljb25zdCBib29sIGlzX2VuZm9yY2UgPSAobW9kZSA9PSAzKTsKKwlpbnQgcmV0dmFsID0gLUVOT01FTTsKKwlzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyByOyAvKiByZWFsIG5hbWUgKi8KKwlzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyBzOyAvKiBzeW1saW5rIG5hbWUgKi8KKwlzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyBsOyAvKiBsYXN0IG5hbWUgKi8KKwlzdGF0aWMgYm9vbCBpbml0aWFsaXplZDsKKworCWlmICghdG1wKQorCQlnb3RvIG91dDsKKworCWlmICghaW5pdGlhbGl6ZWQpIHsKKwkJLyoKKwkJICogQnVpbHQtaW4gaW5pdGlhbGl6ZXJzLiBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIHBvbGljaWVzIGFyZQorCQkgKiBub3QgbG9hZGVkIHVudGlsIHN0YXJ0aW5nIC9zYmluL2luaXQuCisJCSAqLworCQl0b21veW9fdXBkYXRlX2RvbWFpbl9pbml0aWFsaXplcl9lbnRyeShOVUxMLCAiL3NiaW4vaG90cGx1ZyIsCisJCQkJCQkgICAgICAgZmFsc2UsIGZhbHNlKTsKKwkJdG9tb3lvX3VwZGF0ZV9kb21haW5faW5pdGlhbGl6ZXJfZW50cnkoTlVMTCwgIi9zYmluL21vZHByb2JlIiwKKwkJCQkJCSAgICAgICBmYWxzZSwgZmFsc2UpOworCQlpbml0aWFsaXplZCA9IHRydWU7CisJfQorCisJLyogR2V0IHRvbW95b19yZWFscGF0aCBvZiBwcm9ncmFtLiAqLworCXJldHZhbCA9IC1FTk9FTlQ7CisJLyogSSBob3BlIHRvbW95b19yZWFscGF0aCgpIHdvbid0IGZhaWwgd2l0aCAtRU5PTUVNLiAqLworCXJlYWxfcHJvZ3JhbV9uYW1lID0gdG9tb3lvX3JlYWxwYXRoKG9yaWdpbmFsX25hbWUpOworCWlmICghcmVhbF9wcm9ncmFtX25hbWUpCisJCWdvdG8gb3V0OworCS8qIEdldCB0b21veW9fcmVhbHBhdGggb2Ygc3ltYm9saWMgbGluay4gKi8KKwlzeW1saW5rX3Byb2dyYW1fbmFtZSA9IHRvbW95b19yZWFscGF0aF9ub2ZvbGxvdyhvcmlnaW5hbF9uYW1lKTsKKwlpZiAoIXN5bWxpbmtfcHJvZ3JhbV9uYW1lKQorCQlnb3RvIG91dDsKKworCXIubmFtZSA9IHJlYWxfcHJvZ3JhbV9uYW1lOworCXRvbW95b19maWxsX3BhdGhfaW5mbygmcik7CisJcy5uYW1lID0gc3ltbGlua19wcm9ncmFtX25hbWU7CisJdG9tb3lvX2ZpbGxfcGF0aF9pbmZvKCZzKTsKKwlsLm5hbWUgPSB0b21veW9fZ2V0X2xhc3RfbmFtZShvbGRfZG9tYWluKTsKKwl0b21veW9fZmlsbF9wYXRoX2luZm8oJmwpOworCisJLyogQ2hlY2sgJ2FsaWFzJyBkaXJlY3RpdmUuICovCisJaWYgKHRvbW95b19wYXRoY21wKCZyLCAmcykpIHsKKwkJc3RydWN0IHRvbW95b19hbGlhc19lbnRyeSAqcHRyOworCQkvKiBJcyB0aGlzIHByb2dyYW0gYWxsb3dlZCB0byBiZSBjYWxsZWQgdmlhIHN5bWJvbGljIGxpbmtzPyAqLworCQlkb3duX3JlYWQoJnRvbW95b19hbGlhc19saXN0X2xvY2spOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ciwgJnRvbW95b19hbGlhc19saXN0LCBsaXN0KSB7CisJCQlpZiAocHRyLT5pc19kZWxldGVkIHx8CisJCQkgICAgdG9tb3lvX3BhdGhjbXAoJnIsIHB0ci0+b3JpZ2luYWxfbmFtZSkgfHwKKwkJCSAgICB0b21veW9fcGF0aGNtcCgmcywgcHRyLT5hbGlhc2VkX25hbWUpKQorCQkJCWNvbnRpbnVlOworCQkJbWVtc2V0KHJlYWxfcHJvZ3JhbV9uYW1lLCAwLCBUT01PWU9fTUFYX1BBVEhOQU1FX0xFTik7CisJCQlzdHJuY3B5KHJlYWxfcHJvZ3JhbV9uYW1lLCBwdHItPmFsaWFzZWRfbmFtZS0+bmFtZSwKKwkJCQlUT01PWU9fTUFYX1BBVEhOQU1FX0xFTiAtIDEpOworCQkJdG9tb3lvX2ZpbGxfcGF0aF9pbmZvKCZyKTsKKwkJCWJyZWFrOworCQl9CisJCXVwX3JlYWQoJnRvbW95b19hbGlhc19saXN0X2xvY2spOworCX0KKworCS8qIENoZWNrIGV4ZWN1dGUgcGVybWlzc2lvbi4gKi8KKwlyZXR2YWwgPSB0b21veW9fY2hlY2tfZXhlY19wZXJtKG9sZF9kb21haW4sICZyLCB0bXApOworCWlmIChyZXR2YWwgPCAwKQorCQlnb3RvIG91dDsKKworCW5ld19kb21haW5fbmFtZSA9IHRtcC0+YnVmZmVyOworCWlmICh0b21veW9faXNfZG9tYWluX2luaXRpYWxpemVyKG9sZF9kb21haW4tPmRvbWFpbm5hbWUsICZyLCAmbCkpIHsKKwkJLyogVHJhbnNpdCB0byB0aGUgY2hpbGQgb2YgdG9tb3lvX2tlcm5lbF9kb21haW4gZG9tYWluLiAqLworCQlzbnByaW50ZihuZXdfZG9tYWluX25hbWUsIFRPTU9ZT19NQVhfUEFUSE5BTUVfTEVOICsgMSwKKwkJCSBUT01PWU9fUk9PVF9OQU1FICIgIiAiJXMiLCByZWFsX3Byb2dyYW1fbmFtZSk7CisJfSBlbHNlIGlmIChvbGRfZG9tYWluID09ICZ0b21veW9fa2VybmVsX2RvbWFpbiAmJgorCQkgICAhdG9tb3lvX3BvbGljeV9sb2FkZWQpIHsKKwkJLyoKKwkJICogTmVlZG4ndCB0byB0cmFuc2l0IGZyb20ga2VybmVsIGRvbWFpbiBiZWZvcmUgc3RhcnRpbmcKKwkJICogL3NiaW4vaW5pdC4gQnV0IHRyYW5zaXQgZnJvbSBrZXJuZWwgZG9tYWluIGlmIGV4ZWN1dGluZworCQkgKiBpbml0aWFsaXplcnMgYmVjYXVzZSB0aGV5IG1pZ2h0IHN0YXJ0IGJlZm9yZSAvc2Jpbi9pbml0LgorCQkgKi8KKwkJZG9tYWluID0gb2xkX2RvbWFpbjsKKwl9IGVsc2UgaWYgKHRvbW95b19pc19kb21haW5fa2VlcGVyKG9sZF9kb21haW4tPmRvbWFpbm5hbWUsICZyLCAmbCkpIHsKKwkJLyogS2VlcCBjdXJyZW50IGRvbWFpbi4gKi8KKwkJZG9tYWluID0gb2xkX2RvbWFpbjsKKwl9IGVsc2UgeworCQkvKiBOb3JtYWwgZG9tYWluIHRyYW5zaXRpb24uICovCisJCXNucHJpbnRmKG5ld19kb21haW5fbmFtZSwgVE9NT1lPX01BWF9QQVRITkFNRV9MRU4gKyAxLAorCQkJICIlcyAlcyIsIG9sZF9kb21haW5fbmFtZSwgcmVhbF9wcm9ncmFtX25hbWUpOworCX0KKwlpZiAoZG9tYWluIHx8IHN0cmxlbihuZXdfZG9tYWluX25hbWUpID49IFRPTU9ZT19NQVhfUEFUSE5BTUVfTEVOKQorCQlnb3RvIGRvbmU7CisJZG93bl9yZWFkKCZ0b21veW9fZG9tYWluX2xpc3RfbG9jayk7CisJZG9tYWluID0gdG9tb3lvX2ZpbmRfZG9tYWluKG5ld19kb21haW5fbmFtZSk7CisJdXBfcmVhZCgmdG9tb3lvX2RvbWFpbl9saXN0X2xvY2spOworCWlmIChkb21haW4pCisJCWdvdG8gZG9uZTsKKwlpZiAoaXNfZW5mb3JjZSkKKwkJZ290byBkb25lOworCWRvbWFpbiA9IHRvbW95b19maW5kX29yX2Fzc2lnbl9uZXdfZG9tYWluKG5ld19kb21haW5fbmFtZSwKKwkJCQkJCSAgb2xkX2RvbWFpbi0+cHJvZmlsZSk7CisgZG9uZToKKwlpZiAoZG9tYWluKQorCQlnb3RvIG91dDsKKwlwcmludGsoS0VSTl9XQVJOSU5HICJUT01PWU8tRVJST1I6IERvbWFpbiAnJXMnIG5vdCBkZWZpbmVkLlxuIiwKKwkgICAgICAgbmV3X2RvbWFpbl9uYW1lKTsKKwlpZiAoaXNfZW5mb3JjZSkKKwkJcmV0dmFsID0gLUVQRVJNOworCWVsc2UKKwkJdG9tb3lvX3NldF9kb21haW5fZmxhZyhvbGRfZG9tYWluLCBmYWxzZSwKKwkJCQkgICAgICAgVE9NT1lPX0RPTUFJTl9GTEFHU19UUkFOU0lUSU9OX0ZBSUxFRCk7Cisgb3V0OgorCXRvbW95b19mcmVlKHJlYWxfcHJvZ3JhbV9uYW1lKTsKKwl0b21veW9fZnJlZShzeW1saW5rX3Byb2dyYW1fbmFtZSk7CisJKm5leHRfZG9tYWluID0gZG9tYWluID8gZG9tYWluIDogb2xkX2RvbWFpbjsKKwl0b21veW9fZnJlZSh0bXApOworCXJldHVybiByZXR2YWw7Cit9CmRpZmYgLS1naXQgYS9zZWN1cml0eS90b21veW8vZmlsZS5jIGIvc2VjdXJpdHkvdG9tb3lvL2ZpbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWY1MGMxCi0tLSAvZGV2L251bGwKKysrIGIvc2VjdXJpdHkvdG9tb3lvL2ZpbGUuYwpAQCAtMCwwICsxLDEyNDEgQEAKKy8qCisgKiBzZWN1cml0eS90b21veW8vZmlsZS5jCisgKgorICogSW1wbGVtZW50YXRpb24gb2YgdGhlIERvbWFpbi1CYXNlZCBNYW5kYXRvcnkgQWNjZXNzIENvbnRyb2wuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDkgIE5UVCBEQVRBIENPUlBPUkFUSU9OCisgKgorICogVmVyc2lvbjogMi4yLjAtcHJlICAgMjAwOS8wMi8wMQorICoKKyAqLworCisjaW5jbHVkZSAiY29tbW9uLmgiCisjaW5jbHVkZSAidG9tb3lvLmgiCisjaW5jbHVkZSAicmVhbHBhdGguaCIKKyNkZWZpbmUgQUNDX01PREUoeCkgKCJcMDAwXDAwNFwwMDJcMDA2IlsoeCkmT19BQ0NNT0RFXSkKKworLyogU3RydWN0dXJlIGZvciAiYWxsb3dfcmVhZCIga2V5d29yZC4gKi8KK3N0cnVjdCB0b21veW9fZ2xvYmFsbHlfcmVhZGFibGVfZmlsZV9lbnRyeSB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpmaWxlbmFtZTsKKwlib29sIGlzX2RlbGV0ZWQ7Cit9OworCisvKiBTdHJ1Y3R1cmUgZm9yICJmaWxlX3BhdHRlcm4iIGtleXdvcmQuICovCitzdHJ1Y3QgdG9tb3lvX3BhdHRlcm5fZW50cnkgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqcGF0dGVybjsKKwlib29sIGlzX2RlbGV0ZWQ7Cit9OworCisvKiBTdHJ1Y3R1cmUgZm9yICJkZW55X3Jld3JpdGUiIGtleXdvcmQuICovCitzdHJ1Y3QgdG9tb3lvX25vX3Jld3JpdGVfZW50cnkgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqcGF0dGVybjsKKwlib29sIGlzX2RlbGV0ZWQ7Cit9OworCisvKiBLZXl3b3JkIGFycmF5IGZvciBzaW5nbGUgcGF0aCBvcGVyYXRpb25zLiAqLworc3RhdGljIGNvbnN0IGNoYXIgKnRvbW95b19zcF9rZXl3b3JkW1RPTU9ZT19NQVhfU0lOR0xFX1BBVEhfT1BFUkFUSU9OXSA9IHsKKwlbVE9NT1lPX1RZUEVfUkVBRF9XUklURV9BQ0xdID0gInJlYWQvd3JpdGUiLAorCVtUT01PWU9fVFlQRV9FWEVDVVRFX0FDTF0gICAgPSAiZXhlY3V0ZSIsCisJW1RPTU9ZT19UWVBFX1JFQURfQUNMXSAgICAgICA9ICJyZWFkIiwKKwlbVE9NT1lPX1RZUEVfV1JJVEVfQUNMXSAgICAgID0gIndyaXRlIiwKKwlbVE9NT1lPX1RZUEVfQ1JFQVRFX0FDTF0gICAgID0gImNyZWF0ZSIsCisJW1RPTU9ZT19UWVBFX1VOTElOS19BQ0xdICAgICA9ICJ1bmxpbmsiLAorCVtUT01PWU9fVFlQRV9NS0RJUl9BQ0xdICAgICAgPSAibWtkaXIiLAorCVtUT01PWU9fVFlQRV9STURJUl9BQ0xdICAgICAgPSAicm1kaXIiLAorCVtUT01PWU9fVFlQRV9NS0ZJRk9fQUNMXSAgICAgPSAibWtmaWZvIiwKKwlbVE9NT1lPX1RZUEVfTUtTT0NLX0FDTF0gICAgID0gIm1rc29jayIsCisJW1RPTU9ZT19UWVBFX01LQkxPQ0tfQUNMXSAgICA9ICJta2Jsb2NrIiwKKwlbVE9NT1lPX1RZUEVfTUtDSEFSX0FDTF0gICAgID0gIm1rY2hhciIsCisJW1RPTU9ZT19UWVBFX1RSVU5DQVRFX0FDTF0gICA9ICJ0cnVuY2F0ZSIsCisJW1RPTU9ZT19UWVBFX1NZTUxJTktfQUNMXSAgICA9ICJzeW1saW5rIiwKKwlbVE9NT1lPX1RZUEVfUkVXUklURV9BQ0xdICAgID0gInJld3JpdGUiLAorfTsKKworLyogS2V5d29yZCBhcnJheSBmb3IgZG91YmxlIHBhdGggb3BlcmF0aW9ucy4gKi8KK3N0YXRpYyBjb25zdCBjaGFyICp0b21veW9fZHBfa2V5d29yZFtUT01PWU9fTUFYX0RPVUJMRV9QQVRIX09QRVJBVElPTl0gPSB7CisJW1RPTU9ZT19UWVBFX0xJTktfQUNMXSAgICA9ICJsaW5rIiwKKwlbVE9NT1lPX1RZUEVfUkVOQU1FX0FDTF0gID0gInJlbmFtZSIsCit9OworCisvKioKKyAqIHRvbW95b19zcDJrZXl3b3JkIC0gR2V0IHRoZSBuYW1lIG9mIHNpbmdsZSBwYXRoIG9wZXJhdGlvbi4KKyAqCisgKiBAb3BlcmF0aW9uOiBUeXBlIG9mIG9wZXJhdGlvbi4KKyAqCisgKiBSZXR1cm5zIHRoZSBuYW1lIG9mIHNpbmdsZSBwYXRoIG9wZXJhdGlvbi4KKyAqLworY29uc3QgY2hhciAqdG9tb3lvX3NwMmtleXdvcmQoY29uc3QgdTggb3BlcmF0aW9uKQoreworCXJldHVybiAob3BlcmF0aW9uIDwgVE9NT1lPX01BWF9TSU5HTEVfUEFUSF9PUEVSQVRJT04pCisJCT8gdG9tb3lvX3NwX2tleXdvcmRbb3BlcmF0aW9uXSA6IE5VTEw7Cit9CisKKy8qKgorICogdG9tb3lvX2RwMmtleXdvcmQgLSBHZXQgdGhlIG5hbWUgb2YgZG91YmxlIHBhdGggb3BlcmF0aW9uLgorICoKKyAqIEBvcGVyYXRpb246IFR5cGUgb2Ygb3BlcmF0aW9uLgorICoKKyAqIFJldHVybnMgdGhlIG5hbWUgb2YgZG91YmxlIHBhdGggb3BlcmF0aW9uLgorICovCitjb25zdCBjaGFyICp0b21veW9fZHAya2V5d29yZChjb25zdCB1OCBvcGVyYXRpb24pCit7CisJcmV0dXJuIChvcGVyYXRpb24gPCBUT01PWU9fTUFYX0RPVUJMRV9QQVRIX09QRVJBVElPTikKKwkJPyB0b21veW9fZHBfa2V5d29yZFtvcGVyYXRpb25dIDogTlVMTDsKK30KKworLyoqCisgKiB0b21veW9fc3RyZW5kc3dpdGggLSBDaGVjayB3aGV0aGVyIHRoZSB0b2tlbiBlbmRzIHdpdGggdGhlIGdpdmVuIHRva2VuLgorICoKKyAqIEBuYW1lOiBUaGUgdG9rZW4gdG8gY2hlY2suCisgKiBAdGFpbDogVGhlIHRva2VuIHRvIGZpbmQuCisgKgorICogUmV0dXJucyB0cnVlIGlmIEBuYW1lIGVuZHMgd2l0aCBAdGFpbCwgZmFsc2Ugb3RoZXJ3aXNlLgorICovCitzdGF0aWMgYm9vbCB0b21veW9fc3RyZW5kc3dpdGgoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdGFpbCkKK3sKKwlpbnQgbGVuOworCisJaWYgKCFuYW1lIHx8ICF0YWlsKQorCQlyZXR1cm4gZmFsc2U7CisJbGVuID0gc3RybGVuKG5hbWUpIC0gc3RybGVuKHRhaWwpOworCXJldHVybiBsZW4gPj0gMCAmJiAhc3RyY21wKG5hbWUgKyBsZW4sIHRhaWwpOworfQorCisvKioKKyAqIHRvbW95b19nZXRfcGF0aCAtIEdldCByZWFscGF0aC4KKyAqCisgKiBAcGF0aDogUG9pbnRlciB0byAic3RydWN0IHBhdGgiLgorICoKKyAqIFJldHVybnMgcG9pbnRlciB0byAic3RydWN0IHRvbW95b19wYXRoX2luZm8iIG9uIHN1Y2Nlc3MsIE5VTEwgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnRvbW95b19nZXRfcGF0aChzdHJ1Y3QgcGF0aCAqcGF0aCkKK3sKKwlpbnQgZXJyb3I7CisJc3RydWN0IHRvbW95b19wYXRoX2luZm9fd2l0aF9kYXRhICpidWYgPSB0b21veW9fYWxsb2Moc2l6ZW9mKCpidWYpKTsKKworCWlmICghYnVmKQorCQlyZXR1cm4gTlVMTDsKKwkvKiBSZXNlcnZlIG9uZSBieXRlIGZvciBhcHBlbmRpbmcgIi8iLiAqLworCWVycm9yID0gdG9tb3lvX3JlYWxwYXRoX2Zyb21fcGF0aDIocGF0aCwgYnVmLT5ib2R5LAorCQkJCQkgICBzaXplb2YoYnVmLT5ib2R5KSAtIDIpOworCWlmICghZXJyb3IpIHsKKwkJYnVmLT5oZWFkLm5hbWUgPSBidWYtPmJvZHk7CisJCXRvbW95b19maWxsX3BhdGhfaW5mbygmYnVmLT5oZWFkKTsKKwkJcmV0dXJuICZidWYtPmhlYWQ7CisJfQorCXRvbW95b19mcmVlKGJ1Zik7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qIExvY2sgZm9yIGRvbWFpbi0+YWNsX2luZm9fbGlzdC4gKi8KK0RFQ0xBUkVfUldTRU0odG9tb3lvX2RvbWFpbl9hY2xfaW5mb19saXN0X2xvY2spOworCitzdGF0aWMgaW50IHRvbW95b191cGRhdGVfZG91YmxlX3BhdGhfYWNsKGNvbnN0IHU4IHR5cGUsIGNvbnN0IGNoYXIgKmZpbGVuYW1lMSwKKwkJCQkJIGNvbnN0IGNoYXIgKmZpbGVuYW1lMiwKKwkJCQkJIHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKgorCQkJCQkgY29uc3QgZG9tYWluLCBjb25zdCBib29sIGlzX2RlbGV0ZSk7CitzdGF0aWMgaW50IHRvbW95b191cGRhdGVfc2luZ2xlX3BhdGhfYWNsKGNvbnN0IHU4IHR5cGUsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAorCQkJCQkgc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqCisJCQkJCSBjb25zdCBkb21haW4sIGNvbnN0IGJvb2wgaXNfZGVsZXRlKTsKKworLyogVGhlIGxpc3QgZm9yICJzdHJ1Y3QgdG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2ZpbGVfZW50cnkiLiAqLworc3RhdGljIExJU1RfSEVBRCh0b21veW9fZ2xvYmFsbHlfcmVhZGFibGVfbGlzdCk7CitzdGF0aWMgREVDTEFSRV9SV1NFTSh0b21veW9fZ2xvYmFsbHlfcmVhZGFibGVfbGlzdF9sb2NrKTsKKworLyoqCisgKiB0b21veW9fdXBkYXRlX2dsb2JhbGx5X3JlYWRhYmxlX2VudHJ5IC0gVXBkYXRlICJzdHJ1Y3QgdG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2ZpbGVfZW50cnkiIGxpc3QuCisgKgorICogQGZpbGVuYW1lOiAgRmlsZW5hbWUgdW5jb25kaXRpb25hbGx5IHBlcm1pdHRlZCB0byBvcGVuKCkgZm9yIHJlYWRpbmcuCisgKiBAaXNfZGVsZXRlOiBUcnVlIGlmIGl0IGlzIGEgZGVsZXRlIHJlcXVlc3QuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCB0b21veW9fdXBkYXRlX2dsb2JhbGx5X3JlYWRhYmxlX2VudHJ5KGNvbnN0IGNoYXIgKmZpbGVuYW1lLAorCQkJCQkJIGNvbnN0IGJvb2wgaXNfZGVsZXRlKQoreworCXN0cnVjdCB0b21veW9fZ2xvYmFsbHlfcmVhZGFibGVfZmlsZV9lbnRyeSAqbmV3X2VudHJ5OworCXN0cnVjdCB0b21veW9fZ2xvYmFsbHlfcmVhZGFibGVfZmlsZV9lbnRyeSAqcHRyOworCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpzYXZlZF9maWxlbmFtZTsKKwlpbnQgZXJyb3IgPSAtRU5PTUVNOworCisJaWYgKCF0b21veW9faXNfY29ycmVjdF9wYXRoKGZpbGVuYW1lLCAxLCAwLCAtMSwgX19mdW5jX18pKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlzYXZlZF9maWxlbmFtZSA9IHRvbW95b19zYXZlX25hbWUoZmlsZW5hbWUpOworCWlmICghc2F2ZWRfZmlsZW5hbWUpCisJCXJldHVybiAtRU5PTUVNOworCS8qKioqKiBFWENMVVNJVkUgU0VDVElPTiBTVEFSVCAqKioqKi8KKwlkb3duX3dyaXRlKCZ0b21veW9fZ2xvYmFsbHlfcmVhZGFibGVfbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ciwgJnRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9saXN0LCBsaXN0KSB7CisJCWlmIChwdHItPmZpbGVuYW1lICE9IHNhdmVkX2ZpbGVuYW1lKQorCQkJY29udGludWU7CisJCXB0ci0+aXNfZGVsZXRlZCA9IGlzX2RlbGV0ZTsKKwkJZXJyb3IgPSAwOworCQlnb3RvIG91dDsKKwl9CisJaWYgKGlzX2RlbGV0ZSkgeworCQllcnJvciA9IC1FTk9FTlQ7CisJCWdvdG8gb3V0OworCX0KKwluZXdfZW50cnkgPSB0b21veW9fYWxsb2NfZWxlbWVudChzaXplb2YoKm5ld19lbnRyeSkpOworCWlmICghbmV3X2VudHJ5KQorCQlnb3RvIG91dDsKKwluZXdfZW50cnktPmZpbGVuYW1lID0gc2F2ZWRfZmlsZW5hbWU7CisJbGlzdF9hZGRfdGFpbCgmbmV3X2VudHJ5LT5saXN0LCAmdG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2xpc3QpOworCWVycm9yID0gMDsKKyBvdXQ6CisJdXBfd3JpdGUoJnRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9saXN0X2xvY2spOworCS8qKioqKiBFWENMVVNJVkUgU0VDVElPTiBFTkQgKioqKiovCisJcmV0dXJuIGVycm9yOworfQorCisvKioKKyAqIHRvbW95b19pc19nbG9iYWxseV9yZWFkYWJsZV9maWxlIC0gQ2hlY2sgaWYgdGhlIGZpbGUgaXMgdW5jb25kaXRpb25uYWx5IHBlcm1pdHRlZCB0byBiZSBvcGVuKCllZCBmb3IgcmVhZGluZy4KKyAqCisgKiBAZmlsZW5hbWU6IFRoZSBmaWxlbmFtZSB0byBjaGVjay4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgYW55IGRvbWFpbiBjYW4gb3BlbiBAZmlsZW5hbWUgZm9yIHJlYWRpbmcsIGZhbHNlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGJvb2wgdG9tb3lvX2lzX2dsb2JhbGx5X3JlYWRhYmxlX2ZpbGUoY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKgorCQkJCQkgICAgIGZpbGVuYW1lKQoreworCXN0cnVjdCB0b21veW9fZ2xvYmFsbHlfcmVhZGFibGVfZmlsZV9lbnRyeSAqcHRyOworCWJvb2wgZm91bmQgPSBmYWxzZTsKKwlkb3duX3JlYWQoJnRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkocHRyLCAmdG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2xpc3QsIGxpc3QpIHsKKwkJaWYgKCFwdHItPmlzX2RlbGV0ZWQgJiYKKwkJICAgIHRvbW95b19wYXRoX21hdGNoZXNfcGF0dGVybihmaWxlbmFtZSwgcHRyLT5maWxlbmFtZSkpIHsKKwkJCWZvdW5kID0gdHJ1ZTsKKwkJCWJyZWFrOworCQl9CisJfQorCXVwX3JlYWQoJnRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9saXN0X2xvY2spOworCXJldHVybiBmb3VuZDsKK30KKworLyoqCisgKiB0b21veW9fd3JpdGVfZ2xvYmFsbHlfcmVhZGFibGVfcG9saWN5IC0gV3JpdGUgInN0cnVjdCB0b21veW9fZ2xvYmFsbHlfcmVhZGFibGVfZmlsZV9lbnRyeSIgbGlzdC4KKyAqCisgKiBAZGF0YTogICAgICBTdHJpbmcgdG8gcGFyc2UuCisgKiBAaXNfZGVsZXRlOiBUcnVlIGlmIGl0IGlzIGEgZGVsZXRlIHJlcXVlc3QuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqLworaW50IHRvbW95b193cml0ZV9nbG9iYWxseV9yZWFkYWJsZV9wb2xpY3koY2hhciAqZGF0YSwgY29uc3QgYm9vbCBpc19kZWxldGUpCit7CisJcmV0dXJuIHRvbW95b191cGRhdGVfZ2xvYmFsbHlfcmVhZGFibGVfZW50cnkoZGF0YSwgaXNfZGVsZXRlKTsKK30KKworLyoqCisgKiB0b21veW9fcmVhZF9nbG9iYWxseV9yZWFkYWJsZV9wb2xpY3kgLSBSZWFkICJzdHJ1Y3QgdG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2ZpbGVfZW50cnkiIGxpc3QuCisgKgorICogQGhlYWQ6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KKyAqCisgKiBSZXR1cm5zIHRydWUgb24gc3VjY2VzcywgZmFsc2Ugb3RoZXJ3aXNlLgorICovCitib29sIHRvbW95b19yZWFkX2dsb2JhbGx5X3JlYWRhYmxlX3BvbGljeShzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwb3M7CisJYm9vbCBkb25lID0gdHJ1ZTsKKworCWRvd25fcmVhZCgmdG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9jb29raWUocG9zLCBoZWFkLT5yZWFkX3ZhcjIsCisJCQkgICAgICZ0b21veW9fZ2xvYmFsbHlfcmVhZGFibGVfbGlzdCkgeworCQlzdHJ1Y3QgdG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2ZpbGVfZW50cnkgKnB0cjsKKwkJcHRyID0gbGlzdF9lbnRyeShwb3MsCisJCQkJIHN0cnVjdCB0b21veW9fZ2xvYmFsbHlfcmVhZGFibGVfZmlsZV9lbnRyeSwKKwkJCQkgbGlzdCk7CisJCWlmIChwdHItPmlzX2RlbGV0ZWQpCisJCQljb250aW51ZTsKKwkJaWYgKCF0b21veW9faW9fcHJpbnRmKGhlYWQsIFRPTU9ZT19LRVlXT1JEX0FMTE9XX1JFQUQgIiVzXG4iLAorCQkJCSAgICAgIHB0ci0+ZmlsZW5hbWUtPm5hbWUpKSB7CisJCQlkb25lID0gZmFsc2U7CisJCQlicmVhazsKKwkJfQorCX0KKwl1cF9yZWFkKCZ0b21veW9fZ2xvYmFsbHlfcmVhZGFibGVfbGlzdF9sb2NrKTsKKwlyZXR1cm4gZG9uZTsKK30KKworLyogVGhlIGxpc3QgZm9yICJzdHJ1Y3QgdG9tb3lvX3BhdHRlcm5fZW50cnkiLiAqLworc3RhdGljIExJU1RfSEVBRCh0b21veW9fcGF0dGVybl9saXN0KTsKK3N0YXRpYyBERUNMQVJFX1JXU0VNKHRvbW95b19wYXR0ZXJuX2xpc3RfbG9jayk7CisKKy8qKgorICogdG9tb3lvX3VwZGF0ZV9maWxlX3BhdHRlcm5fZW50cnkgLSBVcGRhdGUgInN0cnVjdCB0b21veW9fcGF0dGVybl9lbnRyeSIgbGlzdC4KKyAqCisgKiBAcGF0dGVybjogICBQYXRobmFtZSBwYXR0ZXJuLgorICogQGlzX2RlbGV0ZTogVHJ1ZSBpZiBpdCBpcyBhIGRlbGV0ZSByZXF1ZXN0LgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX3VwZGF0ZV9maWxlX3BhdHRlcm5fZW50cnkoY29uc3QgY2hhciAqcGF0dGVybiwKKwkJCQkJICAgIGNvbnN0IGJvb2wgaXNfZGVsZXRlKQoreworCXN0cnVjdCB0b21veW9fcGF0dGVybl9lbnRyeSAqbmV3X2VudHJ5OworCXN0cnVjdCB0b21veW9fcGF0dGVybl9lbnRyeSAqcHRyOworCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpzYXZlZF9wYXR0ZXJuOworCWludCBlcnJvciA9IC1FTk9NRU07CisKKwlpZiAoIXRvbW95b19pc19jb3JyZWN0X3BhdGgocGF0dGVybiwgMCwgMSwgMCwgX19mdW5jX18pKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlzYXZlZF9wYXR0ZXJuID0gdG9tb3lvX3NhdmVfbmFtZShwYXR0ZXJuKTsKKwlpZiAoIXNhdmVkX3BhdHRlcm4pCisJCXJldHVybiAtRU5PTUVNOworCS8qKioqKiBFWENMVVNJVkUgU0VDVElPTiBTVEFSVCAqKioqKi8KKwlkb3duX3dyaXRlKCZ0b21veW9fcGF0dGVybl9saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkocHRyLCAmdG9tb3lvX3BhdHRlcm5fbGlzdCwgbGlzdCkgeworCQlpZiAoc2F2ZWRfcGF0dGVybiAhPSBwdHItPnBhdHRlcm4pCisJCQljb250aW51ZTsKKwkJcHRyLT5pc19kZWxldGVkID0gaXNfZGVsZXRlOworCQllcnJvciA9IDA7CisJCWdvdG8gb3V0OworCX0KKwlpZiAoaXNfZGVsZXRlKSB7CisJCWVycm9yID0gLUVOT0VOVDsKKwkJZ290byBvdXQ7CisJfQorCW5ld19lbnRyeSA9IHRvbW95b19hbGxvY19lbGVtZW50KHNpemVvZigqbmV3X2VudHJ5KSk7CisJaWYgKCFuZXdfZW50cnkpCisJCWdvdG8gb3V0OworCW5ld19lbnRyeS0+cGF0dGVybiA9IHNhdmVkX3BhdHRlcm47CisJbGlzdF9hZGRfdGFpbCgmbmV3X2VudHJ5LT5saXN0LCAmdG9tb3lvX3BhdHRlcm5fbGlzdCk7CisJZXJyb3IgPSAwOworIG91dDoKKwl1cF93cml0ZSgmdG9tb3lvX3BhdHRlcm5fbGlzdF9sb2NrKTsKKwkvKioqKiogRVhDTFVTSVZFIFNFQ1RJT04gRU5EICoqKioqLworCXJldHVybiBlcnJvcjsKK30KKworLyoqCisgKiB0b21veW9fZ2V0X2ZpbGVfcGF0dGVybiAtIEdldCBwYXR0ZXJuZWQgcGF0aG5hbWUuCisgKgorICogQGZpbGVuYW1lOiBUaGUgZmlsZW5hbWUgdG8gZmluZCBwYXR0ZXJuZWQgcGF0aG5hbWUuCisgKgorICogUmV0dXJucyBwb2ludGVyIHRvIHBhdGhuYW1lIHBhdHRlcm4gaWYgbWF0Y2hlZCwgQGZpbGVuYW1lIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICoKK3RvbW95b19nZXRfZmlsZV9wYXR0ZXJuKGNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpmaWxlbmFtZSkKK3sKKwlzdHJ1Y3QgdG9tb3lvX3BhdHRlcm5fZW50cnkgKnB0cjsKKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqcGF0dGVybiA9IE5VTEw7CisKKwlkb3duX3JlYWQoJnRvbW95b19wYXR0ZXJuX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICZ0b21veW9fcGF0dGVybl9saXN0LCBsaXN0KSB7CisJCWlmIChwdHItPmlzX2RlbGV0ZWQpCisJCQljb250aW51ZTsKKwkJaWYgKCF0b21veW9fcGF0aF9tYXRjaGVzX3BhdHRlcm4oZmlsZW5hbWUsIHB0ci0+cGF0dGVybikpCisJCQljb250aW51ZTsKKwkJcGF0dGVybiA9IHB0ci0+cGF0dGVybjsKKwkJaWYgKHRvbW95b19zdHJlbmRzd2l0aChwYXR0ZXJuLT5uYW1lLCAiL1xcKiIpKSB7CisJCQkvKiBEbyBub3RoaW5nLiBUcnkgdG8gZmluZCB0aGUgYmV0dGVyIG1hdGNoLiAqLworCQl9IGVsc2UgeworCQkJLyogVGhpcyB3b3VsZCBiZSB0aGUgYmV0dGVyIG1hdGNoLiBVc2UgdGhpcy4gKi8KKwkJCWJyZWFrOworCQl9CisJfQorCXVwX3JlYWQoJnRvbW95b19wYXR0ZXJuX2xpc3RfbG9jayk7CisJaWYgKHBhdHRlcm4pCisJCWZpbGVuYW1lID0gcGF0dGVybjsKKwlyZXR1cm4gZmlsZW5hbWU7Cit9CisKKy8qKgorICogdG9tb3lvX3dyaXRlX3BhdHRlcm5fcG9saWN5IC0gV3JpdGUgInN0cnVjdCB0b21veW9fcGF0dGVybl9lbnRyeSIgbGlzdC4KKyAqCisgKiBAZGF0YTogICAgICBTdHJpbmcgdG8gcGFyc2UuCisgKiBAaXNfZGVsZXRlOiBUcnVlIGlmIGl0IGlzIGEgZGVsZXRlIHJlcXVlc3QuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqLworaW50IHRvbW95b193cml0ZV9wYXR0ZXJuX3BvbGljeShjaGFyICpkYXRhLCBjb25zdCBib29sIGlzX2RlbGV0ZSkKK3sKKwlyZXR1cm4gdG9tb3lvX3VwZGF0ZV9maWxlX3BhdHRlcm5fZW50cnkoZGF0YSwgaXNfZGVsZXRlKTsKK30KKworLyoqCisgKiB0b21veW9fcmVhZF9maWxlX3BhdHRlcm4gLSBSZWFkICJzdHJ1Y3QgdG9tb3lvX3BhdHRlcm5fZW50cnkiIGxpc3QuCisgKgorICogQGhlYWQ6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KKyAqCisgKiBSZXR1cm5zIHRydWUgb24gc3VjY2VzcywgZmFsc2Ugb3RoZXJ3aXNlLgorICovCitib29sIHRvbW95b19yZWFkX2ZpbGVfcGF0dGVybihzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwb3M7CisJYm9vbCBkb25lID0gdHJ1ZTsKKworCWRvd25fcmVhZCgmdG9tb3lvX3BhdHRlcm5fbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2Nvb2tpZShwb3MsIGhlYWQtPnJlYWRfdmFyMiwgJnRvbW95b19wYXR0ZXJuX2xpc3QpIHsKKwkJc3RydWN0IHRvbW95b19wYXR0ZXJuX2VudHJ5ICpwdHI7CisJCXB0ciA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgdG9tb3lvX3BhdHRlcm5fZW50cnksIGxpc3QpOworCQlpZiAocHRyLT5pc19kZWxldGVkKQorCQkJY29udGludWU7CisJCWlmICghdG9tb3lvX2lvX3ByaW50ZihoZWFkLCBUT01PWU9fS0VZV09SRF9GSUxFX1BBVFRFUk4gIiVzXG4iLAorCQkJCSAgICAgIHB0ci0+cGF0dGVybi0+bmFtZSkpIHsKKwkJCWRvbmUgPSBmYWxzZTsKKwkJCWJyZWFrOworCQl9CisJfQorCXVwX3JlYWQoJnRvbW95b19wYXR0ZXJuX2xpc3RfbG9jayk7CisJcmV0dXJuIGRvbmU7Cit9CisKKy8qIFRoZSBsaXN0IGZvciAic3RydWN0IHRvbW95b19ub19yZXdyaXRlX2VudHJ5Ii4gKi8KK3N0YXRpYyBMSVNUX0hFQUQodG9tb3lvX25vX3Jld3JpdGVfbGlzdCk7CitzdGF0aWMgREVDTEFSRV9SV1NFTSh0b21veW9fbm9fcmV3cml0ZV9saXN0X2xvY2spOworCisvKioKKyAqIHRvbW95b191cGRhdGVfbm9fcmV3cml0ZV9lbnRyeSAtIFVwZGF0ZSAic3RydWN0IHRvbW95b19ub19yZXdyaXRlX2VudHJ5IiBsaXN0LgorICoKKyAqIEBwYXR0ZXJuOiAgIFBhdGhuYW1lIHBhdHRlcm4gdGhhdCBhcmUgbm90IHJld3JpdGFibGUgYnkgZGVmYXVsdC4KKyAqIEBpc19kZWxldGU6IFRydWUgaWYgaXQgaXMgYSBkZWxldGUgcmVxdWVzdC4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IHRvbW95b191cGRhdGVfbm9fcmV3cml0ZV9lbnRyeShjb25zdCBjaGFyICpwYXR0ZXJuLAorCQkJCQkgIGNvbnN0IGJvb2wgaXNfZGVsZXRlKQoreworCXN0cnVjdCB0b21veW9fbm9fcmV3cml0ZV9lbnRyeSAqbmV3X2VudHJ5LCAqcHRyOworCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpzYXZlZF9wYXR0ZXJuOworCWludCBlcnJvciA9IC1FTk9NRU07CisKKwlpZiAoIXRvbW95b19pc19jb3JyZWN0X3BhdGgocGF0dGVybiwgMCwgMCwgMCwgX19mdW5jX18pKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlzYXZlZF9wYXR0ZXJuID0gdG9tb3lvX3NhdmVfbmFtZShwYXR0ZXJuKTsKKwlpZiAoIXNhdmVkX3BhdHRlcm4pCisJCXJldHVybiAtRU5PTUVNOworCS8qKioqKiBFWENMVVNJVkUgU0VDVElPTiBTVEFSVCAqKioqKi8KKwlkb3duX3dyaXRlKCZ0b21veW9fbm9fcmV3cml0ZV9saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkocHRyLCAmdG9tb3lvX25vX3Jld3JpdGVfbGlzdCwgbGlzdCkgeworCQlpZiAocHRyLT5wYXR0ZXJuICE9IHNhdmVkX3BhdHRlcm4pCisJCQljb250aW51ZTsKKwkJcHRyLT5pc19kZWxldGVkID0gaXNfZGVsZXRlOworCQllcnJvciA9IDA7CisJCWdvdG8gb3V0OworCX0KKwlpZiAoaXNfZGVsZXRlKSB7CisJCWVycm9yID0gLUVOT0VOVDsKKwkJZ290byBvdXQ7CisJfQorCW5ld19lbnRyeSA9IHRvbW95b19hbGxvY19lbGVtZW50KHNpemVvZigqbmV3X2VudHJ5KSk7CisJaWYgKCFuZXdfZW50cnkpCisJCWdvdG8gb3V0OworCW5ld19lbnRyeS0+cGF0dGVybiA9IHNhdmVkX3BhdHRlcm47CisJbGlzdF9hZGRfdGFpbCgmbmV3X2VudHJ5LT5saXN0LCAmdG9tb3lvX25vX3Jld3JpdGVfbGlzdCk7CisJZXJyb3IgPSAwOworIG91dDoKKwl1cF93cml0ZSgmdG9tb3lvX25vX3Jld3JpdGVfbGlzdF9sb2NrKTsKKwkvKioqKiogRVhDTFVTSVZFIFNFQ1RJT04gRU5EICoqKioqLworCXJldHVybiBlcnJvcjsKK30KKworLyoqCisgKiB0b21veW9faXNfbm9fcmV3cml0ZV9maWxlIC0gQ2hlY2sgaWYgdGhlIGdpdmVuIHBhdGhuYW1lIGlzIG5vdCBwZXJtaXR0ZWQgdG8gYmUgcmV3cml0ZWQuCisgKgorICogQGZpbGVuYW1lOiBGaWxlbmFtZSB0byBjaGVjay4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgQGZpbGVuYW1lIGlzIHNwZWNpZmllZCBieSAiZGVueV9yZXdyaXRlIiBkaXJlY3RpdmUsCisgKiBmYWxzZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBib29sIHRvbW95b19pc19ub19yZXdyaXRlX2ZpbGUoY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmZpbGVuYW1lKQoreworCXN0cnVjdCB0b21veW9fbm9fcmV3cml0ZV9lbnRyeSAqcHRyOworCWJvb2wgZm91bmQgPSBmYWxzZTsKKworCWRvd25fcmVhZCgmdG9tb3lvX25vX3Jld3JpdGVfbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ciwgJnRvbW95b19ub19yZXdyaXRlX2xpc3QsIGxpc3QpIHsKKwkJaWYgKHB0ci0+aXNfZGVsZXRlZCkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXRvbW95b19wYXRoX21hdGNoZXNfcGF0dGVybihmaWxlbmFtZSwgcHRyLT5wYXR0ZXJuKSkKKwkJCWNvbnRpbnVlOworCQlmb3VuZCA9IHRydWU7CisJCWJyZWFrOworCX0KKwl1cF9yZWFkKCZ0b21veW9fbm9fcmV3cml0ZV9saXN0X2xvY2spOworCXJldHVybiBmb3VuZDsKK30KKworLyoqCisgKiB0b21veW9fd3JpdGVfbm9fcmV3cml0ZV9wb2xpY3kgLSBXcml0ZSAic3RydWN0IHRvbW95b19ub19yZXdyaXRlX2VudHJ5IiBsaXN0LgorICoKKyAqIEBkYXRhOiAgICAgIFN0cmluZyB0byBwYXJzZS4KKyAqIEBpc19kZWxldGU6IFRydWUgaWYgaXQgaXMgYSBkZWxldGUgcmVxdWVzdC4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitpbnQgdG9tb3lvX3dyaXRlX25vX3Jld3JpdGVfcG9saWN5KGNoYXIgKmRhdGEsIGNvbnN0IGJvb2wgaXNfZGVsZXRlKQoreworCXJldHVybiB0b21veW9fdXBkYXRlX25vX3Jld3JpdGVfZW50cnkoZGF0YSwgaXNfZGVsZXRlKTsKK30KKworLyoqCisgKiB0b21veW9fcmVhZF9ub19yZXdyaXRlX3BvbGljeSAtIFJlYWQgInN0cnVjdCB0b21veW9fbm9fcmV3cml0ZV9lbnRyeSIgbGlzdC4KKyAqCisgKiBAaGVhZDogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19pb19idWZmZXIiLgorICoKKyAqIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK2Jvb2wgdG9tb3lvX3JlYWRfbm9fcmV3cml0ZV9wb2xpY3koc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqcG9zOworCWJvb2wgZG9uZSA9IHRydWU7CisKKwlkb3duX3JlYWQoJnRvbW95b19ub19yZXdyaXRlX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9jb29raWUocG9zLCBoZWFkLT5yZWFkX3ZhcjIsICZ0b21veW9fbm9fcmV3cml0ZV9saXN0KSB7CisJCXN0cnVjdCB0b21veW9fbm9fcmV3cml0ZV9lbnRyeSAqcHRyOworCQlwdHIgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IHRvbW95b19ub19yZXdyaXRlX2VudHJ5LCBsaXN0KTsKKwkJaWYgKHB0ci0+aXNfZGVsZXRlZCkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXRvbW95b19pb19wcmludGYoaGVhZCwgVE9NT1lPX0tFWVdPUkRfREVOWV9SRVdSSVRFICIlc1xuIiwKKwkJCQkgICAgICBwdHItPnBhdHRlcm4tPm5hbWUpKSB7CisJCQlkb25lID0gZmFsc2U7CisJCQlicmVhazsKKwkJfQorCX0KKwl1cF9yZWFkKCZ0b21veW9fbm9fcmV3cml0ZV9saXN0X2xvY2spOworCXJldHVybiBkb25lOworfQorCisvKioKKyAqIHRvbW95b191cGRhdGVfZmlsZV9hY2wgLSBVcGRhdGUgZmlsZSdzIHJlYWQvd3JpdGUvZXhlY3V0ZSBBQ0wuCisgKgorICogQGZpbGVuYW1lOiAgRmlsZW5hbWUuCisgKiBAcGVybTogICAgICBQZXJtaXNzaW9uIChiZXR3ZWVuIDEgdG8gNykuCisgKiBAZG9tYWluOiAgICBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIi4KKyAqIEBpc19kZWxldGU6IFRydWUgaWYgaXQgaXMgYSBkZWxldGUgcmVxdWVzdC4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICoKKyAqIFRoaXMgaXMgbGVnYWN5IHN1cHBvcnQgaW50ZXJmYWNlIGZvciBvbGRlciBwb2xpY3kgc3ludGF4LgorICogQ3VycmVudCBwb2xpY3kgc3ludGF4IHVzZXMgImFsbG93X3JlYWQvd3JpdGUiIGluc3RlYWQgb2YgIjYiLAorICogImFsbG93X3JlYWQiIGluc3RlYWQgb2YgIjQiLCAiYWxsb3dfd3JpdGUiIGluc3RlYWQgb2YgIjIiLAorICogImFsbG93X2V4ZWN1dGUiIGluc3RlYWQgb2YgIjEiLgorICovCitzdGF0aWMgaW50IHRvbW95b191cGRhdGVfZmlsZV9hY2woY29uc3QgY2hhciAqZmlsZW5hbWUsIHU4IHBlcm0sCisJCQkJICBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICogY29uc3QgZG9tYWluLAorCQkJCSAgY29uc3QgYm9vbCBpc19kZWxldGUpCit7CisJaWYgKHBlcm0gPiA3IHx8ICFwZXJtKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogSW52YWxpZCBwZXJtaXNzaW9uICclZCAlcydcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgcGVybSwgZmlsZW5hbWUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKGZpbGVuYW1lWzBdICE9ICdAJyAmJiB0b21veW9fc3RyZW5kc3dpdGgoZmlsZW5hbWUsICIvIikpCisJCS8qCisJCSAqIE9ubHkgJ2FsbG93X21rZGlyJyBhbmQgJ2FsbG93X3JtZGlyJyBhcmUgdmFsaWQgZm9yCisJCSAqIGRpcmVjdG9yeSBwZXJtaXNzaW9ucy4KKwkJICovCisJCXJldHVybiAwOworCWlmIChwZXJtICYgNCkKKwkJdG9tb3lvX3VwZGF0ZV9zaW5nbGVfcGF0aF9hY2woVE9NT1lPX1RZUEVfUkVBRF9BQ0wsIGZpbGVuYW1lLAorCQkJCQkgICAgICBkb21haW4sIGlzX2RlbGV0ZSk7CisJaWYgKHBlcm0gJiAyKQorCQl0b21veW9fdXBkYXRlX3NpbmdsZV9wYXRoX2FjbChUT01PWU9fVFlQRV9XUklURV9BQ0wsIGZpbGVuYW1lLAorCQkJCQkgICAgICBkb21haW4sIGlzX2RlbGV0ZSk7CisJaWYgKHBlcm0gJiAxKQorCQl0b21veW9fdXBkYXRlX3NpbmdsZV9wYXRoX2FjbChUT01PWU9fVFlQRV9FWEVDVVRFX0FDTCwKKwkJCQkJICAgICAgZmlsZW5hbWUsIGRvbWFpbiwgaXNfZGVsZXRlKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB0b21veW9fY2hlY2tfc2luZ2xlX3BhdGhfYWNsMiAtIENoZWNrIHBlcm1pc3Npb24gZm9yIHNpbmdsZSBwYXRoIG9wZXJhdGlvbi4KKyAqCisgKiBAZG9tYWluOiAgICAgICAgICBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIi4KKyAqIEBmaWxlbmFtZTogICAgICAgIEZpbGVuYW1lIHRvIGNoZWNrLgorICogQHBlcm06ICAgICAgICAgICAgUGVybWlzc2lvbi4KKyAqIEBtYXlfdXNlX3BhdHRlcm46IFRydWUgaWYgcGF0dGVybmVkIEFDTCBpcyBwZXJtaXR0ZWQuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC1FUEVSTSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX2NoZWNrX3NpbmdsZV9wYXRoX2FjbDIoY29uc3Qgc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqCisJCQkJCSBkb21haW4sCisJCQkJCSBjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqCisJCQkJCSBmaWxlbmFtZSwKKwkJCQkJIGNvbnN0IHUxNiBwZXJtLAorCQkJCQkgY29uc3QgYm9vbCBtYXlfdXNlX3BhdHRlcm4pCit7CisJc3RydWN0IHRvbW95b19hY2xfaW5mbyAqcHRyOworCWludCBlcnJvciA9IC1FUEVSTTsKKworCWRvd25fcmVhZCgmdG9tb3lvX2RvbWFpbl9hY2xfaW5mb19saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkocHRyLCAmZG9tYWluLT5hY2xfaW5mb19saXN0LCBsaXN0KSB7CisJCXN0cnVjdCB0b21veW9fc2luZ2xlX3BhdGhfYWNsX3JlY29yZCAqYWNsOworCQlpZiAodG9tb3lvX2FjbF90eXBlMihwdHIpICE9IFRPTU9ZT19UWVBFX1NJTkdMRV9QQVRIX0FDTCkKKwkJCWNvbnRpbnVlOworCQlhY2wgPSBjb250YWluZXJfb2YocHRyLCBzdHJ1Y3QgdG9tb3lvX3NpbmdsZV9wYXRoX2FjbF9yZWNvcmQsCisJCQkJICAgaGVhZCk7CisJCWlmICghKGFjbC0+cGVybSAmIHBlcm0pKQorCQkJY29udGludWU7CisJCWlmIChtYXlfdXNlX3BhdHRlcm4gfHwgIWFjbC0+ZmlsZW5hbWUtPmlzX3BhdHRlcm5lZCkgeworCQkJaWYgKCF0b21veW9fcGF0aF9tYXRjaGVzX3BhdHRlcm4oZmlsZW5hbWUsCisJCQkJCQkJIGFjbC0+ZmlsZW5hbWUpKQorCQkJCWNvbnRpbnVlOworCQl9IGVsc2UgeworCQkJY29udGludWU7CisJCX0KKwkJZXJyb3IgPSAwOworCQlicmVhazsKKwl9CisJdXBfcmVhZCgmdG9tb3lvX2RvbWFpbl9hY2xfaW5mb19saXN0X2xvY2spOworCXJldHVybiBlcnJvcjsKK30KKworLyoqCisgKiB0b21veW9fY2hlY2tfZmlsZV9hY2wgLSBDaGVjayBwZXJtaXNzaW9uIGZvciBvcGVuaW5nIGZpbGVzLgorICoKKyAqIEBkb21haW46ICAgIFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iLgorICogQGZpbGVuYW1lOiAgRmlsZW5hbWUgdG8gY2hlY2suCisgKiBAb3BlcmF0aW9uOiBNb2RlICgicmVhZCIgb3IgIndyaXRlIiBvciAicmVhZC93cml0ZSIgb3IgImV4ZWN1dGUiKS4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLUVQRVJNIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCB0b21veW9fY2hlY2tfZmlsZV9hY2woY29uc3Qgc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluLAorCQkJCSBjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqZmlsZW5hbWUsCisJCQkJIGNvbnN0IHU4IG9wZXJhdGlvbikKK3sKKwl1MTYgcGVybSA9IDA7CisKKwlpZiAoIXRvbW95b19jaGVja19mbGFncyhkb21haW4sIFRPTU9ZT19NQUNfRk9SX0ZJTEUpKQorCQlyZXR1cm4gMDsKKwlpZiAob3BlcmF0aW9uID09IDYpCisJCXBlcm0gPSAxIDw8IFRPTU9ZT19UWVBFX1JFQURfV1JJVEVfQUNMOworCWVsc2UgaWYgKG9wZXJhdGlvbiA9PSA0KQorCQlwZXJtID0gMSA8PCBUT01PWU9fVFlQRV9SRUFEX0FDTDsKKwllbHNlIGlmIChvcGVyYXRpb24gPT0gMikKKwkJcGVybSA9IDEgPDwgVE9NT1lPX1RZUEVfV1JJVEVfQUNMOworCWVsc2UgaWYgKG9wZXJhdGlvbiA9PSAxKQorCQlwZXJtID0gMSA8PCBUT01PWU9fVFlQRV9FWEVDVVRFX0FDTDsKKwllbHNlCisJCUJVRygpOworCXJldHVybiB0b21veW9fY2hlY2tfc2luZ2xlX3BhdGhfYWNsMihkb21haW4sIGZpbGVuYW1lLCBwZXJtLAorCQkJCQkgICAgIG9wZXJhdGlvbiAhPSAxKTsKK30KKworLyoqCisgKiB0b21veW9fY2hlY2tfZmlsZV9wZXJtMiAtIENoZWNrIHBlcm1pc3Npb24gZm9yIG9wZW5pbmcgZmlsZXMuCisgKgorICogQGRvbWFpbjogICAgUG9pbnRlciB0byAic3RydWN0IHRvbW95b19kb21haW5faW5mbyIuCisgKiBAZmlsZW5hbWU6ICBGaWxlbmFtZSB0byBjaGVjay4KKyAqIEBwZXJtOiAgICAgIE1vZGUgKCJyZWFkIiBvciAid3JpdGUiIG9yICJyZWFkL3dyaXRlIiBvciAiZXhlY3V0ZSIpLgorICogQG9wZXJhdGlvbjogT3BlcmF0aW9uIG5hbWUgcGFzc2VkIHVzZWQgZm9yIHZlcmJvc2UgbW9kZS4KKyAqIEBtb2RlOiAgICAgIEFjY2VzcyBjb250cm9sIG1vZGUuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCB0b21veW9fY2hlY2tfZmlsZV9wZXJtMihzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICogY29uc3QgZG9tYWluLAorCQkJCSAgIGNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpmaWxlbmFtZSwKKwkJCQkgICBjb25zdCB1OCBwZXJtLCBjb25zdCBjaGFyICpvcGVyYXRpb24sCisJCQkJICAgY29uc3QgdTggbW9kZSkKK3sKKwljb25zdCBib29sIGlzX2VuZm9yY2UgPSAobW9kZSA9PSAzKTsKKwljb25zdCBjaGFyICptc2cgPSAiPHVua25vd24+IjsKKwlpbnQgZXJyb3IgPSAwOworCisJaWYgKCFmaWxlbmFtZSkKKwkJcmV0dXJuIDA7CisJZXJyb3IgPSB0b21veW9fY2hlY2tfZmlsZV9hY2woZG9tYWluLCBmaWxlbmFtZSwgcGVybSk7CisJaWYgKGVycm9yICYmIHBlcm0gPT0gNCAmJgorCSAgICAoZG9tYWluLT5mbGFncyAmIFRPTU9ZT19ET01BSU5fRkxBR1NfSUdOT1JFX0dMT0JBTF9BTExPV19SRUFEKSA9PSAwCisJICAgICYmIHRvbW95b19pc19nbG9iYWxseV9yZWFkYWJsZV9maWxlKGZpbGVuYW1lKSkKKwkJZXJyb3IgPSAwOworCWlmIChwZXJtID09IDYpCisJCW1zZyA9IHRvbW95b19zcDJrZXl3b3JkKFRPTU9ZT19UWVBFX1JFQURfV1JJVEVfQUNMKTsKKwllbHNlIGlmIChwZXJtID09IDQpCisJCW1zZyA9IHRvbW95b19zcDJrZXl3b3JkKFRPTU9ZT19UWVBFX1JFQURfQUNMKTsKKwllbHNlIGlmIChwZXJtID09IDIpCisJCW1zZyA9IHRvbW95b19zcDJrZXl3b3JkKFRPTU9ZT19UWVBFX1dSSVRFX0FDTCk7CisJZWxzZSBpZiAocGVybSA9PSAxKQorCQltc2cgPSB0b21veW9fc3Aya2V5d29yZChUT01PWU9fVFlQRV9FWEVDVVRFX0FDTCk7CisJZWxzZQorCQlCVUcoKTsKKwlpZiAoIWVycm9yKQorCQlyZXR1cm4gMDsKKwlpZiAodG9tb3lvX3ZlcmJvc2VfbW9kZShkb21haW4pKQorCQlwcmludGsoS0VSTl9XQVJOSU5HICJUT01PWU8tJXM6IEFjY2VzcyAnJXMoJXMpICVzJyBkZW5pZWQgIgorCQkgICAgICAgImZvciAlc1xuIiwgdG9tb3lvX2dldF9tc2coaXNfZW5mb3JjZSksIG1zZywgb3BlcmF0aW9uLAorCQkgICAgICAgZmlsZW5hbWUtPm5hbWUsIHRvbW95b19nZXRfbGFzdF9uYW1lKGRvbWFpbikpOworCWlmIChpc19lbmZvcmNlKQorCQlyZXR1cm4gZXJyb3I7CisJaWYgKG1vZGUgPT0gMSAmJiB0b21veW9fZG9tYWluX3F1b3RhX2lzX29rKGRvbWFpbikpIHsKKwkJLyogRG9uJ3QgdXNlIHBhdHRlcm5zIGZvciBleGVjdXRlIHBlcm1pc3Npb24uICovCisJCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpwYXR0ZXJuZWRfZmlsZSA9IChwZXJtICE9IDEpID8KKwkJCXRvbW95b19nZXRfZmlsZV9wYXR0ZXJuKGZpbGVuYW1lKSA6IGZpbGVuYW1lOworCQl0b21veW9fdXBkYXRlX2ZpbGVfYWNsKHBhdHRlcm5lZF9maWxlLT5uYW1lLCBwZXJtLAorCQkJCSAgICAgICBkb21haW4sIGZhbHNlKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdG9tb3lvX3dyaXRlX2ZpbGVfcG9saWN5IC0gVXBkYXRlIGZpbGUgcmVsYXRlZCBsaXN0LgorICoKKyAqIEBkYXRhOiAgICAgIFN0cmluZyB0byBwYXJzZS4KKyAqIEBkb21haW46ICAgIFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iLgorICogQGlzX2RlbGV0ZTogVHJ1ZSBpZiBpdCBpcyBhIGRlbGV0ZSByZXF1ZXN0LgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK2ludCB0b21veW9fd3JpdGVfZmlsZV9wb2xpY3koY2hhciAqZGF0YSwgc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluLAorCQkJICAgICBjb25zdCBib29sIGlzX2RlbGV0ZSkKK3sKKwljaGFyICpmaWxlbmFtZSA9IHN0cmNocihkYXRhLCAnICcpOworCWNoYXIgKmZpbGVuYW1lMjsKKwl1bnNpZ25lZCBpbnQgcGVybTsKKwl1OCB0eXBlOworCisJaWYgKCFmaWxlbmFtZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJKmZpbGVuYW1lKysgPSAnXDAnOworCWlmIChzc2NhbmYoZGF0YSwgIiV1IiwgJnBlcm0pID09IDEpCisJCXJldHVybiB0b21veW9fdXBkYXRlX2ZpbGVfYWNsKGZpbGVuYW1lLCAodTgpIHBlcm0sIGRvbWFpbiwKKwkJCQkJICAgICAgaXNfZGVsZXRlKTsKKwlpZiAoc3RybmNtcChkYXRhLCAiYWxsb3dfIiwgNikpCisJCWdvdG8gb3V0OworCWRhdGEgKz0gNjsKKwlmb3IgKHR5cGUgPSAwOyB0eXBlIDwgVE9NT1lPX01BWF9TSU5HTEVfUEFUSF9PUEVSQVRJT047IHR5cGUrKykgeworCQlpZiAoc3RyY21wKGRhdGEsIHRvbW95b19zcF9rZXl3b3JkW3R5cGVdKSkKKwkJCWNvbnRpbnVlOworCQlyZXR1cm4gdG9tb3lvX3VwZGF0ZV9zaW5nbGVfcGF0aF9hY2wodHlwZSwgZmlsZW5hbWUsCisJCQkJCQkgICAgIGRvbWFpbiwgaXNfZGVsZXRlKTsKKwl9CisJZmlsZW5hbWUyID0gc3RyY2hyKGZpbGVuYW1lLCAnICcpOworCWlmICghZmlsZW5hbWUyKQorCQlnb3RvIG91dDsKKwkqZmlsZW5hbWUyKysgPSAnXDAnOworCWZvciAodHlwZSA9IDA7IHR5cGUgPCBUT01PWU9fTUFYX0RPVUJMRV9QQVRIX09QRVJBVElPTjsgdHlwZSsrKSB7CisJCWlmIChzdHJjbXAoZGF0YSwgdG9tb3lvX2RwX2tleXdvcmRbdHlwZV0pKQorCQkJY29udGludWU7CisJCXJldHVybiB0b21veW9fdXBkYXRlX2RvdWJsZV9wYXRoX2FjbCh0eXBlLCBmaWxlbmFtZSwgZmlsZW5hbWUyLAorCQkJCQkJICAgICBkb21haW4sIGlzX2RlbGV0ZSk7CisJfQorIG91dDoKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworLyoqCisgKiB0b21veW9fdXBkYXRlX3NpbmdsZV9wYXRoX2FjbCAtIFVwZGF0ZSAic3RydWN0IHRvbW95b19zaW5nbGVfcGF0aF9hY2xfcmVjb3JkIiBsaXN0LgorICoKKyAqIEB0eXBlOiAgICAgIFR5cGUgb2Ygb3BlcmF0aW9uLgorICogQGZpbGVuYW1lOiAgRmlsZW5hbWUuCisgKiBAZG9tYWluOiAgICBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIi4KKyAqIEBpc19kZWxldGU6IFRydWUgaWYgaXQgaXMgYSBkZWxldGUgcmVxdWVzdC4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IHRvbW95b191cGRhdGVfc2luZ2xlX3BhdGhfYWNsKGNvbnN0IHU4IHR5cGUsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAorCQkJCQkgc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqCisJCQkJCSBjb25zdCBkb21haW4sIGNvbnN0IGJvb2wgaXNfZGVsZXRlKQoreworCXN0YXRpYyBjb25zdCB1MTYgcndfbWFzayA9CisJCSgxIDw8IFRPTU9ZT19UWVBFX1JFQURfQUNMKSB8ICgxIDw8IFRPTU9ZT19UWVBFX1dSSVRFX0FDTCk7CisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnNhdmVkX2ZpbGVuYW1lOworCXN0cnVjdCB0b21veW9fYWNsX2luZm8gKnB0cjsKKwlzdHJ1Y3QgdG9tb3lvX3NpbmdsZV9wYXRoX2FjbF9yZWNvcmQgKmFjbDsKKwlpbnQgZXJyb3IgPSAtRU5PTUVNOworCWNvbnN0IHUxNiBwZXJtID0gMSA8PCB0eXBlOworCisJaWYgKCFkb21haW4pCisJCXJldHVybiAtRUlOVkFMOworCWlmICghdG9tb3lvX2lzX2NvcnJlY3RfcGF0aChmaWxlbmFtZSwgMCwgMCwgMCwgX19mdW5jX18pKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlzYXZlZF9maWxlbmFtZSA9IHRvbW95b19zYXZlX25hbWUoZmlsZW5hbWUpOworCWlmICghc2F2ZWRfZmlsZW5hbWUpCisJCXJldHVybiAtRU5PTUVNOworCS8qKioqKiBFWENMVVNJVkUgU0VDVElPTiBTVEFSVCAqKioqKi8KKwlkb3duX3dyaXRlKCZ0b21veW9fZG9tYWluX2FjbF9pbmZvX2xpc3RfbG9jayk7CisJaWYgKGlzX2RlbGV0ZSkKKwkJZ290byBkZWxldGU7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICZkb21haW4tPmFjbF9pbmZvX2xpc3QsIGxpc3QpIHsKKwkJaWYgKHRvbW95b19hY2xfdHlwZTEocHRyKSAhPSBUT01PWU9fVFlQRV9TSU5HTEVfUEFUSF9BQ0wpCisJCQljb250aW51ZTsKKwkJYWNsID0gY29udGFpbmVyX29mKHB0ciwgc3RydWN0IHRvbW95b19zaW5nbGVfcGF0aF9hY2xfcmVjb3JkLAorCQkJCSAgIGhlYWQpOworCQlpZiAoYWNsLT5maWxlbmFtZSAhPSBzYXZlZF9maWxlbmFtZSkKKwkJCWNvbnRpbnVlOworCQkvKiBTcGVjaWFsIGNhc2UuIENsZWFyIGFsbCBiaXRzIGlmIG1hcmtlZCBhcyBkZWxldGVkLiAqLworCQlpZiAocHRyLT50eXBlICYgVE9NT1lPX0FDTF9ERUxFVEVEKQorCQkJYWNsLT5wZXJtID0gMDsKKwkJYWNsLT5wZXJtIHw9IHBlcm07CisJCWlmICgoYWNsLT5wZXJtICYgcndfbWFzaykgPT0gcndfbWFzaykKKwkJCWFjbC0+cGVybSB8PSAxIDw8IFRPTU9ZT19UWVBFX1JFQURfV1JJVEVfQUNMOworCQllbHNlIGlmIChhY2wtPnBlcm0gJiAoMSA8PCBUT01PWU9fVFlQRV9SRUFEX1dSSVRFX0FDTCkpCisJCQlhY2wtPnBlcm0gfD0gcndfbWFzazsKKwkJcHRyLT50eXBlICY9IH5UT01PWU9fQUNMX0RFTEVURUQ7CisJCWVycm9yID0gMDsKKwkJZ290byBvdXQ7CisJfQorCS8qIE5vdCBmb3VuZC4gQXBwZW5kIGl0IHRvIHRoZSB0YWlsLiAqLworCWFjbCA9IHRvbW95b19hbGxvY19hY2xfZWxlbWVudChUT01PWU9fVFlQRV9TSU5HTEVfUEFUSF9BQ0wpOworCWlmICghYWNsKQorCQlnb3RvIG91dDsKKwlhY2wtPnBlcm0gPSBwZXJtOworCWlmIChwZXJtID09ICgxIDw8IFRPTU9ZT19UWVBFX1JFQURfV1JJVEVfQUNMKSkKKwkJYWNsLT5wZXJtIHw9IHJ3X21hc2s7CisJYWNsLT5maWxlbmFtZSA9IHNhdmVkX2ZpbGVuYW1lOworCWxpc3RfYWRkX3RhaWwoJmFjbC0+aGVhZC5saXN0LCAmZG9tYWluLT5hY2xfaW5mb19saXN0KTsKKwllcnJvciA9IDA7CisJZ290byBvdXQ7CisgZGVsZXRlOgorCWVycm9yID0gLUVOT0VOVDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ciwgJmRvbWFpbi0+YWNsX2luZm9fbGlzdCwgbGlzdCkgeworCQlpZiAodG9tb3lvX2FjbF90eXBlMihwdHIpICE9IFRPTU9ZT19UWVBFX1NJTkdMRV9QQVRIX0FDTCkKKwkJCWNvbnRpbnVlOworCQlhY2wgPSBjb250YWluZXJfb2YocHRyLCBzdHJ1Y3QgdG9tb3lvX3NpbmdsZV9wYXRoX2FjbF9yZWNvcmQsCisJCQkJICAgaGVhZCk7CisJCWlmIChhY2wtPmZpbGVuYW1lICE9IHNhdmVkX2ZpbGVuYW1lKQorCQkJY29udGludWU7CisJCWFjbC0+cGVybSAmPSB+cGVybTsKKwkJaWYgKChhY2wtPnBlcm0gJiByd19tYXNrKSAhPSByd19tYXNrKQorCQkJYWNsLT5wZXJtICY9IH4oMSA8PCBUT01PWU9fVFlQRV9SRUFEX1dSSVRFX0FDTCk7CisJCWVsc2UgaWYgKCEoYWNsLT5wZXJtICYgKDEgPDwgVE9NT1lPX1RZUEVfUkVBRF9XUklURV9BQ0wpKSkKKwkJCWFjbC0+cGVybSAmPSB+cndfbWFzazsKKwkJaWYgKCFhY2wtPnBlcm0pCisJCQlwdHItPnR5cGUgfD0gVE9NT1lPX0FDTF9ERUxFVEVEOworCQllcnJvciA9IDA7CisJCWJyZWFrOworCX0KKyBvdXQ6CisJdXBfd3JpdGUoJnRvbW95b19kb21haW5fYWNsX2luZm9fbGlzdF9sb2NrKTsKKwkvKioqKiogRVhDTFVTSVZFIFNFQ1RJT04gRU5EICoqKioqLworCXJldHVybiBlcnJvcjsKK30KKworLyoqCisgKiB0b21veW9fdXBkYXRlX2RvdWJsZV9wYXRoX2FjbCAtIFVwZGF0ZSAic3RydWN0IHRvbW95b19kb3VibGVfcGF0aF9hY2xfcmVjb3JkIiBsaXN0LgorICoKKyAqIEB0eXBlOiAgICAgIFR5cGUgb2Ygb3BlcmF0aW9uLgorICogQGZpbGVuYW1lMTogRmlyc3QgZmlsZW5hbWUuCisgKiBAZmlsZW5hbWUyOiBTZWNvbmQgZmlsZW5hbWUuCisgKiBAZG9tYWluOiAgICBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIi4KKyAqIEBpc19kZWxldGU6IFRydWUgaWYgaXQgaXMgYSBkZWxldGUgcmVxdWVzdC4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IHRvbW95b191cGRhdGVfZG91YmxlX3BhdGhfYWNsKGNvbnN0IHU4IHR5cGUsIGNvbnN0IGNoYXIgKmZpbGVuYW1lMSwKKwkJCQkJIGNvbnN0IGNoYXIgKmZpbGVuYW1lMiwKKwkJCQkJIHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKgorCQkJCQkgY29uc3QgZG9tYWluLCBjb25zdCBib29sIGlzX2RlbGV0ZSkKK3sKKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqc2F2ZWRfZmlsZW5hbWUxOworCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpzYXZlZF9maWxlbmFtZTI7CisJc3RydWN0IHRvbW95b19hY2xfaW5mbyAqcHRyOworCXN0cnVjdCB0b21veW9fZG91YmxlX3BhdGhfYWNsX3JlY29yZCAqYWNsOworCWludCBlcnJvciA9IC1FTk9NRU07CisJY29uc3QgdTggcGVybSA9IDEgPDwgdHlwZTsKKworCWlmICghZG9tYWluKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIXRvbW95b19pc19jb3JyZWN0X3BhdGgoZmlsZW5hbWUxLCAwLCAwLCAwLCBfX2Z1bmNfXykgfHwKKwkgICAgIXRvbW95b19pc19jb3JyZWN0X3BhdGgoZmlsZW5hbWUyLCAwLCAwLCAwLCBfX2Z1bmNfXykpCisJCXJldHVybiAtRUlOVkFMOworCXNhdmVkX2ZpbGVuYW1lMSA9IHRvbW95b19zYXZlX25hbWUoZmlsZW5hbWUxKTsKKwlzYXZlZF9maWxlbmFtZTIgPSB0b21veW9fc2F2ZV9uYW1lKGZpbGVuYW1lMik7CisJaWYgKCFzYXZlZF9maWxlbmFtZTEgfHwgIXNhdmVkX2ZpbGVuYW1lMikKKwkJcmV0dXJuIC1FTk9NRU07CisJLyoqKioqIEVYQ0xVU0lWRSBTRUNUSU9OIFNUQVJUICoqKioqLworCWRvd25fd3JpdGUoJnRvbW95b19kb21haW5fYWNsX2luZm9fbGlzdF9sb2NrKTsKKwlpZiAoaXNfZGVsZXRlKQorCQlnb3RvIGRlbGV0ZTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ciwgJmRvbWFpbi0+YWNsX2luZm9fbGlzdCwgbGlzdCkgeworCQlpZiAodG9tb3lvX2FjbF90eXBlMShwdHIpICE9IFRPTU9ZT19UWVBFX0RPVUJMRV9QQVRIX0FDTCkKKwkJCWNvbnRpbnVlOworCQlhY2wgPSBjb250YWluZXJfb2YocHRyLCBzdHJ1Y3QgdG9tb3lvX2RvdWJsZV9wYXRoX2FjbF9yZWNvcmQsCisJCQkJICAgaGVhZCk7CisJCWlmIChhY2wtPmZpbGVuYW1lMSAhPSBzYXZlZF9maWxlbmFtZTEgfHwKKwkJICAgIGFjbC0+ZmlsZW5hbWUyICE9IHNhdmVkX2ZpbGVuYW1lMikKKwkJCWNvbnRpbnVlOworCQkvKiBTcGVjaWFsIGNhc2UuIENsZWFyIGFsbCBiaXRzIGlmIG1hcmtlZCBhcyBkZWxldGVkLiAqLworCQlpZiAocHRyLT50eXBlICYgVE9NT1lPX0FDTF9ERUxFVEVEKQorCQkJYWNsLT5wZXJtID0gMDsKKwkJYWNsLT5wZXJtIHw9IHBlcm07CisJCXB0ci0+dHlwZSAmPSB+VE9NT1lPX0FDTF9ERUxFVEVEOworCQllcnJvciA9IDA7CisJCWdvdG8gb3V0OworCX0KKwkvKiBOb3QgZm91bmQuIEFwcGVuZCBpdCB0byB0aGUgdGFpbC4gKi8KKwlhY2wgPSB0b21veW9fYWxsb2NfYWNsX2VsZW1lbnQoVE9NT1lPX1RZUEVfRE9VQkxFX1BBVEhfQUNMKTsKKwlpZiAoIWFjbCkKKwkJZ290byBvdXQ7CisJYWNsLT5wZXJtID0gcGVybTsKKwlhY2wtPmZpbGVuYW1lMSA9IHNhdmVkX2ZpbGVuYW1lMTsKKwlhY2wtPmZpbGVuYW1lMiA9IHNhdmVkX2ZpbGVuYW1lMjsKKwlsaXN0X2FkZF90YWlsKCZhY2wtPmhlYWQubGlzdCwgJmRvbWFpbi0+YWNsX2luZm9fbGlzdCk7CisJZXJyb3IgPSAwOworCWdvdG8gb3V0OworIGRlbGV0ZToKKwllcnJvciA9IC1FTk9FTlQ7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICZkb21haW4tPmFjbF9pbmZvX2xpc3QsIGxpc3QpIHsKKwkJaWYgKHRvbW95b19hY2xfdHlwZTIocHRyKSAhPSBUT01PWU9fVFlQRV9ET1VCTEVfUEFUSF9BQ0wpCisJCQljb250aW51ZTsKKwkJYWNsID0gY29udGFpbmVyX29mKHB0ciwgc3RydWN0IHRvbW95b19kb3VibGVfcGF0aF9hY2xfcmVjb3JkLAorCQkJCSAgIGhlYWQpOworCQlpZiAoYWNsLT5maWxlbmFtZTEgIT0gc2F2ZWRfZmlsZW5hbWUxIHx8CisJCSAgICBhY2wtPmZpbGVuYW1lMiAhPSBzYXZlZF9maWxlbmFtZTIpCisJCQljb250aW51ZTsKKwkJYWNsLT5wZXJtICY9IH5wZXJtOworCQlpZiAoIWFjbC0+cGVybSkKKwkJCXB0ci0+dHlwZSB8PSBUT01PWU9fQUNMX0RFTEVURUQ7CisJCWVycm9yID0gMDsKKwkJYnJlYWs7CisJfQorIG91dDoKKwl1cF93cml0ZSgmdG9tb3lvX2RvbWFpbl9hY2xfaW5mb19saXN0X2xvY2spOworCS8qKioqKiBFWENMVVNJVkUgU0VDVElPTiBFTkQgKioqKiovCisJcmV0dXJuIGVycm9yOworfQorCisvKioKKyAqIHRvbW95b19jaGVja19zaW5nbGVfcGF0aF9hY2wgLSBDaGVjayBwZXJtaXNzaW9uIGZvciBzaW5nbGUgcGF0aCBvcGVyYXRpb24uCisgKgorICogQGRvbWFpbjogICBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIi4KKyAqIEB0eXBlOiAgICAgVHlwZSBvZiBvcGVyYXRpb24uCisgKiBAZmlsZW5hbWU6IEZpbGVuYW1lIHRvIGNoZWNrLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX2NoZWNrX3NpbmdsZV9wYXRoX2FjbChzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4sCisJCQkJCWNvbnN0IHU4IHR5cGUsCisJCQkJCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpmaWxlbmFtZSkKK3sKKwlpZiAoIXRvbW95b19jaGVja19mbGFncyhkb21haW4sIFRPTU9ZT19NQUNfRk9SX0ZJTEUpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gdG9tb3lvX2NoZWNrX3NpbmdsZV9wYXRoX2FjbDIoZG9tYWluLCBmaWxlbmFtZSwgMSA8PCB0eXBlLCAxKTsKK30KKworLyoqCisgKiB0b21veW9fY2hlY2tfZG91YmxlX3BhdGhfYWNsIC0gQ2hlY2sgcGVybWlzc2lvbiBmb3IgZG91YmxlIHBhdGggb3BlcmF0aW9uLgorICoKKyAqIEBkb21haW46ICAgIFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iLgorICogQHR5cGU6ICAgICAgVHlwZSBvZiBvcGVyYXRpb24uCisgKiBAZmlsZW5hbWUxOiBGaXJzdCBmaWxlbmFtZSB0byBjaGVjay4KKyAqIEBmaWxlbmFtZTI6IFNlY29uZCBmaWxlbmFtZSB0byBjaGVjay4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLUVQRVJNIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCB0b21veW9fY2hlY2tfZG91YmxlX3BhdGhfYWNsKGNvbnN0IHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiwKKwkJCQkJY29uc3QgdTggdHlwZSwKKwkJCQkJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKgorCQkJCQlmaWxlbmFtZTEsCisJCQkJCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICoKKwkJCQkJZmlsZW5hbWUyKQoreworCXN0cnVjdCB0b21veW9fYWNsX2luZm8gKnB0cjsKKwljb25zdCB1OCBwZXJtID0gMSA8PCB0eXBlOworCWludCBlcnJvciA9IC1FUEVSTTsKKworCWlmICghdG9tb3lvX2NoZWNrX2ZsYWdzKGRvbWFpbiwgVE9NT1lPX01BQ19GT1JfRklMRSkpCisJCXJldHVybiAwOworCWRvd25fcmVhZCgmdG9tb3lvX2RvbWFpbl9hY2xfaW5mb19saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkocHRyLCAmZG9tYWluLT5hY2xfaW5mb19saXN0LCBsaXN0KSB7CisJCXN0cnVjdCB0b21veW9fZG91YmxlX3BhdGhfYWNsX3JlY29yZCAqYWNsOworCQlpZiAodG9tb3lvX2FjbF90eXBlMihwdHIpICE9IFRPTU9ZT19UWVBFX0RPVUJMRV9QQVRIX0FDTCkKKwkJCWNvbnRpbnVlOworCQlhY2wgPSBjb250YWluZXJfb2YocHRyLCBzdHJ1Y3QgdG9tb3lvX2RvdWJsZV9wYXRoX2FjbF9yZWNvcmQsCisJCQkJICAgaGVhZCk7CisJCWlmICghKGFjbC0+cGVybSAmIHBlcm0pKQorCQkJY29udGludWU7CisJCWlmICghdG9tb3lvX3BhdGhfbWF0Y2hlc19wYXR0ZXJuKGZpbGVuYW1lMSwgYWNsLT5maWxlbmFtZTEpKQorCQkJY29udGludWU7CisJCWlmICghdG9tb3lvX3BhdGhfbWF0Y2hlc19wYXR0ZXJuKGZpbGVuYW1lMiwgYWNsLT5maWxlbmFtZTIpKQorCQkJY29udGludWU7CisJCWVycm9yID0gMDsKKwkJYnJlYWs7CisJfQorCXVwX3JlYWQoJnRvbW95b19kb21haW5fYWNsX2luZm9fbGlzdF9sb2NrKTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qKgorICogdG9tb3lvX2NoZWNrX3NpbmdsZV9wYXRoX3Blcm1pc3Npb24yIC0gQ2hlY2sgcGVybWlzc2lvbiBmb3Igc2luZ2xlIHBhdGggb3BlcmF0aW9uLgorICoKKyAqIEBkb21haW46ICAgIFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iLgorICogQG9wZXJhdGlvbjogVHlwZSBvZiBvcGVyYXRpb24uCisgKiBAZmlsZW5hbWU6ICBGaWxlbmFtZSB0byBjaGVjay4KKyAqIEBtb2RlOiAgICAgIEFjY2VzcyBjb250cm9sIG1vZGUuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCB0b21veW9fY2hlY2tfc2luZ2xlX3BhdGhfcGVybWlzc2lvbjIoc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqCisJCQkJCQljb25zdCBkb21haW4sIHU4IG9wZXJhdGlvbiwKKwkJCQkJCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICoKKwkJCQkJCWZpbGVuYW1lLCBjb25zdCB1OCBtb2RlKQoreworCWNvbnN0IGNoYXIgKm1zZzsKKwlpbnQgZXJyb3I7CisJY29uc3QgYm9vbCBpc19lbmZvcmNlID0gKG1vZGUgPT0gMyk7CisKKwlpZiAoIW1vZGUpCisJCXJldHVybiAwOworIG5leHQ6CisJZXJyb3IgPSB0b21veW9fY2hlY2tfc2luZ2xlX3BhdGhfYWNsKGRvbWFpbiwgb3BlcmF0aW9uLCBmaWxlbmFtZSk7CisJbXNnID0gdG9tb3lvX3NwMmtleXdvcmQob3BlcmF0aW9uKTsKKwlpZiAoIWVycm9yKQorCQlnb3RvIG9rOworCWlmICh0b21veW9fdmVyYm9zZV9tb2RlKGRvbWFpbikpCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlRPTU9ZTy0lczogQWNjZXNzICclcyAlcycgZGVuaWVkIGZvciAlc1xuIiwKKwkJICAgICAgIHRvbW95b19nZXRfbXNnKGlzX2VuZm9yY2UpLCBtc2csIGZpbGVuYW1lLT5uYW1lLAorCQkgICAgICAgdG9tb3lvX2dldF9sYXN0X25hbWUoZG9tYWluKSk7CisJaWYgKG1vZGUgPT0gMSAmJiB0b21veW9fZG9tYWluX3F1b3RhX2lzX29rKGRvbWFpbikpIHsKKwkJY29uc3QgY2hhciAqbmFtZSA9IHRvbW95b19nZXRfZmlsZV9wYXR0ZXJuKGZpbGVuYW1lKS0+bmFtZTsKKwkJdG9tb3lvX3VwZGF0ZV9zaW5nbGVfcGF0aF9hY2wob3BlcmF0aW9uLCBuYW1lLCBkb21haW4sIGZhbHNlKTsKKwl9CisJaWYgKCFpc19lbmZvcmNlKQorCQllcnJvciA9IDA7Cisgb2s6CisJLyoKKwkgKiBTaW5jZSAiYWxsb3dfdHJ1bmNhdGUiIGRvZXNuJ3QgaW1wbHkgImFsbG93X3Jld3JpdGUiIHBlcm1pc3Npb24sCisJICogd2UgbmVlZCB0byBjaGVjayAiYWxsb3dfcmV3cml0ZSIgcGVybWlzc2lvbiBpZiB0aGUgZmlsZW5hbWUgaXMKKwkgKiBzcGVjaWZpZWQgYnkgImRlbnlfcmV3cml0ZSIga2V5d29yZC4KKwkgKi8KKwlpZiAoIWVycm9yICYmIG9wZXJhdGlvbiA9PSBUT01PWU9fVFlQRV9UUlVOQ0FURV9BQ0wgJiYKKwkgICAgdG9tb3lvX2lzX25vX3Jld3JpdGVfZmlsZShmaWxlbmFtZSkpIHsKKwkJb3BlcmF0aW9uID0gVE9NT1lPX1RZUEVfUkVXUklURV9BQ0w7CisJCWdvdG8gbmV4dDsKKwl9CisJcmV0dXJuIGVycm9yOworfQorCisvKioKKyAqIHRvbW95b19jaGVja19maWxlX3Blcm0gLSBDaGVjayBwZXJtaXNzaW9uIGZvciBzeXNjdGwoKSdzICJyZWFkIiBhbmQgIndyaXRlIi4KKyAqCisgKiBAZG9tYWluOiAgICBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIi4KKyAqIEBmaWxlbmFtZTogIEZpbGVuYW1lIHRvIGNoZWNrLgorICogQHBlcm06ICAgICAgTW9kZSAoInJlYWQiIG9yICJ3cml0ZSIgb3IgInJlYWQvd3JpdGUiKS4KKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK2ludCB0b21veW9fY2hlY2tfZmlsZV9wZXJtKHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiwKKwkJCSAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCB1OCBwZXJtKQoreworCXN0cnVjdCB0b21veW9fcGF0aF9pbmZvIG5hbWU7CisJY29uc3QgdTggbW9kZSA9IHRvbW95b19jaGVja19mbGFncyhkb21haW4sIFRPTU9ZT19NQUNfRk9SX0ZJTEUpOworCisJaWYgKCFtb2RlKQorCQlyZXR1cm4gMDsKKwluYW1lLm5hbWUgPSBmaWxlbmFtZTsKKwl0b21veW9fZmlsbF9wYXRoX2luZm8oJm5hbWUpOworCXJldHVybiB0b21veW9fY2hlY2tfZmlsZV9wZXJtMihkb21haW4sICZuYW1lLCBwZXJtLCAic3lzY3RsIiwgbW9kZSk7Cit9CisKKy8qKgorICogdG9tb3lvX2NoZWNrX2V4ZWNfcGVybSAtIENoZWNrIHBlcm1pc3Npb24gZm9yICJleGVjdXRlIi4KKyAqCisgKiBAZG9tYWluOiAgIFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iLgorICogQGZpbGVuYW1lOiBDaGVjayBwZXJtaXNzaW9uIGZvciAiZXhlY3V0ZSIuCisgKiBAdG1wOiAgICAgIEJ1ZmZlciBmb3IgdGVtcG9yYXJ5IHVzZS4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmV2YWx1ZSBvdGhlcndpc2UuCisgKi8KK2ludCB0b21veW9fY2hlY2tfZXhlY19wZXJtKHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiwKKwkJCSAgIGNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpmaWxlbmFtZSwKKwkJCSAgIHN0cnVjdCB0b21veW9fcGFnZV9idWZmZXIgKnRtcCkKK3sKKwljb25zdCB1OCBtb2RlID0gdG9tb3lvX2NoZWNrX2ZsYWdzKGRvbWFpbiwgVE9NT1lPX01BQ19GT1JfRklMRSk7CisKKwlpZiAoIW1vZGUpCisJCXJldHVybiAwOworCXJldHVybiB0b21veW9fY2hlY2tfZmlsZV9wZXJtMihkb21haW4sIGZpbGVuYW1lLCAxLCAiZG9fZXhlY3ZlIiwgbW9kZSk7Cit9CisKKy8qKgorICogdG9tb3lvX2NoZWNrX29wZW5fcGVybWlzc2lvbiAtIENoZWNrIHBlcm1pc3Npb24gZm9yICJyZWFkIiBhbmQgIndyaXRlIi4KKyAqCisgKiBAZG9tYWluOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIi4KKyAqIEBwYXRoOiAgIFBvaW50ZXIgdG8gInN0cnVjdCBwYXRoIi4KKyAqIEBmbGFnOiAgIEZsYWdzIGZvciBvcGVuKCkuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqLworaW50IHRvbW95b19jaGVja19vcGVuX3Blcm1pc3Npb24oc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluLAorCQkJCSBzdHJ1Y3QgcGF0aCAqcGF0aCwgY29uc3QgaW50IGZsYWcpCit7CisJY29uc3QgdTggYWNjX21vZGUgPSBBQ0NfTU9ERShmbGFnKTsKKwlpbnQgZXJyb3IgPSAtRU5PTUVNOworCXN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpidWY7CisJY29uc3QgdTggbW9kZSA9IHRvbW95b19jaGVja19mbGFncyhkb21haW4sIFRPTU9ZT19NQUNfRk9SX0ZJTEUpOworCWNvbnN0IGJvb2wgaXNfZW5mb3JjZSA9IChtb2RlID09IDMpOworCisJaWYgKCFtb2RlIHx8ICFwYXRoLT5tbnQpCisJCXJldHVybiAwOworCWlmIChhY2NfbW9kZSA9PSAwKQorCQlyZXR1cm4gMDsKKwlpZiAocGF0aC0+ZGVudHJ5LT5kX2lub2RlICYmIFNfSVNESVIocGF0aC0+ZGVudHJ5LT5kX2lub2RlLT5pX21vZGUpKQorCQkvKgorCQkgKiBJIGRvbid0IGNoZWNrIGRpcmVjdG9yaWVzIGhlcmUgYmVjYXVzZSBta2RpcigpIGFuZCBybWRpcigpCisJCSAqIGRvbid0IGNhbGwgbWUuCisJCSAqLworCQlyZXR1cm4gMDsKKwlidWYgPSB0b21veW9fZ2V0X3BhdGgocGF0aCk7CisJaWYgKCFidWYpCisJCWdvdG8gb3V0OworCWVycm9yID0gMDsKKwkvKgorCSAqIElmIHRoZSBmaWxlbmFtZSBpcyBzcGVjaWZpZWQgYnkgImRlbnlfcmV3cml0ZSIga2V5d29yZCwKKwkgKiB3ZSBuZWVkIHRvIGNoZWNrICJhbGxvd19yZXdyaXRlIiBwZXJtaXNzaW9uIHdoZW4gdGhlIGZpbGVuYW1lIGlzIG5vdAorCSAqIG9wZW5lZCBmb3IgYXBwZW5kIG1vZGUgb3IgdGhlIGZpbGVuYW1lIGlzIHRydW5jYXRlZCBhdCBvcGVuIHRpbWUuCisJICovCisJaWYgKChhY2NfbW9kZSAmIE1BWV9XUklURSkgJiYKKwkgICAgKChmbGFnICYgT19UUlVOQykgfHwgIShmbGFnICYgT19BUFBFTkQpKSAmJgorCSAgICAodG9tb3lvX2lzX25vX3Jld3JpdGVfZmlsZShidWYpKSkgeworCQllcnJvciA9IHRvbW95b19jaGVja19zaW5nbGVfcGF0aF9wZXJtaXNzaW9uMihkb21haW4sCisJCQkJCQkgICAgIFRPTU9ZT19UWVBFX1JFV1JJVEVfQUNMLAorCQkJCQkJCSAgICAgYnVmLCBtb2RlKTsKKwl9CisJaWYgKCFlcnJvcikKKwkJZXJyb3IgPSB0b21veW9fY2hlY2tfZmlsZV9wZXJtMihkb21haW4sIGJ1ZiwgYWNjX21vZGUsICJvcGVuIiwKKwkJCQkJCW1vZGUpOworCWlmICghZXJyb3IgJiYgKGZsYWcgJiBPX1RSVU5DKSkKKwkJZXJyb3IgPSB0b21veW9fY2hlY2tfc2luZ2xlX3BhdGhfcGVybWlzc2lvbjIoZG9tYWluLAorCQkJCQkJICAgICBUT01PWU9fVFlQRV9UUlVOQ0FURV9BQ0wsCisJCQkJCQkJICAgICBidWYsIG1vZGUpOworIG91dDoKKwl0b21veW9fZnJlZShidWYpOworCWlmICghaXNfZW5mb3JjZSkKKwkJZXJyb3IgPSAwOworCXJldHVybiBlcnJvcjsKK30KKworLyoqCisgKiB0b21veW9fY2hlY2tfMXBhdGhfcGVybSAtIENoZWNrIHBlcm1pc3Npb24gZm9yICJjcmVhdGUiLCAidW5saW5rIiwgIm1rZGlyIiwgInJtZGlyIiwgIm1rZmlmbyIsICJta3NvY2siLCAibWtibG9jayIsICJta2NoYXIiLCAidHJ1bmNhdGUiIGFuZCAic3ltbGluayIuCisgKgorICogQGRvbWFpbjogICAgUG9pbnRlciB0byAic3RydWN0IHRvbW95b19kb21haW5faW5mbyIuCisgKiBAb3BlcmF0aW9uOiBUeXBlIG9mIG9wZXJhdGlvbi4KKyAqIEBwYXRoOiAgICAgIFBvaW50ZXIgdG8gInN0cnVjdCBwYXRoIi4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitpbnQgdG9tb3lvX2NoZWNrXzFwYXRoX3Blcm0oc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluLAorCQkJICAgIGNvbnN0IHU4IG9wZXJhdGlvbiwgc3RydWN0IHBhdGggKnBhdGgpCit7CisJaW50IGVycm9yID0gLUVOT01FTTsKKwlzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqYnVmOworCWNvbnN0IHU4IG1vZGUgPSB0b21veW9fY2hlY2tfZmxhZ3MoZG9tYWluLCBUT01PWU9fTUFDX0ZPUl9GSUxFKTsKKwljb25zdCBib29sIGlzX2VuZm9yY2UgPSAobW9kZSA9PSAzKTsKKworCWlmICghbW9kZSB8fCAhcGF0aC0+bW50KQorCQlyZXR1cm4gMDsKKwlidWYgPSB0b21veW9fZ2V0X3BhdGgocGF0aCk7CisJaWYgKCFidWYpCisJCWdvdG8gb3V0OworCXN3aXRjaCAob3BlcmF0aW9uKSB7CisJY2FzZSBUT01PWU9fVFlQRV9NS0RJUl9BQ0w6CisJY2FzZSBUT01PWU9fVFlQRV9STURJUl9BQ0w6CisJCWlmICghYnVmLT5pc19kaXIpIHsKKwkJCS8qCisJCQkgKiB0b21veW9fZ2V0X3BhdGgoKSByZXNlcnZlcyBzcGFjZSBmb3IgYXBwZW5kaW5nICIvLiIKKwkJCSAqLworCQkJc3RyY2F0KChjaGFyICopIGJ1Zi0+bmFtZSwgIi8iKTsKKwkJCXRvbW95b19maWxsX3BhdGhfaW5mbyhidWYpOworCQl9CisJfQorCWVycm9yID0gdG9tb3lvX2NoZWNrX3NpbmdsZV9wYXRoX3Blcm1pc3Npb24yKGRvbWFpbiwgb3BlcmF0aW9uLCBidWYsCisJCQkJCQkgICAgIG1vZGUpOworIG91dDoKKwl0b21veW9fZnJlZShidWYpOworCWlmICghaXNfZW5mb3JjZSkKKwkJZXJyb3IgPSAwOworCXJldHVybiBlcnJvcjsKK30KKworLyoqCisgKiB0b21veW9fY2hlY2tfcmV3cml0ZV9wZXJtaXNzaW9uIC0gQ2hlY2sgcGVybWlzc2lvbiBmb3IgInJld3JpdGUiLgorICoKKyAqIEBkb21haW46IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iLgorICogQGZpbHA6IFBvaW50ZXIgdG8gInN0cnVjdCBmaWxlIi4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitpbnQgdG9tb3lvX2NoZWNrX3Jld3JpdGVfcGVybWlzc2lvbihzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4sCisJCQkJICAgIHN0cnVjdCBmaWxlICpmaWxwKQoreworCWludCBlcnJvciA9IC1FTk9NRU07CisJY29uc3QgdTggbW9kZSA9IHRvbW95b19jaGVja19mbGFncyhkb21haW4sIFRPTU9ZT19NQUNfRk9SX0ZJTEUpOworCWNvbnN0IGJvb2wgaXNfZW5mb3JjZSA9IChtb2RlID09IDMpOworCXN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpidWY7CisKKwlpZiAoIW1vZGUgfHwgIWZpbHAtPmZfcGF0aC5tbnQpCisJCXJldHVybiAwOworCWJ1ZiA9IHRvbW95b19nZXRfcGF0aCgmZmlscC0+Zl9wYXRoKTsKKwlpZiAoIWJ1ZikKKwkJZ290byBvdXQ7CisJaWYgKCF0b21veW9faXNfbm9fcmV3cml0ZV9maWxlKGJ1ZikpIHsKKwkJZXJyb3IgPSAwOworCQlnb3RvIG91dDsKKwl9CisJZXJyb3IgPSB0b21veW9fY2hlY2tfc2luZ2xlX3BhdGhfcGVybWlzc2lvbjIoZG9tYWluLAorCQkJCQkJICAgICBUT01PWU9fVFlQRV9SRVdSSVRFX0FDTCwKKwkJCQkJCSAgICAgYnVmLCBtb2RlKTsKKyBvdXQ6CisJdG9tb3lvX2ZyZWUoYnVmKTsKKwlpZiAoIWlzX2VuZm9yY2UpCisJCWVycm9yID0gMDsKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qKgorICogdG9tb3lvX2NoZWNrXzJwYXRoX3Blcm0gLSBDaGVjayBwZXJtaXNzaW9uIGZvciAicmVuYW1lIiBhbmQgImxpbmsiLgorICoKKyAqIEBkb21haW46ICAgIFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iLgorICogQG9wZXJhdGlvbjogVHlwZSBvZiBvcGVyYXRpb24uCisgKiBAcGF0aDE6ICAgICAgUG9pbnRlciB0byAic3RydWN0IHBhdGgiLgorICogQHBhdGgyOiAgICAgIFBvaW50ZXIgdG8gInN0cnVjdCBwYXRoIi4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitpbnQgdG9tb3lvX2NoZWNrXzJwYXRoX3Blcm0oc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqIGNvbnN0IGRvbWFpbiwKKwkJCSAgICBjb25zdCB1OCBvcGVyYXRpb24sIHN0cnVjdCBwYXRoICpwYXRoMSwKKwkJCSAgICBzdHJ1Y3QgcGF0aCAqcGF0aDIpCit7CisJaW50IGVycm9yID0gLUVOT01FTTsKKwlzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqYnVmMSwgKmJ1ZjI7CisJY29uc3QgdTggbW9kZSA9IHRvbW95b19jaGVja19mbGFncyhkb21haW4sIFRPTU9ZT19NQUNfRk9SX0ZJTEUpOworCWNvbnN0IGJvb2wgaXNfZW5mb3JjZSA9IChtb2RlID09IDMpOworCWNvbnN0IGNoYXIgKm1zZzsKKworCWlmICghbW9kZSB8fCAhcGF0aDEtPm1udCB8fCAhcGF0aDItPm1udCkKKwkJcmV0dXJuIDA7CisJYnVmMSA9IHRvbW95b19nZXRfcGF0aChwYXRoMSk7CisJYnVmMiA9IHRvbW95b19nZXRfcGF0aChwYXRoMik7CisJaWYgKCFidWYxIHx8ICFidWYyKQorCQlnb3RvIG91dDsKKwl7CisJCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IHBhdGgxLT5kZW50cnk7CisJCWlmIChkZW50cnktPmRfaW5vZGUgJiYgU19JU0RJUihkZW50cnktPmRfaW5vZGUtPmlfbW9kZSkpIHsKKwkJCS8qCisJCQkgKiB0b21veW9fZ2V0X3BhdGgoKSByZXNlcnZlcyBzcGFjZSBmb3IgYXBwZW5kaW5nICIvLiIKKwkJCSAqLworCQkJaWYgKCFidWYxLT5pc19kaXIpIHsKKwkJCQlzdHJjYXQoKGNoYXIgKikgYnVmMS0+bmFtZSwgIi8iKTsKKwkJCQl0b21veW9fZmlsbF9wYXRoX2luZm8oYnVmMSk7CisJCQl9CisJCQlpZiAoIWJ1ZjItPmlzX2RpcikgeworCQkJCXN0cmNhdCgoY2hhciAqKSBidWYyLT5uYW1lLCAiLyIpOworCQkJCXRvbW95b19maWxsX3BhdGhfaW5mbyhidWYyKTsKKwkJCX0KKwkJfQorCX0KKwllcnJvciA9IHRvbW95b19jaGVja19kb3VibGVfcGF0aF9hY2woZG9tYWluLCBvcGVyYXRpb24sIGJ1ZjEsIGJ1ZjIpOworCW1zZyA9IHRvbW95b19kcDJrZXl3b3JkKG9wZXJhdGlvbik7CisJaWYgKCFlcnJvcikKKwkJZ290byBvdXQ7CisJaWYgKHRvbW95b192ZXJib3NlX21vZGUoZG9tYWluKSkKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiVE9NT1lPLSVzOiBBY2Nlc3MgJyVzICVzICVzJyAiCisJCSAgICAgICAiZGVuaWVkIGZvciAlc1xuIiwgdG9tb3lvX2dldF9tc2coaXNfZW5mb3JjZSksCisJCSAgICAgICBtc2csIGJ1ZjEtPm5hbWUsIGJ1ZjItPm5hbWUsCisJCSAgICAgICB0b21veW9fZ2V0X2xhc3RfbmFtZShkb21haW4pKTsKKwlpZiAobW9kZSA9PSAxICYmIHRvbW95b19kb21haW5fcXVvdGFfaXNfb2soZG9tYWluKSkgeworCQljb25zdCBjaGFyICpuYW1lMSA9IHRvbW95b19nZXRfZmlsZV9wYXR0ZXJuKGJ1ZjEpLT5uYW1lOworCQljb25zdCBjaGFyICpuYW1lMiA9IHRvbW95b19nZXRfZmlsZV9wYXR0ZXJuKGJ1ZjIpLT5uYW1lOworCQl0b21veW9fdXBkYXRlX2RvdWJsZV9wYXRoX2FjbChvcGVyYXRpb24sIG5hbWUxLCBuYW1lMiwgZG9tYWluLAorCQkJCQkgICAgICBmYWxzZSk7CisJfQorIG91dDoKKwl0b21veW9fZnJlZShidWYxKTsKKwl0b21veW9fZnJlZShidWYyKTsKKwlpZiAoIWlzX2VuZm9yY2UpCisJCWVycm9yID0gMDsKKwlyZXR1cm4gZXJyb3I7Cit9CmRpZmYgLS1naXQgYS9zZWN1cml0eS90b21veW8vcmVhbHBhdGguYyBiL3NlY3VyaXR5L3RvbW95by9yZWFscGF0aC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0N2YxNmIKLS0tIC9kZXYvbnVsbAorKysgYi9zZWN1cml0eS90b21veW8vcmVhbHBhdGguYwpAQCAtMCwwICsxLDQ4MiBAQAorLyoKKyAqIHNlY3VyaXR5L3RvbW95by9yZWFscGF0aC5jCisgKgorICogR2V0IHRoZSBjYW5vbmljYWxpemVkIGFic29sdXRlIHBhdGhuYW1lcy4gVGhlIGJhc2lzIGZvciBUT01PWU8uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDkgIE5UVCBEQVRBIENPUlBPUkFUSU9OCisgKgorICogVmVyc2lvbjogMi4yLjAtcHJlICAgMjAwOS8wMi8wMQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgorI2luY2x1ZGUgPGxpbnV4L21udF9uYW1lc3BhY2UuaD4KKyNpbmNsdWRlICJjb21tb24uaCIKKyNpbmNsdWRlICJyZWFscGF0aC5oIgorCisvKioKKyAqIHRvbW95b19lbmNvZGU6IENvbnZlcnQgYmluYXJ5IHN0cmluZyB0byBhc2NpaSBzdHJpbmcuCisgKgorICogQGJ1ZmZlcjogIEJ1ZmZlciBmb3IgQVNDSUkgc3RyaW5nLgorICogQGJ1ZmxlbjogIFNpemUgb2YgQGJ1ZmZlci4KKyAqIEBzdHI6ICAgICBCaW5hcnkgc3RyaW5nLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtRU5PTUVNIG90aGVyd2lzZS4KKyAqLworaW50IHRvbW95b19lbmNvZGUoY2hhciAqYnVmZmVyLCBpbnQgYnVmbGVuLCBjb25zdCBjaGFyICpzdHIpCit7CisJd2hpbGUgKDEpIHsKKwkJY29uc3QgdW5zaWduZWQgY2hhciBjID0gKih1bnNpZ25lZCBjaGFyICopIHN0cisrOworCisJCWlmICh0b21veW9faXNfdmFsaWQoYykpIHsKKwkJCWlmICgtLWJ1ZmxlbiA8PSAwKQorCQkJCWJyZWFrOworCQkJKmJ1ZmZlcisrID0gKGNoYXIpIGM7CisJCQlpZiAoYyAhPSAnXFwnKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKC0tYnVmbGVuIDw9IDApCisJCQkJYnJlYWs7CisJCQkqYnVmZmVyKysgPSAoY2hhcikgYzsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghYykgeworCQkJaWYgKC0tYnVmbGVuIDw9IDApCisJCQkJYnJlYWs7CisJCQkqYnVmZmVyID0gJ1wwJzsKKwkJCXJldHVybiAwOworCQl9CisJCWJ1ZmxlbiAtPSA0OworCQlpZiAoYnVmbGVuIDw9IDApCisJCQlicmVhazsKKwkJKmJ1ZmZlcisrID0gJ1xcJzsKKwkJKmJ1ZmZlcisrID0gKGMgPj4gNikgKyAnMCc7CisJCSpidWZmZXIrKyA9ICgoYyA+PiAzKSAmIDcpICsgJzAnOworCQkqYnVmZmVyKysgPSAoYyAmIDcpICsgJzAnOworCX0KKwlyZXR1cm4gLUVOT01FTTsKK30KKworLyoqCisgKiB0b21veW9fcmVhbHBhdGhfZnJvbV9wYXRoMiAtIFJldHVybnMgcmVhbHBhdGgoMykgb2YgdGhlIGdpdmVuIGRlbnRyeSBidXQgaWdub3JlcyBjaHJvb3QnZWQgcm9vdC4KKyAqCisgKiBAcGF0aDogICAgICAgIFBvaW50ZXIgdG8gInN0cnVjdCBwYXRoIi4KKyAqIEBuZXduYW1lOiAgICAgUG9pbnRlciB0byBidWZmZXIgdG8gcmV0dXJuIHZhbHVlIGluLgorICogQG5ld25hbWVfbGVuOiBTaXplIG9mIEBuZXduYW1lLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKgorICogSWYgZGVudHJ5IGlzIGEgZGlyZWN0b3J5LCB0cmFpbGluZyAnLycgaXMgYXBwZW5kZWQuCisgKiBDaGFyYWN0ZXJzIG91dCBvZiAweDIwIDwgYyA8IDB4N0YgcmFuZ2UgYXJlIGNvbnZlcnRlZCB0bworICogXG9vbyBzdHlsZSBvY3RhbCBzdHJpbmcuCisgKiBDaGFyYWN0ZXIgXCBpcyBjb252ZXJ0ZWQgdG8gXFwgc3RyaW5nLgorICovCitpbnQgdG9tb3lvX3JlYWxwYXRoX2Zyb21fcGF0aDIoc3RydWN0IHBhdGggKnBhdGgsIGNoYXIgKm5ld25hbWUsCisJCQkgICAgICAgaW50IG5ld25hbWVfbGVuKQoreworCWludCBlcnJvciA9IC1FTk9NRU07CisJc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gcGF0aC0+ZGVudHJ5OworCWNoYXIgKnNwOworCisJaWYgKCFkZW50cnkgfHwgIXBhdGgtPm1udCB8fCAhbmV3bmFtZSB8fCBuZXduYW1lX2xlbiA8PSAyMDQ4KQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoZGVudHJ5LT5kX29wICYmIGRlbnRyeS0+ZF9vcC0+ZF9kbmFtZSkgeworCQkvKiBGb3IgInNvY2tldDpbXCRdIiBhbmQgInBpcGU6W1wkXSIuICovCisJCXN0YXRpYyBjb25zdCBpbnQgb2Zmc2V0ID0gMTUzNjsKKwkJc3AgPSBkZW50cnktPmRfb3AtPmRfZG5hbWUoZGVudHJ5LCBuZXduYW1lICsgb2Zmc2V0LAorCQkJCQkgICBuZXduYW1lX2xlbiAtIG9mZnNldCk7CisJfSBlbHNlIHsKKwkJLyogVGFrZW4gZnJvbSBkX25hbWVzcGFjZV9wYXRoKCkuICovCisJCXN0cnVjdCBwYXRoIHJvb3Q7CisJCXN0cnVjdCBwYXRoIG5zX3Jvb3QgPSB7IH07CisJCXN0cnVjdCBwYXRoIHRtcDsKKworCQlyZWFkX2xvY2soJmN1cnJlbnQtPmZzLT5sb2NrKTsKKwkJcm9vdCA9IGN1cnJlbnQtPmZzLT5yb290OworCQlwYXRoX2dldCgmcm9vdCk7CisJCXJlYWRfdW5sb2NrKCZjdXJyZW50LT5mcy0+bG9jayk7CisJCXNwaW5fbG9jaygmdmZzbW91bnRfbG9jayk7CisJCWlmIChyb290Lm1udCAmJiByb290Lm1udC0+bW50X25zKQorCQkJbnNfcm9vdC5tbnQgPSBtbnRnZXQocm9vdC5tbnQtPm1udF9ucy0+cm9vdCk7CisJCWlmIChuc19yb290Lm1udCkKKwkJCW5zX3Jvb3QuZGVudHJ5ID0gZGdldChuc19yb290Lm1udC0+bW50X3Jvb3QpOworCQlzcGluX3VubG9jaygmdmZzbW91bnRfbG9jayk7CisJCXNwaW5fbG9jaygmZGNhY2hlX2xvY2spOworCQl0bXAgPSBuc19yb290OworCQlzcCA9IF9fZF9wYXRoKHBhdGgsICZ0bXAsIG5ld25hbWUsIG5ld25hbWVfbGVuKTsKKwkJc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKKwkJcGF0aF9wdXQoJnJvb3QpOworCQlwYXRoX3B1dCgmbnNfcm9vdCk7CisJfQorCWlmIChJU19FUlIoc3ApKQorCQllcnJvciA9IFBUUl9FUlIoc3ApOworCWVsc2UKKwkJZXJyb3IgPSB0b21veW9fZW5jb2RlKG5ld25hbWUsIHNwIC0gbmV3bmFtZSwgc3ApOworCS8qIEFwcGVuZCB0cmFpbGluZyAnLycgaWYgZGVudHJ5IGlzIGEgZGlyZWN0b3J5LiAqLworCWlmICghZXJyb3IgJiYgZGVudHJ5LT5kX2lub2RlICYmIFNfSVNESVIoZGVudHJ5LT5kX2lub2RlLT5pX21vZGUpCisJICAgICYmICpuZXduYW1lKSB7CisJCXNwID0gbmV3bmFtZSArIHN0cmxlbihuZXduYW1lKTsKKwkJaWYgKCooc3AgLSAxKSAhPSAnLycpIHsKKwkJCWlmIChzcCA8IG5ld25hbWUgKyBuZXduYW1lX2xlbiAtIDQpIHsKKwkJCQkqc3ArKyA9ICcvJzsKKwkJCQkqc3AgPSAnXDAnOworCQkJfSBlbHNlIHsKKwkJCQllcnJvciA9IC1FTk9NRU07CisJCQl9CisJCX0KKwl9CisJaWYgKGVycm9yKQorCQlwcmludGsoS0VSTl9XQVJOSU5HICJ0b21veW9fcmVhbHBhdGg6IFBhdGhuYW1lIHRvbyBsb25nLlxuIik7CisJcmV0dXJuIGVycm9yOworfQorCisvKioKKyAqIHRvbW95b19yZWFscGF0aF9mcm9tX3BhdGggLSBSZXR1cm5zIHJlYWxwYXRoKDMpIG9mIHRoZSBnaXZlbiBwYXRobmFtZSBidXQgaWdub3JlcyBjaHJvb3QnZWQgcm9vdC4KKyAqCisgKiBAcGF0aDogUG9pbnRlciB0byAic3RydWN0IHBhdGgiLgorICoKKyAqIFJldHVybnMgdGhlIHJlYWxwYXRoIG9mIHRoZSBnaXZlbiBAcGF0aCBvbiBzdWNjZXNzLCBOVUxMIG90aGVyd2lzZS4KKyAqCisgKiBUaGVzZSBmdW5jdGlvbnMgdXNlIHRvbW95b19hbGxvYygpLCBzbyB0aGUgY2FsbGVyIG11c3QgY2FsbCB0b21veW9fZnJlZSgpCisgKiBpZiB0aGVzZSBmdW5jdGlvbnMgZGlkbid0IHJldHVybiBOVUxMLgorICovCitjaGFyICp0b21veW9fcmVhbHBhdGhfZnJvbV9wYXRoKHN0cnVjdCBwYXRoICpwYXRoKQoreworCWNoYXIgKmJ1ZiA9IHRvbW95b19hbGxvYyhzaXplb2Yoc3RydWN0IHRvbW95b19wYWdlX2J1ZmZlcikpOworCisJQlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgdG9tb3lvX3BhZ2VfYnVmZmVyKQorCQkgICAgIDw9IFRPTU9ZT19NQVhfUEFUSE5BTUVfTEVOIC0gMSk7CisJaWYgKCFidWYpCisJCXJldHVybiBOVUxMOworCWlmICh0b21veW9fcmVhbHBhdGhfZnJvbV9wYXRoMihwYXRoLCBidWYsCisJCQkJICAgICAgIFRPTU9ZT19NQVhfUEFUSE5BTUVfTEVOIC0gMSkgPT0gMCkKKwkJcmV0dXJuIGJ1ZjsKKwl0b21veW9fZnJlZShidWYpOworCXJldHVybiBOVUxMOworfQorCisvKioKKyAqIHRvbW95b19yZWFscGF0aCAtIEdldCByZWFscGF0aCBvZiBhIHBhdGhuYW1lLgorICoKKyAqIEBwYXRobmFtZTogVGhlIHBhdGhuYW1lIHRvIHNvbHZlLgorICoKKyAqIFJldHVybnMgdGhlIHJlYWxwYXRoIG9mIEBwYXRobmFtZSBvbiBzdWNjZXNzLCBOVUxMIG90aGVyd2lzZS4KKyAqLworY2hhciAqdG9tb3lvX3JlYWxwYXRoKGNvbnN0IGNoYXIgKnBhdGhuYW1lKQoreworCXN0cnVjdCBuYW1laWRhdGEgbmQ7CisKKwlpZiAocGF0aG5hbWUgJiYgcGF0aF9sb29rdXAocGF0aG5hbWUsIExPT0tVUF9GT0xMT1csICZuZCkgPT0gMCkgeworCQljaGFyICpidWYgPSB0b21veW9fcmVhbHBhdGhfZnJvbV9wYXRoKCZuZC5wYXRoKTsKKwkJcGF0aF9wdXQoJm5kLnBhdGgpOworCQlyZXR1cm4gYnVmOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworLyoqCisgKiB0b21veW9fcmVhbHBhdGhfbm9mb2xsb3cgLSBHZXQgcmVhbHBhdGggb2YgYSBwYXRobmFtZS4KKyAqCisgKiBAcGF0aG5hbWU6IFRoZSBwYXRobmFtZSB0byBzb2x2ZS4KKyAqCisgKiBSZXR1cm5zIHRoZSByZWFscGF0aCBvZiBAcGF0aG5hbWUgb24gc3VjY2VzcywgTlVMTCBvdGhlcndpc2UuCisgKi8KK2NoYXIgKnRvbW95b19yZWFscGF0aF9ub2ZvbGxvdyhjb25zdCBjaGFyICpwYXRobmFtZSkKK3sKKwlzdHJ1Y3QgbmFtZWlkYXRhIG5kOworCisJaWYgKHBhdGhuYW1lICYmIHBhdGhfbG9va3VwKHBhdGhuYW1lLCAwLCAmbmQpID09IDApIHsKKwkJY2hhciAqYnVmID0gdG9tb3lvX3JlYWxwYXRoX2Zyb21fcGF0aCgmbmQucGF0aCk7CisJCXBhdGhfcHV0KCZuZC5wYXRoKTsKKwkJcmV0dXJuIGJ1ZjsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qIE1lbW9yeSBhbGxvY2F0ZWQgZm9yIG5vbi1zdHJpbmcgZGF0YS4gKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgdG9tb3lvX2FsbG9jYXRlZF9tZW1vcnlfZm9yX2VsZW1lbnRzOworLyogUXVvdGEgZm9yIGhvbGRpbmcgbm9uLXN0cmluZyBkYXRhLiAqLworc3RhdGljIHVuc2lnbmVkIGludCB0b21veW9fcXVvdGFfZm9yX2VsZW1lbnRzOworCisvKioKKyAqIHRvbW95b19hbGxvY19lbGVtZW50IC0gQWxsb2NhdGUgcGVybWFuZW50IG1lbW9yeSBmb3Igc3RydWN0dXJlcy4KKyAqCisgKiBAc2l6ZTogU2l6ZSBpbiBieXRlcy4KKyAqCisgKiBSZXR1cm5zIHBvaW50ZXIgdG8gYWxsb2NhdGVkIG1lbW9yeSBvbiBzdWNjZXNzLCBOVUxMIG90aGVyd2lzZS4KKyAqCisgKiBNZW1vcnkgaGFzIHRvIGJlIHplcm9lZC4KKyAqIFRoZSBSQU0gaXMgY2h1bmtlZCwgc28gTkVWRVIgdHJ5IHRvIGtmcmVlKCkgdGhlIHJldHVybmVkIHBvaW50ZXIuCisgKi8KK3ZvaWQgKnRvbW95b19hbGxvY19lbGVtZW50KGNvbnN0IHVuc2lnbmVkIGludCBzaXplKQoreworCXN0YXRpYyBjaGFyICpidWY7CisJc3RhdGljIERFRklORV9NVVRFWChsb2NrKTsKKwlzdGF0aWMgdW5zaWduZWQgaW50IGJ1Zl91c2VkX2xlbiA9IFBBVEhfTUFYOworCWNoYXIgKnB0ciA9IE5VTEw7CisJLypBc3N1bWVzIHNpemVvZih2b2lkICopID49IHNpemVvZihsb25nKSBpcyB0cnVlLiAqLworCWNvbnN0IHVuc2lnbmVkIGludCB3b3JkX2FsaWduZWRfc2l6ZQorCQk9IHJvdW5kdXAoc2l6ZSwgbWF4KHNpemVvZih2b2lkICopLCBzaXplb2YobG9uZykpKTsKKwlpZiAod29yZF9hbGlnbmVkX3NpemUgPiBQQVRIX01BWCkKKwkJcmV0dXJuIE5VTEw7CisJLyoqKioqIEVYQ0xVU0lWRSBTRUNUSU9OIFNUQVJUICoqKioqLworCW11dGV4X2xvY2soJmxvY2spOworCWlmIChidWZfdXNlZF9sZW4gKyB3b3JkX2FsaWduZWRfc2l6ZSA+IFBBVEhfTUFYKSB7CisJCWlmICghdG9tb3lvX3F1b3RhX2Zvcl9lbGVtZW50cyB8fAorCQkgICAgdG9tb3lvX2FsbG9jYXRlZF9tZW1vcnlfZm9yX2VsZW1lbnRzCisJCSAgICArIFBBVEhfTUFYIDw9IHRvbW95b19xdW90YV9mb3JfZWxlbWVudHMpCisJCQlwdHIgPSBremFsbG9jKFBBVEhfTUFYLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFwdHIpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkVSUk9SOiBPdXQgb2YgbWVtb3J5ICIKKwkJCSAgICAgICAiZm9yIHRvbW95b19hbGxvY19lbGVtZW50KCkuXG4iKTsKKwkJCWlmICghdG9tb3lvX3BvbGljeV9sb2FkZWQpCisJCQkJcGFuaWMoIk1BQyBJbml0aWFsaXphdGlvbiBmYWlsZWQuXG4iKTsKKwkJfSBlbHNlIHsKKwkJCWJ1ZiA9IHB0cjsKKwkJCXRvbW95b19hbGxvY2F0ZWRfbWVtb3J5X2Zvcl9lbGVtZW50cyArPSBQQVRIX01BWDsKKwkJCWJ1Zl91c2VkX2xlbiA9IHdvcmRfYWxpZ25lZF9zaXplOworCQkJcHRyID0gYnVmOworCQl9CisJfSBlbHNlIGlmICh3b3JkX2FsaWduZWRfc2l6ZSkgeworCQlpbnQgaTsKKwkJcHRyID0gYnVmICsgYnVmX3VzZWRfbGVuOworCQlidWZfdXNlZF9sZW4gKz0gd29yZF9hbGlnbmVkX3NpemU7CisJCWZvciAoaSA9IDA7IGkgPCB3b3JkX2FsaWduZWRfc2l6ZTsgaSsrKSB7CisJCQlpZiAoIXB0cltpXSkKKwkJCQljb250aW51ZTsKKwkJCXByaW50ayhLRVJOX0VSUiAiV0FSTklORzogUmVzZXJ2ZWQgbWVtb3J5IHdhcyB0YWludGVkISAiCisJCQkgICAgICAgIlRoZSBzeXN0ZW0gbWlnaHQgZ28gd3JvbmcuXG4iKTsKKwkJCXB0cltpXSA9ICdcMCc7CisJCX0KKwl9CisJbXV0ZXhfdW5sb2NrKCZsb2NrKTsKKwkvKioqKiogRVhDTFVTSVZFIFNFQ1RJT04gRU5EICoqKioqLworCXJldHVybiBwdHI7Cit9CisKKy8qIE1lbW9yeSBhbGxvY2F0ZWQgZm9yIHN0cmluZyBkYXRhIGluIGJ5dGVzLiAqLworc3RhdGljIHVuc2lnbmVkIGludCB0b21veW9fYWxsb2NhdGVkX21lbW9yeV9mb3Jfc2F2ZW5hbWU7CisvKiBRdW90YSBmb3IgaG9sZGluZyBzdHJpbmcgZGF0YSBpbiBieXRlcy4gKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgdG9tb3lvX3F1b3RhX2Zvcl9zYXZlbmFtZTsKKworLyoKKyAqIFRPTU9ZTyB1c2VzIHRoaXMgaGFzaCBvbmx5IHdoZW4gYXBwZW5kaW5nIGEgc3RyaW5nIGludG8gdGhlIHN0cmluZworICogdGFibGUuIEZyZXF1ZW5jeSBvZiBhcHBlbmRpbmcgc3RyaW5ncyBpcyB2ZXJ5IGxvdy4gU28gd2UgZG9uJ3QgbmVlZAorICogbGFyZ2UgKGUuZy4gNjRrKSBoYXNoIHNpemUuIDI1NiB3aWxsIGJlIHN1ZmZpY2llbnQuCisgKi8KKyNkZWZpbmUgVE9NT1lPX01BWF9IQVNIIDI1NgorCisvKiBTdHJ1Y3R1cmUgZm9yIHN0cmluZyBkYXRhLiAqLworc3RydWN0IHRvbW95b19uYW1lX2VudHJ5IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IHRvbW95b19wYXRoX2luZm8gZW50cnk7Cit9OworCisvKiBTdHJ1Y3R1cmUgZm9yIGF2YWlsYWJsZSBtZW1vcnkgcmVnaW9uLiAqLworc3RydWN0IHRvbW95b19mcmVlX21lbW9yeV9ibG9ja19saXN0IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJY2hhciAqcHRyOyAgICAgICAgICAgICAvKiBQb2ludGVyIHRvIGEgZnJlZSBhcmVhLiAqLworCWludCBsZW47ICAgICAgICAgICAgICAgLyogTGVuZ3RoIG9mIHRoZSBhcmVhLiAgICAgKi8KK307CisKKy8qCisgKiBUaGUgbGlzdCBmb3IgInN0cnVjdCB0b21veW9fbmFtZV9lbnRyeSIuCisgKgorICogVGhpcyBsaXN0IGlzIHVwZGF0ZWQgb25seSBpbnNpZGUgdG9tb3lvX3NhdmVfbmFtZSgpLCB0aHVzCisgKiBubyBnbG9iYWwgbXV0ZXggZXhpc3RzLgorICovCitzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCB0b21veW9fbmFtZV9saXN0W1RPTU9ZT19NQVhfSEFTSF07CisKKy8qKgorICogdG9tb3lvX3NhdmVfbmFtZSAtIEFsbG9jYXRlIHBlcm1hbmVudCBtZW1vcnkgZm9yIHN0cmluZyBkYXRhLgorICoKKyAqIEBuYW1lOiBUaGUgc3RyaW5nIHRvIHN0b3JlIGludG8gdGhlIHBlcm1lcm5lbnQgbWVtb3J5LgorICoKKyAqIFJldHVybnMgcG9pbnRlciB0byAic3RydWN0IHRvbW95b19wYXRoX2luZm8iIG9uIHN1Y2Nlc3MsIE5VTEwgb3RoZXJ3aXNlLgorICoKKyAqIFRoZSBSQU0gaXMgc2hhcmVkLCBzbyBORVZFUiB0cnkgdG8gbW9kaWZ5IG9yIGtmcmVlKCkgdGhlIHJldHVybmVkIG5hbWUuCisgKi8KK2NvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICp0b21veW9fc2F2ZV9uYW1lKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RhdGljIExJU1RfSEVBRChmbWJfbGlzdCk7CisJc3RhdGljIERFRklORV9NVVRFWChsb2NrKTsKKwlzdHJ1Y3QgdG9tb3lvX25hbWVfZW50cnkgKnB0cjsKKwl1bnNpZ25lZCBpbnQgaGFzaDsKKwkvKiBmbWIgY29udGFpbnMgYXZhaWxhYmxlIHNpemUgaW4gYnl0ZXMuCisJICAgZm1iIGlzIHJlbW92ZWQgZnJvbSB0aGUgZm1iX2xpc3Qgd2hlbiBmbWItPmxlbiBiZWNvbWVzIDAuICovCisJc3RydWN0IHRvbW95b19mcmVlX21lbW9yeV9ibG9ja19saXN0ICpmbWI7CisJaW50IGxlbjsKKwljaGFyICpjcDsKKworCWlmICghbmFtZSkKKwkJcmV0dXJuIE5VTEw7CisJbGVuID0gc3RybGVuKG5hbWUpICsgMTsKKwlpZiAobGVuID4gVE9NT1lPX01BWF9QQVRITkFNRV9MRU4pIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiRVJST1I6IE5hbWUgdG9vIGxvbmcgIgorCQkgICAgICAgImZvciB0b21veW9fc2F2ZV9uYW1lKCkuXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCWhhc2ggPSBmdWxsX25hbWVfaGFzaCgoY29uc3QgdW5zaWduZWQgY2hhciAqKSBuYW1lLCBsZW4gLSAxKTsKKwkvKioqKiogRVhDTFVTSVZFIFNFQ1RJT04gU1RBUlQgKioqKiovCisJbXV0ZXhfbG9jaygmbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICZ0b21veW9fbmFtZV9saXN0W2hhc2ggJSBUT01PWU9fTUFYX0hBU0hdLAorCQkJICAgICBsaXN0KSB7CisJCWlmIChoYXNoID09IHB0ci0+ZW50cnkuaGFzaCAmJiAhc3RyY21wKG5hbWUsIHB0ci0+ZW50cnkubmFtZSkpCisJCQlnb3RvIG91dDsKKwl9CisJbGlzdF9mb3JfZWFjaF9lbnRyeShmbWIsICZmbWJfbGlzdCwgbGlzdCkgeworCQlpZiAobGVuIDw9IGZtYi0+bGVuKQorCQkJZ290byByZWFkeTsKKwl9CisJaWYgKCF0b21veW9fcXVvdGFfZm9yX3NhdmVuYW1lIHx8CisJICAgIHRvbW95b19hbGxvY2F0ZWRfbWVtb3J5X2Zvcl9zYXZlbmFtZSArIFBBVEhfTUFYCisJICAgIDw9IHRvbW95b19xdW90YV9mb3Jfc2F2ZW5hbWUpCisJCWNwID0ga3phbGxvYyhQQVRIX01BWCwgR0ZQX0tFUk5FTCk7CisJZWxzZQorCQljcCA9IE5VTEw7CisJZm1iID0ga3phbGxvYyhzaXplb2YoKmZtYiksIEdGUF9LRVJORUwpOworCWlmICghY3AgfHwgIWZtYikgeworCQlrZnJlZShjcCk7CisJCWtmcmVlKGZtYik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkVSUk9SOiBPdXQgb2YgbWVtb3J5ICIKKwkJICAgICAgICJmb3IgdG9tb3lvX3NhdmVfbmFtZSgpLlxuIik7CisJCWlmICghdG9tb3lvX3BvbGljeV9sb2FkZWQpCisJCQlwYW5pYygiTUFDIEluaXRpYWxpemF0aW9uIGZhaWxlZC5cbiIpOworCQlwdHIgPSBOVUxMOworCQlnb3RvIG91dDsKKwl9CisJdG9tb3lvX2FsbG9jYXRlZF9tZW1vcnlfZm9yX3NhdmVuYW1lICs9IFBBVEhfTUFYOworCWxpc3RfYWRkKCZmbWItPmxpc3QsICZmbWJfbGlzdCk7CisJZm1iLT5wdHIgPSBjcDsKKwlmbWItPmxlbiA9IFBBVEhfTUFYOworIHJlYWR5OgorCXB0ciA9IHRvbW95b19hbGxvY19lbGVtZW50KHNpemVvZigqcHRyKSk7CisJaWYgKCFwdHIpCisJCWdvdG8gb3V0OworCXB0ci0+ZW50cnkubmFtZSA9IGZtYi0+cHRyOworCW1lbW1vdmUoZm1iLT5wdHIsIG5hbWUsIGxlbik7CisJdG9tb3lvX2ZpbGxfcGF0aF9pbmZvKCZwdHItPmVudHJ5KTsKKwlmbWItPnB0ciArPSBsZW47CisJZm1iLT5sZW4gLT0gbGVuOworCWxpc3RfYWRkX3RhaWwoJnB0ci0+bGlzdCwgJnRvbW95b19uYW1lX2xpc3RbaGFzaCAlIFRPTU9ZT19NQVhfSEFTSF0pOworCWlmIChmbWItPmxlbiA9PSAwKSB7CisJCWxpc3RfZGVsKCZmbWItPmxpc3QpOworCQlrZnJlZShmbWIpOworCX0KKyBvdXQ6CisJbXV0ZXhfdW5sb2NrKCZsb2NrKTsKKwkvKioqKiogRVhDTFVTSVZFIFNFQ1RJT04gRU5EICoqKioqLworCXJldHVybiBwdHIgPyAmcHRyLT5lbnRyeSA6IE5VTEw7Cit9CisKKy8qKgorICogdG9tb3lvX3JlYWxwYXRoX2luaXQgLSBJbml0aWFsaXplIHJlYWxwYXRoIHJlbGF0ZWQgY29kZS4KKyAqLwordm9pZCBfX2luaXQgdG9tb3lvX3JlYWxwYXRoX2luaXQodm9pZCkKK3sKKwlpbnQgaTsKKworCUJVSUxEX0JVR19PTihUT01PWU9fTUFYX1BBVEhOQU1FX0xFTiA+IFBBVEhfTUFYKTsKKwlmb3IgKGkgPSAwOyBpIDwgVE9NT1lPX01BWF9IQVNIOyBpKyspCisJCUlOSVRfTElTVF9IRUFEKCZ0b21veW9fbmFtZV9saXN0W2ldKTsKKwlJTklUX0xJU1RfSEVBRCgmdG9tb3lvX2tlcm5lbF9kb21haW4uYWNsX2luZm9fbGlzdCk7CisJdG9tb3lvX2tlcm5lbF9kb21haW4uZG9tYWlubmFtZSA9IHRvbW95b19zYXZlX25hbWUoVE9NT1lPX1JPT1RfTkFNRSk7CisJbGlzdF9hZGRfdGFpbCgmdG9tb3lvX2tlcm5lbF9kb21haW4ubGlzdCwgJnRvbW95b19kb21haW5fbGlzdCk7CisJZG93bl9yZWFkKCZ0b21veW9fZG9tYWluX2xpc3RfbG9jayk7CisJaWYgKHRvbW95b19maW5kX2RvbWFpbihUT01PWU9fUk9PVF9OQU1FKSAhPSAmdG9tb3lvX2tlcm5lbF9kb21haW4pCisJCXBhbmljKCJDYW4ndCByZWdpc3RlciB0b21veW9fa2VybmVsX2RvbWFpbiIpOworCXVwX3JlYWQoJnRvbW95b19kb21haW5fbGlzdF9sb2NrKTsKK30KKworLyogTWVtb3J5IGFsbG9jYXRlZCBmb3IgdGVtcG9yYXJ5IHB1cnBvc2UuICovCitzdGF0aWMgYXRvbWljX3QgdG9tb3lvX2R5bmFtaWNfbWVtb3J5X3NpemU7CisKKy8qKgorICogdG9tb3lvX2FsbG9jIC0gQWxsb2NhdGUgbWVtb3J5IGZvciB0ZW1wb3JhcnkgcHVycG9zZS4KKyAqCisgKiBAc2l6ZTogU2l6ZSBpbiBieXRlcy4KKyAqCisgKiBSZXR1cm5zIHBvaW50ZXIgdG8gYWxsb2NhdGVkIG1lbW9yeSBvbiBzdWNjZXNzLCBOVUxMIG90aGVyd2lzZS4KKyAqLwordm9pZCAqdG9tb3lvX2FsbG9jKGNvbnN0IHNpemVfdCBzaXplKQoreworCXZvaWQgKnAgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCWlmIChwKQorCQlhdG9taWNfYWRkKGtzaXplKHApLCAmdG9tb3lvX2R5bmFtaWNfbWVtb3J5X3NpemUpOworCXJldHVybiBwOworfQorCisvKioKKyAqIHRvbW95b19mcmVlIC0gUmVsZWFzZSBtZW1vcnkgYWxsb2NhdGVkIGJ5IHRvbW95b19hbGxvYygpLgorICoKKyAqIEBwOiBQb2ludGVyIHJldHVybmVkIGJ5IHRvbW95b19hbGxvYygpLiBNYXkgYmUgTlVMTC4KKyAqCisgKiBSZXR1cm5zIG5vdGhpbmcuCisgKi8KK3ZvaWQgdG9tb3lvX2ZyZWUoY29uc3Qgdm9pZCAqcCkKK3sKKwlpZiAocCkgeworCQlhdG9taWNfc3ViKGtzaXplKHApLCAmdG9tb3lvX2R5bmFtaWNfbWVtb3J5X3NpemUpOworCQlrZnJlZShwKTsKKwl9Cit9CisKKy8qKgorICogdG9tb3lvX3JlYWRfbWVtb3J5X2NvdW50ZXIgLSBDaGVjayBmb3IgbWVtb3J5IHVzYWdlIGluIGJ5dGVzLgorICoKKyAqIEBoZWFkOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciIuCisgKgorICogUmV0dXJucyBtZW1vcnkgdXNhZ2UuCisgKi8KK2ludCB0b21veW9fcmVhZF9tZW1vcnlfY291bnRlcihzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCkKK3sKKwlpZiAoIWhlYWQtPnJlYWRfZW9mKSB7CisJCWNvbnN0IHVuc2lnbmVkIGludCBzaGFyZWQKKwkJCT0gdG9tb3lvX2FsbG9jYXRlZF9tZW1vcnlfZm9yX3NhdmVuYW1lOworCQljb25zdCB1bnNpZ25lZCBpbnQgcHJpdmF0ZQorCQkJPSB0b21veW9fYWxsb2NhdGVkX21lbW9yeV9mb3JfZWxlbWVudHM7CisJCWNvbnN0IHVuc2lnbmVkIGludCBkeW5hbWljCisJCQk9IGF0b21pY19yZWFkKCZ0b21veW9fZHluYW1pY19tZW1vcnlfc2l6ZSk7CisJCWNoYXIgYnVmZmVyWzY0XTsKKworCQltZW1zZXQoYnVmZmVyLCAwLCBzaXplb2YoYnVmZmVyKSk7CisJCWlmICh0b21veW9fcXVvdGFfZm9yX3NhdmVuYW1lKQorCQkJc25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSAtIDEsCisJCQkJICIgICAoUXVvdGE6ICUxMHUpIiwKKwkJCQkgdG9tb3lvX3F1b3RhX2Zvcl9zYXZlbmFtZSk7CisJCWVsc2UKKwkJCWJ1ZmZlclswXSA9ICdcMCc7CisJCXRvbW95b19pb19wcmludGYoaGVhZCwgIlNoYXJlZDogICUxMHUlc1xuIiwgc2hhcmVkLCBidWZmZXIpOworCQlpZiAodG9tb3lvX3F1b3RhX2Zvcl9lbGVtZW50cykKKwkJCXNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikgLSAxLAorCQkJCSAiICAgKFF1b3RhOiAlMTB1KSIsCisJCQkJIHRvbW95b19xdW90YV9mb3JfZWxlbWVudHMpOworCQllbHNlCisJCQlidWZmZXJbMF0gPSAnXDAnOworCQl0b21veW9faW9fcHJpbnRmKGhlYWQsICJQcml2YXRlOiAlMTB1JXNcbiIsIHByaXZhdGUsIGJ1ZmZlcik7CisJCXRvbW95b19pb19wcmludGYoaGVhZCwgIkR5bmFtaWM6ICUxMHVcbiIsIGR5bmFtaWMpOworCQl0b21veW9faW9fcHJpbnRmKGhlYWQsICJUb3RhbDogICAlMTB1XG4iLAorCQkJCSBzaGFyZWQgKyBwcml2YXRlICsgZHluYW1pYyk7CisJCWhlYWQtPnJlYWRfZW9mID0gdHJ1ZTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdG9tb3lvX3dyaXRlX21lbW9yeV9xdW90YSAtIFNldCBtZW1vcnkgcXVvdGEuCisgKgorICogQGhlYWQ6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KKyAqCisgKiBSZXR1cm5zIDAuCisgKi8KK2ludCB0b21veW9fd3JpdGVfbWVtb3J5X3F1b3RhKHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQoreworCWNoYXIgKmRhdGEgPSBoZWFkLT53cml0ZV9idWY7CisJdW5zaWduZWQgaW50IHNpemU7CisKKwlpZiAoc3NjYW5mKGRhdGEsICJTaGFyZWQ6ICV1IiwgJnNpemUpID09IDEpCisJCXRvbW95b19xdW90YV9mb3Jfc2F2ZW5hbWUgPSBzaXplOworCWVsc2UgaWYgKHNzY2FuZihkYXRhLCAiUHJpdmF0ZTogJXUiLCAmc2l6ZSkgPT0gMSkKKwkJdG9tb3lvX3F1b3RhX2Zvcl9lbGVtZW50cyA9IHNpemU7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9zZWN1cml0eS90b21veW8vcmVhbHBhdGguaCBiL3NlY3VyaXR5L3RvbW95by9yZWFscGF0aC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlYzlmYzljCi0tLSAvZGV2L251bGwKKysrIGIvc2VjdXJpdHkvdG9tb3lvL3JlYWxwYXRoLmgKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIHNlY3VyaXR5L3RvbW95by9yZWFscGF0aC5oCisgKgorICogR2V0IHRoZSBjYW5vbmljYWxpemVkIGFic29sdXRlIHBhdGhuYW1lcy4gVGhlIGJhc2lzIGZvciBUT01PWU8uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDkgIE5UVCBEQVRBIENPUlBPUkFUSU9OCisgKgorICogVmVyc2lvbjogMi4yLjAtcHJlICAgMjAwOS8wMi8wMQorICoKKyAqLworCisjaWZuZGVmIF9TRUNVUklUWV9UT01PWU9fUkVBTFBBVEhfSAorI2RlZmluZSBfU0VDVVJJVFlfVE9NT1lPX1JFQUxQQVRIX0gKKworc3RydWN0IHBhdGg7CitzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbzsKK3N0cnVjdCB0b21veW9faW9fYnVmZmVyOworCisvKiBDb252ZXJ0IGJpbmFyeSBzdHJpbmcgdG8gYXNjaWkgc3RyaW5nLiAqLworaW50IHRvbW95b19lbmNvZGUoY2hhciAqYnVmZmVyLCBpbnQgYnVmbGVuLCBjb25zdCBjaGFyICpzdHIpOworCisvKiBSZXR1cm5zIHJlYWxwYXRoKDMpIG9mIHRoZSBnaXZlbiBwYXRobmFtZSBidXQgaWdub3JlcyBjaHJvb3QnZWQgcm9vdC4gKi8KK2ludCB0b21veW9fcmVhbHBhdGhfZnJvbV9wYXRoMihzdHJ1Y3QgcGF0aCAqcGF0aCwgY2hhciAqbmV3bmFtZSwKKwkJCSAgICAgICBpbnQgbmV3bmFtZV9sZW4pOworCisvKgorICogUmV0dXJucyByZWFscGF0aCgzKSBvZiB0aGUgZ2l2ZW4gcGF0aG5hbWUgYnV0IGlnbm9yZXMgY2hyb290J2VkIHJvb3QuCisgKiBUaGVzZSBmdW5jdGlvbnMgdXNlIHRvbW95b19hbGxvYygpLCBzbyB0aGUgY2FsbGVyIG11c3QgY2FsbCB0b21veW9fZnJlZSgpCisgKiBpZiB0aGVzZSBmdW5jdGlvbnMgZGlkbid0IHJldHVybiBOVUxMLgorICovCitjaGFyICp0b21veW9fcmVhbHBhdGgoY29uc3QgY2hhciAqcGF0aG5hbWUpOworLyoKKyAqIFNhbWUgd2l0aCB0b21veW9fcmVhbHBhdGgoKSBleGNlcHQgdGhhdCBpdCBkb2Vzbid0IGZvbGxvdyB0aGUgZmluYWwgc3ltbGluay4KKyAqLworY2hhciAqdG9tb3lvX3JlYWxwYXRoX25vZm9sbG93KGNvbnN0IGNoYXIgKnBhdGhuYW1lKTsKKy8qIFNhbWUgd2l0aCB0b21veW9fcmVhbHBhdGgoKSBleGNlcHQgdGhhdCB0aGUgcGF0aG5hbWUgaXMgYWxyZWFkeSBzb2x2ZWQuICovCitjaGFyICp0b21veW9fcmVhbHBhdGhfZnJvbV9wYXRoKHN0cnVjdCBwYXRoICpwYXRoKTsKKworLyoKKyAqIEFsbG9jYXRlIG1lbW9yeSBmb3IgQUNMIGVudHJ5LgorICogVGhlIFJBTSBpcyBjaHVua2VkLCBzbyBORVZFUiB0cnkgdG8ga2ZyZWUoKSB0aGUgcmV0dXJuZWQgcG9pbnRlci4KKyAqLwordm9pZCAqdG9tb3lvX2FsbG9jX2VsZW1lbnQoY29uc3QgdW5zaWduZWQgaW50IHNpemUpOworCisvKgorICogS2VlcCB0aGUgZ2l2ZW4gbmFtZSBvbiB0aGUgUkFNLgorICogVGhlIFJBTSBpcyBzaGFyZWQsIHNvIE5FVkVSIHRyeSB0byBtb2RpZnkgb3Iga2ZyZWUoKSB0aGUgcmV0dXJuZWQgbmFtZS4KKyAqLworY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnRvbW95b19zYXZlX25hbWUoY29uc3QgY2hhciAqbmFtZSk7CisKKy8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgdGVtcG9yYXJ5IHVzZSAoZS5nLiBwZXJtaXNzaW9uIGNoZWNrcykuICovCit2b2lkICp0b21veW9fYWxsb2MoY29uc3Qgc2l6ZV90IHNpemUpOworCisvKiBGcmVlIG1lbW9yeSBhbGxvY2F0ZWQgYnkgdG9tb3lvX2FsbG9jKCkuICovCit2b2lkIHRvbW95b19mcmVlKGNvbnN0IHZvaWQgKnApOworCisvKiBDaGVjayBmb3IgbWVtb3J5IHVzYWdlLiAqLworaW50IHRvbW95b19yZWFkX21lbW9yeV9jb3VudGVyKHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKTsKKworLyogU2V0IG1lbW9yeSBxdW90YS4gKi8KK2ludCB0b21veW9fd3JpdGVfbWVtb3J5X3F1b3RhKHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKTsKKworLyogSW5pdGlhbGl6ZSByZWFscGF0aCByZWxhdGVkIGNvZGUuICovCit2b2lkIF9faW5pdCB0b21veW9fcmVhbHBhdGhfaW5pdCh2b2lkKTsKKworI2VuZGlmIC8qICFkZWZpbmVkKF9TRUNVUklUWV9UT01PWU9fUkVBTFBBVEhfSCkgKi8KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3RvbW95by90b21veW8uYyBiL3NlY3VyaXR5L3RvbW95by90b21veW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWVlYWUxCi0tLSAvZGV2L251bGwKKysrIGIvc2VjdXJpdHkvdG9tb3lvL3RvbW95by5jCkBAIC0wLDAgKzEsMjk0IEBACisvKgorICogc2VjdXJpdHkvdG9tb3lvL3RvbW95by5jCisgKgorICogTFNNIGhvb2tzIGZvciBUT01PWU8gTGludXguCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDkgIE5UVCBEQVRBIENPUlBPUkFUSU9OCisgKgorICogVmVyc2lvbjogMi4yLjAtcHJlICAgMjAwOS8wMi8wMQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KKyNpbmNsdWRlICJjb21tb24uaCIKKyNpbmNsdWRlICJ0b21veW8uaCIKKyNpbmNsdWRlICJyZWFscGF0aC5oIgorCitzdGF0aWMgaW50IHRvbW95b19jcmVkX3ByZXBhcmUoc3RydWN0IGNyZWQgKm5ldywgY29uc3Qgc3RydWN0IGNyZWQgKm9sZCwKKwkJCSAgICAgICBnZnBfdCBnZnApCit7CisJLyoKKwkgKiBTaW5jZSAic3RydWN0IHRvbW95b19kb21haW5faW5mbyAqIiBpcyBhIHNoYXJhYmxlIHBvaW50ZXIsCisJICogd2UgZG9uJ3QgbmVlZCB0byBkdXBsaWNhdGUuCisJICovCisJbmV3LT5zZWN1cml0eSA9IG9sZC0+c2VjdXJpdHk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdG9tb3lvX2Jwcm1fc2V0X2NyZWRzKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pCit7CisJLyoKKwkgKiBEbyBvbmx5IGlmIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZvciB0aGUgZmlyc3QgdGltZSBvZiBhbiBleGVjdmUKKwkgKiBvcGVyYXRpb24uCisJICovCisJaWYgKGJwcm0tPmNyZWRfcHJlcGFyZWQpCisJCXJldHVybiAwOworCS8qCisJICogTG9hZCBwb2xpY3kgaWYgL3NiaW4vdG9tb3lvLWluaXQgZXhpc3RzIGFuZCAvc2Jpbi9pbml0IGlzIHJlcXVlc3RlZAorCSAqIGZvciB0aGUgZmlyc3QgdGltZS4KKwkgKi8KKwlpZiAoIXRvbW95b19wb2xpY3lfbG9hZGVkKQorCQl0b21veW9fbG9hZF9wb2xpY3koYnBybS0+ZmlsZW5hbWUpOworCS8qCisJICogVGVsbCB0b21veW9fYnBybV9jaGVja19zZWN1cml0eSgpIGlzIGNhbGxlZCBmb3IgdGhlIGZpcnN0IHRpbWUgb2YgYW4KKwkgKiBleGVjdmUgb3BlcmF0aW9uLgorCSAqLworCWJwcm0tPmNyZWQtPnNlY3VyaXR5ID0gTlVMTDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0b21veW9fYnBybV9jaGVja19zZWN1cml0eShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKQoreworCXN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiA9IGJwcm0tPmNyZWQtPnNlY3VyaXR5OworCisJLyoKKwkgKiBFeGVjdXRlIHBlcm1pc3Npb24gaXMgY2hlY2tlZCBhZ2FpbnN0IHBhdGhuYW1lIHBhc3NlZCB0byBkb19leGVjdmUoKQorCSAqIHVzaW5nIGN1cnJlbnQgZG9tYWluLgorCSAqLworCWlmICghZG9tYWluKSB7CisJCXN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKm5leHRfZG9tYWluID0gTlVMTDsKKwkJaW50IHJldHZhbCA9IHRvbW95b19maW5kX25leHRfZG9tYWluKGJwcm0sICZuZXh0X2RvbWFpbik7CisKKwkJaWYgKCFyZXR2YWwpCisJCQlicHJtLT5jcmVkLT5zZWN1cml0eSA9IG5leHRfZG9tYWluOworCQlyZXR1cm4gcmV0dmFsOworCX0KKwkvKgorCSAqIFJlYWQgcGVybWlzc2lvbiBpcyBjaGVja2VkIGFnYWluc3QgaW50ZXJwcmV0ZXJzIHVzaW5nIG5leHQgZG9tYWluLgorCSAqICcxJyBpcyB0aGUgcmVzdWx0IG9mIG9wZW5fdG9fbmFtZWlfZmxhZ3MoT19SRE9OTFkpLgorCSAqLworCXJldHVybiB0b21veW9fY2hlY2tfb3Blbl9wZXJtaXNzaW9uKGRvbWFpbiwgJmJwcm0tPmZpbGUtPmZfcGF0aCwgMSk7Cit9CisKKyNpZmRlZiBDT05GSUdfU1lTQ1RMCisKK3N0YXRpYyBpbnQgdG9tb3lvX3ByZXBlbmQoY2hhciAqKmJ1ZmZlciwgaW50ICpidWZsZW4sIGNvbnN0IGNoYXIgKnN0cikKK3sKKwlpbnQgbmFtZWxlbiA9IHN0cmxlbihzdHIpOworCisJaWYgKCpidWZsZW4gPCBuYW1lbGVuKQorCQlyZXR1cm4gLUVOT01FTTsKKwkqYnVmbGVuIC09IG5hbWVsZW47CisJKmJ1ZmZlciAtPSBuYW1lbGVuOworCW1lbWNweSgqYnVmZmVyLCBzdHIsIG5hbWVsZW4pOworCXJldHVybiAwOworfQorCisvKioKKyAqIHRvbW95b19zeXNjdGxfcGF0aCAtIHJldHVybiB0aGUgcmVhbHBhdGggb2YgYSBjdGxfdGFibGUuCisgKiBAdGFibGU6IHBvaW50ZXIgdG8gInN0cnVjdCBjdGxfdGFibGUiLgorICoKKyAqIFJldHVybnMgcmVhbHBhdGgoMykgb2YgdGhlIEB0YWJsZSBvbiBzdWNjZXNzLgorICogUmV0dXJucyBOVUxMIG9uIGZhaWx1cmUuCisgKgorICogVGhpcyBmdW5jdGlvbiB1c2VzIHRvbW95b19hbGxvYygpLCBzbyB0aGUgY2FsbGVyIG11c3QgY2FsbCB0b21veW9fZnJlZSgpCisgKiBpZiB0aGlzIGZ1bmN0aW9uIGRpZG4ndCByZXR1cm4gTlVMTC4KKyAqLworc3RhdGljIGNoYXIgKnRvbW95b19zeXNjdGxfcGF0aChzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSkKK3sKKwlpbnQgYnVmbGVuID0gVE9NT1lPX01BWF9QQVRITkFNRV9MRU47CisJY2hhciAqYnVmID0gdG9tb3lvX2FsbG9jKGJ1Zmxlbik7CisJY2hhciAqZW5kID0gYnVmICsgYnVmbGVuOworCWludCBlcnJvciA9IC1FTk9NRU07CisKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIE5VTEw7CisKKwkqLS1lbmQgPSAnXDAnOworCWJ1Zmxlbi0tOworCXdoaWxlICh0YWJsZSkgeworCQljaGFyIG51bVszMl07CisJCWNvbnN0IGNoYXIgKnNwID0gdGFibGUtPnByb2NuYW1lOworCisJCWlmICghc3ApIHsKKwkJCW1lbXNldChudW0sIDAsIHNpemVvZihudW0pKTsKKwkJCXNucHJpbnRmKG51bSwgc2l6ZW9mKG51bSkgLSAxLCAiPSVkPSIsIHRhYmxlLT5jdGxfbmFtZSk7CisJCQlzcCA9IG51bTsKKwkJfQorCQlpZiAodG9tb3lvX3ByZXBlbmQoJmVuZCwgJmJ1Zmxlbiwgc3ApIHx8CisJCSAgICB0b21veW9fcHJlcGVuZCgmZW5kLCAmYnVmbGVuLCAiLyIpKQorCQkJZ290byBvdXQ7CisJCXRhYmxlID0gdGFibGUtPnBhcmVudDsKKwl9CisJaWYgKHRvbW95b19wcmVwZW5kKCZlbmQsICZidWZsZW4sICIvcHJvYy9zeXMiKSkKKwkJZ290byBvdXQ7CisJZXJyb3IgPSB0b21veW9fZW5jb2RlKGJ1ZiwgZW5kIC0gYnVmLCBlbmQpOworIG91dDoKKwlpZiAoIWVycm9yKQorCQlyZXR1cm4gYnVmOworCXRvbW95b19mcmVlKGJ1Zik7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgdG9tb3lvX3N5c2N0bChzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IG9wKQoreworCWludCBlcnJvcjsKKwljaGFyICpuYW1lOworCisJb3AgJj0gTUFZX1JFQUQgfCBNQVlfV1JJVEU7CisJaWYgKCFvcCkKKwkJcmV0dXJuIDA7CisJbmFtZSA9IHRvbW95b19zeXNjdGxfcGF0aCh0YWJsZSk7CisJaWYgKCFuYW1lKQorCQlyZXR1cm4gLUVOT01FTTsKKwllcnJvciA9IHRvbW95b19jaGVja19maWxlX3Blcm0odG9tb3lvX2RvbWFpbigpLCBuYW1lLCBvcCk7CisJdG9tb3lvX2ZyZWUobmFtZSk7CisJcmV0dXJuIGVycm9yOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgdG9tb3lvX3BhdGhfdHJ1bmNhdGUoc3RydWN0IHBhdGggKnBhdGgsIGxvZmZfdCBsZW5ndGgsCisJCQkJdW5zaWduZWQgaW50IHRpbWVfYXR0cnMpCit7CisJcmV0dXJuIHRvbW95b19jaGVja18xcGF0aF9wZXJtKHRvbW95b19kb21haW4oKSwKKwkJCQkgICAgICAgVE9NT1lPX1RZUEVfVFJVTkNBVEVfQUNMLAorCQkJCSAgICAgICBwYXRoKTsKK30KKworc3RhdGljIGludCB0b21veW9fcGF0aF91bmxpbmsoc3RydWN0IHBhdGggKnBhcmVudCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQoreworCXN0cnVjdCBwYXRoIHBhdGggPSB7IHBhcmVudC0+bW50LCBkZW50cnkgfTsKKwlyZXR1cm4gdG9tb3lvX2NoZWNrXzFwYXRoX3Blcm0odG9tb3lvX2RvbWFpbigpLAorCQkJCSAgICAgICBUT01PWU9fVFlQRV9VTkxJTktfQUNMLAorCQkJCSAgICAgICAmcGF0aCk7Cit9CisKK3N0YXRpYyBpbnQgdG9tb3lvX3BhdGhfbWtkaXIoc3RydWN0IHBhdGggKnBhcmVudCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAorCQkJICAgICBpbnQgbW9kZSkKK3sKKwlzdHJ1Y3QgcGF0aCBwYXRoID0geyBwYXJlbnQtPm1udCwgZGVudHJ5IH07CisJcmV0dXJuIHRvbW95b19jaGVja18xcGF0aF9wZXJtKHRvbW95b19kb21haW4oKSwKKwkJCQkgICAgICAgVE9NT1lPX1RZUEVfTUtESVJfQUNMLAorCQkJCSAgICAgICAmcGF0aCk7Cit9CisKK3N0YXRpYyBpbnQgdG9tb3lvX3BhdGhfcm1kaXIoc3RydWN0IHBhdGggKnBhcmVudCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQoreworCXN0cnVjdCBwYXRoIHBhdGggPSB7IHBhcmVudC0+bW50LCBkZW50cnkgfTsKKwlyZXR1cm4gdG9tb3lvX2NoZWNrXzFwYXRoX3Blcm0odG9tb3lvX2RvbWFpbigpLAorCQkJCSAgICAgICBUT01PWU9fVFlQRV9STURJUl9BQ0wsCisJCQkJICAgICAgICZwYXRoKTsKK30KKworc3RhdGljIGludCB0b21veW9fcGF0aF9zeW1saW5rKHN0cnVjdCBwYXRoICpwYXJlbnQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKKwkJCSAgICAgICBjb25zdCBjaGFyICpvbGRfbmFtZSkKK3sKKwlzdHJ1Y3QgcGF0aCBwYXRoID0geyBwYXJlbnQtPm1udCwgZGVudHJ5IH07CisJcmV0dXJuIHRvbW95b19jaGVja18xcGF0aF9wZXJtKHRvbW95b19kb21haW4oKSwKKwkJCQkgICAgICAgVE9NT1lPX1RZUEVfU1lNTElOS19BQ0wsCisJCQkJICAgICAgICZwYXRoKTsKK30KKworc3RhdGljIGludCB0b21veW9fcGF0aF9ta25vZChzdHJ1Y3QgcGF0aCAqcGFyZW50LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCisJCQkgICAgIGludCBtb2RlLCB1bnNpZ25lZCBpbnQgZGV2KQoreworCXN0cnVjdCBwYXRoIHBhdGggPSB7IHBhcmVudC0+bW50LCBkZW50cnkgfTsKKwlpbnQgdHlwZSA9IFRPTU9ZT19UWVBFX0NSRUFURV9BQ0w7CisKKwlzd2l0Y2ggKG1vZGUgJiBTX0lGTVQpIHsKKwljYXNlIFNfSUZDSFI6CisJCXR5cGUgPSBUT01PWU9fVFlQRV9NS0NIQVJfQUNMOworCQlicmVhazsKKwljYXNlIFNfSUZCTEs6CisJCXR5cGUgPSBUT01PWU9fVFlQRV9NS0JMT0NLX0FDTDsKKwkJYnJlYWs7CisJY2FzZSBTX0lGSUZPOgorCQl0eXBlID0gVE9NT1lPX1RZUEVfTUtGSUZPX0FDTDsKKwkJYnJlYWs7CisJY2FzZSBTX0lGU09DSzoKKwkJdHlwZSA9IFRPTU9ZT19UWVBFX01LU09DS19BQ0w7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gdG9tb3lvX2NoZWNrXzFwYXRoX3Blcm0odG9tb3lvX2RvbWFpbigpLAorCQkJCSAgICAgICB0eXBlLCAmcGF0aCk7Cit9CisKK3N0YXRpYyBpbnQgdG9tb3lvX3BhdGhfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgcGF0aCAqbmV3X2RpciwKKwkJCSAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KQoreworCXN0cnVjdCBwYXRoIHBhdGgxID0geyBuZXdfZGlyLT5tbnQsIG9sZF9kZW50cnkgfTsKKwlzdHJ1Y3QgcGF0aCBwYXRoMiA9IHsgbmV3X2Rpci0+bW50LCBuZXdfZGVudHJ5IH07CisJcmV0dXJuIHRvbW95b19jaGVja18ycGF0aF9wZXJtKHRvbW95b19kb21haW4oKSwKKwkJCQkgICAgICAgVE9NT1lPX1RZUEVfTElOS19BQ0wsCisJCQkJICAgICAgICZwYXRoMSwgJnBhdGgyKTsKK30KKworc3RhdGljIGludCB0b21veW9fcGF0aF9yZW5hbWUoc3RydWN0IHBhdGggKm9sZF9wYXJlbnQsCisJCQkgICAgICBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LAorCQkJICAgICAgc3RydWN0IHBhdGggKm5ld19wYXJlbnQsCisJCQkgICAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KQoreworCXN0cnVjdCBwYXRoIHBhdGgxID0geyBvbGRfcGFyZW50LT5tbnQsIG9sZF9kZW50cnkgfTsKKwlzdHJ1Y3QgcGF0aCBwYXRoMiA9IHsgbmV3X3BhcmVudC0+bW50LCBuZXdfZGVudHJ5IH07CisJcmV0dXJuIHRvbW95b19jaGVja18ycGF0aF9wZXJtKHRvbW95b19kb21haW4oKSwKKwkJCQkgICAgICAgVE9NT1lPX1RZUEVfUkVOQU1FX0FDTCwKKwkJCQkgICAgICAgJnBhdGgxLCAmcGF0aDIpOworfQorCitzdGF0aWMgaW50IHRvbW95b19maWxlX2ZjbnRsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLAorCQkJICAgICB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlpZiAoY21kID09IEZfU0VURkwgJiYgKChhcmcgXiBmaWxlLT5mX2ZsYWdzKSAmIE9fQVBQRU5EKSkKKwkJcmV0dXJuIHRvbW95b19jaGVja19yZXdyaXRlX3Blcm1pc3Npb24odG9tb3lvX2RvbWFpbigpLCBmaWxlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0b21veW9fZGVudHJ5X29wZW4oc3RydWN0IGZpbGUgKmYsIGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkKQoreworCWludCBmbGFncyA9IGYtPmZfZmxhZ3M7CisKKwlpZiAoKGZsYWdzICsgMSkgJiBPX0FDQ01PREUpCisJCWZsYWdzKys7CisJZmxhZ3MgfD0gZi0+Zl9mbGFncyAmIChPX0FQUEVORCB8IE9fVFJVTkMpOworCS8qIERvbid0IGNoZWNrIHJlYWQgcGVybWlzc2lvbiBoZXJlIGlmIGNhbGxlZCBmcm9tIGRvX2V4ZWN2ZSgpLiAqLworCWlmIChjdXJyZW50LT5pbl9leGVjdmUpCisJCXJldHVybiAwOworCXJldHVybiB0b21veW9fY2hlY2tfb3Blbl9wZXJtaXNzaW9uKHRvbW95b19kb21haW4oKSwgJmYtPmZfcGF0aCwgZmxhZ3MpOworfQorCitzdGF0aWMgc3RydWN0IHNlY3VyaXR5X29wZXJhdGlvbnMgdG9tb3lvX3NlY3VyaXR5X29wcyA9IHsKKwkubmFtZSAgICAgICAgICAgICAgICA9ICJ0b21veW8iLAorCS5jcmVkX3ByZXBhcmUgICAgICAgID0gdG9tb3lvX2NyZWRfcHJlcGFyZSwKKwkuYnBybV9zZXRfY3JlZHMgICAgICA9IHRvbW95b19icHJtX3NldF9jcmVkcywKKwkuYnBybV9jaGVja19zZWN1cml0eSA9IHRvbW95b19icHJtX2NoZWNrX3NlY3VyaXR5LAorI2lmZGVmIENPTkZJR19TWVNDVEwKKwkuc3lzY3RsICAgICAgICAgICAgICA9IHRvbW95b19zeXNjdGwsCisjZW5kaWYKKwkuZmlsZV9mY250bCAgICAgICAgICA9IHRvbW95b19maWxlX2ZjbnRsLAorCS5kZW50cnlfb3BlbiAgICAgICAgID0gdG9tb3lvX2RlbnRyeV9vcGVuLAorCS5wYXRoX3RydW5jYXRlICAgICAgID0gdG9tb3lvX3BhdGhfdHJ1bmNhdGUsCisJLnBhdGhfdW5saW5rICAgICAgICAgPSB0b21veW9fcGF0aF91bmxpbmssCisJLnBhdGhfbWtkaXIgICAgICAgICAgPSB0b21veW9fcGF0aF9ta2RpciwKKwkucGF0aF9ybWRpciAgICAgICAgICA9IHRvbW95b19wYXRoX3JtZGlyLAorCS5wYXRoX3N5bWxpbmsgICAgICAgID0gdG9tb3lvX3BhdGhfc3ltbGluaywKKwkucGF0aF9ta25vZCAgICAgICAgICA9IHRvbW95b19wYXRoX21rbm9kLAorCS5wYXRoX2xpbmsgICAgICAgICAgID0gdG9tb3lvX3BhdGhfbGluaywKKwkucGF0aF9yZW5hbWUgICAgICAgICA9IHRvbW95b19wYXRoX3JlbmFtZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHRvbW95b19pbml0KHZvaWQpCit7CisJc3RydWN0IGNyZWQgKmNyZWQgPSAoc3RydWN0IGNyZWQgKikgY3VycmVudF9jcmVkKCk7CisKKwlpZiAoIXNlY3VyaXR5X21vZHVsZV9lbmFibGUoJnRvbW95b19zZWN1cml0eV9vcHMpKQorCQlyZXR1cm4gMDsKKwkvKiByZWdpc3RlciBvdXJzZWx2ZXMgd2l0aCB0aGUgc2VjdXJpdHkgZnJhbWV3b3JrICovCisJaWYgKHJlZ2lzdGVyX3NlY3VyaXR5KCZ0b21veW9fc2VjdXJpdHlfb3BzKSkKKwkJcGFuaWMoIkZhaWx1cmUgcmVnaXN0ZXJpbmcgVE9NT1lPIExpbnV4Iik7CisJcHJpbnRrKEtFUk5fSU5GTyAiVE9NT1lPIExpbnV4IGluaXRpYWxpemVkXG4iKTsKKwljcmVkLT5zZWN1cml0eSA9ICZ0b21veW9fa2VybmVsX2RvbWFpbjsKKwl0b21veW9fcmVhbHBhdGhfaW5pdCgpOworCXJldHVybiAwOworfQorCitzZWN1cml0eV9pbml0Y2FsbCh0b21veW9faW5pdCk7CmRpZmYgLS1naXQgYS9zZWN1cml0eS90b21veW8vdG9tb3lvLmggYi9zZWN1cml0eS90b21veW8vdG9tb3lvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBjOGY2ZQotLS0gL2Rldi9udWxsCisrKyBiL3NlY3VyaXR5L3RvbW95by90b21veW8uaApAQCAtMCwwICsxLDEwNiBAQAorLyoKKyAqIHNlY3VyaXR5L3RvbW95by90b21veW8uaAorICoKKyAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBEb21haW4tQmFzZWQgTWFuZGF0b3J5IEFjY2VzcyBDb250cm9sLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA5ICBOVFQgREFUQSBDT1JQT1JBVElPTgorICoKKyAqIFZlcnNpb246IDIuMi4wLXByZSAgIDIwMDkvMDIvMDEKKyAqCisgKi8KKworI2lmbmRlZiBfU0VDVVJJVFlfVE9NT1lPX1RPTU9ZT19ICisjZGVmaW5lIF9TRUNVUklUWV9UT01PWU9fVE9NT1lPX0gKKworc3RydWN0IHRvbW95b19wYXRoX2luZm87CitzdHJ1Y3QgcGF0aDsKK3N0cnVjdCBpbm9kZTsKK3N0cnVjdCBsaW51eF9iaW5wcm07CitzdHJ1Y3QgcHRfcmVnczsKK3N0cnVjdCB0b21veW9fcGFnZV9idWZmZXI7CisKK2ludCB0b21veW9fY2hlY2tfZmlsZV9wZXJtKHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiwKKwkJCSAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCB1OCBwZXJtKTsKK2ludCB0b21veW9fY2hlY2tfZXhlY19wZXJtKHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiwKKwkJCSAgIGNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpmaWxlbmFtZSwKKwkJCSAgIHN0cnVjdCB0b21veW9fcGFnZV9idWZmZXIgKmJ1Zik7CitpbnQgdG9tb3lvX2NoZWNrX29wZW5fcGVybWlzc2lvbihzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4sCisJCQkJIHN0cnVjdCBwYXRoICpwYXRoLCBjb25zdCBpbnQgZmxhZyk7CitpbnQgdG9tb3lvX2NoZWNrXzFwYXRoX3Blcm0oc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluLAorCQkJICAgIGNvbnN0IHU4IG9wZXJhdGlvbiwgc3RydWN0IHBhdGggKnBhdGgpOworaW50IHRvbW95b19jaGVja18ycGF0aF9wZXJtKHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiwKKwkJCSAgICBjb25zdCB1OCBvcGVyYXRpb24sIHN0cnVjdCBwYXRoICpwYXRoMSwKKwkJCSAgICBzdHJ1Y3QgcGF0aCAqcGF0aDIpOworaW50IHRvbW95b19jaGVja19yZXdyaXRlX3Blcm1pc3Npb24oc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluLAorCQkJCSAgICBzdHJ1Y3QgZmlsZSAqZmlscCk7CitpbnQgdG9tb3lvX2ZpbmRfbmV4dF9kb21haW4oc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSwKKwkJCSAgICBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICoqbmV4dF9kb21haW4pOworCisvKiBJbmRleCBudW1iZXJzIGZvciBBY2Nlc3MgQ29udHJvbHMuICovCisKKyNkZWZpbmUgVE9NT1lPX1RZUEVfU0lOR0xFX1BBVEhfQUNMICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFRPTU9ZT19UWVBFX0RPVUJMRV9QQVRIX0FDTCAgICAgICAgICAgICAgICAgMQorCisvKiBJbmRleCBudW1iZXJzIGZvciBGaWxlIENvbnRyb2xzLiAqLworCisvKgorICogVFlQRV9SRUFEX1dSSVRFX0FDTCBpcyBzcGVjaWFsLiBUWVBFX1JFQURfV1JJVEVfQUNMIGlzIGF1dG9tYXRpY2FsbHkgc2V0CisgKiBpZiBib3RoIFRZUEVfUkVBRF9BQ0wgYW5kIFRZUEVfV1JJVEVfQUNMIGFyZSBzZXQuIEJvdGggVFlQRV9SRUFEX0FDTCBhbmQKKyAqIFRZUEVfV1JJVEVfQUNMIGFyZSBhdXRvbWF0aWNhbGx5IHNldCBpZiBUWVBFX1JFQURfV1JJVEVfQUNMIGlzIHNldC4KKyAqIFRZUEVfUkVBRF9XUklURV9BQ0wgaXMgYXV0b21hdGljYWxseSBjbGVhcmVkIGlmIGVpdGhlciBUWVBFX1JFQURfQUNMIG9yCisgKiBUWVBFX1dSSVRFX0FDTCBpcyBjbGVhcmVkLiBCb3RoIFRZUEVfUkVBRF9BQ0wgYW5kIFRZUEVfV1JJVEVfQUNMIGFyZQorICogYXV0b21hdGljYWxseSBjbGVhcmVkIGlmIFRZUEVfUkVBRF9XUklURV9BQ0wgaXMgY2xlYXJlZC4KKyAqLworCisjZGVmaW5lIFRPTU9ZT19UWVBFX1JFQURfV1JJVEVfQUNMICAgIDAKKyNkZWZpbmUgVE9NT1lPX1RZUEVfRVhFQ1VURV9BQ0wgICAgICAgMQorI2RlZmluZSBUT01PWU9fVFlQRV9SRUFEX0FDTCAgICAgICAgICAyCisjZGVmaW5lIFRPTU9ZT19UWVBFX1dSSVRFX0FDTCAgICAgICAgIDMKKyNkZWZpbmUgVE9NT1lPX1RZUEVfQ1JFQVRFX0FDTCAgICAgICAgNAorI2RlZmluZSBUT01PWU9fVFlQRV9VTkxJTktfQUNMICAgICAgICA1CisjZGVmaW5lIFRPTU9ZT19UWVBFX01LRElSX0FDTCAgICAgICAgIDYKKyNkZWZpbmUgVE9NT1lPX1RZUEVfUk1ESVJfQUNMICAgICAgICAgNworI2RlZmluZSBUT01PWU9fVFlQRV9NS0ZJRk9fQUNMICAgICAgICA4CisjZGVmaW5lIFRPTU9ZT19UWVBFX01LU09DS19BQ0wgICAgICAgIDkKKyNkZWZpbmUgVE9NT1lPX1RZUEVfTUtCTE9DS19BQ0wgICAgICAxMAorI2RlZmluZSBUT01PWU9fVFlQRV9NS0NIQVJfQUNMICAgICAgIDExCisjZGVmaW5lIFRPTU9ZT19UWVBFX1RSVU5DQVRFX0FDTCAgICAgMTIKKyNkZWZpbmUgVE9NT1lPX1RZUEVfU1lNTElOS19BQ0wgICAgICAxMworI2RlZmluZSBUT01PWU9fVFlQRV9SRVdSSVRFX0FDTCAgICAgIDE0CisjZGVmaW5lIFRPTU9ZT19NQVhfU0lOR0xFX1BBVEhfT1BFUkFUSU9OIDE1CisKKyNkZWZpbmUgVE9NT1lPX1RZUEVfTElOS19BQ0wgICAgICAgICAwCisjZGVmaW5lIFRPTU9ZT19UWVBFX1JFTkFNRV9BQ0wgICAgICAgMQorI2RlZmluZSBUT01PWU9fTUFYX0RPVUJMRV9QQVRIX09QRVJBVElPTiAyCisKKyNkZWZpbmUgVE9NT1lPX0RPTUFJTlBPTElDWSAgICAgICAgICAwCisjZGVmaW5lIFRPTU9ZT19FWENFUFRJT05QT0xJQ1kgICAgICAgMQorI2RlZmluZSBUT01PWU9fRE9NQUlOX1NUQVRVUyAgICAgICAgIDIKKyNkZWZpbmUgVE9NT1lPX1BST0NFU1NfU1RBVFVTICAgICAgICAzCisjZGVmaW5lIFRPTU9ZT19NRU1JTkZPICAgICAgICAgICAgICAgNAorI2RlZmluZSBUT01PWU9fU0VMRkRPTUFJTiAgICAgICAgICAgIDUKKyNkZWZpbmUgVE9NT1lPX1ZFUlNJT04gICAgICAgICAgICAgICA2CisjZGVmaW5lIFRPTU9ZT19QUk9GSUxFICAgICAgICAgICAgICAgNworI2RlZmluZSBUT01PWU9fTUFOQUdFUiAgICAgICAgICAgICAgIDgKKworZXh0ZXJuIHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gdG9tb3lvX2tlcm5lbF9kb21haW47CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqdG9tb3lvX2RvbWFpbih2b2lkKQoreworCXJldHVybiBjdXJyZW50X2NyZWQoKS0+c2VjdXJpdHk7Cit9CisKKy8qIENhbGxlciBob2xkcyB0YXNrbGlzdF9sb2NrIHNwaW5sb2NrLiAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICp0b21veW9fcmVhbF9kb21haW4oc3RydWN0IHRhc2tfc3RydWN0CisJCQkJCQkJICAgICp0YXNrKQoreworCS8qKioqKiBDUklUSUNBTCBTRUNUSU9OIFNUQVJUICoqKioqLworCWNvbnN0IHN0cnVjdCBjcmVkICpjcmVkID0gZ2V0X3Rhc2tfY3JlZCh0YXNrKTsKKwlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4gPSBjcmVkLT5zZWN1cml0eTsKKworCXB1dF9jcmVkKGNyZWQpOworCXJldHVybiBkb21haW47CisJLyoqKioqIENSSVRJQ0FMIFNFQ1RJT04gRU5EICoqKioqLworfQorCisjZW5kaWYgLyogIWRlZmluZWQoX1NFQ1VSSVRZX1RPTU9ZT19UT01PWU9fSCkgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL0tjb25maWcgYi9zb3VuZC9LY29uZmlnCmluZGV4IDIwMGFjYTEuLjFlY2ViODUgMTAwNjQ0Ci0tLSBhL3NvdW5kL0tjb25maWcKKysrIGIvc291bmQvS2NvbmZpZwpAQCAtNjAsNiArNjAsOCBAQAogCiBzb3VyY2UgInNvdW5kL2FybS9LY29uZmlnIgogCitzb3VyY2UgInNvdW5kL2F0bWVsL0tjb25maWciCisKIHNvdXJjZSAic291bmQvc3BpL0tjb25maWciCiAKIHNvdXJjZSAic291bmQvbWlwcy9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvc291bmQvTWFrZWZpbGUgYi9zb3VuZC9NYWtlZmlsZQppbmRleCBjNzZkNzA3Li5lYzQ2N2RlIDEwMDY0NAotLS0gYS9zb3VuZC9NYWtlZmlsZQorKysgYi9zb3VuZC9NYWtlZmlsZQpAQCAtNiw3ICs2LDcgQEAKIG9iai0kKENPTkZJR19TT1VORF9QUklNRSkgKz0gb3NzLwogb2JqLSQoQ09ORklHX0RNQVNPVU5EKSArPSBvc3MvCiBvYmotJChDT05GSUdfU05EKSArPSBjb3JlLyBpMmMvIGRyaXZlcnMvIGlzYS8gcGNpLyBwcGMvIGFybS8gc2gvIHN5bnRoLyB1c2IvIFwKLQlzcGFyYy8gc3BpLyBwYXJpc2MvIHBjbWNpYS8gbWlwcy8gc29jLworCXNwYXJjLyBzcGkvIHBhcmlzYy8gcGNtY2lhLyBtaXBzLyBzb2MvIGF0bWVsLwogb2JqLSQoQ09ORklHX1NORF9BT0EpICs9IGFvYS8KIAogIyBUaGlzIG9uZSBtdXN0IGJlIGNvbXBpbGFibGUgZXZlbiBpZiBzb3VuZCBpcyBjb25maWd1cmVkIG91dApkaWZmIC0tZ2l0IGEvc291bmQvYW9hL2FvYS1ncGlvLmggYi9zb3VuZC9hb2EvYW9hLWdwaW8uaAppbmRleCBlZTY0ZjVkLi42MDY1YjAzIDEwMDY0NAotLS0gYS9zb3VuZC9hb2EvYW9hLWdwaW8uaAorKysgYi9zb3VuZC9hb2EvYW9hLWdwaW8uaApAQCAtMzQsMTAgKzM0LDEyIEBACiAJdm9pZCAoKnNldF9oZWFkcGhvbmUpKHN0cnVjdCBncGlvX3J1bnRpbWUgKnJ0LCBpbnQgb24pOwogCXZvaWQgKCpzZXRfc3BlYWtlcnMpKHN0cnVjdCBncGlvX3J1bnRpbWUgKnJ0LCBpbnQgb24pOwogCXZvaWQgKCpzZXRfbGluZW91dCkoc3RydWN0IGdwaW9fcnVudGltZSAqcnQsIGludCBvbik7CisJdm9pZCAoKnNldF9tYXN0ZXIpKHN0cnVjdCBncGlvX3J1bnRpbWUgKnJ0LCBpbnQgb24pOwogCiAJaW50ICgqZ2V0X2hlYWRwaG9uZSkoc3RydWN0IGdwaW9fcnVudGltZSAqcnQpOwogCWludCAoKmdldF9zcGVha2Vycykoc3RydWN0IGdwaW9fcnVudGltZSAqcnQpOwogCWludCAoKmdldF9saW5lb3V0KShzdHJ1Y3QgZ3Bpb19ydW50aW1lICpydCk7CisJaW50ICgqZ2V0X21hc3Rlcikoc3RydWN0IGdwaW9fcnVudGltZSAqcnQpOwogCiAJdm9pZCAoKnNldF9od19yZXNldCkoc3RydWN0IGdwaW9fcnVudGltZSAqcnQsIGludCBvbik7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL2FvYS9jb3JlL2Fsc2EuYyBiL3NvdW5kL2FvYS9jb3JlL2Fsc2EuYwppbmRleCA2MTc4NTA0Li4wZmEzODU1IDEwMDY0NAotLS0gYS9zb3VuZC9hb2EvY29yZS9hbHNhLmMKKysrIGIvc291bmQvYW9hL2NvcmUvYWxzYS5jCkBAIC0yMyw5ICsyMywxMCBAQAogCQkvKiBjYW5ub3QgYmUgRUVYSVNUIGR1ZSB0byB1c2FnZSBpbiBhb2FfZmFicmljX3JlZ2lzdGVyICovCiAJCXJldHVybiAtRUJVU1k7CiAKLQlhbHNhX2NhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXgsIG5hbWUsIG1vZCwgc2l6ZW9mKHN0cnVjdCBhb2FfY2FyZCkpOwotCWlmICghYWxzYV9jYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXgsIG5hbWUsIG1vZCwgc2l6ZW9mKHN0cnVjdCBhb2FfY2FyZCksCisJCQkgICAgICAmYWxzYV9jYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAlhb2FfY2FyZCA9IGFsc2FfY2FyZC0+cHJpdmF0ZV9kYXRhOwogCWFvYV9jYXJkLT5hbHNhX2NhcmQgPSBhbHNhX2NhcmQ7CiAJYWxzYV9jYXJkLT5kZXYgPSBkZXY7CmRpZmYgLS1naXQgYS9zb3VuZC9hb2EvY29yZS9ncGlvLWZlYXR1cmUuYyBiL3NvdW5kL2FvYS9jb3JlL2dwaW8tZmVhdHVyZS5jCmluZGV4IGM5M2FkNWQuLmRlOGUwM2EgMTAwNjQ0Ci0tLSBhL3NvdW5kL2FvYS9jb3JlL2dwaW8tZmVhdHVyZS5jCisrKyBiL3NvdW5kL2FvYS9jb3JlL2dwaW8tZmVhdHVyZS5jCkBAIC0xNCw3ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSAiLi4vYW9hLmgiCiAKLS8qIFRPRE86IHRoZXNlIGFyZSAyMCBnbG9iYWwgdmFyaWFibGVzCisvKiBUT0RPOiB0aGVzZSBhcmUgbG90cyBvZiBnbG9iYWwgdmFyaWFibGVzCiAgKiB0aGF0IGFyZW4ndCB1c2VkIG9uIG1vc3QgbWFjaGluZXMuLi4KICAqIE1vdmUgdGhlbSBpbnRvIGEgZHluYW1pY2FsbHkgYWxsb2NhdGVkCiAgKiBzdHJ1Y3R1cmUgYW5kIHVzZSB0aGF0LgpAQCAtMjMsNiArMjMsNyBAQAogLyogdGhlc2UgYXJlIHRoZSBHUElPIG51bWJlcnMgKHJlZ2lzdGVyIGFkZHJlc3NlcyBhcyBvZmZzZXRzIGludG8KICAqIHRoZSBHUElPIHNwYWNlKSAqLwogc3RhdGljIGludCBoZWFkcGhvbmVfbXV0ZV9ncGlvOworc3RhdGljIGludCBtYXN0ZXJfbXV0ZV9ncGlvOwogc3RhdGljIGludCBhbXBfbXV0ZV9ncGlvOwogc3RhdGljIGludCBsaW5lb3V0X211dGVfZ3BpbzsKIHN0YXRpYyBpbnQgaHdfcmVzZXRfZ3BpbzsKQEAgLTMyLDYgKzMzLDcgQEAKIAogLyogc2VlIHRoZSBTV0lUQ0hfR1BJTyBtYWNybyAqLwogc3RhdGljIGludCBoZWFkcGhvbmVfbXV0ZV9ncGlvX2FjdGl2ZXN0YXRlOworc3RhdGljIGludCBtYXN0ZXJfbXV0ZV9ncGlvX2FjdGl2ZXN0YXRlOwogc3RhdGljIGludCBhbXBfbXV0ZV9ncGlvX2FjdGl2ZXN0YXRlOwogc3RhdGljIGludCBsaW5lb3V0X211dGVfZ3Bpb19hY3RpdmVzdGF0ZTsKIHN0YXRpYyBpbnQgaHdfcmVzZXRfZ3Bpb19hY3RpdmVzdGF0ZTsKQEAgLTE1Niw2ICsxNTgsNyBAQAogRlRSX0dQSU8oaGVhZHBob25lLCAwKTsKIEZUUl9HUElPKGFtcCwgMSk7CiBGVFJfR1BJTyhsaW5lb3V0LCAyKTsKK0ZUUl9HUElPKG1hc3RlciwgMyk7CiAKIHN0YXRpYyB2b2lkIGZ0cl9ncGlvX3NldF9od19yZXNldChzdHJ1Y3QgZ3Bpb19ydW50aW1lICpydCwgaW50IG9uKQogewpAQCAtMTcyLDYgKzE3NSw4IEBACiAJCQkgIGh3X3Jlc2V0X2dwaW8sIHYpOwogfQogCitzdGF0aWMgc3RydWN0IGdwaW9fbWV0aG9kcyBtZXRob2RzOworCiBzdGF0aWMgdm9pZCBmdHJfZ3Bpb19hbGxfYW1wc19vZmYoc3RydWN0IGdwaW9fcnVudGltZSAqcnQpCiB7CiAJaW50IHNhdmVkOwpAQCAtMTgxLDYgKzE4Niw4IEBACiAJZnRyX2dwaW9fc2V0X2hlYWRwaG9uZShydCwgMCk7CiAJZnRyX2dwaW9fc2V0X2FtcChydCwgMCk7CiAJZnRyX2dwaW9fc2V0X2xpbmVvdXQocnQsIDApOworCWlmIChtZXRob2RzLnNldF9tYXN0ZXIpCisJCWZ0cl9ncGlvX3NldF9tYXN0ZXIocnQsIDApOwogCXJ0LT5pbXBsZW1lbnRhdGlvbl9wcml2YXRlID0gc2F2ZWQ7CiB9CiAKQEAgLTE5Myw2ICsyMDAsOCBAQAogCWZ0cl9ncGlvX3NldF9oZWFkcGhvbmUocnQsIChzPj4wKSYxKTsKIAlmdHJfZ3Bpb19zZXRfYW1wKHJ0LCAocz4+MSkmMSk7CiAJZnRyX2dwaW9fc2V0X2xpbmVvdXQocnQsIChzPj4yKSYxKTsKKwlpZiAobWV0aG9kcy5zZXRfbWFzdGVyKQorCQlmdHJfZ3Bpb19zZXRfbWFzdGVyKHJ0LCAocz4+MykmMSk7CiB9CiAKIHN0YXRpYyB2b2lkIGZ0cl9oYW5kbGVfbm90aWZ5KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKQEAgLTIzMSw2ICsyNDAsMTIgQEAKIAlnZXRfZ3BpbygiaHctcmVzZXQiLCAiYXVkaW8taHctcmVzZXQiLAogCQkgJmh3X3Jlc2V0X2dwaW8sCiAJCSAmaHdfcmVzZXRfZ3Bpb19hY3RpdmVzdGF0ZSk7CisJaWYgKGdldF9ncGlvKCJtYXN0ZXItbXV0ZSIsIE5VTEwsCisJCSAgICAgJm1hc3Rlcl9tdXRlX2dwaW8sCisJCSAgICAgJm1hc3Rlcl9tdXRlX2dwaW9fYWN0aXZlc3RhdGUpKSB7CisJCW1ldGhvZHMuc2V0X21hc3RlciA9IGZ0cl9ncGlvX3NldF9tYXN0ZXI7CisJCW1ldGhvZHMuZ2V0X21hc3RlciA9IGZ0cl9ncGlvX2dldF9tYXN0ZXI7CisJfQogCiAJaGVhZHBob25lX2RldGVjdF9ub2RlID0gZ2V0X2dwaW8oImhlYWRwaG9uZS1kZXRlY3QiLCBOVUxMLAogCQkJCQkgJmhlYWRwaG9uZV9kZXRlY3RfZ3BpbywKZGlmZiAtLWdpdCBhL3NvdW5kL2FvYS9mYWJyaWNzL2xheW91dC5jIGIvc291bmQvYW9hL2ZhYnJpY3MvbGF5b3V0LmMKaW5kZXggYWQ2MGY1ZC4uZmJmNWM5MyAxMDA2NDQKLS0tIGEvc291bmQvYW9hL2ZhYnJpY3MvbGF5b3V0LmMKKysrIGIvc291bmQvYW9hL2ZhYnJpY3MvbGF5b3V0LmMKQEAgLTEsMTYgKzEsMTQgQEAKIC8qCi0gKiBBcHBsZSBPbmJvYXJkIEF1ZGlvIGRyaXZlciAtLSBsYXlvdXQgZmFicmljCisgKiBBcHBsZSBPbmJvYXJkIEF1ZGlvIGRyaXZlciAtLSBsYXlvdXQvbWFjaGluZSBpZCBmYWJyaWMKICAqCi0gKiBDb3B5cmlnaHQgMjAwNiBKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgorICogQ29weXJpZ2h0IDIwMDYtMjAwOCBKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgogICoKICAqIEdQTCB2MiwgY2FuIGJlIGZvdW5kIGluIENPUFlJTkcuCiAgKgogICoKLSAqIFRoaXMgZmFicmljIG1vZHVsZSBsb29rcyBmb3Igc291bmQgY29kZWNzCi0gKiBiYXNlZCBvbiB0aGUgbGF5b3V0LWlkIHByb3BlcnR5IGluIHRoZSBkZXZpY2UgdHJlZS4KLSAqCisgKiBUaGlzIGZhYnJpYyBtb2R1bGUgbG9va3MgZm9yIHNvdW5kIGNvZGVjcyBiYXNlZCBvbiB0aGUKKyAqIGxheW91dC1pZCBvciBkZXZpY2UtaWQgcHJvcGVydHkgaW4gdGhlIGRldmljZSB0cmVlLgogICovCi0KICNpbmNsdWRlIDxhc20vcHJvbS5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTYzLDcgKzYxLDcgQEAKICNkZWZpbmUgTEFZT1VUX0ZMQUdfQ09NQk9fTElORU9VVF9TUERJRgkoMTw8MCkKIAogc3RydWN0IGxheW91dCB7Ci0JdW5zaWduZWQgaW50IGxheW91dF9pZDsKKwl1bnNpZ25lZCBpbnQgbGF5b3V0X2lkLCBkZXZpY2VfaWQ7CiAJc3RydWN0IGNvZGVjX2Nvbm5lY3RfaW5mbyBjb2RlY3NbTUFYX0NPREVDU19QRVJfQlVTXTsKIAlpbnQgZmxhZ3M7CiAKQEAgLTExMSw2ICsxMDksMTAgQEAKIE1PRFVMRV9BTElBUygic291bmQtbGF5b3V0LTk4Iik7CiBNT0RVTEVfQUxJQVMoInNvdW5kLWxheW91dC0xMDAiKTsKIAorTU9EVUxFX0FMSUFTKCJhb2EtZGV2aWNlLWlkLTE0Iik7CitNT0RVTEVfQUxJQVMoImFvYS1kZXZpY2UtaWQtMjIiKTsKK01PRFVMRV9BTElBUygiYW9hLWRldmljZS1pZC0zNSIpOworCiAvKiBvbnl4IHdpdGggYWxsIGJ1dCBtaWNyb3Bob25lIGNvbm5lY3RlZCAqLwogc3RhdGljIHN0cnVjdCBjb2RlY19jb25uZWN0aW9uIG9ueXhfY29ubmVjdGlvbnNfbm9taWNbXSA9IHsKIAl7CkBAIC01MTgsNiArNTIwLDI3IEBACiAJCS5jb25uZWN0aW9ucyA9IG9ueXhfY29ubmVjdGlvbnNfbm9oZWFkcGhvbmVzLAogCSAgfSwKIAl9LAorCS8qIFBvd2VyTWFjMyw0ICovCisJeyAuZGV2aWNlX2lkID0gMTQsCisJICAuY29kZWNzWzBdID0geworCQkubmFtZSA9ICJ0YXMiLAorCQkuY29ubmVjdGlvbnMgPSB0YXNfY29ubmVjdGlvbnNfbm9saW5lLAorCSAgfSwKKwl9LAorCS8qIFBvd2VyTWFjMyw2ICovCisJeyAuZGV2aWNlX2lkID0gMjIsCisJICAuY29kZWNzWzBdID0geworCQkubmFtZSA9ICJ0YXMiLAorCQkuY29ubmVjdGlvbnMgPSB0YXNfY29ubmVjdGlvbnNfYWxsLAorCSAgfSwKKwl9LAorCS8qIFBvd2VyQm9vazUsMiAqLworCXsgLmRldmljZV9pZCA9IDM1LAorCSAgLmNvZGVjc1swXSA9IHsKKwkJLm5hbWUgPSAidGFzIiwKKwkJLmNvbm5lY3Rpb25zID0gdGFzX2Nvbm5lY3Rpb25zX2FsbCwKKwkgIH0sCisJfSwKIAl7fQogfTsKIApAQCAtNTI2LDcgKzU0OSw3IEBACiAJc3RydWN0IGxheW91dCAqbDsKIAogCWwgPSBsYXlvdXRzOwotCXdoaWxlIChsLT5sYXlvdXRfaWQpIHsKKwl3aGlsZSAobC0+Y29kZWNzWzBdLm5hbWUpIHsKIAkJaWYgKGwtPmxheW91dF9pZCA9PSBpZCkKIAkJCXJldHVybiBsOwogCQlsKys7CkBAIC01MzQsNiArNTU3LDE5IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgbGF5b3V0ICpmaW5kX2xheW91dF9ieV9kZXZpY2UodW5zaWduZWQgaW50IGlkKQoreworCXN0cnVjdCBsYXlvdXQgKmw7CisKKwlsID0gbGF5b3V0czsKKwl3aGlsZSAobC0+Y29kZWNzWzBdLm5hbWUpIHsKKwkJaWYgKGwtPmRldmljZV9pZCA9PSBpZCkKKwkJCXJldHVybiBsOworCQlsKys7CisJfQorCXJldHVybiBOVUxMOworfQorCiBzdGF0aWMgdm9pZCB1c2VfbGF5b3V0KHN0cnVjdCBsYXlvdXQgKmwpCiB7CiAJaW50IGk7CkBAIC01NjQsNiArNjAwLDcgQEAKIAlzdHJ1Y3Qgc25kX2tjb250cm9sICpoZWFkcGhvbmVfY3RybDsKIAlzdHJ1Y3Qgc25kX2tjb250cm9sICpsaW5lb3V0X2N0cmw7CiAJc3RydWN0IHNuZF9rY29udHJvbCAqc3BlYWtlcl9jdHJsOworCXN0cnVjdCBzbmRfa2NvbnRyb2wgKm1hc3Rlcl9jdHJsOwogCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmhlYWRwaG9uZV9kZXRlY3RlZF9jdHJsOwogCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmxpbmVvdXRfZGV0ZWN0ZWRfY3RybDsKIApAQCAtNjE1LDYgKzY1Miw3IEBACiBBTVBfQ09OVFJPTChoZWFkcGhvbmUsICJIZWFkcGhvbmUgU3dpdGNoIik7CiBBTVBfQ09OVFJPTChzcGVha2VycywgIlNwZWFrZXJzIFN3aXRjaCIpOwogQU1QX0NPTlRST0wobGluZW91dCwgIkxpbmUtT3V0IFN3aXRjaCIpOworQU1QX0NPTlRST0wobWFzdGVyLCAiTWFzdGVyIFN3aXRjaCIpOwogCiBzdGF0aWMgaW50IGRldGVjdF9jaG9pY2VfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAogCQkJICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKQEAgLTg1NSw2ICs4OTMsMTEgQEAKICAJbGluZW91dCA9IGNvZGVjLT5ncGlvLT5tZXRob2RzLT5nZXRfZGV0ZWN0KGNvZGVjLT5ncGlvLAogCQkJCQkJICAgQU9BX05PVElGWV9MSU5FX09VVCk7CiAKKwlpZiAoY29kZWMtPmdwaW8tPm1ldGhvZHMtPnNldF9tYXN0ZXIpIHsKKwkJY3RsID0gc25kX2N0bF9uZXcxKCZtYXN0ZXJfY3RsLCBjb2RlYy0+Z3Bpbyk7CisJCWxkZXYtPm1hc3Rlcl9jdHJsID0gY3RsOworCQlhb2Ffc25kX2N0bF9hZGQoY3RsKTsKKwl9CiAJd2hpbGUgKGNjLT5jb25uZWN0ZWQpIHsKIAkJaWYgKGNjLT5jb25uZWN0ZWQgJiBDQ19TUEVBS0VSUykgewogCQkJaWYgKGhlYWRwaG9uZXMgPD0gMCAmJiBsaW5lb3V0IDw9IDApCkBAIC05MzgsOCArOTgxLDggQEAKIHN0YXRpYyBpbnQgYW9hX2ZhYnJpY19sYXlvdXRfcHJvYmUoc3RydWN0IHNvdW5kYnVzX2RldiAqc2RldikKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKnNvdW5kID0gTlVMTDsKLQljb25zdCB1bnNpZ25lZCBpbnQgKmxheW91dF9pZDsKLQlzdHJ1Y3QgbGF5b3V0ICpsYXlvdXQ7CisJY29uc3QgdW5zaWduZWQgaW50ICppZDsKKwlzdHJ1Y3QgbGF5b3V0ICpsYXlvdXQgPSBOVUxMOwogCXN0cnVjdCBsYXlvdXRfZGV2ICpsZGV2ID0gTlVMTDsKIAlpbnQgZXJyOwogCkBAIC05NTIsMTUgKzk5NSwxOCBAQAogCQlpZiAoc291bmQtPnR5cGUgJiYgc3RyY2FzZWNtcChzb3VuZC0+dHlwZSwgInNvdW5kY2hpcCIpID09IDApCiAJCQlicmVhazsKIAl9Ci0JaWYgKCFzb3VuZCkgcmV0dXJuIC1FTk9ERVY7CisJaWYgKCFzb3VuZCkKKwkJcmV0dXJuIC1FTk9ERVY7CiAKLQlsYXlvdXRfaWQgPSBvZl9nZXRfcHJvcGVydHkoc291bmQsICJsYXlvdXQtaWQiLCBOVUxMKTsKLQlpZiAoIWxheW91dF9pZCkKLQkJZ290byBvdXRub2RldjsKLQlwcmludGsoS0VSTl9JTkZPICJzbmQtYW9hLWZhYnJpYy1sYXlvdXQ6IGZvdW5kIGJ1cyB3aXRoIGxheW91dCAlZFxuIiwKLQkgICAgICAgKmxheW91dF9pZCk7CisJaWQgPSBvZl9nZXRfcHJvcGVydHkoc291bmQsICJsYXlvdXQtaWQiLCBOVUxMKTsKKwlpZiAoaWQpIHsKKwkJbGF5b3V0ID0gZmluZF9sYXlvdXRfYnlfaWQoKmlkKTsKKwl9IGVsc2UgeworCQlpZCA9IG9mX2dldF9wcm9wZXJ0eShzb3VuZCwgImRldmljZS1pZCIsIE5VTEwpOworCQlpZiAoaWQpCisJCQlsYXlvdXQgPSBmaW5kX2xheW91dF9ieV9kZXZpY2UoKmlkKTsKKwl9CiAKLQlsYXlvdXQgPSBmaW5kX2xheW91dF9ieV9pZCgqbGF5b3V0X2lkKTsKIAlpZiAoIWxheW91dCkgewogCQlwcmludGsoS0VSTl9FUlIgInNuZC1hb2EtZmFicmljLWxheW91dDogdW5rbm93biBsYXlvdXRcbiIpOwogCQlnb3RvIG91dG5vZGV2OwpAQCAtOTc2LDYgKzEwMjIsNyBAQAogCWxkZXYtPmxheW91dCA9IGxheW91dDsKIAlsZGV2LT5ncGlvLm5vZGUgPSBzb3VuZC0+cGFyZW50OwogCXN3aXRjaCAobGF5b3V0LT5sYXlvdXRfaWQpIHsKKwljYXNlIDA6ICAvKiBhbnl0aGluZyB3aXRoIGRldmljZV9pZCwgbm90IGxheW91dF9pZCAqLwogCWNhc2UgNDE6IC8qIHRoYXQgdW5rbm93biBtYWNoaW5lIG5vIG9uZSBzZWVtcyB0byBoYXZlICovCiAJY2FzZSA1MTogLyogUG93ZXJCb29rNSw0ICovCiAJY2FzZSA1ODogLyogTWFjIE1pbmkgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL2FvYS9zb3VuZGJ1cy9pMnNidXMvY29yZS5jIGIvc291bmQvYW9hL3NvdW5kYnVzL2kyc2J1cy9jb3JlLmMKaW5kZXggYmU0NjhlZGYuLjQxOGM4NGMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2FvYS9zb3VuZGJ1cy9pMnNidXMvY29yZS5jCisrKyBiL3NvdW5kL2FvYS9zb3VuZGJ1cy9pMnNidXMvY29yZS5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIGkyc2J1cyBkcml2ZXIKICAqCi0gKiBDb3B5cmlnaHQgMjAwNiBKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgorICogQ29weXJpZ2h0IDIwMDYtMjAwOCBKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgogICoKICAqIEdQTCB2MiwgY2FuIGJlIGZvdW5kIGluIENPUFlJTkcuCiAgKi8KQEAgLTE4NiwxMyArMTg2LDI1IEBACiAJCX0KIAl9CiAJaWYgKGkgPT0gMSkgewotCQljb25zdCB1MzIgKmxheW91dF9pZCA9Ci0JCQlvZl9nZXRfcHJvcGVydHkoc291bmQsICJsYXlvdXQtaWQiLCBOVUxMKTsKLQkJaWYgKGxheW91dF9pZCkgewotCQkJbGF5b3V0ID0gKmxheW91dF9pZDsKKwkJY29uc3QgdTMyICppZCA9IG9mX2dldF9wcm9wZXJ0eShzb3VuZCwgImxheW91dC1pZCIsIE5VTEwpOworCisJCWlmIChpZCkgeworCQkJbGF5b3V0ID0gKmlkOwogCQkJc25wcmludGYoZGV2LT5zb3VuZC5tb2RhbGlhcywgMzIsCiAJCQkJICJzb3VuZC1sYXlvdXQtJWQiLCBsYXlvdXQpOwogCQkJb2sgPSAxOworCQl9IGVsc2UgeworCQkJaWQgPSBvZl9nZXRfcHJvcGVydHkoc291bmQsICJkZXZpY2UtaWQiLCBOVUxMKTsKKwkJCS8qCisJCQkgKiBXZSBwcm9iYWJseSBjYW5ub3QgaGFuZGxlIGFsbCBkZXZpY2UtaWQgbWFjaGluZXMsCisJCQkgKiBzbyByZXN0cmljdCB0byB0aG9zZSB3ZSBkbyBoYW5kbGUgZm9yIG5vdy4KKwkJCSAqLworCQkJaWYgKGlkICYmICgqaWQgPT0gMjIgfHwgKmlkID09IDE0IHx8ICppZCA9PSAzNSkpIHsKKwkJCQlzbnByaW50ZihkZXYtPnNvdW5kLm1vZGFsaWFzLCAzMiwKKwkJCQkJICJhb2EtZGV2aWNlLWlkLSVkIiwgKmlkKTsKKwkJCQlvayA9IDE7CisJCQkJbGF5b3V0ID0gLTE7CisJCQl9CiAJCX0KIAl9CiAJLyogZm9yIHRoZSB0aW1lIGJlaW5nLCB1bnRpbCB3ZSBjYW4gaGFuZGxlIG5vbi1sYXlvdXQtaWQKZGlmZiAtLWdpdCBhL3NvdW5kL2FybS9LY29uZmlnIGIvc291bmQvYXJtL0tjb25maWcKaW5kZXggZjhlNmRlNC4uODg1NjgzYSAxMDA2NDQKLS0tIGEvc291bmQvYXJtL0tjb25maWcKKysrIGIvc291bmQvYXJtL0tjb25maWcKQEAgLTExLDE3ICsxMSw2IEBACiAKIGlmIFNORF9BUk0KIAotY29uZmlnIFNORF9TQTExWFhfVURBMTM0MQotCXRyaXN0YXRlICJTQTExeHggVURBMTM0MVRTIGRyaXZlciAoaVBhcSBIMzYwMCkiCi0JZGVwZW5kcyBvbiBBUkNIX1NBMTEwMCAmJiBMMwotCXNlbGVjdCBTTkRfUENNCi0JaGVscAotCSAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhIENvbXBhcSBpUGFxIEgzeDAwIGhhbmRoZWxkIGNvbXB1dGVyCi0JICBhbmQgd2FudCB0byB1c2UgaXRzIFBoaWxpcHMgVURBIDEzNDEgYXVkaW8gY2hpcC4KLQotCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQotCSAgd2lsbCBiZSBjYWxsZWQgc25kLXNhMTF4eC11ZGExMzQxLgotCiBjb25maWcgU05EX0FSTUFBQ0kKIAl0cmlzdGF0ZSAiQVJNIFByaW1lQ2VsbCBQTDA0MSBBQyBMaW5rIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBBUk1fQU1CQQpkaWZmIC0tZ2l0IGEvc291bmQvYXJtL01ha2VmaWxlIGIvc291bmQvYXJtL01ha2VmaWxlCmluZGV4IDIwNTRkZTEuLjVhNTQ5ZWQgMTAwNjQ0Ci0tLSBhL3NvdW5kL2FybS9NYWtlZmlsZQorKysgYi9zb3VuZC9hcm0vTWFrZWZpbGUKQEAgLTIsOSArMiw2IEBACiAjIE1ha2VmaWxlIGZvciBBTFNBCiAjCiAKLW9iai0kKENPTkZJR19TTkRfU0ExMVhYX1VEQTEzNDEpICs9IHNuZC1zYTExeHgtdWRhMTM0MS5vIAotc25kLXNhMTF4eC11ZGExMzQxLW9ianMJCTo9IHNhMTF4eC11ZGExMzQxLm8KLQogb2JqLSQoQ09ORklHX1NORF9BUk1BQUNJKQkrPSBzbmQtYWFjaS5vCiBzbmQtYWFjaS1vYmpzCQkJOj0gYWFjaS5vIGRldmRtYS5vCiAKZGlmZiAtLWdpdCBhL3NvdW5kL2FybS9hYWNpLmMgYi9zb3VuZC9hcm0vYWFjaS5jCmluZGV4IDc3MjkwMWUuLjdmYmQ2OGYgMTAwNjQ0Ci0tLSBhL3NvdW5kL2FybS9hYWNpLmMKKysrIGIvc291bmQvYXJtL2FhY2kuYwpAQCAtOTk1LDEwICs5OTUsMTEgQEAKIHsKIAlzdHJ1Y3QgYWFjaSAqYWFjaTsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CisJaW50IGVycjsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoU05EUlZfREVGQVVMVF9JRFgxLCBTTkRSVl9ERUZBVUxUX1NUUjEsCi0JCQkgICAgVEhJU19NT0RVTEUsIHNpemVvZihzdHJ1Y3QgYWFjaSkpOwotCWlmIChjYXJkID09IE5VTEwpCisJZXJyID0gc25kX2NhcmRfY3JlYXRlKFNORFJWX0RFRkFVTFRfSURYMSwgU05EUlZfREVGQVVMVF9TVFIxLAorCQkJICAgICAgVEhJU19NT0RVTEUsIHNpemVvZihzdHJ1Y3QgYWFjaSksICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIE5VTEw7CiAKIAljYXJkLT5wcml2YXRlX2ZyZWUgPSBhYWNpX2ZyZWVfY2FyZDsKZGlmZiAtLWdpdCBhL3NvdW5kL2FybS9weGEyeHgtYWM5Ny1saWIuYyBiL3NvdW5kL2FybS9weGEyeHgtYWM5Ny1saWIuYwppbmRleCAzNWFmZDBjLi4yZTYzNTVmIDEwMDY0NAotLS0gYS9zb3VuZC9hcm0vcHhhMnh4LWFjOTctbGliLmMKKysrIGIvc291bmQvYXJtL3B4YTJ4eC1hYzk3LWxpYi5jCkBAIC0zMSw2ICszMSw3IEBACiBzdGF0aWMgdm9sYXRpbGUgbG9uZyBnc3JfYml0czsKIHN0YXRpYyBzdHJ1Y3QgY2xrICphYzk3X2NsazsKIHN0YXRpYyBzdHJ1Y3QgY2xrICphYzk3Y29uZl9jbGs7CitzdGF0aWMgaW50IHJlc2V0X2dwaW87CiAKIC8qCiAgKiBCZXdhcmUgUFhBMjd4IGJ1Z3M6CkBAIC00Miw2ICs0Myw0NSBAQAogICogMSBqaWZmeSB0aW1lb3V0IGlmIGludGVycnVwdCBuZXZlciBjb21lcykuCiAgKi8KIAorZW51bSB7CisJUkVTRVRHUElPX0ZPUkNFX0hJR0gsCisJUkVTRVRHUElPX0ZPUkNFX0xPVywKKwlSRVNFVEdQSU9fTk9STUFMX0FMVEZVTkMKK307CisKKy8qKgorICogc2V0X3Jlc2V0Z3Bpb19tb2RlIC0gY29tcHV0ZXMgYW5kIHNldHMgdGhlIEFDOTdfUkVTRVQgZ3BpbyBtb2RlIG9uIFBYQQorICogQG1vZGU6IGNob3NlbiBhY3Rpb24KKyAqCisgKiBBcyB0aGUgUFhBMjd4IENQVXMgc3VmZmVyIGZyb20gYSBBQzk3IGJ1ZywgYSBtYW51YWwgY29udHJvbCBvZiB0aGUgcmVzZXQgbGluZQorICogbXVzdCBiZSBkb25lIHRvIGluc3VyZSBwcm9wZXIgd29yayBvZiBBQzk3IHJlc2V0IGxpbmUuICBUaGlzIGZ1bmN0aW9uCisgKiBjb21wdXRlcyB0aGUgY29ycmVjdCBncGlvX21vZGUgZm9yIGZ1cnRoZXIgdXNlIGJ5IHJlc2V0IGZ1bmN0aW9ucywgYW5kCisgKiBhcHBsaWVkIHRoZSBjaGFuZ2UgdGhyb3VnaCBweGFfZ3Bpb19tb2RlLgorICovCitzdGF0aWMgdm9pZCBzZXRfcmVzZXRncGlvX21vZGUoaW50IHJlc2V0Z3Bpb19hY3Rpb24pCit7CisJaW50IG1vZGUgPSAwOworCisJaWYgKHJlc2V0X2dwaW8pCisJCXN3aXRjaCAocmVzZXRncGlvX2FjdGlvbikgeworCQljYXNlIFJFU0VUR1BJT19OT1JNQUxfQUxURlVOQzoKKwkJCWlmIChyZXNldF9ncGlvID09IDExMykKKwkJCQltb2RlID0gMTEzIHwgR1BJT19PVVQgfCBHUElPX0RGTFRfTE9XOworCQkJaWYgKHJlc2V0X2dwaW8gPT0gOTUpCisJCQkJbW9kZSA9IDk1IHwgR1BJT19BTFRfRk5fMV9PVVQ7CisJCQlicmVhazsKKwkJY2FzZSBSRVNFVEdQSU9fRk9SQ0VfTE9XOgorCQkJbW9kZSA9IHJlc2V0X2dwaW8gfCBHUElPX09VVCB8IEdQSU9fREZMVF9MT1c7CisJCQlicmVhazsKKwkJY2FzZSBSRVNFVEdQSU9fRk9SQ0VfSElHSDoKKwkJCW1vZGUgPSByZXNldF9ncGlvIHwgR1BJT19PVVQgfCBHUElPX0RGTFRfSElHSDsKKwkJCWJyZWFrOworCQl9OworCisJaWYgKG1vZGUpCisJCXB4YV9ncGlvX21vZGUobW9kZSk7Cit9CisKIHVuc2lnbmVkIHNob3J0IHB4YTJ4eF9hYzk3X3JlYWQoc3RydWN0IHNuZF9hYzk3ICphYzk3LCB1bnNpZ25lZCBzaG9ydCByZWcpCiB7CiAJdW5zaWduZWQgc2hvcnQgdmFsID0gLTE7CkBAIC0xMzcsMTAgKzE3NywxMCBAQAogCiAJLyogd2FybSByZXNldCBicm9rZW4gb24gQnVsdmVyZGUsCiAJICAgc28gbWFudWFsbHkga2VlcCBBQzk3IHJlc2V0IGhpZ2ggKi8KLQlweGFfZ3Bpb19tb2RlKDExMyB8IEdQSU9fT1VUIHwgR1BJT19ERkxUX0hJR0gpOworCXNldF9yZXNldGdwaW9fbW9kZShSRVNFVEdQSU9fRk9SQ0VfSElHSCk7CiAJdWRlbGF5KDEwKTsKIAlHQ1IgfD0gR0NSX1dBUk1fUlNUOwotCXB4YV9ncGlvX21vZGUoMTEzIHwgR1BJT19BTFRfRk5fMl9PVVQpOworCXNldF9yZXNldGdwaW9fbW9kZShSRVNFVEdQSU9fTk9STUFMX0FMVEZVTkMpOwogCXVkZWxheSg1MDApOwogfQogCkBAIC0zMDgsOCArMzQ4LDggQEAKIAkJcHhhX2dwaW9fbW9kZShHUElPMjlfU0RBVEFfSU5fQUM5N19NRCk7CiAJfQogCWlmIChjcHVfaXNfcHhhMjd4KCkpIHsKLQkJLyogVXNlIEdQSU8gMTEzIGFzIEFDOTcgUmVzZXQgb24gQnVsdmVyZGUgKi8KLQkJcHhhX2dwaW9fbW9kZSgxMTMgfCBHUElPX0FMVF9GTl8yX09VVCk7CisJCS8qIFVzZSBHUElPIDExMyBvciA5NSBhcyBBQzk3IFJlc2V0IG9uIEJ1bHZlcmRlICovCisJCXNldF9yZXNldGdwaW9fbW9kZShSRVNFVEdQSU9fTk9STUFMX0FMVEZVTkMpOwogCX0KIAljbGtfZW5hYmxlKGFjOTdfY2xrKTsKIAlyZXR1cm4gMDsKQEAgLTMyMCw2ICszNjAsMjcgQEAKIGludCBfX2RldmluaXQgcHhhMnh4X2FjOTdfaHdfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCWludCByZXQ7CisJc3RydWN0IHB4YTJ4eF9hYzk3X3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKworCWlmIChwZGF0YSkgeworCQlzd2l0Y2ggKHBkYXRhLT5yZXNldF9ncGlvKSB7CisJCWNhc2UgOTU6CisJCWNhc2UgMTEzOgorCQkJcmVzZXRfZ3BpbyA9IHBkYXRhLT5yZXNldF9ncGlvOworCQkJYnJlYWs7CisJCWNhc2UgMDoKKwkJCXJlc2V0X2dwaW8gPSAxMTM7CisJCQlicmVhazsKKwkJY2FzZSAtMToKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZGV2X2VycigmZGV2LT5kZXYsICJJbnZhbGlkIHJlc2V0IEdQSU8gJWRcbiIsCisJCQkJcGRhdGEtPnJlc2V0X2dwaW8pOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKGNwdV9pc19weGEyN3goKSkKKwkJCXJlc2V0X2dwaW8gPSAxMTM7CisJfQogCiAJaWYgKGNwdV9pc19weGEyNXgoKSB8fCBjcHVfaXNfcHhhMjd4KCkpIHsKIAkJcHhhX2dwaW9fbW9kZShHUElPMzFfU1lOQ19BQzk3X01EKTsKQEAgLTMzMCw3ICszOTEsNyBAQAogCiAJaWYgKGNwdV9pc19weGEyN3goKSkgewogCQkvKiBVc2UgR1BJTyAxMTMgYXMgQUM5NyBSZXNldCBvbiBCdWx2ZXJkZSAqLwotCQlweGFfZ3Bpb19tb2RlKDExMyB8IEdQSU9fQUxUX0ZOXzJfT1VUKTsKKwkJc2V0X3Jlc2V0Z3Bpb19tb2RlKFJFU0VUR1BJT19OT1JNQUxfQUxURlVOQyk7CiAJCWFjOTdjb25mX2NsayA9IGNsa19nZXQoJmRldi0+ZGV2LCAiQUM5N0NPTkZDTEsiKTsKIAkJaWYgKElTX0VSUihhYzk3Y29uZl9jbGspKSB7CiAJCQlyZXQgPSBQVFJfRVJSKGFjOTdjb25mX2Nsayk7CmRpZmYgLS1naXQgYS9zb3VuZC9hcm0vcHhhMnh4LWFjOTcuYyBiL3NvdW5kL2FybS9weGEyeHgtYWM5Ny5jCmluZGV4IDg1Y2Y1OTEuLjdlZDEwMGMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2FybS9weGEyeHgtYWM5Ny5jCisrKyBiL3NvdW5kL2FybS9weGEyeHgtYWM5Ny5jCkBAIC0xNzMsMTAgKzE3Myw5IEBACiAJc3RydWN0IHNuZF9hYzk3X3RlbXBsYXRlIGFjOTdfdGVtcGxhdGU7CiAJaW50IHJldDsKIAotCXJldCA9IC1FTk9NRU07Ci0JY2FyZCA9IHNuZF9jYXJkX25ldyhTTkRSVl9ERUZBVUxUX0lEWDEsIFNORFJWX0RFRkFVTFRfU1RSMSwKLQkJCSAgICBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKCFjYXJkKQorCXJldCA9IHNuZF9jYXJkX2NyZWF0ZShTTkRSVl9ERUZBVUxUX0lEWDEsIFNORFJWX0RFRkFVTFRfU1RSMSwKKwkJCSAgICAgIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKHJldCA8IDApCiAJCWdvdG8gZXJyOwogCiAJY2FyZC0+ZGV2ID0gJmRldi0+ZGV2OwpkaWZmIC0tZ2l0IGEvc291bmQvYXJtL3NhMTF4eC11ZGExMzQxLmMgYi9zb3VuZC9hcm0vc2ExMXh4LXVkYTEzNDEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWRjZDUxZC4uMDAwMDAwMAotLS0gYS9zb3VuZC9hcm0vc2ExMXh4LXVkYTEzNDEuYworKysgL2Rldi9udWxsCkBAIC0xLDk4MyArMCwwIEBACi0vKgotICogIERyaXZlciBmb3IgUGhpbGlwcyBVREExMzQxVFMgb24gQ29tcGFxIGlQQVEgSDM2MDAgc291bmRjYXJkCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAyIFRvbWFzIEthc3BhcmVrIDx0b21hcy5rYXNwYXJla0BzZXpuYW0uY3o+Ci0gKgotICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgotICogCi0gKiBIaXN0b3J5OgotICoKLSAqIDIwMDItMDMtMTMgICBUb21hcyBLYXNwYXJlayAgaW5pdGlhbCByZWxlYXNlIC0gYmFzZWQgb24gaDM2MDAtdWRhMTM0MS5jIGZyb20gT1NTCi0gKiAyMDAyLTAzLTIwICAgVG9tYXMgS2FzcGFyZWsgIHBsYXliYWNrIG92ZXIgQUxTQSBpcyB3b3JraW5nCi0gKiAyMDAyLTAzLTI4ICAgVG9tYXMgS2FzcGFyZWsgIHBsYXliYWNrIG92ZXIgT1NTIGVtdWxhdGlvbiBpcyB3b3JraW5nCi0gKiAyMDAyLTAzLTI5ICAgVG9tYXMgS2FzcGFyZWsgIGJhc2ljIGNhcHR1cmUgaXMgd29ya2luZyAobmF0aXZlIEFMU0EpCi0gKiAyMDAyLTAzLTI5ICAgVG9tYXMgS2FzcGFyZWsgIGNhcHR1cmUgaXMgd29ya2luZyAoT1NTIGVtdWxhdGlvbikKLSAqIDIwMDItMDQtMDQgICBUb21hcyBLYXNwYXJlayAgYmV0dGVyIHJhdGVzIGhhbmRsaW5nIChhbGxvdyBub24tc3RhbmRhcmQgcmF0ZXMpCi0gKiAyMDAzLTAyLTE0ICAgQnJpYW4gQXZlcnkgICAgIGZpeGVkIGZ1bGwgZHVwbGV4IG1vZGUsIG90aGVyIHVwZGF0ZXMKLSAqIDIwMDMtMDItMjAgICBUb21hcyBLYXNwYXJlayAgbWVyZ2VkIHVwZGF0ZXMgYnkgQnJpYW4gKGV4Y2VwdCBIQUwpCi0gKiAyMDAzLTA0LTE5ICAgSmFyb3NsYXYgS3lzZWxhIHJlY29kZWQgRE1BIHN0dWZmIHRvIGZvbGxvdyAyLjQuMThybWszLWhoMjQga2VybmVsCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtpbmcgc3VzcGVuZCBhbmQgcmVzdW1lCi0gKiAyMDAzLTA0LTI4ICAgVG9tYXMgS2FzcGFyZWsgIHVwZGF0ZWQgd29yayBieSBKYXJvc2xhdiB0byBjb21waWxlIGl0IHVuZGVyIDIuNS54IGFnYWluCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlZCBIQUwgbGF5ZXIgKHBhdGNoZXMgZnJvbSBCcmlhbikKLSAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qCi0qIFRvIHVuZGVyc3RhbmQgd2hhdCBBbHNhIERyaXZlcnMgc2hvdWxkIGJlIGRvaW5nIGxvb2sgYXQgIldyaXRpbmcgYW4gQWxzYSBEcml2ZXIiIGJ5IFRha2FzaGkgSXdhaQotKiBhdmFpbGFibGUgaW4gdGhlIEFsc2EgZG9jIHNlY3Rpb24gb24gdGhlIHdlYnNpdGUJCQotKiAKLSogQSBmZXcgbm90ZXMgdG8gbWFrZSB0aGluZ3MgY2xlYXJlci4gVGhlIFVEQTEzNDEgaXMgaG9va2VkIHVwIHRvIFNlcmlhbCBwb3J0IDQgb24gdGhlIFNBMTEwMC4KLSogV2UgYXJlIHVzaW5nICBTU1AgbW9kZSB0byB0YWxrIHRvIHRoZSBVREExMzQxLiBUaGUgVURBMTM0MSBiaXQgJiB3b3Jkc2VsZWN0IGNsb2NrcyBhcmUgZ2VuZXJhdGVkCi0qIGJ5IHRoaXMgVUFSVC4gVW5mb3J0dW5hdGVseSwgdGhlIGNsb2NrIG9ubHkgcnVucyBpZiB0aGUgdHJhbnNtaXQgYnVmZmVyIGhhcyBzb21ldGhpbmcgaW4gaXQuCi0qIFNvLCBpZiB3ZSBhcmUganVzdCByZWNvcmRpbmcsIHdlIGZlZWQgdGhlIHRyYW5zbWl0IERNQSBzdHJlYW0gYSBidW5jaCBvZiAweDAwMDAgc28gdGhhdCB0aGUKLSogdHJhbnNtaXQgYnVmZmVyIGlzIGZ1bGwgYW5kIHRoZSBjbG9jayBrZWVwcyBnb2luZy4gVGhlIHplcm9lcyBjb21lIGZyb20gRkxVU0hfQkFTRV9QSFlTIHdoaWNoCi0qIGlzIGEgbWVtIGxvYyB0aGF0IGFsd2F5cyBkZWNvZGVzIHRvIDAncyB3LyBubyBvZmYgY2hpcCBhY2Nlc3MuCi0qCi0qIFNvbWUgYWxzYSB0ZXJtaW5vbG9neToKLSoJZnJhbWUgPT4gbnVtX2NoYW5uZWxzICogc2FtcGxlX3NpemUgIGUuZyBzdGVyZW8gMTYgYml0IGlzIDIgKiAxNiA9IDMyIGJ5dGVzCi0qCXBlcmlvZCA9PiB0aGUgbGVhc3QgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgd2lsbCBnZW5lcmF0ZSBhbiBpbnRlcnJ1cHQgZS5nLiB3ZSBoYXZlIGEgMTAyNCBieXRlCi0qICAgICAgICAgICAgIGJ1ZmZlciBhbmQgNCBwZXJpb2RzIGluIHRoZSBydW50aW1lIHN0cnVjdHVyZSB0aGlzIG1lYW5zIHdlJ2xsIGdldCBhbiBpbnQgZXZlcnkgMjU2Ci0qICAgICAgICAgICAgIGJ5dGVzIG9yIDQgdGltZXMgcGVyIGJ1ZmZlci4KLSogICAgICAgICAgICAgQSBudW1iZXIgb2YgdGhlIHNpemVzIGFyZSBpbiBmcmFtZXMgcmF0aGVyIHRoYW4gYnl0ZXMsIHVzZSBmcmFtZXNfdG9fYnl0ZXMgYW5kCi0qICAgICAgICAgICAgIGJ5dGVzX3RvX2ZyYW1lcyB0byBjb252ZXJ0LiAgVGhlIGVhc2llc3Qgd2F5IHRvIHRlbGwgdGhlIHVuaXRzIGlzIHRvIGxvb2sgYXQgdGhlCi0qICAgICAgICAgICAgIHR5cGUgaS5lLiBydW50aW1lLT4gYnVmZmVyX3NpemUgaXMgaW4gZnJhbWVzIGFuZCBpdHMgdHlwZSBpcyBzbmRfcGNtX3VmcmFtZXNfdAotKiAgICAgICAgICAgICAKLSoJTm90ZXMgYWJvdXQgdGhlIHBvaW50ZXIgZnhuOgotKglUaGUgcG9pbnRlciBmeG4gbmVlZHMgdG8gcmV0dXJuIHRoZSBvZmZzZXQgaW50byB0aGUgZG1hIGJ1ZmZlciBpbiBmcmFtZXMuCi0qCUludGVycnVwdHMgbXVzdCBiZSBibG9ja2VkIGJlZm9yZSBjYWxsaW5nIHRoZSBkbWFfZ2V0X3BvcyBmeG4gdG8gYXZvaWQgcmFjZSB3aXRoIGludGVycnVwdHMuCi0qCi0qCU5vdGVzIGFib3V0IHBhdXNlL3Jlc3VtZQotKglJbXBsZW1lbnRpbmcgdGhpcyB3b3VsZCBiZSBjb21wbGljYXRlZCBzbyBpdCdzIHNraXBwZWQuICBUaGUgcHJvYmxlbSBjYXNlIGlzOgotKglBIGZ1bGwgZHVwbGV4IGNvbm5lY3Rpb24gaXMgZ29pbmcsIHRoZW4gcGxheSBpcyBwYXVzZWQuIEF0IHRoaXMgcG9pbnQgeW91IG5lZWQgdG8gc3RhcnQgeG1pdHRpbmcKLSoJMCdzIHRvIGtlZXAgdGhlIHJlY29yZCBhY3RpdmUgd2hpY2ggbWVhbnMgeW91IGNhbnQganVzdCBmcmVlemUgdGhlIGRtYSBhbmQgcmVzdW1lIGl0IGxhdGVyIHlvdSdkCi0qCW5lZWQgdG8Jc2F2ZSBvZmYgdGhlIGRtYSBpbmZvLCBhbmQgcmVzdG9yZSBpdCBwcm9wZXJseSBvbiBhIHJlc3VtZS4gIFllYWNoIQotKgotKglOb3RlcyBhYm91dCB0cmFuc2ZlciBtZXRob2RzOgotKglUaGUgYXN5bmMgd3JpdGUgY2FsbHMgZmFpbC4gIEkgcHJvYmFibHkgbmVlZCB0byBpbXBsZW1lbnQgc29tZXRoaW5nIGVsc2UgdG8gc3VwcG9ydCB0aGVtPwotKiAKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLQotI2lmZGVmIENPTkZJR19QTQotI2luY2x1ZGUgPGxpbnV4L3BtLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxtYWNoL2gzNjAwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vZG1hLmg+Ci0KLSNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+Ci0jaW5jbHVkZSA8c291bmQvcGNtLmg+Ci0jaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgotCi0jaW5jbHVkZSA8bGludXgvbDMvbDMuaD4KLQotI3VuZGVmIERFQlVHX01PREUKLSN1bmRlZiBERUJVR19GVU5DVElPTl9OQU1FUwotI2luY2x1ZGUgPHNvdW5kL3VkYTEzNDEuaD4KLQotLyoKLSAqIEZJWE1FOiBJcyB0aGlzIGVub3VnaCBhcyBhdXRvZGV0ZWN0aW9uIG9mIDIuNC5YLXJta1ktaGhaIGtlcm5lbHM/Ci0gKiBXZSB1c2UgRE1BIHN0dWZmIGZyb20gMi40LjE4LXJtazMtaGgyNCBoZXJlIHRvIGJlIGFibGUgdG8gY29tcGlsZSB0aGlzCi0gKiBtb2R1bGUgZm9yIEZhbWlsaWFyIDAuNi4xCi0gKi8KLQotLyoge3t7IFR5cGUgZGVmaW5pdGlvbnMgKi8KLQotTU9EVUxFX0FVVEhPUigiVG9tYXMgS2FzcGFyZWsgPHRvbWFzLmthc3BhcmVrQHNlem5hbS5jej4iKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9ERVNDUklQVElPTigiU0ExMTAwL1NBMTExMSArIFVEQTEzNDFUUyBkcml2ZXIgZm9yIEFMU0EiKTsKLU1PRFVMRV9TVVBQT1JURURfREVWSUNFKCJ7e1VEQTEzNDEsaVBBUSBIMzYwMCBVREExMzQxVFN9fSIpOwotCi1zdGF0aWMgY2hhciAqaWQ7CS8qIElEIGZvciB0aGlzIGNhcmQgKi8KLQotbW9kdWxlX3BhcmFtKGlkLCBjaGFycCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGlkLCAiSUQgc3RyaW5nIGZvciBTQTExMDAvU0ExMTExICsgVURBMTM0MVRTIHNvdW5kY2FyZC4iKTsKLQotc3RydWN0IGF1ZGlvX3N0cmVhbSB7Ci0JY2hhciAqaWQ7CQkvKiBpZGVudGlmaWNhdGlvbiBzdHJpbmcgKi8KLQlpbnQgc3RyZWFtX2lkOwkJLyogbnVtZXJpYyBpZGVudGlmaWNhdGlvbiAqLwkKLQlkbWFfZGV2aWNlX3QgZG1hX2RldjsJLyogZGV2aWNlIGlkZW50aWZpZXIgZm9yIERNQSAqLwotI2lmZGVmIEhIX1ZFUlNJT04KLQlkbWFjaF90IGRtYWNoOwkJLyogZG1hIGNoYW5uZWwgaWRlbnRpZmljYXRpb24gKi8KLSNlbHNlCi0JZG1hX3JlZ3NfdCAqZG1hX3JlZ3M7CS8qIHBvaW50cyB0byBvdXIgRE1BIHJlZ2lzdGVycyAqLwotI2VuZGlmCi0JdW5zaWduZWQgaW50IGFjdGl2ZToxOwkvKiB3ZSBhcmUgdXNpbmcgdGhpcyBzdHJlYW0gZm9yIHRyYW5zZmVyIG5vdyAqLwotCWludCBwZXJpb2Q7CQkvKiBjdXJyZW50IHRyYW5zZmVyIHBlcmlvZCAqLwotCWludCBwZXJpb2RzOwkJLyogY3VycmVudCBjb3VudCBvZiBwZXJpb2RzIHJlZ2lzdGVyZCBpbiB0aGUgRE1BIGVuZ2luZSAqLwotCWludCB0eF9zcGluOwkJLyogYXJlIHdlIHJlY29kaW5nIC0gZmxhZyB1c2VkIHRvIGRvIERNQSB0cmFucy4gZm9yIHN5bmMgKi8KLQl1bnNpZ25lZCBpbnQgb2xkX29mZnNldDsKLQlzcGlubG9ja190IGRtYV9sb2NrOwkvKiBmb3IgbG9ja2luZyBpbiBETUEgb3BlcmF0aW9ucyAoc2VlIGRtYS1zYTExMDAuYyBpbiB0aGUga2VybmVsKSAqLwotCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3RyZWFtOwotfTsKLQotc3RydWN0IHNhMTF4eF91ZGExMzQxIHsKLQlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7Ci0Jc3RydWN0IGwzX2NsaWVudCAqdWRhMTM0MTsKLQlzdHJ1Y3Qgc25kX3BjbSAqcGNtOwotCWxvbmcgc2FtcGxlcmF0ZTsKLQlzdHJ1Y3QgYXVkaW9fc3RyZWFtIHNbMl07CS8qIHBsYXliYWNrICYgY2FwdHVyZSAqLwotfTsKLQotc3RhdGljIHVuc2lnbmVkIGludCByYXRlc1tdID0gewotCTgwMDAsICAxMDY2NiwgMTA5ODUsIDE0NjQ3LAotCTE2MDAwLCAyMTk3MCwgMjIwNTAsIDI0MDAwLAotCTI5NDAwLCAzMjAwMCwgNDQxMDAsIDQ4MDAwLAotfTsKLQotc3RhdGljIHN0cnVjdCBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbGlzdCBod19jb25zdHJhaW50c19yYXRlcyA9IHsKLQkuY291bnQJPSBBUlJBWV9TSVpFKHJhdGVzKSwKLQkubGlzdAk9IHJhdGVzLAotCS5tYXNrCT0gMCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2U7Ci0KLS8qIH19fSAqLwotCi0vKiB7e3sgQ2xvY2sgYW5kIHNhbXBsZSByYXRlIHN0dWZmICovCi0KLS8qCi0gKiBTdG9wLWdhcCBzb2x1dGlvbiB1bnRpbCByZXN0IG9mIGhoLm9yZyBIQUwgc3R1ZmYgaXMgbWVyZ2VkLgotICovCi0jZGVmaW5lIEdQSU9fSDM2MDBfQ0xLX1NFVDAJCUdQSU9fR1BJTyAoMTIpCi0jZGVmaW5lIEdQSU9fSDM2MDBfQ0xLX1NFVDEJCUdQSU9fR1BJTyAoMTMpCi0KLSNpZmRlZiBDT05GSUdfU0ExMTAwX0gzWFhYCi0jZGVmaW5lCWNscl9zYTExeHhfdWRhMTM0MV9lZ3Bpbyh4KQljbHJfaDM2MDBfZWdwaW8oeCkKLSNkZWZpbmUgc2V0X3NhMTF4eF91ZGExMzQxX2VncGlvKHgpCXNldF9oMzYwMF9lZ3Bpbyh4KQotI2Vsc2UKLSNlcnJvciBUaGlzIGRyaXZlciBjb3VsZCBzZXJ2ZSBIM3gwMCBoYW5kaGVsZHMgb25seSEKLSNlbmRpZgotCi1zdGF0aWMgdm9pZCBzYTExeHhfdWRhMTM0MV9zZXRfYXVkaW9fY2xvY2sobG9uZyB2YWwpCi17Ci0Jc3dpdGNoICh2YWwpIHsKLQljYXNlIDI0MDAwOiBjYXNlIDMyMDAwOiBjYXNlIDQ4MDAwOgkvKiAwMDogMTIuMjg4IE1IeiAqLwotCQlHUENSID0gR1BJT19IMzYwMF9DTEtfU0VUMCB8IEdQSU9fSDM2MDBfQ0xLX1NFVDE7Ci0JCWJyZWFrOwotCi0JY2FzZSAyMjA1MDogY2FzZSAyOTQwMDogY2FzZSA0NDEwMDoJLyogMDE6IDExLjI4OTYgTUh6ICovCi0JCUdQU1IgPSBHUElPX0gzNjAwX0NMS19TRVQwOwotCQlHUENSID0gR1BJT19IMzYwMF9DTEtfU0VUMTsKLQkJYnJlYWs7Ci0KLQljYXNlIDgwMDA6IGNhc2UgMTA2NjY6IGNhc2UgMTYwMDA6CS8qIDEwOiA0LjA5NiBNSHogKi8KLQkJR1BDUiA9IEdQSU9fSDM2MDBfQ0xLX1NFVDA7Ci0JCUdQU1IgPSBHUElPX0gzNjAwX0NMS19TRVQxOwotCQlicmVhazsKLQotCWNhc2UgMTA5ODU6IGNhc2UgMTQ2NDc6IGNhc2UgMjE5NzA6CS8qIDExOiA1LjYyNDUgTUh6ICovCi0JCUdQU1IgPSBHUElPX0gzNjAwX0NMS19TRVQwIHwgR1BJT19IMzYwMF9DTEtfU0VUMTsKLQkJYnJlYWs7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBzYTExeHhfdWRhMTM0MV9zZXRfc2FtcGxlcmF0ZShzdHJ1Y3Qgc2ExMXh4X3VkYTEzNDEgKnNhMTF4eF91ZGExMzQxLCBsb25nIHJhdGUpCi17Ci0JaW50IGNsa19kaXYgPSAwOwotCWludCBjbGs9MDsKLQotCS8qIFdlIGRvbid0IHdhbnQgdG8gbWVzcyB3aXRoIGNsb2NrcyB3aGVuIGZyYW1lcyBhcmUgaW4gZmxpZ2h0ICovCi0JU2VyNFNTQ1IwICY9IH5TU0NSMF9TU0U7Ci0JLyogd2FpdCBmb3IgYW55IGZyYW1lIHRvIGNvbXBsZXRlICovCi0JdWRlbGF5KDEyNSk7Ci0KLQkvKgotCSAqIFdlIGhhdmUgdGhlIGZvbGxvd2luZyBjbG9jayBzb3VyY2VzOgotCSAqIDQuMDk2IE1IeiwgNS42MjQ1IE1IeiwgMTEuMjg5NiBNSHosIDEyLjI4OCBNSHoKLQkgKiBUaG9zZSBjYW4gYmUgZGl2aWRlZCBlaXRoZXIgYnkgMjU2LCAzODQgb3IgNTEyLgotCSAqIFRoaXMgbWFrZXMgdXAgMTIgY29tYmluYXRpb25zIGZvciB0aGUgZm9sbG93aW5nIHNhbXBsZXJhdGVzLi4uCi0JICovCi0JaWYgKHJhdGUgPj0gNDgwMDApCi0JCXJhdGUgPSA0ODAwMDsKLQllbHNlIGlmIChyYXRlID49IDQ0MTAwKQotCQlyYXRlID0gNDQxMDA7Ci0JZWxzZSBpZiAocmF0ZSA+PSAzMjAwMCkKLQkJcmF0ZSA9IDMyMDAwOwotCWVsc2UgaWYgKHJhdGUgPj0gMjk0MDApCi0JCXJhdGUgPSAyOTQwMDsKLQllbHNlIGlmIChyYXRlID49IDI0MDAwKQotCQlyYXRlID0gMjQwMDA7Ci0JZWxzZSBpZiAocmF0ZSA+PSAyMjA1MCkKLQkJcmF0ZSA9IDIyMDUwOwotCWVsc2UgaWYgKHJhdGUgPj0gMjE5NzApCi0JCXJhdGUgPSAyMTk3MDsKLQllbHNlIGlmIChyYXRlID49IDE2MDAwKQotCQlyYXRlID0gMTYwMDA7Ci0JZWxzZSBpZiAocmF0ZSA+PSAxNDY0NykKLQkJcmF0ZSA9IDE0NjQ3OwotCWVsc2UgaWYgKHJhdGUgPj0gMTA5ODUpCi0JCXJhdGUgPSAxMDk4NTsKLQllbHNlIGlmIChyYXRlID49IDEwNjY2KQotCQlyYXRlID0gMTA2NjY7Ci0JZWxzZQotCQlyYXRlID0gODAwMDsKLQotCS8qIFNldCB0aGUgZXh0ZXJuYWwgY2xvY2sgZ2VuZXJhdG9yICovCi0JCi0Jc2ExMXh4X3VkYTEzNDFfc2V0X2F1ZGlvX2Nsb2NrKHJhdGUpOwotCi0JLyogU2VsZWN0IHRoZSBjbG9jayBkaXZpc29yICovCi0Jc3dpdGNoIChyYXRlKSB7Ci0JY2FzZSA4MDAwOgotCWNhc2UgMTA5ODU6Ci0JY2FzZSAyMjA1MDoKLQljYXNlIDI0MDAwOgotCQljbGsgPSBGNTEyOwotCQljbGtfZGl2ID0gU1NDUjBfU2VyQ2xrRGl2KDE2KTsKLQkJYnJlYWs7Ci0JY2FzZSAxNjAwMDoKLQljYXNlIDIxOTcwOgotCWNhc2UgNDQxMDA6Ci0JY2FzZSA0ODAwMDoKLQkJY2xrID0gRjI1NjsKLQkJY2xrX2RpdiA9IFNTQ1IwX1NlckNsa0Rpdig4KTsKLQkJYnJlYWs7Ci0JY2FzZSAxMDY2NjoKLQljYXNlIDE0NjQ3OgotCWNhc2UgMjk0MDA6Ci0JY2FzZSAzMjAwMDoKLQkJY2xrID0gRjM4NDsKLQkJY2xrX2RpdiA9IFNTQ1IwX1NlckNsa0RpdigxMik7Ci0JCWJyZWFrOwotCX0KLQotCS8qIEZNVCBzZXR0aW5nIHNob3VsZCBiZSBtb3ZlZCBhd2F5IHdoZW4gb3RoZXIgRk1UcyBhcmUgYWRkZWQgKEZJWE1FKSAqLwotCWwzX2NvbW1hbmQoc2ExMXh4X3VkYTEzNDEtPnVkYTEzNDEsIENNRF9GT1JNQVQsICh2b2lkICopTFNCMTYpOwotCQotCWwzX2NvbW1hbmQoc2ExMXh4X3VkYTEzNDEtPnVkYTEzNDEsIENNRF9GUywgKHZvaWQgKiljbGspOyAgICAgICAgCi0JU2VyNFNTQ1IwID0gKFNlcjRTU0NSMCAmIH4weGZmMDApICsgY2xrX2RpdiArIFNTQ1IwX1NTRTsKLQlzYTExeHhfdWRhMTM0MS0+c2FtcGxlcmF0ZSA9IHJhdGU7Ci19Ci0KLS8qIH19fSAqLwotCi0vKiB7e3sgSFcgaW5pdCBhbmQgc2h1dGRvd24gKi8KLQotc3RhdGljIHZvaWQgc2ExMXh4X3VkYTEzNDFfYXVkaW9faW5pdChzdHJ1Y3Qgc2ExMXh4X3VkYTEzNDEgKnNhMTF4eF91ZGExMzQxKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQkvKiBTZXR1cCBETUEgc3R1ZmYgKi8KLQlzYTExeHhfdWRhMTM0MS0+c1tTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLXS5pZCA9ICJVREExMzQxIG91dCI7Ci0Jc2ExMXh4X3VkYTEzNDEtPnNbU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDS10uc3RyZWFtX2lkID0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSzsKLQlzYTExeHhfdWRhMTM0MS0+c1tTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLXS5kbWFfZGV2ID0gRE1BX1NlcjRTU1BXcjsKLQotCXNhMTF4eF91ZGExMzQxLT5zW1NORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRV0uaWQgPSAiVURBMTM0MSBpbiI7Ci0Jc2ExMXh4X3VkYTEzNDEtPnNbU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFXS5zdHJlYW1faWQgPSBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkU7Ci0Jc2ExMXh4X3VkYTEzNDEtPnNbU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFXS5kbWFfZGV2ID0gRE1BX1NlcjRTU1BSZDsKLQotCS8qIEluaXRpYWxpemUgdGhlIFVEQTEzNDEgaW50ZXJuYWwgc3RhdGUgKi8KLSAgICAgICAKLQkvKiBTZXR1cCB0aGUgdWFydHMgKi8KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JR0FGUiB8PSAoR1BJT19TU1BfQ0xLKTsKLQlHUERSICY9IH4oR1BJT19TU1BfQ0xLKTsKLQlTZXI0U1NDUjAgPSAwOwotCVNlcjRTU0NSMCA9IFNTQ1IwX0RhdGFTaXplKDE2KSArIFNTQ1IwX1RJICsgU1NDUjBfU2VyQ2xrRGl2KDgpOwotCVNlcjRTU0NSMSA9IFNTQ1IxX1NDbGtJYWN0TCArIFNTQ1IxX1NDbGsxUCArIFNTQ1IxX0V4dENsazsKLQlTZXI0U1NDUjAgfD0gU1NDUjBfU1NFOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQotCS8qIEVuYWJsZSB0aGUgYXVkaW8gcG93ZXIgKi8KLQotCWNscl9zYTExeHhfdWRhMTM0MV9lZ3BpbyhJUEFRX0VHUElPX0NPREVDX05SRVNFVCk7Ci0Jc2V0X3NhMTF4eF91ZGExMzQxX2VncGlvKElQQVFfRUdQSU9fQVVESU9fT04pOwotCXNldF9zYTExeHhfdWRhMTM0MV9lZ3BpbyhJUEFRX0VHUElPX1FNVVRFKTsKLSAKLQkvKiBXYWl0IGZvciB0aGUgVURBMTM0MSB0byB3YWtlIHVwICovCi0JbWRlbGF5KDEpOyAvL0ZJWE1FIC0gd2FzIHJlbW92ZWQgYnkgUGVyZXggLSBXaHk/Ci0KLQkvKiBJbml0aWFsaXplIHRoZSBVREExMzQxIGludGVybmFsIHN0YXRlICovCi0JbDNfb3BlbihzYTExeHhfdWRhMTM0MS0+dWRhMTM0MSk7Ci0JCi0JLyogZXh0ZXJuYWwgY2xvY2sgY29uZmlndXJhdGlvbiAoYWZ0ZXIgbDNfb3BlbiAtIHJlZ3MgbXVzdCBiZSBpbml0aWFsaXplZCAqLwotCXNhMTF4eF91ZGExMzQxX3NldF9zYW1wbGVyYXRlKHNhMTF4eF91ZGExMzQxLCBzYTExeHhfdWRhMTM0MS0+c2FtcGxlcmF0ZSk7Ci0KLQkvKiBXYWl0IGZvciB0aGUgVURBMTM0MSB0byB3YWtlIHVwICovCi0Jc2V0X3NhMTF4eF91ZGExMzQxX2VncGlvKElQQVFfRUdQSU9fQ09ERUNfTlJFU0VUKTsKLQltZGVsYXkoMSk7CQotCi0JLyogbWFrZSB0aGUgbGVmdCBhbmQgcmlnaHQgY2hhbm5lbHMgdW5zd2FwcGVkIChmbGlwIHRoZSBXUyBsYXRjaCkgKi8KLQlTZXI0U1NEUiA9IDA7Ci0KLQljbHJfc2ExMXh4X3VkYTEzNDFfZWdwaW8oSVBBUV9FR1BJT19RTVVURSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNhMTF4eF91ZGExMzQxX2F1ZGlvX3NodXRkb3duKHN0cnVjdCBzYTExeHhfdWRhMTM0MSAqc2ExMXh4X3VkYTEzNDEpCi17Ci0JLyogbXV0ZSBvbiAqLwotCXNldF9zYTExeHhfdWRhMTM0MV9lZ3BpbyhJUEFRX0VHUElPX1FNVVRFKTsKLQkKLQkvKiBkaXNhYmxlIHRoZSBhdWRpbyBwb3dlciBhbmQgYWxsIHNpZ25hbHMgbGVhZGluZyB0byB0aGUgYXVkaW8gY2hpcCAqLwotCWwzX2Nsb3NlKHNhMTF4eF91ZGExMzQxLT51ZGExMzQxKTsKLQlTZXI0U1NDUjAgPSAwOwotCWNscl9zYTExeHhfdWRhMTM0MV9lZ3BpbyhJUEFRX0VHUElPX0NPREVDX05SRVNFVCk7Ci0KLQkvKiBwb3dlciBvZmYgYW5kIG11dGUgb2ZmICovCi0JLyogRklYTUUgLSBpcyBtdXRpbmcgb2ZmIG5lY2VzYXJ5Pz8/ICovCi0KLQljbHJfc2ExMXh4X3VkYTEzNDFfZWdwaW8oSVBBUV9FR1BJT19BVURJT19PTik7Ci0JY2xyX3NhMTF4eF91ZGExMzQxX2VncGlvKElQQVFfRUdQSU9fUU1VVEUpOwotfQotCi0vKiB9fX0gKi8KLQotLyoge3t7IERNQSBzdGFmZiAqLwotCi0vKgotICogdGhlc2UgYXJlIHRoZSBhZGRyZXNzIGFuZCBzaXplcyB1c2VkIHRvIGZpbGwgdGhlIHhtaXQgYnVmZmVyCi0gKiBzbyB3ZSBjYW4gZ2V0IGEgY2xvY2sgaW4gcmVjb3JkIG9ubHkgbW9kZQotICovCi0jZGVmaW5lIEZPUkNFX0NMT0NLX0FERFIJCShkbWFfYWRkcl90KUZMVVNIX0JBU0VfUEhZUwotI2RlZmluZSBGT1JDRV9DTE9DS19TSVpFCQk0MDk2IC8vIHdhcyAyMDQ4Ci0KLS8vIEZJWE1FIFdoeSB0aGlzIHZhbHVlIGV4YWN0bHkgLSB3cm90ZSBjb21tZW50Ci0jZGVmaW5lIERNQV9CVUZfU0laRQk4MTc2CS8qIDw9IE1BWF9ETUFfU0laRSBmcm9tIGFzbS9hcmNoLXNhMTEwMC9kbWEuaCAqLwotCi0jaWZkZWYgSEhfVkVSU0lPTgotCi1zdGF0aWMgaW50IGF1ZGlvX2RtYV9yZXF1ZXN0KHN0cnVjdCBhdWRpb19zdHJlYW0gKnMsIHZvaWQgKCpjYWxsYmFjaykodm9pZCAqLCBpbnQpKQotewotCWludCByZXQ7Ci0KLQlyZXQgPSBzYTExMDBfcmVxdWVzdF9kbWEoJnMtPmRtYWNoLCBzLT5pZCwgcy0+ZG1hX2Rldik7Ci0JaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJ1bmFibGUgdG8gZ3JhYiBhdWRpbyBkbWEgMHgleFxuIiwgcy0+ZG1hX2Rldik7Ci0JCXJldHVybiByZXQ7Ci0JfQotCXNhMTEwMF9kbWFfc2V0X2NhbGxiYWNrKHMtPmRtYWNoLCBjYWxsYmFjayk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhdWRpb19kbWFfZnJlZShzdHJ1Y3QgYXVkaW9fc3RyZWFtICpzKQotewotCXNhMTEwMF9mcmVlX2RtYShzLT5kbWFjaCk7Ci0Jcy0+ZG1hY2ggPSAtMTsKLX0KLQotI2Vsc2UKLQotc3RhdGljIGludCBhdWRpb19kbWFfcmVxdWVzdChzdHJ1Y3QgYXVkaW9fc3RyZWFtICpzLCB2b2lkICgqY2FsbGJhY2spKHZvaWQgKikpCi17Ci0JaW50IHJldDsKLQotCXJldCA9IHNhMTEwMF9yZXF1ZXN0X2RtYShzLT5kbWFfZGV2LCBzLT5pZCwgY2FsbGJhY2ssIHMsICZzLT5kbWFfcmVncyk7Ci0JaWYgKHJldCA8IDApCi0JCXByaW50ayhLRVJOX0VSUiAidW5hYmxlIHRvIGdyYWIgYXVkaW8gZG1hIDB4JXhcbiIsIHMtPmRtYV9kZXYpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGF1ZGlvX2RtYV9mcmVlKHN0cnVjdCBhdWRpb19zdHJlYW0gKnMpCi17Ci0Jc2ExMTAwX2ZyZWVfZG1hKHMtPmRtYV9yZWdzKTsKLQlzLT5kbWFfcmVncyA9IDA7Ci19Ci0KLSNlbmRpZgotCi1zdGF0aWMgdV9pbnQgYXVkaW9fZ2V0X2RtYV9wb3Moc3RydWN0IGF1ZGlvX3N0cmVhbSAqcykKLXsKLQlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSA9IHMtPnN0cmVhbTsKLQlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwotCXVuc2lnbmVkIGludCBvZmZzZXQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlkbWFfYWRkcl90IGFkZHI7Ci0JCi0JLy8gdGhpcyBtdXN0IGJlIGNhbGxlZCB3LyBpbnRlcnJ1cHRzIGxvY2tlZCBvdXQgc2VlIGRtYS1zYTExMDAuYyBpbiB0aGUga2VybmVsCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnMtPmRtYV9sb2NrLCBmbGFncyk7Ci0jaWZkZWYgSEhfVkVSU0lPTgkKLQlzYTExMDBfZG1hX2dldF9jdXJyZW50KHMtPmRtYWNoLCBOVUxMLCAmYWRkcik7Ci0jZWxzZQotCWFkZHIgPSBzYTExMDBfZ2V0X2RtYV9wb3MoKHMpLT5kbWFfcmVncyk7Ci0jZW5kaWYKLQlvZmZzZXQgPSBhZGRyIC0gcnVudGltZS0+ZG1hX2FkZHI7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+ZG1hX2xvY2ssIGZsYWdzKTsKLQkKLQlvZmZzZXQgPSBieXRlc190b19mcmFtZXMocnVudGltZSxvZmZzZXQpOwotCWlmIChvZmZzZXQgPj0gcnVudGltZS0+YnVmZmVyX3NpemUpCi0JCW9mZnNldCA9IDA7Ci0KLQlyZXR1cm4gb2Zmc2V0OwotfQotCi0vKgotICogdGhpcyBzdG9wcyB0aGUgZG1hIGFuZCBjbGVhcnMgdGhlIGRtYSBwdHJzCi0gKi8KLXN0YXRpYyB2b2lkIGF1ZGlvX3N0b3BfZG1hKHN0cnVjdCBhdWRpb19zdHJlYW0gKnMpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZzLT5kbWFfbG9jaywgZmxhZ3MpOwkKLQlzLT5hY3RpdmUgPSAwOwotCXMtPnBlcmlvZCA9IDA7Ci0JLyogdGhpcyBzdG9wcyB0aGUgZG1hIGNoYW5uZWwgYW5kIGNsZWFycyB0aGUgYnVmZmVyIHB0cnMgKi8KLSNpZmRlZiBISF9WRVJTSU9OCi0Jc2ExMTAwX2RtYV9mbHVzaF9hbGwocy0+ZG1hY2gpOwotI2Vsc2UKLQlzYTExMDBfY2xlYXJfZG1hKHMtPmRtYV9yZWdzKTsJCi0jZW5kaWYKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5kbWFfbG9jaywgZmxhZ3MpOwotfQotCi1zdGF0aWMgdm9pZCBhdWRpb19wcm9jZXNzX2RtYShzdHJ1Y3QgYXVkaW9fc3RyZWFtICpzKQotewotCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtID0gcy0+c3RyZWFtOwotCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWU7Ci0JdW5zaWduZWQgaW50IGRtYV9zaXplOwkJCi0JdW5zaWduZWQgaW50IG9mZnNldDsKLQlpbnQgcmV0OwotICAgICAgICAgICAgICAgIAotCS8qIHdlIGFyZSByZXF1ZXN0ZWQgdG8gcHJvY2VzcyBzeW5jaHJvbml6YXRpb24gRE1BIHRyYW5zZmVyICovCi0JaWYgKHMtPnR4X3NwaW4pIHsKLQkJaWYgKHNuZF9CVUdfT04ocy0+c3RyZWFtX2lkICE9IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spKQotCQkJcmV0dXJuOwotCQkvKiBmaWxsIHRoZSB4bWl0IGRtYSBidWZmZXJzIGFuZCByZXR1cm4gKi8KLSNpZmRlZiBISF9WRVJTSU9OCi0JCXNhMTEwMF9kbWFfc2V0X3NwaW4ocy0+ZG1hY2gsIEZPUkNFX0NMT0NLX0FERFIsIEZPUkNFX0NMT0NLX1NJWkUpOwotI2Vsc2UKLQkJd2hpbGUgKDEpIHsKLQkJCXJldCA9IHNhMTEwMF9zdGFydF9kbWEocy0+ZG1hX3JlZ3MsIEZPUkNFX0NMT0NLX0FERFIsIEZPUkNFX0NMT0NLX1NJWkUpOwotCQkJaWYgKHJldCkKLQkJCQlyZXR1cm47ICAgCi0JCX0KLSNlbmRpZgotCQlyZXR1cm47Ci0JfQotCi0JLyogbXVzdCBiZSBzZXQgaGVyZSAtIG9ubHkgdmFsaWQgZm9yIHJ1bm5pbmcgc3RyZWFtcywgbm90IGZvciBmb3JjZWRfY2xvY2sgZG1hIGZpbGxzICAqLwotCXJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7Ci0Jd2hpbGUgKHMtPmFjdGl2ZSAmJiBzLT5wZXJpb2RzIDwgcnVudGltZS0+cGVyaW9kcykgewotCQlkbWFfc2l6ZSA9IGZyYW1lc190b19ieXRlcyhydW50aW1lLCBydW50aW1lLT5wZXJpb2Rfc2l6ZSk7Ci0JCWlmIChzLT5vbGRfb2Zmc2V0KSB7Ci0JCQkvKiBhIGxpdHRsZSB0cmljaywgd2UgbmVlZCByZXN1bWUgZnJvbSBvbGQgcG9zaXRpb24gKi8KLQkJCW9mZnNldCA9IGZyYW1lc190b19ieXRlcyhydW50aW1lLCBzLT5vbGRfb2Zmc2V0IC0gMSk7Ci0JCQlzLT5vbGRfb2Zmc2V0ID0gMDsKLQkJCXMtPnBlcmlvZHMgPSAwOwotCQkJcy0+cGVyaW9kID0gb2Zmc2V0IC8gZG1hX3NpemU7Ci0JCQlvZmZzZXQgJT0gZG1hX3NpemU7Ci0JCQlkbWFfc2l6ZSA9IGRtYV9zaXplIC0gb2Zmc2V0OwotCQkJaWYgKCFkbWFfc2l6ZSkKLQkJCQljb250aW51ZTsJCS8qIHNwZWNpYWwgY2FzZSAqLwotCQl9IGVsc2UgewotCQkJb2Zmc2V0ID0gZG1hX3NpemUgKiBzLT5wZXJpb2Q7Ci0JCQlzbmRfQlVHX09OKGRtYV9zaXplID4gRE1BX0JVRl9TSVpFKTsKLQkJfQotI2lmZGVmIEhIX1ZFUlNJT04KLQkJcmV0ID0gc2ExMTAwX2RtYV9xdWV1ZV9idWZmZXIocy0+ZG1hY2gsIHMsIHJ1bnRpbWUtPmRtYV9hZGRyICsgb2Zmc2V0LCBkbWFfc2l6ZSk7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm47IC8vRklYTUUKLSNlbHNlCi0JCXJldCA9IHNhMTEwMF9zdGFydF9kbWEoKHMpLT5kbWFfcmVncywgcnVudGltZS0+ZG1hX2FkZHIgKyBvZmZzZXQsIGRtYV9zaXplKTsKLQkJaWYgKHJldCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJhdWRpb19wcm9jZXNzX2RtYTogY2Fubm90IHF1ZXVlIERNQSBidWZmZXIgKCVpKVxuIiwgcmV0KTsKLQkJCXJldHVybjsKLQkJfQotI2VuZGlmCi0KLQkJcy0+cGVyaW9kKys7Ci0JCXMtPnBlcmlvZCAlPSBydW50aW1lLT5wZXJpb2RzOwotCQlzLT5wZXJpb2RzKys7Ci0JfQotfQotCi0jaWZkZWYgSEhfVkVSU0lPTgotc3RhdGljIHZvaWQgYXVkaW9fZG1hX2NhbGxiYWNrKHZvaWQgKmRhdGEsIGludCBzaXplKQotI2Vsc2UKLXN0YXRpYyB2b2lkIGF1ZGlvX2RtYV9jYWxsYmFjayh2b2lkICpkYXRhKQotI2VuZGlmCi17Ci0Jc3RydWN0IGF1ZGlvX3N0cmVhbSAqcyA9IGRhdGE7Ci0gICAgICAgIAotCS8qIAotCSAqIElmIHdlIGFyZSBnZXR0aW5nIGEgY2FsbGJhY2sgZm9yIGFuIGFjdGl2ZSBzdHJlYW0gdGhlbiB3ZSBpbmZvcm0KLQkgKiB0aGUgUENNIG1pZGRsZSBsYXllciB3ZSd2ZSBmaW5pc2hlZCBhIHBlcmlvZAotCSAqLwotIAlpZiAocy0+YWN0aXZlKQotCQlzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKHMtPnN0cmVhbSk7Ci0KLQlzcGluX2xvY2soJnMtPmRtYV9sb2NrKTsKLQlpZiAoIXMtPnR4X3NwaW4gJiYgcy0+cGVyaW9kcyA+IDApCi0JCXMtPnBlcmlvZHMtLTsKLQlhdWRpb19wcm9jZXNzX2RtYShzKTsKLQlzcGluX3VubG9jaygmcy0+ZG1hX2xvY2spOwotfQotCi0vKiB9fX0gKi8KLQotLyoge3t7IFBDTSBzZXR0aW5nICovCi0KLS8qIHt7eyB0cmlnZ2VyICYgdGltZXIgKi8KLQotc3RhdGljIGludCBzbmRfc2ExMXh4X3VkYTEzNDFfdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgaW50IGNtZCkKLXsKLQlzdHJ1Y3Qgc2ExMXh4X3VkYTEzNDEgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7Ci0JaW50IHN0cmVhbV9pZCA9IHN1YnN0cmVhbS0+cHN0ci0+c3RyZWFtOwotCXN0cnVjdCBhdWRpb19zdHJlYW0gKnMgPSAmY2hpcC0+c1tzdHJlYW1faWRdOwotCXN0cnVjdCBhdWRpb19zdHJlYW0gKnMxID0gJmNoaXAtPnNbc3RyZWFtX2lkIF4gMV07Ci0JaW50IGVyciA9IDA7Ci0KLQkvKiBub3RlIGxvY2FsIGludGVycnVwdHMgYXJlIGFscmVhZHkgZGlzYWJsZWQgaW4gdGhlIG1pZGxldmVsIGNvZGUgKi8KLQlzcGluX2xvY2soJnMtPmRtYV9sb2NrKTsKLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6Ci0JCS8qIG5vdyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSBhIHJlY29yZCBvbmx5IHN0cmVhbSBoYXMgYSBjbG9jayAqLwotCQlpZiAoc3RyZWFtX2lkID09IFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSAmJiAhczEtPmFjdGl2ZSkgewotCQkJLyogd2UgbmVlZCB0byBmb3JjZSBmaWxsIHRoZSB4bWl0IERNQSB3aXRoIHplcm9zICovCi0JCQlzMS0+dHhfc3BpbiA9IDE7Ci0JCQlhdWRpb19wcm9jZXNzX2RtYShzMSk7Ci0JCX0KLQkJLyogdGhpcyBjYXNlIGlzIHdoZW4geW91IHdlcmUgcmVjb3JkaW5nIHRoZW4geW91IHR1cm4gb24gYQotCQkgKiBwbGF5YmFjayBzdHJlYW0gc28gd2Ugc3RvcCAoYWxzbyBjbGVhcnMgaXQpIHRoZSBkbWEgZmlyc3QsCi0JCSAqIGNsZWFyIHRoZSBzeW5jIGZsYWcgYW5kIHRoZW4gd2UgbGV0IGl0IHR1cm5lZCBvbgotCQkgKi8JCQotCQllbHNlIHsKLSAJCQlzLT50eF9zcGluID0gMDsKLSAJCX0KLQotCQkvKiByZXF1ZXN0ZWQgc3RyZWFtIHN0YXJ0dXAgKi8KLQkJcy0+YWN0aXZlID0gMTsKLQkJYXVkaW9fcHJvY2Vzc19kbWEocyk7Ci0JCWJyZWFrOwotCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKLQkJLyogcmVxdWVzdGVkIHN0cmVhbSBzaHV0ZG93biAqLwotCQlhdWRpb19zdG9wX2RtYShzKTsKLQkJCi0JCS8qCi0JCSAqIG5vdyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSBhIHJlY29yZCBvbmx5IHN0cmVhbSBoYXMgYSBjbG9jawotCQkgKiBzbyBpZiB3ZSdyZSBzdG9wcGluZyBhIHBsYXliYWNrIHdpdGggYW4gYWN0aXZlIGNhcHR1cmUKLQkJICogd2UgbmVlZCB0byB0dXJuIHRoZSAwIGZpbGwgZG1hIG9uIGZvciB0aGUgeG1pdCBzaWRlCi0JCSAqLwotCQlpZiAoc3RyZWFtX2lkID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0sgJiYgczEtPmFjdGl2ZSkgewotCQkJLyogd2UgbmVlZCB0byBmb3JjZSBmaWxsIHRoZSB4bWl0IERNQSB3aXRoIHplcm9zICovCi0JCQlzLT50eF9zcGluID0gMTsKLQkJCWF1ZGlvX3Byb2Nlc3NfZG1hKHMpOwotCQl9Ci0JCS8qCi0JCSAqIHdlIGtpbGxlZCBhIGNhcHR1cmUgb25seSBzdHJlYW0sIHNvIHdlIHNob3VsZCBhbHNvIGtpbGwKLQkJICogdGhlIHplcm8gZmlsbCB0cmFuc21pdAotCQkgKi8KLQkJZWxzZSB7Ci0JCQlpZiAoczEtPnR4X3NwaW4pIHsKLQkJCQlzMS0+dHhfc3BpbiA9IDA7Ci0JCQkJYXVkaW9fc3RvcF9kbWEoczEpOwotCQkJfQotCQl9Ci0JCQotCQlicmVhazsKLQljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NVU1BFTkQ6Ci0JCXMtPmFjdGl2ZSA9IDA7Ci0jaWZkZWYgSEhfVkVSU0lPTgkJCi0JCXNhMTEwMF9kbWFfc3RvcChzLT5kbWFjaCk7Ci0jZWxzZQotCQkvL0ZJWE1FIC0gRE1BIEFQSQotI2VuZGlmCQkKLQkJcy0+b2xkX29mZnNldCA9IGF1ZGlvX2dldF9kbWFfcG9zKHMpICsgMTsKLSNpZmRlZiBISF9WRVJTSU9OCQkKLQkJc2ExMTAwX2RtYV9mbHVzaF9hbGwocy0+ZG1hY2gpOwotI2Vsc2UKLQkJLy9GSVhNRSAtIERNQSBBUEkKLSNlbmRpZgkJCi0JCXMtPnBlcmlvZHMgPSAwOwotCQlicmVhazsKLQljYXNlIFNORFJWX1BDTV9UUklHR0VSX1JFU1VNRToKLQkJcy0+YWN0aXZlID0gMTsKLQkJcy0+dHhfc3BpbiA9IDA7Ci0JCWF1ZGlvX3Byb2Nlc3NfZG1hKHMpOwotCQlpZiAoc3RyZWFtX2lkID09IFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSAmJiAhczEtPmFjdGl2ZSkgewotCQkJczEtPnR4X3NwaW4gPSAxOwotCQkJYXVkaW9fcHJvY2Vzc19kbWEoczEpOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUFVTSDoKLSNpZmRlZiBISF9WRVJTSU9OCQkKLQkJc2ExMTAwX2RtYV9zdG9wKHMtPmRtYWNoKTsKLSNlbHNlCi0JCS8vRklYTUUgLSBETUEgQVBJCi0jZW5kaWYKLQkJcy0+YWN0aXZlID0gMDsKLQkJaWYgKHN0cmVhbV9pZCA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKSB7Ci0JCQlpZiAoczEtPmFjdGl2ZSkgewotCQkJCXMtPnR4X3NwaW4gPSAxOwotCQkJCXMtPm9sZF9vZmZzZXQgPSBhdWRpb19nZXRfZG1hX3BvcyhzKSArIDE7Ci0jaWZkZWYgSEhfVkVSU0lPTgkJCQkKLQkJCQlzYTExMDBfZG1hX2ZsdXNoX2FsbChzLT5kbWFjaCk7Ci0jZWxzZQotCQkJCS8vRklYTUUgLSBETUEgQVBJCi0jZW5kaWYJCQkJCi0JCQkJYXVkaW9fcHJvY2Vzc19kbWEocyk7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoczEtPnR4X3NwaW4pIHsKLQkJCQlzMS0+dHhfc3BpbiA9IDA7Ci0jaWZkZWYgSEhfVkVSU0lPTgkJCQkKLQkJCQlzYTExMDBfZG1hX2ZsdXNoX2FsbChzMS0+ZG1hY2gpOwotI2Vsc2UKLQkJCQkvL0ZJWE1FIC0gRE1BIEFQSQotI2VuZGlmCQkJCQotCQkJfQotCQl9Ci0JCWJyZWFrOwotCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUkVMRUFTRToKLQkJcy0+YWN0aXZlID0gMTsKLQkJaWYgKHMtPm9sZF9vZmZzZXQpIHsKLQkJCXMtPnR4X3NwaW4gPSAwOwotCQkJYXVkaW9fcHJvY2Vzc19kbWEocyk7Ci0JCQlicmVhazsKLQkJfQotCQlpZiAoc3RyZWFtX2lkID09IFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSAmJiAhczEtPmFjdGl2ZSkgewotCQkJczEtPnR4X3NwaW4gPSAxOwotCQkJYXVkaW9fcHJvY2Vzc19kbWEoczEpOwotCQl9Ci0jaWZkZWYgSEhfVkVSU0lPTgkJCi0JCXNhMTEwMF9kbWFfcmVzdW1lKHMtPmRtYWNoKTsKLSNlbHNlCi0JCS8vRklYTUUgLSBETUEgQVBJCi0jZW5kaWYKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJZXJyID0gLUVJTlZBTDsKLQkJYnJlYWs7Ci0JfQotCXNwaW5fdW5sb2NrKCZzLT5kbWFfbG9jayk7CQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgc25kX3NhMTF4eF91ZGExMzQxX3ByZXBhcmUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCi17Ci0Jc3RydWN0IHNhMTF4eF91ZGExMzQxICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOwotCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7Ci0Jc3RydWN0IGF1ZGlvX3N0cmVhbSAqcyA9ICZjaGlwLT5zW3N1YnN0cmVhbS0+cHN0ci0+c3RyZWFtXTsKLSAgICAgICAgCi0JLyogc2V0IHJlcXVlc3RlZCBzYW1wbGVyYXRlICovCi0Jc2ExMXh4X3VkYTEzNDFfc2V0X3NhbXBsZXJhdGUoY2hpcCwgcnVudGltZS0+cmF0ZSk7Ci0KLQkvKiBzZXQgcmVxdWVzdGQgZm9ybWF0IHdoZW4gYXZhaWxhYmxlICovCi0JLyogc2V0IEZNVCBoZXJlICEhISBGSVhNRSAqLwotCi0Jcy0+cGVyaW9kID0gMDsKLQlzLT5wZXJpb2RzID0gMDsKLSAgICAgICAgCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzbmRfcGNtX3VmcmFtZXNfdCBzbmRfc2ExMXh4X3VkYTEzNDFfcG9pbnRlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKLXsKLQlzdHJ1Y3Qgc2ExMXh4X3VkYTEzNDEgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7Ci0JcmV0dXJuIGF1ZGlvX2dldF9kbWFfcG9zKCZjaGlwLT5zW3N1YnN0cmVhbS0+cHN0ci0+c3RyZWFtXSk7Ci19Ci0KLS8qIH19fSAqLwotCi1zdGF0aWMgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgc25kX3NhMTF4eF91ZGExMzQxX2NhcHR1cmUgPQotewotCS5pbmZvCQkJPSAoU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgfAotCQkJCSAgIFNORFJWX1BDTV9JTkZPX0JMT0NLX1RSQU5TRkVSIHwKLQkJCQkgICBTTkRSVl9QQ01fSU5GT19NTUFQIHwgU05EUlZfUENNX0lORk9fTU1BUF9WQUxJRCB8Ci0JCQkJICAgU05EUlZfUENNX0lORk9fUEFVU0UgfCBTTkRSVl9QQ01fSU5GT19SRVNVTUUpLAotCS5mb3JtYXRzCQk9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLAotCS5yYXRlcwkJCT0gKFNORFJWX1BDTV9SQVRFXzgwMDAgfCBTTkRSVl9QQ01fUkFURV8xNjAwMCB8XAotCQkJCSAgIFNORFJWX1BDTV9SQVRFXzIyMDUwIHwgU05EUlZfUENNX1JBVEVfMzIwMDAgfFwKLQkJCQkgICBTTkRSVl9QQ01fUkFURV80NDEwMCB8IFNORFJWX1BDTV9SQVRFXzQ4MDAwIHxcCi0JCQkJICAgU05EUlZfUENNX1JBVEVfS05PVCksCi0JLnJhdGVfbWluCQk9IDgwMDAsCi0JLnJhdGVfbWF4CQk9IDQ4MDAwLAotCS5jaGFubmVsc19taW4JCT0gMiwKLQkuY2hhbm5lbHNfbWF4CQk9IDIsCi0JLmJ1ZmZlcl9ieXRlc19tYXgJPSA2NCoxMDI0LAotCS5wZXJpb2RfYnl0ZXNfbWluCT0gNjQsCi0JLnBlcmlvZF9ieXRlc19tYXgJPSBETUFfQlVGX1NJWkUsCi0JLnBlcmlvZHNfbWluCQk9IDIsCi0JLnBlcmlvZHNfbWF4CQk9IDI1NSwKLQkuZmlmb19zaXplCQk9IDAsCi19OwotCi1zdGF0aWMgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgc25kX3NhMTF4eF91ZGExMzQxX3BsYXliYWNrID0KLXsKLQkuaW5mbwkJCT0gKFNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVEIHwKLQkJCQkgICBTTkRSVl9QQ01fSU5GT19CTE9DS19UUkFOU0ZFUiB8Ci0JCQkJICAgU05EUlZfUENNX0lORk9fTU1BUCB8IFNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQgfAotCQkJCSAgIFNORFJWX1BDTV9JTkZPX1BBVVNFIHwgU05EUlZfUENNX0lORk9fUkVTVU1FKSwKLQkuZm9ybWF0cwkJPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwKLQkucmF0ZXMJCQk9IChTTkRSVl9QQ01fUkFURV84MDAwIHwgU05EUlZfUENNX1JBVEVfMTYwMDAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05EUlZfUENNX1JBVEVfMjIwNTAgfCBTTkRSVl9QQ01fUkFURV8zMjAwMCB8XAotCQkJCSAgIFNORFJWX1BDTV9SQVRFXzQ0MTAwIHwgU05EUlZfUENNX1JBVEVfNDgwMDAgfFwKLQkJCQkgICBTTkRSVl9QQ01fUkFURV9LTk9UKSwKLQkucmF0ZV9taW4JCT0gODAwMCwKLQkucmF0ZV9tYXgJCT0gNDgwMDAsCi0JLmNoYW5uZWxzX21pbgkJPSAyLAotCS5jaGFubmVsc19tYXgJCT0gMiwKLQkuYnVmZmVyX2J5dGVzX21heAk9IDY0KjEwMjQsCi0JLnBlcmlvZF9ieXRlc19taW4JPSA2NCwKLQkucGVyaW9kX2J5dGVzX21heAk9IERNQV9CVUZfU0laRSwKLQkucGVyaW9kc19taW4JCT0gMiwKLQkucGVyaW9kc19tYXgJCT0gMjU1LAotCS5maWZvX3NpemUJCT0gMCwKLX07Ci0KLXN0YXRpYyBpbnQgc25kX2NhcmRfc2ExMXh4X3VkYTEzNDFfb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKLXsKLQlzdHJ1Y3Qgc2ExMXh4X3VkYTEzNDEgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7Ci0Jc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKLQlpbnQgc3RyZWFtX2lkID0gc3Vic3RyZWFtLT5wc3RyLT5zdHJlYW07Ci0JaW50IGVycjsKLQotCWNoaXAtPnNbc3RyZWFtX2lkXS5zdHJlYW0gPSBzdWJzdHJlYW07Ci0KLQlpZiAoc3RyZWFtX2lkID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCi0JCXJ1bnRpbWUtPmh3ID0gc25kX3NhMTF4eF91ZGExMzQxX3BsYXliYWNrOwotCWVsc2UKLQkJcnVudGltZS0+aHcgPSBzbmRfc2ExMXh4X3VkYTEzNDFfY2FwdHVyZTsKLQlpZiAoKGVyciA9IHNuZF9wY21faHdfY29uc3RyYWludF9pbnRlZ2VyKHJ1bnRpbWUsIFNORFJWX1BDTV9IV19QQVJBTV9QRVJJT0RTKSkgPCAwKQotCQlyZXR1cm4gZXJyOwotCWlmICgoZXJyID0gc25kX3BjbV9od19jb25zdHJhaW50X2xpc3QocnVudGltZSwgMCwgU05EUlZfUENNX0hXX1BBUkFNX1JBVEUsICZod19jb25zdHJhaW50c19yYXRlcykpIDwgMCkKLQkJcmV0dXJuIGVycjsKLSAgICAgICAgCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc25kX2NhcmRfc2ExMXh4X3VkYTEzNDFfY2xvc2Uoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCi17Ci0Jc3RydWN0IHNhMTF4eF91ZGExMzQxICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOwotCi0JY2hpcC0+c1tzdWJzdHJlYW0tPnBzdHItPnN0cmVhbV0uc3RyZWFtID0gTlVMTDsKLQlyZXR1cm4gMDsKLX0KLQotLyoge3t7IEhXIHBhcmFtcyAmIGZyZWUgKi8KLQotc3RhdGljIGludCBzbmRfc2ExMXh4X3VkYTEzNDFfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAotCQkJCQlzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKmh3X3BhcmFtcykKLXsKLSAgICAgICAgCi0JcmV0dXJuIHNuZF9wY21fbGliX21hbGxvY19wYWdlcyhzdWJzdHJlYW0sIHBhcmFtc19idWZmZXJfYnl0ZXMoaHdfcGFyYW1zKSk7Ci19Ci0KLXN0YXRpYyBpbnQgc25kX3NhMTF4eF91ZGExMzQxX2h3X2ZyZWUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCi17Ci0JcmV0dXJuIHNuZF9wY21fbGliX2ZyZWVfcGFnZXMoc3Vic3RyZWFtKTsKLX0KLQotLyogfX19ICovCi0KLXN0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9vcHMgc25kX2NhcmRfc2ExMXh4X3VkYTEzNDFfcGxheWJhY2tfb3BzID0gewotCS5vcGVuCQkJPSBzbmRfY2FyZF9zYTExeHhfdWRhMTM0MV9vcGVuLAotCS5jbG9zZQkJCT0gc25kX2NhcmRfc2ExMXh4X3VkYTEzNDFfY2xvc2UsCi0JLmlvY3RsCQkJPSBzbmRfcGNtX2xpYl9pb2N0bCwKLQkuaHdfcGFyYW1zCSAgICAgICAgPSBzbmRfc2ExMXh4X3VkYTEzNDFfaHdfcGFyYW1zLAotCS5od19mcmVlCSAgICAgICAgPSBzbmRfc2ExMXh4X3VkYTEzNDFfaHdfZnJlZSwKLQkucHJlcGFyZQkJPSBzbmRfc2ExMXh4X3VkYTEzNDFfcHJlcGFyZSwKLQkudHJpZ2dlcgkJPSBzbmRfc2ExMXh4X3VkYTEzNDFfdHJpZ2dlciwKLQkucG9pbnRlcgkJPSBzbmRfc2ExMXh4X3VkYTEzNDFfcG9pbnRlciwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9vcHMgc25kX2NhcmRfc2ExMXh4X3VkYTEzNDFfY2FwdHVyZV9vcHMgPSB7Ci0JLm9wZW4JCQk9IHNuZF9jYXJkX3NhMTF4eF91ZGExMzQxX29wZW4sCi0JLmNsb3NlCQkJPSBzbmRfY2FyZF9zYTExeHhfdWRhMTM0MV9jbG9zZSwKLQkuaW9jdGwJCQk9IHNuZF9wY21fbGliX2lvY3RsLAotCS5od19wYXJhbXMJICAgICAgICA9IHNuZF9zYTExeHhfdWRhMTM0MV9od19wYXJhbXMsCi0JLmh3X2ZyZWUJICAgICAgICA9IHNuZF9zYTExeHhfdWRhMTM0MV9od19mcmVlLAotCS5wcmVwYXJlCQk9IHNuZF9zYTExeHhfdWRhMTM0MV9wcmVwYXJlLAotCS50cmlnZ2VyCQk9IHNuZF9zYTExeHhfdWRhMTM0MV90cmlnZ2VyLAotCS5wb2ludGVyCQk9IHNuZF9zYTExeHhfdWRhMTM0MV9wb2ludGVyLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgc25kX2NhcmRfc2ExMXh4X3VkYTEzNDFfcGNtKHN0cnVjdCBzYTExeHhfdWRhMTM0MSAqc2ExMXh4X3VkYTEzNDEsIGludCBkZXZpY2UpCi17Ci0Jc3RydWN0IHNuZF9wY20gKnBjbTsKLQlpbnQgZXJyOwotCi0JaWYgKChlcnIgPSBzbmRfcGNtX25ldyhzYTExeHhfdWRhMTM0MS0+Y2FyZCwgIlVEQTEzNDEgUENNIiwgZGV2aWNlLCAxLCAxLCAmcGNtKSkgPCAwKQotCQlyZXR1cm4gZXJyOwotCi0JLyoKLQkgKiB0aGlzIHNldHMgdXAgb3VyIGluaXRpYWwgYnVmZmVycyBhbmQgc2V0cyB0aGUgZG1hX3R5cGUgdG8gaXNhLgotCSAqIGlzYSB3b3JrcyBidXQgSSdtIG5vdCBzdXJlIHdoeSAob3IgaWYpIGl0J3MgdGhlIHJpZ2h0IGNob2ljZQotCSAqIHRoaXMgbWF5IGJlIHRvbyBsYXJnZSwgdHJ5aW5nIGl0IGZvciBub3cKLQkgKi8KLQlzbmRfcGNtX2xpYl9wcmVhbGxvY2F0ZV9wYWdlc19mb3JfYWxsKHBjbSwgU05EUlZfRE1BX1RZUEVfREVWLCAKLQkJCQkJICAgICAgc25kX2RtYV9pc2FfZGF0YSgpLAotCQkJCQkgICAgICA2NCoxMDI0LCA2NCoxMDI0KTsKLQotCXNuZF9wY21fc2V0X29wcyhwY20sIFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0ssICZzbmRfY2FyZF9zYTExeHhfdWRhMTM0MV9wbGF5YmFja19vcHMpOwotCXNuZF9wY21fc2V0X29wcyhwY20sIFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSwgJnNuZF9jYXJkX3NhMTF4eF91ZGExMzQxX2NhcHR1cmVfb3BzKTsKLQlwY20tPnByaXZhdGVfZGF0YSA9IHNhMTF4eF91ZGExMzQxOwotCXBjbS0+aW5mb19mbGFncyA9IDA7Ci0Jc3RyY3B5KHBjbS0+bmFtZSwgIlVEQTEzNDEgUENNIik7Ci0KLQlzYTExeHhfdWRhMTM0MV9hdWRpb19pbml0KHNhMTF4eF91ZGExMzQxKTsKLQotCS8qIHNldHVwIERNQSBjb250cm9sbGVyICovCi0JYXVkaW9fZG1hX3JlcXVlc3QoJnNhMTF4eF91ZGExMzQxLT5zW1NORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0tdLCBhdWRpb19kbWFfY2FsbGJhY2spOwotCWF1ZGlvX2RtYV9yZXF1ZXN0KCZzYTExeHhfdWRhMTM0MS0+c1tTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkVdLCBhdWRpb19kbWFfY2FsbGJhY2spOwotCi0Jc2ExMXh4X3VkYTEzNDEtPnBjbSA9IHBjbTsKLQotCXJldHVybiAwOwotfQotCi0vKiB9fX0gKi8KLQotLyoge3t7IG1vZHVsZSBpbml0ICYgZXhpdCAqLwotCi0jaWZkZWYgQ09ORklHX1BNCi0KLXN0YXRpYyBpbnQgc25kX3NhMTF4eF91ZGExMzQxX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2cHRyLAotCQkJCSAgICAgIHBtX21lc3NhZ2VfdCBzdGF0ZSkKLXsKLQlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXZwdHIpOwotCXN0cnVjdCBzYTExeHhfdWRhMTM0MSAqY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKLQotCXNuZF9wb3dlcl9jaGFuZ2Vfc3RhdGUoY2FyZCwgU05EUlZfQ1RMX1BPV0VSX0QzaG90KTsKLQlzbmRfcGNtX3N1c3BlbmRfYWxsKGNoaXAtPnBjbSk7Ci0jaWZkZWYgSEhfVkVSU0lPTgotCXNhMTEwMF9kbWFfc2xlZXAoY2hpcC0+c1tTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLXS5kbWFjaCk7Ci0Jc2ExMTAwX2RtYV9zbGVlcChjaGlwLT5zW1NORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRV0uZG1hY2gpOwotI2Vsc2UKLQkvL0ZJWE1FCi0jZW5kaWYKLQlsM19jb21tYW5kKGNoaXAtPnVkYTEzNDEsIENNRF9TVVNQRU5ELCBOVUxMKTsKLQlzYTExeHhfdWRhMTM0MV9hdWRpb19zaHV0ZG93bihjaGlwKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHNuZF9zYTExeHhfdWRhMTM0MV9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2cHRyKQotewotCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldnB0cik7Ci0Jc3RydWN0IHNhMTF4eF91ZGExMzQxICpjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwotCi0Jc2ExMXh4X3VkYTEzNDFfYXVkaW9faW5pdChjaGlwKTsKLQlsM19jb21tYW5kKGNoaXAtPnVkYTEzNDEsIENNRF9SRVNVTUUsIE5VTEwpOwotI2lmZGVmIEhIX1ZFUlNJT04JCi0Jc2ExMTAwX2RtYV93YWtldXAoY2hpcC0+c1tTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLXS5kbWFjaCk7Ci0Jc2ExMTAwX2RtYV93YWtldXAoY2hpcC0+c1tTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkVdLmRtYWNoKTsKLSNlbHNlCi0JLy9GSVhNRQotI2VuZGlmCi0Jc25kX3Bvd2VyX2NoYW5nZV9zdGF0ZShjYXJkLCBTTkRSVl9DVExfUE9XRVJfRDApOwotCXJldHVybiAwOwotfQotI2VuZGlmIC8qIENPTUZJR19QTSAqLwotCi12b2lkIHNuZF9zYTExeHhfdWRhMTM0MV9mcmVlKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCkKLXsKLQlzdHJ1Y3Qgc2ExMXh4X3VkYTEzNDEgKmNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7Ci0KLQlhdWRpb19kbWFfZnJlZSgmY2hpcC0+c1tTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLXSk7Ci0JYXVkaW9fZG1hX2ZyZWUoJmNoaXAtPnNbU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFXSk7Ci19Ci0KLXN0YXRpYyBpbnQgX19kZXZpbml0IHNhMTF4eF91ZGExMzQxX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldnB0cikKLXsKLQlpbnQgZXJyOwotCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKLQlzdHJ1Y3Qgc2ExMXh4X3VkYTEzNDEgKmNoaXA7Ci0KLQkvKiByZWdpc3RlciB0aGUgc291bmRjYXJkICovCi0JY2FyZCA9IHNuZF9jYXJkX25ldygtMSwgaWQsIFRISVNfTU9EVUxFLCBzaXplb2Yoc3RydWN0IHNhMTF4eF91ZGExMzQxKSk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQljaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwotCXNwaW5fbG9ja19pbml0KCZjaGlwLT5zWzBdLmRtYV9sb2NrKTsKLQlzcGluX2xvY2tfaW5pdCgmY2hpcC0+c1sxXS5kbWFfbG9jayk7Ci0KLQljYXJkLT5wcml2YXRlX2ZyZWUgPSBzbmRfc2ExMXh4X3VkYTEzNDFfZnJlZTsKLQljaGlwLT5jYXJkID0gY2FyZDsKLQljaGlwLT5zYW1wbGVyYXRlID0gQVVESU9fUkFURV9ERUZBVUxUOwotCi0JLy8gbWl4ZXIKLQlpZiAoKGVyciA9IHNuZF9jaGlwX3VkYTEzNDFfbWl4ZXJfbmV3KGNhcmQsICZjaGlwLT51ZGExMzQxKSkpCi0JCWdvdG8gbm9kZXY7Ci0KLQkvLyBQQ00KLQlpZiAoKGVyciA9IHNuZF9jYXJkX3NhMTF4eF91ZGExMzQxX3BjbShjaGlwLCAwKSkgPCAwKQotCQlnb3RvIG5vZGV2OwotICAgICAgICAKLQlzdHJjcHkoY2FyZC0+ZHJpdmVyLCAiVURBMTM0MSIpOwotCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsICJIMzYwMCBVREExMzQxVFMiKTsKLQlzcHJpbnRmKGNhcmQtPmxvbmduYW1lLCAiQ29tcGFxIGlQQVEgSDM2MDAgd2l0aCBQaGlsaXBzIFVEQTEzNDFUUyIpOwotICAgICAgICAKLQlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsICZkZXZwdHItPmRldik7Ci0KLQlpZiAoKGVyciA9IHNuZF9jYXJkX3JlZ2lzdGVyKGNhcmQpKSA9PSAwKSB7Ci0JCXByaW50ayggS0VSTl9JTkZPICJpUEFRIGF1ZGlvIHN1cHBvcnQgaW5pdGlhbGl6ZWRcbiIgKTsKLQkJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2cHRyLCBjYXJkKTsKLQkJcmV0dXJuIDA7Ci0JfQotICAgICAgICAKLSBub2RldjoKLQlzbmRfY2FyZF9mcmVlKGNhcmQpOwotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgX19kZXZleGl0IHNhMTF4eF91ZGExMzQxX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZwdHIpCi17Ci0Jc25kX2NhcmRfZnJlZShwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXZwdHIpKTsKLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXZwdHIsIE5VTEwpOwotCXJldHVybiAwOwotfQotCi0jZGVmaW5lIFNBMTFYWF9VREExMzQxX0RSSVZFUgkic2ExMXh4X3VkYTEzNDEiCi0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNhMTF4eF91ZGExMzQxX2RyaXZlciA9IHsKLQkucHJvYmUJCT0gc2ExMXh4X3VkYTEzNDFfcHJvYmUsCi0JLnJlbW92ZQkJPSBfX2RldmV4aXRfcChzYTExeHhfdWRhMTM0MV9yZW1vdmUpLAotI2lmZGVmIENPTkZJR19QTQotCS5zdXNwZW5kCT0gc25kX3NhMTF4eF91ZGExMzQxX3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBzbmRfc2ExMXh4X3VkYTEzNDFfcmVzdW1lLAotI2VuZGlmCi0JLmRyaXZlcgkJPSB7Ci0JCS5uYW1lCT0gU0ExMVhYX1VEQTEzNDFfRFJJVkVSLAotCX0sCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBzYTExeHhfdWRhMTM0MV9pbml0KHZvaWQpCi17Ci0JaW50IGVycjsKLQotCWlmICghbWFjaGluZV9pc19oM3h4eCgpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQlpZiAoKGVyciA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmc2ExMXh4X3VkYTEzNDFfZHJpdmVyKSkgPCAwKQotCQlyZXR1cm4gZXJyOwotCWRldmljZSA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoU0ExMVhYX1VEQTEzNDFfRFJJVkVSLCAtMSwgTlVMTCwgMCk7Ci0JaWYgKCFJU19FUlIoZGV2aWNlKSkgewotCQlpZiAocGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2aWNlKSkKLQkJCXJldHVybiAwOwotCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihkZXZpY2UpOwotCQllcnIgPSAtRU5PREVWOwotCX0gZWxzZQotCQllcnIgPSBQVFJfRVJSKGRldmljZSk7Ci0JcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNhMTF4eF91ZGExMzQxX2RyaXZlcik7Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IHNhMTF4eF91ZGExMzQxX2V4aXQodm9pZCkKLXsKLQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihkZXZpY2UpOwotCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzYTExeHhfdWRhMTM0MV9kcml2ZXIpOwotfQotCi1tb2R1bGVfaW5pdChzYTExeHhfdWRhMTM0MV9pbml0KTsKLW1vZHVsZV9leGl0KHNhMTF4eF91ZGExMzQxX2V4aXQpOwotCi0vKiB9fX0gKi8KLQotLyoKLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGluZGVudC10YWJzLW1vZGU6IHQKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvc291bmQvYXRtZWwvS2NvbmZpZyBiL3NvdW5kL2F0bWVsL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmMyMjhhOQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL2F0bWVsL0tjb25maWcKQEAgLTAsMCArMSwxOSBAQAorbWVudSAiQXRtZWwgZGV2aWNlcyAoQVZSMzIgYW5kIEFUOTEpIgorCWRlcGVuZHMgb24gQVZSMzIgfHwgQVJDSF9BVDkxCisKK2NvbmZpZyBTTkRfQVRNRUxfQUJEQUMKKwl0cmlzdGF0ZSAiQXRtZWwgQXVkaW8gQml0c3RyZWFtIERBQyAoQUJEQUMpIGRyaXZlciIKKwlzZWxlY3QgU05EX1BDTQorCWRlcGVuZHMgb24gRFdfRE1BQyAmJiBBVlIzMgorCWhlbHAKKwkgIEFMU0Egc291bmQgZHJpdmVyIGZvciB0aGUgQXRtZWwgQXVkaW8gQml0c3RyZWFtIERBQyAoQUJEQUMpLgorCitjb25maWcgU05EX0FUTUVMX0FDOTdDCisJdHJpc3RhdGUgIkF0bWVsIEFDOTcgQ29udHJvbGxlciAoQUM5N0MpIGRyaXZlciIKKwlzZWxlY3QgU05EX1BDTQorCXNlbGVjdCBTTkRfQUM5N19DT0RFQworCWRlcGVuZHMgb24gRFdfRE1BQyAmJiBBVlIzMgorCWhlbHAKKwkgIEFMU0Egc291bmQgZHJpdmVyIGZvciB0aGUgQXRtZWwgQUM5NyBjb250cm9sbGVyLgorCitlbmRtZW51CmRpZmYgLS1naXQgYS9zb3VuZC9hdG1lbC9NYWtlZmlsZSBiL3NvdW5kL2F0bWVsL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxOWRjZmEKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9hdG1lbC9NYWtlZmlsZQpAQCAtMCwwICsxLDUgQEAKK3NuZC1hdG1lbC1hYmRhYy1vYmpzCQk6PSBhYmRhYy5vCitzbmQtYXRtZWwtYWM5N2Mtb2JqcwkJOj0gYWM5N2MubworCitvYmotJChDT05GSUdfU05EX0FUTUVMX0FCREFDKQkrPSBzbmQtYXRtZWwtYWJkYWMubworb2JqLSQoQ09ORklHX1NORF9BVE1FTF9BQzk3QykJKz0gc25kLWF0bWVsLWFjOTdjLm8KZGlmZiAtLWdpdCBhL3NvdW5kL2F0bWVsL2FiZGFjLmMgYi9zb3VuZC9hdG1lbC9hYmRhYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4YjNjN2YKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9hdG1lbC9hYmRhYy5jCkBAIC0wLDAgKzEsNjAyIEBACisvKgorICogRHJpdmVyIGZvciB0aGUgQXRtZWwgb24tY2hpcCBBdWRpbyBCaXRzdHJlYW0gREFDIChBQkRBQykKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwOSBBdG1lbCBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9kd19kbWFjLmg+CisjaW5jbHVkZSA8bGludXgvZG1hZW5naW5lLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorI2luY2x1ZGUgPHNvdW5kL2F0bWVsLWFiZGFjLmg+CisKKy8qIERBQyByZWdpc3RlciBvZmZzZXRzICovCisjZGVmaW5lIERBQ19EQVRBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAKKyNkZWZpbmUgREFDX0NUUkwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOAorI2RlZmluZSBEQUNfSU5UX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBjCisjZGVmaW5lIERBQ19JTlRfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAKKyNkZWZpbmUgREFDX0lOVF9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxNAorI2RlZmluZSBEQUNfSU5UX0NMUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDE4CisjZGVmaW5lIERBQ19JTlRfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMWMKKworLyogQml0ZmllbGRzIGluIENUUkwgKi8KKyNkZWZpbmUgREFDX1NXQVBfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisjZGVmaW5lIERBQ19TV0FQX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIERBQ19FTl9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQorI2RlZmluZSBEQUNfRU5fU0laRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvKiBCaXRmaWVsZHMgaW4gSU5UX01BU0svSU5UX0VOL0lOVF9ESVMvSU5UX1NUQVRVUy9JTlRfQ0xSICovCisjZGVmaW5lIERBQ19VTkRFUlJVTl9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAyOAorI2RlZmluZSBEQUNfVU5ERVJSVU5fU0laRSAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBEQUNfVFhfUkVBRFlfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgMjkKKyNkZWZpbmUgREFDX1RYX1JFQURZX1NJWkUgICAgICAgICAgICAgICAgICAgICAgIDEKKworLyogQml0IG1hbmlwdWxhdGlvbiBtYWNyb3MgKi8KKyNkZWZpbmUgREFDX0JJVChuYW1lKQkJCQkJXAorCSgxIDw8IERBQ18jI25hbWUjI19PRkZTRVQpCisjZGVmaW5lIERBQ19CRihuYW1lLCB2YWx1ZSkJCQkJXAorCSgoKHZhbHVlKSAmICgoMSA8PCBEQUNfIyNuYW1lIyNfU0laRSkgLSAxKSkJXAorCSA8PCBEQUNfIyNuYW1lIyNfT0ZGU0VUKQorI2RlZmluZSBEQUNfQkZFWFQobmFtZSwgdmFsdWUpCQkJCVwKKwkoKCh2YWx1ZSkgPj4gREFDXyMjbmFtZSMjX09GRlNFVCkJCVwKKwkgJiAoKDEgPDwgREFDXyMjbmFtZSMjX1NJWkUpIC0gMSkpCisjZGVmaW5lIERBQ19CRklOUyhuYW1lLCB2YWx1ZSwgb2xkKQkJCVwKKwkoKChvbGQpICYgfigoKDEgPDwgREFDXyMjbmFtZSMjX1NJWkUpIC0gMSkJXAorCQkgICAgPDwgREFDXyMjbmFtZSMjX09GRlNFVCkpCQlcCisJIHwgREFDX0JGKG5hbWUsIHZhbHVlKSkKKworLyogUmVnaXN0ZXIgYWNjZXNzIG1hY3JvcyAqLworI2RlZmluZSBkYWNfcmVhZGwocG9ydCwgcmVnKQkJCQlcCisJX19yYXdfcmVhZGwoKHBvcnQpLT5yZWdzICsgREFDXyMjcmVnKQorI2RlZmluZSBkYWNfd3JpdGVsKHBvcnQsIHJlZywgdmFsdWUpCQkJXAorCV9fcmF3X3dyaXRlbCgodmFsdWUpLCAocG9ydCktPnJlZ3MgKyBEQUNfIyNyZWcpCisKKy8qCisgKiBBQkRBQyBzdXBwb3J0cyBhIG1heGltdW0gb2YgNiBkaWZmZXJlbnQgcmF0ZXMgZnJvbSBhIGdlbmVyaWMgY2xvY2suIFRoZQorICogZ2VuZXJpYyBjbG9jayBoYXMgYSBwb3dlciBvZiB0d28gZGl2aWRlciwgd2hpY2ggZ2l2ZXMgNiBzdGVwcyBmcm9tIDE5MiBrSHoKKyAqIHRvIDUxMTIgSHouCisgKi8KKyNkZWZpbmUgTUFYX05VTV9SQVRFUwk2CisvKiBBTFNBIHNlZW1zIHRvIHVzZSByYXRlcyBiZXR3ZWVuIDE5MjAwMCBIeiBhbmQgNTExMiBIei4gKi8KKyNkZWZpbmUgUkFURV9NQVgJMTkyMDAwCisjZGVmaW5lIFJBVEVfTUlOCTUxMTIKKworZW51bSB7CisJRE1BX1JFQURZID0gMCwKK307CisKK3N0cnVjdCBhdG1lbF9hYmRhY19kbWEgeworCXN0cnVjdCBkbWFfY2hhbgkJKmNoYW47CisJc3RydWN0IGR3X2N5Y2xpY19kZXNjCSpjZGVzYzsKK307CisKK3N0cnVjdCBhdG1lbF9hYmRhYyB7CisJc3RydWN0IGNsawkJCQkqcGNsazsKKwlzdHJ1Y3QgY2xrCQkJCSpzYW1wbGVfY2xrOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UJCQkqcGRldjsKKwlzdHJ1Y3QgYXRtZWxfYWJkYWNfZG1hCQkJZG1hOworCisJc3RydWN0IHNuZF9wY21faHdfY29uc3RyYWludF9saXN0CWNvbnN0cmFpbnRzX3JhdGVzOworCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbQkJKnN1YnN0cmVhbTsKKwlzdHJ1Y3Qgc25kX2NhcmQJCQkJKmNhcmQ7CisJc3RydWN0IHNuZF9wY20JCQkJKnBjbTsKKworCXZvaWQgX19pb21lbQkJCQkqcmVnczsKKwl1bnNpZ25lZCBsb25nCQkJCWZsYWdzOworCXVuc2lnbmVkIGludAkJCQlyYXRlc1tNQVhfTlVNX1JBVEVTXTsKKwl1bnNpZ25lZCBpbnQJCQkJcmF0ZXNfbnVtOworCWludAkJCQkJaXJxOworfTsKKworI2RlZmluZSBnZXRfZGFjKGNhcmQpICgoc3RydWN0IGF0bWVsX2FiZGFjICopKGNhcmQpLT5wcml2YXRlX2RhdGEpCisKKy8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSBETUEgZHJpdmVyLiAqLworc3RhdGljIHZvaWQgYXRtZWxfYWJkYWNfZG1hX3BlcmlvZF9kb25lKHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgYXRtZWxfYWJkYWMgKmRhYyA9IGFyZzsKKwlzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKGRhYy0+c3Vic3RyZWFtKTsKK30KKworc3RhdGljIGludCBhdG1lbF9hYmRhY19wcmVwYXJlX2RtYShzdHJ1Y3QgYXRtZWxfYWJkYWMgKmRhYywKKwkJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwlzdHJ1Y3QgZG1hX2NoYW4JCQkqY2hhbiA9IGRhYy0+ZG1hLmNoYW47CisJc3RydWN0IGR3X2N5Y2xpY19kZXNjCQkqY2Rlc2M7CisJc3RydWN0IHNuZF9wY21fcnVudGltZQkJKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJdW5zaWduZWQgbG9uZwkJCWJ1ZmZlcl9sZW4sIHBlcmlvZF9sZW47CisKKwkvKgorCSAqIFdlIGRvbid0IGRvIERNQSBvbiAiY29tcGxleCIgdHJhbnNmZXJzLCBpLmUuIHdpdGgKKwkgKiBub24taGFsZndvcmQtYWxpZ25lZCBidWZmZXJzIG9yIGxlbmd0aHMuCisJICovCisJaWYgKHJ1bnRpbWUtPmRtYV9hZGRyICYgMSB8fCBydW50aW1lLT5idWZmZXJfc2l6ZSAmIDEpIHsKKwkJZGV2X2RiZygmZGFjLT5wZGV2LT5kZXYsICJ0b28gY29tcGxleCB0cmFuc2ZlclxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWJ1ZmZlcl9sZW4gPSBmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgcnVudGltZS0+YnVmZmVyX3NpemUpOworCXBlcmlvZF9sZW4gPSBmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgcnVudGltZS0+cGVyaW9kX3NpemUpOworCisJY2Rlc2MgPSBkd19kbWFfY3ljbGljX3ByZXAoY2hhbiwgcnVudGltZS0+ZG1hX2FkZHIsIGJ1ZmZlcl9sZW4sCisJCQlwZXJpb2RfbGVuLCBETUFfVE9fREVWSUNFKTsKKwlpZiAoSVNfRVJSKGNkZXNjKSkgeworCQlkZXZfZGJnKCZkYWMtPnBkZXYtPmRldiwgImNvdWxkIG5vdCBwcmVwYXJlIGN5Y2xpYyBETUFcbiIpOworCQlyZXR1cm4gUFRSX0VSUihjZGVzYyk7CisJfQorCisJY2Rlc2MtPnBlcmlvZF9jYWxsYmFjayA9IGF0bWVsX2FiZGFjX2RtYV9wZXJpb2RfZG9uZTsKKwljZGVzYy0+cGVyaW9kX2NhbGxiYWNrX3BhcmFtID0gZGFjOworCisJZGFjLT5kbWEuY2Rlc2MgPSBjZGVzYzsKKworCXNldF9iaXQoRE1BX1JFQURZLCAmZGFjLT5mbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIGF0bWVsX2FiZGFjX2h3ID0geworCS5pbmZvCQkJPSAoU05EUlZfUENNX0lORk9fTU1BUAorCQkJCSAgfCBTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElECisJCQkJICB8IFNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVECisJCQkJICB8IFNORFJWX1BDTV9JTkZPX0JMT0NLX1RSQU5TRkVSCisJCQkJICB8IFNORFJWX1BDTV9JTkZPX1JFU1VNRQorCQkJCSAgfCBTTkRSVl9QQ01fSU5GT19QQVVTRSksCisJLmZvcm1hdHMJCT0gKFNORFJWX1BDTV9GTVRCSVRfUzE2X0JFKSwKKwkucmF0ZXMJCQk9IChTTkRSVl9QQ01fUkFURV9LTk9UKSwKKwkucmF0ZV9taW4JCT0gUkFURV9NSU4sCisJLnJhdGVfbWF4CQk9IFJBVEVfTUFYLAorCS5jaGFubmVsc19taW4JCT0gMiwKKwkuY2hhbm5lbHNfbWF4CQk9IDIsCisJLmJ1ZmZlcl9ieXRlc19tYXgJPSA2NCAqIDQwOTYsCisJLnBlcmlvZF9ieXRlc19taW4JPSA0MDk2LAorCS5wZXJpb2RfYnl0ZXNfbWF4CT0gNDA5NiwKKwkucGVyaW9kc19taW4JCT0gNCwKKwkucGVyaW9kc19tYXgJCT0gNjQsCit9OworCitzdGF0aWMgaW50IGF0bWVsX2FiZGFjX29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IGF0bWVsX2FiZGFjICpkYWMgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisKKwlkYWMtPnN1YnN0cmVhbSA9IHN1YnN0cmVhbTsKKwlhdG1lbF9hYmRhY19ody5yYXRlX21heCA9IGRhYy0+cmF0ZXNbZGFjLT5yYXRlc19udW0gLSAxXTsKKwlhdG1lbF9hYmRhY19ody5yYXRlX21pbiA9IGRhYy0+cmF0ZXNbMF07CisJc3Vic3RyZWFtLT5ydW50aW1lLT5odyA9IGF0bWVsX2FiZGFjX2h3OworCisJcmV0dXJuIHNuZF9wY21faHdfY29uc3RyYWludF9saXN0KHN1YnN0cmVhbS0+cnVudGltZSwgMCwKKwkJCVNORFJWX1BDTV9IV19QQVJBTV9SQVRFLCAmZGFjLT5jb25zdHJhaW50c19yYXRlcyk7Cit9CisKK3N0YXRpYyBpbnQgYXRtZWxfYWJkYWNfY2xvc2Uoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IGF0bWVsX2FiZGFjICpkYWMgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJZGFjLT5zdWJzdHJlYW0gPSBOVUxMOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF0bWVsX2FiZGFjX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpod19wYXJhbXMpCit7CisJc3RydWN0IGF0bWVsX2FiZGFjICpkYWMgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IHNuZF9wY21fbGliX21hbGxvY19wYWdlcyhzdWJzdHJlYW0sCisJCQlwYXJhbXNfYnVmZmVyX2J5dGVzKGh3X3BhcmFtcykpOworCWlmIChyZXR2YWwgPCAwKQorCQlyZXR1cm4gcmV0dmFsOworCS8qIHNuZF9wY21fbGliX21hbGxvY19wYWdlcyByZXR1cm5zIDEgaWYgYnVmZmVyIGlzIGNoYW5nZWQuICovCisJaWYgKHJldHZhbCA9PSAxKQorCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KERNQV9SRUFEWSwgJmRhYy0+ZmxhZ3MpKQorCQkJZHdfZG1hX2N5Y2xpY19mcmVlKGRhYy0+ZG1hLmNoYW4pOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBhdG1lbF9hYmRhY19od19mcmVlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBhdG1lbF9hYmRhYyAqZGFjID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoRE1BX1JFQURZLCAmZGFjLT5mbGFncykpCisJCWR3X2RtYV9jeWNsaWNfZnJlZShkYWMtPmRtYS5jaGFuKTsKKwlyZXR1cm4gc25kX3BjbV9saWJfZnJlZV9wYWdlcyhzdWJzdHJlYW0pOworfQorCitzdGF0aWMgaW50IGF0bWVsX2FiZGFjX3ByZXBhcmUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IGF0bWVsX2FiZGFjICpkYWMgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IGNsa19zZXRfcmF0ZShkYWMtPnNhbXBsZV9jbGssIDI1NiAqIHN1YnN0cmVhbS0+cnVudGltZS0+cmF0ZSk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWlmICghdGVzdF9iaXQoRE1BX1JFQURZLCAmZGFjLT5mbGFncykpCisJCXJldHZhbCA9IGF0bWVsX2FiZGFjX3ByZXBhcmVfZG1hKGRhYywgc3Vic3RyZWFtLCBETUFfVE9fREVWSUNFKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgYXRtZWxfYWJkYWNfdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgaW50IGNtZCkKK3sKKwlzdHJ1Y3QgYXRtZWxfYWJkYWMgKmRhYyA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlpbnQgcmV0dmFsID0gMDsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9SRUxFQVNFOiAvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1JFU1VNRTogLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKKwkJY2xrX2VuYWJsZShkYWMtPnNhbXBsZV9jbGspOworCQlyZXR2YWwgPSBkd19kbWFfY3ljbGljX3N0YXJ0KGRhYy0+ZG1hLmNoYW4pOworCQlpZiAocmV0dmFsKQorCQkJZ290byBvdXQ7CisJCWRhY193cml0ZWwoZGFjLCBDVFJMLCBEQUNfQklUKEVOKSk7CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUFVTSDogLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVVNQRU5EOiAvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUT1A6CisJCWR3X2RtYV9jeWNsaWNfc3RvcChkYWMtPmRtYS5jaGFuKTsKKwkJZGFjX3dyaXRlbChkYWMsIERBVEEsIDApOworCQlkYWNfd3JpdGVsKGRhYywgQ1RSTCwgMCk7CisJCWNsa19kaXNhYmxlKGRhYy0+c2FtcGxlX2Nsayk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHZhbCA9IC1FSU5WQUw7CisJCWJyZWFrOworCX0KK291dDoKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgc25kX3BjbV91ZnJhbWVzX3QKK2F0bWVsX2FiZGFjX3BvaW50ZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IGF0bWVsX2FiZGFjCSpkYWMgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJc3RydWN0IHNuZF9wY21fcnVudGltZQkqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlzbmRfcGNtX3VmcmFtZXNfdAlmcmFtZXM7CisJdW5zaWduZWQgbG9uZwkJYnl0ZXM7CisKKwlieXRlcyA9IGR3X2RtYV9nZXRfc3JjX2FkZHIoZGFjLT5kbWEuY2hhbik7CisJYnl0ZXMgLT0gcnVudGltZS0+ZG1hX2FkZHI7CisKKwlmcmFtZXMgPSBieXRlc190b19mcmFtZXMocnVudGltZSwgYnl0ZXMpOworCWlmIChmcmFtZXMgPj0gcnVudGltZS0+YnVmZmVyX3NpemUpCisJCWZyYW1lcyAtPSBydW50aW1lLT5idWZmZXJfc2l6ZTsKKworCXJldHVybiBmcmFtZXM7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBhYmRhY19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBhdG1lbF9hYmRhYyAqZGFjID0gZGV2X2lkOworCXUzMiBzdGF0dXM7CisKKwlzdGF0dXMgPSBkYWNfcmVhZGwoZGFjLCBJTlRfU1RBVFVTKTsKKwlpZiAoc3RhdHVzICYgREFDX0JJVChVTkRFUlJVTikpIHsKKwkJZGV2X2VycigmZGFjLT5wZGV2LT5kZXYsICJ1bmRlcnJ1biBkZXRlY3RlZFxuIik7CisJCWRhY193cml0ZWwoZGFjLCBJTlRfQ0xSLCBEQUNfQklUKFVOREVSUlVOKSk7CisJfSBlbHNlIHsKKwkJZGV2X2VycigmZGFjLT5wZGV2LT5kZXYsICJzcHVyaW91cyBpbnRlcnJ1cHQgKHN0YXR1cz0weCV4KVxuIiwKKwkJCXN0YXR1cyk7CisJCWRhY193cml0ZWwoZGFjLCBJTlRfQ0xSLCBzdGF0dXMpOworCX0KKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfcGNtX29wcyBhdG1lbF9hYmRhY19vcHMgPSB7CisJLm9wZW4JCT0gYXRtZWxfYWJkYWNfb3BlbiwKKwkuY2xvc2UJCT0gYXRtZWxfYWJkYWNfY2xvc2UsCisJLmlvY3RsCQk9IHNuZF9wY21fbGliX2lvY3RsLAorCS5od19wYXJhbXMJPSBhdG1lbF9hYmRhY19od19wYXJhbXMsCisJLmh3X2ZyZWUJPSBhdG1lbF9hYmRhY19od19mcmVlLAorCS5wcmVwYXJlCT0gYXRtZWxfYWJkYWNfcHJlcGFyZSwKKwkudHJpZ2dlcgk9IGF0bWVsX2FiZGFjX3RyaWdnZXIsCisJLnBvaW50ZXIJPSBhdG1lbF9hYmRhY19wb2ludGVyLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgYXRtZWxfYWJkYWNfcGNtX25ldyhzdHJ1Y3QgYXRtZWxfYWJkYWMgKmRhYykKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9oYXJkd2FyZSBodyA9IGF0bWVsX2FiZGFjX2h3OworCXN0cnVjdCBzbmRfcGNtICpwY207CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IHNuZF9wY21fbmV3KGRhYy0+Y2FyZCwgZGFjLT5jYXJkLT5zaG9ydG5hbWUsCisJCQlkYWMtPnBkZXYtPmlkLCAxLCAwLCAmcGNtKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJc3RyY3B5KHBjbS0+bmFtZSwgZGFjLT5jYXJkLT5zaG9ydG5hbWUpOworCXBjbS0+cHJpdmF0ZV9kYXRhID0gZGFjOworCXBjbS0+aW5mb19mbGFncyA9IDA7CisJZGFjLT5wY20gPSBwY207CisKKwlzbmRfcGNtX3NldF9vcHMocGNtLCBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLLCAmYXRtZWxfYWJkYWNfb3BzKTsKKworCXJldHZhbCA9IHNuZF9wY21fbGliX3ByZWFsbG9jYXRlX3BhZ2VzX2Zvcl9hbGwocGNtLCBTTkRSVl9ETUFfVFlQRV9ERVYsCisJCQkmZGFjLT5wZGV2LT5kZXYsIGh3LnBlcmlvZHNfbWluICogaHcucGVyaW9kX2J5dGVzX21pbiwKKwkJCWh3LmJ1ZmZlcl9ieXRlc19tYXgpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGJvb2wgZmlsdGVyKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwgdm9pZCAqc2xhdmUpCit7CisJc3RydWN0IGR3X2RtYV9zbGF2ZSAqZHdzID0gc2xhdmU7CisKKwlpZiAoZHdzLT5kbWFfZGV2ID09IGNoYW4tPmRldmljZS0+ZGV2KSB7CisJCWNoYW4tPnByaXZhdGUgPSBkd3M7CisJCXJldHVybiB0cnVlOworCX0gZWxzZQorCQlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBpbnQgc2V0X3NhbXBsZV9yYXRlcyhzdHJ1Y3QgYXRtZWxfYWJkYWMgKmRhYykKK3sKKwlsb25nIG5ld19yYXRlID0gUkFURV9NQVg7CisJaW50IHJldHZhbCA9IC1FSU5WQUw7CisJaW50IGluZGV4ID0gMDsKKworCS8qIHdlIHN0YXJ0IGF0IDE5MiBrSHogYW5kIHdvcmsgb3VyIHdheSBkb3duIHRvIDUxMTIgSHogKi8KKwl3aGlsZSAobmV3X3JhdGUgPj0gUkFURV9NSU4gJiYgaW5kZXggPCAoTUFYX05VTV9SQVRFUyArIDEpKSB7CisJCW5ld19yYXRlID0gY2xrX3JvdW5kX3JhdGUoZGFjLT5zYW1wbGVfY2xrLCAyNTYgKiBuZXdfcmF0ZSk7CisJCWlmIChuZXdfcmF0ZSA8IDApCisJCQlicmVhazsKKwkJLyogbWFrZSBzdXJlIHdlIGFyZSBiZWxvdyB0aGUgQUJEQUMgY2xvY2sgKi8KKwkJaWYgKG5ld19yYXRlIDw9IGNsa19nZXRfcmF0ZShkYWMtPnBjbGspKSB7CisJCQlkYWMtPnJhdGVzW2luZGV4XSA9IG5ld19yYXRlIC8gMjU2OworCQkJaW5kZXgrKzsKKwkJfQorCQkvKiBkaXZpZGUgYnkgMjU2IGFuZCB0aGVuIGJ5IHR3byB0byBnZXQgbmV4dCByYXRlICovCisJCW5ld19yYXRlIC89IDI1NiAqIDI7CisJfQorCisJaWYgKGluZGV4KSB7CisJCWludCBpOworCisJCS8qIHJldmVyc2UgYXJyYXksIHNtYWxsZXN0IGdvIGZpcnN0ICovCisJCWZvciAoaSA9IDA7IGkgPCAoaW5kZXggLyAyKTsgaSsrKSB7CisJCQl1bnNpZ25lZCBpbnQgdG1wID0gZGFjLT5yYXRlc1tpbmRleCAtIDEgLSBpXTsKKwkJCWRhYy0+cmF0ZXNbaW5kZXggLSAxIC0gaV0gPSBkYWMtPnJhdGVzW2ldOworCQkJZGFjLT5yYXRlc1tpXSA9IHRtcDsKKwkJfQorCisJCWRhYy0+Y29uc3RyYWludHNfcmF0ZXMuY291bnQgPSBpbmRleDsKKwkJZGFjLT5jb25zdHJhaW50c19yYXRlcy5saXN0ID0gZGFjLT5yYXRlczsKKwkJZGFjLT5jb25zdHJhaW50c19yYXRlcy5tYXNrID0gMDsKKwkJZGFjLT5yYXRlc19udW0gPSBpbmRleDsKKworCQlyZXR2YWwgPSAwOworCX0KKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGF0bWVsX2FiZGFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNuZF9jYXJkCQkqY2FyZDsKKwlzdHJ1Y3QgYXRtZWxfYWJkYWMJKmRhYzsKKwlzdHJ1Y3QgcmVzb3VyY2UJCSpyZWdzOworCXN0cnVjdCBhdG1lbF9hYmRhY19wZGF0YQkqcGRhdGE7CisJc3RydWN0IGNsawkJKnBjbGs7CisJc3RydWN0IGNsawkJKnNhbXBsZV9jbGs7CisJaW50CQkJcmV0dmFsOworCWludAkJCWlycTsKKworCXJlZ3MgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcmVncykgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJubyBtZW1vcnkgcmVzb3VyY2VcbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKGlycSA8IDApIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAiY291bGQgbm90IGdldCBJUlEgbnVtYmVyXG4iKTsKKwkJcmV0dXJuIGlycTsKKwl9CisKKwlwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCWlmICghcGRhdGEpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAibm8gcGxhdGZvcm0gZGF0YVxuIik7CisJCXJldHVybiAtRU5YSU87CisJfQorCisJcGNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgInBjbGsiKTsKKwlpZiAoSVNfRVJSKHBjbGspKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgIm5vIHBlcmlwaGVyYWwgY2xvY2tcbiIpOworCQlyZXR1cm4gUFRSX0VSUihwY2xrKTsKKwl9CisJc2FtcGxlX2NsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgInNhbXBsZV9jbGsiKTsKKwlpZiAoSVNfRVJSKHBjbGspKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgIm5vIHNhbXBsZSBjbG9ja1xuIik7CisJCXJldHZhbCA9IFBUUl9FUlIocGNsayk7CisJCWdvdG8gb3V0X3B1dF9wY2xrOworCX0KKwljbGtfZW5hYmxlKHBjbGspOworCisJcmV0dmFsID0gc25kX2NhcmRfY3JlYXRlKFNORFJWX0RFRkFVTFRfSURYMSwgU05EUlZfREVGQVVMVF9TVFIxLAorCQkJVEhJU19NT0RVTEUsIHNpemVvZihzdHJ1Y3QgYXRtZWxfYWJkYWMpLCAmY2FyZCk7CisJaWYgKHJldHZhbCkgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJjb3VsZCBub3QgY3JlYXRlIHNvdW5kIGNhcmQgZGV2aWNlXG4iKTsKKwkJZ290byBvdXRfcHV0X3NhbXBsZV9jbGs7CisJfQorCisJZGFjID0gZ2V0X2RhYyhjYXJkKTsKKworCWRhYy0+aXJxID0gaXJxOworCWRhYy0+Y2FyZCA9IGNhcmQ7CisJZGFjLT5wY2xrID0gcGNsazsKKwlkYWMtPnNhbXBsZV9jbGsgPSBzYW1wbGVfY2xrOworCWRhYy0+cGRldiA9IHBkZXY7CisKKwlyZXR2YWwgPSBzZXRfc2FtcGxlX3JhdGVzKGRhYyk7CisJaWYgKHJldHZhbCA8IDApIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAiY291bGQgbm90IHNldCBzdXBwb3J0ZWQgcmF0ZXNcbiIpOworCQlnb3RvIG91dF9mcmVlX2NhcmQ7CisJfQorCisJZGFjLT5yZWdzID0gaW9yZW1hcChyZWdzLT5zdGFydCwgcmVncy0+ZW5kIC0gcmVncy0+c3RhcnQgKyAxKTsKKwlpZiAoIWRhYy0+cmVncykgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJjb3VsZCBub3QgcmVtYXAgcmVnaXN0ZXIgbWVtb3J5XG4iKTsKKwkJZ290byBvdXRfZnJlZV9jYXJkOworCX0KKworCS8qIG1ha2Ugc3VyZSB0aGUgREFDIGlzIHNpbGVudCBhbmQgZGlzYWJsZWQgKi8KKwlkYWNfd3JpdGVsKGRhYywgREFUQSwgMCk7CisJZGFjX3dyaXRlbChkYWMsIENUUkwsIDApOworCisJcmV0dmFsID0gcmVxdWVzdF9pcnEoaXJxLCBhYmRhY19pbnRlcnJ1cHQsIDAsICJhYmRhYyIsIGRhYyk7CisJaWYgKHJldHZhbCkgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJjb3VsZCBub3QgcmVxdWVzdCBpcnFcbiIpOworCQlnb3RvIG91dF91bm1hcF9yZWdzOworCX0KKworCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgJnBkZXYtPmRldik7CisKKwlpZiAocGRhdGEtPmR3cy5kbWFfZGV2KSB7CisJCXN0cnVjdCBkd19kbWFfc2xhdmUgKmR3cyA9ICZwZGF0YS0+ZHdzOworCQlkbWFfY2FwX21hc2tfdCBtYXNrOworCisJCWR3cy0+dHhfcmVnID0gcmVncy0+c3RhcnQgKyBEQUNfREFUQTsKKworCQlkbWFfY2FwX3plcm8obWFzayk7CisJCWRtYV9jYXBfc2V0KERNQV9TTEFWRSwgbWFzayk7CisKKwkJZGFjLT5kbWEuY2hhbiA9IGRtYV9yZXF1ZXN0X2NoYW5uZWwobWFzaywgZmlsdGVyLCBkd3MpOworCX0KKwlpZiAoIXBkYXRhLT5kd3MuZG1hX2RldiB8fCAhZGFjLT5kbWEuY2hhbikgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJETUEgbm90IGF2YWlsYWJsZVxuIik7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0X3Vuc2V0X2NhcmRfZGV2OworCX0KKworCXN0cmNweShjYXJkLT5kcml2ZXIsICJBdG1lbCBBQkRBQyIpOworCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsICJBdG1lbCBBQkRBQyIpOworCXNwcmludGYoY2FyZC0+bG9uZ25hbWUsICJBdG1lbCBBdWRpbyBCaXRzdHJlYW0gREFDIik7CisKKwlyZXR2YWwgPSBhdG1lbF9hYmRhY19wY21fbmV3KGRhYyk7CisJaWYgKHJldHZhbCkgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJjb3VsZCBub3QgcmVnaXN0ZXIgQUJEQUMgcGNtIGRldmljZVxuIik7CisJCWdvdG8gb3V0X3JlbGVhc2VfZG1hOworCX0KKworCXJldHZhbCA9IHNuZF9jYXJkX3JlZ2lzdGVyKGNhcmQpOworCWlmIChyZXR2YWwpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAiY291bGQgbm90IHJlZ2lzdGVyIHNvdW5kIGNhcmRcbiIpOworCQlnb3RvIG91dF9yZWxlYXNlX2RtYTsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBjYXJkKTsKKworCWRldl9pbmZvKCZwZGV2LT5kZXYsICJBdG1lbCBBQkRBQyBhdCAweCVwIHVzaW5nICVzXG4iLAorCQkJZGFjLT5yZWdzLCBkYWMtPmRtYS5jaGFuLT5kZXYtPmRldmljZS5idXNfaWQpOworCisJcmV0dXJuIHJldHZhbDsKKworb3V0X3JlbGVhc2VfZG1hOgorCWRtYV9yZWxlYXNlX2NoYW5uZWwoZGFjLT5kbWEuY2hhbik7CisJZGFjLT5kbWEuY2hhbiA9IE5VTEw7CitvdXRfdW5zZXRfY2FyZF9kZXY6CisJc25kX2NhcmRfc2V0X2RldihjYXJkLCBOVUxMKTsKKwlmcmVlX2lycShpcnEsIGRhYyk7CitvdXRfdW5tYXBfcmVnczoKKwlpb3VubWFwKGRhYy0+cmVncyk7CitvdXRfZnJlZV9jYXJkOgorCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CitvdXRfcHV0X3NhbXBsZV9jbGs6CisJY2xrX3B1dChzYW1wbGVfY2xrKTsKKwljbGtfZGlzYWJsZShwY2xrKTsKK291dF9wdXRfcGNsazoKKwljbGtfcHV0KHBjbGspOworCXJldHVybiByZXR2YWw7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgYXRtZWxfYWJkYWNfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3QgbXNnKQoreworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBhdG1lbF9hYmRhYyAqZGFjID0gY2FyZC0+cHJpdmF0ZV9kYXRhOworCisJZHdfZG1hX2N5Y2xpY19zdG9wKGRhYy0+ZG1hLmNoYW4pOworCWNsa19kaXNhYmxlKGRhYy0+c2FtcGxlX2Nsayk7CisJY2xrX2Rpc2FibGUoZGFjLT5wY2xrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF0bWVsX2FiZGFjX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBhdG1lbF9hYmRhYyAqZGFjID0gY2FyZC0+cHJpdmF0ZV9kYXRhOworCisJY2xrX2VuYWJsZShkYWMtPnBjbGspOworCWNsa19lbmFibGUoZGFjLT5zYW1wbGVfY2xrKTsKKwlpZiAodGVzdF9iaXQoRE1BX1JFQURZLCAmZGFjLT5mbGFncykpCisJCWR3X2RtYV9jeWNsaWNfc3RhcnQoZGFjLT5kbWEuY2hhbik7CisKKwlyZXR1cm4gMDsKK30KKyNlbHNlCisjZGVmaW5lIGF0bWVsX2FiZGFjX3N1c3BlbmQgTlVMTAorI2RlZmluZSBhdG1lbF9hYmRhY19yZXN1bWUgTlVMTAorI2VuZGlmCisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGF0bWVsX2FiZGFjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBhdG1lbF9hYmRhYyAqZGFjID0gZ2V0X2RhYyhjYXJkKTsKKworCWNsa19wdXQoZGFjLT5zYW1wbGVfY2xrKTsKKwljbGtfZGlzYWJsZShkYWMtPnBjbGspOworCWNsa19wdXQoZGFjLT5wY2xrKTsKKworCWRtYV9yZWxlYXNlX2NoYW5uZWwoZGFjLT5kbWEuY2hhbik7CisJZGFjLT5kbWEuY2hhbiA9IE5VTEw7CisJc25kX2NhcmRfc2V0X2RldihjYXJkLCBOVUxMKTsKKwlpb3VubWFwKGRhYy0+cmVncyk7CisJZnJlZV9pcnEoZGFjLT5pcnEsIGRhYyk7CisJc25kX2NhcmRfZnJlZShjYXJkKTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGF0bWVsX2FiZGFjX2RyaXZlciA9IHsKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKGF0bWVsX2FiZGFjX3JlbW92ZSksCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gImF0bWVsX2FiZGFjIiwKKwl9LAorCS5zdXNwZW5kCT0gYXRtZWxfYWJkYWNfc3VzcGVuZCwKKwkucmVzdW1lCQk9IGF0bWVsX2FiZGFjX3Jlc3VtZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGF0bWVsX2FiZGFjX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3Byb2JlKCZhdG1lbF9hYmRhY19kcml2ZXIsCisJCQlhdG1lbF9hYmRhY19wcm9iZSk7Cit9Cittb2R1bGVfaW5pdChhdG1lbF9hYmRhY19pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IGF0bWVsX2FiZGFjX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmYXRtZWxfYWJkYWNfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KGF0bWVsX2FiZGFjX2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgQXRtZWwgQXVkaW8gQml0c3RyZWFtIERBQyAoQUJEQUMpIik7CitNT0RVTEVfQVVUSE9SKCJIYW5zLUNocmlzdGlhbiBFZ3R2ZWR0IDxoYW5zLWNocmlzdGlhbi5lZ3R2ZWR0QGF0bWVsLmNvbT4iKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2F0bWVsL2FjOTdjLmMgYi9zb3VuZC9hdG1lbC9hYzk3Yy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkNzJlMDAKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9hdG1lbC9hYzk3Yy5jCkBAIC0wLDAgKzEsOTMyIEBACisvKgorICogRHJpdmVyIGZvciB0aGUgQXRtZWwgQUM5N0MgY29udHJvbGxlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA5IEF0bWVsIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvYml0bWFwLmg+CisjaW5jbHVkZSA8bGludXgvZG1hZW5naW5lLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorI2luY2x1ZGUgPHNvdW5kL2FjOTdfY29kZWMuaD4KKyNpbmNsdWRlIDxzb3VuZC9hdG1lbC1hYzk3Yy5oPgorI2luY2x1ZGUgPHNvdW5kL21lbWFsbG9jLmg+CisKKyNpbmNsdWRlIDxsaW51eC9kd19kbWFjLmg+CisKKyNpbmNsdWRlICJhYzk3Yy5oIgorCitlbnVtIHsKKwlETUFfVFhfUkVBRFkgPSAwLAorCURNQV9SWF9SRUFEWSwKKwlETUFfVFhfQ0hBTl9QUkVTRU5ULAorCURNQV9SWF9DSEFOX1BSRVNFTlQsCit9OworCisvKiBTZXJpYWxpemUgYWNjZXNzIHRvIG9wZW5lZCB2YXJpYWJsZSAqLworc3RhdGljIERFRklORV9NVVRFWChvcGVuZWRfbXV0ZXgpOworCitzdHJ1Y3QgYXRtZWxfYWM5N2NfZG1hIHsKKwlzdHJ1Y3QgZG1hX2NoYW4JCQkqcnhfY2hhbjsKKwlzdHJ1Y3QgZG1hX2NoYW4JCQkqdHhfY2hhbjsKK307CisKK3N0cnVjdCBhdG1lbF9hYzk3YyB7CisJc3RydWN0IGNsawkJCSpwY2xrOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UJCSpwZGV2OworCXN0cnVjdCBhdG1lbF9hYzk3Y19kbWEJCWRtYTsKKworCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbQkqcGxheWJhY2tfc3Vic3RyZWFtOworCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbQkqY2FwdHVyZV9zdWJzdHJlYW07CisJc3RydWN0IHNuZF9jYXJkCQkJKmNhcmQ7CisJc3RydWN0IHNuZF9wY20JCQkqcGNtOworCXN0cnVjdCBzbmRfYWM5NwkJCSphYzk3OworCXN0cnVjdCBzbmRfYWM5N19idXMJCSphYzk3X2J1czsKKworCXU2NAkJCQljdXJfZm9ybWF0OworCXVuc2lnbmVkIGludAkJCWN1cl9yYXRlOworCXVuc2lnbmVkIGxvbmcJCQlmbGFnczsKKwkvKiBTZXJpYWxpemUgYWNjZXNzIHRvIG9wZW5lZCB2YXJpYWJsZSAqLworCXNwaW5sb2NrX3QJCQlsb2NrOworCXZvaWQgX19pb21lbQkJCSpyZWdzOworCWludAkJCQlvcGVuZWQ7CisJaW50CQkJCXJlc2V0X3BpbjsKK307CisKKyNkZWZpbmUgZ2V0X2NoaXAoY2FyZCkgKChzdHJ1Y3QgYXRtZWxfYWM5N2MgKikoY2FyZCktPnByaXZhdGVfZGF0YSkKKworI2RlZmluZSBhYzk3Y193cml0ZWwoY2hpcCwgcmVnLCB2YWwpCQkJXAorCV9fcmF3X3dyaXRlbCgodmFsKSwgKGNoaXApLT5yZWdzICsgQUM5N0NfIyNyZWcpCisjZGVmaW5lIGFjOTdjX3JlYWRsKGNoaXAsIHJlZykJCQkJXAorCV9fcmF3X3JlYWRsKChjaGlwKS0+cmVncyArIEFDOTdDXyMjcmVnKQorCisvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgRE1BIGRyaXZlci4gKi8KK3N0YXRpYyB2b2lkIGF0bWVsX2FjOTdjX2RtYV9wbGF5YmFja19wZXJpb2RfZG9uZSh2b2lkICphcmcpCit7CisJc3RydWN0IGF0bWVsX2FjOTdjICpjaGlwID0gYXJnOworCXNuZF9wY21fcGVyaW9kX2VsYXBzZWQoY2hpcC0+cGxheWJhY2tfc3Vic3RyZWFtKTsKK30KKworc3RhdGljIHZvaWQgYXRtZWxfYWM5N2NfZG1hX2NhcHR1cmVfcGVyaW9kX2RvbmUodm9pZCAqYXJnKQoreworCXN0cnVjdCBhdG1lbF9hYzk3YyAqY2hpcCA9IGFyZzsKKwlzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKGNoaXAtPmNhcHR1cmVfc3Vic3RyZWFtKTsKK30KKworc3RhdGljIGludCBhdG1lbF9hYzk3Y19wcmVwYXJlX2RtYShzdHJ1Y3QgYXRtZWxfYWM5N2MgKmNoaXAsCisJCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJc3RydWN0IGRtYV9jaGFuCQkJKmNoYW47CisJc3RydWN0IGR3X2N5Y2xpY19kZXNjCQkqY2Rlc2M7CisJc3RydWN0IHNuZF9wY21fcnVudGltZQkJKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJdW5zaWduZWQgbG9uZwkJCWJ1ZmZlcl9sZW4sIHBlcmlvZF9sZW47CisKKwkvKgorCSAqIFdlIGRvbid0IGRvIERNQSBvbiAiY29tcGxleCIgdHJhbnNmZXJzLCBpLmUuIHdpdGgKKwkgKiBub24taGFsZndvcmQtYWxpZ25lZCBidWZmZXJzIG9yIGxlbmd0aHMuCisJICovCisJaWYgKHJ1bnRpbWUtPmRtYV9hZGRyICYgMSB8fCBydW50aW1lLT5idWZmZXJfc2l6ZSAmIDEpIHsKKwkJZGV2X2RiZygmY2hpcC0+cGRldi0+ZGV2LCAidG9vIGNvbXBsZXggdHJhbnNmZXJcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoZGlyZWN0aW9uID09IERNQV9UT19ERVZJQ0UpCisJCWNoYW4gPSBjaGlwLT5kbWEudHhfY2hhbjsKKwllbHNlCisJCWNoYW4gPSBjaGlwLT5kbWEucnhfY2hhbjsKKworCWJ1ZmZlcl9sZW4gPSBmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgcnVudGltZS0+YnVmZmVyX3NpemUpOworCXBlcmlvZF9sZW4gPSBmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgcnVudGltZS0+cGVyaW9kX3NpemUpOworCisJY2Rlc2MgPSBkd19kbWFfY3ljbGljX3ByZXAoY2hhbiwgcnVudGltZS0+ZG1hX2FkZHIsIGJ1ZmZlcl9sZW4sCisJCQlwZXJpb2RfbGVuLCBkaXJlY3Rpb24pOworCWlmIChJU19FUlIoY2Rlc2MpKSB7CisJCWRldl9kYmcoJmNoaXAtPnBkZXYtPmRldiwgImNvdWxkIG5vdCBwcmVwYXJlIGN5Y2xpYyBETUFcbiIpOworCQlyZXR1cm4gUFRSX0VSUihjZGVzYyk7CisJfQorCisJaWYgKGRpcmVjdGlvbiA9PSBETUFfVE9fREVWSUNFKSB7CisJCWNkZXNjLT5wZXJpb2RfY2FsbGJhY2sgPSBhdG1lbF9hYzk3Y19kbWFfcGxheWJhY2tfcGVyaW9kX2RvbmU7CisJCXNldF9iaXQoRE1BX1RYX1JFQURZLCAmY2hpcC0+ZmxhZ3MpOworCX0gZWxzZSB7CisJCWNkZXNjLT5wZXJpb2RfY2FsbGJhY2sgPSBhdG1lbF9hYzk3Y19kbWFfY2FwdHVyZV9wZXJpb2RfZG9uZTsKKwkJc2V0X2JpdChETUFfUlhfUkVBRFksICZjaGlwLT5mbGFncyk7CisJfQorCisJY2Rlc2MtPnBlcmlvZF9jYWxsYmFja19wYXJhbSA9IGNoaXA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIGF0bWVsX2FjOTdjX2h3ID0geworCS5pbmZvCQkJPSAoU05EUlZfUENNX0lORk9fTU1BUAorCQkJCSAgfCBTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElECisJCQkJICB8IFNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVECisJCQkJICB8IFNORFJWX1BDTV9JTkZPX0JMT0NLX1RSQU5TRkVSCisJCQkJICB8IFNORFJWX1BDTV9JTkZPX0pPSU5UX0RVUExFWAorCQkJCSAgfCBTTkRSVl9QQ01fSU5GT19SRVNVTUUKKwkJCQkgIHwgU05EUlZfUENNX0lORk9fUEFVU0UpLAorCS5mb3JtYXRzCQk9IChTTkRSVl9QQ01fRk1UQklUX1MxNl9CRQorCQkJCSAgfCBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSksCisJLnJhdGVzCQkJPSAoU05EUlZfUENNX1JBVEVfQ09OVElOVU9VUyksCisJLnJhdGVfbWluCQk9IDQwMDAsCisJLnJhdGVfbWF4CQk9IDQ4MDAwLAorCS5jaGFubmVsc19taW4JCT0gMSwKKwkuY2hhbm5lbHNfbWF4CQk9IDIsCisJLmJ1ZmZlcl9ieXRlc19tYXgJPSA2NCAqIDQwOTYsCisJLnBlcmlvZF9ieXRlc19taW4JPSA0MDk2LAorCS5wZXJpb2RfYnl0ZXNfbWF4CT0gNDA5NiwKKwkucGVyaW9kc19taW4JCT0gNCwKKwkucGVyaW9kc19tYXgJCT0gNjQsCit9OworCitzdGF0aWMgaW50IGF0bWVsX2FjOTdjX3BsYXliYWNrX29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IGF0bWVsX2FjOTdjICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisKKwltdXRleF9sb2NrKCZvcGVuZWRfbXV0ZXgpOworCWNoaXAtPm9wZW5lZCsrOworCXJ1bnRpbWUtPmh3ID0gYXRtZWxfYWM5N2NfaHc7CisJaWYgKGNoaXAtPmN1cl9yYXRlKSB7CisJCXJ1bnRpbWUtPmh3LnJhdGVfbWluID0gY2hpcC0+Y3VyX3JhdGU7CisJCXJ1bnRpbWUtPmh3LnJhdGVfbWF4ID0gY2hpcC0+Y3VyX3JhdGU7CisJfQorCWlmIChjaGlwLT5jdXJfZm9ybWF0KQorCQlydW50aW1lLT5ody5mb3JtYXRzID0gKDFVTEwgPDwgY2hpcC0+Y3VyX2Zvcm1hdCk7CisJbXV0ZXhfdW5sb2NrKCZvcGVuZWRfbXV0ZXgpOworCWNoaXAtPnBsYXliYWNrX3N1YnN0cmVhbSA9IHN1YnN0cmVhbTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdG1lbF9hYzk3Y19jYXB0dXJlX29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IGF0bWVsX2FjOTdjICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisKKwltdXRleF9sb2NrKCZvcGVuZWRfbXV0ZXgpOworCWNoaXAtPm9wZW5lZCsrOworCXJ1bnRpbWUtPmh3ID0gYXRtZWxfYWM5N2NfaHc7CisJaWYgKGNoaXAtPmN1cl9yYXRlKSB7CisJCXJ1bnRpbWUtPmh3LnJhdGVfbWluID0gY2hpcC0+Y3VyX3JhdGU7CisJCXJ1bnRpbWUtPmh3LnJhdGVfbWF4ID0gY2hpcC0+Y3VyX3JhdGU7CisJfQorCWlmIChjaGlwLT5jdXJfZm9ybWF0KQorCQlydW50aW1lLT5ody5mb3JtYXRzID0gKDFVTEwgPDwgY2hpcC0+Y3VyX2Zvcm1hdCk7CisJbXV0ZXhfdW5sb2NrKCZvcGVuZWRfbXV0ZXgpOworCWNoaXAtPmNhcHR1cmVfc3Vic3RyZWFtID0gc3Vic3RyZWFtOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF0bWVsX2FjOTdjX3BsYXliYWNrX2Nsb3NlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBhdG1lbF9hYzk3YyAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKworCW11dGV4X2xvY2soJm9wZW5lZF9tdXRleCk7CisJY2hpcC0+b3BlbmVkLS07CisJaWYgKCFjaGlwLT5vcGVuZWQpIHsKKwkJY2hpcC0+Y3VyX3JhdGUgPSAwOworCQljaGlwLT5jdXJfZm9ybWF0ID0gMDsKKwl9CisJbXV0ZXhfdW5sb2NrKCZvcGVuZWRfbXV0ZXgpOworCisJY2hpcC0+cGxheWJhY2tfc3Vic3RyZWFtID0gTlVMTDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF0bWVsX2FjOTdjX2NhcHR1cmVfY2xvc2Uoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IGF0bWVsX2FjOTdjICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCisJbXV0ZXhfbG9jaygmb3BlbmVkX211dGV4KTsKKwljaGlwLT5vcGVuZWQtLTsKKwlpZiAoIWNoaXAtPm9wZW5lZCkgeworCQljaGlwLT5jdXJfcmF0ZSA9IDA7CisJCWNoaXAtPmN1cl9mb3JtYXQgPSAwOworCX0KKwltdXRleF91bmxvY2soJm9wZW5lZF9tdXRleCk7CisKKwljaGlwLT5jYXB0dXJlX3N1YnN0cmVhbSA9IE5VTEw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdG1lbF9hYzk3Y19wbGF5YmFja19od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqaHdfcGFyYW1zKQoreworCXN0cnVjdCBhdG1lbF9hYzk3YyAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gc25kX3BjbV9saWJfbWFsbG9jX3BhZ2VzKHN1YnN0cmVhbSwKKwkJCQkJcGFyYW1zX2J1ZmZlcl9ieXRlcyhod19wYXJhbXMpKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJcmV0dXJuIHJldHZhbDsKKwkvKiBzbmRfcGNtX2xpYl9tYWxsb2NfcGFnZXMgcmV0dXJucyAxIGlmIGJ1ZmZlciBpcyBjaGFuZ2VkLiAqLworCWlmIChyZXR2YWwgPT0gMSkKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChETUFfVFhfUkVBRFksICZjaGlwLT5mbGFncykpCisJCQlkd19kbWFfY3ljbGljX2ZyZWUoY2hpcC0+ZG1hLnR4X2NoYW4pOworCisJLyogU2V0IHJlc3RyaWN0aW9ucyB0byBwYXJhbXMuICovCisJbXV0ZXhfbG9jaygmb3BlbmVkX211dGV4KTsKKwljaGlwLT5jdXJfcmF0ZSA9IHBhcmFtc19yYXRlKGh3X3BhcmFtcyk7CisJY2hpcC0+Y3VyX2Zvcm1hdCA9IHBhcmFtc19mb3JtYXQoaHdfcGFyYW1zKTsKKwltdXRleF91bmxvY2soJm9wZW5lZF9tdXRleCk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IGF0bWVsX2FjOTdjX2NhcHR1cmVfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQlzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKmh3X3BhcmFtcykKK3sKKwlzdHJ1Y3QgYXRtZWxfYWM5N2MgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IHNuZF9wY21fbGliX21hbGxvY19wYWdlcyhzdWJzdHJlYW0sCisJCQkJCXBhcmFtc19idWZmZXJfYnl0ZXMoaHdfcGFyYW1zKSk7CisJaWYgKHJldHZhbCA8IDApCisJCXJldHVybiByZXR2YWw7CisJLyogc25kX3BjbV9saWJfbWFsbG9jX3BhZ2VzIHJldHVybnMgMSBpZiBidWZmZXIgaXMgY2hhbmdlZC4gKi8KKwlpZiAocmV0dmFsID09IDEpCisJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoRE1BX1JYX1JFQURZLCAmY2hpcC0+ZmxhZ3MpKQorCQkJZHdfZG1hX2N5Y2xpY19mcmVlKGNoaXAtPmRtYS5yeF9jaGFuKTsKKworCS8qIFNldCByZXN0cmljdGlvbnMgdG8gcGFyYW1zLiAqLworCW11dGV4X2xvY2soJm9wZW5lZF9tdXRleCk7CisJY2hpcC0+Y3VyX3JhdGUgPSBwYXJhbXNfcmF0ZShod19wYXJhbXMpOworCWNoaXAtPmN1cl9mb3JtYXQgPSBwYXJhbXNfZm9ybWF0KGh3X3BhcmFtcyk7CisJbXV0ZXhfdW5sb2NrKCZvcGVuZWRfbXV0ZXgpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBhdG1lbF9hYzk3Y19wbGF5YmFja19od19mcmVlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBhdG1lbF9hYzk3YyAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KERNQV9UWF9SRUFEWSwgJmNoaXAtPmZsYWdzKSkKKwkJZHdfZG1hX2N5Y2xpY19mcmVlKGNoaXAtPmRtYS50eF9jaGFuKTsKKwlyZXR1cm4gc25kX3BjbV9saWJfZnJlZV9wYWdlcyhzdWJzdHJlYW0pOworfQorCitzdGF0aWMgaW50IGF0bWVsX2FjOTdjX2NhcHR1cmVfaHdfZnJlZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgYXRtZWxfYWM5N2MgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChETUFfUlhfUkVBRFksICZjaGlwLT5mbGFncykpCisJCWR3X2RtYV9jeWNsaWNfZnJlZShjaGlwLT5kbWEucnhfY2hhbik7CisJcmV0dXJuIHNuZF9wY21fbGliX2ZyZWVfcGFnZXMoc3Vic3RyZWFtKTsKK30KKworc3RhdGljIGludCBhdG1lbF9hYzk3Y19wbGF5YmFja19wcmVwYXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBhdG1lbF9hYzk3YyAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXVuc2lnbmVkIGxvbmcgd29yZCA9IDA7CisJaW50IHJldHZhbDsKKworCS8qIGFzc2lnbiBjaGFubmVscyB0byBBQzk3QyBjaGFubmVsIEEgKi8KKwlzd2l0Y2ggKHJ1bnRpbWUtPmNoYW5uZWxzKSB7CisJY2FzZSAxOgorCQl3b3JkIHw9IEFDOTdDX0NIX0FTU0lHTihQQ01fTEVGVCwgQSk7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJd29yZCB8PSBBQzk3Q19DSF9BU1NJR04oUENNX0xFRlQsIEEpCisJCQl8IEFDOTdDX0NIX0FTU0lHTihQQ01fUklHSFQsIEEpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBUT0RPOiBzdXBwb3J0IG1vcmUgdGhhbiB0d28gY2hhbm5lbHMgKi8KKwkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOworCX0KKwlhYzk3Y193cml0ZWwoY2hpcCwgT0NBLCB3b3JkKTsKKworCS8qIGNvbmZpZ3VyZSBzYW1wbGUgZm9ybWF0IGFuZCBzaXplICovCisJd29yZCA9IEFDOTdDX0NNUl9ETUFFTiB8IEFDOTdDX0NNUl9TSVpFXzE2OworCisJc3dpdGNoIChydW50aW1lLT5mb3JtYXQpIHsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzE2X0xFOgorCQl3b3JkIHw9IEFDOTdDX0NNUl9DRU1fTElUVExFOworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzE2X0JFOiAvKiBmYWxsIHRocm91Z2ggKi8KKwlkZWZhdWx0OgorCQl3b3JkICY9IH4oQUM5N0NfQ01SX0NFTV9MSVRUTEUpOworCQlicmVhazsKKwl9CisKKwlhYzk3Y193cml0ZWwoY2hpcCwgQ0FNUiwgd29yZCk7CisKKwkvKiBzZXQgdmFyaWFibGUgcmF0ZSBpZiBuZWVkZWQgKi8KKwlpZiAocnVudGltZS0+cmF0ZSAhPSA0ODAwMCkgeworCQl3b3JkID0gYWM5N2NfcmVhZGwoY2hpcCwgTVIpOworCQl3b3JkIHw9IEFDOTdDX01SX1ZSQTsKKwkJYWM5N2Nfd3JpdGVsKGNoaXAsIE1SLCB3b3JkKTsKKwl9IGVsc2UgeworCQl3b3JkID0gYWM5N2NfcmVhZGwoY2hpcCwgTVIpOworCQl3b3JkICY9IH4oQUM5N0NfTVJfVlJBKTsKKwkJYWM5N2Nfd3JpdGVsKGNoaXAsIE1SLCB3b3JkKTsKKwl9CisKKwlyZXR2YWwgPSBzbmRfYWM5N19zZXRfcmF0ZShjaGlwLT5hYzk3LCBBQzk3X1BDTV9GUk9OVF9EQUNfUkFURSwKKwkJCXJ1bnRpbWUtPnJhdGUpOworCWlmIChyZXR2YWwpCisJCWRldl9kYmcoJmNoaXAtPnBkZXYtPmRldiwgImNvdWxkIG5vdCBzZXQgcmF0ZSAlZCBIelxuIiwKKwkJCQlydW50aW1lLT5yYXRlKTsKKworCWlmICghdGVzdF9iaXQoRE1BX1RYX1JFQURZLCAmY2hpcC0+ZmxhZ3MpKQorCQlyZXR2YWwgPSBhdG1lbF9hYzk3Y19wcmVwYXJlX2RtYShjaGlwLCBzdWJzdHJlYW0sCisJCQkJRE1BX1RPX0RFVklDRSk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IGF0bWVsX2FjOTdjX2NhcHR1cmVfcHJlcGFyZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgYXRtZWxfYWM5N2MgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwl1bnNpZ25lZCBsb25nIHdvcmQgPSAwOworCWludCByZXR2YWw7CisKKwkvKiBhc3NpZ24gY2hhbm5lbHMgdG8gQUM5N0MgY2hhbm5lbCBBICovCisJc3dpdGNoIChydW50aW1lLT5jaGFubmVscykgeworCWNhc2UgMToKKwkJd29yZCB8PSBBQzk3Q19DSF9BU1NJR04oUENNX0xFRlQsIEEpOworCQlicmVhazsKKwljYXNlIDI6CisJCXdvcmQgfD0gQUM5N0NfQ0hfQVNTSUdOKFBDTV9MRUZULCBBKQorCQkJfCBBQzk3Q19DSF9BU1NJR04oUENNX1JJR0hULCBBKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogVE9ETzogc3VwcG9ydCBtb3JlIHRoYW4gdHdvIGNoYW5uZWxzICovCisJCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKKwl9CisJYWM5N2Nfd3JpdGVsKGNoaXAsIElDQSwgd29yZCk7CisKKwkvKiBjb25maWd1cmUgc2FtcGxlIGZvcm1hdCBhbmQgc2l6ZSAqLworCXdvcmQgPSBBQzk3Q19DTVJfRE1BRU4gfCBBQzk3Q19DTVJfU0laRV8xNjsKKworCXN3aXRjaCAocnVudGltZS0+Zm9ybWF0KSB7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MxNl9MRToKKwkJd29yZCB8PSBBQzk3Q19DTVJfQ0VNX0xJVFRMRTsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MxNl9CRTogLyogZmFsbCB0aHJvdWdoICovCisJZGVmYXVsdDoKKwkJd29yZCAmPSB+KEFDOTdDX0NNUl9DRU1fTElUVExFKTsKKwkJYnJlYWs7CisJfQorCisJYWM5N2Nfd3JpdGVsKGNoaXAsIENBTVIsIHdvcmQpOworCisJLyogc2V0IHZhcmlhYmxlIHJhdGUgaWYgbmVlZGVkICovCisJaWYgKHJ1bnRpbWUtPnJhdGUgIT0gNDgwMDApIHsKKwkJd29yZCA9IGFjOTdjX3JlYWRsKGNoaXAsIE1SKTsKKwkJd29yZCB8PSBBQzk3Q19NUl9WUkE7CisJCWFjOTdjX3dyaXRlbChjaGlwLCBNUiwgd29yZCk7CisJfSBlbHNlIHsKKwkJd29yZCA9IGFjOTdjX3JlYWRsKGNoaXAsIE1SKTsKKwkJd29yZCAmPSB+KEFDOTdDX01SX1ZSQSk7CisJCWFjOTdjX3dyaXRlbChjaGlwLCBNUiwgd29yZCk7CisJfQorCisJcmV0dmFsID0gc25kX2FjOTdfc2V0X3JhdGUoY2hpcC0+YWM5NywgQUM5N19QQ01fTFJfQURDX1JBVEUsCisJCQlydW50aW1lLT5yYXRlKTsKKwlpZiAocmV0dmFsKQorCQlkZXZfZGJnKCZjaGlwLT5wZGV2LT5kZXYsICJjb3VsZCBub3Qgc2V0IHJhdGUgJWQgSHpcbiIsCisJCQkJcnVudGltZS0+cmF0ZSk7CisKKwlpZiAoIXRlc3RfYml0KERNQV9SWF9SRUFEWSwgJmNoaXAtPmZsYWdzKSkKKwkJcmV0dmFsID0gYXRtZWxfYWM5N2NfcHJlcGFyZV9kbWEoY2hpcCwgc3Vic3RyZWFtLAorCQkJCURNQV9GUk9NX0RFVklDRSk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50CithdG1lbF9hYzk3Y19wbGF5YmFja190cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgY21kKQoreworCXN0cnVjdCBhdG1lbF9hYzk3YyAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwl1bnNpZ25lZCBsb25nIGNhbXI7CisJaW50IHJldHZhbCA9IDA7CisKKwljYW1yID0gYWM5N2NfcmVhZGwoY2hpcCwgQ0FNUik7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUkVMRUFTRTogLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9SRVNVTUU6IC8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6CisJCXJldHZhbCA9IGR3X2RtYV9jeWNsaWNfc3RhcnQoY2hpcC0+ZG1hLnR4X2NoYW4pOworCQlpZiAocmV0dmFsKQorCQkJZ290byBvdXQ7CisJCWNhbXIgfD0gQUM5N0NfQ01SX0NFTkE7CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUFVTSDogLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVVNQRU5EOiAvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUT1A6CisJCWR3X2RtYV9jeWNsaWNfc3RvcChjaGlwLT5kbWEudHhfY2hhbik7CisJCWlmIChjaGlwLT5vcGVuZWQgPD0gMSkKKwkJCWNhbXIgJj0gfkFDOTdDX0NNUl9DRU5BOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR2YWwgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwlhYzk3Y193cml0ZWwoY2hpcCwgQ0FNUiwgY2Ftcik7CitvdXQ6CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludAorYXRtZWxfYWM5N2NfY2FwdHVyZV90cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgY21kKQoreworCXN0cnVjdCBhdG1lbF9hYzk3YyAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwl1bnNpZ25lZCBsb25nIGNhbXI7CisJaW50IHJldHZhbCA9IDA7CisKKwljYW1yID0gYWM5N2NfcmVhZGwoY2hpcCwgQ0FNUik7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUkVMRUFTRTogLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9SRVNVTUU6IC8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6CisJCXJldHZhbCA9IGR3X2RtYV9jeWNsaWNfc3RhcnQoY2hpcC0+ZG1hLnJ4X2NoYW4pOworCQlpZiAocmV0dmFsKQorCQkJZ290byBvdXQ7CisJCWNhbXIgfD0gQUM5N0NfQ01SX0NFTkE7CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUFVTSDogLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVVNQRU5EOiAvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUT1A6CisJCWR3X2RtYV9jeWNsaWNfc3RvcChjaGlwLT5kbWEucnhfY2hhbik7CisJCWlmIChjaGlwLT5vcGVuZWQgPD0gMSkKKwkJCWNhbXIgJj0gfkFDOTdDX0NNUl9DRU5BOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR2YWwgPSAtRUlOVkFMOworCQlicmVhazsKKwl9CisKKwlhYzk3Y193cml0ZWwoY2hpcCwgQ0FNUiwgY2Ftcik7CitvdXQ6CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHNuZF9wY21fdWZyYW1lc190CithdG1lbF9hYzk3Y19wbGF5YmFja19wb2ludGVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBhdG1lbF9hYzk3YwkqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lCSpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXNuZF9wY21fdWZyYW1lc190CWZyYW1lczsKKwl1bnNpZ25lZCBsb25nCQlieXRlczsKKworCWJ5dGVzID0gZHdfZG1hX2dldF9zcmNfYWRkcihjaGlwLT5kbWEudHhfY2hhbik7CisJYnl0ZXMgLT0gcnVudGltZS0+ZG1hX2FkZHI7CisKKwlmcmFtZXMgPSBieXRlc190b19mcmFtZXMocnVudGltZSwgYnl0ZXMpOworCWlmIChmcmFtZXMgPj0gcnVudGltZS0+YnVmZmVyX3NpemUpCisJCWZyYW1lcyAtPSBydW50aW1lLT5idWZmZXJfc2l6ZTsKKwlyZXR1cm4gZnJhbWVzOworfQorCitzdGF0aWMgc25kX3BjbV91ZnJhbWVzX3QKK2F0bWVsX2FjOTdjX2NhcHR1cmVfcG9pbnRlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgYXRtZWxfYWM5N2MJKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJc3RydWN0IHNuZF9wY21fcnVudGltZQkqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlzbmRfcGNtX3VmcmFtZXNfdAlmcmFtZXM7CisJdW5zaWduZWQgbG9uZwkJYnl0ZXM7CisKKwlieXRlcyA9IGR3X2RtYV9nZXRfZHN0X2FkZHIoY2hpcC0+ZG1hLnJ4X2NoYW4pOworCWJ5dGVzIC09IHJ1bnRpbWUtPmRtYV9hZGRyOworCisJZnJhbWVzID0gYnl0ZXNfdG9fZnJhbWVzKHJ1bnRpbWUsIGJ5dGVzKTsKKwlpZiAoZnJhbWVzID49IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplKQorCQlmcmFtZXMgLT0gcnVudGltZS0+YnVmZmVyX3NpemU7CisJcmV0dXJuIGZyYW1lczsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfcGNtX29wcyBhdG1lbF9hYzk3X3BsYXliYWNrX29wcyA9IHsKKwkub3BlbgkJPSBhdG1lbF9hYzk3Y19wbGF5YmFja19vcGVuLAorCS5jbG9zZQkJPSBhdG1lbF9hYzk3Y19wbGF5YmFja19jbG9zZSwKKwkuaW9jdGwJCT0gc25kX3BjbV9saWJfaW9jdGwsCisJLmh3X3BhcmFtcwk9IGF0bWVsX2FjOTdjX3BsYXliYWNrX2h3X3BhcmFtcywKKwkuaHdfZnJlZQk9IGF0bWVsX2FjOTdjX3BsYXliYWNrX2h3X2ZyZWUsCisJLnByZXBhcmUJPSBhdG1lbF9hYzk3Y19wbGF5YmFja19wcmVwYXJlLAorCS50cmlnZ2VyCT0gYXRtZWxfYWM5N2NfcGxheWJhY2tfdHJpZ2dlciwKKwkucG9pbnRlcgk9IGF0bWVsX2FjOTdjX3BsYXliYWNrX3BvaW50ZXIsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIGF0bWVsX2FjOTdfY2FwdHVyZV9vcHMgPSB7CisJLm9wZW4JCT0gYXRtZWxfYWM5N2NfY2FwdHVyZV9vcGVuLAorCS5jbG9zZQkJPSBhdG1lbF9hYzk3Y19jYXB0dXJlX2Nsb3NlLAorCS5pb2N0bAkJPSBzbmRfcGNtX2xpYl9pb2N0bCwKKwkuaHdfcGFyYW1zCT0gYXRtZWxfYWM5N2NfY2FwdHVyZV9od19wYXJhbXMsCisJLmh3X2ZyZWUJPSBhdG1lbF9hYzk3Y19jYXB0dXJlX2h3X2ZyZWUsCisJLnByZXBhcmUJPSBhdG1lbF9hYzk3Y19jYXB0dXJlX3ByZXBhcmUsCisJLnRyaWdnZXIJPSBhdG1lbF9hYzk3Y19jYXB0dXJlX3RyaWdnZXIsCisJLnBvaW50ZXIJPSBhdG1lbF9hYzk3Y19jYXB0dXJlX3BvaW50ZXIsCit9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBhdG1lbF9hYzk3Y19wY21fbmV3KHN0cnVjdCBhdG1lbF9hYzk3YyAqY2hpcCkKK3sKKwlzdHJ1Y3Qgc25kX3BjbQkJKnBjbTsKKwlzdHJ1Y3Qgc25kX3BjbV9oYXJkd2FyZQlodyA9IGF0bWVsX2FjOTdjX2h3OworCWludAkJCWNhcHR1cmUsIHBsYXliYWNrLCByZXR2YWw7CisKKwljYXB0dXJlID0gdGVzdF9iaXQoRE1BX1JYX0NIQU5fUFJFU0VOVCwgJmNoaXAtPmZsYWdzKTsKKwlwbGF5YmFjayA9IHRlc3RfYml0KERNQV9UWF9DSEFOX1BSRVNFTlQsICZjaGlwLT5mbGFncyk7CisKKwlyZXR2YWwgPSBzbmRfcGNtX25ldyhjaGlwLT5jYXJkLCBjaGlwLT5jYXJkLT5zaG9ydG5hbWUsCisJCQljaGlwLT5wZGV2LT5pZCwgcGxheWJhY2ssIGNhcHR1cmUsICZwY20pOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlpZiAoY2FwdHVyZSkKKwkJc25kX3BjbV9zZXRfb3BzKHBjbSwgU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFLAorCQkJCSZhdG1lbF9hYzk3X2NhcHR1cmVfb3BzKTsKKwlpZiAocGxheWJhY2spCisJCXNuZF9wY21fc2V0X29wcyhwY20sIFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0ssCisJCQkJJmF0bWVsX2FjOTdfcGxheWJhY2tfb3BzKTsKKworCXJldHZhbCA9IHNuZF9wY21fbGliX3ByZWFsbG9jYXRlX3BhZ2VzX2Zvcl9hbGwocGNtLCBTTkRSVl9ETUFfVFlQRV9ERVYsCisJCQkmY2hpcC0+cGRldi0+ZGV2LCBody5wZXJpb2RzX21pbiAqIGh3LnBlcmlvZF9ieXRlc19taW4sCisJCQlody5idWZmZXJfYnl0ZXNfbWF4KTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJcGNtLT5wcml2YXRlX2RhdGEgPSBjaGlwOworCXBjbS0+aW5mb19mbGFncyA9IDA7CisJc3RyY3B5KHBjbS0+bmFtZSwgY2hpcC0+Y2FyZC0+c2hvcnRuYW1lKTsKKwljaGlwLT5wY20gPSBwY207CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdG1lbF9hYzk3Y19taXhlcl9uZXcoc3RydWN0IGF0bWVsX2FjOTdjICpjaGlwKQoreworCXN0cnVjdCBzbmRfYWM5N190ZW1wbGF0ZSB0ZW1wbGF0ZTsKKwltZW1zZXQoJnRlbXBsYXRlLCAwLCBzaXplb2YodGVtcGxhdGUpKTsKKwl0ZW1wbGF0ZS5wcml2YXRlX2RhdGEgPSBjaGlwOworCXJldHVybiBzbmRfYWM5N19taXhlcihjaGlwLT5hYzk3X2J1cywgJnRlbXBsYXRlLCAmY2hpcC0+YWM5Nyk7Cit9CisKK3N0YXRpYyB2b2lkIGF0bWVsX2FjOTdjX3dyaXRlKHN0cnVjdCBzbmRfYWM5NyAqYWM5NywgdW5zaWduZWQgc2hvcnQgcmVnLAorCQl1bnNpZ25lZCBzaG9ydCB2YWwpCit7CisJc3RydWN0IGF0bWVsX2FjOTdjICpjaGlwID0gZ2V0X2NoaXAoYWM5Nyk7CisJdW5zaWduZWQgbG9uZyB3b3JkOworCWludCB0aW1lb3V0ID0gNDA7CisKKwl3b3JkID0gKHJlZyAmIDB4N2YpIDw8IDE2IHwgdmFsOworCisJZG8geworCQlpZiAoYWM5N2NfcmVhZGwoY2hpcCwgQ09TUikgJiBBQzk3Q19DU1JfVFhSRFkpIHsKKwkJCWFjOTdjX3dyaXRlbChjaGlwLCBDT1RIUiwgd29yZCk7CisJCQlyZXR1cm47CisJCX0KKwkJdWRlbGF5KDEpOworCX0gd2hpbGUgKC0tdGltZW91dCk7CisKKwlkZXZfZGJnKCZjaGlwLT5wZGV2LT5kZXYsICJjb2RlYyB3cml0ZSB0aW1lb3V0XG4iKTsKK30KKworc3RhdGljIHVuc2lnbmVkIHNob3J0IGF0bWVsX2FjOTdjX3JlYWQoc3RydWN0IHNuZF9hYzk3ICphYzk3LAorCQl1bnNpZ25lZCBzaG9ydCByZWcpCit7CisJc3RydWN0IGF0bWVsX2FjOTdjICpjaGlwID0gZ2V0X2NoaXAoYWM5Nyk7CisJdW5zaWduZWQgbG9uZyB3b3JkOworCWludCB0aW1lb3V0ID0gNDA7CisJaW50IHdyaXRlID0gMTA7CisKKwl3b3JkID0gKDB4ODAgfCAocmVnICYgMHg3ZikpIDw8IDE2OworCisJaWYgKChhYzk3Y19yZWFkbChjaGlwLCBDT1NSKSAmIEFDOTdDX0NTUl9SWFJEWSkgIT0gMCkKKwkJYWM5N2NfcmVhZGwoY2hpcCwgQ09SSFIpOworCityZXRyeV93cml0ZToKKwl0aW1lb3V0ID0gNDA7CisKKwlkbyB7CisJCWlmICgoYWM5N2NfcmVhZGwoY2hpcCwgQ09TUikgJiBBQzk3Q19DU1JfVFhSRFkpICE9IDApIHsKKwkJCWFjOTdjX3dyaXRlbChjaGlwLCBDT1RIUiwgd29yZCk7CisJCQlnb3RvIHJlYWRfcmVnOworCQl9CisJCXVkZWxheSgxMCk7CisJfSB3aGlsZSAoLS10aW1lb3V0KTsKKworCWlmICghLS13cml0ZSkKKwkJZ290byB0aW1lZF9vdXQ7CisJZ290byByZXRyeV93cml0ZTsKKworcmVhZF9yZWc6CisJZG8geworCQlpZiAoKGFjOTdjX3JlYWRsKGNoaXAsIENPU1IpICYgQUM5N0NfQ1NSX1JYUkRZKSAhPSAwKSB7CisJCQl1bnNpZ25lZCBzaG9ydCB2YWwgPSBhYzk3Y19yZWFkbChjaGlwLCBDT1JIUik7CisJCQlyZXR1cm4gdmFsOworCQl9CisJCXVkZWxheSgxMCk7CisJfSB3aGlsZSAoLS10aW1lb3V0KTsKKworCWlmICghLS13cml0ZSkKKwkJZ290byB0aW1lZF9vdXQ7CisJZ290byByZXRyeV93cml0ZTsKKwordGltZWRfb3V0OgorCWRldl9kYmcoJmNoaXAtPnBkZXYtPmRldiwgImNvZGVjIHJlYWQgdGltZW91dFxuIik7CisJcmV0dXJuIDB4ZmZmZjsKK30KKworc3RhdGljIGJvb2wgZmlsdGVyKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwgdm9pZCAqc2xhdmUpCit7CisJc3RydWN0IGR3X2RtYV9zbGF2ZSAqZHdzID0gc2xhdmU7CisKKwlpZiAoZHdzLT5kbWFfZGV2ID09IGNoYW4tPmRldmljZS0+ZGV2KSB7CisJCWNoYW4tPnByaXZhdGUgPSBkd3M7CisJCXJldHVybiB0cnVlOworCX0gZWxzZQorCQlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkIGF0bWVsX2FjOTdjX3Jlc2V0KHN0cnVjdCBhdG1lbF9hYzk3YyAqY2hpcCkKK3sKKwlhYzk3Y193cml0ZWwoY2hpcCwgTVIsIEFDOTdDX01SX1dSU1QpOworCisJaWYgKGdwaW9faXNfdmFsaWQoY2hpcC0+cmVzZXRfcGluKSkgeworCQlncGlvX3NldF92YWx1ZShjaGlwLT5yZXNldF9waW4sIDApOworCQkvKiBBQzk3IHYyLjIgc3BlY2lmaWNhdGlvbnMgc2F5cyBtaW5pbXVtIDEgdXMuICovCisJCXVkZWxheSgxMCk7CisJCWdwaW9fc2V0X3ZhbHVlKGNoaXAtPnJlc2V0X3BpbiwgMSk7CisJfQorCisJdWRlbGF5KDEpOworCWFjOTdjX3dyaXRlbChjaGlwLCBNUiwgQUM5N0NfTVJfRU5BKTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgYXRtZWxfYWM5N2NfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc25kX2NhcmQJCQkqY2FyZDsKKwlzdHJ1Y3QgYXRtZWxfYWM5N2MJCSpjaGlwOworCXN0cnVjdCByZXNvdXJjZQkJCSpyZWdzOworCXN0cnVjdCBhYzk3Y19wbGF0Zm9ybV9kYXRhCSpwZGF0YTsKKwlzdHJ1Y3QgY2xrCQkJKnBjbGs7CisJc3RhdGljIHN0cnVjdCBzbmRfYWM5N19idXNfb3BzCW9wcyA9IHsKKwkJLndyaXRlCT0gYXRtZWxfYWM5N2Nfd3JpdGUsCisJCS5yZWFkCT0gYXRtZWxfYWM5N2NfcmVhZCwKKwl9OworCWludAkJCQlyZXR2YWw7CisKKwlyZWdzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXJlZ3MpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAibm8gbWVtb3J5IHJlc291cmNlXG4iKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwlwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCWlmICghcGRhdGEpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAibm8gcGxhdGZvcm0gZGF0YVxuIik7CisJCXJldHVybiAtRU5YSU87CisJfQorCisJcGNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgInBjbGsiKTsKKwlpZiAoSVNfRVJSKHBjbGspKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgIm5vIHBlcmlwaGVyYWwgY2xvY2tcbiIpOworCQlyZXR1cm4gUFRSX0VSUihwY2xrKTsKKwl9CisJY2xrX2VuYWJsZShwY2xrKTsKKworCXJldHZhbCA9IHNuZF9jYXJkX2NyZWF0ZShTTkRSVl9ERUZBVUxUX0lEWDEsIFNORFJWX0RFRkFVTFRfU1RSMSwKKwkJCVRISVNfTU9EVUxFLCBzaXplb2Yoc3RydWN0IGF0bWVsX2FjOTdjKSwgJmNhcmQpOworCWlmIChyZXR2YWwpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAiY291bGQgbm90IGNyZWF0ZSBzb3VuZCBjYXJkIGRldmljZVxuIik7CisJCWdvdG8gZXJyX3NuZF9jYXJkX25ldzsKKwl9CisKKwljaGlwID0gZ2V0X2NoaXAoY2FyZCk7CisKKwlzcGluX2xvY2tfaW5pdCgmY2hpcC0+bG9jayk7CisKKwlzdHJjcHkoY2FyZC0+ZHJpdmVyLCAiQXRtZWwgQUM5N0MiKTsKKwlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAiQXRtZWwgQUM5N0MiKTsKKwlzcHJpbnRmKGNhcmQtPmxvbmduYW1lLCAiQXRtZWwgQUM5NyBjb250cm9sbGVyIik7CisKKwljaGlwLT5jYXJkID0gY2FyZDsKKwljaGlwLT5wY2xrID0gcGNsazsKKwljaGlwLT5wZGV2ID0gcGRldjsKKwljaGlwLT5yZWdzID0gaW9yZW1hcChyZWdzLT5zdGFydCwgcmVncy0+ZW5kIC0gcmVncy0+c3RhcnQgKyAxKTsKKworCWlmICghY2hpcC0+cmVncykgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJjb3VsZCBub3QgcmVtYXAgcmVnaXN0ZXIgbWVtb3J5XG4iKTsKKwkJZ290byBlcnJfaW9yZW1hcDsKKwl9CisKKwlpZiAoZ3Bpb19pc192YWxpZChwZGF0YS0+cmVzZXRfcGluKSkgeworCQlpZiAoZ3Bpb19yZXF1ZXN0KHBkYXRhLT5yZXNldF9waW4sICJyZXNldF9waW4iKSkgeworCQkJZGV2X2RiZygmcGRldi0+ZGV2LCAicmVzZXQgcGluIG5vdCBhdmFpbGFibGVcbiIpOworCQkJY2hpcC0+cmVzZXRfcGluID0gLUVOT0RFVjsKKwkJfSBlbHNlIHsKKwkJCWdwaW9fZGlyZWN0aW9uX291dHB1dChwZGF0YS0+cmVzZXRfcGluLCAxKTsKKwkJCWNoaXAtPnJlc2V0X3BpbiA9IHBkYXRhLT5yZXNldF9waW47CisJCX0KKwl9CisKKwlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsICZwZGV2LT5kZXYpOworCisJcmV0dmFsID0gc25kX2FjOTdfYnVzKGNhcmQsIDAsICZvcHMsIGNoaXAsICZjaGlwLT5hYzk3X2J1cyk7CisJaWYgKHJldHZhbCkgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJjb3VsZCBub3QgcmVnaXN0ZXIgb24gYWM5NyBidXNcbiIpOworCQlnb3RvIGVycl9hYzk3X2J1czsKKwl9CisKKwlhdG1lbF9hYzk3Y19yZXNldChjaGlwKTsKKworCXJldHZhbCA9IGF0bWVsX2FjOTdjX21peGVyX25ldyhjaGlwKTsKKwlpZiAocmV0dmFsKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgImNvdWxkIG5vdCByZWdpc3RlciBhYzk3IG1peGVyXG4iKTsKKwkJZ290byBlcnJfYWM5N19idXM7CisJfQorCisJaWYgKHBkYXRhLT5yeF9kd3MuZG1hX2RldikgeworCQlzdHJ1Y3QgZHdfZG1hX3NsYXZlICpkd3MgPSAmcGRhdGEtPnJ4X2R3czsKKwkJZG1hX2NhcF9tYXNrX3QgbWFzazsKKworCQlkd3MtPnJ4X3JlZyA9IHJlZ3MtPnN0YXJ0ICsgQUM5N0NfQ0FSSFIgKyAyOworCisJCWRtYV9jYXBfemVybyhtYXNrKTsKKwkJZG1hX2NhcF9zZXQoRE1BX1NMQVZFLCBtYXNrKTsKKworCQljaGlwLT5kbWEucnhfY2hhbiA9IGRtYV9yZXF1ZXN0X2NoYW5uZWwobWFzaywgZmlsdGVyLCBkd3MpOworCisJCWRldl9pbmZvKCZjaGlwLT5wZGV2LT5kZXYsICJ1c2luZyAlcyBmb3IgRE1BIFJYXG4iLAorCQkJCQljaGlwLT5kbWEucnhfY2hhbi0+ZGV2LT5kZXZpY2UuYnVzX2lkKTsKKwkJc2V0X2JpdChETUFfUlhfQ0hBTl9QUkVTRU5ULCAmY2hpcC0+ZmxhZ3MpOworCX0KKworCWlmIChwZGF0YS0+dHhfZHdzLmRtYV9kZXYpIHsKKwkJc3RydWN0IGR3X2RtYV9zbGF2ZSAqZHdzID0gJnBkYXRhLT50eF9kd3M7CisJCWRtYV9jYXBfbWFza190IG1hc2s7CisKKwkJZHdzLT50eF9yZWcgPSByZWdzLT5zdGFydCArIEFDOTdDX0NBVEhSICsgMjsKKworCQlkbWFfY2FwX3plcm8obWFzayk7CisJCWRtYV9jYXBfc2V0KERNQV9TTEFWRSwgbWFzayk7CisKKwkJY2hpcC0+ZG1hLnR4X2NoYW4gPSBkbWFfcmVxdWVzdF9jaGFubmVsKG1hc2ssIGZpbHRlciwgZHdzKTsKKworCQlkZXZfaW5mbygmY2hpcC0+cGRldi0+ZGV2LCAidXNpbmcgJXMgZm9yIERNQSBUWFxuIiwKKwkJCQkJY2hpcC0+ZG1hLnR4X2NoYW4tPmRldi0+ZGV2aWNlLmJ1c19pZCk7CisJCXNldF9iaXQoRE1BX1RYX0NIQU5fUFJFU0VOVCwgJmNoaXAtPmZsYWdzKTsKKwl9CisKKwlpZiAoIXRlc3RfYml0KERNQV9SWF9DSEFOX1BSRVNFTlQsICZjaGlwLT5mbGFncykgJiYKKwkJCSF0ZXN0X2JpdChETUFfVFhfQ0hBTl9QUkVTRU5ULCAmY2hpcC0+ZmxhZ3MpKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgIkRNQSBub3QgYXZhaWxhYmxlXG4iKTsKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJZ290byBlcnJfZG1hOworCX0KKworCXJldHZhbCA9IGF0bWVsX2FjOTdjX3BjbV9uZXcoY2hpcCk7CisJaWYgKHJldHZhbCkgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJjb3VsZCBub3QgcmVnaXN0ZXIgYWM5NyBwY20gZGV2aWNlXG4iKTsKKwkJZ290byBlcnJfZG1hOworCX0KKworCXJldHZhbCA9IHNuZF9jYXJkX3JlZ2lzdGVyKGNhcmQpOworCWlmIChyZXR2YWwpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAiY291bGQgbm90IHJlZ2lzdGVyIHNvdW5kIGNhcmRcbiIpOworCQlnb3RvIGVycl9hYzk3X2J1czsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBjYXJkKTsKKworCWRldl9pbmZvKCZwZGV2LT5kZXYsICJBdG1lbCBBQzk3IGNvbnRyb2xsZXIgYXQgMHglcFxuIiwKKwkJCWNoaXAtPnJlZ3MpOworCisJcmV0dXJuIDA7CisKK2Vycl9kbWE6CisJaWYgKHRlc3RfYml0KERNQV9SWF9DSEFOX1BSRVNFTlQsICZjaGlwLT5mbGFncykpCisJCWRtYV9yZWxlYXNlX2NoYW5uZWwoY2hpcC0+ZG1hLnJ4X2NoYW4pOworCWlmICh0ZXN0X2JpdChETUFfVFhfQ0hBTl9QUkVTRU5ULCAmY2hpcC0+ZmxhZ3MpKQorCQlkbWFfcmVsZWFzZV9jaGFubmVsKGNoaXAtPmRtYS50eF9jaGFuKTsKKwljbGVhcl9iaXQoRE1BX1JYX0NIQU5fUFJFU0VOVCwgJmNoaXAtPmZsYWdzKTsKKwljbGVhcl9iaXQoRE1BX1RYX0NIQU5fUFJFU0VOVCwgJmNoaXAtPmZsYWdzKTsKKwljaGlwLT5kbWEucnhfY2hhbiA9IE5VTEw7CisJY2hpcC0+ZG1hLnR4X2NoYW4gPSBOVUxMOworZXJyX2FjOTdfYnVzOgorCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgTlVMTCk7CisKKwlpZiAoZ3Bpb19pc192YWxpZChjaGlwLT5yZXNldF9waW4pKQorCQlncGlvX2ZyZWUoY2hpcC0+cmVzZXRfcGluKTsKKworCWlvdW5tYXAoY2hpcC0+cmVncyk7CitlcnJfaW9yZW1hcDoKKwlzbmRfY2FyZF9mcmVlKGNhcmQpOworZXJyX3NuZF9jYXJkX25ldzoKKwljbGtfZGlzYWJsZShwY2xrKTsKKwljbGtfcHV0KHBjbGspOworCXJldHVybiByZXR2YWw7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgYXRtZWxfYWM5N2Nfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3QgbXNnKQoreworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBhdG1lbF9hYzk3YyAqY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKKworCWlmICh0ZXN0X2JpdChETUFfUlhfUkVBRFksICZjaGlwLT5mbGFncykpCisJCWR3X2RtYV9jeWNsaWNfc3RvcChjaGlwLT5kbWEucnhfY2hhbik7CisJaWYgKHRlc3RfYml0KERNQV9UWF9SRUFEWSwgJmNoaXAtPmZsYWdzKSkKKwkJZHdfZG1hX2N5Y2xpY19zdG9wKGNoaXAtPmRtYS50eF9jaGFuKTsKKwljbGtfZGlzYWJsZShjaGlwLT5wY2xrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF0bWVsX2FjOTdjX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBhdG1lbF9hYzk3YyAqY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKKworCWNsa19lbmFibGUoY2hpcC0+cGNsayk7CisJaWYgKHRlc3RfYml0KERNQV9SWF9SRUFEWSwgJmNoaXAtPmZsYWdzKSkKKwkJZHdfZG1hX2N5Y2xpY19zdGFydChjaGlwLT5kbWEucnhfY2hhbik7CisJaWYgKHRlc3RfYml0KERNQV9UWF9SRUFEWSwgJmNoaXAtPmZsYWdzKSkKKwkJZHdfZG1hX2N5Y2xpY19zdGFydChjaGlwLT5kbWEudHhfY2hhbik7CisKKwlyZXR1cm4gMDsKK30KKyNlbHNlCisjZGVmaW5lIGF0bWVsX2FjOTdjX3N1c3BlbmQgTlVMTAorI2RlZmluZSBhdG1lbF9hYzk3Y19yZXN1bWUgTlVMTAorI2VuZGlmCisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGF0bWVsX2FjOTdjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBhdG1lbF9hYzk3YyAqY2hpcCA9IGdldF9jaGlwKGNhcmQpOworCisJaWYgKGdwaW9faXNfdmFsaWQoY2hpcC0+cmVzZXRfcGluKSkKKwkJZ3Bpb19mcmVlKGNoaXAtPnJlc2V0X3Bpbik7CisKKwljbGtfZGlzYWJsZShjaGlwLT5wY2xrKTsKKwljbGtfcHV0KGNoaXAtPnBjbGspOworCWlvdW5tYXAoY2hpcC0+cmVncyk7CisKKwlpZiAodGVzdF9iaXQoRE1BX1JYX0NIQU5fUFJFU0VOVCwgJmNoaXAtPmZsYWdzKSkKKwkJZG1hX3JlbGVhc2VfY2hhbm5lbChjaGlwLT5kbWEucnhfY2hhbik7CisJaWYgKHRlc3RfYml0KERNQV9UWF9DSEFOX1BSRVNFTlQsICZjaGlwLT5mbGFncykpCisJCWRtYV9yZWxlYXNlX2NoYW5uZWwoY2hpcC0+ZG1hLnR4X2NoYW4pOworCWNsZWFyX2JpdChETUFfUlhfQ0hBTl9QUkVTRU5ULCAmY2hpcC0+ZmxhZ3MpOworCWNsZWFyX2JpdChETUFfVFhfQ0hBTl9QUkVTRU5ULCAmY2hpcC0+ZmxhZ3MpOworCWNoaXAtPmRtYS5yeF9jaGFuID0gTlVMTDsKKwljaGlwLT5kbWEudHhfY2hhbiA9IE5VTEw7CisKKwlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsIE5VTEwpOworCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhdG1lbF9hYzk3Y19kcml2ZXIgPSB7CisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChhdG1lbF9hYzk3Y19yZW1vdmUpLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJhdG1lbF9hYzk3YyIsCisJfSwKKwkuc3VzcGVuZAk9IGF0bWVsX2FjOTdjX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBhdG1lbF9hYzk3Y19yZXN1bWUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBhdG1lbF9hYzk3Y19pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9wcm9iZSgmYXRtZWxfYWM5N2NfZHJpdmVyLAorCQkJYXRtZWxfYWM5N2NfcHJvYmUpOworfQorbW9kdWxlX2luaXQoYXRtZWxfYWM5N2NfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhdG1lbF9hYzk3Y19leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmF0bWVsX2FjOTdjX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChhdG1lbF9hYzk3Y19leGl0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIEF0bWVsIEFDOTcgY29udHJvbGxlciIpOworTU9EVUxFX0FVVEhPUigiSGFucy1DaHJpc3RpYW4gRWd0dmVkdCA8aGFucy1jaHJpc3RpYW4uZWd0dmVkdEBhdG1lbC5jb20+Iik7CmRpZmYgLS1naXQgYS9zb3VuZC9hdG1lbC9hYzk3Yy5oIGIvc291bmQvYXRtZWwvYWM5N2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTdiZDU4Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvYXRtZWwvYWM5N2MuaApAQCAtMCwwICsxLDcxIEBACisvKgorICogUmVnaXN0ZXIgZGVmaW5pdGlvbnMgZm9yIHRoZSBBdG1lbCBBQzk3QyBjb250cm9sbGVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDkgQXRtZWwgQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkCisgKiBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaWZuZGVmIF9fU09VTkRfQVRNRUxfQUM5N0NfSAorI2RlZmluZSBfX1NPVU5EX0FUTUVMX0FDOTdDX0gKKworI2RlZmluZSBBQzk3Q19NUgkJMHgwOAorI2RlZmluZSBBQzk3Q19JQ0EJCTB4MTAKKyNkZWZpbmUgQUM5N0NfT0NBCQkweDE0CisjZGVmaW5lIEFDOTdDX0NBUkhSCQkweDIwCisjZGVmaW5lIEFDOTdDX0NBVEhSCQkweDI0CisjZGVmaW5lIEFDOTdDX0NBU1IJCTB4MjgKKyNkZWZpbmUgQUM5N0NfQ0FNUgkJMHgyYworI2RlZmluZSBBQzk3Q19DQlJIUgkJMHgzMAorI2RlZmluZSBBQzk3Q19DQlRIUgkJMHgzNAorI2RlZmluZSBBQzk3Q19DQlNSCQkweDM4CisjZGVmaW5lIEFDOTdDX0NCTVIJCTB4M2MKKyNkZWZpbmUgQUM5N0NfQ09SSFIJCTB4NDAKKyNkZWZpbmUgQUM5N0NfQ09USFIJCTB4NDQKKyNkZWZpbmUgQUM5N0NfQ09TUgkJMHg0OAorI2RlZmluZSBBQzk3Q19DT01SCQkweDRjCisjZGVmaW5lIEFDOTdDX1NSCQkweDUwCisjZGVmaW5lIEFDOTdDX0lFUgkJMHg1NAorI2RlZmluZSBBQzk3Q19JRFIJCTB4NTgKKyNkZWZpbmUgQUM5N0NfSU1SCQkweDVjCisjZGVmaW5lIEFDOTdDX1ZFUlNJT04JCTB4ZmMKKworI2RlZmluZSBBQzk3Q19DQVRQUgkJUERDX1RQUgorI2RlZmluZSBBQzk3Q19DQVRDUgkJUERDX1RDUgorI2RlZmluZSBBQzk3Q19DQVROUFIJCVBEQ19UTlBSCisjZGVmaW5lIEFDOTdDX0NBVE5DUgkJUERDX1ROQ1IKKyNkZWZpbmUgQUM5N0NfQ0FSUFIJCVBEQ19SUFIKKyNkZWZpbmUgQUM5N0NfQ0FSQ1IJCVBEQ19SQ1IKKyNkZWZpbmUgQUM5N0NfQ0FSTlBSCQlQRENfUk5QUgorI2RlZmluZSBBQzk3Q19DQVJOQ1IJCVBEQ19STkNSCisjZGVmaW5lIEFDOTdDX1BUQ1IJCVBEQ19QVENSCisKKyNkZWZpbmUgQUM5N0NfTVJfRU5BCQkoMSA8PCAwKQorI2RlZmluZSBBQzk3Q19NUl9XUlNUCQkoMSA8PCAxKQorI2RlZmluZSBBQzk3Q19NUl9WUkEJCSgxIDw8IDIpCisKKyNkZWZpbmUgQUM5N0NfQ1NSX1RYUkRZCQkoMSA8PCAwKQorI2RlZmluZSBBQzk3Q19DU1JfVU5SVU4JCSgxIDw8IDIpCisjZGVmaW5lIEFDOTdDX0NTUl9SWFJEWQkJKDEgPDwgNCkKKyNkZWZpbmUgQUM5N0NfQ1NSX0VORFRYCQkoMSA8PCAxMCkKKyNkZWZpbmUgQUM5N0NfQ1NSX0VORFJYCQkoMSA8PCAxNCkKKworI2RlZmluZSBBQzk3Q19DTVJfU0laRV8yMAkoMCA8PCAxNikKKyNkZWZpbmUgQUM5N0NfQ01SX1NJWkVfMTgJKDEgPDwgMTYpCisjZGVmaW5lIEFDOTdDX0NNUl9TSVpFXzE2CSgyIDw8IDE2KQorI2RlZmluZSBBQzk3Q19DTVJfU0laRV8xMAkoMyA8PCAxNikKKyNkZWZpbmUgQUM5N0NfQ01SX0NFTV9MSVRUTEUJKDEgPDwgMTgpCisjZGVmaW5lIEFDOTdDX0NNUl9DRU1fQklHCSgwIDw8IDE4KQorI2RlZmluZSBBQzk3Q19DTVJfQ0VOQQkJKDEgPDwgMjEpCisjZGVmaW5lIEFDOTdDX0NNUl9ETUFFTgkJKDEgPDwgMjIpCisKKyNkZWZpbmUgQUM5N0NfU1JfQ0FFVlQJCSgxIDw8IDMpCisKKyNkZWZpbmUgQUM5N0NfQ0hfQVNTSUdOKHNsb3QsIGNoYW5uZWwpCQkJCQlcCisJKEFDOTdDX0NIQU5ORUxfIyNjaGFubmVsIDw8ICgzICogKEFDOTdfU0xPVF8jI3Nsb3QgLSAzKSkpCisjZGVmaW5lIEFDOTdDX0NIQU5ORUxfTk9ORQkweDAKKyNkZWZpbmUgQUM5N0NfQ0hBTk5FTF9BCQkweDEKKyNkZWZpbmUgQUM5N0NfQ0hBTk5FTF9CCQkweDIKKworI2VuZGlmIC8qIF9fU09VTkRfQVRNRUxfQUM5N0NfSCAqLwpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9jb250cm9sLmMgYi9zb3VuZC9jb3JlL2NvbnRyb2wuYwppbmRleCA2MzZiM2I1Li40YjIwZmEyIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL2NvbnRyb2wuYworKysgYi9zb3VuZC9jb3JlL2NvbnRyb2wuYwpAQCAtMTM3MywxMiArMTM3Myw5IEBACiBzdGF0aWMgaW50IHNuZF9jdGxfZmFzeW5jKGludCBmZCwgc3RydWN0IGZpbGUgKiBmaWxlLCBpbnQgb24pCiB7CiAJc3RydWN0IHNuZF9jdGxfZmlsZSAqY3RsOwotCWludCBlcnI7CisKIAljdGwgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JZXJyID0gZmFzeW5jX2hlbHBlcihmZCwgZmlsZSwgb24sICZjdGwtPmZhc3luYyk7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGZhc3luY19oZWxwZXIoZmQsIGZpbGUsIG9uLCAmY3RsLT5mYXN5bmMpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9od2RlcC5jIGIvc291bmQvY29yZS9od2RlcC5jCmluZGV4IDE5NWNhZmMuLmE3MGVlN2YgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvaHdkZXAuYworKysgYi9zb3VuZC9jb3JlL2h3ZGVwLmMKQEAgLTk5LDkgKzk5LDYgQEAKIAlpZiAoaHcgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlpZiAoIWh3LT5vcHMub3BlbikKLQkJcmV0dXJuIC1FTlhJTzsKLQogCWlmICghdHJ5X21vZHVsZV9nZXQoaHctPmNhcmQtPm1vZHVsZSkpCiAJCXJldHVybiAtRUZBVUxUOwogCkBAIC0xMTMsNiArMTEwLDEwIEBACiAJCQllcnIgPSAtRUJVU1k7CiAJCQlicmVhazsKIAkJfQorCQlpZiAoIWh3LT5vcHMub3BlbikgeworCQkJZXJyID0gMDsKKwkJCWJyZWFrOworCQl9CiAJCWVyciA9IGh3LT5vcHMub3BlbihodywgZmlsZSk7CiAJCWlmIChlcnIgPj0gMCkKIAkJCWJyZWFrOwpAQCAtMTUxLDcgKzE1Miw3IEBACiAKIHN0YXRpYyBpbnQgc25kX2h3ZGVwX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKiBmaWxlKQogewotCWludCBlcnIgPSAtRU5YSU87CisJaW50IGVyciA9IDA7CiAJc3RydWN0IHNuZF9od2RlcCAqaHcgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IG1vZHVsZSAqbW9kID0gaHctPmNhcmQtPm1vZHVsZTsKIApkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9pbml0LmMgYi9zb3VuZC9jb3JlL2luaXQuYwppbmRleCAwZDU1MjBjLi5mZDU2YWZlIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL2luaXQuYworKysgYi9zb3VuZC9jb3JlL2luaXQuYwpAQCAtMTIxLDMxICsxMjEsNDQgQEAKICNlbmRpZgogCiAvKioKLSAqICBzbmRfY2FyZF9uZXcgLSBjcmVhdGUgYW5kIGluaXRpYWxpemUgYSBzb3VuZGNhcmQgc3RydWN0dXJlCisgKiAgc25kX2NhcmRfY3JlYXRlIC0gY3JlYXRlIGFuZCBpbml0aWFsaXplIGEgc291bmRjYXJkIHN0cnVjdHVyZQogICogIEBpZHg6IGNhcmQgaW5kZXggKGFkZHJlc3MpIFswIC4uLiAoU05EUlZfQ0FSRFMtMSldCiAgKiAgQHhpZDogY2FyZCBpZGVudGlmaWNhdGlvbiAoQVNDSUkgc3RyaW5nKQogICogIEBtb2R1bGU6IHRvcCBsZXZlbCBtb2R1bGUgZm9yIGxvY2tpbmcKICAqICBAZXh0cmFfc2l6ZTogYWxsb2NhdGUgdGhpcyBleHRyYSBzaXplIGFmdGVyIHRoZSBtYWluIHNvdW5kY2FyZCBzdHJ1Y3R1cmUKKyAqICBAY2FyZF9yZXQ6IHRoZSBwb2ludGVyIHRvIHN0b3JlIHRoZSBjcmVhdGVkIGNhcmQgaW5zdGFuY2UKICAqCiAgKiAgQ3JlYXRlcyBhbmQgaW5pdGlhbGl6ZXMgYSBzb3VuZGNhcmQgc3RydWN0dXJlLgogICoKLSAqICBSZXR1cm5zIGttYWxsb2NhdGVkIHNuZF9jYXJkIHN0cnVjdHVyZS4gQ3JlYXRlcyB0aGUgQUxTQSBjb250cm9sIGludGVyZmFjZQotICogICh3aGljaCBpcyBibG9ja2VkIHVudGlsIHNuZF9jYXJkX3JlZ2lzdGVyIGZ1bmN0aW9uIGlzIGNhbGxlZCkuCisgKiAgVGhlIGZ1bmN0aW9uIGFsbG9jYXRlcyBzbmRfY2FyZCBpbnN0YW5jZSB2aWEga3phbGxvYyB3aXRoIHRoZSBnaXZlbgorICogIHNwYWNlIGZvciB0aGUgZHJpdmVyIHRvIHVzZSBmcmVlbHkuICBUaGUgYWxsb2NhdGVkIHN0cnVjdCBpcyBzdG9yZWQKKyAqICBpbiB0aGUgZ2l2ZW4gY2FyZF9yZXQgcG9pbnRlci4KKyAqCisgKiAgUmV0dXJucyB6ZXJvIGlmIHN1Y2Nlc3NmdWwgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlLgogICovCi1zdHJ1Y3Qgc25kX2NhcmQgKnNuZF9jYXJkX25ldyhpbnQgaWR4LCBjb25zdCBjaGFyICp4aWQsCi0JCQkgc3RydWN0IG1vZHVsZSAqbW9kdWxlLCBpbnQgZXh0cmFfc2l6ZSkKK2ludCBzbmRfY2FyZF9jcmVhdGUoaW50IGlkeCwgY29uc3QgY2hhciAqeGlkLAorCQkgICAgc3RydWN0IG1vZHVsZSAqbW9kdWxlLCBpbnQgZXh0cmFfc2l6ZSwKKwkJICAgIHN0cnVjdCBzbmRfY2FyZCAqKmNhcmRfcmV0KQogewogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKIAlpbnQgZXJyLCBpZHgyOwogCisJaWYgKHNuZF9CVUdfT04oIWNhcmRfcmV0KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJKmNhcmRfcmV0ID0gTlVMTDsKKwogCWlmIChleHRyYV9zaXplIDwgMCkKIAkJZXh0cmFfc2l6ZSA9IDA7CiAJY2FyZCA9IGt6YWxsb2Moc2l6ZW9mKCpjYXJkKSArIGV4dHJhX3NpemUsIEdGUF9LRVJORUwpOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiBOVUxMOworCWlmICghY2FyZCkKKwkJcmV0dXJuIC1FTk9NRU07CiAJaWYgKHhpZCkgewotCQlpZiAoIXNuZF9pbmZvX2NoZWNrX3Jlc2VydmVkX3dvcmRzKHhpZCkpCisJCWlmICghc25kX2luZm9fY2hlY2tfcmVzZXJ2ZWRfd29yZHMoeGlkKSkgeworCQkJc25kX3ByaW50ayhLRVJOX0VSUgorCQkJCSAgICJnaXZlbiBpZCBzdHJpbmcgJyVzJyBpcyByZXNlcnZlZC5cbiIsIHhpZCk7CisJCQllcnIgPSAtRUJVU1k7CiAJCQlnb3RvIF9fZXJyb3I7CisJCX0KIAkJc3RybGNweShjYXJkLT5pZCwgeGlkLCBzaXplb2YoY2FyZC0+aWQpKTsKIAl9CiAJZXJyID0gMDsKQEAgLTE5NSw2ICsyMDgsNyBAQAogCUlOSVRfTElTVF9IRUFEKCZjYXJkLT5jb250cm9scyk7CiAJSU5JVF9MSVNUX0hFQUQoJmNhcmQtPmN0bF9maWxlcyk7CiAJc3Bpbl9sb2NrX2luaXQoJmNhcmQtPmZpbGVzX2xvY2spOworCUlOSVRfTElTVF9IRUFEKCZjYXJkLT5maWxlc19saXN0KTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjYXJkLT5zaHV0ZG93bl9zbGVlcCk7CiAjaWZkZWYgQ09ORklHX1BNCiAJbXV0ZXhfaW5pdCgmY2FyZC0+cG93ZXJfbG9jayk7CkBAIC0yMDIsMjYgKzIxNiwyOCBAQAogI2VuZGlmCiAJLyogdGhlIGNvbnRyb2wgaW50ZXJmYWNlIGNhbm5vdCBiZSBhY2Nlc3NlZCBmcm9tIHRoZSB1c2VyIHNwYWNlIHVudGlsICovCiAJLyogc25kX2NhcmRzX2JpdG1hc2sgYW5kIHNuZF9jYXJkcyBhcmUgc2V0IHdpdGggc25kX2NhcmRfcmVnaXN0ZXIgKi8KLQlpZiAoKGVyciA9IHNuZF9jdGxfY3JlYXRlKGNhcmQpKSA8IDApIHsKLQkJc25kX3ByaW50ZCgidW5hYmxlIHRvIHJlZ2lzdGVyIGNvbnRyb2wgbWlub3JzXG4iKTsKKwllcnIgPSBzbmRfY3RsX2NyZWF0ZShjYXJkKTsKKwlpZiAoZXJyIDwgMCkgeworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJ1bmFibGUgdG8gcmVnaXN0ZXIgY29udHJvbCBtaW5vcnNcbiIpOwogCQlnb3RvIF9fZXJyb3I7CiAJfQotCWlmICgoZXJyID0gc25kX2luZm9fY2FyZF9jcmVhdGUoY2FyZCkpIDwgMCkgewotCQlzbmRfcHJpbnRkKCJ1bmFibGUgdG8gY3JlYXRlIGNhcmQgaW5mb1xuIik7CisJZXJyID0gc25kX2luZm9fY2FyZF9jcmVhdGUoY2FyZCk7CisJaWYgKGVyciA8IDApIHsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAidW5hYmxlIHRvIGNyZWF0ZSBjYXJkIGluZm9cbiIpOwogCQlnb3RvIF9fZXJyb3JfY3RsOwogCX0KIAlpZiAoZXh0cmFfc2l6ZSA+IDApCiAJCWNhcmQtPnByaXZhdGVfZGF0YSA9IChjaGFyICopY2FyZCArIHNpemVvZihzdHJ1Y3Qgc25kX2NhcmQpOwotCXJldHVybiBjYXJkOworCSpjYXJkX3JldCA9IGNhcmQ7CisJcmV0dXJuIDA7CiAKICAgICAgIF9fZXJyb3JfY3RsOgogCXNuZF9kZXZpY2VfZnJlZV9hbGwoY2FyZCwgU05EUlZfREVWX0NNRF9QUkUpOwogICAgICAgX19lcnJvcjoKIAlrZnJlZShjYXJkKTsKLSAgICAgIAlyZXR1cm4gTlVMTDsKKyAgCXJldHVybiBlcnI7CiB9Ci0KLUVYUE9SVF9TWU1CT0woc25kX2NhcmRfbmV3KTsKK0VYUE9SVF9TWU1CT0woc25kX2NhcmRfY3JlYXRlKTsKIAogLyogcmV0dXJuIG5vbi16ZXJvIGlmIGEgY2FyZCBpcyBhbHJlYWR5IGxvY2tlZCAqLwogaW50IHNuZF9jYXJkX2xvY2tlZChpbnQgY2FyZCkKQEAgLTI1OSw2ICsyNzUsNyBAQAogCWxpc3RfZm9yX2VhY2hfZW50cnkoX2RmLCAmc2h1dGRvd25fZmlsZXMsIHNodXRkb3duX2xpc3QpIHsKIAkJaWYgKF9kZi0+ZmlsZSA9PSBmaWxlKSB7CiAJCQlkZiA9IF9kZjsKKwkJCWxpc3RfZGVsX2luaXQoJmRmLT5zaHV0ZG93bl9saXN0KTsKIAkJCWJyZWFrOwogCQl9CiAJfQpAQCAtMzQ3LDggKzM2NCw3IEBACiAJLyogcGhhc2UgMjogcmVwbGFjZSBmaWxlLT5mX29wIHdpdGggc3BlY2lhbCBkdW1teSBvcGVyYXRpb25zICovCiAJCiAJc3Bpbl9sb2NrKCZjYXJkLT5maWxlc19sb2NrKTsKLQltZmlsZSA9IGNhcmQtPmZpbGVzOwotCXdoaWxlIChtZmlsZSkgeworCWxpc3RfZm9yX2VhY2hfZW50cnkobWZpbGUsICZjYXJkLT5maWxlc19saXN0LCBsaXN0KSB7CiAJCWZpbGUgPSBtZmlsZS0+ZmlsZTsKIAogCQkvKiBpdCdzIGNyaXRpY2FsIHBhcnQsIHVzZSBlbmRsZXNzIGxvb3AgKi8KQEAgLTM2MSw4ICszNzcsNiBAQAogCiAJCW1maWxlLT5maWxlLT5mX29wID0gJnNuZF9zaHV0ZG93bl9mX29wczsKIAkJZm9wc19nZXQobWZpbGUtPmZpbGUtPmZfb3ApOwotCQkKLQkJbWZpbGUgPSBtZmlsZS0+bmV4dDsKIAl9CiAJc3Bpbl91bmxvY2soJmNhcmQtPmZpbGVzX2xvY2spOwkKIApAQCAtNDQyLDcgKzQ1Niw3IEBACiAJCXJldHVybiByZXQ7CiAKIAlzcGluX2xvY2soJmNhcmQtPmZpbGVzX2xvY2spOwotCWlmIChjYXJkLT5maWxlcyA9PSBOVUxMKQorCWlmIChsaXN0X2VtcHR5KCZjYXJkLT5maWxlc19saXN0KSkKIAkJZnJlZV9ub3cgPSAxOwogCWVsc2UKIAkJY2FyZC0+ZnJlZV9vbl9sYXN0X2Nsb3NlID0gMTsKQEAgLTQ2Miw3ICs0NzYsNyBAQAogCQlyZXR1cm4gcmV0OwogCiAJLyogd2FpdCwgdW50aWwgYWxsIGRldmljZXMgYXJlIHJlYWR5IGZvciB0aGUgZnJlZSBvcGVyYXRpb24gKi8KLQl3YWl0X2V2ZW50KGNhcmQtPnNodXRkb3duX3NsZWVwLCBjYXJkLT5maWxlcyA9PSBOVUxMKTsKKwl3YWl0X2V2ZW50KGNhcmQtPnNodXRkb3duX3NsZWVwLCBsaXN0X2VtcHR5KCZjYXJkLT5maWxlc19saXN0KSk7CiAJc25kX2NhcmRfZG9fZnJlZShjYXJkKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTgwOSwxNSArODIzLDEzIEBACiAJCXJldHVybiAtRU5PTUVNOwogCW1maWxlLT5maWxlID0gZmlsZTsKIAltZmlsZS0+ZGlzY29ubmVjdGVkX2Zfb3AgPSBOVUxMOwotCW1maWxlLT5uZXh0ID0gTlVMTDsKIAlzcGluX2xvY2soJmNhcmQtPmZpbGVzX2xvY2spOwogCWlmIChjYXJkLT5zaHV0ZG93bikgewogCQlzcGluX3VubG9jaygmY2FyZC0+ZmlsZXNfbG9jayk7CiAJCWtmcmVlKG1maWxlKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQotCW1maWxlLT5uZXh0ID0gY2FyZC0+ZmlsZXM7Ci0JY2FyZC0+ZmlsZXMgPSBtZmlsZTsKKwlsaXN0X2FkZCgmbWZpbGUtPmxpc3QsICZjYXJkLT5maWxlc19saXN0KTsKIAlzcGluX3VubG9jaygmY2FyZC0+ZmlsZXNfbG9jayk7CiAJcmV0dXJuIDA7CiB9CkBAIC04MzksMjkgKzg1MSwyMCBAQAogICovCiBpbnQgc25kX2NhcmRfZmlsZV9yZW1vdmUoc3RydWN0IHNuZF9jYXJkICpjYXJkLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlzdHJ1Y3Qgc25kX21vbml0b3JfZmlsZSAqbWZpbGUsICpwZmlsZSA9IE5VTEw7CisJc3RydWN0IHNuZF9tb25pdG9yX2ZpbGUgKm1maWxlLCAqZm91bmQgPSBOVUxMOwogCWludCBsYXN0X2Nsb3NlID0gMDsKIAogCXNwaW5fbG9jaygmY2FyZC0+ZmlsZXNfbG9jayk7Ci0JbWZpbGUgPSBjYXJkLT5maWxlczsKLQl3aGlsZSAobWZpbGUpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1maWxlLCAmY2FyZC0+ZmlsZXNfbGlzdCwgbGlzdCkgewogCQlpZiAobWZpbGUtPmZpbGUgPT0gZmlsZSkgewotCQkJaWYgKHBmaWxlKQotCQkJCXBmaWxlLT5uZXh0ID0gbWZpbGUtPm5leHQ7Ci0JCQllbHNlCi0JCQkJY2FyZC0+ZmlsZXMgPSBtZmlsZS0+bmV4dDsKKwkJCWxpc3RfZGVsKCZtZmlsZS0+bGlzdCk7CisJCQlpZiAobWZpbGUtPmRpc2Nvbm5lY3RlZF9mX29wKQorCQkJCWZvcHNfcHV0KG1maWxlLT5kaXNjb25uZWN0ZWRfZl9vcCk7CisJCQlmb3VuZCA9IG1maWxlOwogCQkJYnJlYWs7CiAJCX0KLQkJcGZpbGUgPSBtZmlsZTsKLQkJbWZpbGUgPSBtZmlsZS0+bmV4dDsKIAl9Ci0JaWYgKG1maWxlICYmIG1maWxlLT5kaXNjb25uZWN0ZWRfZl9vcCkgewotCQlmb3BzX3B1dChtZmlsZS0+ZGlzY29ubmVjdGVkX2Zfb3ApOwotCQlzcGluX2xvY2soJnNodXRkb3duX2xvY2spOwotCQlsaXN0X2RlbCgmbWZpbGUtPnNodXRkb3duX2xpc3QpOwotCQlzcGluX3VubG9jaygmc2h1dGRvd25fbG9jayk7Ci0JfQotCWlmIChjYXJkLT5maWxlcyA9PSBOVUxMKQorCWlmIChsaXN0X2VtcHR5KCZjYXJkLT5maWxlc19saXN0KSkKIAkJbGFzdF9jbG9zZSA9IDE7CiAJc3Bpbl91bmxvY2soJmNhcmQtPmZpbGVzX2xvY2spOwogCWlmIChsYXN0X2Nsb3NlKSB7CkBAIC04NjksMTEgKzg3MiwxMSBAQAogCQlpZiAoY2FyZC0+ZnJlZV9vbl9sYXN0X2Nsb3NlKQogCQkJc25kX2NhcmRfZG9fZnJlZShjYXJkKTsKIAl9Ci0JaWYgKCFtZmlsZSkgeworCWlmICghZm91bmQpIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAiQUxTQSBjYXJkIGZpbGUgcmVtb3ZlIHByb2JsZW0gKCVwKVxuIiwgZmlsZSk7CiAJCXJldHVybiAtRU5PRU5UOwogCX0KLQlrZnJlZShtZmlsZSk7CisJa2ZyZWUoZm91bmQpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL2phY2suYyBiL3NvdW5kL2NvcmUvamFjay5jCmluZGV4IDA3N2E4NTIuLmM4MjU0YzYgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvamFjay5jCisrKyBiL3NvdW5kL2NvcmUvamFjay5jCkBAIC0yMyw2ICsyMywxNCBAQAogI2luY2x1ZGUgPHNvdW5kL2phY2suaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAKK3N0YXRpYyBpbnQgamFja190eXBlc1tdID0geworCVNXX0hFQURQSE9ORV9JTlNFUlQsCisJU1dfTUlDUk9QSE9ORV9JTlNFUlQsCisJU1dfTElORU9VVF9JTlNFUlQsCisJU1dfSkFDS19QSFlTSUNBTF9JTlNFUlQsCisJU1dfVklERU9PVVRfSU5TRVJULAorfTsKKwogc3RhdGljIGludCBzbmRfamFja19kZXZfZnJlZShzdHJ1Y3Qgc25kX2RldmljZSAqZGV2aWNlKQogewogCXN0cnVjdCBzbmRfamFjayAqamFjayA9IGRldmljZS0+ZGV2aWNlX2RhdGE7CkBAIC03OSw2ICs4Nyw3IEBACiB7CiAJc3RydWN0IHNuZF9qYWNrICpqYWNrOwogCWludCBlcnI7CisJaW50IGk7CiAJc3RhdGljIHN0cnVjdCBzbmRfZGV2aWNlX29wcyBvcHMgPSB7CiAJCS5kZXZfZnJlZSA9IHNuZF9qYWNrX2Rldl9mcmVlLAogCQkuZGV2X3JlZ2lzdGVyID0gc25kX2phY2tfZGV2X3JlZ2lzdGVyLApAQCAtMTAwLDE4ICsxMDksMTAgQEAKIAogCWphY2stPnR5cGUgPSB0eXBlOwogCi0JaWYgKHR5cGUgJiBTTkRfSkFDS19IRUFEUEhPTkUpCi0JCWlucHV0X3NldF9jYXBhYmlsaXR5KGphY2stPmlucHV0X2RldiwgRVZfU1csCi0JCQkJICAgICBTV19IRUFEUEhPTkVfSU5TRVJUKTsKLQlpZiAodHlwZSAmIFNORF9KQUNLX0xJTkVPVVQpCi0JCWlucHV0X3NldF9jYXBhYmlsaXR5KGphY2stPmlucHV0X2RldiwgRVZfU1csCi0JCQkJICAgICBTV19MSU5FT1VUX0lOU0VSVCk7Ci0JaWYgKHR5cGUgJiBTTkRfSkFDS19NSUNST1BIT05FKQotCQlpbnB1dF9zZXRfY2FwYWJpbGl0eShqYWNrLT5pbnB1dF9kZXYsIEVWX1NXLAotCQkJCSAgICAgU1dfTUlDUk9QSE9ORV9JTlNFUlQpOwotCWlmICh0eXBlICYgU05EX0pBQ0tfTUVDSEFOSUNBTCkKLQkJaW5wdXRfc2V0X2NhcGFiaWxpdHkoamFjay0+aW5wdXRfZGV2LCBFVl9TVywKLQkJCQkgICAgIFNXX0pBQ0tfUEhZU0lDQUxfSU5TRVJUKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShqYWNrX3R5cGVzKTsgaSsrKQorCQlpZiAodHlwZSAmICgxIDw8IGkpKQorCQkJaW5wdXRfc2V0X2NhcGFiaWxpdHkoamFjay0+aW5wdXRfZGV2LCBFVl9TVywKKwkJCQkJICAgICBqYWNrX3R5cGVzW2ldKTsKIAogCWVyciA9IHNuZF9kZXZpY2VfbmV3KGNhcmQsIFNORFJWX0RFVl9KQUNLLCBqYWNrLCAmb3BzKTsKIAlpZiAoZXJyIDwgMCkKQEAgLTE1NCwyMSArMTU1LDE3IEBACiAgKi8KIHZvaWQgc25kX2phY2tfcmVwb3J0KHN0cnVjdCBzbmRfamFjayAqamFjaywgaW50IHN0YXR1cykKIHsKKwlpbnQgaTsKKwogCWlmICghamFjaykKIAkJcmV0dXJuOwogCi0JaWYgKGphY2stPnR5cGUgJiBTTkRfSkFDS19IRUFEUEhPTkUpCi0JCWlucHV0X3JlcG9ydF9zd2l0Y2goamFjay0+aW5wdXRfZGV2LCBTV19IRUFEUEhPTkVfSU5TRVJULAotCQkJCSAgICBzdGF0dXMgJiBTTkRfSkFDS19IRUFEUEhPTkUpOwotCWlmIChqYWNrLT50eXBlICYgU05EX0pBQ0tfTElORU9VVCkKLQkJaW5wdXRfcmVwb3J0X3N3aXRjaChqYWNrLT5pbnB1dF9kZXYsIFNXX0xJTkVPVVRfSU5TRVJULAotCQkJCSAgICBzdGF0dXMgJiBTTkRfSkFDS19MSU5FT1VUKTsKLQlpZiAoamFjay0+dHlwZSAmIFNORF9KQUNLX01JQ1JPUEhPTkUpCi0JCWlucHV0X3JlcG9ydF9zd2l0Y2goamFjay0+aW5wdXRfZGV2LCBTV19NSUNST1BIT05FX0lOU0VSVCwKLQkJCQkgICAgc3RhdHVzICYgU05EX0pBQ0tfTUlDUk9QSE9ORSk7Ci0JaWYgKGphY2stPnR5cGUgJiBTTkRfSkFDS19NRUNIQU5JQ0FMKQotCQlpbnB1dF9yZXBvcnRfc3dpdGNoKGphY2stPmlucHV0X2RldiwgU1dfSkFDS19QSFlTSUNBTF9JTlNFUlQsCi0JCQkJICAgIHN0YXR1cyAmIFNORF9KQUNLX01FQ0hBTklDQUwpOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGphY2tfdHlwZXMpOyBpKyspIHsKKwkJaW50IHRlc3RiaXQgPSAxIDw8IGk7CisJCWlmIChqYWNrLT50eXBlICYgdGVzdGJpdCkKKwkJCWlucHV0X3JlcG9ydF9zd2l0Y2goamFjay0+aW5wdXRfZGV2LCBqYWNrX3R5cGVzW2ldLAorCQkJCQkgICAgc3RhdHVzICYgdGVzdGJpdCk7CisJfQogCiAJaW5wdXRfc3luYyhqYWNrLT5pbnB1dF9kZXYpOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9taXNjLmMgYi9zb3VuZC9jb3JlL21pc2MuYwppbmRleCAzODUyNGY2Li5hOTcxMGUwIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL21pc2MuYworKysgYi9zb3VuZC9jb3JlL21pc2MuYwpAQCAtOTUsMTIgKzk1LDE0IEBACiB7CiAJY29uc3Qgc3RydWN0IHNuZF9wY2lfcXVpcmsgKnE7CiAKLQlmb3IgKHEgPSBsaXN0OyBxLT5zdWJ2ZW5kb3I7IHErKykKLQkJaWYgKHEtPnN1YnZlbmRvciA9PSBwY2ktPnN1YnN5c3RlbV92ZW5kb3IgJiYKLQkJICAgICghcS0+c3ViZGV2aWNlIHx8IHEtPnN1YmRldmljZSA9PSBwY2ktPnN1YnN5c3RlbV9kZXZpY2UpKQorCWZvciAocSA9IGxpc3Q7IHEtPnN1YnZlbmRvcjsgcSsrKSB7CisJCWlmIChxLT5zdWJ2ZW5kb3IgIT0gcGNpLT5zdWJzeXN0ZW1fdmVuZG9yKQorCQkJY29udGludWU7CisJCWlmICghcS0+c3ViZGV2aWNlIHx8CisJCSAgICAocGNpLT5zdWJzeXN0ZW1fZGV2aWNlICYgcS0+c3ViZGV2aWNlX21hc2spID09IHEtPnN1YmRldmljZSkKIAkJCXJldHVybiBxOworCX0KIAlyZXR1cm4gTlVMTDsKIH0KLQogRVhQT1JUX1NZTUJPTChzbmRfcGNpX3F1aXJrX2xvb2t1cCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvb3NzL3BjbV9vc3MuYyBiL3NvdW5kL2NvcmUvb3NzL3BjbV9vc3MuYwppbmRleCA2OTlkMjg5Li5kZGEwMDBiIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL29zcy9wY21fb3NzLmMKKysrIGIvc291bmQvY29yZS9vc3MvcGNtX29zcy5jCkBAIC0xMTYwLDkgKzExNjAsMTEgQEAKIAkJICAgIHJ1bnRpbWUtPnN0YXR1cy0+c3RhdGUgPT0gU05EUlZfUENNX1NUQVRFX1NVU1BFTkRFRCkgewogI2lmZGVmIE9TU19ERUJVRwogCQkJaWYgKHJ1bnRpbWUtPnN0YXR1cy0+c3RhdGUgPT0gU05EUlZfUENNX1NUQVRFX1hSVU4pCi0JCQkJcHJpbnRrKCJwY21fb3NzOiB3cml0ZTogcmVjb3ZlcmluZyBmcm9tIFhSVU5cbiIpOworCQkJCXByaW50ayhLRVJOX0RFQlVHICJwY21fb3NzOiB3cml0ZTogIgorCQkJCSAgICAgICAicmVjb3ZlcmluZyBmcm9tIFhSVU5cbiIpOwogCQkJZWxzZQotCQkJCXByaW50aygicGNtX29zczogd3JpdGU6IHJlY292ZXJpbmcgZnJvbSBTVVNQRU5EXG4iKTsKKwkJCQlwcmludGsoS0VSTl9ERUJVRyAicGNtX29zczogd3JpdGU6ICIKKwkJCQkgICAgICAgInJlY292ZXJpbmcgZnJvbSBTVVNQRU5EXG4iKTsKICNlbmRpZgogCQkJcmV0ID0gc25kX3BjbV9vc3NfcHJlcGFyZShzdWJzdHJlYW0pOwogCQkJaWYgKHJldCA8IDApCkBAIC0xMTk2LDkgKzExOTgsMTEgQEAKIAkJICAgIHJ1bnRpbWUtPnN0YXR1cy0+c3RhdGUgPT0gU05EUlZfUENNX1NUQVRFX1NVU1BFTkRFRCkgewogI2lmZGVmIE9TU19ERUJVRwogCQkJaWYgKHJ1bnRpbWUtPnN0YXR1cy0+c3RhdGUgPT0gU05EUlZfUENNX1NUQVRFX1hSVU4pCi0JCQkJcHJpbnRrKCJwY21fb3NzOiByZWFkOiByZWNvdmVyaW5nIGZyb20gWFJVTlxuIik7CisJCQkJcHJpbnRrKEtFUk5fREVCVUcgInBjbV9vc3M6IHJlYWQ6ICIKKwkJCQkgICAgICAgInJlY292ZXJpbmcgZnJvbSBYUlVOXG4iKTsKIAkJCWVsc2UKLQkJCQlwcmludGsoInBjbV9vc3M6IHJlYWQ6IHJlY292ZXJpbmcgZnJvbSBTVVNQRU5EXG4iKTsKKwkJCQlwcmludGsoS0VSTl9ERUJVRyAicGNtX29zczogcmVhZDogIgorCQkJCSAgICAgICAicmVjb3ZlcmluZyBmcm9tIFNVU1BFTkRcbiIpOwogI2VuZGlmCiAJCQlyZXQgPSBzbmRfcGNtX2tlcm5lbF9pb2N0bChzdWJzdHJlYW0sIFNORFJWX1BDTV9JT0NUTF9EUkFJTiwgTlVMTCk7CiAJCQlpZiAocmV0IDwgMCkKQEAgLTEyNDIsOSArMTI0NiwxMSBAQAogCQkgICAgcnVudGltZS0+c3RhdHVzLT5zdGF0ZSA9PSBTTkRSVl9QQ01fU1RBVEVfU1VTUEVOREVEKSB7CiAjaWZkZWYgT1NTX0RFQlVHCiAJCQlpZiAocnVudGltZS0+c3RhdHVzLT5zdGF0ZSA9PSBTTkRSVl9QQ01fU1RBVEVfWFJVTikKLQkJCQlwcmludGsoInBjbV9vc3M6IHdyaXRldjogcmVjb3ZlcmluZyBmcm9tIFhSVU5cbiIpOworCQkJCXByaW50ayhLRVJOX0RFQlVHICJwY21fb3NzOiB3cml0ZXY6ICIKKwkJCQkgICAgICAgInJlY292ZXJpbmcgZnJvbSBYUlVOXG4iKTsKIAkJCWVsc2UKLQkJCQlwcmludGsoInBjbV9vc3M6IHdyaXRldjogcmVjb3ZlcmluZyBmcm9tIFNVU1BFTkRcbiIpOworCQkJCXByaW50ayhLRVJOX0RFQlVHICJwY21fb3NzOiB3cml0ZXY6ICIKKwkJCQkgICAgICAgInJlY292ZXJpbmcgZnJvbSBTVVNQRU5EXG4iKTsKICNlbmRpZgogCQkJcmV0ID0gc25kX3BjbV9vc3NfcHJlcGFyZShzdWJzdHJlYW0pOwogCQkJaWYgKHJldCA8IDApCkBAIC0xMjc4LDkgKzEyODQsMTEgQEAKIAkJICAgIHJ1bnRpbWUtPnN0YXR1cy0+c3RhdGUgPT0gU05EUlZfUENNX1NUQVRFX1NVU1BFTkRFRCkgewogI2lmZGVmIE9TU19ERUJVRwogCQkJaWYgKHJ1bnRpbWUtPnN0YXR1cy0+c3RhdGUgPT0gU05EUlZfUENNX1NUQVRFX1hSVU4pCi0JCQkJcHJpbnRrKCJwY21fb3NzOiByZWFkdjogcmVjb3ZlcmluZyBmcm9tIFhSVU5cbiIpOworCQkJCXByaW50ayhLRVJOX0RFQlVHICJwY21fb3NzOiByZWFkdjogIgorCQkJCSAgICAgICAicmVjb3ZlcmluZyBmcm9tIFhSVU5cbiIpOwogCQkJZWxzZQotCQkJCXByaW50aygicGNtX29zczogcmVhZHY6IHJlY292ZXJpbmcgZnJvbSBTVVNQRU5EXG4iKTsKKwkJCQlwcmludGsoS0VSTl9ERUJVRyAicGNtX29zczogcmVhZHY6ICIKKwkJCQkgICAgICAgInJlY292ZXJpbmcgZnJvbSBTVVNQRU5EXG4iKTsKICNlbmRpZgogCQkJcmV0ID0gc25kX3BjbV9rZXJuZWxfaW9jdGwoc3Vic3RyZWFtLCBTTkRSVl9QQ01fSU9DVExfRFJBSU4sIE5VTEwpOwogCQkJaWYgKHJldCA8IDApCkBAIC0xNTMzLDcgKzE1NDEsNyBAQAogCWluaXRfd2FpdHF1ZXVlX2VudHJ5KCZ3YWl0LCBjdXJyZW50KTsKIAlhZGRfd2FpdF9xdWV1ZSgmcnVudGltZS0+c2xlZXAsICZ3YWl0KTsKICNpZmRlZiBPU1NfREVCVUcKLQlwcmludGsoInN5bmMxOiBzaXplID0gJWxpXG4iLCBzaXplKTsKKwlwcmludGsoS0VSTl9ERUJVRyAic3luYzE6IHNpemUgPSAlbGlcbiIsIHNpemUpOwogI2VuZGlmCiAJd2hpbGUgKDEpIHsKIAkJcmVzdWx0ID0gc25kX3BjbV9vc3Nfd3JpdGUyKHN1YnN0cmVhbSwgcnVudGltZS0+b3NzLmJ1ZmZlciwgc2l6ZSwgMSk7CkBAIC0xNTkwLDcgKzE1OTgsNyBAQAogCQltdXRleF9sb2NrKCZydW50aW1lLT5vc3MucGFyYW1zX2xvY2spOwogCQlpZiAocnVudGltZS0+b3NzLmJ1ZmZlcl91c2VkID4gMCkgewogI2lmZGVmIE9TU19ERUJVRwotCQkJcHJpbnRrKCJzeW5jOiBidWZmZXJfdXNlZFxuIik7CisJCQlwcmludGsoS0VSTl9ERUJVRyAic3luYzogYnVmZmVyX3VzZWRcbiIpOwogI2VuZGlmCiAJCQlzaXplID0gKDggKiAocnVudGltZS0+b3NzLnBlcmlvZF9ieXRlcyAtIHJ1bnRpbWUtPm9zcy5idWZmZXJfdXNlZCkgKyA3KSAvIHdpZHRoOwogCQkJc25kX3BjbV9mb3JtYXRfc2V0X3NpbGVuY2UoZm9ybWF0LApAQCAtMTYwMyw3ICsxNjExLDcgQEAKIAkJCX0KIAkJfSBlbHNlIGlmIChydW50aW1lLT5vc3MucGVyaW9kX3B0ciA+IDApIHsKICNpZmRlZiBPU1NfREVCVUcKLQkJCXByaW50aygic3luYzogcGVyaW9kX3B0clxuIik7CisJCQlwcmludGsoS0VSTl9ERUJVRyAic3luYzogcGVyaW9kX3B0clxuIik7CiAjZW5kaWYKIAkJCXNpemUgPSBydW50aW1lLT5vc3MucGVyaW9kX2J5dGVzIC0gcnVudGltZS0+b3NzLnBlcmlvZF9wdHI7CiAJCQlzbmRfcGNtX2Zvcm1hdF9zZXRfc2lsZW5jZShmb3JtYXQsCkBAIC0xODk1LDcgKzE5MDMsOSBAQAogCiBzdGF0aWMgaW50IHNuZF9wY21fb3NzX25vbmJsb2NrKHN0cnVjdCBmaWxlICogZmlsZSkKIHsKKwlzcGluX2xvY2soJmZpbGUtPmZfbG9jayk7CiAJZmlsZS0+Zl9mbGFncyB8PSBPX05PTkJMT0NLOworCXNwaW5fdW5sb2NrKCZmaWxlLT5mX2xvY2spOwogCXJldHVybiAwOwogfQogCkBAIC0xOTUyLDcgKzE5NjIsNyBAQAogCWludCBlcnIsIGNtZDsKIAogI2lmZGVmIE9TU19ERUJVRwotCXByaW50aygicGNtX29zczogdHJpZ2dlciA9IDB4JXhcbiIsIHRyaWdnZXIpOworCXByaW50ayhLRVJOX0RFQlVHICJwY21fb3NzOiB0cmlnZ2VyID0gMHgleFxuIiwgdHJpZ2dlcik7CiAjZW5kaWYKIAkKIAlwc3Vic3RyZWFtID0gcGNtX29zc19maWxlLT5zdHJlYW1zW1NORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0tdOwpAQCAtMjE3MCw3ICsyMTgwLDkgQEAKIAl9CiAKICNpZmRlZiBPU1NfREVCVUcKLQlwcmludGsoInBjbV9vc3M6IHNwYWNlOiBieXRlcyA9ICVpLCBmcmFnbWVudHMgPSAlaSwgZnJhZ3N0b3RhbCA9ICVpLCBmcmFnc2l6ZSA9ICVpXG4iLCBpbmZvLmJ5dGVzLCBpbmZvLmZyYWdtZW50cywgaW5mby5mcmFnc3RvdGFsLCBpbmZvLmZyYWdzaXplKTsKKwlwcmludGsoS0VSTl9ERUJVRyAicGNtX29zczogc3BhY2U6IGJ5dGVzID0gJWksIGZyYWdtZW50cyA9ICVpLCAiCisJICAgICAgICJmcmFnc3RvdGFsID0gJWksIGZyYWdzaXplID0gJWlcbiIsCisJICAgICAgIGluZm8uYnl0ZXMsIGluZm8uZnJhZ21lbnRzLCBpbmZvLmZyYWdzdG90YWwsIGluZm8uZnJhZ3NpemUpOwogI2VuZGlmCiAJaWYgKGNvcHlfdG9fdXNlcihfaW5mbywgJmluZm8sIHNpemVvZihpbmZvKSkpCiAJCXJldHVybiAtRUZBVUxUOwpAQCAtMjQ3Myw3ICsyNDg1LDcgQEAKIAlpZiAoKChjbWQgPj4gOCkgJiAweGZmKSAhPSAnUCcpCiAJCXJldHVybiAtRUlOVkFMOwogI2lmZGVmIE9TU19ERUJVRwotCXByaW50aygicGNtX29zczogaW9jdGwgPSAweCV4XG4iLCBjbWQpOworCXByaW50ayhLRVJOX0RFQlVHICJwY21fb3NzOiBpb2N0bCA9IDB4JXhcbiIsIGNtZCk7CiAjZW5kaWYKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgU05EQ1RMX0RTUF9SRVNFVDoKQEAgLTI2MjcsNyArMjYzOSw4IEBACiAjZWxzZQogCXsKIAkJc3NpemVfdCByZXMgPSBzbmRfcGNtX29zc19yZWFkMShzdWJzdHJlYW0sIGJ1ZiwgY291bnQpOwotCQlwcmludGsoInBjbV9vc3M6IHJlYWQgJWxpIGJ5dGVzIChyZXR1cm5lZCAlbGkgYnl0ZXMpXG4iLCAobG9uZyljb3VudCwgKGxvbmcpcmVzKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgInBjbV9vc3M6IHJlYWQgJWxpIGJ5dGVzICIKKwkJICAgICAgICIocmV0dXJuZWQgJWxpIGJ5dGVzKVxuIiwgKGxvbmcpY291bnQsIChsb25nKXJlcyk7CiAJCXJldHVybiByZXM7CiAJfQogI2VuZGlmCkBAIC0yNjQ2LDcgKzI2NTksOCBAQAogCXN1YnN0cmVhbS0+Zl9mbGFncyA9IGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLOwogCXJlc3VsdCA9IHNuZF9wY21fb3NzX3dyaXRlMShzdWJzdHJlYW0sIGJ1ZiwgY291bnQpOwogI2lmZGVmIE9TU19ERUJVRwotCXByaW50aygicGNtX29zczogd3JpdGUgJWxpIGJ5dGVzICh3cm90ZSAlbGkgYnl0ZXMpXG4iLCAobG9uZyljb3VudCwgKGxvbmcpcmVzdWx0KTsKKwlwcmludGsoS0VSTl9ERUJVRyAicGNtX29zczogd3JpdGUgJWxpIGJ5dGVzICh3cm90ZSAlbGkgYnl0ZXMpXG4iLAorCSAgICAgICAobG9uZyljb3VudCwgKGxvbmcpcmVzdWx0KTsKICNlbmRpZgogCXJldHVybiByZXN1bHQ7CiB9CkBAIC0yNzIwLDcgKzI3MzQsNyBAQAogCWludCBlcnI7CiAKICNpZmRlZiBPU1NfREVCVUcKLQlwcmludGsoInBjbV9vc3M6IG1tYXAgYmVnaW5cbiIpOworCXByaW50ayhLRVJOX0RFQlVHICJwY21fb3NzOiBtbWFwIGJlZ2luXG4iKTsKICNlbmRpZgogCXBjbV9vc3NfZmlsZSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzd2l0Y2ggKChhcmVhLT52bV9mbGFncyAmIChWTV9SRUFEIHwgVk1fV1JJVEUpKSkgewpAQCAtMjc3MCw3ICsyNzg0LDggQEAKIAlydW50aW1lLT5zaWxlbmNlX3RocmVzaG9sZCA9IDA7CiAJcnVudGltZS0+c2lsZW5jZV9zaXplID0gMDsKICNpZmRlZiBPU1NfREVCVUcKLQlwcmludGsoInBjbV9vc3M6IG1tYXAgb2ssIGJ5dGVzID0gMHgleFxuIiwgcnVudGltZS0+b3NzLm1tYXBfYnl0ZXMpOworCXByaW50ayhLRVJOX0RFQlVHICJwY21fb3NzOiBtbWFwIG9rLCBieXRlcyA9IDB4JXhcbiIsCisJICAgICAgIHJ1bnRpbWUtPm9zcy5tbWFwX2J5dGVzKTsKICNlbmRpZgogCS8qIEluIG1tYXAgbW9kZSB3ZSBuZXZlciBzdG9wICovCiAJcnVudGltZS0+c3RvcF90aHJlc2hvbGQgPSBydW50aW1lLT5ib3VuZGFyeTsKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvb3NzL3BjbV9wbHVnaW4uaCBiL3NvdW5kL2NvcmUvb3NzL3BjbV9wbHVnaW4uaAppbmRleCBjYTJmNGMzLi5iOWFmYWI2IDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL29zcy9wY21fcGx1Z2luLmgKKysrIGIvc291bmQvY29yZS9vc3MvcGNtX3BsdWdpbi5oCkBAIC0xNzYsOSArMTc2LDkgQEAKICNlbmRpZgogCiAjaWZkZWYgUExVR0lOX0RFQlVHCi0jZGVmaW5lIHBkcHJpbnRmKCBmbXQsIGFyZ3MuLi4gKSBwcmludGsoICJwbHVnaW46ICIgZm10LCAjI2FyZ3MpCisjZGVmaW5lIHBkcHJpbnRmKGZtdCwgYXJncy4uLikgcHJpbnRrKEtFUk5fREVCVUcgInBsdWdpbjogIiBmbXQsICMjYXJncykKICNlbHNlCi0jZGVmaW5lIHBkcHJpbnRmKCBmbXQsIGFyZ3MuLi4gKSAKKyNkZWZpbmUgcGRwcmludGYoZm10LCBhcmdzLi4uKQogI2VuZGlmCiAKICNlbmRpZgkJCQkvKiBfX1BDTV9QTFVHSU5fSCAqLwpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9wY20uYyBiL3NvdW5kL2NvcmUvcGNtLmMKaW5kZXggMTkyYTQzMy4uMTQ1OTMxYSAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9wY20uYworKysgYi9zb3VuZC9jb3JlL3BjbS5jCkBAIC02NjcsNyArNjY3LDYgQEAKIAkJc3Bpbl9sb2NrX2luaXQoJnN1YnN0cmVhbS0+c2VsZl9ncm91cC5sb2NrKTsKIAkJSU5JVF9MSVNUX0hFQUQoJnN1YnN0cmVhbS0+c2VsZl9ncm91cC5zdWJzdHJlYW1zKTsKIAkJbGlzdF9hZGRfdGFpbCgmc3Vic3RyZWFtLT5saW5rX2xpc3QsICZzdWJzdHJlYW0tPnNlbGZfZ3JvdXAuc3Vic3RyZWFtcyk7Ci0JCXNwaW5fbG9ja19pbml0KCZzdWJzdHJlYW0tPnRpbWVyX2xvY2spOwogCQlhdG9taWNfc2V0KCZzdWJzdHJlYW0tPm1tYXBfY291bnQsIDApOwogCQlwcmV2ID0gc3Vic3RyZWFtOwogCX0KQEAgLTY5Miw3ICs2OTEsNyBAQAogICoKICAqIFJldHVybnMgemVybyBpZiBzdWNjZXNzZnVsLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KICAqLwotaW50IHNuZF9wY21fbmV3KHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgY2hhciAqaWQsIGludCBkZXZpY2UsCitpbnQgc25kX3BjbV9uZXcoc3RydWN0IHNuZF9jYXJkICpjYXJkLCBjb25zdCBjaGFyICppZCwgaW50IGRldmljZSwKIAkJaW50IHBsYXliYWNrX2NvdW50LCBpbnQgY2FwdHVyZV9jb3VudCwKIAkgICAgICAgIHN0cnVjdCBzbmRfcGNtICoqIHJwY20pCiB7CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3BjbV9saWIuYyBiL3NvdW5kL2NvcmUvcGNtX2xpYi5jCmluZGV4IDkyMTY5MTAuLmZiYjJlMzkgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvcGNtX2xpYi5jCisrKyBiL3NvdW5kL2NvcmUvcGNtX2xpYi5jCkBAIC0xMjUsMjMgKzEyNSwzMiBAQAogCX0KIH0KIAorI2lmZGVmIENPTkZJR19TTkRfUENNX1hSVU5fREVCVUcKKyNkZWZpbmUgeHJ1bl9kZWJ1ZyhzdWJzdHJlYW0pCSgoc3Vic3RyZWFtKS0+cHN0ci0+eHJ1bl9kZWJ1ZykKKyNlbHNlCisjZGVmaW5lIHhydW5fZGVidWcoc3Vic3RyZWFtKQkwCisjZW5kaWYKKworI2RlZmluZSBkdW1wX3N0YWNrX29uX3hydW4oc3Vic3RyZWFtKSBkbyB7CVwKKwkJaWYgKHhydW5fZGVidWcoc3Vic3RyZWFtKSA+IDEpCVwKKwkJCWR1bXBfc3RhY2soKTsJCVwKKwl9IHdoaWxlICgwKQorCiBzdGF0aWMgdm9pZCB4cnVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogewogCXNuZF9wY21fc3RvcChzdWJzdHJlYW0sIFNORFJWX1BDTV9TVEFURV9YUlVOKTsKLSNpZmRlZiBDT05GSUdfU05EX1BDTV9YUlVOX0RFQlVHCi0JaWYgKHN1YnN0cmVhbS0+cHN0ci0+eHJ1bl9kZWJ1ZykgeworCWlmICh4cnVuX2RlYnVnKHN1YnN0cmVhbSkpIHsKIAkJc25kX3ByaW50ZChLRVJOX0RFQlVHICJYUlVOOiBwY21DJWREJWQlY1xuIiwKIAkJCSAgIHN1YnN0cmVhbS0+cGNtLT5jYXJkLT5udW1iZXIsCiAJCQkgICBzdWJzdHJlYW0tPnBjbS0+ZGV2aWNlLAogCQkJICAgc3Vic3RyZWFtLT5zdHJlYW0gPyAnYycgOiAncCcpOwotCQlpZiAoc3Vic3RyZWFtLT5wc3RyLT54cnVuX2RlYnVnID4gMSkKLQkJCWR1bXBfc3RhY2soKTsKKwkJZHVtcF9zdGFja19vbl94cnVuKHN1YnN0cmVhbSk7CiAJfQotI2VuZGlmCiB9CiAKLXN0YXRpYyBpbmxpbmUgc25kX3BjbV91ZnJhbWVzX3Qgc25kX3BjbV91cGRhdGVfaHdfcHRyX3BvcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKLQkJCQkJCQkgIHN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUpCitzdGF0aWMgc25kX3BjbV91ZnJhbWVzX3QKK3NuZF9wY21fdXBkYXRlX2h3X3B0cl9wb3Moc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkgIHN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUpCiB7CiAJc25kX3BjbV91ZnJhbWVzX3QgcG9zOwogCkBAIC0xNTAsMTcgKzE1OSwyMSBAQAogCXBvcyA9IHN1YnN0cmVhbS0+b3BzLT5wb2ludGVyKHN1YnN0cmVhbSk7CiAJaWYgKHBvcyA9PSBTTkRSVl9QQ01fUE9TX1hSVU4pCiAJCXJldHVybiBwb3M7IC8qIFhSVU4gKi8KLSNpZmRlZiBDT05GSUdfU05EX0RFQlVHCiAJaWYgKHBvcyA+PSBydW50aW1lLT5idWZmZXJfc2l6ZSkgewotCQlzbmRfcHJpbnRrKEtFUk5fRVJSICAiQlVHOiBzdHJlYW0gPSAlaSwgcG9zID0gMHglbHgsIGJ1ZmZlciBzaXplID0gMHglbHgsIHBlcmlvZCBzaXplID0gMHglbHhcbiIsIHN1YnN0cmVhbS0+c3RyZWFtLCBwb3MsIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplLCBydW50aW1lLT5wZXJpb2Rfc2l6ZSk7CisJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpIHsKKwkJCXNuZF9wcmludGQoS0VSTl9FUlIgICJCVUc6IHN0cmVhbSA9ICVpLCBwb3MgPSAweCVseCwgIgorCQkJCSAgICJidWZmZXIgc2l6ZSA9IDB4JWx4LCBwZXJpb2Qgc2l6ZSA9IDB4JWx4XG4iLAorCQkJCSAgIHN1YnN0cmVhbS0+c3RyZWFtLCBwb3MsIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplLAorCQkJCSAgIHJ1bnRpbWUtPnBlcmlvZF9zaXplKTsKKwkJfQorCQlwb3MgPSAwOwogCX0KLSNlbmRpZgogCXBvcyAtPSBwb3MgJSBydW50aW1lLT5taW5fYWxpZ247CiAJcmV0dXJuIHBvczsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgc25kX3BjbV91cGRhdGVfaHdfcHRyX3Bvc3Qoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCi0JCQkJCSAgICAgc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSkKK3N0YXRpYyBpbnQgc25kX3BjbV91cGRhdGVfaHdfcHRyX3Bvc3Qoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkJICAgICAgc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSkKIHsKIAlzbmRfcGNtX3VmcmFtZXNfdCBhdmFpbDsKIApAQCAtMTgyLDExICsxOTUsMjEgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgc25kX3BjbV91cGRhdGVfaHdfcHRyX2ludGVycnVwdChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKKyNkZWZpbmUgaHdfcHRyX2Vycm9yKHN1YnN0cmVhbSwgZm10LCBhcmdzLi4uKQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQlpZiAoeHJ1bl9kZWJ1ZyhzdWJzdHJlYW0pKSB7CQkJCVwKKwkJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpIHsJCQlcCisJCQkJc25kX3ByaW50ZCgiUENNOiAiIGZtdCwgIyNhcmdzKTsJXAorCQkJfQkJCQkJCVwKKwkJCWR1bXBfc3RhY2tfb25feHJ1bihzdWJzdHJlYW0pOwkJCVwKKwkJfQkJCQkJCQlcCisJfSB3aGlsZSAoMCkKKworc3RhdGljIGludCBzbmRfcGNtX3VwZGF0ZV9od19wdHJfaW50ZXJydXB0KHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogewogCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CiAJc25kX3BjbV91ZnJhbWVzX3QgcG9zOwotCXNuZF9wY21fdWZyYW1lc190IG5ld19od19wdHIsIGh3X3B0cl9pbnRlcnJ1cHQ7CisJc25kX3BjbV91ZnJhbWVzX3QgbmV3X2h3X3B0ciwgaHdfcHRyX2ludGVycnVwdCwgaHdfYmFzZTsKIAlzbmRfcGNtX3NmcmFtZXNfdCBkZWx0YTsKIAogCXBvcyA9IHNuZF9wY21fdXBkYXRlX2h3X3B0cl9wb3Moc3Vic3RyZWFtLCBydW50aW1lKTsKQEAgLTE5NCwzNiArMjE3LDUzIEBACiAJCXhydW4oc3Vic3RyZWFtKTsKIAkJcmV0dXJuIC1FUElQRTsKIAl9Ci0JaWYgKHJ1bnRpbWUtPnBlcmlvZF9zaXplID09IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplKQotCQlnb3RvIF9fbmV4dF9idWY7Ci0JbmV3X2h3X3B0ciA9IHJ1bnRpbWUtPmh3X3B0cl9iYXNlICsgcG9zOworCWh3X2Jhc2UgPSBydW50aW1lLT5od19wdHJfYmFzZTsKKwluZXdfaHdfcHRyID0gaHdfYmFzZSArIHBvczsKIAlod19wdHJfaW50ZXJydXB0ID0gcnVudGltZS0+aHdfcHRyX2ludGVycnVwdCArIHJ1bnRpbWUtPnBlcmlvZF9zaXplOwotCi0JZGVsdGEgPSBod19wdHJfaW50ZXJydXB0IC0gbmV3X2h3X3B0cjsKLQlpZiAoZGVsdGEgPiAwKSB7Ci0JCWlmICgoc25kX3BjbV91ZnJhbWVzX3QpZGVsdGEgPCBydW50aW1lLT5idWZmZXJfc2l6ZSAvIDIpIHsKLSNpZmRlZiBDT05GSUdfU05EX1BDTV9YUlVOX0RFQlVHCi0JCQlpZiAocnVudGltZS0+cGVyaW9kcyA+IDEgJiYgc3Vic3RyZWFtLT5wc3RyLT54cnVuX2RlYnVnKSB7Ci0JCQkJc25kX3ByaW50ZChLRVJOX0VSUiAiVW5leHBlY3RlZCBod19wb2ludGVyIHZhbHVlIFsxXSAoc3RyZWFtID0gJWksIGRlbHRhOiAtJWxkLCBtYXggaml0dGVyID0gJWxkKTogd3JvbmcgaW50ZXJydXB0IGFja25vd2xlZGdlP1xuIiwgc3Vic3RyZWFtLT5zdHJlYW0sIChsb25nKSBkZWx0YSwgcnVudGltZS0+YnVmZmVyX3NpemUgLyAyKTsKLQkJCQlpZiAoc3Vic3RyZWFtLT5wc3RyLT54cnVuX2RlYnVnID4gMSkKLQkJCQkJZHVtcF9zdGFjaygpOwotCQkJfQotI2VuZGlmCi0JCQlyZXR1cm4gMDsKLQkJfQotCSAgICAgIF9fbmV4dF9idWY6Ci0JCXJ1bnRpbWUtPmh3X3B0cl9iYXNlICs9IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplOwotCQlpZiAocnVudGltZS0+aHdfcHRyX2Jhc2UgPT0gcnVudGltZS0+Ym91bmRhcnkpCi0JCQlydW50aW1lLT5od19wdHJfYmFzZSA9IDA7Ci0JCW5ld19od19wdHIgPSBydW50aW1lLT5od19wdHJfYmFzZSArIHBvczsKKwlkZWx0YSA9IG5ld19od19wdHIgLSBod19wdHJfaW50ZXJydXB0OworCWlmIChod19wdHJfaW50ZXJydXB0ID49IHJ1bnRpbWUtPmJvdW5kYXJ5KSB7CisJCWh3X3B0cl9pbnRlcnJ1cHQgLT0gcnVudGltZS0+Ym91bmRhcnk7CisJCWlmIChod19iYXNlIDwgcnVudGltZS0+Ym91bmRhcnkgLyAyKQorCQkJLyogaHdfYmFzZSB3YXMgYWxyZWFkeSBsYXBwZWQ7IHJlY2FsYyBkZWx0YSAqLworCQkJZGVsdGEgPSBuZXdfaHdfcHRyIC0gaHdfcHRyX2ludGVycnVwdDsKIAl9Ci0KKwlpZiAoZGVsdGEgPCAwKSB7CisJCWRlbHRhICs9IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplOworCQlpZiAoZGVsdGEgPCAwKSB7CisJCQlod19wdHJfZXJyb3Ioc3Vic3RyZWFtLCAKKwkJCQkgICAgICJVbmV4cGVjdGVkIGh3X3BvaW50ZXIgdmFsdWUgIgorCQkJCSAgICAgIihzdHJlYW09JWksIHBvcz0lbGQsIGludHJfcHRyPSVsZClcbiIsCisJCQkJICAgICBzdWJzdHJlYW0tPnN0cmVhbSwgKGxvbmcpcG9zLAorCQkJCSAgICAgKGxvbmcpaHdfcHRyX2ludGVycnVwdCk7CisJCQkvKiByZWJhc2UgdG8gaW50ZXJydXB0IHBvc2l0aW9uICovCisJCQlod19iYXNlID0gbmV3X2h3X3B0ciA9IGh3X3B0cl9pbnRlcnJ1cHQ7CisJCQkvKiBhbGlnbiBod19iYXNlIHRvIGJ1ZmZlcl9zaXplICovCisJCQlod19iYXNlIC09IGh3X2Jhc2UgJSBydW50aW1lLT5idWZmZXJfc2l6ZTsKKwkJCWRlbHRhID0gMDsKKwkJfSBlbHNlIHsKKwkJCWh3X2Jhc2UgKz0gcnVudGltZS0+YnVmZmVyX3NpemU7CisJCQlpZiAoaHdfYmFzZSA+PSBydW50aW1lLT5ib3VuZGFyeSkKKwkJCQlod19iYXNlID0gMDsKKwkJCW5ld19od19wdHIgPSBod19iYXNlICsgcG9zOworCQl9CisJfQorCWlmIChkZWx0YSA+IHJ1bnRpbWUtPnBlcmlvZF9zaXplKSB7CisJCWh3X3B0cl9lcnJvcihzdWJzdHJlYW0sCisJCQkgICAgICJMb3N0IGludGVycnVwdHM/ICIKKwkJCSAgICAgIihzdHJlYW09JWksIGRlbHRhPSVsZCwgaW50cl9wdHI9JWxkKVxuIiwKKwkJCSAgICAgc3Vic3RyZWFtLT5zdHJlYW0sIChsb25nKWRlbHRhLAorCQkJICAgICAobG9uZylod19wdHJfaW50ZXJydXB0KTsKKwkJLyogcmViYXNlIGh3X3B0cl9pbnRlcnJ1cHQgKi8KKwkJaHdfcHRyX2ludGVycnVwdCA9CisJCQluZXdfaHdfcHRyIC0gbmV3X2h3X3B0ciAlIHJ1bnRpbWUtPnBlcmlvZF9zaXplOworCX0KIAlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSyAmJgogCSAgICBydW50aW1lLT5zaWxlbmNlX3NpemUgPiAwKQogCQlzbmRfcGNtX3BsYXliYWNrX3NpbGVuY2Uoc3Vic3RyZWFtLCBuZXdfaHdfcHRyKTsKIAorCXJ1bnRpbWUtPmh3X3B0cl9iYXNlID0gaHdfYmFzZTsKIAlydW50aW1lLT5zdGF0dXMtPmh3X3B0ciA9IG5ld19od19wdHI7Ci0JcnVudGltZS0+aHdfcHRyX2ludGVycnVwdCA9IG5ld19od19wdHIgLSBuZXdfaHdfcHRyICUgcnVudGltZS0+cGVyaW9kX3NpemU7CisJcnVudGltZS0+aHdfcHRyX2ludGVycnVwdCA9IGh3X3B0cl9pbnRlcnJ1cHQ7CiAKIAlyZXR1cm4gc25kX3BjbV91cGRhdGVfaHdfcHRyX3Bvc3Qoc3Vic3RyZWFtLCBydW50aW1lKTsKIH0KQEAgLTIzMyw3ICsyNzMsNyBAQAogewogCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CiAJc25kX3BjbV91ZnJhbWVzX3QgcG9zOwotCXNuZF9wY21fdWZyYW1lc190IG9sZF9od19wdHIsIG5ld19od19wdHI7CisJc25kX3BjbV91ZnJhbWVzX3Qgb2xkX2h3X3B0ciwgbmV3X2h3X3B0ciwgaHdfYmFzZTsKIAlzbmRfcGNtX3NmcmFtZXNfdCBkZWx0YTsKIAogCW9sZF9od19wdHIgPSBydW50aW1lLT5zdGF0dXMtPmh3X3B0cjsKQEAgLTI0MiwyOSArMjgyLDM4IEBACiAJCXhydW4oc3Vic3RyZWFtKTsKIAkJcmV0dXJuIC1FUElQRTsKIAl9Ci0JbmV3X2h3X3B0ciA9IHJ1bnRpbWUtPmh3X3B0cl9iYXNlICsgcG9zOworCWh3X2Jhc2UgPSBydW50aW1lLT5od19wdHJfYmFzZTsKKwluZXdfaHdfcHRyID0gaHdfYmFzZSArIHBvczsKIAotCWRlbHRhID0gb2xkX2h3X3B0ciAtIG5ld19od19wdHI7Ci0JaWYgKGRlbHRhID4gMCkgewotCQlpZiAoKHNuZF9wY21fdWZyYW1lc190KWRlbHRhIDwgcnVudGltZS0+YnVmZmVyX3NpemUgLyAyKSB7Ci0jaWZkZWYgQ09ORklHX1NORF9QQ01fWFJVTl9ERUJVRwotCQkJaWYgKHJ1bnRpbWUtPnBlcmlvZHMgPiAyICYmIHN1YnN0cmVhbS0+cHN0ci0+eHJ1bl9kZWJ1ZykgewotCQkJCXNuZF9wcmludGQoS0VSTl9FUlIgIlVuZXhwZWN0ZWQgaHdfcG9pbnRlciB2YWx1ZSBbMl0gKHN0cmVhbSA9ICVpLCBkZWx0YTogLSVsZCwgbWF4IGppdHRlciA9ICVsZCk6IHdyb25nIGludGVycnVwdCBhY2tub3dsZWRnZT9cbiIsIHN1YnN0cmVhbS0+c3RyZWFtLCAobG9uZykgZGVsdGEsIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplIC8gMik7Ci0JCQkJaWYgKHN1YnN0cmVhbS0+cHN0ci0+eHJ1bl9kZWJ1ZyA+IDEpCi0JCQkJCWR1bXBfc3RhY2soKTsKLQkJCX0KLSNlbmRpZgorCWRlbHRhID0gbmV3X2h3X3B0ciAtIG9sZF9od19wdHI7CisJaWYgKGRlbHRhIDwgMCkgeworCQlkZWx0YSArPSBydW50aW1lLT5idWZmZXJfc2l6ZTsKKwkJaWYgKGRlbHRhIDwgMCkgeworCQkJaHdfcHRyX2Vycm9yKHN1YnN0cmVhbSwgCisJCQkJICAgICAiVW5leHBlY3RlZCBod19wb2ludGVyIHZhbHVlIFsyXSAiCisJCQkJICAgICAiKHN0cmVhbT0laSwgcG9zPSVsZCwgb2xkX3B0cj0lbGQpXG4iLAorCQkJCSAgICAgc3Vic3RyZWFtLT5zdHJlYW0sIChsb25nKXBvcywKKwkJCQkgICAgIChsb25nKW9sZF9od19wdHIpOwogCQkJcmV0dXJuIDA7CiAJCX0KLQkJcnVudGltZS0+aHdfcHRyX2Jhc2UgKz0gcnVudGltZS0+YnVmZmVyX3NpemU7Ci0JCWlmIChydW50aW1lLT5od19wdHJfYmFzZSA9PSBydW50aW1lLT5ib3VuZGFyeSkKLQkJCXJ1bnRpbWUtPmh3X3B0cl9iYXNlID0gMDsKLQkJbmV3X2h3X3B0ciA9IHJ1bnRpbWUtPmh3X3B0cl9iYXNlICsgcG9zOworCQlod19iYXNlICs9IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplOworCQlpZiAoaHdfYmFzZSA+PSBydW50aW1lLT5ib3VuZGFyeSkKKwkJCWh3X2Jhc2UgPSAwOworCQluZXdfaHdfcHRyID0gaHdfYmFzZSArIHBvczsKKwl9CisJaWYgKGRlbHRhID4gcnVudGltZS0+cGVyaW9kX3NpemUgJiYgcnVudGltZS0+cGVyaW9kcyA+IDEpIHsKKwkJaHdfcHRyX2Vycm9yKHN1YnN0cmVhbSwKKwkJCSAgICAgImh3X3B0ciBza2lwcGluZyEgIgorCQkJICAgICAiKHBvcz0lbGQsIGRlbHRhPSVsZCwgcGVyaW9kPSVsZClcbiIsCisJCQkgICAgIChsb25nKXBvcywgKGxvbmcpZGVsdGEsCisJCQkgICAgIChsb25nKXJ1bnRpbWUtPnBlcmlvZF9zaXplKTsKKwkJcmV0dXJuIDA7CiAJfQogCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLICYmCiAJICAgIHJ1bnRpbWUtPnNpbGVuY2Vfc2l6ZSA+IDApCiAJCXNuZF9wY21fcGxheWJhY2tfc2lsZW5jZShzdWJzdHJlYW0sIG5ld19od19wdHIpOwogCisJcnVudGltZS0+aHdfcHRyX2Jhc2UgPSBod19iYXNlOwogCXJ1bnRpbWUtPnN0YXR1cy0+aHdfcHRyID0gbmV3X2h3X3B0cjsKIAogCXJldHVybiBzbmRfcGNtX3VwZGF0ZV9od19wdHJfcG9zdChzdWJzdHJlYW0sIHJ1bnRpbWUpOwpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9wY21fbmF0aXZlLmMgYi9zb3VuZC9jb3JlL3BjbV9uYXRpdmUuYwppbmRleCBhNzg5ZWZjLi5hMTUxZmIwIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3BjbV9uYXRpdmUuYworKysgYi9zb3VuZC9jb3JlL3BjbV9uYXRpdmUuYwpAQCAtMTg2LDcgKzE4Niw3IEBACiAJCWlmICghKHBhcmFtcy0+cm1hc2sgJiAoMSA8PCBrKSkpCiAJCQljb250aW51ZTsKICNpZmRlZiBSVUxFU19ERUJVRwotCQlwcmludGsoIiVzID0gIiwgc25kX3BjbV9od19wYXJhbV9uYW1lc1trXSk7CisJCXByaW50ayhLRVJOX0RFQlVHICIlcyA9ICIsIHNuZF9wY21faHdfcGFyYW1fbmFtZXNba10pOwogCQlwcmludGsoIiUwNHglMDR4JTA0eCUwNHggLT4gIiwgbS0+Yml0c1szXSwgbS0+Yml0c1syXSwgbS0+Yml0c1sxXSwgbS0+Yml0c1swXSk7CiAjZW5kaWYKIAkJY2hhbmdlZCA9IHNuZF9tYXNrX3JlZmluZShtLCBjb25zdHJzX21hc2soY29uc3RycywgaykpOwpAQCAtMjA2LDcgKzIwNiw3IEBACiAJCWlmICghKHBhcmFtcy0+cm1hc2sgJiAoMSA8PCBrKSkpCiAJCQljb250aW51ZTsKICNpZmRlZiBSVUxFU19ERUJVRwotCQlwcmludGsoIiVzID0gIiwgc25kX3BjbV9od19wYXJhbV9uYW1lc1trXSk7CisJCXByaW50ayhLRVJOX0RFQlVHICIlcyA9ICIsIHNuZF9wY21faHdfcGFyYW1fbmFtZXNba10pOwogCQlpZiAoaS0+ZW1wdHkpCiAJCQlwcmludGsoImVtcHR5Iik7CiAJCWVsc2UKQEAgLTI1MSw3ICsyNTEsNyBAQAogCQkJaWYgKCFkb2l0KQogCQkJCWNvbnRpbnVlOwogI2lmZGVmIFJVTEVTX0RFQlVHCi0JCQlwcmludGsoIlJ1bGUgJWQgWyVwXTogIiwgaywgci0+ZnVuYyk7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiUnVsZSAlZCBbJXBdOiAiLCBrLCByLT5mdW5jKTsKIAkJCWlmIChyLT52YXIgPj0gMCkgewogCQkJCXByaW50aygiJXMgPSAiLCBzbmRfcGNtX2h3X3BhcmFtX25hbWVzW3ItPnZhcl0pOwogCQkJCWlmIChod19pc19tYXNrKHItPnZhcikpIHsKQEAgLTMyNDYsOSArMzI0Niw3IEBACiAJZXJyID0gZmFzeW5jX2hlbHBlcihmZCwgZmlsZSwgb24sICZydW50aW1lLT5mYXN5bmMpOwogb3V0OgogCXVubG9ja19rZXJuZWwoKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZXJyOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9wY21fdGltZXIuYyBiL3NvdW5kL2NvcmUvcGNtX3RpbWVyLmMKaW5kZXggMmM4OWMwNC4uY2E4MDY4YiAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9wY21fdGltZXIuYworKysgYi9zb3VuZC9jb3JlL3BjbV90aW1lci5jCkBAIC04NSwyNSArODUsMTkgQEAKIAogc3RhdGljIGludCBzbmRfcGNtX3RpbWVyX3N0YXJ0KHN0cnVjdCBzbmRfdGltZXIgKiB0aW1lcikKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtOwogCQogCXN1YnN0cmVhbSA9IHNuZF90aW1lcl9jaGlwKHRpbWVyKTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmc3Vic3RyZWFtLT50aW1lcl9sb2NrLCBmbGFncyk7CiAJc3Vic3RyZWFtLT50aW1lcl9ydW5uaW5nID0gMTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdWJzdHJlYW0tPnRpbWVyX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBzbmRfcGNtX3RpbWVyX3N0b3Aoc3RydWN0IHNuZF90aW1lciAqIHRpbWVyKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW07CiAJCiAJc3Vic3RyZWFtID0gc25kX3RpbWVyX2NoaXAodGltZXIpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZzdWJzdHJlYW0tPnRpbWVyX2xvY2ssIGZsYWdzKTsKIAlzdWJzdHJlYW0tPnRpbWVyX3J1bm5pbmcgPSAwOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN1YnN0cmVhbS0+dGltZXJfbG9jaywgZmxhZ3MpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3Jhd21pZGkuYyBiL3NvdW5kL2NvcmUvcmF3bWlkaS5jCmluZGV4IDAwMjc3N2IuLjQ3MzI0N2MgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvcmF3bWlkaS5jCisrKyBiL3NvdW5kL2NvcmUvcmF3bWlkaS5jCkBAIC0yMjQsMTU2ICsyMjQsMTQzIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qIGxvb2sgZm9yIGFuIGF2YWlsYWJsZSBzdWJzdHJlYW0gZm9yIHRoZSBnaXZlbiBzdHJlYW0gZGlyZWN0aW9uOworICogaWYgYSBzcGVjaWZpYyBzdWJkZXZpY2UgaXMgZ2l2ZW4sIHRyeSB0byBhc3NpZ24gaXQKKyAqLworc3RhdGljIGludCBhc3NpZ25fc3Vic3RyZWFtKHN0cnVjdCBzbmRfcmF3bWlkaSAqcm1pZGksIGludCBzdWJkZXZpY2UsCisJCQkgICAgaW50IHN0cmVhbSwgaW50IG1vZGUsCisJCQkgICAgc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqKnN1Yl9yZXQpCit7CisJc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqc3Vic3RyZWFtOworCXN0cnVjdCBzbmRfcmF3bWlkaV9zdHIgKnMgPSAmcm1pZGktPnN0cmVhbXNbc3RyZWFtXTsKKwlzdGF0aWMgdW5zaWduZWQgaW50IGluZm9fZmxhZ3NbMl0gPSB7CisJCVtTTkRSVl9SQVdNSURJX1NUUkVBTV9PVVRQVVRdID0gU05EUlZfUkFXTUlESV9JTkZPX09VVFBVVCwKKwkJW1NORFJWX1JBV01JRElfU1RSRUFNX0lOUFVUXSA9IFNORFJWX1JBV01JRElfSU5GT19JTlBVVCwKKwl9OworCisJaWYgKCEocm1pZGktPmluZm9fZmxhZ3MgJiBpbmZvX2ZsYWdzW3N0cmVhbV0pKQorCQlyZXR1cm4gLUVOWElPOworCWlmIChzdWJkZXZpY2UgPj0gMCAmJiBzdWJkZXZpY2UgPj0gcy0+c3Vic3RyZWFtX2NvdW50KQorCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAocy0+c3Vic3RyZWFtX29wZW5lZCA+PSBzLT5zdWJzdHJlYW1fY291bnQpCisJCXJldHVybiAtRUFHQUlOOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShzdWJzdHJlYW0sICZzLT5zdWJzdHJlYW1zLCBsaXN0KSB7CisJCWlmIChzdWJzdHJlYW0tPm9wZW5lZCkgeworCQkJaWYgKHN0cmVhbSA9PSBTTkRSVl9SQVdNSURJX1NUUkVBTV9JTlBVVCB8fAorCQkJICAgICEobW9kZSAmIFNORFJWX1JBV01JRElfTEZMR19BUFBFTkQpKQorCQkJCWNvbnRpbnVlOworCQl9CisJCWlmIChzdWJkZXZpY2UgPCAwIHx8IHN1YmRldmljZSA9PSBzdWJzdHJlYW0tPm51bWJlcikgeworCQkJKnN1Yl9yZXQgPSBzdWJzdHJlYW07CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlyZXR1cm4gLUVBR0FJTjsKK30KKworLyogb3BlbiBhbmQgZG8gcmVmLWNvdW50aW5nIGZvciB0aGUgZ2l2ZW4gc3Vic3RyZWFtICovCitzdGF0aWMgaW50IG9wZW5fc3Vic3RyZWFtKHN0cnVjdCBzbmRfcmF3bWlkaSAqcm1pZGksCisJCQkgIHN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCSAgaW50IG1vZGUpCit7CisJaW50IGVycjsKKworCWVyciA9IHNuZF9yYXdtaWRpX3J1bnRpbWVfY3JlYXRlKHN1YnN0cmVhbSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJZXJyID0gc3Vic3RyZWFtLT5vcHMtPm9wZW4oc3Vic3RyZWFtKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwlzdWJzdHJlYW0tPm9wZW5lZCA9IDE7CisJaWYgKHN1YnN0cmVhbS0+dXNlX2NvdW50KysgPT0gMCkKKwkJc3Vic3RyZWFtLT5hY3RpdmVfc2Vuc2luZyA9IDE7CisJaWYgKG1vZGUgJiBTTkRSVl9SQVdNSURJX0xGTEdfQVBQRU5EKQorCQlzdWJzdHJlYW0tPmFwcGVuZCA9IDE7CisJcm1pZGktPnN0cmVhbXNbc3Vic3RyZWFtLT5zdHJlYW1dLnN1YnN0cmVhbV9vcGVuZWQrKzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY2xvc2Vfc3Vic3RyZWFtKHN0cnVjdCBzbmRfcmF3bWlkaSAqcm1pZGksCisJCQkgICAgc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJICAgIGludCBjbGVhbnVwKTsKKworc3RhdGljIGludCByYXdtaWRpX29wZW5fcHJpdihzdHJ1Y3Qgc25kX3Jhd21pZGkgKnJtaWRpLCBpbnQgc3ViZGV2aWNlLCBpbnQgbW9kZSwKKwkJCSAgICAgc3RydWN0IHNuZF9yYXdtaWRpX2ZpbGUgKnJmaWxlKQoreworCXN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKnNpbnB1dCA9IE5VTEwsICpzb3V0cHV0ID0gTlVMTDsKKwlpbnQgZXJyOworCisJcmZpbGUtPmlucHV0ID0gcmZpbGUtPm91dHB1dCA9IE5VTEw7CisJaWYgKG1vZGUgJiBTTkRSVl9SQVdNSURJX0xGTEdfSU5QVVQpIHsKKwkJZXJyID0gYXNzaWduX3N1YnN0cmVhbShybWlkaSwgc3ViZGV2aWNlLAorCQkJCSAgICAgICBTTkRSVl9SQVdNSURJX1NUUkVBTV9JTlBVVCwKKwkJCQkgICAgICAgbW9kZSwgJnNpbnB1dCk7CisJCWlmIChlcnIgPCAwKQorCQkJZ290byBfX2Vycm9yOworCX0KKwlpZiAobW9kZSAmIFNORFJWX1JBV01JRElfTEZMR19PVVRQVVQpIHsKKwkJZXJyID0gYXNzaWduX3N1YnN0cmVhbShybWlkaSwgc3ViZGV2aWNlLAorCQkJCSAgICAgICBTTkRSVl9SQVdNSURJX1NUUkVBTV9PVVRQVVQsCisJCQkJICAgICAgIG1vZGUsICZzb3V0cHV0KTsKKwkJaWYgKGVyciA8IDApCisJCQlnb3RvIF9fZXJyb3I7CisJfQorCisJaWYgKHNpbnB1dCkgeworCQllcnIgPSBvcGVuX3N1YnN0cmVhbShybWlkaSwgc2lucHV0LCBtb2RlKTsKKwkJaWYgKGVyciA8IDApCisJCQlnb3RvIF9fZXJyb3I7CisJfQorCWlmIChzb3V0cHV0KSB7CisJCWVyciA9IG9wZW5fc3Vic3RyZWFtKHJtaWRpLCBzb3V0cHV0LCBtb2RlKTsKKwkJaWYgKGVyciA8IDApIHsKKwkJCWlmIChzaW5wdXQpCisJCQkJY2xvc2Vfc3Vic3RyZWFtKHJtaWRpLCBzaW5wdXQsIDApOworCQkJZ290byBfX2Vycm9yOworCQl9CisJfQorCisJcmZpbGUtPnJtaWRpID0gcm1pZGk7CisJcmZpbGUtPmlucHV0ID0gc2lucHV0OworCXJmaWxlLT5vdXRwdXQgPSBzb3V0cHV0OworCXJldHVybiAwOworCisgICAgICBfX2Vycm9yOgorCWlmIChzaW5wdXQgJiYgc2lucHV0LT5ydW50aW1lKQorCQlzbmRfcmF3bWlkaV9ydW50aW1lX2ZyZWUoc2lucHV0KTsKKwlpZiAoc291dHB1dCAmJiBzb3V0cHV0LT5ydW50aW1lKQorCQlzbmRfcmF3bWlkaV9ydW50aW1lX2ZyZWUoc291dHB1dCk7CisJcmV0dXJuIGVycjsKK30KKworLyogY2FsbGVkIGZyb20gc291bmQvY29yZS9zZXEvc2VxX21pZGkuYyAqLwogaW50IHNuZF9yYXdtaWRpX2tlcm5lbF9vcGVuKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgaW50IGRldmljZSwgaW50IHN1YmRldmljZSwKIAkJCSAgICBpbnQgbW9kZSwgc3RydWN0IHNuZF9yYXdtaWRpX2ZpbGUgKiByZmlsZSkKIHsKIAlzdHJ1Y3Qgc25kX3Jhd21pZGkgKnJtaWRpOwotCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3QxLCAqbGlzdDI7Ci0Jc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqc2lucHV0ID0gTlVMTCwgKnNvdXRwdXQgPSBOVUxMOwotCXN0cnVjdCBzbmRfcmF3bWlkaV9ydW50aW1lICppbnB1dCA9IE5VTEwsICpvdXRwdXQgPSBOVUxMOwogCWludCBlcnI7CiAKLQlpZiAocmZpbGUpCi0JCXJmaWxlLT5pbnB1dCA9IHJmaWxlLT5vdXRwdXQgPSBOVUxMOworCWlmIChzbmRfQlVHX09OKCFyZmlsZSkpCisJCXJldHVybiAtRUlOVkFMOworCiAJbXV0ZXhfbG9jaygmcmVnaXN0ZXJfbXV0ZXgpOwogCXJtaWRpID0gc25kX3Jhd21pZGlfc2VhcmNoKGNhcmQsIGRldmljZSk7Ci0JbXV0ZXhfdW5sb2NrKCZyZWdpc3Rlcl9tdXRleCk7CiAJaWYgKHJtaWRpID09IE5VTEwpIHsKLQkJZXJyID0gLUVOT0RFVjsKLQkJZ290byBfX2Vycm9yMTsKKwkJbXV0ZXhfdW5sb2NrKCZyZWdpc3Rlcl9tdXRleCk7CisJCXJldHVybiAtRU5PREVWOwogCX0KIAlpZiAoIXRyeV9tb2R1bGVfZ2V0KHJtaWRpLT5jYXJkLT5tb2R1bGUpKSB7Ci0JCWVyciA9IC1FRkFVTFQ7Ci0JCWdvdG8gX19lcnJvcjE7CisJCW11dGV4X3VubG9jaygmcmVnaXN0ZXJfbXV0ZXgpOworCQlyZXR1cm4gLUVOWElPOwogCX0KLQlpZiAoIShtb2RlICYgU05EUlZfUkFXTUlESV9MRkxHX05PT1BFTkxPQ0spKQotCQltdXRleF9sb2NrKCZybWlkaS0+b3Blbl9tdXRleCk7Ci0JaWYgKG1vZGUgJiBTTkRSVl9SQVdNSURJX0xGTEdfSU5QVVQpIHsKLQkJaWYgKCEocm1pZGktPmluZm9fZmxhZ3MgJiBTTkRSVl9SQVdNSURJX0lORk9fSU5QVVQpKSB7Ci0JCQllcnIgPSAtRU5YSU87Ci0JCQlnb3RvIF9fZXJyb3I7Ci0JCX0KLQkJaWYgKHN1YmRldmljZSA+PSAwICYmICh1bnNpZ25lZCBpbnQpc3ViZGV2aWNlID49IHJtaWRpLT5zdHJlYW1zW1NORFJWX1JBV01JRElfU1RSRUFNX0lOUFVUXS5zdWJzdHJlYW1fY291bnQpIHsKLQkJCWVyciA9IC1FTk9ERVY7Ci0JCQlnb3RvIF9fZXJyb3I7Ci0JCX0KLQkJaWYgKHJtaWRpLT5zdHJlYW1zW1NORFJWX1JBV01JRElfU1RSRUFNX0lOUFVUXS5zdWJzdHJlYW1fb3BlbmVkID49Ci0JCSAgICBybWlkaS0+c3RyZWFtc1tTTkRSVl9SQVdNSURJX1NUUkVBTV9JTlBVVF0uc3Vic3RyZWFtX2NvdW50KSB7Ci0JCQllcnIgPSAtRUFHQUlOOwotCQkJZ290byBfX2Vycm9yOwotCQl9Ci0JfQotCWlmIChtb2RlICYgU05EUlZfUkFXTUlESV9MRkxHX09VVFBVVCkgewotCQlpZiAoIShybWlkaS0+aW5mb19mbGFncyAmIFNORFJWX1JBV01JRElfSU5GT19PVVRQVVQpKSB7Ci0JCQllcnIgPSAtRU5YSU87Ci0JCQlnb3RvIF9fZXJyb3I7Ci0JCX0KLQkJaWYgKHN1YmRldmljZSA+PSAwICYmICh1bnNpZ25lZCBpbnQpc3ViZGV2aWNlID49IHJtaWRpLT5zdHJlYW1zW1NORFJWX1JBV01JRElfU1RSRUFNX09VVFBVVF0uc3Vic3RyZWFtX2NvdW50KSB7Ci0JCQllcnIgPSAtRU5PREVWOwotCQkJZ290byBfX2Vycm9yOwotCQl9Ci0JCWlmIChybWlkaS0+c3RyZWFtc1tTTkRSVl9SQVdNSURJX1NUUkVBTV9PVVRQVVRdLnN1YnN0cmVhbV9vcGVuZWQgPj0KLQkJICAgIHJtaWRpLT5zdHJlYW1zW1NORFJWX1JBV01JRElfU1RSRUFNX09VVFBVVF0uc3Vic3RyZWFtX2NvdW50KSB7Ci0JCQllcnIgPSAtRUFHQUlOOwotCQkJZ290byBfX2Vycm9yOwotCQl9Ci0JfQotCWxpc3QxID0gcm1pZGktPnN0cmVhbXNbU05EUlZfUkFXTUlESV9TVFJFQU1fSU5QVVRdLnN1YnN0cmVhbXMubmV4dDsKLQl3aGlsZSAoMSkgewotCQlpZiAobGlzdDEgPT0gJnJtaWRpLT5zdHJlYW1zW1NORFJWX1JBV01JRElfU1RSRUFNX0lOUFVUXS5zdWJzdHJlYW1zKSB7Ci0JCQlzaW5wdXQgPSBOVUxMOwotCQkJaWYgKG1vZGUgJiBTTkRSVl9SQVdNSURJX0xGTEdfSU5QVVQpIHsKLQkJCQllcnIgPSAtRUFHQUlOOwotCQkJCWdvdG8gX19lcnJvcjsKLQkJCX0KLQkJCWJyZWFrOwotCQl9Ci0JCXNpbnB1dCA9IGxpc3RfZW50cnkobGlzdDEsIHN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0sIGxpc3QpOwotCQlpZiAoKG1vZGUgJiBTTkRSVl9SQVdNSURJX0xGTEdfSU5QVVQpICYmIHNpbnB1dC0+b3BlbmVkKQotCQkJZ290byBfX25leHRpOwotCQlpZiAoc3ViZGV2aWNlIDwgMCB8fCAoc3ViZGV2aWNlID49IDAgJiYgc3ViZGV2aWNlID09IHNpbnB1dC0+bnVtYmVyKSkKLQkJCWJyZWFrOwotCSAgICAgIF9fbmV4dGk6Ci0JCWxpc3QxID0gbGlzdDEtPm5leHQ7Ci0JfQotCWxpc3QyID0gcm1pZGktPnN0cmVhbXNbU05EUlZfUkFXTUlESV9TVFJFQU1fT1VUUFVUXS5zdWJzdHJlYW1zLm5leHQ7Ci0Jd2hpbGUgKDEpIHsKLQkJaWYgKGxpc3QyID09ICZybWlkaS0+c3RyZWFtc1tTTkRSVl9SQVdNSURJX1NUUkVBTV9PVVRQVVRdLnN1YnN0cmVhbXMpIHsKLQkJCXNvdXRwdXQgPSBOVUxMOwotCQkJaWYgKG1vZGUgJiBTTkRSVl9SQVdNSURJX0xGTEdfT1VUUFVUKSB7Ci0JCQkJZXJyID0gLUVBR0FJTjsKLQkJCQlnb3RvIF9fZXJyb3I7Ci0JCQl9Ci0JCQlicmVhazsKLQkJfQotCQlzb3V0cHV0ID0gbGlzdF9lbnRyeShsaXN0Miwgc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSwgbGlzdCk7Ci0JCWlmIChtb2RlICYgU05EUlZfUkFXTUlESV9MRkxHX09VVFBVVCkgewotCQkJaWYgKG1vZGUgJiBTTkRSVl9SQVdNSURJX0xGTEdfQVBQRU5EKSB7Ci0JCQkJaWYgKHNvdXRwdXQtPm9wZW5lZCAmJiAhc291dHB1dC0+YXBwZW5kKQotCQkJCQlnb3RvIF9fbmV4dG87Ci0JCQl9IGVsc2UgewotCQkJCWlmIChzb3V0cHV0LT5vcGVuZWQpCi0JCQkJCWdvdG8gX19uZXh0bzsKLQkJCX0KLQkJfQotCQlpZiAoc3ViZGV2aWNlIDwgMCB8fCAoc3ViZGV2aWNlID49IDAgJiYgc3ViZGV2aWNlID09IHNvdXRwdXQtPm51bWJlcikpCi0JCQlicmVhazsKLQkgICAgICBfX25leHRvOgotCQlsaXN0MiA9IGxpc3QyLT5uZXh0OwotCX0KLQlpZiAobW9kZSAmIFNORFJWX1JBV01JRElfTEZMR19JTlBVVCkgewotCQlpZiAoKGVyciA9IHNuZF9yYXdtaWRpX3J1bnRpbWVfY3JlYXRlKHNpbnB1dCkpIDwgMCkKLQkJCWdvdG8gX19lcnJvcjsKLQkJaW5wdXQgPSBzaW5wdXQtPnJ1bnRpbWU7Ci0JCWlmICgoZXJyID0gc2lucHV0LT5vcHMtPm9wZW4oc2lucHV0KSkgPCAwKQotCQkJZ290byBfX2Vycm9yOwotCQlzaW5wdXQtPm9wZW5lZCA9IDE7Ci0JCXJtaWRpLT5zdHJlYW1zW1NORFJWX1JBV01JRElfU1RSRUFNX0lOUFVUXS5zdWJzdHJlYW1fb3BlbmVkKys7Ci0JfSBlbHNlIHsKLQkJc2lucHV0ID0gTlVMTDsKLQl9Ci0JaWYgKG1vZGUgJiBTTkRSVl9SQVdNSURJX0xGTEdfT1VUUFVUKSB7Ci0JCWlmIChzb3V0cHV0LT5vcGVuZWQpCi0JCQlnb3RvIF9fc2tpcF9vdXRwdXQ7Ci0JCWlmICgoZXJyID0gc25kX3Jhd21pZGlfcnVudGltZV9jcmVhdGUoc291dHB1dCkpIDwgMCkgewotCQkJaWYgKG1vZGUgJiBTTkRSVl9SQVdNSURJX0xGTEdfSU5QVVQpCi0JCQkJc2lucHV0LT5vcHMtPmNsb3NlKHNpbnB1dCk7Ci0JCQlnb3RvIF9fZXJyb3I7Ci0JCX0KLQkJb3V0cHV0ID0gc291dHB1dC0+cnVudGltZTsKLQkJaWYgKChlcnIgPSBzb3V0cHV0LT5vcHMtPm9wZW4oc291dHB1dCkpIDwgMCkgewotCQkJaWYgKG1vZGUgJiBTTkRSVl9SQVdNSURJX0xGTEdfSU5QVVQpCi0JCQkJc2lucHV0LT5vcHMtPmNsb3NlKHNpbnB1dCk7Ci0JCQlnb3RvIF9fZXJyb3I7Ci0JCX0KLQkgICAgICBfX3NraXBfb3V0cHV0OgotCQlzb3V0cHV0LT5vcGVuZWQgPSAxOwotCQlpZiAobW9kZSAmIFNORFJWX1JBV01JRElfTEZMR19BUFBFTkQpCi0JCQlzb3V0cHV0LT5hcHBlbmQgPSAxOwotCSAgICAgIAlpZiAoc291dHB1dC0+dXNlX2NvdW50KysgPT0gMCkKLQkJCXNvdXRwdXQtPmFjdGl2ZV9zZW5zaW5nID0gMTsKLQkJcm1pZGktPnN0cmVhbXNbU05EUlZfUkFXTUlESV9TVFJFQU1fT1VUUFVUXS5zdWJzdHJlYW1fb3BlbmVkKys7Ci0JfSBlbHNlIHsKLQkJc291dHB1dCA9IE5VTEw7Ci0JfQotCWlmICghKG1vZGUgJiBTTkRSVl9SQVdNSURJX0xGTEdfTk9PUEVOTE9DSykpCi0JCW11dGV4X3VubG9jaygmcm1pZGktPm9wZW5fbXV0ZXgpOwotCWlmIChyZmlsZSkgewotCQlyZmlsZS0+cm1pZGkgPSBybWlkaTsKLQkJcmZpbGUtPmlucHV0ID0gc2lucHV0OwotCQlyZmlsZS0+b3V0cHV0ID0gc291dHB1dDsKLQl9Ci0JcmV0dXJuIDA7CisJbXV0ZXhfdW5sb2NrKCZyZWdpc3Rlcl9tdXRleCk7CiAKLSAgICAgIF9fZXJyb3I6Ci0JaWYgKGlucHV0ICE9IE5VTEwpCi0JCXNuZF9yYXdtaWRpX3J1bnRpbWVfZnJlZShzaW5wdXQpOwotCWlmIChvdXRwdXQgIT0gTlVMTCkKLQkJc25kX3Jhd21pZGlfcnVudGltZV9mcmVlKHNvdXRwdXQpOwotCW1vZHVsZV9wdXQocm1pZGktPmNhcmQtPm1vZHVsZSk7Ci0JaWYgKCEobW9kZSAmIFNORFJWX1JBV01JRElfTEZMR19OT09QRU5MT0NLKSkKLQkJbXV0ZXhfdW5sb2NrKCZybWlkaS0+b3Blbl9tdXRleCk7Ci0gICAgICBfX2Vycm9yMToKKwltdXRleF9sb2NrKCZybWlkaS0+b3Blbl9tdXRleCk7CisJZXJyID0gcmF3bWlkaV9vcGVuX3ByaXYocm1pZGksIHN1YmRldmljZSwgbW9kZSwgcmZpbGUpOworCW11dGV4X3VubG9jaygmcm1pZGktPm9wZW5fbXV0ZXgpOworCWlmIChlcnIgPCAwKQorCQltb2R1bGVfcHV0KHJtaWRpLT5jYXJkLT5tb2R1bGUpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTM4NSwxMCArMzcyLDEzIEBACiAJdW5zaWduZWQgc2hvcnQgZmZsYWdzOwogCWludCBlcnI7CiAJc3RydWN0IHNuZF9yYXdtaWRpICpybWlkaTsKLQlzdHJ1Y3Qgc25kX3Jhd21pZGlfZmlsZSAqcmF3bWlkaV9maWxlOworCXN0cnVjdCBzbmRfcmF3bWlkaV9maWxlICpyYXdtaWRpX2ZpbGUgPSBOVUxMOwogCXdhaXRfcXVldWVfdCB3YWl0OwogCXN0cnVjdCBzbmRfY3RsX2ZpbGUgKmtjdGw7CiAKKwlpZiAoKGZpbGUtPmZfZmxhZ3MgJiBPX0FQUEVORCkgJiYgIShmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykpIAorCQlyZXR1cm4gLUVJTlZBTDsJCS8qIGludmFsaWQgY29tYmluYXRpb24gKi8KKwogCWlmIChtYWogPT0gc25kX21ham9yKSB7CiAJCXJtaWRpID0gc25kX2xvb2t1cF9taW5vcl9kYXRhKGltaW5vcihpbm9kZSksCiAJCQkJCSAgICAgIFNORFJWX0RFVklDRV9UWVBFX1JBV01JREkpOwpAQCAtNDAyLDI0ICszOTIsMjUgQEAKIAogCWlmIChybWlkaSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0RFVjsKLQlpZiAoKGZpbGUtPmZfZmxhZ3MgJiBPX0FQUEVORCkgJiYgIShmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykpIAotCQlyZXR1cm4gLUVJTlZBTDsJCS8qIGludmFsaWQgY29tYmluYXRpb24gKi8KKworCWlmICghdHJ5X21vZHVsZV9nZXQocm1pZGktPmNhcmQtPm1vZHVsZSkpCisJCXJldHVybiAtRU5YSU87CisKKwltdXRleF9sb2NrKCZybWlkaS0+b3Blbl9tdXRleCk7CiAJY2FyZCA9IHJtaWRpLT5jYXJkOwogCWVyciA9IHNuZF9jYXJkX2ZpbGVfYWRkKGNhcmQsIGZpbGUpOwogCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gLUVOT0RFVjsKKwkJZ290byBfX2Vycm9yX2NhcmQ7CiAJZmZsYWdzID0gc25kX3Jhd21pZGlfZmlsZV9mbGFncyhmaWxlKTsKIAlpZiAoKGZpbGUtPmZfZmxhZ3MgJiBPX0FQUEVORCkgfHwgbWFqID09IFNPVU5EX01BSk9SKSAvKiBPU1MgZW11bD8gKi8KIAkJZmZsYWdzIHw9IFNORFJWX1JBV01JRElfTEZMR19BUFBFTkQ7Ci0JZmZsYWdzIHw9IFNORFJWX1JBV01JRElfTEZMR19OT09QRU5MT0NLOwogCXJhd21pZGlfZmlsZSA9IGttYWxsb2Moc2l6ZW9mKCpyYXdtaWRpX2ZpbGUpLCBHRlBfS0VSTkVMKTsKIAlpZiAocmF3bWlkaV9maWxlID09IE5VTEwpIHsKLQkJc25kX2NhcmRfZmlsZV9yZW1vdmUoY2FyZCwgZmlsZSk7Ci0JCXJldHVybiAtRU5PTUVNOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIF9fZXJyb3I7CiAJfQogCWluaXRfd2FpdHF1ZXVlX2VudHJ5KCZ3YWl0LCBjdXJyZW50KTsKIAlhZGRfd2FpdF9xdWV1ZSgmcm1pZGktPm9wZW5fd2FpdCwgJndhaXQpOwotCW11dGV4X2xvY2soJnJtaWRpLT5vcGVuX211dGV4KTsKIAl3aGlsZSAoMSkgewogCQlzdWJkZXZpY2UgPSAtMTsKIAkJcmVhZF9sb2NrKCZjYXJkLT5jdGxfZmlsZXNfcndsb2NrKTsKQEAgLTQzMSw4ICs0MjIsNyBAQAogCQkJfQogCQl9CiAJCXJlYWRfdW5sb2NrKCZjYXJkLT5jdGxfZmlsZXNfcndsb2NrKTsKLQkJZXJyID0gc25kX3Jhd21pZGlfa2VybmVsX29wZW4ocm1pZGktPmNhcmQsIHJtaWRpLT5kZXZpY2UsCi0JCQkJCSAgICAgIHN1YmRldmljZSwgZmZsYWdzLCByYXdtaWRpX2ZpbGUpOworCQllcnIgPSByYXdtaWRpX29wZW5fcHJpdihybWlkaSwgc3ViZGV2aWNlLCBmZmxhZ3MsIHJhd21pZGlfZmlsZSk7CiAJCWlmIChlcnIgPj0gMCkKIAkJCWJyZWFrOwogCQlpZiAoZXJyID09IC1FQUdBSU4pIHsKQEAgLTQ1MSw2NyArNDQxLDg5IEBACiAJCQlicmVhazsKIAkJfQogCX0KKwlyZW1vdmVfd2FpdF9xdWV1ZSgmcm1pZGktPm9wZW5fd2FpdCwgJndhaXQpOworCWlmIChlcnIgPCAwKSB7CisJCWtmcmVlKHJhd21pZGlfZmlsZSk7CisJCWdvdG8gX19lcnJvcjsKKwl9CiAjaWZkZWYgQ09ORklHX1NORF9PU1NFTVVMCiAJaWYgKHJhd21pZGlfZmlsZS0+aW5wdXQgJiYgcmF3bWlkaV9maWxlLT5pbnB1dC0+cnVudGltZSkKIAkJcmF3bWlkaV9maWxlLT5pbnB1dC0+cnVudGltZS0+b3NzID0gKG1haiA9PSBTT1VORF9NQUpPUik7CiAJaWYgKHJhd21pZGlfZmlsZS0+b3V0cHV0ICYmIHJhd21pZGlfZmlsZS0+b3V0cHV0LT5ydW50aW1lKQogCQlyYXdtaWRpX2ZpbGUtPm91dHB1dC0+cnVudGltZS0+b3NzID0gKG1haiA9PSBTT1VORF9NQUpPUik7CiAjZW5kaWYKLQlyZW1vdmVfd2FpdF9xdWV1ZSgmcm1pZGktPm9wZW5fd2FpdCwgJndhaXQpOwotCWlmIChlcnIgPj0gMCkgewotCQlmaWxlLT5wcml2YXRlX2RhdGEgPSByYXdtaWRpX2ZpbGU7Ci0JfSBlbHNlIHsKLQkJc25kX2NhcmRfZmlsZV9yZW1vdmUoY2FyZCwgZmlsZSk7Ci0JCWtmcmVlKHJhd21pZGlfZmlsZSk7Ci0JfQorCWZpbGUtPnByaXZhdGVfZGF0YSA9IHJhd21pZGlfZmlsZTsKIAltdXRleF91bmxvY2soJnJtaWRpLT5vcGVuX211dGV4KTsKKwlyZXR1cm4gMDsKKworIF9fZXJyb3I6CisJc25kX2NhcmRfZmlsZV9yZW1vdmUoY2FyZCwgZmlsZSk7CisgX19lcnJvcl9jYXJkOgorCW11dGV4X3VubG9jaygmcm1pZGktPm9wZW5fbXV0ZXgpOworCW1vZHVsZV9wdXQocm1pZGktPmNhcmQtPm1vZHVsZSk7CiAJcmV0dXJuIGVycjsKIH0KIAotaW50IHNuZF9yYXdtaWRpX2tlcm5lbF9yZWxlYXNlKHN0cnVjdCBzbmRfcmF3bWlkaV9maWxlICogcmZpbGUpCitzdGF0aWMgdm9pZCBjbG9zZV9zdWJzdHJlYW0oc3RydWN0IHNuZF9yYXdtaWRpICpybWlkaSwKKwkJCSAgICBzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkgICAgaW50IGNsZWFudXApCiB7Ci0Jc3RydWN0IHNuZF9yYXdtaWRpICpybWlkaTsKLQlzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICpzdWJzdHJlYW07Ci0Jc3RydWN0IHNuZF9yYXdtaWRpX3J1bnRpbWUgKnJ1bnRpbWU7CisJcm1pZGktPnN0cmVhbXNbc3Vic3RyZWFtLT5zdHJlYW1dLnN1YnN0cmVhbV9vcGVuZWQtLTsKKwlpZiAoLS1zdWJzdHJlYW0tPnVzZV9jb3VudCkKKwkJcmV0dXJuOwogCi0JaWYgKHNuZF9CVUdfT04oIXJmaWxlKSkKLQkJcmV0dXJuIC1FTlhJTzsKLQlybWlkaSA9IHJmaWxlLT5ybWlkaTsKLQltdXRleF9sb2NrKCZybWlkaS0+b3Blbl9tdXRleCk7Ci0JaWYgKHJmaWxlLT5pbnB1dCAhPSBOVUxMKSB7Ci0JCXN1YnN0cmVhbSA9IHJmaWxlLT5pbnB1dDsKLQkJcmZpbGUtPmlucHV0ID0gTlVMTDsKLQkJcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKLQkJc25kX3Jhd21pZGlfaW5wdXRfdHJpZ2dlcihzdWJzdHJlYW0sIDApOwotCQlzdWJzdHJlYW0tPm9wcy0+Y2xvc2Uoc3Vic3RyZWFtKTsKLQkJaWYgKHJ1bnRpbWUtPnByaXZhdGVfZnJlZSAhPSBOVUxMKQotCQkJcnVudGltZS0+cHJpdmF0ZV9mcmVlKHN1YnN0cmVhbSk7Ci0JCXNuZF9yYXdtaWRpX3J1bnRpbWVfZnJlZShzdWJzdHJlYW0pOwotCQlzdWJzdHJlYW0tPm9wZW5lZCA9IDA7Ci0JCXJtaWRpLT5zdHJlYW1zW1NORFJWX1JBV01JRElfU1RSRUFNX0lOUFVUXS5zdWJzdHJlYW1fb3BlbmVkLS07Ci0JfQotCWlmIChyZmlsZS0+b3V0cHV0ICE9IE5VTEwpIHsKLQkJc3Vic3RyZWFtID0gcmZpbGUtPm91dHB1dDsKLQkJcmZpbGUtPm91dHB1dCA9IE5VTEw7Ci0JCWlmICgtLXN1YnN0cmVhbS0+dXNlX2NvdW50ID09IDApIHsKLQkJCXJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJaWYgKGNsZWFudXApIHsKKwkJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1JBV01JRElfU1RSRUFNX0lOUFVUKQorCQkJc25kX3Jhd21pZGlfaW5wdXRfdHJpZ2dlcihzdWJzdHJlYW0sIDApOworCQllbHNlIHsKIAkJCWlmIChzdWJzdHJlYW0tPmFjdGl2ZV9zZW5zaW5nKSB7CiAJCQkJdW5zaWduZWQgY2hhciBidWYgPSAweGZlOwotCQkJCS8qIHNlbmRpbmcgc2luZ2xlIGFjdGl2ZSBzZW5zaW5nIG1lc3NhZ2UgdG8gc2h1dCB0aGUgZGV2aWNlIHVwICovCisJCQkJLyogc2VuZGluZyBzaW5nbGUgYWN0aXZlIHNlbnNpbmcgbWVzc2FnZQorCQkJCSAqIHRvIHNodXQgdGhlIGRldmljZSB1cAorCQkJCSAqLwogCQkJCXNuZF9yYXdtaWRpX2tlcm5lbF93cml0ZShzdWJzdHJlYW0sICZidWYsIDEpOwogCQkJfQogCQkJaWYgKHNuZF9yYXdtaWRpX2RyYWluX291dHB1dChzdWJzdHJlYW0pID09IC1FUkVTVEFSVFNZUykKIAkJCQlzbmRfcmF3bWlkaV9vdXRwdXRfdHJpZ2dlcihzdWJzdHJlYW0sIDApOwotCQkJc3Vic3RyZWFtLT5vcHMtPmNsb3NlKHN1YnN0cmVhbSk7Ci0JCQlpZiAocnVudGltZS0+cHJpdmF0ZV9mcmVlICE9IE5VTEwpCi0JCQkJcnVudGltZS0+cHJpdmF0ZV9mcmVlKHN1YnN0cmVhbSk7Ci0JCQlzbmRfcmF3bWlkaV9ydW50aW1lX2ZyZWUoc3Vic3RyZWFtKTsKLQkJCXN1YnN0cmVhbS0+b3BlbmVkID0gMDsKLQkJCXN1YnN0cmVhbS0+YXBwZW5kID0gMDsKIAkJfQotCQlybWlkaS0+c3RyZWFtc1tTTkRSVl9SQVdNSURJX1NUUkVBTV9PVVRQVVRdLnN1YnN0cmVhbV9vcGVuZWQtLTsKIAl9CisJc3Vic3RyZWFtLT5vcHMtPmNsb3NlKHN1YnN0cmVhbSk7CisJaWYgKHN1YnN0cmVhbS0+cnVudGltZS0+cHJpdmF0ZV9mcmVlKQorCQlzdWJzdHJlYW0tPnJ1bnRpbWUtPnByaXZhdGVfZnJlZShzdWJzdHJlYW0pOworCXNuZF9yYXdtaWRpX3J1bnRpbWVfZnJlZShzdWJzdHJlYW0pOworCXN1YnN0cmVhbS0+b3BlbmVkID0gMDsKKwlzdWJzdHJlYW0tPmFwcGVuZCA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIHJhd21pZGlfcmVsZWFzZV9wcml2KHN0cnVjdCBzbmRfcmF3bWlkaV9maWxlICpyZmlsZSkKK3sKKwlzdHJ1Y3Qgc25kX3Jhd21pZGkgKnJtaWRpOworCisJcm1pZGkgPSByZmlsZS0+cm1pZGk7CisJbXV0ZXhfbG9jaygmcm1pZGktPm9wZW5fbXV0ZXgpOworCWlmIChyZmlsZS0+aW5wdXQpIHsKKwkJY2xvc2Vfc3Vic3RyZWFtKHJtaWRpLCByZmlsZS0+aW5wdXQsIDEpOworCQlyZmlsZS0+aW5wdXQgPSBOVUxMOworCX0KKwlpZiAocmZpbGUtPm91dHB1dCkgeworCQljbG9zZV9zdWJzdHJlYW0ocm1pZGksIHJmaWxlLT5vdXRwdXQsIDEpOworCQlyZmlsZS0+b3V0cHV0ID0gTlVMTDsKKwl9CisJcmZpbGUtPnJtaWRpID0gTlVMTDsKIAltdXRleF91bmxvY2soJnJtaWRpLT5vcGVuX211dGV4KTsKKwl3YWtlX3VwKCZybWlkaS0+b3Blbl93YWl0KTsKK30KKworLyogY2FsbGVkIGZyb20gc291bmQvY29yZS9zZXEvc2VxX21pZGkuYyAqLworaW50IHNuZF9yYXdtaWRpX2tlcm5lbF9yZWxlYXNlKHN0cnVjdCBzbmRfcmF3bWlkaV9maWxlICpyZmlsZSkKK3sKKwlzdHJ1Y3Qgc25kX3Jhd21pZGkgKnJtaWRpOworCisJaWYgKHNuZF9CVUdfT04oIXJmaWxlKSkKKwkJcmV0dXJuIC1FTlhJTzsKKwkKKwlybWlkaSA9IHJmaWxlLT5ybWlkaTsKKwlyYXdtaWRpX3JlbGVhc2VfcHJpdihyZmlsZSk7CiAJbW9kdWxlX3B1dChybWlkaS0+Y2FyZC0+bW9kdWxlKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTUyMCwxNSArNTMyLDE0IEBACiB7CiAJc3RydWN0IHNuZF9yYXdtaWRpX2ZpbGUgKnJmaWxlOwogCXN0cnVjdCBzbmRfcmF3bWlkaSAqcm1pZGk7Ci0JaW50IGVycjsKIAogCXJmaWxlID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCWVyciA9IHNuZF9yYXdtaWRpX2tlcm5lbF9yZWxlYXNlKHJmaWxlKTsKIAlybWlkaSA9IHJmaWxlLT5ybWlkaTsKLQl3YWtlX3VwKCZybWlkaS0+b3Blbl93YWl0KTsKKwlyYXdtaWRpX3JlbGVhc2VfcHJpdihyZmlsZSk7CiAJa2ZyZWUocmZpbGUpOwogCXNuZF9jYXJkX2ZpbGVfcmVtb3ZlKHJtaWRpLT5jYXJkLCBmaWxlKTsKLQlyZXR1cm4gZXJyOworCW1vZHVsZV9wdXQocm1pZGktPmNhcmQtPm1vZHVsZSk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgc25kX3Jhd21pZGlfaW5mbyhzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICpzdWJzdHJlYW0sCmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3NlcS9vc3Mvc2VxX29zc19kZXZpY2UuaCBiL3NvdW5kL2NvcmUvc2VxL29zcy9zZXFfb3NzX2RldmljZS5oCmluZGV4IGJmOGQyYjQuLmMwMTU0YTkgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvc2VxL29zcy9zZXFfb3NzX2RldmljZS5oCisrKyBiL3NvdW5kL2NvcmUvc2VxL29zcy9zZXFfb3NzX2RldmljZS5oCkBAIC0xODEsNyArMTgxLDcgQEAKIC8qIGZvciBkZWJ1ZyAqLwogI2lmZGVmIFNORFJWX1NFUV9PU1NfREVCVUcKIGV4dGVybiBpbnQgc2VxX29zc19kZWJ1ZzsKLSNkZWZpbmUgZGVidWdfcHJpbnRrKHgpCWRvIHsgaWYgKHNlcV9vc3NfZGVidWcgPiAwKSBzbmRfcHJpbnRrIHg7IH0gd2hpbGUgKDApCisjZGVmaW5lIGRlYnVnX3ByaW50ayh4KQlkbyB7IGlmIChzZXFfb3NzX2RlYnVnID4gMCkgc25kX3ByaW50ZCB4OyB9IHdoaWxlICgwKQogI2Vsc2UKICNkZWZpbmUgZGVidWdfcHJpbnRrKHgpCS8qKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9zZXEvc2VxX3ByaW9xLmMgYi9zb3VuZC9jb3JlL3NlcS9zZXFfcHJpb3EuYwppbmRleCAwMTAxYThiLi4yOTg5NmFiIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3NlcS9zZXFfcHJpb3EuYworKysgYi9zb3VuZC9jb3JlL3NlcS9zZXFfcHJpb3EuYwpAQCAtMzIxLDcgKzMyMSw4IEBACiAJCQlmcmVlcHJldiA9IGNlbGw7CiAJCX0gZWxzZSB7CiAjaWYgMAotCQkJcHJpbnRrKCJ0eXBlID0gJWksIHNvdXJjZSA9ICVpLCBkZXN0ID0gJWksIGNsaWVudCA9ICVpXG4iLAorCQkJcHJpbnRrKEtFUk5fREVCVUcgInR5cGUgPSAlaSwgc291cmNlID0gJWksIGRlc3QgPSAlaSwgIgorCQkJICAgICAgICJjbGllbnQgPSAlaVxuIiwKIAkJCQljZWxsLT5ldmVudC50eXBlLAogCQkJCWNlbGwtPmV2ZW50LnNvdXJjZS5jbGllbnQsCiAJCQkJY2VsbC0+ZXZlbnQuZGVzdC5jbGllbnQsCmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3RpbWVyLmMgYi9zb3VuZC9jb3JlL3RpbWVyLmMKaW5kZXggNzk2NTMyMC4uM2YwMDUwZCAxMDA2NDQKLS0tIGEvc291bmQvY29yZS90aW1lci5jCisrKyBiL3NvdW5kL2NvcmUvdGltZXIuYwpAQCAtMTgyNSwxMyArMTgyNSw5IEBACiBzdGF0aWMgaW50IHNuZF90aW1lcl91c2VyX2Zhc3luYyhpbnQgZmQsIHN0cnVjdCBmaWxlICogZmlsZSwgaW50IG9uKQogewogCXN0cnVjdCBzbmRfdGltZXJfdXNlciAqdHU7Ci0JaW50IGVycjsKIAogCXR1ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCWVyciA9IGZhc3luY19oZWxwZXIoZmQsIGZpbGUsIG9uLCAmdHUtPmZhc3luYyk7Ci0gICAgICAgIGlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCXJldHVybiAwOworCXJldHVybiBmYXN5bmNfaGVscGVyKGZkLCBmaWxlLCBvbiwgJnR1LT5mYXN5bmMpOwogfQogCiBzdGF0aWMgc3NpemVfdCBzbmRfdGltZXJfdXNlcl9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmZmVyLApkaWZmIC0tZ2l0IGEvc291bmQvY29yZS92bWFzdGVyLmMgYi9zb3VuZC9jb3JlL3ZtYXN0ZXIuYwppbmRleCA0Y2M1N2Y5Li4yNTc2MjRiIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3ZtYXN0ZXIuYworKysgYi9zb3VuZC9jb3JlL3ZtYXN0ZXIuYwpAQCAtNTAsMTggKzUwLDM4IEBACiAJc3RydWN0IGxpbmtfbWFzdGVyICptYXN0ZXI7CiAJc3RydWN0IGxpbmtfY3RsX2luZm8gaW5mbzsKIAlpbnQgdmFsc1syXTsJCS8qIGN1cnJlbnQgdmFsdWVzICovCisJdW5zaWduZWQgaW50IGZsYWdzOwogCXN0cnVjdCBzbmRfa2NvbnRyb2wgc2xhdmU7IC8qIHRoZSBjb3B5IG9mIG9yaWdpbmFsIGNvbnRyb2wgZW50cnkgKi8KIH07CiAKK3N0YXRpYyBpbnQgc2xhdmVfdXBkYXRlKHN0cnVjdCBsaW5rX3NsYXZlICpzbGF2ZSkKK3sKKwlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y3RsOworCWludCBlcnIsIGNoOworCisJdWN0bCA9IGttYWxsb2Moc2l6ZW9mKCp1Y3RsKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF1Y3RsKQorCQlyZXR1cm4gLUVOT01FTTsKKwl1Y3RsLT5pZCA9IHNsYXZlLT5zbGF2ZS5pZDsKKwllcnIgPSBzbGF2ZS0+c2xhdmUuZ2V0KCZzbGF2ZS0+c2xhdmUsIHVjdGwpOworCWZvciAoY2ggPSAwOyBjaCA8IHNsYXZlLT5pbmZvLmNvdW50OyBjaCsrKQorCQlzbGF2ZS0+dmFsc1tjaF0gPSB1Y3RsLT52YWx1ZS5pbnRlZ2VyLnZhbHVlW2NoXTsKKwlrZnJlZSh1Y3RsKTsKKwlyZXR1cm4gMDsKK30KKwogLyogZ2V0IHRoZSBzbGF2ZSBjdGwgaW5mbyBhbmQgc2F2ZSB0aGUgaW5pdGlhbCB2YWx1ZXMgKi8KIHN0YXRpYyBpbnQgc2xhdmVfaW5pdChzdHJ1Y3QgbGlua19zbGF2ZSAqc2xhdmUpCiB7CiAJc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbzsKLQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y3RsOwotCWludCBlcnIsIGNoOworCWludCBlcnI7CiAKLQlpZiAoc2xhdmUtPmluZm8uY291bnQpCi0JCXJldHVybiAwOyAvKiBhbHJlYWR5IGluaXRpYWxpemVkICovCisJaWYgKHNsYXZlLT5pbmZvLmNvdW50KSB7CisJCS8qIGFscmVhZHkgaW5pdGlhbGl6ZWQgKi8KKwkJaWYgKHNsYXZlLT5mbGFncyAmIFNORF9DVExfU0xBVkVfTkVFRF9VUERBVEUpCisJCQlyZXR1cm4gc2xhdmVfdXBkYXRlKHNsYXZlKTsKKwkJcmV0dXJuIDA7CisJfQogCiAJdWluZm8gPSBrbWFsbG9jKHNpemVvZigqdWluZm8pLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXVpbmZvKQpAQCAtODUsMTUgKzEwNSw3IEBACiAJc2xhdmUtPmluZm8ubWF4X3ZhbCA9IHVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1heDsKIAlrZnJlZSh1aW5mbyk7CiAKLQl1Y3RsID0ga21hbGxvYyhzaXplb2YoKnVjdGwpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXVjdGwpCi0JCXJldHVybiAtRU5PTUVNOwotCXVjdGwtPmlkID0gc2xhdmUtPnNsYXZlLmlkOwotCWVyciA9IHNsYXZlLT5zbGF2ZS5nZXQoJnNsYXZlLT5zbGF2ZSwgdWN0bCk7Ci0JZm9yIChjaCA9IDA7IGNoIDwgc2xhdmUtPmluZm8uY291bnQ7IGNoKyspCi0JCXNsYXZlLT52YWxzW2NoXSA9IHVjdGwtPnZhbHVlLmludGVnZXIudmFsdWVbY2hdOwotCWtmcmVlKHVjdGwpOwotCXJldHVybiAwOworCXJldHVybiBzbGF2ZV91cGRhdGUoc2xhdmUpOwogfQogCiAvKiBpbml0aWFsaXplIG1hc3RlciB2b2x1bWUgKi8KQEAgLTIyOSw3ICsyNDEsOCBAQAogICogLSBsb2dhcml0aG1pYyB2b2x1bWUgY29udHJvbCAoZEIgbGV2ZWwpLCBubyBsaW5lYXIgdm9sdW1lCiAgKiAtIG1hc3RlciBjYW4gb25seSBhdHRlbnVhdGUgdGhlIHZvbHVtZSwgbm8gZ2FpbgogICovCi1pbnQgc25kX2N0bF9hZGRfc2xhdmUoc3RydWN0IHNuZF9rY29udHJvbCAqbWFzdGVyLCBzdHJ1Y3Qgc25kX2tjb250cm9sICpzbGF2ZSkKK2ludCBfc25kX2N0bF9hZGRfc2xhdmUoc3RydWN0IHNuZF9rY29udHJvbCAqbWFzdGVyLCBzdHJ1Y3Qgc25kX2tjb250cm9sICpzbGF2ZSwKKwkJICAgICAgIHVuc2lnbmVkIGludCBmbGFncykKIHsKIAlzdHJ1Y3QgbGlua19tYXN0ZXIgKm1hc3Rlcl9saW5rID0gc25kX2tjb250cm9sX2NoaXAobWFzdGVyKTsKIAlzdHJ1Y3QgbGlua19zbGF2ZSAqc3JlYzsKQEAgLTI0MSw2ICsyNTQsNyBAQAogCXNyZWMtPnNsYXZlID0gKnNsYXZlOwogCW1lbWNweShzcmVjLT5zbGF2ZS52ZCwgc2xhdmUtPnZkLCBzbGF2ZS0+Y291bnQgKiBzaXplb2YoKnNsYXZlLT52ZCkpOwogCXNyZWMtPm1hc3RlciA9IG1hc3Rlcl9saW5rOworCXNyZWMtPmZsYWdzID0gZmxhZ3M7CiAKIAkvKiBvdmVycmlkZSBjYWxsYmFja3MgKi8KIAlzbGF2ZS0+aW5mbyA9IHNsYXZlX2luZm87CkBAIC0yNTQsOCArMjY4LDcgQEAKIAlsaXN0X2FkZF90YWlsKCZzcmVjLT5saXN0LCAmbWFzdGVyX2xpbmstPnNsYXZlcyk7CiAJcmV0dXJuIDA7CiB9Ci0KLUVYUE9SVF9TWU1CT0woc25kX2N0bF9hZGRfc2xhdmUpOworRVhQT1JUX1NZTUJPTChfc25kX2N0bF9hZGRfc2xhdmUpOwogCiAvKgogICogY3RsIGNhbGxiYWNrcyBmb3IgbWFzdGVyIGNvbnRyb2xzCkBAIC0zMjcsOCArMzQwLDIwIEBACiB9CiAKIAotLyoKLSAqIENyZWF0ZSBhIHZpcnR1YWwgbWFzdGVyIGNvbnRyb2wgd2l0aCB0aGUgZ2l2ZW4gbmFtZQorLyoqCisgKiBzbmRfY3RsX21ha2VfdmlydHVhbF9tYXN0ZXIgLSBDcmVhdGUgYSB2aXJ0dWFsIG1hc3RlciBjb250cm9sCisgKiBAbmFtZTogbmFtZSBzdHJpbmcgb2YgdGhlIGNvbnRyb2wgZWxlbWVudCB0byBjcmVhdGUKKyAqIEB0bHY6IG9wdGlvbmFsIFRMViBpbnQgYXJyYXkgZm9yIGRCIGluZm9ybWF0aW9uCisgKgorICogQ3JlYXRlcyBhIHZpcnR1YWwgbWF0c3RlciBjb250cm9sIHdpdGggdGhlIGdpdmVuIG5hbWUgc3RyaW5nLgorICogUmV0dXJucyB0aGUgY3JlYXRlZCBjb250cm9sIGVsZW1lbnQsIG9yIE5VTEwgZm9yIGVycm9ycyAoRU5PTUVNKS4KKyAqCisgKiBBZnRlciBjcmVhdGluZyBhIHZtYXN0ZXIgZWxlbWVudCwgeW91IGNhbiBhZGQgdGhlIHNsYXZlIGNvbnRyb2xzCisgKiB2aWEgc25kX2N0bF9hZGRfc2xhdmUoKSBvciBzbmRfY3RsX2FkZF9zbGF2ZV91bmNhY2hlZCgpLgorICoKKyAqIFRoZSBvcHRpb25hbCBhcmd1bWVudCBAdGx2IGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIFRMViBpbmZvcm1hdGlvbgorICogZm9yIGRCIHNjYWxlIG9mIHRoZSBtYXN0ZXIgY29udHJvbC4gIEl0IHNob3VsZCBiZSBhIHNpbmdsZSBlbGVtZW50CisgKiB3aXRoICNTTkRSVl9DVExfVExWVF9EQl9TQ0FMRSB0eXBlLCBhbmQgc2hvdWxkIGJlIHRoZSBtYXggMGRCLgogICovCiBzdHJ1Y3Qgc25kX2tjb250cm9sICpzbmRfY3RsX21ha2VfdmlydHVhbF9tYXN0ZXIoY2hhciAqbmFtZSwKIAkJCQkJCSBjb25zdCB1bnNpZ25lZCBpbnQgKnRsdikKQEAgLTM2Nyw1ICszOTIsNCBAQAogCiAJcmV0dXJuIGtjdGw7CiB9Ci0KIEVYUE9SVF9TWU1CT0woc25kX2N0bF9tYWtlX3ZpcnR1YWxfbWFzdGVyKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvZHVtbXkuYyBiL3NvdW5kL2RyaXZlcnMvZHVtbXkuYwppbmRleCA3M2JlN2UxLi41NDIzOWQyIDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL2R1bW15LmMKKysrIGIvc291bmQvZHJpdmVycy9kdW1teS5jCkBAIC01ODgsMTAgKzU4OCwxMCBAQAogCWludCBpZHgsIGVycjsKIAlpbnQgZGV2ID0gZGV2cHRyLT5pZDsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCi0JCQkgICAgc2l6ZW9mKHN0cnVjdCBzbmRfZHVtbXkpKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisJCQkgICAgICBzaXplb2Yoc3RydWN0IHNuZF9kdW1teSksICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAlkdW1teSA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAlkdW1teS0+Y2FyZCA9IGNhcmQ7CiAJZm9yIChpZHggPSAwOyBpZHggPCBNQVhfUENNX0RFVklDRVMgJiYgaWR4IDwgcGNtX2RldnNbZGV2XTsgaWR4KyspIHsKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvbWw0MDMtYWM5N2NyLmMgYi9zb3VuZC9kcml2ZXJzL21sNDAzLWFjOTdjci5jCmluZGV4IDc3ODM4NDMuLjE5NTBmZmMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2RyaXZlcnMvbWw0MDMtYWM5N2NyLmMKKysrIGIvc291bmQvZHJpdmVycy9tbDQwMy1hYzk3Y3IuYwpAQCAtMTI3OSw5ICsxMjc5LDkgQEAKIAlpZiAoIWVuYWJsZVtkZXZdKQogCQlyZXR1cm4gLUVOT0VOVDsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCWVyciA9IHNuZF9tbDQwM19hYzk3Y3JfY3JlYXRlKGNhcmQsIHBmZGV2LCAmbWw0MDNfYWM5N2NyKTsKIAlpZiAoZXJyIDwgMCkgewogCQlQREVCVUcoSU5JVF9GQUlMVVJFLCAicHJvYmUoKTogY3JlYXRlIGZhaWxlZCFcbiIpOwpkaWZmIC0tZ2l0IGEvc291bmQvZHJpdmVycy9tcHU0MDEvbXB1NDAxLmMgYi9zb3VuZC9kcml2ZXJzL21wdTQwMS9tcHU0MDEuYwppbmRleCA1Yjk5NmYzLi4xNDlkMDVhIDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL21wdTQwMS9tcHU0MDEuYworKysgYi9zb3VuZC9kcml2ZXJzL21wdTQwMS9tcHU0MDEuYwpAQCAtNzMsOSArNzMsOSBAQAogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJ0aGUgdWFydF9lbnRlciBvcHRpb24gaXMgb2Jzb2xldGU7IHJlbW92ZSBpdFxuIik7CiAKIAkqcmNhcmQgPSBOVUxMOwotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCXN0cmNweShjYXJkLT5kcml2ZXIsICJNUFUtNDAxIFVBUlQiKTsKIAlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCBjYXJkLT5kcml2ZXIpOwogCXNwcmludGYoY2FyZC0+bG9uZ25hbWUsICIlcyBhdCAlI2x4LCAiLCBjYXJkLT5zaG9ydG5hbWUsIHBvcnRbZGV2XSk7CmRpZmYgLS1naXQgYS9zb3VuZC9kcml2ZXJzL210cGF2LmMgYi9zb3VuZC9kcml2ZXJzL210cGF2LmMKaW5kZXggNDhiNjRlNi4uMmY4ZjI5NSAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy9tdHBhdi5jCisrKyBiL3NvdW5kL2RyaXZlcnMvbXRwYXYuYwpAQCAtMzAzLDggKzMwMywxMCBAQAogCiAJCXNuZF9tdHBhdl9zZW5kX2J5dGUobXRwX2NhcmQsIDB4ZjUpOwogCQlzbmRfbXRwYXZfc2VuZF9ieXRlKG10cF9jYXJkLCBwb3J0cC0+aHdwb3J0KTsKLQkJLy9zbmRfcHJpbnRrKCJuZXcgb3V0cG9ydDogMHgleFxuIiwgKHVuc2lnbmVkIGludCkgcG9ydHAtPmh3cG9ydCk7Ci0KKwkJLyoKKwkJc25kX3ByaW50ayhLRVJOX0RFQlVHICJuZXcgb3V0cG9ydDogMHgleFxuIiwKKwkJCSAgICh1bnNpZ25lZCBpbnQpIHBvcnRwLT5od3BvcnQpOworCQkqLwogCQlpZiAoIShvdXRieXRlICYgMHg4MCkgJiYgcG9ydHAtPnJ1bm5pbmdfc3RhdHVzKQogCQkJc25kX210cGF2X3NlbmRfYnl0ZShtdHBfY2FyZCwgcG9ydHAtPnJ1bm5pbmdfc3RhdHVzKTsKIAl9CkBAIC01NDAsNyArNTQyLDcgQEAKIAogCXU4IHNieXQgPSBzbmRfbXRwYXZfZ2V0cmVnKG1jcmQsIFNSRUcpOwogCi0JLy9wcmludGsoInNuZF9tdHBhdl9yZWFkX2J5dGVzKCkgc2J5dDogMHgleFxuIiwgc2J5dCk7CisJLyogcHJpbnRrKEtFUk5fREVCVUcgInNuZF9tdHBhdl9yZWFkX2J5dGVzKCkgc2J5dDogMHgleFxuIiwgc2J5dCk7ICovCiAKIAlpZiAoIShzYnl0ICYgU0lHU19CWVRFKSkKIAkJcmV0dXJuOwpAQCAtNTg1LDEyICs1ODcsMTIgQEAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9tdHBhdl9nZXRfSVNBKHN0cnVjdCBtdHBhdiAqIG1jYXJkKQogewogCWlmICgobWNhcmQtPnJlc19wb3J0ID0gcmVxdWVzdF9yZWdpb24ocG9ydCwgMywgIk1vdHVNVFBBViBNSURJIikpID09IE5VTEwpIHsKLQkJc25kX3ByaW50aygiTVRWQVAgcG9ydCAweCVseCBpcyBidXN5XG4iLCBwb3J0KTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiTVRWQVAgcG9ydCAweCVseCBpcyBidXN5XG4iLCBwb3J0KTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAJbWNhcmQtPnBvcnQgPSBwb3J0OwogCWlmIChyZXF1ZXN0X2lycShpcnEsIHNuZF9tdHBhdl9pcnFoLCBJUlFGX0RJU0FCTEVELCAiTU9UVSBNVFBBViIsIG1jYXJkKSkgewotCQlzbmRfcHJpbnRrKCJNVFZBUCBJUlEgJWQgYnVzeVxuIiwgaXJxKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiTVRWQVAgSVJRICVkIGJ1c3lcbiIsIGlycSk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCW1jYXJkLT5pcnEgPSBpcnE7CkBAIC02OTYsOSArNjk4LDkgQEAKIAlpbnQgZXJyOwogCXN0cnVjdCBtdHBhdiAqbXRwX2NhcmQ7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIHNpemVvZigqbXRwX2NhcmQpKTsKLQlpZiAoISBjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgc2l6ZW9mKCptdHBfY2FyZCksICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCW10cF9jYXJkID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCXNwaW5fbG9ja19pbml0KCZtdHBfY2FyZC0+c3BpbmxvY2spOwpkaWZmIC0tZ2l0IGEvc291bmQvZHJpdmVycy9tdHM2NC5jIGIvc291bmQvZHJpdmVycy9tdHM2NC5jCmluZGV4IDg3YmExZGQuLjkyODQ4MjkgMTAwNjQ0Ci0tLSBhL3NvdW5kL2RyaXZlcnMvbXRzNjQuYworKysgYi9zb3VuZC9kcml2ZXJzL210czY0LmMKQEAgLTk1NywxMCArOTU3LDEwIEBACiAJaWYgKChlcnIgPSBzbmRfbXRzNjRfcHJvYmVfcG9ydChwKSkgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkgeworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKSB7CiAJCXNuZF9wcmludGQoIkNhbm5vdCBjcmVhdGUgY2FyZFxuIik7Ci0JCXJldHVybiAtRU5PTUVNOworCQlyZXR1cm4gZXJyOwogCX0KIAlzdHJjcHkoY2FyZC0+ZHJpdmVyLCBEUklWRVJfTkFNRSk7CiAJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgIkVTSSAiIENBUkRfTkFNRSk7CkBAIC0xMDE1LDcgKzEwMTUsNyBAQAogCQlnb3RvIF9fZXJyOwogCX0KIAotCXNuZF9wcmludGsoIkVTSSBNaWRpdGVybWluYWwgNDE0MCBvbiAweCVseFxuIiwgcC0+YmFzZSk7CisJc25kX3ByaW50ayhLRVJOX0lORk8gIkVTSSBNaWRpdGVybWluYWwgNDE0MCBvbiAweCVseFxuIiwgcC0+YmFzZSk7CiAJcmV0dXJuIDA7CiAKIF9fZXJyOgpkaWZmIC0tZ2l0IGEvc291bmQvZHJpdmVycy9vcGwzL29wbDNfbGliLmMgYi9zb3VuZC9kcml2ZXJzL29wbDMvb3BsM19saWIuYwppbmRleCA3ODA1ODIzLi42ZTMxZTQ2IDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL29wbDMvb3BsM19saWIuYworKysgYi9zb3VuZC9kcml2ZXJzL29wbDMvb3BsM19saWIuYwpAQCAtMzAyLDcgKzMwMiw3IEBACiAJb3BsMyA9IGh3LT5wcml2YXRlX2RhdGE7CiAJc3RhdHVzID0gaW5iKG9wbDMtPmxfcG9ydCk7CiAjaWYgMAotCXNuZF9wcmludGsoIkFkTGliIElSUSBzdGF0dXMgPSAweCV4XG4iLCBzdGF0dXMpOworCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiQWRMaWIgSVJRIHN0YXR1cyA9IDB4JXhcbiIsIHN0YXR1cyk7CiAjZW5kaWYKIAlpZiAoIShzdGF0dXMgJiAweDgwKSkKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvc291bmQvZHJpdmVycy9vcGwzL29wbDNfbWlkaS5jIGIvc291bmQvZHJpdmVycy9vcGwzL29wbDNfbWlkaS5jCmluZGV4IDE2ZmVhZmEuLjZlN2QwOWEgMTAwNjQ0Ci0tLSBhL3NvdW5kL2RyaXZlcnMvb3BsMy9vcGwzX21pZGkuYworKysgYi9zb3VuZC9kcml2ZXJzL29wbDMvb3BsM19taWRpLmMKQEAgLTEyNSw3ICsxMjUsNyBAQAogCWludCBpOwogCWNoYXIgKnN0ciA9ICJ4LjI0IjsKIAotCXByaW50aygidGltZSAlLjVpOiAlcyBbJS4yaV06ICIsIG9wbDMtPnVzZV90aW1lLCBzLCB2b2ljZSk7CisJcHJpbnRrKEtFUk5fREVCVUcgInRpbWUgJS41aTogJXMgWyUuMmldOiAiLCBvcGwzLT51c2VfdGltZSwgcywgdm9pY2UpOwogCWZvciAoaSA9IDA7IGkgPCBvcGwzLT5tYXhfdm9pY2VzOyBpKyspCiAJCXByaW50aygiJWMiLCAqKHN0ciArIG9wbDMtPnZvaWNlc1tpXS5zdGF0ZSArIDEpKTsKIAlwcmludGsoIlxuIik7CkBAIC0yMTgsNyArMjE4LDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgRU5EOyBpKyspIHsKIAkJaWYgKGJlc3RbaV0udm9pY2UgPj0gMCkgewogI2lmZGVmIERFQlVHX0FMTE9DCi0JCQlwcmludGsoIiVzICVpb3AgYWxsb2NhdGlvbiBvbiB2b2ljZSAlaVxuIiwKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlcyAlaW9wIGFsbG9jYXRpb24gb24gdm9pY2UgJWlcbiIsCiAJCQkgICAgICAgYWxsb2NfdHlwZVtpXSwgaW5zdHJfNG9wID8gNCA6IDIsCiAJCQkgICAgICAgYmVzdFtpXS52b2ljZSk7CiAjZW5kaWYKQEAgLTMxNyw3ICszMTcsNyBAQAogCW9wbDMgPSBwOwogCiAjaWZkZWYgREVCVUdfTUlESQotCXNuZF9wcmludGsoIk5vdGUgb24sIGNoICVpLCBpbnN0ICVpLCBub3RlICVpLCB2ZWwgJWlcbiIsCisJc25kX3ByaW50ayhLRVJOX0RFQlVHICJOb3RlIG9uLCBjaCAlaSwgaW5zdCAlaSwgbm90ZSAlaSwgdmVsICVpXG4iLAogCQkgICBjaGFuLT5udW1iZXIsIGNoYW4tPm1pZGlfcHJvZ3JhbSwgbm90ZSwgdmVsKTsKICNlbmRpZgogCkBAIC0zNzIsNyArMzcyLDcgQEAKIAkJcmV0dXJuOwogCX0KICNpZmRlZiBERUJVR19NSURJCi0Jc25kX3ByaW50aygiICAtLT4gT1BMJWkgaW5zdHJ1bWVudDogJXNcbiIsCisJc25kX3ByaW50ayhLRVJOX0RFQlVHICIgIC0tPiBPUEwlaSBpbnN0cnVtZW50OiAlc1xuIiwKIAkJICAgaW5zdHJfNG9wID8gMyA6IDIsIHBhdGNoLT5uYW1lKTsKICNlbmRpZgogCS8qIGluIFNZTlRIIG1vZGUsIGFwcGxpY2F0aW9uIHRha2VzIGNhcmUgb2Ygdm9pY2VzICovCkBAIC00MzEsNyArNDMxLDcgQEAKIAl9CiAKICNpZmRlZiBERUJVR19NSURJCi0Jc25kX3ByaW50aygiICAtLT4gc2V0dGluZyBPUEwzIGNvbm5lY3Rpb246IDB4JXhcbiIsCisJc25kX3ByaW50ayhLRVJOX0RFQlVHICIgIC0tPiBzZXR0aW5nIE9QTDMgY29ubmVjdGlvbjogMHgleFxuIiwKIAkJICAgb3BsMy0+Y29ubmVjdGlvbl9yZWcpOwogI2VuZGlmCiAJLyoKQEAgLTQ2Niw3ICs0NjYsNyBAQAogCS8qIFByb2dyYW0gdGhlIEZNIHZvaWNlIGNoYXJhY3RlcmlzdGljcyAqLwogCWZvciAoaSA9IDA7IGkgPCAoaW5zdHJfNG9wID8gNCA6IDIpOyBpKyspIHsKICNpZmRlZiBERUJVR19NSURJCi0JCXNuZF9wcmludGsoIiAgLS0+IHByb2dyYW1taW5nIG9wZXJhdG9yICVpXG4iLCBpKTsKKwkJc25kX3ByaW50ayhLRVJOX0RFQlVHICIgIC0tPiBwcm9ncmFtbWluZyBvcGVyYXRvciAlaVxuIiwgaSk7CiAjZW5kaWYKIAkJb3Bfb2Zmc2V0ID0gc25kX29wbDNfcmVnbWFwW3ZvaWNlX29mZnNldF1baV07CiAKQEAgLTU0Niw3ICs1NDYsNyBAQAogCWJsb2NrbnVtIHw9IE9QTDNfS0VZT05fQklUOwogCiAjaWZkZWYgREVCVUdfTUlESQotCXNuZF9wcmludGsoIiAgLS0+IHRyaWdnZXIgdm9pY2UgJWlcbiIsIHZvaWNlKTsKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcgIiAgLS0+IHRyaWdnZXIgdm9pY2UgJWlcbiIsIHZvaWNlKTsKICNlbmRpZgogCS8qIFNldCBPUEwzIEtFWU9OX0JMT0NLIHJlZ2lzdGVyIG9mIHJlcXVlc3RlZCB2b2ljZSAqLyAKIAlvcGwzX3JlZyA9IHJlZ19zaWRlIHwgKE9QTDNfUkVHX0tFWU9OX0JMT0NLICsgdm9pY2Vfb2Zmc2V0KTsKQEAgLTYwMiw3ICs2MDIsNyBAQAogCQkJcHJnID0gZXh0cmFfcHJnIC0gMTsKIAkJfQogI2lmZGVmIERFQlVHX01JREkKLQkJc25kX3ByaW50aygiICoqKiBhbGxvY2F0aW5nIGV4dHJhIHByb2dyYW1cbiIpOworCQlzbmRfcHJpbnRrKEtFUk5fREVCVUcgIiAqKiogYWxsb2NhdGluZyBleHRyYSBwcm9ncmFtXG4iKTsKICNlbmRpZgogCQlnb3RvIF9fZXh0cmFfcHJnOwogCX0KQEAgLTYzMyw3ICs2MzMsNyBAQAogCiAJLyoga2lsbCB2b2ljZSAqLwogI2lmZGVmIERFQlVHX01JREkKLQlzbmRfcHJpbnRrKCIgIC0tPiBraWxsIHZvaWNlICVpXG4iLCB2b2ljZSk7CisJc25kX3ByaW50ayhLRVJOX0RFQlVHICIgIC0tPiBraWxsIHZvaWNlICVpXG4iLCB2b2ljZSk7CiAjZW5kaWYKIAlvcGwzX3JlZyA9IHJlZ19zaWRlIHwgKE9QTDNfUkVHX0tFWU9OX0JMT0NLICsgdm9pY2Vfb2Zmc2V0KTsKIAkvKiBjbGVhciBLZXkgT04gYml0ICovCkBAIC02NzAsNyArNjcwLDcgQEAKIAlvcGwzID0gcDsKIAogI2lmZGVmIERFQlVHX01JREkKLQlzbmRfcHJpbnRrKCJOb3RlIG9mZiwgY2ggJWksIGluc3QgJWksIG5vdGUgJWlcbiIsCisJc25kX3ByaW50ayhLRVJOX0RFQlVHICJOb3RlIG9mZiwgY2ggJWksIGluc3QgJWksIG5vdGUgJWlcbiIsCiAJCSAgIGNoYW4tPm51bWJlciwgY2hhbi0+bWlkaV9wcm9ncmFtLCBub3RlKTsKICNlbmRpZgogCkBAIC03MDksNyArNzA5LDcgQEAKIAogCW9wbDMgPSBwOwogI2lmZGVmIERFQlVHX01JREkKLQlzbmRfcHJpbnRrKCJLZXkgcHJlc3N1cmUsIGNoIzogJWksIGluc3QjOiAlaVxuIiwKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcgIktleSBwcmVzc3VyZSwgY2gjOiAlaSwgaW5zdCM6ICVpXG4iLAogCQkgICBjaGFuLT5udW1iZXIsIGNoYW4tPm1pZGlfcHJvZ3JhbSk7CiAjZW5kaWYKIH0KQEAgLTcyMyw3ICs3MjMsNyBAQAogCiAJb3BsMyA9IHA7CiAjaWZkZWYgREVCVUdfTUlESQotCXNuZF9wcmludGsoIlRlcm1pbmF0ZSBub3RlLCBjaCM6ICVpLCBpbnN0IzogJWlcbiIsCisJc25kX3ByaW50ayhLRVJOX0RFQlVHICJUZXJtaW5hdGUgbm90ZSwgY2gjOiAlaSwgaW5zdCM6ICVpXG4iLAogCQkgICBjaGFuLT5udW1iZXIsIGNoYW4tPm1pZGlfcHJvZ3JhbSk7CiAjZW5kaWYKIH0KQEAgLTgxMiw3ICs4MTIsNyBAQAogCiAJb3BsMyA9IHA7CiAjaWZkZWYgREVCVUdfTUlESQotCXNuZF9wcmludGsoIkNvbnRyb2xsZXIsIFRZUEUgPSAlaSwgY2gjOiAlaSwgaW5zdCM6ICVpXG4iLAorCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiQ29udHJvbGxlciwgVFlQRSA9ICVpLCBjaCM6ICVpLCBpbnN0IzogJWlcbiIsCiAJCSAgIHR5cGUsIGNoYW4tPm51bWJlciwgY2hhbi0+bWlkaV9wcm9ncmFtKTsKICNlbmRpZgogCkBAIC04NDksNyArODQ5LDcgQEAKIAogCW9wbDMgPSBwOwogI2lmZGVmIERFQlVHX01JREkKLQlzbmRfcHJpbnRrKCJOUlBOLCBjaCM6ICVpLCBpbnN0IzogJWlcbiIsCisJc25kX3ByaW50ayhLRVJOX0RFQlVHICJOUlBOLCBjaCM6ICVpLCBpbnN0IzogJWlcbiIsCiAJCSAgIGNoYW4tPm51bWJlciwgY2hhbi0+bWlkaV9wcm9ncmFtKTsKICNlbmRpZgogfQpAQCAtODY0LDYgKzg2NCw2IEBACiAKIAlvcGwzID0gcDsKICNpZmRlZiBERUJVR19NSURJCi0Jc25kX3ByaW50aygiU1lTRVhcbiIpOworCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiU1lTRVhcbiIpOwogI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9zb3VuZC9kcml2ZXJzL29wbDMvb3BsM19vc3MuYyBiL3NvdW5kL2RyaXZlcnMvb3BsMy9vcGwzX29zcy5jCmluZGV4IDlhMjI3MWQuLmE1NGIxZGMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2RyaXZlcnMvb3BsMy9vcGwzX29zcy5jCisrKyBiL3NvdW5kL2RyaXZlcnMvb3BsMy9vcGwzX29zcy5jCkBAIC0yMjAsMTQgKzIyMCwxNCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChjb3VudCA8IChpbnQpc2l6ZW9mKHNiaSkpIHsKLQkJc25kX3ByaW50aygiRk0gRXJyb3I6IFBhdGNoIHJlY29yZCB0b28gc2hvcnRcbiIpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJGTSBFcnJvcjogUGF0Y2ggcmVjb3JkIHRvbyBzaG9ydFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlpZiAoY29weV9mcm9tX3VzZXIoJnNiaSwgYnVmLCBzaXplb2Yoc2JpKSkpCiAJCXJldHVybiAtRUZBVUxUOwogCiAJaWYgKHNiaS5jaGFubmVsIDwgMCB8fCBzYmkuY2hhbm5lbCA+PSBTQkZNX01BWElOU1RSKSB7Ci0JCXNuZF9wcmludGsoIkZNIEVycm9yOiBJbnZhbGlkIGluc3RydW1lbnQgbnVtYmVyICVkXG4iLAorCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJGTSBFcnJvcjogSW52YWxpZCBpbnN0cnVtZW50IG51bWJlciAlZFxuIiwKIAkJCSAgIHNiaS5jaGFubmVsKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMjU0LDcgKzI1NCw5IEBACiAJb3BsMyA9IGFyZy0+cHJpdmF0ZV9kYXRhOwogCXN3aXRjaCAoY21kKSB7CiAJCWNhc2UgU05EQ1RMX0ZNX0xPQURfSU5TVFI6Ci0JCQlzbmRfcHJpbnRrKCJPUEwzOiBPYnNvbGV0ZSBpb2N0bChTTkRDVExfRk1fTE9BRF9JTlNUUikgdXNlZC4gRml4IHRoZSBwcm9ncmFtLlxuIik7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJPUEwzOiAiCisJCQkJICAgIk9ic29sZXRlIGlvY3RsKFNORENUTF9GTV9MT0FEX0lOU1RSKSB1c2VkLiAiCisJCQkJICAgIkZpeCB0aGUgcHJvZ3JhbS5cbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAKIAkJY2FzZSBTTkRDVExfU1lOVEhfTUVNQVZMOgpkaWZmIC0tZ2l0IGEvc291bmQvZHJpdmVycy9vcGwzL29wbDNfc3ludGguYyBiL3NvdW5kL2RyaXZlcnMvb3BsMy9vcGwzX3N5bnRoLmMKaW5kZXggOTYyYmI5Yy4uNmQ1N2I2NDQxIDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL29wbDMvb3BsM19zeW50aC5jCisrKyBiL3NvdW5kL2RyaXZlcnMvb3BsMy9vcGwzX3N5bnRoLmMKQEAgLTE2OCw3ICsxNjgsNyBAQAogCiAjaWZkZWYgQ09ORklHX1NORF9ERUJVRwogCWRlZmF1bHQ6Ci0JCXNuZF9wcmludGsoInVua25vd24gSU9DVEw6IDB4JXhcbiIsIGNtZCk7CisJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HICJ1bmtub3duIElPQ1RMOiAweCV4XG4iLCBjbWQpOwogI2VuZGlmCiAJfQogCXJldHVybiAtRU5PVFRZOwpkaWZmIC0tZ2l0IGEvc291bmQvZHJpdmVycy9wY3NwL3Bjc3AuYyBiL3NvdW5kL2RyaXZlcnMvcGNzcC9wY3NwLmMKaW5kZXggYTQwNDllYi4uYjYwY2VmMiAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy9wY3NwL3Bjc3AuYworKysgYi9zb3VuZC9kcml2ZXJzL3Bjc3AvcGNzcC5jCkBAIC01Nyw3ICs1Nyw3IEBACiAJZWxzZQogCQltaW5fZGl2ID0gTUFYX0RJVjsKICNpZiBQQ1NQX0RFQlVHCi0JcHJpbnRrKCJQQ1NQOiBscGo9JWxpLCBtaW5fZGl2PSVpLCByZXM9JWxpXG4iLAorCXByaW50ayhLRVJOX0RFQlVHICJQQ1NQOiBscGo9JWxpLCBtaW5fZGl2PSVpLCByZXM9JWxpXG4iLAogCSAgICAgICBsb29wc19wZXJfamlmZnksIG1pbl9kaXYsIHRwLnR2X25zZWMpOwogI2VuZGlmCiAKQEAgLTk4LDkgKzk4LDkgQEAKIAlocnRpbWVyX2luaXQoJnBjc3BfY2hpcC50aW1lciwgQ0xPQ0tfTU9OT1RPTklDLCBIUlRJTUVSX01PREVfUkVMKTsKIAlwY3NwX2NoaXAudGltZXIuZnVuY3Rpb24gPSBwY3NwX2RvX3RpbWVyOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleCwgaWQsIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoIWNhcmQpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleCwgaWQsIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAllcnIgPSBzbmRfcGNzcF9jcmVhdGUoY2FyZCk7CiAJaWYgKGVyciA8IDApIHsKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvcG9ydG1hbjJ4NC5jIGIvc291bmQvZHJpdmVycy9wb3J0bWFuMng0LmMKaW5kZXggYjFjMDQ3ZS4uNjAxNThlMiAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy9wb3J0bWFuMng0LmMKKysrIGIvc291bmQvZHJpdmVycy9wb3J0bWFuMng0LmMKQEAgLTc0NiwxMCArNzQ2LDEwIEBACiAJaWYgKChlcnIgPSBzbmRfcG9ydG1hbl9wcm9iZV9wb3J0KHApKSA8IDApCiAJCXJldHVybiBlcnI7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKSB7CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApIHsKIAkJc25kX3ByaW50ZCgiQ2Fubm90IGNyZWF0ZSBjYXJkXG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldHVybiBlcnI7CiAJfQogCXN0cmNweShjYXJkLT5kcml2ZXIsIERSSVZFUl9OQU1FKTsKIAlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCBDQVJEX05BTUUpOwpkaWZmIC0tZ2l0IGEvc291bmQvZHJpdmVycy9zZXJpYWwtdTE2NTUwLmMgYi9zb3VuZC9kcml2ZXJzL3NlcmlhbC11MTY1NTAuYwppbmRleCBkOGFhYjlkLi5iMmI2ZDUwIDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL3NlcmlhbC11MTY1NTAuYworKysgYi9zb3VuZC9kcml2ZXJzL3NlcmlhbC11MTY1NTAuYwpAQCAtMjQxLDcgKzI0MSw4IEBACiAJCQlzbmRfcmF3bWlkaV9yZWNlaXZlKHVhcnQtPm1pZGlfaW5wdXRbc3Vic3RyZWFtXSwgJmMsIDEpOwogCiAJCWlmIChzdGF0dXMgJiBVQVJUX0xTUl9PRSkKLQkJCXNuZF9wcmludGsoIiVzOiBPdmVycnVuIG9uIGRldmljZSBhdCAweCVseFxuIiwKKwkJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HCisJCQkJICAgIiVzOiBPdmVycnVuIG9uIGRldmljZSBhdCAweCVseFxuIiwKIAkJCSAgICAgICB1YXJ0LT5ybWlkaS0+bmFtZSwgdWFydC0+YmFzZSk7CiAJfQogCkBAIC02MzYsNyArNjM3LDggQEAKIAkJfQogCX0gZWxzZSB7CiAJCWlmICghc25kX3VhcnQxNjU1MF93cml0ZV9idWZmZXIodWFydCwgbWlkaV9ieXRlKSkgewotCQkJc25kX3ByaW50aygiJXM6IEJ1ZmZlciBvdmVycnVuIG9uIGRldmljZSBhdCAweCVseFxuIiwKKwkJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HCisJCQkJICAgIiVzOiBCdWZmZXIgb3ZlcnJ1biBvbiBkZXZpY2UgYXQgMHglbHhcbiIsCiAJCQkJICAgdWFydC0+cm1pZGktPm5hbWUsIHVhcnQtPmJhc2UpOwogCQkJcmV0dXJuIDA7CiAJCX0KQEAgLTgxNSw3ICs4MTcsOCBAQAogCWlmIChpcnEgPj0gMCAmJiBpcnEgIT0gU05EUlZfQVVUT19JUlEpIHsKIAkJaWYgKHJlcXVlc3RfaXJxKGlycSwgc25kX3VhcnQxNjU1MF9pbnRlcnJ1cHQsCiAJCQkJSVJRRl9ESVNBQkxFRCwgIlNlcmlhbCBNSURJIiwgdWFydCkpIHsKLQkJCXNuZF9wcmludGsoImlycSAlZCBidXN5LiBVc2luZyBQb2xsaW5nLlxuIiwgaXJxKTsKKwkJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HCisJCQkJICAgImlycSAlZCBidXN5LiBVc2luZyBQb2xsaW5nLlxuIiwgaXJxKTsKIAkJfSBlbHNlIHsKIAkJCXVhcnQtPmlycSA9IGlycTsKIAkJfQpAQCAtOTE5LDI2ICs5MjIsMjkgQEAKIAljYXNlIFNORFJWX1NFUklBTF9HRU5FUklDOgogCQlicmVhazsKIAlkZWZhdWx0OgotCQlzbmRfcHJpbnRrKCJBZGFwdG9yIHR5cGUgaXMgb3V0IG9mIHJhbmdlIDAtJWQgKCVkKVxuIiwKKwkJc25kX3ByaW50ayhLRVJOX0VSUgorCQkJICAgIkFkYXB0b3IgdHlwZSBpcyBvdXQgb2YgcmFuZ2UgMC0lZCAoJWQpXG4iLAogCQkJICAgU05EUlZfU0VSSUFMX01BWF9BREFQVE9SLCBhZGFwdG9yW2Rldl0pOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAlpZiAob3V0c1tkZXZdIDwgMSB8fCBvdXRzW2Rldl0gPiBTTkRSVl9TRVJJQUxfTUFYX09VVFMpIHsKLQkJc25kX3ByaW50aygiQ291bnQgb2Ygb3V0cHV0cyBpcyBvdXQgb2YgcmFuZ2UgMS0lZCAoJWQpXG4iLAorCQlzbmRfcHJpbnRrKEtFUk5fRVJSCisJCQkgICAiQ291bnQgb2Ygb3V0cHV0cyBpcyBvdXQgb2YgcmFuZ2UgMS0lZCAoJWQpXG4iLAogCQkJICAgU05EUlZfU0VSSUFMX01BWF9PVVRTLCBvdXRzW2Rldl0pOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAlpZiAoaW5zW2Rldl0gPCAxIHx8IGluc1tkZXZdID4gU05EUlZfU0VSSUFMX01BWF9JTlMpIHsKLQkJc25kX3ByaW50aygiQ291bnQgb2YgaW5wdXRzIGlzIG91dCBvZiByYW5nZSAxLSVkICglZClcbiIsCisJCXNuZF9wcmludGsoS0VSTl9FUlIKKwkJCSAgICJDb3VudCBvZiBpbnB1dHMgaXMgb3V0IG9mIHJhbmdlIDEtJWQgKCVkKVxuIiwKIAkJCSAgIFNORFJWX1NFUklBTF9NQVhfSU5TLCBpbnNbZGV2XSk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWNhcmQgID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAlzdHJjcHkoY2FyZC0+ZHJpdmVyLCAiU2VyaWFsIik7CiAJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgIlNlcmlhbCBNSURJIChVQVJUMTY1NTBBKSIpOwpkaWZmIC0tZ2l0IGEvc291bmQvZHJpdmVycy92aXJtaWRpLmMgYi9zb3VuZC9kcml2ZXJzL3Zpcm1pZGkuYwppbmRleCBmNzllMzYxLi4wZTYzMWMzIDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL3Zpcm1pZGkuYworKysgYi9zb3VuZC9kcml2ZXJzL3Zpcm1pZGkuYwpAQCAtOTAsMTUgKzkwLDE3IEBACiAJaW50IGlkeCwgZXJyOwogCWludCBkZXYgPSBkZXZwdHItPmlkOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKLQkJCSAgICBzaXplb2Yoc3RydWN0IHNuZF9jYXJkX3Zpcm1pZGkpKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisJCQkgICAgICBzaXplb2Yoc3RydWN0IHNuZF9jYXJkX3Zpcm1pZGkpLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAJdm1pZGkgPSAoc3RydWN0IHNuZF9jYXJkX3Zpcm1pZGkgKiljYXJkLT5wcml2YXRlX2RhdGE7CiAJdm1pZGktPmNhcmQgPSBjYXJkOwogCiAJaWYgKG1pZGlfZGV2c1tkZXZdID4gTUFYX01JRElfREVWSUNFUykgewotCQlzbmRfcHJpbnRrKCJ0b28gbXVjaCBtaWRpIGRldmljZXMgZm9yIHZpcm1pZGkgJWQ6IGZvcmNlIHRvIHVzZSAlZFxuIiwgZGV2LCBNQVhfTUlESV9ERVZJQ0VTKTsKKwkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSAgICJ0b28gbXVjaCBtaWRpIGRldmljZXMgZm9yIHZpcm1pZGkgJWQ6ICIKKwkJCSAgICJmb3JjZSB0byB1c2UgJWRcbiIsIGRldiwgTUFYX01JRElfREVWSUNFUyk7CiAJCW1pZGlfZGV2c1tkZXZdID0gTUFYX01JRElfREVWSUNFUzsKIAl9CiAJZm9yIChpZHggPSAwOyBpZHggPCBtaWRpX2RldnNbZGV2XTsgaWR4KyspIHsKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvdngvdnhfY29yZS5jIGIvc291bmQvZHJpdmVycy92eC92eF9jb3JlLmMKaW5kZXggMTRlMzM1NC4uMTljNmUzNyAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy92eC92eF9jb3JlLmMKKysrIGIvc291bmQvZHJpdmVycy92eC92eF9jb3JlLmMKQEAgLTY4OCw3ICs2ODgsOCBAQAogCQlpbWFnZSA9IGRzcC0+ZGF0YSArIGk7CiAJCS8qIFdhaXQgRFNQIHJlYWR5IGZvciBhIG5ldyByZWFkICovCiAJCWlmICgoZXJyID0gdnhfd2FpdF9pc3JfYml0KGNoaXAsIElTUl9UWF9FTVBUWSkpIDwgMCkgewotCQkJcHJpbnRrKCJkc3AgbG9hZGluZyBlcnJvciBhdCBwb3NpdGlvbiAlZFxuIiwgaSk7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiZHNwIGxvYWRpbmcgZXJyb3IgYXQgcG9zaXRpb24gJWRcbiIsIGkpOwogCQkJcmV0dXJuIGVycjsKIAkJfQogCQljcHRyID0gaW1hZ2U7CmRpZmYgLS1naXQgYS9zb3VuZC9kcml2ZXJzL3Z4L3Z4X2h3ZGVwLmMgYi9zb3VuZC9kcml2ZXJzL3Z4L3Z4X2h3ZGVwLmMKaW5kZXggOGQ2MzYyZS4uNDZkZjg4MSAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy92eC92eF9od2RlcC5jCisrKyBiL3NvdW5kL2RyaXZlcnMvdngvdnhfaHdkZXAuYwpAQCAtMTE5LDE2ICsxMTksNiBAQAogCiAjZWxzZSAvKiBvbGQgc3R5bGUgZmlybXdhcmUgbG9hZGluZyAqLwogCi1zdGF0aWMgaW50IHZ4X2h3ZGVwX29wZW4oc3RydWN0IHNuZF9od2RlcCAqaHcsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHZ4X2h3ZGVwX3JlbGVhc2Uoc3RydWN0IHNuZF9od2RlcCAqaHcsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IHZ4X2h3ZGVwX2RzcF9zdGF0dXMoc3RydWN0IHNuZF9od2RlcCAqaHcsCiAJCQkgICAgICAgc3RydWN0IHNuZF9od2RlcF9kc3Bfc3RhdHVzICppbmZvKQogewpAQCAtMjQzLDggKzIzMyw2IEBACiAKIAlody0+aWZhY2UgPSBTTkRSVl9IV0RFUF9JRkFDRV9WWDsKIAlody0+cHJpdmF0ZV9kYXRhID0gY2hpcDsKLQlody0+b3BzLm9wZW4gPSB2eF9od2RlcF9vcGVuOwotCWh3LT5vcHMucmVsZWFzZSA9IHZ4X2h3ZGVwX3JlbGVhc2U7CiAJaHctPm9wcy5kc3Bfc3RhdHVzID0gdnhfaHdkZXBfZHNwX3N0YXR1czsKIAlody0+b3BzLmRzcF9sb2FkID0gdnhfaHdkZXBfZHNwX2xvYWQ7CiAJaHctPmV4Y2x1c2l2ZSA9IDE7CmRpZmYgLS1naXQgYS9zb3VuZC9kcml2ZXJzL3Z4L3Z4X3Vlci5jIGIvc291bmQvZHJpdmVycy92eC92eF91ZXIuYwppbmRleCAwZTFiYTliLi5iMDU2MGZlYyAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy92eC92eF91ZXIuYworKysgYi9zb3VuZC9kcml2ZXJzL3Z4L3Z4X3Vlci5jCkBAIC0xMDMsNyArMTAzLDcgQEAKICAqIHJldHVybnMgdGhlIGZyZXF1ZW5jeSBvZiBVRVIsIG9yIDAgaWYgbm90IHN5bmMsCiAgKiBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUuCiAgKi8KLXN0YXRpYyBpbnQgdnhfcmVhZF91ZXJfc3RhdHVzKHN0cnVjdCB2eF9jb3JlICpjaGlwLCBpbnQgKm1vZGUpCitzdGF0aWMgaW50IHZ4X3JlYWRfdWVyX3N0YXR1cyhzdHJ1Y3QgdnhfY29yZSAqY2hpcCwgdW5zaWduZWQgaW50ICptb2RlKQogewogCWludCB2YWwsIGZyZXE7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL2kyYy9NYWtlZmlsZSBiL3NvdW5kL2kyYy9NYWtlZmlsZQppbmRleCAzNzk3MDY2Ni4uMzY4NzliZiAxMDA2NDQKLS0tIGEvc291bmQvaTJjL01ha2VmaWxlCisrKyBiL3NvdW5kL2kyYy9NYWtlZmlsZQpAQCAtNyw4ICs3LDYgQEAKIHNuZC1jczg0Mjctb2JqcyA6PSBjczg0Mjcubwogc25kLXRlYTYzMzB0LW9ianMgOj0gdGVhNjMzMHQubwogCi1vYmotJChDT05GSUdfTDMpICs9IGwzLwotCiBvYmotJChDT05GSUdfU05EKSArPSBvdGhlci8KIAogIyBUb3BsZXZlbCBNb2R1bGUgRGVwZW5kZW5jeQpkaWZmIC0tZ2l0IGEvc291bmQvaTJjL2wzL01ha2VmaWxlIGIvc291bmQvaTJjL2wzL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OTQ1NWI4Li4wMDAwMDAwCi0tLSBhL3NvdW5kL2kyYy9sMy9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotIwotIyBNYWtlZmlsZSBmb3IgQUxTQQotIwotCi1zbmQtdWRhMTM0MS1vYmpzIDo9IHVkYTEzNDEubwotCi0jIE1vZHVsZSBEZXBlbmRlbmN5Ci1vYmotJChDT05GSUdfU05EX1NBMTFYWF9VREExMzQxKSArPSBzbmQtdWRhMTM0MS5vCmRpZmYgLS1naXQgYS9zb3VuZC9pMmMvbDMvdWRhMTM0MS5jIGIvc291bmQvaTJjL2wzL3VkYTEzNDEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTg0MGViNC4uMDAwMDAwMAotLS0gYS9zb3VuZC9pMmMvbDMvdWRhMTM0MS5jCisrKyAvZGV2L251bGwKQEAgLTEsOTM1ICswLDAgQEAKLS8qCi0gKiBQaGlsaXBzIFVEQTEzNDEgbWl4ZXIgZGV2aWNlIGRyaXZlcgotICogQ29weXJpZ2h0IChjKSAyMDAyIFRvbWFzIEthc3BhcmVrIDx0b21hcy5rYXNwYXJla0BzZXpuYW0uY3o+Ci0gKgotICogUG9ydGlvbnMgYXJlIENvcHlyaWdodCAoQykgMjAwMCBMZXJub3V0ICYgSGF1c3BpZSBTcGVlY2ggUHJvZHVjdHMsIE4uVi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KLSAqCi0gKiBIaXN0b3J5OgotICoKLSAqIDIwMDItMDMtMTMgICBUb21hcyBLYXNwYXJlayAgaW5pdGlhbCByZWxlYXNlIC0gYmFzZWQgb24gdWRhMTM0MS5jIGZyb20gT1NTCi0gKiAyMDAyLTAzLTI4ICAgVG9tYXMgS2FzcGFyZWsgIGJhc2ljIG1peGVyIGlzIHdvcmtpbmcgKHZvbHVtZSwgYmFzcywgdHJlYmxlKQotICogMjAwMi0wMy0zMCAgIFRvbWFzIEthc3BhcmVrICBwcm9jIGZpbGVzeXN0ZW0gc3VwcG9ydCwgY29tcGxldGUgbWl4ZXIgYW5kIERTUAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlcyBzdXBwb3J0Ci0gKiAyMDAyLTA0LTEyCVRvbWFzIEthc3BhcmVrCXByb2MgaW50ZXJmYWNlIHVwZGF0ZSwgY29kZSBjbGVhbnVwCi0gKiAyMDAyLTA1LTEyICAgVG9tYXMgS2FzcGFyZWsgIGFub3RoZXIgY29kZSBjbGVhbnVwCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+Ci0KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotCi0jaW5jbHVkZSA8c291bmQvY29yZS5oPgotI2luY2x1ZGUgPHNvdW5kL2NvbnRyb2wuaD4KLSNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+Ci0jaW5jbHVkZSA8c291bmQvaW5mby5oPgotCi0jaW5jbHVkZSA8bGludXgvbDMvbDMuaD4KLQotI2luY2x1ZGUgPHNvdW5kL3VkYTEzNDEuaD4KLQotLyoge3t7IEhXIHJlZ3MgZGVmaW5pdGlvbiAqLwotCi0jZGVmaW5lIFNUQVQwICAgICAgICAgICAgICAgICAgIDB4MDAKLSNkZWZpbmUgU1RBVDEJCQkweDgwCi0jZGVmaW5lIFNUQVRfTUFTSyAgICAgICAgICAgICAgIDB4ODAKLQotI2RlZmluZSBEQVRBMF8wCQkJMHgwMAotI2RlZmluZSBEQVRBMF8xCQkJMHg0MAotI2RlZmluZSBEQVRBMF8yCQkJMHg4MAotI2RlZmluZSBEQVRBX01BU0sgICAgICAgICAgICAgICAweGMwCi0KLSNkZWZpbmUgSVNfREFUQTAoeCkgICAgICgoeCkgPj0gZGF0YTBfMCAmJiAoeCkgPD0gZGF0YTBfMikKLSNkZWZpbmUgSVNfREFUQTEoeCkgICAgICgoeCkgPT0gZGF0YTEpCi0jZGVmaW5lIElTX1NUQVRVUyh4KSAgICAoKHgpID09IHN0YXQwIHx8ICh4KSA9PSBzdGF0MSkKLSNkZWZpbmUgSVNfRVhURU5EKHgpICAgKCh4KSA+PSBleHQwICYmICh4KSA8PSBleHQ2KQotCi0vKiB9fX0gKi8KLQotCi1zdGF0aWMgY29uc3QgY2hhciAqcGVha19uYW1lc1tdID0gewotCSJiZWZvcmUiLAotCSJhZnRlciIsCi19OwotCi1zdGF0aWMgY29uc3QgY2hhciAqZmlsdGVyX25hbWVzW10gPSB7Ci0JImZsYXQiLAotCSJtaW4iLAotCSJtaW4iLAotCSJtYXgiLAotfTsKLQotc3RhdGljIGNvbnN0IGNoYXIgKm1peGVyX25hbWVzW10gPSB7Ci0JImRvdWJsZSBkaWZmZXJlbnRpYWwiLAotCSJpbnB1dCBjaGFubmVsIDEgKGxpbmUgaW4pIiwKLQkiaW5wdXQgY2hhbm5lbCAyIChtaWNyb3Bob25lKSIsCi0JImRpZ2l0YWwgbWl4ZXIiLAotfTsKLQotc3RhdGljIGNvbnN0IGNoYXIgKmRlZW1wX25hbWVzW10gPSB7Ci0JIm5vbmUiLAotCSIzMiBrSHoiLAotCSI0NC4xIGtIeiIsCi0JIjQ4IGtIeiIsICAgICAgICAKLX07Ci0KLWVudW0gdWRhMTM0MV9yZWdzX25hbWVzIHsKLQlzdGF0MCwKLQlzdGF0MSwKLQlkYXRhMF8wLAotCWRhdGEwXzEsCi0JZGF0YTBfMiwKLQlkYXRhMSwKLQlleHQwLAotCWV4dDEsCi0JZXh0MiwKLQllbXB0eSwKLQlleHQ0LAotCWV4dDUsCi0JZXh0NiwKLQl1ZGExMzQxX3JlZ19sYXN0LAotfTsKLQotc3RhdGljIGNvbnN0IGNoYXIgKnVkYTEzNDFfcmVnX25hbWVzW10gPSB7Ci0JInN0YXQgMCAiLAotCSJzdGF0IDEgIiwKLQkiZGF0YSAwMCIsCi0JImRhdGEgMDEiLAotCSJkYXRhIDAyIiwKLQkiZGF0YSAxICIsCi0JImV4dCAwIiwKLQkiZXh0IDEiLAotCSJleHQgMiIsCi0JImVtcHR5IiwKLQkiZXh0IDQiLAotCSJleHQgNSIsCi0JImV4dCA2IiwKLX07Ci0KLXN0YXRpYyBjb25zdCBpbnQgdWRhMTM0MV9lbnVtX2l0ZW1zW10gPSB7Ci0JMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKLQkyLCAvL3BlYWsgLSBiZWZvcmUvYWZ0ZXIKLQk0LCAvL2RlZW1wIC0gbm9uZS8zMi80NC4xLzQ4Ci0JMCwKLQk0LCAvL2ZpbHRlciAtIGZsYXQvbWluL21pbi9tYXgKLQkwLCAwLCAwLAotCTQsIC8vbWl4ZXIgLSBkaWZmZXIvbGluZS9taWMvbWl4ZXIKLQkwLCAwLCAwLCAwLCAwLAotfTsKLQotc3RhdGljIGNvbnN0IGNoYXIgKiogdWRhMTM0MV9lbnVtX25hbWVzW10gPSB7Ci0JTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKLQlwZWFrX25hbWVzLCAvL3BlYWsgLSBiZWZvcmUvYWZ0ZXIKLQlkZWVtcF9uYW1lcywgLy9kZWVtcCAtIG5vbmUvMzIvNDQuMS80OAotCU5VTEwsCi0JZmlsdGVyX25hbWVzLCAvL2ZpbHRlciAtIGZsYXQvbWluL21pbi9tYXgKLQlOVUxMLCBOVUxMLCBOVUxMLAotCW1peGVyX25hbWVzLCAvL21peGVyIC0gZGlmZmVyL2xpbmUvbWljL21peGVyCi0JTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKLX07Ci0KLXR5cGVkZWYgaW50IHVkYTEzNDFfY2ZnW0NNRF9MQVNUXTsKLQotc3RydWN0IHVkYTEzNDEgewotCWludCAoKndyaXRlKSAoc3RydWN0IGwzX2NsaWVudCAqdWRhMTM0MSwgdW5zaWduZWQgc2hvcnQgcmVnLCB1bnNpZ25lZCBzaG9ydCB2YWwpOwotCWludCAoKnJlYWQpIChzdHJ1Y3QgbDNfY2xpZW50ICp1ZGExMzQxLCB1bnNpZ25lZCBzaG9ydCByZWcpOyAgICAgICAgCi0JdW5zaWduZWQgY2hhciByZWdzW3VkYTEzNDFfcmVnX2xhc3RdOwotCWludCBhY3RpdmU7Ci0Jc3BpbmxvY2tfdCByZWdfbG9jazsKLQlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7Ci0JdWRhMTM0MV9jZmcgY2ZnOwotI2lmZGVmIENPTkZJR19QTQotCXVuc2lnbmVkIGNoYXIgc3VzcGVuZF9yZWdzW3VkYTEzNDFfcmVnX2xhc3RdOwotCXVkYTEzNDFfY2ZnIHN1c3BlbmRfY2ZnOwotI2VuZGlmCi19OwotCi0vKiB0cmFuc2ZlciA4Yml0IGludGVnZXIgaW50byBzdHJpbmcgd2l0aCBiaW5hcnkgcmVwcmVzZW50YXRpb24gKi8KLXN0YXRpYyB2b2lkIGludDJzdHJfYmluOCh1aW50OF90IHZhbCwgY2hhciAqYnVmKQotewotCWNvbnN0IGludCBzaXplID0gc2l6ZW9mKHZhbCkgKiA4OwotCWludCBpOwotCi0JZm9yIChpPSAwOyBpIDwgc2l6ZTsgaSsrKXsKLQkJKihidWYrKykgPSAodmFsID4+IChzaXplIC0gMSkpID8gJzEnIDogJzAnOwotCQl2YWwgPDw9IDE7Ci0JfQotCSpidWYgPSAnXDAnOyAvL2VuZCB0aGUgc3RyaW5nIHdpdGggemVybwotfQotCi0vKiB7e3sgSFcgbWFuaXB1bGF0aW9uIHJvdXRpbmVzICovCi0KLXN0YXRpYyBpbnQgc25kX3VkYTEzNDFfY29kZWNfd3JpdGUoc3RydWN0IGwzX2NsaWVudCAqY2xudCwgdW5zaWduZWQgc2hvcnQgcmVnLCB1bnNpZ25lZCBzaG9ydCB2YWwpCi17Ci0Jc3RydWN0IHVkYTEzNDEgKnVkYSA9IGNsbnQtPmRyaXZlcl9kYXRhOwotCXVuc2lnbmVkIGNoYXIgYnVmWzJdID0geyAweGMwLCAweGUwIH07IC8vIGZvciBFWFQgYWRkcmVzc2luZwotCWludCBlcnIgPSAwOwotCi0JdWRhLT5yZWdzW3JlZ10gPSB2YWw7Ci0KLQlpZiAodWRhLT5hY3RpdmUpIHsKLQkJaWYgKElTX0RBVEEwKHJlZykpIHsKLQkJCWVyciA9IGwzX3dyaXRlKGNsbnQsIFVEQTEzNDFfREFUQTAsIChjb25zdCB1bnNpZ25lZCBjaGFyICopJnZhbCwgMSk7Ci0JCX0gZWxzZSBpZiAoSVNfREFUQTEocmVnKSkgewotCQkJZXJyID0gbDNfd3JpdGUoY2xudCwgVURBMTM0MV9EQVRBMSwgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikmdmFsLCAxKTsKLQkJfSBlbHNlIGlmIChJU19TVEFUVVMocmVnKSkgewotCQkJZXJyID0gbDNfd3JpdGUoY2xudCwgVURBMTM0MV9TVEFUVVMsIChjb25zdCB1bnNpZ25lZCBjaGFyICopJnZhbCwgMSk7Ci0JCX0gZWxzZSBpZiAoSVNfRVhURU5EKHJlZykpIHsKLQkJCWJ1ZlswXSB8PSAocmVnIC0gZXh0MCkgJiAweDc7ICAgLy9FWFQgYWRkcmVzcwotCQkJYnVmWzFdIHw9IHZhbDsgICAgICAgICAgICAgICAgICAvL0VYVCBkYXRhCi0JCQllcnIgPSBsM193cml0ZShjbG50LCBVREExMzQxX0RBVEEwLCAoY29uc3QgdW5zaWduZWQgY2hhciAqKWJ1ZiwgMik7Ci0JCX0KLQl9IGVsc2UKLQkJcHJpbnRrKEtFUk5fRVJSICJVREExMzQxIGNvZGVjIG5vdCBhY3RpdmUhXG4iKTsKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IHNuZF91ZGExMzQxX2NvZGVjX3JlYWQoc3RydWN0IGwzX2NsaWVudCAqY2xudCwgdW5zaWduZWQgc2hvcnQgcmVnKQotewotCXVuc2lnbmVkIGNoYXIgdmFsOwotCWludCBlcnI7Ci0KLQllcnIgPSBsM19yZWFkKGNsbnQsIHJlZywgJnZhbCwgMSk7Ci0JaWYgKGVyciA9PSAxKQotCQkvLyB1c2UganVzdCA2Yml0cyAtIHRoZSByZXN0IGlzIGFkZHJlc3Mgb2YgdGhlIHJlZwotCQlyZXR1cm4gdmFsICYgNjM7Ci0JcmV0dXJuIGVyciA8IDAgPyBlcnIgOiAtRUlPOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBzbmRfdWRhMTM0MV92YWxpZF9yZWcoc3RydWN0IGwzX2NsaWVudCAqY2xudCwgdW5zaWduZWQgc2hvcnQgcmVnKQotewotCXJldHVybiByZWcgPCB1ZGExMzQxX3JlZ19sYXN0OwotfQotCi1zdGF0aWMgaW50IHNuZF91ZGExMzQxX3VwZGF0ZV9iaXRzKHN0cnVjdCBsM19jbGllbnQgKmNsbnQsIHVuc2lnbmVkIHNob3J0IHJlZywKLQkJCQkgICB1bnNpZ25lZCBzaG9ydCBtYXNrLCB1bnNpZ25lZCBzaG9ydCBzaGlmdCwKLQkJCQkgICB1bnNpZ25lZCBzaG9ydCB2YWx1ZSwgaW50IGZsdXNoKQotewotCWludCBjaGFuZ2U7Ci0JdW5zaWduZWQgc2hvcnQgb2xkLCBuZXc7Ci0Jc3RydWN0IHVkYTEzNDEgKnVkYSA9IGNsbnQtPmRyaXZlcl9kYXRhOwotCi0jaWYgMAotCXByaW50ayhLRVJOX0RFQlVHICJ1cGRhdGVfYml0czogcmVnOiAlcyBtYXNrOiAlZCBzaGlmdDogJWQgdmFsOiAlZFxuIiwKLQkgICAgICAgdWRhMTM0MV9yZWdfbmFtZXNbcmVnXSwgbWFzaywgc2hpZnQsIHZhbHVlKTsKLSNlbmRpZgotICAgICAgICAKLQlpZiAoIXNuZF91ZGExMzQxX3ZhbGlkX3JlZyhjbG50LCByZWcpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlzcGluX2xvY2soJnVkYS0+cmVnX2xvY2spOwotCW9sZCA9IHVkYS0+cmVnc1tyZWddOwotCW5ldyA9IChvbGQgJiB+KG1hc2sgPDwgc2hpZnQpKSB8ICh2YWx1ZSA8PCBzaGlmdCk7Ci0JY2hhbmdlID0gb2xkICE9IG5ldzsKLQlpZiAoY2hhbmdlKSB7Ci0JCWlmIChmbHVzaCkgdWRhLT53cml0ZShjbG50LCByZWcsIG5ldyk7Ci0JCXVkYS0+cmVnc1tyZWddID0gbmV3OwotCX0KLQlzcGluX3VubG9jaygmdWRhLT5yZWdfbG9jayk7Ci0JcmV0dXJuIGNoYW5nZTsKLX0KLQotc3RhdGljIGludCBzbmRfdWRhMTM0MV9jZmdfd3JpdGUoc3RydWN0IGwzX2NsaWVudCAqY2xudCwgdW5zaWduZWQgc2hvcnQgd2hhdCwKLQkJCQkgdW5zaWduZWQgc2hvcnQgdmFsdWUsIGludCBmbHVzaCkKLXsKLQlzdHJ1Y3QgdWRhMTM0MSAqdWRhID0gY2xudC0+ZHJpdmVyX2RhdGE7Ci0JaW50IHJldCA9IDA7Ci0jaWZkZWYgQ09ORklHX1BNCi0JaW50IHJlZzsKLSNlbmRpZgotCi0jaWYgMAotCXByaW50ayhLRVJOX0RFQlVHICJjZmdfd3JpdGUgd2hhdDogJWQgdmFsdWU6ICVkXG4iLCB3aGF0LCB2YWx1ZSk7Ci0jZW5kaWYKLQotCXVkYS0+Y2ZnW3doYXRdID0gdmFsdWU7Ci0gICAgICAgIAotCXN3aXRjaCh3aGF0KSB7Ci0JY2FzZSBDTURfUkVTRVQ6Ci0JCXJldCA9IHNuZF91ZGExMzQxX3VwZGF0ZV9iaXRzKGNsbnQsIGRhdGEwXzIsIDEsIDIsIDEsIGZsdXNoKTsJLy8gTVVURQotCQlyZXQgPSBzbmRfdWRhMTM0MV91cGRhdGVfYml0cyhjbG50LCBzdGF0MCwgMSwgNiwgMSwgZmx1c2gpOwkvLyBSRVNFVAotCQlyZXQgPSBzbmRfdWRhMTM0MV91cGRhdGVfYml0cyhjbG50LCBzdGF0MCwgMSwgNiwgMCwgZmx1c2gpOwkvLyBSRVNUT1JFCi0JCXVkYS0+Y2ZnW0NNRF9SRVNFVF09MDsKLQkJYnJlYWs7Ci0JY2FzZSBDTURfRlM6Ci0JCXJldCA9IHNuZF91ZGExMzQxX3VwZGF0ZV9iaXRzKGNsbnQsIHN0YXQwLCAzLCA0LCB2YWx1ZSwgZmx1c2gpOwotCQlicmVhazsKLQljYXNlIENNRF9GT1JNQVQ6Ci0JCXJldCA9IHNuZF91ZGExMzQxX3VwZGF0ZV9iaXRzKGNsbnQsIHN0YXQwLCA3LCAxLCB2YWx1ZSwgZmx1c2gpOwotCQlicmVhazsKLQljYXNlIENNRF9PR0FJTjoKLQkJcmV0ID0gc25kX3VkYTEzNDFfdXBkYXRlX2JpdHMoY2xudCwgc3RhdDEsIDEsIDYsIHZhbHVlLCBmbHVzaCk7Ci0JCWJyZWFrOwotCWNhc2UgQ01EX0lHQUlOOgotCQlyZXQgPSBzbmRfdWRhMTM0MV91cGRhdGVfYml0cyhjbG50LCBzdGF0MSwgMSwgNSwgdmFsdWUsIGZsdXNoKTsKLQkJYnJlYWs7Ci0JY2FzZSBDTURfREFDOgotCQlyZXQgPSBzbmRfdWRhMTM0MV91cGRhdGVfYml0cyhjbG50LCBzdGF0MSwgMSwgMCwgdmFsdWUsIGZsdXNoKTsKLQkJYnJlYWs7Ci0JY2FzZSBDTURfQURDOgotCQlyZXQgPSBzbmRfdWRhMTM0MV91cGRhdGVfYml0cyhjbG50LCBzdGF0MSwgMSwgMSwgdmFsdWUsIGZsdXNoKTsKLQkJYnJlYWs7Ci0JY2FzZSBDTURfVk9MVU1FOgotCQlyZXQgPSBzbmRfdWRhMTM0MV91cGRhdGVfYml0cyhjbG50LCBkYXRhMF8wLCA2MywgMCwgdmFsdWUsIGZsdXNoKTsKLQkJYnJlYWs7Ci0JY2FzZSBDTURfQkFTUzoKLQkJcmV0ID0gc25kX3VkYTEzNDFfdXBkYXRlX2JpdHMoY2xudCwgZGF0YTBfMSwgMTUsIDIsIHZhbHVlLCBmbHVzaCk7Ci0JCWJyZWFrOwotCWNhc2UgQ01EX1RSRUJCTEU6Ci0JCXJldCA9IHNuZF91ZGExMzQxX3VwZGF0ZV9iaXRzKGNsbnQsIGRhdGEwXzEsIDMsIDAsIHZhbHVlLCBmbHVzaCk7Ci0JCWJyZWFrOwotCWNhc2UgQ01EX1BFQUs6Ci0JCXJldCA9IHNuZF91ZGExMzQxX3VwZGF0ZV9iaXRzKGNsbnQsIGRhdGEwXzIsIDEsIDUsIHZhbHVlLCBmbHVzaCk7Ci0JCWJyZWFrOwotCWNhc2UgQ01EX0RFRU1QOgotCQlyZXQgPSBzbmRfdWRhMTM0MV91cGRhdGVfYml0cyhjbG50LCBkYXRhMF8yLCAzLCAzLCB2YWx1ZSwgZmx1c2gpOwotCQlicmVhazsKLQljYXNlIENNRF9NVVRFOgotCQlyZXQgPSBzbmRfdWRhMTM0MV91cGRhdGVfYml0cyhjbG50LCBkYXRhMF8yLCAxLCAyLCB2YWx1ZSwgZmx1c2gpOwotCQlicmVhazsKLQljYXNlIENNRF9GSUxURVI6Ci0JCXJldCA9IHNuZF91ZGExMzQxX3VwZGF0ZV9iaXRzKGNsbnQsIGRhdGEwXzIsIDMsIDAsIHZhbHVlLCBmbHVzaCk7Ci0JCWJyZWFrOwotCWNhc2UgQ01EX0NIMToKLQkJcmV0ID0gc25kX3VkYTEzNDFfdXBkYXRlX2JpdHMoY2xudCwgZXh0MCwgMzEsIDAsIHZhbHVlLCBmbHVzaCk7Ci0JCWJyZWFrOwotCWNhc2UgQ01EX0NIMjoKLQkJcmV0ID0gc25kX3VkYTEzNDFfdXBkYXRlX2JpdHMoY2xudCwgZXh0MSwgMzEsIDAsIHZhbHVlLCBmbHVzaCk7Ci0JCWJyZWFrOwotCWNhc2UgQ01EX01JQzoKLQkJcmV0ID0gc25kX3VkYTEzNDFfdXBkYXRlX2JpdHMoY2xudCwgZXh0MiwgNywgMiwgdmFsdWUsIGZsdXNoKTsKLQkJYnJlYWs7Ci0JY2FzZSBDTURfTUlYRVI6Ci0JCXJldCA9IHNuZF91ZGExMzQxX3VwZGF0ZV9iaXRzKGNsbnQsIGV4dDIsIDMsIDAsIHZhbHVlLCBmbHVzaCk7Ci0JCWJyZWFrOwotCWNhc2UgQ01EX0FHQzoKLQkJcmV0ID0gc25kX3VkYTEzNDFfdXBkYXRlX2JpdHMoY2xudCwgZXh0NCwgMSwgNCwgdmFsdWUsIGZsdXNoKTsKLQkJYnJlYWs7Ci0JY2FzZSBDTURfSUc6Ci0JCXJldCA9IHNuZF91ZGExMzQxX3VwZGF0ZV9iaXRzKGNsbnQsIGV4dDQsIDMsIDAsIHZhbHVlICYgMHgzLCBmbHVzaCk7Ci0JCXJldCA9IHNuZF91ZGExMzQxX3VwZGF0ZV9iaXRzKGNsbnQsIGV4dDUsIDMxLCAwLCB2YWx1ZSA+PiAyLCBmbHVzaCk7Ci0JCWJyZWFrOwotCWNhc2UgQ01EX0FHQ19USU1FOgotCQlyZXQgPSBzbmRfdWRhMTM0MV91cGRhdGVfYml0cyhjbG50LCBleHQ2LCA3LCAyLCB2YWx1ZSwgZmx1c2gpOwotCQlicmVhazsKLQljYXNlIENNRF9BR0NfTEVWRUw6Ci0JCXJldCA9IHNuZF91ZGExMzQxX3VwZGF0ZV9iaXRzKGNsbnQsIGV4dDYsIDMsIDAsIHZhbHVlLCBmbHVzaCk7Ci0JCWJyZWFrOwotI2lmZGVmIENPTkZJR19QTQkJCi0JY2FzZSBDTURfU1VTUEVORDoKLQkJZm9yIChyZWcgPSBzdGF0MDsgcmVnIDwgdWRhMTM0MV9yZWdfbGFzdDsgcmVnKyspCi0JCQl1ZGEtPnN1c3BlbmRfcmVnc1tyZWddID0gdWRhLT5yZWdzW3JlZ107Ci0JCWZvciAocmVnID0gMDsgcmVnIDwgQ01EX0xBU1Q7IHJlZysrKQotCQkJdWRhLT5zdXNwZW5kX2NmZ1tyZWddID0gdWRhLT5jZmdbcmVnXTsKLQkJYnJlYWs7Ci0JY2FzZSBDTURfUkVTVU1FOgotCQlmb3IgKHJlZyA9IHN0YXQwOyByZWcgPCB1ZGExMzQxX3JlZ19sYXN0OyByZWcrKykKLQkJCXNuZF91ZGExMzQxX2NvZGVjX3dyaXRlKGNsbnQsIHJlZywgdWRhLT5zdXNwZW5kX3JlZ3NbcmVnXSk7Ci0JCWZvciAocmVnID0gMDsgcmVnIDwgQ01EX0xBU1Q7IHJlZysrKQotCQkJdWRhLT5jZmdbcmVnXSA9IHVkYS0+c3VzcGVuZF9jZmdbcmVnXTsKLQkJYnJlYWs7Ci0jZW5kaWYKLQlkZWZhdWx0OgotCQlyZXQgPSAtRUlOVkFMOwotCQlicmVhazsKLQl9Ci0gICAgICAgICAgICAgICAgCi0JaWYgKCF1ZGEtPmFjdGl2ZSkKLQkJcHJpbnRrKEtFUk5fRVJSICJVREExMzQxIGNvZGVjIG5vdCBhY3RpdmUhXG4iKTsgICAgICAgICAgICAgICAgCi0JcmV0dXJuIHJldDsKLX0KLQotLyogfX19ICovCi0KLS8qIHt7eyBQcm9jIGludGVyZmFjZSAqLwotI2lmZGVmIENPTkZJR19QUk9DX0ZTCi0KLXN0YXRpYyBjb25zdCBjaGFyICpmb3JtYXRfbmFtZXNbXSA9IHsKLQkiSTJTLWJ1cyIsCi0JIkxTQiAxNmJpdHMiLAotCSJMU0IgMThiaXRzIiwKLQkiTFNCIDIwYml0cyIsCi0JIk1TQiIsCi0JImluIExTQiAxNmJpdHMvb3V0IE1TQiIsCi0JImluIExTQiAxOGJpdHMvb3V0IE1TQiIsCi0JImluIExTQiAyMGJpdHMvb3V0IE1TQiIsICAgICAgICAKLX07Ci0KLXN0YXRpYyBjb25zdCBjaGFyICpmc19uYW1lc1tdID0gewotCSI1MTIqZnMiLAotCSIzODQqZnMiLAotCSIyNTYqZnMiLAotCSJVbnVzZWQgLSBiYWQgdmFsdWUhIiwKLX07Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBiYXNzX3ZhbHVlc1tdWzE2XSA9IHsKLQl7IjAgZEIiLCAiMCBkQiIsICIwIGRCIiwgIjAgZEIiLCAiMCBkQiIsICIwIGRCIiwgIjAgZEIiLCAiMCBkQiIsICIwIGRCIiwgIjAgZEIiLCAiMCBkQiIsCi0JICIwIGRCIiwgIjAgZEIiLCAiMCBkQiIsICIwIGRCIiwgInVuZGVmaW5lZCIsIH0sIC8vZmxhdAotCXsiMCBkQiIsICIyIGRCIiwgIjQgZEIiLCAiNiBkQiIsICI4IGRCIiwgIjEwIGRCIiwgIjEyIGRCIiwgIjE0IGRCIiwgIjE2IGRCIiwgIjE4IGRCIiwgIjE4IGRCIiwKLQkgIjE4IGRCIiwgIjE4IGRCIiwgIjE4IGRCIiwgIjE4IGRCIiwgInVuZGVmaW5lZCIsfSwgLy8gbWluCi0JeyIwIGRCIiwgIjIgZEIiLCAiNCBkQiIsICI2IGRCIiwgIjggZEIiLCAiMTAgZEIiLCAiMTIgZEIiLCAiMTQgZEIiLCAiMTYgZEIiLCAiMTggZEIiLCAiMTggZEIiLAotCSAiMTggZEIiLCAiMTggZEIiLCAiMTggZEIiLCAiMTggZEIiLCAidW5kZWZpbmVkIix9LCAvLyBtaW4KLQl7IjAgZEIiLCAiMiBkQiIsICI0IGRCIiwgIjYgZEIiLCAiOCBkQiIsICIxMCBkQiIsICIxMiBkQiIsICIxNCBkQiIsICIxNiBkQiIsICIxOCBkQiIsICIyMCBkQiIsCi0JICIyMiBkQiIsICIyNCBkQiIsICIyNCBkQiIsICIyNCBkQiIsICJ1bmRlZmluZWQiLH0sIC8vIG1heAotfTsKLQotc3RhdGljIGNvbnN0IGNoYXIgKm1pY19zZW5zX3ZhbHVlW10gPSB7Ci0JIi0zIGRCIiwgIjAgZEIiLCAiMyBkQiIsICI5IGRCIiwgIjE1IGRCIiwgIjIxIGRCIiwgIjI3IGRCIiwgIm5vdCB1c2VkIiwKLX07Ci0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBBR0NfYXRpbWVbXSA9IHsKLQkxMSwgMTYsIDExLCAxNiwgMjEsIDExLCAxNiwgMjEsCi19OwotCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgQUdDX2R0aW1lW10gPSB7Ci0JMTAwLCAxMDAsIDIwMCwgMjAwLCAyMDAsIDQwMCwgNDAwLCA0MDAsCi19OwotCi1zdGF0aWMgY29uc3QgY2hhciAqQUdDX2xldmVsW10gPSB7Ci0JIi05LjAiLCAiLTExLjUiLCAiLTE1LjAiLCAiLTE3LjUiLAotfTsKLQotc3RhdGljIGNvbnN0IGNoYXIgKmlnX3NtYWxsX3ZhbHVlW10gPSB7Ci0JIi0zLjAiLCAiLTIuNSIsICItMi4wIiwgIi0xLjUiLCAiLTEuMCIsICItMC41IiwKLX07Ci0KLS8qCi0gKiB0aGlzIHdhcyBjb21wdXRlZCBhcyBwZWFrX3ZhbHVlW2ldID0gcG93KCg2My1pKSoxLjQyLDEuMDEzKQotICoKLSAqIFVEQTEzNDEgZGF0YXNoZWV0IG9uIHBhZ2UgMjE6IFBlYWsgdmFsdWUgKGRCKSA9IChQZWFrIGxldmVsIC0gNjMuNSkqNSpsb2cyCi0gKiBUaGVyZSBpcyBhbiB0YWJsZSB3aXRoIHRoZXNlIHZhbHVlcyBbbGV2ZWxdPXZhbHVlOiBbM109LTkwLjMxLCBbN109LTg0LjI5Ci0gKiBbNjFdPS0yLjc4LCBbNjJdID0gLTEuNDgsIFs2M10gPSAwLjAKLSAqIEkgdHJpZWQgdG8gY29tcHV0ZSBpdCwgYnV0IHVzaW5nIGJ1dCBldmVuIHVzaW5nIGxvZ2FyaXRobSB3aXRoIGJhc2UgZWl0aGVyIDEwIG9yIDIKLSAqIGkgd2FzJ24gYWJsZSB0byBnZXQgdmFsdWVzIGluIHRoZSB0YWJsZSBmcm9tIHRoZSBmb3JtdWxhLiBTbyBJIGNvbnN0cnVjdGVkIGFub3RoZXIKLSAqIGZvcm11bGEgKHNlZSBhYm92ZSkgdG8gaW50ZXJwb2xhdGUgdGhlIHZhbHVlcyBhcyBnb29kIGFzIHBvc3NpYmxlLiBJZiB0aGVyZSBpcyBzb21lCi0gKiBtaXN0YWtlLCBwbGVhc2UgY29udGFjdCBtZSBvbiB0b21hcy5rYXNwYXJla0BzZXpuYW0uY3ouIFRoYW5rcy4KLSAqIFVEQTEzNDFUUyBkYXRhc2hlZXQgaXMgYXZhaWxhYmxlIGF0OgotICogICBodHRwOi8vd3d3LXVzOS5zZW1pY29uZHVjdG9ycy5jb20vYWNyb2JhdC9kYXRhc2hlZXRzL1VEQTEzNDFUU18zLnBkZiAKLSAqLwotc3RhdGljIGNvbnN0IGNoYXIgKnBlYWtfdmFsdWVbXSA9IHsKLQkiLUlORiBkQiIsICJOLkEuIiwgIk4uQSIsICI5MC4zMSBkQiIsICJOLkEuIiwgIk4uQS4iLCAiTi5BLiIsICItODQuMjkgZEIiLAotCSItODIuNjUgZEIiLCAiLTgxLjEzIGRCIiwgIi03OS42MSBkQiIsICItNzguMDkgZEIiLCAiLTc2LjU3IGRCIiwgIi03NS4wNSBkQiIsICItNzMuNTMgZEIiLAotCSItNzIuMDEgZEIiLCAiLTcwLjQ5IGRCIiwgIi02OC45NyBkQiIsICItNjcuNDUgZEIiLCAiLTY1LjkzIGRCIiwgIi02NC40MSBkQiIsICItNjIuOTAgZEIiLAotCSItNjEuMzggZEIiLCAiLTU5Ljg2IGRCIiwgIi01OC4zNSBkQiIsICItNTYuODMgZEIiLCAiLTU1LjMyIGRCIiwgIi01My44MCBkQiIsICItNTIuMjkgZEIiLAotCSItNTAuNzggZEIiLCAiLTQ5LjI2IGRCIiwgIi00Ny43NSBkQiIsICItNDYuMjQgZEIiLCAiLTQ0LjczIGRCIiwgIi00My4yMiBkQiIsICItNDEuNzEgZEIiLAotCSItNDAuMjAgZEIiLCAiLTM4LjY5IGRCIiwgIi0zNy4xOSBkQiIsICItMzUuNjggZEIiLCAiLTM0LjE3IGRCIiwgIi0zMi42NyBkQiIsICItMzEuMTcgZEIiLAotCSItMjkuNjYgZEIiLCAiLTI4LjE2IGRCIiwgIi0yNi42NiBkQiIsICItMjUuMTYgZEIiLCAiLTIzLjY2IGRCIiwgIi0yMi4xNiBkQiIsICItMjAuNjcgZEIiLAotCSItMTkuMTcgZEIiLCAiLTE3LjY4IGRCIiwgIi0xNi4xOSBkQiIsICItMTQuNzAgZEIiLCAiLTEzLjIxIGRCIiwgIi0xMS43MiBkQiIsICItMTAuMjQgZEIiLAotCSItOC43NiBkQiIsICItNy4yOCBkQiIsICItNS44MSBkQiIsICItNC4zNCBkQiIsICItMi44OCBkQiIsICItMS40MyBkQiIsICIwLjAwIGRCIiwKLX07Ci0KLXN0YXRpYyB2b2lkIHNuZF91ZGExMzQxX3Byb2NfcmVhZChzdHJ1Y3Qgc25kX2luZm9fZW50cnkgKmVudHJ5LCAKLQkJCQkgIHN0cnVjdCBzbmRfaW5mb19idWZmZXIgKmJ1ZmZlcikKLXsKLQlzdHJ1Y3QgbDNfY2xpZW50ICpjbG50ID0gZW50cnktPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgdWRhMTM0MSAqdWRhID0gY2xudC0+ZHJpdmVyX2RhdGE7Ci0JaW50IHBlYWs7Ci0KLQlwZWFrID0gc25kX3VkYTEzNDFfY29kZWNfcmVhZChjbG50LCBVREExMzQxX0RBVEExKTsKLQlpZiAocGVhayA8IDApCi0JCXBlYWsgPSAwOwotCQotCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiVzXG5cbiIsIHVkYS0+Y2FyZC0+bG9uZ25hbWUpOwotCi0JLy8gZm9yIGluZm9ybWF0aW9uIGFib3V0IGNvbXB1dGVkIHZhbHVlcyBzZWUgVURBMTM0MVRTIGRhdGFzaGVldCBwYWdlcyAxNSAtIDIxCi0Jc25kX2lwcmludGYoYnVmZmVyLCAiREFDIHBvd2VyICAgICAgICAgICA6ICVzXG4iLCB1ZGEtPmNmZ1tDTURfREFDXSA/ICJvbiIgOiAib2ZmIik7Ci0Jc25kX2lwcmludGYoYnVmZmVyLCAiQURDIHBvd2VyICAgICAgICAgICA6ICVzXG4iLCB1ZGEtPmNmZ1tDTURfQURDXSA/ICJvbiIgOiAib2ZmIik7Ci0gCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIkNsb2NrIGZyZXF1ZW5jeSAgICAgOiAlc1xuIiwgZnNfbmFtZXNbdWRhLT5jZmdbQ01EX0ZTXV0pOwotCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIkRhdGEgZm9ybWF0ICAgICAgICAgOiAlc1xuXG4iLCBmb3JtYXRfbmFtZXNbdWRhLT5jZmdbQ01EX0ZPUk1BVF1dKTsKLQotCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIkZpbHRlciBtb2RlICAgICAgICAgOiAlc1xuIiwgZmlsdGVyX25hbWVzW3VkYS0+Y2ZnW0NNRF9GSUxURVJdXSk7Ci0Jc25kX2lwcmludGYoYnVmZmVyLCAiTWl4ZXIgbW9kZSAgICAgICAgICA6ICVzXG4iLCBtaXhlcl9uYW1lc1t1ZGEtPmNmZ1tDTURfTUlYRVJdXSk7Ci0Jc25kX2lwcmludGYoYnVmZmVyLCAiRGUtZW1waGFzaXMgICAgICAgICA6ICVzXG4iLCBkZWVtcF9uYW1lc1t1ZGEtPmNmZ1tDTURfREVFTVBdXSk7CQotCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlBlYWsgZGV0ZWN0aW9uIHBvcy4gOiAlc1xuIiwgdWRhLT5jZmdbQ01EX1BFQUtdID8gImFmdGVyIiA6ICJiZWZvcmUiKTsKLQlzbmRfaXByaW50ZihidWZmZXIsICJQZWFrIHZhbHVlICAgICAgICAgIDogJXNcblxuIiwgcGVha192YWx1ZVtwZWFrXSk7CQkKLQkKLQlzbmRfaXByaW50ZihidWZmZXIsICJBdXRvbWF0aWMgR2FpbiBDdHJsIDogJXNcbiIsIHVkYS0+Y2ZnW0NNRF9BR0NdID8gIm9uIiA6ICJvZmYiKTsKLQlzbmRfaXByaW50ZihidWZmZXIsICJBR0MgYXR0YWNrIHRpbWUgICAgIDogJWQgbXNcbiIsIEFHQ19hdGltZVt1ZGEtPmNmZ1tDTURfQUdDX1RJTUVdXSk7Ci0Jc25kX2lwcmludGYoYnVmZmVyLCAiQUdDIGRlY2F5IHRpbWUgICAgICA6ICVkIG1zXG4iLCBBR0NfZHRpbWVbdWRhLT5jZmdbQ01EX0FHQ19USU1FXV0pOwotCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIkFHQyBvdXRwdXQgbGV2ZWwgICAgOiAlcyBkQlxuXG4iLCBBR0NfbGV2ZWxbdWRhLT5jZmdbQ01EX0FHQ19MRVZFTF1dKTsKLQotCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIk11dGUgICAgICAgICAgICAgICAgOiAlc1xuIiwgdWRhLT5jZmdbQ01EX01VVEVdID8gIm9uIiA6ICJvZmYiKTsKLQotCWlmICh1ZGEtPmNmZ1tDTURfVk9MVU1FXSA9PSAwKQotCQlzbmRfaXByaW50ZihidWZmZXIsICJWb2x1bWUgICAgICAgICAgICAgIDogMCBkQlxuIik7Ci0JZWxzZSBpZiAodWRhLT5jZmdbQ01EX1ZPTFVNRV0gPCA2MikKLQkJc25kX2lwcmludGYoYnVmZmVyLCAiVm9sdW1lICAgICAgICAgICAgICA6ICVkIGRCXG4iLCAtMSp1ZGEtPmNmZ1tDTURfVk9MVU1FXSArMSk7Ci0JZWxzZQotCQlzbmRfaXByaW50ZihidWZmZXIsICJWb2x1bWUgICAgICAgICAgICAgIDogLUlORiBkQlxuIik7Ci0Jc25kX2lwcmludGYoYnVmZmVyLCAiQmFzcyAgICAgICAgICAgICAgICA6ICVzXG4iLCBiYXNzX3ZhbHVlc1t1ZGEtPmNmZ1tDTURfRklMVEVSXV1bdWRhLT5jZmdbQ01EX0JBU1NdXSk7Ci0Jc25kX2lwcmludGYoYnVmZmVyLCAiVHJlYmJsZSAgICAgICAgICAgICA6ICVkIGRCXG4iLCB1ZGEtPmNmZ1tDTURfRklMVEVSXSA/IDIqdWRhLT5jZmdbQ01EX1RSRUJCTEVdIDogMCk7Ci0Jc25kX2lwcmludGYoYnVmZmVyLCAiSW5wdXQgR2FpbiAoNmRCKSAgICA6ICVzXG4iLCB1ZGEtPmNmZ1tDTURfSUdBSU5dID8gIm9uIiA6ICJvZmYiKTsKLQlzbmRfaXByaW50ZihidWZmZXIsICJPdXRwdXQgR2FpbiAoNmRCKSAgIDogJXNcbiIsIHVkYS0+Y2ZnW0NNRF9PR0FJTl0gPyAib24iIDogIm9mZiIpOwotCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIk1pYyBzZW5zaXRpdml0eSAgICAgOiAlc1xuIiwgbWljX3NlbnNfdmFsdWVbdWRhLT5jZmdbQ01EX01JQ11dKTsKLQotCQotCWlmKHVkYS0+Y2ZnW0NNRF9DSDFdIDwgMzEpCi0JCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIk1peGVyIGdhaW4gY2hhbm5lbCAxOiAtJWQuJWMgZEJcbiIsCi0JCQkgICAgKCh1ZGEtPmNmZ1tDTURfQ0gxXSA+PiAxKSAqIDMpICsgKHVkYS0+Y2ZnW0NNRF9DSDFdICYgMSksCi0JCQkgICAgdWRhLT5jZmdbQ01EX0NIMV0gJiAxID8gJzUnIDogJzAnKTsKLQllbHNlCi0JCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIk1peGVyIGdhaW4gY2hhbm5lbCAxOiAtSU5GIGRCXG4iKTsKLQlpZih1ZGEtPmNmZ1tDTURfQ0gyXSA8IDMxKQotCQlzbmRfaXByaW50ZihidWZmZXIsICJNaXhlciBnYWluIGNoYW5uZWwgMjogLSVkLiVjIGRCXG4iLAotCQkJICAgICgodWRhLT5jZmdbQ01EX0NIMl0gPj4gMSkgKiAzKSArICh1ZGEtPmNmZ1tDTURfQ0gyXSAmIDEpLAotCQkJICAgIHVkYS0+Y2ZnW0NNRF9DSDJdICYgMSA/ICc1JyA6ICcwJyk7Ci0JZWxzZQotCQlzbmRfaXByaW50ZihidWZmZXIsICJNaXhlciBnYWluIGNoYW5uZWwgMjogLUlORiBkQlxuIik7Ci0KLQlpZih1ZGEtPmNmZ1tDTURfSUddID4gNSkKLQkJc25kX2lwcmludGYoYnVmZmVyLCAiSW5wdXQgQW1wLiBHYWluIGNoIDI6ICVkLiVjIGRCXG4iLAotCQkJICAgICh1ZGEtPmNmZ1tDTURfSUddID4+IDEpIC0zLCB1ZGEtPmNmZ1tDTURfSUddICYgMSA/ICc1JyA6ICcwJyk7Ci0JZWxzZQotCQlzbmRfaXByaW50ZihidWZmZXIsICJJbnB1dCBBbXAuIEdhaW4gY2ggMjogJXMgZEJcbiIsICBpZ19zbWFsbF92YWx1ZVt1ZGEtPmNmZ1tDTURfSUddXSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNuZF91ZGExMzQxX3Byb2NfcmVnc19yZWFkKHN0cnVjdCBzbmRfaW5mb19lbnRyeSAqZW50cnksIAotCQkJCSAgICAgICBzdHJ1Y3Qgc25kX2luZm9fYnVmZmVyICpidWZmZXIpCi17Ci0Jc3RydWN0IGwzX2NsaWVudCAqY2xudCA9IGVudHJ5LT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHVkYTEzNDEgKnVkYSA9IGNsbnQtPmRyaXZlcl9kYXRhOwkJCi0JaW50IHJlZzsKLQljaGFyIGJ1ZlsxMl07Ci0KLQlmb3IgKHJlZyA9IDA7IHJlZyA8IHVkYTEzNDFfcmVnX2xhc3Q7IHJlZyArKykgewotCQlpZiAocmVnID09IGVtcHR5KQotCQkJY29udGludWU7Ci0JCWludDJzdHJfYmluOCh1ZGEtPnJlZ3NbcmVnXSwgYnVmKTsKLQkJc25kX2lwcmludGYoYnVmZmVyLCAiJXMgPSAlc1xuIiwgdWRhMTM0MV9yZWdfbmFtZXNbcmVnXSwgYnVmKTsKLQl9Ci0KLQlpbnQyc3RyX2Jpbjgoc25kX3VkYTEzNDFfY29kZWNfcmVhZChjbG50LCBVREExMzQxX0RBVEExKSwgYnVmKTsKLQlzbmRfaXByaW50ZihidWZmZXIsICJEQVRBMSA9ICVzXG4iLCBidWYpOwotfQotI2VuZGlmIC8qIENPTkZJR19QUk9DX0ZTICovCi0KLXN0YXRpYyB2b2lkIF9fZGV2aW5pdCBzbmRfdWRhMTM0MV9wcm9jX2luaXQoc3RydWN0IHNuZF9jYXJkICpjYXJkLCBzdHJ1Y3QgbDNfY2xpZW50ICpjbG50KQotewotCXN0cnVjdCBzbmRfaW5mb19lbnRyeSAqZW50cnk7Ci0KLQlpZiAoISBzbmRfY2FyZF9wcm9jX25ldyhjYXJkLCAidWRhMTM0MSIsICZlbnRyeSkpCi0JCXNuZF9pbmZvX3NldF90ZXh0X29wcyhlbnRyeSwgY2xudCwgc25kX3VkYTEzNDFfcHJvY19yZWFkKTsKLQlpZiAoISBzbmRfY2FyZF9wcm9jX25ldyhjYXJkLCAidWRhMTM0MS1yZWdzIiwgJmVudHJ5KSkKLQkJc25kX2luZm9fc2V0X3RleHRfb3BzKGVudHJ5LCBjbG50LCBzbmRfdWRhMTM0MV9wcm9jX3JlZ3NfcmVhZCk7Ci19Ci0KLS8qIH19fSAqLwotCi0vKiB7e3sgTWl4ZXIgY29udHJvbHMgc2V0dGluZyAqLwotCi0vKiB7e3sgVURBMTM0MSBzaW5nbGUgZnVuY3Rpb25zICovCi0KLSNkZWZpbmUgVURBMTM0MV9TSU5HTEUoeG5hbWUsIHdoZXJlLCByZWcsIHNoaWZ0LCBtYXNrLCBpbnZlcnQpIFwKLXsgLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIC5uYW1lID0geG5hbWUsIC5pbmZvID0gc25kX3VkYTEzNDFfaW5mb19zaW5nbGUsIFwKLSAgLmdldCA9IHNuZF91ZGExMzQxX2dldF9zaW5nbGUsIC5wdXQgPSBzbmRfdWRhMTM0MV9wdXRfc2luZ2xlLCBcCi0gIC5wcml2YXRlX3ZhbHVlID0gd2hlcmUgfCAocmVnIDw8IDUpIHwgKHNoaWZ0IDw8IDkpIHwgKG1hc2sgPDwgMTIpIHwgKGludmVydCA8PCAxOCkgXAotfQotCi1zdGF0aWMgaW50IHNuZF91ZGExMzQxX2luZm9fc2luZ2xlKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAotCQkJCSAgIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCi17Ci0JaW50IG1hc2sgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gMTIpICYgNjM7Ci0KLQl1aW5mby0+dHlwZSA9IG1hc2sgPT0gMSA/IFNORFJWX0NUTF9FTEVNX1RZUEVfQk9PTEVBTiA6IFNORFJWX0NUTF9FTEVNX1RZUEVfSU5URUdFUjsKLQl1aW5mby0+Y291bnQgPSAxOwotCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1pbiA9IDA7Ci0JdWluZm8tPnZhbHVlLmludGVnZXIubWF4ID0gbWFzazsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzbmRfdWRhMTM0MV9nZXRfc2luZ2xlKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAotCQkJCSAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCi17Ci0Jc3RydWN0IGwzX2NsaWVudCAqY2xudCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQlzdHJ1Y3QgdWRhMTM0MSAqdWRhID0gY2xudC0+ZHJpdmVyX2RhdGE7Ci0JaW50IHdoZXJlID0ga2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgJiAzMTsgICAgICAgIAotCWludCBtYXNrID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDEyKSAmIDYzOwotCWludCBpbnZlcnQgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gMTgpICYgMTsKLSAgICAgICAgCi0JdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSB1ZGEtPmNmZ1t3aGVyZV07Ci0JaWYgKGludmVydCkKLQkJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBtYXNrIC0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF07Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzbmRfdWRhMTM0MV9wdXRfc2luZ2xlKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAotCQkJCSAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCi17Ci0Jc3RydWN0IGwzX2NsaWVudCAqY2xudCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQlzdHJ1Y3QgdWRhMTM0MSAqdWRhID0gY2xudC0+ZHJpdmVyX2RhdGE7Ci0JaW50IHdoZXJlID0ga2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgJiAzMTsgICAgICAgIAotCWludCByZWcgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gNSkgJiAxNTsKLQlpbnQgc2hpZnQgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gOSkgJiA3OwotCWludCBtYXNrID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDEyKSAmIDYzOwotCWludCBpbnZlcnQgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gMTgpICYgMTsKLQl1bnNpZ25lZCBzaG9ydCB2YWw7Ci0KLQl2YWwgPSAodWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gJiBtYXNrKTsKLQlpZiAoaW52ZXJ0KQotCQl2YWwgPSBtYXNrIC0gdmFsOwotCi0JdWRhLT5jZmdbd2hlcmVdID0gdmFsOwotCXJldHVybiBzbmRfdWRhMTM0MV91cGRhdGVfYml0cyhjbG50LCByZWcsIG1hc2ssIHNoaWZ0LCB2YWwsIEZMVVNIKTsKLX0KLQotLyogfX19ICovCi0KLS8qIHt7eyBVREExMzQxIGVudW0gZnVuY3Rpb25zICovCi0KLSNkZWZpbmUgVURBMTM0MV9FTlVNKHhuYW1lLCB3aGVyZSwgcmVnLCBzaGlmdCwgbWFzaywgaW52ZXJ0KSBcCi17IC5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLCAubmFtZSA9IHhuYW1lLCAuaW5mbyA9IHNuZF91ZGExMzQxX2luZm9fZW51bSwgXAotICAuZ2V0ID0gc25kX3VkYTEzNDFfZ2V0X2VudW0sIC5wdXQgPSBzbmRfdWRhMTM0MV9wdXRfZW51bSwgXAotICAucHJpdmF0ZV92YWx1ZSA9IHdoZXJlIHwgKHJlZyA8PCA1KSB8IChzaGlmdCA8PCA5KSB8IChtYXNrIDw8IDEyKSB8IChpbnZlcnQgPDwgMTgpIFwKLX0KLQotc3RhdGljIGludCBzbmRfdWRhMTM0MV9pbmZvX2VudW0oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCi0JCQkJIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCi17Ci0JaW50IHdoZXJlID0ga2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgJiAzMTsKLQljb25zdCBjaGFyICoqdGV4dHM7Ci0JCi0JLy8gdGhpcyByZWdpc3RlciB3ZSBkb24ndCBoYW5kbGUgdGhpcyB3YXkKLQlpZiAoIXVkYTEzNDFfZW51bV9pdGVtc1t3aGVyZV0pCi0JCXJldHVybiAtRUlOVkFMOwotCi0JdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0VOVU1FUkFURUQ7Ci0JdWluZm8tPmNvdW50ID0gMTsKLQl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyA9IHVkYTEzNDFfZW51bV9pdGVtc1t3aGVyZV07Ci0KLQlpZiAodWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA+PSB1ZGExMzQxX2VudW1faXRlbXNbd2hlcmVdKQotCQl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID0gdWRhMTM0MV9lbnVtX2l0ZW1zW3doZXJlXSAtIDE7Ci0KLQl0ZXh0cyA9IHVkYTEzNDFfZW51bV9uYW1lc1t3aGVyZV07Ci0Jc3RyY3B5KHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLm5hbWUsIHRleHRzW3VpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1dKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzbmRfdWRhMTM0MV9nZXRfZW51bShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKLQkJCQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKLXsKLQlzdHJ1Y3QgbDNfY2xpZW50ICpjbG50ID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCXN0cnVjdCB1ZGExMzQxICp1ZGEgPSBjbG50LT5kcml2ZXJfZGF0YTsKLQlpbnQgd2hlcmUgPSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSAmIDMxOyAgICAgICAgCi0gICAgICAgIAotCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSB1ZGEtPmNmZ1t3aGVyZV07CQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHNuZF91ZGExMzQxX3B1dF9lbnVtKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAotCQkJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQotewotCXN0cnVjdCBsM19jbGllbnQgKmNsbnQgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0Jc3RydWN0IHVkYTEzNDEgKnVkYSA9IGNsbnQtPmRyaXZlcl9kYXRhOwotCWludCB3aGVyZSA9IGtjb250cm9sLT5wcml2YXRlX3ZhbHVlICYgMzE7ICAgICAgICAKLQlpbnQgcmVnID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDUpICYgMTU7Ci0JaW50IHNoaWZ0ID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDkpICYgNzsKLQlpbnQgbWFzayA9IChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSA+PiAxMikgJiA2MzsKLQotCXVkYS0+Y2ZnW3doZXJlXSA9ICh1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdICYgbWFzayk7Ci0JCi0JcmV0dXJuIHNuZF91ZGExMzQxX3VwZGF0ZV9iaXRzKGNsbnQsIHJlZywgbWFzaywgc2hpZnQsIHVkYS0+Y2ZnW3doZXJlXSwgRkxVU0gpOwotfQotCi0vKiB9fX0gKi8KLQotLyoge3t7IFVEQTEzNDEgMnJlZ3MgZnVuY3Rpb25zICovCi0KLSNkZWZpbmUgVURBMTM0MV8yUkVHUyh4bmFtZSwgd2hlcmUsIHJlZ18xLCByZWdfMiwgc2hpZnRfMSwgc2hpZnRfMiwgbWFza18xLCBtYXNrXzIsIGludmVydCkgXAoteyAuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgLm5hbWUgPSAoeG5hbWUpLCAuaW5mbyA9IHNuZF91ZGExMzQxX2luZm9fMnJlZ3MsIFwKLSAgLmdldCA9IHNuZF91ZGExMzQxX2dldF8ycmVncywgLnB1dCA9IHNuZF91ZGExMzQxX3B1dF8ycmVncywgXAotICAucHJpdmF0ZV92YWx1ZSA9IHdoZXJlIHwgKHJlZ18xIDw8IDUpIHwgKHJlZ18yIDw8IDkpIHwgKHNoaWZ0XzEgPDwgMTMpIHwgKHNoaWZ0XzIgPDwgMTYpIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgIChtYXNrXzEgPDwgMTkpIHwgKG1hc2tfMiA8PCAyNSkgfCAoaW52ZXJ0IDw8IDMxKSBcCi19Ci0KLQotc3RhdGljIGludCBzbmRfdWRhMTM0MV9pbmZvXzJyZWdzKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAotCQkJCSAgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKLXsKLQlpbnQgbWFza18xID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDE5KSAmIDYzOwotCWludCBtYXNrXzIgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gMjUpICYgNjM7Ci0JaW50IG1hc2s7Ci0gICAgICAgIAotCW1hc2sgPSAobWFza18yICsgMSkgKiAobWFza18xICsgMSkgLSAxOwotCXVpbmZvLT50eXBlID0gbWFzayA9PSAxID8gU05EUlZfQ1RMX0VMRU1fVFlQRV9CT09MRUFOIDogU05EUlZfQ1RMX0VMRU1fVFlQRV9JTlRFR0VSOwotCXVpbmZvLT5jb3VudCA9IDE7Ci0JdWluZm8tPnZhbHVlLmludGVnZXIubWluID0gMDsKLQl1aW5mby0+dmFsdWUuaW50ZWdlci5tYXggPSBtYXNrOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHNuZF91ZGExMzQxX2dldF8ycmVncyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKLQkJCQkgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCi17Ci0Jc3RydWN0IGwzX2NsaWVudCAqY2xudCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQlzdHJ1Y3QgdWRhMTM0MSAqdWRhID0gY2xudC0+ZHJpdmVyX2RhdGE7Ci0JaW50IHdoZXJlID0ga2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgJiAzMTsKLQlpbnQgbWFza18xID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDE5KSAmIDYzOwotCWludCBtYXNrXzIgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gMjUpICYgNjM7ICAgICAgICAKLQlpbnQgaW52ZXJ0ID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDMxKSAmIDE7Ci0JaW50IG1hc2s7Ci0KLQltYXNrID0gKG1hc2tfMiArIDEpICogKG1hc2tfMSArIDEpIC0gMTsKLQotCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gdWRhLT5jZmdbd2hlcmVdOwotCWlmIChpbnZlcnQpCi0JCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gbWFzayAtIHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHNuZF91ZGExMzQxX3B1dF8ycmVncyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKLQkJCQkgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCi17Ci0Jc3RydWN0IGwzX2NsaWVudCAqY2xudCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQlzdHJ1Y3QgdWRhMTM0MSAqdWRhID0gY2xudC0+ZHJpdmVyX2RhdGE7ICAgICAgICAKLQlpbnQgd2hlcmUgPSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSAmIDMxOyAgICAgICAgCi0JaW50IHJlZ18xID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDUpICYgMTU7Ci0JaW50IHJlZ18yID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDkpICYgMTU7ICAgICAgICAKLQlpbnQgc2hpZnRfMSA9IChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSA+PiAxMykgJiA3OwotCWludCBzaGlmdF8yID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDE2KSAmIDc7Ci0JaW50IG1hc2tfMSA9IChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSA+PiAxOSkgJiA2MzsKLQlpbnQgbWFza18yID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDI1KSAmIDYzOyAgICAgICAgCi0JaW50IGludmVydCA9IChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSA+PiAzMSkgJiAxOwotCWludCBtYXNrOwotCXVuc2lnbmVkIHNob3J0IHZhbDEsIHZhbDIsIHZhbDsKLQotCXZhbCA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdOwotICAgICAgICAgCi0JbWFzayA9IChtYXNrXzIgKyAxKSAqIChtYXNrXzEgKyAxKSAtIDE7Ci0KLQl2YWwxID0gdmFsICYgbWFza18xOwotCXZhbDIgPSAodmFsIC8gKG1hc2tfMSArIDEpKSAmIG1hc2tfMjsgICAgICAgIAotCi0JaWYgKGludmVydCkgewotCQl2YWwxID0gbWFza18xIC0gdmFsMTsKLQkJdmFsMiA9IG1hc2tfMiAtIHZhbDI7Ci0JfQotCi0JdWRhLT5jZmdbd2hlcmVdID0gaW52ZXJ0ID8gbWFzayAtIHZhbCA6IHZhbDsKLSAgICAgICAgCi0JLy9GSVhNRSAtIHJldHVybiB2YWx1ZQotCXNuZF91ZGExMzQxX3VwZGF0ZV9iaXRzKGNsbnQsIHJlZ18xLCBtYXNrXzEsIHNoaWZ0XzEsIHZhbDEsIEZMVVNIKTsKLQlyZXR1cm4gc25kX3VkYTEzNDFfdXBkYXRlX2JpdHMoY2xudCwgcmVnXzIsIG1hc2tfMiwgc2hpZnRfMiwgdmFsMiwgRkxVU0gpOwotfQotCi0vKiB9fX0gKi8KLSAgCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX3VkYTEzNDFfY29udHJvbHNbXSA9IHsKLQlVREExMzQxX1NJTkdMRSgiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsIENNRF9NVVRFLCBkYXRhMF8yLCAyLCAxLCAxKSwKLQlVREExMzQxX1NJTkdMRSgiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIsIENNRF9WT0xVTUUsIGRhdGEwXzAsIDAsIDYzLCAxKSwKLQotCVVEQTEzNDFfU0lOR0xFKCJCYXNzIFBsYXliYWNrIFZvbHVtZSIsIENNRF9CQVNTLCBkYXRhMF8xLCAyLCAxNSwgMCksCi0JVURBMTM0MV9TSU5HTEUoIlRyZWJsZSBQbGF5YmFjayBWb2x1bWUiLCBDTURfVFJFQkJMRSwgZGF0YTBfMSwgMCwgMywgMCksCi0KLQlVREExMzQxX1NJTkdMRSgiSW5wdXQgR2FpbiBTd2l0Y2giLCBDTURfSUdBSU4sIHN0YXQxLCA1LCAxLCAwKSwKLQlVREExMzQxX1NJTkdMRSgiT3V0cHV0IEdhaW4gU3dpdGNoIiwgQ01EX09HQUlOLCBzdGF0MSwgNiwgMSwgMCksCi0KLQlVREExMzQxX1NJTkdMRSgiTWl4ZXIgR2FpbiBDaGFubmVsIDEgVm9sdW1lIiwgQ01EX0NIMSwgZXh0MCwgMCwgMzEsIDEpLAotCVVEQTEzNDFfU0lOR0xFKCJNaXhlciBHYWluIENoYW5uZWwgMiBWb2x1bWUiLCBDTURfQ0gyLCBleHQxLCAwLCAzMSwgMSksCi0KLQlVREExMzQxX1NJTkdMRSgiTWljIFNlbnNpdGl2aXR5IFZvbHVtZSIsIENNRF9NSUMsIGV4dDIsIDIsIDcsIDApLAotCi0JVURBMTM0MV9TSU5HTEUoIkFHQyBPdXRwdXQgTGV2ZWwiLCBDTURfQUdDX0xFVkVMLCBleHQ2LCAwLCAzLCAwKSwKLQlVREExMzQxX1NJTkdMRSgiQUdDIFRpbWUgQ29uc3RhbnQiLCBDTURfQUdDX1RJTUUsIGV4dDYsIDIsIDcsIDApLAotCVVEQTEzNDFfU0lOR0xFKCJBR0MgVGltZSBDb25zdGFudCBTd2l0Y2giLCBDTURfQUdDLCBleHQ0LCA0LCAxLCAwKSwKLQotCVVEQTEzNDFfU0lOR0xFKCJEQUMgUG93ZXIiLCBDTURfREFDLCBzdGF0MSwgMCwgMSwgMCksCi0JVURBMTM0MV9TSU5HTEUoIkFEQyBQb3dlciIsIENNRF9BREMsIHN0YXQxLCAxLCAxLCAwKSwKLQotCVVEQTEzNDFfRU5VTSgiUGVhayBkZXRlY3Rpb24iLCBDTURfUEVBSywgZGF0YTBfMiwgNSwgMSwgMCksCi0JVURBMTM0MV9FTlVNKCJEZS1lbXBoYXNpcyIsIENNRF9ERUVNUCwgZGF0YTBfMiwgMywgMywgMCksCi0JVURBMTM0MV9FTlVNKCJNaXhlciBtb2RlIiwgQ01EX01JWEVSLCBleHQyLCAwLCAzLCAwKSwKLQlVREExMzQxX0VOVU0oIkZpbHRlciBtb2RlIiwgQ01EX0ZJTFRFUiwgZGF0YTBfMiwgMCwgMywgMCksCi0KLQlVREExMzQxXzJSRUdTKCJHYWluIElucHV0IEFtcGxpZmllciBHYWluIChjaGFubmVsIDIpIiwgQ01EX0lHLCBleHQ0LCBleHQ1LCAwLCAwLCAzLCAzMSwgMCksCi19OwotCi1zdGF0aWMgdm9pZCB1ZGExMzQxX2ZyZWUoc3RydWN0IGwzX2NsaWVudCAqY2xudCkKLXsKLQlsM19kZXRhY2hfY2xpZW50KGNsbnQpOyAvLyBjYWxscyBrZnJlZSBmb3IgZHJpdmVyX2RhdGEgKHN0cnVjdCB1ZGExMzQxKQotCWtmcmVlKGNsbnQpOwotfQotCi1zdGF0aWMgaW50IHVkYTEzNDFfZGV2X2ZyZWUoc3RydWN0IHNuZF9kZXZpY2UgKmRldmljZSkKLXsKLQlzdHJ1Y3QgbDNfY2xpZW50ICpjbG50ID0gZGV2aWNlLT5kZXZpY2VfZGF0YTsKLQl1ZGExMzQxX2ZyZWUoY2xudCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBfX2luaXQgc25kX2NoaXBfdWRhMTM0MV9taXhlcl9uZXcoc3RydWN0IHNuZF9jYXJkICpjYXJkLCBzdHJ1Y3QgbDNfY2xpZW50ICoqY2xudHApCi17Ci0Jc3RhdGljIHN0cnVjdCBzbmRfZGV2aWNlX29wcyBvcHMgPSB7Ci0JCS5kZXZfZnJlZSA9ICAgICB1ZGExMzQxX2Rldl9mcmVlLAotCX07Ci0Jc3RydWN0IGwzX2NsaWVudCAqY2xudDsKLQlpbnQgaWR4LCBlcnI7Ci0KLQlpZiAoc25kX0JVR19PTighY2FyZCkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JY2xudCA9IGt6YWxsb2Moc2l6ZW9mKCpjbG50KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGNsbnQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0gICAgICAgICAKLQlpZiAoKGVyciA9IGwzX2F0dGFjaF9jbGllbnQoY2xudCwgImwzLWJpdC1zYTExMDAtZ3BpbyIsIFVEQTEzNDFfQUxTQV9OQU1FKSkpIHsKLQkJa2ZyZWUoY2xudCk7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0JZm9yIChpZHggPSAwOyBpZHggPCBBUlJBWV9TSVpFKHNuZF91ZGExMzQxX2NvbnRyb2xzKTsgaWR4KyspIHsKLQkJaWYgKChlcnIgPSBzbmRfY3RsX2FkZChjYXJkLCBzbmRfY3RsX25ldzEoJnNuZF91ZGExMzQxX2NvbnRyb2xzW2lkeF0sIGNsbnQpKSkgPCAwKSB7Ci0JCQl1ZGExMzQxX2ZyZWUoY2xudCk7Ci0JCQlyZXR1cm4gZXJyOwotCQl9Ci0JfQotCi0JaWYgKChlcnIgPSBzbmRfZGV2aWNlX25ldyhjYXJkLCBTTkRSVl9ERVZfQ09ERUMsIGNsbnQsICZvcHMpKSA8IDApIHsKLQkJdWRhMTM0MV9mcmVlKGNsbnQpOwotCQlyZXR1cm4gZXJyOwotCX0KLQotCSpjbG50cCA9IGNsbnQ7Ci0Jc3RyY3B5KGNhcmQtPm1peGVybmFtZSwgIlVEQTEzNDFUUyBNaXhlciIpOwotCSgoc3RydWN0IHVkYTEzNDEgKiljbG50LT5kcml2ZXJfZGF0YSktPmNhcmQgPSBjYXJkOwotICAgICAgICAKLQlzbmRfdWRhMTM0MV9wcm9jX2luaXQoY2FyZCwgY2xudCk7Ci0gICAgICAgIAotCXJldHVybiAwOwotfQotCi0vKiB9fX0gKi8KLQotLyoge3t7IEwzIG9wZXJhdGlvbnMgKi8KLQotc3RhdGljIGludCB1ZGExMzQxX2F0dGFjaChzdHJ1Y3QgbDNfY2xpZW50ICpjbG50KQotewotCXN0cnVjdCB1ZGExMzQxICp1ZGE7Ci0KLQl1ZGEgPSBremFsbG9jKHNpemVvZigqdWRhKSwgMCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF1ZGEpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JLyogaW5pdCBmaXhlZCBwYXJ0cyBvZiBteSBjb3B5IG9mIHJlZ2lzdGVycyAqLwotCXVkYS0+cmVnc1tzdGF0MF0gICA9IFNUQVQwOwotCXVkYS0+cmVnc1tzdGF0MV0gICA9IFNUQVQxOwotCi0JdWRhLT5yZWdzW2RhdGEwXzBdID0gREFUQTBfMDsKLQl1ZGEtPnJlZ3NbZGF0YTBfMV0gPSBEQVRBMF8xOwotCXVkYS0+cmVnc1tkYXRhMF8yXSA9IERBVEEwXzI7Ci0KLQl1ZGEtPndyaXRlID0gc25kX3VkYTEzNDFfY29kZWNfd3JpdGU7Ci0JdWRhLT5yZWFkID0gc25kX3VkYTEzNDFfY29kZWNfcmVhZDsKLSAgCi0Jc3Bpbl9sb2NrX2luaXQoJnVkYS0+cmVnX2xvY2spOwotICAgICAgICAKLQljbG50LT5kcml2ZXJfZGF0YSA9IHVkYTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgdWRhMTM0MV9kZXRhY2goc3RydWN0IGwzX2NsaWVudCAqY2xudCkKLXsKLQlrZnJlZShjbG50LT5kcml2ZXJfZGF0YSk7Ci19Ci0KLXN0YXRpYyBpbnQKLXVkYTEzNDFfY29tbWFuZChzdHJ1Y3QgbDNfY2xpZW50ICpjbG50LCBpbnQgY21kLCB2b2lkICphcmcpCi17Ci0JaWYgKGNtZCAhPSBDTURfUkVBRF9SRUcpCi0JCXJldHVybiBzbmRfdWRhMTM0MV9jZmdfd3JpdGUoY2xudCwgY21kLCAoaW50KSBhcmcsIEZMVVNIKTsKLQotCXJldHVybiBzbmRfdWRhMTM0MV9jb2RlY19yZWFkKGNsbnQsIChpbnQpIGFyZyk7Ci19Ci0KLXN0YXRpYyBpbnQgdWRhMTM0MV9vcGVuKHN0cnVjdCBsM19jbGllbnQgKmNsbnQpCi17Ci0Jc3RydWN0IHVkYTEzNDEgKnVkYSA9IGNsbnQtPmRyaXZlcl9kYXRhOwotCi0JdWRhLT5hY3RpdmUgPSAxOwotCi0JLyogaW5pdCBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gKi8KLQlzbmRfdWRhMTM0MV9jZmdfd3JpdGUoY2xudCwgQ01EX1JFU0VULCAwLCBSRUdTX09OTFkpOwotCXNuZF91ZGExMzQxX2NmZ193cml0ZShjbG50LCBDTURfRlMsIEYyNTYsIEZMVVNIKTsgICAgICAgLy8gdW5rbm93biBzdGF0ZSBhZnRlciByZXNldAotCXNuZF91ZGExMzQxX2NmZ193cml0ZShjbG50LCBDTURfRk9STUFULCBMU0IxNiwgRkxVU0gpOyAgLy8gdW5rbm93biBzdGF0ZSBhZnRlciByZXNldAotCXNuZF91ZGExMzQxX2NmZ193cml0ZShjbG50LCBDTURfT0dBSU4sIE9OLCBGTFVTSCk7ICAgICAgLy8gZGVmYXVsdCBvZmYgYWZ0ZXIgcmVzZXQKLQlzbmRfdWRhMTM0MV9jZmdfd3JpdGUoY2xudCwgQ01EX0lHQUlOLCBPTiwgRkxVU0gpOyAgICAgIC8vIGRlZmF1bHQgb2ZmIGFmdGVyIHJlc2V0Ci0Jc25kX3VkYTEzNDFfY2ZnX3dyaXRlKGNsbnQsIENNRF9EQUMsIE9OLCBGTFVTSCk7CS8vID8/PyBkZWZhdWx0IHZhbHVlIGFmdGVyIHJlc2V0Ci0Jc25kX3VkYTEzNDFfY2ZnX3dyaXRlKGNsbnQsIENNRF9BREMsIE9OLCBGTFVTSCk7CS8vID8/PyBkZWZhdWx0IHZhbHVlIGFmdGVyIHJlc2V0Ci0Jc25kX3VkYTEzNDFfY2ZnX3dyaXRlKGNsbnQsIENNRF9WT0xVTUUsIDIwLCBGTFVTSCk7ICAgICAvLyBkZWZhdWx0IDBkQiBhZnRlciByZXNldAotCXNuZF91ZGExMzQxX2NmZ193cml0ZShjbG50LCBDTURfQkFTUywgMCwgUkVHU19PTkxZKTsgICAgLy8gZGVmYXVsdCB2YWx1ZSBhZnRlciByZXNldAotCXNuZF91ZGExMzQxX2NmZ193cml0ZShjbG50LCBDTURfVFJFQkJMRSwgMCwgUkVHU19PTkxZKTsgLy8gZGVmYXVsdCB2YWx1ZSBhZnRlciByZXNldAotCXNuZF91ZGExMzQxX2NmZ193cml0ZShjbG50LCBDTURfUEVBSywgQUZURVIsIFJFR1NfT05MWSk7Ly8gZGVmYXVsdCB2YWx1ZSBhZnRlciByZXNldAotCXNuZF91ZGExMzQxX2NmZ193cml0ZShjbG50LCBDTURfREVFTVAsIE5PTkUsIFJFR1NfT05MWSk7Ly8gZGVmYXVsdCB2YWx1ZSBhZnRlciByZXNldAotCS8vYXQgdGhpcyBtb21lbnQgc2hvdWxkIGJlIFFNVVRFRCBieSBoMzYwMF9hdWRpb19pbml0Ci0Jc25kX3VkYTEzNDFfY2ZnX3dyaXRlKGNsbnQsIENNRF9NVVRFLCBPRkYsIFJFR1NfT05MWSk7ICAvLyBkZWZhdWx0IHZhbHVlIGFmdGVyIHJlc2V0Ci0Jc25kX3VkYTEzNDFfY2ZnX3dyaXRlKGNsbnQsIENNRF9GSUxURVIsIE1BWCwgRkxVU0gpOyAgICAvLyBkZWZhdWwgZmxhdCBhZnRlciByZXNldAotCXNuZF91ZGExMzQxX2NmZ193cml0ZShjbG50LCBDTURfQ0gxLCAzMSwgRkxVU0gpOyAgICAgICAgLy8gZGVmYXVsdCB2YWx1ZSBhZnRlciByZXNldAotCXNuZF91ZGExMzQxX2NmZ193cml0ZShjbG50LCBDTURfQ0gyLCA0LCBGTFVTSCk7ICAgICAgICAgLy8gZGVmYXVsdCB2YWx1ZSBhZnRlciByZXNldAotCXNuZF91ZGExMzQxX2NmZ193cml0ZShjbG50LCBDTURfTUlDLCA0LCBGTFVTSCk7ICAgICAgICAgLy8gZGVmYXVsdCAwZEIgYWZ0ZXIgcmVzZXQKLQlzbmRfdWRhMTM0MV9jZmdfd3JpdGUoY2xudCwgQ01EX01JWEVSLCBNSVhFUiwgRkxVU0gpOyAgIC8vIGRlZmF1bHQgZG91Yi5kaWYubW9kZSAgICAgICAgICAKLQlzbmRfdWRhMTM0MV9jZmdfd3JpdGUoY2xudCwgQ01EX0FHQywgT0ZGLCBGTFVTSCk7ICAgICAgIC8vIGRlZmF1bHQgdmFsdWUgYWZ0ZXIgcmVzZXQKLQlzbmRfdWRhMTM0MV9jZmdfd3JpdGUoY2xudCwgQ01EX0lHLCAwLCBGTFVTSCk7ICAgICAgICAgIC8vIHVua25vd24gc3RhdGUgYWZ0ZXIgcmVzZXQKLQlzbmRfdWRhMTM0MV9jZmdfd3JpdGUoY2xudCwgQ01EX0FHQ19USU1FLCAwLCBGTFVTSCk7ICAgIC8vIGRlZmF1bHQgdmFsdWUgYWZ0ZXIgcmVzZXQKLQlzbmRfdWRhMTM0MV9jZmdfd3JpdGUoY2xudCwgQ01EX0FHQ19MRVZFTCwgMCwgRkxVU0gpOyAgIC8vIGRlZmF1bHQgdmFsdWUgYWZ0ZXIgcmVzZXQKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCB1ZGExMzQxX2Nsb3NlKHN0cnVjdCBsM19jbGllbnQgKmNsbnQpCi17Ci0Jc3RydWN0IHVkYTEzNDEgKnVkYSA9IGNsbnQtPmRyaXZlcl9kYXRhOwotCi0JdWRhLT5hY3RpdmUgPSAwOwotfQotCi0vKiB9fX0gKi8KLQotLyoge3t7IE1vZHVsZSBhbmQgTDMgaW5pdGlhbGl6YXRpb24gKi8KLQotc3RhdGljIHN0cnVjdCBsM19vcHMgdWRhMTM0MV9vcHMgPSB7Ci0JLm9wZW4gPQkJdWRhMTM0MV9vcGVuLAotCS5jb21tYW5kID0JdWRhMTM0MV9jb21tYW5kLAotCS5jbG9zZSA9CXVkYTEzNDFfY2xvc2UsCi19OwotCi1zdGF0aWMgc3RydWN0IGwzX2RyaXZlciB1ZGExMzQxX2RyaXZlciA9IHsKLQkubmFtZSA9CQlVREExMzQxX0FMU0FfTkFNRSwKLQkuYXR0YWNoX2NsaWVudCA9IHVkYTEzNDFfYXR0YWNoLAotCS5kZXRhY2hfY2xpZW50ID0gdWRhMTM0MV9kZXRhY2gsCi0JLm9wcyA9CQkmdWRhMTM0MV9vcHMsCi0JLm93bmVyID0JVEhJU19NT0RVTEUsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCB1ZGExMzQxX2luaXQodm9pZCkKLXsKLQlyZXR1cm4gbDNfYWRkX2RyaXZlcigmdWRhMTM0MV9kcml2ZXIpOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgdWRhMTM0MV9leGl0KHZvaWQpCi17Ci0JbDNfZGVsX2RyaXZlcigmdWRhMTM0MV9kcml2ZXIpOwotfQotCi1tb2R1bGVfaW5pdCh1ZGExMzQxX2luaXQpOwotbW9kdWxlX2V4aXQodWRhMTM0MV9leGl0KTsKLQotTU9EVUxFX0FVVEhPUigiVG9tYXMgS2FzcGFyZWsgPHRvbWFzLmthc3BhcmVrQHNlem5hbS5jej4iKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9ERVNDUklQVElPTigiUGhpbGlwcyBVREExMzQxIENPREVDIGRyaXZlciBmb3IgQUxTQSIpOwotTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoInt7VURBMTM0MSxVREExMzQxVFN9fSIpOwotCi1FWFBPUlRfU1lNQk9MKHNuZF9jaGlwX3VkYTEzNDFfbWl4ZXJfbmV3KTsKLQotLyogfX19ICovCi0KLS8qCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBpbmRlbnQtdGFicy1tb2RlOiB0Ci0gKiBFbmQ6Ci0gKi8KZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9LY29uZmlnIGIvc291bmQvaXNhL0tjb25maWcKaW5kZXggY2UwYWEwNC4uYzVjOWE5MiAxMDA2NDQKLS0tIGEvc291bmQvaXNhL0tjb25maWcKKysrIGIvc291bmQvaXNhL0tjb25maWcKQEAgLTU2LDggKzU2LDggQEAKIAkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBBRDE4NDggKEFuYWxvZyBEZXZpY2VzKSBvcgogCSAgQ1M0MjQ4IChDaXJydXMgTG9naWMgLSBDcnlzdGFsIFNlbWljb25kdWN0b3JzKSBjaGlwcy4KIAkgIAotCSAgRm9yIG5ld2VyIGNoaXBzIGZyb20gQ2lycnVzIExvZ2ljLCB1c2UgdGhlIENTNDIzMSwgQ1M0MjMyIG9yCi0JICBDUzQyMzYrIGRyaXZlcnMuCisJICBGb3IgbmV3ZXIgY2hpcHMgZnJvbSBDaXJydXMgTG9naWMsIHVzZSB0aGUgQ1M0MjMxIG9yIENTNDIzMisKKwkgIGRyaXZlcnMuCiAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIHNuZC1hZDE4NDguCkBAIC05NCw2ICs5NCw4IEBACiAJdHJpc3RhdGUgIkMtTWVkaWEgQ01JODMzMCIKIAlzZWxlY3QgU05EX1dTU19MSUIKIAlzZWxlY3QgU05EX1NCMTZfRFNQCisJc2VsZWN0IFNORF9PUEwzX0xJQgorCXNlbGVjdCBTTkRfTVBVNDAxX1VBUlQKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3Igc291bmRjYXJkcyBiYXNlZCBvbiB0aGUKIAkgIEMtTWVkaWEgQ01JODMzMCBjaGlwLgpAQCAtMTEyLDI2ICsxMTQsMTUgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIHNuZC1jczQyMzEuCiAKLWNvbmZpZyBTTkRfQ1M0MjMyCi0JdHJpc3RhdGUgIkdlbmVyaWMgQ2lycnVzIExvZ2ljIENTNDIzMiBkcml2ZXIiCi0Jc2VsZWN0IFNORF9PUEwzX0xJQgotCXNlbGVjdCBTTkRfTVBVNDAxX1VBUlQKLQlzZWxlY3QgU05EX1dTU19MSUIKLQloZWxwCi0JICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgQ1M0MjMyIGNoaXBzIGZyb20gQ2lycnVzCi0JICBMb2dpYyAtIENyeXN0YWwgU2VtaWNvbmR1Y3RvcnMuCi0KLQkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKLQkgIHdpbGwgYmUgY2FsbGVkIHNuZC1jczQyMzIuCi0KIGNvbmZpZyBTTkRfQ1M0MjM2Ci0JdHJpc3RhdGUgIkdlbmVyaWMgQ2lycnVzIExvZ2ljIENTNDIzNisgZHJpdmVyIgorCXRyaXN0YXRlICJHZW5lcmljIENpcnJ1cyBMb2dpYyBDUzQyMzIvQ1M0MjM2KyBkcml2ZXIiCiAJc2VsZWN0IFNORF9PUEwzX0xJQgogCXNlbGVjdCBTTkRfTVBVNDAxX1VBUlQKIAlzZWxlY3QgU05EX1dTU19MSUIKIAloZWxwCi0JICBTYXkgWSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIENTNDIzNSxDUzQyMzYsQ1M0MjM3QixDUzQyMzhCLAotCSAgQ1M0MjM5IGNoaXBzIGZyb20gQ2lycnVzIExvZ2ljIC0gQ3J5c3RhbCBTZW1pY29uZHVjdG9ycy4KKwkgIFNheSBZIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgQ1M0MjMyLENTNDIzNSxDUzQyMzYsQ1M0MjM3QiwKKwkgIENTNDIzOEIsQ1M0MjM5IGNoaXBzIGZyb20gQ2lycnVzIExvZ2ljIC0gQ3J5c3RhbAorCSAgU2VtaWNvbmR1Y3RvcnMuCiAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIHNuZC1jczQyMzYuCkBAIC0zNzcsMTQgKzM2OCwxNyBAQAogCSAgd2lsbCBiZSBjYWxsZWQgc25kLXNnYWxheHkuCiAKIGNvbmZpZyBTTkRfU1NDQVBFCi0JdHJpc3RhdGUgIkVuc29uaXEgU291bmRTY2FwZSBQblAgZHJpdmVyIgorCXRyaXN0YXRlICJFbnNvbmlxIFNvdW5kU2NhcGUgZHJpdmVyIgogCXNlbGVjdCBTTkRfSFdERVAKIAlzZWxlY3QgU05EX01QVTQwMV9VQVJUCiAJc2VsZWN0IFNORF9XU1NfTElCCiAJaGVscAotCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIEVuc29uaXEgU291bmRTY2FwZSBQblAKKwkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBFbnNvbmlxIFNvdW5kU2NhcGUgCiAJICBzb3VuZGNhcmRzLgogCisJICBUaGUgUENNIGF1ZGlvIGlzIHN1cHBvcnRlZCBvbiBTb3VuZFNjYXBlIENsYXNzaWMsIEVsaXRlLCBQblAKKwkgIGFuZCBWSVZPIGNhcmRzLiBUaGUgTUlESSBzdXBwb3J0IGlzIHZlcnkgZXhwZXJpbWVudGFsLgorCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBzbmQtc3NjYXBlLgogCkBAIC00MTEsNSArNDA1LDM2IEBACiAJICB5b3UgbmVlZCB0byBpbnN0YWxsIHRoZSBmaXJtd2FyZSBmaWxlcyBmcm9tIHRoZQogCSAgYWxzYS1maXJtd2FyZSBwYWNrYWdlLgogCitjb25maWcgU05EX01TTkRfUElOTkFDTEUKKwl0cmlzdGF0ZSAiVHVydGxlIEJlYWNoIE11bHRpU291bmQgUGlubmFjbGUvRmlqaSBkcml2ZXIiCisJZGVwZW5kcyBvbiBYODYgJiYgRVhQRVJJTUVOVEFMCisJc2VsZWN0IEZXX0xPQURFUgorCXNlbGVjdCBTTkRfTVBVNDAxX1VBUlQKKwlzZWxlY3QgU05EX1BDTQorCWhlbHAKKwkgIFNheSBZIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgVHVydGxlIEJlYWNoIE11bHRpU291bmQgUGlubmFjbGUvCisJICBGaWppIHNvdW5kY2FyZHMuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIHNuZC1tc25kLXBpbm5hY2xlLgorCitjb25maWcgU05EX01TTkRfQ0xBU1NJQworCXRyaXN0YXRlICJTdXBwb3J0IGZvciBUdXJ0bGUgQmVhY2ggTXVsdGlTb3VuZCBDbGFzc2ljLCBUYWhpdGksIE1vbnRlcmV5IgorCWRlcGVuZHMgb24gWDg2ICYmIEVYUEVSSU1FTlRBTAorCXNlbGVjdCBGV19MT0FERVIKKwlzZWxlY3QgU05EX01QVTQwMV9VQVJUCisJc2VsZWN0IFNORF9QQ00KKwloZWxwCisJICBTYXkgTSBoZXJlIGlmIHlvdSBoYXZlIGEgVHVydGxlIEJlYWNoIE11bHRpU291bmQgQ2xhc3NpYywgVGFoaXRpIG9yCisJICBNb250ZXJleSAobm90IGZvciB0aGUgUGlubmFjbGUgb3IgRmlqaSkuCisKKwkgIFNlZSA8ZmlsZTpEb2N1bWVudGF0aW9uL3NvdW5kL29zcy9NdWx0aVNvdW5kPiBmb3IgaW1wb3J0YW50IGluZm9ybWF0aW9uCisJICBhYm91dCB0aGlzIGRyaXZlci4gIE5vdGUgdGhhdCBpdCBoYXMgYmVlbiBkaXNjb250aW51ZWQsIGJ1dCB0aGUKKwkgIFZveWV0cmEgVHVydGxlIEJlYWNoIGtub3dsZWRnZSBiYXNlIGVudHJ5IGZvciBpdCBpcyBzdGlsbCBhdmFpbGFibGUKKwkgIGF0IDxodHRwOi8vd3d3LnR1cnRsZWJlYWNoLmNvbS9zaXRlL2tiX2Z0cC83OTAuYXNwPi4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgc25kLW1zbmQtY2xhc3NpYy4KKwogZW5kaWYJIyBTTkRfSVNBCiAKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9NYWtlZmlsZSBiL3NvdW5kL2lzYS9NYWtlZmlsZQppbmRleCA2M2FmMTNkLi5iOTA2YjlhIDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvTWFrZWZpbGUKKysrIGIvc291bmQvaXNhL01ha2VmaWxlCkBAIC0yNiw1ICsyNiw1IEBACiBvYmotJChDT05GSUdfU05EX1NHQUxBWFkpICs9IHNuZC1zZ2FsYXh5Lm8KIG9iai0kKENPTkZJR19TTkRfU1NDQVBFKSArPSBzbmQtc3NjYXBlLm8KIAotb2JqLSQoQ09ORklHX1NORCkgKz0gYWQxODE2YS8gYWQxODQ4LyBjczQyM3gvIGVzMTY4OC8gZ3VzLyBvcHRpOXh4LyBcCitvYmotJChDT05GSUdfU05EKSArPSBhZDE4MTZhLyBhZDE4NDgvIGNzNDIzeC8gZXMxNjg4LyBndXMvIG1zbmQvIG9wdGk5eHgvIFwKIAkJICAgICBzYi8gd2F2ZWZyb250LyB3c3MvCmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvYWQxODE2YS9hZDE4MTZhLmMgYi9zb3VuZC9pc2EvYWQxODE2YS9hZDE4MTZhLmMKaW5kZXggNzc1MjQyNC4uYmJjYmY5MiAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2FkMTgxNmEvYWQxODE2YS5jCisrKyBiL3NvdW5kL2lzYS9hZDE4MTZhL2FkMTgxNmEuYwpAQCAtMTU2LDEwICsxNTYsMTIgQEAKIAlzdHJ1Y3Qgc25kX2NhcmRfYWQxODE2YSAqYWNhcmQ7CiAJc3RydWN0IHNuZF9hZDE4MTZhICpjaGlwOwogCXN0cnVjdCBzbmRfb3BsMyAqb3BsMzsKKwlzdHJ1Y3Qgc25kX3RpbWVyICp0aW1lcjsKIAotCWlmICgoY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKLQkJCQkgc2l6ZW9mKHN0cnVjdCBzbmRfY2FyZF9hZDE4MTZhKSkpID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVycm9yID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAorCQkJCXNpemVvZihzdHJ1Y3Qgc25kX2NhcmRfYWQxODE2YSksICZjYXJkKTsKKwlpZiAoZXJyb3IgPCAwKQorCQlyZXR1cm4gZXJyb3I7CiAJYWNhcmQgPSAoc3RydWN0IHNuZF9jYXJkX2FkMTgxNmEgKiljYXJkLT5wcml2YXRlX2RhdGE7CiAKIAlpZiAoKGVycm9yID0gc25kX2NhcmRfYWQxODE2YV9wbnAoZGV2LCBhY2FyZCwgcGNhcmQsIHBpZCkpKSB7CkBAIC0xOTQsNiArMTk2LDEyIEBACiAJCXJldHVybiBlcnJvcjsKIAl9CiAKKwllcnJvciA9IHNuZF9hZDE4MTZhX3RpbWVyKGNoaXAsIDAsICZ0aW1lcik7CisJaWYgKGVycm9yIDwgMCkgeworCQlzbmRfY2FyZF9mcmVlKGNhcmQpOworCQlyZXR1cm4gZXJyb3I7CisJfQorCiAJaWYgKG1wdV9wb3J0W2Rldl0gPiAwKSB7CiAJCWlmIChzbmRfbXB1NDAxX3VhcnRfbmV3KGNhcmQsIDAsIE1QVTQwMV9IV19NUFU0MDEsCiAJCQkJCW1wdV9wb3J0W2Rldl0sIDAsIG1wdV9pcnFbZGV2XSwgSVJRRl9ESVNBQkxFRCwKQEAgLTIwNywxMSArMjE1LDggQEAKIAkJCQkgICAgT1BMM19IV19BVVRPLCAwLCAmb3BsMykgPCAwKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgUEZYICJubyBPUEwgZGV2aWNlIGF0IDB4JWx4LTB4JWx4LlxuIiwgZm1fcG9ydFtkZXZdLCBmbV9wb3J0W2Rldl0gKyAyKTsKIAkJfSBlbHNlIHsKLQkJCWlmICgoZXJyb3IgPSBzbmRfb3BsM190aW1lcl9uZXcob3BsMywgMSwgMikpIDwgMCkgewotCQkJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JCQkJcmV0dXJuIGVycm9yOwotCQkJfQotCQkJaWYgKChlcnJvciA9IHNuZF9vcGwzX2h3ZGVwX25ldyhvcGwzLCAwLCAxLCBOVUxMKSkgPCAwKSB7CisJCQllcnJvciA9IHNuZF9vcGwzX2h3ZGVwX25ldyhvcGwzLCAwLCAxLCBOVUxMKTsKKwkJCWlmIChlcnJvciA8IDApIHsKIAkJCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwogCQkJCXJldHVybiBlcnJvcjsKIAkJCX0KZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9hZDE4MTZhL2FkMTgxNmFfbGliLmMgYi9zb3VuZC9pc2EvYWQxODE2YS9hZDE4MTZhX2xpYi5jCmluZGV4IDNiZmNhN2MuLjA1YWVmOGIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9hZDE4MTZhL2FkMTgxNmFfbGliLmMKKysrIGIvc291bmQvaXNhL2FkMTgxNmEvYWQxODE2YV9saWIuYwpAQCAtMzcsNyArMzcsNyBAQAogCQlpZiAoaW5iKEFEMTgxNkFfUkVHKEFEMTgxNkFfQ0hJUF9TVEFUVVMpKSAmIEFEMTgxNkFfUkVBRFkpCiAJCQlyZXR1cm4gMDsKIAotCXNuZF9wcmludGsoImNoaXAgYnVzeS5cbiIpOworCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HICJjaGlwIGJ1c3kuXG4iKTsKIAlyZXR1cm4gLUVCVVNZOwogfQogCkBAIC0xOTYsNyArMTk2LDcgQEAKIAkJc3Bpbl91bmxvY2soJmNoaXAtPmxvY2spOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlzbmRfcHJpbnRrKCJpbnZhbGlkIHRyaWdnZXIgbW9kZSAweCV4LlxuIiwgd2hhdCk7CisJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HICJpbnZhbGlkIHRyaWdnZXIgbW9kZSAweCV4LlxuIiwgd2hhdCk7CiAJCWVycm9yID0gLUVJTlZBTDsKIAl9CiAKQEAgLTM3Nyw3ICszNzcsNiBAQAogCS5maWZvX3NpemUgPQkJMCwKIH07CiAKLSNpZiAwIC8qIG5vdCB1c2VkIG5vdyAqLwogc3RhdGljIGludCBzbmRfYWQxODE2YV90aW1lcl9jbG9zZShzdHJ1Y3Qgc25kX3RpbWVyICp0aW1lcikKIHsKIAlzdHJ1Y3Qgc25kX2FkMTgxNmEgKmNoaXAgPSBzbmRfdGltZXJfY2hpcCh0aW1lcik7CkBAIC00NDIsOCArNDQxLDYgQEAKIAkuc3RhcnQgPQlzbmRfYWQxODE2YV90aW1lcl9zdGFydCwKIAkuc3RvcCA9CQlzbmRfYWQxODE2YV90aW1lcl9zdG9wLAogfTsKLSNlbmRpZiAvKiBub3QgdXNlZCBub3cgKi8KLQogCiBzdGF0aWMgaW50IHNuZF9hZDE4MTZhX3BsYXliYWNrX29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCiB7CkBAIC01NjgsNyArNTY1LDcgQEAKIAljYXNlIEFEMTgxNkFfSFdfQUQxODE1OglyZXR1cm4gIkFEMTgxNSI7CiAJY2FzZSBBRDE4MTZBX0hXX0FEMThNQVgxMDogcmV0dXJuICJBRDE4bWF4MTAiOwogCWRlZmF1bHQ6Ci0JCXNuZF9wcmludGsoIlVua25vd24gY2hpcCB2ZXJzaW9uICVkOiVkLlxuIiwKKwkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgIlVua25vd24gY2hpcCB2ZXJzaW9uICVkOiVkLlxuIiwKIAkJCWNoaXAtPnZlcnNpb24sIGNoaXAtPmhhcmR3YXJlKTsKIAkJcmV0dXJuICJBRDE4MTZBIC0gdW5rbm93biI7CiAJfQpAQCAtNjg3LDcgKzY4NCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZiAwIC8qIG5vdCB1c2VkIG5vdyAqLwogaW50IF9fZGV2aW5pdCBzbmRfYWQxODE2YV90aW1lcihzdHJ1Y3Qgc25kX2FkMTgxNmEgKmNoaXAsIGludCBkZXZpY2UsIHN0cnVjdCBzbmRfdGltZXIgKipydGltZXIpCiB7CiAJc3RydWN0IHNuZF90aW1lciAqdGltZXI7CkBAIC03MDksNyArNzA1LDYgQEAKIAkJKnJ0aW1lciA9IHRpbWVyOwogCXJldHVybiAwOwogfQotI2VuZGlmIC8qIG5vdCB1c2VkIG5vdyAqLwogCiAvKgogICoKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9hZDE4NDgvYWQxODQ4LmMgYi9zb3VuZC9pc2EvYWQxODQ4L2FkMTg0OC5jCmluZGV4IDIyM2E2YzAuLjRiZWViNmYgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9hZDE4NDgvYWQxODQ4LmMKKysrIGIvc291bmQvaXNhL2FkMTg0OC9hZDE4NDguYwpAQCAtOTEsOSArOTEsOSBAQAogCXN0cnVjdCBzbmRfcGNtICpwY207CiAJaW50IGVycm9yOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtuXSwgaWRbbl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoIWNhcmQpCi0JCXJldHVybiAtRUlOVkFMOworCWVycm9yID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W25dLCBpZFtuXSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyb3IgPCAwKQorCQlyZXR1cm4gZXJyb3I7CiAKIAllcnJvciA9IHNuZF93c3NfY3JlYXRlKGNhcmQsIHBvcnRbbl0sIC0xLCBpcnFbbl0sIGRtYTFbbl0sIC0xLAogCQkJdGhpbmtwYWRbbl0gPyBXU1NfSFdfVEhJTktQQUQgOiBXU1NfSFdfREVURUNULApkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2FkbGliLmMgYi9zb3VuZC9pc2EvYWRsaWIuYwppbmRleCAzNzRiNzE3Li43NDY1YWUwIDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvYWRsaWIuYworKysgYi9zb3VuZC9pc2EvYWRsaWIuYwpAQCAtNTMsMTAgKzUzLDEwIEBACiAJc3RydWN0IHNuZF9vcGwzICpvcGwzOwogCWludCBlcnJvcjsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbbl0sIGlkW25dLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKCFjYXJkKSB7CisJZXJyb3IgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbbl0sIGlkW25dLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnJvciA8IDApIHsKIAkJZGV2X2VycihkZXYsICJjb3VsZCBub3QgY3JlYXRlIGNhcmRcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuIGVycm9yOwogCX0KIAogCWNhcmQtPnByaXZhdGVfZGF0YSA9IHJlcXVlc3RfcmVnaW9uKHBvcnRbbl0sIDQsIENSRF9OQU1FKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9hbHMxMDAuYyBiL3NvdW5kL2lzYS9hbHMxMDAuYwppbmRleCBmMWNlMzBmLi41ZmQ1MmU0IDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvYWxzMTAwLmMKKysrIGIvc291bmQvaXNhL2FsczEwMC5jCkBAIC0xNjMsOSArMTYzLDEwIEBACiAJc3RydWN0IHNuZF9jYXJkX2FsczEwMCAqYWNhcmQ7CiAJc3RydWN0IHNuZF9vcGwzICpvcGwzOwogCi0JaWYgKChjYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAotCQkJCSBzaXplb2Yoc3RydWN0IHNuZF9jYXJkX2FsczEwMCkpKSA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnJvciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKKwkJCQlzaXplb2Yoc3RydWN0IHNuZF9jYXJkX2FsczEwMCksICZjYXJkKTsKKwlpZiAoZXJyb3IgPCAwKQorCQlyZXR1cm4gZXJyb3I7CiAJYWNhcmQgPSBjYXJkLT5wcml2YXRlX2RhdGE7CiAKIAlpZiAoKGVycm9yID0gc25kX2NhcmRfYWxzMTAwX3BucChkZXYsIGFjYXJkLCBwY2FyZCwgcGlkKSkpIHsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9henQyMzIwLmMgYi9zb3VuZC9pc2EvYXp0MjMyMC5jCmluZGV4IDNlNzRkMWEuLmY3YWE2MzcgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9henQyMzIwLmMKKysrIGIvc291bmQvaXNhL2F6dDIzMjAuYwpAQCAtMTg0LDkgKzE4NCwxMCBAQAogCXN0cnVjdCBzbmRfd3NzICpjaGlwOwogCXN0cnVjdCBzbmRfb3BsMyAqb3BsMzsKIAotCWlmICgoY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKLQkJCQkgc2l6ZW9mKHN0cnVjdCBzbmRfY2FyZF9henQyMzIwKSkpID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVycm9yID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAorCQkJCXNpemVvZihzdHJ1Y3Qgc25kX2NhcmRfYXp0MjMyMCksICZjYXJkKTsKKwlpZiAoZXJyb3IgPCAwKQorCQlyZXR1cm4gZXJyb3I7CiAJYWNhcmQgPSAoc3RydWN0IHNuZF9jYXJkX2F6dDIzMjAgKiljYXJkLT5wcml2YXRlX2RhdGE7CiAKIAlpZiAoKGVycm9yID0gc25kX2NhcmRfYXp0MjMyMF9wbnAoZGV2LCBhY2FyZCwgcGNhcmQsIHBpZCkpKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvY21pODMzMC5jIGIvc291bmQvaXNhL2NtaTgzMzAuYwppbmRleCBlNDlhZWM3Li5kZTgzNjA4IDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvY21pODMzMC5jCisrKyBiL3NvdW5kL2lzYS9jbWk4MzMwLmMKQEAgLTMxLDExICszMSwxMSBAQAogICogIFRvIHF1aWNrbHkgbG9hZCB0aGUgbW9kdWxlLAogICoKICAqICBtb2Rwcm9iZSAtYSBzbmQtY21pODMzMCBzYnBvcnQ9MHgyMjAgc2JpcnE9NSBzYmRtYTg9MQotICogICAgc2JkbWExNj01IHdzc3BvcnQ9MHg1MzAgd3NzaXJxPTExIHdzc2RtYT0wCisgKiAgICBzYmRtYTE2PTUgd3NzcG9ydD0weDUzMCB3c3NpcnE9MTEgd3NzZG1hPTAgZm1wb3J0PTB4Mzg4CiAgKgogICogIFRoaXMgY2FyZCBoYXMgdHdvIG1peGVycyBhbmQgdHdvIFBDTSBkZXZpY2VzLiAgSSd2ZSBjaGVlc2VkIGl0IHN1Y2gKICAqICB0aGF0IHJlY29yZGluZyBhbmQgcGxheWJhY2sgY2FuIGJlIGRvbmUgdGhyb3VnaCB0aGUgc2FtZSBkZXZpY2UuCi0gKiAgVGhlIGRyaXZlciAibWFnaWNhbGx5IiByb3V0ZXMgdGhlIGNhcHR1cmluZyB0byB0aGUgQUQxODQ4IGNvZGVjLAorICogIFRoZSBkcml2ZXIgIm1hZ2ljYWxseSIgcm91dGVzIHRoZSBjYXB0dXJpbmcgdG8gdGhlIENNSTgzMzAgY29kZWMsCiAgKiAgYW5kIHBsYXliYWNrIHRvIHRoZSBTQjE2IGNvZGVjLiAgVGhpcyBhbGxvd3MgZm9yIGZ1bGwtZHVwbGV4IG1vZGUKICAqICB0byBzb21lIGV4dGVudC4KICAqICBUaGUgdXRpbGl0aWVzIGluIGFsc2EtdXRpbHMgYXJlIGF3YXJlIG9mIGJvdGggZGV2aWNlcywgc28gcGFzc2luZwpAQCAtNTEsNiArNTEsOCBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL3dzcy5oPgorI2luY2x1ZGUgPHNvdW5kL29wbDMuaD4KKyNpbmNsdWRlIDxzb3VuZC9tcHU0MDEuaD4KICNpbmNsdWRlIDxzb3VuZC9zYi5oPgogI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KIApAQCAtNzksNiArODEsOSBAQAogc3RhdGljIGxvbmcgd3NzcG9ydFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1BPUlQ7CiBzdGF0aWMgaW50IHdzc2lycVtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0lSUTsKIHN0YXRpYyBpbnQgd3NzZG1hW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfRE1BOworc3RhdGljIGxvbmcgZm1wb3J0W1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfUE9SVDsKK3N0YXRpYyBsb25nIG1wdXBvcnRbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9QT1JUOworc3RhdGljIGludCBtcHVpcnFbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9JUlE7CiAKIG1vZHVsZV9wYXJhbV9hcnJheShpbmRleCwgaW50LCBOVUxMLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoaW5kZXgsICJJbmRleCB2YWx1ZSBmb3IgQ01JODMzMCBzb3VuZGNhcmQuIik7CkBAIC0xMDcsNiArMTEyLDEyIEBACiBtb2R1bGVfcGFyYW1fYXJyYXkod3NzZG1hLCBpbnQsIE5VTEwsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyh3c3NkbWEsICJETUEgZm9yIENNSTgzMzAgV1NTIGRyaXZlci4iKTsKIAorbW9kdWxlX3BhcmFtX2FycmF5KGZtcG9ydCwgbG9uZywgTlVMTCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGZtcG9ydCwgIkZNIHBvcnQgIyBmb3IgQ01JODMzMCBkcml2ZXIuIik7Cittb2R1bGVfcGFyYW1fYXJyYXkobXB1cG9ydCwgbG9uZywgTlVMTCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKG1wdXBvcnQsICJNUFUtNDAxIHBvcnQgIyBmb3IgQ01JODMzMCBkcml2ZXIuIik7Cittb2R1bGVfcGFyYW1fYXJyYXkobXB1aXJxLCBpbnQsIE5VTEwsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhtcHVpcnEsICJJUlEgIyBmb3IgQ01JODMzMCBNUFUtNDAxIHBvcnQuIik7CiAjaWZkZWYgQ09ORklHX1BOUAogc3RhdGljIGludCBpc2FfcmVnaXN0ZXJlZDsKIHN0YXRpYyBpbnQgcG5wX3JlZ2lzdGVyZWQ7CkBAIC0xNDksNiArMTYwLDcgQEAKICNpZmRlZiBDT05GSUdfUE5QCiAJc3RydWN0IHBucF9kZXYgKmNhcDsKIAlzdHJ1Y3QgcG5wX2RldiAqcGxheTsKKwlzdHJ1Y3QgcG5wX2RldiAqbXB1OwogI2VuZGlmCiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCXN0cnVjdCBzbmRfd3NzICp3c3M7CkBAIC0xNjUsNyArMTc3LDcgQEAKICNpZmRlZiBDT05GSUdfUE5QCiAKIHN0YXRpYyBzdHJ1Y3QgcG5wX2NhcmRfZGV2aWNlX2lkIHNuZF9jbWk4MzMwX3BucGlkc1tdID0gewotCXsgLmlkID0gIkNNSTAwMDEiLCAuZGV2cyA9IHsgeyAiQEBAMDAwMSIgfSwgeyAiQFhAMDAwMSIgfSB9IH0sCisJeyAuaWQgPSAiQ01JMDAwMSIsIC5kZXZzID0geyB7ICJAQEAwMDAxIiB9LCB7ICJAWEAwMDAxIiB9LCB7ICJASEAwMDAxIiB9IH0gfSwKIAl7IC5pZCA9ICIiIH0KIH07CiAKQEAgLTIxOSw4ICsyMzEsMTAgQEAKIAkJQ01JODMzMF9STVVYM0QsIDUsIDEsIDEpLAogV1NTX1NJTkdMRSgiUEMgU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAwLAogCQlDTUk4MzMwX09VVFBVVFZPTCwgMywgMywgMCksCi1XU1NfU0lOR0xFKCJGTSBQbGF5YmFjayBTd2l0Y2giLCAwLAotCQlDTUk4MzMwX1JFQ01VWCwgMywgMSwgMSksCitXU1NfRE9VQkxFKCJGTSBQbGF5YmFjayBTd2l0Y2giLCAwLAorCQlDUzQyMzFfQVVYMl9MRUZUX0lOUFVULCBDUzQyMzFfQVVYMl9SSUdIVF9JTlBVVCwgNywgNywgMSwgMSksCitXU1NfRE9VQkxFKCJGTSBQbGF5YmFjayBWb2x1bWUiLCAwLAorCQlDUzQyMzFfQVVYMl9MRUZUX0lOUFVULCBDUzQyMzFfQVVYMl9SSUdIVF9JTlBVVCwgMCwgMCwgMzEsIDEpLAogV1NTX1NJTkdMRShTTkRSVl9DVExfTkFNRV9JRUM5NTgoIklucHV0ICIsIENBUFRVUkUsIFNXSVRDSCksIDAsCiAJCUNNSTgzMzBfUk1VWDNELCA3LCAxLCAxKSwKIFdTU19TSU5HTEUoU05EUlZfQ1RMX05BTUVfSUVDOTU4KCJJbnB1dCAiLCBQTEFZQkFDSywgU1dJVENIKSwgMCwKQEAgLTMyMywxNiArMzM3LDIxIEBACiAJaWYgKGFjYXJkLT5wbGF5ID09IE5VTEwpCiAJCXJldHVybiAtRUJVU1k7CiAKKwlhY2FyZC0+bXB1ID0gcG5wX3JlcXVlc3RfY2FyZF9kZXZpY2UoY2FyZCwgaWQtPmRldnNbMl0uaWQsIE5VTEwpOworCWlmIChhY2FyZC0+cGxheSA9PSBOVUxMKQorCQlyZXR1cm4gLUVCVVNZOworCiAJcGRldiA9IGFjYXJkLT5jYXA7CiAKIAllcnIgPSBwbnBfYWN0aXZhdGVfZGV2KHBkZXYpOwogCWlmIChlcnIgPCAwKSB7Ci0JCXNuZF9wcmludGsoS0VSTl9FUlIgIkNNSTgzMzAvQzNEIChBRDE4NDgpIFBuUCBjb25maWd1cmUgZmFpbHVyZVxuIik7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgIkNNSTgzMzAvQzNEIFBuUCBjb25maWd1cmUgZmFpbHVyZVxuIik7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCXdzc3BvcnRbZGV2XSA9IHBucF9wb3J0X3N0YXJ0KHBkZXYsIDApOwogCXdzc2RtYVtkZXZdID0gcG5wX2RtYShwZGV2LCAwKTsKIAl3c3NpcnFbZGV2XSA9IHBucF9pcnEocGRldiwgMCk7CisJZm1wb3J0W2Rldl0gPSBwbnBfcG9ydF9zdGFydChwZGV2LCAxKTsKIAogCS8qIGFsbG9jYXRlIFNCMTYgcmVzb3VyY2VzICovCiAJcGRldiA9IGFjYXJkLT5wbGF5OwpAQCAtMzQ3LDYgKzM2NiwxNyBAQAogCXNiZG1hMTZbZGV2XSA9IHBucF9kbWEocGRldiwgMSk7CiAJc2JpcnFbZGV2XSA9IHBucF9pcnEocGRldiwgMCk7CiAKKwkvKiBhbGxvY2F0ZSBNUFUtNDAxIHJlc291cmNlcyAqLworCXBkZXYgPSBhY2FyZC0+bXB1OworCisJZXJyID0gcG5wX2FjdGl2YXRlX2RldihwZGV2KTsKKwlpZiAoZXJyIDwgMCkgeworCQlzbmRfcHJpbnRrKEtFUk5fRVJSCisJCQkgICAiQ01JODMzMC9DM0QgKE1QVS00MDEpIFBuUCBjb25maWd1cmUgZmFpbHVyZVxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCW1wdXBvcnRbZGV2XSA9IHBucF9wb3J0X3N0YXJ0KHBkZXYsIDApOworCW1wdWlycVtkZXZdID0gcG5wX2lycShwZGV2LCAwKTsKIAlyZXR1cm4gMDsKIH0KICNlbmRpZgpAQCAtNDY3LDI2ICs0OTcsMjkgQEAKIAogI2RlZmluZSBQRlgJImNtaTgzMzA6ICIKIAotc3RhdGljIHN0cnVjdCBzbmRfY2FyZCAqc25kX2NtaTgzMzBfY2FyZF9uZXcoaW50IGRldikKK3N0YXRpYyBpbnQgc25kX2NtaTgzMzBfY2FyZF9uZXcoaW50IGRldiwgc3RydWN0IHNuZF9jYXJkICoqY2FyZHApCiB7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCXN0cnVjdCBzbmRfY21pODMzMCAqYWNhcmQ7CisJaW50IGVycjsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCi0JCQkgICAgc2l6ZW9mKHN0cnVjdCBzbmRfY21pODMzMCkpOwotCWlmIChjYXJkID09IE5VTEwpIHsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisJCQkgICAgICBzaXplb2Yoc3RydWN0IHNuZF9jbWk4MzMwKSwgJmNhcmQpOworCWlmIChlcnIgPCAwKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgUEZYICJjb3VsZCBub3QgZ2V0IGEgbmV3IGNhcmRcbiIpOwotCQlyZXR1cm4gTlVMTDsKKwkJcmV0dXJuIGVycjsKIAl9CiAJYWNhcmQgPSBjYXJkLT5wcml2YXRlX2RhdGE7CiAJYWNhcmQtPmNhcmQgPSBjYXJkOwotCXJldHVybiBjYXJkOworCSpjYXJkcCA9IGNhcmQ7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9jbWk4MzMwX3Byb2JlKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgaW50IGRldikKIHsKIAlzdHJ1Y3Qgc25kX2NtaTgzMzAgKmFjYXJkOwogCWludCBpLCBlcnI7CisJc3RydWN0IHNuZF9vcGwzICpvcGwzOwogCiAJYWNhcmQgPSBjYXJkLT5wcml2YXRlX2RhdGE7CiAJZXJyID0gc25kX3dzc19jcmVhdGUoY2FyZCwgd3NzcG9ydFtkZXZdICsgNCwgLTEsCkBAIC00OTQsMTEgKzUyNywxMSBAQAogCQkJICAgICB3c3NkbWFbZGV2XSwgLTEsCiAJCQkgICAgIFdTU19IV19ERVRFQ1QsIDAsICZhY2FyZC0+d3NzKTsKIAlpZiAoZXJyIDwgMCkgewotCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFBGWCAiKEFEMTg0OCkgZGV2aWNlIGJ1c3k/P1xuIik7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgUEZYICIoQ01JODMzMCkgZGV2aWNlIGJ1c3k/P1xuIik7CiAJCXJldHVybiBlcnI7CiAJfQogCWlmIChhY2FyZC0+d3NzLT5oYXJkd2FyZSAhPSBXU1NfSFdfQ01JODMzMCkgewotCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFBGWCAiKEFEMTg0OCkgbm90IGZvdW5kIGR1cmluZyBwcm9iZVxuIik7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgUEZYICIoQ01JODMzMCkgbm90IGZvdW5kIGR1cmluZyBwcm9iZVxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApAQCAtNTMwLDYgKzU2MywyNyBAQAogCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFBGWCAiZmFpbGVkIHRvIGNyZWF0ZSBwY21zXG4iKTsKIAkJcmV0dXJuIGVycjsKIAl9CisJaWYgKGZtcG9ydFtkZXZdICE9IFNORFJWX0FVVE9fUE9SVCkgeworCQlpZiAoc25kX29wbDNfY3JlYXRlKGNhcmQsCisJCQkJICAgIGZtcG9ydFtkZXZdLCBmbXBvcnRbZGV2XSArIDIsCisJCQkJICAgIE9QTDNfSFdfQVVUTywgMCwgJm9wbDMpIDwgMCkgeworCQkJc25kX3ByaW50ayhLRVJOX0VSUiBQRlgKKwkJCQkgICAibm8gT1BMIGRldmljZSBhdCAweCVseC0weCVseCA/XG4iLAorCQkJCSAgIGZtcG9ydFtkZXZdLCBmbXBvcnRbZGV2XSArIDIpOworCQl9IGVsc2UgeworCQkJZXJyID0gc25kX29wbDNfaHdkZXBfbmV3KG9wbDMsIDAsIDEsIE5VTEwpOworCQkJaWYgKGVyciA8IDApCisJCQkJcmV0dXJuIGVycjsKKwkJfQorCX0KKworCWlmIChtcHVwb3J0W2Rldl0gIT0gU05EUlZfQVVUT19QT1JUKSB7CisJCWlmIChzbmRfbXB1NDAxX3VhcnRfbmV3KGNhcmQsIDAsIE1QVTQwMV9IV19NUFU0MDEsCisJCQkJCW1wdXBvcnRbZGV2XSwgMCwgbXB1aXJxW2Rldl0sCisJCQkJCUlSUUZfRElTQUJMRUQsIE5VTEwpIDwgMCkKKwkJCXByaW50ayhLRVJOX0VSUiBQRlggIm5vIE1QVS00MDEgZGV2aWNlIGF0IDB4JWx4LlxuIiwKKwkJCQltcHVwb3J0W2Rldl0pOworCX0KIAogCXN0cmNweShjYXJkLT5kcml2ZXIsICJDTUk4MzMwL0MzRCIpOwogCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsICJDLU1lZGlhIENNSTgzMzAvQzNEIik7CkBAIC01NjQsOSArNjE4LDkgQEAKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAJaW50IGVycjsKIAotCWNhcmQgPSBzbmRfY21pODMzMF9jYXJkX25ldyhkZXYpOwotCWlmICghIGNhcmQpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jbWk4MzMwX2NhcmRfbmV3KGRldiwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgcGRldik7CiAJaWYgKChlcnIgPSBzbmRfY21pODMzMF9wcm9iZShjYXJkLCBkZXYpKSA8IDApIHsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKQEAgLTYyOCw5ICs2ODIsOSBAQAogCWlmIChkZXYgPj0gU05EUlZfQ0FSRFMpCiAJCXJldHVybiAtRU5PREVWOwogCQkJICAgICAgIAotCWNhcmQgPSBzbmRfY21pODMzMF9jYXJkX25ldyhkZXYpOwotCWlmICghIGNhcmQpCi0JCXJldHVybiAtRU5PTUVNOworCXJlcyA9IHNuZF9jbWk4MzMwX2NhcmRfbmV3KGRldiwgJmNhcmQpOworCWlmIChyZXMgPCAwKQorCQlyZXR1cm4gcmVzOwogCWlmICgocmVzID0gc25kX2NtaTgzMzBfcG5wKGRldiwgY2FyZC0+cHJpdmF0ZV9kYXRhLCBwY2FyZCwgcGlkKSkgPCAwKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgUEZYICJQblAgZGV0ZWN0aW9uIGZhaWxlZFxuIik7CiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvY3M0MjN4L01ha2VmaWxlIGIvc291bmQvaXNhL2NzNDIzeC9NYWtlZmlsZQppbmRleCA1ODcwY2EyLi42ZDM5N2U4IDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvY3M0MjN4L01ha2VmaWxlCisrKyBiL3NvdW5kL2lzYS9jczQyM3gvTWFrZWZpbGUKQEAgLTMsMTMgKzMsMTEgQEAKICMgQ29weXJpZ2h0IChjKSAyMDAxIGJ5IEphcm9zbGF2IEt5c2VsYSA8cGVyZXhAcGVyZXguY3o+CiAjCiAKLXNuZC1jczQyMzYtbGliLW9ianMgOj0gY3M0MjM2X2xpYi5vCiBzbmQtY3M0MjMxLW9ianMgOj0gY3M0MjMxLm8KLXNuZC1jczQyMzItb2JqcyA6PSBjczQyMzIubwotc25kLWNzNDIzNi1vYmpzIDo9IGNzNDIzNi5vCitzbmQtY3M0MjM2LW9ianMgOj0gY3M0MjM2Lm8gY3M0MjM2X2xpYi5vCiAKICMgVG9wbGV2ZWwgTW9kdWxlIERlcGVuZGVuY3kKIG9iai0kKENPTkZJR19TTkRfQ1M0MjMxKSArPSBzbmQtY3M0MjMxLm8KLW9iai0kKENPTkZJR19TTkRfQ1M0MjMyKSArPSBzbmQtY3M0MjMyLm8KLW9iai0kKENPTkZJR19TTkRfQ1M0MjM2KSArPSBzbmQtY3M0MjM2Lm8gc25kLWNzNDIzNi1saWIubworb2JqLSQoQ09ORklHX1NORF9DUzQyMzYpICs9IHNuZC1jczQyMzYubworCiAKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9jczQyM3gvY3M0MjMxLmMgYi9zb3VuZC9pc2EvY3M0MjN4L2NzNDIzMS5jCmluZGV4IGYwMTlkNDQuLmNiOTE1M2UgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9jczQyM3gvY3M0MjMxLmMKKysrIGIvc291bmQvaXNhL2NzNDIzeC9jczQyMzEuYwpAQCAtOTUsOSArOTUsOSBAQAogCXN0cnVjdCBzbmRfcGNtICpwY207CiAJaW50IGVycm9yOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtuXSwgaWRbbl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoIWNhcmQpCi0JCXJldHVybiAtRUlOVkFMOworCWVycm9yID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W25dLCBpZFtuXSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyb3IgPCAwKQorCQlyZXR1cm4gZXJyb3I7CiAKIAllcnJvciA9IHNuZF93c3NfY3JlYXRlKGNhcmQsIHBvcnRbbl0sIC0xLCBpcnFbbl0sIGRtYTFbbl0sIGRtYTJbbl0sCiAJCQlXU1NfSFdfREVURUNULCAwLCAmY2hpcCk7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvY3M0MjN4L2NzNDIzMi5jIGIvc291bmQvaXNhL2NzNDIzeC9jczQyMzIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWZhZDJlNi4uMDAwMDAwMAotLS0gYS9zb3VuZC9pc2EvY3M0MjN4L2NzNDIzMi5jCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0jZGVmaW5lIENTNDIzMgotI2luY2x1ZGUgImNzNDIzNi5jIgpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2NzNDIzeC9jczQyMzYuYyBiL3NvdW5kL2lzYS9jczQyM3gvY3M0MjM2LmMKaW5kZXggMDE5Yzk0MC4uYTA3NmE2YyAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2NzNDIzeC9jczQyMzYuYworKysgYi9zb3VuZC9pc2EvY3M0MjN4L2NzNDIzNi5jCkBAIC0zMywxNyArMzMsMTQgQEAKIAogTU9EVUxFX0FVVEhPUigiSmFyb3NsYXYgS3lzZWxhIDxwZXJleEBwZXJleC5jej4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLSNpZmRlZiBDUzQyMzIKLU1PRFVMRV9ERVNDUklQVElPTigiQ2lycnVzIExvZ2ljIENTNDIzMiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDaXJydXMgTG9naWMgQ1M0MjMyLTkiKTsKIE1PRFVMRV9TVVBQT1JURURfREVWSUNFKCJ7e1R1cnRsZSBCZWFjaCxUQlMtMjAwMH0sIgogCQkie1R1cnRsZSBCZWFjaCxUcm9wZXogUGx1c30sIgogCQkie1NJQyBDcnlzdGFsV2F2ZSAzMn0sIgogCQkie0hld2xldHQgUGFja2FyZCxPbW5pYm9vayA1NTAwfSwiCiAJCSJ7VGVycmFUZWMsTWFlc3RybyAzMi85Nn0sIgotCQkie1BoaWxpcHMsUENBNzBQU319Iik7Ci0jZWxzZQotTU9EVUxFX0RFU0NSSVBUSU9OKCJDaXJydXMgTG9naWMgQ1M0MjM1LTkiKTsKLU1PRFVMRV9TVVBQT1JURURfREVWSUNFKCJ7e0NyeXN0YWwgU2VtaWNvbmR1Y3RvcnMsQ1M0MjM1fSwiCisJCSJ7UGhpbGlwcyxQQ0E3MFBTfX0sIgorCQkie3tDcnlzdGFsIFNlbWljb25kdWN0b3JzLENTNDIzNX0sIgogCQkie0NyeXN0YWwgU2VtaWNvbmR1Y3RvcnMsQ1M0MjM2fSwiCiAJCSJ7Q3J5c3RhbCBTZW1pY29uZHVjdG9ycyxDUzQyMzd9LCIKIAkJIntDcnlzdGFsIFNlbWljb25kdWN0b3JzLENTNDIzOH0sIgpAQCAtNzAsMTUgKzY3LDExIEBACiAJCSJ7VHlwaG9vbiBTb3VuZHN5c3RlbSxDUzQyMzZCfSwiCiAJCSJ7VHVydGxlIEJlYWNoLE1hbGlidX0sIgogCQkie1Vua25vd24sRGlnaXRhbCBQQyA1MDAwIE9uYm9hcmR9fSIpOwotI2VuZGlmCiAKLSNpZmRlZiBDUzQyMzIKLSNkZWZpbmUgSURFTlQgIkNTNDIzMiIKLSNkZWZpbmUgREVWX05BTUUgImNzNDIzMiIKLSNlbHNlCi0jZGVmaW5lIElERU5UICJDUzQyMzYrIgotI2RlZmluZSBERVZfTkFNRSAiY3M0MjM2IgotI2VuZGlmCitNT0RVTEVfQUxJQVMoInNuZF9jczQyMzIiKTsKKworI2RlZmluZSBJREVOVCAiQ1M0MjMyKyIKKyNkZWZpbmUgREVWX05BTUUgImNzNDIzMisiCiAKIHN0YXRpYyBpbnQgaW5kZXhbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9JRFg7CS8qIEluZGV4IDAtTUFYICovCiBzdGF0aWMgY2hhciAqaWRbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9TVFI7CS8qIElEIGZvciB0aGlzIGNhcmQgKi8KQEAgLTEyOCw5ICsxMjEsNyBAQAogI2lmZGVmIENPTkZJR19QTlAKIHN0YXRpYyBpbnQgaXNhX3JlZ2lzdGVyZWQ7CiBzdGF0aWMgaW50IHBucGNfcmVnaXN0ZXJlZDsKLSNpZmRlZiBDUzQyMzIKIHN0YXRpYyBpbnQgcG5wX3JlZ2lzdGVyZWQ7Ci0jZW5kaWYKICNlbmRpZiAvKiBDT05GSUdfUE5QICovCiAKIHN0cnVjdCBzbmRfY2FyZF9jczQyMzYgewpAQCAtMTQ1LDExICsxMzYsMTAgQEAKIAogI2lmZGVmIENPTkZJR19QTlAKIAotI2lmZGVmIENTNDIzMgogLyoKICAqIFBOUCBCSU9TCiAgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcG5wX2RldmljZV9pZCBzbmRfY3M0MjMyX3BucGJpb3NpZHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcG5wX2RldmljZV9pZCBzbmRfY3M0MjN4X3BucGJpb3NpZHNbXSA9IHsKIAl7IC5pZCA9ICJDU0MwMTAwIiB9LAogCXsgLmlkID0gIkNTQzAwMDAiIH0sCiAJLyogR3VpbGxlbW90IFR1cnRsZWJlYWNoIHNvbWV0aGluZyBhcHBlYXJzIHRvIGJlIGNzNDIzMiBjb21wYXRpYmxlCkBAIC0xNTcsMTAgKzE0Nyw4IEBACiAJeyAuaWQgPSAiR0lNMDEwMCIgfSwKIAl7IC5pZCA9ICIiIH0KIH07Ci1NT0RVTEVfREVWSUNFX1RBQkxFKHBucCwgc25kX2NzNDIzMl9wbnBiaW9zaWRzKTsKLSNlbmRpZiAvKiBDUzQyMzIgKi8KK01PRFVMRV9ERVZJQ0VfVEFCTEUocG5wLCBzbmRfY3M0MjN4X3BucGJpb3NpZHMpOwogCi0jaWZkZWYgQ1M0MjMyCiAjZGVmaW5lIENTNDIzWF9JU0FQTlBfRFJJVkVSCSJjczQyMzJfaXNhcG5wIgogc3RhdGljIHN0cnVjdCBwbnBfY2FyZF9kZXZpY2VfaWQgc25kX2NzNDIzeF9wbnBpZHNbXSA9IHsKIAkvKiBQaGlsaXBzIFBDQTcwUFMgKi8KQEAgLTE3OSwxMiArMTY3LDYgQEAKIAl7IC5pZCA9ICJDU0NmMDMyIiwgLmRldnMgPSB7IHsgIkNTQzAwMDAiIH0sIHsgIkNTQzAwMTAiIH0sIHsgIkNTQzAwMDMiIH0gfSB9LAogCS8qIE5ldGZpbml0eSAzMDAwIG9uLWJvYXJkIHNvdW5kY2FyZCAqLwogCXsgLmlkID0gIkNTQ2U4MjUiLCAuZGV2cyA9IHsgeyAiQ1NDMDEwMCIgfSwgeyAiQ1NDMDExMCIgfSwgeyAiQ1NDMDEwZiIgfSB9IH0sCi0JLyogLS0tICovCi0JeyAuaWQgPSAiIiB9CS8qIGVuZCAqLwotfTsKLSNlbHNlIC8qIENTNDIzNiAqLwotI2RlZmluZSBDUzQyM1hfSVNBUE5QX0RSSVZFUgkiY3M0MjM2X2lzYXBucCIKLXN0YXRpYyBzdHJ1Y3QgcG5wX2NhcmRfZGV2aWNlX2lkIHNuZF9jczQyM3hfcG5waWRzW10gPSB7CiAJLyogSW50ZWwgTWFybGluIFNwaWtlIE1vdGhlcmJvYXJkIC0gQ1M0MjM1ICovCiAJeyAuaWQgPSAiQ1NDMDIyNSIsIC5kZXZzID0geyB7ICJDU0MwMDAwIiB9LCB7ICJDU0MwMDEwIiB9LCB7ICJDU0MwMDAzIiB9IH0gfSwKIAkvKiBJbnRlbCBNYXJsaW4gU3Bpa2UgTW90aGVyYm9hcmQgKCMyKSAtIENTNDIzNSAqLwpAQCAtMjY2LDcgKzI0OCw2IEBACiAJLyogLS0tICovCiAJeyAuaWQgPSAiIiB9CS8qIGVuZCAqLwogfTsKLSNlbmRpZgogCiBNT0RVTEVfREVWSUNFX1RBQkxFKHBucF9jYXJkLCBzbmRfY3M0MjN4X3BucGlkcyk7CiAKQEAgLTMyMywxNyArMzA0LDE5IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZmRlZiBDUzQyMzIKLXN0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9jYXJkX2NzNDIzMl9wbnAoaW50IGRldiwgc3RydWN0IHNuZF9jYXJkX2NzNDIzNiAqYWNhcmQsCi0JCQkJCSBzdHJ1Y3QgcG5wX2RldiAqcGRldikKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9jYXJkX2NzNDIzeF9wbnAoaW50IGRldiwgc3RydWN0IHNuZF9jYXJkX2NzNDIzNiAqYWNhcmQsCisJCQkJCSBzdHJ1Y3QgcG5wX2RldiAqcGRldiwKKwkJCQkJIHN0cnVjdCBwbnBfZGV2ICpjZGV2KQogewogCWFjYXJkLT53c3MgPSBwZGV2OwogCWlmIChzbmRfY3M0MjN4X3BucF9pbml0X3dzcyhkZXYsIGFjYXJkLT53c3MpIDwgMCkKIAkJcmV0dXJuIC1FQlVTWTsKLQljcG9ydFtkZXZdID0gLTE7CisJaWYgKGNkZXYpCisJCWNwb3J0W2Rldl0gPSBwbnBfcG9ydF9zdGFydChjZGV2LCAwKTsKKwllbHNlCisJCWNwb3J0W2Rldl0gPSAtMTsKIAlyZXR1cm4gMDsKIH0KLSNlbmRpZgogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfY2FyZF9jczQyM3hfcG5wYyhpbnQgZGV2LCBzdHJ1Y3Qgc25kX2NhcmRfY3M0MjM2ICphY2FyZCwKIAkJCQkJICBzdHJ1Y3QgcG5wX2NhcmRfbGluayAqY2FyZCwKQEAgLTM4MiwxNiArMzY1LDE4IEBACiAJcmVsZWFzZV9hbmRfZnJlZV9yZXNvdXJjZShhY2FyZC0+cmVzX3NiX3BvcnQpOwogfQogCi1zdGF0aWMgc3RydWN0IHNuZF9jYXJkICpzbmRfY3M0MjN4X2NhcmRfbmV3KGludCBkZXYpCitzdGF0aWMgaW50IHNuZF9jczQyM3hfY2FyZF9uZXcoaW50IGRldiwgc3RydWN0IHNuZF9jYXJkICoqY2FyZHApCiB7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOworCWludCBlcnI7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAotCQkJICAgIHNpemVvZihzdHJ1Y3Qgc25kX2NhcmRfY3M0MjM2KSk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIE5VTEw7CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAorCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBzbmRfY2FyZF9jczQyMzYpLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAJY2FyZC0+cHJpdmF0ZV9mcmVlID0gc25kX2NhcmRfY3M0MjM2X2ZyZWU7Ci0JcmV0dXJuIGNhcmQ7CisJKmNhcmRwID0gY2FyZDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBfX2RldmluaXQgc25kX2NzNDIzeF9wcm9iZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIGludCBkZXYpCkBAIC00MDksNDAgKzM5NCwzOSBAQAogCQkJcmV0dXJuIC1FQlVTWTsKIAkJfQogCi0jaWZkZWYgQ1M0MjMyCiAJZXJyID0gc25kX3dzc19jcmVhdGUoY2FyZCwgcG9ydFtkZXZdLCBjcG9ydFtkZXZdLAogCQkJICAgICBpcnFbZGV2XSwKIAkJCSAgICAgZG1hMVtkZXZdLCBkbWEyW2Rldl0sCi0JCQkgICAgIFdTU19IV19ERVRFQ1QsIDAsICZjaGlwKTsKKwkJCSAgICAgV1NTX0hXX0RFVEVDVDMsIDAsICZjaGlwKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKLQlhY2FyZC0+Y2hpcCA9IGNoaXA7CisJaWYgKGNoaXAtPmhhcmR3YXJlICYgV1NTX0hXX0NTNDIzNkJfTUFTSykgeworCQlzbmRfd3NzX2ZyZWUoY2hpcCk7CisJCWVyciA9IHNuZF9jczQyMzZfY3JlYXRlKGNhcmQsCisJCQkJCXBvcnRbZGV2XSwgY3BvcnRbZGV2XSwKKwkJCQkJaXJxW2Rldl0sIGRtYTFbZGV2XSwgZG1hMltkZXZdLAorCQkJCQlXU1NfSFdfREVURUNULCAwLCAmY2hpcCk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwkJYWNhcmQtPmNoaXAgPSBjaGlwOwogCi0JZXJyID0gc25kX3dzc19wY20oY2hpcCwgMCwgJnBjbSk7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7CisJCWVyciA9IHNuZF9jczQyMzZfcGNtKGNoaXAsIDAsICZwY20pOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CiAKLQllcnIgPSBzbmRfd3NzX21peGVyKGNoaXApOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOworCQllcnIgPSBzbmRfY3M0MjM2X21peGVyKGNoaXApOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJfSBlbHNlIHsKKwkJYWNhcmQtPmNoaXAgPSBjaGlwOworCQllcnIgPSBzbmRfd3NzX3BjbShjaGlwLCAwLCAmcGNtKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOwogCi0jZWxzZSAvKiBDUzQyMzYgKi8KLQllcnIgPSBzbmRfY3M0MjM2X2NyZWF0ZShjYXJkLAotCQkJCXBvcnRbZGV2XSwgY3BvcnRbZGV2XSwKLQkJCQlpcnFbZGV2XSwgZG1hMVtkZXZdLCBkbWEyW2Rldl0sCi0JCQkJV1NTX0hXX0RFVEVDVCwgMCwgJmNoaXApOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCWFjYXJkLT5jaGlwID0gY2hpcDsKLQotCWVyciA9IHNuZF9jczQyMzZfcGNtKGNoaXAsIDAsICZwY20pOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCi0JZXJyID0gc25kX2NzNDIzNl9taXhlcihjaGlwKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLSNlbmRpZgorCQllcnIgPSBzbmRfd3NzX21peGVyKGNoaXApOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJfQogCXN0cmNweShjYXJkLT5kcml2ZXIsIHBjbS0+bmFtZSk7CiAJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgcGNtLT5uYW1lKTsKIAlzcHJpbnRmKGNhcmQtPmxvbmduYW1lLCAiJXMgYXQgMHglbHgsIGlycSAlaSwgZG1hICVpIiwKQEAgLTUxMiw5ICs0OTYsOSBAQAogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKIAlpbnQgZXJyOwogCi0JY2FyZCA9IHNuZF9jczQyM3hfY2FyZF9uZXcoZGV2KTsKLQlpZiAoISBjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY3M0MjN4X2NhcmRfbmV3KGRldiwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgcGRldik7CiAJaWYgKChlcnIgPSBzbmRfY3M0MjN4X3Byb2JlKGNhcmQsIGRldikpIDwgMCkgewogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwpAQCAtNTc3LDEzICs1NjEsMTQgQEAKIAogCiAjaWZkZWYgQ09ORklHX1BOUAotI2lmZGVmIENTNDIzMgotc3RhdGljIGludCBfX2RldmluaXQgc25kX2NzNDIzMl9wbnBiaW9zX2RldGVjdChzdHJ1Y3QgcG5wX2RldiAqcGRldiwKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9jczQyM3hfcG5wYmlvc19kZXRlY3Qoc3RydWN0IHBucF9kZXYgKnBkZXYsCiAJCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgcG5wX2RldmljZV9pZCAqaWQpCiB7CiAJc3RhdGljIGludCBkZXY7CiAJaW50IGVycjsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CisJc3RydWN0IHBucF9kZXYgKmNkZXY7CisJY2hhciBjaWRbUE5QX0lEX0xFTl07CiAKIAlpZiAocG5wX2RldmljZV9pc19pc2FwbnAocGRldikpCiAJCXJldHVybiAtRU5PRU5UOwkvKiB3ZSBoYXZlIGFub3RoZXIgcHJvY2VkdXJlIC0gY2FyZCAqLwpAQCAtNTk0LDEwICs1NzksMTkgQEAKIAlpZiAoZGV2ID49IFNORFJWX0NBUkRTKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWNhcmQgPSBzbmRfY3M0MjN4X2NhcmRfbmV3KGRldik7Ci0JaWYgKCEgY2FyZCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JaWYgKChlcnIgPSBzbmRfY2FyZF9jczQyMzJfcG5wKGRldiwgY2FyZC0+cHJpdmF0ZV9kYXRhLCBwZGV2KSkgPCAwKSB7CisJLyogcHJlcGFyZSBzZWNvbmQgaWQgKi8KKwlzdHJjcHkoY2lkLCBwZGV2LT5pZFswXS5pZCk7CisJY2lkWzVdID0gJzEnOworCWNkZXYgPSBOVUxMOworCWxpc3RfZm9yX2VhY2hfZW50cnkoY2RldiwgJihwZGV2LT5wcm90b2NvbC0+ZGV2aWNlcyksIHByb3RvY29sX2xpc3QpIHsKKwkJaWYgKCFzdHJjbXAoY2Rldi0+aWRbMF0uaWQsIGNpZCkpCisJCQlicmVhazsKKwl9CisJZXJyID0gc25kX2NzNDIzeF9jYXJkX25ldyhkZXYsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwllcnIgPSBzbmRfY2FyZF9jczQyM3hfcG5wKGRldiwgY2FyZC0+cHJpdmF0ZV9kYXRhLCBwZGV2LCBjZGV2KTsKKwlpZiAoZXJyIDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgIlBuUCBCSU9TIGRldGVjdGlvbiBmYWlsZWQgZm9yICIgSURFTlQgIlxuIik7CiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CiAJCXJldHVybiBlcnI7CkBAIC02MTIsMzUgKzYwNiwzNCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBfX2RldmV4aXQgc25kX2NzNDIzMl9wbnBfcmVtb3ZlKHN0cnVjdCBwbnBfZGV2ICogcGRldikKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBzbmRfY3M0MjN4X3BucF9yZW1vdmUoc3RydWN0IHBucF9kZXYgKnBkZXYpCiB7CiAJc25kX2NhcmRfZnJlZShwbnBfZ2V0X2RydmRhdGEocGRldikpOwogCXBucF9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIH0KIAogI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBzbmRfY3M0MjMyX3BucF9zdXNwZW5kKHN0cnVjdCBwbnBfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHNuZF9jczQyM3hfcG5wX3N1c3BlbmQoc3RydWN0IHBucF9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlyZXR1cm4gc25kX2NzNDIzeF9zdXNwZW5kKHBucF9nZXRfZHJ2ZGF0YShwZGV2KSk7CiB9CiAKLXN0YXRpYyBpbnQgc25kX2NzNDIzMl9wbnBfcmVzdW1lKHN0cnVjdCBwbnBfZGV2ICpwZGV2KQorc3RhdGljIGludCBzbmRfY3M0MjN4X3BucF9yZXN1bWUoc3RydWN0IHBucF9kZXYgKnBkZXYpCiB7CiAJcmV0dXJuIHNuZF9jczQyM3hfcmVzdW1lKHBucF9nZXRfZHJ2ZGF0YShwZGV2KSk7CiB9CiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCBwbnBfZHJpdmVyIGNzNDIzMl9wbnBfZHJpdmVyID0gewotCS5uYW1lID0gImNzNDIzMi1wbnBiaW9zIiwKLQkuaWRfdGFibGUgPSBzbmRfY3M0MjMyX3BucGJpb3NpZHMsCi0JLnByb2JlID0gc25kX2NzNDIzMl9wbnBiaW9zX2RldGVjdCwKLQkucmVtb3ZlID0gX19kZXZleGl0X3Aoc25kX2NzNDIzMl9wbnBfcmVtb3ZlKSwKK3N0YXRpYyBzdHJ1Y3QgcG5wX2RyaXZlciBjczQyM3hfcG5wX2RyaXZlciA9IHsKKwkubmFtZSA9ICJjczQyM3gtcG5wYmlvcyIsCisJLmlkX3RhYmxlID0gc25kX2NzNDIzeF9wbnBiaW9zaWRzLAorCS5wcm9iZSA9IHNuZF9jczQyM3hfcG5wYmlvc19kZXRlY3QsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF9jczQyM3hfcG5wX3JlbW92ZSksCiAjaWZkZWYgQ09ORklHX1BNCi0JLnN1c3BlbmQJPSBzbmRfY3M0MjMyX3BucF9zdXNwZW5kLAotCS5yZXN1bWUJCT0gc25kX2NzNDIzMl9wbnBfcmVzdW1lLAorCS5zdXNwZW5kCT0gc25kX2NzNDIzeF9wbnBfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHNuZF9jczQyM3hfcG5wX3Jlc3VtZSwKICNlbmRpZgogfTsKLSNlbmRpZiAvKiBDUzQyMzIgKi8KIAogc3RhdGljIGludCBfX2RldmluaXQgc25kX2NzNDIzeF9wbnBjX2RldGVjdChzdHJ1Y3QgcG5wX2NhcmRfbGluayAqcGNhcmQsCiAJCQkJCSAgICBjb25zdCBzdHJ1Y3QgcG5wX2NhcmRfZGV2aWNlX2lkICpwaWQpCkBAIC02NTYsOSArNjQ5LDkgQEAKIAlpZiAoZGV2ID49IFNORFJWX0NBUkRTKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWNhcmQgPSBzbmRfY3M0MjN4X2NhcmRfbmV3KGRldik7Ci0JaWYgKCEgY2FyZCkKLQkJcmV0dXJuIC1FTk9NRU07CisJcmVzID0gc25kX2NzNDIzeF9jYXJkX25ldyhkZXYsICZjYXJkKTsKKwlpZiAocmVzIDwgMCkKKwkJcmV0dXJuIHJlczsKIAlpZiAoKHJlcyA9IHNuZF9jYXJkX2NzNDIzeF9wbnBjKGRldiwgY2FyZC0+cHJpdmF0ZV9kYXRhLCBwY2FyZCwgcGlkKSkgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiaXNhcG5wIGRldGVjdGlvbiBmYWlsZWQgYW5kIHByb2JpbmcgZm9yICIgSURFTlQKIAkJICAgICAgICIgaXMgbm90IHN1cHBvcnRlZFxuIik7CkBAIC03MTQsMTggKzcwNywxNCBAQAogI2lmZGVmIENPTkZJR19QTlAKIAlpZiAoIWVycikKIAkJaXNhX3JlZ2lzdGVyZWQgPSAxOwotI2lmZGVmIENTNDIzMgotCWVyciA9IHBucF9yZWdpc3Rlcl9kcml2ZXIoJmNzNDIzMl9wbnBfZHJpdmVyKTsKKwllcnIgPSBwbnBfcmVnaXN0ZXJfZHJpdmVyKCZjczQyM3hfcG5wX2RyaXZlcik7CiAJaWYgKCFlcnIpCiAJCXBucF9yZWdpc3RlcmVkID0gMTsKLSNlbmRpZgogCWVyciA9IHBucF9yZWdpc3Rlcl9jYXJkX2RyaXZlcigmY3M0MjN4X3BucGNfZHJpdmVyKTsKIAlpZiAoIWVycikKIAkJcG5wY19yZWdpc3RlcmVkID0gMTsKLSNpZmRlZiBDUzQyMzIKIAlpZiAocG5wX3JlZ2lzdGVyZWQpCiAJCWVyciA9IDA7Ci0jZW5kaWYKIAlpZiAoaXNhX3JlZ2lzdGVyZWQpCiAJCWVyciA9IDA7CiAjZW5kaWYKQEAgLTczNywxMCArNzI2LDggQEAKICNpZmRlZiBDT05GSUdfUE5QCiAJaWYgKHBucGNfcmVnaXN0ZXJlZCkKIAkJcG5wX3VucmVnaXN0ZXJfY2FyZF9kcml2ZXIoJmNzNDIzeF9wbnBjX2RyaXZlcik7Ci0jaWZkZWYgQ1M0MjMyCiAJaWYgKHBucF9yZWdpc3RlcmVkKQotCQlwbnBfdW5yZWdpc3Rlcl9kcml2ZXIoJmNzNDIzMl9wbnBfZHJpdmVyKTsKLSNlbmRpZgorCQlwbnBfdW5yZWdpc3Rlcl9kcml2ZXIoJmNzNDIzeF9wbnBfZHJpdmVyKTsKIAlpZiAoaXNhX3JlZ2lzdGVyZWQpCiAjZW5kaWYKIAkJaXNhX3VucmVnaXN0ZXJfZHJpdmVyKCZjczQyM3hfaXNhX2RyaXZlcik7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvY3M0MjN4L2NzNDIzNl9saWIuYyBiL3NvdW5kL2lzYS9jczQyM3gvY3M0MjM2X2xpYi5jCmluZGV4IDZhODVmZGMuLjM4ODM1ZjMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9jczQyM3gvY3M0MjM2X2xpYi5jCisrKyBiL3NvdW5kL2lzYS9jczQyM3gvY3M0MjM2X2xpYi5jCkBAIC04OCwxMCArODgsNiBAQAogI2luY2x1ZGUgPHNvdW5kL3dzcy5oPgogI2luY2x1ZGUgPHNvdW5kL2Fzb3VuZGVmLmg+CiAKLU1PRFVMRV9BVVRIT1IoIkphcm9zbGF2IEt5c2VsYSA8cGVyZXhAcGVyZXguY3o+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIlJvdXRpbmVzIGZvciBjb250cm9sIG9mIENTNDIzNS80MjM2Qi80MjM3Qi80MjM4Qi80MjM5IGNoaXBzIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KIC8qCiAgKgogICovCkBAIC0yODYsNyArMjgyLDggQEAKIAlpZiAoaGFyZHdhcmUgPT0gV1NTX0hXX0RFVEVDVCkKIAkJaGFyZHdhcmUgPSBXU1NfSFdfREVURUNUMzsKIAlpZiAoY3BvcnQgPCAweDEwMCkgewotCQlzbmRfcHJpbnRrKCJwbGVhc2UsIHNwZWNpZnkgY29udHJvbCBwb3J0IGZvciBDUzQyMzYrIGNoaXBzXG4iKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAicGxlYXNlLCBzcGVjaWZ5IGNvbnRyb2wgcG9ydCAiCisJCQkgICAiZm9yIENTNDIzNisgY2hpcHNcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJZXJyID0gc25kX3dzc19jcmVhdGUoY2FyZCwgcG9ydCwgY3BvcnQsCkBAIC0yOTUsNyArMjkyLDggQEAKIAkJcmV0dXJuIGVycjsKIAogCWlmICghKGNoaXAtPmhhcmR3YXJlICYgV1NTX0hXX0NTNDIzNkJfTUFTSykpIHsKLQkgICAgICAgIHNuZF9wcmludGsoIkNTNDIzNis6IE1PREUzIGFuZCBleHRlbmRlZCByZWdpc3RlcnMgbm90IGF2YWlsYWJsZSwgaGFyZHdhcmU9MHgleFxuIixjaGlwLT5oYXJkd2FyZSk7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgIkNTNDIzNis6IE1PREUzIGFuZCBleHRlbmRlZCByZWdpc3RlcnMgIgorCQkJICAgIm5vdCBhdmFpbGFibGUsIGhhcmR3YXJlPTB4JXhcbiIsIGNoaXAtPmhhcmR3YXJlKTsKIAkJc25kX2RldmljZV9mcmVlKGNhcmQsIGNoaXApOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CkBAIC0zMDMsMTYgKzMwMSwxOSBAQAogCXsKIAkJaW50IGlkeDsKIAkJZm9yIChpZHggPSAwOyBpZHggPCA4OyBpZHgrKykKLQkJCXNuZF9wcmludGsoIkNEJWkgPSAweCV4XG4iLCBpZHgsIGluYihjaGlwLT5jcG9ydCArIGlkeCkpOworCQkJc25kX3ByaW50ayhLRVJOX0RFQlVHICJDRCVpID0gMHgleFxuIiwKKwkJCQkgICBpZHgsIGluYihjaGlwLT5jcG9ydCArIGlkeCkpOwogCQlmb3IgKGlkeCA9IDA7IGlkeCA8IDk7IGlkeCsrKQotCQkJc25kX3ByaW50aygiQyVpID0gMHgleFxuIiwgaWR4LCBzbmRfY3M0MjM2X2N0cmxfaW4oY2hpcCwgaWR4KSk7CisJCQlzbmRfcHJpbnRrKEtFUk5fREVCVUcgIkMlaSA9IDB4JXhcbiIsCisJCQkJICAgaWR4LCBzbmRfY3M0MjM2X2N0cmxfaW4oY2hpcCwgaWR4KSk7CiAJfQogI2VuZGlmCiAJdmVyMSA9IHNuZF9jczQyMzZfY3RybF9pbihjaGlwLCAxKTsKIAl2ZXIyID0gc25kX2NzNDIzNl9leHRfaW4oY2hpcCwgQ1M0MjM2X1ZFUlNJT04pOwogCXNuZF9wcmludGRkKCJDUzQyMzY6IFsweCVseF0gQzEgKHZlcnNpb24pID0gMHgleCwgZXh0ID0gMHgleFxuIiwgY3BvcnQsIHZlcjEsIHZlcjIpOwogCWlmICh2ZXIxICE9IHZlcjIpIHsKLQkJc25kX3ByaW50aygiQ1M0MjM2KyBjaGlwIGRldGVjdGVkLCBidXQgY29udHJvbCBwb3J0IDB4JWx4IGlzIG5vdCB2YWxpZFxuIiwgY3BvcnQpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJDUzQyMzYrIGNoaXAgZGV0ZWN0ZWQsIGJ1dCAiCisJCQkgICAiY29udHJvbCBwb3J0IDB4JWx4IGlzIG5vdCB2YWxpZFxuIiwgY3BvcnQpOwogCQlzbmRfZGV2aWNlX2ZyZWUoY2FyZCwgY2hpcCk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KQEAgLTg4Myw3ICs4ODQsOCBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwogCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gY2hpcC0+aW1hZ2VbQ1M0MjMxX0FMVF9GRUFUVVJFXzFdICYgMHgwMiA/IDEgOiAwOwogI2lmIDAKLQlwcmludGsoImdldCB2YWxpZDogQUxUID0gMHgleCwgQzMgPSAweCV4LCBDNCA9IDB4JXgsIEM1ID0gMHgleCwgQzYgPSAweCV4LCBDOCA9IDB4JXhcbiIsCisJcHJpbnRrKEtFUk5fREVCVUcgImdldCB2YWxpZDogQUxUID0gMHgleCwgQzMgPSAweCV4LCBDNCA9IDB4JXgsICIKKwkgICAgICAgIkM1ID0gMHgleCwgQzYgPSAweCV4LCBDOCA9IDB4JXhcbiIsCiAJCQlzbmRfd3NzX2luKGNoaXAsIENTNDIzMV9BTFRfRkVBVFVSRV8xKSwKIAkJCXNuZF9jczQyMzZfY3RybF9pbihjaGlwLCAzKSwKIAkJCXNuZF9jczQyMzZfY3RybF9pbihjaGlwLCA0KSwKQEAgLTkyMCw3ICs5MjIsOCBAQAogCW11dGV4X3VubG9jaygmY2hpcC0+bWNlX211dGV4KTsKIAogI2lmIDAKLQlwcmludGsoInNldCB2YWxpZDogQUxUID0gMHgleCwgQzMgPSAweCV4LCBDNCA9IDB4JXgsIEM1ID0gMHgleCwgQzYgPSAweCV4LCBDOCA9IDB4JXhcbiIsCisJcHJpbnRrKEtFUk5fREVCVUcgInNldCB2YWxpZDogQUxUID0gMHgleCwgQzMgPSAweCV4LCBDNCA9IDB4JXgsICIKKwkgICAgICAgIkM1ID0gMHgleCwgQzYgPSAweCV4LCBDOCA9IDB4JXhcbiIsCiAJCQlzbmRfd3NzX2luKGNoaXAsIENTNDIzMV9BTFRfRkVBVFVSRV8xKSwKIAkJCXNuZF9jczQyMzZfY3RybF9pbihjaGlwLCAzKSwKIAkJCXNuZF9jczQyMzZfY3RybF9pbihjaGlwLCA0KSwKQEAgLTEwMTUsMjMgKzEwMTgsMyBAQAogCX0KIAlyZXR1cm4gMDsKIH0KLQotRVhQT1JUX1NZTUJPTChzbmRfY3M0MjM2X2NyZWF0ZSk7Ci1FWFBPUlRfU1lNQk9MKHNuZF9jczQyMzZfcGNtKTsKLUVYUE9SVF9TWU1CT0woc25kX2NzNDIzNl9taXhlcik7Ci0KLS8qCi0gKiAgSU5JVCBwYXJ0Ci0gKi8KLQotc3RhdGljIGludCBfX2luaXQgYWxzYV9jczQyMzZfaW5pdCh2b2lkKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgYWxzYV9jczQyMzZfZXhpdCh2b2lkKQotewotfQotCi1tb2R1bGVfaW5pdChhbHNhX2NzNDIzNl9pbml0KQotbW9kdWxlX2V4aXQoYWxzYV9jczQyMzZfZXhpdCkKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9kdDAxOXguYyBiL3NvdW5kL2lzYS9kdDAxOXguYwppbmRleCBhMDI0MmMzLi44MGY1YjFhIDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvZHQwMTl4LmMKKysrIGIvc291bmQvaXNhL2R0MDE5eC5jCkBAIC0xNTAsOSArMTUwLDEwIEBACiAJc3RydWN0IHNuZF9jYXJkX2R0MDE5eCAqYWNhcmQ7CiAJc3RydWN0IHNuZF9vcGwzICpvcGwzOwogCi0JaWYgKChjYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAotCQkJCSBzaXplb2Yoc3RydWN0IHNuZF9jYXJkX2R0MDE5eCkpKSA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnJvciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKKwkJCQlzaXplb2Yoc3RydWN0IHNuZF9jYXJkX2R0MDE5eCksICZjYXJkKTsKKwlpZiAoZXJyb3IgPCAwKQorCQlyZXR1cm4gZXJyb3I7CiAJYWNhcmQgPSBjYXJkLT5wcml2YXRlX2RhdGE7CiAKIAlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsICZwY2FyZC0+Y2FyZC0+ZGV2KTsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9lczE2ODgvZXMxNjg4LmMgYi9zb3VuZC9pc2EvZXMxNjg4L2VzMTY4OC5jCmluZGV4IGI0NjM3NzEuLjQ0MmIwODEgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9lczE2ODgvZXMxNjg4LmMKKysrIGIvc291bmQvaXNhL2VzMTY4OC9lczE2ODguYwpAQCAtNDksNiArNDksNyBAQAogc3RhdGljIGNoYXIgKmlkW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfU1RSOwkvKiBJRCBmb3IgdGhpcyBjYXJkICovCiBzdGF0aWMgaW50IGVuYWJsZVtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0VOQUJMRTsJLyogRW5hYmxlIHRoaXMgY2FyZCAqLwogc3RhdGljIGxvbmcgcG9ydFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1BPUlQ7CS8qIDB4MjIwLDB4MjQwLDB4MjYwICovCitzdGF0aWMgbG9uZyBmbV9wb3J0W1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfUE9SVDsJLyogVXN1YWxseSAweDM4OCAqLwogc3RhdGljIGxvbmcgbXB1X3BvcnRbU05EUlZfQ0FSRFNdID0ge1swIC4uLiAoU05EUlZfQ0FSRFMgLSAxKV0gPSAtMX07CiBzdGF0aWMgaW50IGlycVtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0lSUTsJLyogNSw3LDksMTAgKi8KIHN0YXRpYyBpbnQgbXB1X2lycVtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0lSUTsJLyogNSw3LDksMTAgKi8KQEAgLTY1LDYgKzY2LDggQEAKIG1vZHVsZV9wYXJhbV9hcnJheShtcHVfcG9ydCwgbG9uZywgTlVMTCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKG1wdV9wb3J0LCAiTVBVLTQwMSBwb3J0ICMgZm9yICIgQ1JEX05BTUUgIiBkcml2ZXIuIik7CiBtb2R1bGVfcGFyYW1fYXJyYXkoaXJxLCBpbnQsIE5VTEwsIDA0NDQpOworbW9kdWxlX3BhcmFtX2FycmF5KGZtX3BvcnQsIGxvbmcsIE5VTEwsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhmbV9wb3J0LCAiRk0gcG9ydCAjIGZvciBFUzE2ODggZHJpdmVyLiIpOwogTU9EVUxFX1BBUk1fREVTQyhpcnEsICJJUlEgIyBmb3IgIiBDUkRfTkFNRSAiIGRyaXZlci4iKTsKIG1vZHVsZV9wYXJhbV9hcnJheShtcHVfaXJxLCBpbnQsIE5VTEwsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhtcHVfaXJxLCAiTVBVLTQwMSBJUlEgIyBmb3IgIiBDUkRfTkFNRSAiIGRyaXZlci4iKTsKQEAgLTEyMiw5ICsxMjUsOSBAQAogCXN0cnVjdCBzbmRfcGNtICpwY207CiAJaW50IGVycm9yOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtuXSwgaWRbbl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoIWNhcmQpCi0JCXJldHVybiAtRUlOVkFMOworCWVycm9yID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W25dLCBpZFtuXSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyb3IgPCAwKQorCQlyZXR1cm4gZXJyb3I7CiAKIAllcnJvciA9IHNuZF9lczE2ODhfbGVnYWN5X2NyZWF0ZShjYXJkLCBkZXYsIG4sICZjaGlwKTsKIAlpZiAoZXJyb3IgPCAwKQpAQCAtMTQzLDEzICsxNDYsMTkgQEAKIAlzcHJpbnRmKGNhcmQtPmxvbmduYW1lLCAiJXMgYXQgMHglbHgsIGlycSAlaSwgZG1hICVpIiwgcGNtLT5uYW1lLAogCQljaGlwLT5wb3J0LCBjaGlwLT5pcnEsIGNoaXAtPmRtYTgpOwogCi0JaWYgKHNuZF9vcGwzX2NyZWF0ZShjYXJkLCBjaGlwLT5wb3J0LCBjaGlwLT5wb3J0ICsgMiwKLQkJCU9QTDNfSFdfT1BMMywgMCwgJm9wbDMpIDwgMCkKLQkJZGV2X3dhcm4oZGV2LCAib3BsMyBub3QgZGV0ZWN0ZWQgYXQgMHglbHhcbiIsIGNoaXAtPnBvcnQpOwotCWVsc2UgewotCQllcnJvciA9CXNuZF9vcGwzX2h3ZGVwX25ldyhvcGwzLCAwLCAxLCBOVUxMKTsKLQkJaWYgKGVycm9yIDwgMCkKLQkJCWdvdG8gb3V0OworCWlmIChmbV9wb3J0W25dID09IFNORFJWX0FVVE9fUE9SVCkKKwkJZm1fcG9ydFtuXSA9IHBvcnRbbl07CS8qIHNoYXJlIHRoZSBzYW1lIHBvcnQgKi8KKworCWlmIChmbV9wb3J0W25dID4gMCkgeworCQlpZiAoc25kX29wbDNfY3JlYXRlKGNhcmQsIGZtX3BvcnRbbl0sIGZtX3BvcnRbbl0gKyAyLAorCQkJCU9QTDNfSFdfT1BMMywgMCwgJm9wbDMpIDwgMCkKKwkJCWRldl93YXJuKGRldiwKKwkJCQkgIm9wbDMgbm90IGRldGVjdGVkIGF0IDB4JWx4XG4iLCBmbV9wb3J0W25dKTsKKwkJZWxzZSB7CisJCQllcnJvciA9CXNuZF9vcGwzX2h3ZGVwX25ldyhvcGwzLCAwLCAxLCBOVUxMKTsKKwkJCWlmIChlcnJvciA8IDApCisJCQkJZ290byBvdXQ7CisJCX0KIAl9CiAKIAlpZiAobXB1X2lycVtuXSA+PSAwICYmIG1wdV9pcnFbbl0gIT0gU05EUlZfQVVUT19JUlEgJiYKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9lczE2ODgvZXMxNjg4X2xpYi5jIGIvc291bmQvaXNhL2VzMTY4OC9lczE2ODhfbGliLmMKaW5kZXggNGZiYjUwOC4uNGM2ZTE0ZiAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2VzMTY4OC9lczE2ODhfbGliLmMKKysrIGIvc291bmQvaXNhL2VzMTY4OC9lczE2ODhfbGliLmMKQEAgLTQ1LDcgKzQ1LDcgQEAKIAkJCXJldHVybiAxOwogCQl9CiAjaWZkZWYgQ09ORklHX1NORF9ERUJVRwotCXByaW50aygic25kX2VzMTY4OF9kc3BfY29tbWFuZDogdGltZW91dCAoMHgleClcbiIsIHZhbCk7CisJcHJpbnRrKEtFUk5fREVCVUcgInNuZF9lczE2ODhfZHNwX2NvbW1hbmQ6IHRpbWVvdXQgKDB4JXgpXG4iLCB2YWwpOwogI2VuZGlmCiAJcmV0dXJuIDA7CiB9CkBAIC0xNjcsMTMgKzE2NywxNiBAQAogCWh3ID0gRVMxNjg4X0hXX0FVVE87CiAJc3dpdGNoIChjaGlwLT52ZXJzaW9uICYgMHhmZmYwKSB7CiAJY2FzZSAweDQ4ODA6Ci0JCXNuZF9wcmludGsoIlsweCVseF0gRVNTOiBBdWRpb0RyaXZlIEVTNDg4IGRldGVjdGVkLCBidXQgZHJpdmVyIGlzIGluIGFub3RoZXIgcGxhY2VcbiIsIGNoaXAtPnBvcnQpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJbMHglbHhdIEVTUzogQXVkaW9Ecml2ZSBFUzQ4OCBkZXRlY3RlZCwgIgorCQkJICAgImJ1dCBkcml2ZXIgaXMgaW4gYW5vdGhlciBwbGFjZVxuIiwgY2hpcC0+cG9ydCk7CiAJCXJldHVybiAtRU5PREVWOwogCWNhc2UgMHg2ODgwOgogCQlodyA9IChjaGlwLT52ZXJzaW9uICYgMHgwZikgPj0gOCA/IEVTMTY4OF9IV18xNjg4IDogRVMxNjg4X0hXXzY4ODsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJc25kX3ByaW50aygiWzB4JWx4XSBFU1M6IHVua25vd24gQXVkaW9Ecml2ZSBjaGlwIHdpdGggdmVyc2lvbiAweCV4IChKYXp6MTYgc291bmRjYXJkPylcbiIsIGNoaXAtPnBvcnQsIGNoaXAtPnZlcnNpb24pOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJbMHglbHhdIEVTUzogdW5rbm93biBBdWRpb0RyaXZlIGNoaXAgIgorCQkJICAgIndpdGggdmVyc2lvbiAweCV4IChKYXp6MTYgc291bmRjYXJkPylcbiIsCisJCQkgICBjaGlwLT5wb3J0LCBjaGlwLT52ZXJzaW9uKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCkBAIC0yMjMsNyArMjI2LDcgQEAKIAkJfQogCX0KICNpZiAwCi0Jc25kX3ByaW50aygibXB1IGNmZyA9IDB4JXhcbiIsIGNmZyk7CisJc25kX3ByaW50ayhLRVJOX0RFQlVHICJtcHUgY2ZnID0gMHgleFxuIiwgY2ZnKTsKICNlbmRpZgogCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwogCXNuZF9lczE2ODhfbWl4ZXJfd3JpdGUoY2hpcCwgMHg0MCwgY2ZnKTsKQEAgLTIzNyw3ICsyNDAsOSBAQAogCQljZmcgPSAweGYwOwkvKiBlbmFibGUgb25seSBETUEgY291bnRlciBpbnRlcnJ1cHQgKi8KIAkJaXJxX2JpdHMgPSBpcnFzW2NoaXAtPmlycSAmIDB4MGZdOwogCQlpZiAoaXJxX2JpdHMgPCAwKSB7Ci0JCQlzbmRfcHJpbnRrKCJbMHglbHhdIEVTUzogYmFkIElSUSAlZCBmb3IgRVMxNjg4IGNoaXAhIVxuIiwgY2hpcC0+cG9ydCwgY2hpcC0+aXJxKTsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgIlsweCVseF0gRVNTOiBiYWQgSVJRICVkICIKKwkJCQkgICAiZm9yIEVTMTY4OCBjaGlwISFcbiIsCisJCQkJICAgY2hpcC0+cG9ydCwgY2hpcC0+aXJxKTsKICNpZiAwCiAJCQlpcnFfYml0cyA9IDA7CiAJCQljZmcgPSAweDEwOwpAQCAtMjUwLDcgKzI1NSw4IEBACiAJCWNmZyA9IDB4ZjA7CS8qIGV4dGVuZGVkIG1vZGUgRE1BIGVuYWJsZSAqLwogCQlkbWEgPSBjaGlwLT5kbWE4OwogCQlpZiAoZG1hID4gMyB8fCBkbWEgPT0gMikgewotCQkJc25kX3ByaW50aygiWzB4JWx4XSBFU1M6IGJhZCBETUEgY2hhbm5lbCAlZCBmb3IgRVMxNjg4IGNoaXAhIVxuIiwgY2hpcC0+cG9ydCwgZG1hKTsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgIlsweCVseF0gRVNTOiBiYWQgRE1BIGNoYW5uZWwgJWQgIgorCQkJCSAgICJmb3IgRVMxNjg4IGNoaXAhIVxuIiwgY2hpcC0+cG9ydCwgZG1hKTsKICNpZiAwCiAJCQlkbWFfYml0cyA9IDA7CiAJCQljZmcgPSAweDAwOwkvKiBkaXNhYmxlIGFsbCBETUEgKi8KQEAgLTM0MSw4ICszNDcsOSBAQAogCQlyZXR1cm4gLUVJTlZBTDsJLyogc29tZXRoaW5nIGlzIHdyb25nICovCiAJfQogI2lmIDAKLQlwcmludGsoInRyaWdnZXI6IHZhbCA9IDB4JXgsIHZhbHVlID0gMHgleFxuIiwgdmFsLCB2YWx1ZSk7Ci0JcHJpbnRrKCJ0cmlnZ2VyOiBwb2ludGVyID0gMHgleFxuIiwgc25kX2RtYV9wb2ludGVyKGNoaXAtPmRtYTgsIGNoaXAtPmRtYV9zaXplKSk7CisJcHJpbnRrKEtFUk5fREVCVUcgInRyaWdnZXI6IHZhbCA9IDB4JXgsIHZhbHVlID0gMHgleFxuIiwgdmFsLCB2YWx1ZSk7CisJcHJpbnRrKEtFUk5fREVCVUcgInRyaWdnZXI6IHBvaW50ZXIgPSAweCV4XG4iLAorCSAgICAgICBzbmRfZG1hX3BvaW50ZXIoY2hpcC0+ZG1hOCwgY2hpcC0+ZG1hX3NpemUpKTsKICNlbmRpZgogCXNuZF9lczE2ODhfd3JpdGUoY2hpcCwgMHhiOCwgKHZhbCAmIDB4ZjApIHwgdmFsdWUpOwogCXNwaW5fdW5sb2NrKCZjaGlwLT5yZWdfbG9jayk7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvZXMxOHh4LmMgYi9zb3VuZC9pc2EvZXMxOHh4LmMKaW5kZXggOTA0OThlNC4uOGNmYmZmNyAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2VzMTh4eC5jCisrKyBiL3NvdW5kL2lzYS9lczE4eHguYwpAQCAtMjEyNSwxMCArMjEyNSwxMCBAQAogI2RlZmluZSBpc19pc2FwbnBfc2VsZWN0ZWQoZGV2KQkJMAogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2NhcmQgKnNuZF9lczE4eHhfY2FyZF9uZXcoaW50IGRldikKK3N0YXRpYyBpbnQgc25kX2VzMTh4eF9jYXJkX25ldyhpbnQgZGV2LCBzdHJ1Y3Qgc25kX2NhcmQgKipjYXJkcCkKIHsKLQlyZXR1cm4gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAotCQkJICAgIHNpemVvZihzdHJ1Y3Qgc25kX2F1ZGlvZHJpdmUpKTsKKwlyZXR1cm4gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAorCQkJICAgICAgIHNpemVvZihzdHJ1Y3Qgc25kX2F1ZGlvZHJpdmUpLCBjYXJkcCk7CiB9CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9hdWRpb2RyaXZlX3Byb2JlKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgaW50IGRldikKQEAgLTIxOTcsOSArMjE5Nyw5IEBACiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCWludCBlcnI7CiAKLQljYXJkID0gc25kX2VzMTh4eF9jYXJkX25ldyhkZXYpOwotCWlmICghIGNhcmQpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9lczE4eHhfY2FyZF9uZXcoZGV2LCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAJc25kX2NhcmRfc2V0X2RldihjYXJkLCBkZXZwdHIpOwogCWlmICgoZXJyID0gc25kX2F1ZGlvZHJpdmVfcHJvYmUoY2FyZCwgZGV2KSkgPCAwKSB7CiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CkBAIC0yMzAzLDkgKzIzMDMsOSBAQAogCWlmIChkZXYgPj0gU05EUlZfQ0FSRFMpCiAJCXJldHVybiAtRU5PREVWOwogCi0JY2FyZCA9IHNuZF9lczE4eHhfY2FyZF9uZXcoZGV2KTsKLQlpZiAoISBjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfZXMxOHh4X2NhcmRfbmV3KGRldiwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCWlmICgoZXJyID0gc25kX2F1ZGlvZHJpdmVfcG5wKGRldiwgY2FyZC0+cHJpdmF0ZV9kYXRhLCBwZGV2KSkgPCAwKSB7CiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CiAJCXJldHVybiBlcnI7CkBAIC0yMzYyLDkgKzIzNjIsOSBAQAogCWlmIChkZXYgPj0gU05EUlZfQ0FSRFMpCiAJCXJldHVybiAtRU5PREVWOwogCi0JY2FyZCA9IHNuZF9lczE4eHhfY2FyZF9uZXcoZGV2KTsKLQlpZiAoISBjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwlyZXMgPSBzbmRfZXMxOHh4X2NhcmRfbmV3KGRldiwgJmNhcmQpOworCWlmIChyZXMgPCAwKQorCQlyZXR1cm4gcmVzOwogCiAJaWYgKChyZXMgPSBzbmRfYXVkaW9kcml2ZV9wbnBjKGRldiwgY2FyZC0+cHJpdmF0ZV9kYXRhLCBwY2FyZCwgcGlkKSkgPCAwKSB7CiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvZ3VzL2d1c19kbWEuYyBiL3NvdW5kL2lzYS9ndXMvZ3VzX2RtYS5jCmluZGV4IGY0NWY2MTEuLjM2YzI3YzggMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9ndXMvZ3VzX2RtYS5jCisrKyBiL3NvdW5kL2lzYS9ndXMvZ3VzX2RtYS5jCkBAIC00NSw3ICs0NSw4IEBACiAJdW5zaWduZWQgY2hhciBkbWFfY21kOwogCXVuc2lnbmVkIGludCBhZGRyZXNzX2hpZ2g7CiAKLQkvLyBzbmRfcHJpbnRrKCJkbWFfdHJhbnNmZXI6IGFkZHI9MHgleCwgYnVmPTB4JWx4LCBjb3VudD0weCV4XG4iLCBhZGRyLCAobG9uZykgYnVmLCBjb3VudCk7CisJc25kX3ByaW50ZGQoImRtYV90cmFuc2ZlcjogYWRkcj0weCV4LCBidWY9MHglbHgsIGNvdW50PTB4JXhcbiIsCisJCSAgICBhZGRyLCBidWZfYWRkciwgY291bnQpOwogCiAJaWYgKGd1cy0+Z2YxLmRtYTEgPiAzKSB7CiAJCWlmIChndXMtPmdmMS5lbmhfbW9kZSkgewpAQCAtNzcsNyArNzgsOCBAQAogCXNuZF9nZjFfZG1hX2FjayhndXMpOwogCXNuZF9kbWFfcHJvZ3JhbShndXMtPmdmMS5kbWExLCBidWZfYWRkciwgY291bnQsIGRtYV9jbWQgJiBTTkRSVl9HRjFfRE1BX1JFQUQgPyBETUFfTU9ERV9SRUFEIDogRE1BX01PREVfV1JJVEUpOwogI2lmIDAKLQlzbmRfcHJpbnRrKCJhZGRyZXNzID0gMHgleCwgY291bnQgPSAweCV4LCBkbWFfY21kID0gMHgleFxuIiwgYWRkcmVzcyA8PCAxLCBjb3VudCwgZG1hX2NtZCk7CisJc25kX3ByaW50ayhLRVJOX0RFQlVHICJhZGRyZXNzID0gMHgleCwgY291bnQgPSAweCV4LCBkbWFfY21kID0gMHgleFxuIiwKKwkJICAgYWRkcmVzcyA8PCAxLCBjb3VudCwgZG1hX2NtZCk7CiAjZW5kaWYKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZ3VzLT5yZWdfbG9jaywgZmxhZ3MpOwogCWlmIChndXMtPmdmMS5lbmhfbW9kZSkgewpAQCAtMTQyLDcgKzE0NCw5IEBACiAJc25kX2dmMV9kbWFfcHJvZ3JhbShndXMsIGJsb2NrLT5hZGRyLCBibG9jay0+YnVmX2FkZHIsIGJsb2NrLT5jb3VudCwgKHVuc2lnbmVkIHNob3J0KSBibG9jay0+Y21kKTsKIAlrZnJlZShibG9jayk7CiAjaWYgMAotCXByaW50aygicHJvZ3JhbSBkbWEgKElSUSkgLSBhZGRyID0gMHgleCwgYnVmZmVyID0gMHglbHgsIGNvdW50ID0gMHgleCwgY21kID0gMHgleFxuIiwgYWRkciwgKGxvbmcpIGJ1ZmZlciwgY291bnQsIGNtZCk7CisJc25kX3ByaW50ZChLRVJOX0RFQlVHICJwcm9ncmFtIGRtYSAoSVJRKSAtICIKKwkJICAgImFkZHIgPSAweCV4LCBidWZmZXIgPSAweCVseCwgY291bnQgPSAweCV4LCBjbWQgPSAweCV4XG4iLAorCQkgICBibG9jay0+YWRkciwgYmxvY2stPmJ1Zl9hZGRyLCBibG9jay0+Y291bnQsIGJsb2NrLT5jbWQpOwogI2VuZGlmCiB9CiAKQEAgLTIwMywxMyArMjA3LDE2IEBACiAJfQogCSpibG9jayA9ICpfX2Jsb2NrOwogCWJsb2NrLT5uZXh0ID0gTlVMTDsKLSNpZiAwCi0JcHJpbnRrKCJhZGRyID0gMHgleCwgYnVmZmVyID0gMHglbHgsIGNvdW50ID0gMHgleCwgY21kID0gMHgleFxuIiwgYmxvY2stPmFkZHIsIChsb25nKSBibG9jay0+YnVmZmVyLCBibG9jay0+Y291bnQsIGJsb2NrLT5jbWQpOwotI2VuZGlmCi0jaWYgMAotCXByaW50aygiZ3VzLT5nZjEuZG1hX2RhdGFfcGNtX2xhc3QgPSAweCVseFxuIiwgKGxvbmcpZ3VzLT5nZjEuZG1hX2RhdGFfcGNtX2xhc3QpOwotCXByaW50aygiZ3VzLT5nZjEuZG1hX2RhdGFfcGNtID0gMHglbHhcbiIsIChsb25nKWd1cy0+Z2YxLmRtYV9kYXRhX3BjbSk7Ci0jZW5kaWYKKworCXNuZF9wcmludGRkKCJhZGRyID0gMHgleCwgYnVmZmVyID0gMHglbHgsIGNvdW50ID0gMHgleCwgY21kID0gMHgleFxuIiwKKwkJICAgIGJsb2NrLT5hZGRyLCAobG9uZykgYmxvY2stPmJ1ZmZlciwgYmxvY2stPmNvdW50LAorCQkgICAgYmxvY2stPmNtZCk7CisKKwlzbmRfcHJpbnRkZCgiZ3VzLT5nZjEuZG1hX2RhdGFfcGNtX2xhc3QgPSAweCVseFxuIiwKKwkJICAgIChsb25nKWd1cy0+Z2YxLmRtYV9kYXRhX3BjbV9sYXN0KTsKKwlzbmRfcHJpbnRkZCgiZ3VzLT5nZjEuZG1hX2RhdGFfcGNtID0gMHglbHhcbiIsCisJCSAgICAobG9uZylndXMtPmdmMS5kbWFfZGF0YV9wY20pOworCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmd1cy0+ZG1hX2xvY2ssIGZsYWdzKTsKIAlpZiAoc3ludGgpIHsKIAkJaWYgKGd1cy0+Z2YxLmRtYV9kYXRhX3N5bnRoX2xhc3QpIHsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9ndXMvZ3VzX2lycS5jIGIvc291bmQvaXNhL2d1cy9ndXNfaXJxLmMKaW5kZXggMDQxODk0ZC4uMjA1NWFmZiAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2d1cy9ndXNfaXJxLmMKKysrIGIvc291bmQvaXNhL2d1cy9ndXNfaXJxLmMKQEAgLTQxLDcgKzQxLDcgQEAKIAlpZiAoc3RhdHVzID09IDApCiAJCXJldHVybiBJUlFfUkVUVkFMKGhhbmRsZWQpOwogCWhhbmRsZWQgPSAxOwotCS8vIHNuZF9wcmludGsoIklSUTogc3RhdHVzID0gMHgleFxuIiwgc3RhdHVzKTsKKwkvKiBzbmRfcHJpbnRrKEtFUk5fREVCVUcgIklSUTogc3RhdHVzID0gMHgleFxuIiwgc3RhdHVzKTsgKi8KIAlpZiAoc3RhdHVzICYgMHgwMikgewogCQlTVEFUX0FERChndXMtPmdmMS5pbnRlcnJ1cHRfc3RhdF9taWRpX2luKTsKIAkJaWYgKGd1cy0+Z2YxLmludGVycnVwdF9oYW5kbGVyX21pZGlfaW4pCkBAIC02NSw3ICs2NSw5IEBACiAJCQkJY29udGludWU7CS8qIG11bHRpIHJlcXVlc3QgKi8KIAkJCWFscmVhZHkgfD0gX2N1cnJlbnRfOwkvKiBtYXJrIHJlcXVlc3QgKi8KICNpZiAwCi0JCQlwcmludGsoInZvaWNlID0gJWksIHZvaWNlX3N0YXR1cyA9IDB4JXgsIHZvaWNlX3ZlcmlmeSA9ICVpXG4iLCB2b2ljZSwgdm9pY2Vfc3RhdHVzLCBpbmIoR1VTUChndXMsIEdGMVBBR0UpKSk7CisJCQlwcmludGsoS0VSTl9ERUJVRyAidm9pY2UgPSAlaSwgdm9pY2Vfc3RhdHVzID0gMHgleCwgIgorCQkJICAgICAgICJ2b2ljZV92ZXJpZnkgPSAlaVxuIiwKKwkJCSAgICAgICB2b2ljZSwgdm9pY2Vfc3RhdHVzLCBpbmIoR1VTUChndXMsIEdGMVBBR0UpKSk7CiAjZW5kaWYKIAkJCXB2b2ljZSA9ICZndXMtPmdmMS52b2ljZXNbdm9pY2VdOyAKIAkJCWlmIChwdm9pY2UtPnVzZSkgewpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2d1cy9ndXNfcGNtLmMgYi9zb3VuZC9pc2EvZ3VzL2d1c19wY20uYwppbmRleCAzODUxMGFlLi5lZGIxMWVlIDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvZ3VzL2d1c19wY20uYworKysgYi9zb3VuZC9pc2EvZ3VzL2d1c19wY20uYwpAQCAtODIsNyArODIsMTAgQEAKIAogCWNvdW50ICs9IG9mZnNldCAmIDMxOwogCW9mZnNldCAmPSB+MzE7Ci0JLy8gc25kX3ByaW50aygiYmxvY2sgY2hhbmdlIC0gb2Zmc2V0ID0gMHgleCwgY291bnQgPSAweCV4XG4iLCBvZmZzZXQsIGNvdW50KTsKKwkvKgorCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiYmxvY2sgY2hhbmdlIC0gb2Zmc2V0ID0gMHgleCwgY291bnQgPSAweCV4XG4iLAorCQkgICBvZmZzZXQsIGNvdW50KTsKKwkqLwogCW1lbXNldCgmYmxvY2ssIDAsIHNpemVvZihibG9jaykpOwogCWJsb2NrLmNtZCA9IFNORFJWX0dGMV9ETUFfSVJROwogCWlmIChzbmRfcGNtX2Zvcm1hdF91bnNpZ25lZChydW50aW1lLT5mb3JtYXQpKQpAQCAtMTM1LDcgKzEzOCwxMSBAQAogCQljdXJyID0gYmVnaW4gKyAocGNtcC0+YnBvcyAqIHBjbXAtPmJsb2NrX3NpemUpIC8gcnVudGltZS0+Y2hhbm5lbHM7CiAJCWVuZCA9IGN1cnIgKyAocGNtcC0+YmxvY2tfc2l6ZSAvIHJ1bnRpbWUtPmNoYW5uZWxzKTsKIAkJZW5kIC09IHNuZF9wY21fZm9ybWF0X3dpZHRoKHJ1bnRpbWUtPmZvcm1hdCkgPT0gMTYgPyAyIDogMTsKLQkJLy8gc25kX3ByaW50aygiaW5pdDogY3Vycj0weCV4LCBiZWdpbj0weCV4LCBlbmQ9MHgleCwgY3RybD0weCV4LCByYW1wPTB4JXgsIHJhdGU9MHgleFxuIiwgY3VyciwgYmVnaW4sIGVuZCwgdm9pY2VfY3RybCwgcmFtcF9jdHJsLCByYXRlKTsKKwkJLyoKKwkJc25kX3ByaW50ayhLRVJOX0RFQlVHICJpbml0OiBjdXJyPTB4JXgsIGJlZ2luPTB4JXgsIGVuZD0weCV4LCAiCisJCQkgICAiY3RybD0weCV4LCByYW1wPTB4JXgsIHJhdGU9MHgleFxuIiwKKwkJCSAgIGN1cnIsIGJlZ2luLCBlbmQsIHZvaWNlX2N0cmwsIHJhbXBfY3RybCwgcmF0ZSk7CisJCSovCiAJCXBhbiA9IHJ1bnRpbWUtPmNoYW5uZWxzID09IDIgPyAoIXZvaWNlID8gMSA6IDE0KSA6IDg7CiAJCXZvbCA9ICF2b2ljZSA/IGd1cy0+Z2YxLnBjbV92b2x1bWVfbGV2ZWxfbGVmdCA6IGd1cy0+Z2YxLnBjbV92b2x1bWVfbGV2ZWxfcmlnaHQ7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZndXMtPnJlZ19sb2NrLCBmbGFncyk7CkBAIC0yMDUsOSArMjEyLDExIEBACiAJcmFtcF9jdHJsID0gKHNuZF9nZjFfcmVhZDgoZ3VzLCBTTkRSVl9HRjFfVkJfVk9MVU1FX0NPTlRST0wpICYgfjB4YTQpIHwgMHgwMzsKICNpZiAwCiAJc25kX2dmMV9zZWxlY3Rfdm9pY2UoZ3VzLCBwdm9pY2UtPm51bWJlcik7Ci0JcHJpbnRrKCJwb3NpdGlvbiA9IDB4JXhcbiIsIChzbmRfZ2YxX3JlYWRfYWRkcihndXMsIFNORFJWX0dGMV9WQV9DVVJSRU5ULCB2b2ljZV9jdHJsICYgNCkgPj4gNCkpOworCXByaW50ayhLRVJOX0RFQlVHICJwb3NpdGlvbiA9IDB4JXhcbiIsCisJICAgICAgIChzbmRfZ2YxX3JlYWRfYWRkcihndXMsIFNORFJWX0dGMV9WQV9DVVJSRU5ULCB2b2ljZV9jdHJsICYgNCkgPj4gNCkpOwogCXNuZF9nZjFfc2VsZWN0X3ZvaWNlKGd1cywgcGNtcC0+cHZvaWNlc1sxXS0+bnVtYmVyKTsKLQlwcmludGsoInBvc2l0aW9uID0gMHgleFxuIiwgKHNuZF9nZjFfcmVhZF9hZGRyKGd1cywgU05EUlZfR0YxX1ZBX0NVUlJFTlQsIHZvaWNlX2N0cmwgJiA0KSA+PiA0KSk7CisJcHJpbnRrKEtFUk5fREVCVUcgInBvc2l0aW9uID0gMHgleFxuIiwKKwkgICAgICAgKHNuZF9nZjFfcmVhZF9hZGRyKGd1cywgU05EUlZfR0YxX1ZBX0NVUlJFTlQsIHZvaWNlX2N0cmwgJiA0KSA+PiA0KSk7CiAJc25kX2dmMV9zZWxlY3Rfdm9pY2UoZ3VzLCBwdm9pY2UtPm51bWJlcik7CiAjZW5kaWYKIAlwY21wLT5icG9zKys7CkBAIC0yOTksNyArMzA4LDExIEBACiAJdW5zaWduZWQgaW50IGxlbjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JLy8gcHJpbnRrKCJwb2tlIGJsb2NrOyBidWYgPSAweCV4LCBwb3MgPSAlaSwgY291bnQgPSAlaSwgcG9ydCA9IDB4JXhcbiIsIChpbnQpYnVmLCBwb3MsIGNvdW50LCBndXMtPmdmMS5wb3J0KTsKKwkvKgorCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICJwb2tlIGJsb2NrOyBidWYgPSAweCV4LCBwb3MgPSAlaSwgY291bnQgPSAlaSwgcG9ydCA9IDB4JXhcbiIsCisJICAgICAgIChpbnQpYnVmLCBwb3MsIGNvdW50LCBndXMtPmdmMS5wb3J0KTsKKwkqLwogCXdoaWxlIChjb3VudCA+IDApIHsKIAkJbGVuID0gY291bnQ7CiAJCWlmIChsZW4gPiA1MTIpCQkvKiBsaW1pdCwgdG8gYWxsb3cgSVJRICovCkBAIC02ODAsNyArNjkzLDggQEAKIAlydW50aW1lLT5wcml2YXRlX2ZyZWUgPSBzbmRfZ2YxX3BjbV9wbGF5YmFja19mcmVlOwogCiAjaWYgMAotCXByaW50aygicGxheWJhY2suYnVmZmVyID0gMHglbHgsIGdmMS5wY21fYnVmZmVyID0gMHglbHhcbiIsIChsb25nKSBwY20tPnBsYXliYWNrLmJ1ZmZlciwgKGxvbmcpIGd1cy0+Z2YxLnBjbV9idWZmZXIpOworCXByaW50ayhLRVJOX0RFQlVHICJwbGF5YmFjay5idWZmZXIgPSAweCVseCwgZ2YxLnBjbV9idWZmZXIgPSAweCVseFxuIiwKKwkgICAgICAgKGxvbmcpIHBjbS0+cGxheWJhY2suYnVmZmVyLCAobG9uZykgZ3VzLT5nZjEucGNtX2J1ZmZlcik7CiAjZW5kaWYKIAlpZiAoKGVyciA9IHNuZF9nZjFfZG1hX2luaXQoZ3VzKSkgPCAwKQogCQlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2d1cy9ndXNfdWFydC5jIGIvc291bmQvaXNhL2d1cy9ndXNfdWFydC5jCmluZGV4IGYwYWYzZjcuLjIxY2M0MmUgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9ndXMvZ3VzX3VhcnQuYworKysgYi9zb3VuZC9pc2EvZ3VzL2d1c191YXJ0LmMKQEAgLTEyOSw4ICsxMjksMTQgQEAKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3VzLT51YXJ0X2NtZF9sb2NrLCBmbGFncyk7CiAjaWYgMAotCXNuZF9wcmludGsoInJlYWQgaW5pdCAtIGVuYWJsZSA9ICVpLCBjbWQgPSAweCV4LCBzdGF0ID0gMHgleFxuIiwgZ3VzLT51YXJ0X2VuYWJsZSwgZ3VzLT5nZjEudWFydF9jbWQsIHNuZF9nZjFfdWFydF9zdGF0KGd1cykpOwotCXNuZF9wcmludGsoIlsweCV4XSByZWcgKGN0cmwvc3RhdHVzKSA9IDB4JXgsIHJlZyAoZGF0YSkgPSAweCV4IChwYWdlID0gMHgleClcbiIsIGd1cy0+Z2YxLnBvcnQgKyAweDEwMCwgaW5iKGd1cy0+Z2YxLnBvcnQgKyAweDEwMCksIGluYihndXMtPmdmMS5wb3J0ICsgMHgxMDEpLCBpbmIoZ3VzLT5nZjEucG9ydCArIDB4MTAyKSk7CisJc25kX3ByaW50ayhLRVJOX0RFQlVHCisJCSAgICJyZWFkIGluaXQgLSBlbmFibGUgPSAlaSwgY21kID0gMHgleCwgc3RhdCA9IDB4JXhcbiIsCisJCSAgIGd1cy0+dWFydF9lbmFibGUsIGd1cy0+Z2YxLnVhcnRfY21kLCBzbmRfZ2YxX3VhcnRfc3RhdChndXMpKTsKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcKKwkJICAgIlsweCV4XSByZWcgKGN0cmwvc3RhdHVzKSA9IDB4JXgsIHJlZyAoZGF0YSkgPSAweCV4ICIKKwkJICAgIihwYWdlID0gMHgleClcbiIsCisJCSAgIGd1cy0+Z2YxLnBvcnQgKyAweDEwMCwgaW5iKGd1cy0+Z2YxLnBvcnQgKyAweDEwMCksCisJCSAgIGluYihndXMtPmdmMS5wb3J0ICsgMHgxMDEpLCBpbmIoZ3VzLT5nZjEucG9ydCArIDB4MTAyKSk7CiAjZW5kaWYKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9ndXMvZ3VzY2xhc3NpYy5jIGIvc291bmQvaXNhL2d1cy9ndXNjbGFzc2ljLmMKaW5kZXggNDI2NTMyYS4uMDg2YjhmMCAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2d1cy9ndXNjbGFzc2ljLmMKKysrIGIvc291bmQvaXNhL2d1cy9ndXNjbGFzc2ljLmMKQEAgLTE0OCw5ICsxNDgsOSBAQAogCXN0cnVjdCBzbmRfZ3VzX2NhcmQgKmd1czsKIAlpbnQgZXJyb3I7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W25dLCBpZFtuXSwgVEhJU19NT0RVTEUsIDApOwotCWlmICghY2FyZCkKLQkJcmV0dXJuIC1FSU5WQUw7CisJZXJyb3IgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbbl0sIGlkW25dLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnJvciA8IDApCisJCXJldHVybiBlcnJvcjsKIAogCWlmIChwY21fY2hhbm5lbHNbbl0gPCAyKQogCQlwY21fY2hhbm5lbHNbbl0gPSAyOwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2d1cy9ndXNleHRyZW1lLmMgYi9zb3VuZC9pc2EvZ3VzL2d1c2V4dHJlbWUuYwppbmRleCA3YWQ0YzNiLi4xODBhOGRlIDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvZ3VzL2d1c2V4dHJlbWUuYworKysgYi9zb3VuZC9pc2EvZ3VzL2d1c2V4dHJlbWUuYwpAQCAtMjQxLDkgKzI0MSw5IEBACiAJc3RydWN0IHNuZF9vcGwzICpvcGwzOwogCWludCBlcnJvcjsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbbl0sIGlkW25dLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKCFjYXJkKQotCQlyZXR1cm4gLUVJTlZBTDsKKwllcnJvciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtuXSwgaWRbbl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVycm9yIDwgMCkKKwkJcmV0dXJuIGVycm9yOwogCiAJaWYgKG1wdV9wb3J0W25dID09IFNORFJWX0FVVE9fUE9SVCkKIAkJbXB1X3BvcnRbbl0gPSAwOwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2d1cy9ndXNtYXguYyBiL3NvdW5kL2lzYS9ndXMvZ3VzbWF4LmMKaW5kZXggZjk0YzE5Ny4uZjI2ZWFjOCAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2d1cy9ndXNtYXguYworKysgYi9zb3VuZC9pc2EvZ3VzL2d1c21heC5jCkBAIC0yMTQsMTAgKzIxNCwxMCBAQAogCXN0cnVjdCBzbmRfd3NzICp3c3M7CiAJc3RydWN0IHNuZF9ndXNtYXggKm1heGNhcmQ7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAotCQkJICAgIHNpemVvZihzdHJ1Y3Qgc25kX2d1c21heCkpOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKKwkJCSAgICAgIHNpemVvZihzdHJ1Y3Qgc25kX2d1c21heCksICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAljYXJkLT5wcml2YXRlX2ZyZWUgPSBzbmRfZ3VzbWF4X2ZyZWU7CiAJbWF4Y2FyZCA9IChzdHJ1Y3Qgc25kX2d1c21heCAqKWNhcmQtPnByaXZhdGVfZGF0YTsKIAltYXhjYXJkLT5jYXJkID0gY2FyZDsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9ndXMvaW50ZXJ3YXZlLmMgYi9zb3VuZC9pc2EvZ3VzL2ludGVyd2F2ZS5jCmluZGV4IDVmYWVjZmIuLjUzNGE2ZWMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9ndXMvaW50ZXJ3YXZlLmMKKysrIGIvc291bmQvaXNhL2d1cy9pbnRlcndhdmUuYwpAQCAtMTcwLDcgKzE3MCw3IEBACiAJdW5zaWduZWQgbG9uZyBwb3J0ID0gYnVzLT5wcml2YXRlX3ZhbHVlOwogCiAjaWYgMAotCXByaW50aygiaTJjX3NldGxpbmVzIC0gMHglbHggPC0gJWksJWlcbiIsIHBvcnQsIGN0cmwsIGRhdGEpOworCXByaW50ayhLRVJOX0RFQlVHICJpMmNfc2V0bGluZXMgLSAweCVseCA8LSAlaSwlaVxuIiwgcG9ydCwgY3RybCwgZGF0YSk7CiAjZW5kaWYKIAlvdXRiKChkYXRhIDw8IDEpIHwgY3RybCwgcG9ydCk7CiAJdWRlbGF5KDEwKTsKQEAgLTE4Myw3ICsxODMsNyBAQAogCiAJcmVzID0gaW5iKHBvcnQpICYgMTsKICNpZiAwCi0JcHJpbnRrKCJpMmNfZ2V0Y2xvY2tsaW5lIC0gMHglbHggLT4gJWlcbiIsIHBvcnQsIHJlcyk7CisJcHJpbnRrKEtFUk5fREVCVUcgImkyY19nZXRjbG9ja2xpbmUgLSAweCVseCAtPiAlaVxuIiwgcG9ydCwgcmVzKTsKICNlbmRpZgogCXJldHVybiByZXM7CiB9CkBAIC0xOTcsNyArMTk3LDcgQEAKIAkJdWRlbGF5KDEwKTsKIAlyZXMgPSAoaW5iKHBvcnQpICYgMikgPj4gMTsKICNpZiAwCi0JcHJpbnRrKCJpMmNfZ2V0ZGF0YWxpbmUgLSAweCVseCAtPiAlaVxuIiwgcG9ydCwgcmVzKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiaTJjX2dldGRhdGFsaW5lIC0gMHglbHggLT4gJWlcbiIsIHBvcnQsIHJlcyk7CiAjZW5kaWYKIAlyZXR1cm4gcmVzOwogfQpAQCAtMzQyLDcgKzM0Miw4IEBACiAJCQlzbmRfZ2YxX3Bva2UoZ3VzLCBsb2NhbCwgZCk7CiAJCQlzbmRfZ2YxX3Bva2UoZ3VzLCBsb2NhbCArIDEsIGQgKyAxKTsKICNpZiAwCi0JCQlwcmludGsoImQgPSAweCV4LCBsb2NhbCA9IDB4JXgsIGxvY2FsICsgMSA9IDB4JXgsIGlkeCA8PCAyMiA9IDB4JXhcbiIsCisJCQlwcmludGsoS0VSTl9ERUJVRyAiZCA9IDB4JXgsIGxvY2FsID0gMHgleCwgIgorCQkJICAgICAgICJsb2NhbCArIDEgPSAweCV4LCBpZHggPDwgMjIgPSAweCV4XG4iLAogCQkJICAgICAgIGQsCiAJCQkgICAgICAgc25kX2dmMV9wZWVrKGd1cywgbG9jYWwpLAogCQkJICAgICAgIHNuZF9nZjFfcGVlayhndXMsIGxvY2FsICsgMSksCkBAIC0zNTYsNyArMzU3LDggQEAKIAkJfQogCX0KICNpZiAwCi0JcHJpbnRrKCJzaXplczogJWkgJWkgJWkgJWlcbiIsIHNpemVzWzBdLCBzaXplc1sxXSwgc2l6ZXNbMl0sIHNpemVzWzNdKTsKKwlwcmludGsoS0VSTl9ERUJVRyAic2l6ZXM6ICVpICVpICVpICVpXG4iLAorCSAgICAgICBzaXplc1swXSwgc2l6ZXNbMV0sIHNpemVzWzJdLCBzaXplc1szXSk7CiAjZW5kaWYKIH0KIApAQCAtNDEwLDEyICs0MTIsMTIgQEAKIAkJbG1jdCA9IChwc2l6ZXNbM10gPDwgMjQpIHwgKHBzaXplc1syXSA8PCAxNikgfAogCQkgICAgKHBzaXplc1sxXSA8PCA4KSB8IHBzaXplc1swXTsKICNpZiAwCi0JCXByaW50aygibG1jdCA9IDB4JTA4eFxuIiwgbG1jdCk7CisJCXByaW50ayhLRVJOX0RFQlVHICJsbWN0ID0gMHglMDh4XG4iLCBsbWN0KTsKICNlbmRpZgogCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShsbWMpOyBpKyspCiAJCQlpZiAobG1jdCA9PSBsbWNbaV0pIHsKICNpZiAwCi0JCQkJcHJpbnRrKCJmb3VuZCAhISEgJWlcbiIsIGkpOworCQkJCXByaW50ayhLRVJOX0RFQlVHICJmb3VuZCAhISEgJWlcbiIsIGkpOwogI2VuZGlmCiAJCQkJc25kX2dmMV93cml0ZTE2KGd1cywgU05EUlZfR0YxX0dXX01FTU9SWV9DT05GSUcsIChzbmRfZ2YxX2xvb2sxNihndXMsIFNORFJWX0dGMV9HV19NRU1PUllfQ09ORklHKSAmIDB4ZmZmMCkgfCBpKTsKIAkJCQlzbmRfaW50ZXJ3YXZlX2Jhbmtfc2l6ZXMoZ3VzLCBwc2l6ZXMpOwpAQCAtNjI2LDIwICs2MjgsMjIgQEAKIAkJZnJlZV9pcnEoaXdjYXJkLT5pcnEsICh2b2lkICopaXdjYXJkKTsKIH0KIAotc3RhdGljIHN0cnVjdCBzbmRfY2FyZCAqc25kX2ludGVyd2F2ZV9jYXJkX25ldyhpbnQgZGV2KQorc3RhdGljIGludCBzbmRfaW50ZXJ3YXZlX2NhcmRfbmV3KGludCBkZXYsIHN0cnVjdCBzbmRfY2FyZCAqKmNhcmRwKQogewogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKIAlzdHJ1Y3Qgc25kX2ludGVyd2F2ZSAqaXdjYXJkOworCWludCBlcnI7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAotCQkJICAgIHNpemVvZihzdHJ1Y3Qgc25kX2ludGVyd2F2ZSkpOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiBOVUxMOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKKwkJCSAgICAgIHNpemVvZihzdHJ1Y3Qgc25kX2ludGVyd2F2ZSksICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAlpd2NhcmQgPSBjYXJkLT5wcml2YXRlX2RhdGE7CiAJaXdjYXJkLT5jYXJkID0gY2FyZDsKIAlpd2NhcmQtPmlycSA9IC0xOwogCWNhcmQtPnByaXZhdGVfZnJlZSA9IHNuZF9pbnRlcndhdmVfZnJlZTsKLQlyZXR1cm4gY2FyZDsKKwkqY2FyZHAgPSBjYXJkOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfaW50ZXJ3YXZlX3Byb2JlKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgaW50IGRldikKQEAgLTc3OCw5ICs3ODIsOSBAQAogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKIAlpbnQgZXJyOwogCi0JY2FyZCA9IHNuZF9pbnRlcndhdmVfY2FyZF9uZXcoZGV2KTsKLQlpZiAoISBjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfaW50ZXJ3YXZlX2NhcmRfbmV3KGRldiwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJc25kX2NhcmRfc2V0X2RldihjYXJkLCBkZXZwdHIpOwogCWlmICgoZXJyID0gc25kX2ludGVyd2F2ZV9wcm9iZShjYXJkLCBkZXYpKSA8IDApIHsKQEAgLTg3Niw5ICs4ODAsOSBAQAogCWlmIChkZXYgPj0gU05EUlZfQ0FSRFMpCiAJCXJldHVybiAtRU5PREVWOwogCQkJCQotCWNhcmQgPSBzbmRfaW50ZXJ3YXZlX2NhcmRfbmV3KGRldik7Ci0JaWYgKCEgY2FyZCkKLQkJcmV0dXJuIC1FTk9NRU07CisJcmVzID0gc25kX2ludGVyd2F2ZV9jYXJkX25ldyhkZXYsICZjYXJkKTsKKwlpZiAocmVzIDwgMCkKKwkJcmV0dXJuIHJlczsKIAogCWlmICgocmVzID0gc25kX2ludGVyd2F2ZV9wbnAoZGV2LCBjYXJkLT5wcml2YXRlX2RhdGEsIHBjYXJkLCBwaWQpKSA8IDApIHsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9tc25kL01ha2VmaWxlIGIvc291bmQvaXNhL21zbmQvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE3MWMwYQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL2lzYS9tc25kL01ha2VmaWxlCkBAIC0wLDAgKzEsOSBAQAorCitzbmQtbXNuZC1saWItb2JqcyA6PSBtc25kLm8gbXNuZF9taWRpLm8gbXNuZF9waW5uYWNsZV9taXhlci5vCitzbmQtbXNuZC1waW5uYWNsZS1vYmpzIDo9IG1zbmRfcGlubmFjbGUubworc25kLW1zbmQtY2xhc3NpYy1vYmpzIDo9IG1zbmRfY2xhc3NpYy5vCisKKyMgVG9wbGV2ZWwgTW9kdWxlIERlcGVuZGVuY3kKK29iai0kKENPTkZJR19TTkRfTVNORF9QSU5OQUNMRSkgKz0gc25kLW1zbmQtcGlubmFjbGUubyBzbmQtbXNuZC1saWIubworb2JqLSQoQ09ORklHX1NORF9NU05EX0NMQVNTSUMpICs9IHNuZC1tc25kLWNsYXNzaWMubyBzbmQtbXNuZC1saWIubworCmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvbXNuZC9tc25kLmMgYi9zb3VuZC9pc2EvbXNuZC9tc25kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA2NDU0NAotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL2lzYS9tc25kL21zbmQuYwpAQCAtMCwwICsxLDcwNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIDIwMDIvMDYvMzAgS2Fyc3RlbiBXaWVzZToKKyAqCXJlbW92ZWQga2VybmVsLXZlcnNpb24gZGVwZW5kZW5jaWVzLgorICoJcmlwcGVkIGZyb20gbGludXgga2VybmVsIDIuNC4xOCAoT1NTIEltcGxlbWVudGF0aW9uKSBieSBtZS4KKyAqCUluIHRoZSBPU1MgVmVyc2lvbiwgdGhpcyBmaWxlIGlzIGNvbXBpbGVkIHRvIGEgc2VwYXJhdGUgTU9EVUxFLAorICoJdGhhdCBpcyB1c2VkIGJ5IHRoZSBwaW5uYWNsZSBhbmQgdGhlIGNsYXNzaWMgZHJpdmVyLgorICoJc2luY2UgdGhlcmUgaXMgbm8gY2xhc3NpYyBkcml2ZXIgZm9yIGFsc2EgeWV0IChpIGRvbnQgaGF2ZSBhIGNsYXNzaWMKKyAqCSYgd3JpdGluZyBvbmUgYmxpbmRmb2xkIGlzIGRpZmZpY3VsdCkgdGhpcyBmaWxlJ3Mgb2JqZWN0IGlzIHN0YXRpY2FsbHkKKyAqCWxpbmtlZCBpbnRvIHRoZSBwaW5uYWNsZS1kcml2ZXItbW9kdWxlIGZvciBub3cuCWxvb2sgZm9yIHRoZSBzdHJpbmcKKyAqCQkidW5jb21tZW50IHRoaXMgdG8gbWFrZSB0aGlzIGEgbW9kdWxlIGFnYWluIgorICoJdG8gZG8gZ3Vlc3Mgd2hhdC4KKyAqCisgKiB0aGUgZm9sbG93aW5nIGlzIGEgY29weSBvZiB0aGUgMi40LjE4IE9TUyBGUkVFIGZpbGUtaGVhZGluZyBjb21tZW50OgorICoKKyAqIG1zbmQuYyAtIERyaXZlciBCYXNlCisgKgorICogVHVydGxlIEJlYWNoIE11bHRpU291bmQgU291bmQgQ2FyZCBEcml2ZXIgZm9yIExpbnV4CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IEFuZHJldyBWZWxpYXRoCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorCisjaW5jbHVkZSAibXNuZC5oIgorCisjZGVmaW5lIExPR05BTUUJCQkibXNuZCIKKworCit2b2lkIHNuZF9tc25kX2luaXRfcXVldWUodm9pZCAqYmFzZSwgaW50IHN0YXJ0LCBpbnQgc2l6ZSkKK3sKKwl3cml0ZXcoUENUT0RTUF9CQVNFRChzdGFydCksIGJhc2UgKyBKUVNfd1N0YXJ0KTsKKwl3cml0ZXcoUENUT0RTUF9PRkZTRVQoc2l6ZSkgLSAxLCBiYXNlICsgSlFTX3dTaXplKTsKKwl3cml0ZXcoMCwgYmFzZSArIEpRU193SGVhZCk7CisJd3JpdGV3KDAsIGJhc2UgKyBKUVNfd1RhaWwpOworfQorRVhQT1JUX1NZTUJPTChzbmRfbXNuZF9pbml0X3F1ZXVlKTsKKworc3RhdGljIGludCBzbmRfbXNuZF93YWl0X1RYREUoc3RydWN0IHNuZF9tc25kICpkZXYpCit7CisJdW5zaWduZWQgaW50IGlvID0gZGV2LT5pbzsKKwlpbnQgdGltZW91dCA9IDEwMDA7CisKKwl3aGlsZSAodGltZW91dC0tID4gMCkKKwkJaWYgKGluYihpbyArIEhQX0lTUikgJiBIUElTUl9UWERFKQorCQkJcmV0dXJuIDA7CisKKwlyZXR1cm4gLUVJTzsKK30KKworc3RhdGljIGludCBzbmRfbXNuZF93YWl0X0hDMChzdHJ1Y3Qgc25kX21zbmQgKmRldikKK3sKKwl1bnNpZ25lZCBpbnQgaW8gPSBkZXYtPmlvOworCWludCB0aW1lb3V0ID0gMTAwMDsKKworCXdoaWxlICh0aW1lb3V0LS0gPiAwKQorCQlpZiAoIShpbmIoaW8gKyBIUF9DVlIpICYgSFBDVlJfSEMpKQorCQkJcmV0dXJuIDA7CisKKwlyZXR1cm4gLUVJTzsKK30KKworaW50IHNuZF9tc25kX3NlbmRfZHNwX2NtZChzdHJ1Y3Qgc25kX21zbmQgKmRldiwgdTggY21kKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5sb2NrLCBmbGFncyk7CisJaWYgKHNuZF9tc25kX3dhaXRfSEMwKGRldikgPT0gMCkgeworCQlvdXRiKGNtZCwgZGV2LT5pbyArIEhQX0NWUik7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gMDsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5sb2NrLCBmbGFncyk7CisKKwlzbmRfcHJpbnRkKEtFUk5fRVJSIExPR05BTUUgIjogU2VuZCBEU1AgY29tbWFuZCB0aW1lb3V0XG4iKTsKKworCXJldHVybiAtRUlPOworfQorRVhQT1JUX1NZTUJPTChzbmRfbXNuZF9zZW5kX2RzcF9jbWQpOworCitpbnQgc25kX21zbmRfc2VuZF93b3JkKHN0cnVjdCBzbmRfbXNuZCAqZGV2LCB1bnNpZ25lZCBjaGFyIGhpZ2gsCisJCSAgIHVuc2lnbmVkIGNoYXIgbWlkLCB1bnNpZ25lZCBjaGFyIGxvdykKK3sKKwl1bnNpZ25lZCBpbnQgaW8gPSBkZXYtPmlvOworCisJaWYgKHNuZF9tc25kX3dhaXRfVFhERShkZXYpID09IDApIHsKKwkJb3V0YihoaWdoLCBpbyArIEhQX1RYSCk7CisJCW91dGIobWlkLCBpbyArIEhQX1RYTSk7CisJCW91dGIobG93LCBpbyArIEhQX1RYTCk7CisJCXJldHVybiAwOworCX0KKworCXNuZF9wcmludGQoS0VSTl9FUlIgTE9HTkFNRSAiOiBTZW5kIGhvc3Qgd29yZCB0aW1lb3V0XG4iKTsKKworCXJldHVybiAtRUlPOworfQorRVhQT1JUX1NZTUJPTChzbmRfbXNuZF9zZW5kX3dvcmQpOworCitpbnQgc25kX21zbmRfdXBsb2FkX2hvc3Qoc3RydWN0IHNuZF9tc25kICpkZXYsIGNvbnN0IHU4ICpiaW4sIGludCBsZW4pCit7CisJaW50IGk7CisKKwlpZiAobGVuICUgMyAhPSAwKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgTE9HTkFNRQorCQkJICAgIjogVXBsb2FkIGhvc3QgZGF0YSBub3QgbXVsdGlwbGUgb2YgMyFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpICs9IDMpCisJCWlmIChzbmRfbXNuZF9zZW5kX3dvcmQoZGV2LCBiaW5baV0sIGJpbltpICsgMV0sIGJpbltpICsgMl0pKQorCQkJcmV0dXJuIC1FSU87CisKKwlpbmIoZGV2LT5pbyArIEhQX1JYTCk7CisJaW5iKGRldi0+aW8gKyBIUF9DVlIpOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKHNuZF9tc25kX3VwbG9hZF9ob3N0KTsKKworaW50IHNuZF9tc25kX2VuYWJsZV9pcnEoc3RydWN0IHNuZF9tc25kICpkZXYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChkZXYtPmlycV9yZWYrKykKKwkJcmV0dXJuIDA7CisKKwlzbmRfcHJpbnRkZChMT0dOQU1FICI6IEVuYWJsaW5nIElSUVxuIik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5sb2NrLCBmbGFncyk7CisJaWYgKHNuZF9tc25kX3dhaXRfVFhERShkZXYpID09IDApIHsKKwkJb3V0YihpbmIoZGV2LT5pbyArIEhQX0lDUikgfCBIUElDUl9UUkVRLCBkZXYtPmlvICsgSFBfSUNSKTsKKwkJaWYgKGRldi0+dHlwZSA9PSBtc25kQ2xhc3NpYykKKwkJCW91dGIoZGV2LT5pcnFpZCwgZGV2LT5pbyArIEhQX0lSUU0pOworCisJCW91dGIoaW5iKGRldi0+aW8gKyBIUF9JQ1IpICYgfkhQSUNSX1RSRVEsIGRldi0+aW8gKyBIUF9JQ1IpOworCQlvdXRiKGluYihkZXYtPmlvICsgSFBfSUNSKSB8IEhQSUNSX1JSRVEsIGRldi0+aW8gKyBIUF9JQ1IpOworCQllbmFibGVfaXJxKGRldi0+aXJxKTsKKwkJc25kX21zbmRfaW5pdF9xdWV1ZShkZXYtPkRTUFEsIGRldi0+ZHNwcV9kYXRhX2J1ZmYsCisJCQkJICAgIGRldi0+ZHNwcV9idWZmX3NpemUpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIDA7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+bG9jaywgZmxhZ3MpOworCisJc25kX3ByaW50ZChLRVJOX0VSUiBMT0dOQU1FICI6IEVuYWJsZSBJUlEgZmFpbGVkXG4iKTsKKworCXJldHVybiAtRUlPOworfQorRVhQT1JUX1NZTUJPTChzbmRfbXNuZF9lbmFibGVfaXJxKTsKKworaW50IHNuZF9tc25kX2Rpc2FibGVfaXJxKHN0cnVjdCBzbmRfbXNuZCAqZGV2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoLS1kZXYtPmlycV9yZWYgPiAwKQorCQlyZXR1cm4gMDsKKworCWlmIChkZXYtPmlycV9yZWYgPCAwKQorCQlzbmRfcHJpbnRkKEtFUk5fV0FSTklORyBMT0dOQU1FICI6IElSUSByZWYgY291bnQgaXMgJWRcbiIsCisJCQkgICBkZXYtPmlycV9yZWYpOworCisJc25kX3ByaW50ZGQoTE9HTkFNRSAiOiBEaXNhYmxpbmcgSVJRXG4iKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmxvY2ssIGZsYWdzKTsKKwlpZiAoc25kX21zbmRfd2FpdF9UWERFKGRldikgPT0gMCkgeworCQlvdXRiKGluYihkZXYtPmlvICsgSFBfSUNSKSAmIH5IUElDUl9SUkVRLCBkZXYtPmlvICsgSFBfSUNSKTsKKwkJaWYgKGRldi0+dHlwZSA9PSBtc25kQ2xhc3NpYykKKwkJCW91dGIoSFBJUlFfTk9ORSwgZGV2LT5pbyArIEhQX0lSUU0pOworCQlkaXNhYmxlX2lycShkZXYtPmlycSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gMDsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5sb2NrLCBmbGFncyk7CisKKwlzbmRfcHJpbnRkKEtFUk5fRVJSIExPR05BTUUgIjogRGlzYWJsZSBJUlEgZmFpbGVkXG4iKTsKKworCXJldHVybiAtRUlPOworfQorRVhQT1JUX1NZTUJPTChzbmRfbXNuZF9kaXNhYmxlX2lycSk7CisKK3N0YXRpYyBpbmxpbmUgbG9uZyBnZXRfcGxheV9kZWxheV9qaWZmaWVzKHN0cnVjdCBzbmRfbXNuZCAqY2hpcCwgbG9uZyBzaXplKQoreworCWxvbmcgdG1wID0gKHNpemUgKiBIWiAqIGNoaXAtPnBsYXlfc2FtcGxlX3NpemUpIC8gODsKKwlyZXR1cm4gdG1wIC8gKGNoaXAtPnBsYXlfc2FtcGxlX3JhdGUgKiBjaGlwLT5wbGF5X2NoYW5uZWxzKTsKK30KKworc3RhdGljIHZvaWQgc25kX21zbmRfZHNwX3dyaXRlX2ZsdXNoKHN0cnVjdCBzbmRfbXNuZCAqY2hpcCkKK3sKKwlpZiAoIShjaGlwLT5tb2RlICYgRk1PREVfV1JJVEUpIHx8ICF0ZXN0X2JpdChGX1dSSVRJTkcsICZjaGlwLT5mbGFncykpCisJCXJldHVybjsKKwlzZXRfYml0KEZfV1JJVEVGTFVTSCwgJmNoaXAtPmZsYWdzKTsKKy8qCWludGVycnVwdGlibGVfc2xlZXBfb25fdGltZW91dCgKKwkJJmNoaXAtPndyaXRlZmx1c2gsCisJCWdldF9wbGF5X2RlbGF5X2ppZmZpZXMoJmNoaXAsIGNoaXAtPkRBUEYubGVuKSk7Ki8KKwljbGVhcl9iaXQoRl9XUklURUZMVVNILCAmY2hpcC0+ZmxhZ3MpOworCWlmICghc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCisJCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZSgKKwkJCWdldF9wbGF5X2RlbGF5X2ppZmZpZXMoY2hpcCwgY2hpcC0+cGxheV9wZXJpb2RfYnl0ZXMpKTsKKwljbGVhcl9iaXQoRl9XUklUSU5HLCAmY2hpcC0+ZmxhZ3MpOworfQorCit2b2lkIHNuZF9tc25kX2RzcF9oYWx0KHN0cnVjdCBzbmRfbXNuZCAqY2hpcCwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJaWYgKChmaWxlID8gZmlsZS0+Zl9tb2RlIDogY2hpcC0+bW9kZSkgJiBGTU9ERV9SRUFEKSB7CisJCWNsZWFyX2JpdChGX1JFQURJTkcsICZjaGlwLT5mbGFncyk7CisJCXNuZF9tc25kX3NlbmRfZHNwX2NtZChjaGlwLCBIREVYX1JFQ09SRF9TVE9QKTsKKwkJc25kX21zbmRfZGlzYWJsZV9pcnEoY2hpcCk7CisJCWlmIChmaWxlKSB7CisJCQlzbmRfcHJpbnRkKEtFUk5fSU5GTyBMT0dOQU1FCisJCQkJICAgIjogU3RvcHBpbmcgcmVhZCBmb3IgJXBcbiIsIGZpbGUpOworCQkJY2hpcC0+bW9kZSAmPSB+Rk1PREVfUkVBRDsKKwkJfQorCQljbGVhcl9iaXQoRl9BVURJT19SRUFEX0lOVVNFLCAmY2hpcC0+ZmxhZ3MpOworCX0KKwlpZiAoKGZpbGUgPyBmaWxlLT5mX21vZGUgOiBjaGlwLT5tb2RlKSAmIEZNT0RFX1dSSVRFKSB7CisJCWlmICh0ZXN0X2JpdChGX1dSSVRJTkcsICZjaGlwLT5mbGFncykpIHsKKwkJCXNuZF9tc25kX2RzcF93cml0ZV9mbHVzaChjaGlwKTsKKwkJCXNuZF9tc25kX3NlbmRfZHNwX2NtZChjaGlwLCBIREVYX1BMQVlfU1RPUCk7CisJCX0KKwkJc25kX21zbmRfZGlzYWJsZV9pcnEoY2hpcCk7CisJCWlmIChmaWxlKSB7CisJCQlzbmRfcHJpbnRkKEtFUk5fSU5GTworCQkJCSAgIExPR05BTUUgIjogU3RvcHBpbmcgd3JpdGUgZm9yICVwXG4iLCBmaWxlKTsKKwkJCWNoaXAtPm1vZGUgJj0gfkZNT0RFX1dSSVRFOworCQl9CisJCWNsZWFyX2JpdChGX0FVRElPX1dSSVRFX0lOVVNFLCAmY2hpcC0+ZmxhZ3MpOworCX0KK30KK0VYUE9SVF9TWU1CT0woc25kX21zbmRfZHNwX2hhbHQpOworCisKK2ludCBzbmRfbXNuZF9EQVJRKHN0cnVjdCBzbmRfbXNuZCAqY2hpcCwgaW50IGJhbmspCit7CisJaW50IC8qc2l6ZSwgbiwqLyB0aW1lb3V0ID0gMzsKKwl1MTYgd1RtcDsKKwkvKiB2b2lkICpEQVFEOyAqLworCisJLyogSW5jcmVtZW50IHRoZSB0YWlsIGFuZCBjaGVjayBmb3IgcXVldWUgd3JhcCAqLworCXdUbXAgPSByZWFkdyhjaGlwLT5EQVJRICsgSlFTX3dUYWlsKSArIFBDVE9EU1BfT0ZGU0VUKERBUURTX19zaXplKTsKKwlpZiAod1RtcCA+IHJlYWR3KGNoaXAtPkRBUlEgKyBKUVNfd1NpemUpKQorCQl3VG1wID0gMDsKKwl3aGlsZSAod1RtcCA9PSByZWFkdyhjaGlwLT5EQVJRICsgSlFTX3dIZWFkKSAmJiB0aW1lb3V0LS0pCisJCXVkZWxheSgxKTsKKworCWlmIChjaGlwLT5jYXB0dXJlUGVyaW9kcyA9PSAyKSB7CisJCXZvaWQgKnBEQVEgPSBjaGlwLT5tYXBwZWRiYXNlICsgREFSUV9EQVRBX0JVRkYgKworCQkJICAgICBiYW5rICogREFRRFNfX3NpemUgKyBEQVFEU193U3RhcnQ7CisJCXVuc2lnbmVkIHNob3J0IG9mZnNldCA9IDB4MzAwMCArIGNoaXAtPmNhcHR1cmVQZXJpb2RCeXRlczsKKworCQlpZiAocmVhZHcocERBUSkgIT0gUENUT0RTUF9CQVNFRCgweDMwMDApKQorCQkJb2Zmc2V0ID0gMHgzMDAwOworCQl3cml0ZXcoUENUT0RTUF9CQVNFRChvZmZzZXQpLCBwREFRKTsKKwl9CisKKwl3cml0ZXcod1RtcCwgY2hpcC0+REFSUSArIEpRU193VGFpbCk7CisKKyNpZiAwCisJLyogR2V0IG91ciBkaWdpdGFsIGF1ZGlvIHF1ZXVlIHN0cnVjdCAqLworCURBUUQgPSBiYW5rICogREFRRFNfX3NpemUgKyBjaGlwLT5tYXBwZWRiYXNlICsgREFSUV9EQVRBX0JVRkY7CisKKwkvKiBHZXQgbGVuZ3RoIG9mIGRhdGEgKi8KKwlzaXplID0gcmVhZHcoREFRRCArIERBUURTX3dTaXplKTsKKworCS8qIFJlYWQgZGF0YSBmcm9tIHRoZSBoZWFkICh1bnByb3RlY3RlZCBiYW5rIDEgYWNjZXNzIG9rYXkKKwkgICBzaW5jZSB0aGlzIGlzIG9ubHkgY2FsbGVkIGluc2lkZSBhbiBpbnRlcnJ1cHQpICovCisJb3V0YihIUEJMS1NFTF8xLCBjaGlwLT5pbyArIEhQX0JMS1MpOworCW4gPSBtc25kX2ZpZm9fd3JpdGUoJmNoaXAtPkRBUkYsCisJCQkgICAgKGNoYXIgKikoY2hpcC0+YmFzZSArIGJhbmsgKiBEQVJfQlVGRl9TSVpFKSwKKwkJCSAgICBzaXplLCAwKTsKKwlpZiAobiA8PSAwKSB7CisJCW91dGIoSFBCTEtTRUxfMCwgY2hpcC0+aW8gKyBIUF9CTEtTKTsKKwkJcmV0dXJuIG47CisJfQorCW91dGIoSFBCTEtTRUxfMCwgY2hpcC0+aW8gKyBIUF9CTEtTKTsKKyNlbmRpZgorCisJcmV0dXJuIDE7Cit9CitFWFBPUlRfU1lNQk9MKHNuZF9tc25kX0RBUlEpOworCitpbnQgc25kX21zbmRfREFQUShzdHJ1Y3Qgc25kX21zbmQgKmNoaXAsIGludCBzdGFydCkKK3sKKwl1MTYJREFQUV90YWlsOworCWludAlwcm90ZWN0ID0gc3RhcnQsIG5iYW5rcyA9IDA7CisJdm9pZAkqREFRRDsKKwlzdGF0aWMgaW50IHBsYXlfYmFua3Nfc3VibWl0dGVkOworCS8qIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPmxvY2ssIGZsYWdzKTsgbm90IG5lY2Vzc2FyeSAqLworCisJREFQUV90YWlsID0gcmVhZHcoY2hpcC0+REFQUSArIEpRU193VGFpbCk7CisJd2hpbGUgKERBUFFfdGFpbCAhPSByZWFkdyhjaGlwLT5EQVBRICsgSlFTX3dIZWFkKSB8fCBzdGFydCkgeworCQlpbnQgYmFua19udW0gPSBEQVBRX3RhaWwgLyBQQ1RPRFNQX09GRlNFVChEQVFEU19fc2l6ZSk7CisKKwkJaWYgKHN0YXJ0KSB7CisJCQlzdGFydCA9IDA7CisJCQlwbGF5X2JhbmtzX3N1Ym1pdHRlZCA9IDA7CisJCX0KKworCQkvKiBHZXQgb3VyIGRpZ2l0YWwgYXVkaW8gcXVldWUgc3RydWN0ICovCisJCURBUUQgPSBiYW5rX251bSAqIERBUURTX19zaXplICsgY2hpcC0+bWFwcGVkYmFzZSArCisJCQlEQVBRX0RBVEFfQlVGRjsKKworCQkvKiBXcml0ZSBzaXplIG9mIHRoaXMgYmFuayAqLworCQl3cml0ZXcoY2hpcC0+cGxheV9wZXJpb2RfYnl0ZXMsIERBUUQgKyBEQVFEU193U2l6ZSk7CisJCWlmIChwbGF5X2JhbmtzX3N1Ym1pdHRlZCA8IDMpCisJCQkrK3BsYXlfYmFua3Nfc3VibWl0dGVkOworCQllbHNlIGlmIChjaGlwLT5wbGF5UGVyaW9kcyA9PSAyKSB7CisJCQl1bnNpZ25lZCBzaG9ydCBvZmZzZXQgPSBjaGlwLT5wbGF5X3BlcmlvZF9ieXRlczsKKworCQkJaWYgKHJlYWR3KERBUUQgKyBEQVFEU193U3RhcnQpICE9IFBDVE9EU1BfQkFTRUQoMHgwKSkKKwkJCQlvZmZzZXQgPSAwOworCisJCQl3cml0ZXcoUENUT0RTUF9CQVNFRChvZmZzZXQpLCBEQVFEICsgREFRRFNfd1N0YXJ0KTsKKwkJfQorCQkrK25iYW5rczsKKworCQkvKiBUaGVuIGFkdmFuY2UgdGhlIHRhaWwgKi8KKwkJLyoKKwkJaWYgKHByb3RlY3QpCisJCQlzbmRfcHJpbnRkKEtFUk5fSU5GTyAiQiAlWCAlbFhcbiIsCisJCQkJICAgYmFua19udW0sIHh0aW1lLnR2X3VzZWMpOworCQkqLworCisJCURBUFFfdGFpbCA9ICgrK2JhbmtfbnVtICUgMykgKiBQQ1RPRFNQX09GRlNFVChEQVFEU19fc2l6ZSk7CisJCXdyaXRldyhEQVBRX3RhaWwsIGNoaXAtPkRBUFEgKyBKUVNfd1RhaWwpOworCQkvKiBUZWxsIHRoZSBEU1AgdG8gcGxheSB0aGUgYmFuayAqLworCQlzbmRfbXNuZF9zZW5kX2RzcF9jbWQoY2hpcCwgSERFWF9QTEFZX1NUQVJUKTsKKwkJaWYgKHByb3RlY3QpCisJCQlpZiAoMiA9PSBiYW5rX251bSkKKwkJCQlicmVhazsKKwl9CisJLyoKKwlpZiAocHJvdGVjdCkKKwkJc25kX3ByaW50ZChLRVJOX0lORk8gIiVsWFxuIiwgeHRpbWUudHZfdXNlYyk7CisJKi8KKwkvKiBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5sb2NrLCBmbGFncyk7IG5vdCBuZWNlc3NhcnkgKi8KKwlyZXR1cm4gbmJhbmtzOworfQorRVhQT1JUX1NZTUJPTChzbmRfbXNuZF9EQVBRKTsKKworc3RhdGljIHZvaWQgc25kX21zbmRfcGxheV9yZXNldF9xdWV1ZShzdHJ1Y3Qgc25kX21zbmQgKmNoaXAsCisJCQkJICAgICAgdW5zaWduZWQgaW50IHBjbV9wZXJpb2RzLAorCQkJCSAgICAgIHVuc2lnbmVkIGludCBwY21fY291bnQpCit7CisJaW50CW47CisJdm9pZAkqcERBUSA9IGNoaXAtPm1hcHBlZGJhc2UgKyBEQVBRX0RBVEFfQlVGRjsKKworCWNoaXAtPmxhc3RfcGxheWJhbmsgPSAtMTsKKwljaGlwLT5wbGF5TGltaXQgPSBwY21fY291bnQgKiAocGNtX3BlcmlvZHMgLSAxKTsKKwljaGlwLT5wbGF5UGVyaW9kcyA9IHBjbV9wZXJpb2RzOworCXdyaXRldyhQQ1RPRFNQX09GRlNFVCgwICogREFRRFNfX3NpemUpLCBjaGlwLT5EQVBRICsgSlFTX3dIZWFkKTsKKwl3cml0ZXcoUENUT0RTUF9PRkZTRVQoMCAqIERBUURTX19zaXplKSwgY2hpcC0+REFQUSArIEpRU193VGFpbCk7CisKKwljaGlwLT5wbGF5X3BlcmlvZF9ieXRlcyA9IHBjbV9jb3VudDsKKworCWZvciAobiA9IDA7IG4gPCBwY21fcGVyaW9kczsgKytuLCBwREFRICs9IERBUURTX19zaXplKSB7CisJCXdyaXRldyhQQ1RPRFNQX0JBU0VEKCh1MzIpKHBjbV9jb3VudCAqIG4pKSwKKwkJCXBEQVEgKyBEQVFEU193U3RhcnQpOworCQl3cml0ZXcoMCwgcERBUSArIERBUURTX3dTaXplKTsKKwkJd3JpdGV3KDEsIHBEQVEgKyBEQVFEU193Rm9ybWF0KTsKKwkJd3JpdGV3KGNoaXAtPnBsYXlfc2FtcGxlX3NpemUsIHBEQVEgKyBEQVFEU193U2FtcGxlU2l6ZSk7CisJCXdyaXRldyhjaGlwLT5wbGF5X2NoYW5uZWxzLCBwREFRICsgREFRRFNfd0NoYW5uZWxzKTsKKwkJd3JpdGV3KGNoaXAtPnBsYXlfc2FtcGxlX3JhdGUsIHBEQVEgKyBEQVFEU193U2FtcGxlUmF0ZSk7CisJCXdyaXRldyhISU1UX1BMQVlfRE9ORSAqIDB4MTAwICsgbiwgcERBUSArIERBUURTX3dJbnRNc2cpOworCQl3cml0ZXcobiwgcERBUSArIERBUURTX3dGbGFncyk7CisJfQorfQorCitzdGF0aWMgdm9pZCBzbmRfbXNuZF9jYXB0dXJlX3Jlc2V0X3F1ZXVlKHN0cnVjdCBzbmRfbXNuZCAqY2hpcCwKKwkJCQkJIHVuc2lnbmVkIGludCBwY21fcGVyaW9kcywKKwkJCQkJIHVuc2lnbmVkIGludCBwY21fY291bnQpCit7CisJaW50CQluOworCXZvaWQJCSpwREFROworCS8qIHVuc2lnbmVkIGxvbmcJZmxhZ3M7ICovCisKKwkvKiBzbmRfbXNuZF9pbml0X3F1ZXVlKGNoaXAtPkRBUlEsIERBUlFfREFUQV9CVUZGLCBEQVJRX0JVRkZfU0laRSk7ICovCisKKwljaGlwLT5sYXN0X3JlY2JhbmsgPSAyOworCWNoaXAtPmNhcHR1cmVMaW1pdCA9IHBjbV9jb3VudCAqIChwY21fcGVyaW9kcyAtIDEpOworCWNoaXAtPmNhcHR1cmVQZXJpb2RzID0gcGNtX3BlcmlvZHM7CisJd3JpdGV3KFBDVE9EU1BfT0ZGU0VUKDAgKiBEQVFEU19fc2l6ZSksIGNoaXAtPkRBUlEgKyBKUVNfd0hlYWQpOworCXdyaXRldyhQQ1RPRFNQX09GRlNFVChjaGlwLT5sYXN0X3JlY2JhbmsgKiBEQVFEU19fc2l6ZSksCisJCWNoaXAtPkRBUlEgKyBKUVNfd1RhaWwpOworCisjaWYgMCAvKiBDcml0aWNhbCBzZWN0aW9uOiBiYW5rIDEgYWNjZXNzLiB0aGlzIGlzIGhvdyB0aGUgT1NTIGRyaXZlciBkb2VzIGl0OiovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPmxvY2ssIGZsYWdzKTsKKwlvdXRiKEhQQkxLU0VMXzEsIGNoaXAtPmlvICsgSFBfQkxLUyk7CisJbWVtc2V0X2lvKGNoaXAtPm1hcHBlZGJhc2UsIDAsIERBUl9CVUZGX1NJWkUgKiAzKTsKKwlvdXRiKEhQQkxLU0VMXzAsIGNoaXAtPmlvICsgSFBfQkxLUyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+bG9jaywgZmxhZ3MpOworI2VuZGlmCisKKwljaGlwLT5jYXB0dXJlUGVyaW9kQnl0ZXMgPSBwY21fY291bnQ7CisJc25kX3ByaW50ZGQoInNuZF9tc25kX2NhcHR1cmVfcmVzZXRfcXVldWUoKSAlaVxuIiwgcGNtX2NvdW50KTsKKworCXBEQVEgPSBjaGlwLT5tYXBwZWRiYXNlICsgREFSUV9EQVRBX0JVRkY7CisKKwlmb3IgKG4gPSAwOyBuIDwgcGNtX3BlcmlvZHM7ICsrbiwgcERBUSArPSBEQVFEU19fc2l6ZSkgeworCQl1MzIgdG1wID0gcGNtX2NvdW50ICogbjsKKworCQl3cml0ZXcoUENUT0RTUF9CQVNFRCh0bXAgKyAweDMwMDApLCBwREFRICsgREFRRFNfd1N0YXJ0KTsKKwkJd3JpdGV3KHBjbV9jb3VudCwgcERBUSArIERBUURTX3dTaXplKTsKKwkJd3JpdGV3KDEsIHBEQVEgKyBEQVFEU193Rm9ybWF0KTsKKwkJd3JpdGV3KGNoaXAtPmNhcHR1cmVfc2FtcGxlX3NpemUsIHBEQVEgKyBEQVFEU193U2FtcGxlU2l6ZSk7CisJCXdyaXRldyhjaGlwLT5jYXB0dXJlX2NoYW5uZWxzLCBwREFRICsgREFRRFNfd0NoYW5uZWxzKTsKKwkJd3JpdGV3KGNoaXAtPmNhcHR1cmVfc2FtcGxlX3JhdGUsIHBEQVEgKyBEQVFEU193U2FtcGxlUmF0ZSk7CisJCXdyaXRldyhISU1UX1JFQ09SRF9ET05FICogMHgxMDAgKyBuLCBwREFRICsgREFRRFNfd0ludE1zZyk7CisJCXdyaXRldyhuLCBwREFRICsgREFRRFNfd0ZsYWdzKTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9oYXJkd2FyZSBzbmRfbXNuZF9wbGF5YmFjayA9IHsKKwkuaW5mbyA9CQkJU05EUlZfUENNX0lORk9fTU1BUCB8CisJCQkJU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgfAorCQkJCVNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQsCisJLmZvcm1hdHMgPQkJU05EUlZfUENNX0ZNVEJJVF9VOCB8IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLAorCS5yYXRlcyA9CQlTTkRSVl9QQ01fUkFURV84MDAwXzQ4MDAwLAorCS5yYXRlX21pbiA9CQk4MDAwLAorCS5yYXRlX21heCA9CQk0ODAwMCwKKwkuY2hhbm5lbHNfbWluID0JCTEsCisJLmNoYW5uZWxzX21heCA9CQkyLAorCS5idWZmZXJfYnl0ZXNfbWF4ID0JMHgzMDAwLAorCS5wZXJpb2RfYnl0ZXNfbWluID0JMHg0MCwKKwkucGVyaW9kX2J5dGVzX21heCA9CTB4MTgwMCwKKwkucGVyaW9kc19taW4gPQkJMiwKKwkucGVyaW9kc19tYXggPQkJMywKKwkuZmlmb19zaXplID0JCTAsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgc25kX21zbmRfY2FwdHVyZSA9IHsKKwkuaW5mbyA9CQkJU05EUlZfUENNX0lORk9fTU1BUCB8CisJCQkJU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgfAorCQkJCVNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQsCisJLmZvcm1hdHMgPQkJU05EUlZfUENNX0ZNVEJJVF9VOCB8IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLAorCS5yYXRlcyA9CQlTTkRSVl9QQ01fUkFURV84MDAwXzQ4MDAwLAorCS5yYXRlX21pbiA9CQk4MDAwLAorCS5yYXRlX21heCA9CQk0ODAwMCwKKwkuY2hhbm5lbHNfbWluID0JCTEsCisJLmNoYW5uZWxzX21heCA9CQkyLAorCS5idWZmZXJfYnl0ZXNfbWF4ID0JMHgzMDAwLAorCS5wZXJpb2RfYnl0ZXNfbWluID0JMHg0MCwKKwkucGVyaW9kX2J5dGVzX21heCA9CTB4MTgwMCwKKwkucGVyaW9kc19taW4gPQkJMiwKKwkucGVyaW9kc19tYXggPQkJMywKKwkuZmlmb19zaXplID0JCTAsCit9OworCisKK3N0YXRpYyBpbnQgc25kX21zbmRfcGxheWJhY2tfb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBzbmRfbXNuZCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKworCXNldF9iaXQoRl9BVURJT19XUklURV9JTlVTRSwgJmNoaXAtPmZsYWdzKTsKKwljbGVhcl9iaXQoRl9XUklUSU5HLCAmY2hpcC0+ZmxhZ3MpOworCXNuZF9tc25kX2VuYWJsZV9pcnEoY2hpcCk7CisKKwlydW50aW1lLT5kbWFfYXJlYSA9IGNoaXAtPm1hcHBlZGJhc2U7CisJcnVudGltZS0+ZG1hX2J5dGVzID0gMHgzMDAwOworCisJY2hpcC0+cGxheWJhY2tfc3Vic3RyZWFtID0gc3Vic3RyZWFtOworCXJ1bnRpbWUtPmh3ID0gc25kX21zbmRfcGxheWJhY2s7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX21zbmRfcGxheWJhY2tfY2xvc2Uoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9tc25kICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCisJc25kX21zbmRfZGlzYWJsZV9pcnEoY2hpcCk7CisJY2xlYXJfYml0KEZfQVVESU9fV1JJVEVfSU5VU0UsICZjaGlwLT5mbGFncyk7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBzbmRfbXNuZF9wbGF5YmFja19od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkJCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zKQoreworCWludAlpOworCXN0cnVjdCBzbmRfbXNuZCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwl2b2lkCSpwREFRID0JY2hpcC0+bWFwcGVkYmFzZSArIERBUFFfREFUQV9CVUZGOworCisJY2hpcC0+cGxheV9zYW1wbGVfc2l6ZSA9IHNuZF9wY21fZm9ybWF0X3dpZHRoKHBhcmFtc19mb3JtYXQocGFyYW1zKSk7CisJY2hpcC0+cGxheV9jaGFubmVscyA9IHBhcmFtc19jaGFubmVscyhwYXJhbXMpOworCWNoaXAtPnBsYXlfc2FtcGxlX3JhdGUgPSBwYXJhbXNfcmF0ZShwYXJhbXMpOworCisJZm9yIChpID0gMDsgaSA8IDM7ICsraSwgcERBUSArPSBEQVFEU19fc2l6ZSkgeworCQl3cml0ZXcoY2hpcC0+cGxheV9zYW1wbGVfc2l6ZSwgcERBUSArIERBUURTX3dTYW1wbGVTaXplKTsKKwkJd3JpdGV3KGNoaXAtPnBsYXlfY2hhbm5lbHMsIHBEQVEgKyBEQVFEU193Q2hhbm5lbHMpOworCQl3cml0ZXcoY2hpcC0+cGxheV9zYW1wbGVfcmF0ZSwgcERBUSArIERBUURTX3dTYW1wbGVSYXRlKTsKKwl9CisJLyogZG9udCBkbyB0aGlzIGhlcmU6CisJICogc25kX21zbmRfY2FsaWJyYXRlX2FkYyhjaGlwLT5wbGF5X3NhbXBsZV9yYXRlKTsKKwkgKi8KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9tc25kX3BsYXliYWNrX3ByZXBhcmUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9tc25kICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXVuc2lnbmVkIGludCBwY21fc2l6ZSA9IHNuZF9wY21fbGliX2J1ZmZlcl9ieXRlcyhzdWJzdHJlYW0pOworCXVuc2lnbmVkIGludCBwY21fY291bnQgPSBzbmRfcGNtX2xpYl9wZXJpb2RfYnl0ZXMoc3Vic3RyZWFtKTsKKwl1bnNpZ25lZCBpbnQgcGNtX3BlcmlvZHMgPSBwY21fc2l6ZSAvIHBjbV9jb3VudDsKKworCXNuZF9tc25kX3BsYXlfcmVzZXRfcXVldWUoY2hpcCwgcGNtX3BlcmlvZHMsIHBjbV9jb3VudCk7CisJY2hpcC0+cGxheURNQVBvcyA9IDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX21zbmRfcGxheWJhY2tfdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCQkgICAgIGludCBjbWQpCit7CisJc3RydWN0IHNuZF9tc25kICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCWludAlyZXN1bHQgPSAwOworCisJaWYgKGNtZCA9PSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVCkgeworCQlzbmRfcHJpbnRkZCgic25kX21zbmRfcGxheWJhY2tfdHJpZ2dlcihTVEFSVClcbiIpOworCQljaGlwLT5iYW5rc1BsYXllZCA9IDA7CisJCXNldF9iaXQoRl9XUklUSU5HLCAmY2hpcC0+ZmxhZ3MpOworCQlzbmRfbXNuZF9EQVBRKGNoaXAsIDEpOworCX0gZWxzZSBpZiAoY21kID09IFNORFJWX1BDTV9UUklHR0VSX1NUT1ApIHsKKwkJc25kX3ByaW50ZGQoInNuZF9tc25kX3BsYXliYWNrX3RyaWdnZXIoU1RvcClcbiIpOworCQkvKiBpbnRlcnJ1cHQgZGlhZ25vc3RpYywgY29tbWVudCB0aGlzIG91dCBsYXRlciAqLworCQljbGVhcl9iaXQoRl9XUklUSU5HLCAmY2hpcC0+ZmxhZ3MpOworCQlzbmRfbXNuZF9zZW5kX2RzcF9jbWQoY2hpcCwgSERFWF9QTEFZX1NUT1ApOworCX0gZWxzZSB7CisJCXNuZF9wcmludGQoS0VSTl9FUlIgInNuZF9tc25kX3BsYXliYWNrX3RyaWdnZXIoPz8/Pz8pXG4iKTsKKwkJcmVzdWx0ID0gLUVJTlZBTDsKKwl9CisKKwlzbmRfcHJpbnRkZCgic25kX21zbmRfcGxheWJhY2tfdHJpZ2dlcigpIEVOREVcbiIpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBzbmRfcGNtX3VmcmFtZXNfdAorc25kX21zbmRfcGxheWJhY2tfcG9pbnRlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX21zbmQgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisKKwlyZXR1cm4gYnl0ZXNfdG9fZnJhbWVzKHN1YnN0cmVhbS0+cnVudGltZSwgY2hpcC0+cGxheURNQVBvcyk7Cit9CisKKworc3RhdGljIHN0cnVjdCBzbmRfcGNtX29wcyBzbmRfbXNuZF9wbGF5YmFja19vcHMgPSB7CisJLm9wZW4gPQkJc25kX21zbmRfcGxheWJhY2tfb3BlbiwKKwkuY2xvc2UgPQlzbmRfbXNuZF9wbGF5YmFja19jbG9zZSwKKwkuaW9jdGwgPQlzbmRfcGNtX2xpYl9pb2N0bCwKKwkuaHdfcGFyYW1zID0Jc25kX21zbmRfcGxheWJhY2tfaHdfcGFyYW1zLAorCS5wcmVwYXJlID0Jc25kX21zbmRfcGxheWJhY2tfcHJlcGFyZSwKKwkudHJpZ2dlciA9CXNuZF9tc25kX3BsYXliYWNrX3RyaWdnZXIsCisJLnBvaW50ZXIgPQlzbmRfbXNuZF9wbGF5YmFja19wb2ludGVyLAorfTsKKworc3RhdGljIGludCBzbmRfbXNuZF9jYXB0dXJlX29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlzdHJ1Y3Qgc25kX21zbmQgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisKKwlzZXRfYml0KEZfQVVESU9fUkVBRF9JTlVTRSwgJmNoaXAtPmZsYWdzKTsKKwlzbmRfbXNuZF9lbmFibGVfaXJxKGNoaXApOworCXJ1bnRpbWUtPmRtYV9hcmVhID0gY2hpcC0+bWFwcGVkYmFzZSArIDB4MzAwMDsKKwlydW50aW1lLT5kbWFfYnl0ZXMgPSAweDMwMDA7CisJbWVtc2V0KHJ1bnRpbWUtPmRtYV9hcmVhLCAwLCBydW50aW1lLT5kbWFfYnl0ZXMpOworCWNoaXAtPmNhcHR1cmVfc3Vic3RyZWFtID0gc3Vic3RyZWFtOworCXJ1bnRpbWUtPmh3ID0gc25kX21zbmRfY2FwdHVyZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfbXNuZF9jYXB0dXJlX2Nsb3NlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfbXNuZCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKworCXNuZF9tc25kX2Rpc2FibGVfaXJxKGNoaXApOworCWNsZWFyX2JpdChGX0FVRElPX1JFQURfSU5VU0UsICZjaGlwLT5mbGFncyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX21zbmRfY2FwdHVyZV9wcmVwYXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfbXNuZCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwl1bnNpZ25lZCBpbnQgcGNtX3NpemUgPSBzbmRfcGNtX2xpYl9idWZmZXJfYnl0ZXMoc3Vic3RyZWFtKTsKKwl1bnNpZ25lZCBpbnQgcGNtX2NvdW50ID0gc25kX3BjbV9saWJfcGVyaW9kX2J5dGVzKHN1YnN0cmVhbSk7CisJdW5zaWduZWQgaW50IHBjbV9wZXJpb2RzID0gcGNtX3NpemUgLyBwY21fY291bnQ7CisKKwlzbmRfbXNuZF9jYXB0dXJlX3Jlc2V0X3F1ZXVlKGNoaXAsIHBjbV9wZXJpb2RzLCBwY21fY291bnQpOworCWNoaXAtPmNhcHR1cmVETUFQb3MgPSAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9tc25kX2NhcHR1cmVfdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCQkgICAgaW50IGNtZCkKK3sKKwlzdHJ1Y3Qgc25kX21zbmQgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisKKwlpZiAoY21kID09IFNORFJWX1BDTV9UUklHR0VSX1NUQVJUKSB7CisJCWNoaXAtPmxhc3RfcmVjYmFuayA9IC0xOworCQlzZXRfYml0KEZfUkVBRElORywgJmNoaXAtPmZsYWdzKTsKKwkJaWYgKHNuZF9tc25kX3NlbmRfZHNwX2NtZChjaGlwLCBIREVYX1JFQ09SRF9TVEFSVCkgPT0gMCkKKwkJCXJldHVybiAwOworCisJCWNsZWFyX2JpdChGX1JFQURJTkcsICZjaGlwLT5mbGFncyk7CisJfSBlbHNlIGlmIChjbWQgPT0gU05EUlZfUENNX1RSSUdHRVJfU1RPUCkgeworCQljbGVhcl9iaXQoRl9SRUFESU5HLCAmY2hpcC0+ZmxhZ3MpOworCQlzbmRfbXNuZF9zZW5kX2RzcF9jbWQoY2hpcCwgSERFWF9SRUNPUkRfU1RPUCk7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworCitzdGF0aWMgc25kX3BjbV91ZnJhbWVzX3QKK3NuZF9tc25kX2NhcHR1cmVfcG9pbnRlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBzbmRfbXNuZCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKworCXJldHVybiBieXRlc190b19mcmFtZXMocnVudGltZSwgY2hpcC0+Y2FwdHVyZURNQVBvcyk7Cit9CisKKworc3RhdGljIGludCBzbmRfbXNuZF9jYXB0dXJlX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCQkJc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMpCit7CisJaW50CQlpOworCXN0cnVjdCBzbmRfbXNuZCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwl2b2lkCQkqcERBUSA9IGNoaXAtPm1hcHBlZGJhc2UgKyBEQVJRX0RBVEFfQlVGRjsKKworCWNoaXAtPmNhcHR1cmVfc2FtcGxlX3NpemUgPSBzbmRfcGNtX2Zvcm1hdF93aWR0aChwYXJhbXNfZm9ybWF0KHBhcmFtcykpOworCWNoaXAtPmNhcHR1cmVfY2hhbm5lbHMgPSBwYXJhbXNfY2hhbm5lbHMocGFyYW1zKTsKKwljaGlwLT5jYXB0dXJlX3NhbXBsZV9yYXRlID0gcGFyYW1zX3JhdGUocGFyYW1zKTsKKworCWZvciAoaSA9IDA7IGkgPCAzOyArK2ksIHBEQVEgKz0gREFRRFNfX3NpemUpIHsKKwkJd3JpdGV3KGNoaXAtPmNhcHR1cmVfc2FtcGxlX3NpemUsIHBEQVEgKyBEQVFEU193U2FtcGxlU2l6ZSk7CisJCXdyaXRldyhjaGlwLT5jYXB0dXJlX2NoYW5uZWxzLCBwREFRICsgREFRRFNfd0NoYW5uZWxzKTsKKwkJd3JpdGV3KGNoaXAtPmNhcHR1cmVfc2FtcGxlX3JhdGUsIHBEQVEgKyBEQVFEU193U2FtcGxlUmF0ZSk7CisJfQorCXJldHVybiAwOworfQorCisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9vcHMgc25kX21zbmRfY2FwdHVyZV9vcHMgPSB7CisJLm9wZW4gPQkJc25kX21zbmRfY2FwdHVyZV9vcGVuLAorCS5jbG9zZSA9CXNuZF9tc25kX2NhcHR1cmVfY2xvc2UsCisJLmlvY3RsID0Jc25kX3BjbV9saWJfaW9jdGwsCisJLmh3X3BhcmFtcyA9CXNuZF9tc25kX2NhcHR1cmVfaHdfcGFyYW1zLAorCS5wcmVwYXJlID0Jc25kX21zbmRfY2FwdHVyZV9wcmVwYXJlLAorCS50cmlnZ2VyID0Jc25kX21zbmRfY2FwdHVyZV90cmlnZ2VyLAorCS5wb2ludGVyID0Jc25kX21zbmRfY2FwdHVyZV9wb2ludGVyLAorfTsKKworCitpbnQgc25kX21zbmRfcGNtKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgaW50IGRldmljZSwKKwkJCXN0cnVjdCBzbmRfcGNtICoqcnBjbSkKK3sKKwlzdHJ1Y3Qgc25kX21zbmQgKmNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9wY20JKnBjbTsKKwlpbnQgZXJyOworCisJZXJyID0gc25kX3BjbV9uZXcoY2FyZCwgIk1TTkRQSU5OQUNMRSIsIGRldmljZSwgMSwgMSwgJnBjbSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlzbmRfcGNtX3NldF9vcHMocGNtLCBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLLCAmc25kX21zbmRfcGxheWJhY2tfb3BzKTsKKwlzbmRfcGNtX3NldF9vcHMocGNtLCBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUsICZzbmRfbXNuZF9jYXB0dXJlX29wcyk7CisKKwlwY20tPnByaXZhdGVfZGF0YSA9IGNoaXA7CisJc3RyY3B5KHBjbS0+bmFtZSwgIkh1cnJpY2FuZSIpOworCisKKwlpZiAocnBjbSkKKwkJKnJwY20gPSBwY207CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKHNuZF9tc25kX3BjbSk7CisKK01PRFVMRV9ERVNDUklQVElPTigiQ29tbW9uIHJvdXRpbmVzIGZvciBUdXJ0bGUgQmVhY2ggTXVsdGlzb3VuZCBkcml2ZXJzIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9tc25kL21zbmQuaCBiL3NvdW5kL2lzYS9tc25kL21zbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzczZTI0Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvaXNhL21zbmQvbXNuZC5oCkBAIC0wLDAgKzEsMzA4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogbXNuZC5oCisgKgorICogVHVydGxlIEJlYWNoIE11bHRpU291bmQgU291bmQgQ2FyZCBEcml2ZXIgZm9yIExpbnV4CisgKgorICogU29tZSBwYXJ0cyBvZiB0aGlzIGhlYWRlciBmaWxlIHdlcmUgZGVyaXZlZCBmcm9tIHRoZSBUdXJ0bGUgQmVhY2gKKyAqIE11bHRpU291bmQgRHJpdmVyIERldmVsb3BtZW50IEtpdC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggQW5kcmV3IFZlbGlhdGgKKyAqIENvcHlyaWdodCAoQykgMTk5MyBUdXJ0bGUgQmVhY2ggU3lzdGVtcywgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19NU05EX0gKKyNkZWZpbmUgX19NU05EX0gKKworI2RlZmluZSBERUZTQU1QTEVSQVRFCQk0NDEwMAorI2RlZmluZSBERUZTQU1QTEVTSVpFCQlTTkRSVl9QQ01fRk9STUFUX1MxNgorI2RlZmluZSBERUZDSEFOTkVMUwkJMQorCisjZGVmaW5lIFNSQU1fQkFOS19TSVpFCQkweDgwMDAKKyNkZWZpbmUgU1JBTV9DTlRMX1NUQVJUCQkweDdGMDAKKyNkZWZpbmUgU01BX1NUUlVDVF9TVEFSVAkweDdGNDAKKworI2RlZmluZSBEU1BfQkFTRV9BRERSCQkweDQwMDAKKyNkZWZpbmUgRFNQX0JBTktfQkFTRQkJMHg0MDAwCisKKyNkZWZpbmUgQUdORAkJCTB4MDEKKyNkZWZpbmUgU0lHTkFMCQkJMHgwMgorCisjZGVmaW5lIEVYVF9EU1BfQklUX0RDQUwJMHgwMDAxCisjZGVmaW5lIEVYVF9EU1BfQklUX01JRElfQ09OCTB4MDAwMgorCisjZGVmaW5lIEJVRkZTSVpFCQkweDgwMDAKKyNkZWZpbmUgSE9TVFFfU0laRQkJMHg0MAorCisjZGVmaW5lIERBUF9CVUZGX1NJWkUJCTB4MjQwMAorCisjZGVmaW5lIERBUFFfU1RSVUNUX1NJWkUJMHgxMAorI2RlZmluZSBEQVJRX1NUUlVDVF9TSVpFCTB4MTAKKyNkZWZpbmUgREFQUV9CVUZGX1NJWkUJCSgzICogMHgxMCkKKyNkZWZpbmUgREFSUV9CVUZGX1NJWkUJCSgzICogMHgxMCkKKyNkZWZpbmUgTU9EUV9CVUZGX1NJWkUJCTB4NDAwCisKKyNkZWZpbmUgREFQUV9EQVRBX0JVRkYJCTB4NkMwMAorI2RlZmluZSBEQVJRX0RBVEFfQlVGRgkJMHg2QzMwCisjZGVmaW5lIE1PRFFfREFUQV9CVUZGCQkweDZDNjAKKyNkZWZpbmUgTUlEUV9EQVRBX0JVRkYJCTB4NzA2MAorCisjZGVmaW5lIERBUFFfT0ZGU0VUCQlTUkFNX0NOVExfU1RBUlQKKyNkZWZpbmUgREFSUV9PRkZTRVQJCShTUkFNX0NOVExfU1RBUlQgKyAweDA4KQorI2RlZmluZSBNT0RRX09GRlNFVAkJKFNSQU1fQ05UTF9TVEFSVCArIDB4MTApCisjZGVmaW5lIE1JRFFfT0ZGU0VUCQkoU1JBTV9DTlRMX1NUQVJUICsgMHgxOCkKKyNkZWZpbmUgRFNQUV9PRkZTRVQJCShTUkFNX0NOVExfU1RBUlQgKyAweDIwKQorCisjZGVmaW5lCUhQX0lDUgkJCTB4MDAKKyNkZWZpbmUJSFBfQ1ZSCQkJMHgwMQorI2RlZmluZQlIUF9JU1IJCQkweDAyCisjZGVmaW5lCUhQX0lWUgkJCTB4MDMKKyNkZWZpbmUgSFBfTlUJCQkweDA0CisjZGVmaW5lIEhQX0lORk8JCQkweDA0CisjZGVmaW5lCUhQX1RYSAkJCTB4MDUKKyNkZWZpbmUJSFBfUlhICQkJMHgwNQorI2RlZmluZQlIUF9UWE0JCQkweDA2CisjZGVmaW5lCUhQX1JYTQkJCTB4MDYKKyNkZWZpbmUJSFBfVFhMCQkJMHgwNworI2RlZmluZQlIUF9SWEwJCQkweDA3CisKKyNkZWZpbmUgSFBfSUNSX0RFRgkJMHgwMAorI2RlZmluZSBIUF9DVlJfREVGCQkweDEyCisjZGVmaW5lIEhQX0lTUl9ERUYJCTB4MDYKKyNkZWZpbmUgSFBfSVZSX0RFRgkJMHgwZgorI2RlZmluZSBIUF9OVV9ERUYJCTB4MDAKKworI2RlZmluZQlIUF9JUlFNCQkJMHgwOQorCisjZGVmaW5lCUhQUl9CTFJDCQkweDA4CisjZGVmaW5lCUhQUl9TUFIxCQkweDA5CisjZGVmaW5lCUhQUl9TUFIyCQkweDBBCisjZGVmaW5lCUhQUl9UQ0wwCQkweDBCCisjZGVmaW5lCUhQUl9UQ0wxCQkweDBDCisjZGVmaW5lCUhQUl9UQ0wyCQkweDBECisjZGVmaW5lCUhQUl9UQ0wzCQkweDBFCisjZGVmaW5lCUhQUl9UQ0w0CQkweDBGCisKKyNkZWZpbmUJSFBJQ1JfSU5JVAkJMHg4MAorI2RlZmluZSBIUElDUl9ITTEJCTB4NDAKKyNkZWZpbmUgSFBJQ1JfSE0wCQkweDIwCisjZGVmaW5lIEhQSUNSX0hGMQkJMHgxMAorI2RlZmluZSBIUElDUl9IRjAJCTB4MDgKKyNkZWZpbmUJSFBJQ1JfVFJFUQkJMHgwMgorI2RlZmluZQlIUElDUl9SUkVRCQkweDAxCisKKyNkZWZpbmUgSFBDVlJfSEMJCTB4ODAKKworI2RlZmluZQlIUElTUl9IUkVRCQkweDgwCisjZGVmaW5lIEhQSVNSX0RNQQkJMHg0MAorI2RlZmluZSBIUElTUl9IRjMJCTB4MTAKKyNkZWZpbmUgSFBJU1JfSEYyCQkweDA4CisjZGVmaW5lCUhQSVNSX1RSRFkJCTB4MDQKKyNkZWZpbmUJSFBJU1JfVFhERQkJMHgwMgorI2RlZmluZQlIUElTUl9SWERGCQkweDAxCisKKyNkZWZpbmUJSFBJT18yOTAJCTAKKyNkZWZpbmUJSFBJT18yNjAJCTEKKyNkZWZpbmUJSFBJT18yNTAJCTIKKyNkZWZpbmUJSFBJT18yNDAJCTMKKyNkZWZpbmUJSFBJT18yMzAJCTQKKyNkZWZpbmUJSFBJT18yMjAJCTUKKyNkZWZpbmUJSFBJT18yMTAJCTYKKyNkZWZpbmUJSFBJT18zRTAJCTcKKworI2RlZmluZQlIUE1FTV9OT05FCQkwCisjZGVmaW5lCUhQTUVNX0IwMDAJCTEKKyNkZWZpbmUJSFBNRU1fQzgwMAkJMgorI2RlZmluZQlIUE1FTV9EMDAwCQkzCisjZGVmaW5lCUhQTUVNX0Q0MDAJCTQKKyNkZWZpbmUJSFBNRU1fRDgwMAkJNQorI2RlZmluZQlIUE1FTV9FMDAwCQk2CisjZGVmaW5lCUhQTUVNX0U4MDAJCTcKKworI2RlZmluZQlIUElSUV9OT05FCQkwCisjZGVmaW5lIEhQSVJRXzUJCQkxCisjZGVmaW5lIEhQSVJRXzcJCQkyCisjZGVmaW5lIEhQSVJRXzkJCQkzCisjZGVmaW5lIEhQSVJRXzEwCQk0CisjZGVmaW5lIEhQSVJRXzExCQk1CisjZGVmaW5lIEhQSVJRXzEyCQk2CisjZGVmaW5lIEhQSVJRXzE1CQk3CisKKyNkZWZpbmUJSElNVF9QTEFZX0RPTkUJCTB4MDAKKyNkZWZpbmUJSElNVF9SRUNPUkRfRE9ORQkweDAxCisjZGVmaW5lCUhJTVRfTUlESV9FT1MJCTB4MDIKKyNkZWZpbmUJSElNVF9NSURJX09VVAkJMHgwMworCisjZGVmaW5lCUhJTVRfTUlESV9JTl9VQ0hBUgkweDBFCisjZGVmaW5lCUhJTVRfRFNQCQkweDBGCisKKyNkZWZpbmUJSERFWF9CQVNFCSAgICAgICAJMHg5MgorI2RlZmluZQlIREVYX1BMQVlfU1RBUlQJCSgwICsgSERFWF9CQVNFKQorI2RlZmluZQlIREVYX1BMQVlfU1RPUAkJKDEgKyBIREVYX0JBU0UpCisjZGVmaW5lCUhERVhfUExBWV9QQVVTRQkJKDIgKyBIREVYX0JBU0UpCisjZGVmaW5lCUhERVhfUExBWV9SRVNVTUUJKDMgKyBIREVYX0JBU0UpCisjZGVmaW5lCUhERVhfUkVDT1JEX1NUQVJUCSg0ICsgSERFWF9CQVNFKQorI2RlZmluZQlIREVYX1JFQ09SRF9TVE9QCSg1ICsgSERFWF9CQVNFKQorI2RlZmluZQlIREVYX01JRElfSU5fU1RBUlQgCSg2ICsgSERFWF9CQVNFKQorI2RlZmluZQlIREVYX01JRElfSU5fU1RPUAkoNyArIEhERVhfQkFTRSkKKyNkZWZpbmUJSERFWF9NSURJX09VVF9TVEFSVAkoOCArIEhERVhfQkFTRSkKKyNkZWZpbmUJSERFWF9NSURJX09VVF9TVE9QCSg5ICsgSERFWF9CQVNFKQorI2RlZmluZQlIREVYX0FVWF9SRVEJCSgxMCArIEhERVhfQkFTRSkKKworI2RlZmluZQlIREVYQVJfQ0xFQVJfUEVBS1MJMQorI2RlZmluZQlIREVYQVJfSU5fU0VUX1BPVFMJMgorI2RlZmluZQlIREVYQVJfQVVYX1NFVF9QT1RTCTMKKyNkZWZpbmUJSERFWEFSX0NBTF9BX1RPX0QJNAorI2RlZmluZQlIREVYQVJfUkRfRVhUX0RTUF9CSVRTCTUKKworLyogUGlubmFjbGUgb25seSBIREVYQVIgZGVmcyAqLworI2RlZmluZQlIREVYQVJfU0VUX0FOQV9JTgkwCisjZGVmaW5lCUhERVhBUl9TRVRfU1lOVEhfSU4JNAorI2RlZmluZQlIREVYQVJfUkVBRF9EQVRfSU4JNQorI2RlZmluZQlIREVYQVJfTUlDX1NFVF9QT1RTCTYKKyNkZWZpbmUJSERFWEFSX1NFVF9EQVRfSU4JNworCisjZGVmaW5lIEhERVhBUl9TRVRfU1lOVEhfNDgJOAorI2RlZmluZSBIREVYQVJfU0VUX1NZTlRIXzQ0CTkKKworI2RlZmluZSBISVdPUkQobCkJCSgodTE2KSgoKCh1MzIpKGwpKSA+PiAxNikgJiAweEZGRkYpKQorI2RlZmluZSBMT1dPUkQobCkJCSgodTE2KSh1MzIpKGwpKQorI2RlZmluZSBISUJZVEUodykJCSgodTgpKCgodTE2KSh3KSA+PiA4KSAmIDB4RkYpKQorI2RlZmluZSBMT0JZVEUodykJCSgodTgpKHcpKQorI2RlZmluZSBNQUtFTE9ORyhsb3csIGhpKQkoKGxvbmcpKCgodTE2KShsb3cpKXwoKCh1MzIpKCh1MTYpKGhpKSkpPDwxNikpKQorI2RlZmluZSBNQUtFV09SRChsb3csIGhpKQkoKHUxNikoKCh1OCkobG93KSl8KCgodTE2KSgodTgpKGhpKSkpPDw4KSkpCisKKyNkZWZpbmUgUENUT0RTUF9PRkZTRVQodykJKHUxNikoKHcpLzIpCisjZGVmaW5lIFBDVE9EU1BfQkFTRUQodykJKHUxNikoKCh3KS8yKSArIERTUF9CQVNFX0FERFIpCisjZGVmaW5lIERTUFRPUENfQkFTRUQodykJKCgodykgLSBEU1BfQkFTRV9BRERSKSAqIDIpCisKKyNpZmRlZiBTTE9XSU8KKyMgIHVuZGVmIG91dGIKKyMgIHVuZGVmIGluYgorIyAgZGVmaW5lIG91dGIJCQlvdXRiX3AKKyMgIGRlZmluZSBpbmIJCQlpbmJfcAorI2VuZGlmCisKKy8qIEpvYlF1ZXVlU3RydWN0ICovCisjZGVmaW5lIEpRU193U3RhcnQJCTB4MDAKKyNkZWZpbmUgSlFTX3dTaXplCQkweDAyCisjZGVmaW5lIEpRU193SGVhZAkJMHgwNAorI2RlZmluZSBKUVNfd1RhaWwJCTB4MDYKKyNkZWZpbmUgSlFTX19zaXplCQkweDA4CisKKy8qIERBUXVldWVEYXRhU3RydWN0ICovCisjZGVmaW5lIERBUURTX3dTdGFydAkJMHgwMAorI2RlZmluZSBEQVFEU193U2l6ZQkJMHgwMgorI2RlZmluZSBEQVFEU193Rm9ybWF0CQkweDA0CisjZGVmaW5lIERBUURTX3dTYW1wbGVTaXplCTB4MDYKKyNkZWZpbmUgREFRRFNfd0NoYW5uZWxzCQkweDA4CisjZGVmaW5lIERBUURTX3dTYW1wbGVSYXRlCTB4MEEKKyNkZWZpbmUgREFRRFNfd0ludE1zZwkJMHgwQworI2RlZmluZSBEQVFEU193RmxhZ3MJCTB4MEUKKyNkZWZpbmUgREFRRFNfX3NpemUJCTB4MTAKKworI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorCitzdHJ1Y3Qgc25kX21zbmQgeworCXZvaWQgX19pb21lbQkJKm1hcHBlZGJhc2U7CisJaW50CQkJcGxheV9wZXJpb2RfYnl0ZXM7CisJaW50CQkJcGxheUxpbWl0OworCWludAkJCXBsYXlQZXJpb2RzOworCWludCAJCQlwbGF5RE1BUG9zOworCWludAkJCWJhbmtzUGxheWVkOworCWludCAJCQljYXB0dXJlRE1BUG9zOworCWludAkJCWNhcHR1cmVQZXJpb2RCeXRlczsKKwlpbnQJCQljYXB0dXJlTGltaXQ7CisJaW50CQkJY2FwdHVyZVBlcmlvZHM7CisJc3RydWN0IHNuZF9jYXJkCQkqY2FyZDsKKwl2b2lkCQkJKm1zbmRtaWRpX21wdTsKKwlzdHJ1Y3Qgc25kX3Jhd21pZGkJKnJtaWRpOworCisJLyogSGFyZHdhcmUgcmVzb3VyY2VzICovCisJbG9uZyBpbzsKKwlpbnQgbWVtaWQsIGlycWlkOworCWludCBpcnEsIGlycV9yZWY7CisJdW5zaWduZWQgbG9uZyBiYXNlOworCisJLyogTW90b3JvbGEgNTZrIERTUCBTTUEgKi8KKwl2b2lkIF9faW9tZW0JKlNNQTsKKwl2b2lkIF9faW9tZW0JKkRBUFE7CisJdm9pZCBfX2lvbWVtCSpEQVJROworCXZvaWQgX19pb21lbQkqTU9EUTsKKwl2b2lkIF9faW9tZW0JKk1JRFE7CisJdm9pZCBfX2lvbWVtCSpEU1BROworCWludCBkc3BxX2RhdGFfYnVmZiwgZHNwcV9idWZmX3NpemU7CisKKwkvKiBTdGF0ZSB2YXJpYWJsZXMgKi8KKwllbnVtIHsgbXNuZENsYXNzaWMsIG1zbmRQaW5uYWNsZSB9IHR5cGU7CisJbW9kZV90IG1vZGU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKyNkZWZpbmUgRl9SRVNFVFRJTkcJCQkwCisjZGVmaW5lIEZfSEFWRURJR0lUQUwJCQkxCisjZGVmaW5lIEZfQVVESU9fV1JJVEVfSU5VU0UJCTIKKyNkZWZpbmUgRl9XUklUSU5HCQkJMworI2RlZmluZSBGX1dSSVRFQkxPQ0sJCQk0CisjZGVmaW5lIEZfV1JJVEVGTFVTSAkJCTUKKyNkZWZpbmUgRl9BVURJT19SRUFEX0lOVVNFCQk2CisjZGVmaW5lIEZfUkVBRElORwkJCTcKKyNkZWZpbmUgRl9SRUFEQkxPQ0sJCQk4CisjZGVmaW5lIEZfRVhUX01JRElfSU5VU0UJCTkKKyNkZWZpbmUgRl9IRFJfTUlESV9JTlVTRQkJMTAKKyNkZWZpbmUgRl9ESVNBQkxFX1dSSVRFX05ERUxBWQkJMTEKKwlzcGlubG9ja190IGxvY2s7CisJc3BpbmxvY2tfdCBtaXhlcl9sb2NrOworCWludCBucmVzZXRzOworCXVuc2lnbmVkIHJlY3NyYzsKKyNkZWZpbmUgTEVWRUxfRU5UUklFUyAzMgorCWludCBsZWZ0X2xldmVsc1tMRVZFTF9FTlRSSUVTXTsKKwlpbnQgcmlnaHRfbGV2ZWxzW0xFVkVMX0VOVFJJRVNdOworCWludCBjYWxpYnJhdGVfc2lnbmFsOworCWludCBwbGF5X3NhbXBsZV9zaXplLCBwbGF5X3NhbXBsZV9yYXRlLCBwbGF5X2NoYW5uZWxzOworCWludCBwbGF5X25kZWxheTsKKwlpbnQgY2FwdHVyZV9zYW1wbGVfc2l6ZSwgY2FwdHVyZV9zYW1wbGVfcmF0ZSwgY2FwdHVyZV9jaGFubmVsczsKKwlpbnQgY2FwdHVyZV9uZGVsYXk7CisJdTggYkN1cnJlbnRNaWRpUGF0Y2g7CisKKwlpbnQgbGFzdF9wbGF5YmFuaywgbGFzdF9yZWNiYW5rOworCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqcGxheWJhY2tfc3Vic3RyZWFtOworCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqY2FwdHVyZV9zdWJzdHJlYW07CisKK307CisKK3ZvaWQgc25kX21zbmRfaW5pdF9xdWV1ZSh2b2lkICpiYXNlLCBpbnQgc3RhcnQsIGludCBzaXplKTsKKworaW50IHNuZF9tc25kX3NlbmRfZHNwX2NtZChzdHJ1Y3Qgc25kX21zbmQgKmNoaXAsIHU4IGNtZCk7CitpbnQgc25kX21zbmRfc2VuZF93b3JkKHN0cnVjdCBzbmRfbXNuZCAqY2hpcCwKKwkJCSAgIHVuc2lnbmVkIGNoYXIgaGlnaCwKKwkJCSAgIHVuc2lnbmVkIGNoYXIgbWlkLAorCQkJICAgdW5zaWduZWQgY2hhciBsb3cpOworaW50IHNuZF9tc25kX3VwbG9hZF9ob3N0KHN0cnVjdCBzbmRfbXNuZCAqY2hpcCwKKwkJCSAgICAgY29uc3QgdTggKmJpbiwgaW50IGxlbik7CitpbnQgc25kX21zbmRfZW5hYmxlX2lycShzdHJ1Y3Qgc25kX21zbmQgKmNoaXApOworaW50IHNuZF9tc25kX2Rpc2FibGVfaXJxKHN0cnVjdCBzbmRfbXNuZCAqY2hpcCk7Cit2b2lkIHNuZF9tc25kX2RzcF9oYWx0KHN0cnVjdCBzbmRfbXNuZCAqY2hpcCwgc3RydWN0IGZpbGUgKmZpbGUpOworaW50IHNuZF9tc25kX0RBUFEoc3RydWN0IHNuZF9tc25kICpjaGlwLCBpbnQgc3RhcnQpOworaW50IHNuZF9tc25kX0RBUlEoc3RydWN0IHNuZF9tc25kICpjaGlwLCBpbnQgc3RhcnQpOworaW50IHNuZF9tc25kX3BjbShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIGludCBkZXZpY2UsIHN0cnVjdCBzbmRfcGNtICoqcnBjbSk7CisKK2ludCBzbmRfbXNuZG1pZGlfbmV3KHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgaW50IGRldmljZSk7Cit2b2lkIHNuZF9tc25kbWlkaV9pbnB1dF9yZWFkKHZvaWQgKm1wdSk7CisKK3ZvaWQgc25kX21zbmRtaXhfc2V0dXAoc3RydWN0IHNuZF9tc25kICpjaGlwKTsKK2ludCBfX2RldmluaXQgc25kX21zbmRtaXhfbmV3KHN0cnVjdCBzbmRfY2FyZCAqY2FyZCk7CitpbnQgc25kX21zbmRtaXhfZm9yY2VfcmVjc3JjKHN0cnVjdCBzbmRfbXNuZCAqY2hpcCwgaW50IHJlY3NyYyk7CisjZW5kaWYgLyogX19NU05EX0ggKi8KZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9tc25kL21zbmRfY2xhc3NpYy5jIGIvc291bmQvaXNhL21zbmQvbXNuZF9jbGFzc2ljLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2IyM2EwOQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL2lzYS9tc25kL21zbmRfY2xhc3NpYy5jCkBAIC0wLDAgKzEsMyBAQAorLyogVGhlIHdvcmsgaXMgaW4gbXNuZF9waW5uYWNsZS5jLCBqdXN0IGRlZmluZSBNU05EX0NMQVNTSUMgYmVmb3JlIGl0LiAqLworI2RlZmluZSBNU05EX0NMQVNTSUMKKyNpbmNsdWRlICJtc25kX3Bpbm5hY2xlLmMiCmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvbXNuZC9tc25kX2NsYXNzaWMuaCBiL3NvdW5kL2lzYS9tc25kL21zbmRfY2xhc3NpYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxOGQ1ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9pc2EvbXNuZC9tc25kX2NsYXNzaWMuaApAQCAtMCwwICsxLDEyOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIG1zbmRfY2xhc3NpYy5oCisgKgorICogVHVydGxlIEJlYWNoIE11bHRpU291bmQgU291bmQgQ2FyZCBEcml2ZXIgZm9yIExpbnV4CisgKgorICogU29tZSBwYXJ0cyBvZiB0aGlzIGhlYWRlciBmaWxlIHdlcmUgZGVyaXZlZCBmcm9tIHRoZSBUdXJ0bGUgQmVhY2gKKyAqIE11bHRpU291bmQgRHJpdmVyIERldmVsb3BtZW50IEtpdC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggQW5kcmV3IFZlbGlhdGgKKyAqIENvcHlyaWdodCAoQykgMTk5MyBUdXJ0bGUgQmVhY2ggU3lzdGVtcywgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19NU05EX0NMQVNTSUNfSAorI2RlZmluZSBfX01TTkRfQ0xBU1NJQ19ICisKKyNkZWZpbmUgRFNQX05VTUlPCQkJCTB4MTAKKworI2RlZmluZQlIUF9NRU1NCQkJCQkweDA4CisKKyNkZWZpbmUJSFBfQklUTQkJCQkJMHgwRQorI2RlZmluZQlIUF9XQUlUCQkJCQkweDBECisjZGVmaW5lCUhQX0RTUFIJCQkJCTB4MEEKKyNkZWZpbmUJSFBfUFJPUgkJCQkJMHgwQgorI2RlZmluZQlIUF9CTEtTCQkJCQkweDBDCisKKyNkZWZpbmUJSFBQUk9SRVNFVF9PRkYJCQkJMAorI2RlZmluZSBIUFBST1JFU0VUX09OCQkJCTEKKworI2RlZmluZSBIUERTUFJFU0VUX09GRgkJCQkwCisjZGVmaW5lIEhQRFNQUkVTRVRfT04JCQkJMQorCisjZGVmaW5lIEhQQkxLU0VMXzAJCQkJMAorI2RlZmluZSBIUEJMS1NFTF8xCQkJCTEKKworI2RlZmluZSBIUFdBSVRTVEFURV8wCQkJCTAKKyNkZWZpbmUgSFBXQUlUU1RBVEVfMQkJCQkxCisKKyNkZWZpbmUgSFBCSVRNT0RFXzE2CQkJCTAKKyNkZWZpbmUgSFBCSVRNT0RFXzgJCQkJMQorCisjZGVmaW5lCUhJRFNQX0lOVF9QTEFZX1VOREVSCQkJMHgwMAorI2RlZmluZQlISURTUF9JTlRfUkVDT1JEX09WRVIJCQkweDAxCisjZGVmaW5lCUhJRFNQX0lOUFVUX0NMSVBQSU5HCQkJMHgwMgorI2RlZmluZQlISURTUF9NSURJX0lOX09WRVIJCQkweDEwCisjZGVmaW5lCUhJRFNQX01JRElfT1ZFUlJVTl9FUlIgIDB4MTMKKworI2RlZmluZSBUSU1FX1BST19SRVNFVF9ET05FCQkJMHgwMjhBCisjZGVmaW5lIFRJTUVfUFJPX1NZU0VYCQkJCTB4MDA0MAorI2RlZmluZSBUSU1FX1BST19SRVNFVAkJCQkweDAwMzIKKworI2RlZmluZSBEQVJfQlVGRl9TSVpFCQkJCTB4MjAwMAorCisjZGVmaW5lIE1JRFFfQlVGRl9TSVpFCQkJCTB4MjAwCisjZGVmaW5lIERTUFFfQlVGRl9TSVpFCQkJCTB4NDAKKworI2RlZmluZSBEU1BRX0RBVEFfQlVGRgkJCQkweDcyNjAKKworI2RlZmluZSBNT1BfU1lOVEgJCQkJMHgxMAorI2RlZmluZSBNT1BfRVhUT1VUCQkJCTB4MzIKKyNkZWZpbmUgTU9QX0VYVFRIUlUJCQkJMHgwMgorI2RlZmluZSBNT1BfT1VUTUFTSwkJCQkweDAxCisKKyNkZWZpbmUgTUlQX0VYVElOCQkJCTB4MDEKKyNkZWZpbmUgTUlQX1NZTlRICQkJCTB4MDAKKyNkZWZpbmUgTUlQX0lOTUFTSwkJCQkweDMyCisKKy8qIENsYXNzaWMgU01BIENvbW1vbiBEYXRhICovCisjZGVmaW5lIFNNQV93Q3VyclBsYXlCeXRlcwkJCTB4MDAwMAorI2RlZmluZSBTTUFfd0N1cnJSZWNvcmRCeXRlcwkJCTB4MDAwMgorI2RlZmluZSBTTUFfd0N1cnJQbGF5Vm9sTGVmdAkJCTB4MDAwNAorI2RlZmluZSBTTUFfd0N1cnJQbGF5Vm9sUmlnaHQJCQkweDAwMDYKKyNkZWZpbmUgU01BX3dDdXJySW5Wb2xMZWZ0CQkJMHgwMDA4CisjZGVmaW5lIFNNQV93Q3VyckluVm9sUmlnaHQJCQkweDAwMGEKKyNkZWZpbmUgU01BX3dVc2VyXzMJCQkJMHgwMDBjCisjZGVmaW5lIFNNQV93VXNlcl80CQkJCTB4MDAwZQorI2RlZmluZSBTTUFfZHdVc2VyXzUJCQkJMHgwMDEwCisjZGVmaW5lIFNNQV9kd1VzZXJfNgkJCQkweDAwMTQKKyNkZWZpbmUgU01BX3dVc2VyXzcJCQkJMHgwMDE4CisjZGVmaW5lIFNNQV93UmVzZXJ2ZWRfQQkJCQkweDAwMWEKKyNkZWZpbmUgU01BX3dSZXNlcnZlZF9CCQkJCTB4MDAxYworI2RlZmluZSBTTUFfd1Jlc2VydmVkX0MJCQkJMHgwMDFlCisjZGVmaW5lIFNNQV93UmVzZXJ2ZWRfRAkJCQkweDAwMjAKKyNkZWZpbmUgU01BX3dSZXNlcnZlZF9FCQkJCTB4MDAyMgorI2RlZmluZSBTTUFfd1Jlc2VydmVkX0YJCQkJMHgwMDI0CisjZGVmaW5lIFNNQV93UmVzZXJ2ZWRfRwkJCQkweDAwMjYKKyNkZWZpbmUgU01BX3dSZXNlcnZlZF9ICQkJCTB4MDAyOAorI2RlZmluZSBTTUFfd0N1cnJEU1BTdGF0dXNGbGFncwkJCTB4MDAyYQorI2RlZmluZSBTTUFfd0N1cnJIb3N0U3RhdHVzRmxhZ3MJCTB4MDAyYworI2RlZmluZSBTTUFfd0N1cnJJbnB1dFRhZ0JpdHMJCQkweDAwMmUKKyNkZWZpbmUgU01BX3dDdXJyTGVmdFBlYWsJCQkweDAwMzAKKyNkZWZpbmUgU01BX3dDdXJyUmlnaHRQZWFrCQkJMHgwMDMyCisjZGVmaW5lIFNNQV93RXh0RFNQYml0cwkJCQkweDAwMzQKKyNkZWZpbmUgU01BX2JFeHRIb3N0Yml0cwkJCTB4MDAzNgorI2RlZmluZSBTTUFfYkJvYXJkTGV2ZWwJCQkJMHgwMDM3CisjZGVmaW5lIFNNQV9iSW5Qb3RQb3NSaWdodAkJCTB4MDAzOAorI2RlZmluZSBTTUFfYkluUG90UG9zTGVmdAkJCTB4MDAzOQorI2RlZmluZSBTTUFfYkF1eFBvdFBvc1JpZ2h0CQkJMHgwMDNhCisjZGVmaW5lIFNNQV9iQXV4UG90UG9zTGVmdAkJCTB4MDAzYgorI2RlZmluZSBTTUFfd0N1cnJNYXN0Vm9sTGVmdAkJCTB4MDAzYworI2RlZmluZSBTTUFfd0N1cnJNYXN0Vm9sUmlnaHQJCQkweDAwM2UKKyNkZWZpbmUgU01BX2JVc2VyXzEyCQkJCTB4MDA0MAorI2RlZmluZSBTTUFfYlVzZXJfMTMJCQkJMHgwMDQxCisjZGVmaW5lIFNNQV93VXNlcl8xNAkJCQkweDAwNDIKKyNkZWZpbmUgU01BX3dVc2VyXzE1CQkJCTB4MDA0NAorI2RlZmluZSBTTUFfd0NhbEZyZXFBdG9ECQkJMHgwMDQ2CisjZGVmaW5lIFNNQV93VXNlcl8xNgkJCQkweDAwNDgKKyNkZWZpbmUgU01BX3dVc2VyXzE3CQkJCTB4MDA0YQorI2RlZmluZSBTTUFfX3NpemUJCQkJMHgwMDRjCisKKyNkZWZpbmUgSU5JVENPREVGSUxFCQkidHVydGxlYmVhY2gvbXNuZGluaXQuYmluIgorI2RlZmluZSBQRVJNQ09ERUZJTEUJCSJ0dXJ0bGViZWFjaC9tc25kcGVybS5iaW4iCisjZGVmaW5lIExPTkdOQU1FCQkiTXVsdGlTb3VuZCAoQ2xhc3NpYy9Nb250ZXJleS9UYWhpdGkpIgorCisjZW5kaWYgLyogX19NU05EX0NMQVNTSUNfSCAqLwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL21zbmQvbXNuZF9taWRpLmMgYi9zb3VuZC9pc2EvbXNuZC9tc25kX21pZGkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjlhYTRjCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvaXNhL21zbmQvbXNuZF9taWRpLmMKQEAgLTAsMCArMSwxODAgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSBieSBKYXJvc2xhdiBLeXNlbGEgPHBlcmV4QHBlcmV4LmN6PgorICogIENvcHlyaWdodCAoYykgMjAwOSBieSBLcnp5c3p0b2YgSGVsdAorICogIFJvdXRpbmVzIGZvciBjb250cm9sIG9mIE1QVS00MDEgaW4gVUFSVCBtb2RlCisgKgorICogIE1QVS00MDEgc3VwcG9ydHMgVUFSVCBtb2RlIHdoaWNoIGlzIG5vdCBjYXBhYmxlIGdlbmVyYXRlIHRyYW5zbWl0CisgKiAgaW50ZXJydXB0cyB0aHVzIG91dHB1dCBpcyBkb25lIHZpYSBwb2xsaW5nLiBBbHNvLCBpZiBpcnEgPCAwLCB0aGVuCisgKiAgaW5wdXQgaXMgZG9uZSBhbHNvIHZpYSBwb2xsaW5nLiBEbyBub3QgZXhwZWN0IGdvb2QgcGVyZm9ybWFuY2UuCisgKgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9yYXdtaWRpLmg+CisKKyNpbmNsdWRlICJtc25kLmgiCisKKyNkZWZpbmUgTVNORE1JRElfTU9ERV9CSVRfSU5QVVQJCTAKKyNkZWZpbmUgTVNORE1JRElfTU9ERV9CSVRfT1VUUFVUCQkxCisjZGVmaW5lIE1TTkRNSURJX01PREVfQklUX0lOUFVUX1RSSUdHRVIJMgorI2RlZmluZSBNU05ETUlESV9NT0RFX0JJVF9PVVRQVVRfVFJJR0dFUgkzCisKK3N0cnVjdCBzbmRfbXNuZG1pZGkgeworCXN0cnVjdCBzbmRfbXNuZCAqZGV2OworCisJdW5zaWduZWQgbG9uZyBtb2RlOwkJLyogTVNORE1JRElfTU9ERV9YWFhYICovCisKKwlzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICpzdWJzdHJlYW1faW5wdXQ7CisKKwlzcGlubG9ja190IGlucHV0X2xvY2s7Cit9OworCisvKgorICogaW5wdXQvb3V0cHV0IG9wZW4vY2xvc2UgLSBwcm90ZWN0ZWQgYnkgb3Blbl9tdXRleCBpbiByYXdtaWRpLmMKKyAqLworc3RhdGljIGludCBzbmRfbXNuZG1pZGlfaW5wdXRfb3BlbihzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9tc25kbWlkaSAqbXB1OworCisJc25kX3ByaW50ZGQoInNuZF9tc25kbWlkaV9pbnB1dF9vcGVuKClcbiIpOworCisJbXB1ID0gc3Vic3RyZWFtLT5ybWlkaS0+cHJpdmF0ZV9kYXRhOworCisJbXB1LT5zdWJzdHJlYW1faW5wdXQgPSBzdWJzdHJlYW07CisKKwlzbmRfbXNuZF9lbmFibGVfaXJxKG1wdS0+ZGV2KTsKKworCXNuZF9tc25kX3NlbmRfZHNwX2NtZChtcHUtPmRldiwgSERFWF9NSURJX0lOX1NUQVJUKTsKKwlzZXRfYml0KE1TTkRNSURJX01PREVfQklUX0lOUFVULCAmbXB1LT5tb2RlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfbXNuZG1pZGlfaW5wdXRfY2xvc2Uoc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfbXNuZG1pZGkgKm1wdTsKKworCW1wdSA9IHN1YnN0cmVhbS0+cm1pZGktPnByaXZhdGVfZGF0YTsKKwlzbmRfbXNuZF9zZW5kX2RzcF9jbWQobXB1LT5kZXYsIEhERVhfTUlESV9JTl9TVE9QKTsKKwljbGVhcl9iaXQoTVNORE1JRElfTU9ERV9CSVRfSU5QVVQsICZtcHUtPm1vZGUpOworCW1wdS0+c3Vic3RyZWFtX2lucHV0ID0gTlVMTDsKKwlzbmRfbXNuZF9kaXNhYmxlX2lycShtcHUtPmRldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNuZF9tc25kbWlkaV9pbnB1dF9kcm9wKHN0cnVjdCBzbmRfbXNuZG1pZGkgKm1wdSkKK3sKKwl1MTYgdGFpbDsKKworCXRhaWwgPSByZWFkdyhtcHUtPmRldi0+TUlEUSArIEpRU193VGFpbCk7CisJd3JpdGV3KHRhaWwsIG1wdS0+ZGV2LT5NSURRICsgSlFTX3dIZWFkKTsKK30KKworLyoKKyAqIHRyaWdnZXIgaW5wdXQKKyAqLworc3RhdGljIHZvaWQgc25kX21zbmRtaWRpX2lucHV0X3RyaWdnZXIoc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCQlpbnQgdXApCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3Qgc25kX21zbmRtaWRpICptcHU7CisKKwlzbmRfcHJpbnRkZCgic25kX21zbmRtaWRpX2lucHV0X3RyaWdnZXIoLCAlaSlcbiIsIHVwKTsKKworCW1wdSA9IHN1YnN0cmVhbS0+cm1pZGktPnByaXZhdGVfZGF0YTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbXB1LT5pbnB1dF9sb2NrLCBmbGFncyk7CisJaWYgKHVwKSB7CisJCWlmICghdGVzdF9hbmRfc2V0X2JpdChNU05ETUlESV9NT0RFX0JJVF9JTlBVVF9UUklHR0VSLAorCQkJCSAgICAgICZtcHUtPm1vZGUpKQorCQkJc25kX21zbmRtaWRpX2lucHV0X2Ryb3AobXB1KTsKKwl9IGVsc2UgeworCQljbGVhcl9iaXQoTVNORE1JRElfTU9ERV9CSVRfSU5QVVRfVFJJR0dFUiwgJm1wdS0+bW9kZSk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1wdS0+aW5wdXRfbG9jaywgZmxhZ3MpOworCWlmICh1cCkKKwkJc25kX21zbmRtaWRpX2lucHV0X3JlYWQobXB1KTsKK30KKwordm9pZCBzbmRfbXNuZG1pZGlfaW5wdXRfcmVhZCh2b2lkICptcHV2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHNuZF9tc25kbWlkaSAqbXB1ID0gbXB1djsKKwl2b2lkICpwd01JRFFEYXRhID0gbXB1LT5kZXYtPm1hcHBlZGJhc2UgKyBNSURRX0RBVEFfQlVGRjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZtcHUtPmlucHV0X2xvY2ssIGZsYWdzKTsKKwl3aGlsZSAocmVhZHcobXB1LT5kZXYtPk1JRFEgKyBKUVNfd1RhaWwpICE9CisJICAgICAgIHJlYWR3KG1wdS0+ZGV2LT5NSURRICsgSlFTX3dIZWFkKSkgeworCQl1MTYgd1RtcCwgdmFsOworCQl2YWwgPSByZWFkdyhwd01JRFFEYXRhICsgMiAqIHJlYWR3KG1wdS0+ZGV2LT5NSURRICsgSlFTX3dIZWFkKSk7CisKKwkJCWlmICh0ZXN0X2JpdChNU05ETUlESV9NT0RFX0JJVF9JTlBVVF9UUklHR0VSLAorCQkJCSAgICAgJm1wdS0+bW9kZSkpCisJCQkJc25kX3Jhd21pZGlfcmVjZWl2ZShtcHUtPnN1YnN0cmVhbV9pbnB1dCwKKwkJCQkJCSAgICAodW5zaWduZWQgY2hhciAqKSZ2YWwsIDEpOworCisJCXdUbXAgPSByZWFkdyhtcHUtPmRldi0+TUlEUSArIEpRU193SGVhZCkgKyAxOworCQlpZiAod1RtcCA+IHJlYWR3KG1wdS0+ZGV2LT5NSURRICsgSlFTX3dTaXplKSkKKwkJCXdyaXRldygwLCAgbXB1LT5kZXYtPk1JRFEgKyBKUVNfd0hlYWQpOworCQllbHNlCisJCQl3cml0ZXcod1RtcCwgIG1wdS0+ZGV2LT5NSURRICsgSlFTX3dIZWFkKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXB1LT5pbnB1dF9sb2NrLCBmbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MKHNuZF9tc25kbWlkaV9pbnB1dF9yZWFkKTsKKworc3RhdGljIHN0cnVjdCBzbmRfcmF3bWlkaV9vcHMgc25kX21zbmRtaWRpX2lucHV0ID0geworCS5vcGVuID0JCXNuZF9tc25kbWlkaV9pbnB1dF9vcGVuLAorCS5jbG9zZSA9CXNuZF9tc25kbWlkaV9pbnB1dF9jbG9zZSwKKwkudHJpZ2dlciA9CXNuZF9tc25kbWlkaV9pbnB1dF90cmlnZ2VyLAorfTsKKworc3RhdGljIHZvaWQgc25kX21zbmRtaWRpX2ZyZWUoc3RydWN0IHNuZF9yYXdtaWRpICpybWlkaSkKK3sKKwlzdHJ1Y3Qgc25kX21zbmRtaWRpICptcHUgPSBybWlkaS0+cHJpdmF0ZV9kYXRhOworCWtmcmVlKG1wdSk7Cit9CisKK2ludCBzbmRfbXNuZG1pZGlfbmV3KHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgaW50IGRldmljZSkKK3sKKwlzdHJ1Y3Qgc25kX21zbmQgKmNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9tc25kbWlkaSAqbXB1OworCXN0cnVjdCBzbmRfcmF3bWlkaSAqcm1pZGk7CisJaW50IGVycjsKKworCWVyciA9IHNuZF9yYXdtaWRpX25ldyhjYXJkLCAiTVNORC1NSURJIiwgZGV2aWNlLCAxLCAxLCAmcm1pZGkpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCW1wdSA9IGtjYWxsb2MoMSwgc2l6ZW9mKCptcHUpLCBHRlBfS0VSTkVMKTsKKwlpZiAobXB1ID09IE5VTEwpIHsKKwkJc25kX2RldmljZV9mcmVlKGNhcmQsIHJtaWRpKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCW1wdS0+ZGV2ID0gY2hpcDsKKwljaGlwLT5tc25kbWlkaV9tcHUgPSBtcHU7CisJcm1pZGktPnByaXZhdGVfZGF0YSA9IG1wdTsKKwlybWlkaS0+cHJpdmF0ZV9mcmVlID0gc25kX21zbmRtaWRpX2ZyZWU7CisJc3Bpbl9sb2NrX2luaXQoJm1wdS0+aW5wdXRfbG9jayk7CisJc3RyY3B5KHJtaWRpLT5uYW1lLCAiTVNORCBNSURJIik7CisJc25kX3Jhd21pZGlfc2V0X29wcyhybWlkaSwgU05EUlZfUkFXTUlESV9TVFJFQU1fSU5QVVQsCisJCQkgICAgJnNuZF9tc25kbWlkaV9pbnB1dCk7CisJcm1pZGktPmluZm9fZmxhZ3MgfD0gU05EUlZfUkFXTUlESV9JTkZPX0lOUFVUOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL21zbmQvbXNuZF9waW5uYWNsZS5jIGIvc291bmQvaXNhL21zbmQvbXNuZF9waW5uYWNsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwYjZhYmQKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9pc2EvbXNuZC9tc25kX3Bpbm5hY2xlLmMKQEAgLTAsMCArMSwxMjM4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogTGludXggbXVsdGlzb3VuZCBwaW5uYWNsZS9maWppIGRyaXZlciBmb3IgQUxTQS4KKyAqCisgKiAyMDAyLzA2LzMwIEthcnN0ZW4gV2llc2U6CisgKglmb3Igbm93IHRoaXMgaXMgb25seSB1c2VkIHRvIGJ1aWxkIGEgcGlubmFjbGUgLyBmaWppIGRyaXZlci4KKyAqCXRoZSBPU1MgcGFyZW50IG9mIHRoaXMgY29kZSBpcyBkZXNpZ25lZCB0byBhbHNvIHN1cHBvcnQKKyAqCXRoZSBtdWx0aXNvdW5kIGNsYXNzaWMgdmlhIHRoZSBmaWxlIG1zbmRfY2xhc3NpYy5jLgorICoJdG8gbWFrZSBpdCBlYXNpZXIgZm9yIHNvbWUgYnJhdmUgaGVhcnQgdG8gaW1wbGVtdCBjbGFzc2ljCisgKglzdXBwb3J0IGluIGFsc2EsIGkgbGVmdCBhbGwgdGhlIE1TTkRfQ0xBU1NJQyB0b2tlbnMgaW4gdGhpcyBmaWxlLgorICoJYnV0IGZvciBub3cgdGhpcyB1bnRlc3RlZCAmIHVuZG9uZS4KKyAqCisgKgorICogcmlwcGVkIGZyb20gbGludXgga2VybmVsIDIuNC4xOCBieSBLYXJzdGVuIFdpZXNlLgorICoKKyAqIHRoZSBmb2xsb3dpbmcgaXMgYSBjb3B5IG9mIHRoZSAyLjQuMTggT1NTIEZSRUUgZmlsZS1oZWFkaW5nIGNvbW1lbnQ6CisgKgorICogVHVydGxlIEJlYWNoIE11bHRpU291bmQgU291bmQgQ2FyZCBEcml2ZXIgZm9yIExpbnV4CisgKiBtc25kX3Bpbm5hY2xlLmMgLyBtc25kX2NsYXNzaWMuYworICoKKyAqIC0tIElmIE1TTkRfQ0xBU1NJQyBpcyBkZWZpbmVkOgorICoKKyAqICAgICAtPiBkcml2ZXIgZm9yIFR1cnRsZSBCZWFjaCBDbGFzc2ljL01vbnRlcmV5L1RhaGl0aQorICoKKyAqIC0tIEVsc2UKKyAqCisgKiAgICAgLT4gZHJpdmVyIGZvciBUdXJ0bGUgQmVhY2ggUGlubmFjbGUvRmlqaQorICoKKyAqIDEyLTMtMjAwMCAgTW9kaWZpZWQgSU8gcG9ydCB2YWxpZGF0aW9uICBTdGV2ZSBTeWNhbW9yZQorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCBBbmRyZXcgVmVsaWF0aAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lzYS5oPgorI2luY2x1ZGUgPGxpbnV4L2lzYXBucC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgorI2luY2x1ZGUgPHNvdW5kL2Fzb3VuZC5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL21wdTQwMS5oPgorCisjaWZkZWYgTVNORF9DTEFTU0lDCisjIGlmbmRlZiBfX2FscGhhX18KKyMgIGRlZmluZSBTTE9XSU8KKyMgZW5kaWYKKyNlbmRpZgorI2luY2x1ZGUgIm1zbmQuaCIKKyNpZmRlZiBNU05EX0NMQVNTSUMKKyMgIGluY2x1ZGUgIm1zbmRfY2xhc3NpYy5oIgorIyAgZGVmaW5lIExPR05BTUUJCQkibXNuZF9jbGFzc2ljIgorI2Vsc2UKKyMgIGluY2x1ZGUgIm1zbmRfcGlubmFjbGUuaCIKKyMgIGRlZmluZSBMT0dOQU1FCQkJInNuZF9tc25kX3Bpbm5hY2xlIgorI2VuZGlmCisKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBzZXRfZGVmYXVsdF9hdWRpb19wYXJhbWV0ZXJzKHN0cnVjdCBzbmRfbXNuZCAqY2hpcCkKK3sKKwljaGlwLT5wbGF5X3NhbXBsZV9zaXplID0gREVGU0FNUExFU0laRTsKKwljaGlwLT5wbGF5X3NhbXBsZV9yYXRlID0gREVGU0FNUExFUkFURTsKKwljaGlwLT5wbGF5X2NoYW5uZWxzID0gREVGQ0hBTk5FTFM7CisJY2hpcC0+Y2FwdHVyZV9zYW1wbGVfc2l6ZSA9IERFRlNBTVBMRVNJWkU7CisJY2hpcC0+Y2FwdHVyZV9zYW1wbGVfcmF0ZSA9IERFRlNBTVBMRVJBVEU7CisJY2hpcC0+Y2FwdHVyZV9jaGFubmVscyA9IERFRkNIQU5ORUxTOworfQorCitzdGF0aWMgdm9pZCBzbmRfbXNuZF9ldmFsX2RzcF9tc2coc3RydWN0IHNuZF9tc25kICpjaGlwLCB1MTYgd01lc3NhZ2UpCit7CisJc3dpdGNoIChISUJZVEUod01lc3NhZ2UpKSB7CisJY2FzZSBISU1UX1BMQVlfRE9ORTogeworCQlpZiAoY2hpcC0+YmFua3NQbGF5ZWQgPCAzKQorCQkJc25kX3ByaW50ZGQoIiUwOFg6IEhJTVRfUExBWV9ET05FOiAlaVxuIiwKKwkJCQkodW5zaWduZWQpamlmZmllcywgTE9CWVRFKHdNZXNzYWdlKSk7CisKKwkJaWYgKGNoaXAtPmxhc3RfcGxheWJhbmsgPT0gTE9CWVRFKHdNZXNzYWdlKSkgeworCQkJc25kX3ByaW50ZGQoImNoaXAubGFzdF9wbGF5YmFuayA9PSBMT0JZVEUod01lc3NhZ2UpXG4iKTsKKwkJCWJyZWFrOworCQl9CisJCWNoaXAtPmJhbmtzUGxheWVkKys7CisKKwkJaWYgKHRlc3RfYml0KEZfV1JJVElORywgJmNoaXAtPmZsYWdzKSkKKwkJCXNuZF9tc25kX0RBUFEoY2hpcCwgMCk7CisKKwkJY2hpcC0+bGFzdF9wbGF5YmFuayA9IExPQllURSh3TWVzc2FnZSk7CisJCWNoaXAtPnBsYXlETUFQb3MgKz0gY2hpcC0+cGxheV9wZXJpb2RfYnl0ZXM7CisJCWlmIChjaGlwLT5wbGF5RE1BUG9zID4gY2hpcC0+cGxheUxpbWl0KQorCQkJY2hpcC0+cGxheURNQVBvcyA9IDA7CisJCXNuZF9wY21fcGVyaW9kX2VsYXBzZWQoY2hpcC0+cGxheWJhY2tfc3Vic3RyZWFtKTsKKworCQlicmVhazsKKwl9CisJY2FzZSBISU1UX1JFQ09SRF9ET05FOgorCQlpZiAoY2hpcC0+bGFzdF9yZWNiYW5rID09IExPQllURSh3TWVzc2FnZSkpCisJCQlicmVhazsKKwkJY2hpcC0+bGFzdF9yZWNiYW5rID0gTE9CWVRFKHdNZXNzYWdlKTsKKwkJY2hpcC0+Y2FwdHVyZURNQVBvcyArPSBjaGlwLT5jYXB0dXJlUGVyaW9kQnl0ZXM7CisJCWlmIChjaGlwLT5jYXB0dXJlRE1BUG9zID4gKGNoaXAtPmNhcHR1cmVMaW1pdCkpCisJCQljaGlwLT5jYXB0dXJlRE1BUG9zID0gMDsKKworCQlpZiAodGVzdF9iaXQoRl9SRUFESU5HLCAmY2hpcC0+ZmxhZ3MpKQorCQkJc25kX21zbmRfREFSUShjaGlwLCBjaGlwLT5sYXN0X3JlY2JhbmspOworCisJCXNuZF9wY21fcGVyaW9kX2VsYXBzZWQoY2hpcC0+Y2FwdHVyZV9zdWJzdHJlYW0pOworCQlicmVhazsKKworCWNhc2UgSElNVF9EU1A6CisJCXN3aXRjaCAoTE9CWVRFKHdNZXNzYWdlKSkgeworI2lmbmRlZiBNU05EX0NMQVNTSUMKKwkJY2FzZSBISURTUF9QTEFZX1VOREVSOgorI2VuZGlmCisJCWNhc2UgSElEU1BfSU5UX1BMQVlfVU5ERVI6CisJCQlzbmRfcHJpbnRkKEtFUk5fV0FSTklORyBMT0dOQU1FICI6IFBsYXkgdW5kZXJmbG93ICVpXG4iLAorCQkJCWNoaXAtPmJhbmtzUGxheWVkKTsKKwkJCWlmIChjaGlwLT5iYW5rc1BsYXllZCA+IDIpCisJCQkJY2xlYXJfYml0KEZfV1JJVElORywgJmNoaXAtPmZsYWdzKTsKKwkJCWJyZWFrOworCisJCWNhc2UgSElEU1BfSU5UX1JFQ09SRF9PVkVSOgorCQkJc25kX3ByaW50ZChLRVJOX1dBUk5JTkcgTE9HTkFNRSAiOiBSZWNvcmQgb3ZlcmZsb3dcbiIpOworCQkJY2xlYXJfYml0KEZfUkVBRElORywgJmNoaXAtPmZsYWdzKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlzbmRfcHJpbnRkKEtFUk5fV0FSTklORyBMT0dOQU1FCisJCQkJICAgIjogRFNQIG1lc3NhZ2UgJWQgMHglMDJ4XG4iLAorCQkJCSAgIExPQllURSh3TWVzc2FnZSksIExPQllURSh3TWVzc2FnZSkpOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIEhJTVRfTUlESV9JTl9VQ0hBUjoKKwkJaWYgKGNoaXAtPm1zbmRtaWRpX21wdSkKKwkJCXNuZF9tc25kbWlkaV9pbnB1dF9yZWFkKGNoaXAtPm1zbmRtaWRpX21wdSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJc25kX3ByaW50ZChLRVJOX1dBUk5JTkcgTE9HTkFNRSAiOiBISU1UIG1lc3NhZ2UgJWQgMHglMDJ4XG4iLAorCQkJICAgSElCWVRFKHdNZXNzYWdlKSwgSElCWVRFKHdNZXNzYWdlKSk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIGlycXJldHVybl90IHNuZF9tc25kX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IHNuZF9tc25kICpjaGlwID0gZGV2X2lkOworCXZvaWQgKnB3RFNQUURhdGEgPSBjaGlwLT5tYXBwZWRiYXNlICsgRFNQUV9EQVRBX0JVRkY7CisKKwkvKiBTZW5kIGFjayB0byBEU1AgKi8KKwkvKiBpbmIoY2hpcC0+aW8gKyBIUF9SWEwpOyAqLworCisJLyogRXZhbHVhdGUgcXVldWVkIERTUCBtZXNzYWdlcyAqLworCXdoaWxlIChyZWFkdyhjaGlwLT5EU1BRICsgSlFTX3dUYWlsKSAhPSByZWFkdyhjaGlwLT5EU1BRICsgSlFTX3dIZWFkKSkgeworCQl1MTYgd1RtcDsKKworCQlzbmRfbXNuZF9ldmFsX2RzcF9tc2coY2hpcCwKKwkJCXJlYWR3KHB3RFNQUURhdGEgKyAyICogcmVhZHcoY2hpcC0+RFNQUSArIEpRU193SGVhZCkpKTsKKworCQl3VG1wID0gcmVhZHcoY2hpcC0+RFNQUSArIEpRU193SGVhZCkgKyAxOworCQlpZiAod1RtcCA+IHJlYWR3KGNoaXAtPkRTUFEgKyBKUVNfd1NpemUpKQorCQkJd3JpdGV3KDAsIGNoaXAtPkRTUFEgKyBKUVNfd0hlYWQpOworCQllbHNlCisJCQl3cml0ZXcod1RtcCwgY2hpcC0+RFNQUSArIEpRU193SGVhZCk7CisJfQorCS8qIFNlbmQgYWNrIHRvIERTUCAqLworCWluYihjaGlwLT5pbyArIEhQX1JYTCk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisKK3N0YXRpYyBpbnQgc25kX21zbmRfcmVzZXRfZHNwKGxvbmcgaW8sIHVuc2lnbmVkIGNoYXIgKmluZm8pCit7CisJaW50IHRpbWVvdXQgPSAxMDA7CisKKwlvdXRiKEhQRFNQUkVTRVRfT04sIGlvICsgSFBfRFNQUik7CisJbXNsZWVwKDEpOworI2lmbmRlZiBNU05EX0NMQVNTSUMKKwlpZiAoaW5mbykKKwkJKmluZm8gPSBpbmIoaW8gKyBIUF9JTkZPKTsKKyNlbmRpZgorCW91dGIoSFBEU1BSRVNFVF9PRkYsIGlvICsgSFBfRFNQUik7CisJbXNsZWVwKDEpOworCXdoaWxlICh0aW1lb3V0LS0gPiAwKSB7CisJCWlmIChpbmIoaW8gKyBIUF9DVlIpID09IEhQX0NWUl9ERUYpCisJCQlyZXR1cm4gMDsKKwkJbXNsZWVwKDEpOworCX0KKwlzbmRfcHJpbnRrKEtFUk5fRVJSIExPR05BTUUgIjogQ2Fubm90IHJlc2V0IERTUFxuIik7CisKKwlyZXR1cm4gLUVJTzsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgc25kX21zbmRfcHJvYmUoc3RydWN0IHNuZF9jYXJkICpjYXJkKQoreworCXN0cnVjdCBzbmRfbXNuZCAqY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBjaGFyIGluZm87CisjaWZuZGVmIE1TTkRfQ0xBU1NJQworCWNoYXIgKnh2LCAqcmV2ID0gTlVMTDsKKwljaGFyICpwaW4gPSAiVEIgUGlubmFjbGUiLCAqZmlqaSA9ICJUQiBGaWppIjsKKwljaGFyICpwaW5maWppID0gIlRCIFBpbm5hY2xlL0ZpamkiOworI2VuZGlmCisKKwlpZiAoIXJlcXVlc3RfcmVnaW9uKGNoaXAtPmlvLCBEU1BfTlVNSU8sICJwcm9iaW5nIikpIHsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiBMT0dOQU1FICI6IEkvTyBwb3J0IGNvbmZsaWN0XG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKHNuZF9tc25kX3Jlc2V0X2RzcChjaGlwLT5pbywgJmluZm8pIDwgMCkgeworCQlyZWxlYXNlX3JlZ2lvbihjaGlwLT5pbywgRFNQX05VTUlPKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisjaWZkZWYgTVNORF9DTEFTU0lDCisJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgIkNsYXNzaWMvVGFoaXRpL01vbnRlcmV5Iik7CisJc3RyY3B5KGNhcmQtPmxvbmduYW1lLCAiVHVydGxlIEJlYWNoIE11bHRpc291bmQiKTsKKwlwcmludGsoS0VSTl9JTkZPIExPR05BTUUgIjogJXMsICIKKwkgICAgICAgIkkvTyAweCVseC0weCVseCwgSVJRICVkLCBtZW1vcnkgbWFwcGVkIHRvIDB4JWxYLTB4JWxYXG4iLAorCSAgICAgICBjYXJkLT5zaG9ydG5hbWUsCisJICAgICAgIGNoaXAtPmlvLCBjaGlwLT5pbyArIERTUF9OVU1JTyAtIDEsCisJICAgICAgIGNoaXAtPmlycSwKKwkgICAgICAgY2hpcC0+YmFzZSwgY2hpcC0+YmFzZSArIDB4N2ZmZik7CisjZWxzZQorCXN3aXRjaCAoaW5mbyA+PiA0KSB7CisJY2FzZSAweGY6CisJCXh2ID0gIjw9IDEuMTUiOworCQlicmVhazsKKwljYXNlIDB4MToKKwkJeHYgPSAiMS4xOC8xLjIiOworCQlicmVhazsKKwljYXNlIDB4MjoKKwkJeHYgPSAiMS4zIjsKKwkJYnJlYWs7CisJY2FzZSAweDM6CisJCXh2ID0gIjEuNCI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXh2ID0gInVua25vd24iOworCQlicmVhazsKKwl9CisKKwlzd2l0Y2ggKGluZm8gJiAweDcpIHsKKwljYXNlIDB4MDoKKwkJcmV2ID0gIkkiOworCQlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCBwaW4pOworCQlicmVhazsKKwljYXNlIDB4MToKKwkJcmV2ID0gIkYiOworCQlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCBwaW4pOworCQlicmVhazsKKwljYXNlIDB4MjoKKwkJcmV2ID0gIkciOworCQlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCBwaW4pOworCQlicmVhazsKKwljYXNlIDB4MzoKKwkJcmV2ID0gIkgiOworCQlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCBwaW4pOworCQlicmVhazsKKwljYXNlIDB4NDoKKwkJcmV2ID0gIkUiOworCQlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCBmaWppKTsKKwkJYnJlYWs7CisJY2FzZSAweDU6CisJCXJldiA9ICJDIjsKKwkJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgZmlqaSk7CisJCWJyZWFrOworCWNhc2UgMHg2OgorCQlyZXYgPSAiRCI7CisJCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsIGZpamkpOworCQlicmVhazsKKwljYXNlIDB4NzoKKwkJcmV2ID0gIkEtQiAoRmlqaSkgb3IgQS1FIChQaW5uYWNsZSkiOworCQlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCBwaW5maWppKTsKKwkJYnJlYWs7CisJfQorCXN0cmNweShjYXJkLT5sb25nbmFtZSwgIlR1cnRsZSBCZWFjaCBNdWx0aXNvdW5kIFBpbm5hY2xlIik7CisJcHJpbnRrKEtFUk5fSU5GTyBMT0dOQU1FICI6ICVzIHJldmlzaW9uICVzLCBYaWxpbnggdmVyc2lvbiAlcywgIgorCSAgICAgICAiSS9PIDB4JWx4LTB4JWx4LCBJUlEgJWQsIG1lbW9yeSBtYXBwZWQgdG8gMHglbFgtMHglbFhcbiIsCisJICAgICAgIGNhcmQtPnNob3J0bmFtZSwKKwkgICAgICAgcmV2LCB4diwKKwkgICAgICAgY2hpcC0+aW8sIGNoaXAtPmlvICsgRFNQX05VTUlPIC0gMSwKKwkgICAgICAgY2hpcC0+aXJxLAorCSAgICAgICBjaGlwLT5iYXNlLCBjaGlwLT5iYXNlICsgMHg3ZmZmKTsKKyNlbmRpZgorCisJcmVsZWFzZV9yZWdpb24oY2hpcC0+aW8sIERTUF9OVU1JTyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX21zbmRfaW5pdF9zbWEoc3RydWN0IHNuZF9tc25kICpjaGlwKQoreworCXN0YXRpYyBpbnQgaW5pdHRlZDsKKwl1MTYgbWFzdFZvbExlZnQsIG1hc3RWb2xSaWdodDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisjaWZkZWYgTVNORF9DTEFTU0lDCisJb3V0YihjaGlwLT5tZW1pZCwgY2hpcC0+aW8gKyBIUF9NRU1NKTsKKyNlbmRpZgorCW91dGIoSFBCTEtTRUxfMCwgY2hpcC0+aW8gKyBIUF9CTEtTKTsKKwkvKiBNb3Rvcm9sYSA1Nmsgc2hhcmVkIG1lbW9yeSBiYXNlICovCisJY2hpcC0+U01BID0gY2hpcC0+bWFwcGVkYmFzZSArIFNNQV9TVFJVQ1RfU1RBUlQ7CisKKwlpZiAoaW5pdHRlZCkgeworCQltYXN0Vm9sTGVmdCA9IHJlYWR3KGNoaXAtPlNNQSArIFNNQV93Q3Vyck1hc3RWb2xMZWZ0KTsKKwkJbWFzdFZvbFJpZ2h0ID0gcmVhZHcoY2hpcC0+U01BICsgU01BX3dDdXJyTWFzdFZvbFJpZ2h0KTsKKwl9IGVsc2UKKwkJbWFzdFZvbExlZnQgPSBtYXN0Vm9sUmlnaHQgPSAwOworCW1lbXNldF9pbyhjaGlwLT5tYXBwZWRiYXNlLCAwLCAweDgwMDApOworCisJLyogQ3JpdGljYWwgc2VjdGlvbjogYmFuayAxIGFjY2VzcyAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5sb2NrLCBmbGFncyk7CisJb3V0YihIUEJMS1NFTF8xLCBjaGlwLT5pbyArIEhQX0JMS1MpOworCW1lbXNldF9pbyhjaGlwLT5tYXBwZWRiYXNlLCAwLCAweDgwMDApOworCW91dGIoSFBCTEtTRUxfMCwgY2hpcC0+aW8gKyBIUF9CTEtTKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5sb2NrLCBmbGFncyk7CisKKwkvKiBEaWdpdGFsIGF1ZGlvIHBsYXkgcXVldWUgKi8KKwljaGlwLT5EQVBRID0gY2hpcC0+bWFwcGVkYmFzZSArIERBUFFfT0ZGU0VUOworCXNuZF9tc25kX2luaXRfcXVldWUoY2hpcC0+REFQUSwgREFQUV9EQVRBX0JVRkYsIERBUFFfQlVGRl9TSVpFKTsKKworCS8qIERpZ2l0YWwgYXVkaW8gcmVjb3JkIHF1ZXVlICovCisJY2hpcC0+REFSUSA9IGNoaXAtPm1hcHBlZGJhc2UgKyBEQVJRX09GRlNFVDsKKwlzbmRfbXNuZF9pbml0X3F1ZXVlKGNoaXAtPkRBUlEsIERBUlFfREFUQV9CVUZGLCBEQVJRX0JVRkZfU0laRSk7CisKKwkvKiBNSURJIG91dCBxdWV1ZSAqLworCWNoaXAtPk1PRFEgPSBjaGlwLT5tYXBwZWRiYXNlICsgTU9EUV9PRkZTRVQ7CisJc25kX21zbmRfaW5pdF9xdWV1ZShjaGlwLT5NT0RRLCBNT0RRX0RBVEFfQlVGRiwgTU9EUV9CVUZGX1NJWkUpOworCisJLyogTUlESSBpbiBxdWV1ZSAqLworCWNoaXAtPk1JRFEgPSBjaGlwLT5tYXBwZWRiYXNlICsgTUlEUV9PRkZTRVQ7CisJc25kX21zbmRfaW5pdF9xdWV1ZShjaGlwLT5NSURRLCBNSURRX0RBVEFfQlVGRiwgTUlEUV9CVUZGX1NJWkUpOworCisJLyogRFNQIC0+IGhvc3QgbWVzc2FnZSBxdWV1ZSAqLworCWNoaXAtPkRTUFEgPSBjaGlwLT5tYXBwZWRiYXNlICsgRFNQUV9PRkZTRVQ7CisJc25kX21zbmRfaW5pdF9xdWV1ZShjaGlwLT5EU1BRLCBEU1BRX0RBVEFfQlVGRiwgRFNQUV9CVUZGX1NJWkUpOworCisJLyogU2V0dXAgc29tZSBEU1AgdmFsdWVzICovCisjaWZuZGVmIE1TTkRfQ0xBU1NJQworCXdyaXRldygxLCBjaGlwLT5TTUEgKyBTTUFfd0N1cnJQbGF5Rm9ybWF0KTsKKwl3cml0ZXcoY2hpcC0+cGxheV9zYW1wbGVfc2l6ZSwgY2hpcC0+U01BICsgU01BX3dDdXJyUGxheVNhbXBsZVNpemUpOworCXdyaXRldyhjaGlwLT5wbGF5X2NoYW5uZWxzLCBjaGlwLT5TTUEgKyBTTUFfd0N1cnJQbGF5Q2hhbm5lbHMpOworCXdyaXRldyhjaGlwLT5wbGF5X3NhbXBsZV9yYXRlLCBjaGlwLT5TTUEgKyBTTUFfd0N1cnJQbGF5U2FtcGxlUmF0ZSk7CisjZW5kaWYKKwl3cml0ZXcoY2hpcC0+cGxheV9zYW1wbGVfcmF0ZSwgY2hpcC0+U01BICsgU01BX3dDYWxGcmVxQXRvRCk7CisJd3JpdGV3KG1hc3RWb2xMZWZ0LCBjaGlwLT5TTUEgKyBTTUFfd0N1cnJNYXN0Vm9sTGVmdCk7CisJd3JpdGV3KG1hc3RWb2xSaWdodCwgY2hpcC0+U01BICsgU01BX3dDdXJyTWFzdFZvbFJpZ2h0KTsKKyNpZm5kZWYgTVNORF9DTEFTU0lDCisJd3JpdGVsKDB4MDAwMTAwMDAsIGNoaXAtPlNNQSArIFNNQV9kd0N1cnJQbGF5UGl0Y2gpOworCXdyaXRlbCgweDAwMDAwMDAxLCBjaGlwLT5TTUEgKyBTTUFfZHdDdXJyUGxheVJhdGUpOworI2VuZGlmCisJd3JpdGV3KDB4MzAzLCBjaGlwLT5TTUEgKyBTTUFfd0N1cnJJbnB1dFRhZ0JpdHMpOworCisJaW5pdHRlZCA9IDE7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IHVwbG9hZF9kc3BfY29kZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpCit7CisJc3RydWN0IHNuZF9tc25kICpjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqaW5pdF9mdyA9IE5VTEwsICpwZXJtX2Z3ID0gTlVMTDsKKwlpbnQgZXJyOworCisJb3V0YihIUEJMS1NFTF8wLCBjaGlwLT5pbyArIEhQX0JMS1MpOworCisJZXJyID0gcmVxdWVzdF9maXJtd2FyZSgmaW5pdF9mdywgSU5JVENPREVGSUxFLCBjYXJkLT5kZXYpOworCWlmIChlcnIgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiBMT0dOQU1FICI6IEVycm9yIGxvYWRpbmcgIiBJTklUQ09ERUZJTEUpOworCQlnb3RvIGNsZWFudXAxOworCX0KKwllcnIgPSByZXF1ZXN0X2Zpcm13YXJlKCZwZXJtX2Z3LCBQRVJNQ09ERUZJTEUsIGNhcmQtPmRldik7CisJaWYgKGVyciA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSIExPR05BTUUgIjogRXJyb3IgbG9hZGluZyAiIFBFUk1DT0RFRklMRSk7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwltZW1jcHlfdG9pbyhjaGlwLT5tYXBwZWRiYXNlLCBwZXJtX2Z3LT5kYXRhLCBwZXJtX2Z3LT5zaXplKTsKKwlpZiAoc25kX21zbmRfdXBsb2FkX2hvc3QoY2hpcCwgaW5pdF9mdy0+ZGF0YSwgaW5pdF9mdy0+c2l6ZSkgPCAwKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgTE9HTkFNRSAiOiBFcnJvciB1cGxvYWRpbmcgdG8gRFNQXG4iKTsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBjbGVhbnVwOworCX0KKwlwcmludGsoS0VSTl9JTkZPIExPR05BTUUgIjogRFNQIGZpcm13YXJlIHVwbG9hZGVkXG4iKTsKKwllcnIgPSAwOworCitjbGVhbnVwOgorCXJlbGVhc2VfZmlybXdhcmUocGVybV9mdyk7CitjbGVhbnVwMToKKwlyZWxlYXNlX2Zpcm13YXJlKGluaXRfZncpOworCXJldHVybiBlcnI7Cit9CisKKyNpZmRlZiBNU05EX0NMQVNTSUMKK3N0YXRpYyB2b2lkIHJlc2V0X3Byb3RldXMoc3RydWN0IHNuZF9tc25kICpjaGlwKQoreworCW91dGIoSFBQUk9SRVNFVF9PTiwgY2hpcC0+aW8gKyBIUF9QUk9SKTsKKwltc2xlZXAoVElNRV9QUk9fUkVTRVQpOworCW91dGIoSFBQUk9SRVNFVF9PRkYsIGNoaXAtPmlvICsgSFBfUFJPUik7CisJbXNsZWVwKFRJTUVfUFJPX1JFU0VUX0RPTkUpOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgc25kX21zbmRfaW5pdGlhbGl6ZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpCit7CisJc3RydWN0IHNuZF9tc25kICpjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOworCWludCBlcnIsIHRpbWVvdXQ7CisKKyNpZmRlZiBNU05EX0NMQVNTSUMKKwlvdXRiKEhQV0FJVFNUQVRFXzAsIGNoaXAtPmlvICsgSFBfV0FJVCk7CisJb3V0YihIUEJJVE1PREVfMTYsIGNoaXAtPmlvICsgSFBfQklUTSk7CisKKwlyZXNldF9wcm90ZXVzKGNoaXApOworI2VuZGlmCisJZXJyID0gc25kX21zbmRfaW5pdF9zbWEoY2hpcCk7CisJaWYgKGVyciA8IDApIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyBMT0dOQU1FICI6IENhbm5vdCBpbml0aWFsaXplIFNNQVxuIik7CisJCXJldHVybiBlcnI7CisJfQorCisJZXJyID0gc25kX21zbmRfcmVzZXRfZHNwKGNoaXAtPmlvLCBOVUxMKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IHVwbG9hZF9kc3BfY29kZShjYXJkKTsKKwlpZiAoZXJyIDwgMCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HIExPR05BTUUgIjogQ2Fubm90IHVwbG9hZCBEU1AgY29kZVxuIik7CisJCXJldHVybiBlcnI7CisJfQorCisJdGltZW91dCA9IDIwMDsKKworCXdoaWxlIChyZWFkdyhjaGlwLT5tYXBwZWRiYXNlKSkgeworCQltc2xlZXAoMSk7CisJCWlmICghdGltZW91dC0tKSB7CisJCQlzbmRfcHJpbnRkKEtFUk5fRVJSIExPR05BTUUgIjogRFNQIHJlc2V0IHRpbWVvdXRcbiIpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKwl9CisKKwlzbmRfbXNuZG1peF9zZXR1cChjaGlwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfbXNuZF9kc3BfZnVsbF9yZXNldChzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpCit7CisJc3RydWN0IHNuZF9tc25kICpjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOworCWludCBydjsKKworCWlmICh0ZXN0X2JpdChGX1JFU0VUVElORywgJmNoaXAtPmZsYWdzKSB8fCArK2NoaXAtPm5yZXNldHMgPiAxMCkKKwkJcmV0dXJuIDA7CisKKwlzZXRfYml0KEZfUkVTRVRUSU5HLCAmY2hpcC0+ZmxhZ3MpOworCXNuZF9tc25kX2RzcF9oYWx0KGNoaXAsIE5VTEwpOwkvKiBVbmNvbmRpdGlvbmFsbHkgaGFsdCAqLworCisJcnYgPSBzbmRfbXNuZF9pbml0aWFsaXplKGNhcmQpOworCWlmIChydikKKwkJcHJpbnRrKEtFUk5fV0FSTklORyBMT0dOQU1FICI6IERTUCByZXNldCBmYWlsZWRcbiIpOworCXNuZF9tc25kbWl4X2ZvcmNlX3JlY3NyYyhjaGlwLCAwKTsKKwljbGVhcl9iaXQoRl9SRVNFVFRJTkcsICZjaGlwLT5mbGFncyk7CisJcmV0dXJuIHJ2OworfQorCitzdGF0aWMgaW50IHNuZF9tc25kX2Rldl9mcmVlKHN0cnVjdCBzbmRfZGV2aWNlICpkZXZpY2UpCit7CisJc25kX3ByaW50ZGQoInNuZF9tc25kX2NoaXBfZnJlZSgpXG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfbXNuZF9zZW5kX2RzcF9jbWRfY2hrKHN0cnVjdCBzbmRfbXNuZCAqY2hpcCwgdTggY21kKQoreworCWlmIChzbmRfbXNuZF9zZW5kX2RzcF9jbWQoY2hpcCwgY21kKSA9PSAwKQorCQlyZXR1cm4gMDsKKwlzbmRfbXNuZF9kc3BfZnVsbF9yZXNldChjaGlwLT5jYXJkKTsKKwlyZXR1cm4gc25kX21zbmRfc2VuZF9kc3BfY21kKGNoaXAsIGNtZCk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9tc25kX2NhbGlicmF0ZV9hZGMoc3RydWN0IHNuZF9tc25kICpjaGlwLCB1MTYgc3JhdGUpCit7CisJc25kX3ByaW50ZGQoInNuZF9tc25kX2NhbGlicmF0ZV9hZGMoJWkpXG4iLCBzcmF0ZSk7CisJd3JpdGV3KHNyYXRlLCBjaGlwLT5TTUEgKyBTTUFfd0NhbEZyZXFBdG9EKTsKKwlpZiAoY2hpcC0+Y2FsaWJyYXRlX3NpZ25hbCA9PSAwKQorCQl3cml0ZXcocmVhZHcoY2hpcC0+U01BICsgU01BX3dDdXJySG9zdFN0YXR1c0ZsYWdzKQorCQkgICAgICAgfCAweDAwMDEsIGNoaXAtPlNNQSArIFNNQV93Q3Vyckhvc3RTdGF0dXNGbGFncyk7CisJZWxzZQorCQl3cml0ZXcocmVhZHcoY2hpcC0+U01BICsgU01BX3dDdXJySG9zdFN0YXR1c0ZsYWdzKQorCQkgICAgICAgJiB+MHgwMDAxLCBjaGlwLT5TTUEgKyBTTUFfd0N1cnJIb3N0U3RhdHVzRmxhZ3MpOworCWlmIChzbmRfbXNuZF9zZW5kX3dvcmQoY2hpcCwgMCwgMCwgSERFWEFSX0NBTF9BX1RPX0QpID09IDAgJiYKKwkgICAgc25kX21zbmRfc2VuZF9kc3BfY21kX2NoayhjaGlwLCBIREVYX0FVWF9SRVEpID09IDApIHsKKwkJc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKG1zZWNzX3RvX2ppZmZpZXMoMzMzKSk7CisJCXJldHVybiAwOworCX0KKwlwcmludGsoS0VSTl9XQVJOSU5HIExPR05BTUUgIjogQURDIGNhbGlicmF0aW9uIGZhaWxlZFxuIik7CisJcmV0dXJuIC1FSU87Cit9CisKKy8qCisgKiBBTFNBIGNhbGxiYWNrIGZ1bmN0aW9uLCBjYWxsZWQgd2hlbiBhdHRlbXB0aW5nIHRvIG9wZW4gdGhlIE1JREkgZGV2aWNlLgorICovCitzdGF0aWMgaW50IHNuZF9tc25kX21wdTQwMV9vcGVuKHN0cnVjdCBzbmRfbXB1NDAxICptcHUpCit7CisJc25kX21zbmRfZW5hYmxlX2lycShtcHUtPnByaXZhdGVfZGF0YSk7CisJc25kX21zbmRfc2VuZF9kc3BfY21kKG1wdS0+cHJpdmF0ZV9kYXRhLCBIREVYX01JRElfSU5fU1RBUlQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzbmRfbXNuZF9tcHU0MDFfY2xvc2Uoc3RydWN0IHNuZF9tcHU0MDEgKm1wdSkKK3sKKwlzbmRfbXNuZF9zZW5kX2RzcF9jbWQobXB1LT5wcml2YXRlX2RhdGEsIEhERVhfTUlESV9JTl9TVE9QKTsKKwlzbmRfbXNuZF9kaXNhYmxlX2lycShtcHUtPnByaXZhdGVfZGF0YSk7Cit9CisKK3N0YXRpYyBsb25nIG1wdV9pb1tTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1BPUlQ7CitzdGF0aWMgaW50IG1wdV9pcnFbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9JUlE7CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9tc25kX2F0dGFjaChzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpCit7CisJc3RydWN0IHNuZF9tc25kICpjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOworCWludCBlcnI7CisJc3RhdGljIHN0cnVjdCBzbmRfZGV2aWNlX29wcyBvcHMgPSB7CisJCS5kZXZfZnJlZSA9ICAgICAgc25kX21zbmRfZGV2X2ZyZWUsCisJCX07CisKKwllcnIgPSByZXF1ZXN0X2lycShjaGlwLT5pcnEsIHNuZF9tc25kX2ludGVycnVwdCwgMCwgY2FyZC0+c2hvcnRuYW1lLAorCQkJICBjaGlwKTsKKwlpZiAoZXJyIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgTE9HTkFNRSAiOiBDb3VsZG4ndCBncmFiIElSUSAlZFxuIiwgY2hpcC0+aXJxKTsKKwkJcmV0dXJuIGVycjsKKwl9CisJcmVxdWVzdF9yZWdpb24oY2hpcC0+aW8sIERTUF9OVU1JTywgY2FyZC0+c2hvcnRuYW1lKTsKKworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKGNoaXAtPmJhc2UsIEJVRkZTSVpFLCBjYXJkLT5zaG9ydG5hbWUpKSB7CisJCXByaW50ayhLRVJOX0VSUiBMT0dOQU1FCisJCQkiOiB1bmFibGUgdG8gZ3JhYiBtZW1vcnkgcmVnaW9uIDB4JWx4LTB4JWx4XG4iLAorCQkJY2hpcC0+YmFzZSwgY2hpcC0+YmFzZSArIEJVRkZTSVpFIC0gMSk7CisJCXJlbGVhc2VfcmVnaW9uKGNoaXAtPmlvLCBEU1BfTlVNSU8pOworCQlmcmVlX2lycShjaGlwLT5pcnEsIGNoaXApOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwljaGlwLT5tYXBwZWRiYXNlID0gaW9yZW1hcF9ub2NhY2hlKGNoaXAtPmJhc2UsIDB4ODAwMCk7CisJaWYgKCFjaGlwLT5tYXBwZWRiYXNlKSB7CisJCXByaW50ayhLRVJOX0VSUiBMT0dOQU1FCisJCQkiOiB1bmFibGUgdG8gbWFwIG1lbW9yeSByZWdpb24gMHglbHgtMHglbHhcbiIsCisJCQljaGlwLT5iYXNlLCBjaGlwLT5iYXNlICsgQlVGRlNJWkUgLSAxKTsKKwkJZXJyID0gLUVJTzsKKwkJZ290byBlcnJfcmVsZWFzZV9yZWdpb247CisJfQorCisJZXJyID0gc25kX21zbmRfZHNwX2Z1bGxfcmVzZXQoY2FyZCk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZXJyX3JlbGVhc2VfcmVnaW9uOworCisJLyogUmVnaXN0ZXIgZGV2aWNlICovCisJZXJyID0gc25kX2RldmljZV9uZXcoY2FyZCwgU05EUlZfREVWX0xPV0xFVkVMLCBjaGlwLCAmb3BzKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnJfcmVsZWFzZV9yZWdpb247CisKKwllcnIgPSBzbmRfbXNuZF9wY20oY2FyZCwgMCwgTlVMTCk7CisJaWYgKGVyciA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSIExPR05BTUUgIjogZXJyb3IgY3JlYXRpbmcgbmV3IFBDTSBkZXZpY2VcbiIpOworCQlnb3RvIGVycl9yZWxlYXNlX3JlZ2lvbjsKKwl9CisKKwllcnIgPSBzbmRfbXNuZG1peF9uZXcoY2FyZCk7CisJaWYgKGVyciA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSIExPR05BTUUgIjogZXJyb3IgY3JlYXRpbmcgbmV3IE1peGVyIGRldmljZVxuIik7CisJCWdvdG8gZXJyX3JlbGVhc2VfcmVnaW9uOworCX0KKworCisJaWYgKG1wdV9pb1swXSAhPSBTTkRSVl9BVVRPX1BPUlQpIHsKKwkJc3RydWN0IHNuZF9tcHU0MDEgKm1wdTsKKworCQllcnIgPSBzbmRfbXB1NDAxX3VhcnRfbmV3KGNhcmQsIDAsIE1QVTQwMV9IV19NUFU0MDEsCisJCQkJCSAgbXB1X2lvWzBdLAorCQkJCQkgIE1QVTQwMV9NT0RFX0lOUFVUIHwKKwkJCQkJICBNUFU0MDFfTU9ERV9PVVRQVVQsCisJCQkJCSAgbXB1X2lycVswXSwgSVJRRl9ESVNBQkxFRCwKKwkJCQkJICAmY2hpcC0+cm1pZGkpOworCQlpZiAoZXJyIDwgMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSIExPR05BTUUKKwkJCQkiOiBlcnJvciBjcmVhdGluZyBuZXcgTWlkaSBkZXZpY2VcbiIpOworCQkJZ290byBlcnJfcmVsZWFzZV9yZWdpb247CisJCX0KKwkJbXB1ID0gY2hpcC0+cm1pZGktPnByaXZhdGVfZGF0YTsKKworCQltcHUtPm9wZW5faW5wdXQgPSBzbmRfbXNuZF9tcHU0MDFfb3BlbjsKKwkJbXB1LT5jbG9zZV9pbnB1dCA9IHNuZF9tc25kX21wdTQwMV9jbG9zZTsKKwkJbXB1LT5wcml2YXRlX2RhdGEgPSBjaGlwOworCX0KKworCWRpc2FibGVfaXJxKGNoaXAtPmlycSk7CisJc25kX21zbmRfY2FsaWJyYXRlX2FkYyhjaGlwLCBjaGlwLT5wbGF5X3NhbXBsZV9yYXRlKTsKKwlzbmRfbXNuZG1peF9mb3JjZV9yZWNzcmMoY2hpcCwgMCk7CisKKwllcnIgPSBzbmRfY2FyZF9yZWdpc3RlcihjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnJfcmVsZWFzZV9yZWdpb247CisKKwlyZXR1cm4gMDsKKworZXJyX3JlbGVhc2VfcmVnaW9uOgorCWlmIChjaGlwLT5tYXBwZWRiYXNlKQorCQlpb3VubWFwKGNoaXAtPm1hcHBlZGJhc2UpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihjaGlwLT5iYXNlLCBCVUZGU0laRSk7CisJcmVsZWFzZV9yZWdpb24oY2hpcC0+aW8sIERTUF9OVU1JTyk7CisJZnJlZV9pcnEoY2hpcC0+aXJxLCBjaGlwKTsKKwlyZXR1cm4gZXJyOworfQorCisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBzbmRfbXNuZF91bmxvYWQoc3RydWN0IHNuZF9jYXJkICpjYXJkKQoreworCXN0cnVjdCBzbmRfbXNuZCAqY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKKworCWlvdW5tYXAoY2hpcC0+bWFwcGVkYmFzZSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKGNoaXAtPmJhc2UsIEJVRkZTSVpFKTsKKwlyZWxlYXNlX3JlZ2lvbihjaGlwLT5pbywgRFNQX05VTUlPKTsKKwlmcmVlX2lycShjaGlwLT5pcnEsIGNoaXApOworCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Cit9CisKKyNpZm5kZWYgTVNORF9DTEFTU0lDCisKKy8qIFBpbm5hY2xlL0ZpamkgTG9naWNhbCBEZXZpY2UgQ29uZmlndXJhdGlvbiAqLworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfbXNuZF93cml0ZV9jZmcoaW50IGNmZywgaW50IHJlZywgaW50IHZhbHVlKQoreworCW91dGIocmVnLCBjZmcpOworCW91dGIodmFsdWUsIGNmZyArIDEpOworCWlmICh2YWx1ZSAhPSBpbmIoY2ZnICsgMSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIExPR05BTUUgIjogc25kX21zbmRfd3JpdGVfY2ZnOiBJL08gZXJyb3JcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9tc25kX3dyaXRlX2NmZ19pbzAoaW50IGNmZywgaW50IG51bSwgdTE2IGlvKQoreworCWlmIChzbmRfbXNuZF93cml0ZV9jZmcoY2ZnLCBJUkVHX0xPR0RFVklDRSwgbnVtKSkKKwkJcmV0dXJuIC1FSU87CisJaWYgKHNuZF9tc25kX3dyaXRlX2NmZyhjZmcsIElSRUdfSU8wX0JBU0VISSwgSElCWVRFKGlvKSkpCisJCXJldHVybiAtRUlPOworCWlmIChzbmRfbXNuZF93cml0ZV9jZmcoY2ZnLCBJUkVHX0lPMF9CQVNFTE8sIExPQllURShpbykpKQorCQlyZXR1cm4gLUVJTzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgc25kX21zbmRfd3JpdGVfY2ZnX2lvMShpbnQgY2ZnLCBpbnQgbnVtLCB1MTYgaW8pCit7CisJaWYgKHNuZF9tc25kX3dyaXRlX2NmZyhjZmcsIElSRUdfTE9HREVWSUNFLCBudW0pKQorCQlyZXR1cm4gLUVJTzsKKwlpZiAoc25kX21zbmRfd3JpdGVfY2ZnKGNmZywgSVJFR19JTzFfQkFTRUhJLCBISUJZVEUoaW8pKSkKKwkJcmV0dXJuIC1FSU87CisJaWYgKHNuZF9tc25kX3dyaXRlX2NmZyhjZmcsIElSRUdfSU8xX0JBU0VMTywgTE9CWVRFKGlvKSkpCisJCXJldHVybiAtRUlPOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfbXNuZF93cml0ZV9jZmdfaXJxKGludCBjZmcsIGludCBudW0sIHUxNiBpcnEpCit7CisJaWYgKHNuZF9tc25kX3dyaXRlX2NmZyhjZmcsIElSRUdfTE9HREVWSUNFLCBudW0pKQorCQlyZXR1cm4gLUVJTzsKKwlpZiAoc25kX21zbmRfd3JpdGVfY2ZnKGNmZywgSVJFR19JUlFfTlVNQkVSLCBMT0JZVEUoaXJxKSkpCisJCXJldHVybiAtRUlPOworCWlmIChzbmRfbXNuZF93cml0ZV9jZmcoY2ZnLCBJUkVHX0lSUV9UWVBFLCBJUlFUWVBFX0VER0UpKQorCQlyZXR1cm4gLUVJTzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgc25kX21zbmRfd3JpdGVfY2ZnX21lbShpbnQgY2ZnLCBpbnQgbnVtLCBpbnQgbWVtKQoreworCXUxNiB3bWVtOworCisJbWVtID4+PSA4OworCXdtZW0gPSAodTE2KShtZW0gJiAweGZmZik7CisJaWYgKHNuZF9tc25kX3dyaXRlX2NmZyhjZmcsIElSRUdfTE9HREVWSUNFLCBudW0pKQorCQlyZXR1cm4gLUVJTzsKKwlpZiAoc25kX21zbmRfd3JpdGVfY2ZnKGNmZywgSVJFR19NRU1CQVNFSEksIEhJQllURSh3bWVtKSkpCisJCXJldHVybiAtRUlPOworCWlmIChzbmRfbXNuZF93cml0ZV9jZmcoY2ZnLCBJUkVHX01FTUJBU0VMTywgTE9CWVRFKHdtZW0pKSkKKwkJcmV0dXJuIC1FSU87CisJaWYgKHdtZW0gJiYgc25kX21zbmRfd3JpdGVfY2ZnKGNmZywgSVJFR19NRU1DT05UUk9MLAorCQkJCSAgICAgICBNRU1UWVBFX0hJQUREUiB8IE1FTVRZUEVfMTZCSVQpKQorCQlyZXR1cm4gLUVJTzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgc25kX21zbmRfYWN0aXZhdGVfbG9naWNhbChpbnQgY2ZnLCBpbnQgbnVtKQoreworCWlmIChzbmRfbXNuZF93cml0ZV9jZmcoY2ZnLCBJUkVHX0xPR0RFVklDRSwgbnVtKSkKKwkJcmV0dXJuIC1FSU87CisJaWYgKHNuZF9tc25kX3dyaXRlX2NmZyhjZmcsIElSRUdfQUNUSVZBVEUsIExEX0FDVElWQVRFKSkKKwkJcmV0dXJuIC1FSU87CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9tc25kX3dyaXRlX2NmZ19sb2dpY2FsKGludCBjZmcsIGludCBudW0sIHUxNiBpbzAsCisJCQkJCQl1MTYgaW8xLCB1MTYgaXJxLCBpbnQgbWVtKQoreworCWlmIChzbmRfbXNuZF93cml0ZV9jZmcoY2ZnLCBJUkVHX0xPR0RFVklDRSwgbnVtKSkKKwkJcmV0dXJuIC1FSU87CisJaWYgKHNuZF9tc25kX3dyaXRlX2NmZ19pbzAoY2ZnLCBudW0sIGlvMCkpCisJCXJldHVybiAtRUlPOworCWlmIChzbmRfbXNuZF93cml0ZV9jZmdfaW8xKGNmZywgbnVtLCBpbzEpKQorCQlyZXR1cm4gLUVJTzsKKwlpZiAoc25kX21zbmRfd3JpdGVfY2ZnX2lycShjZmcsIG51bSwgaXJxKSkKKwkJcmV0dXJuIC1FSU87CisJaWYgKHNuZF9tc25kX3dyaXRlX2NmZ19tZW0oY2ZnLCBudW0sIG1lbSkpCisJCXJldHVybiAtRUlPOworCWlmIChzbmRfbXNuZF9hY3RpdmF0ZV9sb2dpY2FsKGNmZywgbnVtKSkKKwkJcmV0dXJuIC1FSU87CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9tc25kX3Bpbm5hY2xlX2NmZ19yZXNldChpbnQgY2ZnKQoreworCWludCBpOworCisJLyogUmVzZXQgZGV2aWNlcyBpZiB0b2xkIHRvICovCisJcHJpbnRrKEtFUk5fSU5GTyBMT0dOQU1FICI6IFJlc2V0dGluZyBhbGwgZGV2aWNlc1xuIik7CisJZm9yIChpID0gMDsgaSA8IDQ7ICsraSkKKwkJaWYgKHNuZF9tc25kX3dyaXRlX2NmZ19sb2dpY2FsKGNmZywgaSwgMCwgMCwgMCwgMCkpCisJCQlyZXR1cm4gLUVJTzsKKworCXJldHVybiAwOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgaW5kZXhbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9JRFg7CS8qIEluZGV4IDAtTUFYICovCitzdGF0aWMgY2hhciAqaWRbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9TVFI7CS8qIElEIGZvciB0aGlzIGNhcmQgKi8KKworbW9kdWxlX3BhcmFtX2FycmF5KGluZGV4LCBpbnQsIE5VTEwsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhpbmRleCwgIkluZGV4IHZhbHVlIGZvciBtc25kX3Bpbm5hY2xlIHNvdW5kY2FyZC4iKTsKK21vZHVsZV9wYXJhbV9hcnJheShpZCwgY2hhcnAsIE5VTEwsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhpZCwgIklEIHN0cmluZyBmb3IgbXNuZF9waW5uYWNsZSBzb3VuZGNhcmQuIik7CisKK3N0YXRpYyBsb25nIGlvW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfUE9SVDsKK3N0YXRpYyBpbnQgaXJxW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfSVJROworc3RhdGljIGxvbmcgbWVtW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfUE9SVDsKKworc3RhdGljIGxvbmcgY2ZnW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfUE9SVDsKKworI2lmbmRlZiBNU05EX0NMQVNTSUMKKy8qIEV4dHJhIFBlcmlwaGVyYWwgQ29uZmlndXJhdGlvbiAoRGVmYXVsdDogRGlzYWJsZSkgKi8KK3N0YXRpYyBsb25nIGlkZV9pbzBbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9QT1JUOworc3RhdGljIGxvbmcgaWRlX2lvMVtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1BPUlQ7CitzdGF0aWMgaW50IGlkZV9pcnFbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9JUlE7CisKK3N0YXRpYyBsb25nIGpveXN0aWNrX2lvW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfUE9SVDsKKy8qIElmIHdlIGhhdmUgdGhlIGRpZ2l0YWwgZGF1Z2hlcmJvYXJkLi4uICovCitzdGF0aWMgaW50IGRpZ2l0YWxbU05EUlZfQ0FSRFNdOworCisvKiBFeHRyYSBQZXJpcGhlcmFsIENvbmZpZ3VyYXRpb24gKi8KK3N0YXRpYyBpbnQgcmVzZXRbU05EUlZfQ0FSRFNdOworI2VuZGlmCisKK3N0YXRpYyBpbnQgd3JpdGVfbmRlbGF5W1NORFJWX0NBUkRTXSA9IHsgWzAgLi4uIChTTkRSVl9DQVJEUy0xKV0gPSAxIH07CisKK3N0YXRpYyBpbnQgY2FsaWJyYXRlX3NpZ25hbDsKKworI2lmZGVmIENPTkZJR19QTlAKK3N0YXRpYyBpbnQgaXNhcG5wW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfRU5BQkxFX1BOUDsKK21vZHVsZV9wYXJhbV9hcnJheShpc2FwbnAsIGJvb2wsIE5VTEwsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhpc2FwbnAsICJJU0EgUG5QIGRldGVjdGlvbiBmb3Igc3BlY2lmaWVkIHNvdW5kY2FyZC4iKTsKKyNkZWZpbmUgaGFzX2lzYXBucCh4KSBpc2FwbnBbeF0KKyNlbHNlCisjZGVmaW5lIGhhc19pc2FwbnAoeCkgMAorI2VuZGlmCisKK01PRFVMRV9BVVRIT1IoIkthcnN0ZW4gV2llc2UgPGFubmFiZWxsZXNnYXJkZW5AeWFob28uZGU+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlR1cnRsZSBCZWFjaCAiIExPTkdOQU1FICIgTGludXggRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfRklSTVdBUkUoSU5JVENPREVGSUxFKTsKK01PRFVMRV9GSVJNV0FSRShQRVJNQ09ERUZJTEUpOworCittb2R1bGVfcGFyYW1fYXJyYXkoaW8sIGxvbmcsIE5VTEwsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhpbywgIklPIHBvcnQgIyIpOworbW9kdWxlX3BhcmFtX2FycmF5KGlycSwgaW50LCBOVUxMLCBTX0lSVUdPKTsKK21vZHVsZV9wYXJhbV9hcnJheShtZW0sIGxvbmcsIE5VTEwsIFNfSVJVR08pOworbW9kdWxlX3BhcmFtX2FycmF5KHdyaXRlX25kZWxheSwgaW50LCBOVUxMLCBTX0lSVUdPKTsKK21vZHVsZV9wYXJhbShjYWxpYnJhdGVfc2lnbmFsLCBpbnQsIFNfSVJVR08pOworI2lmbmRlZiBNU05EX0NMQVNTSUMKK21vZHVsZV9wYXJhbV9hcnJheShkaWdpdGFsLCBpbnQsIE5VTEwsIFNfSVJVR08pOworbW9kdWxlX3BhcmFtX2FycmF5KGNmZywgbG9uZywgTlVMTCwgU19JUlVHTyk7Cittb2R1bGVfcGFyYW1fYXJyYXkocmVzZXQsIGludCwgMCwgU19JUlVHTyk7Cittb2R1bGVfcGFyYW1fYXJyYXkobXB1X2lvLCBsb25nLCBOVUxMLCBTX0lSVUdPKTsKK21vZHVsZV9wYXJhbV9hcnJheShtcHVfaXJxLCBpbnQsIE5VTEwsIFNfSVJVR08pOworbW9kdWxlX3BhcmFtX2FycmF5KGlkZV9pbzAsIGxvbmcsIE5VTEwsIFNfSVJVR08pOworbW9kdWxlX3BhcmFtX2FycmF5KGlkZV9pbzEsIGxvbmcsIE5VTEwsIFNfSVJVR08pOworbW9kdWxlX3BhcmFtX2FycmF5KGlkZV9pcnEsIGludCwgTlVMTCwgU19JUlVHTyk7Cittb2R1bGVfcGFyYW1fYXJyYXkoam95c3RpY2tfaW8sIGxvbmcsIE5VTEwsIFNfSVJVR08pOworI2VuZGlmCisKKworc3RhdGljIGludCBfX2RldmluaXQgc25kX21zbmRfaXNhX21hdGNoKHN0cnVjdCBkZXZpY2UgKnBkZXYsIHVuc2lnbmVkIGludCBpKQoreworCWlmIChpb1tpXSA9PSBTTkRSVl9BVVRPX1BPUlQpCisJCXJldHVybiAwOworCisJaWYgKGlycVtpXSA9PSBTTkRSVl9BVVRPX1BPUlQgfHwgbWVtW2ldID09IFNORFJWX0FVVE9fUE9SVCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HIExPR05BTUUgIjogaW8sIGlycSBhbmQgbWVtIG11c3QgYmUgc2V0XG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisjaWZkZWYgTVNORF9DTEFTU0lDCisJaWYgKCEoaW9baV0gPT0gMHgyOTAgfHwKKwkgICAgICBpb1tpXSA9PSAweDI2MCB8fAorCSAgICAgIGlvW2ldID09IDB4MjUwIHx8CisJICAgICAgaW9baV0gPT0gMHgyNDAgfHwKKwkgICAgICBpb1tpXSA9PSAweDIzMCB8fAorCSAgICAgIGlvW2ldID09IDB4MjIwIHx8CisJICAgICAgaW9baV0gPT0gMHgyMTAgfHwKKwkgICAgICBpb1tpXSA9PSAweDNlMCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIExPR05BTUUgIjogXCJpb1wiIC0gRFNQIEkvTyBiYXNlIG11c3QgYmUgc2V0ICIKKwkJCSIgdG8gMHgyMTAsIDB4MjIwLCAweDIzMCwgMHgyNDAsIDB4MjUwLCAweDI2MCwgMHgyOTAsICIKKwkJCSJvciAweDNFMFxuIik7CisJCXJldHVybiAwOworCX0KKyNlbHNlCisJaWYgKGlvW2ldIDwgMHgxMDAgfHwgaW9baV0gPiAweDNlMCB8fCAoaW9baV0gJSAweDEwKSAhPSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiBMT0dOQU1FCisJCQkiOiBcImlvXCIgLSBEU1AgSS9PIGJhc2UgbXVzdCB3aXRoaW4gdGhlIHJhbmdlIDB4MTAwICIKKwkJCSJ0byAweDNFMCBhbmQgbXVzdCBiZSBldmVubHkgZGl2aXNpYmxlIGJ5IDB4MTBcbiIpOworCQlyZXR1cm4gMDsKKwl9CisjZW5kaWYgLyogTVNORF9DTEFTU0lDICovCisKKwlpZiAoIShpcnFbaV0gPT0gNSB8fAorCSAgICAgIGlycVtpXSA9PSA3IHx8CisJICAgICAgaXJxW2ldID09IDkgfHwKKwkgICAgICBpcnFbaV0gPT0gMTAgfHwKKwkgICAgICBpcnFbaV0gPT0gMTEgfHwKKwkgICAgICBpcnFbaV0gPT0gMTIpKSB7CisJCXByaW50ayhLRVJOX0VSUiBMT0dOQU1FCisJCQkiOiBcImlycVwiIC0gbXVzdCBiZSBzZXQgdG8gNSwgNywgOSwgMTAsIDExIG9yIDEyXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCEobWVtW2ldID09IDB4YjAwMDAgfHwKKwkgICAgICBtZW1baV0gPT0gMHhjODAwMCB8fAorCSAgICAgIG1lbVtpXSA9PSAweGQwMDAwIHx8CisJICAgICAgbWVtW2ldID09IDB4ZDgwMDAgfHwKKwkgICAgICBtZW1baV0gPT0gMHhlMDAwMCB8fAorCSAgICAgIG1lbVtpXSA9PSAweGU4MDAwKSkgeworCQlwcmludGsoS0VSTl9FUlIgTE9HTkFNRSAiOiBcIm1lbVwiIC0gbXVzdCBiZSBzZXQgdG8gIgorCQkgICAgICAgIjB4YjAwMDAsIDB4YzgwMDAsIDB4ZDAwMDAsIDB4ZDgwMDAsIDB4ZTAwMDAgb3IgIgorCQkgICAgICAgIjB4ZTgwMDBcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKyNpZm5kZWYgTVNORF9DTEFTU0lDCisJaWYgKGNmZ1tpXSA9PSBTTkRSVl9BVVRPX1BPUlQpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyBMT0dOQU1FICI6IEFzc3VtaW5nIFBuUCBtb2RlXG4iKTsKKwl9IGVsc2UgaWYgKGNmZ1tpXSAhPSAweDI1MCAmJiBjZmdbaV0gIT0gMHgyNjAgJiYgY2ZnW2ldICE9IDB4MjcwKSB7CisJCXByaW50ayhLRVJOX0lORk8gTE9HTkFNRQorCQkJIjogQ29uZmlnIHBvcnQgbXVzdCBiZSAweDI1MCwgMHgyNjAgb3IgMHgyNzAgIgorCQkJIihvciB1bnNwZWNpZmllZCBmb3IgUG5QIG1vZGUpXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorI2VuZGlmIC8qIE1TTkRfQ0xBU1NJQyAqLworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9tc25kX2lzYV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpwZGV2LCB1bnNpZ25lZCBpbnQgaWR4KQoreworCWludCBlcnI7CisJc3RydWN0IHNuZF9jYXJkICpjYXJkOworCXN0cnVjdCBzbmRfbXNuZCAqY2hpcDsKKworCWlmIChoYXNfaXNhcG5wKGlkeCkgfHwgY2ZnW2lkeF0gPT0gU05EUlZfQVVUT19QT1JUKSB7CisJCXByaW50ayhLRVJOX0lORk8gTE9HTkFNRSAiOiBBc3N1bWluZyBQblAgbW9kZVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtpZHhdLCBpZFtpZHhdLCBUSElTX01PRFVMRSwKKwkJCSAgICAgIHNpemVvZihzdHJ1Y3Qgc25kX21zbmQpLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsIHBkZXYpOworCWNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7CisJY2hpcC0+Y2FyZCA9IGNhcmQ7CisKKyNpZmRlZiBNU05EX0NMQVNTSUMKKwlzd2l0Y2ggKGlycVtpZHhdKSB7CisJY2FzZSA1OgorCQljaGlwLT5pcnFpZCA9IEhQSVJRXzU7IGJyZWFrOworCWNhc2UgNzoKKwkJY2hpcC0+aXJxaWQgPSBIUElSUV83OyBicmVhazsKKwljYXNlIDk6CisJCWNoaXAtPmlycWlkID0gSFBJUlFfOTsgYnJlYWs7CisJY2FzZSAxMDoKKwkJY2hpcC0+aXJxaWQgPSBIUElSUV8xMDsgYnJlYWs7CisJY2FzZSAxMToKKwkJY2hpcC0+aXJxaWQgPSBIUElSUV8xMTsgYnJlYWs7CisJY2FzZSAxMjoKKwkJY2hpcC0+aXJxaWQgPSBIUElSUV8xMjsgYnJlYWs7CisJfQorCisJc3dpdGNoIChtZW1baWR4XSkgeworCWNhc2UgMHhiMDAwMDoKKwkJY2hpcC0+bWVtaWQgPSBIUE1FTV9CMDAwOyBicmVhazsKKwljYXNlIDB4YzgwMDA6CisJCWNoaXAtPm1lbWlkID0gSFBNRU1fQzgwMDsgYnJlYWs7CisJY2FzZSAweGQwMDAwOgorCQljaGlwLT5tZW1pZCA9IEhQTUVNX0QwMDA7IGJyZWFrOworCWNhc2UgMHhkODAwMDoKKwkJY2hpcC0+bWVtaWQgPSBIUE1FTV9EODAwOyBicmVhazsKKwljYXNlIDB4ZTAwMDA6CisJCWNoaXAtPm1lbWlkID0gSFBNRU1fRTAwMDsgYnJlYWs7CisJY2FzZSAweGU4MDAwOgorCQljaGlwLT5tZW1pZCA9IEhQTUVNX0U4MDA7IGJyZWFrOworCX0KKyNlbHNlCisJcHJpbnRrKEtFUk5fSU5GTyBMT0dOQU1FICI6IE5vbi1QblAgbW9kZTogY29uZmlndXJpbmcgYXQgcG9ydCAweCVseFxuIiwKKwkJCWNmZ1tpZHhdKTsKKworCWlmICghcmVxdWVzdF9yZWdpb24oY2ZnW2lkeF0sIDIsICJQaW5uYWNsZS9GaWppIENvbmZpZyIpKSB7CisJCXByaW50ayhLRVJOX0VSUiBMT0dOQU1FICI6IENvbmZpZyBwb3J0IDB4JWx4IGNvbmZsaWN0XG4iLAorCQkJICAgY2ZnW2lkeF0pOworCQlzbmRfY2FyZF9mcmVlKGNhcmQpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJaWYgKHJlc2V0W2lkeF0pCisJCWlmIChzbmRfbXNuZF9waW5uYWNsZV9jZmdfcmVzZXQoY2ZnW2lkeF0pKSB7CisJCQllcnIgPSAtRUlPOworCQkJZ290byBjZmdfZXJyb3I7CisJCX0KKworCS8qIERTUCAqLworCWVyciA9IHNuZF9tc25kX3dyaXRlX2NmZ19sb2dpY2FsKGNmZ1tpZHhdLCAwLAorCQkJCQkgaW9baWR4XSwgMCwKKwkJCQkJIGlycVtpZHhdLCBtZW1baWR4XSk7CisKKwlpZiAoZXJyKQorCQlnb3RvIGNmZ19lcnJvcjsKKworCS8qIFRoZSBmb2xsb3dpbmcgYXJlIFBpbm5hY2xlIHNwZWNpZmljICovCisKKwkvKiBNUFUgKi8KKwlpZiAobXB1X2lvW2lkeF0gIT0gU05EUlZfQVVUT19QT1JUCisJICAgICYmIG1wdV9pcnFbaWR4XSAhPSBTTkRSVl9BVVRPX0lSUSkgeworCQlwcmludGsoS0VSTl9JTkZPIExPR05BTUUKKwkJICAgICAgICI6IENvbmZpZ3VyaW5nIE1QVSB0byBJL08gMHglbHggSVJRICVkXG4iLAorCQkgICAgICAgbXB1X2lvW2lkeF0sIG1wdV9pcnFbaWR4XSk7CisJCWVyciA9IHNuZF9tc25kX3dyaXRlX2NmZ19sb2dpY2FsKGNmZ1tpZHhdLCAxLAorCQkJCQkJIG1wdV9pb1tpZHhdLCAwLAorCQkJCQkJIG1wdV9pcnFbaWR4XSwgMCk7CisKKwkJaWYgKGVycikKKwkJCWdvdG8gY2ZnX2Vycm9yOworCX0KKworCS8qIElERSAqLworCWlmIChpZGVfaW8wW2lkeF0gIT0gU05EUlZfQVVUT19QT1JUCisJICAgICYmIGlkZV9pbzFbaWR4XSAhPSBTTkRSVl9BVVRPX1BPUlQKKwkgICAgJiYgaWRlX2lycVtpZHhdICE9IFNORFJWX0FVVE9fSVJRKSB7CisJCXByaW50ayhLRVJOX0lORk8gTE9HTkFNRQorCQkgICAgICAgIjogQ29uZmlndXJpbmcgSURFIHRvIEkvTyAweCVseCwgMHglbHggSVJRICVkXG4iLAorCQkgICAgICAgaWRlX2lvMFtpZHhdLCBpZGVfaW8xW2lkeF0sIGlkZV9pcnFbaWR4XSk7CisJCWVyciA9IHNuZF9tc25kX3dyaXRlX2NmZ19sb2dpY2FsKGNmZ1tpZHhdLCAyLAorCQkJCQkJIGlkZV9pbzBbaWR4XSwgaWRlX2lvMVtpZHhdLAorCQkJCQkJIGlkZV9pcnFbaWR4XSwgMCk7CisKKwkJaWYgKGVycikKKwkJCWdvdG8gY2ZnX2Vycm9yOworCX0KKworCS8qIEpveXN0aWNrICovCisJaWYgKGpveXN0aWNrX2lvW2lkeF0gIT0gU05EUlZfQVVUT19QT1JUKSB7CisJCXByaW50ayhLRVJOX0lORk8gTE9HTkFNRQorCQkgICAgICAgIjogQ29uZmlndXJpbmcgam95c3RpY2sgdG8gSS9PIDB4JWx4XG4iLAorCQkgICAgICAgam95c3RpY2tfaW9baWR4XSk7CisJCWVyciA9IHNuZF9tc25kX3dyaXRlX2NmZ19sb2dpY2FsKGNmZ1tpZHhdLCAzLAorCQkJCQkJIGpveXN0aWNrX2lvW2lkeF0sIDAsCisJCQkJCQkgMCwgMCk7CisKKwkJaWYgKGVycikKKwkJCWdvdG8gY2ZnX2Vycm9yOworCX0KKwlyZWxlYXNlX3JlZ2lvbihjZmdbaWR4XSwgMik7CisKKyNlbmRpZiAvKiBNU05EX0NMQVNTSUMgKi8KKworCXNldF9kZWZhdWx0X2F1ZGlvX3BhcmFtZXRlcnMoY2hpcCk7CisjaWZkZWYgTVNORF9DTEFTU0lDCisJY2hpcC0+dHlwZSA9IG1zbmRDbGFzc2ljOworI2Vsc2UKKwljaGlwLT50eXBlID0gbXNuZFBpbm5hY2xlOworI2VuZGlmCisJY2hpcC0+aW8gPSBpb1tpZHhdOworCWNoaXAtPmlycSA9IGlycVtpZHhdOworCWNoaXAtPmJhc2UgPSBtZW1baWR4XTsKKworCWNoaXAtPmNhbGlicmF0ZV9zaWduYWwgPSBjYWxpYnJhdGVfc2lnbmFsID8gMSA6IDA7CisJY2hpcC0+cmVjc3JjID0gMDsKKwljaGlwLT5kc3BxX2RhdGFfYnVmZiA9IERTUFFfREFUQV9CVUZGOworCWNoaXAtPmRzcHFfYnVmZl9zaXplID0gRFNQUV9CVUZGX1NJWkU7CisJaWYgKHdyaXRlX25kZWxheVtpZHhdKQorCQljbGVhcl9iaXQoRl9ESVNBQkxFX1dSSVRFX05ERUxBWSwgJmNoaXAtPmZsYWdzKTsKKwllbHNlCisJCXNldF9iaXQoRl9ESVNBQkxFX1dSSVRFX05ERUxBWSwgJmNoaXAtPmZsYWdzKTsKKyNpZm5kZWYgTVNORF9DTEFTU0lDCisJaWYgKGRpZ2l0YWxbaWR4XSkKKwkJc2V0X2JpdChGX0hBVkVESUdJVEFMLCAmY2hpcC0+ZmxhZ3MpOworI2VuZGlmCisJc3Bpbl9sb2NrX2luaXQoJmNoaXAtPmxvY2spOworCWVyciA9IHNuZF9tc25kX3Byb2JlKGNhcmQpOworCWlmIChlcnIgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiBMT0dOQU1FICI6IFByb2JlIGZhaWxlZFxuIik7CisJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CisJCXJldHVybiBlcnI7CisJfQorCisJZXJyID0gc25kX21zbmRfYXR0YWNoKGNhcmQpOworCWlmIChlcnIgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiBMT0dOQU1FICI6IEF0dGFjaCBmYWlsZWRcbiIpOworCQlzbmRfY2FyZF9mcmVlKGNhcmQpOworCQlyZXR1cm4gZXJyOworCX0KKwlkZXZfc2V0X2RydmRhdGEocGRldiwgY2FyZCk7CisKKwlyZXR1cm4gMDsKKworI2lmbmRlZiBNU05EX0NMQVNTSUMKK2NmZ19lcnJvcjoKKwlyZWxlYXNlX3JlZ2lvbihjZmdbaWR4XSwgMik7CisJc25kX2NhcmRfZnJlZShjYXJkKTsKKwlyZXR1cm4gZXJyOworI2VuZGlmCit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHNuZF9tc25kX2lzYV9yZW1vdmUoc3RydWN0IGRldmljZSAqcGRldiwgdW5zaWduZWQgaW50IGRldikKK3sKKwlzbmRfbXNuZF91bmxvYWQoZGV2X2dldF9kcnZkYXRhKHBkZXYpKTsKKwlkZXZfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgREVWX05BTUUgIm1zbmQtcGlubmFjbGUiCisKK3N0YXRpYyBzdHJ1Y3QgaXNhX2RyaXZlciBzbmRfbXNuZF9kcml2ZXIgPSB7CisJLm1hdGNoCQk9IHNuZF9tc25kX2lzYV9tYXRjaCwKKwkucHJvYmUJCT0gc25kX21zbmRfaXNhX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aoc25kX21zbmRfaXNhX3JlbW92ZSksCisJLyogRklYTUU6IHN1c3BlbmQsIHJlc3VtZSAqLworCS5kcml2ZXIJCT0geworCQkubmFtZQk9IERFVl9OQU1FCisJfSwKK307CisKKyNpZmRlZiBDT05GSUdfUE5QCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfbXNuZF9wbnBfZGV0ZWN0KHN0cnVjdCBwbnBfY2FyZF9saW5rICpwY2FyZCwKKwkJCQkJIGNvbnN0IHN0cnVjdCBwbnBfY2FyZF9kZXZpY2VfaWQgKnBpZCkKK3sKKwlzdGF0aWMgaW50IGlkeDsKKwlzdHJ1Y3QgcG5wX2RldiAqcG5wX2RldjsKKwlzdHJ1Y3QgcG5wX2RldiAqbXB1X2RldjsKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CisJc3RydWN0IHNuZF9tc25kICpjaGlwOworCWludCByZXQ7CisKKwlmb3IgKCA7IGlkeCA8IFNORFJWX0NBUkRTOyBpZHgrKykgeworCQlpZiAoaGFzX2lzYXBucChpZHgpKQorCQkJYnJlYWs7CisJfQorCWlmIChpZHggPj0gU05EUlZfQ0FSRFMpCisJCXJldHVybiAtRU5PREVWOworCisJLyoKKwkgKiBDaGVjayB0aGF0IHdlIHN0aWxsIGhhdmUgcm9vbSBmb3IgYW5vdGhlciBzb3VuZCBjYXJkIC4uLgorCSAqLworCXBucF9kZXYgPSBwbnBfcmVxdWVzdF9jYXJkX2RldmljZShwY2FyZCwgcGlkLT5kZXZzWzBdLmlkLCBOVUxMKTsKKwlpZiAoIXBucF9kZXYpCisJCXJldHVybiAtRU5PREVWOworCisJbXB1X2RldiA9IHBucF9yZXF1ZXN0X2NhcmRfZGV2aWNlKHBjYXJkLCBwaWQtPmRldnNbMV0uaWQsIE5VTEwpOworCWlmICghbXB1X2RldikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoIXBucF9pc19hY3RpdmUocG5wX2RldikgJiYgcG5wX2FjdGl2YXRlX2RldihwbnBfZGV2KSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAibXNuZF9waW5uYWNsZTogZGV2aWNlIGlzIGluYWN0aXZlXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlpZiAoIXBucF9pc19hY3RpdmUobXB1X2RldikgJiYgcG5wX2FjdGl2YXRlX2RldihtcHVfZGV2KSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAibXNuZF9waW5uYWNsZTogTVBVIGRldmljZSBpcyBpbmFjdGl2ZVxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJLyoKKwkgKiBDcmVhdGUgYSBuZXcgQUxTQSBzb3VuZCBjYXJkIGVudHJ5LCBpbiBhbnRpY2lwYXRpb24KKwkgKiBvZiBkZXRlY3Rpbmcgb3VyIGhhcmR3YXJlIC4uLgorCSAqLworCXJldCA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtpZHhdLCBpZFtpZHhdLCBUSElTX01PRFVMRSwKKwkJCSAgICAgIHNpemVvZihzdHJ1Y3Qgc25kX21zbmQpLCAmY2FyZCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwljaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOworCWNoaXAtPmNhcmQgPSBjYXJkOworCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgJnBjYXJkLT5jYXJkLT5kZXYpOworCisJLyoKKwkgKiBSZWFkIHRoZSBjb3JyZWN0IHBhcmFtZXRlcnMgb2ZmIHRoZSBJU0EgUG5QIGJ1cyAuLi4KKwkgKi8KKwlpb1tpZHhdID0gcG5wX3BvcnRfc3RhcnQocG5wX2RldiwgMCk7CisJaXJxW2lkeF0gPSBwbnBfaXJxKHBucF9kZXYsIDApOworCW1lbVtpZHhdID0gcG5wX21lbV9zdGFydChwbnBfZGV2LCAwKTsKKwltcHVfaW9baWR4XSA9IHBucF9wb3J0X3N0YXJ0KG1wdV9kZXYsIDApOworCW1wdV9pcnFbaWR4XSA9IHBucF9pcnEobXB1X2RldiwgMCk7CisKKwlzZXRfZGVmYXVsdF9hdWRpb19wYXJhbWV0ZXJzKGNoaXApOworI2lmZGVmIE1TTkRfQ0xBU1NJQworCWNoaXAtPnR5cGUgPSBtc25kQ2xhc3NpYzsKKyNlbHNlCisJY2hpcC0+dHlwZSA9IG1zbmRQaW5uYWNsZTsKKyNlbmRpZgorCWNoaXAtPmlvID0gaW9baWR4XTsKKwljaGlwLT5pcnEgPSBpcnFbaWR4XTsKKwljaGlwLT5iYXNlID0gbWVtW2lkeF07CisKKwljaGlwLT5jYWxpYnJhdGVfc2lnbmFsID0gY2FsaWJyYXRlX3NpZ25hbCA/IDEgOiAwOworCWNoaXAtPnJlY3NyYyA9IDA7CisJY2hpcC0+ZHNwcV9kYXRhX2J1ZmYgPSBEU1BRX0RBVEFfQlVGRjsKKwljaGlwLT5kc3BxX2J1ZmZfc2l6ZSA9IERTUFFfQlVGRl9TSVpFOworCWlmICh3cml0ZV9uZGVsYXlbaWR4XSkKKwkJY2xlYXJfYml0KEZfRElTQUJMRV9XUklURV9OREVMQVksICZjaGlwLT5mbGFncyk7CisJZWxzZQorCQlzZXRfYml0KEZfRElTQUJMRV9XUklURV9OREVMQVksICZjaGlwLT5mbGFncyk7CisjaWZuZGVmIE1TTkRfQ0xBU1NJQworCWlmIChkaWdpdGFsW2lkeF0pCisJCXNldF9iaXQoRl9IQVZFRElHSVRBTCwgJmNoaXAtPmZsYWdzKTsKKyNlbmRpZgorCXNwaW5fbG9ja19pbml0KCZjaGlwLT5sb2NrKTsKKwlyZXQgPSBzbmRfbXNuZF9wcm9iZShjYXJkKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgTE9HTkFNRSAiOiBQcm9iZSBmYWlsZWRcbiIpOworCQlnb3RvIF9yZWxlYXNlX2NhcmQ7CisJfQorCisJcmV0ID0gc25kX21zbmRfYXR0YWNoKGNhcmQpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiBMT0dOQU1FICI6IEF0dGFjaCBmYWlsZWRcbiIpOworCQlnb3RvIF9yZWxlYXNlX2NhcmQ7CisJfQorCisJcG5wX3NldF9jYXJkX2RydmRhdGEocGNhcmQsIGNhcmQpOworCSsraWR4OworCXJldHVybiAwOworCitfcmVsZWFzZV9jYXJkOgorCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IHNuZF9tc25kX3BucF9yZW1vdmUoc3RydWN0IHBucF9jYXJkX2xpbmsgKnBjYXJkKQoreworCXNuZF9tc25kX3VubG9hZChwbnBfZ2V0X2NhcmRfZHJ2ZGF0YShwY2FyZCkpOworCXBucF9zZXRfY2FyZF9kcnZkYXRhKHBjYXJkLCBOVUxMKTsKK30KKworc3RhdGljIGludCBpc2FfcmVnaXN0ZXJlZDsKK3N0YXRpYyBpbnQgcG5wX3JlZ2lzdGVyZWQ7CisKK3N0YXRpYyBzdHJ1Y3QgcG5wX2NhcmRfZGV2aWNlX2lkIG1zbmRfcG5waWRzW10gPSB7CisJLyogUGlubmFjbGUgUG5QICovCisJeyAuaWQgPSAiQlZKMDQ0MCIsIC5kZXZzID0geyB7ICJUQlMwMDAwIiB9LCB7ICJUQlMwMDAxIiB9IH0gfSwKKwl7IC5pZCA9ICIiIH0JLyogZW5kICovCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBucF9jYXJkLCBtc25kX3BucGlkcyk7CisKK3N0YXRpYyBzdHJ1Y3QgcG5wX2NhcmRfZHJpdmVyIG1zbmRfcG5wY19kcml2ZXIgPSB7CisJLmZsYWdzID0gUE5QX0RSSVZFUl9SRVNfRE9fTk9UX0NIQU5HRSwKKwkubmFtZSA9ICJtc25kX3Bpbm5hY2xlIiwKKwkuaWRfdGFibGUgPSBtc25kX3BucGlkcywKKwkucHJvYmUgPSBzbmRfbXNuZF9wbnBfZGV0ZWN0LAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfbXNuZF9wbnBfcmVtb3ZlKSwKK307CisjZW5kaWYgLyogQ09ORklHX1BOUCAqLworCitzdGF0aWMgaW50IF9faW5pdCBzbmRfbXNuZF9pbml0KHZvaWQpCit7CisJaW50IGVycjsKKworCWVyciA9IGlzYV9yZWdpc3Rlcl9kcml2ZXIoJnNuZF9tc25kX2RyaXZlciwgU05EUlZfQ0FSRFMpOworI2lmZGVmIENPTkZJR19QTlAKKwlpZiAoIWVycikKKwkJaXNhX3JlZ2lzdGVyZWQgPSAxOworCisJZXJyID0gcG5wX3JlZ2lzdGVyX2NhcmRfZHJpdmVyKCZtc25kX3BucGNfZHJpdmVyKTsKKwlpZiAoIWVycikKKwkJcG5wX3JlZ2lzdGVyZWQgPSAxOworCisJaWYgKGlzYV9yZWdpc3RlcmVkKQorCQllcnIgPSAwOworI2VuZGlmCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHNuZF9tc25kX2V4aXQodm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfUE5QCisJaWYgKHBucF9yZWdpc3RlcmVkKQorCQlwbnBfdW5yZWdpc3Rlcl9jYXJkX2RyaXZlcigmbXNuZF9wbnBjX2RyaXZlcik7CisJaWYgKGlzYV9yZWdpc3RlcmVkKQorI2VuZGlmCisJCWlzYV91bnJlZ2lzdGVyX2RyaXZlcigmc25kX21zbmRfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoc25kX21zbmRfaW5pdCk7Cittb2R1bGVfZXhpdChzbmRfbXNuZF9leGl0KTsKKwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL21zbmQvbXNuZF9waW5uYWNsZS5oIGIvc291bmQvaXNhL21zbmQvbXNuZF9waW5uYWNsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4MzE4ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9pc2EvbXNuZC9tc25kX3Bpbm5hY2xlLmgKQEAgLTAsMCArMSwxODEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBtc25kX3Bpbm5hY2xlLmgKKyAqCisgKiBUdXJ0bGUgQmVhY2ggTXVsdGlTb3VuZCBTb3VuZCBDYXJkIERyaXZlciBmb3IgTGludXgKKyAqCisgKiBTb21lIHBhcnRzIG9mIHRoaXMgaGVhZGVyIGZpbGUgd2VyZSBkZXJpdmVkIGZyb20gdGhlIFR1cnRsZSBCZWFjaAorICogTXVsdGlTb3VuZCBEcml2ZXIgRGV2ZWxvcG1lbnQgS2l0LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCBBbmRyZXcgVmVsaWF0aAorICogQ29weXJpZ2h0IChDKSAxOTkzIFR1cnRsZSBCZWFjaCBTeXN0ZW1zLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX01TTkRfUElOTkFDTEVfSAorI2RlZmluZSBfX01TTkRfUElOTkFDTEVfSAorCisjZGVmaW5lIERTUF9OVU1JTwkJCQkweDA4CisKKyNkZWZpbmUgSVJFR19MT0dERVZJQ0UJCQkJMHgwNworI2RlZmluZSBJUkVHX0FDVElWQVRFCQkJCTB4MzAKKyNkZWZpbmUgTERfQUNUSVZBVEUJCQkJMHgwMQorI2RlZmluZSBMRF9ESVNBQ1RJVkFURQkJCQkweDAwCisjZGVmaW5lIElSRUdfRUVDT05UUk9MCQkJCTB4M0YKKyNkZWZpbmUgSVJFR19NRU1CQVNFSEkJCQkJMHg0MAorI2RlZmluZSBJUkVHX01FTUJBU0VMTwkJCQkweDQxCisjZGVmaW5lIElSRUdfTUVNQ09OVFJPTAkJCQkweDQyCisjZGVmaW5lIElSRUdfTUVNUkFOR0VISQkJCQkweDQzCisjZGVmaW5lIElSRUdfTUVNUkFOR0VMTwkJCQkweDQ0CisjZGVmaW5lIE1FTVRZUEVfOEJJVAkJCQkweDAwCisjZGVmaW5lIE1FTVRZUEVfMTZCSVQJCQkJMHgwMgorI2RlZmluZSBNRU1UWVBFX1JBTkdFCQkJCTB4MDAKKyNkZWZpbmUgTUVNVFlQRV9ISUFERFIJCQkJMHgwMQorI2RlZmluZSBJUkVHX0lPMF9CQVNFSEkJCQkJMHg2MAorI2RlZmluZSBJUkVHX0lPMF9CQVNFTE8JCQkJMHg2MQorI2RlZmluZSBJUkVHX0lPMV9CQVNFSEkJCQkJMHg2MgorI2RlZmluZSBJUkVHX0lPMV9CQVNFTE8JCQkJMHg2MworI2RlZmluZSBJUkVHX0lSUV9OVU1CRVIJCQkJMHg3MAorI2RlZmluZSBJUkVHX0lSUV9UWVBFCQkJCTB4NzEKKyNkZWZpbmUgSVJRVFlQRV9ISUdICQkJCTB4MDIKKyNkZWZpbmUgSVJRVFlQRV9MT1cJCQkJMHgwMAorI2RlZmluZSBJUlFUWVBFX0xFVkVMCQkJCTB4MDEKKyNkZWZpbmUgSVJRVFlQRV9FREdFCQkJCTB4MDAKKworI2RlZmluZQlIUF9EU1BSCQkJCQkweDA0CisjZGVmaW5lCUhQX0JMS1MJCQkJCTB4MDQKKworI2RlZmluZSBIUERTUFJFU0VUX09GRgkJCQkyCisjZGVmaW5lIEhQRFNQUkVTRVRfT04JCQkJMAorCisjZGVmaW5lIEhQQkxLU0VMXzAJCQkJMgorI2RlZmluZSBIUEJMS1NFTF8xCQkJCTMKKworI2RlZmluZQlISU1UX0RBVF9PRkYJCQkJMHgwMworCisjZGVmaW5lCUhJRFNQX1BMQVlfVU5ERVIJCQkweDAwCisjZGVmaW5lCUhJRFNQX0lOVF9QTEFZX1VOREVSCQkJMHgwMQorI2RlZmluZQlISURTUF9TU0lfVFhfVU5ERVIgIAkJCTB4MDIKKyNkZWZpbmUgSElEU1BfUkVDUV9PVkVSRkxPVwkJCTB4MDgKKyNkZWZpbmUgSElEU1BfSU5UX1JFQ09SRF9PVkVSCQkJMHgwOQorI2RlZmluZSBISURTUF9TU0lfUlhfT1ZFUkZMT1cJCQkweDBhCisKKyNkZWZpbmUJSElEU1BfTUlESV9JTl9PVkVSCQkJMHgxMAorCisjZGVmaW5lCUhJRFNQX01JRElfRlJBTUVfRVJSCQkJMHgxMQorI2RlZmluZQlISURTUF9NSURJX1BBUklUWV9FUlIJCQkweDEyCisjZGVmaW5lCUhJRFNQX01JRElfT1ZFUlJVTl9FUlIJCQkweDEzCisKKyNkZWZpbmUgSElEU1BfSU5QVVRfQ0xJUFBJTkcJCQkweDIwCisjZGVmaW5lCUhJRFNQX01JWF9DTElQUElORwkJCTB4MzAKKyNkZWZpbmUgSElEU1BfREFUX0lOX09GRgkJCTB4MjEKKworI2RlZmluZSBUSU1FX1BST19SRVNFVF9ET05FCQkJMHgwMjhBCisjZGVmaW5lIFRJTUVfUFJPX1NZU0VYCQkJCTB4MDAxRQorI2RlZmluZSBUSU1FX1BST19SRVNFVAkJCQkweDAwMzIKKworI2RlZmluZSBEQVJfQlVGRl9TSVpFCQkJCTB4MTAwMAorCisjZGVmaW5lIE1JRFFfQlVGRl9TSVpFCQkJCTB4ODAwCisjZGVmaW5lIERTUFFfQlVGRl9TSVpFCQkJCTB4NUEwCisKKyNkZWZpbmUgRFNQUV9EQVRBX0JVRkYJCQkJMHg3ODYwCisKKyNkZWZpbmUgTU9QX1dBVkVIRFIJCQkJMAorI2RlZmluZSBNT1BfRVhUT1VUCQkJCTEKKyNkZWZpbmUgTU9QX0hXSU5JVAkJCQkweGZlCisjZGVmaW5lIE1PUF9OT05FCQkJCTB4ZmYKKyNkZWZpbmUgTU9QX01BWAkJCQkJMQorCisjZGVmaW5lIE1JUF9FWFRJTgkJCQkwCisjZGVmaW5lIE1JUF9XQVZFSERSCQkJCTEKKyNkZWZpbmUgTUlQX0hXSU5JVAkJCQkweGZlCisjZGVmaW5lIE1JUF9NQVgJCQkJCTEKKworLyogUGlubmFjbGUvRmlqaSBTTUEgQ29tbW9uIERhdGEgKi8KKyNkZWZpbmUgU01BX3dDdXJyUGxheUJ5dGVzCQkJMHgwMDAwCisjZGVmaW5lIFNNQV93Q3VyclJlY29yZEJ5dGVzCQkJMHgwMDAyCisjZGVmaW5lIFNNQV93Q3VyclBsYXlWb2xMZWZ0CQkJMHgwMDA0CisjZGVmaW5lIFNNQV93Q3VyclBsYXlWb2xSaWdodAkJCTB4MDAwNgorI2RlZmluZSBTTUFfd0N1cnJJblZvbExlZnQJCQkweDAwMDgKKyNkZWZpbmUgU01BX3dDdXJySW5Wb2xSaWdodAkJCTB4MDAwYQorI2RlZmluZSBTTUFfd0N1cnJNSGRyVm9sTGVmdAkJCTB4MDAwYworI2RlZmluZSBTTUFfd0N1cnJNSGRyVm9sUmlnaHQJCQkweDAwMGUKKyNkZWZpbmUgU01BX2R3Q3VyclBsYXlQaXRjaAkJCTB4MDAxMAorI2RlZmluZSBTTUFfZHdDdXJyUGxheVJhdGUJCQkweDAwMTQKKyNkZWZpbmUgU01BX3dDdXJyTUlESUlPUGF0Y2gJCQkweDAwMTgKKyNkZWZpbmUgU01BX3dDdXJyUGxheUZvcm1hdAkJCTB4MDAxYQorI2RlZmluZSBTTUFfd0N1cnJQbGF5U2FtcGxlU2l6ZQkJCTB4MDAxYworI2RlZmluZSBTTUFfd0N1cnJQbGF5Q2hhbm5lbHMJCQkweDAwMWUKKyNkZWZpbmUgU01BX3dDdXJyUGxheVNhbXBsZVJhdGUJCQkweDAwMjAKKyNkZWZpbmUgU01BX3dDdXJyUmVjb3JkRm9ybWF0CQkJMHgwMDIyCisjZGVmaW5lIFNNQV93Q3VyclJlY29yZFNhbXBsZVNpemUJCTB4MDAyNAorI2RlZmluZSBTTUFfd0N1cnJSZWNvcmRDaGFubmVscwkJCTB4MDAyNgorI2RlZmluZSBTTUFfd0N1cnJSZWNvcmRTYW1wbGVSYXRlCQkweDAwMjgKKyNkZWZpbmUgU01BX3dDdXJyRFNQU3RhdHVzRmxhZ3MJCQkweDAwMmEKKyNkZWZpbmUgU01BX3dDdXJySG9zdFN0YXR1c0ZsYWdzCQkweDAwMmMKKyNkZWZpbmUgU01BX3dDdXJySW5wdXRUYWdCaXRzCQkJMHgwMDJlCisjZGVmaW5lIFNNQV93Q3VyckxlZnRQZWFrCQkJMHgwMDMwCisjZGVmaW5lIFNNQV93Q3VyclJpZ2h0UGVhawkJCTB4MDAzMgorI2RlZmluZSBTTUFfYk1pY1BvdFBvc0xlZnQJCQkweDAwMzQKKyNkZWZpbmUgU01BX2JNaWNQb3RQb3NSaWdodAkJCTB4MDAzNQorI2RlZmluZSBTTUFfYk1pY1BvdE1heExlZnQJCQkweDAwMzYKKyNkZWZpbmUgU01BX2JNaWNQb3RNYXhSaWdodAkJCTB4MDAzNworI2RlZmluZSBTTUFfYkluUG90UG9zTGVmdAkJCTB4MDAzOAorI2RlZmluZSBTTUFfYkluUG90UG9zUmlnaHQJCQkweDAwMzkKKyNkZWZpbmUgU01BX2JBdXhQb3RQb3NMZWZ0CQkJMHgwMDNhCisjZGVmaW5lIFNNQV9iQXV4UG90UG9zUmlnaHQJCQkweDAwM2IKKyNkZWZpbmUgU01BX2JJblBvdE1heExlZnQJCQkweDAwM2MKKyNkZWZpbmUgU01BX2JJblBvdE1heFJpZ2h0CQkJMHgwMDNkCisjZGVmaW5lIFNNQV9iQXV4UG90TWF4TGVmdAkJCTB4MDAzZQorI2RlZmluZSBTTUFfYkF1eFBvdE1heFJpZ2h0CQkJMHgwMDNmCisjZGVmaW5lIFNNQV9iSW5Qb3RNYXhNZXRob2QJCQkweDAwNDAKKyNkZWZpbmUgU01BX2JBdXhQb3RNYXhNZXRob2QJCQkweDAwNDEKKyNkZWZpbmUgU01BX3dDdXJyTWFzdFZvbExlZnQJCQkweDAwNDIKKyNkZWZpbmUgU01BX3dDdXJyTWFzdFZvbFJpZ2h0CQkJMHgwMDQ0CisjZGVmaW5lIFNNQV93Q2FsRnJlcUF0b0QJCQkweDAwNDYKKyNkZWZpbmUgU01BX3dDdXJyQXV4Vm9sTGVmdAkJCTB4MDA0OAorI2RlZmluZSBTTUFfd0N1cnJBdXhWb2xSaWdodAkJCTB4MDA0YQorI2RlZmluZSBTTUFfd0N1cnJQbGF5MVZvbExlZnQJCQkweDAwNGMKKyNkZWZpbmUgU01BX3dDdXJyUGxheTFWb2xSaWdodAkJCTB4MDA0ZQorI2RlZmluZSBTTUFfd0N1cnJQbGF5MlZvbExlZnQJCQkweDAwNTAKKyNkZWZpbmUgU01BX3dDdXJyUGxheTJWb2xSaWdodAkJCTB4MDA1MgorI2RlZmluZSBTTUFfd0N1cnJQbGF5M1ZvbExlZnQJCQkweDAwNTQKKyNkZWZpbmUgU01BX3dDdXJyUGxheTNWb2xSaWdodAkJCTB4MDA1NgorI2RlZmluZSBTTUFfd0N1cnJQbGF5NFZvbExlZnQJCQkweDAwNTgKKyNkZWZpbmUgU01BX3dDdXJyUGxheTRWb2xSaWdodAkJCTB4MDA1YQorI2RlZmluZSBTTUFfd0N1cnJQbGF5MVBlYWtMZWZ0CQkJMHgwMDVjCisjZGVmaW5lIFNNQV93Q3VyclBsYXkxUGVha1JpZ2h0CQkJMHgwMDVlCisjZGVmaW5lIFNNQV93Q3VyclBsYXkyUGVha0xlZnQJCQkweDAwNjAKKyNkZWZpbmUgU01BX3dDdXJyUGxheTJQZWFrUmlnaHQJCQkweDAwNjIKKyNkZWZpbmUgU01BX3dDdXJyUGxheTNQZWFrTGVmdAkJCTB4MDA2NAorI2RlZmluZSBTTUFfd0N1cnJQbGF5M1BlYWtSaWdodAkJCTB4MDA2NgorI2RlZmluZSBTTUFfd0N1cnJQbGF5NFBlYWtMZWZ0CQkJMHgwMDY4CisjZGVmaW5lIFNNQV93Q3VyclBsYXk0UGVha1JpZ2h0CQkJMHgwMDZhCisjZGVmaW5lIFNNQV93Q3VyclBsYXlQZWFrTGVmdAkJCTB4MDA2YworI2RlZmluZSBTTUFfd0N1cnJQbGF5UGVha1JpZ2h0CQkJMHgwMDZlCisjZGVmaW5lIFNNQV93Q3VyckRBVFNSCQkJCTB4MDA3MAorI2RlZmluZSBTTUFfd0N1cnJEQVRSWENITkwJCQkweDAwNzIKKyNkZWZpbmUgU01BX3dDdXJyREFUVFhDSE5MCQkJMHgwMDc0CisjZGVmaW5lIFNNQV93Q3VyckRBVFJYUmF0ZQkJCTB4MDA3NgorI2RlZmluZSBTTUFfZHdEU1BQbGF5Q291bnQJCQkweDAwNzgKKyNkZWZpbmUgU01BX19zaXplCQkJCTB4MDA3YworCisjZGVmaW5lIElOSVRDT0RFRklMRQkJInR1cnRsZWJlYWNoL3BuZHNwaW5pLmJpbiIKKyNkZWZpbmUgUEVSTUNPREVGSUxFCQkidHVydGxlYmVhY2gvcG5kc3Blcm0uYmluIgorI2RlZmluZSBMT05HTkFNRQkJIk11bHRpU291bmQgKFBpbm5hY2xlL0ZpamkpIgorCisjZW5kaWYgLyogX19NU05EX1BJTk5BQ0xFX0ggKi8KZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9tc25kL21zbmRfcGlubmFjbGVfbWl4ZXIuYyBiL3NvdW5kL2lzYS9tc25kL21zbmRfcGlubmFjbGVfbWl4ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTQwNThhCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvaXNhL21zbmQvbXNuZF9waW5uYWNsZV9taXhlci5jCkBAIC0wLDAgKzEsMzQzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJCQkgIG1zbmRfcGlubmFjbGVfbWl4ZXIuYyAgLSAgZGVzY3JpcHRpb24KKwkJCSAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIGJlZ2luCQk6IEZyZSBKdW4gNyAyMDAyCisgICAgY29weXJpZ2h0IAkJOiAoQykgMjAwMiBieSBrYXJzdGVuIHdpZXNlCisgICAgZW1haWwJCTogYW5uYWJlbGxlc2dhcmRlbkB5YWhvby5kZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoJCQkJCQkJICAgICAgCQkgICAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCisgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCisgKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCQkJCSAgICoKKyAqCQkJCQkJCQkJICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvY29udHJvbC5oPgorI2luY2x1ZGUgIm1zbmQuaCIKKyNpbmNsdWRlICJtc25kX3Bpbm5hY2xlLmgiCisKKworI2RlZmluZSBNU05EX01JWEVSX1ZPTFVNRQkwCisjZGVmaW5lIE1TTkRfTUlYRVJfUENNCQkxCisjZGVmaW5lIE1TTkRfTUlYRVJfQVVYCQkyCS8qIElucHV0IHNvdXJjZSAxICAoYXV4MSkgKi8KKyNkZWZpbmUgTVNORF9NSVhFUl9JTUlYCQkzCS8qICBSZWNvcmRpbmcgbW9uaXRvciAgKi8KKyNkZWZpbmUgTVNORF9NSVhFUl9TWU5USAk0CisjZGVmaW5lIE1TTkRfTUlYRVJfU1BFQUtFUgk1CisjZGVmaW5lIE1TTkRfTUlYRVJfTElORQkJNgorI2RlZmluZSBNU05EX01JWEVSX01JQwkJNworI2RlZmluZSBNU05EX01JWEVSX1JFQ0xFVgkxMQkvKiBSZWNvcmRpbmcgbGV2ZWwgKi8KKyNkZWZpbmUgTVNORF9NSVhFUl9JR0FJTgkxMgkvKiBJbnB1dCBnYWluICovCisjZGVmaW5lIE1TTkRfTUlYRVJfT0dBSU4JMTMJLyogT3V0cHV0IGdhaW4gKi8KKyNkZWZpbmUgTVNORF9NSVhFUl9ESUdJVEFMCTE3CS8qIERpZ2l0YWwgKGlucHV0KSAxICovCisKKy8qCURldmljZSBtYXNrIGJpdHMJKi8KKworI2RlZmluZSBNU05EX01BU0tfVk9MVU1FCSgxIDw8IE1TTkRfTUlYRVJfVk9MVU1FKQorI2RlZmluZSBNU05EX01BU0tfU1lOVEgJCSgxIDw8IE1TTkRfTUlYRVJfU1lOVEgpCisjZGVmaW5lIE1TTkRfTUFTS19QQ00JCSgxIDw8IE1TTkRfTUlYRVJfUENNKQorI2RlZmluZSBNU05EX01BU0tfU1BFQUtFUgkoMSA8PCBNU05EX01JWEVSX1NQRUFLRVIpCisjZGVmaW5lIE1TTkRfTUFTS19MSU5FCQkoMSA8PCBNU05EX01JWEVSX0xJTkUpCisjZGVmaW5lIE1TTkRfTUFTS19NSUMJCSgxIDw8IE1TTkRfTUlYRVJfTUlDKQorI2RlZmluZSBNU05EX01BU0tfSU1JWAkJKDEgPDwgTVNORF9NSVhFUl9JTUlYKQorI2RlZmluZSBNU05EX01BU0tfUkVDTEVWCSgxIDw8IE1TTkRfTUlYRVJfUkVDTEVWKQorI2RlZmluZSBNU05EX01BU0tfSUdBSU4JCSgxIDw8IE1TTkRfTUlYRVJfSUdBSU4pCisjZGVmaW5lIE1TTkRfTUFTS19PR0FJTgkJKDEgPDwgTVNORF9NSVhFUl9PR0FJTikKKyNkZWZpbmUgTVNORF9NQVNLX0FVWAkJKDEgPDwgTVNORF9NSVhFUl9BVVgpCisjZGVmaW5lIE1TTkRfTUFTS19ESUdJVEFMCSgxIDw8IE1TTkRfTUlYRVJfRElHSVRBTCkKKworc3RhdGljIGludCBzbmRfbXNuZG1peF9pbmZvX211eChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQoreworCXN0YXRpYyBjaGFyICp0ZXh0c1szXSA9IHsKKwkJIkFuYWxvZyIsICJNQVNTIiwgIlNQRElGIiwKKwl9OworCXN0cnVjdCBzbmRfbXNuZCAqY2hpcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwl1bnNpZ25lZCBpdGVtcyA9IHRlc3RfYml0KEZfSEFWRURJR0lUQUwsICZjaGlwLT5mbGFncykgPyAzIDogMjsKKworCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9FTlVNRVJBVEVEOworCXVpbmZvLT5jb3VudCA9IDE7CisJdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgPSBpdGVtczsKKwlpZiAodWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA+PSBpdGVtcykKKwkJdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA9IGl0ZW1zIC0gMTsKKwlzdHJjcHkodWluZm8tPnZhbHVlLmVudW1lcmF0ZWQubmFtZSwKKwkJdGV4dHNbdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbV0pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9tc25kbWl4X2dldF9tdXgoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNuZF9tc25kICpjaGlwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCS8qIE1TTkRfTUFTS19JTUlYIGlzIHRoZSBkZWZhdWx0ICovCisJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IDA7CisKKwlpZiAoY2hpcC0+cmVjc3JjICYgTVNORF9NQVNLX1NZTlRIKSB7CisJCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSAxOworCX0gZWxzZSBpZiAoKGNoaXAtPnJlY3NyYyAmIE1TTkRfTUFTS19ESUdJVEFMKSAmJgorCQkgdGVzdF9iaXQoRl9IQVZFRElHSVRBTCwgJmNoaXAtPmZsYWdzKSkgeworCQl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gMjsKKwl9CisKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9tc25kbWl4X3NldF9tdXgoc3RydWN0IHNuZF9tc25kICpjaGlwLCBpbnQgdmFsKQoreworCXVuc2lnbmVkIG5ld3JlY3NyYzsKKwlpbnQgY2hhbmdlOworCXVuc2lnbmVkIGNoYXIgbXNuZGJ5dGU7CisKKwlzd2l0Y2ggKHZhbCkgeworCWNhc2UgMDoKKwkJbmV3cmVjc3JjID0gTVNORF9NQVNLX0lNSVg7CisJCW1zbmRieXRlID0gSERFWEFSX1NFVF9BTkFfSU47CisJCWJyZWFrOworCWNhc2UgMToKKwkJbmV3cmVjc3JjID0gTVNORF9NQVNLX1NZTlRIOworCQltc25kYnl0ZSA9IEhERVhBUl9TRVRfU1lOVEhfSU47CisJCWJyZWFrOworCWNhc2UgMjoKKwkJbmV3cmVjc3JjID0gTVNORF9NQVNLX0RJR0lUQUw7CisJCW1zbmRieXRlID0gSERFWEFSX1NFVF9EQVRfSU47CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwljaGFuZ2UgID0gbmV3cmVjc3JjICE9IGNoaXAtPnJlY3NyYzsKKwlpZiAoY2hhbmdlKSB7CisJCWNoYW5nZSA9IDA7CisJCWlmICghc25kX21zbmRfc2VuZF93b3JkKGNoaXAsIDAsIDAsIG1zbmRieXRlKSkKKwkJCWlmICghc25kX21zbmRfc2VuZF9kc3BfY21kKGNoaXAsIEhERVhfQVVYX1JFUSkpIHsKKwkJCQljaGlwLT5yZWNzcmMgPSBuZXdyZWNzcmM7CisJCQkJY2hhbmdlID0gMTsKKwkJCX0KKwl9CisJcmV0dXJuIGNoYW5nZTsKK30KKworc3RhdGljIGludCBzbmRfbXNuZG1peF9wdXRfbXV4KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfbXNuZCAqbXNuZCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlyZXR1cm4gc25kX21zbmRtaXhfc2V0X211eChtc25kLCB1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdKTsKK30KKworCitzdGF0aWMgaW50IHNuZF9tc25kbWl4X3ZvbHVtZV9pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCSAgIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCit7CisJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0lOVEVHRVI7CisJdWluZm8tPmNvdW50ID0gMjsKKwl1aW5mby0+dmFsdWUuaW50ZWdlci5taW4gPSAwOworCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1heCA9IDEwMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfbXNuZG1peF92b2x1bWVfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCSAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNuZF9tc25kICptc25kID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCWludCBhZGRyID0ga2NvbnRyb2wtPnByaXZhdGVfdmFsdWU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZtc25kLT5taXhlcl9sb2NrLCBmbGFncyk7CisJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBtc25kLT5sZWZ0X2xldmVsc1thZGRyXSAqIDEwMDsKKwl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSAvPSAweEZGRkY7CisJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMV0gPSBtc25kLT5yaWdodF9sZXZlbHNbYWRkcl0gKiAxMDA7CisJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMV0gLz0gMHhGRkZGOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1zbmQtPm1peGVyX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSB1cGRhdGVfdm9sbShhLCBiKQkJCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCXdyaXRldygoZGV2LT5sZWZ0X2xldmVsc1thXSA+PiAxKSAqCQkJXAorCQkgICAgICAgcmVhZHcoZGV2LT5TTUEgKyBTTUFfd0N1cnJNYXN0Vm9sTGVmdCkgLyAweGZmZmYsCVwKKwkJICAgICAgIGRldi0+U01BICsgU01BXyMjYiMjTGVmdCk7CQkJXAorCQl3cml0ZXcoKGRldi0+cmlnaHRfbGV2ZWxzW2FdID4+IDEpICAqCQkJXAorCQkgICAgICAgcmVhZHcoZGV2LT5TTUEgKyBTTUFfd0N1cnJNYXN0Vm9sUmlnaHQpIC8gMHhmZmZmLCBcCisJCSAgICAgICBkZXYtPlNNQSArIFNNQV8jI2IjI1JpZ2h0KTsJCQlcCisJfSB3aGlsZSAoMCk7CisKKyNkZWZpbmUgdXBkYXRlX3BvdG0oZCwgcywgYXIpCQkJCQkJXAorCWRvIHsJCQkJCQkJCVwKKwkJd3JpdGViKChkZXYtPmxlZnRfbGV2ZWxzW2RdID4+IDgpICoJCQlcCisJCSAgICAgICByZWFkdyhkZXYtPlNNQSArIFNNQV93Q3Vyck1hc3RWb2xMZWZ0KSAvIDB4ZmZmZiwgXAorCQkgICAgICAgZGV2LT5TTUEgKyBTTUFfIyNzIyNMZWZ0KTsJCQlcCisJCXdyaXRlYigoZGV2LT5yaWdodF9sZXZlbHNbZF0gPj4gOCkgKgkJCVwKKwkJICAgICAgIHJlYWR3KGRldi0+U01BICsgU01BX3dDdXJyTWFzdFZvbFJpZ2h0KSAvIDB4ZmZmZiwgXAorCQkgICAgICAgZGV2LT5TTUEgKyBTTUFfIyNzIyNSaWdodCk7CQkJXAorCQlpZiAoc25kX21zbmRfc2VuZF93b3JkKGRldiwgMCwgMCwgYXIpID09IDApCQlcCisJCQlzbmRfbXNuZF9zZW5kX2RzcF9jbWQoZGV2LCBIREVYX0FVWF9SRVEpOwlcCisJfSB3aGlsZSAoMCk7CisKKyNkZWZpbmUgdXBkYXRlX3BvdChkLCBzLCBhcikJCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQl3cml0ZWIoZGV2LT5sZWZ0X2xldmVsc1tkXSA+PiA4LAkJCVwKKwkJICAgICAgIGRldi0+U01BICsgU01BXyMjcyMjTGVmdCk7CQkJXAorCQl3cml0ZWIoZGV2LT5yaWdodF9sZXZlbHNbZF0gPj4gOCwJCQlcCisJCSAgICAgICBkZXYtPlNNQSArIFNNQV8jI3MjI1JpZ2h0KTsJCQlcCisJCWlmIChzbmRfbXNuZF9zZW5kX3dvcmQoZGV2LCAwLCAwLCBhcikgPT0gMCkJCVwKKwkJCXNuZF9tc25kX3NlbmRfZHNwX2NtZChkZXYsIEhERVhfQVVYX1JFUSk7CVwKKwl9IHdoaWxlICgwKTsKKworCitzdGF0aWMgaW50IHNuZF9tc25kbWl4X3NldChzdHJ1Y3Qgc25kX21zbmQgKmRldiwgaW50IGQsIGludCBsZWZ0LCBpbnQgcmlnaHQpCit7CisJaW50IGJMZWZ0LCBiUmlnaHQ7CisJaW50IHdMZWZ0LCB3UmlnaHQ7CisJaW50IHVwZGF0ZW1hc3RlciA9IDA7CisKKwlpZiAoZCA+PSBMRVZFTF9FTlRSSUVTKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWJMZWZ0ID0gbGVmdCAqIDB4ZmYgLyAxMDA7CisJd0xlZnQgPSBsZWZ0ICogMHhmZmZmIC8gMTAwOworCisJYlJpZ2h0ID0gcmlnaHQgKiAweGZmIC8gMTAwOworCXdSaWdodCA9IHJpZ2h0ICogMHhmZmZmIC8gMTAwOworCisJZGV2LT5sZWZ0X2xldmVsc1tkXSA9IHdMZWZ0OworCWRldi0+cmlnaHRfbGV2ZWxzW2RdID0gd1JpZ2h0OworCisJc3dpdGNoIChkKSB7CisJCS8qIG1hc3RlciB2b2x1bWUgdW5zY2FsZWQgY29udHJvbHMgKi8KKwljYXNlIE1TTkRfTUlYRVJfTElORToJCQkvKiBsaW5lIHBvdCBjb250cm9sICovCisJCS8qIHNjYWxlZCBieSBJTUlYIGluIGRpZ2l0YWwgbWl4ICovCisJCXdyaXRlYihiTGVmdCwgZGV2LT5TTUEgKyBTTUFfYkluUG90UG9zTGVmdCk7CisJCXdyaXRlYihiUmlnaHQsIGRldi0+U01BICsgU01BX2JJblBvdFBvc1JpZ2h0KTsKKwkJaWYgKHNuZF9tc25kX3NlbmRfd29yZChkZXYsIDAsIDAsIEhERVhBUl9JTl9TRVRfUE9UUykgPT0gMCkKKwkJCXNuZF9tc25kX3NlbmRfZHNwX2NtZChkZXYsIEhERVhfQVVYX1JFUSk7CisJCWJyZWFrOworCWNhc2UgTVNORF9NSVhFUl9NSUM6CQkJLyogbWljIHBvdCBjb250cm9sICovCisJCWlmIChkZXYtPnR5cGUgPT0gbXNuZENsYXNzaWMpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJLyogc2NhbGVkIGJ5IElNSVggaW4gZGlnaXRhbCBtaXggKi8KKwkJd3JpdGViKGJMZWZ0LCBkZXYtPlNNQSArIFNNQV9iTWljUG90UG9zTGVmdCk7CisJCXdyaXRlYihiUmlnaHQsIGRldi0+U01BICsgU01BX2JNaWNQb3RQb3NSaWdodCk7CisJCWlmIChzbmRfbXNuZF9zZW5kX3dvcmQoZGV2LCAwLCAwLCBIREVYQVJfTUlDX1NFVF9QT1RTKSA9PSAwKQorCQkJc25kX21zbmRfc2VuZF9kc3BfY21kKGRldiwgSERFWF9BVVhfUkVRKTsKKwkJYnJlYWs7CisJY2FzZSBNU05EX01JWEVSX1ZPTFVNRToJCS8qIG1hc3RlciB2b2x1bWUgKi8KKwkJd3JpdGV3KHdMZWZ0LCBkZXYtPlNNQSArIFNNQV93Q3Vyck1hc3RWb2xMZWZ0KTsKKwkJd3JpdGV3KHdSaWdodCwgZGV2LT5TTUEgKyBTTUFfd0N1cnJNYXN0Vm9sUmlnaHQpOworCQkvKiBmYWxsIHRocm91Z2ggKi8KKworCWNhc2UgTVNORF9NSVhFUl9BVVg6CQkJLyogYXV4IHBvdCBjb250cm9sICovCisJCS8qIHNjYWxlZCBieSBtYXN0ZXIgdm9sdW1lICovCisJCS8qIGZhbGwgdGhyb3VnaCAqLworCisJCS8qIGRpZ2l0YWwgY29udHJvbHMgKi8KKwljYXNlIE1TTkRfTUlYRVJfU1lOVEg6CQkJLyogc3ludGggdm9sIChkc3AgbWl4KSAqLworCWNhc2UgTVNORF9NSVhFUl9QQ006CQkJLyogcGNtIHZvbCAoZHNwIG1peCkgKi8KKwljYXNlIE1TTkRfTUlYRVJfSU1JWDoJCQkvKiBpbnB1dCBtb25pdG9yIChkc3AgbWl4KSAqLworCQkvKiBzY2FsZWQgYnkgbWFzdGVyIHZvbHVtZSAqLworCQl1cGRhdGVtYXN0ZXIgPSAxOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICh1cGRhdGVtYXN0ZXIpIHsKKwkJLyogdXBkYXRlIG1hc3RlciB2b2x1bWUgc2NhbGVkIGNvbnRyb2xzICovCisJCXVwZGF0ZV92b2xtKE1TTkRfTUlYRVJfUENNLCB3Q3VyclBsYXlWb2wpOworCQl1cGRhdGVfdm9sbShNU05EX01JWEVSX0lNSVgsIHdDdXJySW5Wb2wpOworCQlpZiAoZGV2LT50eXBlID09IG1zbmRQaW5uYWNsZSkKKwkJCXVwZGF0ZV92b2xtKE1TTkRfTUlYRVJfU1lOVEgsIHdDdXJyTUhkclZvbCk7CisJCXVwZGF0ZV9wb3RtKE1TTkRfTUlYRVJfQVVYLCBiQXV4UG90UG9zLCBIREVYQVJfQVVYX1NFVF9QT1RTKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfbXNuZG1peF92b2x1bWVfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCSAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNuZF9tc25kICptc25kID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCWludCBjaGFuZ2UsIGFkZHIgPSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZTsKKwlpbnQgbGVmdCwgcmlnaHQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxlZnQgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSAlIDEwMTsKKwlyaWdodCA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdICUgMTAxOworCXNwaW5fbG9ja19pcnFzYXZlKCZtc25kLT5taXhlcl9sb2NrLCBmbGFncyk7CisJY2hhbmdlID0gbXNuZC0+bGVmdF9sZXZlbHNbYWRkcl0gIT0gbGVmdAorCQl8fCBtc25kLT5yaWdodF9sZXZlbHNbYWRkcl0gIT0gcmlnaHQ7CisJc25kX21zbmRtaXhfc2V0KG1zbmQsIGFkZHIsIGxlZnQsIHJpZ2h0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtc25kLT5taXhlcl9sb2NrLCBmbGFncyk7CisJcmV0dXJuIGNoYW5nZTsKK30KKworCisjZGVmaW5lIERVTU1ZX1ZPTFVNRSh4bmFtZSwgeGluZGV4LCBhZGRyKSBcCit7IC5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLCAubmFtZSA9IHhuYW1lLCAuaW5kZXggPSB4aW5kZXgsIFwKKyAgLmluZm8gPSBzbmRfbXNuZG1peF92b2x1bWVfaW5mbywgXAorICAuZ2V0ID0gc25kX21zbmRtaXhfdm9sdW1lX2dldCwgLnB1dCA9IHNuZF9tc25kbWl4X3ZvbHVtZV9wdXQsIFwKKyAgLnByaXZhdGVfdmFsdWUgPSBhZGRyIH0KKworCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX21zbmRfY29udHJvbHNbXSA9IHsKK0RVTU1ZX1ZPTFVNRSgiTWFzdGVyIFZvbHVtZSIsIDAsIE1TTkRfTUlYRVJfVk9MVU1FKSwKK0RVTU1ZX1ZPTFVNRSgiUENNIFZvbHVtZSIsIDAsIE1TTkRfTUlYRVJfUENNKSwKK0RVTU1ZX1ZPTFVNRSgiQXV4IFZvbHVtZSIsIDAsIE1TTkRfTUlYRVJfQVVYKSwKK0RVTU1ZX1ZPTFVNRSgiTGluZSBWb2x1bWUiLCAwLCBNU05EX01JWEVSX0xJTkUpLAorRFVNTVlfVk9MVU1FKCJNaWMgVm9sdW1lIiwgMCwgTVNORF9NSVhFUl9NSUMpLAorRFVNTVlfVk9MVU1FKCJNb25pdG9yIiwJMCwgTVNORF9NSVhFUl9JTUlYKSwKK3sKKwkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkubmFtZSA9ICJDYXB0dXJlIFNvdXJjZSIsCisJLmluZm8gPSBzbmRfbXNuZG1peF9pbmZvX211eCwKKwkuZ2V0ID0gc25kX21zbmRtaXhfZ2V0X211eCwKKwkucHV0ID0gc25kX21zbmRtaXhfcHV0X211eCwKK30KK307CisKKworaW50IF9fZGV2aW5pdCBzbmRfbXNuZG1peF9uZXcoc3RydWN0IHNuZF9jYXJkICpjYXJkKQoreworCXN0cnVjdCBzbmRfbXNuZCAqY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBpbnQgaWR4OworCWludCBlcnI7CisKKwlpZiAoc25kX0JVR19PTighY2hpcCkpCisJCXJldHVybiAtRUlOVkFMOworCXNwaW5fbG9ja19pbml0KCZjaGlwLT5taXhlcl9sb2NrKTsKKwlzdHJjcHkoY2FyZC0+bWl4ZXJuYW1lLCAiTVNORCBQaW5uYWNsZSBNaXhlciIpOworCisJZm9yIChpZHggPSAwOyBpZHggPCBBUlJBWV9TSVpFKHNuZF9tc25kX2NvbnRyb2xzKTsgaWR4KyspCisJCWVyciA9IHNuZF9jdGxfYWRkKGNhcmQsCisJCQkJICBzbmRfY3RsX25ldzEoc25kX21zbmRfY29udHJvbHMgKyBpZHgsIGNoaXApKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKHNuZF9tc25kbWl4X25ldyk7CisKK3ZvaWQgc25kX21zbmRtaXhfc2V0dXAoc3RydWN0IHNuZF9tc25kICpkZXYpCit7CisJdXBkYXRlX3BvdChNU05EX01JWEVSX0xJTkUsIGJJblBvdFBvcywgSERFWEFSX0lOX1NFVF9QT1RTKTsKKwl1cGRhdGVfcG90bShNU05EX01JWEVSX0FVWCwgYkF1eFBvdFBvcywgSERFWEFSX0FVWF9TRVRfUE9UUyk7CisJdXBkYXRlX3ZvbG0oTVNORF9NSVhFUl9QQ00sIHdDdXJyUGxheVZvbCk7CisJdXBkYXRlX3ZvbG0oTVNORF9NSVhFUl9JTUlYLCB3Q3VyckluVm9sKTsKKwlpZiAoZGV2LT50eXBlID09IG1zbmRQaW5uYWNsZSkgeworCQl1cGRhdGVfcG90KE1TTkRfTUlYRVJfTUlDLCBiTWljUG90UG9zLCBIREVYQVJfTUlDX1NFVF9QT1RTKTsKKwkJdXBkYXRlX3ZvbG0oTVNORF9NSVhFUl9TWU5USCwgd0N1cnJNSGRyVm9sKTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKHNuZF9tc25kbWl4X3NldHVwKTsKKworaW50IHNuZF9tc25kbWl4X2ZvcmNlX3JlY3NyYyhzdHJ1Y3Qgc25kX21zbmQgKmRldiwgaW50IHJlY3NyYykKK3sKKwlkZXYtPnJlY3NyYyA9IC0xOworCXJldHVybiBzbmRfbXNuZG1peF9zZXRfbXV4KGRldiwgcmVjc3JjKTsKK30KK0VYUE9SVF9TWU1CT0woc25kX21zbmRtaXhfZm9yY2VfcmVjc3JjKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9vcGwzc2EyLmMgYi9zb3VuZC9pc2Evb3BsM3NhMi5jCmluZGV4IGI4NDhkMTAuLmVmOTUyNzlkIDEwMDY0NAotLS0gYS9zb3VuZC9pc2Evb3BsM3NhMi5jCisrKyBiL3NvdW5kL2lzYS9vcGwzc2EyLmMKQEAgLTE3OSwxMiArMTc5LDEzIEBACiAJdW5zaWduZWQgY2hhciByZXN1bHQ7CiAjaWYgMAogCW91dGIoMHgxZCwgcG9ydCk7CS8qIHBhc3N3b3JkICovCi0JcHJpbnRrKCJyZWFkIFsweCVseF0gPSAweCV4XG4iLCBwb3J0LCBpbmIocG9ydCkpOworCXByaW50ayhLRVJOX0RFQlVHICJyZWFkIFsweCVseF0gPSAweCV4XG4iLCBwb3J0LCBpbmIocG9ydCkpOwogI2VuZGlmCiAJb3V0YihyZWcsIGNoaXAtPnBvcnQpOwkvKiByZWdpc3RlciAqLwogCXJlc3VsdCA9IGluYihjaGlwLT5wb3J0ICsgMSk7CiAjaWYgMAotCXByaW50aygicmVhZCBbMHglbHhdID0gMHgleCBbMHgleF1cbiIsIHBvcnQsIHJlc3VsdCwgaW5iKHBvcnQpKTsKKwlwcmludGsoS0VSTl9ERUJVRyAicmVhZCBbMHglbHhdID0gMHgleCBbMHgleF1cbiIsCisJICAgICAgIHBvcnQsIHJlc3VsdCwgaW5iKHBvcnQpKTsKICNlbmRpZgogCXJldHVybiByZXN1bHQ7CiB9CkBAIC0yMzMsNyArMjM0LDEwIEBACiAJCXNuZF9wcmludGsoS0VSTl9FUlIgUEZYICJjYW4ndCBncmFiIHBvcnQgMHglbHhcbiIsIHBvcnQpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KLQkvLyBzbmRfcHJpbnRrKCJSRUcgMEEgPSAweCV4XG4iLCBzbmRfb3BsM3NhMl9yZWFkKGNoaXAsIDB4MGEpKTsKKwkvKgorCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiUkVHIDBBID0gMHgleFxuIiwKKwkJICAgc25kX29wbDNzYTJfcmVhZChjaGlwLCAweDBhKSk7CisJKi8KIAljaGlwLT52ZXJzaW9uID0gMDsKIAl0bXAgPSBzbmRfb3BsM3NhMl9yZWFkKGNoaXAsIE9QTDNTQTJfTUlTQyk7CiAJaWYgKHRtcCA9PSAweGZmKSB7CkBAIC02MTksMjUgKzYyMywyOCBAQAogewogCXN0cnVjdCBzbmRfb3BsM3NhMiAqY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAlpZiAoY2hpcC0+aXJxID49IDApCi0JCWZyZWVfaXJxKGNoaXAtPmlycSwgKHZvaWQgKiljaGlwKTsKKwkJZnJlZV9pcnEoY2hpcC0+aXJxLCBjYXJkKTsKIAlyZWxlYXNlX2FuZF9mcmVlX3Jlc291cmNlKGNoaXAtPnJlc19wb3J0KTsKIH0KIAotc3RhdGljIHN0cnVjdCBzbmRfY2FyZCAqc25kX29wbDNzYTJfY2FyZF9uZXcoaW50IGRldikKK3N0YXRpYyBpbnQgc25kX29wbDNzYTJfY2FyZF9uZXcoaW50IGRldiwgc3RydWN0IHNuZF9jYXJkICoqY2FyZHApCiB7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCXN0cnVjdCBzbmRfb3BsM3NhMiAqY2hpcDsKKwlpbnQgZXJyOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgc2l6ZW9mKHN0cnVjdCBzbmRfb3BsM3NhMikpOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiBOVUxMOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKKwkJCSAgICAgIHNpemVvZihzdHJ1Y3Qgc25kX29wbDNzYTIpLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAJc3RyY3B5KGNhcmQtPmRyaXZlciwgIk9QTDNTQTIiKTsKLQlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAiWWFtYWhhIE9QTDMtU0EyIik7CisJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgIllhbWFoYSBPUEwzLVNBIik7CiAJY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAlzcGluX2xvY2tfaW5pdCgmY2hpcC0+cmVnX2xvY2spOwogCWNoaXAtPmlycSA9IC0xOwogCWNhcmQtPnByaXZhdGVfZnJlZSA9IHNuZF9vcGwzc2EyX2ZyZWU7Ci0JcmV0dXJuIGNhcmQ7CisJKmNhcmRwID0gY2FyZDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBfX2RldmluaXQgc25kX29wbDNzYTJfcHJvYmUoc3RydWN0IHNuZF9jYXJkICpjYXJkLCBpbnQgZGV2KQpAQCAtNzI5LDkgKzczNiw5IEBACiAJaWYgKGRldiA+PSBTTkRSVl9DQVJEUykKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQljYXJkID0gc25kX29wbDNzYTJfY2FyZF9uZXcoZGV2KTsKLQlpZiAoISBjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfb3BsM3NhMl9jYXJkX25ldyhkZXYsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAlpZiAoKGVyciA9IHNuZF9vcGwzc2EyX3BucChkZXYsIGNhcmQtPnByaXZhdGVfZGF0YSwgcGRldikpIDwgMCkgewogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwogCQlyZXR1cm4gZXJyOwpAQCAtNzk1LDkgKzgwMiw5IEBACiAJaWYgKGRldiA+PSBTTkRSVl9DQVJEUykKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQljYXJkID0gc25kX29wbDNzYTJfY2FyZF9uZXcoZGV2KTsKLQlpZiAoISBjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfb3BsM3NhMl9jYXJkX25ldyhkZXYsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAlpZiAoKGVyciA9IHNuZF9vcGwzc2EyX3BucChkZXYsIGNhcmQtPnByaXZhdGVfZGF0YSwgcGRldikpIDwgMCkgewogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwogCQlyZXR1cm4gZXJyOwpAQCAtODc2LDkgKzg4Myw5IEBACiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCWludCBlcnI7CiAKLQljYXJkID0gc25kX29wbDNzYTJfY2FyZF9uZXcoZGV2KTsKLQlpZiAoISBjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfb3BsM3NhMl9jYXJkX25ldyhkZXYsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsIHBkZXYpOwogCWlmICgoZXJyID0gc25kX29wbDNzYTJfcHJvYmUoY2FyZCwgZGV2KSkgPCAwKSB7CiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2Evb3B0aTl4eC9taXJvLmMgYi9zb3VuZC9pc2Evb3B0aTl4eC9taXJvLmMKaW5kZXggNDQwNzU1Yy4uMDJlMzBkNyAxMDA2NDQKLS0tIGEvc291bmQvaXNhL29wdGk5eHgvbWlyby5jCisrKyBiL3NvdW5kL2lzYS9vcHRpOXh4L21pcm8uYwpAQCAtMTIyOCw5ICsxMjI4LDEwIEBACiAJc3RydWN0IHNuZF9wY20gKnBjbTsKIAlzdHJ1Y3Qgc25kX3Jhd21pZGkgKnJtaWRpOwogCi0JaWYgKCEoY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleCwgaWQsIFRISVNfTU9EVUxFLAotCQkJCSAgc2l6ZW9mKHN0cnVjdCBzbmRfbWlybykpKSkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyb3IgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwKKwkJCQlzaXplb2Yoc3RydWN0IHNuZF9taXJvKSwgJmNhcmQpOworCWlmIChlcnJvciA8IDApCisJCXJldHVybiBlcnJvcjsKIAogCWNhcmQtPnByaXZhdGVfZnJlZSA9IHNuZF9jYXJkX21pcm9fZnJlZTsKIAltaXJvID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL29wdGk5eHgvb3B0aTkyeC1hZDE4NDguYyBiL3NvdW5kL2lzYS9vcHRpOXh4L29wdGk5MngtYWQxODQ4LmMKaW5kZXggMTk3MDZiMC4uNWNkNTU1MyAxMDA2NDQKLS0tIGEvc291bmQvaXNhL29wdGk5eHgvb3B0aTkyeC1hZDE4NDguYworKysgYi9zb3VuZC9pc2Evb3B0aTl4eC9vcHRpOTJ4LWFkMTg0OC5jCkBAIC0yNTIsNyArMjUyLDcgQEAKICNlbmRpZgkvKiBPUFRpOTNYICovCiAKIAlkZWZhdWx0OgotCQlzbmRfcHJpbnRrKCJjaGlwICVkIG5vdCBzdXBwb3J0ZWRcbiIsIGhhcmR3YXJlKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiY2hpcCAlZCBub3Qgc3VwcG9ydGVkXG4iLCBoYXJkd2FyZSk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAlyZXR1cm4gMDsKQEAgLTI5NCw3ICsyOTQsNyBAQAogI2VuZGlmCS8qIE9QVGk5M1ggKi8KIAogCWRlZmF1bHQ6Ci0JCXNuZF9wcmludGsoImNoaXAgJWQgbm90IHN1cHBvcnRlZFxuIiwgY2hpcC0+aGFyZHdhcmUpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJjaGlwICVkIG5vdCBzdXBwb3J0ZWRcbiIsIGNoaXAtPmhhcmR3YXJlKTsKIAl9CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5sb2NrLCBmbGFncyk7CkBAIC0zMzYsNyArMzM2LDcgQEAKICNlbmRpZgkvKiBPUFRpOTNYICovCiAKIAlkZWZhdWx0OgotCQlzbmRfcHJpbnRrKCJjaGlwICVkIG5vdCBzdXBwb3J0ZWRcbiIsIGNoaXAtPmhhcmR3YXJlKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiY2hpcCAlZCBub3Qgc3VwcG9ydGVkXG4iLCBjaGlwLT5oYXJkd2FyZSk7CiAJfQogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+bG9jaywgZmxhZ3MpOwpAQCAtNDEyLDcgKzQxMiw3IEBACiAjZW5kaWYJLyogT1BUaTkzWCAqLwogCiAJZGVmYXVsdDoKLQkJc25kX3ByaW50aygiY2hpcCAlZCBub3Qgc3VwcG9ydGVkXG4iLCBjaGlwLT5oYXJkd2FyZSk7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgImNoaXAgJWQgbm90IHN1cHBvcnRlZFxuIiwgY2hpcC0+aGFyZHdhcmUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTQzMCw3ICs0MzAsOCBAQAogCQl3c3NfYmFzZV9iaXRzID0gMHgwMjsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJc25kX3ByaW50aygiV1NTIHBvcnQgMHglbHggbm90IHZhbGlkXG4iLCBjaGlwLT53c3NfYmFzZSk7CisJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HICJXU1MgcG9ydCAweCVseCBub3QgdmFsaWRcbiIsCisJCQkgICBjaGlwLT53c3NfYmFzZSk7CiAJCWdvdG8gX19za2lwX2Jhc2U7CiAJfQogCXNuZF9vcHRpOXh4X3dyaXRlX21hc2soY2hpcCwgT1BUaTlYWF9NQ19SRUcoMSksIHdzc19iYXNlX2JpdHMgPDwgNCwgMHgzMCk7CkBAIC00NTUsNyArNDU2LDcgQEAKIAkJaXJxX2JpdHMgPSAweDA0OwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlzbmRfcHJpbnRrKCJXU1MgaXJxICMgJWQgbm90IHZhbGlkXG4iLCBjaGlwLT5pcnEpOworCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORyAiV1NTIGlycSAjICVkIG5vdCB2YWxpZFxuIiwgY2hpcC0+aXJxKTsKIAkJZ290byBfX3NraXBfcmVzb3VyY2VzOwogCX0KIApAQCAtNDcwLDEzICs0NzEsMTQgQEAKIAkJZG1hX2JpdHMgPSAweDAzOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlzbmRfcHJpbnRrKCJXU1MgZG1hMSAjICVkIG5vdCB2YWxpZFxuIiwgY2hpcC0+ZG1hMSk7CisJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HICJXU1MgZG1hMSAjICVkIG5vdCB2YWxpZFxuIiwKKwkJCSAgIGNoaXAtPmRtYTEpOwogCQlnb3RvIF9fc2tpcF9yZXNvdXJjZXM7CiAJfQogCiAjaWYgZGVmaW5lZChDUzQyMzEpIHx8IGRlZmluZWQoT1BUaTkzWCkKIAlpZiAoY2hpcC0+ZG1hMSA9PSBjaGlwLT5kbWEyKSB7Ci0JCXNuZF9wcmludGsoImRvbid0IHdhbnQgdG8gc2hhcmUgZG1hc1xuIik7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgImRvbid0IHdhbnQgdG8gc2hhcmUgZG1hc1xuIik7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCkBAIC00ODUsNyArNDg3LDggQEAKIAljYXNlIDE6CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXNuZF9wcmludGsoIldTUyBkbWEyICMgJWQgbm90IHZhbGlkXG4iLCBjaGlwLT5kbWEyKTsKKwkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgIldTUyBkbWEyICMgJWQgbm90IHZhbGlkXG4iLAorCQkJICAgY2hpcC0+ZG1hMik7CiAJCWdvdG8gX19za2lwX3Jlc291cmNlczsKIAl9CiAJZG1hX2JpdHMgfD0gMHgwNDsKQEAgLTUxNiw3ICs1MTksOCBAQAogCQkJbXB1X3BvcnRfYml0cyA9IDB4MDA7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCXNuZF9wcmludGsoIk1QVS00MDEgcG9ydCAweCVseCBub3QgdmFsaWRcbiIsCisJCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORworCQkJCSAgICJNUFUtNDAxIHBvcnQgMHglbHggbm90IHZhbGlkXG4iLAogCQkJCWNoaXAtPm1wdV9wb3J0KTsKIAkJCWdvdG8gX19za2lwX21wdTsKIAkJfQpAQCAtNTM1LDcgKzUzOSw3IEBACiAJCQltcHVfaXJxX2JpdHMgPSAweDAxOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlzbmRfcHJpbnRrKCJNUFUtNDAxIGlycSAjICVkIG5vdCB2YWxpZFxuIiwKKwkJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HICJNUFUtNDAxIGlycSAjICVkIG5vdCB2YWxpZFxuIiwKIAkJCQljaGlwLT5tcHVfaXJxKTsKIAkJCWdvdG8gX19za2lwX21wdTsKIAkJfQpAQCAtNzI2LDcgKzczMCw3IEBACiAJaWYgKGNoaXAtPndzc19iYXNlID09IFNORFJWX0FVVE9fUE9SVCkgewogCQljaGlwLT53c3NfYmFzZSA9IHNuZF9sZWdhY3lfZmluZF9mcmVlX2lvcG9ydChwb3NzaWJsZV9wb3J0cywgNCk7CiAJCWlmIChjaGlwLT53c3NfYmFzZSA8IDApIHsKLQkJCXNuZF9wcmludGsoInVuYWJsZSB0byBmaW5kIGEgZnJlZSBXU1MgcG9ydFxuIik7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJ1bmFibGUgdG8gZmluZCBhIGZyZWUgV1NTIHBvcnRcbiIpOwogCQkJcmV0dXJuIC1FQlVTWTsKIAkJfQogCX0KQEAgLTgxNSwxNCArODE5LDggQEAKIAkJCQkgICBjaGlwLT5mbV9wb3J0LCBjaGlwLT5mbV9wb3J0ICsgNCAtIDEpOwogCQl9CiAJCWlmIChvcGwzKSB7Ci0jaWZkZWYgQ1M0MjMxCi0JCQljb25zdCBpbnQgdDFkZXYgPSAxOwotI2Vsc2UKLQkJCWNvbnN0IGludCB0MWRldiA9IDA7Ci0jZW5kaWYKLQkJCWlmICgoZXJyb3IgPSBzbmRfb3BsM190aW1lcl9uZXcob3BsMywgdDFkZXYsIHQxZGV2KzEpKSA8IDApCi0JCQkJcmV0dXJuIGVycm9yOwotCQkJaWYgKChlcnJvciA9IHNuZF9vcGwzX2h3ZGVwX25ldyhvcGwzLCAwLCAxLCAmc3ludGgpKSA8IDApCisJCQllcnJvciA9IHNuZF9vcGwzX2h3ZGVwX25ldyhvcGwzLCAwLCAxLCAmc3ludGgpOworCQkJaWYgKGVycm9yIDwgMCkKIAkJCQlyZXR1cm4gZXJyb3I7CiAJCX0KIAl9CkBAIC04MzAsMTUgKzgyOCwxOCBAQAogCXJldHVybiBzbmRfY2FyZF9yZWdpc3RlcihjYXJkKTsKIH0KIAotc3RhdGljIHN0cnVjdCBzbmRfY2FyZCAqc25kX29wdGk5eHhfY2FyZF9uZXcodm9pZCkKK3N0YXRpYyBpbnQgc25kX29wdGk5eHhfY2FyZF9uZXcoc3RydWN0IHNuZF9jYXJkICoqY2FyZHApCiB7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOworCWludCBlcnI7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIHNpemVvZihzdHJ1Y3Qgc25kX29wdGk5eHgpKTsKLQlpZiAoISBjYXJkKQotCQlyZXR1cm4gTlVMTDsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwKKwkJCSAgICAgIHNpemVvZihzdHJ1Y3Qgc25kX29wdGk5eHgpLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAJY2FyZC0+cHJpdmF0ZV9mcmVlID0gc25kX2NhcmRfb3B0aTl4eF9mcmVlOwotCXJldHVybiBjYXJkOworCSpjYXJkcCA9IGNhcmQ7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9vcHRpOXh4X2lzYV9tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXZwdHIsCkBAIC04OTcsMTUgKzg5OCwxNSBAQAogI2lmIGRlZmluZWQoQ1M0MjMxKSB8fCBkZWZpbmVkKE9QVGk5M1gpCiAJaWYgKGRtYTIgPT0gU05EUlZfQVVUT19ETUEpIHsKIAkJaWYgKChkbWEyID0gc25kX2xlZ2FjeV9maW5kX2ZyZWVfZG1hKHBvc3NpYmxlX2RtYTJzW2RtYTEgJSA0XSkpIDwgMCkgewotCQkJc25kX3ByaW50aygidW5hYmxlIHRvIGZpbmQgYSBmcmVlIERNQTJcbiIpOworCQkJc25kX3ByaW50ayhLRVJOX0VSUiAidW5hYmxlIHRvIGZpbmQgYSBmcmVlIERNQTJcbiIpOwogCQkJcmV0dXJuIC1FQlVTWTsKIAkJfQogCX0KICNlbmRpZgogCi0JY2FyZCA9IHNuZF9vcHRpOXh4X2NhcmRfbmV3KCk7Ci0JaWYgKCEgY2FyZCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyb3IgPSBzbmRfb3B0aTl4eF9jYXJkX25ldygmY2FyZCk7CisJaWYgKGVycm9yIDwgMCkKKwkJcmV0dXJuIGVycm9yOwogCiAJaWYgKChlcnJvciA9IHNuZF9jYXJkX29wdGk5eHhfZGV0ZWN0KGNhcmQsIGNhcmQtPnByaXZhdGVfZGF0YSkpIDwgMCkgewogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwpAQCAtOTUwLDkgKzk1MSw5IEBACiAJCXJldHVybiAtRUJVU1k7CiAJaWYgKCEgaXNhcG5wKQogCQlyZXR1cm4gLUVOT0RFVjsKLQljYXJkID0gc25kX29wdGk5eHhfY2FyZF9uZXcoKTsKLQlpZiAoISBjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnJvciA9IHNuZF9vcHRpOXh4X2NhcmRfbmV3KCZjYXJkKTsKKwlpZiAoZXJyb3IgPCAwKQorCQlyZXR1cm4gZXJyb3I7CiAJY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAogCWh3ID0gc25kX2NhcmRfb3B0aTl4eF9wbnAoY2hpcCwgcGNhcmQsIHBpZCk7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2Evc2IvZXM5NjguYyBiL3NvdW5kL2lzYS9zYi9lczk2OC5jCmluZGV4IGM4YzhlMjEuLmNhZmMzYTcgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9zYi9lczk2OC5jCisrKyBiL3NvdW5kL2lzYS9zYi9lczk2OC5jCkBAIC0xMDgsOSArMTA4LDEwIEBACiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCXN0cnVjdCBzbmRfY2FyZF9lczk2OCAqYWNhcmQ7CiAKLQlpZiAoKGNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCi0JCQkJIHNpemVvZihzdHJ1Y3Qgc25kX2NhcmRfZXM5NjgpKSkgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyb3IgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisJCQkJc2l6ZW9mKHN0cnVjdCBzbmRfY2FyZF9lczk2OCksICZjYXJkKTsKKwlpZiAoZXJyb3IgPCAwKQorCQlyZXR1cm4gZXJyb3I7CiAJYWNhcmQgPSBjYXJkLT5wcml2YXRlX2RhdGE7CiAJaWYgKChlcnJvciA9IHNuZF9jYXJkX2VzOTY4X3BucChkZXYsIGFjYXJkLCBwY2FyZCwgcGlkKSkpIHsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9zYi9zYjE2LmMgYi9zb3VuZC9pc2Evc2Ivc2IxNi5jCmluZGV4IDJjMjAxZjcuLjUxOWMzNjMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9zYi9zYjE2LmMKKysrIGIvc291bmQvaXNhL3NiL3NiMTYuYwpAQCAtMzI0LDE0ICszMjQsMTggQEAKICNkZWZpbmUgaXNfaXNhcG5wX3NlbGVjdGVkKGRldikJCTAKICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IHNuZF9jYXJkICpzbmRfc2IxNl9jYXJkX25ldyhpbnQgZGV2KQorc3RhdGljIGludCBzbmRfc2IxNl9jYXJkX25ldyhpbnQgZGV2LCBzdHJ1Y3Qgc25kX2NhcmQgKipjYXJkcCkKIHsKLQlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCi0JCQkJCXNpemVvZihzdHJ1Y3Qgc25kX2NhcmRfc2IxNikpOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiBOVUxMOworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKKwlpbnQgZXJyOworCisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAorCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBzbmRfY2FyZF9zYjE2KSwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCWNhcmQtPnByaXZhdGVfZnJlZSA9IHNuZF9zYjE2X2ZyZWU7Ci0JcmV0dXJuIGNhcmQ7CisJKmNhcmRwID0gY2FyZDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBfX2RldmluaXQgc25kX3NiMTZfcHJvYmUoc3RydWN0IHNuZF9jYXJkICpjYXJkLCBpbnQgZGV2KQpAQCAtNDg5LDkgKzQ5Myw5IEBACiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCWludCBlcnI7CiAKLQljYXJkID0gc25kX3NiMTZfY2FyZF9uZXcoZGV2KTsKLQlpZiAoISBjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfc2IxNl9jYXJkX25ldyhkZXYsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCWFjYXJkID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCS8qIG5vbi1QblAgRk0gcG9ydCBhZGRyZXNzIGlzIGhhcmR3aXJlZCB3aXRoIGJhc2UgcG9ydCBhZGRyZXNzICovCkBAIC02MTAsOSArNjE0LDkgQEAKIAlmb3IgKCA7IGRldiA8IFNORFJWX0NBUkRTOyBkZXYrKykgewogCQlpZiAoIWVuYWJsZVtkZXZdIHx8ICFpc2FwbnBbZGV2XSkKIAkJCWNvbnRpbnVlOwotCQljYXJkID0gc25kX3NiMTZfY2FyZF9uZXcoZGV2KTsKLQkJaWYgKCEgY2FyZCkKLQkJCXJldHVybiAtRU5PTUVNOworCQlyZXMgPSBzbmRfc2IxNl9jYXJkX25ldyhkZXYsICZjYXJkKTsKKwkJaWYgKHJlcyA8IDApCisJCQlyZXR1cm4gcmVzOwogCQlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsICZwY2FyZC0+Y2FyZC0+ZGV2KTsKIAkJaWYgKChyZXMgPSBzbmRfY2FyZF9zYjE2X3BucChkZXYsIGNhcmQtPnByaXZhdGVfZGF0YSwgcGNhcmQsIHBpZCkpIDwgMCB8fAogCQkgICAgKHJlcyA9IHNuZF9zYjE2X3Byb2JlKGNhcmQsIGRldikpIDwgMCkgewpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL3NiL3NiOC5jIGIvc291bmQvaXNhL3NiL3NiOC5jCmluZGV4IGVhMDY4NzcuLjNjZDU3ZWUgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9zYi9zYjguYworKysgYi9zb3VuZC9pc2Evc2Ivc2I4LmMKQEAgLTEwMywxMCArMTAzLDEwIEBACiAJc3RydWN0IHNuZF9vcGwzICpvcGwzOwogCWludCBlcnI7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAotCQkJICAgIHNpemVvZihzdHJ1Y3Qgc25kX3NiOCkpOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKKwkJCSAgICAgIHNpemVvZihzdHJ1Y3Qgc25kX3NiOCksICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAlhY2FyZCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAljYXJkLT5wcml2YXRlX2ZyZWUgPSBzbmRfc2I4X2ZyZWU7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9zYi9zYl9taXhlci5jIGIvc291bmQvaXNhL3NiL3NiX21peGVyLmMKaW5kZXggNDA2YTQzMS4uNDc1MjIwYiAxMDA2NDQKLS0tIGEvc291bmQvaXNhL3NiL3NiX21peGVyLmMKKysrIGIvc291bmQvaXNhL3NiL3NiX21peGVyLmMKQEAgLTE4Miw3ICsxODIsNyBAQAogCiBzdGF0aWMgaW50IHNuZF9kdDAxOXhfaW5wdXRfc3dfaW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKIHsKLQlzdGF0aWMgY2hhciAqdGV4dHNbNV0gPSB7CisJc3RhdGljIGNvbnN0IGNoYXIgKnRleHRzWzVdID0gewogCQkiQ0QiLCAiTWljIiwgIkxpbmUiLCAiU3ludGgiLCAiTWFzdGVyIgogCX07CiAKQEAgLTI2OSwxMiArMjY5LDczIEBACiB9CiAKIC8qCisgKiBBTFM0MDAwIG1vbm8gcmVjb3JkaW5nIGNvbnRyb2wgc3dpdGNoCisgKi8KKworc3RhdGljIGludCBzbmRfYWxzNGtfbW9ub19jYXB0dXJlX3JvdXRlX2luZm8oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJCSAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKK3sKKwlzdGF0aWMgY29uc3QgY2hhciAqdGV4dHNbM10gPSB7CisJCSJMIGNoYW4gb25seSIsICJSIGNoYW4gb25seSIsICJMIGNoLzIgKyBSIGNoLzIiCisJfTsKKworCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9FTlVNRVJBVEVEOworCXVpbmZvLT5jb3VudCA9IDE7CisJdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgPSAzOworCWlmICh1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID4gMikKKwkJdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA9IDI7CisJc3RyY3B5KHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLm5hbWUsCisJICAgICAgIHRleHRzW3VpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1dKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfYWxzNGtfbW9ub19jYXB0dXJlX3JvdXRlX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgc25kX3NiICpzYiA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGNoYXIgb3ZhbDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzYi0+bWl4ZXJfbG9jaywgZmxhZ3MpOworCW92YWwgPSBzbmRfc2JtaXhlcl9yZWFkKHNiLCBTQl9BTFM0MDAwX01PTk9fSU9fQ1RSTCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2ItPm1peGVyX2xvY2ssIGZsYWdzKTsKKwlvdmFsID4+PSA2OworCWlmIChvdmFsID4gMikKKwkJb3ZhbCA9IDI7CisKKwl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gb3ZhbDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfYWxzNGtfbW9ub19jYXB0dXJlX3JvdXRlX3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgc25kX3NiICpzYiA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBjaGFuZ2U7CisJdW5zaWduZWQgY2hhciBudmFsLCBvdmFsOworCisJaWYgKHVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPiAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2ItPm1peGVyX2xvY2ssIGZsYWdzKTsKKwlvdmFsID0gc25kX3NibWl4ZXJfcmVhZChzYiwgU0JfQUxTNDAwMF9NT05PX0lPX0NUUkwpOworCisJbnZhbCA9IChvdmFsICYgfigzIDw8IDYpKQorCSAgICAgfCAodWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA8PCA2KTsKKwljaGFuZ2UgPSBudmFsICE9IG92YWw7CisJaWYgKGNoYW5nZSkKKwkJc25kX3NibWl4ZXJfd3JpdGUoc2IsIFNCX0FMUzQwMDBfTU9OT19JT19DVFJMLCBudmFsKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYi0+bWl4ZXJfbG9jaywgZmxhZ3MpOworCXJldHVybiBjaGFuZ2U7Cit9CisKKy8qCiAgKiBTQlBSTyBpbnB1dCBtdWx0aXBsZXhlcgogICovCiAKIHN0YXRpYyBpbnQgc25kX3NiOG1peGVyX2luZm9fbXV4KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQogewotCXN0YXRpYyBjaGFyICp0ZXh0c1szXSA9IHsKKwlzdGF0aWMgY29uc3QgY2hhciAqdGV4dHNbM10gPSB7CiAJCSJNaWMiLCAiQ0QiLCAiTGluZSIKIAl9OwogCkBAIC00NDIsNiArNTAzLDEyIEBACiAJCQkuZ2V0ID0gc25kX2R0MDE5eF9pbnB1dF9zd19nZXQsCiAJCQkucHV0ID0gc25kX2R0MDE5eF9pbnB1dF9zd19wdXQsCiAJCX0sCisJCVtTQl9NSVhfTU9OT19DQVBUVVJFX0FMUzRLXSA9IHsKKwkJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCQkJLmluZm8gPSBzbmRfYWxzNGtfbW9ub19jYXB0dXJlX3JvdXRlX2luZm8sCisJCQkuZ2V0ID0gc25kX2FsczRrX21vbm9fY2FwdHVyZV9yb3V0ZV9nZXQsCisJCQkucHV0ID0gc25kX2FsczRrX21vbm9fY2FwdHVyZV9yb3V0ZV9wdXQsCisJCX0sCiAJfTsKIAlzdHJ1Y3Qgc25kX2tjb250cm9sICpjdGw7CiAJaW50IGVycjsKQEAgLTYzNiw2ICs3MDMsOCBAQAogCX07CiAKIHN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSAqc25kX2R0MDE5eF9jb250cm9sc1tdID0geworCS8qIEFMUzQwMDAgYmVsb3cgaGFzIHNvbWUgcGFydHMgd2hpY2ggd2UgbWlnaHQgYmUgbGFja2luZywKKwkgKiBlLmcuIHNuZF9hbHM0MDAwX2N0bF9tb25vX3BsYXliYWNrX3N3aXRjaCAtIGNoZWNrIGl0ISAqLwogCSZzbmRfZHQwMTl4X2N0bF9tYXN0ZXJfcGxheV92b2wsCiAJJnNuZF9kdDAxOXhfY3RsX3BjbV9wbGF5X3ZvbCwKIAkmc25kX2R0MDE5eF9jdGxfc3ludGhfcGxheV92b2wsCkBAIC02NjYsMTggKzczNSwyMSBAQAogLyoKICAqIEFMUzQwMDAgc3BlY2lmaWMgbWl4ZXIgZWxlbWVudHMKICAqLwotLyogRklYTUU6IFNCX0FMUzQwMDBfTU9OT19JT19DVFJMIG5lZWRzIG91dHB1dCBzZWxlY3QgY3RybCEgKi8KIHN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfYWxzNDAwMF9jdGxfbWFzdGVyX21vbm9fcGxheWJhY2tfc3dpdGNoID0KIAlTQl9TSU5HTEUoIk1hc3RlciBNb25vIFBsYXliYWNrIFN3aXRjaCIsIFNCX0FMUzQwMDBfTU9OT19JT19DVFJMLCA1LCAxKTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfYWxzNDAwMF9jdGxfbWFzdGVyX21vbm9fY2FwdHVyZV9yb3V0ZSA9Ci0JU0JfU0lOR0xFKCJNYXN0ZXIgTW9ubyBDYXB0dXJlIFJvdXRlIiwgU0JfQUxTNDAwMF9NT05PX0lPX0NUUkwsIDYsIDB4MDMpOwotLyogRklYTUU6IG1vbm8gcGxheWJhY2sgc3dpdGNoIGFsc28gYXZhaWxhYmxlIG9uIERUMDE5WD8gKi8KK3N0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfYWxzNGtfY3RsX21hc3Rlcl9tb25vX2NhcHR1cmVfcm91dGUgPSB7CisJCS5uYW1lID0gIk1hc3RlciBNb25vIENhcHR1cmUgUm91dGUiLAorCQkudHlwZSA9IFNCX01JWF9NT05PX0NBUFRVUkVfQUxTNEsKKwl9Owogc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9hbHM0MDAwX2N0bF9tb25vX3BsYXliYWNrX3N3aXRjaCA9CiAJU0JfU0lOR0xFKCJNb25vIFBsYXliYWNrIFN3aXRjaCIsIFNCX0RUMDE5WF9PVVRQVVRfU1cyLCAwLCAxKTsKIHN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfYWxzNDAwMF9jdGxfbWljXzIwZGJfYm9vc3QgPQogCVNCX1NJTkdMRSgiTWljIEJvb3N0ICgrMjBkQikiLCBTQl9BTFM0MDAwX01JQ19JTl9HQUlOLCAwLCAweDAzKTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfYWxzNDAwMF9jdGxfbWl4ZXJfbG9vcGJhY2sgPQotCVNCX1NJTkdMRSgiQW5hbG9nIExvb3BiYWNrIiwgU0JfQUxTNDAwMF9NSUNfSU5fR0FJTiwgNywgMHgwMSk7CitzdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX2FsczQwMDBfY3RsX21peGVyX2FuYWxvZ19sb29wYmFjayA9CisJU0JfU0lOR0xFKCJBbmFsb2cgTG9vcGJhY2sgU3dpdGNoIiwgU0JfQUxTNDAwMF9NSUNfSU5fR0FJTiwgNywgMHgwMSk7CitzdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX2FsczQwMDBfY3RsX21peGVyX2RpZ2l0YWxfbG9vcGJhY2sgPQorCVNCX1NJTkdMRSgiRGlnaXRhbCBMb29wYmFjayBTd2l0Y2giLAorCQkgIFNCX0FMUzQwMDBfQ1IzX0NPTkZJR1VSQVRJT04sIDcsIDB4MDEpOwogLyogRklYTUU6IGZ1bmN0aW9uYWxpdHkgb2YgM0QgY29udHJvbHMgbWlnaHQgYmUgc3dhcHBlZCwgSSBkaWRuJ3QgZmluZAogICogYSBkZXNjcmlwdGlvbiBvZiBob3cgdG8gaWRlbnRpZnkgd2hhdCBpcyBzdXBwb3NlZCB0byBiZSB3aGF0ICovCiBzdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX2FsczQwMDBfM2RfY29udHJvbF9zd2l0Y2ggPQpAQCAtNjk0LDYgKzc2Niw5IEBACiAJU0JfU0lOR0xFKCIzRCBDb250cm9sIC0gV2lkZSIsIFNCX0FMUzQwMDBfM0RfVElNRV9ERUxBWSwgMCwgMHgwZik7CiBzdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX2FsczQwMDBfM2RfY29udHJvbF9wb3dlcm9mZl9zd2l0Y2ggPQogCVNCX1NJTkdMRSgiM0QgUG93ZXJPZmYgU3dpdGNoIiwgU0JfQUxTNDAwMF8zRF9USU1FX0RFTEFZLCA0LCAweDAxKTsKK3N0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfYWxzNDAwMF9jdGxfM2RiX2ZyZXFfY29udHJvbF9zd2l0Y2ggPQorCVNCX1NJTkdMRSgiTWFzdGVyIFBsYXliYWNrIDhrSHogLyAyMGtIeiBMUEYgU3dpdGNoIiwKKwkJICBTQl9BTFM0MDAwX0ZNREFDLCA1LCAweDAxKTsKICNpZmRlZiBOT1RfQVZBSUxBQkxFCiBzdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX2FsczQwMDBfY3RsX2ZtZGFjID0KIAlTQl9TSU5HTEUoIkZNREFDIFN3aXRjaCAoT3B0aW9uID8pIiwgU0JfQUxTNDAwMF9GTURBQywgMCwgMHgwMSk7CkBAIC03MDIsMzUgKzc3NywzNyBAQAogI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSAqc25kX2FsczQwMDBfY29udHJvbHNbXSA9IHsKLQkmc25kX3NiMTZfY3RsX21hc3Rlcl9wbGF5X3ZvbCwKLQkmc25kX2R0MDE5eF9jdGxfcGNtX3BsYXlfc3dpdGNoLAotCSZzbmRfc2IxNl9jdGxfcGNtX3BsYXlfdm9sLAotCSZzbmRfc2IxNl9jdGxfc3ludGhfY2FwdHVyZV9yb3V0ZSwKLQkmc25kX2R0MDE5eF9jdGxfc3ludGhfcGxheV9zd2l0Y2gsCi0JJnNuZF9zYjE2X2N0bF9zeW50aF9wbGF5X3ZvbCwKLQkmc25kX3NiMTZfY3RsX2NkX2NhcHR1cmVfcm91dGUsCi0JJnNuZF9zYjE2X2N0bF9jZF9wbGF5X3N3aXRjaCwKLQkmc25kX3NiMTZfY3RsX2NkX3BsYXlfdm9sLAotCSZzbmRfc2IxNl9jdGxfbGluZV9jYXB0dXJlX3JvdXRlLAotCSZzbmRfc2IxNl9jdGxfbGluZV9wbGF5X3N3aXRjaCwKLQkmc25kX3NiMTZfY3RsX2xpbmVfcGxheV92b2wsCi0JJnNuZF9zYjE2X2N0bF9taWNfY2FwdHVyZV9yb3V0ZSwKLQkmc25kX2FsczQwMDBfY3RsX21pY18yMGRiX2Jvb3N0LAotCSZzbmRfc2IxNl9jdGxfYXV0b19taWNfZ2FpbiwKLQkmc25kX3NiMTZfY3RsX21pY19wbGF5X3N3aXRjaCwKLQkmc25kX3NiMTZfY3RsX21pY19wbGF5X3ZvbCwKLQkmc25kX3NiMTZfY3RsX3BjX3NwZWFrZXJfdm9sLAotCSZzbmRfc2IxNl9jdGxfY2FwdHVyZV92b2wsCi0JJnNuZF9zYjE2X2N0bF9wbGF5X3ZvbCwKLQkmc25kX2FsczQwMDBfY3RsX21hc3Rlcl9tb25vX3BsYXliYWNrX3N3aXRjaCwKLQkmc25kX2FsczQwMDBfY3RsX21hc3Rlcl9tb25vX2NhcHR1cmVfcm91dGUsCi0JJnNuZF9hbHM0MDAwX2N0bF9tb25vX3BsYXliYWNrX3N3aXRjaCwKLQkmc25kX2FsczQwMDBfY3RsX21peGVyX2xvb3BiYWNrLAotCSZzbmRfYWxzNDAwMF8zZF9jb250cm9sX3N3aXRjaCwKLQkmc25kX2FsczQwMDBfM2RfY29udHJvbF9yYXRpbywKLQkmc25kX2FsczQwMDBfM2RfY29udHJvbF9mcmVxLAotCSZzbmRfYWxzNDAwMF8zZF9jb250cm9sX2RlbGF5LAotCSZzbmRfYWxzNDAwMF8zZF9jb250cm9sX3Bvd2Vyb2ZmX3N3aXRjaCwKKwkJCQkJCS8qIEFMUzQwMDBhLlBERiByZWdzIHBhZ2UgKi8KKwkmc25kX3NiMTZfY3RsX21hc3Rlcl9wbGF5X3ZvbCwJCS8qIE1YMzAvMzEgMTIgKi8KKwkmc25kX2R0MDE5eF9jdGxfcGNtX3BsYXlfc3dpdGNoLAkvKiBNWDRDICAgIDE2ICovCisJJnNuZF9zYjE2X2N0bF9wY21fcGxheV92b2wsCQkvKiBNWDMyLzMzIDEyICovCisJJnNuZF9zYjE2X2N0bF9zeW50aF9jYXB0dXJlX3JvdXRlLAkvKiBNWDNELzNFIDE0ICovCisJJnNuZF9kdDAxOXhfY3RsX3N5bnRoX3BsYXlfc3dpdGNoLAkvKiBNWDRDICAgIDE2ICovCisJJnNuZF9zYjE2X2N0bF9zeW50aF9wbGF5X3ZvbCwJCS8qIE1YMzQvMzUgMTIvMTMgKi8KKwkmc25kX3NiMTZfY3RsX2NkX2NhcHR1cmVfcm91dGUsCQkvKiBNWDNELzNFIDE0ICovCisJJnNuZF9zYjE2X2N0bF9jZF9wbGF5X3N3aXRjaCwJCS8qIE1YM0MgICAgMTQgKi8KKwkmc25kX3NiMTZfY3RsX2NkX3BsYXlfdm9sLAkJLyogTVgzNi8zNyAxMyAqLworCSZzbmRfc2IxNl9jdGxfbGluZV9jYXB0dXJlX3JvdXRlLAkvKiBNWDNELzNFIDE0ICovCisJJnNuZF9zYjE2X2N0bF9saW5lX3BsYXlfc3dpdGNoLAkJLyogTVgzQyAgICAxNCAqLworCSZzbmRfc2IxNl9jdGxfbGluZV9wbGF5X3ZvbCwJCS8qIE1YMzgvMzkgMTMgKi8KKwkmc25kX3NiMTZfY3RsX21pY19jYXB0dXJlX3JvdXRlLAkvKiBNWDNELzNFIDE0ICovCisJJnNuZF9hbHM0MDAwX2N0bF9taWNfMjBkYl9ib29zdCwJLyogTVg0RCAgICAxNiAqLworCSZzbmRfc2IxNl9jdGxfbWljX3BsYXlfc3dpdGNoLAkJLyogTVgzQyAgICAxNCAqLworCSZzbmRfc2IxNl9jdGxfbWljX3BsYXlfdm9sLAkJLyogTVgzQSAgICAxMyAqLworCSZzbmRfc2IxNl9jdGxfcGNfc3BlYWtlcl92b2wsCQkvKiBNWDNCICAgIDE0ICovCisJJnNuZF9zYjE2X2N0bF9jYXB0dXJlX3ZvbCwJCS8qIE1YM0YvNDAgMTUgKi8KKwkmc25kX3NiMTZfY3RsX3BsYXlfdm9sLAkJCS8qIE1YNDEvNDIgMTUgKi8KKwkmc25kX2FsczQwMDBfY3RsX21hc3Rlcl9tb25vX3BsYXliYWNrX3N3aXRjaCwgLyogTVg0QyAxNiAqLworCSZzbmRfYWxzNGtfY3RsX21hc3Rlcl9tb25vX2NhcHR1cmVfcm91dGUsIC8qIE1YNEIgIDE2ICovCisJJnNuZF9hbHM0MDAwX2N0bF9tb25vX3BsYXliYWNrX3N3aXRjaCwJLyogTVg0QyAgICAxNiAqLworCSZzbmRfYWxzNDAwMF9jdGxfbWl4ZXJfYW5hbG9nX2xvb3BiYWNrLCAvKiBNWDREICAgIDE2ICovCisJJnNuZF9hbHM0MDAwX2N0bF9taXhlcl9kaWdpdGFsX2xvb3BiYWNrLCAvKiBDUjMgICAgMjEgKi8KKwkmc25kX2FsczQwMDBfM2RfY29udHJvbF9zd2l0Y2gsCQkgLyogTVg1MCAgIDE3ICovCisJJnNuZF9hbHM0MDAwXzNkX2NvbnRyb2xfcmF0aW8sCQkgLyogTVg1MCAgIDE3ICovCisJJnNuZF9hbHM0MDAwXzNkX2NvbnRyb2xfZnJlcSwJCSAvKiBNWDUwICAgMTcgKi8KKwkmc25kX2FsczQwMDBfM2RfY29udHJvbF9kZWxheSwJCSAvKiBNWDUxICAgMTggKi8KKwkmc25kX2FsczQwMDBfM2RfY29udHJvbF9wb3dlcm9mZl9zd2l0Y2gsCS8qIE1YNTEgICAgMTggKi8KKwkmc25kX2FsczQwMDBfY3RsXzNkYl9mcmVxX2NvbnRyb2xfc3dpdGNoLAkvKiBNWDRGICAgIDE3ICovCiAjaWZkZWYgTk9UX0FWQUlMQUJMRQogCSZzbmRfYWxzNDAwMF9jdGxfZm1kYWMsCiAJJnNuZF9hbHM0MDAwX2N0bF9xc291bmQsCkBAIC05MDUsMTMgKzk4MiwxNCBAQAogfTsKIAogc3RhdGljIHVuc2lnbmVkIGNoYXIgYWxzNDAwMF9zYXZlZF9yZWdzW10gPSB7CisJLyogcGxlYXNlIHZlcmlmeSBpbiBkc2hlZXQgd2hldGhlciByZWdzIHRvIGJlIGFkZGVkCisJICAgYXJlIGFjdHVhbGx5IHJlYWwgSC9XIG9yIGp1c3QgZHVtbXkgKi8KIAlTQl9EU1A0X01BU1RFUl9ERVYsIFNCX0RTUDRfTUFTVEVSX0RFViArIDEsCiAJU0JfRFNQNF9PVVRQVVRfU1csCiAJU0JfRFNQNF9QQ01fREVWLCBTQl9EU1A0X1BDTV9ERVYgKyAxLAogCVNCX0RTUDRfSU5QVVRfTEVGVCwgU0JfRFNQNF9JTlBVVF9SSUdIVCwKIAlTQl9EU1A0X1NZTlRIX0RFViwgU0JfRFNQNF9TWU5USF9ERVYgKyAxLAogCVNCX0RTUDRfQ0RfREVWLCBTQl9EU1A0X0NEX0RFViArIDEsCi0JU0JfRFNQNF9NSUNfQUdDLAogCVNCX0RTUDRfTUlDX0RFViwKIAlTQl9EU1A0X1NQRUFLRVJfREVWLAogCVNCX0RTUDRfSUdBSU5fREVWLCBTQl9EU1A0X0lHQUlOX0RFViArIDEsCkBAIC05MTksOCArOTk3LDEwIEBACiAJU0JfRFQwMTlYX09VVFBVVF9TVzIsCiAJU0JfQUxTNDAwMF9NT05PX0lPX0NUUkwsCiAJU0JfQUxTNDAwMF9NSUNfSU5fR0FJTiwKKwlTQl9BTFM0MDAwX0ZNREFDLAogCVNCX0FMUzQwMDBfM0RfU05EX0ZYLAogCVNCX0FMUzQwMDBfM0RfVElNRV9ERUxBWSwKKwlTQl9BTFM0MDAwX0NSM19DT05GSUdVUkFUSU9OLAogfTsKIAogc3RhdGljIHZvaWQgc2F2ZV9taXhlcihzdHJ1Y3Qgc25kX3NiICpjaGlwLCB1bnNpZ25lZCBjaGFyICpyZWdzLCBpbnQgbnVtX3JlZ3MpCmRpZmYgLS1naXQgYS9zb3VuZC9pc2Evc2M2MDAwLmMgYi9zb3VuZC9pc2Evc2M2MDAwLmMKaW5kZXggY2EzNTkyNC4uNzgyMDEwNiAxMDA2NDQKLS0tIGEvc291bmQvaXNhL3NjNjAwMC5jCisrKyBiL3NvdW5kL2lzYS9zYzYwMDAuYwpAQCAtNDg5LDkgKzQ4OSw5IEBACiAJY2hhciBfX2lvbWVtICp2bXNzX3BvcnQ7CiAKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotCWlmICghY2FyZCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAlpZiAoeGlycSA9PSBTTkRSVl9BVVRPX0lSUSkgewogCQl4aXJxID0gc25kX2xlZ2FjeV9maW5kX2ZyZWVfaXJxKHBvc3NpYmxlX2lycXMpOwpAQCAtNTc2LDEwICs1NzYsNiBAQAogCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFBGWCAibm8gT1BMIGRldmljZSBhdCAweCV4LTB4JXggP1xuIiwKIAkJCSAgIDB4Mzg4LCAweDM4OCArIDIpOwogCX0gZWxzZSB7Ci0JCWVyciA9IHNuZF9vcGwzX3RpbWVyX25ldyhvcGwzLCAwLCAxKTsKLQkJaWYgKGVyciA8IDApCi0JCQlnb3RvIGVycl91bm1hcDI7Ci0KIAkJZXJyID0gc25kX29wbDNfaHdkZXBfbmV3KG9wbDMsIDAsIDEsIE5VTEwpOwogCQlpZiAoZXJyIDwgMCkKIAkJCWdvdG8gZXJyX3VubWFwMjsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9zZ2FsYXh5LmMgYi9zb3VuZC9pc2Evc2dhbGF4eS5jCmluZGV4IDJjNzUwM2IuLjZmZTI3YjkgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9zZ2FsYXh5LmMKKysrIGIvc291bmQvaXNhL3NnYWxheHkuYwpAQCAtMjQzLDkgKzI0Myw5IEBACiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCXN0cnVjdCBzbmRfd3NzICpjaGlwOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAl4aXJxID0gaXJxW2Rldl07CiAJaWYgKHhpcnEgPT0gU05EUlZfQVVUT19JUlEpIHsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9zc2NhcGUuYyBiL3NvdW5kL2lzYS9zc2NhcGUuYwppbmRleCA0OGExNmQ4Li42NjE4NzEyIDEwMDY0NAotLS0gYS9zb3VuZC9pc2Evc3NjYXBlLmMKKysrIGIvc291bmQvaXNhL3NzY2FwZS5jCkBAIC04OSw5ICs4OSw2IEBACiAjZW5kaWYKIAogCi0jZGVmaW5lIE1QVTQwMV9JTyhpKSAgICAgKChpKSArIDApCi0jZGVmaW5lIE1JRElfREFUQV9JTyhpKSAgKChpKSArIDApCi0jZGVmaW5lIE1JRElfQ1RSTF9JTyhpKSAgKChpKSArIDEpCiAjZGVmaW5lIEhPU1RfQ1RSTF9JTyhpKSAgKChpKSArIDIpCiAjZGVmaW5lIEhPU1RfREFUQV9JTyhpKSAgKChpKSArIDMpCiAjZGVmaW5lIE9ESUVfQUREUl9JTyhpKSAgKChpKSArIDQpCkBAIC0xMjksOSArMTI2LDYgQEAKICNkZWZpbmUgRE1BXzhCSVQgIDB4ODAKIAogCi0jZGVmaW5lIEFEMTg0NV9GUkVRX1NFTF9NU0IgICAgMHgxNgotI2RlZmluZSBBRDE4NDVfRlJFUV9TRUxfTFNCICAgIDB4MTcKLQogZW51bSBjYXJkX3R5cGUgewogCVNTQ0FQRSwKIAlTU0NBUEVfUE5QLApAQCAtMTQxLDggKzEzNSw2IEBACiBzdHJ1Y3Qgc291bmRzY2FwZSB7CiAJc3BpbmxvY2tfdCBsb2NrOwogCXVuc2lnbmVkIGlvX2Jhc2U7Ci0JdW5zaWduZWQgd3NzX2Jhc2U7Ci0JaW50IGNvZGVjX3R5cGU7CiAJaW50IGljX3R5cGU7CiAJZW51bSBjYXJkX3R5cGUgdHlwZTsKIAlzdHJ1Y3QgcmVzb3VyY2UgKmlvX3JlczsKQEAgLTMzMCw3ICszMjIsNyBAQAogICovCiBzdGF0aWMgaW5saW5lIGludCB2ZXJpZnlfbXB1NDAxKGNvbnN0IHN0cnVjdCBzbmRfbXB1NDAxICogbXB1KQogewotCXJldHVybiAoKGluYihNSURJX0NUUkxfSU8obXB1LT5wb3J0KSkgJiAweGMwKSA9PSAweDgwKTsKKwlyZXR1cm4gKChpbmIoTVBVNDAxQyhtcHUpKSAmIDB4YzApID09IDB4ODApOwogfQogCiAvKgpAQCAtMzM4LDcgKzMzMCw3IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBpbml0aWFsaXNlX21wdTQwMShjb25zdCBzdHJ1Y3Qgc25kX21wdTQwMSAqIG1wdSkKIHsKLQlvdXRiKDAsIE1JRElfREFUQV9JTyhtcHUtPnBvcnQpKTsKKwlvdXRiKDAsIE1QVTQwMUQobXB1KSk7CiB9CiAKIC8qCkBAIC0zOTYsMjAgKzM4OCwyMCBAQAogICovCiBzdGF0aWMgaW50IG9icF9zdGFydHVwX2FjayhzdHJ1Y3Qgc291bmRzY2FwZSAqcywgdW5zaWduZWQgdGltZW91dCkKIHsKLQl3aGlsZSAodGltZW91dCAhPSAwKSB7CisJdW5zaWduZWQgbG9uZyBlbmRfdGltZSA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKHRpbWVvdXQpOworCisJZG8gewogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCQl1bnNpZ25lZCBjaGFyIHg7CiAKLQkJc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUoMSk7Ci0KIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnMtPmxvY2ssIGZsYWdzKTsKIAkJeCA9IGluYihIT1NUX0RBVEFfSU8ocy0+aW9fYmFzZSkpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5sb2NrLCBmbGFncyk7CiAJCWlmICgoeCAmIDB4ZmUpID09IDB4ZmUpCiAJCQlyZXR1cm4gMTsKIAotCQktLXRpbWVvdXQ7Ci0JfSAvKiB3aGlsZSAqLworCQltc2xlZXAoMTApOworCX0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGVuZF90aW1lKSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQyMywyMCArNDE1LDIwIEBACiAgKi8KIHN0YXRpYyBpbnQgaG9zdF9zdGFydHVwX2FjayhzdHJ1Y3Qgc291bmRzY2FwZSAqcywgdW5zaWduZWQgdGltZW91dCkKIHsKLQl3aGlsZSAodGltZW91dCAhPSAwKSB7CisJdW5zaWduZWQgbG9uZyBlbmRfdGltZSA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKHRpbWVvdXQpOworCisJZG8gewogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCQl1bnNpZ25lZCBjaGFyIHg7CiAKLQkJc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUoMSk7Ci0KIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnMtPmxvY2ssIGZsYWdzKTsKIAkJeCA9IGluYihIT1NUX0RBVEFfSU8ocy0+aW9fYmFzZSkpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5sb2NrLCBmbGFncyk7CiAJCWlmICh4ID09IDB4ZmUpCiAJCQlyZXR1cm4gMTsKIAotCQktLXRpbWVvdXQ7Ci0JfSAvKiB3aGlsZSAqLworCQltc2xlZXAoMTApOworCX0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGVuZF90aW1lKSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTUzMiwxMCArNTI0LDEwIEBACiAJICogZ2l2ZSBpdCA1IHNlY29uZHMgKG1heCkgLi4uCiAJICovCiAJcmV0ID0gMDsKLQlpZiAoIW9icF9zdGFydHVwX2FjayhzLCA1KSkgeworCWlmICghb2JwX3N0YXJ0dXBfYWNrKHMsIDUwMDApKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgInNzY2FwZTogTm8gcmVzcG9uc2UgZnJvbSBvbi1ib2FyZCBwcm9jZXNzb3IgYWZ0ZXIgdXBsb2FkXG4iKTsKIAkJcmV0ID0gLUVBR0FJTjsKLQl9IGVsc2UgaWYgKCFob3N0X3N0YXJ0dXBfYWNrKHMsIDUpKSB7CisJfSBlbHNlIGlmICghaG9zdF9zdGFydHVwX2FjayhzLCA1MDAwKSkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJzc2NhcGU6IFNvdW5kU2NhcGUgZmFpbGVkIHRvIGluaXRpYWxpc2VcbiIpOwogCQlyZXQgPSAtRUFHQUlOOwogCX0KQEAgLTczMiwxMyArNzI0LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnMtPmxvY2ssIGZsYWdzKTsKLQlzZXRfaG9zdF9tb2RlX3Vuc2FmZShzLT5pb19iYXNlKTsKLQotCWlmIChob3N0X3dyaXRlX2N0cmxfdW5zYWZlKHMtPmlvX2Jhc2UsIENNRF9HRVRfTUlESV9WT0wsIDEwMCkpIHsKLQkJdWN0bC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IGhvc3RfcmVhZF9jdHJsX3Vuc2FmZShzLT5pb19iYXNlLCAxMDApOwotCX0KLQotCXNldF9taWRpX21vZGVfdW5zYWZlKHMtPmlvX2Jhc2UpOworCXVjdGwtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBzLT5taWRpX3ZvbDsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5sb2NrLCBmbGFncyk7CiAJcmV0dXJuIDA7CiB9CkBAIC03NzMsNiArNzU5LDcgQEAKIAljaGFuZ2UgPSAoaG9zdF93cml0ZV9jdHJsX3Vuc2FmZShzLT5pb19iYXNlLCBDTURfU0VUX01JRElfVk9MLCAxMDApCiAJICAgICAgICAgICYmIGhvc3Rfd3JpdGVfY3RybF91bnNhZmUocy0+aW9fYmFzZSwgKCh1bnNpZ25lZCBjaGFyKSB1Y3RsLT52YWx1ZS5pbnRlZ2VyLiB2YWx1ZVswXSkgJiAxMjcsIDEwMCkKIAkgICAgICAgICAgJiYgaG9zdF93cml0ZV9jdHJsX3Vuc2FmZShzLT5pb19iYXNlLCBDTURfWFhYX01JRElfVk9MLCAxMDApKTsKKwlzLT5taWRpX3ZvbCA9ICh1bnNpZ25lZCBjaGFyKSB1Y3RsLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdICYgMTI3OwogICAgICAgX19za2lwX2NoYW5nZToKIAogCS8qCkBAIC04MTUsMTIgKzgwMiwxMSBAQAogICogUGVyZm9ybSBjZXJ0YWluIGFyY2FuZSBwb3J0LWNoZWNrcyB0byBzZWUgd2hldGhlciB0aGVyZQogICogaXMgYSBTb3VuZFNjYXBlIGJvYXJkIGx1cmtpbmcgYmVoaW5kIHRoZSBnaXZlbiBwb3J0cy4KICAqLwotc3RhdGljIGludCBfX2RldmluaXQgZGV0ZWN0X3NzY2FwZShzdHJ1Y3Qgc291bmRzY2FwZSAqcykKK3N0YXRpYyBpbnQgX19kZXZpbml0IGRldGVjdF9zc2NhcGUoc3RydWN0IHNvdW5kc2NhcGUgKnMsIGxvbmcgd3NzX2lvKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgZDsKIAlpbnQgcmV0dmFsID0gMDsKLQlpbnQgY29kZWMgPSBzLT53c3NfYmFzZTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZzLT5sb2NrLCBmbGFncyk7CiAKQEAgLTgzNiwxMyArODIyLDExIEBACiAJaWYgKChkICYgMHg4MCkgIT0gMCkKIAkJZ290byBfZG9uZTsKIAotCWlmIChkID09IDApIHsKLQkJcy0+Y29kZWNfdHlwZSA9IDE7CisJaWYgKGQgPT0gMCkKIAkJcy0+aWNfdHlwZSA9IElDX09ESUU7Ci0JfSBlbHNlIGlmICgoZCAmIDB4NjApICE9IDApIHsKLQkJcy0+Y29kZWNfdHlwZSA9IDI7CisJZWxzZSBpZiAoKGQgJiAweDYwKSAhPSAwKQogCQlzLT5pY190eXBlID0gSUNfT1BVUzsKLQl9IGVsc2UKKwllbHNlCiAJCWdvdG8gX2RvbmU7CiAKIAlvdXRiKDB4ZmEsIE9ESUVfQUREUl9JTyhzLT5pb19iYXNlKSk7CkBAIC04NjIsMTAgKzg0NiwxMCBAQAogCXNzY2FwZV93cml0ZV91bnNhZmUocy0+aW9fYmFzZSwgR0FfSE1DVExfUkVHLCBkIHwgMHhjMCk7CiAKIAlpZiAocy0+dHlwZSA9PSBTU0NBUEVfVklWTykKLQkJY29kZWMgKz0gNDsKKwkJd3NzX2lvICs9IDQ7CiAJLyogd2FpdCBmb3IgV1NTIGNvZGVjICovCiAJZm9yIChkID0gMDsgZCA8IDUwMDsgZCsrKSB7Ci0JCWlmICgoaW5iKGNvZGVjKSAmIDB4ODApID09IDApCisJCWlmICgoaW5iKHdzc19pbykgJiAweDgwKSA9PSAwKQogCQkJYnJlYWs7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPmxvY2ssIGZsYWdzKTsKIAkJbXNsZWVwKDEpOwpAQCAtOTU1LDgyICs5MzksNiBAQAogCiAKIC8qCi0gKiBPdmVycmlkZSBmb3IgdGhlIENTNDIzMSBwbGF5YmFjayBmb3JtYXQgZnVuY3Rpb24uCi0gKiBUaGUgQUQxODQ1IGhhcyBtdWNoIHNpbXBsZXIgZm9ybWF0IGFuZCByYXRlIHNlbGVjdGlvbi4KLSAqLwotc3RhdGljIHZvaWQgYWQxODQ1X3BsYXliYWNrX2Zvcm1hdChzdHJ1Y3Qgc25kX3dzcyAqY2hpcCwKLQkJCQkgICBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcywKLQkJCQkgICB1bnNpZ25lZCBjaGFyIGZvcm1hdCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIHJhdGUgPSBwYXJhbXNfcmF0ZShwYXJhbXMpOwotCi0JLyoKLQkgKiBUaGUgQUQxODQ1IGNhbid0IGhhbmRsZSBzYW1wbGUgZnJlcXVlbmNpZXMKLQkgKiBvdXRzaWRlIG9mIDQga0haIHRvIDUwIGtIWgotCSAqLwotCWlmIChyYXRlID4gNTAwMDApCi0JCXJhdGUgPSA1MDAwMDsKLQllbHNlIGlmIChyYXRlIDwgNDAwMCkKLQkJcmF0ZSA9IDQwMDA7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKLQotCS8qCi0JICogUHJvZ3JhbSB0aGUgQUQxODQ1IGNvcnJlY3RseSBmb3IgdGhlIHBsYXliYWNrIHN0cmVhbS4KLQkgKiBOb3RlIHRoYXQgd2UgZG8gTk9UIG5lZWQgdG8gdG9nZ2xlIHRoZSBNQ0UgYml0IGJlY2F1c2UKLQkgKiB0aGUgUExBWUJBQ0tfRU5BQkxFIGJpdCBvZiB0aGUgSW50ZXJmYWNlIENvbmZpZ3VyYXRpb24KLQkgKiByZWdpc3RlciBpcyBzZXQuCi0JICogCi0JICogTk9URTogV2Ugc2VlbSB0byBuZWVkIHRvIHdyaXRlIHRvIHRoZSBNU0IgYmVmb3JlIHRoZSBMU0IKLQkgKiAgICAgICB0byBnZXQgdGhlIGNvcnJlY3Qgc2FtcGxlIGZyZXF1ZW5jeS4KLQkgKi8KLQlzbmRfd3NzX291dChjaGlwLCBDUzQyMzFfUExBWUJLX0ZPUk1BVCwgKGZvcm1hdCAmIDB4ZjApKTsKLQlzbmRfd3NzX291dChjaGlwLCBBRDE4NDVfRlJFUV9TRUxfTVNCLCAodW5zaWduZWQgY2hhcikgKHJhdGUgPj4gOCkpOwotCXNuZF93c3Nfb3V0KGNoaXAsIEFEMTg0NV9GUkVRX1NFTF9MU0IsICh1bnNpZ25lZCBjaGFyKSByYXRlKTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7Ci19Ci0KLS8qCi0gKiBPdmVycmlkZSBmb3IgdGhlIENTNDIzMSBjYXB0dXJlIGZvcm1hdCBmdW5jdGlvbi4gCi0gKiBUaGUgQUQxODQ1IGhhcyBtdWNoIHNpbXBsZXIgZm9ybWF0IGFuZCByYXRlIHNlbGVjdGlvbi4KLSAqLwotc3RhdGljIHZvaWQgYWQxODQ1X2NhcHR1cmVfZm9ybWF0KHN0cnVjdCBzbmRfd3NzICpjaGlwLAotCQkJCSAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMsCi0JCQkJICB1bnNpZ25lZCBjaGFyIGZvcm1hdCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIHJhdGUgPSBwYXJhbXNfcmF0ZShwYXJhbXMpOwotCi0JLyoKLQkgKiBUaGUgQUQxODQ1IGNhbid0IGhhbmRsZSBzYW1wbGUgZnJlcXVlbmNpZXMgCi0JICogb3V0c2lkZSBvZiA0IGtIWiB0byA1MCBrSFoKLQkgKi8KLQlpZiAocmF0ZSA+IDUwMDAwKQotCQlyYXRlID0gNTAwMDA7Ci0JZWxzZSBpZiAocmF0ZSA8IDQwMDApCi0JCXJhdGUgPSA0MDAwOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7Ci0KLQkvKgotCSAqIFByb2dyYW0gdGhlIEFEMTg0NSBjb3JyZWN0bHkgZm9yIHRoZSBwbGF5YmFjayBzdHJlYW0uCi0JICogTm90ZSB0aGF0IHdlIGRvIE5PVCBuZWVkIHRvIHRvZ2dsZSB0aGUgTUNFIGJpdCBiZWNhdXNlCi0JICogdGhlIENBUFRVUkVfRU5BQkxFIGJpdCBvZiB0aGUgSW50ZXJmYWNlIENvbmZpZ3VyYXRpb24KLQkgKiByZWdpc3RlciBpcyBzZXQuCi0JICoKLQkgKiBOT1RFOiBXZSBzZWVtIHRvIG5lZWQgdG8gd3JpdGUgdG8gdGhlIE1TQiBiZWZvcmUgdGhlIExTQgotCSAqICAgICAgIHRvIGdldCB0aGUgY29ycmVjdCBzYW1wbGUgZnJlcXVlbmN5LgotCSAqLwotCXNuZF93c3Nfb3V0KGNoaXAsIENTNDIzMV9SRUNfRk9STUFULCAoZm9ybWF0ICYgMHhmMCkpOwotCXNuZF93c3Nfb3V0KGNoaXAsIEFEMTg0NV9GUkVRX1NFTF9NU0IsICh1bnNpZ25lZCBjaGFyKSAocmF0ZSA+PiA4KSk7Ci0Jc25kX3dzc19vdXQoY2hpcCwgQUQxODQ1X0ZSRVFfU0VMX0xTQiwgKHVuc2lnbmVkIGNoYXIpIHJhdGUpOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKLX0KLQotLyoKICAqIENyZWF0ZSBhbiBBRDE4NDUgUENNIHN1YmRldmljZSBvbiB0aGUgU291bmRTY2FwZS4gVGhlIEFEMTg0NQogICogaXMgdmVyeSBtdWNoIGxpa2UgYSBDUzQyMzEsIHdpdGggYSBmZXcgZXh0cmEgYml0cy4gV2Ugd2lsbAogICogdHJ5IHRvIHN1cHBvcnQgYXQgbGVhc3Qgc29tZSBvZiB0aGUgZXh0cmEgYml0cyBieSBvdmVycmlkaW5nCkBAIC0xMDU1LDExICs5NjMsNiBAQAogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCQlzdHJ1Y3Qgc25kX3BjbSAqcGNtOwogCi0jZGVmaW5lIEFEMTg0NV9GUkVRX1NFTF9FTkFCTEUgIDB4MDgKLQotI2RlZmluZSBBRDE4NDVfUFdSX0RPV05fQ1RSTCAgIDB4MWIKLSNkZWZpbmUgQUQxODQ1X0NSWVNfQ0xPQ0tfU0VMICAweDFkCi0KIC8qCiAgKiBJdCB0dXJucyBvdXQgdGhhdCB0aGUgUExBWUJBQ0tfRU5BQkxFIGJpdCBpcyBzZXQKICAqIGJ5IHRoZSBsb3dsZXZlbCBkcml2ZXIgLi4uCkBAIC0xMDc0LDcgKzk3Nyw2IEBACiAgKi8KIAogCQlpZiAoc3NjYXBlLT50eXBlICE9IFNTQ0FQRV9WSVZPKSB7Ci0JCQlpbnQgdmFsOwogCQkJLyoKIAkJCSAqIFRoZSBpbnB1dCBjbG9jayBmcmVxdWVuY3kgb24gdGhlIFNvdW5kU2NhcGUgbXVzdAogCQkJICogYmUgMTQuMzE4MTggTUh6LCBiZWNhdXNlIHdlIG11c3Qgc2V0IHRoaXMgcmVnaXN0ZXIKQEAgLTEwODIsMjIgKzk4NCwxMCBAQAogCQkJICovCiAJCQlzbmRfd3NzX21jZV91cChjaGlwKTsKIAkJCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwotCQkJc25kX3dzc19vdXQoY2hpcCwgQUQxODQ1X0NSWVNfQ0xPQ0tfU0VMLCAweDIwKTsKKwkJCXNuZF93c3Nfb3V0KGNoaXAsIEFEMTg0NV9DTE9DSywgMHgyMCk7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwogCQkJc25kX3dzc19tY2VfZG93bihjaGlwKTsKIAotCQkJLyoKLQkJCSAqIE1vcmUgY3VzdG9tIGNvbmZpZ3VyYXRpb246Ci0JCQkgKiBhKSBzZWxlY3QgIm1vZGUgMiIgYW5kIHByb3ZpZGUgYSBjdXJyZW50IGRyaXZlIG9mIDhtQQotCQkJICogYikgZW5hYmxlIGZyZXF1ZW5jeSBzZWxlY3Rpb24gKGZvciBjYXB0dXJlL3BsYXliYWNrKQotCQkJICovCi0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKLQkJCXNuZF93c3Nfb3V0KGNoaXAsIENTNDIzMV9NSVNDX0lORk8sCi0JCQkJICAgIENTNDIzMV9NT0RFMiB8IDB4MTApOwotCQkJdmFsID0gc25kX3dzc19pbihjaGlwLCBBRDE4NDVfUFdSX0RPV05fQ1RSTCk7Ci0JCQlzbmRfd3NzX291dChjaGlwLCBBRDE4NDVfUFdSX0RPV05fQ1RSTCwKLQkJCQkgICAgdmFsIHwgQUQxODQ1X0ZSRVFfU0VMX0VOQUJMRSk7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwogCQl9CiAKIAkJZXJyID0gc25kX3dzc19wY20oY2hpcCwgMCwgJnBjbSk7CkBAIC0xMTEzLDExICsxMDAzLDEzIEBACiAJCQkJCSAgICAiZm9yIEFEMTg0NSBjaGlwXG4iKTsKIAkJCWdvdG8gX2Vycm9yOwogCQl9Ci0JCWVyciA9IHNuZF93c3NfdGltZXIoY2hpcCwgMCwgTlVMTCk7Ci0JCWlmIChlcnIgPCAwKSB7Ci0JCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJzc2NhcGU6IE5vIHRpbWVyIGRldmljZSAiCi0JCQkJCSAgICAiZm9yIEFEMTg0NSBjaGlwXG4iKTsKLQkJCWdvdG8gX2Vycm9yOworCQlpZiAoY2hpcC0+aGFyZHdhcmUgIT0gV1NTX0hXX0FEMTg0OCkgeworCQkJZXJyID0gc25kX3dzc190aW1lcihjaGlwLCAwLCBOVUxMKTsKKwkJCWlmIChlcnIgPCAwKSB7CisJCQkJc25kX3ByaW50ayhLRVJOX0VSUiAic3NjYXBlOiBObyB0aW1lciBkZXZpY2UgIgorCQkJCQkJICAgICJmb3IgQUQxODQ1IGNoaXBcbiIpOworCQkJCWdvdG8gX2Vycm9yOworCQkJfQogCQl9CiAKIAkJaWYgKHNzY2FwZS0+dHlwZSAhPSBTU0NBUEVfVklWTykgewpAQCAtMTEyOCw4ICsxMDIwLDYgQEAKIAkJCQkJCSAgICAiTUlESSBtaXhlciBjb250cm9sXG4iKTsKIAkJCQlnb3RvIF9lcnJvcjsKIAkJCX0KLQkJCWNoaXAtPnNldF9wbGF5YmFja19mb3JtYXQgPSBhZDE4NDVfcGxheWJhY2tfZm9ybWF0OwotCQkJY2hpcC0+c2V0X2NhcHR1cmVfZm9ybWF0ID0gYWQxODQ1X2NhcHR1cmVfZm9ybWF0OwogCQl9CiAKIAkJc3RyY3B5KGNhcmQtPmRyaXZlciwgIlNvdW5kU2NhcGUiKTsKQEAgLTExNTcsNyArMTA0Nyw2IEBACiAJdW5zaWduZWQgZG1hX2NmZzsKIAl1bnNpZ25lZCBpcnFfY2ZnOwogCXVuc2lnbmVkIG1wdV9pcnFfY2ZnOwotCXVuc2lnbmVkIHhwb3J0OwogCXN0cnVjdCByZXNvdXJjZSAqaW9fcmVzOwogCXN0cnVjdCByZXNvdXJjZSAqd3NzX3JlczsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMTE3NywxNSArMTA2NiwxNSBAQAogCQlwcmludGsoS0VSTl9FUlIgInNzY2FwZTogSW52YWxpZCBJUlEgJWRcbiIsIG1wdV9pcnFbZGV2XSk7CiAJCXJldHVybiAtRU5YSU87CiAJfQotCXhwb3J0ID0gcG9ydFtkZXZdOwogCiAJLyoKIAkgKiBHcmFiIElPIHBvcnRzIHRoYXQgd2Ugd2lsbCBuZWVkIHRvIHByb2JlIHNvIHRoYXQgd2UKIAkgKiBjYW4gZGV0ZWN0IGFuZCBjb250cm9sIHRoaXMgaGFyZHdhcmUgLi4uCiAJICovCi0JaW9fcmVzID0gcmVxdWVzdF9yZWdpb24oeHBvcnQsIDgsICJTb3VuZFNjYXBlIik7CisJaW9fcmVzID0gcmVxdWVzdF9yZWdpb24ocG9ydFtkZXZdLCA4LCAiU291bmRTY2FwZSIpOwogCWlmICghaW9fcmVzKSB7Ci0JCXNuZF9wcmludGsoS0VSTl9FUlIgInNzY2FwZTogY2FuJ3QgZ3JhYiBwb3J0IDB4JXhcbiIsIHhwb3J0KTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUgorCQkJICAgInNzY2FwZTogY2FuJ3QgZ3JhYiBwb3J0IDB4JWx4XG4iLCBwb3J0W2Rldl0pOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAl3c3NfcmVzID0gTlVMTDsKQEAgLTEyMTIsMTAgKzExMDEsOSBAQAogCXNwaW5fbG9ja19pbml0KCZzc2NhcGUtPmZ3bG9jayk7CiAJc3NjYXBlLT5pb19yZXMgPSBpb19yZXM7CiAJc3NjYXBlLT53c3NfcmVzID0gd3NzX3JlczsKLQlzc2NhcGUtPmlvX2Jhc2UgPSB4cG9ydDsKLQlzc2NhcGUtPndzc19iYXNlID0gd3NzX3BvcnRbZGV2XTsKKwlzc2NhcGUtPmlvX2Jhc2UgPSBwb3J0W2Rldl07CiAKLQlpZiAoIWRldGVjdF9zc2NhcGUoc3NjYXBlKSkgeworCWlmICghZGV0ZWN0X3NzY2FwZShzc2NhcGUsIHdzc19wb3J0W2Rldl0pKSB7CiAJCXByaW50ayhLRVJOX0VSUiAic3NjYXBlOiBoYXJkd2FyZSBub3QgZGV0ZWN0ZWQgYXQgMHgleFxuIiwgc3NjYXBlLT5pb19iYXNlKTsKIAkJZXJyID0gLUVOT0RFVjsKIAkJZ290byBfcmVsZWFzZV9kbWE7CkBAIC0xMjg4LDEyICsxMTc2LDExIEBACiAJfQogI2RlZmluZSBNSURJX0RFVk5VTSAgMAogCWlmIChzc2NhcGUtPnR5cGUgIT0gU1NDQVBFX1ZJVk8pIHsKLQkJZXJyID0gY3JlYXRlX21wdTQwMShjYXJkLCBNSURJX0RFVk5VTSwKLQkJCQkgICAgTVBVNDAxX0lPKHhwb3J0KSwgbXB1X2lycVtkZXZdKTsKKwkJZXJyID0gY3JlYXRlX21wdTQwMShjYXJkLCBNSURJX0RFVk5VTSwgcG9ydFtkZXZdLCBtcHVfaXJxW2Rldl0pOwogCQlpZiAoZXJyIDwgMCkgewogCQkJcHJpbnRrKEtFUk5fRVJSICJzc2NhcGU6IEZhaWxlZCB0byBjcmVhdGUgIgotCQkJCQkiTVBVLTQwMSBkZXZpY2UgYXQgMHgleFxuIiwKLQkJCQkJTVBVNDAxX0lPKHhwb3J0KSk7CisJCQkJCSJNUFUtNDAxIGRldmljZSBhdCAweCVseFxuIiwKKwkJCQkJcG9ydFtkZXZdKTsKIAkJCWdvdG8gX3JlbGVhc2VfZG1hOwogCQl9CiAKQEAgLTEzNTcsMTAgKzEyNDQsMTAgQEAKIAlzdHJ1Y3Qgc291bmRzY2FwZSAqc3NjYXBlOwogCWludCByZXQ7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAotCQkJICAgIHNpemVvZihzdHJ1Y3Qgc291bmRzY2FwZSkpOwotCWlmICghY2FyZCkKLQkJcmV0dXJuIC1FTk9NRU07CisJcmV0ID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAorCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBzb3VuZHNjYXBlKSwgJmNhcmQpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OwogCiAJc3NjYXBlID0gZ2V0X2NhcmRfc291bmRzY2FwZShjYXJkKTsKIAlzc2NhcGUtPnR5cGUgPSBTU0NBUEU7CkBAIC0xNDYyLDEwICsxMzQ5LDEwIEBACiAJICogQ3JlYXRlIGEgbmV3IEFMU0Egc291bmQgY2FyZCBlbnRyeSwgaW4gYW50aWNpcGF0aW9uCiAJICogb2YgZGV0ZWN0aW5nIG91ciBoYXJkd2FyZSAuLi4KIAkgKi8KLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2lkeF0sIGlkW2lkeF0sIFRISVNfTU9EVUxFLAotCQkJICAgIHNpemVvZihzdHJ1Y3Qgc291bmRzY2FwZSkpOwotCWlmICghY2FyZCkKLQkJcmV0dXJuIC1FTk9NRU07CisJcmV0ID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2lkeF0sIGlkW2lkeF0sIFRISVNfTU9EVUxFLAorCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBzb3VuZHNjYXBlKSwgJmNhcmQpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OwogCiAJc3NjYXBlID0gZ2V0X2NhcmRfc291bmRzY2FwZShjYXJkKTsKIApkaWZmIC0tZ2l0IGEvc291bmQvaXNhL3dhdmVmcm9udC93YXZlZnJvbnQuYyBiL3NvdW5kL2lzYS93YXZlZnJvbnQvd2F2ZWZyb250LmMKaW5kZXggNGMwOTViYy4uYTM0YWU3YiAxMDA2NDQKLS0tIGEvc291bmQvaXNhL3dhdmVmcm9udC93YXZlZnJvbnQuYworKysgYi9zb3VuZC9pc2Evd2F2ZWZyb250L3dhdmVmcm9udC5jCkBAIC0zMzgsMTUgKzMzOCwxNiBAQAogCX0KIH0KIAotc3RhdGljIHN0cnVjdCBzbmRfY2FyZCAqc25kX3dhdmVmcm9udF9jYXJkX25ldyhpbnQgZGV2KQorc3RhdGljIGludCBzbmRfd2F2ZWZyb250X2NhcmRfbmV3KGludCBkZXYsIHN0cnVjdCBzbmRfY2FyZCAqKmNhcmRwKQogewogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKIAlzbmRfd2F2ZWZyb250X2NhcmRfdCAqYWNhcmQ7CisJaW50IGVycjsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcgKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAotCQkJICAgICBzaXplb2Yoc25kX3dhdmVmcm9udF9jYXJkX3QpKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gTlVMTDsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisJCQkgICAgICBzaXplb2Yoc25kX3dhdmVmcm9udF9jYXJkX3QpLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAlhY2FyZCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAlhY2FyZC0+d2F2ZWZyb250LmlycSA9IC0xOwpAQCAtMzU3LDcgKzM1OCw4IEBACiAJYWNhcmQtPndhdmVmcm9udC5jYXJkID0gY2FyZDsKIAljYXJkLT5wcml2YXRlX2ZyZWUgPSBzbmRfd2F2ZWZyb250X2ZyZWU7CiAKLQlyZXR1cm4gY2FyZDsKKwkqY2FyZHAgPSBjYXJkOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IF9fZGV2aW5pdApAQCAtNTUxLDExICs1NTMsMTEgQEAKIAkJcmV0dXJuIDA7CiAjZW5kaWYKIAlpZiAoY3M0MjMyX3BjbV9wb3J0W2Rldl0gPT0gU05EUlZfQVVUT19QT1JUKSB7Ci0JCXNuZF9wcmludGsoInNwZWNpZnkgQ1M0MjMyIHBvcnRcbiIpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJzcGVjaWZ5IENTNDIzMiBwb3J0XG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCWlmIChpY3MyMTE1X3BvcnRbZGV2XSA9PSBTTkRSVl9BVVRPX1BPUlQpIHsKLQkJc25kX3ByaW50aygic3BlY2lmeSBJQ1MyMTE1IHBvcnRcbiIpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJzcGVjaWZ5IElDUzIxMTUgcG9ydFxuIik7CiAJCXJldHVybiAwOwogCX0KIAlyZXR1cm4gMTsKQEAgLTU2Nyw5ICs1NjksOSBAQAogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKIAlpbnQgZXJyOwogCi0JY2FyZCA9IHNuZF93YXZlZnJvbnRfY2FyZF9uZXcoZGV2KTsKLQlpZiAoISBjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfd2F2ZWZyb250X2NhcmRfbmV3KGRldiwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgcGRldik7CiAJaWYgKChlcnIgPSBzbmRfd2F2ZWZyb250X3Byb2JlKGNhcmQsIGRldikpIDwgMCkgewogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwpAQCAtNjE2LDkgKzYxOCw5IEBACiAJaWYgKGRldiA+PSBTTkRSVl9DQVJEUykKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQljYXJkID0gc25kX3dhdmVmcm9udF9jYXJkX25ldyhkZXYpOwotCWlmICghIGNhcmQpCi0JCXJldHVybiAtRU5PTUVNOworCXJlcyA9IHNuZF93YXZlZnJvbnRfY2FyZF9uZXcoZGV2LCAmY2FyZCk7CisJaWYgKHJlcyA8IDApCisJCXJldHVybiByZXM7CiAKIAlpZiAoc25kX3dhdmVmcm9udF9wbnAgKGRldiwgY2FyZC0+cHJpdmF0ZV9kYXRhLCBwY2FyZCwgcGlkKSA8IDApIHsKIAkJaWYgKGNzNDIzMl9wY21fcG9ydFtkZXZdID09IFNORFJWX0FVVE9fUE9SVCkgewpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL3dhdmVmcm9udC93YXZlZnJvbnRfc3ludGguYyBiL3NvdW5kL2lzYS93YXZlZnJvbnQvd2F2ZWZyb250X3N5bnRoLmMKaW5kZXggNGM0MTA4Mi4uYmViMzEyYyAxMDA2NDQKLS0tIGEvc291bmQvaXNhL3dhdmVmcm9udC93YXZlZnJvbnRfc3ludGguYworKysgYi9zb3VuZC9pc2Evd2F2ZWZyb250L3dhdmVmcm9udF9zeW50aC5jCkBAIC02MzMsNyArNjMzLDcgQEAKIAkJd2J1ZlsxXSA9IGkgPj4gNzsKIAogCQlpZiAoc25kX3dhdmVmcm9udF9jbWQgKGRldiwgV0ZDX0lERU5USUZZX1NBTVBMRV9UWVBFLCByYnVmLCB3YnVmKSkgewotCQkJc25kX3ByaW50aygiY2Fubm90IGlkZW50aWZ5IHNhbXBsZSAiCisJCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORyAiY2Fubm90IGlkZW50aWZ5IHNhbXBsZSAiCiAJCQkJICAgInR5cGUgb2Ygc2xvdCAlZFxuIiwgaSk7CiAJCQlkZXYtPnNhbXBsZV9zdGF0dXNbaV0gPSBXRl9TVF9FTVBUWTsKIAkJCWNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL3dzcy93c3NfbGliLmMgYi9zb3VuZC9pc2Evd3NzL3dzc19saWIuYwppbmRleCAzZDZjNWYyLi41ZDJiYTFiIDEwMDY0NAotLS0gYS9zb3VuZC9pc2Evd3NzL3dzc19saWIuYworKysgYi9zb3VuZC9pc2Evd3NzL3dzc19saWIuYwpAQCAtMTgxLDI1ICsxODEsNiBAQAogCQl1ZGVsYXkoMTAwKTsKIH0KIAotc3RhdGljIHZvaWQgc25kX3dzc19vdXRtKHN0cnVjdCBzbmRfd3NzICpjaGlwLCB1bnNpZ25lZCBjaGFyIHJlZywKLQkJCSAgICB1bnNpZ25lZCBjaGFyIG1hc2ssIHVuc2lnbmVkIGNoYXIgdmFsdWUpCi17Ci0JdW5zaWduZWQgY2hhciB0bXAgPSAoY2hpcC0+aW1hZ2VbcmVnXSAmIG1hc2spIHwgdmFsdWU7Ci0KLQlzbmRfd3NzX3dhaXQoY2hpcCk7Ci0jaWZkZWYgQ09ORklHX1NORF9ERUJVRwotCWlmICh3c3NfaW5iKGNoaXAsIENTNDIzMVAoUkVHU0VMKSkgJiBDUzQyMzFfSU5JVCkKLQkJc25kX3ByaW50aygib3V0bTogYXV0byBjYWxpYnJhdGlvbiB0aW1lIG91dCAtIHJlZyA9IDB4JXgsIHZhbHVlID0gMHgleFxuIiwgcmVnLCB2YWx1ZSk7Ci0jZW5kaWYKLQljaGlwLT5pbWFnZVtyZWddID0gdG1wOwotCWlmICghY2hpcC0+Y2FsaWJyYXRlX211dGUpIHsKLQkJd3NzX291dGIoY2hpcCwgQ1M0MjMxUChSRUdTRUwpLCBjaGlwLT5tY2VfYml0IHwgcmVnKTsKLQkJd21iKCk7Ci0JCXdzc19vdXRiKGNoaXAsIENTNDIzMVAoUkVHKSwgdG1wKTsKLQkJbWIoKTsKLQl9Ci19Ci0KIHN0YXRpYyB2b2lkIHNuZF93c3NfZG91dChzdHJ1Y3Qgc25kX3dzcyAqY2hpcCwgdW5zaWduZWQgY2hhciByZWcsCiAJCQkgdW5zaWduZWQgY2hhciB2YWx1ZSkKIHsKQEAgLTIxOSw3ICsyMDAsOCBAQAogCXNuZF93c3Nfd2FpdChjaGlwKTsKICNpZmRlZiBDT05GSUdfU05EX0RFQlVHCiAJaWYgKHdzc19pbmIoY2hpcCwgQ1M0MjMxUChSRUdTRUwpKSAmIENTNDIzMV9JTklUKQotCQlzbmRfcHJpbnRrKCJvdXQ6IGF1dG8gY2FsaWJyYXRpb24gdGltZSBvdXQgLSByZWcgPSAweCV4LCB2YWx1ZSA9IDB4JXhcbiIsIHJlZywgdmFsdWUpOworCQlzbmRfcHJpbnRrKEtFUk5fREVCVUcgIm91dDogYXV0byBjYWxpYnJhdGlvbiB0aW1lIG91dCAiCisJCQkgICAiLSByZWcgPSAweCV4LCB2YWx1ZSA9IDB4JXhcbiIsIHJlZywgdmFsdWUpOwogI2VuZGlmCiAJd3NzX291dGIoY2hpcCwgQ1M0MjMxUChSRUdTRUwpLCBjaGlwLT5tY2VfYml0IHwgcmVnKTsKIAl3c3Nfb3V0YihjaGlwLCBDUzQyMzFQKFJFRyksIHZhbHVlKTsKQEAgLTIzNSw3ICsyMTcsOCBAQAogCXNuZF93c3Nfd2FpdChjaGlwKTsKICNpZmRlZiBDT05GSUdfU05EX0RFQlVHCiAJaWYgKHdzc19pbmIoY2hpcCwgQ1M0MjMxUChSRUdTRUwpKSAmIENTNDIzMV9JTklUKQotCQlzbmRfcHJpbnRrKCJpbjogYXV0byBjYWxpYnJhdGlvbiB0aW1lIG91dCAtIHJlZyA9IDB4JXhcbiIsIHJlZyk7CisJCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiaW46IGF1dG8gY2FsaWJyYXRpb24gdGltZSBvdXQgIgorCQkJICAgIi0gcmVnID0gMHgleFxuIiwgcmVnKTsKICNlbmRpZgogCXdzc19vdXRiKGNoaXAsIENTNDIzMVAoUkVHU0VMKSwgY2hpcC0+bWNlX2JpdCB8IHJlZyk7CiAJbWIoKTsKQEAgLTI1Miw3ICsyMzUsNyBAQAogCXdzc19vdXRiKGNoaXAsIENTNDIzMVAoUkVHKSwgdmFsKTsKIAljaGlwLT5laW1hZ2VbQ1M0MjM2X1JFRyhyZWcpXSA9IHZhbDsKICNpZiAwCi0JcHJpbnRrKCJleHQgb3V0IDogcmVnID0gMHgleCwgdmFsID0gMHgleFxuIiwgcmVnLCB2YWwpOworCXByaW50ayhLRVJOX0RFQlVHICJleHQgb3V0IDogcmVnID0gMHgleCwgdmFsID0gMHgleFxuIiwgcmVnLCB2YWwpOwogI2VuZGlmCiB9CiBFWFBPUlRfU1lNQk9MKHNuZF9jczQyMzZfZXh0X291dCk7CkBAIC0yNjgsNyArMjUxLDggQEAKIAl7CiAJCXVuc2lnbmVkIGNoYXIgcmVzOwogCQlyZXMgPSB3c3NfaW5iKGNoaXAsIENTNDIzMVAoUkVHKSk7Ci0JCXByaW50aygiZXh0IGluIDogcmVnID0gMHgleCwgdmFsID0gMHgleFxuIiwgcmVnLCByZXMpOworCQlwcmludGsoS0VSTl9ERUJVRyAiZXh0IGluIDogcmVnID0gMHgleCwgdmFsID0gMHgleFxuIiwKKwkJICAgICAgIHJlZywgcmVzKTsKIAkJcmV0dXJuIHJlczsKIAl9CiAjZW5kaWYKQEAgLTM5NCwxMyArMzc4LDE2IEBACiAJc25kX3dzc193YWl0KGNoaXApOwogI2lmZGVmIENPTkZJR19TTkRfREVCVUcKIAlpZiAod3NzX2luYihjaGlwLCBDUzQyMzFQKFJFR1NFTCkpICYgQ1M0MjMxX0lOSVQpCi0JCXNuZF9wcmludGsoIm1jZV91cCAtIGF1dG8gY2FsaWJyYXRpb24gdGltZSBvdXQgKDApXG4iKTsKKwkJc25kX3ByaW50ayhLRVJOX0RFQlVHCisJCQkgICAibWNlX3VwIC0gYXV0byBjYWxpYnJhdGlvbiB0aW1lIG91dCAoMClcbiIpOwogI2VuZGlmCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CiAJY2hpcC0+bWNlX2JpdCB8PSBDUzQyMzFfTUNFOwogCXRpbWVvdXQgPSB3c3NfaW5iKGNoaXAsIENTNDIzMVAoUkVHU0VMKSk7CiAJaWYgKHRpbWVvdXQgPT0gMHg4MCkKLQkJc25kX3ByaW50aygibWNlX3VwIFsweCVseF06IHNlcmlvdXMgaW5pdCBwcm9ibGVtIC0gY29kZWMgc3RpbGwgYnVzeVxuIiwgY2hpcC0+cG9ydCk7CisJCXNuZF9wcmludGsoS0VSTl9ERUJVRyAibWNlX3VwIFsweCVseF06ICIKKwkJCSAgICJzZXJpb3VzIGluaXQgcHJvYmxlbSAtIGNvZGVjIHN0aWxsIGJ1c3lcbiIsCisJCQkgICBjaGlwLT5wb3J0KTsKIAlpZiAoISh0aW1lb3V0ICYgQ1M0MjMxX01DRSkpCiAJCXdzc19vdXRiKGNoaXAsIENTNDIzMVAoUkVHU0VMKSwKIAkJCSBjaGlwLT5tY2VfYml0IHwgKHRpbWVvdXQgJiAweDFmKSk7CkBAIC00MTksNyArNDA2LDkgQEAKIAogI2lmZGVmIENPTkZJR19TTkRfREVCVUcKIAlpZiAod3NzX2luYihjaGlwLCBDUzQyMzFQKFJFR1NFTCkpICYgQ1M0MjMxX0lOSVQpCi0JCXNuZF9wcmludGsoIm1jZV9kb3duIFsweCVseF0gLSBhdXRvIGNhbGlicmF0aW9uIHRpbWUgb3V0ICgwKVxuIiwgKGxvbmcpQ1M0MjMxUChSRUdTRUwpKTsKKwkJc25kX3ByaW50ayhLRVJOX0RFQlVHICJtY2VfZG93biBbMHglbHhdIC0gIgorCQkJICAgImF1dG8gY2FsaWJyYXRpb24gdGltZSBvdXQgKDApXG4iLAorCQkJICAgKGxvbmcpQ1M0MjMxUChSRUdTRUwpKTsKICNlbmRpZgogCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwogCWNoaXAtPm1jZV9iaXQgJj0gfkNTNDIzMV9NQ0U7CkBAIC00MjcsNyArNDE2LDkgQEAKIAl3c3Nfb3V0YihjaGlwLCBDUzQyMzFQKFJFR1NFTCksIGNoaXAtPm1jZV9iaXQgfCAodGltZW91dCAmIDB4MWYpKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwogCWlmICh0aW1lb3V0ID09IDB4ODApCi0JCXNuZF9wcmludGsoIm1jZV9kb3duIFsweCVseF06IHNlcmlvdXMgaW5pdCBwcm9ibGVtIC0gY29kZWMgc3RpbGwgYnVzeVxuIiwgY2hpcC0+cG9ydCk7CisJCXNuZF9wcmludGsoS0VSTl9ERUJVRyAibWNlX2Rvd24gWzB4JWx4XTogIgorCQkJICAgInNlcmlvdXMgaW5pdCBwcm9ibGVtIC0gY29kZWMgc3RpbGwgYnVzeVxuIiwKKwkJCSAgIGNoaXAtPnBvcnQpOwogCWlmICgodGltZW91dCAmIENTNDIzMV9NQ0UpID09IDAgfHwgIShjaGlwLT5oYXJkd2FyZSAmIGh3X21hc2spKQogCQlyZXR1cm47CiAKQEAgLTU2NSw3ICs1NTYsNyBAQAogCWlmIChjaGFubmVscyA+IDEpCiAJCXJmb3JtYXQgfD0gQ1M0MjMxX1NURVJFTzsKICNpZiAwCi0Jc25kX3ByaW50aygiZ2V0X2Zvcm1hdDogMHgleCAobW9kZT0weCV4KVxuIiwgZm9ybWF0LCBtb2RlKTsKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcgImdldF9mb3JtYXQ6IDB4JXggKG1vZGU9MHgleClcbiIsIGZvcm1hdCwgbW9kZSk7CiAjZW5kaWYKIAlyZXR1cm4gcmZvcm1hdDsKIH0KQEAgLTU4Nyw3ICs1NzgsMTUgQEAKIAkJCSAgICAgY2hpcC0+aW1hZ2VbQ1M0MjMxX1JJR0hUX0lOUFVUXSk7CiAJCXNuZF93c3NfZG91dChjaGlwLCBDUzQyMzFfTE9PUEJBQ0ssCiAJCQkgICAgIGNoaXAtPmltYWdlW0NTNDIzMV9MT09QQkFDS10pOworCX0gZWxzZSB7CisJCXNuZF93c3NfZG91dChjaGlwLCBDUzQyMzFfTEVGVF9JTlBVVCwKKwkJCSAgICAgMCk7CisJCXNuZF93c3NfZG91dChjaGlwLCBDUzQyMzFfUklHSFRfSU5QVVQsCisJCQkgICAgIDApOworCQlzbmRfd3NzX2RvdXQoY2hpcCwgQ1M0MjMxX0xPT1BCQUNLLAorCQkJICAgICAweGZkKTsKIAl9CisKIAlzbmRfd3NzX2RvdXQoY2hpcCwgQ1M0MjMxX0FVWDFfTEVGVF9JTlBVVCwKIAkJICAgICBtdXRlIHwgY2hpcC0+aW1hZ2VbQ1M0MjMxX0FVWDFfTEVGVF9JTlBVVF0pOwogCXNuZF93c3NfZG91dChjaGlwLCBDUzQyMzFfQVVYMV9SSUdIVF9JTlBVVCwKQEAgLTYzMCw3ICs2MjksNiBAQAogCWludCBmdWxsX2NhbGliID0gMTsKIAogCW11dGV4X2xvY2soJmNoaXAtPm1jZV9tdXRleCk7Ci0Jc25kX3dzc19jYWxpYnJhdGVfbXV0ZShjaGlwLCAxKTsKIAlpZiAoY2hpcC0+aGFyZHdhcmUgPT0gV1NTX0hXX0NTNDIzMUEgfHwKIAkgICAgKGNoaXAtPmhhcmR3YXJlICYgV1NTX0hXX0NTNDIzMl9NQVNLKSkgewogCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKQEAgLTY0Niw2ICs2NDQsMjQgQEAKIAkJCWZ1bGxfY2FsaWIgPSAwOwogCQl9CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CisJfSBlbHNlIGlmIChjaGlwLT5oYXJkd2FyZSA9PSBXU1NfSFdfQUQxODQ1KSB7CisJCXVuc2lnbmVkIHJhdGUgPSBwYXJhbXNfcmF0ZShwYXJhbXMpOworCisJCS8qCisJCSAqIFByb2dyYW0gdGhlIEFEMTg0NSBjb3JyZWN0bHkgZm9yIHRoZSBwbGF5YmFjayBzdHJlYW0uCisJCSAqIE5vdGUgdGhhdCB3ZSBkbyBOT1QgbmVlZCB0byB0b2dnbGUgdGhlIE1DRSBiaXQgYmVjYXVzZQorCQkgKiB0aGUgUExBWUJBQ0tfRU5BQkxFIGJpdCBvZiB0aGUgSW50ZXJmYWNlIENvbmZpZ3VyYXRpb24KKwkJICogcmVnaXN0ZXIgaXMgc2V0LgorCQkgKgorCQkgKiBOT1RFOiBXZSBzZWVtIHRvIG5lZWQgdG8gd3JpdGUgdG8gdGhlIE1TQiBiZWZvcmUgdGhlIExTQgorCQkgKiAgICAgICB0byBnZXQgdGhlIGNvcnJlY3Qgc2FtcGxlIGZyZXF1ZW5jeS4KKwkJICovCisJCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOworCQlzbmRfd3NzX291dChjaGlwLCBDUzQyMzFfUExBWUJLX0ZPUk1BVCwgKHBkZnIgJiAweGYwKSk7CisJCXNuZF93c3Nfb3V0KGNoaXAsIEFEMTg0NV9VUFJfRlJFUV9TRUwsIChyYXRlID4+IDgpICYgMHhmZik7CisJCXNuZF93c3Nfb3V0KGNoaXAsIEFEMTg0NV9MV1JfRlJFUV9TRUwsIHJhdGUgJiAweGZmKTsKKwkJZnVsbF9jYWxpYiA9IDA7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CiAJfQogCWlmIChmdWxsX2NhbGliKSB7CiAJCXNuZF93c3NfbWNlX3VwKGNoaXApOwpAQCAtNjYzLDcgKzY3OSw2IEBACiAJCQl1ZGVsYXkoMTAwKTsJLyogdGhpcyBzZWVtcyB0byBoZWxwICovCiAJCXNuZF93c3NfbWNlX2Rvd24oY2hpcCk7CiAJfQotCXNuZF93c3NfY2FsaWJyYXRlX211dGUoY2hpcCwgMCk7CiAJbXV0ZXhfdW5sb2NrKCZjaGlwLT5tY2VfbXV0ZXgpOwogfQogCkBAIC02NzUsNyArNjkwLDYgQEAKIAlpbnQgZnVsbF9jYWxpYiA9IDE7CiAKIAltdXRleF9sb2NrKCZjaGlwLT5tY2VfbXV0ZXgpOwotCXNuZF93c3NfY2FsaWJyYXRlX211dGUoY2hpcCwgMSk7CiAJaWYgKGNoaXAtPmhhcmR3YXJlID09IFdTU19IV19DUzQyMzFBIHx8CiAJICAgIChjaGlwLT5oYXJkd2FyZSAmIFdTU19IV19DUzQyMzJfTUFTSykpIHsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CkBAIC02OTAsNiArNzA0LDI0IEBACiAJCQlmdWxsX2NhbGliID0gMDsKIAkJfQogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOworCX0gZWxzZSBpZiAoY2hpcC0+aGFyZHdhcmUgPT0gV1NTX0hXX0FEMTg0NSkgeworCQl1bnNpZ25lZCByYXRlID0gcGFyYW1zX3JhdGUocGFyYW1zKTsKKworCQkvKgorCQkgKiBQcm9ncmFtIHRoZSBBRDE4NDUgY29ycmVjdGx5IGZvciB0aGUgY2FwdHVyZSBzdHJlYW0uCisJCSAqIE5vdGUgdGhhdCB3ZSBkbyBOT1QgbmVlZCB0byB0b2dnbGUgdGhlIE1DRSBiaXQgYmVjYXVzZQorCQkgKiB0aGUgUExBWUJBQ0tfRU5BQkxFIGJpdCBvZiB0aGUgSW50ZXJmYWNlIENvbmZpZ3VyYXRpb24KKwkJICogcmVnaXN0ZXIgaXMgc2V0LgorCQkgKgorCQkgKiBOT1RFOiBXZSBzZWVtIHRvIG5lZWQgdG8gd3JpdGUgdG8gdGhlIE1TQiBiZWZvcmUgdGhlIExTQgorCQkgKiAgICAgICB0byBnZXQgdGhlIGNvcnJlY3Qgc2FtcGxlIGZyZXF1ZW5jeS4KKwkJICovCisJCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOworCQlzbmRfd3NzX291dChjaGlwLCBDUzQyMzFfUkVDX0ZPUk1BVCwgKGNkZnIgJiAweGYwKSk7CisJCXNuZF93c3Nfb3V0KGNoaXAsIEFEMTg0NV9VUFJfRlJFUV9TRUwsIChyYXRlID4+IDgpICYgMHhmZik7CisJCXNuZF93c3Nfb3V0KGNoaXAsIEFEMTg0NV9MV1JfRlJFUV9TRUwsIHJhdGUgJiAweGZmKTsKKwkJZnVsbF9jYWxpYiA9IDA7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CiAJfQogCWlmIChmdWxsX2NhbGliKSB7CiAJCXNuZF93c3NfbWNlX3VwKGNoaXApOwpAQCAtNzE0LDcgKzc0Niw2IEBACiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CiAJCXNuZF93c3NfbWNlX2Rvd24oY2hpcCk7CiAJfQotCXNuZF93c3NfY2FsaWJyYXRlX211dGUoY2hpcCwgMCk7CiAJbXV0ZXhfdW5sb2NrKCZjaGlwLT5tY2VfbXV0ZXgpOwogfQogCkBAIC03NzEsMTAgKzgwMiwxMSBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwlzbmRfd3NzX2NhbGlicmF0ZV9tdXRlKGNoaXAsIDEpOwogCXNuZF93c3NfbWNlX2Rvd24oY2hpcCk7CiAKICNpZmRlZiBTTkRSVl9ERUJVR19NQ0UKLQlzbmRfcHJpbnRrKCJpbml0OiAoMSlcbiIpOworCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiaW5pdDogKDEpXG4iKTsKICNlbmRpZgogCXNuZF93c3NfbWNlX3VwKGNoaXApOwogCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwpAQCAtNzg5LDE4ICs4MjEsMjAgQEAKIAlzbmRfd3NzX21jZV9kb3duKGNoaXApOwogCiAjaWZkZWYgU05EUlZfREVCVUdfTUNFCi0Jc25kX3ByaW50aygiaW5pdDogKDIpXG4iKTsKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcgImluaXQ6ICgyKVxuIik7CiAjZW5kaWYKIAogCXNuZF93c3NfbWNlX3VwKGNoaXApOwogCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOworCWNoaXAtPmltYWdlW0NTNDIzMV9JRkFDRV9DVFJMXSAmPSB+Q1M0MjMxX0FVVE9DQUxJQjsKKwlzbmRfd3NzX291dChjaGlwLCBDUzQyMzFfSUZBQ0VfQ1RSTCwgY2hpcC0+aW1hZ2VbQ1M0MjMxX0lGQUNFX0NUUkxdKTsKIAlzbmRfd3NzX291dChjaGlwLAogCQkgICAgQ1M0MjMxX0FMVF9GRUFUVVJFXzEsIGNoaXAtPmltYWdlW0NTNDIzMV9BTFRfRkVBVFVSRV8xXSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKIAlzbmRfd3NzX21jZV9kb3duKGNoaXApOwogCiAjaWZkZWYgU05EUlZfREVCVUdfTUNFCi0Jc25kX3ByaW50aygiaW5pdDogKDMpIC0gYWZlaSA9IDB4JXhcbiIsCisJc25kX3ByaW50ayhLRVJOX0RFQlVHICJpbml0OiAoMykgLSBhZmVpID0gMHgleFxuIiwKIAkJICAgY2hpcC0+aW1hZ2VbQ1M0MjMxX0FMVF9GRUFUVVJFXzFdKTsKICNlbmRpZgogCkBAIC04MTcsNyArODUxLDcgQEAKIAlzbmRfd3NzX21jZV9kb3duKGNoaXApOwogCiAjaWZkZWYgU05EUlZfREVCVUdfTUNFCi0Jc25kX3ByaW50aygiaW5pdDogKDQpXG4iKTsKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcgImluaXQ6ICg0KVxuIik7CiAjZW5kaWYKIAogCXNuZF93c3NfbWNlX3VwKGNoaXApOwpAQCAtODI3LDkgKzg2MSwxMCBAQAogCQkJICAgIGNoaXAtPmltYWdlW0NTNDIzMV9SRUNfRk9STUFUXSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKIAlzbmRfd3NzX21jZV9kb3duKGNoaXApOworCXNuZF93c3NfY2FsaWJyYXRlX211dGUoY2hpcCwgMCk7CiAKICNpZmRlZiBTTkRSVl9ERUJVR19NQ0UKLQlzbmRfcHJpbnRrKCJpbml0OiAoNSlcbiIpOworCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiaW5pdDogKDUpXG4iKTsKICNlbmRpZgogfQogCkBAIC04ODUsOCArOTIwLDYgQEAKIAkJbXV0ZXhfdW5sb2NrKCZjaGlwLT5vcGVuX211dGV4KTsKIAkJcmV0dXJuOwogCX0KLQlzbmRfd3NzX2NhbGlicmF0ZV9tdXRlKGNoaXAsIDEpOwotCiAJLyogZGlzYWJsZSBJUlEgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKIAlpZiAoIShjaGlwLT5oYXJkd2FyZSAmIFdTU19IV19BRDE4NDhfTUFTSykpCkBAIC05MTksOCArOTUyLDYgQEAKIAl3c3Nfb3V0YihjaGlwLCBDUzQyMzFQKFNUQVRVUyksIDApOwkvKiBjbGVhciBJUlEgKi8KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwogCi0Jc25kX3dzc19jYWxpYnJhdGVfbXV0ZShjaGlwLCAwKTsKLQogCWNoaXAtPm1vZGUgPSAwOwogCW11dGV4X3VubG9jaygmY2hpcC0+b3Blbl9tdXRleCk7CiB9CkBAIC0xMTEzLDcgKzExNDQsNyBAQAogCWlmIChjaGlwLT5oYXJkd2FyZSAmIFdTU19IV19BRDE4NDhfTUFTSykKIAkJd3NzX291dGIoY2hpcCwgQ1M0MjMxUChTVEFUVVMpLCAwKTsKIAllbHNlCi0JCXNuZF93c3Nfb3V0bShjaGlwLCBDUzQyMzFfSVJRX1NUQVRVUywgc3RhdHVzLCAwKTsKKwkJc25kX3dzc19vdXQoY2hpcCwgQ1M0MjMxX0lSUV9TVEFUVVMsIHN0YXR1cyk7CiAJc3Bpbl91bmxvY2soJmNoaXAtPnJlZ19sb2NrKTsKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CkBAIC0xMjc4LDcgKzEzMDksOCBAQAogCQl9IGVsc2UgaWYgKHJldiA9PSAweDAzKSB7CiAJCQljaGlwLT5oYXJkd2FyZSA9IFdTU19IV19DUzQyMzZCOwogCQl9IGVsc2UgewotCQkJc25kX3ByaW50aygidW5rbm93biBDUyBjaGlwIHdpdGggdmVyc2lvbiAweCV4XG4iLCByZXYpOworCQkJc25kX3ByaW50ayhLRVJOX0VSUgorCQkJCSAgICJ1bmtub3duIENTIGNoaXAgd2l0aCB2ZXJzaW9uIDB4JXhcbiIsIHJldik7CiAJCQlyZXR1cm4gLUVOT0RFVjsJCS8qIHVua25vd24gQ1M0MjMxIGNoaXA/ICovCiAJCX0KIAl9CkBAIC0xMzE0LDYgKzEzNDYsMTAgQEAKIAkJY2hpcC0+aW1hZ2VbQ1M0MjMxX0FMVF9GRUFUVVJFXzJdID0KIAkJCWNoaXAtPmhhcmR3YXJlID09IFdTU19IV19JTlRFUldBVkUgPyAweGMyIDogMHgwMTsKIAl9CisJLyogZW5hYmxlIGZpbmUgZ3JhaW5lZCBmcmVxdWVuY3kgc2VsZWN0aW9uICovCisJaWYgKGNoaXAtPmhhcmR3YXJlID09IFdTU19IV19BRDE4NDUpCisJCWNoaXAtPmltYWdlW0FEMTg0NV9QV1JfRE9XTl0gPSA4OworCiAJcHRyID0gKHVuc2lnbmVkIGNoYXIgKikgJmNoaXAtPmltYWdlOwogCXJlZ251bSA9IChjaGlwLT5oYXJkd2FyZSAmIFdTU19IV19BRDE4NDhfTUFTSykgPyAxNiA6IDMyOwogCXNuZF93c3NfbWNlX2Rvd24oY2hpcCk7CkBAIC0xMzQyLDcgKzEzNzgsMTAgQEAKIAkJCQljYXNlIDY6CiAJCQkJCWJyZWFrOwogCQkJCWRlZmF1bHQ6Ci0JCQkJCXNuZF9wcmludGsoInVua25vd24gQ1M0MjM1IGNoaXAgKGVuaGFuY2VkIHZlcnNpb24gPSAweCV4KVxuIiwgaWQpOworCQkJCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORworCQkJCQkJInVua25vd24gQ1M0MjM1IGNoaXAgIgorCQkJCQkJIihlbmhhbmNlZCB2ZXJzaW9uID0gMHgleClcbiIsCisJCQkJCQlpZCk7CiAJCQkJfQogCQkJfSBlbHNlIGlmICgoaWQgJiAweDFmKSA9PSAweDBiKSB7CS8qIENTNDIzNi9CICovCiAJCQkJc3dpdGNoIChpZCA+PiA1KSB7CkBAIC0xMzUzLDcgKzEzOTIsMTAgQEAKIAkJCQkJY2hpcC0+aGFyZHdhcmUgPSBXU1NfSFdfQ1M0MjM2QjsKIAkJCQkJYnJlYWs7CiAJCQkJZGVmYXVsdDoKLQkJCQkJc25kX3ByaW50aygidW5rbm93biBDUzQyMzYgY2hpcCAoZW5oYW5jZWQgdmVyc2lvbiA9IDB4JXgpXG4iLCBpZCk7CisJCQkJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HCisJCQkJCQkidW5rbm93biBDUzQyMzYgY2hpcCAiCisJCQkJCQkiKGVuaGFuY2VkIHZlcnNpb24gPSAweCV4KVxuIiwKKwkJCQkJCWlkKTsKIAkJCQl9CiAJCQl9IGVsc2UgaWYgKChpZCAmIDB4MWYpID09IDB4MDgpIHsJLyogQ1M0MjM3QiAqLwogCQkJCWNoaXAtPmhhcmR3YXJlID0gV1NTX0hXX0NTNDIzN0I7CkBAIC0xMzY0LDcgKzE0MDYsMTAgQEAKIAkJCQljYXNlIDc6CiAJCQkJCWJyZWFrOwogCQkJCWRlZmF1bHQ6Ci0JCQkJCXNuZF9wcmludGsoInVua25vd24gQ1M0MjM3QiBjaGlwIChlbmhhbmNlZCB2ZXJzaW9uID0gMHgleClcbiIsIGlkKTsKKwkJCQkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcKKwkJCQkJCSJ1bmtub3duIENTNDIzN0IgY2hpcCAiCisJCQkJCQkiKGVuaGFuY2VkIHZlcnNpb24gPSAweCV4KVxuIiwKKwkJCQkJCWlkKTsKIAkJCQl9CiAJCQl9IGVsc2UgaWYgKChpZCAmIDB4MWYpID09IDB4MDkpIHsJLyogQ1M0MjM4QiAqLwogCQkJCWNoaXAtPmhhcmR3YXJlID0gV1NTX0hXX0NTNDIzOEI7CkBAIC0xMzc0LDcgKzE0MTksMTAgQEAKIAkJCQljYXNlIDc6CiAJCQkJCWJyZWFrOwogCQkJCWRlZmF1bHQ6Ci0JCQkJCXNuZF9wcmludGsoInVua25vd24gQ1M0MjM4QiBjaGlwIChlbmhhbmNlZCB2ZXJzaW9uID0gMHgleClcbiIsIGlkKTsKKwkJCQkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcKKwkJCQkJCSJ1bmtub3duIENTNDIzOEIgY2hpcCAiCisJCQkJCQkiKGVuaGFuY2VkIHZlcnNpb24gPSAweCV4KVxuIiwKKwkJCQkJCWlkKTsKIAkJCQl9CiAJCQl9IGVsc2UgaWYgKChpZCAmIDB4MWYpID09IDB4MWUpIHsJLyogQ1M0MjM5ICovCiAJCQkJY2hpcC0+aGFyZHdhcmUgPSBXU1NfSFdfQ1M0MjM5OwpAQCAtMTM4NCwxMCArMTQzMiwxNSBAQAogCQkJCWNhc2UgNjoKIAkJCQkJYnJlYWs7CiAJCQkJZGVmYXVsdDoKLQkJCQkJc25kX3ByaW50aygidW5rbm93biBDUzQyMzkgY2hpcCAoZW5oYW5jZWQgdmVyc2lvbiA9IDB4JXgpXG4iLCBpZCk7CisJCQkJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HCisJCQkJCQkidW5rbm93biBDUzQyMzkgY2hpcCAiCisJCQkJCQkiKGVuaGFuY2VkIHZlcnNpb24gPSAweCV4KVxuIiwKKwkJCQkJCWlkKTsKIAkJCQl9CiAJCQl9IGVsc2UgewotCQkJCXNuZF9wcmludGsoInVua25vd24gQ1M0MjM2L0NTNDIzeEIgY2hpcCAoZW5oYW5jZWQgdmVyc2lvbiA9IDB4JXgpXG4iLCBpZCk7CisJCQkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcKKwkJCQkJICAgInVua25vd24gQ1M0MjM2L0NTNDIzeEIgY2hpcCAiCisJCQkJCSAgICIoZW5oYW5jZWQgdmVyc2lvbiA9IDB4JXgpXG4iLCBpZCk7CiAJCQl9CiAJCX0KIAl9CkBAIC0xNjE4LDcgKzE2NzEsOCBAQAogCXdzc19vdXRiKGNoaXAsIENTNDIzMVAoUkVHU0VMKSwgY2hpcC0+bWNlX2JpdCB8ICh0aW1lb3V0ICYgMHgxZikpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CiAJaWYgKHRpbWVvdXQgPT0gMHg4MCkKLQkJc25kX3ByaW50aygiZG93biBbMHglbHhdOiBzZXJpb3VzIGluaXQgcHJvYmxlbSAtIGNvZGVjIHN0aWxsIGJ1c3lcbiIsIGNoaXAtPnBvcnQpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJkb3duIFsweCVseF06IHNlcmlvdXMgaW5pdCBwcm9ibGVtICIKKwkJCSAgICItIGNvZGVjIHN0aWxsIGJ1c3lcbiIsIGNoaXAtPnBvcnQpOwogCWlmICgodGltZW91dCAmIENTNDIzMV9NQ0UpID09IDAgfHwKIAkgICAgIShjaGlwLT5oYXJkd2FyZSAmIChXU1NfSFdfQ1M0MjMxX01BU0sgfCBXU1NfSFdfQ1M0MjMyX01BU0spKSkgewogCQlyZXR1cm47CkBAIC0xNjI4LDcgKzE2ODIsNyBAQAogfQogI2VuZGlmIC8qIENPTkZJR19QTSAqLwogCi1zdGF0aWMgaW50IHNuZF93c3NfZnJlZShzdHJ1Y3Qgc25kX3dzcyAqY2hpcCkKK2ludCBzbmRfd3NzX2ZyZWUoc3RydWN0IHNuZF93c3MgKmNoaXApCiB7CiAJcmVsZWFzZV9hbmRfZnJlZV9yZXNvdXJjZShjaGlwLT5yZXNfcG9ydCk7CiAJcmVsZWFzZV9hbmRfZnJlZV9yZXNvdXJjZShjaGlwLT5yZXNfY3BvcnQpOwpAQCAtMTY1MSw2ICsxNzA1LDcgQEAKIAlrZnJlZShjaGlwKTsKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0woc25kX3dzc19mcmVlKTsKIAogc3RhdGljIGludCBzbmRfd3NzX2Rldl9mcmVlKHN0cnVjdCBzbmRfZGV2aWNlICpkZXZpY2UpCiB7CkBAIC0xODIwLDcgKzE4NzUsOCBAQAogI2lmIDAKIAlpZiAoY2hpcC0+aGFyZHdhcmUgJiBXU1NfSFdfQ1M0MjMyX01BU0spIHsKIAkJaWYgKGNoaXAtPnJlc19jcG9ydCA9PSBOVUxMKQotCQkJc25kX3ByaW50aygiQ1M0MjMyIGNvbnRyb2wgcG9ydCBmZWF0dXJlcyBhcmUgbm90IGFjY2Vzc2libGVcbiIpOworCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiQ1M0MjMyIGNvbnRyb2wgcG9ydCBmZWF0dXJlcyBhcmUgIgorCQkJCSAgICJub3QgYWNjZXNzaWJsZVxuIik7CiAJfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL3NvdW5kL21pcHMvYXUxeDAwLmMgYi9zb3VuZC9taXBzL2F1MXgwMC5jCmluZGV4IDE4ODFjZWMuLjNlNzYzZDYgMTAwNjQ0Ci0tLSBhL3NvdW5kL21pcHMvYXUxeDAwLmMKKysrIGIvc291bmQvbWlwcy9hdTF4MDAuYwpAQCAtNjM2LDkgKzYzNiwxMCBAQAogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKIAlzdHJ1Y3Qgc25kX2F1MTAwMCAqYXUxMDAwOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldygtMSwgIkFDOTciLCBUSElTX01PRFVMRSwgc2l6ZW9mKHN0cnVjdCBzbmRfYXUxMDAwKSk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKC0xLCAiQUM5NyIsIFRISVNfTU9EVUxFLAorCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBzbmRfYXUxMDAwKSwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJY2FyZC0+cHJpdmF0ZV9mcmVlID0gc25kX2F1MTAwMF9mcmVlOwogCWF1MTAwMCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKQEAgLTY3OCw3ICs2NzksNyBAQAogCQlyZXR1cm4gZXJyOwogCX0KIAotCXByaW50ayggS0VSTl9JTkZPICJBTFNBIEFDOTc6IERyaXZlciBJbml0aWFsaXplZFxuIiApOworCXByaW50ayhLRVJOX0lORk8gIkFMU0EgQUM5NzogRHJpdmVyIEluaXRpYWxpemVkXG4iKTsKIAlhdTEwMDBfY2FyZCA9IGNhcmQ7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9taXBzL2hhbDIuYyBiL3NvdW5kL21pcHMvaGFsMi5jCmluZGV4IGRiNDk1YmUuLmM1MjY5MWMgMTAwNjQ0Ci0tLSBhL3NvdW5kL21pcHMvaGFsMi5jCisrKyBiL3NvdW5kL21pcHMvaGFsMi5jCkBAIC04NzgsOSArODc4LDkgQEAKIAlzdHJ1Y3Qgc25kX2hhbDIgKmNoaXA7CiAJaW50IGVycjsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCWVyciA9IGhhbDJfY3JlYXRlKGNhcmQsICZjaGlwKTsKIAlpZiAoZXJyIDwgMCkgewpkaWZmIC0tZ2l0IGEvc291bmQvbWlwcy9zZ2lvMmF1ZGlvLmMgYi9zb3VuZC9taXBzL3NnaW8yYXVkaW8uYwppbmRleCA0YzYzNTA0Li42NmYzYjQ4IDEwMDY0NAotLS0gYS9zb3VuZC9taXBzL3NnaW8yYXVkaW8uYworKysgYi9zb3VuZC9taXBzL3NnaW8yYXVkaW8uYwpAQCAtOTM2LDkgKzkzNiw5IEBACiAJc3RydWN0IHNuZF9zZ2lvMmF1ZGlvICpjaGlwOwogCWludCBlcnI7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleCwgaWQsIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAllcnIgPSBzbmRfc2dpbzJhdWRpb19jcmVhdGUoY2FyZCwgJmNoaXApOwogCWlmIChlcnIgPCAwKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvYWQxODQ4LmMgYi9zb3VuZC9vc3MvYWQxODQ4LmMKaW5kZXggN2NmOTkxMy4uZDEyYmQ5OCAxMDA2NDQKLS0tIGEvc291bmQvb3NzL2FkMTg0OC5jCisrKyBiL3NvdW5kL29zcy9hZDE4NDguYwpAQCAtMjgwLDcgKzI4MCw3IEBACiAJd2hpbGUgKHRpbWVvdXQgPiAwICYmIChhZF9yZWFkKGRldmMsIDExKSAmIDB4MjApKQogCQl0aW1lb3V0LS07CiAJaWYgKGFkX3JlYWQoZGV2YywgMTEpICYgMHgyMCkKLQkJaWYgKCAoZGV2Yy0+bW9kZWwgIT0gTURfMTg0NSkgfHwgKGRldmMtPm1vZGVsICE9IE1EXzE4NDVfU1NDQVBFKSkKKwkJaWYgKChkZXZjLT5tb2RlbCAhPSBNRF8xODQ1KSAmJiAoZGV2Yy0+bW9kZWwgIT0gTURfMTg0NV9TU0NBUEUpKQogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiYWQxODQ4OiBBdXRvIGNhbGlicmF0aW9uIHRpbWVkIG91dCgzKS5cbiIpOwogfQogCkBAIC0yMTA3LDcgKzIxMDcsNyBAQAogCXN3aXRjaCAoY21kKQogCXsKIAkJY2FzZSBBRDE4NDhfU0VUX1hUQUw6CS8qIENoYW5nZSBjbG9jayBmcmVxdWVuY3kgb2YgQUQxODQ1IChvbmx5ICkgKi8KLQkJCWlmIChkZXZjLT5tb2RlbCAhPSBNRF8xODQ1IHx8IGRldmMtPm1vZGVsICE9IE1EXzE4NDVfU1NDQVBFKQorCQkJaWYgKGRldmMtPm1vZGVsICE9IE1EXzE4NDUgJiYgZGV2Yy0+bW9kZWwgIT0gTURfMTg0NV9TU0NBUEUpCiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2Yy0+bG9jayxmbGFncyk7CiAJCQlhZF9lbnRlcl9NQ0UoZGV2Yyk7CmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvYXUxNTUwX2FjOTcuYyBiL3NvdW5kL29zcy9hdTE1NTBfYWM5Ny5jCmluZGV4IDgxZTFmNDQuLjQxOTFhY2MgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9hdTE1NTBfYWM5Ny5jCisrKyBiL3NvdW5kL29zcy9hdTE1NTBfYWM5Ny5jCkBAIC0xNjI3LDcgKzE2MjcsOSBAQAogCQkJCSAgICBzaXplb2YoYWJpbmZvKSkgPyAtRUZBVUxUIDogMDsKIAogCWNhc2UgU05EQ1RMX0RTUF9OT05CTE9DSzoKKwkJc3Bpbl9sb2NrKCZmaWxlLT5mX2xvY2spOwogCQlmaWxlLT5mX2ZsYWdzIHw9IE9fTk9OQkxPQ0s7CisJCXNwaW5fdW5sb2NrKCZmaWxlLT5mX2xvY2spOwogCQlyZXR1cm4gMDsKIAogCWNhc2UgU05EQ1RMX0RTUF9HRVRPREVMQVk6CmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvYXVkaW8uYyBiL3NvdW5kL29zcy9hdWRpby5jCmluZGV4IDg5YmQyN2EuLmI2OWMwNWIgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9hdWRpby5jCisrKyBiL3NvdW5kL29zcy9hdWRpby5jCkBAIC00MzMsNyArNDMzLDkgQEAKIAkJCXJldHVybiBkbWFfaW9jdGwoZGV2LCBjbWQsIGFyZyk7CiAJCQogCQljYXNlIFNORENUTF9EU1BfTk9OQkxPQ0s6CisJCQlzcGluX2xvY2soJmZpbGUtPmZfbG9jayk7CiAJCQlmaWxlLT5mX2ZsYWdzIHw9IE9fTk9OQkxPQ0s7CisJCQlzcGluX3VubG9jaygmZmlsZS0+Zl9sb2NrKTsKIAkJCXJldHVybiAwOwogCiAJCWNhc2UgU05EQ1RMX0RTUF9HRVRDQVBTOgpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL2RtYWJ1Zi5jIGIvc291bmQvb3NzL2RtYWJ1Zi5jCmluZGV4IDFlOTBkNzYuLjFiZmNmN2UgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9kbWFidWYuYworKysgYi9zb3VuZC9vc3MvZG1hYnVmLmMKQEAgLTQzOSw3ICs0MzksNyBAQAogCQkJRE1BYnVmX2xhdW5jaF9vdXRwdXQoZGV2LCBkbWFwKTsKIAkJYWRldi0+ZG1hcF9vdXQtPmZsYWdzIHw9IERNQV9TWU5DSU5HOwogCQlhZGV2LT5kbWFwX291dC0+dW5kZXJydW5fY291bnQgPSAwOwotCQl3aGlsZSAoIXNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpICYmIG4rKyA8PSBhZGV2LT5kbWFwX291dC0+bmJ1ZnMgJiYgCisJCXdoaWxlICghc2lnbmFsX3BlbmRpbmcoY3VycmVudCkgJiYgbisrIDwgYWRldi0+ZG1hcF9vdXQtPm5idWZzICYmCiAJCSAgICAgICBhZGV2LT5kbWFwX291dC0+cWxlbiAmJiBhZGV2LT5kbWFwX291dC0+dW5kZXJydW5fY291bnQgPT0gMCkgewogCQkJbG9uZyB0ID0gZG1hYnVmX3RpbWVvdXQoZG1hcCk7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkbWFwLT5sb2NrLGZsYWdzKTsKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9kbWFzb3VuZC9kbWFzb3VuZF9hdGFyaS5jIGIvc291bmQvb3NzL2RtYXNvdW5kL2RtYXNvdW5kX2F0YXJpLmMKaW5kZXggMzg5MzFmMi4uMWY0Nzc0MSAxMDA2NDQKLS0tIGEvc291bmQvb3NzL2RtYXNvdW5kL2RtYXNvdW5kX2F0YXJpLmMKKysrIGIvc291bmQvb3NzL2RtYXNvdW5kL2RtYXNvdW5kX2F0YXJpLmMKQEAgLTE1MjQsNyArMTUyNCw3IEBACiAJLnNwZWVkCT0gODAwMAogfSA7CiAKLXN0YXRpYyBNQUNISU5FIG1hY2hUVCA9IHsKK3N0YXRpYyBfX2luaXRkYXRhIE1BQ0hJTkUgbWFjaFRUID0gewogCS5uYW1lCQk9ICJBdGFyaSIsCiAJLm5hbWUyCQk9ICJUVCIsCiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLApAQCAtMTU1Myw3ICsxNTUzLDcgQEAKIAkuY2FwYWJpbGl0aWVzCT0gIERTUF9DQVBfQkFUQ0gJLyogQXMgcGVyIFNORENUTF9EU1BfR0VUQ0FQUyAqLwogfTsKIAotc3RhdGljIE1BQ0hJTkUgbWFjaEZhbGNvbiA9IHsKK3N0YXRpYyBfX2luaXRkYXRhIE1BQ0hJTkUgbWFjaEZhbGNvbiA9IHsKIAkubmFtZQkJPSAiQXRhcmkiLAogCS5uYW1lMgkJPSAiRkFMQ09OIiwKIAkuZG1hX2FsbG9jCT0gQXRhQWxsb2MsCmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvcGFzMl9jYXJkLmMgYi9zb3VuZC9vc3MvcGFzMl9jYXJkLmMKaW5kZXggMjVmM2EyMi4uN2YzNzdlYyAxMDA2NDQKLS0tIGEvc291bmQvb3NzL3BhczJfY2FyZC5jCisrKyBiL3NvdW5kL29zcy9wYXMyX2NhcmQuYwpAQCAtMTU2LDkgKzE1Niw3IEBACiAJCQkJCQkgKiAweDgwCiAJCQkJCQkgKi8gLCAweEI4OCk7CiAKLQlwYXNfd3JpdGUoMHg4MAotCQkgIHwgam95c3RpY2s/MHg0MDowCi0JCSAgLDB4RjM4OCk7CisJcGFzX3dyaXRlKDB4ODAgfCAoam95c3RpY2sgPyAweDQwIDogMCksIDB4RjM4OCk7CiAKIAlpZiAocGFzX2lycSA8IDAgfHwgcGFzX2lycSA+IDE1KQogCXsKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9wc3MuYyBiL3NvdW5kL29zcy9wc3MuYwppbmRleCAxNmVkMDY5Li4xNjUxN2E1IDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvcHNzLmMKKysrIGIvc291bmQvb3NzL3Bzcy5jCkBAIC00NTcsMTAgKzQ1Nyw5IEBACiAJfQogfQogCi1zdGF0aWMgaW50IHNldF92b2x1bWVfbW9ubyh1bnNpZ25lZCBfX3VzZXIgKnAsIGludCAqYWxlZnQpCitzdGF0aWMgaW50IHNldF92b2x1bWVfbW9ubyh1bnNpZ25lZCBfX3VzZXIgKnAsIHVuc2lnbmVkIGludCAqYWxlZnQpCiB7Ci0JaW50IGxlZnQ7Ci0JdW5zaWduZWQgdm9sdW1lOworCXVuc2lnbmVkIGludCBsZWZ0LCB2b2x1bWU7CiAJaWYgKGdldF91c2VyKHZvbHVtZSwgcCkpCiAJCXJldHVybiAtRUZBVUxUOwogCQpAQCAtNDcxLDEwICs0NzAsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzZXRfdm9sdW1lX3N0ZXJlbyh1bnNpZ25lZCBfX3VzZXIgKnAsIGludCAqYWxlZnQsIGludCAqYXJpZ2h0KQorc3RhdGljIGludCBzZXRfdm9sdW1lX3N0ZXJlbyh1bnNpZ25lZCBfX3VzZXIgKnAsCisJCQkgICAgIHVuc2lnbmVkIGludCAqYWxlZnQsCisJCQkgICAgIHVuc2lnbmVkIGludCAqYXJpZ2h0KQogewotCWludCBsZWZ0LCByaWdodDsKLQl1bnNpZ25lZCB2b2x1bWU7CisJdW5zaWduZWQgaW50IGxlZnQsIHJpZ2h0LCB2b2x1bWU7CiAJaWYgKGdldF91c2VyKHZvbHVtZSwgcCkpCiAJCXJldHVybiAtRUZBVUxUOwogCmRpZmYgLS1naXQgYS9zb3VuZC9vc3Mvc2VxdWVuY2VyLmMgYi9zb3VuZC9vc3Mvc2VxdWVuY2VyLmMKaW5kZXggNWMyMTVmNy4uYzc5ODc0NiAxMDA2NDQKLS0tIGEvc291bmQvb3NzL3NlcXVlbmNlci5jCisrKyBiL3NvdW5kL29zcy9zZXF1ZW5jZXIuYwpAQCAtMjEyLDcgKzIxMiw2IEBACiB7CiAJdW5zaWduZWQgY2hhciBldmVudF9yZWNbRVZfU1pdLCBldl9jb2RlOwogCWludCBwID0gMCwgYywgZXZfc2l6ZTsKLQlpbnQgZXJyOwogCWludCBtb2RlID0gdHJhbnNsYXRlX21vZGUoZmlsZSk7CiAKIAlkZXYgPSBkZXYgPj4gNDsKQEAgLTI4NSw3ICsyODQsNyBAQAogCQl7CiAJCQlpZiAoIW1pZGlfb3BlbmVkW2V2ZW50X3JlY1syXV0pCiAJCQl7Ci0JCQkJaW50IG1vZGU7CisJCQkJaW50IGVyciwgbW9kZTsKIAkJCQlpbnQgZGV2ID0gZXZlbnRfcmVjWzJdOwogCiAJCQkJaWYgKGRldiA+PSBtYXhfbWlkaWRldiB8fCBtaWRpX2RldnNbZGV2XT09TlVMTCkKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9zaF9kYWNfYXVkaW8uYyBiL3NvdW5kL29zcy9zaF9kYWNfYXVkaW8uYwppbmRleCBlNWQ0MjM5Li43OGNmYjY2IDEwMDY0NAotLS0gYS9zb3VuZC9vc3Mvc2hfZGFjX2F1ZGlvLmMKKysrIGIvc291bmQvb3NzL3NoX2RhY19hdWRpby5jCkBAIC0xMzUsNyArMTM1LDkgQEAKIAkJcmV0dXJuIHB1dF91c2VyKEFGTVRfVTgsIChpbnQgKilhcmcpOwogCiAJY2FzZSBTTkRDVExfRFNQX05PTkJMT0NLOgorCQlzcGluX2xvY2soJmZpbGUtPmZfbG9jayk7CiAJCWZpbGUtPmZfZmxhZ3MgfD0gT19OT05CTE9DSzsKKwkJc3Bpbl91bmxvY2soJmZpbGUtPmZfbG9jayk7CiAJCXJldHVybiAwOwogCiAJY2FzZSBTTkRDVExfRFNQX0dFVENBUFM6CmRpZmYgLS1naXQgYS9zb3VuZC9vc3Mvc3dhcm1fY3M0Mjk3YS5jIGIvc291bmQvb3NzL3N3YXJtX2NzNDI5N2EuYwppbmRleCA0MTU2MmVjLi4xZWRhYjdiIDEwMDY0NAotLS0gYS9zb3VuZC9vc3Mvc3dhcm1fY3M0Mjk3YS5jCisrKyBiL3NvdW5kL29zcy9zd2FybV9jczQyOTdhLmMKQEAgLTIyMDAsNyArMjIwMCw5IEBACiAJCQkJICAgIHNpemVvZihhYmluZm8pKSA/IC1FRkFVTFQgOiAwOwogCiAJY2FzZSBTTkRDVExfRFNQX05PTkJMT0NLOgorCQlzcGluX2xvY2soJmZpbGUtPmZfbG9jayk7CiAJCWZpbGUtPmZfZmxhZ3MgfD0gT19OT05CTE9DSzsKKwkJc3Bpbl91bmxvY2soJmZpbGUtPmZfbG9jayk7CiAJCXJldHVybiAwOwogCiAJY2FzZSBTTkRDVExfRFNQX0dFVE9ERUxBWToKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy92d3NuZC5jIGIvc291bmQvb3NzL3Z3c25kLmMKaW5kZXggNzhiOGFjYy4uMTg3ZjcyNyAxMDA2NDQKLS0tIGEvc291bmQvb3NzL3Z3c25kLmMKKysrIGIvc291bmQvb3NzL3Z3c25kLmMKQEAgLTI2NzMsNyArMjY3Myw5IEBACiAKIAljYXNlIFNORENUTF9EU1BfTk9OQkxPQ0s6CS8qIF9TSU8gICgnUCcsMTQpICovCiAJCURCR1goIlNORENUTF9EU1BfTk9OQkxPQ0tcbiIpOworCQlzcGluX2xvY2soJmZpbGUtPmZfbG9jayk7CiAJCWZpbGUtPmZfZmxhZ3MgfD0gT19OT05CTE9DSzsKKwkJc3Bpbl91bmxvY2soJmZpbGUtPmZfbG9jayk7CiAJCXJldHVybiAwOwogCiAJY2FzZSBTTkRDVExfRFNQX1JFU0VUOgkJLyogX1NJTyAgKCdQJywgMCkgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3BhcmlzYy9oYXJtb255LmMgYi9zb3VuZC9wYXJpc2MvaGFybW9ueS5jCmluZGV4IDQxZjg3MGYuLjYwNTVmZDYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BhcmlzYy9oYXJtb255LmMKKysrIGIvc291bmQvcGFyaXNjL2hhcm1vbnkuYwpAQCAtOTc1LDkgKzk3NSw5IEBACiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCXN0cnVjdCBzbmRfaGFybW9ueSAqaDsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCWVyciA9IHNuZF9oYXJtb255X2NyZWF0ZShjYXJkLCBwYWRldiwgJmgpOwogCWlmIChlcnIgPCAwKQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL0tjb25maWcgYi9zb3VuZC9wY2kvS2NvbmZpZwppbmRleCA4MmI5YmRkLi5jYTI1ZTYxIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvS2NvbmZpZworKysgYi9zb3VuZC9wY2kvS2NvbmZpZwpAQCAtNDAwLDYgKzQwMCwyNiBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgc25kLWluZGlnb2RqCiAKK2NvbmZpZyBTTkRfSU5ESUdPSU9YCisJdHJpc3RhdGUgIihFY2hvYXVkaW8pIEluZGlnbyBJT3giCisJc2VsZWN0IEZXX0xPQURFUgorCXNlbGVjdCBTTkRfUENNCisJaGVscAorCSAgU2F5ICdZJyBvciAnTScgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBFY2hvYXVkaW8gSW5kaWdvIElPeC4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgc25kLWluZGlnb2lveAorCitjb25maWcgU05EX0lORElHT0RKWAorCXRyaXN0YXRlICIoRWNob2F1ZGlvKSBJbmRpZ28gREp4IgorCXNlbGVjdCBGV19MT0FERVIKKwlzZWxlY3QgU05EX1BDTQorCWhlbHAKKwkgIFNheSAnWScgb3IgJ00nIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgRWNob2F1ZGlvIEluZGlnbyBESnguCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIHNuZC1pbmRpZ29kangKKwogY29uZmlnIFNORF9FTVUxMEsxCiAJdHJpc3RhdGUgIkVtdTEwazEgKFNCIExpdmUhLCBBdWRpZ3ksIEUtbXUgQVBTKSIKIAlzZWxlY3QgRldfTE9BREVSCkBAIC03NDQsNyArNzY0LDggQEAKIAlzZWxlY3QgU05EX09YWUdFTl9MSUIKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3Igc291bmQgY2FyZHMgYmFzZWQgb24gdGhlCi0JICBBc3VzIEFWMTAwL0FWMjAwIGNoaXBzLCBpLmUuLCBYb25hciBEMSwgRFgsIEQyIGFuZCBEMlguCisJICBBc3VzIEFWMTAwL0FWMjAwIGNoaXBzLCBpLmUuLCBYb25hciBEMSwgRFgsIEQyLCBEMlgsIGFuZAorCSAgRXNzZW5jZSBTVFguCiAJICBTdXBwb3J0IGZvciB0aGUgSERBVjEuMyAoRGVsdXhlKSBpcyB2ZXJ5IGV4cGVyaW1lbnRhbC4KIAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2FjOTcvYWM5N19jb2RlYy5jIGIvc291bmQvcGNpL2FjOTcvYWM5N19jb2RlYy5jCmluZGV4IGUyYjg0M2IuLjk3ZWUxMjcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hYzk3L2FjOTdfY29kZWMuYworKysgYi9zb3VuZC9wY2kvYWM5Ny9hYzk3X2NvZGVjLmMKQEAgLTE0Myw2ICsxNDMsNyBAQAogeyAweDQzNTI1OTcwLCAweGZmZmZmZmY4LCAiQ1M0MjAyIiwJCU5VTEwsCQlOVUxMIH0sCiB7IDB4NDM1ODU0MjEsIDB4ZmZmZmZmZmYsICJIU0QxMTI0NiIsCQlOVUxMLAkJTlVMTCB9LAkvLyBTbWFydE1DIElJCiB7IDB4NDM1ODU0MjgsIDB4ZmZmZmZmZjgsICJDeDIwNDY4IiwJCXBhdGNoX2NvbmV4YW50LAlOVUxMIH0sIC8vIFNtYXJ0QU1DIGZpeG1lOiB0aGUgbWFzayBtaWdodCBiZSBkaWZmZXJlbnQKK3sgMHg0MzU4NTQzMCwgMHhmZmZmZmZmZiwgIkN4MjA0NjgtMzEiLAkJcGF0Y2hfY29uZXhhbnQsIE5VTEwgfSwKIHsgMHg0MzU4NTQzMSwgMHhmZmZmZmZmZiwgIkN4MjA1NTEiLCAgICAgICAgICAgcGF0Y2hfY3gyMDU1MSwgIE5VTEwgfSwKIHsgMHg0NDU0MzAzMSwgMHhmZmZmZmZmMCwgIkRUMDM5OCIsCQlOVUxMLAkJTlVMTCB9LAogeyAweDQ1NGQ0MzI4LCAweGZmZmZmZmZmLCAiRU0yODAyOCIsCQlOVUxMLAkJTlVMTCB9LCAgLy8gc2FtZSBhcyBUUjI4MDI4PwpAQCAtMzgzLDcgKzM4NCw3IEBACiAKIEVYUE9SVF9TWU1CT0woc25kX2FjOTdfdXBkYXRlX2JpdHMpOwogCi0vKiBubyBsb2NrIHZlcnNpb24gLSBzZWUgc25kX2FjOTdfdXBkYXRfYml0cygpICovCisvKiBubyBsb2NrIHZlcnNpb24gLSBzZWUgc25kX2FjOTdfdXBkYXRlX2JpdHMoKSAqLwogaW50IHNuZF9hYzk3X3VwZGF0ZV9iaXRzX25vbG9jayhzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcsIHVuc2lnbmVkIHNob3J0IHJlZywKIAkJCQl1bnNpZ25lZCBzaG9ydCBtYXNrLCB1bnNpZ25lZCBzaG9ydCB2YWx1ZSkKIHsKQEAgLTE2NDMsNyArMTY0NCwxMCBAQAogewogCWludCBlcnIsIGlkeDsKIAotCS8vcHJpbnRrKCJBQzk3X0dQSU9fQ0ZHID0gJXhcbiIsc25kX2FjOTdfcmVhZChhYzk3LEFDOTdfR1BJT19DRkcpKTsKKwkvKgorCXByaW50ayhLRVJOX0RFQlVHICJBQzk3X0dQSU9fQ0ZHID0gJXhcbiIsCisJICAgICAgIHNuZF9hYzk3X3JlYWQoYWM5NyxBQzk3X0dQSU9fQ0ZHKSk7CisJKi8KIAlzbmRfYWM5N193cml0ZShhYzk3LCBBQzk3X0dQSU9fQ0ZHLCAweGZmZmYgJiB+KEFDOTdfR1BJT19MSU5FMV9PSCkpOwogCXNuZF9hYzk3X3dyaXRlKGFjOTcsIEFDOTdfR1BJT19QT0xBUklUWSwgMHhmZmZmICYgfihBQzk3X0dQSU9fTElORTFfT0gpKTsKIAlzbmRfYWM5N193cml0ZShhYzk3LCBBQzk3X0dQSU9fU1RJQ0tZLCAweGZmZmYpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2FjOTcvYWM5N19wcm9jLmMgYi9zb3VuZC9wY2kvYWM5Ny9hYzk3X3Byb2MuYwppbmRleCAwNjBlYTU5Li43M2IxN2Q1IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYWM5Ny9hYzk3X3Byb2MuYworKysgYi9zb3VuZC9wY2kvYWM5Ny9hYzk3X3Byb2MuYwpAQCAtMTI1LDYgKzEyNSw4IEBACiAgICAgICAgIHNuZF9pcHJpbnRmKGJ1ZmZlciwgIlBDSSBTdWJzeXMgRGV2aWNlOiAweCUwNHhcblxuIiwKICAgICAgICAgICAgICAgICAgICAgYWM5Ny0+c3Vic3lzdGVtX2RldmljZSk7CiAKKwlzbmRfaXByaW50ZihidWZmZXIsICJGbGFnczogJXhcbiIsIGFjOTctPmZsYWdzKTsKKwogCWlmICgoYWM5Ny0+ZXh0X2lkICYgQUM5N19FSV9SRVZfTUFTSykgPj0gQUM5N19FSV9SRVZfMjMpIHsKIAkJdmFsID0gc25kX2FjOTdfcmVhZChhYzk3LCBBQzk3X0lOVF9QQUdJTkcpOwogCQlzbmRfYWM5N191cGRhdGVfYml0cyhhYzk3LCBBQzk3X0lOVF9QQUdJTkcsCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYWQxODg5LmMgYi9zb3VuZC9wY2kvYWQxODg5LmMKaW5kZXggYTdmMzhlNi4uZDFmMjQyYiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2FkMTg4OS5jCisrKyBiL3NvdW5kL3BjaS9hZDE4ODkuYwpAQCAtOTk1LDEwICs5OTUsMTAgQEAKIAl9CiAKIAkvKiAoMikgKi8KLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldm5vXSwgaWRbZGV2bm9dLCBUSElTX01PRFVMRSwgMCk7CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldm5vXSwgaWRbZGV2bm9dLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOwogCS8qIFhYWCBSRVZJU0lUOiB3ZSBjYW4gcHJvYmFibHkgYWxsb2NhdGUgY2hpcCBpbiB0aGlzIGNhbGwgKi8KLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCXN0cmNweShjYXJkLT5kcml2ZXIsICJBRDE4ODkiKTsKIAlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAiQW5hbG9nIERldmljZXMgQUQxODg5Iik7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYWs0NTMxX2NvZGVjLmMgYi9zb3VuZC9wY2kvYWs0NTMxX2NvZGVjLmMKaW5kZXggMGY4MTlkZC4uZmQxMzVlMyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2FrNDUzMV9jb2RlYy5jCisrKyBiL3NvdW5kL3BjaS9hazQ1MzFfY29kZWMuYwpAQCAtNTEsNyArNTEsOCBAQAogCWludCBpZHg7CiAJCiAJZm9yIChpZHggPSAwOyBpZHggPCAweDE5OyBpZHgrKykKLQkJcHJpbnRrKCJhazQ1MzEgMHgleDogMHgleFxuIiwgaWR4LCBhazQ1MzEtPnJlZ3NbaWR4XSk7CisJCXByaW50ayhLRVJOX0RFQlVHICJhazQ1MzEgMHgleDogMHgleFxuIiwKKwkJICAgICAgIGlkeCwgYWs0NTMxLT5yZWdzW2lkeF0pOwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hbGk1NDUxL2FsaTU0NTEuYyBiL3NvdW5kL3BjaS9hbGk1NDUxL2FsaTU0NTEuYwppbmRleCAxYTBmZDY1Li40ZWRmMjcwIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYWxpNTQ1MS9hbGk1NDUxLmMKKysrIGIvc291bmQvcGNpL2FsaTU0NTEvYWxpNTQ1MS5jCkBAIC0yMTQyLDcgKzIxNDIsNyBAQAogewogCWludCBlcnI7CiAKLQlzbmRfYWxpX3ByaW50aygicmVzb3VjZXMgYWxsb2NhdGlvbiAuLi5cbiIpOworCXNuZF9hbGlfcHJpbnRrKCJyZXNvdXJjZXMgYWxsb2NhdGlvbiAuLi5cbiIpOwogCWVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMoY29kZWMtPnBjaSwgIkFMSSA1NDUxIik7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CkBAIC0yMTU0LDcgKzIxNTQsNyBAQAogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAljb2RlYy0+aXJxID0gY29kZWMtPnBjaS0+aXJxOwotCXNuZF9hbGlfcHJpbnRrKCJyZXNvdWNlcyBhbGxvY2F0ZWQuXG4iKTsKKwlzbmRfYWxpX3ByaW50aygicmVzb3VyY2VzIGFsbG9jYXRlZC5cbiIpOwogCXJldHVybiAwOwogfQogc3RhdGljIGludCBzbmRfYWxpX2Rldl9mcmVlKHN0cnVjdCBzbmRfZGV2aWNlICpkZXZpY2UpCkBAIC0yMzA3LDkgKzIzMDcsOSBAQAogCiAJc25kX2FsaV9wcmludGsoInByb2JlIC4uLlxuIik7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIDApOwotCWlmICghY2FyZCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCWVyciA9IHNuZF9hbGlfY3JlYXRlKGNhcmQsIHBjaSwgcGNtX2NoYW5uZWxzLCBzcGRpZiwgJmNvZGVjKTsKIAlpZiAoZXJyIDwgMCkKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hbHMzMDAuYyBiL3NvdW5kL3BjaS9hbHMzMDAuYwppbmRleCA4ZGY2ODI0Li4wMDliNGM4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYWxzMzAwLmMKKysrIGIvc291bmQvcGNpL2FsczMwMC5jCkBAIC05MSw3ICs5MSw3IEBACiAjZGVmaW5lIERFQlVHX1BMQVlfUkVDCTAKIAogI2lmIERFQlVHX0NBTExTCi0jZGVmaW5lIHNuZF9hbHMzMDBfZGJnY2FsbHMoZm9ybWF0LCBhcmdzLi4uKSBwcmludGsoZm9ybWF0LCAjI2FyZ3MpCisjZGVmaW5lIHNuZF9hbHMzMDBfZGJnY2FsbHMoZm9ybWF0LCBhcmdzLi4uKSBwcmludGsoS0VSTl9ERUJVRyBmb3JtYXQsICMjYXJncykKICNkZWZpbmUgc25kX2FsczMwMF9kYmdjYWxsZW50ZXIoKSBwcmludGsoS0VSTl9FUlIgIi0tPiAlc1xuIiwgX19mdW5jX18pCiAjZGVmaW5lIHNuZF9hbHMzMDBfZGJnY2FsbGxlYXZlKCkgcHJpbnRrKEtFUk5fRVJSICI8LS0gJXNcbiIsIF9fZnVuY19fKQogI2Vsc2UKQEAgLTgxMiwxMCArODEyLDEwIEBACiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOwogCi0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAljaGlwX3R5cGUgPSBwY2lfaWQtPmRyaXZlcl9kYXRhOwogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYWxzNDAwMC5jIGIvc291bmQvcGNpL2FsczQwMDAuYwppbmRleCBiYTU3MDA1Li41NDJhMGM2IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYWxzNDAwMC5jCisrKyBiL3NvdW5kL3BjaS9hbHM0MDAwLmMKQEAgLTg4OSwxMiArODg5LDEzIEBACiAJcGNpX3dyaXRlX2NvbmZpZ193b3JkKHBjaSwgUENJX0NPTU1BTkQsIHdvcmQgfCBQQ0lfQ09NTUFORF9JTyk7CiAJcGNpX3NldF9tYXN0ZXIocGNpKTsKIAkKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAKLQkJCSAgICBzaXplb2YoKmFjYXJkKSAvKiBwcml2YXRlX2RhdGE6IGFjYXJkICovKTsKLQlpZiAoY2FyZCA9PSBOVUxMKSB7CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAKKwkJCSAgICAgIHNpemVvZigqYWNhcmQpIC8qIHByaXZhdGVfZGF0YTogYWNhcmQgKi8sCisJCQkgICAgICAmY2FyZCk7CisJaWYgKGVyciA8IDApIHsKIAkJcGNpX3JlbGVhc2VfcmVnaW9ucyhwY2kpOwogCQlwY2lfZGlzYWJsZV9kZXZpY2UocGNpKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldHVybiBlcnI7CiAJfQogCiAJYWNhcmQgPSBjYXJkLT5wcml2YXRlX2RhdGE7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYXRpaXhwLmMgYi9zb3VuZC9wY2kvYXRpaXhwLmMKaW5kZXggMjI2ZmU4Mi4uOWNlODU0OCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2F0aWl4cC5jCisrKyBiL3NvdW5kL3BjaS9hdGlpeHAuYwpAQCAtMTY0NSw5ICsxNjQ1LDkgQEAKIAlzdHJ1Y3QgYXRpaXhwICpjaGlwOwogCWludCBlcnI7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleCwgaWQsIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAlzdHJjcHkoY2FyZC0+ZHJpdmVyLCBzcGRpZl9hY2xpbmsgPyAiQVRJSVhQIiA6ICJBVElJWFAtU1BETUEiKTsKIAlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAiQVRJIElYUCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2F0aWl4cF9tb2RlbS5jIGIvc291bmQvcGNpL2F0aWl4cF9tb2RlbS5jCmluZGV4IDBlNmU1Y2MuLmMzMTM2Y2MgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hdGlpeHBfbW9kZW0uYworKysgYi9zb3VuZC9wY2kvYXRpaXhwX21vZGVtLmMKQEAgLTEyODgsOSArMTI4OCw5IEBACiAJc3RydWN0IGF0aWl4cF9tb2RlbSAqY2hpcDsKIAlpbnQgZXJyOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleCwgaWQsIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJc3RyY3B5KGNhcmQtPmRyaXZlciwgIkFUSUlYUC1NT0RFTSIpOwogCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsICJBVEkgSVhQIE1vZGVtIik7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MC5jIGIvc291bmQvcGNpL2F1ODh4MC9hdTg4eDAuYwppbmRleCBhMzZkNGQxLi45ZWMxMjIzIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MC5jCisrKyBiL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwLmMKQEAgLTI1MCw5ICsyNTAsOSBAQAogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAJLy8gKDIpCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAkvLyAoMykKIAlpZiAoKGVyciA9IHNuZF92b3J0ZXhfY3JlYXRlKGNhcmQsIHBjaSwgJmNoaXApKSA8IDApIHsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwX2EzZC5jIGIvc291bmQvcGNpL2F1ODh4MC9hdTg4eDBfYTNkLmMKaW5kZXggNjQ5ODQ5ZS4uZjRhYThmZiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2F1ODh4MC9hdTg4eDBfYTNkLmMKKysrIGIvc291bmQvcGNpL2F1ODh4MC9hdTg4eDBfYTNkLmMKQEAgLTQ2Miw5ICs0NjIsMTAgQEAKIC8qIFJlc2V0IFNpbmdsZSBBM0Qgc291cmNlLiAqLwogc3RhdGljIHZvaWQgYTNkc3JjX1plcm9TdGF0ZShhM2RzcmNfdCAqIGEpCiB7Ci0KLQkvL3ByaW50aygidm9ydGV4OiBaZXJvU3RhdGUgc2xpY2U6ICVkLCBzb3VyY2UgJWRcbiIsIGEtPnNsaWNlLCBhLT5zb3VyY2UpOwotCisJLyoKKwlwcmludGsoS0VSTl9ERUJVRyAidm9ydGV4OiBaZXJvU3RhdGUgc2xpY2U6ICVkLCBzb3VyY2UgJWRcbiIsCisJICAgICAgIGEtPnNsaWNlLCBhLT5zb3VyY2UpOworCSovCiAJYTNkc3JjX1NldEF0bW9zU3RhdGUoYSwgMCwgMCwgMCwgMCk7CiAJYTNkc3JjX1NldEhydGZTdGF0ZShhLCBBM2RIcmlyWmVyb3MsIEEzZEhyaXJaZXJvcyk7CiAJYTNkc3JjX1NldEl0ZERsaW5lKGEsIEEzZEl0ZERsaW5lWmVyb3MpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2F1ODh4MC9hdTg4eDBfY29yZS5jIGIvc291bmQvcGNpL2F1ODh4MC9hdTg4eDBfY29yZS5jCmluZGV4IGIwNzBlNTcuLjM5MDZmNWEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwX2NvcmUuYworKysgYi9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MF9jb3JlLmMKQEAgLTExMzUsNyArMTEzNSwxMCBAQAogCQkJc25kX3BjbV9zZ2J1Zl9nZXRfYWRkcihkbWEtPnN1YnN0cmVhbSwgMCkpOwogCQlicmVhazsKIAl9Ci0JLy9wcmludGsoInZvcnRleDogY2ZnMCA9IDB4JXhcbnZvcnRleDogY2ZnMT0weCV4XG4iLCBkbWEtPmNmZzAsIGRtYS0+Y2ZnMSk7CisJLyoKKwlwcmludGsoS0VSTl9ERUJVRyAidm9ydGV4OiBjZmcwID0gMHgleFxudm9ydGV4OiBjZmcxPTB4JXhcbiIsCisJICAgICAgIGRtYS0+Y2ZnMCwgZG1hLT5jZmcxKTsKKwkqLwogCWh3d3JpdGUodm9ydGV4LT5tbWlvLCBWT1JURVhfQURCRE1BX0JVRkNGRzAgKyAoYWRiZG1hIDw8IDMpLCBkbWEtPmNmZzApOwogCWh3d3JpdGUodm9ydGV4LT5tbWlvLCBWT1JURVhfQURCRE1BX0JVRkNGRzEgKyAoYWRiZG1hIDw8IDMpLCBkbWEtPmNmZzEpOwogCkBAIC0xOTU5LDcgKzE5NjIsNyBAQAogCQkJCQkgIEFEQl9DT0RFQ09VVCgwICsgNCkpOwogCQl2b3J0ZXhfY29ubmVjdGlvbl9taXhfYWRiKHZvcnRleCwgZW4sIDB4MTEsIG1peGVyc1szXSwKIAkJCQkJICBBREJfQ09ERUNPVVQoMSArIDQpKTsKLQkJLy9wcmludGsoIlNEQUMgZGV0ZWN0ZWQgIik7CisJCS8qIHByaW50ayhLRVJOX0RFQlVHICJTREFDIGRldGVjdGVkICIpOyAqLwogCX0KICNlbHNlCiAJLy8gVXNlIHBsYWluIGRpcmVjdCBvdXRwdXQgdG8gY29kZWMuCkBAIC0yMDEzLDcgKzIwMTYsMTEgQEAKIAkJCQkJcmVzbWFwW3Jlc3R5cGVdIHw9ICgxIDw8IGkpOwogCQkJCWVsc2UKIAkJCQkJdm9ydGV4LT5kbWFfYWRiW2ldLnJlc291cmNlc1tyZXN0eXBlXSB8PSAoMSA8PCBpKTsKLQkJCQkvL3ByaW50aygidm9ydGV4OiBSZXNNYW5hZ2VyOiB0eXBlICVkIG91dCAlZFxuIiwgcmVzdHlwZSwgaSk7CisJCQkJLyoKKwkJCQlwcmludGsoS0VSTl9ERUJVRworCQkJCSAgICAgICAidm9ydGV4OiBSZXNNYW5hZ2VyOiB0eXBlICVkIG91dCAlZFxuIiwKKwkJCQkgICAgICAgcmVzdHlwZSwgaSk7CisJCQkJKi8KIAkJCQlyZXR1cm4gaTsKIAkJCX0KIAkJfQpAQCAtMjAyNCw3ICsyMDMxLDExIEBACiAJCWZvciAoaSA9IDA7IGkgPCBxdHk7IGkrKykgewogCQkJaWYgKHJlc21hcFtyZXN0eXBlXSAmICgxIDw8IGkpKSB7CiAJCQkJcmVzbWFwW3Jlc3R5cGVdICY9IH4oMSA8PCBpKTsKLQkJCQkvL3ByaW50aygidm9ydGV4OiBSZXNNYW5hZ2VyOiB0eXBlICVkIGluICVkXG4iLHJlc3R5cGUsIGkpOworCQkJCS8qCisJCQkJcHJpbnRrKEtFUk5fREVCVUcKKwkJCQkgICAgICAgInZvcnRleDogUmVzTWFuYWdlcjogdHlwZSAlZCBpbiAlZFxuIiwKKwkJCQkgICAgICAgcmVzdHlwZSwgaSk7CisJCQkJKi8KIAkJCQlyZXR1cm4gaTsKIAkJCX0KIAkJfQpAQCAtMjc4OSw3ICsyODAwLDcgQEAKIHsKIAlpbnQgYSwgdGhpc18xOTQ7CiAKLQlpZiAoKGJpdHMgIT0gOCkgfHwgKGJpdHMgIT0gMTYpKQorCWlmICgoYml0cyAhPSA4KSAmJiAoYml0cyAhPSAxNikpCiAJCXJldHVybiAtMTsKIAogCXN3aXRjaCAoZW5jb2QpIHsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwX3N5bnRoLmMgYi9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MF9zeW50aC5jCmluZGV4IDk3OGI4NTYuLjI4MDVlMzQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwX3N5bnRoLmMKKysrIGIvc291bmQvcGNpL2F1ODh4MC9hdTg4eDBfc3ludGguYwpAQCAtMjEzLDM4ICsyMTMsNTkgQEAKIAlzd2l0Y2ggKHJlZykgewogCQkvKiBWb2ljZSBzcGVjaWZpYyBwYXJhbWV0ZXJzICovCiAJY2FzZSAwOgkJLyogcnVubmluZyAqLwotCQkvL3ByaW50aygidm9ydGV4OiBXVCBTZXRSZWcoMHgleCkgPSAweCUwOHhcbiIsIFdUX1JVTih3dCksIChpbnQpdmFsKTsKKwkJLyoKKwkJcHJpbnRrKEtFUk5fREVCVUcgInZvcnRleDogV1QgU2V0UmVnKDB4JXgpID0gMHglMDh4XG4iLAorCQkgICAgICAgV1RfUlVOKHd0KSwgKGludCl2YWwpOworCQkqLwogCQlod3dyaXRlKHZvcnRleC0+bW1pbywgV1RfUlVOKHd0KSwgdmFsKTsKIAkJcmV0dXJuIDB4YzsKIAkJYnJlYWs7CiAJY2FzZSAxOgkJLyogcGFyYW0gMCAqLwotCQkvL3ByaW50aygidm9ydGV4OiBXVCBTZXRSZWcoMHgleCkgPSAweCUwOHhcbiIsIFdUX1BBUk0od3QsMCksIChpbnQpdmFsKTsKKwkJLyoKKwkJcHJpbnRrKEtFUk5fREVCVUcgInZvcnRleDogV1QgU2V0UmVnKDB4JXgpID0gMHglMDh4XG4iLAorCQkgICAgICAgV1RfUEFSTSh3dCwwKSwgKGludCl2YWwpOworCQkqLwogCQlod3dyaXRlKHZvcnRleC0+bW1pbywgV1RfUEFSTSh3dCwgMCksIHZhbCk7CiAJCXJldHVybiAweGM7CiAJCWJyZWFrOwogCWNhc2UgMjoJCS8qIHBhcmFtIDEgKi8KLQkJLy9wcmludGsoInZvcnRleDogV1QgU2V0UmVnKDB4JXgpID0gMHglMDh4XG4iLCBXVF9QQVJNKHd0LDEpLCAoaW50KXZhbCk7CisJCS8qCisJCXByaW50ayhLRVJOX0RFQlVHICJ2b3J0ZXg6IFdUIFNldFJlZygweCV4KSA9IDB4JTA4eFxuIiwKKwkJICAgICAgIFdUX1BBUk0od3QsMSksIChpbnQpdmFsKTsKKwkJKi8KIAkJaHd3cml0ZSh2b3J0ZXgtPm1taW8sIFdUX1BBUk0od3QsIDEpLCB2YWwpOwogCQlyZXR1cm4gMHhjOwogCQlicmVhazsKIAljYXNlIDM6CQkvKiBwYXJhbSAyICovCi0JCS8vcHJpbnRrKCJ2b3J0ZXg6IFdUIFNldFJlZygweCV4KSA9IDB4JTA4eFxuIiwgV1RfUEFSTSh3dCwyKSwgKGludCl2YWwpOworCQkvKgorCQlwcmludGsoS0VSTl9ERUJVRyAidm9ydGV4OiBXVCBTZXRSZWcoMHgleCkgPSAweCUwOHhcbiIsCisJCSAgICAgICBXVF9QQVJNKHd0LDIpLCAoaW50KXZhbCk7CisJCSovCiAJCWh3d3JpdGUodm9ydGV4LT5tbWlvLCBXVF9QQVJNKHd0LCAyKSwgdmFsKTsKIAkJcmV0dXJuIDB4YzsKIAkJYnJlYWs7CiAJY2FzZSA0OgkJLyogcGFyYW0gMyAqLwotCQkvL3ByaW50aygidm9ydGV4OiBXVCBTZXRSZWcoMHgleCkgPSAweCUwOHhcbiIsIFdUX1BBUk0od3QsMyksIChpbnQpdmFsKTsKKwkJLyoKKwkJcHJpbnRrKEtFUk5fREVCVUcgInZvcnRleDogV1QgU2V0UmVnKDB4JXgpID0gMHglMDh4XG4iLAorCQkgICAgICAgV1RfUEFSTSh3dCwzKSwgKGludCl2YWwpOworCQkqLwogCQlod3dyaXRlKHZvcnRleC0+bW1pbywgV1RfUEFSTSh3dCwgMyksIHZhbCk7CiAJCXJldHVybiAweGM7CiAJCWJyZWFrOwogCWNhc2UgNjoJCS8qIG11dGUgKi8KLQkJLy9wcmludGsoInZvcnRleDogV1QgU2V0UmVnKDB4JXgpID0gMHglMDh4XG4iLCBXVF9NVVRFKHd0KSwgKGludCl2YWwpOworCQkvKgorCQlwcmludGsoS0VSTl9ERUJVRyAidm9ydGV4OiBXVCBTZXRSZWcoMHgleCkgPSAweCUwOHhcbiIsCisJCSAgICAgICBXVF9NVVRFKHd0KSwgKGludCl2YWwpOworCQkqLwogCQlod3dyaXRlKHZvcnRleC0+bW1pbywgV1RfTVVURSh3dCksIHZhbCk7CiAJCXJldHVybiAweGM7CiAJCWJyZWFrOwogCWNhc2UgMHhiOgogCQl7CQkvKiBkZWxheSAqLwotCQkJLy9wcmludGsoInZvcnRleDogV1QgU2V0UmVnKDB4JXgpID0gMHglMDh4XG4iLCBXVF9ERUxBWSh3dCwwKSwgKGludCl2YWwpOworCQkJLyoKKwkJCXByaW50ayhLRVJOX0RFQlVHICJ2b3J0ZXg6IFdUIFNldFJlZygweCV4KSA9IDB4JTA4eFxuIiwKKwkJCSAgICAgICBXVF9ERUxBWSh3dCwwKSwgKGludCl2YWwpOworCQkJKi8KIAkJCWh3d3JpdGUodm9ydGV4LT5tbWlvLCBXVF9ERUxBWSh3dCwgMyksIHZhbCk7CiAJCQlod3dyaXRlKHZvcnRleC0+bW1pbywgV1RfREVMQVkod3QsIDIpLCB2YWwpOwogCQkJaHd3cml0ZSh2b3J0ZXgtPm1taW8sIFdUX0RFTEFZKHd0LCAxKSwgdmFsKTsKQEAgLTI3Miw3ICsyOTMsOSBAQAogCQlyZXR1cm4gMDsKIAkJYnJlYWs7CiAJfQotCS8vcHJpbnRrKCJ2b3J0ZXg6IFdUIFNldFJlZygweCV4KSA9IDB4JTA4eFxuIiwgZWN4LCAoaW50KXZhbCk7CisJLyoKKwlwcmludGsoS0VSTl9ERUJVRyAidm9ydGV4OiBXVCBTZXRSZWcoMHgleCkgPSAweCUwOHhcbiIsIGVjeCwgKGludCl2YWwpOworCSovCiAJaHd3cml0ZSh2b3J0ZXgtPm1taW8sIGVjeCwgdmFsKTsKIAlyZXR1cm4gMTsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hdzIvYXcyLWFsc2EuYyBiL3NvdW5kL3BjaS9hdzIvYXcyLWFsc2EuYwppbmRleCBjN2M1NGU3Li44ZWVhMjlmIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXcyL2F3Mi1hbHNhLmMKKysrIGIvc291bmQvcGNpL2F3Mi9hdzItYWxzYS5jCkBAIC0zNjgsOSArMzY4LDkgQEAKIAl9CiAKIAkvKiAoMikgQ3JlYXRlIGNhcmQgaW5zdGFuY2UgKi8KLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCS8qICgzKSBDcmVhdGUgbWFpbiBjb21wb25lbnQgKi8KIAllcnIgPSBzbmRfYXcyX2NyZWF0ZShjYXJkLCBwY2ksICZjaGlwKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9henQzMzI4LmMgYi9zb3VuZC9wY2kvYXp0MzMyOC5jCmluZGV4IDMzMzAwN2MuLmU5ZTliNTggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9henQzMzI4LmMKKysrIGIvc291bmQvcGNpL2F6dDMzMjguYwpAQCAtMjExLDI1ICsyMTEsMjUgQEAKICNlbmRpZgogCiAjaWYgREVCVUdfTUlYRVIKLSNkZWZpbmUgc25kX2F6ZjMzMjhfZGJnbWl4ZXIoZm9ybWF0LCBhcmdzLi4uKSBwcmludGsoZm9ybWF0LCAjI2FyZ3MpCisjZGVmaW5lIHNuZF9hemYzMzI4X2RiZ21peGVyKGZvcm1hdCwgYXJncy4uLikgcHJpbnRrKEtFUk5fREVCVUcgZm9ybWF0LCAjI2FyZ3MpCiAjZWxzZQogI2RlZmluZSBzbmRfYXpmMzMyOF9kYmdtaXhlcihmb3JtYXQsIGFyZ3MuLi4pCiAjZW5kaWYKIAogI2lmIERFQlVHX1BMQVlfUkVDCi0jZGVmaW5lIHNuZF9hemYzMzI4X2RiZ3BsYXkoZm9ybWF0LCBhcmdzLi4uKSBwcmludGsoS0VSTl9FUlIgZm9ybWF0LCAjI2FyZ3MpCisjZGVmaW5lIHNuZF9hemYzMzI4X2RiZ3BsYXkoZm9ybWF0LCBhcmdzLi4uKSBwcmludGsoS0VSTl9ERUJVRyBmb3JtYXQsICMjYXJncykKICNlbHNlCiAjZGVmaW5lIHNuZF9hemYzMzI4X2RiZ3BsYXkoZm9ybWF0LCBhcmdzLi4uKQogI2VuZGlmCiAKICNpZiBERUJVR19NSVNDCi0jZGVmaW5lIHNuZF9hemYzMzI4X2RiZ3RpbWVyKGZvcm1hdCwgYXJncy4uLikgcHJpbnRrKEtFUk5fRVJSIGZvcm1hdCwgIyNhcmdzKQorI2RlZmluZSBzbmRfYXpmMzMyOF9kYmd0aW1lcihmb3JtYXQsIGFyZ3MuLi4pIHByaW50ayhLRVJOX0RFQlVHIGZvcm1hdCwgIyNhcmdzKQogI2Vsc2UKICNkZWZpbmUgc25kX2F6ZjMzMjhfZGJndGltZXIoZm9ybWF0LCBhcmdzLi4uKQogI2VuZGlmCiAKICNpZiBERUJVR19HQU1FCi0jZGVmaW5lIHNuZF9hemYzMzI4X2RiZ2dhbWUoZm9ybWF0LCBhcmdzLi4uKSBwcmludGsoS0VSTl9FUlIgZm9ybWF0LCAjI2FyZ3MpCisjZGVmaW5lIHNuZF9hemYzMzI4X2RiZ2dhbWUoZm9ybWF0LCBhcmdzLi4uKSBwcmludGsoS0VSTl9ERUJVRyBmb3JtYXQsICMjYXJncykKICNlbHNlCiAjZGVmaW5lIHNuZF9hemYzMzI4X2RiZ2dhbWUoZm9ybWF0LCBhcmdzLi4uKQogI2VuZGlmCkBAIC0yMjE2LDkgKzIyMTYsOSBAQAogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCXN0cmNweShjYXJkLT5kcml2ZXIsICJBWkYzMzI4Iik7CiAJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgIkF6dGVjaCBBWkYzMzI4IChQQ0kxNjgpIik7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYnQ4N3guYyBiL3NvdW5kL3BjaS9idDg3eC5jCmluZGV4IDFhYTFjMDQuLmEyOTkzNDAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9idDg3eC5jCisrKyBiL3NvdW5kL3BjaS9idDg3eC5jCkBAIC04ODgsOSArODg4LDkgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKCFjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCWVyciA9IHNuZF9idDg3eF9jcmVhdGUoY2FyZCwgcGNpLCAmY2hpcCk7CiAJaWYgKGVyciA8IDApCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY2EwMTA2L2NhMDEwNl9tYWluLmMgYi9zb3VuZC9wY2kvY2EwMTA2L2NhMDEwNl9tYWluLmMKaW5kZXggMGU2MjIwNS4uZGY3NTc1NyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2NhMDEwNi9jYTAxMDZfbWFpbi5jCisrKyBiL3NvdW5kL3BjaS9jYTAxMDYvY2EwMTA2X21haW4uYwpAQCAtMjU1LDYgKzI1NSwxNCBAQAogCSAgIC5ncGlvX3R5cGUgPSAyLAogCSAgIC5pMmNfYWRjID0gMSwKIAkgICAuc3BpX2RhYyA9IDEgfSAsCisJLyogR2lnYS1ieXRlIEdBLUcxOTc1WCBtb2JvCisJICogTm92ZWxsIGJuYyMzOTU4MDcKKwkgKi8KKwkvKiBGSVhNRTogdGhlIEdQSU8gYW5kIEkyQyBzZXR0aW5nIGFyZW4ndCB0ZXN0ZWQgd2VsbCAqLworCXsgLnNlcmlhbCA9IDB4MTQ1OGEwMDYsCisJICAubmFtZSA9ICJHaWdhLWJ5dGUgR0EtRzE5NzVYIiwKKwkgIC5ncGlvX3R5cGUgPSAxLAorCSAgLmkyY19hZGMgPSAxIH0sCiAJIC8qIFNodXR0bGUgWFBDIFNEMzFQIHdoaWNoIGhhcyBhbiBvbmJvYXJkIENyZWF0aXZlIExhYnMKIAkgICogU291bmQgQmxhc3RlciBMaXZlISAyNC1iaXQgRUFYCiAJICAqIGhpZ2gtZGVmaW5pdGlvbiA3LjEgYXVkaW8gcHJvY2Vzc29yIi4KQEAgLTQwNCw3ICs0MTIsOSBAQAogCX0KIAogCXRtcCA9IHJlZyA8PCAyNSB8IHZhbHVlIDw8IDE2OwotCS8vIHNuZF9wcmludGsoIkkyQy13cml0ZTpyZWc9MHgleCwgdmFsdWU9MHgleFxuIiwgcmVnLCB2YWx1ZSk7CisJLyoKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcgIkkyQy13cml0ZTpyZWc9MHgleCwgdmFsdWU9MHgleFxuIiwgcmVnLCB2YWx1ZSk7CisJKi8KIAkvKiBOb3Qgc3VyZSB3aGF0IHRoaXMgSTJDIGNoYW5uZWwgY29udHJvbHMuICovCiAJLyogc25kX2NhMDEwNl9wdHJfd3JpdGUoZW11LCBJMkNfRDAsIDAsIHRtcCk7ICovCiAKQEAgLTQyMiw3ICs0MzIsNyBAQAogCQkvKiBXYWl0IHRpbGwgdGhlIHRyYW5zYWN0aW9uIGVuZHMgKi8KIAkJd2hpbGUgKDEpIHsKIAkJCXN0YXR1cyA9IHNuZF9jYTAxMDZfcHRyX3JlYWQoZW11LCBJMkNfQSwgMCk7Ci0gICAgICAgICAgICAgICAgCS8vc25kX3ByaW50aygiSTJDOnN0YXR1cz0weCV4XG4iLCBzdGF0dXMpOworCQkJLypzbmRfcHJpbnRrKEtFUk5fREVCVUcgIkkyQzpzdGF0dXM9MHgleFxuIiwgc3RhdHVzKTsqLwogCQkJdGltZW91dCsrOwogCQkJaWYgKChzdGF0dXMgJiBJMkNfQV9BRENfU1RBUlQpID09IDApCiAJCQkJYnJlYWs7CkBAIC01MjEsNyArNTMxLDEwIEBACiAgICAgICAgIGNoYW5uZWwtPm51bWJlciA9IGNoYW5uZWxfaWQ7CiAKIAljaGFubmVsLT51c2UgPSAxOwotICAgICAgICAvL3ByaW50aygib3BlbjpjaGFubmVsX2lkPSVkLCBjaGlwPSVwLCBjaGFubmVsPSVwXG4iLGNoYW5uZWxfaWQsIGNoaXAsIGNoYW5uZWwpOworCS8qCisJcHJpbnRrKEtFUk5fREVCVUcgIm9wZW46Y2hhbm5lbF9pZD0lZCwgY2hpcD0lcCwgY2hhbm5lbD0lcFxuIiwKKwkgICAgICAgY2hhbm5lbF9pZCwgY2hpcCwgY2hhbm5lbCk7CisJKi8KICAgICAgICAgLy9jaGFubmVsLT5pbnRlcnJ1cHQgPSBzbmRfY2EwMTA2X3BjbV9jaGFubmVsX2ludGVycnVwdDsKIAljaGFubmVsLT5lcGNtID0gZXBjbTsKIAlpZiAoKGVyciA9IHNuZF9wY21faHdfY29uc3RyYWludF9pbnRlZ2VyKHJ1bnRpbWUsIFNORFJWX1BDTV9IV19QQVJBTV9QRVJJT0RTKSkgPCAwKQpAQCAtNjE0LDcgKzYyNywxMCBAQAogICAgICAgICBjaGFubmVsLT5udW1iZXIgPSBjaGFubmVsX2lkOwogCiAJY2hhbm5lbC0+dXNlID0gMTsKLSAgICAgICAgLy9wcmludGsoIm9wZW46Y2hhbm5lbF9pZD0lZCwgY2hpcD0lcCwgY2hhbm5lbD0lcFxuIixjaGFubmVsX2lkLCBjaGlwLCBjaGFubmVsKTsKKwkvKgorICAgICAgICBwcmludGsoS0VSTl9ERUJVRyAib3BlbjpjaGFubmVsX2lkPSVkLCBjaGlwPSVwLCBjaGFubmVsPSVwXG4iLAorCSAgICAgICBjaGFubmVsX2lkLCBjaGlwLCBjaGFubmVsKTsKKwkqLwogICAgICAgICAvL2NoYW5uZWwtPmludGVycnVwdCA9IHNuZF9jYTAxMDZfcGNtX2NoYW5uZWxfaW50ZXJydXB0OwogICAgICAgICBjaGFubmVsLT5lcGNtID0gZXBjbTsKIAlpZiAoKGVyciA9IHNuZF9wY21faHdfY29uc3RyYWludF9pbnRlZ2VyKHJ1bnRpbWUsIFNORFJWX1BDTV9IV19QQVJBTV9QRVJJT0RTKSkgPCAwKQpAQCAtNzA1LDkgKzcyMSwyMCBAQAogCXUzMiByZWc3MTsKIAlpbnQgaTsKIAkKLSAgICAgICAgLy9zbmRfcHJpbnRrKCJwcmVwYXJlOmNoYW5uZWxfbnVtYmVyPSVkLCByYXRlPSVkLCBmb3JtYXQ9MHgleCwgY2hhbm5lbHM9JWQsIGJ1ZmZlcl9zaXplPSVsZCwgcGVyaW9kX3NpemU9JWxkLCBwZXJpb2RzPSV1LCBmcmFtZXNfdG9fYnl0ZXM9JWRcbiIsY2hhbm5lbCwgcnVudGltZS0+cmF0ZSwgcnVudGltZS0+Zm9ybWF0LCBydW50aW1lLT5jaGFubmVscywgcnVudGltZS0+YnVmZmVyX3NpemUsIHJ1bnRpbWUtPnBlcmlvZF9zaXplLCBydW50aW1lLT5wZXJpb2RzLCBmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgMSkpOwotICAgICAgICAvL3NuZF9wcmludGsoImRtYV9hZGRyPSV4LCBkbWFfYXJlYT0lcCwgdGFibGVfYmFzZT0lcFxuIixydW50aW1lLT5kbWFfYWRkciwgcnVudGltZS0+ZG1hX2FyZWEsIHRhYmxlX2Jhc2UpOwotCS8vc25kX3ByaW50aygiZG1hX2FkZHI9JXgsIGRtYV9hcmVhPSVwLCBkbWFfYnl0ZXMoc2l6ZSk9JXhcbiIsZW11LT5idWZmZXIuYWRkciwgZW11LT5idWZmZXIuYXJlYSwgZW11LT5idWZmZXIuYnl0ZXMpOworI2lmIDAgLyogZGVidWcgKi8KKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcKKwkJICAgInByZXBhcmU6Y2hhbm5lbF9udW1iZXI9JWQsIHJhdGU9JWQsIGZvcm1hdD0weCV4LCAiCisJCSAgICJjaGFubmVscz0lZCwgYnVmZmVyX3NpemU9JWxkLCBwZXJpb2Rfc2l6ZT0lbGQsICIKKwkJICAgInBlcmlvZHM9JXUsIGZyYW1lc190b19ieXRlcz0lZFxuIiwKKwkJICAgY2hhbm5lbCwgcnVudGltZS0+cmF0ZSwgcnVudGltZS0+Zm9ybWF0LAorCQkgICBydW50aW1lLT5jaGFubmVscywgcnVudGltZS0+YnVmZmVyX3NpemUsCisJCSAgIHJ1bnRpbWUtPnBlcmlvZF9zaXplLCBydW50aW1lLT5wZXJpb2RzLAorCQkgICBmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgMSkpOworCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiZG1hX2FkZHI9JXgsIGRtYV9hcmVhPSVwLCB0YWJsZV9iYXNlPSVwXG4iLAorCQkgICBydW50aW1lLT5kbWFfYWRkciwgcnVudGltZS0+ZG1hX2FyZWEsIHRhYmxlX2Jhc2UpOworCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiZG1hX2FkZHI9JXgsIGRtYV9hcmVhPSVwLCBkbWFfYnl0ZXMoc2l6ZSk9JXhcbiIsCisJCSAgIGVtdS0+YnVmZmVyLmFkZHIsIGVtdS0+YnVmZmVyLmFyZWEsIGVtdS0+YnVmZmVyLmJ5dGVzKTsKKyNlbmRpZiAvKiBkZWJ1ZyAqLwogCS8qIFJhdGUgY2FuIGJlIHNldCBwZXIgY2hhbm5lbC4gKi8KIAkvKiByZWc0MCBjb250cm9sIGhvc3QgdG8gZmlmbyAqLwogCS8qIHJlZzcxIGNvbnRyb2xzIERBQyByYXRlLiAqLwpAQCAtNzk5LDkgKzgyNiwyMCBAQAogCXUzMiByZWc3MV9zZXQgPSAwOwogCXUzMiByZWc3MTsKIAkKLSAgICAgICAgLy9zbmRfcHJpbnRrKCJwcmVwYXJlOmNoYW5uZWxfbnVtYmVyPSVkLCByYXRlPSVkLCBmb3JtYXQ9MHgleCwgY2hhbm5lbHM9JWQsIGJ1ZmZlcl9zaXplPSVsZCwgcGVyaW9kX3NpemU9JWxkLCBwZXJpb2RzPSV1LCBmcmFtZXNfdG9fYnl0ZXM9JWRcbiIsY2hhbm5lbCwgcnVudGltZS0+cmF0ZSwgcnVudGltZS0+Zm9ybWF0LCBydW50aW1lLT5jaGFubmVscywgcnVudGltZS0+YnVmZmVyX3NpemUsIHJ1bnRpbWUtPnBlcmlvZF9zaXplLCBydW50aW1lLT5wZXJpb2RzLCBmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgMSkpOwotICAgICAgICAvL3NuZF9wcmludGsoImRtYV9hZGRyPSV4LCBkbWFfYXJlYT0lcCwgdGFibGVfYmFzZT0lcFxuIixydW50aW1lLT5kbWFfYWRkciwgcnVudGltZS0+ZG1hX2FyZWEsIHRhYmxlX2Jhc2UpOwotCS8vc25kX3ByaW50aygiZG1hX2FkZHI9JXgsIGRtYV9hcmVhPSVwLCBkbWFfYnl0ZXMoc2l6ZSk9JXhcbiIsZW11LT5idWZmZXIuYWRkciwgZW11LT5idWZmZXIuYXJlYSwgZW11LT5idWZmZXIuYnl0ZXMpOworI2lmIDAgLyogZGVidWcgKi8KKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcKKwkJICAgInByZXBhcmU6Y2hhbm5lbF9udW1iZXI9JWQsIHJhdGU9JWQsIGZvcm1hdD0weCV4LCAiCisJCSAgICJjaGFubmVscz0lZCwgYnVmZmVyX3NpemU9JWxkLCBwZXJpb2Rfc2l6ZT0lbGQsICIKKwkJICAgInBlcmlvZHM9JXUsIGZyYW1lc190b19ieXRlcz0lZFxuIiwKKwkJICAgY2hhbm5lbCwgcnVudGltZS0+cmF0ZSwgcnVudGltZS0+Zm9ybWF0LAorCQkgICBydW50aW1lLT5jaGFubmVscywgcnVudGltZS0+YnVmZmVyX3NpemUsCisJCSAgIHJ1bnRpbWUtPnBlcmlvZF9zaXplLCBydW50aW1lLT5wZXJpb2RzLAorCQkgICBmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgMSkpOworICAgICAgICBzbmRfcHJpbnRrKEtFUk5fREVCVUcgImRtYV9hZGRyPSV4LCBkbWFfYXJlYT0lcCwgdGFibGVfYmFzZT0lcFxuIiwKKwkJICAgcnVudGltZS0+ZG1hX2FkZHIsIHJ1bnRpbWUtPmRtYV9hcmVhLCB0YWJsZV9iYXNlKTsKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcgImRtYV9hZGRyPSV4LCBkbWFfYXJlYT0lcCwgZG1hX2J5dGVzKHNpemUpPSV4XG4iLAorCQkgICBlbXUtPmJ1ZmZlci5hZGRyLCBlbXUtPmJ1ZmZlci5hcmVhLCBlbXUtPmJ1ZmZlci5ieXRlcyk7CisjZW5kaWYgLyogZGVidWcgKi8KIAkvKiByZWc3MSBjb250cm9scyBBREMgcmF0ZS4gKi8KIAlzd2l0Y2ggKHJ1bnRpbWUtPnJhdGUpIHsKIAljYXNlIDQ0MTAwOgpAQCAtODQ2LDcgKzg4NCwxNCBAQAogCX0KIAogCi0gICAgICAgIC8vcHJpbnRrKCJwcmVwYXJlOmNoYW5uZWxfbnVtYmVyPSVkLCByYXRlPSVkLCBmb3JtYXQ9MHgleCwgY2hhbm5lbHM9JWQsIGJ1ZmZlcl9zaXplPSVsZCwgcGVyaW9kX3NpemU9JWxkLCBmcmFtZXNfdG9fYnl0ZXM9JWRcbiIsY2hhbm5lbCwgcnVudGltZS0+cmF0ZSwgcnVudGltZS0+Zm9ybWF0LCBydW50aW1lLT5jaGFubmVscywgcnVudGltZS0+YnVmZmVyX3NpemUsIHJ1bnRpbWUtPnBlcmlvZF9zaXplLCAgZnJhbWVzX3RvX2J5dGVzKHJ1bnRpbWUsIDEpKTsKKwkvKgorCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICJwcmVwYXJlOmNoYW5uZWxfbnVtYmVyPSVkLCByYXRlPSVkLCBmb3JtYXQ9MHgleCwgY2hhbm5lbHM9JWQsICIKKwkgICAgICAgImJ1ZmZlcl9zaXplPSVsZCwgcGVyaW9kX3NpemU9JWxkLCBmcmFtZXNfdG9fYnl0ZXM9JWRcbiIsCisJICAgICAgIGNoYW5uZWwsIHJ1bnRpbWUtPnJhdGUsIHJ1bnRpbWUtPmZvcm1hdCwgcnVudGltZS0+Y2hhbm5lbHMsCisJICAgICAgIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplLCBydW50aW1lLT5wZXJpb2Rfc2l6ZSwKKwkgICAgICAgZnJhbWVzX3RvX2J5dGVzKHJ1bnRpbWUsIDEpKTsKKwkqLwogCXNuZF9jYTAxMDZfcHRyX3dyaXRlKGVtdSwgMHgxMywgY2hhbm5lbCwgMCk7CiAJc25kX2NhMDEwNl9wdHJfd3JpdGUoZW11LCBDQVBUVVJFX0RNQV9BRERSLCBjaGFubmVsLCBydW50aW1lLT5kbWFfYWRkcik7CiAJc25kX2NhMDEwNl9wdHJfd3JpdGUoZW11LCBDQVBUVVJFX0JVRkZFUl9TSVpFLCBjaGFubmVsLCBmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgcnVudGltZS0+YnVmZmVyX3NpemUpPDwxNik7IC8vIGJ1ZmZlciBzaXplIGluIGJ5dGVzCkBAIC04ODgsMTMgKzkzMywxMyBAQAogCQlydW50aW1lID0gcy0+cnVudGltZTsKIAkJZXBjbSA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKIAkJY2hhbm5lbCA9IGVwY20tPmNoYW5uZWxfaWQ7Ci0JCS8qIHNuZF9wcmludGsoImNoYW5uZWw9JWRcbiIsY2hhbm5lbCk7ICovCisJCS8qIHNuZF9wcmludGsoS0VSTl9ERUJVRyAiY2hhbm5lbD0lZFxuIiwgY2hhbm5lbCk7ICovCiAJCWVwY20tPnJ1bm5pbmcgPSBydW5uaW5nOwogCQliYXNpYyB8PSAoMHgxIDw8IGNoYW5uZWwpOwogCQlleHRlbmRlZCB8PSAoMHgxMCA8PCBjaGFubmVsKTsKICAgICAgICAgICAgICAgICBzbmRfcGNtX3RyaWdnZXJfZG9uZShzLCBzdWJzdHJlYW0pOwogICAgICAgICB9Ci0JLyogc25kX3ByaW50aygiYmFzaWM9MHgleCwgZXh0ZW5kZWQ9MHgleFxuIixiYXNpYywgZXh0ZW5kZWQpOyAqLworCS8qIHNuZF9wcmludGsoS0VSTl9ERUJVRyAiYmFzaWM9MHgleCwgZXh0ZW5kZWQ9MHgleFxuIixiYXNpYywgZXh0ZW5kZWQpOyAqLwogCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgpAQCAtOTcyLDggKzEwMTcsMTMgQEAKIAlwdHI9cHRyMjsKICAgICAgICAgaWYgKHB0ciA+PSBydW50aW1lLT5idWZmZXJfc2l6ZSkKIAkJcHRyIC09IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplOwotCS8vcHJpbnRrKCJwdHIxID0gMHglbHgsIHB0cjI9MHglbHgsIHB0cj0weCVseCwgYnVmZmVyX3NpemUgPSAweCV4LCBwZXJpb2Rfc2l6ZSA9IDB4JXgsIGJpdHM9JWQsIHJhdGU9JWRcbiIsIHB0cjEsIHB0cjIsIHB0ciwgKGludClydW50aW1lLT5idWZmZXJfc2l6ZSwgKGludClydW50aW1lLT5wZXJpb2Rfc2l6ZSwgKGludClydW50aW1lLT5mcmFtZV9iaXRzLCAoaW50KXJ1bnRpbWUtPnJhdGUpOwotCisJLyoKKwlwcmludGsoS0VSTl9ERUJVRyAicHRyMSA9IDB4JWx4LCBwdHIyPTB4JWx4LCBwdHI9MHglbHgsICIKKwkgICAgICAgImJ1ZmZlcl9zaXplID0gMHgleCwgcGVyaW9kX3NpemUgPSAweCV4LCBiaXRzPSVkLCByYXRlPSVkXG4iLAorCSAgICAgICBwdHIxLCBwdHIyLCBwdHIsIChpbnQpcnVudGltZS0+YnVmZmVyX3NpemUsCisJICAgICAgIChpbnQpcnVudGltZS0+cGVyaW9kX3NpemUsIChpbnQpcnVudGltZS0+ZnJhbWVfYml0cywKKwkgICAgICAgKGludClydW50aW1lLT5yYXRlKTsKKwkqLwogCXJldHVybiBwdHI7CiB9CiAKQEAgLTk5NSw4ICsxMDQ1LDEzIEBACiAJcHRyPXB0cjI7CiAgICAgICAgIGlmIChwdHIgPj0gcnVudGltZS0+YnVmZmVyX3NpemUpCiAJCXB0ciAtPSBydW50aW1lLT5idWZmZXJfc2l6ZTsKLQkvL3ByaW50aygicHRyMSA9IDB4JWx4LCBwdHIyPTB4JWx4LCBwdHI9MHglbHgsIGJ1ZmZlcl9zaXplID0gMHgleCwgcGVyaW9kX3NpemUgPSAweCV4LCBiaXRzPSVkLCByYXRlPSVkXG4iLCBwdHIxLCBwdHIyLCBwdHIsIChpbnQpcnVudGltZS0+YnVmZmVyX3NpemUsIChpbnQpcnVudGltZS0+cGVyaW9kX3NpemUsIChpbnQpcnVudGltZS0+ZnJhbWVfYml0cywgKGludClydW50aW1lLT5yYXRlKTsKLQorCS8qCisJcHJpbnRrKEtFUk5fREVCVUcgInB0cjEgPSAweCVseCwgcHRyMj0weCVseCwgcHRyPTB4JWx4LCAiCisJICAgICAgICJidWZmZXJfc2l6ZSA9IDB4JXgsIHBlcmlvZF9zaXplID0gMHgleCwgYml0cz0lZCwgcmF0ZT0lZFxuIiwKKwkgICAgICAgcHRyMSwgcHRyMiwgcHRyLCAoaW50KXJ1bnRpbWUtPmJ1ZmZlcl9zaXplLAorCSAgICAgICAoaW50KXJ1bnRpbWUtPnBlcmlvZF9zaXplLCAoaW50KXJ1bnRpbWUtPmZyYW1lX2JpdHMsCisJICAgICAgIChpbnQpcnVudGltZS0+cmF0ZSk7CisJKi8KIAlyZXR1cm4gcHRyOwogfQogCkBAIC0xMTgxLDggKzEyMzYsMTIgQEAKIAkJcmV0dXJuIElSUV9OT05FOwogCiAgICAgICAgIHN0YXQ3NiA9IHNuZF9jYTAxMDZfcHRyX3JlYWQoY2hpcCwgRVhURU5ERURfSU5ULCAwKTsKLQkvL3NuZF9wcmludGsoImludGVycnVwdCBzdGF0dXMgPSAweCUwOHgsIHN0YXQ3Nj0weCUwOHhcbiIsIHN0YXR1cywgc3RhdDc2KTsKLQkvL3NuZF9wcmludGsoInB0cj0weCUwOHhcbiIsc25kX2NhMDEwNl9wdHJfcmVhZChjaGlwLCBQTEFZQkFDS19QT0lOVEVSLCAwKSk7CisJLyoKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcgImludGVycnVwdCBzdGF0dXMgPSAweCUwOHgsIHN0YXQ3Nj0weCUwOHhcbiIsCisJCSAgIHN0YXR1cywgc3RhdDc2KTsKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcgInB0cj0weCUwOHhcbiIsCisJCSAgIHNuZF9jYTAxMDZfcHRyX3JlYWQoY2hpcCwgUExBWUJBQ0tfUE9JTlRFUiwgMCkpOworCSovCiAgICAgICAgIG1hc2sgPSAweDExOyAvKiAweDEgZm9yIG9uZSBoYWxmLCAweDEwIGZvciB0aGUgb3RoZXIgaGFsZiBwZXJpb2QuICovCiAJZm9yKGkgPSAwOyBpIDwgNDsgaSsrKSB7CiAJCXBjaGFubmVsID0gJihjaGlwLT5wbGF5YmFja19jaGFubmVsc1tpXSk7CkBAIC0xNDcwLDcgKzE1MjksNyBAQAogCQlpbnQgc2l6ZSwgbjsKIAogCQlzaXplID0gQVJSQVlfU0laRShpMmNfYWRjX2luaXQpOwotCQkvKiBzbmRfcHJpbnRrKCJJMkM6YXJyYXkgc2l6ZT0weCV4XG4iLCBzaXplKTsgKi8KKwkJLyogc25kX3ByaW50ayhLRVJOX0RFQlVHICJJMkM6YXJyYXkgc2l6ZT0weCV4XG4iLCBzaXplKTsgKi8KIAkJZm9yIChuID0gMDsgbiA8IHNpemU7IG4rKykKIAkJCXNuZF9jYTAxMDZfaTJjX3dyaXRlKGNoaXAsIGkyY19hZGNfaW5pdFtuXVswXSwKIAkJCQkJICAgICBpMmNfYWRjX2luaXRbbl1bMV0pOwpAQCAtMTcwNyw5ICsxNzY2LDkgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAllcnIgPSBzbmRfY2EwMTA2X2NyZWF0ZShkZXYsIGNhcmQsIHBjaSwgJmNoaXApOwogCWlmIChlcnIgPCAwKQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2NtaXBjaS5jIGIvc291bmQvcGNpL2NtaXBjaS5jCmluZGV4IDFhNzRjYTYuLmM3ODk5YzMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9jbWlwY2kuYworKysgYi9zb3VuZC9wY2kvY21pcGNpLmMKQEAgLTMyNzIsOSArMzI3Miw5IEBACiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCQogCXN3aXRjaCAocGNpLT5kZXZpY2UpIHsKIAljYXNlIFBDSV9ERVZJQ0VfSURfQ01FRElBX0NNODczODoKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jczQyODEuYyBiL3NvdW5kL3BjaS9jczQyODEuYwppbmRleCAxOTJlNzg0Li5mNjI4NmY4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY3M0MjgxLmMKKysrIGIvc291bmQvcGNpL2NzNDI4MS5jCkBAIC04MzQsNyArODM0LDExIEBACiAJc3RydWN0IGNzNDI4MV9kbWEgKmRtYSA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgY3M0MjgxICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOwogCi0JLy8gcHJpbnRrKCJEQ0MgPSAweCV4LCBidWZmZXJfc2l6ZSA9IDB4JXgsIGppZmZpZXMgPSAlbGlcbiIsIHNuZF9jczQyODFfcGVla0JBMChjaGlwLCBkbWEtPnJlZ0RDQyksIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplLCBqaWZmaWVzKTsKKwkvKgorCXByaW50ayhLRVJOX0RFQlVHICJEQ0MgPSAweCV4LCBidWZmZXJfc2l6ZSA9IDB4JXgsIGppZmZpZXMgPSAlbGlcbiIsCisJICAgICAgIHNuZF9jczQyODFfcGVla0JBMChjaGlwLCBkbWEtPnJlZ0RDQyksIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplLAorCSAgICAgICBqaWZmaWVzKTsKKwkqLwogCXJldHVybiBydW50aW1lLT5idWZmZXJfc2l6ZSAtCiAJICAgICAgIHNuZF9jczQyODFfcGVla0JBMChjaGlwLCBkbWEtPnJlZ0RDQykgLSAxOwogfQpAQCAtMTkyNSw5ICsxOTI5LDkgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAlpZiAoKGVyciA9IHNuZF9jczQyODFfY3JlYXRlKGNhcmQsIHBjaSwgJmNoaXAsIGR1YWxfY29kZWNbZGV2XSkpIDwgMCkgewogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2NzNDZ4eC9jczQ2eHguYyBiL3NvdW5kL3BjaS9jczQ2eHgvY3M0Nnh4LmMKaW5kZXggZTg3NmIzMi4uYzliM2UzZCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2NzNDZ4eC9jczQ2eHguYworKysgYi9zb3VuZC9wY2kvY3M0Nnh4L2NzNDZ4eC5jCkBAIC04OCw5ICs4OCw5IEBACiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCWlmICgoZXJyID0gc25kX2NzNDZ4eF9jcmVhdGUoY2FyZCwgcGNpLAogCQkJCSAgICAgZXh0ZXJuYWxfYW1wW2Rldl0sIHRoaW5rcGFkW2Rldl0sCiAJCQkJICAgICAmY2hpcCkpIDwgMCkgewpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2NzNDZ4eC9jczQ2eHhfbGliLmMgYi9zb3VuZC9wY2kvY3M0Nnh4L2NzNDZ4eF9saWIuYwppbmRleCA4YWIwN2FhLi4xYmU5NmVhIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY3M0Nnh4L2NzNDZ4eF9saWIuYworKysgYi9zb3VuZC9wY2kvY3M0Nnh4L2NzNDZ4eF9saWIuYwpAQCAtMTk0LDcgKzE5NCw3IEBACiAJICogIEFDU0RBID0gU3RhdHVzIERhdGEgUmVnaXN0ZXIgPSA0NzRoCiAJICovCiAjaWYgMAotCXByaW50aygiZSkgcmVnID0gMHgleCwgdmFsID0gMHgleCwgQkEwX0FDQ0FEID0gMHgleFxuIiwgcmVnLAorCXByaW50ayhLRVJOX0RFQlVHICJlKSByZWcgPSAweCV4LCB2YWwgPSAweCV4LCBCQTBfQUNDQUQgPSAweCV4XG4iLCByZWcsCiAJCQlzbmRfY3M0Nnh4X3BlZWtCQTAoY2hpcCwgQkEwX0FDU0RBKSwKIAkJCXNuZF9jczQ2eHhfcGVla0JBMChjaGlwLCBCQTBfQUNDQUQpKTsKICNlbmRpZgpAQCAtNDI4LDggKzQyOCw4IEBACiAJfQogICAKIAlpZihzdGF0dXMgJiBTRVJCU1RfV0JTWSkgewotCQlzbmRfcHJpbnRrKCBLRVJOX0VSUiAiY3M0Nnh4OiBmYWlsdXJlIHdhaXRpbmcgZm9yIEZJRk8gY29tbWFuZCB0byBjb21wbGV0ZVxuIik7Ci0KKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiY3M0Nnh4OiBmYWlsdXJlIHdhaXRpbmcgZm9yICIKKwkJCSAgICJGSUZPIGNvbW1hbmQgdG8gY29tcGxldGVcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jczQ2eHgvY3M0Nnh4X2xpYi5oIGIvc291bmQvcGNpL2NzNDZ4eC9jczQ2eHhfbGliLmgKaW5kZXggMDE4YTdkZS4uNGViNTVhYSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2NzNDZ4eC9jczQ2eHhfbGliLmgKKysrIGIvc291bmQvcGNpL2NzNDZ4eC9jczQ2eHhfbGliLmgKQEAgLTYyLDcgKzYyLDExIEBACiAJdW5zaWduZWQgaW50IGJhbmsgPSByZWcgPj4gMTY7CiAJdW5zaWduZWQgaW50IG9mZnNldCA9IHJlZyAmIDB4ZmZmZjsKIAotCS8qaWYgKGJhbmsgPT0gMCkgcHJpbnRrKCJzbmRfY3M0Nnh4X3Bva2U6ICUwNFggLSAlMDhYXG4iLHJlZyA+PiAyLHZhbCk7ICovCisJLyoKKwlpZiAoYmFuayA9PSAwKQorCQlwcmludGsoS0VSTl9ERUJVRyAic25kX2NzNDZ4eF9wb2tlOiAlMDRYIC0gJTA4WFxuIiwKKwkJICAgICAgIHJlZyA+PiAyLHZhbCk7CisJKi8KIAl3cml0ZWwodmFsLCBjaGlwLT5yZWdpb24uaWR4W2JhbmsrMV0ucmVtYXBfYWRkciArIG9mZnNldCk7CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jczU1MzAuYyBiL3NvdW5kL3BjaS9jczU1MzAuYwppbmRleCA2ZGVhNWI1Li5kYzQ2NDMyIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY3M1NTMwLmMKKysrIGIvc291bmQvcGNpL2NzNTUzMC5jCkBAIC0yNTgsMTAgKzI1OCwxMCBAQAogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKIAotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJZXJyID0gc25kX2NzNTUzMF9jcmVhdGUoY2FyZCwgcGNpLCAmY2hpcCk7CiAJaWYgKGVyciA8IDApIHsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jczU1MzVhdWRpby9jczU1MzVhdWRpby5jIGIvc291bmQvcGNpL2NzNTUzNWF1ZGlvL2NzNTUzNWF1ZGlvLmMKaW5kZXggODI2ZTZkZS4uYzg5ZWQxZiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2NzNTUzNWF1ZGlvL2NzNTUzNWF1ZGlvLmMKKysrIGIvc291bmQvcGNpL2NzNTUzNWF1ZGlvL2NzNTUzNWF1ZGlvLmMKQEAgLTMxMiw3ICszMTIsNyBAQAogCiAJaWYgKHJlcXVlc3RfaXJxKHBjaS0+aXJxLCBzbmRfY3M1NTM1YXVkaW9faW50ZXJydXB0LAogCQkJSVJRRl9TSEFSRUQsICJDUzU1MzUgQXVkaW8iLCBjczU1MzVhdSkpIHsKLQkJc25kX3ByaW50aygidW5hYmxlIHRvIGdyYWIgSVJRICVkXG4iLCBwY2ktPmlycSk7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byBncmFiIElSUSAlZFxuIiwgcGNpLT5pcnEpOwogCQllcnIgPSAtRUJVU1k7CiAJCWdvdG8gc25kZmFpbDsKIAl9CkBAIC0zNTMsOSArMzUzLDkgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAlpZiAoKGVyciA9IHNuZF9jczU1MzVhdWRpb19jcmVhdGUoY2FyZCwgcGNpLCAmY3M1NTM1YXUpKSA8IDApCiAJCWdvdG8gcHJvYmVmYWlsX291dDsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vTWFrZWZpbGUgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL01ha2VmaWxlCmluZGV4IDdiNTc2YWUuLjEzNjFkZTcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vTWFrZWZpbGUKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9NYWtlZmlsZQpAQCAtMTUsNiArMTUsOCBAQAogc25kLWluZGlnby1vYmpzIDo9IGluZGlnby5vCiBzbmQtaW5kaWdvaW8tb2JqcyA6PSBpbmRpZ29pby5vCiBzbmQtaW5kaWdvZGotb2JqcyA6PSBpbmRpZ29kai5vCitzbmQtaW5kaWdvaW94LW9ianMgOj0gaW5kaWdvaW94Lm8KK3NuZC1pbmRpZ29kangtb2JqcyA6PSBpbmRpZ29kangubwogCiBvYmotJChDT05GSUdfU05EX0RBUkxBMjApICs9IHNuZC1kYXJsYTIwLm8KIG9iai0kKENPTkZJR19TTkRfR0lOQTIwKSArPSBzbmQtZ2luYTIwLm8KQEAgLTI4LDMgKzMwLDUgQEAKIG9iai0kKENPTkZJR19TTkRfSU5ESUdPKSArPSBzbmQtaW5kaWdvLm8KIG9iai0kKENPTkZJR19TTkRfSU5ESUdPSU8pICs9IHNuZC1pbmRpZ29pby5vCiBvYmotJChDT05GSUdfU05EX0lORElHT0RKKSArPSBzbmQtaW5kaWdvZGoubworb2JqLSQoQ09ORklHX1NORF9JTkRJR09JT1gpICs9IHNuZC1pbmRpZ29pb3gubworb2JqLSQoQ09ORklHX1NORF9JTkRJR09ESlgpICs9IHNuZC1pbmRpZ29kangubwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvM2dfZHNwLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG8zZ19kc3AuYwppbmRleCA0MTdlMjVhLi41Nzk2N2U1IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG8zZ19kc3AuYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG8zZ19kc3AuYwpAQCAtNTYsNyArNTYsNyBAQAogCX0KIAogCWNoaXAtPmNvbW1fcGFnZS0+ZTNnX2ZycV9yZWdpc3RlciA9Ci0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoKEUzR19NQUdJQ19OVU1CRVIgLyA0ODAwMCkgLSAyKTsKKwkJY3B1X3RvX2xlMzIoKEUzR19NQUdJQ19OVU1CRVIgLyA0ODAwMCkgLSAyKTsKIAljaGlwLT5kZXZpY2VfaWQgPSBkZXZpY2VfaWQ7CiAJY2hpcC0+c3ViZGV2aWNlX2lkID0gc3ViZGV2aWNlX2lkOwogCWNoaXAtPmJhZF9ib2FyZCA9IFRSVUU7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpby5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW8uYwppbmRleCA4ZGJjNWM0Li5kYTIwNjVjIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpby5jCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvLmMKQEAgLTk1MCw2ICs5NTAsOCBAQAogCUNvbnRyb2wgaW50ZXJmYWNlCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKKyNpZm5kZWYgRUNIT0NBUkRfSEFTX1ZNSVhFUgorCiAvKioqKioqKioqKioqKioqKioqKiBQQ00gb3V0cHV0IHZvbHVtZSAqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIGludCBzbmRfZWNob19vdXRwdXRfZ2Fpbl9pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAogCQkJCSAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKQEAgLTEwMDEsMTggKzEwMDMsNiBAQAogCXJldHVybiBjaGFuZ2VkOwogfQogCi0jaWZkZWYgRUNIT0NBUkRfSEFTX1ZNSVhFUgotLyogT24gVm1peGVyIGNhcmRzIHRoaXMgb25lIGNvbnRyb2xzIHRoZSBsaW5lLW91dCB2b2x1bWUgKi8KLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfZWNob19saW5lX291dHB1dF9nYWluIF9fZGV2aW5pdGRhdGEgPSB7Ci0JLm5hbWUgPSAiTGluZSBQbGF5YmFjayBWb2x1bWUiLAotCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAotCS5hY2Nlc3MgPSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRFdSSVRFIHwgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1RMVl9SRUFELAotCS5pbmZvID0gc25kX2VjaG9fb3V0cHV0X2dhaW5faW5mbywKLQkuZ2V0ID0gc25kX2VjaG9fb3V0cHV0X2dhaW5fZ2V0LAotCS5wdXQgPSBzbmRfZWNob19vdXRwdXRfZ2Fpbl9wdXQsCi0JLnRsdiA9IHsucCA9IGRiX3NjYWxlX291dHB1dF9nYWlufSwKLX07Ci0jZWxzZQogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9lY2hvX3BjbV9vdXRwdXRfZ2FpbiBfX2RldmluaXRkYXRhID0gewogCS5uYW1lID0gIlBDTSBQbGF5YmFjayBWb2x1bWUiLAogCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLApAQCAtMTAyMiw2ICsxMDEyLDcgQEAKIAkucHV0ID0gc25kX2VjaG9fb3V0cHV0X2dhaW5fcHV0LAogCS50bHYgPSB7LnAgPSBkYl9zY2FsZV9vdXRwdXRfZ2Fpbn0sCiB9OworCiAjZW5kaWYKIAogCkBAIC0xOTk3LDkgKzE5ODgsOSBAQAogCiAJREVfSU5JVCgoIkVjaG9hdWRpbyBkcml2ZXIgc3RhcnRpbmcuLi5cbiIpKTsKIAlpID0gMDsKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgJnBjaS0+ZGV2KTsKIApAQCAtMjAzNyw4ICsyMDI4LDYgQEAKIAogI2lmZGVmIEVDSE9DQVJEX0hBU19WTUlYRVIKIAlzbmRfZWNob192bWl4ZXIuY291bnQgPSBudW1fcGlwZXNfb3V0KGNoaXApICogbnVtX2J1c3Nlc19vdXQoY2hpcCk7Ci0JaWYgKChlcnIgPSBzbmRfY3RsX2FkZChjaGlwLT5jYXJkLCBzbmRfY3RsX25ldzEoJnNuZF9lY2hvX2xpbmVfb3V0cHV0X2dhaW4sIGNoaXApKSkgPCAwKQotCQlnb3RvIGN0bF9lcnJvcjsKIAlpZiAoKGVyciA9IHNuZF9jdGxfYWRkKGNoaXAtPmNhcmQsIHNuZF9jdGxfbmV3MSgmc25kX2VjaG9fdm1peGVyLCBjaGlwKSkpIDwgMCkKIAkJZ290byBjdGxfZXJyb3I7CiAjZWxzZQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW8uaCBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvLmgKaW5kZXggMWM4OGUwNS4uZjk0OTBhZSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW8uaAorKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpby5oCkBAIC0xODksNiArMTg5LDkgQEAKICNkZWZpbmUgSU5ESUdPCQkJMHgwMDkwCiAjZGVmaW5lIElORElHT19JTwkJMHgwMGEwCiAjZGVmaW5lIElORElHT19ESgkJMHgwMGIwCisjZGVmaW5lIERDOAkJCTB4MDBjMAorI2RlZmluZSBJTkRJR09fSU9YCQkweDAwZDAKKyNkZWZpbmUgSU5ESUdPX0RKWAkJMHgwMGUwCiAjZGVmaW5lIEVDSE8zRwkJCTB4MDEwMAogCiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvXzNnLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpb18zZy5jCmluZGV4IGMzNzM2YmIuLmUzMmE3NDggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvXzNnLmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW9fM2cuYwpAQCAtNDAsOCArNDAsNyBAQAogCWlmICh3YWl0X2hhbmRzaGFrZShjaGlwKSkKIAkJcmV0dXJuIC1FSU87CiAKLQljaGlwLT5jb21tX3BhZ2UtPmV4dF9ib3hfc3RhdHVzID0KLQkJX19jb25zdGFudF9jcHVfdG9fbGUzMihFM0dfQVNJQ19OT1RfTE9BREVEKTsKKwljaGlwLT5jb21tX3BhZ2UtPmV4dF9ib3hfc3RhdHVzID0gY3B1X3RvX2xlMzIoRTNHX0FTSUNfTk9UX0xPQURFRCk7CiAJY2hpcC0+YXNpY19sb2FkZWQgPSBGQUxTRTsKIAljbGVhcl9oYW5kc2hha2UoY2hpcCk7CiAJc2VuZF92ZWN0b3IoY2hpcCwgRFNQX1ZDX1RFU1RfQVNJQyk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpb19kc3AuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvX2RzcC5jCmluZGV4IGJlMGUxODEuLjRkZjUxZWYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvX2RzcC5jCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvX2RzcC5jCkBAIC05MjYsMTEgKzkyNiwxMSBAQAogCiAJLyogSW5pdCB0aGUgY29tbSBwYWdlICovCiAJY2hpcC0+Y29tbV9wYWdlLT5jb21tX3NpemUgPQotCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKHNpemVvZihzdHJ1Y3QgY29tbV9wYWdlKSk7CisJCWNwdV90b19sZTMyKHNpemVvZihzdHJ1Y3QgY29tbV9wYWdlKSk7CiAJY2hpcC0+Y29tbV9wYWdlLT5oYW5kc2hha2UgPSAweGZmZmZmZmZmOwogCWNoaXAtPmNvbW1fcGFnZS0+bWlkaV9vdXRfZnJlZV9jb3VudCA9Ci0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoRFNQX01JRElfT1VUX0ZJRk9fU0laRSk7Ci0JY2hpcC0+Y29tbV9wYWdlLT5zYW1wbGVfcmF0ZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoNDQxMDApOworCQljcHVfdG9fbGUzMihEU1BfTUlESV9PVVRfRklGT19TSVpFKTsKKwljaGlwLT5jb21tX3BhZ2UtPnNhbXBsZV9yYXRlID0gY3B1X3RvX2xlMzIoNDQxMDApOwogCWNoaXAtPnNhbXBsZV9yYXRlID0gNDQxMDA7CiAKIAkvKiBTZXQgbGluZSBsZXZlbHMgc28gd2UgZG9uJ3QgYmxhc3QgYW55IGlucHV0cyBvbiBzdGFydHVwICovCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpb19kc3AuaCBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvX2RzcC5oCmluZGV4IGUzNTJmM2EuLmNiN2Q3NWEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvX2RzcC5oCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvX2RzcC5oCkBAIC01NzYsOCArNTc2LDEzIEBACiAjZGVmaW5lIEUzR19BU0lDX05PVF9MT0FERUQJCTB4ZmZmZgogI2RlZmluZSBFM0dfQk9YX1RZUEVfTUFTSwkJMHhmMAogCi0jZGVmaW5lIEVYVF8zR0JPWF9OQwkJCTB4MDEKLSNkZWZpbmUgRVhUXzNHQk9YX05PVF9TRVQJCTB4MDIKKy8qIEluZGlnbyBleHByZXNzIGNvbnRyb2wgcmVnaXN0ZXIgdmFsdWVzICovCisjZGVmaW5lIElORElHT19FWFBSRVNTXzMyMDAwCQkweDAyCisjZGVmaW5lIElORElHT19FWFBSRVNTXzQ0MTAwCQkweDAxCisjZGVmaW5lIElORElHT19FWFBSRVNTXzQ4MDAwCQkweDAwCisjZGVmaW5lIElORElHT19FWFBSRVNTX0RPVUJMRV9TUEVFRAkweDEwCisjZGVmaW5lIElORElHT19FWFBSRVNTX1FVQURfU1BFRUQJMHgwNAorI2RlZmluZSBJTkRJR09fRVhQUkVTU19DTE9DS19NQVNLCTB4MTcKIAogCiAvKgpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9naW5hMjBfZHNwLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2dpbmEyMF9kc3AuYwppbmRleCBkYjZjOTUyLi4zZjFlNzQ3IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2dpbmEyMF9kc3AuYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2dpbmEyMF9kc3AuYwpAQCAtMjA4LDEwICsyMDgsMTAgQEAKIAlERV9BQ1QoKCJzZXRfcHJvZmVzc2lvbmFsX3NwZGlmICVkXG4iLCBwcm9mKSk7CiAJaWYgKHByb2YpCiAJCWNoaXAtPmNvbW1fcGFnZS0+ZmxhZ3MgfD0KLQkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoRFNQX0ZMQUdfUFJPRkVTU0lPTkFMX1NQRElGKTsKKwkJCWNwdV90b19sZTMyKERTUF9GTEFHX1BST0ZFU1NJT05BTF9TUERJRik7CiAJZWxzZQogCQljaGlwLT5jb21tX3BhZ2UtPmZsYWdzICY9Ci0JCQl+X19jb25zdGFudF9jcHVfdG9fbGUzMihEU1BfRkxBR19QUk9GRVNTSU9OQUxfU1BESUYpOworCQkJfmNwdV90b19sZTMyKERTUF9GTEFHX1BST0ZFU1NJT05BTF9TUERJRik7CiAJY2hpcC0+cHJvZmVzc2lvbmFsX3NwZGlmID0gcHJvZjsKIAlyZXR1cm4gdXBkYXRlX2ZsYWdzKGNoaXApOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29fZHNwLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb19kc3AuYwppbmRleCBmMDVlMzlmLi4wYjJjZDljIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb19kc3AuYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb19kc3AuYwpAQCAtNjMsMTggKzYzLDYgQEAKIAlpZiAoKGVyciA9IGluaXRfbGluZV9sZXZlbHMoY2hpcCkpIDwgMCkKIAkJcmV0dXJuIGVycjsKIAotCS8qIERlZmF1bHQgcm91dGluZyBvZiB0aGUgdmlydHVhbCBjaGFubmVsczogYWxsIHZjaGFubmVscyBhcmUgcm91dGVkCi0JdG8gdGhlIHN0ZXJlbyBvdXRwdXQgKi8KLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMCwgMCwgMCk7Ci0Jc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDEsIDEsIDApOwotCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAwLCAyLCAwKTsKLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMSwgMywgMCk7Ci0Jc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDAsIDQsIDApOwotCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAxLCA1LCAwKTsKLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMCwgNiwgMCk7Ci0Jc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDEsIDcsIDApOwotCWVyciA9IHVwZGF0ZV92bWl4ZXJfbGV2ZWwoY2hpcCk7Ci0KIAlERV9JTklUKCgiaW5pdF9odyBkb25lXG4iKSk7CiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvX2V4cHJlc3NfZHNwLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb19leHByZXNzX2RzcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhYjYyNWUKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb19leHByZXNzX2RzcC5jCkBAIC0wLDAgKzEsMTE5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEVjaG8gRGlnaXRhbCBBdWRpbydzIGdlbmVyaWMgZHJpdmVyIGxpYnJhcnkuCitDb3B5cmlnaHQgRWNobyBEaWdpdGFsIEF1ZGlvIENvcnBvcmF0aW9uIChjKSAxOTk4IC0gMjAwNQorQWxsIHJpZ2h0cyByZXNlcnZlZAord3d3LmVjaG9hdWRpby5jb20KKworVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCit2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKK0xlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworIFRyYW5zbGF0aW9uIGZyb20gQysrIGFuZCBhZGFwdGF0aW9uIGZvciB1c2UgaW4gQUxTQS1Ecml2ZXIKKyB3ZXJlIG1hZGUgYnkgR2l1bGlhbm8gUG9jaGluaSA8cG9jaGluaUBzaGlueS5pdD4KKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludCBzZXRfc2FtcGxlX3JhdGUoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgdTMyIHJhdGUpCit7CisJdTMyIGNsb2NrLCBjb250cm9sX3JlZywgb2xkX2NvbnRyb2xfcmVnOworCisJaWYgKHdhaXRfaGFuZHNoYWtlKGNoaXApKQorCQlyZXR1cm4gLUVJTzsKKworCW9sZF9jb250cm9sX3JlZyA9IGxlMzJfdG9fY3B1KGNoaXAtPmNvbW1fcGFnZS0+Y29udHJvbF9yZWdpc3Rlcik7CisJY29udHJvbF9yZWcgPSBvbGRfY29udHJvbF9yZWcgJiB+SU5ESUdPX0VYUFJFU1NfQ0xPQ0tfTUFTSzsKKworCXN3aXRjaCAocmF0ZSkgeworCWNhc2UgMzIwMDA6CisJCWNsb2NrID0gSU5ESUdPX0VYUFJFU1NfMzIwMDA7CisJCWJyZWFrOworCWNhc2UgNDQxMDA6CisJCWNsb2NrID0gSU5ESUdPX0VYUFJFU1NfNDQxMDA7CisJCWJyZWFrOworCWNhc2UgNDgwMDA6CisJCWNsb2NrID0gSU5ESUdPX0VYUFJFU1NfNDgwMDA7CisJCWJyZWFrOworCWNhc2UgNjQwMDA6CisJCWNsb2NrID0gSU5ESUdPX0VYUFJFU1NfMzIwMDB8SU5ESUdPX0VYUFJFU1NfRE9VQkxFX1NQRUVEOworCQlicmVhazsKKwljYXNlIDg4MjAwOgorCQljbG9jayA9IElORElHT19FWFBSRVNTXzQ0MTAwfElORElHT19FWFBSRVNTX0RPVUJMRV9TUEVFRDsKKwkJYnJlYWs7CisJY2FzZSA5NjAwMDoKKwkJY2xvY2sgPSBJTkRJR09fRVhQUkVTU180ODAwMHxJTkRJR09fRVhQUkVTU19ET1VCTEVfU1BFRUQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWNvbnRyb2xfcmVnIHw9IGNsb2NrOworCWlmIChjb250cm9sX3JlZyAhPSBvbGRfY29udHJvbF9yZWcpIHsKKwkJY2hpcC0+Y29tbV9wYWdlLT5jb250cm9sX3JlZ2lzdGVyID0gY3B1X3RvX2xlMzIoY29udHJvbF9yZWcpOworCQljaGlwLT5zYW1wbGVfcmF0ZSA9IHJhdGU7CisJCWNsZWFyX2hhbmRzaGFrZShjaGlwKTsKKwkJcmV0dXJuIHNlbmRfdmVjdG9yKGNoaXAsIERTUF9WQ19VUERBVEVfQ0xPQ0tTKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKworCisvKiBUaGlzIGZ1bmN0aW9uIHJvdXRlcyB0aGUgc291bmQgZnJvbSBhIHZpcnR1YWwgY2hhbm5lbCB0byBhIHJlYWwgb3V0cHV0ICovCitzdGF0aWMgaW50IHNldF92bWl4ZXJfZ2FpbihzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1MTYgb3V0cHV0LCB1MTYgcGlwZSwKKwkJCSAgIGludCBnYWluKQoreworCWludCBpbmRleDsKKworCWlmIChzbmRfQlVHX09OKHBpcGUgPj0gbnVtX3BpcGVzX291dChjaGlwKSB8fAorCQkgICAgICAgb3V0cHV0ID49IG51bV9idXNzZXNfb3V0KGNoaXApKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAod2FpdF9oYW5kc2hha2UoY2hpcCkpCisJCXJldHVybiAtRUlPOworCisJY2hpcC0+dm1peGVyX2dhaW5bb3V0cHV0XVtwaXBlXSA9IGdhaW47CisJaW5kZXggPSBvdXRwdXQgKiBudW1fcGlwZXNfb3V0KGNoaXApICsgcGlwZTsKKwljaGlwLT5jb21tX3BhZ2UtPnZtaXhlcltpbmRleF0gPSBnYWluOworCisJREVfQUNUKCgic2V0X3ZtaXhlcl9nYWluOiBwaXBlICVkLCBvdXQgJWQgPSAlZFxuIiwgcGlwZSwgb3V0cHV0LCBnYWluKSk7CisJcmV0dXJuIDA7Cit9CisKKworCisvKiBUZWxsIHRoZSBEU1AgdG8gcmVhZCBhbmQgdXBkYXRlIHZpcnR1YWwgbWl4ZXIgbGV2ZWxzIGluIGNvbW0gcGFnZS4gKi8KK3N0YXRpYyBpbnQgdXBkYXRlX3ZtaXhlcl9sZXZlbChzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQoreworCWlmICh3YWl0X2hhbmRzaGFrZShjaGlwKSkKKwkJcmV0dXJuIC1FSU87CisJY2xlYXJfaGFuZHNoYWtlKGNoaXApOworCXJldHVybiBzZW5kX3ZlY3RvcihjaGlwLCBEU1BfVkNfU0VUX1ZNSVhFUl9HQUlOKTsKK30KKworCisKK3N0YXRpYyB1MzIgZGV0ZWN0X2lucHV0X2Nsb2Nrcyhjb25zdCBzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQoreworCXJldHVybiBFQ0hPX0NMT0NLX0JJVF9JTlRFUk5BTDsKK30KKworCisKKy8qIFRoZSBJbmRpZ29JTyBoYXMgbm8gQVNJQy4gSnVzdCBkbyBub3RoaW5nICovCitzdGF0aWMgaW50IGxvYWRfYXNpYyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQoreworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29kal9kc3AuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvZGpfZHNwLmMKaW5kZXggOTA3MzBhNS4uMDgzOTI5MSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29kal9kc3AuYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2RqX2RzcC5jCkBAIC02MywxOCArNjMsNiBAQAogCWlmICgoZXJyID0gaW5pdF9saW5lX2xldmVscyhjaGlwKSkgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JLyogRGVmYXVsdCByb3V0aW5nIG9mIHRoZSB2aXJ0dWFsIGNoYW5uZWxzOiB2Y2hhbm5lbHMgMC0zIGFuZAotCXZjaGFubmVscyA0LTcgYXJlIHJvdXRlZCB0byByZWFsIGNoYW5uZWxzIDAtNCAqLwotCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAwLCAwLCAwKTsKLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMSwgMSwgMCk7Ci0Jc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDIsIDIsIDApOwotCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAzLCAzLCAwKTsKLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMCwgNCwgMCk7Ci0Jc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDEsIDUsIDApOwotCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAyLCA2LCAwKTsKLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMywgNywgMCk7Ci0JZXJyID0gdXBkYXRlX3ZtaXhlcl9sZXZlbChjaGlwKTsKLQogCURFX0lOSVQoKCJpbml0X2h3IGRvbmVcbiIpKTsKIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29kanguYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvZGp4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ4MmVmNgotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvZGp4LmMKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisgKiAgQUxTQSBkcml2ZXIgZm9yIEVjaG9hdWRpbyBzb3VuZGNhcmRzLgorICogIENvcHlyaWdodCAoQykgMjAwOSBHaXVsaWFubyBQb2NoaW5pIDxwb2NoaW5pQHNoaW55Lml0PgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjZGVmaW5lIElORElHT19GQU1JTFkKKyNkZWZpbmUgRUNIT0NBUkRfSU5ESUdPX0RKWAorI2RlZmluZSBFQ0hPQ0FSRF9OQU1FICJJbmRpZ28gREp4IgorI2RlZmluZSBFQ0hPQ0FSRF9IQVNfU1VQRVJfSU5URVJMRUFWRQorI2RlZmluZSBFQ0hPQ0FSRF9IQVNfVk1JWEVSCisjZGVmaW5lIEVDSE9DQVJEX0hBU19TVEVSRU9fQklHX0VORElBTjMyCisKKy8qIFBpcGUgaW5kZXhlcyAqLworI2RlZmluZSBQWF9BTkFMT0dfT1VUCTAJLyogOCAqLworI2RlZmluZSBQWF9ESUdJVEFMX09VVAk4CS8qIDAgKi8KKyNkZWZpbmUgUFhfQU5BTE9HX0lOCTgJLyogMCAqLworI2RlZmluZSBQWF9ESUdJVEFMX0lOCTgJLyogMCAqLworI2RlZmluZSBQWF9OVU0JCTgKKworLyogQnVzIGluZGV4ZXMgKi8KKyNkZWZpbmUgQlhfQU5BTE9HX09VVAkwCS8qIDQgKi8KKyNkZWZpbmUgQlhfRElHSVRBTF9PVVQJNAkvKiAwICovCisjZGVmaW5lIEJYX0FOQUxPR19JTgk0CS8qIDAgKi8KKyNkZWZpbmUgQlhfRElHSVRBTF9JTgk0CS8qIDAgKi8KKyNkZWZpbmUgQlhfTlVNCQk0CisKKworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvaW5mby5oPgorI2luY2x1ZGUgPHNvdW5kL2NvbnRyb2wuaD4KKyNpbmNsdWRlIDxzb3VuZC90bHYuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CisjaW5jbHVkZSA8c291bmQvYXNvdW5kZWYuaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1ZGUgImVjaG9hdWRpby5oIgorCitNT0RVTEVfRklSTVdBUkUoImVhL2xvYWRlcl9kc3AuZnciKTsKK01PRFVMRV9GSVJNV0FSRSgiZWEvaW5kaWdvX2RqeF9kc3AuZnciKTsKKworI2RlZmluZSBGV18zNjFfTE9BREVSCQkwCisjZGVmaW5lIEZXX0lORElHT19ESlhfRFNQCTEKKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSBjYXJkX2Z3W10gPSB7CisJezAsICJsb2FkZXJfZHNwLmZ3In0sCisJezAsICJpbmRpZ29fZGp4X2RzcC5mdyJ9Cit9OworCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2VjaG9faWRzW10gPSB7CisJezB4MTA1NywgMHgzNDEwLCAweEVDQzAsIDB4MDBFMCwgMCwgMCwgMH0sCS8qIEluZGlnbyBESngqLworCXswLH0KK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9oYXJkd2FyZSBwY21faGFyZHdhcmVfc2tlbCA9IHsKKwkuaW5mbyA9IFNORFJWX1BDTV9JTkZPX01NQVAgfAorCQlTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCB8CisJCVNORFJWX1BDTV9JTkZPX0JMT0NLX1RSQU5TRkVSIHwKKwkJU05EUlZfUENNX0lORk9fTU1BUF9WQUxJRCB8CisJCVNORFJWX1BDTV9JTkZPX1BBVVNFIHwKKwkJU05EUlZfUENNX0lORk9fU1lOQ19TVEFSVCwKKwkuZm9ybWF0cyA9CVNORFJWX1BDTV9GTVRCSVRfVTggfAorCQkJU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfAorCQkJU05EUlZfUENNX0ZNVEJJVF9TMjRfM0xFIHwKKwkJCVNORFJWX1BDTV9GTVRCSVRfUzMyX0xFIHwKKwkJCVNORFJWX1BDTV9GTVRCSVRfUzMyX0JFLAorCS5yYXRlcyA9IAlTTkRSVl9QQ01fUkFURV8zMjAwMCB8CisJCQlTTkRSVl9QQ01fUkFURV80NDEwMCB8CisJCQlTTkRSVl9QQ01fUkFURV80ODAwMCB8CisJCQlTTkRSVl9QQ01fUkFURV84ODIwMCB8CisJCQlTTkRSVl9QQ01fUkFURV85NjAwMCwKKwkucmF0ZV9taW4gPSAzMjAwMCwKKwkucmF0ZV9tYXggPSA5NjAwMCwKKwkuY2hhbm5lbHNfbWluID0gMSwKKwkuY2hhbm5lbHNfbWF4ID0gNCwKKwkuYnVmZmVyX2J5dGVzX21heCA9IDI2MjE0NCwKKwkucGVyaW9kX2J5dGVzX21pbiA9IDMyLAorCS5wZXJpb2RfYnl0ZXNfbWF4ID0gMTMxMDcyLAorCS5wZXJpb2RzX21pbiA9IDIsCisJLnBlcmlvZHNfbWF4ID0gMjIwLAorfTsKKworI2luY2x1ZGUgImluZGlnb2RqeF9kc3AuYyIKKyNpbmNsdWRlICJpbmRpZ29fZXhwcmVzc19kc3AuYyIKKyNpbmNsdWRlICJlY2hvYXVkaW9fZHNwLmMiCisjaW5jbHVkZSAiZWNob2F1ZGlvLmMiCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2RqeF9kc3AuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvZGp4X2RzcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1OTFmYzIKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2RqeF9kc3AuYwpAQCAtMCwwICsxLDY4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEVjaG8gRGlnaXRhbCBBdWRpbydzIGdlbmVyaWMgZHJpdmVyIGxpYnJhcnkuCitDb3B5cmlnaHQgRWNobyBEaWdpdGFsIEF1ZGlvIENvcnBvcmF0aW9uIChjKSAxOTk4IC0gMjAwNQorQWxsIHJpZ2h0cyByZXNlcnZlZAord3d3LmVjaG9hdWRpby5jb20KKworVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCit2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKK0xlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworIFRyYW5zbGF0aW9uIGZyb20gQysrIGFuZCBhZGFwdGF0aW9uIGZvciB1c2UgaW4gQUxTQS1Ecml2ZXIKKyB3ZXJlIG1hZGUgYnkgR2l1bGlhbm8gUG9jaGluaSA8cG9jaGluaUBzaGlueS5pdD4KKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludCB1cGRhdGVfdm1peGVyX2xldmVsKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApOworc3RhdGljIGludCBzZXRfdm1peGVyX2dhaW4oc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgdTE2IG91dHB1dCwKKwkJCSAgIHUxNiBwaXBlLCBpbnQgZ2Fpbik7CisKKworc3RhdGljIGludCBpbml0X2h3KHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIHUxNiBkZXZpY2VfaWQsIHUxNiBzdWJkZXZpY2VfaWQpCit7CisJaW50IGVycjsKKworCURFX0lOSVQoKCJpbml0X2h3KCkgLSBJbmRpZ28gREp4XG4iKSk7CisJaWYgKHNuZF9CVUdfT04oKHN1YmRldmljZV9pZCAmIDB4ZmZmMCkgIT0gSU5ESUdPX0RKWCkpCisJCXJldHVybiAtRU5PREVWOworCisJZXJyID0gaW5pdF9kc3BfY29tbV9wYWdlKGNoaXApOworCWlmIChlcnIgPCAwKSB7CisJCURFX0lOSVQoKCJpbml0X2h3IC0gY291bGQgbm90IGluaXRpYWxpemUgRFNQIGNvbW0gcGFnZVxuIikpOworCQlyZXR1cm4gZXJyOworCX0KKworCWNoaXAtPmRldmljZV9pZCA9IGRldmljZV9pZDsKKwljaGlwLT5zdWJkZXZpY2VfaWQgPSBzdWJkZXZpY2VfaWQ7CisJY2hpcC0+YmFkX2JvYXJkID0gVFJVRTsKKwljaGlwLT5kc3BfY29kZV90b19sb2FkID0gJmNhcmRfZndbRldfSU5ESUdPX0RKWF9EU1BdOworCS8qIFNpbmNlIHRoaXMgY2FyZCBoYXMgbm8gQVNJQywgbWFyayBpdCBhcyBsb2FkZWQgc28gZXZlcnl0aGluZworCSAgIHdvcmtzIE9LICovCisJY2hpcC0+YXNpY19sb2FkZWQgPSBUUlVFOworCWNoaXAtPmlucHV0X2Nsb2NrX3R5cGVzID0gRUNIT19DTE9DS19CSVRfSU5URVJOQUw7CisKKwllcnIgPSBsb2FkX2Zpcm13YXJlKGNoaXApOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCWNoaXAtPmJhZF9ib2FyZCA9IEZBTFNFOworCisJZXJyID0gaW5pdF9saW5lX2xldmVscyhjaGlwKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCURFX0lOSVQoKCJpbml0X2h3IGRvbmVcbiIpKTsKKwlyZXR1cm4gZXJyOworfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29pb19kc3AuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvaW9fZHNwLmMKaW5kZXggYTdlMDllYy4uMDYwNGM4YSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29pb19kc3AuYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2lvX2RzcC5jCkBAIC02MywxOCArNjMsNiBAQAogCWlmICgoZXJyID0gaW5pdF9saW5lX2xldmVscyhjaGlwKSkgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JLyogRGVmYXVsdCByb3V0aW5nIG9mIHRoZSB2aXJ0dWFsIGNoYW5uZWxzOiBhbGwgdmNoYW5uZWxzIGFyZSByb3V0ZWQKLQl0byB0aGUgc3RlcmVvIG91dHB1dCAqLwotCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAwLCAwLCAwKTsKLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMSwgMSwgMCk7Ci0Jc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDAsIDIsIDApOwotCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAxLCAzLCAwKTsKLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMCwgNCwgMCk7Ci0Jc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDEsIDUsIDApOwotCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAwLCA2LCAwKTsKLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMSwgNywgMCk7Ci0JZXJyID0gdXBkYXRlX3ZtaXhlcl9sZXZlbChjaGlwKTsKLQogCURFX0lOSVQoKCJpbml0X2h3IGRvbmVcbiIpKTsKIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29pb3guYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvaW94LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWViZWUyNwotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvaW94LmMKQEAgLTAsMCArMSwxMDkgQEAKKy8qCisgKiAgQUxTQSBkcml2ZXIgZm9yIEVjaG9hdWRpbyBzb3VuZGNhcmRzLgorICogIENvcHlyaWdodCAoQykgMjAwOSBHaXVsaWFubyBQb2NoaW5pIDxwb2NoaW5pQHNoaW55Lml0PgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjZGVmaW5lIElORElHT19GQU1JTFkKKyNkZWZpbmUgRUNIT0NBUkRfSU5ESUdPX0lPWAorI2RlZmluZSBFQ0hPQ0FSRF9OQU1FICJJbmRpZ28gSU94IgorI2RlZmluZSBFQ0hPQ0FSRF9IQVNfTU9OSVRPUgorI2RlZmluZSBFQ0hPQ0FSRF9IQVNfU1VQRVJfSU5URVJMRUFWRQorI2RlZmluZSBFQ0hPQ0FSRF9IQVNfVk1JWEVSCisjZGVmaW5lIEVDSE9DQVJEX0hBU19TVEVSRU9fQklHX0VORElBTjMyCisKKy8qIFBpcGUgaW5kZXhlcyAqLworI2RlZmluZSBQWF9BTkFMT0dfT1VUCTAJLyogOCAqLworI2RlZmluZSBQWF9ESUdJVEFMX09VVAk4CS8qIDAgKi8KKyNkZWZpbmUgUFhfQU5BTE9HX0lOCTgJLyogMiAqLworI2RlZmluZSBQWF9ESUdJVEFMX0lOCTEwCS8qIDAgKi8KKyNkZWZpbmUgUFhfTlVNCQkxMAorCisvKiBCdXMgaW5kZXhlcyAqLworI2RlZmluZSBCWF9BTkFMT0dfT1VUCTAJLyogMiAqLworI2RlZmluZSBCWF9ESUdJVEFMX09VVAkyCS8qIDAgKi8KKyNkZWZpbmUgQlhfQU5BTE9HX0lOCTIJLyogMiAqLworI2RlZmluZSBCWF9ESUdJVEFMX0lOCTQJLyogMCAqLworI2RlZmluZSBCWF9OVU0JCTQKKworCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9pbmZvLmg+CisjaW5jbHVkZSA8c291bmQvY29udHJvbC5oPgorI2luY2x1ZGUgPHNvdW5kL3Rsdi5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRlIDxzb3VuZC9hc291bmRlZi5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSAiZWNob2F1ZGlvLmgiCisKK01PRFVMRV9GSVJNV0FSRSgiZWEvbG9hZGVyX2RzcC5mdyIpOworTU9EVUxFX0ZJUk1XQVJFKCJlYS9pbmRpZ29faW94X2RzcC5mdyIpOworCisjZGVmaW5lIEZXXzM2MV9MT0FERVIJCTAKKyNkZWZpbmUgRldfSU5ESUdPX0lPWF9EU1AJMQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpcm13YXJlIGNhcmRfZndbXSA9IHsKKwl7MCwgImxvYWRlcl9kc3AuZncifSwKKwl7MCwgImluZGlnb19pb3hfZHNwLmZ3In0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfZWNob19pZHNbXSA9IHsKKwl7MHgxMDU3LCAweDM0MTAsIDB4RUNDMCwgMHgwMEQwLCAwLCAwLCAwfSwJLyogSW5kaWdvIElPeCAqLworCXswLH0KK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9oYXJkd2FyZSBwY21faGFyZHdhcmVfc2tlbCA9IHsKKwkuaW5mbyA9IFNORFJWX1BDTV9JTkZPX01NQVAgfAorCQlTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCB8CisJCVNORFJWX1BDTV9JTkZPX0JMT0NLX1RSQU5TRkVSIHwKKwkJU05EUlZfUENNX0lORk9fTU1BUF9WQUxJRCB8CisJCVNORFJWX1BDTV9JTkZPX1BBVVNFIHwKKwkJU05EUlZfUENNX0lORk9fU1lOQ19TVEFSVCwKKwkuZm9ybWF0cyA9CVNORFJWX1BDTV9GTVRCSVRfVTggfAorCQkJU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfAorCQkJU05EUlZfUENNX0ZNVEJJVF9TMjRfM0xFIHwKKwkJCVNORFJWX1BDTV9GTVRCSVRfUzMyX0xFIHwKKwkJCVNORFJWX1BDTV9GTVRCSVRfUzMyX0JFLAorCS5yYXRlcyA9IAlTTkRSVl9QQ01fUkFURV8zMjAwMCB8CisJCQlTTkRSVl9QQ01fUkFURV80NDEwMCB8CisJCQlTTkRSVl9QQ01fUkFURV80ODAwMCB8CisJCQlTTkRSVl9QQ01fUkFURV84ODIwMCB8CisJCQlTTkRSVl9QQ01fUkFURV85NjAwMCwKKwkucmF0ZV9taW4gPSAzMjAwMCwKKwkucmF0ZV9tYXggPSA5NjAwMCwKKwkuY2hhbm5lbHNfbWluID0gMSwKKwkuY2hhbm5lbHNfbWF4ID0gOCwKKwkuYnVmZmVyX2J5dGVzX21heCA9IDI2MjE0NCwKKwkucGVyaW9kX2J5dGVzX21pbiA9IDMyLAorCS5wZXJpb2RfYnl0ZXNfbWF4ID0gMTMxMDcyLAorCS5wZXJpb2RzX21pbiA9IDIsCisJLnBlcmlvZHNfbWF4ID0gMjIwLAorfTsKKworI2luY2x1ZGUgImluZGlnb2lveF9kc3AuYyIKKyNpbmNsdWRlICJpbmRpZ29fZXhwcmVzc19kc3AuYyIKKyNpbmNsdWRlICJlY2hvYXVkaW9fZHNwLmMiCisjaW5jbHVkZSAiZWNob2F1ZGlvLmMiCisKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvaW94X2RzcC5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29pb3hfZHNwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM1NzUyMQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvaW94X2RzcC5jCkBAIC0wLDAgKzEsNjggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgRWNobyBEaWdpdGFsIEF1ZGlvJ3MgZ2VuZXJpYyBkcml2ZXIgbGlicmFyeS4KK0NvcHlyaWdodCBFY2hvIERpZ2l0YWwgQXVkaW8gQ29ycG9yYXRpb24gKGMpIDE5OTggLSAyMDA1CitBbGwgcmlnaHRzIHJlc2VydmVkCit3d3cuZWNob2F1ZGlvLmNvbQorCitUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCittb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKK3ZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgVHJhbnNsYXRpb24gZnJvbSBDKysgYW5kIGFkYXB0YXRpb24gZm9yIHVzZSBpbiBBTFNBLURyaXZlcgorIHdlcmUgbWFkZSBieSBHaXVsaWFubyBQb2NoaW5pIDxwb2NoaW5pQHNoaW55Lml0PgorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IHVwZGF0ZV92bWl4ZXJfbGV2ZWwoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCk7CitzdGF0aWMgaW50IHNldF92bWl4ZXJfZ2FpbihzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1MTYgb3V0cHV0LAorCQkJICAgdTE2IHBpcGUsIGludCBnYWluKTsKKworCitzdGF0aWMgaW50IGluaXRfaHcoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgdTE2IGRldmljZV9pZCwgdTE2IHN1YmRldmljZV9pZCkKK3sKKwlpbnQgZXJyOworCisJREVfSU5JVCgoImluaXRfaHcoKSAtIEluZGlnbyBJT3hcbiIpKTsKKwlpZiAoc25kX0JVR19PTigoc3ViZGV2aWNlX2lkICYgMHhmZmYwKSAhPSBJTkRJR09fSU9YKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwllcnIgPSBpbml0X2RzcF9jb21tX3BhZ2UoY2hpcCk7CisJaWYgKGVyciA8IDApIHsKKwkJREVfSU5JVCgoImluaXRfaHcgLSBjb3VsZCBub3QgaW5pdGlhbGl6ZSBEU1AgY29tbSBwYWdlXG4iKSk7CisJCXJldHVybiBlcnI7CisJfQorCisJY2hpcC0+ZGV2aWNlX2lkID0gZGV2aWNlX2lkOworCWNoaXAtPnN1YmRldmljZV9pZCA9IHN1YmRldmljZV9pZDsKKwljaGlwLT5iYWRfYm9hcmQgPSBUUlVFOworCWNoaXAtPmRzcF9jb2RlX3RvX2xvYWQgPSAmY2FyZF9md1tGV19JTkRJR09fSU9YX0RTUF07CisJLyogU2luY2UgdGhpcyBjYXJkIGhhcyBubyBBU0lDLCBtYXJrIGl0IGFzIGxvYWRlZCBzbyBldmVyeXRoaW5nCisJICAgd29ya3MgT0sgKi8KKwljaGlwLT5hc2ljX2xvYWRlZCA9IFRSVUU7CisJY2hpcC0+aW5wdXRfY2xvY2tfdHlwZXMgPSBFQ0hPX0NMT0NLX0JJVF9JTlRFUk5BTDsKKworCWVyciA9IGxvYWRfZmlybXdhcmUoY2hpcCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJY2hpcC0+YmFkX2JvYXJkID0gRkFMU0U7CisKKwllcnIgPSBpbml0X2xpbmVfbGV2ZWxzKGNoaXApOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJREVfSU5JVCgoImluaXRfaHcgZG9uZVxuIikpOworCXJldHVybiBlcnI7Cit9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2xheWxhMjBfZHNwLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2xheWxhMjBfZHNwLmMKaW5kZXggZWRlNzVjNi4uODM3NTBlOSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VjaG9hdWRpby9sYXlsYTIwX2RzcC5jCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vbGF5bGEyMF9kc3AuYwpAQCAtMjg0LDEwICsyODQsMTAgQEAKIAlERV9BQ1QoKCJzZXRfcHJvZmVzc2lvbmFsX3NwZGlmICVkXG4iLCBwcm9mKSk7CiAJaWYgKHByb2YpCiAJCWNoaXAtPmNvbW1fcGFnZS0+ZmxhZ3MgfD0KLQkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoRFNQX0ZMQUdfUFJPRkVTU0lPTkFMX1NQRElGKTsKKwkJCWNwdV90b19sZTMyKERTUF9GTEFHX1BST0ZFU1NJT05BTF9TUERJRik7CiAJZWxzZQogCQljaGlwLT5jb21tX3BhZ2UtPmZsYWdzICY9Ci0JCQl+X19jb25zdGFudF9jcHVfdG9fbGUzMihEU1BfRkxBR19QUk9GRVNTSU9OQUxfU1BESUYpOworCQkJfmNwdV90b19sZTMyKERTUF9GTEFHX1BST0ZFU1NJT05BTF9TUERJRik7CiAJY2hpcC0+cHJvZmVzc2lvbmFsX3NwZGlmID0gcHJvZjsKIAlyZXR1cm4gdXBkYXRlX2ZsYWdzKGNoaXApOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9taWFfZHNwLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL21pYV9kc3AuYwppbmRleCAyMjczODY2Li41NTE0MDUxIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL21pYV9kc3AuYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL21pYV9kc3AuYwpAQCAtNjksMTggKzY5LDYgQEAKIAlpZiAoKGVyciA9IGluaXRfbGluZV9sZXZlbHMoY2hpcCkpKQogCQlyZXR1cm4gZXJyOwogCi0JLyogRGVmYXVsdCByb3V0aW5nIG9mIHRoZSB2aXJ0dWFsIGNoYW5uZWxzOiB2Y2hhbm5lbHMgMC0zIGdvIHRvIGFuYWxvZwotCW91dHB1dHMgYW5kIHZjaGFubmVscyA0LTcgZ28gdG8gUy9QRElGIG91dHB1dHMgKi8KLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMCwgMCwgMCk7Ci0Jc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDEsIDEsIDApOwotCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAwLCAyLCAwKTsKLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMSwgMywgMCk7Ci0Jc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDIsIDQsIDApOwotCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAzLCA1LCAwKTsKLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMiwgNiwgMCk7Ci0Jc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDMsIDcsIDApOwotCWVyciA9IHVwZGF0ZV92bWl4ZXJfbGV2ZWwoY2hpcCk7Ci0KIAlERV9JTklUKCgiaW5pdF9odyBkb25lXG4iKSk7CiAJcmV0dXJuIGVycjsKIH0KQEAgLTIyMiwxMCArMjEwLDEwIEBACiAJREVfQUNUKCgic2V0X3Byb2Zlc3Npb25hbF9zcGRpZiAlZFxuIiwgcHJvZikpOwogCWlmIChwcm9mKQogCQljaGlwLT5jb21tX3BhZ2UtPmZsYWdzIHw9Ci0JCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKERTUF9GTEFHX1BST0ZFU1NJT05BTF9TUERJRik7CisJCQljcHVfdG9fbGUzMihEU1BfRkxBR19QUk9GRVNTSU9OQUxfU1BESUYpOwogCWVsc2UKIAkJY2hpcC0+Y29tbV9wYWdlLT5mbGFncyAmPQotCQkJfl9fY29uc3RhbnRfY3B1X3RvX2xlMzIoRFNQX0ZMQUdfUFJPRkVTU0lPTkFMX1NQRElGKTsKKwkJCX5jcHVfdG9fbGUzMihEU1BfRkxBR19QUk9GRVNTSU9OQUxfU1BESUYpOwogCWNoaXAtPnByb2Zlc3Npb25hbF9zcGRpZiA9IHByb2Y7CiAJcmV0dXJuIHVwZGF0ZV9mbGFncyhjaGlwKTsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vbWlkaS5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9taWRpLmMKaW5kZXggNzdiZjJhOC4uYTk1M2QxNCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VjaG9hdWRpby9taWRpLmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9taWRpLmMKQEAgLTQ0LDEwICs0NCwxMCBAQAogCWlmIChlbmFibGUpIHsKIAkJY2hpcC0+bXRjX3N0YXRlID0gTUlESV9JTl9TVEFURV9OT1JNQUw7CiAJCWNoaXAtPmNvbW1fcGFnZS0+ZmxhZ3MgfD0KLQkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoRFNQX0ZMQUdfTUlESV9JTlBVVCk7CisJCQljcHVfdG9fbGUzMihEU1BfRkxBR19NSURJX0lOUFVUKTsKIAl9IGVsc2UKIAkJY2hpcC0+Y29tbV9wYWdlLT5mbGFncyAmPQotCQkJfl9fY29uc3RhbnRfY3B1X3RvX2xlMzIoRFNQX0ZMQUdfTUlESV9JTlBVVCk7CisJCQl+Y3B1X3RvX2xlMzIoRFNQX0ZMQUdfTUlESV9JTlBVVCk7CiAKIAljbGVhcl9oYW5kc2hha2UoY2hpcCk7CiAJcmV0dXJuIHNlbmRfdmVjdG9yKGNoaXAsIERTUF9WQ19VUERBVEVfRkxBR1MpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMS5jIGIvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMS5jCmluZGV4IDgzNTRjMWEuLmM3ZjNiOTkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazEuYworKysgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxLmMKQEAgLTExNCw5ICsxMTQsOSBAQAogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAlpZiAobWF4X2J1ZmZlcl9zaXplW2Rldl0gPCAzMikKIAkJbWF4X2J1ZmZlcl9zaXplW2Rldl0gPSAzMjsKIAllbHNlIGlmIChtYXhfYnVmZmVyX3NpemVbZGV2XSA+IDEwMjQpCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxX2NhbGxiYWNrLmMgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxX2NhbGxiYWNrLmMKaW5kZXggMGU2NDlkYy4uN2VmOTQ5ZDkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazFfY2FsbGJhY2suYworKysgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxX2NhbGxiYWNrLmMKQEAgLTEwMyw3ICsxMDMsMTAgQEAKIAkJCWludCBjaDsKIAkJCXZwID0gJmVtdS0+dm9pY2VzW2Jlc3RbaV0udm9pY2VdOwogCQkJaWYgKChjaCA9IHZwLT5jaCkgPCAwKSB7Ci0JCQkJLy9wcmludGsoInN5bnRoX2dldF92b2ljZTogY2ggPCAwICglZCkgPz8iLCBpKTsKKwkJCQkvKgorCQkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCQkgICAgICAgInN5bnRoX2dldF92b2ljZTogY2ggPCAwICglZCkgPz8iLCBpKTsKKwkJCQkqLwogCQkJCWNvbnRpbnVlOwogCQkJfQogCQkJdnAtPmVtdS0+bnVtX3ZvaWNlcy0tOwpAQCAtMzM1LDcgKzMzOCw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCWVtZW0tPm1hcF9sb2NrZWQrKzsKIAlpZiAoc25kX2VtdTEwazFfbWVtYmxrX21hcChodywgZW1lbSkgPCAwKSB7Ci0JCS8vIHByaW50aygiZW11OiBjYW5ub3QgbWFwIVxuIik7CisJCS8qIHByaW50ayhLRVJOX0VSUiAiZW11OiBjYW5ub3QgbWFwIVxuIik7ICovCiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAltYXBwZWRfb2Zmc2V0ID0gc25kX2VtdTEwazFfbWVtYmxrX29mZnNldChlbWVtKSA+PiAxOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMV9tYWluLmMgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxX21haW4uYwppbmRleCAxMDFhMWMxLi5mMThiZDYyIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxX21haW4uYworKysgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxX21haW4uYwpAQCAtNzExLDggKzcxMSw3IEBACiBzdGF0aWMgaW50IGVtdTEwMTBfZmlybXdhcmVfdGhyZWFkKHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IHNuZF9lbXUxMGsxICplbXUgPSBkYXRhOwotCWludCB0bXAsIHRtcDI7Ci0JaW50IHJlZzsKKwl1MzIgdG1wLCB0bXAyLCByZWc7CiAJaW50IGVycjsKIAogCWZvciAoOzspIHsKQEAgLTc1OCw3ICs3NTcsOCBAQAogCQkJc25kX3ByaW50ayhLRVJOX0lORk8gImVtdTEwMTA6IEF1ZGlvIERvY2sgRmlybXdhcmUgbG9hZGVkXG4iKTsKIAkJCXNuZF9lbXUxMDEwX2ZwZ2FfcmVhZChlbXUsIEVNVV9ET0NLX01BSk9SX1JFViwgJnRtcCk7CiAJCQlzbmRfZW11MTAxMF9mcGdhX3JlYWQoZW11LCBFTVVfRE9DS19NSU5PUl9SRVYsICZ0bXAyKTsKLQkJCXNuZF9wcmludGsoIkF1ZGlvIERvY2sgdmVyOiVkLiVkXG4iLCB0bXAsIHRtcDIpOworCQkJc25kX3ByaW50ayhLRVJOX0lORk8gIkF1ZGlvIERvY2sgdmVyOiAldS4ldVxuIiwKKwkJCQkgICB0bXAsIHRtcDIpOwogCQkJLyogU3luYyBjbG9ja2luZyBiZXR3ZWVuIDEwMTAgYW5kIERvY2sgKi8KIAkJCS8qIEFsbG93IERMTCB0byBzZXR0bGUgKi8KIAkJCW1zbGVlcCgxMCk7CkBAIC04MDQsOCArODA0LDcgQEAKIHN0YXRpYyBpbnQgc25kX2VtdTEwazFfZW11MTAxMF9pbml0KHN0cnVjdCBzbmRfZW11MTBrMSAqZW11KQogewogCXVuc2lnbmVkIGludCBpOwotCWludCB0bXAsIHRtcDI7Ci0JaW50IHJlZzsKKwl1MzIgdG1wLCB0bXAyLCByZWc7CiAJaW50IGVycjsKIAljb25zdCBjaGFyICpmaWxlbmFtZSA9IE5VTEw7CiAKQEAgLTg4Nyw3ICs4ODYsNyBAQAogCXNuZF9wcmludGsoS0VSTl9JTkZPICJlbXUxMDEwOiBIYW5hIEZpcm13YXJlIGxvYWRlZFxuIik7CiAJc25kX2VtdTEwMTBfZnBnYV9yZWFkKGVtdSwgRU1VX0hBTkFfTUFKT1JfUkVWLCAmdG1wKTsKIAlzbmRfZW11MTAxMF9mcGdhX3JlYWQoZW11LCBFTVVfSEFOQV9NSU5PUl9SRVYsICZ0bXAyKTsKLQlzbmRfcHJpbnRrKCJlbXUxMDEwOiBIYW5hIHZlcnNpb246ICVkLiVkXG4iLCB0bXAsIHRtcDIpOworCXNuZF9wcmludGsoS0VSTl9JTkZPICJlbXUxMDEwOiBIYW5hIHZlcnNpb246ICV1LiV1XG4iLCB0bXAsIHRtcDIpOwogCS8qIEVuYWJsZSA0OFZvbHQgcG93ZXIgdG8gQXVkaW8gRG9jayAqLwogCXNuZF9lbXUxMDEwX2ZwZ2Ffd3JpdGUoZW11LCBFTVVfSEFOQV9ET0NLX1BXUiwgRU1VX0hBTkFfRE9DS19QV1JfT04pOwogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxeC5jIGIvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMXguYwppbmRleCA1ZmY0ZGJiLi4zMTU0MmFkIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxeC5jCisrKyBiL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazF4LmMKQEAgLTE1NDQsOSArMTU0NCw5IEBACiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJaWYgKChlcnIgPSBzbmRfZW11MTBrMXhfY3JlYXRlKGNhcmQsIHBjaSwgJmNoaXApKSA8IDApIHsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lbXUxMGsxL2VtdWZ4LmMgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXVmeC5jCmluZGV4IDdkYmEwOGYuLjE5MWUxY2QgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lbXUxMGsxL2VtdWZ4LmMKKysrIGIvc291bmQvcGNpL2VtdTEwazEvZW11ZnguYwpAQCAtMTUxOSw3ICsxNTE5LDcgQEAKIAkvKiBBX1BVVF9TVEVSRU9fT1VUUFVUKEFfRVhUT1VUX0ZST05UX0wsIEFfRVhUT1VUX0ZST05UX1IsIHBsYXliYWNrICsgU05EX0VNVTEwSzFfUExBWUJBQ0tfQ0hBTk5FTFMpOyAqLwogCWlmIChlbXUtPmNhcmRfY2FwYWJpbGl0aWVzLT5lbXVfbW9kZWwpIHsKIAkJLyogRU1VMTAxMCBPdXRwdXRzIGZyb20gUENNIEZyb250LCBSZWFyLCBDZW50ZXIsIExGRSwgU2lkZSAqLwotCQlzbmRfcHJpbnRrKCJFTVUgb3V0cHV0cyBvblxuIik7CisJCXNuZF9wcmludGsoS0VSTl9JTkZPICJFTVUgb3V0cHV0cyBvblxuIik7CiAJCWZvciAoeiA9IDA7IHogPCA4OyB6KyspIHsKIAkJCWlmIChlbXUtPmNhcmRfY2FwYWJpbGl0aWVzLT5jYTAxMDhfY2hpcCkgewogCQkJCUFfT1AoaWNvZGUsICZwdHIsIGlBQ0MzLCBBM19FTVUzMk9VVCh6KSwgQV9HUFIocGxheWJhY2sgKyBTTkRfRU1VMTBLMV9QTEFZQkFDS19DSEFOTkVMUyArIHopLCBBX0NfMDAwMDAwMDAsIEFfQ18wMDAwMDAwMCk7CkBAIC0xNTY3LDcgKzE1NjcsNyBAQAogCiAJaWYgKGVtdS0+Y2FyZF9jYXBhYmlsaXRpZXMtPmVtdV9tb2RlbCkgewogCQlpZiAoZW11LT5jYXJkX2NhcGFiaWxpdGllcy0+Y2EwMTA4X2NoaXApIHsKLQkJCXNuZF9wcmludGsoIkVNVTIgaW5wdXRzIG9uXG4iKTsKKwkJCXNuZF9wcmludGsoS0VSTl9JTkZPICJFTVUyIGlucHV0cyBvblxuIik7CiAJCQlmb3IgKHogPSAwOyB6IDwgMHgxMDsgeisrKSB7CiAJCQkJc25kX2VtdTEwazFfYXVkaWd5X2RzcF9jb252ZXJ0XzMyX3RvXzJ4MTYoIGljb2RlLCAmcHRyLCB0bXAsIAogCQkJCQkJCQkJYml0X3NoaWZ0ZXIxNiwKQEAgLTE1NzUsMTAgKzE1NzUsMTMgQEAKIAkJCQkJCQkJCUFfRlhCVVMyKHoqMikgKTsKIAkJCX0KIAkJfSBlbHNlIHsKLQkJCXNuZF9wcmludGsoIkVNVSBpbnB1dHMgb25cbiIpOworCQkJc25kX3ByaW50ayhLRVJOX0lORk8gIkVNVSBpbnB1dHMgb25cbiIpOwogCQkJLyogQ2FwdHVyZSAxNiAob3JpZ2luYWxseSA4KSBjaGFubmVscyBvZiBTMzJfTEUgc291bmQgKi8KIAotCQkJLyogcHJpbnRrKCJlbXVmeC5jOiBncHI9MHgleCwgdG1wPTB4JXhcbiIsZ3ByLCB0bXApOyAqLworCQkJLyoKKwkJCXByaW50ayhLRVJOX0RFQlVHICJlbXVmeC5jOiBncHI9MHgleCwgdG1wPTB4JXhcbiIsCisJCQkgICAgICAgZ3ByLCB0bXApOworCQkJKi8KIAkJCS8qIEZvciB0aGUgRU1VMTAxMDogSG93IHRvIGdldCAzMmJpdCB2YWx1ZXMgZnJvbSB0aGUgRFNQLiBIaWdoIDE2Yml0cyBpbnRvIEwsIGxvdyAxNmJpdHMgaW50byBSLiAqLwogCQkJLyogQV9QMTZWSU4oMCkgaXMgZGVsYXllZCBieSBvbmUgc2FtcGxlLAogCQkJICogc28gYWxsIG90aGVyIEFfUDE2VklOIGNoYW5uZWxzIHdpbGwgbmVlZCB0byBhbHNvIGJlIGRlbGF5ZWQKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lbXUxMGsxL2VtdXBjbS5jIGIvc291bmQvcGNpL2VtdTEwazEvZW11cGNtLmMKaW5kZXggY2Y5Mjc2ZC4uNzhmNjJmZCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VtdTEwazEvZW11cGNtLmMKKysrIGIvc291bmQvcGNpL2VtdTEwazEvZW11cGNtLmMKQEAgLTQ0LDcgKzQ0LDcgQEAKIAlpZiAoZXBjbS0+c3Vic3RyZWFtID09IE5VTEwpCiAJCXJldHVybjsKICNpZiAwCi0JcHJpbnRrKCJJUlE6IHBvc2l0aW9uID0gMHgleCwgcGVyaW9kID0gMHgleCwgc2l6ZSA9IDB4JXhcbiIsCisJcHJpbnRrKEtFUk5fREVCVUcgIklSUTogcG9zaXRpb24gPSAweCV4LCBwZXJpb2QgPSAweCV4LCBzaXplID0gMHgleFxuIiwKIAkJCWVwY20tPnN1YnN0cmVhbS0+cnVudGltZS0+aHctPnBvaW50ZXIoZW11LCBlcGNtLT5zdWJzdHJlYW0pLAogCQkJc25kX3BjbV9saWJfcGVyaW9kX2J5dGVzKGVwY20tPnN1YnN0cmVhbSksCiAJCQlzbmRfcGNtX2xpYl9idWZmZXJfYnl0ZXMoZXBjbS0+c3Vic3RyZWFtKSk7CkBAIC0xNDYsNyArMTQ2LDExIEBACiAJCQkJCSAgICAgIDEsCiAJCQkJCSAgICAgICZlcGNtLT5leHRyYSk7CiAJCWlmIChlcnIgPCAwKSB7Ci0JCQkvKiBwcmludGsoInBjbV9jaGFubmVsX2FsbG9jOiBmYWlsZWQgZXh0cmE6IHZvaWNlcz0lZCwgZnJhbWU9JWRcbiIsIHZvaWNlcywgZnJhbWUpOyAqLworCQkJLyoKKwkJCXByaW50ayhLRVJOX0RFQlVHICJwY21fY2hhbm5lbF9hbGxvYzogIgorCQkJICAgICAgICJmYWlsZWQgZXh0cmE6IHZvaWNlcz0lZCwgZnJhbWU9JWRcbiIsCisJCQkgICAgICAgdm9pY2VzLCBmcmFtZSk7CisJCQkqLwogCQkJZm9yIChpID0gMDsgaSA8IHZvaWNlczsgaSsrKSB7CiAJCQkJc25kX2VtdTEwazFfdm9pY2VfZnJlZShlcGNtLT5lbXUsIGVwY20tPnZvaWNlc1tpXSk7CiAJCQkJZXBjbS0+dm9pY2VzW2ldID0gTlVMTDsKQEAgLTczNyw3ICs3NDEsMTAgQEAKIAlzdHJ1Y3Qgc25kX2VtdTEwazFfcGNtX21peGVyICptaXg7CiAJaW50IHJlc3VsdCA9IDA7CiAKLQkvKiBwcmludGsoInRyaWdnZXIgLSBlbXUxMGsxID0gMHgleCwgY21kID0gJWksIHBvaW50ZXIgPSAlaVxuIiwgKGludCllbXUsIGNtZCwgc3Vic3RyZWFtLT5vcHMtPnBvaW50ZXIoc3Vic3RyZWFtKSk7ICovCisJLyoKKwlwcmludGsoS0VSTl9ERUJVRyAidHJpZ2dlciAtIGVtdTEwazEgPSAweCV4LCBjbWQgPSAlaSwgcG9pbnRlciA9ICVpXG4iLAorCSAgICAgICAoaW50KWVtdSwgY21kLCBzdWJzdHJlYW0tPm9wcy0+cG9pbnRlcihzdWJzdHJlYW0pKQorCSovCiAJc3Bpbl9sb2NrKCZlbXUtPnJlZ19sb2NrKTsKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6CkBAIC03ODYsNyArNzkzLDEwIEBACiAJCS8qIGhtbSB0aGlzIHNob3VsZCBjYXVzZSBmdWxsIGFuZCBoYWxmIGZ1bGwgaW50ZXJydXB0IHRvIGJlIHJhaXNlZD8gKi8KIAkJb3V0bChlcGNtLT5jYXB0dXJlX2lwciwgZW11LT5wb3J0ICsgSVBSKTsKIAkJc25kX2VtdTEwazFfaW50cl9lbmFibGUoZW11LCBlcGNtLT5jYXB0dXJlX2ludGUpOwotCQkvKiBwcmludGsoImFkY2NyID0gMHgleCwgYWRjYnMgPSAweCV4XG4iLCBlcGNtLT5hZGNjciwgZXBjbS0+YWRjYnMpOyAqLworCQkvKgorCQlwcmludGsoS0VSTl9ERUJVRyAiYWRjY3IgPSAweCV4LCBhZGNicyA9IDB4JXhcbiIsCisJCSAgICAgICBlcGNtLT5hZGNjciwgZXBjbS0+YWRjYnMpOworCQkqLwogCQlzd2l0Y2ggKGVwY20tPnR5cGUpIHsKIAkJY2FzZSBDQVBUVVJFX0FDOTdBREM6CiAJCQlzbmRfZW11MTBrMV9wdHJfd3JpdGUoZW11LCBBRENDUiwgMCwgZXBjbS0+Y2FwdHVyZV9jcl92YWwpOwpAQCAtODU3LDcgKzg2NywxMSBAQAogCQkJcHRyIC09IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplOwogCX0KICNlbmRpZgotCS8qIHByaW50aygicHRyID0gMHgleCwgYnVmZmVyX3NpemUgPSAweCV4LCBwZXJpb2Rfc2l6ZSA9IDB4JXhcbiIsIHB0ciwgcnVudGltZS0+YnVmZmVyX3NpemUsIHJ1bnRpbWUtPnBlcmlvZF9zaXplKTsgKi8KKwkvKgorCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICJwdHIgPSAweCV4LCBidWZmZXJfc2l6ZSA9IDB4JXgsIHBlcmlvZF9zaXplID0gMHgleFxuIiwKKwkgICAgICAgcHRyLCBydW50aW1lLT5idWZmZXJfc2l6ZSwgcnVudGltZS0+cGVyaW9kX3NpemUpOworCSovCiAJcmV0dXJuIHB0cjsKIH0KIApAQCAtMTU0Niw3ICsxNTYwLDExIEBACiAJCQkJCQkgICB1bnNpZ25lZCBpbnQgY291bnQsCiAJCQkJCQkgICB1bnNpZ25lZCBpbnQgdHJhbV9zaGlmdCkKIHsKLQkvKiBwcmludGsoInRyYW1fcG9rZTE6IGRzdF9sZWZ0ID0gMHglcCwgZHN0X3JpZ2h0ID0gMHglcCwgc3JjID0gMHglcCwgY291bnQgPSAweCV4XG4iLCBkc3RfbGVmdCwgZHN0X3JpZ2h0LCBzcmMsIGNvdW50KTsgKi8KKwkvKgorCXByaW50ayhLRVJOX0RFQlVHICJ0cmFtX3Bva2UxOiBkc3RfbGVmdCA9IDB4JXAsIGRzdF9yaWdodCA9IDB4JXAsICIKKwkgICAgICAgInNyYyA9IDB4JXAsIGNvdW50ID0gMHgleFxuIiwKKwkgICAgICAgZHN0X2xlZnQsIGRzdF9yaWdodCwgc3JjLCBjb3VudCk7CisJKi8KIAlpZiAoKHRyYW1fc2hpZnQgJiAxKSA9PSAwKSB7CiAJCXdoaWxlIChjb3VudC0tKSB7CiAJCQkqZHN0X2xlZnQtLSA9ICpzcmMrKzsKQEAgLTE2MjMsNyArMTY0MSwxMiBAQAogCXN0cnVjdCBzbmRfZW11MTBrMV9meDgwMTBfcGNtICpwY20gPSAmZW11LT5meDgwMTAucGNtW3N1YnN0cmVhbS0+bnVtYmVyXTsKIAl1bnNpZ25lZCBpbnQgaTsKIAkKLQkvKiBwcmludGsoInByZXBhcmU6IGV0cmFtX3BhZ2VzID0gMHglcCwgZG1hX2FyZWEgPSAweCV4LCBidWZmZXJfc2l6ZSA9IDB4JXggKDB4JXgpXG4iLCBlbXUtPmZ4ODAxMC5ldHJhbV9wYWdlcywgcnVudGltZS0+ZG1hX2FyZWEsIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplLCBydW50aW1lLT5idWZmZXJfc2l6ZSA8PCAyKTsgKi8KKwkvKgorCXByaW50ayhLRVJOX0RFQlVHICJwcmVwYXJlOiBldHJhbV9wYWdlcyA9IDB4JXAsIGRtYV9hcmVhID0gMHgleCwgIgorCSAgICAgICAiYnVmZmVyX3NpemUgPSAweCV4ICgweCV4KVxuIiwKKwkgICAgICAgZW11LT5meDgwMTAuZXRyYW1fcGFnZXMsIHJ1bnRpbWUtPmRtYV9hcmVhLAorCSAgICAgICBydW50aW1lLT5idWZmZXJfc2l6ZSwgcnVudGltZS0+YnVmZmVyX3NpemUgPDwgMik7CisJKi8KIAltZW1zZXQoJnBjbS0+cGNtX3JlYywgMCwgc2l6ZW9mKHBjbS0+cGNtX3JlYykpOwogCXBjbS0+cGNtX3JlYy5od19idWZmZXJfc2l6ZSA9IHBjbS0+YnVmZmVyX3NpemUgKiAyOyAvKiBieXRlIHNpemUgKi8KIAlwY20tPnBjbV9yZWMuc3dfYnVmZmVyX3NpemUgPSBzbmRfcGNtX2xpYl9idWZmZXJfYnl0ZXMoc3Vic3RyZWFtKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lbXUxMGsxL2lvLmMgYi9zb3VuZC9wY2kvZW11MTBrMS9pby5jCmluZGV4IGI1YTgwMmIuLjRiZmMzMWQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lbXUxMGsxL2lvLmMKKysrIGIvc291bmQvcGNpL2VtdTEwazEvaW8uYwpAQCAtMjI2LDcgKzIyNiw5IEBACiAJCQkJYnJlYWs7CiAKIAkJCWlmICh0aW1lb3V0ID4gMTAwMCkgewotICAgICAgICAgICAgICAgIAkJc25kX3ByaW50aygiZW11MTBrMTpJMkM6dGltZW91dCBzdGF0dXM9MHgleFxuIiwgc3RhdHVzKTsKKyAgICAgICAgICAgICAgICAJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HCisJCQkJCSAgICJlbXUxMGsxOkkyQzp0aW1lb3V0IHN0YXR1cz0weCV4XG4iLAorCQkJCQkgICBzdGF0dXMpOwogCQkJCWJyZWFrOwogCQkJfQogCQl9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZW11MTBrMS9wMTZ2LmMgYi9zb3VuZC9wY2kvZW11MTBrMS9wMTZ2LmMKaW5kZXggNzQ5YTIxYi4uZTYxN2FjYSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VtdTEwazEvcDE2di5jCisrKyBiL3NvdW5kL3BjaS9lbXUxMGsxL3AxNnYuYwpAQCAtMTY4LDcgKzE2OCw3IEBACiAJc3RydWN0IHNuZF9lbXUxMGsxX3BjbSAqZXBjbSA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKICAgCiAJaWYgKGVwY20pIHsKLSAgICAgICAgCS8vc25kX3ByaW50aygiZXBjbSBmcmVlOiAlcFxuIiwgZXBjbSk7CisgICAgICAgIAkvKiBzbmRfcHJpbnRrKEtFUk5fREVCVUcgImVwY20gZnJlZTogJXBcbiIsIGVwY20pOyAqLwogCQlrZnJlZShlcGNtKTsKIAl9CiB9CkBAIC0xODMsMTQgKzE4MywxNiBAQAogCWludCBlcnI7CiAKIAllcGNtID0ga3phbGxvYyhzaXplb2YoKmVwY20pLCBHRlBfS0VSTkVMKTsKLSAgICAgICAgLy9zbmRfcHJpbnRrKCJlcGNtIGtjYWxsb2M6ICVwXG4iLCBlcGNtKTsKKyAgICAgICAgLyogc25kX3ByaW50ayhLRVJOX0RFQlVHICJlcGNtIGtjYWxsb2M6ICVwXG4iLCBlcGNtKTsgKi8KIAogCWlmIChlcGNtID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCWVwY20tPmVtdSA9IGVtdTsKIAllcGNtLT5zdWJzdHJlYW0gPSBzdWJzdHJlYW07Ci0gICAgICAgIC8vc25kX3ByaW50aygiZXBjbSBkZXZpY2U9JWQsIGNoYW5uZWxfaWQ9JWRcbiIsIHN1YnN0cmVhbS0+cGNtLT5kZXZpY2UsIGNoYW5uZWxfaWQpOwotICAKKwkvKgorCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiZXBjbSBkZXZpY2U9JWQsIGNoYW5uZWxfaWQ9JWRcbiIsCisJCSAgIHN1YnN0cmVhbS0+cGNtLT5kZXZpY2UsIGNoYW5uZWxfaWQpOworCSovCiAJcnVudGltZS0+cHJpdmF0ZV9kYXRhID0gZXBjbTsKIAlydW50aW1lLT5wcml2YXRlX2ZyZWUgPSBzbmRfcDE2dl9wY21fZnJlZV9zdWJzdHJlYW07CiAgIApAQCAtMjAwLDEwICsyMDIsMTUgQEAKICAgICAgICAgY2hhbm5lbC0+bnVtYmVyID0gY2hhbm5lbF9pZDsKIAogICAgICAgICBjaGFubmVsLT51c2U9MTsKLQkvL3NuZF9wcmludGsoInAxNnY6IG9wZW4gY2hhbm5lbF9pZD0lZCwgY2hhbm5lbD0lcCwgdXNlPTB4JXhcbiIsIGNoYW5uZWxfaWQsIGNoYW5uZWwsIGNoYW5uZWwtPnVzZSk7Ci0gICAgICAgIC8vcHJpbnRrKCJvcGVuOmNoYW5uZWxfaWQ9JWQsIGNoaXA9JXAsIGNoYW5uZWw9JXBcbiIsY2hhbm5lbF9pZCwgY2hpcCwgY2hhbm5lbCk7Ci0gICAgICAgIC8vY2hhbm5lbC0+aW50ZXJydXB0ID0gc25kX3AxNnZfcGNtX2NoYW5uZWxfaW50ZXJydXB0OwotICAgICAgICBjaGFubmVsLT5lcGNtPWVwY207CisjaWYgMCAvKiBkZWJ1ZyAqLworCXNuZF9wcmludGsoS0VSTl9ERUJVRworCQkgICAicDE2djogb3BlbiBjaGFubmVsX2lkPSVkLCBjaGFubmVsPSVwLCB1c2U9MHgleFxuIiwKKwkJICAgY2hhbm5lbF9pZCwgY2hhbm5lbCwgY2hhbm5lbC0+dXNlKTsKKwlwcmludGsoS0VSTl9ERUJVRyAib3BlbjpjaGFubmVsX2lkPSVkLCBjaGlwPSVwLCBjaGFubmVsPSVwXG4iLAorCSAgICAgICBjaGFubmVsX2lkLCBjaGlwLCBjaGFubmVsKTsKKyNlbmRpZiAvKiBkZWJ1ZyAqLworCS8qIGNoYW5uZWwtPmludGVycnVwdCA9IHNuZF9wMTZ2X3BjbV9jaGFubmVsX2ludGVycnVwdDsgKi8KKwljaGFubmVsLT5lcGNtID0gZXBjbTsKIAlpZiAoKGVyciA9IHNuZF9wY21faHdfY29uc3RyYWludF9pbnRlZ2VyKHJ1bnRpbWUsIFNORFJWX1BDTV9IV19QQVJBTV9QRVJJT0RTKSkgPCAwKQogICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CiAKQEAgLTIyNCwxNCArMjMxLDE2IEBACiAJaW50IGVycjsKIAogCWVwY20gPSBremFsbG9jKHNpemVvZigqZXBjbSksIEdGUF9LRVJORUwpOwotCS8vc25kX3ByaW50aygiZXBjbSBrY2FsbG9jOiAlcFxuIiwgZXBjbSk7CisJLyogc25kX3ByaW50ayhLRVJOX0RFQlVHICJlcGNtIGtjYWxsb2M6ICVwXG4iLCBlcGNtKTsgKi8KIAogCWlmIChlcGNtID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCWVwY20tPmVtdSA9IGVtdTsKIAllcGNtLT5zdWJzdHJlYW0gPSBzdWJzdHJlYW07Ci0JLy9zbmRfcHJpbnRrKCJlcGNtIGRldmljZT0lZCwgY2hhbm5lbF9pZD0lZFxuIiwgc3Vic3RyZWFtLT5wY20tPmRldmljZSwgY2hhbm5lbF9pZCk7Ci0KKwkvKgorCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiZXBjbSBkZXZpY2U9JWQsIGNoYW5uZWxfaWQ9JWRcbiIsCisJCSAgIHN1YnN0cmVhbS0+cGNtLT5kZXZpY2UsIGNoYW5uZWxfaWQpOworCSovCiAJcnVudGltZS0+cHJpdmF0ZV9kYXRhID0gZXBjbTsKIAlydW50aW1lLT5wcml2YXRlX2ZyZWUgPSBzbmRfcDE2dl9wY21fZnJlZV9zdWJzdHJlYW07CiAgIApAQCAtMjQxLDEwICsyNTAsMTUgQEAKIAljaGFubmVsLT5udW1iZXIgPSBjaGFubmVsX2lkOwogCiAJY2hhbm5lbC0+dXNlPTE7Ci0JLy9zbmRfcHJpbnRrKCJwMTZ2OiBvcGVuIGNoYW5uZWxfaWQ9JWQsIGNoYW5uZWw9JXAsIHVzZT0weCV4XG4iLCBjaGFubmVsX2lkLCBjaGFubmVsLCBjaGFubmVsLT51c2UpOwotCS8vcHJpbnRrKCJvcGVuOmNoYW5uZWxfaWQ9JWQsIGNoaXA9JXAsIGNoYW5uZWw9JXBcbiIsY2hhbm5lbF9pZCwgY2hpcCwgY2hhbm5lbCk7Ci0JLy9jaGFubmVsLT5pbnRlcnJ1cHQgPSBzbmRfcDE2dl9wY21fY2hhbm5lbF9pbnRlcnJ1cHQ7Ci0JY2hhbm5lbC0+ZXBjbT1lcGNtOworI2lmIDAgLyogZGVidWcgKi8KKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcKKwkJICAgInAxNnY6IG9wZW4gY2hhbm5lbF9pZD0lZCwgY2hhbm5lbD0lcCwgdXNlPTB4JXhcbiIsCisJCSAgIGNoYW5uZWxfaWQsIGNoYW5uZWwsIGNoYW5uZWwtPnVzZSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIm9wZW46Y2hhbm5lbF9pZD0lZCwgY2hpcD0lcCwgY2hhbm5lbD0lcFxuIiwKKwkgICAgICAgY2hhbm5lbF9pZCwgY2hpcCwgY2hhbm5lbCk7CisjZW5kaWYgLyogZGVidWcgKi8KKwkvKiBjaGFubmVsLT5pbnRlcnJ1cHQgPSBzbmRfcDE2dl9wY21fY2hhbm5lbF9pbnRlcnJ1cHQ7ICovCisJY2hhbm5lbC0+ZXBjbSA9IGVwY207CiAJaWYgKChlcnIgPSBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfaW50ZWdlcihydW50aW1lLCBTTkRSVl9QQ01fSFdfUEFSQU1fUEVSSU9EUykpIDwgMCkKIAkJcmV0dXJuIGVycjsKIApAQCAtMzM0LDkgKzM0OCwxOSBAQAogCWludCBpOwogCXUzMiB0bXA7CiAJCi0gICAgICAgIC8vc25kX3ByaW50aygicHJlcGFyZTpjaGFubmVsX251bWJlcj0lZCwgcmF0ZT0lZCwgZm9ybWF0PTB4JXgsIGNoYW5uZWxzPSVkLCBidWZmZXJfc2l6ZT0lbGQsIHBlcmlvZF9zaXplPSVsZCwgcGVyaW9kcz0ldSwgZnJhbWVzX3RvX2J5dGVzPSVkXG4iLGNoYW5uZWwsIHJ1bnRpbWUtPnJhdGUsIHJ1bnRpbWUtPmZvcm1hdCwgcnVudGltZS0+Y2hhbm5lbHMsIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplLCBydW50aW1lLT5wZXJpb2Rfc2l6ZSwgcnVudGltZS0+cGVyaW9kcywgZnJhbWVzX3RvX2J5dGVzKHJ1bnRpbWUsIDEpKTsKLSAgICAgICAgLy9zbmRfcHJpbnRrKCJkbWFfYWRkcj0leCwgZG1hX2FyZWE9JXAsIHRhYmxlX2Jhc2U9JXBcbiIscnVudGltZS0+ZG1hX2FkZHIsIHJ1bnRpbWUtPmRtYV9hcmVhLCB0YWJsZV9iYXNlKTsKLQkvL3NuZF9wcmludGsoImRtYV9hZGRyPSV4LCBkbWFfYXJlYT0lcCwgZG1hX2J5dGVzKHNpemUpPSV4XG4iLGVtdS0+cDE2dl9idWZmZXIuYWRkciwgZW11LT5wMTZ2X2J1ZmZlci5hcmVhLCBlbXUtPnAxNnZfYnVmZmVyLmJ5dGVzKTsKKyNpZiAwIC8qIGRlYnVnICovCisJc25kX3ByaW50ayhLRVJOX0RFQlVHICJwcmVwYXJlOmNoYW5uZWxfbnVtYmVyPSVkLCByYXRlPSVkLCAiCisJCSAgICJmb3JtYXQ9MHgleCwgY2hhbm5lbHM9JWQsIGJ1ZmZlcl9zaXplPSVsZCwgIgorCQkgICAicGVyaW9kX3NpemU9JWxkLCBwZXJpb2RzPSV1LCBmcmFtZXNfdG9fYnl0ZXM9JWRcbiIsCisJCSAgIGNoYW5uZWwsIHJ1bnRpbWUtPnJhdGUsIHJ1bnRpbWUtPmZvcm1hdCwgcnVudGltZS0+Y2hhbm5lbHMsCisJCSAgIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplLCBydW50aW1lLT5wZXJpb2Rfc2l6ZSwKKwkJICAgcnVudGltZS0+cGVyaW9kcywgZnJhbWVzX3RvX2J5dGVzKHJ1bnRpbWUsIDEpKTsKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcgImRtYV9hZGRyPSV4LCBkbWFfYXJlYT0lcCwgdGFibGVfYmFzZT0lcFxuIiwKKwkJICAgcnVudGltZS0+ZG1hX2FkZHIsIHJ1bnRpbWUtPmRtYV9hcmVhLCB0YWJsZV9iYXNlKTsKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcgImRtYV9hZGRyPSV4LCBkbWFfYXJlYT0lcCwgZG1hX2J5dGVzKHNpemUpPSV4XG4iLAorCQkgICBlbXUtPnAxNnZfYnVmZmVyLmFkZHIsIGVtdS0+cDE2dl9idWZmZXIuYXJlYSwKKwkJICAgZW11LT5wMTZ2X2J1ZmZlci5ieXRlcyk7CisjZW5kaWYgLyogZGVidWcgKi8KIAl0bXAgPSBzbmRfZW11MTBrMV9wdHJfcmVhZChlbXUsIEFfU1BESUZfU0FNUExFUkFURSwgY2hhbm5lbCk7CiAgICAgICAgIHN3aXRjaCAocnVudGltZS0+cmF0ZSkgewogCWNhc2UgNDQxMDA6CkBAIC0zNzksNyArNDAzLDE1IEBACiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKIAlpbnQgY2hhbm5lbCA9IHN1YnN0cmVhbS0+cGNtLT5kZXZpY2UgLSBlbXUtPnAxNnZfZGV2aWNlX29mZnNldDsKIAl1MzIgdG1wOwotCS8vcHJpbnRrKCJwcmVwYXJlIGNhcHR1cmU6Y2hhbm5lbF9udW1iZXI9JWQsIHJhdGU9JWQsIGZvcm1hdD0weCV4LCBjaGFubmVscz0lZCwgYnVmZmVyX3NpemU9JWxkLCBwZXJpb2Rfc2l6ZT0lbGQsIGZyYW1lc190b19ieXRlcz0lZFxuIixjaGFubmVsLCBydW50aW1lLT5yYXRlLCBydW50aW1lLT5mb3JtYXQsIHJ1bnRpbWUtPmNoYW5uZWxzLCBydW50aW1lLT5idWZmZXJfc2l6ZSwgcnVudGltZS0+cGVyaW9kX3NpemUsICBmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgMSkpOworCisJLyoKKwlwcmludGsoS0VSTl9ERUJVRyAicHJlcGFyZSBjYXB0dXJlOmNoYW5uZWxfbnVtYmVyPSVkLCByYXRlPSVkLCAiCisJICAgICAgICJmb3JtYXQ9MHgleCwgY2hhbm5lbHM9JWQsIGJ1ZmZlcl9zaXplPSVsZCwgcGVyaW9kX3NpemU9JWxkLCAiCisJICAgICAgICJmcmFtZXNfdG9fYnl0ZXM9JWRcbiIsCisJICAgICAgIGNoYW5uZWwsIHJ1bnRpbWUtPnJhdGUsIHJ1bnRpbWUtPmZvcm1hdCwgcnVudGltZS0+Y2hhbm5lbHMsCisJICAgICAgIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplLCBydW50aW1lLT5wZXJpb2Rfc2l6ZSwKKwkgICAgICAgZnJhbWVzX3RvX2J5dGVzKHJ1bnRpbWUsIDEpKTsKKwkqLwogCXRtcCA9IHNuZF9lbXUxMGsxX3B0cl9yZWFkKGVtdSwgQV9TUERJRl9TQU1QTEVSQVRFLCBjaGFubmVsKTsKICAgICAgICAgc3dpdGNoIChydW50aW1lLT5yYXRlKSB7CiAJY2FzZSA0NDEwMDoKQEAgLTQ1OSwxMyArNDkxLDEzIEBACiAJCXJ1bnRpbWUgPSBzLT5ydW50aW1lOwogCQllcGNtID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOwogCQljaGFubmVsID0gc3Vic3RyZWFtLT5wY20tPmRldmljZS1lbXUtPnAxNnZfZGV2aWNlX29mZnNldDsKLQkJLy9zbmRfcHJpbnRrKCJwMTZ2IGNoYW5uZWw9JWRcbiIsY2hhbm5lbCk7CisJCS8qIHNuZF9wcmludGsoS0VSTl9ERUJVRyAicDE2diBjaGFubmVsPSVkXG4iLCBjaGFubmVsKTsgKi8KIAkJZXBjbS0+cnVubmluZyA9IHJ1bm5pbmc7CiAJCWJhc2ljIHw9ICgweDE8PGNoYW5uZWwpOwogCQlpbnRlIHw9IChJTlRFMl9QTEFZQkFDS19DSF8wX0xPT1A8PGNoYW5uZWwpOwogICAgICAgICAgICAgICAgIHNuZF9wY21fdHJpZ2dlcl9kb25lKHMsIHN1YnN0cmVhbSk7CiAgICAgICAgIH0KLQkvL3NuZF9wcmludGsoImJhc2ljPTB4JXgsIGludGU9MHgleFxuIixiYXNpYywgaW50ZSk7CisJLyogc25kX3ByaW50ayhLRVJOX0RFQlVHICJiYXNpYz0weCV4LCBpbnRlPTB4JXhcbiIsIGJhc2ljLCBpbnRlKTsgKi8KIAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKQEAgLTU1OCw4ICs1OTAsMTMgQEAKIAkJcHRyIC09IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplOwogCQlwcmludGsoS0VSTl9XQVJOSU5HICJidWZmZXIgY2FwdHVyZSBsaW1pdGVkIVxuIik7CiAJfQotCS8vcHJpbnRrKCJwdHIxID0gMHglbHgsIHB0cjI9MHglbHgsIHB0cj0weCVseCwgYnVmZmVyX3NpemUgPSAweCV4LCBwZXJpb2Rfc2l6ZSA9IDB4JXgsIGJpdHM9JWQsIHJhdGU9JWRcbiIsIHB0cjEsIHB0cjIsIHB0ciwgKGludClydW50aW1lLT5idWZmZXJfc2l6ZSwgKGludClydW50aW1lLT5wZXJpb2Rfc2l6ZSwgKGludClydW50aW1lLT5mcmFtZV9iaXRzLCAoaW50KXJ1bnRpbWUtPnJhdGUpOwotCisJLyoKKwlwcmludGsoS0VSTl9ERUJVRyAicHRyMSA9IDB4JWx4LCBwdHIyPTB4JWx4LCBwdHI9MHglbHgsICIKKwkgICAgICAgImJ1ZmZlcl9zaXplID0gMHgleCwgcGVyaW9kX3NpemUgPSAweCV4LCBiaXRzPSVkLCByYXRlPSVkXG4iLAorCSAgICAgICBwdHIxLCBwdHIyLCBwdHIsIChpbnQpcnVudGltZS0+YnVmZmVyX3NpemUsCisJICAgICAgIChpbnQpcnVudGltZS0+cGVyaW9kX3NpemUsIChpbnQpcnVudGltZS0+ZnJhbWVfYml0cywKKwkgICAgICAgKGludClydW50aW1lLT5yYXRlKTsKKwkqLwogCXJldHVybiBwdHI7CiB9CiAKQEAgLTU5Miw3ICs2MjksMTAgQEAKIAkvLyByZWxlYXNlIHRoZSBkYXRhCiAJaWYgKGNoaXAtPnAxNnZfYnVmZmVyLmFyZWEpIHsKIAkJc25kX2RtYV9mcmVlX3BhZ2VzKCZjaGlwLT5wMTZ2X2J1ZmZlcik7Ci0JCS8vc25kX3ByaW50aygicGVyaW9kIGxhYmxlcyBmcmVlOiAlcFxuIiwgJmNoaXAtPnAxNnZfYnVmZmVyKTsKKwkJLyoKKwkJc25kX3ByaW50ayhLRVJOX0RFQlVHICJwZXJpb2QgbGFibGVzIGZyZWU6ICVwXG4iLAorCQkJICAgJmNoaXAtPnAxNnZfYnVmZmVyKTsKKwkJKi8KIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC02MDQsNyArNjQ0LDcgQEAKIAlpbnQgZXJyOwogICAgICAgICBpbnQgY2FwdHVyZT0xOwogICAKLQkvL3NuZF9wcmludGsoInNuZF9wMTZ2X3BjbSBjYWxsZWQuIGRldmljZT0lZFxuIiwgZGV2aWNlKTsKKwkvKiBzbmRfcHJpbnRrKCJLRVJOX0RFQlVHIHNuZF9wMTZ2X3BjbSBjYWxsZWQuIGRldmljZT0lZFxuIiwgZGV2aWNlKTsgKi8KIAllbXUtPnAxNnZfZGV2aWNlX29mZnNldCA9IGRldmljZTsKIAlpZiAocnBjbSkKIAkJKnJwY20gPSBOVUxMOwpAQCAtNjMxLDcgKzY3MSwxMCBAQAogCQkJCQkJCSBzbmRfZG1hX3BjaV9kYXRhKGVtdS0+cGNpKSwgCiAJCQkJCQkJICgoNjU1MzYgLSA2NCkgKiA4KSwgKCg2NTUzNiAtIDY0KSAqIDgpKSkgPCAwKSAKIAkJCXJldHVybiBlcnI7Ci0JCS8vc25kX3ByaW50aygicHJlYWxsb2NhdGUgcGxheWJhY2sgc3Vic3RyZWFtOiBlcnI9JWRcbiIsIGVycik7CisJCS8qCisJCXNuZF9wcmludGsoS0VSTl9ERUJVRworCQkJICAgInByZWFsbG9jYXRlIHBsYXliYWNrIHN1YnN0cmVhbTogZXJyPSVkXG4iLCBlcnIpOworCQkqLwogCX0KIAogCWZvciAoc3Vic3RyZWFtID0gcGNtLT5zdHJlYW1zW1NORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRV0uc3Vic3RyZWFtOyAKQEAgLTY0Miw3ICs2ODUsMTAgQEAKIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25kX2RtYV9wY2lfZGF0YShlbXUtPnBjaSksIAogCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2NTUzNiAtIDY0LCA2NTUzNiAtIDY0KSkgPCAwKQogCQkJcmV0dXJuIGVycjsKLQkJLy9zbmRfcHJpbnRrKCJwcmVhbGxvY2F0ZSBjYXB0dXJlIHN1YnN0cmVhbTogZXJyPSVkXG4iLCBlcnIpOworCQkvKgorCQlzbmRfcHJpbnRrKEtFUk5fREVCVUcKKwkJCSAgICJwcmVhbGxvY2F0ZSBjYXB0dXJlIHN1YnN0cmVhbTogZXJyPSVkXG4iLCBlcnIpOworCQkqLwogCX0KICAgCiAJaWYgKHJwY20pCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZW11MTBrMS92b2ljZS5jIGIvc291bmQvcGNpL2VtdTEwazEvdm9pY2UuYwppbmRleCBkNzMwMGExLi4yMGI4ZGEyIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZW11MTBrMS92b2ljZS5jCisrKyBiL3NvdW5kL3BjaS9lbXUxMGsxL3ZvaWNlLmMKQEAgLTUzLDcgKzUzLDEwIEBACiAJKnJ2b2ljZSA9IE5VTEw7CiAJZmlyc3Rfdm9pY2UgPSBsYXN0X3ZvaWNlID0gMDsKIAlmb3IgKGkgPSBlbXUtPm5leHRfZnJlZV92b2ljZSwgaiA9IDA7IGogPCBOVU1fRyA7IGkgKz0gbnVtYmVyLCBqICs9IG51bWJlcikgewotCQkvLyBwcmludGsoImkgJWQgaiAlZCBuZXh0IGZyZWUgJWQhXG4iLCBpLCBqLCBlbXUtPm5leHRfZnJlZV92b2ljZSk7CisJCS8qCisJCXByaW50ayhLRVJOX0RFQlVHICJpICVkIGogJWQgbmV4dCBmcmVlICVkIVxuIiwKKwkJICAgICAgIGksIGosIGVtdS0+bmV4dF9mcmVlX3ZvaWNlKTsKKwkJKi8KIAkJaSAlPSBOVU1fRzsKIAogCQkvKiBzdGVyZW8gdm9pY2VzIG11c3QgYmUgZXZlbi9vZGQgKi8KQEAgLTcxLDcgKzc0LDcgQEAKIAkJCX0KIAkJfQogCQlpZiAoIXNraXApIHsKLQkJCS8vIHByaW50aygiYWxsb2NhdGVkIHZvaWNlICVkXG4iLCBpKTsKKwkJCS8qIHByaW50ayhLRVJOX0RFQlVHICJhbGxvY2F0ZWQgdm9pY2UgJWRcbiIsIGkpOyAqLwogCQkJZmlyc3Rfdm9pY2UgPSBpOwogCQkJbGFzdF92b2ljZSA9IChpICsgbnVtYmVyKSAlIE5VTV9HOwogCQkJZW11LT5uZXh0X2ZyZWVfdm9pY2UgPSBsYXN0X3ZvaWNlOwpAQCAtODQsNyArODcsMTAgQEAKIAkKIAlmb3IgKGkgPSAwOyBpIDwgbnVtYmVyOyBpKyspIHsKIAkJdm9pY2UgPSAmZW11LT52b2ljZXNbKGZpcnN0X3ZvaWNlICsgaSkgJSBOVU1fR107Ci0JCS8vIHByaW50aygidm9pY2UgYWxsb2MgLSAlaSwgJWkgb2YgJWlcbiIsIHZvaWNlLT5udW1iZXIsIGlkeC1maXJzdF92b2ljZSsxLCBudW1iZXIpOworCQkvKgorCQlwcmludGsoa0VSTl9ERUJVRyAidm9pY2UgYWxsb2MgLSAlaSwgJWkgb2YgJWlcbiIsCisJCSAgICAgICB2b2ljZS0+bnVtYmVyLCBpZHgtZmlyc3Rfdm9pY2UrMSwgbnVtYmVyKTsKKwkJKi8KIAkJdm9pY2UtPnVzZSA9IDE7CiAJCXN3aXRjaCAodHlwZSkgewogCQljYXNlIEVNVTEwSzFfUENNOgpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VuczEzNzAuYyBiL3NvdW5kL3BjaS9lbnMxMzcwLmMKaW5kZXggOWJmOTUzNi4uMThmNGQxZSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VuczEzNzAuYworKysgYi9zb3VuZC9wY2kvZW5zMTM3MC5jCkBAIC01ODQsNyArNTg0LDggQEAKIAl1bnNpZ25lZCBsb25nIGVuZF90aW1lID0gamlmZmllcyArIEhaIC8gMTA7CiAKICNpZiAwCi0JcHJpbnRrKCJDT0RFQyBXUklURTogcmVnID0gMHgleCwgdmFsID0gMHgleCAoMHgleCksIGNyZWcgPSAweCV4XG4iLAorCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICJDT0RFQyBXUklURTogcmVnID0gMHgleCwgdmFsID0gMHgleCAoMHgleCksIGNyZWcgPSAweCV4XG4iLAogCSAgICAgICByZWcsIHZhbCwgRVNfMTM3MF9DT0RFQ19XUklURShyZWcsIHZhbCksIEVTX1JFRyhlbnNvbmlxLCAxMzcwX0NPREVDKSk7CiAjZW5kaWYKIAlkbyB7CkBAIC0yNDA5LDkgKzI0MTAsOSBAQAogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCWlmICgoZXJyID0gc25kX2Vuc29uaXFfY3JlYXRlKGNhcmQsIHBjaSwgJmVuc29uaXEpKSA8IDApIHsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lczE5MzguYyBiL3NvdW5kL3BjaS9lczE5MzguYwppbmRleCA0Y2Q5YTFmYS4uZGQ2M2IxMyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VzMTkzOC5jCisrKyBiL3NvdW5kL3BjaS9lczE5MzguYwpAQCAtMTY3MywxOCArMTY3MywyMiBAQAogCiAJc3RhdHVzID0gaW5iKFNMSU9fUkVHKGNoaXAsIElSUUNPTlRST0wpKTsKICNpZiAwCi0JcHJpbnRrKCJFczE5MzhkZWJ1ZyAtIGludGVycnVwdCBzdGF0dXM6ID0weCV4XG4iLCBzdGF0dXMpOworCXByaW50ayhLRVJOX0RFQlVHICJFczE5MzhkZWJ1ZyAtIGludGVycnVwdCBzdGF0dXM6ID0weCV4XG4iLCBzdGF0dXMpOwogI2VuZGlmCiAJCiAJLyogQVVESU8gMSAqLwogCWlmIChzdGF0dXMgJiAweDEwKSB7CiAjaWYgMAotICAgICAgICAgICAgICAgIHByaW50aygiRXMxOTM4ZGVidWcgLSBBVURJTyBjaGFubmVsIDEgaW50ZXJydXB0XG4iKTsKLQkJcHJpbnRrKCJFczE5MzhkZWJ1ZyAtIEFVRElPIGNoYW5uZWwgMSBETUFDIERNQSBjb3VudDogJXVcbiIsCisgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fREVCVUcKKwkJICAgICAgICJFczE5MzhkZWJ1ZyAtIEFVRElPIGNoYW5uZWwgMSBpbnRlcnJ1cHRcbiIpOworCQlwcmludGsoS0VSTl9ERUJVRworCQkgICAgICAgIkVzMTkzOGRlYnVnIC0gQVVESU8gY2hhbm5lbCAxIERNQUMgRE1BIGNvdW50OiAldVxuIiwKIAkJICAgICAgIGludyhTTERNX1JFRyhjaGlwLCBETUFDT1VOVCkpKTsKLQkJcHJpbnRrKCJFczE5MzhkZWJ1ZyAtIEFVRElPIGNoYW5uZWwgMSBETUFDIERNQSBiYXNlOiAldVxuIiwKKwkJcHJpbnRrKEtFUk5fREVCVUcKKwkJICAgICAgICJFczE5MzhkZWJ1ZyAtIEFVRElPIGNoYW5uZWwgMSBETUFDIERNQSBiYXNlOiAldVxuIiwKIAkJICAgICAgIGlubChTTERNX1JFRyhjaGlwLCBETUFBRERSKSkpOwotCQlwcmludGsoIkVzMTkzOGRlYnVnIC0gQVVESU8gY2hhbm5lbCAxIERNQUMgRE1BIHN0YXR1czogMHgleFxuIiwKKwkJcHJpbnRrKEtFUk5fREVCVUcKKwkJICAgICAgICJFczE5MzhkZWJ1ZyAtIEFVRElPIGNoYW5uZWwgMSBETUFDIERNQSBzdGF0dXM6IDB4JXhcbiIsCiAJCSAgICAgICBpbmwoU0xETV9SRUcoY2hpcCwgRE1BU1RBVFVTKSkpOwogI2VuZGlmCiAJCS8qIGNsZWFyIGlycSAqLwpAQCAtMTY5OSwxMCArMTcwMywxMyBAQAogCS8qIEFVRElPIDIgKi8KIAlpZiAoc3RhdHVzICYgMHgyMCkgewogI2lmIDAKLSAgICAgICAgICAgICAgICBwcmludGsoIkVzMTkzOGRlYnVnIC0gQVVESU8gY2hhbm5lbCAyIGludGVycnVwdFxuIik7Ci0JCXByaW50aygiRXMxOTM4ZGVidWcgLSBBVURJTyBjaGFubmVsIDIgRE1BQyBETUEgY291bnQ6ICV1XG4iLAorICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0RFQlVHCisJCSAgICAgICAiRXMxOTM4ZGVidWcgLSBBVURJTyBjaGFubmVsIDIgaW50ZXJydXB0XG4iKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcKKwkJICAgICAgICJFczE5MzhkZWJ1ZyAtIEFVRElPIGNoYW5uZWwgMiBETUFDIERNQSBjb3VudDogJXVcbiIsCiAJCSAgICAgICBpbncoU0xJT19SRUcoY2hpcCwgQVVESU8yRE1BQ09VTlQpKSk7Ci0JCXByaW50aygiRXMxOTM4ZGVidWcgLSBBVURJTyBjaGFubmVsIDIgRE1BQyBETUEgYmFzZTogJXVcbiIsCisJCXByaW50ayhLRVJOX0RFQlVHCisJCSAgICAgICAiRXMxOTM4ZGVidWcgLSBBVURJTyBjaGFubmVsIDIgRE1BQyBETUEgYmFzZTogJXVcbiIsCiAJCSAgICAgICBpbmwoU0xJT19SRUcoY2hpcCwgQVVESU8yRE1BQUREUikpKTsKIAogI2VuZGlmCkBAIC0xNzk5LDkgKzE4MDYsOSBAQAogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAlmb3IgKGlkeCA9IDA7IGlkeCA8IDU7IGlkeCsrKSB7CiAJCWlmIChwY2lfcmVzb3VyY2Vfc3RhcnQocGNpLCBpZHgpID09IDAgfHwKIAkJICAgICEocGNpX3Jlc291cmNlX2ZsYWdzKHBjaSwgaWR4KSAmIElPUkVTT1VSQ0VfSU8pKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZXMxOTY4LmMgYi9zb3VuZC9wY2kvZXMxOTY4LmMKaW5kZXggZTljMzc5NC4uZGM5N2U4MSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VzMTk2OC5jCisrKyBiL3NvdW5kL3BjaS9lczE5NjguYwpAQCAtMjY0NSw5ICsyNjQ1LDkgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKCFjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKICAgICAgICAgICAgICAgICAKIAlpZiAodG90YWxfYnVmc2l6ZVtkZXZdIDwgMTI4KQogCQl0b3RhbF9idWZzaXplW2Rldl0gPSAxMjg7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZm04MDEuYyBiL3NvdW5kL3BjaS9mbTgwMS5jCmluZGV4IGMxMjlmOWUuLjYwY2RiOWUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9mbTgwMS5jCisrKyBiL3NvdW5kL3BjaS9mbTgwMS5jCkBAIC0xNDY4LDkgKzE0NjgsOSBAQAogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAlpZiAoKGVyciA9IHNuZF9mbTgwMV9jcmVhdGUoY2FyZCwgcGNpLCB0ZWE1NzV4X3R1bmVyW2Rldl0sICZjaGlwKSkgPCAwKSB7CiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CiAJCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL2hkYV9iZWVwLmMgYi9zb3VuZC9wY2kvaGRhL2hkYV9iZWVwLmMKaW5kZXggOTYwZmQ3OS4uNGRlNWJhYyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfYmVlcC5jCisrKyBiL3NvdW5kL3BjaS9oZGEvaGRhX2JlZXAuYwpAQCAtMTM4LDYgKzEzOCw3IEBACiAKIAkJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoYmVlcC0+ZGV2KTsKIAkJa2ZyZWUoYmVlcCk7CisJCWNvZGVjLT5iZWVwID0gTlVMTDsKIAl9CiB9CiBFWFBPUlRfU1lNQk9MX0hEQShzbmRfaGRhX2RldGFjaF9iZWVwX2RldmljZSk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL2hkYV9iZWVwLmggYi9zb3VuZC9wY2kvaGRhL2hkYV9iZWVwLmgKaW5kZXggYjk2NzlmMC4uNTFiZjZhNSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfYmVlcC5oCisrKyBiL3NvdW5kL3BjaS9oZGEvaGRhX2JlZXAuaApAQCAtMzksNyArMzksNyBAQAogaW50IHNuZF9oZGFfYXR0YWNoX2JlZXBfZGV2aWNlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBpbnQgbmlkKTsKIHZvaWQgc25kX2hkYV9kZXRhY2hfYmVlcF9kZXZpY2Uoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpOwogI2Vsc2UKLSNkZWZpbmUgc25kX2hkYV9hdHRhY2hfYmVlcF9kZXZpY2UoLi4uKQorI2RlZmluZSBzbmRfaGRhX2F0dGFjaF9iZWVwX2RldmljZSguLi4pCQkwCiAjZGVmaW5lIHNuZF9oZGFfZGV0YWNoX2JlZXBfZGV2aWNlKC4uLikKICNlbmRpZgogI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL2hkYV9jb2RlYy5jIGIvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuYwppbmRleCBkMDNmOTkyLi5hNGU1ZTU5IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL2hkYV9jb2RlYy5jCisrKyBiL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmMKQEAgLTY0Nyw5ICs2NDcsOSBAQAogCiAJdG90YWxfbm9kZXMgPSBzbmRfaGRhX2dldF9zdWJfbm9kZXMoY29kZWMsIEFDX05PREVfUk9PVCwgJm5pZCk7CiAJZm9yIChpID0gMDsgaSA8IHRvdGFsX25vZGVzOyBpKyssIG5pZCsrKSB7Ci0JCXVuc2lnbmVkIGludCBmdW5jOwotCQlmdW5jID0gc25kX2hkYV9wYXJhbV9yZWFkKGNvZGVjLCBuaWQsIEFDX1BBUl9GVU5DVElPTl9UWVBFKTsKLQkJc3dpdGNoIChmdW5jICYgMHhmZikgeworCQljb2RlYy0+ZnVuY3Rpb25faWQgPSBzbmRfaGRhX3BhcmFtX3JlYWQoY29kZWMsIG5pZCwKKwkJCQkJCUFDX1BBUl9GVU5DVElPTl9UWVBFKSAmIDB4ZmY7CisJCXN3aXRjaCAoY29kZWMtPmZ1bmN0aW9uX2lkKSB7CiAJCWNhc2UgQUNfR1JQX0FVRElPX0ZVTkNUSU9OOgogCQkJY29kZWMtPmFmZyA9IG5pZDsKIAkJCWJyZWFrOwpAQCAtNjgyLDExICs2ODIsMTQwIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qIHJlYWQgYWxsIHBpbiBkZWZhdWx0IGNvbmZpZ3VyYXRpb25zIGFuZCBzYXZlIGNvZGVjLT5pbml0X3BpbnMgKi8KK3N0YXRpYyBpbnQgcmVhZF9waW5fZGVmYXVsdHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJaW50IGk7CisJaGRhX25pZF90IG5pZCA9IGNvZGVjLT5zdGFydF9uaWQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgY29kZWMtPm51bV9ub2RlczsgaSsrLCBuaWQrKykgeworCQlzdHJ1Y3QgaGRhX3BpbmNmZyAqcGluOworCQl1bnNpZ25lZCBpbnQgd2NhcHMgPSBnZXRfd2NhcHMoY29kZWMsIG5pZCk7CisJCXVuc2lnbmVkIGludCB3aWRfdHlwZSA9ICh3Y2FwcyAmIEFDX1dDQVBfVFlQRSkgPj4KKwkJCQlBQ19XQ0FQX1RZUEVfU0hJRlQ7CisJCWlmICh3aWRfdHlwZSAhPSBBQ19XSURfUElOKQorCQkJY29udGludWU7CisJCXBpbiA9IHNuZF9hcnJheV9uZXcoJmNvZGVjLT5pbml0X3BpbnMpOworCQlpZiAoIXBpbikKKwkJCXJldHVybiAtRU5PTUVNOworCQlwaW4tPm5pZCA9IG5pZDsKKwkJcGluLT5jZmcgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIG5pZCwgMCwKKwkJCQkJICAgICAgQUNfVkVSQl9HRVRfQ09ORklHX0RFRkFVTFQsIDApOworCX0KKwlyZXR1cm4gMDsKK30KKworLyogbG9vayB1cCB0aGUgZ2l2ZW4gcGluIGNvbmZpZyBsaXN0IGFuZCByZXR1cm4gdGhlIGl0ZW0gbWF0Y2hpbmcgd2l0aCBOSUQgKi8KK3N0YXRpYyBzdHJ1Y3QgaGRhX3BpbmNmZyAqbG9va191cF9waW5jZmcoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCQkJCSBzdHJ1Y3Qgc25kX2FycmF5ICphcnJheSwKKwkJCQkJIGhkYV9uaWRfdCBuaWQpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IGFycmF5LT51c2VkOyBpKyspIHsKKwkJc3RydWN0IGhkYV9waW5jZmcgKnBpbiA9IHNuZF9hcnJheV9lbGVtKGFycmF5LCBpKTsKKwkJaWYgKHBpbi0+bmlkID09IG5pZCkKKwkJCXJldHVybiBwaW47CisJfQorCXJldHVybiBOVUxMOworfQorCisvKiB3cml0ZSBhIGNvbmZpZyB2YWx1ZSBmb3IgdGhlIGdpdmVuIE5JRCAqLworc3RhdGljIHZvaWQgc2V0X3BpbmNmZyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCwKKwkJICAgICAgIHVuc2lnbmVkIGludCBjZmcpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsCisJCQkJICAgIEFDX1ZFUkJfU0VUX0NPTkZJR19ERUZBVUxUX0JZVEVTXzAgKyBpLAorCQkJCSAgICBjZmcgJiAweGZmKTsKKwkJY2ZnID4+PSA4OworCX0KK30KKworLyogc2V0IHRoZSBjdXJyZW50IHBpbiBjb25maWcgdmFsdWUgZm9yIHRoZSBnaXZlbiBOSUQuCisgKiB0aGUgdmFsdWUgaXMgY2FjaGVkLCBhbmQgcmVhZCB2aWEgc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKCkKKyAqLworaW50IHNuZF9oZGFfYWRkX3BpbmNmZyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgc3RydWN0IHNuZF9hcnJheSAqbGlzdCwKKwkJICAgICAgIGhkYV9uaWRfdCBuaWQsIHVuc2lnbmVkIGludCBjZmcpCit7CisJc3RydWN0IGhkYV9waW5jZmcgKnBpbjsKKwl1bnNpZ25lZCBpbnQgb2xkY2ZnOworCisJb2xkY2ZnID0gc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKGNvZGVjLCBuaWQpOworCXBpbiA9IGxvb2tfdXBfcGluY2ZnKGNvZGVjLCBsaXN0LCBuaWQpOworCWlmICghcGluKSB7CisJCXBpbiA9IHNuZF9hcnJheV9uZXcobGlzdCk7CisJCWlmICghcGluKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCXBpbi0+bmlkID0gbmlkOworCX0KKwlwaW4tPmNmZyA9IGNmZzsKKworCS8qIGNoYW5nZSBvbmx5IHdoZW4gbmVlZGVkOyBlLmcuIGlmIHRoZSBwaW5jZmcgaXMgYWxyZWFkeSBwcmVzZW50CisJICogaW4gdXNlcl9waW5zW10sIGRvbid0IHdyaXRlIGl0CisJICovCisJY2ZnID0gc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKGNvZGVjLCBuaWQpOworCWlmIChvbGRjZmcgIT0gY2ZnKQorCQlzZXRfcGluY2ZnKGNvZGVjLCBuaWQsIGNmZyk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBzbmRfaGRhX2NvZGVjX3NldF9waW5jZmcoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCQkgICAgIGhkYV9uaWRfdCBuaWQsIHVuc2lnbmVkIGludCBjZmcpCit7CisJcmV0dXJuIHNuZF9oZGFfYWRkX3BpbmNmZyhjb2RlYywgJmNvZGVjLT5kcml2ZXJfcGlucywgbmlkLCBjZmcpOworfQorRVhQT1JUX1NZTUJPTF9IREEoc25kX2hkYV9jb2RlY19zZXRfcGluY2ZnKTsKKworLyogZ2V0IHRoZSBjdXJyZW50IHBpbiBjb25maWcgdmFsdWUgb2YgdGhlIGdpdmVuIHBpbiBOSUQgKi8KK3Vuc2lnbmVkIGludCBzbmRfaGRhX2NvZGVjX2dldF9waW5jZmcoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQpCit7CisJc3RydWN0IGhkYV9waW5jZmcgKnBpbjsKKworI2lmZGVmIENPTkZJR19TTkRfSERBX0hXREVQCisJcGluID0gbG9va191cF9waW5jZmcoY29kZWMsICZjb2RlYy0+dXNlcl9waW5zLCBuaWQpOworCWlmIChwaW4pCisJCXJldHVybiBwaW4tPmNmZzsKKyNlbmRpZgorCXBpbiA9IGxvb2tfdXBfcGluY2ZnKGNvZGVjLCAmY29kZWMtPmRyaXZlcl9waW5zLCBuaWQpOworCWlmIChwaW4pCisJCXJldHVybiBwaW4tPmNmZzsKKwlwaW4gPSBsb29rX3VwX3BpbmNmZyhjb2RlYywgJmNvZGVjLT5pbml0X3BpbnMsIG5pZCk7CisJaWYgKHBpbikKKwkJcmV0dXJuIHBpbi0+Y2ZnOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9IREEoc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKTsKKworLyogcmVzdG9yZSBhbGwgY3VycmVudCBwaW4gY29uZmlncyAqLworc3RhdGljIHZvaWQgcmVzdG9yZV9waW5jZmdzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBjb2RlYy0+aW5pdF9waW5zLnVzZWQ7IGkrKykgeworCQlzdHJ1Y3QgaGRhX3BpbmNmZyAqcGluID0gc25kX2FycmF5X2VsZW0oJmNvZGVjLT5pbml0X3BpbnMsIGkpOworCQlzZXRfcGluY2ZnKGNvZGVjLCBwaW4tPm5pZCwKKwkJCSAgIHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyhjb2RlYywgcGluLT5uaWQpKTsKKwl9Cit9CiAKIHN0YXRpYyB2b2lkIGluaXRfaGRhX2NhY2hlKHN0cnVjdCBoZGFfY2FjaGVfcmVjICpjYWNoZSwKIAkJCSAgIHVuc2lnbmVkIGludCByZWNvcmRfc2l6ZSk7CiBzdGF0aWMgdm9pZCBmcmVlX2hkYV9jYWNoZShzdHJ1Y3QgaGRhX2NhY2hlX3JlYyAqY2FjaGUpOwogCisvKiByZXN0b3JlIHRoZSBpbml0aWFsIHBpbiBjZmdzIGFuZCByZWxlYXNlIGFsbCBwaW5jZmcgbGlzdHMgKi8KK3N0YXRpYyB2b2lkIHJlc3RvcmVfaW5pdF9waW5jZmdzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCS8qIGZpcnN0IGZyZWUgZHJpdmVyX3BpbnMgYW5kIHVzZXJfcGlucywgdGhlbiBjYWxsIHJlc3RvcmVfcGluY2ZnCisJICogc28gdGhhdCBvbmx5IHRoZSB2YWx1ZXMgaW4gaW5pdF9waW5zIGFyZSByZXN0b3JlZAorCSAqLworCXNuZF9hcnJheV9mcmVlKCZjb2RlYy0+ZHJpdmVyX3BpbnMpOworI2lmZGVmIENPTkZJR19TTkRfSERBX0hXREVQCisJc25kX2FycmF5X2ZyZWUoJmNvZGVjLT51c2VyX3BpbnMpOworI2VuZGlmCisJcmVzdG9yZV9waW5jZmdzKGNvZGVjKTsKKwlzbmRfYXJyYXlfZnJlZSgmY29kZWMtPmluaXRfcGlucyk7Cit9CisKIC8qCiAgKiBjb2RlYyBkZXN0cnVjdG9yCiAgKi8KQEAgLTY5NCw2ICs4MjMsNyBAQAogewogCWlmICghY29kZWMpCiAJCXJldHVybjsKKwlyZXN0b3JlX2luaXRfcGluY2Zncyhjb2RlYyk7CiAjaWZkZWYgQ09ORklHX1NORF9IREFfUE9XRVJfU0FWRQogCWNhbmNlbF9kZWxheWVkX3dvcmsoJmNvZGVjLT5wb3dlcl93b3JrKTsKIAlmbHVzaF93b3JrcXVldWUoY29kZWMtPmJ1cy0+d29ya3EpOwpAQCAtNzEyLDYgKzg0Miw5IEBACiAJa2ZyZWUoY29kZWMpOwogfQogCitzdGF0aWMgdm9pZCBoZGFfc2V0X3Bvd2VyX3N0YXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgZmcsCisJCQkJdW5zaWduZWQgaW50IHBvd2VyX3N0YXRlKTsKKwogLyoqCiAgKiBzbmRfaGRhX2NvZGVjX25ldyAtIGNyZWF0ZSBhIEhEQSBjb2RlYwogICogQGJ1czogdGhlIGJ1cyB0byBhc3NpZ24KQEAgLTc1MSw2ICs4ODQsOCBAQAogCWluaXRfaGRhX2NhY2hlKCZjb2RlYy0+YW1wX2NhY2hlLCBzaXplb2Yoc3RydWN0IGhkYV9hbXBfaW5mbykpOwogCWluaXRfaGRhX2NhY2hlKCZjb2RlYy0+Y21kX2NhY2hlLCBzaXplb2Yoc3RydWN0IGhkYV9jYWNoZV9oZWFkKSk7CiAJc25kX2FycmF5X2luaXQoJmNvZGVjLT5taXhlcnMsIHNpemVvZihzdHJ1Y3Qgc25kX2tjb250cm9sICopLCAzMik7CisJc25kX2FycmF5X2luaXQoJmNvZGVjLT5pbml0X3BpbnMsIHNpemVvZihzdHJ1Y3QgaGRhX3BpbmNmZyksIDE2KTsKKwlzbmRfYXJyYXlfaW5pdCgmY29kZWMtPmRyaXZlcl9waW5zLCBzaXplb2Yoc3RydWN0IGhkYV9waW5jZmcpLCAxNik7CiAJaWYgKGNvZGVjLT5idXMtPm1vZGVsbmFtZSkgewogCQljb2RlYy0+bW9kZWxuYW1lID0ga3N0cmR1cChjb2RlYy0+YnVzLT5tb2RlbG5hbWUsIEdGUF9LRVJORUwpOwogCQlpZiAoIWNvZGVjLT5tb2RlbG5hbWUpIHsKQEAgLTc4NywxNSArOTIyLDE4IEBACiAJc2V0dXBfZmdfbm9kZXMoY29kZWMpOwogCWlmICghY29kZWMtPmFmZyAmJiAhY29kZWMtPm1mZykgewogCQlzbmRfcHJpbnRkZCgiaGRhX2NvZGVjOiBubyBBRkcgb3IgTUZHIG5vZGUgZm91bmRcbiIpOwotCQlzbmRfaGRhX2NvZGVjX2ZyZWUoY29kZWMpOwotCQlyZXR1cm4gLUVOT0RFVjsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBlcnJvcjsKIAl9CiAKLQlpZiAocmVhZF93aWRnZXRfY2Fwcyhjb2RlYywgY29kZWMtPmFmZyA/IGNvZGVjLT5hZmcgOiBjb2RlYy0+bWZnKSA8IDApIHsKKwllcnIgPSByZWFkX3dpZGdldF9jYXBzKGNvZGVjLCBjb2RlYy0+YWZnID8gY29kZWMtPmFmZyA6IGNvZGVjLT5tZmcpOworCWlmIChlcnIgPCAwKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgImhkYV9jb2RlYzogY2Fubm90IG1hbGxvY1xuIik7Ci0JCXNuZF9oZGFfY29kZWNfZnJlZShjb2RlYyk7Ci0JCXJldHVybiAtRU5PTUVNOworCQlnb3RvIGVycm9yOwogCX0KKwllcnIgPSByZWFkX3Bpbl9kZWZhdWx0cyhjb2RlYyk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZXJyb3I7CiAKIAlpZiAoIWNvZGVjLT5zdWJzeXN0ZW1faWQpIHsKIAkJaGRhX25pZF90IG5pZCA9IGNvZGVjLT5hZmcgPyBjb2RlYy0+YWZnIDogY29kZWMtPm1mZzsKQEAgLTgwNiwxMiArOTQ0LDE1IEBACiAJaWYgKGJ1cy0+bW9kZWxuYW1lKQogCQljb2RlYy0+bW9kZWxuYW1lID0ga3N0cmR1cChidXMtPm1vZGVsbmFtZSwgR0ZQX0tFUk5FTCk7CiAKKwkvKiBwb3dlci11cCBhbGwgYmVmb3JlIGluaXRpYWxpemF0aW9uICovCisJaGRhX3NldF9wb3dlcl9zdGF0ZShjb2RlYywKKwkJCSAgICBjb2RlYy0+YWZnID8gY29kZWMtPmFmZyA6IGNvZGVjLT5tZmcsCisJCQkgICAgQUNfUFdSU1RfRDApOworCiAJaWYgKGRvX2luaXQpIHsKIAkJZXJyID0gc25kX2hkYV9jb2RlY19jb25maWd1cmUoY29kZWMpOwotCQlpZiAoZXJyIDwgMCkgewotCQkJc25kX2hkYV9jb2RlY19mcmVlKGNvZGVjKTsKLQkJCXJldHVybiBlcnI7Ci0JCX0KKwkJaWYgKGVyciA8IDApCisJCQlnb3RvIGVycm9yOwogCX0KIAlzbmRfaGRhX2NvZGVjX3Byb2NfbmV3KGNvZGVjKTsKIApAQCAtODI0LDYgKzk2NSwxMCBAQAogCWlmIChjb2RlY3ApCiAJCSpjb2RlY3AgPSBjb2RlYzsKIAlyZXR1cm4gMDsKKworIGVycm9yOgorCXNuZF9oZGFfY29kZWNfZnJlZShjb2RlYyk7CisJcmV0dXJuIGVycjsKIH0KIEVYUE9SVF9TWU1CT0xfSERBKHNuZF9oZGFfY29kZWNfbmV3KTsKIApAQCAtOTA3LDYgKzEwNTIsNyBAQAogCiAvKiBGSVhNRTogbW9yZSBiZXR0ZXIgaGFzaCBrZXk/ICovCiAjZGVmaW5lIEhEQV9IQVNIX0tFWShuaWQsZGlyLGlkeCkgKHUzMikoKG5pZCkgKyAoKGlkeCkgPDwgMTYpICsgKChkaXIpIDw8IDI0KSkKKyNkZWZpbmUgSERBX0hBU0hfUElOQ0FQX0tFWShuaWQpICh1MzIpKChuaWQpICsgKDB4MDIgPDwgMjQpKQogI2RlZmluZSBJTkZPX0FNUF9DQVBTCSgxPDwwKQogI2RlZmluZSBJTkZPX0FNUF9WT0woY2gpCSgxIDw8ICgxICsgKGNoKSkpCiAKQEAgLTk5Nyw2ICsxMTQzLDIxIEBACiB9CiBFWFBPUlRfU1lNQk9MX0hEQShzbmRfaGRhX292ZXJyaWRlX2FtcF9jYXBzKTsKIAordTMyIHNuZF9oZGFfcXVlcnlfcGluX2NhcHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQpCit7CisJc3RydWN0IGhkYV9hbXBfaW5mbyAqaW5mbzsKKworCWluZm8gPSBnZXRfYWxsb2NfYW1wX2hhc2goY29kZWMsIEhEQV9IQVNIX1BJTkNBUF9LRVkobmlkKSk7CisJaWYgKCFpbmZvKQorCQlyZXR1cm4gMDsKKwlpZiAoIWluZm8tPmhlYWQudmFsKSB7CisJCWluZm8tPmFtcF9jYXBzID0gc25kX2hkYV9wYXJhbV9yZWFkKGNvZGVjLCBuaWQsIEFDX1BBUl9QSU5fQ0FQKTsKKwkJaW5mby0+aGVhZC52YWwgfD0gSU5GT19BTVBfQ0FQUzsKKwl9CisJcmV0dXJuIGluZm8tPmFtcF9jYXBzOworfQorRVhQT1JUX1NZTUJPTF9IREEoc25kX2hkYV9xdWVyeV9waW5fY2Fwcyk7CisKIC8qCiAgKiByZWFkIHRoZSBjdXJyZW50IHZvbHVtZSB0byBpbmZvCiAgKiBpZiB0aGUgY2FjaGUgZXhpc3RzLCByZWFkIHRoZSBjYWNoZSB2YWx1ZS4KQEAgLTExMjAsNiArMTI4MSw3IEBACiAJdTE2IG5pZCA9IGdldF9hbXBfbmlkKGtjb250cm9sKTsKIAl1OCBjaHMgPSBnZXRfYW1wX2NoYW5uZWxzKGtjb250cm9sKTsKIAlpbnQgZGlyID0gZ2V0X2FtcF9kaXJlY3Rpb24oa2NvbnRyb2wpOworCXVuc2lnbmVkIGludCBvZnMgPSBnZXRfYW1wX29mZnNldChrY29udHJvbCk7CiAJdTMyIGNhcHM7CiAKIAljYXBzID0gcXVlcnlfYW1wX2NhcHMoY29kZWMsIG5pZCwgZGlyKTsKQEAgLTExMzEsNiArMTI5Myw4IEBACiAJCSAgICAgICBrY29udHJvbC0+aWQubmFtZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KKwlpZiAob2ZzIDwgY2FwcykKKwkJY2FwcyAtPSBvZnM7CiAJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0lOVEVHRVI7CiAJdWluZm8tPmNvdW50ID0gY2hzID09IDMgPyAyIDogMTsKIAl1aW5mby0+dmFsdWUuaW50ZWdlci5taW4gPSAwOwpAQCAtMTEzOSw2ICsxMzAzLDMyIEBACiB9CiBFWFBPUlRfU1lNQk9MX0hEQShzbmRfaGRhX21peGVyX2FtcF92b2x1bWVfaW5mbyk7CiAKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKK3JlYWRfYW1wX3ZhbHVlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkLAorCSAgICAgICBpbnQgY2gsIGludCBkaXIsIGludCBpZHgsIHVuc2lnbmVkIGludCBvZnMpCit7CisJdW5zaWduZWQgaW50IHZhbDsKKwl2YWwgPSBzbmRfaGRhX2NvZGVjX2FtcF9yZWFkKGNvZGVjLCBuaWQsIGNoLCBkaXIsIGlkeCk7CisJdmFsICY9IEhEQV9BTVBfVk9MTUFTSzsKKwlpZiAodmFsID49IG9mcykKKwkJdmFsIC09IG9mczsKKwllbHNlCisJCXZhbCA9IDA7CisJcmV0dXJuIHZhbDsKK30KKworc3RhdGljIGlubGluZSBpbnQKK3VwZGF0ZV9hbXBfdmFsdWUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQsCisJCSBpbnQgY2gsIGludCBkaXIsIGludCBpZHgsIHVuc2lnbmVkIGludCBvZnMsCisJCSB1bnNpZ25lZCBpbnQgdmFsKQoreworCWlmICh2YWwgPiAwKQorCQl2YWwgKz0gb2ZzOworCXJldHVybiBzbmRfaGRhX2NvZGVjX2FtcF91cGRhdGUoY29kZWMsIG5pZCwgY2gsIGRpciwgaWR4LAorCQkJCQlIREFfQU1QX1ZPTE1BU0ssIHZhbCk7Cit9CisKIGludCBzbmRfaGRhX21peGVyX2FtcF92b2x1bWVfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAogCQkJCSBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKQEAgLTExNDcsMTQgKzEzMzcsMTMgQEAKIAlpbnQgY2hzID0gZ2V0X2FtcF9jaGFubmVscyhrY29udHJvbCk7CiAJaW50IGRpciA9IGdldF9hbXBfZGlyZWN0aW9uKGtjb250cm9sKTsKIAlpbnQgaWR4ID0gZ2V0X2FtcF9pbmRleChrY29udHJvbCk7CisJdW5zaWduZWQgaW50IG9mcyA9IGdldF9hbXBfb2Zmc2V0KGtjb250cm9sKTsKIAlsb25nICp2YWxwID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWU7CiAKIAlpZiAoY2hzICYgMSkKLQkJKnZhbHArKyA9IHNuZF9oZGFfY29kZWNfYW1wX3JlYWQoY29kZWMsIG5pZCwgMCwgZGlyLCBpZHgpCi0JCQkmIEhEQV9BTVBfVk9MTUFTSzsKKwkJKnZhbHArKyA9IHJlYWRfYW1wX3ZhbHVlKGNvZGVjLCBuaWQsIDAsIGRpciwgaWR4LCBvZnMpOwogCWlmIChjaHMgJiAyKQotCQkqdmFscCA9IHNuZF9oZGFfY29kZWNfYW1wX3JlYWQoY29kZWMsIG5pZCwgMSwgZGlyLCBpZHgpCi0JCQkmIEhEQV9BTVBfVk9MTUFTSzsKKwkJKnZhbHAgPSByZWFkX2FtcF92YWx1ZShjb2RlYywgbmlkLCAxLCBkaXIsIGlkeCwgb2ZzKTsKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0xfSERBKHNuZF9oZGFfbWl4ZXJfYW1wX3ZvbHVtZV9nZXQpOwpAQCAtMTE2NywxOCArMTM1NiwxNyBAQAogCWludCBjaHMgPSBnZXRfYW1wX2NoYW5uZWxzKGtjb250cm9sKTsKIAlpbnQgZGlyID0gZ2V0X2FtcF9kaXJlY3Rpb24oa2NvbnRyb2wpOwogCWludCBpZHggPSBnZXRfYW1wX2luZGV4KGtjb250cm9sKTsKKwl1bnNpZ25lZCBpbnQgb2ZzID0gZ2V0X2FtcF9vZmZzZXQoa2NvbnRyb2wpOwogCWxvbmcgKnZhbHAgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZTsKIAlpbnQgY2hhbmdlID0gMDsKIAogCXNuZF9oZGFfcG93ZXJfdXAoY29kZWMpOwogCWlmIChjaHMgJiAxKSB7Ci0JCWNoYW5nZSA9IHNuZF9oZGFfY29kZWNfYW1wX3VwZGF0ZShjb2RlYywgbmlkLCAwLCBkaXIsIGlkeCwKLQkJCQkJCSAgMHg3ZiwgKnZhbHApOworCQljaGFuZ2UgPSB1cGRhdGVfYW1wX3ZhbHVlKGNvZGVjLCBuaWQsIDAsIGRpciwgaWR4LCBvZnMsICp2YWxwKTsKIAkJdmFscCsrOwogCX0KIAlpZiAoY2hzICYgMikKLQkJY2hhbmdlIHw9IHNuZF9oZGFfY29kZWNfYW1wX3VwZGF0ZShjb2RlYywgbmlkLCAxLCBkaXIsIGlkeCwKLQkJCQkJCSAgIDB4N2YsICp2YWxwKTsKKwkJY2hhbmdlIHw9IHVwZGF0ZV9hbXBfdmFsdWUoY29kZWMsIG5pZCwgMSwgZGlyLCBpZHgsIG9mcywgKnZhbHApOwogCXNuZF9oZGFfcG93ZXJfZG93bihjb2RlYyk7CiAJcmV0dXJuIGNoYW5nZTsKIH0KQEAgLTExOTAsNiArMTM3OCw3IEBACiAJc3RydWN0IGhkYV9jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJaGRhX25pZF90IG5pZCA9IGdldF9hbXBfbmlkKGtjb250cm9sKTsKIAlpbnQgZGlyID0gZ2V0X2FtcF9kaXJlY3Rpb24oa2NvbnRyb2wpOworCXVuc2lnbmVkIGludCBvZnMgPSBnZXRfYW1wX29mZnNldChrY29udHJvbCk7CiAJdTMyIGNhcHMsIHZhbDEsIHZhbDI7CiAKIAlpZiAoc2l6ZSA8IDQgKiBzaXplb2YodW5zaWduZWQgaW50KSkKQEAgLTExOTgsNiArMTM4Nyw3IEBACiAJdmFsMiA9IChjYXBzICYgQUNfQU1QQ0FQX1NURVBfU0laRSkgPj4gQUNfQU1QQ0FQX1NURVBfU0laRV9TSElGVDsKIAl2YWwyID0gKHZhbDIgKyAxKSAqIDI1OwogCXZhbDEgPSAtKChjYXBzICYgQUNfQU1QQ0FQX09GRlNFVCkgPj4gQUNfQU1QQ0FQX09GRlNFVF9TSElGVCk7CisJdmFsMSArPSBvZnM7CiAJdmFsMSA9ICgoaW50KXZhbDEpICogKChpbnQpdmFsMik7CiAJaWYgKHB1dF91c2VyKFNORFJWX0NUTF9UTFZUX0RCX1NDQUxFLCBfdGx2KSkKIAkJcmV0dXJuIC1FRkFVTFQ7CkBAIC0xMjY4LDcgKzE0NTgsNiBAQAogfQogRVhQT1JUX1NZTUJPTF9IREEoc25kX2hkYV9jdGxfYWRkKTsKIAotI2lmZGVmIENPTkZJR19TTkRfSERBX1JFQ09ORklHCiAvKiBDbGVhciBhbGwgY29udHJvbHMgYXNzaWduZWQgdG8gdGhlIGdpdmVuIGNvZGVjICovCiB2b2lkIHNuZF9oZGFfY3Rsc19jbGVhcihzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKQEAgLTEyNzksOSArMTQ2OCw1MiBAQAogCXNuZF9hcnJheV9mcmVlKCZjb2RlYy0+bWl4ZXJzKTsKIH0KIAotdm9pZCBzbmRfaGRhX2NvZGVjX3Jlc2V0KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQorLyogcHNldWRvIGRldmljZSBsb2NraW5nCisgKiB0b2dnbGUgY2FyZC0+c2h1dGRvd24gdG8gYWxsb3cvZGlzYWxsb3cgdGhlIGRldmljZSBhY2Nlc3MgKGFzIGEgaGFjaykKKyAqLworc3RhdGljIGludCBoZGFfbG9ja19kZXZpY2VzKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCkKIHsKLQlpbnQgaTsKKwlzcGluX2xvY2soJmNhcmQtPmZpbGVzX2xvY2spOworCWlmIChjYXJkLT5zaHV0ZG93bikgeworCQlzcGluX3VubG9jaygmY2FyZC0+ZmlsZXNfbG9jayk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwljYXJkLT5zaHV0ZG93biA9IDE7CisJc3Bpbl91bmxvY2soJmNhcmQtPmZpbGVzX2xvY2spOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBoZGFfdW5sb2NrX2RldmljZXMoc3RydWN0IHNuZF9jYXJkICpjYXJkKQoreworCXNwaW5fbG9jaygmY2FyZC0+ZmlsZXNfbG9jayk7CisJY2FyZC0+c2h1dGRvd24gPSAwOworCXNwaW5fdW5sb2NrKCZjYXJkLT5maWxlc19sb2NrKTsKK30KKworaW50IHNuZF9oZGFfY29kZWNfcmVzZXQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gY29kZWMtPmJ1cy0+Y2FyZDsKKwlpbnQgaSwgcGNtOworCisJaWYgKGhkYV9sb2NrX2RldmljZXMoY2FyZCkgPCAwKQorCQlyZXR1cm4gLUVCVVNZOworCS8qIGNoZWNrIHdoZXRoZXIgdGhlIGNvZGVjIGlzbid0IHVzZWQgYnkgYW55IG1peGVyIG9yIFBDTSBzdHJlYW1zICovCisJaWYgKCFsaXN0X2VtcHR5KCZjYXJkLT5jdGxfZmlsZXMpKSB7CisJCWhkYV91bmxvY2tfZGV2aWNlcyhjYXJkKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJZm9yIChwY20gPSAwOyBwY20gPCBjb2RlYy0+bnVtX3BjbXM7IHBjbSsrKSB7CisJCXN0cnVjdCBoZGFfcGNtICpjcGNtID0gJmNvZGVjLT5wY21faW5mb1twY21dOworCQlpZiAoIWNwY20tPnBjbSkKKwkJCWNvbnRpbnVlOworCQlpZiAoY3BjbS0+cGNtLT5zdHJlYW1zWzBdLnN1YnN0cmVhbV9vcGVuZWQgfHwKKwkJICAgIGNwY20tPnBjbS0+c3RyZWFtc1sxXS5zdWJzdHJlYW1fb3BlbmVkKSB7CisJCQloZGFfdW5sb2NrX2RldmljZXMoY2FyZCk7CisJCQlyZXR1cm4gLUVCVVNZOworCQl9CisJfQorCisJLyogT0ssIGxldCBpdCBmcmVlICovCiAKICNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCiAJY2FuY2VsX2RlbGF5ZWRfd29yaygmY29kZWMtPnBvd2VyX3dvcmspOwpAQCAtMTI5MSw4ICsxNTIzLDcgQEAKIAkvKiByZWxhc2UgUENNcyAqLwogCWZvciAoaSA9IDA7IGkgPCBjb2RlYy0+bnVtX3BjbXM7IGkrKykgewogCQlpZiAoY29kZWMtPnBjbV9pbmZvW2ldLnBjbSkgewotCQkJc25kX2RldmljZV9mcmVlKGNvZGVjLT5idXMtPmNhcmQsCi0JCQkJCWNvZGVjLT5wY21faW5mb1tpXS5wY20pOworCQkJc25kX2RldmljZV9mcmVlKGNhcmQsIGNvZGVjLT5wY21faW5mb1tpXS5wY20pOwogCQkJY2xlYXJfYml0KGNvZGVjLT5wY21faW5mb1tpXS5kZXZpY2UsCiAJCQkJICBjb2RlYy0+YnVzLT5wY21fZGV2X2JpdHMpOwogCQl9CkBAIC0xMzA1LDEzICsxNTM2LDIyIEBACiAJZnJlZV9oZGFfY2FjaGUoJmNvZGVjLT5jbWRfY2FjaGUpOwogCWluaXRfaGRhX2NhY2hlKCZjb2RlYy0+YW1wX2NhY2hlLCBzaXplb2Yoc3RydWN0IGhkYV9hbXBfaW5mbykpOwogCWluaXRfaGRhX2NhY2hlKCZjb2RlYy0+Y21kX2NhY2hlLCBzaXplb2Yoc3RydWN0IGhkYV9jYWNoZV9oZWFkKSk7CisJLyogZnJlZSBvbmx5IGRyaXZlcl9waW5zIHNvIHRoYXQgaW5pdF9waW5zICsgdXNlcl9waW5zIGFyZSByZXN0b3JlZCAqLworCXNuZF9hcnJheV9mcmVlKCZjb2RlYy0+ZHJpdmVyX3BpbnMpOworCXJlc3RvcmVfcGluY2Zncyhjb2RlYyk7CiAJY29kZWMtPm51bV9wY21zID0gMDsKIAljb2RlYy0+cGNtX2luZm8gPSBOVUxMOwogCWNvZGVjLT5wcmVzZXQgPSBOVUxMOworCW1lbXNldCgmY29kZWMtPnBhdGNoX29wcywgMCwgc2l6ZW9mKGNvZGVjLT5wYXRjaF9vcHMpKTsKKwljb2RlYy0+c2xhdmVfZGlnX291dHMgPSBOVUxMOworCWNvZGVjLT5zcGRpZl9zdGF0dXNfcmVzZXQgPSAwOwogCW1vZHVsZV9wdXQoY29kZWMtPm93bmVyKTsKIAljb2RlYy0+b3duZXIgPSBOVUxMOworCisJLyogYWxsb3cgZGV2aWNlIGFjY2VzcyBhZ2FpbiAqLworCWhkYV91bmxvY2tfZGV2aWNlcyhjYXJkKTsKKwlyZXR1cm4gMDsKIH0KLSNlbmRpZiAvKiBDT05GSUdfU05EX0hEQV9SRUNPTkZJRyAqLwogCiAvKiBjcmVhdGUgYSB2aXJ0dWFsIG1hc3RlciBjb250cm9sIGFuZCBhZGQgc2xhdmVzICovCiBpbnQgc25kX2hkYV9hZGRfdm1hc3RlcihzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgY2hhciAqbmFtZSwKQEAgLTEzMzYsMTUgKzE1NzYsMjAgQEAKIAkKIAlmb3IgKHMgPSBzbGF2ZXM7ICpzOyBzKyspIHsKIAkJc3RydWN0IHNuZF9rY29udHJvbCAqc2N0bDsKLQotCQlzY3RsID0gc25kX2hkYV9maW5kX21peGVyX2N0bChjb2RlYywgKnMpOwotCQlpZiAoIXNjdGwpIHsKLQkJCXNuZF9wcmludGRkKCJDYW5ub3QgZmluZCBzbGF2ZSAlcywgc2tpcHBlZFxuIiwgKnMpOwotCQkJY29udGludWU7CisJCWludCBpID0gMDsKKwkJZm9yICg7OykgeworCQkJc2N0bCA9IF9zbmRfaGRhX2ZpbmRfbWl4ZXJfY3RsKGNvZGVjLCAqcywgaSk7CisJCQlpZiAoIXNjdGwpIHsKKwkJCQlpZiAoIWkpCisJCQkJCXNuZF9wcmludGRkKCJDYW5ub3QgZmluZCBzbGF2ZSAlcywgIgorCQkJCQkJICAgICJza2lwcGVkXG4iLCAqcyk7CisJCQkJYnJlYWs7CisJCQl9CisJCQllcnIgPSBzbmRfY3RsX2FkZF9zbGF2ZShrY3RsLCBzY3RsKTsKKwkJCWlmIChlcnIgPCAwKQorCQkJCXJldHVybiBlcnI7CisJCQlpKys7CiAJCX0KLQkJZXJyID0gc25kX2N0bF9hZGRfc2xhdmUoa2N0bCwgc2N0bCk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0xOTU1LDYgKzIyMDAsOCBAQAogCX0KIAlmb3IgKGRpZ19taXggPSBkaWdfaW5fY3RsczsgZGlnX21peC0+bmFtZTsgZGlnX21peCsrKSB7CiAJCWtjdGwgPSBzbmRfY3RsX25ldzEoZGlnX21peCwgY29kZWMpOworCQlpZiAoIWtjdGwpCisJCQlyZXR1cm4gLUVOT01FTTsKIAkJa2N0bC0+cHJpdmF0ZV92YWx1ZSA9IG5pZDsKIAkJZXJyID0gc25kX2hkYV9jdGxfYWRkKGNvZGVjLCBrY3RsKTsKIAkJaWYgKGVyciA8IDApCkBAIC0yMDc0LDggKzIzMjEsNyBAQAogCQkJCSAqIGRvbid0IHBvd2VyIGRvd24gdGhlIHdpZGdldCBpZiBpdCBjb250cm9scwogCQkJCSAqIGVhcGQgYW5kIEVBUERfQlRMRU5BQkxFIGlzIHNldC4KIAkJCQkgKi8KLQkJCQlwaW5jYXAgPSBzbmRfaGRhX3BhcmFtX3JlYWQoY29kZWMsIG5pZCwKLQkJCQkJCQkgICAgQUNfUEFSX1BJTl9DQVApOworCQkJCXBpbmNhcCA9IHNuZF9oZGFfcXVlcnlfcGluX2NhcHMoY29kZWMsIG5pZCk7CiAJCQkJaWYgKHBpbmNhcCAmIEFDX1BJTkNBUF9FQVBEKSB7CiAJCQkJCWludCBlYXBkID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLAogCQkJCQkJbmlkLCAwLApAQCAtMjE0NCw2ICsyMzkwLDcgQEAKIAloZGFfc2V0X3Bvd2VyX3N0YXRlKGNvZGVjLAogCQkJICAgIGNvZGVjLT5hZmcgPyBjb2RlYy0+YWZnIDogY29kZWMtPm1mZywKIAkJCSAgICBBQ19QV1JTVF9EMCk7CisJcmVzdG9yZV9waW5jZmdzKGNvZGVjKTsgLyogcmVzdG9yZSBhbGwgY3VycmVudCBwaW4gY29uZmlncyAqLwogCWhkYV9leGVjX2luaXRfdmVyYnMoY29kZWMpOwogCWlmIChjb2RlYy0+cGF0Y2hfb3BzLnJlc3VtZSkKIAkJY29kZWMtPnBhdGNoX29wcy5yZXN1bWUoY29kZWMpOwpAQCAtMjE3MSw4ICsyNDE4LDE2IEBACiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvZGVjLCAmYnVzLT5jb2RlY19saXN0LCBsaXN0KSB7CiAJCWludCBlcnIgPSBzbmRfaGRhX2NvZGVjX2J1aWxkX2NvbnRyb2xzKGNvZGVjKTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOworCQlpZiAoZXJyIDwgMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJoZGFfY29kZWM6IGNhbm5vdCBidWlsZCBjb250cm9scyIKKwkJCSAgICAgICAiZm9yICMlZCAoZXJyb3IgJWQpXG4iLCBjb2RlYy0+YWRkciwgZXJyKTsgCisJCQllcnIgPSBzbmRfaGRhX2NvZGVjX3Jlc2V0KGNvZGVjKTsKKwkJCWlmIChlcnIgPCAwKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJICAgICAgICJoZGFfY29kZWM6IGNhbm5vdCByZXZlcnQgY29kZWNcbiIpOworCQkJCXJldHVybiBlcnI7CisJCQl9CisJCX0KIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0yMTgxLDE5ICsyNDM2LDEyIEBACiBpbnQgc25kX2hkYV9jb2RlY19idWlsZF9jb250cm9scyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlpbnQgZXJyID0gMDsKLQkvKiBmYWtlIGFzIGlmIGFscmVhZHkgcG93ZXJlZC1vbiAqLwotCWhkYV9rZWVwX3Bvd2VyX29uKGNvZGVjKTsKLQkvKiB0aGVuIGZpcmUgdXAgKi8KLQloZGFfc2V0X3Bvd2VyX3N0YXRlKGNvZGVjLAotCQkJICAgIGNvZGVjLT5hZmcgPyBjb2RlYy0+YWZnIDogY29kZWMtPm1mZywKLQkJCSAgICBBQ19QV1JTVF9EMCk7CiAJaGRhX2V4ZWNfaW5pdF92ZXJicyhjb2RlYyk7CiAJLyogY29udGludWUgdG8gaW5pdGlhbGl6ZS4uLiAqLwogCWlmIChjb2RlYy0+cGF0Y2hfb3BzLmluaXQpCiAJCWVyciA9IGNvZGVjLT5wYXRjaF9vcHMuaW5pdChjb2RlYyk7CiAJaWYgKCFlcnIgJiYgY29kZWMtPnBhdGNoX29wcy5idWlsZF9jb250cm9scykKIAkJZXJyID0gY29kZWMtPnBhdGNoX29wcy5idWlsZF9jb250cm9scyhjb2RlYyk7Ci0Jc25kX2hkYV9wb3dlcl9kb3duKGNvZGVjKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAlyZXR1cm4gMDsKQEAgLTIzMDYsMTIgKzI1NTQsMTEgQEAKIHN0YXRpYyBpbnQgc25kX2hkYV9xdWVyeV9zdXBwb3J0ZWRfcGNtKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkLAogCQkJCXUzMiAqcmF0ZXNwLCB1NjQgKmZvcm1hdHNwLCB1bnNpZ25lZCBpbnQgKmJwc3ApCiB7Ci0JaW50IGk7Ci0JdW5zaWduZWQgaW50IHZhbCwgc3RyZWFtczsKKwl1bnNpZ25lZCBpbnQgaSwgdmFsLCB3Y2FwczsKIAogCXZhbCA9IDA7Ci0JaWYgKG5pZCAhPSBjb2RlYy0+YWZnICYmCi0JICAgIChnZXRfd2NhcHMoY29kZWMsIG5pZCkgJiBBQ19XQ0FQX0ZPUk1BVF9PVlJEKSkgeworCXdjYXBzID0gZ2V0X3djYXBzKGNvZGVjLCBuaWQpOworCWlmIChuaWQgIT0gY29kZWMtPmFmZyAmJiAod2NhcHMgJiBBQ19XQ0FQX0ZPUk1BVF9PVlJEKSkgewogCQl2YWwgPSBzbmRfaGRhX3BhcmFtX3JlYWQoY29kZWMsIG5pZCwgQUNfUEFSX1BDTSk7CiAJCWlmICh2YWwgPT0gLTEpCiAJCQlyZXR1cm4gLUVJTzsKQEAgLTIzMjUsMTUgKzI1NzIsMjAgQEAKIAkJCWlmICh2YWwgJiAoMSA8PCBpKSkKIAkJCQlyYXRlcyB8PSByYXRlX2JpdHNbaV0uYWxzYV9iaXRzOwogCQl9CisJCWlmIChyYXRlcyA9PSAwKSB7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJoZGFfY29kZWM6IHJhdGVzID09IDAgIgorCQkJCSAgICIobmlkPTB4JXgsIHZhbD0weCV4LCBvdnJkPSVpKVxuIiwKKwkJCQkJbmlkLCB2YWwsCisJCQkJCSh3Y2FwcyAmIEFDX1dDQVBfRk9STUFUX09WUkQpID8gMSA6IDApOworCQkJcmV0dXJuIC1FSU87CisJCX0KIAkJKnJhdGVzcCA9IHJhdGVzOwogCX0KIAogCWlmIChmb3JtYXRzcCB8fCBicHNwKSB7CiAJCXU2NCBmb3JtYXRzID0gMDsKLQkJdW5zaWduZWQgaW50IGJwczsKLQkJdW5zaWduZWQgaW50IHdjYXBzOworCQl1bnNpZ25lZCBpbnQgc3RyZWFtcywgYnBzOwogCi0JCXdjYXBzID0gZ2V0X3djYXBzKGNvZGVjLCBuaWQpOwogCQlzdHJlYW1zID0gc25kX2hkYV9wYXJhbV9yZWFkKGNvZGVjLCBuaWQsIEFDX1BBUl9TVFJFQU0pOwogCQlpZiAoc3RyZWFtcyA9PSAtMSkKIAkJCXJldHVybiAtRUlPOwpAQCAtMjM4Niw2ICsyNjM4LDE1IEBACiAJCQlmb3JtYXRzIHw9IFNORFJWX1BDTV9GTVRCSVRfVTg7CiAJCQlicHMgPSA4OwogCQl9CisJCWlmIChmb3JtYXRzID09IDApIHsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgImhkYV9jb2RlYzogZm9ybWF0cyA9PSAwICIKKwkJCQkgICAiKG5pZD0weCV4LCB2YWw9MHgleCwgb3ZyZD0laSwgIgorCQkJCSAgICJzdHJlYW1zPTB4JXgpXG4iLAorCQkJCQluaWQsIHZhbCwKKwkJCQkJKHdjYXBzICYgQUNfV0NBUF9GT1JNQVRfT1ZSRCkgPyAxIDogMCwKKwkJCQkJc3RyZWFtcyk7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQogCQlpZiAoZm9ybWF0c3ApCiAJCQkqZm9ybWF0c3AgPSBmb3JtYXRzOwogCQlpZiAoYnBzcCkKQEAgLTI1MDEsMTIgKzI3NjIsMTYgQEAKIHN0YXRpYyBpbnQgc2V0X3BjbV9kZWZhdWx0X3ZhbHVlcyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKIAkJCQkgIHN0cnVjdCBoZGFfcGNtX3N0cmVhbSAqaW5mbykKIHsKKwlpbnQgZXJyOworCiAJLyogcXVlcnkgc3VwcG9ydCBQQ00gaW5mb3JtYXRpb24gZnJvbSB0aGUgZ2l2ZW4gTklEICovCiAJaWYgKGluZm8tPm5pZCAmJiAoIWluZm8tPnJhdGVzIHx8ICFpbmZvLT5mb3JtYXRzKSkgewotCQlzbmRfaGRhX3F1ZXJ5X3N1cHBvcnRlZF9wY20oY29kZWMsIGluZm8tPm5pZCwKKwkJZXJyID0gc25kX2hkYV9xdWVyeV9zdXBwb3J0ZWRfcGNtKGNvZGVjLCBpbmZvLT5uaWQsCiAJCQkJaW5mby0+cmF0ZXMgPyBOVUxMIDogJmluZm8tPnJhdGVzLAogCQkJCWluZm8tPmZvcm1hdHMgPyBOVUxMIDogJmluZm8tPmZvcm1hdHMsCiAJCQkJaW5mby0+bWF4YnBzID8gTlVMTCA6ICZpbmZvLT5tYXhicHMpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CiAJfQogCWlmIChpbmZvLT5vcHMub3BlbiA9PSBOVUxMKQogCQlpbmZvLT5vcHMub3BlbiA9IGhkYV9wY21fZGVmYXVsdF9vcGVuX2Nsb3NlOwpAQCAtMjU0OSwxMyArMjgxNCwxMCBAQAogCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhdWRpb19pZHgpOyBpKyspIHsKIAkJCWRldiA9IGF1ZGlvX2lkeFtpXTsKIAkJCWlmICghdGVzdF9iaXQoZGV2LCBidXMtPnBjbV9kZXZfYml0cykpCi0JCQkJYnJlYWs7CisJCQkJZ290byBvazsKIAkJfQotCQlpZiAoaSA+PSBBUlJBWV9TSVpFKGF1ZGlvX2lkeCkpIHsKLQkJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HICJUb28gbWFueSBhdWRpbyBkZXZpY2VzXG4iKTsKLQkJCXJldHVybiAtRUFHQUlOOwotCQl9Ci0JCWJyZWFrOworCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORyAiVG9vIG1hbnkgYXVkaW8gZGV2aWNlc1xuIik7CisJCXJldHVybiAtRUFHQUlOOwogCWNhc2UgSERBX1BDTV9UWVBFX1NQRElGOgogCWNhc2UgSERBX1BDTV9UWVBFX0hETUk6CiAJY2FzZSBIREFfUENNX1RZUEVfTU9ERU06CkBAIC0yNTcwLDYgKzI4MzIsNyBAQAogCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORyAiSW52YWxpZCBQQ00gdHlwZSAlZFxuIiwgdHlwZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KKyBvazoKIAlzZXRfYml0KGRldiwgYnVzLT5wY21fZGV2X2JpdHMpOwogCXJldHVybiBkZXY7CiB9CkBAIC0yNjA2LDI0ICsyODY5LDM2IEBACiAJCWlmICghY29kZWMtPnBhdGNoX29wcy5idWlsZF9wY21zKQogCQkJcmV0dXJuIDA7CiAJCWVyciA9IGNvZGVjLT5wYXRjaF9vcHMuYnVpbGRfcGNtcyhjb2RlYyk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKKwkJaWYgKGVyciA8IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiaGRhX2NvZGVjOiBjYW5ub3QgYnVpbGQgUENNcyIKKwkJCSAgICAgICAiZm9yICMlZCAoZXJyb3IgJWQpXG4iLCBjb2RlYy0+YWRkciwgZXJyKTsgCisJCQllcnIgPSBzbmRfaGRhX2NvZGVjX3Jlc2V0KGNvZGVjKTsKKwkJCWlmIChlcnIgPCAwKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJICAgICAgICJoZGFfY29kZWM6IGNhbm5vdCByZXZlcnQgY29kZWNcbiIpOworCQkJCXJldHVybiBlcnI7CisJCQl9CisJCX0KIAl9CiAJZm9yIChwY20gPSAwOyBwY20gPCBjb2RlYy0+bnVtX3BjbXM7IHBjbSsrKSB7CiAJCXN0cnVjdCBoZGFfcGNtICpjcGNtID0gJmNvZGVjLT5wY21faW5mb1twY21dOwogCQlpbnQgZGV2OwogCiAJCWlmICghY3BjbS0+c3RyZWFtWzBdLnN1YnN0cmVhbXMgJiYgIWNwY20tPnN0cmVhbVsxXS5zdWJzdHJlYW1zKQotCQkJcmV0dXJuIDA7IC8qIG5vIHN1YnN0cmVhbXMgYXNzaWduZWQgKi8KKwkJCWNvbnRpbnVlOyAvKiBubyBzdWJzdHJlYW1zIGFzc2lnbmVkICovCiAKIAkJaWYgKCFjcGNtLT5wY20pIHsKIAkJCWRldiA9IGdldF9lbXB0eV9wY21fZGV2aWNlKGNvZGVjLT5idXMsIGNwY20tPnBjbV90eXBlKTsKIAkJCWlmIChkZXYgPCAwKQotCQkJCXJldHVybiAwOworCQkJCWNvbnRpbnVlOyAvKiBubyBmYXRhbCBlcnJvciAqLwogCQkJY3BjbS0+ZGV2aWNlID0gZGV2OwogCQkJZXJyID0gc25kX2hkYV9hdHRhY2hfcGNtKGNvZGVjLCBjcGNtKTsKLQkJCWlmIChlcnIgPCAwKQotCQkJCXJldHVybiBlcnI7CisJCQlpZiAoZXJyIDwgMCkgeworCQkJCXByaW50ayhLRVJOX0VSUiAiaGRhX2NvZGVjOiBjYW5ub3QgYXR0YWNoICIKKwkJCQkgICAgICAgIlBDTSBzdHJlYW0gJWQgZm9yIGNvZGVjICMlZFxuIiwKKwkJCQkgICAgICAgZGV2LCBjb2RlYy0+YWRkcik7CisJCQkJY29udGludWU7IC8qIG5vIGZhdGFsIGVycm9yICovCisJCQl9CiAJCX0KIAl9CiAJcmV0dXJuIDA7CkBAIC0zMzI0LDggKzM1OTksNyBAQAogCQlpZiAoaWdub3JlX25pZHMgJiYgaXNfaW5fbmlkX2xpc3QobmlkLCBpZ25vcmVfbmlkcykpCiAJCQljb250aW51ZTsKIAotCQlkZWZfY29uZiA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLCAwLAotCQkJCQkgICAgICBBQ19WRVJCX0dFVF9DT05GSUdfREVGQVVMVCwgMCk7CisJCWRlZl9jb25mID0gc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKGNvZGVjLCBuaWQpOwogCQlpZiAoZ2V0X2RlZmNmZ19jb25uZWN0KGRlZl9jb25mKSA9PSBBQ19KQUNLX1BPUlRfTk9ORSkKIAkJCWNvbnRpbnVlOwogCQlsb2MgPSBnZXRfZGVmY2ZnX2xvY2F0aW9uKGRlZl9jb25mKTsKQEAgLTM0MDEsMTAgKzM2NzUsMjIgQEAKIAkJCWNmZy0+aW5wdXRfcGluc1tBVVRPX1BJTl9BVVhdID0gbmlkOwogCQkJYnJlYWs7CiAJCWNhc2UgQUNfSkFDS19TUERJRl9PVVQ6Ci0JCQljZmctPmRpZ19vdXRfcGluID0gbmlkOworCQljYXNlIEFDX0pBQ0tfRElHX09USEVSX09VVDoKKwkJCWlmIChjZmctPmRpZ19vdXRzID49IEFSUkFZX1NJWkUoY2ZnLT5kaWdfb3V0X3BpbnMpKQorCQkJCWNvbnRpbnVlOworCQkJY2ZnLT5kaWdfb3V0X3BpbnNbY2ZnLT5kaWdfb3V0c10gPSBuaWQ7CisJCQljZmctPmRpZ19vdXRfdHlwZVtjZmctPmRpZ19vdXRzXSA9CisJCQkJKGxvYyA9PSBBQ19KQUNLX0xPQ19IRE1JKSA/CisJCQkJSERBX1BDTV9UWVBFX0hETUkgOiBIREFfUENNX1RZUEVfU1BESUY7CisJCQljZmctPmRpZ19vdXRzKys7CiAJCQlicmVhazsKIAkJY2FzZSBBQ19KQUNLX1NQRElGX0lOOgorCQljYXNlIEFDX0pBQ0tfRElHX09USEVSX0lOOgogCQkJY2ZnLT5kaWdfaW5fcGluID0gbmlkOworCQkJaWYgKGxvYyA9PSBBQ19KQUNLX0xPQ19IRE1JKQorCQkJCWNmZy0+ZGlnX2luX3R5cGUgPSBIREFfUENNX1RZUEVfSERNSTsKKwkJCWVsc2UKKwkJCQljZmctPmRpZ19pbl90eXBlID0gSERBX1BDTV9UWVBFX1NQRElGOwogCQkJYnJlYWs7CiAJCX0KIAl9CkBAIC0zNTEwLDYgKzM3OTYsOSBAQAogCQkgICBjZmctPmhwX3BpbnNbMV0sIGNmZy0+aHBfcGluc1syXSwKIAkJICAgY2ZnLT5ocF9waW5zWzNdLCBjZmctPmhwX3BpbnNbNF0pOwogCXNuZF9wcmludGQoIiAgIG1vbm86IG1vbm9fb3V0PTB4JXhcbiIsIGNmZy0+bW9ub19vdXRfcGluKTsKKwlpZiAoY2ZnLT5kaWdfb3V0cykKKwkJc25kX3ByaW50ZCgiICAgZGlnLW91dD0weCV4LzB4JXhcbiIsCisJCQkgICBjZmctPmRpZ19vdXRfcGluc1swXSwgY2ZnLT5kaWdfb3V0X3BpbnNbMV0pOwogCXNuZF9wcmludGQoIiAgIGlucHV0czogbWljPTB4JXgsIGZtaWM9MHgleCwgbGluZT0weCV4LCBmbGluZT0weCV4LCIKIAkJICAgIiBjZD0weCV4LCBhdXg9MHgleFxuIiwKIAkJICAgY2ZnLT5pbnB1dF9waW5zW0FVVE9fUElOX01JQ10sCkBAIC0zNTE4LDYgKzM4MDcsOCBAQAogCQkgICBjZmctPmlucHV0X3BpbnNbQVVUT19QSU5fRlJPTlRfTElORV0sCiAJCSAgIGNmZy0+aW5wdXRfcGluc1tBVVRPX1BJTl9DRF0sCiAJCSAgIGNmZy0+aW5wdXRfcGluc1tBVVRPX1BJTl9BVVhdKTsKKwlpZiAoY2ZnLT5kaWdfaW5fcGluKQorCQlzbmRfcHJpbnRkKCIgICBkaWctaW49MHgleFxuIiwgY2ZnLT5kaWdfaW5fcGluKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuaCBiL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmgKaW5kZXggMDlhMzMyYS4uMmZkZWNmNCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuaAorKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9jb2RlYy5oCkBAIC03MzksNiArNzM5LDcgQEAKIAloZGFfbmlkX3QgbWZnOwkvKiBNRkcgbm9kZSBpZCAqLwogCiAJLyogaWRzICovCisJdTMyIGZ1bmN0aW9uX2lkOwogCXUzMiB2ZW5kb3JfaWQ7CiAJdTMyIHN1YnN5c3RlbV9pZDsKIAl1MzIgcmV2aXNpb25faWQ7CkBAIC03NzgsMTEgKzc3OSwxNCBAQAogCXVuc2lnbmVkIHNob3J0IHNwZGlmX2N0bHM7CS8qIFNQRElGIGNvbnRyb2wgYml0cyAqLwogCXVuc2lnbmVkIGludCBzcGRpZl9pbl9lbmFibGU7CS8qIFNQRElGIGlucHV0IGVuYWJsZT8gKi8KIAloZGFfbmlkX3QgKnNsYXZlX2RpZ19vdXRzOyAvKiBvcHRpb25hbCBkaWdpdGFsIG91dCBzbGF2ZSB3aWRnZXRzICovCisJc3RydWN0IHNuZF9hcnJheSBpbml0X3BpbnM7CS8qIGluaXRpYWwgKEJJT1MpIHBpbiBjb25maWd1cmF0aW9ucyAqLworCXN0cnVjdCBzbmRfYXJyYXkgZHJpdmVyX3BpbnM7CS8qIHBpbiBjb25maWdzIHNldCBieSBjb2RlYyBwYXJzZXIgKi8KIAogI2lmZGVmIENPTkZJR19TTkRfSERBX0hXREVQCiAJc3RydWN0IHNuZF9od2RlcCAqaHdkZXA7CS8qIGFzc2lnbmVkIGh3ZGVwIGRldmljZSAqLwogCXN0cnVjdCBzbmRfYXJyYXkgaW5pdF92ZXJiczsJLyogYWRkaXRpb25hbCBpbml0IHZlcmJzICovCiAJc3RydWN0IHNuZF9hcnJheSBoaW50czsJCS8qIGFkZGl0aW9uYWwgaGludHMgKi8KKwlzdHJ1Y3Qgc25kX2FycmF5IHVzZXJfcGluczsJLyogZGVmYXVsdCBwaW4gY29uZmlncyB0byBvdmVycmlkZSAqLwogI2VuZGlmCiAKIAkvKiBtaXNjIGZsYWdzICovCkBAIC03OTAsNiArNzk0LDkgQEAKIAkJCQkJICAgICAqIHN0YXR1cyBjaGFuZ2UKIAkJCQkJICAgICAqIChlLmcuIFJlYWx0ZWsgY29kZWNzKQogCQkJCQkgICAgICovCisJdW5zaWduZWQgaW50IHBpbl9hbXBfd29ya2Fyb3VuZDoxOyAvKiBwaW4gb3V0LWFtcCB0YWtlcyBpbmRleAorCQkJCQkgICAgKiAoZS5nLiBDb25leGFudCBjb2RlY3MpCisJCQkJCSAgICAqLwogI2lmZGVmIENPTkZJR19TTkRfSERBX1BPV0VSX1NBVkUKIAl1bnNpZ25lZCBpbnQgcG93ZXJfb24gOjE7CS8qIGN1cnJlbnQgKGdsb2JhbCkgcG93ZXItc3RhdGUgKi8KIAl1bnNpZ25lZCBpbnQgcG93ZXJfdHJhbnNpdGlvbiA6MTsgLyogcG93ZXItc3RhdGUgaW4gdHJhbnNpdGlvbiAqLwpAQCAtODU1LDYgKzg2MiwxOCBAQAogI2RlZmluZSBzbmRfaGRhX3NlcXVlbmNlX3dyaXRlX2NhY2hlCXNuZF9oZGFfc2VxdWVuY2Vfd3JpdGUKICNlbmRpZgogCisvKiB0aGUgc3RydWN0IGZvciBjb2RlYy0+cGluX2NvbmZpZ3MgKi8KK3N0cnVjdCBoZGFfcGluY2ZnIHsKKwloZGFfbmlkX3QgbmlkOworCXVuc2lnbmVkIGludCBjZmc7Cit9OworCit1bnNpZ25lZCBpbnQgc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkKTsKK2ludCBzbmRfaGRhX2NvZGVjX3NldF9waW5jZmcoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQsCisJCQkgICAgIHVuc2lnbmVkIGludCBjZmcpOworaW50IHNuZF9oZGFfYWRkX3BpbmNmZyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgc3RydWN0IHNuZF9hcnJheSAqbGlzdCwKKwkJICAgICAgIGhkYV9uaWRfdCBuaWQsIHVuc2lnbmVkIGludCBjZmcpOyAvKiBmb3IgaHdkZXAgKi8KKwogLyoKICAqIE1peGVyCiAgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX2dlbmVyaWMuYyBiL3NvdW5kL3BjaS9oZGEvaGRhX2dlbmVyaWMuYwppbmRleCA2NTc0NWU5Li4xZDU3OTdhIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL2hkYV9nZW5lcmljLmMKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfZ2VuZXJpYy5jCkBAIC0xNDQsOSArMTQ0LDkgQEAKIAlub2RlLT50eXBlID0gKG5vZGUtPndpZF9jYXBzICYgQUNfV0NBUF9UWVBFKSA+PiBBQ19XQ0FQX1RZUEVfU0hJRlQ7CiAKIAlpZiAobm9kZS0+dHlwZSA9PSBBQ19XSURfUElOKSB7Ci0JCW5vZGUtPnBpbl9jYXBzID0gc25kX2hkYV9wYXJhbV9yZWFkKGNvZGVjLCBub2RlLT5uaWQsIEFDX1BBUl9QSU5fQ0FQKTsKKwkJbm9kZS0+cGluX2NhcHMgPSBzbmRfaGRhX3F1ZXJ5X3Bpbl9jYXBzKGNvZGVjLCBub2RlLT5uaWQpOwogCQlub2RlLT5waW5fY3RsID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBub2RlLT5uaWQsIDAsIEFDX1ZFUkJfR0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMCk7Ci0JCW5vZGUtPmRlZl9jZmcgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIG5vZGUtPm5pZCwgMCwgQUNfVkVSQl9HRVRfQ09ORklHX0RFRkFVTFQsIDApOworCQlub2RlLT5kZWZfY2ZnID0gc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKGNvZGVjLCBub2RlLT5uaWQpOwogCX0KIAogCWlmIChub2RlLT53aWRfY2FwcyAmIEFDX1dDQVBfT1VUX0FNUCkgewpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9oZGFfaHdkZXAuYyBiL3NvdW5kL3BjaS9oZGEvaGRhX2h3ZGVwLmMKaW5kZXggNGFlNTFkYy4uMWM1NzUwNSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfaHdkZXAuYworKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9od2RlcC5jCkBAIC0zMCw2ICszMCwxMiBAQAogI2luY2x1ZGUgPHNvdW5kL2hkYV9od2RlcC5oPgogI2luY2x1ZGUgPHNvdW5kL21pbm9ycy5oPgogCisvKiBoaW50IHN0cmluZyBwYWlyICovCitzdHJ1Y3QgaGRhX2hpbnQgeworCWNvbnN0IGNoYXIgKmtleTsKKwljb25zdCBjaGFyICp2YWw7CS8qIGNvbnRhaW5lZCBpbiB0aGUgc2FtZSBhbGxvYyBhcyBrZXkgKi8KK307CisKIC8qCiAgKiB3cml0ZS9yZWFkIGFuIG91dC1vZi1ib3VuZCB2ZXJiCiAgKi8KQEAgLTk5LDE2ICsxMDUsMTcgQEAKIAogc3RhdGljIHZvaWQgY2xlYXJfaHdkZXBfZWxlbWVudHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7Ci0JY2hhciAqKmhlYWQ7CiAJaW50IGk7CiAKIAkvKiBjbGVhciBpbml0IHZlcmJzICovCiAJc25kX2FycmF5X2ZyZWUoJmNvZGVjLT5pbml0X3ZlcmJzKTsKIAkvKiBjbGVhciBoaW50cyAqLwotCWhlYWQgPSBjb2RlYy0+aGludHMubGlzdDsKLQlmb3IgKGkgPSAwOyBpIDwgY29kZWMtPmhpbnRzLnVzZWQ7IGkrKywgaGVhZCsrKQotCQlrZnJlZSgqaGVhZCk7CisJZm9yIChpID0gMDsgaSA8IGNvZGVjLT5oaW50cy51c2VkOyBpKyspIHsKKwkJc3RydWN0IGhkYV9oaW50ICpoaW50ID0gc25kX2FycmF5X2VsZW0oJmNvZGVjLT5oaW50cywgaSk7CisJCWtmcmVlKGhpbnQtPmtleSk7IC8qIHdlIGRvbid0IG5lZWQgdG8gZnJlZSBoaW50LT52YWwgKi8KKwl9CiAJc25kX2FycmF5X2ZyZWUoJmNvZGVjLT5oaW50cyk7CisJc25kX2FycmF5X2ZyZWUoJmNvZGVjLT51c2VyX3BpbnMpOwogfQogCiBzdGF0aWMgdm9pZCBod2RlcF9mcmVlKHN0cnVjdCBzbmRfaHdkZXAgKmh3ZGVwKQpAQCAtMTQwLDcgKzE0Nyw4IEBACiAjZW5kaWYKIAogCXNuZF9hcnJheV9pbml0KCZjb2RlYy0+aW5pdF92ZXJicywgc2l6ZW9mKHN0cnVjdCBoZGFfdmVyYiksIDMyKTsKLQlzbmRfYXJyYXlfaW5pdCgmY29kZWMtPmhpbnRzLCBzaXplb2YoY2hhciAqKSwgMzIpOworCXNuZF9hcnJheV9pbml0KCZjb2RlYy0+aGludHMsIHNpemVvZihzdHJ1Y3QgaGRhX2hpbnQpLCAzMik7CisJc25kX2FycmF5X2luaXQoJmNvZGVjLT51c2VyX3BpbnMsIHNpemVvZihzdHJ1Y3QgaGRhX3BpbmNmZyksIDE2KTsKIAogCXJldHVybiAwOwogfQpAQCAtMTUzLDcgKzE2MSwxMyBAQAogCiBzdGF0aWMgaW50IGNsZWFyX2NvZGVjKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewotCXNuZF9oZGFfY29kZWNfcmVzZXQoY29kZWMpOworCWludCBlcnI7CisKKwllcnIgPSBzbmRfaGRhX2NvZGVjX3Jlc2V0KGNvZGVjKTsKKwlpZiAoZXJyIDwgMCkgeworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJUaGUgY29kZWMgaXMgYmVpbmcgdXNlZCwgY2FuJ3QgZnJlZS5cbiIpOworCQlyZXR1cm4gZXJyOworCX0KIAljbGVhcl9od2RlcF9lbGVtZW50cyhjb2RlYyk7CiAJcmV0dXJuIDA7CiB9CkBAIC0xNjIsMjAgKzE3NiwyOSBAQAogewogCWludCBlcnI7CiAKKwlzbmRfaGRhX3Bvd2VyX3VwKGNvZGVjKTsKIAlzbmRfcHJpbnRrKEtFUk5fSU5GTyAiaGRhLWNvZGVjOiByZWNvbmZpZ3VyaW5nXG4iKTsKLQlzbmRfaGRhX2NvZGVjX3Jlc2V0KGNvZGVjKTsKKwllcnIgPSBzbmRfaGRhX2NvZGVjX3Jlc2V0KGNvZGVjKTsKKwlpZiAoZXJyIDwgMCkgeworCQlzbmRfcHJpbnRrKEtFUk5fRVJSCisJCQkgICAiVGhlIGNvZGVjIGlzIGJlaW5nIHVzZWQsIGNhbid0IHJlY29uZmlndXJlLlxuIik7CisJCWdvdG8gZXJyb3I7CisJfQogCWVyciA9IHNuZF9oZGFfY29kZWNfY29uZmlndXJlKGNvZGVjKTsKIAlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKKwkJZ290byBlcnJvcjsKIAkvKiByZWJ1aWxkIFBDTXMgKi8KIAllcnIgPSBzbmRfaGRhX2NvZGVjX2J1aWxkX3BjbXMoY29kZWMpOwogCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOworCQlnb3RvIGVycm9yOwogCS8qIHJlYnVpbGQgbWl4ZXJzICovCiAJZXJyID0gc25kX2hkYV9jb2RlY19idWlsZF9jb250cm9scyhjb2RlYyk7CiAJaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7Ci0JcmV0dXJuIHNuZF9jYXJkX3JlZ2lzdGVyKGNvZGVjLT5idXMtPmNhcmQpOworCQlnb3RvIGVycm9yOworCWVyciA9IHNuZF9jYXJkX3JlZ2lzdGVyKGNvZGVjLT5idXMtPmNhcmQpOworIGVycm9yOgorCXNuZF9oZGFfcG93ZXJfZG93bihjb2RlYyk7CisJcmV0dXJuIGVycjsKIH0KIAogLyoKQEAgLTI3MSw2ICsyOTQsMjIgQEAKIENPREVDX0FDVElPTl9TVE9SRShyZWNvbmZpZyk7CiBDT0RFQ19BQ1RJT05fU1RPUkUoY2xlYXIpOwogCitzdGF0aWMgc3NpemVfdCBpbml0X3ZlcmJzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgICAgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc25kX2h3ZGVwICpod2RlcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gaHdkZXAtPnByaXZhdGVfZGF0YTsKKwlpbnQgaSwgbGVuID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgY29kZWMtPmluaXRfdmVyYnMudXNlZDsgaSsrKSB7CisJCXN0cnVjdCBoZGFfdmVyYiAqdiA9IHNuZF9hcnJheV9lbGVtKCZjb2RlYy0+aW5pdF92ZXJicywgaSk7CisJCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIFBBR0VfU0laRSAtIGxlbiwKKwkJCQkiMHglMDJ4IDB4JTAzeCAweCUwNHhcbiIsCisJCQkJdi0+bmlkLCB2LT52ZXJiLCB2LT5wYXJhbSk7CisJfQorCXJldHVybiBsZW47Cit9CisKIHN0YXRpYyBzc2l6ZV90IGluaXRfdmVyYnNfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAogCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQpAQCAtMjkzLDI2ICszMzIsMTU3IEBACiAJcmV0dXJuIGNvdW50OwogfQogCitzdGF0aWMgc3NpemVfdCBoaW50c19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc25kX2h3ZGVwICpod2RlcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gaHdkZXAtPnByaXZhdGVfZGF0YTsKKwlpbnQgaSwgbGVuID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgY29kZWMtPmhpbnRzLnVzZWQ7IGkrKykgeworCQlzdHJ1Y3QgaGRhX2hpbnQgKmhpbnQgPSBzbmRfYXJyYXlfZWxlbSgmY29kZWMtPmhpbnRzLCBpKTsKKwkJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgUEFHRV9TSVpFIC0gbGVuLAorCQkJCSIlcyA9ICVzXG4iLCBoaW50LT5rZXksIGhpbnQtPnZhbCk7CisJfQorCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaGRhX2hpbnQgKmdldF9oaW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBjb25zdCBjaGFyICprZXkpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY29kZWMtPmhpbnRzLnVzZWQ7IGkrKykgeworCQlzdHJ1Y3QgaGRhX2hpbnQgKmhpbnQgPSBzbmRfYXJyYXlfZWxlbSgmY29kZWMtPmhpbnRzLCBpKTsKKwkJaWYgKCFzdHJjbXAoaGludC0+a2V5LCBrZXkpKQorCQkJcmV0dXJuIGhpbnQ7CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCByZW1vdmVfdHJhaWxfc3BhY2VzKGNoYXIgKnN0cikKK3sKKwljaGFyICpwOworCWlmICghKnN0cikKKwkJcmV0dXJuOworCXAgPSBzdHIgKyBzdHJsZW4oc3RyKSAtIDE7CisJZm9yICg7IGlzc3BhY2UoKnApOyBwLS0pIHsKKwkJKnAgPSAwOworCQlpZiAocCA9PSBzdHIpCisJCQlyZXR1cm47CisJfQorfQorCisjZGVmaW5lIE1BWF9ISU5UUwkxMDI0CisKIHN0YXRpYyBzc2l6ZV90IGhpbnRzX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJc3RydWN0IHNuZF9od2RlcCAqaHdkZXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IGh3ZGVwLT5wcml2YXRlX2RhdGE7Ci0JY2hhciAqcDsKLQljaGFyICoqaGludDsKKwljaGFyICprZXksICp2YWw7CisJc3RydWN0IGhkYV9oaW50ICpoaW50OwogCi0JaWYgKCEqYnVmIHx8IGlzc3BhY2UoKmJ1ZikgfHwgKmJ1ZiA9PSAnIycgfHwgKmJ1ZiA9PSAnXG4nKQorCXdoaWxlIChpc3NwYWNlKCpidWYpKQorCQlidWYrKzsKKwlpZiAoISpidWYgfHwgKmJ1ZiA9PSAnIycgfHwgKmJ1ZiA9PSAnXG4nKQogCQlyZXR1cm4gY291bnQ7Ci0JcCA9IGtzdHJuZHVwX25vZW9sKGJ1ZiwgMTAyNCk7Ci0JaWYgKCFwKQorCWlmICgqYnVmID09ICc9JykKKwkJcmV0dXJuIC1FSU5WQUw7CisJa2V5ID0ga3N0cm5kdXBfbm9lb2woYnVmLCAxMDI0KTsKKwlpZiAoIWtleSkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JaGludCA9IHNuZF9hcnJheV9uZXcoJmNvZGVjLT5oaW50cyk7CisJLyogZXh0cmFjdCBrZXkgYW5kIHZhbCAqLworCXZhbCA9IHN0cmNocihrZXksICc9Jyk7CisJaWYgKCF2YWwpIHsKKwkJa2ZyZWUoa2V5KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCSp2YWwrKyA9IDA7CisJd2hpbGUgKGlzc3BhY2UoKnZhbCkpCisJCXZhbCsrOworCXJlbW92ZV90cmFpbF9zcGFjZXMoa2V5KTsKKwlyZW1vdmVfdHJhaWxfc3BhY2VzKHZhbCk7CisJaGludCA9IGdldF9oaW50KGNvZGVjLCBrZXkpOworCWlmIChoaW50KSB7CisJCS8qIHJlcGxhY2UgKi8KKwkJa2ZyZWUoaGludC0+a2V5KTsKKwkJaGludC0+a2V5ID0ga2V5OworCQloaW50LT52YWwgPSB2YWw7CisJCXJldHVybiBjb3VudDsKKwl9CisJLyogYWxsb2NhdGUgYSBuZXcgaGludCBlbnRyeSAqLworCWlmIChjb2RlYy0+aGludHMudXNlZCA+PSBNQVhfSElOVFMpCisJCWhpbnQgPSBOVUxMOworCWVsc2UKKwkJaGludCA9IHNuZF9hcnJheV9uZXcoJmNvZGVjLT5oaW50cyk7CiAJaWYgKCFoaW50KSB7Ci0JCWtmcmVlKHApOworCQlrZnJlZShrZXkpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JKmhpbnQgPSBwOworCWhpbnQtPmtleSA9IGtleTsKKwloaW50LT52YWwgPSB2YWw7CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBwaW5fY29uZmlnc19zaG93KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorCQkJCXN0cnVjdCBzbmRfYXJyYXkgKmxpc3QsCisJCQkJY2hhciAqYnVmKQoreworCWludCBpLCBsZW4gPSAwOworCWZvciAoaSA9IDA7IGkgPCBsaXN0LT51c2VkOyBpKyspIHsKKwkJc3RydWN0IGhkYV9waW5jZmcgKnBpbiA9IHNuZF9hcnJheV9lbGVtKGxpc3QsIGkpOworCQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICIweCUwMnggMHglMDh4XG4iLAorCQkJICAgICAgIHBpbi0+bmlkLCBwaW4tPmNmZyk7CisJfQorCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBzc2l6ZV90IGluaXRfcGluX2NvbmZpZ3Nfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgICAgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc25kX2h3ZGVwICpod2RlcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gaHdkZXAtPnByaXZhdGVfZGF0YTsKKwlyZXR1cm4gcGluX2NvbmZpZ3Nfc2hvdyhjb2RlYywgJmNvZGVjLT5pbml0X3BpbnMsIGJ1Zik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHVzZXJfcGluX2NvbmZpZ3Nfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgICAgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc25kX2h3ZGVwICpod2RlcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gaHdkZXAtPnByaXZhdGVfZGF0YTsKKwlyZXR1cm4gcGluX2NvbmZpZ3Nfc2hvdyhjb2RlYywgJmNvZGVjLT51c2VyX3BpbnMsIGJ1Zik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGRyaXZlcl9waW5fY29uZmlnc19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICAgICAgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc25kX2h3ZGVwICpod2RlcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gaHdkZXAtPnByaXZhdGVfZGF0YTsKKwlyZXR1cm4gcGluX2NvbmZpZ3Nfc2hvdyhjb2RlYywgJmNvZGVjLT5kcml2ZXJfcGlucywgYnVmKTsKK30KKworI2RlZmluZSBNQVhfUElOX0NPTkZJR1MJCTMyCisKK3N0YXRpYyBzc2l6ZV90IHVzZXJfcGluX2NvbmZpZ3Nfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCSAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBzbmRfaHdkZXAgKmh3ZGVwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGhkYV9jb2RlYyAqY29kZWMgPSBod2RlcC0+cHJpdmF0ZV9kYXRhOworCWludCBuaWQsIGNmZzsKKwlpbnQgZXJyOworCisJaWYgKHNzY2FuZihidWYsICIlaSAlaSIsICZuaWQsICZjZmcpICE9IDIpCisJCXJldHVybiAtRUlOVkFMOworCWlmICghbmlkKQorCQlyZXR1cm4gLUVJTlZBTDsKKwllcnIgPSBzbmRfaGRhX2FkZF9waW5jZmcoY29kZWMsICZjb2RlYy0+dXNlcl9waW5zLCBuaWQsIGNmZyk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAJcmV0dXJuIGNvdW50OwogfQogCkBAIC0zMzEsOCArNTAxLDExIEBACiAJQ09ERUNfQVRUUl9STyhtZmcpLAogCUNPREVDX0FUVFJfUlcobmFtZSksCiAJQ09ERUNfQVRUUl9SVyhtb2RlbG5hbWUpLAotCUNPREVDX0FUVFJfV08oaW5pdF92ZXJicyksCi0JQ09ERUNfQVRUUl9XTyhoaW50cyksCisJQ09ERUNfQVRUUl9SVyhpbml0X3ZlcmJzKSwKKwlDT0RFQ19BVFRSX1JXKGhpbnRzKSwKKwlDT0RFQ19BVFRSX1JPKGluaXRfcGluX2NvbmZpZ3MpLAorCUNPREVDX0FUVFJfUlcodXNlcl9waW5fY29uZmlncyksCisJQ09ERUNfQVRUUl9STyhkcml2ZXJfcGluX2NvbmZpZ3MpLAogCUNPREVDX0FUVFJfV08ocmVjb25maWcpLAogCUNPREVDX0FUVFJfV08oY2xlYXIpLAogfTsKQEAgLTM1MSw0ICs1MjQsMjkgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoKKyAqIExvb2sgZm9yIGhpbnQgc3RyaW5nCisgKi8KK2NvbnN0IGNoYXIgKnNuZF9oZGFfZ2V0X2hpbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGNvbnN0IGNoYXIgKmtleSkKK3sKKwlzdHJ1Y3QgaGRhX2hpbnQgKmhpbnQgPSBnZXRfaGludChjb2RlYywga2V5KTsKKwlyZXR1cm4gaGludCA/IGhpbnQtPnZhbCA6IE5VTEw7Cit9CitFWFBPUlRfU1lNQk9MX0hEQShzbmRfaGRhX2dldF9oaW50KTsKKworaW50IHNuZF9oZGFfZ2V0X2Jvb2xfaGludChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgY29uc3QgY2hhciAqa2V5KQoreworCWNvbnN0IGNoYXIgKnAgPSBzbmRfaGRhX2dldF9oaW50KGNvZGVjLCBrZXkpOworCWlmICghcCB8fCAhKnApCisJCXJldHVybiAtRU5PRU5UOworCXN3aXRjaCAodG91cHBlcigqcCkpIHsKKwljYXNlICdUJzogLyogdHJ1ZSAqLworCWNhc2UgJ1knOiAvKiB5ZXMgKi8KKwljYXNlICcxJzoKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9IREEoc25kX2hkYV9nZXRfYm9vbF9oaW50KTsKKwogI2VuZGlmIC8qIENPTkZJR19TTkRfSERBX1JFQ09ORklHICovCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL2hkYV9pbnRlbC5jIGIvc291bmQvcGNpL2hkYS9oZGFfaW50ZWwuYwppbmRleCBmM2I1NzIzLi4zMDgyOWVlIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL2hkYV9pbnRlbC5jCisrKyBiL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMKQEAgLTM4MSw2ICszODEsNyBAQAogCiAJLyogSEQgY29kZWMgKi8KIAl1bnNpZ25lZCBzaG9ydCBjb2RlY19tYXNrOworCWludCAgY29kZWNfcHJvYmVfbWFzazsgLyogY29waWVkIGZyb20gcHJvYmVfbWFzayBvcHRpb24gKi8KIAlzdHJ1Y3QgaGRhX2J1cyAqYnVzOwogCiAJLyogQ09SQi9SSVJCICovCkBAIC04NTgsMTMgKzg1OSwxOCBAQAogCQkgICAgICBTRF9DVExfRE1BX1NUQVJUIHwgU0RfSU5UX01BU0spOwogfQogCi0vKiBzdG9wIGEgc3RyZWFtICovCi1zdGF0aWMgdm9pZCBhenhfc3RyZWFtX3N0b3Aoc3RydWN0IGF6eCAqY2hpcCwgc3RydWN0IGF6eF9kZXYgKmF6eF9kZXYpCisvKiBzdG9wIERNQSAqLworc3RhdGljIHZvaWQgYXp4X3N0cmVhbV9jbGVhcihzdHJ1Y3QgYXp4ICpjaGlwLCBzdHJ1Y3QgYXp4X2RldiAqYXp4X2RldikKIHsKLQkvKiBzdG9wIERNQSAqLwogCWF6eF9zZF93cml0ZWIoYXp4X2RldiwgU0RfQ1RMLCBhenhfc2RfcmVhZGIoYXp4X2RldiwgU0RfQ1RMKSAmCiAJCSAgICAgIH4oU0RfQ1RMX0RNQV9TVEFSVCB8IFNEX0lOVF9NQVNLKSk7CiAJYXp4X3NkX3dyaXRlYihhenhfZGV2LCBTRF9TVFMsIFNEX0lOVF9NQVNLKTsgLyogdG8gYmUgc3VyZSAqLworfQorCisvKiBzdG9wIGEgc3RyZWFtICovCitzdGF0aWMgdm9pZCBhenhfc3RyZWFtX3N0b3Aoc3RydWN0IGF6eCAqY2hpcCwgc3RydWN0IGF6eF9kZXYgKmF6eF9kZXYpCit7CisJYXp4X3N0cmVhbV9jbGVhcihjaGlwLCBhenhfZGV2KTsKIAkvKiBkaXNhYmxlIFNJRSAqLwogCWF6eF93cml0ZWIoY2hpcCwgSU5UQ1RMLAogCQkgICBhenhfcmVhZGIoY2hpcCwgSU5UQ1RMKSAmIH4oMSA8PCBhenhfZGV2LT5pbmRleCkpOwpAQCAtMTA3NSw4ICsxMDgxLDcgQEAKIAlhenhfc2Rfd3JpdGVsKGF6eF9kZXYsIFNEX0JETFBMLCAwKTsKIAlhenhfc2Rfd3JpdGVsKGF6eF9kZXYsIFNEX0JETFBVLCAwKTsKIAotCXBlcmlvZF9ieXRlcyA9IHNuZF9wY21fbGliX3BlcmlvZF9ieXRlcyhzdWJzdHJlYW0pOwotCWF6eF9kZXYtPnBlcmlvZF9ieXRlcyA9IHBlcmlvZF9ieXRlczsKKwlwZXJpb2RfYnl0ZXMgPSBhenhfZGV2LT5wZXJpb2RfYnl0ZXM7CiAJcGVyaW9kcyA9IGF6eF9kZXYtPmJ1ZnNpemUgLyBwZXJpb2RfYnl0ZXM7CiAKIAkvKiBwcm9ncmFtIHRoZSBpbml0aWFsIEJETCBlbnRyaWVzICovCkBAIC0xMTIzLDI0ICsxMTI4LDE3IEBACiAgZXJyb3I6CiAJc25kX3ByaW50ayhLRVJOX0VSUiAiVG9vIG1hbnkgQkRMIGVudHJpZXM6IGJ1ZmZlcj0lZCwgcGVyaW9kPSVkXG4iLAogCQkgICBhenhfZGV2LT5idWZzaXplLCBwZXJpb2RfYnl0ZXMpOwotCS8qIHJlc2V0ICovCi0JYXp4X3NkX3dyaXRlbChhenhfZGV2LCBTRF9CRExQTCwgMCk7Ci0JYXp4X3NkX3dyaXRlbChhenhfZGV2LCBTRF9CRExQVSwgMCk7CiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLS8qCi0gKiBzZXQgdXAgdGhlIFNEIGZvciBzdHJlYW1pbmcKLSAqLwotc3RhdGljIGludCBhenhfc2V0dXBfY29udHJvbGxlcihzdHJ1Y3QgYXp4ICpjaGlwLCBzdHJ1Y3QgYXp4X2RldiAqYXp4X2RldikKKy8qIHJlc2V0IHN0cmVhbSAqLworc3RhdGljIHZvaWQgYXp4X3N0cmVhbV9yZXNldChzdHJ1Y3QgYXp4ICpjaGlwLCBzdHJ1Y3QgYXp4X2RldiAqYXp4X2RldikKIHsKIAl1bnNpZ25lZCBjaGFyIHZhbDsKIAlpbnQgdGltZW91dDsKIAotCS8qIG1ha2Ugc3VyZSB0aGUgcnVuIGJpdCBpcyB6ZXJvIGZvciBTRCAqLwotCWF6eF9zZF93cml0ZWIoYXp4X2RldiwgU0RfQ1RMLCBhenhfc2RfcmVhZGIoYXp4X2RldiwgU0RfQ1RMKSAmCi0JCSAgICAgIH5TRF9DVExfRE1BX1NUQVJUKTsKLQkvKiByZXNldCBzdHJlYW0gKi8KKwlhenhfc3RyZWFtX2NsZWFyKGNoaXAsIGF6eF9kZXYpOworCiAJYXp4X3NkX3dyaXRlYihhenhfZGV2LCBTRF9DVEwsIGF6eF9zZF9yZWFkYihhenhfZGV2LCBTRF9DVEwpIHwKIAkJICAgICAgU0RfQ1RMX1NUUkVBTV9SRVNFVCk7CiAJdWRlbGF5KDMpOwpAQCAtMTE1Nyw3ICsxMTU1LDE1IEBACiAJd2hpbGUgKCgodmFsID0gYXp4X3NkX3JlYWRiKGF6eF9kZXYsIFNEX0NUTCkpICYgU0RfQ1RMX1NUUkVBTV9SRVNFVCkgJiYKIAkgICAgICAgLS10aW1lb3V0KQogCQk7Cit9CiAKKy8qCisgKiBzZXQgdXAgdGhlIFNEIGZvciBzdHJlYW1pbmcKKyAqLworc3RhdGljIGludCBhenhfc2V0dXBfY29udHJvbGxlcihzdHJ1Y3QgYXp4ICpjaGlwLCBzdHJ1Y3QgYXp4X2RldiAqYXp4X2RldikKK3sKKwkvKiBtYWtlIHN1cmUgdGhlIHJ1biBiaXQgaXMgemVybyBmb3IgU0QgKi8KKwlhenhfc3RyZWFtX2NsZWFyKGNoaXAsIGF6eF9kZXYpOwogCS8qIHByb2dyYW0gdGhlIHN0cmVhbV90YWcgKi8KIAlhenhfc2Rfd3JpdGVsKGF6eF9kZXYsIFNEX0NUTCwKIAkJICAgICAgKGF6eF9zZF9yZWFkbChhenhfZGV2LCBTRF9DVEwpICYgflNEX0NUTF9TVFJFQU1fVEFHX01BU0spfApAQCAtMTIyOCw3ICsxMjM0LDYgQEAKIH07CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGF6eF9jb2RlY19jcmVhdGUoc3RydWN0IGF6eCAqY2hpcCwgY29uc3QgY2hhciAqbW9kZWwsCi0JCQkJICAgICAgdW5zaWduZWQgaW50IGNvZGVjX3Byb2JlX21hc2ssCiAJCQkJICAgICAgaW50IG5vX2luaXQpCiB7CiAJc3RydWN0IGhkYV9idXNfdGVtcGxhdGUgYnVzX3RlbXA7CkBAIC0xMjYxLDcgKzEyNjYsNyBAQAogCiAJLyogRmlyc3QgdHJ5IHRvIHByb2JlIGFsbCBnaXZlbiBjb2RlYyBzbG90cyAqLwogCWZvciAoYyA9IDA7IGMgPCBtYXhfc2xvdHM7IGMrKykgewotCQlpZiAoKGNoaXAtPmNvZGVjX21hc2sgJiAoMSA8PCBjKSkgJiBjb2RlY19wcm9iZV9tYXNrKSB7CisJCWlmICgoY2hpcC0+Y29kZWNfbWFzayAmICgxIDw8IGMpKSAmIGNoaXAtPmNvZGVjX3Byb2JlX21hc2spIHsKIAkJCWlmIChwcm9iZV9jb2RlYyhjaGlwLCBjKSA8IDApIHsKIAkJCQkvKiBTb21lIEJJT1NlbiBnaXZlIHlvdSB3cm9uZyBjb2RlYyBhZGRyZXNzZXMKIAkJCQkgKiB0aGF0IGRvbid0IGV4aXN0CkBAIC0xMjg1LDcgKzEyOTAsNyBAQAogCiAJLyogVGhlbiBjcmVhdGUgY29kZWMgaW5zdGFuY2VzICovCiAJZm9yIChjID0gMDsgYyA8IG1heF9zbG90czsgYysrKSB7Ci0JCWlmICgoY2hpcC0+Y29kZWNfbWFzayAmICgxIDw8IGMpKSAmIGNvZGVjX3Byb2JlX21hc2spIHsKKwkJaWYgKChjaGlwLT5jb2RlY19tYXNrICYgKDEgPDwgYykpICYgY2hpcC0+Y29kZWNfcHJvYmVfbWFzaykgewogCQkJc3RydWN0IGhkYV9jb2RlYyAqY29kZWM7CiAJCQllcnIgPSBzbmRfaGRhX2NvZGVjX25ldyhjaGlwLT5idXMsIGMsICFub19pbml0LCAmY29kZWMpOwogCQkJaWYgKGVyciA8IDApCkBAIC0xNDAzLDYgKzE0MDgsOCBAQAogCXJ1bnRpbWUtPnByaXZhdGVfZGF0YSA9IGF6eF9kZXY7CiAJc25kX3BjbV9zZXRfc3luYyhzdWJzdHJlYW0pOwogCW11dGV4X3VubG9jaygmY2hpcC0+b3Blbl9tdXRleCk7CisKKwlhenhfc3RyZWFtX3Jlc2V0KGNoaXAsIGF6eF9kZXYpOwogCXJldHVybiAwOwogfQogCkBAIC0xNDI5LDYgKzE0MzYsMTEgQEAKIHN0YXRpYyBpbnQgYXp4X3BjbV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCiAJCQkgICAgIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqaHdfcGFyYW1zKQogeworCXN0cnVjdCBhenhfZGV2ICphenhfZGV2ID0gZ2V0X2F6eF9kZXYoc3Vic3RyZWFtKTsKKworCWF6eF9kZXYtPmJ1ZnNpemUgPSAwOworCWF6eF9kZXYtPnBlcmlvZF9ieXRlcyA9IDA7CisJYXp4X2Rldi0+Zm9ybWF0X3ZhbCA9IDA7CiAJcmV0dXJuIHNuZF9wY21fbGliX21hbGxvY19wYWdlcyhzdWJzdHJlYW0sCiAJCQkJCXBhcmFtc19idWZmZXJfYnl0ZXMoaHdfcGFyYW1zKSk7CiB9CkBAIC0xNDQzLDYgKzE0NTUsOSBAQAogCWF6eF9zZF93cml0ZWwoYXp4X2RldiwgU0RfQkRMUEwsIDApOwogCWF6eF9zZF93cml0ZWwoYXp4X2RldiwgU0RfQkRMUFUsIDApOwogCWF6eF9zZF93cml0ZWwoYXp4X2RldiwgU0RfQ1RMLCAwKTsKKwlhenhfZGV2LT5idWZzaXplID0gMDsKKwlhenhfZGV2LT5wZXJpb2RfYnl0ZXMgPSAwOworCWF6eF9kZXYtPmZvcm1hdF92YWwgPSAwOwogCiAJaGluZm8tPm9wcy5jbGVhbnVwKGhpbmZvLCBhcGNtLT5jb2RlYywgc3Vic3RyZWFtKTsKIApAQCAtMTQ1NiwyMyArMTQ3MSwzNyBAQAogCXN0cnVjdCBhenhfZGV2ICphenhfZGV2ID0gZ2V0X2F6eF9kZXYoc3Vic3RyZWFtKTsKIAlzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gKmhpbmZvID0gYXBjbS0+aGluZm9bc3Vic3RyZWFtLT5zdHJlYW1dOwogCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJdW5zaWduZWQgaW50IGJ1ZnNpemUsIHBlcmlvZF9ieXRlcywgZm9ybWF0X3ZhbDsKKwlpbnQgZXJyOwogCi0JYXp4X2Rldi0+YnVmc2l6ZSA9IHNuZF9wY21fbGliX2J1ZmZlcl9ieXRlcyhzdWJzdHJlYW0pOwotCWF6eF9kZXYtPmZvcm1hdF92YWwgPSBzbmRfaGRhX2NhbGNfc3RyZWFtX2Zvcm1hdChydW50aW1lLT5yYXRlLAotCQkJCQkJCSBydW50aW1lLT5jaGFubmVscywKLQkJCQkJCQkgcnVudGltZS0+Zm9ybWF0LAotCQkJCQkJCSBoaW5mby0+bWF4YnBzKTsKLQlpZiAoIWF6eF9kZXYtPmZvcm1hdF92YWwpIHsKKwlmb3JtYXRfdmFsID0gc25kX2hkYV9jYWxjX3N0cmVhbV9mb3JtYXQocnVudGltZS0+cmF0ZSwKKwkJCQkJCXJ1bnRpbWUtPmNoYW5uZWxzLAorCQkJCQkJcnVudGltZS0+Zm9ybWF0LAorCQkJCQkJaGluZm8tPm1heGJwcyk7CisJaWYgKCFmb3JtYXRfdmFsKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgU0ZYCiAJCQkgICAiaW52YWxpZCBmb3JtYXRfdmFsLCByYXRlPSVkLCBjaD0lZCwgZm9ybWF0PSVkXG4iLAogCQkJICAgcnVudGltZS0+cmF0ZSwgcnVudGltZS0+Y2hhbm5lbHMsIHJ1bnRpbWUtPmZvcm1hdCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCWJ1ZnNpemUgPSBzbmRfcGNtX2xpYl9idWZmZXJfYnl0ZXMoc3Vic3RyZWFtKTsKKwlwZXJpb2RfYnl0ZXMgPSBzbmRfcGNtX2xpYl9wZXJpb2RfYnl0ZXMoc3Vic3RyZWFtKTsKKwogCXNuZF9wcmludGRkKCJhenhfcGNtX3ByZXBhcmU6IGJ1ZnNpemU9MHgleCwgZm9ybWF0PTB4JXhcbiIsCi0JCSAgICBhenhfZGV2LT5idWZzaXplLCBhenhfZGV2LT5mb3JtYXRfdmFsKTsKLQlpZiAoYXp4X3NldHVwX3BlcmlvZHMoY2hpcCwgc3Vic3RyZWFtLCBhenhfZGV2KSA8IDApCi0JCXJldHVybiAtRUlOVkFMOworCQkgICAgYnVmc2l6ZSwgZm9ybWF0X3ZhbCk7CisKKwlpZiAoYnVmc2l6ZSAhPSBhenhfZGV2LT5idWZzaXplIHx8CisJICAgIHBlcmlvZF9ieXRlcyAhPSBhenhfZGV2LT5wZXJpb2RfYnl0ZXMgfHwKKwkgICAgZm9ybWF0X3ZhbCAhPSBhenhfZGV2LT5mb3JtYXRfdmFsKSB7CisJCWF6eF9kZXYtPmJ1ZnNpemUgPSBidWZzaXplOworCQlhenhfZGV2LT5wZXJpb2RfYnl0ZXMgPSBwZXJpb2RfYnl0ZXM7CisJCWF6eF9kZXYtPmZvcm1hdF92YWwgPSBmb3JtYXRfdmFsOworCQllcnIgPSBhenhfc2V0dXBfcGVyaW9kcyhjaGlwLCBzdWJzdHJlYW0sIGF6eF9kZXYpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJfQorCiAJYXp4X3NldHVwX2NvbnRyb2xsZXIoY2hpcCwgYXp4X2Rldik7CiAJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCiAJCWF6eF9kZXYtPmZpZm9fc2l6ZSA9IGF6eF9zZF9yZWFkdyhhenhfZGV2LCBTRF9GSUZPU0laRSkgKyAxOwpAQCAtMjEwMCwyNSArMjEyOSwzNiBAQAogCVNORF9QQ0lfUVVJUksoMHgxMDI4LCAweDIwYWMsICJEZWxsIFN0dWRpbyBEZXNrdG9wIiwgMHgwMSksCiAJLyogaW5jbHVkaW5nIGJvZ3VzIEFMQzI2OCBpbiBzbG90IzIgdGhhdCBjb25mbGljdHMgd2l0aCBBTEM4ODggKi8KIAlTTkRfUENJX1FVSVJLKDB4MTdjMCwgMHg0MDg1LCAiTWVkaW9uIE1EOTY2MzAiLCAweDAxKSwKLQkvKiBjb25mbGljdCBvZiBBTEMyNjggaW4gc2xvdCMzIChkaWdpdGFsIEkvTyk7IGEgdGVtcG9yYXJ5IGZpeCAqLwotCVNORF9QQ0lfUVVJUksoMHgxMTc5LCAweGZmMDAsICJUb3NoaWJhIGxhcHRvcCIsIDB4MDMpLAorCS8qIGZvcmNlZCBjb2RlYyBzbG90cyAqLworCVNORF9QQ0lfUVVJUksoMHgxMDQ2LCAweDEyNjIsICJBU1VTIFc1RiIsIDB4MTAzKSwKIAl7fQogfTsKIAorI2RlZmluZSBBWlhfRk9SQ0VfQ09ERUNfTUFTSwkweDEwMAorCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgY2hlY2tfcHJvYmVfbWFzayhzdHJ1Y3QgYXp4ICpjaGlwLCBpbnQgZGV2KQogewogCWNvbnN0IHN0cnVjdCBzbmRfcGNpX3F1aXJrICpxOwogCi0JaWYgKHByb2JlX21hc2tbZGV2XSA9PSAtMSkgeworCWNoaXAtPmNvZGVjX3Byb2JlX21hc2sgPSBwcm9iZV9tYXNrW2Rldl07CisJaWYgKGNoaXAtPmNvZGVjX3Byb2JlX21hc2sgPT0gLTEpIHsKIAkJcSA9IHNuZF9wY2lfcXVpcmtfbG9va3VwKGNoaXAtPnBjaSwgcHJvYmVfbWFza19saXN0KTsKIAkJaWYgKHEpIHsKIAkJCXByaW50ayhLRVJOX0lORk8KIAkJCSAgICAgICAiaGRhX2ludGVsOiBwcm9iZV9tYXNrIHNldCB0byAweCV4ICIKIAkJCSAgICAgICAiZm9yIGRldmljZSAlMDR4OiUwNHhcbiIsCiAJCQkgICAgICAgcS0+dmFsdWUsIHEtPnN1YnZlbmRvciwgcS0+c3ViZGV2aWNlKTsKLQkJCXByb2JlX21hc2tbZGV2XSA9IHEtPnZhbHVlOworCQkJY2hpcC0+Y29kZWNfcHJvYmVfbWFzayA9IHEtPnZhbHVlOwogCQl9CiAJfQorCisJLyogY2hlY2sgZm9yY2VkIG9wdGlvbiAqLworCWlmIChjaGlwLT5jb2RlY19wcm9iZV9tYXNrICE9IC0xICYmCisJICAgIChjaGlwLT5jb2RlY19wcm9iZV9tYXNrICYgQVpYX0ZPUkNFX0NPREVDX01BU0spKSB7CisJCWNoaXAtPmNvZGVjX21hc2sgPSBjaGlwLT5jb2RlY19wcm9iZV9tYXNrICYgMHhmZjsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiaGRhX2ludGVsOiBjb2RlY19tYXNrIGZvcmNlZCB0byAweCV4XG4iLAorCQkgICAgICAgY2hpcC0+Y29kZWNfbWFzayk7CisJfQogfQogCiAKQEAgLTIzNDcsMTAgKzIzODcsMTAgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKCFjYXJkKSB7CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiBTRlggIkVycm9yIGNyZWF0aW5nIGNhcmQhXG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldHVybiBlcnI7CiAJfQogCiAJZXJyID0gYXp4X2NyZWF0ZShjYXJkLCBwY2ksIGRldiwgcGNpX2lkLT5kcml2ZXJfZGF0YSwgJmNoaXApOwpAQCAtMjM1OSw4ICsyMzk5LDcgQEAKIAljYXJkLT5wcml2YXRlX2RhdGEgPSBjaGlwOwogCiAJLyogY3JlYXRlIGNvZGVjIGluc3RhbmNlcyAqLwotCWVyciA9IGF6eF9jb2RlY19jcmVhdGUoY2hpcCwgbW9kZWxbZGV2XSwgcHJvYmVfbWFza1tkZXZdLAotCQkJICAgICAgIHByb2JlX29ubHlbZGV2XSk7CisJZXJyID0gYXp4X2NvZGVjX2NyZWF0ZShjaGlwLCBtb2RlbFtkZXZdLCBwcm9iZV9vbmx5W2Rldl0pOwogCWlmIChlcnIgPCAwKQogCQlnb3RvIG91dF9mcmVlOwogCkBAIC0yNDU3LDEwICsyNDk2LDEwIEBACiAJeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwYWMxKSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKIAl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDBhYzIpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAogCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MGFjMyksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCi0JeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwYmQ0KSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKLQl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDBiZDUpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAotCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MGJkNiksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCi0JeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwYmQ3KSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKKwl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDBkOTQpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAorCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MGQ5NSksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCisJeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwZDk2KSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKKwl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDBkOTcpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAogCS8qIFRlcmFkaWNpICovCiAJeyBQQ0lfREVWSUNFKDB4NjU0OSwgMHgxMjAwKSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9URVJBIH0sCiAJLyogQU1EIEdlbmVyaWMsIFBDSSBjbGFzcyBjb2RlIGFuZCBWZW5kb3IgSUQgZm9yIEhEIEF1ZGlvICovCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL2hkYV9sb2NhbC5oIGIvc291bmQvcGNpL2hkYS9oZGFfbG9jYWwuaAppbmRleCA0NGYxODljLi44MzM0OTAxIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL2hkYV9sb2NhbC5oCisrKyBiL3NvdW5kL3BjaS9oZGEvaGRhX2xvY2FsLmgKQEAgLTI2LDggKzI2LDEwIEBACiAvKgogICogZm9yIG1peGVyIGNvbnRyb2xzCiAgKi8KKyNkZWZpbmUgSERBX0NPTVBPU0VfQU1QX1ZBTF9PRlMobmlkLGNocyxpZHgsZGlyLG9mcykJCVwKKwkoKG5pZCkgfCAoKGNocyk8PDE2KSB8ICgoZGlyKTw8MTgpIHwgKChpZHgpPDwxOSkgfCAoKG9mcyk8PDIzKSkKICNkZWZpbmUgSERBX0NPTVBPU0VfQU1QX1ZBTChuaWQsY2hzLGlkeCxkaXIpIFwKLQkoKG5pZCkgfCAoKGNocyk8PDE2KSB8ICgoZGlyKTw8MTgpIHwgKChpZHgpPDwxOSkpCisJSERBX0NPTVBPU0VfQU1QX1ZBTF9PRlMobmlkLCBjaHMsIGlkeCwgZGlyLCAwKQogLyogbW9ubyB2b2x1bWUgd2l0aCBpbmRleCAoaW5kZXg9MCwxLC4uLikgKGNoYW5uZWw9MSwyKSAqLwogI2RlZmluZSBIREFfQ09ERUNfVk9MVU1FX01PTk9fSURYKHhuYW1lLCB4Y2lkeCwgbmlkLCBjaGFubmVsLCB4aW5kZXgsIGRpcmVjdGlvbikgXAogCXsgLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIC5uYW1lID0geG5hbWUsIC5pbmRleCA9IHhjaWR4LCAgXApAQCAtOTYsNyArOTgsNyBAQAogCQkJCQkgICAgY29uc3QgY2hhciAqbmFtZSk7CiBpbnQgc25kX2hkYV9hZGRfdm1hc3RlcihzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgY2hhciAqbmFtZSwKIAkJCXVuc2lnbmVkIGludCAqdGx2LCBjb25zdCBjaGFyICoqc2xhdmVzKTsKLXZvaWQgc25kX2hkYV9jb2RlY19yZXNldChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyk7CitpbnQgc25kX2hkYV9jb2RlY19yZXNldChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyk7CiBpbnQgc25kX2hkYV9jb2RlY19jb25maWd1cmUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpOwogCiAvKiBhbXAgdmFsdWUgYml0cyAqLwpAQCAtMTM0LDcgKzEzNiw3IEBACiAKIHN0cnVjdCBoZGFfYmluZF9jdGxzIHsKIAlzdHJ1Y3QgaGRhX2N0bF9vcHMgKm9wczsKLQlsb25nIHZhbHVlc1tdOworCXVuc2lnbmVkIGxvbmcgdmFsdWVzW107CiB9OwogCiBpbnQgc25kX2hkYV9taXhlcl9iaW5kX2N0bHNfaW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKQEAgLTIyNyw2ICsyMjksNyBAQAogCWhkYV9uaWRfdCBocF9uaWQ7CS8qIG9wdGlvbmFsIERBQyBmb3IgSFAsIDAgd2hlbiBub3QgZXhpc3RzICovCiAJaGRhX25pZF90IGV4dHJhX291dF9uaWRbM107CS8qIG9wdGlvbmFsIERBQ3MsIDAgd2hlbiBub3QgZXhpc3RzICovCiAJaGRhX25pZF90IGRpZ19vdXRfbmlkOwkvKiBkaWdpdGFsIG91dCBhdWRpbyB3aWRnZXQgKi8KKwloZGFfbmlkX3QgKnNsYXZlX2RpZ19vdXRzOwogCWludCBtYXhfY2hhbm5lbHM7CS8qIGN1cnJlbnRseSBzdXBwb3J0ZWQgYW5hbG9nIGNoYW5uZWxzICovCiAJaW50IGRpZ19vdXRfdXNlZDsJLyogY3VycmVudCB1c2FnZSBvZiBkaWdpdGFsIG91dCAoSERBX0RJR19YWFgpICovCiAJaW50IG5vX3NoYXJlX3N0cmVhbTsJLyogZG9uJ3Qgc2hhcmUgYSBzdHJlYW0gd2l0aCBtdWx0aXBsZSBwaW5zICovCkBAIC0zNTQsOSArMzU3LDEyIEBACiAJaW50IGxpbmVfb3V0X3R5cGU7CS8qIEFVVE9fUElOX1hYWF9PVVQgKi8KIAloZGFfbmlkX3QgaHBfcGluc1tBVVRPX0NGR19NQVhfT1VUU107CiAJaGRhX25pZF90IGlucHV0X3BpbnNbQVVUT19QSU5fTEFTVF07Ci0JaGRhX25pZF90IGRpZ19vdXRfcGluOworCWludCBkaWdfb3V0czsKKwloZGFfbmlkX3QgZGlnX291dF9waW5zWzJdOwogCWhkYV9uaWRfdCBkaWdfaW5fcGluOwogCWhkYV9uaWRfdCBtb25vX291dF9waW47CisJaW50IGRpZ19vdXRfdHlwZVsyXTsgLyogSERBX1BDTV9UWVBFX1hYWCAqLworCWludCBkaWdfaW5fdHlwZTsgLyogSERBX1BDTV9UWVBFX1hYWCAqLwogfTsKIAogI2RlZmluZSBnZXRfZGVmY2ZnX2Nvbm5lY3QoY2ZnKSBcCkBAIC00MDUsNiArNDExLDcgQEAKIHUzMiBxdWVyeV9hbXBfY2FwcyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCwgaW50IGRpcmVjdGlvbik7CiBpbnQgc25kX2hkYV9vdmVycmlkZV9hbXBfY2FwcyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCwgaW50IGRpciwKIAkJCSAgICAgIHVuc2lnbmVkIGludCBjYXBzKTsKK3UzMiBzbmRfaGRhX3F1ZXJ5X3Bpbl9jYXBzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkKTsKIAogaW50IHNuZF9oZGFfY3RsX2FkZChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgc3RydWN0IHNuZF9rY29udHJvbCAqa2N0bCk7CiB2b2lkIHNuZF9oZGFfY3Rsc19jbGVhcihzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyk7CkBAIC00MjcsNiArNDM0LDIzIEBACiB9CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19TTkRfSERBX1JFQ09ORklHCitjb25zdCBjaGFyICpzbmRfaGRhX2dldF9oaW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBjb25zdCBjaGFyICprZXkpOworaW50IHNuZF9oZGFfZ2V0X2Jvb2xfaGludChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgY29uc3QgY2hhciAqa2V5KTsKKyNlbHNlCitzdGF0aWMgaW5saW5lCitjb25zdCBjaGFyICpzbmRfaGRhX2dldF9oaW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBjb25zdCBjaGFyICprZXkpCit7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUKK2ludCBzbmRfaGRhX2dldF9ib29sX2hpbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGNvbnN0IGNoYXIgKmtleSkKK3sKKwlyZXR1cm4gLUVOT0VOVDsKK30KKyNlbmRpZgorCiAvKgogICogcG93ZXItbWFuYWdlbWVudAogICovCkBAIC00NTgsNiArNDgyLDcgQEAKICNkZWZpbmUgZ2V0X2FtcF9jaGFubmVscyhrYykJKCgoa2MpLT5wcml2YXRlX3ZhbHVlID4+IDE2KSAmIDB4MykKICNkZWZpbmUgZ2V0X2FtcF9kaXJlY3Rpb24oa2MpCSgoKGtjKS0+cHJpdmF0ZV92YWx1ZSA+PiAxOCkgJiAweDEpCiAjZGVmaW5lIGdldF9hbXBfaW5kZXgoa2MpCSgoKGtjKS0+cHJpdmF0ZV92YWx1ZSA+PiAxOSkgJiAweGYpCisjZGVmaW5lIGdldF9hbXBfb2Zmc2V0KGtjKQkoKChrYyktPnByaXZhdGVfdmFsdWUgPj4gMjMpICYgMHgzZikKIAogLyoKICAqIENFQSBTaG9ydCBBdWRpbyBEZXNjcmlwdG9yIGRhdGEKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX3Byb2MuYyBiL3NvdW5kL3BjaS9oZGEvaGRhX3Byb2MuYwppbmRleCAxNDRiODUyLi45M2Q3NDk5IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL2hkYV9wcm9jLmMKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfcHJvYy5jCkBAIC0zOTksOCArMzk5LDEwIEBACiB7CiAJaW50IGMsIGN1cnIgPSAtMTsKIAotCWlmIChjb25uX2xlbiA+IDEgJiYgd2lkX3R5cGUgIT0gQUNfV0lEX0FVRF9NSVggJiYKLQkgICAgd2lkX3R5cGUgIT0gQUNfV0lEX1ZPTF9LTkIpCisJaWYgKGNvbm5fbGVuID4gMSAmJgorCSAgICB3aWRfdHlwZSAhPSBBQ19XSURfQVVEX01JWCAmJgorCSAgICB3aWRfdHlwZSAhPSBBQ19XSURfVk9MX0tOQiAmJgorCSAgICB3aWRfdHlwZSAhPSBBQ19XSURfUE9XRVIpCiAJCWN1cnIgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIG5pZCwgMCwKIAkJCQkJICBBQ19WRVJCX0dFVF9DT05ORUNUX1NFTCwgMCk7CiAJc25kX2lwcmludGYoYnVmZmVyLCAiICBDb25uZWN0aW9uOiAlZFxuIiwgY29ubl9sZW4pOwpAQCAtNDY3LDggKzQ2OSw5IEBACiAJc25kX2lwcmludGYoYnVmZmVyLCAiQ29kZWM6ICVzXG4iLAogCQkgICAgY29kZWMtPm5hbWUgPyBjb2RlYy0+bmFtZSA6ICJOb3QgU2V0Iik7CiAJc25kX2lwcmludGYoYnVmZmVyLCAiQWRkcmVzczogJWRcbiIsIGNvZGVjLT5hZGRyKTsKLQlzbmRfaXByaW50ZihidWZmZXIsICJWZW5kb3IgSWQ6IDB4JXhcbiIsIGNvZGVjLT52ZW5kb3JfaWQpOwotCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlN1YnN5c3RlbSBJZDogMHgleFxuIiwgY29kZWMtPnN1YnN5c3RlbV9pZCk7CisJc25kX2lwcmludGYoYnVmZmVyLCAiRnVuY3Rpb24gSWQ6IDB4JXhcbiIsIGNvZGVjLT5mdW5jdGlvbl9pZCk7CisJc25kX2lwcmludGYoYnVmZmVyLCAiVmVuZG9yIElkOiAweCUwOHhcbiIsIGNvZGVjLT52ZW5kb3JfaWQpOworCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlN1YnN5c3RlbSBJZDogMHglMDh4XG4iLCBjb2RlYy0+c3Vic3lzdGVtX2lkKTsKIAlzbmRfaXByaW50ZihidWZmZXIsICJSZXZpc2lvbiBJZDogMHgleFxuIiwgY29kZWMtPnJldmlzaW9uX2lkKTsKIAogCWlmIChjb2RlYy0+bWZnKQpAQCAtNTU0LDggKzU1NywxNCBAQAogCQkJc25kX2lwcmludGYoYnVmZmVyLCAiICBBbXAtT3V0IGNhcHM6ICIpOwogCQkJcHJpbnRfYW1wX2NhcHMoYnVmZmVyLCBjb2RlYywgbmlkLCBIREFfT1VUUFVUKTsKIAkJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiAgQW1wLU91dCB2YWxzOiAiKTsKLQkJCXByaW50X2FtcF92YWxzKGJ1ZmZlciwgY29kZWMsIG5pZCwgSERBX09VVFBVVCwKLQkJCQkgICAgICAgd2lkX2NhcHMgJiBBQ19XQ0FQX1NURVJFTywgMSk7CisJCQlpZiAod2lkX3R5cGUgPT0gQUNfV0lEX1BJTiAmJgorCQkJICAgIGNvZGVjLT5waW5fYW1wX3dvcmthcm91bmQpCisJCQkJcHJpbnRfYW1wX3ZhbHMoYnVmZmVyLCBjb2RlYywgbmlkLCBIREFfT1VUUFVULAorCQkJCQkgICAgICAgd2lkX2NhcHMgJiBBQ19XQ0FQX1NURVJFTywKKwkJCQkJICAgICAgIGNvbm5fbGVuKTsKKwkJCWVsc2UKKwkJCQlwcmludF9hbXBfdmFscyhidWZmZXIsIGNvZGVjLCBuaWQsIEhEQV9PVVRQVVQsCisJCQkJCSAgICAgICB3aWRfY2FwcyAmIEFDX1dDQVBfU1RFUkVPLCAxKTsKIAkJfQogCiAJCXN3aXRjaCAod2lkX3R5cGUpIHsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfYW5hbG9nLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2FuYWxvZy5jCmluZGV4IGU0ODYxMjMuLjViYjQ4ZWUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfYW5hbG9nLmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9hbmFsb2cuYwpAQCAtMjcsMTEgKzI3LDEyIEBACiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgImhkYV9jb2RlYy5oIgogI2luY2x1ZGUgImhkYV9sb2NhbC5oIgorI2luY2x1ZGUgImhkYV9iZWVwLmgiCiAKIHN0cnVjdCBhZDE5OHhfc3BlYyB7CiAJc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKm1peGVyc1s1XTsKIAlpbnQgbnVtX21peGVyczsKLQorCXVuc2lnbmVkIGludCBiZWVwX2FtcDsJLyogYmVlcCBhbXAgdmFsdWUsIHNldCB2aWEgc2V0X2JlZXBfYW1wKCkgKi8KIAljb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgKmluaXRfdmVyYnNbNV07CS8qIGluaXRpYWxpemF0aW9uIHZlcmJzCiAJCQkJCQkgKiBkb24ndCBmb3JnZXQgTlVMTCB0ZXJtaW5hdGlvbiEKIAkJCQkJCSAqLwpAQCAtMTU0LDYgKzE1NSwxNiBAQAogCiBzdGF0aWMgdm9pZCBhZDE5OHhfZnJlZV9rY3RscyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyk7CiAKKy8qIGFkZGl0aW9uYWwgYmVlcCBtaXhlcnM7IHRoZSBhY3R1YWwgcGFyYW1ldGVycyBhcmUgb3ZlcndyaXR0ZW4gYXQgYnVpbGQgKi8KK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhZF9iZWVwX21peGVyW10gPSB7CisJSERBX0NPREVDX1ZPTFVNRSgiQmVlcCBQbGF5YmFjayBWb2x1bWUiLCAwLCAwLCBIREFfT1VUUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiQmVlcCBQbGF5YmFjayBTd2l0Y2giLCAwLCAwLCBIREFfT1VUUFVUKSwKKwl7IH0gLyogZW5kICovCit9OworCisjZGVmaW5lIHNldF9iZWVwX2FtcChzcGVjLCBuaWQsIGlkeCwgZGlyKSBcCisJKChzcGVjKS0+YmVlcF9hbXAgPSBIREFfQ09NUE9TRV9BTVBfVkFMKG5pZCwgMSwgaWR4LCBkaXIpKSAvKiBtb25vICovCisKIHN0YXRpYyBpbnQgYWQxOTh4X2J1aWxkX2NvbnRyb2xzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhZDE5OHhfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwpAQCAtMTgxLDYgKzE5MiwyMSBAQAogCQkJcmV0dXJuIGVycjsKIAl9CiAKKwkvKiBjcmVhdGUgYmVlcCBjb250cm9scyBpZiBuZWVkZWQgKi8KKwlpZiAoc3BlYy0+YmVlcF9hbXApIHsKKwkJc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKmtuZXc7CisJCWZvciAoa25ldyA9IGFkX2JlZXBfbWl4ZXI7IGtuZXctPm5hbWU7IGtuZXcrKykgeworCQkJc3RydWN0IHNuZF9rY29udHJvbCAqa2N0bDsKKwkJCWtjdGwgPSBzbmRfY3RsX25ldzEoa25ldywgY29kZWMpOworCQkJaWYgKCFrY3RsKQorCQkJCXJldHVybiAtRU5PTUVNOworCQkJa2N0bC0+cHJpdmF0ZV92YWx1ZSA9IHNwZWMtPmJlZXBfYW1wOworCQkJZXJyID0gc25kX2hkYV9jdGxfYWRkKGNvZGVjLCBrY3RsKTsKKwkJCWlmIChlcnIgPCAwKQorCQkJCXJldHVybiBlcnI7CisJCX0KKwl9CisKIAkvKiBpZiB3ZSBoYXZlIG5vIG1hc3RlciBjb250cm9sLCBsZXQncyBjcmVhdGUgaXQgKi8KIAlpZiAoIXNuZF9oZGFfZmluZF9taXhlcl9jdGwoY29kZWMsICJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIikpIHsKIAkJdW5zaWduZWQgaW50IHZtYXN0ZXJfdGx2WzRdOwpAQCAtNDA2LDcgKzQzMiw4IEBACiAJCXJldHVybjsKIAogCWFkMTk4eF9mcmVlX2tjdGxzKGNvZGVjKTsKLQlrZnJlZShjb2RlYy0+c3BlYyk7CisJa2ZyZWUoc3BlYyk7CisJc25kX2hkYV9kZXRhY2hfYmVlcF9kZXZpY2UoY29kZWMpOwogfQogCiBzdGF0aWMgc3RydWN0IGhkYV9jb2RlY19vcHMgYWQxOTh4X3BhdGNoX29wcyA9IHsKQEAgLTU0NSw4ICs1NzIsNiBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDEzLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgxMywgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QiLCAweDBmLCAweDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIlBDIFNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgxOCwgMHgwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiUEMgU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDE4LCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIk1vbm8gUGxheWJhY2sgVm9sdW1lIiwgMHgxZSwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTW9ubyBQbGF5YmFjayBTd2l0Y2giLCAweDFlLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgxMiwgMHgwLCBIREFfT1VUUFVUKSwKQEAgLTYxMCw4ICs2MzUsNyBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDEzLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgxMywgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QiLCAweDBmLCAweDAsIEhEQV9PVVRQVVQpLAotCS8qIEhEQV9DT0RFQ19WT0xVTUUoIlBDIFNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgxOCwgMHgwLCBIREFfT1VUUFVUKSwKLQkgICBIREFfQ09ERUNfTVVURSgiUEMgU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDE4LCAweDAsIEhEQV9PVVRQVVQpLAorCS8qIAogCSAgIEhEQV9DT0RFQ19WT0xVTUUoIk1vbm8gUGxheWJhY2sgVm9sdW1lIiwgMHgxZSwgMHgwLCBIREFfT1VUUFVUKSwKIAkgICBIREFfQ09ERUNfTVVURSgiTW9ubyBQbGF5YmFjayBTd2l0Y2giLCAweDFlLCAweDAsIEhEQV9PVVRQVVQpLCAqLwogCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgxMiwgMHgwLCBIREFfT1VUUFVUKSwKQEAgLTgwOSw4ICs4MzMsNiBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDEzLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgxMywgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QiLCAweDBmLCAweDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkJlZXAgUGxheWJhY2sgVm9sdW1lIiwgMHgxOCwgMHgwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiQmVlcCBQbGF5YmFjayBTd2l0Y2giLCAweDE4LCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgxMiwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQ2FwdHVyZSBTd2l0Y2giLCAweDEyLCAweDAsIEhEQV9PVVRQVVQpLAogCXsKQEAgLTEwMDIsMTAgKzEwMjQsOCBAQAogCVNORF9QQ0lfUVVJUksoMHgxMTc5LCAweGZmNDAsICJUb3NoaWJhIiwgQUQxOTg2QV9MQVBUT1BfRUFQRCksCiAJU05EX1BDSV9RVUlSSygweDE0NGQsIDB4YjAzYywgIlNhbXN1bmcgUjU1IiwgQUQxOTg2QV8zU1RBQ0spLAogCVNORF9QQ0lfUVVJUksoMHgxNDRkLCAweGMwMWUsICJGU0MgVjIwNjAiLCBBRDE5ODZBX0xBUFRPUCksCi0JU05EX1BDSV9RVUlSSygweDE0NGQsIDB4YzAyMywgIlNhbXN1bmcgWDYwIiwgQUQxOTg2QV9TQU1TVU5HKSwKLQlTTkRfUENJX1FVSVJLKDB4MTQ0ZCwgMHhjMDI0LCAiU2Ftc3VuZyBSNjUiLCBBRDE5ODZBX1NBTVNVTkcpLAotCVNORF9QQ0lfUVVJUksoMHgxNDRkLCAweGMwMjYsICJTYW1zdW5nIFgxMSIsIEFEMTk4NkFfU0FNU1VORyksCiAJU05EX1BDSV9RVUlSSygweDE0NGQsIDB4YzAyNywgIlNhbXN1bmcgUTEiLCBBRDE5ODZBX1VMVFJBKSwKKwlTTkRfUENJX1FVSVJLX01BU0soMHgxNDRkLCAweGZmMDAsIDB4YzAwMCwgIlNhbXN1bmciLCBBRDE5ODZBX1NBTVNVTkcpLAogCVNORF9QQ0lfUVVJUksoMHgxNDRkLCAweGM1MDQsICJTYW1zdW5nIFEzNSIsIEFEMTk4NkFfM1NUQUNLKSwKIAlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgxMDExLCAiTGVub3ZvIE01NSIsIEFEMTk4NkFfTEFQVE9QKSwKIAlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgxMDE3LCAiTGVub3ZvIEE2MCIsIEFEMTk4NkFfM1NUQUNLKSwKQEAgLTEwMjcsMTUgKzEwNDcsMTQgQEAKIAogc3RhdGljIGludCBpc19qYWNrX2F2YWlsYWJsZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCkKIHsKLQl1bnNpZ25lZCBpbnQgY29uZiA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLCAwLAotCQkJCQkgICAgICAgQUNfVkVSQl9HRVRfQ09ORklHX0RFRkFVTFQsIDApOworCXVuc2lnbmVkIGludCBjb25mID0gc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKGNvZGVjLCBuaWQpOwogCXJldHVybiBnZXRfZGVmY2ZnX2Nvbm5lY3QoY29uZikgIT0gQUNfSkFDS19QT1JUX05PTkU7CiB9CiAKIHN0YXRpYyBpbnQgcGF0Y2hfYWQxOTg2YShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWQxOTh4X3NwZWMgKnNwZWM7Ci0JaW50IGJvYXJkX2NvbmZpZzsKKwlpbnQgZXJyLCBib2FyZF9jb25maWc7CiAKIAlzcGVjID0ga3phbGxvYyhzaXplb2YoKnNwZWMpLCBHRlBfS0VSTkVMKTsKIAlpZiAoc3BlYyA9PSBOVUxMKQpAQCAtMTA0Myw2ICsxMDYyLDEzIEBACiAKIAljb2RlYy0+c3BlYyA9IHNwZWM7CiAKKwllcnIgPSBzbmRfaGRhX2F0dGFjaF9iZWVwX2RldmljZShjb2RlYywgMHgxOSk7CisJaWYgKGVyciA8IDApIHsKKwkJYWQxOTh4X2ZyZWUoY29kZWMpOworCQlyZXR1cm4gZXJyOworCX0KKwlzZXRfYmVlcF9hbXAoc3BlYywgMHgxOCwgMCwgSERBX09VVFBVVCk7CisKIAlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSA2OwogCXNwZWMtPm11bHRpb3V0Lm51bV9kYWNzID0gQVJSQVlfU0laRShhZDE5ODZhX2RhY19uaWRzKTsKIAlzcGVjLT5tdWx0aW91dC5kYWNfbmlkcyA9IGFkMTk4NmFfZGFjX25pZHM7CkBAIC0xMjIyLDggKzEyNDgsNiBAQAogCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgxMiwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJMaW5lIFBsYXliYWNrIFZvbHVtZSIsIDB4MTMsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEUoIkxpbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgxMywgMHgwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FX01PTk8oIlBDIFNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgxMCwgMSwgMHgwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfTVVURV9NT05PKCJQQyBTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MTAsIDEsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgwYywgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlIFZvbHVtZSIsIDB4MTUsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEUoIkNhcHR1cmUgU3dpdGNoIiwgMHgxNSwgMHgwLCBIREFfT1VUUFVUKSwKQEAgLTEyOTQsNiArMTMxOCw3IEBACiBzdGF0aWMgaW50IHBhdGNoX2FkMTk4MyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWQxOTh4X3NwZWMgKnNwZWM7CisJaW50IGVycjsKIAogCXNwZWMgPSBremFsbG9jKHNpemVvZigqc3BlYyksIEdGUF9LRVJORUwpOwogCWlmIChzcGVjID09IE5VTEwpCkBAIC0xMzAxLDYgKzEzMjYsMTMgQEAKIAogCWNvZGVjLT5zcGVjID0gc3BlYzsKIAorCWVyciA9IHNuZF9oZGFfYXR0YWNoX2JlZXBfZGV2aWNlKGNvZGVjLCAweDEwKTsKKwlpZiAoZXJyIDwgMCkgeworCQlhZDE5OHhfZnJlZShjb2RlYyk7CisJCXJldHVybiBlcnI7CisJfQorCXNldF9iZWVwX2FtcChzcGVjLCAweDEwLCAwLCBIREFfT1VUUFVUKTsKKwogCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IDI7CiAJc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgPSBBUlJBWV9TSVpFKGFkMTk4M19kYWNfbmlkcyk7CiAJc3BlYy0+bXVsdGlvdXQuZGFjX25pZHMgPSBhZDE5ODNfZGFjX25pZHM7CkBAIC0xMzcwLDggKzE0MDIsNiBAQAogCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgxYywgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJDRCBQbGF5YmFjayBWb2x1bWUiLCAweDFkLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJDRCBQbGF5YmFjayBTd2l0Y2giLCAweDFkLCAweDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19WT0xVTUVfTU9OTygiUEMgU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDBkLCAxLCAweDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19NVVRFX01PTk8oIlBDIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwZCwgMSwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgQm9vc3QiLCAweDA4LCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgxOCwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgxNSwgMHgwLCBIREFfT1VUUFVUKSwKQEAgLTE0MTYsOCArMTQ0Niw4IEBACiAJezB4MWUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIDB4YjAwMH0sCiAJezB4MWYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIDB4YjA4MH0sCiAJLyogTWljIGJvb3N0OiAwZEIgKi8KLQl7MHgwOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgMHhiMDAwfSwKLQl7MHgxOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgMHhiMDAwfSwKKwl7MHgwOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCisJezB4MTgsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAogCS8qIFJlY29yZCBzZWxlY3RvcjogRnJvbnQgbWljICovCiAJezB4MTUsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDB9LAogCXsweDE1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAweGIwODB9LApAQCAtMTY4MiwxMCArMTcxMiwxMCBAQAogCVNORF9QQ0lfUVVJUksoMHgxMDE0LCAweDA1OTcsICJMZW5vdm8gWjYwIiwgQUQxOTgxX1RISU5LUEFEKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAxNCwgMHgwNWI3LCAiTGVub3ZvIFo2MG0iLCBBRDE5ODFfVEhJTktQQUQpLAogCS8qIEFsbCBIUCBtb2RlbHMgKi8KLQlTTkRfUENJX1FVSVJLKDB4MTAzYywgMCwgIkhQIG54IiwgQUQxOTgxX0hQKSwKKwlTTkRfUENJX1FVSVJLX1ZFTkRPUigweDEwM2MsICJIUCBueCIsIEFEMTk4MV9IUCksCiAJU05EX1BDSV9RVUlSSygweDExNzksIDB4MDAwMSwgIlRvc2hpYmEgVTIwNSIsIEFEMTk4MV9UT1NISUJBKSwKIAkvKiBMZW5vdm8gVGhpbmtwYWQgVDYwL1g2MC9aNnh4ICovCi0JU05EX1BDSV9RVUlSSygweDE3YWEsIDAsICJMZW5vdm8gVGhpbmtwYWQiLCBBRDE5ODFfVEhJTktQQUQpLAorCVNORF9QQ0lfUVVJUktfVkVORE9SKDB4MTdhYSwgIkxlbm92byBUaGlua3BhZCIsIEFEMTk4MV9USElOS1BBRCksCiAJLyogSFAgbng2MzIwIChyZXZlcnNlZCBTU0lELCBIL1cgYnVnKSAqLwogCVNORF9QQ0lfUVVJUksoMHgzMGIwLCAweDEwM2MsICJIUCBueDYzMjAiLCBBRDE5ODFfSFApLAogCXt9CkBAIC0xNjk0LDcgKzE3MjQsNyBAQAogc3RhdGljIGludCBwYXRjaF9hZDE5ODEoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGFkMTk4eF9zcGVjICpzcGVjOwotCWludCBib2FyZF9jb25maWc7CisJaW50IGVyciwgYm9hcmRfY29uZmlnOwogCiAJc3BlYyA9IGt6YWxsb2Moc2l6ZW9mKCpzcGVjKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHNwZWMgPT0gTlVMTCkKQEAgLTE3MDIsNiArMTczMiwxMyBAQAogCiAJY29kZWMtPnNwZWMgPSBzcGVjOwogCisJZXJyID0gc25kX2hkYV9hdHRhY2hfYmVlcF9kZXZpY2UoY29kZWMsIDB4MTApOworCWlmIChlcnIgPCAwKSB7CisJCWFkMTk4eF9mcmVlKGNvZGVjKTsKKwkJcmV0dXJuIGVycjsKKwl9CisJc2V0X2JlZXBfYW1wKHNwZWMsIDB4MGQsIDAsIEhEQV9PVVRQVVQpOworCiAJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gMjsKIAlzcGVjLT5tdWx0aW91dC5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWQxOTgxX2RhY19uaWRzKTsKIAlzcGVjLT5tdWx0aW91dC5kYWNfbmlkcyA9IGFkMTk4MV9kYWNfbmlkczsKQEAgLTE5ODgsOSArMjAyNSw2IEBACiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MjAsIDB4NCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4NCwgSERBX0lOUFVUKSwKIAotCUhEQV9DT0RFQ19WT0xVTUUoIkJlZXAgUGxheWJhY2sgVm9sdW1lIiwgMHgxMCwgMHgwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiQmVlcCBQbGF5YmFjayBTd2l0Y2giLCAweDEwLCAweDAsIEhEQV9PVVRQVVQpLAotCiAJSERBX0NPREVDX1ZPTFVNRSgiQW5hbG9nIE1peCBQbGF5YmFjayBWb2x1bWUiLCAweDIxLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJBbmFsb2cgTWl4IFBsYXliYWNrIFN3aXRjaCIsIDB4MjEsIDB4MCwgSERBX09VVFBVVCksCiAKQEAgLTIwMzQsOSArMjA2OCw2IEBACiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MjAsIDB4NCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4NCwgSERBX0lOUFVUKSwKIAotCUhEQV9DT0RFQ19WT0xVTUUoIkJlZXAgUGxheWJhY2sgVm9sdW1lIiwgMHgxMCwgMHgwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiQmVlcCBQbGF5YmFjayBTd2l0Y2giLCAweDEwLCAweDAsIEhEQV9PVVRQVVQpLAotCiAJSERBX0NPREVDX1ZPTFVNRSgiQW5hbG9nIE1peCBQbGF5YmFjayBWb2x1bWUiLCAweDIxLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJBbmFsb2cgTWl4IFBsYXliYWNrIFN3aXRjaCIsIDB4MjEsIDB4MCwgSERBX09VVFBVVCksCiAKQEAgLTIwNjYsOSArMjA5Nyw2IEBACiAJSERBX0NPREVDX1ZPTFVNRSgiTGluZSBQbGF5YmFjayBWb2x1bWUiLCAweDIwLCAweDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkxpbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgyMCwgMHgxLCBIREFfSU5QVVQpLAogCi0JSERBX0NPREVDX1ZPTFVNRSgiQmVlcCBQbGF5YmFjayBWb2x1bWUiLCAweDEwLCAweDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJCZWVwIFBsYXliYWNrIFN3aXRjaCIsIDB4MTAsIDB4MCwgSERBX09VVFBVVCksCi0KIAlIREFfQ09ERUNfVk9MVU1FKCJBbmFsb2cgTWl4IFBsYXliYWNrIFZvbHVtZSIsIDB4MjEsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEUoIkFuYWxvZyBNaXggUGxheWJhY2sgU3dpdGNoIiwgMHgyMSwgMHgwLCBIREFfT1VUUFVUKSwKIApAQCAtMjI5NywxMCArMjMyNSw2IEBACiAJezB4MGMsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDF9LAogCXsweDBkLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgxfSwKIAl7MHgwZSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MX0sCi0JLyogQURDczsgbXV0ZWQgKi8KLQl7MHgwOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKLQl7MHgwOSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKLQl7MHgwZiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKIAogCXsgfQogfTsKQEAgLTI0MDgsMTAgKzI0MzIsNiBAQAogCXsweDBjLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgxfSwKIAl7MHgwZCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MX0sCiAJezB4MGUsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDF9LAotCS8qIEFEQ3M7IG11dGVkICovCi0JezB4MDgsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCi0JezB4MDksIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCi0JezB4MGYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCiAJLyogQW5hbG9nIE1peCBvdXRwdXQgYW1wICovCiAJezB4MjEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFIHwgMHgxZn0sIC8qIDBkQiAqLwogCXsgfQpAQCAtMjQ4MywxMCArMjUwMyw2IEBACiAJezB4MGMsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDF9LAogCXsweDBkLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgxfSwKIAl7MHgwZSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MX0sCi0JLyogQURDczsgbXV0ZWQgKi8KLQl7MHgwOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKLQl7MHgwOSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKLQl7MHgwZiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKIAkvKiBBbmFsb2cgTWl4IG91dHB1dCBhbXAgKi8KIAl7MHgyMSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEUgfCAweDFmfSwgLyogMGRCICovCiAJeyB9CkBAIC0yODkwLDcgKzI5MDYsNyBAQAogCiAJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgKiAyOwogCi0JaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dF9waW4pCisJaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dHMpCiAJCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gQUQxOTg4X1NQRElGX09VVDsKIAlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfaW5fcGluKQogCQlzcGVjLT5kaWdfaW5fbmlkID0gQUQxOTg4X1NQRElGX0lOOwpAQCAtMjk0MCw3ICsyOTU2LDcgQEAKIHN0YXRpYyBpbnQgcGF0Y2hfYWQxOTg4KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhZDE5OHhfc3BlYyAqc3BlYzsKLQlpbnQgYm9hcmRfY29uZmlnOworCWludCBlcnIsIGJvYXJkX2NvbmZpZzsKIAogCXNwZWMgPSBremFsbG9jKHNpemVvZigqc3BlYyksIEdGUF9LRVJORUwpOwogCWlmIChzcGVjID09IE5VTEwpCkBAIC0yOTYwLDcgKzI5NzYsNyBAQAogCiAJaWYgKGJvYXJkX2NvbmZpZyA9PSBBRDE5ODhfQVVUTykgewogCQkvKiBhdXRvbWF0aWMgcGFyc2UgZnJvbSB0aGUgQklPUyBjb25maWcgKi8KLQkJaW50IGVyciA9IGFkMTk4OF9wYXJzZV9hdXRvX2NvbmZpZyhjb2RlYyk7CisJCWVyciA9IGFkMTk4OF9wYXJzZV9hdXRvX2NvbmZpZyhjb2RlYyk7CiAJCWlmIChlcnIgPCAwKSB7CiAJCQlhZDE5OHhfZnJlZShjb2RlYyk7CiAJCQlyZXR1cm4gZXJyOwpAQCAtMjk3MCw2ICsyOTg2LDEzIEBACiAJCX0KIAl9CiAKKwllcnIgPSBzbmRfaGRhX2F0dGFjaF9iZWVwX2RldmljZShjb2RlYywgMHgxMCk7CisJaWYgKGVyciA8IDApIHsKKwkJYWQxOTh4X2ZyZWUoY29kZWMpOworCQlyZXR1cm4gZXJyOworCX0KKwlzZXRfYmVlcF9hbXAoc3BlYywgMHgxMCwgMCwgSERBX09VVFBVVCk7CisKIAlzd2l0Y2ggKGJvYXJkX2NvbmZpZykgewogCWNhc2UgQUQxOTg4XzZTVEFDSzoKIAljYXNlIEFEMTk4OF82U1RBQ0tfRElHOgpAQCAtMzEyNiwxMiArMzE0OSw2IEBACiAJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDIwLCAweDAxLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkNEIFBsYXliYWNrIFZvbHVtZSIsIDB4MjAsIDB4MDIsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkNEIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4MDIsIEhEQV9JTlBVVCksCi0JLyoKLQlIREFfQ09ERUNfVk9MVU1FKCJQQyBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MjAsIDB4MDMsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgyMCwgMHgwMywgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJEaWdpdGFsIEJlZXAgUGxheWJhY2sgVm9sdW1lIiwgMHgxMCwgMHgwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiRGlnaXRhbCBCZWVwIFBsYXliYWNrIFN3aXRjaCIsIDB4MTAsIDB4MCwgSERBX09VVFBVVCksCi0JKi8KIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QiLCAweDE1LCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIEJvb3N0IiwgMHgxNCwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgwYywgMHgwLCBIREFfT1VUUFVUKSwKQEAgLTMyMDQsMTAgKzMyMjEsMTAgQEAKIAl7MHgwZSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MX0sCiAJLyogUG9ydC1CIChmcm9udCBtaWMpIHBpbiAqLwogCXsweDE0LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODB9LAotCXsweDE0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAorCXsweDE0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKIAkvKiBQb3J0LUMgKHJlYXIgbWljKSBwaW4gKi8KIAl7MHgxNSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwfSwKLQl7MHgxNSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKKwl7MHgxNSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCiAJLyogQW5hbG9nIG1peGVyOyBtdXRlIGFzIGRlZmF1bHQgKi8KIAl7MHgyMCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAogCXsweDIwLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgxKX0sCkBAIC0zMjQwLDcgKzMyNTcsNyBAQAogCSJDRCBQbGF5YmFjayBWb2x1bWUiLAogCSJJbnRlcm5hbCBNaWMgUGxheWJhY2sgVm9sdW1lIiwKIAkiRG9ja2luZyBNaWMgUGxheWJhY2sgVm9sdW1lIgotCSJCZWVwIFBsYXliYWNrIFZvbHVtZSIsCisJLyogIkJlZXAgUGxheWJhY2sgVm9sdW1lIiwgKi8KIAkiSUVDOTU4IFBsYXliYWNrIFZvbHVtZSIsCiAJTlVMTAogfTsKQEAgLTMyNDgsNiArMzI2NSw3IEBACiBzdGF0aWMgaW50IHBhdGNoX2FkMTg4NChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWQxOTh4X3NwZWMgKnNwZWM7CisJaW50IGVycjsKIAogCXNwZWMgPSBremFsbG9jKHNpemVvZigqc3BlYyksIEdGUF9LRVJORUwpOwogCWlmIChzcGVjID09IE5VTEwpCkBAIC0zMjU1LDYgKzMyNzMsMTMgQEAKIAogCWNvZGVjLT5zcGVjID0gc3BlYzsKIAorCWVyciA9IHNuZF9oZGFfYXR0YWNoX2JlZXBfZGV2aWNlKGNvZGVjLCAweDEwKTsKKwlpZiAoZXJyIDwgMCkgeworCQlhZDE5OHhfZnJlZShjb2RlYyk7CisJCXJldHVybiBlcnI7CisJfQorCXNldF9iZWVwX2FtcChzcGVjLCAweDEwLCAwLCBIREFfT1VUUFVUKTsKKwogCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IDI7CiAJc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgPSBBUlJBWV9TSVpFKGFkMTg4NF9kYWNfbmlkcyk7CiAJc3BlYy0+bXVsdGlvdXQuZGFjX25pZHMgPSBhZDE4ODRfZGFjX25pZHM7CkBAIC0zMzIxLDggKzMzNDYsNiBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4MTQsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJJbnRlcm5hbCBNaWMgQm9vc3QiLCAweDE1LCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRG9ja2luZyBNaWMgQm9vc3QiLCAweDI1LCAweDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkJlZXAgUGxheWJhY2sgVm9sdW1lIiwgMHgyMCwgMHgwMywgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiQmVlcCBQbGF5YmFjayBTd2l0Y2giLCAweDIwLCAweDAzLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgwYywgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQ2FwdHVyZSBTd2l0Y2giLCAweDBjLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19WT0xVTUVfSURYKCJDYXB0dXJlIFZvbHVtZSIsIDEsIDB4MGQsIDB4MCwgSERBX09VVFBVVCksCkBAIC0zMzU4LDcgKzMzODEsNyBAQAogCXsweDFjLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODB9LAogCXsweDFjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAogCS8qIGRvY2tpbmcgbWljIGJvb3N0ICovCi0JezB4MjUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCisJezB4MjUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfWkVST30sCiAJLyogQW5hbG9nIG1peGVyIC0gZG9ja2luZyBtaWM7IG11dGUgYXMgZGVmYXVsdCAqLwogCXsweDIwLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSg0KX0sCiAJLyogZW5hYmxlIEVBUEQgYml0ICovCkBAIC0zMzc5LDEwICszNDAyLDYgQEAKIAlIREFfQ09ERUNfTVVURSgiRnJvbnQgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4MDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTGluZS1JbiBQbGF5YmFjayBWb2x1bWUiLCAweDIwLCAweDAxLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJMaW5lLUluIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4MDEsIEhEQV9JTlBVVCksCi0JLyoKLQlIREFfQ09ERUNfVk9MVU1FKCJQQyBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MjAsIDB4MDMsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgyMCwgMHgwMywgSERBX0lOUFVUKSwKLQkqLwogCUhEQV9DT0RFQ19WT0xVTUUoIkxpbmUtSW4gQm9vc3QiLCAweDE1LCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIEJvb3N0IiwgMHgxNCwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgwYywgMHgwLCBIREFfT1VUUFVUKSwKQEAgLTM0NjgsNyArMzQ4Nyw3IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBhZDE5ODRfY2ZnX3RibFtdID0gewogCS8qIExlbm92byBUaGlua3BhZCBUNjEvWDYxICovCi0JU05EX1BDSV9RVUlSSygweDE3YWEsIDAsICJMZW5vdm8gVGhpbmtwYWQiLCBBRDE5ODRfVEhJTktQQUQpLAorCVNORF9QQ0lfUVVJUktfVkVORE9SKDB4MTdhYSwgIkxlbm92byBUaGlua3BhZCIsIEFEMTk4NF9USElOS1BBRCksCiAJU05EX1BDSV9RVUlSSygweDEwMjgsIDB4MDIxNCwgIkRlbGwgVDM0MDAiLCBBRDE5ODRfREVMTF9ERVNLVE9QKSwKIAl7fQogfTsKQEAgLTM1NjEsOCArMzU4MCw2IEBACiAJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDIwLCAweDA0LCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkNEIFBsYXliYWNrIFZvbHVtZSIsIDB4MjAsIDB4MDIsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkNEIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4MDIsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiQmVlcCBQbGF5YmFjayBWb2x1bWUiLCAweDIwLCAweDAzLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJCZWVwIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4MDMsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIEJvb3N0IiwgMHgxNCwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkxpbmUgQm9vc3QiLCAweDE1LCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgyNSwgMHgwLCBIREFfT1VUUFVUKSwKQEAgLTM2MjIsMTAgKzM2MzksMTAgQEAKIAl7MHgxMywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKIAkvKiBQb3J0LUIgKGZyb250IG1pYykgcGluICovCiAJezB4MTQsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY4MH0sCi0JezB4MTQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCisJezB4MTQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAogCS8qIFBvcnQtQyAocmVhciBsaW5lLWluKSBwaW4gKi8KIAl7MHgxNSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU59LAotCXsweDE1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAorCXsweDE1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKIAkvKiBQb3J0LUUgKHJlYXIgbWljKSBwaW4gKi8KIAl7MHgxYywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwfSwKIAl7MHgxYywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKQEAgLTM2OTUsOCArMzcxMiw2IEBACiAJSERBX0NPREVDX01VVEUoIkludGVybmFsIE1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDIwLCAweDAxLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkRvY2sgTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MjAsIDB4MDQsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkRvY2sgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4MDQsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiQmVlcCBQbGF5YmFjayBWb2x1bWUiLCAweDIwLCAweDAzLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJCZWVwIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4MDMsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgxNCwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkludGVybmFsIE1pYyBCb29zdCIsIDB4MTUsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJEb2NrIE1pYyBCb29zdCIsIDB4MjUsIDB4MCwgSERBX09VVFBVVCksCkBAIC0zNzI0LDggKzM3MzksNiBAQAogCUhEQV9DT0RFQ19NVVRFKCJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgyMSwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJQQ00gUGxheWJhY2sgVm9sdW1lIiwgMHgyMCwgMHg1LCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJQQ00gUGxheWJhY2sgU3dpdGNoIiwgMHgyMCwgMHg1LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkJlZXAgUGxheWJhY2sgVm9sdW1lIiwgMHgyMCwgMHgwMywgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiQmVlcCBQbGF5YmFjayBTd2l0Y2giLCAweDIwLCAweDAzLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBDYXB0dXJlIFZvbHVtZSIsIDB4MTQsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJJbnRlcm5hbCBNaWMgQ2FwdHVyZSBWb2x1bWUiLCAweDE1LCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDBjLCAweDAsIEhEQV9PVVRQVVQpLApAQCAtMzgzNiw4ICszODQ5LDYgQEAKIAlIREFfQ09ERUNfTVVURSgiUENNIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4NSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgyMCwgMHgwMCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4MDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiQmVlcCBQbGF5YmFjayBWb2x1bWUiLCAweDIwLCAweDAzLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJCZWVwIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4MDMsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgxNCwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkludGVybmFsIE1pYyBCb29zdCIsIDB4MTcsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlIFZvbHVtZSIsIDB4MGMsIDB4MCwgSERBX09VVFBVVCksCkBAIC0zOTExLDkgKzM5MjIsOSBAQAogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDMwMzAsICJIUCIsIEFEMTg4NEFfTU9CSUxFKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzMDM3LCAiSFAgMjIzMHMiLCBBRDE4ODRBX0xBUFRPUCksCiAJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MzA1NiwgIkhQIiwgQUQxODg0QV9NT0JJTEUpLAotCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDMwZTYsICJIUCA2NzMwYiIsIEFEMTg4NEFfTEFQVE9QKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzMGU3LCAiSFAgRWxpdGVCb29rIDg1MzBwIiwgQUQxODg0QV9MQVBUT1ApLAotCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDM2MTQsICJIUCA2NzMwcyIsIEFEMTg4NEFfTEFQVE9QKSwKKwlTTkRfUENJX1FVSVJLX01BU0soMHgxMDNjLCAweGZmZjAsIDB4MzA3MCwgIkhQIiwgQUQxODg0QV9NT0JJTEUpLAorCVNORF9QQ0lfUVVJUktfTUFTSygweDEwM2MsIDB4ZmZmMCwgMHgzMGUwLCAiSFAgbGFwdG9wIiwgQUQxODg0QV9MQVBUT1ApLAorCVNORF9QQ0lfUVVJUktfTUFTSygweDEwM2MsIDB4ZmYwMCwgMHgzNjAwLCAiSFAgbGFwdG9wIiwgQUQxODg0QV9MQVBUT1ApLAogCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDIwYWMsICJUaGlua3BhZCBYMzAwIiwgQUQxODg0QV9USElOS1BBRCksCiAJe30KIH07CkBAIC0zOTIxLDcgKzM5MzIsNyBAQAogc3RhdGljIGludCBwYXRjaF9hZDE4ODRhKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhZDE5OHhfc3BlYyAqc3BlYzsKLQlpbnQgYm9hcmRfY29uZmlnOworCWludCBlcnIsIGJvYXJkX2NvbmZpZzsKIAogCXNwZWMgPSBremFsbG9jKHNpemVvZigqc3BlYyksIEdGUF9LRVJORUwpOwogCWlmIChzcGVjID09IE5VTEwpCkBAIC0zOTI5LDYgKzM5NDAsMTMgQEAKIAogCWNvZGVjLT5zcGVjID0gc3BlYzsKIAorCWVyciA9IHNuZF9oZGFfYXR0YWNoX2JlZXBfZGV2aWNlKGNvZGVjLCAweDEwKTsKKwlpZiAoZXJyIDwgMCkgeworCQlhZDE5OHhfZnJlZShjb2RlYyk7CisJCXJldHVybiBlcnI7CisJfQorCXNldF9iZWVwX2FtcChzcGVjLCAweDEwLCAwLCBIREFfT1VUUFVUKTsKKwogCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IDI7CiAJc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgPSBBUlJBWV9TSVpFKGFkMTg4NGFfZGFjX25pZHMpOwogCXNwZWMtPm11bHRpb3V0LmRhY19uaWRzID0gYWQxODg0YV9kYWNfbmlkczsKQEAgLTM5NjYsNiArMzk4NCwxNCBAQAogCQlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IDA7CiAJCWNvZGVjLT5wYXRjaF9vcHMudW5zb2xfZXZlbnQgPSBhZDE4ODRhX2hwX3Vuc29sX2V2ZW50OwogCQljb2RlYy0+cGF0Y2hfb3BzLmluaXQgPSBhZDE4ODRhX2hwX2luaXQ7CisJCS8qIHNldCB0aGUgdXBwZXItbGltaXQgZm9yIG1peGVyIGFtcCB0byAwZEIgZm9yIGF2b2lkaW5nIHRoZQorCQkgKiBwb3NzaWJsZSBkYW1hZ2UgYnkgb3ZlcmxvYWRpbmcKKwkJICovCisJCXNuZF9oZGFfb3ZlcnJpZGVfYW1wX2NhcHMoY29kZWMsIDB4MjAsIEhEQV9JTlBVVCwKKwkJCQkJICAoMHgxNyA8PCBBQ19BTVBDQVBfT0ZGU0VUX1NISUZUKSB8CisJCQkJCSAgKDB4MTcgPDwgQUNfQU1QQ0FQX05VTV9TVEVQU19TSElGVCkgfAorCQkJCQkgICgweDA1IDw8IEFDX0FNUENBUF9TVEVQX1NJWkVfU0hJRlQpIHwKKwkJCQkJICAoMSA8PCBBQ19BTVBDQVBfTVVURV9TSElGVCkpOwogCQlicmVhazsKIAljYXNlIEFEMTg4NEFfVEhJTktQQUQ6CiAJCXNwZWMtPm1peGVyc1swXSA9IGFkMTk4NGFfdGhpbmtwYWRfbWl4ZXJzOwpAQCAtNDA4Myw4ICs0MTA5LDYgQEAKIAlIREFfQ09ERUNfTVVURSgiTGluZSBQbGF5YmFjayBTd2l0Y2giLCAweDIwLCAweDA0LCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkNEIFBsYXliYWNrIFZvbHVtZSIsIDB4MjAsIDB4MDYsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkNEIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4MDYsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiQmVlcCBQbGF5YmFjayBWb2x1bWUiLCAweDIwLCAweDA3LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJCZWVwIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4MDcsIEhEQV9JTlBVVCksCiAJeyB9IC8qIGVuZCAqLwogfTsKIApAQCAtNDA5Nyw4ICs0MTIxLDYgQEAKIAlIREFfQ09ERUNfTVVURSgiTGluZSBQbGF5YmFjayBTd2l0Y2giLCAweDIwLCAweDAxLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkNEIFBsYXliYWNrIFZvbHVtZSIsIDB4MjAsIDB4MDYsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkNEIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4MDYsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiQmVlcCBQbGF5YmFjayBWb2x1bWUiLCAweDIwLCAweDA3LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJCZWVwIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4MDcsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRGlnaXRhbCBNaWMgQm9vc3QiLCAweDFmLCAweDAsIEhEQV9JTlBVVCksCiAJeyB9IC8qIGVuZCAqLwogfTsKQEAgLTQyNTcsNyArNDI3OSw3IEBACiBzdGF0aWMgaW50IHBhdGNoX2FkMTg4MihzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWQxOTh4X3NwZWMgKnNwZWM7Ci0JaW50IGJvYXJkX2NvbmZpZzsKKwlpbnQgZXJyLCBib2FyZF9jb25maWc7CiAKIAlzcGVjID0ga3phbGxvYyhzaXplb2YoKnNwZWMpLCBHRlBfS0VSTkVMKTsKIAlpZiAoc3BlYyA9PSBOVUxMKQpAQCAtNDI2NSw2ICs0Mjg3LDEzIEBACiAKIAljb2RlYy0+c3BlYyA9IHNwZWM7CiAKKwllcnIgPSBzbmRfaGRhX2F0dGFjaF9iZWVwX2RldmljZShjb2RlYywgMHgxMCk7CisJaWYgKGVyciA8IDApIHsKKwkJYWQxOTh4X2ZyZWUoY29kZWMpOworCQlyZXR1cm4gZXJyOworCX0KKwlzZXRfYmVlcF9hbXAoc3BlYywgMHgxMCwgMCwgSERBX09VVFBVVCk7CisKIAlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSA2OwogCXNwZWMtPm11bHRpb3V0Lm51bV9kYWNzID0gMzsKIAlzcGVjLT5tdWx0aW91dC5kYWNfbmlkcyA9IGFkMTg4Ml9kYWNfbmlkczsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY21lZGlhLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2NtZWRpYS5jCmluZGV4IGYzZWJlODMuLmM5MjEyNjQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY21lZGlhLmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9jbWVkaWEuYwpAQCAtNjgwLDEzICs2ODAsMTMgQEAKIAkJc3RydWN0IGF1dG9fcGluX2NmZyBjZmc7CiAKIAkJLyogY29sbGVjdCBwaW4gZGVmYXVsdCBjb25maWd1cmF0aW9uICovCi0JCXBvcnRfZSA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgMHgwZiwgMCwgQUNfVkVSQl9HRVRfQ09ORklHX0RFRkFVTFQsIDApOwotCQlwb3J0X2YgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIDB4MTAsIDAsIEFDX1ZFUkJfR0VUX0NPTkZJR19ERUZBVUxULCAwKTsKKwkJcG9ydF9lID0gc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKGNvZGVjLCAweDBmKTsKKwkJcG9ydF9mID0gc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKGNvZGVjLCAweDEwKTsKIAkJc3BlYy0+ZnJvbnRfcGFuZWwgPSAxOwogCQlpZiAoZ2V0X2RlZmNmZ19jb25uZWN0KHBvcnRfZSkgPT0gQUNfSkFDS19QT1JUX05PTkUgfHwKIAkJICAgIGdldF9kZWZjZmdfY29ubmVjdChwb3J0X2YpID09IEFDX0pBQ0tfUE9SVF9OT05FKSB7Ci0JCQlwb3J0X2cgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIDB4MWYsIDAsIEFDX1ZFUkJfR0VUX0NPTkZJR19ERUZBVUxULCAwKTsKLQkJCXBvcnRfaCA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgMHgyMCwgMCwgQUNfVkVSQl9HRVRfQ09ORklHX0RFRkFVTFQsIDApOworCQkJcG9ydF9nID0gc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKGNvZGVjLCAweDFmKTsKKwkJCXBvcnRfaCA9IHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyhjb2RlYywgMHgyMCk7CiAJCQlzcGVjLT5jaGFubmVsX21vZGVzID0gY21pOTg4MF9jaGFubmVsX21vZGVzOwogCQkJLyogbm8gZnJvbnQgcGFuZWwgKi8KIAkJCWlmIChnZXRfZGVmY2ZnX2Nvbm5lY3QocG9ydF9nKSA9PSBBQ19KQUNLX1BPUlRfTk9ORSB8fApAQCAtNzAzLDggKzcwMyw4IEBACiAJCQlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSBjbWk5ODgwX2NoYW5uZWxfbW9kZXNbMF0uY2hhbm5lbHM7CiAJCX0gZWxzZSB7CiAJCQlzcGVjLT5pbnB1dF9tdXggPSAmY21pOTg4MF9iYXNpY19tdXg7Ci0JCQlwb3J0X3NwZGlmaSA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgMHgxMywgMCwgQUNfVkVSQl9HRVRfQ09ORklHX0RFRkFVTFQsIDApOwotCQkJcG9ydF9zcGRpZm8gPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIDB4MTIsIDAsIEFDX1ZFUkJfR0VUX0NPTkZJR19ERUZBVUxULCAwKTsKKwkJCXBvcnRfc3BkaWZpID0gc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKGNvZGVjLCAweDEzKTsKKwkJCXBvcnRfc3BkaWZvID0gc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKGNvZGVjLCAweDEyKTsKIAkJCWlmIChnZXRfZGVmY2ZnX2Nvbm5lY3QocG9ydF9zcGRpZm8pICE9IEFDX0pBQ0tfUE9SVF9OT05FKQogCQkJCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gQ01JX0RJR19PVVRfTklEOwogCQkJaWYgKGdldF9kZWZjZmdfY29ubmVjdChwb3J0X3NwZGlmaSkgIT0gQUNfSkFDS19QT1JUX05PTkUpCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2NvbmV4YW50LmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2NvbmV4YW50LmMKaW5kZXggMDE3N2VmOC4uMWYyYWQ3NiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9jb25leGFudC5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY29uZXhhbnQuYwpAQCAtNTgsNiArNTgsNyBAQAogCiAJc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKm1peGVyc1s1XTsKIAlpbnQgbnVtX21peGVyczsKKwloZGFfbmlkX3Qgdm1hc3Rlcl9uaWQ7CiAKIAljb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgKmluaXRfdmVyYnNbNV07CS8qIGluaXRpYWxpemF0aW9uIHZlcmJzCiAJCQkJCQkgKiBkb24ndCBmb3JnZXQgTlVMTApAQCAtNzIsNiArNzMsNyBAQAogCQkJCQkgKi8KIAl1bnNpZ25lZCBpbnQgY3VyX2VhcGQ7CiAJdW5zaWduZWQgaW50IGhwX3ByZXNlbnQ7CisJdW5zaWduZWQgaW50IG5vX2F1dG9fbWljOwogCXVuc2lnbmVkIGludCBuZWVkX2RhY19maXg7CiAKIAkvKiBjYXB0dXJlICovCkBAIC00NjEsNiArNDYzLDI5IEBACiAJa2ZyZWUoY29kZWMtPnNwZWMpOwogfQogCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgY3h0X2NhcHR1cmVfbWl4ZXJzW10gPSB7CisJeworCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkJLm5hbWUgPSAiQ2FwdHVyZSBTb3VyY2UiLAorCQkuaW5mbyA9IGNvbmV4YW50X211eF9lbnVtX2luZm8sCisJCS5nZXQgPSBjb25leGFudF9tdXhfZW51bV9nZXQsCisJCS5wdXQgPSBjb25leGFudF9tdXhfZW51bV9wdXQKKwl9LAorCXt9Cit9OworCitzdGF0aWMgY29uc3QgY2hhciAqc2xhdmVfdm9sc1tdID0geworCSJIZWFkcGhvbmUgUGxheWJhY2sgVm9sdW1lIiwKKwkiU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpzbGF2ZV9zd3NbXSA9IHsKKwkiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsCisJIlNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwKKwlOVUxMCit9OworCiBzdGF0aWMgaW50IGNvbmV4YW50X2J1aWxkX2NvbnRyb2xzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBjb25leGFudF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CkBAIC00ODgsNiArNTEzLDMyIEBACiAJCWlmIChlcnIgPCAwKQogCQkJcmV0dXJuIGVycjsKIAl9CisKKwkvKiBpZiB3ZSBoYXZlIG5vIG1hc3RlciBjb250cm9sLCBsZXQncyBjcmVhdGUgaXQgKi8KKwlpZiAoc3BlYy0+dm1hc3Rlcl9uaWQgJiYKKwkgICAgIXNuZF9oZGFfZmluZF9taXhlcl9jdGwoY29kZWMsICJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIikpIHsKKwkJdW5zaWduZWQgaW50IHZtYXN0ZXJfdGx2WzRdOworCQlzbmRfaGRhX3NldF92bWFzdGVyX3Rsdihjb2RlYywgc3BlYy0+dm1hc3Rlcl9uaWQsCisJCQkJCUhEQV9PVVRQVVQsIHZtYXN0ZXJfdGx2KTsKKwkJZXJyID0gc25kX2hkYV9hZGRfdm1hc3Rlcihjb2RlYywgIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLAorCQkJCQkgIHZtYXN0ZXJfdGx2LCBzbGF2ZV92b2xzKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCX0KKwlpZiAoc3BlYy0+dm1hc3Rlcl9uaWQgJiYKKwkgICAgIXNuZF9oZGFfZmluZF9taXhlcl9jdGwoY29kZWMsICJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIikpIHsKKwkJZXJyID0gc25kX2hkYV9hZGRfdm1hc3Rlcihjb2RlYywgIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLAorCQkJCQkgIE5VTEwsIHNsYXZlX3N3cyk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlpZiAoc3BlYy0+aW5wdXRfbXV4KSB7CisJCWVyciA9IHNuZF9oZGFfYWRkX25ld19jdGxzKGNvZGVjLCBjeHRfY2FwdHVyZV9taXhlcnMpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTcxOSwxMyArNzcwLDYgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGN4dDUwNDVfbWl4ZXJzW10gPSB7Ci0JewotCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKLQkJLm5hbWUgPSAiQ2FwdHVyZSBTb3VyY2UiLAotCQkuaW5mbyA9IGNvbmV4YW50X211eF9lbnVtX2luZm8sCi0JCS5nZXQgPSBjb25leGFudF9tdXhfZW51bV9nZXQsCi0JCS5wdXQgPSBjb25leGFudF9tdXhfZW51bV9wdXQKLQl9LAogCUhEQV9DT0RFQ19WT0xVTUUoIkludCBNaWMgQ2FwdHVyZSBWb2x1bWUiLCAweDFhLCAweDAxLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJJbnQgTWljIENhcHR1cmUgU3dpdGNoIiwgMHgxYSwgMHgwMSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJFeHQgTWljIENhcHR1cmUgVm9sdW1lIiwgMHgxYSwgMHgwMiwgSERBX0lOUFVUKSwKQEAgLTc1OSwxMyArODAzLDYgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjeHQ1MDQ1X21peGVyc19ocDUzMFtdID0gewotCXsKLQkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCi0JCS5uYW1lID0gIkNhcHR1cmUgU291cmNlIiwKLQkJLmluZm8gPSBjb25leGFudF9tdXhfZW51bV9pbmZvLAotCQkuZ2V0ID0gY29uZXhhbnRfbXV4X2VudW1fZ2V0LAotCQkucHV0ID0gY29uZXhhbnRfbXV4X2VudW1fcHV0Ci0JfSwKIAlIREFfQ09ERUNfVk9MVU1FKCJJbnQgTWljIENhcHR1cmUgVm9sdW1lIiwgMHgxYSwgMHgwMiwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiSW50IE1pYyBDYXB0dXJlIFN3aXRjaCIsIDB4MWEsIDB4MDIsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRXh0IE1pYyBDYXB0dXJlIFZvbHVtZSIsIDB4MWEsIDB4MDEsIEhEQV9JTlBVVCksCkBAIC0xMDAyLDE1ICsxMDM5LDkgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBjeHQ1MDQ1X2NmZ190YmxbXSA9IHsKLQlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzMGE1LCAiSFAiLCBDWFQ1MDQ1X0xBUFRPUF9IUFNFTlNFKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzMGIyLCAiSFAgRFYgU2VyaWVzIiwgQ1hUNTA0NV9MQVBUT1BfSFBTRU5TRSksCi0JU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MzBiNSwgIkhQIERWMjEyMCIsIENYVDUwNDVfTEFQVE9QX0hQU0VOU0UpLAotCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDMwYjcsICJIUCBEVjYwMDBaIiwgQ1hUNTA0NV9MQVBUT1BfSFBTRU5TRSksCi0JU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MzBiYiwgIkhQIERWODAwMCIsIENYVDUwNDVfTEFQVE9QX0hQU0VOU0UpLAotCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDMwY2QsICJIUCBEViBTZXJpZXMiLCBDWFQ1MDQ1X0xBUFRPUF9IUFNFTlNFKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzMGNmLCAiSFAgRFY5NTMzRUciLCBDWFQ1MDQ1X0xBUFRPUF9IUFNFTlNFKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzMGQ1LCAiSFAgNTMwIiwgQ1hUNTA0NV9MQVBUT1BfSFA1MzApLAotCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDMwZDksICJIUCBTcGFydGFuIiwgQ1hUNTA0NV9MQVBUT1BfSFBTRU5TRSksCisJU05EX1BDSV9RVUlSS19NQVNLKDB4MTAzYywgMHhmZjAwLCAweDMwMDAsICJIUCBEViBTZXJpZXMiLAorCQkJICAgQ1hUNTA0NV9MQVBUT1BfSFBTRU5TRSksCiAJU05EX1BDSV9RVUlSSygweDExNzksIDB4ZmYzMSwgIlRvc2hpYmEgUDEwNSIsIENYVDUwNDVfTEFQVE9QX01JQ1NFTlNFKSwKIAlTTkRfUENJX1FVSVJLKDB4MTUyZCwgMHgwNzUzLCAiQmVucSBSNTVFIiwgQ1hUNTA0NV9CRU5RKSwKIAlTTkRfUENJX1FVSVJLKDB4MTczNCwgMHgxMGFkLCAiRnVqaXRzdSBTaTE1MjAiLCBDWFQ1MDQ1X0xBUFRPUF9NSUNTRU5TRSksCkBAIC0xMDIwLDggKzEwNTEsOCBAQAogCVNORF9QQ0lfUVVJUksoMHgxNTA5LCAweDFlNDAsICJGSUMiLCBDWFQ1MDQ1X0xBUFRPUF9IUE1JQ1NFTlNFKSwKIAlTTkRfUENJX1FVSVJLKDB4MTUwOSwgMHgyZjA1LCAiRklDIiwgQ1hUNTA0NV9MQVBUT1BfSFBNSUNTRU5TRSksCiAJU05EX1BDSV9RVUlSSygweDE1MDksIDB4MmYwNiwgIkZJQyIsIENYVDUwNDVfTEFQVE9QX0hQTUlDU0VOU0UpLAotCVNORF9QQ0lfUVVJUksoMHgxNjMxLCAweGMxMDYsICJQYWNrYXJkIEJlbGwiLCBDWFQ1MDQ1X0xBUFRPUF9IUE1JQ1NFTlNFKSwKLQlTTkRfUENJX1FVSVJLKDB4MTYzMSwgMHhjMTA3LCAiUGFja2FyZCBCZWxsIiwgQ1hUNTA0NV9MQVBUT1BfSFBNSUNTRU5TRSksCisJU05EX1BDSV9RVUlSS19NQVNLKDB4MTYzMSwgMHhmZjAwLCAweGMxMDAsICJQYWNrYXJkIEJlbGwiLAorCQkJICAgQ1hUNTA0NV9MQVBUT1BfSFBNSUNTRU5TRSksCiAJU05EX1BDSV9RVUlSSygweDgwODYsIDB4MjExMSwgIkNvbmV4YW50IFJlZmVyZW5jZSBib2FyZCIsIENYVDUwNDVfTEFQVE9QX0hQU0VOU0UpLAogCXt9CiB9OwpAQCAtMTAzNSw2ICsxMDY2LDcgQEAKIAlpZiAoIXNwZWMpCiAJCXJldHVybiAtRU5PTUVNOwogCWNvZGVjLT5zcGVjID0gc3BlYzsKKwljb2RlYy0+cGluX2FtcF93b3JrYXJvdW5kID0gMTsKIAogCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IDI7CiAJc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgPSBBUlJBWV9TSVpFKGN4dDUwNDVfZGFjX25pZHMpOwpAQCAtMTEzNCw3ICsxMTY2LDcgQEAKIC8qIENvbmV4YW50IDUwNDcgc3BlY2lmaWMgKi8KICNkZWZpbmUgQ1hUNTA0N19TUERJRl9PVVQJMHgxMQogCi1zdGF0aWMgaGRhX25pZF90IGN4dDUwNDdfZGFjX25pZHNbMl0gPSB7IDB4MTAsIDB4MWMgfTsKK3N0YXRpYyBoZGFfbmlkX3QgY3h0NTA0N19kYWNfbmlkc1sxXSA9IHsgMHgxMCB9OyAvKiAweDFjICovCiBzdGF0aWMgaGRhX25pZF90IGN4dDUwNDdfYWRjX25pZHNbMV0gPSB7IDB4MTIgfTsKIHN0YXRpYyBoZGFfbmlkX3QgY3h0NTA0N19jYXBzcmNfbmlkc1sxXSA9IHsgMHgxYSB9OwogCkBAIC0xMTQyLDIwICsxMTc0LDYgQEAKIAl7IDIsIE5VTEwgfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX2lucHV0X211eCBjeHQ1MDQ3X2NhcHR1cmVfc291cmNlID0gewotCS5udW1faXRlbXMgPSAxLAotCS5pdGVtcyA9IHsKLQkJeyAiTWljIiwgMHgyIH0sCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IGN4dDUwNDdfaHBfY2FwdHVyZV9zb3VyY2UgPSB7Ci0JLm51bV9pdGVtcyA9IDEsCi0JLml0ZW1zID0gewotCQl7ICJFeHRNaWMiLCAweDIgfSwKLQl9Ci19OwotCiBzdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggY3h0NTA0N190b3NoaWJhX2NhcHR1cmVfc291cmNlID0gewogCS5udW1faXRlbXMgPSAyLAogCS5pdGVtcyA9IHsKQEAgLTExNzksNyArMTE5NywxMSBAQAogCSAqIHRoZSBoZWFkcGhvbmUgamFjawogCSAqLwogCWJpdHMgPSAoIXNwZWMtPmhwX3ByZXNlbnQgJiYgc3BlYy0+Y3VyX2VhcGQpID8gMCA6IEhEQV9BTVBfTVVURTsKLQlzbmRfaGRhX2NvZGVjX2FtcF9zdGVyZW8oY29kZWMsIDB4MWQsIEhEQV9PVVRQVVQsIDAsCisJLyogTk9URTogQ29uZXhhdCBjb2RlYyBuZWVkcyB0aGUgaW5kZXggZm9yICpPVVRQVVQqIGFtcCBvZgorCSAqIHBpbiB3aWRnZXRzIHVubGlrZSBvdGhlciBjb2RlY3MuICBJbiB0aGlzIGNhc2UsIHdlIG5lZWQgdG8KKwkgKiBzZXQgaW5kZXggMHgwMSBmb3IgdGhlIHZvbHVtZSBmcm9tIHRoZSBtaXhlciBhbXAgMHgxOS4KKwkgKi8KKwlzbmRfaGRhX2NvZGVjX2FtcF9zdGVyZW8oY29kZWMsIDB4MWQsIEhEQV9PVVRQVVQsIDB4MDEsCiAJCQkJIEhEQV9BTVBfTVVURSwgYml0cyk7CiAJYml0cyA9IHNwZWMtPmN1cl9lYXBkID8gMCA6IEhEQV9BTVBfTVVURTsKIAlzbmRfaGRhX2NvZGVjX2FtcF9zdGVyZW8oY29kZWMsIDB4MTMsIEhEQV9PVVRQVVQsIDAsCkBAIC0xMTg3LDE2ICsxMjA5LDYgQEAKIAlyZXR1cm4gMTsKIH0KIAotLyogYmluZCB2b2x1bWVzIG9mIGJvdGggTklEIDB4MTMgKEhlYWRwaG9uZXMpIGFuZCAweDFkIChTcGVha2VycykgKi8KLXN0YXRpYyBzdHJ1Y3QgaGRhX2JpbmRfY3RscyBjeHQ1MDQ3X2JpbmRfbWFzdGVyX3ZvbCA9IHsKLQkub3BzID0gJnNuZF9oZGFfYmluZF92b2wsCi0JLnZhbHVlcyA9IHsKLQkJSERBX0NPTVBPU0VfQU1QX1ZBTCgweDEzLCAzLCAwLCBIREFfT1VUUFVUKSwKLQkJSERBX0NPTVBPU0VfQU1QX1ZBTCgweDFkLCAzLCAwLCBIREFfT1VUUFVUKSwKLQkJMAotCX0sCi19OwotCiAvKiBtdXRlIGludGVybmFsIHNwZWFrZXIgaWYgSFAgaXMgcGx1Z2dlZCAqLwogc3RhdGljIHZvaWQgY3h0NTA0N19ocF9hdXRvbXV0ZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKQEAgLTEyMDcsMjcgKzEyMTksOCBAQAogCQkJCSAgICAgQUNfVkVSQl9HRVRfUElOX1NFTlNFLCAwKSAmIDB4ODAwMDAwMDA7CiAKIAliaXRzID0gKHNwZWMtPmhwX3ByZXNlbnQgfHwgIXNwZWMtPmN1cl9lYXBkKSA/IEhEQV9BTVBfTVVURSA6IDA7Ci0Jc25kX2hkYV9jb2RlY19hbXBfc3RlcmVvKGNvZGVjLCAweDFkLCBIREFfT1VUUFVULCAwLAotCQkJCSBIREFfQU1QX01VVEUsIGJpdHMpOwotCS8qIE11dGUvVW5tdXRlIFBDTSAyIGZvciBnb29kIG1lYXN1cmUgLSBzb21lIHN5c3RlbXMgbmVlZCB0aGlzICovCi0Jc25kX2hkYV9jb2RlY19hbXBfc3RlcmVvKGNvZGVjLCAweDFjLCBIREFfT1VUUFVULCAwLAotCQkJCSBIREFfQU1QX01VVEUsIGJpdHMpOwotfQotCi0vKiBtdXRlIGludGVybmFsIHNwZWFrZXIgaWYgSFAgaXMgcGx1Z2dlZCAqLwotc3RhdGljIHZvaWQgY3h0NTA0N19ocDJfYXV0b211dGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCi17Ci0Jc3RydWN0IGNvbmV4YW50X3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQl1bnNpZ25lZCBpbnQgYml0czsKLQotCXNwZWMtPmhwX3ByZXNlbnQgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIDB4MTMsIDAsCi0JCQkJICAgICBBQ19WRVJCX0dFVF9QSU5fU0VOU0UsIDApICYgMHg4MDAwMDAwMDsKLQotCWJpdHMgPSBzcGVjLT5ocF9wcmVzZW50ID8gSERBX0FNUF9NVVRFIDogMDsKLQlzbmRfaGRhX2NvZGVjX2FtcF9zdGVyZW8oY29kZWMsIDB4MWQsIEhEQV9PVVRQVVQsIDAsCi0JCQkJIEhEQV9BTVBfTVVURSwgYml0cyk7Ci0JLyogTXV0ZS9Vbm11dGUgUENNIDIgZm9yIGdvb2QgbWVhc3VyZSAtIHNvbWUgc3lzdGVtcyBuZWVkIHRoaXMgKi8KLQlzbmRfaGRhX2NvZGVjX2FtcF9zdGVyZW8oY29kZWMsIDB4MWMsIEhEQV9PVVRQVVQsIDAsCisJLyogU2VlIHRoZSBub3RlIGluIGN4dDUwNDdfaHBfbWFzdGVyX3N3X3B1dCAqLworCXNuZF9oZGFfY29kZWNfYW1wX3N0ZXJlbyhjb2RlYywgMHgxZCwgSERBX09VVFBVVCwgMHgwMSwKIAkJCQkgSERBX0FNUF9NVVRFLCBiaXRzKTsKIH0KIApAQCAtMTI2OCw5MCArMTI2MSwzNSBAQAogCX0KIH0KIAotLyogdW5zb2xpY2l0ZWQgZXZlbnQgZm9yIEhQIGphY2sgc2Vuc2luZyAtIG5vbi1FQVBEIHN5c3RlbXMgKi8KLXN0YXRpYyB2b2lkIGN4dDUwNDdfaHAyX3Vuc29sX2V2ZW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAotCQkJCSAgdW5zaWduZWQgaW50IHJlcykKLXsKLQlyZXMgPj49IDI2OwotCXN3aXRjaCAocmVzKSB7Ci0JY2FzZSBDT05FWEFOVF9IUF9FVkVOVDoKLQkJY3h0NTA0N19ocDJfYXV0b211dGUoY29kZWMpOwotCQlicmVhazsKLQljYXNlIENPTkVYQU5UX01JQ19FVkVOVDoKLQkJY3h0NTA0N19ocF9hdXRvbWljKGNvZGVjKTsKLQkJYnJlYWs7Ci0JfQotfQotCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgY3h0NTA0N19taXhlcnNbXSA9IHsKLQlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQnlwYXNzIENhcHR1cmUgVm9sdW1lIiwgMHgxOSwgMHgwMiwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiTWljIEJ5cGFzcyBDYXB0dXJlIFN3aXRjaCIsIDB4MTksIDB4MDIsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiTWljIEdhaW4gVm9sdW1lIiwgMHgxYSwgMHgwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiTWljIEdhaW4gU3dpdGNoIiwgMHgxYSwgMHgwLCBIREFfT1VUUFVUKSwKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjeHQ1MDQ3X2Jhc2VfbWl4ZXJzW10gPSB7CisJSERBX0NPREVDX1ZPTFVNRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MTksIDB4MDIsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDE5LCAweDAyLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4MWEsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDEyLCAweDAzLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJDYXB0dXJlIFN3aXRjaCIsIDB4MTIsIDB4MDMsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiUENNIFZvbHVtZSIsIDB4MTAsIDB4MDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJQQ00gU3dpdGNoIiwgMHgxMCwgMHgwMCwgSERBX09VVFBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiUENNLTIgVm9sdW1lIiwgMHgxYywgMHgwMCwgSERBX09VVFBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDTS0yIFN3aXRjaCIsIDB4MWMsIDB4MDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIlNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgxZCwgMHgwMCwgSERBX09VVFBVVCksCi0JSERBX0NPREVDX01VVEUoIlNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgxZCwgMHgwMCwgSERBX09VVFBVVCksCisJeworCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkJLm5hbWUgPSAiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsCisJCS5pbmZvID0gY3h0X2VhcGRfaW5mbywKKwkJLmdldCA9IGN4dF9lYXBkX2dldCwKKwkJLnB1dCA9IGN4dDUwNDdfaHBfbWFzdGVyX3N3X3B1dCwKKwkJLnByaXZhdGVfdmFsdWUgPSAweDEzLAorCX0sCisKKwl7fQorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGN4dDUwNDdfaHBfc3BrX21peGVyc1tdID0geworCS8qIFNlZSB0aGUgbm90ZSBpbiBjeHQ1MDQ3X2hwX21hc3Rlcl9zd19wdXQgKi8KKwlIREFfQ09ERUNfVk9MVU1FKCJTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MWQsIDB4MDEsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkhlYWRwaG9uZSBQbGF5YmFjayBWb2x1bWUiLCAweDEzLCAweDAwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsIDB4MTMsIDB4MDAsIEhEQV9PVVRQVVQpLAotCiAJe30KIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjeHQ1MDQ3X3Rvc2hpYmFfbWl4ZXJzW10gPSB7Ci0JewotCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKLQkJLm5hbWUgPSAiQ2FwdHVyZSBTb3VyY2UiLAotCQkuaW5mbyA9IGNvbmV4YW50X211eF9lbnVtX2luZm8sCi0JCS5nZXQgPSBjb25leGFudF9tdXhfZW51bV9nZXQsCi0JCS5wdXQgPSBjb25leGFudF9tdXhfZW51bV9wdXQKLQl9LAotCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCeXBhc3MgQ2FwdHVyZSBWb2x1bWUiLCAweDE5LCAweDAyLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJNaWMgQnlwYXNzIENhcHR1cmUgU3dpdGNoIiwgMHgxOSwgMHgwMiwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlIFZvbHVtZSIsIDB4MTIsIDB4MDMsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIkNhcHR1cmUgU3dpdGNoIiwgMHgxMiwgMHgwMywgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJQQ00gVm9sdW1lIiwgMHgxMCwgMHgwMCwgSERBX09VVFBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDTSBTd2l0Y2giLCAweDEwLCAweDAwLCBIREFfT1VUUFVUKSwKLQlIREFfQklORF9WT0woIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLCAmY3h0NTA0N19iaW5kX21hc3Rlcl92b2wpLAotCXsKLQkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCi0JCS5uYW1lID0gIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLAotCQkuaW5mbyA9IGN4dF9lYXBkX2luZm8sCi0JCS5nZXQgPSBjeHRfZWFwZF9nZXQsCi0JCS5wdXQgPSBjeHQ1MDQ3X2hwX21hc3Rlcl9zd19wdXQsCi0JCS5wcml2YXRlX3ZhbHVlID0gMHgxMywKLQl9LAotCi0Je30KLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjeHQ1MDQ3X2hwX21peGVyc1tdID0gewotCXsKLQkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCi0JCS5uYW1lID0gIkNhcHR1cmUgU291cmNlIiwKLQkJLmluZm8gPSBjb25leGFudF9tdXhfZW51bV9pbmZvLAotCQkuZ2V0ID0gY29uZXhhbnRfbXV4X2VudW1fZ2V0LAotCQkucHV0ID0gY29uZXhhbnRfbXV4X2VudW1fcHV0Ci0JfSwKLQlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQnlwYXNzIENhcHR1cmUgVm9sdW1lIiwgMHgxOSwgMHgwMiwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiTWljIEJ5cGFzcyBDYXB0dXJlIFN3aXRjaCIsIDB4MTksMHgwMixIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgxMiwgMHgwMywgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiQ2FwdHVyZSBTd2l0Y2giLCAweDEyLCAweDAzLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIlBDTSBWb2x1bWUiLCAweDEwLCAweDAwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiUENNIFN3aXRjaCIsIDB4MTAsIDB4MDAsIEhEQV9PVVRQVVQpLAorc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGN4dDUwNDdfaHBfb25seV9taXhlcnNbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgxMywgMHgwMCwgSERBX09VVFBVVCksCi0JewotCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKLQkJLm5hbWUgPSAiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsCi0JCS5pbmZvID0gY3h0X2VhcGRfaW5mbywKLQkJLmdldCA9IGN4dF9lYXBkX2dldCwKLQkJLnB1dCA9IGN4dDUwNDdfaHBfbWFzdGVyX3N3X3B1dCwKLQkJLnByaXZhdGVfdmFsdWUgPSAweDEzLAotCX0sCiAJeyB9IC8qIGVuZCAqLwogfTsKIApAQCAtMTM2Miw4ICsxMzAwLDggQEAKIAl7MHgxNywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU58QUNfUElOQ1RMX1ZSRUZfNTAgfSwKIAkvKiBIUCwgU3BlYWtlciAgKi8KIAl7MHgxMywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSFAgfSwKLQl7MHgxMywgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsMHgxfSwKLQl7MHgxZCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsMHgwfSwKKwl7MHgxMywgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MH0sIC8qIG1peGVyKDB4MTkpICovCisJezB4MWQsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDF9LCAvKiBtaXhlcigweDE5KSAqLwogCS8qIFJlY29yZCBzZWxlY3RvcjogTWljICovCiAJezB4MTIsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLDB4MDN9LAogCXsweDE5LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLApAQCAtMTM4MywzMCArMTMyMSw3IEBACiAKIC8qIGNvbmZpZ3VyYXRpb24gZm9yIFRvc2hpYmEgTGFwdG9wcyAqLwogc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBjeHQ1MDQ3X3Rvc2hpYmFfaW5pdF92ZXJic1tdID0gewotCXsweDEzLCBBQ19WRVJCX1NFVF9FQVBEX0JUTEVOQUJMRSwgMHgwIH0sIC8qIGRlZmF1bHQgb24gKi8KLQkvKiBwaW4gc2Vuc2luZyBvbiBIUCBhbmQgTWljIGphY2tzICovCi0JezB4MTMsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU4gfCBDT05FWEFOVF9IUF9FVkVOVH0sCi0JezB4MTUsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU4gfCBDT05FWEFOVF9NSUNfRVZFTlR9LAotCS8qIFNwZWFrZXIgcm91dGluZyAqLwotCXsweDFkLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwweDF9LAotCXt9Ci19OwotCi0vKiBjb25maWd1cmF0aW9uIGZvciBIUCBMYXB0b3BzICovCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGN4dDUwNDdfaHBfaW5pdF92ZXJic1tdID0gewotCS8qIHBpbiBzZW5zaW5nIG9uIEhQIGphY2sgKi8KLQl7MHgxMywgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTiB8IENPTkVYQU5UX0hQX0VWRU5UfSwKLQkvKiAweDEzIGlzIGFjdHVhbGx5IHNoYXJlZCBieSBib3RoIEhQIGFuZCBzcGVha2VyOwotCSAqIHNldHRpbmcgdGhlIGNvbm5lY3Rpb24gdG8gMCAoPTB4MTkpIG1ha2VzIHRoZSBtYXN0ZXIgdm9sdW1lIGNvbnRyb2wKLQkgKiB3b3JraW5nIG15c3RlcmlvdXNsbHkuLi4KLQkgKi8KLQl7MHgxMywgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MH0sCi0JLyogUmVjb3JkIHNlbGVjdG9yOiBFeHQgTWljICovCi0JezB4MTIsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLDB4MDN9LAotCXsweDE5LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLAotCSBBQ19BTVBfU0VUX0lOUFVUfEFDX0FNUF9TRVRfUklHSFR8QUNfQU1QX1NFVF9MRUZUfDB4MTd9LAotCS8qIFNwZWFrZXIgcm91dGluZyAqLwotCXsweDFkLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwweDF9LAorCXsweDEzLCBBQ19WRVJCX1NFVF9FQVBEX0JUTEVOQUJMRSwgMHgwfSwgLyogZGVmYXVsdCBvZmYgKi8KIAl7fQogfTsKIApAQCAtMTU3MSwxMSArMTQ4Niw5IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgY3h0NTA0N19jZmdfdGJsW10gPSB7Ci0JU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MzBhMCwgIkhQIERWMTAwMCIsIENYVDUwNDdfTEFQVE9QKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzMGE1LCAiSFAgRFY1MjAwVC9EVjgwMDBUIiwgQ1hUNTA0N19MQVBUT1BfSFApLAotCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDMwYjIsICJIUCBEVjIwMDBUL0RWMzAwMFQiLCBDWFQ1MDQ3X0xBUFRPUCksCi0JU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MzBiNSwgIkhQIERWMjAwMFoiLCBDWFQ1MDQ3X0xBUFRPUCksCi0JU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MzBjZiwgIkhQIERWNjcwMCIsIENYVDUwNDdfTEFQVE9QKSwKKwlTTkRfUENJX1FVSVJLX01BU0soMHgxMDNjLCAweGZmMDAsIDB4MzAwMCwgIkhQIERWIFNlcmllcyIsCisJCQkgICBDWFQ1MDQ3X0xBUFRPUCksCiAJU05EX1BDSV9RVUlSSygweDExNzksIDB4ZmYzMSwgIlRvc2hpYmEgUDEwMCIsIENYVDUwNDdfTEFQVE9QX0VBUEQpLAogCXt9CiB9OwpAQCAtMTU4OSw2ICsxNTAyLDcgQEAKIAlpZiAoIXNwZWMpCiAJCXJldHVybiAtRU5PTUVNOwogCWNvZGVjLT5zcGVjID0gc3BlYzsKKwljb2RlYy0+cGluX2FtcF93b3JrYXJvdW5kID0gMTsKIAogCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IDI7CiAJc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgPSBBUlJBWV9TSVpFKGN4dDUwNDdfZGFjX25pZHMpOwpAQCAtMTU5Nyw5ICsxNTExLDggQEAKIAlzcGVjLT5udW1fYWRjX25pZHMgPSAxOwogCXNwZWMtPmFkY19uaWRzID0gY3h0NTA0N19hZGNfbmlkczsKIAlzcGVjLT5jYXBzcmNfbmlkcyA9IGN4dDUwNDdfY2Fwc3JjX25pZHM7Ci0Jc3BlYy0+aW5wdXRfbXV4ID0gJmN4dDUwNDdfY2FwdHVyZV9zb3VyY2U7CiAJc3BlYy0+bnVtX21peGVycyA9IDE7Ci0Jc3BlYy0+bWl4ZXJzWzBdID0gY3h0NTA0N19taXhlcnM7CisJc3BlYy0+bWl4ZXJzWzBdID0gY3h0NTA0N19iYXNlX21peGVyczsKIAlzcGVjLT5udW1faW5pdF92ZXJicyA9IDE7CiAJc3BlYy0+aW5pdF92ZXJic1swXSA9IGN4dDUwNDdfaW5pdF92ZXJiczsKIAlzcGVjLT5zcGRpZl9yb3V0ZSA9IDA7CkBAIC0xNjEzLDIxICsxNTI2LDIyIEBACiAJCQkJCQkgIGN4dDUwNDdfY2ZnX3RibCk7CiAJc3dpdGNoIChib2FyZF9jb25maWcpIHsKIAljYXNlIENYVDUwNDdfTEFQVE9QOgotCQljb2RlYy0+cGF0Y2hfb3BzLnVuc29sX2V2ZW50ID0gY3h0NTA0N19ocDJfdW5zb2xfZXZlbnQ7CisJCXNwZWMtPm51bV9taXhlcnMgPSAyOworCQlzcGVjLT5taXhlcnNbMV0gPSBjeHQ1MDQ3X2hwX3Nwa19taXhlcnM7CisJCWNvZGVjLT5wYXRjaF9vcHMudW5zb2xfZXZlbnQgPSBjeHQ1MDQ3X2hwX3Vuc29sX2V2ZW50OwogCQlicmVhazsKIAljYXNlIENYVDUwNDdfTEFQVE9QX0hQOgotCQlzcGVjLT5pbnB1dF9tdXggPSAmY3h0NTA0N19ocF9jYXB0dXJlX3NvdXJjZTsKLQkJc3BlYy0+bnVtX2luaXRfdmVyYnMgPSAyOwotCQlzcGVjLT5pbml0X3ZlcmJzWzFdID0gY3h0NTA0N19ocF9pbml0X3ZlcmJzOwotCQlzcGVjLT5taXhlcnNbMF0gPSBjeHQ1MDQ3X2hwX21peGVyczsKKwkJc3BlYy0+bnVtX21peGVycyA9IDI7CisJCXNwZWMtPm1peGVyc1sxXSA9IGN4dDUwNDdfaHBfb25seV9taXhlcnM7CiAJCWNvZGVjLT5wYXRjaF9vcHMudW5zb2xfZXZlbnQgPSBjeHQ1MDQ3X2hwX3Vuc29sX2V2ZW50OwogCQljb2RlYy0+cGF0Y2hfb3BzLmluaXQgPSBjeHQ1MDQ3X2hwX2luaXQ7CiAJCWJyZWFrOwogCWNhc2UgQ1hUNTA0N19MQVBUT1BfRUFQRDoKIAkJc3BlYy0+aW5wdXRfbXV4ID0gJmN4dDUwNDdfdG9zaGliYV9jYXB0dXJlX3NvdXJjZTsKKwkJc3BlYy0+bnVtX21peGVycyA9IDI7CisJCXNwZWMtPm1peGVyc1sxXSA9IGN4dDUwNDdfaHBfc3BrX21peGVyczsKIAkJc3BlYy0+bnVtX2luaXRfdmVyYnMgPSAyOwogCQlzcGVjLT5pbml0X3ZlcmJzWzFdID0gY3h0NTA0N190b3NoaWJhX2luaXRfdmVyYnM7Ci0JCXNwZWMtPm1peGVyc1swXSA9IGN4dDUwNDdfdG9zaGliYV9taXhlcnM7CiAJCWNvZGVjLT5wYXRjaF9vcHMudW5zb2xfZXZlbnQgPSBjeHQ1MDQ3X2hwX3Vuc29sX2V2ZW50OwogCQlicmVhazsKICNpZmRlZiBDT05GSUdfU05EX0RFQlVHCkBAIC0xNjM4LDYgKzE1NTIsNyBAQAogCQljb2RlYy0+cGF0Y2hfb3BzLnVuc29sX2V2ZW50ID0gY3h0NTA0N19ocF91bnNvbF9ldmVudDsKICNlbmRpZgkKIAl9CisJc3BlYy0+dm1hc3Rlcl9uaWQgPSAweDEzOwogCXJldHVybiAwOwogfQogCkBAIC0xNjczLDggKzE1ODgsMTEgQEAKIC8qIHRvZ2dsZSBpbnB1dCBvZiBidWlsdC1pbiBhbmQgbWljIGphY2sgYXBwcm9wcmlhdGVseSAqLwogc3RhdGljIHZvaWQgY3h0NTA1MV9wb3J0Yl9hdXRvbWljKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogeworCXN0cnVjdCBjb25leGFudF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJdW5zaWduZWQgaW50IHByZXNlbnQ7CiAKKwlpZiAoc3BlYy0+bm9fYXV0b19taWMpCisJCXJldHVybjsKIAlwcmVzZW50ID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDE3LCAwLAogCQkJCSAgICAgQUNfVkVSQl9HRVRfUElOX1NFTlNFLCAwKSAmCiAJCUFDX1BJTlNFTlNFX1BSRVNFTkNFOwpAQCAtMTY5MCw2ICsxNjA4LDggQEAKIAl1bnNpZ25lZCBpbnQgcHJlc2VudDsKIAloZGFfbmlkX3QgbmV3X2FkYzsKIAorCWlmIChzcGVjLT5ub19hdXRvX21pYykKKwkJcmV0dXJuOwogCXByZXNlbnQgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIDB4MTgsIDAsCiAJCQkJICAgICBBQ19WRVJCX0dFVF9QSU5fU0VOU0UsIDApICYKIAkJQUNfUElOU0VOU0VfUFJFU0VOQ0U7CkBAIC0xNzc2LDYgKzE2OTYsMjIgQEAKIAl7fQogfTsKIAorc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGN4dDUwNTFfaHBfZHY2NzM2X21peGVyc1tdID0geworCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBWb2x1bWUiLCAweDE0LCAweDAwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJNaWMgU3dpdGNoIiwgMHgxNCwgMHgwMCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgxMCwgMHgwMCwgSERBX09VVFBVVCksCisJeworCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkJLm5hbWUgPSAiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsCisJCS5pbmZvID0gY3h0X2VhcGRfaW5mbywKKwkJLmdldCA9IGN4dF9lYXBkX2dldCwKKwkJLnB1dCA9IGN4dDUwNTFfaHBfbWFzdGVyX3N3X3B1dCwKKwkJLnByaXZhdGVfdmFsdWUgPSAweDFhLAorCX0sCisKKwl7fQorfTsKKwogc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBjeHQ1MDUxX2luaXRfdmVyYnNbXSA9IHsKIAkvKiBMaW5lIGluLCBNaWMgKi8KIAl7MHgxNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKSB8IDB4MDN9LApAQCAtMTgwNiw2ICsxNzQyLDY2IEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAorc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBjeHQ1MDUxX2hwX2R2NjczNl9pbml0X3ZlcmJzW10gPSB7CisJLyogTGluZSBpbiwgTWljICovCisJezB4MTcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCkgfCAweDAzfSwKKwl7MHgxNywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwfSwKKwl7MHgxOCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAweDB9LAorCXsweDFkLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB4MH0sCisJLyogU1BLICAqLworCXsweDFhLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVR9LAorCXsweDFhLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sCisJLyogSFAsIEFtcCAgKi8KKwl7MHgxNiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSFB9LAorCXsweDE2LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sCisJLyogREFDMSAqLworCXsweDEwLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCisJLyogUmVjb3JkIHNlbGVjdG9yOiBJbnQgbWljICovCisJezB4MTQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMSkgfCAweDQ0fSwKKwl7MHgxNCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MX0sCisJLyogU1BESUYgcm91dGU6IFBDTSAqLworCXsweDFjLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwfSwKKwkvKiBFQVBEICovCisJezB4MWEsIEFDX1ZFUkJfU0VUX0VBUERfQlRMRU5BQkxFLCAweDJ9LCAvKiBkZWZhdWx0IG9uICovCisJezB4MTYsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU58Q09ORVhBTlRfSFBfRVZFTlR9LAorCXsweDE3LCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFDX1VTUlNQX0VOfENYVDUwNTFfUE9SVEJfRVZFTlR9LAorCXsgfSAvKiBlbmQgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgY3h0NTA1MV9sZW5vdm9feDIwMF9pbml0X3ZlcmJzW10gPSB7CisJLyogTGluZSBpbiwgTWljICovCisJezB4MTcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCkgfCAweDAzfSwKKwl7MHgxNywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwfSwKKwl7MHgxOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKSB8IDB4MDN9LAorCXsweDE4LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODB9LAorCXsweDFkLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTn0sCisJezB4MWQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCkgfCAweDAzfSwKKwkvKiBTUEsgICovCisJezB4MWEsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVH0sCisJezB4MWEsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKKwkvKiBIUCwgQW1wICAqLworCXsweDE2LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9IUH0sCisJezB4MTYsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKKwkvKiBEb2NraW5nIEhQICovCisJezB4MTksIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0hQfSwKKwl7MHgxOSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LAorCS8qIERBQzEgKi8KKwl7MHgxMCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LAorCS8qIFJlY29yZCBzZWxlY3RvcjogSW50IG1pYyAqLworCXsweDE0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApIHwgMHg0NH0sCisJezB4MTQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMSkgfCAweDQ0fSwKKwl7MHgxNSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKSB8IDB4NDR9LAorCS8qIFNQRElGIHJvdXRlOiBQQ00gKi8KKwl7MHgxYywgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MH0sCisJLyogRUFQRCAqLworCXsweDFhLCBBQ19WRVJCX1NFVF9FQVBEX0JUTEVOQUJMRSwgMHgyfSwgLyogZGVmYXVsdCBvbiAqLworCXsweDE2LCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFDX1VTUlNQX0VOfENPTkVYQU5UX0hQX0VWRU5UfSwKKwl7MHgxNywgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTnxDWFQ1MDUxX1BPUlRCX0VWRU5UfSwKKwl7MHgxOCwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTnxDWFQ1MDUxX1BPUlRDX0VWRU5UfSwKKwl7MHgxOSwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTnxDT05FWEFOVF9IUF9FVkVOVH0sCisJeyB9IC8qIGVuZCAqLworfTsKKwogLyogaW5pdGlhbGl6ZSBqYWNrLXNlbnNpbmcsIHRvbyAqLwogc3RhdGljIGludCBjeHQ1MDUxX2luaXQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CkBAIC0xODIzLDE4ICsxODE5LDI0IEBACiBlbnVtIHsKIAlDWFQ1MDUxX0xBUFRPUCwJIC8qIExhcHRvcHMgdy8gRUFQRCBzdXBwb3J0ICovCiAJQ1hUNTA1MV9IUCwJLyogbm8gZG9ja2luZyAqLworCUNYVDUwNTFfSFBfRFY2NzM2LAkvKiBIUCB3aXRob3V0IG1pYyBzd2l0Y2ggKi8KKwlDWFQ1MDUxX0xFTk9WT19YMjAwLAkvKiBMZW5vdm8gWDIwMCBsYXB0b3AgKi8KIAlDWFQ1MDUxX01PREVMUwogfTsKIAogc3RhdGljIGNvbnN0IGNoYXIgKmN4dDUwNTFfbW9kZWxzW0NYVDUwNTFfTU9ERUxTXSA9IHsKIAlbQ1hUNTA1MV9MQVBUT1BdCT0gImxhcHRvcCIsCiAJW0NYVDUwNTFfSFBdCQk9ICJocCIsCisJW0NYVDUwNTFfSFBfRFY2NzM2XQk9ICJocC1kdjY3MzYiLAorCVtDWFQ1MDUxX0xFTk9WT19YMjAwXQk9ICJsZW5vdm8teDIwMCIsCiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgY3h0NTA1MV9jZmdfdGJsW10gPSB7CisJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MzBjZiwgIkhQIERWNjczNiIsIENYVDUwNTFfSFBfRFY2NzM2KSwKIAlTTkRfUENJX1FVSVJLKDB4MTRmMSwgMHgwMTAxLCAiQ29uZXhhbnQgUmVmZXJlbmNlIGJvYXJkIiwKIAkJICAgICAgQ1hUNTA1MV9MQVBUT1ApLAogCVNORF9QQ0lfUVVJUksoMHgxNGYxLCAweDUwNTEsICJIUCBTcGFydGFuIDEuMSIsIENYVDUwNTFfSFApLAorCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDIwZjIsICJMZW5vdm8gWDIwMCIsIENYVDUwNTFfTEVOT1ZPX1gyMDApLAogCXt9CiB9OwogCkBAIC0xODQ3LDYgKzE4NDksNyBAQAogCWlmICghc3BlYykKIAkJcmV0dXJuIC1FTk9NRU07CiAJY29kZWMtPnNwZWMgPSBzcGVjOworCWNvZGVjLT5waW5fYW1wX3dvcmthcm91bmQgPSAxOwogCiAJY29kZWMtPnBhdGNoX29wcyA9IGNvbmV4YW50X3BhdGNoX29wczsKIAljb2RlYy0+cGF0Y2hfb3BzLmluaXQgPSBjeHQ1MDUxX2luaXQ7CkBAIC0xODY3LDE3ICsxODcwLDIyIEBACiAJc3BlYy0+Y3VyX2FkYyA9IDA7CiAJc3BlYy0+Y3VyX2FkY19pZHggPSAwOwogCisJY29kZWMtPnBhdGNoX29wcy51bnNvbF9ldmVudCA9IGN4dDUwNTFfaHBfdW5zb2xfZXZlbnQ7CisKIAlib2FyZF9jb25maWcgPSBzbmRfaGRhX2NoZWNrX2JvYXJkX2NvbmZpZyhjb2RlYywgQ1hUNTA1MV9NT0RFTFMsCiAJCQkJCQkgIGN4dDUwNTFfbW9kZWxzLAogCQkJCQkJICBjeHQ1MDUxX2NmZ190YmwpOwogCXN3aXRjaCAoYm9hcmRfY29uZmlnKSB7CiAJY2FzZSBDWFQ1MDUxX0hQOgotCQljb2RlYy0+cGF0Y2hfb3BzLnVuc29sX2V2ZW50ID0gY3h0NTA1MV9ocF91bnNvbF9ldmVudDsKIAkJc3BlYy0+bWl4ZXJzWzBdID0gY3h0NTA1MV9ocF9taXhlcnM7CiAJCWJyZWFrOwotCWRlZmF1bHQ6Ci0JY2FzZSBDWFQ1MDUxX0xBUFRPUDoKLQkJY29kZWMtPnBhdGNoX29wcy51bnNvbF9ldmVudCA9IGN4dDUwNTFfaHBfdW5zb2xfZXZlbnQ7CisJY2FzZSBDWFQ1MDUxX0hQX0RWNjczNjoKKwkJc3BlYy0+aW5pdF92ZXJic1swXSA9IGN4dDUwNTFfaHBfZHY2NzM2X2luaXRfdmVyYnM7CisJCXNwZWMtPm1peGVyc1swXSA9IGN4dDUwNTFfaHBfZHY2NzM2X21peGVyczsKKwkJc3BlYy0+bm9fYXV0b19taWMgPSAxOworCQlicmVhazsKKwljYXNlIENYVDUwNTFfTEVOT1ZPX1gyMDA6CisJCXNwZWMtPmluaXRfdmVyYnNbMF0gPSBjeHQ1MDUxX2xlbm92b194MjAwX2luaXRfdmVyYnM7CiAJCWJyZWFrOwogCX0KIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYwppbmRleCA2YzI2YWZjLi44MjA5Nzc5IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlICJoZGFfY29kZWMuaCIKICNpbmNsdWRlICJoZGFfbG9jYWwuaCIKKyNpbmNsdWRlICJoZGFfYmVlcC5oIgogCiAjZGVmaW5lIEFMQzg4MF9GUk9OVF9FVkVOVAkJMHgwMQogI2RlZmluZSBBTEM4ODBfRENWT0xfRVZFTlQJCTB4MDIKQEAgLTc3LDYgKzc4LDcgQEAKIAlBTEMyNjBfQUNFUiwKIAlBTEMyNjBfV0lMTCwKIAlBTEMyNjBfUkVQTEFDRVJfNjcyViwKKwlBTEMyNjBfRkFWT1JJVDEwMCwKICNpZmRlZiBDT05GSUdfU05EX0RFQlVHCiAJQUxDMjYwX1RFU1QsCiAjZW5kaWYKQEAgLTEwMyw2ICsxMDUsNyBAQAogCUFMQzI2Ml9ORUMsCiAJQUxDMjYyX1RPU0hJQkFfUzA2LAogCUFMQzI2Ml9UT1NISUJBX1JYMSwKKwlBTEMyNjJfVFlBTiwKIAlBTEMyNjJfQVVUTywKIAlBTEMyNjJfTU9ERUxfTEFTVCAvKiBsYXN0IHRhZyAqLwogfTsKQEAgLTIzOCw2ICsyNDEsMTMgQEAKIAlBTEM4ODNfTU9ERUxfTEFTVCwKIH07CiAKKy8qIHN0eWxlcyBvZiBjYXB0dXJlIHNlbGVjdGlvbiAqLworZW51bSB7CisJQ0FQVF9NVVggPSAwLAkvKiBvbmx5IG11eCBiYXNlZCAqLworCUNBUFRfTUlYLAkvKiBvbmx5IG1peGVyIGJhc2VkICovCisJQ0FQVF8xTVVYX01JWCwJLyogZmlyc3QgbXV4IGFuZCBvdGhlciBtaXhlcnMgKi8KK307CisKIC8qIGZvciBHUElPIFBvbGwgKi8KICNkZWZpbmUgR1BJT19NQVNLCTB4MDMKIApAQCAtMjQ2LDYgKzI1Niw3IEBACiAJc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKm1peGVyc1s1XTsJLyogbWl4ZXIgYXJyYXlzICovCiAJdW5zaWduZWQgaW50IG51bV9taXhlcnM7CiAJc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKmNhcF9taXhlcjsJLyogY2FwdHVyZSBtaXhlciAqLworCXVuc2lnbmVkIGludCBiZWVwX2FtcDsJLyogYmVlcCBhbXAgdmFsdWUsIHNldCB2aWEgc2V0X2JlZXBfYW1wKCkgKi8KIAogCWNvbnN0IHN0cnVjdCBoZGFfdmVyYiAqaW5pdF92ZXJic1s1XTsJLyogaW5pdGlhbGl6YXRpb24gdmVyYnMKIAkJCQkJCSAqIGRvbid0IGZvcmdldCBOVUxMCkBAIC0yNjksMTMgKzI4MCwxNSBAQAogCQkJCQkgKiBkaWdfb3V0X25pZCBhbmQgaHBfbmlkIGFyZSBvcHRpb25hbAogCQkJCQkgKi8KIAloZGFfbmlkX3QgYWx0X2RhY19uaWQ7CisJaGRhX25pZF90IHNsYXZlX2RpZ19vdXRzWzNdOwkvKiBvcHRpb25hbCAtIGZvciBhdXRvLXBhcnNpbmcgKi8KKwlpbnQgZGlnX291dF90eXBlOwogCiAJLyogY2FwdHVyZSAqLwogCXVuc2lnbmVkIGludCBudW1fYWRjX25pZHM7CiAJaGRhX25pZF90ICphZGNfbmlkczsKIAloZGFfbmlkX3QgKmNhcHNyY19uaWRzOwogCWhkYV9uaWRfdCBkaWdfaW5fbmlkOwkJLyogZGlnaXRhbC1pbiBOSUQ7IG9wdGlvbmFsICovCi0JdW5zaWduZWQgY2hhciBpc19taXhfY2FwdHVyZTsJLyogbWF0cml4LXN0eWxlIGNhcHR1cmUgKG5vbi1tdXgpICovCisJaW50IGNhcHR1cmVfc3R5bGU7CQkvKiBjYXB0dXJlIHN0eWxlIChDQVBUXyopICovCiAKIAkvKiBjYXB0dXJlIHNvdXJjZSAqLwogCXVuc2lnbmVkIGludCBudW1fbXV4X2RlZnM7CkBAIC0yOTMsNyArMzA2LDcgQEAKIAkvKiBkeW5hbWljIGNvbnRyb2xzLCBpbml0X3ZlcmJzIGFuZCBpbnB1dF9tdXggKi8KIAlzdHJ1Y3QgYXV0b19waW5fY2ZnIGF1dG9jZmc7CiAJc3RydWN0IHNuZF9hcnJheSBrY3RsczsKLQlzdHJ1Y3QgaGRhX2lucHV0X211eCBwcml2YXRlX2ltdXg7CisJc3RydWN0IGhkYV9pbnB1dF9tdXggcHJpdmF0ZV9pbXV4WzNdOwogCWhkYV9uaWRfdCBwcml2YXRlX2RhY19uaWRzW0FVVE9fQ0ZHX01BWF9PVVRTXTsKIAogCS8qIGhvb2tzICovCkBAIC0zMDUsNiArMzE4LDkgQEAKIAl1bnNpZ25lZCBpbnQgamFja19wcmVzZW50OiAxOwogCXVuc2lnbmVkIGludCBtYXN0ZXJfc3c6IDE7CiAKKwkvKiBvdGhlciBmbGFncyAqLworCXVuc2lnbmVkIGludCBub19hbmFsb2cgOjE7IC8qIGRpZ2l0YWwgSS9PIG9ubHkgKi8KKwogCS8qIGZvciB2aXJ0dWFsIG1hc3RlciAqLwogCWhkYV9uaWRfdCB2bWFzdGVyX25pZDsKICNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCkBAIC0zMTQsMTMgKzMzMCw2IEBACiAJLyogZm9yIFBMTCBmaXggKi8KIAloZGFfbmlkX3QgcGxsX25pZDsKIAl1bnNpZ25lZCBpbnQgcGxsX2NvZWZfaWR4LCBwbGxfY29lZl9iaXQ7Ci0KLSNpZmRlZiBTTkRfSERBX05FRURTX1JFU1VNRQotI2RlZmluZSBBTENfTUFYX1BJTlMJMTYKLQl1bnNpZ25lZCBpbnQgbnVtX3BpbnM7Ci0JaGRhX25pZF90IHBpbl9uaWRzW0FMQ19NQVhfUElOU107Ci0JdW5zaWduZWQgaW50IHBpbl9jZmdzW0FMQ19NQVhfUElOU107Ci0jZW5kaWYKIH07CiAKIC8qCkBAIC0zMzYsNiArMzQ1LDcgQEAKIAloZGFfbmlkX3QgKmRhY19uaWRzOwogCWhkYV9uaWRfdCBkaWdfb3V0X25pZDsJCS8qIG9wdGlvbmFsICovCiAJaGRhX25pZF90IGhwX25pZDsJCS8qIG9wdGlvbmFsICovCisJaGRhX25pZF90ICpzbGF2ZV9kaWdfb3V0czsKIAl1bnNpZ25lZCBpbnQgbnVtX2FkY19uaWRzOwogCWhkYV9uaWRfdCAqYWRjX25pZHM7CiAJaGRhX25pZF90ICpjYXBzcmNfbmlkczsKQEAgLTM5Miw3ICs0MDIsOCBAQAogCW11eF9pZHggPSBhZGNfaWR4ID49IHNwZWMtPm51bV9tdXhfZGVmcyA/IDAgOiBhZGNfaWR4OwogCWltdXggPSAmc3BlYy0+aW5wdXRfbXV4W211eF9pZHhdOwogCi0JaWYgKHNwZWMtPmlzX21peF9jYXB0dXJlKSB7CisJaWYgKHNwZWMtPmNhcHR1cmVfc3R5bGUgJiYKKwkgICAgIShzcGVjLT5jYXB0dXJlX3N0eWxlID09IENBUFRfMU1VWF9NSVggJiYgIWFkY19pZHgpKSB7CiAJCS8qIE1hdHJpeC1taXhlciBzdHlsZSAoZS5nLiBBTEM4ODIpICovCiAJCXVuc2lnbmVkIGludCAqY3VyX3ZhbCA9ICZzcGVjLT5jdXJfbXV4W2FkY19pZHhdOwogCQl1bnNpZ25lZCBpbnQgaSwgaWR4OwpAQCAtNzUwLDYgKzc2MSwyNCBAQAogI2VuZGlmICAgLyogQ09ORklHX1NORF9ERUJVRyAqLwogCiAvKgorICogc2V0IHVwIHRoZSBpbnB1dCBwaW4gY29uZmlnIChkZXBlbmRpbmcgb24gdGhlIGdpdmVuIGF1dG8tcGluIHR5cGUpCisgKi8KK3N0YXRpYyB2b2lkIGFsY19zZXRfaW5wdXRfcGluKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkLAorCQkJICAgICAgaW50IGF1dG9fcGluX3R5cGUpCit7CisJdW5zaWduZWQgaW50IHZhbCA9IFBJTl9JTjsKKworCWlmIChhdXRvX3Bpbl90eXBlIDw9IEFVVE9fUElOX0ZST05UX01JQykgeworCQl1bnNpZ25lZCBpbnQgcGluY2FwOworCQlwaW5jYXAgPSBzbmRfaGRhX3F1ZXJ5X3Bpbl9jYXBzKGNvZGVjLCBuaWQpOworCQlwaW5jYXAgPSAocGluY2FwICYgQUNfUElOQ0FQX1ZSRUYpID4+IEFDX1BJTkNBUF9WUkVGX1NISUZUOworCQlpZiAocGluY2FwICYgQUNfUElOQ0FQX1ZSRUZfODApCisJCQl2YWwgPSBQSU5fVlJFRjgwOworCX0KKwlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgdmFsKTsKK30KKworLyoKICAqLwogc3RhdGljIHZvaWQgYWRkX21peGVyKHN0cnVjdCBhbGNfc3BlYyAqc3BlYywgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKm1peCkKIHsKQEAgLTgxMCw2ICs4MzksNyBAQAogCXNwZWMtPm11bHRpb3V0Lm51bV9kYWNzID0gcHJlc2V0LT5udW1fZGFjczsKIAlzcGVjLT5tdWx0aW91dC5kYWNfbmlkcyA9IHByZXNldC0+ZGFjX25pZHM7CiAJc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQgPSBwcmVzZXQtPmRpZ19vdXRfbmlkOworCXNwZWMtPm11bHRpb3V0LnNsYXZlX2RpZ19vdXRzID0gcHJlc2V0LT5zbGF2ZV9kaWdfb3V0czsKIAlzcGVjLT5tdWx0aW91dC5ocF9uaWQgPSBwcmVzZXQtPmhwX25pZDsKIAogCXNwZWMtPm51bV9tdXhfZGVmcyA9IHByZXNldC0+bnVtX211eF9kZWZzOwpAQCAtOTIxLDcgKzk1MSw3IEBACiAJCQkgSERBX0FNUF9NVVRFLCBwcmVzZW50ID8gSERBX0FNUF9NVVRFIDogMCk7CiB9CiAjZWxzZQotI2RlZmluZSBhbGNfbWljX2F1dG9tdXRlKGNvZGVjKSAvKiBOT1AgKi8KKyNkZWZpbmUgYWxjX21pY19hdXRvbXV0ZShjb2RlYykgZG8ge30gd2hpbGUoMCkgLyogTk9QICovCiAjZW5kaWYgLyogZGlzYWJsZWQgKi8KIAogLyogdW5zb2xpY2l0ZWQgZXZlbnQgZm9yIEhQIGphY2sgc2Vuc2luZyAqLwpAQCAtOTUyLDcgKzk4Miw3IEBACiAJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgyMCwgMCwgQUNfVkVSQl9TRVRfQ09FRl9JTkRFWCwgMCk7CiAJdG1wID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDIwLCAwLCBBQ19WRVJCX0dFVF9QUk9DX0NPRUYsIDApOwogCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MjAsIDAsIEFDX1ZFUkJfU0VUX0NPRUZfSU5ERVgsIDcpOwotCWlmICgodG1wICYgMHhmMCkgPT0gMikKKwlpZiAoKHRtcCAmIDB4ZjApID09IDB4MjApCiAJCS8qIGFsYzg4OFMtVkMgKi8KIAkJc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDIwLCAwLAogCQkJCSAgIEFDX1ZFUkJfU0VUX1BST0NfQ09FRiwgMHg4MzApOwpAQCAtOTkxLDggKzEwMjEsNyBAQAogCW5pZCA9IDB4MWQ7CiAJaWYgKGNvZGVjLT52ZW5kb3JfaWQgPT0gMHgxMGVjMDI2MCkKIAkJbmlkID0gMHgxNzsKLQlhc3MgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIG5pZCwgMCwKLQkJCQkgQUNfVkVSQl9HRVRfQ09ORklHX0RFRkFVTFQsIDApOworCWFzcyA9IHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyhjb2RlYywgbmlkKTsKIAlpZiAoIShhc3MgJiAxKSAmJiAhKGFzcyAmIDB4MTAwMDAwKSkKIAkJcmV0dXJuOwogCWlmICgoYXNzID4+IDMwKSAhPSAxKQkvKiBubyBwaHlzaWNhbCBjb25uZWN0aW9uICovCkBAIC0xMTY2LDE2ICsxMTk1LDggQEAKIAkJcmV0dXJuOwogCiAJY2ZnID0gcGluZml4W3F1aXJrLT52YWx1ZV07Ci0JZm9yICg7IGNmZy0+bmlkOyBjZmcrKykgewotCQlpbnQgaTsKLQkJdTMyIHZhbCA9IGNmZy0+dmFsOwotCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0JCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBjZmctPm5pZCwgMCwKLQkJCQkgICAgQUNfVkVSQl9TRVRfQ09ORklHX0RFRkFVTFRfQllURVNfMCArIGksCi0JCQkJICAgIHZhbCAmIDB4ZmYpOwotCQkJdmFsID4+PSA4OwotCQl9Ci0JfQorCWZvciAoOyBjZmctPm5pZDsgY2ZnKyspCisJCXNuZF9oZGFfY29kZWNfc2V0X3BpbmNmZyhjb2RlYywgY2ZnLT5uaWQsIGNmZy0+dmFsKTsKIH0KIAogLyoKQEAgLTEzNzUsOCArMTM5Niw2IEBACiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QiLCAweDE4LCAwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIlBDIFNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiUEMgU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAogCXsgfSAvKiBlbmQgKi8KIH07CiAKQEAgLTE0ODMsOCArMTUwMiw2IEBACiAJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MywgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiRnJvbnQgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MywgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJQQyBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsIDB4MTksIDB4MCwgSERBX09VVFBVVCksCiAJewogCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKQEAgLTE1NzgsOCArMTU5NSw3IEBACiAJCQkJICAgICBzbmRfaGRhX21peGVyX2FtcF9zd2l0Y2hfcHV0KTsKIH0KIAotI2RlZmluZSBERUZJTkVfQ0FQTUlYKG51bSkgXAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsY19jYXB0dXJlX21peGVyICMjIG51bVtdID0geyBcCisjZGVmaW5lIF9ERUZJTkVfQ0FQTUlYKG51bSkgXAogCXsgXAogCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgXAogCQkubmFtZSA9ICJDYXB0dXJlIFN3aXRjaCIsIFwKQEAgLTE2MDAsNyArMTYxNiw5IEBACiAJCS5nZXQgPSBhbGNfY2FwX3ZvbF9nZXQsIFwKIAkJLnB1dCA9IGFsY19jYXBfdm9sX3B1dCwgXAogCQkudGx2ID0geyAuYyA9IGFsY19jYXBfdm9sX3RsdiB9LCBcCi0JfSwgXAorCX0KKworI2RlZmluZSBfREVGSU5FX0NBUFNSQyhudW0pIFwKIAl7IFwKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIFwKIAkJLyogLm5hbWUgPSAiQ2FwdHVyZSBTb3VyY2UiLCAqLyBcCkBAIC0xNjA5LDE1ICsxNjI3LDI4IEBACiAJCS5pbmZvID0gYWxjX211eF9lbnVtX2luZm8sIFwKIAkJLmdldCA9IGFsY19tdXhfZW51bV9nZXQsIFwKIAkJLnB1dCA9IGFsY19tdXhfZW51bV9wdXQsIFwKLQl9LCBcCi0JeyB9IC8qIGVuZCAqLyBcCisJfQorCisjZGVmaW5lIERFRklORV9DQVBNSVgobnVtKSBcCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjX2NhcHR1cmVfbWl4ZXIgIyMgbnVtW10gPSB7IFwKKwlfREVGSU5FX0NBUE1JWChudW0pLAkJCQkgICAgICBcCisJX0RFRklORV9DQVBTUkMobnVtKSwJCQkJICAgICAgXAorCXsgfSAvKiBlbmQgKi8JCQkJCSAgICAgIFwKK30KKworI2RlZmluZSBERUZJTkVfQ0FQTUlYX05PU1JDKG51bSkgXAorc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsY19jYXB0dXJlX21peGVyX25vc3JjICMjIG51bVtdID0geyBcCisJX0RFRklORV9DQVBNSVgobnVtKSwJCQkJCSAgICBcCisJeyB9IC8qIGVuZCAqLwkJCQkJCSAgICBcCiB9CiAKIC8qIHVwIHRvIHRocmVlIEFEQ3MgKi8KIERFRklORV9DQVBNSVgoMSk7CiBERUZJTkVfQ0FQTUlYKDIpOwogREVGSU5FX0NBUE1JWCgzKTsKLQorREVGSU5FX0NBUE1JWF9OT1NSQygxKTsKK0RFRklORV9DQVBNSVhfTk9TUkMoMik7CitERUZJTkVfQ0FQTUlYX05PU1JDKDMpOwogCiAvKgogICogQUxDODgwIDUtc3RhY2sgbW9kZWwKQEAgLTE3MDYsOCArMTczNyw2IEBACiAJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiRnJvbnQgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJQQyBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKIAl7CiAJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAogCQkubmFtZSA9ICJDaGFubmVsIE1vZGUiLApAQCAtMTg4NCwxMyArMTkxMyw2IEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAotLyogYWRkaXRpb25hbCBtaXhlcnMgdG8gYWxjODgwX2FzdXNfbWl4ZXIgKi8KLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM4ODBfcGNiZWVwX21peGVyW10gPSB7Ci0JSERBX0NPREVDX1ZPTFVNRSgiUEMgU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJQQyBTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCi0JeyB9IC8qIGVuZCAqLwotfTsKLQogLyogVENMIFM3MDAgKi8KIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM4ODBfdGNsX3M3MDBfbWl4ZXJbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBQbGF5YmFjayBWb2x1bWUiLCAweDBjLCAweDAsIEhEQV9PVVRQVVQpLApAQCAtMTkyMyw4ICsxOTQ1LDYgQEAKIAlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJGcm9udCBNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIlBDIFNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiUEMgU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAogCXsKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCiAJCS5uYW1lID0gIkNoYW5uZWwgTW9kZSIsCkBAIC0xOTk5LDYgKzIwMTksMTMgQEAKIAogc3RhdGljIHZvaWQgYWxjX2ZyZWVfa2N0bHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpOwogCisvKiBhZGRpdGlvbmFsIGJlZXAgbWl4ZXJzOyB0aGUgYWN0dWFsIHBhcmFtZXRlcnMgYXJlIG92ZXJ3cml0dGVuIGF0IGJ1aWxkICovCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjX2JlZXBfbWl4ZXJbXSA9IHsKKwlIREFfQ09ERUNfVk9MVU1FKCJCZWVwIFBsYXliYWNrIFZvbHVtZSIsIDAsIDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIkJlZXAgUGxheWJhY2sgU3dpdGNoIiwgMCwgMCwgSERBX0lOUFVUKSwKKwl7IH0gLyogZW5kICovCit9OworCiBzdGF0aWMgaW50IGFsY19idWlsZF9jb250cm9scyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKQEAgLTIwMjAsMTEgKzIwNDcsMTMgQEAKIAkJCQkJCSAgICBzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCk7CiAJCWlmIChlcnIgPCAwKQogCQkJcmV0dXJuIGVycjsKLQkJZXJyID0gc25kX2hkYV9jcmVhdGVfc3BkaWZfc2hhcmVfc3coY29kZWMsCi0JCQkJCQkgICAgJnNwZWMtPm11bHRpb3V0KTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwotCQlzcGVjLT5tdWx0aW91dC5zaGFyZV9zcGRpZiA9IDE7CisJCWlmICghc3BlYy0+bm9fYW5hbG9nKSB7CisJCQllcnIgPSBzbmRfaGRhX2NyZWF0ZV9zcGRpZl9zaGFyZV9zdyhjb2RlYywKKwkJCQkJCQkgICAgJnNwZWMtPm11bHRpb3V0KTsKKwkJCWlmIChlcnIgPCAwKQorCQkJCXJldHVybiBlcnI7CisJCQlzcGVjLT5tdWx0aW91dC5zaGFyZV9zcGRpZiA9IDE7CisJCX0KIAl9CiAJaWYgKHNwZWMtPmRpZ19pbl9uaWQpIHsKIAkJZXJyID0gc25kX2hkYV9jcmVhdGVfc3BkaWZfaW5fY3Rscyhjb2RlYywgc3BlYy0+ZGlnX2luX25pZCk7CkBAIC0yMDMyLDggKzIwNjEsMjQgQEAKIAkJCXJldHVybiBlcnI7CiAJfQogCisJLyogY3JlYXRlIGJlZXAgY29udHJvbHMgaWYgbmVlZGVkICovCisJaWYgKHNwZWMtPmJlZXBfYW1wKSB7CisJCXN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICprbmV3OworCQlmb3IgKGtuZXcgPSBhbGNfYmVlcF9taXhlcjsga25ldy0+bmFtZTsga25ldysrKSB7CisJCQlzdHJ1Y3Qgc25kX2tjb250cm9sICprY3RsOworCQkJa2N0bCA9IHNuZF9jdGxfbmV3MShrbmV3LCBjb2RlYyk7CisJCQlpZiAoIWtjdGwpCisJCQkJcmV0dXJuIC1FTk9NRU07CisJCQlrY3RsLT5wcml2YXRlX3ZhbHVlID0gc3BlYy0+YmVlcF9hbXA7CisJCQllcnIgPSBzbmRfaGRhX2N0bF9hZGQoY29kZWMsIGtjdGwpOworCQkJaWYgKGVyciA8IDApCisJCQkJcmV0dXJuIGVycjsKKwkJfQorCX0KKwogCS8qIGlmIHdlIGhhdmUgbm8gbWFzdGVyIGNvbnRyb2wsIGxldCdzIGNyZWF0ZSBpdCAqLwotCWlmICghc25kX2hkYV9maW5kX21peGVyX2N0bChjb2RlYywgIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiKSkgeworCWlmICghc3BlYy0+bm9fYW5hbG9nICYmCisJICAgICFzbmRfaGRhX2ZpbmRfbWl4ZXJfY3RsKGNvZGVjLCAiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIpKSB7CiAJCXVuc2lnbmVkIGludCB2bWFzdGVyX3Rsdls0XTsKIAkJc25kX2hkYV9zZXRfdm1hc3Rlcl90bHYoY29kZWMsIHNwZWMtPnZtYXN0ZXJfbmlkLAogCQkJCQlIREFfT1VUUFVULCB2bWFzdGVyX3Rsdik7CkBAIC0yMDQyLDcgKzIwODcsOCBAQAogCQlpZiAoZXJyIDwgMCkKIAkJCXJldHVybiBlcnI7CiAJfQotCWlmICghc25kX2hkYV9maW5kX21peGVyX2N0bChjb2RlYywgIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giKSkgeworCWlmICghc3BlYy0+bm9fYW5hbG9nICYmCisJICAgICFzbmRfaGRhX2ZpbmRfbWl4ZXJfY3RsKGNvZGVjLCAiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIpKSB7CiAJCWVyciA9IHNuZF9oZGFfYWRkX3ZtYXN0ZXIoY29kZWMsICJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwKIAkJCQkJICBOVUxMLCBhbGNfc2xhdmVfc3dzKTsKIAkJaWYgKGVyciA8IDApCkBAIC0yOTUxLDYgKzI5OTcsMTQgQEAKIAkJCQkJICAgICBzdHJlYW1fdGFnLCBmb3JtYXQsIHN1YnN0cmVhbSk7CiB9CiAKK3N0YXRpYyBpbnQgYWxjODgwX2RpZ19wbGF5YmFja19wY21fY2xlYW51cChzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gKmhpbmZvLAorCQkJCQkgICBzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKKwkJCQkJICAgc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJcmV0dXJuIHNuZF9oZGFfbXVsdGlfb3V0X2RpZ19jbGVhbnVwKGNvZGVjLCAmc3BlYy0+bXVsdGlvdXQpOworfQorCiBzdGF0aWMgaW50IGFsYzg4MF9kaWdfcGxheWJhY2tfcGNtX2Nsb3NlKHN0cnVjdCBoZGFfcGNtX3N0cmVhbSAqaGluZm8sCiAJCQkJCSBzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKIAkJCQkJIHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQpAQCAtMzAzNCw3ICszMDg4LDggQEAKIAkub3BzID0gewogCQkub3BlbiA9IGFsYzg4MF9kaWdfcGxheWJhY2tfcGNtX29wZW4sCiAJCS5jbG9zZSA9IGFsYzg4MF9kaWdfcGxheWJhY2tfcGNtX2Nsb3NlLAotCQkucHJlcGFyZSA9IGFsYzg4MF9kaWdfcGxheWJhY2tfcGNtX3ByZXBhcmUKKwkJLnByZXBhcmUgPSBhbGM4ODBfZGlnX3BsYXliYWNrX3BjbV9wcmVwYXJlLAorCQkuY2xlYW51cCA9IGFsYzg4MF9kaWdfcGxheWJhY2tfcGNtX2NsZWFudXAKIAl9LAogfTsKIApAQCAtMzA2MSw2ICszMTE2LDkgQEAKIAljb2RlYy0+bnVtX3BjbXMgPSAxOwogCWNvZGVjLT5wY21faW5mbyA9IGluZm87CiAKKwlpZiAoc3BlYy0+bm9fYW5hbG9nKQorCQlnb3RvIHNraXBfYW5hbG9nOworCiAJaW5mby0+bmFtZSA9IHNwZWMtPnN0cmVhbV9uYW1lX2FuYWxvZzsKIAlpZiAoc3BlYy0+c3RyZWFtX2FuYWxvZ19wbGF5YmFjaykgewogCQlpZiAoc25kX0JVR19PTighc3BlYy0+bXVsdGlvdXQuZGFjX25pZHMpKQpAQCAtMzA4NCwxMiArMzE0MiwxNyBAQAogCQl9CiAJfQogCisgc2tpcF9hbmFsb2c6CiAJLyogU1BESUYgZm9yIHN0cmVhbSBpbmRleCAjMSAqLwogCWlmIChzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCB8fCBzcGVjLT5kaWdfaW5fbmlkKSB7CiAJCWNvZGVjLT5udW1fcGNtcyA9IDI7CisJICAgICAgICBjb2RlYy0+c2xhdmVfZGlnX291dHMgPSBzcGVjLT5tdWx0aW91dC5zbGF2ZV9kaWdfb3V0czsKIAkJaW5mbyA9IHNwZWMtPnBjbV9yZWMgKyAxOwogCQlpbmZvLT5uYW1lID0gc3BlYy0+c3RyZWFtX25hbWVfZGlnaXRhbDsKLQkJaW5mby0+cGNtX3R5cGUgPSBIREFfUENNX1RZUEVfU1BESUY7CisJCWlmIChzcGVjLT5kaWdfb3V0X3R5cGUpCisJCQlpbmZvLT5wY21fdHlwZSA9IHNwZWMtPmRpZ19vdXRfdHlwZTsKKwkJZWxzZQorCQkJaW5mby0+cGNtX3R5cGUgPSBIREFfUENNX1RZUEVfU1BESUY7CiAJCWlmIChzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCAmJgogCQkgICAgc3BlYy0+c3RyZWFtX2RpZ2l0YWxfcGxheWJhY2spIHsKIAkJCWluZm8tPnN0cmVhbVtTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLXSA9ICooc3BlYy0+c3RyZWFtX2RpZ2l0YWxfcGxheWJhY2spOwpAQCAtMzEwNCw2ICszMTY3LDkgQEAKIAkJY29kZWMtPnNwZGlmX3N0YXR1c19yZXNldCA9IDE7CiAJfQogCisJaWYgKHNwZWMtPm5vX2FuYWxvZykKKwkJcmV0dXJuIDA7CisKIAkvKiBJZiB0aGUgdXNlIG9mIG1vcmUgdGhhbiBvbmUgQURDIGlzIHJlcXVlc3RlZCBmb3IgdGhlIGN1cnJlbnQKIAkgKiBtb2RlbCwgY29uZmlndXJlIGEgc2Vjb25kIGFuYWxvZyBjYXB0dXJlLW9ubHkgUENNLgogCSAqLwpAQCAtMzE2Miw2NSArMzIyOCwxNyBAQAogCiAJYWxjX2ZyZWVfa2N0bHMoY29kZWMpOwogCWtmcmVlKHNwZWMpOwotCWNvZGVjLT5zcGVjID0gTlVMTDsgLyogdG8gYmUgc3VyZSAqLworCXNuZF9oZGFfZGV0YWNoX2JlZXBfZGV2aWNlKGNvZGVjKTsKIH0KIAogI2lmZGVmIFNORF9IREFfTkVFRFNfUkVTVU1FCi1zdGF0aWMgdm9pZCBzdG9yZV9waW5fY29uZmlncyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKLXsKLQlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQloZGFfbmlkX3QgbmlkLCBlbmRfbmlkOwotCi0JZW5kX25pZCA9IGNvZGVjLT5zdGFydF9uaWQgKyBjb2RlYy0+bnVtX25vZGVzOwotCWZvciAobmlkID0gY29kZWMtPnN0YXJ0X25pZDsgbmlkIDwgZW5kX25pZDsgbmlkKyspIHsKLQkJdW5zaWduZWQgaW50IHdpZF9jYXBzID0gZ2V0X3djYXBzKGNvZGVjLCBuaWQpOwotCQl1bnNpZ25lZCBpbnQgd2lkX3R5cGUgPQotCQkJKHdpZF9jYXBzICYgQUNfV0NBUF9UWVBFKSA+PiBBQ19XQ0FQX1RZUEVfU0hJRlQ7Ci0JCWlmICh3aWRfdHlwZSAhPSBBQ19XSURfUElOKQotCQkJY29udGludWU7Ci0JCWlmIChzcGVjLT5udW1fcGlucyA+PSBBUlJBWV9TSVpFKHNwZWMtPnBpbl9uaWRzKSkKLQkJCWJyZWFrOwotCQlzcGVjLT5waW5fbmlkc1tzcGVjLT5udW1fcGluc10gPSBuaWQ7Ci0JCXNwZWMtPnBpbl9jZmdzW3NwZWMtPm51bV9waW5zXSA9Ci0JCQlzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIG5pZCwgMCwKLQkJCQkJICAgQUNfVkVSQl9HRVRfQ09ORklHX0RFRkFVTFQsIDApOwotCQlzcGVjLT5udW1fcGlucysrOwotCX0KLX0KLQotc3RhdGljIHZvaWQgcmVzdW1lX3Bpbl9jb25maWdzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQotewotCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IHNwZWMtPm51bV9waW5zOyBpKyspIHsKLQkJaGRhX25pZF90IHBpbl9uaWQgPSBzcGVjLT5waW5fbmlkc1tpXTsKLQkJdW5zaWduZWQgaW50IHBpbl9jb25maWcgPSBzcGVjLT5waW5fY2Znc1tpXTsKLQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgcGluX25pZCwgMCwKLQkJCQkgICAgQUNfVkVSQl9TRVRfQ09ORklHX0RFRkFVTFRfQllURVNfMCwKLQkJCQkgICAgcGluX2NvbmZpZyAmIDB4MDAwMDAwZmYpOwotCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBwaW5fbmlkLCAwLAotCQkJCSAgICBBQ19WRVJCX1NFVF9DT05GSUdfREVGQVVMVF9CWVRFU18xLAotCQkJCSAgICAocGluX2NvbmZpZyAmIDB4MDAwMGZmMDApID4+IDgpOwotCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBwaW5fbmlkLCAwLAotCQkJCSAgICBBQ19WRVJCX1NFVF9DT05GSUdfREVGQVVMVF9CWVRFU18yLAotCQkJCSAgICAocGluX2NvbmZpZyAmIDB4MDBmZjAwMDApID4+IDE2KTsKLQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgcGluX25pZCwgMCwKLQkJCQkgICAgQUNfVkVSQl9TRVRfQ09ORklHX0RFRkFVTFRfQllURVNfMywKLQkJCQkgICAgcGluX2NvbmZpZyA+PiAyNCk7Ci0JfQotfQotCiBzdGF0aWMgaW50IGFsY19yZXN1bWUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7Ci0JcmVzdW1lX3Bpbl9jb25maWdzKGNvZGVjKTsKIAljb2RlYy0+cGF0Y2hfb3BzLmluaXQoY29kZWMpOwogCXNuZF9oZGFfY29kZWNfcmVzdW1lX2FtcChjb2RlYyk7CiAJc25kX2hkYV9jb2RlY19yZXN1bWVfY2FjaGUoY29kZWMpOwogCXJldHVybiAwOwogfQotI2Vsc2UKLSNkZWZpbmUgc3RvcmVfcGluX2NvbmZpZ3MoY29kZWMpCiAjZW5kaWYKIAogLyoKQEAgLTM1NTksNyArMzU3Nyw3IEBACiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4ODE4MSwgIkFTVVMgUDRHUEwiLCBBTEM4ODBfQVNVU19ESUcpLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDgxOTYsICJBU1VTIFA1R0QxIiwgQUxDODgwXzZTVCksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4ODFiNCwgIkFTVVMiLCBBTEM4ODBfNlNUKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMCwgIkFTVVMiLCBBTEM4ODBfQVNVUyksIC8qIGRlZmF1bHQgQVNVUyAqLworCVNORF9QQ0lfUVVJUktfVkVORE9SKDB4MTA0MywgIkFTVVMiLCBBTEM4ODBfQVNVUyksIC8qIGRlZmF1bHQgQVNVUyAqLwogCVNORF9QQ0lfUVVJUksoMHgxMDRkLCAweDgxYTAsICJTb255IiwgQUxDODgwXzNTVCksCiAJU05EX1BDSV9RVUlSSygweDEwNGQsIDB4ODFkNiwgIlNvbnkiLCBBTEM4ODBfM1NUKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA3YiwgMHgzMDMyLCAiR2F0ZXdheSIsIEFMQzg4MF81U1QpLApAQCAtMzYwMiw3ICszNjIwLDggQEAKIAlTTkRfUENJX1FVSVJLKDB4ODA4NiwgMHhlNDAwLCAiSW50ZWwgbW9ibyIsIEFMQzg4MF81U1RfRElHKSwKIAlTTkRfUENJX1FVSVJLKDB4ODA4NiwgMHhlNDAxLCAiSW50ZWwgbW9ibyIsIEFMQzg4MF81U1RfRElHKSwKIAlTTkRfUENJX1FVSVJLKDB4ODA4NiwgMHhlNDAyLCAiSW50ZWwgbW9ibyIsIEFMQzg4MF81U1RfRElHKSwKLQlTTkRfUENJX1FVSVJLKDB4ODA4NiwgMCwgIkludGVsIG1vYm8iLCBBTEM4ODBfM1NUKSwgLyogZGVmYXVsdCBJbnRlbCAqLworCS8qIGRlZmF1bHQgSW50ZWwgKi8KKwlTTkRfUENJX1FVSVJLX1ZFTkRPUigweDgwODYsICJJbnRlbCBtb2JvIiwgQUxDODgwXzNTVCksCiAJU05EX1BDSV9RVUlSSygweGEwYTAsIDB4MDU2MCwgIkFPcGVuIGk5MTVHTW0tSEZTIiwgQUxDODgwXzVTVF9ESUcpLAogCVNORF9QQ0lfUVVJUksoMHhlODAzLCAweDEwMTksIE5VTEwsIEFMQzg4MF82U1RfRElHKSwKIAl7fQpAQCAtMzc4Miw3ICszODAxLDcgQEAKIAkJLmlucHV0X211eCA9ICZhbGM4ODBfY2FwdHVyZV9zb3VyY2UsCiAJfSwKIAlbQUxDODgwX1VOSVdJTExfRElHXSA9IHsKLQkJLm1peGVycyA9IHsgYWxjODgwX2FzdXNfbWl4ZXIsIGFsYzg4MF9wY2JlZXBfbWl4ZXIgfSwKKwkJLm1peGVycyA9IHsgYWxjODgwX2FzdXNfbWl4ZXIgfSwKIAkJLmluaXRfdmVyYnMgPSB7IGFsYzg4MF92b2x1bWVfaW5pdF92ZXJicywKIAkJCQlhbGM4ODBfcGluX2FzdXNfaW5pdF92ZXJicyB9LAogCQkubnVtX2RhY3MgPSBBUlJBWV9TSVpFKGFsYzg4MF9hc3VzX2RhY19uaWRzKSwKQEAgLTM4MjAsOCArMzgzOSw3IEBACiAJCS5pbml0X2hvb2sgPSBhbGM4ODBfdW5pd2lsbF9wNTNfaHBfYXV0b211dGUsCiAJfSwKIAlbQUxDODgwX0ZVSklUU1VdID0gewotCQkubWl4ZXJzID0geyBhbGM4ODBfZnVqaXRzdV9taXhlciwKLQkJCSAgICBhbGM4ODBfcGNiZWVwX21peGVyLCB9LAorCQkubWl4ZXJzID0geyBhbGM4ODBfZnVqaXRzdV9taXhlciB9LAogCQkuaW5pdF92ZXJicyA9IHsgYWxjODgwX3ZvbHVtZV9pbml0X3ZlcmJzLAogCQkJCWFsYzg4MF91bml3aWxsX3A1M19pbml0X3ZlcmJzLAogCSAgICAgICAJCQlhbGM4ODBfYmVlcF9pbml0X3ZlcmJzIH0sCkBAIC00MTE0LDcgKzQxMzIsNyBAQAogc3RhdGljIGludCBhbGM4ODBfYXV0b19jcmVhdGVfYW5hbG9nX2lucHV0X2N0bHMoc3RydWN0IGFsY19zcGVjICpzcGVjLAogCQkJCQkJY29uc3Qgc3RydWN0IGF1dG9fcGluX2NmZyAqY2ZnKQogewotCXN0cnVjdCBoZGFfaW5wdXRfbXV4ICppbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eDsKKwlzdHJ1Y3QgaGRhX2lucHV0X211eCAqaW11eCA9ICZzcGVjLT5wcml2YXRlX2ltdXhbMF07CiAJaW50IGksIGVyciwgaWR4OwogCiAJZm9yIChpID0gMDsgaSA8IEFVVE9fUElOX0xBU1Q7IGkrKykgewpAQCAtNDIwMiwxMSArNDIyMCw5IEBACiAJZm9yIChpID0gMDsgaSA8IEFVVE9fUElOX0xBU1Q7IGkrKykgewogCQloZGFfbmlkX3QgbmlkID0gc3BlYy0+YXV0b2NmZy5pbnB1dF9waW5zW2ldOwogCQlpZiAoYWxjODgwX2lzX2lucHV0X3BpbihuaWQpKSB7Ci0JCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsCi0JCQkJCSAgICBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsCi0JCQkJCSAgICBpIDw9IEFVVE9fUElOX0ZST05UX01JQyA/Ci0JCQkJCSAgICBQSU5fVlJFRjgwIDogUElOX0lOKTsKLQkJCWlmIChuaWQgIT0gQUxDODgwX1BJTl9DRF9OSUQpCisJCQlhbGNfc2V0X2lucHV0X3Bpbihjb2RlYywgbmlkLCBpKTsKKwkJCWlmIChuaWQgIT0gQUxDODgwX1BJTl9DRF9OSUQgJiYKKwkJCSAgICAoZ2V0X3djYXBzKGNvZGVjLCBuaWQpICYgQUNfV0NBUF9PVVRfQU1QKSkKIAkJCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsCiAJCQkJCQkgICAgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwKIAkJCQkJCSAgICBBTVBfT1VUX01VVEUpOwpAQCAtNDIyMSw3ICs0MjM3LDcgQEAKIHN0YXRpYyBpbnQgYWxjODgwX3BhcnNlX2F1dG9fY29uZmlnKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwotCWludCBlcnI7CisJaW50IGksIGVycjsKIAlzdGF0aWMgaGRhX25pZF90IGFsYzg4MF9pZ25vcmVbXSA9IHsgMHgxZCwgMCB9OwogCiAJZXJyID0gc25kX2hkYV9wYXJzZV9waW5fZGVmX2NvbmZpZyhjb2RlYywgJnNwZWMtPmF1dG9jZmcsCkBAIC00MjUyLDggKzQyNjgsMjMgQEAKIAogCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IHNwZWMtPm11bHRpb3V0Lm51bV9kYWNzICogMjsKIAotCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRfcGluKQotCQlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IEFMQzg4MF9ESUdPVVRfTklEOworCS8qIGNoZWNrIG11bHRpcGxlIFNQRElGLW91dCAoZm9yIHJlY2VudCBjb2RlY3MpICovCisJZm9yIChpID0gMDsgaSA8IHNwZWMtPmF1dG9jZmcuZGlnX291dHM7IGkrKykgeworCQloZGFfbmlkX3QgZGlnX25pZDsKKwkJZXJyID0gc25kX2hkYV9nZXRfY29ubmVjdGlvbnMoY29kZWMsCisJCQkJCSAgICAgIHNwZWMtPmF1dG9jZmcuZGlnX291dF9waW5zW2ldLAorCQkJCQkgICAgICAmZGlnX25pZCwgMSk7CisJCWlmIChlcnIgPCAwKQorCQkJY29udGludWU7CisJCWlmICghaSkKKwkJCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gZGlnX25pZDsKKwkJZWxzZSB7CisJCQlzcGVjLT5tdWx0aW91dC5zbGF2ZV9kaWdfb3V0cyA9IHNwZWMtPnNsYXZlX2RpZ19vdXRzOworCQkJc3BlYy0+c2xhdmVfZGlnX291dHNbaSAtIDFdID0gZGlnX25pZDsKKwkJCWlmIChpID09IEFSUkFZX1NJWkUoc3BlYy0+c2xhdmVfZGlnX291dHMpIC0gMSkKKwkJCQlicmVhazsKKwkJfQorCX0KIAlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfaW5fcGluKQogCQlzcGVjLT5kaWdfaW5fbmlkID0gQUxDODgwX0RJR0lOX05JRDsKIApAQCAtNDI2Myw5ICs0Mjk0LDggQEAKIAlhZGRfdmVyYihzcGVjLCBhbGM4ODBfdm9sdW1lX2luaXRfdmVyYnMpOwogCiAJc3BlYy0+bnVtX211eF9kZWZzID0gMTsKLQlzcGVjLT5pbnB1dF9tdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4OworCXNwZWMtPmlucHV0X211eCA9ICZzcGVjLT5wcml2YXRlX2ltdXhbMF07CiAKLQlzdG9yZV9waW5fY29uZmlncyhjb2RlYyk7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTQyODAsMjEgKzQzMTAsMzMgQEAKIAkJYWxjX2luaXRob29rKGNvZGVjKTsKIH0KIAorc3RhdGljIHZvaWQgc2V0X2NhcHR1cmVfbWl4ZXIoc3RydWN0IGFsY19zcGVjICpzcGVjKQoreworCXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqY2Fwc1syXVszXSA9IHsKKwkJeyBhbGNfY2FwdHVyZV9taXhlcl9ub3NyYzEsCisJCSAgYWxjX2NhcHR1cmVfbWl4ZXJfbm9zcmMyLAorCQkgIGFsY19jYXB0dXJlX21peGVyX25vc3JjMyB9LAorCQl7IGFsY19jYXB0dXJlX21peGVyMSwKKwkJICBhbGNfY2FwdHVyZV9taXhlcjIsCisJCSAgYWxjX2NhcHR1cmVfbWl4ZXIzIH0sCisJfTsKKwlpZiAoc3BlYy0+bnVtX2FkY19uaWRzID4gMCAmJiBzcGVjLT5udW1fYWRjX25pZHMgPD0gMykgeworCQlpbnQgbXV4OworCQlpZiAoc3BlYy0+aW5wdXRfbXV4ICYmIHNwZWMtPmlucHV0X211eC0+bnVtX2l0ZW1zID4gMSkKKwkJCW11eCA9IDE7CisJCWVsc2UKKwkJCW11eCA9IDA7CisJCXNwZWMtPmNhcF9taXhlciA9IGNhcHNbbXV4XVtzcGVjLT5udW1fYWRjX25pZHMgLSAxXTsKKwl9Cit9CisKKyNkZWZpbmUgc2V0X2JlZXBfYW1wKHNwZWMsIG5pZCwgaWR4LCBkaXIpIFwKKwkoKHNwZWMpLT5iZWVwX2FtcCA9IEhEQV9DT01QT1NFX0FNUF9WQUwobmlkLCAzLCBpZHgsIGRpcikpCisKIC8qCiAgKiBPSywgaGVyZSB3ZSBoYXZlIGZpbmFsbHkgdGhlIHBhdGNoIGZvciBBTEM4ODAKICAqLwogCi1zdGF0aWMgdm9pZCBzZXRfY2FwdHVyZV9taXhlcihzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMpCi17Ci0Jc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICpjYXBzWzNdID0gewotCQlhbGNfY2FwdHVyZV9taXhlcjEsCi0JCWFsY19jYXB0dXJlX21peGVyMiwKLQkJYWxjX2NhcHR1cmVfbWl4ZXIzLAotCX07Ci0JaWYgKHNwZWMtPm51bV9hZGNfbmlkcyA+IDAgJiYgc3BlYy0+bnVtX2FkY19uaWRzIDw9IDMpCi0JCXNwZWMtPmNhcF9taXhlciA9IGNhcHNbc3BlYy0+bnVtX2FkY19uaWRzIC0gMV07Ci19Ci0KIHN0YXRpYyBpbnQgcGF0Y2hfYWxjODgwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYzsKQEAgLTQzMzAsNiArNDM3MiwxMiBAQAogCQl9CiAJfQogCisJZXJyID0gc25kX2hkYV9hdHRhY2hfYmVlcF9kZXZpY2UoY29kZWMsIDB4MSk7CisJaWYgKGVyciA8IDApIHsKKwkJYWxjX2ZyZWUoY29kZWMpOworCQlyZXR1cm4gZXJyOworCX0KKwogCWlmIChib2FyZF9jb25maWcgIT0gQUxDODgwX0FVVE8pCiAJCXNldHVwX3ByZXNldChzcGVjLCAmYWxjODgwX3ByZXNldHNbYm9hcmRfY29uZmlnXSk7CiAKQEAgLTQzNTYsNiArNDQwNCw3IEBACiAJCX0KIAl9CiAJc2V0X2NhcHR1cmVfbWl4ZXIoc3BlYyk7CisJc2V0X2JlZXBfYW1wKHNwZWMsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCk7CiAKIAlzcGVjLT52bWFzdGVyX25pZCA9IDB4MGM7CiAKQEAgLTQ0NjMsNiArNDUxMiwyNiBAQAogCQl9LAogCX0sCiB9OworCisvKiBNYXhkYXRhIEZhdm9yaXQgMTAwWFMgKi8KK3N0YXRpYyBzdHJ1Y3QgaGRhX2lucHV0X211eCBhbGMyNjBfZmF2b3JpdDEwMF9jYXB0dXJlX3NvdXJjZXNbMl0gPSB7CisJeworCQkubnVtX2l0ZW1zID0gMiwKKwkJLml0ZW1zID0geworCQkJeyAiTGluZS9NaWMiLCAweDAgfSwKKwkJCXsgIkNEIiwgMHg0IH0sCisJCX0sCisJfSwKKwl7CisJCS5udW1faXRlbXMgPSAzLAorCQkuaXRlbXMgPSB7CisJCQl7ICJMaW5lL01pYyIsIDB4MCB9LAorCQkJeyAiQ0QiLCAweDQgfSwKKwkJCXsgIk1peGVyIiwgMHg1IH0sCisJCX0sCisJfSwKK307CisKIC8qCiAgKiBUaGlzIGlzIGp1c3QgcGxhY2UtaG9sZGVyLCBzbyB0aGVyZSdzIHNvbWV0aGluZyBmb3IgYWxjX2J1aWxkX3BjbXMgdG8gbG9vawogICogYXQgd2hlbiBpdCBjYWxjdWxhdGVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBjaGFubmVscy4gQUxDMjYwIGhhcyBubyBtaXhlcgpAQCAtNDUwNSwxMiArNDU3NCw2IEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzI2MF9wY19iZWVwX21peGVyW10gPSB7Ci0JSERBX0NPREVDX1ZPTFVNRSgiUEMgU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDA3LCAweDA1LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJQQyBTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MDcsIDB4MDUsIEhEQV9JTlBVVCksCi0JeyB9IC8qIGVuZCAqLwotfTsKLQogLyogdXBkYXRlIEhQLCBsaW5lIGFuZCBtb25vIG91dCBwaW5zIGFjY29yZGluZyB0byB0aGUgbWFzdGVyIHN3aXRjaCAqLwogc3RhdGljIHZvaWQgYWxjMjYwX2hwX21hc3Rlcl91cGRhdGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCiAJCQkJICAgIGhkYV9uaWRfdCBocCwgaGRhX25pZF90IGxpbmUsCkBAIC00NzAyLDggKzQ3NjUsNiBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYy9MaW5lIFBsYXliYWNrIFZvbHVtZSIsIDB4MDcsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTWljL0xpbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgwNywgMHgwLCBIREFfSU5QVVQpLAogCUFMQ19QSU5fTU9ERSgiTWljL0xpbmUgSmFjayBNb2RlIiwgMHgxMiwgQUxDX1BJTl9ESVJfSU4pLAotCUhEQV9DT0RFQ19WT0xVTUUoIkJlZXAgUGxheWJhY2sgVm9sdW1lIiwgMHgwNywgMHgwNSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiQmVlcCBQbGF5YmFjayBTd2l0Y2giLCAweDA3LCAweDA1LCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIlNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwOSwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQklORF9NVVRFKCJTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MDksIDIsIEhEQV9JTlBVVCksCiAJeyB9IC8qIGVuZCAqLwpAQCAtNDc0OCw4ICs0ODA5LDE4IEBACiAJSERBX0NPREVDX1ZPTFVNRSgiTGluZSBQbGF5YmFjayBWb2x1bWUiLCAweDA3LCAweDAyLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJMaW5lIFBsYXliYWNrIFN3aXRjaCIsIDB4MDcsIDB4MDIsIEhEQV9JTlBVVCksCiAJQUxDX1BJTl9NT0RFKCJMaW5lIEphY2sgTW9kZSIsIDB4MTQsIEFMQ19QSU5fRElSX0lOT1VUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJCZWVwIFBsYXliYWNrIFZvbHVtZSIsIDB4MDcsIDB4MDUsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIkJlZXAgUGxheWJhY2sgU3dpdGNoIiwgMHgwNywgMHgwNSwgSERBX0lOUFVUKSwKKwl7IH0gLyogZW5kICovCit9OworCisvKiBNYXhkYXRhIEZhdm9yaXQgMTAwWFM6IG9uZSBvdXRwdXQgYW5kIG9uZSBpbnB1dCAoMHgxMikgamFjaworICovCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjMjYwX2Zhdm9yaXQxMDBfbWl4ZXJbXSA9IHsKKwlIREFfQ09ERUNfVk9MVU1FKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwOCwgMHgwLCBIREFfT1VUUFVUKSwKKwlIREFfQklORF9NVVRFKCJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwOCwgMiwgSERBX0lOUFVUKSwKKwlBTENfUElOX01PREUoIk91dHB1dCBKYWNrIE1vZGUiLCAweDBmLCBBTENfUElOX0RJUl9JTk9VVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTGluZS9NaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwNywgMHgwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJMaW5lL01pYyBQbGF5YmFjayBTd2l0Y2giLCAweDA3LCAweDAsIEhEQV9JTlBVVCksCisJQUxDX1BJTl9NT0RFKCJMaW5lL01pYyBKYWNrIE1vZGUiLCAweDEyLCBBTENfUElOX0RJUl9JTiksCiAJeyB9IC8qIGVuZCAqLwogfTsKIApAQCAtNDc2Nyw4ICs0ODM4LDYgQEAKIAlBTENfUElOX01PREUoIkxpbmUgSmFjayBNb2RlIiwgMHgxNCwgQUxDX1BJTl9ESVJfSU5PVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkNEIFBsYXliYWNrIFZvbHVtZSIsIDB4MDcsIDB4MDQsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkNEIFBsYXliYWNrIFN3aXRjaCIsIDB4MDcsIDB4MDQsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiQmVlcCBQbGF5YmFjayBWb2x1bWUiLCAweDA3LCAweDA1LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJCZWVwIFBsYXliYWNrIFN3aXRjaCIsIDB4MDcsIDB4MDUsIEhEQV9JTlBVVCksCiAJeyB9IC8qIGVuZCAqLwogfTsKIApAQCAtNTEyNiw2ICs1MTk1LDg5IEBACiAJeyB9CiB9OwogCisvKiBJbml0aWFsaXNhdGlvbiBzZXF1ZW5jZSBmb3IgTWF4ZGF0YSBGYXZvcml0IDEwMFhTCisgKiAoYWRhcHRlZCBmcm9tIEFjZXIgaW5pdCB2ZXJicykuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjMjYwX2Zhdm9yaXQxMDBfaW5pdF92ZXJic1tdID0geworCS8qIEdQSU8gMCBlbmFibGVzIHRoZSBvdXRwdXQgamFjay4KKwkgKiBUdXJuIHRoaXMgb24gYW5kIHJlbHkgb24gdGhlIHN0YW5kYXJkIG11dGUKKwkgKiBtZXRob2RzIHdoZW5ldmVyIHRoZSB1c2VyIHdhbnRzIHRvIHR1cm4gdGhlc2Ugb3V0cHV0cyBvZmYuCisJICovCisJezB4MDEsIEFDX1ZFUkJfU0VUX0dQSU9fTUFTSywgMHgwMX0sCisJezB4MDEsIEFDX1ZFUkJfU0VUX0dQSU9fRElSRUNUSU9OLCAweDAxfSwKKwl7MHgwMSwgQUNfVkVSQl9TRVRfR1BJT19EQVRBLCAweDAxfSwKKwkvKiBMaW5lL01pYyBpbnB1dCBqYWNrIGlzIGNvbm5lY3RlZCB0byBNaWMxIHBpbiAqLworCXsweDEyLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGNTB9LAorCS8qIEVuc3VyZSBhbGwgb3RoZXIgdW51c2VkIHBpbnMgYXJlIGRpc2FibGVkIGFuZCBtdXRlZC4gKi8KKwl7MHgxMCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAwfSwKKwl7MHgxMCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAorCXsweDExLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB9LAorCXsweDExLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCisJezB4MTMsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMH0sCisJezB4MTMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKKwl7MHgxNCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAwfSwKKwl7MHgxNCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAorCXsweDE1LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB9LAorCXsweDE1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCisJLyogRGlzYWJsZSBkaWdpdGFsIChTUERJRikgcGlucyAqLworCXsweDAzLCBBQ19WRVJCX1NFVF9ESUdJX0NPTlZFUlRfMSwgMH0sCisJezB4MDYsIEFDX1ZFUkJfU0VUX0RJR0lfQ09OVkVSVF8xLCAwfSwKKworCS8qIEVuc3VyZSBNaWMxIGFuZCBMaW5lMSBwaW4gd2lkZ2V0cyB0YWtlIGlucHV0IGZyb20gdGhlIE9VVDEgc3VtCisJICogYnVzIHdoZW4gYWN0aW5nIGFzIG91dHB1dHMuCisJICovCisJezB4MGIsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAwfSwKKwl7MHgwZCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB9LAorCisJLyogU3RhcnQgd2l0aCBvdXRwdXQgc3VtIHdpZGdldHMgbXV0ZWQgYW5kIHRoZWlyIG91dHB1dCBnYWlucyBhdCBtaW4gKi8KKwl7MHgwOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAorCXsweDA4LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgxKX0sCisJezB4MDgsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfWkVST30sCisJezB4MDksIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKKwl7MHgwOSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMSl9LAorCXsweDA5LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1pFUk99LAorCXsweDBhLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCisJezB4MGEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDEpfSwKKwl7MHgwYSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9aRVJPfSwKKworCS8qIFVubXV0ZSBMaW5lLW91dCBwaW4gd2lkZ2V0IGFtcCBsZWZ0IGFuZCByaWdodAorCSAqIChubyBlcXVpdiBtaXhlciBjdHJsKQorCSAqLworCXsweDBmLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCisJLyogVW5tdXRlIE1pYzEgYW5kIExpbmUxIHBpbiB3aWRnZXQgaW5wdXQgYnVmZmVycyBzaW5jZSB0aGV5IHN0YXJ0IGFzCisJICogaW5wdXRzLiBJZiB0aGUgcGluIG1vZGUgaXMgY2hhbmdlZCBieSB0aGUgdXNlciB0aGUgcGluIG1vZGUgY29udHJvbAorCSAqIHdpbGwgdGFrZSBjYXJlIG9mIGVuYWJsaW5nIHRoZSBwaW4ncyBpbnB1dC9vdXRwdXQgYnVmZmVycyBhcyBuZWVkZWQuCisJICogVGhlcmVmb3JlIHRoZXJlJ3Mgbm8gbmVlZCB0byBlbmFibGUgdGhlIGlucHV0IGJ1ZmZlciBhdCB0aGlzCisJICogc3RhZ2UuCisJICovCisJezB4MTIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAorCisJLyogTXV0ZSBjYXB0dXJlIGFtcCBsZWZ0IGFuZCByaWdodCAqLworCXsweDA0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCisJLyogU2V0IEFEQyBjb25uZWN0aW9uIHNlbGVjdCB0byBtYXRjaCBkZWZhdWx0IG1peGVyIHNldHRpbmcgLSBtaWMKKwkgKiAob24gbWljMSBwaW4pCisJICovCisJezB4MDQsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKKworCS8qIERvIHNpbWlsYXIgd2l0aCB0aGUgc2Vjb25kIEFEQzogbXV0ZSBjYXB0dXJlIGlucHV0IGFtcCBhbmQKKwkgKiBzZXQgQURDIGNvbm5lY3Rpb24gdG8gbWljIHRvIG1hdGNoIEFMU0EncyBkZWZhdWx0IHN0YXRlLgorCSAqLworCXsweDA1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCisJezB4MDUsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKKworCS8qIE11dGUgYWxsIGlucHV0cyB0byBtaXhlciB3aWRnZXQgKGV2ZW4gdW5jb25uZWN0ZWQgb25lcykgKi8KKwl7MHgwNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LCAvKiBtaWMxIHBpbiAqLworCXsweDA3LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgxKX0sIC8qIG1pYzIgcGluICovCisJezB4MDcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDIpfSwgLyogbGluZTEgcGluICovCisJezB4MDcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDMpfSwgLyogbGluZTIgcGluICovCisJezB4MDcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDQpfSwgLyogQ0QgcGluICovCisJezB4MDcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDUpfSwgLyogQmVlcC1nZW4gcGluICovCisJezB4MDcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDYpfSwgLyogTGluZS1vdXQgcGluICovCisJezB4MDcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDcpfSwgLyogSFAtcGluIHBpbiAqLworCisJeyB9Cit9OworCiBzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzI2MF93aWxsX3ZlcmJzW10gPSB7CiAJezB4MGYsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0hQfSwKIAl7MHgwYiwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LApAQCAtNTI3Miw4ICs1NDI0LDYgQEAKIAlIREFfQ09ERUNfTVVURSgiTElORTIgUGxheWJhY2sgU3dpdGNoIiwgMHgwNywgMHgwMywgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJDRCBQbGF5YmFjayBWb2x1bWUiLCAweDA3LCAweDA0LCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJDRCBQbGF5YmFjayBTd2l0Y2giLCAweDA3LCAweDA0LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkJlZXAgUGxheWJhY2sgVm9sdW1lIiwgMHgwNywgMHgwNSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiQmVlcCBQbGF5YmFjayBTd2l0Y2giLCAweDA3LCAweDA1LCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkxJTkUtT1VUIGxvb3BiYWNrIFBsYXliYWNrIFZvbHVtZSIsIDB4MDcsIDB4MDYsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkxJTkUtT1VUIGxvb3BiYWNrIFBsYXliYWNrIFN3aXRjaCIsIDB4MDcsIDB4MDYsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiSFAtT1VUIGxvb3BiYWNrIFBsYXliYWNrIFZvbHVtZSIsIDB4MDcsIDB4NywgSERBX0lOUFVUKSwKQEAgLTU0NzEsNyArNTYyMSw3IEBACiBzdGF0aWMgaW50IGFsYzI2MF9hdXRvX2NyZWF0ZV9hbmFsb2dfaW5wdXRfY3RscyhzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMsCiAJCQkJCQljb25zdCBzdHJ1Y3QgYXV0b19waW5fY2ZnICpjZmcpCiB7Ci0Jc3RydWN0IGhkYV9pbnB1dF9tdXggKmltdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4OworCXN0cnVjdCBoZGFfaW5wdXRfbXV4ICppbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eFswXTsKIAlpbnQgaSwgZXJyLCBpZHg7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVVUT19QSU5fTEFTVDsgaSsrKSB7CkBAIC01NTQ2LDExICs1Njk2LDkgQEAKIAlmb3IgKGkgPSAwOyBpIDwgQVVUT19QSU5fTEFTVDsgaSsrKSB7CiAJCWhkYV9uaWRfdCBuaWQgPSBzcGVjLT5hdXRvY2ZnLmlucHV0X3BpbnNbaV07CiAJCWlmIChuaWQgPj0gMHgxMikgewotCQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLAotCQkJCQkgICAgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLAotCQkJCQkgICAgaSA8PSBBVVRPX1BJTl9GUk9OVF9NSUMgPwotCQkJCQkgICAgUElOX1ZSRUY4MCA6IFBJTl9JTik7Ci0JCQlpZiAobmlkICE9IEFMQzI2MF9QSU5fQ0RfTklEKQorCQkJYWxjX3NldF9pbnB1dF9waW4oY29kZWMsIG5pZCwgaSk7CisJCQlpZiAobmlkICE9IEFMQzI2MF9QSU5fQ0RfTklEICYmCisJCQkgICAgKGdldF93Y2Fwcyhjb2RlYywgbmlkKSAmIEFDX1dDQVBfT1VUX0FNUCkpCiAJCQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLAogCQkJCQkJICAgIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsCiAJCQkJCQkgICAgQU1QX09VVF9NVVRFKTsKQEAgLTU2MjMsNyArNTc3MSw3IEBACiAKIAlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSAyOwogCi0JaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dF9waW4pCisJaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dHMpCiAJCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gQUxDMjYwX0RJR09VVF9OSUQ7CiAJaWYgKHNwZWMtPmtjdGxzLmxpc3QpCiAJCWFkZF9taXhlcihzcGVjLCBzcGVjLT5rY3Rscy5saXN0KTsKQEAgLTU2MzEsOSArNTc3OSw4IEBACiAJYWRkX3ZlcmIoc3BlYywgYWxjMjYwX3ZvbHVtZV9pbml0X3ZlcmJzKTsKIAogCXNwZWMtPm51bV9tdXhfZGVmcyA9IDE7Ci0Jc3BlYy0+aW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eDsKKwlzcGVjLT5pbnB1dF9tdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4WzBdOwogCi0Jc3RvcmVfcGluX2NvbmZpZ3MoY29kZWMpOwogCXJldHVybiAxOwogfQogCkBAIC01NjcwLDYgKzU4MTcsNyBAQAogCVtBTEMyNjBfQUNFUl0JCT0gImFjZXIiLAogCVtBTEMyNjBfV0lMTF0JCT0gIndpbGwiLAogCVtBTEMyNjBfUkVQTEFDRVJfNjcyVl0JPSAicmVwbGFjZXIiLAorCVtBTEMyNjBfRkFWT1JJVDEwMF0JPSAiZmF2b3JpdDEwMCIsCiAjaWZkZWYgQ09ORklHX1NORF9ERUJVRwogCVtBTEMyNjBfVEVTVF0JCT0gInRlc3QiLAogI2VuZGlmCkBAIC01Njc5LDYgKzU4MjcsNyBAQAogc3RhdGljIHN0cnVjdCBzbmRfcGNpX3F1aXJrIGFsYzI2MF9jZmdfdGJsW10gPSB7CiAJU05EX1BDSV9RVUlSSygweDEwMjUsIDB4MDA3YiwgIkFjZXIgQzIweCIsIEFMQzI2MF9BQ0VSKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAyNSwgMHgwMDhmLCAiQWNlciIsIEFMQzI2MF9BQ0VSKSwKKwlTTkRfUENJX1FVSVJLKDB4MTUwOSwgMHg0NTQwLCAiRmF2b3JpdCAxMDBYUyIsIEFMQzI2MF9GQVZPUklUMTAwKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgyODA4LCAiSFAgZDU3MDAiLCBBTEMyNjBfSFBfMzAxMyksCiAJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MjgwYSwgIkhQIGQ1NzUwIiwgQUxDMjYwX0hQXzMwMTMpLAogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDMwMTAsICJIUCIsIEFMQzI2MF9IUF8zMDEzKSwKQEAgLTU3MDEsOCArNTg1MCw3IEBACiBzdGF0aWMgc3RydWN0IGFsY19jb25maWdfcHJlc2V0IGFsYzI2MF9wcmVzZXRzW10gPSB7CiAJW0FMQzI2MF9CQVNJQ10gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzI2MF9iYXNlX291dHB1dF9taXhlciwKLQkJCSAgICBhbGMyNjBfaW5wdXRfbWl4ZXIsCi0JCQkgICAgYWxjMjYwX3BjX2JlZXBfbWl4ZXIgfSwKKwkJCSAgICBhbGMyNjBfaW5wdXRfbWl4ZXIgfSwKIAkJLmluaXRfdmVyYnMgPSB7IGFsYzI2MF9pbml0X3ZlcmJzIH0sCiAJCS5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWxjMjYwX2RhY19uaWRzKSwKIAkJLmRhY19uaWRzID0gYWxjMjYwX2RhY19uaWRzLApAQCAtNTc4MSw2ICs1OTI5LDE4IEBACiAJCS5udW1fbXV4X2RlZnMgPSBBUlJBWV9TSVpFKGFsYzI2MF9hY2VyX2NhcHR1cmVfc291cmNlcyksCiAJCS5pbnB1dF9tdXggPSBhbGMyNjBfYWNlcl9jYXB0dXJlX3NvdXJjZXMsCiAJfSwKKwlbQUxDMjYwX0ZBVk9SSVQxMDBdID0geworCQkubWl4ZXJzID0geyBhbGMyNjBfZmF2b3JpdDEwMF9taXhlciB9LAorCQkuaW5pdF92ZXJicyA9IHsgYWxjMjYwX2Zhdm9yaXQxMDBfaW5pdF92ZXJicyB9LAorCQkubnVtX2RhY3MgPSBBUlJBWV9TSVpFKGFsYzI2MF9kYWNfbmlkcyksCisJCS5kYWNfbmlkcyA9IGFsYzI2MF9kYWNfbmlkcywKKwkJLm51bV9hZGNfbmlkcyA9IEFSUkFZX1NJWkUoYWxjMjYwX2R1YWxfYWRjX25pZHMpLAorCQkuYWRjX25pZHMgPSBhbGMyNjBfZHVhbF9hZGNfbmlkcywKKwkJLm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGFsYzI2MF9tb2RlcyksCisJCS5jaGFubmVsX21vZGUgPSBhbGMyNjBfbW9kZXMsCisJCS5udW1fbXV4X2RlZnMgPSBBUlJBWV9TSVpFKGFsYzI2MF9mYXZvcml0MTAwX2NhcHR1cmVfc291cmNlcyksCisJCS5pbnB1dF9tdXggPSBhbGMyNjBfZmF2b3JpdDEwMF9jYXB0dXJlX3NvdXJjZXMsCisJfSwKIAlbQUxDMjYwX1dJTExdID0gewogCQkubWl4ZXJzID0geyBhbGMyNjBfd2lsbF9taXhlciB9LAogCQkuaW5pdF92ZXJicyA9IHsgYWxjMjYwX2luaXRfdmVyYnMsIGFsYzI2MF93aWxsX3ZlcmJzIH0sCkBAIC01ODU3LDYgKzYwMTcsMTIgQEAKIAkJfQogCX0KIAorCWVyciA9IHNuZF9oZGFfYXR0YWNoX2JlZXBfZGV2aWNlKGNvZGVjLCAweDEpOworCWlmIChlcnIgPCAwKSB7CisJCWFsY19mcmVlKGNvZGVjKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKIAlpZiAoYm9hcmRfY29uZmlnICE9IEFMQzI2MF9BVVRPKQogCQlzZXR1cF9wcmVzZXQoc3BlYywgJmFsYzI2MF9wcmVzZXRzW2JvYXJkX2NvbmZpZ10pOwogCkBAIC01ODgyLDYgKzYwNDgsNyBAQAogCQl9CiAJfQogCXNldF9jYXB0dXJlX21peGVyKHNwZWMpOworCXNldF9iZWVwX2FtcChzcGVjLCAweDA3LCAweDA1LCBIREFfSU5QVVQpOwogCiAJc3BlYy0+dm1hc3Rlcl9uaWQgPSAweDA4OwogCkBAIC02MDUzLDggKzYyMjAsNiBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIEJvb3N0IiwgMHgxOSwgMCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiRnJvbnQgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJQQyBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKIAl7IH0gLyogZW5kICovCiB9OwogCkBAIC02MDgxLDggKzYyNDYsNiBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgxOCwgMCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJQQyBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKIAl7IH0gLyogZW5kICovCiB9OwogCkBAIC02MTM0LDggKzYyOTcsNiBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgxOCwgMCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJQQyBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKIAl7IH0gLyogZW5kICovCiB9OwogCkBAIC02MjQ0LDggKzY0MDUsMTAgQEAKIAlIREFfQ09ERUNfTVVURSgiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsIDB4MTgsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTGluZSBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAxLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJMaW5lIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDEsIEhEQV9JTlBVVCksCisJLyogRklYTUU6IHRoaXMgbG9va3Mgc3VzcGljaW91cy4uLgogCUhEQV9DT0RFQ19WT0xVTUUoIlBDIFNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwMiwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiUEMgU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAyLCBIREFfSU5QVVQpLAorCSovCiAJeyB9IC8qIGVuZCAqLwogfTsKIApAQCAtNjg3NywxOSArNzA0MCw5IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgQVVUT19QSU5fTEFTVDsgaSsrKSB7CiAJCWhkYV9uaWRfdCBuaWQgPSBzcGVjLT5hdXRvY2ZnLmlucHV0X3BpbnNbaV07Ci0JCXVuc2lnbmVkIGludCB2cmVmOwogCQlpZiAoIW5pZCkKIAkJCWNvbnRpbnVlOwotCQl2cmVmID0gUElOX0lOOwotCQlpZiAoMSAvKmkgPD0gQVVUT19QSU5fRlJPTlRfTUlDKi8pIHsKLQkJCXVuc2lnbmVkIGludCBwaW5jYXA7Ci0JCQlwaW5jYXAgPSBzbmRfaGRhX3BhcmFtX3JlYWQoY29kZWMsIG5pZCwgQUNfUEFSX1BJTl9DQVApOwotCQkJaWYgKChwaW5jYXAgPj4gQUNfUElOQ0FQX1ZSRUZfU0hJRlQpICYKLQkJCSAgICBBQ19QSU5DQVBfVlJFRl84MCkKLQkJCQl2cmVmID0gUElOX1ZSRUY4MDsKLQkJfQotCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsCi0JCQkJICAgIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgdnJlZik7CisJCWFsY19zZXRfaW5wdXRfcGluKGNvZGVjLCBuaWQsIEFVVE9fUElOX0ZST05UX01JQyAvKmkqLyk7CiAJCWlmIChnZXRfd2NhcHMoY29kZWMsIG5pZCkgJiBBQ19XQ0FQX09VVF9BTVApCiAJCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsCiAJCQkJCSAgICBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLApAQCAtNjkwMCwxOCArNzA1MywyMSBAQAogc3RhdGljIHZvaWQgYWxjODgyX2F1dG9faW5pdF9pbnB1dF9zcmMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0JY29uc3Qgc3RydWN0IGhkYV9pbnB1dF9tdXggKmltdXggPSBzcGVjLT5pbnB1dF9tdXg7CiAJaW50IGM7CiAKIAlmb3IgKGMgPSAwOyBjIDwgc3BlYy0+bnVtX2FkY19uaWRzOyBjKyspIHsKIAkJaGRhX25pZF90IGNvbm5fbGlzdFtIREFfTUFYX05VTV9JTlBVVFNdOwogCQloZGFfbmlkX3QgbmlkID0gc3BlYy0+Y2Fwc3JjX25pZHNbY107CisJCXVuc2lnbmVkIGludCBtdXhfaWR4OworCQljb25zdCBzdHJ1Y3QgaGRhX2lucHV0X211eCAqaW11eDsKIAkJaW50IGNvbm5zLCBtdXRlLCBpZHgsIGl0ZW07CiAKIAkJY29ubnMgPSBzbmRfaGRhX2dldF9jb25uZWN0aW9ucyhjb2RlYywgbmlkLCBjb25uX2xpc3QsCiAJCQkJCQlBUlJBWV9TSVpFKGNvbm5fbGlzdCkpOwogCQlpZiAoY29ubnMgPCAwKQogCQkJY29udGludWU7CisJCW11eF9pZHggPSBjID49IHNwZWMtPm51bV9tdXhfZGVmcyA/IDAgOiBjOworCQlpbXV4ID0gJnNwZWMtPmlucHV0X211eFttdXhfaWR4XTsKIAkJZm9yIChpZHggPSAwOyBpZHggPCBjb25uczsgaWR4KyspIHsKIAkJCS8qIGlmIHRoZSBjdXJyZW50IGNvbm5lY3Rpb24gaXMgdGhlIHNlbGVjdGVkIG9uZSwKIAkJCSAqIHVubXV0ZSBpdCBhcyBkZWZhdWx0IC0gb3RoZXJ3aXNlIG11dGUgaXQKQEAgLTY5MjQsOCArNzA4MCwyMCBAQAogCQkJCQlicmVhazsKIAkJCQl9CiAJCQl9Ci0JCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsCi0JCQkJCSAgICBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBtdXRlKTsKKwkJCS8qIGNoZWNrIGlmIHdlIGhhdmUgYSBzZWxlY3RvciBvciBtaXhlcgorCQkJICogd2UgY291bGQgY2hlY2sgZm9yIHRoZSB3aWRnZXQgdHlwZSBpbnN0ZWFkLCBidXQKKwkJCSAqIGp1c3QgY2hlY2sgZm9yIEFtcC1JbiBwcmVzZW5jZSAoaW4gY2FzZSBvZiBtaXhlcgorCQkJICogd2l0aG91dCBhbXAtaW4gdGhlcmUgaXMgc29tZXRoaW5nIHdyb25nLCB0aGlzCisJCQkgKiBmdW5jdGlvbiBzaG91bGRuJ3QgYmUgdXNlZCBvciBjYXBzcmMgbmlkIGlzIHdyb25nKQorCQkJICovCisJCQlpZiAoZ2V0X3djYXBzKGNvZGVjLCBuaWQpICYgQUNfV0NBUF9JTl9BTVApCisJCQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLAorCQkJCQkJICAgIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsCisJCQkJCQkgICAgbXV0ZSk7CisJCQllbHNlIGlmIChtdXRlICE9IEFNUF9JTl9NVVRFKGlkeCkpCisJCQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLAorCQkJCQkJICAgIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLAorCQkJCQkJICAgIGlkeCk7CiAJCX0KIAl9CiB9CkBAIC03MDU0LDYgKzcyMjIsMTIgQEAKIAkJfQogCX0KIAorCWVyciA9IHNuZF9oZGFfYXR0YWNoX2JlZXBfZGV2aWNlKGNvZGVjLCAweDEpOworCWlmIChlcnIgPCAwKSB7CisJCWFsY19mcmVlKGNvZGVjKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKIAlpZiAoYm9hcmRfY29uZmlnICE9IEFMQzg4Ml9BVVRPKQogCQlzZXR1cF9wcmVzZXQoc3BlYywgJmFsYzg4Ml9wcmVzZXRzW2JvYXJkX2NvbmZpZ10pOwogCkBAIC03MDc0LDcgKzcyNDgsNyBAQAogCXNwZWMtPnN0cmVhbV9kaWdpdGFsX3BsYXliYWNrID0gJmFsYzg4Ml9wY21fZGlnaXRhbF9wbGF5YmFjazsKIAlzcGVjLT5zdHJlYW1fZGlnaXRhbF9jYXB0dXJlID0gJmFsYzg4Ml9wY21fZGlnaXRhbF9jYXB0dXJlOwogCi0Jc3BlYy0+aXNfbWl4X2NhcHR1cmUgPSAxOyAvKiBtYXRyaXgtc3R5bGUgY2FwdHVyZSAqLworCXNwZWMtPmNhcHR1cmVfc3R5bGUgPSBDQVBUX01JWDsgLyogbWF0cml4LXN0eWxlIGNhcHR1cmUgKi8KIAlpZiAoIXNwZWMtPmFkY19uaWRzICYmIHNwZWMtPmlucHV0X211eCkgewogCQkvKiBjaGVjayB3aGV0aGVyIE5JRCAweDA3IGlzIHZhbGlkICovCiAJCXVuc2lnbmVkIGludCB3Y2FwID0gZ2V0X3djYXBzKGNvZGVjLCAweDA3KTsKQEAgLTcwOTEsNiArNzI2NSw3IEBACiAJCX0KIAl9CiAJc2V0X2NhcHR1cmVfbWl4ZXIoc3BlYyk7CisJc2V0X2JlZXBfYW1wKHNwZWMsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCk7CiAKIAlzcGVjLT52bWFzdGVyX25pZCA9IDB4MGM7CiAKQEAgLTcxNDIsMTAgKzczMTcsMTQgQEAKIAkweDA5LCAweDA4CiB9OwogCisjZGVmaW5lIGFsYzg4OV9hZGNfbmlkcwkJYWxjODgwX2FkY19uaWRzCisKIHN0YXRpYyBoZGFfbmlkX3QgYWxjODgzX2NhcHNyY19uaWRzWzJdID0geyAweDIzLCAweDIyIH07CiAKIHN0YXRpYyBoZGFfbmlkX3QgYWxjODgzX2NhcHNyY19uaWRzX3JldlsyXSA9IHsgMHgyMiwgMHgyMyB9OwogCisjZGVmaW5lIGFsYzg4OV9jYXBzcmNfbmlkcwlhbGM4ODJfY2Fwc3JjX25pZHMKKwogLyogaW5wdXQgTVVYICovCiAvKiBGSVhNRTogc2hvdWxkIGJlIGEgbWF0cml4LXR5cGUgaW5wdXQgc291cmNlIHNlbGVjdGlvbiAqLwogCkBAIC03MzYzLDggKzc1NDIsNiBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIEJvb3N0IiwgMHgxOSwgMCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiRnJvbnQgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJQQyBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKIAl7IH0gLyogZW5kICovCiB9OwogCkBAIC03NDI3LDggKzc2MDQsNiBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIEJvb3N0IiwgMHgxOSwgMCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiRnJvbnQgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJQQyBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKIAl7IH0gLyogZW5kICovCiB9OwogCkBAIC03NDUyLDggKzc2MjcsNiBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIEJvb3N0IiwgMHgxOSwgMCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiRnJvbnQgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJQQyBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKIAl7IH0gLyogZW5kICovCiB9OwogCkBAIC03NDc4LDggKzc2NTEsNiBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIEJvb3N0IiwgMHgxOCwgMCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiRnJvbnQgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJQQyBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKIAl7IH0gLyogZW5kICovCiB9OwogCkBAIC03NTAzLDggKzc2NzQsNiBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIEJvb3N0IiwgMHgxOSwgMCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiRnJvbnQgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJQQyBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKIAl7IH0gLyogZW5kICovCiB9OwogCkBAIC03OTEyLDM2ICs4MDgxLDgzIEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODhfM3N0X2hwX3ZlcmJzW10gPSB7Ci0JezB4MTQsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwJLyogRnJvbnQ6IG91dHB1dCAwICgweDBjKSAqLwotCXsweDE2LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMX0sCS8qIFJlYXIgOiBvdXRwdXQgMSAoMHgwZCkgKi8KLQl7MHgxOCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDJ9LAkvKiBDTEZFIDogb3V0cHV0IDIgKDB4MGUpICovCi0JeyB9Ci19OwotCiBzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg4OF82c3RfZGVsbF92ZXJic1tdID0gewogCXsweDFiLCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFMQzg4MF9IUF9FVkVOVCB8IEFDX1VTUlNQX0VOfSwKIAl7IH0KIH07CiAKK3N0YXRpYyB2b2lkIGFsYzg4OF8zc3RfaHBfZnJvbnRfYXV0b211dGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJdW5zaWduZWQgaW50IHByZXNlbnQsIGJpdHM7CisKKwlwcmVzZW50ID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDFiLCAwLAorCQkJQUNfVkVSQl9HRVRfUElOX1NFTlNFLCAwKSAmIDB4ODAwMDAwMDA7CisJYml0cyA9IHByZXNlbnQgPyBIREFfQU1QX01VVEUgOiAwOworCXNuZF9oZGFfY29kZWNfYW1wX3N0ZXJlbyhjb2RlYywgMHgxNCwgSERBX09VVFBVVCwgMCwKKwkJCQkgSERBX0FNUF9NVVRFLCBiaXRzKTsKKwlzbmRfaGRhX2NvZGVjX2FtcF9zdGVyZW8oY29kZWMsIDB4MTYsIEhEQV9PVVRQVVQsIDAsCisJCQkJIEhEQV9BTVBfTVVURSwgYml0cyk7CisJc25kX2hkYV9jb2RlY19hbXBfc3RlcmVvKGNvZGVjLCAweDE4LCBIREFfT1VUUFVULCAwLAorCQkJCSBIREFfQU1QX01VVEUsIGJpdHMpOworfQorCitzdGF0aWMgdm9pZCBhbGM4ODhfM3N0X2hwX3Vuc29sX2V2ZW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorCQkJCSAgICAgIHVuc2lnbmVkIGludCByZXMpCit7CisJc3dpdGNoIChyZXMgPj4gMjYpIHsKKwljYXNlIEFMQzg4MF9IUF9FVkVOVDoKKwkJYWxjODg4XzNzdF9ocF9mcm9udF9hdXRvbXV0ZShjb2RlYyk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODhfM3N0X2hwX3ZlcmJzW10gPSB7CisJezB4MTQsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwJLyogRnJvbnQ6IG91dHB1dCAwICgweDBjKSAqLworCXsweDE2LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMX0sCS8qIFJlYXIgOiBvdXRwdXQgMSAoMHgwZCkgKi8KKwl7MHgxOCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDJ9LAkvKiBDTEZFIDogb3V0cHV0IDIgKDB4MGUpICovCisJezB4MWIsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUxDODgwX0hQX0VWRU5UIHwgQUNfVVNSU1BfRU59LAorCXsgfSAvKiBlbmQgKi8KK307CisKKy8qCisgKiAyY2ggbW9kZQorICovCiBzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg4OF8zc3RfaHBfMmNoX2luaXRbXSA9IHsKIAl7IDB4MTgsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY4MCB9LAogCXsgMHgxOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFIH0sCiAJeyAweDE2LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTiB9LAogCXsgMHgxNiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFIH0sCi0JeyB9CisJeyB9IC8qIGVuZCAqLwogfTsKIAorLyoKKyAqIDRjaCBtb2RlCisgKi8KK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODg4XzNzdF9ocF80Y2hfaW5pdFtdID0geworCXsgMHgxOCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwIH0sCisJeyAweDE4LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEUgfSwKKwl7IDB4MTYsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVCB9LAorCXsgMHgxNiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEUgfSwKKwl7IDB4MTYsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAxIH0sCisJeyB9IC8qIGVuZCAqLworfTsKKworLyoKKyAqIDZjaCBtb2RlCisgKi8KIHN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODg4XzNzdF9ocF82Y2hfaW5pdFtdID0gewogCXsgMHgxOCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUIH0sCiAJeyAweDE4LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURSB9LAorCXsgMHgxOCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDIgfSwKIAl7IDB4MTYsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVCB9LAogCXsgMHgxNiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEUgfSwKLQl7IH0KKwl7IDB4MTYsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAxIH0sCisJeyB9IC8qIGVuZCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfY2hhbm5lbF9tb2RlIGFsYzg4OF8zc3RfaHBfbW9kZXNbMl0gPSB7CitzdGF0aWMgc3RydWN0IGhkYV9jaGFubmVsX21vZGUgYWxjODg4XzNzdF9ocF9tb2Rlc1szXSA9IHsKIAl7IDIsIGFsYzg4OF8zc3RfaHBfMmNoX2luaXQgfSwKKwl7IDQsIGFsYzg4OF8zc3RfaHBfNGNoX2luaXQgfSwKIAl7IDYsIGFsYzg4OF8zc3RfaHBfNmNoX2luaXQgfSwKIH07CiAKQEAgLTgyMDIsNyArODQxOCw3IEBACiB7CiAJc3dpdGNoIChyZXMgPj4gMjYpIHsKIAljYXNlIEFMQzg4MF9IUF9FVkVOVDoKLQkJcHJpbnRrKCJocF9ldmVudFxuIik7CisJCS8qIHByaW50ayhLRVJOX0RFQlVHICJocF9ldmVudFxuIik7ICovCiAJCWFsYzg4OF82c3RfZGVsbF9mcm9udF9hdXRvbXV0ZShjb2RlYyk7CiAJCWJyZWFrOwogCX0KQEAgLTg0NjEsNiArODY3Nyw3IEBACiAJU05EX1BDSV9RVUlSSygweDEwMTksIDB4NjY2OCwgIkVDUyIsIEFMQzg4M18zU1RfNmNoX0RJRyksCiAJU05EX1BDSV9RVUlSSygweDEwMjUsIDB4MDA2YywgIkFjZXIgQXNwaXJlIDk4MTAiLCBBTEM4ODNfQUNFUl9BU1BJUkUpLAogCVNORF9QQ0lfUVVJUksoMHgxMDI1LCAweDAwOTAsICJBY2VyIEFzcGlyZSIsIEFMQzg4M19BQ0VSX0FTUElSRSksCisJU05EX1BDSV9RVUlSSygweDEwMjUsIDB4MDEwYSwgIkFjZXIgRmVycmFyaSA1MDAwIiwgQUxDODgzX0FDRVJfQVNQSVJFKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAyNSwgMHgwMTEwLCAiQWNlciBBc3BpcmUiLCBBTEM4ODNfQUNFUl9BU1BJUkUpLAogCVNORF9QQ0lfUVVJUksoMHgxMDI1LCAweDAxMTIsICJBY2VyIEFzcGlyZSA5MzAzIiwgQUxDODgzX0FDRVJfQVNQSVJFKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAyNSwgMHgwMTIxLCAiQWNlciBBc3BpcmUgNTkyMEciLCBBTEM4ODNfQUNFUl9BU1BJUkUpLApAQCAtODQ2OCwxNyArODY4NSwyMSBAQAogCQlBTEM4ODhfQUNFUl9BU1BJUkVfNDkzMEcpLAogCVNORF9QQ0lfUVVJUksoMHgxMDI1LCAweDAxM2YsICJBY2VyIEFzcGlyZSA1OTMwRyIsCiAJCUFMQzg4OF9BQ0VSX0FTUElSRV80OTMwRyksCisJU05EX1BDSV9RVUlSSygweDEwMjUsIDB4MDE1NywgIkFjZXIgWDMyMDAiLCBBTEM4ODNfQVVUTyksCisJU05EX1BDSV9RVUlSSygweDEwMjUsIDB4MDE1OCwgIkFjZXIgQVgxNzAwLVUzNzAwQSIsIEFMQzg4M19BVVRPKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAyNSwgMHgwMTVlLCAiQWNlciBBc3BpcmUgNjkzMEciLAogCQlBTEM4ODhfQUNFUl9BU1BJUkVfNDkzMEcpLAogCVNORF9QQ0lfUVVJUksoMHgxMDI1LCAweDAxNjYsICJBY2VyIEFzcGlyZSA2NTMwRyIsCiAJCUFMQzg4OF9BQ0VSX0FTUElSRV80OTMwRyksCi0JU05EX1BDSV9RVUlSSygweDEwMjUsIDAsICJBY2VyIGxhcHRvcCIsIEFMQzg4M19BQ0VSKSwgLyogZGVmYXVsdCBBY2VyICovCisJLyogZGVmYXVsdCBBY2VyICovCisJU05EX1BDSV9RVUlSS19WRU5ET1IoMHgxMDI1LCAiQWNlciBsYXB0b3AiLCBBTEM4ODNfQUNFUiksCiAJU05EX1BDSV9RVUlSSygweDEwMjgsIDB4MDIwZCwgIkRlbGwgSW5zcGlyb24gNTMwIiwgQUxDODg4XzZTVF9ERUxMKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgyYTNkLCAiSFAgUGF2aWxsaW9uIiwgQUxDODgzXzZTVF9ESUcpLAogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDJhNGYsICJIUCBTYW1iYSIsIEFMQzg4OF8zU1RfSFApLAogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDJhNjAsICJIUCBMdWNrbm93IiwgQUxDODg4XzNTVF9IUCksCiAJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MmE2MSwgIkhQIE5ldHRsZSIsIEFMQzg4M182U1RfRElHKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgyYTY2LCAiSFAgQWNhY2lhIiwgQUxDODg4XzNTVF9IUCksCisJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MmE3MiwgIkhQIEVkdWMuYXIiLCBBTEM4ODhfM1NUX0hQKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxODczLCAiQXN1cyBNOTBWIiwgQUxDODg4X0FTVVNfTTkwViksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4ODI0OSwgIkFzdXMgTTJBLVZNIEhETUkiLCBBTEM4ODNfM1NUXzZjaF9ESUcpLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDgyODQsICJBc3VzIFozN0UiLCBBTEM4ODNfNlNUX0RJRyksCkBAIC04NTE4LDcgKzg3MzksNyBAQAogCVNORF9QQ0lfUVVJUksoMHgxNDdiLCAweDEwODMsICJBYml0IElQMzUtUFJPIiwgQUxDODgzXzZTVF9ESUcpLAogCVNORF9QQ0lfUVVJUksoMHgxNTU4LCAweDA3MjEsICJDbGV2byBsYXB0b3AgTTcyMFIiLCBBTEM4ODNfQ0xFVk9fTTcyMCksCiAJU05EX1BDSV9RVUlSSygweDE1NTgsIDB4MDcyMiwgIkNsZXZvIGxhcHRvcCBNNzIwU1IiLCBBTEM4ODNfQ0xFVk9fTTcyMCksCi0JU05EX1BDSV9RVUlSSygweDE1NTgsIDAsICJDbGV2byBsYXB0b3AiLCBBTEM4ODNfTEFQVE9QX0VBUEQpLAorCVNORF9QQ0lfUVVJUktfVkVORE9SKDB4MTU1OCwgIkNsZXZvIGxhcHRvcCIsIEFMQzg4M19MQVBUT1BfRUFQRCksCiAJU05EX1BDSV9RVUlSSygweDE1ZDksIDB4ODc4MCwgIlN1cGVybWljcm8gUERTQkEiLCBBTEM4ODNfM1NUXzZjaCksCiAJU05EX1BDSV9RVUlSSygweDE2MWYsIDB4MjA1NCwgIk1lZGlvbiBsYXB0b3AiLCBBTEM4ODNfTUVESU9OKSwKIAlTTkRfUENJX1FVSVJLKDB4MTczNCwgMHgxMTA3LCAiRlNDIEFNSUxPIFhpMjU1MCIsCkBAIC04NTQzLDYgKzg3NjQsMTAgQEAKIAl7fQogfTsKIAorc3RhdGljIGhkYV9uaWRfdCBhbGMxMjAwX3NsYXZlX2RpZ19vdXRzW10gPSB7CisJQUxDODgzX0RJR09VVF9OSUQsIDAsCit9OworCiBzdGF0aWMgc3RydWN0IGFsY19jb25maWdfcHJlc2V0IGFsYzg4M19wcmVzZXRzW10gPSB7CiAJW0FMQzg4M18zU1RfMmNoX0RJR10gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzg4M18zU1RfMmNoX21peGVyIH0sCkBAIC04Nzc4LDYgKzkwMDMsOCBAQAogCQkuY2hhbm5lbF9tb2RlID0gYWxjODg4XzNzdF9ocF9tb2RlcywKIAkJLm5lZWRfZGFjX2ZpeCA9IDEsCiAJCS5pbnB1dF9tdXggPSAmYWxjODgzX2NhcHR1cmVfc291cmNlLAorCQkudW5zb2xfZXZlbnQgPSBhbGM4ODhfM3N0X2hwX3Vuc29sX2V2ZW50LAorCQkuaW5pdF9ob29rID0gYWxjODg4XzNzdF9ocF9mcm9udF9hdXRvbXV0ZSwKIAl9LAogCVtBTEM4ODhfNlNUX0RFTExdID0gewogCQkubWl4ZXJzID0geyBhbGM4ODNfYmFzZV9taXhlciwgYWxjODgzX2NobW9kZV9taXhlciB9LApAQCAtODg4Myw2ICs5MTEwLDcgQEAKIAkJLmRhY19uaWRzID0gYWxjODgzX2RhY19uaWRzLAogCQkuZGlnX291dF9uaWQgPSBBTEMxMjAwX0RJR09VVF9OSUQsCiAJCS5kaWdfaW5fbmlkID0gQUxDODgzX0RJR0lOX05JRCwKKwkJLnNsYXZlX2RpZ19vdXRzID0gYWxjMTIwMF9zbGF2ZV9kaWdfb3V0cywKIAkJLm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGFsYzg4M19zaXhzdGFja19tb2RlcyksCiAJCS5jaGFubmVsX21vZGUgPSBhbGM4ODNfc2l4c3RhY2tfbW9kZXMsCiAJCS5pbnB1dF9tdXggPSAmYWxjODgzX2NhcHR1cmVfc291cmNlLApAQCAtODk1MCwxMSArOTE3OCw5IEBACiAJZm9yIChpID0gMDsgaSA8IEFVVE9fUElOX0xBU1Q7IGkrKykgewogCQloZGFfbmlkX3QgbmlkID0gc3BlYy0+YXV0b2NmZy5pbnB1dF9waW5zW2ldOwogCQlpZiAoYWxjODgzX2lzX2lucHV0X3BpbihuaWQpKSB7Ci0JCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsCi0JCQkJCSAgICBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsCi0JCQkJCSAgICAoaSA8PSBBVVRPX1BJTl9GUk9OVF9NSUMgPwotCQkJCQkgICAgIFBJTl9WUkVGODAgOiBQSU5fSU4pKTsKLQkJCWlmIChuaWQgIT0gQUxDODgzX1BJTl9DRF9OSUQpCisJCQlhbGNfc2V0X2lucHV0X3Bpbihjb2RlYywgbmlkLCBpKTsKKwkJCWlmIChuaWQgIT0gQUxDODgzX1BJTl9DRF9OSUQgJiYKKwkJCSAgICAoZ2V0X3djYXBzKGNvZGVjLCBuaWQpICYgQUNfV0NBUF9PVVRfQU1QKSkKIAkJCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsCiAJCQkJCQkgICAgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwKIAkJCQkJCSAgICBBTVBfT1VUX01VVEUpOwpAQCAtODk2OSw2ICs5MTk1LDggQEAKIHsKIAlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKIAlpbnQgZXJyID0gYWxjODgwX3BhcnNlX2F1dG9fY29uZmlnKGNvZGVjKTsKKwlzdHJ1Y3QgYXV0b19waW5fY2ZnICpjZmcgPSAmc3BlYy0+YXV0b2NmZzsKKwlpbnQgaTsKIAogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwpAQCAtODk4Miw2ICs5MjEwLDI2IEBACiAJLyogaGFjayAtIG92ZXJyaWRlIHRoZSBpbml0IHZlcmJzICovCiAJc3BlYy0+aW5pdF92ZXJic1swXSA9IGFsYzg4M19hdXRvX2luaXRfdmVyYnM7CiAKKwkvKiBzZXR1cCBpbnB1dF9tdXggZm9yIEFMQzg4OSAqLworCWlmIChjb2RlYy0+dmVuZG9yX2lkID09IDB4MTBlYzA4ODkpIHsKKwkJLyogZGlnaXRhbC1taWMgaW5wdXQgcGluIGlzIGV4Y2x1ZGVkIGluIGFsYzg4MF9hdXRvX2NyZWF0ZS4uKCkKKwkJICogYmVjYXVzZSBpdCdzIHVuZGVyIDB4MTgKKwkJICovCisJCWlmIChjZmctPmlucHV0X3BpbnNbQVVUT19QSU5fTUlDXSA9PSAweDEyIHx8CisJCSAgICBjZmctPmlucHV0X3BpbnNbQVVUT19QSU5fRlJPTlRfTUlDXSA9PSAweDEyKSB7CisJCQlzdHJ1Y3QgaGRhX2lucHV0X211eCAqaW11eCA9ICZzcGVjLT5wcml2YXRlX2ltdXhbMF07CisJCQlmb3IgKGkgPSAxOyBpIDwgMzsgaSsrKQorCQkJCW1lbWNweSgmc3BlYy0+cHJpdmF0ZV9pbXV4W2ldLAorCQkJCSAgICAgICAmc3BlYy0+cHJpdmF0ZV9pbXV4WzBdLAorCQkJCSAgICAgICBzaXplb2Yoc3BlYy0+cHJpdmF0ZV9pbXV4WzBdKSk7CisJCQlpbXV4LT5pdGVtc1tpbXV4LT5udW1faXRlbXNdLmxhYmVsID0gIkludCBETWljIjsKKwkJCWltdXgtPml0ZW1zW2ltdXgtPm51bV9pdGVtc10uaW5kZXggPSAweDBiOworCQkJaW11eC0+bnVtX2l0ZW1zKys7CisJCQlzcGVjLT5udW1fbXV4X2RlZnMgPSAzOworCQkJc3BlYy0+aW5wdXRfbXV4ID0gc3BlYy0+cHJpdmF0ZV9pbXV4OworCQl9CisJfQorCiAJcmV0dXJuIDE7IC8qIGNvbmZpZyBmb3VuZCAqLwogfQogCkBAIC05MDMzLDYgKzkyODEsMTIgQEAKIAkJfQogCX0KIAorCWVyciA9IHNuZF9oZGFfYXR0YWNoX2JlZXBfZGV2aWNlKGNvZGVjLCAweDEpOworCWlmIChlcnIgPCAwKSB7CisJCWFsY19mcmVlKGNvZGVjKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKIAlpZiAoYm9hcmRfY29uZmlnICE9IEFMQzg4M19BVVRPKQogCQlzZXR1cF9wcmVzZXQoc3BlYywgJmFsYzg4M19wcmVzZXRzW2JvYXJkX2NvbmZpZ10pOwogCkBAIC05MDQ1LDE0ICs5Mjk5LDM2IEBACiAJCQlzcGVjLT5zdHJlYW1fbmFtZV9hbmFsb2cgPSAiQUxDODg4IEFuYWxvZyI7CiAJCQlzcGVjLT5zdHJlYW1fbmFtZV9kaWdpdGFsID0gIkFMQzg4OCBEaWdpdGFsIjsKIAkJfQorCQlpZiAoIXNwZWMtPm51bV9hZGNfbmlkcykgeworCQkJc3BlYy0+bnVtX2FkY19uaWRzID0gQVJSQVlfU0laRShhbGM4ODNfYWRjX25pZHMpOworCQkJc3BlYy0+YWRjX25pZHMgPSBhbGM4ODNfYWRjX25pZHM7CisJCX0KKwkJaWYgKCFzcGVjLT5jYXBzcmNfbmlkcykKKwkJCXNwZWMtPmNhcHNyY19uaWRzID0gYWxjODgzX2NhcHNyY19uaWRzOworCQlzcGVjLT5jYXB0dXJlX3N0eWxlID0gQ0FQVF9NSVg7IC8qIG1hdHJpeC1zdHlsZSBjYXB0dXJlICovCiAJCWJyZWFrOwogCWNhc2UgMHgxMGVjMDg4OToKIAkJc3BlYy0+c3RyZWFtX25hbWVfYW5hbG9nID0gIkFMQzg4OSBBbmFsb2ciOwogCQlzcGVjLT5zdHJlYW1fbmFtZV9kaWdpdGFsID0gIkFMQzg4OSBEaWdpdGFsIjsKKwkJaWYgKCFzcGVjLT5udW1fYWRjX25pZHMpIHsKKwkJCXNwZWMtPm51bV9hZGNfbmlkcyA9IEFSUkFZX1NJWkUoYWxjODg5X2FkY19uaWRzKTsKKwkJCXNwZWMtPmFkY19uaWRzID0gYWxjODg5X2FkY19uaWRzOworCQl9CisJCWlmICghc3BlYy0+Y2Fwc3JjX25pZHMpCisJCQlzcGVjLT5jYXBzcmNfbmlkcyA9IGFsYzg4OV9jYXBzcmNfbmlkczsKKwkJc3BlYy0+Y2FwdHVyZV9zdHlsZSA9IENBUFRfMU1VWF9NSVg7IC8qIDFtdXgvTm1peC1zdHlsZQorCQkJCQkJCWNhcHR1cmUgKi8KIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJc3BlYy0+c3RyZWFtX25hbWVfYW5hbG9nID0gIkFMQzg4MyBBbmFsb2ciOwogCQlzcGVjLT5zdHJlYW1fbmFtZV9kaWdpdGFsID0gIkFMQzg4MyBEaWdpdGFsIjsKKwkJaWYgKCFzcGVjLT5udW1fYWRjX25pZHMpIHsKKwkJCXNwZWMtPm51bV9hZGNfbmlkcyA9IEFSUkFZX1NJWkUoYWxjODgzX2FkY19uaWRzKTsKKwkJCXNwZWMtPmFkY19uaWRzID0gYWxjODgzX2FkY19uaWRzOworCQl9CisJCWlmICghc3BlYy0+Y2Fwc3JjX25pZHMpCisJCQlzcGVjLT5jYXBzcmNfbmlkcyA9IGFsYzg4M19jYXBzcmNfbmlkczsKKwkJc3BlYy0+Y2FwdHVyZV9zdHlsZSA9IENBUFRfTUlYOyAvKiBtYXRyaXgtc3R5bGUgY2FwdHVyZSAqLwogCQlicmVhazsKIAl9CiAKQEAgLTkwNjMsMTUgKzkzMzksOSBAQAogCXNwZWMtPnN0cmVhbV9kaWdpdGFsX3BsYXliYWNrID0gJmFsYzg4M19wY21fZGlnaXRhbF9wbGF5YmFjazsKIAlzcGVjLT5zdHJlYW1fZGlnaXRhbF9jYXB0dXJlID0gJmFsYzg4M19wY21fZGlnaXRhbF9jYXB0dXJlOwogCi0JaWYgKCFzcGVjLT5udW1fYWRjX25pZHMpIHsKLQkJc3BlYy0+bnVtX2FkY19uaWRzID0gQVJSQVlfU0laRShhbGM4ODNfYWRjX25pZHMpOwotCQlzcGVjLT5hZGNfbmlkcyA9IGFsYzg4M19hZGNfbmlkczsKLQl9Ci0JaWYgKCFzcGVjLT5jYXBzcmNfbmlkcykKLQkJc3BlYy0+Y2Fwc3JjX25pZHMgPSBhbGM4ODNfY2Fwc3JjX25pZHM7Ci0Jc3BlYy0+aXNfbWl4X2NhcHR1cmUgPSAxOyAvKiBtYXRyaXgtc3R5bGUgY2FwdHVyZSAqLwogCWlmICghc3BlYy0+Y2FwX21peGVyKQogCQlzZXRfY2FwdHVyZV9taXhlcihzcGVjKTsKKwlzZXRfYmVlcF9hbXAoc3BlYywgMHgwYiwgMHgwNSwgSERBX0lOUFVUKTsKIAogCXNwZWMtPnZtYXN0ZXJfbmlkID0gMHgwYzsKIApAQCAtOTEyNCw4ICs5Mzk0LDYgQEAKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwMSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiRnJvbnQgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIEJvb3N0IiwgMHgxOSwgMCwgSERBX0lOUFVUKSwKLQkvKiBIREFfQ09ERUNfVk9MVU1FKCJQQyBCZWVwIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCi0JICAgSERBX0NPREVDX01VVEUoIlBDIEJlZXAgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwgKi8KIAlIREFfQ09ERUNfVk9MVU1FKCJIZWFkcGhvbmUgUGxheWJhY2sgVm9sdW1lIiwgMHgwRCwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsIDB4MTUsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX1ZPTFVNRV9NT05PKCJNb25vIFBsYXliYWNrIFZvbHVtZSIsIDB4MGUsIDIsIDB4MCwgSERBX09VVFBVVCksCkBAIC05MTQ2LDggKzk0MTQsNiBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAxLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJGcm9udCBNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwMSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgQm9vc3QiLCAweDE5LCAwLCBIREFfSU5QVVQpLAotCS8qIEhEQV9DT0RFQ19WT0xVTUUoIlBDIEJlZXAgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKLQkgICBIREFfQ09ERUNfTVVURSgiUEMgQmVlcCBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLCAqLwogCS8qSERBX0NPREVDX1ZPTFVNRSgiSGVhZHBob25lIFBsYXliYWNrIFZvbHVtZSIsIDB4MEQsIDB4MCwgSERBX09VVFBVVCksKi8KIAlIREFfQ09ERUNfTVVURSgiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsIDB4MWIsIDB4MCwgSERBX09VVFBVVCksCiAJeyB9IC8qIGVuZCAqLwpAQCAtOTI1Niw4ICs5NTIyLDYgQEAKIAlIREFfQ09ERUNfTVVURSgiTGluZSBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAyLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkNEIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDQsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkNEIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDQsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiUEMgQmVlcCBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJQQyBCZWVwIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiQVVYIElOIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDYsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkFVWCBJTiBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA2LCBIREFfSU5QVVQpLAogCXsgfSAvKiBlbmQgKi8KQEAgLTkyODYsOCArOTU1MCw2IEBACiAJSERBX0NPREVDX01VVEUoIkxpbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwMSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJDRCBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA0LCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJDRCBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA0LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIlBDIEJlZXAgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiUEMgQmVlcCBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAogCXsgfSAvKiBlbmQgKi8KIH07CiAKQEAgLTk0MzUsNiArOTY5Nyw2NyBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjJfdHlhbl9taXhlcltdID0geworCUhEQV9DT0RFQ19WT0xVTUUoIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLCAweDBjLCAweDAsIEhEQV9PVVRQVVQpLAorCUhEQV9CSU5EX01VVEUoIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLCAweDBjLCAyLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkF1eCBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA2LCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJBdXggUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNiwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJMaW5lIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDIsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIkxpbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwMiwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4MTgsIDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDEsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIkZyb250IE1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAxLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBCb29zdCIsIDB4MTksIDAsIEhEQV9JTlBVVCksCisJeyB9IC8qIGVuZCAqLworfTsKKworc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGMyNjJfdHlhbl92ZXJic1tdID0geworCS8qIEhlYWRwaG9uZSBhdXRvbXV0ZSAqLworCXsweDFiLCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFDX1VTUlNQX0VOIHwgQUxDODgwX0hQX0VWRU5UfSwKKwl7MHgxYiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSFB9LAorCXsweDE1LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sCisKKwkvKiBQMTEgQVVYX0lOLCB3aGl0ZSA0LXBpbiBjb25uZWN0b3IgKi8KKwl7MHgxNCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU59LAorCXsweDE0LCBBQ19WRVJCX1NFVF9DT05GSUdfREVGQVVMVF9CWVRFU18xLCAweGUxfSwKKwl7MHgxNCwgQUNfVkVSQl9TRVRfQ09ORklHX0RFRkFVTFRfQllURVNfMiwgMHg5M30sCisJezB4MTQsIEFDX1ZFUkJfU0VUX0NPTkZJR19ERUZBVUxUX0JZVEVTXzMsIDB4MTl9LAorCisJe30KK307CisKKy8qIHVuc29saWNpdGVkIGV2ZW50IGZvciBIUCBqYWNrIHNlbnNpbmcgKi8KK3N0YXRpYyB2b2lkIGFsYzI2Ml90eWFuX2F1dG9tdXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXVuc2lnbmVkIGludCBtdXRlOworCXVuc2lnbmVkIGludCBwcmVzZW50OworCisJc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDFiLCAwLCBBQ19WRVJCX1NFVF9QSU5fU0VOU0UsIDApOworCXByZXNlbnQgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIDB4MWIsIDAsCisJCQkJICAgICBBQ19WRVJCX0dFVF9QSU5fU0VOU0UsIDApOworCXByZXNlbnQgPSAocHJlc2VudCAmIDB4ODAwMDAwMDApICE9IDA7CisJaWYgKHByZXNlbnQpIHsKKwkJLyogbXV0ZSBsaW5lIG91dHB1dCBvbiBBVFggcGFuZWwgKi8KKwkJc25kX2hkYV9jb2RlY19hbXBfc3RlcmVvKGNvZGVjLCAweDE1LCBIREFfT1VUUFVULCAwLAorCQkJCQkgSERBX0FNUF9NVVRFLCBIREFfQU1QX01VVEUpOworCX0gZWxzZSB7CisJCS8qIHVubXV0ZSBsaW5lIG91dHB1dCBpZiBuZWNlc3NhcnkgKi8KKwkJbXV0ZSA9IHNuZF9oZGFfY29kZWNfYW1wX3JlYWQoY29kZWMsIDB4MWIsIDAsIEhEQV9PVVRQVVQsIDApOworCQlzbmRfaGRhX2NvZGVjX2FtcF9zdGVyZW8oY29kZWMsIDB4MTUsIEhEQV9PVVRQVVQsIDAsCisJCQkJCSBIREFfQU1QX01VVEUsIG11dGUpOworCX0KK30KKworc3RhdGljIHZvaWQgYWxjMjYyX3R5YW5fdW5zb2xfZXZlbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCQkJICAgICAgIHVuc2lnbmVkIGludCByZXMpCit7CisJaWYgKChyZXMgPj4gMjYpICE9IEFMQzg4MF9IUF9FVkVOVCkKKwkJcmV0dXJuOworCWFsYzI2Ml90eWFuX2F1dG9tdXRlKGNvZGVjKTsKK30KKwogI2RlZmluZSBhbGMyNjJfY2FwdHVyZV9taXhlcgkJYWxjODgyX2NhcHR1cmVfbWl4ZXIKICNkZWZpbmUgYWxjMjYyX2NhcHR1cmVfYWx0X21peGVyCWFsYzg4Ml9jYXB0dXJlX2FsdF9taXhlcgogCkBAIC05OTAxLDggKzEwMjI0LDYgQEAKIAl9LAogCUhEQV9DT0RFQ19WT0xVTUUoIkNEIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDQsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkNEIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDQsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiUEMgU3BlYWtlciBWb2x1bWUiLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJQQyBTcGVha2VyIFN3aXRjaCIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgxOCwgMCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLApAQCAtMTA0NzQsOCArMTA3OTUsMTQgQEAKIAkJCQkJICAgYWxjMjYyX2lnbm9yZSk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7Ci0JaWYgKCFzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0cykKKwlpZiAoIXNwZWMtPmF1dG9jZmcubGluZV9vdXRzKSB7CisJCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRzIHx8IHNwZWMtPmF1dG9jZmcuZGlnX2luX3BpbikgeworCQkJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gMjsKKwkJCXNwZWMtPm5vX2FuYWxvZyA9IDE7CisJCQlnb3RvIGRpZ19vbmx5OworCQl9CiAJCXJldHVybiAwOyAvKiBjYW4ndCBmaW5kIHZhbGlkIEJJT1MgcGluIGNvbmZpZyAqLworCX0KIAllcnIgPSBhbGMyNjJfYXV0b19jcmVhdGVfbXVsdGlfb3V0X2N0bHMoc3BlYywgJnNwZWMtPmF1dG9jZmcpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwpAQCAtMTA0ODUsOCArMTA4MTIsMTEgQEAKIAogCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IHNwZWMtPm11bHRpb3V0Lm51bV9kYWNzICogMjsKIAotCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRfcGluKQorIGRpZ19vbmx5OgorCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRzKSB7CiAJCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gQUxDMjYyX0RJR09VVF9OSUQ7CisJCXNwZWMtPmRpZ19vdXRfdHlwZSA9IHNwZWMtPmF1dG9jZmcuZGlnX291dF90eXBlWzBdOworCX0KIAlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfaW5fcGluKQogCQlzcGVjLT5kaWdfaW5fbmlkID0gQUxDMjYyX0RJR0lOX05JRDsKIApAQCAtMTA0OTUsMTMgKzEwODI1LDEyIEBACiAKIAlhZGRfdmVyYihzcGVjLCBhbGMyNjJfdm9sdW1lX2luaXRfdmVyYnMpOwogCXNwZWMtPm51bV9tdXhfZGVmcyA9IDE7Ci0Jc3BlYy0+aW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eDsKKwlzcGVjLT5pbnB1dF9tdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4WzBdOwogCiAJZXJyID0gYWxjX2F1dG9fYWRkX21pY19ib29zdChjb2RlYyk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKLQlzdG9yZV9waW5fY29uZmlncyhjb2RlYyk7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTEwNTQzLDIxICsxMDg3MiwxOSBAQAogCVtBTEMyNjJfVUxUUkFdCQk9ICJ1bHRyYSIsCiAJW0FMQzI2Ml9MRU5PVk9fMzAwMF0JPSAibGVub3ZvLTMwMDAiLAogCVtBTEMyNjJfTkVDXQkJPSAibmVjIiwKKwlbQUxDMjYyX1RZQU5dCQk9ICJ0eWFuIiwKIAlbQUxDMjYyX0FVVE9dCQk9ICJhdXRvIiwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBhbGMyNjJfY2ZnX3RibFtdID0gewogCVNORF9QQ0lfUVVJUksoMHgxMDAyLCAweDQzN2IsICJIaXBwbyIsIEFMQzI2Ml9ISVBQTyksCiAJU05EX1BDSV9RVUlSSygweDEwMzMsIDB4ODg5NSwgIk5FQyBWZXJzYSBTOTEwMCIsIEFMQzI2Ml9ORUMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDEyZmUsICJIUCB4dzk0MDAiLCBBTEMyNjJfSFBfQlBDKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgxMmZmLCAiSFAgeHc0NTUwIiwgQUxDMjYyX0hQX0JQQyksCi0JU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MTMwNiwgIkhQIHh3ODYwMCIsIEFMQzI2Ml9IUF9CUEMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDEzMDcsICJIUCB4dzY2MDAiLCBBTEMyNjJfSFBfQlBDKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgxMzA4LCAiSFAgeHc0NjAwIiwgQUxDMjYyX0hQX0JQQyksCi0JU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MTMwOSwgIkhQIHh3NCowMCIsIEFMQzI2Ml9IUF9CUEMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDEzMGEsICJIUCB4dzYqMDAiLCBBTEMyNjJfSFBfQlBDKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgxMzBiLCAiSFAgeHc4KjAwIiwgQUxDMjYyX0hQX0JQQyksCi0JU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MTcwYiwgIkhQIHh3KiIsIEFMQzI2Ml9IUF9CUEMpLAorCVNORF9QQ0lfUVVJUktfTUFTSygweDEwM2MsIDB4ZmYwMCwgMHgxMjAwLCAiSFAgeHcgc2VyaWVzIiwKKwkJCSAgIEFMQzI2Ml9IUF9CUEMpLAorCVNORF9QQ0lfUVVJUktfTUFTSygweDEwM2MsIDB4ZmYwMCwgMHgxMzAwLCAiSFAgeHcgc2VyaWVzIiwKKwkJCSAgIEFMQzI2Ml9IUF9CUEMpLAorCVNORF9QQ0lfUVVJUktfTUFTSygweDEwM2MsIDB4ZmYwMCwgMHgxNzAwLCAiSFAgeHcgc2VyaWVzIiwKKwkJCSAgIEFMQzI2Ml9IUF9CUEMpLAogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDI4MDAsICJIUCBENzAwMCIsIEFMQzI2Ml9IUF9CUENfRDcwMDBfV0wpLAogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDI4MDEsICJIUCBENzAwMCIsIEFMQzI2Ml9IUF9CUENfRDcwMDBfV0YpLAogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDI4MDIsICJIUCBENzAwMCIsIEFMQzI2Ml9IUF9CUENfRDcwMDBfV0wpLApAQCAtMTA1NzUsMTcgKzEwOTAyLDE3IEBACiAJU05EX1BDSV9RVUlSSygweDEwNGQsIDB4MWYwMCwgIlNvbnkgQVNTQU1EIiwgQUxDMjYyX1NPTllfQVNTQU1EKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0ZCwgMHg4MjAzLCAiU29ueSBVWC05MCIsIEFMQzI2Ml9ISVBQTyksCiAJU05EX1BDSV9RVUlSSygweDEwNGQsIDB4ODIwZiwgIlNvbnkgQVNTQU1EIiwgQUxDMjYyX1NPTllfQVNTQU1EKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0ZCwgMHg5MDBlLCAiU29ueSBBU1NBTUQiLCBBTEMyNjJfU09OWV9BU1NBTUQpLAotCVNORF9QQ0lfUVVJUksoMHgxMDRkLCAweDkwMTUsICJTb255IDB4OTAxNSIsIEFMQzI2Ml9TT05ZX0FTU0FNRCksCi0JU05EX1BDSV9RVUlSSygweDEwNGQsIDB4OTAzMywgIlNvbnkgVkFJTyBWR04tU1IxOVhOIiwKLQkJICAgICAgQUxDMjYyX1NPTllfQVNTQU1EKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0ZCwgMHg5MDE2LCAiU29ueSBWQUlPIiwgQUxDMjYyX0FVVE8pLCAvKiBkaWctb25seSAqLworCVNORF9QQ0lfUVVJUktfTUFTSygweDEwNGQsIDB4ZmYwMCwgMHg5MDAwLCAiU29ueSBWQUlPIiwKKwkJCSAgIEFMQzI2Ml9TT05ZX0FTU0FNRCksCiAJU05EX1BDSV9RVUlSSygweDExNzksIDB4MDAwMSwgIlRvc2hpYmEgZHluYWJvb2sgU1MgUlgxIiwKIAkJICAgICAgQUxDMjYyX1RPU0hJQkFfUlgxKSwKIAlTTkRfUENJX1FVSVJLKDB4MTE3OSwgMHhmZjdiLCAiVG9zaGliYSBTMDYiLCBBTEMyNjJfVE9TSElCQV9TMDYpLAogCVNORF9QQ0lfUVVJUksoMHgxMGNmLCAweDEzOTcsICJGdWppdHN1IiwgQUxDMjYyX0ZVSklUU1UpLAogCVNORF9QQ0lfUVVJUksoMHgxMGNmLCAweDE0MmQsICJGdWppdHN1IExpZmVib29rIEU4NDEwIiwgQUxDMjYyX0ZVSklUU1UpLAotCVNORF9QQ0lfUVVJUksoMHgxNDRkLCAweGMwMzIsICJTYW1zdW5nIFExIFVsdHJhIiwgQUxDMjYyX1VMVFJBKSwKLQlTTkRfUENJX1FVSVJLKDB4MTQ0ZCwgMHhjMDM5LCAiU2Ftc3VuZyBRMVUgRUwiLCBBTEMyNjJfVUxUUkEpLAorCVNORF9QQ0lfUVVJUksoMHgxMGYxLCAweDI5MTUsICJUeWFuIFRodW5kZXIgbjY2NTBXIiwgQUxDMjYyX1RZQU4pLAorCVNORF9QQ0lfUVVJUktfTUFTSygweDE0NGQsIDB4ZmYwMCwgMHhjMDMyLCAiU2Ftc3VuZyBRMSIsCisJCQkgICBBTEMyNjJfVUxUUkEpLAogCVNORF9QQ0lfUVVJUksoMHgxNDRkLCAweGM1MTAsICJTYW1zdW5nIFE0NSIsIEFMQzI2Ml9ISVBQTyksCiAJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4Mzg0ZSwgIkxlbm92byAzMDAwIHk0MTAiLCBBTEMyNjJfTEVOT1ZPXzMwMDApLAogCVNORF9QQ0lfUVVJUksoMHgxN2ZmLCAweDA1NjAsICJCZW5xIEVEOCIsIEFMQzI2Ml9CRU5RX0VEOCksCkBAIC0xMDgwMiw2ICsxMTEyOSwxOSBAQAogCQkudW5zb2xfZXZlbnQgPSBhbGMyNjJfaGlwcG9fdW5zb2xfZXZlbnQsCiAJCS5pbml0X2hvb2sgPSBhbGMyNjJfaGlwcG9fYXV0b211dGUsCiAJfSwKKwlbQUxDMjYyX1RZQU5dID0geworCQkubWl4ZXJzID0geyBhbGMyNjJfdHlhbl9taXhlciB9LAorCQkuaW5pdF92ZXJicyA9IHsgYWxjMjYyX2luaXRfdmVyYnMsIGFsYzI2Ml90eWFuX3ZlcmJzfSwKKwkJLm51bV9kYWNzID0gQVJSQVlfU0laRShhbGMyNjJfZGFjX25pZHMpLAorCQkuZGFjX25pZHMgPSBhbGMyNjJfZGFjX25pZHMsCisJCS5ocF9uaWQgPSAweDAyLAorCQkuZGlnX291dF9uaWQgPSBBTEMyNjJfRElHT1VUX05JRCwKKwkJLm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGFsYzI2Ml9tb2RlcyksCisJCS5jaGFubmVsX21vZGUgPSBhbGMyNjJfbW9kZXMsCisJCS5pbnB1dF9tdXggPSAmYWxjMjYyX2NhcHR1cmVfc291cmNlLAorCQkudW5zb2xfZXZlbnQgPSBhbGMyNjJfdHlhbl91bnNvbF9ldmVudCwKKwkJLmluaXRfaG9vayA9IGFsYzI2Ml90eWFuX2F1dG9tdXRlLAorCX0sCiB9OwogCiBzdGF0aWMgaW50IHBhdGNoX2FsYzI2MihzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKQEAgLTEwODU0LDYgKzExMTk0LDE0IEBACiAJCX0KIAl9CiAKKwlpZiAoIXNwZWMtPm5vX2FuYWxvZykgeworCQllcnIgPSBzbmRfaGRhX2F0dGFjaF9iZWVwX2RldmljZShjb2RlYywgMHgxKTsKKwkJaWYgKGVyciA8IDApIHsKKwkJCWFsY19mcmVlKGNvZGVjKTsKKwkJCXJldHVybiBlcnI7CisJCX0KKwl9CisKIAlpZiAoYm9hcmRfY29uZmlnICE9IEFMQzI2Ml9BVVRPKQogCQlzZXR1cF9wcmVzZXQoc3BlYywgJmFsYzI2Ml9wcmVzZXRzW2JvYXJkX2NvbmZpZ10pOwogCkBAIC0xMDg2NSw3ICsxMTIxMyw3IEBACiAJc3BlYy0+c3RyZWFtX2RpZ2l0YWxfcGxheWJhY2sgPSAmYWxjMjYyX3BjbV9kaWdpdGFsX3BsYXliYWNrOwogCXNwZWMtPnN0cmVhbV9kaWdpdGFsX2NhcHR1cmUgPSAmYWxjMjYyX3BjbV9kaWdpdGFsX2NhcHR1cmU7CiAKLQlzcGVjLT5pc19taXhfY2FwdHVyZSA9IDE7CisJc3BlYy0+Y2FwdHVyZV9zdHlsZSA9IENBUFRfTUlYOwogCWlmICghc3BlYy0+YWRjX25pZHMgJiYgc3BlYy0+aW5wdXRfbXV4KSB7CiAJCS8qIGNoZWNrIHdoZXRoZXIgTklEIDB4MDcgaXMgdmFsaWQgKi8KIAkJdW5zaWduZWQgaW50IHdjYXAgPSBnZXRfd2NhcHMoY29kZWMsIDB4MDcpOwpAQCAtMTA4ODIsOCArMTEyMzAsMTAgQEAKIAkJCXNwZWMtPmNhcHNyY19uaWRzID0gYWxjMjYyX2NhcHNyY19uaWRzOwogCQl9CiAJfQotCWlmICghc3BlYy0+Y2FwX21peGVyKQorCWlmICghc3BlYy0+Y2FwX21peGVyICYmICFzcGVjLT5ub19hbmFsb2cpCiAJCXNldF9jYXB0dXJlX21peGVyKHNwZWMpOworCWlmICghc3BlYy0+bm9fYW5hbG9nKQorCQlzZXRfYmVlcF9hbXAoc3BlYywgMHgwYiwgMHgwNSwgSERBX0lOUFVUKTsKIAogCXNwZWMtPnZtYXN0ZXJfbmlkID0gMHgwYzsKIApAQCAtMTEyNjMsMTkgKzExNjEzLDEzIEBACiBzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzI2OF9iYXNlX2luaXRfdmVyYnNbXSA9IHsKIAkvKiBVbm11dGUgREFDMC0xIGFuZCBzZXQgdm9sID0gMCAqLwogCXsweDAyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1pFUk99LAotCXsweDAyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKLQl7MHgwMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKX0sCiAJezB4MDMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfWkVST30sCi0JezB4MDMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAotCXsweDAzLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpfSwKIAogCS8qCiAJICogU2V0IHVwIG91dHB1dCBtaXhlcnMgKDB4MGMgLSAweDBlKQogCSAqLwogCS8qIHNldCB2b2w9MCB0byBvdXRwdXQgbWl4ZXJzICovCiAJezB4MGUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAotCXsweDBlLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpfSwKLQl7MHgwZSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9aRVJPfSwKICAgICAgICAgezB4MGUsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKIAogCXsweDBmLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKQEAgLTExMjk0LDkgKzExNjM4LDcgQEAKIAl7MHgxNSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKIAl7MHgxNiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKIAl7MHgxOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKLQl7MHgxOSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKIAl7MHgxYSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKLQl7MHgxYywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKIAogCS8qIHNldCBQQ0JFRVAgdm9sID0gMCwgbXV0ZSBjb25uZWN0aW9ucyAqLwogCXsweDFkLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKQEAgLTExMzE4LDEwICsxMTY2MCw4IEBACiAgKi8KIHN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjMjY4X3ZvbHVtZV9pbml0X3ZlcmJzW10gPSB7CiAJLyogc2V0IG91dHB1dCBEQUMgKi8KLQl7MHgwMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCi0JezB4MDIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMSl9LAotCXsweDAzLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKLQl7MHgwMywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKX0sCisJezB4MDIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfWkVST30sCisJezB4MDMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfWkVST30sCiAKIAl7MHgxOCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAweDI0fSwKIAl7MHgxOSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAweDI0fSwKQEAgLTExMzI5LDE2ICsxMTY2OSwxMiBAQAogCXsweDFjLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB4MjB9LAogCXsweDFkLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB4MjB9LAogCi0JezB4MGUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfWkVST30sCiAJezB4MGUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAotCXsweDBlLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpfSwKIAl7MHgwZiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCiAJezB4MTAsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAogCiAJezB4MTgsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCi0JezB4MTksIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCiAJezB4MWEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCi0JezB4MWMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCiAKIAkvKiBzZXQgUENCRUVQIHZvbCA9IDAsIG11dGUgY29ubmVjdGlvbnMgKi8KIAl7MHgxZCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCkBAIC0xMTUzNyw3ICsxMTg3Myw3IEBACiBzdGF0aWMgaW50IGFsYzI2OF9hdXRvX2NyZWF0ZV9hbmFsb2dfaW5wdXRfY3RscyhzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMsCiAJCQkJCQljb25zdCBzdHJ1Y3QgYXV0b19waW5fY2ZnICpjZmcpCiB7Ci0Jc3RydWN0IGhkYV9pbnB1dF9tdXggKmltdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4OworCXN0cnVjdCBoZGFfaW5wdXRfbXV4ICppbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eFswXTsKIAlpbnQgaSwgaWR4MTsKIAogCWZvciAoaSA9IDA7IGkgPCBBVVRPX1BJTl9MQVNUOyBpKyspIHsKQEAgLTExNjMxLDkgKzExOTY3LDE0IEBACiAJCQkJCSAgIGFsYzI2OF9pZ25vcmUpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwotCWlmICghc3BlYy0+YXV0b2NmZy5saW5lX291dHMpCisJaWYgKCFzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0cykgeworCQlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfb3V0cyB8fCBzcGVjLT5hdXRvY2ZnLmRpZ19pbl9waW4pIHsKKwkJCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IDI7CisJCQlzcGVjLT5ub19hbmFsb2cgPSAxOworCQkJZ290byBkaWdfb25seTsKKwkJfQogCQlyZXR1cm4gMDsgLyogY2FuJ3QgZmluZCB2YWxpZCBCSU9TIHBpbiBjb25maWcgKi8KLQorCX0KIAllcnIgPSBhbGMyNjhfYXV0b19jcmVhdGVfbXVsdGlfb3V0X2N0bHMoc3BlYywgJnNwZWMtPmF1dG9jZmcpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwpAQCAtMTE2NDMsMjUgKzExOTg0LDI2IEBACiAKIAlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSAyOwogCisgZGlnX29ubHk6CiAJLyogZGlnaXRhbCBvbmx5IHN1cHBvcnQgb3V0cHV0ICovCi0JaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dF9waW4pCisJaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dHMpIHsKIAkJc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQgPSBBTEMyNjhfRElHT1VUX05JRDsKLQorCQlzcGVjLT5kaWdfb3V0X3R5cGUgPSBzcGVjLT5hdXRvY2ZnLmRpZ19vdXRfdHlwZVswXTsKKwl9CiAJaWYgKHNwZWMtPmtjdGxzLmxpc3QpCiAJCWFkZF9taXhlcihzcGVjLCBzcGVjLT5rY3Rscy5saXN0KTsKIAotCWlmIChzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1swXSAhPSAweDFkKQorCWlmICghc3BlYy0+bm9fYW5hbG9nICYmIHNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzBdICE9IDB4MWQpCiAJCWFkZF9taXhlcihzcGVjLCBhbGMyNjhfYmVlcF9taXhlcik7CiAKIAlhZGRfdmVyYihzcGVjLCBhbGMyNjhfdm9sdW1lX2luaXRfdmVyYnMpOwogCXNwZWMtPm51bV9tdXhfZGVmcyA9IDE7Ci0Jc3BlYy0+aW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eDsKKwlzcGVjLT5pbnB1dF9tdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4WzBdOwogCiAJZXJyID0gYWxjX2F1dG9fYWRkX21pY19ib29zdChjb2RlYyk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKLQlzdG9yZV9waW5fY29uZmlncyhjb2RlYyk7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTExNzIzLDcgKzEyMDY1LDcgQEAKIAogc3RhdGljIHN0cnVjdCBhbGNfY29uZmlnX3ByZXNldCBhbGMyNjhfcHJlc2V0c1tdID0gewogCVtBTEMyNjdfUVVBTlRBX0lMMV0gPSB7Ci0JCS5taXhlcnMgPSB7IGFsYzI2N19xdWFudGFfaWwxX21peGVyIH0sCisJCS5taXhlcnMgPSB7IGFsYzI2N19xdWFudGFfaWwxX21peGVyLCBhbGMyNjhfYmVlcF9taXhlciB9LAogCQkuaW5pdF92ZXJicyA9IHsgYWxjMjY4X2Jhc2VfaW5pdF92ZXJicywgYWxjMjY4X2VhcGRfdmVyYnMsCiAJCQkJYWxjMjY3X3F1YW50YV9pbDFfdmVyYnMgfSwKIAkJLm51bV9kYWNzID0gQVJSQVlfU0laRShhbGMyNjhfZGFjX25pZHMpLApAQCAtMTE4MDUsNyArMTIxNDcsOCBAQAogCX0sCiAJW0FMQzI2OF9BQ0VSX0FTUElSRV9PTkVdID0gewogCQkubWl4ZXJzID0geyBhbGMyNjhfYWNlcl9hc3BpcmVfb25lX21peGVyLAotCQkJCWFsYzI2OF9jYXB0dXJlX2FsdF9taXhlciB9LAorCQkJICAgIGFsYzI2OF9iZWVwX21peGVyLAorCQkJICAgIGFsYzI2OF9jYXB0dXJlX2FsdF9taXhlciB9LAogCQkuaW5pdF92ZXJicyA9IHsgYWxjMjY4X2Jhc2VfaW5pdF92ZXJicywgYWxjMjY4X2VhcGRfdmVyYnMsCiAJCQkJYWxjMjY4X2FjZXJfYXNwaXJlX29uZV92ZXJicyB9LAogCQkubnVtX2RhY3MgPSBBUlJBWV9TSVpFKGFsYzI2OF9kYWNfbmlkcyksCkBAIC0xMTg3NCw3ICsxMjIxNyw3IEBACiB7CiAJc3RydWN0IGFsY19zcGVjICpzcGVjOwogCWludCBib2FyZF9jb25maWc7Ci0JaW50IGVycjsKKwlpbnQgaSwgaGFzX2JlZXAsIGVycjsKIAogCXNwZWMgPSBrY2FsbG9jKDEsIHNpemVvZigqc3BlYyksIEdGUF9LRVJORUwpOwogCWlmIChzcGVjID09IE5VTEwpCkBAIC0xMTkyMywxNSArMTIyNjYsMzAgQEAKIAogCXNwZWMtPnN0cmVhbV9kaWdpdGFsX3BsYXliYWNrID0gJmFsYzI2OF9wY21fZGlnaXRhbF9wbGF5YmFjazsKIAotCWlmICghcXVlcnlfYW1wX2NhcHMoY29kZWMsIDB4MWQsIEhEQV9JTlBVVCkpCi0JCS8qIG92ZXJyaWRlIHRoZSBhbXAgY2FwcyBmb3IgYmVlcCBnZW5lcmF0b3IgKi8KLQkJc25kX2hkYV9vdmVycmlkZV9hbXBfY2Fwcyhjb2RlYywgMHgxZCwgSERBX0lOUFVULAorCWhhc19iZWVwID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgc3BlYy0+bnVtX21peGVyczsgaSsrKSB7CisJCWlmIChzcGVjLT5taXhlcnNbaV0gPT0gYWxjMjY4X2JlZXBfbWl4ZXIpIHsKKwkJCWhhc19iZWVwID0gMTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKGhhc19iZWVwKSB7CisJCWVyciA9IHNuZF9oZGFfYXR0YWNoX2JlZXBfZGV2aWNlKGNvZGVjLCAweDEpOworCQlpZiAoZXJyIDwgMCkgeworCQkJYWxjX2ZyZWUoY29kZWMpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCQlpZiAoIXF1ZXJ5X2FtcF9jYXBzKGNvZGVjLCAweDFkLCBIREFfSU5QVVQpKQorCQkJLyogb3ZlcnJpZGUgdGhlIGFtcCBjYXBzIGZvciBiZWVwIGdlbmVyYXRvciAqLworCQkJc25kX2hkYV9vdmVycmlkZV9hbXBfY2Fwcyhjb2RlYywgMHgxZCwgSERBX0lOUFVULAogCQkJCQkgICgweDBjIDw8IEFDX0FNUENBUF9PRkZTRVRfU0hJRlQpIHwKIAkJCQkJICAoMHgwYyA8PCBBQ19BTVBDQVBfTlVNX1NURVBTX1NISUZUKSB8CiAJCQkJCSAgKDB4MDcgPDwgQUNfQU1QQ0FQX1NURVBfU0laRV9TSElGVCkgfAogCQkJCQkgICgwIDw8IEFDX0FNUENBUF9NVVRFX1NISUZUKSk7CisJfQogCi0JaWYgKCFzcGVjLT5hZGNfbmlkcyAmJiBzcGVjLT5pbnB1dF9tdXgpIHsKKwlpZiAoIXNwZWMtPm5vX2FuYWxvZyAmJiAhc3BlYy0+YWRjX25pZHMgJiYgc3BlYy0+aW5wdXRfbXV4KSB7CiAJCS8qIGNoZWNrIHdoZXRoZXIgTklEIDB4MDcgaXMgdmFsaWQgKi8KIAkJdW5zaWduZWQgaW50IHdjYXAgPSBnZXRfd2NhcHMoY29kZWMsIDB4MDcpOwogCQlpbnQgaTsKQEAgLTEyMDEyLDggKzEyMzcwLDYgQEAKIAlIREFfQ09ERUNfTVVURSgiTGluZSBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAyLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiQmVlcCBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDQsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIkJlZXAgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHg0LCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4MTgsIDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkZyb250IE1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAxLCBIREFfSU5QVVQpLApAQCAtMTIwNDAsOCArMTIzOTYsNiBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIkludGVybmFsIE1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAxLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJJbnRlcm5hbCBNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwMSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJJbnRlcm5hbCBNaWMgQm9vc3QiLCAweDE5LCAwLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIlBDIFNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiUEMgU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA0LCBIREFfSU5QVVQpLAogCXsgfQogfTsKIApAQCAtMTIwNjUsOCArMTI0MTksNiBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIkRvY2sgTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDMsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkRvY2sgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDMsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRG9jayBNaWMgQm9vc3QiLCAweDFiLCAwLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIlBDIFNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiUEMgU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA0LCBIREFfSU5QVVQpLAogCXsgfQogfTsKIApAQCAtMTIxMDMsMTMgKzEyNDU1LDYgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi0vKiBiZWVwIGNvbnRyb2wgKi8KLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjlfYmVlcF9taXhlcltdID0gewotCUhEQV9DT0RFQ19WT0xVTUUoIkJlZXAgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHg0LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJCZWVwIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4NCwgSERBX0lOUFVUKSwKLQl7IH0gLyogZW5kICovCi19OwotCiBzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzI2OV9xdWFudGFfZmwxX3ZlcmJzW10gPSB7CiAJezB4MTUsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAxfSwKIAl7MHgxMiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU59LApAQCAtMTI1MDksNyArMTI4NTQsNyBAQAogCSAqLwogCWlmIChjZmctPmlucHV0X3BpbnNbQVVUT19QSU5fTUlDXSA9PSAweDEyIHx8CiAJICAgIGNmZy0+aW5wdXRfcGluc1tBVVRPX1BJTl9GUk9OVF9NSUNdID09IDB4MTIpIHsKLQkJc3RydWN0IGhkYV9pbnB1dF9tdXggKmltdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4OworCQlzdHJ1Y3QgaGRhX2lucHV0X211eCAqaW11eCA9ICZzcGVjLT5wcml2YXRlX2ltdXhbMF07CiAJCWltdXgtPml0ZW1zW2ltdXgtPm51bV9pdGVtc10ubGFiZWwgPSAiSW50IE1pYyI7CiAJCWltdXgtPml0ZW1zW2ltdXgtPm51bV9pdGVtc10uaW5kZXggPSAweDA1OwogCQlpbXV4LT5udW1faXRlbXMrKzsKQEAgLTEyNTI3LDEzICsxMjg3MiwzNCBAQAogI2RlZmluZSBhbGMyNjlfcGNtX2RpZ2l0YWxfcGxheWJhY2sJYWxjODgwX3BjbV9kaWdpdGFsX3BsYXliYWNrCiAjZGVmaW5lIGFsYzI2OV9wY21fZGlnaXRhbF9jYXB0dXJlCWFsYzg4MF9wY21fZGlnaXRhbF9jYXB0dXJlCiAKK3N0YXRpYyBzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gYWxjMjY5XzQ0a19wY21fYW5hbG9nX3BsYXliYWNrID0geworCS5zdWJzdHJlYW1zID0gMSwKKwkuY2hhbm5lbHNfbWluID0gMiwKKwkuY2hhbm5lbHNfbWF4ID0gOCwKKwkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV80NDEwMCwgLyogZml4ZWQgcmF0ZSAqLworCS8qIE5JRCBpcyBzZXQgaW4gYWxjX2J1aWxkX3BjbXMgKi8KKwkub3BzID0geworCQkub3BlbiA9IGFsYzg4MF9wbGF5YmFja19wY21fb3BlbiwKKwkJLnByZXBhcmUgPSBhbGM4ODBfcGxheWJhY2tfcGNtX3ByZXBhcmUsCisJCS5jbGVhbnVwID0gYWxjODgwX3BsYXliYWNrX3BjbV9jbGVhbnVwCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gYWxjMjY5XzQ0a19wY21fYW5hbG9nX2NhcHR1cmUgPSB7CisJLnN1YnN0cmVhbXMgPSAxLAorCS5jaGFubmVsc19taW4gPSAyLAorCS5jaGFubmVsc19tYXggPSAyLAorCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzQ0MTAwLCAvKiBmaXhlZCByYXRlICovCisJLyogTklEIGlzIHNldCBpbiBhbGNfYnVpbGRfcGNtcyAqLworfTsKKwogLyoKICAqIEJJT1MgYXV0byBjb25maWd1cmF0aW9uCiAgKi8KIHN0YXRpYyBpbnQgYWxjMjY5X3BhcnNlX2F1dG9fY29uZmlnKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwotCWludCBpLCBlcnI7CisJaW50IGVycjsKIAlzdGF0aWMgaGRhX25pZF90IGFsYzI2OV9pZ25vcmVbXSA9IHsgMHgxZCwgMCB9OwogCiAJZXJyID0gc25kX2hkYV9wYXJzZV9waW5fZGVmX2NvbmZpZyhjb2RlYywgJnNwZWMtPmF1dG9jZmcsCkBAIC0xMjU1MCwyMiArMTI5MTYsMTUgQEAKIAogCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IHNwZWMtPm11bHRpb3V0Lm51bV9kYWNzICogMjsKIAotCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRfcGluKQorCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRzKQogCQlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IEFMQzI2OV9ESUdPVVRfTklEOwogCiAJaWYgKHNwZWMtPmtjdGxzLmxpc3QpCiAJCWFkZF9taXhlcihzcGVjLCBzcGVjLT5rY3Rscy5saXN0KTsKIAotCS8qIGNyZWF0ZSBhIGJlZXAgbWl4ZXIgY29udHJvbCBpZiB0aGUgcGluIDB4MWQgaXNuJ3QgYXNzaWduZWQgKi8KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzcGVjLT5hdXRvY2ZnLmlucHV0X3BpbnMpOyBpKyspCi0JCWlmIChzcGVjLT5hdXRvY2ZnLmlucHV0X3BpbnNbaV0gPT0gMHgxZCkKLQkJCWJyZWFrOwotCWlmIChpID49IEFSUkFZX1NJWkUoc3BlYy0+YXV0b2NmZy5pbnB1dF9waW5zKSkKLQkJYWRkX21peGVyKHNwZWMsIGFsYzI2OV9iZWVwX21peGVyKTsKLQogCWFkZF92ZXJiKHNwZWMsIGFsYzI2OV9pbml0X3ZlcmJzKTsKIAlzcGVjLT5udW1fbXV4X2RlZnMgPSAxOwotCXNwZWMtPmlucHV0X211eCA9ICZzcGVjLT5wcml2YXRlX2ltdXg7CisJc3BlYy0+aW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eFswXTsKIAkvKiBzZXQgZGVmYXVsdCBpbnB1dCBzb3VyY2UgKi8KIAlzbmRfaGRhX2NvZGVjX3dyaXRlX2NhY2hlKGNvZGVjLCBhbGMyNjlfY2Fwc3JjX25pZHNbMF0sCiAJCQkJICAwLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwKQEAgLTEyNTc1LDEwICsxMjkzNCw5IEBACiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKLQlpZiAoIXNwZWMtPmNhcF9taXhlcikKKwlpZiAoIXNwZWMtPmNhcF9taXhlciAmJiAhc3BlYy0+bm9fYW5hbG9nKQogCQlzZXRfY2FwdHVyZV9taXhlcihzcGVjKTsKIAotCXN0b3JlX3Bpbl9jb25maWdzKGNvZGVjKTsKIAlyZXR1cm4gMTsKIH0KIApAQCAtMTI2NzUsNyArMTMwMzMsNyBAQAogCQkuaW5pdF9ob29rID0gYWxjMjY5X2VlZXBjX2RtaWNfaW5pdGhvb2ssCiAJfSwKIAlbQUxDMjY5X0ZVSklUU1VdID0gewotCQkubWl4ZXJzID0geyBhbGMyNjlfZnVqaXRzdV9taXhlciwgYWxjMjY5X2JlZXBfbWl4ZXIgfSwKKwkJLm1peGVycyA9IHsgYWxjMjY5X2Z1aml0c3VfbWl4ZXIgfSwKIAkJLmNhcF9taXhlciA9IGFsYzI2OV9lcGNfY2FwdHVyZV9taXhlciwKIAkJLmluaXRfdmVyYnMgPSB7IGFsYzI2OV9pbml0X3ZlcmJzLAogCQkJCWFsYzI2OV9lZWVwY19kbWljX2luaXRfdmVyYnMgfSwKQEAgLTEyNzQwLDEzICsxMzA5OCwyNiBAQAogCQl9CiAJfQogCisJZXJyID0gc25kX2hkYV9hdHRhY2hfYmVlcF9kZXZpY2UoY29kZWMsIDB4MSk7CisJaWYgKGVyciA8IDApIHsKKwkJYWxjX2ZyZWUoY29kZWMpOworCQlyZXR1cm4gZXJyOworCX0KKwogCWlmIChib2FyZF9jb25maWcgIT0gQUxDMjY5X0FVVE8pCiAJCXNldHVwX3ByZXNldChzcGVjLCAmYWxjMjY5X3ByZXNldHNbYm9hcmRfY29uZmlnXSk7CiAKIAlzcGVjLT5zdHJlYW1fbmFtZV9hbmFsb2cgPSAiQUxDMjY5IEFuYWxvZyI7Ci0Jc3BlYy0+c3RyZWFtX2FuYWxvZ19wbGF5YmFjayA9ICZhbGMyNjlfcGNtX2FuYWxvZ19wbGF5YmFjazsKLQlzcGVjLT5zdHJlYW1fYW5hbG9nX2NhcHR1cmUgPSAmYWxjMjY5X3BjbV9hbmFsb2dfY2FwdHVyZTsKLQorCWlmIChjb2RlYy0+c3Vic3lzdGVtX2lkID09IDB4MTdhYTNiZjgpIHsKKwkJLyogRHVlIHRvIGEgaGFyZHdhcmUgcHJvYmxlbSBvbiBMZW5vdm8gSWRlYWRwYWQsIHdlIG5lZWQgdG8KKwkJICogZml4IHRoZSBzYW1wbGUgcmF0ZSBvZiBhbmFsb2cgSS9PIHRvIDQ0LjFrSHoKKwkJICovCisJCXNwZWMtPnN0cmVhbV9hbmFsb2dfcGxheWJhY2sgPSAmYWxjMjY5XzQ0a19wY21fYW5hbG9nX3BsYXliYWNrOworCQlzcGVjLT5zdHJlYW1fYW5hbG9nX2NhcHR1cmUgPSAmYWxjMjY5XzQ0a19wY21fYW5hbG9nX2NhcHR1cmU7CisJfSBlbHNlIHsKKwkJc3BlYy0+c3RyZWFtX2FuYWxvZ19wbGF5YmFjayA9ICZhbGMyNjlfcGNtX2FuYWxvZ19wbGF5YmFjazsKKwkJc3BlYy0+c3RyZWFtX2FuYWxvZ19jYXB0dXJlID0gJmFsYzI2OV9wY21fYW5hbG9nX2NhcHR1cmU7CisJfQogCXNwZWMtPnN0cmVhbV9uYW1lX2RpZ2l0YWwgPSAiQUxDMjY5IERpZ2l0YWwiOwogCXNwZWMtPnN0cmVhbV9kaWdpdGFsX3BsYXliYWNrID0gJmFsYzI2OV9wY21fZGlnaXRhbF9wbGF5YmFjazsKIAlzcGVjLT5zdHJlYW1fZGlnaXRhbF9jYXB0dXJlID0gJmFsYzI2OV9wY21fZGlnaXRhbF9jYXB0dXJlOwpAQCAtMTI3NTYsNiArMTMxMjcsNyBAQAogCXNwZWMtPmNhcHNyY19uaWRzID0gYWxjMjY5X2NhcHNyY19uaWRzOwogCWlmICghc3BlYy0+Y2FwX21peGVyKQogCQlzZXRfY2FwdHVyZV9taXhlcihzcGVjKTsKKwlzZXRfYmVlcF9hbXAoc3BlYywgMHgwYiwgMHgwNCwgSERBX0lOUFVUKTsKIAogCWNvZGVjLT5wYXRjaF9vcHMgPSBhbGNfcGF0Y2hfb3BzOwogCWlmIChib2FyZF9jb25maWcgPT0gQUxDMjY5X0FVVE8pCkBAIC0xMzAwNiw4ICsxMzM3OCw2IEBACiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODYxX2FzdXNfbGFwdG9wX21peGVyW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiQ0QgUGxheWJhY2sgVm9sdW1lIiwgMHgxNSwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJDRCBQbGF5YmFjayBTd2l0Y2giLCAweDE1LCAweDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiUEMgQmVlcCBQbGF5YmFjayBWb2x1bWUiLCAweDIzLCAweDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJQQyBCZWVwIFBsYXliYWNrIFN3aXRjaCIsIDB4MjMsIDB4MCwgSERBX09VVFBVVCksCiAJeyB9CiB9OwogCkBAIC0xMzQ4MSw3ICsxMzg1MSw3IEBACiBzdGF0aWMgaW50IGFsYzg2MV9hdXRvX2NyZWF0ZV9hbmFsb2dfaW5wdXRfY3RscyhzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMsCiAJCQkJCQljb25zdCBzdHJ1Y3QgYXV0b19waW5fY2ZnICpjZmcpCiB7Ci0Jc3RydWN0IGhkYV9pbnB1dF9tdXggKmltdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4OworCXN0cnVjdCBoZGFfaW5wdXRfbXV4ICppbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eFswXTsKIAlpbnQgaSwgZXJyLCBpZHgsIGlkeDE7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVVUT19QSU5fTEFTVDsgaSsrKSB7CkBAIC0xMzU2OCwxMiArMTM5MzgsOCBAQAogCiAJZm9yIChpID0gMDsgaSA8IEFVVE9fUElOX0xBU1Q7IGkrKykgewogCQloZGFfbmlkX3QgbmlkID0gc3BlYy0+YXV0b2NmZy5pbnB1dF9waW5zW2ldOwotCQlpZiAobmlkID49IDB4MGMgJiYgbmlkIDw9IDB4MTEpIHsKLQkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwKLQkJCQkJICAgIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwKLQkJCQkJICAgIGkgPD0gQVVUT19QSU5fRlJPTlRfTUlDID8KLQkJCQkJICAgIFBJTl9WUkVGODAgOiBQSU5fSU4pOwotCQl9CisJCWlmIChuaWQgPj0gMHgwYyAmJiBuaWQgPD0gMHgxMSkKKwkJCWFsY19zZXRfaW5wdXRfcGluKGNvZGVjLCBuaWQsIGkpOwogCX0KIH0KIApAQCAtMTM2MDksNyArMTM5NzUsNyBAQAogCiAJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgKiAyOwogCi0JaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dF9waW4pCisJaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dHMpCiAJCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gQUxDODYxX0RJR09VVF9OSUQ7CiAKIAlpZiAoc3BlYy0+a2N0bHMubGlzdCkKQEAgLTEzNjE4LDEzICsxMzk4NCwxMiBAQAogCWFkZF92ZXJiKHNwZWMsIGFsYzg2MV9hdXRvX2luaXRfdmVyYnMpOwogCiAJc3BlYy0+bnVtX211eF9kZWZzID0gMTsKLQlzcGVjLT5pbnB1dF9tdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4OworCXNwZWMtPmlucHV0X211eCA9ICZzcGVjLT5wcml2YXRlX2ltdXhbMF07CiAKIAlzcGVjLT5hZGNfbmlkcyA9IGFsYzg2MV9hZGNfbmlkczsKIAlzcGVjLT5udW1fYWRjX25pZHMgPSBBUlJBWV9TSVpFKGFsYzg2MV9hZGNfbmlkcyk7CiAJc2V0X2NhcHR1cmVfbWl4ZXIoc3BlYyk7CiAKLQlzdG9yZV9waW5fY29uZmlncyhjb2RlYyk7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTEzODMzLDYgKzE0MTk4LDEyIEBACiAJCX0KIAl9CiAKKwllcnIgPSBzbmRfaGRhX2F0dGFjaF9iZWVwX2RldmljZShjb2RlYywgMHgyMyk7CisJaWYgKGVyciA8IDApIHsKKwkJYWxjX2ZyZWUoY29kZWMpOworCQlyZXR1cm4gZXJyOworCX0KKwogCWlmIChib2FyZF9jb25maWcgIT0gQUxDODYxX0FVVE8pCiAJCXNldHVwX3ByZXNldChzcGVjLCAmYWxjODYxX3ByZXNldHNbYm9hcmRfY29uZmlnXSk7CiAKQEAgLTEzODQ0LDYgKzE0MjE1LDggQEAKIAlzcGVjLT5zdHJlYW1fZGlnaXRhbF9wbGF5YmFjayA9ICZhbGM4NjFfcGNtX2RpZ2l0YWxfcGxheWJhY2s7CiAJc3BlYy0+c3RyZWFtX2RpZ2l0YWxfY2FwdHVyZSA9ICZhbGM4NjFfcGNtX2RpZ2l0YWxfY2FwdHVyZTsKIAorCXNldF9iZWVwX2FtcChzcGVjLCAweDIzLCAwLCBIREFfT1VUUFVUKTsKKwogCXNwZWMtPnZtYXN0ZXJfbmlkID0gMHgwMzsKIAogCWNvZGVjLT5wYXRjaF9vcHMgPSBhbGNfcGF0Y2hfb3BzOwpAQCAtMTQwMDAsOSArMTQzNzMsNiBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIkNEIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDQsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkNEIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDQsIEhEQV9JTlBVVCksCiAKLQlIREFfQ09ERUNfVk9MVU1FKCJQQyBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKLQogCXsgfSAvKiBlbmQgKi8KIH07CiAKQEAgLTE0MDI2LDkgKzE0Mzk2LDYgQEAKIAlIREFfQ09ERUNfVk9MVU1FKCJDRCBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA0LCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJDRCBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA0LCBIREFfSU5QVVQpLAogCi0JSERBX0NPREVDX1ZPTFVNRSgiUEMgU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJQQyBTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCi0KIAl7IH0gLyogZW5kICovCiB9OwogCkBAIC0xNDA2Nyw4ICsxNDQzNCw2IEBACiAJSERBX0NPREVDX1ZPTFVNRSgiSW50IE1pYyBCb29zdCIsIDB4MTksIDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiSW50IE1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkludCBNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIlBDIEJlZXAgVm9sdW1lIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiUEMgQmVlcCBTd2l0Y2giLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAogCXsgfSAvKiBlbmQgKi8KIH07CiAKQEAgLTE0Mzc5LDkgKzE0NzQ0LDcgQEAKIAlTTkRfUENJX1FVSVJLKDB4MTE3OSwgMHhmZjAzLCAiVG9zaGliYSBQMjA1IiwgQUxDODYxVkRfTEVOT1ZPKSwKIAlTTkRfUENJX1FVSVJLKDB4MTE3OSwgMHhmZjMxLCAiVG9zaGliYSBMMzAtMTQ5IiwgQUxDODYxVkRfREFMTEFTKSwKIAlTTkRfUENJX1FVSVJLKDB4MTU2NSwgMHg4MjBkLCAiQmlvc3RhciBORjYxUyBTRSIsIEFMQzg2MVZEXzZTVF9ESUcpLAotCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDIwNjYsICJMZW5vdm8iLCBBTEM4NjFWRF9MRU5PVk8pLAotCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDM4MDIsICJMZW5vdm8gMzAwMCBDMjAwIiwgQUxDODYxVkRfTEVOT1ZPKSwKLQlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgzODRlLCAiTGVub3ZvIDMwMDAgTjIwMCIsIEFMQzg2MVZEX0xFTk9WTyksCisJU05EX1BDSV9RVUlSS19WRU5ET1IoMHgxN2FhLCAiTGVub3ZvIiwgQUxDODYxVkRfTEVOT1ZPKSwKIAlTTkRfUENJX1FVSVJLKDB4MTg0OSwgMHgwODYyLCAiQVNSb2NrIEs4TkY2Ry1WU1RBIiwgQUxDODYxVkRfNlNUX0RJRyksCiAJe30KIH07CkBAIC0xNDU0MywxMSArMTQ5MDYsOSBAQAogCWZvciAoaSA9IDA7IGkgPCBBVVRPX1BJTl9MQVNUOyBpKyspIHsKIAkJaGRhX25pZF90IG5pZCA9IHNwZWMtPmF1dG9jZmcuaW5wdXRfcGluc1tpXTsKIAkJaWYgKGFsYzg2MXZkX2lzX2lucHV0X3BpbihuaWQpKSB7Ci0JCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsCi0JCQkJCUFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwKLQkJCQkJaSA8PSBBVVRPX1BJTl9GUk9OVF9NSUMgPwotCQkJCQkJCVBJTl9WUkVGODAgOiBQSU5fSU4pOwotCQkJaWYgKG5pZCAhPSBBTEM4NjFWRF9QSU5fQ0RfTklEKQorCQkJYWxjX3NldF9pbnB1dF9waW4oY29kZWMsIG5pZCwgaSk7CisJCQlpZiAobmlkICE9IEFMQzg2MVZEX1BJTl9DRF9OSUQgJiYKKwkJCSAgICAoZ2V0X3djYXBzKGNvZGVjLCBuaWQpICYgQUNfV0NBUF9PVVRfQU1QKSkKIAkJCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsCiAJCQkJCQlBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLAogCQkJCQkJQU1QX09VVF9NVVRFKTsKQEAgLTE0NzEzLDcgKzE1MDc0LDcgQEAKIAogCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IHNwZWMtPm11bHRpb3V0Lm51bV9kYWNzICogMjsKIAotCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRfcGluKQorCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRzKQogCQlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IEFMQzg2MVZEX0RJR09VVF9OSUQ7CiAKIAlpZiAoc3BlYy0+a2N0bHMubGlzdCkKQEAgLTE0NzIyLDEzICsxNTA4MywxMiBAQAogCWFkZF92ZXJiKHNwZWMsIGFsYzg2MXZkX3ZvbHVtZV9pbml0X3ZlcmJzKTsKIAogCXNwZWMtPm51bV9tdXhfZGVmcyA9IDE7Ci0Jc3BlYy0+aW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eDsKKwlzcGVjLT5pbnB1dF9tdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4WzBdOwogCiAJZXJyID0gYWxjX2F1dG9fYWRkX21pY19ib29zdChjb2RlYyk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKLQlzdG9yZV9waW5fY29uZmlncyhjb2RlYyk7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTE0Nzc5LDYgKzE1MTM5LDEyIEBACiAJCX0KIAl9CiAKKwllcnIgPSBzbmRfaGRhX2F0dGFjaF9iZWVwX2RldmljZShjb2RlYywgMHgyMyk7CisJaWYgKGVyciA8IDApIHsKKwkJYWxjX2ZyZWUoY29kZWMpOworCQlyZXR1cm4gZXJyOworCX0KKwogCWlmIChib2FyZF9jb25maWcgIT0gQUxDODYxVkRfQVVUTykKIAkJc2V0dXBfcHJlc2V0KHNwZWMsICZhbGM4NjF2ZF9wcmVzZXRzW2JvYXJkX2NvbmZpZ10pOwogCkBAIC0xNDgwMSw5ICsxNTE2NywxMCBAQAogCXNwZWMtPmFkY19uaWRzID0gYWxjODYxdmRfYWRjX25pZHM7CiAJc3BlYy0+bnVtX2FkY19uaWRzID0gQVJSQVlfU0laRShhbGM4NjF2ZF9hZGNfbmlkcyk7CiAJc3BlYy0+Y2Fwc3JjX25pZHMgPSBhbGM4NjF2ZF9jYXBzcmNfbmlkczsKLQlzcGVjLT5pc19taXhfY2FwdHVyZSA9IDE7CisJc3BlYy0+Y2FwdHVyZV9zdHlsZSA9IENBUFRfTUlYOwogCiAJc2V0X2NhcHR1cmVfbWl4ZXIoc3BlYyk7CisJc2V0X2JlZXBfYW1wKHNwZWMsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCk7CiAKIAlzcGVjLT52bWFzdGVyX25pZCA9IDB4MDI7CiAKQEAgLTE0OTkyLDggKzE1MzU5LDYgQEAKIAlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJGcm9udCBNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIlBDIFNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiUEMgU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAogCXsgfSAvKiBlbmQgKi8KIH07CiAKQEAgLTE1MDE1LDggKzE1MzgwLDYgQEAKIAlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJGcm9udCBNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIlBDIFNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiUEMgU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAogCXsgfSAvKiBlbmQgKi8KIH07CiAKQEAgLTE1OTkyLDU2ICsxNjM1NSw1NSBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBzbmRfcGNpX3F1aXJrIGFsYzY2Ml9jZmdfdGJsW10gPSB7CisJU05EX1BDSV9RVUlSSygweDEwMTksIDB4OTA4NywgIkVDUyIsIEFMQzY2Ml9FQ1MpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEwMDAsICJBU1VTIE41MFZtIiwgQUxDNjYzX0FTVVNfTU9ERTEpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEwOTIsICJBU1VTIE5CIiwgQUxDNjYzX0FTVVNfTU9ERTMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDExYzMsICJBU1VTIE03MFYiLCBBTEM2NjNfQVNVU19NT0RFMyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTFkMywgIkFTVVMgTkIiLCBBTEM2NjNfQVNVU19NT0RFMSksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTFmMywgIkFTVVMgTkIiLCBBTEM2NjJfQVNVU19NT0RFMiksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTIwMywgIkFTVVMgTkIiLCBBTEM2NjNfQVNVU19NT0RFMSksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTMzOSwgIkFTVVMgTkIiLCBBTEM2NjJfQVNVU19NT0RFMiksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTZjMywgIkFTVVMgTkIiLCBBTEM2NjJfQVNVU19NT0RFMiksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTc1MywgIkFTVVMgTkIiLCBBTEM2NjJfQVNVU19NT0RFMiksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTc2MywgIkFTVVMgTkIiLCBBTEM2NjNfQVNVU19NT0RFNiksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTc2NSwgIkFTVVMgTkIiLCBBTEM2NjNfQVNVU19NT0RFNiksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTc4MywgIkFTVVMgTkIiLCBBTEM2NjJfQVNVU19NT0RFMiksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTgxMywgIkFTVVMgTkIiLCBBTEM2NjJfQVNVU19NT0RFMiksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTgyMywgIkFTVVMgTkIiLCBBTEM2NjNfQVNVU19NT0RFNSksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTgzMywgIkFTVVMgTkIiLCBBTEM2NjNfQVNVU19NT0RFNiksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTg0MywgIkFTVVMgTkIiLCBBTEM2NjJfQVNVU19NT0RFMiksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTg2NCwgIkFTVVMgTkIiLCBBTEM2NjJfQVNVU19NT0RFMiksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTg3NiwgIkFTVVMgTkIiLCBBTEM2NjJfQVNVU19NT0RFMiksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTg3OCwgIkFTVVMgTTUxVkEiLCBBTEM2NjNfQVNVU19NNTFWQSksCisJLypTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxODc4LCAiQVNVUyBNNTBWciIsIEFMQzY2M19BU1VTX01PREUxKSwqLworCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE4OTMsICJBU1VTIE01MFZtIiwgQUxDNjYzX0FTVVNfTU9ERTMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE4OTQsICJBU1VTIFg1NSIsIEFMQzY2M19BU1VTX01PREUzKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxOTAzLCAiQVNVUyBGNUdMIiwgQUxDNjYzX0FTVVNfTU9ERTEpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE5MTMsICJBU1VTIE5CIiwgQUxDNjYyX0FTVVNfTU9ERTIpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE5MzMsICJBU1VTIEY4MFEiLCBBTEM2NjJfQVNVU19NT0RFMiksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTk1MywgIkFTVVMgTkIiLCBBTEM2NjNfQVNVU19NT0RFMSksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTk2MywgIkFTVVMgWDcxQyIsIEFMQzY2M19BU1VTX01PREUzKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxOTkzLCAiQVNVUyBOMjAiLCBBTEM2NjNfQVNVU19NT0RFMSksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTlhMywgIkFTVVMgRzUwViIsIEFMQzY2M19BU1VTX0c1MFYpLAorCS8qU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTlhMywgIkFTVVMgTkIiLCBBTEM2NjNfQVNVU19NT0RFMSksKi8KKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxOWIzLCAiQVNVUyBGN1oiLCBBTEM2NjNfQVNVU19NT0RFMSksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTljMywgIkFTVVMgRjVaL0Y2eCIsIEFMQzY2Ml9BU1VTX01PREUyKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxOWUzLCAiQVNVUyBOQiIsIEFMQzY2M19BU1VTX01PREUxKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxOWYzLCAiQVNVUyBOQiIsIEFMQzY2M19BU1VTX01PREU0KSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHg4MjkwLCAiQVNVUyBQNUdDLU1YIiwgQUxDNjYyXzNTVF82Y2hfRElHKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHg4MmExLCAiQVNVUyBFZWVwYyIsIEFMQzY2Ml9BU1VTX0VFRVBDX1A3MDEpLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDgyZDEsICJBU1VTIEVlZXBjIEVQMjAiLCBBTEM2NjJfQVNVU19FRUVQQ19FUDIwKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxOTAzLCAiQVNVUyBGNUdMIiwgQUxDNjYzX0FTVVNfTU9ERTEpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE4NzgsICJBU1VTIE01MFZyIiwgQUxDNjYzX0FTVVNfTU9ERTEpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEwMDAsICJBU1VTIE41MFZtIiwgQUxDNjYzX0FTVVNfTU9ERTEpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE5YjMsICJBU1VTIEY3WiIsIEFMQzY2M19BU1VTX01PREUxKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxOTUzLCAiQVNVUyBOQiIsIEFMQzY2M19BU1VTX01PREUxKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxOWEzLCAiQVNVUyBOQiIsIEFMQzY2M19BU1VTX01PREUxKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMWQzLCAiQVNVUyBOQiIsIEFMQzY2M19BU1VTX01PREUxKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMjAzLCAiQVNVUyBOQiIsIEFMQzY2M19BU1VTX01PREUxKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxOWUzLCAiQVNVUyBOQiIsIEFMQzY2M19BU1VTX01PREUxKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxOTkzLCAiQVNVUyBOMjAiLCBBTEM2NjNfQVNVU19NT0RFMSksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTljMywgIkFTVVMgRjVaL0Y2eCIsIEFMQzY2Ml9BU1VTX01PREUyKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMzM5LCAiQVNVUyBOQiIsIEFMQzY2Ml9BU1VTX01PREUyKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxOTEzLCAiQVNVUyBOQiIsIEFMQzY2Ml9BU1VTX01PREUyKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxODQzLCAiQVNVUyBOQiIsIEFMQzY2Ml9BU1VTX01PREUyKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxODEzLCAiQVNVUyBOQiIsIEFMQzY2Ml9BU1VTX01PREUyKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMWYzLCAiQVNVUyBOQiIsIEFMQzY2Ml9BU1VTX01PREUyKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxODc2LCAiQVNVUyBOQiIsIEFMQzY2Ml9BU1VTX01PREUyKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxODY0LCAiQVNVUyBOQiIsIEFMQzY2Ml9BU1VTX01PREUyKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNzgzLCAiQVNVUyBOQiIsIEFMQzY2Ml9BU1VTX01PREUyKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNzUzLCAiQVNVUyBOQiIsIEFMQzY2Ml9BU1VTX01PREUyKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNmMzLCAiQVNVUyBOQiIsIEFMQzY2Ml9BU1VTX01PREUyKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxOTMzLCAiQVNVUyBGODBRIiwgQUxDNjYyX0FTVVNfTU9ERTIpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE4OTMsICJBU1VTIE01MFZtIiwgQUxDNjYzX0FTVVNfTU9ERTMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDExYzMsICJBU1VTIE03MFYiLCBBTEM2NjNfQVNVU19NT0RFMyksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTk2MywgIkFTVVMgWDcxQyIsIEFMQzY2M19BU1VTX01PREUzKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxODk0LCAiQVNVUyBYNTUiLCBBTEM2NjNfQVNVU19NT0RFMyksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTA5MiwgIkFTVVMgTkIiLCBBTEM2NjNfQVNVU19NT0RFMyksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTlmMywgIkFTVVMgTkIiLCBBTEM2NjNfQVNVU19NT0RFNCksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTgyMywgIkFTVVMgTkIiLCBBTEM2NjNfQVNVU19NT0RFNSksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTgzMywgIkFTVVMgTkIiLCBBTEM2NjNfQVNVU19NT0RFNiksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTc2MywgIkFTVVMgTkIiLCBBTEM2NjNfQVNVU19NT0RFNiksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTc2NSwgIkFTVVMgTkIiLCBBTEM2NjNfQVNVU19NT0RFNiksCisJU05EX1BDSV9RVUlSSygweDEwNWIsIDB4MGNkNiwgIkZveGNvbm4iLCBBTEM2NjJfRUNTKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA1YiwgMHgwZDQ3LCAiRm94Y29ubiA0NUNNWC80NUdNWC80NUNNWC1LIiwKIAkJICAgICAgQUxDNjYyXzNTVF82Y2hfRElHKSwKLQlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgxMDFlLCAiTGVub3ZvIiwgQUxDNjYyX0xFTk9WT18xMDFFKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAxOSwgMHg5MDg3LCAiRUNTIiwgQUxDNjYyX0VDUyksCi0JU05EX1BDSV9RVUlSSygweDEwNWIsIDB4MGNkNiwgIkZveGNvbm4iLCBBTEM2NjJfRUNTKSwKIAlTTkRfUENJX1FVSVJLKDB4MTQ1OCwgMHhhMDAyLCAiR2lnYWJ5dGUgOTQ1R0NNLVMyTCIsCiAJCSAgICAgIEFMQzY2Ml8zU1RfNmNoX0RJRyksCiAJU05EX1BDSV9RVUlSSygweDE1NjUsIDB4ODIwZiwgIkJpb3N0YXIgVEE3ODBHIE0yKyIsIEFMQzY2Ml8zU1RfNmNoX0RJRyksCisJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4MTAxZSwgIkxlbm92byIsIEFMQzY2Ml9MRU5PVk9fMTAxRSksCiAJU05EX1BDSV9RVUlSSygweDE4NDksIDB4MzY2MiwgIkFTUk9DSyBLMTBONzhGdWxsSEQtaFNMSSBSMy4wIiwKIAkJCQkJQUxDNjYyXzNTVF82Y2hfRElHKSwKLQlTTkRfUENJX1FVSVJLKDB4MTg1NCwgMHgyMDAwLCAiQVNVUyBIMTMtMjAwMCIsIEFMQzY2M19BU1VTX0gxMyksCi0JU05EX1BDSV9RVUlSSygweDE4NTQsIDB4MjAwMSwgIkFTVVMgSDEzLTIwMDEiLCBBTEM2NjNfQVNVU19IMTMpLAotCVNORF9QQ0lfUVVJUksoMHgxODU0LCAweDIwMDIsICJBU1VTIEgxMy0yMDAyIiwgQUxDNjYzX0FTVVNfSDEzKSwKKwlTTkRfUENJX1FVSVJLX01BU0soMHgxODU0LCAweGYwMDAsIDB4MjAwMCwgIkFTVVMgSDEzLTIwMHgiLAorCQkJICAgQUxDNjYzX0FTVVNfSDEzKSwKIAl7fQogfTsKIApAQCAtMTYzNjEsNyArMTY3MjMsNyBAQAogCiAJaWYgKGFsYzg4MF9pc19maXhlZF9waW4ocGluKSkgewogCQluaWQgPSBhbGM4ODBfaWR4X3RvX2RhYyhhbGM4ODBfZml4ZWRfcGluX2lkeChwaW4pKTsKLSAgICAgICAgICAgICAgICAvKiBwcmludGsoIkRBQyBuaWQ9JXhcbiIsbmlkKTsgKi8KKwkJLyogcHJpbnRrKEtFUk5fREVCVUcgIkRBQyBuaWQ9JXhcbiIsbmlkKTsgKi8KIAkJLyogc3BlY2lmeSB0aGUgREFDIGFzIHRoZSBleHRyYSBvdXRwdXQgKi8KIAkJaWYgKCFzcGVjLT5tdWx0aW91dC5ocF9uaWQpCiAJCQlzcGVjLT5tdWx0aW91dC5ocF9uaWQgPSBuaWQ7CkBAIC0xNjM5MSwyNiArMTY3NTMsNTggQEAKIAlyZXR1cm4gMDsKIH0KIAorLyogcmV0dXJuIHRoZSBpbmRleCBvZiB0aGUgc3JjIHdpZGdldCBmcm9tIHRoZSBjb25uZWN0aW9uIGxpc3Qgb2YgdGhlIG5pZC4KKyAqIHJldHVybiAtMSBpZiBub3QgZm91bmQKKyAqLworc3RhdGljIGludCBhbGM2NjJfaW5wdXRfcGluX2lkeChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCwKKwkJCQloZGFfbmlkX3Qgc3JjKQoreworCWhkYV9uaWRfdCBjb25uX2xpc3RbSERBX01BWF9DT05ORUNUSU9OU107CisJaW50IGksIGNvbm5zOworCisJY29ubnMgPSBzbmRfaGRhX2dldF9jb25uZWN0aW9ucyhjb2RlYywgbmlkLCBjb25uX2xpc3QsCisJCQkJCUFSUkFZX1NJWkUoY29ubl9saXN0KSk7CisJaWYgKGNvbm5zIDwgMCkKKwkJcmV0dXJuIC0xOworCWZvciAoaSA9IDA7IGkgPCBjb25uczsgaSsrKQorCQlpZiAoY29ubl9saXN0W2ldID09IHNyYykKKwkJCXJldHVybiBpOworCXJldHVybiAtMTsKK30KKworc3RhdGljIGludCBhbGM2NjJfaXNfaW5wdXRfcGluKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkKQoreworCXVuc2lnbmVkIGludCBwaW5jYXAgPSBzbmRfaGRhX3F1ZXJ5X3Bpbl9jYXBzKGNvZGVjLCBuaWQpOworCXJldHVybiAocGluY2FwICYgQUNfUElOQ0FQX0lOKSAhPSAwOworfQorCiAvKiBjcmVhdGUgcGxheWJhY2svY2FwdHVyZSBjb250cm9scyBmb3IgaW5wdXQgcGlucyAqLwotc3RhdGljIGludCBhbGM2NjJfYXV0b19jcmVhdGVfYW5hbG9nX2lucHV0X2N0bHMoc3RydWN0IGFsY19zcGVjICpzcGVjLAorc3RhdGljIGludCBhbGM2NjJfYXV0b19jcmVhdGVfYW5hbG9nX2lucHV0X2N0bHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCiAJCQkJCQljb25zdCBzdHJ1Y3QgYXV0b19waW5fY2ZnICpjZmcpCiB7Ci0Jc3RydWN0IGhkYV9pbnB1dF9tdXggKmltdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4OworCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCXN0cnVjdCBoZGFfaW5wdXRfbXV4ICppbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eFswXTsKIAlpbnQgaSwgZXJyLCBpZHg7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVVUT19QSU5fTEFTVDsgaSsrKSB7Ci0JCWlmIChhbGM4ODBfaXNfaW5wdXRfcGluKGNmZy0+aW5wdXRfcGluc1tpXSkpIHsKLQkJCWlkeCA9IGFsYzg4MF9pbnB1dF9waW5faWR4KGNmZy0+aW5wdXRfcGluc1tpXSk7Ci0JCQllcnIgPSBuZXdfYW5hbG9nX2lucHV0KHNwZWMsIGNmZy0+aW5wdXRfcGluc1tpXSwKLQkJCQkJICAgICAgIGF1dG9fcGluX2NmZ19sYWJlbHNbaV0sCi0JCQkJCSAgICAgICBpZHgsIDB4MGIpOwotCQkJaWYgKGVyciA8IDApCi0JCQkJcmV0dXJuIGVycjsKLQkJCWltdXgtPml0ZW1zW2ltdXgtPm51bV9pdGVtc10ubGFiZWwgPQotCQkJCWF1dG9fcGluX2NmZ19sYWJlbHNbaV07Ci0JCQlpbXV4LT5pdGVtc1tpbXV4LT5udW1faXRlbXNdLmluZGV4ID0KLQkJCQlhbGM4ODBfaW5wdXRfcGluX2lkeChjZmctPmlucHV0X3BpbnNbaV0pOwotCQkJaW11eC0+bnVtX2l0ZW1zKys7CisJCWlmIChhbGM2NjJfaXNfaW5wdXRfcGluKGNvZGVjLCBjZmctPmlucHV0X3BpbnNbaV0pKSB7CisJCQlpZHggPSBhbGM2NjJfaW5wdXRfcGluX2lkeChjb2RlYywgMHgwYiwKKwkJCQkJCSAgIGNmZy0+aW5wdXRfcGluc1tpXSk7CisJCQlpZiAoaWR4ID49IDApIHsKKwkJCQllcnIgPSBuZXdfYW5hbG9nX2lucHV0KHNwZWMsIGNmZy0+aW5wdXRfcGluc1tpXSwKKwkJCQkJCSAgICAgICBhdXRvX3Bpbl9jZmdfbGFiZWxzW2ldLAorCQkJCQkJICAgICAgIGlkeCwgMHgwYik7CisJCQkJaWYgKGVyciA8IDApCisJCQkJCXJldHVybiBlcnI7CisJCQl9CisJCQlpZHggPSBhbGM2NjJfaW5wdXRfcGluX2lkeChjb2RlYywgMHgyMiwKKwkJCQkJCSAgIGNmZy0+aW5wdXRfcGluc1tpXSk7CisJCQlpZiAoaWR4ID49IDApIHsKKwkJCQlpbXV4LT5pdGVtc1tpbXV4LT5udW1faXRlbXNdLmxhYmVsID0KKwkJCQkJYXV0b19waW5fY2ZnX2xhYmVsc1tpXTsKKwkJCQlpbXV4LT5pdGVtc1tpbXV4LT5udW1faXRlbXNdLmluZGV4ID0gaWR4OworCQkJCWltdXgtPm51bV9pdGVtcysrOworCQkJfQogCQl9CiAJfQogCXJldHVybiAwOwpAQCAtMTY0NjAsNyArMTY4NTQsNiBAQAogCQlhbGM2NjJfYXV0b19zZXRfb3V0cHV0X2FuZF91bm11dGUoY29kZWMsIHBpbiwgUElOX09VVCwgMCk7CiB9CiAKLSNkZWZpbmUgYWxjNjYyX2lzX2lucHV0X3BpbihuaWQpCWFsYzg4MF9pc19pbnB1dF9waW4obmlkKQogI2RlZmluZSBBTEM2NjJfUElOX0NEX05JRAkJQUxDODgwX1BJTl9DRF9OSUQKIAogc3RhdGljIHZvaWQgYWxjNjYyX2F1dG9faW5pdF9hbmFsb2dfaW5wdXQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCkBAIC0xNjQ3MCwxMiArMTY4NjMsMTAgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBBVVRPX1BJTl9MQVNUOyBpKyspIHsKIAkJaGRhX25pZF90IG5pZCA9IHNwZWMtPmF1dG9jZmcuaW5wdXRfcGluc1tpXTsKLQkJaWYgKGFsYzY2Ml9pc19pbnB1dF9waW4obmlkKSkgewotCQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLAotCQkJCQkgICAgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLAotCQkJCQkgICAgKGkgPD0gQVVUT19QSU5fRlJPTlRfTUlDID8KLQkJCQkJICAgICBQSU5fVlJFRjgwIDogUElOX0lOKSk7Ci0JCQlpZiAobmlkICE9IEFMQzY2Ml9QSU5fQ0RfTklEKQorCQlpZiAoYWxjNjYyX2lzX2lucHV0X3Bpbihjb2RlYywgbmlkKSkgeworCQkJYWxjX3NldF9pbnB1dF9waW4oY29kZWMsIG5pZCwgaSk7CisJCQlpZiAobmlkICE9IEFMQzY2Ml9QSU5fQ0RfTklEICYmCisJCQkgICAgKGdldF93Y2Fwcyhjb2RlYywgbmlkKSAmIEFDX1dDQVBfT1VUX0FNUCkpCiAJCQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLAogCQkJCQkJICAgIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsCiAJCQkJCQkgICAgQU1QX09VVF9NVVRFKTsKQEAgLTE2NTEzLDIwICsxNjkwNCwyMCBAQAogCQkJCQkgICAiSGVhZHBob25lIik7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7Ci0JZXJyID0gYWxjNjYyX2F1dG9fY3JlYXRlX2FuYWxvZ19pbnB1dF9jdGxzKHNwZWMsICZzcGVjLT5hdXRvY2ZnKTsKKwllcnIgPSBhbGM2NjJfYXV0b19jcmVhdGVfYW5hbG9nX2lucHV0X2N0bHMoY29kZWMsICZzcGVjLT5hdXRvY2ZnKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAogCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IHNwZWMtPm11bHRpb3V0Lm51bV9kYWNzICogMjsKIAotCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRfcGluKQorCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRzKQogCQlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IEFMQzg4MF9ESUdPVVRfTklEOwogCiAJaWYgKHNwZWMtPmtjdGxzLmxpc3QpCiAJCWFkZF9taXhlcihzcGVjLCBzcGVjLT5rY3Rscy5saXN0KTsKIAogCXNwZWMtPm51bV9tdXhfZGVmcyA9IDE7Ci0Jc3BlYy0+aW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eDsKKwlzcGVjLT5pbnB1dF9tdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4WzBdOwogCiAJYWRkX3ZlcmIoc3BlYywgYWxjNjYyX2F1dG9faW5pdF92ZXJicyk7CiAJaWYgKGNvZGVjLT52ZW5kb3JfaWQgPT0gMHgxMGVjMDY2MykKQEAgLTE2NTM2LDcgKzE2OTI3LDYgQEAKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAotCXN0b3JlX3Bpbl9jb25maWdzKGNvZGVjKTsKIAlyZXR1cm4gMTsKIH0KIApAQCAtMTY1ODgsNiArMTY5NzgsMTIgQEAKIAkJfQogCX0KIAorCWVyciA9IHNuZF9oZGFfYXR0YWNoX2JlZXBfZGV2aWNlKGNvZGVjLCAweDEpOworCWlmIChlcnIgPCAwKSB7CisJCWFsY19mcmVlKGNvZGVjKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKIAlpZiAoYm9hcmRfY29uZmlnICE9IEFMQzY2Ml9BVVRPKQogCQlzZXR1cF9wcmVzZXQoc3BlYywgJmFsYzY2Ml9wcmVzZXRzW2JvYXJkX2NvbmZpZ10pOwogCkBAIC0xNjYxMSwxMCArMTcwMDcsMTQgQEAKIAlzcGVjLT5hZGNfbmlkcyA9IGFsYzY2Ml9hZGNfbmlkczsKIAlzcGVjLT5udW1fYWRjX25pZHMgPSBBUlJBWV9TSVpFKGFsYzY2Ml9hZGNfbmlkcyk7CiAJc3BlYy0+Y2Fwc3JjX25pZHMgPSBhbGM2NjJfY2Fwc3JjX25pZHM7Ci0Jc3BlYy0+aXNfbWl4X2NhcHR1cmUgPSAxOworCXNwZWMtPmNhcHR1cmVfc3R5bGUgPSBDQVBUX01JWDsKIAogCWlmICghc3BlYy0+Y2FwX21peGVyKQogCQlzZXRfY2FwdHVyZV9taXhlcihzcGVjKTsKKwlpZiAoY29kZWMtPnZlbmRvcl9pZCA9PSAweDEwZWMwNjYyKQorCQlzZXRfYmVlcF9hbXAoc3BlYywgMHgwYiwgMHgwNSwgSERBX0lOUFVUKTsKKwllbHNlCisJCXNldF9iZWVwX2FtcChzcGVjLCAweDBiLCAweDA0LCBIREFfSU5QVVQpOwogCiAJc3BlYy0+dm1hc3Rlcl9uaWQgPSAweDAyOwogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpZ21hdGVsLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpZ21hdGVsLmMKaW5kZXggNjA5NDM0NC4uYjVlMTA4YSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9zaWdtYXRlbC5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2lnbWF0ZWwuYwpAQCAtNDMsNiArNDMsNyBAQAogfTsKIAogZW51bSB7CisJU1RBQ19BVVRPLAogCVNUQUNfUkVGLAogCVNUQUNfOTIwMF9PUU8sCiAJU1RBQ185MjAwX0RFTExfRDIxLApAQCAtNjIsMTQgKzYzLDE3IEBACiB9OwogCiBlbnVtIHsKKwlTVEFDXzkyMDVfQVVUTywKIAlTVEFDXzkyMDVfUkVGLAogCVNUQUNfOTIwNV9ERUxMX000MiwKIAlTVEFDXzkyMDVfREVMTF9NNDMsCiAJU1RBQ185MjA1X0RFTExfTTQ0LAorCVNUQUNfOTIwNV9FQVBELAogCVNUQUNfOTIwNV9NT0RFTFMKIH07CiAKIGVudW0geworCVNUQUNfOTJIRDczWFhfQVVUTywKIAlTVEFDXzkySEQ3M1hYX05PX0pELCAvKiBubyBqYWNrLWRldGVjdGlvbiAqLwogCVNUQUNfOTJIRDczWFhfUkVGLAogCVNUQUNfREVMTF9NNl9BTUlDLApAQCAtODAsMjIgKzg0LDI3IEBACiB9OwogCiBlbnVtIHsKKwlTVEFDXzkySEQ4M1hYWF9BVVRPLAogCVNUQUNfOTJIRDgzWFhYX1JFRiwKIAlTVEFDXzkySEQ4M1hYWF9QV1JfUkVGLAorCVNUQUNfREVMTF9TMTQsCiAJU1RBQ185MkhEODNYWFhfTU9ERUxTCiB9OwogCiBlbnVtIHsKKwlTVEFDXzkySEQ3MUJYWF9BVVRPLAogCVNUQUNfOTJIRDcxQlhYX1JFRiwKIAlTVEFDX0RFTExfTTRfMSwKIAlTVEFDX0RFTExfTTRfMiwKIAlTVEFDX0RFTExfTTRfMywKIAlTVEFDX0hQX000LAogCVNUQUNfSFBfRFY1LAorCVNUQUNfSFBfSERYLAogCVNUQUNfOTJIRDcxQlhYX01PREVMUwogfTsKIAogZW51bSB7CisJU1RBQ185MjV4X0FVVE8sCiAJU1RBQ185MjV4X1JFRiwKIAlTVEFDX00xLAogCVNUQUNfTTFfMiwKQEAgLTEwOCw2ICsxMTcsNyBAQAogfTsKIAogZW51bSB7CisJU1RBQ185MjJYX0FVVE8sCiAJU1RBQ19EOTQ1X1JFRiwKIAlTVEFDX0Q5NDVHVFAzLAogCVNUQUNfRDk0NUdUUDUsCkBAIC0xMzUsNiArMTQ1LDcgQEAKIH07CiAKIGVudW0geworCVNUQUNfOTI3WF9BVVRPLAogCVNUQUNfRDk2NV9SRUZfTk9fSkQsIC8qIG5vIGphY2stZGV0ZWN0aW9uICovCiAJU1RBQ19EOTY1X1JFRiwKIAlTVEFDX0Q5NjVfM1NULApAQCAtMTQ0LDYgKzE1NSwxMiBAQAogCVNUQUNfOTI3WF9NT0RFTFMKIH07CiAKK2VudW0geworCVNUQUNfOTg3Ml9BVVRPLAorCVNUQUNfOTg3Ml9WQUlPLAorCVNUQUNfOTg3Ml9NT0RFTFMKK307CisKIHN0cnVjdCBzaWdtYXRlbF9ldmVudCB7CiAJaGRhX25pZF90IG5pZDsKIAl1bnNpZ25lZCBjaGFyIHR5cGU7CkBAIC0xNjcsNiArMTg0LDcgQEAKIAl1bnNpZ25lZCBpbnQgYWx0X3N3aXRjaDogMTsKIAl1bnNpZ25lZCBpbnQgaHBfZGV0ZWN0OiAxOwogCXVuc2lnbmVkIGludCBzcGRpZl9tdXRlOiAxOworCXVuc2lnbmVkIGludCBjaGVja192b2x1bWVfb2Zmc2V0OjE7CiAKIAkvKiBncGlvIGxpbmVzICovCiAJdW5zaWduZWQgaW50IGVhcGRfbWFzazsKQEAgLTE3OSw2ICsxOTcsNyBAQAogCXVuc2lnbmVkIGludCBzdHJlYW1fZGVsYXk7CiAKIAkvKiBhbmFsb2cgbG9vcGJhY2sgKi8KKwlzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqYWxvb3BiYWNrX2N0bDsKIAl1bnNpZ25lZCBjaGFyIGFsb29wYmFja19tYXNrOwogCXVuc2lnbmVkIGNoYXIgYWxvb3BiYWNrX3NoaWZ0OwogCkBAIC0yMDMsNiArMjIyLDggQEAKIAloZGFfbmlkX3QgaHBfZGFjc1s1XTsKIAloZGFfbmlkX3Qgc3BlYWtlcl9kYWNzWzVdOwogCisJaW50IHZvbHVtZV9vZmZzZXQ7CisKIAkvKiBjYXB0dXJlICovCiAJaGRhX25pZF90ICphZGNfbmlkczsKIAl1bnNpZ25lZCBpbnQgbnVtX2FkY3M7CkBAIC0yMjQsNyArMjQ1LDYgQEAKIAkvKiBwaW4gd2lkZ2V0cyAqLwogCWhkYV9uaWRfdCAqcGluX25pZHM7CiAJdW5zaWduZWQgaW50IG51bV9waW5zOwotCXVuc2lnbmVkIGludCAqcGluX2NvbmZpZ3M7CiAKIAkvKiBjb2RlYyBzcGVjaWZpYyBzdHVmZiAqLwogCXN0cnVjdCBoZGFfdmVyYiAqaW5pdDsKQEAgLTQwMCw2ICs0MjAsMTAgQEAKICAgICAgICAgMHgxMiwgMHgxMywKIH07CiAKK3N0YXRpYyBoZGFfbmlkX3Qgc3RhYzkyN3hfc2xhdmVfZGlnX291dHNbMl0gPSB7CisJMHgxZiwgMCwKK307CisKIHN0YXRpYyBoZGFfbmlkX3Qgc3RhYzkyN3hfYWRjX25pZHNbM10gPSB7CiAgICAgICAgIDB4MDcsIDB4MDgsIDB4MDkKIH07CkBAIC00NzIsMTUgKzQ5NiwyMSBAQAogCTB4MTQsIDB4MjIsIDB4MjMKIH07CiAKLXN0YXRpYyBoZGFfbmlkX3Qgc3RhYzkyaGQ4M3h4eF9waW5fbmlkc1sxNF0gPSB7CitzdGF0aWMgaGRhX25pZF90IHN0YWM5MmhkODN4eHhfcGluX25pZHNbMTBdID0gewogCTB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4MGUsCi0JMHgwZiwgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMywKLQkweDFkLCAweDFlLCAweDFmLCAweDIwCisJMHgwZiwgMHgxMCwgMHgxMSwgMHgxZiwgMHgyMCwKIH07Ci1zdGF0aWMgaGRhX25pZF90IHN0YWM5MmhkNzFieHhfcGluX25pZHNbMTFdID0geworCisjZGVmaW5lIFNUQUM5MkhENzFCWFhfTlVNX1BJTlMgMTMKK3N0YXRpYyBoZGFfbmlkX3Qgc3RhYzkyaGQ3MWJ4eF9waW5fbmlkc180cG9ydFtTVEFDOTJIRDcxQlhYX05VTV9QSU5TXSA9IHsKKwkweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDAwLAorCTB4MDAsIDB4MTQsIDB4MTgsIDB4MTksIDB4MWUsCisJMHgxZiwgMHgyMCwgMHgyNworfTsKK3N0YXRpYyBoZGFfbmlkX3Qgc3RhYzkyaGQ3MWJ4eF9waW5fbmlkc182cG9ydFtTVEFDOTJIRDcxQlhYX05VTV9QSU5TXSA9IHsKIAkweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDBlLAogCTB4MGYsIDB4MTQsIDB4MTgsIDB4MTksIDB4MWUsCi0JMHgxZiwKKwkweDFmLCAweDIwLCAweDI3CiB9OwogCiBzdGF0aWMgaGRhX25pZF90IHN0YWM5Mjd4X3Bpbl9uaWRzWzE0XSA9IHsKQEAgLTg0Miw5ICs4NzIsOSBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBzdGFjOTJoZDgzeHh4X2NvcmVfaW5pdFtdID0gewotCXsgMHhhLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwfSwKLQl7IDB4YiwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MH0sCi0JeyAweGQsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDF9LAorCXsgMHhhLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgxfSwKKwl7IDB4YiwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MX0sCisJeyAweGQsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDB9LAogCiAJLyogcG93ZXIgc3RhdGUgY29udHJvbHMgYW1wcyAqLwogCXsgMHgwMSwgQUNfVkVSQl9TRVRfRUFQRCwgMSA8PCAyfSwKQEAgLTg1NCwyNiArODg0LDI1IEBACiBzdGF0aWMgc3RydWN0IGhkYV92ZXJiIHN0YWM5MmhkNzFieHhfY29yZV9pbml0W10gPSB7CiAJLyogc2V0IG1hc3RlciB2b2x1bWUgYW5kIGRpcmVjdCBjb250cm9sICovCiAJeyAweDI4LCBBQ19WRVJCX1NFVF9WT0xVTUVfS05PQl9DT05UUk9MLCAweGZmfSwKLQkvKiB1bm11dGUgcmlnaHQgYW5kIGxlZnQgY2hhbm5lbHMgZm9yIG5vZGVzIDB4MGEsIDB4ZCwgMHgwZiAqLwotCXsgMHgwYSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCi0JeyAweDBkLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKLQl7IDB4MGYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAogCXt9CiB9OwogCi0jZGVmaW5lIEhEX0RJU0FCTEVfUE9SVEYgMgorI2RlZmluZSBIRF9ESVNBQkxFX1BPUlRGIDEKIHN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgc3RhYzkyaGQ3MWJ4eF9hbmFsb2dfY29yZV9pbml0W10gPSB7CiAJLyogc3RhcnQgb2YgY29uZmlnICMxICovCiAKIAkvKiBjb25uZWN0IHBvcnQgMGYgdG8gYXVkaW8gbWl4ZXIgKi8KIAl7IDB4MGYsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDJ9LAotCS8qIHVubXV0ZSByaWdodCBhbmQgbGVmdCBjaGFubmVscyBmb3Igbm9kZSAweDBmICovCi0JeyAweDBmLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKIAkvKiBzdGFydCBvZiBjb25maWcgIzIgKi8KIAogCS8qIHNldCBtYXN0ZXIgdm9sdW1lIGFuZCBkaXJlY3QgY29udHJvbCAqLwogCXsgMHgyOCwgQUNfVkVSQl9TRVRfVk9MVU1FX0tOT0JfQ09OVFJPTCwgMHhmZn0sCi0JLyogdW5tdXRlIHJpZ2h0IGFuZCBsZWZ0IGNoYW5uZWxzIGZvciBub2RlcyAweDBhLCAweGQgKi8KKwl7fQorfTsKKworc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBzdGFjOTJoZDcxYnh4X3VubXV0ZV9jb3JlX2luaXRbXSA9IHsKKwkvKiB1bm11dGUgcmlnaHQgYW5kIGxlZnQgY2hhbm5lbHMgZm9yIG5vZGVzIDB4MGYsIDB4YSwgMHgwZCAqLworCXsgMHgwZiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCiAJeyAweDBhLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKIAl7IDB4MGQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAogCXt9CkBAIC05NTQsMTYgKzk4Myw2IEBACiAJCS5wcml2YXRlX3ZhbHVlID0gSERBX0NPTVBPU0VfQU1QX1ZBTChuaWQsIGNocywgaWR4LCBkaXIpIFwKIAl9CiAKLSNkZWZpbmUgU1RBQ19JTlBVVF9TT1VSQ0UoY250KSBcCi0JeyBcCi0JCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLCBcCi0JCS5uYW1lID0gIklucHV0IFNvdXJjZSIsIFwKLQkJLmNvdW50ID0gY250LCBcCi0JCS5pbmZvID0gc3RhYzkyeHhfbXV4X2VudW1faW5mbywgXAotCQkuZ2V0ID0gc3RhYzkyeHhfbXV4X2VudW1fZ2V0LCBcCi0JCS5wdXQgPSBzdGFjOTJ4eF9tdXhfZW51bV9wdXQsIFwKLQl9Ci0KICNkZWZpbmUgU1RBQ19BTkFMT0dfTE9PUEJBQ0sodmVyYl9yZWFkLCB2ZXJiX3dyaXRlLCBjbnQpIFwKIAl7IFwKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIFwKQEAgLTk3OCw3ICs5OTcsNiBAQAogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHN0YWM5MjAwX21peGVyW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIsIDB4YiwgMCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEUoIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLCAweGIsIDAsIEhEQV9PVVRQVVQpLAotCVNUQUNfSU5QVVRfU09VUkNFKDEpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgwYSwgMCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEUoIkNhcHR1cmUgU3dpdGNoIiwgMHgwYSwgMCwgSERBX09VVFBVVCksCiAJeyB9IC8qIGVuZCAqLwpAQCAtMTAwMyw4ICsxMDIxLDYgQEAKIAlIREFfQ09ERUNfVk9MVU1FKCJEQUMgTWl4ZXIgQ2FwdHVyZSBWb2x1bWUiLCAweDFkLCAweDMsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkRBQyBNaXhlciBDYXB0dXJlIFN3aXRjaCIsIDB4MWQsIDB4MywgSERBX0lOUFVUKSwKIAotCVNUQUNfQU5BTE9HX0xPT1BCQUNLKDB4RkEwLCAweDdBMSwgMyksCi0KIAlIREFfQ09ERUNfVk9MVU1FX0lEWCgiQ2FwdHVyZSBWb2x1bWUiLCAweDAsIDB4MjAsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEVfSURYKCJDYXB0dXJlIFN3aXRjaCIsIDB4MCwgMHgyMCwgMHgwLCBIREFfT1VUUFVUKSwKIApAQCAtMTAxNCw5ICsxMDMwLDIyIEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHN0YWM5MmhkNzN4eF84Y2hfbWl4ZXJbXSA9IHsKLQlTVEFDX0FOQUxPR19MT09QQkFDSygweEZBMCwgMHg3QTEsIDQpLAorc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHN0YWM5MmhkNzN4eF82Y2hfbG9vcGJhY2tbXSA9IHsKKwlTVEFDX0FOQUxPR19MT09QQkFDSygweEZBMCwgMHg3QTEsIDMpLAorCXt9Cit9OwogCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc3RhYzkyaGQ3M3h4XzhjaF9sb29wYmFja1tdID0geworCVNUQUNfQU5BTE9HX0xPT1BCQUNLKDB4RkEwLCAweDdBMSwgNCksCisJe30KK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzdGFjOTJoZDczeHhfMTBjaF9sb29wYmFja1tdID0geworCVNUQUNfQU5BTE9HX0xPT1BCQUNLKDB4RkEwLCAweDdBMSwgNSksCisJe30KK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzdGFjOTJoZDczeHhfOGNoX21peGVyW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRV9JRFgoIkNhcHR1cmUgVm9sdW1lIiwgMHgwLCAweDIwLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFX0lEWCgiQ2FwdHVyZSBTd2l0Y2giLCAweDAsIDB4MjAsIDB4MCwgSERBX09VVFBVVCksCiAKQEAgLTEwNDEsOCArMTA3MCw2IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc3RhYzkyaGQ3M3h4XzEwY2hfbWl4ZXJbXSA9IHsKLQlTVEFDX0FOQUxPR19MT09QQkFDSygweEZBMCwgMHg3QTEsIDUpLAotCiAJSERBX0NPREVDX1ZPTFVNRV9JRFgoIkNhcHR1cmUgVm9sdW1lIiwgMHgwLCAweDIwLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFX0lEWCgiQ2FwdHVyZSBTd2l0Y2giLCAweDAsIDB4MjAsIDB4MCwgSERBX09VVFBVVCksCiAKQEAgLTEwOTQsOSArMTEyMSw2IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc3RhYzkyaGQ3MWJ4eF9hbmFsb2dfbWl4ZXJbXSA9IHsKLQlTVEFDX0lOUFVUX1NPVVJDRSgyKSwKLQlTVEFDX0FOQUxPR19MT09QQkFDSygweEZBMCwgMHg3QTAsIDIpLAotCiAJSERBX0NPREVDX1ZPTFVNRV9JRFgoIkNhcHR1cmUgVm9sdW1lIiwgMHgwLCAweDFjLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFX0lEWCgiQ2FwdHVyZSBTd2l0Y2giLCAweDAsIDB4MWMsIDB4MCwgSERBX09VVFBVVCksCiAKQEAgLTExMjIsMTAgKzExNDYsMTEgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc3RhYzkyaGQ3MWJ4eF9taXhlcltdID0gewotCVNUQUNfSU5QVVRfU09VUkNFKDIpLAotCVNUQUNfQU5BTE9HX0xPT1BCQUNLKDB4RkEwLCAweDdBMCwgMiksCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc3RhYzkyaGQ3MWJ4eF9sb29wYmFja1tdID0geworCVNUQUNfQU5BTE9HX0xPT1BCQUNLKDB4RkEwLCAweDdBMCwgMikKK307CiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzdGFjOTJoZDcxYnh4X21peGVyW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRV9JRFgoIkNhcHR1cmUgVm9sdW1lIiwgMHgwLCAweDFjLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFX0lEWCgiQ2FwdHVyZSBTd2l0Y2giLCAweDAsIDB4MWMsIDB4MCwgSERBX09VVFBVVCksCiAKQEAgLTExMzcsMTYgKzExNjIsMTIgQEAKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzdGFjOTI1eF9taXhlcltdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLCAweDBlLCAwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsIDB4MGUsIDAsIEhEQV9PVVRQVVQpLAotCVNUQUNfSU5QVVRfU09VUkNFKDEpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgwOSwgMCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEUoIkNhcHR1cmUgU3dpdGNoIiwgMHgxNCwgMCwgSERBX09VVFBVVCksCiAJeyB9IC8qIGVuZCAqLwogfTsKIAogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHN0YWM5MjA1X21peGVyW10gPSB7Ci0JU1RBQ19JTlBVVF9TT1VSQ0UoMiksCi0JU1RBQ19BTkFMT0dfTE9PUEJBQ0soMHhGRTAsIDB4N0UwLCAxKSwKLQogCUhEQV9DT0RFQ19WT0xVTUVfSURYKCJDYXB0dXJlIFZvbHVtZSIsIDB4MCwgMHgxYiwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFX0lEWCgiQ2FwdHVyZSBTd2l0Y2giLCAweDAsIDB4MWQsIDB4MCwgSERBX09VVFBVVCksCiAKQEAgLTExNTUsOSArMTE3NiwxMyBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzdGFjOTIwNV9sb29wYmFja1tdID0geworCVNUQUNfQU5BTE9HX0xPT1BCQUNLKDB4RkUwLCAweDdFMCwgMSksCisJe30KK307CisKIC8qIFRoaXMgbmVlZHMgdG8gYmUgZ2VuZXJhdGVkIGR5bmFtaWNhbGx5IGJhc2VkIG9uIHNlcXVlbmNlICovCiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc3RhYzkyMnhfbWl4ZXJbXSA9IHsKLQlTVEFDX0lOUFVUX1NPVVJDRSgyKSwKIAlIREFfQ09ERUNfVk9MVU1FX0lEWCgiQ2FwdHVyZSBWb2x1bWUiLCAweDAsIDB4MTcsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURV9JRFgoIkNhcHR1cmUgU3dpdGNoIiwgMHgwLCAweDE3LCAweDAsIEhEQV9JTlBVVCksCiAKQEAgLTExNjgsOSArMTE5Myw2IEBACiAKIAogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHN0YWM5Mjd4X21peGVyW10gPSB7Ci0JU1RBQ19JTlBVVF9TT1VSQ0UoMyksCi0JU1RBQ19BTkFMT0dfTE9PUEJBQ0soMHhGRUIsIDB4N0VCLCAxKSwKLQogCUhEQV9DT0RFQ19WT0xVTUVfSURYKCJDYXB0dXJlIFZvbHVtZSIsIDB4MCwgMHgxOCwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFX0lEWCgiQ2FwdHVyZSBTd2l0Y2giLCAweDAsIDB4MWIsIDB4MCwgSERBX09VVFBVVCksCiAKQEAgLTExODIsNiArMTIwNCwxMSBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzdGFjOTI3eF9sb29wYmFja1tdID0geworCVNUQUNfQU5BTE9HX0xPT1BCQUNLKDB4RkVCLCAweDdFQiwgMSksCisJe30KK307CisKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzdGFjX2RtdXhfbWl4ZXIgPSB7CiAJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCiAJLm5hbWUgPSAiRGlnaXRhbCBJbnB1dCBTb3VyY2UiLApAQCAtMTIwNywxMCArMTIzNCw3IEBACiAJIkxGRSBQbGF5YmFjayBWb2x1bWUiLAogCSJTaWRlIFBsYXliYWNrIFZvbHVtZSIsCiAJIkhlYWRwaG9uZSBQbGF5YmFjayBWb2x1bWUiLAotCSJIZWFkcGhvbmUyIFBsYXliYWNrIFZvbHVtZSIsCiAJIlNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwKLQkiRXh0ZXJuYWwgU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLAotCSJTcGVha2VyMiBQbGF5YmFjayBWb2x1bWUiLAogCU5VTEwKIH07CiAKQEAgLTEyMjEsMTAgKzEyNDUsNyBAQAogCSJMRkUgUGxheWJhY2sgU3dpdGNoIiwKIAkiU2lkZSBQbGF5YmFjayBTd2l0Y2giLAogCSJIZWFkcGhvbmUgUGxheWJhY2sgU3dpdGNoIiwKLQkiSGVhZHBob25lMiBQbGF5YmFjayBTd2l0Y2giLAogCSJTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsCi0JIkV4dGVybmFsIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwKLQkiU3BlYWtlcjIgUGxheWJhY2sgU3dpdGNoIiwKIAkiSUVDOTU4IFBsYXliYWNrIFN3aXRjaCIsCiAJTlVMTAogfTsKQEAgLTEyOTQsNiArMTMxNSw4IEBACiAJCXVuc2lnbmVkIGludCB2bWFzdGVyX3Rsdls0XTsKIAkJc25kX2hkYV9zZXRfdm1hc3Rlcl90bHYoY29kZWMsIHNwZWMtPm11bHRpb3V0LmRhY19uaWRzWzBdLAogCQkJCQlIREFfT1VUUFVULCB2bWFzdGVyX3Rsdik7CisJCS8qIGNvcnJlY3Qgdm9sdW1lIG9mZnNldCAqLworCQl2bWFzdGVyX3RsdlsyXSArPSB2bWFzdGVyX3RsdlszXSAqIHNwZWMtPnZvbHVtZV9vZmZzZXQ7CiAJCWVyciA9IHNuZF9oZGFfYWRkX3ZtYXN0ZXIoY29kZWMsICJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwKIAkJCQkJICB2bWFzdGVyX3Rsdiwgc2xhdmVfdm9scyk7CiAJCWlmIChlcnIgPCAwKQpAQCAtMTMwNiw2ICsxMzI5LDEzIEBACiAJCQlyZXR1cm4gZXJyOwogCX0KIAorCWlmIChzcGVjLT5hbG9vcGJhY2tfY3RsICYmCisJICAgIHNuZF9oZGFfZ2V0X2Jvb2xfaGludChjb2RlYywgImxvb3BiYWNrIikgPT0gMSkgeworCQllcnIgPSBzbmRfaGRhX2FkZF9uZXdfY3Rscyhjb2RlYywgc3BlYy0+YWxvb3BiYWNrX2N0bCk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwl9CisKIAlzdGFjOTJ4eF9mcmVlX2tjdGxzKGNvZGVjKTsgLyogbm8gbG9uZ2VyIG5lZWRlZCAqLwogCiAJLyogY3JlYXRlIGphY2sgaW5wdXQgZWxlbWVudHMgKi8KQEAgLTE0OTAsNiArMTUyMCw3IEBACiB9OwogCiBzdGF0aWMgY29uc3QgY2hhciAqc3RhYzkyMDBfbW9kZWxzW1NUQUNfOTIwMF9NT0RFTFNdID0geworCVtTVEFDX0FVVE9dID0gImF1dG8iLAogCVtTVEFDX1JFRl0gPSAicmVmIiwKIAlbU1RBQ185MjAwX09RT10gPSAib3FvIiwKIAlbU1RBQ185MjAwX0RFTExfRDIxXSA9ICJkZWxsLWQyMSIsCkBAIC0xNTExLDYgKzE1NDIsOCBAQAogCS8qIFNpZ21hVGVsIHJlZmVyZW5jZSBib2FyZCAqLwogCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyNjY4LAogCQkgICAgICAiREZJIExhblBhcnR5IiwgU1RBQ19SRUYpLAorCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9ERkksIDB4MzEwMSwKKwkJICAgICAgIkRGSSBMYW5QYXJ0eSIsIFNUQUNfUkVGKSwKIAkvKiBEZWxsIGxhcHRvcHMgaGF2ZSBCSU9TIHByb2JsZW0gKi8KIAlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfREVMTCwgMHgwMWE4LAogCQkgICAgICAidW5rbm93biBEZWxsIiwgU1RBQ185MjAwX0RFTExfRDIxKSwKQEAgLTE2MzMsNiArMTY2Niw3IEBACiB9OwogCiBzdGF0aWMgY29uc3QgY2hhciAqc3RhYzkyNXhfbW9kZWxzW1NUQUNfOTI1eF9NT0RFTFNdID0geworCVtTVEFDXzkyNXhfQVVUT10gPSAiYXV0byIsCiAJW1NUQUNfUkVGXSA9ICJyZWYiLAogCVtTVEFDX00xXSA9ICJtMSIsCiAJW1NUQUNfTTFfMl0gPSAibTEtMiIsCkBAIC0xNjYwLDYgKzE2OTQsNyBAQAogc3RhdGljIHN0cnVjdCBzbmRfcGNpX3F1aXJrIHN0YWM5MjV4X2NmZ190YmxbXSA9IHsKIAkvKiBTaWdtYVRlbCByZWZlcmVuY2UgYm9hcmQgKi8KIAlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MjY2OCwgIkRGSSBMYW5QYXJ0eSIsIFNUQUNfUkVGKSwKKwlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfREZJLCAweDMxMDEsICJERkkgTGFuUGFydHkiLCBTVEFDX1JFRiksCiAJU05EX1BDSV9RVUlSSygweDgzODQsIDB4NzYzMiwgIlN0YWM5MjAyIFJlZmVyZW5jZSBCb2FyZCIsIFNUQUNfUkVGKSwKIAogCS8qIERlZmF1bHQgdGFibGUgZm9yIHVua25vd24gSUQgKi8KQEAgLTE2OTEsNiArMTcyNiw3IEBACiB9OwogCiBzdGF0aWMgY29uc3QgY2hhciAqc3RhYzkyaGQ3M3h4X21vZGVsc1tTVEFDXzkySEQ3M1hYX01PREVMU10gPSB7CisJW1NUQUNfOTJIRDczWFhfQVVUT10gPSAiYXV0byIsCiAJW1NUQUNfOTJIRDczWFhfTk9fSkRdID0gIm5vLWpkIiwKIAlbU1RBQ185MkhENzNYWF9SRUZdID0gInJlZiIsCiAJW1NUQUNfREVMTF9NNl9BTUlDXSA9ICJkZWxsLW02LWFtaWMiLApAQCAtMTcwMyw2ICsxNzM5LDggQEAKIAkvKiBTaWdtYVRlbCByZWZlcmVuY2UgYm9hcmQgKi8KIAlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MjY2OCwKIAkJCQkiREZJIExhblBhcnR5IiwgU1RBQ185MkhENzNYWF9SRUYpLAorCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9ERkksIDB4MzEwMSwKKwkJCQkiREZJIExhblBhcnR5IiwgU1RBQ185MkhENzNYWF9SRUYpLAogCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9ERUxMLCAweDAyNTQsCiAJCQkJIkRlbGwgU3R1ZGlvIDE1MzUiLCBTVEFDX0RFTExfTTZfRE1JQyksCiAJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0RFTEwsIDB4MDI1NSwKQEAgLTE3MjYsNTIgKzE3NjQsNjggQEAKIAl7fSAvKiB0ZXJtaW5hdG9yICovCiB9OwogCi1zdGF0aWMgdW5zaWduZWQgaW50IHJlZjkyaGQ4M3h4eF9waW5fY29uZmlnc1sxNF0gPSB7CitzdGF0aWMgdW5zaWduZWQgaW50IHJlZjkyaGQ4M3h4eF9waW5fY29uZmlnc1sxMF0gPSB7CiAJMHgwMjIxNDAzMCwgMHgwMjIxMTAxMCwgMHgwMmExOTAyMCwgMHgwMjE3MDEzMCwKIAkweDAxMDE0MDUwLCAweDAxODE5MDQwLCAweDAxMDE0MDIwLCAweDkwYTMwMTRlLAotCTB4NDBmMDAwZjAsIDB4NDBmMDAwZjAsIDB4NDBmMDAwZjAsIDB4NDBmMDAwZjAsCiAJMHgwMTQ1MTE2MCwgMHg5ODU2MDE3MCwKIH07CiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGVsbF9zMTRfcGluX2NvbmZpZ3NbMTBdID0geworCTB4MDIyMTQwMzAsIDB4MDIyMTEwMTAsIDB4MDJhMTkwMjAsIDB4MDEwMTQwNTAsCisJMHg0MGYwMDBmMCwgMHgwMTgxOTA0MCwgMHg0MGYwMDBmMCwgMHg5MGE2MDE2MCwKKwkweDQwZjAwMGYwLCAweDQwZjAwMGYwLAorfTsKKwogc3RhdGljIHVuc2lnbmVkIGludCAqc3RhYzkyaGQ4M3h4eF9icmRfdGJsW1NUQUNfOTJIRDgzWFhYX01PREVMU10gPSB7CiAJW1NUQUNfOTJIRDgzWFhYX1JFRl0gPSByZWY5MmhkODN4eHhfcGluX2NvbmZpZ3MsCiAJW1NUQUNfOTJIRDgzWFhYX1BXUl9SRUZdID0gcmVmOTJoZDgzeHh4X3Bpbl9jb25maWdzLAorCVtTVEFDX0RFTExfUzE0XSA9IGRlbGxfczE0X3Bpbl9jb25maWdzLAogfTsKIAogc3RhdGljIGNvbnN0IGNoYXIgKnN0YWM5MmhkODN4eHhfbW9kZWxzW1NUQUNfOTJIRDgzWFhYX01PREVMU10gPSB7CisJW1NUQUNfOTJIRDgzWFhYX0FVVE9dID0gImF1dG8iLAogCVtTVEFDXzkySEQ4M1hYWF9SRUZdID0gInJlZiIsCiAJW1NUQUNfOTJIRDgzWFhYX1BXUl9SRUZdID0gIm1pYy1yZWYiLAorCVtTVEFDX0RFTExfUzE0XSA9ICJkZWxsLXMxNCIsCiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgc3RhYzkyaGQ4M3h4eF9jZmdfdGJsW10gPSB7CiAJLyogU2lnbWFUZWwgcmVmZXJlbmNlIGJvYXJkICovCiAJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDI2NjgsCiAJCSAgICAgICJERkkgTGFuUGFydHkiLCBTVEFDXzkySEQ4M1hYWF9SRUYpLAorCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9ERkksIDB4MzEwMSwKKwkJICAgICAgIkRGSSBMYW5QYXJ0eSIsIFNUQUNfOTJIRDgzWFhYX1JFRiksCisJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0RFTEwsIDB4MDJiYSwKKwkJICAgICAgInVua25vd24gRGVsbCIsIFNUQUNfREVMTF9TMTQpLAogCXt9IC8qIHRlcm1pbmF0b3IgKi8KIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgcmVmOTJoZDcxYnh4X3Bpbl9jb25maWdzWzExXSA9IHsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcmVmOTJoZDcxYnh4X3Bpbl9jb25maWdzW1NUQUM5MkhENzFCWFhfTlVNX1BJTlNdID0gewogCTB4MDIyMTQwMzAsIDB4MDJhMTkwNDAsIDB4MDFhMTkwMjAsIDB4MDEwMTQwMTAsCiAJMHgwMTgxMzAyZSwgMHgwMTAxNDAxMCwgMHgwMTAxOTAyMCwgMHg5MGEwMDBmMCwKLQkweDkwYTAwMGYwLCAweDAxNDUyMDUwLCAweDAxNDUyMDUwLAorCTB4OTBhMDAwZjAsIDB4MDE0NTIwNTAsIDB4MDE0NTIwNTAsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMAogfTsKIAotc3RhdGljIHVuc2lnbmVkIGludCBkZWxsX200XzFfcGluX2NvbmZpZ3NbMTFdID0geworc3RhdGljIHVuc2lnbmVkIGludCBkZWxsX200XzFfcGluX2NvbmZpZ3NbU1RBQzkySEQ3MUJYWF9OVU1fUElOU10gPSB7CiAJMHgwNDIxMTAxZiwgMHgwNGExMTIyMSwgMHg0MGYwMDBmMCwgMHg5MDE3MDExMCwKIAkweDIzYTE5MDJlLCAweDIzMDE0MjUwLCAweDQwZjAwMGYwLCAweDkwYTAwMGYwLAotCTB4NDBmMDAwZjAsIDB4NGYwMDAwZjAsIDB4NGYwMDAwZjAsCisJMHg0MGYwMDBmMCwgMHg0ZjAwMDBmMCwgMHg0ZjAwMDBmMCwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwCiB9OwogCi1zdGF0aWMgdW5zaWduZWQgaW50IGRlbGxfbTRfMl9waW5fY29uZmlnc1sxMV0gPSB7CitzdGF0aWMgdW5zaWduZWQgaW50IGRlbGxfbTRfMl9waW5fY29uZmlnc1tTVEFDOTJIRDcxQlhYX05VTV9QSU5TXSA9IHsKIAkweDA0MjExMDFmLCAweDA0YTExMjIxLCAweDkwYTcwMzMwLCAweDkwMTcwMTEwLAogCTB4MjNhMTkwMmUsIDB4MjMwMTQyNTAsIDB4NDBmMDAwZjAsIDB4NDBmMDAwZjAsCi0JMHg0MGYwMDBmMCwgMHgwNDQ0MTNiMCwgMHgwNDQ0MTNiMCwKKwkweDQwZjAwMGYwLCAweDA0NDQxM2IwLCAweDA0NDQxM2IwLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAKIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgZGVsbF9tNF8zX3Bpbl9jb25maWdzWzExXSA9IHsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGVsbF9tNF8zX3Bpbl9jb25maWdzW1NUQUM5MkhENzFCWFhfTlVNX1BJTlNdID0gewogCTB4MDQyMTEwMWYsIDB4MDRhMTEyMjEsIDB4OTBhNzAzMzAsIDB4OTAxNzAxMTAsCiAJMHg0MGYwMDBmMCwgMHg0MGYwMDBmMCwgMHg0MGYwMDBmMCwgMHg5MGEwMDBmMCwKLQkweDQwZjAwMGYwLCAweDA0NDQxM2IwLCAweDA0NDQxM2IwLAorCTB4NDBmMDAwZjAsIDB4MDQ0NDEzYjAsIDB4MDQ0NDEzYjAsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMAogfTsKIAogc3RhdGljIHVuc2lnbmVkIGludCAqc3RhYzkyaGQ3MWJ4eF9icmRfdGJsW1NUQUNfOTJIRDcxQlhYX01PREVMU10gPSB7CkBAIC0xNzgxLDM1ICsxODM1LDM4IEBACiAJW1NUQUNfREVMTF9NNF8zXQk9IGRlbGxfbTRfM19waW5fY29uZmlncywKIAlbU1RBQ19IUF9NNF0JCT0gTlVMTCwKIAlbU1RBQ19IUF9EVjVdCQk9IE5VTEwsCisJW1NUQUNfSFBfSERYXSAgICAgICAgICAgPSBOVUxMLAogfTsKIAogc3RhdGljIGNvbnN0IGNoYXIgKnN0YWM5MmhkNzFieHhfbW9kZWxzW1NUQUNfOTJIRDcxQlhYX01PREVMU10gPSB7CisJW1NUQUNfOTJIRDcxQlhYX0FVVE9dID0gImF1dG8iLAogCVtTVEFDXzkySEQ3MUJYWF9SRUZdID0gInJlZiIsCiAJW1NUQUNfREVMTF9NNF8xXSA9ICJkZWxsLW00LTEiLAogCVtTVEFDX0RFTExfTTRfMl0gPSAiZGVsbC1tNC0yIiwKIAlbU1RBQ19ERUxMX000XzNdID0gImRlbGwtbTQtMyIsCiAJW1NUQUNfSFBfTTRdID0gImhwLW00IiwKIAlbU1RBQ19IUF9EVjVdID0gImhwLWR2NSIsCisJW1NUQUNfSFBfSERYXSA9ICJocC1oZHgiLAogfTsKIAogc3RhdGljIHN0cnVjdCBzbmRfcGNpX3F1aXJrIHN0YWM5MmhkNzFieHhfY2ZnX3RibFtdID0gewogCS8qIFNpZ21hVGVsIHJlZmVyZW5jZSBib2FyZCAqLwogCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyNjY4LAogCQkgICAgICAiREZJIExhblBhcnR5IiwgU1RBQ185MkhENzFCWFhfUkVGKSwKLQlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSFAsIDB4MzBmMiwKLQkJICAgICAgIkhQIGR2NSIsIFNUQUNfSFBfTTQpLAotCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9IUCwgMHgzMGY0LAotCQkgICAgICAiSFAgZHY3IiwgU1RBQ19IUF9EVjUpLAotCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9IUCwgMHgzMGY3LAotCQkgICAgICAiSFAgZHY0IiwgU1RBQ19IUF9EVjUpLAotCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9IUCwgMHgzMGZjLAotCQkgICAgICAiSFAgZHY3IiwgU1RBQ19IUF9NNCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0hQLCAweDM2MDAsCi0JCSAgICAgICJIUCBkdjUiLCBTVEFDX0hQX0RWNSksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0hQLCAweDM2MDMsCi0JCSAgICAgICJIUCBkdjUiLCBTVEFDX0hQX0RWNSksCisJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0RGSSwgMHgzMTAxLAorCQkgICAgICAiREZJIExhblBhcnR5IiwgU1RBQ185MkhENzFCWFhfUkVGKSwKKwlTTkRfUENJX1FVSVJLX01BU0soUENJX1ZFTkRPUl9JRF9IUCwgMHhmZmYwLCAweDMwODAsCisJCSAgICAgICJIUCIsIFNUQUNfSFBfRFY1KSwKKwlTTkRfUENJX1FVSVJLX01BU0soUENJX1ZFTkRPUl9JRF9IUCwgMHhmZmYwLCAweDMwZjAsCisJCSAgICAgICJIUCBkdjQtNyIsIFNUQUNfSFBfRFY1KSwKKwlTTkRfUENJX1FVSVJLX01BU0soUENJX1ZFTkRPUl9JRF9IUCwgMHhmZmYwLCAweDM2MDAsCisJCSAgICAgICJIUCBkdjQtNyIsIFNUQUNfSFBfRFY1KSwKKwlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSFAsIDB4MzYxMCwKKwkJICAgICAgIkhQIEhEWCIsIFNUQUNfSFBfSERYKSwgIC8qIEhEWDE4ICovCiAJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0hQLCAweDM2MWEsCi0JCQkJInVua25vd24gSFAiLCBTVEFDX0hQX000KSwKKwkJICAgICAgIkhQIG1pbmkgMTAwMCIsIFNUQUNfSFBfTTQpLAorCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9IUCwgMHgzNjFiLAorCQkgICAgICAiSFAgSERYIiwgU1RBQ19IUF9IRFgpLCAgLyogSERYMTYgKi8KIAlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfREVMTCwgMHgwMjMzLAogCQkJCSJ1bmtub3duIERlbGwiLCBTVEFDX0RFTExfTTRfMSksCiAJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0RFTEwsIDB4MDIzNCwKQEAgLTE5NjEsNiArMjAxOCw3IEBACiB9OwogCiBzdGF0aWMgY29uc3QgY2hhciAqc3RhYzkyMnhfbW9kZWxzW1NUQUNfOTIyWF9NT0RFTFNdID0geworCVtTVEFDXzkyMlhfQVVUT10gPSAiYXV0byIsCiAJW1NUQUNfRDk0NV9SRUZdCT0gInJlZiIsCiAJW1NUQUNfRDk0NUdUUDVdCT0gIjVzdGFjayIsCiAJW1NUQUNfRDk0NUdUUDNdCT0gIjNzdGFjayIsCkBAIC0xOTg4LDYgKzIwNDYsOCBAQAogCS8qIFNpZ21hVGVsIHJlZmVyZW5jZSBib2FyZCAqLwogCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyNjY4LAogCQkgICAgICAiREZJIExhblBhcnR5IiwgU1RBQ19EOTQ1X1JFRiksCisJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0RGSSwgMHgzMTAxLAorCQkgICAgICAiREZJIExhblBhcnR5IiwgU1RBQ19EOTQ1X1JFRiksCiAJLyogSW50ZWwgOTQ1RyBiYXNlZCBzeXN0ZW1zICovCiAJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDAxMDEsCiAJCSAgICAgICJJbnRlbCBEOTQ1RyIsIFNUQUNfRDk0NUdUUDMpLApAQCAtMjA0MSw2ICsyMTAxLDkgQEAKIAkJICAgICAgIkludGVsIEQ5NDVQIiwgU1RBQ19EOTQ1R1RQMyksCiAJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDA3MDcsCiAJCSAgICAgICJJbnRlbCBEOTQ1UCIsIFNUQUNfRDk0NUdUUDUpLAorCS8qIG90aGVyIGludGVsICovCisJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDAyMDQsCisJCSAgICAgICJJbnRlbCBEOTQ1IiwgU1RBQ19EOTQ1X1JFRiksCiAJLyogb3RoZXIgc3lzdGVtcyAgKi8KIAkvKiBBcHBsZSBJbnRlbCBNYWMgKE1hYyBNaW5pLCBNYWNCb29rLCBNYWNCb29rIFByby4uLikgKi8KIAlTTkRfUENJX1FVSVJLKDB4ODM4NCwgMHg3NjgwLApAQCAtMjA2NSwzMSArMjEyOCw3IEBACiAJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0RFTEwsIDB4MDFkNywKIAkJICAgICAgIkRlbGwgWFBTIE0xMjEwIiwgU1RBQ185MjJYX0RFTExfTTgyKSwKIAkvKiBFQ1MvUEMgQ2hpcHMgYm9hcmRzICovCi0JU05EX1BDSV9RVUlSSygweDEwMTksIDB4MjE0NCwKLQkJICAgICAgIkVDUy9QQyBjaGlwcyIsIFNUQUNfRUNTXzIwMiksCi0JU05EX1BDSV9RVUlSSygweDEwMTksIDB4MjYwOCwKLQkJICAgICAgIkVDUy9QQyBjaGlwcyIsIFNUQUNfRUNTXzIwMiksCi0JU05EX1BDSV9RVUlSSygweDEwMTksIDB4MjYzMywKLQkJICAgICAgIkVDUy9QQyBjaGlwcyBQMTdHLzEzMzMiLCBTVEFDX0VDU18yMDIpLAotCVNORF9QQ0lfUVVJUksoMHgxMDE5LCAweDI4MTEsCi0JCSAgICAgICJFQ1MvUEMgY2hpcHMiLCBTVEFDX0VDU18yMDIpLAotCVNORF9QQ0lfUVVJUksoMHgxMDE5LCAweDI4MTIsCi0JCSAgICAgICJFQ1MvUEMgY2hpcHMiLCBTVEFDX0VDU18yMDIpLAotCVNORF9QQ0lfUVVJUksoMHgxMDE5LCAweDI4MTMsCi0JCSAgICAgICJFQ1MvUEMgY2hpcHMiLCBTVEFDX0VDU18yMDIpLAotCVNORF9QQ0lfUVVJUksoMHgxMDE5LCAweDI4MTQsCi0JCSAgICAgICJFQ1MvUEMgY2hpcHMiLCBTVEFDX0VDU18yMDIpLAotCVNORF9QQ0lfUVVJUksoMHgxMDE5LCAweDI4MTUsCi0JCSAgICAgICJFQ1MvUEMgY2hpcHMiLCBTVEFDX0VDU18yMDIpLAotCVNORF9QQ0lfUVVJUksoMHgxMDE5LCAweDI4MTYsCi0JCSAgICAgICJFQ1MvUEMgY2hpcHMiLCBTVEFDX0VDU18yMDIpLAotCVNORF9QQ0lfUVVJUksoMHgxMDE5LCAweDI4MTcsCi0JCSAgICAgICJFQ1MvUEMgY2hpcHMiLCBTVEFDX0VDU18yMDIpLAotCVNORF9QQ0lfUVVJUksoMHgxMDE5LCAweDI4MTgsCi0JCSAgICAgICJFQ1MvUEMgY2hpcHMiLCBTVEFDX0VDU18yMDIpLAotCVNORF9QQ0lfUVVJUksoMHgxMDE5LCAweDI4MTksCi0JCSAgICAgICJFQ1MvUEMgY2hpcHMiLCBTVEFDX0VDU18yMDIpLAotCVNORF9QQ0lfUVVJUksoMHgxMDE5LCAweDI4MjAsCisJU05EX1BDSV9RVUlSS19NQVNLKDB4MTAxOSwgMHhmMDAwLCAweDIwMDAsCiAJCSAgICAgICJFQ1MvUEMgY2hpcHMiLCBTVEFDX0VDU18yMDIpLAogCXt9IC8qIHRlcm1pbmF0b3IgKi8KIH07CkBAIC0yMTMyLDYgKzIxNzEsNyBAQAogfTsKIAogc3RhdGljIGNvbnN0IGNoYXIgKnN0YWM5Mjd4X21vZGVsc1tTVEFDXzkyN1hfTU9ERUxTXSA9IHsKKwlbU1RBQ185MjdYX0FVVE9dCT0gImF1dG8iLAogCVtTVEFDX0Q5NjVfUkVGX05PX0pEXQk9ICJyZWYtbm8tamQiLAogCVtTVEFDX0Q5NjVfUkVGXQkJPSAicmVmIiwKIAlbU1RBQ19EOTY1XzNTVF0JCT0gIjNzdGFjayIsCkBAIC0yMTQ0LDI2ICsyMTg0LDE2IEBACiAJLyogU2lnbWFUZWwgcmVmZXJlbmNlIGJvYXJkICovCiAJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDI2NjgsCiAJCSAgICAgICJERkkgTGFuUGFydHkiLCBTVEFDX0Q5NjVfUkVGKSwKKwlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfREZJLCAweDMxMDEsCisJCSAgICAgICJERkkgTGFuUGFydHkiLCBTVEFDX0Q5NjVfUkVGKSwKIAkgLyogSW50ZWwgOTQ2IGJhc2VkIHN5c3RlbXMgKi8KIAlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4M2QwMSwgIkludGVsIEQ5NDYiLCBTVEFDX0Q5NjVfM1NUKSwKIAlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4YTMwMSwgIkludGVsIEQ5NDYiLCBTVEFDX0Q5NjVfM1NUKSwKIAkvKiA5NjUgYmFzZWQgMyBzdGFjayBzeXN0ZW1zICovCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIxMTYsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzNTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIxMTUsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzNTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIxMTQsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzNTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIxMTMsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzNTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIxMTIsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzNTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIxMTEsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzNTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIxMTAsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzNTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIwMDksICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzNTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIwMDgsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzNTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIwMDcsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzNTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIwMDYsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzNTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIwMDUsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzNTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIwMDQsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzNTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIwMDMsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzNTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIwMDIsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzNTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIwMDEsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzNTVCksCisJU05EX1BDSV9RVUlSS19NQVNLKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4ZmYwMCwgMHgyMTAwLAorCQkJICAgIkludGVsIEQ5NjUiLCBTVEFDX0Q5NjVfM1NUKSwKKwlTTkRfUENJX1FVSVJLX01BU0soUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHhmZjAwLCAweDIwMDAsCisJCQkgICAiSW50ZWwgRDk2NSIsIFNUQUNfRDk2NV8zU1QpLAogCS8qIERlbGwgMyBzdGFjayBzeXN0ZW1zICovCiAJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0RFTEwsICAweDAxZjcsICJEZWxsIFhQUyBNMTczMCIsIFNUQUNfREVMTF8zU1QpLAogCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9ERUxMLCAgMHgwMWRkLCAiRGVsbCBEaW1lbnNpb24gRTUyMCIsIFNUQUNfREVMTF8zU1QpLApAQCAtMjE3OSwxNSArMjIwOSwxMCBAQAogCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9ERUxMLCAgMHgwMmZmLCAiRGVsbCAgICAgIiwgU1RBQ19ERUxMX0JJT1MpLAogCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9ERUxMLCAgMHgwMjA5LCAiRGVsbCBYUFMgMTMzMCIsIFNUQUNfREVMTF9CSU9TKSwKIAkvKiA5NjUgYmFzZWQgNSBzdGFjayBzeXN0ZW1zICovCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIzMDEsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzVTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIzMDIsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzVTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIzMDMsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzVTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIzMDQsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzVTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIzMDUsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzVTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDI1MDEsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzVTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDI1MDIsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzVTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDI1MDMsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzVTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDI1MDQsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzVTVCksCisJU05EX1BDSV9RVUlSS19NQVNLKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4ZmYwMCwgMHgyMzAwLAorCQkJICAgIkludGVsIEQ5NjUiLCBTVEFDX0Q5NjVfNVNUKSwKKwlTTkRfUENJX1FVSVJLX01BU0soUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHhmZjAwLCAweDI1MDAsCisJCQkgICAiSW50ZWwgRDk2NSIsIFNUQUNfRDk2NV81U1QpLAogCXt9IC8qIHRlcm1pbmF0b3IgKi8KIH07CiAKQEAgLTIyNDAsMTkgKzIyNjUsMjUgQEAKIAlbU1RBQ185MjA1X0RFTExfTTQyXSA9IGRlbGxfOTIwNV9tNDJfcGluX2NvbmZpZ3MsCiAJW1NUQUNfOTIwNV9ERUxMX000M10gPSBkZWxsXzkyMDVfbTQzX3Bpbl9jb25maWdzLAogCVtTVEFDXzkyMDVfREVMTF9NNDRdID0gZGVsbF85MjA1X200NF9waW5fY29uZmlncywKKwlbU1RBQ185MjA1X0VBUERdID0gTlVMTCwKIH07CiAKIHN0YXRpYyBjb25zdCBjaGFyICpzdGFjOTIwNV9tb2RlbHNbU1RBQ185MjA1X01PREVMU10gPSB7CisJW1NUQUNfOTIwNV9BVVRPXSA9ICJhdXRvIiwKIAlbU1RBQ185MjA1X1JFRl0gPSAicmVmIiwKIAlbU1RBQ185MjA1X0RFTExfTTQyXSA9ICJkZWxsLW00MiIsCiAJW1NUQUNfOTIwNV9ERUxMX000M10gPSAiZGVsbC1tNDMiLAogCVtTVEFDXzkyMDVfREVMTF9NNDRdID0gImRlbGwtbTQ0IiwKKwlbU1RBQ185MjA1X0VBUERdID0gImVhcGQiLAogfTsKIAogc3RhdGljIHN0cnVjdCBzbmRfcGNpX3F1aXJrIHN0YWM5MjA1X2NmZ190YmxbXSA9IHsKIAkvKiBTaWdtYVRlbCByZWZlcmVuY2UgYm9hcmQgKi8KIAlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MjY2OCwKIAkJICAgICAgIkRGSSBMYW5QYXJ0eSIsIFNUQUNfOTIwNV9SRUYpLAorCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9ERkksIDB4MzEwMSwKKwkJICAgICAgIkRGSSBMYW5QYXJ0eSIsIFNUQUNfOTIwNV9SRUYpLAorCS8qIERlbGwgKi8KIAlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfREVMTCwgMHgwMWYxLAogCQkgICAgICAidW5rbm93biBEZWxsIiwgU1RBQ185MjA1X0RFTExfTTQyKSwKIAlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfREVMTCwgMHgwMWYyLApAQCAtMjI4MywxMDEgKzIzMTQsMjQgQEAKIAkJICAgICAgIkRlbGwgSW5zcGlyb24iLCBTVEFDXzkyMDVfREVMTF9NNDQpLAogCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9ERUxMLCAweDAyMjgsCiAJCSAgICAgICJEZWxsIFZvc3RybyAxNTAwIiwgU1RBQ185MjA1X0RFTExfTTQyKSwKKwkvKiBHYXRld2F5ICovCisJU05EX1BDSV9RVUlSSygweDEwN2IsIDB4MDU2NSwgIkdhdGV3YXkgVDE2MTYiLCBTVEFDXzkyMDVfRUFQRCksCiAJe30gLyogdGVybWluYXRvciAqLwogfTsKIAotc3RhdGljIGludCBzdGFjOTJ4eF9zYXZlX2Jpb3NfY29uZmlnX3JlZ3Moc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCi17Ci0JaW50IGk7Ci0Jc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQkKLQlrZnJlZShzcGVjLT5waW5fY29uZmlncyk7Ci0Jc3BlYy0+cGluX2NvbmZpZ3MgPSBrY2FsbG9jKHNwZWMtPm51bV9waW5zLCBzaXplb2YoKnNwZWMtPnBpbl9jb25maWdzKSwKLQkJCQkgICAgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFzcGVjLT5waW5fY29uZmlncykKLQkJcmV0dXJuIC1FTk9NRU07Ci0JCi0JZm9yIChpID0gMDsgaSA8IHNwZWMtPm51bV9waW5zOyBpKyspIHsKLQkJaGRhX25pZF90IG5pZCA9IHNwZWMtPnBpbl9uaWRzW2ldOwotCQl1bnNpZ25lZCBpbnQgcGluX2NmZzsKLQkJCi0JCXBpbl9jZmcgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIG5pZCwgMCwgCi0JCQlBQ19WRVJCX0dFVF9DT05GSUdfREVGQVVMVCwgMHgwMCk7CQotCQlzbmRfcHJpbnRkZChLRVJOX0lORk8gImhkYV9jb2RlYzogcGluIG5pZCAlMi4yeCBiaW9zIHBpbiBjb25maWcgJTguOHhcbiIsCi0JCQkJCW5pZCwgcGluX2NmZyk7Ci0JCXNwZWMtPnBpbl9jb25maWdzW2ldID0gcGluX2NmZzsKLQl9Ci0JCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHN0YWM5Mnh4X3NldF9jb25maWdfcmVnKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAotCQkJCSAgICBoZGFfbmlkX3QgcGluX25pZCwgdW5zaWduZWQgaW50IHBpbl9jb25maWcpCi17Ci0JaW50IGk7Ci0Jc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgcGluX25pZCwgMCwKLQkJCSAgICBBQ19WRVJCX1NFVF9DT05GSUdfREVGQVVMVF9CWVRFU18wLAotCQkJICAgIHBpbl9jb25maWcgJiAweDAwMDAwMGZmKTsKLQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBwaW5fbmlkLCAwLAotCQkJICAgIEFDX1ZFUkJfU0VUX0NPTkZJR19ERUZBVUxUX0JZVEVTXzEsCi0JCQkgICAgKHBpbl9jb25maWcgJiAweDAwMDBmZjAwKSA+PiA4KTsKLQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBwaW5fbmlkLCAwLAotCQkJICAgIEFDX1ZFUkJfU0VUX0NPTkZJR19ERUZBVUxUX0JZVEVTXzIsCi0JCQkgICAgKHBpbl9jb25maWcgJiAweDAwZmYwMDAwKSA+PiAxNik7Ci0Jc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgcGluX25pZCwgMCwKLQkJCSAgICBBQ19WRVJCX1NFVF9DT05GSUdfREVGQVVMVF9CWVRFU18zLAotCQkJICAgIHBpbl9jb25maWcgPj4gMjQpOwotCWkgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIHBpbl9uaWQsIDAsCi0JCQkgICAgICAgQUNfVkVSQl9HRVRfQ09ORklHX0RFRkFVTFQsCi0JCQkgICAgICAgMHgwMCk7CQotCXNuZF9wcmludGRkKEtFUk5fSU5GTyAiaGRhX2NvZGVjOiBwaW4gbmlkICUyLjJ4IHBpbiBjb25maWcgJTguOHhcbiIsCi0JCSAgICBwaW5fbmlkLCBpKTsKLX0KLQotc3RhdGljIHZvaWQgc3RhYzkyeHhfc2V0X2NvbmZpZ19yZWdzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQorc3RhdGljIHZvaWQgc3RhYzkyeHhfc2V0X2NvbmZpZ19yZWdzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorCQkJCSAgICAgdW5zaWduZWQgaW50ICpwaW5jZmdzKQogewogCWludCBpOwogCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAKLSAJaWYgKCFzcGVjLT5waW5fY29uZmlncykKLSAJCXJldHVybjsKKwlpZiAoIXBpbmNmZ3MpCisJCXJldHVybjsKIAogCWZvciAoaSA9IDA7IGkgPCBzcGVjLT5udW1fcGluczsgaSsrKQotCQlzdGFjOTJ4eF9zZXRfY29uZmlnX3JlZyhjb2RlYywgc3BlYy0+cGluX25pZHNbaV0sCi0JCQkJCXNwZWMtPnBpbl9jb25maWdzW2ldKTsKLX0KLQotc3RhdGljIGludCBzdGFjX3NhdmVfcGluX2NmZ3Moc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCAqcGlucykKLXsKLQlzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwotCi0JaWYgKCFwaW5zKQotCQlyZXR1cm4gc3RhYzkyeHhfc2F2ZV9iaW9zX2NvbmZpZ19yZWdzKGNvZGVjKTsKLQotCWtmcmVlKHNwZWMtPnBpbl9jb25maWdzKTsKLQlzcGVjLT5waW5fY29uZmlncyA9IGttZW1kdXAocGlucywKLQkJCQkgICAgc3BlYy0+bnVtX3BpbnMgKiBzaXplb2YoKnBpbnMpLAotCQkJCSAgICBHRlBfS0VSTkVMKTsKLQlpZiAoIXNwZWMtPnBpbl9jb25maWdzKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXN0YWM5Mnh4X3NldF9jb25maWdfcmVncyhjb2RlYyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHN0YWNfY2hhbmdlX3Bpbl9jb25maWcoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQsCi0JCQkJICAgdW5zaWduZWQgaW50IGNmZykKLXsKLQlzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IHNwZWMtPm51bV9waW5zOyBpKyspIHsKLQkJaWYgKHNwZWMtPnBpbl9uaWRzW2ldID09IG5pZCkgewotCQkJc3BlYy0+cGluX2NvbmZpZ3NbaV0gPSBjZmc7Ci0JCQlzdGFjOTJ4eF9zZXRfY29uZmlnX3JlZyhjb2RlYywgbmlkLCBjZmcpOwotCQkJYnJlYWs7Ci0JCX0KLQl9CisJCWlmIChzcGVjLT5waW5fbmlkc1tpXSAmJiBwaW5jZmdzW2ldKQorCQkJc25kX2hkYV9jb2RlY19zZXRfcGluY2ZnKGNvZGVjLCBzcGVjLT5waW5fbmlkc1tpXSwKKwkJCQkJCSBwaW5jZmdzW2ldKTsKIH0KIAogLyoKQEAgLTI1NjcsNyArMjUyMSw3IEBACiAJCWNvZGVjLT5udW1fcGNtcysrOwogCQlpbmZvKys7CiAJCWluZm8tPm5hbWUgPSAiU1RBQzkyeHggRGlnaXRhbCI7Ci0JCWluZm8tPnBjbV90eXBlID0gSERBX1BDTV9UWVBFX1NQRElGOworCQlpbmZvLT5wY21fdHlwZSA9IHNwZWMtPmF1dG9jZmcuZGlnX291dF90eXBlWzBdOwogCQlpZiAoc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQpIHsKIAkJCWluZm8tPnN0cmVhbVtTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLXSA9IHN0YWM5Mnh4X3BjbV9kaWdpdGFsX3BsYXliYWNrOwogCQkJaW5mby0+c3RyZWFtW1NORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0tdLm5pZCA9IHNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkOwpAQCAtMjU4Myw4ICsyNTM3LDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGludCBzdGFjOTJ4eF9nZXRfdnJlZihzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCkKIHsKLQl1bnNpZ25lZCBpbnQgcGluY2FwID0gc25kX2hkYV9wYXJhbV9yZWFkKGNvZGVjLCBuaWQsCi0JCQkJCQkgQUNfUEFSX1BJTl9DQVApOworCXVuc2lnbmVkIGludCBwaW5jYXAgPSBzbmRfaGRhX3F1ZXJ5X3Bpbl9jYXBzKGNvZGVjLCBuaWQpOwogCXBpbmNhcCA9IChwaW5jYXAgJiBBQ19QSU5DQVBfVlJFRikgPj4gQUNfUElOQ0FQX1ZSRUZfU0hJRlQ7CiAJaWYgKHBpbmNhcCAmIEFDX1BJTkNBUF9WUkVGXzEwMCkKIAkJcmV0dXJuIEFDX1BJTkNUTF9WUkVGXzEwMDsKQEAgLTI3NTksMjIgKzI3MTIsMzcgQEAKIH07CiAKIC8qIGFkZCBkeW5hbWljIGNvbnRyb2xzICovCi1zdGF0aWMgaW50IHN0YWM5Mnh4X2FkZF9jb250cm9sX3RlbXAoc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMsCi0JCQkJICAgICBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqa3RlbXAsCi0JCQkJICAgICBpbnQgaWR4LCBjb25zdCBjaGFyICpuYW1lLAotCQkJCSAgICAgdW5zaWduZWQgbG9uZyB2YWwpCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKgorc3RhY19jb250cm9sX25ldyhzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYywKKwkJIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICprdGVtcCwKKwkJIGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKmtuZXc7CiAKIAlzbmRfYXJyYXlfaW5pdCgmc3BlYy0+a2N0bHMsIHNpemVvZigqa25ldyksIDMyKTsKIAlrbmV3ID0gc25kX2FycmF5X25ldygmc3BlYy0+a2N0bHMpOwogCWlmICgha25ldykKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldHVybiBOVUxMOwogCSprbmV3ID0gKmt0ZW1wOwotCWtuZXctPmluZGV4ID0gaWR4OwogCWtuZXctPm5hbWUgPSBrc3RyZHVwKG5hbWUsIEdGUF9LRVJORUwpOwotCWlmICgha25ldy0+bmFtZSkKKwlpZiAoIWtuZXctPm5hbWUpIHsKKwkJLyogcm9vbGJhY2sgKi8KKwkJbWVtc2V0KGtuZXcsIDAsIHNpemVvZigqa25ldykpOworCQlzcGVjLT5rY3Rscy5hbGxvY2VkLS07CisJCXJldHVybiBOVUxMOworCX0KKwlyZXR1cm4ga25ldzsKK30KKworc3RhdGljIGludCBzdGFjOTJ4eF9hZGRfY29udHJvbF90ZW1wKHN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjLAorCQkJCSAgICAgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKmt0ZW1wLAorCQkJCSAgICAgaW50IGlkeCwgY29uc3QgY2hhciAqbmFtZSwKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgdmFsKQoreworCXN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICprbmV3ID0gc3RhY19jb250cm9sX25ldyhzcGVjLCBrdGVtcCwgbmFtZSk7CisJaWYgKCFrbmV3KQogCQlyZXR1cm4gLUVOT01FTTsKKwlrbmV3LT5pbmRleCA9IGlkeDsKIAlrbmV3LT5wcml2YXRlX3ZhbHVlID0gdmFsOwogCXJldHVybiAwOwogfQpAQCAtMjc5Niw2ICsyNzY0LDI5IEBACiAJcmV0dXJuIHN0YWM5Mnh4X2FkZF9jb250cm9sX2lkeChzcGVjLCB0eXBlLCAwLCBuYW1lLCB2YWwpOwogfQogCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc3RhY19pbnB1dF9zcmNfdGVtcCA9IHsKKwkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkubmFtZSA9ICJJbnB1dCBTb3VyY2UiLAorCS5pbmZvID0gc3RhYzkyeHhfbXV4X2VudW1faW5mbywKKwkuZ2V0ID0gc3RhYzkyeHhfbXV4X2VudW1fZ2V0LAorCS5wdXQgPSBzdGFjOTJ4eF9tdXhfZW51bV9wdXQsCit9OworCitzdGF0aWMgaW50IHN0YWM5Mnh4X2FkZF9pbnB1dF9zb3VyY2Uoc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMpCit7CisJc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKmtuZXc7CisJc3RydWN0IGhkYV9pbnB1dF9tdXggKmltdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4OworCisJaWYgKCFzcGVjLT5udW1fYWRjcyB8fCBpbXV4LT5udW1faXRlbXMgPD0gMSkKKwkJcmV0dXJuIDA7IC8qIG5vIG5lZWQgZm9yIGlucHV0IHNvdXJjZSBjb250cm9sICovCisJa25ldyA9IHN0YWNfY29udHJvbF9uZXcoc3BlYywgJnN0YWNfaW5wdXRfc3JjX3RlbXAsCisJCQkJc3RhY19pbnB1dF9zcmNfdGVtcC5uYW1lKTsKKwlpZiAoIWtuZXcpCisJCXJldHVybiAtRU5PTUVNOworCWtuZXctPmNvdW50ID0gc3BlYy0+bnVtX2FkY3M7CisJcmV0dXJuIDA7Cit9CisKIC8qIGNoZWNrIHdoZXRoZXIgdGhlIGxpbmUtaW5wdXQgY2FuIGJlIHVzZWQgYXMgbGluZS1vdXQgKi8KIHN0YXRpYyBoZGFfbmlkX3QgY2hlY2tfbGluZV9vdXRfc3dpdGNoKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewpAQCAtMjgwNyw3ICsyNzk4LDcgQEAKIAlpZiAoY2ZnLT5saW5lX291dF90eXBlICE9IEFVVE9fUElOX0xJTkVfT1VUKQogCQlyZXR1cm4gMDsKIAluaWQgPSBjZmctPmlucHV0X3BpbnNbQVVUT19QSU5fTElORV07Ci0JcGluY2FwID0gc25kX2hkYV9wYXJhbV9yZWFkKGNvZGVjLCBuaWQsIEFDX1BBUl9QSU5fQ0FQKTsKKwlwaW5jYXAgPSBzbmRfaGRhX3F1ZXJ5X3Bpbl9jYXBzKGNvZGVjLCBuaWQpOwogCWlmIChwaW5jYXAgJiBBQ19QSU5DQVBfT1VUKQogCQlyZXR1cm4gbmlkOwogCXJldHVybiAwOwpAQCAtMjgyNiwxMiArMjgxNywxMSBAQAogCW1pY19waW4gPSBBVVRPX1BJTl9NSUM7CiAJZm9yICg7OykgewogCQloZGFfbmlkX3QgbmlkID0gY2ZnLT5pbnB1dF9waW5zW21pY19waW5dOwotCQlkZWZfY29uZiA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLCAwLAotCQkJCQkgICAgICBBQ19WRVJCX0dFVF9DT05GSUdfREVGQVVMVCwgMCk7CisJCWRlZl9jb25mID0gc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKGNvZGVjLCBuaWQpOwogCQkvKiBzb21lIGxhcHRvcHMgaGF2ZSBhbiBpbnRlcm5hbCBhbmFsb2cgbWljcm9waG9uZQogCQkgKiB3aGljaCBjYW4ndCBiZSB1c2VkIGFzIGEgb3V0cHV0ICovCiAJCWlmIChnZXRfZGVmY2ZnX2Nvbm5lY3QoZGVmX2NvbmYpICE9IEFDX0pBQ0tfUE9SVF9GSVhFRCkgewotCQkJcGluY2FwID0gc25kX2hkYV9wYXJhbV9yZWFkKGNvZGVjLCBuaWQsIEFDX1BBUl9QSU5fQ0FQKTsKKwkJCXBpbmNhcCA9IHNuZF9oZGFfcXVlcnlfcGluX2NhcHMoY29kZWMsIG5pZCk7CiAJCQlpZiAocGluY2FwICYgQUNfUElOQ0FQX09VVCkKIAkJCQlyZXR1cm4gbmlkOwogCQl9CkBAIC0yODc5LDggKzI4NjksNyBAQAogCWNvbm5fbGVuID0gc25kX2hkYV9nZXRfY29ubmVjdGlvbnMoY29kZWMsIG5pZCwgY29ubiwKIAkJCQkJICAgSERBX01BWF9DT05ORUNUSU9OUyk7CiAJZm9yIChqID0gMDsgaiA8IGNvbm5fbGVuOyBqKyspIHsKLQkJd2NhcHMgPSBzbmRfaGRhX3BhcmFtX3JlYWQoY29kZWMsIGNvbm5bal0sCi0JCQkJCSAgIEFDX1BBUl9BVURJT19XSURHRVRfQ0FQKTsKKwkJd2NhcHMgPSBnZXRfd2NhcHMoY29kZWMsIGNvbm5bal0pOwogCQl3dHlwZSA9ICh3Y2FwcyAmIEFDX1dDQVBfVFlQRSkgPj4gQUNfV0NBUF9UWVBFX1NISUZUOwogCQkvKiB3ZSBjaGVjayBvbmx5IGFuYWxvZyBvdXRwdXRzICovCiAJCWlmICh3dHlwZSAhPSBBQ19XSURfQVVEX09VVCB8fCAod2NhcHMgJiBBQ19XQ0FQX0RJR0lUQUwpKQpAQCAtMjg5NSw2ICsyODg0LDE2IEBACiAJCQlyZXR1cm4gY29ubltqXTsKIAkJfQogCX0KKwkvKiBpZiBhbGwgREFDcyBhcmUgYWxyZWFkeSBhc3NpZ25lZCwgY29ubmVjdCB0byB0aGUgcHJpbWFyeSBEQUMgKi8KKwlpZiAoY29ubl9sZW4gPiAxKSB7CisJCWZvciAoaiA9IDA7IGogPCBjb25uX2xlbjsgaisrKSB7CisJCQlpZiAoY29ubltqXSA9PSBzcGVjLT5tdWx0aW91dC5kYWNfbmlkc1swXSkgeworCQkJCXNuZF9oZGFfY29kZWNfd3JpdGVfY2FjaGUoY29kZWMsIG5pZCwgMCwKKwkJCQkJCSAgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIGopOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQogCXJldHVybiAwOwogfQogCkBAIC0yOTM1LDYgKzI5MzQsMjYgQEAKIAkJYWRkX3NwZWNfZGFjcyhzcGVjLCBkYWMpOwogCX0KIAorCWZvciAoaSA9IDA7IGkgPCBjZmctPmhwX291dHM7IGkrKykgeworCQluaWQgPSBjZmctPmhwX3BpbnNbaV07CisJCWRhYyA9IGdldF91bmFzc2lnbmVkX2RhYyhjb2RlYywgbmlkKTsKKwkJaWYgKGRhYykgeworCQkJaWYgKCFzcGVjLT5tdWx0aW91dC5ocF9uaWQpCisJCQkJc3BlYy0+bXVsdGlvdXQuaHBfbmlkID0gZGFjOworCQkJZWxzZQorCQkJCWFkZF9zcGVjX2V4dHJhX2RhY3Moc3BlYywgZGFjKTsKKwkJfQorCQlzcGVjLT5ocF9kYWNzW2ldID0gZGFjOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBjZmctPnNwZWFrZXJfb3V0czsgaSsrKSB7CisJCW5pZCA9IGNmZy0+c3BlYWtlcl9waW5zW2ldOworCQlkYWMgPSBnZXRfdW5hc3NpZ25lZF9kYWMoY29kZWMsIG5pZCk7CisJCWlmIChkYWMpCisJCQlhZGRfc3BlY19leHRyYV9kYWNzKHNwZWMsIGRhYyk7CisJCXNwZWMtPnNwZWFrZXJfZGFjc1tpXSA9IGRhYzsKKwl9CisKIAkvKiBhZGQgbGluZS1pbiBhcyBvdXRwdXQgKi8KIAluaWQgPSBjaGVja19saW5lX291dF9zd2l0Y2goY29kZWMpOwogCWlmIChuaWQpIHsKQEAgLTI5NjIsMjYgKzI5ODEsNiBAQAogCQl9CiAJfQogCi0JZm9yIChpID0gMDsgaSA8IGNmZy0+aHBfb3V0czsgaSsrKSB7Ci0JCW5pZCA9IGNmZy0+aHBfcGluc1tpXTsKLQkJZGFjID0gZ2V0X3VuYXNzaWduZWRfZGFjKGNvZGVjLCBuaWQpOwotCQlpZiAoZGFjKSB7Ci0JCQlpZiAoIXNwZWMtPm11bHRpb3V0LmhwX25pZCkKLQkJCQlzcGVjLT5tdWx0aW91dC5ocF9uaWQgPSBkYWM7Ci0JCQllbHNlCi0JCQkJYWRkX3NwZWNfZXh0cmFfZGFjcyhzcGVjLCBkYWMpOwotCQl9Ci0JCXNwZWMtPmhwX2RhY3NbaV0gPSBkYWM7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IGNmZy0+c3BlYWtlcl9vdXRzOyBpKyspIHsKLQkJbmlkID0gY2ZnLT5zcGVha2VyX3BpbnNbaV07Ci0JCWRhYyA9IGdldF91bmFzc2lnbmVkX2RhYyhjb2RlYywgbmlkKTsKLQkJaWYgKGRhYykKLQkJCWFkZF9zcGVjX2V4dHJhX2RhY3Moc3BlYywgZGFjKTsKLQkJc3BlYy0+c3BlYWtlcl9kYWNzW2ldID0gZGFjOwotCX0KLQogCXNuZF9wcmludGQoInN0YWM5Mnh4OiBkYWNfbmlkcz0lZCAoMHgleC8weCV4LzB4JXgvMHgleC8weCV4KVxuIiwKIAkJICAgc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MsCiAJCSAgIHNwZWMtPm11bHRpb3V0LmRhY19uaWRzWzBdLApAQCAtMjk5NCwyNCArMjk5Myw0NyBAQAogfQogCiAvKiBjcmVhdGUgdm9sdW1lIGNvbnRyb2wvc3dpdGNoIGZvciB0aGUgZ2l2ZW4gcHJlZnggdHlwZSAqLwotc3RhdGljIGludCBjcmVhdGVfY29udHJvbHMoc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMsIGNvbnN0IGNoYXIgKnBmeCwgaGRhX25pZF90IG5pZCwgaW50IGNocykKK3N0YXRpYyBpbnQgY3JlYXRlX2NvbnRyb2xzX2lkeChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgY29uc3QgY2hhciAqcGZ4LAorCQkJICAgICAgIGludCBpZHgsIGhkYV9uaWRfdCBuaWQsIGludCBjaHMpCiB7CisJc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKIAljaGFyIG5hbWVbMzJdOwogCWludCBlcnI7CiAKKwlpZiAoIXNwZWMtPmNoZWNrX3ZvbHVtZV9vZmZzZXQpIHsKKwkJdW5zaWduZWQgaW50IGNhcHMsIHN0ZXAsIG51bXMsIGRiX3NjYWxlOworCQljYXBzID0gcXVlcnlfYW1wX2NhcHMoY29kZWMsIG5pZCwgSERBX09VVFBVVCk7CisJCXN0ZXAgPSAoY2FwcyAmIEFDX0FNUENBUF9TVEVQX1NJWkUpID4+CisJCQlBQ19BTVBDQVBfU1RFUF9TSVpFX1NISUZUOworCQlzdGVwID0gKHN0ZXAgKyAxKSAqIDI1OyAvKiBpbiAuMDFkQiB1bml0ICovCisJCW51bXMgPSAoY2FwcyAmIEFDX0FNUENBUF9OVU1fU1RFUFMpID4+CisJCQlBQ19BTVBDQVBfTlVNX1NURVBTX1NISUZUOworCQlkYl9zY2FsZSA9IG51bXMgKiBzdGVwOworCQkvKiBpZiBkQiBzY2FsZSBpcyBvdmVyIC02NGRCLCBhbmQgZmluZXIgZW5vdWdoLAorCQkgKiBsZXQncyByZWR1Y2UgaXQgdG8gaGFsZgorCQkgKi8KKwkJaWYgKGRiX3NjYWxlID4gNjQwMCAmJiBudW1zID49IDB4MWYpCisJCQlzcGVjLT52b2x1bWVfb2Zmc2V0ID0gbnVtcyAvIDI7CisJCXNwZWMtPmNoZWNrX3ZvbHVtZV9vZmZzZXQgPSAxOworCX0KKwogCXNwcmludGYobmFtZSwgIiVzIFBsYXliYWNrIFZvbHVtZSIsIHBmeCk7Ci0JZXJyID0gc3RhYzkyeHhfYWRkX2NvbnRyb2woc3BlYywgU1RBQ19DVExfV0lER0VUX1ZPTCwgbmFtZSwKLQkJCQkgICBIREFfQ09NUE9TRV9BTVBfVkFMKG5pZCwgY2hzLCAwLCBIREFfT1VUUFVUKSk7CisJZXJyID0gc3RhYzkyeHhfYWRkX2NvbnRyb2xfaWR4KHNwZWMsIFNUQUNfQ1RMX1dJREdFVF9WT0wsIGlkeCwgbmFtZSwKKwkJSERBX0NPTVBPU0VfQU1QX1ZBTF9PRlMobmlkLCBjaHMsIDAsIEhEQV9PVVRQVVQsCisJCQkJCXNwZWMtPnZvbHVtZV9vZmZzZXQpKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAlzcHJpbnRmKG5hbWUsICIlcyBQbGF5YmFjayBTd2l0Y2giLCBwZngpOwotCWVyciA9IHN0YWM5Mnh4X2FkZF9jb250cm9sKHNwZWMsIFNUQUNfQ1RMX1dJREdFVF9NVVRFLCBuYW1lLAorCWVyciA9IHN0YWM5Mnh4X2FkZF9jb250cm9sX2lkeChzcGVjLCBTVEFDX0NUTF9XSURHRVRfTVVURSwgaWR4LCBuYW1lLAogCQkJCSAgIEhEQV9DT01QT1NFX0FNUF9WQUwobmlkLCBjaHMsIDAsIEhEQV9PVVRQVVQpKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAlyZXR1cm4gMDsKIH0KIAorI2RlZmluZSBjcmVhdGVfY29udHJvbHMoY29kZWMsIHBmeCwgbmlkLCBjaHMpIFwKKwljcmVhdGVfY29udHJvbHNfaWR4KGNvZGVjLCBwZngsIDAsIG5pZCwgY2hzKQorCiBzdGF0aWMgaW50IGFkZF9zcGVjX2RhY3Moc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMsIGhkYV9uaWRfdCBuaWQpCiB7CiAJaWYgKHNwZWMtPm11bHRpb3V0Lm51bV9kYWNzID4gNCkgewpAQCAtMzAzNyw0MCArMzA1OSwzMiBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgaW50IGlzX3VuaXF1ZV9kYWMoc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMsIGhkYV9uaWRfdCBuaWQpCi17Ci0JaW50IGk7Ci0KLQlpZiAoc3BlYy0+YXV0b2NmZy5saW5lX291dHMgIT0gMSkKLQkJcmV0dXJuIDA7Ci0JaWYgKHNwZWMtPm11bHRpb3V0LmhwX25pZCA9PSBuaWQpCi0JCXJldHVybiAwOwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNwZWMtPm11bHRpb3V0LmV4dHJhX291dF9uaWQpOyBpKyspCi0JCWlmIChzcGVjLT5tdWx0aW91dC5leHRyYV9vdXRfbmlkW2ldID09IG5pZCkKLQkJCXJldHVybiAwOwotCXJldHVybiAxOwotfQotCi0vKiBhZGQgcGxheWJhY2sgY29udHJvbHMgZnJvbSB0aGUgcGFyc2VkIERBQyB0YWJsZSAqLwotc3RhdGljIGludCBzdGFjOTJ4eF9hdXRvX2NyZWF0ZV9tdWx0aV9vdXRfY3RscyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKLQkJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBhdXRvX3Bpbl9jZmcgKmNmZykKKy8qIENyZWF0ZSBvdXRwdXQgY29udHJvbHMKKyAqIFRoZSBtaXhlciBlbGVtZW50cyBhcmUgbmFtZWQgZGVwZW5kaW5nIG9uIHRoZSBnaXZlbiB0eXBlIChBVVRPX1BJTl9YWFhfT1VUKQorICovCitzdGF0aWMgaW50IGNyZWF0ZV9tdWx0aV9vdXRfY3RscyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaW50IG51bV9vdXRzLAorCQkJCSBjb25zdCBoZGFfbmlkX3QgKnBpbnMsCisJCQkJIGNvbnN0IGhkYV9uaWRfdCAqZGFjX25pZHMsCisJCQkJIGludCB0eXBlKQogewogCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJc3RhdGljIGNvbnN0IGNoYXIgKmNobmFtZVs0XSA9IHsKIAkJIkZyb250IiwgIlN1cnJvdW5kIiwgTlVMTCAvKkNMRkUqLywgIlNpZGUiCiAJfTsKLQloZGFfbmlkX3QgbmlkID0gMDsKKwloZGFfbmlkX3QgbmlkOwogCWludCBpLCBlcnI7CiAJdW5zaWduZWQgaW50IHdpZF9jYXBzOwogCi0JZm9yIChpID0gMDsgaSA8IGNmZy0+bGluZV9vdXRzICYmIHNwZWMtPm11bHRpb3V0LmRhY19uaWRzW2ldOyBpKyspIHsKLQkJbmlkID0gc3BlYy0+bXVsdGlvdXQuZGFjX25pZHNbaV07Ci0JCWlmIChpID09IDIpIHsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX291dHMgJiYgaSA8IEFSUkFZX1NJWkUoY2huYW1lKTsgaSsrKSB7CisJCW5pZCA9IGRhY19uaWRzW2ldOworCQlpZiAoIW5pZCkKKwkJCWNvbnRpbnVlOworCQlpZiAodHlwZSAhPSBBVVRPX1BJTl9IUF9PVVQgJiYgaSA9PSAyKSB7CiAJCQkvKiBDZW50ZXIvTEZFICovCi0JCQllcnIgPSBjcmVhdGVfY29udHJvbHMoc3BlYywgIkNlbnRlciIsIG5pZCwgMSk7CisJCQllcnIgPSBjcmVhdGVfY29udHJvbHMoY29kZWMsICJDZW50ZXIiLCBuaWQsIDEpOwogCQkJaWYgKGVyciA8IDApCiAJCQkJcmV0dXJuIGVycjsKLQkJCWVyciA9IGNyZWF0ZV9jb250cm9scyhzcGVjLCAiTEZFIiwgbmlkLCAyKTsKKwkJCWVyciA9IGNyZWF0ZV9jb250cm9scyhjb2RlYywgIkxGRSIsIG5pZCwgMik7CiAJCQlpZiAoZXJyIDwgMCkKIAkJCQlyZXR1cm4gZXJyOwogCkBAIC0zMDg2LDIzICszMTAwLDQ3IEBACiAJCQl9CiAKIAkJfSBlbHNlIHsKLQkJCWNvbnN0IGNoYXIgKm5hbWUgPSBjaG5hbWVbaV07Ci0JCQkvKiBpZiBpdCdzIGEgc2luZ2xlIERBQywgYXNzaWduIGEgYmV0dGVyIG5hbWUgKi8KLQkJCWlmICghaSAmJiBpc191bmlxdWVfZGFjKHNwZWMsIG5pZCkpIHsKLQkJCQlzd2l0Y2ggKGNmZy0+bGluZV9vdXRfdHlwZSkgewotCQkJCWNhc2UgQVVUT19QSU5fSFBfT1VUOgotCQkJCQluYW1lID0gIkhlYWRwaG9uZSI7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgQVVUT19QSU5fU1BFQUtFUl9PVVQ6Ci0JCQkJCW5hbWUgPSAiU3BlYWtlciI7Ci0JCQkJCWJyZWFrOwotCQkJCX0KKwkJCWNvbnN0IGNoYXIgKm5hbWU7CisJCQlpbnQgaWR4OworCQkJc3dpdGNoICh0eXBlKSB7CisJCQljYXNlIEFVVE9fUElOX0hQX09VVDoKKwkJCQluYW1lID0gIkhlYWRwaG9uZSI7CisJCQkJaWR4ID0gaTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQVVUT19QSU5fU1BFQUtFUl9PVVQ6CisJCQkJbmFtZSA9ICJTcGVha2VyIjsKKwkJCQlpZHggPSBpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQluYW1lID0gY2huYW1lW2ldOworCQkJCWlkeCA9IDA7CisJCQkJYnJlYWs7CiAJCQl9Ci0JCQllcnIgPSBjcmVhdGVfY29udHJvbHMoc3BlYywgbmFtZSwgbmlkLCAzKTsKKwkJCWVyciA9IGNyZWF0ZV9jb250cm9sc19pZHgoY29kZWMsIG5hbWUsIGlkeCwgbmlkLCAzKTsKIAkJCWlmIChlcnIgPCAwKQogCQkJCXJldHVybiBlcnI7CisJCQlpZiAodHlwZSA9PSBBVVRPX1BJTl9IUF9PVVQgJiYgIXNwZWMtPmhwX2RldGVjdCkgeworCQkJCXdpZF9jYXBzID0gZ2V0X3djYXBzKGNvZGVjLCBwaW5zW2ldKTsKKwkJCQlpZiAod2lkX2NhcHMgJiBBQ19XQ0FQX1VOU09MX0NBUCkKKwkJCQkJc3BlYy0+aHBfZGV0ZWN0ID0gMTsKKwkJCX0KIAkJfQogCX0KKwlyZXR1cm4gMDsKK30KKworLyogYWRkIHBsYXliYWNrIGNvbnRyb2xzIGZyb20gdGhlIHBhcnNlZCBEQUMgdGFibGUgKi8KK3N0YXRpYyBpbnQgc3RhYzkyeHhfYXV0b19jcmVhdGVfbXVsdGlfb3V0X2N0bHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgYXV0b19waW5fY2ZnICpjZmcpCit7CisJc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlpbnQgZXJyOworCisJZXJyID0gY3JlYXRlX211bHRpX291dF9jdGxzKGNvZGVjLCBjZmctPmxpbmVfb3V0cywgY2ZnLT5saW5lX291dF9waW5zLAorCQkJCSAgICBzcGVjLT5tdWx0aW91dC5kYWNfbmlkcywKKwkJCQkgICAgY2ZnLT5saW5lX291dF90eXBlKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCWlmIChjZmctPmhwX291dHMgPiAxICYmIGNmZy0+bGluZV9vdXRfdHlwZSA9PSBBVVRPX1BJTl9MSU5FX09VVCkgewogCQllcnIgPSBzdGFjOTJ4eF9hZGRfY29udHJvbChzcGVjLApAQCAtMzEzNyw0MCArMzE3NSwxOCBAQAogCQkJCQlzdHJ1Y3QgYXV0b19waW5fY2ZnICpjZmcpCiB7CiAJc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQloZGFfbmlkX3QgbmlkOwotCWludCBpLCBlcnIsIG51bXM7CisJaW50IGVycjsKIAotCW51bXMgPSAwOwotCWZvciAoaSA9IDA7IGkgPCBjZmctPmhwX291dHM7IGkrKykgewotCQlzdGF0aWMgY29uc3QgY2hhciAqcGZ4c1tdID0gewotCQkJIkhlYWRwaG9uZSIsICJIZWFkcGhvbmUyIiwgIkhlYWRwaG9uZTMiLAotCQl9OwotCQl1bnNpZ25lZCBpbnQgd2lkX2NhcHMgPSBnZXRfd2NhcHMoY29kZWMsIGNmZy0+aHBfcGluc1tpXSk7Ci0JCWlmICh3aWRfY2FwcyAmIEFDX1dDQVBfVU5TT0xfQ0FQKQotCQkJc3BlYy0+aHBfZGV0ZWN0ID0gMTsKLQkJaWYgKG51bXMgPj0gQVJSQVlfU0laRShwZnhzKSkKLQkJCWNvbnRpbnVlOwotCQluaWQgPSBzcGVjLT5ocF9kYWNzW2ldOwotCQlpZiAoIW5pZCkKLQkJCWNvbnRpbnVlOwotCQllcnIgPSBjcmVhdGVfY29udHJvbHMoc3BlYywgcGZ4c1tudW1zKytdLCBuaWQsIDMpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7Ci0JfQotCW51bXMgPSAwOwotCWZvciAoaSA9IDA7IGkgPCBjZmctPnNwZWFrZXJfb3V0czsgaSsrKSB7Ci0JCXN0YXRpYyBjb25zdCBjaGFyICpwZnhzW10gPSB7Ci0JCQkiU3BlYWtlciIsICJFeHRlcm5hbCBTcGVha2VyIiwgIlNwZWFrZXIyIiwKLQkJfTsKLQkJaWYgKG51bXMgPj0gQVJSQVlfU0laRShwZnhzKSkKLQkJCWNvbnRpbnVlOwotCQluaWQgPSBzcGVjLT5zcGVha2VyX2RhY3NbaV07Ci0JCWlmICghbmlkKQotCQkJY29udGludWU7Ci0JCWVyciA9IGNyZWF0ZV9jb250cm9scyhzcGVjLCBwZnhzW251bXMrK10sIG5pZCwgMyk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQl9CisJZXJyID0gY3JlYXRlX211bHRpX291dF9jdGxzKGNvZGVjLCBjZmctPmhwX291dHMsIGNmZy0+aHBfcGlucywKKwkJCQkgICAgc3BlYy0+aHBfZGFjcywgQVVUT19QSU5fSFBfT1VUKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IGNyZWF0ZV9tdWx0aV9vdXRfY3Rscyhjb2RlYywgY2ZnLT5zcGVha2VyX291dHMsIGNmZy0+c3BlYWtlcl9waW5zLAorCQkJCSAgICBzcGVjLT5zcGVha2VyX2RhY3MsIEFVVE9fUElOX1NQRUFLRVJfT1VUKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwogCXJldHVybiAwOwogfQogCkBAIC0zMzc5LDExICszMzk1LDcgQEAKIAkJdW5zaWduZWQgaW50IHdjYXBzOwogCQl1bnNpZ25lZCBpbnQgZGVmX2NvbmY7CiAKLQkJZGVmX2NvbmYgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsCi0JCQkJCSAgICAgIHNwZWMtPmRtaWNfbmlkc1tpXSwKLQkJCQkJICAgICAgMCwKLQkJCQkJICAgICAgQUNfVkVSQl9HRVRfQ09ORklHX0RFRkFVTFQsCi0JCQkJCSAgICAgIDApOworCQlkZWZfY29uZiA9IHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyhjb2RlYywgc3BlYy0+ZG1pY19uaWRzW2ldKTsKIAkJaWYgKGdldF9kZWZjZmdfY29ubmVjdChkZWZfY29uZikgPT0gQUNfSkFDS19QT1JUX05PTkUpCiAJCQljb250aW51ZTsKIApAQCAtMzUwNyw2ICszNTE5LDcgQEAKIHN0YXRpYyBpbnQgc3RhYzkyeHhfcGFyc2VfYXV0b19jb25maWcoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBkaWdfb3V0LCBoZGFfbmlkX3QgZGlnX2luKQogewogCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJaW50IGhwX3N3YXAgPSAwOwogCWludCBlcnI7CiAKIAlpZiAoKGVyciA9IHNuZF9oZGFfcGFyc2VfcGluX2RlZl9jb25maWcoY29kZWMsCkBAIC0zNTE2LDcgKzM1MjksNiBAQAogCWlmICghIHNwZWMtPmF1dG9jZmcubGluZV9vdXRzKQogCQlyZXR1cm4gMDsgLyogY2FuJ3QgZmluZCB2YWxpZCBwaW4gY29uZmlnICovCiAKLSNpZiAwIC8qIEZJWE1FOiB0ZW1wb3JhcmlseSBkaXNhYmxlZCAqLwogCS8qIElmIHdlIGhhdmUgbm8gcmVhbCBsaW5lLW91dCBwaW4gYW5kIG11bHRpcGxlIGhwLW91dHMsIEhQcyBzaG91bGQKIAkgKiBiZSBzZXQgdXAgYXMgbXVsdGktY2hhbm5lbCBvdXRwdXRzLgogCSAqLwpAQCAtMzUzNSw4ICszNTQ3LDggQEAKIAkJc3BlYy0+YXV0b2NmZy5saW5lX291dHMgPSBzcGVjLT5hdXRvY2ZnLmhwX291dHM7CiAJCXNwZWMtPmF1dG9jZmcubGluZV9vdXRfdHlwZSA9IEFVVE9fUElOX0hQX09VVDsKIAkJc3BlYy0+YXV0b2NmZy5ocF9vdXRzID0gMDsKKwkJaHBfc3dhcCA9IDE7CiAJfQotI2VuZGlmIC8qIEZJWE1FOiB0ZW1wb3JhcmlseSBkaXNhYmxlZCAqLwogCWlmIChzcGVjLT5hdXRvY2ZnLm1vbm9fb3V0X3BpbikgewogCQlpbnQgZGlyID0gZ2V0X3djYXBzKGNvZGVjLCBzcGVjLT5hdXRvY2ZnLm1vbm9fb3V0X3BpbikgJgogCQkJKEFDX1dDQVBfT1VUX0FNUCB8IEFDX1dDQVBfSU5fQU1QKTsKQEAgLTM2MjksMTIgKzM2NDEsMTkgQEAKICNlbmRpZgogCiAJZXJyID0gc3RhYzkyeHhfYXV0b19jcmVhdGVfaHBfY3Rscyhjb2RlYywgJnNwZWMtPmF1dG9jZmcpOwotCiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKLQllcnIgPSBzdGFjOTJ4eF9hdXRvX2NyZWF0ZV9hbmFsb2dfaW5wdXRfY3Rscyhjb2RlYywgJnNwZWMtPmF1dG9jZmcpOworCS8qIEFsbCBvdXRwdXQgcGFyc2luZyBkb25lLCBub3cgcmVzdG9yZSB0aGUgc3dhcHBlZCBocCBwaW5zICovCisJaWYgKGhwX3N3YXApIHsKKwkJbWVtY3B5KHNwZWMtPmF1dG9jZmcuaHBfcGlucywgc3BlYy0+YXV0b2NmZy5saW5lX291dF9waW5zLAorCQkgICAgICAgc2l6ZW9mKHNwZWMtPmF1dG9jZmcuaHBfcGlucykpOworCQlzcGVjLT5hdXRvY2ZnLmhwX291dHMgPSBzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0czsKKwkJc3BlYy0+YXV0b2NmZy5saW5lX291dF90eXBlID0gQVVUT19QSU5fSFBfT1VUOworCQlzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0cyA9IDA7CisJfQogCisJZXJyID0gc3RhYzkyeHhfYXV0b19jcmVhdGVfYW5hbG9nX2lucHV0X2N0bHMoY29kZWMsICZzcGVjLT5hdXRvY2ZnKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIApAQCAtMzY2MywxMSArMzY4MiwxNSBAQAogCQkJcmV0dXJuIGVycjsKIAl9CiAKKwllcnIgPSBzdGFjOTJ4eF9hZGRfaW5wdXRfc291cmNlKHNwZWMpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCiAJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgKiAyOwogCWlmIChzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPiAyKQogCQlzcGVjLT5zdXJyX3N3aXRjaCA9IDE7CiAKLQlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfb3V0X3BpbikKKwlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfb3V0cykKIAkJc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQgPSBkaWdfb3V0OwogCWlmIChkaWdfaW4gJiYgc3BlYy0+YXV0b2NmZy5kaWdfaW5fcGluKQogCQlzcGVjLT5kaWdfaW5fbmlkID0gZGlnX2luOwpAQCAtMzczMCw5ICszNzUzLDcgQEAKIAkJZm9yIChpID0gMDsgaSA8IHNwZWMtPmF1dG9jZmcubGluZV9vdXRzICYmIGxmZV9waW4gPT0gMHgwOyBpKyspIHsKIAkJCWhkYV9uaWRfdCBwaW4gPSBzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0X3BpbnNbaV07CiAJCQl1bnNpZ25lZCBpbnQgZGVmY2ZnOwotCQkJZGVmY2ZnID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBwaW4sIDAsCi0JCQkJCQkgQUNfVkVSQl9HRVRfQ09ORklHX0RFRkFVTFQsCi0JCQkJCQkgMHgwMCk7CisJCQlkZWZjZmcgPSBzbmRfaGRhX2NvZGVjX2dldF9waW5jZmcoY29kZWMsIHBpbik7CiAJCQlpZiAoZ2V0X2RlZmNmZ19kZXZpY2UoZGVmY2ZnKSA9PSBBQ19KQUNLX1NQRUFLRVIpIHsKIAkJCQl1bnNpZ25lZCBpbnQgd2NhcHMgPSBnZXRfd2NhcHMoY29kZWMsIHBpbik7CiAJCQkJd2NhcHMgJj0gKEFDX1dDQVBfU1RFUkVPIHwgQUNfV0NBUF9PVVRfQU1QKTsKQEAgLTM3NDUsNyArMzc2Niw3IEBACiAJfQogCiAJaWYgKGxmZV9waW4pIHsKLQkJZXJyID0gY3JlYXRlX2NvbnRyb2xzKHNwZWMsICJMRkUiLCBsZmVfcGluLCAxKTsKKwkJZXJyID0gY3JlYXRlX2NvbnRyb2xzKGNvZGVjLCAiTEZFIiwgbGZlX3BpbiwgMSk7CiAJCWlmIChlcnIgPCAwKQogCQkJcmV0dXJuIGVycjsKIAl9CkBAIC0zNzc2LDcgKzM3OTcsMTEgQEAKIAkJCXJldHVybiBlcnI7CiAJfQogCi0JaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dF9waW4pCisJZXJyID0gc3RhYzkyeHhfYWRkX2lucHV0X3NvdXJjZShzcGVjKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRzKQogCQlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IDB4MDU7CiAJaWYgKHNwZWMtPmF1dG9jZmcuZGlnX2luX3BpbikKIAkJc3BlYy0+ZGlnX2luX25pZCA9IDB4MDQ7CkBAIC0zODMyLDggKzM4NTcsNyBAQAogI2lmZGVmIENPTkZJR19TTkRfSkFDSwogCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJc3RydWN0IHNpZ21hdGVsX2phY2sgKmphY2s7Ci0JaW50IGRlZl9jb25mID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBuaWQsCi0JCQkwLCBBQ19WRVJCX0dFVF9DT05GSUdfREVGQVVMVCwgMCk7CisJaW50IGRlZl9jb25mID0gc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKGNvZGVjLCBuaWQpOwogCWludCBjb25uZWN0aXZpdHkgPSBnZXRfZGVmY2ZnX2Nvbm5lY3QoZGVmX2NvbmYpOwogCWNoYXIgbmFtZVszMl07CiAKQEAgLTM5NDgsNiArMzk3MiwzNiBAQAogc3RhdGljIHZvaWQgc3RhY190b2dnbGVfcG93ZXJfbWFwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkLAogCQkJCSAgaW50IGVuYWJsZSk7CiAKKy8qIG92ZXJyaWRlIHNvbWUgaGludHMgZnJvbSB0aGUgaHdkZXAgZW50cnkgKi8KK3N0YXRpYyB2b2lkIHN0YWNfc3RvcmVfaGludHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwljb25zdCBjaGFyICpwOworCWludCB2YWw7CisKKwl2YWwgPSBzbmRfaGRhX2dldF9ib29sX2hpbnQoY29kZWMsICJocF9kZXRlY3QiKTsKKwlpZiAodmFsID49IDApCisJCXNwZWMtPmhwX2RldGVjdCA9IHZhbDsKKwlwID0gc25kX2hkYV9nZXRfaGludChjb2RlYywgImdwaW9fbWFzayIpOworCWlmIChwKSB7CisJCXNwZWMtPmdwaW9fbWFzayA9IHNpbXBsZV9zdHJ0b3VsKHAsIE5VTEwsIDApOworCQlzcGVjLT5lYXBkX21hc2sgPSBzcGVjLT5ncGlvX2RpciA9IHNwZWMtPmdwaW9fZGF0YSA9CisJCQlzcGVjLT5ncGlvX21hc2s7CisJfQorCXAgPSBzbmRfaGRhX2dldF9oaW50KGNvZGVjLCAiZ3Bpb19kaXIiKTsKKwlpZiAocCkKKwkJc3BlYy0+Z3Bpb19kaXIgPSBzaW1wbGVfc3RydG91bChwLCBOVUxMLCAwKSAmIHNwZWMtPmdwaW9fbWFzazsKKwlwID0gc25kX2hkYV9nZXRfaGludChjb2RlYywgImdwaW9fZGF0YSIpOworCWlmIChwKQorCQlzcGVjLT5ncGlvX2RhdGEgPSBzaW1wbGVfc3RydG91bChwLCBOVUxMLCAwKSAmIHNwZWMtPmdwaW9fbWFzazsKKwlwID0gc25kX2hkYV9nZXRfaGludChjb2RlYywgImVhcGRfbWFzayIpOworCWlmIChwKQorCQlzcGVjLT5lYXBkX21hc2sgPSBzaW1wbGVfc3RydG91bChwLCBOVUxMLCAwKSAmIHNwZWMtPmdwaW9fbWFzazsKKwl2YWwgPSBzbmRfaGRhX2dldF9ib29sX2hpbnQoY29kZWMsICJlYXBkX3N3aXRjaCIpOworCWlmICh2YWwgPj0gMCkKKwkJc3BlYy0+ZWFwZF9zd2l0Y2ggPSB2YWw7Cit9CisKIHN0YXRpYyBpbnQgc3RhYzkyeHhfaW5pdChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwpAQCAtMzk2NCw2ICs0MDE4LDkgQEAKIAkJCQlzcGVjLT5hZGNfbmlkc1tpXSwgMCwKIAkJCQlBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwgQUNfUFdSU1RfRDMpOwogCisJLyogb3ZlcnJpZGUgc29tZSBoaW50cyAqLworCXN0YWNfc3RvcmVfaGludHMoY29kZWMpOworCiAJLyogc2V0IHVwIEdQSU8gKi8KIAlncGlvID0gc3BlYy0+Z3Bpb19kYXRhOwogCS8qIHR1cm4gb24gRUFQRCBzdGF0aWNhbGx5IHdoZW4gc3BlYy0+ZWFwZF9zd2l0Y2ggaXNuJ3Qgc2V0LgpAQCAtNDAxMyw4ICs0MDcwLDcgQEAKIAkJCQkJCQkJIHBpbmN0bCk7CiAJCQkJfQogCQkJfQotCQkJY29uZiA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLCAwLAotCQkJCQkgICAgICBBQ19WRVJCX0dFVF9DT05GSUdfREVGQVVMVCwgMCk7CisJCQljb25mID0gc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKGNvZGVjLCBuaWQpOwogCQkJaWYgKGdldF9kZWZjZmdfY29ubmVjdChjb25mKSAhPSBBQ19KQUNLX1BPUlRfRklYRUQpIHsKIAkJCQllbmFibGVfcGluX2RldGVjdChjb2RlYywgbmlkLAogCQkJCQkJICBTVEFDX0lOU0VSVF9FVkVOVCk7CkBAIC00MDI2LDggKzQwODIsOCBAQAogCWZvciAoaSA9IDA7IGkgPCBzcGVjLT5udW1fZG1pY3M7IGkrKykKIAkJc3RhYzkyeHhfYXV0b19zZXRfcGluY3RsKGNvZGVjLCBzcGVjLT5kbWljX25pZHNbaV0sCiAJCQkJCUFDX1BJTkNUTF9JTl9FTik7Ci0JaWYgKGNmZy0+ZGlnX291dF9waW4pCi0JCXN0YWM5Mnh4X2F1dG9fc2V0X3BpbmN0bChjb2RlYywgY2ZnLT5kaWdfb3V0X3BpbiwKKwlpZiAoY2ZnLT5kaWdfb3V0X3BpbnNbMF0pCisJCXN0YWM5Mnh4X2F1dG9fc2V0X3BpbmN0bChjb2RlYywgY2ZnLT5kaWdfb3V0X3BpbnNbMF0sCiAJCQkJCSBBQ19QSU5DVExfT1VUX0VOKTsKIAlpZiAoY2ZnLT5kaWdfaW5fcGluKQogCQlzdGFjOTJ4eF9hdXRvX3NldF9waW5jdGwoY29kZWMsIGNmZy0+ZGlnX2luX3BpbiwKQEAgLTQwNTUsOCArNDExMSw3IEBACiAJCQlzdGFjX3RvZ2dsZV9wb3dlcl9tYXAoY29kZWMsIG5pZCwgMSk7CiAJCQljb250aW51ZTsKIAkJfQotCQlkZWZfY29uZiA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLCAwLAotCQkJCQkgICAgICBBQ19WRVJCX0dFVF9DT05GSUdfREVGQVVMVCwgMCk7CisJCWRlZl9jb25mID0gc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKGNvZGVjLCBuaWQpOwogCQlkZWZfY29uZiA9IGdldF9kZWZjZmdfY29ubmVjdChkZWZfY29uZik7CiAJCS8qIHNraXAgYW55IHBvcnRzIHRoYXQgZG9uJ3QgaGF2ZSBqYWNrcyBzaW5jZSBwcmVzZW5jZQogIAkJICogZGV0ZWN0aW9uIGlzIHVzZWxlc3MgKi8KQEAgLTQxMTAsNyArNDE2NSw2IEBACiAJaWYgKCEgc3BlYykKIAkJcmV0dXJuOwogCi0Ja2ZyZWUoc3BlYy0+cGluX2NvbmZpZ3MpOwogCXN0YWM5Mnh4X2ZyZWVfamFja3MoY29kZWMpOwogCXNuZF9hcnJheV9mcmVlKCZzcGVjLT5ldmVudHMpOwogCkBAIC00MTIxLDcgKzQxNzUsOSBAQAogc3RhdGljIHZvaWQgc3RhYzkyeHhfc2V0X3BpbmN0bChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCwKIAkJCQl1bnNpZ25lZCBpbnQgZmxhZykKIHsKLQl1bnNpZ25lZCBpbnQgcGluX2N0bCA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLAorCXVuc2lnbmVkIGludCBvbGRfY3RsLCBwaW5fY3RsOworCisJcGluX2N0bCA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLAogCQkJMCwgQUNfVkVSQl9HRVRfUElOX1dJREdFVF9DT05UUk9MLCAweDAwKTsKIAogCWlmIChwaW5fY3RsICYgQUNfUElOQ1RMX0lOX0VOKSB7CkBAIC00MTM1LDE0ICs0MTkxLDE3IEBACiAJCQlyZXR1cm47CiAJfQogCisJb2xkX2N0bCA9IHBpbl9jdGw7CiAJLyogaWYgc2V0dGluZyBwaW4gZGlyZWN0aW9uIGJpdHMsIGNsZWFyIHRoZSBjdXJyZW50CiAJICAgZGlyZWN0aW9uIGJpdHMgZmlyc3QgKi8KIAlpZiAoZmxhZyAmIChBQ19QSU5DVExfSU5fRU4gfCBBQ19QSU5DVExfT1VUX0VOKSkKIAkJcGluX2N0bCAmPSB+KEFDX1BJTkNUTF9JTl9FTiB8IEFDX1BJTkNUTF9PVVRfRU4pOwogCQotCXNuZF9oZGFfY29kZWNfd3JpdGVfY2FjaGUoY29kZWMsIG5pZCwgMCwKLQkJCUFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwKLQkJCXBpbl9jdGwgfCBmbGFnKTsKKwlwaW5fY3RsIHw9IGZsYWc7CisJaWYgKG9sZF9jdGwgIT0gcGluX2N0bCkKKwkJc25kX2hkYV9jb2RlY193cml0ZV9jYWNoZShjb2RlYywgbmlkLCAwLAorCQkJCQkgIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwKKwkJCQkJICBwaW5fY3RsKTsKIH0KIAogc3RhdGljIHZvaWQgc3RhYzkyeHhfcmVzZXRfcGluY3RsKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkLApAQCAtNDE1MCw5ICs0MjA5LDEwIEBACiB7CiAJdW5zaWduZWQgaW50IHBpbl9jdGwgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIG5pZCwKIAkJCTAsIEFDX1ZFUkJfR0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMHgwMCk7Ci0Jc25kX2hkYV9jb2RlY193cml0ZV9jYWNoZShjb2RlYywgbmlkLCAwLAotCQkJQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLAotCQkJcGluX2N0bCAmIH5mbGFnKTsKKwlpZiAocGluX2N0bCAmIGZsYWcpCisJCXNuZF9oZGFfY29kZWNfd3JpdGVfY2FjaGUoY29kZWMsIG5pZCwgMCwKKwkJCQkJICBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsCisJCQkJCSAgcGluX2N0bCAmIH5mbGFnKTsKIH0KIAogc3RhdGljIGludCBnZXRfcGluX3ByZXNlbmNlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkKQpAQCAtNDQxNSw3ICs0NDc1LDYgQEAKIHsKIAlzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCi0Jc3RhYzkyeHhfc2V0X2NvbmZpZ19yZWdzKGNvZGVjKTsKIAlzdGFjOTJ4eF9pbml0KGNvZGVjKTsKIAlzbmRfaGRhX2NvZGVjX3Jlc3VtZV9hbXAoY29kZWMpOwogCXNuZF9oZGFfY29kZWNfcmVzdW1lX2NhY2hlKGNvZGVjKTsKQEAgLTQ0MjYsNiArNDQ4NSwzNyBAQAogCXJldHVybiAwOwogfQogCisKKy8qCisgKiB1c2luZyBwb3dlciBjaGVjayBmb3IgY29udHJvbGxpbmcgbXV0ZSBsZWQgb2YgSFAgSERYIG5vdGVib29rcworICogY2hlY2sgZm9yIG11dGUgc3RhdGUgb25seSBvbiBTcGVha2VycyAobmlkID0gMHgxMCkKKyAqCisgKiBGb3IgdGhpcyBmZWF0dXJlIENPTkZJR19TTkRfSERBX1BPV0VSX1NBVkUgaXMgbmVlZGVkLCBvdGhlcndpc2UKKyAqIHRoZSBMRUQgaXMgTk9UIHdvcmtpbmcgcHJvcGVybHkgIQorICovCisKKyNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCitzdGF0aWMgaW50IHN0YWM5Mnh4X2hwX2hkeF9jaGVja19wb3dlcl9zdGF0dXMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCQkJCSAgICAgIGhkYV9uaWRfdCBuaWQpCit7CisJc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKworCWlmIChuaWQgPT0gMHgxMCkgeworCQlpZiAoc25kX2hkYV9jb2RlY19hbXBfcmVhZChjb2RlYywgbmlkLCAwLCBIREFfT1VUUFVULCAwKSAmCisJCSAgICBIREFfQU1QX01VVEUpCisJCQlzcGVjLT5ncGlvX2RhdGEgJj0gfjB4MDg7ICAvKiBvcmFuZ2UgKi8KKwkJZWxzZQorCQkJc3BlYy0+Z3Bpb19kYXRhIHw9IDB4MDg7ICAgLyogd2hpdGUgKi8KKworCQlzdGFjX2dwaW9fc2V0KGNvZGVjLCBzcGVjLT5ncGlvX21hc2ssCisJCQkgICAgICBzcGVjLT5ncGlvX2RpciwKKwkJCSAgICAgIHNwZWMtPmdwaW9fZGF0YSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKwogc3RhdGljIGludCBzdGFjOTJ4eF9zdXNwZW5kKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKQEAgLTQ0NjQsMTYgKzQ1NTQsMTEgQEAKIAlzcGVjLT5ib2FyZF9jb25maWcgPSBzbmRfaGRhX2NoZWNrX2JvYXJkX2NvbmZpZyhjb2RlYywgU1RBQ185MjAwX01PREVMUywKIAkJCQkJCQlzdGFjOTIwMF9tb2RlbHMsCiAJCQkJCQkJc3RhYzkyMDBfY2ZnX3RibCk7Ci0JaWYgKHNwZWMtPmJvYXJkX2NvbmZpZyA8IDApIHsKKwlpZiAoc3BlYy0+Ym9hcmRfY29uZmlnIDwgMCkKIAkJc25kX3ByaW50ZGQoS0VSTl9JTkZPICJoZGFfY29kZWM6IFVua25vd24gbW9kZWwgZm9yIFNUQUM5MjAwLCB1c2luZyBCSU9TIGRlZmF1bHRzXG4iKTsKLQkJZXJyID0gc3RhYzkyeHhfc2F2ZV9iaW9zX2NvbmZpZ19yZWdzKGNvZGVjKTsKLQl9IGVsc2UKLQkJZXJyID0gc3RhY19zYXZlX3Bpbl9jZmdzKGNvZGVjLAorCWVsc2UKKwkJc3RhYzkyeHhfc2V0X2NvbmZpZ19yZWdzKGNvZGVjLAogCQkJCQkgc3RhYzkyMDBfYnJkX3RibFtzcGVjLT5ib2FyZF9jb25maWddKTsKLQlpZiAoZXJyIDwgMCkgewotCQlzdGFjOTJ4eF9mcmVlKGNvZGVjKTsKLQkJcmV0dXJuIGVycjsKLQl9CiAKIAlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSAyOwogCXNwZWMtPm11bHRpb3V0Lm51bV9kYWNzID0gMTsKQEAgLTQ1NDEsMTcgKzQ2MjYsMTIgQEAKIAkJCQkJCQlzdGFjOTI1eF9tb2RlbHMsCiAJCQkJCQkJc3RhYzkyNXhfY2ZnX3RibCk7CiAgYWdhaW46Ci0JaWYgKHNwZWMtPmJvYXJkX2NvbmZpZyA8IDApIHsKKwlpZiAoc3BlYy0+Ym9hcmRfY29uZmlnIDwgMCkKIAkJc25kX3ByaW50ZGQoS0VSTl9JTkZPICJoZGFfY29kZWM6IFVua25vd24gbW9kZWwgZm9yIFNUQUM5MjV4LCIKIAkJCQkgICAgICAidXNpbmcgQklPUyBkZWZhdWx0c1xuIik7Ci0JCWVyciA9IHN0YWM5Mnh4X3NhdmVfYmlvc19jb25maWdfcmVncyhjb2RlYyk7Ci0JfSBlbHNlCi0JCWVyciA9IHN0YWNfc2F2ZV9waW5fY2Zncyhjb2RlYywKKwllbHNlCisJCXN0YWM5Mnh4X3NldF9jb25maWdfcmVncyhjb2RlYywKIAkJCQkJIHN0YWM5MjV4X2JyZF90Ymxbc3BlYy0+Ym9hcmRfY29uZmlnXSk7Ci0JaWYgKGVyciA8IDApIHsKLQkJc3RhYzkyeHhfZnJlZShjb2RlYyk7Ci0JCXJldHVybiBlcnI7Ci0JfQogCiAJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gMjsKIAlzcGVjLT5tdWx0aW91dC5udW1fZGFjcyA9IDE7CkBAIC00NjI5LDE3ICs0NzA5LDEyIEBACiAJCQkJCQkJc3RhYzkyaGQ3M3h4X21vZGVscywKIAkJCQkJCQlzdGFjOTJoZDczeHhfY2ZnX3RibCk7CiBhZ2FpbjoKLQlpZiAoc3BlYy0+Ym9hcmRfY29uZmlnIDwgMCkgeworCWlmIChzcGVjLT5ib2FyZF9jb25maWcgPCAwKQogCQlzbmRfcHJpbnRkZChLRVJOX0lORk8gImhkYV9jb2RlYzogVW5rbm93biBtb2RlbCBmb3IiCiAJCQkiIFNUQUM5MkhENzNYWCwgdXNpbmcgQklPUyBkZWZhdWx0c1xuIik7Ci0JCWVyciA9IHN0YWM5Mnh4X3NhdmVfYmlvc19jb25maWdfcmVncyhjb2RlYyk7Ci0JfSBlbHNlCi0JCWVyciA9IHN0YWNfc2F2ZV9waW5fY2Zncyhjb2RlYywKKwllbHNlCisJCXN0YWM5Mnh4X3NldF9jb25maWdfcmVncyhjb2RlYywKIAkJCQlzdGFjOTJoZDczeHhfYnJkX3RibFtzcGVjLT5ib2FyZF9jb25maWddKTsKLQlpZiAoZXJyIDwgMCkgewotCQlzdGFjOTJ4eF9mcmVlKGNvZGVjKTsKLQkJcmV0dXJuIGVycjsKLQl9CiAKIAludW1fZGFjcyA9IHNuZF9oZGFfZ2V0X2Nvbm5lY3Rpb25zKGNvZGVjLCAweDBhLAogCQkJY29ubiwgU1RBQzkySEQ3M19EQUNfQ09VTlQgKyAyKSAtIDE7CkBAIC00NjUzLDE0ICs0NzI4LDE4IEBACiAJY2FzZSAweDM6IC8qIDYgQ2hhbm5lbCAqLwogCQlzcGVjLT5taXhlciA9IHN0YWM5MmhkNzN4eF82Y2hfbWl4ZXI7CiAJCXNwZWMtPmluaXQgPSBzdGFjOTJoZDczeHhfNmNoX2NvcmVfaW5pdDsKKwkJc3BlYy0+YWxvb3BiYWNrX2N0bCA9IHN0YWM5MmhkNzN4eF82Y2hfbG9vcGJhY2s7CiAJCWJyZWFrOwogCWNhc2UgMHg0OiAvKiA4IENoYW5uZWwgKi8KIAkJc3BlYy0+bWl4ZXIgPSBzdGFjOTJoZDczeHhfOGNoX21peGVyOwogCQlzcGVjLT5pbml0ID0gc3RhYzkyaGQ3M3h4XzhjaF9jb3JlX2luaXQ7CisJCXNwZWMtPmFsb29wYmFja19jdGwgPSBzdGFjOTJoZDczeHhfOGNoX2xvb3BiYWNrOwogCQlicmVhazsKIAljYXNlIDB4NTogLyogMTAgQ2hhbm5lbCAqLwogCQlzcGVjLT5taXhlciA9IHN0YWM5MmhkNzN4eF8xMGNoX21peGVyOwogCQlzcGVjLT5pbml0ID0gc3RhYzkyaGQ3M3h4XzEwY2hfY29yZV9pbml0OworCQlzcGVjLT5hbG9vcGJhY2tfY3RsID0gc3RhYzkyaGQ3M3h4XzEwY2hfbG9vcGJhY2s7CisJCWJyZWFrOwogCX0KIAlzcGVjLT5tdWx0aW91dC5kYWNfbmlkcyA9IHNwZWMtPmRhY19uaWRzOwogCkBAIC00Njk5LDE4ICs0Nzc4LDE4IEBACiAJCQlzcGVjLT5pbml0ID0gZGVsbF9tNl9jb3JlX2luaXQ7CiAJCXN3aXRjaCAoc3BlYy0+Ym9hcmRfY29uZmlnKSB7CiAJCWNhc2UgU1RBQ19ERUxMX002X0FNSUM6IC8qIEFuYWxvZyBNaWNzICovCi0JCQlzdGFjOTJ4eF9zZXRfY29uZmlnX3JlZyhjb2RlYywgMHgwYiwgMHg5MEE3MDE3MCk7CisJCQlzbmRfaGRhX2NvZGVjX3NldF9waW5jZmcoY29kZWMsIDB4MGIsIDB4OTBBNzAxNzApOwogCQkJc3BlYy0+bnVtX2RtaWNzID0gMDsKIAkJCXNwZWMtPnByaXZhdGVfZGltdXgubnVtX2l0ZW1zID0gMTsKIAkJCWJyZWFrOwogCQljYXNlIFNUQUNfREVMTF9NNl9ETUlDOiAvKiBEaWdpdGFsIE1pY3MgKi8KLQkJCXN0YWM5Mnh4X3NldF9jb25maWdfcmVnKGNvZGVjLCAweDEzLCAweDkwQTYwMTYwKTsKKwkJCXNuZF9oZGFfY29kZWNfc2V0X3BpbmNmZyhjb2RlYywgMHgxMywgMHg5MEE2MDE2MCk7CiAJCQlzcGVjLT5udW1fZG1pY3MgPSAxOwogCQkJc3BlYy0+cHJpdmF0ZV9kaW11eC5udW1faXRlbXMgPSAyOwogCQkJYnJlYWs7CiAJCWNhc2UgU1RBQ19ERUxMX002X0JPVEg6IC8qIEJvdGggKi8KLQkJCXN0YWM5Mnh4X3NldF9jb25maWdfcmVnKGNvZGVjLCAweDBiLCAweDkwQTcwMTcwKTsKLQkJCXN0YWM5Mnh4X3NldF9jb25maWdfcmVnKGNvZGVjLCAweDEzLCAweDkwQTYwMTYwKTsKKwkJCXNuZF9oZGFfY29kZWNfc2V0X3BpbmNmZyhjb2RlYywgMHgwYiwgMHg5MEE3MDE3MCk7CisJCQlzbmRfaGRhX2NvZGVjX3NldF9waW5jZmcoY29kZWMsIDB4MTMsIDB4OTBBNjAxNjApOwogCQkJc3BlYy0+bnVtX2RtaWNzID0gMTsKIAkJCXNwZWMtPnByaXZhdGVfZGltdXgubnVtX2l0ZW1zID0gMjsKIAkJCWJyZWFrOwpAQCAtNDc3Myw2ICs0ODUyLDcgQEAKIAloZGFfbmlkX3QgY29ubltTVEFDOTJIRDgzX0RBQ19DT1VOVCArIDFdOwogCWludCBlcnI7CiAJaW50IG51bV9kYWNzOworCWhkYV9uaWRfdCBuaWQ7CiAKIAlzcGVjICA9IGt6YWxsb2Moc2l6ZW9mKCpzcGVjKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHNwZWMgPT0gTlVMTCkKQEAgLTQ3OTEsMTUgKzQ4NzEsNiBAQAogCXNwZWMtPm51bV9wd3JzID0gQVJSQVlfU0laRShzdGFjOTJoZDgzeHh4X3B3cl9uaWRzKTsKIAlzcGVjLT5tdWx0aW91dC5kYWNfbmlkcyA9IHNwZWMtPmRhY19uaWRzOwogCi0KLQkvKiBzZXQgcG9ydCAweGUgdG8gc2VsZWN0IHRoZSBsYXN0IERBQwotCSAqLwotCW51bV9kYWNzID0gc25kX2hkYV9nZXRfY29ubmVjdGlvbnMoY29kZWMsIDB4MGUsCi0JCWNvbm4sIFNUQUM5MkhEODNfREFDX0NPVU5UICsgMSkgLSAxOwotCi0Jc25kX2hkYV9jb2RlY193cml0ZV9jYWNoZShjb2RlYywgMHhlLCAwLAotCQlBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgbnVtX2RhY3MpOwotCiAJc3BlYy0+aW5pdCA9IHN0YWM5MmhkODN4eHhfY29yZV9pbml0OwogCXNwZWMtPm1peGVyID0gc3RhYzkyaGQ4M3h4eF9taXhlcjsKIAlzcGVjLT5udW1fcGlucyA9IEFSUkFZX1NJWkUoc3RhYzkyaGQ4M3h4eF9waW5fbmlkcyk7CkBAIC00ODE0LDE3ICs0ODg1LDEyIEBACiAJCQkJCQkJc3RhYzkyaGQ4M3h4eF9tb2RlbHMsCiAJCQkJCQkJc3RhYzkyaGQ4M3h4eF9jZmdfdGJsKTsKIGFnYWluOgotCWlmIChzcGVjLT5ib2FyZF9jb25maWcgPCAwKSB7CisJaWYgKHNwZWMtPmJvYXJkX2NvbmZpZyA8IDApCiAJCXNuZF9wcmludGRkKEtFUk5fSU5GTyAiaGRhX2NvZGVjOiBVbmtub3duIG1vZGVsIGZvciIKIAkJCSIgU1RBQzkySEQ4M1hYWCwgdXNpbmcgQklPUyBkZWZhdWx0c1xuIik7Ci0JCWVyciA9IHN0YWM5Mnh4X3NhdmVfYmlvc19jb25maWdfcmVncyhjb2RlYyk7Ci0JfSBlbHNlCi0JCWVyciA9IHN0YWNfc2F2ZV9waW5fY2Zncyhjb2RlYywKKwllbHNlCisJCXN0YWM5Mnh4X3NldF9jb25maWdfcmVncyhjb2RlYywKIAkJCQlzdGFjOTJoZDgzeHh4X2JyZF90Ymxbc3BlYy0+Ym9hcmRfY29uZmlnXSk7Ci0JaWYgKGVyciA8IDApIHsKLQkJc3RhYzkyeHhfZnJlZShjb2RlYyk7Ci0JCXJldHVybiBlcnI7Ci0JfQogCiAJc3dpdGNoIChjb2RlYy0+dmVuZG9yX2lkKSB7CiAJY2FzZSAweDExMWQ3NjA0OgpAQCAtNDg1MSw2ICs0OTE3LDIzIEBACiAJCXJldHVybiBlcnI7CiAJfQogCisJc3dpdGNoIChzcGVjLT5ib2FyZF9jb25maWcpIHsKKwljYXNlIFNUQUNfREVMTF9TMTQ6CisJCW5pZCA9IDB4ZjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJbmlkID0gMHhlOworCQlicmVhazsKKwl9CisKKwludW1fZGFjcyA9IHNuZF9oZGFfZ2V0X2Nvbm5lY3Rpb25zKGNvZGVjLCBuaWQsCisJCQkJY29ubiwgU1RBQzkySEQ4M19EQUNfQ09VTlQgKyAxKSAtIDE7CisKKwkvKiBzZXQgcG9ydCBYIHRvIHNlbGVjdCB0aGUgbGFzdCBEQUMKKwkgKi8KKwlzbmRfaGRhX2NvZGVjX3dyaXRlX2NhY2hlKGNvZGVjLCBuaWQsIDAsCisJCQlBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgbnVtX2RhY3MpOworCiAJY29kZWMtPnBhdGNoX29wcyA9IHN0YWM5Mnh4X3BhdGNoX29wczsKIAogCWNvZGVjLT5wcm9jX3dpZGdldF9ob29rID0gc3RhYzkyaGRfcHJvY19ob29rOwpAQCAtNDg1OCw3ICs0OTQxLDE2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX2lucHV0X211eCBzdGFjOTJoZDcxYnh4X2RtdXggPSB7CitzdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggc3RhYzkyaGQ3MWJ4eF9kbXV4X25vbWl4ZXIgPSB7CisJLm51bV9pdGVtcyA9IDMsCisJLml0ZW1zID0geworCQl7ICJBbmFsb2cgSW5wdXRzIiwgMHgwMCB9LAorCQl7ICJEaWdpdGFsIE1pYyAxIiwgMHgwMiB9LAorCQl7ICJEaWdpdGFsIE1pYyAyIiwgMHgwMyB9LAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgaGRhX2lucHV0X211eCBzdGFjOTJoZDcxYnh4X2RtdXhfYW1peGVyID0gewogCS5udW1faXRlbXMgPSA0LAogCS5pdGVtcyA9IHsKIAkJeyAiQW5hbG9nIElucHV0cyIsIDB4MDAgfSwKQEAgLTQ4NjgsMTAgKzQ5NjAsNjcgQEAKIAl9CiB9OwogCisvKiBnZXQgdGhlIHBpbiBjb25uZWN0aW9uIChmaXhlZCwgbm9uZSwgZXRjKSAqLworc3RhdGljIHVuc2lnbmVkIGludCBzdGFjX2dldF9kZWZjZmdfY29ubmVjdChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaW50IGlkeCkKK3sKKwlzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCXVuc2lnbmVkIGludCBjZmc7CisKKwljZmcgPSBzbmRfaGRhX2NvZGVjX2dldF9waW5jZmcoY29kZWMsIHNwZWMtPnBpbl9uaWRzW2lkeF0pOworCXJldHVybiBnZXRfZGVmY2ZnX2Nvbm5lY3QoY2ZnKTsKK30KKworc3RhdGljIGludCBzdGFjOTJoZDcxYnh4X2Nvbm5lY3RlZF9wb3J0cyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKKwkJCQkJIGhkYV9uaWRfdCAqbmlkcywgaW50IG51bV9uaWRzKQoreworCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJaW50IGlkeCwgbnVtOworCXVuc2lnbmVkIGludCBkZWZfY29uZjsKKworCWZvciAobnVtID0gMDsgbnVtIDwgbnVtX25pZHM7IG51bSsrKSB7CisJCWZvciAoaWR4ID0gMDsgaWR4IDwgc3BlYy0+bnVtX3BpbnM7IGlkeCsrKQorCQkJaWYgKHNwZWMtPnBpbl9uaWRzW2lkeF0gPT0gbmlkc1tudW1dKQorCQkJCWJyZWFrOworCQlpZiAoaWR4ID49IHNwZWMtPm51bV9waW5zKQorCQkJYnJlYWs7CisJCWRlZl9jb25mID0gc3RhY19nZXRfZGVmY2ZnX2Nvbm5lY3QoY29kZWMsIGlkeCk7CisJCWlmIChkZWZfY29uZiA9PSBBQ19KQUNLX1BPUlRfTk9ORSkKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gbnVtOworfQorCitzdGF0aWMgaW50IHN0YWM5MmhkNzFieHhfY29ubmVjdGVkX3NtdXhlcyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKKwkJCQkJICBoZGFfbmlkX3QgZGlnMHBpbikKK3sKKwlzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCWludCBpZHg7CisKKwlmb3IgKGlkeCA9IDA7IGlkeCA8IHNwZWMtPm51bV9waW5zOyBpZHgrKykKKwkJaWYgKHNwZWMtPnBpbl9uaWRzW2lkeF0gPT0gZGlnMHBpbikKKwkJCWJyZWFrOworCWlmICgoaWR4ICsgMikgPj0gc3BlYy0+bnVtX3BpbnMpCisJCXJldHVybiAwOworCisJLyogZGlnMXBpbiBjYXNlICovCisJaWYgKHN0YWNfZ2V0X2RlZmNmZ19jb25uZWN0KGNvZGVjLCBpZHggKyAxKSAhPSBBQ19KQUNLX1BPUlRfTk9ORSkKKwkJcmV0dXJuIDI7CisKKwkvKiBkaWcwcGluICsgZGlnMnBpbiBjYXNlICovCisJaWYgKHN0YWNfZ2V0X2RlZmNmZ19jb25uZWN0KGNvZGVjLCBpZHggKyAyKSAhPSBBQ19KQUNLX1BPUlRfTk9ORSkKKwkJcmV0dXJuIDI7CisJaWYgKHN0YWNfZ2V0X2RlZmNmZ19jb25uZWN0KGNvZGVjLCBpZHgpICE9IEFDX0pBQ0tfUE9SVF9OT05FKQorCQlyZXR1cm4gMTsKKwllbHNlCisJCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHBhdGNoX3N0YWM5MmhkNzFieHgoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWM7CisJc3RydWN0IGhkYV92ZXJiICp1bm11dGVfaW5pdCA9IHN0YWM5MmhkNzFieHhfdW5tdXRlX2NvcmVfaW5pdDsKIAlpbnQgZXJyID0gMDsKKwl1bnNpZ25lZCBpbnQgbmRtaWNfbmlkcyA9IDA7CiAKIAlzcGVjICA9IGt6YWxsb2Moc2l6ZW9mKCpzcGVjKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHNwZWMgPT0gTlVMTCkKQEAgLTQ4NzksMjcgKzUwMjgsMzIgQEAKIAogCWNvZGVjLT5zcGVjID0gc3BlYzsKIAljb2RlYy0+cGF0Y2hfb3BzID0gc3RhYzkyeHhfcGF0Y2hfb3BzOwotCXNwZWMtPm51bV9waW5zID0gQVJSQVlfU0laRShzdGFjOTJoZDcxYnh4X3Bpbl9uaWRzKTsKKwlzcGVjLT5udW1fcGlucyA9IFNUQUM5MkhENzFCWFhfTlVNX1BJTlM7CisJc3dpdGNoIChjb2RlYy0+dmVuZG9yX2lkKSB7CisJY2FzZSAweDExMWQ3NmI2OgorCWNhc2UgMHgxMTFkNzZiNzoKKwkJc3BlYy0+cGluX25pZHMgPSBzdGFjOTJoZDcxYnh4X3Bpbl9uaWRzXzRwb3J0OworCQlicmVhazsKKwljYXNlIDB4MTExZDc2MDM6CisJY2FzZSAweDExMWQ3NjA4OgorCQkvKiBPbiA5MkhENzVCeCAweDI3IGlzbid0IGEgcGluIG5pZCAqLworCQlzcGVjLT5udW1fcGlucy0tOworCQkvKiBmYWxsdGhyb3VnaCAqLworCWRlZmF1bHQ6CisJCXNwZWMtPnBpbl9uaWRzID0gc3RhYzkyaGQ3MWJ4eF9waW5fbmlkc182cG9ydDsKKwl9CiAJc3BlYy0+bnVtX3B3cnMgPSBBUlJBWV9TSVpFKHN0YWM5MmhkNzFieHhfcHdyX25pZHMpOwotCXNwZWMtPnBpbl9uaWRzID0gc3RhYzkyaGQ3MWJ4eF9waW5fbmlkczsKLQltZW1jcHkoJnNwZWMtPnByaXZhdGVfZGltdXgsICZzdGFjOTJoZDcxYnh4X2RtdXgsCi0JCQlzaXplb2Yoc3RhYzkyaGQ3MWJ4eF9kbXV4KSk7CiAJc3BlYy0+Ym9hcmRfY29uZmlnID0gc25kX2hkYV9jaGVja19ib2FyZF9jb25maWcoY29kZWMsCiAJCQkJCQkJU1RBQ185MkhENzFCWFhfTU9ERUxTLAogCQkJCQkJCXN0YWM5MmhkNzFieHhfbW9kZWxzLAogCQkJCQkJCXN0YWM5MmhkNzFieHhfY2ZnX3RibCk7CiBhZ2FpbjoKLQlpZiAoc3BlYy0+Ym9hcmRfY29uZmlnIDwgMCkgeworCWlmIChzcGVjLT5ib2FyZF9jb25maWcgPCAwKQogCQlzbmRfcHJpbnRkZChLRVJOX0lORk8gImhkYV9jb2RlYzogVW5rbm93biBtb2RlbCBmb3IiCiAJCQkiIFNUQUM5MkhENzFCWFgsIHVzaW5nIEJJT1MgZGVmYXVsdHNcbiIpOwotCQllcnIgPSBzdGFjOTJ4eF9zYXZlX2Jpb3NfY29uZmlnX3JlZ3MoY29kZWMpOwotCX0gZWxzZQotCQllcnIgPSBzdGFjX3NhdmVfcGluX2NmZ3MoY29kZWMsCisJZWxzZQorCQlzdGFjOTJ4eF9zZXRfY29uZmlnX3JlZ3MoY29kZWMsCiAJCQkJc3RhYzkyaGQ3MWJ4eF9icmRfdGJsW3NwZWMtPmJvYXJkX2NvbmZpZ10pOwotCWlmIChlcnIgPCAwKSB7Ci0JCXN0YWM5Mnh4X2ZyZWUoY29kZWMpOwotCQlyZXR1cm4gZXJyOwotCX0KIAogCWlmIChzcGVjLT5ib2FyZF9jb25maWcgPiBTVEFDXzkySEQ3MUJYWF9SRUYpIHsKIAkJLyogR1BJTzAgPSBFQVBEICovCkBAIC00OTA4LDE2ICs1MDYyLDM0IEBACiAJCXNwZWMtPmdwaW9fZGF0YSA9IDB4MDE7CiAJfQogCisJc3BlYy0+ZG1pY19uaWRzID0gc3RhYzkyaGQ3MWJ4eF9kbWljX25pZHM7CisJc3BlYy0+ZG11eF9uaWRzID0gc3RhYzkyaGQ3MWJ4eF9kbXV4X25pZHM7CisKIAlzd2l0Y2ggKGNvZGVjLT52ZW5kb3JfaWQpIHsKIAljYXNlIDB4MTExZDc2YjY6IC8qIDQgUG9ydCB3aXRob3V0IEFuYWxvZyBNaXhlciAqLwogCWNhc2UgMHgxMTFkNzZiNzoKKwkJdW5tdXRlX2luaXQrKzsKKwkJLyogZmFsbHRocnUgKi8KIAljYXNlIDB4MTExZDc2YjQ6IC8qIDYgUG9ydCB3aXRob3V0IEFuYWxvZyBNaXhlciAqLwogCWNhc2UgMHgxMTFkNzZiNToKKwkJbWVtY3B5KCZzcGVjLT5wcml2YXRlX2RpbXV4LCAmc3RhYzkyaGQ3MWJ4eF9kbXV4X25vbWl4ZXIsCisJCSAgICAgICBzaXplb2Yoc3RhYzkyaGQ3MWJ4eF9kbXV4X25vbWl4ZXIpKTsKIAkJc3BlYy0+bWl4ZXIgPSBzdGFjOTJoZDcxYnh4X21peGVyOwogCQlzcGVjLT5pbml0ID0gc3RhYzkyaGQ3MWJ4eF9jb3JlX2luaXQ7CiAJCWNvZGVjLT5zbGF2ZV9kaWdfb3V0cyA9IHN0YWM5MmhkNzFieHhfc2xhdmVfZGlnX291dHM7CisJCXNwZWMtPm51bV9kbWljcyA9IHN0YWM5MmhkNzFieHhfY29ubmVjdGVkX3BvcnRzKGNvZGVjLAorCQkJCQlzdGFjOTJoZDcxYnh4X2RtaWNfbmlkcywKKwkJCQkJU1RBQzkySEQ3MUJYWF9OVU1fRE1JQ1MpOworCQlpZiAoc3BlYy0+bnVtX2RtaWNzKSB7CisJCQlzcGVjLT5udW1fZG11eGVzID0gQVJSQVlfU0laRShzdGFjOTJoZDcxYnh4X2RtdXhfbmlkcyk7CisJCQlzcGVjLT5kaW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfZGltdXg7CisJCQluZG1pY19uaWRzID0gQVJSQVlfU0laRShzdGFjOTJoZDcxYnh4X2RtaWNfbmlkcykgLSAxOworCQl9CiAJCWJyZWFrOwogCWNhc2UgMHgxMTFkNzYwODogLyogNSBQb3J0IHdpdGggQW5hbG9nIE1peGVyICovCisJCW1lbWNweSgmc3BlYy0+cHJpdmF0ZV9kaW11eCwgJnN0YWM5MmhkNzFieHhfZG11eF9hbWl4ZXIsCisJCSAgICAgICBzaXplb2Yoc3RhYzkyaGQ3MWJ4eF9kbXV4X2FtaXhlcikpOworCQlzcGVjLT5wcml2YXRlX2RpbXV4Lm51bV9pdGVtcy0tOwogCQlzd2l0Y2ggKHNwZWMtPmJvYXJkX2NvbmZpZykgewogCQljYXNlIFNUQUNfSFBfTTQ6CiAJCQkvKiBFbmFibGUgVlJFRiBwb3dlciBzYXZpbmcgb24gR1BJTzEgZGV0ZWN0ICovCkBAIC00OTQ0LDcgKzUxMTYsMTUgQEAKIAogCQkvKiBkaXNhYmxlIFZTVyAqLwogCQlzcGVjLT5pbml0ID0gJnN0YWM5MmhkNzFieHhfYW5hbG9nX2NvcmVfaW5pdFtIRF9ESVNBQkxFX1BPUlRGXTsKLQkJc3RhY19jaGFuZ2VfcGluX2NvbmZpZyhjb2RlYywgMHhmLCAweDQwZjAwMGYwKTsKKwkJdW5tdXRlX2luaXQrKzsKKwkJc25kX2hkYV9jb2RlY19zZXRfcGluY2ZnKGNvZGVjLCAweDBmLCAweDQwZjAwMGYwKTsKKwkJc25kX2hkYV9jb2RlY19zZXRfcGluY2ZnKGNvZGVjLCAweDE5LCAweDQwZjAwMGYzKTsKKwkJc3RhYzkyaGQ3MWJ4eF9kbWljX25pZHNbU1RBQzkySEQ3MUJYWF9OVU1fRE1JQ1MgLSAxXSA9IDA7CisJCXNwZWMtPm51bV9kbWljcyA9IHN0YWM5MmhkNzFieHhfY29ubmVjdGVkX3BvcnRzKGNvZGVjLAorCQkJCQlzdGFjOTJoZDcxYnh4X2RtaWNfbmlkcywKKwkJCQkJU1RBQzkySEQ3MUJYWF9OVU1fRE1JQ1MgLSAxKTsKKwkJc3BlYy0+bnVtX2RtdXhlcyA9IEFSUkFZX1NJWkUoc3RhYzkyaGQ3MWJ4eF9kbXV4X25pZHMpOworCQluZG1pY19uaWRzID0gQVJSQVlfU0laRShzdGFjOTJoZDcxYnh4X2RtaWNfbmlkcykgLSAyOwogCQlicmVhazsKIAljYXNlIDB4MTExZDc2MDM6IC8qIDYgUG9ydCB3aXRoIEFuYWxvZyBNaXhlciAqLwogCQlpZiAoKGNvZGVjLT5yZXZpc2lvbl9pZCAmIDB4ZikgPT0gMSkKQEAgLTQ5NTQsMTIgKzUxMzQsMjMgQEAKIAkJc3BlYy0+bnVtX3B3cnMgPSAwOwogCQkvKiBmYWxsdGhydSAqLwogCWRlZmF1bHQ6CisJCW1lbWNweSgmc3BlYy0+cHJpdmF0ZV9kaW11eCwgJnN0YWM5MmhkNzFieHhfZG11eF9hbWl4ZXIsCisJCSAgICAgICBzaXplb2Yoc3RhYzkyaGQ3MWJ4eF9kbXV4X2FtaXhlcikpOwogCQlzcGVjLT5kaW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfZGltdXg7CiAJCXNwZWMtPm1peGVyID0gc3RhYzkyaGQ3MWJ4eF9hbmFsb2dfbWl4ZXI7CiAJCXNwZWMtPmluaXQgPSBzdGFjOTJoZDcxYnh4X2FuYWxvZ19jb3JlX2luaXQ7CiAJCWNvZGVjLT5zbGF2ZV9kaWdfb3V0cyA9IHN0YWM5MmhkNzFieHhfc2xhdmVfZGlnX291dHM7CisJCXNwZWMtPm51bV9kbWljcyA9IHN0YWM5MmhkNzFieHhfY29ubmVjdGVkX3BvcnRzKGNvZGVjLAorCQkJCQlzdGFjOTJoZDcxYnh4X2RtaWNfbmlkcywKKwkJCQkJU1RBQzkySEQ3MUJYWF9OVU1fRE1JQ1MpOworCQlzcGVjLT5udW1fZG11eGVzID0gQVJSQVlfU0laRShzdGFjOTJoZDcxYnh4X2RtdXhfbmlkcyk7CisJCW5kbWljX25pZHMgPSBBUlJBWV9TSVpFKHN0YWM5MmhkNzFieHhfZG1pY19uaWRzKSAtIDE7CiAJfQogCisJaWYgKGdldF93Y2Fwcyhjb2RlYywgMHhhKSAmIEFDX1dDQVBfSU5fQU1QKQorCQlzbmRfaGRhX3NlcXVlbmNlX3dyaXRlX2NhY2hlKGNvZGVjLCB1bm11dGVfaW5pdCk7CisKKwlzcGVjLT5hbG9vcGJhY2tfY3RsID0gc3RhYzkyaGQ3MWJ4eF9sb29wYmFjazsKIAlzcGVjLT5hbG9vcGJhY2tfbWFzayA9IDB4NTA7CiAJc3BlYy0+YWxvb3BiYWNrX3NoaWZ0ID0gMDsKIApAQCAtNDk2NywxOCArNTE1OCwxNyBAQAogCXNwZWMtPmRpZ2JlZXBfbmlkID0gMHgyNjsKIAlzcGVjLT5tdXhfbmlkcyA9IHN0YWM5MmhkNzFieHhfbXV4X25pZHM7CiAJc3BlYy0+YWRjX25pZHMgPSBzdGFjOTJoZDcxYnh4X2FkY19uaWRzOwotCXNwZWMtPmRtaWNfbmlkcyA9IHN0YWM5MmhkNzFieHhfZG1pY19uaWRzOwotCXNwZWMtPmRtdXhfbmlkcyA9IHN0YWM5MmhkNzFieHhfZG11eF9uaWRzOwogCXNwZWMtPnNtdXhfbmlkcyA9IHN0YWM5MmhkNzFieHhfc211eF9uaWRzOwogCXNwZWMtPnB3cl9uaWRzID0gc3RhYzkyaGQ3MWJ4eF9wd3JfbmlkczsKIAogCXNwZWMtPm51bV9tdXhlcyA9IEFSUkFZX1NJWkUoc3RhYzkyaGQ3MWJ4eF9tdXhfbmlkcyk7CiAJc3BlYy0+bnVtX2FkY3MgPSBBUlJBWV9TSVpFKHN0YWM5MmhkNzFieHhfYWRjX25pZHMpOworCXNwZWMtPm51bV9zbXV4ZXMgPSBzdGFjOTJoZDcxYnh4X2Nvbm5lY3RlZF9zbXV4ZXMoY29kZWMsIDB4MWUpOwogCiAJc3dpdGNoIChzcGVjLT5ib2FyZF9jb25maWcpIHsKIAljYXNlIFNUQUNfSFBfTTQ6CiAJCS8qIGVuYWJsZSBpbnRlcm5hbCBtaWNyb3Bob25lICovCi0JCXN0YWNfY2hhbmdlX3Bpbl9jb25maWcoY29kZWMsIDB4MGUsIDB4MDE4MTMwNDApOworCQlzbmRfaGRhX2NvZGVjX3NldF9waW5jZmcoY29kZWMsIDB4MGUsIDB4MDE4MTMwNDApOwogCQlzdGFjOTJ4eF9hdXRvX3NldF9waW5jdGwoY29kZWMsIDB4MGUsCiAJCQlBQ19QSU5DVExfSU5fRU4gfCBBQ19QSU5DVExfVlJFRl84MCk7CiAJCS8qIGZhbGx0aHJ1ICovCkBAIC00OTkzLDE5ICs1MTgzLDM2IEBACiAJCXNwZWMtPm51bV9zbXV4ZXMgPSAwOwogCQlzcGVjLT5udW1fZG11eGVzID0gMTsKIAkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJc3BlYy0+bnVtX2RtaWNzID0gU1RBQzkySEQ3MUJYWF9OVU1fRE1JQ1M7Ci0JCXNwZWMtPm51bV9zbXV4ZXMgPSBBUlJBWV9TSVpFKHN0YWM5MmhkNzFieHhfc211eF9uaWRzKTsKLQkJc3BlYy0+bnVtX2RtdXhlcyA9IEFSUkFZX1NJWkUoc3RhYzkyaGQ3MWJ4eF9kbXV4X25pZHMpOworCWNhc2UgU1RBQ19IUF9EVjU6CisJCXNuZF9oZGFfY29kZWNfc2V0X3BpbmNmZyhjb2RlYywgMHgwZCwgMHg5MDE3MDAxMCk7CisJCXN0YWM5Mnh4X2F1dG9fc2V0X3BpbmN0bChjb2RlYywgMHgwZCwgQUNfUElOQ1RMX09VVF9FTik7CisJCWJyZWFrOworCWNhc2UgU1RBQ19IUF9IRFg6CisJCXNwZWMtPm51bV9kbWljcyA9IDE7CisJCXNwZWMtPm51bV9kbXV4ZXMgPSAxOworCQlzcGVjLT5udW1fc211eGVzID0gMTsKKwkJLyoKKwkJICogRm9yIGNvbnRyb2xsaW5nIE1VVEUgTEVEIG9uIEhQIEhEWDE2L0hEWDE4IG5vdGVib29rcywKKwkJICogdGhlIENPTkZJR19TTkRfSERBX1BPV0VSX1NBVkUgaXMgbmVlZGVkIHRvIGJlIHNldC4KKwkJICovCisjaWZkZWYgQ09ORklHX1NORF9IREFfUE9XRVJfU0FWRQorCQkvKiBvcmFuZ2Uvd2hpdGUgbXV0ZSBsZWQgb24gR1BJTzMsIG9yYW5nZT0wLCB3aGl0ZT0xICovCisJCXNwZWMtPmdwaW9fbWFzayB8PSAweDA4OworCQlzcGVjLT5ncGlvX2RpciAgfD0gMHgwODsKKwkJc3BlYy0+Z3Bpb19kYXRhIHw9IDB4MDg7ICAvKiBzZXQgdG8gd2hpdGUgKi8KKworCQkvKiByZWdpc3RlciBjaGVja19wb3dlcl9zdGF0dXMgY2FsbGJhY2suICovCisJCWNvZGVjLT5wYXRjaF9vcHMuY2hlY2tfcG93ZXJfc3RhdHVzID0KKwkJICAgIHN0YWM5Mnh4X2hwX2hkeF9jaGVja19wb3dlcl9zdGF0dXM7CisjZW5kaWYJCisJCWJyZWFrOwogCX07CiAKIAlzcGVjLT5tdWx0aW91dC5kYWNfbmlkcyA9IHNwZWMtPmRhY19uaWRzOwogCWlmIChzcGVjLT5kaW5wdXRfbXV4KQotCQlzcGVjLT5wcml2YXRlX2RpbXV4Lm51bV9pdGVtcyArPQotCQkJc3BlYy0+bnVtX2RtaWNzIC0KLQkJCQkoQVJSQVlfU0laRShzdGFjOTJoZDcxYnh4X2RtaWNfbmlkcykgLSAxKTsKKwkJc3BlYy0+cHJpdmF0ZV9kaW11eC5udW1faXRlbXMgKz0gc3BlYy0+bnVtX2RtaWNzIC0gbmRtaWNfbmlkczsKIAotCWVyciA9IHN0YWM5Mnh4X3BhcnNlX2F1dG9fY29uZmlnKGNvZGVjLCAweDIxLCAweDIzKTsKKwllcnIgPSBzdGFjOTJ4eF9wYXJzZV9hdXRvX2NvbmZpZyhjb2RlYywgMHgyMSwgMCk7CiAJaWYgKCFlcnIpIHsKIAkJaWYgKHNwZWMtPmJvYXJkX2NvbmZpZyA8IDApIHsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgImhkYV9jb2RlYzogTm8gYXV0by1jb25maWcgaXMgIgpAQCAtNTA4MCwxNyArNTI4NywxMiBAQAogCX0KIAogIGFnYWluOgotCWlmIChzcGVjLT5ib2FyZF9jb25maWcgPCAwKSB7CisJaWYgKHNwZWMtPmJvYXJkX2NvbmZpZyA8IDApCiAJCXNuZF9wcmludGRkKEtFUk5fSU5GTyAiaGRhX2NvZGVjOiBVbmtub3duIG1vZGVsIGZvciBTVEFDOTIyeCwgIgogCQkJInVzaW5nIEJJT1MgZGVmYXVsdHNcbiIpOwotCQllcnIgPSBzdGFjOTJ4eF9zYXZlX2Jpb3NfY29uZmlnX3JlZ3MoY29kZWMpOwotCX0gZWxzZQotCQllcnIgPSBzdGFjX3NhdmVfcGluX2NmZ3MoY29kZWMsCisJZWxzZQorCQlzdGFjOTJ4eF9zZXRfY29uZmlnX3JlZ3MoY29kZWMsCiAJCQkJc3RhYzkyMnhfYnJkX3RibFtzcGVjLT5ib2FyZF9jb25maWddKTsKLQlpZiAoZXJyIDwgMCkgewotCQlzdGFjOTJ4eF9mcmVlKGNvZGVjKTsKLQkJcmV0dXJuIGVycjsKLQl9CiAKIAlzcGVjLT5hZGNfbmlkcyA9IHN0YWM5MjJ4X2FkY19uaWRzOwogCXNwZWMtPm11eF9uaWRzID0gc3RhYzkyMnhfbXV4X25pZHM7CkBAIC01MTQxLDI0ICs1MzQzLDE5IEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJY29kZWMtPnNwZWMgPSBzcGVjOworCWNvZGVjLT5zbGF2ZV9kaWdfb3V0cyA9IHN0YWM5Mjd4X3NsYXZlX2RpZ19vdXRzOwogCXNwZWMtPm51bV9waW5zID0gQVJSQVlfU0laRShzdGFjOTI3eF9waW5fbmlkcyk7CiAJc3BlYy0+cGluX25pZHMgPSBzdGFjOTI3eF9waW5fbmlkczsKIAlzcGVjLT5ib2FyZF9jb25maWcgPSBzbmRfaGRhX2NoZWNrX2JvYXJkX2NvbmZpZyhjb2RlYywgU1RBQ185MjdYX01PREVMUywKIAkJCQkJCQlzdGFjOTI3eF9tb2RlbHMsCiAJCQkJCQkJc3RhYzkyN3hfY2ZnX3RibCk7CiAgYWdhaW46Ci0JaWYgKHNwZWMtPmJvYXJkX2NvbmZpZyA8IDAgfHwgIXN0YWM5Mjd4X2JyZF90Ymxbc3BlYy0+Ym9hcmRfY29uZmlnXSkgewotCQlpZiAoc3BlYy0+Ym9hcmRfY29uZmlnIDwgMCkKLQkJCXNuZF9wcmludGRkKEtFUk5fSU5GTyAiaGRhX2NvZGVjOiBVbmtub3duIG1vZGVsIGZvciIKLQkJCQkgICAgIlNUQUM5Mjd4LCB1c2luZyBCSU9TIGRlZmF1bHRzXG4iKTsKLQkJZXJyID0gc3RhYzkyeHhfc2F2ZV9iaW9zX2NvbmZpZ19yZWdzKGNvZGVjKTsKLQl9IGVsc2UKLQkJZXJyID0gc3RhY19zYXZlX3Bpbl9jZmdzKGNvZGVjLAorCWlmIChzcGVjLT5ib2FyZF9jb25maWcgPCAwKQorCQlzbmRfcHJpbnRkZChLRVJOX0lORk8gImhkYV9jb2RlYzogVW5rbm93biBtb2RlbCBmb3IiCisJCQkgICAgIlNUQUM5Mjd4LCB1c2luZyBCSU9TIGRlZmF1bHRzXG4iKTsKKwllbHNlCisJCXN0YWM5Mnh4X3NldF9jb25maWdfcmVncyhjb2RlYywKIAkJCQlzdGFjOTI3eF9icmRfdGJsW3NwZWMtPmJvYXJkX2NvbmZpZ10pOwotCWlmIChlcnIgPCAwKSB7Ci0JCXN0YWM5Mnh4X2ZyZWUoY29kZWMpOwotCQlyZXR1cm4gZXJyOwotCX0KIAogCXNwZWMtPmRpZ2JlZXBfbmlkID0gMHgyMzsKIAlzcGVjLT5hZGNfbmlkcyA9IHN0YWM5Mjd4X2FkY19uaWRzOwpAQCAtNTE4NywxNSArNTM4NCwxNSBAQAogCQljYXNlIDB4MTAyODAyMDk6CiAJCWNhc2UgMHgxMDI4MDIyZToKIAkJCS8qIGNvcnJlY3QgdGhlIGRldmljZSBmaWVsZCB0byBTUERJRiBvdXQgKi8KLQkJCXN0YWNfY2hhbmdlX3Bpbl9jb25maWcoY29kZWMsIDB4MjEsIDB4MDE0NDIwNzApOworCQkJc25kX2hkYV9jb2RlY19zZXRfcGluY2ZnKGNvZGVjLCAweDIxLCAweDAxNDQyMDcwKTsKIAkJCWJyZWFrOwogCQl9OwogCQkvKiBjb25maWd1cmUgdGhlIGFuYWxvZyBtaWNyb3Bob25lIG9uIHNvbWUgbGFwdG9wcyAqLwotCQlzdGFjX2NoYW5nZV9waW5fY29uZmlnKGNvZGVjLCAweDBjLCAweDkwYTc5MTMwKTsKKwkJc25kX2hkYV9jb2RlY19zZXRfcGluY2ZnKGNvZGVjLCAweDBjLCAweDkwYTc5MTMwKTsKIAkJLyogY29ycmVjdCB0aGUgZnJvbnQgb3V0cHV0IGphY2sgYXMgYSBocCBvdXQgKi8KLQkJc3RhY19jaGFuZ2VfcGluX2NvbmZpZyhjb2RlYywgMHgwZiwgMHgwMjI3MDExZik7CisJCXNuZF9oZGFfY29kZWNfc2V0X3BpbmNmZyhjb2RlYywgMHgwZiwgMHgwMjI3MDExZik7CiAJCS8qIGNvcnJlY3QgdGhlIGZyb250IGlucHV0IGphY2sgYXMgYSBtaWMgKi8KLQkJc3RhY19jaGFuZ2VfcGluX2NvbmZpZyhjb2RlYywgMHgwZSwgMHgwMmE3OTEzMCk7CisJCXNuZF9oZGFfY29kZWNfc2V0X3BpbmNmZyhjb2RlYywgMHgwZSwgMHgwMmE3OTEzMCk7CiAJCS8qIGZhbGx0aHJ1ICovCiAJY2FzZSBTVEFDX0RFTExfM1NUOgogCQkvKiBHUElPMiBIaWdoID0gRW5hYmxlIEVBUEQgKi8KQEAgLTUyMjIsNiArNTQxOSw3IEBACiAJfQogCiAJc3BlYy0+bnVtX3B3cnMgPSAwOworCXNwZWMtPmFsb29wYmFja19jdGwgPSBzdGFjOTI3eF9sb29wYmFjazsKIAlzcGVjLT5hbG9vcGJhY2tfbWFzayA9IDB4NDA7CiAJc3BlYy0+YWxvb3BiYWNrX3NoaWZ0ID0gMDsKIAlzcGVjLT5lYXBkX3N3aXRjaCA9IDE7CkBAIC01MjgwLDE2ICs1NDc4LDExIEBACiAJCQkJCQkJc3RhYzkyMDVfbW9kZWxzLAogCQkJCQkJCXN0YWM5MjA1X2NmZ190YmwpOwogIGFnYWluOgotCWlmIChzcGVjLT5ib2FyZF9jb25maWcgPCAwKSB7CisJaWYgKHNwZWMtPmJvYXJkX2NvbmZpZyA8IDApCiAJCXNuZF9wcmludGRkKEtFUk5fSU5GTyAiaGRhX2NvZGVjOiBVbmtub3duIG1vZGVsIGZvciBTVEFDOTIwNSwgdXNpbmcgQklPUyBkZWZhdWx0c1xuIik7Ci0JCWVyciA9IHN0YWM5Mnh4X3NhdmVfYmlvc19jb25maWdfcmVncyhjb2RlYyk7Ci0JfSBlbHNlCi0JCWVyciA9IHN0YWNfc2F2ZV9waW5fY2Zncyhjb2RlYywKKwllbHNlCisJCXN0YWM5Mnh4X3NldF9jb25maWdfcmVncyhjb2RlYywKIAkJCQkJIHN0YWM5MjA1X2JyZF90Ymxbc3BlYy0+Ym9hcmRfY29uZmlnXSk7Ci0JaWYgKGVyciA8IDApIHsKLQkJc3RhYzkyeHhfZnJlZShjb2RlYyk7Ci0JCXJldHVybiBlcnI7Ci0JfQogCiAJc3BlYy0+ZGlnYmVlcF9uaWQgPSAweDIzOwogCXNwZWMtPmFkY19uaWRzID0gc3RhYzkyMDVfYWRjX25pZHM7CkBAIC01MzA2LDE3ICs1NDk5LDIwIEBACiAKIAlzcGVjLT5pbml0ID0gc3RhYzkyMDVfY29yZV9pbml0OwogCXNwZWMtPm1peGVyID0gc3RhYzkyMDVfbWl4ZXI7CisJc3BlYy0+YWxvb3BiYWNrX2N0bCA9IHN0YWM5MjA1X2xvb3BiYWNrOwogCiAJc3BlYy0+YWxvb3BiYWNrX21hc2sgPSAweDQwOwogCXNwZWMtPmFsb29wYmFja19zaGlmdCA9IDA7Ci0Jc3BlYy0+ZWFwZF9zd2l0Y2ggPSAxOworCS8qIFR1cm4gb24vb2ZmIEVBUEQgcGVyIEhQIHBsdWdnaW5nICovCisJaWYgKHNwZWMtPmJvYXJkX2NvbmZpZyAhPSBTVEFDXzkyMDVfRUFQRCkKKwkJc3BlYy0+ZWFwZF9zd2l0Y2ggPSAxOwogCXNwZWMtPm11bHRpb3V0LmRhY19uaWRzID0gc3BlYy0+ZGFjX25pZHM7CiAJCiAJc3dpdGNoIChzcGVjLT5ib2FyZF9jb25maWcpewogCWNhc2UgU1RBQ185MjA1X0RFTExfTTQzOgogCQkvKiBFbmFibGUgU1BESUYgaW4vb3V0ICovCi0JCXN0YWNfY2hhbmdlX3Bpbl9jb25maWcoY29kZWMsIDB4MWYsIDB4MDE0NDEwMzApOwotCQlzdGFjX2NoYW5nZV9waW5fY29uZmlnKGNvZGVjLCAweDIwLCAweDFjNDEwMDMwKTsKKwkJc25kX2hkYV9jb2RlY19zZXRfcGluY2ZnKGNvZGVjLCAweDFmLCAweDAxNDQxMDMwKTsKKwkJc25kX2hkYV9jb2RlY19zZXRfcGluY2ZnKGNvZGVjLCAweDIwLCAweDFjNDEwMDMwKTsKIAogCQkvKiBFbmFibGUgdW5zb2wgcmVzcG9uc2UgZm9yIEdQSU80L0RvY2sgSFAgY29ubmVjdGlvbiAqLwogCQllcnIgPSBzdGFjX2FkZF9ldmVudChzcGVjLCBjb2RlYy0+YWZnLCBTVEFDX1ZSRUZfRVZFTlQsIDB4MDEpOwpAQCAtNTM3MywyMjMgKzU1NjksODcgQEAKICAqIFNUQUM5ODcyIGhhY2sKICAqLwogCi0vKiBzdGF0aWMgY29uZmlnIGZvciBTb255IFZBSU8gRkU1NTBHIGFuZCBTb255IFZBSU8gQVIgKi8KLXN0YXRpYyBoZGFfbmlkX3QgdmFpb19kYWNzW10gPSB7IDB4MiB9OwotI2RlZmluZSBWQUlPX0hQX0RBQwkweDUKLXN0YXRpYyBoZGFfbmlkX3QgdmFpb19hZGNzW10gPSB7IDB4OCAvKiwweDYqLyB9Owotc3RhdGljIGhkYV9uaWRfdCB2YWlvX211eF9uaWRzW10gPSB7IDB4MTUgfTsKLQotc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IHZhaW9fbXV4ID0gewotCS5udW1faXRlbXMgPSAzLAotCS5pdGVtcyA9IHsKLQkJLyogeyAiSFAiLCAweDAgfSwgKi8KLQkJeyAiTWljIEphY2siLCAweDEgfSwKLQkJeyAiSW50ZXJuYWwgTWljIiwgMHgyIH0sCi0JCXsgIlBDTSIsIDB4MyB9LAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgdmFpb19pbml0W10gPSB7Ci0JezB4MGEsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0hQIH0sIC8qIEhQIDwtIDB4MiAqLwotCXsweDBhLCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFDX1VTUlNQX0VOIHwgU1RBQ19IUF9FVkVOVH0sCi0JezB4MGYsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVCB9LCAvKiBTcGVha2VyIDwtIDB4NSAqLwotCXsweDBkLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODAgfSwgLyogTWljPyAoPC0gMHgyKSAqLwotCXsweDBlLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTiB9LCAvKiBDRCAqLwotCXsweDE0LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODAgfSwgLyogTWljPyAqLworc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBzdGFjOTg3Ml9jb3JlX2luaXRbXSA9IHsKIAl7MHgxNSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MX0sIC8qIG1pYy1zZWw6IDBhLDBkLDE0LDAyICovCi0JezB4MDIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sIC8qIEhQICovCi0JezB4MDUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sIC8qIFNwZWFrZXIgKi8KLQl7MHgwOSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LCAvKiBjYXB0dXJlIHN3L3ZvbCAtPiAweDggKi8KLQl7MHgwNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sIC8qIENELWluIC0+IDB4NiAqLwogCXsweDE1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sIC8qIE1pYy1pbiAtPiAweDkgKi8KIAl7fQogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiB2YWlvX2FyX2luaXRbXSA9IHsKLQl7MHgwYSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSFAgfSwgLyogSFAgPC0gMHgyICovCi0JezB4MGYsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVCB9LCAvKiBTcGVha2VyIDwtIDB4NSAqLwotCXsweDBkLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODAgfSwgLyogTWljPyAoPC0gMHgyKSAqLwotCXsweDBlLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTiB9LCAvKiBDRCAqLwotLyoJezB4MTEsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVCB9LCovIC8qIE9wdGljYWwgT3V0ICovCi0JezB4MTQsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY4MCB9LCAvKiBNaWM/ICovCi0JezB4MTUsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDF9LCAvKiBtaWMtc2VsOiAwYSwwZCwxNCwwMiAqLwotCXsweDAyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LCAvKiBIUCAqLwotCXsweDA1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LCAvKiBTcGVha2VyICovCi0vKgl7MHgxMCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwqLyAvKiBPcHRpY2FsIE91dCAqLwotCXsweDA5LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sIC8qIGNhcHR1cmUgc3cvdm9sIC0+IDB4OCAqLwotCXsweDA3LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwgLyogQ0QtaW4gLT4gMHg2ICovCi0JezB4MTUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwgLyogTWljLWluIC0+IDB4OSAqLwotCXt9Ci19OwotCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgdmFpb19taXhlcltdID0gewotCUhEQV9DT0RFQ19WT0xVTUUoIkhlYWRwaG9uZSBQbGF5YmFjayBWb2x1bWUiLCAweDAyLCAwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsIDB4MDIsIDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIlNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwNSwgMCwgSERBX09VVFBVVCksCi0JSERBX0NPREVDX01VVEUoIlNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwNSwgMCwgSERBX09VVFBVVCksCi0JLyogSERBX0NPREVDX1ZPTFVNRSgiQ0QgQ2FwdHVyZSBWb2x1bWUiLCAweDA3LCAwLCBIREFfSU5QVVQpLCAqLworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHN0YWM5ODcyX21peGVyW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDA5LCAwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJDYXB0dXJlIFN3aXRjaCIsIDB4MDksIDAsIEhEQV9JTlBVVCksCi0JewotCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKLQkJLm5hbWUgPSAiQ2FwdHVyZSBTb3VyY2UiLAotCQkuY291bnQgPSAxLAotCQkuaW5mbyA9IHN0YWM5Mnh4X211eF9lbnVtX2luZm8sCi0JCS5nZXQgPSBzdGFjOTJ4eF9tdXhfZW51bV9nZXQsCi0JCS5wdXQgPSBzdGFjOTJ4eF9tdXhfZW51bV9wdXQsCi0JfSwKLQl7fQorCXsgfSAvKiBlbmQgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB2YWlvX2FyX21peGVyW10gPSB7Ci0JSERBX0NPREVDX1ZPTFVNRSgiSGVhZHBob25lIFBsYXliYWNrIFZvbHVtZSIsIDB4MDIsIDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJIZWFkcGhvbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgwMiwgMCwgSERBX09VVFBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDA1LCAwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDA1LCAwLCBIREFfT1VUUFVUKSwKLQkvKiBIREFfQ09ERUNfVk9MVU1FKCJDRCBDYXB0dXJlIFZvbHVtZSIsIDB4MDcsIDAsIEhEQV9JTlBVVCksICovCi0JSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDA5LCAwLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJDYXB0dXJlIFN3aXRjaCIsIDB4MDksIDAsIEhEQV9JTlBVVCksCi0JLypIREFfQ09ERUNfTVVURSgiT3B0aWNhbCBPdXQgU3dpdGNoIiwgMHgxMCwgMCwgSERBX09VVFBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiT3B0aWNhbCBPdXQgVm9sdW1lIiwgMHgxMCwgMCwgSERBX09VVFBVVCksKi8KLQl7Ci0JCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAotCQkubmFtZSA9ICJDYXB0dXJlIFNvdXJjZSIsCi0JCS5jb3VudCA9IDEsCi0JCS5pbmZvID0gc3RhYzkyeHhfbXV4X2VudW1faW5mbywKLQkJLmdldCA9IHN0YWM5Mnh4X211eF9lbnVtX2dldCwKLQkJLnB1dCA9IHN0YWM5Mnh4X211eF9lbnVtX3B1dCwKLQl9LAotCXt9CitzdGF0aWMgaGRhX25pZF90IHN0YWM5ODcyX3Bpbl9uaWRzW10gPSB7CisJMHgwYSwgMHgwYiwgMHgwYywgMHgwZCwgMHgwZSwgMHgwZiwKKwkweDExLCAweDEzLCAweDE0LAogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfY29kZWNfb3BzIHN0YWM5ODcyX3BhdGNoX29wcyA9IHsKLQkuYnVpbGRfY29udHJvbHMgPSBzdGFjOTJ4eF9idWlsZF9jb250cm9scywKLQkuYnVpbGRfcGNtcyA9IHN0YWM5Mnh4X2J1aWxkX3BjbXMsCi0JLmluaXQgPSBzdGFjOTJ4eF9pbml0LAotCS5mcmVlID0gc3RhYzkyeHhfZnJlZSwKLSNpZmRlZiBTTkRfSERBX05FRURTX1JFU1VNRQotCS5yZXN1bWUgPSBzdGFjOTJ4eF9yZXN1bWUsCi0jZW5kaWYKK3N0YXRpYyBoZGFfbmlkX3Qgc3RhYzk4NzJfYWRjX25pZHNbXSA9IHsKKwkweDggLyosMHg2Ki8KIH07CiAKLXN0YXRpYyBpbnQgc3RhYzk4NzJfdmFpb19pbml0KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQotewotCWludCBlcnI7Ci0KLQllcnIgPSBzdGFjOTJ4eF9pbml0KGNvZGVjKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLQlpZiAoY29kZWMtPnBhdGNoX29wcy51bnNvbF9ldmVudCkKLQkJY29kZWMtPnBhdGNoX29wcy51bnNvbF9ldmVudChjb2RlYywgU1RBQ19IUF9FVkVOVCA8PCAyNik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHN0YWM5ODcyX3ZhaW9faHBfZGV0ZWN0KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgcmVzKQotewotCWlmIChnZXRfcGluX3ByZXNlbmNlKGNvZGVjLCAweDBhKSkgewotCQlzdGFjOTJ4eF9yZXNldF9waW5jdGwoY29kZWMsIDB4MGYsIEFDX1BJTkNUTF9PVVRfRU4pOwotCQlzdGFjOTJ4eF9zZXRfcGluY3RsKGNvZGVjLCAweDBhLCBBQ19QSU5DVExfT1VUX0VOKTsKLQl9IGVsc2UgewotCQlzdGFjOTJ4eF9yZXNldF9waW5jdGwoY29kZWMsIDB4MGEsIEFDX1BJTkNUTF9PVVRfRU4pOwotCQlzdGFjOTJ4eF9zZXRfcGluY3RsKGNvZGVjLCAweDBmLCBBQ19QSU5DVExfT1VUX0VOKTsKLQl9Ci19IAotCi1zdGF0aWMgdm9pZCBzdGFjOTg3Ml92YWlvX3Vuc29sX2V2ZW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgcmVzKQotewotCXN3aXRjaCAocmVzID4+IDI2KSB7Ci0JY2FzZSBTVEFDX0hQX0VWRU5UOgotCQlzdGFjOTg3Ml92YWlvX2hwX2RldGVjdChjb2RlYywgcmVzKTsKLQkJYnJlYWs7Ci0JfQotfQotCi1zdGF0aWMgc3RydWN0IGhkYV9jb2RlY19vcHMgc3RhYzk4NzJfdmFpb19wYXRjaF9vcHMgPSB7Ci0JLmJ1aWxkX2NvbnRyb2xzID0gc3RhYzkyeHhfYnVpbGRfY29udHJvbHMsCi0JLmJ1aWxkX3BjbXMgPSBzdGFjOTJ4eF9idWlsZF9wY21zLAotCS5pbml0ID0gc3RhYzk4NzJfdmFpb19pbml0LAotCS5mcmVlID0gc3RhYzkyeHhfZnJlZSwKLQkudW5zb2xfZXZlbnQgPSBzdGFjOTg3Ml92YWlvX3Vuc29sX2V2ZW50LAotI2lmZGVmIENPTkZJR19QTQotCS5yZXN1bWUgPSBzdGFjOTJ4eF9yZXN1bWUsCi0jZW5kaWYKK3N0YXRpYyBoZGFfbmlkX3Qgc3RhYzk4NzJfbXV4X25pZHNbXSA9IHsKKwkweDE1CiB9OwogCi1lbnVtIHsgLyogRkUgYW5kIFNaIHNlcmllcy4gaWQ9MHg4Mzg0NzY2MSBhbmQgc3Vic3lzPTB4MTA0RDA3MDAgb3IgMTA0RDEwMDAuICovCi0gICAgICAgQ1hEOTg3MlJEX1ZBSU8sCi0gICAgICAgLyogVW5rbm93bi4gaWQ9MHg4Mzg0NzY2MiBhbmQgc3Vic3lzPTB4MTA0RDEyMDAgb3IgMTA0RDEwMDAuICovCi0gICAgICAgU1RBQzk4NzJBS19WQUlPLCAKLSAgICAgICAvKiBVbmtub3duLiBpZD0weDgzODQ3NjYxIGFuZCBzdWJzeXM9MHgxMDREMTIwMC4gKi8KLSAgICAgICBTVEFDOTg3MktfVkFJTywKLSAgICAgICAvKiBBUiBTZXJpZXMuIGlkPTB4ODM4NDc2NjQgYW5kIHN1YnN5cz0xMDREMTMwMCAqLwotICAgICAgIENYRDk4NzJBS0RfVkFJTywKLSAgICAgICBTVEFDXzk4NzJfTU9ERUxTLAorc3RhdGljIHVuc2lnbmVkIGludCBzdGFjOTg3Ml92YWlvX3Bpbl9jb25maWdzWzldID0geworCTB4MDMyMTEwMjAsIDB4NDExMTExZjAsIDB4NDExMTExZjAsIDB4MDNhMTUwMzAsCisJMHg0MTExMTFmMCwgMHg5MDE3MDExMCwgMHg0MTExMTFmMCwgMHg0MTExMTFmMCwKKwkweDkwYTcwMTNlCiB9OwogCiBzdGF0aWMgY29uc3QgY2hhciAqc3RhYzk4NzJfbW9kZWxzW1NUQUNfOTg3Ml9NT0RFTFNdID0gewotCVtDWEQ5ODcyUkRfVkFJT10JPSAidmFpbyIsCi0JW0NYRDk4NzJBS0RfVkFJT10JPSAidmFpby1hciIsCisJW1NUQUNfOTg3Ml9BVVRPXSA9ICJhdXRvIiwKKwlbU1RBQ185ODcyX1ZBSU9dID0gInZhaW8iLAorfTsKKworc3RhdGljIHVuc2lnbmVkIGludCAqc3RhYzk4NzJfYnJkX3RibFtTVEFDXzk4NzJfTU9ERUxTXSA9IHsKKwlbU1RBQ185ODcyX1ZBSU9dID0gc3RhYzk4NzJfdmFpb19waW5fY29uZmlncywKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBzdGFjOTg3Ml9jZmdfdGJsW10gPSB7Ci0JU05EX1BDSV9RVUlSSygweDEwNGQsIDB4ODFlNiwgIlNvbnkgVkFJTyBGL1MiLCBDWEQ5ODcyUkRfVkFJTyksCi0JU05EX1BDSV9RVUlSSygweDEwNGQsIDB4ODFlZiwgIlNvbnkgVkFJTyBGL1MiLCBDWEQ5ODcyUkRfVkFJTyksCi0JU05EX1BDSV9RVUlSSygweDEwNGQsIDB4ODFmZCwgIlNvbnkgVkFJTyBBUiIsIENYRDk4NzJBS0RfVkFJTyksCi0JU05EX1BDSV9RVUlSSygweDEwNGQsIDB4ODIwNSwgIlNvbnkgVkFJTyBBUiIsIENYRDk4NzJBS0RfVkFJTyksCi0Je30KKwl7fSAvKiB0ZXJtaW5hdG9yICovCiB9OwogCiBzdGF0aWMgaW50IHBhdGNoX3N0YWM5ODcyKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjOwotCWludCBib2FyZF9jb25maWc7CisJaW50IGVycjsKIAotCWJvYXJkX2NvbmZpZyA9IHNuZF9oZGFfY2hlY2tfYm9hcmRfY29uZmlnKGNvZGVjLCBTVEFDXzk4NzJfTU9ERUxTLAotCQkJCQkJICBzdGFjOTg3Ml9tb2RlbHMsCi0JCQkJCQkgIHN0YWM5ODcyX2NmZ190YmwpOwotCWlmIChib2FyZF9jb25maWcgPCAwKQotCQkvKiB1bmtub3duIGNvbmZpZywgbGV0IGdlbmVyaWMtcGFyc2VyIGRvIGl0cyBqb2IuLi4gKi8KLQkJcmV0dXJuIHNuZF9oZGFfcGFyc2VfZ2VuZXJpY19jb2RlYyhjb2RlYyk7Ci0JCiAJc3BlYyAgPSBremFsbG9jKHNpemVvZigqc3BlYyksIEdGUF9LRVJORUwpOwogCWlmIChzcGVjID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwotCiAJY29kZWMtPnNwZWMgPSBzcGVjOwotCXN3aXRjaCAoYm9hcmRfY29uZmlnKSB7Ci0JY2FzZSBDWEQ5ODcyUkRfVkFJTzoKLQljYXNlIFNUQUM5ODcyQUtfVkFJTzoKLQljYXNlIFNUQUM5ODcyS19WQUlPOgotCQlzcGVjLT5taXhlciA9IHZhaW9fbWl4ZXI7Ci0JCXNwZWMtPmluaXQgPSB2YWlvX2luaXQ7Ci0JCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IDI7Ci0JCXNwZWMtPm11bHRpb3V0Lm51bV9kYWNzID0gQVJSQVlfU0laRSh2YWlvX2RhY3MpOwotCQlzcGVjLT5tdWx0aW91dC5kYWNfbmlkcyA9IHZhaW9fZGFjczsKLQkJc3BlYy0+bXVsdGlvdXQuaHBfbmlkID0gVkFJT19IUF9EQUM7Ci0JCXNwZWMtPm51bV9hZGNzID0gQVJSQVlfU0laRSh2YWlvX2FkY3MpOwotCQlzcGVjLT5hZGNfbmlkcyA9IHZhaW9fYWRjczsKLQkJc3BlYy0+bnVtX3B3cnMgPSAwOwotCQlzcGVjLT5pbnB1dF9tdXggPSAmdmFpb19tdXg7Ci0JCXNwZWMtPm11eF9uaWRzID0gdmFpb19tdXhfbmlkczsKLQkJY29kZWMtPnBhdGNoX29wcyA9IHN0YWM5ODcyX3ZhaW9fcGF0Y2hfb3BzOwotCQlicmVhazsKLQkKLQljYXNlIENYRDk4NzJBS0RfVkFJTzoKLQkJc3BlYy0+bWl4ZXIgPSB2YWlvX2FyX21peGVyOwotCQlzcGVjLT5pbml0ID0gdmFpb19hcl9pbml0OwotCQlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSAyOwotCQlzcGVjLT5tdWx0aW91dC5udW1fZGFjcyA9IEFSUkFZX1NJWkUodmFpb19kYWNzKTsKLQkJc3BlYy0+bXVsdGlvdXQuZGFjX25pZHMgPSB2YWlvX2RhY3M7Ci0JCXNwZWMtPm11bHRpb3V0LmhwX25pZCA9IFZBSU9fSFBfREFDOwotCQlzcGVjLT5udW1fYWRjcyA9IEFSUkFZX1NJWkUodmFpb19hZGNzKTsKLQkJc3BlYy0+bnVtX3B3cnMgPSAwOwotCQlzcGVjLT5hZGNfbmlkcyA9IHZhaW9fYWRjczsKLQkJc3BlYy0+aW5wdXRfbXV4ID0gJnZhaW9fbXV4OwotCQlzcGVjLT5tdXhfbmlkcyA9IHZhaW9fbXV4X25pZHM7Ci0JCWNvZGVjLT5wYXRjaF9vcHMgPSBzdGFjOTg3Ml9wYXRjaF9vcHM7Ci0JCWJyZWFrOwotCX0KIAorCXNwZWMtPmJvYXJkX2NvbmZpZyA9IHNuZF9oZGFfY2hlY2tfYm9hcmRfY29uZmlnKGNvZGVjLCBTVEFDXzk4NzJfTU9ERUxTLAorCQkJCQkJCXN0YWM5ODcyX21vZGVscywKKwkJCQkJCQlzdGFjOTg3Ml9jZmdfdGJsKTsKKwlpZiAoc3BlYy0+Ym9hcmRfY29uZmlnIDwgMCkKKwkJc25kX3ByaW50ZGQoS0VSTl9JTkZPICJoZGFfY29kZWM6IFVua25vd24gbW9kZWwgZm9yIFNUQUM5ODcyLCAiCisJCQkgICAgInVzaW5nIEJJT1MgZGVmYXVsdHNcbiIpOworCWVsc2UKKwkJc3RhYzkyeHhfc2V0X2NvbmZpZ19yZWdzKGNvZGVjLAorCQkJCQkgc3RhYzk4NzJfYnJkX3RibFtzcGVjLT5ib2FyZF9jb25maWddKTsKKworCXNwZWMtPm51bV9waW5zID0gQVJSQVlfU0laRShzdGFjOTg3Ml9waW5fbmlkcyk7CisJc3BlYy0+cGluX25pZHMgPSBzdGFjOTg3Ml9waW5fbmlkczsKKwlzcGVjLT5tdWx0aW91dC5kYWNfbmlkcyA9IHNwZWMtPmRhY19uaWRzOworCXNwZWMtPm51bV9hZGNzID0gQVJSQVlfU0laRShzdGFjOTg3Ml9hZGNfbmlkcyk7CisJc3BlYy0+YWRjX25pZHMgPSBzdGFjOTg3Ml9hZGNfbmlkczsKKwlzcGVjLT5udW1fbXV4ZXMgPSBBUlJBWV9TSVpFKHN0YWM5ODcyX211eF9uaWRzKTsKKwlzcGVjLT5tdXhfbmlkcyA9IHN0YWM5ODcyX211eF9uaWRzOworCXNwZWMtPm1peGVyID0gc3RhYzk4NzJfbWl4ZXI7CisJc3BlYy0+aW5pdCA9IHN0YWM5ODcyX2NvcmVfaW5pdDsKKworCWVyciA9IHN0YWM5Mnh4X3BhcnNlX2F1dG9fY29uZmlnKGNvZGVjLCAweDEwLCAweDEyKTsKKwlpZiAoZXJyIDwgMCkgeworCQlzdGFjOTJ4eF9mcmVlKGNvZGVjKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXNwZWMtPmlucHV0X211eCA9ICZzcGVjLT5wcml2YXRlX2ltdXg7CisJY29kZWMtPnBhdGNoX29wcyA9IHN0YWM5Mnh4X3BhdGNoX29wczsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF92aWEuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfdmlhLmMKaW5kZXggYzc2MTM5NC4uYjI1YTVjYyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF92aWEuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3ZpYS5jCkBAIC0xMzA4LDE2ICsxMzA4LDEzIEBACiAJdW5zaWduZWQgaW50IGRlZl9jb25mOwogCXVuc2lnbmVkIGNoYXIgc2VxYXNzb2M7CiAKLQlkZWZfY29uZiA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLCAwLAotCQkJCSAgICAgIEFDX1ZFUkJfR0VUX0NPTkZJR19ERUZBVUxULCAwKTsKKwlkZWZfY29uZiA9IHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyhjb2RlYywgbmlkKTsKIAlzZXFhc3NvYyA9ICh1bnNpZ25lZCBjaGFyKSBnZXRfZGVmY2ZnX2Fzc29jaWF0aW9uKGRlZl9jb25mKTsKIAlzZXFhc3NvYyA9IChzZXFhc3NvYyA8PCA0KSB8IGdldF9kZWZjZmdfc2VxdWVuY2UoZGVmX2NvbmYpOwogCWlmIChnZXRfZGVmY2ZnX2Nvbm5lY3QoZGVmX2NvbmYpID09IEFDX0pBQ0tfUE9SVF9OT05FKSB7CiAJCWlmIChzZXFhc3NvYyA9PSAweGZmKSB7CiAJCQlkZWZfY29uZiA9IGRlZl9jb25mICYgKH4oQUNfSkFDS19QT1JUX0JPVEggPDwgMzApKTsKLQkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwKLQkJCQkJICAgIEFDX1ZFUkJfU0VUX0NPTkZJR19ERUZBVUxUX0JZVEVTXzMsCi0JCQkJCSAgICBkZWZfY29uZiA+PiAyNCk7CisJCQlzbmRfaGRhX2NvZGVjX3NldF9waW5jZmcoY29kZWMsIG5pZCwgZGVmX2NvbmYpOwogCQl9CiAJfQogCkBAIC0xMzU0LDcgKzEzNTEsNyBAQAogCiAJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgKiAyOwogCi0JaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dF9waW4pCisJaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dHMpCiAJCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gVlQxNzA4X0RJR09VVF9OSUQ7CiAJaWYgKHNwZWMtPmF1dG9jZmcuZGlnX2luX3BpbikKIAkJc3BlYy0+ZGlnX2luX25pZCA9IFZUMTcwOF9ESUdJTl9OSUQ7CkBAIC0xODI3LDcgKzE4MjQsNyBAQAogCiAJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgKiAyOwogCi0JaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dF9waW4pCisJaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dHMpCiAJCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gVlQxNzA5X0RJR09VVF9OSUQ7CiAJaWYgKHNwZWMtPmF1dG9jZmcuZGlnX2luX3BpbikKIAkJc3BlYy0+ZGlnX2luX25pZCA9IFZUMTcwOV9ESUdJTl9OSUQ7CkBAIC0yMzcxLDcgKzIzNjgsNyBAQAogCiAJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgKiAyOwogCi0JaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dF9waW4pCisJaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dHMpCiAJCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gVlQxNzA4Ql9ESUdPVVRfTklEOwogCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19pbl9waW4pCiAJCXNwZWMtPmRpZ19pbl9uaWQgPSBWVDE3MDhCX0RJR0lOX05JRDsKQEAgLTI4MzYsNyArMjgzMyw3IEBACiAKIAlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSBzcGVjLT5tdWx0aW91dC5udW1fZGFjcyAqIDI7CiAKLQlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfb3V0X3BpbikKKwlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfb3V0cykKIAkJc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQgPSBWVDE3MDhTX0RJR09VVF9OSUQ7CiAKIAlzcGVjLT5leHRyYV9kaWdfb3V0X25pZCA9IDB4MTU7CkBAIC0zMTU1LDcgKzMxNTIsNyBAQAogCiAJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgKiAyOwogCi0JaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dF9waW4pCisJaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dHMpCiAJCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gVlQxNzAyX0RJR09VVF9OSUQ7CiAKIAlzcGVjLT5leHRyYV9kaWdfb3V0X25pZCA9IDB4MUI7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzEyLmMgYi9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzEyLmMKaW5kZXggNThkN2NkYS4uM2RkNjNmMSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcxMi5jCisrKyBiL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuYwpAQCAtNDU4LDcgKzQ1OCw3IEBACiAJCQl1MTYgcGJrc3RhdHVzOwogCQkJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW07CiAJCQlwYmtzdGF0dXMgPSBpbncoSUNFRFMoaWNlLCBJTlRTVEFUKSk7Ci0JCQkvKiBwcmludGsoInBia3N0YXR1cyA9IDB4JXhcbiIsIHBia3N0YXR1cyk7ICovCisJCQkvKiBwcmludGsoS0VSTl9ERUJVRyAicGJrc3RhdHVzID0gMHgleFxuIiwgcGJrc3RhdHVzKTsgKi8KIAkJCWZvciAoaWR4ID0gMDsgaWR4IDwgNjsgaWR4KyspIHsKIAkJCQlpZiAoKHBia3N0YXR1cyAmICgzIDw8IChpZHggKiAyKSkpID09IDApCiAJCQkJCWNvbnRpbnVlOwpAQCAtMjY0OCw5ICsyNjQ4LDkgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAlzdHJjcHkoY2FyZC0+ZHJpdmVyLCAiSUNFMTcxMiIpOwogCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsICJJQ0Vuc2VtYmxlIElDRTE3MTIiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MjQuYyBiL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MjQuYwppbmRleCBiYjhkOGM3Li4xMjg1MTBlNyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcyNC5jCisrKyBiL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MjQuYwpAQCAtMjQxLDYgKzI0MSw4IEBACiAJCQkJc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSwgbGlzdCk7CiB9CiAKK3N0YXRpYyB2b2lkIGVuYWJsZV9taWRpX2lycShzdHJ1Y3Qgc25kX2ljZTE3MTIgKmljZSwgdTggZmxhZywgaW50IGVuYWJsZSk7CisKIHN0YXRpYyB2b2lkIHZ0MTcyNF9taWRpX3dyaXRlKHN0cnVjdCBzbmRfaWNlMTcxMiAqaWNlKQogewogCXN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKnM7CkBAIC0yNTQsNiArMjU2LDExIEBACiAJCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgKytpKQogCQkJb3V0YihidWZmZXJbaV0sIElDRVJFRzE3MjQoaWNlLCBNUFVfREFUQSkpOwogCX0KKwkvKiBtYXNrIGlycSB3aGVuIGFsbCBieXRlcyBoYXZlIGJlZW4gdHJhbnNtaXR0ZWQuCisJICogZW5hYmxlZCBhZ2FpbiBpbiBvdXRwdXRfdHJpZ2dlciB3aGVuIHRoZSBuZXcgZGF0YSBjb21lcyBpbi4KKwkgKi8KKwllbmFibGVfbWlkaV9pcnEoaWNlLCBWVDE3MjRfSVJRX01QVV9UWCwKKwkJCSFzbmRfcmF3bWlkaV90cmFuc21pdF9lbXB0eShzKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHZ0MTcyNF9taWRpX3JlYWQoc3RydWN0IHNuZF9pY2UxNzEyICppY2UpCkBAIC0yNzIsMzEgKzI3OSwzNCBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgdnQxNzI0X2VuYWJsZV9taWRpX2lycShzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICpzdWJzdHJlYW0sCi0JCQkJICAgdTggZmxhZywgaW50IGVuYWJsZSkKKy8qIGNhbGwgd2l0aCBpY2UtPnJlZ19sb2NrICovCitzdGF0aWMgdm9pZCBlbmFibGVfbWlkaV9pcnEoc3RydWN0IHNuZF9pY2UxNzEyICppY2UsIHU4IGZsYWcsIGludCBlbmFibGUpCiB7Ci0Jc3RydWN0IHNuZF9pY2UxNzEyICppY2UgPSBzdWJzdHJlYW0tPnJtaWRpLT5wcml2YXRlX2RhdGE7Ci0JdTggbWFzazsKLQotCXNwaW5fbG9ja19pcnEoJmljZS0+cmVnX2xvY2spOwotCW1hc2sgPSBpbmIoSUNFUkVHMTcyNChpY2UsIElSUU1BU0spKTsKKwl1OCBtYXNrID0gaW5iKElDRVJFRzE3MjQoaWNlLCBJUlFNQVNLKSk7CiAJaWYgKGVuYWJsZSkKIAkJbWFzayAmPSB+ZmxhZzsKIAllbHNlCiAJCW1hc2sgfD0gZmxhZzsKIAlvdXRiKG1hc2ssIElDRVJFRzE3MjQoaWNlLCBJUlFNQVNLKSk7Cit9CisKK3N0YXRpYyB2b2lkIHZ0MTcyNF9lbmFibGVfbWlkaV9pcnEoc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCSAgIHU4IGZsYWcsIGludCBlbmFibGUpCit7CisJc3RydWN0IHNuZF9pY2UxNzEyICppY2UgPSBzdWJzdHJlYW0tPnJtaWRpLT5wcml2YXRlX2RhdGE7CisKKwlzcGluX2xvY2tfaXJxKCZpY2UtPnJlZ19sb2NrKTsKKwllbmFibGVfbWlkaV9pcnEoaWNlLCBmbGFnLCBlbmFibGUpOwogCXNwaW5fdW5sb2NrX2lycSgmaWNlLT5yZWdfbG9jayk7CiB9CiAKIHN0YXRpYyBpbnQgdnQxNzI0X21pZGlfb3V0cHV0X29wZW4oc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqcykKIHsKLQl2dDE3MjRfZW5hYmxlX21pZGlfaXJxKHMsIFZUMTcyNF9JUlFfTVBVX1RYLCAxKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2dDE3MjRfbWlkaV9vdXRwdXRfY2xvc2Uoc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqcykKIHsKLQl2dDE3MjRfZW5hYmxlX21pZGlfaXJxKHMsIFZUMTcyNF9JUlFfTVBVX1RYLCAwKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzExLDYgKzMyMSw3IEBACiAJCXZ0MTcyNF9taWRpX3dyaXRlKGljZSk7CiAJfSBlbHNlIHsKIAkJaWNlLT5taWRpX291dHB1dCA9IDA7CisJCWVuYWJsZV9taWRpX2lycShpY2UsIFZUMTcyNF9JUlFfTVBVX1RYLCAwKTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWNlLT5yZWdfbG9jaywgZmxhZ3MpOwogfQpAQCAtMzIwLDYgKzMzMSw3IEBACiAJc3RydWN0IHNuZF9pY2UxNzEyICppY2UgPSBzLT5ybWlkaS0+cHJpdmF0ZV9kYXRhOwogCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKIAorCXZ0MTcyNF9lbmFibGVfbWlkaV9pcnEocywgVlQxNzI0X0lSUV9NUFVfVFgsIDApOwogCS8qIDMyIGJ5dGVzIHNob3VsZCBiZSB0cmFuc21pdHRlZCBpbiBsZXNzIHRoYW4gYWJvdXQgMTIgbXMgKi8KIAl0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMTUpOwogCWRvIHsKQEAgLTM4OSwyNCArNDAxLDI0IEBACiAJCXN0YXR1cyAmPSBzdGF0dXNfbWFzazsKIAkJaWYgKHN0YXR1cyA9PSAwKQogCQkJYnJlYWs7CisJCXNwaW5fbG9jaygmaWNlLT5yZWdfbG9jayk7CiAJCWlmICgrK3RpbWVvdXQgPiAxMCkgewogCQkJc3RhdHVzID0gaW5iKElDRVJFRzE3MjQoaWNlLCBJUlFTVEFUKSk7CiAJCQlwcmludGsoS0VSTl9FUlIgImljZTE3MjQ6IFRvbyBsb25nIGlycSBsb29wLCAiCiAJCQkgICAgICAgInN0YXR1cyA9IDB4JXhcbiIsIHN0YXR1cyk7CiAJCQlpZiAoc3RhdHVzICYgVlQxNzI0X0lSUV9NUFVfVFgpIHsKIAkJCQlwcmludGsoS0VSTl9FUlIgImljZTE3MjQ6IERpc2FibGluZyBNUFVfVFhcbiIpOwotCQkJCW91dGIoaW5iKElDRVJFRzE3MjQoaWNlLCBJUlFNQVNLKSkgfAotCQkJCSAgICAgVlQxNzI0X0lSUV9NUFVfVFgsCi0JCQkJICAgICBJQ0VSRUcxNzI0KGljZSwgSVJRTUFTSykpOworCQkJCWVuYWJsZV9taWRpX2lycShpY2UsIFZUMTcyNF9JUlFfTVBVX1RYLCAwKTsKIAkJCX0KKwkJCXNwaW5fdW5sb2NrKCZpY2UtPnJlZ19sb2NrKTsKIAkJCWJyZWFrOwogCQl9CiAJCWhhbmRsZWQgPSAxOwogCQlpZiAoc3RhdHVzICYgVlQxNzI0X0lSUV9NUFVfVFgpIHsKLQkJCXNwaW5fbG9jaygmaWNlLT5yZWdfbG9jayk7CiAJCQlpZiAoaWNlLT5taWRpX291dHB1dCkKIAkJCQl2dDE3MjRfbWlkaV93cml0ZShpY2UpOwotCQkJc3Bpbl91bmxvY2soJmljZS0+cmVnX2xvY2spOworCQkJZWxzZQorCQkJCWVuYWJsZV9taWRpX2lycShpY2UsIFZUMTcyNF9JUlFfTVBVX1RYLCAwKTsKIAkJCS8qIER1ZSB0byBteXN0ZXJpY2FsIHJlYXNvbnMsIE1QVV9UWCBpcyBhbHdheXMKIAkJCSAqIGdlbmVyYXRlZCAoYW5kIGNhbid0IGJlIGNsZWFyZWQpIHdoZW4gYSBQQ00KIAkJCSAqIHBsYXliYWNrIGlzIGdvaW5nLiAgU28gbGV0J3MgaWdub3JlIGF0IHRoZQpAQCAtNDE1LDE1ICs0MjcsMTQgQEAKIAkJCXN0YXR1c19tYXNrICY9IH5WVDE3MjRfSVJRX01QVV9UWDsKIAkJfQogCQlpZiAoc3RhdHVzICYgVlQxNzI0X0lSUV9NUFVfUlgpIHsKLQkJCXNwaW5fbG9jaygmaWNlLT5yZWdfbG9jayk7CiAJCQlpZiAoaWNlLT5taWRpX2lucHV0KQogCQkJCXZ0MTcyNF9taWRpX3JlYWQoaWNlKTsKIAkJCWVsc2UKIAkJCQl2dDE3MjRfbWlkaV9jbGVhcl9yeChpY2UpOwotCQkJc3Bpbl91bmxvY2soJmljZS0+cmVnX2xvY2spOwogCQl9CiAJCS8qIGFjayBNUFUgaXJxICovCiAJCW91dGIoc3RhdHVzLCBJQ0VSRUcxNzI0KGljZSwgSVJRU1RBVCkpOworCQlzcGluX3VubG9jaygmaWNlLT5yZWdfbG9jayk7CiAJCWlmIChzdGF0dXMgJiBWVDE3MjRfSVJRX01UUENNKSB7CiAJCQkvKgogCQkJICogTXVsdGktdHJhY2sgUENNCkBAIC03NDUsNyArNzU2LDE0IEBACiAKIAlzcGluX3VubG9ja19pcnEoJmljZS0+cmVnX2xvY2spOwogCi0JLyogcHJpbnRrKCJwcm8gcHJlcGFyZTogY2ggPSAlZCwgYWRkciA9IDB4JXgsIGJ1ZmZlciA9IDB4JXgsIHBlcmlvZCA9IDB4JXhcbiIsIHN1YnN0cmVhbS0+cnVudGltZS0+Y2hhbm5lbHMsICh1bnNpZ25lZCBpbnQpc3Vic3RyZWFtLT5ydW50aW1lLT5kbWFfYWRkciwgc25kX3BjbV9saWJfYnVmZmVyX2J5dGVzKHN1YnN0cmVhbSksIHNuZF9wY21fbGliX3BlcmlvZF9ieXRlcyhzdWJzdHJlYW0pKTsgKi8KKwkvKgorCXByaW50ayhLRVJOX0RFQlVHICJwcm8gcHJlcGFyZTogY2ggPSAlZCwgYWRkciA9IDB4JXgsICIKKwkgICAgICAgImJ1ZmZlciA9IDB4JXgsIHBlcmlvZCA9IDB4JXhcbiIsCisJICAgICAgIHN1YnN0cmVhbS0+cnVudGltZS0+Y2hhbm5lbHMsCisJICAgICAgICh1bnNpZ25lZCBpbnQpc3Vic3RyZWFtLT5ydW50aW1lLT5kbWFfYWRkciwKKwkgICAgICAgc25kX3BjbV9saWJfYnVmZmVyX2J5dGVzKHN1YnN0cmVhbSksCisJICAgICAgIHNuZF9wY21fbGliX3BlcmlvZF9ieXRlcyhzdWJzdHJlYW0pKTsKKwkqLwogCXJldHVybiAwOwogfQogCkBAIC0yMTIyLDcgKzIxNDAsOSBAQAogCXdhaXRfaTJjX2J1c3koaWNlKTsKIAl2YWwgPSBpbmIoSUNFUkVHMTcyNChpY2UsIEkyQ19EQVRBKSk7CiAJbXV0ZXhfdW5sb2NrKCZpY2UtPmkyY19tdXRleCk7Ci0JLyogcHJpbnRrKCJpMmNfcmVhZDogWzB4JXgsMHgleF0gPSAweCV4XG4iLCBkZXYsIGFkZHIsIHZhbCk7ICovCisJLyoKKwlwcmludGsoS0VSTl9ERUJVRyAiaTJjX3JlYWQ6IFsweCV4LDB4JXhdID0gMHgleFxuIiwgZGV2LCBhZGRyLCB2YWwpOworCSovCiAJcmV0dXJuIHZhbDsKIH0KIApAQCAtMjEzMSw3ICsyMTUxLDkgQEAKIHsKIAltdXRleF9sb2NrKCZpY2UtPmkyY19tdXRleCk7CiAJd2FpdF9pMmNfYnVzeShpY2UpOwotCS8qIHByaW50aygiaTJjX3dyaXRlOiBbMHgleCwweCV4XSA9IDB4JXhcbiIsIGRldiwgYWRkciwgZGF0YSk7ICovCisJLyoKKwlwcmludGsoS0VSTl9ERUJVRyAiaTJjX3dyaXRlOiBbMHgleCwweCV4XSA9IDB4JXhcbiIsIGRldiwgYWRkciwgZGF0YSk7CisJKi8KIAlvdXRiKGFkZHIsIElDRVJFRzE3MjQoaWNlLCBJMkNfQllURV9BRERSKSk7CiAJb3V0YihkYXRhLCBJQ0VSRUcxNzI0KGljZSwgSTJDX0RBVEEpKTsKIAlvdXRiKGRldiB8IFZUMTcyNF9JMkNfV1JJVEUsIElDRVJFRzE3MjQoaWNlLCBJMkNfREVWX0FERFIpKTsKQEAgLTI0NTYsOSArMjQ3OCw5IEBACiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJc3RyY3B5KGNhcmQtPmRyaXZlciwgIklDRTE3MjQiKTsKIAlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAiSUNFbnNlbWJsZSBJQ0UxNzI0Iik7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaWNlMTcxMi9qdWxpLmMgYi9zb3VuZC9wY2kvaWNlMTcxMi9qdWxpLmMKaW5kZXggYzUxNjU5Yi4uZmQ5NDhiZiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2ljZTE3MTIvanVsaS5jCisrKyBiL3NvdW5kL3BjaS9pY2UxNzEyL2p1bGkuYwpAQCAtMzQ1LDggKzM0NSw5IEBACiAJCQluZXdfZ3BpbyA9ICBvbGRfZ3BpbyAmCiAJCQkJfigodW5zaWduZWQgaW50KSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSk7CiAJfQotCS8qIHByaW50aygiSlVMSSAtIG11dGUvdW5tdXRlOiBjb250cm9sX3ZhbHVlOiAweCV4LCBvbGRfZ3BpbzogMHgleCwgXAotCQluZXdfZ3BpbyAweCV4XG4iLAorCS8qIHByaW50ayhLRVJOX0RFQlVHCisJCSJKVUxJIC0gbXV0ZS91bm11dGU6IGNvbnRyb2xfdmFsdWU6IDB4JXgsIG9sZF9ncGlvOiAweCV4LCAiCisJCSJuZXdfZ3BpbyAweCV4XG4iLAogCQkodW5zaWduZWQgaW50KXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdLCBvbGRfZ3BpbywKIAkJbmV3X2dwaW8pOyAqLwogCWlmIChvbGRfZ3BpbyAhPSBuZXdfZ3BpbykgewpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ljZTE3MTIvcHJvZGlneTE5Mi5jIGIvc291bmQvcGNpL2ljZTE3MTIvcHJvZGlneTE5Mi5jCmluZGV4IDQ4ZDM2NzkuLjJhOGU1Y2QgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9pY2UxNzEyL3Byb2RpZ3kxOTIuYworKysgYi9zb3VuZC9wY2kvaWNlMTcxMi9wcm9kaWd5MTkyLmMKQEAgLTEzMyw4ICsxMzMsMTAgQEAKIAkJaWR4ICA9IHNuZF9jdGxfZ2V0X2lvZmZpZHgoa2NvbnRyb2wsICZ1Y29udHJvbC0+aWQpICsgU1RBQzk0NlhfTEZfVk9MVU1FOwogCS8qIGR1ZSB0byBwb3NzaWJsZSBjb25mbGljdHMgd2l0aCBzdGFjOTQ2MF9zZXRfcmF0ZV92YWwsIG11dGV4aW5nICovCiAJbXV0ZXhfbG9jaygmc3BlYy0+bXV0ZV9tdXRleCk7Ci0JLypwcmludGsoIk11dGUgcHV0OiByZWcgMHglMDJ4LCBjdHJsIHZhbHVlOiAweCUwMnhcbiIsIGlkeCwKLQkJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0pOyovCisJLyoKKwlwcmludGsoS0VSTl9ERUJVRyAiTXV0ZSBwdXQ6IHJlZyAweCUwMngsIGN0cmwgdmFsdWU6IDB4JTAyeFxuIiwgaWR4LAorCSAgICAgICB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSk7CisJKi8KIAljaGFuZ2UgPSBzdGFjOTQ2MF9kYWNfbXV0ZShpY2UsIGlkeCwgdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0pOwogCW11dGV4X3VubG9jaygmc3BlYy0+bXV0ZV9tdXRleCk7CiAJcmV0dXJuIGNoYW5nZTsKQEAgLTE4NSw3ICsxODcsMTAgQEAKIAljaGFuZ2UgPSAob3ZvbCAhPSBudm9sKTsKIAlpZiAoY2hhbmdlKSB7CiAJCW92b2wgPSAgKDB4N2YgLSBudm9sKSB8ICh0bXAgJiAweDgwKTsKLQkJLypwcmludGsoIkRBQyBWb2x1bWU6IHJlZyAweCUwMng6IDB4JTAyeFxuIiwgaWR4LCBvdm9sKTsqLworCQkvKgorCQlwcmludGsoS0VSTl9ERUJVRyAiREFDIFZvbHVtZTogcmVnIDB4JTAyeDogMHglMDJ4XG4iLAorCQkgICAgICAgaWR4LCBvdm9sKTsKKwkJKi8KIAkJc3RhYzk0NjBfcHV0KGljZSwgaWR4LCAoMHg3ZiAtIG52b2wpIHwgKHRtcCAmIDB4ODApKTsKIAl9CiAJcmV0dXJuIGNoYW5nZTsKQEAgLTM0NCw3ICszNDksNyBAQAogCWZvciAoaWR4ID0gMDsgaWR4IDwgNyA7ICsraWR4KQogCQljaGFuZ2VkW2lkeF0gPSBzdGFjOTQ2MF9kYWNfbXV0ZShpY2UsCiAJCQkJU1RBQzk0NlhfTUFTVEVSX1ZPTFVNRSArIGlkeCwgMCk7Ci0JLypwcmludGsoIlJhdGUgY2hhbmdlOiAlZCwgbmV3IE1DOiAweCUwMnhcbiIsIHJhdGUsIG5ldyk7Ki8KKwkvKnByaW50ayhLRVJOX0RFQlVHICJSYXRlIGNoYW5nZTogJWQsIG5ldyBNQzogMHglMDJ4XG4iLCByYXRlLCBuZXcpOyovCiAJc3RhYzk0NjBfcHV0KGljZSwgU1RBQzk0NlhfTUFTVEVSX0NMT0NLSU5HLCBuZXcpOwogCXVkZWxheSgxMCk7CiAJLyogdW5tdXRpbmcgLSBvbmx5IG9yaWdpbmFsbHkgdW5tdXRlZCBkYWNzIC0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9pbnRlbDh4MC5jIGIvc291bmQvcGNpL2ludGVsOHgwLmMKaW5kZXggZTkwMGNkYy4uNTc2NDg4MSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2ludGVsOHgwLmMKKysrIGIvc291bmQvcGNpL2ludGVsOHgwLmMKQEAgLTY4OSw3ICs2ODksNyBAQAogCQkJYmRiYXJbaWR4ICsgMV0gPSBjcHVfdG9fbGUzMigweDgwMDAwMDAwIHwgLyogaW50ZXJydXB0IG9uIGNvbXBsZXRpb24gKi8KIAkJCQkJCSAgICAgaWNoZGV2LT5mcmFnc2l6ZSA+PiBpY2hkZXYtPnBvc19zaGlmdCk7CiAjaWYgMAotCQkJcHJpbnRrKCJiZGJhclslaV0gPSAweCV4IFsweCV4XVxuIiwKKwkJCXByaW50ayhLRVJOX0RFQlVHICJiZGJhclslaV0gPSAweCV4IFsweCV4XVxuIiwKIAkJCSAgICAgICBpZHggKyAwLCBiZGJhcltpZHggKyAwXSwgYmRiYXJbaWR4ICsgMV0pOwogI2VuZGlmCiAJCX0KQEAgLTcwMSw4ICs3MDEsMTAgQEAKIAlpY2hkZXYtPmx2aV9mcmFnID0gSUNIX1JFR19MVklfTUFTSyAlIGljaGRldi0+ZnJhZ3M7CiAJaWNoZGV2LT5wb3NpdGlvbiA9IDA7CiAjaWYgMAotCXByaW50aygibHZpX2ZyYWcgPSAlaSwgZnJhZ3MgPSAlaSwgcGVyaW9kX3NpemUgPSAweCV4LCBwZXJpb2Rfc2l6ZTEgPSAweCV4XG4iLAotCQkJaWNoZGV2LT5sdmlfZnJhZywgaWNoZGV2LT5mcmFncywgaWNoZGV2LT5mcmFnc2l6ZSwgaWNoZGV2LT5mcmFnc2l6ZTEpOworCXByaW50ayhLRVJOX0RFQlVHICJsdmlfZnJhZyA9ICVpLCBmcmFncyA9ICVpLCBwZXJpb2Rfc2l6ZSA9IDB4JXgsICIKKwkgICAgICAgInBlcmlvZF9zaXplMSA9IDB4JXhcbiIsCisJICAgICAgIGljaGRldi0+bHZpX2ZyYWcsIGljaGRldi0+ZnJhZ3MsIGljaGRldi0+ZnJhZ3NpemUsCisJICAgICAgIGljaGRldi0+ZnJhZ3NpemUxKTsKICNlbmRpZgogCS8qIGNsZWFyIGludGVycnVwdHMgKi8KIAlpcHV0Ynl0ZShjaGlwLCBwb3J0ICsgaWNoZGV2LT5yb2ZmX3NyLCBJQ0hfRklGT0UgfCBJQ0hfQkNJUyB8IElDSF9MVkJDSSk7CkBAIC03NjgsNyArNzcwLDggQEAKIAkJaWNoZGV2LT5sdmlfZnJhZyAlPSBpY2hkZXYtPmZyYWdzOwogCQlpY2hkZXYtPmJkYmFyW2ljaGRldi0+bHZpICogMl0gPSBjcHVfdG9fbGUzMihpY2hkZXYtPnBoeXNidWYgKyBpY2hkZXYtPmx2aV9mcmFnICogaWNoZGV2LT5mcmFnc2l6ZTEpOwogI2lmIDAKLQlwcmludGsoIm5ldzogYmRiYXJbJWldID0gMHgleCBbMHgleF0sIHByZWZldGNoID0gJWksIGFsbCA9IDB4JXgsIDB4JXhcbiIsCisJcHJpbnRrKEtFUk5fREVCVUcgIm5ldzogYmRiYXJbJWldID0gMHgleCBbMHgleF0sIHByZWZldGNoID0gJWksICIKKwkgICAgICAgImFsbCA9IDB4JXgsIDB4JXhcbiIsCiAJICAgICAgIGljaGRldi0+bHZpICogMiwgaWNoZGV2LT5iZGJhcltpY2hkZXYtPmx2aSAqIDJdLAogCSAgICAgICBpY2hkZXYtPmJkYmFyW2ljaGRldi0+bHZpICogMiArIDFdLCBpbmIoSUNIX1JFR19PRkZfUElWICsgcG9ydCksCiAJICAgICAgIGlubChwb3J0ICsgNCksIGluYihwb3J0ICsgSUNIX1JFR19PRkZfQ1IpKTsKQEAgLTIyODcsMjMgKzIyOTAsMjMgQEAKIAlpcHV0ZHdvcmQoY2hpcCwgSUNIUkVHKEFMSV9JTlRFUlJVUFRTUiksIDB4MDAwMDAwMDApOwogfQogCi1zdGF0aWMgaW50IHNuZF9pbnRlbDh4MF9pY2hfY2hpcF9pbml0KHN0cnVjdCBpbnRlbDh4MCAqY2hpcCwgaW50IHByb2JpbmcpCi17Ci0JdW5zaWduZWQgbG9uZyBlbmRfdGltZTsKLQl1bnNpZ25lZCBpbnQgY250LCBzdGF0dXMsIG5zdGF0dXM7Ci0JCi0JLyogcHV0IGxvZ2ljIHRvIHJpZ2h0IHN0YXRlICovCi0JLyogZmlyc3QgY2xlYXIgc3RhdHVzIGJpdHMgKi8KLQlzdGF0dXMgPSBJQ0hfUkNTIHwgSUNIX01DSU5UIHwgSUNIX1BPSU5UIHwgSUNIX1BJSU5UOwotCWlmIChjaGlwLT5kZXZpY2VfdHlwZSA9PSBERVZJQ0VfTkZPUkNFKQotCQlzdGF0dXMgfD0gSUNIX05WU1BJTlQ7Ci0JY250ID0gaWdldGR3b3JkKGNoaXAsIElDSFJFRyhHTE9CX1NUQSkpOwotCWlwdXRkd29yZChjaGlwLCBJQ0hSRUcoR0xPQl9TVEEpLCBjbnQgJiBzdGF0dXMpOworI2lmZGVmIENPTkZJR19TTkRfQUM5N19QT1dFUl9TQVZFCitzdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgaWNoX2NoaXBfcmVzZXRfbW9kZVtdID0geworCVNORF9QQ0lfUVVJUksoMHgxMDE0LCAweDA1MWYsICJUaGlua3BhZCBSMzIiLCAxKSwKKwl7IH0gLyogZW5kICovCit9OwogCitzdGF0aWMgaW50IHNuZF9pbnRlbDh4MF9pY2hfY2hpcF9jb2xkX3Jlc2V0KHN0cnVjdCBpbnRlbDh4MCAqY2hpcCkKK3sKKwl1bnNpZ25lZCBpbnQgY250OwogCS8qIEFDTGluayBvbiwgMiBjaGFubmVscyAqLworCisJaWYgKHNuZF9wY2lfcXVpcmtfbG9va3VwKGNoaXAtPnBjaSwgaWNoX2NoaXBfcmVzZXRfbW9kZSkpCisJCXJldHVybiAtRUlPOworCiAJY250ID0gaWdldGR3b3JkKGNoaXAsIElDSFJFRyhHTE9CX0NOVCkpOwogCWNudCAmPSB+KElDSF9BQ0xJTksgfCBJQ0hfUENNXzI0Nl9NQVNLKTsKLSNpZmRlZiBDT05GSUdfU05EX0FDOTdfUE9XRVJfU0FWRQorCiAJLyogZG8gY29sZCByZXNldCAtIHRoZSBmdWxsIGFjOTcgcG93ZXJkb3duIG1heSBsZWF2ZSB0aGUgY29udHJvbGxlcgogCSAqIGluIGEgd2FybSBzdGF0ZSBidXQgYWN0dWFsbHkgaXQgY2Fubm90IGNvbW11bmljYXRlIHdpdGggdGhlIGNvZGVjLgogCSAqLwpAQCAtMjMxMiwyMiArMjMxNSw1OCBAQAogCXVkZWxheSgxMCk7CiAJaXB1dGR3b3JkKGNoaXAsIElDSFJFRyhHTE9CX0NOVCksIGNudCB8IElDSF9BQzk3Q09MRCk7CiAJbXNsZWVwKDEpOworCXJldHVybiAwOworfQorI2RlZmluZSBzbmRfaW50ZWw4eDBfaWNoX2NoaXBfY2FuX2NvbGRfcmVzZXQoY2hpcCkgXAorCSghc25kX3BjaV9xdWlya19sb29rdXAoY2hpcC0+cGNpLCBpY2hfY2hpcF9yZXNldF9tb2RlKSkKICNlbHNlCisjZGVmaW5lIHNuZF9pbnRlbDh4MF9pY2hfY2hpcF9jb2xkX3Jlc2V0KGNoaXApCTAKKyNkZWZpbmUgc25kX2ludGVsOHgwX2ljaF9jaGlwX2Nhbl9jb2xkX3Jlc2V0KGNoaXApICgwKQorI2VuZGlmCisKK3N0YXRpYyBpbnQgc25kX2ludGVsOHgwX2ljaF9jaGlwX3Jlc2V0KHN0cnVjdCBpbnRlbDh4MCAqY2hpcCkKK3sKKwl1bnNpZ25lZCBsb25nIGVuZF90aW1lOworCXVuc2lnbmVkIGludCBjbnQ7CisJLyogQUNMaW5rIG9uLCAyIGNoYW5uZWxzICovCisJY250ID0gaWdldGR3b3JkKGNoaXAsIElDSFJFRyhHTE9CX0NOVCkpOworCWNudCAmPSB+KElDSF9BQ0xJTksgfCBJQ0hfUENNXzI0Nl9NQVNLKTsKIAkvKiBmaW5pc2ggY29sZCBvciBkbyB3YXJtIHJlc2V0ICovCiAJY250IHw9IChjbnQgJiBJQ0hfQUM5N0NPTEQpID09IDAgPyBJQ0hfQUM5N0NPTEQgOiBJQ0hfQUM5N1dBUk07CiAJaXB1dGR3b3JkKGNoaXAsIElDSFJFRyhHTE9CX0NOVCksIGNudCk7CiAJZW5kX3RpbWUgPSAoamlmZmllcyArIChIWiAvIDQpKSArIDE7CiAJZG8gewogCQlpZiAoKGlnZXRkd29yZChjaGlwLCBJQ0hSRUcoR0xPQl9DTlQpKSAmIElDSF9BQzk3V0FSTSkgPT0gMCkKLQkJCWdvdG8gX19vazsKKwkJCXJldHVybiAwOwogCQlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZSgxKTsKIAl9IHdoaWxlICh0aW1lX2FmdGVyX2VxKGVuZF90aW1lLCBqaWZmaWVzKSk7CiAJc25kX3ByaW50ayhLRVJOX0VSUiAiQUMnOTcgd2FybSByZXNldCBzdGlsbCBpbiBwcm9ncmVzcz8gWzB4JXhdXG4iLAogCQkgICBpZ2V0ZHdvcmQoY2hpcCwgSUNIUkVHKEdMT0JfQ05UKSkpOwogCXJldHVybiAtRUlPOworfQogCi0gICAgICBfX29rOgotI2VuZGlmCitzdGF0aWMgaW50IHNuZF9pbnRlbDh4MF9pY2hfY2hpcF9pbml0KHN0cnVjdCBpbnRlbDh4MCAqY2hpcCwgaW50IHByb2JpbmcpCit7CisJdW5zaWduZWQgbG9uZyBlbmRfdGltZTsKKwl1bnNpZ25lZCBpbnQgc3RhdHVzLCBuc3RhdHVzOworCXVuc2lnbmVkIGludCBjbnQ7CisJaW50IGVycjsKKworCS8qIHB1dCBsb2dpYyB0byByaWdodCBzdGF0ZSAqLworCS8qIGZpcnN0IGNsZWFyIHN0YXR1cyBiaXRzICovCisJc3RhdHVzID0gSUNIX1JDUyB8IElDSF9NQ0lOVCB8IElDSF9QT0lOVCB8IElDSF9QSUlOVDsKKwlpZiAoY2hpcC0+ZGV2aWNlX3R5cGUgPT0gREVWSUNFX05GT1JDRSkKKwkJc3RhdHVzIHw9IElDSF9OVlNQSU5UOworCWNudCA9IGlnZXRkd29yZChjaGlwLCBJQ0hSRUcoR0xPQl9TVEEpKTsKKwlpcHV0ZHdvcmQoY2hpcCwgSUNIUkVHKEdMT0JfU1RBKSwgY250ICYgc3RhdHVzKTsKKworCWlmIChzbmRfaW50ZWw4eDBfaWNoX2NoaXBfY2FuX2NvbGRfcmVzZXQoY2hpcCkpCisJCWVyciA9IHNuZF9pbnRlbDh4MF9pY2hfY2hpcF9jb2xkX3Jlc2V0KGNoaXApOworCWVsc2UKKwkJZXJyID0gc25kX2ludGVsOHgwX2ljaF9jaGlwX3Jlc2V0KGNoaXApOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCiAJaWYgKHByb2JpbmcpIHsKIAkJLyogd2FpdCBmb3IgYW55IGNvZGVjIHJlYWR5IHN0YXR1cy4KIAkJICogT25jZSBpdCBiZWNvbWVzIHJlYWR5IGl0IHNob3VsZCByZW1haW4gcmVhZHkKQEAgLTMwNTgsOSArMzA5Nyw5IEBACiAJaW50IGVycjsKIAlzdHJ1Y3Qgc2hvcnRuYW1lX3RhYmxlICpuYW1lOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleCwgaWQsIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJaWYgKHNwZGlmX2FjbGluayA8IDApCiAJCXNwZGlmX2FjbGluayA9IGNoZWNrX2RlZmF1bHRfc3BkaWZfYWNsaW5rKHBjaSk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaW50ZWw4eDBtLmMgYi9zb3VuZC9wY2kvaW50ZWw4eDBtLmMKaW5kZXggOTM0NDllNC4uNmVjMGZjNSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2ludGVsOHgwbS5jCisrKyBiL3NvdW5kL3BjaS9pbnRlbDh4MG0uYwpAQCAtNDExLDcgKzQxMSwxMCBAQAogCQkJYmRiYXJbaWR4ICsgMF0gPSBjcHVfdG9fbGUzMihpY2hkZXYtPnBoeXNidWYgKyAoKChpZHggPj4gMSkgKiBpY2hkZXYtPmZyYWdzaXplKSAlIGljaGRldi0+c2l6ZSkpOwogCQkJYmRiYXJbaWR4ICsgMV0gPSBjcHVfdG9fbGUzMigweDgwMDAwMDAwIHwgLyogaW50ZXJydXB0IG9uIGNvbXBsZXRpb24gKi8KIAkJCQkJCSAgICAgaWNoZGV2LT5mcmFnc2l6ZSA+PiBjaGlwLT5wY21fcG9zX3NoaWZ0KTsKLQkJCS8vIHByaW50aygiYmRiYXJbJWldID0gMHgleCBbMHgleF1cbiIsIGlkeCArIDAsIGJkYmFyW2lkeCArIDBdLCBiZGJhcltpZHggKyAxXSk7CisJCQkvKgorCQkJcHJpbnRrKEtFUk5fREVCVUcgImJkYmFyWyVpXSA9IDB4JXggWzB4JXhdXG4iLAorCQkJICAgICAgIGlkeCArIDAsIGJkYmFyW2lkeCArIDBdLCBiZGJhcltpZHggKyAxXSk7CisJCQkqLwogCQl9CiAJCWljaGRldi0+ZnJhZ3MgPSBpY2hkZXYtPnNpemUgLyBpY2hkZXYtPmZyYWdzaXplOwogCX0KQEAgLTQyMSw4ICs0MjQsMTAgQEAKIAlpY2hkZXYtPmx2aV9mcmFnID0gSUNIX1JFR19MVklfTUFTSyAlIGljaGRldi0+ZnJhZ3M7CiAJaWNoZGV2LT5wb3NpdGlvbiA9IDA7CiAjaWYgMAotCXByaW50aygibHZpX2ZyYWcgPSAlaSwgZnJhZ3MgPSAlaSwgcGVyaW9kX3NpemUgPSAweCV4LCBwZXJpb2Rfc2l6ZTEgPSAweCV4XG4iLAotCQkJaWNoZGV2LT5sdmlfZnJhZywgaWNoZGV2LT5mcmFncywgaWNoZGV2LT5mcmFnc2l6ZSwgaWNoZGV2LT5mcmFnc2l6ZTEpOworCXByaW50ayhLRVJOX0RFQlVHICJsdmlfZnJhZyA9ICVpLCBmcmFncyA9ICVpLCBwZXJpb2Rfc2l6ZSA9IDB4JXgsICIKKwkgICAgICAgInBlcmlvZF9zaXplMSA9IDB4JXhcbiIsCisJICAgICAgIGljaGRldi0+bHZpX2ZyYWcsIGljaGRldi0+ZnJhZ3MsIGljaGRldi0+ZnJhZ3NpemUsCisJICAgICAgIGljaGRldi0+ZnJhZ3NpemUxKTsKICNlbmRpZgogCS8qIGNsZWFyIGludGVycnVwdHMgKi8KIAlpcHV0Ynl0ZShjaGlwLCBwb3J0ICsgaWNoZGV2LT5yb2ZmX3NyLCBJQ0hfRklGT0UgfCBJQ0hfQkNJUyB8IElDSF9MVkJDSSk7CkBAIC00NjUsNyArNDcwLDggQEAKIAkJCQkJCQkgICAgIGljaGRldi0+bHZpX2ZyYWcgKgogCQkJCQkJCSAgICAgaWNoZGV2LT5mcmFnc2l6ZTEpOwogI2lmIDAKLQkJcHJpbnRrKCJuZXc6IGJkYmFyWyVpXSA9IDB4JXggWzB4JXhdLCBwcmVmZXRjaCA9ICVpLCBhbGwgPSAweCV4LCAweCV4XG4iLAorCQlwcmludGsoS0VSTl9ERUJVRyAibmV3OiBiZGJhclslaV0gPSAweCV4IFsweCV4XSwgIgorCQkgICAgICAgInByZWZldGNoID0gJWksIGFsbCA9IDB4JXgsIDB4JXhcbiIsCiAJCSAgICAgICBpY2hkZXYtPmx2aSAqIDIsIGljaGRldi0+YmRiYXJbaWNoZGV2LT5sdmkgKiAyXSwKIAkJICAgICAgIGljaGRldi0+YmRiYXJbaWNoZGV2LT5sdmkgKiAyICsgMV0sIGluYihJQ0hfUkVHX09GRl9QSVYgKyBwb3J0KSwKIAkJICAgICAgIGlubChwb3J0ICsgNCksIGluYihwb3J0ICsgSUNIX1JFR19PRkZfQ1IpKTsKQEAgLTEyNjksOSArMTI3NSw5IEBACiAJaW50IGVycjsKIAlzdHJ1Y3Qgc2hvcnRuYW1lX3RhYmxlICpuYW1lOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleCwgaWQsIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJc3RyY3B5KGNhcmQtPmRyaXZlciwgIklDSC1NT0RFTSIpOwogCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsICJJbnRlbCBJQ0giKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9rb3JnMTIxMi9rb3JnMTIxMi5jIGIvc291bmQvcGNpL2tvcmcxMjEyL2tvcmcxMjEyLmMKaW5kZXggNWY4MDA2Yi4uOGI3OTk2OSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2tvcmcxMjEyL2tvcmcxMjEyLmMKKysrIGIvc291bmQvcGNpL2tvcmcxMjEyL2tvcmcxMjEyLmMKQEAgLTI0NDMsOSArMjQ0Myw5IEBACiAJCWRldisrOwogCQlyZXR1cm4gLUVOT0VOVDsKIAl9Ci0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0gICAgICAgIGlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAgICAgICAgIGlmICgoZXJyID0gc25kX2tvcmcxMjEyX2NyZWF0ZShjYXJkLCBwY2ksICZrb3JnMTIxMikpIDwgMCkgewogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL21hZXN0cm8zLmMgYi9zb3VuZC9wY2kvbWFlc3RybzMuYwppbmRleCA1OWJiYWY4Li43MDE0MTU0IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvbWFlc3RybzMuYworKysgYi9zb3VuZC9wY2kvbWFlc3RybzMuYwpAQCAtMjY5MSw5ICsyNjkxLDkgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAlzd2l0Y2ggKHBjaS0+ZGV2aWNlKSB7CiAJY2FzZSBQQ0lfREVWSUNFX0lEX0VTU19BTExFR1JPOgpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL21peGFydC9taXhhcnQuYyBiL3NvdW5kL3BjaS9taXhhcnQvbWl4YXJ0LmMKaW5kZXggYmIxNjI1MC4uYzFlYjg0YSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL21peGFydC9taXhhcnQuYworKysgYi9zb3VuZC9wY2kvbWl4YXJ0L21peGFydC5jCkBAIC0xMzY2LDEyICsxMzY2LDEyIEBACiAJCWVsc2UKIAkJCWlkeCA9IGluZGV4W2Rldl0gKyBpOwogCQlzbnByaW50Zih0bXBpZCwgc2l6ZW9mKHRtcGlkKSwgIiVzLSVkIiwgaWRbZGV2XSA/IGlkW2Rldl0gOiAiTUlYQVJUIiwgaSk7Ci0JCWNhcmQgPSBzbmRfY2FyZF9uZXcoaWR4LCB0bXBpZCwgVEhJU19NT0RVTEUsIDApOworCQllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaWR4LCB0bXBpZCwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKIAotCQlpZiAoISBjYXJkKSB7CisJCWlmIChlcnIgPCAwKSB7CiAJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJjYW5ub3QgYWxsb2NhdGUgdGhlIGNhcmQgJWRcbiIsIGkpOwogCQkJc25kX21peGFydF9mcmVlKG1ncik7Ci0JCQlyZXR1cm4gLUVOT01FTTsKKwkJCXJldHVybiBlcnI7CiAJCX0KIAogCQlzdHJjcHkoY2FyZC0+ZHJpdmVyLCBDQVJEX05BTUUpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL21peGFydC9taXhhcnRfaHdkZXAuYyBiL3NvdW5kL3BjaS9taXhhcnQvbWl4YXJ0X2h3ZGVwLmMKaW5kZXggMzc4MmI1Mi4uNGNmNGNkOCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL21peGFydC9taXhhcnRfaHdkZXAuYworKysgYi9zb3VuZC9wY2kvbWl4YXJ0L21peGFydF9od2RlcC5jCkBAIC0zNDUsOCArMzQ1LDggQEAKIAlzdGF0dXNfZGF1Z2h0ID0gcmVhZGxfYmUoIE1JWEFSVF9NRU0oIG1ncixNSVhBUlRfUFNFVURPUkVHX0RYTFhfU1RBVFVTX09GRlNFVCApKTsKIAogCS8qIG1vdGhlcmJvYXJkIHhpbGlueCBzdGF0dXMgNSB3aWxsIHNheSB0aGF0IHRoZSBib2FyZCBpcyBwZXJmb3JtaW5nIGEgcmVzZXQgKi8KLQlpZiggc3RhdHVzX3hpbGlueCA9PSA1ICkgewotCQlzbmRfcHJpbnRrKCBLRVJOX0VSUiAibWlYYXJ0IGlzIHJlc2V0dGluZyAhXG4iKTsKKwlpZiAoc3RhdHVzX3hpbGlueCA9PSA1KSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgIm1pWGFydCBpcyByZXNldHRpbmcgIVxuIik7CiAJCXJldHVybiAtRUFHQUlOOyAvKiB0cnkgYWdhaW4gbGF0ZXIgKi8KIAl9CiAKQEAgLTM1NCwxMyArMzU0LDE0IEBACiAJY2FzZSBNSVhBUlRfTU9USEVSQk9BUkRfWExYX0lOREVYOgogCiAJCS8qIHhpbGlueCBhbHJlYWR5IGxvYWRlZCA/ICovIAotCQlpZiggc3RhdHVzX3hpbGlueCA9PSA0ICkgewotCQkJc25kX3ByaW50ayggS0VSTl9ERUJVRyAieGlsaW54IGlzIGFscmVhZHkgbG9hZGVkICFcbiIpOworCQlpZiAoc3RhdHVzX3hpbGlueCA9PSA0KSB7CisJCQlzbmRfcHJpbnRrKEtFUk5fREVCVUcgInhpbGlueCBpcyBhbHJlYWR5IGxvYWRlZCAhXG4iKTsKIAkJCXJldHVybiAwOwogCQl9CiAJCS8qIHRoZSBzdGF0dXMgc2hvdWxkIGJlIDAgPT0gImlkbGUiICovCi0JCWlmKCBzdGF0dXNfeGlsaW54ICE9IDAgKSB7Ci0JCQlzbmRfcHJpbnRrKCBLRVJOX0VSUiAieGlsaW54IGxvYWQgZXJyb3IgISBzdGF0dXMgPSAlZFxuIiwgc3RhdHVzX3hpbGlueCk7CisJCWlmIChzdGF0dXNfeGlsaW54ICE9IDApIHsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgInhpbGlueCBsb2FkIGVycm9yICEgc3RhdHVzID0gJWRcbiIsCisJCQkJICAgc3RhdHVzX3hpbGlueCk7CiAJCQlyZXR1cm4gLUVJTzsgLyogbW9kcHJvYiAtciBtYXkgaGVscCA/ICovCiAJCX0KIApAQCAtMzg5LDIxICszOTAsMjMgQEAKIAogCWNhc2UgTUlYQVJUX01PVEhFUkJPQVJEX0VMRl9JTkRFWDoKIAotCQlpZiggc3RhdHVzX2VsZiA9PSA0ICkgewotCQkJc25kX3ByaW50ayggS0VSTl9ERUJVRyAiZWxmIGZpbGUgYWxyZWFkeSBsb2FkZWQgIVxuIik7CisJCWlmIChzdGF0dXNfZWxmID09IDQpIHsKKwkJCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiZWxmIGZpbGUgYWxyZWFkeSBsb2FkZWQgIVxuIik7CiAJCQlyZXR1cm4gMDsKIAkJfQogCiAJCS8qIHRoZSBzdGF0dXMgc2hvdWxkIGJlIDAgPT0gImlkbGUiICovCi0JCWlmKCBzdGF0dXNfZWxmICE9IDAgKSB7Ci0JCQlzbmRfcHJpbnRrKCBLRVJOX0VSUiAiZWxmIGxvYWQgZXJyb3IgISBzdGF0dXMgPSAlZFxuIiwgc3RhdHVzX2VsZik7CisJCWlmIChzdGF0dXNfZWxmICE9IDApIHsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgImVsZiBsb2FkIGVycm9yICEgc3RhdHVzID0gJWRcbiIsCisJCQkJICAgc3RhdHVzX2VsZik7CiAJCQlyZXR1cm4gLUVJTzsgLyogbW9kcHJvYiAtciBtYXkgaGVscCA/ICovCiAJCX0KIAogCQkvKiB3YWl0IGZvciB4aWxpbnggc3RhdHVzID09IDQgKi8KIAkJZXJyID0gbWl4YXJ0X3dhaXRfbmljZV9mb3JfcmVnaXN0ZXJfdmFsdWUoIG1nciwgTUlYQVJUX1BTRVVET1JFR19NWExYX1NUQVRVU19PRkZTRVQsIDEsIDQsIDUwMCk7IC8qIDVzZWMgKi8KIAkJaWYgKGVyciA8IDApIHsKLQkJCXNuZF9wcmludGsoIEtFUk5fRVJSICJ4aWxpbnggd2FzIG5vdCBsb2FkZWQgb3IgY291bGQgbm90IGJlIHN0YXJ0ZWRcbiIpOworCQkJc25kX3ByaW50ayhLRVJOX0VSUiAieGlsaW54IHdhcyBub3QgbG9hZGVkIG9yICIKKwkJCQkgICAiY291bGQgbm90IGJlIHN0YXJ0ZWRcbiIpOwogCQkJcmV0dXJuIGVycjsKIAkJfQogCkBAIC00MjQsNyArNDI3LDcgQEAKIAkJLyogd2FpdCBmb3IgZWxmIHN0YXR1cyA9PSA0ICovCiAJCWVyciA9IG1peGFydF93YWl0X25pY2VfZm9yX3JlZ2lzdGVyX3ZhbHVlKCBtZ3IsIE1JWEFSVF9QU0VVRE9SRUdfRUxGX1NUQVRVU19PRkZTRVQsIDEsIDQsIDMwMCk7IC8qIDNzZWMgKi8KIAkJaWYgKGVyciA8IDApIHsKLQkJCXNuZF9wcmludGsoIEtFUk5fRVJSICJlbGYgY291bGQgbm90IGJlIHN0YXJ0ZWRcbiIpOworCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiZWxmIGNvdWxkIG5vdCBiZSBzdGFydGVkXG4iKTsKIAkJCXJldHVybiBlcnI7CiAJCX0KIApAQCAtNDM3LDE1ICs0NDAsMTYgQEAKIAlkZWZhdWx0OgogCiAJCS8qIGVsZiBhbmQgeGlsaW54IHNob3VsZCBiZSBsb2FkZWQgKi8KLQkJaWYoIChzdGF0dXNfZWxmICE9IDQpIHx8IChzdGF0dXNfeGlsaW54ICE9IDQpICkgewotCQkJcHJpbnRrKCBLRVJOX0VSUiAieGlsaW54IG9yIGVsZiBub3Qgc3VjY2Vzc2Z1bGx5IGxvYWRlZFxuIik7CisJCWlmIChzdGF0dXNfZWxmICE9IDQgfHwgc3RhdHVzX3hpbGlueCAhPSA0KSB7CisJCQlwcmludGsoS0VSTl9FUlIgInhpbGlueCBvciBlbGYgbm90ICIKKwkJCSAgICAgICAic3VjY2Vzc2Z1bGx5IGxvYWRlZFxuIik7CiAJCQlyZXR1cm4gLUVJTzsgLyogbW9kcHJvYiAtciBtYXkgaGVscCA/ICovCiAJCX0KIAogCQkvKiB3YWl0IGZvciBkYXVnaHRlciBkZXRlY3Rpb24gIT0gMCAqLwogCQllcnIgPSBtaXhhcnRfd2FpdF9uaWNlX2Zvcl9yZWdpc3Rlcl92YWx1ZSggbWdyLCBNSVhBUlRfUFNFVURPUkVHX0RCUkRfUFJFU0VOQ0VfT0ZGU0VULCAwLCAwLCAzMCk7IC8qIDMwMG1zZWMgKi8KIAkJaWYgKGVyciA8IDApIHsKLQkJCXNuZF9wcmludGsoIEtFUk5fRVJSICJlcnJvciBzdGFydGluZyBlbGYgZmlsZVxuIik7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJlcnJvciBzdGFydGluZyBlbGYgZmlsZVxuIik7CiAJCQlyZXR1cm4gZXJyOwogCQl9CiAKQEAgLTQ2MCw4ICs0NjQsOSBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAKIAkJLyogZGF1Z2h0ZXIgc2hvdWxkIGJlIGlkbGUgKi8KLQkJaWYoIHN0YXR1c19kYXVnaHQgIT0gMCApIHsKLQkJCXByaW50ayggS0VSTl9FUlIgImRhdWdodGVyIGxvYWQgZXJyb3IgISBzdGF0dXMgPSAlZFxuIiwgc3RhdHVzX2RhdWdodCk7CisJCWlmIChzdGF0dXNfZGF1Z2h0ICE9IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiZGF1Z2h0ZXIgbG9hZCBlcnJvciAhIHN0YXR1cyA9ICVkXG4iLAorCQkJICAgICAgIHN0YXR1c19kYXVnaHQpOwogCQkJcmV0dXJuIC1FSU87IC8qIG1vZHByb2IgLXIgbWF5IGhlbHAgPyAqLwogCQl9CiAgCkBAIC00ODAsNyArNDg1LDcgQEAKIAkJLyogd2FpdCBmb3Igc3RhdHVzID09IDIgKi8KIAkJZXJyID0gbWl4YXJ0X3dhaXRfbmljZV9mb3JfcmVnaXN0ZXJfdmFsdWUoIG1nciwgTUlYQVJUX1BTRVVET1JFR19EWExYX1NUQVRVU19PRkZTRVQsIDEsIDIsIDMwKTsgLyogMzAwbXNlYyAqLwogCQlpZiAoZXJyIDwgMCkgewotCQkJc25kX3ByaW50ayggS0VSTl9FUlIgImRhdWdodGVyIGJvYXJkIGxvYWQgZXJyb3JcbiIpOworCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiZGF1Z2h0ZXIgYm9hcmQgbG9hZCBlcnJvclxuIik7CiAJCQlyZXR1cm4gZXJyOwogCQl9CiAKQEAgLTUwMiw3ICs1MDcsOCBAQAogICAgICAgICAvKiB3YWl0IGZvciBkYXVnaHRlciBzdGF0dXMgPT0gMyAqLwogICAgICAgICBlcnIgPSBtaXhhcnRfd2FpdF9uaWNlX2Zvcl9yZWdpc3Rlcl92YWx1ZSggbWdyLCBNSVhBUlRfUFNFVURPUkVHX0RYTFhfU1RBVFVTX09GRlNFVCwgMSwgMywgMzAwKTsgLyogM3NlYyAqLwogICAgICAgICBpZiAoZXJyIDwgMCkgewotCQlzbmRfcHJpbnRrKCBLRVJOX0VSUiAiZGF1Z2h0ZXIgYm9hcmQgY291bGQgbm90IGJlIGluaXRpYWxpc2VkXG4iKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUgorCQkJICAgImRhdWdodGVyIGJvYXJkIGNvdWxkIG5vdCBiZSBpbml0aWFsaXNlZFxuIik7CiAJCXJldHVybiBlcnI7CiAJfQogCkBAIC01MTIsNyArNTE4LDcgQEAKIAkvKiBmaXJzdCBjb21tdW5pY2F0aW9uIHdpdGggZW1iZWRkZWQgKi8KIAllcnIgPSBtaXhhcnRfZmlyc3RfaW5pdChtZ3IpOwogICAgICAgICBpZiAoZXJyIDwgMCkgewotCQlzbmRfcHJpbnRrKCBLRVJOX0VSUiAibWlYYXJ0IGNvdWxkIG5vdCBiZSBzZXQgdXBcbiIpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJtaVhhcnQgY291bGQgbm90IGJlIHNldCB1cFxuIik7CiAJCXJldHVybiBlcnI7CiAJfQogCkBAIC01ODEsMTYgKzU4Nyw2IEBACiAvKiBtaVhhcnQgaHdkZXAgaW50ZXJmYWNlIGlkIHN0cmluZyAqLwogI2RlZmluZSBTTkRfTUlYQVJUX0hXREVQX0lEICAgICAgICJtaVhhcnQgTG9hZGVyIgogCi1zdGF0aWMgaW50IG1peGFydF9od2RlcF9vcGVuKHN0cnVjdCBzbmRfaHdkZXAgKmh3LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBtaXhhcnRfaHdkZXBfcmVsZWFzZShzdHJ1Y3Qgc25kX2h3ZGVwICpodywgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgbWl4YXJ0X2h3ZGVwX2RzcF9zdGF0dXMoc3RydWN0IHNuZF9od2RlcCAqaHcsCiAJCQkJICAgc3RydWN0IHNuZF9od2RlcF9kc3Bfc3RhdHVzICppbmZvKQogewpAQCAtNjQzLDggKzYzOSw2IEBACiAKIAlody0+aWZhY2UgPSBTTkRSVl9IV0RFUF9JRkFDRV9NSVhBUlQ7CiAJaHctPnByaXZhdGVfZGF0YSA9IG1ncjsKLQlody0+b3BzLm9wZW4gPSBtaXhhcnRfaHdkZXBfb3BlbjsKLQlody0+b3BzLnJlbGVhc2UgPSBtaXhhcnRfaHdkZXBfcmVsZWFzZTsKIAlody0+b3BzLmRzcF9zdGF0dXMgPSBtaXhhcnRfaHdkZXBfZHNwX3N0YXR1czsKIAlody0+b3BzLmRzcF9sb2FkID0gbWl4YXJ0X2h3ZGVwX2RzcF9sb2FkOwogCWh3LT5leGNsdXNpdmUgPSAxOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL25tMjU2L25tMjU2LmMgYi9zb3VuZC9wY2kvbm0yNTYvbm0yNTYuYwppbmRleCA1MGM5ZjhhLi41MjJhMDQwIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvbm0yNTYvbm0yNTYuYworKysgYi9zb3VuZC9wY2kvbm0yNTYvbm0yNTYuYwpAQCAtMTY2OCw5ICsxNjY4LDkgQEAKIAkJfQogCX0KIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCXN3aXRjaCAocGNpLT5kZXZpY2UpIHsKIAljYXNlIFBDSV9ERVZJQ0VfSURfTkVPTUFHSUNfTk0yNTZBVl9BVURJTzoKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9veHlnZW4vaGlmaWVyLmMgYi9zb3VuZC9wY2kvb3h5Z2VuL2hpZmllci5jCmluZGV4IDFhYjgzM2YuLjg0ZWYxMzEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9veHlnZW4vaGlmaWVyLmMKKysrIGIvc291bmQvcGNpL294eWdlbi9oaWZpZXIuYwpAQCAtNDUsNiArNDUsNyBAQAogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGhpZmllcl9pZHNbXSBfX2RldmluaXRkYXRhID0gewogCXsgT1hZR0VOX1BDSV9TVUJJRCgweDE0YzMsIDB4MTcxMCkgfSwKIAl7IE9YWUdFTl9QQ0lfU1VCSUQoMHgxNGMzLCAweDE3MTEpIH0sCisJeyBPWFlHRU5fUENJX1NVQklEX0JST0tFTl9FRVBST00gfSwKIAl7IH0KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgaGlmaWVyX2lkcyk7CkBAIC0xNTEsNyArMTUyLDYgQEAKIAkuc2hvcnRuYW1lID0gIkMtTWVkaWEgQ01JODc4NyIsCiAJLmxvbmduYW1lID0gIkMtTWVkaWEgT3h5Z2VuIEhEIEF1ZGlvIiwKIAkuY2hpcCA9ICJDTUk4Nzg4IiwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKIAkuaW5pdCA9IGhpZmllcl9pbml0LAogCS5jb250cm9sX2ZpbHRlciA9IGhpZmllcl9jb250cm9sX2ZpbHRlciwKIAkuY2xlYW51cCA9IGhpZmllcl9jbGVhbnVwLApAQCAtMTczLDYgKzE3MywxMyBAQAogCS5hZGNfaTJzX2Zvcm1hdCA9IE9YWUdFTl9JMlNfRk9STUFUX0xKVVNULAogfTsKIAorc3RhdGljIGludCBfX2RldmluaXQgZ2V0X2hpZmllcl9tb2RlbChzdHJ1Y3Qgb3h5Z2VuICpjaGlwLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKK3sKKwljaGlwLT5tb2RlbCA9IG1vZGVsX2hpZmllcjsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBfX2RldmluaXQgaGlmaWVyX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksCiAJCQkJICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGNpX2lkKQogewpAQCAtMTg1LDcgKzE5Miw4IEBACiAJCSsrZGV2OwogCQlyZXR1cm4gLUVOT0VOVDsKIAl9Ci0JZXJyID0gb3h5Z2VuX3BjaV9wcm9iZShwY2ksIGluZGV4W2Rldl0sIGlkW2Rldl0sICZtb2RlbF9oaWZpZXIsIDApOworCWVyciA9IG94eWdlbl9wY2lfcHJvYmUocGNpLCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKKwkJCSAgICAgICBoaWZpZXJfaWRzLCBnZXRfaGlmaWVyX21vZGVsKTsKIAlpZiAoZXJyID49IDApCiAJCSsrZGV2OwogCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvb3h5Z2VuL294eWdlbi5jIGIvc291bmQvcGNpL294eWdlbi9veHlnZW4uYwppbmRleCBkZTk5OWM2Li43MmRiNGMzIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvb3h5Z2VuL294eWdlbi5jCisrKyBiL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQy1NZWRpYSBDTUk4Nzg4IGRyaXZlciBmb3IgQy1NZWRpYSdzIHJlZmVyZW5jZSBkZXNpZ24gYW5kIGZvciB0aGUgWC1NZXJpZGlhbgorICogQy1NZWRpYSBDTUk4Nzg4IGRyaXZlciBmb3IgQy1NZWRpYSdzIHJlZmVyZW5jZSBkZXNpZ24gYW5kIHNpbWlsYXIgbW9kZWxzCiAgKgogICogQ29weXJpZ2h0IChjKSBDbGVtZW5zIExhZGlzY2ggPGNsZW1lbnNAbGFkaXNjaC5kZT4KICAqCkBAIC0yNiw2ICsyNiw3IEBACiAgKgogICogR1BJTyAwIC0+IERGUzAgb2YgQUs1Mzg1CiAgKiBHUElPIDEgLT4gREZTMSBvZiBBSzUzODUKKyAqIEdQSU8gOCAtPiBlbmFibGUgaGVhZHBob25lIGFtcGxpZmllciBvbiBIVC1PbWVnYSBtb2RlbHMKICAqLwogCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KQEAgLTYxLDcgKzYyLDggQEAKIGVudW0gewogCU1PREVMX0NNRURJQV9SRUYsCS8qIEMtTWVkaWEncyByZWZlcmVuY2UgZGVzaWduICovCiAJTU9ERUxfTUVSSURJQU4sCQkvKiBBdXplblRlY2ggWC1NZXJpZGlhbiAqLwotCU1PREVMX0hBTE8sCQkvKiBIVC1PbWVnYSBDbGFybyBoYWxvICovCisJTU9ERUxfQ0xBUk8sCQkvKiBIVC1PbWVnYSBDbGFybyAqLworCU1PREVMX0NMQVJPX0hBTE8sCS8qIEhULU9tZWdhIENsYXJvIGhhbG8gKi8KIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBveHlnZW5faWRzW10gX19kZXZpbml0ZGF0YSA9IHsKQEAgLTc0LDggKzc2LDggQEAKIAl7IE9YWUdFTl9QQ0lfU1VCSUQoMHgxNDdhLCAweGEwMTcpLCAuZHJpdmVyX2RhdGEgPSBNT0RFTF9DTUVESUFfUkVGIH0sCiAJeyBPWFlHRU5fUENJX1NVQklEKDB4MWE1OCwgMHgwOTEwKSwgLmRyaXZlcl9kYXRhID0gTU9ERUxfQ01FRElBX1JFRiB9LAogCXsgT1hZR0VOX1BDSV9TVUJJRCgweDQxNWEsIDB4NTQzMSksIC5kcml2ZXJfZGF0YSA9IE1PREVMX01FUklESUFOIH0sCi0JeyBPWFlHRU5fUENJX1NVQklEKDB4NzI4NCwgMHg5NzYxKSwgLmRyaXZlcl9kYXRhID0gTU9ERUxfQ01FRElBX1JFRiB9LAotCXsgT1hZR0VOX1BDSV9TVUJJRCgweDcyODQsIDB4OTc4MSksIC5kcml2ZXJfZGF0YSA9IE1PREVMX0hBTE8gfSwKKwl7IE9YWUdFTl9QQ0lfU1VCSUQoMHg3Mjg0LCAweDk3NjEpLCAuZHJpdmVyX2RhdGEgPSBNT0RFTF9DTEFSTyB9LAorCXsgT1hZR0VOX1BDSV9TVUJJRCgweDcyODQsIDB4OTc4MSksIC5kcml2ZXJfZGF0YSA9IE1PREVMX0NMQVJPX0hBTE8gfSwKIAl7IH0KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgb3h5Z2VuX2lkcyk7CkBAIC04Niw2ICs4OCw4IEBACiAjZGVmaW5lIEdQSU9fQUs1Mzg1X0RGU19ET1VCTEUJMHgwMDAxCiAjZGVmaW5lIEdQSU9fQUs1Mzg1X0RGU19RVUFECTB4MDAwMgogCisjZGVmaW5lIEdQSU9fQ0xBUk9fSFAJCTB4MDEwMAorCiBzdHJ1Y3QgZ2VuZXJpY19kYXRhIHsKIAl1OCBhazQzOTZfY3RsMjsKIAl1MTYgc2F2ZWRfd204Nzg1X3JlZ2lzdGVyc1syXTsKQEAgLTE5NiwxMCArMjAwLDQ2IEBACiAJYWs1Mzg1X2luaXQoY2hpcCk7CiB9CiAKK3N0YXRpYyB2b2lkIGNsYXJvX2VuYWJsZV9ocChzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQoreworCW1zbGVlcCgzMDApOworCW94eWdlbl9zZXRfYml0czE2KGNoaXAsIE9YWUdFTl9HUElPX0NPTlRST0wsIEdQSU9fQ0xBUk9fSFApOworCW94eWdlbl9zZXRfYml0czE2KGNoaXAsIE9YWUdFTl9HUElPX0RBVEEsIEdQSU9fQ0xBUk9fSFApOworfQorCitzdGF0aWMgdm9pZCBjbGFyb19pbml0KHN0cnVjdCBveHlnZW4gKmNoaXApCit7CisJYWs0Mzk2X2luaXQoY2hpcCk7CisJd204Nzg1X2luaXQoY2hpcCk7CisJY2xhcm9fZW5hYmxlX2hwKGNoaXApOworfQorCitzdGF0aWMgdm9pZCBjbGFyb19oYWxvX2luaXQoc3RydWN0IG94eWdlbiAqY2hpcCkKK3sKKwlhazQzOTZfaW5pdChjaGlwKTsKKwlhazUzODVfaW5pdChjaGlwKTsKKwljbGFyb19lbmFibGVfaHAoY2hpcCk7Cit9CisKIHN0YXRpYyB2b2lkIGdlbmVyaWNfY2xlYW51cChzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQogewogfQogCitzdGF0aWMgdm9pZCBjbGFyb19kaXNhYmxlX2hwKHN0cnVjdCBveHlnZW4gKmNoaXApCit7CisJb3h5Z2VuX2NsZWFyX2JpdHMxNihjaGlwLCBPWFlHRU5fR1BJT19EQVRBLCBHUElPX0NMQVJPX0hQKTsKK30KKworc3RhdGljIHZvaWQgY2xhcm9fY2xlYW51cChzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQoreworCWNsYXJvX2Rpc2FibGVfaHAoY2hpcCk7Cit9CisKK3N0YXRpYyB2b2lkIGNsYXJvX3N1c3BlbmQoc3RydWN0IG94eWdlbiAqY2hpcCkKK3sKKwljbGFyb19kaXNhYmxlX2hwKGNoaXApOworfQorCiBzdGF0aWMgdm9pZCBnZW5lcmljX3Jlc3VtZShzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQogewogCWFrNDM5Nl9yZWdpc3RlcnNfaW5pdChjaGlwKTsKQEAgLTIxMSw2ICsyNTEsMTIgQEAKIAlhazQzOTZfcmVnaXN0ZXJzX2luaXQoY2hpcCk7CiB9CiAKK3N0YXRpYyB2b2lkIGNsYXJvX3Jlc3VtZShzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQoreworCWFrNDM5Nl9yZWdpc3RlcnNfaW5pdChjaGlwKTsKKwljbGFyb19lbmFibGVfaHAoY2hpcCk7Cit9CisKIHN0YXRpYyB2b2lkIHNldF9hazQzOTZfcGFyYW1zKHN0cnVjdCBveHlnZW4gKmNoaXAsCiAJCQkgICAgICBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcykKIHsKQEAgLTI5MywzMCArMzM5LDEwIEBACiAKIHN0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9MSU5FQVIoYWs0Mzk2X2RiX3NjYWxlLCBUTFZfREJfR0FJTl9NVVRFLCAwKTsKIAotc3RhdGljIGludCBnZW5lcmljX3Byb2JlKHN0cnVjdCBveHlnZW4gKmNoaXAsIHVuc2lnbmVkIGxvbmcgZHJpdmVyX2RhdGEpCi17Ci0JaWYgKGRyaXZlcl9kYXRhID09IE1PREVMX01FUklESUFOKSB7Ci0JCWNoaXAtPm1vZGVsLmluaXQgPSBtZXJpZGlhbl9pbml0OwotCQljaGlwLT5tb2RlbC5yZXN1bWUgPSBtZXJpZGlhbl9yZXN1bWU7Ci0JCWNoaXAtPm1vZGVsLnNldF9hZGNfcGFyYW1zID0gc2V0X2FrNTM4NV9wYXJhbXM7Ci0JCWNoaXAtPm1vZGVsLmRldmljZV9jb25maWcgPSBQTEFZQkFDS18wX1RPX0kyUyB8Ci0JCQkJCSAgICBQTEFZQkFDS18xX1RPX1NQRElGIHwKLQkJCQkJICAgIENBUFRVUkVfMF9GUk9NX0kyU18yIHwKLQkJCQkJICAgIENBUFRVUkVfMV9GUk9NX1NQRElGOwotCX0KLQlpZiAoZHJpdmVyX2RhdGEgPT0gTU9ERUxfTUVSSURJQU4gfHwgZHJpdmVyX2RhdGEgPT0gTU9ERUxfSEFMTykgewotCQljaGlwLT5tb2RlbC5taXNjX2ZsYWdzID0gT1hZR0VOX01JU0NfTUlESTsKLQkJY2hpcC0+bW9kZWwuZGV2aWNlX2NvbmZpZyB8PSBNSURJX09VVFBVVCB8IE1JRElfSU5QVVQ7Ci0JfQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IG94eWdlbl9tb2RlbCBtb2RlbF9nZW5lcmljID0gewogCS5zaG9ydG5hbWUgPSAiQy1NZWRpYSBDTUk4Nzg4IiwKIAkubG9uZ25hbWUgPSAiQy1NZWRpYSBPeHlnZW4gSEQgQXVkaW8iLAogCS5jaGlwID0gIkNNSTg3ODgiLAotCS5vd25lciA9IFRISVNfTU9EVUxFLAotCS5wcm9iZSA9IGdlbmVyaWNfcHJvYmUsCiAJLmluaXQgPSBnZW5lcmljX2luaXQsCiAJLmNsZWFudXAgPSBnZW5lcmljX2NsZWFudXAsCiAJLnJlc3VtZSA9IGdlbmVyaWNfcmVzdW1lLApAQCAtMzQxLDYgKzM2Nyw0MiBAQAogCS5hZGNfaTJzX2Zvcm1hdCA9IE9YWUdFTl9JMlNfRk9STUFUX0xKVVNULAogfTsKIAorc3RhdGljIGludCBfX2RldmluaXQgZ2V0X294eWdlbl9tb2RlbChzdHJ1Y3Qgb3h5Z2VuICpjaGlwLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKK3sKKwljaGlwLT5tb2RlbCA9IG1vZGVsX2dlbmVyaWM7CisJc3dpdGNoIChpZC0+ZHJpdmVyX2RhdGEpIHsKKwljYXNlIE1PREVMX01FUklESUFOOgorCQljaGlwLT5tb2RlbC5pbml0ID0gbWVyaWRpYW5faW5pdDsKKwkJY2hpcC0+bW9kZWwucmVzdW1lID0gbWVyaWRpYW5fcmVzdW1lOworCQljaGlwLT5tb2RlbC5zZXRfYWRjX3BhcmFtcyA9IHNldF9hazUzODVfcGFyYW1zOworCQljaGlwLT5tb2RlbC5kZXZpY2VfY29uZmlnID0gUExBWUJBQ0tfMF9UT19JMlMgfAorCQkJCQkgICAgUExBWUJBQ0tfMV9UT19TUERJRiB8CisJCQkJCSAgICBDQVBUVVJFXzBfRlJPTV9JMlNfMiB8CisJCQkJCSAgICBDQVBUVVJFXzFfRlJPTV9TUERJRjsKKwkJYnJlYWs7CisJY2FzZSBNT0RFTF9DTEFSTzoKKwkJY2hpcC0+bW9kZWwuaW5pdCA9IGNsYXJvX2luaXQ7CisJCWNoaXAtPm1vZGVsLmNsZWFudXAgPSBjbGFyb19jbGVhbnVwOworCQljaGlwLT5tb2RlbC5zdXNwZW5kID0gY2xhcm9fc3VzcGVuZDsKKwkJY2hpcC0+bW9kZWwucmVzdW1lID0gY2xhcm9fcmVzdW1lOworCQlicmVhazsKKwljYXNlIE1PREVMX0NMQVJPX0hBTE86CisJCWNoaXAtPm1vZGVsLmluaXQgPSBjbGFyb19oYWxvX2luaXQ7CisJCWNoaXAtPm1vZGVsLmNsZWFudXAgPSBjbGFyb19jbGVhbnVwOworCQljaGlwLT5tb2RlbC5zdXNwZW5kID0gY2xhcm9fc3VzcGVuZDsKKwkJY2hpcC0+bW9kZWwucmVzdW1lID0gY2xhcm9fcmVzdW1lOworCQljaGlwLT5tb2RlbC5zZXRfYWRjX3BhcmFtcyA9IHNldF9hazUzODVfcGFyYW1zOworCQlicmVhazsKKwl9CisJaWYgKGlkLT5kcml2ZXJfZGF0YSA9PSBNT0RFTF9NRVJJRElBTiB8fAorCSAgICBpZC0+ZHJpdmVyX2RhdGEgPT0gTU9ERUxfQ0xBUk9fSEFMTykgeworCQljaGlwLT5tb2RlbC5taXNjX2ZsYWdzID0gT1hZR0VOX01JU0NfTUlESTsKKwkJY2hpcC0+bW9kZWwuZGV2aWNlX2NvbmZpZyB8PSBNSURJX09VVFBVVCB8IE1JRElfSU5QVVQ7CisJfQorCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBnZW5lcmljX294eWdlbl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpLAogCQkJCQkgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfaWQpCiB7CkBAIC0zNTMsOCArNDE1LDggQEAKIAkJKytkZXY7CiAJCXJldHVybiAtRU5PRU5UOwogCX0KLQllcnIgPSBveHlnZW5fcGNpX3Byb2JlKHBjaSwgaW5kZXhbZGV2XSwgaWRbZGV2XSwKLQkJCSAgICAgICAmbW9kZWxfZ2VuZXJpYywgcGNpX2lkLT5kcml2ZXJfZGF0YSk7CisJZXJyID0gb3h5Z2VuX3BjaV9wcm9iZShwY2ksIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAorCQkJICAgICAgIG94eWdlbl9pZHMsIGdldF9veHlnZW5fbW9kZWwpOwogCWlmIChlcnIgPj0gMCkKIAkJKytkZXY7CiAJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuLmggYi9zb3VuZC9wY2kvb3h5Z2VuL294eWdlbi5oCmluZGV4IDE5MTA3YzYuLmJkNjE1ZGIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuLmgKKysrIGIvc291bmQvcGNpL294eWdlbi9veHlnZW4uaApAQCAtMTgsNiArMTgsOCBAQAogCiAjZGVmaW5lIE9YWUdFTl9JT19TSVpFCTB4MTAwCiAKKyNkZWZpbmUgT1hZR0VOX0VFUFJPTV9JRAkweDQzNGQJLyogIkNNIiAqLworCiAvKiBtb2RlbC1zcGVjaWZpYyBjb25maWd1cmF0aW9uIG9mIG91dHB1dHMvaW5wdXRzICovCiAjZGVmaW5lIFBMQVlCQUNLXzBfVE9fSTJTCTB4MDAwMQogICAgICAvKiBQTEFZQkFDS18wX1RPX0FDOTdfMAkJbm90IGltcGxlbWVudGVkICovCkBAIC00OSw3ICs1MSwxMyBAQAogCS5zdWJ2ZW5kb3IgPSBzdiwgXAogCS5zdWJkZXZpY2UgPSBzZAogCisjZGVmaW5lIEJST0tFTl9FRVBST01fRFJJVkVSX0RBVEEgKCh1bnNpZ25lZCBsb25nKS0xKQorI2RlZmluZSBPWFlHRU5fUENJX1NVQklEX0JST0tFTl9FRVBST00gXAorCU9YWUdFTl9QQ0lfU1VCSUQoUENJX1ZFTkRPUl9JRF9DTUVESUEsIDB4ODc4OCksIFwKKwkuZHJpdmVyX2RhdGEgPSBCUk9LRU5fRUVQUk9NX0RSSVZFUl9EQVRBCisKIHN0cnVjdCBwY2lfZGV2Oworc3RydWN0IHBjaV9kZXZpY2VfaWQ7CiBzdHJ1Y3Qgc25kX2NhcmQ7CiBzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW07CiBzdHJ1Y3Qgc25kX3BjbV9oYXJkd2FyZTsKQEAgLTYyLDggKzcwLDYgQEAKIAljb25zdCBjaGFyICpzaG9ydG5hbWU7CiAJY29uc3QgY2hhciAqbG9uZ25hbWU7CiAJY29uc3QgY2hhciAqY2hpcDsKLQlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKLQlpbnQgKCpwcm9iZSkoc3RydWN0IG94eWdlbiAqY2hpcCwgdW5zaWduZWQgbG9uZyBkcml2ZXJfZGF0YSk7CiAJdm9pZCAoKmluaXQpKHN0cnVjdCBveHlnZW4gKmNoaXApOwogCWludCAoKmNvbnRyb2xfZmlsdGVyKShzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqdGVtcGxhdGUpOwogCWludCAoKm1peGVyX2luaXQpKHN0cnVjdCBveHlnZW4gKmNoaXApOwpAQCAtODMsNiArODksNyBAQAogCXZvaWQgKCphYzk3X3N3aXRjaCkoc3RydWN0IG94eWdlbiAqY2hpcCwKIAkJCSAgICB1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBpbnQgbXV0ZSk7CiAJY29uc3QgdW5zaWduZWQgaW50ICpkYWNfdGx2OworCXVuc2lnbmVkIGxvbmcgcHJpdmF0ZV9kYXRhOwogCXNpemVfdCBtb2RlbF9kYXRhX3NpemU7CiAJdW5zaWduZWQgaW50IGRldmljZV9jb25maWc7CiAJdTggZGFjX2NoYW5uZWxzOwpAQCAtMTM0LDggKzE0MSwxMiBAQAogLyogb3h5Z2VuX2xpYi5jICovCiAKIGludCBveHlnZW5fcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksIGludCBpbmRleCwgY2hhciAqaWQsCi0JCSAgICAgY29uc3Qgc3RydWN0IG94eWdlbl9tb2RlbCAqbW9kZWwsCi0JCSAgICAgdW5zaWduZWQgbG9uZyBkcml2ZXJfZGF0YSk7CisJCSAgICAgc3RydWN0IG1vZHVsZSAqb3duZXIsCisJCSAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkcywKKwkJICAgICBpbnQgKCpnZXRfbW9kZWwpKHN0cnVjdCBveHlnZW4gKmNoaXAsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkCisJCQkJICAgICApCisJCSAgICApOwogdm9pZCBveHlnZW5fcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGNpKTsKICNpZmRlZiBDT05GSUdfUE0KIGludCBveHlnZW5fcGNpX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBjaSwgcG1fbWVzc2FnZV90IHN0YXRlKTsKQEAgLTE4MCw2ICsxOTEsOSBAQAogdm9pZCBveHlnZW5fcmVzZXRfdWFydChzdHJ1Y3Qgb3h5Z2VuICpjaGlwKTsKIHZvaWQgb3h5Z2VuX3dyaXRlX3VhcnQoc3RydWN0IG94eWdlbiAqY2hpcCwgdTggZGF0YSk7CiAKK3UxNiBveHlnZW5fcmVhZF9lZXByb20oc3RydWN0IG94eWdlbiAqY2hpcCwgdW5zaWduZWQgaW50IGluZGV4KTsKK3ZvaWQgb3h5Z2VuX3dyaXRlX2VlcHJvbShzdHJ1Y3Qgb3h5Z2VuICpjaGlwLCB1bnNpZ25lZCBpbnQgaW5kZXgsIHUxNiB2YWx1ZSk7CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBveHlnZW5fc2V0X2JpdHM4KHN0cnVjdCBveHlnZW4gKmNoaXAsCiAJCQkJICAgIHVuc2lnbmVkIGludCByZWcsIHU4IHZhbHVlKQogewpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL294eWdlbi9veHlnZW5faW8uYyBiL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuX2lvLmMKaW5kZXggMzEyNmM0Yi4uYzFlYjkyMyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL294eWdlbi9veHlnZW5faW8uYworKysgYi9zb3VuZC9wY2kvb3h5Z2VuL294eWdlbl9pby5jCkBAIC0yNTQsMyArMjU0LDM0IEBACiAJX3dyaXRlX3VhcnQoY2hpcCwgMCwgZGF0YSk7CiB9CiBFWFBPUlRfU1lNQk9MKG94eWdlbl93cml0ZV91YXJ0KTsKKwordTE2IG94eWdlbl9yZWFkX2VlcHJvbShzdHJ1Y3Qgb3h5Z2VuICpjaGlwLCB1bnNpZ25lZCBpbnQgaW5kZXgpCit7CisJdW5zaWduZWQgaW50IHRpbWVvdXQ7CisKKwlveHlnZW5fd3JpdGU4KGNoaXAsIE9YWUdFTl9FRVBST01fQ09OVFJPTCwKKwkJICAgICAgaW5kZXggfCBPWFlHRU5fRUVQUk9NX0RJUl9SRUFEKTsKKwlmb3IgKHRpbWVvdXQgPSAwOyB0aW1lb3V0IDwgMTAwOyArK3RpbWVvdXQpIHsKKwkJdWRlbGF5KDEpOworCQlpZiAoIShveHlnZW5fcmVhZDgoY2hpcCwgT1hZR0VOX0VFUFJPTV9TVEFUVVMpCisJCSAgICAgICYgT1hZR0VOX0VFUFJPTV9CVVNZKSkKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gb3h5Z2VuX3JlYWQxNihjaGlwLCBPWFlHRU5fRUVQUk9NX0RBVEEpOworfQorCit2b2lkIG94eWdlbl93cml0ZV9lZXByb20oc3RydWN0IG94eWdlbiAqY2hpcCwgdW5zaWduZWQgaW50IGluZGV4LCB1MTYgdmFsdWUpCit7CisJdW5zaWduZWQgaW50IHRpbWVvdXQ7CisKKwlveHlnZW5fd3JpdGUxNihjaGlwLCBPWFlHRU5fRUVQUk9NX0RBVEEsIHZhbHVlKTsKKwlveHlnZW5fd3JpdGU4KGNoaXAsIE9YWUdFTl9FRVBST01fQ09OVFJPTCwKKwkJICAgICAgaW5kZXggfCBPWFlHRU5fRUVQUk9NX0RJUl9XUklURSk7CisJZm9yICh0aW1lb3V0ID0gMDsgdGltZW91dCA8IDEwOyArK3RpbWVvdXQpIHsKKwkJbXNsZWVwKDEpOworCQlpZiAoIShveHlnZW5fcmVhZDgoY2hpcCwgT1hZR0VOX0VFUFJPTV9TVEFUVVMpCisJCSAgICAgICYgT1hZR0VOX0VFUFJPTV9CVVNZKSkKKwkJCXJldHVybjsKKwl9CisJc25kX3ByaW50ayhLRVJOX0VSUiAiRUVQUk9NIHdyaXRlIHRpbWVvdXRcbiIpOworfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL294eWdlbi9veHlnZW5fbGliLmMgYi9zb3VuZC9wY2kvb3h5Z2VuL294eWdlbl9saWIuYwppbmRleCA4NGY0ODFkLi4zMTIyNTFkIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvb3h5Z2VuL294eWdlbl9saWIuYworKysgYi9zb3VuZC9wY2kvb3h5Z2VuL294eWdlbl9saWIuYwpAQCAtMzQsNiArMzQsNyBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJDLU1lZGlhIENNSTg3ODggaGVscGVyIGxpYnJhcnkiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKIAorI2RlZmluZSBEUklWRVIgIm94eWdlbiIKIAogc3RhdGljIGlubGluZSBpbnQgb3h5Z2VuX3VhcnRfaW5wdXRfcmVhZHkoc3RydWN0IG94eWdlbiAqY2hpcCkKIHsKQEAgLTI0Myw2ICsyNDQsNjIgQEAKICNkZWZpbmUgb3h5Z2VuX3Byb2NfaW5pdChjaGlwKQogI2VuZGlmCiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqCitveHlnZW5fc2VhcmNoX3BjaV9pZChzdHJ1Y3Qgb3h5Z2VuICpjaGlwLCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBpZHNbXSkKK3sKKwl1MTYgc3ViZGV2aWNlOworCisJLyoKKwkgKiBNYWtlIHN1cmUgdGhlIEVFUFJPTSBwaW5zIGFyZSBhdmFpbGFibGUsIGkuZS4sIG5vdCB1c2VkIGZvciBTUEkuCisJICogKFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJlZm9yZSB3ZSBpbml0aWFsaXplIG9yIHVzZSBTUEkuKQorCSAqLworCW94eWdlbl9jbGVhcl9iaXRzOChjaGlwLCBPWFlHRU5fRlVOQ1RJT04sCisJCQkgICBPWFlHRU5fRlVOQ1RJT05fRU5BQkxFX1NQSV80XzUpOworCS8qCisJICogUmVhZCB0aGUgc3Vic3lzdGVtIGRldmljZSBJRCBkaXJlY3RseSBmcm9tIHRoZSBFRVBST00sIGJlY2F1c2UgdGhlCisJICogY2hpcCBkaWRuJ3QgaWYgdGhlIGZpcnN0IEVFUFJPTSB3b3JkIHdhcyBvdmVyd3JpdHRlbi4KKwkgKi8KKwlzdWJkZXZpY2UgPSBveHlnZW5fcmVhZF9lZXByb20oY2hpcCwgMik7CisJLyoKKwkgKiBXZSB1c2Ugb25seSB0aGUgc3Vic3lzdGVtIGRldmljZSBJRCBmb3Igc2VhcmNoaW5nIGJlY2F1c2UgaXQgaXMKKwkgKiB1bmlxdWUgZXZlbiB3aXRob3V0IHRoZSBzdWJzeXN0ZW0gdmVuZG9yIElELCB3aGljaCBtYXkgaGF2ZSBiZWVuCisJICogb3ZlcndyaXR0ZW4gaW4gdGhlIEVFUFJPTS4KKwkgKi8KKwlmb3IgKDsgaWRzLT52ZW5kb3I7ICsraWRzKQorCQlpZiAoaWRzLT5zdWJkZXZpY2UgPT0gc3ViZGV2aWNlICYmCisJCSAgICBpZHMtPmRyaXZlcl9kYXRhICE9IEJST0tFTl9FRVBST01fRFJJVkVSX0RBVEEpCisJCQlyZXR1cm4gaWRzOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBveHlnZW5fcmVzdG9yZV9lZXByb20oc3RydWN0IG94eWdlbiAqY2hpcCwKKwkJCQkgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKK3sKKwlpZiAob3h5Z2VuX3JlYWRfZWVwcm9tKGNoaXAsIDApICE9IE9YWUdFTl9FRVBST01fSUQpIHsKKwkJLyoKKwkJICogVGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBvbmx5IHdoZW4gYSBrbm93biBjYXJkIG1vZGVsIGhhcworCQkgKiBiZWVuIGRldGVjdGVkLCBpLmUuLCB3ZSBrbm93IHRoZXJlIGlzIGEgdmFsaWQgc3Vic3lzdGVtCisJCSAqIHByb2R1Y3QgSUQgYXQgaW5kZXggMiBpbiB0aGUgRUVQUk9NLiAgVGhlcmVmb3JlLCB3ZSBoYXZlCisJCSAqIGJlZW4gYWJsZSB0byBkZWR1Y2UgdGhlIGNvcnJlY3Qgc3Vic3lzdGVtIHZlbmRvciBJRCwgYW5kCisJCSAqIHRoaXMgaXMgZW5vdWdoIGluZm9ybWF0aW9uIHRvIHJlc3RvcmUgdGhlIG9yaWdpbmFsIEVFUFJPTQorCQkgKiBjb250ZW50cy4KKwkJICovCisJCW94eWdlbl93cml0ZV9lZXByb20oY2hpcCwgMSwgaWQtPnN1YnZlbmRvcik7CisJCW94eWdlbl93cml0ZV9lZXByb20oY2hpcCwgMCwgT1hZR0VOX0VFUFJPTV9JRCk7CisKKwkJb3h5Z2VuX3NldF9iaXRzOChjaGlwLCBPWFlHRU5fTUlTQywKKwkJCQkgT1hZR0VOX01JU0NfV1JJVEVfUENJX1NVQklEKTsKKwkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGNoaXAtPnBjaSwgUENJX1NVQlNZU1RFTV9WRU5ET1JfSUQsCisJCQkJICAgICAgaWQtPnN1YnZlbmRvcik7CisJCXBjaV93cml0ZV9jb25maWdfd29yZChjaGlwLT5wY2ksIFBDSV9TVUJTWVNURU1fSUQsCisJCQkJICAgICAgaWQtPnN1YmRldmljZSk7CisJCW94eWdlbl9jbGVhcl9iaXRzOChjaGlwLCBPWFlHRU5fTUlTQywKKwkJCQkgICBPWFlHRU5fTUlTQ19XUklURV9QQ0lfU1VCSUQpOworCisJCXNuZF9wcmludGsoS0VSTl9JTkZPICJFRVBST00gSUQgcmVzdG9yZWRcbiIpOworCX0KK30KKwogc3RhdGljIHZvaWQgb3h5Z2VuX2luaXQoc3RydWN0IG94eWdlbiAqY2hpcCkKIHsKIAl1bnNpZ25lZCBpbnQgaTsKQEAgLTQ0NiwzMCArNTAzLDMzIEBACiAJCWZyZWVfaXJxKGNoaXAtPmlycSwgY2hpcCk7CiAJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKIAljaGlwLT5tb2RlbC5jbGVhbnVwKGNoaXApOworCWtmcmVlKGNoaXAtPm1vZGVsX2RhdGEpOwogCW11dGV4X2Rlc3Ryb3koJmNoaXAtPm11dGV4KTsKIAlwY2lfcmVsZWFzZV9yZWdpb25zKGNoaXAtPnBjaSk7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKGNoaXAtPnBjaSk7CiB9CiAKIGludCBveHlnZW5fcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksIGludCBpbmRleCwgY2hhciAqaWQsCi0JCSAgICAgY29uc3Qgc3RydWN0IG94eWdlbl9tb2RlbCAqbW9kZWwsCi0JCSAgICAgdW5zaWduZWQgbG9uZyBkcml2ZXJfZGF0YSkKKwkJICAgICBzdHJ1Y3QgbW9kdWxlICpvd25lciwKKwkJICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWRzLAorCQkgICAgIGludCAoKmdldF9tb2RlbCkoc3RydWN0IG94eWdlbiAqY2hpcCwKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQKKwkJCQkgICAgICkKKwkJICAgICkKIHsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAJc3RydWN0IG94eWdlbiAqY2hpcDsKKwljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGNpX2lkOwogCWludCBlcnI7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4LCBpZCwgbW9kZWwtPm93bmVyLAotCQkJICAgIHNpemVvZiAqY2hpcCArIG1vZGVsLT5tb2RlbF9kYXRhX3NpemUpOwotCWlmICghY2FyZCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4LCBpZCwgb3duZXIsIHNpemVvZigqY2hpcCksICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCWNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7CiAJY2hpcC0+Y2FyZCA9IGNhcmQ7CiAJY2hpcC0+cGNpID0gcGNpOwogCWNoaXAtPmlycSA9IC0xOwotCWNoaXAtPm1vZGVsID0gKm1vZGVsOwotCWNoaXAtPm1vZGVsX2RhdGEgPSBjaGlwICsgMTsKIAlzcGluX2xvY2tfaW5pdCgmY2hpcC0+cmVnX2xvY2spOwogCW11dGV4X2luaXQoJmNoaXAtPm11dGV4KTsKIAlJTklUX1dPUksoJmNoaXAtPnNwZGlmX2lucHV0X2JpdHNfd29yaywKQEAgLTQ4MSw3ICs1NDEsNyBAQAogCWlmIChlcnIgPCAwKQogCQlnb3RvIGVycl9jYXJkOwogCi0JZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwY2ksIG1vZGVsLT5jaGlwKTsKKwllcnIgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBjaSwgRFJJVkVSKTsKIAlpZiAoZXJyIDwgMCkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJjYW5ub3QgcmVzZXJ2ZSBQQ0kgcmVzb3VyY2VzXG4iKTsKIAkJZ290byBlcnJfcGNpX2VuYWJsZTsKQEAgLTQ5NSwyMCArNTU1LDM0IEBACiAJfQogCWNoaXAtPmFkZHIgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpLCAwKTsKIAorCXBjaV9pZCA9IG94eWdlbl9zZWFyY2hfcGNpX2lkKGNoaXAsIGlkcyk7CisJaWYgKCFwY2lfaWQpIHsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBlcnJfcGNpX3JlZ2lvbnM7CisJfQorCW94eWdlbl9yZXN0b3JlX2VlcHJvbShjaGlwLCBwY2lfaWQpOworCWVyciA9IGdldF9tb2RlbChjaGlwLCBwY2lfaWQpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGVycl9wY2lfcmVnaW9uczsKKworCWlmIChjaGlwLT5tb2RlbC5tb2RlbF9kYXRhX3NpemUpIHsKKwkJY2hpcC0+bW9kZWxfZGF0YSA9IGt6YWxsb2MoY2hpcC0+bW9kZWwubW9kZWxfZGF0YV9zaXplLAorCQkJCQkgICBHRlBfS0VSTkVMKTsKKwkJaWYgKCFjaGlwLT5tb2RlbF9kYXRhKSB7CisJCQllcnIgPSAtRU5PTUVNOworCQkJZ290byBlcnJfcGNpX3JlZ2lvbnM7CisJCX0KKwl9CisKIAlwY2lfc2V0X21hc3RlcihwY2kpOwogCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgJnBjaS0+ZGV2KTsKIAljYXJkLT5wcml2YXRlX2ZyZWUgPSBveHlnZW5fY2FyZF9mcmVlOwogCi0JaWYgKGNoaXAtPm1vZGVsLnByb2JlKSB7Ci0JCWVyciA9IGNoaXAtPm1vZGVsLnByb2JlKGNoaXAsIGRyaXZlcl9kYXRhKTsKLQkJaWYgKGVyciA8IDApCi0JCQlnb3RvIGVycl9jYXJkOwotCX0KIAlveHlnZW5faW5pdChjaGlwKTsKIAljaGlwLT5tb2RlbC5pbml0KGNoaXApOwogCiAJZXJyID0gcmVxdWVzdF9pcnEocGNpLT5pcnEsIG94eWdlbl9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELAotCQkJICBjaGlwLT5tb2RlbC5jaGlwLCBjaGlwKTsKKwkJCSAgRFJJVkVSLCBjaGlwKTsKIAlpZiAoZXJyIDwgMCkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJjYW5ub3QgZ3JhYiBpbnRlcnJ1cHQgJWRcbiIsIHBjaS0+aXJxKTsKIAkJZ290byBlcnJfY2FyZDsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9veHlnZW4vdmlydHVvc28uYyBiL3NvdW5kL3BjaS9veHlnZW4vdmlydHVvc28uYwppbmRleCA2Yzg3MGMxLi5iYzVjZTExIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvb3h5Z2VuL3ZpcnR1b3NvLmMKKysrIGIvc291bmQvcGNpL294eWdlbi92aXJ0dW9zby5jCkBAIC0xMTIsNiArMTEyLDM0IEBACiAgKiBDUzQzNjJBOiBBRDAgPC0gMAogICovCiAKKy8qCisgKiBYb25hciBFc3NlbmNlIFNUWAorICogLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBDTUk4Nzg4OgorICoKKyAqIEnCskMgPC0+IFBDTTE3OTJBCisgKgorICogR1BJIDAgPC0gZXh0ZXJuYWwgcG93ZXIgcHJlc2VudAorICoKKyAqIEdQSU8gMCAtPiBlbmFibGUgb3V0cHV0IHRvIHNwZWFrZXJzCisgKiBHUElPIDEgLT4gcm91dGUgSFAgdG8gZnJvbnQgcGFuZWwgKDApIG9yIHJlYXIgamFjayAoMSkKKyAqIEdQSU8gMiAtPiBNMCBvZiBDUzUzODEKKyAqIEdQSU8gMyAtPiBNMSBvZiBDUzUzODEKKyAqIEdQSU8gNyAtPiByb3V0ZSBvdXRwdXQgdG8gc3BlYWtlciBqYWNrcyAoMCkgb3IgSFAgKDEpCisgKiBHUElPIDggLT4gcm91dGUgaW5wdXQgamFjayB0byBsaW5lLWluICgwKSBvciBtaWMtaW4gKDEpCisgKgorICogUENNMTc5MkE6CisgKgorICogQUQwIDwtIDAKKyAqCisgKiBINiBkYXVnaHRlcmJvYXJkCisgKiAtLS0tLS0tLS0tLS0tLS0tCisgKgorICogR1BJTyA0IDwtIDAKKyAqIEdQSU8gNSA8LSAwCisgKi8KKwogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KQEAgLTE1Miw2ICsxODAsNyBAQAogCU1PREVMX0RYLAogCU1PREVMX0hEQVYsCS8qIHdpdGhvdXQgZGF1Z2h0ZXJib2FyZCAqLwogCU1PREVMX0hEQVZfSDYsCS8qIHdpdGggSDYgZGF1Z2h0ZXJib2FyZCAqLworCU1PREVMX1NUWCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCB4b25hcl9pZHNbXSBfX2RldmluaXRkYXRhID0gewpAQCAtMTYwLDYgKzE4OSw4IEBACiAJeyBPWFlHRU5fUENJX1NVQklEKDB4MTA0MywgMHg4MmI3KSwgLmRyaXZlcl9kYXRhID0gTU9ERUxfRDJYIH0sCiAJeyBPWFlHRU5fUENJX1NVQklEKDB4MTA0MywgMHg4MzE0KSwgLmRyaXZlcl9kYXRhID0gTU9ERUxfSERBViB9LAogCXsgT1hZR0VOX1BDSV9TVUJJRCgweDEwNDMsIDB4ODM0ZiksIC5kcml2ZXJfZGF0YSA9IE1PREVMX0QxIH0sCisJeyBPWFlHRU5fUENJX1NVQklEKDB4MTA0MywgMHg4MzVjKSwgLmRyaXZlcl9kYXRhID0gTU9ERUxfU1RYIH0sCisJeyBPWFlHRU5fUENJX1NVQklEX0JST0tFTl9FRVBST00gfSwKIAl7IH0KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgeG9uYXJfaWRzKTsKQEAgLTE4MywxMiArMjE0LDE0IEBACiAjZGVmaW5lIEdQSU9fSERBVl9EQl9INgkJMHgwMDAwCiAjZGVmaW5lIEdQSU9fSERBVl9EQl9YWAkJMHgwMDIwCiAKKyNkZWZpbmUgR1BJT19TVF9IUF9SRUFSCQkweDAwMDIKKyNkZWZpbmUgR1BJT19TVF9IUAkJMHgwMDgwCisKICNkZWZpbmUgSTJDX0RFVklDRV9QQ00xNzk2KGkpCSgweDk4ICsgKChpKSA8PCAxKSkJLyogMTAwMTEsIEFEeD1pLCAvVz0wICovCiAjZGVmaW5lIEkyQ19ERVZJQ0VfQ1M0Mzk4CTB4OWUJLyogMTAwMTEsIEFEMT0xLCBBRDA9MSwgL1c9MCAqLwogI2RlZmluZSBJMkNfREVWSUNFX0NTNDM2MkEJMHgzMAkvKiAwMDExMDAsIEFEMD0wLCAvVz0wICovCiAKIHN0cnVjdCB4b25hcl9kYXRhIHsKLQl1bnNpZ25lZCBpbnQgbW9kZWw7CiAJdW5zaWduZWQgaW50IGFudGlfcG9wX2RlbGF5OwogCXVuc2lnbmVkIGludCBkYWNzOwogCXUxNiBvdXRwdXRfZW5hYmxlX2JpdDsKQEAgLTMzNCwxNSArMzY3LDkgQEAKIAlzdHJ1Y3QgeG9uYXJfZGF0YSAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7CiAKIAlkYXRhLT5hbnRpX3BvcF9kZWxheSA9IDMwMDsKKwlkYXRhLT5kYWNzID0gNDsKIAlkYXRhLT5vdXRwdXRfZW5hYmxlX2JpdCA9IEdQSU9fRDJfT1VUUFVUX0VOQUJMRTsKIAlkYXRhLT5wY20xNzk2X292ZXJzYW1wbGluZyA9IFBDTTE3OTZfT1NfNjQ7Ci0JaWYgKGRhdGEtPm1vZGVsID09IE1PREVMX0QyWCkgewotCQlkYXRhLT5leHRfcG93ZXJfcmVnID0gT1hZR0VOX0dQSU9fREFUQTsKLQkJZGF0YS0+ZXh0X3Bvd2VyX2ludF9yZWcgPSBPWFlHRU5fR1BJT19JTlRFUlJVUFRfTUFTSzsKLQkJZGF0YS0+ZXh0X3Bvd2VyX2JpdCA9IEdQSU9fRDJYX0VYVF9QT1dFUjsKLQkJb3h5Z2VuX2NsZWFyX2JpdHMxNihjaGlwLCBPWFlHRU5fR1BJT19DT05UUk9MLAotCQkJCSAgICBHUElPX0QyWF9FWFRfUE9XRVIpOwotCX0KIAogCXBjbTE3OTZfaW5pdChjaGlwKTsKIApAQCAtMzU1LDYgKzM4MiwxOCBAQAogCXNuZF9jb21wb25lbnRfYWRkKGNoaXAtPmNhcmQsICJDUzUzODEiKTsKIH0KIAorc3RhdGljIHZvaWQgeG9uYXJfZDJ4X2luaXQoc3RydWN0IG94eWdlbiAqY2hpcCkKK3sKKwlzdHJ1Y3QgeG9uYXJfZGF0YSAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7CisKKwlkYXRhLT5leHRfcG93ZXJfcmVnID0gT1hZR0VOX0dQSU9fREFUQTsKKwlkYXRhLT5leHRfcG93ZXJfaW50X3JlZyA9IE9YWUdFTl9HUElPX0lOVEVSUlVQVF9NQVNLOworCWRhdGEtPmV4dF9wb3dlcl9iaXQgPSBHUElPX0QyWF9FWFRfUE9XRVI7CisJb3h5Z2VuX2NsZWFyX2JpdHMxNihjaGlwLCBPWFlHRU5fR1BJT19DT05UUk9MLCBHUElPX0QyWF9FWFRfUE9XRVIpOworCisJeG9uYXJfZDJfaW5pdChjaGlwKTsKK30KKwogc3RhdGljIHZvaWQgdXBkYXRlX2NzNDM2MmFfdm9sdW1lcyhzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQogewogCXU4IG11dGU7CkBAIC00MjIsMTEgKzQ2MSw2IEBACiAJZGF0YS0+Y3M0Mzk4X2ZtID0gQ1M0Mzk4X0ZNX1NJTkdMRSB8IENTNDM5OF9ERU1fTk9ORSB8IENTNDM5OF9ESUZfTEpVU1Q7CiAJZGF0YS0+Y3M0MzYyYV9mbSA9IENTNDM2MkFfRk1fU0lOR0xFIHwKIAkJQ1M0MzYyQV9BVEFQSV9CX1IgfCBDUzQzNjJBX0FUQVBJX0FfTDsKLQlpZiAoZGF0YS0+bW9kZWwgPT0gTU9ERUxfRFgpIHsKLQkJZGF0YS0+ZXh0X3Bvd2VyX3JlZyA9IE9YWUdFTl9HUElfREFUQTsKLQkJZGF0YS0+ZXh0X3Bvd2VyX2ludF9yZWcgPSBPWFlHRU5fR1BJX0lOVEVSUlVQVF9NQVNLOwotCQlkYXRhLT5leHRfcG93ZXJfYml0ID0gR1BJX0RYX0VYVF9QT1dFUjsKLQl9CiAKIAlveHlnZW5fd3JpdGUxNihjaGlwLCBPWFlHRU5fMldJUkVfQlVTX1NUQVRVUywKIAkJICAgICAgIE9YWUdFTl8yV0lSRV9MRU5HVEhfOCB8CkBAIC00NDcsNiArNDgxLDE3IEBACiAJc25kX2NvbXBvbmVudF9hZGQoY2hpcC0+Y2FyZCwgIkNTNTM2MSIpOwogfQogCitzdGF0aWMgdm9pZCB4b25hcl9keF9pbml0KHN0cnVjdCBveHlnZW4gKmNoaXApCit7CisJc3RydWN0IHhvbmFyX2RhdGEgKmRhdGEgPSBjaGlwLT5tb2RlbF9kYXRhOworCisJZGF0YS0+ZXh0X3Bvd2VyX3JlZyA9IE9YWUdFTl9HUElfREFUQTsKKwlkYXRhLT5leHRfcG93ZXJfaW50X3JlZyA9IE9YWUdFTl9HUElfSU5URVJSVVBUX01BU0s7CisJZGF0YS0+ZXh0X3Bvd2VyX2JpdCA9IEdQSV9EWF9FWFRfUE9XRVI7CisKKwl4b25hcl9kMV9pbml0KGNoaXApOworfQorCiBzdGF0aWMgdm9pZCB4b25hcl9oZGF2X2luaXQoc3RydWN0IG94eWdlbiAqY2hpcCkKIHsKIAlzdHJ1Y3QgeG9uYXJfZGF0YSAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7CkBAIC00NTgsNiArNTAzLDcgQEAKIAkJICAgICAgIE9YWUdFTl8yV0lSRV9TUEVFRF9GQVNUKTsKIAogCWRhdGEtPmFudGlfcG9wX2RlbGF5ID0gMTAwOworCWRhdGEtPmRhY3MgPSBjaGlwLT5tb2RlbC5wcml2YXRlX2RhdGEgPT0gTU9ERUxfSERBVl9INiA/IDQgOiAxOwogCWRhdGEtPm91dHB1dF9lbmFibGVfYml0ID0gR1BJT19EWF9PVVRQVVRfRU5BQkxFOwogCWRhdGEtPmV4dF9wb3dlcl9yZWcgPSBPWFlHRU5fR1BJX0RBVEE7CiAJZGF0YS0+ZXh0X3Bvd2VyX2ludF9yZWcgPSBPWFlHRU5fR1BJX0lOVEVSUlVQVF9NQVNLOwpAQCAtNDg0LDYgKzUzMCwzNiBAQAogCXNuZF9jb21wb25lbnRfYWRkKGNoaXAtPmNhcmQsICJDUzUzODEiKTsKIH0KIAorc3RhdGljIHZvaWQgeG9uYXJfc3R4X2luaXQoc3RydWN0IG94eWdlbiAqY2hpcCkKK3sKKwlzdHJ1Y3QgeG9uYXJfZGF0YSAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7CisKKwlveHlnZW5fd3JpdGUxNihjaGlwLCBPWFlHRU5fMldJUkVfQlVTX1NUQVRVUywKKwkJICAgICAgIE9YWUdFTl8yV0lSRV9MRU5HVEhfOCB8CisJCSAgICAgICBPWFlHRU5fMldJUkVfSU5URVJSVVBUX01BU0sgfAorCQkgICAgICAgT1hZR0VOXzJXSVJFX1NQRUVEX0ZBU1QpOworCisJZGF0YS0+YW50aV9wb3BfZGVsYXkgPSAxMDA7CisJZGF0YS0+ZGFjcyA9IDE7CisJZGF0YS0+b3V0cHV0X2VuYWJsZV9iaXQgPSBHUElPX0RYX09VVFBVVF9FTkFCTEU7CisJZGF0YS0+ZXh0X3Bvd2VyX3JlZyA9IE9YWUdFTl9HUElfREFUQTsKKwlkYXRhLT5leHRfcG93ZXJfaW50X3JlZyA9IE9YWUdFTl9HUElfSU5URVJSVVBUX01BU0s7CisJZGF0YS0+ZXh0X3Bvd2VyX2JpdCA9IEdQSV9EWF9FWFRfUE9XRVI7CisJZGF0YS0+cGNtMTc5Nl9vdmVyc2FtcGxpbmcgPSBQQ00xNzk2X09TXzY0OworCisJcGNtMTc5Nl9pbml0KGNoaXApOworCisJb3h5Z2VuX3NldF9iaXRzMTYoY2hpcCwgT1hZR0VOX0dQSU9fQ09OVFJPTCwKKwkJCSAgR1BJT19EWF9JTlBVVF9ST1VURSB8IEdQSU9fU1RfSFBfUkVBUiB8IEdQSU9fU1RfSFApOworCW94eWdlbl9jbGVhcl9iaXRzMTYoY2hpcCwgT1hZR0VOX0dQSU9fREFUQSwKKwkJCSAgICBHUElPX0RYX0lOUFVUX1JPVVRFIHwgR1BJT19TVF9IUF9SRUFSIHwgR1BJT19TVF9IUCk7CisKKwl4b25hcl9jb21tb25faW5pdChjaGlwKTsKKworCXNuZF9jb21wb25lbnRfYWRkKGNoaXAtPmNhcmQsICJQQ00xNzkyQSIpOworCXNuZF9jb21wb25lbnRfYWRkKGNoaXAtPmNhcmQsICJDUzUzODEiKTsKK30KKwogc3RhdGljIHZvaWQgeG9uYXJfZGlzYWJsZV9vdXRwdXQoc3RydWN0IG94eWdlbiAqY2hpcCkKIHsKIAlzdHJ1Y3QgeG9uYXJfZGF0YSAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7CkBAIC01MTEsNiArNTg3LDExIEBACiAJeG9uYXJfZGlzYWJsZV9vdXRwdXQoY2hpcCk7CiB9CiAKK3N0YXRpYyB2b2lkIHhvbmFyX3N0X2NsZWFudXAoc3RydWN0IG94eWdlbiAqY2hpcCkKK3sKKwl4b25hcl9kaXNhYmxlX291dHB1dChjaGlwKTsKK30KKwogc3RhdGljIHZvaWQgeG9uYXJfZDJfc3VzcGVuZChzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQogewogCXhvbmFyX2QyX2NsZWFudXAoY2hpcCk7CkBAIC01MjcsNiArNjA4LDExIEBACiAJbXNsZWVwKDIpOwogfQogCitzdGF0aWMgdm9pZCB4b25hcl9zdF9zdXNwZW5kKHN0cnVjdCBveHlnZW4gKmNoaXApCit7CisJeG9uYXJfc3RfY2xlYW51cChjaGlwKTsKK30KKwogc3RhdGljIHZvaWQgeG9uYXJfZDJfcmVzdW1lKHN0cnVjdCBveHlnZW4gKmNoaXApCiB7CiAJcGNtMTc5Nl9pbml0KGNoaXApOwpAQCAtNTU0LDYgKzY0MCwxMiBAQAogCXhvbmFyX2VuYWJsZV9vdXRwdXQoY2hpcCk7CiB9CiAKK3N0YXRpYyB2b2lkIHhvbmFyX3N0X3Jlc3VtZShzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQoreworCXBjbTE3OTZfaW5pdChjaGlwKTsKKwl4b25hcl9lbmFibGVfb3V0cHV0KGNoaXApOworfQorCiBzdGF0aWMgdm9pZCB4b25hcl9oZGF2X3BjbV9oYXJkd2FyZV9maWx0ZXIodW5zaWduZWQgaW50IGNoYW5uZWwsCiAJCQkJCSAgIHN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlICpoYXJkd2FyZSkKIHsKQEAgLTczMyw2ICs4MjUsNzIgQEAKIAkucHJpdmF0ZV92YWx1ZSA9IEdQSU9fRFhfRlJPTlRfUEFORUwsCiB9OwogCitzdGF0aWMgaW50IHN0X291dHB1dF9zd2l0Y2hfaW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICpjdGwsCisJCQkJIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqaW5mbykKK3sKKwlzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgbmFtZXNbM10gPSB7CisJCSJTcGVha2VycyIsICJIZWFkcGhvbmVzIiwgIkZQIEhlYWRwaG9uZXMiCisJfTsKKworCWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0VOVU1FUkFURUQ7CisJaW5mby0+Y291bnQgPSAxOworCWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgPSAzOworCWlmIChpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW0gPj0gMykKKwkJaW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID0gMjsKKwlzdHJjcHkoaW5mby0+dmFsdWUuZW51bWVyYXRlZC5uYW1lLCBuYW1lc1tpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1dKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdF9vdXRwdXRfc3dpdGNoX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICpjdGwsCisJCQkJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdmFsdWUpCit7CisJc3RydWN0IG94eWdlbiAqY2hpcCA9IGN0bC0+cHJpdmF0ZV9kYXRhOworCXUxNiBncGlvOworCisJZ3BpbyA9IG94eWdlbl9yZWFkMTYoY2hpcCwgT1hZR0VOX0dQSU9fREFUQSk7CisJaWYgKCEoZ3BpbyAmIEdQSU9fU1RfSFApKQorCQl2YWx1ZS0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gMDsKKwllbHNlIGlmIChncGlvICYgR1BJT19TVF9IUF9SRUFSKQorCQl2YWx1ZS0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gMTsKKwllbHNlCisJCXZhbHVlLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSAyOworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgc3Rfb3V0cHV0X3N3aXRjaF9wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqY3RsLAorCQkJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnZhbHVlKQoreworCXN0cnVjdCBveHlnZW4gKmNoaXAgPSBjdGwtPnByaXZhdGVfZGF0YTsKKwl1MTYgZ3Bpb19vbGQsIGdwaW87CisKKwltdXRleF9sb2NrKCZjaGlwLT5tdXRleCk7CisJZ3Bpb19vbGQgPSBveHlnZW5fcmVhZDE2KGNoaXAsIE9YWUdFTl9HUElPX0RBVEEpOworCWdwaW8gPSBncGlvX29sZDsKKwlzd2l0Y2ggKHZhbHVlLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0pIHsKKwljYXNlIDA6CisJCWdwaW8gJj0gfihHUElPX1NUX0hQIHwgR1BJT19TVF9IUF9SRUFSKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlncGlvIHw9IEdQSU9fU1RfSFAgfCBHUElPX1NUX0hQX1JFQVI7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJZ3BpbyA9IChncGlvIHwgR1BJT19TVF9IUCkgJiB+R1BJT19TVF9IUF9SRUFSOworCQlicmVhazsKKwl9CisJb3h5Z2VuX3dyaXRlMTYoY2hpcCwgT1hZR0VOX0dQSU9fREFUQSwgZ3Bpbyk7CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5tdXRleCk7CisJcmV0dXJuIGdwaW8gIT0gZ3Bpb19vbGQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzdF9vdXRwdXRfc3dpdGNoID0geworCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCS5uYW1lID0gIkFuYWxvZyBPdXRwdXQiLAorCS5pbmZvID0gc3Rfb3V0cHV0X3N3aXRjaF9pbmZvLAorCS5nZXQgPSBzdF9vdXRwdXRfc3dpdGNoX2dldCwKKwkucHV0ID0gc3Rfb3V0cHV0X3N3aXRjaF9wdXQsCit9OworCiBzdGF0aWMgdm9pZCB4b25hcl9saW5lX21pY19hYzk3X3N3aXRjaChzdHJ1Y3Qgb3h5Z2VuICpjaGlwLAogCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBpbnQgbXV0ZSkKIHsKQEAgLTc0NSw4ICs5MDMsOCBAQAogCX0KIH0KIAotc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKHBjbTE3OTZfZGJfc2NhbGUsIC0xMjAwMCwgNTAsIDApOwotc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKGNzNDM2MmFfZGJfc2NhbGUsIC0xMjcwMCwgMTAwLCAwKTsKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShwY20xNzk2X2RiX3NjYWxlLCAtNjAwMCwgNTAsIDApOworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKGNzNDM2MmFfZGJfc2NhbGUsIC02MDAwLCAxMDAsIDApOwogCiBzdGF0aWMgaW50IHhvbmFyX2QyX2NvbnRyb2xfZmlsdGVyKHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICp0ZW1wbGF0ZSkKIHsKQEAgLTc2Myw2ICs5MjEsMTUgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCB4b25hcl9zdF9jb250cm9sX2ZpbHRlcihzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqdGVtcGxhdGUpCit7CisJaWYgKCFzdHJuY21wKHRlbXBsYXRlLT5uYW1lLCAiQ0QgQ2FwdHVyZSAiLCAxMSkpCisJCXJldHVybiAxOyAvKiBubyBDRCBpbnB1dCAqLworCWlmICghc3RyY21wKHRlbXBsYXRlLT5uYW1lLCAiU3RlcmVvIFVwbWl4aW5nIikpCisJCXJldHVybiAxOyAvKiBzdGVyZW8gb25seSAtIHdlIGRvbid0IG5lZWQgdXBtaXhpbmcgKi8KKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCB4b25hcl9kMl9taXhlcl9pbml0KHN0cnVjdCBveHlnZW4gKmNoaXApCiB7CiAJcmV0dXJuIHNuZF9jdGxfYWRkKGNoaXAtPmNhcmQsIHNuZF9jdGxfbmV3MSgmYWx0X3N3aXRjaCwgY2hpcCkpOwpAQCAtNzczLDUxICs5NDAsMTQgQEAKIAlyZXR1cm4gc25kX2N0bF9hZGQoY2hpcC0+Y2FyZCwgc25kX2N0bF9uZXcxKCZmcm9udF9wYW5lbF9zd2l0Y2gsIGNoaXApKTsKIH0KIAotc3RhdGljIGludCB4b25hcl9tb2RlbF9wcm9iZShzdHJ1Y3Qgb3h5Z2VuICpjaGlwLCB1bnNpZ25lZCBsb25nIGRyaXZlcl9kYXRhKQorc3RhdGljIGludCB4b25hcl9zdF9taXhlcl9pbml0KHN0cnVjdCBveHlnZW4gKmNoaXApCiB7Ci0Jc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IG5hbWVzW10gPSB7Ci0JCVtNT0RFTF9EMV0JPSAiWG9uYXIgRDEiLAotCQlbTU9ERUxfRFhdCT0gIlhvbmFyIERYIiwKLQkJW01PREVMX0QyXQk9ICJYb25hciBEMiIsCi0JCVtNT0RFTF9EMlhdCT0gIlhvbmFyIEQyWCIsCi0JCVtNT0RFTF9IREFWXQk9ICJYb25hciBIREFWMS4zIiwKLQkJW01PREVMX0hEQVZfSDZdCT0gIlhvbmFyIEhEQVYxLjMrSDYiLAotCX07Ci0Jc3RhdGljIGNvbnN0IHU4IGRhY3NbXSA9IHsKLQkJW01PREVMX0QxXQk9IDIsCi0JCVtNT0RFTF9EWF0JPSAyLAotCQlbTU9ERUxfRDJdCT0gNCwKLQkJW01PREVMX0QyWF0JPSA0LAotCQlbTU9ERUxfSERBVl0JPSAxLAotCQlbTU9ERUxfSERBVl9INl0JPSA0LAotCX07Ci0Jc3RydWN0IHhvbmFyX2RhdGEgKmRhdGEgPSBjaGlwLT5tb2RlbF9kYXRhOwotCi0JZGF0YS0+bW9kZWwgPSBkcml2ZXJfZGF0YTsKLQlpZiAoZGF0YS0+bW9kZWwgPT0gTU9ERUxfSERBVikgewotCQlveHlnZW5fY2xlYXJfYml0czE2KGNoaXAsIE9YWUdFTl9HUElPX0NPTlRST0wsCi0JCQkJICAgIEdQSU9fSERBVl9EQl9NQVNLKTsKLQkJc3dpdGNoIChveHlnZW5fcmVhZDE2KGNoaXAsIE9YWUdFTl9HUElPX0RBVEEpICYKLQkJCUdQSU9fSERBVl9EQl9NQVNLKSB7Ci0JCWNhc2UgR1BJT19IREFWX0RCX0g2OgotCQkJZGF0YS0+bW9kZWwgPSBNT0RFTF9IREFWX0g2OwotCQkJYnJlYWs7Ci0JCWNhc2UgR1BJT19IREFWX0RCX1hYOgotCQkJc25kX3ByaW50ayhLRVJOX0VSUiAidW5rbm93biBkYXVnaHRlcmJvYXJkXG4iKTsKLQkJCXJldHVybiAtRU5PREVWOwotCQl9Ci0JfQotCi0JZGF0YS0+ZGFjcyA9IGRhY3NbZGF0YS0+bW9kZWxdOwotCWNoaXAtPm1vZGVsLnNob3J0bmFtZSA9IG5hbWVzW2RhdGEtPm1vZGVsXTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gc25kX2N0bF9hZGQoY2hpcC0+Y2FyZCwgc25kX2N0bF9uZXcxKCZzdF9vdXRwdXRfc3dpdGNoLCBjaGlwKSk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3h5Z2VuX21vZGVsIG1vZGVsX3hvbmFyX2QyID0gewogCS5sb25nbmFtZSA9ICJBc3VzIFZpcnR1b3NvIDIwMCIsCiAJLmNoaXAgPSAiQVYyMDAiLAotCS5vd25lciA9IFRISVNfTU9EVUxFLAotCS5wcm9iZSA9IHhvbmFyX21vZGVsX3Byb2JlLAogCS5pbml0ID0geG9uYXJfZDJfaW5pdCwKIAkuY29udHJvbF9maWx0ZXIgPSB4b25hcl9kMl9jb250cm9sX2ZpbHRlciwKIAkubWl4ZXJfaW5pdCA9IHhvbmFyX2QyX21peGVyX2luaXQsCkBAIC04MzcsOCArOTY3LDggQEAKIAkJCSBNSURJX09VVFBVVCB8CiAJCQkgTUlESV9JTlBVVCwKIAkuZGFjX2NoYW5uZWxzID0gOCwKLQkuZGFjX3ZvbHVtZV9taW4gPSAweDBmLAotCS5kYWNfdm9sdW1lX21heCA9IDB4ZmYsCisJLmRhY192b2x1bWVfbWluID0gMjU1IC0gMio2MCwKKwkuZGFjX3ZvbHVtZV9tYXggPSAyNTUsCiAJLm1pc2NfZmxhZ3MgPSBPWFlHRU5fTUlTQ19NSURJLAogCS5mdW5jdGlvbl9mbGFncyA9IE9YWUdFTl9GVU5DVElPTl9TUEkgfAogCQkJICBPWFlHRU5fRlVOQ1RJT05fRU5BQkxFX1NQSV80XzUsCkBAIC04NDksOCArOTc5LDYgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3h5Z2VuX21vZGVsIG1vZGVsX3hvbmFyX2QxID0gewogCS5sb25nbmFtZSA9ICJBc3VzIFZpcnR1b3NvIDEwMCIsCiAJLmNoaXAgPSAiQVYyMDAiLAotCS5vd25lciA9IFRISVNfTU9EVUxFLAotCS5wcm9iZSA9IHhvbmFyX21vZGVsX3Byb2JlLAogCS5pbml0ID0geG9uYXJfZDFfaW5pdCwKIAkuY29udHJvbF9maWx0ZXIgPSB4b25hcl9kMV9jb250cm9sX2ZpbHRlciwKIAkubWl4ZXJfaW5pdCA9IHhvbmFyX2QxX21peGVyX2luaXQsCkBAIC04NjgsNyArOTk2LDcgQEAKIAkJCSBQTEFZQkFDS18xX1RPX1NQRElGIHwKIAkJCSBDQVBUVVJFXzBfRlJPTV9JMlNfMiwKIAkuZGFjX2NoYW5uZWxzID0gOCwKLQkuZGFjX3ZvbHVtZV9taW4gPSAwLAorCS5kYWNfdm9sdW1lX21pbiA9IDEyNyAtIDYwLAogCS5kYWNfdm9sdW1lX21heCA9IDEyNywKIAkuZnVuY3Rpb25fZmxhZ3MgPSBPWFlHRU5fRlVOQ1RJT05fMldJUkUsCiAJLmRhY19pMnNfZm9ybWF0ID0gT1hZR0VOX0kyU19GT1JNQVRfTEpVU1QsCkBAIC04NzgsOCArMTAwNiw2IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IG94eWdlbl9tb2RlbCBtb2RlbF94b25hcl9oZGF2ID0gewogCS5sb25nbmFtZSA9ICJBc3VzIFZpcnR1b3NvIDIwMCIsCiAJLmNoaXAgPSAiQVYyMDAiLAotCS5vd25lciA9IFRISVNfTU9EVUxFLAotCS5wcm9iZSA9IHhvbmFyX21vZGVsX3Byb2JlLAogCS5pbml0ID0geG9uYXJfaGRhdl9pbml0LAogCS5jbGVhbnVwID0geG9uYXJfaGRhdl9jbGVhbnVwLAogCS5zdXNwZW5kID0geG9uYXJfaGRhdl9zdXNwZW5kLApAQCAtODk3LDE2ICsxMDIzLDQzIEBACiAJCQkgUExBWUJBQ0tfMV9UT19TUERJRiB8CiAJCQkgQ0FQVFVSRV8wX0ZST01fSTJTXzIsCiAJLmRhY19jaGFubmVscyA9IDgsCi0JLmRhY192b2x1bWVfbWluID0gMHgwZiwKLQkuZGFjX3ZvbHVtZV9tYXggPSAweGZmLAorCS5kYWNfdm9sdW1lX21pbiA9IDI1NSAtIDIqNjAsCisJLmRhY192b2x1bWVfbWF4ID0gMjU1LAogCS5taXNjX2ZsYWdzID0gT1hZR0VOX01JU0NfTUlESSwKIAkuZnVuY3Rpb25fZmxhZ3MgPSBPWFlHRU5fRlVOQ1RJT05fMldJUkUsCiAJLmRhY19pMnNfZm9ybWF0ID0gT1hZR0VOX0kyU19GT1JNQVRfTEpVU1QsCiAJLmFkY19pMnNfZm9ybWF0ID0gT1hZR0VOX0kyU19GT1JNQVRfTEpVU1QsCiB9OwogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCB4b25hcl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpLAotCQkJCSBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGNpX2lkKQorc3RhdGljIGNvbnN0IHN0cnVjdCBveHlnZW5fbW9kZWwgbW9kZWxfeG9uYXJfc3QgPSB7CisJLmxvbmduYW1lID0gIkFzdXMgVmlydHVvc28gMTAwIiwKKwkuY2hpcCA9ICJBVjIwMCIsCisJLmluaXQgPSB4b25hcl9zdHhfaW5pdCwKKwkuY29udHJvbF9maWx0ZXIgPSB4b25hcl9zdF9jb250cm9sX2ZpbHRlciwKKwkubWl4ZXJfaW5pdCA9IHhvbmFyX3N0X21peGVyX2luaXQsCisJLmNsZWFudXAgPSB4b25hcl9zdF9jbGVhbnVwLAorCS5zdXNwZW5kID0geG9uYXJfc3Rfc3VzcGVuZCwKKwkucmVzdW1lID0geG9uYXJfc3RfcmVzdW1lLAorCS5zZXRfZGFjX3BhcmFtcyA9IHNldF9wY20xNzk2X3BhcmFtcywKKwkuc2V0X2FkY19wYXJhbXMgPSBzZXRfY3M1M3gxX3BhcmFtcywKKwkudXBkYXRlX2RhY192b2x1bWUgPSB1cGRhdGVfcGNtMTc5Nl92b2x1bWUsCisJLnVwZGF0ZV9kYWNfbXV0ZSA9IHVwZGF0ZV9wY20xNzk2X211dGUsCisJLmFjOTdfc3dpdGNoID0geG9uYXJfbGluZV9taWNfYWM5N19zd2l0Y2gsCisJLmRhY190bHYgPSBwY20xNzk2X2RiX3NjYWxlLAorCS5tb2RlbF9kYXRhX3NpemUgPSBzaXplb2Yoc3RydWN0IHhvbmFyX2RhdGEpLAorCS5kZXZpY2VfY29uZmlnID0gUExBWUJBQ0tfMF9UT19JMlMgfAorCQkJIFBMQVlCQUNLXzFfVE9fU1BESUYgfAorCQkJIENBUFRVUkVfMF9GUk9NX0kyU18yLAorCS5kYWNfY2hhbm5lbHMgPSAyLAorCS5kYWNfdm9sdW1lX21pbiA9IDI1NSAtIDIqNjAsCisJLmRhY192b2x1bWVfbWF4ID0gMjU1LAorCS5mdW5jdGlvbl9mbGFncyA9IE9YWUdFTl9GVU5DVElPTl8yV0lSRSwKKwkuZGFjX2kyc19mb3JtYXQgPSBPWFlHRU5fSTJTX0ZPUk1BVF9MSlVTVCwKKwkuYWRjX2kyc19mb3JtYXQgPSBPWFlHRU5fSTJTX0ZPUk1BVF9MSlVTVCwKK307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGdldF94b25hcl9tb2RlbChzdHJ1Y3Qgb3h5Z2VuICpjaGlwLAorCQkJCSAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQogewogCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3h5Z2VuX21vZGVsICpjb25zdCBtb2RlbHNbXSA9IHsKIAkJW01PREVMX0QxXQk9ICZtb2RlbF94b25hcl9kMSwKQEAgLTkxNCw3ICsxMDY3LDU3IEBACiAJCVtNT0RFTF9EMl0JPSAmbW9kZWxfeG9uYXJfZDIsCiAJCVtNT0RFTF9EMlhdCT0gJm1vZGVsX3hvbmFyX2QyLAogCQlbTU9ERUxfSERBVl0JPSAmbW9kZWxfeG9uYXJfaGRhdiwKKwkJW01PREVMX1NUWF0JPSAmbW9kZWxfeG9uYXJfc3QsCiAJfTsKKwlzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgbmFtZXNbXSA9IHsKKwkJW01PREVMX0QxXQk9ICJYb25hciBEMSIsCisJCVtNT0RFTF9EWF0JPSAiWG9uYXIgRFgiLAorCQlbTU9ERUxfRDJdCT0gIlhvbmFyIEQyIiwKKwkJW01PREVMX0QyWF0JPSAiWG9uYXIgRDJYIiwKKwkJW01PREVMX0hEQVZdCT0gIlhvbmFyIEhEQVYxLjMiLAorCQlbTU9ERUxfSERBVl9INl0JPSAiWG9uYXIgSERBVjEuMytINiIsCisJCVtNT0RFTF9TVFhdCT0gIlhvbmFyIEVzc2VuY2UgU1RYIiwKKwl9OworCXVuc2lnbmVkIGludCBtb2RlbCA9IGlkLT5kcml2ZXJfZGF0YTsKKworCWlmIChtb2RlbCA+PSBBUlJBWV9TSVpFKG1vZGVscykgfHwgIW1vZGVsc1ttb2RlbF0pCisJCXJldHVybiAtRUlOVkFMOworCWNoaXAtPm1vZGVsID0gKm1vZGVsc1ttb2RlbF07CisKKwlzd2l0Y2ggKG1vZGVsKSB7CisJY2FzZSBNT0RFTF9EMlg6CisJCWNoaXAtPm1vZGVsLmluaXQgPSB4b25hcl9kMnhfaW5pdDsKKwkJYnJlYWs7CisJY2FzZSBNT0RFTF9EWDoKKwkJY2hpcC0+bW9kZWwuaW5pdCA9IHhvbmFyX2R4X2luaXQ7CisJCWJyZWFrOworCWNhc2UgTU9ERUxfSERBVjoKKwkJb3h5Z2VuX2NsZWFyX2JpdHMxNihjaGlwLCBPWFlHRU5fR1BJT19DT05UUk9MLAorCQkJCSAgICBHUElPX0hEQVZfREJfTUFTSyk7CisJCXN3aXRjaCAob3h5Z2VuX3JlYWQxNihjaGlwLCBPWFlHRU5fR1BJT19EQVRBKSAmCisJCQlHUElPX0hEQVZfREJfTUFTSykgeworCQljYXNlIEdQSU9fSERBVl9EQl9INjoKKwkJCW1vZGVsID0gTU9ERUxfSERBVl9INjsKKwkJCWJyZWFrOworCQljYXNlIEdQSU9fSERBVl9EQl9YWDoKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgInVua25vd24gZGF1Z2h0ZXJib2FyZFxuIik7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCQlicmVhazsKKwljYXNlIE1PREVMX1NUWDoKKwkJb3h5Z2VuX2NsZWFyX2JpdHMxNihjaGlwLCBPWFlHRU5fR1BJT19DT05UUk9MLAorCQkJCSAgICBHUElPX0hEQVZfREJfTUFTSyk7CisJCWJyZWFrOworCX0KKworCWNoaXAtPm1vZGVsLnNob3J0bmFtZSA9IG5hbWVzW21vZGVsXTsKKwljaGlwLT5tb2RlbC5wcml2YXRlX2RhdGEgPSBtb2RlbDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgeG9uYXJfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSwKKwkJCQkgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9pZCkKK3sKIAlzdGF0aWMgaW50IGRldjsKIAlpbnQgZXJyOwogCkBAIC05MjQsMTAgKzExMjcsOCBAQAogCQkrK2RldjsKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQotCUJVR19PTihwY2lfaWQtPmRyaXZlcl9kYXRhID49IEFSUkFZX1NJWkUobW9kZWxzKSk7Ci0JZXJyID0gb3h5Z2VuX3BjaV9wcm9iZShwY2ksIGluZGV4W2Rldl0sIGlkW2Rldl0sCi0JCQkgICAgICAgbW9kZWxzW3BjaV9pZC0+ZHJpdmVyX2RhdGFdLAotCQkJICAgICAgIHBjaV9pZC0+ZHJpdmVyX2RhdGEpOworCWVyciA9IG94eWdlbl9wY2lfcHJvYmUocGNpLCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKKwkJCSAgICAgICB4b25hcl9pZHMsIGdldF94b25hcl9tb2RlbCk7CiAJaWYgKGVyciA+PSAwKQogCQkrK2RldjsKIAlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3BjeGhyL3BjeGhyLmMgYi9zb3VuZC9wY2kvcGN4aHIvcGN4aHIuYwppbmRleCAyN2NmMmMyLi44MGUwNjRhIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvcGN4aHIvcGN4aHIuYworKysgYi9zb3VuZC9wY2kvcGN4aHIvcGN4aHIuYwpAQCAtMTMzNCw2ICsxMzM0LDQwIEBACiAJc25kX2lwcmludGYoYnVmZmVyLCAiXG4iKTsKIH0KIAorc3RhdGljIHZvaWQgcGN4aHJfcHJvY19ncGlvX3JlYWQoc3RydWN0IHNuZF9pbmZvX2VudHJ5ICplbnRyeSwKKwkJCQkgc3RydWN0IHNuZF9pbmZvX2J1ZmZlciAqYnVmZmVyKQoreworCXN0cnVjdCBzbmRfcGN4aHIgKmNoaXAgPSBlbnRyeS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBwY3hocl9tZ3IgKm1nciA9IGNoaXAtPm1ncjsKKwkvKiBjb21tYW5kcyBhdmFpbGFibGUgd2hlbiBlbWJlZGRlZCBEU1AgaXMgcnVubmluZyAqLworCWlmIChtZ3ItPmRzcF9sb2FkZWQgJiAoMSA8PCBQQ1hIUl9GSVJNV0FSRV9EU1BfTUFJTl9JTkRFWCkpIHsKKwkJLyogZ3BpbyBwb3J0cyBvbiBzdGVyZW8gYm9hcmRzIG9ubHkgYXZhaWxhYmxlICovCisJCWludCB2YWx1ZSA9IDA7CisJCWhyMjIyX3JlYWRfZ3BpbyhtZ3IsIDEsICZ2YWx1ZSk7CS8qIEdQSSAqLworCQlzbmRfaXByaW50ZihidWZmZXIsICJHUEk6IDB4JXhcbiIsIHZhbHVlKTsKKwkJaHIyMjJfcmVhZF9ncGlvKG1nciwgMCwgJnZhbHVlKTsJLyogR1AwICovCisJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIkdQTzogMHgleFxuIiwgdmFsdWUpOworCX0gZWxzZQorCQlzbmRfaXByaW50ZihidWZmZXIsICJubyBmaXJtd2FyZSBsb2FkZWRcbiIpOworCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlxuIik7Cit9CitzdGF0aWMgdm9pZCBwY3hocl9wcm9jX2dwb193cml0ZShzdHJ1Y3Qgc25kX2luZm9fZW50cnkgKmVudHJ5LAorCQkJCSBzdHJ1Y3Qgc25kX2luZm9fYnVmZmVyICpidWZmZXIpCit7CisJc3RydWN0IHNuZF9wY3hociAqY2hpcCA9IGVudHJ5LT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHBjeGhyX21nciAqbWdyID0gY2hpcC0+bWdyOworCWNoYXIgbGluZVs2NF07CisJaW50IHZhbHVlOworCS8qIGNvbW1hbmRzIGF2YWlsYWJsZSB3aGVuIGVtYmVkZGVkIERTUCBpcyBydW5uaW5nICovCisJaWYgKCEobWdyLT5kc3BfbG9hZGVkICYgKDEgPDwgUENYSFJfRklSTVdBUkVfRFNQX01BSU5fSU5ERVgpKSkKKwkJcmV0dXJuOworCXdoaWxlICghc25kX2luZm9fZ2V0X2xpbmUoYnVmZmVyLCBsaW5lLCBzaXplb2YobGluZSkpKSB7CisJCWlmIChzc2NhbmYobGluZSwgIkdQTzogMHgleCIsICZ2YWx1ZSkgIT0gMSkKKwkJCWNvbnRpbnVlOworCQlocjIyMl93cml0ZV9ncG8obWdyLCB2YWx1ZSk7CS8qIEdQMCAqLworCX0KK30KKwogc3RhdGljIHZvaWQgX19kZXZpbml0IHBjeGhyX3Byb2NfaW5pdChzdHJ1Y3Qgc25kX3BjeGhyICpjaGlwKQogewogCXN0cnVjdCBzbmRfaW5mb19lbnRyeSAqZW50cnk7CkBAIC0xMzQyLDYgKzEzNzYsMTMgQEAKIAkJc25kX2luZm9fc2V0X3RleHRfb3BzKGVudHJ5LCBjaGlwLCBwY3hocl9wcm9jX2luZm8pOwogCWlmICghIHNuZF9jYXJkX3Byb2NfbmV3KGNoaXAtPmNhcmQsICJzeW5jIiwgJmVudHJ5KSkKIAkJc25kX2luZm9fc2V0X3RleHRfb3BzKGVudHJ5LCBjaGlwLCBwY3hocl9wcm9jX3N5bmMpOworCS8qIGdwaW8gYXZhaWxhYmxlIG9uIHN0ZXJlbyBzb3VuZCBjYXJkcyBvbmx5ICovCisJaWYgKGNoaXAtPm1nci0+aXNfaHJfc3RlcmVvICYmCisJICAgICFzbmRfY2FyZF9wcm9jX25ldyhjaGlwLT5jYXJkLCAiZ3BpbyIsICZlbnRyeSkpIHsKKwkJc25kX2luZm9fc2V0X3RleHRfb3BzKGVudHJ5LCBjaGlwLCBwY3hocl9wcm9jX2dwaW9fcmVhZCk7CisJCWVudHJ5LT5jLnRleHQud3JpdGUgPSBwY3hocl9wcm9jX2dwb193cml0ZTsKKwkJZW50cnktPm1vZGUgfD0gU19JV1VTUjsKKwl9CiB9CiAvKiBlbmQgb2YgcHJvYyBpbnRlcmZhY2UgKi8KIApAQCAtMTUxMCwxMiArMTU1MSwxMiBAQAogCiAJCXNucHJpbnRmKHRtcGlkLCBzaXplb2YodG1waWQpLCAiJXMtJWQiLAogCQkJIGlkW2Rldl0gPyBpZFtkZXZdIDogY2FyZF9uYW1lLCBpKTsKLQkJY2FyZCA9IHNuZF9jYXJkX25ldyhpZHgsIHRtcGlkLCBUSElTX01PRFVMRSwgMCk7CisJCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpZHgsIHRtcGlkLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOwogCi0JCWlmICghIGNhcmQpIHsKKwkJaWYgKGVyciA8IDApIHsKIAkJCXNuZF9wcmludGsoS0VSTl9FUlIgImNhbm5vdCBhbGxvY2F0ZSB0aGUgY2FyZCAlZFxuIiwgaSk7CiAJCQlwY3hocl9mcmVlKG1ncik7Ci0JCQlyZXR1cm4gLUVOT01FTTsKKwkJCXJldHVybiBlcnI7CiAJCX0KIAogCQlzdHJjcHkoY2FyZC0+ZHJpdmVyLCBEUklWRVJfTkFNRSk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcGN4aHIvcGN4aHIuaCBiL3NvdW5kL3BjaS9wY3hoci9wY3hoci5oCmluZGV4IDY5ZDg3ZGUuLmJkYTc3NmMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9wY3hoci9wY3hoci5oCisrKyBiL3NvdW5kL3BjaS9wY3hoci9wY3hoci5oCkBAIC0yNyw4ICsyNyw4IEBACiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KIAotI2RlZmluZSBQQ1hIUl9EUklWRVJfVkVSU0lPTgkJMHgwMDA5MDUJLyogMC45LjUgKi8KLSNkZWZpbmUgUENYSFJfRFJJVkVSX1ZFUlNJT05fU1RSSU5HCSIwLjkuNSIJCS8qIDAuOS41ICovCisjZGVmaW5lIFBDWEhSX0RSSVZFUl9WRVJTSU9OCQkweDAwMDkwNgkvKiAwLjkuNiAqLworI2RlZmluZSBQQ1hIUl9EUklWRVJfVkVSU0lPTl9TVFJJTkcJIjAuOS42IgkJLyogMC45LjYgKi8KIAogCiAjZGVmaW5lIFBDWEhSX01BWF9DQVJEUwkJNgpAQCAtMTI0LDYgKzEyNCw3IEBACiAKIAl1bnNpZ25lZCBjaGFyIHhseF9jZmc7CQkvKiBjb3B5IG9mIFBDWEhSX1hMWF9DRkcgcmVnaXN0ZXIgKi8KIAl1bnNpZ25lZCBjaGFyIHhseF9zZWxtaWM7CS8qIGNvcHkgb2YgUENYSFJfWExYX1NFTE1JQyByZWdpc3RlciAqLworCXVuc2lnbmVkIGNoYXIgZHNwX3Jlc2V0OwkvKiBjb3B5IG9mIFBDWEhSX0RTUF9SRVNFVCByZWdpc3RlciAqLwogfTsKIAogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcGN4aHIvcGN4aHJfY29yZS5oIGIvc291bmQvcGNpL3BjeGhyL3BjeGhyX2NvcmUuaAppbmRleCBiYmJkNjZkLi5iZTAxNzM3IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvcGN4aHIvcGN4aHJfY29yZS5oCisrKyBiL3NvdW5kL3BjaS9wY3hoci9wY3hocl9jb3JlLmgKQEAgLTEsNyArMSw3IEBACiAvKgogICogRHJpdmVyIGZvciBEaWdpZ3JhbSBwY3hociBjb21wYXRpYmxlIHNvdW5kY2FyZHMKICAqCi0gKiBsb3cgbGV2ZWwgaW50ZXJmYWNlIHdpdGggaW50ZXJydXB0IGFucyBtZXNzYWdlIGhhbmRsaW5nCisgKiBsb3cgbGV2ZWwgaW50ZXJmYWNlIHdpdGggaW50ZXJydXB0IGFuZCBtZXNzYWdlIGhhbmRsaW5nCiAgKgogICogQ29weXJpZ2h0IChjKSAyMDA0IGJ5IERpZ2lncmFtIDxhbHNhQGRpZ2lncmFtLmNvbT4KICAqCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcGN4aHIvcGN4aHJfaHdkZXAuYyBiL3NvdW5kL3BjaS9wY3hoci9wY3hocl9od2RlcC5jCmluZGV4IDU5Mjc0M2EuLjE3Y2IxMjMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9wY3hoci9wY3hocl9od2RlcC5jCisrKyBiL3NvdW5kL3BjaS9wY3hoci9wY3hocl9od2RlcC5jCkBAIC00NzEsMTYgKzQ3MSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcGN4aHJfaHdkZXBfb3BlbihzdHJ1Y3Qgc25kX2h3ZGVwICpodywgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcGN4aHJfaHdkZXBfcmVsZWFzZShzdHJ1Y3Qgc25kX2h3ZGVwICpodywgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KIGludCBwY3hocl9zZXR1cF9maXJtd2FyZShzdHJ1Y3QgcGN4aHJfbWdyICptZ3IpCiB7CiAJaW50IGVycjsKQEAgLTQ5NSw4ICs0ODUsNiBAQAogCiAJaHctPmlmYWNlID0gU05EUlZfSFdERVBfSUZBQ0VfUENYSFI7CiAJaHctPnByaXZhdGVfZGF0YSA9IG1ncjsKLQlody0+b3BzLm9wZW4gPSBwY3hocl9od2RlcF9vcGVuOwotCWh3LT5vcHMucmVsZWFzZSA9IHBjeGhyX2h3ZGVwX3JlbGVhc2U7CiAJaHctPm9wcy5kc3Bfc3RhdHVzID0gcGN4aHJfaHdkZXBfZHNwX3N0YXR1czsKIAlody0+b3BzLmRzcF9sb2FkID0gcGN4aHJfaHdkZXBfZHNwX2xvYWQ7CiAJaHctPmV4Y2x1c2l2ZSA9IDE7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcGN4aHIvcGN4aHJfbWl4MjIuYyBiL3NvdW5kL3BjaS9wY3hoci9wY3hocl9taXgyMi5jCmluZGV4IGZmMDE5MTIuLjFjYjgyYzAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9wY3hoci9wY3hocl9taXgyMi5jCisrKyBiL3NvdW5kL3BjaS9wY3hoci9wY3hocl9taXgyMi5jCkBAIC01Myw2ICs1Myw4IEBACiAjZGVmaW5lIFBDWEhSX0RTUF9SRVNFVF9EU1AJMHgwMQogI2RlZmluZSBQQ1hIUl9EU1BfUkVTRVRfTVVURQkweDAyCiAjZGVmaW5lIFBDWEhSX0RTUF9SRVNFVF9DT0RFQwkweDA4CisjZGVmaW5lIFBDWEhSX0RTUF9SRVNFVF9HUE9fT0ZGU0VUCTUKKyNkZWZpbmUgUENYSFJfRFNQX1JFU0VUX0dQT19NQVNLCTB4NjAKIAogLyogdmFsdWVzIGZvciBQQ0hSX1hMWF9DRkcgcmVnaXN0ZXIgKi8KICNkZWZpbmUgUENYSFJfQ0ZHX1NZTkNEU1BfTUFTSwkJMHg4MApAQCAtODEsNiArODMsOCBAQAogLyogdmFsdWVzIGZvciBQQ0hSX1hMWF9TVEFUVVMgcmVnaXN0ZXIgLSBSRUFEICovCiAjZGVmaW5lIFBDWEhSX1NUQVRfU1JDX0xPQ0sJCTB4MDEKICNkZWZpbmUgUENYSFJfU1RBVF9MRVZFTF9JTgkJMHgwMgorI2RlZmluZSBQQ1hIUl9TVEFUX0dQSV9PRkZTRVQJCTIKKyNkZWZpbmUgUENYSFJfU1RBVF9HUElfTUFTSwkJMHgwQwogI2RlZmluZSBQQ1hIUl9TVEFUX01JQ19DQVBTCQkweDEwCiAvKiB2YWx1ZXMgZm9yIFBDSFJfWExYX1NUQVRVUyByZWdpc3RlciAtIFdSSVRFICovCiAjZGVmaW5lIFBDWEhSX1NUQVRfRlJFUV9TWU5DX01BU0sJMHgwMQpAQCAtMjkxLDEwICsyOTUsMTEgQEAKIAlQQ1hIUl9PVVRQQihtZ3IsIFBDWEhSX0RTUF9SRVNFVCwKIAkJICAgIFBDWEhSX0RTUF9SRVNFVF9EU1ApOwogCW1zbGVlcCg1KTsKLQlQQ1hIUl9PVVRQQihtZ3IsIFBDWEhSX0RTUF9SRVNFVCwKLQkJICAgIFBDWEhSX0RTUF9SRVNFVF9EU1AgIHwKLQkJICAgIFBDWEhSX0RTUF9SRVNFVF9NVVRFIHwKLQkJICAgIFBDWEhSX0RTUF9SRVNFVF9DT0RFQyk7CisJbWdyLT5kc3BfcmVzZXQgPSBQQ1hIUl9EU1BfUkVTRVRfRFNQICB8CisJCQkgUENYSFJfRFNQX1JFU0VUX01VVEUgfAorCQkJIFBDWEhSX0RTUF9SRVNFVF9DT0RFQzsKKwlQQ1hIUl9PVVRQQihtZ3IsIFBDWEhSX0RTUF9SRVNFVCwgbWdyLT5kc3BfcmVzZXQpOworCS8qIGhyMjIyX3dyaXRlX2dwbyhtZ3IsIDApOyBkb2VzIHRoZSBzYW1lICovCiAJbXNsZWVwKDUpOwogCiAJLyogY29uZmlnIEFLTSAqLwpAQCAtNDk2LDYgKzUwMSwzMyBAQAogfQogCiAKK2ludCBocjIyMl9yZWFkX2dwaW8oc3RydWN0IHBjeGhyX21nciAqbWdyLCBpbnQgaXNfZ3BpLCBpbnQgKnZhbHVlKQoreworCWlmIChpc19ncGkpIHsKKwkJdW5zaWduZWQgY2hhciByZWcgPSBQQ1hIUl9JTlBCKG1nciwgUENYSFJfWExYX1NUQVRVUyk7CisJCSp2YWx1ZSA9IChpbnQpKHJlZyAmIFBDWEhSX1NUQVRfR1BJX01BU0spID4+CisJCQkgICAgICBQQ1hIUl9TVEFUX0dQSV9PRkZTRVQ7CisJfSBlbHNlIHsKKwkJKnZhbHVlID0gKGludCkobWdyLT5kc3BfcmVzZXQgJiBQQ1hIUl9EU1BfUkVTRVRfR1BPX01BU0spID4+CisJCQkgUENYSFJfRFNQX1JFU0VUX0dQT19PRkZTRVQ7CisJfQorCXJldHVybiAwOworfQorCisKK2ludCBocjIyMl93cml0ZV9ncG8oc3RydWN0IHBjeGhyX21nciAqbWdyLCBpbnQgdmFsdWUpCit7CisJdW5zaWduZWQgY2hhciByZWcgPSBtZ3ItPmRzcF9yZXNldCAmIH5QQ1hIUl9EU1BfUkVTRVRfR1BPX01BU0s7CisKKwlyZWcgfD0gKHVuc2lnbmVkIGNoYXIpKHZhbHVlIDw8IFBDWEhSX0RTUF9SRVNFVF9HUE9fT0ZGU0VUKSAmCisJICAgICAgIFBDWEhSX0RTUF9SRVNFVF9HUE9fTUFTSzsKKworCVBDWEhSX09VVFBCKG1nciwgUENYSFJfRFNQX1JFU0VULCByZWcpOworCW1nci0+ZHNwX3Jlc2V0ID0gcmVnOworCXJldHVybiAwOworfQorCisKIGludCBocjIyMl91cGRhdGVfYW5hbG9nX2F1ZGlvX2xldmVsKHN0cnVjdCBzbmRfcGN4aHIgKmNoaXAsCiAJCQkJICAgIGludCBpc19jYXB0dXJlLCBpbnQgY2hhbm5lbCkKIHsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9wY3hoci9wY3hocl9taXgyMi5oIGIvc291bmQvcGNpL3BjeGhyL3BjeGhyX21peDIyLmgKaW5kZXggNmIzMThiMi4uNWEzN2EwMCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3BjeGhyL3BjeGhyX21peDIyLmgKKysrIGIvc291bmQvcGNpL3BjeGhyL3BjeGhyX21peDIyLmgKQEAgLTMyLDYgKzMyLDkgQEAKIAkJCSAgICAgZW51bSBwY3hocl9jbG9ja190eXBlIGNsb2NrX3R5cGUsCiAJCQkgICAgIGludCAqc2FtcGxlX3JhdGUpOwogCitpbnQgaHIyMjJfcmVhZF9ncGlvKHN0cnVjdCBwY3hocl9tZ3IgKm1nciwgaW50IGlzX2dwaSwgaW50ICp2YWx1ZSk7CitpbnQgaHIyMjJfd3JpdGVfZ3BvKHN0cnVjdCBwY3hocl9tZ3IgKm1nciwgaW50IHZhbHVlKTsKKwogI2RlZmluZSBIUjIyMl9MSU5FX1BMQVlCQUNLX0xFVkVMX01JTgkJMAkvKiAtMjUuNSBkQiAqLwogI2RlZmluZSBIUjIyMl9MSU5FX1BMQVlCQUNLX1pFUk9fTEVWRUwJCTUxCS8qIDAuMCBkQiAqLwogI2RlZmluZSBIUjIyMl9MSU5FX1BMQVlCQUNLX0xFVkVMX01BWAkJOTkJLyogKzI0LjAgZEIgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9wY3hoci9wY3hocl9taXhlci5jIGIvc291bmQvcGNpL3BjeGhyL3BjeGhyX21peGVyLmMKaW5kZXggMjQzNmUzNy4uZmVjMDQ5MyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3BjeGhyL3BjeGhyX21peGVyLmMKKysrIGIvc291bmQvcGNpL3BjeGhyL3BjeGhyX21peGVyLmMKQEAgLTc4OSwxMSArNzg5LDE1IEBACiAJaWYgKG1nci0+dXNlX2Nsb2NrX3R5cGUgIT0gdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSkgewogCQltdXRleF9sb2NrKCZtZ3ItPnNldHVwX211dGV4KTsKIAkJbWdyLT51c2VfY2xvY2tfdHlwZSA9IHVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF07Ci0JCWlmIChtZ3ItPnVzZV9jbG9ja190eXBlKQorCQlyYXRlID0gMDsKKwkJaWYgKG1nci0+dXNlX2Nsb2NrX3R5cGUgIT0gUENYSFJfQ0xPQ0tfVFlQRV9JTlRFUk5BTCkgewogCQkJcGN4aHJfZ2V0X2V4dGVybmFsX2Nsb2NrKG1nciwgbWdyLT51c2VfY2xvY2tfdHlwZSwKIAkJCQkJCSAmcmF0ZSk7Ci0JCWVsc2UKKwkJfSBlbHNlIHsKIAkJCXJhdGUgPSBtZ3ItPnNhbXBsZV9yYXRlOworCQkJaWYgKCFyYXRlKQorCQkJCXJhdGUgPSA0ODAwMDsKKwkJfQogCQlpZiAocmF0ZSkgewogCQkJcGN4aHJfc2V0X2Nsb2NrKG1nciwgcmF0ZSk7CiAJCQlpZiAobWdyLT5zYW1wbGVfcmF0ZSkKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9yaXB0aWRlL3JpcHRpZGUuYyBiL3NvdW5kL3BjaS9yaXB0aWRlL3JpcHRpZGUuYwppbmRleCAzY2FhY2ZiLi42ZjEwMzQ0IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvcmlwdGlkZS9yaXB0aWRlLmMKKysrIGIvc291bmQvcGNpL3JpcHRpZGUvcmlwdGlkZS5jCkBAIC0yMTAyLDkgKzIxMDIsOSBAQAogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAlpZiAoKGVyciA9IHNuZF9yaXB0aWRlX2NyZWF0ZShjYXJkLCBwY2ksICZjaGlwKSkgPCAwKSB7CiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CiAJCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcm1lMzIuYyBiL3NvdW5kL3BjaS9ybWUzMi5jCmluZGV4IGU3ZWYzYTEuLmQ3Yjk2NmUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9ybWUzMi5jCisrKyBiL3NvdW5kL3BjaS9ybWUzMi5jCkBAIC0xOTQxLDkgKzE5NDEsMTAgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JaWYgKChjYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAotCQkJCSBzaXplb2Yoc3RydWN0IHJtZTMyKSkpID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKKwkJCSAgICAgIHNpemVvZihzdHJ1Y3Qgcm1lMzIpLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAJY2FyZC0+cHJpdmF0ZV9mcmVlID0gc25kX3JtZTMyX2NhcmRfZnJlZTsKIAlybWUzMiA9IChzdHJ1Y3Qgcm1lMzIgKikgY2FyZC0+cHJpdmF0ZV9kYXRhOwogCXJtZTMyLT5jYXJkID0gY2FyZDsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9ybWU5Ni5jIGIvc291bmQvcGNpL3JtZTk2LmMKaW5kZXggM2ZkZDQ4OC4uNTVmYjFjMSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3JtZTk2LmMKKysrIGIvc291bmQvcGNpL3JtZTk2LmMKQEAgLTIzNDgsOSArMjM0OCwxMCBAQAogCQlkZXYrKzsKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQotCWlmICgoY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKLQkJCQkgc2l6ZW9mKHN0cnVjdCBybWU5NikpKSA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisJCQkgICAgICBzaXplb2Yoc3RydWN0IHJtZTk2KSwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCWNhcmQtPnByaXZhdGVfZnJlZSA9IHNuZF9ybWU5Nl9jYXJkX2ZyZWU7CiAJcm1lOTYgPSAoc3RydWN0IHJtZTk2ICopY2FyZC0+cHJpdmF0ZV9kYXRhOwkKIAlybWU5Ni0+Y2FyZCA9IGNhcmQ7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwLmMgYi9zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwLmMKaW5kZXggNDRkMGMxNS4uMzE0ZTczNSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3JtZTk2NTIvaGRzcC5jCisrKyBiL3NvdW5kL3BjaS9ybWU5NjUyL2hkc3AuYwpAQCAtMTEzLDcgKzExMyw3IEBACiAKIC8qIHRoZSBtZXRlcnMgYXJlIHJlZ3VsYXIgaS9vLW1hcHBlZCByZWdpc3RlcnMsIGJ1dCBvZmZzZXQKICAgIGNvbnNpZGVyYWJseSBmcm9tIHRoZSByZXN0LiB0aGUgcGVhayByZWdpc3RlcnMgYXJlIHJlc2V0Ci0gICB3aGVuIHJlYWQ7IHRoZSBsZWFzdC1zaWduaWZpY2FudCA0IGJpdHMgYXJlIGZ1bGwtc2NhbGUgY291bnRlcnM7IAorICAgd2hlbiByZWFkOyB0aGUgbGVhc3Qtc2lnbmlmaWNhbnQgNCBiaXRzIGFyZSBmdWxsLXNjYWxlIGNvdW50ZXJzOwogICAgdGhlIGFjdHVhbCBwZWFrIHZhbHVlIGlzIGluIHRoZSBtb3N0LXNpZ25pZmljYW50IDI0IGJpdHMuCiAqLwogCkBAIC0xMzEsNyArMTMxLDcgQEAKICAgIDI2KjMgdmFsdWVzIGFyZSByZWFkIGluIHNzIG1vZGUKICAgIDE0KjMgaW4gZHMgbW9kZSwgd2l0aCBubyBnYXAgYmV0d2VlbiB2YWx1ZXMKICovCi0jZGVmaW5lIEhEU1BfOTY1Ml9wZWFrQmFzZQk3MTY0CQorI2RlZmluZSBIRFNQXzk2NTJfcGVha0Jhc2UJNzE2NAogI2RlZmluZSBIRFNQXzk2NTJfcm1zQmFzZQk0MDk2CiAKIC8qIGMuZi4gdGhlIGhkc3BfOTYzMl9tZXRlcnNfdCBzdHJ1Y3QgKi8KQEAgLTE3MywxMiArMTczLDEyIEBACiAjZGVmaW5lIEhEU1BfU1BESUZFbXBoYXNpcyAgICAgICAgKDE8PDEwKSAvKiAwPW5vbmUsIDE9b24gKi8KICNkZWZpbmUgSERTUF9TUERJRk5vbkF1ZGlvICAgICAgICAoMTw8MTEpIC8qIDA9b2ZmLCAxPW9uICovCiAjZGVmaW5lIEhEU1BfU1BESUZPcHRpY2FsT3V0ICAgICAgKDE8PDEyKSAvKiAxPXVzZSAxc3QgQURBVCBjb25uZWN0b3IgZm9yIFNQRElGLCAwPWRvIG5vdCAqLwotI2RlZmluZSBIRFNQX1N5bmNSZWYyICAgICAgICAgICAgICgxPDwxMykgCi0jZGVmaW5lIEhEU1BfU1BESUZJbnB1dFNlbGVjdDAgICAgKDE8PDE0KSAKLSNkZWZpbmUgSERTUF9TUERJRklucHV0U2VsZWN0MSAgICAoMTw8MTUpIAotI2RlZmluZSBIRFNQX1N5bmNSZWYwICAgICAgICAgICAgICgxPDwxNikgCisjZGVmaW5lIEhEU1BfU3luY1JlZjIgICAgICAgICAgICAgKDE8PDEzKQorI2RlZmluZSBIRFNQX1NQRElGSW5wdXRTZWxlY3QwICAgICgxPDwxNCkKKyNkZWZpbmUgSERTUF9TUERJRklucHV0U2VsZWN0MSAgICAoMTw8MTUpCisjZGVmaW5lIEhEU1BfU3luY1JlZjAgICAgICAgICAgICAgKDE8PDE2KQogI2RlZmluZSBIRFNQX1N5bmNSZWYxICAgICAgICAgICAgICgxPDwxNykKLSNkZWZpbmUgSERTUF9BbmFsb2dFeHRlbnNpb25Cb2FyZCAoMTw8MTgpIC8qIEZvciBIOTYzMiBjYXJkcyAqLyAKKyNkZWZpbmUgSERTUF9BbmFsb2dFeHRlbnNpb25Cb2FyZCAoMTw8MTgpIC8qIEZvciBIOTYzMiBjYXJkcyAqLwogI2RlZmluZSBIRFNQX1hMUkJyZWFrb3V0Q2FibGUgICAgICgxPDwyMCkgLyogRm9yIEg5NjMyIGNhcmRzICovCiAjZGVmaW5lIEhEU1BfTWlkaTBJbnRlcnJ1cHRFbmFibGUgKDE8PDIyKQogI2RlZmluZSBIRFNQX01pZGkxSW50ZXJydXB0RW5hYmxlICgxPDwyMykKQEAgLTMxNCw3ICszMTQsNyBAQAogI2RlZmluZSBIRFNQX1RpbWVjb2RlU3luYyAgICAgICAoMTw8MjcpCiAjZGVmaW5lIEhEU1BfQUVCTyAgICAgICAgICAJKDE8PDI4KSAvKiBIOTYzMiBzcGVjaWZpYyBBbmFsb2cgRXh0ZW5zaW9uIEJvYXJkcyAqLwogI2RlZmluZSBIRFNQX0FFQkkJCSgxPDwyOSkgLyogMCA9IHByZXNlbnQsIDEgPSBhYnNlbnQgKi8KLSNkZWZpbmUgSERTUF9taWRpMElSUVBlbmRpbmcgICAgKDE8PDMwKSAKKyNkZWZpbmUgSERTUF9taWRpMElSUVBlbmRpbmcgICAgKDE8PDMwKQogI2RlZmluZSBIRFNQX21pZGkxSVJRUGVuZGluZyAgICAoMTw8MzEpCiAKICNkZWZpbmUgSERTUF9zcGRpZkZyZXF1ZW5jeU1hc2sgICAgKEhEU1Bfc3BkaWZGcmVxdWVuY3kwfEhEU1Bfc3BkaWZGcmVxdWVuY3kxfEhEU1Bfc3BkaWZGcmVxdWVuY3kyKQpAQCAtMzkxLDcgKzM5MSw3IEBACiAjZGVmaW5lIEhEU1BfQ0hBTk5FTF9CVUZGRVJfQllURVMgICAgKDQqSERTUF9DSEFOTkVMX0JVRkZFUl9TQU1QTEVTKQogCiAvKiB0aGUgc2l6ZSBvZiB0aGUgYXJlYSB3ZSBuZWVkIHRvIGFsbG9jYXRlIGZvciBETUEgdHJhbnNmZXJzLiB0aGUKLSAgIHNpemUgaXMgdGhlIHNhbWUgcmVnYXJkbGVzcyBvZiB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzIC0gdGhlIAorICAgc2l6ZSBpcyB0aGUgc2FtZSByZWdhcmRsZXNzIG9mIHRoZSBudW1iZXIgb2YgY2hhbm5lbHMgLSB0aGUKICAgIE11bHRpZmFjZSBzdGlsbCB1c2VzIHRoZSBzYW1lIG1lbW9yeSBhcmVhLgogCiAgICBOb3RlIHRoYXQgd2UgYWxsb2NhdGUgMSBtb3JlIGNoYW5uZWwgdGhhbiBpcyBhcHBhcmVudGx5IG5lZWRlZApAQCAtNDYwLDcgKzQ2MCw3IEBACiAJdW5zaWduZWQgY2hhcgkgICAgICBxc19pbl9jaGFubmVsczsJICAgICAvKiBxdWFkIHNwZWVkIG1vZGUgZm9yIEg5NjMyICovCiAJdW5zaWduZWQgY2hhciAgICAgICAgIGRzX2luX2NoYW5uZWxzOwogCXVuc2lnbmVkIGNoYXIgICAgICAgICBzc19pbl9jaGFubmVsczsJICAgIC8qIGRpZmZlcmVudCBmb3IgbXVsdGlmYWNlL2RpZ2lmYWNlICovCi0JdW5zaWduZWQgY2hhcgkgICAgICBxc19vdXRfY2hhbm5lbHM7CSAgICAKKwl1bnNpZ25lZCBjaGFyCSAgICAgIHFzX291dF9jaGFubmVsczsKIAl1bnNpZ25lZCBjaGFyICAgICAgICAgZHNfb3V0X2NoYW5uZWxzOwogCXVuc2lnbmVkIGNoYXIgICAgICAgICBzc19vdXRfY2hhbm5lbHM7CiAKQEAgLTUwMiw5ICs1MDIsOSBAQAogCiBzdGF0aWMgY2hhciBjaGFubmVsX21hcF9tZl9zc1tIRFNQX01BWF9DSEFOTkVMU10gPSB7IC8qIE11bHRpZmFjZSAqLwogCS8qIEFuYWxvZyAqLwotCTAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIAorCTAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsCiAJLyogQURBVCAyICovCi0JMTYsIDE3LCAxOCwgMTksIDIwLCAyMSwgMjIsIDIzLCAKKwkxNiwgMTcsIDE4LCAxOSwgMjAsIDIxLCAyMiwgMjMsCiAJLyogU1BESUYgKi8KIAkyNCwgMjUsCiAJLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xCkBAIC01MjUsMTEgKzUyNSwxMSBAQAogCS8qIFNQRElGICovCiAJOCwgOSwKIAkvKiBBbmFsb2cgKi8KLQkxMCwgMTEsIAorCTEwLCAxMSwKIAkvKiBBTzRTLTE5MiBhbmQgQUk0Uy0xOTIgZXh0ZW5zaW9uIGJvYXJkcyAqLwogCTEyLCAxMywgMTQsIDE1LAogCS8qIG90aGVycyBkb24ndCBleGlzdCAqLwotCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgCisJLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAogCS0xLCAtMQogfTsKIApAQCAtNTM5LDcgKzUzOSw3IEBACiAJLyogU1BESUYgKi8KIAk4LCA5LAogCS8qIEFuYWxvZyAqLwotCTEwLCAxMSwgCisJMTAsIDExLAogCS8qIEFPNFMtMTkyIGFuZCBBSTRTLTE5MiBleHRlbnNpb24gYm9hcmRzICovCiAJMTIsIDEzLCAxNCwgMTUsCiAJLyogb3RoZXJzIGRvbid0IGV4aXN0ICovCkBAIC01ODcsNyArNTg3LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfaGRzcF9pZHNbXSA9IHsKIAl7CiAJCS52ZW5kb3IgPSBQQ0lfVkVORE9SX0lEX1hJTElOWCwKLQkJLmRldmljZSA9IFBDSV9ERVZJQ0VfSURfWElMSU5YX0hBTU1FUkZBTExfRFNQLCAKKwkJLmRldmljZSA9IFBDSV9ERVZJQ0VfSURfWElMSU5YX0hBTU1FUkZBTExfRFNQLAogCQkuc3VidmVuZG9yID0gUENJX0FOWV9JRCwKIAkJLnN1YmRldmljZSA9IFBDSV9BTllfSUQsCiAJfSwgLyogUk1FIEhhbW1lcmZhbGwtRFNQICovCkBAIC02NTMsNyArNjUzLDYgQEAKIAogc3RhdGljIGludCBoZHNwX2NoZWNrX2Zvcl9pb2JveCAoc3RydWN0IGhkc3AgKmhkc3ApCiB7Ci0KIAlpZiAoaGRzcC0+aW9fdHlwZSA9PSBIOTY1MiB8fCBoZHNwLT5pb190eXBlID09IEg5NjMyKSByZXR1cm4gMDsKIAlpZiAoaGRzcF9yZWFkIChoZHNwLCBIRFNQX3N0YXR1c1JlZ2lzdGVyKSAmIEhEU1BfQ29uZmlnRXJyb3IpIHsKIAkJc25kX3ByaW50ayAoIkhhbW1lcmZhbGwtRFNQOiBubyBEaWdpZmFjZSBvciBNdWx0aWZhY2UgY29ubmVjdGVkIVxuIik7CkBAIC02NjEsNyArNjYwLDI5IEBACiAJCXJldHVybiAtRUlPOwogCX0KIAlyZXR1cm4gMDsKK30KIAorc3RhdGljIGludCBoZHNwX3dhaXRfZm9yX2lvYm94KHN0cnVjdCBoZHNwICpoZHNwLCB1bnNpZ25lZCBpbnQgbG9vcHMsCisJCQkgICAgICAgdW5zaWduZWQgaW50IGRlbGF5KQoreworCXVuc2lnbmVkIGludCBpOworCisJaWYgKGhkc3AtPmlvX3R5cGUgPT0gSDk2NTIgfHwgaGRzcC0+aW9fdHlwZSA9PSBIOTYzMikKKwkJcmV0dXJuIDA7CisKKwlmb3IgKGkgPSAwOyBpICE9IGxvb3BzOyArK2kpIHsKKwkJaWYgKGhkc3BfcmVhZChoZHNwLCBIRFNQX3N0YXR1c1JlZ2lzdGVyKSAmIEhEU1BfQ29uZmlnRXJyb3IpCisJCQltc2xlZXAoZGVsYXkpOworCQllbHNlIHsKKwkJCXNuZF9wcmludGQoIkhhbW1lcmZhbGwtRFNQOiBpb2JveCBmb3VuZCBhZnRlciAldW1zIVxuIiwKKwkJCQkgICBpICogZGVsYXkpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlzbmRfcHJpbnRrKCJIYW1tZXJmYWxsLURTUDogbm8gRGlnaWZhY2Ugb3IgTXVsdGlmYWNlIGNvbm5lY3RlZCFcbiIpOworCWhkc3AtPnN0YXRlICY9IH5IRFNQX0Zpcm13YXJlTG9hZGVkOworCXJldHVybiAtRUlPOwogfQogCiBzdGF0aWMgaW50IHNuZF9oZHNwX2xvYWRfZmlybXdhcmVfZnJvbV9jYWNoZShzdHJ1Y3QgaGRzcCAqaGRzcCkgewpAQCAtNjcwLDE5ICs2OTEsMTkgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKChoZHNwX3JlYWQgKGhkc3AsIEhEU1Bfc3RhdHVzUmVnaXN0ZXIpICYgSERTUF9EbGxFcnJvcikgIT0gMCkgewotCQkKKwogCQlzbmRfcHJpbnRrICgiSGFtbWVyZmFsbC1EU1A6IGxvYWRpbmcgZmlybXdhcmVcbiIpOwogCiAJCWhkc3Bfd3JpdGUgKGhkc3AsIEhEU1BfY29udHJvbDJSZWcsIEhEU1BfU19QUk9HUkFNKTsKIAkJaGRzcF93cml0ZSAoaGRzcCwgSERTUF9maWZvRGF0YSwgMCk7Ci0JCQorCiAJCWlmIChoZHNwX2ZpZm9fd2FpdCAoaGRzcCwgMCwgSERTUF9MT05HX1dBSVQpKSB7CiAJCQlzbmRfcHJpbnRrICgiSGFtbWVyZmFsbC1EU1A6IHRpbWVvdXQgd2FpdGluZyBmb3IgZG93bmxvYWQgcHJlcGFyYXRpb25cbiIpOwogCQkJcmV0dXJuIC1FSU87CiAJCX0KLQkJCisKIAkJaGRzcF93cml0ZSAoaGRzcCwgSERTUF9jb250cm9sMlJlZywgSERTUF9TX0xPQUQpOwotCQkKKwogCQlmb3IgKGkgPSAwOyBpIDwgMjQ0MTM7ICsraSkgewogCQkJaGRzcF93cml0ZShoZHNwLCBIRFNQX2ZpZm9EYXRhLCBoZHNwLT5maXJtd2FyZV9jYWNoZVtpXSk7CiAJCQlpZiAoaGRzcF9maWZvX3dhaXQgKGhkc3AsIDEyNywgSERTUF9MT05HX1dBSVQpKSB7CkBAIC02OTIsNyArNzEzLDcgQEAKIAkJfQogCiAJCXNzbGVlcCgzKTsKLQkJCisKIAkJaWYgKGhkc3BfZmlmb193YWl0IChoZHNwLCAwLCBIRFNQX0xPTkdfV0FJVCkpIHsKIAkJCXNuZF9wcmludGsgKCJIYW1tZXJmYWxsLURTUDogdGltZW91dCBhdCBlbmQgb2YgZmlybXdhcmUgbG9hZGluZ1xuIik7CiAJCSAgICAJcmV0dXJuIC1FSU87CkBAIC03MDUsMTUgKzcyNiwxNSBAQAogI2VuZGlmCiAJCWhkc3Bfd3JpdGUgKGhkc3AsIEhEU1BfY29udHJvbDJSZWcsIGhkc3AtPmNvbnRyb2wyX3JlZ2lzdGVyKTsKIAkJc25kX3ByaW50ayAoIkhhbW1lcmZhbGwtRFNQOiBmaW5pc2hlZCBmaXJtd2FyZSBsb2FkaW5nXG4iKTsKLQkJCisKIAl9CiAJaWYgKGhkc3AtPnN0YXRlICYgSERTUF9Jbml0aWFsaXphdGlvbkNvbXBsZXRlKSB7CiAJCXNuZF9wcmludGsoS0VSTl9JTkZPICJIYW1tZXJmYWxsLURTUDogZmlybXdhcmUgbG9hZGVkIGZyb20gY2FjaGUsIHJlc3RvcmluZyBkZWZhdWx0c1xuIik7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZoZHNwLT5sb2NrLCBmbGFncyk7CiAJCXNuZF9oZHNwX3NldF9kZWZhdWx0cyhoZHNwKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGRzcC0+bG9jaywgZmxhZ3MpOyAKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGRzcC0+bG9jaywgZmxhZ3MpOwogCX0KLQkKKwogCWhkc3AtPnN0YXRlIHw9IEhEU1BfRmlybXdhcmVMb2FkZWQ7CiAKIAlyZXR1cm4gMDsKQEAgLTcyMiw3ICs3NDMsNyBAQAogc3RhdGljIGludCBoZHNwX2dldF9pb2JveF92ZXJzaW9uIChzdHJ1Y3QgaGRzcCAqaGRzcCkKIHsKIAlpZiAoKGhkc3BfcmVhZCAoaGRzcCwgSERTUF9zdGF0dXNSZWdpc3RlcikgJiBIRFNQX0RsbEVycm9yKSAhPSAwKSB7Ci0JCisKIAkJaGRzcF93cml0ZSAoaGRzcCwgSERTUF9jb250cm9sMlJlZywgSERTUF9QUk9HUkFNKTsKIAkJaGRzcF93cml0ZSAoaGRzcCwgSERTUF9maWZvRGF0YSwgMCk7CiAJCWlmIChoZHNwX2ZpZm9fd2FpdCAoaGRzcCwgMCwgSERTUF9TSE9SVF9XQUlUKSA8IDApCkBAIC03MzgsNyArNzU5LDcgQEAKIAkJCWhkc3BfZmlmb193YWl0IChoZHNwLCAwLCBIRFNQX1NIT1JUX1dBSVQpOwogCQl9IGVsc2UgewogCQkJaGRzcC0+aW9fdHlwZSA9IERpZ2lmYWNlOwotCQl9IAorCQl9CiAJfSBlbHNlIHsKIAkJLyogZmlybXdhcmUgd2FzIGFscmVhZHkgbG9hZGVkLCBnZXQgaW9ib3ggdHlwZSAqLwogCQlpZiAoaGRzcF9yZWFkKGhkc3AsIEhEU1Bfc3RhdHVzMlJlZ2lzdGVyKSAmIEhEU1BfdmVyc2lvbjEpCkBAIC03ODYsMTMgKzgwNywxMyBAQAogCiAKIHN0YXRpYyBpbnQgaGRzcF9maWZvX3dhaXQoc3RydWN0IGhkc3AgKmhkc3AsIGludCBjb3VudCwgaW50IHRpbWVvdXQpCi17ICAgIAorewogCWludCBpOwogCiAJLyogdGhlIGZpZm9TdGF0dXMgcmVnaXN0ZXJzIHJlcG9ydHMgb24gaG93IG1hbnkgd29yZHMKIAkgICBhcmUgYXZhaWxhYmxlIGluIHRoZSBjb21tYW5kIEZJRk8uCiAJKi8KLQkKKwogCWZvciAoaSA9IDA7IGkgPCB0aW1lb3V0OyBpKyspIHsKIAogCQlpZiAoKGludCkoaGRzcF9yZWFkIChoZHNwLCBIRFNQX2ZpZm9TdGF0dXMpICYgMHhmZikgPD0gY291bnQpCkBAIC04MjQsMTEgKzg0NSwxMSBAQAogCiAJaWYgKGFkZHIgPj0gSERTUF9NQVRSSVhfTUlYRVJfU0laRSkKIAkJcmV0dXJuIC0xOwotCQorCiAJaWYgKGhkc3AtPmlvX3R5cGUgPT0gSDk2NTIgfHwgaGRzcC0+aW9fdHlwZSA9PSBIOTYzMikgewogCiAJCS8qIGZyb20gbWFydGluIGJqb3Juc2VuOgotCQkgICAKKwogCQkgICAiWW91IGNhbiBvbmx5IHdyaXRlIGR3b3JkcyB0byB0aGUKIAkJICAgbWl4ZXIgbWVtb3J5IHdoaWNoIGNvbnRhaW4gdHdvCiAJCSAgIG1peGVyIHZhbHVlcyBpbiB0aGUgbG93IGFuZCBoaWdoCkBAIC04NDcsNyArODY4LDcgQEAKIAogCQloZHNwLT5taXhlcl9tYXRyaXhbYWRkcl0gPSBkYXRhOwogCi0JCQorCiAJCS8qIGBhZGRyJyBhZGRyZXNzZXMgYSAxNi1iaXQgd2lkZSBhZGRyZXNzLCBidXQKIAkJICAgdGhlIGFkZHJlc3Mgc3BhY2UgYWNjZXNzZWQgdmlhIGhkc3Bfd3JpdGUKIAkJICAgdXNlcyBieXRlIG9mZnNldHMuIHB1dCBhbm90aGVyIHdheSwgYWRkcgpAQCAtODU2LDE3ICs4NzcsMTcgQEAKIAkJICAgdG8gYWNjZXNzIDAgdG8gMjcwMyAuLi4KIAkJKi8KIAkJYWQgPSBhZGRyLzI7Ci0JCi0JCWhkc3Bfd3JpdGUgKGhkc3AsIDQwOTYgKyAoYWQqNCksIAotCQkJICAgIChoZHNwLT5taXhlcl9tYXRyaXhbKGFkZHImMHg3ZmUpKzFdIDw8IDE2KSArIAorCisJCWhkc3Bfd3JpdGUgKGhkc3AsIDQwOTYgKyAoYWQqNCksCisJCQkgICAgKGhkc3AtPm1peGVyX21hdHJpeFsoYWRkciYweDdmZSkrMV0gPDwgMTYpICsKIAkJCSAgICBoZHNwLT5taXhlcl9tYXRyaXhbYWRkciYweDdmZV0pOwotCQkKKwogCQlyZXR1cm4gMDsKIAogCX0gZWxzZSB7CiAKIAkJYWQgPSAoYWRkciA8PCAxNikgKyBkYXRhOwotCQkKKwogCQlpZiAoaGRzcF9maWZvX3dhaXQoaGRzcCwgMTI3LCBIRFNQX0xPTkdfV0FJVCkpCiAJCQlyZXR1cm4gLTE7CiAKQEAgLTkwMiw3ICs5MjMsNyBAQAogCiAJaWYgKHN0YXR1cyAmIEhEU1BfU1BESUZFcnJvckZsYWcpCiAJCXJldHVybiAwOwotCQorCiAJc3dpdGNoIChyYXRlX2JpdHMpIHsKIAljYXNlIEhEU1Bfc3BkaWZGcmVxdWVuY3kzMktIejogcmV0dXJuIDMyMDAwOwogCWNhc2UgSERTUF9zcGRpZkZyZXF1ZW5jeTQ0XzFLSHo6IHJldHVybiA0NDEwMDsKQEAgLTkxMCwxMyArOTMxLDEzIEBACiAJY2FzZSBIRFNQX3NwZGlmRnJlcXVlbmN5NjRLSHo6IHJldHVybiA2NDAwMDsKIAljYXNlIEhEU1Bfc3BkaWZGcmVxdWVuY3k4OF8yS0h6OiByZXR1cm4gODgyMDA7CiAJY2FzZSBIRFNQX3NwZGlmRnJlcXVlbmN5OTZLSHo6IHJldHVybiA5NjAwMDsKLQljYXNlIEhEU1Bfc3BkaWZGcmVxdWVuY3kxMjhLSHo6IAorCWNhc2UgSERTUF9zcGRpZkZyZXF1ZW5jeTEyOEtIejoKIAkJaWYgKGhkc3AtPmlvX3R5cGUgPT0gSDk2MzIpIHJldHVybiAxMjgwMDA7CiAJCWJyZWFrOwotCWNhc2UgSERTUF9zcGRpZkZyZXF1ZW5jeTE3Nl80S0h6OiAKKwljYXNlIEhEU1Bfc3BkaWZGcmVxdWVuY3kxNzZfNEtIejoKIAkJaWYgKGhkc3AtPmlvX3R5cGUgPT0gSDk2MzIpIHJldHVybiAxNzY0MDA7CiAJCWJyZWFrOwotCWNhc2UgSERTUF9zcGRpZkZyZXF1ZW5jeTE5MktIejogCisJY2FzZSBIRFNQX3NwZGlmRnJlcXVlbmN5MTkyS0h6OgogCQlpZiAoaGRzcC0+aW9fdHlwZSA9PSBIOTYzMikgcmV0dXJuIDE5MjAwMDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTEwMjcsNyArMTA0OCw3IEBACiB7CiAJdTY0IG47CiAJdTMyIHI7Ci0JCisKIAlpZiAocmF0ZSA+PSAxMTIwMDApCiAJCXJhdGUgLz0gNDsKIAllbHNlIGlmIChyYXRlID49IDU2MDAwKQpAQCAtMTA1MywzNSArMTA3NCwzNSBAQAogCSAgIHRoZXJlIGlzIG5vIG5lZWQgZm9yIGl0IChlLmcuIGR1cmluZyBtb2R1bGUKIAkgICBpbml0aWFsaXphdGlvbikuCiAJKi8KLQkKLQlpZiAoIShoZHNwLT5jb250cm9sX3JlZ2lzdGVyICYgSERTUF9DbG9ja01vZGVNYXN0ZXIpKSB7CQorCisJaWYgKCEoaGRzcC0+Y29udHJvbF9yZWdpc3RlciAmIEhEU1BfQ2xvY2tNb2RlTWFzdGVyKSkgewogCQlpZiAoY2FsbGVkX2ludGVybmFsbHkpIHsKIAkJCS8qIHJlcXVlc3QgZnJvbSBjdGwgb3IgY2FyZCBpbml0aWFsaXphdGlvbiAqLwogCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiSGFtbWVyZmFsbC1EU1A6IGRldmljZSBpcyBub3QgcnVubmluZyBhcyBhIGNsb2NrIG1hc3RlcjogY2Fubm90IHNldCBzYW1wbGUgcmF0ZS5cbiIpOwogCQkJcmV0dXJuIC0xOwotCQl9IGVsc2UgewkJCisJCX0gZWxzZSB7CiAJCQkvKiBod19wYXJhbSByZXF1ZXN0IHdoaWxlIGluIEF1dG9TeW5jIG1vZGUgKi8KIAkJCWludCBleHRlcm5hbF9mcmVxID0gaGRzcF9leHRlcm5hbF9zYW1wbGVfcmF0ZShoZHNwKTsKIAkJCWludCBzcGRpZl9mcmVxID0gaGRzcF9zcGRpZl9zYW1wbGVfcmF0ZShoZHNwKTsKLQkJCisKIAkJCWlmICgoc3BkaWZfZnJlcSA9PSBleHRlcm5hbF9mcmVxKjIpICYmIChoZHNwX2F1dG9zeW5jX3JlZihoZHNwKSA+PSBIRFNQX0FVVE9TWU5DX0ZST01fQURBVDEpKQogCQkJCXNuZF9wcmludGsoS0VSTl9JTkZPICJIYW1tZXJmYWxsLURTUDogRGV0ZWN0ZWQgQURBVCBpbiBkb3VibGUgc3BlZWQgbW9kZVxuIik7CiAJCQllbHNlIGlmIChoZHNwLT5pb190eXBlID09IEg5NjMyICYmIChzcGRpZl9mcmVxID09IGV4dGVybmFsX2ZyZXEqNCkgJiYgKGhkc3BfYXV0b3N5bmNfcmVmKGhkc3ApID49IEhEU1BfQVVUT1NZTkNfRlJPTV9BREFUMSkpCi0JCQkJc25kX3ByaW50ayhLRVJOX0lORk8gIkhhbW1lcmZhbGwtRFNQOiBEZXRlY3RlZCBBREFUIGluIHF1YWQgc3BlZWQgbW9kZVxuIik7CQkJCisJCQkJc25kX3ByaW50ayhLRVJOX0lORk8gIkhhbW1lcmZhbGwtRFNQOiBEZXRlY3RlZCBBREFUIGluIHF1YWQgc3BlZWQgbW9kZVxuIik7CiAJCQllbHNlIGlmIChyYXRlICE9IGV4dGVybmFsX2ZyZXEpIHsKIAkJCQlzbmRfcHJpbnRrKEtFUk5fSU5GTyAiSGFtbWVyZmFsbC1EU1A6IE5vIEF1dG9TeW5jIHNvdXJjZSBmb3IgcmVxdWVzdGVkIHJhdGVcbiIpOwogCQkJCXJldHVybiAtMTsKLQkJCX0JCQotCQl9CQorCQkJfQorCQl9CiAJfQogCiAJY3VycmVudF9yYXRlID0gaGRzcC0+c3lzdGVtX3NhbXBsZV9yYXRlOwogCiAJLyogQ2hhbmdpbmcgZnJvbSBhICJzaW5nbGUgc3BlZWQiIHRvIGEgImRvdWJsZSBzcGVlZCIgcmF0ZSBpcwogCSAgIG5vdCBhbGxvd2VkIGlmIGFueSBzdWJzdHJlYW1zIGFyZSBvcGVuLiBUaGlzIGlzIGJlY2F1c2UKLQkgICBzdWNoIGEgY2hhbmdlIGNhdXNlcyBhIHNoaWZ0IGluIHRoZSBsb2NhdGlvbiBvZiAKKwkgICBzdWNoIGEgY2hhbmdlIGNhdXNlcyBhIHNoaWZ0IGluIHRoZSBsb2NhdGlvbiBvZgogCSAgIHRoZSBETUEgYnVmZmVycyBhbmQgYSByZWR1Y3Rpb24gaW4gdGhlIG51bWJlciBvZiBhdmFpbGFibGUKLQkgICBidWZmZXJzLiAKKwkgICBidWZmZXJzLgogCiAJICAgTm90ZSB0aGF0IGEgc2ltaWxhciBidXQgZXNzZW50aWFsbHkgaW5zb2x1YmxlIHByb2JsZW0KIAkgICBleGlzdHMgZm9yIGV4dGVybmFsbHktZHJpdmVuIHJhdGUgY2hhbmdlcy4gQWxsIHdlIGNhbiBkbwpAQCAtMTA4OSw3ICsxMTEwLDcgQEAKIAogCWlmIChyYXRlID4gOTYwMDAgJiYgaGRzcC0+aW9fdHlwZSAhPSBIOTYzMikKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JCisKIAlzd2l0Y2ggKHJhdGUpIHsKIAljYXNlIDMyMDAwOgogCQlpZiAoY3VycmVudF9yYXRlID4gNDgwMDApCkBAIC0xMTc5LDcgKzEyMDAsNyBAQAogCQkJYnJlYWs7CiAJCX0KIAl9Ci0JCisKIAloZHNwLT5zeXN0ZW1fc2FtcGxlX3JhdGUgPSByYXRlOwogCiAJcmV0dXJuIDA7CkBAIC0xMjQ1LDE2ICsxMjY2LDE2IEBACiAJdW5zaWduZWQgY2hhciBidWZbMTI4XTsKIAogCS8qIE91dHB1dCBpcyBub3QgaW50ZXJydXB0IGRyaXZlbiAqLwotCQkKKwogCXNwaW5fbG9ja19pcnFzYXZlICgmaG1pZGktPmxvY2ssIGZsYWdzKTsKIAlpZiAoaG1pZGktPm91dHB1dCkgewogCQlpZiAoIXNuZF9yYXdtaWRpX3RyYW5zbWl0X2VtcHR5IChobWlkaS0+b3V0cHV0KSkgewogCQkJaWYgKChuX3BlbmRpbmcgPSBzbmRfaGRzcF9taWRpX291dHB1dF9wb3NzaWJsZSAoaG1pZGktPmhkc3AsIGhtaWRpLT5pZCkpID4gMCkgewogCQkJCWlmIChuX3BlbmRpbmcgPiAoaW50KXNpemVvZiAoYnVmKSkKIAkJCQkJbl9wZW5kaW5nID0gc2l6ZW9mIChidWYpOwotCQkJCQorCiAJCQkJaWYgKCh0b193cml0ZSA9IHNuZF9yYXdtaWRpX3RyYW5zbWl0IChobWlkaS0+b3V0cHV0LCBidWYsIG5fcGVuZGluZykpID4gMCkgewotCQkJCQlmb3IgKGkgPSAwOyBpIDwgdG9fd3JpdGU7ICsraSkgCisJCQkJCWZvciAoaSA9IDA7IGkgPCB0b193cml0ZTsgKytpKQogCQkJCQkJc25kX2hkc3BfbWlkaV93cml0ZV9ieXRlIChobWlkaS0+aGRzcCwgaG1pZGktPmlkLCBidWZbaV0pOwogCQkJCX0KIAkJCX0KQEAgLTEzMjUsMTQgKzEzNDYsMTQgQEAKIHsKIAlzdHJ1Y3QgaGRzcF9taWRpICpobWlkaSA9IChzdHJ1Y3QgaGRzcF9taWRpICopIGRhdGE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQkKKwogCXNuZF9oZHNwX21pZGlfb3V0cHV0X3dyaXRlKGhtaWRpKTsKIAlzcGluX2xvY2tfaXJxc2F2ZSAoJmhtaWRpLT5sb2NrLCBmbGFncyk7CiAKIAkvKiB0aGlzIGRvZXMgbm90IGJ1bXAgaG1pZGktPmlzdGltZXIsIGJlY2F1c2UgdGhlCiAJICAga2VybmVsIGF1dG9tYXRpY2FsbHkgcmVtb3ZlZCB0aGUgdGltZXIgd2hlbiBpdAogCSAgIGV4cGlyZWQsIGFuZCB3ZSBhcmUgbm93IGFkZGluZyBpdCBiYWNrLCB0aHVzCi0JICAgbGVhdmluZyBpc3RpbWVyIHdoZXJldmVyIGl0IHdhcyBzZXQgYmVmb3JlLiAgCisJICAgbGVhdmluZyBpc3RpbWVyIHdoZXJldmVyIGl0IHdhcyBzZXQgYmVmb3JlLgogCSovCiAKIAlpZiAoaG1pZGktPmlzdGltZXIpIHsKQEAgLTE1MDEsNyArMTUyMiw3IEBACiBzdGF0aWMgaW50IHNuZF9oZHNwX2NvbnRyb2xfc3BkaWZfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQkKKwogCXNuZF9oZHNwX2NvbnZlcnRfdG9fYWVzKCZ1Y29udHJvbC0+dmFsdWUuaWVjOTU4LCBoZHNwLT5jcmVnX3NwZGlmKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTE1MTEsNyArMTUzMiw3IEBACiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJaW50IGNoYW5nZTsKIAl1MzIgdmFsOwotCQorCiAJdmFsID0gc25kX2hkc3BfY29udmVydF9mcm9tX2FlcygmdWNvbnRyb2wtPnZhbHVlLmllYzk1OCk7CiAJc3Bpbl9sb2NrX2lycSgmaGRzcC0+bG9jayk7CiAJY2hhbmdlID0gdmFsICE9IGhkc3AtPmNyZWdfc3BkaWY7CkBAIC0xNTMwLDcgKzE1NTEsNyBAQAogc3RhdGljIGludCBzbmRfaGRzcF9jb250cm9sX3NwZGlmX3N0cmVhbV9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCQorCiAJc25kX2hkc3BfY29udmVydF90b19hZXMoJnVjb250cm9sLT52YWx1ZS5pZWM5NTgsIGhkc3AtPmNyZWdfc3BkaWZfc3RyZWFtKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTE1NDAsNyArMTU2MSw3IEBACiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJaW50IGNoYW5nZTsKIAl1MzIgdmFsOwotCQorCiAJdmFsID0gc25kX2hkc3BfY29udmVydF9mcm9tX2FlcygmdWNvbnRyb2wtPnZhbHVlLmllYzk1OCk7CiAJc3Bpbl9sb2NrX2lycSgmaGRzcC0+bG9jayk7CiAJY2hhbmdlID0gdmFsICE9IGhkc3AtPmNyZWdfc3BkaWZfc3RyZWFtOwpAQCAtMTYwMiw3ICsxNjIzLDcgQEAKIHN0YXRpYyBpbnQgc25kX2hkc3BfZ2V0X3NwZGlmX2luKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQkKKwogCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSBoZHNwX3NwZGlmX2luKGhkc3ApOwogCXJldHVybiAwOwogfQpAQCAtMTYxMiw3ICsxNjMzLDcgQEAKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAlpbnQgY2hhbmdlOwogCXVuc2lnbmVkIGludCB2YWw7Ci0JCisKIAlpZiAoIXNuZF9oZHNwX3VzZV9pc19leGNsdXNpdmUoaGRzcCkpCiAJCXJldHVybiAtRUJVU1k7CiAJdmFsID0gdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSAlICgoaGRzcC0+aW9fdHlwZSA9PSBIOTYzMikgPyA0IDogMyk7CkBAIC0xNjQ5LDcgKzE2NzAsNyBAQAogc3RhdGljIGludCBzbmRfaGRzcF9nZXRfc3BkaWZfb3V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQkKKwogCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gaGRzcF9zcGRpZl9vdXQoaGRzcCk7CiAJcmV0dXJuIDA7CiB9CkBAIC0xNjU5LDcgKzE2ODAsNyBAQAogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCWludCBjaGFuZ2U7CiAJdW5zaWduZWQgaW50IHZhbDsKLQkKKwogCWlmICghc25kX2hkc3BfdXNlX2lzX2V4Y2x1c2l2ZShoZHNwKSkKIAkJcmV0dXJuIC1FQlVTWTsKIAl2YWwgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSAmIDE7CkBAIC0xNjkzLDcgKzE3MTQsNyBAQAogc3RhdGljIGludCBzbmRfaGRzcF9nZXRfc3BkaWZfcHJvZmVzc2lvbmFsKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQkKKwogCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gaGRzcF9zcGRpZl9wcm9mZXNzaW9uYWwoaGRzcCk7CiAJcmV0dXJuIDA7CiB9CkBAIC0xNzAzLDcgKzE3MjQsNyBAQAogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCWludCBjaGFuZ2U7CiAJdW5zaWduZWQgaW50IHZhbDsKLQkKKwogCWlmICghc25kX2hkc3BfdXNlX2lzX2V4Y2x1c2l2ZShoZHNwKSkKIAkJcmV0dXJuIC1FQlVTWTsKIAl2YWwgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSAmIDE7CkBAIC0xNzM3LDcgKzE3NTgsNyBAQAogc3RhdGljIGludCBzbmRfaGRzcF9nZXRfc3BkaWZfZW1waGFzaXMoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCQorCiAJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBoZHNwX3NwZGlmX2VtcGhhc2lzKGhkc3ApOwogCXJldHVybiAwOwogfQpAQCAtMTc0Nyw3ICsxNzY4LDcgQEAKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAlpbnQgY2hhbmdlOwogCXVuc2lnbmVkIGludCB2YWw7Ci0JCisKIAlpZiAoIXNuZF9oZHNwX3VzZV9pc19leGNsdXNpdmUoaGRzcCkpCiAJCXJldHVybiAtRUJVU1k7CiAJdmFsID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gJiAxOwpAQCAtMTc4MSw3ICsxODAyLDcgQEAKIHN0YXRpYyBpbnQgc25kX2hkc3BfZ2V0X3NwZGlmX25vbmF1ZGlvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQkKKwogCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gaGRzcF9zcGRpZl9ub25hdWRpbyhoZHNwKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTE3OTEsNyArMTgxMiw3IEBACiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJaW50IGNoYW5nZTsKIAl1bnNpZ25lZCBpbnQgdmFsOwotCQorCiAJaWYgKCFzbmRfaGRzcF91c2VfaXNfZXhjbHVzaXZlKGhkc3ApKQogCQlyZXR1cm4gLUVCVVNZOwogCXZhbCA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdICYgMTsKQEAgLTE4MjgsNyArMTg0OSw3IEBACiBzdGF0aWMgaW50IHNuZF9oZHNwX2dldF9zcGRpZl9zYW1wbGVfcmF0ZShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0JCisKIAlzd2l0Y2ggKGhkc3Bfc3BkaWZfc2FtcGxlX3JhdGUoaGRzcCkpIHsKIAljYXNlIDMyMDAwOgogCQl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gMDsKQEAgLTE4NTgsNyArMTg3OSw3IEBACiAJCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSA5OwogCQlicmVhazsKIAlkZWZhdWx0OgotCQl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gNjsJCQorCQl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gNjsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0xODgyLDcgKzE5MDMsNyBAQAogc3RhdGljIGludCBzbmRfaGRzcF9nZXRfc3lzdGVtX3NhbXBsZV9yYXRlKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQkKKwogCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSBoZHNwLT5zeXN0ZW1fc2FtcGxlX3JhdGU7CiAJcmV0dXJuIDA7CiB9CkBAIC0xODk5LDcgKzE5MjAsNyBAQAogc3RhdGljIGludCBzbmRfaGRzcF9pbmZvX2F1dG9zeW5jX3NhbXBsZV9yYXRlKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQogewogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCXN0YXRpYyBjaGFyICp0ZXh0c1tdID0geyIzMjAwMCIsICI0NDEwMCIsICI0ODAwMCIsICI2NDAwMCIsICI4ODIwMCIsICI5NjAwMCIsICJOb25lIiwgIjEyODAwMCIsICIxNzY0MDAiLCAiMTkyMDAwIn07CQorCXN0YXRpYyBjaGFyICp0ZXh0c1tdID0geyIzMjAwMCIsICI0NDEwMCIsICI0ODAwMCIsICI2NDAwMCIsICI4ODIwMCIsICI5NjAwMCIsICJOb25lIiwgIjEyODAwMCIsICIxNzY0MDAiLCAiMTkyMDAwIn07CiAJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0VOVU1FUkFURUQ7CiAJdWluZm8tPmNvdW50ID0gMTsKIAl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyA9IChoZHNwLT5pb190eXBlID09IEg5NjMyKSA/IDEwIDogNyA7CkBAIC0xOTEyLDcgKzE5MzMsNyBAQAogc3RhdGljIGludCBzbmRfaGRzcF9nZXRfYXV0b3N5bmNfc2FtcGxlX3JhdGUoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCQorCiAJc3dpdGNoIChoZHNwX2V4dGVybmFsX3NhbXBsZV9yYXRlKGhkc3ApKSB7CiAJY2FzZSAzMjAwMDoKIAkJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IDA7CkBAIC0xOTQwLDkgKzE5NjEsOSBAQAogCQlicmVhazsKIAljYXNlIDE5MjAwMDoKIAkJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IDk7Ci0JCWJyZWFrOwkKKwkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IDY7CQkKKwkJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IDY7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMTk2OCw3ICsxOTg5LDcgQEAKIHN0YXRpYyBpbnQgc25kX2hkc3BfaW5mb19zeXN0ZW1fY2xvY2tfbW9kZShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKIHsKIAlzdGF0aWMgY2hhciAqdGV4dHNbXSA9IHsiTWFzdGVyIiwgIlNsYXZlIiB9OwotCQorCiAJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0VOVU1FUkFURUQ7CiAJdWluZm8tPmNvdW50ID0gMTsKIAl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyA9IDI7CkBAIC0xOTgxLDcgKzIwMDIsNyBAQAogc3RhdGljIGludCBzbmRfaGRzcF9nZXRfc3lzdGVtX2Nsb2NrX21vZGUoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCQorCiAJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IGhkc3Bfc3lzdGVtX2Nsb2NrX21vZGUoaGRzcCk7CiAJcmV0dXJuIDA7CiB9CkBAIC0yMDE4LDcgKzIwMzksNyBAQAogCQljYXNlIDE5MjAwMDoKIAkJCXJldHVybiA5OwogCQlkZWZhdWx0OgotCQkJcmV0dXJuIDM7CQorCQkJcmV0dXJuIDM7CiAJCX0KIAl9IGVsc2UgewogCQlyZXR1cm4gMDsKQEAgLTIwMzIsNyArMjA1Myw3IEBACiAJY2FzZSBIRFNQX0NMT0NLX1NPVVJDRV9BVVRPU1lOQzoKIAkJaWYgKGhkc3BfZXh0ZXJuYWxfc2FtcGxlX3JhdGUoaGRzcCkgIT0gMCkgewogCQkgICAgaWYgKCFoZHNwX3NldF9yYXRlKGhkc3AsIGhkc3BfZXh0ZXJuYWxfc2FtcGxlX3JhdGUoaGRzcCksIDEpKSB7Ci0JCQloZHNwLT5jb250cm9sX3JlZ2lzdGVyICY9IH5IRFNQX0Nsb2NrTW9kZU1hc3RlcjsJCQorCQkJaGRzcC0+Y29udHJvbF9yZWdpc3RlciAmPSB+SERTUF9DbG9ja01vZGVNYXN0ZXI7CiAJCQloZHNwX3dyaXRlKGhkc3AsIEhEU1BfY29udHJvbFJlZ2lzdGVyLCBoZHNwLT5jb250cm9sX3JlZ2lzdGVyKTsKIAkJCXJldHVybiAwOwogCQkgICAgfQpAQCAtMjA0Myw3ICsyMDY0LDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBIRFNQX0NMT0NLX1NPVVJDRV9JTlRFUk5BTF80NF8xS0haOgogCQlyYXRlID0gNDQxMDA7Ci0JCWJyZWFrOwkgICAgCisJCWJyZWFrOwogCWNhc2UgSERTUF9DTE9DS19TT1VSQ0VfSU5URVJOQUxfNDhLSFo6CiAJCXJhdGUgPSA0ODAwMDsKIAkJYnJlYWs7CkBAIC0yMDc4LDEzICsyMDk5LDEzIEBACiB7CiAJc3RhdGljIGNoYXIgKnRleHRzW10gPSB7IkF1dG9TeW5jIiwgIkludGVybmFsIDMyLjAga0h6IiwgIkludGVybmFsIDQ0LjEga0h6IiwgIkludGVybmFsIDQ4LjAga0h6IiwgIkludGVybmFsIDY0LjAga0h6IiwgIkludGVybmFsIDg4LjIga0h6IiwgIkludGVybmFsIDk2LjAga0h6IiwgIkludGVybmFsIDEyOCBrSHoiLCAiSW50ZXJuYWwgMTc2LjQga0h6IiwgIkludGVybmFsIDE5Mi4wIEtIeiIgfTsKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQkKKwogCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9FTlVNRVJBVEVEOwogCXVpbmZvLT5jb3VudCA9IDE7CiAJaWYgKGhkc3AtPmlvX3R5cGUgPT0gSDk2MzIpCiAJICAgIHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zID0gMTA7CiAJZWxzZQotCSAgICB1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyA9IDc7CQorCSAgICB1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyA9IDc7CiAJaWYgKHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW0gPj0gdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMpCiAJCXVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW0gPSB1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyAtIDE7CiAJc3RyY3B5KHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLm5hbWUsIHRleHRzW3VpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1dKTsKQEAgLTIwOTQsNyArMjExNSw3IEBACiBzdGF0aWMgaW50IHNuZF9oZHNwX2dldF9jbG9ja19zb3VyY2Uoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCQorCiAJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IGhkc3BfY2xvY2tfc291cmNlKGhkc3ApOwogCXJldHVybiAwOwogfQpAQCAtMjEwNCw3ICsyMTI1LDcgQEAKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAlpbnQgY2hhbmdlOwogCWludCB2YWw7Ci0JCisKIAlpZiAoIXNuZF9oZHNwX3VzZV9pc19leGNsdXNpdmUoaGRzcCkpCiAJCXJldHVybiAtRUJVU1k7CiAJdmFsID0gdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXTsKQEAgLTIxMzAsNyArMjE1MSw3IEBACiBzdGF0aWMgaW50IHNuZF9oZHNwX2dldF9jbG9ja19zb3VyY2VfbG9jayhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0JCisKIAl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IGhkc3AtPmNsb2NrX3NvdXJjZV9sb2NrZWQ7CiAJcmV0dXJuIDA7CiB9CkBAIC0yMTY1LDcgKzIxODYsNyBAQAogCWNhc2UgSERTUF9EQUdhaW5NaW51czEwZEJWOgogCQlyZXR1cm4gMjsKIAlkZWZhdWx0OgotCQlyZXR1cm4gMTsJCisJCXJldHVybiAxOwogCX0KIH0KIApAQCAtMjE4MCw4ICsyMjAxLDggQEAKIAkJaGRzcC0+Y29udHJvbF9yZWdpc3RlciB8PSBIRFNQX0RBR2FpblBsdXM0ZEJ1OwogCQlicmVhazsKIAljYXNlIDI6Ci0JCWhkc3AtPmNvbnRyb2xfcmVnaXN0ZXIgfD0gSERTUF9EQUdhaW5NaW51czEwZEJWOwkJCi0JCWJyZWFrOwkgICAgCisJCWhkc3AtPmNvbnRyb2xfcmVnaXN0ZXIgfD0gSERTUF9EQUdhaW5NaW51czEwZEJWOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLTE7CiAKQEAgLTIxOTMsNyArMjIxNCw3IEBACiBzdGF0aWMgaW50IHNuZF9oZHNwX2luZm9fZGFfZ2FpbihzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKIHsKIAlzdGF0aWMgY2hhciAqdGV4dHNbXSA9IHsiSGkgR2FpbiIsICIrNCBkQnUiLCAiLTEwIGRiViJ9OwotCQorCiAJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0VOVU1FUkFURUQ7CiAJdWluZm8tPmNvdW50ID0gMTsKIAl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyA9IDM7CkBAIC0yMjA2LDcgKzIyMjcsNyBAQAogc3RhdGljIGludCBzbmRfaGRzcF9nZXRfZGFfZ2FpbihzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0JCisKIAl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gaGRzcF9kYV9nYWluKGhkc3ApOwogCXJldHVybiAwOwogfQpAQCAtMjIxNiw3ICsyMjM3LDcgQEAKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAlpbnQgY2hhbmdlOwogCWludCB2YWw7Ci0JCisKIAlpZiAoIXNuZF9oZHNwX3VzZV9pc19leGNsdXNpdmUoaGRzcCkpCiAJCXJldHVybiAtRUJVU1k7CiAJdmFsID0gdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXTsKQEAgLTIyNTAsNyArMjI3MSw3IEBACiAJY2FzZSBIRFNQX0FER2Fpbkxvd0dhaW46CiAJCXJldHVybiAyOwogCWRlZmF1bHQ6Ci0JCXJldHVybiAxOwkKKwkJcmV0dXJuIDE7CiAJfQogfQogCkBAIC0yMjYyLDExICsyMjgzLDExIEBACiAJCWhkc3AtPmNvbnRyb2xfcmVnaXN0ZXIgfD0gSERTUF9BREdhaW5NaW51czEwZEJWOwogCQlicmVhazsKIAljYXNlIDE6Ci0JCWhkc3AtPmNvbnRyb2xfcmVnaXN0ZXIgfD0gSERTUF9BREdhaW5QbHVzNGRCdTsJCQorCQloZHNwLT5jb250cm9sX3JlZ2lzdGVyIHw9IEhEU1BfQURHYWluUGx1czRkQnU7CiAJCWJyZWFrOwogCWNhc2UgMjoKLQkJaGRzcC0+Y29udHJvbF9yZWdpc3RlciB8PSBIRFNQX0FER2Fpbkxvd0dhaW47CQkKLQkJYnJlYWs7CSAgICAKKwkJaGRzcC0+Y29udHJvbF9yZWdpc3RlciB8PSBIRFNQX0FER2Fpbkxvd0dhaW47CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtMTsKIApAQCAtMjI3OCw3ICsyMjk5LDcgQEAKIHN0YXRpYyBpbnQgc25kX2hkc3BfaW5mb19hZF9nYWluKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQogewogCXN0YXRpYyBjaGFyICp0ZXh0c1tdID0geyItMTAgZEJWIiwgIis0IGRCdSIsICJMbyBHYWluIn07Ci0JCisKIAl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfRU5VTUVSQVRFRDsKIAl1aW5mby0+Y291bnQgPSAxOwogCXVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zID0gMzsKQEAgLTIyOTEsNyArMjMxMiw3IEBACiBzdGF0aWMgaW50IHNuZF9oZHNwX2dldF9hZF9nYWluKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQkKKwogCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSBoZHNwX2FkX2dhaW4oaGRzcCk7CiAJcmV0dXJuIDA7CiB9CkBAIC0yMzAxLDcgKzIzMjIsNyBAQAogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCWludCBjaGFuZ2U7CiAJaW50IHZhbDsKLQkKKwogCWlmICghc25kX2hkc3BfdXNlX2lzX2V4Y2x1c2l2ZShoZHNwKSkKIAkJcmV0dXJuIC1FQlVTWTsKIAl2YWwgPSB1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdOwpAQCAtMjMzNSw3ICsyMzU2LDcgQEAKIAljYXNlIEhEU1BfUGhvbmVHYWluTWludXMxMmRCOgogCQlyZXR1cm4gMjsKIAlkZWZhdWx0OgotCQlyZXR1cm4gMDsJCisJCXJldHVybiAwOwogCX0KIH0KIApAQCAtMjM0NywxMSArMjM2OCwxMSBAQAogCQloZHNwLT5jb250cm9sX3JlZ2lzdGVyIHw9IEhEU1BfUGhvbmVHYWluMGRCOwogCQlicmVhazsKIAljYXNlIDE6Ci0JCWhkc3AtPmNvbnRyb2xfcmVnaXN0ZXIgfD0gSERTUF9QaG9uZUdhaW5NaW51czZkQjsJCQorCQloZHNwLT5jb250cm9sX3JlZ2lzdGVyIHw9IEhEU1BfUGhvbmVHYWluTWludXM2ZEI7CiAJCWJyZWFrOwogCWNhc2UgMjoKLQkJaGRzcC0+Y29udHJvbF9yZWdpc3RlciB8PSBIRFNQX1Bob25lR2Fpbk1pbnVzMTJkQjsJCQotCQlicmVhazsJICAgIAorCQloZHNwLT5jb250cm9sX3JlZ2lzdGVyIHw9IEhEU1BfUGhvbmVHYWluTWludXMxMmRCOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLTE7CiAKQEAgLTIzNjMsNyArMjM4NCw3IEBACiBzdGF0aWMgaW50IHNuZF9oZHNwX2luZm9fcGhvbmVfZ2FpbihzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKIHsKIAlzdGF0aWMgY2hhciAqdGV4dHNbXSA9IHsiMCBkQiIsICItNiBkQiIsICItMTIgZEIifTsKLQkKKwogCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9FTlVNRVJBVEVEOwogCXVpbmZvLT5jb3VudCA9IDE7CiAJdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgPSAzOwpAQCAtMjM3Niw3ICsyMzk3LDcgQEAKIHN0YXRpYyBpbnQgc25kX2hkc3BfZ2V0X3Bob25lX2dhaW4oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCQorCiAJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IGhkc3BfcGhvbmVfZ2FpbihoZHNwKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTIzODYsNyArMjQwNyw3IEBACiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJaW50IGNoYW5nZTsKIAlpbnQgdmFsOwotCQorCiAJaWYgKCFzbmRfaGRzcF91c2VfaXNfZXhjbHVzaXZlKGhkc3ApKQogCQlyZXR1cm4gLUVCVVNZOwogCXZhbCA9IHVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF07CkBAIC0yNDMyLDcgKzI0NTMsNyBAQAogc3RhdGljIGludCBzbmRfaGRzcF9nZXRfeGxyX2JyZWFrb3V0X2NhYmxlKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQkKKwogCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSBoZHNwX3hscl9icmVha291dF9jYWJsZShoZHNwKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTI0NDIsNyArMjQ2Myw3IEBACiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJaW50IGNoYW5nZTsKIAlpbnQgdmFsOwotCQorCiAJaWYgKCFzbmRfaGRzcF91c2VfaXNfZXhjbHVzaXZlKGhkc3ApKQogCQlyZXR1cm4gLUVCVVNZOwogCXZhbCA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdICYgMTsKQEAgLTI0ODgsNyArMjUwOSw3IEBACiBzdGF0aWMgaW50IHNuZF9oZHNwX2dldF9hZWIoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCQorCiAJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IGhkc3BfYWViKGhkc3ApOwogCXJldHVybiAwOwogfQpAQCAtMjQ5OCw3ICsyNTE5LDcgQEAKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAlpbnQgY2hhbmdlOwogCWludCB2YWw7Ci0JCisKIAlpZiAoIXNuZF9oZHNwX3VzZV9pc19leGNsdXNpdmUoaGRzcCkpCiAJCXJldHVybiAtRUJVU1k7CiAJdmFsID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gJiAxOwpAQCAtMjU3Niw3ICsyNTk3LDcgQEAKIHsKIAlzdGF0aWMgY2hhciAqdGV4dHNbXSA9IHsiV29yZCIsICJJRUM5NTgiLCAiQURBVDEiLCAiQURBVCBTeW5jIiwgIkFEQVQyIiwgIkFEQVQzIiB9OwogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCQorCiAJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0VOVU1FUkFURUQ7CiAJdWluZm8tPmNvdW50ID0gMTsKIApAQCAtMjU5NSw3ICsyNjE2LDcgQEAKIAkJdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgPSAwOwogCQlicmVhazsKIAl9Ci0JCQorCiAJaWYgKHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW0gPj0gdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMpCiAJCXVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW0gPSB1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyAtIDE7CiAJc3RyY3B5KHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLm5hbWUsIHRleHRzW3VpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1dKTsKQEAgLTI2MDUsNyArMjYyNiw3IEBACiBzdGF0aWMgaW50IHNuZF9oZHNwX2dldF9wcmVmX3N5bmNfcmVmKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQkKKwogCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSBoZHNwX3ByZWZfc3luY19yZWYoaGRzcCk7CiAJcmV0dXJuIDA7CiB9CkBAIC0yNjE1LDcgKzI2MzYsNyBAQAogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCWludCBjaGFuZ2UsIG1heDsKIAl1bnNpZ25lZCBpbnQgdmFsOwotCQorCiAJaWYgKCFzbmRfaGRzcF91c2VfaXNfZXhjbHVzaXZlKGhkc3ApKQogCQlyZXR1cm4gLUVCVVNZOwogCkBAIC0yNjY0LDcgKzI2ODUsNyBAQAogCWNhc2UgSERTUF9TZWxTeW5jUmVmX1NQRElGOgogCQlyZXR1cm4gSERTUF9BVVRPU1lOQ19GUk9NX1NQRElGOwogCWNhc2UgSERTUF9TZWxTeW5jUmVmTWFzazoKLQkJcmV0dXJuIEhEU1BfQVVUT1NZTkNfRlJPTV9OT05FOwkKKwkJcmV0dXJuIEhEU1BfQVVUT1NZTkNfRlJPTV9OT05FOwogCWNhc2UgSERTUF9TZWxTeW5jUmVmX0FEQVQxOgogCQlyZXR1cm4gSERTUF9BVVRPU1lOQ19GUk9NX0FEQVQxOwogCWNhc2UgSERTUF9TZWxTeW5jUmVmX0FEQVQyOgpAQCAtMjY4MCw3ICsyNzAxLDcgQEAKIHN0YXRpYyBpbnQgc25kX2hkc3BfaW5mb19hdXRvc3luY19yZWYoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCiB7CiAJc3RhdGljIGNoYXIgKnRleHRzW10gPSB7IldvcmQiLCAiQURBVCBTeW5jIiwgIklFQzk1OCIsICJOb25lIiwgIkFEQVQxIiwgIkFEQVQyIiwgIkFEQVQzIiB9OwotCQorCiAJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0VOVU1FUkFURUQ7CiAJdWluZm8tPmNvdW50ID0gMTsKIAl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyA9IDc7CkBAIC0yNjkzLDcgKzI3MTQsNyBAQAogc3RhdGljIGludCBzbmRfaGRzcF9nZXRfYXV0b3N5bmNfcmVmKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQkKKwogCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSBoZHNwX2F1dG9zeW5jX3JlZihoZHNwKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTI3MjcsNyArMjc0OCw3IEBACiBzdGF0aWMgaW50IHNuZF9oZHNwX2dldF9saW5lX291dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0JCisKIAlzcGluX2xvY2tfaXJxKCZoZHNwLT5sb2NrKTsKIAl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IGhkc3BfbGluZV9vdXQoaGRzcCk7CiAJc3Bpbl91bmxvY2tfaXJxKCZoZHNwLT5sb2NrKTsKQEAgLTI3MzksNyArMjc2MCw3IEBACiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJaW50IGNoYW5nZTsKIAl1bnNpZ25lZCBpbnQgdmFsOwotCQorCiAJaWYgKCFzbmRfaGRzcF91c2VfaXNfZXhjbHVzaXZlKGhkc3ApKQogCQlyZXR1cm4gLUVCVVNZOwogCXZhbCA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdICYgMTsKQEAgLTI3NzMsNyArMjc5NCw3IEBACiBzdGF0aWMgaW50IHNuZF9oZHNwX2dldF9wcmVjaXNlX3BvaW50ZXIoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCQorCiAJc3Bpbl9sb2NrX2lycSgmaGRzcC0+bG9jayk7CiAJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBoZHNwLT5wcmVjaXNlX3B0cjsKIAlzcGluX3VubG9ja19pcnEoJmhkc3AtPmxvY2spOwpAQCAtMjc4NSw3ICsyODA2LDcgQEAKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAlpbnQgY2hhbmdlOwogCXVuc2lnbmVkIGludCB2YWw7Ci0JCisKIAlpZiAoIXNuZF9oZHNwX3VzZV9pc19leGNsdXNpdmUoaGRzcCkpCiAJCXJldHVybiAtRUJVU1k7CiAJdmFsID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gJiAxOwpAQCAtMjgxOSw3ICsyODQwLDcgQEAKIHN0YXRpYyBpbnQgc25kX2hkc3BfZ2V0X3VzZV9taWRpX3Rhc2tsZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCQorCiAJc3Bpbl9sb2NrX2lycSgmaGRzcC0+bG9jayk7CiAJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBoZHNwLT51c2VfbWlkaV90YXNrbGV0OwogCXNwaW5fdW5sb2NrX2lycSgmaGRzcC0+bG9jayk7CkBAIC0yODMxLDcgKzI4NTIsNyBAQAogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCWludCBjaGFuZ2U7CiAJdW5zaWduZWQgaW50IHZhbDsKLQkKKwogCWlmICghc25kX2hkc3BfdXNlX2lzX2V4Y2x1c2l2ZShoZHNwKSkKIAkJcmV0dXJuIC1FQlVTWTsKIAl2YWwgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSAmIDE7CkBAIC0yODczLDEyICsyODk0LDEyIEBACiAKIAlzb3VyY2UgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXTsKIAlkZXN0aW5hdGlvbiA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdOwotCQorCiAJaWYgKHNvdXJjZSA+PSBoZHNwLT5tYXhfY2hhbm5lbHMpCiAJCWFkZHIgPSBoZHNwX3BsYXliYWNrX3RvX291dHB1dF9rZXkoaGRzcCxzb3VyY2UtaGRzcC0+bWF4X2NoYW5uZWxzLGRlc3RpbmF0aW9uKTsKIAllbHNlCiAJCWFkZHIgPSBoZHNwX2lucHV0X3RvX291dHB1dF9rZXkoaGRzcCxzb3VyY2UsIGRlc3RpbmF0aW9uKTsKLQkKKwogCXNwaW5fbG9ja19pcnEoJmhkc3AtPmxvY2spOwogCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzJdID0gaGRzcF9yZWFkX2dhaW4gKGhkc3AsIGFkZHIpOwogCXNwaW5fdW5sb2NrX2lycSgmaGRzcC0+bG9jayk7CkBAIC0yOTI2LDcgKzI5NDcsNyBAQAogCiBzdGF0aWMgaW50IHNuZF9oZHNwX2luZm9fc3luY19jaGVjayhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKIHsKLQlzdGF0aWMgY2hhciAqdGV4dHNbXSA9IHsiTm8gTG9jayIsICJMb2NrIiwgIlN5bmMiIH07CQorCXN0YXRpYyBjaGFyICp0ZXh0c1tdID0geyJObyBMb2NrIiwgIkxvY2siLCAiU3luYyIgfTsKIAl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfRU5VTUVSQVRFRDsKIAl1aW5mby0+Y291bnQgPSAxOwogCXVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zID0gMzsKQEAgLTI5NzEsNyArMjk5Miw3IEBACiAJaW50IHN0YXR1cyA9IGhkc3BfcmVhZChoZHNwLCBIRFNQX3N0YXR1c1JlZ2lzdGVyKTsKIAlpZiAoc3RhdHVzICYgSERTUF9TUERJRkVycm9yRmxhZykKIAkJcmV0dXJuIDA7Ci0JZWxzZSB7CQorCWVsc2UgewogCQlpZiAoc3RhdHVzICYgSERTUF9TUERJRlN5bmMpCiAJCQlyZXR1cm4gMjsKIAkJZWxzZQpAQCAtMzAwNyw3ICszMDI4LDcgQEAKIAkJCXJldHVybiAxOwogCX0gZWxzZQogCQlyZXR1cm4gMDsKLX0JCit9CiAKIHN0YXRpYyBpbnQgc25kX2hkc3BfZ2V0X2FkYXRzeW5jX3N5bmNfY2hlY2soc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewpAQCAtMzAyNSwxNyArMzA0NiwxNyBAQAogfQogCiBzdGF0aWMgaW50IGhkc3BfYWRhdF9zeW5jX2NoZWNrKHN0cnVjdCBoZHNwICpoZHNwLCBpbnQgaWR4KQotewkKK3sKIAlpbnQgc3RhdHVzID0gaGRzcF9yZWFkKGhkc3AsIEhEU1Bfc3RhdHVzUmVnaXN0ZXIpOwotCQorCiAJaWYgKHN0YXR1cyAmIChIRFNQX0xvY2swPj5pZHgpKSB7CiAJCWlmIChzdGF0dXMgJiAoSERTUF9TeW5jMD4+aWR4KSkKIAkJCXJldHVybiAyOwogCQllbHNlCi0JCQlyZXR1cm4gMTsJCQorCQkJcmV0dXJuIDE7CiAJfSBlbHNlCiAJCXJldHVybiAwOwotfSAKK30KIAogc3RhdGljIGludCBzbmRfaGRzcF9nZXRfYWRhdF9zeW5jX2NoZWNrKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKQEAgLTMwNTMsNyArMzA3NCw3IEBACiAJCWJyZWFrOwogCWNhc2UgTXVsdGlmYWNlOgogCWNhc2UgSDk2MzI6Ci0JCWlmIChvZmZzZXQgPj0gMSkgCisJCWlmIChvZmZzZXQgPj0gMSkKIAkJCXJldHVybiAtRUlOVkFMOwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtMzExNSw3ICszMTM2LDcgQEAKIHN0YXRpYyBpbnQgc25kX2hkc3BfZ2V0X2Rkc19vZmZzZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCQorCiAJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IGhkc3BfZGRzX29mZnNldChoZHNwKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTMxMjUsNyArMzE0Niw3IEBACiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJaW50IGNoYW5nZTsKIAlpbnQgdmFsOwotCQorCiAJaWYgKCFzbmRfaGRzcF91c2VfaXNfZXhjbHVzaXZlKGhkc3ApKQogCQlyZXR1cm4gLUVCVVNZOwogCXZhbCA9IHVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF07CkBAIC0zMTcwLDcgKzMxOTEsNyBAQAogCS5nZXQgPQkJc25kX2hkc3BfY29udHJvbF9zcGRpZl9tYXNrX2dldCwKIAkucHJpdmF0ZV92YWx1ZSA9IElFQzk1OF9BRVMwX05PTkFVRElPIHwKICAgCQkJIElFQzk1OF9BRVMwX1BST0ZFU1NJT05BTCB8Ci0JCQkgSUVDOTU4X0FFUzBfQ09OX0VNUEhBU0lTLAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCQkJIElFQzk1OF9BRVMwX0NPTl9FTVBIQVNJUywKIH0sCiB7CiAJLmFjY2VzcyA9CVNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFELApAQCAtMzE4OCw3ICszMjA5LDcgQEAKIEhEU1BfU1BESUZfUFJPRkVTU0lPTkFMKCJJRUM5NTggUHJvZmVzc2lvbmFsIEJpdCIsIDApLAogSERTUF9TUERJRl9FTVBIQVNJUygiSUVDOTU4IEVtcGhhc2lzIEJpdCIsIDApLAogSERTUF9TUERJRl9OT05fQVVESU8oIklFQzk1OCBOb24tYXVkaW8gQml0IiwgMCksCi0vKiAnU2FtcGxlIENsb2NrIFNvdXJjZScgY29tcGxpZXMgd2l0aCB0aGUgYWxzYSBjb250cm9sIG5hbWluZyBzY2hlbWUgKi8gCisvKiAnU2FtcGxlIENsb2NrIFNvdXJjZScgY29tcGxpZXMgd2l0aCB0aGUgYWxzYSBjb250cm9sIG5hbWluZyBzY2hlbWUgKi8KIEhEU1BfQ0xPQ0tfU09VUkNFKCJTYW1wbGUgQ2xvY2sgU291cmNlIiwgMCksCiB7CiAJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCkBAIC0zMjQwLDcgKzMyNjEsNyBAQAogCQkJCXJldHVybiBlcnI7CiAJCX0KIAl9Ci0JCisKIAkvKiBEQSwgQUQgYW5kIFBob25lIGdhaW4gYW5kIFhMUiBicmVha291dCBjYWJsZSBjb250cm9scyBmb3IgSDk2MzIgY2FyZHMgKi8KIAlpZiAoaGRzcC0+aW9fdHlwZSA9PSBIOTYzMikgewogCQlmb3IgKGlkeCA9IDA7IGlkeCA8IEFSUkFZX1NJWkUoc25kX2hkc3BfOTYzMl9jb250cm9scyk7IGlkeCsrKSB7CkBAIC0zMjU5LDcgKzMyODAsNyBAQAogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgL3Byb2MgaW50ZXJmYWNlIAorICAgL3Byb2MgaW50ZXJmYWNlCiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogc3RhdGljIHZvaWQKQEAgLTMyOTgsNyArMzMxOSw3IEBACiAJCQl9CiAJCX0KIAl9Ci0JCisKIAlzdGF0dXMgPSBoZHNwX3JlYWQoaGRzcCwgSERTUF9zdGF0dXNSZWdpc3Rlcik7CiAJc3RhdHVzMiA9IGhkc3BfcmVhZChoZHNwLCBIRFNQX3N0YXR1czJSZWdpc3Rlcik7CiAKQEAgLTMzNjIsMTcgKzMzODMsMTcgQEAKIAkJYnJlYWs7CiAJCWNhc2UgSERTUF9DTE9DS19TT1VSQ0VfSU5URVJOQUxfMTkyS0haOgogCQljbG9ja19zb3VyY2UgPSAiSW50ZXJuYWwgMTkyIGtIeiI7Ci0JCWJyZWFrOwkKKwkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJY2xvY2tfc291cmNlID0gIkVycm9yIjsJCQorCQljbG9ja19zb3VyY2UgPSAiRXJyb3IiOwogCX0KIAlzbmRfaXByaW50ZiAoYnVmZmVyLCAiU2FtcGxlIENsb2NrIFNvdXJjZTogJXNcbiIsIGNsb2NrX3NvdXJjZSk7Ci0JCQkKKwogCWlmIChoZHNwX3N5c3RlbV9jbG9ja19tb2RlKGhkc3ApKQogCQlzeXN0ZW1fY2xvY2tfbW9kZSA9ICJTbGF2ZSI7CiAJZWxzZQogCQlzeXN0ZW1fY2xvY2tfbW9kZSA9ICJNYXN0ZXIiOwotCQorCiAJc3dpdGNoIChoZHNwX3ByZWZfc3luY19yZWYgKGhkc3ApKSB7CiAJY2FzZSBIRFNQX1NZTkNfRlJPTV9XT1JEOgogCQlwcmVmX3N5bmNfcmVmID0gIldvcmQgQ2xvY2siOwpAQCAtMzM5Nyw3ICszNDE4LDcgQEAKIAkJYnJlYWs7CiAJfQogCXNuZF9pcHJpbnRmIChidWZmZXIsICJQcmVmZXJyZWQgU3luYyBSZWZlcmVuY2U6ICVzXG4iLCBwcmVmX3N5bmNfcmVmKTsKLQkKKwogCXN3aXRjaCAoaGRzcF9hdXRvc3luY19yZWYgKGhkc3ApKSB7CiAJY2FzZSBIRFNQX0FVVE9TWU5DX0ZST01fV09SRDoKIAkJYXV0b3N5bmNfcmVmID0gIldvcmQgQ2xvY2siOwpAQCAtMzQxMCw3ICszNDMxLDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBIRFNQX0FVVE9TWU5DX0ZST01fTk9ORToKIAkJYXV0b3N5bmNfcmVmID0gIk5vbmUiOwotCQlicmVhazsJCisJCWJyZWFrOwogCWNhc2UgSERTUF9BVVRPU1lOQ19GUk9NX0FEQVQxOgogCQlhdXRvc3luY19yZWYgPSAiQURBVDEiOwogCQlicmVhazsKQEAgLTM0MjUsMTQgKzM0NDYsMTQgQEAKIAkJYnJlYWs7CiAJfQogCXNuZF9pcHJpbnRmIChidWZmZXIsICJBdXRvU3luYyBSZWZlcmVuY2U6ICVzXG4iLCBhdXRvc3luY19yZWYpOwotCQorCiAJc25kX2lwcmludGYgKGJ1ZmZlciwgIkF1dG9TeW5jIEZyZXF1ZW5jeTogJWRcbiIsIGhkc3BfZXh0ZXJuYWxfc2FtcGxlX3JhdGUoaGRzcCkpOwotCQorCiAJc25kX2lwcmludGYgKGJ1ZmZlciwgIlN5c3RlbSBDbG9jayBNb2RlOiAlc1xuIiwgc3lzdGVtX2Nsb2NrX21vZGUpOwogCiAJc25kX2lwcmludGYgKGJ1ZmZlciwgIlN5c3RlbSBDbG9jayBGcmVxdWVuY3k6ICVkXG4iLCBoZHNwLT5zeXN0ZW1fc2FtcGxlX3JhdGUpOwogCXNuZF9pcHJpbnRmIChidWZmZXIsICJTeXN0ZW0gQ2xvY2sgTG9ja2VkOiAlc1xuIiwgaGRzcC0+Y2xvY2tfc291cmNlX2xvY2tlZCA/ICJZZXMiIDogIk5vIik7Ci0JCQorCiAJc25kX2lwcmludGYoYnVmZmVyLCAiXG4iKTsKIAogCXN3aXRjaCAoaGRzcF9zcGRpZl9pbihoZHNwKSkgewpAQCAtMzQ1Miw3ICszNDczLDcgQEAKIAkJc25kX2lwcmludGYoYnVmZmVyLCAiSUVDOTU4IGlucHV0OiA/Pz9cbiIpOwogCQlicmVhazsKIAl9Ci0JCisKIAlpZiAoaGRzcC0+Y29udHJvbF9yZWdpc3RlciAmIEhEU1BfU1BESUZPcHRpY2FsT3V0KQogCQlzbmRfaXByaW50ZihidWZmZXIsICJJRUM5NTggb3V0cHV0OiBDb2F4aWFsICYgQURBVDFcbiIpOwogCWVsc2UKQEAgLTM1MTAsMTMgKzM1MzEsMTMgQEAKIAkJc25kX2lwcmludGYgKGJ1ZmZlciwgIlNQRElGOiBObyBMb2NrXG4iKTsKIAllbHNlCiAJCXNuZF9pcHJpbnRmIChidWZmZXIsICJTUERJRjogJXNcbiIsIHggPyAiU3luYyIgOiAiTG9jayIpOwotCQorCiAJeCA9IHN0YXR1czIgJiBIRFNQX3djX3N5bmM7CiAJaWYgKHN0YXR1czIgJiBIRFNQX3djX2xvY2spCiAJCXNuZF9pcHJpbnRmIChidWZmZXIsICJXb3JkIENsb2NrOiAlc1xuIiwgeCA/ICJTeW5jIiA6ICJMb2NrIik7CiAJZWxzZQogCQlzbmRfaXByaW50ZiAoYnVmZmVyLCAiV29yZCBDbG9jazogTm8gTG9ja1xuIik7Ci0JCisKIAl4ID0gc3RhdHVzICYgSERTUF9UaW1lY29kZVN5bmM7CiAJaWYgKHN0YXR1cyAmIEhEU1BfVGltZWNvZGVMb2NrKQogCQlzbmRfaXByaW50ZihidWZmZXIsICJBREFUIFN5bmM6ICVzXG4iLCB4ID8gIlN5bmMiIDogIkxvY2siKTsKQEAgLTM1MjQsMTEgKzM1NDUsMTEgQEAKIAkJc25kX2lwcmludGYoYnVmZmVyLCAiQURBVCBTeW5jOiBObyBMb2NrXG4iKTsKIAogCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlxuIik7Ci0JCisKIAkvKiBJbmZvcm1hdGlvbnMgYWJvdXQgSDk2MzIgc3BlY2lmaWMgY29udHJvbHMgKi8KIAlpZiAoaGRzcC0+aW9fdHlwZSA9PSBIOTYzMikgewogCQljaGFyICp0bXA7Ci0JCisKIAkJc3dpdGNoIChoZHNwX2FkX2dhaW4oaGRzcCkpIHsKIAkJY2FzZSAwOgogCQkJdG1wID0gIi0xMCBkQlYiOwpAQCAtMzU1NCw3ICszNTc1LDcgQEAKIAkJCWJyZWFrOwogCQl9CiAJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIkRBIEdhaW4gOiAlc1xuIiwgdG1wKTsKLQkJCisKIAkJc3dpdGNoIChoZHNwX3Bob25lX2dhaW4oaGRzcCkpIHsKIAkJY2FzZSAwOgogCQkJdG1wID0gIjAgZEIiOwpAQCAtMzU2OCw4ICszNTg5LDggQEAKIAkJfQogCQlzbmRfaXByaW50ZihidWZmZXIsICJQaG9uZXMgR2FpbiA6ICVzXG4iLCB0bXApOwogCi0JCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlhMUiBCcmVha291dCBDYWJsZSA6ICVzXG4iLCBoZHNwX3hscl9icmVha291dF9jYWJsZShoZHNwKSA/ICJ5ZXMiIDogIm5vIik7CQotCQkKKwkJc25kX2lwcmludGYoYnVmZmVyLCAiWExSIEJyZWFrb3V0IENhYmxlIDogJXNcbiIsIGhkc3BfeGxyX2JyZWFrb3V0X2NhYmxlKGhkc3ApID8gInllcyIgOiAibm8iKTsKKwogCQlpZiAoaGRzcC0+Y29udHJvbF9yZWdpc3RlciAmIEhEU1BfQW5hbG9nRXh0ZW5zaW9uQm9hcmQpCiAJCQlzbmRfaXByaW50ZihidWZmZXIsICJBRUIgOiBvbiAoQURBVDEgaW50ZXJuYWwpXG4iKTsKIAkJZWxzZQpAQCAtMzYzMiwxOCArMzY1MywxOCBAQAogCiAJLyogc2V0IGRlZmF1bHRzOgogCi0JICAgU1BESUYgSW5wdXQgdmlhIENvYXggCisJICAgU1BESUYgSW5wdXQgdmlhIENvYXgKIAkgICBNYXN0ZXIgY2xvY2sgbW9kZQogCSAgIG1heGltdW0gbGF0ZW5jeSAoNyA9PiAyXjcgPSA4MTkyIHNhbXBsZXMsIDY0S2J5dGUgYnVmZmVyLAogCSAgICAgICAgICAgICAgICAgICAgd2hpY2ggaW1wbGllcyAyIDQwOTYgc2FtcGxlLCAzMktieXRlIHBlcmlvZHMpLgotICAgICAgICAgICBFbmFibGUgbGluZSBvdXQuCQkJICAgIAorICAgICAgICAgICBFbmFibGUgbGluZSBvdXQuCiAJICovCiAKLQloZHNwLT5jb250cm9sX3JlZ2lzdGVyID0gSERTUF9DbG9ja01vZGVNYXN0ZXIgfCAKLQkJICAgICAgICAgICAgICAgICBIRFNQX1NQRElGSW5wdXRDb2F4aWFsIHwgCi0JCSAgICAgICAgICAgICAgICAgaGRzcF9lbmNvZGVfbGF0ZW5jeSg3KSB8IAorCWhkc3AtPmNvbnRyb2xfcmVnaXN0ZXIgPSBIRFNQX0Nsb2NrTW9kZU1hc3RlciB8CisJCSAgICAgICAgICAgICAgICAgSERTUF9TUERJRklucHV0Q29heGlhbCB8CisJCSAgICAgICAgICAgICAgICAgaGRzcF9lbmNvZGVfbGF0ZW5jeSg3KSB8CiAJCSAgICAgICAgICAgICAgICAgSERTUF9MaW5lT3V0OwotCQorCiAKIAloZHNwX3dyaXRlKGhkc3AsIEhEU1BfY29udHJvbFJlZ2lzdGVyLCBoZHNwLT5jb250cm9sX3JlZ2lzdGVyKTsKIApAQCAtMzY2MSw3ICszNjgyLDcgQEAKIAloZHNwX2NvbXB1dGVfcGVyaW9kX3NpemUoaGRzcCk7CiAKIAkvKiBzaWxlbmNlIGV2ZXJ5dGhpbmcgKi8KLQkKKwogCWZvciAoaSA9IDA7IGkgPCBIRFNQX01BVFJJWF9NSVhFUl9TSVpFOyArK2kpCiAJCWhkc3AtPm1peGVyX21hdHJpeFtpXSA9IE1JTlVTX0lORklOSVRZX0dBSU47CiAKQEAgLTM2NjksNyArMzY5MCw3IEBACiAJCWlmIChoZHNwX3dyaXRlX2dhaW4gKGhkc3AsIGksIE1JTlVTX0lORklOSVRZX0dBSU4pKQogCQkJcmV0dXJuIC1FSU87CiAJfQotCQorCiAJLyogSDk2MzIgc3BlY2lmaWMgZGVmYXVsdHMgKi8KIAlpZiAoaGRzcC0+aW9fdHlwZSA9PSBIOTYzMikgewogCQloZHNwLT5jb250cm9sX3JlZ2lzdGVyIHw9IChIRFNQX0RBR2FpblBsdXM0ZEJ1IHwgSERTUF9BREdhaW5QbHVzNGRCdSB8IEhEU1BfUGhvbmVHYWluMGRCKTsKQEAgLTM2ODcsMTIgKzM3MDgsMTIgQEAKIHN0YXRpYyB2b2lkIGhkc3BfbWlkaV90YXNrbGV0KHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXN0cnVjdCBoZHNwICpoZHNwID0gKHN0cnVjdCBoZHNwICopYXJnOwotCQorCiAJaWYgKGhkc3AtPm1pZGlbMF0ucGVuZGluZykKIAkJc25kX2hkc3BfbWlkaV9pbnB1dF9yZWFkICgmaGRzcC0+bWlkaVswXSk7CiAJaWYgKGhkc3AtPm1pZGlbMV0ucGVuZGluZykKIAkJc25kX2hkc3BfbWlkaV9pbnB1dF9yZWFkICgmaGRzcC0+bWlkaVsxXSk7Ci19IAorfQogCiBzdGF0aWMgaXJxcmV0dXJuX3Qgc25kX2hkc3BfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKQEAgLTM3MDQsNyArMzcyNSw3IEBACiAJdW5zaWduZWQgaW50IG1pZGkwc3RhdHVzOwogCXVuc2lnbmVkIGludCBtaWRpMXN0YXR1czsKIAlpbnQgc2NoZWR1bGUgPSAwOwotCQorCiAJc3RhdHVzID0gaGRzcF9yZWFkKGhkc3AsIEhEU1Bfc3RhdHVzUmVnaXN0ZXIpOwogCiAJYXVkaW8gPSBzdGF0dXMgJiBIRFNQX2F1ZGlvSVJRUGVuZGluZzsKQEAgLTM3MTgsMTUgKzM3MzksMTggQEAKIAogCW1pZGkwc3RhdHVzID0gaGRzcF9yZWFkIChoZHNwLCBIRFNQX21pZGlTdGF0dXNJbjApICYgMHhmZjsKIAltaWRpMXN0YXR1cyA9IGhkc3BfcmVhZCAoaGRzcCwgSERTUF9taWRpU3RhdHVzSW4xKSAmIDB4ZmY7Ci0JCisKKwlpZiAoIShoZHNwLT5zdGF0ZSAmIEhEU1BfSW5pdGlhbGl6YXRpb25Db21wbGV0ZSkpCisJCXJldHVybiBJUlFfSEFORExFRDsKKwogCWlmIChhdWRpbykgewogCQlpZiAoaGRzcC0+Y2FwdHVyZV9zdWJzdHJlYW0pCiAJCQlzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKGhkc3AtPnBjbS0+c3RyZWFtc1tTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkVdLnN1YnN0cmVhbSk7Ci0JCQorCiAJCWlmIChoZHNwLT5wbGF5YmFja19zdWJzdHJlYW0pCiAJCQlzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKGhkc3AtPnBjbS0+c3RyZWFtc1tTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLXS5zdWJzdHJlYW0pOwogCX0KLQkKKwogCWlmIChtaWRpMCAmJiBtaWRpMHN0YXR1cykgewogCQlpZiAoaGRzcC0+dXNlX21pZGlfdGFza2xldCkgewogCQkJLyogd2UgZGlzYWJsZSBpbnRlcnJ1cHRzIGZvciB0aGlzIGlucHV0IHVudGlsIHByb2Nlc3NpbmcgaXMgZG9uZSAqLwpAQCAtMzc2OSwxMCArMzc5MywxMCBAQAogCiAgICAgICAgIGlmIChzbmRfQlVHX09OKGNoYW5uZWwgPCAwIHx8IGNoYW5uZWwgPj0gaGRzcC0+bWF4X2NoYW5uZWxzKSkKIAkJcmV0dXJuIE5VTEw7Ci0gICAgICAgIAorCiAJaWYgKChtYXBwZWRfY2hhbm5lbCA9IGhkc3AtPmNoYW5uZWxfbWFwW2NoYW5uZWxdKSA8IDApCiAJCXJldHVybiBOVUxMOwotCQorCiAJaWYgKHN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUpCiAJCXJldHVybiBoZHNwLT5jYXB0dXJlX2J1ZmZlciArIChtYXBwZWRfY2hhbm5lbCAqIEhEU1BfQ0hBTk5FTF9CVUZGRVJfQllURVMpOwogCWVsc2UKQEAgLTM5NjUsNyArMzk4OSw3IEBACiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CiAJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpvdGhlcjsKIAlpbnQgcnVubmluZzsKLQkKKwogCWlmIChoZHNwX2NoZWNrX2Zvcl9pb2JveCAoaGRzcCkpCiAJCXJldHVybiAtRUlPOwogCkBAIC00MDU5LDEwICs0MDgzLDEwIEBACiAJLmZvcm1hdHMgPQkJU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUsCiAjZW5kaWYKIAkucmF0ZXMgPQkJKFNORFJWX1BDTV9SQVRFXzMyMDAwIHwKLQkJCQkgU05EUlZfUENNX1JBVEVfNDQxMDAgfCAKLQkJCQkgU05EUlZfUENNX1JBVEVfNDgwMDAgfCAKLQkJCQkgU05EUlZfUENNX1JBVEVfNjQwMDAgfCAKLQkJCQkgU05EUlZfUENNX1JBVEVfODgyMDAgfCAKKwkJCQkgU05EUlZfUENNX1JBVEVfNDQxMDAgfAorCQkJCSBTTkRSVl9QQ01fUkFURV80ODAwMCB8CisJCQkJIFNORFJWX1BDTV9SQVRFXzY0MDAwIHwKKwkJCQkgU05EUlZfUENNX1JBVEVfODgyMDAgfAogCQkJCSBTTkRSVl9QQ01fUkFURV85NjAwMCksCiAJLnJhdGVfbWluID0JCTMyMDAwLAogCS5yYXRlX21heCA9CQk5NjAwMCwKQEAgLTQwODgsMTAgKzQxMTIsMTAgQEAKIAkuZm9ybWF0cyA9CQlTTkRSVl9QQ01fRk1UQklUX1MzMl9MRSwKICNlbmRpZgogCS5yYXRlcyA9CQkoU05EUlZfUENNX1JBVEVfMzIwMDAgfAotCQkJCSBTTkRSVl9QQ01fUkFURV80NDEwMCB8IAotCQkJCSBTTkRSVl9QQ01fUkFURV80ODAwMCB8IAotCQkJCSBTTkRSVl9QQ01fUkFURV82NDAwMCB8IAotCQkJCSBTTkRSVl9QQ01fUkFURV84ODIwMCB8IAorCQkJCSBTTkRSVl9QQ01fUkFURV80NDEwMCB8CisJCQkJIFNORFJWX1BDTV9SQVRFXzQ4MDAwIHwKKwkJCQkgU05EUlZfUENNX1JBVEVfNjQwMDAgfAorCQkJCSBTTkRSVl9QQ01fUkFURV84ODIwMCB8CiAJCQkJIFNORFJWX1BDTV9SQVRFXzk2MDAwKSwKIAkucmF0ZV9taW4gPQkJMzIwMDAsCiAJLnJhdGVfbWF4ID0JCTk2MDAwLApAQCAtNDE3MCw3ICs0MTk0LDcgQEAKIAkJCS5tYXggPSBoZHNwLT5xc19pbl9jaGFubmVscywKIAkJCS5pbnRlZ2VyID0gMSwKIAkJfTsKLQkJcmV0dXJuIHNuZF9pbnRlcnZhbF9yZWZpbmUoYywgJnQpOwkKKwkJcmV0dXJuIHNuZF9pbnRlcnZhbF9yZWZpbmUoYywgJnQpOwogCX0gZWxzZSBpZiAoci0+bWluID4gNDgwMDAgJiYgci0+bWF4IDw9IDk2MDAwKSB7CiAJCXN0cnVjdCBzbmRfaW50ZXJ2YWwgdCA9IHsKIAkJCS5taW4gPSBoZHNwLT5kc19pbl9jaGFubmVscywKQEAgLTQyMDEsNyArNDIyNSw3IEBACiAJCQkubWF4ID0gaGRzcC0+cXNfb3V0X2NoYW5uZWxzLAogCQkJLmludGVnZXIgPSAxLAogCQl9OwotCQlyZXR1cm4gc25kX2ludGVydmFsX3JlZmluZShjLCAmdCk7CQorCQlyZXR1cm4gc25kX2ludGVydmFsX3JlZmluZShjLCAmdCk7CiAJfSBlbHNlIGlmIChyLT5taW4gPiA0ODAwMCAmJiByLT5tYXggPD0gOTYwMDApIHsKIAkJc3RydWN0IHNuZF9pbnRlcnZhbCB0ID0gewogCQkJLm1pbiA9IGhkc3AtPmRzX291dF9jaGFubmVscywKQEAgLTQzMTgsOCArNDM0Miw4IEBACiAJaWYgKGhkc3AtPmlvX3R5cGUgPT0gSDk2MzIpIHsKIAkJcnVudGltZS0+aHcuY2hhbm5lbHNfbWluID0gaGRzcC0+cXNfb3V0X2NoYW5uZWxzOwogCQlydW50aW1lLT5ody5jaGFubmVsc19tYXggPSBoZHNwLT5zc19vdXRfY2hhbm5lbHM7Ci0JfQkKLQkKKwl9CisKIAlzbmRfcGNtX2h3X3J1bGVfYWRkKHJ1bnRpbWUsIDAsIFNORFJWX1BDTV9IV19QQVJBTV9DSEFOTkVMUywKIAkJCSAgICAgc25kX2hkc3BfaHdfcnVsZV9vdXRfY2hhbm5lbHMsIGhkc3AsCiAJCQkgICAgIFNORFJWX1BDTV9IV19QQVJBTV9DSEFOTkVMUywgLTEpOwpAQCAtNDQxMywxMyArNDQzNyw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc25kX2hkc3BfaHdkZXBfZHVtbXlfb3Aoc3RydWN0IHNuZF9od2RlcCAqaHcsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCS8qIHdlIGhhdmUgbm90aGluZyB0byBpbml0aWFsaXplIGJ1dCB0aGUgY2FsbCBpcyByZXF1aXJlZCAqLwotCXJldHVybiAwOwotfQotCi0KIC8qIGhlbHBlciBmdW5jdGlvbnMgZm9yIGNvcHlpbmcgbWV0ZXIgdmFsdWVzICovCiBzdGF0aWMgaW5saW5lIGludCBjb3B5X3UzMl9sZSh2b2lkIF9fdXNlciAqZGVzdCwgdm9pZCBfX2lvbWVtICpzcmMpCiB7CkBAIC00NTM2LDcgKzQ1NTMsNyBAQAogCQkJCWhkc3AtPmlvYmFzZSArIEhEU1BfcGxheWJhY2tSbXNMZXZlbCArIGkgKiA4ICsgNCwKIAkJCQloZHNwLT5pb2Jhc2UgKyBIRFNQX3BsYXliYWNrUm1zTGV2ZWwgKyBpICogOCkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKLQkJaWYgKGNvcHlfdTY0X2xlKCZwZWFrX3Jtcy0+aW5wdXRfcm1zW2ldLCAKKwkJaWYgKGNvcHlfdTY0X2xlKCZwZWFrX3Jtcy0+aW5wdXRfcm1zW2ldLAogCQkJCWhkc3AtPmlvYmFzZSArIEhEU1BfaW5wdXRSbXNMZXZlbCArIGkgKiA4ICsgNCwKIAkJCQloZHNwLT5pb2Jhc2UgKyBIRFNQX2lucHV0Um1zTGV2ZWwgKyBpICogOCkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTQ1NDYsNyArNDU2Myw3IEBACiAKIHN0YXRpYyBpbnQgc25kX2hkc3BfaHdkZXBfaW9jdGwoc3RydWN0IHNuZF9od2RlcCAqaHcsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlzdHJ1Y3QgaGRzcCAqaGRzcCA9IChzdHJ1Y3QgaGRzcCAqKWh3LT5wcml2YXRlX2RhdGE7CQorCXN0cnVjdCBoZHNwICpoZHNwID0gKHN0cnVjdCBoZHNwICopaHctPnByaXZhdGVfZGF0YTsKIAl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKIAlpbnQgZXJyOwogCkBAIC00NTgwLDcgKzQ1OTcsNyBAQAogCQlzdHJ1Y3QgaGRzcF9jb25maWdfaW5mbyBpbmZvOwogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCQlpbnQgaTsKLQkJCisKIAkJZXJyID0gaGRzcF9jaGVja19mb3JfaW9ib3goaGRzcCk7CiAJCWlmIChlcnIgPCAwKQogCQkJcmV0dXJuIGVycjsKQEAgLTQ2MTQsNyArNDYzMSw3IEBACiAJCQlpbmZvLmFkX2dhaW4gPSAodW5zaWduZWQgY2hhciloZHNwX2FkX2dhaW4oaGRzcCk7CiAJCQlpbmZvLnBob25lX2dhaW4gPSAodW5zaWduZWQgY2hhciloZHNwX3Bob25lX2dhaW4oaGRzcCk7CiAJCQlpbmZvLnhscl9icmVha291dF9jYWJsZSA9ICh1bnNpZ25lZCBjaGFyKWhkc3BfeGxyX2JyZWFrb3V0X2NhYmxlKGhkc3ApOwotCQkKKwogCQl9CiAJCWlmIChoZHNwLT5pb190eXBlID09IEg5NjMyIHx8IGhkc3AtPmlvX3R5cGUgPT0gSDk2NTIpCiAJCQlpbmZvLmFuYWxvZ19leHRlbnNpb25fYm9hcmQgPSAodW5zaWduZWQgY2hhciloZHNwX2FlYihoZHNwKTsKQEAgLTQ2MjUsNyArNDY0Miw3IEBACiAJfQogCWNhc2UgU05EUlZfSERTUF9JT0NUTF9HRVRfOTYzMl9BRUI6IHsKIAkJc3RydWN0IGhkc3BfOTYzMl9hZWIgaDk2MzJfYWViOwotCQkKKwogCQlpZiAoaGRzcC0+aW9fdHlwZSAhPSBIOTYzMikgcmV0dXJuIC1FSU5WQUw7CiAJCWg5NjMyX2FlYi5hZWJpID0gaGRzcC0+c3NfaW5fY2hhbm5lbHMgLSBIOTYzMl9TU19DSEFOTkVMUzsKIAkJaDk2MzJfYWViLmFlYm8gPSBoZHNwLT5zc19vdXRfY2hhbm5lbHMgLSBIOTYzMl9TU19DSEFOTkVMUzsKQEAgLTQ2MzYsNyArNDY1Myw3IEBACiAJY2FzZSBTTkRSVl9IRFNQX0lPQ1RMX0dFVF9WRVJTSU9OOiB7CiAJCXN0cnVjdCBoZHNwX3ZlcnNpb24gaGRzcF92ZXJzaW9uOwogCQlpbnQgZXJyOwotCQkKKwogCQlpZiAoaGRzcC0+aW9fdHlwZSA9PSBIOTY1MiB8fCBoZHNwLT5pb190eXBlID09IEg5NjMyKSByZXR1cm4gLUVJTlZBTDsKIAkJaWYgKGhkc3AtPmlvX3R5cGUgPT0gVW5kZWZpbmVkKSB7CiAJCQlpZiAoKGVyciA9IGhkc3BfZ2V0X2lvYm94X3ZlcnNpb24oaGRzcCkpIDwgMCkKQEAgLTQ2NTIsNyArNDY2OSw3IEBACiAJCXN0cnVjdCBoZHNwX2Zpcm13YXJlIF9fdXNlciAqZmlybXdhcmU7CiAJCXUzMiBfX3VzZXIgKmZpcm13YXJlX2RhdGE7CiAJCWludCBlcnI7Ci0JCQorCiAJCWlmIChoZHNwLT5pb190eXBlID09IEg5NjUyIHx8IGhkc3AtPmlvX3R5cGUgPT0gSDk2MzIpIHJldHVybiAtRUlOVkFMOwogCQkvKiBTTkRSVl9IRFNQX0lPQ1RMX0dFVF9WRVJTSU9OIG11c3QgaGF2ZSBiZWVuIGNhbGxlZCAqLwogCQlpZiAoaGRzcC0+aW9fdHlwZSA9PSBVbmRlZmluZWQpIHJldHVybiAtRUlOVkFMOwpAQCAtNDY2NSwyNSArNDY4MiwyNSBAQAogCiAJCWlmIChnZXRfdXNlcihmaXJtd2FyZV9kYXRhLCAmZmlybXdhcmUtPmZpcm13YXJlX2RhdGEpKQogCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQorCiAJCWlmIChoZHNwX2NoZWNrX2Zvcl9pb2JveCAoaGRzcCkpCiAJCQlyZXR1cm4gLUVJTzsKIAogCQlpZiAoY29weV9mcm9tX3VzZXIoaGRzcC0+ZmlybXdhcmVfY2FjaGUsIGZpcm13YXJlX2RhdGEsIHNpemVvZihoZHNwLT5maXJtd2FyZV9jYWNoZSkpICE9IDApCiAJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCisKIAkJaGRzcC0+c3RhdGUgfD0gSERTUF9GaXJtd2FyZUNhY2hlZDsKIAogCQlpZiAoKGVyciA9IHNuZF9oZHNwX2xvYWRfZmlybXdhcmVfZnJvbV9jYWNoZShoZHNwKSkgPCAwKQogCQkJcmV0dXJuIGVycjsKLQkJCisKIAkJaWYgKCEoaGRzcC0+c3RhdGUgJiBIRFNQX0luaXRpYWxpemF0aW9uQ29tcGxldGUpKSB7CiAJCQlpZiAoKGVyciA9IHNuZF9oZHNwX2VuYWJsZV9pbyhoZHNwKSkgPCAwKQogCQkJCXJldHVybiBlcnI7Ci0JCQkKLQkJCXNuZF9oZHNwX2luaXRpYWxpemVfY2hhbm5lbHMoaGRzcCk7CQkKKworCQkJc25kX2hkc3BfaW5pdGlhbGl6ZV9jaGFubmVscyhoZHNwKTsKIAkJCXNuZF9oZHNwX2luaXRpYWxpemVfbWlkaV9mbHVzaChoZHNwKTsKLQkgICAgCisKIAkJCWlmICgoZXJyID0gc25kX2hkc3BfY3JlYXRlX2Fsc2FfZGV2aWNlcyhoZHNwLT5jYXJkLCBoZHNwKSkgPCAwKSB7CiAJCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiSGFtbWVyZmFsbC1EU1A6IGVycm9yIGNyZWF0aW5nIGFsc2EgZGV2aWNlc1xuIik7CiAJCQkJcmV0dXJuIGVycjsKQEAgLTQ3MzAsMTggKzQ3NDcsMTYgQEAKIHsKIAlzdHJ1Y3Qgc25kX2h3ZGVwICpodzsKIAlpbnQgZXJyOwotCQorCiAJaWYgKChlcnIgPSBzbmRfaHdkZXBfbmV3KGNhcmQsICJIRFNQIGh3ZGVwIiwgMCwgJmh3KSkgPCAwKQogCQlyZXR1cm4gZXJyOwotCQkKKwogCWhkc3AtPmh3ZGVwID0gaHc7CiAJaHctPnByaXZhdGVfZGF0YSA9IGhkc3A7CiAJc3RyY3B5KGh3LT5uYW1lLCAiSERTUCBod2RlcCBpbnRlcmZhY2UiKTsKIAotCWh3LT5vcHMub3BlbiA9IHNuZF9oZHNwX2h3ZGVwX2R1bW15X29wOwogCWh3LT5vcHMuaW9jdGwgPSBzbmRfaGRzcF9od2RlcF9pb2N0bDsKLQlody0+b3BzLnJlbGVhc2UgPSBzbmRfaGRzcF9od2RlcF9kdW1teV9vcDsKLQkJCisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDc3NCwyNCArNDc4OSwyNCBAQAogc3RhdGljIGludCBzbmRfaGRzcF9lbmFibGVfaW8gKHN0cnVjdCBoZHNwICpoZHNwKQogewogCWludCBpOwotCQorCiAJaWYgKGhkc3BfZmlmb193YWl0IChoZHNwLCAwLCAxMDApKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgIkhhbW1lcmZhbGwtRFNQOiBlbmFibGVfaW8gZmlmb193YWl0IGZhaWxlZFxuIik7CiAJCXJldHVybiAtRUlPOwogCX0KLQkKKwogCWZvciAoaSA9IDA7IGkgPCBoZHNwLT5tYXhfY2hhbm5lbHM7ICsraSkgewogCQloZHNwX3dyaXRlIChoZHNwLCBIRFNQX2lucHV0RW5hYmxlICsgKDQgKiBpKSwgMSk7CiAJCWhkc3Bfd3JpdGUgKGhkc3AsIEhEU1Bfb3V0cHV0RW5hYmxlICsgKDQgKiBpKSwgMSk7CiAJfQotCQorCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHNuZF9oZHNwX2luaXRpYWxpemVfY2hhbm5lbHMoc3RydWN0IGhkc3AgKmhkc3ApCiB7CiAJaW50IHN0YXR1cywgYWViaV9jaGFubmVscywgYWVib19jaGFubmVsczsKLQkKKwogCXN3aXRjaCAoaGRzcC0+aW9fdHlwZSkgewogCWNhc2UgRGlnaWZhY2U6CiAJCWhkc3AtPmNhcmRfbmFtZSA9ICJSTUUgSGFtbWVyZmFsbCBEU1AgKyBEaWdpZmFjZSI7CkBAIC00ODA0LDcgKzQ4MTksNyBAQAogCQloZHNwLT5zc19pbl9jaGFubmVscyA9IGhkc3AtPnNzX291dF9jaGFubmVscyA9IEg5NjUyX1NTX0NIQU5ORUxTOwogCQloZHNwLT5kc19pbl9jaGFubmVscyA9IGhkc3AtPmRzX291dF9jaGFubmVscyA9IEg5NjUyX0RTX0NIQU5ORUxTOwogCQlicmVhazsKLQkKKwogCWNhc2UgSDk2MzI6CiAJCXN0YXR1cyA9IGhkc3BfcmVhZChoZHNwLCBIRFNQX3N0YXR1c1JlZ2lzdGVyKTsKIAkJLyogSERTUF9BRUJ4IGJpdHMgYXJlIGxvdyB3aGVuIEFFQiBhcmUgY29ubmVjdGVkICovCkBAIC00ODI0LDcgKzQ4MzksNyBAQAogCQloZHNwLT5zc19pbl9jaGFubmVscyA9IGhkc3AtPnNzX291dF9jaGFubmVscyA9IE1VTFRJRkFDRV9TU19DSEFOTkVMUzsKIAkJaGRzcC0+ZHNfaW5fY2hhbm5lbHMgPSBoZHNwLT5kc19vdXRfY2hhbm5lbHMgPSBNVUxUSUZBQ0VfRFNfQ0hBTk5FTFM7CiAJCWJyZWFrOwotCQkKKwogCWRlZmF1bHQ6CiAgCQkvKiBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUgKi8KIAkJYnJlYWs7CkBAIC00ODQwLDEyICs0ODU1LDEyIEBACiBzdGF0aWMgaW50IHNuZF9oZHNwX2NyZWF0ZV9hbHNhX2RldmljZXMoc3RydWN0IHNuZF9jYXJkICpjYXJkLCBzdHJ1Y3QgaGRzcCAqaGRzcCkKIHsKIAlpbnQgZXJyOwotCQorCiAJaWYgKChlcnIgPSBzbmRfaGRzcF9jcmVhdGVfcGNtKGNhcmQsIGhkc3ApKSA8IDApIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAiSGFtbWVyZmFsbC1EU1A6IEVycm9yIGNyZWF0aW5nIHBjbSBpbnRlcmZhY2VcbiIpOwogCQlyZXR1cm4gZXJyOwogCX0KLQkKKwogCiAJaWYgKChlcnIgPSBzbmRfaGRzcF9jcmVhdGVfbWlkaShjYXJkLCBoZHNwLCAwKSkgPCAwKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgIkhhbW1lcmZhbGwtRFNQOiBFcnJvciBjcmVhdGluZyBmaXJzdCBtaWRpIGludGVyZmFjZVxuIik7CkBAIC00ODc2LDE5ICs0ODkxLDE5IEBACiAJCXNuZF9wcmludGsoS0VSTl9FUlIgIkhhbW1lcmZhbGwtRFNQOiBFcnJvciBzZXR0aW5nIGRlZmF1bHQgdmFsdWVzXG4iKTsKIAkJcmV0dXJuIGVycjsKIAl9Ci0JCisKIAlpZiAoIShoZHNwLT5zdGF0ZSAmIEhEU1BfSW5pdGlhbGl6YXRpb25Db21wbGV0ZSkpIHsKIAkJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgIkhhbW1lcmZhbGwgRFNQIik7Ci0JCXNwcmludGYoY2FyZC0+bG9uZ25hbWUsICIlcyBhdCAweCVseCwgaXJxICVkIiwgaGRzcC0+Y2FyZF9uYW1lLCAKKwkJc3ByaW50ZihjYXJkLT5sb25nbmFtZSwgIiVzIGF0IDB4JWx4LCBpcnEgJWQiLCBoZHNwLT5jYXJkX25hbWUsCiAJCQloZHNwLT5wb3J0LCBoZHNwLT5pcnEpOwotCSAgICAKKwogCQlpZiAoKGVyciA9IHNuZF9jYXJkX3JlZ2lzdGVyKGNhcmQpKSA8IDApIHsKIAkJCXNuZF9wcmludGsoS0VSTl9FUlIgIkhhbW1lcmZhbGwtRFNQOiBlcnJvciByZWdpc3RlcmluZyBjYXJkXG4iKTsKIAkJCXJldHVybiBlcnI7CiAJCX0KIAkJaGRzcC0+c3RhdGUgfD0gSERTUF9Jbml0aWFsaXphdGlvbkNvbXBsZXRlOwogCX0KLQkKKwogCXJldHVybiAwOwogfQogCkBAIC00ODk5LDcgKzQ5MTQsNyBAQAogCWNvbnN0IGNoYXIgKmZ3ZmlsZTsKIAljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OwogCWludCBlcnI7Ci0JCQorCiAJaWYgKGhkc3AtPmlvX3R5cGUgPT0gSDk2NTIgfHwgaGRzcC0+aW9fdHlwZSA9PSBIOTYzMikKIAkJcmV0dXJuIDA7CiAJaWYgKGhkc3AtPmlvX3R5cGUgPT0gVW5kZWZpbmVkKSB7CkBAIC00OTA4LDcgKzQ5MjMsNyBAQAogCQlpZiAoaGRzcC0+aW9fdHlwZSA9PSBIOTY1MiB8fCBoZHNwLT5pb190eXBlID09IEg5NjMyKQogCQkJcmV0dXJuIDA7CiAJfQotCQorCiAJLyogY2F1dGlvbjogbWF4IGxlbmd0aCBvZiBmaXJtd2FyZSBmaWxlbmFtZSBpcyAzMCEgKi8KIAlzd2l0Y2ggKGhkc3AtPmlvX3R5cGUpIHsKIAljYXNlIE11bHRpZmFjZToKQEAgLTQ5NDIsMTIgKzQ5NTcsMTIgQEAKIAltZW1jcHkoaGRzcC0+ZmlybXdhcmVfY2FjaGUsIGZ3LT5kYXRhLCBzaXplb2YoaGRzcC0+ZmlybXdhcmVfY2FjaGUpKTsKIAogCXJlbGVhc2VfZmlybXdhcmUoZncpOwotCQkKKwogCWhkc3AtPnN0YXRlIHw9IEhEU1BfRmlybXdhcmVDYWNoZWQ7CiAKIAlpZiAoKGVyciA9IHNuZF9oZHNwX2xvYWRfZmlybXdhcmVfZnJvbV9jYWNoZShoZHNwKSkgPCAwKQogCQlyZXR1cm4gZXJyOwotCQkKKwogCWlmICghKGhkc3AtPnN0YXRlICYgSERTUF9Jbml0aWFsaXphdGlvbkNvbXBsZXRlKSkgewogCQlpZiAoKGVyciA9IHNuZF9oZHNwX2VuYWJsZV9pbyhoZHNwKSkgPCAwKQogCQkJcmV0dXJuIGVycjsKQEAgLTQ5OTQsMTQgKzUwMDksMTQgQEAKIAloZHNwLT5tYXhfY2hhbm5lbHMgPSAyNjsKIAogCWhkc3AtPmNhcmQgPSBjYXJkOwotCQorCiAJc3Bpbl9sb2NrX2luaXQoJmhkc3AtPmxvY2spOwogCiAJdGFza2xldF9pbml0KCZoZHNwLT5taWRpX3Rhc2tsZXQsIGhkc3BfbWlkaV90YXNrbGV0LCAodW5zaWduZWQgbG9uZyloZHNwKTsKLQkKKwogCXBjaV9yZWFkX2NvbmZpZ193b3JkKGhkc3AtPnBjaSwgUENJX0NMQVNTX1JFVklTSU9OLCAmaGRzcC0+ZmlybXdhcmVfcmV2KTsKIAloZHNwLT5maXJtd2FyZV9yZXYgJj0gMHhmZjsKLQkKKwogCS8qIEZyb20gTWFydGluIEJqb2VybnNlbiA6CiAJICAgICJJdCBpcyBpbXBvcnRhbnQgdGhhdCB0aGUgY2FyZCdzIGxhdGVuY3kgdGltZXIgcmVnaXN0ZXIgaW4KIAkgICAgdGhlIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlIGlzIHNldCB0byBhIHZhbHVlIG11Y2ggbGFyZ2VyCkBAIC01MDEwLDcgKzUwMjUsNyBAQAogCSAgICB0byBpdHMgbWF4aW11bSAyNTUgdG8gYXZvaWQgcHJvYmxlbXMgd2l0aCBzb21lIGNvbXB1dGVycy4iCiAJKi8KIAlwY2lfd3JpdGVfY29uZmlnX2J5dGUoaGRzcC0+cGNpLCBQQ0lfTEFURU5DWV9USU1FUiwgMHhGRik7Ci0JCisKIAlzdHJjcHkoY2FyZC0+ZHJpdmVyLCAiSC1EU1AiKTsKIAlzdHJjcHkoY2FyZC0+bWl4ZXJuYW1lLCAiWGlsaW54IEZQR0EiKTsKIApAQCAtNTAyNCw3ICs1MDM5LDcgQEAKIAl9IGVsc2UgewogCQloZHNwLT5jYXJkX25hbWUgPSAiUk1FIEhEU1AgOTYzMiI7CiAJCWhkc3AtPm1heF9jaGFubmVscyA9IDE2OwotCQlpc185NjMyID0gMTsJCisJCWlzXzk2MzIgPSAxOwogCX0KIAogCWlmICgoZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGNpKSkgPCAwKQpAQCAtNTA1MywxMiArNTA2OCwxMiBAQAogCiAJaWYgKChlcnIgPSBzbmRfaGRzcF9pbml0aWFsaXplX21lbW9yeShoZHNwKSkgPCAwKQogCQlyZXR1cm4gZXJyOwotCQotCWlmICghaXNfOTY1MiAmJiAhaXNfOTYzMikgewotCQkvKiB3ZSB3YWl0IDIgc2Vjb25kcyB0byBsZXQgZnJlc2hseSBpbnNlcnRlZCBjYXJkYnVzIGNhcmRzIGRvIHRoZWlyIGhhcmR3YXJlIGluaXQgKi8KLQkJc3NsZWVwKDIpOwogCi0JCWVyciA9IGhkc3BfY2hlY2tfZm9yX2lvYm94KGhkc3ApOworCWlmICghaXNfOTY1MiAmJiAhaXNfOTYzMikgeworCQkvKiB3ZSB3YWl0IGEgbWF4aW11bSBvZiAxMCBzZWNvbmRzIHRvIGxldCBmcmVzaGx5CisJCSAqIGluc2VydGVkIGNhcmRidXMgY2FyZHMgZG8gdGhlaXIgaGFyZHdhcmUgaW5pdCAqLworCQllcnIgPSBoZHNwX3dhaXRfZm9yX2lvYm94KGhkc3AsIDEwMDAsIDEwKTsKKwogCQlpZiAoZXJyIDwgMCkKIAkJCXJldHVybiBlcnI7CiAKQEAgLTUwODAsMzUgKzUwOTUsMzUgQEAKIAkJCQlyZXR1cm4gZXJyOwogCQkJcmV0dXJuIDA7CiAJCX0gZWxzZSB7Ci0JCQlzbmRfcHJpbnRrKEtFUk5fSU5GTyAiSGFtbWVyZmFsbC1EU1A6IEZpcm13YXJlIGFscmVhZHkgcHJlc2VudCwgaW5pdGlhbGl6aW5nIGNhcmQuXG4iKTsJICAgIAorCQkJc25kX3ByaW50ayhLRVJOX0lORk8gIkhhbW1lcmZhbGwtRFNQOiBGaXJtd2FyZSBhbHJlYWR5IHByZXNlbnQsIGluaXRpYWxpemluZyBjYXJkLlxuIik7CiAJCQlpZiAoaGRzcF9yZWFkKGhkc3AsIEhEU1Bfc3RhdHVzMlJlZ2lzdGVyKSAmIEhEU1BfdmVyc2lvbjEpCiAJCQkJaGRzcC0+aW9fdHlwZSA9IE11bHRpZmFjZTsKLQkJCWVsc2UgCisJCQllbHNlCiAJCQkJaGRzcC0+aW9fdHlwZSA9IERpZ2lmYWNlOwogCQl9CiAJfQotCQorCiAJaWYgKChlcnIgPSBzbmRfaGRzcF9lbmFibGVfaW8oaGRzcCkpICE9IDApCiAJCXJldHVybiBlcnI7Ci0JCisKIAlpZiAoaXNfOTY1MikKIAkgICAgICAgIGhkc3AtPmlvX3R5cGUgPSBIOTY1MjsKLQkKKwogCWlmIChpc185NjMyKQogCQloZHNwLT5pb190eXBlID0gSDk2MzI7CiAKIAlpZiAoKGVyciA9IHNuZF9oZHNwX2NyZWF0ZV9od2RlcChjYXJkLCBoZHNwKSkgPCAwKQogCQlyZXR1cm4gZXJyOwotCQorCiAJc25kX2hkc3BfaW5pdGlhbGl6ZV9jaGFubmVscyhoZHNwKTsKIAlzbmRfaGRzcF9pbml0aWFsaXplX21pZGlfZmx1c2goaGRzcCk7CiAKLQloZHNwLT5zdGF0ZSB8PSBIRFNQX0Zpcm13YXJlTG9hZGVkOwkKKwloZHNwLT5zdGF0ZSB8PSBIRFNQX0Zpcm13YXJlTG9hZGVkOwogCiAJaWYgKChlcnIgPSBzbmRfaGRzcF9jcmVhdGVfYWxzYV9kZXZpY2VzKGNhcmQsIGhkc3ApKSA8IDApCiAJCXJldHVybiBlcnI7CiAKLQlyZXR1cm4gMDsJCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgc25kX2hkc3BfZnJlZShzdHJ1Y3QgaGRzcCAqaGRzcCkKQEAgLTUxMjQsMTMgKzUxMzksMTMgQEAKIAkJZnJlZV9pcnEoaGRzcC0+aXJxLCAodm9pZCAqKWhkc3ApOwogCiAJc25kX2hkc3BfZnJlZV9idWZmZXJzKGhkc3ApOwotCQorCiAJaWYgKGhkc3AtPmlvYmFzZSkKIAkJaW91bm1hcChoZHNwLT5pb2Jhc2UpOwogCiAJaWYgKGhkc3AtPnBvcnQpCiAJCXBjaV9yZWxlYXNlX3JlZ2lvbnMoaGRzcC0+cGNpKTsKLQkJCisKIAlwY2lfZGlzYWJsZV9kZXZpY2UoaGRzcC0+cGNpKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTUxNTgsOCArNTE3MywxMCBAQAogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKLQlpZiAoIShjYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCBzaXplb2Yoc3RydWN0IGhkc3ApKSkpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKKwkJCSAgICAgIHNpemVvZihzdHJ1Y3QgaGRzcCksICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCWhkc3AgPSAoc3RydWN0IGhkc3AgKikgY2FyZC0+cHJpdmF0ZV9kYXRhOwogCWNhcmQtPnByaXZhdGVfZnJlZSA9IHNuZF9oZHNwX2NhcmRfZnJlZTsKQEAgLTUxNzMsNyArNTE5MCw3IEBACiAJfQogCiAJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgIkhhbW1lcmZhbGwgRFNQIik7Ci0Jc3ByaW50ZihjYXJkLT5sb25nbmFtZSwgIiVzIGF0IDB4JWx4LCBpcnEgJWQiLCBoZHNwLT5jYXJkX25hbWUsIAorCXNwcmludGYoY2FyZC0+bG9uZ25hbWUsICIlcyBhdCAweCVseCwgaXJxICVkIiwgaGRzcC0+Y2FyZF9uYW1lLAogCQloZHNwLT5wb3J0LCBoZHNwLT5pcnEpOwogCiAJaWYgKChlcnIgPSBzbmRfY2FyZF9yZWdpc3RlcihjYXJkKSkgPCAwKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwbS5jIGIvc291bmQvcGNpL3JtZTk2NTIvaGRzcG0uYwppbmRleCA3MTIzMWNmLi5iYWMyZGMwIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwbS5jCisrKyBiL3NvdW5kL3BjaS9ybWU5NjUyL2hkc3BtLmMKQEAgLTQxMDAsMTMgKzQxMDAsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNuZF9oZHNwbV9od2RlcF9kdW1teV9vcChzdHJ1Y3Qgc25kX2h3ZGVwICogaHcsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCS8qIHdlIGhhdmUgbm90aGluZyB0byBpbml0aWFsaXplIGJ1dCB0aGUgY2FsbCBpcyByZXF1aXJlZCAqLwotCXJldHVybiAwOwotfQotCi0KIHN0YXRpYyBpbnQgc25kX2hkc3BtX2h3ZGVwX2lvY3RsKHN0cnVjdCBzbmRfaHdkZXAgKiBodywgc3RydWN0IGZpbGUgKmZpbGUsCiAJCQkJIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewpAQCAtNDIxMyw5ICs0MjA2LDcgQEAKIAlody0+cHJpdmF0ZV9kYXRhID0gaGRzcG07CiAJc3RyY3B5KGh3LT5uYW1lLCAiSERTUE0gaHdkZXAgaW50ZXJmYWNlIik7CiAKLQlody0+b3BzLm9wZW4gPSBzbmRfaGRzcG1faHdkZXBfZHVtbXlfb3A7CiAJaHctPm9wcy5pb2N0bCA9IHNuZF9oZHNwbV9od2RlcF9pb2N0bDsKLQlody0+b3BzLnJlbGVhc2UgPSBzbmRfaGRzcG1faHdkZXBfZHVtbXlfb3A7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQ1MDMsMTAgKzQ0OTQsMTAgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLAotCQkJICAgIFRISVNfTU9EVUxFLCBzaXplb2Yoc3RydWN0IGhkc3BtKSk7Ci0JaWYgKCFjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwKKwkJCSAgICAgIFRISVNfTU9EVUxFLCBzaXplb2Yoc3RydWN0IGhkc3BtKSwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJaGRzcG0gPSBjYXJkLT5wcml2YXRlX2RhdGE7CiAJY2FyZC0+cHJpdmF0ZV9mcmVlID0gc25kX2hkc3BtX2NhcmRfZnJlZTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9ybWU5NjUyL3JtZTk2NTIuYyBiL3NvdW5kL3BjaS9ybWU5NjUyL3JtZTk2NTIuYwppbmRleCAyNTcwOTA3Li5iYzUzOWFiIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvcm1lOTY1Mi9ybWU5NjUyLmMKKysrIGIvc291bmQvcGNpL3JtZTk2NTIvcm1lOTY1Mi5jCkBAIC0yNTk0LDExICsyNTk0LDExIEBACiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCi0JCQkgICAgc2l6ZW9mKHN0cnVjdCBzbmRfcm1lOTY1MikpOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKKwkJCSAgICAgIHNpemVvZihzdHJ1Y3Qgc25kX3JtZTk2NTIpLCAmY2FyZCk7CiAKLQlpZiAoIWNhcmQpCi0JCXJldHVybiAtRU5PTUVNOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJcm1lOTY1MiA9IChzdHJ1Y3Qgc25kX3JtZTk2NTIgKikgY2FyZC0+cHJpdmF0ZV9kYXRhOwogCWNhcmQtPnByaXZhdGVfZnJlZSA9IHNuZF9ybWU5NjUyX2NhcmRfZnJlZTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9zaXM3MDE5LmMgYi9zb3VuZC9wY2kvc2lzNzAxOS5jCmluZGV4IGRmMjAwN2UuLmJhZjZkOGUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9zaXM3MDE5LmMKKysrIGIvc291bmQvcGNpL3NpczcwMTkuYwpAQCAtMTM4Nyw5ICsxMzg3LDggQEAKIAlpZiAoIWVuYWJsZSkKIAkJZ290byBlcnJvcl9vdXQ7CiAKLQlyYyA9IC1FTk9NRU07Ci0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleCwgaWQsIFRISVNfTU9EVUxFLCBzaXplb2YoKnNpcykpOwotCWlmICghY2FyZCkKKwlyYyA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleCwgaWQsIFRISVNfTU9EVUxFLCBzaXplb2YoKnNpcyksICZjYXJkKTsKKwlpZiAocmMgPCAwKQogCQlnb3RvIGVycm9yX291dDsKIAogCXN0cmNweShjYXJkLT5kcml2ZXIsICJTaVM3MDE5Iik7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvc29uaWN2aWJlcy5jIGIvc291bmQvcGNpL3NvbmljdmliZXMuYwppbmRleCBjZDQwOGI4Li5kOTg5MjE1IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvc29uaWN2aWJlcy5jCisrKyBiL3NvdW5kL3BjaS9zb25pY3ZpYmVzLmMKQEAgLTI3Myw3ICsyNzMsOCBAQAogCW91dGwoY291bnQsIHNvbmljLT5kbWFhX3BvcnQgKyBTVl9ETUFfQ09VTlQwKTsKIAlvdXRiKDB4MTgsIHNvbmljLT5kbWFhX3BvcnQgKyBTVl9ETUFfTU9ERSk7CiAjaWYgMAotCXByaW50aygicHJvZ3JhbSBkbWFhOiBhZGRyID0gMHgleCwgcGFkZHIgPSAweCV4XG4iLCBhZGRyLCBpbmwoc29uaWMtPmRtYWFfcG9ydCArIFNWX0RNQV9BRERSMCkpOworCXByaW50ayhLRVJOX0RFQlVHICJwcm9ncmFtIGRtYWE6IGFkZHIgPSAweCV4LCBwYWRkciA9IDB4JXhcbiIsCisJICAgICAgIGFkZHIsIGlubChzb25pYy0+ZG1hYV9wb3J0ICsgU1ZfRE1BX0FERFIwKSk7CiAjZW5kaWYKIH0KIApAQCAtMjg4LDcgKzI4OSw4IEBACiAJb3V0bChjb3VudCwgc29uaWMtPmRtYWNfcG9ydCArIFNWX0RNQV9DT1VOVDApOwogCW91dGIoMHgxNCwgc29uaWMtPmRtYWNfcG9ydCArIFNWX0RNQV9NT0RFKTsKICNpZiAwCi0JcHJpbnRrKCJwcm9ncmFtIGRtYWM6IGFkZHIgPSAweCV4LCBwYWRkciA9IDB4JXhcbiIsIGFkZHIsIGlubChzb25pYy0+ZG1hY19wb3J0ICsgU1ZfRE1BX0FERFIwKSk7CisJcHJpbnRrKEtFUk5fREVCVUcgInByb2dyYW0gZG1hYzogYWRkciA9IDB4JXgsIHBhZGRyID0gMHgleFxuIiwKKwkgICAgICAgYWRkciwgaW5sKHNvbmljLT5kbWFjX3BvcnQgKyBTVl9ETUFfQUREUjApKTsKICNlbmRpZgogfQogCkBAIC0zNTUsNzEgKzM1NywxMDQgQEAKICNpZiAwCiBzdGF0aWMgdm9pZCBzbmRfc29uaWN2aWJlc19kZWJ1ZyhzdHJ1Y3Qgc29uaWN2aWJlcyAqIHNvbmljKQogewotCXByaW50aygiU1YgUkVHUzogICAgICAgICAgSU5ERVggPSAweCUwMnggICIsIGluYihTVl9SRUcoc29uaWMsIElOREVYKSkpOworCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICJTViBSRUdTOiAgICAgICAgICBJTkRFWCA9IDB4JTAyeCAgIiwgaW5iKFNWX1JFRyhzb25pYywgSU5ERVgpKSk7CiAJcHJpbnRrKCIgICAgICAgICAgICAgICAgIFNUQVRVUyA9IDB4JTAyeFxuIiwgaW5iKFNWX1JFRyhzb25pYywgU1RBVFVTKSkpOwotCXByaW50aygiICAweDAwOiBsZWZ0IGlucHV0ICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDAwKSk7CisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgIiAgMHgwMDogbGVmdCBpbnB1dCAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgwMCkpOwogCXByaW50aygiICAweDIwOiBzeW50aCByYXRlIGxvdyAgPSAweCUwMnhcbiIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDIwKSk7Ci0JcHJpbnRrKCIgIDB4MDE6IHJpZ2h0IGlucHV0ICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MDEpKTsKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAiICAweDAxOiByaWdodCBpbnB1dCAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDAxKSk7CiAJcHJpbnRrKCIgIDB4MjE6IHN5bnRoIHJhdGUgaGlnaCA9IDB4JTAyeFxuIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MjEpKTsKLQlwcmludGsoIiAgMHgwMjogbGVmdCBBVVgxICAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgwMikpOworCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICIgIDB4MDI6IGxlZnQgQVVYMSAgICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MDIpKTsKIAlwcmludGsoIiAgMHgyMjogQURDIGNsb2NrICAgICAgID0gMHglMDJ4XG4iLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgyMikpOwotCXByaW50aygiICAweDAzOiByaWdodCBBVVgxICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDAzKSk7CisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgIiAgMHgwMzogcmlnaHQgQVVYMSAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgwMykpOwogCXByaW50aygiICAweDIzOiBBREMgYWx0IHJhdGUgICAgPSAweCUwMnhcbiIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDIzKSk7Ci0JcHJpbnRrKCIgIDB4MDQ6IGxlZnQgQ0QgICAgICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MDQpKTsKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAiICAweDA0OiBsZWZ0IENEICAgICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDA0KSk7CiAJcHJpbnRrKCIgIDB4MjQ6IEFEQyBwbGwgTSAgICAgICA9IDB4JTAyeFxuIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MjQpKTsKLQlwcmludGsoIiAgMHgwNTogcmlnaHQgQ0QgICAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgwNSkpOworCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICIgIDB4MDU6IHJpZ2h0IENEICAgICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MDUpKTsKIAlwcmludGsoIiAgMHgyNTogQURDIHBsbCBOICAgICAgID0gMHglMDJ4XG4iLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgyNSkpOwotCXByaW50aygiICAweDA2OiBsZWZ0IGxpbmUgICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDA2KSk7CisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgIiAgMHgwNjogbGVmdCBsaW5lICAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgwNikpOwogCXByaW50aygiICAweDI2OiBTeW50aCBwbGwgTSAgICAgPSAweCUwMnhcbiIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDI2KSk7Ci0JcHJpbnRrKCIgIDB4MDc6IHJpZ2h0IGxpbmUgICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MDcpKTsKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAiICAweDA3OiByaWdodCBsaW5lICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDA3KSk7CiAJcHJpbnRrKCIgIDB4Mjc6IFN5bnRoIHBsbCBOICAgICA9IDB4JTAyeFxuIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MjcpKTsKLQlwcmludGsoIiAgMHgwODogTUlDICAgICAgICAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgwOCkpOworCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICIgIDB4MDg6IE1JQyAgICAgICAgICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MDgpKTsKIAlwcmludGsoIiAgMHgyODogLS0tICAgICAgICAgICAgID0gMHglMDJ4XG4iLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgyOCkpOwotCXByaW50aygiICAweDA5OiBHYW1lIHBvcnQgICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDA5KSk7CisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgIiAgMHgwOTogR2FtZSBwb3J0ICAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgwOSkpOwogCXByaW50aygiICAweDI5OiAtLS0gICAgICAgICAgICAgPSAweCUwMnhcbiIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDI5KSk7Ci0JcHJpbnRrKCIgIDB4MGE6IGxlZnQgc3ludGggICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MGEpKTsKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAiICAweDBhOiBsZWZ0IHN5bnRoICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDBhKSk7CiAJcHJpbnRrKCIgIDB4MmE6IE1QVTQwMSAgICAgICAgICA9IDB4JTAyeFxuIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MmEpKTsKLQlwcmludGsoIiAgMHgwYjogcmlnaHQgc3ludGggICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgwYikpOworCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICIgIDB4MGI6IHJpZ2h0IHN5bnRoICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MGIpKTsKIAlwcmludGsoIiAgMHgyYjogZHJpdmUgY3RybCAgICAgID0gMHglMDJ4XG4iLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgyYikpOwotCXByaW50aygiICAweDBjOiBsZWZ0IEFVWDIgICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDBjKSk7CisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgIiAgMHgwYzogbGVmdCBBVVgyICAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgwYykpOwogCXByaW50aygiICAweDJjOiBTUlMgc3BhY2UgICAgICAgPSAweCUwMnhcbiIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDJjKSk7Ci0JcHJpbnRrKCIgIDB4MGQ6IHJpZ2h0IEFVWDIgICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MGQpKTsKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAiICAweDBkOiByaWdodCBBVVgyICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDBkKSk7CiAJcHJpbnRrKCIgIDB4MmQ6IFNSUyBjZW50ZXIgICAgICA9IDB4JTAyeFxuIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MmQpKTsKLQlwcmludGsoIiAgMHgwZTogbGVmdCBhbmFsb2cgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgwZSkpOworCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICIgIDB4MGU6IGxlZnQgYW5hbG9nICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MGUpKTsKIAlwcmludGsoIiAgMHgyZTogd2F2ZSBzb3VyY2UgICAgID0gMHglMDJ4XG4iLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgyZSkpOwotCXByaW50aygiICAweDBmOiByaWdodCBhbmFsb2cgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDBmKSk7CisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgIiAgMHgwZjogcmlnaHQgYW5hbG9nICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgwZikpOwogCXByaW50aygiICAweDJmOiAtLS0gICAgICAgICAgICAgPSAweCUwMnhcbiIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDJmKSk7Ci0JcHJpbnRrKCIgIDB4MTA6IGxlZnQgUENNICAgICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MTApKTsKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAiICAweDEwOiBsZWZ0IFBDTSAgICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDEwKSk7CiAJcHJpbnRrKCIgIDB4MzA6IGFuYWxvZyBwb3dlciAgICA9IDB4JTAyeFxuIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MzApKTsKLQlwcmludGsoIiAgMHgxMTogcmlnaHQgUENNICAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgxMSkpOworCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICIgIDB4MTE6IHJpZ2h0IFBDTSAgICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MTEpKTsKIAlwcmludGsoIiAgMHgzMTogYW5hbG9nIHBvd2VyICAgID0gMHglMDJ4XG4iLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgzMSkpOwotCXByaW50aygiICAweDEyOiBETUEgZGF0YSBmb3JtYXQgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDEyKSk7CisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgIiAgMHgxMjogRE1BIGRhdGEgZm9ybWF0ID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgxMikpOwogCXByaW50aygiICAweDMyOiAtLS0gICAgICAgICAgICAgPSAweCUwMnhcbiIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDMyKSk7Ci0JcHJpbnRrKCIgIDB4MTM6IFAvQyBlbmFibGUgICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MTMpKTsKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAiICAweDEzOiBQL0MgZW5hYmxlICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDEzKSk7CiAJcHJpbnRrKCIgIDB4MzM6IC0tLSAgICAgICAgICAgICA9IDB4JTAyeFxuIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MzMpKTsKLQlwcmludGsoIiAgMHgxNDogVS9EIGJ1dHRvbiAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgxNCkpOworCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICIgIDB4MTQ6IFUvRCBidXR0b24gICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MTQpKTsKIAlwcmludGsoIiAgMHgzNDogLS0tICAgICAgICAgICAgID0gMHglMDJ4XG4iLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgzNCkpOwotCXByaW50aygiICAweDE1OiByZXZpc2lvbiAgICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDE1KSk7CisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgIiAgMHgxNTogcmV2aXNpb24gICAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgxNSkpOwogCXByaW50aygiICAweDM1OiAtLS0gICAgICAgICAgICAgPSAweCUwMnhcbiIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDM1KSk7Ci0JcHJpbnRrKCIgIDB4MTY6IEFEQyBvdXRwdXQgY3RybCA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MTYpKTsKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAiICAweDE2OiBBREMgb3V0cHV0IGN0cmwgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDE2KSk7CiAJcHJpbnRrKCIgIDB4MzY6IC0tLSAgICAgICAgICAgICA9IDB4JTAyeFxuIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MzYpKTsKLQlwcmludGsoIiAgMHgxNzogLS0tICAgICAgICAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgxNykpOworCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICIgIDB4MTc6IC0tLSAgICAgICAgICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MTcpKTsKIAlwcmludGsoIiAgMHgzNzogLS0tICAgICAgICAgICAgID0gMHglMDJ4XG4iLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgzNykpOwotCXByaW50aygiICAweDE4OiBETUEgQSB1cHBlciBjbnQgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDE4KSk7CisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgIiAgMHgxODogRE1BIEEgdXBwZXIgY250ID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgxOCkpOwogCXByaW50aygiICAweDM4OiAtLS0gICAgICAgICAgICAgPSAweCUwMnhcbiIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDM4KSk7Ci0JcHJpbnRrKCIgIDB4MTk6IERNQSBBIGxvd2VyIGNudCA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MTkpKTsKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAiICAweDE5OiBETUEgQSBsb3dlciBjbnQgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDE5KSk7CiAJcHJpbnRrKCIgIDB4Mzk6IC0tLSAgICAgICAgICAgICA9IDB4JTAyeFxuIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MzkpKTsKLQlwcmludGsoIiAgMHgxYTogLS0tICAgICAgICAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgxYSkpOworCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICIgIDB4MWE6IC0tLSAgICAgICAgICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MWEpKTsKIAlwcmludGsoIiAgMHgzYTogLS0tICAgICAgICAgICAgID0gMHglMDJ4XG4iLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgzYSkpOwotCXByaW50aygiICAweDFiOiAtLS0gICAgICAgICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDFiKSk7CisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgIiAgMHgxYjogLS0tICAgICAgICAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgxYikpOwogCXByaW50aygiICAweDNiOiAtLS0gICAgICAgICAgICAgPSAweCUwMnhcbiIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDNiKSk7Ci0JcHJpbnRrKCIgIDB4MWM6IERNQSBDIHVwcGVyIGNudCA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MWMpKTsKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAiICAweDFjOiBETUEgQyB1cHBlciBjbnQgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDFjKSk7CiAJcHJpbnRrKCIgIDB4M2M6IC0tLSAgICAgICAgICAgICA9IDB4JTAyeFxuIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4M2MpKTsKLQlwcmludGsoIiAgMHgxZDogRE1BIEMgdXBwZXIgY250ID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgxZCkpOworCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICIgIDB4MWQ6IERNQSBDIHVwcGVyIGNudCA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MWQpKTsKIAlwcmludGsoIiAgMHgzZDogLS0tICAgICAgICAgICAgID0gMHglMDJ4XG4iLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgzZCkpOwotCXByaW50aygiICAweDFlOiBQQ00gcmF0ZSBsb3cgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDFlKSk7CisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgIiAgMHgxZTogUENNIHJhdGUgbG93ICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgxZSkpOwogCXByaW50aygiICAweDNlOiAtLS0gICAgICAgICAgICAgPSAweCUwMnhcbiIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDNlKSk7Ci0JcHJpbnRrKCIgIDB4MWY6IFBDTSByYXRlIGhpZ2ggICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MWYpKTsKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAiICAweDFmOiBQQ00gcmF0ZSBoaWdoICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDFmKSk7CiAJcHJpbnRrKCIgIDB4M2Y6IC0tLSAgICAgICAgICAgICA9IDB4JTAyeFxuIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4M2YpKTsKIH0KIApAQCAtNDc2LDggKzUxMSw4IEBACiAJKnJlc19tID0gbTsKIAkqcmVzX24gPSBuOwogI2lmIDAKLQlwcmludGsoIm1ldHJpYyA9ICVpLCB4bSA9ICVpLCB4biA9ICVpXG4iLCBtZXRyaWMsIHhtLCB4bik7Ci0JcHJpbnRrKCJwbGw6IG0gPSAweCV4LCByID0gMHgleCwgbiA9IDB4JXhcbiIsIHJlZywgbSwgciwgbik7CisJcHJpbnRrKEtFUk5fREVCVUcgIm1ldHJpYyA9ICVpLCB4bSA9ICVpLCB4biA9ICVpXG4iLCBtZXRyaWMsIHhtLCB4bik7CisJcHJpbnRrKEtFUk5fREVCVUcgInBsbDogbSA9IDB4JXgsIHIgPSAweCV4LCBuID0gMHgleFxuIiwgcmVnLCBtLCByLCBuKTsKICNlbmRpZgogfQogCkBAIC0xNDIzLDkgKzE0NTgsOSBAQAogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAgCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAJZm9yIChpZHggPSAwOyBpZHggPCA1OyBpZHgrKykgewogCQlpZiAocGNpX3Jlc291cmNlX3N0YXJ0KHBjaSwgaWR4KSA9PSAwIHx8CiAJCSAgICAhKHBjaV9yZXNvdXJjZV9mbGFncyhwY2ksIGlkeCkgJiBJT1JFU09VUkNFX0lPKSkgewpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3RyaWRlbnQvdHJpZGVudC5jIGIvc291bmQvcGNpL3RyaWRlbnQvdHJpZGVudC5jCmluZGV4IGQ5NGIxNmYuLjIxY2VmOTcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS90cmlkZW50L3RyaWRlbnQuYworKysgYi9zb3VuZC9wY2kvdHJpZGVudC90cmlkZW50LmMKQEAgLTg5LDkgKzg5LDkgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAlpZiAoKGVyciA9IHNuZF90cmlkZW50X2NyZWF0ZShjYXJkLCBwY2ksCiAJCQkJICAgICAgcGNtX2NoYW5uZWxzW2Rldl0sCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvdHJpZGVudC90cmlkZW50X21haW4uYyBiL3NvdW5kL3BjaS90cmlkZW50L3RyaWRlbnRfbWFpbi5jCmluZGV4IGM2MTJiNDMuLmE5ZGE5YzEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS90cmlkZW50L3RyaWRlbnRfbWFpbi5jCisrKyBiL3NvdW5kL3BjaS90cmlkZW50L3RyaWRlbnRfbWFpbi5jCkBAIC02OCw0MCArNjgsNDAgQEAKIHsKIAl1bnNpZ25lZCBpbnQgdmFsLCB0bXA7CiAKLQlwcmludGsoIlRyaWRlbnQgdm9pY2UgJWk6XG4iLCB2b2ljZSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIlRyaWRlbnQgdm9pY2UgJWk6XG4iLCB2b2ljZSk7CiAJb3V0Yih2b2ljZSwgVFJJRF9SRUcodHJpZGVudCwgVDREX0xGT19HQ19DSVIpKTsKIAl2YWwgPSBpbmwoVFJJRF9SRUcodHJpZGVudCwgQ0hfTEJBKSk7Ci0JcHJpbnRrKCJMQkE6IDB4JXhcbiIsIHZhbCk7CisJcHJpbnRrKEtFUk5fREVCVUcgIkxCQTogMHgleFxuIiwgdmFsKTsKIAl2YWwgPSBpbmwoVFJJRF9SRUcodHJpZGVudCwgQ0hfR1ZTRUxfUEFOX1ZPTF9DVFJMX0VDKSk7Ci0JcHJpbnRrKCJHVlNlbDogJWlcbiIsIHZhbCA+PiAzMSk7Ci0JcHJpbnRrKCJQYW46IDB4JXhcbiIsICh2YWwgPj4gMjQpICYgMHg3Zik7Ci0JcHJpbnRrKCJWb2w6IDB4JXhcbiIsICh2YWwgPj4gMTYpICYgMHhmZik7Ci0JcHJpbnRrKCJDVFJMOiAweCV4XG4iLCAodmFsID4+IDEyKSAmIDB4MGYpOwotCXByaW50aygiRUM6IDB4JXhcbiIsIHZhbCAmIDB4MGZmZik7CisJcHJpbnRrKEtFUk5fREVCVUcgIkdWU2VsOiAlaVxuIiwgdmFsID4+IDMxKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiUGFuOiAweCV4XG4iLCAodmFsID4+IDI0KSAmIDB4N2YpOworCXByaW50ayhLRVJOX0RFQlVHICJWb2w6IDB4JXhcbiIsICh2YWwgPj4gMTYpICYgMHhmZik7CisJcHJpbnRrKEtFUk5fREVCVUcgIkNUUkw6IDB4JXhcbiIsICh2YWwgPj4gMTIpICYgMHgwZik7CisJcHJpbnRrKEtFUk5fREVCVUcgIkVDOiAweCV4XG4iLCB2YWwgJiAweDBmZmYpOwogCWlmICh0cmlkZW50LT5kZXZpY2UgIT0gVFJJREVOVF9ERVZJQ0VfSURfTlgpIHsKIAkJdmFsID0gaW5sKFRSSURfUkVHKHRyaWRlbnQsIENIX0RYX0NTT19BTFBIQV9GTVMpKTsKLQkJcHJpbnRrKCJDU086IDB4JXhcbiIsIHZhbCA+PiAxNik7CisJCXByaW50ayhLRVJOX0RFQlVHICJDU086IDB4JXhcbiIsIHZhbCA+PiAxNik7CiAJCXByaW50aygiQWxwaGE6IDB4JXhcbiIsICh2YWwgPj4gNCkgJiAweDBmZmYpOwotCQlwcmludGsoIkZNUzogMHgleFxuIiwgdmFsICYgMHgwZik7CisJCXByaW50ayhLRVJOX0RFQlVHICJGTVM6IDB4JXhcbiIsIHZhbCAmIDB4MGYpOwogCQl2YWwgPSBpbmwoVFJJRF9SRUcodHJpZGVudCwgQ0hfRFhfRVNPX0RFTFRBKSk7Ci0JCXByaW50aygiRVNPOiAweCV4XG4iLCB2YWwgPj4gMTYpOwotCQlwcmludGsoIkRlbHRhOiAweCV4XG4iLCB2YWwgJiAweGZmZmYpOworCQlwcmludGsoS0VSTl9ERUJVRyAiRVNPOiAweCV4XG4iLCB2YWwgPj4gMTYpOworCQlwcmludGsoS0VSTl9ERUJVRyAiRGVsdGE6IDB4JXhcbiIsIHZhbCAmIDB4ZmZmZik7CiAJCXZhbCA9IGlubChUUklEX1JFRyh0cmlkZW50LCBDSF9EWF9GTUNfUlZPTF9DVk9MKSk7CiAJfSBlbHNlIHsJCS8vIFRSSURFTlRfREVWSUNFX0lEX05YCiAJCXZhbCA9IGlubChUUklEX1JFRyh0cmlkZW50LCBDSF9OWF9ERUxUQV9DU08pKTsKIAkJdG1wID0gKHZhbCA+PiAyNCkgJiAweGZmOwotCQlwcmludGsoIkNTTzogMHgleFxuIiwgdmFsICYgMHgwMGZmZmZmZik7CisJCXByaW50ayhLRVJOX0RFQlVHICJDU086IDB4JXhcbiIsIHZhbCAmIDB4MDBmZmZmZmYpOwogCQl2YWwgPSBpbmwoVFJJRF9SRUcodHJpZGVudCwgQ0hfTlhfREVMVEFfRVNPKSk7CiAJCXRtcCB8PSAodmFsID4+IDE2KSAmIDB4ZmYwMDsKLQkJcHJpbnRrKCJEZWx0YTogMHgleFxuIiwgdG1wKTsKLQkJcHJpbnRrKCJFU086IDB4JXhcbiIsIHZhbCAmIDB4MDBmZmZmZmYpOworCQlwcmludGsoS0VSTl9ERUJVRyAiRGVsdGE6IDB4JXhcbiIsIHRtcCk7CisJCXByaW50ayhLRVJOX0RFQlVHICJFU086IDB4JXhcbiIsIHZhbCAmIDB4MDBmZmZmZmYpOwogCQl2YWwgPSBpbmwoVFJJRF9SRUcodHJpZGVudCwgQ0hfTlhfQUxQSEFfRk1TX0ZNQ19SVk9MX0NWT0wpKTsKLQkJcHJpbnRrKCJBbHBoYTogMHgleFxuIiwgdmFsID4+IDIwKTsKLQkJcHJpbnRrKCJGTVM6IDB4JXhcbiIsICh2YWwgPj4gMTYpICYgMHgwZik7CisJCXByaW50ayhLRVJOX0RFQlVHICJBbHBoYTogMHgleFxuIiwgdmFsID4+IDIwKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkZNUzogMHgleFxuIiwgKHZhbCA+PiAxNikgJiAweDBmKTsKIAl9Ci0JcHJpbnRrKCJGTUM6IDB4JXhcbiIsICh2YWwgPj4gMTQpICYgMyk7Ci0JcHJpbnRrKCJSVm9sOiAweCV4XG4iLCAodmFsID4+IDcpICYgMHg3Zik7Ci0JcHJpbnRrKCJDVm9sOiAweCV4XG4iLCB2YWwgJiAweDdmKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiRk1DOiAweCV4XG4iLCAodmFsID4+IDE0KSAmIDMpOworCXByaW50ayhLRVJOX0RFQlVHICJSVm9sOiAweCV4XG4iLCAodmFsID4+IDcpICYgMHg3Zik7CisJcHJpbnRrKEtFUk5fREVCVUcgIkNWb2w6IDB4JXhcbiIsIHZhbCAmIDB4N2YpOwogfQogI2VuZGlmCiAKQEAgLTQ5NiwxMiArNDk2LDE3IEBACiAJb3V0bChyZWdzWzRdLCBUUklEX1JFRyh0cmlkZW50LCBDSF9TVEFSVCArIDE2KSk7CiAKICNpZiAwCi0JcHJpbnRrKCJ3cml0dGVuICVpIGNoYW5uZWw6XG4iLCB2b2ljZS0+bnVtYmVyKTsKLQlwcmludGsoIiAgcmVnc1swXSA9IDB4JXgvMHgleFxuIiwgcmVnc1swXSwgaW5sKFRSSURfUkVHKHRyaWRlbnQsIENIX1NUQVJUICsgMCkpKTsKLQlwcmludGsoIiAgcmVnc1sxXSA9IDB4JXgvMHgleFxuIiwgcmVnc1sxXSwgaW5sKFRSSURfUkVHKHRyaWRlbnQsIENIX1NUQVJUICsgNCkpKTsKLQlwcmludGsoIiAgcmVnc1syXSA9IDB4JXgvMHgleFxuIiwgcmVnc1syXSwgaW5sKFRSSURfUkVHKHRyaWRlbnQsIENIX1NUQVJUICsgOCkpKTsKLQlwcmludGsoIiAgcmVnc1szXSA9IDB4JXgvMHgleFxuIiwgcmVnc1szXSwgaW5sKFRSSURfUkVHKHRyaWRlbnQsIENIX1NUQVJUICsgMTIpKSk7Ci0JcHJpbnRrKCIgIHJlZ3NbNF0gPSAweCV4LzB4JXhcbiIsIHJlZ3NbNF0sIGlubChUUklEX1JFRyh0cmlkZW50LCBDSF9TVEFSVCArIDE2KSkpOworCXByaW50ayhLRVJOX0RFQlVHICJ3cml0dGVuICVpIGNoYW5uZWw6XG4iLCB2b2ljZS0+bnVtYmVyKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiICByZWdzWzBdID0gMHgleC8weCV4XG4iLAorCSAgICAgICByZWdzWzBdLCBpbmwoVFJJRF9SRUcodHJpZGVudCwgQ0hfU1RBUlQgKyAwKSkpOworCXByaW50ayhLRVJOX0RFQlVHICIgIHJlZ3NbMV0gPSAweCV4LzB4JXhcbiIsCisJICAgICAgIHJlZ3NbMV0sIGlubChUUklEX1JFRyh0cmlkZW50LCBDSF9TVEFSVCArIDQpKSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIiAgcmVnc1syXSA9IDB4JXgvMHgleFxuIiwKKwkgICAgICAgcmVnc1syXSwgaW5sKFRSSURfUkVHKHRyaWRlbnQsIENIX1NUQVJUICsgOCkpKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiICByZWdzWzNdID0gMHgleC8weCV4XG4iLAorCSAgICAgICByZWdzWzNdLCBpbmwoVFJJRF9SRUcodHJpZGVudCwgQ0hfU1RBUlQgKyAxMikpKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiICByZWdzWzRdID0gMHgleC8weCV4XG4iLAorCSAgICAgICByZWdzWzRdLCBpbmwoVFJJRF9SRUcodHJpZGVudCwgQ0hfU1RBUlQgKyAxNikpKTsKICNlbmRpZgogfQogCkBAIC01ODMsNyArNTg4LDcgQEAKIAkJb3V0Yih2b2ljZS0+Vm9sID4+IDIsIFRSSURfUkVHKHRyaWRlbnQsIENIX0dWU0VMX1BBTl9WT0xfQ1RSTF9FQyArIDIpKTsKIAkJYnJlYWs7CiAJY2FzZSBUUklERU5UX0RFVklDRV9JRF9TSTcwMTg6Ci0JCS8vIHByaW50aygidm9pY2UtPlZvbCA9IDB4JXhcbiIsIHZvaWNlLT5Wb2wpOworCQkvKiBwcmludGsoS0VSTl9ERUJVRyAidm9pY2UtPlZvbCA9IDB4JXhcbiIsIHZvaWNlLT5Wb2wpOyAqLwogCQlvdXR3KCh2b2ljZS0+Q1RSTCA8PCAxMikgfCB2b2ljZS0+Vm9sLAogCQkgICAgIFRSSURfUkVHKHRyaWRlbnQsIENIX0dWU0VMX1BBTl9WT0xfQ1RSTF9FQykpOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS92aWE4Mnh4LmMgYi9zb3VuZC9wY2kvdmlhODJ4eC5jCmluZGV4IDFhYWZlOTUuLjgwOWIyMzMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS92aWE4Mnh4LmMKKysrIGIvc291bmQvcGNpL3ZpYTgyeHguYwpAQCAtNDY2LDcgKzQ2NiwxMCBAQAogCQkJCQlmbGFnID0gVklBX1RCTF9CSVRfRkxBRzsgLyogcGVyaW9kIGJvdW5kYXJ5ICovCiAJCQl9IGVsc2UKIAkJCQlmbGFnID0gMDsgLyogcGVyaW9kIGNvbnRpbnVlcyB0byB0aGUgbmV4dCAqLwotCQkJLy8gcHJpbnRrKCJ2aWE6IHRibCAlZDogYXQgJWQgIHNpemUgJWQgKHJlc3QgJWQpXG4iLCBpZHgsIG9mcywgciwgcmVzdCk7CisJCQkvKgorCQkJcHJpbnRrKEtFUk5fREVCVUcgInZpYTogdGJsICVkOiBhdCAlZCAgc2l6ZSAlZCAiCisJCQkgICAgICAgIihyZXN0ICVkKVxuIiwgaWR4LCBvZnMsIHIsIHJlc3QpOworCQkJKi8KIAkJCSgodTMyICopZGV2LT50YWJsZS5hcmVhKVsoaWR4PDwxKSArIDFdID0gY3B1X3RvX2xlMzIociB8IGZsYWcpOwogCQkJZGV2LT5pZHhfdGFibGVbaWR4XS5vZmZzZXQgPSBvZnM7CiAJCQlkZXYtPmlkeF90YWJsZVtpZHhdLnNpemUgPSByOwpAQCAtMjM2MCwxNCArMjM2MywxNCBAQAogCVNORF9QQ0lfUVVJUksoMHgxMDE5LCAweDA5OTYsICJFU0MgTW9ibyIsIFZJQV9EWFNfNDhLKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAxOSwgMHgwYTgxLCAiRUNTIEs3VlRBMyB2OC4wIiwgVklBX0RYU19OT19WUkEpLAogCVNORF9QQ0lfUVVJUksoMHgxMDE5LCAweDBhODUsICJFQ1MgTDdWTU0yIiwgVklBX0RYU19OT19WUkEpLAotCVNORF9QQ0lfUVVJUksoMHgxMDE5LCAwLCAiRVNDIEs4IiwgVklBX0RYU19TUkMpLAorCVNORF9QQ0lfUVVJUktfVkVORE9SKDB4MTAxOSwgIkVTQyBLOCIsIFZJQV9EWFNfU1JDKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAxOSwgMHhhYTAxLCAiRVNDIEs4VDg5MC1BIiwgVklBX0RYU19TUkMpLAogCVNORF9QQ0lfUVVJUksoMHgxMDI1LCAweDAwMzMsICJBY2VyIEluc3BpcmUgMTM1M0xNIiwgVklBX0RYU19OT19WUkEpLAogCVNORF9QQ0lfUVVJUksoMHgxMDI1LCAweDAwNDYsICJBY2VyIEFzcGlyZSAxNTI0IFdMTWkiLCBWSUFfRFhTX1NSQyksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDAsICJBU1VTIEE3L0E4IiwgVklBX0RYU19OT19WUkEpLAotCVNORF9QQ0lfUVVJUksoMHgxMDcxLCAwLCAiRGl2ZXJzZSBOb3RlYm9vayIsIFZJQV9EWFNfTk9fVlJBKSwKKwlTTkRfUENJX1FVSVJLX1ZFTkRPUigweDEwNDMsICJBU1VTIEE3L0E4IiwgVklBX0RYU19OT19WUkEpLAorCVNORF9QQ0lfUVVJUktfVkVORE9SKDB4MTA3MSwgIkRpdmVyc2UgTm90ZWJvb2siLCBWSUFfRFhTX05PX1ZSQSksCiAJU05EX1BDSV9RVUlSSygweDEwY2YsIDB4MTE4ZSwgIkZTQyBMYXB0b3AiLCBWSUFfRFhTX0VOQUJMRSksCi0JU05EX1BDSV9RVUlSSygweDExMDYsIDAsICJBU1JvY2siLCBWSUFfRFhTX1NSQyksCisJU05EX1BDSV9RVUlSS19WRU5ET1IoMHgxMTA2LCAiQVNSb2NrIiwgVklBX0RYU19TUkMpLAogCVNORF9QQ0lfUVVJUksoMHgxMjk3LCAweGEyMzEsICJTaHV0dGxlIEFLMzF2MiIsIFZJQV9EWFNfU1JDKSwKIAlTTkRfUENJX1FVSVJLKDB4MTI5NywgMHhhMjMyLCAiU2h1dHRsZSIsIFZJQV9EWFNfU1JDKSwKIAlTTkRfUENJX1FVSVJLKDB4MTI5NywgMHhjMTYwLCAiU2h1dHRsZSBTazQxRyIsIFZJQV9EWFNfU1JDKSwKQEAgLTIzNzUsNyArMjM3OCw3IEBACiAJU05EX1BDSV9RVUlSSygweDE0NjIsIDB4MzgwMCwgIk1TSSBLVDI2NiIsIFZJQV9EWFNfRU5BQkxFKSwKIAlTTkRfUENJX1FVSVJLKDB4MTQ2MiwgMHg3MTIwLCAiTVNJIEtUNFYiLCBWSUFfRFhTX0VOQUJMRSksCiAJU05EX1BDSV9RVUlSSygweDE0NjIsIDB4NzE0MiwgIk1TSSBLOE1NLVYiLCBWSUFfRFhTX0VOQUJMRSksCi0JU05EX1BDSV9RVUlSSygweDE0NjIsIDAsICJNU0kgTW9ibyIsIFZJQV9EWFNfU1JDKSwKKwlTTkRfUENJX1FVSVJLX1ZFTkRPUigweDE0NjIsICJNU0kgTW9ibyIsIFZJQV9EWFNfU1JDKSwKIAlTTkRfUENJX1FVSVJLKDB4MTQ3YiwgMHgxNDAxLCAiQUJJVCBLRDcoLVJBSUQpIiwgVklBX0RYU19FTkFCTEUpLAogCVNORF9QQ0lfUVVJUksoMHgxNDdiLCAweDE0MTEsICJBQklUIFZBLTIwIiwgVklBX0RYU19FTkFCTEUpLAogCVNORF9QQ0lfUVVJUksoMHgxNDdiLCAweDE0MTMsICJBQklUIEtWOCBQcm8iLCBWSUFfRFhTX0VOQUJMRSksCkBAIC0yMzg5LDExICsyMzkyLDExIEBACiAJU05EX1BDSV9RVUlSSygweDE2MWYsIDB4MjAzMiwgIm02ODB4IG1hY2hpbmVzIiwgVklBX0RYU180OEspLAogCVNORF9QQ0lfUVVJUksoMHgxNjMxLCAweGUwMDQsICJQQiBFYXN5Tm90ZSAzMTc0IiwgVklBX0RYU19FTkFCTEUpLAogCVNORF9QQ0lfUVVJUksoMHgxNjk1LCAweDMwMDUsICJFUG9YIEVQLThLOUEiLCBWSUFfRFhTX0VOQUJMRSksCi0JU05EX1BDSV9RVUlSSygweDE2OTUsIDAsICJFUG9YIG1vYm8iLCBWSUFfRFhTX1NSQyksCi0JU05EX1BDSV9RVUlSSygweDE2ZjMsIDAsICJKZXR3YXkgSzgiLCBWSUFfRFhTX1NSQyksCi0JU05EX1BDSV9RVUlSSygweDE3MzQsIDAsICJGU0MgTGFwdG9wIiwgVklBX0RYU19TUkMpLAorCVNORF9QQ0lfUVVJUktfVkVORE9SKDB4MTY5NSwgIkVQb1ggbW9ibyIsIFZJQV9EWFNfU1JDKSwKKwlTTkRfUENJX1FVSVJLX1ZFTkRPUigweDE2ZjMsICJKZXR3YXkgSzgiLCBWSUFfRFhTX1NSQyksCisJU05EX1BDSV9RVUlSS19WRU5ET1IoMHgxNzM0LCAiRlNDIExhcHRvcCIsIFZJQV9EWFNfU1JDKSwKIAlTTkRfUENJX1FVSVJLKDB4MTg0OSwgMHgzMDU5LCAiQVNSb2NrIEs3Vk0yIiwgVklBX0RYU19OT19WUkEpLAotCVNORF9QQ0lfUVVJUksoMHgxODQ5LCAwLCAiQVNSb2NrIG1vYm8iLCBWSUFfRFhTX1NSQyksCisJU05EX1BDSV9RVUlSS19WRU5ET1IoMHgxODQ5LCAiQVNSb2NrIG1vYm8iLCBWSUFfRFhTX1NSQyksCiAJU05EX1BDSV9RVUlSSygweDE5MTksIDB4MjAwYSwgIlNvbHRlayBTTC1LOCIsICBWSUFfRFhTX05PX1ZSQSksCiAJU05EX1BDSV9RVUlSSygweDQwMDUsIDB4NDcxMCwgIk1TSSBLN1QyNjYiLCBWSUFfRFhTX1NSQyksCiAJeyB9IC8qIHRlcm1pbmF0b3IgKi8KQEAgLTI0MzMsOSArMjQzNiw5IEBACiAJdW5zaWduZWQgaW50IGk7CiAJaW50IGVycjsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCWNhcmRfdHlwZSA9IHBjaV9pZC0+ZHJpdmVyX2RhdGE7CiAJc3dpdGNoIChjYXJkX3R5cGUpIHsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS92aWE4Mnh4X21vZGVtLmMgYi9zb3VuZC9wY2kvdmlhODJ4eF9tb2RlbS5jCmluZGV4IDViZDc5ZDIuLjBkNTRlMzUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS92aWE4Mnh4X21vZGVtLmMKKysrIGIvc291bmQvcGNpL3ZpYTgyeHhfbW9kZW0uYwpAQCAtMzI4LDcgKzMyOCwxMCBAQAogCQkJCQlmbGFnID0gVklBX1RCTF9CSVRfRkxBRzsgLyogcGVyaW9kIGJvdW5kYXJ5ICovCiAJCQl9IGVsc2UKIAkJCQlmbGFnID0gMDsgLyogcGVyaW9kIGNvbnRpbnVlcyB0byB0aGUgbmV4dCAqLwotCQkJLy8gcHJpbnRrKCJ2aWE6IHRibCAlZDogYXQgJWQgIHNpemUgJWQgKHJlc3QgJWQpXG4iLCBpZHgsIG9mcywgciwgcmVzdCk7CisJCQkvKgorCQkJcHJpbnRrKEtFUk5fREVCVUcgInZpYTogdGJsICVkOiBhdCAlZCAgc2l6ZSAlZCAiCisJCQkgICAgICAgIihyZXN0ICVkKVxuIiwgaWR4LCBvZnMsIHIsIHJlc3QpOworCQkJKi8KIAkJCSgodTMyICopZGV2LT50YWJsZS5hcmVhKVsoaWR4PDwxKSArIDFdID0gY3B1X3RvX2xlMzIociB8IGZsYWcpOwogCQkJZGV2LT5pZHhfdGFibGVbaWR4XS5vZmZzZXQgPSBvZnM7CiAJCQlkZXYtPmlkeF90YWJsZVtpZHhdLnNpemUgPSByOwpAQCAtMTE2Nyw5ICsxMTcwLDkgQEAKIAl1bnNpZ25lZCBpbnQgaTsKIAlpbnQgZXJyOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleCwgaWQsIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJY2FyZF90eXBlID0gcGNpX2lkLT5kcml2ZXJfZGF0YTsKIAlzd2l0Y2ggKGNhcmRfdHlwZSkgewpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3Z4MjIyL3Z4MjIyLmMgYi9zb3VuZC9wY2kvdngyMjIvdngyMjIuYwppbmRleCBhY2MzNTJmLi5mYzkxMzZjIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvdngyMjIvdngyMjIuYworKysgYi9zb3VuZC9wY2kvdngyMjIvdngyMjIuYwpAQCAtMjA0LDkgKzIwNCw5IEBACiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJc3dpdGNoICgoaW50KXBjaV9pZC0+ZHJpdmVyX2RhdGEpIHsKIAljYXNlIFZYX1BDSV9WWDIyMl9PTEQ6CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvdngyMjIvdngyMjJfb3BzLmMgYi9zb3VuZC9wY2kvdngyMjIvdngyMjJfb3BzLmMKaW5kZXggN2U4N2YzOS4uYzBlZmU0NCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3Z4MjIyL3Z4MjIyX29wcy5jCisrKyBiL3NvdW5kL3BjaS92eDIyMi92eDIyMl9vcHMuYwpAQCAtMTA3LDcgKzEwNyw5IEBACiBzdGF0aWMgdm9pZCB2eDJfb3V0YihzdHJ1Y3QgdnhfY29yZSAqY2hpcCwgaW50IG9mZnNldCwgdW5zaWduZWQgY2hhciB2YWwpCiB7CiAJb3V0Yih2YWwsIHZ4Ml9yZWdfYWRkcihjaGlwLCBvZmZzZXQpKTsKLQkvL3ByaW50aygib3V0YjogJXggLT4gJXhcbiIsIHZhbCwgdngyX3JlZ19hZGRyKGNoaXAsIG9mZnNldCkpOworCS8qCisJcHJpbnRrKEtFUk5fREVCVUcgIm91dGI6ICV4IC0+ICV4XG4iLCB2YWwsIHZ4Ml9yZWdfYWRkcihjaGlwLCBvZmZzZXQpKTsKKwkqLwogfQogCiAvKioKQEAgLTEyNiw3ICsxMjgsOSBAQAogICovCiBzdGF0aWMgdm9pZCB2eDJfb3V0bChzdHJ1Y3QgdnhfY29yZSAqY2hpcCwgaW50IG9mZnNldCwgdW5zaWduZWQgaW50IHZhbCkKIHsKLQkvLyBwcmludGsoIm91dGw6ICV4IC0+ICV4XG4iLCB2YWwsIHZ4Ml9yZWdfYWRkcihjaGlwLCBvZmZzZXQpKTsKKwkvKgorCXByaW50ayhLRVJOX0RFQlVHICJvdXRsOiAleCAtPiAleFxuIiwgdmFsLCB2eDJfcmVnX2FkZHIoY2hpcCwgb2Zmc2V0KSk7CisJKi8KIAlvdXRsKHZhbCwgdngyX3JlZ19hZGRyKGNoaXAsIG9mZnNldCkpOwogfQogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kveW1mcGNpL3ltZnBjaS5jIGIvc291bmQvcGNpL3ltZnBjaS95bWZwY2kuYwppbmRleCAyNjMxYTU1Li40YWY2NjY2IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kveW1mcGNpL3ltZnBjaS5jCisrKyBiL3NvdW5kL3BjaS95bWZwY2kveW1mcGNpLmMKQEAgLTE4Nyw5ICsxODcsOSBAQAogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCXN3aXRjaCAocGNpX2lkLT5kZXZpY2UpIHsKIAljYXNlIDB4MDAwNDogc3RyID0gIllNRjcyNCI7ICBtb2RlbCA9ICJEUy0xIjsgYnJlYWs7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kveW1mcGNpL3ltZnBjaV9tYWluLmMgYi9zb3VuZC9wY2kveW1mcGNpL3ltZnBjaV9tYWluLmMKaW5kZXggOTBkMGQ2Mi4uMmYwOTI1MiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3ltZnBjaS95bWZwY2lfbWFpbi5jCisrKyBiL3NvdW5kL3BjaS95bWZwY2kveW1mcGNpX21haW4uYwpAQCAtMzE4LDcgKzMxOCwxMiBAQAogCQl5cGNtLT5wZXJpb2RfcG9zICs9IGRlbHRhOwogCQl5cGNtLT5sYXN0X3BvcyA9IHBvczsKIAkJaWYgKHlwY20tPnBlcmlvZF9wb3MgPj0geXBjbS0+cGVyaW9kX3NpemUpIHsKLQkJCS8vIHByaW50aygiZG9uZSAtIGFjdGl2ZV9iYW5rID0gMHgleCwgc3RhcnQgPSAweCV4XG4iLCBjaGlwLT5hY3RpdmVfYmFuaywgdm9pY2UtPmJhbmtbY2hpcC0+YWN0aXZlX2JhbmtdLnN0YXJ0KTsKKwkJCS8qCisJCQlwcmludGsoS0VSTl9ERUJVRworCQkJICAgICAgICJkb25lIC0gYWN0aXZlX2JhbmsgPSAweCV4LCBzdGFydCA9IDB4JXhcbiIsCisJCQkgICAgICAgY2hpcC0+YWN0aXZlX2JhbmssCisJCQkgICAgICAgdm9pY2UtPmJhbmtbY2hpcC0+YWN0aXZlX2JhbmtdLnN0YXJ0KTsKKwkJCSovCiAJCQl5cGNtLT5wZXJpb2RfcG9zICU9IHlwY20tPnBlcmlvZF9zaXplOwogCQkJc3Bpbl91bmxvY2soJmNoaXAtPnJlZ19sb2NrKTsKIAkJCXNuZF9wY21fcGVyaW9kX2VsYXBzZWQoeXBjbS0+c3Vic3RyZWFtKTsKQEAgLTM2Niw3ICszNzEsMTIgQEAKIAkJeXBjbS0+bGFzdF9wb3MgPSBwb3M7CiAJCWlmICh5cGNtLT5wZXJpb2RfcG9zID49IHlwY20tPnBlcmlvZF9zaXplKSB7CiAJCQl5cGNtLT5wZXJpb2RfcG9zICU9IHlwY20tPnBlcmlvZF9zaXplOwotCQkJLy8gcHJpbnRrKCJkb25lIC0gYWN0aXZlX2JhbmsgPSAweCV4LCBzdGFydCA9IDB4JXhcbiIsIGNoaXAtPmFjdGl2ZV9iYW5rLCB2b2ljZS0+YmFua1tjaGlwLT5hY3RpdmVfYmFua10uc3RhcnQpOworCQkJLyoKKwkJCXByaW50ayhLRVJOX0RFQlVHCisJCQkgICAgICAgImRvbmUgLSBhY3RpdmVfYmFuayA9IDB4JXgsIHN0YXJ0ID0gMHgleFxuIiwKKwkJCSAgICAgICBjaGlwLT5hY3RpdmVfYmFuaywKKwkJCSAgICAgICB2b2ljZS0+YmFua1tjaGlwLT5hY3RpdmVfYmFua10uc3RhcnQpOworCQkJKi8KIAkJCXNwaW5fdW5sb2NrKCZjaGlwLT5yZWdfbG9jayk7CiAJCQlzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKHN1YnN0cmVhbSk7CiAJCQlzcGluX2xvY2soJmNoaXAtPnJlZ19sb2NrKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjbWNpYS9wZGF1ZGlvY2YvcGRhdWRpb2NmLmMgYi9zb3VuZC9wY21jaWEvcGRhdWRpb2NmL3BkYXVkaW9jZi5jCmluZGV4IDgxOWFhYWEuLjdkZWE3NGIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjbWNpYS9wZGF1ZGlvY2YvcGRhdWRpb2NmLmMKKysrIGIvc291bmQvcGNtY2lhL3BkYXVkaW9jZi9wZGF1ZGlvY2YuYwpAQCAtOTEsNyArOTEsNyBAQAogICovCiBzdGF0aWMgaW50IHNuZF9wZGFjZl9wcm9iZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlpbnQgaTsKKwlpbnQgaSwgZXJyOwogCXN0cnVjdCBzbmRfcGRhY2YgKnBkYWNmOwogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKIAlzdGF0aWMgc3RydWN0IHNuZF9kZXZpY2Vfb3BzIG9wcyA9IHsKQEAgLTExMiwyMCArMTEyLDIzIEBACiAJCXJldHVybiAtRU5PREVWOyAvKiBkaXNhYmxlZCBleHBsaWNpdGx5ICovCiAKIAkvKiBvaywgY3JlYXRlIGEgY2FyZCBpbnN0YW5jZSAqLwotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbaV0sIGlkW2ldLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkgeworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtpXSwgaWRbaV0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAicGRhY2Y6IGNhbm5vdCBjcmVhdGUgYSBjYXJkIGluc3RhbmNlXG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldHVybiBlcnI7CiAJfQogCiAJcGRhY2YgPSBzbmRfcGRhY2ZfY3JlYXRlKGNhcmQpOwotCWlmICghIHBkYWNmKQotCQlyZXR1cm4gLUVJTzsKKwlpZiAoIXBkYWNmKSB7CisJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KIAotCWlmIChzbmRfZGV2aWNlX25ldyhjYXJkLCBTTkRSVl9ERVZfTE9XTEVWRUwsIHBkYWNmLCAmb3BzKSA8IDApIHsKKwllcnIgPSBzbmRfZGV2aWNlX25ldyhjYXJkLCBTTkRSVl9ERVZfTE9XTEVWRUwsIHBkYWNmLCAmb3BzKTsKKwlpZiAoZXJyIDwgMCkgewogCQlrZnJlZShwZGFjZik7CiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JCXJldHVybiAtRU5PREVWOworCQlyZXR1cm4gZXJyOwogCX0KIAogCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgJmhhbmRsZV90b19kZXYobGluaykpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNtY2lhL3BkYXVkaW9jZi9wZGF1ZGlvY2ZfY29yZS5jIGIvc291bmQvcGNtY2lhL3BkYXVkaW9jZi9wZGF1ZGlvY2ZfY29yZS5jCmluZGV4IGRmYTQwYjAuLjVkMmFmYTAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjbWNpYS9wZGF1ZGlvY2YvcGRhdWRpb2NmX2NvcmUuYworKysgYi9zb3VuZC9wY21jaWEvcGRhdWRpb2NmL3BkYXVkaW9jZl9jb3JlLmMKQEAgLTgyLDE0ICs4MiwyMSBAQAogI2lmIDAKIHZvaWQgcGRhY2ZfZHVtcChzdHJ1Y3Qgc25kX3BkYWNmICpjaGlwKQogewotCXByaW50aygiUERBVURJT0NGIERVTVAgKDB4JWx4KTpcbiIsIGNoaXAtPnBvcnQpOwotCXByaW50aygiV1BEICAgICAgICAgOiAweCV4XG4iLCBpbncoY2hpcC0+cG9ydCArIFBEQVVESU9DRl9SRUdfV0RQKSk7Ci0JcHJpbnRrKCJSRFAgICAgICAgICA6IDB4JXhcbiIsIGludyhjaGlwLT5wb3J0ICsgUERBVURJT0NGX1JFR19SRFApKTsKLQlwcmludGsoIlRDUiAgICAgICAgIDogMHgleFxuIiwgaW53KGNoaXAtPnBvcnQgKyBQREFVRElPQ0ZfUkVHX1RDUikpOwotCXByaW50aygiU0NSICAgICAgICAgOiAweCV4XG4iLCBpbncoY2hpcC0+cG9ydCArIFBEQVVESU9DRl9SRUdfU0NSKSk7Ci0JcHJpbnRrKCJJU1IgICAgICAgICA6IDB4JXhcbiIsIGludyhjaGlwLT5wb3J0ICsgUERBVURJT0NGX1JFR19JU1IpKTsKLQlwcmludGsoIklFUiAgICAgICAgIDogMHgleFxuIiwgaW53KGNoaXAtPnBvcnQgKyBQREFVRElPQ0ZfUkVHX0lFUikpOwotCXByaW50aygiQUtfSUZSICAgICAgOiAweCV4XG4iLCBpbncoY2hpcC0+cG9ydCArIFBEQVVESU9DRl9SRUdfQUtfSUZSKSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIlBEQVVESU9DRiBEVU1QICgweCVseCk6XG4iLCBjaGlwLT5wb3J0KTsKKwlwcmludGsoS0VSTl9ERUJVRyAiV1BEICAgICAgICAgOiAweCV4XG4iLAorCSAgICAgICBpbncoY2hpcC0+cG9ydCArIFBEQVVESU9DRl9SRUdfV0RQKSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIlJEUCAgICAgICAgIDogMHgleFxuIiwKKwkgICAgICAgaW53KGNoaXAtPnBvcnQgKyBQREFVRElPQ0ZfUkVHX1JEUCkpOworCXByaW50ayhLRVJOX0RFQlVHICJUQ1IgICAgICAgICA6IDB4JXhcbiIsCisJICAgICAgIGludyhjaGlwLT5wb3J0ICsgUERBVURJT0NGX1JFR19UQ1IpKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiU0NSICAgICAgICAgOiAweCV4XG4iLAorCSAgICAgICBpbncoY2hpcC0+cG9ydCArIFBEQVVESU9DRl9SRUdfU0NSKSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIklTUiAgICAgICAgIDogMHgleFxuIiwKKwkgICAgICAgaW53KGNoaXAtPnBvcnQgKyBQREFVRElPQ0ZfUkVHX0lTUikpOworCXByaW50ayhLRVJOX0RFQlVHICJJRVIgICAgICAgICA6IDB4JXhcbiIsCisJICAgICAgIGludyhjaGlwLT5wb3J0ICsgUERBVURJT0NGX1JFR19JRVIpKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiQUtfSUZSICAgICAgOiAweCV4XG4iLAorCSAgICAgICBpbncoY2hpcC0+cG9ydCArIFBEQVVESU9DRl9SRUdfQUtfSUZSKSk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvc291bmQvcGNtY2lhL3BkYXVkaW9jZi9wZGF1ZGlvY2ZfaXJxLmMgYi9zb3VuZC9wY21jaWEvcGRhdWRpb2NmL3BkYXVkaW9jZl9pcnEuYwppbmRleCBlYTkwM2M4Li5kY2QzMjIwIDEwMDY0NAotLS0gYS9zb3VuZC9wY21jaWEvcGRhdWRpb2NmL3BkYXVkaW9jZl9pcnEuYworKysgYi9zb3VuZC9wY21jaWEvcGRhdWRpb2NmL3BkYXVkaW9jZl9pcnEuYwpAQCAtMjY5LDcgKzI2OSw3IEBACiAKIAlyZHAgPSBpbncoY2hpcC0+cG9ydCArIFBEQVVESU9DRl9SRUdfUkRQKTsKIAl3ZHAgPSBpbncoY2hpcC0+cG9ydCArIFBEQVVESU9DRl9SRUdfV0RQKTsKLQkvLyBwcmludGsoIlRBU0tMRVQ6IHJkcCA9ICV4LCB3ZHAgPSAleFxuIiwgcmRwLCB3ZHApOworCS8qIHByaW50ayhLRVJOX0RFQlVHICJUQVNLTEVUOiByZHAgPSAleCwgd2RwID0gJXhcbiIsIHJkcCwgd2RwKTsgKi8KIAlzaXplID0gd2RwIC0gcmRwOwogCWlmIChzaXplIDwgMCkKIAkJc2l6ZSArPSAweDEwMDAwOwpAQCAtMzIxLDUgKzMyMSw1IEBACiAJCXNwaW5fbG9jaygmY2hpcC0+cmVnX2xvY2spOwogCX0KIAlzcGluX3VubG9jaygmY2hpcC0+cmVnX2xvY2spOwotCS8vIHByaW50aygiVEFTS0xFVDogZW5kXG4iKTsKKwkvKiBwcmludGsoS0VSTl9ERUJVRyAiVEFTS0xFVDogZW5kXG4iKTsgKi8KIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjbWNpYS92eC92eHBvY2tldC5jIGIvc291bmQvcGNtY2lhL3Z4L3Z4cG9ja2V0LmMKaW5kZXggNzA2NjAyYS4uNzQ0NWNjOCAxMDA2NDQKLS0tIGEvc291bmQvcGNtY2lhL3Z4L3Z4cG9ja2V0LmMKKysrIGIvc291bmQvcGNtY2lhL3Z4L3Z4cG9ja2V0LmMKQEAgLTEzMCwyMyArMTMwLDI2IEBACiAvKgogICogY3JlYXRlIHZ4cG9ja2V0IGluc3RhbmNlCiAgKi8KLXN0YXRpYyBzdHJ1Y3Qgc25kX3Z4cG9ja2V0ICpzbmRfdnhwb2NrZXRfbmV3KHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgaW50IGlibCwKLQkJCQkJICAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKK3N0YXRpYyBpbnQgc25kX3Z4cG9ja2V0X25ldyhzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIGludCBpYmwsCisJCQkgICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmssCisJCQkgICAgc3RydWN0IHNuZF92eHBvY2tldCAqKmNoaXBfcmV0KQogewogCXN0cnVjdCB2eF9jb3JlICpjaGlwOwogCXN0cnVjdCBzbmRfdnhwb2NrZXQgKnZ4cDsKIAlzdGF0aWMgc3RydWN0IHNuZF9kZXZpY2Vfb3BzIG9wcyA9IHsKIAkJLmRldl9mcmVlID0Jc25kX3Z4cG9ja2V0X2Rldl9mcmVlLAogCX07CisJaW50IGVycjsKIAogCWNoaXAgPSBzbmRfdnhfY3JlYXRlKGNhcmQsICZ2eHBvY2tldF9odywgJnNuZF92eHBvY2tldF9vcHMsCiAJCQkgICAgIHNpemVvZihzdHJ1Y3Qgc25kX3Z4cG9ja2V0KSAtIHNpemVvZihzdHJ1Y3QgdnhfY29yZSkpOwotCWlmICghIGNoaXApCi0JCXJldHVybiBOVUxMOworCWlmICghY2hpcCkKKwkJcmV0dXJuIC1FTk9NRU07CiAKLQlpZiAoc25kX2RldmljZV9uZXcoY2FyZCwgU05EUlZfREVWX0xPV0xFVkVMLCBjaGlwLCAmb3BzKSA8IDApIHsKKwllcnIgPSBzbmRfZGV2aWNlX25ldyhjYXJkLCBTTkRSVl9ERVZfTE9XTEVWRUwsIGNoaXAsICZvcHMpOworCWlmIChlcnIgPCAwKSB7CiAJCWtmcmVlKGNoaXApOwotCQlyZXR1cm4gTlVMTDsKKwkJcmV0dXJuIGVycjsKIAl9CiAJY2hpcC0+aWJsLnNpemUgPSBpYmw7CiAKQEAgLTE2OSw3ICsxNzIsOCBAQAogCWxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSAxOwogCWxpbmstPmNvbmYuUHJlc2VudCA9IFBSRVNFTlRfT1BUSU9OOwogCi0JcmV0dXJuIHZ4cDsKKwkqY2hpcF9yZXQgPSB2eHA7CisJcmV0dXJuIDA7CiB9CiAKIApAQCAtMjkyLDcgKzI5Niw3IEBACiB7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCXN0cnVjdCBzbmRfdnhwb2NrZXQgKnZ4cDsKLQlpbnQgaTsKKwlpbnQgaSwgZXJyOwogCiAJLyogZmluZCBhbiBlbXB0eSBzbG90IGZyb20gdGhlIGNhcmQgbGlzdCAqLwogCWZvciAoaSA9IDA7IGkgPCBTTkRSVl9DQVJEUzsgaSsrKSB7CkBAIC0zMDcsMTYgKzMxMSwxNiBAQAogCQlyZXR1cm4gLUVOT0RFVjsgLyogZGlzYWJsZWQgZXhwbGljaXRseSAqLwogCiAJLyogb2ssIGNyZWF0ZSBhIGNhcmQgaW5zdGFuY2UgKi8KLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2ldLCBpZFtpXSwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpIHsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbaV0sIGlkW2ldLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgInZ4cG9ja2V0OiBjYW5ub3QgY3JlYXRlIGEgY2FyZCBpbnN0YW5jZVxuIik7Ci0JCXJldHVybiAtRU5PTUVNOworCQlyZXR1cm4gZXJyOwogCX0KIAotCXZ4cCA9IHNuZF92eHBvY2tldF9uZXcoY2FyZCwgaWJsW2ldLCBwX2Rldik7Ci0JaWYgKCEgdnhwKSB7CisJZXJyID0gc25kX3Z4cG9ja2V0X25ldyhjYXJkLCBpYmxbaV0sIHBfZGV2LCAmdnhwKTsKKwlpZiAoZXJyIDwgMCkgewogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwotCQlyZXR1cm4gLUVOT0RFVjsKKwkJcmV0dXJuIGVycjsKIAl9CiAJY2FyZC0+cHJpdmF0ZV9kYXRhID0gdnhwOwogCmRpZmYgLS1naXQgYS9zb3VuZC9wcGMvS2NvbmZpZyBiL3NvdW5kL3BwYy9LY29uZmlnCmluZGV4IDc3N2RlMmIuLmJkMjMzOGEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BwYy9LY29uZmlnCisrKyBiL3NvdW5kL3BwYy9LY29uZmlnCkBAIC0xMyw2ICsxMyw3IEBACiAJdHJpc3RhdGUgIlBvd2VyTWFjIChBV0FDUywgREFDQSwgQnVyZ3VuZHksIFR1bWJsZXIsIEtleXdlc3QpIgogCWRlcGVuZHMgb24gSTJDICYmIElOUFVUICYmIFBQQ19QTUFDCiAJc2VsZWN0IFNORF9QQ00KKwlzZWxlY3QgU05EX1ZNQVNURVIKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgdGhlIGludGVncmF0ZWQgc291bmQgZGV2aWNlLgogCmRpZmYgLS1naXQgYS9zb3VuZC9wcGMvYXdhY3MuYyBiL3NvdW5kL3BwYy9hd2Fjcy5jCmluZGV4IDdiZDMzZTYuLjgwZGY5YjEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BwYy9hd2Fjcy5jCisrKyBiL3NvdW5kL3BwYy9hd2Fjcy5jCkBAIC02MDgsOSArNjA4LDEyIEBACiAJQVdBQ1NfU1dJVENIKCJDRCBDYXB0dXJlIFN3aXRjaCIsIDAsIFNISUZUX01VWF9MSU5FLCAwKSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfcG1hY19zY3JlYW1lcl9taXhlcnNfaW1hY1tdIF9faW5pdGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX3BtYWNfc2NyZWFtZXJfbWl4ZXJzX2xvW10gX19pbml0ZGF0YSA9IHsKIAlBV0FDU19WT0xVTUUoIkxpbmUgb3V0IFBsYXliYWNrIFZvbHVtZSIsIDIsIDYsIDEpLAotCUFXQUNTX1ZPTFVNRSgiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIsIDUsIDYsIDEpLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9wbWFjX3NjcmVhbWVyX21peGVyc19pbWFjW10gX19pbml0ZGF0YSA9IHsKKwlBV0FDU19WT0xVTUUoIlBsYXktdGhyb3VnaCBQbGF5YmFjayBWb2x1bWUiLCA1LCA2LCAxKSwKIAlBV0FDU19TV0lUQ0goIkNEIENhcHR1cmUgU3dpdGNoIiwgMCwgU0hJRlRfTVVYX0NELCAwKSwKIH07CiAKQEAgLTYyNyw2ICs2MzAsMTAgQEAKIAlBV0FDU19TV0lUQ0goIkxpbmUgQ2FwdHVyZSBTd2l0Y2giLCAwLCBTSElGVF9NVVhfTUlDLCAwKSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfcG1hY19hd2Fjc19taXhlcnNfcG1hYzU1MDBbXSBfX2luaXRkYXRhID0geworCUFXQUNTX1ZPTFVNRSgiSGVhZHBob25lIFBsYXliYWNrIFZvbHVtZSIsIDIsIDYsIDEpLAorfTsKKwogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9wbWFjX2F3YWNzX21peGVyc19wbWFjW10gX19pbml0ZGF0YSA9IHsKIAlBV0FDU19WT0xVTUUoIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLCAyLCA2LCAxKSwKIAlBV0FDU19TV0lUQ0goIkNEIENhcHR1cmUgU3dpdGNoIiwgMCwgU0hJRlRfTVVYX0NELCAwKSwKQEAgLTY0NSwxMiArNjUyLDE5IEBACiAJQVdBQ1NfU1dJVENIKCJNaWMgQ2FwdHVyZSBTd2l0Y2giLCAwLCBTSElGVF9NVVhfTElORSwgMCksCiB9OwogCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX3BtYWNfYXdhY3NfbWl4ZXJzMl9wbWFjNTUwMFtdIF9faW5pdGRhdGEgPSB7CisJQVdBQ1NfU1dJVENIKCJDRCBDYXB0dXJlIFN3aXRjaCIsIDAsIFNISUZUX01VWF9DRCwgMCksCit9OworCiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX3BtYWNfYXdhY3NfbWFzdGVyX3N3IF9faW5pdGRhdGEgPQogQVdBQ1NfU1dJVENIKCJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwgMSwgU0hJRlRfSERNVVRFLCAxKTsKIAogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9wbWFjX2F3YWNzX21hc3Rlcl9zd19pbWFjIF9faW5pdGRhdGEgPQogQVdBQ1NfU1dJVENIKCJMaW5lIG91dCBQbGF5YmFjayBTd2l0Y2giLCAxLCBTSElGVF9IRE1VVEUsIDEpOwogCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX3BtYWNfYXdhY3NfbWFzdGVyX3N3X3BtYWM1NTAwIF9faW5pdGRhdGEgPQorQVdBQ1NfU1dJVENIKCJIZWFkcGhvbmUgUGxheWJhY2sgU3dpdGNoIiwgMSwgU0hJRlRfSERNVVRFLCAxKTsKKwogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9wbWFjX2F3YWNzX21pY19ib29zdFtdIF9faW5pdGRhdGEgPSB7CiAJQVdBQ1NfU1dJVENIKCJNaWMgQm9vc3QgQ2FwdHVyZSBTd2l0Y2giLCAwLCBTSElGVF9HQUlOTElORSwgMCksCiB9OwpAQCAtNzY2LDEyICs3ODAsMTYgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfUE0gKi8KIAotI2RlZmluZSBJU19QTTc1MDAgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiQUFQTCw3NTAwIikpCisjZGVmaW5lIElTX1BNNzUwMCAobWFjaGluZV9pc19jb21wYXRpYmxlKCJBQVBMLDc1MDAiKSBcCisJCXx8IG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiQUFQTCw4NTAwIikgXAorCQl8fCBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIkFBUEwsOTUwMCIpKQorI2RlZmluZSBJU19QTTU1MDAgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiQUFQTCxlNDExIikpCiAjZGVmaW5lIElTX0JFSUdFIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIkFBUEwsR29zc2FtZXIiKSkKICNkZWZpbmUgSVNfSU1BQzEgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWMyLDEiKSkKICNkZWZpbmUgSVNfSU1BQzIgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWMyLDIiKSBcCiAJCXx8IG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM0LDEiKSkKICNkZWZpbmUgSVNfRzRBR1AgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWMzLDEiKSkKKyNkZWZpbmUgSVNfTE9NQkFSRCAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2sxLDEiKSkKIAogc3RhdGljIGludCBpbWFjMSwgaW1hYzI7CiAKQEAgLTg1OCwxMCArODc2LDE0IEBACiBzbmRfcG1hY19hd2Fjc19pbml0KHN0cnVjdCBzbmRfcG1hYyAqY2hpcCkKIHsKIAlpbnQgcG03NTAwID0gSVNfUE03NTAwOworCWludCBwbTU1MDAgPSBJU19QTTU1MDA7CiAJaW50IGJlaWdlID0gSVNfQkVJR0U7CiAJaW50IGc0YWdwID0gSVNfRzRBR1A7CisJaW50IGxvbWJhcmQgPSBJU19MT01CQVJEOwogCWludCBpbWFjOwogCWludCBlcnIsIHZvbDsKKwlzdHJ1Y3Qgc25kX2tjb250cm9sICp2bWFzdGVyX3N3LCAqdm1hc3Rlcl92b2w7CisJc3RydWN0IHNuZF9rY29udHJvbCAqbWFzdGVyX3ZvbCwgKnNwZWFrZXJfdm9sOwogCiAJaW1hYzEgPSBJU19JTUFDMTsKIAlpbWFjMiA9IElTX0lNQUMyOwpAQCAtOTE1LDcgKzkzNyw3IEBACiAJCS8qIHNldCBoZWFkcGhvbmUtamFjayBkZXRlY3Rpb24gYml0ICovCiAJCXN3aXRjaCAoY2hpcC0+bW9kZWwpIHsKIAkJY2FzZSBQTUFDX0FXQUNTOgotCQkJY2hpcC0+aHBfc3RhdF9tYXNrID0gcG03NTAwID8gTUFTS19IRFBDT05OCisJCQljaGlwLT5ocF9zdGF0X21hc2sgPSBwbTc1MDAgfHwgcG01NTAwID8gTUFTS19IRFBDT05OCiAJCQkJOiBNQVNLX0xPQ09OTjsKIAkJCWJyZWFrOwogCQljYXNlIFBNQUNfU0NSRUFNRVI6CkBAIC05NTQsNyArOTc2LDcgQEAKIAkJcmV0dXJuIGVycjsKIAlpZiAoYmVpZ2UgfHwgZzRhZ3ApCiAJCTsKLQllbHNlIGlmIChjaGlwLT5tb2RlbCA9PSBQTUFDX1NDUkVBTUVSKQorCWVsc2UgaWYgKGNoaXAtPm1vZGVsID09IFBNQUNfU0NSRUFNRVIgfHwgcG01NTAwKQogCQllcnIgPSBidWlsZF9taXhlcnMoY2hpcCwgQVJSQVlfU0laRShzbmRfcG1hY19zY3JlYW1lcl9taXhlcnMyKSwKIAkJCQkgICBzbmRfcG1hY19zY3JlYW1lcl9taXhlcnMyKTsKIAllbHNlIGlmICghcG03NTAwKQpAQCAtOTYyLDE5ICs5ODQsMzUgQEAKIAkJCQkgICBzbmRfcG1hY19hd2Fjc19taXhlcnMyKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKKwlpZiAocG01NTAwKSB7CisJCWVyciA9IGJ1aWxkX21peGVycyhjaGlwLAorCQkJCSAgIEFSUkFZX1NJWkUoc25kX3BtYWNfYXdhY3NfbWl4ZXJzMl9wbWFjNTUwMCksCisJCQkJICAgc25kX3BtYWNfYXdhY3NfbWl4ZXJzMl9wbWFjNTUwMCk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwl9CiAJaWYgKHBtNzUwMCkKIAkJZXJyID0gYnVpbGRfbWl4ZXJzKGNoaXAsCiAJCQkJICAgQVJSQVlfU0laRShzbmRfcG1hY19hd2Fjc19taXhlcnNfcG1hYzc1MDApLAogCQkJCSAgIHNuZF9wbWFjX2F3YWNzX21peGVyc19wbWFjNzUwMCk7CisJZWxzZSBpZiAocG01NTAwKQorCQllcnIgPSBzbmRfY3RsX2FkZChjaGlwLT5jYXJkLAorCQkgICAgKG1hc3Rlcl92b2wgPSBzbmRfY3RsX25ldzEoc25kX3BtYWNfYXdhY3NfbWl4ZXJzX3BtYWM1NTAwLAorCQkJCQkJY2hpcCkpKTsKIAllbHNlIGlmIChiZWlnZSkKIAkJZXJyID0gYnVpbGRfbWl4ZXJzKGNoaXAsCiAJCQkJICAgQVJSQVlfU0laRShzbmRfcG1hY19zY3JlYW1lcl9taXhlcnNfYmVpZ2UpLAogCQkJCSAgIHNuZF9wbWFjX3NjcmVhbWVyX21peGVyc19iZWlnZSk7Ci0JZWxzZSBpZiAoaW1hYykKKwllbHNlIGlmIChpbWFjIHx8IGxvbWJhcmQpIHsKKwkJZXJyID0gc25kX2N0bF9hZGQoY2hpcC0+Y2FyZCwKKwkJICAgIChtYXN0ZXJfdm9sID0gc25kX2N0bF9uZXcxKHNuZF9wbWFjX3NjcmVhbWVyX21peGVyc19sbywKKwkJCQkJCWNoaXApKSk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKIAkJZXJyID0gYnVpbGRfbWl4ZXJzKGNoaXAsCiAJCQkJICAgQVJSQVlfU0laRShzbmRfcG1hY19zY3JlYW1lcl9taXhlcnNfaW1hYyksCiAJCQkJICAgc25kX3BtYWNfc2NyZWFtZXJfbWl4ZXJzX2ltYWMpOwotCWVsc2UgaWYgKGc0YWdwKQorCX0gZWxzZSBpZiAoZzRhZ3ApCiAJCWVyciA9IGJ1aWxkX21peGVycyhjaGlwLAogCQkJCSAgIEFSUkFZX1NJWkUoc25kX3BtYWNfc2NyZWFtZXJfbWl4ZXJzX2c0YWdwKSwKIAkJCQkgICBzbmRfcG1hY19zY3JlYW1lcl9taXhlcnNfZzRhZ3ApOwpAQCAtOTg0LDggKzEwMjIsMTAgQEAKIAkJCQkgICBzbmRfcG1hY19hd2Fjc19taXhlcnNfcG1hYyk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7Ci0JY2hpcC0+bWFzdGVyX3N3X2N0bCA9IHNuZF9jdGxfbmV3MSgocG03NTAwIHx8IGltYWMgfHwgZzRhZ3ApCisJY2hpcC0+bWFzdGVyX3N3X2N0bCA9IHNuZF9jdGxfbmV3MSgocG03NTAwIHx8IGltYWMgfHwgZzRhZ3AgfHwgbG9tYmFyZCkKIAkJCT8gJnNuZF9wbWFjX2F3YWNzX21hc3Rlcl9zd19pbWFjCisJCQk6IHBtNTUwMAorCQkJPyAmc25kX3BtYWNfYXdhY3NfbWFzdGVyX3N3X3BtYWM1NTAwCiAJCQk6ICZzbmRfcG1hY19hd2Fjc19tYXN0ZXJfc3csIGNoaXApOwogCWVyciA9IHNuZF9jdGxfYWRkKGNoaXAtPmNhcmQsIGNoaXAtPm1hc3Rlcl9zd19jdGwpOwogCWlmIChlcnIgPCAwKQpAQCAtMTAxNyw4ICsxMDU3LDkgQEAKICNlbmRpZiAvKiBQTUFDX0FNUF9BVkFJTCAqLwogCXsKIAkJLyogcm91dGUgQSA9IGhlYWRwaG9uZSwgcm91dGUgQyA9IHNwZWFrZXIgKi8KLQkJZXJyID0gYnVpbGRfbWl4ZXJzKGNoaXAsIEFSUkFZX1NJWkUoc25kX3BtYWNfYXdhY3Nfc3BlYWtlcl92b2wpLAotCQkJCQlzbmRfcG1hY19hd2Fjc19zcGVha2VyX3ZvbCk7CisJCWVyciA9IHNuZF9jdGxfYWRkKGNoaXAtPmNhcmQsCisJCSAgICAoc3BlYWtlcl92b2wgPSBzbmRfY3RsX25ldzEoc25kX3BtYWNfYXdhY3Nfc3BlYWtlcl92b2wsCisJCQkJCQljaGlwKSkpOwogCQlpZiAoZXJyIDwgMCkKIAkJCXJldHVybiBlcnI7CiAJCWNoaXAtPnNwZWFrZXJfc3dfY3RsID0gc25kX2N0bF9uZXcxKGltYWMxCkBAIC0xMDMxLDYgKzEwNzIsMzMgQEAKIAkJCXJldHVybiBlcnI7CiAJfQogCisJaWYgKHBtNTUwMCB8fCBpbWFjIHx8IGxvbWJhcmQpIHsKKwkJdm1hc3Rlcl9zdyA9IHNuZF9jdGxfbWFrZV92aXJ0dWFsX21hc3RlcigKKwkJCSJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwgKHVuc2lnbmVkIGludCAqKSBOVUxMKTsKKwkJZXJyID0gc25kX2N0bF9hZGRfc2xhdmVfdW5jYWNoZWQodm1hc3Rlcl9zdywKKwkJCQkJCSBjaGlwLT5tYXN0ZXJfc3dfY3RsKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCQllcnIgPSBzbmRfY3RsX2FkZF9zbGF2ZV91bmNhY2hlZCh2bWFzdGVyX3N3LAorCQkJCQkJICBjaGlwLT5zcGVha2VyX3N3X2N0bCk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwkJZXJyID0gc25kX2N0bF9hZGQoY2hpcC0+Y2FyZCwgdm1hc3Rlcl9zdyk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwkJdm1hc3Rlcl92b2wgPSBzbmRfY3RsX21ha2VfdmlydHVhbF9tYXN0ZXIoCisJCQkiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIsICh1bnNpZ25lZCBpbnQgKikgTlVMTCk7CisJCWVyciA9IHNuZF9jdGxfYWRkX3NsYXZlKHZtYXN0ZXJfdm9sLCBtYXN0ZXJfdm9sKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCQllcnIgPSBzbmRfY3RsX2FkZF9zbGF2ZSh2bWFzdGVyX3ZvbCwgc3BlYWtlcl92b2wpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJCWVyciA9IHNuZF9jdGxfYWRkKGNoaXAtPmNhcmQsIHZtYXN0ZXJfdm9sKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCX0KKwogCWlmIChiZWlnZSB8fCBnNGFncCkKIAkJZXJyID0gYnVpbGRfbWl4ZXJzKGNoaXAsCiAJCQkJQVJSQVlfU0laRShzbmRfcG1hY19zY3JlYW1lcl9taWNfYm9vc3RfYmVpZ2UpLApkaWZmIC0tZ2l0IGEvc291bmQvcHBjL2J1cmd1bmR5LmMgYi9zb3VuZC9wcGMvYnVyZ3VuZHkuYwppbmRleCBmODYwZDM5Li40NWE3NjI5IDEwMDY0NAotLS0gYS9zb3VuZC9wcGMvYnVyZ3VuZHkuYworKysgYi9zb3VuZC9wcGMvYnVyZ3VuZHkuYwpAQCAtMzUsNyArMzUsNyBAQAogCWludCB0aW1lb3V0ID0gNTA7CiAJd2hpbGUgKChpbl9sZTMyKCZjaGlwLT5hd2Fjcy0+Y29kZWNfY3RybCkgJiBNQVNLX05FV0VDTUQpICYmIHRpbWVvdXQtLSkKIAkJdWRlbGF5KDEpOwotCWlmICghIHRpbWVvdXQpCisJaWYgKHRpbWVvdXQgPCAwKQogCQlwcmludGsoS0VSTl9ERUJVRyAiYnVyZ3VuZHlfYnVzeV93YWl0OiB0aW1lb3V0XG4iKTsKIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvcHBjL2RhY2EuYyBiL3NvdW5kL3BwYy9kYWNhLmMKaW5kZXggOGE1YjI5MC4uZjhkNDc4YyAxMDA2NDQKLS0tIGEvc291bmQvcHBjL2RhY2EuYworKysgYi9zb3VuZC9wcGMvZGFjYS5jCkBAIC04Miw3ICs4Miw3IEBACiAJZGF0YVsxXSB8PSBtaXgtPmRlZW1waGFzaXMgPyAweDQwIDogMDsKIAlpZiAoaTJjX3NtYnVzX3dyaXRlX2Jsb2NrX2RhdGEobWl4LT5pMmMuY2xpZW50LCBEQUNBX1JFR19BVk9MLAogCQkJCSAgICAgICAyLCBkYXRhKSA8IDApIHsKLQkJc25kX3ByaW50aygiZmFpbGVkIHRvIHNldCB2b2x1bWUgXG4iKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIHNldCB2b2x1bWUgXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvc291bmQvcHBjL3BtYWMuYyBiL3NvdW5kL3BwYy9wbWFjLmMKaW5kZXggYWY3NmVlOC4uOWI0ZTljMyAxMDA2NDQKLS0tIGEvc291bmQvcHBjL3BtYWMuYworKysgYi9zb3VuZC9wcGMvcG1hYy5jCkBAIC0yOTksNyArMjk5LDcgQEAKIAljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NVU1BFTkQ6CiAJCXNwaW5fbG9jaygmY2hpcC0+cmVnX2xvY2spOwogCQlyZWMtPnJ1bm5pbmcgPSAwOwotCQkvKnByaW50aygic3RvcHBlZCEhXG4iKTsqLworCQkvKnByaW50ayhLRVJOX0RFQlVHICJzdG9wcGVkISFcbiIpOyovCiAJCXNuZF9wbWFjX2RtYV9zdG9wKHJlYyk7CiAJCWZvciAoaSA9IDAsIGNwID0gcmVjLT5jbWQuY21kczsgaSA8IHJlYy0+bnBlcmlvZHM7IGkrKywgY3ArKykKIAkJCW91dF9sZTE2KCZjcC0+Y29tbWFuZCwgREJETUFfU1RPUCk7CkBAIC0zMzQsNyArMzM0LDcgQEAKIAl9CiAjZW5kaWYKIAljb3VudCArPSByZWMtPmN1cl9wZXJpb2QgKiByZWMtPnBlcmlvZF9zaXplOwotCS8qcHJpbnRrKCJwb2ludGVyPSVkXG4iLCBjb3VudCk7Ki8KKwkvKnByaW50ayhLRVJOX0RFQlVHICJwb2ludGVyPSVkXG4iLCBjb3VudCk7Ki8KIAlyZXR1cm4gYnl0ZXNfdG9fZnJhbWVzKHN1YnMtPnJ1bnRpbWUsIGNvdW50KTsKIH0KIApAQCAtNDg2LDcgKzQ4Niw3IEBACiAJCQlpZiAoISAoc3RhdCAmIEFDVElWRSkpCiAJCQkJYnJlYWs7CiAKLQkJCS8qcHJpbnRrKCJ1cGRhdGUgZnJhZyAlZFxuIiwgcmVjLT5jdXJfcGVyaW9kKTsqLworCQkJLypwcmludGsoS0VSTl9ERUJVRyAidXBkYXRlIGZyYWcgJWRcbiIsIHJlYy0+Y3VyX3BlcmlvZCk7Ki8KIAkJCXN0X2xlMTYoJmNwLT54ZmVyX3N0YXR1cywgMCk7CiAJCQlzdF9sZTE2KCZjcC0+cmVxX2NvdW50LCByZWMtPnBlcmlvZF9zaXplKTsKIAkJCS8qc3RfbGUxNigmY3AtPnJlc19jb3VudCwgMCk7Ki8KQEAgLTgwNiw3ICs4MDYsNyBAQAogCXN0cnVjdCBzbmRfcG1hYyAqY2hpcCA9IGRldmlkOwogCWludCBjdHJsID0gaW5fbGUzMigmY2hpcC0+YXdhY3MtPmNvbnRyb2wpOwogCi0JLypwcmludGsoInBtYWM6IGNvbnRyb2wgaW50ZXJydXB0Li4gMHgleFxuIiwgY3RybCk7Ki8KKwkvKnByaW50ayhLRVJOX0RFQlVHICJwbWFjOiBjb250cm9sIGludGVycnVwdC4uIDB4JXhcbiIsIGN0cmwpOyovCiAJaWYgKGN0cmwgJiBNQVNLX1BPUlRDSEcpIHsKIAkJLyogZG8gc29tZXRoaW5nIHdoZW4gaGVhZHBob25lIGlzIHBsdWdnZWQvdW5wbHVnZ2VkPyAqLwogCQlpZiAoY2hpcC0+dXBkYXRlX2F1dG9tdXRlKQpAQCAtMTAzMyw3ICsxMDMzLDggQEAKIAl9CiAJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKHNvdW5kLCAidHVtYmxlciIpKSB7CiAJCWNoaXAtPm1vZGVsID0gUE1BQ19UVU1CTEVSOwotCQljaGlwLT5jYW5fY2FwdHVyZSA9IG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM0LDIiKTsKKwkJY2hpcC0+Y2FuX2NhcHR1cmUgPSBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNCwyIikKKwkJCQl8fCBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazQsMSIpOwogCQljaGlwLT5jYW5fZHVwbGV4ID0gMDsKIAkJLy8gY2hpcC0+Y2FuX2J5dGVfc3dhcCA9IDA7IC8qIEZJWE1FOiBjaGVjayB0aGlzICovCiAJCWNoaXAtPm51bV9mcmVxcyA9IEFSUkFZX1NJWkUodHVtYmxlcl9mcmVxcyk7CmRpZmYgLS1naXQgYS9zb3VuZC9wcGMvcG93ZXJtYWMuYyBiL3NvdW5kL3BwYy9wb3dlcm1hYy5jCmluZGV4IGM5MzYyMjUuLjVhOTI5MDYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BwYy9wb3dlcm1hYy5jCisrKyBiL3NvdW5kL3BwYy9wb3dlcm1hYy5jCkBAIC01OCw5ICs1OCw5IEBACiAJY2hhciAqbmFtZV9leHQ7CiAJaW50IGVycjsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCWlmICgoZXJyID0gc25kX3BtYWNfbmV3KGNhcmQsICZjaGlwKSkgPCAwKQogCQlnb3RvIF9fZXJyb3I7CkBAIC0xMTAsNyArMTEwLDcgQEAKIAkJCWdvdG8gX19lcnJvcjsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJc25kX3ByaW50aygidW5zdXBwb3J0ZWQgaGFyZHdhcmUgJWRcbiIsIGNoaXAtPm1vZGVsKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAidW5zdXBwb3J0ZWQgaGFyZHdhcmUgJWRcbiIsIGNoaXAtPm1vZGVsKTsKIAkJZXJyID0gLUVJTlZBTDsKIAkJZ290byBfX2Vycm9yOwogCX0KZGlmZiAtLWdpdCBhL3NvdW5kL3BwYy9zbmRfcHMzLmMgYi9zb3VuZC9wcGMvc25kX3BzMy5jCmluZGV4IGZmMzIxMTEuLmYzNjFjMjYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BwYy9zbmRfcHMzLmMKKysrIGIvc291bmQvcHBjL3NuZF9wczMuYwpAQCAtOTY5LDExICs5NjksOSBAQAogCX0KIAogCS8qIGNyZWF0ZSBjYXJkIGluc3RhbmNlICovCi0JdGhlX2NhcmQuY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleCwgaWQsIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoIXRoZV9jYXJkLmNhcmQpIHsKLQkJcmV0ID0gLUVOWElPOworCXJldCA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleCwgaWQsIFRISVNfTU9EVUxFLCAwLCAmdGhlX2NhcmQuY2FyZCk7CisJaWYgKHJldCA8IDApCiAJCWdvdG8gY2xlYW5faXJxOwotCX0KIAogCXN0cmNweSh0aGVfY2FyZC5jYXJkLT5kcml2ZXIsICJQUzMiKTsKIAlzdHJjcHkodGhlX2NhcmQuY2FyZC0+c2hvcnRuYW1lLCAiUFMzIik7CmRpZmYgLS1naXQgYS9zb3VuZC9wcGMvdHVtYmxlci5jIGIvc291bmQvcHBjL3R1bWJsZXIuYwppbmRleCAzZWIyMjMzLi40MDIyMmZjIDEwMDY0NAotLS0gYS9zb3VuZC9wcGMvdHVtYmxlci5jCisrKyBiL3NvdW5kL3BwYy90dW1ibGVyLmMKQEAgLTQxLDcgKzQxLDcgQEAKICN1bmRlZiBERUJVRwogCiAjaWZkZWYgREVCVUcKLSNkZWZpbmUgREJHKGZtdC4uLikgcHJpbnRrKGZtdCkKKyNkZWZpbmUgREJHKGZtdC4uLikgcHJpbnRrKEtFUk5fREVCVUcgZm10KQogI2Vsc2UKICNkZWZpbmUgREJHKGZtdC4uLikKICNlbmRpZgpAQCAtMjQwLDcgKzI0MCw3IEBACiAgIAogCWlmIChpMmNfc21idXNfd3JpdGVfaTJjX2Jsb2NrX2RhdGEobWl4LT5pMmMuY2xpZW50LCBUQVNfUkVHX1ZPTCwgNiwKIAkJCQkJICAgYmxvY2spIDwgMCkgewotCQlzbmRfcHJpbnRrKCJmYWlsZWQgdG8gc2V0IHZvbHVtZSBcbiIpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gc2V0IHZvbHVtZSBcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJcmV0dXJuIDA7CkBAIC0zNTAsNyArMzUwLDcgQEAKIAogCWlmIChpMmNfc21idXNfd3JpdGVfaTJjX2Jsb2NrX2RhdGEobWl4LT5pMmMuY2xpZW50LCBUQVNfUkVHX0RSQywKIAkJCQkJICAgMiwgdmFsKSA8IDApIHsKLQkJc25kX3ByaW50aygiZmFpbGVkIHRvIHNldCBEUkNcbiIpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gc2V0IERSQ1xuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlyZXR1cm4gMDsKQEAgLTM4Niw3ICszODYsNyBAQAogCiAJaWYgKGkyY19zbWJ1c193cml0ZV9pMmNfYmxvY2tfZGF0YShtaXgtPmkyYy5jbGllbnQsIFRBU19SRUdfRFJDLAogCQkJCQkgICA2LCB2YWwpIDwgMCkgewotCQlzbmRfcHJpbnRrKCJmYWlsZWQgdG8gc2V0IERSQ1xuIik7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgImZhaWxlZCB0byBzZXQgRFJDXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCXJldHVybiAwOwpAQCAtNTA2LDcgKzUwNiw4IEBACiAJCWJsb2NrW2ldID0gKHZvbCA+PiAoKGluZm8tPmJ5dGVzIC0gaSAtIDEpICogOCkpICYgMHhmZjsKIAlpZiAoaTJjX3NtYnVzX3dyaXRlX2kyY19ibG9ja19kYXRhKG1peC0+aTJjLmNsaWVudCwgaW5mby0+cmVnLAogCQkJCQkgICBpbmZvLT5ieXRlcywgYmxvY2spIDwgMCkgewotCQlzbmRfcHJpbnRrKCJmYWlsZWQgdG8gc2V0IG1vbm8gdm9sdW1lICVkXG4iLCBpbmZvLT5pbmRleCk7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgImZhaWxlZCB0byBzZXQgbW9ubyB2b2x1bWUgJWRcbiIsCisJCQkgICBpbmZvLT5pbmRleCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlyZXR1cm4gMDsKQEAgLTY0Myw3ICs2NDQsNyBAQAogCX0KIAlpZiAoaTJjX3NtYnVzX3dyaXRlX2kyY19ibG9ja19kYXRhKG1peC0+aTJjLmNsaWVudCwgcmVnLAogCQkJCQkgICA5LCBibG9jaykgPCAwKSB7Ci0JCXNuZF9wcmludGsoImZhaWxlZCB0byBzZXQgbW9ubyB2b2x1bWUgJWRcbiIsIHJlZyk7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgImZhaWxlZCB0byBzZXQgbW9ubyB2b2x1bWUgJWRcbiIsIHJlZyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL3NvdW5kL3NoL0tjb25maWcgYi9zb3VuZC9zaC9LY29uZmlnCmluZGV4IGNmYzE0MzkuLmFlZDBmOTAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NoL0tjb25maWcKKysrIGIvc291bmQvc2gvS2NvbmZpZwpAQCAtMTUsNiArMTUsNyBAQAogCXRyaXN0YXRlICJEcmVhbWNhc3QgWWFtYWhhIEFJQ0Egc291bmQiCiAJZGVwZW5kcyBvbiBTSF9EUkVBTUNBU1QKIAlzZWxlY3QgU05EX1BDTQorCXNlbGVjdCBHMl9ETUEKIAloZWxwCiAJICBBTFNBIFNvdW5kIGRyaXZlciBmb3IgdGhlIFNFR0EgRHJlYW1jYXN0IGNvbnNvbGUuCiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NoL2FpY2EuYyBiL3NvdW5kL3NoL2FpY2EuYwppbmRleCA3YzkyMGYzLi5mNTUxMjMzIDEwMDY0NAotLS0gYS9zb3VuZC9zaC9haWNhLmMKKysrIGIvc291bmQvc2gvYWljYS5jCkBAIC02MDksMTEgKzYwOSwxMSBAQAogCWRyZWFtY2FzdGNhcmQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc25kX2NhcmRfYWljYSksIEdGUF9LRVJORUwpOwogCWlmICh1bmxpa2VseSghZHJlYW1jYXN0Y2FyZCkpCiAJCXJldHVybiAtRU5PTUVNOwotCWRyZWFtY2FzdGNhcmQtPmNhcmQgPQotCSAgICBzbmRfY2FyZF9uZXcoaW5kZXgsIFNORF9BSUNBX0RSSVZFUiwgVEhJU19NT0RVTEUsIDApOwotCWlmICh1bmxpa2VseSghZHJlYW1jYXN0Y2FyZC0+Y2FyZCkpIHsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXgsIFNORF9BSUNBX0RSSVZFUiwgVEhJU19NT0RVTEUsIDAsCisJCQkgICAgICAmZHJlYW1jYXN0Y2FyZC0+Y2FyZCk7CisJaWYgKHVubGlrZWx5KGVyciA8IDApKSB7CiAJCWtmcmVlKGRyZWFtY2FzdGNhcmQpOwotCQlyZXR1cm4gLUVOT0RFVjsKKwkJcmV0dXJuIGVycjsKIAl9CiAJc3RyY3B5KGRyZWFtY2FzdGNhcmQtPmNhcmQtPmRyaXZlciwgInNuZF9haWNhIik7CiAJc3RyY3B5KGRyZWFtY2FzdGNhcmQtPmNhcmQtPnNob3J0bmFtZSwgU05EX0FJQ0FfRFJJVkVSKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9LY29uZmlnIGIvc291bmQvc29jL0tjb25maWcKaW5kZXggZWYwMjVjNi4uM2QyYmI2ZiAxMDA2NDQKLS0tIGEvc291bmQvc29jL0tjb25maWcKKysrIGIvc291bmQvc29jL0tjb25maWcKQEAgLTYsNiArNiw3IEBACiAJdHJpc3RhdGUgIkFMU0EgZm9yIFNvQyBhdWRpbyBzdXBwb3J0IgogCXNlbGVjdCBTTkRfUENNCiAJc2VsZWN0IEFDOTdfQlVTIGlmIFNORF9TT0NfQUM5N19CVVMKKwlzZWxlY3QgU05EX0pBQ0sgaWYgSU5QVVQ9eSB8fCBJTlBVVD1TTkQKIAktLS1oZWxwLS0tCiAKIAkgIElmIHlvdSB3YW50IEFTb0Mgc3VwcG9ydCwgeW91IHNob3VsZCBzYXkgWSBoZXJlIGFuZCBhbHNvIHRvIHRoZQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL01ha2VmaWxlIGIvc291bmQvc29jL01ha2VmaWxlCmluZGV4IDg2YTliMWYuLjAyMzc4NzkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9NYWtlZmlsZQorKysgYi9zb3VuZC9zb2MvTWFrZWZpbGUKQEAgLTEsNCArMSw0IEBACi1zbmQtc29jLWNvcmUtb2JqcyA6PSBzb2MtY29yZS5vIHNvYy1kYXBtLm8KK3NuZC1zb2MtY29yZS1vYmpzIDo9IHNvYy1jb3JlLm8gc29jLWRhcG0ubyBzb2MtamFjay5vCiAKIG9iai0kKENPTkZJR19TTkRfU09DKQkrPSBzbmQtc29jLWNvcmUubwogb2JqLSQoQ09ORklHX1NORF9TT0MpCSs9IGNvZGVjcy8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9hdG1lbC9hdG1lbC1wY20uYyBiL3NvdW5kL3NvYy9hdG1lbC9hdG1lbC1wY20uYwppbmRleCAzZGNkYzRlLi45ZWY2Yjk2IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYXRtZWwvYXRtZWwtcGNtLmMKKysrIGIvc291bmQvc29jL2F0bWVsL2F0bWVsLXBjbS5jCkBAIC0zNDcsNyArMzQ3LDcgQEAKIAkJICAgICAgIHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCwgdm1hLT52bV9wYWdlX3Byb3QpOwogfQogCi1zdHJ1Y3Qgc25kX3BjbV9vcHMgYXRtZWxfcGNtX29wcyA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9vcHMgYXRtZWxfcGNtX29wcyA9IHsKIAkub3BlbgkJPSBhdG1lbF9wY21fb3BlbiwKIAkuY2xvc2UJCT0gYXRtZWxfcGNtX2Nsb3NlLAogCS5pb2N0bAkJPSBzbmRfcGNtX2xpYl9pb2N0bCwKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9hdG1lbC9hdG1lbF9zc2NfZGFpLmMgYi9zb3VuZC9zb2MvYXRtZWwvYXRtZWxfc3NjX2RhaS5jCmluZGV4IGZmMDA1NGIuLmU1ODhlNjMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9hdG1lbC9hdG1lbF9zc2NfZGFpLmMKKysrIGIvc291bmQvc29jL2F0bWVsL2F0bWVsX3NzY19kYWkuYwpAQCAtNjk3LDYgKzY5NywxNSBAQAogI2RlZmluZSBBVE1FTF9TU0NfRk9STUFUUyAoU05EUlZfUENNX0ZNVEJJVF9TOCAgICAgfCBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8XAogCQkJICBTTkRSVl9QQ01fRk1UQklUX1MyNF9MRSB8IFNORFJWX1BDTV9GTVRCSVRfUzMyX0xFKQogCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBhdG1lbF9zc2NfZGFpX29wcyA9IHsKKwkuc3RhcnR1cAk9IGF0bWVsX3NzY19zdGFydHVwLAorCS5zaHV0ZG93bgk9IGF0bWVsX3NzY19zaHV0ZG93biwKKwkucHJlcGFyZQk9IGF0bWVsX3NzY19wcmVwYXJlLAorCS5od19wYXJhbXMJPSBhdG1lbF9zc2NfaHdfcGFyYW1zLAorCS5zZXRfZm10CT0gYXRtZWxfc3NjX3NldF9kYWlfZm10LAorCS5zZXRfY2xrZGl2CT0gYXRtZWxfc3NjX3NldF9kYWlfY2xrZGl2LAorfTsKKwogc3RydWN0IHNuZF9zb2NfZGFpIGF0bWVsX3NzY19kYWlbTlVNX1NTQ19ERVZJQ0VTXSA9IHsKIAl7CS5uYW1lID0gImF0bWVsLXNzYzAiLAogCQkuaWQgPSAwLApAQCAtNzEyLDEzICs3MjEsNyBAQAogCQkJLmNoYW5uZWxzX21heCA9IDIsCiAJCQkucmF0ZXMgPSBBVE1FTF9TU0NfUkFURVMsCiAJCQkuZm9ybWF0cyA9IEFUTUVMX1NTQ19GT1JNQVRTLH0sCi0JCS5vcHMgPSB7Ci0JCQkuc3RhcnR1cCA9IGF0bWVsX3NzY19zdGFydHVwLAotCQkJLnNodXRkb3duID0gYXRtZWxfc3NjX3NodXRkb3duLAotCQkJLnByZXBhcmUgPSBhdG1lbF9zc2NfcHJlcGFyZSwKLQkJCS5od19wYXJhbXMgPSBhdG1lbF9zc2NfaHdfcGFyYW1zLAotCQkJLnNldF9mbXQgPSBhdG1lbF9zc2Nfc2V0X2RhaV9mbXQsCi0JCQkuc2V0X2Nsa2RpdiA9IGF0bWVsX3NzY19zZXRfZGFpX2Nsa2Rpdix9LAorCQkub3BzID0gJmF0bWVsX3NzY19kYWlfb3BzLAogCQkucHJpdmF0ZV9kYXRhID0gJnNzY19pbmZvWzBdLAogCX0sCiAjaWYgTlVNX1NTQ19ERVZJQ0VTID09IDMKQEAgLTczNiwxMyArNzM5LDcgQEAKIAkJCS5jaGFubmVsc19tYXggPSAyLAogCQkJLnJhdGVzID0gQVRNRUxfU1NDX1JBVEVTLAogCQkJLmZvcm1hdHMgPSBBVE1FTF9TU0NfRk9STUFUUyx9LAotCQkub3BzID0gewotCQkJLnN0YXJ0dXAgPSBhdG1lbF9zc2Nfc3RhcnR1cCwKLQkJCS5zaHV0ZG93biA9IGF0bWVsX3NzY19zaHV0ZG93biwKLQkJCS5wcmVwYXJlID0gYXRtZWxfc3NjX3ByZXBhcmUsCi0JCQkuaHdfcGFyYW1zID0gYXRtZWxfc3NjX2h3X3BhcmFtcywKLQkJCS5zZXRfZm10ID0gYXRtZWxfc3NjX3NldF9kYWlfZm10LAotCQkJLnNldF9jbGtkaXYgPSBhdG1lbF9zc2Nfc2V0X2RhaV9jbGtkaXYsfSwKKwkJLm9wcyA9ICZhdG1lbF9zc2NfZGFpX29wcywKIAkJLnByaXZhdGVfZGF0YSA9ICZzc2NfaW5mb1sxXSwKIAl9LAogCXsJLm5hbWUgPSAiYXRtZWwtc3NjMiIsCkBAIC03NTksMTMgKzc1Niw3IEBACiAJCQkuY2hhbm5lbHNfbWF4ID0gMiwKIAkJCS5yYXRlcyA9IEFUTUVMX1NTQ19SQVRFUywKIAkJCS5mb3JtYXRzID0gQVRNRUxfU1NDX0ZPUk1BVFMsfSwKLQkJLm9wcyA9IHsKLQkJCS5zdGFydHVwID0gYXRtZWxfc3NjX3N0YXJ0dXAsCi0JCQkuc2h1dGRvd24gPSBhdG1lbF9zc2Nfc2h1dGRvd24sCi0JCQkucHJlcGFyZSA9IGF0bWVsX3NzY19wcmVwYXJlLAotCQkJLmh3X3BhcmFtcyA9IGF0bWVsX3NzY19od19wYXJhbXMsCi0JCQkuc2V0X2ZtdCA9IGF0bWVsX3NzY19zZXRfZGFpX2ZtdCwKLQkJCS5zZXRfY2xrZGl2ID0gYXRtZWxfc3NjX3NldF9kYWlfY2xrZGl2LH0sCisJCS5vcHMgPSAmYXRtZWxfc3NjX2RhaV9vcHMsCiAJCS5wcml2YXRlX2RhdGEgPSAmc3NjX2luZm9bMl0sCiAJfSwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2F0bWVsL3BsYXlwYXFfd204NTEwLmMgYi9zb3VuZC9zb2MvYXRtZWwvcGxheXBhcV93bTg1MTAuYwppbmRleCA0M2RkOGNlLi43MDY1NzUzIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYXRtZWwvcGxheXBhcV93bTg1MTAuYworKysgYi9zb3VuZC9zb2MvYXRtZWwvcGxheXBhcV93bTg1MTAuYwpAQCAtMTY0LDQxICsxNjQsNDEgQEAKIAkgKi8KIAlzd2l0Y2ggKHBhcmFtc19yYXRlKHBhcmFtcykpIHsKIAljYXNlIDQ4MDAwOgotCQlwbGxfb3V0ID0gMTIyODgwMDA7Ci0JCW1jbGtfZGl2ID0gV004NTEwX01DTEtESVZfMTsKLQkJYmNsayA9IFdNODUxMF9CQ0xLRElWXzg7Ci0JCWJyZWFrOwotCi0JY2FzZSA0NDEwMDoKLQkJcGxsX291dCA9IDExMjg5NjAwOwotCQltY2xrX2RpdiA9IFdNODUxMF9NQ0xLRElWXzE7Ci0JCWJjbGsgPSBXTTg1MTBfQkNMS0RJVl84OwotCQlicmVhazsKLQotCWNhc2UgMjIwNTA6Ci0JCXBsbF9vdXQgPSAxMTI4OTYwMDsKKwkJcGxsX291dCA9IDI0NTc2MDAwOwogCQltY2xrX2RpdiA9IFdNODUxMF9NQ0xLRElWXzI7CiAJCWJjbGsgPSBXTTg1MTBfQkNMS0RJVl84OwogCQlicmVhazsKIAotCWNhc2UgMTYwMDA6Ci0JCXBsbF9vdXQgPSAxMjI4ODAwMDsKLQkJbWNsa19kaXYgPSBXTTg1MTBfTUNMS0RJVl8zOworCWNhc2UgNDQxMDA6CisJCXBsbF9vdXQgPSAyMjU3OTIwMDsKKwkJbWNsa19kaXYgPSBXTTg1MTBfTUNMS0RJVl8yOwogCQliY2xrID0gV004NTEwX0JDTEtESVZfODsKIAkJYnJlYWs7CiAKLQljYXNlIDExMDI1OgotCQlwbGxfb3V0ID0gMTEyODk2MDA7CisJY2FzZSAyMjA1MDoKKwkJcGxsX291dCA9IDIyNTc5MjAwOwogCQltY2xrX2RpdiA9IFdNODUxMF9NQ0xLRElWXzQ7CiAJCWJjbGsgPSBXTTg1MTBfQkNMS0RJVl84OwogCQlicmVhazsKIAotCWNhc2UgODAwMDoKLQkJcGxsX291dCA9IDEyMjg4MDAwOworCWNhc2UgMTYwMDA6CisJCXBsbF9vdXQgPSAyNDU3NjAwMDsKIAkJbWNsa19kaXYgPSBXTTg1MTBfTUNMS0RJVl82OwogCQliY2xrID0gV004NTEwX0JDTEtESVZfODsKIAkJYnJlYWs7CiAKKwljYXNlIDExMDI1OgorCQlwbGxfb3V0ID0gMjI1NzkyMDA7CisJCW1jbGtfZGl2ID0gV004NTEwX01DTEtESVZfODsKKwkJYmNsayA9IFdNODUxMF9CQ0xLRElWXzg7CisJCWJyZWFrOworCisJY2FzZSA4MDAwOgorCQlwbGxfb3V0ID0gMjQ1NzYwMDA7CisJCW1jbGtfZGl2ID0gV004NTEwX01DTEtESVZfMTI7CisJCWJjbGsgPSBXTTg1MTBfQkNMS0RJVl84OworCQlicmVhazsKKwogCWRlZmF1bHQ6CiAJCXByX3dhcm5pbmcoInBsYXlwYXFfd204NTEwOiBVbnN1cHBvcnRlZCBzYW1wbGUgcmF0ZSAlZFxuIiwKIAkJCSAgIHBhcmFtc19yYXRlKHBhcmFtcykpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2F0bWVsL3NhbTlnMjBfd204NzMxLmMgYi9zb3VuZC9zb2MvYXRtZWwvc2FtOWcyMF93bTg3MzEuYwppbmRleCA2ZWEwNGJlLi4xNzNhMjM5IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYXRtZWwvc2FtOWcyMF93bTg3MzEuYworKysgYi9zb3VuZC9zb2MvYXRtZWwvc2FtOWcyMF93bTg3MzEuYwpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAKICNpbmNsdWRlIDxsaW51eC9hdG1lbC1zc2MuaD4KIApAQCAtNDUsNiArNDYsNyBAQAogI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgogI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CiAKKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KIApAQCAtNTIsNiArNTQsOSBAQAogI2luY2x1ZGUgImF0bWVsLXBjbS5oIgogI2luY2x1ZGUgImF0bWVsX3NzY19kYWkuaCIKIAorI2RlZmluZSBNQ0xLX1JBVEUgMTIwMDAwMDAKKworc3RhdGljIHN0cnVjdCBjbGsgKm1jbGs7CiAKIHN0YXRpYyBpbnQgYXQ5MXNhbTlnMjBla19zdGFydHVwKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogewpAQCAtNTksMTEgKzY0LDEyIEBACiAJc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWkgPSBydGQtPmRhaS0+Y29kZWNfZGFpOwogCWludCByZXQ7CiAKLQkvKiBjb2RlYyBzeXN0ZW0gY2xvY2sgaXMgc3VwcGxpZWQgYnkgUENLMCwgc2V0IHRvIDEyTUh6ICovCiAJcmV0ID0gc25kX3NvY19kYWlfc2V0X3N5c2Nsayhjb2RlY19kYWksIFdNODczMV9TWVNDTEssCi0JCTEyMDAwMDAwLCBTTkRfU09DX0NMT0NLX0lOKTsKLQlpZiAocmV0IDwgMCkKKwkJTUNMS19SQVRFLCBTTkRfU09DX0NMT0NLX0lOKTsKKwlpZiAocmV0IDwgMCkgeworCQljbGtfZGlzYWJsZShtY2xrKTsKIAkJcmV0dXJuIHJldDsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE4OSw2ICsxOTUsMzEgQEAKIAkuc2h1dGRvd24gPSBhdDkxc2FtOWcyMGVrX3NodXRkb3duLAogfTsKIAorc3RhdGljIGludCBhdDkxc2FtOWcyMGVrX3NldF9iaWFzX2xldmVsKHN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQsCisJCQkJCWVudW0gc25kX3NvY19iaWFzX2xldmVsIGxldmVsKQoreworCXN0YXRpYyBpbnQgbWNsa19vbjsKKwlpbnQgcmV0ID0gMDsKKworCXN3aXRjaCAobGV2ZWwpIHsKKwljYXNlIFNORF9TT0NfQklBU19PTjoKKwljYXNlIFNORF9TT0NfQklBU19QUkVQQVJFOgorCQlpZiAoIW1jbGtfb24pCisJCQlyZXQgPSBjbGtfZW5hYmxlKG1jbGspOworCQlpZiAocmV0ID09IDApCisJCQltY2xrX29uID0gMTsKKwkJYnJlYWs7CisKKwljYXNlIFNORF9TT0NfQklBU19PRkY6CisJY2FzZSBTTkRfU09DX0JJQVNfU1RBTkRCWToKKwkJaWYgKG1jbGtfb24pCisJCQljbGtfZGlzYWJsZShtY2xrKTsKKwkJbWNsa19vbiA9IDA7CisJCWJyZWFrOworCX0KKworCXJldHVybiByZXQ7Cit9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCBhdDkxc2FtOWcyMGVrX2RhcG1fd2lkZ2V0c1tdID0gewogCVNORF9TT0NfREFQTV9NSUMoIkludCBNaWMiLCBOVUxMKSwKQEAgLTI0MywyMSArMjc0LDQ4IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfY2FyZCBzbmRfc29jX2F0OTFzYW05ZzIwZWsgPSB7Ci0JLm5hbWUgPSAiV004NzMxIiwKKwkubmFtZSA9ICJBVDkxU0FNRzIwLUVLIiwKIAkucGxhdGZvcm0gPSAmYXRtZWxfc29jX3BsYXRmb3JtLAogCS5kYWlfbGluayA9ICZhdDkxc2FtOWcyMGVrX2RhaSwKIAkubnVtX2xpbmtzID0gMSwKKwkuc2V0X2JpYXNfbGV2ZWwgPSBhdDkxc2FtOWcyMGVrX3NldF9iaWFzX2xldmVsLAogfTsKIAotc3RhdGljIHN0cnVjdCB3bTg3MzFfc2V0dXBfZGF0YSBhdDkxc2FtOWcyMGVrX3dtODczMV9zZXR1cCA9IHsKLQkuaTJjX2J1cyA9IDAsCi0JLmkyY19hZGRyZXNzID0gMHgxYiwKLX07CisvKgorICogRklYTUU6IFRoaXMgaXMgYSB0ZW1wb3JhcnkgYm9kZ2UgdG8gYXZvaWQgY3Jvc3MtdHJlZSBtZXJnZSBpc3N1ZXMuCisgKiBOZXcgZHJpdmVycyBzaG91bGQgcmVnaXN0ZXIgdGhlIHdtODczMSBJMkMgZGV2aWNlIGluIHRoZSBtYWNoaW5lCisgKiBzZXR1cCBjb2RlICh1bmRlciBhcmNoL2FybSBmb3IgQVJNIHN5c3RlbXMpLgorICovCitzdGF0aWMgaW50IHdtODczMV9pMmNfcmVnaXN0ZXIodm9pZCkKK3sKKwlzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gaW5mbzsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXI7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKKworCW1lbXNldCgmaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBpMmNfYm9hcmRfaW5mbykpOworCWluZm8uYWRkciA9IDB4MWI7CisJc3RybGNweShpbmZvLnR5cGUsICJ3bTg3MzEiLCBJMkNfTkFNRV9TSVpFKTsKKworCWFkYXB0ZXIgPSBpMmNfZ2V0X2FkYXB0ZXIoMCk7CisJaWYgKCFhZGFwdGVyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiY2FuJ3QgZ2V0IGkyYyBhZGFwdGVyIDBcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwljbGllbnQgPSBpMmNfbmV3X2RldmljZShhZGFwdGVyLCAmaW5mbyk7CisJaTJjX3B1dF9hZGFwdGVyKGFkYXB0ZXIpOworCWlmICghY2xpZW50KSB7CisJCXByaW50ayhLRVJOX0VSUiAiY2FuJ3QgYWRkIGkyYyBkZXZpY2UgYXQgMHgleFxuIiwKKwkJCSh1bnNpZ25lZCBpbnQpaW5mby5hZGRyKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcmV0dXJuIDA7Cit9CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgYXQ5MXNhbTlnMjBla19zbmRfZGV2ZGF0YSA9IHsKIAkuY2FyZCA9ICZzbmRfc29jX2F0OTFzYW05ZzIwZWssCiAJLmNvZGVjX2RldiA9ICZzb2NfY29kZWNfZGV2X3dtODczMSwKLQkuY29kZWNfZGF0YSA9ICZhdDkxc2FtOWcyMGVrX3dtODczMV9zZXR1cCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICphdDkxc2FtOWcyMGVrX3NuZF9kZXZpY2U7CkBAIC0yNjYsMjMgKzMyNCw1NiBAQAogewogCXN0cnVjdCBhdG1lbF9zc2NfaW5mbyAqc3NjX3AgPSBhdDkxc2FtOWcyMGVrX2RhaS5jcHVfZGFpLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNzY19kZXZpY2UgKnNzYyA9IE5VTEw7CisJc3RydWN0IGNsayAqcGxsYjsKIAlpbnQgcmV0OwogCisJaWYgKCFtYWNoaW5lX2lzX2F0OTFzYW05ZzIwZWsoKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKgorCSAqIENvZGVjIE1DTEsgaXMgc3VwcGxpZWQgYnkgUENLMCAtIHNldCBpdCB1cC4KKwkgKi8KKwltY2xrID0gY2xrX2dldChOVUxMLCAicGNrMCIpOworCWlmIChJU19FUlIobWNsaykpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJBU29DOiBGYWlsZWQgdG8gZ2V0IE1DTEtcbiIpOworCQlyZXQgPSBQVFJfRVJSKG1jbGspOworCQlnb3RvIGVycjsKKwl9CisKKwlwbGxiID0gY2xrX2dldChOVUxMLCAicGxsYiIpOworCWlmIChJU19FUlIobWNsaykpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJBU29DOiBGYWlsZWQgdG8gZ2V0IFBMTEJcbiIpOworCQlyZXQgPSBQVFJfRVJSKG1jbGspOworCQlnb3RvIGVycl9tY2xrOworCX0KKwlyZXQgPSBjbGtfc2V0X3BhcmVudChtY2xrLCBwbGxiKTsKKwljbGtfcHV0KHBsbGIpOworCWlmIChyZXQgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIkFTb0M6IEZhaWxlZCB0byBzZXQgTUNMSyBwYXJlbnRcbiIpOworCQlnb3RvIGVycl9tY2xrOworCX0KKworCWNsa19zZXRfcmF0ZShtY2xrLCBNQ0xLX1JBVEUpOworCiAJLyoKIAkgKiBSZXF1ZXN0IFNTQyBkZXZpY2UKIAkgKi8KIAlzc2MgPSBzc2NfcmVxdWVzdCgwKTsKIAlpZiAoSVNfRVJSKHNzYykpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJBU29DOiBGYWlsZWQgdG8gcmVxdWVzdCBTU0MgMFxuIik7CiAJCXJldCA9IFBUUl9FUlIoc3NjKTsKIAkJc3NjID0gTlVMTDsKIAkJZ290byBlcnJfc3NjOwogCX0KIAlzc2NfcC0+c3NjID0gc3NjOwogCisJcmV0ID0gd204NzMxX2kyY19yZWdpc3RlcigpOworCWlmIChyZXQgIT0gMCkKKwkJZ290byBlcnJfc3NjOworCiAJYXQ5MXNhbTlnMjBla19zbmRfZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJzb2MtYXVkaW8iLCAtMSk7CiAJaWYgKCFhdDkxc2FtOWcyMGVrX3NuZF9kZXZpY2UpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcKLQkJCQkicGxhdGZvcm0gZGV2aWNlIGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJBU29DOiBQbGF0Zm9ybSBkZXZpY2UgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOwogCQlyZXQgPSAtRU5PTUVNOwogCX0KIApAQCAtMjkyLDE0ICszODMsMTkgQEAKIAogCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQoYXQ5MXNhbTlnMjBla19zbmRfZGV2aWNlKTsKIAlpZiAocmV0KSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHCi0JCQkJInBsYXRmb3JtIGRldmljZSBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiQVNvQzogUGxhdGZvcm0gZGV2aWNlIGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKIAkJcGxhdGZvcm1fZGV2aWNlX3B1dChhdDkxc2FtOWcyMGVrX3NuZF9kZXZpY2UpOwogCX0KIAogCXJldHVybiByZXQ7CiAKIGVycl9zc2M6CisJc3NjX2ZyZWUoc3NjKTsKKwlzc2NfcC0+c3NjID0gTlVMTDsKK2Vycl9tY2xrOgorCWNsa19wdXQobWNsayk7CisJbWNsayA9IE5VTEw7CitlcnI6CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMzE3LDYgKzQxMyw4IEBACiAKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihhdDkxc2FtOWcyMGVrX3NuZF9kZXZpY2UpOwogCWF0OTFzYW05ZzIwZWtfc25kX2RldmljZSA9IE5VTEw7CisJY2xrX3B1dChtY2xrKTsKKwltY2xrID0gTlVMTDsKIH0KIAogbW9kdWxlX2luaXQoYXQ5MXNhbTlnMjBla19pbml0KTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9hdTF4L2RiZG1hMi5jIGIvc291bmQvc29jL2F1MXgvZGJkbWEyLmMKaW5kZXggYmM4ZDY1NC4uMzA0OTBhMiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2F1MXgvZGJkbWEyLmMKKysrIGIvc291bmQvc29jL2F1MXgvZGJkbWEyLmMKQEAgLTMwNSw3ICszMDUsNyBAQAogCXJldHVybiAwOwogfQogCi1zdHJ1Y3Qgc25kX3BjbV9vcHMgYXUxeHBzY19wY21fb3BzID0geworc3RhdGljIHN0cnVjdCBzbmRfcGNtX29wcyBhdTF4cHNjX3BjbV9vcHMgPSB7CiAJLm9wZW4JCT0gYXUxeHBzY19wY21fb3BlbiwKIAkuY2xvc2UJCT0gYXUxeHBzY19wY21fY2xvc2UsCiAJLmlvY3RsCQk9IHNuZF9wY21fbGliX2lvY3RsLApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2F1MXgvcHNjLWFjOTcuYyBiL3NvdW5kL3NvYy9hdTF4L3BzYy1hYzk3LmMKaW5kZXggZjBlMzBhZS4uNDc5ZDdiZCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2F1MXgvcHNjLWFjOTcuYworKysgYi9zb3VuZC9zb2MvYXUxeC9wc2MtYWM5Ny5jCkBAIC0zNDIsNiArMzQyLDExIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIGF1MXhwc2NfYWM5N19kYWlfb3BzID0geworCS50cmlnZ2VyCT0gYXUxeHBzY19hYzk3X3RyaWdnZXIsCisJLmh3X3BhcmFtcwk9IGF1MXhwc2NfYWM5N19od19wYXJhbXMsCit9OworCiBzdHJ1Y3Qgc25kX3NvY19kYWkgYXUxeHBzY19hYzk3X2RhaSA9IHsKIAkubmFtZQkJCT0gImF1MXhwc2NfYWM5NyIsCiAJLmFjOTdfY29udHJvbAkJPSAxLApAQCAtMzYxLDEwICszNjYsNyBAQAogCQkuY2hhbm5lbHNfbWluCT0gMiwKIAkJLmNoYW5uZWxzX21heAk9IDIsCiAJfSwKLQkub3BzID0gewotCQkudHJpZ2dlcgk9IGF1MXhwc2NfYWM5N190cmlnZ2VyLAotCQkuaHdfcGFyYW1zCT0gYXUxeHBzY19hYzk3X2h3X3BhcmFtcywKLQl9LAorCS5vcHMgPSAmYXUxeHBzY19hYzk3X2RhaV9vcHMsCiB9OwogRVhQT1JUX1NZTUJPTF9HUEwoYXUxeHBzY19hYzk3X2RhaSk7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9hdTF4L3BzYy1pMnMuYyBiL3NvdW5kL3NvYy9hdTF4L3BzYy1pMnMuYwppbmRleCBmOTE2ZGU0Li5iYjU4OTMyIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYXUxeC9wc2MtaTJzLmMKKysrIGIvc291bmQvc29jL2F1MXgvcHNjLWkycy5jCkBAIC0zNjcsNiArMzY3LDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIGF1MXhwc2NfaTJzX2RhaV9vcHMgPSB7CisJLnRyaWdnZXIJPSBhdTF4cHNjX2kyc190cmlnZ2VyLAorCS5od19wYXJhbXMJPSBhdTF4cHNjX2kyc19od19wYXJhbXMsCisJLnNldF9mbXQJPSBhdTF4cHNjX2kyc19zZXRfZm10LAorfTsKKwogc3RydWN0IHNuZF9zb2NfZGFpIGF1MXhwc2NfaTJzX2RhaSA9IHsKIAkubmFtZQkJCT0gImF1MXhwc2NfaTJzIiwKIAkucHJvYmUJCQk9IGF1MXhwc2NfaTJzX3Byb2JlLApAQCAtMzg1LDExICszOTEsNyBAQAogCQkuY2hhbm5lbHNfbWluCT0gMiwKIAkJLmNoYW5uZWxzX21heAk9IDgsCS8qIDIgd2l0aG91dCBleHRlcm5hbCBoZWxwICovCiAJfSwKLQkub3BzID0gewotCQkudHJpZ2dlcgk9IGF1MXhwc2NfaTJzX3RyaWdnZXIsCi0JCS5od19wYXJhbXMJPSBhdTF4cHNjX2kyc19od19wYXJhbXMsCi0JCS5zZXRfZm10CT0gYXUxeHBzY19pMnNfc2V0X2ZtdCwKLQl9LAorCS5vcHMgPSAmYXUxeHBzY19pMnNfZGFpX29wcywKIH07CiBFWFBPUlRfU1lNQk9MKGF1MXhwc2NfaTJzX2RhaSk7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1hYzk3LXBjbS5jIGIvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWFjOTctcGNtLmMKaW5kZXggODA2N2NmYS4uOGNmZWQxYSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWFjOTctcGNtLmMKKysrIGIvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWFjOTctcGNtLmMKQEAgLTI5Nyw3ICsyOTcsNyBAQAogfQogI2VuZGlmCiAKLXN0cnVjdCBzbmRfcGNtX29wcyBiZjV4eF9wY21fYWM5N19vcHMgPSB7CitzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIGJmNXh4X3BjbV9hYzk3X29wcyA9IHsKIAkub3BlbgkJPSBiZjV4eF9wY21fb3BlbiwKIAkuaW9jdGwJCT0gc25kX3BjbV9saWJfaW9jdGwsCiAJLmh3X3BhcmFtcwk9IGJmNXh4X3BjbV9od19wYXJhbXMsCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtYWM5Ny5jIGIvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWFjOTcuYwppbmRleCAzYmUyYmU2Li44YTkzNWYyIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtYWM5Ny5jCisrKyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1hYzk3LmMKQEAgLTMxLDcyICszMSw0NiBAQAogI2luY2x1ZGUgImJmNXh4LXNwb3J0LmgiCiAjaW5jbHVkZSAiYmY1eHgtYWM5Ny5oIgogCi0jaWYgZGVmaW5lZChDT05GSUdfQkY1NHgpCi0jZGVmaW5lIFBJTl9SRVFfU1BPUlRfMCB7UF9TUE9SVDBfVEZTLCBQX1NQT1JUMF9EVFBSSSwgUF9TUE9SVDBfVFNDTEssIFwKLQkJUF9TUE9SVDBfUkZTLCBQX1NQT1JUMF9EUlBSSSwgUF9TUE9SVDBfUlNDTEssIDB9Ci0KLSNkZWZpbmUgUElOX1JFUV9TUE9SVF8xIHtQX1NQT1JUMV9URlMsIFBfU1BPUlQxX0RUUFJJLCBQX1NQT1JUMV9UU0NMSywgXAotCQlQX1NQT1JUMV9SRlMsIFBfU1BPUlQxX0RSUFJJLCBQX1NQT1JUMV9SU0NMSywgMH0KLQotI2RlZmluZSBQSU5fUkVRX1NQT1JUXzIge1BfU1BPUlQyX1RGUywgUF9TUE9SVDJfRFRQUkksIFBfU1BPUlQyX1RTQ0xLLCBcCi0JCVBfU1BPUlQyX1JGUywgUF9TUE9SVDJfRFJQUkksIFBfU1BPUlQyX1JTQ0xLLCAwfQotCi0jZGVmaW5lIFBJTl9SRVFfU1BPUlRfMyB7UF9TUE9SVDNfVEZTLCBQX1NQT1JUM19EVFBSSSwgUF9TUE9SVDNfVFNDTEssIFwKLQkJUF9TUE9SVDNfUkZTLCBQX1NQT1JUM19EUlBSSSwgUF9TUE9SVDNfUlNDTEssIDB9Ci0jZWxzZQotI2RlZmluZSBQSU5fUkVRX1NQT1JUXzAge1BfU1BPUlQwX0RUUFJJLCBQX1NQT1JUMF9UU0NMSywgUF9TUE9SVDBfUkZTLCBcCi0JCSBQX1NQT1JUMF9EUlBSSSwgUF9TUE9SVDBfUlNDTEssIDB9Ci0KLSNkZWZpbmUgUElOX1JFUV9TUE9SVF8xIHtQX1NQT1JUMV9EVFBSSSwgUF9TUE9SVDFfVFNDTEssIFBfU1BPUlQxX1JGUywgXAotCQkgUF9TUE9SVDFfRFJQUkksIFBfU1BPUlQxX1JTQ0xLLCAwfQotI2VuZGlmCi0KIHN0YXRpYyBpbnQgKmNtZF9jb3VudDsKIHN0YXRpYyBpbnQgc3BvcnRfbnVtID0gQ09ORklHX1NORF9CRjVYWF9TUE9SVF9OVU07CiAKKyNkZWZpbmUgU1BPUlRfUkVRKHgpIFwKKwlbeF0gPSB7UF9TUE9SVCMjeCMjX1RGUywgUF9TUE9SVCMjeCMjX0RUUFJJLCBQX1NQT1JUIyN4IyNfVFNDTEssIFwKKwkgICAgICAgUF9TUE9SVCMjeCMjX1JGUywgUF9TUE9SVCMjeCMjX0RSUFJJLCBQX1NQT1JUIyN4IyNfUlNDTEssIDB9CiBzdGF0aWMgdTE2IHNwb3J0X3JlcVtdWzddID0gewotCQlQSU5fUkVRX1NQT1JUXzAsCi0jaWZkZWYgUElOX1JFUV9TUE9SVF8xCi0JCVBJTl9SRVFfU1BPUlRfMSwKKyNpZmRlZiBTUE9SVDBfVENSMQorCVNQT1JUX1JFUSgwKSwKICNlbmRpZgotI2lmZGVmIFBJTl9SRVFfU1BPUlRfMgotCQlQSU5fUkVRX1NQT1JUXzIsCisjaWZkZWYgU1BPUlQxX1RDUjEKKwlTUE9SVF9SRVEoMSksCiAjZW5kaWYKLSNpZmRlZiBQSU5fUkVRX1NQT1JUXzMKLQkJUElOX1JFUV9TUE9SVF8zLAorI2lmZGVmIFNQT1JUMl9UQ1IxCisJU1BPUlRfUkVRKDIpLAogI2VuZGlmCi0JfTsKKyNpZmRlZiBTUE9SVDNfVENSMQorCVNQT1JUX1JFUSgzKSwKKyNlbmRpZgorfTsKIAotc3RhdGljIHN0cnVjdCBzcG9ydF9wYXJhbSBzcG9ydF9wYXJhbXNbNF0gPSB7Ci0JewotCQkuZG1hX3J4X2NoYW4JPSBDSF9TUE9SVDBfUlgsCi0JCS5kbWFfdHhfY2hhbgk9IENIX1NQT1JUMF9UWCwKLQkJLmVycl9pcnEJPSBJUlFfU1BPUlQwX0VSUk9SLAotCQkucmVncwkJPSAoc3RydWN0IHNwb3J0X3JlZ2lzdGVyICopU1BPUlQwX1RDUjEsCi0JfSwKLSNpZmRlZiBQSU5fUkVRX1NQT1JUXzEKLQl7Ci0JCS5kbWFfcnhfY2hhbgk9IENIX1NQT1JUMV9SWCwKLQkJLmRtYV90eF9jaGFuCT0gQ0hfU1BPUlQxX1RYLAotCQkuZXJyX2lycQk9IElSUV9TUE9SVDFfRVJST1IsCi0JCS5yZWdzCQk9IChzdHJ1Y3Qgc3BvcnRfcmVnaXN0ZXIgKilTUE9SVDFfVENSMSwKLQl9LAotI2VuZGlmCi0jaWZkZWYgUElOX1JFUV9TUE9SVF8yCi0JewotCQkuZG1hX3J4X2NoYW4JPSBDSF9TUE9SVDJfUlgsCi0JCS5kbWFfdHhfY2hhbgk9IENIX1NQT1JUMl9UWCwKLQkJLmVycl9pcnEJPSBJUlFfU1BPUlQyX0VSUk9SLAotCQkucmVncwkJPSAoc3RydWN0IHNwb3J0X3JlZ2lzdGVyICopU1BPUlQyX1RDUjEsCi0JfSwKLSNlbmRpZgotI2lmZGVmIFBJTl9SRVFfU1BPUlRfMwotCXsKLQkJLmRtYV9yeF9jaGFuCT0gQ0hfU1BPUlQzX1JYLAotCQkuZG1hX3R4X2NoYW4JPSBDSF9TUE9SVDNfVFgsCi0JCS5lcnJfaXJxCT0gSVJRX1NQT1JUM19FUlJPUiwKLQkJLnJlZ3MJCT0gKHN0cnVjdCBzcG9ydF9yZWdpc3RlciAqKVNQT1JUM19UQ1IxLAorI2RlZmluZSBTUE9SVF9QQVJBTVMoeCkgXAorCVt4XSA9IHsgXAorCQkuZG1hX3J4X2NoYW4gPSBDSF9TUE9SVCMjeCMjX1JYLCBcCisJCS5kbWFfdHhfY2hhbiA9IENIX1NQT1JUIyN4IyNfVFgsIFwKKwkJLmVycl9pcnEgICAgID0gSVJRX1NQT1JUIyN4IyNfRVJST1IsIFwKKwkJLnJlZ3MgICAgICAgID0gKHN0cnVjdCBzcG9ydF9yZWdpc3RlciAqKVNQT1JUIyN4IyNfVENSMSwgXAogCX0KK3N0YXRpYyBzdHJ1Y3Qgc3BvcnRfcGFyYW0gc3BvcnRfcGFyYW1zWzRdID0geworI2lmZGVmIFNQT1JUMF9UQ1IxCisJU1BPUlRfUEFSQU1TKDApLAorI2VuZGlmCisjaWZkZWYgU1BPUlQxX1RDUjEKKwlTUE9SVF9QQVJBTVMoMSksCisjZW5kaWYKKyNpZmRlZiBTUE9SVDJfVENSMQorCVNQT1JUX1BBUkFNUygyKSwKKyNlbmRpZgorI2lmZGVmIFNQT1JUM19UQ1IxCisJU1BPUlRfUEFSQU1TKDMpLAogI2VuZGlmCiB9OwogCkBAIC0zMzIsMTEgKzMwNiwxMSBAQAogCWlmIChjbWRfY291bnQgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlpZiAocGVyaXBoZXJhbF9yZXF1ZXN0X2xpc3QoJnNwb3J0X3JlcVtzcG9ydF9udW1dWzBdLCAic29jLWF1ZGlvIikpIHsKKwlpZiAocGVyaXBoZXJhbF9yZXF1ZXN0X2xpc3Qoc3BvcnRfcmVxW3Nwb3J0X251bV0sICJzb2MtYXVkaW8iKSkgewogCQlwcl9lcnIoIlJlcXVlc3RpbmcgUGVyaXBoZXJhbHMgZmFpbGVkXG4iKTsKIAkJcmV0ID0gIC1FRkFVTFQ7CiAJCWdvdG8gcGVyaXBoZXJhbF9lcnI7Ci0JCX0KKwl9CiAKICNpZmRlZiBDT05GSUdfU05EX0JGNVhYX0hBVkVfQ09MRF9SRVNFVAogCS8qIFJlcXVlc3QgUEIzIGFzIHJlc2V0IHBpbiAqLwpAQCAtMzgzLDkgKzM1Nyw5IEBACiBzcG9ydF9lcnI6CiAjaWZkZWYgQ09ORklHX1NORF9CRjVYWF9IQVZFX0NPTERfUkVTRVQKIAlncGlvX2ZyZWUoQ09ORklHX1NORF9CRjVYWF9SRVNFVF9HUElPX05VTSk7Ci0jZW5kaWYKIGdwaW9fZXJyOgotCXBlcmlwaGVyYWxfZnJlZV9saXN0KCZzcG9ydF9yZXFbc3BvcnRfbnVtXVswXSk7CisjZW5kaWYKKwlwZXJpcGhlcmFsX2ZyZWVfbGlzdChzcG9ydF9yZXFbc3BvcnRfbnVtXSk7CiBwZXJpcGhlcmFsX2VycjoKIAlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpY21kX2NvdW50KTsKIAljbWRfY291bnQgPSBOVUxMOwpAQCAtMzk4LDcgKzM3Miw3IEBACiB7CiAJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWNtZF9jb3VudCk7CiAJY21kX2NvdW50ID0gTlVMTDsKLQlwZXJpcGhlcmFsX2ZyZWVfbGlzdCgmc3BvcnRfcmVxW3Nwb3J0X251bV1bMF0pOworCXBlcmlwaGVyYWxfZnJlZV9saXN0KHNwb3J0X3JlcVtzcG9ydF9udW1dKTsKICNpZmRlZiBDT05GSUdfU05EX0JGNVhYX0hBVkVfQ09MRF9SRVNFVAogCWdwaW9fZnJlZShDT05GSUdfU05EX0JGNVhYX1JFU0VUX0dQSU9fTlVNKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWFkNzMzMTEuYyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1hZDczMzExLmMKaW5kZXggN2YyYTVlMS4uZWRmYmRjMCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWFkNzMzMTEuYworKysgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtYWQ3MzMxMS5jCkBAIC0xMTQsNyArMTE0LDcgQEAKIAlTU1lOQygpOwogCiAJLyogV2hlbiBUVVZGIGlzIHNldCwgdGhlIGRhdGEgaXMgYWxyZWFkeSBzZW5kIG91dCAqLwotCXdoaWxlICghKHN0YXR1cyAmIFRVVkYpICYmIGNvdW50KysgPCAxMDAwMCkgeworCXdoaWxlICghKHN0YXR1cyAmIFRVVkYpICYmICsrY291bnQgPCAxMDAwMCkgewogCQl1ZGVsYXkoMSk7CiAJCXN0YXR1cyA9IGJmaW5fcmVhZF9TUE9SVF9TVEFUKCk7CiAJCVNTWU5DKCk7CkBAIC0xMjMsNyArMTIzLDcgQEAKIAlTU1lOQygpOwogCWxvY2FsX2lycV9lbmFibGUoKTsKIAotCWlmIChjb3VudCA9PSAxMDAwMCkgeworCWlmIChjb3VudCA+PSAxMDAwMCkgewogCQlwcmludGsoS0VSTl9FUlIgImFkNzMzMTE6IGZhaWxlZCB0byBjb25maWd1cmUgY29kZWNcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWkycy1wY20uYyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1pMnMtcGNtLmMKaW5kZXggNTNkMjkwYi4uMTMxOGM0ZiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWkycy1wY20uYworKysgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtaTJzLXBjbS5jCkBAIC0xODQsNyArMTg0LDcgQEAKIAlyZXR1cm4gMCA7CiB9CiAKLXN0cnVjdCBzbmRfcGNtX29wcyBiZjV4eF9wY21faTJzX29wcyA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9vcHMgYmY1eHhfcGNtX2kyc19vcHMgPSB7CiAJLm9wZW4JCT0gYmY1eHhfcGNtX29wZW4sCiAJLmlvY3RsCQk9IHNuZF9wY21fbGliX2lvY3RsLAogCS5od19wYXJhbXMJPSBiZjV4eF9wY21faHdfcGFyYW1zLApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWkycy5jIGIvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWkycy5jCmluZGV4IGQxZDk1ZDIuLjk2NDgyNDQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1pMnMuYworKysgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtaTJzLmMKQEAgLTI4Nyw2ICsyODcsMTMgQEAKICNkZWZpbmUgQkY1WFhfSTJTX0ZPUk1BVFMgKFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwgU05EUlZfUENNX0ZNVEJJVF9TMjRfTEUgfFwKIAlTTkRSVl9QQ01fRk1UQklUX1MzMl9MRSkKIAorc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgYmY1eHhfaTJzX2RhaV9vcHMgPSB7CisJLnN0YXJ0dXAJPSBiZjV4eF9pMnNfc3RhcnR1cCwKKwkuc2h1dGRvd24JPSBiZjV4eF9pMnNfc2h1dGRvd24sCisJLmh3X3BhcmFtcwk9IGJmNXh4X2kyc19od19wYXJhbXMsCisJLnNldF9mbXQJPSBiZjV4eF9pMnNfc2V0X2RhaV9mbXQsCit9OworCiBzdHJ1Y3Qgc25kX3NvY19kYWkgYmY1eHhfaTJzX2RhaSA9IHsKIAkubmFtZSA9ICJiZjV4eC1pMnMiLAogCS5pZCA9IDAsCkBAIC0zMDQsMTIgKzMxMSw3IEBACiAJCS5jaGFubmVsc19tYXggPSAyLAogCQkucmF0ZXMgPSBCRjVYWF9JMlNfUkFURVMsCiAJCS5mb3JtYXRzID0gQkY1WFhfSTJTX0ZPUk1BVFMsfSwKLQkub3BzID0gewotCQkuc3RhcnR1cCAgID0gYmY1eHhfaTJzX3N0YXJ0dXAsCi0JCS5zaHV0ZG93biAgPSBiZjV4eF9pMnNfc2h1dGRvd24sCi0JCS5od19wYXJhbXMgPSBiZjV4eF9pMnNfaHdfcGFyYW1zLAotCQkuc2V0X2ZtdCA9IGJmNXh4X2kyc19zZXRfZGFpX2ZtdCwKLQl9LAorCS5vcHMgPSAmYmY1eHhfaTJzX2RhaV9vcHMsCiB9OwogRVhQT1JUX1NZTUJPTF9HUEwoYmY1eHhfaTJzX2RhaSk7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1zcG9ydC5jIGIvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LXNwb3J0LmMKaW5kZXggM2I5OWU0OC4uYjc5NTNjOCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LXNwb3J0LmMKKysrIGIvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LXNwb3J0LmMKQEAgLTEzMyw3ICsxMzMsNyBAQAogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IGZyYWdjb3VudDsgKytpKSB7Ci0JCWRlc2NbaV0ubmV4dF9kZXNjX2FkZHIgID0gKHVuc2lnbmVkIGxvbmcpJihkZXNjW2kgKyAxXSk7CisJCWRlc2NbaV0ubmV4dF9kZXNjX2FkZHIgID0gJihkZXNjW2kgKyAxXSk7CiAJCWRlc2NbaV0uc3RhcnRfYWRkciA9ICh1bnNpZ25lZCBsb25nKWJ1ZiArIGkqZnJhZ3NpemU7CiAJCWRlc2NbaV0uY2ZnID0gY2ZnOwogCQlkZXNjW2ldLnhfY291bnQgPSB4X2NvdW50OwpAQCAtMTQzLDEyICsxNDMsMTIgQEAKIAl9CiAKIAkvKiBtYWtlIGNpcmN1bGFyICovCi0JZGVzY1tmcmFnY291bnQtMV0ubmV4dF9kZXNjX2FkZHIgPSAodW5zaWduZWQgbG9uZylkZXNjOworCWRlc2NbZnJhZ2NvdW50LTFdLm5leHRfZGVzY19hZGRyID0gZGVzYzsKIAotCXByX2RlYnVnKCJzZXR1cCBkZXNjOiBkZXNjMD0lcCwgbmV4dDA9JWx4LCBkZXNjMT0lcCwiCi0JCSJuZXh0MT0lbHhcbnhfY291bnQ9JXgseV9jb3VudD0leCxhZGRyPTB4JWx4LGNmcz0weCV4XG4iLAotCQkmKGRlc2NbMF0pLCBkZXNjWzBdLm5leHRfZGVzY19hZGRyLAotCQkmKGRlc2NbMV0pLCBkZXNjWzFdLm5leHRfZGVzY19hZGRyLAorCXByX2RlYnVnKCJzZXR1cCBkZXNjOiBkZXNjMD0lcCwgbmV4dDA9JXAsIGRlc2MxPSVwLCIKKwkJIm5leHQxPSVwXG54X2NvdW50PSV4LHlfY291bnQ9JXgsYWRkcj0weCVseCxjZnM9MHgleFxuIiwKKwkJZGVzYywgZGVzY1swXS5uZXh0X2Rlc2NfYWRkciwKKwkJZGVzYysxLCBkZXNjWzFdLm5leHRfZGVzY19hZGRyLAogCQlkZXNjWzBdLnhfY291bnQsIGRlc2NbMF0ueV9jb3VudCwKIAkJZGVzY1swXS5zdGFydF9hZGRyLCBkZXNjWzBdLmNmZyk7CiB9CkBAIC0xODQsMjIgKzE4NCwyMCBAQAogCUJVR19PTihzcG9ydC0+Y3Vycl9yeF9kZXNjID09IHNwb3J0LT5kdW1teV9yeF9kZXNjKTsKIAogCS8qIE1heWJlIHRoZSBkdW1teSBidWZmZXIgZGVzY3JpcHRvciByaW5nIGlzIGRhbWFnZWQgKi8KLQlzcG9ydC0+ZHVtbXlfcnhfZGVzYy0+bmV4dF9kZXNjX2FkZHIgPSBcCi0JCQkodW5zaWduZWQgbG9uZykoc3BvcnQtPmR1bW15X3J4X2Rlc2MrMSk7CisJc3BvcnQtPmR1bW15X3J4X2Rlc2MtPm5leHRfZGVzY19hZGRyID0gc3BvcnQtPmR1bW15X3J4X2Rlc2MgKyAxOwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWRlc2MgPSAoc3RydWN0IGRtYXNnICopZ2V0X2RtYV9uZXh0X2Rlc2NfcHRyKHNwb3J0LT5kbWFfcnhfY2hhbik7CisJZGVzYyA9IGdldF9kbWFfbmV4dF9kZXNjX3B0cihzcG9ydC0+ZG1hX3J4X2NoYW4pOwogCS8qIENvcHkgdGhlIGRlc2NyaXB0b3Igd2hpY2ggd2lsbCBiZSBkYW1hZ2VkIHRvIGJhY2t1cCAqLwogCXRlbXBfZGVzYyA9ICpkZXNjOwogCWRlc2MtPnhfY291bnQgPSAweGE7CiAJZGVzYy0+eV9jb3VudCA9IDA7Ci0JZGVzYy0+bmV4dF9kZXNjX2FkZHIgPSAodW5zaWduZWQgbG9uZykoc3BvcnQtPmR1bW15X3J4X2Rlc2MpOworCWRlc2MtPm5leHRfZGVzY19hZGRyID0gc3BvcnQtPmR1bW15X3J4X2Rlc2M7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCS8qIFdhaXRpbmcgZm9yIGR1bW15IGJ1ZmZlciBkZXNjcmlwdG9yIGlzIGFscmVhZHkgaG9va2VkKi8KIAl3aGlsZSAoKGdldF9kbWFfY3Vycl9kZXNjX3B0cihzcG9ydC0+ZG1hX3J4X2NoYW4pIC0KLQkJCXNpemVvZihzdHJ1Y3QgZG1hc2cpKSAhPQotCQkJKHVuc2lnbmVkIGxvbmcpc3BvcnQtPmR1bW15X3J4X2Rlc2MpCi0JCTsKKwkJCXNpemVvZihzdHJ1Y3QgZG1hc2cpKSAhPSBzcG9ydC0+ZHVtbXlfcnhfZGVzYykKKwkJY29udGludWU7CiAJc3BvcnQtPmN1cnJfcnhfZGVzYyA9IHNwb3J0LT5kdW1teV9yeF9kZXNjOwogCS8qIFJlc3RvcmUgdGhlIGRhbWFnZWQgZGVzY3JpcHRvciAqLwogCSpkZXNjID0gdGVtcF9kZXNjOwpAQCAtMjEwLDE0ICsyMDgsMTIgQEAKIHN0YXRpYyBpbmxpbmUgaW50IHNwb3J0X3J4X2RtYV9zdGFydChzdHJ1Y3Qgc3BvcnRfZGV2aWNlICpzcG9ydCwgaW50IGR1bW15KQogewogCWlmIChkdW1teSkgewotCQlzcG9ydC0+ZHVtbXlfcnhfZGVzYy0+bmV4dF9kZXNjX2FkZHIgPSBcCi0JCQkJKHVuc2lnbmVkIGxvbmcpIHNwb3J0LT5kdW1teV9yeF9kZXNjOworCQlzcG9ydC0+ZHVtbXlfcnhfZGVzYy0+bmV4dF9kZXNjX2FkZHIgPSBzcG9ydC0+ZHVtbXlfcnhfZGVzYzsKIAkJc3BvcnQtPmN1cnJfcnhfZGVzYyA9IHNwb3J0LT5kdW1teV9yeF9kZXNjOwogCX0gZWxzZQogCQlzcG9ydC0+Y3Vycl9yeF9kZXNjID0gc3BvcnQtPmRtYV9yeF9kZXNjOwogCi0Jc2V0X2RtYV9uZXh0X2Rlc2NfYWRkcihzcG9ydC0+ZG1hX3J4X2NoYW4sIFwKLQkJCSh1bnNpZ25lZCBsb25nKShzcG9ydC0+Y3Vycl9yeF9kZXNjKSk7CisJc2V0X2RtYV9uZXh0X2Rlc2NfYWRkcihzcG9ydC0+ZG1hX3J4X2NoYW4sIHNwb3J0LT5jdXJyX3J4X2Rlc2MpOwogCXNldF9kbWFfeF9jb3VudChzcG9ydC0+ZG1hX3J4X2NoYW4sIDApOwogCXNldF9kbWFfeF9tb2RpZnkoc3BvcnQtPmRtYV9yeF9jaGFuLCAwKTsKIAlzZXRfZG1hX2NvbmZpZyhzcG9ydC0+ZG1hX3J4X2NoYW4sIChETUFGTE9XX0xBUkdFIHwgTkRTSVpFXzkgfCBcCkBAIC0yMzEsMTQgKzIyNywxMiBAQAogc3RhdGljIGlubGluZSBpbnQgc3BvcnRfdHhfZG1hX3N0YXJ0KHN0cnVjdCBzcG9ydF9kZXZpY2UgKnNwb3J0LCBpbnQgZHVtbXkpCiB7CiAJaWYgKGR1bW15KSB7Ci0JCXNwb3J0LT5kdW1teV90eF9kZXNjLT5uZXh0X2Rlc2NfYWRkciA9IFwKLQkJCQkodW5zaWduZWQgbG9uZykgc3BvcnQtPmR1bW15X3R4X2Rlc2M7CisJCXNwb3J0LT5kdW1teV90eF9kZXNjLT5uZXh0X2Rlc2NfYWRkciA9IHNwb3J0LT5kdW1teV90eF9kZXNjOwogCQlzcG9ydC0+Y3Vycl90eF9kZXNjID0gc3BvcnQtPmR1bW15X3R4X2Rlc2M7CiAJfSBlbHNlCiAJCXNwb3J0LT5jdXJyX3R4X2Rlc2MgPSBzcG9ydC0+ZG1hX3R4X2Rlc2M7CiAKLQlzZXRfZG1hX25leHRfZGVzY19hZGRyKHNwb3J0LT5kbWFfdHhfY2hhbiwgXAotCQkJKHVuc2lnbmVkIGxvbmcpKHNwb3J0LT5jdXJyX3R4X2Rlc2MpKTsKKwlzZXRfZG1hX25leHRfZGVzY19hZGRyKHNwb3J0LT5kbWFfdHhfY2hhbiwgc3BvcnQtPmN1cnJfdHhfZGVzYyk7CiAJc2V0X2RtYV94X2NvdW50KHNwb3J0LT5kbWFfdHhfY2hhbiwgMCk7CiAJc2V0X2RtYV94X21vZGlmeShzcG9ydC0+ZG1hX3R4X2NoYW4sIDApOwogCXNldF9kbWFfY29uZmlnKHNwb3J0LT5kbWFfdHhfY2hhbiwKQEAgLTI2MSwxMSArMjU1LDkgQEAKIAkJQlVHX09OKHNwb3J0LT5jdXJyX3J4X2Rlc2MgIT0gc3BvcnQtPmR1bW15X3J4X2Rlc2MpOwogCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJCXdoaWxlICgoZ2V0X2RtYV9jdXJyX2Rlc2NfcHRyKHNwb3J0LT5kbWFfcnhfY2hhbikgLQotCQkJc2l6ZW9mKHN0cnVjdCBkbWFzZykpICE9Ci0JCQkodW5zaWduZWQgbG9uZylzcG9ydC0+ZHVtbXlfcnhfZGVzYykKLQkJCTsKLQkJc3BvcnQtPmR1bW15X3J4X2Rlc2MtPm5leHRfZGVzY19hZGRyID0KLQkJCQkodW5zaWduZWQgbG9uZykoc3BvcnQtPmRtYV9yeF9kZXNjKTsKKwkJCXNpemVvZihzdHJ1Y3QgZG1hc2cpKSAhPSBzcG9ydC0+ZHVtbXlfcnhfZGVzYykKKwkJCWNvbnRpbnVlOworCQlzcG9ydC0+ZHVtbXlfcnhfZGVzYy0+bmV4dF9kZXNjX2FkZHIgPSBzcG9ydC0+ZG1hX3J4X2Rlc2M7CiAJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAkJc3BvcnQtPmN1cnJfcnhfZGVzYyA9IHNwb3J0LT5kbWFfcnhfZGVzYzsKIAl9IGVsc2UgewpAQCAtMzEwLDIzICszMDIsMjEgQEAKIAlCVUdfT04oc3BvcnQtPmR1bW15X3R4X2Rlc2MgPT0gTlVMTCk7CiAJQlVHX09OKHNwb3J0LT5jdXJyX3R4X2Rlc2MgPT0gc3BvcnQtPmR1bW15X3R4X2Rlc2MpOwogCi0Jc3BvcnQtPmR1bW15X3R4X2Rlc2MtPm5leHRfZGVzY19hZGRyID0gXAotCQkJKHVuc2lnbmVkIGxvbmcpKHNwb3J0LT5kdW1teV90eF9kZXNjKzEpOworCXNwb3J0LT5kdW1teV90eF9kZXNjLT5uZXh0X2Rlc2NfYWRkciA9IHNwb3J0LT5kdW1teV90eF9kZXNjICsgMTsKIAogCS8qIFNob3J0ZW4gdGhlIHRpbWUgb24gbGFzdCBub3JtYWwgZGVzY3JpcHRvciAqLwogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlkZXNjID0gKHN0cnVjdCBkbWFzZyAqKWdldF9kbWFfbmV4dF9kZXNjX3B0cihzcG9ydC0+ZG1hX3R4X2NoYW4pOworCWRlc2MgPSBnZXRfZG1hX25leHRfZGVzY19wdHIoc3BvcnQtPmRtYV90eF9jaGFuKTsKIAkvKiBTdG9yZSB0aGUgZGVzY3JpcHRvciB3aGljaCB3aWxsIGJlIGRhbWFnZWQgKi8KIAl0ZW1wX2Rlc2MgPSAqZGVzYzsKIAlkZXNjLT54X2NvdW50ID0gMHhhOwogCWRlc2MtPnlfY291bnQgPSAwOwotCWRlc2MtPm5leHRfZGVzY19hZGRyID0gKHVuc2lnbmVkIGxvbmcpKHNwb3J0LT5kdW1teV90eF9kZXNjKTsKKwlkZXNjLT5uZXh0X2Rlc2NfYWRkciA9IHNwb3J0LT5kdW1teV90eF9kZXNjOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAkvKiBXYWl0aW5nIGZvciBkdW1teSBidWZmZXIgZGVzY3JpcHRvciBpcyBhbHJlYWR5IGhvb2tlZCovCiAJd2hpbGUgKChnZXRfZG1hX2N1cnJfZGVzY19wdHIoc3BvcnQtPmRtYV90eF9jaGFuKSAtIFwKLQkJCXNpemVvZihzdHJ1Y3QgZG1hc2cpKSAhPSBcCi0JCQkodW5zaWduZWQgbG9uZylzcG9ydC0+ZHVtbXlfdHhfZGVzYykKLQkJOworCQkJc2l6ZW9mKHN0cnVjdCBkbWFzZykpICE9IHNwb3J0LT5kdW1teV90eF9kZXNjKQorCQljb250aW51ZTsKIAlzcG9ydC0+Y3Vycl90eF9kZXNjID0gc3BvcnQtPmR1bW15X3R4X2Rlc2M7CiAJLyogUmVzdG9yZSB0aGUgZGFtYWdlZCBkZXNjcmlwdG9yICovCiAJKmRlc2MgPSB0ZW1wX2Rlc2M7CkBAIC0zNDcsMTEgKzMzNyw5IEBACiAJCS8qIEhvb2sgdGhlIG5vcm1hbCBidWZmZXIgZGVzY3JpcHRvciAqLwogCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJCXdoaWxlICgoZ2V0X2RtYV9jdXJyX2Rlc2NfcHRyKHNwb3J0LT5kbWFfdHhfY2hhbikgLQotCQkJc2l6ZW9mKHN0cnVjdCBkbWFzZykpICE9Ci0JCQkodW5zaWduZWQgbG9uZylzcG9ydC0+ZHVtbXlfdHhfZGVzYykKLQkJCTsKLQkJc3BvcnQtPmR1bW15X3R4X2Rlc2MtPm5leHRfZGVzY19hZGRyID0KLQkJCQkodW5zaWduZWQgbG9uZykoc3BvcnQtPmRtYV90eF9kZXNjKTsKKwkJCXNpemVvZihzdHJ1Y3QgZG1hc2cpKSAhPSBzcG9ydC0+ZHVtbXlfdHhfZGVzYykKKwkJCWNvbnRpbnVlOworCQlzcG9ydC0+ZHVtbXlfdHhfZGVzYy0+bmV4dF9kZXNjX2FkZHIgPSBzcG9ydC0+ZG1hX3R4X2Rlc2M7CiAJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAkJc3BvcnQtPmN1cnJfdHhfZGVzYyA9IHNwb3J0LT5kbWFfdHhfZGVzYzsKIAl9IGVsc2UgewpAQCAtNTM2LDE5ICs1MjQsMTcgQEAKIAl1bnNpZ25lZCBjb25maWc7CiAKIAlwcl9kZWJ1ZygiJXMgZW50ZXJlZFxuIiwgX19mdW5jX18pOwotI2lmIEwxX0RBVEFfQV9MRU5HVEggIT0gMAotCWRlc2MgPSAoc3RydWN0IGRtYXNnICopIGwxX2RhdGFfc3JhbV9hbGxvYygyICogc2l6ZW9mKCpkZXNjKSk7Ci0jZWxzZQotCXsKKwlpZiAoTDFfREFUQV9BX0xFTkdUSCkKKwkJZGVzYyA9IGwxX2RhdGFfc3JhbV96YWxsb2MoMiAqIHNpemVvZigqZGVzYykpOworCWVsc2UgewogCQlkbWFfYWRkcl90IGFkZHI7CiAJCWRlc2MgPSBkbWFfYWxsb2NfY29oZXJlbnQoTlVMTCwgMiAqIHNpemVvZigqZGVzYyksICZhZGRyLCAwKTsKKwkJbWVtc2V0KGRlc2MsIDAsIDIgKiBzaXplb2YoKmRlc2MpKTsKIAl9Ci0jZW5kaWYKIAlpZiAoZGVzYyA9PSBOVUxMKSB7CiAJCXByX2VycigiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgZHVtbXkgcnggZGVzY1xuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQltZW1zZXQoZGVzYywgMCwgMiAqIHNpemVvZigqZGVzYykpOwogCXNwb3J0LT5kdW1teV9yeF9kZXNjID0gZGVzYzsKIAlkZXNjLT5zdGFydF9hZGRyID0gKHVuc2lnbmVkIGxvbmcpc3BvcnQtPmR1bW15X2J1ZjsKIAljb25maWcgPSBETUFGTE9XX0xBUkdFIHwgTkRTSVpFXzkgfCBjb21wdXRlX3dkc2l6ZShzcG9ydC0+d2RzaXplKQpAQCAtNTU5LDggKzU0NSw4IEBACiAJZGVzYy0+eV9jb3VudCA9IDA7CiAJZGVzYy0+eV9tb2RpZnkgPSAwOwogCW1lbWNweShkZXNjKzEsIGRlc2MsIHNpemVvZigqZGVzYykpOwotCWRlc2MtPm5leHRfZGVzY19hZGRyID0gKHVuc2lnbmVkIGxvbmcpKGRlc2MrMSk7Ci0JZGVzY1sxXS5uZXh0X2Rlc2NfYWRkciA9ICh1bnNpZ25lZCBsb25nKWRlc2M7CisJZGVzYy0+bmV4dF9kZXNjX2FkZHIgPSBkZXNjICsgMTsKKwlkZXNjWzFdLm5leHRfZGVzY19hZGRyID0gZGVzYzsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTcxLDE5ICs1NTcsMTcgQEAKIAogCXByX2RlYnVnKCIlcyBlbnRlcmVkXG4iLCBfX2Z1bmNfXyk7CiAKLSNpZiBMMV9EQVRBX0FfTEVOR1RIICE9IDAKLQlkZXNjID0gKHN0cnVjdCBkbWFzZyAqKSBsMV9kYXRhX3NyYW1fYWxsb2MoMiAqIHNpemVvZigqZGVzYykpOwotI2Vsc2UKLQl7CisJaWYgKEwxX0RBVEFfQV9MRU5HVEgpCisJCWRlc2MgPSBsMV9kYXRhX3NyYW1femFsbG9jKDIgKiBzaXplb2YoKmRlc2MpKTsKKwllbHNlIHsKIAkJZG1hX2FkZHJfdCBhZGRyOwogCQlkZXNjID0gZG1hX2FsbG9jX2NvaGVyZW50KE5VTEwsIDIgKiBzaXplb2YoKmRlc2MpLCAmYWRkciwgMCk7CisJCW1lbXNldChkZXNjLCAwLCAyICogc2l6ZW9mKCpkZXNjKSk7CiAJfQotI2VuZGlmCiAJaWYgKCFkZXNjKSB7CiAJCXByX2VycigiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgZHVtbXkgdHggZGVzY1xuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQltZW1zZXQoZGVzYywgMCwgMiAqIHNpemVvZigqZGVzYykpOwogCXNwb3J0LT5kdW1teV90eF9kZXNjID0gZGVzYzsKIAlkZXNjLT5zdGFydF9hZGRyID0gKHVuc2lnbmVkIGxvbmcpc3BvcnQtPmR1bW15X2J1ZiArIFwKIAkJc3BvcnQtPmR1bW15X2NvdW50OwpAQCAtNTk1LDggKzU3OSw4IEBACiAJZGVzYy0+eV9jb3VudCA9IDA7CiAJZGVzYy0+eV9tb2RpZnkgPSAwOwogCW1lbWNweShkZXNjKzEsIGRlc2MsIHNpemVvZigqZGVzYykpOwotCWRlc2MtPm5leHRfZGVzY19hZGRyID0gKHVuc2lnbmVkIGxvbmcpKGRlc2MrMSk7Ci0JZGVzY1sxXS5uZXh0X2Rlc2NfYWRkciA9ICh1bnNpZ25lZCBsb25nKWRlc2M7CisJZGVzYy0+bmV4dF9kZXNjX2FkZHIgPSBkZXNjICsgMTsKKwlkZXNjWzFdLm5leHRfZGVzY19hZGRyID0gZGVzYzsKIAlyZXR1cm4gMDsKIH0KIApAQCAtODcyLDE3ICs4NTYsMTUgQEAKIAlzcG9ydC0+d2RzaXplID0gd2RzaXplOwogCXNwb3J0LT5kdW1teV9jb3VudCA9IGR1bW15X2NvdW50OwogCi0jaWYgTDFfREFUQV9BX0xFTkdUSCAhPSAwCi0Jc3BvcnQtPmR1bW15X2J1ZiA9IGwxX2RhdGFfc3JhbV9hbGxvYyhkdW1teV9jb3VudCAqIDIpOwotI2Vsc2UKLQlzcG9ydC0+ZHVtbXlfYnVmID0ga21hbGxvYyhkdW1teV9jb3VudCAqIDIsIEdGUF9LRVJORUwpOwotI2VuZGlmCisJaWYgKEwxX0RBVEFfQV9MRU5HVEgpCisJCXNwb3J0LT5kdW1teV9idWYgPSBsMV9kYXRhX3NyYW1femFsbG9jKGR1bW15X2NvdW50ICogMik7CisJZWxzZQorCQlzcG9ydC0+ZHVtbXlfYnVmID0ga3phbGxvYyhkdW1teV9jb3VudCAqIDIsIEdGUF9LRVJORUwpOwogCWlmIChzcG9ydC0+ZHVtbXlfYnVmID09IE5VTEwpIHsKIAkJcHJfZXJyKCJGYWlsZWQgdG8gYWxsb2NhdGUgZHVtbXkgYnVmZmVyXG4iKTsKIAkJZ290byBfX2Vycm9yOwogCX0KIAotCW1lbXNldChzcG9ydC0+ZHVtbXlfYnVmLCAwLCBkdW1teV9jb3VudCAqIDIpOwogCXJldCA9IHNwb3J0X2NvbmZpZ19yeF9kdW1teShzcG9ydCk7CiAJaWYgKHJldCkgewogCQlwcl9lcnIoIkZhaWxlZCB0byBjb25maWcgcnggZHVtbXkgcmluZ1xuIik7CkBAIC05MzksNiArOTIxLDcgQEAKIAkJc3BvcnQgPSBOVUxMOwogfQogRVhQT1JUX1NZTUJPTChzcG9ydF9kb25lKTsKKwogLyoKICogSXQgaXMgb25seSB1c2VkIHRvIHNlbmQgc2V2ZXJhbCBieXRlcyB3aGVuIGRtYSBpcyBub3QgZW5hYmxlZAogICogc3BvcnQgY29udHJvbGxlciBpcyBjb25maWd1cmVkIGJ1dCBub3QgZW5hYmxlZC4KQEAgLTEwMjksNCArMTAxMiwzIEBACiBNT0RVTEVfQVVUSE9SKCJSb3kgSHVhbmciKTsKIE1PRFVMRV9ERVNDUklQVElPTigiU1BPUlQgZHJpdmVyIGZvciBBREkgQmxhY2tmaW4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9LY29uZmlnIGIvc291bmQvc29jL2NvZGVjcy9LY29uZmlnCmluZGV4IGQwZTBkNjkuLmI2YzdmN2EgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvS2NvbmZpZworKysgYi9zb3VuZC9zb2MvY29kZWNzL0tjb25maWcKQEAgLTEwLDkgKzEwLDExIEBACiAKIGNvbmZpZyBTTkRfU09DX0FMTF9DT0RFQ1MKIAl0cmlzdGF0ZSAiQnVpbGQgYWxsIEFTb0MgQ09ERUMgZHJpdmVycyIKKwlzZWxlY3QgU05EX1NPQ19MMwogCXNlbGVjdCBTTkRfU09DX0FDOTdfQ09ERUMgaWYgU05EX1NPQ19BQzk3X0JVUwogCXNlbGVjdCBTTkRfU09DX0FEMTk4MCBpZiBTTkRfU09DX0FDOTdfQlVTCiAJc2VsZWN0IFNORF9TT0NfQUQ3MzMxMSBpZiBJMkMKKwlzZWxlY3QgU05EX1NPQ19BSzQxMDQgaWYgU1BJX01BU1RFUgogCXNlbGVjdCBTTkRfU09DX0FLNDUzNSBpZiBJMkMKIAlzZWxlY3QgU05EX1NPQ19DUzQyNzAgaWYgSTJDCiAJc2VsZWN0IFNORF9TT0NfUENNMzAwOApAQCAtMjQsNiArMjYsNyBAQAogCXNlbGVjdCBTTkRfU09DX1VEQTEzNFgKIAlzZWxlY3QgU05EX1NPQ19VREExMzgwIGlmIEkyQwogCXNlbGVjdCBTTkRfU09DX1dNODM1MCBpZiBNRkRfV004MzUwCisJc2VsZWN0IFNORF9TT0NfV004NDAwIGlmIE1GRF9XTTg0MDAKIAlzZWxlY3QgU05EX1NPQ19XTTg1MTAgaWYgU05EX1NPQ19JMkNfQU5EX1NQSQogCXNlbGVjdCBTTkRfU09DX1dNODU4MCBpZiBJMkMKIAlzZWxlY3QgU05EX1NPQ19XTTg3MjggaWYgU05EX1NPQ19JMkNfQU5EX1NQSQpAQCAtMzQsNiArMzcsNyBAQAogCXNlbGVjdCBTTkRfU09DX1dNODkwMyBpZiBJMkMKIAlzZWxlY3QgU05EX1NPQ19XTTg5NzEgaWYgSTJDCiAJc2VsZWN0IFNORF9TT0NfV004OTkwIGlmIEkyQworCXNlbGVjdCBTTkRfU09DX1dNOTcwNSBpZiBTTkRfU09DX0FDOTdfQlVTCiAJc2VsZWN0IFNORF9TT0NfV005NzEyIGlmIFNORF9TT0NfQUM5N19CVVMKIAlzZWxlY3QgU05EX1NPQ19XTTk3MTMgaWYgU05EX1NPQ19BQzk3X0JVUwogICAgICAgICBoZWxwCkBAIC01OCw2ICs2Miw5IEBACiBjb25maWcgU05EX1NPQ19BRDczMzExCiAJdHJpc3RhdGUKIAorY29uZmlnIFNORF9TT0NfQUs0MTA0CisJdHJpc3RhdGUKKwogY29uZmlnIFNORF9TT0NfQUs0NTM1CiAJdHJpc3RhdGUKIApAQCAtNjUsMTIgKzcyLDYgQEAKIGNvbmZpZyBTTkRfU09DX0NTNDI3MAogCXRyaXN0YXRlCiAKLSMgQ2lycnVzIExvZ2ljIENTNDI3MCBDb2RlYyBIYXJkd2FyZSBNdXRlIFN1cHBvcnQKLSMgU2VsZWN0IGlmIHlvdSBoYXZlIGV4dGVybmFsIG11dGluZyBjaXJjdWl0cnkgYXR0YWNoZWQgdG8geW91ciBDUzQyNzAuCi1jb25maWcgU05EX1NPQ19DUzQyNzBfSFdNVVRFCi0JYm9vbAotCWRlcGVuZHMgb24gU05EX1NPQ19DUzQyNzAKLQogIyBDaXJydXMgTG9naWMgQ1M0MjcwIENvZGVjIFZEID0gMy4zViBFcnJhdGEKICMgU2VsZWN0IGlmIHlvdSBhcmUgYWZmZWN0ZWQgYnkgdGhlIGVycmF0YSB3aGVyZSB0aGUgcGFydCB3aWxsIG5vdCBmdW5jdGlvbgogIyBpZiBNQ0xLIGRpdmlkZS1ieS0xLjUgaXMgc2VsZWN0ZWQgYW5kIFZEIGlzIHNldCB0byAzLjNWLiAgVGhlIGRyaXZlciB3aWxsCkBAIC05MCw3ICs5MSw2IEBACiAKIGNvbmZpZyBTTkRfU09DX1RMVjMyMEFJQzIzCiAJdHJpc3RhdGUKLQlkZXBlbmRzIG9uIEkyQwogCiBjb25maWcgU05EX1NPQ19UTFYzMjBBSUMyNgogCXRyaXN0YXRlICJUSSBUTFYzMjBBSUMyNiBDb2RlYyBzdXBwb3J0IiBpZiBTTkRfU09DX09GX1NJTVBMRQpAQCAtOTgsMTUgKzk4LDEyIEBACiAKIGNvbmZpZyBTTkRfU09DX1RMVjMyMEFJQzNYCiAJdHJpc3RhdGUKLQlkZXBlbmRzIG9uIEkyQwogCiBjb25maWcgU05EX1NPQ19UV0w0MDMwCiAJdHJpc3RhdGUKLQlkZXBlbmRzIG9uIFRXTDQwMzBfQ09SRQogCiBjb25maWcgU05EX1NPQ19VREExMzRYCiAgICAgICAgdHJpc3RhdGUKLSAgICAgICBzZWxlY3QgU05EX1NPQ19MMwogCiBjb25maWcgU05EX1NPQ19VREExMzgwCiAgICAgICAgIHRyaXN0YXRlCkBAIC0xMTQsNiArMTExLDkgQEAKIGNvbmZpZyBTTkRfU09DX1dNODM1MAogCXRyaXN0YXRlCiAKK2NvbmZpZyBTTkRfU09DX1dNODQwMAorCXRyaXN0YXRlCisKIGNvbmZpZyBTTkRfU09DX1dNODUxMAogCXRyaXN0YXRlCiAKQEAgLTE0NCw2ICsxNDQsOSBAQAogY29uZmlnIFNORF9TT0NfV004OTkwCiAJdHJpc3RhdGUKIAorY29uZmlnIFNORF9TT0NfV005NzA1CisJdHJpc3RhdGUKKwogY29uZmlnIFNORF9TT0NfV005NzEyCiAJdHJpc3RhdGUKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9NYWtlZmlsZSBiL3NvdW5kL3NvYy9jb2RlY3MvTWFrZWZpbGUKaW5kZXggYzRkZGM5YS4uMDMwZDI0NSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9NYWtlZmlsZQorKysgYi9zb3VuZC9zb2MvY29kZWNzL01ha2VmaWxlCkBAIC0xLDYgKzEsNyBAQAogc25kLXNvYy1hYzk3LW9ianMgOj0gYWM5Ny5vCiBzbmQtc29jLWFkMTk4MC1vYmpzIDo9IGFkMTk4MC5vCiBzbmQtc29jLWFkNzMzMTEtb2JqcyA6PSBhZDczMzExLm8KK3NuZC1zb2MtYWs0MTA0LW9ianMgOj0gYWs0MTA0Lm8KIHNuZC1zb2MtYWs0NTM1LW9ianMgOj0gYWs0NTM1Lm8KIHNuZC1zb2MtY3M0MjcwLW9ianMgOj0gY3M0MjcwLm8KIHNuZC1zb2MtbDMtb2JqcyA6PSBsMy5vCkBAIC0xMyw2ICsxNCw3IEBACiBzbmQtc29jLXVkYTEzNHgtb2JqcyA6PSB1ZGExMzR4Lm8KIHNuZC1zb2MtdWRhMTM4MC1vYmpzIDo9IHVkYTEzODAubwogc25kLXNvYy13bTgzNTAtb2JqcyA6PSB3bTgzNTAubworc25kLXNvYy13bTg0MDAtb2JqcyA6PSB3bTg0MDAubwogc25kLXNvYy13bTg1MTAtb2JqcyA6PSB3bTg1MTAubwogc25kLXNvYy13bTg1ODAtb2JqcyA6PSB3bTg1ODAubwogc25kLXNvYy13bTg3Mjgtb2JqcyA6PSB3bTg3MjgubwpAQCAtMjMsMTIgKzI1LDE0IEBACiBzbmQtc29jLXdtODkwMy1vYmpzIDo9IHdtODkwMy5vCiBzbmQtc29jLXdtODk3MS1vYmpzIDo9IHdtODk3MS5vCiBzbmQtc29jLXdtODk5MC1vYmpzIDo9IHdtODk5MC5vCitzbmQtc29jLXdtOTcwNS1vYmpzIDo9IHdtOTcwNS5vCiBzbmQtc29jLXdtOTcxMi1vYmpzIDo9IHdtOTcxMi5vCiBzbmQtc29jLXdtOTcxMy1vYmpzIDo9IHdtOTcxMy5vCiAKIG9iai0kKENPTkZJR19TTkRfU09DX0FDOTdfQ09ERUMpCSs9IHNuZC1zb2MtYWM5Ny5vCiBvYmotJChDT05GSUdfU05EX1NPQ19BRDE5ODApCSs9IHNuZC1zb2MtYWQxOTgwLm8KIG9iai0kKENPTkZJR19TTkRfU09DX0FENzMzMTEpICs9IHNuZC1zb2MtYWQ3MzMxMS5vCitvYmotJChDT05GSUdfU05EX1NPQ19BSzQxMDQpCSs9IHNuZC1zb2MtYWs0MTA0Lm8KIG9iai0kKENPTkZJR19TTkRfU09DX0FLNDUzNSkJKz0gc25kLXNvYy1hazQ1MzUubwogb2JqLSQoQ09ORklHX1NORF9TT0NfQ1M0MjcwKQkrPSBzbmQtc29jLWNzNDI3MC5vCiBvYmotJChDT05GSUdfU05EX1NPQ19MMykJKz0gc25kLXNvYy1sMy5vCkBAIC00MSw2ICs0NSw3IEBACiBvYmotJChDT05GSUdfU05EX1NPQ19VREExMzRYKQkrPSBzbmQtc29jLXVkYTEzNHgubwogb2JqLSQoQ09ORklHX1NORF9TT0NfVURBMTM4MCkJKz0gc25kLXNvYy11ZGExMzgwLm8KIG9iai0kKENPTkZJR19TTkRfU09DX1dNODM1MCkJKz0gc25kLXNvYy13bTgzNTAubworb2JqLSQoQ09ORklHX1NORF9TT0NfV004NDAwKQkrPSBzbmQtc29jLXdtODQwMC5vCiBvYmotJChDT05GSUdfU05EX1NPQ19XTTg1MTApCSs9IHNuZC1zb2Mtd204NTEwLm8KIG9iai0kKENPTkZJR19TTkRfU09DX1dNODU4MCkJKz0gc25kLXNvYy13bTg1ODAubwogb2JqLSQoQ09ORklHX1NORF9TT0NfV004NzI4KQkrPSBzbmQtc29jLXdtODcyOC5vCkBAIC01MSw1ICs1Niw3IEBACiBvYmotJChDT05GSUdfU05EX1NPQ19XTTg5MDMpCSs9IHNuZC1zb2Mtd204OTAzLm8KIG9iai0kKENPTkZJR19TTkRfU09DX1dNODk3MSkJKz0gc25kLXNvYy13bTg5NzEubwogb2JqLSQoQ09ORklHX1NORF9TT0NfV004OTkwKQkrPSBzbmQtc29jLXdtODk5MC5vCitvYmotJChDT05GSUdfU05EX1NPQ19XTTg5OTEpCSs9IHNuZC1zb2Mtd204OTkxLm8KK29iai0kKENPTkZJR19TTkRfU09DX1dNOTcwNSkJKz0gc25kLXNvYy13bTk3MDUubwogb2JqLSQoQ09ORklHX1NORF9TT0NfV005NzEyKQkrPSBzbmQtc29jLXdtOTcxMi5vCiBvYmotJChDT05GSUdfU05EX1NPQ19XTTk3MTMpCSs9IHNuZC1zb2Mtd205NzEzLm8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvYWM5Ny5jIGIvc291bmQvc29jL2NvZGVjcy9hYzk3LmMKaW5kZXggZmI1M2U2NS4uYjBkNGFmMSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9hYzk3LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy9hYzk3LmMKQEAgLTMwLDcgKzMwLDcgQEAKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHJ0ZC0+c29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCWludCByZWcgPSAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykgPwogCQkgIEFDOTdfUENNX0ZST05UX0RBQ19SQVRFIDogQUM5N19QQ01fTFJfQURDX1JBVEU7CkBAIC00MSw2ICs0MSwxMCBAQAogCQlTTkRSVl9QQ01fUkFURV8yMjA1MCB8IFNORFJWX1BDTV9SQVRFXzQ0MTAwIHxcCiAJCVNORFJWX1BDTV9SQVRFXzQ4MDAwKQogCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBhYzk3X2RhaV9vcHMgPSB7CisJLnByZXBhcmUJPSBhYzk3X3ByZXBhcmUsCit9OworCiBzdHJ1Y3Qgc25kX3NvY19kYWkgYWM5N19kYWkgPSB7CiAJLm5hbWUgPSAiQUM5NyBIaUZpIiwKIAkuYWM5N19jb250cm9sID0gMSwKQEAgLTU2LDggKzYwLDcgQEAKIAkJLmNoYW5uZWxzX21heCA9IDIsCiAJCS5yYXRlcyA9IFNURF9BQzk3X1JBVEVTLAogCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLH0sCi0JLm9wcyA9IHsKLQkJLnByZXBhcmUgPSBhYzk3X3ByZXBhcmUsfSwKKwkub3BzID0gJmFjOTdfZGFpX29wcywKIH07CiBFWFBPUlRfU1lNQk9MX0dQTChhYzk3X2RhaSk7CiAKQEAgLTg0LDEwICs4NywxMCBAQAogCiAJcHJpbnRrKEtFUk5fSU5GTyAiQUM5NyBTb0MgQXVkaW8gQ29kZWMgJXNcbiIsIEFDOTdfVkVSU0lPTik7CiAKLQlzb2NkZXYtPmNvZGVjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNuZF9zb2NfY29kZWMpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXNvY2Rldi0+Y29kZWMpCisJc29jZGV2LT5jYXJkLT5jb2RlYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzbmRfc29jX2NvZGVjKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzb2NkZXYtPmNhcmQtPmNvZGVjKQogCQlyZXR1cm4gLUVOT01FTTsKLQljb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCW11dGV4X2luaXQoJmNvZGVjLT5tdXRleCk7CiAKIAljb2RlYy0+bmFtZSA9ICJBQzk3IjsKQEAgLTEyMywyMyArMTI2LDIxIEBACiAJc25kX3NvY19mcmVlX3BjbXMoc29jZGV2KTsKIAogZXJyOgotCWtmcmVlKHNvY2Rldi0+Y29kZWMtPnJlZ19jYWNoZSk7Ci0Ja2ZyZWUoc29jZGV2LT5jb2RlYyk7Ci0Jc29jZGV2LT5jb2RlYyA9IE5VTEw7CisJa2ZyZWUoc29jZGV2LT5jYXJkLT5jb2RlYyk7CisJc29jZGV2LT5jYXJkLT5jb2RlYyA9IE5VTEw7CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBhYzk3X3NvY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCWlmICghY29kZWMpCiAJCXJldHVybiAwOwogCiAJc25kX3NvY19mcmVlX3BjbXMoc29jZGV2KTsKLQlrZnJlZShzb2NkZXYtPmNvZGVjLT5yZWdfY2FjaGUpOwotCWtmcmVlKHNvY2Rldi0+Y29kZWMpOworCWtmcmVlKHNvY2Rldi0+Y2FyZC0+Y29kZWMpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNDksNyArMTUwLDcgQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCi0Jc25kX2FjOTdfc3VzcGVuZChzb2NkZXYtPmNvZGVjLT5hYzk3KTsKKwlzbmRfYWM5N19zdXNwZW5kKHNvY2Rldi0+Y2FyZC0+Y29kZWMtPmFjOTcpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNTgsNyArMTU5LDcgQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCi0Jc25kX2FjOTdfcmVzdW1lKHNvY2Rldi0+Y29kZWMtPmFjOTcpOworCXNuZF9hYzk3X3Jlc3VtZShzb2NkZXYtPmNhcmQtPmNvZGVjLT5hYzk3KTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9hZDE5ODAuYyBiL3NvdW5kL3NvYy9jb2RlY3MvYWQxOTgwLmMKaW5kZXggNzNmZGJiNC4uZGRiM2IwOCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9hZDE5ODAuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL2FkMTk4MC5jCkBAIC05MywyMCArOTMsNiBAQAogU09DX1NJTkdMRSgiTWljIEJvb3N0IFN3aXRjaCIsIEFDOTdfTUlDLCA2LCAxLCAwKSwKIH07CiAKLS8qIGFkZCBub24gZGFwbSBjb250cm9scyAqLwotc3RhdGljIGludCBhZDE5ODBfYWRkX2NvbnRyb2xzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKLXsKLQlpbnQgZXJyLCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYWQxOTgwX3NuZF9hYzk3X2NvbnRyb2xzKTsgaSsrKSB7Ci0JCWVyciA9IHNuZF9jdGxfYWRkKGNvZGVjLT5jYXJkLCBzbmRfc29jX2NuZXcoCi0JCQkJJmFkMTk4MF9zbmRfYWM5N19jb250cm9sc1tpXSwgY29kZWMsIE5VTEwpKTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwotCX0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHVuc2lnbmVkIGludCBhYzk3X3JlYWQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAogCXVuc2lnbmVkIGludCByZWcpCiB7CkBAIC0xMjMsNyArMTA5LDcgQEAKIAlkZWZhdWx0OgogCQlyZWcgPSByZWcgPj4gMTsKIAotCQlpZiAocmVnID49IChBUlJBWV9TSVpFKGFkMTk4MF9yZWcpKSkKKwkJaWYgKHJlZyA+PSBBUlJBWV9TSVpFKGFkMTk4MF9yZWcpKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKIAkJcmV0dXJuIGNhY2hlW3JlZ107CkBAIC0xMzcsNyArMTIzLDcgQEAKIAogCXNvY19hYzk3X29wcy53cml0ZShjb2RlYy0+YWM5NywgcmVnLCB2YWwpOwogCXJlZyA9IHJlZyA+PiAxOwotCWlmIChyZWcgPCAoQVJSQVlfU0laRShhZDE5ODBfcmVnKSkpCisJaWYgKHJlZyA8IEFSUkFZX1NJWkUoYWQxOTgwX3JlZykpCiAJCWNhY2hlW3JlZ10gPSB2YWw7CiAKIAlyZXR1cm4gMDsKQEAgLTIwMCwxMCArMTg2LDEwIEBACiAKIAlwcmludGsoS0VSTl9JTkZPICJBRDE5ODAgU29DIEF1ZGlvIENvZGVjXG4iKTsKIAotCXNvY2Rldi0+Y29kZWMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc25kX3NvY19jb2RlYyksIEdGUF9LRVJORUwpOwotCWlmIChzb2NkZXYtPmNvZGVjID09IE5VTEwpCisJc29jZGV2LT5jYXJkLT5jb2RlYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzbmRfc29jX2NvZGVjKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHNvY2Rldi0+Y2FyZC0+Y29kZWMgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCWNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAltdXRleF9pbml0KCZjb2RlYy0+bXV0ZXgpOwogCiAJY29kZWMtPnJlZ19jYWNoZSA9CkBAIC0yNjksNyArMjU1LDggQEAKIAlleHRfc3RhdHVzID0gYWM5N19yZWFkKGNvZGVjLCBBQzk3X0VYVEVOREVEX1NUQVRVUyk7CiAJYWM5N193cml0ZShjb2RlYywgQUM5N19FWFRFTkRFRF9TVEFUVVMsIGV4dF9zdGF0dXMmfjB4MzgwMCk7CiAKLQlhZDE5ODBfYWRkX2NvbnRyb2xzKGNvZGVjKTsKKwlzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgYWQxOTgwX3NuZF9hYzk3X2NvbnRyb2xzLAorCQkJCUFSUkFZX1NJWkUoYWQxOTgwX3NuZF9hYzk3X2NvbnRyb2xzKSk7CiAJcmV0ID0gc25kX3NvY19pbml0X2NhcmQoc29jZGV2KTsKIAlpZiAocmV0IDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgImFkMTk4MDogZmFpbGVkIHRvIHJlZ2lzdGVyIGNhcmRcbiIpOwpAQCAtMjg4LDE1ICsyNzUsMTUgQEAKIAlrZnJlZShjb2RlYy0+cmVnX2NhY2hlKTsKIAogY2FjaGVfZXJyOgotCWtmcmVlKHNvY2Rldi0+Y29kZWMpOwotCXNvY2Rldi0+Y29kZWMgPSBOVUxMOworCWtmcmVlKHNvY2Rldi0+Y2FyZC0+Y29kZWMpOworCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSBOVUxMOwogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgYWQxOTgwX3NvY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCWlmIChjb2RlYyA9PSBOVUxMKQogCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvYWQ3MzMxMS5jIGIvc291bmQvc29jL2NvZGVjcy9hZDczMzExLmMKaW5kZXggYjA5Mjg5YS4uZTYxZGFjNSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9hZDczMzExLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy9hZDczMzExLmMKQEAgLTUzLDcgKzUzLDcgQEAKIAljb2RlYy0+b3duZXIgPSBUSElTX01PRFVMRTsKIAljb2RlYy0+ZGFpID0gJmFkNzMzMTFfZGFpOwogCWNvZGVjLT5udW1fZGFpID0gMTsKLQlzb2NkZXYtPmNvZGVjID0gY29kZWM7CisJc29jZGV2LT5jYXJkLT5jb2RlYyA9IGNvZGVjOwogCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV93aWRnZXRzKTsKIAlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fcGF0aHMpOwogCkBAIC03NSwxNSArNzUsMTUgQEAKIHJlZ2lzdGVyX2VycjoKIAlzbmRfc29jX2ZyZWVfcGNtcyhzb2NkZXYpOwogcGNtX2VycjoKLQlrZnJlZShzb2NkZXYtPmNvZGVjKTsKLQlzb2NkZXYtPmNvZGVjID0gTlVMTDsKKwlrZnJlZShzb2NkZXYtPmNhcmQtPmNvZGVjKTsKKwlzb2NkZXYtPmNhcmQtPmNvZGVjID0gTlVMTDsKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGFkNzMzMTFfc29jX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJaWYgKGNvZGVjID09IE5VTEwpCiAJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9hZDczMzExLmggYi9zb3VuZC9zb2MvY29kZWNzL2FkNzMzMTEuaAppbmRleCA1MDdjZTBjLi41Njk1NzNkIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL2FkNzMzMTEuaAorKysgYi9zb3VuZC9zb2MvY29kZWNzL2FkNzMzMTEuaApAQCAtNzAsNyArNzAsNyBAQAogI2RlZmluZSBSRUdEX0lHUyh4KQkJKHggJiAweDcpCiAjZGVmaW5lIFJFR0RfUk1PRAkJKDEgPDwgMykKICNkZWZpbmUgUkVHRF9PR1MoeCkJCSgoeCAmIDB4NykgPDwgNCkKLSNkZWZpbmUgUkVHRF9NVVRFCQkoeCA8PCA3KQorI2RlZmluZSBSRUdEX01VVEUJCSgxIDw8IDcpCiAKIC8qIENvbnRyb2wgcmVnaXN0ZXIgRSAqLwogI2RlZmluZSBDVFJMX1JFR19FCSg0IDw8IDgpCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL2FrNDEwNC5jIGIvc291bmQvc29jL2NvZGVjcy9hazQxMDQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDQ3YmM0Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2NvZGVjcy9hazQxMDQuYwpAQCAtMCwwICsxLDM2NSBAQAorLyoKKyAqIEFLNDEwNCBBTFNBIFNvQyAoQVNvQykgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA5IERhbmllbCBNYWNrIDxkYW5pZWxAY2FpYXEuZGU+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8c291bmQvYXNvdW5kZWYuaD4KKworI2luY2x1ZGUgImFrNDEwNC5oIgorCisvKiBBSzQxMDQgcmVnaXN0ZXJzIGFkZHJlc3NlcyAqLworI2RlZmluZSBBSzQxMDRfUkVHX0NPTlRST0wxCQkweDAwCisjZGVmaW5lIEFLNDEwNF9SRUdfUkVTRVJWRUQJCTB4MDEKKyNkZWZpbmUgQUs0MTA0X1JFR19DT05UUk9MMgkJMHgwMgorI2RlZmluZSBBSzQxMDRfUkVHX1RYCQkJMHgwMworI2RlZmluZSBBSzQxMDRfUkVHX0NITl9TVEFUVVMoeCkJKCh4KSArIDB4MDQpCisjZGVmaW5lIEFLNDEwNF9OVU1fUkVHUwkJCTEwCisKKyNkZWZpbmUgQUs0MTA0X1JFR19NQVNLCQkJMHgxZgorI2RlZmluZSBBSzQxMDRfUkVBRAkJCTB4YzAKKyNkZWZpbmUgQUs0MTA0X1dSSVRFCQkJMHhlMAorI2RlZmluZSBBSzQxMDRfUkVTRVJWRURfVkFMCQkweDViCisKKy8qIEJpdCBtYXNrcyBmb3IgQUs0MTA0IHJlZ2lzdGVycyAqLworI2RlZmluZSBBSzQxMDRfQ09OVFJPTDFfUlNUTgkJKDEgPDwgMCkKKyNkZWZpbmUgQUs0MTA0X0NPTlRST0wxX1BXCQkoMSA8PCAxKQorI2RlZmluZSBBSzQxMDRfQ09OVFJPTDFfRElGMAkJKDEgPDwgMikKKyNkZWZpbmUgQUs0MTA0X0NPTlRST0wxX0RJRjEJCSgxIDw8IDMpCisKKyNkZWZpbmUgQUs0MTA0X0NPTlRST0wyX1NFTDAJCSgxIDw8IDApCisjZGVmaW5lIEFLNDEwNF9DT05UUk9MMl9TRUwxCQkoMSA8PCAxKQorI2RlZmluZSBBSzQxMDRfQ09OVFJPTDJfTU9ERQkJKDEgPDwgMikKKworI2RlZmluZSBBSzQxMDRfVFhfVFhFCQkJKDEgPDwgMCkKKyNkZWZpbmUgQUs0MTA0X1RYX1YJCQkoMSA8PCAxKQorCisjZGVmaW5lIERSVl9OQU1FICJhazQxMDQiCisKK3N0cnVjdCBhazQxMDRfcHJpdmF0ZSB7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgY29kZWM7CisJdTggcmVnX2NhY2hlW0FLNDEwNF9OVU1fUkVHU107Cit9OworCitzdGF0aWMgaW50IGFrNDEwNF9maWxsX2NhY2hlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlpbnQgaTsKKwl1OCAqcmVnX2NhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKKwlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gY29kZWMtPmNvbnRyb2xfZGF0YTsKKworCWZvciAoaSA9IDA7IGkgPCBjb2RlYy0+cmVnX2NhY2hlX3NpemU7IGkrKykgeworCQlpbnQgcmV0ID0gc3BpX3c4cjgoc3BpLCBpIHwgQUs0MTA0X1JFQUQpOworCQlpZiAocmV0IDwgMCkgeworCQkJZGV2X2Vycigmc3BpLT5kZXYsICJTUEkgd3JpdGUgZmFpbHVyZVxuIik7CisJCQlyZXR1cm4gcmV0OworCQl9CisKKwkJcmVnX2NhY2hlW2ldID0gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGFrNDEwNF9yZWFkX3JlZ19jYWNoZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCisJCQkJCSAgdW5zaWduZWQgaW50IHJlZykKK3sKKwl1OCAqcmVnX2NhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKKworCWlmIChyZWcgPj0gY29kZWMtPnJlZ19jYWNoZV9zaXplKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiByZWdfY2FjaGVbcmVnXTsKK30KKworc3RhdGljIGludCBhazQxMDRfc3BpX3dyaXRlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlZywKKwkJCSAgICB1bnNpZ25lZCBpbnQgdmFsdWUpCit7CisJdTggKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKKwlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gY29kZWMtPmNvbnRyb2xfZGF0YTsKKworCWlmIChyZWcgPj0gY29kZWMtPnJlZ19jYWNoZV9zaXplKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJlZyAmPSBBSzQxMDRfUkVHX01BU0s7CisJcmVnIHw9IEFLNDEwNF9XUklURTsKKworCS8qIG9ubHkgd3JpdGUgdG8gdGhlIGhhcmR3YXJlIGlmIHZhbHVlIGhhcyBjaGFuZ2VkICovCisJaWYgKGNhY2hlW3JlZ10gIT0gdmFsdWUpIHsKKwkJdTggdG1wWzJdID0geyByZWcsIHZhbHVlIH07CisJCWlmIChzcGlfd3JpdGUoc3BpLCB0bXAsIHNpemVvZih0bXApKSkgeworCQkJZGV2X2Vycigmc3BpLT5kZXYsICJTUEkgd3JpdGUgZmFpbGVkXG4iKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisKKwkJY2FjaGVbcmVnXSA9IHZhbHVlOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFrNDEwNF9zZXRfZGFpX2ZtdChzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSwKKwkJCSAgICAgIHVuc2lnbmVkIGludCBmb3JtYXQpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY29kZWNfZGFpLT5jb2RlYzsKKwlpbnQgdmFsID0gMDsKKworCXZhbCA9IGFrNDEwNF9yZWFkX3JlZ19jYWNoZShjb2RlYywgQUs0MTA0X1JFR19DT05UUk9MMSk7CisJaWYgKHZhbCA8IDApCisJCXJldHVybiB2YWw7CisKKwl2YWwgJj0gfihBSzQxMDRfQ09OVFJPTDFfRElGMCB8IEFLNDEwNF9DT05UUk9MMV9ESUYxKTsKKworCS8qIHNldCBEQUkgZm9ybWF0ICovCisJc3dpdGNoIChmb3JtYXQgJiBTTkRfU09DX0RBSUZNVF9GT1JNQVRfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfUklHSFRfSjoKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9MRUZUX0o6CisJCXZhbCB8PSBBSzQxMDRfQ09OVFJPTDFfRElGMDsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9JMlM6CisJCXZhbCB8PSBBSzQxMDRfQ09OVFJPTDFfRElGMCB8IEFLNDEwNF9DT05UUk9MMV9ESUYxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJpbnZhbGlkIGRhaSBmb3JtYXRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBUaGlzIGRldmljZSBjYW4gb25seSBiZSBzbGF2ZSAqLworCWlmICgoZm9ybWF0ICYgU05EX1NPQ19EQUlGTVRfTUFTVEVSX01BU0spICE9IFNORF9TT0NfREFJRk1UX0NCU19DRlMpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIGFrNDEwNF9zcGlfd3JpdGUoY29kZWMsIEFLNDEwNF9SRUdfQ09OVFJPTDEsIHZhbCk7Cit9CisKK3N0YXRpYyBpbnQgYWs0MTA0X2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCSAgICBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcywKKwkJCSAgICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOworCWludCB2YWwgPSAwOworCisJLyogc2V0IHRoZSBJRUM5NTggYml0czogY29uc3VtZXIgbW9kZSwgbm8gY29weXJpZ2h0IGJpdCAqLworCXZhbCB8PSBJRUM5NThfQUVTMF9DT05fTk9UX0NPUFlSSUdIVDsKKwlhazQxMDRfc3BpX3dyaXRlKGNvZGVjLCBBSzQxMDRfUkVHX0NITl9TVEFUVVMoMCksIHZhbCk7CisKKwl2YWwgPSAwOworCisJc3dpdGNoIChwYXJhbXNfcmF0ZShwYXJhbXMpKSB7CisJY2FzZSA0NDEwMDoKKwkJdmFsIHw9IElFQzk1OF9BRVMzX0NPTl9GU180NDEwMDsKKwkJYnJlYWs7CisJY2FzZSA0ODAwMDoKKwkJdmFsIHw9IElFQzk1OF9BRVMzX0NPTl9GU180ODAwMDsKKwkJYnJlYWs7CisJY2FzZSAzMjAwMDoKKwkJdmFsIHw9IElFQzk1OF9BRVMzX0NPTl9GU18zMjAwMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAidW5zdXBwb3J0ZWQgc2FtcGxpbmcgcmF0ZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiBhazQxMDRfc3BpX3dyaXRlKGNvZGVjLCBBSzQxMDRfUkVHX0NITl9TVEFUVVMoMyksIHZhbCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIGFrNDEwMV9kYWlfb3BzID0geworCS5od19wYXJhbXMgPSBhazQxMDRfaHdfcGFyYW1zLAorCS5zZXRfZm10ID0gYWs0MTA0X3NldF9kYWlfZm10LAorfTsKKworc3RydWN0IHNuZF9zb2NfZGFpIGFrNDEwNF9kYWkgPSB7CisJLm5hbWUgPSBEUlZfTkFNRSwKKwkucGxheWJhY2sgPSB7CisJCS5zdHJlYW1fbmFtZSA9ICJQbGF5YmFjayIsCisJCS5jaGFubmVsc19taW4gPSAyLAorCQkuY2hhbm5lbHNfbWF4ID0gMiwKKwkJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfNDQxMDAgfAorCQkJIFNORFJWX1BDTV9SQVRFXzQ4MDAwIHwKKwkJCSBTTkRSVl9QQ01fUkFURV8zMjAwMCwKKwkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSAgfAorCQkJICAgU05EUlZfUENNX0ZNVEJJVF9TMjRfM0xFIHwKKwkJCSAgIFNORFJWX1BDTV9GTVRCSVRfUzI0X0xFCisJfSwKKwkub3BzID0gJmFrNDEwMV9kYWlfb3BzLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2NvZGVjICphazQxMDRfY29kZWM7CisKK3N0YXRpYyBpbnQgYWs0MTA0X3NwaV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKKwlzdHJ1Y3QgYWs0MTA0X3ByaXZhdGUgKmFrNDEwNDsKKwlpbnQgcmV0LCB2YWw7CisKKwlzcGktPmJpdHNfcGVyX3dvcmQgPSA4OworCXNwaS0+bW9kZSA9IFNQSV9NT0RFXzA7CisJcmV0ID0gc3BpX3NldHVwKHNwaSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlhazQxMDQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYWs0MTA0X3ByaXZhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWFrNDEwNCkgeworCQlkZXZfZXJyKCZzcGktPmRldiwgImNvdWxkIG5vdCBhbGxvY2F0ZSBjb2RlY1xuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWNvZGVjID0gJmFrNDEwNC0+Y29kZWM7CisJbXV0ZXhfaW5pdCgmY29kZWMtPm11dGV4KTsKKwlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fd2lkZ2V0cyk7CisJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3BhdGhzKTsKKworCWNvZGVjLT5kZXYgPSAmc3BpLT5kZXY7CisJY29kZWMtPm5hbWUgPSBEUlZfTkFNRTsKKwljb2RlYy0+b3duZXIgPSBUSElTX01PRFVMRTsKKwljb2RlYy0+ZGFpID0gJmFrNDEwNF9kYWk7CisJY29kZWMtPm51bV9kYWkgPSAxOworCWNvZGVjLT5wcml2YXRlX2RhdGEgPSBhazQxMDQ7CisJY29kZWMtPmNvbnRyb2xfZGF0YSA9IHNwaTsKKwljb2RlYy0+cmVnX2NhY2hlID0gYWs0MTA0LT5yZWdfY2FjaGU7CisJY29kZWMtPnJlZ19jYWNoZV9zaXplID0gQUs0MTA0X05VTV9SRUdTOworCisJLyogcmVhZCBhbGwgcmVncyBhbmQgZmlsbCB0aGUgY2FjaGUgKi8KKwlyZXQgPSBhazQxMDRfZmlsbF9jYWNoZShjb2RlYyk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vycigmc3BpLT5kZXYsICJmYWlsZWQgdG8gZmlsbCByZWdpc3RlciBjYWNoZVxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogcmVhZCB0aGUgJ3Jlc2VydmVkJyByZWdpc3RlciAtIGFjY29yZGluZyB0byB0aGUgZGF0YXNoZWV0LCBpdAorCSAqIHNob3VsZCBjb250YWluIDB4NWIuIE5vdCBhIGdvb2Qgd2F5IHRvIHZlcmlmeSB0aGUgcHJlc2VuY2Ugb2YKKwkgKiB0aGUgZGV2aWNlLCBidXQgdGhlcmUgaXMgbm8gaGFyZHdhcmUgSUQgcmVnaXN0ZXIuICovCisJaWYgKGFrNDEwNF9yZWFkX3JlZ19jYWNoZShjb2RlYywgQUs0MTA0X1JFR19SRVNFUlZFRCkgIT0KKwkJCQkJIEFLNDEwNF9SRVNFUlZFRF9WQUwpIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBlcnJvcl9mcmVlX2NvZGVjOworCX0KKworCS8qIHNldCBwb3dlci11cCBhbmQgbm9uLXJlc2V0IGJpdHMgKi8KKwl2YWwgPSBhazQxMDRfcmVhZF9yZWdfY2FjaGUoY29kZWMsIEFLNDEwNF9SRUdfQ09OVFJPTDEpOworCXZhbCB8PSBBSzQxMDRfQ09OVFJPTDFfUFcgfCBBSzQxMDRfQ09OVFJPTDFfUlNUTjsKKwlyZXQgPSBhazQxMDRfc3BpX3dyaXRlKGNvZGVjLCBBSzQxMDRfUkVHX0NPTlRST0wxLCB2YWwpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycm9yX2ZyZWVfY29kZWM7CisKKwkvKiBlbmFibGUgdHJhbnNtaXR0ZXIgKi8KKwl2YWwgPSBhazQxMDRfcmVhZF9yZWdfY2FjaGUoY29kZWMsIEFLNDEwNF9SRUdfVFgpOworCXZhbCB8PSBBSzQxMDRfVFhfVFhFOworCXJldCA9IGFrNDEwNF9zcGlfd3JpdGUoY29kZWMsIEFLNDEwNF9SRUdfVFgsIHZhbCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyb3JfZnJlZV9jb2RlYzsKKworCWFrNDEwNF9jb2RlYyA9IGNvZGVjOworCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfZGFpKCZhazQxMDRfZGFpKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZzcGktPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBEQUlcbiIpOworCQlnb3RvIGVycm9yX2ZyZWVfY29kZWM7CisJfQorCisJc3BpX3NldF9kcnZkYXRhKHNwaSwgYWs0MTA0KTsKKwlkZXZfaW5mbygmc3BpLT5kZXYsICJTUEkgZGV2aWNlIGluaXRpYWxpemVkXG4iKTsKKwlyZXR1cm4gMDsKKworZXJyb3JfZnJlZV9jb2RlYzoKKwlrZnJlZShhazQxMDQpOworCWFrNDEwNF9kYWkuZGV2ID0gTlVMTDsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBhazQxMDRfc3BpX3JlbW92ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCWludCByZXQsIHZhbDsKKwlzdHJ1Y3QgYWs0MTA0X3ByaXZhdGUgKmFrNDEwNCA9IHNwaV9nZXRfZHJ2ZGF0YShzcGkpOworCisJdmFsID0gYWs0MTA0X3JlYWRfcmVnX2NhY2hlKCZhazQxMDQtPmNvZGVjLCBBSzQxMDRfUkVHX0NPTlRST0wxKTsKKwlpZiAodmFsIDwgMCkKKwkJcmV0dXJuIHZhbDsKKworCS8qIGNsZWFyIHBvd2VyLXVwIGFuZCBub24tcmVzZXQgYml0cyAqLworCXZhbCAmPSB+KEFLNDEwNF9DT05UUk9MMV9QVyB8IEFLNDEwNF9DT05UUk9MMV9SU1ROKTsKKwlyZXQgPSBhazQxMDRfc3BpX3dyaXRlKCZhazQxMDQtPmNvZGVjLCBBSzQxMDRfUkVHX0NPTlRST0wxLCB2YWwpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJYWs0MTA0X2NvZGVjID0gTlVMTDsKKwlrZnJlZShhazQxMDQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFrNDEwNF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gYWs0MTA0X2NvZGVjOworCWludCByZXQ7CisKKwkvKiBDb25uZWN0IHRoZSBjb2RlYyB0byB0aGUgc29jZGV2LiAgc25kX3NvY19uZXdfcGNtcygpIG5lZWRzIHRoaXMuICovCisJc29jZGV2LT5jYXJkLT5jb2RlYyA9IGNvZGVjOworCisJLyogUmVnaXN0ZXIgUENNcyAqLworCXJldCA9IHNuZF9zb2NfbmV3X3BjbXMoc29jZGV2LCBTTkRSVl9ERUZBVUxUX0lEWDEsIFNORFJWX0RFRkFVTFRfU1RSMSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiZmFpbGVkIHRvIGNyZWF0ZSBwY21zXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBSZWdpc3RlciB0aGUgc29jZGV2ICovCisJcmV0ID0gc25kX3NvY19pbml0X2NhcmQoc29jZGV2KTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgY2FyZFxuIik7CisJCXNuZF9zb2NfZnJlZV9wY21zKHNvY2Rldik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWs0MTA0X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc25kX3NvY19mcmVlX3BjbXMoc29jZGV2KTsKKwlyZXR1cm4gMDsKK307CisKK3N0cnVjdCBzbmRfc29jX2NvZGVjX2RldmljZSBzb2NfY29kZWNfZGV2aWNlX2FrNDEwNCA9IHsKKwkucHJvYmUgPSAJYWs0MTA0X3Byb2JlLAorCS5yZW1vdmUgPSAJYWs0MTA0X3JlbW92ZQorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKHNvY19jb2RlY19kZXZpY2VfYWs0MTA0KTsKKworc3RhdGljIHN0cnVjdCBzcGlfZHJpdmVyIGFrNDEwNF9zcGlfZHJpdmVyID0geworCS5kcml2ZXIgID0geworCQkubmFtZSAgID0gRFJWX05BTUUsCisJCS5vd25lciAgPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZSAgPSBhazQxMDRfc3BpX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChhazQxMDRfc3BpX3JlbW92ZSksCit9OworCitzdGF0aWMgaW50IF9faW5pdCBhazQxMDRfaW5pdCh2b2lkKQoreworCXByX2luZm8oIkFzYWhpIEthc2VpIEFLNDEwNCBBTFNBIFNvQyBDb2RlYyBEcml2ZXJcbiIpOworCXJldHVybiBzcGlfcmVnaXN0ZXJfZHJpdmVyKCZhazQxMDRfc3BpX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdChhazQxMDRfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhazQxMDRfZXhpdCh2b2lkKQoreworCXNwaV91bnJlZ2lzdGVyX2RyaXZlcigmYWs0MTA0X3NwaV9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQoYWs0MTA0X2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJEYW5pZWwgTWFjayA8ZGFuaWVsQGNhaWFxLmRlPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBc2FoaSBLYXNlaSBBSzQxMDQgQUxTQSBTb0MgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvYWs0MTA0LmggYi9zb3VuZC9zb2MvY29kZWNzL2FrNDEwNC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViODhmZTcKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvY29kZWNzL2FrNDEwNC5oCkBAIC0wLDAgKzEsNyBAQAorI2lmbmRlZiBfQUs0MTA0X0gKKyNkZWZpbmUgX0FLNDEwNF9ICisKK2V4dGVybiBzdHJ1Y3Qgc25kX3NvY19kYWkgYWs0MTA0X2RhaTsKK2V4dGVybiBzdHJ1Y3Qgc25kX3NvY19jb2RlY19kZXZpY2Ugc29jX2NvZGVjX2RldmljZV9hazQxMDQ7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9hazQ1MzUuYyBiL3NvdW5kL3NvYy9jb2RlY3MvYWs0NTM1LmMKaW5kZXggODEzMDBkOGQuLjFmNjNkMzggMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvYWs0NTM1LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy9hazQ1MzUuYwpAQCAtMTU1LDIxICsxNTUsNiBAQAogCVNPQ19TSU5HTEUoIk1pYyBTaWRldG9uZSBWb2x1bWUiLCBBSzQ1MzVfVk9MLCA0LCA3LCAwKSwKIH07CiAKLS8qIGFkZCBub24gZGFwbSBjb250cm9scyAqLwotc3RhdGljIGludCBhazQ1MzVfYWRkX2NvbnRyb2xzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKLXsKLQlpbnQgZXJyLCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYWs0NTM1X3NuZF9jb250cm9scyk7IGkrKykgewotCQllcnIgPSBzbmRfY3RsX2FkZChjb2RlYy0+Y2FyZCwKLQkJCXNuZF9zb2NfY25ldygmYWs0NTM1X3NuZF9jb250cm9sc1tpXSwgY29kZWMsIE5VTEwpKTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwotCX0KLQotCXJldHVybiAwOwotfQotCiAvKiBNb25vIDEgTWl4ZXIgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhazQ1MzVfbW9ubzFfbWl4ZXJfY29udHJvbHNbXSA9IHsKIAlTT0NfREFQTV9TSU5HTEUoIk1pYyBTaWRldG9uZSBTd2l0Y2giLCBBSzQ1MzVfU0lHMSwgNCwgMSwgMCksCkBAIC0zNDQsNyArMzI5LDcgQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJc3RydWN0IGFrNDUzNV9wcml2ICphazQ1MzUgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOwogCXU4IG1vZGUyID0gYWs0NTM1X3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBBSzQ1MzVfTU9ERTIpICYgfigweDMgPDwgNSk7CiAJaW50IHJhdGUgPSBwYXJhbXNfcmF0ZShwYXJhbXMpLCBmcyA9IDI1NjsKQEAgLTQzNiw2ICs0MjEsMTMgQEAKIAkJU05EUlZfUENNX1JBVEVfMTYwMDAgfCBTTkRSVl9QQ01fUkFURV8yMjA1MCB8XAogCQlTTkRSVl9QQ01fUkFURV80NDEwMCB8IFNORFJWX1BDTV9SQVRFXzQ4MDAwKQogCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBhazQ1MzVfZGFpX29wcyA9IHsKKwkuaHdfcGFyYW1zCT0gYWs0NTM1X2h3X3BhcmFtcywKKwkuc2V0X2ZtdAk9IGFrNDUzNV9zZXRfZGFpX2ZtdCwKKwkuZGlnaXRhbF9tdXRlCT0gYWs0NTM1X211dGUsCisJLnNldF9zeXNjbGsJPSBhazQ1MzVfc2V0X2RhaV9zeXNjbGssCit9OworCiBzdHJ1Y3Qgc25kX3NvY19kYWkgYWs0NTM1X2RhaSA9IHsKIAkubmFtZSA9ICJBSzQ1MzUiLAogCS5wbGF5YmFjayA9IHsKQEAgLTQ1MCwxOSArNDQyLDE0IEBACiAJCS5jaGFubmVsc19tYXggPSAyLAogCQkucmF0ZXMgPSBBSzQ1MzVfUkFURVMsCiAJCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsfSwKLQkub3BzID0gewotCQkuaHdfcGFyYW1zID0gYWs0NTM1X2h3X3BhcmFtcywKLQkJLnNldF9mbXQgPSBhazQ1MzVfc2V0X2RhaV9mbXQsCi0JCS5kaWdpdGFsX211dGUgPSBhazQ1MzVfbXV0ZSwKLQkJLnNldF9zeXNjbGsgPSBhazQ1MzVfc2V0X2RhaV9zeXNjbGssCi0JfSwKKwkub3BzID0gJmFrNDUzNV9kYWlfb3BzLAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKGFrNDUzNV9kYWkpOwogCiBzdGF0aWMgaW50IGFrNDUzNV9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCWFrNDUzNV9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7CiAJcmV0dXJuIDA7CkBAIC00NzEsNyArNDU4LDcgQEAKIHN0YXRpYyBpbnQgYWs0NTM1X3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCWFrNDUzNV9zeW5jKGNvZGVjKTsKIAlhazQ1MzVfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19TVEFOREJZKTsKIAlhazQ1MzVfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIGNvZGVjLT5zdXNwZW5kX2JpYXNfbGV2ZWwpOwpAQCAtNDg0LDcgKzQ3MSw3IEBACiAgKi8KIHN0YXRpYyBpbnQgYWs0NTM1X2luaXQoc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCWludCByZXQgPSAwOwogCiAJY29kZWMtPm5hbWUgPSAiQUs0NTM1IjsKQEAgLTUxMCw3ICs0OTcsOCBAQAogCS8qIHBvd2VyIG9uIGRldmljZSAqLwogCWFrNDUzNV9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1NUQU5EQlkpOwogCi0JYWs0NTM1X2FkZF9jb250cm9scyhjb2RlYyk7CisJc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIGFrNDUzNV9zbmRfY29udHJvbHMsCisJCQkJQVJSQVlfU0laRShhazQ1MzVfc25kX2NvbnRyb2xzKSk7CiAJYWs0NTM1X2FkZF93aWRnZXRzKGNvZGVjKTsKIAlyZXQgPSBzbmRfc29jX2luaXRfY2FyZChzb2NkZXYpOwogCWlmIChyZXQgPCAwKSB7CkBAIC01MzcsNyArNTI1LDcgQEAKIAkJCSAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBhazQ1MzVfc29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlpbnQgcmV0OwogCiAJaTJjX3NldF9jbGllbnRkYXRhKGkyYywgY29kZWMpOwpAQCAtNjM2LDcgKzYyNCw3IEBACiAJfQogCiAJY29kZWMtPnByaXZhdGVfZGF0YSA9IGFrNDUzNTsKLQlzb2NkZXYtPmNvZGVjID0gY29kZWM7CisJc29jZGV2LT5jYXJkLT5jb2RlYyA9IGNvZGVjOwogCW11dGV4X2luaXQoJmNvZGVjLT5tdXRleCk7CiAJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3dpZGdldHMpOwogCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV9wYXRocyk7CkBAIC02NjMsNyArNjUxLDcgQEAKIHN0YXRpYyBpbnQgYWs0NTM1X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJaWYgKGNvZGVjLT5jb250cm9sX2RhdGEpCiAJCWFrNDUzNV9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL2NzNDI3MC5jIGIvc291bmQvc29jL2NvZGVjcy9jczQyNzAuYwppbmRleCBmMWFhMGMzLi43ZmEwOWEzIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL2NzNDI3MC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvY3M0MjcwLmMKQEAgLTMsMjcgKzMsMjIgQEAKICAqCiAgKiBBdXRob3I6IFRpbXVyIFRhYmkgPHRpbXVyQGZyZWVzY2FsZS5jb20+CiAgKgotICogQ29weXJpZ2h0IDIwMDcgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlcgotICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuICBUaGlzIHByb2dyYW0KLSAqIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcwotICogb3IgaW1wbGllZC4KKyAqIENvcHlyaWdodCAyMDA3LTIwMDkgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gIFRoaXMgZmlsZSBpcyBsaWNlbnNlZAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuICBUaGlzCisgKiBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIKKyAqIGV4cHJlc3Mgb3IgaW1wbGllZC4KICAqCiAgKiBUaGlzIGlzIGFuIEFTb0MgZGV2aWNlIGRyaXZlciBmb3IgdGhlIENpcnJ1cyBMb2dpYyBDUzQyNzAgY29kZWMuCiAgKgogICogQ3VycmVudCBmZWF0dXJlcy9saW1pdGF0aW9uczoKICAqCi0gKiAxKSBTb2Z0d2FyZSBtb2RlIGlzIHN1cHBvcnRlZC4gIFN0YW5kLWFsb25lIG1vZGUgaXMgYXV0b21hdGljYWxseQotICogICAgc2VsZWN0ZWQgaWYgSTJDIGlzIGRpc2FibGVkIG9yIGlmIGEgQ1M0MjcwIGlzIG5vdCBmb3VuZCBvbiB0aGUgSTJDCi0gKiAgICBidXMuICBIb3dldmVyLCBzdGFuZC1hbG9uZSBtb2RlIGlzIG9ubHkgcGFydGlhbGx5IGltcGxlbWVudGVkIGJlY2F1c2UKLSAqICAgIHRoZXJlIGlzIG5vIG1lY2hhbmlzbSB5ZXQgZm9yIHRoaXMgZHJpdmVyIGFuZCB0aGUgbWFjaGluZSBkcml2ZXIgdG8KLSAqICAgIGNvbW11bmljYXRlIHRoZSB2YWx1ZXMgb2YgdGhlIE0wLCBNMSwgTUNMSzEsIGFuZCBNQ0xLMiBwaW5zLgotICogMikgT25seSBJMkMgaXMgc3VwcG9ydGVkLCBub3QgU1BJCi0gKiAzKSBPbmx5IE1hc3RlciBtb2RlIGlzIHN1cHBvcnRlZCwgbm90IFNsYXZlLgotICogNCkgVGhlIG1hY2hpbmUgZHJpdmVyJ3MgJ3N0YXJ0dXAnIGZ1bmN0aW9uIG11c3QgY2FsbAotICogICAgY3M0MjcwX3NldF9kYWlfc3lzY2xrKCkgd2l0aCB0aGUgdmFsdWUgb2YgTUNMSy4KLSAqIDUpIE9ubHkgSTJTIGFuZCBsZWZ0LWp1c3RpZmllZCBtb2RlcyBhcmUgc3VwcG9ydGVkCi0gKiA2KSBQb3dlciBtYW5hZ2VtZW50IGlzIG5vdCBzdXBwb3J0ZWQKLSAqIDcpIFRoZSBvbmx5IHN1cHBvcnRlZCBjb250cm9sIGlzIHZvbHVtZSBhbmQgaGFyZHdhcmUgbXV0ZSAoaWYgZW5hYmxlZCkKKyAqIC0gU29mdHdhcmUgbW9kZSBpcyBzdXBwb3J0ZWQuICBTdGFuZC1hbG9uZSBtb2RlIGlzIG5vdCBzdXBwb3J0ZWQuCisgKiAtIE9ubHkgSTJDIGlzIHN1cHBvcnRlZCwgbm90IFNQSQorICogLSBTdXBwb3J0IGZvciBtYXN0ZXIgYW5kIHNsYXZlIG1vZGUKKyAqIC0gVGhlIG1hY2hpbmUgZHJpdmVyJ3MgJ3N0YXJ0dXAnIGZ1bmN0aW9uIG11c3QgY2FsbAorICogICBjczQyNzBfc2V0X2RhaV9zeXNjbGsoKSB3aXRoIHRoZSB2YWx1ZSBvZiBNQ0xLLgorICogLSBPbmx5IEkyUyBhbmQgbGVmdC1qdXN0aWZpZWQgbW9kZXMgYXJlIHN1cHBvcnRlZAorICogLSBQb3dlciBtYW5hZ2VtZW50IGlzIG5vdCBzdXBwb3J0ZWQKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC0zNSwxOCArMzAsNiBAQAogCiAjaW5jbHVkZSAiY3M0MjcwLmgiCiAKLS8qIElmIEkyQyBpcyBkZWZpbmVkLCB0aGVuIHdlIHN1cHBvcnQgc29mdHdhcmUgbW9kZS4gIEhvd2V2ZXIsIGlmIHdlJ3JlCi0gICBub3QgY29tcGlsZWQgYXMgbW9kdWxlIGJ1dCBJMkMgaXMsIHRoZW4gd2UgY2FuJ3QgdXNlIEkyQyBjYWxscy4gKi8KLSNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IChkZWZpbmVkKENPTkZJR19JMkNfTU9EVUxFKSAmJiBkZWZpbmVkKE1PRFVMRSkpCi0jZGVmaW5lIFVTRV9JMkMKLSNlbmRpZgotCi0vKiBQcml2YXRlIGRhdGEgZm9yIHRoZSBDUzQyNzAgKi8KLXN0cnVjdCBjczQyNzBfcHJpdmF0ZSB7Ci0JdW5zaWduZWQgaW50IG1jbGs7IC8qIElucHV0IGZyZXF1ZW5jeSBvZiB0aGUgTUNMSyBwaW4gKi8KLQl1bnNpZ25lZCBpbnQgbW9kZTsgLyogVGhlIG1vZGUgKEkyUyBvciBsZWZ0LWp1c3RpZmllZCkgKi8KLX07Ci0KIC8qCiAgKiBUaGUgY29kZWMgaXNuJ3QgcmVhbGx5IGJpZy1lbmRpYW4gb3IgbGl0dGxlLWVuZGlhbiwgc2luY2UgdGhlIEkyUwogICogaW50ZXJmYWNlIHJlcXVpcmVzIGRhdGEgdG8gYmUgc2VudCBzZXJpYWxseSB3aXRoIHRoZSBNU2JpdCBmaXJzdC4KQEAgLTYwLDggKzQzLDYgQEAKIAkJCVNORFJWX1BDTV9GTVRCSVRfUzI0XzNMRSB8IFNORFJWX1BDTV9GTVRCSVRfUzI0XzNCRSB8IFwKIAkJCVNORFJWX1BDTV9GTVRCSVRfUzI0X0xFICB8IFNORFJWX1BDTV9GTVRCSVRfUzI0X0JFKQogCi0jaWZkZWYgVVNFX0kyQwotCiAvKiBDUzQyNzAgcmVnaXN0ZXJzIGFkZHJlc3NlcyAqLwogI2RlZmluZSBDUzQyNzBfQ0hJUElECTB4MDEJLyogQ2hpcCBJRCAqLwogI2RlZmluZSBDUzQyNzBfUFdSQ1RMCTB4MDIJLyogUG93ZXIgQ29udHJvbCAqLwpAQCAtMTIxLDggKzEwMiwyMiBAQAogI2RlZmluZSBDUzQyNzBfTVVURV9EQUNfQQkweDAxCiAjZGVmaW5lIENTNDI3MF9NVVRFX0RBQ19CCTB4MDIKIAotLyoKLSAqIENsb2NrIFJhdGlvIFNlbGVjdGlvbiBmb3IgTWFzdGVyIE1vZGUgd2l0aCBJMkMgZW5hYmxlZAorLyogUHJpdmF0ZSBkYXRhIGZvciB0aGUgQ1M0MjcwICovCitzdHJ1Y3QgY3M0MjcwX3ByaXZhdGUgeworCXN0cnVjdCBzbmRfc29jX2NvZGVjIGNvZGVjOworCXU4IHJlZ19jYWNoZVtDUzQyNzBfTlVNUkVHU107CisJdW5zaWduZWQgaW50IG1jbGs7IC8qIElucHV0IGZyZXF1ZW5jeSBvZiB0aGUgTUNMSyBwaW4gKi8KKwl1bnNpZ25lZCBpbnQgbW9kZTsgLyogVGhlIG1vZGUgKEkyUyBvciBsZWZ0LWp1c3RpZmllZCkgKi8KKwl1bnNpZ25lZCBpbnQgc2xhdmVfbW9kZTsKK307CisKKy8qKgorICogc3RydWN0IGNzNDI3MF9tb2RlX3JhdGlvcyAtIGNsb2NrIHJhdGlvIHRhYmxlcworICogQHJhdGlvOiB0aGUgcmF0aW8gb2YgTUNMSyB0byB0aGUgc2FtcGxlIHJhdGUKKyAqIEBzcGVlZF9tb2RlOiB0aGUgU3BlZWQgTW9kZSBiaXRzIHRvIHNldCBpbiB0aGUgTW9kZSBDb250cm9sIHJlZ2lzdGVyIGZvcgorICogICAgICAgICAgICAgIHRoaXMgcmF0aW8KKyAqIEBtY2xrOiB0aGUgUmF0aW8gU2VsZWN0IGJpdHMgdG8gc2V0IGluIHRoZSBNb2RlIENvbnRyb2wgcmVnaXN0ZXIgZm9yIHRoaXMKKyAqICAgICAgICByYXRpbwogICoKICAqIFRoZSBkYXRhIGZvciB0aGlzIGNoYXJ0IGlzIHRha2VuIGZyb20gVGFibGUgNSBvZiB0aGUgQ1M0MjcwIHJlZmVyZW5jZQogICogbWFudWFsLgpAQCAtMTMxLDMxICsxMjYsMzAgQEAKICAqIEl0IGlzIGFsc28gdXNlZCBieSBjczQyNzBfc2V0X2RhaV9zeXNjbGsoKSB0byB0ZWxsIEFMU0Egd2hpY2ggc2FtcGxpbmcKICAqIHJhdGVzIHRoZSBDUzQyNzAgY3VycmVudGx5IHN1cHBvcnRzLgogICoKLSAqIEVhY2ggZWxlbWVudCBpbiB0aGlzIGFycmF5IGNvcnJlc3BvbmRzIHRvIHRoZSByYXRpb3MgaW4gbWNsa19yYXRpb3NbXS4KLSAqIFRoZXNlIHR3byBhcnJheXMgbmVlZCB0byBiZSBpbiBzeW5jLgotICoKLSAqICdzcGVlZF9tb2RlJyBpcyB0aGUgY29ycmVzcG9uZGluZyBiaXQgcGF0dGVybiB0byBiZSB3cml0dGVuIHRvIHRoZQorICogQHNwZWVkX21vZGUgaXMgdGhlIGNvcnJlc3BvbmRpbmcgYml0IHBhdHRlcm4gdG8gYmUgd3JpdHRlbiB0byB0aGUKICAqIE1PREUgYml0cyBvZiB0aGUgTW9kZSBDb250cm9sIFJlZ2lzdGVyCiAgKgotICogJ21jbGsnIGlzIHRoZSBjb3JyZXNwb25kaW5nIGJpdCBwYXR0ZXJuIHRvIGJlIHdpcnRlbiB0byB0aGUgTUNMSyBiaXRzIG9mCisgKiBAbWNsayBpcyB0aGUgY29ycmVzcG9uZGluZyBiaXQgcGF0dGVybiB0byBiZSB3aXJ0ZW4gdG8gdGhlIE1DTEsgYml0cyBvZgogICogdGhlIE1vZGUgQ29udHJvbCBSZWdpc3Rlci4KICAqCiAgKiBJbiBzaXR1YXRpb25zIHdoZXJlIGEgc2luZ2xlIHJhdGlvIGlzIHJlcHJlc2VudGVkIGJ5IG11bHRpcGxlIHNwZWVkCiAgKiBtb2Rlcywgd2UgZmF2b3IgdGhlIHNsb3dlc3Qgc3BlZWQuICBFLmcsIGZvciBhIHJhdGlvIG9mIDEyOCwgd2UgcGljawogICogZG91YmxlLXNwZWVkIGluc3RlYWQgb2YgcXVhZC1zcGVlZC4gIEhvd2V2ZXIsIHRoZSBDUzQyNzAgZXJyYXRhIHN0YXRlcwotICogdGhhdCBEaXZpZGUtQnktMS41IGNhbiBjYXVzZSBmYWlsdXJlcywgc28gd2UgYXZvaWQgdGhhdCBtb2RlIHdoZXJlCisgKiB0aGF0IGRpdmlkZS1CeS0xLjUgY2FuIGNhdXNlIGZhaWx1cmVzLCBzbyB3ZSBhdm9pZCB0aGF0IG1vZGUgd2hlcmUKICAqIHBvc3NpYmxlLgogICoKLSAqIEVSUkFUQTogVGhlcmUgaXMgYW4gZXJyYXRhIGZvciB0aGUgQ1M0MjcwIHdoZXJlIGRpdmlkZS1ieS0xLjUgZG9lcyBub3QKLSAqIHdvcmsgaWYgVkQgPSAzLjNWLiAgSWYgdGhpcyBlZmZlY3RzIHlvdSwgc2VsZWN0IHRoZQorICogRXJyYXRhOiBUaGVyZSBpcyBhbiBlcnJhdGEgZm9yIHRoZSBDUzQyNzAgd2hlcmUgZGl2aWRlLWJ5LTEuNSBkb2VzIG5vdAorICogd29yayBpZiBWZCBpcyAzLjNWLiAgSWYgdGhpcyBlZmZlY3RzIHlvdSwgc2VsZWN0IHRoZQogICogQ09ORklHX1NORF9TT0NfQ1M0MjcwX1ZEMzNfRVJSQVRBIEtjb25maWcgb3B0aW9uLCBhbmQgdGhlIGRyaXZlciB3aWxsCiAgKiBuZXZlciBzZWxlY3QgYW55IHNhbXBsZSByYXRlcyB0aGF0IHJlcXVpcmUgZGl2aWRlLWJ5LTEuNS4KICAqLwotc3RhdGljIHN0cnVjdCB7CitzdHJ1Y3QgY3M0MjcwX21vZGVfcmF0aW9zIHsKIAl1bnNpZ25lZCBpbnQgcmF0aW87CiAJdTggc3BlZWRfbW9kZTsKIAl1OCBtY2xrOwotfSBjczQyNzBfbW9kZV9yYXRpb3NbXSA9IHsKK307CisKK3N0YXRpYyBzdHJ1Y3QgY3M0MjcwX21vZGVfcmF0aW9zIGNzNDI3MF9tb2RlX3JhdGlvc1tdID0gewogCXs2NCwgQ1M0MjcwX01PREVfNFgsIENTNDI3MF9NT0RFX0RJVjF9LAogI2lmbmRlZiBDT05GSUdfU05EX1NPQ19DUzQyNzBfVkQzM19FUlJBVEEKIAl7OTYsIENTNDI3MF9NT0RFXzRYLCBDUzQyNzBfTU9ERV9ESVYxNX0sCkBAIC0xNzIsMzQgKzE2NiwyNyBAQAogLyogVGhlIG51bWJlciBvZiBNQ0xLL0xSQ0sgcmF0aW9zIHN1cHBvcnRlZCBieSB0aGUgQ1M0MjcwICovCiAjZGVmaW5lIE5VTV9NQ0xLX1JBVElPUwkJQVJSQVlfU0laRShjczQyNzBfbW9kZV9yYXRpb3MpCiAKLS8qCi0gKiBEZXRlcm1pbmUgdGhlIENTNDI3MCBzYW1wbGVzIHJhdGVzLgorLyoqCisgKiBjczQyNzBfc2V0X2RhaV9zeXNjbGsgLSBkZXRlcm1pbmUgdGhlIENTNDI3MCBzYW1wbGVzIHJhdGVzLgorICogQGNvZGVjX2RhaTogdGhlIGNvZGVjIERBSQorICogQGNsa19pZDogdGhlIGNsb2NrIElEIChpZ25vcmVkKQorICogQGZyZXE6IHRoZSBNQ0xLIGlucHV0IGZyZXF1ZW5jeQorICogQGRpcjogdGhlIGNsb2NrIGRpcmVjdGlvbiAoaWdub3JlZCkKICAqCi0gKiAnZnJlcScgaXMgdGhlIGlucHV0IGZyZXF1ZW5jeSB0byBNQ0xLLiAgVGhlIG90aGVyIHBhcmFtZXRlcnMgYXJlIGlnbm9yZWQuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gdGVsbCB0aGUgY29kZWMgZHJpdmVyIHdoYXQgdGhlIGlucHV0IE1DTEsKKyAqIGZyZXF1ZW5jeSBpcy4KICAqCiAgKiBUaGUgdmFsdWUgb2YgTUNMSyBpcyB1c2VkIHRvIGRldGVybWluZSB3aGljaCBzYW1wbGUgcmF0ZXMgYXJlIHN1cHBvcnRlZAogICogYnkgdGhlIENTNDI3MC4gIFRoZSByYXRpbyBvZiBNQ0xLIC8gRnMgbXVzdCBiZSBlcXVhbCB0byBvbmUgb2YgbmluZQotICogc3VwcG9ydCB2YWx1ZXM6IDY0LCA5NiwgMTI4LCAxOTIsIDI1NiwgMzg0LCA1MTIsIDc2OCwgYW5kIDEwMjQuCisgKiBzdXBwb3J0ZWQgdmFsdWVzIC0gNjQsIDk2LCAxMjgsIDE5MiwgMjU2LCAzODQsIDUxMiwgNzY4LCBhbmQgMTAyNC4KICAqCiAgKiBUaGlzIGZ1bmN0aW9uIGNhbGN1bGF0ZXMgdGhlIG5pbmUgcmF0aW9zIGFuZCBkZXRlcm1pbmVzIHdoaWNoIG9uZXMgbWF0Y2gKICAqIGEgc3RhbmRhcmQgc2FtcGxlIHJhdGUuICBJZiB0aGVyZSdzIGEgbWF0Y2gsIHRoZW4gaXQgaXMgYWRkZWQgdG8gdGhlIGxpc3QKLSAqIG9mIHN1cHBvcnQgc2FtcGxlIHJhdGVzLgorICogb2Ygc3VwcG9ydGVkIHNhbXBsZSByYXRlcy4KICAqCiAgKiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGJ5IHRoZSBtYWNoaW5lIGRyaXZlcidzICdzdGFydHVwJyBmdW5jdGlvbiwKICAqIG90aGVyd2lzZSB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgc2FtcGxlIHJhdGVzIHdpbGwgbm90IGJlIGF2YWlsYWJsZSBpbgogICogdGltZSBmb3IgQUxTQS4KLSAqCi0gKiBOb3RlIHRoYXQgaW4gc3RhbmQtYWxvbmUgbW9kZSwgdGhlIHNhbXBsZSByYXRlIGlzIGRldGVybWluZWQgYnkgaW5wdXQKLSAqIHBpbnMgTTAsIE0xLCBNRElWMSwgYW5kIE1ESVYyLiAgQWxzbyBpbiBzdGFuZC1hbG9uZSBtb2RlLCBkaXZpZGUtYnktMwotICogaXMgbm90IGEgcHJvZ3JhbW1hYmxlIG9wdGlvbi4gIEhvd2V2ZXIsIGRpdmlkZS1ieS0zIGlzIG5vdCBhbiBhdmFpbGFibGUKLSAqIG9wdGlvbiBpbiBzdGFuZC1hbG9uZSBtb2RlLiAgVGhpcyBjYXNlcyB0d28gcHJvYmxlbXM6IGEgcmF0aW8gb2YgNzY4IGlzCi0gKiBub3QgYXZhaWxhYmxlIChpdCByZXF1aXJlcyBkaXZpZGUtYnktMykgYW5kIEIpIHJhdGlvcyAxOTIgYW5kIDM4NCBjYW4KLSAqIG9ubHkgYmUgc2VsZWN0ZWQgd2l0aCBkaXZpZGUtYnktMS41LCBidXQgdGhlcmUgaXMgYW4gZXJyYXRlIHRoYXQgbWFrZQotICogdGhpcyBzZWxlY3Rpb24gZGlmZmljdWx0LgotICoKLSAqIEluIGFkZGl0aW9uLCB0aGVyZSBpcyBubyBtZWNoYW5pc20gZm9yIGNvbW11bmljYXRpbmcgd2l0aCB0aGUgbWFjaGluZQotICogZHJpdmVyIHdoYXQgdGhlIGlucHV0IHNldHRpbmdzIGNhbiBiZS4gIFRoaXMgd291bGQgbmVlZCB0byBiZSBpbXBsZW1lbnRlZAotICogZm9yIHN0YW5kLWFsb25lIG1vZGUgdG8gd29yay4KICAqLwogc3RhdGljIGludCBjczQyNzBfc2V0X2RhaV9zeXNjbGsoc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWksCiAJCQkJIGludCBjbGtfaWQsIHVuc2lnbmVkIGludCBmcmVxLCBpbnQgZGlyKQpAQCAtMjI1LDcgKzIxMiw3IEBACiAJcmF0ZXMgJj0gflNORFJWX1BDTV9SQVRFX0tOT1Q7CiAKIAlpZiAoIXJhdGVzKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiY3M0MjcwOiBjb3VsZCBub3QgZmluZCBhIHZhbGlkIHNhbXBsZSByYXRlXG4iKTsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiY291bGQgbm90IGZpbmQgYSB2YWxpZCBzYW1wbGUgcmF0ZVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMjQwLDggKzIyNywxMCBAQAogCXJldHVybiAwOwogfQogCi0vKgotICogQ29uZmlndXJlIHRoZSBjb2RlYyBmb3IgdGhlIHNlbGVjdGVkIGF1ZGlvIGZvcm1hdAorLyoqCisgKiBjczQyNzBfc2V0X2RhaV9mbXQgLSBjb25maWd1cmUgdGhlIGNvZGVjIGZvciB0aGUgc2VsZWN0ZWQgYXVkaW8gZm9ybWF0CisgKiBAY29kZWNfZGFpOiB0aGUgY29kZWMgREFJCisgKiBAZm9ybWF0OiBhIFNORF9TT0NfREFJRk1UX3ggdmFsdWUgaW5kaWNhdGluZyB0aGUgZGF0YSBmb3JtYXQKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIHRha2VzIGEgYml0bWFzayBvZiBTTkRfU09DX0RBSUZNVF94IGJpdHMgYW5kIHByb2dyYW1zIHRoZQogICogY29kZWMgYWNjb3JkaW5nbHkuCkBAIC0yNTgsMzIgKzI0Nyw0MyBAQAogCXN0cnVjdCBjczQyNzBfcHJpdmF0ZSAqY3M0MjcwID0gY29kZWMtPnByaXZhdGVfZGF0YTsKIAlpbnQgcmV0ID0gMDsKIAorCS8qIHNldCBEQUkgZm9ybWF0ICovCiAJc3dpdGNoIChmb3JtYXQgJiBTTkRfU09DX0RBSUZNVF9GT1JNQVRfTUFTSykgewogCWNhc2UgU05EX1NPQ19EQUlGTVRfSTJTOgogCWNhc2UgU05EX1NPQ19EQUlGTVRfTEVGVF9KOgogCQljczQyNzAtPm1vZGUgPSBmb3JtYXQgJiBTTkRfU09DX0RBSUZNVF9GT1JNQVRfTUFTSzsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fRVJSICJjczQyNzA6IGludmFsaWQgREFJIGZvcm1hdFxuIik7CisJCWRldl9lcnIoY29kZWMtPmRldiwgImludmFsaWQgZGFpIGZvcm1hdFxuIik7CisJCXJldCA9IC1FSU5WQUw7CisJfQorCisJLyogc2V0IG1hc3Rlci9zbGF2ZSBhdWRpbyBpbnRlcmZhY2UgKi8KKwlzd2l0Y2ggKGZvcm1hdCAmIFNORF9TT0NfREFJRk1UX01BU1RFUl9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTOgorCQljczQyNzAtPnNsYXZlX21vZGUgPSAxOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0NCTV9DRk06CisJCWNzNDI3MC0+c2xhdmVfbW9kZSA9IDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIGFsbCBvdGhlciBtb2RlcyBhcmUgdW5zdXBwb3J0ZWQgYnkgdGhlIGhhcmR3YXJlICovCiAJCXJldCA9IC1FSU5WQUw7CiAJfQogCiAJcmV0dXJuIHJldDsKIH0KIAotLyoKLSAqIEEgbGlzdCBvZiBhZGRyZXNzZXMgb24gd2hpY2ggdGhpcyBDUzQyNzAgY291bGQgdXNlLiAgSTJDIGFkZHJlc3NlcyBhcmUKLSAqIDcgYml0cy4gIEZvciB0aGUgQ1M0MjcwLCB0aGUgdXBwZXIgZm91ciBiaXRzIGFyZSBhbHdheXMgMTAwMSwgYW5kIHRoZQotICogbG93ZXIgdGhyZWUgYml0cyBhcmUgZGV0ZXJtaW5lZCB2aWEgdGhlIEFEMiwgQUQxLCBhbmQgQUQwIHBpbnMKLSAqIChyZXNwZWN0aXZlbHkpLgotICovCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0gewotCTB4NDgsIDB4NDksIDB4NEEsIDB4NEIsIDB4NEMsIDB4NEQsIDB4NEUsIDB4NEYsIEkyQ19DTElFTlRfRU5ECi19OwotSTJDX0NMSUVOVF9JTlNNT0Q7Ci0KLS8qCi0gKiBQcmUtZmlsbCB0aGUgQ1M0MjcwIHJlZ2lzdGVyIGNhY2hlLgorLyoqCisgKiBjczQyNzBfZmlsbF9jYWNoZSAtIHByZS1maWxsIHRoZSBDUzQyNzAgcmVnaXN0ZXIgY2FjaGUuCisgKiBAY29kZWM6IHRoZSBjb2RlYyBmb3IgdGhpcyBDUzQyNzAKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGZpbGxzIGluIHRoZSBDUzQyNzAgcmVnaXN0ZXIgY2FjaGUgYnkgcmVhZGluZyB0aGUgcmVnaXN0ZXIKKyAqIHZhbHVlcyBmcm9tIHRoZSBoYXJkd2FyZS4KKyAqCisgKiBUaGlzIENTNDI3MCByZWdpc3RlcnMgYXJlIGNhY2hlZCB0byBhdm9pZCBleGNlc3NpdmUgSTJDIEkvTyBvcGVyYXRpb25zLgorICogQWZ0ZXIgdGhlIGluaXRpYWwgcmVhZCB0byBwcmUtZmlsbCB0aGUgY2FjaGUsIHRoZSBDUzQyNzAgbmV2ZXIgdXBkYXRlcworICogdGhlIHJlZ2lzdGVyIHZhbHVlcywgc28gd2Ugd29uJ3QgaGF2ZSBhIGNhY2hlIGNvaGVyZW5jeSBwcm9ibGVtLgogICoKICAqIFdlIHVzZSB0aGUgYXV0by1pbmNyZW1lbnQgZmVhdHVyZSBvZiB0aGUgQ1M0MjcwIHRvIHJlYWQgYWxsIHJlZ2lzdGVycyBpbgogICogb25lIHNob3QuCkBAIC0yOTgsNyArMjk4LDcgQEAKIAkJQ1M0MjcwX0ZJUlNUUkVHIHwgMHg4MCwgQ1M0MjcwX05VTVJFR1MsIGNhY2hlKTsKIAogCWlmIChsZW5ndGggIT0gQ1M0MjcwX05VTVJFR1MpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjczQyNzA6IEkyQyByZWFkIGZhaWx1cmUsIGFkZHI9MHgleFxuIiwKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiaTJjIHJlYWQgZmFpbHVyZSwgYWRkcj0weCV4XG4iLAogCQkgICAgICAgaTJjX2NsaWVudC0+YWRkcik7CiAJCXJldHVybiAtRUlPOwogCX0KQEAgLTMwNiwxMiArMzA2LDE3IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBSZWFkIGZyb20gdGhlIENTNDI3MCByZWdpc3RlciBjYWNoZS4KKy8qKgorICogY3M0MjcwX3JlYWRfcmVnX2NhY2hlIC0gcmVhZCBmcm9tIHRoZSBDUzQyNzAgcmVnaXN0ZXIgY2FjaGUuCisgKiBAY29kZWM6IHRoZSBjb2RlYyBmb3IgdGhpcyBDUzQyNzAKKyAqIEByZWc6IHRoZSByZWdpc3RlciB0byByZWFkCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSB2YWx1ZSBmb3IgYSBnaXZlbiByZWdpc3Rlci4gIEl0IHJlYWRzIG9ubHkgZnJvbQorICogdGhlIHJlZ2lzdGVyIGNhY2hlLCBub3QgdGhlIGhhcmR3YXJlIGl0c2VsZi4KICAqCiAgKiBUaGlzIENTNDI3MCByZWdpc3RlcnMgYXJlIGNhY2hlZCB0byBhdm9pZCBleGNlc3NpdmUgSTJDIEkvTyBvcGVyYXRpb25zLgogICogQWZ0ZXIgdGhlIGluaXRpYWwgcmVhZCB0byBwcmUtZmlsbCB0aGUgY2FjaGUsIHRoZSBDUzQyNzAgbmV2ZXIgdXBkYXRlcwotICogdGhlIHJlZ2lzdGVyIHZhbHVlcywgc28gd2Ugd29uJ3QgaGF2ZSBhIGNhY2hlIGNvaGVybmN5IHByb2JsZW0uCisgKiB0aGUgcmVnaXN0ZXIgdmFsdWVzLCBzbyB3ZSB3b24ndCBoYXZlIGEgY2FjaGUgY29oZXJlbmN5IHByb2JsZW0uCiAgKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgY3M0MjcwX3JlYWRfcmVnX2NhY2hlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKIAl1bnNpZ25lZCBpbnQgcmVnKQpAQCAtMzI0LDggKzMyOSwxMSBAQAogCXJldHVybiBjYWNoZVtyZWcgLSBDUzQyNzBfRklSU1RSRUddOwogfQogCi0vKgotICogV3JpdGUgdG8gYSBDUzQyNzAgcmVnaXN0ZXIgdmlhIHRoZSBJMkMgYnVzLgorLyoqCisgKiBjczQyNzBfaTJjX3dyaXRlIC0gd3JpdGUgdG8gYSBDUzQyNzAgcmVnaXN0ZXIgdmlhIHRoZSBJMkMgYnVzLgorICogQGNvZGVjOiB0aGUgY29kZWMgZm9yIHRoaXMgQ1M0MjcwCisgKiBAcmVnOiB0aGUgcmVnaXN0ZXIgdG8gd3JpdGUKKyAqIEB2YWx1ZTogdGhlIHZhbHVlIHRvIHdyaXRlIHRvIHRoZSByZWdpc3RlcgogICoKICAqIFRoaXMgZnVuY3Rpb24gd3JpdGVzIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgZ2l2ZW4gQ1M0MjcwIHJlZ2lzdGVyLCBhbmQKICAqIGFsc28gdXBkYXRlcyB0aGUgcmVnaXN0ZXIgY2FjaGUuCkBAIC0zNDYsNyArMzU0LDcgQEAKIAlpZiAoY2FjaGVbcmVnIC0gQ1M0MjcwX0ZJUlNUUkVHXSAhPSB2YWx1ZSkgewogCQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gY29kZWMtPmNvbnRyb2xfZGF0YTsKIAkJaWYgKGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWcsIHZhbHVlKSkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJjczQyNzA6IEkyQyB3cml0ZSBmYWlsZWRcbiIpOworCQkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiaTJjIHdyaXRlIGZhaWxlZFxuIik7CiAJCQlyZXR1cm4gLUVJTzsKIAkJfQogCkBAIC0zNTcsMTEgKzM2NSwxNyBAQAogCXJldHVybiAwOwogfQogCi0vKgotICogUHJvZ3JhbSB0aGUgQ1M0MjcwIHdpdGggdGhlIGdpdmVuIGhhcmR3YXJlIHBhcmFtZXRlcnMuCisvKioKKyAqIGNzNDI3MF9od19wYXJhbXMgLSBwcm9ncmFtIHRoZSBDUzQyNzAgd2l0aCB0aGUgZ2l2ZW4gaGFyZHdhcmUgcGFyYW1ldGVycy4KKyAqIEBzdWJzdHJlYW06IHRoZSBhdWRpbyBzdHJlYW0KKyAqIEBwYXJhbXM6IHRoZSBoYXJkd2FyZSBwYXJhbWV0ZXJzIHRvIHNldAorICogQGRhaTogdGhlIFNPQyBEQUkgKGlnbm9yZWQpCiAgKgotICogVGhlIC5vcHMgZnVuY3Rpb25zIGFyZSB1c2VkIHRvIHByb3ZpZGUgYm9hcmQtc3BlY2lmaWMgZGF0YSwgbGlrZQotICogaW5wdXQgZnJlcXVlbmNpZXMsIHRvIHRoaXMgZHJpdmVyLiAgVGhpcyBmdW5jdGlvbiB0YWtlcyB0aGF0IGluZm9ybWF0aW9uLAorICogVGhpcyBmdW5jdGlvbiBwcm9ncmFtcyB0aGUgaGFyZHdhcmUgd2l0aCB0aGUgdmFsdWVzIHByb3ZpZGVkLgorICogU3BlY2lmaWNhbGx5LCB0aGUgc2FtcGxlIHJhdGUgYW5kIHRoZSBkYXRhIGZvcm1hdC4KKyAqCisgKiBUaGUgLm9wcyBmdW5jdGlvbnMgYXJlIHVzZWQgdG8gcHJvdmlkZSBib2FyZC1zcGVjaWZpYyBkYXRhLCBsaWtlIGlucHV0CisgKiBmcmVxdWVuY2llcywgdG8gdGhpcyBkcml2ZXIuICBUaGlzIGZ1bmN0aW9uIHRha2VzIHRoYXQgaW5mb3JtYXRpb24sCiAgKiBjb21iaW5lcyBpdCB3aXRoIHRoZSBoYXJkd2FyZSBwYXJhbWV0ZXJzIHByb3ZpZGVkLCBhbmQgcHJvZ3JhbXMgdGhlCiAgKiBoYXJkd2FyZSBhY2NvcmRpbmdseS4KICAqLwpAQCAtMzcxLDcgKzM4NSw3IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCXN0cnVjdCBjczQyNzBfcHJpdmF0ZSAqY3M0MjcwID0gY29kZWMtPnByaXZhdGVfZGF0YTsKIAlpbnQgcmV0OwogCXVuc2lnbmVkIGludCBpOwpAQCAtMzkxLDMzICs0MDUsMjggQEAKIAogCWlmIChpID09IE5VTV9NQ0xLX1JBVElPUykgewogCQkvKiBXZSBkaWQgbm90IGZpbmQgYSBtYXRjaGluZyByYXRpbyAqLwotCQlwcmludGsoS0VSTl9FUlIgImNzNDI3MDogY291bGQgbm90IGZpbmQgbWF0Y2hpbmcgcmF0aW9cbiIpOworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJjb3VsZCBub3QgZmluZCBtYXRjaGluZyByYXRpb1xuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCS8qIEZyZWV6ZSBhbmQgcG93ZXItZG93biB0aGUgY29kZWMgKi8KLQotCXJldCA9IHNuZF9zb2Nfd3JpdGUoY29kZWMsIENTNDI3MF9QV1JDVEwsIENTNDI3MF9QV1JDVExfRlJFRVpFIHwKLQkJCSAgICBDUzQyNzBfUFdSQ1RMX1BETl9BREMgfCBDUzQyNzBfUFdSQ1RMX1BETl9EQUMgfAotCQkJICAgIENTNDI3MF9QV1JDVExfUEROKTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgImNzNDI3MDogSTJDIHdyaXRlIGZhaWxlZFxuIik7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JLyogUHJvZ3JhbSB0aGUgbW9kZSBjb250cm9sIHJlZ2lzdGVyICovCisJLyogU2V0IHRoZSBzYW1wbGUgcmF0ZSAqLwogCiAJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBDUzQyNzBfTU9ERSk7CiAJcmVnICY9IH4oQ1M0MjcwX01PREVfU1BFRURfTUFTSyB8IENTNDI3MF9NT0RFX0RJVl9NQVNLKTsKLQlyZWcgfD0gY3M0MjcwX21vZGVfcmF0aW9zW2ldLnNwZWVkX21vZGUgfCBjczQyNzBfbW9kZV9yYXRpb3NbaV0ubWNsazsKKwlyZWcgfD0gY3M0MjcwX21vZGVfcmF0aW9zW2ldLm1jbGs7CisKKwlpZiAoY3M0MjcwLT5zbGF2ZV9tb2RlKQorCQlyZWcgfD0gQ1M0MjcwX01PREVfU0xBVkU7CisJZWxzZQorCQlyZWcgfD0gY3M0MjcwX21vZGVfcmF0aW9zW2ldLnNwZWVkX21vZGU7CiAKIAlyZXQgPSBzbmRfc29jX3dyaXRlKGNvZGVjLCBDUzQyNzBfTU9ERSwgcmVnKTsKIAlpZiAocmV0IDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgImNzNDI3MDogSTJDIHdyaXRlIGZhaWxlZFxuIik7CisJCWRldl9lcnIoY29kZWMtPmRldiwgImkyYyB3cml0ZSBmYWlsZWRcbiIpOwogCQlyZXR1cm4gcmV0OwogCX0KIAotCS8qIFByb2dyYW0gdGhlIGZvcm1hdCByZWdpc3RlciAqLworCS8qIFNldCB0aGUgREFJIGZvcm1hdCAqLwogCiAJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBDUzQyNzBfRk9STUFUKTsKIAlyZWcgJj0gfihDUzQyNzBfRk9STUFUX0RBQ19NQVNLIHwgQ1M0MjcwX0ZPUk1BVF9BRENfTUFTSyk7CkBAIC00MzAsNTUgKzQzOSwyMyBAQAogCQlyZWcgfD0gQ1M0MjcwX0ZPUk1BVF9EQUNfTEogfCBDUzQyNzBfRk9STUFUX0FEQ19MSjsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fRVJSICJjczQyNzA6IHVua25vd24gZm9ybWF0XG4iKTsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAidW5rbm93biBkYWkgZm9ybWF0XG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJcmV0ID0gc25kX3NvY193cml0ZShjb2RlYywgQ1M0MjcwX0ZPUk1BVCwgcmVnKTsKIAlpZiAocmV0IDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgImNzNDI3MDogSTJDIHdyaXRlIGZhaWxlZFxuIik7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JLyogRGlzYWJsZSBhdXRvLW11dGUuICBUaGlzIGZlYXR1cmUgYXBwZWFycyB0byBiZSBidWdneSwgYmVjYXVzZSBpbgotCSAgIHNvbWUgc2l0dWF0aW9ucywgYXV0by1tdXRlIHdpbGwgbm90IGRlYWN0aXZhdGUgd2hlbiBpdCBzaG91bGQuICovCi0KLQlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIENTNDI3MF9NVVRFKTsKLQlyZWcgJj0gfkNTNDI3MF9NVVRFX0FVVE87Ci0JcmV0ID0gc25kX3NvY193cml0ZShjb2RlYywgQ1M0MjcwX01VVEUsIHJlZyk7Ci0JaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjczQyNzA6IEkyQyB3cml0ZSBmYWlsZWRcbiIpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCS8qIERpc2FibGUgYXV0b21hdGljIHZvbHVtZSBjb250cm9sLiAgSXQncyBlbmFibGVkIGJ5IGRlZmF1bHQsIGFuZAotCSAqIGl0IGNhdXNlcyB2b2x1bWUgY2hhbmdlIGNvbW1hbmRzIHRvIGJlIGRlbGF5ZWQsIHNvbWV0aW1lcyB1bnRpbAotCSAqIGFmdGVyIHBsYXliYWNrIGhhcyBzdGFydGVkLgotCSAqLwotCi0JcmVnID0gY3M0MjcwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBDUzQyNzBfVFJBTlMpOwotCXJlZyAmPSB+KENTNDI3MF9UUkFOU19TT0ZUIHwgQ1M0MjcwX1RSQU5TX1pFUk8pOwotCXJldCA9IGNzNDI3MF9pMmNfd3JpdGUoY29kZWMsIENTNDI3MF9UUkFOUywgcmVnKTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgIkkyQyB3cml0ZSBmYWlsZWRcbiIpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCS8qIFRoYXcgYW5kIHBvd2VyLXVwIHRoZSBjb2RlYyAqLwotCi0JcmV0ID0gc25kX3NvY193cml0ZShjb2RlYywgQ1M0MjcwX1BXUkNUTCwgMCk7Ci0JaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjczQyNzA6IEkyQyB3cml0ZSBmYWlsZWRcbiIpOworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJpMmMgd3JpdGUgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKIAlyZXR1cm4gcmV0OwogfQogCi0jaWZkZWYgQ09ORklHX1NORF9TT0NfQ1M0MjcwX0hXTVVURQotCi0vKgotICogU2V0IHRoZSBDUzQyNzAgZXh0ZXJuYWwgbXV0ZQorLyoqCisgKiBjczQyNzBfbXV0ZSAtIGVuYWJsZS9kaXNhYmxlIHRoZSBDUzQyNzAgZXh0ZXJuYWwgbXV0ZQorICogQGRhaTogdGhlIFNPQyBEQUkKKyAqIEBtdXRlOiAwID0gZGlzYWJsZSBtdXRlLCAxID0gZW5hYmxlIG11dGUKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIHRvZ2dsZXMgdGhlIG11dGUgYml0cyBpbiB0aGUgTVVURSByZWdpc3Rlci4gIFRoZSBDUzQyNzAncwogICogbXV0ZSBjYXBhYmlsaXR5IGlzIGludGVuZGVkIGZvciBleHRlcm5hbCBtdXRpbmcgY2lyY3VpdHJ5LCBzbyBpZiB0aGUKQEAgLTQ5MywxNTAgKzQ3MCw0NyBAQAogCXJlZzYgPSBzbmRfc29jX3JlYWQoY29kZWMsIENTNDI3MF9NVVRFKTsKIAogCWlmIChtdXRlKQotCQlyZWc2IHw9IENTNDI3MF9NVVRFX0FEQ19BIHwgQ1M0MjcwX01VVEVfQURDX0IgfAotCQkJQ1M0MjcwX01VVEVfREFDX0EgfCBDUzQyNzBfTVVURV9EQUNfQjsKKwkJcmVnNiB8PSBDUzQyNzBfTVVURV9EQUNfQSB8IENTNDI3MF9NVVRFX0RBQ19COwogCWVsc2UKLQkJcmVnNiAmPSB+KENTNDI3MF9NVVRFX0FEQ19BIHwgQ1M0MjcwX01VVEVfQURDX0IgfAotCQkJICBDUzQyNzBfTVVURV9EQUNfQSB8IENTNDI3MF9NVVRFX0RBQ19CKTsKKwkJcmVnNiAmPSB+KENTNDI3MF9NVVRFX0RBQ19BIHwgQ1M0MjcwX01VVEVfREFDX0IpOwogCiAJcmV0dXJuIHNuZF9zb2Nfd3JpdGUoY29kZWMsIENTNDI3MF9NVVRFLCByZWc2KTsKIH0KIAotI2VuZGlmCi0KLXN0YXRpYyBpbnQgY3M0MjcwX2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqLCBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqKTsKLQogLyogQSBsaXN0IG9mIG5vbi1EQVBNIGNvbnRyb2xzIHRoYXQgdGhlIENTNDI3MCBzdXBwb3J0cyAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGNzNDI3MF9zbmRfY29udHJvbHNbXSA9IHsKIAlTT0NfRE9VQkxFX1IoIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLAotCQlDUzQyNzBfVk9MQSwgQ1M0MjcwX1ZPTEIsIDAsIDB4RkYsIDEpCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgY3M0MjcwX2lkW10gPSB7Ci0JeyJjczQyNzAiLCAwfSwKLQl7fQotfTsKLU1PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBjczQyNzBfaWQpOwotCi1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgY3M0MjcwX2kyY19kcml2ZXIgPSB7Ci0JLmRyaXZlciA9IHsKLQkJLm5hbWUgPSAiQ1M0MjcwIEkyQyIsCi0JCS5vd25lciA9IFRISVNfTU9EVUxFLAotCX0sCi0JLmlkX3RhYmxlID0gY3M0MjcwX2lkLAotCS5wcm9iZSA9IGNzNDI3MF9pMmNfcHJvYmUsCisJCUNTNDI3MF9WT0xBLCBDUzQyNzBfVk9MQiwgMCwgMHhGRiwgMSksCisJU09DX1NJTkdMRSgiRGlnaXRhbCBTaWRldG9uZSBTd2l0Y2giLCBDUzQyNzBfRk9STUFULCA1LCAxLCAwKSwKKwlTT0NfU0lOR0xFKCJTb2Z0IFJhbXAgU3dpdGNoIiwgQ1M0MjcwX1RSQU5TLCA2LCAxLCAwKSwKKwlTT0NfU0lOR0xFKCJaZXJvIENyb3NzIFN3aXRjaCIsIENTNDI3MF9UUkFOUywgNSwgMSwgMCksCisJU09DX1NJTkdMRSgiUG9wZ3VhcmQgU3dpdGNoIiwgQ1M0MjcwX01PREUsIDAsIDEsIDEpLAorCVNPQ19TSU5HTEUoIkF1dG8tTXV0ZSBTd2l0Y2giLCBDUzQyNzBfTVVURSwgNSwgMSwgMCksCisJU09DX0RPVUJMRSgiTWFzdGVyIENhcHR1cmUgU3dpdGNoIiwgQ1M0MjcwX01VVEUsIDMsIDQsIDEsIDApCiB9OwogCiAvKgotICogR2xvYmFsIHZhcmlhYmxlIHRvIHN0b3JlIHNvY2RldiBmb3IgaTJjIHByb2JlIGZ1bmN0aW9uLgorICogY3M0MjcwX2NvZGVjIC0gZ2xvYmFsIHZhcmlhYmxlIHRvIHN0b3JlIGNvZGVjIGZvciB0aGUgQVNvQyBwcm9iZSBmdW5jdGlvbgogICoKICAqIElmIHN0cnVjdCBpMmNfZHJpdmVyIGhhZCBhIHByaXZhdGVfZGF0YSBmaWVsZCwgd2Ugd291bGRuJ3QgbmVlZCB0byB1c2UKLSAqIGNzNDI3MF9zb2NkZWMuICBUaGlzIGlzIHRoZSBvbmx5IHdheSB0byBwYXNzIHRoZSBzb2NkZXYgc3RydWN0dXJlIHRvCi0gKiBjczQyNzBfaTJjX3Byb2JlKCkuCi0gKgotICogVGhlIHJlYWwgc29sdXRpb24gdG8gY3M0MjcwX3NvY2RldiBpcyB0byBjcmVhdGUgYSBtZWNoYW5pc20KLSAqIHRoYXQgbWFwcyBJMkMgYWRkcmVzc2VzIHRvIHNuZF9zb2NfZGV2aWNlIHN0cnVjdHVyZXMuICBQZXJoYXBzIHRoZQotICogY3JlYXRpb24gb2YgdGhlIHNuZF9zb2NfZGV2aWNlIG9iamVjdCBzaG91bGQgYmUgbW92ZWQgb3V0IG9mCi0gKiBjczQyNzBfcHJvYmUoKSBhbmQgaW50byBjczQyNzBfaTJjX3Byb2JlKCksIGJ1dCB0aGF0IHdvdWxkIG1ha2UgdGhpcwotICogZHJpdmVyIGRlcGVuZGVudCBvbiBJMkMuICBUaGUgQ1M0MjcwIHN1cHBvcnRzICJzdGFuZC1hbG9uZSIgbW9kZSwgd2hlcmVieQotICogdGhlIGNoaXAgaXMgKm5vdCogY29ubmVjdGVkIHRvIHRoZSBJMkMgYnVzLCBidXQgaXMgaW5zdGVhZCBjb25maWd1cmVkIHZpYQotICogaW5wdXQgcGlucy4KKyAqIGNzNDI3MF9jb2RlYy4gIFRoaXMgaXMgdGhlIG9ubHkgd2F5IHRvIHBhc3MgdGhlIGNvZGVjIHN0cnVjdHVyZSBmcm9tCisgKiBjczQyNzBfaTJjX3Byb2JlKCkgdG8gY3M0MjcwX3Byb2JlKCkuICBVbmZvcnR1bmF0ZWx5LCB0aGVyZSBpcyBubyBnb29kCisgKiB3YXkgdG8gc3luY2hyb25pemUgdGhlc2UgdHdvIGZ1bmN0aW9ucy4gIGNzNDI3MF9pMmNfcHJvYmUoKSBjYW4gYmUgY2FsbGVkCisgKiBtdWx0aXBsZSB0aW1lcyBiZWZvcmUgY3M0MjcwX3Byb2JlKCkgaXMgY2FsbGVkIGV2ZW4gb25jZS4gIFNvIGZvciBub3csIHdlCisgKiBhbHNvIG9ubHkgYWxsb3cgY3M0MjcwX2kyY19wcm9iZSgpIHRvIGJlIHJ1biBvbmNlLiAgVGhhdCBtZWFucyB0aGF0IHdlIGRvCisgKiBub3Qgc3VwcG9ydCBtb3JlIHRoYW4gb25lIGNzNDI3MCBkZXZpY2UgaW4gdGhlIHN5c3RlbSwgYXQgbGVhc3QgZm9yIG5vdy4KICAqLwotc3RhdGljIHN0cnVjdCBzbmRfc29jX2RldmljZSAqY3M0MjcwX3NvY2RldjsKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY3M0MjcwX2NvZGVjOwogCi0vKgotICogSW5pdGlhbGl6ZSB0aGUgSTJDIGludGVyZmFjZSBvZiB0aGUgQ1M0MjcwCi0gKgotICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZm9yIHdoZW5ldmVyIHRoZSBJMkMgc3Vic3lzdGVtIGZpbmRzIGEgZGV2aWNlCi0gKiBhdCBhIHBhcnRpY3VsYXIgYWRkcmVzcy4KLSAqCi0gKiBOb3RlOiBzbmRfc29jX25ld19wY21zKCkgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIHRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCwKLSAqIGJlY2F1c2Ugb2Ygc25kX2N0bF9hZGQoKS4KLSAqLwotc3RhdGljIGludCBjczQyNzBfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICppMmNfY2xpZW50LAotCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKLXsKLQlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IGNzNDI3MF9zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKLQlpbnQgaTsKLQlpbnQgcmV0ID0gMDsKLQotCS8qIFByb2JpbmcgYWxsIHBvc3NpYmxlIGFkZHJlc3NlcyBoYXMgb25lIGRyYXdiYWNrOiBpZiB0aGVyZSBhcmUKLQkgICBtdWx0aXBsZSBDUzQyNzBzIG9uIHRoZSBidXMsIHRoZW4geW91IGNhbm5vdCBzcGVjaWZ5IHdoaWNoCi0JICAgc29jZGV2IGlzIG1hdGNoZWQgd2l0aCB3aGljaCBDUzQyNzAuICBGb3Igbm93LCB3ZSBqdXN0IHJlamVjdAotCSAgIHRoaXMgSTJDIGRldmljZSBpZiB0aGUgc29jZGV2IGFscmVhZHkgaGFzIG9uZSBhdHRhY2hlZC4gKi8KLQlpZiAoY29kZWMtPmNvbnRyb2xfZGF0YSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQkvKiBOb3RlOiBjb2RlY19kYWktPmNvZGVjIGlzIE5VTEwgaGVyZSAqLwotCi0JY29kZWMtPnJlZ19jYWNoZSA9IGt6YWxsb2MoQ1M0MjcwX05VTVJFR1MsIEdGUF9LRVJORUwpOwotCWlmICghY29kZWMtPnJlZ19jYWNoZSkgewotCQlwcmludGsoS0VSTl9FUlIgImNzNDI3MDogY291bGQgbm90IGFsbG9jYXRlIHJlZ2lzdGVyIGNhY2hlXG4iKTsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQkvKiBWZXJpZnkgdGhhdCB3ZSBoYXZlIGEgQ1M0MjcwICovCi0KLQlyZXQgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoaTJjX2NsaWVudCwgQ1M0MjcwX0NISVBJRCk7Ci0JaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjczQyNzA6IGZhaWxlZCB0byByZWFkIEkyQ1xuIik7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCS8qIFRoZSB0b3AgZm91ciBiaXRzIG9mIHRoZSBjaGlwIElEIHNob3VsZCBiZSAxMTAwLiAqLwotCWlmICgocmV0ICYgMHhGMCkgIT0gMHhDMCkgewotCQkvKiBUaGUgZGV2aWNlIGF0IHRoaXMgYWRkcmVzcyBpcyBub3QgYSBDUzQyNzAgY29kZWMgKi8KLQkJcmV0ID0gLUVOT0RFVjsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlwcmludGsoS0VSTl9JTkZPICJjczQyNzA6IGZvdW5kIGRldmljZSBhdCBJMkMgYWRkcmVzcyAlWFxuIiwKLQkJaTJjX2NsaWVudC0+YWRkcik7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiY3M0MjcwOiBoYXJkd2FyZSByZXZpc2lvbiAlWFxuIiwgcmV0ICYgMHhGKTsKLQotCWNvZGVjLT5jb250cm9sX2RhdGEgPSBpMmNfY2xpZW50OwotCWNvZGVjLT5yZWFkID0gY3M0MjcwX3JlYWRfcmVnX2NhY2hlOwotCWNvZGVjLT53cml0ZSA9IGNzNDI3MF9pMmNfd3JpdGU7Ci0JY29kZWMtPnJlZ19jYWNoZV9zaXplID0gQ1M0MjcwX05VTVJFR1M7Ci0KLQkvKiBUaGUgSTJDIGludGVyZmFjZSBpcyBzZXQgdXAsIHNvIHByZS1maWxsIG91ciByZWdpc3RlciBjYWNoZSAqLwotCi0JcmV0ID0gY3M0MjcwX2ZpbGxfY2FjaGUoY29kZWMpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiY3M0MjcwOiBmYWlsZWQgdG8gZmlsbCByZWdpc3RlciBjYWNoZVxuIik7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JLyogQWRkIHRoZSBub24tREFQTSBjb250cm9scyAqLwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY3M0MjcwX3NuZF9jb250cm9scyk7IGkrKykgewotCQlzdHJ1Y3Qgc25kX2tjb250cm9sICprY3RybCA9Ci0JCXNuZF9zb2NfY25ldygmY3M0MjcwX3NuZF9jb250cm9sc1tpXSwgY29kZWMsIE5VTEwpOwotCi0JCXJldCA9IHNuZF9jdGxfYWRkKGNvZGVjLT5jYXJkLCBrY3RybCk7Ci0JCWlmIChyZXQgPCAwKQotCQkJZ290byBlcnJvcjsKLQl9Ci0KLQlpMmNfc2V0X2NsaWVudGRhdGEoaTJjX2NsaWVudCwgY29kZWMpOwotCi0JcmV0dXJuIDA7Ci0KLWVycm9yOgotCWNvZGVjLT5jb250cm9sX2RhdGEgPSBOVUxMOwotCi0Ja2ZyZWUoY29kZWMtPnJlZ19jYWNoZSk7Ci0JY29kZWMtPnJlZ19jYWNoZSA9IE5VTEw7Ci0JY29kZWMtPnJlZ19jYWNoZV9zaXplID0gMDsKLQotCXJldHVybiByZXQ7Ci19Ci0KLSNlbmRpZiAvKiBVU0VfSTJDKi8KK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIGNzNDI3MF9kYWlfb3BzID0geworCS5od19wYXJhbXMJPSBjczQyNzBfaHdfcGFyYW1zLAorCS5zZXRfc3lzY2xrCT0gY3M0MjcwX3NldF9kYWlfc3lzY2xrLAorCS5zZXRfZm10CT0gY3M0MjcwX3NldF9kYWlfZm10LAorCS5kaWdpdGFsX211dGUJPSBjczQyNzBfbXV0ZSwKK307CiAKIHN0cnVjdCBzbmRfc29jX2RhaSBjczQyNzBfZGFpID0gewotCS5uYW1lID0gIkNTNDI3MCIsCisJLm5hbWUgPSAiY3M0MjcwIiwKIAkucGxheWJhY2sgPSB7CiAJCS5zdHJlYW1fbmFtZSA9ICJQbGF5YmFjayIsCiAJCS5jaGFubmVsc19taW4gPSAxLApAQCAtNjUxLDExOCArNTI1LDI1MSBAQAogCQkucmF0ZXMgPSAwLAogCQkuZm9ybWF0cyA9IENTNDI3MF9GT1JNQVRTLAogCX0sCisJLm9wcyA9ICZjczQyNzBfZGFpX29wcywKIH07CiBFWFBPUlRfU1lNQk9MX0dQTChjczQyNzBfZGFpKTsKIAotLyoKLSAqIEFTb0MgcHJvYmUgZnVuY3Rpb24KKy8qKgorICogY3M0MjcwX3Byb2JlIC0gQVNvQyBwcm9iZSBmdW5jdGlvbgorICogQHBkZXY6IHBsYXRmb3JtIGRldmljZQogICoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIG1hY2hpbmUgZHJpdmVyIGNhbGxzCi0gKiBwbGF0Zm9ybV9kZXZpY2VfYWRkKCkuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIEFTb0MgaGFzIGFsbCB0aGUgcGllY2VzIGl0IG5lZWRzIHRvCisgKiBpbnN0YW50aWF0ZSBhIHNvdW5kIGRyaXZlci4KICAqLwogc3RhdGljIGludCBjczQyNzBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKLQlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjczQyNzBfY29kZWM7CisJaW50IHJldDsKIAotCXByaW50ayhLRVJOX0lORk8gIkNTNDI3MCBBTFNBIFNvQyBDb2RlY1xuIik7Ci0KLQkvKiBBbGxvY2F0ZSBlbm91Z2ggc3BhY2UgZm9yIHRoZSBzbmRfc29jX2NvZGVjIHN0cnVjdHVyZQotCSAgIGFuZCBvdXIgcHJpdmF0ZSBkYXRhIHRvZ2V0aGVyLiAqLwotCWNvZGVjID0ga3phbGxvYyhBTElHTihzaXplb2Yoc3RydWN0IHNuZF9zb2NfY29kZWMpLCA0KSArCi0JCQlzaXplb2Yoc3RydWN0IGNzNDI3MF9wcml2YXRlKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjb2RlYykgewotCQlwcmludGsoS0VSTl9FUlIgImNzNDI3MDogQ291bGQgbm90IGFsbG9jYXRlIGNvZGVjIHN0cnVjdHVyZVxuIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCW11dGV4X2luaXQoJmNvZGVjLT5tdXRleCk7Ci0JSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3dpZGdldHMpOwotCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV9wYXRocyk7Ci0KLQljb2RlYy0+bmFtZSA9ICJDUzQyNzAiOwotCWNvZGVjLT5vd25lciA9IFRISVNfTU9EVUxFOwotCWNvZGVjLT5kYWkgPSAmY3M0MjcwX2RhaTsKLQljb2RlYy0+bnVtX2RhaSA9IDE7Ci0JY29kZWMtPnByaXZhdGVfZGF0YSA9ICh2b2lkICopIGNvZGVjICsKLQkJQUxJR04oc2l6ZW9mKHN0cnVjdCBzbmRfc29jX2NvZGVjKSwgNCk7Ci0KLQlzb2NkZXYtPmNvZGVjID0gY29kZWM7CisJLyogQ29ubmVjdCB0aGUgY29kZWMgdG8gdGhlIHNvY2Rldi4gIHNuZF9zb2NfbmV3X3BjbXMoKSBuZWVkcyB0aGlzLiAqLworCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSBjb2RlYzsKIAogCS8qIFJlZ2lzdGVyIFBDTXMgKi8KLQogCXJldCA9IHNuZF9zb2NfbmV3X3BjbXMoc29jZGV2LCBTTkRSVl9ERUZBVUxUX0lEWDEsIFNORFJWX0RFRkFVTFRfU1RSMSk7CiAJaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjczQyNzA6IGZhaWxlZCB0byBjcmVhdGUgUENNc1xuIik7Ci0JCWdvdG8gZXJyb3JfZnJlZV9jb2RlYzsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiZmFpbGVkIHRvIGNyZWF0ZSBwY21zXG4iKTsKKwkJcmV0dXJuIHJldDsKIAl9CiAKLSNpZmRlZiBVU0VfSTJDCi0JY3M0MjcwX3NvY2RldiA9IHNvY2RldjsKLQotCXJldCA9IGkyY19hZGRfZHJpdmVyKCZjczQyNzBfaTJjX2RyaXZlcik7Ci0JaWYgKHJldCkgewotCQlwcmludGsoS0VSTl9FUlIgImNzNDI3MDogZmFpbGVkIHRvIGF0dGFjaCBkcml2ZXIiKTsKKwkvKiBBZGQgdGhlIG5vbi1EQVBNIGNvbnRyb2xzICovCisJcmV0ID0gc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIGNzNDI3MF9zbmRfY29udHJvbHMsCisJCQkJQVJSQVlfU0laRShjczQyNzBfc25kX2NvbnRyb2xzKSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiZmFpbGVkIHRvIGFkZCBjb250cm9sc1xuIik7CiAJCWdvdG8gZXJyb3JfZnJlZV9wY21zOwogCX0KIAotCS8qIERpZCB3ZSBmaW5kIGEgQ1M0MjcwIG9uIHRoZSBJMkMgYnVzPyAqLwotCWlmIChjb2RlYy0+Y29udHJvbF9kYXRhKSB7Ci0JCS8qIEluaXRpYWxpemUgY29kZWMgb3BzICovCi0JCWNzNDI3MF9kYWkub3BzLmh3X3BhcmFtcyA9IGNzNDI3MF9od19wYXJhbXM7Ci0JCWNzNDI3MF9kYWkub3BzLnNldF9zeXNjbGsgPSBjczQyNzBfc2V0X2RhaV9zeXNjbGs7Ci0JCWNzNDI3MF9kYWkub3BzLnNldF9mbXQgPSBjczQyNzBfc2V0X2RhaV9mbXQ7Ci0jaWZkZWYgQ09ORklHX1NORF9TT0NfQ1M0MjcwX0hXTVVURQotCQljczQyNzBfZGFpLm9wcy5kaWdpdGFsX211dGUgPSBjczQyNzBfbXV0ZTsKLSNlbmRpZgotCX0gZWxzZQotCQlwcmludGsoS0VSTl9JTkZPICJjczQyNzA6IG5vIEkyQyBkZXZpY2UgZm91bmQsICIKLQkJCSJ1c2luZyBzdGFuZC1hbG9uZSBtb2RlXG4iKTsKLSNlbHNlCi0JcHJpbnRrKEtFUk5fSU5GTyAiY3M0MjcwOiBJMkMgZGlzYWJsZWQsIHVzaW5nIHN0YW5kLWFsb25lIG1vZGVcbiIpOwotI2VuZGlmCi0KKwkvKiBBbmQgZmluYWxseSwgcmVnaXN0ZXIgdGhlIHNvY2RldiAqLwogCXJldCA9IHNuZF9zb2NfaW5pdF9jYXJkKHNvY2Rldik7CiAJaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjczQyNzA6IGZhaWxlZCB0byByZWdpc3RlciBjYXJkXG4iKTsKLQkJZ290byBlcnJvcl9kZWxfZHJpdmVyOworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgY2FyZFxuIik7CisJCWdvdG8gZXJyb3JfZnJlZV9wY21zOwogCX0KIAogCXJldHVybiAwOwogCi1lcnJvcl9kZWxfZHJpdmVyOgotI2lmZGVmIFVTRV9JMkMKLQlpMmNfZGVsX2RyaXZlcigmY3M0MjcwX2kyY19kcml2ZXIpOwotCiBlcnJvcl9mcmVlX3BjbXM6Ci0jZW5kaWYKIAlzbmRfc29jX2ZyZWVfcGNtcyhzb2NkZXYpOwogCi1lcnJvcl9mcmVlX2NvZGVjOgotCWtmcmVlKHNvY2Rldi0+Y29kZWMpOwotCXNvY2Rldi0+Y29kZWMgPSBOVUxMOwotCiAJcmV0dXJuIHJldDsKIH0KIAorLyoqCisgKiBjczQyNzBfcmVtb3ZlIC0gQVNvQyByZW1vdmUgZnVuY3Rpb24KKyAqIEBwZGV2OiBwbGF0Zm9ybSBkZXZpY2UKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBjb3VudGVycGFydCB0byBjczQyNzBfcHJvYmUoKS4KKyAqLwogc3RhdGljIGludCBjczQyNzBfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAogCXNuZF9zb2NfZnJlZV9wY21zKHNvY2Rldik7CiAKLSNpZmRlZiBVU0VfSTJDCi0JaTJjX2RlbF9kcml2ZXIoJmNzNDI3MF9pMmNfZHJpdmVyKTsKLSNlbmRpZgorCXJldHVybiAwOworfTsKIAotCWtmcmVlKHNvY2Rldi0+Y29kZWMpOwotCXNvY2Rldi0+Y29kZWMgPSBOVUxMOworLyoqCisgKiBjczQyNzBfaTJjX3Byb2JlIC0gaW5pdGlhbGl6ZSB0aGUgSTJDIGludGVyZmFjZSBvZiB0aGUgQ1M0MjcwCisgKiBAaTJjX2NsaWVudDogdGhlIEkyQyBjbGllbnQgb2JqZWN0CisgKiBAaWQ6IHRoZSBJMkMgZGV2aWNlIElEIChpZ25vcmVkKQorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW5ldmVyIHRoZSBJMkMgc3Vic3lzdGVtIGZpbmRzIGEgZGV2aWNlIHRoYXQKKyAqIG1hdGNoZXMgdGhlIGRldmljZSBJRCBnaXZlbiB2aWEgYSBwcmlvciBjYWxsIHRvIGkyY19hZGRfZHJpdmVyKCkuCisgKi8KK3N0YXRpYyBpbnQgY3M0MjcwX2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjX2NsaWVudCwKKwljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOworCXN0cnVjdCBjczQyNzBfcHJpdmF0ZSAqY3M0MjcwOworCXVuc2lnbmVkIGludCByZWc7CisJaW50IHJldDsKKworCS8qIEZvciBub3csIHdlIG9ubHkgc3VwcG9ydCBvbmUgY3M0MjcwIGRldmljZSBpbiB0aGUgc3lzdGVtLiAgU2VlIHRoZQorCSAqIGNvbW1lbnQgZm9yIGNzNDI3MF9jb2RlYy4KKwkgKi8KKwlpZiAoY3M0MjcwX2NvZGVjKSB7CisJCWRldl9lcnIoJmkyY19jbGllbnQtPmRldiwgImlnbm9yaW5nIENTNDI3MCBhdCBhZGRyICVYXG4iLAorCQkgICAgICAgaTJjX2NsaWVudC0+YWRkcik7CisJCWRldl9lcnIoJmkyY19jbGllbnQtPmRldiwgIm9ubHkgb25lIHBlciBib2FyZCBhbGxvd2VkXG4iKTsKKwkJLyogU2hvdWxkIHdlIHJldHVybiBzb21ldGhpbmcgb3RoZXIgdGhhbiBFTk9ERVYgaGVyZT8gKi8KKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJLyogVmVyaWZ5IHRoYXQgd2UgaGF2ZSBhIENTNDI3MCAqLworCisJcmV0ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGkyY19jbGllbnQsIENTNDI3MF9DSElQSUQpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJmkyY19jbGllbnQtPmRldiwgImZhaWxlZCB0byByZWFkIGkyYyBhdCBhZGRyICVYXG4iLAorCQkgICAgICAgaTJjX2NsaWVudC0+YWRkcik7CisJCXJldHVybiByZXQ7CisJfQorCS8qIFRoZSB0b3AgZm91ciBiaXRzIG9mIHRoZSBjaGlwIElEIHNob3VsZCBiZSAxMTAwLiAqLworCWlmICgocmV0ICYgMHhGMCkgIT0gMHhDMCkgeworCQlkZXZfZXJyKCZpMmNfY2xpZW50LT5kZXYsICJkZXZpY2UgYXQgYWRkciAlWCBpcyBub3QgYSBDUzQyNzBcbiIsCisJCSAgICAgICBpMmNfY2xpZW50LT5hZGRyKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJZGV2X2luZm8oJmkyY19jbGllbnQtPmRldiwgImZvdW5kIGRldmljZSBhdCBpMmMgYWRkcmVzcyAlWFxuIiwKKwkJaTJjX2NsaWVudC0+YWRkcik7CisJZGV2X2luZm8oJmkyY19jbGllbnQtPmRldiwgImhhcmR3YXJlIHJldmlzaW9uICVYXG4iLCByZXQgJiAweEYpOworCisJLyogQWxsb2NhdGUgZW5vdWdoIHNwYWNlIGZvciB0aGUgc25kX3NvY19jb2RlYyBzdHJ1Y3R1cmUKKwkgICBhbmQgb3VyIHByaXZhdGUgZGF0YSB0b2dldGhlci4gKi8KKwljczQyNzAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY3M0MjcwX3ByaXZhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNzNDI3MCkgeworCQlkZXZfZXJyKCZpMmNfY2xpZW50LT5kZXYsICJjb3VsZCBub3QgYWxsb2NhdGUgY29kZWNcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJY29kZWMgPSAmY3M0MjcwLT5jb2RlYzsKKworCW11dGV4X2luaXQoJmNvZGVjLT5tdXRleCk7CisJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3dpZGdldHMpOworCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV9wYXRocyk7CisKKwljb2RlYy0+ZGV2ID0gJmkyY19jbGllbnQtPmRldjsKKwljb2RlYy0+bmFtZSA9ICJDUzQyNzAiOworCWNvZGVjLT5vd25lciA9IFRISVNfTU9EVUxFOworCWNvZGVjLT5kYWkgPSAmY3M0MjcwX2RhaTsKKwljb2RlYy0+bnVtX2RhaSA9IDE7CisJY29kZWMtPnByaXZhdGVfZGF0YSA9IGNzNDI3MDsKKwljb2RlYy0+Y29udHJvbF9kYXRhID0gaTJjX2NsaWVudDsKKwljb2RlYy0+cmVhZCA9IGNzNDI3MF9yZWFkX3JlZ19jYWNoZTsKKwljb2RlYy0+d3JpdGUgPSBjczQyNzBfaTJjX3dyaXRlOworCWNvZGVjLT5yZWdfY2FjaGUgPSBjczQyNzAtPnJlZ19jYWNoZTsKKwljb2RlYy0+cmVnX2NhY2hlX3NpemUgPSBDUzQyNzBfTlVNUkVHUzsKKworCS8qIFRoZSBJMkMgaW50ZXJmYWNlIGlzIHNldCB1cCwgc28gcHJlLWZpbGwgb3VyIHJlZ2lzdGVyIGNhY2hlICovCisKKwlyZXQgPSBjczQyNzBfZmlsbF9jYWNoZShjb2RlYyk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmaTJjX2NsaWVudC0+ZGV2LCAiZmFpbGVkIHRvIGZpbGwgcmVnaXN0ZXIgY2FjaGVcbiIpOworCQlnb3RvIGVycm9yX2ZyZWVfY29kZWM7CisJfQorCisJLyogRGlzYWJsZSBhdXRvLW11dGUuICBUaGlzIGZlYXR1cmUgYXBwZWFycyB0byBiZSBidWdneS4gIEluIHNvbWUKKwkgKiBzaXR1YXRpb25zLCBhdXRvLW11dGUgd2lsbCBub3QgZGVhY3RpdmF0ZSB3aGVuIGl0IHNob3VsZCwgc28gd2Ugd2FudAorCSAqIHRoaXMgZmVhdHVyZSBkaXNhYmxlZCBieSBkZWZhdWx0LiAgQW4gYXBwbGljYXRpb24gKGUuZy4gYWxzYWN0bCkgY2FuCisJICogcmUtZW5hYmxlZCBpdCBieSB1c2luZyB0aGUgY29udHJvbHMuCisJICovCisKKwlyZWcgPSBjczQyNzBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIENTNDI3MF9NVVRFKTsKKwlyZWcgJj0gfkNTNDI3MF9NVVRFX0FVVE87CisJcmV0ID0gY3M0MjcwX2kyY193cml0ZShjb2RlYywgQ1M0MjcwX01VVEUsIHJlZyk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmaTJjX2NsaWVudC0+ZGV2LCAiaTJjIHdyaXRlIGZhaWxlZFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogRGlzYWJsZSBhdXRvbWF0aWMgdm9sdW1lIGNvbnRyb2wuICBUaGUgaGFyZHdhcmUgZW5hYmxlcywgYW5kIGl0CisJICogY2F1c2VzIHZvbHVtZSBjaGFuZ2UgY29tbWFuZHMgdG8gYmUgZGVsYXllZCwgc29tZXRpbWVzIHVudGlsIGFmdGVyCisJICogcGxheWJhY2sgaGFzIHN0YXJ0ZWQuICBBbiBhcHBsaWNhdGlvbiAoZS5nLiBhbHNhY3RsKSBjYW4KKwkgKiByZS1lbmFibGVkIGl0IGJ5IHVzaW5nIHRoZSBjb250cm9scy4KKwkgKi8KKworCXJlZyA9IGNzNDI3MF9yZWFkX3JlZ19jYWNoZShjb2RlYywgQ1M0MjcwX1RSQU5TKTsKKwlyZWcgJj0gfihDUzQyNzBfVFJBTlNfU09GVCB8IENTNDI3MF9UUkFOU19aRVJPKTsKKwlyZXQgPSBjczQyNzBfaTJjX3dyaXRlKGNvZGVjLCBDUzQyNzBfVFJBTlMsIHJlZyk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmaTJjX2NsaWVudC0+ZGV2LCAiaTJjIHdyaXRlIGZhaWxlZFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogSW5pdGlhbGl6ZSB0aGUgREFJLiBOb3JtYWxseSwgd2UnZCBwcmVmZXIgdG8gaGF2ZSBhIGttYWxsb2MnZCBEQUkKKwkgKiBzdHJ1Y3R1cmUgZm9yIGVhY2ggQ1M0MjcwIGRldmljZSwgYnV0IHRoZSBtYWNoaW5lIGRyaXZlciBuZWVkcyB0bworCSAqIGhhdmUgYSBwb2ludGVyIHRvIHRoZSBEQUkgc3RydWN0dXJlLCBzbyBmb3Igbm93IGl0IG11c3QgYmUgYSBnbG9iYWwKKwkgKiB2YXJpYWJsZS4KKwkgKi8KKwljczQyNzBfZGFpLmRldiA9ICZpMmNfY2xpZW50LT5kZXY7CisKKwkvKiBSZWdpc3RlciB0aGUgREFJLiAgSWYgYWxsIHRoZSBvdGhlciBBU29DIGRyaXZlciBoYXZlIGFscmVhZHkKKwkgKiByZWdpc3RlcmVkLCB0aGVuIHRoaXMgd2lsbCBjYWxsIG91ciBwcm9iZSBmdW5jdGlvbiwgc28KKwkgKiBjczQyNzBfY29kZWMgbmVlZHMgdG8gYmUgcmVhZHkuCisJICovCisJY3M0MjcwX2NvZGVjID0gY29kZWM7CisJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9kYWkoJmNzNDI3MF9kYWkpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJmkyY19jbGllbnQtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBEQUllXG4iKTsKKwkJZ290byBlcnJvcl9mcmVlX2NvZGVjOworCX0KKworCWkyY19zZXRfY2xpZW50ZGF0YShpMmNfY2xpZW50LCBjczQyNzApOworCisJcmV0dXJuIDA7CisKK2Vycm9yX2ZyZWVfY29kZWM6CisJa2ZyZWUoY3M0MjcwKTsKKwljczQyNzBfY29kZWMgPSBOVUxMOworCWNzNDI3MF9kYWkuZGV2ID0gTlVMTDsKKworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogY3M0MjcwX2kyY19yZW1vdmUgLSByZW1vdmUgYW4gSTJDIGRldmljZQorICogQGkyY19jbGllbnQ6IHRoZSBJMkMgY2xpZW50IG9iamVjdAorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdGhlIGNvdW50ZXJwYXJ0IHRvIGNzNDI3MF9pMmNfcHJvYmUoKS4KKyAqLworc3RhdGljIGludCBjczQyNzBfaTJjX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjX2NsaWVudCkKK3sKKwlzdHJ1Y3QgY3M0MjcwX3ByaXZhdGUgKmNzNDI3MCA9IGkyY19nZXRfY2xpZW50ZGF0YShpMmNfY2xpZW50KTsKKworCWtmcmVlKGNzNDI3MCk7CisJY3M0MjcwX2NvZGVjID0gTlVMTDsKKwljczQyNzBfZGFpLmRldiA9IE5VTEw7CiAKIAlyZXR1cm4gMDsKIH0KIAogLyoKKyAqIGNzNDI3MF9pZCAtIEkyQyBkZXZpY2UgSURzIHN1cHBvcnRlZCBieSB0aGlzIGRyaXZlcgorICovCitzdGF0aWMgc3RydWN0IGkyY19kZXZpY2VfaWQgY3M0MjcwX2lkW10gPSB7CisJeyJjczQyNzAiLCAwfSwKKwl7fQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBjczQyNzBfaWQpOworCisvKgorICogY3M0MjcwX2kyY19kcml2ZXIgLSBJMkMgZGV2aWNlIGlkZW50aWZpY2F0aW9uCisgKgorICogVGhpcyBzdHJ1Y3R1cmUgdGVsbHMgdGhlIEkyQyBzdWJzeXN0ZW0gaG93IHRvIGlkZW50aWZ5IGFuZCBzdXBwb3J0IGEKKyAqIGdpdmVuIEkyQyBkZXZpY2UgdHlwZS4KKyAqLworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGNzNDI3MF9pMmNfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gImNzNDI3MCIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCisJLmlkX3RhYmxlID0gY3M0MjcwX2lkLAorCS5wcm9iZSA9IGNzNDI3MF9pMmNfcHJvYmUsCisJLnJlbW92ZSA9IGNzNDI3MF9pMmNfcmVtb3ZlLAorfTsKKworLyoKICAqIEFTb0MgY29kZWMgZGV2aWNlIHN0cnVjdHVyZQogICoKICAqIEFzc2lnbiB0aGlzIHZhcmlhYmxlIHRvIHRoZSBjb2RlY19kZXYgZmllbGQgb2YgdGhlIG1hY2hpbmUgZHJpdmVyJ3MKQEAgLTc3NiwxMyArNzgzLDE1IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGNzNDI3MF9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIHNuZF9zb2NfcmVnaXN0ZXJfZGFpKCZjczQyNzBfZGFpKTsKKwlwcl9pbmZvKCJDaXJydXMgTG9naWMgQ1M0MjcwIEFMU0EgU29DIENvZGVjIERyaXZlclxuIik7CisKKwlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJmNzNDI3MF9pMmNfZHJpdmVyKTsKIH0KIG1vZHVsZV9pbml0KGNzNDI3MF9pbml0KTsKIAogc3RhdGljIHZvaWQgX19leGl0IGNzNDI3MF9leGl0KHZvaWQpCiB7Ci0Jc25kX3NvY191bnJlZ2lzdGVyX2RhaSgmY3M0MjcwX2RhaSk7CisJaTJjX2RlbF9kcml2ZXIoJmNzNDI3MF9pMmNfZHJpdmVyKTsKIH0KIG1vZHVsZV9leGl0KGNzNDI3MF9leGl0KTsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9wY20zMDA4LmMgYi9zb3VuZC9zb2MvY29kZWNzL3BjbTMwMDguYwppbmRleCA5YTNlNjdlLi41Y2RhOWU2IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3BjbTMwMDguYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3BjbTMwMDguYwpAQCAtNjcsMTEgKzY3LDExIEBACiAKIAlwcmludGsoS0VSTl9JTkZPICJQQ00zMDA4IFNvQyBBdWRpbyBDb2RlYyAlc1xuIiwgUENNMzAwOF9WRVJTSU9OKTsKIAotCXNvY2Rldi0+Y29kZWMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc25kX3NvY19jb2RlYyksIEdGUF9LRVJORUwpOwotCWlmICghc29jZGV2LT5jb2RlYykKKwlzb2NkZXYtPmNhcmQtPmNvZGVjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNuZF9zb2NfY29kZWMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNvY2Rldi0+Y2FyZC0+Y29kZWMpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCWNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAltdXRleF9pbml0KCZjb2RlYy0+bXV0ZXgpOwogCiAJY29kZWMtPm5hbWUgPSAiUENNMzAwOCI7CkBAIC0xMzksNyArMTM5LDcgQEAKIGNhcmRfZXJyOgogCXNuZF9zb2NfZnJlZV9wY21zKHNvY2Rldik7CiBwY21fZXJyOgotCWtmcmVlKHNvY2Rldi0+Y29kZWMpOworCWtmcmVlKHNvY2Rldi0+Y2FyZC0+Y29kZWMpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTE0Nyw3ICsxNDcsNyBAQAogc3RhdGljIGludCBwY20zMDA4X3NvY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlzdHJ1Y3QgcGNtMzAwOF9zZXR1cF9kYXRhICpzZXR1cCA9IHNvY2Rldi0+Y29kZWNfZGF0YTsKIAogCWlmICghY29kZWMpCkBAIC0xNTUsNyArMTU1LDcgQEAKIAogCXBjbTMwMDhfZ3Bpb19mcmVlKHNldHVwKTsKIAlzbmRfc29jX2ZyZWVfcGNtcyhzb2NkZXYpOwotCWtmcmVlKHNvY2Rldi0+Y29kZWMpOworCWtmcmVlKHNvY2Rldi0+Y2FyZC0+Y29kZWMpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3NzbTI2MDIuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvc3NtMjYwMi5jCmluZGV4IGNhYzM3MzYuLjg3ZjYwNmM3IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3NzbTI2MDIuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3NzbTI2MDIuYwpAQCAtMTUxLDIxICsxNTEsNiBAQAogU09DX0VOVU0oIlBsYXliYWNrIERlLWVtcGhhc2lzIiwgc3NtMjYwMl9lbnVtWzFdKSwKIH07CiAKLS8qIGFkZCBub24gZGFwbSBjb250cm9scyAqLwotc3RhdGljIGludCBzc20yNjAyX2FkZF9jb250cm9scyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCi17Ci0JaW50IGVyciwgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNzbTI2MDJfc25kX2NvbnRyb2xzKTsgaSsrKSB7Ci0JCWVyciA9IHNuZF9jdGxfYWRkKGNvZGVjLT5jYXJkLAotCQkJc25kX3NvY19jbmV3KCZzc20yNjAyX3NuZF9jb250cm9sc1tpXSwgY29kZWMsIE5VTEwpKTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwotCX0KLQotCXJldHVybiAwOwotfQotCiAvKiBPdXRwdXQgTWl4ZXIgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzc20yNjAyX291dHB1dF9taXhlcl9jb250cm9sc1tdID0gewogU09DX0RBUE1fU0lOR0xFKCJMaW5lIEJ5cGFzcyBTd2l0Y2giLCBTU00yNjAyX0FQQU5BLCAzLCAxLCAwKSwKQEAgLTI5MSw3ICsyNzYsNyBAQAogCXUxNiBzcmF0ZTsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJc3RydWN0IHNzbTI2MDJfcHJpdiAqc3NtMjYwMiA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGkyY19jbGllbnQgKmkyYyA9IGNvZGVjLT5jb250cm9sX2RhdGE7CiAJdTE2IGlmYWNlID0gc3NtMjYwMl9yZWFkX3JlZ19jYWNoZShjb2RlYywgU1NNMjYwMl9JRkFDRSkgJiAweGZmZjM7CkBAIC0zMzYsNyArMzIxLDcgQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJc3RydWN0IHNzbTI2MDJfcHJpdiAqc3NtMjYwMiA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGkyY19jbGllbnQgKmkyYyA9IGNvZGVjLT5jb250cm9sX2RhdGE7CiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqbWFzdGVyX3J1bnRpbWU7CkBAIC0zNzMsNyArMzU4LDcgQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJLyogc2V0IGFjdGl2ZSAqLwogCXNzbTI2MDJfd3JpdGUoY29kZWMsIFNTTTI2MDJfQUNUSVZFLCBBQ1RJVkVfQUNUSVZBVEVfQ09ERUMpOwogCkBAIC0zODUsNyArMzcwLDcgQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJc3RydWN0IHNzbTI2MDJfcHJpdiAqc3NtMjYwMiA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CiAJLyogZGVhY3RpdmF0ZSAqLwogCWlmICghY29kZWMtPmFjdGl2ZSkKQEAgLTUyMSw2ICs1MDYsMTYgQEAKICNkZWZpbmUgU1NNMjYwMl9GT1JNQVRTIChTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8IFNORFJWX1BDTV9GTVRCSVRfUzIwXzNMRSB8XAogCQlTTkRSVl9QQ01fRk1UQklUX1MyNF9MRSB8IFNORFJWX1BDTV9GTVRCSVRfUzMyX0xFKQogCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBzc20yNjAyX2RhaV9vcHMgPSB7CisJLnN0YXJ0dXAJPSBzc20yNjAyX3N0YXJ0dXAsCisJLnByZXBhcmUJPSBzc20yNjAyX3BjbV9wcmVwYXJlLAorCS5od19wYXJhbXMJPSBzc20yNjAyX2h3X3BhcmFtcywKKwkuc2h1dGRvd24JPSBzc20yNjAyX3NodXRkb3duLAorCS5kaWdpdGFsX211dGUJPSBzc20yNjAyX211dGUsCisJLnNldF9zeXNjbGsJPSBzc20yNjAyX3NldF9kYWlfc3lzY2xrLAorCS5zZXRfZm10CT0gc3NtMjYwMl9zZXRfZGFpX2ZtdCwKK307CisKIHN0cnVjdCBzbmRfc29jX2RhaSBzc20yNjAyX2RhaSA9IHsKIAkubmFtZSA9ICJTU00yNjAyIiwKIAkucGxheWJhY2sgPSB7CkBAIC01MzUsMjIgKzUzMCwxNCBAQAogCQkuY2hhbm5lbHNfbWF4ID0gMiwKIAkJLnJhdGVzID0gU1NNMjYwMl9SQVRFUywKIAkJLmZvcm1hdHMgPSBTU00yNjAyX0ZPUk1BVFMsfSwKLQkub3BzID0gewotCQkuc3RhcnR1cCA9IHNzbTI2MDJfc3RhcnR1cCwKLQkJLnByZXBhcmUgPSBzc20yNjAyX3BjbV9wcmVwYXJlLAotCQkuaHdfcGFyYW1zID0gc3NtMjYwMl9od19wYXJhbXMsCi0JCS5zaHV0ZG93biA9IHNzbTI2MDJfc2h1dGRvd24sCi0JCS5kaWdpdGFsX211dGUgPSBzc20yNjAyX211dGUsCi0JCS5zZXRfc3lzY2xrID0gc3NtMjYwMl9zZXRfZGFpX3N5c2NsaywKLQkJLnNldF9mbXQgPSBzc20yNjAyX3NldF9kYWlfZm10LAotCX0KKwkub3BzID0gJnNzbTI2MDJfZGFpX29wcywKIH07CiBFWFBPUlRfU1lNQk9MX0dQTChzc20yNjAyX2RhaSk7CiAKIHN0YXRpYyBpbnQgc3NtMjYwMl9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCXNzbTI2MDJfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOwogCXJldHVybiAwOwpAQCAtNTU5LDcgKzU0Niw3IEBACiBzdGF0aWMgaW50IHNzbTI2MDJfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJaW50IGk7CiAJdTggZGF0YVsyXTsKIAl1MTYgKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKQEAgLTU4MSw3ICs1NjgsNyBAQAogICovCiBzdGF0aWMgaW50IHNzbTI2MDJfaW5pdChzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldikKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJaW50IHJlZywgcmV0ID0gMDsKIAogCWNvZGVjLT5uYW1lID0gIlNTTTI2MDIiOwpAQCAtNjIyLDcgKzYwOSw4IEBACiAJCQlBUEFOQV9FTkFCTEVfTUlDX0JPT1NUKTsKIAlzc20yNjAyX3dyaXRlKGNvZGVjLCBTU00yNjAyX1BXUiwgMCk7CiAKLQlzc20yNjAyX2FkZF9jb250cm9scyhjb2RlYyk7CisJc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHNzbTI2MDJfc25kX2NvbnRyb2xzLAorCQkJCUFSUkFZX1NJWkUoc3NtMjYwMl9zbmRfY29udHJvbHMpKTsKIAlzc20yNjAyX2FkZF93aWRnZXRzKGNvZGVjKTsKIAlyZXQgPSBzbmRfc29jX2luaXRfY2FyZChzb2NkZXYpOwogCWlmIChyZXQgPCAwKSB7CkBAIC02NTMsNyArNjQxLDcgQEAKIAkJCSAgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gc3NtMjYwMl9zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCWludCByZXQ7CiAKIAlpMmNfc2V0X2NsaWVudGRhdGEoaTJjLCBjb2RlYyk7CkBAIC03NDcsNyArNzM1LDcgQEAKIAl9CiAKIAljb2RlYy0+cHJpdmF0ZV9kYXRhID0gc3NtMjYwMjsKLQlzb2NkZXYtPmNvZGVjID0gY29kZWM7CisJc29jZGV2LT5jYXJkLT5jb2RlYyA9IGNvZGVjOwogCW11dGV4X2luaXQoJmNvZGVjLT5tdXRleCk7CiAJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3dpZGdldHMpOwogCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV9wYXRocyk7CkBAIC03NjgsNyArNzU2LDcgQEAKIHN0YXRpYyBpbnQgc3NtMjYwMl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCWlmIChjb2RlYy0+Y29udHJvbF9kYXRhKQogCQlzc20yNjAyX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwYWljMjMuYyBiL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwYWljMjMuYwppbmRleCBjZmRlYTAwLi5jM2Y0YWZiIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGFpYzIzLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy90bHYzMjBhaWMyMy5jCkBAIC0xODMsMjQgKzE4Myw2IEBACiAJU09DX0VOVU0oIlBsYXliYWNrIERlLWVtcGhhc2lzIiwgdGx2MzIwYWljMjNfZGVlbXBoKSwKIH07CiAKLS8qIGFkZCBub24gZGFwbSBjb250cm9scyAqLwotc3RhdGljIGludCB0bHYzMjBhaWMyM19hZGRfY29udHJvbHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQotewotCi0JaW50IGVyciwgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRsdjMyMGFpYzIzX3NuZF9jb250cm9scyk7IGkrKykgewotCQllcnIgPSBzbmRfY3RsX2FkZChjb2RlYy0+Y2FyZCwKLQkJCQkgIHNuZF9zb2NfY25ldygmdGx2MzIwYWljMjNfc25kX2NvbnRyb2xzW2ldLAotCQkJCQkgICAgICAgY29kZWMsIE5VTEwpKTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwotCX0KLQotCXJldHVybiAwOwotCi19Ci0KIC8qIFBHQSBNaXhlciBjb250cm9scyBmb3IgTGluZSBhbmQgTWljIHN3aXRjaCAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHRsdjMyMGFpYzIzX291dHB1dF9taXhlcl9jb250cm9sc1tdID0gewogCVNPQ19EQVBNX1NJTkdMRSgiTGluZSBCeXBhc3MgU3dpdGNoIiwgVExWMzIwQUlDMjNfQU5MRywgMywgMSwgMCksCkBAIC00MjMsNyArNDA1LDcgQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJdTE2IGlmYWNlX3JlZzsKIAlpbnQgcmV0OwogCXN0cnVjdCBhaWMyMyAqYWljMjMgPSBjb250YWluZXJfb2YoY29kZWMsIHN0cnVjdCBhaWMyMywgY29kZWMpOwpAQCAtNDcxLDcgKzQ1Myw3IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJLyogc2V0IGFjdGl2ZSAqLwogCXRsdjMyMGFpYzIzX3dyaXRlKGNvZGVjLCBUTFYzMjBBSUMyM19BQ1RJVkUsIDB4MDAwMSk7CkBAIC00ODQsNyArNDY2LDcgQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJc3RydWN0IGFpYzIzICphaWMyMyA9IGNvbnRhaW5lcl9vZihjb2RlYywgc3RydWN0IGFpYzIzLCBjb2RlYyk7CiAKIAkvKiBkZWFjdGl2YXRlICovCkBAIC01OTgsNiArNTgwLDE1IEBACiAjZGVmaW5lIEFJQzIzX0ZPUk1BVFMJKFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwgU05EUlZfUENNX0ZNVEJJVF9TMjBfM0xFIHwgXAogCQkJIFNORFJWX1BDTV9GTVRCSVRfUzI0XzNMRSB8IFNORFJWX1BDTV9GTVRCSVRfUzMyX0xFKQogCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyB0bHYzMjBhaWMyM19kYWlfb3BzID0geworCS5wcmVwYXJlCT0gdGx2MzIwYWljMjNfcGNtX3ByZXBhcmUsCisJLmh3X3BhcmFtcwk9IHRsdjMyMGFpYzIzX2h3X3BhcmFtcywKKwkuc2h1dGRvd24JPSB0bHYzMjBhaWMyM19zaHV0ZG93biwKKwkuZGlnaXRhbF9tdXRlCT0gdGx2MzIwYWljMjNfbXV0ZSwKKwkuc2V0X2ZtdAk9IHRsdjMyMGFpYzIzX3NldF9kYWlfZm10LAorCS5zZXRfc3lzY2xrCT0gdGx2MzIwYWljMjNfc2V0X2RhaV9zeXNjbGssCit9OworCiBzdHJ1Y3Qgc25kX3NvY19kYWkgdGx2MzIwYWljMjNfZGFpID0gewogCS5uYW1lID0gInRsdjMyMGFpYzIzIiwKIAkucGxheWJhY2sgPSB7CkBAIC02MTIsMTQgKzYwMyw3IEBACiAJCSAgICAuY2hhbm5lbHNfbWF4ID0gMiwKIAkJICAgIC5yYXRlcyA9IEFJQzIzX1JBVEVTLAogCQkgICAgLmZvcm1hdHMgPSBBSUMyM19GT1JNQVRTLH0sCi0JLm9wcyA9IHsKLQkJLnByZXBhcmUgPSB0bHYzMjBhaWMyM19wY21fcHJlcGFyZSwKLQkJLmh3X3BhcmFtcyA9IHRsdjMyMGFpYzIzX2h3X3BhcmFtcywKLQkJLnNodXRkb3duID0gdGx2MzIwYWljMjNfc2h1dGRvd24sCi0JCS5kaWdpdGFsX211dGUgPSB0bHYzMjBhaWMyM19tdXRlLAotCQkuc2V0X2ZtdCA9IHRsdjMyMGFpYzIzX3NldF9kYWlfZm10LAotCQkuc2V0X3N5c2NsayA9IHRsdjMyMGFpYzIzX3NldF9kYWlfc3lzY2xrLAotCX0KKwkub3BzID0gJnRsdjMyMGFpYzIzX2RhaV9vcHMsCiB9OwogRVhQT1JUX1NZTUJPTF9HUEwodGx2MzIwYWljMjNfZGFpKTsKIApAQCAtNjI3LDcgKzYxMSw3IEBACiAJCQkgICAgICAgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJdGx2MzIwYWljMjNfd3JpdGUoY29kZWMsIFRMVjMyMEFJQzIzX0FDVElWRSwgMHgwKTsKIAl0bHYzMjBhaWMyM19zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7CkBAIC02MzgsNyArNjIyLDcgQEAKIHN0YXRpYyBpbnQgdGx2MzIwYWljMjNfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJaW50IGk7CiAJdTE2IHJlZzsKIApAQCAtNjYwLDcgKzY0NCw3IEBACiAgKi8KIHN0YXRpYyBpbnQgdGx2MzIwYWljMjNfaW5pdChzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldikKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJaW50IHJldCA9IDA7CiAJdTE2IHJlZzsKIApAQCAtNzE4LDcgKzcwMiw4IEBACiAKIAl0bHYzMjBhaWMyM193cml0ZShjb2RlYywgVExWMzIwQUlDMjNfQUNUSVZFLCAweDEpOwogCi0JdGx2MzIwYWljMjNfYWRkX2NvbnRyb2xzKGNvZGVjKTsKKwlzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgdGx2MzIwYWljMjNfc25kX2NvbnRyb2xzLAorCQkJCUFSUkFZX1NJWkUodGx2MzIwYWljMjNfc25kX2NvbnRyb2xzKSk7CiAJdGx2MzIwYWljMjNfYWRkX3dpZGdldHMoY29kZWMpOwogCXJldCA9IHNuZF9zb2NfaW5pdF9jYXJkKHNvY2Rldik7CiAJaWYgKHJldCA8IDApIHsKQEAgLTc0Niw3ICs3MzEsNyBAQAogCQkJCSAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppMmNfaWQpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSB0bHYzMjBhaWMyM19zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCWludCByZXQ7CiAKIAlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGkyYy0+YWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKQEAgLTgwNCw3ICs3ODksNyBAQAogCWlmIChhaWMyMyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAljb2RlYyA9ICZhaWMyMy0+Y29kZWM7Ci0Jc29jZGV2LT5jb2RlYyA9IGNvZGVjOworCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSBjb2RlYzsKIAltdXRleF9pbml0KCZjb2RlYy0+bXV0ZXgpOwogCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV93aWRnZXRzKTsKIAlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fcGF0aHMpOwpAQCAtODIzLDcgKzgwOCw3IEBACiBzdGF0aWMgaW50IHRsdjMyMGFpYzIzX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCXN0cnVjdCBhaWMyMyAqYWljMjMgPSBjb250YWluZXJfb2YoY29kZWMsIHN0cnVjdCBhaWMyMywgY29kZWMpOwogCiAJaWYgKGNvZGVjLT5jb250cm9sX2RhdGEpCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGFpYzI2LmMgYi9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGFpYzI2LmMKaW5kZXggMjlmMmYxYS4uMzM4N2Q5ZSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy90bHYzMjBhaWMyNi5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwYWljMjYuYwpAQCAtMTMwLDcgKzEzMCw3IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCXN0cnVjdCBhaWMyNiAqYWljMjYgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOwogCWludCBmc3JlZiwgZGl2aXNvciwgd2xlbiwgcHZhbCwganZhbCwgZHZhbCwgcXZhbDsKIAl1MTYgcmVnOwpAQCAtMjcwLDYgKzI3MCwxMyBAQAogI2RlZmluZSBBSUMyNl9GT1JNQVRTCShTTkRSVl9QQ01fRk1UQklUX1M4ICAgICB8IFNORFJWX1BDTV9GTVRCSVRfUzE2X0JFIHxcCiAJCQkgU05EUlZfUENNX0ZNVEJJVF9TMjRfQkUgfCBTTkRSVl9QQ01fRk1UQklUX1MzMl9CRSkKIAorc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgYWljMjZfZGFpX29wcyA9IHsKKwkuaHdfcGFyYW1zCT0gYWljMjZfaHdfcGFyYW1zLAorCS5kaWdpdGFsX211dGUJPSBhaWMyNl9tdXRlLAorCS5zZXRfc3lzY2xrCT0gYWljMjZfc2V0X3N5c2NsaywKKwkuc2V0X2ZtdAk9IGFpYzI2X3NldF9mbXQsCit9OworCiBzdHJ1Y3Qgc25kX3NvY19kYWkgYWljMjZfZGFpID0gewogCS5uYW1lID0gInRsdjMyMGFpYzI2IiwKIAkucGxheWJhY2sgPSB7CkBAIC0yODYsMTIgKzI5Myw3IEBACiAJCS5yYXRlcyA9IEFJQzI2X1JBVEVTLAogCQkuZm9ybWF0cyA9IEFJQzI2X0ZPUk1BVFMsCiAJfSwKLQkub3BzID0gewotCQkuaHdfcGFyYW1zID0gYWljMjZfaHdfcGFyYW1zLAotCQkuZGlnaXRhbF9tdXRlID0gYWljMjZfbXV0ZSwKLQkJLnNldF9zeXNjbGsgPSBhaWMyNl9zZXRfc3lzY2xrLAotCQkuc2V0X2ZtdCA9IGFpYzI2X3NldF9mbXQsCi0JfSwKKwkub3BzID0gJmFpYzI2X2RhaV9vcHMsCiB9OwogRVhQT1JUX1NZTUJPTF9HUEwoYWljMjZfZGFpKTsKIApAQCAtMzIyLDkgKzMyNCw4IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7Ci0Jc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2w7CiAJc3RydWN0IGFpYzI2ICphaWMyNjsKLQlpbnQgaSwgcmV0LCBlcnI7CisJaW50IHJldCwgZXJyOwogCiAJZGV2X2luZm8oJnBkZXYtPmRldiwgIlByb2JpbmcgQUlDMjYgU29DIENPREVDIGRyaXZlclxuIik7CiAJZGV2X2RiZygmcGRldi0+ZGV2LCAic29jZGV2PSVwXG4iLCBzb2NkZXYpOwpAQCAtMzM4LDcgKzMzOSw3IEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAljb2RlYyA9ICZhaWMyNi0+Y29kZWM7Ci0Jc29jZGV2LT5jb2RlYyA9IGNvZGVjOworCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSBjb2RlYzsKIAogCWRldl9kYmcoJnBkZXYtPmRldiwgIlJlZ2lzdGVyaW5nIFBDTXMsIGRldj0lcCwgc29jZGV2LT5kZXY9JXBcbiIsCiAJCSZwZGV2LT5kZXYsIHNvY2Rldi0+ZGV2KTsKQEAgLTM1MSwxMSArMzUyLDkgQEAKIAogCS8qIHJlZ2lzdGVyIGNvbnRyb2xzICovCiAJZGV2X2RiZygmcGRldi0+ZGV2LCAiUmVnaXN0ZXJpbmcgY29udHJvbHNcbiIpOwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFpYzI2X3NuZF9jb250cm9scyk7IGkrKykgewotCQlrY29udHJvbCA9IHNuZF9zb2NfY25ldygmYWljMjZfc25kX2NvbnRyb2xzW2ldLCBjb2RlYywgTlVMTCk7Ci0JCWVyciA9IHNuZF9jdGxfYWRkKGNvZGVjLT5jYXJkLCBrY29udHJvbCk7Ci0JCVdBUk5fT04oZXJyIDwgMCk7Ci0JfQorCWVyciA9IHNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCBhaWMyNl9zbmRfY29udHJvbHMsCisJCQlBUlJBWV9TSVpFKGFpYzI2X3NuZF9jb250cm9scykpOworCVdBUk5fT04oZXJyIDwgMCk7CiAKIAkvKiBDT0RFQyBpcyBzZXR1cCwgd2UgY2FuIHJlZ2lzdGVyIHRoZSBjYXJkIG5vdyAqLwogCWRldl9kYmcoJnBkZXYtPmRldiwgIlJlZ2lzdGVyaW5nIGNhcmRcbiIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy90bHYzMjBhaWMzeC5jIGIvc291bmQvc29jL2NvZGVjcy90bHYzMjBhaWMzeC5jCmluZGV4IGFlYTBjYjcuLmFiMDk5ZjQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwYWljM3guYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGFpYzN4LmMKQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KICNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgogI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxzb3VuZC90bHYuaD4KIAogI2luY2x1ZGUgInRsdjMyMGFpYzN4LmgiCiAKQEAgLTI1MCw1NiArMjUxLDg2IEBACiAJU09DX0VOVU1fRE9VQkxFKEFJQzNYX0NPREVDX0RGSUxUX0NUUkwsIDYsIDQsIDQsIGFpYzN4X2FkY19ocGYpLAogfTsKIAorLyoKKyAqIERBQyBkaWdpdGFsIHZvbHVtZXMuIEZyb20gLTYzLjUgdG8gMCBkQiBpbiAwLjUgZEIgc3RlcHMKKyAqLworc3RhdGljIERFQ0xBUkVfVExWX0RCX1NDQUxFKGRhY190bHYsIC02MzUwLCA1MCwgMCk7CisvKiBBREMgUEdBIGdhaW4gdm9sdW1lcy4gRnJvbSAwIHRvIDU5LjUgZEIgaW4gMC41IGRCIHN0ZXBzICovCitzdGF0aWMgREVDTEFSRV9UTFZfREJfU0NBTEUoYWRjX3RsdiwgMCwgNTAsIDApOworLyoKKyAqIE91dHB1dCBzdGFnZSB2b2x1bWVzLiBGcm9tIC03OC4zIHRvIDAgZEIuIE11dGVkIGJlbG93IC03OC4zIGRCLgorICogU3RlcCBzaXplIGlzIGFwcHJveGltYXRlbHkgMC41IGRCIG92ZXIgbW9zdCBvZiB0aGUgc2NhbGUgYnV0IGluY3JlYXNpbmcKKyAqIG5lYXIgdGhlIHZlcnkgbG93IGxldmVscy4KKyAqIERlZmluZSBkQiBzY2FsZSBzbyB0aGF0IGl0IGlzIG1vc3RseSBjb3JyZWN0IGZvciByYW5nZSBhYm91dCAtNTUgdG8gMCBkQgorICogYnV0IGhhdmluZyBpbmNyZWFzaW5nIGRCIGRpZmZlcmVuY2UgYmVsb3cgdGhhdCAoYW5kIHdoZXJlIGl0IGRvZXNuJ3QgY291bnQKKyAqIHNvIG11Y2gpLiBUaGlzIHNldHRpbmcgc2hvd3MgLTUwIGRCIChhY3R1YWwgaXMgLTUwLjMgZEIpIGZvciByZWdpc3RlcgorICogdmFsdWUgMTAwIGFuZCAtNTguNSBkQiAoYWN0dWFsIGlzIC03OC4zIGRCKSBmb3IgcmVnaXN0ZXIgdmFsdWUgMTE3LgorICovCitzdGF0aWMgREVDTEFSRV9UTFZfREJfU0NBTEUob3V0cHV0X3N0YWdlX3RsdiwgLTU5MDAsIDUwLCAxKTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFpYzN4X3NuZF9jb250cm9sc1tdID0gewogCS8qIE91dHB1dCAqLwotCVNPQ19ET1VCTEVfUigiUENNIFBsYXliYWNrIFZvbHVtZSIsIExEQUNfVk9MLCBSREFDX1ZPTCwgMCwgMHg3ZiwgMSksCisJU09DX0RPVUJMRV9SX1RMVigiUENNIFBsYXliYWNrIFZvbHVtZSIsCisJCQkgTERBQ19WT0wsIFJEQUNfVk9MLCAwLCAweDdmLCAxLCBkYWNfdGx2KSwKIAotCVNPQ19ET1VCTEVfUigiTGluZSBEQUMgUGxheWJhY2sgVm9sdW1lIiwgREFDTDFfMl9MTE9QTV9WT0wsCi0JCSAgICAgREFDUjFfMl9STE9QTV9WT0wsIDAsIDB4N2YsIDEpLAorCVNPQ19ET1VCTEVfUl9UTFYoIkxpbmUgREFDIFBsYXliYWNrIFZvbHVtZSIsCisJCQkgREFDTDFfMl9MTE9QTV9WT0wsIERBQ1IxXzJfUkxPUE1fVk9MLAorCQkJIDAsIDExOCwgMSwgb3V0cHV0X3N0YWdlX3RsdiksCiAJU09DX1NJTkdMRSgiTGluZUwgUGxheWJhY2sgU3dpdGNoIiwgTExPUE1fQ1RSTCwgMywgMHgwMSwgMCksCiAJU09DX1NJTkdMRSgiTGluZVIgUGxheWJhY2sgU3dpdGNoIiwgUkxPUE1fQ1RSTCwgMywgMHgwMSwgMCksCi0JU09DX0RPVUJMRV9SKCJMaW5lTCBEQUMgUGxheWJhY2sgVm9sdW1lIiwgREFDTDFfMl9MTE9QTV9WT0wsCi0JCSAgICAgREFDUjFfMl9MTE9QTV9WT0wsIDAsIDB4N2YsIDEpLAotCVNPQ19TSU5HTEUoIkxpbmVMIExlZnQgUEdBIEJ5cGFzcyBQbGF5YmFjayBWb2x1bWUiLCBQR0FMXzJfTExPUE1fVk9MLAotCQkgICAgIDAsIDB4N2YsIDEpLAotCVNPQ19TSU5HTEUoIkxpbmVSIFJpZ2h0IFBHQSBCeXBhc3MgUGxheWJhY2sgVm9sdW1lIiwgUEdBUl8yX1JMT1BNX1ZPTCwKLQkJICAgICAwLCAweDdmLCAxKSwKLQlTT0NfRE9VQkxFX1IoIkxpbmVMIExpbmUyIEJ5cGFzcyBQbGF5YmFjayBWb2x1bWUiLCBMSU5FMkxfMl9MTE9QTV9WT0wsCi0JCSAgICAgTElORTJSXzJfTExPUE1fVk9MLCAwLCAweDdmLCAxKSwKLQlTT0NfRE9VQkxFX1IoIkxpbmVSIExpbmUyIEJ5cGFzcyBQbGF5YmFjayBWb2x1bWUiLCBMSU5FMkxfMl9STE9QTV9WT0wsCi0JCSAgICAgTElORTJSXzJfUkxPUE1fVk9MLCAwLCAweDdmLCAxKSwKKwlTT0NfRE9VQkxFX1JfVExWKCJMaW5lTCBEQUMgUGxheWJhY2sgVm9sdW1lIiwKKwkJCSBEQUNMMV8yX0xMT1BNX1ZPTCwgREFDUjFfMl9MTE9QTV9WT0wsCisJCQkgMCwgMTE4LCAxLCBvdXRwdXRfc3RhZ2VfdGx2KSwKKwlTT0NfU0lOR0xFX1RMVigiTGluZUwgTGVmdCBQR0EgQnlwYXNzIFBsYXliYWNrIFZvbHVtZSIsCisJCSAgICAgICBQR0FMXzJfTExPUE1fVk9MLCAwLCAxMTgsIDEsIG91dHB1dF9zdGFnZV90bHYpLAorCVNPQ19TSU5HTEVfVExWKCJMaW5lUiBSaWdodCBQR0EgQnlwYXNzIFBsYXliYWNrIFZvbHVtZSIsCisJCSAgICAgICBQR0FSXzJfUkxPUE1fVk9MLCAwLCAxMTgsIDEsIG91dHB1dF9zdGFnZV90bHYpLAorCVNPQ19ET1VCTEVfUl9UTFYoIkxpbmVMIExpbmUyIEJ5cGFzcyBQbGF5YmFjayBWb2x1bWUiLAorCQkJIExJTkUyTF8yX0xMT1BNX1ZPTCwgTElORTJSXzJfTExPUE1fVk9MLAorCQkJIDAsIDExOCwgMSwgb3V0cHV0X3N0YWdlX3RsdiksCisJU09DX0RPVUJMRV9SX1RMVigiTGluZVIgTGluZTIgQnlwYXNzIFBsYXliYWNrIFZvbHVtZSIsCisJCQkgTElORTJMXzJfUkxPUE1fVk9MLCBMSU5FMlJfMl9STE9QTV9WT0wsCisJCQkgMCwgMTE4LCAxLCBvdXRwdXRfc3RhZ2VfdGx2KSwKIAotCVNPQ19ET1VCTEVfUigiTW9ubyBEQUMgUGxheWJhY2sgVm9sdW1lIiwgREFDTDFfMl9NT05PTE9QTV9WT0wsCi0JCSAgICAgREFDUjFfMl9NT05PTE9QTV9WT0wsIDAsIDB4N2YsIDEpLAorCVNPQ19ET1VCTEVfUl9UTFYoIk1vbm8gREFDIFBsYXliYWNrIFZvbHVtZSIsCisJCQkgREFDTDFfMl9NT05PTE9QTV9WT0wsIERBQ1IxXzJfTU9OT0xPUE1fVk9MLAorCQkJIDAsIDExOCwgMSwgb3V0cHV0X3N0YWdlX3RsdiksCiAJU09DX1NJTkdMRSgiTW9ubyBEQUMgUGxheWJhY2sgU3dpdGNoIiwgTU9OT0xPUE1fQ1RSTCwgMywgMHgwMSwgMCksCi0JU09DX0RPVUJMRV9SKCJNb25vIFBHQSBCeXBhc3MgUGxheWJhY2sgVm9sdW1lIiwgUEdBTF8yX01PTk9MT1BNX1ZPTCwKLQkJICAgICBQR0FSXzJfTU9OT0xPUE1fVk9MLCAwLCAweDdmLCAxKSwKLQlTT0NfRE9VQkxFX1IoIk1vbm8gTGluZTIgQnlwYXNzIFBsYXliYWNrIFZvbHVtZSIsIExJTkUyTF8yX01PTk9MT1BNX1ZPTCwKLQkJICAgICBMSU5FMlJfMl9NT05PTE9QTV9WT0wsIDAsIDB4N2YsIDEpLAorCVNPQ19ET1VCTEVfUl9UTFYoIk1vbm8gUEdBIEJ5cGFzcyBQbGF5YmFjayBWb2x1bWUiLAorCQkJIFBHQUxfMl9NT05PTE9QTV9WT0wsIFBHQVJfMl9NT05PTE9QTV9WT0wsCisJCQkgMCwgMTE4LCAxLCBvdXRwdXRfc3RhZ2VfdGx2KSwKKwlTT0NfRE9VQkxFX1JfVExWKCJNb25vIExpbmUyIEJ5cGFzcyBQbGF5YmFjayBWb2x1bWUiLAorCQkJIExJTkUyTF8yX01PTk9MT1BNX1ZPTCwgTElORTJSXzJfTU9OT0xPUE1fVk9MLAorCQkJIDAsIDExOCwgMSwgb3V0cHV0X3N0YWdlX3RsdiksCiAKLQlTT0NfRE9VQkxFX1IoIkhQIERBQyBQbGF5YmFjayBWb2x1bWUiLCBEQUNMMV8yX0hQTE9VVF9WT0wsCi0JCSAgICAgREFDUjFfMl9IUFJPVVRfVk9MLCAwLCAweDdmLCAxKSwKKwlTT0NfRE9VQkxFX1JfVExWKCJIUCBEQUMgUGxheWJhY2sgVm9sdW1lIiwKKwkJCSBEQUNMMV8yX0hQTE9VVF9WT0wsIERBQ1IxXzJfSFBST1VUX1ZPTCwKKwkJCSAwLCAxMTgsIDEsIG91dHB1dF9zdGFnZV90bHYpLAogCVNPQ19ET1VCTEVfUigiSFAgREFDIFBsYXliYWNrIFN3aXRjaCIsIEhQTE9VVF9DVFJMLCBIUFJPVVRfQ1RSTCwgMywKIAkJICAgICAweDAxLCAwKSwKLQlTT0NfRE9VQkxFX1IoIkhQIFJpZ2h0IFBHQSBCeXBhc3MgUGxheWJhY2sgVm9sdW1lIiwgUEdBUl8yX0hQTE9VVF9WT0wsCi0JCSAgICAgUEdBUl8yX0hQUk9VVF9WT0wsIDAsIDB4N2YsIDEpLAotCVNPQ19TSU5HTEUoIkhQTCBQR0EgQnlwYXNzIFBsYXliYWNrIFZvbHVtZSIsIFBHQUxfMl9IUExPVVRfVk9MLAotCQkgICAgIDAsIDB4N2YsIDEpLAotCVNPQ19TSU5HTEUoIkhQUiBQR0EgQnlwYXNzIFBsYXliYWNrIFZvbHVtZSIsIFBHQUxfMl9IUFJPVVRfVk9MLAotCQkgICAgIDAsIDB4N2YsIDEpLAotCVNPQ19ET1VCTEVfUigiSFAgTGluZTIgQnlwYXNzIFBsYXliYWNrIFZvbHVtZSIsIExJTkUyTF8yX0hQTE9VVF9WT0wsCi0JCSAgICAgTElORTJSXzJfSFBST1VUX1ZPTCwgMCwgMHg3ZiwgMSksCisJU09DX0RPVUJMRV9SX1RMVigiSFAgUmlnaHQgUEdBIEJ5cGFzcyBQbGF5YmFjayBWb2x1bWUiLAorCQkJIFBHQVJfMl9IUExPVVRfVk9MLCBQR0FSXzJfSFBST1VUX1ZPTCwKKwkJCSAwLCAxMTgsIDEsIG91dHB1dF9zdGFnZV90bHYpLAorCVNPQ19TSU5HTEVfVExWKCJIUEwgUEdBIEJ5cGFzcyBQbGF5YmFjayBWb2x1bWUiLAorCQkgICAgICAgUEdBTF8yX0hQTE9VVF9WT0wsIDAsIDExOCwgMSwgb3V0cHV0X3N0YWdlX3RsdiksCisJU09DX1NJTkdMRV9UTFYoIkhQUiBQR0EgQnlwYXNzIFBsYXliYWNrIFZvbHVtZSIsCisJCSAgICAgICBQR0FMXzJfSFBST1VUX1ZPTCwgMCwgMTE4LCAxLCBvdXRwdXRfc3RhZ2VfdGx2KSwKKwlTT0NfRE9VQkxFX1JfVExWKCJIUCBMaW5lMiBCeXBhc3MgUGxheWJhY2sgVm9sdW1lIiwKKwkJCSBMSU5FMkxfMl9IUExPVVRfVk9MLCBMSU5FMlJfMl9IUFJPVVRfVk9MLAorCQkJIDAsIDExOCwgMSwgb3V0cHV0X3N0YWdlX3RsdiksCiAKLQlTT0NfRE9VQkxFX1IoIkhQQ09NIERBQyBQbGF5YmFjayBWb2x1bWUiLCBEQUNMMV8yX0hQTENPTV9WT0wsCi0JCSAgICAgREFDUjFfMl9IUFJDT01fVk9MLCAwLCAweDdmLCAxKSwKKwlTT0NfRE9VQkxFX1JfVExWKCJIUENPTSBEQUMgUGxheWJhY2sgVm9sdW1lIiwKKwkJCSBEQUNMMV8yX0hQTENPTV9WT0wsIERBQ1IxXzJfSFBSQ09NX1ZPTCwKKwkJCSAwLCAxMTgsIDEsIG91dHB1dF9zdGFnZV90bHYpLAogCVNPQ19ET1VCTEVfUigiSFBDT00gREFDIFBsYXliYWNrIFN3aXRjaCIsIEhQTENPTV9DVFJMLCBIUFJDT01fQ1RSTCwgMywKIAkJICAgICAweDAxLCAwKSwKLQlTT0NfU0lOR0xFKCJIUExDT00gUEdBIEJ5cGFzcyBQbGF5YmFjayBWb2x1bWUiLCBQR0FMXzJfSFBMQ09NX1ZPTCwKLQkJICAgICAwLCAweDdmLCAxKSwKLQlTT0NfU0lOR0xFKCJIUFJDT00gUEdBIEJ5cGFzcyBQbGF5YmFjayBWb2x1bWUiLCBQR0FMXzJfSFBSQ09NX1ZPTCwKLQkJICAgICAwLCAweDdmLCAxKSwKLQlTT0NfRE9VQkxFX1IoIkhQQ09NIExpbmUyIEJ5cGFzcyBQbGF5YmFjayBWb2x1bWUiLCBMSU5FMkxfMl9IUExDT01fVk9MLAotCQkgICAgIExJTkUyUl8yX0hQUkNPTV9WT0wsIDAsIDB4N2YsIDEpLAorCVNPQ19TSU5HTEVfVExWKCJIUExDT00gUEdBIEJ5cGFzcyBQbGF5YmFjayBWb2x1bWUiLAorCQkgICAgICAgUEdBTF8yX0hQTENPTV9WT0wsIDAsIDExOCwgMSwgb3V0cHV0X3N0YWdlX3RsdiksCisJU09DX1NJTkdMRV9UTFYoIkhQUkNPTSBQR0EgQnlwYXNzIFBsYXliYWNrIFZvbHVtZSIsCisJCSAgICAgICBQR0FMXzJfSFBSQ09NX1ZPTCwgMCwgMTE4LCAxLCBvdXRwdXRfc3RhZ2VfdGx2KSwKKwlTT0NfRE9VQkxFX1JfVExWKCJIUENPTSBMaW5lMiBCeXBhc3MgUGxheWJhY2sgVm9sdW1lIiwKKwkJCSBMSU5FMkxfMl9IUExDT01fVk9MLCBMSU5FMlJfMl9IUFJDT01fVk9MLAorCQkJIDAsIDExOCwgMSwgb3V0cHV0X3N0YWdlX3RsdiksCiAKIAkvKgogCSAqIE5vdGU6IGVuYWJsZSBBdXRvbWF0aWMgaW5wdXQgR2FpbiBDb250cm9sbGVyIHdpdGggY2FyZS4gSXQgY2FuCkBAIC0zMDgsMjggKzMzOSwxMyBAQAogCVNPQ19ET1VCTEVfUigiQUdDIFN3aXRjaCIsIExBR0NfQ1RSTF9BLCBSQUdDX0NUUkxfQSwgNywgMHgwMSwgMCksCiAKIAkvKiBJbnB1dCAqLwotCVNPQ19ET1VCTEVfUigiUEdBIENhcHR1cmUgVm9sdW1lIiwgTEFEQ19WT0wsIFJBRENfVk9MLCAwLCAweDdmLCAwKSwKKwlTT0NfRE9VQkxFX1JfVExWKCJQR0EgQ2FwdHVyZSBWb2x1bWUiLCBMQURDX1ZPTCwgUkFEQ19WT0wsCisJCQkgMCwgMTE5LCAwLCBhZGNfdGx2KSwKIAlTT0NfRE9VQkxFX1IoIlBHQSBDYXB0dXJlIFN3aXRjaCIsIExBRENfVk9MLCBSQURDX1ZPTCwgNywgMHgwMSwgMSksCiAKIAlTT0NfRU5VTSgiQURDIEhQRiBDdXQtb2ZmIiwgYWljM3hfZW51bVtBRENfSFBGX0VOVU1dKSwKIH07CiAKLS8qIGFkZCBub24gZGFwbSBjb250cm9scyAqLwotc3RhdGljIGludCBhaWMzeF9hZGRfY29udHJvbHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQotewotCWludCBlcnIsIGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhaWMzeF9zbmRfY29udHJvbHMpOyBpKyspIHsKLQkJZXJyID0gc25kX2N0bF9hZGQoY29kZWMtPmNhcmQsCi0JCQkJICBzbmRfc29jX2NuZXcoJmFpYzN4X3NuZF9jb250cm9sc1tpXSwKLQkJCQkJICAgICAgIGNvZGVjLCBOVUxMKSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQogLyogTGVmdCBEQUMgTXV4ICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWljM3hfbGVmdF9kYWNfbXV4X2NvbnRyb2xzID0KIFNPQ19EQVBNX0VOVU0oIlJvdXRlIiwgYWljM3hfZW51bVtMREFDX0VOVU1dKTsKQEAgLTc0Niw3ICs3NjIsNyBAQAogewogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHJ0ZC0+c29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlzdHJ1Y3QgYWljM3hfcHJpdiAqYWljM3ggPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOwogCWludCBjb2RlY19jbGsgPSAwLCBieXBhc3NfcGxsID0gMCwgZnNyZWYsIGxhc3RfY2xrID0gMDsKIAl1OCBkYXRhLCByLCBwLCBwbGxfcSwgcGxsX3AgPSAxLCBwbGxfciA9IDEsIHBsbF9qID0gMTsKQEAgLTEwNzIsNiArMTA4OCwxMyBAQAogI2RlZmluZSBBSUMzWF9GT1JNQVRTCShTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8IFNORFJWX1BDTV9GTVRCSVRfUzIwXzNMRSB8IFwKIAkJCSBTTkRSVl9QQ01fRk1UQklUX1MyNF8zTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MzMl9MRSkKIAorc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgYWljM3hfZGFpX29wcyA9IHsKKwkuaHdfcGFyYW1zCT0gYWljM3hfaHdfcGFyYW1zLAorCS5kaWdpdGFsX211dGUJPSBhaWMzeF9tdXRlLAorCS5zZXRfc3lzY2xrCT0gYWljM3hfc2V0X2RhaV9zeXNjbGssCisJLnNldF9mbXQJPSBhaWMzeF9zZXRfZGFpX2ZtdCwKK307CisKIHN0cnVjdCBzbmRfc29jX2RhaSBhaWMzeF9kYWkgPSB7CiAJLm5hbWUgPSAidGx2MzIwYWljM3giLAogCS5wbGF5YmFjayA9IHsKQEAgLTEwODYsMTkgKzExMDksMTQgQEAKIAkJLmNoYW5uZWxzX21heCA9IDIsCiAJCS5yYXRlcyA9IEFJQzNYX1JBVEVTLAogCQkuZm9ybWF0cyA9IEFJQzNYX0ZPUk1BVFMsfSwKLQkub3BzID0gewotCQkuaHdfcGFyYW1zID0gYWljM3hfaHdfcGFyYW1zLAotCQkuZGlnaXRhbF9tdXRlID0gYWljM3hfbXV0ZSwKLQkJLnNldF9zeXNjbGsgPSBhaWMzeF9zZXRfZGFpX3N5c2NsaywKLQkJLnNldF9mbXQgPSBhaWMzeF9zZXRfZGFpX2ZtdCwKLQl9CisJLm9wcyA9ICZhaWMzeF9kYWlfb3BzLAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKGFpYzN4X2RhaSk7CiAKIHN0YXRpYyBpbnQgYWljM3hfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAlhaWMzeF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7CiAKQEAgLTExMDgsNyArMTEyNiw3IEBACiBzdGF0aWMgaW50IGFpYzN4X3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCWludCBpOwogCXU4IGRhdGFbMl07CiAJdTggKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKQEAgLTExMzEsNyArMTE0OSw3IEBACiAgKi8KIHN0YXRpYyBpbnQgYWljM3hfaW5pdChzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldikKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJc3RydWN0IGFpYzN4X3NldHVwX2RhdGEgKnNldHVwID0gc29jZGV2LT5jb2RlY19kYXRhOwogCWludCByZWcsIHJldCA9IDA7CiAKQEAgLTEyMjcsNyArMTI0NSw4IEBACiAJYWljM3hfd3JpdGUoY29kZWMsIEFJQzNYX0dQSU8xX1JFRywgKHNldHVwLT5ncGlvX2Z1bmNbMF0gJiAweGYpIDw8IDQpOwogCWFpYzN4X3dyaXRlKGNvZGVjLCBBSUMzWF9HUElPMl9SRUcsIChzZXR1cC0+Z3Bpb19mdW5jWzFdICYgMHhmKSA8PCA0KTsKIAotCWFpYzN4X2FkZF9jb250cm9scyhjb2RlYyk7CisJc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIGFpYzN4X3NuZF9jb250cm9scywKKwkJCQlBUlJBWV9TSVpFKGFpYzN4X3NuZF9jb250cm9scykpOwogCWFpYzN4X2FkZF93aWRnZXRzKGNvZGVjKTsKIAlyZXQgPSBzbmRfc29jX2luaXRfY2FyZChzb2NkZXYpOwogCWlmIChyZXQgPCAwKSB7CkBAIC0xMjYxLDcgKzEyODAsNyBAQAogCQkJICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gYWljM3hfc29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlpbnQgcmV0OwogCiAJaTJjX3NldF9jbGllbnRkYXRhKGkyYywgY29kZWMpOwpAQCAtMTM2Niw3ICsxMzg1LDcgQEAKIAl9CiAKIAljb2RlYy0+cHJpdmF0ZV9kYXRhID0gYWljM3g7Ci0Jc29jZGV2LT5jb2RlYyA9IGNvZGVjOworCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSBjb2RlYzsKIAltdXRleF9pbml0KCZjb2RlYy0+bXV0ZXgpOwogCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV93aWRnZXRzKTsKIAlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fcGF0aHMpOwpAQCAtMTM5Miw3ICsxNDExLDcgQEAKIHN0YXRpYyBpbnQgYWljM3hfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAkvKiBwb3dlciBkb3duIGNoaXAgKi8KIAlpZiAoY29kZWMtPmNvbnRyb2xfZGF0YSkKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvdHdsNDAzMC5jIGIvc291bmQvc29jL2NvZGVjcy90d2w0MDMwLmMKaW5kZXggZWEzNzBhNC4uOTc3MzhlMiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy90d2w0MDMwLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy90d2w0MDMwLmMKQEAgLTQyLDcgKzQyLDcgQEAKICAqLwogc3RhdGljIGNvbnN0IHU4IHR3bDQwMzBfcmVnW1RXTDQwMzBfQ0FDSEVSRUdOVU1dID0gewogCTB4MDAsIC8qIHRoaXMgcmVnaXN0ZXIgbm90IHVzZWQJCSovCi0JMHg5MywgLyogUkVHX0NPREVDX01PREUJCSgweDEpCSovCisJMHg5MSwgLyogUkVHX0NPREVDX01PREUJCSgweDEpCSovCiAJMHhjMywgLyogUkVHX09QVElPTgkJKDB4MikJKi8KIAkweDAwLCAvKiBSRUdfVU5LTk9XTgkJKDB4MykJKi8KIAkweDAwLCAvKiBSRUdfTUlDQklBU19DVEwJKDB4NCkJKi8KQEAgLTExNyw2ICsxMTcsMTMgQEAKIAkweDAwLCAvKiBSRUdfTUlTQ19TRVRfMgkJKDB4NDkpCSovCiB9OwogCisvKiBjb2RlYyBwcml2YXRlIGRhdGEgKi8KK3N0cnVjdCB0d2w0MDMwX3ByaXYgeworCXVuc2lnbmVkIGludCBieXBhc3Nfc3RhdGU7CisJdW5zaWduZWQgaW50IGNvZGVjX3Bvd2VyZWQ7CisJdW5zaWduZWQgaW50IGNvZGVjX211dGVkOworfTsKKwogLyoKICAqIHJlYWQgdHdsNDAzMCByZWdpc3RlciBjYWNoZQogICovCkBAIC0xMjUsNiArMTMyLDkgQEAKIHsKIAl1OCAqY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOwogCisJaWYgKHJlZyA+PSBUV0w0MDMwX0NBQ0hFUkVHTlVNKQorCQlyZXR1cm4gLUVJTzsKKwogCXJldHVybiBjYWNoZVtyZWddOwogfQogCkBAIC0xNTEsMjYgKzE2MSwyMiBAQAogCXJldHVybiB0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9BVURJT19WT0lDRSwgdmFsdWUsIHJlZyk7CiB9CiAKLXN0YXRpYyB2b2lkIHR3bDQwMzBfY2xlYXJfY29kZWNwZHooc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQorc3RhdGljIHZvaWQgdHdsNDAzMF9jb2RlY19lbmFibGUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBpbnQgZW5hYmxlKQogeworCXN0cnVjdCB0d2w0MDMwX3ByaXYgKnR3bDQwMzAgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOwogCXU4IG1vZGU7CiAKLQltb2RlID0gdHdsNDAzMF9yZWFkX3JlZ19jYWNoZShjb2RlYywgVFdMNDAzMF9SRUdfQ09ERUNfTU9ERSk7Ci0JdHdsNDAzMF93cml0ZShjb2RlYywgVFdMNDAzMF9SRUdfQ09ERUNfTU9ERSwKLQkJbW9kZSAmIH5UV0w0MDMwX0NPREVDUERaKTsKLQotCS8qIFJFVklTSVQ6IHRoaXMgZGVsYXkgaXMgcHJlc2VudCBpbiBUSSBzYW1wbGUgZHJpdmVycyAqLwotCS8qIGJ1dCB0aGVyZSBzZWVtcyB0byBiZSBubyBUUk0gcmVxdWlyZW1lbnQgZm9yIGl0ICAgICAqLwotCXVkZWxheSgxMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHR3bDQwMzBfc2V0X2NvZGVjcGR6KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKLXsKLQl1OCBtb2RlOworCWlmIChlbmFibGUgPT0gdHdsNDAzMC0+Y29kZWNfcG93ZXJlZCkKKwkJcmV0dXJuOwogCiAJbW9kZSA9IHR3bDQwMzBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFRXTDQwMzBfUkVHX0NPREVDX01PREUpOwotCXR3bDQwMzBfd3JpdGUoY29kZWMsIFRXTDQwMzBfUkVHX0NPREVDX01PREUsCi0JCW1vZGUgfCBUV0w0MDMwX0NPREVDUERaKTsKKwlpZiAoZW5hYmxlKQorCQltb2RlIHw9IFRXTDQwMzBfQ09ERUNQRFo7CisJZWxzZQorCQltb2RlICY9IH5UV0w0MDMwX0NPREVDUERaOworCisJdHdsNDAzMF93cml0ZShjb2RlYywgVFdMNDAzMF9SRUdfQ09ERUNfTU9ERSwgbW9kZSk7CisJdHdsNDAzMC0+Y29kZWNfcG93ZXJlZCA9IGVuYWJsZTsKIAogCS8qIFJFVklTSVQ6IHRoaXMgZGVsYXkgaXMgcHJlc2VudCBpbiBUSSBzYW1wbGUgZHJpdmVycyAqLwogCS8qIGJ1dCB0aGVyZSBzZWVtcyB0byBiZSBubyBUUk0gcmVxdWlyZW1lbnQgZm9yIGl0ICAgICAqLwpAQCAtMTgyLDcgKzE4OCw3IEBACiAJaW50IGk7CiAKIAkvKiBjbGVhciBDT0RFQ1BEWiBwcmlvciB0byBzZXR0aW5nIHJlZ2lzdGVyIGRlZmF1bHRzICovCi0JdHdsNDAzMF9jbGVhcl9jb2RlY3Bkeihjb2RlYyk7CisJdHdsNDAzMF9jb2RlY19lbmFibGUoY29kZWMsIDApOwogCiAJLyogc2V0IGFsbCBhdWRpbyBzZWN0aW9uIHJlZ2lzdGVycyB0byByZWFzb25hYmxlIGRlZmF1bHRzICovCiAJZm9yIChpID0gVFdMNDAzMF9SRUdfT1BUSU9OOyBpIDw9IFRXTDQwMzBfUkVHX01JU0NfU0VUXzI7IGkrKykKQEAgLTE5MCw2ICsxOTYsMTIyIEBACiAKIH0KIAorc3RhdGljIHZvaWQgdHdsNDAzMF9jb2RlY19tdXRlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgaW50IG11dGUpCit7CisJc3RydWN0IHR3bDQwMzBfcHJpdiAqdHdsNDAzMCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisJdTggcmVnX3ZhbDsKKworCWlmIChtdXRlID09IHR3bDQwMzAtPmNvZGVjX211dGVkKQorCQlyZXR1cm47CisKKwlpZiAobXV0ZSkgeworCQkvKiBCeXBhc3MgdGhlIHJlZ19jYWNoZSBhbmQgbXV0ZSB0aGUgdm9sdW1lcworCQkgKiBIZWFkc2V0IG11dGUgaXMgZG9uZSBpbiBpdCdzIG93biBldmVudCBoYW5kbGVyCisJCSAqIFRoaW5ncyB0byBtdXRlOiAgRWFycGllY2UsIFByZURyaXZML1IsIENhcmtpdEwvUgorCQkgKi8KKwkJcmVnX3ZhbCA9IHR3bDQwMzBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFRXTDQwMzBfUkVHX0VBUl9DVEwpOworCQl0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9BVURJT19WT0lDRSwKKwkJCQkJcmVnX3ZhbCAmICh+VFdMNDAzMF9FQVJfR0FJTiksCisJCQkJCVRXTDQwMzBfUkVHX0VBUl9DVEwpOworCisJCXJlZ192YWwgPSB0d2w0MDMwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBUV0w0MDMwX1JFR19QUkVETF9DVEwpOworCQl0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9BVURJT19WT0lDRSwKKwkJCQkJcmVnX3ZhbCAmICh+VFdMNDAzMF9QUkVETF9HQUlOKSwKKwkJCQkJVFdMNDAzMF9SRUdfUFJFRExfQ1RMKTsKKwkJcmVnX3ZhbCA9IHR3bDQwMzBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFRXTDQwMzBfUkVHX1BSRURSX0NUTCk7CisJCXR3bDQwMzBfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX0FVRElPX1ZPSUNFLAorCQkJCQlyZWdfdmFsICYgKH5UV0w0MDMwX1BSRURSX0dBSU4pLAorCQkJCQlUV0w0MDMwX1JFR19QUkVETF9DVEwpOworCisJCXJlZ192YWwgPSB0d2w0MDMwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBUV0w0MDMwX1JFR19QUkVDS0xfQ1RMKTsKKwkJdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfQVVESU9fVk9JQ0UsCisJCQkJCXJlZ192YWwgJiAoflRXTDQwMzBfUFJFQ0tMX0dBSU4pLAorCQkJCQlUV0w0MDMwX1JFR19QUkVDS0xfQ1RMKTsKKwkJcmVnX3ZhbCA9IHR3bDQwMzBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFRXTDQwMzBfUkVHX1BSRUNLUl9DVEwpOworCQl0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9BVURJT19WT0lDRSwKKwkJCQkJcmVnX3ZhbCAmICh+VFdMNDAzMF9QUkVDS0xfR0FJTiksCisJCQkJCVRXTDQwMzBfUkVHX1BSRUNLUl9DVEwpOworCisJCS8qIERpc2FibGUgUExMICovCisJCXJlZ192YWwgPSB0d2w0MDMwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBUV0w0MDMwX1JFR19BUExMX0NUTCk7CisJCXJlZ192YWwgJj0gflRXTDQwMzBfQVBMTF9FTjsKKwkJdHdsNDAzMF93cml0ZShjb2RlYywgVFdMNDAzMF9SRUdfQVBMTF9DVEwsIHJlZ192YWwpOworCX0gZWxzZSB7CisJCS8qIFJlc3RvcmUgdGhlIHZvbHVtZXMKKwkJICogSGVhZHNldCBtdXRlIGlzIGRvbmUgaW4gaXQncyBvd24gZXZlbnQgaGFuZGxlcgorCQkgKiBUaGluZ3MgdG8gcmVzdG9yZTogIEVhcnBpZWNlLCBQcmVEcml2TC9SLCBDYXJraXRML1IKKwkJICovCisJCXR3bDQwMzBfd3JpdGUoY29kZWMsIFRXTDQwMzBfUkVHX0VBUl9DVEwsCisJCQl0d2w0MDMwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBUV0w0MDMwX1JFR19FQVJfQ1RMKSk7CisKKwkJdHdsNDAzMF93cml0ZShjb2RlYywgVFdMNDAzMF9SRUdfUFJFRExfQ1RMLAorCQkJdHdsNDAzMF9yZWFkX3JlZ19jYWNoZShjb2RlYywgVFdMNDAzMF9SRUdfUFJFRExfQ1RMKSk7CisJCXR3bDQwMzBfd3JpdGUoY29kZWMsIFRXTDQwMzBfUkVHX1BSRURSX0NUTCwKKwkJCXR3bDQwMzBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFRXTDQwMzBfUkVHX1BSRURSX0NUTCkpOworCisJCXR3bDQwMzBfd3JpdGUoY29kZWMsIFRXTDQwMzBfUkVHX1BSRUNLTF9DVEwsCisJCQl0d2w0MDMwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBUV0w0MDMwX1JFR19QUkVDS0xfQ1RMKSk7CisJCXR3bDQwMzBfd3JpdGUoY29kZWMsIFRXTDQwMzBfUkVHX1BSRUNLUl9DVEwsCisJCQl0d2w0MDMwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBUV0w0MDMwX1JFR19QUkVDS1JfQ1RMKSk7CisKKwkJLyogRW5hYmxlIFBMTCAqLworCQlyZWdfdmFsID0gdHdsNDAzMF9yZWFkX3JlZ19jYWNoZShjb2RlYywgVFdMNDAzMF9SRUdfQVBMTF9DVEwpOworCQlyZWdfdmFsIHw9IFRXTDQwMzBfQVBMTF9FTjsKKwkJdHdsNDAzMF93cml0ZShjb2RlYywgVFdMNDAzMF9SRUdfQVBMTF9DVEwsIHJlZ192YWwpOworCX0KKworCXR3bDQwMzAtPmNvZGVjX211dGVkID0gbXV0ZTsKK30KKworc3RhdGljIHZvaWQgdHdsNDAzMF9wb3dlcl91cChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IHR3bDQwMzBfcHJpdiAqdHdsNDAzMCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisJdTggYW5hbWljbCwgcmVnbWlzYzEsIGJ5dGU7CisJaW50IGkgPSAwOworCisJaWYgKHR3bDQwMzAtPmNvZGVjX3Bvd2VyZWQpCisJCXJldHVybjsKKworCS8qIHNldCBDT0RFQ1BEWiB0byB0dXJuIG9uIGNvZGVjICovCisJdHdsNDAzMF9jb2RlY19lbmFibGUoY29kZWMsIDEpOworCisJLyogaW5pdGlhdGUgb2Zmc2V0IGNhbmNlbGxhdGlvbiAqLworCWFuYW1pY2wgPSB0d2w0MDMwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBUV0w0MDMwX1JFR19BTkFNSUNMKTsKKwl0d2w0MDMwX3dyaXRlKGNvZGVjLCBUV0w0MDMwX1JFR19BTkFNSUNMLAorCQlhbmFtaWNsIHwgVFdMNDAzMF9DTkNMX09GRlNFVF9TVEFSVCk7CisKKwkvKiB3YWl0IGZvciBvZmZzZXQgY2FuY2VsbGF0aW9uIHRvIGNvbXBsZXRlICovCisJZG8geworCQkvKiB0aGlzIHRha2VzIGEgbGl0dGxlIHdoaWxlLCBzbyBkb24ndCBzbGFtIGkyYyAqLworCQl1ZGVsYXkoMjAwMCk7CisJCXR3bDQwMzBfaTJjX3JlYWRfdTgoVFdMNDAzMF9NT0RVTEVfQVVESU9fVk9JQ0UsICZieXRlLAorCQkJCSAgICBUV0w0MDMwX1JFR19BTkFNSUNMKTsKKwl9IHdoaWxlICgoaSsrIDwgMTAwKSAmJgorCQkgKChieXRlICYgVFdMNDAzMF9DTkNMX09GRlNFVF9TVEFSVCkgPT0KKwkJICBUV0w0MDMwX0NOQ0xfT0ZGU0VUX1NUQVJUKSk7CisKKwkvKiBNYWtlIHN1cmUgdGhhdCB0aGUgcmVnX2NhY2hlIGhhcyB0aGUgc2FtZSB2YWx1ZSBhcyB0aGUgSFcgKi8KKwl0d2w0MDMwX3dyaXRlX3JlZ19jYWNoZShjb2RlYywgVFdMNDAzMF9SRUdfQU5BTUlDTCwgYnl0ZSk7CisKKwkvKiBhbnRpLXBvcCB3aGVuIGNoYW5naW5nIGFuYWxvZyBnYWluICovCisJcmVnbWlzYzEgPSB0d2w0MDMwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBUV0w0MDMwX1JFR19NSVNDX1NFVF8xKTsKKwl0d2w0MDMwX3dyaXRlKGNvZGVjLCBUV0w0MDMwX1JFR19NSVNDX1NFVF8xLAorCQlyZWdtaXNjMSB8IFRXTDQwMzBfU01PT1RIX0FOQVZPTF9FTik7CisKKwkvKiB0b2dnbGUgQ09ERUNQRFogYXMgcGVyIFRSTSAqLworCXR3bDQwMzBfY29kZWNfZW5hYmxlKGNvZGVjLCAwKTsKKwl0d2w0MDMwX2NvZGVjX2VuYWJsZShjb2RlYywgMSk7Cit9CisKKy8qCisgKiBVbmNvbmRpdGlvbmFsIHBvd2VyIGRvd24KKyAqLworc3RhdGljIHZvaWQgdHdsNDAzMF9wb3dlcl9kb3duKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwkvKiBwb3dlciBkb3duICovCisJdHdsNDAzMF9jb2RlY19lbmFibGUoY29kZWMsIDApOworfQorCiAvKiBFYXJwaWVjZSAqLwogc3RhdGljIGNvbnN0IGNoYXIgKnR3bDQwMzBfZWFycGllY2VfdGV4dHNbXSA9CiAJCXsiT2ZmIiwgIkRBQ0wxIiwgIkRBQ0wyIiwgIkRBQ1IxIn07CkBAIC0zNjYsNiArNDg4LDQxIEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgdHdsNDAzMF9kYXBtX21pY3BhdGh0eDJfY29udHJvbCA9CiBTT0NfREFQTV9FTlVNKCJSb3V0ZSIsIHR3bDQwMzBfbWljcGF0aHR4Ml9lbnVtKTsKIAorLyogQW5hbG9nIGJ5cGFzcyBmb3IgQXVkaW9SMSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHR3bDQwMzBfZGFwbV9hYnlwYXNzcjFfY29udHJvbCA9CisJU09DX0RBUE1fU0lOR0xFKCJTd2l0Y2giLCBUV0w0MDMwX1JFR19BUlhSMV9BUEdBX0NUTCwgMiwgMSwgMCk7CisKKy8qIEFuYWxvZyBieXBhc3MgZm9yIEF1ZGlvTDEgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB0d2w0MDMwX2RhcG1fYWJ5cGFzc2wxX2NvbnRyb2wgPQorCVNPQ19EQVBNX1NJTkdMRSgiU3dpdGNoIiwgVFdMNDAzMF9SRUdfQVJYTDFfQVBHQV9DVEwsIDIsIDEsIDApOworCisvKiBBbmFsb2cgYnlwYXNzIGZvciBBdWRpb1IyICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgdHdsNDAzMF9kYXBtX2FieXBhc3NyMl9jb250cm9sID0KKwlTT0NfREFQTV9TSU5HTEUoIlN3aXRjaCIsIFRXTDQwMzBfUkVHX0FSWFIyX0FQR0FfQ1RMLCAyLCAxLCAwKTsKKworLyogQW5hbG9nIGJ5cGFzcyBmb3IgQXVkaW9MMiAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHR3bDQwMzBfZGFwbV9hYnlwYXNzbDJfY29udHJvbCA9CisJU09DX0RBUE1fU0lOR0xFKCJTd2l0Y2giLCBUV0w0MDMwX1JFR19BUlhMMl9BUEdBX0NUTCwgMiwgMSwgMCk7CisKKy8qIERpZ2l0YWwgYnlwYXNzIGdhaW4sIDAgbXV0ZXMgdGhlIGJ5cGFzcyAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCB0d2w0MDMwX2RhcG1fZGJ5cGFzc190bHZbXSA9IHsKKwlUTFZfREJfUkFOR0VfSEVBRCgyKSwKKwkwLCAzLCBUTFZfREJfU0NBTEVfSVRFTSgtMjQwMCwgMCwgMSksCisJNCwgNywgVExWX0RCX1NDQUxFX0lURU0oLTE4MDAsIDYwMCwgMCksCit9OworCisvKiBEaWdpdGFsIGJ5cGFzcyBsZWZ0IChUWDFMIC0+IFJYMkwpICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgdHdsNDAzMF9kYXBtX2RieXBhc3NsX2NvbnRyb2wgPQorCVNPQ19EQVBNX1NJTkdMRV9UTFYoIlZvbHVtZSIsCisJCQlUV0w0MDMwX1JFR19BVFgyQVJYUEdBLCAzLCA3LCAwLAorCQkJdHdsNDAzMF9kYXBtX2RieXBhc3NfdGx2KTsKKworLyogRGlnaXRhbCBieXBhc3MgcmlnaHQgKFRYMVIgLT4gUlgyUikgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB0d2w0MDMwX2RhcG1fZGJ5cGFzc3JfY29udHJvbCA9CisJU09DX0RBUE1fU0lOR0xFX1RMVigiVm9sdW1lIiwKKwkJCVRXTDQwMzBfUkVHX0FUWDJBUlhQR0EsIDAsIDcsIDAsCisJCQl0d2w0MDMwX2RhcG1fZGJ5cGFzc190bHYpOworCiBzdGF0aWMgaW50IG1pY3BhdGhfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCiAJc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKIHsKQEAgLTQyMCw2ICs1NzcsNzkgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBoZWFkc2V0bF9ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKKwkJc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKK3sKKwl1bnNpZ25lZCBjaGFyIGhzX2dhaW4sIGhzX3BvcDsKKworCS8qIFNhdmUgdGhlIGN1cnJlbnQgdm9sdW1lICovCisJaHNfZ2FpbiA9IHR3bDQwMzBfcmVhZF9yZWdfY2FjaGUody0+Y29kZWMsIFRXTDQwMzBfUkVHX0hTX0dBSU5fU0VUKTsKKwloc19wb3AgPSB0d2w0MDMwX3JlYWRfcmVnX2NhY2hlKHctPmNvZGVjLCBUV0w0MDMwX1JFR19IU19QT1BOX1NFVCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBTTkRfU09DX0RBUE1fUE9TVF9QTVU6CisJCS8qIERvIHRoZSBhbnRpLXBvcC9iaWFzIHJhbXAgZW5hYmxlIGFjY29yZGluZyB0byB0aGUgVFJNICovCisJCWhzX3BvcCB8PSBUV0w0MDMwX1ZNSURfRU47CisJCXR3bDQwMzBfd3JpdGUody0+Y29kZWMsIFRXTDQwMzBfUkVHX0hTX1BPUE5fU0VULCBoc19wb3ApOworCQkvKiBJcyB0aGlzIG5lZWRlZD8gQ2FuIHdlIGp1c3QgdXNlIHdoYXRldmVyIGdhaW4gaGVyZT8gKi8KKwkJdHdsNDAzMF93cml0ZSh3LT5jb2RlYywgVFdMNDAzMF9SRUdfSFNfR0FJTl9TRVQsCisJCQkJKGhzX2dhaW4gJiAofjB4MGYpKSB8IDB4MGEpOworCQloc19wb3AgfD0gVFdMNDAzMF9SQU1QX0VOOworCQl0d2w0MDMwX3dyaXRlKHctPmNvZGVjLCBUV0w0MDMwX1JFR19IU19QT1BOX1NFVCwgaHNfcG9wKTsKKworCQkvKiBSZXN0b3JlIHRoZSBvcmlnaW5hbCB2b2x1bWUgKi8KKwkJdHdsNDAzMF93cml0ZSh3LT5jb2RlYywgVFdMNDAzMF9SRUdfSFNfR0FJTl9TRVQsIGhzX2dhaW4pOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFQTV9QT1NUX1BNRDoKKwkJLyogRG8gdGhlIGFudGktcG9wL2JpYXMgcmFtcCBkaXNhYmxlIGFjY29yZGluZyB0byB0aGUgVFJNICovCisJCWhzX3BvcCAmPSB+VFdMNDAzMF9SQU1QX0VOOworCQl0d2w0MDMwX3dyaXRlKHctPmNvZGVjLCBUV0w0MDMwX1JFR19IU19QT1BOX1NFVCwgaHNfcG9wKTsKKwkJLyogQnlwYXNzIHRoZSByZWdfY2FjaGUgdG8gbXV0ZSB0aGUgaGVhZHNldCAqLworCQl0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9BVURJT19WT0lDRSwKKwkJCQkJaHNfZ2FpbiAmICh+MHgwZiksCisJCQkJCVRXTDQwMzBfUkVHX0hTX0dBSU5fU0VUKTsKKwkJaHNfcG9wICY9IH5UV0w0MDMwX1ZNSURfRU47CisJCXR3bDQwMzBfd3JpdGUody0+Y29kZWMsIFRXTDQwMzBfUkVHX0hTX1BPUE5fU0VULCBoc19wb3ApOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYnlwYXNzX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAorCQlzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQoreworCXN0cnVjdCBzb2NfbWl4ZXJfY29udHJvbCAqbSA9CisJCShzdHJ1Y3Qgc29jX21peGVyX2NvbnRyb2wgKil3LT5rY29udHJvbHMtPnByaXZhdGVfdmFsdWU7CisJc3RydWN0IHR3bDQwMzBfcHJpdiAqdHdsNDAzMCA9IHctPmNvZGVjLT5wcml2YXRlX2RhdGE7CisJdW5zaWduZWQgY2hhciByZWc7CisKKwlyZWcgPSB0d2w0MDMwX3JlYWRfcmVnX2NhY2hlKHctPmNvZGVjLCBtLT5yZWcpOworCisJaWYgKG0tPnJlZyA8PSBUV0w0MDMwX1JFR19BUlhSMl9BUEdBX0NUTCkgeworCQkvKiBBbmFsb2cgYnlwYXNzICovCisJCWlmIChyZWcgJiAoMSA8PCBtLT5zaGlmdCkpCisJCQl0d2w0MDMwLT5ieXBhc3Nfc3RhdGUgfD0KKwkJCQkoMSA8PCAobS0+cmVnIC0gVFdMNDAzMF9SRUdfQVJYTDFfQVBHQV9DVEwpKTsKKwkJZWxzZQorCQkJdHdsNDAzMC0+YnlwYXNzX3N0YXRlICY9CisJCQkJfigxIDw8IChtLT5yZWcgLSBUV0w0MDMwX1JFR19BUlhMMV9BUEdBX0NUTCkpOworCX0gZWxzZSB7CisJCS8qIERpZ2l0YWwgYnlwYXNzICovCisJCWlmIChyZWcgJiAoMHg3IDw8IG0tPnNoaWZ0KSkKKwkJCXR3bDQwMzAtPmJ5cGFzc19zdGF0ZSB8PSAoMSA8PCAobS0+c2hpZnQgPyA1IDogNCkpOworCQllbHNlCisJCQl0d2w0MDMwLT5ieXBhc3Nfc3RhdGUgJj0gfigxIDw8IChtLT5zaGlmdCA/IDUgOiA0KSk7CisJfQorCisJaWYgKHctPmNvZGVjLT5iaWFzX2xldmVsID09IFNORF9TT0NfQklBU19TVEFOREJZKSB7CisJCWlmICh0d2w0MDMwLT5ieXBhc3Nfc3RhdGUpCisJCQl0d2w0MDMwX2NvZGVjX211dGUody0+Y29kZWMsIDApOworCQllbHNlCisJCQl0d2w0MDMwX2NvZGVjX211dGUody0+Y29kZWMsIDEpOworCX0KKwlyZXR1cm4gMDsKK30KKwogLyoKICAqIFNvbWUgb2YgdGhlIGdhaW4gY29udHJvbHMgaW4gVFdMIChtb3N0bHkgdGhvc2Ugd2hpY2ggYXJlIGFzc29jaWF0ZWQgd2l0aAogICogdGhlIG91dHB1dHMpIGFyZSBpbXBsZW1lbnRlZCBpbiBhbiBpbnRlcmVzdGluZyB3YXk6CkBAIC02MTQsNiArODQ0LDE3IEBACiAgKi8KIHN0YXRpYyBERUNMQVJFX1RMVl9EQl9TQ0FMRShpbnB1dF9nYWluX3RsdiwgMCwgNjAwLCAwKTsKIAorc3RhdGljIGNvbnN0IGNoYXIgKnR3bDQwMzBfcmFtcGRlbGF5X3RleHRzW10gPSB7CisJIjI3LzIwLzE0IG1zIiwgIjU1LzQwLzI3IG1zIiwgIjEwOS84MS81NSBtcyIsICIyMTgvMTYxLzEwOSBtcyIsCisJIjQzNy8zMjMvMjE4IG1zIiwgIjg3NC82NDUvNDM3IG1zIiwgIjE3NDgvMTI5MS84NzQgbXMiLAorCSIzNDk1LzI1ODEvMTc0OCBtcyIKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gdHdsNDAzMF9yYW1wZGVsYXlfZW51bSA9CisJU09DX0VOVU1fU0lOR0xFKFRXTDQwMzBfUkVHX0hTX1BPUE5fU0VULCAyLAorCQkJQVJSQVlfU0laRSh0d2w0MDMwX3JhbXBkZWxheV90ZXh0cyksCisJCQl0d2w0MDMwX3JhbXBkZWxheV90ZXh0cyk7CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB0d2w0MDMwX3NuZF9jb250cm9sc1tdID0gewogCS8qIENvbW1vbiBwbGF5YmFjayBnYWluIGNvbnRyb2xzICovCiAJU09DX0RPVUJMRV9SX1RMVigiREFDMSBEaWdpdGFsIEZpbmUgUGxheWJhY2sgVm9sdW1lIiwKQEAgLTY2OCwyNCArOTA5LDEwIEBACiAKIAlTT0NfRE9VQkxFX1RMVigiQW5hbG9nIENhcHR1cmUgVm9sdW1lIiwgVFdMNDAzMF9SRUdfQU5BTUlDX0dBSU4sCiAJCTAsIDMsIDUsIDAsIGlucHV0X2dhaW5fdGx2KSwKKworCVNPQ19FTlVNKCJIUyByYW1wIGRlbGF5IiwgdHdsNDAzMF9yYW1wZGVsYXlfZW51bSksCiB9OwogCi0vKiBhZGQgbm9uIGRhcG0gY29udHJvbHMgKi8KLXN0YXRpYyBpbnQgdHdsNDAzMF9hZGRfY29udHJvbHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQotewotCWludCBlcnIsIGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0d2w0MDMwX3NuZF9jb250cm9scyk7IGkrKykgewotCQllcnIgPSBzbmRfY3RsX2FkZChjb2RlYy0+Y2FyZCwKLQkJCQkgIHNuZF9zb2NfY25ldygmdHdsNDAzMF9zbmRfY29udHJvbHNbaV0sCi0JCQkJCQljb2RlYywgTlVMTCkpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCB0d2w0MDMwX2RhcG1fd2lkZ2V0c1tdID0gewogCS8qIExlZnQgY2hhbm5lbCBpbnB1dHMgKi8KIAlTTkRfU09DX0RBUE1fSU5QVVQoIk1BSU5NSUMiKSwKQEAgLTcxNCwxMyArOTQxLDEzIEBACiAKIAkvKiBEQUNzICovCiAJU05EX1NPQ19EQVBNX0RBQygiREFDIFJpZ2h0MSIsICJSaWdodCBGcm9udCBQbGF5YmFjayIsCi0JCQlUV0w0MDMwX1JFR19BVkRBQ19DVEwsIDAsIDApLAorCQkJU05EX1NPQ19OT1BNLCAwLCAwKSwKIAlTTkRfU09DX0RBUE1fREFDKCJEQUMgTGVmdDEiLCAiTGVmdCBGcm9udCBQbGF5YmFjayIsCi0JCQlUV0w0MDMwX1JFR19BVkRBQ19DVEwsIDEsIDApLAorCQkJU05EX1NPQ19OT1BNLCAwLCAwKSwKIAlTTkRfU09DX0RBUE1fREFDKCJEQUMgUmlnaHQyIiwgIlJpZ2h0IFJlYXIgUGxheWJhY2siLAotCQkJVFdMNDAzMF9SRUdfQVZEQUNfQ1RMLCAyLCAwKSwKKwkJCVNORF9TT0NfTk9QTSwgMCwgMCksCiAJU05EX1NPQ19EQVBNX0RBQygiREFDIExlZnQyIiwgIkxlZnQgUmVhciBQbGF5YmFjayIsCi0JCQlUV0w0MDMwX1JFR19BVkRBQ19DVEwsIDMsIDApLAorCQkJU05EX1NPQ19OT1BNLCAwLCAwKSwKIAogCS8qIEFuYWxvZyBQR0FzICovCiAJU05EX1NPQ19EQVBNX1BHQSgiQVJYUjFfQVBHQSIsIFRXTDQwMzBfUkVHX0FSWFIxX0FQR0FfQ1RMLApAQCAtNzMyLDYgKzk1OSwzNyBAQAogCVNORF9TT0NfREFQTV9QR0EoIkFSWEwyX0FQR0EiLCBUV0w0MDMwX1JFR19BUlhMMl9BUEdBX0NUTCwKIAkJCTAsIDAsIE5VTEwsIDApLAogCisJLyogQW5hbG9nIGJ5cGFzc2VzICovCisJU05EX1NPQ19EQVBNX1NXSVRDSF9FKCJSaWdodDEgQW5hbG9nIExvb3BiYWNrIiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkJJnR3bDQwMzBfZGFwbV9hYnlwYXNzcjFfY29udHJvbCwgYnlwYXNzX2V2ZW50LAorCQkJU05EX1NPQ19EQVBNX1BPU1RfUkVHKSwKKwlTTkRfU09DX0RBUE1fU1dJVENIX0UoIkxlZnQxIEFuYWxvZyBMb29wYmFjayIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJCSZ0d2w0MDMwX2RhcG1fYWJ5cGFzc2wxX2NvbnRyb2wsCisJCQlieXBhc3NfZXZlbnQsIFNORF9TT0NfREFQTV9QT1NUX1JFRyksCisJU05EX1NPQ19EQVBNX1NXSVRDSF9FKCJSaWdodDIgQW5hbG9nIExvb3BiYWNrIiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkJJnR3bDQwMzBfZGFwbV9hYnlwYXNzcjJfY29udHJvbCwKKwkJCWJ5cGFzc19ldmVudCwgU05EX1NPQ19EQVBNX1BPU1RfUkVHKSwKKwlTTkRfU09DX0RBUE1fU1dJVENIX0UoIkxlZnQyIEFuYWxvZyBMb29wYmFjayIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJCSZ0d2w0MDMwX2RhcG1fYWJ5cGFzc2wyX2NvbnRyb2wsCisJCQlieXBhc3NfZXZlbnQsIFNORF9TT0NfREFQTV9QT1NUX1JFRyksCisKKwkvKiBEaWdpdGFsIGJ5cGFzc2VzICovCisJU05EX1NPQ19EQVBNX1NXSVRDSF9FKCJMZWZ0IERpZ2l0YWwgTG9vcGJhY2siLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCQkmdHdsNDAzMF9kYXBtX2RieXBhc3NsX2NvbnRyb2wsIGJ5cGFzc19ldmVudCwKKwkJCVNORF9TT0NfREFQTV9QT1NUX1JFRyksCisJU05EX1NPQ19EQVBNX1NXSVRDSF9FKCJSaWdodCBEaWdpdGFsIExvb3BiYWNrIiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkJJnR3bDQwMzBfZGFwbV9kYnlwYXNzcl9jb250cm9sLCBieXBhc3NfZXZlbnQsCisJCQlTTkRfU09DX0RBUE1fUE9TVF9SRUcpLAorCisJU05EX1NPQ19EQVBNX01JWEVSKCJBbmFsb2cgUjEgUGxheWJhY2sgTWl4ZXIiLCBUV0w0MDMwX1JFR19BVkRBQ19DVEwsCisJCQkwLCAwLCBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fTUlYRVIoIkFuYWxvZyBMMSBQbGF5YmFjayBNaXhlciIsIFRXTDQwMzBfUkVHX0FWREFDX0NUTCwKKwkJCTEsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9NSVhFUigiQW5hbG9nIFIyIFBsYXliYWNrIE1peGVyIiwgVFdMNDAzMF9SRUdfQVZEQUNfQ1RMLAorCQkJMiwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX01JWEVSKCJBbmFsb2cgTDIgUGxheWJhY2sgTWl4ZXIiLCBUV0w0MDMwX1JFR19BVkRBQ19DVEwsCisJCQkzLCAwLCBOVUxMLCAwKSwKKwogCS8qIE91dHB1dCBNVVggY29udHJvbHMgKi8KIAkvKiBFYXJwaWVjZSAqLwogCVNORF9TT0NfREFQTV9WQUxVRV9NVVgoIkVhcnBpZWNlIE11eCIsIFNORF9TT0NfTk9QTSwgMCwgMCwKQEAgLTc0Miw4ICsxMDAwLDkgQEAKIAlTTkRfU09DX0RBUE1fVkFMVUVfTVVYKCJQcmVkcml2ZVIgTXV4IiwgU05EX1NPQ19OT1BNLCAwLCAwLAogCQkmdHdsNDAzMF9kYXBtX3ByZWRyaXZlcl9jb250cm9sKSwKIAkvKiBIZWFkc2V0TC9SICovCi0JU05EX1NPQ19EQVBNX01VWCgiSGVhZHNldEwgTXV4IiwgU05EX1NPQ19OT1BNLCAwLCAwLAotCQkmdHdsNDAzMF9kYXBtX2hzb2xfY29udHJvbCksCisJU05EX1NPQ19EQVBNX01VWF9FKCJIZWFkc2V0TCBNdXgiLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCSZ0d2w0MDMwX2RhcG1faHNvbF9jb250cm9sLCBoZWFkc2V0bF9ldmVudCwKKwkJU05EX1NPQ19EQVBNX1BPU1RfUE1VfFNORF9TT0NfREFQTV9QT1NUX1BNRCksCiAJU05EX1NPQ19EQVBNX01VWCgiSGVhZHNldFIgTXV4IiwgU05EX1NPQ19OT1BNLCAwLCAwLAogCQkmdHdsNDAzMF9kYXBtX2hzb3JfY29udHJvbCksCiAJLyogQ2Fya2l0TC9SICovCkBAIC03ODIsMTYgKzEwNDEsMTYgQEAKIAkJU05EX1NPQ19EQVBNX1BPU1RfUE1VfFNORF9TT0NfREFQTV9QT1NUX1BNRHwKIAkJU05EX1NPQ19EQVBNX1BPU1RfUkVHKSwKIAotCS8qIEFuYWxvZyBpbnB1dCBtdXhlcyB3aXRoIHBvd2VyIHN3aXRjaCBmb3IgdGhlIHBoeXNpY2FsIEFEQ0wvUiAqLworCS8qIEFuYWxvZyBpbnB1dCBtdXhlcyB3aXRoIHN3aXRjaCBmb3IgdGhlIGNhcHR1cmUgYW1wbGlmaWVycyAqLwogCVNORF9TT0NfREFQTV9WQUxVRV9NVVgoIkFuYWxvZyBMZWZ0IENhcHR1cmUgUm91dGUiLAotCQlUV0w0MDMwX1JFR19BVkFEQ19DVEwsIDMsIDAsICZ0d2w0MDMwX2RhcG1fYW5hbG9nbG1pY19jb250cm9sKSwKKwkJVFdMNDAzMF9SRUdfQU5BTUlDTCwgNCwgMCwgJnR3bDQwMzBfZGFwbV9hbmFsb2dsbWljX2NvbnRyb2wpLAogCVNORF9TT0NfREFQTV9WQUxVRV9NVVgoIkFuYWxvZyBSaWdodCBDYXB0dXJlIFJvdXRlIiwKLQkJVFdMNDAzMF9SRUdfQVZBRENfQ1RMLCAxLCAwLCAmdHdsNDAzMF9kYXBtX2FuYWxvZ3JtaWNfY29udHJvbCksCisJCVRXTDQwMzBfUkVHX0FOQU1JQ1IsIDQsIDAsICZ0d2w0MDMwX2RhcG1fYW5hbG9ncm1pY19jb250cm9sKSwKIAotCVNORF9TT0NfREFQTV9QR0EoIkFuYWxvZyBMZWZ0IEFtcGxpZmllciIsCi0JCVRXTDQwMzBfUkVHX0FOQU1JQ0wsIDQsIDAsIE5VTEwsIDApLAotCVNORF9TT0NfREFQTV9QR0EoIkFuYWxvZyBSaWdodCBBbXBsaWZpZXIiLAotCQlUV0w0MDMwX1JFR19BTkFNSUNSLCA0LCAwLCBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fUEdBKCJBREMgUGh5c2ljYWwgTGVmdCIsCisJCVRXTDQwMzBfUkVHX0FWQURDX0NUTCwgMywgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1BHQSgiQURDIFBoeXNpY2FsIFJpZ2h0IiwKKwkJVFdMNDAzMF9SRUdfQVZBRENfQ1RMLCAxLCAwLCBOVUxMLCAwKSwKIAogCVNORF9TT0NfREFQTV9QR0EoIkRpZ2ltaWMwIEVuYWJsZSIsCiAJCVRXTDQwMzBfUkVHX0FEQ01JQ1NFTCwgMSwgMCwgTlVMTCwgMCksCkBAIC04MDEsMTMgKzEwNjAsMTkgQEAKIAlTTkRfU09DX0RBUE1fTUlDQklBUygiTWljIEJpYXMgMSIsIFRXTDQwMzBfUkVHX01JQ0JJQVNfQ1RMLCAwLCAwKSwKIAlTTkRfU09DX0RBUE1fTUlDQklBUygiTWljIEJpYXMgMiIsIFRXTDQwMzBfUkVHX01JQ0JJQVNfQ1RMLCAxLCAwKSwKIAlTTkRfU09DX0RBUE1fTUlDQklBUygiSGVhZHNldCBNaWMgQmlhcyIsIFRXTDQwMzBfUkVHX01JQ0JJQVNfQ1RMLCAyLCAwKSwKKwogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgaW50ZXJjb25bXSA9IHsKLQl7IkFSWEwxX0FQR0EiLCBOVUxMLCAiREFDIExlZnQxIn0sCi0JeyJBUlhSMV9BUEdBIiwgTlVMTCwgIkRBQyBSaWdodDEifSwKLQl7IkFSWEwyX0FQR0EiLCBOVUxMLCAiREFDIExlZnQyIn0sCi0JeyJBUlhSMl9BUEdBIiwgTlVMTCwgIkRBQyBSaWdodDIifSwKKwl7IkFuYWxvZyBMMSBQbGF5YmFjayBNaXhlciIsIE5VTEwsICJEQUMgTGVmdDEifSwKKwl7IkFuYWxvZyBSMSBQbGF5YmFjayBNaXhlciIsIE5VTEwsICJEQUMgUmlnaHQxIn0sCisJeyJBbmFsb2cgTDIgUGxheWJhY2sgTWl4ZXIiLCBOVUxMLCAiREFDIExlZnQyIn0sCisJeyJBbmFsb2cgUjIgUGxheWJhY2sgTWl4ZXIiLCBOVUxMLCAiREFDIFJpZ2h0MiJ9LAorCisJeyJBUlhMMV9BUEdBIiwgTlVMTCwgIkFuYWxvZyBMMSBQbGF5YmFjayBNaXhlciJ9LAorCXsiQVJYUjFfQVBHQSIsIE5VTEwsICJBbmFsb2cgUjEgUGxheWJhY2sgTWl4ZXIifSwKKwl7IkFSWEwyX0FQR0EiLCBOVUxMLCAiQW5hbG9nIEwyIFBsYXliYWNrIE1peGVyIn0sCisJeyJBUlhSMl9BUEdBIiwgTlVMTCwgIkFuYWxvZyBSMiBQbGF5YmFjayBNaXhlciJ9LAogCiAJLyogSW50ZXJuYWwgcGxheWJhY2sgcm91dGluZ3MgKi8KIAkvKiBFYXJwaWVjZSAqLwpAQCAtODY1LDIzICsxMTMwLDIzIEBACiAJeyJBbmFsb2cgUmlnaHQgQ2FwdHVyZSBSb3V0ZSIsICJTdWIgbWljIiwgIlNVQk1JQyJ9LAogCXsiQW5hbG9nIFJpZ2h0IENhcHR1cmUgUm91dGUiLCAiQVVYUiIsICJBVVhSIn0sCiAKLQl7IkFuYWxvZyBMZWZ0IEFtcGxpZmllciIsIE5VTEwsICJBbmFsb2cgTGVmdCBDYXB0dXJlIFJvdXRlIn0sCi0JeyJBbmFsb2cgUmlnaHQgQW1wbGlmaWVyIiwgTlVMTCwgIkFuYWxvZyBSaWdodCBDYXB0dXJlIFJvdXRlIn0sCisJeyJBREMgUGh5c2ljYWwgTGVmdCIsIE5VTEwsICJBbmFsb2cgTGVmdCBDYXB0dXJlIFJvdXRlIn0sCisJeyJBREMgUGh5c2ljYWwgUmlnaHQiLCBOVUxMLCAiQW5hbG9nIFJpZ2h0IENhcHR1cmUgUm91dGUifSwKIAogCXsiRGlnaW1pYzAgRW5hYmxlIiwgTlVMTCwgIkRJR0lNSUMwIn0sCiAJeyJEaWdpbWljMSBFbmFibGUiLCBOVUxMLCAiRElHSU1JQzEifSwKIAogCS8qIFRYMSBMZWZ0IGNhcHR1cmUgcGF0aCAqLwotCXsiVFgxIENhcHR1cmUgUm91dGUiLCAiQW5hbG9nIiwgIkFuYWxvZyBMZWZ0IEFtcGxpZmllciJ9LAorCXsiVFgxIENhcHR1cmUgUm91dGUiLCAiQW5hbG9nIiwgIkFEQyBQaHlzaWNhbCBMZWZ0In0sCiAJeyJUWDEgQ2FwdHVyZSBSb3V0ZSIsICJEaWdpbWljMCIsICJEaWdpbWljMCBFbmFibGUifSwKIAkvKiBUWDEgUmlnaHQgY2FwdHVyZSBwYXRoICovCi0JeyJUWDEgQ2FwdHVyZSBSb3V0ZSIsICJBbmFsb2ciLCAiQW5hbG9nIFJpZ2h0IEFtcGxpZmllciJ9LAorCXsiVFgxIENhcHR1cmUgUm91dGUiLCAiQW5hbG9nIiwgIkFEQyBQaHlzaWNhbCBSaWdodCJ9LAogCXsiVFgxIENhcHR1cmUgUm91dGUiLCAiRGlnaW1pYzAiLCAiRGlnaW1pYzAgRW5hYmxlIn0sCiAJLyogVFgyIExlZnQgY2FwdHVyZSBwYXRoICovCi0JeyJUWDIgQ2FwdHVyZSBSb3V0ZSIsICJBbmFsb2ciLCAiQW5hbG9nIExlZnQgQW1wbGlmaWVyIn0sCisJeyJUWDIgQ2FwdHVyZSBSb3V0ZSIsICJBbmFsb2ciLCAiQURDIFBoeXNpY2FsIExlZnQifSwKIAl7IlRYMiBDYXB0dXJlIFJvdXRlIiwgIkRpZ2ltaWMxIiwgIkRpZ2ltaWMxIEVuYWJsZSJ9LAogCS8qIFRYMiBSaWdodCBjYXB0dXJlIHBhdGggKi8KLQl7IlRYMiBDYXB0dXJlIFJvdXRlIiwgIkFuYWxvZyIsICJBbmFsb2cgUmlnaHQgQW1wbGlmaWVyIn0sCisJeyJUWDIgQ2FwdHVyZSBSb3V0ZSIsICJBbmFsb2ciLCAiQURDIFBoeXNpY2FsIFJpZ2h0In0sCiAJeyJUWDIgQ2FwdHVyZSBSb3V0ZSIsICJEaWdpbWljMSIsICJEaWdpbWljMSBFbmFibGUifSwKIAogCXsiQURDIFZpcnR1YWwgTGVmdDEiLCBOVUxMLCAiVFgxIENhcHR1cmUgUm91dGUifSwKQEAgLTg4OSw2ICsxMTU0LDI0IEBACiAJeyJBREMgVmlydHVhbCBMZWZ0MiIsIE5VTEwsICJUWDIgQ2FwdHVyZSBSb3V0ZSJ9LAogCXsiQURDIFZpcnR1YWwgUmlnaHQyIiwgTlVMTCwgIlRYMiBDYXB0dXJlIFJvdXRlIn0sCiAKKwkvKiBBbmFsb2cgYnlwYXNzIHJvdXRlcyAqLworCXsiUmlnaHQxIEFuYWxvZyBMb29wYmFjayIsICJTd2l0Y2giLCAiQW5hbG9nIFJpZ2h0IENhcHR1cmUgUm91dGUifSwKKwl7IkxlZnQxIEFuYWxvZyBMb29wYmFjayIsICJTd2l0Y2giLCAiQW5hbG9nIExlZnQgQ2FwdHVyZSBSb3V0ZSJ9LAorCXsiUmlnaHQyIEFuYWxvZyBMb29wYmFjayIsICJTd2l0Y2giLCAiQW5hbG9nIFJpZ2h0IENhcHR1cmUgUm91dGUifSwKKwl7IkxlZnQyIEFuYWxvZyBMb29wYmFjayIsICJTd2l0Y2giLCAiQW5hbG9nIExlZnQgQ2FwdHVyZSBSb3V0ZSJ9LAorCisJeyJBbmFsb2cgUjEgUGxheWJhY2sgTWl4ZXIiLCBOVUxMLCAiUmlnaHQxIEFuYWxvZyBMb29wYmFjayJ9LAorCXsiQW5hbG9nIEwxIFBsYXliYWNrIE1peGVyIiwgTlVMTCwgIkxlZnQxIEFuYWxvZyBMb29wYmFjayJ9LAorCXsiQW5hbG9nIFIyIFBsYXliYWNrIE1peGVyIiwgTlVMTCwgIlJpZ2h0MiBBbmFsb2cgTG9vcGJhY2sifSwKKwl7IkFuYWxvZyBMMiBQbGF5YmFjayBNaXhlciIsIE5VTEwsICJMZWZ0MiBBbmFsb2cgTG9vcGJhY2sifSwKKworCS8qIERpZ2l0YWwgYnlwYXNzIHJvdXRlcyAqLworCXsiUmlnaHQgRGlnaXRhbCBMb29wYmFjayIsICJWb2x1bWUiLCAiVFgxIENhcHR1cmUgUm91dGUifSwKKwl7IkxlZnQgRGlnaXRhbCBMb29wYmFjayIsICJWb2x1bWUiLCAiVFgxIENhcHR1cmUgUm91dGUifSwKKworCXsiQW5hbG9nIFIyIFBsYXliYWNrIE1peGVyIiwgTlVMTCwgIlJpZ2h0IERpZ2l0YWwgTG9vcGJhY2sifSwKKwl7IkFuYWxvZyBMMiBQbGF5YmFjayBNaXhlciIsIE5VTEwsICJMZWZ0IERpZ2l0YWwgTG9vcGJhY2sifSwKKwogfTsKIAogc3RhdGljIGludCB0d2w0MDMwX2FkZF93aWRnZXRzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKQEAgLTkwMiw4MiArMTE4NSwyOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCB0d2w0MDMwX3Bvd2VyX3VwKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKLXsKLQl1OCBhbmFtaWNsLCByZWdtaXNjMSwgYnl0ZSwgcG9wbjsKLQlpbnQgaSA9IDA7Ci0KLQkvKiBzZXQgQ09ERUNQRFogdG8gdHVybiBvbiBjb2RlYyAqLwotCXR3bDQwMzBfc2V0X2NvZGVjcGR6KGNvZGVjKTsKLQotCS8qIGluaXRpYXRlIG9mZnNldCBjYW5jZWxsYXRpb24gKi8KLQlhbmFtaWNsID0gdHdsNDAzMF9yZWFkX3JlZ19jYWNoZShjb2RlYywgVFdMNDAzMF9SRUdfQU5BTUlDTCk7Ci0JdHdsNDAzMF93cml0ZShjb2RlYywgVFdMNDAzMF9SRUdfQU5BTUlDTCwKLQkJYW5hbWljbCB8IFRXTDQwMzBfQ05DTF9PRkZTRVRfU1RBUlQpOwotCi0KLQkvKiB3YWl0IGZvciBvZmZzZXQgY2FuY2VsbGF0aW9uIHRvIGNvbXBsZXRlICovCi0JZG8gewotCQkvKiB0aGlzIHRha2VzIGEgbGl0dGxlIHdoaWxlLCBzbyBkb24ndCBzbGFtIGkyYyAqLwotCQl1ZGVsYXkoMjAwMCk7Ci0JCXR3bDQwMzBfaTJjX3JlYWRfdTgoVFdMNDAzMF9NT0RVTEVfQVVESU9fVk9JQ0UsICZieXRlLAotCQkJCSAgICBUV0w0MDMwX1JFR19BTkFNSUNMKTsKLQl9IHdoaWxlICgoaSsrIDwgMTAwKSAmJgotCQkgKChieXRlICYgVFdMNDAzMF9DTkNMX09GRlNFVF9TVEFSVCkgPT0KLQkJICBUV0w0MDMwX0NOQ0xfT0ZGU0VUX1NUQVJUKSk7Ci0KLQkvKiBhbnRpLXBvcCB3aGVuIGNoYW5naW5nIGFuYWxvZyBnYWluICovCi0JcmVnbWlzYzEgPSB0d2w0MDMwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBUV0w0MDMwX1JFR19NSVNDX1NFVF8xKTsKLQl0d2w0MDMwX3dyaXRlKGNvZGVjLCBUV0w0MDMwX1JFR19NSVNDX1NFVF8xLAotCQlyZWdtaXNjMSB8IFRXTDQwMzBfU01PT1RIX0FOQVZPTF9FTik7Ci0KLQkvKiB0b2dnbGUgQ09ERUNQRFogYXMgcGVyIFRSTSAqLwotCXR3bDQwMzBfY2xlYXJfY29kZWNwZHooY29kZWMpOwotCXR3bDQwMzBfc2V0X2NvZGVjcGR6KGNvZGVjKTsKLQotCS8qIHByb2dyYW0gYW50aS1wb3Agd2l0aCBiaWFzIHJhbXAgZGVsYXkgKi8KLQlwb3BuID0gdHdsNDAzMF9yZWFkX3JlZ19jYWNoZShjb2RlYywgVFdMNDAzMF9SRUdfSFNfUE9QTl9TRVQpOwotCXBvcG4gJj0gVFdMNDAzMF9SQU1QX0RFTEFZOwotCXBvcG4gfD0JVFdMNDAzMF9SQU1QX0RFTEFZXzY0NU1TOwotCXR3bDQwMzBfd3JpdGUoY29kZWMsIFRXTDQwMzBfUkVHX0hTX1BPUE5fU0VULCBwb3BuKTsKLQlwb3BuIHw9CVRXTDQwMzBfVk1JRF9FTjsKLQl0d2w0MDMwX3dyaXRlKGNvZGVjLCBUV0w0MDMwX1JFR19IU19QT1BOX1NFVCwgcG9wbik7Ci0KLQkvKiBlbmFibGUgYW50aS1wb3AgcmFtcCAqLwotCXBvcG4gfD0gVFdMNDAzMF9SQU1QX0VOOwotCXR3bDQwMzBfd3JpdGUoY29kZWMsIFRXTDQwMzBfUkVHX0hTX1BPUE5fU0VULCBwb3BuKTsKLX0KLQotc3RhdGljIHZvaWQgdHdsNDAzMF9wb3dlcl9kb3duKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKLXsKLQl1OCBwb3BuOwotCi0JLyogZGlzYWJsZSBhbnRpLXBvcCByYW1wICovCi0JcG9wbiA9IHR3bDQwMzBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFRXTDQwMzBfUkVHX0hTX1BPUE5fU0VUKTsKLQlwb3BuICY9IH5UV0w0MDMwX1JBTVBfRU47Ci0JdHdsNDAzMF93cml0ZShjb2RlYywgVFdMNDAzMF9SRUdfSFNfUE9QTl9TRVQsIHBvcG4pOwotCi0JLyogZGlzYWJsZSBiaWFzIG91dCAqLwotCXBvcG4gJj0gflRXTDQwMzBfVk1JRF9FTjsKLQl0d2w0MDMwX3dyaXRlKGNvZGVjLCBUV0w0MDMwX1JFR19IU19QT1BOX1NFVCwgcG9wbik7Ci0KLQkvKiBwb3dlciBkb3duICovCi0JdHdsNDAzMF9jbGVhcl9jb2RlY3Bkeihjb2RlYyk7Ci19Ci0KIHN0YXRpYyBpbnQgdHdsNDAzMF9zZXRfYmlhc19sZXZlbChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCiAJCQkJICBlbnVtIHNuZF9zb2NfYmlhc19sZXZlbCBsZXZlbCkKIHsKKwlzdHJ1Y3QgdHdsNDAzMF9wcml2ICp0d2w0MDMwID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKwogCXN3aXRjaCAobGV2ZWwpIHsKIAljYXNlIFNORF9TT0NfQklBU19PTjoKLQkJdHdsNDAzMF9wb3dlcl91cChjb2RlYyk7CisJCXR3bDQwMzBfY29kZWNfbXV0ZShjb2RlYywgMCk7CiAJCWJyZWFrOwogCWNhc2UgU05EX1NPQ19CSUFTX1BSRVBBUkU6Ci0JCS8qIFRPRE86IGRldmVsb3AgYSB0d2w0MDMwX3ByZXBhcmUgZnVuY3Rpb24gKi8KKwkJdHdsNDAzMF9wb3dlcl91cChjb2RlYyk7CisJCWlmICh0d2w0MDMwLT5ieXBhc3Nfc3RhdGUpCisJCQl0d2w0MDMwX2NvZGVjX211dGUoY29kZWMsIDApOworCQllbHNlCisJCQl0d2w0MDMwX2NvZGVjX211dGUoY29kZWMsIDEpOwogCQlicmVhazsKIAljYXNlIFNORF9TT0NfQklBU19TVEFOREJZOgotCQkvKiBUT0RPOiBkZXZlbG9wIGEgdHdsNDAzMF9zdGFuZGJ5IGZ1bmN0aW9uICovCi0JCXR3bDQwMzBfcG93ZXJfZG93bihjb2RlYyk7CisJCXR3bDQwMzBfcG93ZXJfdXAoY29kZWMpOworCQlpZiAodHdsNDAzMC0+YnlwYXNzX3N0YXRlKQorCQkJdHdsNDAzMF9jb2RlY19tdXRlKGNvZGVjLCAwKTsKKwkJZWxzZQorCQkJdHdsNDAzMF9jb2RlY19tdXRlKGNvZGVjLCAxKTsKIAkJYnJlYWs7CiAJY2FzZSBTTkRfU09DX0JJQVNfT0ZGOgogCQl0d2w0MDMwX3Bvd2VyX2Rvd24oY29kZWMpOwpAQCAtOTk0LDEwICsxMjIzLDkgQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJdTggbW9kZSwgb2xkX21vZGUsIGZvcm1hdCwgb2xkX2Zvcm1hdDsKIAotCiAJLyogYml0IHJhdGUgKi8KIAlvbGRfbW9kZSA9IHR3bDQwMzBfcmVhZF9yZWdfY2FjaGUoY29kZWMsCiAJCQlUV0w0MDMwX1JFR19DT0RFQ19NT0RFKSAmIH5UV0w0MDMwX0NPREVDUERaOwpAQCAtMTAzOSw4ICsxMjY3LDkgQEAKIAogCWlmIChtb2RlICE9IG9sZF9tb2RlKSB7CiAJCS8qIGNoYW5nZSByYXRlIGFuZCBzZXQgQ09ERUNQRFogKi8KKwkJdHdsNDAzMF9jb2RlY19lbmFibGUoY29kZWMsIDApOwogCQl0d2w0MDMwX3dyaXRlKGNvZGVjLCBUV0w0MDMwX1JFR19DT0RFQ19NT0RFLCBtb2RlKTsKLQkJdHdsNDAzMF9zZXRfY29kZWNwZHooY29kZWMpOworCQl0d2w0MDMwX2NvZGVjX2VuYWJsZShjb2RlYywgMSk7CiAJfQogCiAJLyogc2FtcGxlIHNpemUgKi8KQEAgLTEwNjMsMTMgKzEyOTIsMTMgQEAKIAlpZiAoZm9ybWF0ICE9IG9sZF9mb3JtYXQpIHsKIAogCQkvKiBjbGVhciBDT0RFQ1BEWiBiZWZvcmUgY2hhbmdpbmcgZm9ybWF0IChjb2RlYyByZXF1aXJlbWVudCkgKi8KLQkJdHdsNDAzMF9jbGVhcl9jb2RlY3Bkeihjb2RlYyk7CisJCXR3bDQwMzBfY29kZWNfZW5hYmxlKGNvZGVjLCAwKTsKIAogCQkvKiBjaGFuZ2UgZm9ybWF0ICovCiAJCXR3bDQwMzBfd3JpdGUoY29kZWMsIFRXTDQwMzBfUkVHX0FVRElPX0lGLCBmb3JtYXQpOwogCiAJCS8qIHNldCBDT0RFQ1BEWiBhZnRlcndhcmRzICovCi0JCXR3bDQwMzBfc2V0X2NvZGVjcGR6KGNvZGVjKTsKKwkJdHdsNDAzMF9jb2RlY19lbmFibGUoY29kZWMsIDEpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTExMzksMTMgKzEzNjgsMTMgQEAKIAlpZiAoZm9ybWF0ICE9IG9sZF9mb3JtYXQpIHsKIAogCQkvKiBjbGVhciBDT0RFQ1BEWiBiZWZvcmUgY2hhbmdpbmcgZm9ybWF0IChjb2RlYyByZXF1aXJlbWVudCkgKi8KLQkJdHdsNDAzMF9jbGVhcl9jb2RlY3Bkeihjb2RlYyk7CisJCXR3bDQwMzBfY29kZWNfZW5hYmxlKGNvZGVjLCAwKTsKIAogCQkvKiBjaGFuZ2UgZm9ybWF0ICovCiAJCXR3bDQwMzBfd3JpdGUoY29kZWMsIFRXTDQwMzBfUkVHX0FVRElPX0lGLCBmb3JtYXQpOwogCiAJCS8qIHNldCBDT0RFQ1BEWiBhZnRlcndhcmRzICovCi0JCXR3bDQwMzBfc2V0X2NvZGVjcGR6KGNvZGVjKTsKKwkJdHdsNDAzMF9jb2RlY19lbmFibGUoY29kZWMsIDEpOwogCX0KIAogCXJldHVybiAwOwpAQCAtMTE1NCw2ICsxMzgzLDEyIEBACiAjZGVmaW5lIFRXTDQwMzBfUkFURVMJIChTTkRSVl9QQ01fUkFURV84MDAwXzQ4MDAwKQogI2RlZmluZSBUV0w0MDMwX0ZPUk1BVFMJIChTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8IFNORFJWX1BDTV9GT1JNQVRfUzI0X0xFKQogCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyB0d2w0MDMwX2RhaV9vcHMgPSB7CisJLmh3X3BhcmFtcwk9IHR3bDQwMzBfaHdfcGFyYW1zLAorCS5zZXRfc3lzY2xrCT0gdHdsNDAzMF9zZXRfZGFpX3N5c2NsaywKKwkuc2V0X2ZtdAk9IHR3bDQwMzBfc2V0X2RhaV9mbXQsCit9OworCiBzdHJ1Y3Qgc25kX3NvY19kYWkgdHdsNDAzMF9kYWkgPSB7CiAJLm5hbWUgPSAidHdsNDAzMCIsCiAJLnBsYXliYWNrID0gewpAQCAtMTE2OCwxOCArMTQwMywxNCBAQAogCQkuY2hhbm5lbHNfbWF4ID0gMiwKIAkJLnJhdGVzID0gVFdMNDAzMF9SQVRFUywKIAkJLmZvcm1hdHMgPSBUV0w0MDMwX0ZPUk1BVFMsfSwKLQkub3BzID0gewotCQkuaHdfcGFyYW1zID0gdHdsNDAzMF9od19wYXJhbXMsCi0JCS5zZXRfc3lzY2xrID0gdHdsNDAzMF9zZXRfZGFpX3N5c2NsaywKLQkJLnNldF9mbXQgPSB0d2w0MDMwX3NldF9kYWlfZm10LAotCX0KKwkub3BzID0gJnR3bDQwMzBfZGFpX29wcywKIH07CiBFWFBPUlRfU1lNQk9MX0dQTCh0d2w0MDMwX2RhaSk7CiAKIHN0YXRpYyBpbnQgdHdsNDAzMF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCXR3bDQwMzBfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOwogCkBAIC0xMTg5LDcgKzE0MjAsNyBAQAogc3RhdGljIGludCB0d2w0MDMwX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJdHdsNDAzMF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1NUQU5EQlkpOwogCXR3bDQwMzBfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIGNvZGVjLT5zdXNwZW5kX2JpYXNfbGV2ZWwpOwpAQCAtMTIwMyw3ICsxNDM0LDcgQEAKIAogc3RhdGljIGludCB0d2w0MDMwX2luaXQoc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCWludCByZXQgPSAwOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiVFdMNDAzMCBBdWRpbyBDb2RlYyBpbml0IFxuIik7CkBAIC0xMjMzLDcgKzE0NjQsOCBAQAogCS8qIHBvd2VyIG9uIGRldmljZSAqLwogCXR3bDQwMzBfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19TVEFOREJZKTsKIAotCXR3bDQwMzBfYWRkX2NvbnRyb2xzKGNvZGVjKTsKKwlzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgdHdsNDAzMF9zbmRfY29udHJvbHMsCisJCQkJQVJSQVlfU0laRSh0d2w0MDMwX3NuZF9jb250cm9scykpOwogCXR3bDQwMzBfYWRkX3dpZGdldHMoY29kZWMpOwogCiAJcmV0ID0gc25kX3NvY19pbml0X2NhcmQoc29jZGV2KTsKQEAgLTEyNTgsMTIgKzE0OTAsMjAgQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKKwlzdHJ1Y3QgdHdsNDAzMF9wcml2ICp0d2w0MDMwOwogCiAJY29kZWMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc25kX3NvY19jb2RlYyksIEdGUF9LRVJORUwpOwogCWlmIChjb2RlYyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXNvY2Rldi0+Y29kZWMgPSBjb2RlYzsKKwl0d2w0MDMwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHR3bDQwMzBfcHJpdiksIEdGUF9LRVJORUwpOworCWlmICh0d2w0MDMwID09IE5VTEwpIHsKKwkJa2ZyZWUoY29kZWMpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwljb2RlYy0+cHJpdmF0ZV9kYXRhID0gdHdsNDAzMDsKKwlzb2NkZXYtPmNhcmQtPmNvZGVjID0gY29kZWM7CiAJbXV0ZXhfaW5pdCgmY29kZWMtPm11dGV4KTsKIAlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fd2lkZ2V0cyk7CiAJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3BhdGhzKTsKQEAgLTEyNzcsMTEgKzE1MTcsMTMgQEAKIHN0YXRpYyBpbnQgdHdsNDAzMF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCXByaW50ayhLRVJOX0lORk8gIlRXTDQwMzAgQXVkaW8gQ29kZWMgcmVtb3ZlXG4iKTsKKwl0d2w0MDMwX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKIAlzbmRfc29jX2ZyZWVfcGNtcyhzb2NkZXYpOwogCXNuZF9zb2NfZGFwbV9mcmVlKHNvY2Rldik7CisJa2ZyZWUoY29kZWMtPnByaXZhdGVfZGF0YSk7CiAJa2ZyZWUoY29kZWMpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3R3bDQwMzAuaCBiL3NvdW5kL3NvYy9jb2RlY3MvdHdsNDAzMC5oCmluZGV4IDQ0MmU1YTguLjMzZGJiMTQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvdHdsNDAzMC5oCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvdHdsNDAzMC5oCkBAIC0xNzAsNiArMTcwLDkgQEAKICNkZWZpbmUgVFdMNDAzMF9DTEsyNTZGU19FTgkJMHgwMgogI2RlZmluZSBUV0w0MDMwX0FJRl9FTgkJCTB4MDEKIAorLyogRUFSX0NUTCAoMHgyMSkgKi8KKyNkZWZpbmUgVFdMNDAzMF9FQVJfR0FJTgkJMHgzMAorCiAvKiBIU19HQUlOX1NFVCAoMHgyMykgRmllbGRzICovCiAKICNkZWZpbmUgVFdMNDAzMF9IU1JfR0FJTgkJMHgwQwpAQCAtMTk4LDYgKzIwMSwxOCBAQAogI2RlZmluZSBUV0w0MDMwX1JBTVBfREVMQVlfMjU4MU1TCTB4MUMKICNkZWZpbmUgVFdMNDAzMF9SQU1QX0VOCQkJMHgwMgogCisvKiBQUkVETF9DVEwgKDB4MjUpICovCisjZGVmaW5lIFRXTDQwMzBfUFJFRExfR0FJTgkJMHgzMAorCisvKiBQUkVEUl9DVEwgKDB4MjYpICovCisjZGVmaW5lIFRXTDQwMzBfUFJFRFJfR0FJTgkJMHgzMAorCisvKiBQUkVDS0xfQ1RMICgweDI3KSAqLworI2RlZmluZSBUV0w0MDMwX1BSRUNLTF9HQUlOCQkweDMwCisKKy8qIFBSRUNLUl9DVEwgKDB4MjgpICovCisjZGVmaW5lIFRXTDQwMzBfUFJFQ0tSX0dBSU4JCTB4MzAKKwogLyogSEZMX0NUTCAoMHgyOSwgMHgyQSkgRmllbGRzICovCiAjZGVmaW5lIFRXTDQwMzBfSEZfQ1RMX0hCX0VOCQkweDA0CiAjZGVmaW5lIFRXTDQwMzBfSEZfQ1RMX0xPT1BfRU4JCTB4MDgKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvdWRhMTM0eC5jIGIvc291bmQvc29jL2NvZGVjcy91ZGExMzR4LmMKaW5kZXggYTJjNTA2NC4uZGRlZmI4ZiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy91ZGExMzR4LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy91ZGExMzR4LmMKQEAgLTE3Myw3ICsxNzMsNyBAQAogewogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHJ0ZC0+c29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlzdHJ1Y3QgdWRhMTM0eF9wcml2ICp1ZGExMzR4ID0gY29kZWMtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICptYXN0ZXJfcnVudGltZTsKIApAQCAtMjA2LDcgKzIwNiw3IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCXN0cnVjdCB1ZGExMzR4X3ByaXYgKnVkYTEzNHggPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOwogCiAJaWYgKHVkYTEzNHgtPm1hc3Rlcl9zdWJzdHJlYW0gPT0gc3Vic3RyZWFtKQpAQCAtMjIxLDcgKzIyMSw3IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCXN0cnVjdCB1ZGExMzR4X3ByaXYgKnVkYTEzNHggPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOwogCXU4IGh3X3BhcmFtczsKIApAQCAtNDMxLDM4ICs0MzEsMTQgQEAKIFNPQ19TSU5HTEUoIkRDIEZpbHRlciBFbmFibGUgU3dpdGNoIiwgVURBMTM0WF9TVEFUVVMwLCAwLCAxLCAwKSwKIH07CiAKLXN0YXRpYyBpbnQgdWRhMTM0eF9hZGRfY29udHJvbHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQotewotCWludCBlcnIsIGksIG47Ci0JY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKmN0cmxzOwotCXN0cnVjdCB1ZGExMzR4X3BsYXRmb3JtX2RhdGEgKnBkID0gY29kZWMtPmNvbnRyb2xfZGF0YTsKLQotCXN3aXRjaCAocGQtPm1vZGVsKSB7Ci0JY2FzZSBVREExMzRYX1VEQTEzNDA6Ci0JY2FzZSBVREExMzRYX1VEQTEzNDQ6Ci0JCW4gPSBBUlJBWV9TSVpFKHVkYTEzNDBfc25kX2NvbnRyb2xzKTsKLQkJY3RybHMgPSB1ZGExMzQwX3NuZF9jb250cm9sczsKLQkJYnJlYWs7Ci0JY2FzZSBVREExMzRYX1VEQTEzNDE6Ci0JCW4gPSBBUlJBWV9TSVpFKHVkYTEzNDFfc25kX2NvbnRyb2xzKTsKLQkJY3RybHMgPSB1ZGExMzQxX3NuZF9jb250cm9sczsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fRVJSICIlcyB1bmtvd24gY29kZWMgdHlwZTogJWQiLAotCQkgICAgICAgX19mdW5jX18sIHBkLT5tb2RlbCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLQkJZXJyID0gc25kX2N0bF9hZGQoY29kZWMtPmNhcmQsCi0JCQkJICBzbmRfc29jX2NuZXcoJmN0cmxzW2ldLAotCQkJCQkgICAgICAgY29kZWMsIE5VTEwpKTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwotCX0KLQotCXJldHVybiAwOwotfQorc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgdWRhMTM0eF9kYWlfb3BzID0geworCS5zdGFydHVwCT0gdWRhMTM0eF9zdGFydHVwLAorCS5zaHV0ZG93bgk9IHVkYTEzNHhfc2h1dGRvd24sCisJLmh3X3BhcmFtcwk9IHVkYTEzNHhfaHdfcGFyYW1zLAorCS5kaWdpdGFsX211dGUJPSB1ZGExMzR4X211dGUsCisJLnNldF9zeXNjbGsJPSB1ZGExMzR4X3NldF9kYWlfc3lzY2xrLAorCS5zZXRfZm10CT0gdWRhMTM0eF9zZXRfZGFpX2ZtdCwKK307CiAKIHN0cnVjdCBzbmRfc29jX2RhaSB1ZGExMzR4X2RhaSA9IHsKIAkubmFtZSA9ICJVREExMzRYIiwKQEAgLTQ4MywxNCArNDU5LDcgQEAKIAkJLmZvcm1hdHMgPSBVREExMzRYX0ZPUk1BVFMsCiAJfSwKIAkvKiBwY20gb3BlcmF0aW9ucyAqLwotCS5vcHMgPSB7Ci0JCS5zdGFydHVwID0gdWRhMTM0eF9zdGFydHVwLAotCQkuc2h1dGRvd24gPSB1ZGExMzR4X3NodXRkb3duLAotCQkuaHdfcGFyYW1zID0gdWRhMTM0eF9od19wYXJhbXMsCi0JCS5kaWdpdGFsX211dGUgPSB1ZGExMzR4X211dGUsCi0JCS5zZXRfc3lzY2xrID0gdWRhMTM0eF9zZXRfZGFpX3N5c2NsaywKLQkJLnNldF9mbXQgPSB1ZGExMzR4X3NldF9kYWlfZm10LAotCX0KKwkub3BzID0gJnVkYTEzNHhfZGFpX29wcywKIH07CiBFWFBPUlRfU1lNQk9MKHVkYTEzNHhfZGFpKTsKIApAQCAtNTI1LDExICs0OTQsMTEgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0Jc29jZGV2LT5jb2RlYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzbmRfc29jX2NvZGVjKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHNvY2Rldi0+Y29kZWMgPT0gTlVMTCkKKwlzb2NkZXYtPmNhcmQtPmNvZGVjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNuZF9zb2NfY29kZWMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoc29jZGV2LT5jYXJkLT5jb2RlYyA9PSBOVUxMKQogCQlyZXR1cm4gcmV0OwogCi0JY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCWNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCXVkYTEzNHggPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdWRhMTM0eF9wcml2KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHVkYTEzNHggPT0gTlVMTCkKQEAgLTU3Miw3ICs1NDEsMjIgQEAKIAkJZ290byBwY21fZXJyOwogCX0KIAotCXJldCA9IHVkYTEzNHhfYWRkX2NvbnRyb2xzKGNvZGVjKTsKKwlzd2l0Y2ggKHBkLT5tb2RlbCkgeworCWNhc2UgVURBMTM0WF9VREExMzQwOgorCWNhc2UgVURBMTM0WF9VREExMzQ0OgorCQlyZXQgPSBzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgdWRhMTM0MF9zbmRfY29udHJvbHMsCisJCQkJCUFSUkFZX1NJWkUodWRhMTM0MF9zbmRfY29udHJvbHMpKTsKKwlicmVhazsKKwljYXNlIFVEQTEzNFhfVURBMTM0MToKKwkJcmV0ID0gc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHVkYTEzNDFfc25kX2NvbnRyb2xzLAorCQkJCQlBUlJBWV9TSVpFKHVkYTEzNDFfc25kX2NvbnRyb2xzKSk7CisJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSICIlcyB1bmtvd24gY29kZWMgdHlwZTogJWQiLAorCQkJX19mdW5jX18sIHBkLT5tb2RlbCk7CisJcmV0dXJuIC1FSU5WQUw7CisJfQorCiAJaWYgKHJldCA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJVREExMzRYOiBmYWlsZWQgdG8gcmVnaXN0ZXIgY29udHJvbHNcbiIpOwogCQlnb3RvIHBjbV9lcnI7CkBAIC02MDIsNyArNTg2LDcgQEAKIHN0YXRpYyBpbnQgdWRhMTM0eF9zb2NfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAl1ZGExMzR4X3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7CiAJdWRhMTM0eF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7CkBAIC02MjIsNyArNjA2LDcgQEAKIAkJCQkJCXBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCXVkYTEzNHhfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19TVEFOREJZKTsKIAl1ZGExMzR4X3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKQEAgLTYzMiw3ICs2MTYsNyBAQAogc3RhdGljIGludCB1ZGExMzR4X3NvY19yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCXVkYTEzNHhfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19QUkVQQVJFKTsKIAl1ZGExMzR4X3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT04pOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy91ZGExMzgwLmMgYi9zb3VuZC9zb2MvY29kZWNzL3VkYTEzODAuYwppbmRleCBlNmJmMDg0Li41YjIxNTk0IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3VkYTEzODAuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3VkYTEzODAuYwpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvY29udHJvbC5oPgogI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KQEAgLTM1LDcgKzM2LDggQEAKIAogI2luY2x1ZGUgInVkYTEzODAuaCIKIAotI2RlZmluZSBVREExMzgwX1ZFUlNJT04gIjAuNiIKK3N0YXRpYyBzdHJ1Y3Qgd29ya19zdHJ1Y3QgdWRhMTM4MF93b3JrOworc3RhdGljIHN0cnVjdCBzbmRfc29jX2NvZGVjICp1ZGExMzgwX2NvZGVjOwogCiAvKgogICogdWRhMTM4MCByZWdpc3RlciBjYWNoZQpAQCAtNTIsNiArNTQsOCBAQAogCTB4MDAwMCwgMHg4MDAwLCAweDAwMDIsIDB4MDAwMCwKIH07CiAKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHVkYTEzODBfY2FjaGVfZGlydHk7CisKIC8qCiAgKiByZWFkIHVkYTEzODAgcmVnaXN0ZXIgY2FjaGUKICAqLwpAQCAtNzMsOCArNzcsMTEgQEAKIAl1MTYgcmVnLCB1bnNpZ25lZCBpbnQgdmFsdWUpCiB7CiAJdTE2ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CisKIAlpZiAocmVnID49IFVEQTEzODBfQ0FDSEVSRUdOVU0pCiAJCXJldHVybjsKKwlpZiAoKHJlZyA+PSAweDEwKSAmJiAoY2FjaGVbcmVnXSAhPSB2YWx1ZSkpCisJCXNldF9iaXQocmVnIC0gMHgxMCwgJnVkYTEzODBfY2FjaGVfZGlydHkpOwogCWNhY2hlW3JlZ10gPSB2YWx1ZTsKIH0KIApAQCAtMTEzLDYgKzEyMCw4IEBACiAJCQkJCShkYXRhWzBdPDw4KSB8IGRhdGFbMV0pOwogCQkJcmV0dXJuIC1FSU87CiAJCX0KKwkJaWYgKHJlZyA+PSAweDEwKQorCQkJY2xlYXJfYml0KHJlZyAtIDB4MTAsICZ1ZGExMzgwX2NhY2hlX2RpcnR5KTsKIAkJcmV0dXJuIDA7CiAJfSBlbHNlCiAJCXJldHVybiAtRUlPOwpAQCAtMTIwLDYgKzEyOSwyMCBAQAogCiAjZGVmaW5lIHVkYTEzODBfcmVzZXQoYykJdWRhMTM4MF93cml0ZShjLCBVREExMzgwX1JFU0VULCAwKQogCitzdGF0aWMgdm9pZCB1ZGExMzgwX2ZsdXNoX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCWludCBiaXQsIHJlZzsKKworCWZvcl9lYWNoX2JpdChiaXQsICZ1ZGExMzgwX2NhY2hlX2RpcnR5LCBVREExMzgwX0NBQ0hFUkVHTlVNIC0gMHgxMCkgeworCQlyZWcgPSAweDEwICsgYml0OworCQlwcl9kZWJ1ZygidWRhMTM4MDogZmx1c2ggcmVnICV4IHZhbCAleDpcbiIsIHJlZywKKwkJCQl1ZGExMzgwX3JlYWRfcmVnX2NhY2hlKHVkYTEzODBfY29kZWMsIHJlZykpOworCQl1ZGExMzgwX3dyaXRlKHVkYTEzODBfY29kZWMsIHJlZywKKwkJCQl1ZGExMzgwX3JlYWRfcmVnX2NhY2hlKHVkYTEzODBfY29kZWMsIHJlZykpOworCQljbGVhcl9iaXQoYml0LCAmdWRhMTM4MF9jYWNoZV9kaXJ0eSk7CisJfQorfQorCiAvKiBkZWNsYXJhdGlvbnMgb2YgQUxTQSByZWdfZWxlbV9SRUFMIGNvbnRyb2xzICovCiBzdGF0aWMgY29uc3QgY2hhciAqdWRhMTM4MF9kZWVtcFtdID0gewogCSJOb25lIiwKQEAgLTI1NCw3ICsyNzcsNiBAQAogCVNPQ19TSU5HTEUoIkRBQyBQb2xhcml0eSBpbnZlcnRpbmcgU3dpdGNoIiwgVURBMTM4MF9NSVhFUiwgMTUsIDEsIDApLAkvKiBEQV9QT0xfSU5WICovCiAJU09DX0VOVU0oIk5vaXNlIFNoYXBlciIsIHVkYTEzODBfc2VsX25zX2VudW0pLAkJCQkvKiBTRUxfTlMgKi8KIAlTT0NfRU5VTSgiRGlnaXRhbCBNaXhlciBTaWduYWwgQ29udHJvbCIsIHVkYTEzODBfbWl4X2VudW0pLAkJLyogTUlYX1BPUywgTUlYICovCi0JU09DX1NJTkdMRSgiU2lsZW5jZSBTd2l0Y2giLCBVREExMzgwX01JWEVSLCA3LCAxLCAwKSwJCQkvKiBTSUxFTkNFLCBmb3JjZSBEQUMgb3V0cHV0IHRvIHNpbGVuY2UgKi8KIAlTT0NfU0lOR0xFKCJTaWxlbmNlIERldGVjdG9yIFN3aXRjaCIsIFVEQTEzODBfTUlYRVIsIDYsIDEsIDApLAkJLyogU0RFVF9PTiAqLwogCVNPQ19FTlVNKCJTaWxlbmNlIERldGVjdG9yIFNldHRpbmciLCB1ZGExMzgwX3NkZXRfZW51bSksCQkvKiBTRF9WQUxVRSAqLwogCVNPQ19FTlVNKCJPdmVyc2FtcGxpbmcgSW5wdXQiLCB1ZGExMzgwX29zX2VudW0pLAkJCS8qIE9TICovCkBAIC0yNzEsMjEgKzI5Myw2IEBACiAJU09DX1NJTkdMRSgiQUdDIFN3aXRjaCIsIFVEQTEzODBfQUdDLCAwLCAxLCAwKSwKIH07CiAKLS8qIGFkZCBub24gZGFwbSBjb250cm9scyAqLwotc3RhdGljIGludCB1ZGExMzgwX2FkZF9jb250cm9scyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCi17Ci0JaW50IGVyciwgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHVkYTEzODBfc25kX2NvbnRyb2xzKTsgaSsrKSB7Ci0JCWVyciA9IHNuZF9jdGxfYWRkKGNvZGVjLT5jYXJkLAotCQkJc25kX3NvY19jbmV3KCZ1ZGExMzgwX3NuZF9jb250cm9sc1tpXSwgY29kZWMsIE5VTEwpKTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwotCX0KLQotCXJldHVybiAwOwotfQotCiAvKiBJbnB1dCBtdXggKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB1ZGExMzgwX2lucHV0X211eF9jb250cm9sID0KIAlTT0NfREFQTV9FTlVNKCJSb3V0ZSIsIHVkYTEzODBfaW5wdXRfc2VsX2VudW0pOwpAQCAtMzcxLDcgKzM3OCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdWRhMTM4MF9zZXRfZGFpX2ZtdChzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSwKK3N0YXRpYyBpbnQgdWRhMTM4MF9zZXRfZGFpX2ZtdF9ib3RoKHN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpLAogCQl1bnNpZ25lZCBpbnQgZm10KQogewogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNvZGVjX2RhaS0+Y29kZWM7CkBAIC0zODEsMTYgKzM4OCw3NSBAQAogCWlmYWNlID0gdWRhMTM4MF9yZWFkX3JlZ19jYWNoZShjb2RlYywgVURBMTM4MF9JRkFDRSk7CiAJaWZhY2UgJj0gfihSMDFfU0ZPUklfTUFTSyB8IFIwMV9TSU0gfCBSMDFfU0ZPUk9fTUFTSyk7CiAKLQkvKiBGSVhNRTogaG93IHRvIHNlbGVjdCBJMlMgZm9yIERBVEFPIGFuZCBNU0IgZm9yIERBVEFJIGNvcnJlY3RseT8gKi8KIAlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0ZPUk1BVF9NQVNLKSB7CiAJY2FzZSBTTkRfU09DX0RBSUZNVF9JMlM6CiAJCWlmYWNlIHw9IFIwMV9TRk9SSV9JMlMgfCBSMDFfU0ZPUk9fSTJTOwogCQlicmVhazsKIAljYXNlIFNORF9TT0NfREFJRk1UX0xTQjoKLQkJaWZhY2UgfD0gUjAxX1NGT1JJX0xTQjE2IHwgUjAxX1NGT1JPX0kyUzsKKwkJaWZhY2UgfD0gUjAxX1NGT1JJX0xTQjE2IHwgUjAxX1NGT1JPX0xTQjE2OwogCQlicmVhazsKIAljYXNlIFNORF9TT0NfREFJRk1UX01TQjoKLQkJaWZhY2UgfD0gUjAxX1NGT1JJX01TQiB8IFIwMV9TRk9ST19JMlM7CisJCWlmYWNlIHw9IFIwMV9TRk9SSV9NU0IgfCBSMDFfU0ZPUk9fTVNCOworCX0KKworCS8qIERBVEFJIGlzIHNsYXZlIG9ubHksIHNvIGluIHNpbmdsZS1saW5rIG1vZGUsIHRoaXMgaGFzIHRvIGJlIHNsYXZlICovCisJaWYgKChmbXQgJiBTTkRfU09DX0RBSUZNVF9NQVNURVJfTUFTSykgIT0gU05EX1NPQ19EQUlGTVRfQ0JTX0NGUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl1ZGExMzgwX3dyaXRlKGNvZGVjLCBVREExMzgwX0lGQUNFLCBpZmFjZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB1ZGExMzgwX3NldF9kYWlfZm10X3BsYXliYWNrKHN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpLAorCQl1bnNpZ25lZCBpbnQgZm10KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNvZGVjX2RhaS0+Y29kZWM7CisJaW50IGlmYWNlOworCisJLyogc2V0IHVwIERBSSBiYXNlZCB1cG9uIGZtdCAqLworCWlmYWNlID0gdWRhMTM4MF9yZWFkX3JlZ19jYWNoZShjb2RlYywgVURBMTM4MF9JRkFDRSk7CisJaWZhY2UgJj0gflIwMV9TRk9SSV9NQVNLOworCisJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9GT1JNQVRfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfSTJTOgorCQlpZmFjZSB8PSBSMDFfU0ZPUklfSTJTOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0xTQjoKKwkJaWZhY2UgfD0gUjAxX1NGT1JJX0xTQjE2OworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX01TQjoKKwkJaWZhY2UgfD0gUjAxX1NGT1JJX01TQjsKKwl9CisKKwkvKiBEQVRBSSBpcyBzbGF2ZSBvbmx5LCBzbyB0aGlzIGhhcyB0byBiZSBzbGF2ZSAqLworCWlmICgoZm10ICYgU05EX1NPQ19EQUlGTVRfTUFTVEVSX01BU0spICE9IFNORF9TT0NfREFJRk1UX0NCU19DRlMpCisJCXJldHVybiAtRUlOVkFMOworCisJdWRhMTM4MF93cml0ZShjb2RlYywgVURBMTM4MF9JRkFDRSwgaWZhY2UpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdWRhMTM4MF9zZXRfZGFpX2ZtdF9jYXB0dXJlKHN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpLAorCQl1bnNpZ25lZCBpbnQgZm10KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNvZGVjX2RhaS0+Y29kZWM7CisJaW50IGlmYWNlOworCisJLyogc2V0IHVwIERBSSBiYXNlZCB1cG9uIGZtdCAqLworCWlmYWNlID0gdWRhMTM4MF9yZWFkX3JlZ19jYWNoZShjb2RlYywgVURBMTM4MF9JRkFDRSk7CisJaWZhY2UgJj0gfihSMDFfU0lNIHwgUjAxX1NGT1JPX01BU0spOworCisJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9GT1JNQVRfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfSTJTOgorCQlpZmFjZSB8PSBSMDFfU0ZPUk9fSTJTOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0xTQjoKKwkJaWZhY2UgfD0gUjAxX1NGT1JPX0xTQjE2OworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX01TQjoKKwkJaWZhY2UgfD0gUjAxX1NGT1JPX01TQjsKIAl9CiAKIAlpZiAoKGZtdCAmIFNORF9TT0NfREFJRk1UX01BU1RFUl9NQVNLKSA9PSBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNKQpAQCAtNDAxLDQxICs0NjcsMjggQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIEZsdXNoIHJlZyBjYWNoZQotICogV2UgY2FuIG9ubHkgd3JpdGUgdGhlIGludGVycG9sYXRvciBhbmQgZGVjaW1hdG9yIHJlZ2lzdGVycwotICogd2hlbiB0aGUgREFJIGlzIGJlaW5nIGNsb2NrZWQgYnkgdGhlIENQVSBEQUkuIEl0J3MgdXAgdG8gdGhlCi0gKiBtYWNoaW5lIGFuZCBjcHUgREFJIGRyaXZlciB0byBkbyB0aGlzIGJlZm9yZSB3ZSBhcmUgY2FsbGVkLgotICovCi1zdGF0aWMgaW50IHVkYTEzODBfcGNtX3ByZXBhcmUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCi0JCQkgICAgICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCitzdGF0aWMgaW50IHVkYTEzODBfdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgaW50IGNtZCwKKwkJc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKLQlpbnQgcmVnLCByZWdfc3RhcnQsIHJlZ19lbmQsIGNsazsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOworCWludCBtaXhlciA9IHVkYTEzODBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFVEQTEzODBfTUlYRVIpOwogCi0JaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spIHsKLQkJcmVnX3N0YXJ0ID0gVURBMTM4MF9NVk9MOwotCQlyZWdfZW5kID0gVURBMTM4MF9NSVhFUjsKLQl9IGVsc2UgewotCQlyZWdfc3RhcnQgPSBVREExMzgwX0RFQzsKLQkJcmVnX2VuZCA9IFVEQTEzODBfQUdDOworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1JFTEVBU0U6CisJCXVkYTEzODBfd3JpdGVfcmVnX2NhY2hlKGNvZGVjLCBVREExMzgwX01JWEVSLAorCQkJCQltaXhlciAmIH5SMTRfU0lMRU5DRSk7CisJCXNjaGVkdWxlX3dvcmsoJnVkYTEzODBfd29yayk7CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1BVU0g6CisJCXVkYTEzODBfd3JpdGVfcmVnX2NhY2hlKGNvZGVjLCBVREExMzgwX01JWEVSLAorCQkJCQltaXhlciB8IFIxNF9TSUxFTkNFKTsKKwkJc2NoZWR1bGVfd29yaygmdWRhMTM4MF93b3JrKTsKKwkJYnJlYWs7CiAJfQotCi0JLyogRklYTUUgZGlzYWJsZSBEQUNfQ0xLICovCi0JY2xrID0gdWRhMTM4MF9yZWFkX3JlZ19jYWNoZShjb2RlYywgVURBMTM4MF9DTEspOwotCXVkYTEzODBfd3JpdGUoY29kZWMsIFVEQTEzODBfQ0xLLCBjbGsgJiB+UjAwX0RBQ19DTEspOwotCi0JZm9yIChyZWcgPSByZWdfc3RhcnQ7IHJlZyA8PSByZWdfZW5kOyByZWcrKykgewotCQlwcl9kZWJ1ZygidWRhMTM4MDogZmx1c2ggcmVnICV4IHZhbCAleDoiLCByZWcsCi0JCQkJdWRhMTM4MF9yZWFkX3JlZ19jYWNoZShjb2RlYywgcmVnKSk7Ci0JCXVkYTEzODBfd3JpdGUoY29kZWMsIHJlZywgdWRhMTM4MF9yZWFkX3JlZ19jYWNoZShjb2RlYywgcmVnKSk7Ci0JfQotCi0JLyogRklYTUUgZW5hYmxlIERBQ19DTEsgKi8KLQl1ZGExMzgwX3dyaXRlKGNvZGVjLCBVREExMzgwX0NMSywgY2xrIHwgUjAwX0RBQ19DTEspOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ0NSw3ICs0OTgsNyBAQAogewogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHJ0ZC0+c29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAl1MTYgY2xrID0gdWRhMTM4MF9yZWFkX3JlZ19jYWNoZShjb2RlYywgVURBMTM4MF9DTEspOwogCiAJLyogc2V0IFdTUExMIHBvd2VyIGFuZCBkaXZpZGVyIGlmIHJ1bm5pbmcgZnJvbSB0aGlzIGNsb2NrICovCkBAIC00ODQsNyArNTM3LDcgQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJdTE2IGNsayA9IHVkYTEzODBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFVEQTEzODBfQ0xLKTsKIAogCS8qIHNodXQgZG93biBXU1BMTCBwb3dlciBpZiBydW5uaW5nIGZyb20gdGhpcyBjbG9jayAqLwpAQCAtNTAxLDI0ICs1NTQsNiBAQAogCXVkYTEzODBfd3JpdGUoY29kZWMsIFVEQTEzODBfQ0xLLCBjbGspOwogfQogCi1zdGF0aWMgaW50IHVkYTEzODBfbXV0ZShzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSwgaW50IG11dGUpCi17Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY29kZWNfZGFpLT5jb2RlYzsKLQl1MTYgbXV0ZV9yZWcgPSB1ZGExMzgwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBVREExMzgwX0RFRU1QKSAmIH5SMTNfTVRNOwotCi0JLyogRklYTUU6IG11dGUoY29kZWMsMCkgaXMgY2FsbGVkIHdoZW4gdGhlIG1hZ2ljaWFuIGNsb2NrIGlzIGFscmVhZHkKLQkgKiBzZXQgdG8gV1NQTEwsIGJ1dCBmb3Igc29tZSB1bmtub3duIHJlYXNvbiB3cml0aW5nIHRvIGludGVycG9sYXRvcgotCSAqIHJlZ2lzdGVycyB3b3JrcyBvbmx5IHdoZW4gY2xvY2tlZCBieSBTWVNDTEsgKi8KLQl1MTYgY2xrID0gdWRhMTM4MF9yZWFkX3JlZ19jYWNoZShjb2RlYywgVURBMTM4MF9DTEspOwotCXVkYTEzODBfd3JpdGUoY29kZWMsIFVEQTEzODBfQ0xLLCB+UjAwX0RBQ19DTEsgJiBjbGspOwotCWlmIChtdXRlKQotCQl1ZGExMzgwX3dyaXRlKGNvZGVjLCBVREExMzgwX0RFRU1QLCBtdXRlX3JlZyB8IFIxM19NVE0pOwotCWVsc2UKLQkJdWRhMTM4MF93cml0ZShjb2RlYywgVURBMTM4MF9ERUVNUCwgbXV0ZV9yZWcpOwotCXVkYTEzODBfd3JpdGUoY29kZWMsIFVEQTEzODBfQ0xLLCBjbGspOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IHVkYTEzODBfc2V0X2JpYXNfbGV2ZWwoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAogCWVudW0gc25kX3NvY19iaWFzX2xldmVsIGxldmVsKQogewpAQCAtNTQ0LDYgKzU3OSwyNyBAQAogCQkgICAgICAgU05EUlZfUENNX1JBVEVfMTYwMDAgfCBTTkRSVl9QQ01fUkFURV8yMjA1MCB8XAogCQkgICAgICAgU05EUlZfUENNX1JBVEVfNDQxMDAgfCBTTkRSVl9QQ01fUkFURV80ODAwMCkKIAorc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgdWRhMTM4MF9kYWlfb3BzID0geworCS5od19wYXJhbXMJPSB1ZGExMzgwX3BjbV9od19wYXJhbXMsCisJLnNodXRkb3duCT0gdWRhMTM4MF9wY21fc2h1dGRvd24sCisJLnRyaWdnZXIJPSB1ZGExMzgwX3RyaWdnZXIsCisJLnNldF9mbXQJPSB1ZGExMzgwX3NldF9kYWlfZm10X2JvdGgsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyB1ZGExMzgwX2RhaV9vcHNfcGxheWJhY2sgPSB7CisJLmh3X3BhcmFtcwk9IHVkYTEzODBfcGNtX2h3X3BhcmFtcywKKwkuc2h1dGRvd24JPSB1ZGExMzgwX3BjbV9zaHV0ZG93biwKKwkudHJpZ2dlcgk9IHVkYTEzODBfdHJpZ2dlciwKKwkuc2V0X2ZtdAk9IHVkYTEzODBfc2V0X2RhaV9mbXRfcGxheWJhY2ssCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyB1ZGExMzgwX2RhaV9vcHNfY2FwdHVyZSA9IHsKKwkuaHdfcGFyYW1zCT0gdWRhMTM4MF9wY21faHdfcGFyYW1zLAorCS5zaHV0ZG93bgk9IHVkYTEzODBfcGNtX3NodXRkb3duLAorCS50cmlnZ2VyCT0gdWRhMTM4MF90cmlnZ2VyLAorCS5zZXRfZm10CT0gdWRhMTM4MF9zZXRfZGFpX2ZtdF9jYXB0dXJlLAorfTsKKwogc3RydWN0IHNuZF9zb2NfZGFpIHVkYTEzODBfZGFpW10gPSB7CiB7CiAJLm5hbWUgPSAiVURBMTM4MCIsCkBAIC01NTksMTMgKzYxNSw3IEBACiAJCS5jaGFubmVsc19tYXggPSAyLAogCQkucmF0ZXMgPSBVREExMzgwX1JBVEVTLAogCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLH0sCi0JLm9wcyA9IHsKLQkJLmh3X3BhcmFtcyA9IHVkYTEzODBfcGNtX2h3X3BhcmFtcywKLQkJLnNodXRkb3duID0gdWRhMTM4MF9wY21fc2h1dGRvd24sCi0JCS5wcmVwYXJlID0gdWRhMTM4MF9wY21fcHJlcGFyZSwKLQkJLmRpZ2l0YWxfbXV0ZSA9IHVkYTEzODBfbXV0ZSwKLQkJLnNldF9mbXQgPSB1ZGExMzgwX3NldF9kYWlfZm10LAotCX0sCisJLm9wcyA9ICZ1ZGExMzgwX2RhaV9vcHMsCiB9LAogeyAvKiBwbGF5YmFjayBvbmx5IC0gZHVhbCBpbnRlcmZhY2UgKi8KIAkubmFtZSA9ICJVREExMzgwIiwKQEAgLTU3NiwxMyArNjI2LDcgQEAKIAkJLnJhdGVzID0gVURBMTM4MF9SQVRFUywKIAkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwKIAl9LAotCS5vcHMgPSB7Ci0JCS5od19wYXJhbXMgPSB1ZGExMzgwX3BjbV9od19wYXJhbXMsCi0JCS5zaHV0ZG93biA9IHVkYTEzODBfcGNtX3NodXRkb3duLAotCQkucHJlcGFyZSA9IHVkYTEzODBfcGNtX3ByZXBhcmUsCi0JCS5kaWdpdGFsX211dGUgPSB1ZGExMzgwX211dGUsCi0JCS5zZXRfZm10ID0gdWRhMTM4MF9zZXRfZGFpX2ZtdCwKLQl9LAorCS5vcHMgPSAmdWRhMTM4MF9kYWlfb3BzX3BsYXliYWNrLAogfSwKIHsgLyogY2FwdHVyZSBvbmx5IC0gZHVhbCBpbnRlcmZhY2UqLwogCS5uYW1lID0gIlVEQTEzODAiLApAQCAtNTkzLDEyICs2MzcsNyBAQAogCQkucmF0ZXMgPSBVREExMzgwX1JBVEVTLAogCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLAogCX0sCi0JLm9wcyA9IHsKLQkJLmh3X3BhcmFtcyA9IHVkYTEzODBfcGNtX2h3X3BhcmFtcywKLQkJLnNodXRkb3duID0gdWRhMTM4MF9wY21fc2h1dGRvd24sCi0JCS5wcmVwYXJlID0gdWRhMTM4MF9wY21fcHJlcGFyZSwKLQkJLnNldF9mbXQgPSB1ZGExMzgwX3NldF9kYWlfZm10LAotCX0sCisJLm9wcyA9ICZ1ZGExMzgwX2RhaV9vcHNfY2FwdHVyZSwKIH0sCiB9OwogRVhQT1JUX1NZTUJPTF9HUEwodWRhMTM4MF9kYWkpOwpAQCAtNjA2LDcgKzY0NSw3IEBACiBzdGF0aWMgaW50IHVkYTEzODBfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAl1ZGExMzgwX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKIAlyZXR1cm4gMDsKQEAgLTYxNSw3ICs2NTQsNyBAQAogc3RhdGljIGludCB1ZGExMzgwX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCWludCBpOwogCXU4IGRhdGFbMl07CiAJdTE2ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CkBAIC02MzcsNyArNjc2LDcgQEAKICAqLwogc3RhdGljIGludCB1ZGExMzgwX2luaXQoc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYsIGludCBkYWNfY2xrKQogewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlpbnQgcmV0ID0gMDsKIAogCWNvZGVjLT5uYW1lID0gIlVEQTEzODAiOwpAQCAtNjU1LDYgKzY5NCw5IEBACiAJY29kZWMtPnJlZ19jYWNoZV9zdGVwID0gMTsKIAl1ZGExMzgwX3Jlc2V0KGNvZGVjKTsKIAorCXVkYTEzODBfY29kZWMgPSBjb2RlYzsKKwlJTklUX1dPUksoJnVkYTEzODBfd29yaywgdWRhMTM4MF9mbHVzaF93b3JrKTsKKwogCS8qIHJlZ2lzdGVyIHBjbXMgKi8KIAlyZXQgPSBzbmRfc29jX25ld19wY21zKHNvY2RldiwgU05EUlZfREVGQVVMVF9JRFgxLCBTTkRSVl9ERUZBVUxUX1NUUjEpOwogCWlmIChyZXQgPCAwKSB7CkBAIC02NzUsNyArNzE3LDggQEAKIAl9CiAKIAkvKiB1ZGExMzgwIGluaXQgKi8KLQl1ZGExMzgwX2FkZF9jb250cm9scyhjb2RlYyk7CisJc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHVkYTEzODBfc25kX2NvbnRyb2xzLAorCQkJCUFSUkFZX1NJWkUodWRhMTM4MF9zbmRfY29udHJvbHMpKTsKIAl1ZGExMzgwX2FkZF93aWRnZXRzKGNvZGVjKTsKIAlyZXQgPSBzbmRfc29jX2luaXRfY2FyZChzb2NkZXYpOwogCWlmIChyZXQgPCAwKSB7CkBAIC03MDIsNyArNzQ1LDcgQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHVkYTEzODBfc29jZGV2OwogCXN0cnVjdCB1ZGExMzgwX3NldHVwX2RhdGEgKnNldHVwID0gc29jZGV2LT5jb2RlY19kYXRhOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlpbnQgcmV0OwogCiAJaTJjX3NldF9jbGllbnRkYXRhKGkyYywgY29kZWMpOwpAQCAtNzg2LDE0ICs4MjksMTIgQEAKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CiAJaW50IHJldDsKIAotCXByX2luZm8oIlVEQTEzODAgQXVkaW8gQ29kZWMgJXMiLCBVREExMzgwX1ZFUlNJT04pOwotCiAJc2V0dXAgPSBzb2NkZXYtPmNvZGVjX2RhdGE7CiAJY29kZWMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc25kX3NvY19jb2RlYyksIEdGUF9LRVJORUwpOwogCWlmIChjb2RlYyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXNvY2Rldi0+Y29kZWMgPSBjb2RlYzsKKwlzb2NkZXYtPmNhcmQtPmNvZGVjID0gY29kZWM7CiAJbXV0ZXhfaW5pdCgmY29kZWMtPm11dGV4KTsKIAlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fd2lkZ2V0cyk7CiAJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3BhdGhzKTsKQEAgLTgxNyw3ICs4NTgsNyBAQAogc3RhdGljIGludCB1ZGExMzgwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJaWYgKGNvZGVjLT5jb250cm9sX2RhdGEpCiAJCXVkYTEzODBfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTgzNTAuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204MzUwLmMKaW5kZXggMzVkOTk3NS4uM2IxZDA5OSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTgzNTAuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODM1MC5jCkBAIC01MSwxMCArNTEsMTcgQEAKIAl1MTYgbXV0ZTsKIH07CiAKK3N0cnVjdCB3bTgzNTBfamFja19kYXRhIHsKKwlzdHJ1Y3Qgc25kX3NvY19qYWNrICpqYWNrOworCWludCByZXBvcnQ7Cit9OworCiBzdHJ1Y3Qgd204MzUwX2RhdGEgewogCXN0cnVjdCBzbmRfc29jX2NvZGVjIGNvZGVjOwogCXN0cnVjdCB3bTgzNTBfb3V0cHV0IG91dDE7CiAJc3RydWN0IHdtODM1MF9vdXRwdXQgb3V0MjsKKwlzdHJ1Y3Qgd204MzUwX2phY2tfZGF0YSBocGw7CisJc3RydWN0IHdtODM1MF9qYWNrX2RhdGEgaHByOwogCXN0cnVjdCByZWd1bGF0b3JfYnVsa19kYXRhIHN1cHBsaWVzW0FSUkFZX1NJWkUoc3VwcGx5X25hbWVzKV07CiB9OwogCkBAIC03NzUsMjEgKzc4Miw2IEBACiAJeyJCZWVwIiwgTlVMTCwgIklOM1IgUEdBIn0sCiB9OwogCi1zdGF0aWMgaW50IHdtODM1MF9hZGRfY29udHJvbHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQotewotCWludCBlcnIsIGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTgzNTBfc25kX2NvbnRyb2xzKTsgaSsrKSB7Ci0JCWVyciA9IHNuZF9jdGxfYWRkKGNvZGVjLT5jYXJkLAotCQkJCSAgc25kX3NvY19jbmV3KCZ3bTgzNTBfc25kX2NvbnRyb2xzW2ldLAotCQkJCQkgICAgICAgY29kZWMsIE5VTEwpKTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwotCX0KLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IHdtODM1MF9hZGRfd2lkZ2V0cyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCiB7CiAJaW50IHJldDsKQEAgLTEzMDksNyArMTMwMSw3IEBACiBzdGF0aWMgaW50IHdtODM1MF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCXdtODM1MF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7CiAJcmV0dXJuIDA7CkBAIC0xMzE4LDcgKzEzMTAsNyBAQAogc3RhdGljIGludCB3bTgzNTBfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAl3bTgzNTBfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19TVEFOREJZKTsKIApAQCAtMTMyOCw2ICsxMzIwLDk1IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIHdtODM1MF9ocF9qYWNrX2hhbmRsZXIoc3RydWN0IHdtODM1MCAqd204MzUwLCBpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCB3bTgzNTBfZGF0YSAqcHJpdiA9IGRhdGE7CisJdTE2IHJlZzsKKwlpbnQgcmVwb3J0OworCWludCBtYXNrOworCXN0cnVjdCB3bTgzNTBfamFja19kYXRhICpqYWNrID0gTlVMTDsKKworCXN3aXRjaCAoaXJxKSB7CisJY2FzZSBXTTgzNTBfSVJRX0NPREVDX0pDS19ERVRfTDoKKwkJamFjayA9ICZwcml2LT5ocGw7CisJCW1hc2sgPSBXTTgzNTBfSkFDS19MX0xWTDsKKwkJYnJlYWs7CisKKwljYXNlIFdNODM1MF9JUlFfQ09ERUNfSkNLX0RFVF9SOgorCQlqYWNrID0gJnByaXYtPmhwcjsKKwkJbWFzayA9IFdNODM1MF9KQUNLX1JfTFZMOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCUJVRygpOworCX0KKworCWlmICghamFjay0+amFjaykgeworCQlkZXZfd2Fybih3bTgzNTAtPmRldiwgIkphY2sgaW50ZXJydXB0IGNhbGxlZCB3aXRoIG5vIGphY2tcbiIpOworCQlyZXR1cm47CisJfQorCisJLyogRGVib3VuY2UgKi8KKwltc2xlZXAoMjAwKTsKKworCXJlZyA9IHdtODM1MF9yZWdfcmVhZCh3bTgzNTAsIFdNODM1MF9KQUNLX1BJTl9TVEFUVVMpOworCWlmIChyZWcgJiBtYXNrKQorCQlyZXBvcnQgPSBqYWNrLT5yZXBvcnQ7CisJZWxzZQorCQlyZXBvcnQgPSAwOworCisJc25kX3NvY19qYWNrX3JlcG9ydChqYWNrLT5qYWNrLCByZXBvcnQsIGphY2stPnJlcG9ydCk7Cit9CisKKy8qKgorICogd204MzUwX2hwX2phY2tfZGV0ZWN0IC0gRW5hYmxlIGhlYWRwaG9uZSBqYWNrIGRldGVjdGlvbi4KKyAqCisgKiBAY29kZWM6ICBXTTgzNTAgY29kZWMKKyAqIEB3aGljaDogIGxlZnQgb3IgcmlnaHQgamFjayBkZXRlY3Qgc2lnbmFsCisgKiBAamFjazogICBqYWNrIHRvIHJlcG9ydCBkZXRlY3Rpb24gZXZlbnRzIG9uCisgKiBAcmVwb3J0OiB2YWx1ZSB0byByZXBvcnQKKyAqCisgKiBFbmFibGVzIHRoZSBoZWFkcGhvbmUgamFjayBkZXRlY3Rpb24gb2YgdGhlIFdNODM1MC4KKyAqLworaW50IHdtODM1MF9ocF9qYWNrX2RldGVjdChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGVudW0gd204MzUwX2phY2sgd2hpY2gsCisJCQkgIHN0cnVjdCBzbmRfc29jX2phY2sgKmphY2ssIGludCByZXBvcnQpCit7CisJc3RydWN0IHdtODM1MF9kYXRhICpwcml2ID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgd204MzUwICp3bTgzNTAgPSBjb2RlYy0+Y29udHJvbF9kYXRhOworCWludCBpcnE7CisJaW50IGVuYTsKKworCXN3aXRjaCAod2hpY2gpIHsKKwljYXNlIFdNODM1MF9KREw6CisJCXByaXYtPmhwbC5qYWNrID0gamFjazsKKwkJcHJpdi0+aHBsLnJlcG9ydCA9IHJlcG9ydDsKKwkJaXJxID0gV004MzUwX0lSUV9DT0RFQ19KQ0tfREVUX0w7CisJCWVuYSA9IFdNODM1MF9KRExfRU5BOworCQlicmVhazsKKworCWNhc2UgV004MzUwX0pEUjoKKwkJcHJpdi0+aHByLmphY2sgPSBqYWNrOworCQlwcml2LT5ocHIucmVwb3J0ID0gcmVwb3J0OworCQlpcnEgPSBXTTgzNTBfSVJRX0NPREVDX0pDS19ERVRfUjsKKwkJZW5hID0gV004MzUwX0pEUl9FTkE7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJd204MzUwX3NldF9iaXRzKHdtODM1MCwgV004MzUwX1BPV0VSX01HTVRfNCwgV004MzUwX1RPQ0xLX0VOQSk7CisJd204MzUwX3NldF9iaXRzKHdtODM1MCwgV004MzUwX0pBQ0tfREVURUNULCBlbmEpOworCisJLyogU3luYyBzdGF0dXMgKi8KKwl3bTgzNTBfaHBfamFja19oYW5kbGVyKHdtODM1MCwgaXJxLCBwcml2KTsKKworCXdtODM1MF91bm1hc2tfaXJxKHdtODM1MCwgaXJxKTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwod204MzUwX2hwX2phY2tfZGV0ZWN0KTsKKwogc3RhdGljIHN0cnVjdCBzbmRfc29jX2NvZGVjICp3bTgzNTBfY29kZWM7CiAKIHN0YXRpYyBpbnQgd204MzUwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCkBAIC0xMzQyLDggKzE0MjMsOCBAQAogCiAJQlVHX09OKCF3bTgzNTBfY29kZWMpOwogCi0Jc29jZGV2LT5jb2RlYyA9IHdtODM1MF9jb2RlYzsKLQljb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc29jZGV2LT5jYXJkLT5jb2RlYyA9IHdtODM1MF9jb2RlYzsKKwljb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJd204MzUwID0gY29kZWMtPmNvbnRyb2xfZGF0YTsKIAlwcml2ID0gY29kZWMtPnByaXZhdGVfZGF0YTsKIApAQCAtMTM4MSwxMyArMTQ2MiwyMSBAQAogCXdtODM1MF9zZXRfYml0cyh3bTgzNTAsIFdNODM1MF9ST1VUMl9WT0xVTUUsCiAJCQlXTTgzNTBfT1VUMl9WVSB8IFdNODM1MF9PVVQyUl9NVVRFKTsKIAorCXdtODM1MF9tYXNrX2lycSh3bTgzNTAsIFdNODM1MF9JUlFfQ09ERUNfSkNLX0RFVF9MKTsKKwl3bTgzNTBfbWFza19pcnEod204MzUwLCBXTTgzNTBfSVJRX0NPREVDX0pDS19ERVRfUik7CisJd204MzUwX3JlZ2lzdGVyX2lycSh3bTgzNTAsIFdNODM1MF9JUlFfQ09ERUNfSkNLX0RFVF9MLAorCQkJICAgIHdtODM1MF9ocF9qYWNrX2hhbmRsZXIsIHByaXYpOworCXdtODM1MF9yZWdpc3Rlcl9pcnEod204MzUwLCBXTTgzNTBfSVJRX0NPREVDX0pDS19ERVRfUiwKKwkJCSAgICB3bTgzNTBfaHBfamFja19oYW5kbGVyLCBwcml2KTsKKwogCXJldCA9IHNuZF9zb2NfbmV3X3BjbXMoc29jZGV2LCBTTkRSVl9ERUZBVUxUX0lEWDEsIFNORFJWX0RFRkFVTFRfU1RSMSk7CiAJaWYgKHJldCA8IDApIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGNyZWF0ZSBwY21zXG4iKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQl3bTgzNTBfYWRkX2NvbnRyb2xzKGNvZGVjKTsKKwlzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgd204MzUwX3NuZF9jb250cm9scywKKwkJCQlBUlJBWV9TSVpFKHdtODM1MF9zbmRfY29udHJvbHMpKTsKIAl3bTgzNTBfYWRkX3dpZGdldHMoY29kZWMpOwogCiAJd204MzUwX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7CkBAIC0xNDA5LDEwICsxNDk4LDIzIEBACiBzdGF0aWMgaW50IHdtODM1MF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlzdHJ1Y3Qgd204MzUwICp3bTgzNTAgPSBjb2RlYy0+Y29udHJvbF9kYXRhOworCXN0cnVjdCB3bTgzNTBfZGF0YSAqcHJpdiA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CiAJaW50IHJldDsKIAorCXdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwgV004MzUwX0pBQ0tfREVURUNULAorCQkJICBXTTgzNTBfSkRMX0VOQSB8IFdNODM1MF9KRFJfRU5BKTsKKwl3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsIFdNODM1MF9QT1dFUl9NR01UXzQsIFdNODM1MF9UT0NMS19FTkEpOworCisJd204MzUwX21hc2tfaXJxKHdtODM1MCwgV004MzUwX0lSUV9DT0RFQ19KQ0tfREVUX0wpOworCXdtODM1MF9tYXNrX2lycSh3bTgzNTAsIFdNODM1MF9JUlFfQ09ERUNfSkNLX0RFVF9SKTsKKwl3bTgzNTBfZnJlZV9pcnEod204MzUwLCBXTTgzNTBfSVJRX0NPREVDX0pDS19ERVRfTCk7CisJd204MzUwX2ZyZWVfaXJxKHdtODM1MCwgV004MzUwX0lSUV9DT0RFQ19KQ0tfREVUX1IpOworCisJcHJpdi0+aHBsLmphY2sgPSBOVUxMOworCXByaXYtPmhwci5qYWNrID0gTlVMTDsKKwogCS8qIGNhbmNlbCBhbnkgd29yayB3YWl0aW5nIHRvIGJlIHF1ZXVlZC4gKi8KIAlyZXQgPSBjYW5jZWxfZGVsYXllZF93b3JrKCZjb2RlYy0+ZGVsYXllZF93b3JrKTsKIApAQCAtMTQzNiw2ICsxNTM4LDE2IEBACiAJCQlTTkRSVl9QQ01fRk1UQklUX1MyMF8zTEUgfFwKIAkJCVNORFJWX1BDTV9GTVRCSVRfUzI0X0xFKQogCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyB3bTgzNTBfZGFpX29wcyA9IHsKKwkgLmh3X3BhcmFtcwk9IHdtODM1MF9wY21faHdfcGFyYW1zLAorCSAuZGlnaXRhbF9tdXRlCT0gd204MzUwX211dGUsCisJIC50cmlnZ2VyCT0gd204MzUwX3BjbV90cmlnZ2VyLAorCSAuc2V0X2ZtdAk9IHdtODM1MF9zZXRfZGFpX2ZtdCwKKwkgLnNldF9zeXNjbGsJPSB3bTgzNTBfc2V0X2RhaV9zeXNjbGssCisJIC5zZXRfcGxsCT0gd204MzUwX3NldF9mbGwsCisJIC5zZXRfY2xrZGl2CT0gd204MzUwX3NldF9jbGtkaXYsCit9OworCiBzdHJ1Y3Qgc25kX3NvY19kYWkgd204MzUwX2RhaSA9IHsKIAkubmFtZSA9ICJXTTgzNTAiLAogCS5wbGF5YmFjayA9IHsKQEAgLTE0NTIsMTUgKzE1NjQsNyBAQAogCQkgLnJhdGVzID0gV004MzUwX1JBVEVTLAogCQkgLmZvcm1hdHMgPSBXTTgzNTBfRk9STUFUUywKIAkgfSwKLQkub3BzID0gewotCQkgLmh3X3BhcmFtcyA9IHdtODM1MF9wY21faHdfcGFyYW1zLAotCQkgLmRpZ2l0YWxfbXV0ZSA9IHdtODM1MF9tdXRlLAotCQkgLnRyaWdnZXIgPSB3bTgzNTBfcGNtX3RyaWdnZXIsCi0JCSAuc2V0X2ZtdCA9IHdtODM1MF9zZXRfZGFpX2ZtdCwKLQkJIC5zZXRfc3lzY2xrID0gd204MzUwX3NldF9kYWlfc3lzY2xrLAotCQkgLnNldF9wbGwgPSB3bTgzNTBfc2V0X2ZsbCwKLQkJIC5zZXRfY2xrZGl2ID0gd204MzUwX3NldF9jbGtkaXYsCi0JIH0sCisJLm9wcyA9ICZ3bTgzNTBfZGFpX29wcywKIH07CiBFWFBPUlRfU1lNQk9MX0dQTCh3bTgzNTBfZGFpKTsKIApAQCAtMTQ3Miw3ICsxNTc2LDcgQEAKIH07CiBFWFBPUlRfU1lNQk9MX0dQTChzb2NfY29kZWNfZGV2X3dtODM1MCk7CiAKLXN0YXRpYyBpbnQgd204MzUwX2NvZGVjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgX19kZXZpbml0IGludCB3bTgzNTBfY29kZWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgd204MzUwICp3bTgzNTAgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3Qgd204MzUwX2RhdGEgKnByaXY7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODM1MC5oIGIvc291bmQvc29jL2NvZGVjcy93bTgzNTAuaAppbmRleCBjYzI4ODdhLi5kMTFiZDkyIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODM1MC5oCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204MzUwLmgKQEAgLTE3LDQgKzE3LDEyIEBACiBleHRlcm4gc3RydWN0IHNuZF9zb2NfZGFpIHdtODM1MF9kYWk7CiBleHRlcm4gc3RydWN0IHNuZF9zb2NfY29kZWNfZGV2aWNlIHNvY19jb2RlY19kZXZfd204MzUwOwogCitlbnVtIHdtODM1MF9qYWNrIHsKKwlXTTgzNTBfSkRMID0gMSwKKwlXTTgzNTBfSkRSID0gMiwKK307CisKK2ludCB3bTgzNTBfaHBfamFja19kZXRlY3Qoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBlbnVtIHdtODM1MF9qYWNrIHdoaWNoLAorCQkJICBzdHJ1Y3Qgc25kX3NvY19qYWNrICpqYWNrLCBpbnQgcmVwb3J0KTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODQwMC5jIGIvc291bmQvc29jL2NvZGVjcy93bTg0MDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTBlZmE2Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg0MDAuYwpAQCAtMCwwICsxLDE1ODIgQEAKKy8qCisgKiB3bTg0MDAuYyAgLS0gIFdNODQwMCBBTFNBIFNvYyBBdWRpbyBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCwgMjAwOSBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDLgorICogQXV0aG9yOiBNYXJrIEJyb3duIDxicm9vbmllQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvd204NDAwLWF1ZGlvLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3dtODQwMC1wcml2YXRlLmg+CisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxzb3VuZC90bHYuaD4KKworI2luY2x1ZGUgIndtODQwMC5oIgorCisvKiBGYWtlIHJlZ2lzdGVyIGZvciBpbnRlcm5hbCBzdGF0ZSAqLworI2RlZmluZSBXTTg0MDBfSU5URFJJVkJJVFMgICAgICAoV004NDAwX1JFR0lTVEVSX0NPVU5UICsgMSkKKyNkZWZpbmUgV004NDAwX0lOTUlYTF9QV1IJCQkwCisjZGVmaW5lIFdNODQwMF9BSU5MTVVYX1BXUgkJCTEKKyNkZWZpbmUgV004NDAwX0lOTUlYUl9QV1IJCQkyCisjZGVmaW5lIFdNODQwMF9BSU5STVVYX1BXUgkJCTMKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfYnVsa19kYXRhIHBvd2VyW10gPSB7CisJeworCQkuc3VwcGx5ID0gIkkyUzFWREQiLAorCX0sCisJeworCQkuc3VwcGx5ID0gIkkyUzJWREQiLAorCX0sCisJeworCQkuc3VwcGx5ID0gIkRDVkREIiwKKwl9LAorCXsKKwkJLnN1cHBseSA9ICJBVkREIiwKKwl9LAorCXsKKwkJLnN1cHBseSA9ICJGTExWREQiLAorCX0sCisJeworCQkuc3VwcGx5ID0gIkhQVkREIiwKKwl9LAorCXsKKwkJLnN1cHBseSA9ICJTUEtWREQiLAorCX0sCit9OworCisvKiBjb2RlYyBwcml2YXRlIGRhdGEgKi8KK3N0cnVjdCB3bTg0MDBfcHJpdiB7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgY29kZWM7CisJc3RydWN0IHdtODQwMCAqd204NDAwOworCXUxNiBmYWtlX3JlZ2lzdGVyOworCXVuc2lnbmVkIGludCBzeXNjbGs7CisJdW5zaWduZWQgaW50IHBjbWNsazsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKKwlpbnQgZmxsX2luLCBmbGxfb3V0OworfTsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgd204NDAwX3JlYWQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgcmVnKQoreworCXN0cnVjdCB3bTg0MDBfcHJpdiAqd204NDAwID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKworCWlmIChyZWcgPT0gV004NDAwX0lOVERSSVZCSVRTKQorCQlyZXR1cm4gd204NDAwLT5mYWtlX3JlZ2lzdGVyOworCWVsc2UKKwkJcmV0dXJuIHdtODQwMF9yZWdfcmVhZCh3bTg0MDAtPndtODQwMCwgcmVnKTsKK30KKworLyoKKyAqIHdyaXRlIHRvIHRoZSB3bTg0MDAgcmVnaXN0ZXIgc3BhY2UKKyAqLworc3RhdGljIGludCB3bTg0MDBfd3JpdGUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgcmVnLAorCXVuc2lnbmVkIGludCB2YWx1ZSkKK3sKKwlzdHJ1Y3Qgd204NDAwX3ByaXYgKndtODQwMCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisKKwlpZiAocmVnID09IFdNODQwMF9JTlREUklWQklUUykgeworCQl3bTg0MDAtPmZha2VfcmVnaXN0ZXIgPSB2YWx1ZTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlCisJCXJldHVybiB3bTg0MDBfc2V0X2JpdHMod204NDAwLT53bTg0MDAsIHJlZywgMHhmZmZmLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHdtODQwMF9jb2RlY19yZXNldChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IHdtODQwMF9wcml2ICp3bTg0MDAgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCisJd204NDAwX3Jlc2V0X2NvZGVjX3JlZ19jYWNoZSh3bTg0MDAtPndtODQwMCk7Cit9CisKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9MSU5FQVIocmVjX21peF90bHYsIC0xNTAwLCA2MDApOworCitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfTElORUFSKGluX3BnYV90bHYsIC0xNjUwLCAzMDAwKTsKKworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX0xJTkVBUihvdXRfbWl4X3RsdiwgLTIxMDAsIDApOworCitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfTElORUFSKG91dF9wZ2FfdGx2LCAtNzMwMCwgNjAwKTsKKworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX0xJTkVBUihvdXRfb21peF90bHYsIC02MDAsIDApOworCitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfTElORUFSKG91dF9kYWNfdGx2LCAtNzE2MywgMCk7CisKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9MSU5FQVIoaW5fYWRjX3RsdiwgLTcxNjMsIDE3NjMpOworCitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfTElORUFSKG91dF9zaWRldG9uZV90bHYsIC0zNjAwLCAwKTsKKworc3RhdGljIGludCB3bTg0MDBfb3V0cGdhX3B1dF92b2xzd192dShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKyAgICAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisgICAgICAgIHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlzdHJ1Y3Qgc29jX21peGVyX2NvbnRyb2wgKm1jID0KKwkJKHN0cnVjdCBzb2NfbWl4ZXJfY29udHJvbCAqKWtjb250cm9sLT5wcml2YXRlX3ZhbHVlOworCWludCByZWcgPSBtYy0+cmVnOworICAgICAgICBpbnQgcmV0OworICAgICAgICB1MTYgdmFsOworCisgICAgICAgIHJldCA9IHNuZF9zb2NfcHV0X3ZvbHN3KGtjb250cm9sLCB1Y29udHJvbCk7CisgICAgICAgIGlmIChyZXQgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CisKKyAgICAgICAgLyogbm93IGhpdCB0aGUgdm9sdW1lIHVwZGF0ZSBiaXRzIChhbHdheXMgYml0IDgpICovCisgICAgICAgIHZhbCA9IHdtODQwMF9yZWFkKGNvZGVjLCByZWcpOworICAgICAgICByZXR1cm4gd204NDAwX3dyaXRlKGNvZGVjLCByZWcsIHZhbCB8IDB4MDEwMCk7Cit9CisKKyNkZWZpbmUgV004NDAwX09VVFBHQV9TSU5HTEVfUl9UTFYoeG5hbWUsIHJlZywgc2hpZnQsIG1heCwgaW52ZXJ0LCB0bHZfYXJyYXkpIFwKK3sJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIC5uYW1lID0gKHhuYW1lKSwgXAorCS5hY2Nlc3MgPSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVExWX1JFQUQgfFwKKwkJU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQURXUklURSxcCisJLnRsdi5wID0gKHRsdl9hcnJheSksIFwKKwkuaW5mbyA9IHNuZF9zb2NfaW5mb192b2xzdywgXAorCS5nZXQgPSBzbmRfc29jX2dldF92b2xzdywgLnB1dCA9IHdtODQwMF9vdXRwZ2FfcHV0X3ZvbHN3X3Z1LCBcCisJLnByaXZhdGVfdmFsdWUgPSBTT0NfU0lOR0xFX1ZBTFVFKHJlZywgc2hpZnQsIG1heCwgaW52ZXJ0KSB9CisKKworc3RhdGljIGNvbnN0IGNoYXIgKndtODQwMF9kaWdpdGFsX3NpZGV0b25lW10gPQorCXsiTm9uZSIsICJMZWZ0IEFEQyIsICJSaWdodCBBREMiLCAiUmVzZXJ2ZWQifTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSB3bTg0MDBfbGVmdF9kaWdpdGFsX3NpZGV0b25lX2VudW0gPQorU09DX0VOVU1fU0lOR0xFKFdNODQwMF9ESUdJVEFMX1NJREVfVE9ORSwKKwkJV004NDAwX0FEQ19UT19EQUNMX1NISUZULCAyLCB3bTg0MDBfZGlnaXRhbF9zaWRldG9uZSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gd204NDAwX3JpZ2h0X2RpZ2l0YWxfc2lkZXRvbmVfZW51bSA9CitTT0NfRU5VTV9TSU5HTEUoV004NDAwX0RJR0lUQUxfU0lERV9UT05FLAorCQlXTTg0MDBfQURDX1RPX0RBQ1JfU0hJRlQsIDIsIHdtODQwMF9kaWdpdGFsX3NpZGV0b25lKTsKKworc3RhdGljIGNvbnN0IGNoYXIgKndtODQwMF9hZGNtb2RlW10gPQorCXsiSGktZmkgbW9kZSIsICJWb2ljZSBtb2RlIDEiLCAiVm9pY2UgbW9kZSAyIiwgIlZvaWNlIG1vZGUgMyJ9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIHdtODQwMF9yaWdodF9hZGNtb2RlX2VudW0gPQorU09DX0VOVU1fU0lOR0xFKFdNODQwMF9BRENfQ1RSTCwgV004NDAwX0FEQ19IUEZfQ1VUX1NISUZULCAzLCB3bTg0MDBfYWRjbW9kZSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg0MDBfc25kX2NvbnRyb2xzW10gPSB7CisvKiBJTk1JWEwgKi8KK1NPQ19TSU5HTEUoIkxJTjEyIFBHQSBCb29zdCIsIFdNODQwMF9JTlBVVF9NSVhFUjMsIFdNODQwMF9MMTJNTkJTVF9TSElGVCwKKwkgICAxLCAwKSwKK1NPQ19TSU5HTEUoIkxJTjM0IFBHQSBCb29zdCIsIFdNODQwMF9JTlBVVF9NSVhFUjMsIFdNODQwMF9MMzRNTkJTVF9TSElGVCwKKwkgICAxLCAwKSwKKy8qIElOTUlYUiAqLworU09DX1NJTkdMRSgiUklOMTIgUEdBIEJvb3N0IiwgV004NDAwX0lOUFVUX01JWEVSMywgV004NDAwX1IxMk1OQlNUX1NISUZULAorCSAgIDEsIDApLAorU09DX1NJTkdMRSgiUklOMzQgUEdBIEJvb3N0IiwgV004NDAwX0lOUFVUX01JWEVSMywgV004NDAwX1IzNE1OQlNUX1NISUZULAorCSAgIDEsIDApLAorCisvKiBMT01JWCAqLworU09DX1NJTkdMRV9UTFYoIkxPTUlYIExJTjMgQnlwYXNzIFZvbHVtZSIsIFdNODQwMF9PVVRQVVRfTUlYRVIzLAorCVdNODQwMF9MTEkzTE9WT0xfU0hJRlQsIDcsIDAsIG91dF9taXhfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJMT01JWCBSSU4xMiBQR0EgQnlwYXNzIFZvbHVtZSIsIFdNODQwMF9PVVRQVVRfTUlYRVIzLAorCVdNODQwMF9MUjEyTE9WT0xfU0hJRlQsIDcsIDAsIG91dF9taXhfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJMT01JWCBMSU4xMiBQR0EgQnlwYXNzIFZvbHVtZSIsIFdNODQwMF9PVVRQVVRfTUlYRVIzLAorCVdNODQwMF9MTDEyTE9WT0xfU0hJRlQsIDcsIDAsIG91dF9taXhfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJMT01JWCBSSU4zIEJ5cGFzcyBWb2x1bWUiLCBXTTg0MDBfT1VUUFVUX01JWEVSNSwKKwlXTTg0MDBfTFJJM0xPVk9MX1NISUZULCA3LCAwLCBvdXRfbWl4X3RsdiksCitTT0NfU0lOR0xFX1RMVigiTE9NSVggQUlOUk1VWCBCeXBhc3MgVm9sdW1lIiwgV004NDAwX09VVFBVVF9NSVhFUjUsCisJV004NDAwX0xSQkxPVk9MX1NISUZULCA3LCAwLCBvdXRfbWl4X3RsdiksCitTT0NfU0lOR0xFX1RMVigiTE9NSVggQUlOTE1VWCBCeXBhc3MgVm9sdW1lIiwgV004NDAwX09VVFBVVF9NSVhFUjUsCisJV004NDAwX0xSQkxPVk9MX1NISUZULCA3LCAwLCBvdXRfbWl4X3RsdiksCisKKy8qIFJPTUlYICovCitTT0NfU0lOR0xFX1RMVigiUk9NSVggUklOMyBCeXBhc3MgVm9sdW1lIiwgV004NDAwX09VVFBVVF9NSVhFUjQsCisJV004NDAwX1JSSTNST1ZPTF9TSElGVCwgNywgMCwgb3V0X21peF90bHYpLAorU09DX1NJTkdMRV9UTFYoIlJPTUlYIExJTjEyIFBHQSBCeXBhc3MgVm9sdW1lIiwgV004NDAwX09VVFBVVF9NSVhFUjQsCisJV004NDAwX1JMMTJST1ZPTF9TSElGVCwgNywgMCwgb3V0X21peF90bHYpLAorU09DX1NJTkdMRV9UTFYoIlJPTUlYIFJJTjEyIFBHQSBCeXBhc3MgVm9sdW1lIiwgV004NDAwX09VVFBVVF9NSVhFUjQsCisJV004NDAwX1JSMTJST1ZPTF9TSElGVCwgNywgMCwgb3V0X21peF90bHYpLAorU09DX1NJTkdMRV9UTFYoIlJPTUlYIExJTjMgQnlwYXNzIFZvbHVtZSIsIFdNODQwMF9PVVRQVVRfTUlYRVI2LAorCVdNODQwMF9STEkzUk9WT0xfU0hJRlQsIDcsIDAsIG91dF9taXhfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJST01JWCBBSU5MTVVYIEJ5cGFzcyBWb2x1bWUiLCBXTTg0MDBfT1VUUFVUX01JWEVSNiwKKwlXTTg0MDBfUkxCUk9WT0xfU0hJRlQsIDcsIDAsIG91dF9taXhfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJST01JWCBBSU5STVVYIEJ5cGFzcyBWb2x1bWUiLCBXTTg0MDBfT1VUUFVUX01JWEVSNiwKKwlXTTg0MDBfUlJCUk9WT0xfU0hJRlQsIDcsIDAsIG91dF9taXhfdGx2KSwKKworLyogTE9VVCAqLworV004NDAwX09VVFBHQV9TSU5HTEVfUl9UTFYoIkxPVVQgVm9sdW1lIiwgV004NDAwX0xFRlRfT1VUUFVUX1ZPTFVNRSwKKwlXTTg0MDBfTE9VVFZPTF9TSElGVCwgV004NDAwX0xPVVRWT0xfTUFTSywgMCwgb3V0X3BnYV90bHYpLAorU09DX1NJTkdMRSgiTE9VVCBaQyIsIFdNODQwMF9MRUZUX09VVFBVVF9WT0xVTUUsIFdNODQwMF9MT1pDX1NISUZULCAxLCAwKSwKKworLyogUk9VVCAqLworV004NDAwX09VVFBHQV9TSU5HTEVfUl9UTFYoIlJPVVQgVm9sdW1lIiwgV004NDAwX1JJR0hUX09VVFBVVF9WT0xVTUUsCisJV004NDAwX1JPVVRWT0xfU0hJRlQsIFdNODQwMF9ST1VUVk9MX01BU0ssIDAsIG91dF9wZ2FfdGx2KSwKK1NPQ19TSU5HTEUoIlJPVVQgWkMiLCBXTTg0MDBfUklHSFRfT1VUUFVUX1ZPTFVNRSwgV004NDAwX1JPWkNfU0hJRlQsIDEsIDApLAorCisvKiBMT1BHQSAqLworV004NDAwX09VVFBHQV9TSU5HTEVfUl9UTFYoIkxPUEdBIFZvbHVtZSIsIFdNODQwMF9MRUZUX09QR0FfVk9MVU1FLAorCVdNODQwMF9MT1BHQVZPTF9TSElGVCwgV004NDAwX0xPUEdBVk9MX01BU0ssIDAsIG91dF9wZ2FfdGx2KSwKK1NPQ19TSU5HTEUoIkxPUEdBIFpDIFN3aXRjaCIsIFdNODQwMF9MRUZUX09QR0FfVk9MVU1FLAorCVdNODQwMF9MT1BHQVpDX1NISUZULCAxLCAwKSwKKworLyogUk9QR0EgKi8KK1dNODQwMF9PVVRQR0FfU0lOR0xFX1JfVExWKCJST1BHQSBWb2x1bWUiLCBXTTg0MDBfUklHSFRfT1BHQV9WT0xVTUUsCisJV004NDAwX1JPUEdBVk9MX1NISUZULCBXTTg0MDBfUk9QR0FWT0xfTUFTSywgMCwgb3V0X3BnYV90bHYpLAorU09DX1NJTkdMRSgiUk9QR0EgWkMgU3dpdGNoIiwgV004NDAwX1JJR0hUX09QR0FfVk9MVU1FLAorCVdNODQwMF9ST1BHQVpDX1NISUZULCAxLCAwKSwKKworU09DX1NJTkdMRSgiTE9OIE11dGUgU3dpdGNoIiwgV004NDAwX0xJTkVfT1VUUFVUU19WT0xVTUUsCisJV004NDAwX0xPTk1VVEVfU0hJRlQsIDEsIDApLAorU09DX1NJTkdMRSgiTE9QIE11dGUgU3dpdGNoIiwgV004NDAwX0xJTkVfT1VUUFVUU19WT0xVTUUsCisJV004NDAwX0xPUE1VVEVfU0hJRlQsIDEsIDApLAorU09DX1NJTkdMRSgiTE9QIEF0dGVudWF0aW9uIFN3aXRjaCIsIFdNODQwMF9MSU5FX09VVFBVVFNfVk9MVU1FLAorCVdNODQwMF9MT0FUVE5fU0hJRlQsIDEsIDApLAorU09DX1NJTkdMRSgiUk9OIE11dGUgU3dpdGNoIiwgV004NDAwX0xJTkVfT1VUUFVUU19WT0xVTUUsCisJV004NDAwX1JPTk1VVEVfU0hJRlQsIDEsIDApLAorU09DX1NJTkdMRSgiUk9QIE11dGUgU3dpdGNoIiwgV004NDAwX0xJTkVfT1VUUFVUU19WT0xVTUUsCisJV004NDAwX1JPUE1VVEVfU0hJRlQsIDEsIDApLAorU09DX1NJTkdMRSgiUk9QIEF0dGVudWF0aW9uIFN3aXRjaCIsIFdNODQwMF9MSU5FX09VVFBVVFNfVk9MVU1FLAorCVdNODQwMF9ST0FUVE5fU0hJRlQsIDEsIDApLAorCitTT0NfU0lOR0xFKCJPVVQzIE11dGUgU3dpdGNoIiwgV004NDAwX09VVDNfNF9WT0xVTUUsCisJV004NDAwX09VVDNNVVRFX1NISUZULCAxLCAwKSwKK1NPQ19TSU5HTEUoIk9VVDMgQXR0ZW51YXRpb24gU3dpdGNoIiwgV004NDAwX09VVDNfNF9WT0xVTUUsCisJV004NDAwX09VVDNBVFROX1NISUZULCAxLCAwKSwKKworU09DX1NJTkdMRSgiT1VUNCBNdXRlIFN3aXRjaCIsIFdNODQwMF9PVVQzXzRfVk9MVU1FLAorCVdNODQwMF9PVVQ0TVVURV9TSElGVCwgMSwgMCksCitTT0NfU0lOR0xFKCJPVVQ0IEF0dGVudWF0aW9uIFN3aXRjaCIsIFdNODQwMF9PVVQzXzRfVk9MVU1FLAorCVdNODQwMF9PVVQ0QVRUTl9TSElGVCwgMSwgMCksCisKK1NPQ19TSU5HTEUoIlNwZWFrZXIgTW9kZSBTd2l0Y2giLCBXTTg0MDBfQ0xBU1NEMSwKKwlXTTg0MDBfQ0RNT0RFX1NISUZULCAxLCAwKSwKKworU09DX1NJTkdMRSgiU3BlYWtlciBPdXRwdXQgQXR0ZW51YXRpb24gVm9sdW1lIiwgV004NDAwX1NQRUFLRVJfVk9MVU1FLAorCVdNODQwMF9TUEtBVFROX1NISUZULCBXTTg0MDBfU1BLQVRUTl9NQVNLLCAwKSwKK1NPQ19TSU5HTEUoIlNwZWFrZXIgREMgQm9vc3QgVm9sdW1lIiwgV004NDAwX0NMQVNTRDMsCisJV004NDAwX0RDR0FJTl9TSElGVCwgNiwgMCksCitTT0NfU0lOR0xFKCJTcGVha2VyIEFDIEJvb3N0IFZvbHVtZSIsIFdNODQwMF9DTEFTU0QzLAorCVdNODQwMF9BQ0dBSU5fU0hJRlQsIDYsIDApLAorCitXTTg0MDBfT1VUUEdBX1NJTkdMRV9SX1RMVigiTGVmdCBEQUMgRGlnaXRhbCBWb2x1bWUiLAorCVdNODQwMF9MRUZUX0RBQ19ESUdJVEFMX1ZPTFVNRSwgV004NDAwX0RBQ0xfVk9MX1NISUZULAorCTEyNywgMCwgb3V0X2RhY190bHYpLAorCitXTTg0MDBfT1VUUEdBX1NJTkdMRV9SX1RMVigiUmlnaHQgREFDIERpZ2l0YWwgVm9sdW1lIiwKKwlXTTg0MDBfUklHSFRfREFDX0RJR0lUQUxfVk9MVU1FLCBXTTg0MDBfREFDUl9WT0xfU0hJRlQsCisJMTI3LCAwLCBvdXRfZGFjX3RsdiksCisKK1NPQ19FTlVNKCJMZWZ0IERpZ2l0YWwgU2lkZXRvbmUiLCB3bTg0MDBfbGVmdF9kaWdpdGFsX3NpZGV0b25lX2VudW0pLAorU09DX0VOVU0oIlJpZ2h0IERpZ2l0YWwgU2lkZXRvbmUiLCB3bTg0MDBfcmlnaHRfZGlnaXRhbF9zaWRldG9uZV9lbnVtKSwKKworU09DX1NJTkdMRV9UTFYoIkxlZnQgRGlnaXRhbCBTaWRldG9uZSBWb2x1bWUiLCBXTTg0MDBfRElHSVRBTF9TSURFX1RPTkUsCisJV004NDAwX0FEQ0xfREFDX1NWT0xfU0hJRlQsIDE1LCAwLCBvdXRfc2lkZXRvbmVfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJSaWdodCBEaWdpdGFsIFNpZGV0b25lIFZvbHVtZSIsIFdNODQwMF9ESUdJVEFMX1NJREVfVE9ORSwKKwlXTTg0MDBfQURDUl9EQUNfU1ZPTF9TSElGVCwgMTUsIDAsIG91dF9zaWRldG9uZV90bHYpLAorCitTT0NfU0lOR0xFKCJBREMgRGlnaXRhbCBIaWdoIFBhc3MgRmlsdGVyIFN3aXRjaCIsIFdNODQwMF9BRENfQ1RSTCwKKwlXTTg0MDBfQURDX0hQRl9FTkFfU0hJRlQsIDEsIDApLAorCitTT0NfRU5VTSgiQURDIEhQRiBNb2RlIiwgd204NDAwX3JpZ2h0X2FkY21vZGVfZW51bSksCisKK1dNODQwMF9PVVRQR0FfU0lOR0xFX1JfVExWKCJMZWZ0IEFEQyBEaWdpdGFsIFZvbHVtZSIsCisJV004NDAwX0xFRlRfQURDX0RJR0lUQUxfVk9MVU1FLAorCVdNODQwMF9BRENMX1ZPTF9TSElGVCwKKwlXTTg0MDBfQURDTF9WT0xfTUFTSywKKwkwLAorCWluX2FkY190bHYpLAorCitXTTg0MDBfT1VUUEdBX1NJTkdMRV9SX1RMVigiUmlnaHQgQURDIERpZ2l0YWwgVm9sdW1lIiwKKwlXTTg0MDBfUklHSFRfQURDX0RJR0lUQUxfVk9MVU1FLAorCVdNODQwMF9BRENSX1ZPTF9TSElGVCwKKwlXTTg0MDBfQURDUl9WT0xfTUFTSywKKwkwLAorCWluX2FkY190bHYpLAorCitXTTg0MDBfT1VUUEdBX1NJTkdMRV9SX1RMVigiTElOMTIgVm9sdW1lIiwKKwlXTTg0MDBfTEVGVF9MSU5FX0lOUFVUXzFfMl9WT0xVTUUsCisJV004NDAwX0xJTjEyVk9MX1NISUZULAorCVdNODQwMF9MSU4xMlZPTF9NQVNLLAorCTAsCisJaW5fcGdhX3RsdiksCisKK1NPQ19TSU5HTEUoIkxJTjEyIFpDIFN3aXRjaCIsIFdNODQwMF9MRUZUX0xJTkVfSU5QVVRfMV8yX1ZPTFVNRSwKKwlXTTg0MDBfTEkxMlpDX1NISUZULCAxLCAwKSwKKworU09DX1NJTkdMRSgiTElOMTIgTXV0ZSBTd2l0Y2giLCBXTTg0MDBfTEVGVF9MSU5FX0lOUFVUXzFfMl9WT0xVTUUsCisJV004NDAwX0xJMTJNVVRFX1NISUZULCAxLCAwKSwKKworV004NDAwX09VVFBHQV9TSU5HTEVfUl9UTFYoIkxJTjM0IFZvbHVtZSIsCisJV004NDAwX0xFRlRfTElORV9JTlBVVF8zXzRfVk9MVU1FLAorCVdNODQwMF9MSU4zNFZPTF9TSElGVCwKKwlXTTg0MDBfTElOMzRWT0xfTUFTSywKKwkwLAorCWluX3BnYV90bHYpLAorCitTT0NfU0lOR0xFKCJMSU4zNCBaQyBTd2l0Y2giLCBXTTg0MDBfTEVGVF9MSU5FX0lOUFVUXzNfNF9WT0xVTUUsCisJV004NDAwX0xJMzRaQ19TSElGVCwgMSwgMCksCisKK1NPQ19TSU5HTEUoIkxJTjM0IE11dGUgU3dpdGNoIiwgV004NDAwX0xFRlRfTElORV9JTlBVVF8zXzRfVk9MVU1FLAorCVdNODQwMF9MSTM0TVVURV9TSElGVCwgMSwgMCksCisKK1dNODQwMF9PVVRQR0FfU0lOR0xFX1JfVExWKCJSSU4xMiBWb2x1bWUiLAorCVdNODQwMF9SSUdIVF9MSU5FX0lOUFVUXzFfMl9WT0xVTUUsCisJV004NDAwX1JJTjEyVk9MX1NISUZULAorCVdNODQwMF9SSU4xMlZPTF9NQVNLLAorCTAsCisJaW5fcGdhX3RsdiksCisKK1NPQ19TSU5HTEUoIlJJTjEyIFpDIFN3aXRjaCIsIFdNODQwMF9SSUdIVF9MSU5FX0lOUFVUXzFfMl9WT0xVTUUsCisJV004NDAwX1JJMTJaQ19TSElGVCwgMSwgMCksCisKK1NPQ19TSU5HTEUoIlJJTjEyIE11dGUgU3dpdGNoIiwgV004NDAwX1JJR0hUX0xJTkVfSU5QVVRfMV8yX1ZPTFVNRSwKKwlXTTg0MDBfUkkxMk1VVEVfU0hJRlQsIDEsIDApLAorCitXTTg0MDBfT1VUUEdBX1NJTkdMRV9SX1RMVigiUklOMzQgVm9sdW1lIiwKKwlXTTg0MDBfUklHSFRfTElORV9JTlBVVF8zXzRfVk9MVU1FLAorCVdNODQwMF9SSU4zNFZPTF9TSElGVCwKKwlXTTg0MDBfUklOMzRWT0xfTUFTSywKKwkwLAorCWluX3BnYV90bHYpLAorCitTT0NfU0lOR0xFKCJSSU4zNCBaQyBTd2l0Y2giLCBXTTg0MDBfUklHSFRfTElORV9JTlBVVF8zXzRfVk9MVU1FLAorCVdNODQwMF9SSTM0WkNfU0hJRlQsIDEsIDApLAorCitTT0NfU0lOR0xFKCJSSU4zNCBNdXRlIFN3aXRjaCIsIFdNODQwMF9SSUdIVF9MSU5FX0lOUFVUXzNfNF9WT0xVTUUsCisJV004NDAwX1JJMzRNVVRFX1NISUZULCAxLCAwKSwKKworfTsKKworLyogYWRkIG5vbiBkYXBtIGNvbnRyb2xzICovCitzdGF0aWMgaW50IHdtODQwMF9hZGRfY29udHJvbHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXJldHVybiBzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgd204NDAwX3NuZF9jb250cm9scywKKwkJCQlBUlJBWV9TSVpFKHdtODQwMF9zbmRfY29udHJvbHMpKTsKK30KKworLyoKKyAqIF9EQVBNXyBDb250cm9scworICovCisKK3N0YXRpYyBpbnQgaW5taXhlcl9ldmVudCAoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCisJc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKK3sKKwl1MTYgcmVnLCBmYWtlcG93ZXI7CisKKwlyZWcgPSB3bTg0MDBfcmVhZCh3LT5jb2RlYywgV004NDAwX1BPV0VSX01BTkFHRU1FTlRfMik7CisJZmFrZXBvd2VyID0gd204NDAwX3JlYWQody0+Y29kZWMsIFdNODQwMF9JTlREUklWQklUUyk7CisKKwlpZiAoZmFrZXBvd2VyICYgKCgxIDw8IFdNODQwMF9JTk1JWExfUFdSKSB8CisJCSgxIDw8IFdNODQwMF9BSU5MTVVYX1BXUikpKSB7CisJCXJlZyB8PSBXTTg0MDBfQUlOTF9FTkE7CisJfSBlbHNlIHsKKwkJcmVnICY9IH5XTTg0MDBfQUlOTF9FTkE7CisJfQorCisJaWYgKGZha2Vwb3dlciAmICgoMSA8PCBXTTg0MDBfSU5NSVhSX1BXUikgfAorCQkoMSA8PCBXTTg0MDBfQUlOUk1VWF9QV1IpKSkgeworCQlyZWcgfD0gV004NDAwX0FJTlJfRU5BOworCX0gZWxzZSB7CisJCXJlZyAmPSB+V004NDAwX0FJTkxfRU5BOworCX0KKwl3bTg0MDBfd3JpdGUody0+Y29kZWMsIFdNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzIsIHJlZyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvdXRtaXhlcl9ldmVudCAoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCisJc3RydWN0IHNuZF9rY29udHJvbCAqIGtjb250cm9sLCBpbnQgZXZlbnQpCit7CisJc3RydWN0IHNvY19taXhlcl9jb250cm9sICptYyA9CisJCShzdHJ1Y3Qgc29jX21peGVyX2NvbnRyb2wgKilrY29udHJvbC0+cHJpdmF0ZV92YWx1ZTsKKwl1MzIgcmVnX3NoaWZ0ID0gbWMtPnNoaWZ0OworCWludCByZXQgPSAwOworCXUxNiByZWc7CisKKwlzd2l0Y2ggKHJlZ19zaGlmdCkgeworCWNhc2UgV004NDAwX1NQRUFLRVJfTUlYRVIgfCAoV004NDAwX0xEU1BLIDw8IDgpIDoKKwkJcmVnID0gd204NDAwX3JlYWQody0+Y29kZWMsIFdNODQwMF9PVVRQVVRfTUlYRVIxKTsKKwkJaWYgKHJlZyAmIFdNODQwMF9MRExPKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkiQ2Fubm90IHNldCBhcyBPdXRwdXQgTWl4ZXIgMSBMRExPIFNldFxuIik7CisJCQlyZXQgPSAtMTsKKwkJfQorCQlicmVhazsKKwljYXNlIFdNODQwMF9TUEVBS0VSX01JWEVSIHwgKFdNODQwMF9SRFNQSyA8PCA4KToKKwkJcmVnID0gd204NDAwX3JlYWQody0+Y29kZWMsIFdNODQwMF9PVVRQVVRfTUlYRVIyKTsKKwkJaWYgKHJlZyAmIFdNODQwMF9SRFJPKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkiQ2Fubm90IHNldCBhcyBPdXRwdXQgTWl4ZXIgMiBSRFJPIFNldFxuIik7CisJCQlyZXQgPSAtMTsKKwkJfQorCQlicmVhazsKKwljYXNlIFdNODQwMF9PVVRQVVRfTUlYRVIxIHwgKFdNODQwMF9MRExPIDw8IDgpOgorCQlyZWcgPSB3bTg0MDBfcmVhZCh3LT5jb2RlYywgV004NDAwX1NQRUFLRVJfTUlYRVIpOworCQlpZiAocmVnICYgV004NDAwX0xEU1BLKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkiQ2Fubm90IHNldCBhcyBTcGVha2VyIE1peGVyIExEU1BLIFNldFxuIik7CisJCQlyZXQgPSAtMTsKKwkJfQorCQlicmVhazsKKwljYXNlIFdNODQwMF9PVVRQVVRfTUlYRVIyIHwgKFdNODQwMF9SRFJPIDw8IDgpOgorCQlyZWcgPSB3bTg0MDBfcmVhZCh3LT5jb2RlYywgV004NDAwX1NQRUFLRVJfTUlYRVIpOworCQlpZiAocmVnICYgV004NDAwX1JEU1BLKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkiQ2Fubm90IHNldCBhcyBTcGVha2VyIE1peGVyIFJEU1BLIFNldFxuIik7CisJCQlyZXQgPSAtMTsKKwkJfQorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKiBJTk1JWCBkQiB2YWx1ZXMgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgaW5fbWl4X3RsdltdID0geworCVRMVl9EQl9SQU5HRV9IRUFEKDEpLAorCTAsNywgVExWX0RCX0xJTkVBUl9JVEVNKC0xMjAwLCA2MDApLAorfTsKKworLyogTGVmdCBJbiBQR0EgQ29ubmVjdGlvbnMgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg0MDBfZGFwbV9saW4xMl9wZ2FfY29udHJvbHNbXSA9IHsKK1NPQ19EQVBNX1NJTkdMRSgiTElOMSBTd2l0Y2giLCBXTTg0MDBfSU5QVVRfTUlYRVIyLCBXTTg0MDBfTE1OMV9TSElGVCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIkxJTjIgU3dpdGNoIiwgV004NDAwX0lOUFVUX01JWEVSMiwgV004NDAwX0xNUDJfU0hJRlQsIDEsIDApLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODQwMF9kYXBtX2xpbjM0X3BnYV9jb250cm9sc1tdID0geworU09DX0RBUE1fU0lOR0xFKCJMSU4zIFN3aXRjaCIsIFdNODQwMF9JTlBVVF9NSVhFUjIsIFdNODQwMF9MTU4zX1NISUZULCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiTElONCBTd2l0Y2giLCBXTTg0MDBfSU5QVVRfTUlYRVIyLCBXTTg0MDBfTE1QNF9TSElGVCwgMSwgMCksCit9OworCisvKiBSaWdodCBJbiBQR0EgQ29ubmVjdGlvbnMgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg0MDBfZGFwbV9yaW4xMl9wZ2FfY29udHJvbHNbXSA9IHsKK1NPQ19EQVBNX1NJTkdMRSgiUklOMSBTd2l0Y2giLCBXTTg0MDBfSU5QVVRfTUlYRVIyLCBXTTg0MDBfUk1OMV9TSElGVCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIlJJTjIgU3dpdGNoIiwgV004NDAwX0lOUFVUX01JWEVSMiwgV004NDAwX1JNUDJfU0hJRlQsIDEsIDApLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODQwMF9kYXBtX3JpbjM0X3BnYV9jb250cm9sc1tdID0geworU09DX0RBUE1fU0lOR0xFKCJSSU4zIFN3aXRjaCIsIFdNODQwMF9JTlBVVF9NSVhFUjIsIFdNODQwMF9STU4zX1NISUZULCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiUklONCBTd2l0Y2giLCBXTTg0MDBfSU5QVVRfTUlYRVIyLCBXTTg0MDBfUk1QNF9TSElGVCwgMSwgMCksCit9OworCisvKiBJTk1JWEwgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg0MDBfZGFwbV9pbm1peGxfY29udHJvbHNbXSA9IHsKK1NPQ19EQVBNX1NJTkdMRV9UTFYoIlJlY29yZCBMZWZ0IFZvbHVtZSIsIFdNODQwMF9JTlBVVF9NSVhFUjMsCisJV004NDAwX0xEQlZPTF9TSElGVCwgV004NDAwX0xEQlZPTF9NQVNLLCAwLCBpbl9taXhfdGx2KSwKK1NPQ19EQVBNX1NJTkdMRV9UTFYoIkxJTjIgVm9sdW1lIiwgV004NDAwX0lOUFVUX01JWEVSNSwgV004NDAwX0xJMkJWT0xfU0hJRlQsCisJNywgMCwgaW5fbWl4X3RsdiksCitTT0NfREFQTV9TSU5HTEUoIkxJTlBHQTEyIFN3aXRjaCIsIFdNODQwMF9JTlBVVF9NSVhFUjMsIFdNODQwMF9MMTJNTkJfU0hJRlQsCisJCTEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJMSU5QR0EzNCBTd2l0Y2giLCBXTTg0MDBfSU5QVVRfTUlYRVIzLCBXTTg0MDBfTDM0TU5CX1NISUZULAorCQkxLCAwKSwKK307CisKKy8qIElOTUlYUiAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODQwMF9kYXBtX2lubWl4cl9jb250cm9sc1tdID0geworU09DX0RBUE1fU0lOR0xFX1RMVigiUmVjb3JkIFJpZ2h0IFZvbHVtZSIsIFdNODQwMF9JTlBVVF9NSVhFUjQsCisJV004NDAwX1JEQlZPTF9TSElGVCwgV004NDAwX1JEQlZPTF9NQVNLLCAwLCBpbl9taXhfdGx2KSwKK1NPQ19EQVBNX1NJTkdMRV9UTFYoIlJJTjIgVm9sdW1lIiwgV004NDAwX0lOUFVUX01JWEVSNiwgV004NDAwX1JJMkJWT0xfU0hJRlQsCisJNywgMCwgaW5fbWl4X3RsdiksCitTT0NfREFQTV9TSU5HTEUoIlJJTlBHQTEyIFN3aXRjaCIsIFdNODQwMF9JTlBVVF9NSVhFUjMsIFdNODQwMF9MMTJNTkJfU0hJRlQsCisJMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIlJJTlBHQTM0IFN3aXRjaCIsIFdNODQwMF9JTlBVVF9NSVhFUjMsIFdNODQwMF9MMzRNTkJfU0hJRlQsCisJMSwgMCksCit9OworCisvKiBBSU5MTVVYICovCitzdGF0aWMgY29uc3QgY2hhciAqd204NDAwX2FpbmxtdXhbXSA9CisJeyJJTk1JWEwgTWl4IiwgIlJYVk9JQ0UgTWl4IiwgIkRJRkZJTkwgTWl4In07CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gd204NDAwX2FpbmxtdXhfZW51bSA9CitTT0NfRU5VTV9TSU5HTEUoIFdNODQwMF9JTlBVVF9NSVhFUjEsIFdNODQwMF9BSU5MTU9ERV9TSElGVCwKKwlBUlJBWV9TSVpFKHdtODQwMF9haW5sbXV4KSwgd204NDAwX2FpbmxtdXgpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204NDAwX2RhcG1fYWlubG11eF9jb250cm9scyA9CitTT0NfREFQTV9FTlVNKCJSb3V0ZSIsIHdtODQwMF9haW5sbXV4X2VudW0pOworCisvKiBESUZGSU5MICovCisKKy8qIEFJTlJNVVggKi8KK3N0YXRpYyBjb25zdCBjaGFyICp3bTg0MDBfYWlucm11eFtdID0KKwl7IklOTUlYUiBNaXgiLCAiUlhWT0lDRSBNaXgiLCAiRElGRklOUiBNaXgifTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSB3bTg0MDBfYWlucm11eF9lbnVtID0KK1NPQ19FTlVNX1NJTkdMRSggV004NDAwX0lOUFVUX01JWEVSMSwgV004NDAwX0FJTlJNT0RFX1NISUZULAorCUFSUkFZX1NJWkUod204NDAwX2FpbnJtdXgpLCB3bTg0MDBfYWlucm11eCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg0MDBfZGFwbV9haW5ybXV4X2NvbnRyb2xzID0KK1NPQ19EQVBNX0VOVU0oIlJvdXRlIiwgd204NDAwX2FpbnJtdXhfZW51bSk7CisKKy8qIFJYVk9JQ0UgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg0MDBfZGFwbV9yeHZvaWNlX2NvbnRyb2xzW10gPSB7CitTT0NfREFQTV9TSU5HTEVfVExWKCJMSU40L1JYTiIsIFdNODQwMF9JTlBVVF9NSVhFUjUsIFdNODQwMF9MUjRCVk9MX1NISUZULAorCQkJV004NDAwX0xSNEJWT0xfTUFTSywgMCwgaW5fbWl4X3RsdiksCitTT0NfREFQTV9TSU5HTEVfVExWKCJSSU40L1JYUCIsIFdNODQwMF9JTlBVVF9NSVhFUjYsIFdNODQwMF9STDRCVk9MX1NISUZULAorCQkJV004NDAwX1JMNEJWT0xfTUFTSywgMCwgaW5fbWl4X3RsdiksCit9OworCisvKiBMT01JWCAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODQwMF9kYXBtX2xvbWl4X2NvbnRyb2xzW10gPSB7CitTT0NfREFQTV9TSU5HTEUoIkxPTUlYIFJpZ2h0IEFEQyBCeXBhc3MgU3dpdGNoIiwgV004NDAwX09VVFBVVF9NSVhFUjEsCisJV004NDAwX0xSQkxPX1NISUZULCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiTE9NSVggTGVmdCBBREMgQnlwYXNzIFN3aXRjaCIsIFdNODQwMF9PVVRQVVRfTUlYRVIxLAorCVdNODQwMF9MTEJMT19TSElGVCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIkxPTUlYIFJJTjMgQnlwYXNzIFN3aXRjaCIsIFdNODQwMF9PVVRQVVRfTUlYRVIxLAorCVdNODQwMF9MUkkzTE9fU0hJRlQsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJMT01JWCBMSU4zIEJ5cGFzcyBTd2l0Y2giLCBXTTg0MDBfT1VUUFVUX01JWEVSMSwKKwlXTTg0MDBfTExJM0xPX1NISUZULCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiTE9NSVggUklOMTIgUEdBIEJ5cGFzcyBTd2l0Y2giLCBXTTg0MDBfT1VUUFVUX01JWEVSMSwKKwlXTTg0MDBfTFIxMkxPX1NISUZULCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiTE9NSVggTElOMTIgUEdBIEJ5cGFzcyBTd2l0Y2giLCBXTTg0MDBfT1VUUFVUX01JWEVSMSwKKwlXTTg0MDBfTEwxMkxPX1NISUZULCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiTE9NSVggTGVmdCBEQUMgU3dpdGNoIiwgV004NDAwX09VVFBVVF9NSVhFUjEsCisJV004NDAwX0xETE9fU0hJRlQsIDEsIDApLAorfTsKKworLyogUk9NSVggKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg0MDBfZGFwbV9yb21peF9jb250cm9sc1tdID0geworU09DX0RBUE1fU0lOR0xFKCJST01JWCBMZWZ0IEFEQyBCeXBhc3MgU3dpdGNoIiwgV004NDAwX09VVFBVVF9NSVhFUjIsCisJV004NDAwX1JMQlJPX1NISUZULCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiUk9NSVggUmlnaHQgQURDIEJ5cGFzcyBTd2l0Y2giLCBXTTg0MDBfT1VUUFVUX01JWEVSMiwKKwlXTTg0MDBfUlJCUk9fU0hJRlQsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJST01JWCBMSU4zIEJ5cGFzcyBTd2l0Y2giLCBXTTg0MDBfT1VUUFVUX01JWEVSMiwKKwlXTTg0MDBfUkxJM1JPX1NISUZULCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiUk9NSVggUklOMyBCeXBhc3MgU3dpdGNoIiwgV004NDAwX09VVFBVVF9NSVhFUjIsCisJV004NDAwX1JSSTNST19TSElGVCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIlJPTUlYIExJTjEyIFBHQSBCeXBhc3MgU3dpdGNoIiwgV004NDAwX09VVFBVVF9NSVhFUjIsCisJV004NDAwX1JMMTJST19TSElGVCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIlJPTUlYIFJJTjEyIFBHQSBCeXBhc3MgU3dpdGNoIiwgV004NDAwX09VVFBVVF9NSVhFUjIsCisJV004NDAwX1JSMTJST19TSElGVCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIlJPTUlYIFJpZ2h0IERBQyBTd2l0Y2giLCBXTTg0MDBfT1VUUFVUX01JWEVSMiwKKwlXTTg0MDBfUkRST19TSElGVCwgMSwgMCksCit9OworCisvKiBMT05NSVggKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg0MDBfZGFwbV9sb25taXhfY29udHJvbHNbXSA9IHsKK1NPQ19EQVBNX1NJTkdMRSgiTE9OTUlYIExlZnQgTWl4ZXIgUEdBIFN3aXRjaCIsIFdNODQwMF9MSU5FX01JWEVSMSwKKwlXTTg0MDBfTExPUEdBTE9OX1NISUZULCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiTE9OTUlYIFJpZ2h0IE1peGVyIFBHQSBTd2l0Y2giLCBXTTg0MDBfTElORV9NSVhFUjEsCisJV004NDAwX0xST1BHQUxPTl9TSElGVCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIkxPTk1JWCBJbnZlcnRlZCBMT1AgU3dpdGNoIiwgV004NDAwX0xJTkVfTUlYRVIxLAorCVdNODQwMF9MT1BMT05fU0hJRlQsIDEsIDApLAorfTsKKworLyogTE9QTUlYICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204NDAwX2RhcG1fbG9wbWl4X2NvbnRyb2xzW10gPSB7CitTT0NfREFQTV9TSU5HTEUoIkxPUE1JWCBSaWdodCBNaWMgQnlwYXNzIFN3aXRjaCIsIFdNODQwMF9MSU5FX01JWEVSMSwKKwlXTTg0MDBfTFIxMkxPUF9TSElGVCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIkxPUE1JWCBMZWZ0IE1pYyBCeXBhc3MgU3dpdGNoIiwgV004NDAwX0xJTkVfTUlYRVIxLAorCVdNODQwMF9MTDEyTE9QX1NISUZULCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiTE9QTUlYIExlZnQgTWl4ZXIgUEdBIFN3aXRjaCIsIFdNODQwMF9MSU5FX01JWEVSMSwKKwlXTTg0MDBfTExPUEdBTE9QX1NISUZULCAxLCAwKSwKK307CisKKy8qIFJPTk1JWCAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODQwMF9kYXBtX3Jvbm1peF9jb250cm9sc1tdID0geworU09DX0RBUE1fU0lOR0xFKCJST05NSVggUmlnaHQgTWl4ZXIgUEdBIFN3aXRjaCIsIFdNODQwMF9MSU5FX01JWEVSMiwKKwlXTTg0MDBfUlJPUEdBUk9OX1NISUZULCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiUk9OTUlYIExlZnQgTWl4ZXIgUEdBIFN3aXRjaCIsIFdNODQwMF9MSU5FX01JWEVSMiwKKwlXTTg0MDBfUkxPUEdBUk9OX1NISUZULCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiUk9OTUlYIEludmVydGVkIFJPUCBTd2l0Y2giLCBXTTg0MDBfTElORV9NSVhFUjIsCisJV004NDAwX1JPUFJPTl9TSElGVCwgMSwgMCksCit9OworCisvKiBST1BNSVggKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg0MDBfZGFwbV9yb3BtaXhfY29udHJvbHNbXSA9IHsKK1NPQ19EQVBNX1NJTkdMRSgiUk9QTUlYIExlZnQgTWljIEJ5cGFzcyBTd2l0Y2giLCBXTTg0MDBfTElORV9NSVhFUjIsCisJV004NDAwX1JMMTJST1BfU0hJRlQsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJST1BNSVggUmlnaHQgTWljIEJ5cGFzcyBTd2l0Y2giLCBXTTg0MDBfTElORV9NSVhFUjIsCisJV004NDAwX1JSMTJST1BfU0hJRlQsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJST1BNSVggUmlnaHQgTWl4ZXIgUEdBIFN3aXRjaCIsIFdNODQwMF9MSU5FX01JWEVSMiwKKwlXTTg0MDBfUlJPUEdBUk9QX1NISUZULCAxLCAwKSwKK307CisKKy8qIE9VVDNNSVggKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg0MDBfZGFwbV9vdXQzbWl4X2NvbnRyb2xzW10gPSB7CitTT0NfREFQTV9TSU5HTEUoIk9VVDNNSVggTElONC9SWFAgQnlwYXNzIFN3aXRjaCIsIFdNODQwMF9PVVQzXzRfTUlYRVIsCisJV004NDAwX0xJNE8zX1NISUZULCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiT1VUM01JWCBMZWZ0IE91dCBQR0EgU3dpdGNoIiwgV004NDAwX09VVDNfNF9NSVhFUiwKKwlXTTg0MDBfTFBHQU8zX1NISUZULCAxLCAwKSwKK307CisKKy8qIE9VVDRNSVggKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg0MDBfZGFwbV9vdXQ0bWl4X2NvbnRyb2xzW10gPSB7CitTT0NfREFQTV9TSU5HTEUoIk9VVDRNSVggUmlnaHQgT3V0IFBHQSBTd2l0Y2giLCBXTTg0MDBfT1VUM180X01JWEVSLAorCVdNODQwMF9SUEdBTzRfU0hJRlQsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJPVVQ0TUlYIFJJTjQvUlhQIEJ5cGFzcyBTd2l0Y2giLCBXTTg0MDBfT1VUM180X01JWEVSLAorCVdNODQwMF9SSTRPNF9TSElGVCwgMSwgMCksCit9OworCisvKiBTUEtNSVggKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg0MDBfZGFwbV9zcGttaXhfY29udHJvbHNbXSA9IHsKK1NPQ19EQVBNX1NJTkdMRSgiU1BLTUlYIExJTjIgQnlwYXNzIFN3aXRjaCIsIFdNODQwMF9TUEVBS0VSX01JWEVSLAorCVdNODQwMF9MSTJTUEtfU0hJRlQsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJTUEtNSVggTEFEQyBCeXBhc3MgU3dpdGNoIiwgV004NDAwX1NQRUFLRVJfTUlYRVIsCisJV004NDAwX0xCMlNQS19TSElGVCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIlNQS01JWCBMZWZ0IE1peGVyIFBHQSBTd2l0Y2giLCBXTTg0MDBfU1BFQUtFUl9NSVhFUiwKKwlXTTg0MDBfTE9QR0FTUEtfU0hJRlQsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJTUEtNSVggTGVmdCBEQUMgU3dpdGNoIiwgV004NDAwX1NQRUFLRVJfTUlYRVIsCisJV004NDAwX0xEU1BLX1NISUZULCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiU1BLTUlYIFJpZ2h0IERBQyBTd2l0Y2giLCBXTTg0MDBfU1BFQUtFUl9NSVhFUiwKKwlXTTg0MDBfUkRTUEtfU0hJRlQsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJTUEtNSVggUmlnaHQgTWl4ZXIgUEdBIFN3aXRjaCIsIFdNODQwMF9TUEVBS0VSX01JWEVSLAorCVdNODQwMF9ST1BHQVNQS19TSElGVCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIlNQS01JWCBSQURDIEJ5cGFzcyBTd2l0Y2giLCBXTTg0MDBfU1BFQUtFUl9NSVhFUiwKKwlXTTg0MDBfUkwxMlJPUF9TSElGVCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIlNQS01JWCBSSU4yIEJ5cGFzcyBTd2l0Y2giLCBXTTg0MDBfU1BFQUtFUl9NSVhFUiwKKwlXTTg0MDBfUkkyU1BLX1NISUZULCAxLCAwKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCB3bTg0MDBfZGFwbV93aWRnZXRzW10gPSB7CisvKiBJbnB1dCBTaWRlICovCisvKiBJbnB1dCBMaW5lcyAqLworU05EX1NPQ19EQVBNX0lOUFVUKCJMSU4xIiksCitTTkRfU09DX0RBUE1fSU5QVVQoIkxJTjIiKSwKK1NORF9TT0NfREFQTV9JTlBVVCgiTElOMyIpLAorU05EX1NPQ19EQVBNX0lOUFVUKCJMSU40L1JYTiIpLAorU05EX1NPQ19EQVBNX0lOUFVUKCJSSU4zIiksCitTTkRfU09DX0RBUE1fSU5QVVQoIlJJTjQvUlhQIiksCitTTkRfU09DX0RBUE1fSU5QVVQoIlJJTjEiKSwKK1NORF9TT0NfREFQTV9JTlBVVCgiUklOMiIpLAorU05EX1NPQ19EQVBNX0lOUFVUKCJJbnRlcm5hbCBBREMgU291cmNlIiksCisKKy8qIERBQ3MgKi8KK1NORF9TT0NfREFQTV9BREMoIkxlZnQgQURDIiwgIkxlZnQgQ2FwdHVyZSIsIFdNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzIsCisJV004NDAwX0FEQ0xfRU5BX1NISUZULCAwKSwKK1NORF9TT0NfREFQTV9BREMoIlJpZ2h0IEFEQyIsICJSaWdodCBDYXB0dXJlIiwgV004NDAwX1BPV0VSX01BTkFHRU1FTlRfMiwKKwlXTTg0MDBfQURDUl9FTkFfU0hJRlQsIDApLAorCisvKiBJbnB1dCBQR0FzICovCitTTkRfU09DX0RBUE1fTUlYRVIoIkxJTjEyIFBHQSIsIFdNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzIsCisJCSAgIFdNODQwMF9MSU4xMl9FTkFfU0hJRlQsCisJCSAgIDAsICZ3bTg0MDBfZGFwbV9saW4xMl9wZ2FfY29udHJvbHNbMF0sCisJCSAgIEFSUkFZX1NJWkUod204NDAwX2RhcG1fbGluMTJfcGdhX2NvbnRyb2xzKSksCitTTkRfU09DX0RBUE1fTUlYRVIoIkxJTjM0IFBHQSIsIFdNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzIsCisJCSAgIFdNODQwMF9MSU4zNF9FTkFfU0hJRlQsCisJCSAgIDAsICZ3bTg0MDBfZGFwbV9saW4zNF9wZ2FfY29udHJvbHNbMF0sCisJCSAgIEFSUkFZX1NJWkUod204NDAwX2RhcG1fbGluMzRfcGdhX2NvbnRyb2xzKSksCitTTkRfU09DX0RBUE1fTUlYRVIoIlJJTjEyIFBHQSIsIFdNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzIsCisJCSAgIFdNODQwMF9SSU4xMl9FTkFfU0hJRlQsCisJCSAgIDAsICZ3bTg0MDBfZGFwbV9yaW4xMl9wZ2FfY29udHJvbHNbMF0sCisJCSAgIEFSUkFZX1NJWkUod204NDAwX2RhcG1fcmluMTJfcGdhX2NvbnRyb2xzKSksCitTTkRfU09DX0RBUE1fTUlYRVIoIlJJTjM0IFBHQSIsIFdNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzIsCisJCSAgIFdNODQwMF9SSU4zNF9FTkFfU0hJRlQsCisJCSAgIDAsICZ3bTg0MDBfZGFwbV9yaW4zNF9wZ2FfY29udHJvbHNbMF0sCisJCSAgIEFSUkFZX1NJWkUod204NDAwX2RhcG1fcmluMzRfcGdhX2NvbnRyb2xzKSksCisKKy8qIElOTUlYTCAqLworU05EX1NPQ19EQVBNX01JWEVSX0UoIklOTUlYTCIsIFdNODQwMF9JTlREUklWQklUUywgV004NDAwX0lOTUlYTF9QV1IsIDAsCisJJndtODQwMF9kYXBtX2lubWl4bF9jb250cm9sc1swXSwKKwlBUlJBWV9TSVpFKHdtODQwMF9kYXBtX2lubWl4bF9jb250cm9scyksCisJaW5taXhlcl9ldmVudCwgU05EX1NPQ19EQVBNX1BPU1RfUE1VIHwgU05EX1NPQ19EQVBNX1BPU1RfUE1EKSwKKworLyogQUlOTE1VWCAqLworU05EX1NPQ19EQVBNX01VWF9FKCJBSUxOTVVYIiwgV004NDAwX0lOVERSSVZCSVRTLCBXTTg0MDBfQUlOTE1VWF9QV1IsIDAsCisJJndtODQwMF9kYXBtX2FpbmxtdXhfY29udHJvbHMsIGlubWl4ZXJfZXZlbnQsCisJU05EX1NPQ19EQVBNX1BPU1RfUE1VIHwgU05EX1NPQ19EQVBNX1BPU1RfUE1EKSwKKworLyogSU5NSVhSICovCitTTkRfU09DX0RBUE1fTUlYRVJfRSgiSU5NSVhSIiwgV004NDAwX0lOVERSSVZCSVRTLCBXTTg0MDBfSU5NSVhSX1BXUiwgMCwKKwkmd204NDAwX2RhcG1faW5taXhyX2NvbnRyb2xzWzBdLAorCUFSUkFZX1NJWkUod204NDAwX2RhcG1faW5taXhyX2NvbnRyb2xzKSwKKwlpbm1peGVyX2V2ZW50LCBTTkRfU09DX0RBUE1fUE9TVF9QTVUgfCBTTkRfU09DX0RBUE1fUE9TVF9QTUQpLAorCisvKiBBSU5STVVYICovCitTTkRfU09DX0RBUE1fTVVYX0UoIkFJUk5NVVgiLCBXTTg0MDBfSU5URFJJVkJJVFMsIFdNODQwMF9BSU5STVVYX1BXUiwgMCwKKwkmd204NDAwX2RhcG1fYWlucm11eF9jb250cm9scywgaW5taXhlcl9ldmVudCwKKwlTTkRfU09DX0RBUE1fUE9TVF9QTVUgfCBTTkRfU09DX0RBUE1fUE9TVF9QTUQpLAorCisvKiBPdXRwdXQgU2lkZSAqLworLyogREFDcyAqLworU05EX1NPQ19EQVBNX0RBQygiTGVmdCBEQUMiLCAiTGVmdCBQbGF5YmFjayIsIFdNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzMsCisJV004NDAwX0RBQ0xfRU5BX1NISUZULCAwKSwKK1NORF9TT0NfREFQTV9EQUMoIlJpZ2h0IERBQyIsICJSaWdodCBQbGF5YmFjayIsIFdNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzMsCisJV004NDAwX0RBQ1JfRU5BX1NISUZULCAwKSwKKworLyogTE9NSVggKi8KK1NORF9TT0NfREFQTV9NSVhFUl9FKCJMT01JWCIsIFdNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzMsCisJCSAgICAgV004NDAwX0xPTUlYX0VOQV9TSElGVCwKKwkJICAgICAwLCAmd204NDAwX2RhcG1fbG9taXhfY29udHJvbHNbMF0sCisJCSAgICAgQVJSQVlfU0laRSh3bTg0MDBfZGFwbV9sb21peF9jb250cm9scyksCisJCSAgICAgb3V0bWl4ZXJfZXZlbnQsIFNORF9TT0NfREFQTV9QUkVfUkVHKSwKKworLyogTE9OTUlYICovCitTTkRfU09DX0RBUE1fTUlYRVIoIkxPTk1JWCIsIFdNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzMsIFdNODQwMF9MT05fRU5BX1NISUZULAorCQkgICAwLCAmd204NDAwX2RhcG1fbG9ubWl4X2NvbnRyb2xzWzBdLAorCQkgICBBUlJBWV9TSVpFKHdtODQwMF9kYXBtX2xvbm1peF9jb250cm9scykpLAorCisvKiBMT1BNSVggKi8KK1NORF9TT0NfREFQTV9NSVhFUigiTE9QTUlYIiwgV004NDAwX1BPV0VSX01BTkFHRU1FTlRfMywgV004NDAwX0xPUF9FTkFfU0hJRlQsCisJCSAgIDAsICZ3bTg0MDBfZGFwbV9sb3BtaXhfY29udHJvbHNbMF0sCisJCSAgIEFSUkFZX1NJWkUod204NDAwX2RhcG1fbG9wbWl4X2NvbnRyb2xzKSksCisKKy8qIE9VVDNNSVggKi8KK1NORF9TT0NfREFQTV9NSVhFUigiT1VUM01JWCIsIFdNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzEsIFdNODQwMF9PVVQzX0VOQV9TSElGVCwKKwkJICAgMCwgJndtODQwMF9kYXBtX291dDNtaXhfY29udHJvbHNbMF0sCisJCSAgIEFSUkFZX1NJWkUod204NDAwX2RhcG1fb3V0M21peF9jb250cm9scykpLAorCisvKiBTUEtNSVggKi8KK1NORF9TT0NfREFQTV9NSVhFUl9FKCJTUEtNSVgiLCBXTTg0MDBfUE9XRVJfTUFOQUdFTUVOVF8xLCBXTTg0MDBfU1BLX0VOQV9TSElGVCwKKwkJICAgICAwLCAmd204NDAwX2RhcG1fc3BrbWl4X2NvbnRyb2xzWzBdLAorCQkgICAgIEFSUkFZX1NJWkUod204NDAwX2RhcG1fc3BrbWl4X2NvbnRyb2xzKSwgb3V0bWl4ZXJfZXZlbnQsCisJCSAgICAgU05EX1NPQ19EQVBNX1BSRV9SRUcpLAorCisvKiBPVVQ0TUlYICovCitTTkRfU09DX0RBUE1fTUlYRVIoIk9VVDRNSVgiLCBXTTg0MDBfUE9XRVJfTUFOQUdFTUVOVF8xLCBXTTg0MDBfT1VUNF9FTkFfU0hJRlQsCisJMCwgJndtODQwMF9kYXBtX291dDRtaXhfY29udHJvbHNbMF0sCisJQVJSQVlfU0laRSh3bTg0MDBfZGFwbV9vdXQ0bWl4X2NvbnRyb2xzKSksCisKKy8qIFJPUE1JWCAqLworU05EX1NPQ19EQVBNX01JWEVSKCJST1BNSVgiLCBXTTg0MDBfUE9XRVJfTUFOQUdFTUVOVF8zLCBXTTg0MDBfUk9QX0VOQV9TSElGVCwKKwkJICAgMCwgJndtODQwMF9kYXBtX3JvcG1peF9jb250cm9sc1swXSwKKwkJICAgQVJSQVlfU0laRSh3bTg0MDBfZGFwbV9yb3BtaXhfY29udHJvbHMpKSwKKworLyogUk9OTUlYICovCitTTkRfU09DX0RBUE1fTUlYRVIoIlJPTk1JWCIsIFdNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzMsIFdNODQwMF9ST05fRU5BX1NISUZULAorCQkgICAwLCAmd204NDAwX2RhcG1fcm9ubWl4X2NvbnRyb2xzWzBdLAorCQkgICBBUlJBWV9TSVpFKHdtODQwMF9kYXBtX3Jvbm1peF9jb250cm9scykpLAorCisvKiBST01JWCAqLworU05EX1NPQ19EQVBNX01JWEVSX0UoIlJPTUlYIiwgV004NDAwX1BPV0VSX01BTkFHRU1FTlRfMywKKwkJICAgICBXTTg0MDBfUk9NSVhfRU5BX1NISUZULAorCQkgICAgIDAsICZ3bTg0MDBfZGFwbV9yb21peF9jb250cm9sc1swXSwKKwkJICAgICBBUlJBWV9TSVpFKHdtODQwMF9kYXBtX3JvbWl4X2NvbnRyb2xzKSwKKwkJICAgICBvdXRtaXhlcl9ldmVudCwgU05EX1NPQ19EQVBNX1BSRV9SRUcpLAorCisvKiBMT1VUIFBHQSAqLworU05EX1NPQ19EQVBNX1BHQSgiTE9VVCBQR0EiLCBXTTg0MDBfUE9XRVJfTUFOQUdFTUVOVF8xLCBXTTg0MDBfTE9VVF9FTkFfU0hJRlQsCisJCSAwLCBOVUxMLCAwKSwKKworLyogUk9VVCBQR0EgKi8KK1NORF9TT0NfREFQTV9QR0EoIlJPVVQgUEdBIiwgV004NDAwX1BPV0VSX01BTkFHRU1FTlRfMSwgV004NDAwX1JPVVRfRU5BX1NISUZULAorCQkgMCwgTlVMTCwgMCksCisKKy8qIExPUEdBICovCitTTkRfU09DX0RBUE1fUEdBKCJMT1BHQSIsIFdNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzMsIFdNODQwMF9MT1BHQV9FTkFfU0hJRlQsIDAsCisJTlVMTCwgMCksCisKKy8qIFJPUEdBICovCitTTkRfU09DX0RBUE1fUEdBKCJST1BHQSIsIFdNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzMsIFdNODQwMF9ST1BHQV9FTkFfU0hJRlQsIDAsCisJTlVMTCwgMCksCisKKy8qIE1JQ0JJQVMgKi8KK1NORF9TT0NfREFQTV9NSUNCSUFTKCJNSUNCSUFTIiwgV004NDAwX1BPV0VSX01BTkFHRU1FTlRfMSwKKwlXTTg0MDBfTUlDMUJJQVNfRU5BX1NISUZULCAwKSwKKworU05EX1NPQ19EQVBNX09VVFBVVCgiTE9OIiksCitTTkRfU09DX0RBUE1fT1VUUFVUKCJMT1AiKSwKK1NORF9TT0NfREFQTV9PVVRQVVQoIk9VVDMiKSwKK1NORF9TT0NfREFQTV9PVVRQVVQoIkxPVVQiKSwKK1NORF9TT0NfREFQTV9PVVRQVVQoIlNQS04iKSwKK1NORF9TT0NfREFQTV9PVVRQVVQoIlNQS1AiKSwKK1NORF9TT0NfREFQTV9PVVRQVVQoIlJPVVQiKSwKK1NORF9TT0NfREFQTV9PVVRQVVQoIk9VVDQiKSwKK1NORF9TT0NfREFQTV9PVVRQVVQoIlJPUCIpLAorU05EX1NPQ19EQVBNX09VVFBVVCgiUk9OIiksCisKK1NORF9TT0NfREFQTV9PVVRQVVQoIkludGVybmFsIERBQyBTaW5rIiksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBhdWRpb19tYXBbXSA9IHsKKwkvKiBNYWtlIERBQ3MgdHVybiBvbiB3aGVuIHBsYXlpbmcgZXZlbiBpZiBub3QgbWl4ZWQgaW50byBhbnkgb3V0cHV0cyAqLworCXsiSW50ZXJuYWwgREFDIFNpbmsiLCBOVUxMLCAiTGVmdCBEQUMifSwKKwl7IkludGVybmFsIERBQyBTaW5rIiwgTlVMTCwgIlJpZ2h0IERBQyJ9LAorCisJLyogTWFrZSBBRENzIHR1cm4gb24gd2hlbiByZWNvcmRpbmcKKwkgKiBldmVuIGlmIG5vdCBtaXhlZCBmcm9tIGFueSBpbnB1dHMgKi8KKwl7IkxlZnQgQURDIiwgTlVMTCwgIkludGVybmFsIEFEQyBTb3VyY2UifSwKKwl7IlJpZ2h0IEFEQyIsIE5VTEwsICJJbnRlcm5hbCBBREMgU291cmNlIn0sCisKKwkvKiBJbnB1dCBTaWRlICovCisJLyogTElOMTIgUEdBICovCisJeyJMSU4xMiBQR0EiLCAiTElOMSBTd2l0Y2giLCAiTElOMSJ9LAorCXsiTElOMTIgUEdBIiwgIkxJTjIgU3dpdGNoIiwgIkxJTjIifSwKKwkvKiBMSU4zNCBQR0EgKi8KKwl7IkxJTjM0IFBHQSIsICJMSU4zIFN3aXRjaCIsICJMSU4zIn0sCisJeyJMSU4zNCBQR0EiLCAiTElONCBTd2l0Y2giLCAiTElONC9SWE4ifSwKKwkvKiBJTk1JWEwgKi8KKwl7IklOTUlYTCIsICJSZWNvcmQgTGVmdCBWb2x1bWUiLCAiTE9NSVgifSwKKwl7IklOTUlYTCIsICJMSU4yIFZvbHVtZSIsICJMSU4yIn0sCisJeyJJTk1JWEwiLCAiTElOUEdBMTIgU3dpdGNoIiwgIkxJTjEyIFBHQSJ9LAorCXsiSU5NSVhMIiwgIkxJTlBHQTM0IFN3aXRjaCIsICJMSU4zNCBQR0EifSwKKwkvKiBBSUxOTVVYICovCisJeyJBSUxOTVVYIiwgIklOTUlYTCBNaXgiLCAiSU5NSVhMIn0sCisJeyJBSUxOTVVYIiwgIkRJRkZJTkwgTWl4IiwgIkxJTjEyIFBHQSJ9LAorCXsiQUlMTk1VWCIsICJESUZGSU5MIE1peCIsICJMSU4zNCBQR0EifSwKKwl7IkFJTE5NVVgiLCAiUlhWT0lDRSBNaXgiLCAiTElONC9SWE4ifSwKKwl7IkFJTE5NVVgiLCAiUlhWT0lDRSBNaXgiLCAiUklONC9SWFAifSwKKwkvKiBBREMgKi8KKwl7IkxlZnQgQURDIiwgTlVMTCwgIkFJTE5NVVgifSwKKworCS8qIFJJTjEyIFBHQSAqLworCXsiUklOMTIgUEdBIiwgIlJJTjEgU3dpdGNoIiwgIlJJTjEifSwKKwl7IlJJTjEyIFBHQSIsICJSSU4yIFN3aXRjaCIsICJSSU4yIn0sCisJLyogUklOMzQgUEdBICovCisJeyJSSU4zNCBQR0EiLCAiUklOMyBTd2l0Y2giLCAiUklOMyJ9LAorCXsiUklOMzQgUEdBIiwgIlJJTjQgU3dpdGNoIiwgIlJJTjQvUlhQIn0sCisJLyogSU5NSVhMICovCisJeyJJTk1JWFIiLCAiUmVjb3JkIFJpZ2h0IFZvbHVtZSIsICJST01JWCJ9LAorCXsiSU5NSVhSIiwgIlJJTjIgVm9sdW1lIiwgIlJJTjIifSwKKwl7IklOTUlYUiIsICJSSU5QR0ExMiBTd2l0Y2giLCAiUklOMTIgUEdBIn0sCisJeyJJTk1JWFIiLCAiUklOUEdBMzQgU3dpdGNoIiwgIlJJTjM0IFBHQSJ9LAorCS8qIEFJUk5NVVggKi8KKwl7IkFJUk5NVVgiLCAiSU5NSVhSIE1peCIsICJJTk1JWFIifSwKKwl7IkFJUk5NVVgiLCAiRElGRklOUiBNaXgiLCAiUklOMTIgUEdBIn0sCisJeyJBSVJOTVVYIiwgIkRJRkZJTlIgTWl4IiwgIlJJTjM0IFBHQSJ9LAorCXsiQUlSTk1VWCIsICJSWFZPSUNFIE1peCIsICJMSU40L1JYTiJ9LAorCXsiQUlSTk1VWCIsICJSWFZPSUNFIE1peCIsICJSSU40L1JYUCJ9LAorCS8qIEFEQyAqLworCXsiUmlnaHQgQURDIiwgTlVMTCwgIkFJUk5NVVgifSwKKworCS8qIExPTUlYICovCisJeyJMT01JWCIsICJMT01JWCBSSU4zIEJ5cGFzcyBTd2l0Y2giLCAiUklOMyJ9LAorCXsiTE9NSVgiLCAiTE9NSVggTElOMyBCeXBhc3MgU3dpdGNoIiwgIkxJTjMifSwKKwl7IkxPTUlYIiwgIkxPTUlYIExJTjEyIFBHQSBCeXBhc3MgU3dpdGNoIiwgIkxJTjEyIFBHQSJ9LAorCXsiTE9NSVgiLCAiTE9NSVggUklOMTIgUEdBIEJ5cGFzcyBTd2l0Y2giLCAiUklOMTIgUEdBIn0sCisJeyJMT01JWCIsICJMT01JWCBSaWdodCBBREMgQnlwYXNzIFN3aXRjaCIsICJBSVJOTVVYIn0sCisJeyJMT01JWCIsICJMT01JWCBMZWZ0IEFEQyBCeXBhc3MgU3dpdGNoIiwgIkFJTE5NVVgifSwKKwl7IkxPTUlYIiwgIkxPTUlYIExlZnQgREFDIFN3aXRjaCIsICJMZWZ0IERBQyJ9LAorCisJLyogUk9NSVggKi8KKwl7IlJPTUlYIiwgIlJPTUlYIFJJTjMgQnlwYXNzIFN3aXRjaCIsICJSSU4zIn0sCisJeyJST01JWCIsICJST01JWCBMSU4zIEJ5cGFzcyBTd2l0Y2giLCAiTElOMyJ9LAorCXsiUk9NSVgiLCAiUk9NSVggTElOMTIgUEdBIEJ5cGFzcyBTd2l0Y2giLCAiTElOMTIgUEdBIn0sCisJeyJST01JWCIsICJST01JWCBSSU4xMiBQR0EgQnlwYXNzIFN3aXRjaCIsICJSSU4xMiBQR0EifSwKKwl7IlJPTUlYIiwgIlJPTUlYIFJpZ2h0IEFEQyBCeXBhc3MgU3dpdGNoIiwgIkFJUk5NVVgifSwKKwl7IlJPTUlYIiwgIlJPTUlYIExlZnQgQURDIEJ5cGFzcyBTd2l0Y2giLCAiQUlMTk1VWCJ9LAorCXsiUk9NSVgiLCAiUk9NSVggUmlnaHQgREFDIFN3aXRjaCIsICJSaWdodCBEQUMifSwKKworCS8qIFNQS01JWCAqLworCXsiU1BLTUlYIiwgIlNQS01JWCBMSU4yIEJ5cGFzcyBTd2l0Y2giLCAiTElOMiJ9LAorCXsiU1BLTUlYIiwgIlNQS01JWCBSSU4yIEJ5cGFzcyBTd2l0Y2giLCAiUklOMiJ9LAorCXsiU1BLTUlYIiwgIlNQS01JWCBMQURDIEJ5cGFzcyBTd2l0Y2giLCAiQUlMTk1VWCJ9LAorCXsiU1BLTUlYIiwgIlNQS01JWCBSQURDIEJ5cGFzcyBTd2l0Y2giLCAiQUlSTk1VWCJ9LAorCXsiU1BLTUlYIiwgIlNQS01JWCBMZWZ0IE1peGVyIFBHQSBTd2l0Y2giLCAiTE9QR0EifSwKKwl7IlNQS01JWCIsICJTUEtNSVggUmlnaHQgTWl4ZXIgUEdBIFN3aXRjaCIsICJST1BHQSJ9LAorCXsiU1BLTUlYIiwgIlNQS01JWCBSaWdodCBEQUMgU3dpdGNoIiwgIlJpZ2h0IERBQyJ9LAorCXsiU1BLTUlYIiwgIlNQS01JWCBMZWZ0IERBQyBTd2l0Y2giLCAiUmlnaHQgREFDIn0sCisKKwkvKiBMT05NSVggKi8KKwl7IkxPTk1JWCIsICJMT05NSVggTGVmdCBNaXhlciBQR0EgU3dpdGNoIiwgIkxPUEdBIn0sCisJeyJMT05NSVgiLCAiTE9OTUlYIFJpZ2h0IE1peGVyIFBHQSBTd2l0Y2giLCAiUk9QR0EifSwKKwl7IkxPTk1JWCIsICJMT05NSVggSW52ZXJ0ZWQgTE9QIFN3aXRjaCIsICJMT1BNSVgifSwKKworCS8qIExPUE1JWCAqLworCXsiTE9QTUlYIiwgIkxPUE1JWCBSaWdodCBNaWMgQnlwYXNzIFN3aXRjaCIsICJSSU4xMiBQR0EifSwKKwl7IkxPUE1JWCIsICJMT1BNSVggTGVmdCBNaWMgQnlwYXNzIFN3aXRjaCIsICJMSU4xMiBQR0EifSwKKwl7IkxPUE1JWCIsICJMT1BNSVggTGVmdCBNaXhlciBQR0EgU3dpdGNoIiwgIkxPUEdBIn0sCisKKwkvKiBPVVQzTUlYICovCisJeyJPVVQzTUlYIiwgIk9VVDNNSVggTElONC9SWFAgQnlwYXNzIFN3aXRjaCIsICJMSU40L1JYTiJ9LAorCXsiT1VUM01JWCIsICJPVVQzTUlYIExlZnQgT3V0IFBHQSBTd2l0Y2giLCAiTE9QR0EifSwKKworCS8qIE9VVDRNSVggKi8KKwl7Ik9VVDRNSVgiLCAiT1VUNE1JWCBSaWdodCBPdXQgUEdBIFN3aXRjaCIsICJST1BHQSJ9LAorCXsiT1VUNE1JWCIsICJPVVQ0TUlYIFJJTjQvUlhQIEJ5cGFzcyBTd2l0Y2giLCAiUklONC9SWFAifSwKKworCS8qIFJPTk1JWCAqLworCXsiUk9OTUlYIiwgIlJPTk1JWCBSaWdodCBNaXhlciBQR0EgU3dpdGNoIiwgIlJPUEdBIn0sCisJeyJST05NSVgiLCAiUk9OTUlYIExlZnQgTWl4ZXIgUEdBIFN3aXRjaCIsICJMT1BHQSJ9LAorCXsiUk9OTUlYIiwgIlJPTk1JWCBJbnZlcnRlZCBST1AgU3dpdGNoIiwgIlJPUE1JWCJ9LAorCisJLyogUk9QTUlYICovCisJeyJST1BNSVgiLCAiUk9QTUlYIExlZnQgTWljIEJ5cGFzcyBTd2l0Y2giLCAiTElOMTIgUEdBIn0sCisJeyJST1BNSVgiLCAiUk9QTUlYIFJpZ2h0IE1pYyBCeXBhc3MgU3dpdGNoIiwgIlJJTjEyIFBHQSJ9LAorCXsiUk9QTUlYIiwgIlJPUE1JWCBSaWdodCBNaXhlciBQR0EgU3dpdGNoIiwgIlJPUEdBIn0sCisKKwkvKiBPdXQgTWl4ZXIgUEdBcyAqLworCXsiTE9QR0EiLCBOVUxMLCAiTE9NSVgifSwKKwl7IlJPUEdBIiwgTlVMTCwgIlJPTUlYIn0sCisKKwl7IkxPVVQgUEdBIiwgTlVMTCwgIkxPTUlYIn0sCisJeyJST1VUIFBHQSIsIE5VTEwsICJST01JWCJ9LAorCisJLyogT3V0cHV0IFBpbnMgKi8KKwl7IkxPTiIsIE5VTEwsICJMT05NSVgifSwKKwl7IkxPUCIsIE5VTEwsICJMT1BNSVgifSwKKwl7Ik9VVDMiLCBOVUxMLCAiT1VUM01JWCJ9LAorCXsiTE9VVCIsIE5VTEwsICJMT1VUIFBHQSJ9LAorCXsiU1BLTiIsIE5VTEwsICJTUEtNSVgifSwKKwl7IlJPVVQiLCBOVUxMLCAiUk9VVCBQR0EifSwKKwl7Ik9VVDQiLCBOVUxMLCAiT1VUNE1JWCJ9LAorCXsiUk9QIiwgTlVMTCwgIlJPUE1JWCJ9LAorCXsiUk9OIiwgTlVMTCwgIlJPTk1JWCJ9LAorfTsKKworc3RhdGljIGludCB3bTg0MDBfYWRkX3dpZGdldHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIHdtODQwMF9kYXBtX3dpZGdldHMsCisJCQkJICBBUlJBWV9TSVpFKHdtODQwMF9kYXBtX3dpZGdldHMpKTsKKworCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCBhdWRpb19tYXAsIEFSUkFZX1NJWkUoYXVkaW9fbWFwKSk7CisKKwlzbmRfc29jX2RhcG1fbmV3X3dpZGdldHMoY29kZWMpOworCXJldHVybiAwOworfQorCisvKgorICogQ2xvY2sgYWZ0ZXIgRkxMIGFuZCBkaXZpZGVycworICovCitzdGF0aWMgaW50IHdtODQwMF9zZXRfZGFpX3N5c2NsayhzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSwKKwkJaW50IGNsa19pZCwgdW5zaWduZWQgaW50IGZyZXEsIGludCBkaXIpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY29kZWNfZGFpLT5jb2RlYzsKKwlzdHJ1Y3Qgd204NDAwX3ByaXYgKndtODQwMCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisKKwl3bTg0MDAtPnN5c2NsayA9IGZyZXE7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBmbGxfZmFjdG9ycyB7CisJdTE2IG47CisJdTE2IGs7CisJdTE2IG91dGRpdjsKKwl1MTYgZnJhdGlvOworCXUxNiBmcmVxX3JlZjsKK307CisKKyNkZWZpbmUgRklYRURfRkxMX1NJWkUgKCgxIDw8IDE2KSAqIDEwKQorCitzdGF0aWMgaW50IGZsbF9mYWN0b3JzKHN0cnVjdCB3bTg0MDBfcHJpdiAqd204NDAwLCBzdHJ1Y3QgZmxsX2ZhY3RvcnMgKmZhY3RvcnMsCisJCSAgICAgICB1bnNpZ25lZCBpbnQgRnJlZiwgdW5zaWduZWQgaW50IEZvdXQpCit7CisJdTY0IEtwYXJ0OworCXVuc2lnbmVkIGludCBLLCBObW9kLCB0YXJnZXQ7CisKKwlmYWN0b3JzLT5vdXRkaXYgPSAyOworCXdoaWxlIChGb3V0ICogZmFjdG9ycy0+b3V0ZGl2IDwgIDkwMDAwMDAwIHx8CisJICAgICAgIEZvdXQgKiBmYWN0b3JzLT5vdXRkaXYgPiAxMDAwMDAwMDApIHsKKwkJZmFjdG9ycy0+b3V0ZGl2ICo9IDI7CisJCWlmIChmYWN0b3JzLT5vdXRkaXYgPiAzMikgeworCQkJZGV2X2Vycih3bTg0MDAtPndtODQwMC0+ZGV2LAorCQkJCSJVbnN1cHBvcnRlZCBGTEwgb3V0cHV0IGZyZXF1ZW5jeSAlZEh6XG4iLAorCQkJCUZvdXQpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisJdGFyZ2V0ID0gRm91dCAqIGZhY3RvcnMtPm91dGRpdjsKKwlmYWN0b3JzLT5vdXRkaXYgPSBmYWN0b3JzLT5vdXRkaXYgPj4gMjsKKworCWlmIChGcmVmIDwgNDgwMDApCisJCWZhY3RvcnMtPmZyZXFfcmVmID0gMTsKKwllbHNlCisJCWZhY3RvcnMtPmZyZXFfcmVmID0gMDsKKworCWlmIChGcmVmIDwgMTAwMDAwMCkKKwkJZmFjdG9ycy0+ZnJhdGlvID0gOTsKKwllbHNlCisJCWZhY3RvcnMtPmZyYXRpbyA9IDA7CisKKwkvKiBFbnN1cmUgd2UgaGF2ZSBhIGZyYWN0aW9uYWwgcGFydCAqLworCWRvIHsKKwkJaWYgKEZyZWYgPCAxMDAwMDAwKQorCQkJZmFjdG9ycy0+ZnJhdGlvLS07CisJCWVsc2UKKwkJCWZhY3RvcnMtPmZyYXRpbysrOworCisJCWlmIChmYWN0b3JzLT5mcmF0aW8gPCAxIHx8IGZhY3RvcnMtPmZyYXRpbyA+IDgpIHsKKwkJCWRldl9lcnIod204NDAwLT53bTg0MDAtPmRldiwKKwkJCQkiVW5hYmxlIHRvIGNhbGN1bGF0ZSBGUkFUSU9cbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlmYWN0b3JzLT5uID0gdGFyZ2V0IC8gKEZyZWYgKiBmYWN0b3JzLT5mcmF0aW8pOworCQlObW9kID0gdGFyZ2V0ICUgKEZyZWYgKiBmYWN0b3JzLT5mcmF0aW8pOworCX0gd2hpbGUgKE5tb2QgPT0gMCk7CisKKwkvKiBDYWxjdWxhdGUgZnJhY3Rpb25hbCBwYXJ0IC0gc2NhbGUgdXAgc28gd2UgY2FuIHJvdW5kLiAqLworCUtwYXJ0ID0gRklYRURfRkxMX1NJWkUgKiAobG9uZyBsb25nKU5tb2Q7CisKKwlkb19kaXYoS3BhcnQsIChGcmVmICogZmFjdG9ycy0+ZnJhdGlvKSk7CisKKwlLID0gS3BhcnQgJiAweEZGRkZGRkZGOworCisJaWYgKChLICUgMTApID49IDUpCisJCUsgKz0gNTsKKworCS8qIE1vdmUgZG93biB0byBwcm9wZXIgcmFuZ2Ugbm93IHJvdW5kaW5nIGlzIGRvbmUgKi8KKwlmYWN0b3JzLT5rID0gSyAvIDEwOworCisJZGV2X2RiZyh3bTg0MDAtPndtODQwMC0+ZGV2LAorCQkiRkxMOiBGcmVmPSVkIEZvdXQ9JWQgTj0leCBLPSV4LCBGUkFUSU89JXggT1VURElWPSV4XG4iLAorCQlGcmVmLCBGb3V0LAorCQlmYWN0b3JzLT5uLCBmYWN0b3JzLT5rLCBmYWN0b3JzLT5mcmF0aW8sIGZhY3RvcnMtPm91dGRpdik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg0MDBfc2V0X2RhaV9wbGwoc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWksIGludCBwbGxfaWQsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgZnJlcV9pbiwgdW5zaWduZWQgaW50IGZyZXFfb3V0KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNvZGVjX2RhaS0+Y29kZWM7CisJc3RydWN0IHdtODQwMF9wcml2ICp3bTg0MDAgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBmbGxfZmFjdG9ycyBmYWN0b3JzOworCWludCByZXQ7CisJdTE2IHJlZzsKKworCWlmIChmcmVxX2luID09IHdtODQwMC0+ZmxsX2luICYmIGZyZXFfb3V0ID09IHdtODQwMC0+ZmxsX291dCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoZnJlcV9vdXQgIT0gMCkgeworCQlyZXQgPSBmbGxfZmFjdG9ycyh3bTg0MDAsICZmYWN0b3JzLCBmcmVxX2luLCBmcmVxX291dCk7CisJCWlmIChyZXQgIT0gMCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJd204NDAwLT5mbGxfb3V0ID0gZnJlcV9vdXQ7CisJd204NDAwLT5mbGxfaW4gPSBmcmVxX2luOworCisJLyogV2UgKm11c3QqIGRpc2FibGUgdGhlIEZMTCBiZWZvcmUgYW55IGNoYW5nZXMgKi8KKwlyZWcgPSB3bTg0MDBfcmVhZChjb2RlYywgV004NDAwX1BPV0VSX01BTkFHRU1FTlRfMik7CisJcmVnICY9IH5XTTg0MDBfRkxMX0VOQTsKKwl3bTg0MDBfd3JpdGUoY29kZWMsIFdNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzIsIHJlZyk7CisKKwlyZWcgPSB3bTg0MDBfcmVhZChjb2RlYywgV004NDAwX0ZMTF9DT05UUk9MXzEpOworCXJlZyAmPSB+V004NDAwX0ZMTF9PU0NfRU5BOworCXdtODQwMF93cml0ZShjb2RlYywgV004NDAwX0ZMTF9DT05UUk9MXzEsIHJlZyk7CisKKwlpZiAoZnJlcV9vdXQgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlyZWcgJj0gfihXTTg0MDBfRkxMX1JFRl9GUkVRIHwgV004NDAwX0ZMTF9GUkFUSU9fTUFTSyk7CisJcmVnIHw9IFdNODQwMF9GTExfRlJBQyB8IGZhY3RvcnMuZnJhdGlvOworCXJlZyB8PSBmYWN0b3JzLmZyZXFfcmVmIDw8IFdNODQwMF9GTExfUkVGX0ZSRVFfU0hJRlQ7CisJd204NDAwX3dyaXRlKGNvZGVjLCBXTTg0MDBfRkxMX0NPTlRST0xfMSwgcmVnKTsKKworCXdtODQwMF93cml0ZShjb2RlYywgV004NDAwX0ZMTF9DT05UUk9MXzIsIGZhY3RvcnMuayk7CisJd204NDAwX3dyaXRlKGNvZGVjLCBXTTg0MDBfRkxMX0NPTlRST0xfMywgZmFjdG9ycy5uKTsKKworCXJlZyA9IHdtODQwMF9yZWFkKGNvZGVjLCBXTTg0MDBfRkxMX0NPTlRST0xfNCk7CisJcmVnICY9IFdNODQwMF9GTExfT1VURElWX01BU0s7CisJcmVnIHw9IGZhY3RvcnMub3V0ZGl2OworCXdtODQwMF93cml0ZShjb2RlYywgV004NDAwX0ZMTF9DT05UUk9MXzQsIHJlZyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFNldHMgQURDIGFuZCBWb2ljZSBEQUMgZm9ybWF0LgorICovCitzdGF0aWMgaW50IHdtODQwMF9zZXRfZGFpX2ZtdChzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSwKKwkJdW5zaWduZWQgaW50IGZtdCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjb2RlY19kYWktPmNvZGVjOworCXUxNiBhdWRpbzEsIGF1ZGlvMzsKKworCWF1ZGlvMSA9IHdtODQwMF9yZWFkKGNvZGVjLCBXTTg0MDBfQVVESU9fSU5URVJGQUNFXzEpOworCWF1ZGlvMyA9IHdtODQwMF9yZWFkKGNvZGVjLCBXTTg0MDBfQVVESU9fSU5URVJGQUNFXzMpOworCisJLyogc2V0IG1hc3Rlci9zbGF2ZSBhdWRpbyBpbnRlcmZhY2UgKi8KKwlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX01BU1RFUl9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTOgorCQlhdWRpbzMgJj0gfldNODQwMF9BSUZfTVNUUjE7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JNX0NGTToKKwkJYXVkaW8zIHw9IFdNODQwMF9BSUZfTVNUUjE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWF1ZGlvMSAmPSB+V004NDAwX0FJRl9GTVRfTUFTSzsKKworCS8qIGludGVyZmFjZSBmb3JtYXQgKi8KKwlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0ZPUk1BVF9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9JMlM6CisJCWF1ZGlvMSB8PSBXTTg0MDBfQUlGX0ZNVF9JMlM7CisJCWF1ZGlvMSAmPSB+V004NDAwX0FJRl9MUkNMS19JTlY7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfUklHSFRfSjoKKwkJYXVkaW8xIHw9IFdNODQwMF9BSUZfRk1UX1JJR0hUSjsKKwkJYXVkaW8xICY9IH5XTTg0MDBfQUlGX0xSQ0xLX0lOVjsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9MRUZUX0o6CisJCWF1ZGlvMSB8PSBXTTg0MDBfQUlGX0ZNVF9MRUZUSjsKKwkJYXVkaW8xICY9IH5XTTg0MDBfQUlGX0xSQ0xLX0lOVjsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9EU1BfQToKKwkJYXVkaW8xIHw9IFdNODQwMF9BSUZfRk1UX0RTUDsKKwkJYXVkaW8xICY9IH5XTTg0MDBfQUlGX0xSQ0xLX0lOVjsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9EU1BfQjoKKwkJYXVkaW8xIHw9IFdNODQwMF9BSUZfRk1UX0RTUCB8IFdNODQwMF9BSUZfTFJDTEtfSU5WOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwl3bTg0MDBfd3JpdGUoY29kZWMsIFdNODQwMF9BVURJT19JTlRFUkZBQ0VfMSwgYXVkaW8xKTsKKwl3bTg0MDBfd3JpdGUoY29kZWMsIFdNODQwMF9BVURJT19JTlRFUkZBQ0VfMywgYXVkaW8zKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg0MDBfc2V0X2RhaV9jbGtkaXYoc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWksCisJCWludCBkaXZfaWQsIGludCBkaXYpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY29kZWNfZGFpLT5jb2RlYzsKKwl1MTYgcmVnOworCisJc3dpdGNoIChkaXZfaWQpIHsKKwljYXNlIFdNODQwMF9NQ0xLX0RJVjoKKwkJcmVnID0gd204NDAwX3JlYWQoY29kZWMsIFdNODQwMF9DTE9DS0lOR18yKSAmCisJCQl+V004NDAwX01DTEtfRElWX01BU0s7CisJCXdtODQwMF93cml0ZShjb2RlYywgV004NDAwX0NMT0NLSU5HXzIsIHJlZyB8IGRpdik7CisJCWJyZWFrOworCWNhc2UgV004NDAwX0RBQ0NMS19ESVY6CisJCXJlZyA9IHdtODQwMF9yZWFkKGNvZGVjLCBXTTg0MDBfQ0xPQ0tJTkdfMikgJgorCQkJfldNODQwMF9EQUNfQ0xLRElWX01BU0s7CisJCXdtODQwMF93cml0ZShjb2RlYywgV004NDAwX0NMT0NLSU5HXzIsIHJlZyB8IGRpdik7CisJCWJyZWFrOworCWNhc2UgV004NDAwX0FEQ0NMS19ESVY6CisJCXJlZyA9IHdtODQwMF9yZWFkKGNvZGVjLCBXTTg0MDBfQ0xPQ0tJTkdfMikgJgorCQkJfldNODQwMF9BRENfQ0xLRElWX01BU0s7CisJCXdtODQwMF93cml0ZShjb2RlYywgV004NDAwX0NMT0NLSU5HXzIsIHJlZyB8IGRpdik7CisJCWJyZWFrOworCWNhc2UgV004NDAwX0JDTEtfRElWOgorCQlyZWcgPSB3bTg0MDBfcmVhZChjb2RlYywgV004NDAwX0NMT0NLSU5HXzEpICYKKwkJCX5XTTg0MDBfQkNMS19ESVZfTUFTSzsKKwkJd204NDAwX3dyaXRlKGNvZGVjLCBXTTg0MDBfQ0xPQ0tJTkdfMSwgcmVnIHwgZGl2KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTZXQgUENNIERBSSBiaXQgc2l6ZSBhbmQgc2FtcGxlIHJhdGUuCisgKi8KK3N0YXRpYyBpbnQgd204NDAwX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwlzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcywKKwlzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOworCXUxNiBhdWRpbzEgPSB3bTg0MDBfcmVhZChjb2RlYywgV004NDAwX0FVRElPX0lOVEVSRkFDRV8xKTsKKworCWF1ZGlvMSAmPSB+V004NDAwX0FJRl9XTF9NQVNLOworCS8qIGJpdCBzaXplICovCisJc3dpdGNoIChwYXJhbXNfZm9ybWF0KHBhcmFtcykpIHsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzE2X0xFOgorCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzIwXzNMRToKKwkJYXVkaW8xIHw9IFdNODQwMF9BSUZfV0xfMjBCSVRTOworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzI0X0xFOgorCQlhdWRpbzEgfD0gV004NDAwX0FJRl9XTF8yNEJJVFM7CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMzJfTEU6CisJCWF1ZGlvMSB8PSBXTTg0MDBfQUlGX1dMXzMyQklUUzsKKwkJYnJlYWs7CisJfQorCisJd204NDAwX3dyaXRlKGNvZGVjLCBXTTg0MDBfQVVESU9fSU5URVJGQUNFXzEsIGF1ZGlvMSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204NDAwX211dGUoc3RydWN0IHNuZF9zb2NfZGFpICpkYWksIGludCBtdXRlKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhaS0+Y29kZWM7CisJdTE2IHZhbCA9IHdtODQwMF9yZWFkKGNvZGVjLCBXTTg0MDBfREFDX0NUUkwpICYgfldNODQwMF9EQUNfTVVURTsKKworCWlmIChtdXRlKQorCQl3bTg0MDBfd3JpdGUoY29kZWMsIFdNODQwMF9EQUNfQ1RSTCwgdmFsIHwgV004NDAwX0RBQ19NVVRFKTsKKwllbHNlCisJCXdtODQwMF93cml0ZShjb2RlYywgV004NDAwX0RBQ19DVFJMLCB2YWwpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIFRPRE86IHNldCBiaWFzIGZvciBiZXN0IHBlcmZvcm1hbmNlIGF0IHN0YW5kYnkgKi8KK3N0YXRpYyBpbnQgd204NDAwX3NldF9iaWFzX2xldmVsKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKKwkJCQkgZW51bSBzbmRfc29jX2JpYXNfbGV2ZWwgbGV2ZWwpCit7CisJc3RydWN0IHdtODQwMF9wcml2ICp3bTg0MDAgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCXUxNiB2YWw7CisJaW50IHJldDsKKworCXN3aXRjaCAobGV2ZWwpIHsKKwljYXNlIFNORF9TT0NfQklBU19PTjoKKwkJYnJlYWs7CisKKwljYXNlIFNORF9TT0NfQklBU19QUkVQQVJFOgorCQkvKiBWTUlEPTIqNTBrICovCisJCXZhbCA9IHdtODQwMF9yZWFkKGNvZGVjLCBXTTg0MDBfUE9XRVJfTUFOQUdFTUVOVF8xKSAmCisJCQl+V004NDAwX1ZNSURfTU9ERV9NQVNLOworCQl3bTg0MDBfd3JpdGUoY29kZWMsIFdNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzEsIHZhbCB8IDB4Mik7CisJCWJyZWFrOworCisJY2FzZSBTTkRfU09DX0JJQVNfU1RBTkRCWToKKwkJaWYgKGNvZGVjLT5iaWFzX2xldmVsID09IFNORF9TT0NfQklBU19PRkYpIHsKKwkJCXJldCA9IHJlZ3VsYXRvcl9idWxrX2VuYWJsZShBUlJBWV9TSVpFKHBvd2VyKSwKKwkJCQkJCSAgICAmcG93ZXJbMF0pOworCQkJaWYgKHJldCAhPSAwKSB7CisJCQkJZGV2X2Vycih3bTg0MDAtPndtODQwMC0+ZGV2LAorCQkJCQkiRmFpbGVkIHRvIGVuYWJsZSByZWd1bGF0b3JzOiAlZFxuIiwKKwkJCQkJcmV0KTsKKwkJCQlyZXR1cm4gcmV0OworCQkJfQorCisJCQl3bTg0MDBfd3JpdGUoY29kZWMsIFdNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzEsCisJCQkJICAgICBXTTg0MDBfQ09ERUNfRU5BIHwgV004NDAwX1NZU0NMS19FTkEpOworCisJCQkvKiBFbmFibGUgUE9CQ1RSTCwgU09GVF9TVCwgVk1JRFRPRyBhbmQgQlVGRENPUEVOICovCisJCQl3bTg0MDBfd3JpdGUoY29kZWMsIFdNODQwMF9BTlRJUE9QMiwgV004NDAwX1NPRlRTVCB8CisJCQkJICAgICBXTTg0MDBfQlVGRENPUEVOIHwgV004NDAwX1BPQkNUUkwpOworCisJCQltc2xlZXAoNTApOworCisJCQkvKiBFbmFibGUgVlJFRiAmIFZNSUQgYXQgMng1MGsgKi8KKwkJCXZhbCA9IHdtODQwMF9yZWFkKGNvZGVjLCBXTTg0MDBfUE9XRVJfTUFOQUdFTUVOVF8xKTsKKwkJCXZhbCB8PSAweDIgfCBXTTg0MDBfVlJFRl9FTkE7CisJCQl3bTg0MDBfd3JpdGUoY29kZWMsIFdNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzEsIHZhbCk7CisKKwkJCS8qIEVuYWJsZSBCVUZJT0VOICovCisJCQl3bTg0MDBfd3JpdGUoY29kZWMsIFdNODQwMF9BTlRJUE9QMiwgV004NDAwX1NPRlRTVCB8CisJCQkJICAgICBXTTg0MDBfQlVGRENPUEVOIHwgV004NDAwX1BPQkNUUkwgfAorCQkJCSAgICAgV004NDAwX0JVRklPRU4pOworCisJCQkvKiBkaXNhYmxlIFBPQkNUUkwsIFNPRlRfU1QgYW5kIEJVRkRDT1BFTiAqLworCQkJd204NDAwX3dyaXRlKGNvZGVjLCBXTTg0MDBfQU5USVBPUDIsIFdNODQwMF9CVUZJT0VOKTsKKwkJfQorCisJCS8qIFZNSUQ9MiozMDBrICovCisJCXZhbCA9IHdtODQwMF9yZWFkKGNvZGVjLCBXTTg0MDBfUE9XRVJfTUFOQUdFTUVOVF8xKSAmCisJCQl+V004NDAwX1ZNSURfTU9ERV9NQVNLOworCQl3bTg0MDBfd3JpdGUoY29kZWMsIFdNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzEsIHZhbCB8IDB4NCk7CisJCWJyZWFrOworCisJY2FzZSBTTkRfU09DX0JJQVNfT0ZGOgorCQkvKiBFbmFibGUgUE9CQ1RSTCBhbmQgU09GVF9TVCAqLworCQl3bTg0MDBfd3JpdGUoY29kZWMsIFdNODQwMF9BTlRJUE9QMiwgV004NDAwX1NPRlRTVCB8CisJCQlXTTg0MDBfUE9CQ1RSTCB8IFdNODQwMF9CVUZJT0VOKTsKKworCQkvKiBFbmFibGUgUE9CQ1RSTCwgU09GVF9TVCBhbmQgQlVGRENPUEVOICovCisJCXdtODQwMF93cml0ZShjb2RlYywgV004NDAwX0FOVElQT1AyLCBXTTg0MDBfU09GVFNUIHwKKwkJCVdNODQwMF9CVUZEQ09QRU4gfCBXTTg0MDBfUE9CQ1RSTCB8CisJCQlXTTg0MDBfQlVGSU9FTik7CisKKwkJLyogbXV0ZSBEQUMgKi8KKwkJdmFsID0gd204NDAwX3JlYWQoY29kZWMsIFdNODQwMF9EQUNfQ1RSTCk7CisJCXdtODQwMF93cml0ZShjb2RlYywgV004NDAwX0RBQ19DVFJMLCB2YWwgfCBXTTg0MDBfREFDX01VVEUpOworCisJCS8qIEVuYWJsZSBhbnkgZGlzYWJsZWQgb3V0cHV0cyAqLworCQl2YWwgPSB3bTg0MDBfcmVhZChjb2RlYywgV004NDAwX1BPV0VSX01BTkFHRU1FTlRfMSk7CisJCXZhbCB8PSBXTTg0MDBfU1BLX0VOQSB8IFdNODQwMF9PVVQzX0VOQSB8CisJCQlXTTg0MDBfT1VUNF9FTkEgfCBXTTg0MDBfTE9VVF9FTkEgfAorCQkJV004NDAwX1JPVVRfRU5BOworCQl3bTg0MDBfd3JpdGUoY29kZWMsIFdNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzEsIHZhbCk7CisKKwkJLyogRGlzYWJsZSBWTUlEICovCisJCXZhbCAmPSB+V004NDAwX1ZNSURfTU9ERV9NQVNLOworCQl3bTg0MDBfd3JpdGUoY29kZWMsIFdNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzEsIHZhbCk7CisKKwkJbXNsZWVwKDMwMCk7CisKKwkJLyogRW5hYmxlIGFsbCBvdXRwdXQgZGlzY2hhcmdlIGJpdHMgKi8KKwkJd204NDAwX3dyaXRlKGNvZGVjLCBXTTg0MDBfQU5USVBPUDEsIFdNODQwMF9ESVNfTExJTkUgfAorCQkJV004NDAwX0RJU19STElORSB8IFdNODQwMF9ESVNfT1VUMyB8CisJCQlXTTg0MDBfRElTX09VVDQgfCBXTTg0MDBfRElTX0xPVVQgfAorCQkJV004NDAwX0RJU19ST1VUKTsKKworCQkvKiBEaXNhYmxlIFZSRUYgKi8KKwkJdmFsICY9IH5XTTg0MDBfVlJFRl9FTkE7CisJCXdtODQwMF93cml0ZShjb2RlYywgV004NDAwX1BPV0VSX01BTkFHRU1FTlRfMSwgdmFsKTsKKworCQkvKiBkaXNhYmxlIFBPQkNUUkwsIFNPRlRfU1QgYW5kIEJVRkRDT1BFTiAqLworCQl3bTg0MDBfd3JpdGUoY29kZWMsIFdNODQwMF9BTlRJUE9QMiwgMHgwKTsKKworCQlyZXQgPSByZWd1bGF0b3JfYnVsa19kaXNhYmxlKEFSUkFZX1NJWkUocG93ZXIpLAorCQkJCQkgICAgICZwb3dlclswXSk7CisJCWlmIChyZXQgIT0gMCkKKwkJCXJldHVybiByZXQ7CisKKwkJYnJlYWs7CisJfQorCisJY29kZWMtPmJpYXNfbGV2ZWwgPSBsZXZlbDsKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBXTTg0MDBfUkFURVMgU05EUlZfUENNX1JBVEVfODAwMF85NjAwMAorCisjZGVmaW5lIFdNODQwMF9GT1JNQVRTIChTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8IFNORFJWX1BDTV9GTVRCSVRfUzIwXzNMRSB8XAorCVNORFJWX1BDTV9GTVRCSVRfUzI0X0xFKQorCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyB3bTg0MDBfZGFpX29wcyA9IHsKKwkuaHdfcGFyYW1zID0gd204NDAwX2h3X3BhcmFtcywKKwkuZGlnaXRhbF9tdXRlID0gd204NDAwX211dGUsCisJLnNldF9mbXQgPSB3bTg0MDBfc2V0X2RhaV9mbXQsCisJLnNldF9jbGtkaXYgPSB3bTg0MDBfc2V0X2RhaV9jbGtkaXYsCisJLnNldF9zeXNjbGsgPSB3bTg0MDBfc2V0X2RhaV9zeXNjbGssCisJLnNldF9wbGwgPSB3bTg0MDBfc2V0X2RhaV9wbGwsCit9OworCisvKgorICogVGhlIFdNODQwMCBzdXBwb3J0cyAyIGRpZmZlcmVudCBhbmQgbXV0dWFsbHkgZXhjbHVzaXZlIERBSQorICogY29uZmlndXJhdGlvbnMuCisgKgorICogMS4gQURDL0RBQyBvbiBQcmltYXJ5IEludGVyZmFjZQorICogMi4gQURDIG9uIFByaW1hcnkgSW50ZXJmYWNlL0RBQyBvbiBzZWNvbmRhcnkKKyAqLworc3RydWN0IHNuZF9zb2NfZGFpIHdtODQwMF9kYWkgPSB7CisvKiBBREMvREFDIG9uIHByaW1hcnkgKi8KKwkubmFtZSA9ICJXTTg0MDAgQURDL0RBQyBQcmltYXJ5IiwKKwkuaWQgPSAxLAorCS5wbGF5YmFjayA9IHsKKwkJLnN0cmVhbV9uYW1lID0gIlBsYXliYWNrIiwKKwkJLmNoYW5uZWxzX21pbiA9IDEsCisJCS5jaGFubmVsc19tYXggPSAyLAorCQkucmF0ZXMgPSBXTTg0MDBfUkFURVMsCisJCS5mb3JtYXRzID0gV004NDAwX0ZPUk1BVFMsCisJfSwKKwkuY2FwdHVyZSA9IHsKKwkJLnN0cmVhbV9uYW1lID0gIkNhcHR1cmUiLAorCQkuY2hhbm5lbHNfbWluID0gMSwKKwkJLmNoYW5uZWxzX21heCA9IDIsCisJCS5yYXRlcyA9IFdNODQwMF9SQVRFUywKKwkJLmZvcm1hdHMgPSBXTTg0MDBfRk9STUFUUywKKwl9LAorCS5vcHMgPSAmd204NDAwX2RhaV9vcHMsCit9OworRVhQT1JUX1NZTUJPTF9HUEwod204NDAwX2RhaSk7CisKK3N0YXRpYyBpbnQgd204NDAwX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKKworCXdtODQwMF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg0MDBfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOworCisJd204NDAwX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2NvZGVjICp3bTg0MDBfY29kZWM7CisKK3N0YXRpYyBpbnQgd204NDAwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CisJaW50IHJldDsKKworCWlmICghd204NDAwX2NvZGVjKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIndtODQwMCBub3QgeWV0IGRpc2NvdmVyZWRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJY29kZWMgPSB3bTg0MDBfY29kZWM7CisKKwlzb2NkZXYtPmNhcmQtPmNvZGVjID0gY29kZWM7CisKKwkvKiByZWdpc3RlciBwY21zICovCisJcmV0ID0gc25kX3NvY19uZXdfcGNtcyhzb2NkZXYsIFNORFJWX0RFRkFVTFRfSURYMSwgU05EUlZfREVGQVVMVF9TVFIxKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gY3JlYXRlIHBjbXNcbiIpOworCQlnb3RvIHBjbV9lcnI7CisJfQorCisJd204NDAwX2FkZF9jb250cm9scyhjb2RlYyk7CisJd204NDAwX2FkZF93aWRnZXRzKGNvZGVjKTsKKworCXJldCA9IHNuZF9zb2NfaW5pdF9jYXJkKHNvY2Rldik7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIGNhcmRcbiIpOworCQlnb3RvIGNhcmRfZXJyOworCX0KKworCXJldHVybiByZXQ7CisKK2NhcmRfZXJyOgorCXNuZF9zb2NfZnJlZV9wY21zKHNvY2Rldik7CisJc25kX3NvY19kYXBtX2ZyZWUoc29jZGV2KTsKK3BjbV9lcnI6CisJcmV0dXJuIHJldDsKK30KKworLyogcG93ZXIgZG93biBjaGlwICovCitzdGF0aWMgaW50IHdtODQwMF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJc25kX3NvY19mcmVlX3BjbXMoc29jZGV2KTsKKwlzbmRfc29jX2RhcG1fZnJlZShzb2NkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBzbmRfc29jX2NvZGVjX2RldmljZSBzb2NfY29kZWNfZGV2X3dtODQwMCA9IHsKKwkucHJvYmUgPQl3bTg0MDBfcHJvYmUsCisJLnJlbW92ZSA9CXdtODQwMF9yZW1vdmUsCisJLnN1c3BlbmQgPQl3bTg0MDBfc3VzcGVuZCwKKwkucmVzdW1lID0Jd204NDAwX3Jlc3VtZSwKK307CisKK3N0YXRpYyB2b2lkIHdtODQwMF9wcm9iZV9kZWZlcnJlZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHdtODQwMF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB3bTg0MDBfcHJpdiwKKwkJCQkJCXdvcmspOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9ICZwcml2LT5jb2RlYzsKKwlpbnQgcmV0OworCisJLyogY2hhcmdlIG91dHB1dCBjYXBzICovCisJd204NDAwX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7CisKKwkvKiBXZSdyZSBkb25lLCB0ZWxsIHRoZSBzdWJzeXN0ZW0uICovCisJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9jb2RlYyhjb2RlYyk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIocHJpdi0+d204NDAwLT5kZXYsCisJCQkiRmFpbGVkIHRvIHJlZ2lzdGVyIGNvZGVjOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnI7CisJfQorCisJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9kYWkoJndtODQwMF9kYWkpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKHByaXYtPndtODQwMC0+ZGV2LAorCQkJIkZhaWxlZCB0byByZWdpc3RlciBEQUk6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9jb2RlYzsKKwl9CisKKwlyZXR1cm47CisKK2Vycl9jb2RlYzoKKwlzbmRfc29jX3VucmVnaXN0ZXJfY29kZWMoY29kZWMpOworZXJyOgorCXdtODQwMF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7Cit9CisKK3N0YXRpYyBpbnQgd204NDAwX2NvZGVjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgd204NDAwX3ByaXYgKnByaXY7CisJaW50IHJldDsKKwl1MTYgcmVnOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKKworCXByaXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgd204NDAwX3ByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAocHJpdiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNvZGVjID0gJnByaXYtPmNvZGVjOworCWNvZGVjLT5wcml2YXRlX2RhdGEgPSBwcml2OworCWNvZGVjLT5jb250cm9sX2RhdGEgPSBkZXYtPmRldi5kcml2ZXJfZGF0YTsKKwlwcml2LT53bTg0MDAgPSBkZXYtPmRldi5kcml2ZXJfZGF0YTsKKworCXJldCA9IHJlZ3VsYXRvcl9idWxrX2dldChwcml2LT53bTg0MDAtPmRldiwKKwkJCQkgQVJSQVlfU0laRShwb3dlciksICZwb3dlclswXSk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiRmFpbGVkIHRvIGdldCByZWd1bGF0b3JzOiAlZFxuIiwgcmV0KTsKKwkgICAgICAgIGdvdG8gZXJyOworCX0KKworCWNvZGVjLT5kZXYgPSAmZGV2LT5kZXY7CisJd204NDAwX2RhaS5kZXYgPSAmZGV2LT5kZXY7CisKKwljb2RlYy0+bmFtZSA9ICJXTTg0MDAiOworCWNvZGVjLT5vd25lciA9IFRISVNfTU9EVUxFOworCWNvZGVjLT5yZWFkID0gd204NDAwX3JlYWQ7CisJY29kZWMtPndyaXRlID0gd204NDAwX3dyaXRlOworCWNvZGVjLT5iaWFzX2xldmVsID0gU05EX1NPQ19CSUFTX09GRjsKKwljb2RlYy0+c2V0X2JpYXNfbGV2ZWwgPSB3bTg0MDBfc2V0X2JpYXNfbGV2ZWw7CisJY29kZWMtPmRhaSA9ICZ3bTg0MDBfZGFpOworCWNvZGVjLT5udW1fZGFpID0gMTsKKwljb2RlYy0+cmVnX2NhY2hlX3NpemUgPSBXTTg0MDBfUkVHSVNURVJfQ09VTlQ7CisJbXV0ZXhfaW5pdCgmY29kZWMtPm11dGV4KTsKKwlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fd2lkZ2V0cyk7CisJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3BhdGhzKTsKKwlJTklUX1dPUksoJnByaXYtPndvcmssIHdtODQwMF9wcm9iZV9kZWZlcnJlZCk7CisKKwl3bTg0MDBfY29kZWNfcmVzZXQoY29kZWMpOworCisJcmVnID0gd204NDAwX3JlYWQoY29kZWMsIFdNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzEpOworCXdtODQwMF93cml0ZShjb2RlYywgV004NDAwX1BPV0VSX01BTkFHRU1FTlRfMSwgcmVnIHwgV004NDAwX0NPREVDX0VOQSk7CisKKwkvKiBMYXRjaCB2b2x1bWUgdXBkYXRlIGJpdHMgKi8KKwlyZWcgPSB3bTg0MDBfcmVhZChjb2RlYywgV004NDAwX0xFRlRfTElORV9JTlBVVF8xXzJfVk9MVU1FKTsKKwl3bTg0MDBfd3JpdGUoY29kZWMsIFdNODQwMF9MRUZUX0xJTkVfSU5QVVRfMV8yX1ZPTFVNRSwKKwkJICAgICByZWcgJiBXTTg0MDBfSVBWVSk7CisJcmVnID0gd204NDAwX3JlYWQoY29kZWMsIFdNODQwMF9SSUdIVF9MSU5FX0lOUFVUXzFfMl9WT0xVTUUpOworCXdtODQwMF93cml0ZShjb2RlYywgV004NDAwX1JJR0hUX0xJTkVfSU5QVVRfMV8yX1ZPTFVNRSwKKwkJICAgICByZWcgJiBXTTg0MDBfSVBWVSk7CisKKwl3bTg0MDBfd3JpdGUoY29kZWMsIFdNODQwMF9MRUZUX09VVFBVVF9WT0xVTUUsIDB4NTAgfCAoMTw8OCkpOworCXdtODQwMF93cml0ZShjb2RlYywgV004NDAwX1JJR0hUX09VVFBVVF9WT0xVTUUsIDB4NTAgfCAoMTw8OCkpOworCisJd204NDAwX2NvZGVjID0gY29kZWM7CisKKwlpZiAoIXNjaGVkdWxlX3dvcmsoJnByaXYtPndvcmspKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyX3JlZ3VsYXRvcjsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyX3JlZ3VsYXRvcjoKKwl3bTg0MDBfY29kZWMgPSBOVUxMOworCXJlZ3VsYXRvcl9idWxrX2ZyZWUoQVJSQVlfU0laRShwb3dlciksIHBvd2VyKTsKK2VycjoKKwlrZnJlZShwcml2KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZXhpdCB3bTg0MDBfY29kZWNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgd204NDAwX3ByaXYgKnByaXYgPSB3bTg0MDBfY29kZWMtPnByaXZhdGVfZGF0YTsKKwl1MTYgcmVnOworCisJc25kX3NvY191bnJlZ2lzdGVyX2RhaSgmd204NDAwX2RhaSk7CisJc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKHdtODQwMF9jb2RlYyk7CisKKwlyZWcgPSB3bTg0MDBfcmVhZCh3bTg0MDBfY29kZWMsIFdNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzEpOworCXdtODQwMF93cml0ZSh3bTg0MDBfY29kZWMsIFdNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzEsCisJCSAgICAgcmVnICYgKH5XTTg0MDBfQ09ERUNfRU5BKSk7CisKKwlyZWd1bGF0b3JfYnVsa19mcmVlKEFSUkFZX1NJWkUocG93ZXIpLCBwb3dlcik7CisJa2ZyZWUocHJpdik7CisKKwl3bTg0MDBfY29kZWMgPSBOVUxMOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHdtODQwMF9jb2RlY19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAid204NDAwLWNvZGVjIiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUgPSB3bTg0MDBfY29kZWNfcHJvYmUsCisJLnJlbW92ZQk9IF9fZXhpdF9wKHdtODQwMF9jb2RlY19yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgd204NDAwX2NvZGVjX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ3bTg0MDBfY29kZWNfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KHdtODQwMF9jb2RlY19pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHdtODQwMF9jb2RlY19leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJndtODQwMF9jb2RlY19kcml2ZXIpOworfQorbW9kdWxlX2V4aXQod204NDAwX2NvZGVjX2V4aXQpOworCitFWFBPUlRfU1lNQk9MX0dQTChzb2NfY29kZWNfZGV2X3dtODQwMCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiQVNvQyBXTTg0MDAgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJNYXJrIEJyb3duIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOndtODQwMC1jb2RlYyIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg0MDAuaCBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NDAwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzljNTkzNAotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NDAwLmgKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIHdtODQwMC5oICAtLSAgYXVkaW8gZHJpdmVyIGZvciBXTTg0MDAKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDLgorICogQXV0aG9yOiBNYXJrIEJyb3duIDxicm9vbmllQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2lmbmRlZiBfV004NDAwX0NPREVDX0gKKyNkZWZpbmUgX1dNODQwMF9DT0RFQ19ICisKKyNkZWZpbmUgV004NDAwX01DTEtfRElWIDAKKyNkZWZpbmUgV004NDAwX0RBQ0NMS19ESVYgMQorI2RlZmluZSBXTTg0MDBfQURDQ0xLX0RJViAyCisjZGVmaW5lIFdNODQwMF9CQ0xLX0RJViAzCisKKyNkZWZpbmUgV004NDAwX01DTEtfRElWXzEgMHg0MDAKKyNkZWZpbmUgV004NDAwX01DTEtfRElWXzIgMHg4MDAKKworI2RlZmluZSBXTTg0MDBfREFDX0NMS0RJVl8xICAgIDB4MDAKKyNkZWZpbmUgV004NDAwX0RBQ19DTEtESVZfMV81ICAweDA0CisjZGVmaW5lIFdNODQwMF9EQUNfQ0xLRElWXzIgICAgMHgwOAorI2RlZmluZSBXTTg0MDBfREFDX0NMS0RJVl8zICAgIDB4MGMKKyNkZWZpbmUgV004NDAwX0RBQ19DTEtESVZfNCAgICAweDEwCisjZGVmaW5lIFdNODQwMF9EQUNfQ0xLRElWXzVfNSAgMHgxNAorI2RlZmluZSBXTTg0MDBfREFDX0NMS0RJVl82ICAgIDB4MTgKKworI2RlZmluZSBXTTg0MDBfQURDX0NMS0RJVl8xICAgIDB4MDAKKyNkZWZpbmUgV004NDAwX0FEQ19DTEtESVZfMV81ICAweDIwCisjZGVmaW5lIFdNODQwMF9BRENfQ0xLRElWXzIgICAgMHg0MAorI2RlZmluZSBXTTg0MDBfQURDX0NMS0RJVl8zICAgIDB4NjAKKyNkZWZpbmUgV004NDAwX0FEQ19DTEtESVZfNCAgICAweDgwCisjZGVmaW5lIFdNODQwMF9BRENfQ0xLRElWXzVfNSAgMHhhMAorI2RlZmluZSBXTTg0MDBfQURDX0NMS0RJVl82ICAgIDB4YzAKKworCisjZGVmaW5lIFdNODQwMF9CQ0xLX0RJVl8xICAgICAgICAgICAgICAgICAgICAgICAoMHgwIDw8IDEpCisjZGVmaW5lIFdNODQwMF9CQ0xLX0RJVl8xXzUgICAgICAgICAgICAgICAgICAgICAoMHgxIDw8IDEpCisjZGVmaW5lIFdNODQwMF9CQ0xLX0RJVl8yICAgICAgICAgICAgICAgICAgICAgICAoMHgyIDw8IDEpCisjZGVmaW5lIFdNODQwMF9CQ0xLX0RJVl8zICAgICAgICAgICAgICAgICAgICAgICAoMHgzIDw8IDEpCisjZGVmaW5lIFdNODQwMF9CQ0xLX0RJVl80ICAgICAgICAgICAgICAgICAgICAgICAoMHg0IDw8IDEpCisjZGVmaW5lIFdNODQwMF9CQ0xLX0RJVl81XzUgICAgICAgICAgICAgICAgICAgICAoMHg1IDw8IDEpCisjZGVmaW5lIFdNODQwMF9CQ0xLX0RJVl82ICAgICAgICAgICAgICAgICAgICAgICAoMHg2IDw8IDEpCisjZGVmaW5lIFdNODQwMF9CQ0xLX0RJVl84ICAgICAgICAgICAgICAgICAgICAgICAoMHg3IDw8IDEpCisjZGVmaW5lIFdNODQwMF9CQ0xLX0RJVl8xMSAgICAgICAgICAgICAgICAgICAgICAoMHg4IDw8IDEpCisjZGVmaW5lIFdNODQwMF9CQ0xLX0RJVl8xMiAgICAgICAgICAgICAgICAgICAgICAoMHg5IDw8IDEpCisjZGVmaW5lIFdNODQwMF9CQ0xLX0RJVl8xNiAgICAgICAgICAgICAgICAgICAgICAoMHhBIDw8IDEpCisjZGVmaW5lIFdNODQwMF9CQ0xLX0RJVl8yMiAgICAgICAgICAgICAgICAgICAgICAoMHhCIDw8IDEpCisjZGVmaW5lIFdNODQwMF9CQ0xLX0RJVl8yNCAgICAgICAgICAgICAgICAgICAgICAoMHhDIDw8IDEpCisjZGVmaW5lIFdNODQwMF9CQ0xLX0RJVl8zMiAgICAgICAgICAgICAgICAgICAgICAoMHhEIDw8IDEpCisjZGVmaW5lIFdNODQwMF9CQ0xLX0RJVl80NCAgICAgICAgICAgICAgICAgICAgICAoMHhFIDw8IDEpCisjZGVmaW5lIFdNODQwMF9CQ0xLX0RJVl80OCAgICAgICAgICAgICAgICAgICAgICAoMHhGIDw8IDEpCisKK2V4dGVybiBzdHJ1Y3Qgc25kX3NvY19kYWkgd204NDAwX2RhaTsKK2V4dGVybiBzdHJ1Y3Qgc25kX3NvY19jb2RlY19kZXZpY2Ugc29jX2NvZGVjX2Rldl93bTg0MDA7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg1MTAuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NTEwLmMKaW5kZXggNDBmODIzOC4uNmE0Y2VhMCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg1MTAuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODUxMC5jCkBAIC0xNzEsMjIgKzE3MSw2IEBACiBTT0NfU0lOR0xFKCJNb25vIFBsYXliYWNrIFN3aXRjaCIsIFdNODUxMF9NT05PTUlYLCA2LCAxLCAxKSwKIH07CiAKLS8qIGFkZCBub24gZGFwbSBjb250cm9scyAqLwotc3RhdGljIGludCB3bTg1MTBfYWRkX2NvbnRyb2xzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKLXsKLQlpbnQgZXJyLCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod204NTEwX3NuZF9jb250cm9scyk7IGkrKykgewotCQllcnIgPSBzbmRfY3RsX2FkZChjb2RlYy0+Y2FyZCwKLQkJCQlzbmRfc29jX2NuZXcoJndtODUxMF9zbmRfY29udHJvbHNbaV0sIGNvZGVjLAotCQkJCQlOVUxMKSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQogLyogU3BlYWtlciBPdXRwdXQgTWl4ZXIgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg1MTBfc3BlYWtlcl9taXhlcl9jb250cm9sc1tdID0gewogU09DX0RBUE1fU0lOR0xFKCJMaW5lIEJ5cGFzcyBTd2l0Y2giLCBXTTg1MTBfU1BLTUlYLCAxLCAxLCAwKSwKQEAgLTM1Miw3ICszMzYsNyBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlwbGxfZmFjdG9ycyhmcmVxX291dCo4LCBmcmVxX2luKTsKKwlwbGxfZmFjdG9ycyhmcmVxX291dCo0LCBmcmVxX2luKTsKIAogCXdtODUxMF93cml0ZShjb2RlYywgV004NTEwX1BMTE4sIChwbGxfZGl2LnByZV9kaXYgPDwgNCkgfCBwbGxfZGl2Lm4pOwogCXdtODUxMF93cml0ZShjb2RlYywgV004NTEwX1BMTEsxLCBwbGxfZGl2LmsgPj4gMTgpOwpAQCAtMzgzLDcgKzM2Nyw3IEBACiAJCXdtODUxMF93cml0ZShjb2RlYywgV004NTEwX0dQSU8sIHJlZyB8IGRpdik7CiAJCWJyZWFrOwogCWNhc2UgV004NTEwX01DTEtESVY6Ci0JCXJlZyA9IHdtODUxMF9yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NTEwX0NMT0NLKSAmIDB4MWY7CisJCXJlZyA9IHdtODUxMF9yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NTEwX0NMT0NLKSAmIDB4MTFmOwogCQl3bTg1MTBfd3JpdGUoY29kZWMsIFdNODUxMF9DTE9DSywgcmVnIHwgZGl2KTsKIAkJYnJlYWs7CiAJY2FzZSBXTTg1MTBfQURDQ0xLOgpAQCAtNDY4LDcgKzQ1Miw3IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCXUxNiBpZmFjZSA9IHdtODUxMF9yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NTEwX0lGQUNFKSAmIDB4MTlmOwogCXUxNiBhZG4gPSB3bTg1MTBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODUxMF9BREQpICYgMHgxZjE7CiAKQEAgLTU3MCw2ICs1NTQsMTQgQEAKICNkZWZpbmUgV004NTEwX0ZPUk1BVFMgKFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwgU05EUlZfUENNX0ZNVEJJVF9TMjBfM0xFIHxcCiAJU05EUlZfUENNX0ZNVEJJVF9TMjRfTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MzMl9MRSkKIAorc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgd204NTEwX2RhaV9vcHMgPSB7CisJLmh3X3BhcmFtcwk9IHdtODUxMF9wY21faHdfcGFyYW1zLAorCS5kaWdpdGFsX211dGUJPSB3bTg1MTBfbXV0ZSwKKwkuc2V0X2ZtdAk9IHdtODUxMF9zZXRfZGFpX2ZtdCwKKwkuc2V0X2Nsa2Rpdgk9IHdtODUxMF9zZXRfZGFpX2Nsa2RpdiwKKwkuc2V0X3BsbAk9IHdtODUxMF9zZXRfZGFpX3BsbCwKK307CisKIHN0cnVjdCBzbmRfc29jX2RhaSB3bTg1MTBfZGFpID0gewogCS5uYW1lID0gIldNODUxMCBIaUZpIiwKIAkucGxheWJhY2sgPSB7CkBAIC01ODQsMjAgKzU3NiwxNCBAQAogCQkuY2hhbm5lbHNfbWF4ID0gMiwKIAkJLnJhdGVzID0gV004NTEwX1JBVEVTLAogCQkuZm9ybWF0cyA9IFdNODUxMF9GT1JNQVRTLH0sCi0JLm9wcyA9IHsKLQkJLmh3X3BhcmFtcyA9IHdtODUxMF9wY21faHdfcGFyYW1zLAotCQkuZGlnaXRhbF9tdXRlID0gd204NTEwX211dGUsCi0JCS5zZXRfZm10ID0gd204NTEwX3NldF9kYWlfZm10LAotCQkuc2V0X2Nsa2RpdiA9IHdtODUxMF9zZXRfZGFpX2Nsa2RpdiwKLQkJLnNldF9wbGwgPSB3bTg1MTBfc2V0X2RhaV9wbGwsCi0JfSwKKwkub3BzID0gJndtODUxMF9kYWlfb3BzLAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKHdtODUxMF9kYWkpOwogCiBzdGF0aWMgaW50IHdtODUxMF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCXdtODUxMF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7CiAJcmV0dXJuIDA7CkBAIC02MDYsNyArNTkyLDcgQEAKIHN0YXRpYyBpbnQgd204NTEwX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCWludCBpOwogCXU4IGRhdGFbMl07CiAJdTE2ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CkBAIC02MjgsNyArNjE0LDcgQEAKICAqLwogc3RhdGljIGludCB3bTg1MTBfaW5pdChzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldikKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJaW50IHJldCA9IDA7CiAKIAljb2RlYy0+bmFtZSA9ICJXTTg1MTAiOwpAQCAtNjU2LDcgKzY0Miw4IEBACiAJLyogcG93ZXIgb24gZGV2aWNlICovCiAJY29kZWMtPmJpYXNfbGV2ZWwgPSBTTkRfU09DX0JJQVNfT0ZGOwogCXdtODUxMF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1NUQU5EQlkpOwotCXdtODUxMF9hZGRfY29udHJvbHMoY29kZWMpOworCXNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCB3bTg1MTBfc25kX2NvbnRyb2xzLAorCQkJCUFSUkFZX1NJWkUod204NTEwX3NuZF9jb250cm9scykpOwogCXdtODUxMF9hZGRfd2lkZ2V0cyhjb2RlYyk7CiAJcmV0ID0gc25kX3NvY19pbml0X2NhcmQoc29jZGV2KTsKIAlpZiAocmV0IDwgMCkgewpAQCAtNjg1LDcgKzY3Miw3IEBACiAJCQkgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gd204NTEwX3NvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJaW50IHJldDsKIAogCWkyY19zZXRfY2xpZW50ZGF0YShpMmMsIGNvZGVjKTsKQEAgLTc2Niw3ICs3NTMsNyBAQAogc3RhdGljIGludCBfX2RldmluaXQgd204NTEwX3NwaV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gd204NTEwX3NvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJaW50IHJldDsKIAogCWNvZGVjLT5jb250cm9sX2RhdGEgPSBzcGk7CkBAIC04MzIsNyArODE5LDcgQEAKIAlpZiAoY29kZWMgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlzb2NkZXYtPmNvZGVjID0gY29kZWM7CisJc29jZGV2LT5jYXJkLT5jb2RlYyA9IGNvZGVjOwogCW11dGV4X2luaXQoJmNvZGVjLT5tdXRleCk7CiAJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3dpZGdldHMpOwogCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV9wYXRocyk7CkBAIC04NjIsNyArODQ5LDcgQEAKIHN0YXRpYyBpbnQgd204NTEwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJaWYgKGNvZGVjLT5jb250cm9sX2RhdGEpCiAJCXdtODUxMF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODU4MC5jIGIvc291bmQvc29jL2NvZGVjcy93bTg1ODAuYwppbmRleCBkMDA0ZTU4Li40NDJlYTZmIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODU4MC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NTgwLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogd204NTgwLmMgIC0tICBXTTg1ODAgQUxTQSBTb2MgQXVkaW8gZHJpdmVyCiAgKgotICogQ29weXJpZ2h0IDIwMDggV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFBMQy4KKyAqIENvcHlyaWdodCAyMDA4LCAyMDA5IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBQTEMuCiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAogICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQpAQCAtMzUsMTkgKzM1LDYgQEAKIAogI2luY2x1ZGUgIndtODU4MC5oIgogCi0jZGVmaW5lIFdNODU4MF9WRVJTSU9OICIwLjEiCi0KLXN0cnVjdCBwbGxfc3RhdGUgewotCXVuc2lnbmVkIGludCBpbjsKLQl1bnNpZ25lZCBpbnQgb3V0OwotfTsKLQotLyogY29kZWMgcHJpdmF0ZSBkYXRhICovCi1zdHJ1Y3Qgd204NTgwX3ByaXYgewotCXN0cnVjdCBwbGxfc3RhdGUgYTsKLQlzdHJ1Y3QgcGxsX3N0YXRlIGI7Ci19OwotCiAvKiBXTTg1ODAgcmVnaXN0ZXIgc3BhY2UgKi8KICNkZWZpbmUgV004NTgwX1BMTEExICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAKICNkZWZpbmUgV004NTgwX1BMTEEyICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEKQEAgLTEwMiw2ICs4OSw4IEBACiAjZGVmaW5lIFdNODU4MF9SRUFEQkFDSyAgICAgICAgICAgICAgICAgICAgICAweDM0CiAjZGVmaW5lIFdNODU4MF9SRVNFVCAgICAgICAgICAgICAgICAgICAgICAgICAweDM1CiAKKyNkZWZpbmUgV004NTgwX01BWF9SRUdJU1RFUiAgICAgICAgICAgICAgICAgIDB4MzUKKwogLyogUExMQjQgKHJlZ2lzdGVyIDdoKSAqLwogI2RlZmluZSBXTTg1ODBfUExMQjRfTUNMS09VVFNSQ19NQVNLICAgMHg2MAogI2RlZmluZSBXTTg1ODBfUExMQjRfTUNMS09VVFNSQ19QTExBICAgMHgyMApAQCAtMTkzLDYgKzE4MiwyMCBAQAogCTB4MDAwMCwgMHgwMDAwIC8qUjUzKi8KIH07CiAKK3N0cnVjdCBwbGxfc3RhdGUgeworCXVuc2lnbmVkIGludCBpbjsKKwl1bnNpZ25lZCBpbnQgb3V0OworfTsKKworLyogY29kZWMgcHJpdmF0ZSBkYXRhICovCitzdHJ1Y3Qgd204NTgwX3ByaXYgeworCXN0cnVjdCBzbmRfc29jX2NvZGVjIGNvZGVjOworCXUxNiByZWdfY2FjaGVbV004NTgwX01BWF9SRUdJU1RFUiArIDFdOworCXN0cnVjdCBwbGxfc3RhdGUgYTsKKwlzdHJ1Y3QgcGxsX3N0YXRlIGI7Cit9OworCisKIC8qCiAgKiByZWFkIHdtODU4MCByZWdpc3RlciBjYWNoZQogICovCkBAIC0yMDAsNyArMjAzLDcgQEAKIAl1bnNpZ25lZCBpbnQgcmVnKQogewogCXUxNiAqY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOwotCUJVR19PTihyZWcgPiBBUlJBWV9TSVpFKHdtODU4MF9yZWcpKTsKKwlCVUdfT04ocmVnID49IEFSUkFZX1NJWkUod204NTgwX3JlZykpOwogCXJldHVybiBjYWNoZVtyZWddOwogfQogCkBAIC0yMjMsNyArMjI2LDcgQEAKIHsKIAl1OCBkYXRhWzJdOwogCi0JQlVHX09OKHJlZyA+IEFSUkFZX1NJWkUod204NTgwX3JlZykpOworCUJVR19PTihyZWcgPj0gQVJSQVlfU0laRSh3bTg1ODBfcmVnKSk7CiAKIAkvKiBSZWdpc3RlcnMgYXJlIDkgYml0cyB3aWRlICovCiAJdmFsdWUgJj0gMHgxZmY7CkBAIC0zMzAsMjAgKzMzMyw2IEBACiBTT0NfU0lOR0xFKCJBREMgSGlnaC1QYXNzIEZpbHRlciBTd2l0Y2giLCBXTTg1ODBfQURDX0NPTlRST0wxLCA0LCAxLCAwKSwKIH07CiAKLS8qIEFkZCBub24tREFQTSBjb250cm9scyAqLwotc3RhdGljIGludCB3bTg1ODBfYWRkX2NvbnRyb2xzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKLXsKLQlpbnQgZXJyLCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod204NTgwX3NuZF9jb250cm9scyk7IGkrKykgewotCQllcnIgPSBzbmRfY3RsX2FkZChjb2RlYy0+Y2FyZCwKLQkJCQkgIHNuZF9zb2NfY25ldygmd204NTgwX3NuZF9jb250cm9sc1tpXSwKLQkJCQkJICAgICAgIGNvZGVjLCBOVUxMKSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQl9Ci0JcmV0dXJuIDA7Ci19CiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgd204NTgwX2RhcG1fd2lkZ2V0c1tdID0gewogU05EX1NPQ19EQVBNX0RBQygiREFDMSIsICJQbGF5YmFjayIsIFdNODU4MF9QV1JETjEsIDIsIDEpLAogU05EX1NPQ19EQVBNX0RBQygiREFDMiIsICJQbGF5YmFjayIsIFdNODU4MF9QV1JETjEsIDMsIDEpLApAQCAtNTUzLDcgKzU0Miw3IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCXUxNiBwYWlmYiA9IHdtODU4MF9yZWFkKGNvZGVjLCBXTTg1ODBfUEFJRjMgKyBkYWktPmlkKTsKIAogCXBhaWZiICY9IH5XTTg1ODBfQUlGX0xFTkdUSF9NQVNLOwpAQCAtNzcxLDggKzc2MCwyMiBAQAogCXN3aXRjaCAobGV2ZWwpIHsKIAljYXNlIFNORF9TT0NfQklBU19PTjoKIAljYXNlIFNORF9TT0NfQklBU19QUkVQQVJFOgotCWNhc2UgU05EX1NPQ19CSUFTX1NUQU5EQlk6CiAJCWJyZWFrOworCisJY2FzZSBTTkRfU09DX0JJQVNfU1RBTkRCWToKKwkJaWYgKGNvZGVjLT5iaWFzX2xldmVsID09IFNORF9TT0NfQklBU19PRkYpIHsKKwkJCS8qIFBvd2VyIHVwIGFuZCBnZXQgaW5kaXZpZHVhbCBjb250cm9sIG9mIHRoZSBEQUNzICovCisJCQlyZWcgPSB3bTg1ODBfcmVhZChjb2RlYywgV004NTgwX1BXUkROMSk7CisJCQlyZWcgJj0gfihXTTg1ODBfUFdSRE4xX1BXRE4gfCBXTTg1ODBfUFdSRE4xX0FMTERBQ1BEKTsKKwkJCXdtODU4MF93cml0ZShjb2RlYywgV004NTgwX1BXUkROMSwgcmVnKTsKKworCQkJLyogTWFrZSBWTUlEIGhpZ2ggaW1wZWRlbmNlICovCisJCQlyZWcgPSB3bTg1ODBfcmVhZChjb2RlYywgIFdNODU4MF9BRENfQ09OVFJPTDEpOworCQkJcmVnICY9IH4weDEwMDsKKwkJCXdtODU4MF93cml0ZShjb2RlYywgV004NTgwX0FEQ19DT05UUk9MMSwgcmVnKTsKKwkJfQorCQlicmVhazsKKwogCWNhc2UgU05EX1NPQ19CSUFTX09GRjoKIAkJcmVnID0gd204NTgwX3JlYWQoY29kZWMsIFdNODU4MF9QV1JETjEpOwogCQl3bTg1ODBfd3JpdGUoY29kZWMsIFdNODU4MF9QV1JETjEsIHJlZyB8IFdNODU4MF9QV1JETjFfUFdETik7CkBAIC03ODUsNiArNzg4LDIxIEBACiAjZGVmaW5lIFdNODU4MF9GT1JNQVRTIChTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8IFNORFJWX1BDTV9GTVRCSVRfUzIwXzNMRSB8XAogCQkJU05EUlZfUENNX0ZNVEJJVF9TMjRfTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MzMl9MRSkKIAorc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgd204NTgwX2RhaV9vcHNfcGxheWJhY2sgPSB7CisJLmh3X3BhcmFtcwk9IHdtODU4MF9wYWlmX2h3X3BhcmFtcywKKwkuc2V0X2ZtdAk9IHdtODU4MF9zZXRfcGFpZl9kYWlfZm10LAorCS5zZXRfY2xrZGl2CT0gd204NTgwX3NldF9kYWlfY2xrZGl2LAorCS5zZXRfcGxsCT0gd204NTgwX3NldF9kYWlfcGxsLAorCS5kaWdpdGFsX211dGUJPSB3bTg1ODBfZGlnaXRhbF9tdXRlLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgd204NTgwX2RhaV9vcHNfY2FwdHVyZSA9IHsKKwkuaHdfcGFyYW1zCT0gd204NTgwX3BhaWZfaHdfcGFyYW1zLAorCS5zZXRfZm10CT0gd204NTgwX3NldF9wYWlmX2RhaV9mbXQsCisJLnNldF9jbGtkaXYJPSB3bTg1ODBfc2V0X2RhaV9jbGtkaXYsCisJLnNldF9wbGwJPSB3bTg1ODBfc2V0X2RhaV9wbGwsCit9OworCiBzdHJ1Y3Qgc25kX3NvY19kYWkgd204NTgwX2RhaVtdID0gewogCXsKIAkJLm5hbWUgPSAiV004NTgwIFBBSUZSWCIsCkBAIC03OTYsMTMgKzgxNCw3IEBACiAJCQkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV84MDAwXzE5MjAwMCwKIAkJCS5mb3JtYXRzID0gV004NTgwX0ZPUk1BVFMsCiAJCX0sCi0JCS5vcHMgPSB7Ci0JCQkgLmh3X3BhcmFtcyA9IHdtODU4MF9wYWlmX2h3X3BhcmFtcywKLQkJCSAuc2V0X2ZtdCA9IHdtODU4MF9zZXRfcGFpZl9kYWlfZm10LAotCQkJIC5zZXRfY2xrZGl2ID0gd204NTgwX3NldF9kYWlfY2xrZGl2LAotCQkJIC5zZXRfcGxsID0gd204NTgwX3NldF9kYWlfcGxsLAotCQkJIC5kaWdpdGFsX211dGUgPSB3bTg1ODBfZGlnaXRhbF9tdXRlLAotCQkgfSwKKwkJLm9wcyA9ICZ3bTg1ODBfZGFpX29wc19wbGF5YmFjaywKIAl9LAogCXsKIAkJLm5hbWUgPSAiV004NTgwIFBBSUZUWCIsCkBAIC04MTQsMTA5ICs4MjYsMTY4IEBACiAJCQkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV84MDAwXzE5MjAwMCwKIAkJCS5mb3JtYXRzID0gV004NTgwX0ZPUk1BVFMsCiAJCX0sCi0JCS5vcHMgPSB7Ci0JCQkgLmh3X3BhcmFtcyA9IHdtODU4MF9wYWlmX2h3X3BhcmFtcywKLQkJCSAuc2V0X2ZtdCA9IHdtODU4MF9zZXRfcGFpZl9kYWlfZm10LAotCQkJIC5zZXRfY2xrZGl2ID0gd204NTgwX3NldF9kYWlfY2xrZGl2LAotCQkJIC5zZXRfcGxsID0gd204NTgwX3NldF9kYWlfcGxsLAotCQkgfSwKKwkJLm9wcyA9ICZ3bTg1ODBfZGFpX29wc19jYXB0dXJlLAogCX0sCiB9OwogRVhQT1JUX1NZTUJPTF9HUEwod204NTgwX2RhaSk7CiAKLS8qCi0gKiBpbml0aWFsaXNlIHRoZSBXTTg1ODAgZHJpdmVyCi0gKiByZWdpc3RlciB0aGUgbWl4ZXIgYW5kIGRzcCBpbnRlcmZhY2VzIHdpdGggdGhlIGtlcm5lbAotICovCi1zdGF0aWMgaW50IHdtODU4MF9pbml0KHN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2KQorc3RhdGljIHN0cnVjdCBzbmRfc29jX2NvZGVjICp3bTg1ODBfY29kZWM7CisKK3N0YXRpYyBpbnQgd204NTgwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKIAlpbnQgcmV0ID0gMDsKIAotCWNvZGVjLT5uYW1lID0gIldNODU4MCI7Ci0JY29kZWMtPm93bmVyID0gVEhJU19NT0RVTEU7Ci0JY29kZWMtPnJlYWQgPSB3bTg1ODBfcmVhZF9yZWdfY2FjaGU7Ci0JY29kZWMtPndyaXRlID0gd204NTgwX3dyaXRlOwotCWNvZGVjLT5zZXRfYmlhc19sZXZlbCA9IHdtODU4MF9zZXRfYmlhc19sZXZlbDsKLQljb2RlYy0+ZGFpID0gd204NTgwX2RhaTsKLQljb2RlYy0+bnVtX2RhaSA9IEFSUkFZX1NJWkUod204NTgwX2RhaSk7Ci0JY29kZWMtPnJlZ19jYWNoZV9zaXplID0gQVJSQVlfU0laRSh3bTg1ODBfcmVnKTsKLQljb2RlYy0+cmVnX2NhY2hlID0ga21lbWR1cCh3bTg1ODBfcmVnLCBzaXplb2Yod204NTgwX3JlZyksCi0JCQkJICAgR0ZQX0tFUk5FTCk7CisJaWYgKHdtODU4MF9jb2RlYyA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNvZGVjIGRldmljZSBub3QgcmVnaXN0ZXJlZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KIAotCWlmIChjb2RlYy0+cmVnX2NhY2hlID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JLyogR2V0IHRoZSBjb2RlYyBpbnRvIGEga25vd24gc3RhdGUgKi8KLQl3bTg1ODBfd3JpdGUoY29kZWMsIFdNODU4MF9SRVNFVCwgMCk7Ci0KLQkvKiBQb3dlciB1cCBhbmQgZ2V0IGluZGl2aWR1YWwgY29udHJvbCBvZiB0aGUgREFDcyAqLwotCXdtODU4MF93cml0ZShjb2RlYywgV004NTgwX1BXUkROMSwgd204NTgwX3JlYWQoY29kZWMsIFdNODU4MF9QV1JETjEpICYKLQkJICAgICB+KFdNODU4MF9QV1JETjFfUFdETiB8IFdNODU4MF9QV1JETjFfQUxMREFDUEQpKTsKLQotCS8qIE1ha2UgVk1JRCBoaWdoIGltcGVkZW5jZSAqLwotCXdtODU4MF93cml0ZShjb2RlYywgV004NTgwX0FEQ19DT05UUk9MMSwKLQkJICAgICB3bTg1ODBfcmVhZChjb2RlYywgIFdNODU4MF9BRENfQ09OVFJPTDEpICYgfjB4MTAwKTsKKwlzb2NkZXYtPmNhcmQtPmNvZGVjID0gd204NTgwX2NvZGVjOworCWNvZGVjID0gd204NTgwX2NvZGVjOwogCiAJLyogcmVnaXN0ZXIgcGNtcyAqLwotCXJldCA9IHNuZF9zb2NfbmV3X3BjbXMoc29jZGV2LCBTTkRSVl9ERUZBVUxUX0lEWDEsCi0JCQkgICAgICAgU05EUlZfREVGQVVMVF9TVFIxKTsKKwlyZXQgPSBzbmRfc29jX25ld19wY21zKHNvY2RldiwgU05EUlZfREVGQVVMVF9JRFgxLCBTTkRSVl9ERUZBVUxUX1NUUjEpOwogCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAid204NTgwOiBmYWlsZWQgdG8gY3JlYXRlIHBjbXNcbiIpOworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJmYWlsZWQgdG8gY3JlYXRlIHBjbXM6ICVkXG4iLCByZXQpOwogCQlnb3RvIHBjbV9lcnI7CiAJfQogCi0Jd204NTgwX2FkZF9jb250cm9scyhjb2RlYyk7CisJc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHdtODU4MF9zbmRfY29udHJvbHMsCisJCQkgICAgIEFSUkFZX1NJWkUod204NTgwX3NuZF9jb250cm9scykpOwogCXdtODU4MF9hZGRfd2lkZ2V0cyhjb2RlYyk7Ci0KIAlyZXQgPSBzbmRfc29jX2luaXRfY2FyZChzb2NkZXYpOwogCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAid204NTgwOiBmYWlsZWQgdG8gcmVnaXN0ZXIgY2FyZFxuIik7CisJCWRldl9lcnIoY29kZWMtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBjYXJkOiAlZFxuIiwgcmV0KTsKIAkJZ290byBjYXJkX2VycjsKIAl9CisKIAlyZXR1cm4gcmV0OwogCiBjYXJkX2VycjoKIAlzbmRfc29jX2ZyZWVfcGNtcyhzb2NkZXYpOwogCXNuZF9zb2NfZGFwbV9mcmVlKHNvY2Rldik7CiBwY21fZXJyOgotCWtmcmVlKGNvZGVjLT5yZWdfY2FjaGUpOwogCXJldHVybiByZXQ7CiB9CiAKLS8qIElmIHRoZSBpMmMgbGF5ZXIgd2VyZW4ndCBzbyBicm9rZW4sIHdlIGNvdWxkIHBhc3MgdGhpcyBraW5kIG9mIGRhdGEKLSAgIGFyb3VuZCAqLwotc3RhdGljIHN0cnVjdCBzbmRfc29jX2RldmljZSAqd204NTgwX3NvY2RldjsKKy8qIHBvd2VyIGRvd24gY2hpcCAqLworc3RhdGljIGludCB3bTg1ODBfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCXNuZF9zb2NfZnJlZV9wY21zKHNvY2Rldik7CisJc25kX3NvY19kYXBtX2ZyZWUoc29jZGV2KTsKKworCXJldHVybiAwOworfQorCitzdHJ1Y3Qgc25kX3NvY19jb2RlY19kZXZpY2Ugc29jX2NvZGVjX2Rldl93bTg1ODAgPSB7CisJLnByb2JlID0gCXdtODU4MF9wcm9iZSwKKwkucmVtb3ZlID0gCXdtODU4MF9yZW1vdmUsCit9OworRVhQT1JUX1NZTUJPTF9HUEwoc29jX2NvZGVjX2Rldl93bTg1ODApOworCitzdGF0aWMgaW50IHdtODU4MF9yZWdpc3RlcihzdHJ1Y3Qgd204NTgwX3ByaXYgKndtODU4MCkKK3sKKwlpbnQgcmV0LCBpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9ICZ3bTg1ODAtPmNvZGVjOworCisJaWYgKHdtODU4MF9jb2RlYykgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJBbm90aGVyIFdNODU4MCBpcyByZWdpc3RlcmVkXG4iKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBlcnI7CisJfQorCisJbXV0ZXhfaW5pdCgmY29kZWMtPm11dGV4KTsKKwlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fd2lkZ2V0cyk7CisJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3BhdGhzKTsKKworCWNvZGVjLT5wcml2YXRlX2RhdGEgPSB3bTg1ODA7CisJY29kZWMtPm5hbWUgPSAiV004NTgwIjsKKwljb2RlYy0+b3duZXIgPSBUSElTX01PRFVMRTsKKwljb2RlYy0+cmVhZCA9IHdtODU4MF9yZWFkX3JlZ19jYWNoZTsKKwljb2RlYy0+d3JpdGUgPSB3bTg1ODBfd3JpdGU7CisJY29kZWMtPmJpYXNfbGV2ZWwgPSBTTkRfU09DX0JJQVNfT0ZGOworCWNvZGVjLT5zZXRfYmlhc19sZXZlbCA9IHdtODU4MF9zZXRfYmlhc19sZXZlbDsKKwljb2RlYy0+ZGFpID0gd204NTgwX2RhaTsKKwljb2RlYy0+bnVtX2RhaSA9IEFSUkFZX1NJWkUod204NTgwX2RhaSk7CisJY29kZWMtPnJlZ19jYWNoZV9zaXplID0gQVJSQVlfU0laRSh3bTg1ODAtPnJlZ19jYWNoZSk7CisJY29kZWMtPnJlZ19jYWNoZSA9ICZ3bTg1ODAtPnJlZ19jYWNoZTsKKworCW1lbWNweShjb2RlYy0+cmVnX2NhY2hlLCB3bTg1ODBfcmVnLCBzaXplb2Yod204NTgwX3JlZykpOworCisJLyogR2V0IHRoZSBjb2RlYyBpbnRvIGEga25vd24gc3RhdGUgKi8KKwlyZXQgPSB3bTg1ODBfd3JpdGUoY29kZWMsIFdNODU4MF9SRVNFVCwgMCk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byByZXNldCBjb2RlYzogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtODU4MF9kYWkpOyBpKyspCisJCXdtODU4MF9kYWlbaV0uZGV2ID0gY29kZWMtPmRldjsKKworCXdtODU4MF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1NUQU5EQlkpOworCisJd204NTgwX2NvZGVjID0gY29kZWM7CisKKwlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2NvZGVjKGNvZGVjKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGNvZGVjOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnI7CisJfQorCisJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9kYWlzKHdtODU4MF9kYWksIEFSUkFZX1NJWkUod204NTgwX2RhaSkpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgREFJOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfY29kZWM7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl9jb2RlYzoKKwlzbmRfc29jX3VucmVnaXN0ZXJfY29kZWMoY29kZWMpOworZXJyOgorCWtmcmVlKHdtODU4MCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgd204NTgwX3VucmVnaXN0ZXIoc3RydWN0IHdtODU4MF9wcml2ICp3bTg1ODApCit7CisJd204NTgwX3NldF9iaWFzX2xldmVsKCZ3bTg1ODAtPmNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKKwlzbmRfc29jX3VucmVnaXN0ZXJfZGFpcyh3bTg1ODBfZGFpLCBBUlJBWV9TSVpFKHdtODU4MF9kYWkpKTsKKwlzbmRfc29jX3VucmVnaXN0ZXJfY29kZWMoJndtODU4MC0+Y29kZWMpOworCWtmcmVlKHdtODU4MCk7CisJd204NTgwX2NvZGVjID0gTlVMTDsKK30KIAogI2lmIGRlZmluZWQoQ09ORklHX0kyQykgfHwgZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkKLQotLyoKLSAqIFdNODU4MCAyIHdpcmUgYWRkcmVzcyBpcyBkZXRlcm1pbmVkIGJ5IEdQSU81Ci0gKiBzdGF0ZSBkdXJpbmcgcG93ZXJ1cC4KLSAqICAgIGxvdyAgPSAweDFhCi0gKiAgICBoaWdoID0gMHgxYgotICovCi0KIHN0YXRpYyBpbnQgd204NTgwX2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLAogCQkJICAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKLQlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHdtODU4MF9zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKLQlpbnQgcmV0OworCXN0cnVjdCB3bTg1ODBfcHJpdiAqd204NTgwOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKIAotCWkyY19zZXRfY2xpZW50ZGF0YShpMmMsIGNvZGVjKTsKKwl3bTg1ODAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgd204NTgwX3ByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAod204NTgwID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJY29kZWMgPSAmd204NTgwLT5jb2RlYzsKKwljb2RlYy0+aHdfd3JpdGUgPSAoaHdfd3JpdGVfdClpMmNfbWFzdGVyX3NlbmQ7CisKKwlpMmNfc2V0X2NsaWVudGRhdGEoaTJjLCB3bTg1ODApOwogCWNvZGVjLT5jb250cm9sX2RhdGEgPSBpMmM7CiAKLQlyZXQgPSB3bTg1ODBfaW5pdChzb2NkZXYpOwotCWlmIChyZXQgPCAwKQotCQlkZXZfZXJyKCZpMmMtPmRldiwgImZhaWxlZCB0byBpbml0aWFsaXNlIFdNODU4MFxuIik7Ci0JcmV0dXJuIHJldDsKKwljb2RlYy0+ZGV2ID0gJmkyYy0+ZGV2OworCisJcmV0dXJuIHdtODU4MF9yZWdpc3Rlcih3bTg1ODApOwogfQogCiBzdGF0aWMgaW50IHdtODU4MF9pMmNfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0Ja2ZyZWUoY29kZWMtPnJlZ19jYWNoZSk7CisJc3RydWN0IHdtODU4MF9wcml2ICp3bTg1ODAgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwl3bTg1ODBfdW5yZWdpc3Rlcih3bTg1ODApOwogCXJldHVybiAwOwogfQogCkBAIC05MjgsMTI5ICs5OTksMzUgQEAKIAogc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHdtODU4MF9pMmNfZHJpdmVyID0gewogCS5kcml2ZXIgPSB7Ci0JCS5uYW1lID0gIldNODU4MCBJMkMgQ29kZWMiLAorCQkubmFtZSA9ICJ3bTg1ODAiLAogCQkub3duZXIgPSBUSElTX01PRFVMRSwKIAl9LAogCS5wcm9iZSA9ICAgIHdtODU4MF9pMmNfcHJvYmUsCiAJLnJlbW92ZSA9ICAgd204NTgwX2kyY19yZW1vdmUsCiAJLmlkX3RhYmxlID0gd204NTgwX2kyY19pZCwKIH07Ci0KLXN0YXRpYyBpbnQgd204NTgwX2FkZF9pMmNfZGV2aWNlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCi0JCQkJIGNvbnN0IHN0cnVjdCB3bTg1ODBfc2V0dXBfZGF0YSAqc2V0dXApCi17Ci0Jc3RydWN0IGkyY19ib2FyZF9pbmZvIGluZm87Ci0Jc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7Ci0JaW50IHJldDsKLQotCXJldCA9IGkyY19hZGRfZHJpdmVyKCZ3bTg1ODBfaTJjX2RyaXZlcik7Ci0JaWYgKHJldCAhPSAwKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IGFkZCBpMmMgZHJpdmVyXG4iKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQltZW1zZXQoJmluZm8sIDAsIHNpemVvZihzdHJ1Y3QgaTJjX2JvYXJkX2luZm8pKTsKLQlpbmZvLmFkZHIgPSBzZXR1cC0+aTJjX2FkZHJlc3M7Ci0Jc3RybGNweShpbmZvLnR5cGUsICJ3bTg1ODAiLCBJMkNfTkFNRV9TSVpFKTsKLQotCWFkYXB0ZXIgPSBpMmNfZ2V0X2FkYXB0ZXIoc2V0dXAtPmkyY19idXMpOwotCWlmICghYWRhcHRlcikgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4ndCBnZXQgaTJjIGFkYXB0ZXIgJWRcbiIsCi0JCQlzZXR1cC0+aTJjX2J1cyk7Ci0JCWdvdG8gZXJyX2RyaXZlcjsKLQl9Ci0KLQljbGllbnQgPSBpMmNfbmV3X2RldmljZShhZGFwdGVyLCAmaW5mbyk7Ci0JaTJjX3B1dF9hZGFwdGVyKGFkYXB0ZXIpOwotCWlmICghY2xpZW50KSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IGFkZCBpMmMgZGV2aWNlIGF0IDB4JXhcbiIsCi0JCQkodW5zaWduZWQgaW50KWluZm8uYWRkcik7Ci0JCWdvdG8gZXJyX2RyaXZlcjsKLQl9Ci0KLQlyZXR1cm4gMDsKLQotZXJyX2RyaXZlcjoKLQlpMmNfZGVsX2RyaXZlcigmd204NTgwX2kyY19kcml2ZXIpOwotCXJldHVybiAtRU5PREVWOwotfQogI2VuZGlmCiAKLXN0YXRpYyBpbnQgd204NTgwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0Jc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgd204NTgwX3NldHVwX2RhdGEgKnNldHVwOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKLQlzdHJ1Y3Qgd204NTgwX3ByaXYgKndtODU4MDsKLQlpbnQgcmV0ID0gMDsKLQotCXByX2luZm8oIldNODU4MCBBdWRpbyBDb2RlYyAlc1xuIiwgV004NTgwX1ZFUlNJT04pOwotCi0Jc2V0dXAgPSBzb2NkZXYtPmNvZGVjX2RhdGE7Ci0JY29kZWMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc25kX3NvY19jb2RlYyksIEdGUF9LRVJORUwpOwotCWlmIChjb2RlYyA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXdtODU4MCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB3bTg1ODBfcHJpdiksIEdGUF9LRVJORUwpOwotCWlmICh3bTg1ODAgPT0gTlVMTCkgewotCQlrZnJlZShjb2RlYyk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCWNvZGVjLT5wcml2YXRlX2RhdGEgPSB3bTg1ODA7Ci0Jc29jZGV2LT5jb2RlYyA9IGNvZGVjOwotCW11dGV4X2luaXQoJmNvZGVjLT5tdXRleCk7Ci0JSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3dpZGdldHMpOwotCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV9wYXRocyk7Ci0Jd204NTgwX3NvY2RldiA9IHNvY2RldjsKLQotI2lmIGRlZmluZWQoQ09ORklHX0kyQykgfHwgZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkKLQlpZiAoc2V0dXAtPmkyY19hZGRyZXNzKSB7Ci0JCWNvZGVjLT5od193cml0ZSA9IChod193cml0ZV90KWkyY19tYXN0ZXJfc2VuZDsKLQkJcmV0ID0gd204NTgwX2FkZF9pMmNfZGV2aWNlKHBkZXYsIHNldHVwKTsKLQl9Ci0jZWxzZQotCQkvKiBBZGQgb3RoZXIgaW50ZXJmYWNlcyBoZXJlICovCi0jZW5kaWYKLQlyZXR1cm4gcmV0OwotfQotCi0vKiBwb3dlciBkb3duIGNoaXAgKi8KLXN0YXRpYyBpbnQgd204NTgwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKLQotCWlmIChjb2RlYy0+Y29udHJvbF9kYXRhKQotCQl3bTg1ODBfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOwotCXNuZF9zb2NfZnJlZV9wY21zKHNvY2Rldik7Ci0Jc25kX3NvY19kYXBtX2ZyZWUoc29jZGV2KTsKLSNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19NT0RVTEUpCi0JaTJjX3VucmVnaXN0ZXJfZGV2aWNlKGNvZGVjLT5jb250cm9sX2RhdGEpOwotCWkyY19kZWxfZHJpdmVyKCZ3bTg1ODBfaTJjX2RyaXZlcik7Ci0jZW5kaWYKLQlrZnJlZShjb2RlYy0+cHJpdmF0ZV9kYXRhKTsKLQlrZnJlZShjb2RlYyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RydWN0IHNuZF9zb2NfY29kZWNfZGV2aWNlIHNvY19jb2RlY19kZXZfd204NTgwID0gewotCS5wcm9iZSA9IAl3bTg1ODBfcHJvYmUsCi0JLnJlbW92ZSA9IAl3bTg1ODBfcmVtb3ZlLAotfTsKLUVYUE9SVF9TWU1CT0xfR1BMKHNvY19jb2RlY19kZXZfd204NTgwKTsKLQogc3RhdGljIGludCBfX2luaXQgd204NTgwX21vZGluaXQodm9pZCkKIHsKLQlyZXR1cm4gc25kX3NvY19yZWdpc3Rlcl9kYWlzKHdtODU4MF9kYWksIEFSUkFZX1NJWkUod204NTgwX2RhaSkpOworCWludCByZXQ7CisKKyNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19NT0RVTEUpCisJcmV0ID0gaTJjX2FkZF9kcml2ZXIoJndtODU4MF9pMmNfZHJpdmVyKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJcHJfZXJyKCJGYWlsZWQgdG8gcmVnaXN0ZXIgV004NTgwIEkyQyBkcml2ZXI6ICVkXG4iLCByZXQpOworCX0KKyNlbmRpZgorCisJcmV0dXJuIDA7CiB9CiBtb2R1bGVfaW5pdCh3bTg1ODBfbW9kaW5pdCk7CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCB3bTg1ODBfZXhpdCh2b2lkKQogewotCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWlzKHdtODU4MF9kYWksIEFSUkFZX1NJWkUod204NTgwX2RhaSkpOworI2lmIGRlZmluZWQoQ09ORklHX0kyQykgfHwgZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkKKwlpMmNfZGVsX2RyaXZlcigmd204NTgwX2kyY19kcml2ZXIpOworI2VuZGlmCiB9CiBtb2R1bGVfZXhpdCh3bTg1ODBfZXhpdCk7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NTgwLmggYi9zb3VuZC9zb2MvY29kZWNzL3dtODU4MC5oCmluZGV4IDA5ZTQ0MjIuLjBkZmI1ZGQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NTgwLmgKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg1ODAuaApAQCAtMjgsMTEgKzI4LDYgQEAKICNkZWZpbmUgV004NTgwX0NMS1NSQ19PU0MgIDQKICNkZWZpbmUgV004NTgwX0NMS1NSQ19OT05FIDUKIAotc3RydWN0IHdtODU4MF9zZXR1cF9kYXRhIHsKLQlpbnQgaTJjX2J1czsKLQl1bnNpZ25lZCBzaG9ydCBpMmNfYWRkcmVzczsKLX07Ci0KICNkZWZpbmUgV004NTgwX0RBSV9QQUlGUlggMAogI2RlZmluZSBXTTg1ODBfREFJX1BBSUZUWCAxCiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NzI4LmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODcyOC5jCmluZGV4IDgwYjExOTguLmU3ZmYyMTIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NzI4LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg3MjguYwpAQCAtNDcsNyArNDcsNyBAQAogCXVuc2lnbmVkIGludCByZWcpCiB7CiAJdTE2ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7Ci0JQlVHX09OKHJlZyA+IEFSUkFZX1NJWkUod204NzI4X3JlZ19kZWZhdWx0cykpOworCUJVR19PTihyZWcgPj0gQVJSQVlfU0laRSh3bTg3MjhfcmVnX2RlZmF1bHRzKSk7CiAJcmV0dXJuIGNhY2hlW3JlZ107CiB9CiAKQEAgLTU1LDcgKzU1LDcgQEAKIAl1MTYgcmVnLCB1bnNpZ25lZCBpbnQgdmFsdWUpCiB7CiAJdTE2ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7Ci0JQlVHX09OKHJlZyA+IEFSUkFZX1NJWkUod204NzI4X3JlZ19kZWZhdWx0cykpOworCUJVR19PTihyZWcgPj0gQVJSQVlfU0laRSh3bTg3MjhfcmVnX2RlZmF1bHRzKSk7CiAJY2FjaGVbcmVnXSA9IHZhbHVlOwogfQogCkBAIC05MiwyMSArOTIsNiBAQAogU09DX1NJTkdMRSgiRGVlbXBoYXNpcyIsIFdNODcyOF9EQUNDVEwsIDEsIDEsIDApLAogfTsKIAotc3RhdGljIGludCB3bTg3MjhfYWRkX2NvbnRyb2xzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKLXsKLQlpbnQgZXJyLCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod204NzI4X3NuZF9jb250cm9scyk7IGkrKykgewotCQllcnIgPSBzbmRfY3RsX2FkZChjb2RlYy0+Y2FyZCwKLQkJCQkgIHNuZF9zb2NfY25ldygmd204NzI4X3NuZF9jb250cm9sc1tpXSwKLQkJCQkJCWNvZGVjLCBOVUxMKSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQogLyoKICAqIERBUE0gY29udHJvbHMuCiAgKi8KQEAgLTE1Miw3ICsxMzcsNyBAQAogewogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHJ0ZC0+c29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAl1MTYgZGFjID0gd204NzI4X3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3MjhfREFDQ1RMKTsKIAogCWRhYyAmPSB+MHgxODsKQEAgLTI1OSw2ICsyNDQsMTIgQEAKICNkZWZpbmUgV004NzI4X0ZPUk1BVFMgKFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwgU05EUlZfUENNX0ZNVEJJVF9TMjBfM0xFIHxcCiAJU05EUlZfUENNX0ZNVEJJVF9TMjRfTEUpCiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHdtODcyOF9kYWlfb3BzID0geworCS5od19wYXJhbXMJPSB3bTg3MjhfaHdfcGFyYW1zLAorCS5kaWdpdGFsX211dGUJPSB3bTg3MjhfbXV0ZSwKKwkuc2V0X2ZtdAk9IHdtODcyOF9zZXRfZGFpX2ZtdCwKK307CisKIHN0cnVjdCBzbmRfc29jX2RhaSB3bTg3MjhfZGFpID0gewogCS5uYW1lID0gIldNODcyOCIsCiAJLnBsYXliYWNrID0gewpAQCAtMjY4LDE4ICsyNTksMTQgQEAKIAkJLnJhdGVzID0gV004NzI4X1JBVEVTLAogCQkuZm9ybWF0cyA9IFdNODcyOF9GT1JNQVRTLAogCX0sCi0JLm9wcyA9IHsKLQkJIC5od19wYXJhbXMgPSB3bTg3MjhfaHdfcGFyYW1zLAotCQkgLmRpZ2l0YWxfbXV0ZSA9IHdtODcyOF9tdXRlLAotCQkgLnNldF9mbXQgPSB3bTg3Mjhfc2V0X2RhaV9mbXQsCi0JfQorCS5vcHMgPSAmd204NzI4X2RhaV9vcHMsCiB9OwogRVhQT1JUX1NZTUJPTF9HUEwod204NzI4X2RhaSk7CiAKIHN0YXRpYyBpbnQgd204NzI4X3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJd204NzI4X3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKIApAQCAtMjg5LDcgKzI3Niw3IEBACiBzdGF0aWMgaW50IHdtODcyOF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCXdtODcyOF9zZXRfYmlhc19sZXZlbChjb2RlYywgY29kZWMtPnN1c3BlbmRfYmlhc19sZXZlbCk7CiAKQEAgLTMwMiw3ICsyODksNyBAQAogICovCiBzdGF0aWMgaW50IHdtODcyOF9pbml0KHN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2KQogewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlpbnQgcmV0ID0gMDsKIAogCWNvZGVjLT5uYW1lID0gIldNODcyOCI7CkBAIC0zMzAsNyArMzE3LDggQEAKIAkvKiBwb3dlciBvbiBkZXZpY2UgKi8KIAl3bTg3Mjhfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19TVEFOREJZKTsKIAotCXdtODcyOF9hZGRfY29udHJvbHMoY29kZWMpOworCXNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCB3bTg3Mjhfc25kX2NvbnRyb2xzLAorCQkJCUFSUkFZX1NJWkUod204NzI4X3NuZF9jb250cm9scykpOwogCXdtODcyOF9hZGRfd2lkZ2V0cyhjb2RlYyk7CiAJcmV0ID0gc25kX3NvY19pbml0X2NhcmQoc29jZGV2KTsKIAlpZiAocmV0IDwgMCkgewpAQCAtMzYzLDcgKzM1MSw3IEBACiAJCQkgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gd204NzI4X3NvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJaW50IHJldDsKIAogCWkyY19zZXRfY2xpZW50ZGF0YShpMmMsIGNvZGVjKTsKQEAgLTQ0NCw3ICs0MzIsNyBAQAogc3RhdGljIGludCBfX2RldmluaXQgd204NzI4X3NwaV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gd204NzI4X3NvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJaW50IHJldDsKIAogCWNvZGVjLT5jb250cm9sX2RhdGEgPSBzcGk7CkBAIC01MDgsNyArNDk2LDcgQEAKIAlpZiAoY29kZWMgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlzb2NkZXYtPmNvZGVjID0gY29kZWM7CisJc29jZGV2LT5jYXJkLT5jb2RlYyA9IGNvZGVjOwogCW11dGV4X2luaXQoJmNvZGVjLT5tdXRleCk7CiAJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3dpZGdldHMpOwogCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV9wYXRocyk7CkBAIC01NDEsNyArNTI5LDcgQEAKIHN0YXRpYyBpbnQgd204NzI4X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJaWYgKGNvZGVjLT5jb250cm9sX2RhdGEpCiAJCXdtODcyOF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODczMS5jIGIvc291bmQvc29jL2NvZGVjcy93bTg3MzEuYwppbmRleCBjNDQ0YjlmLi5lMDQzZTNmIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODczMS5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NzMxLmMKQEAgLTI5LDE1ICsyOSwyMCBAQAogCiAjaW5jbHVkZSAid204NzMxLmgiCiAKLSNkZWZpbmUgV004NzMxX1ZFUlNJT04gIjAuMTMiCi0KK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqd204NzMxX2NvZGVjOwogc3RydWN0IHNuZF9zb2NfY29kZWNfZGV2aWNlIHNvY19jb2RlY19kZXZfd204NzMxOwogCiAvKiBjb2RlYyBwcml2YXRlIGRhdGEgKi8KIHN0cnVjdCB3bTg3MzFfcHJpdiB7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgY29kZWM7CisJdTE2IHJlZ19jYWNoZVtXTTg3MzFfQ0FDSEVSRUdOVU1dOwogCXVuc2lnbmVkIGludCBzeXNjbGs7CiB9OwogCisjaWZkZWYgQ09ORklHX1NQSV9NQVNURVIKK3N0YXRpYyBpbnQgd204NzMxX3NwaV93cml0ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBjb25zdCBjaGFyICpkYXRhLCBpbnQgbGVuKTsKKyNlbmRpZgorCiAvKgogICogd204NzMxIHJlZ2lzdGVyIGNhY2hlCiAgKiBXZSBjYW4ndCByZWFkIHRoZSBXTTg3MzEgcmVnaXN0ZXIgc3BhY2Ugd2hlbiB3ZSBhcmUKQEAgLTEyOSwyMiArMTM0LDYgQEAKIFNPQ19FTlVNKCJQbGF5YmFjayBEZS1lbXBoYXNpcyIsIHdtODczMV9lbnVtWzFdKSwKIH07CiAKLS8qIGFkZCBub24gZGFwbSBjb250cm9scyAqLwotc3RhdGljIGludCB3bTg3MzFfYWRkX2NvbnRyb2xzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKLXsKLQlpbnQgZXJyLCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod204NzMxX3NuZF9jb250cm9scyk7IGkrKykgewotCQllcnIgPSBzbmRfY3RsX2FkZChjb2RlYy0+Y2FyZCwKLQkJCQkgIHNuZF9zb2NfY25ldygmd204NzMxX3NuZF9jb250cm9sc1tpXSwKLQkJCQkJCWNvZGVjLCBOVUxMKSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQogLyogT3V0cHV0IE1peGVyICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204NzMxX291dHB1dF9taXhlcl9jb250cm9sc1tdID0gewogU09DX0RBUE1fU0lOR0xFKCJMaW5lIEJ5cGFzcyBTd2l0Y2giLCBXTTg3MzFfQVBBTkEsIDMsIDEsIDApLApAQCAtMjY5LDcgKzI1OCw3IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCXN0cnVjdCB3bTg3MzFfcHJpdiAqd204NzMxID0gY29kZWMtPnByaXZhdGVfZGF0YTsKIAl1MTYgaWZhY2UgPSB3bTg3MzFfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODczMV9JRkFDRSkgJiAweGZmZjM7CiAJaW50IGkgPSBnZXRfY29lZmYod204NzMxLT5zeXNjbGssIHBhcmFtc19yYXRlKHBhcmFtcykpOwpAQCAtMjk5LDcgKzI4OCw3IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJLyogc2V0IGFjdGl2ZSAqLwogCXdtODczMV93cml0ZShjb2RlYywgV004NzMxX0FDVElWRSwgMHgwMDAxKTsKQEAgLTMxMiw3ICszMDEsNyBAQAogewogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHJ0ZC0+c29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCS8qIGRlYWN0aXZhdGUgKi8KIAlpZiAoIWNvZGVjLT5hY3RpdmUpIHsKQEAgLTQxNCwyMSArNDAzLDE5IEBACiBzdGF0aWMgaW50IHdtODczMV9zZXRfYmlhc19sZXZlbChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCiAJCQkJIGVudW0gc25kX3NvY19iaWFzX2xldmVsIGxldmVsKQogewotCXUxNiByZWcgPSB3bTg3MzFfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODczMV9QV1IpICYgMHhmZjdmOworCXUxNiByZWc7CiAKIAlzd2l0Y2ggKGxldmVsKSB7CiAJY2FzZSBTTkRfU09DX0JJQVNfT046Ci0JCS8qIHZyZWYvbWlkLCBvc2Mgb24sIGRhYyB1bm11dGUgKi8KLQkJd204NzMxX3dyaXRlKGNvZGVjLCBXTTg3MzFfUFdSLCByZWcpOwogCQlicmVhazsKIAljYXNlIFNORF9TT0NfQklBU19QUkVQQVJFOgogCQlicmVhazsKIAljYXNlIFNORF9TT0NfQklBU19TVEFOREJZOgotCQkvKiBldmVyeXRoaW5nIG9mZiBleGNlcHQgdnJlZi92bWlkLCAqLworCQkvKiBDbGVhciBQV1JPRkYsIGdhdGUgQ0xLT1VULCBldmVyeXRoaW5nIGVsc2UgYXMtaXMgKi8KKwkJcmVnID0gd204NzMxX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3MzFfUFdSKSAmIDB4ZmY3ZjsKIAkJd204NzMxX3dyaXRlKGNvZGVjLCBXTTg3MzFfUFdSLCByZWcgfCAweDAwNDApOwogCQlicmVhazsKIAljYXNlIFNORF9TT0NfQklBU19PRkY6Ci0JCS8qIGV2ZXJ5dGhpbmcgb2ZmLCBkYWMgbXV0ZSwgaW5hY3RpdmUgKi8KIAkJd204NzMxX3dyaXRlKGNvZGVjLCBXTTg3MzFfQUNUSVZFLCAweDApOwogCQl3bTg3MzFfd3JpdGUoY29kZWMsIFdNODczMV9QV1IsIDB4ZmZmZik7CiAJCWJyZWFrOwpAQCAtNDQ2LDYgKzQzMywxNSBAQAogI2RlZmluZSBXTTg3MzFfRk9STUFUUyAoU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MyMF8zTEUgfFwKIAlTTkRSVl9QQ01fRk1UQklUX1MyNF9MRSkKIAorc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgd204NzMxX2RhaV9vcHMgPSB7CisJLnByZXBhcmUJPSB3bTg3MzFfcGNtX3ByZXBhcmUsCisJLmh3X3BhcmFtcwk9IHdtODczMV9od19wYXJhbXMsCisJLnNodXRkb3duCT0gd204NzMxX3NodXRkb3duLAorCS5kaWdpdGFsX211dGUJPSB3bTg3MzFfbXV0ZSwKKwkuc2V0X3N5c2Nsawk9IHdtODczMV9zZXRfZGFpX3N5c2NsaywKKwkuc2V0X2ZtdAk9IHdtODczMV9zZXRfZGFpX2ZtdCwKK307CisKIHN0cnVjdCBzbmRfc29jX2RhaSB3bTg3MzFfZGFpID0gewogCS5uYW1lID0gIldNODczMSIsCiAJLnBsYXliYWNrID0gewpAQCAtNDYwLDIxICs0NTYsMTQgQEAKIAkJLmNoYW5uZWxzX21heCA9IDIsCiAJCS5yYXRlcyA9IFdNODczMV9SQVRFUywKIAkJLmZvcm1hdHMgPSBXTTg3MzFfRk9STUFUUyx9LAotCS5vcHMgPSB7Ci0JCS5wcmVwYXJlID0gd204NzMxX3BjbV9wcmVwYXJlLAotCQkuaHdfcGFyYW1zID0gd204NzMxX2h3X3BhcmFtcywKLQkJLnNodXRkb3duID0gd204NzMxX3NodXRkb3duLAotCQkuZGlnaXRhbF9tdXRlID0gd204NzMxX211dGUsCi0JCS5zZXRfc3lzY2xrID0gd204NzMxX3NldF9kYWlfc3lzY2xrLAotCQkuc2V0X2ZtdCA9IHdtODczMV9zZXRfZGFpX2ZtdCwKLQl9CisJLm9wcyA9ICZ3bTg3MzFfZGFpX29wcywKIH07CiBFWFBPUlRfU1lNQk9MX0dQTCh3bTg3MzFfZGFpKTsKIAogc3RhdGljIGludCB3bTg3MzFfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAl3bTg3MzFfd3JpdGUoY29kZWMsIFdNODczMV9BQ1RJVkUsIDB4MCk7CiAJd204NzMxX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKQEAgLTQ4NCw3ICs0NzMsNyBAQAogc3RhdGljIGludCB3bTg3MzFfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJaW50IGk7CiAJdTggZGF0YVsyXTsKIAl1MTYgKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKQEAgLTUwMCw1NCArNDg5LDMzIEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBpbml0aWFsaXNlIHRoZSBXTTg3MzEgZHJpdmVyCi0gKiByZWdpc3RlciB0aGUgbWl4ZXIgYW5kIGRzcCBpbnRlcmZhY2VzIHdpdGggdGhlIGtlcm5lbAotICovCi1zdGF0aWMgaW50IHdtODczMV9pbml0KHN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2KQorc3RhdGljIGludCB3bTg3MzFfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOwotCWludCByZWcsIHJldCA9IDA7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CisJaW50IHJldCA9IDA7CiAKLQljb2RlYy0+bmFtZSA9ICJXTTg3MzEiOwotCWNvZGVjLT5vd25lciA9IFRISVNfTU9EVUxFOwotCWNvZGVjLT5yZWFkID0gd204NzMxX3JlYWRfcmVnX2NhY2hlOwotCWNvZGVjLT53cml0ZSA9IHdtODczMV93cml0ZTsKLQljb2RlYy0+c2V0X2JpYXNfbGV2ZWwgPSB3bTg3MzFfc2V0X2JpYXNfbGV2ZWw7Ci0JY29kZWMtPmRhaSA9ICZ3bTg3MzFfZGFpOwotCWNvZGVjLT5udW1fZGFpID0gMTsKLQljb2RlYy0+cmVnX2NhY2hlX3NpemUgPSBBUlJBWV9TSVpFKHdtODczMV9yZWcpOwotCWNvZGVjLT5yZWdfY2FjaGUgPSBrbWVtZHVwKHdtODczMV9yZWcsIHNpemVvZih3bTg3MzFfcmVnKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGNvZGVjLT5yZWdfY2FjaGUgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJaWYgKHdtODczMV9jb2RlYyA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNvZGVjIGRldmljZSBub3QgcmVnaXN0ZXJlZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KIAotCXdtODczMV9yZXNldChjb2RlYyk7CisJc29jZGV2LT5jYXJkLT5jb2RlYyA9IHdtODczMV9jb2RlYzsKKwljb2RlYyA9IHdtODczMV9jb2RlYzsKIAogCS8qIHJlZ2lzdGVyIHBjbXMgKi8KIAlyZXQgPSBzbmRfc29jX25ld19wY21zKHNvY2RldiwgU05EUlZfREVGQVVMVF9JRFgxLCBTTkRSVl9ERUZBVUxUX1NUUjEpOwogCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAid204NzMxOiBmYWlsZWQgdG8gY3JlYXRlIHBjbXNcbiIpOworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJmYWlsZWQgdG8gY3JlYXRlIHBjbXM6ICVkXG4iLCByZXQpOwogCQlnb3RvIHBjbV9lcnI7CiAJfQogCi0JLyogcG93ZXIgb24gZGV2aWNlICovCi0Jd204NzMxX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7Ci0KLQkvKiBzZXQgdGhlIHVwZGF0ZSBiaXRzICovCi0JcmVnID0gd204NzMxX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3MzFfTE9VVDFWKTsKLQl3bTg3MzFfd3JpdGUoY29kZWMsIFdNODczMV9MT1VUMVYsIHJlZyAmIH4weDAxMDApOwotCXJlZyA9IHdtODczMV9yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzMxX1JPVVQxVik7Ci0Jd204NzMxX3dyaXRlKGNvZGVjLCBXTTg3MzFfUk9VVDFWLCByZWcgJiB+MHgwMTAwKTsKLQlyZWcgPSB3bTg3MzFfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODczMV9MSU5WT0wpOwotCXdtODczMV93cml0ZShjb2RlYywgV004NzMxX0xJTlZPTCwgcmVnICYgfjB4MDEwMCk7Ci0JcmVnID0gd204NzMxX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3MzFfUklOVk9MKTsKLQl3bTg3MzFfd3JpdGUoY29kZWMsIFdNODczMV9SSU5WT0wsIHJlZyAmIH4weDAxMDApOwotCi0Jd204NzMxX2FkZF9jb250cm9scyhjb2RlYyk7CisJc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHdtODczMV9zbmRfY29udHJvbHMsCisJCQkgICAgIEFSUkFZX1NJWkUod204NzMxX3NuZF9jb250cm9scykpOwogCXdtODczMV9hZGRfd2lkZ2V0cyhjb2RlYyk7CiAJcmV0ID0gc25kX3NvY19pbml0X2NhcmQoc29jZGV2KTsKIAlpZiAocmV0IDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgIndtODczMTogZmFpbGVkIHRvIHJlZ2lzdGVyIGNhcmRcbiIpOworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgY2FyZDogJWRcbiIsIHJldCk7CiAJCWdvdG8gY2FyZF9lcnI7CiAJfQogCkBAIC01NTcsMTMzICs1MjUsMTA5IEBACiAJc25kX3NvY19mcmVlX3BjbXMoc29jZGV2KTsKIAlzbmRfc29jX2RhcG1fZnJlZShzb2NkZXYpOwogcGNtX2VycjoKLQlrZnJlZShjb2RlYy0+cmVnX2NhY2hlKTsKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgc3RydWN0IHNuZF9zb2NfZGV2aWNlICp3bTg3MzFfc29jZGV2OwotCi0jaWYgZGVmaW5lZChDT05GSUdfSTJDKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfTU9EVUxFKQotCi0vKgotICogV004NzMxIDIgd2lyZSBhZGRyZXNzIGlzIGRldGVybWluZWQgYnkgR1BJTzUKLSAqIHN0YXRlIGR1cmluZyBwb3dlcnVwLgotICogICAgbG93ICA9IDB4MWEKLSAqICAgIGhpZ2ggPSAweDFiCi0gKi8KLQotc3RhdGljIGludCB3bTg3MzFfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICppMmMsCi0JCQkgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQorLyogcG93ZXIgZG93biBjaGlwICovCitzdGF0aWMgaW50IHdtODczMV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHdtODczMV9zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKLQlpbnQgcmV0OworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKLQlpMmNfc2V0X2NsaWVudGRhdGEoaTJjLCBjb2RlYyk7Ci0JY29kZWMtPmNvbnRyb2xfZGF0YSA9IGkyYzsKKwlzbmRfc29jX2ZyZWVfcGNtcyhzb2NkZXYpOworCXNuZF9zb2NfZGFwbV9mcmVlKHNvY2Rldik7CiAKLQlyZXQgPSB3bTg3MzFfaW5pdChzb2NkZXYpOwotCWlmIChyZXQgPCAwKQotCQlwcl9lcnIoImZhaWxlZCB0byBpbml0aWFsaXNlIFdNODczMVxuIik7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IHdtODczMV9pMmNfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCi17Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0Ja2ZyZWUoY29kZWMtPnJlZ19jYWNoZSk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCB3bTg3MzFfaTJjX2lkW10gPSB7Ci0JeyAid204NzMxIiwgMCB9LAotCXsgfQorc3RydWN0IHNuZF9zb2NfY29kZWNfZGV2aWNlIHNvY19jb2RlY19kZXZfd204NzMxID0geworCS5wcm9iZSA9IAl3bTg3MzFfcHJvYmUsCisJLnJlbW92ZSA9IAl3bTg3MzFfcmVtb3ZlLAorCS5zdXNwZW5kID0gCXdtODczMV9zdXNwZW5kLAorCS5yZXN1bWUgPQl3bTg3MzFfcmVzdW1lLAogfTsKLU1PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCB3bTg3MzFfaTJjX2lkKTsKK0VYUE9SVF9TWU1CT0xfR1BMKHNvY19jb2RlY19kZXZfd204NzMxKTsKIAotc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHdtODczMV9pMmNfZHJpdmVyID0gewotCS5kcml2ZXIgPSB7Ci0JCS5uYW1lID0gIldNODczMSBJMkMgQ29kZWMiLAotCQkub3duZXIgPSBUSElTX01PRFVMRSwKLQl9LAotCS5wcm9iZSA9ICAgIHdtODczMV9pMmNfcHJvYmUsCi0JLnJlbW92ZSA9ICAgd204NzMxX2kyY19yZW1vdmUsCi0JLmlkX3RhYmxlID0gd204NzMxX2kyY19pZCwKLX07Ci0KLXN0YXRpYyBpbnQgd204NzMxX2FkZF9pMmNfZGV2aWNlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCi0JCQkJIGNvbnN0IHN0cnVjdCB3bTg3MzFfc2V0dXBfZGF0YSAqc2V0dXApCitzdGF0aWMgaW50IHdtODczMV9yZWdpc3RlcihzdHJ1Y3Qgd204NzMxX3ByaXYgKndtODczMSkKIHsKLQlzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gaW5mbzsKLQlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXI7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKIAlpbnQgcmV0OworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9ICZ3bTg3MzEtPmNvZGVjOworCXUxNiByZWc7CiAKLQlyZXQgPSBpMmNfYWRkX2RyaXZlcigmd204NzMxX2kyY19kcml2ZXIpOwotCWlmIChyZXQgIT0gMCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4ndCBhZGQgaTJjIGRyaXZlclxuIik7CisJaWYgKHdtODczMV9jb2RlYykgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJBbm90aGVyIFdNODczMSBpcyByZWdpc3RlcmVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbXV0ZXhfaW5pdCgmY29kZWMtPm11dGV4KTsKKwlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fd2lkZ2V0cyk7CisJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3BhdGhzKTsKKworCWNvZGVjLT5wcml2YXRlX2RhdGEgPSB3bTg3MzE7CisJY29kZWMtPm5hbWUgPSAiV004NzMxIjsKKwljb2RlYy0+b3duZXIgPSBUSElTX01PRFVMRTsKKwljb2RlYy0+cmVhZCA9IHdtODczMV9yZWFkX3JlZ19jYWNoZTsKKwljb2RlYy0+d3JpdGUgPSB3bTg3MzFfd3JpdGU7CisJY29kZWMtPmJpYXNfbGV2ZWwgPSBTTkRfU09DX0JJQVNfT0ZGOworCWNvZGVjLT5zZXRfYmlhc19sZXZlbCA9IHdtODczMV9zZXRfYmlhc19sZXZlbDsKKwljb2RlYy0+ZGFpID0gJndtODczMV9kYWk7CisJY29kZWMtPm51bV9kYWkgPSAxOworCWNvZGVjLT5yZWdfY2FjaGVfc2l6ZSA9IFdNODczMV9DQUNIRVJFR05VTTsKKwljb2RlYy0+cmVnX2NhY2hlID0gJndtODczMS0+cmVnX2NhY2hlOworCisJbWVtY3B5KGNvZGVjLT5yZWdfY2FjaGUsIHdtODczMV9yZWcsIHNpemVvZih3bTg3MzFfcmVnKSk7CisKKwlyZXQgPSB3bTg3MzFfcmVzZXQoY29kZWMpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byBpc3N1ZSByZXNldFxuIik7CiAJCXJldHVybiByZXQ7CiAJfQogCi0JbWVtc2V0KCZpbmZvLCAwLCBzaXplb2Yoc3RydWN0IGkyY19ib2FyZF9pbmZvKSk7Ci0JaW5mby5hZGRyID0gc2V0dXAtPmkyY19hZGRyZXNzOwotCXN0cmxjcHkoaW5mby50eXBlLCAid204NzMxIiwgSTJDX05BTUVfU0laRSk7CisJd204NzMxX2RhaS5kZXYgPSBjb2RlYy0+ZGV2OwogCi0JYWRhcHRlciA9IGkyY19nZXRfYWRhcHRlcihzZXR1cC0+aTJjX2J1cyk7Ci0JaWYgKCFhZGFwdGVyKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IGdldCBpMmMgYWRhcHRlciAlZFxuIiwKLQkJCXNldHVwLT5pMmNfYnVzKTsKLQkJZ290byBlcnJfZHJpdmVyOworCXdtODczMV9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1NUQU5EQlkpOworCisJLyogTGF0Y2ggdGhlIHVwZGF0ZSBiaXRzICovCisJcmVnID0gd204NzMxX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3MzFfTE9VVDFWKTsKKwl3bTg3MzFfd3JpdGUoY29kZWMsIFdNODczMV9MT1VUMVYsIHJlZyAmIH4weDAxMDApOworCXJlZyA9IHdtODczMV9yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzMxX1JPVVQxVik7CisJd204NzMxX3dyaXRlKGNvZGVjLCBXTTg3MzFfUk9VVDFWLCByZWcgJiB+MHgwMTAwKTsKKwlyZWcgPSB3bTg3MzFfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODczMV9MSU5WT0wpOworCXdtODczMV93cml0ZShjb2RlYywgV004NzMxX0xJTlZPTCwgcmVnICYgfjB4MDEwMCk7CisJcmVnID0gd204NzMxX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3MzFfUklOVk9MKTsKKwl3bTg3MzFfd3JpdGUoY29kZWMsIFdNODczMV9SSU5WT0wsIHJlZyAmIH4weDAxMDApOworCisJLyogRGlzYWJsZSBieXBhc3MgcGF0aCBieSBkZWZhdWx0ICovCisJcmVnID0gd204NzMxX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3MzFfQVBBTkEpOworCXdtODczMV93cml0ZShjb2RlYywgV004NzMxX0FQQU5BLCByZWcgJiB+MHg0KTsKKworCXdtODczMV9jb2RlYyA9IGNvZGVjOworCisJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9jb2RlYyhjb2RlYyk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBjb2RlYzogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CiAJfQogCi0JY2xpZW50ID0gaTJjX25ld19kZXZpY2UoYWRhcHRlciwgJmluZm8pOwotCWkyY19wdXRfYWRhcHRlcihhZGFwdGVyKTsKLQlpZiAoIWNsaWVudCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4ndCBhZGQgaTJjIGRldmljZSBhdCAweCV4XG4iLAotCQkJKHVuc2lnbmVkIGludClpbmZvLmFkZHIpOwotCQlnb3RvIGVycl9kcml2ZXI7CisJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9kYWkoJndtODczMV9kYWkpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgREFJOiAlZFxuIiwgcmV0KTsKKwkJc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKGNvZGVjKTsKKwkJcmV0dXJuIHJldDsKIAl9CiAKIAlyZXR1cm4gMDsKLQotZXJyX2RyaXZlcjoKLQlpMmNfZGVsX2RyaXZlcigmd204NzMxX2kyY19kcml2ZXIpOwotCXJldHVybiAtRU5PREVWOwogfQotI2VuZGlmCisKK3N0YXRpYyB2b2lkIHdtODczMV91bnJlZ2lzdGVyKHN0cnVjdCB3bTg3MzFfcHJpdiAqd204NzMxKQoreworCXdtODczMV9zZXRfYmlhc19sZXZlbCgmd204NzMxLT5jb2RlYywgU05EX1NPQ19CSUFTX09GRik7CisJc25kX3NvY191bnJlZ2lzdGVyX2RhaSgmd204NzMxX2RhaSk7CisJc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKCZ3bTg3MzEtPmNvZGVjKTsKKwlrZnJlZSh3bTg3MzEpOworCXdtODczMV9jb2RlYyA9IE5VTEw7Cit9CiAKICNpZiBkZWZpbmVkKENPTkZJR19TUElfTUFTVEVSKQotc3RhdGljIGludCBfX2RldmluaXQgd204NzMxX3NwaV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQotewotCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gd204NzMxX3NvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOwotCWludCByZXQ7Ci0KLQljb2RlYy0+Y29udHJvbF9kYXRhID0gc3BpOwotCi0JcmV0ID0gd204NzMxX2luaXQoc29jZGV2KTsKLQlpZiAocmV0IDwgMCkKLQkJZGV2X2Vycigmc3BpLT5kZXYsICJmYWlsZWQgdG8gaW5pdGlhbGlzZSBXTTg3MzFcbiIpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBfX2RldmV4aXQgd204NzMxX3NwaV9yZW1vdmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBzcGlfZHJpdmVyIHdtODczMV9zcGlfZHJpdmVyID0gewotCS5kcml2ZXIgPSB7Ci0JCS5uYW1lCT0gIndtODczMSIsCi0JCS5idXMJPSAmc3BpX2J1c190eXBlLAotCQkub3duZXIJPSBUSElTX01PRFVMRSwKLQl9LAotCS5wcm9iZQkJPSB3bTg3MzFfc3BpX3Byb2JlLAotCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aod204NzMxX3NwaV9yZW1vdmUpLAotfTsKLQogc3RhdGljIGludCB3bTg3MzFfc3BpX3dyaXRlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIGNvbnN0IGNoYXIgKmRhdGEsIGludCBsZW4pCiB7CiAJc3RydWN0IHNwaV90cmFuc2ZlciB0OwpAQCAtNzA3LDEwMSArNjUxLDEyMSBAQAogCiAJcmV0dXJuIGxlbjsKIH0KLSNlbmRpZiAvKiBDT05GSUdfU1BJX01BU1RFUiAqLwogCi1zdGF0aWMgaW50IHdtODczMV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBfX2RldmluaXQgd204NzMxX3NwaV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQogewotCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHdtODczMV9zZXR1cF9kYXRhICpzZXR1cDsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CiAJc3RydWN0IHdtODczMV9wcml2ICp3bTg3MzE7Ci0JaW50IHJldCA9IDA7Ci0KLQlwcl9pbmZvKCJXTTg3MzEgQXVkaW8gQ29kZWMgJXMiLCBXTTg3MzFfVkVSU0lPTik7Ci0KLQlzZXR1cCA9IHNvY2Rldi0+Y29kZWNfZGF0YTsKLQljb2RlYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzbmRfc29jX2NvZGVjKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGNvZGVjID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwogCiAJd204NzMxID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHdtODczMV9wcml2KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHdtODczMSA9PSBOVUxMKSB7Ci0JCWtmcmVlKGNvZGVjKTsKKwlpZiAod204NzMxID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwotCX0KIAotCWNvZGVjLT5wcml2YXRlX2RhdGEgPSB3bTg3MzE7Ci0Jc29jZGV2LT5jb2RlYyA9IGNvZGVjOwotCW11dGV4X2luaXQoJmNvZGVjLT5tdXRleCk7Ci0JSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3dpZGdldHMpOwotCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV9wYXRocyk7CisJY29kZWMgPSAmd204NzMxLT5jb2RlYzsKKwljb2RlYy0+Y29udHJvbF9kYXRhID0gc3BpOworCWNvZGVjLT5od193cml0ZSA9IChod193cml0ZV90KXdtODczMV9zcGlfd3JpdGU7CisJY29kZWMtPmRldiA9ICZzcGktPmRldjsKIAotCXdtODczMV9zb2NkZXYgPSBzb2NkZXY7Ci0JcmV0ID0gLUVOT0RFVjsKKwlzcGktPmRldi5kcml2ZXJfZGF0YSA9IHdtODczMTsKIAotI2lmIGRlZmluZWQoQ09ORklHX0kyQykgfHwgZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkKLQlpZiAoc2V0dXAtPmkyY19hZGRyZXNzKSB7Ci0JCWNvZGVjLT5od193cml0ZSA9IChod193cml0ZV90KWkyY19tYXN0ZXJfc2VuZDsKLQkJcmV0ID0gd204NzMxX2FkZF9pMmNfZGV2aWNlKHBkZXYsIHNldHVwKTsKLQl9Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR19TUElfTUFTVEVSKQotCWlmIChzZXR1cC0+c3BpKSB7Ci0JCWNvZGVjLT5od193cml0ZSA9IChod193cml0ZV90KXdtODczMV9zcGlfd3JpdGU7Ci0JCXJldCA9IHNwaV9yZWdpc3Rlcl9kcml2ZXIoJndtODczMV9zcGlfZHJpdmVyKTsKLQkJaWYgKHJldCAhPSAwKQotCQkJcHJpbnRrKEtFUk5fRVJSICJjYW4ndCBhZGQgc3BpIGRyaXZlciIpOwotCX0KLSNlbmRpZgotCi0JaWYgKHJldCAhPSAwKSB7Ci0JCWtmcmVlKGNvZGVjLT5wcml2YXRlX2RhdGEpOwotCQlrZnJlZShjb2RlYyk7Ci0JfQotCXJldHVybiByZXQ7CisJcmV0dXJuIHdtODczMV9yZWdpc3Rlcih3bTg3MzEpOwogfQogCi0vKiBwb3dlciBkb3duIGNoaXAgKi8KLXN0YXRpYyBpbnQgd204NzMxX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBfX2RldmV4aXQgd204NzMxX3NwaV9yZW1vdmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKIHsKLQlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHdtODczMV9wcml2ICp3bTg3MzEgPSBzcGktPmRldi5kcml2ZXJfZGF0YTsKIAotCWlmIChjb2RlYy0+Y29udHJvbF9kYXRhKQotCQl3bTg3MzFfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOwotCi0Jc25kX3NvY19mcmVlX3BjbXMoc29jZGV2KTsKLQlzbmRfc29jX2RhcG1fZnJlZShzb2NkZXYpOwotI2lmIGRlZmluZWQoQ09ORklHX0kyQykgfHwgZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkKLQlpMmNfdW5yZWdpc3Rlcl9kZXZpY2UoY29kZWMtPmNvbnRyb2xfZGF0YSk7Ci0JaTJjX2RlbF9kcml2ZXIoJndtODczMV9pMmNfZHJpdmVyKTsKLSNlbmRpZgotI2lmIGRlZmluZWQoQ09ORklHX1NQSV9NQVNURVIpCi0Jc3BpX3VucmVnaXN0ZXJfZHJpdmVyKCZ3bTg3MzFfc3BpX2RyaXZlcik7Ci0jZW5kaWYKLQlrZnJlZShjb2RlYy0+cHJpdmF0ZV9kYXRhKTsKLQlrZnJlZShjb2RlYyk7CisJd204NzMxX3VucmVnaXN0ZXIod204NzMxKTsKIAogCXJldHVybiAwOwogfQogCi1zdHJ1Y3Qgc25kX3NvY19jb2RlY19kZXZpY2Ugc29jX2NvZGVjX2Rldl93bTg3MzEgPSB7Ci0JLnByb2JlID0gCXdtODczMV9wcm9iZSwKLQkucmVtb3ZlID0gCXdtODczMV9yZW1vdmUsCi0JLnN1c3BlbmQgPSAJd204NzMxX3N1c3BlbmQsCi0JLnJlc3VtZSA9CXdtODczMV9yZXN1bWUsCitzdGF0aWMgc3RydWN0IHNwaV9kcml2ZXIgd204NzMxX3NwaV9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSAid204NzMxIiwKKwkJLmJ1cwk9ICZzcGlfYnVzX3R5cGUsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlCQk9IHdtODczMV9zcGlfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcCh3bTg3MzFfc3BpX3JlbW92ZSksCiB9OwotRVhQT1JUX1NZTUJPTF9HUEwoc29jX2NvZGVjX2Rldl93bTg3MzEpOworI2VuZGlmIC8qIENPTkZJR19TUElfTUFTVEVSICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19NT0RVTEUpCitzdGF0aWMgX19kZXZpbml0IGludCB3bTg3MzFfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICppMmMsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB3bTg3MzFfcHJpdiAqd204NzMxOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKKworCXdtODczMSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB3bTg3MzFfcHJpdiksIEdGUF9LRVJORUwpOworCWlmICh3bTg3MzEgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljb2RlYyA9ICZ3bTg3MzEtPmNvZGVjOworCWNvZGVjLT5od193cml0ZSA9IChod193cml0ZV90KWkyY19tYXN0ZXJfc2VuZDsKKworCWkyY19zZXRfY2xpZW50ZGF0YShpMmMsIHdtODczMSk7CisJY29kZWMtPmNvbnRyb2xfZGF0YSA9IGkyYzsKKworCWNvZGVjLT5kZXYgPSAmaTJjLT5kZXY7CisKKwlyZXR1cm4gd204NzMxX3JlZ2lzdGVyKHdtODczMSk7Cit9CisKK3N0YXRpYyBfX2RldmV4aXQgaW50IHdtODczMV9pMmNfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IHdtODczMV9wcml2ICp3bTg3MzEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwl3bTg3MzFfdW5yZWdpc3Rlcih3bTg3MzEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgd204NzMxX2kyY19pZFtdID0geworCXsgIndtODczMSIsIDAgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgd204NzMxX2kyY19pZCk7CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB3bTg3MzFfaTJjX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJXTTg3MzEgSTJDIENvZGVjIiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUgPSAgICB3bTg3MzFfaTJjX3Byb2JlLAorCS5yZW1vdmUgPSAgIF9fZGV2ZXhpdF9wKHdtODczMV9pMmNfcmVtb3ZlKSwKKwkuaWRfdGFibGUgPSB3bTg3MzFfaTJjX2lkLAorfTsKKyNlbmRpZgogCiBzdGF0aWMgaW50IF9faW5pdCB3bTg3MzFfbW9kaW5pdCh2b2lkKQogewotCXJldHVybiBzbmRfc29jX3JlZ2lzdGVyX2RhaSgmd204NzMxX2RhaSk7CisJaW50IHJldDsKKyNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19NT0RVTEUpCisJcmV0ID0gaTJjX2FkZF9kcml2ZXIoJndtODczMV9pMmNfZHJpdmVyKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVnaXN0ZXIgV004NzMxIEkyQyBkcml2ZXI6ICVkXG4iLAorCQkgICAgICAgcmV0KTsKKwl9CisjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19TUElfTUFTVEVSKQorCXJldCA9IHNwaV9yZWdpc3Rlcl9kcml2ZXIoJndtODczMV9zcGlfZHJpdmVyKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVnaXN0ZXIgV004NzMxIFNQSSBkcml2ZXI6ICVkXG4iLAorCQkgICAgICAgcmV0KTsKKwl9CisjZW5kaWYKKwlyZXR1cm4gMDsKIH0KIG1vZHVsZV9pbml0KHdtODczMV9tb2Rpbml0KTsKIAogc3RhdGljIHZvaWQgX19leGl0IHdtODczMV9leGl0KHZvaWQpCiB7Ci0Jc25kX3NvY191bnJlZ2lzdGVyX2RhaSgmd204NzMxX2RhaSk7CisjaWYgZGVmaW5lZChDT05GSUdfSTJDKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfTU9EVUxFKQorCWkyY19kZWxfZHJpdmVyKCZ3bTg3MzFfaTJjX2RyaXZlcik7CisjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19TUElfTUFTVEVSKQorCXNwaV91bnJlZ2lzdGVyX2RyaXZlcigmd204NzMxX3NwaV9kcml2ZXIpOworI2VuZGlmCiB9CiBtb2R1bGVfZXhpdCh3bTg3MzFfZXhpdCk7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NzMxLmggYi9zb3VuZC9zb2MvY29kZWNzL3dtODczMS5oCmluZGV4IDk1MTkwZTkuLmNkN2I4MDYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NzMxLmgKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg3MzEuaApAQCAtMzQsMTIgKzM0LDYgQEAKICNkZWZpbmUgV004NzMxX1NZU0NMSwkwCiAjZGVmaW5lIFdNODczMV9EQUkJCTAKIAotc3RydWN0IHdtODczMV9zZXR1cF9kYXRhIHsKLQlpbnQgICAgICAgICAgICBzcGk7Ci0JaW50ICAgICAgICAgICAgaTJjX2J1czsKLQl1bnNpZ25lZCBzaG9ydCBpMmNfYWRkcmVzczsKLX07Ci0KIGV4dGVybiBzdHJ1Y3Qgc25kX3NvY19kYWkgd204NzMxX2RhaTsKIGV4dGVybiBzdHJ1Y3Qgc25kX3NvY19jb2RlY19kZXZpY2Ugc29jX2NvZGVjX2Rldl93bTg3MzE7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NzUwLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODc1MC5jCmluZGV4IDU5OTdmYTYuLmI2NDUwOWIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NzUwLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg3NTAuYwpAQCAtMjMxLDIxICsyMzEsNiBAQAogCiB9OwogCi0vKiBhZGQgbm9uIGRhcG0gY29udHJvbHMgKi8KLXN0YXRpYyBpbnQgd204NzUwX2FkZF9jb250cm9scyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCi17Ci0JaW50IGVyciwgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtODc1MF9zbmRfY29udHJvbHMpOyBpKyspIHsKLQkJZXJyID0gc25kX2N0bF9hZGQoY29kZWMtPmNhcmQsCi0JCQkJc25kX3NvY19jbmV3KCZ3bTg3NTBfc25kX2NvbnRyb2xzW2ldLAotCQkJCQkJY29kZWMsIE5VTEwpKTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwotCX0KLQlyZXR1cm4gMDsKLX0KLQogLyoKICAqIERBUE0gQ29udHJvbHMKICAqLwpAQCAtNjE5LDcgKzYwNCw3IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCXN0cnVjdCB3bTg3NTBfcHJpdiAqd204NzUwID0gY29kZWMtPnByaXZhdGVfZGF0YTsKIAl1MTYgaWZhY2UgPSB3bTg3NTBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODc1MF9JRkFDRSkgJiAweDFmMzsKIAl1MTYgc3JhdGUgPSB3bTg3NTBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODc1MF9TUkFURSkgJiAweDFjMDsKQEAgLTY5NCw2ICs2NzksMTMgQEAKICNkZWZpbmUgV004NzUwX0ZPUk1BVFMgKFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwgU05EUlZfUENNX0ZNVEJJVF9TMjBfM0xFIHxcCiAJU05EUlZfUENNX0ZNVEJJVF9TMjRfTEUpCiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHdtODc1MF9kYWlfb3BzID0geworCS5od19wYXJhbXMJPSB3bTg3NTBfcGNtX2h3X3BhcmFtcywKKwkuZGlnaXRhbF9tdXRlCT0gd204NzUwX211dGUsCisJLnNldF9mbXQJPSB3bTg3NTBfc2V0X2RhaV9mbXQsCisJLnNldF9zeXNjbGsJPSB3bTg3NTBfc2V0X2RhaV9zeXNjbGssCit9OworCiBzdHJ1Y3Qgc25kX3NvY19kYWkgd204NzUwX2RhaSA9IHsKIAkubmFtZSA9ICJXTTg3NTAiLAogCS5wbGF5YmFjayA9IHsKQEAgLTcwOCwxMiArNzAwLDcgQEAKIAkJLmNoYW5uZWxzX21heCA9IDIsCiAJCS5yYXRlcyA9IFdNODc1MF9SQVRFUywKIAkJLmZvcm1hdHMgPSBXTTg3NTBfRk9STUFUUyx9LAotCS5vcHMgPSB7Ci0JCS5od19wYXJhbXMgPSB3bTg3NTBfcGNtX2h3X3BhcmFtcywKLQkJLmRpZ2l0YWxfbXV0ZSA9IHdtODc1MF9tdXRlLAotCQkuc2V0X2ZtdCA9IHdtODc1MF9zZXRfZGFpX2ZtdCwKLQkJLnNldF9zeXNjbGsgPSB3bTg3NTBfc2V0X2RhaV9zeXNjbGssCi0JfSwKKwkub3BzID0gJndtODc1MF9kYWlfb3BzLAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKHdtODc1MF9kYWkpOwogCkBAIC03MjcsNyArNzE0LDcgQEAKIHN0YXRpYyBpbnQgd204NzUwX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJd204NzUwX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKIAlyZXR1cm4gMDsKQEAgLTczNiw3ICs3MjMsNyBAQAogc3RhdGljIGludCB3bTg3NTBfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJaW50IGk7CiAJdTggZGF0YVsyXTsKIAl1MTYgKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKQEAgLTc2OSw3ICs3NTYsNyBAQAogICovCiBzdGF0aWMgaW50IHdtODc1MF9pbml0KHN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2KQogewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlpbnQgcmVnLCByZXQgPSAwOwogCiAJY29kZWMtPm5hbWUgPSAiV004NzUwIjsKQEAgLTgxNiw3ICs4MDMsOCBAQAogCXJlZyA9IHdtODc1MF9yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzUwX1JJTlZPTCk7CiAJd204NzUwX3dyaXRlKGNvZGVjLCBXTTg3NTBfUklOVk9MLCByZWcgfCAweDAxMDApOwogCi0Jd204NzUwX2FkZF9jb250cm9scyhjb2RlYyk7CisJc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHdtODc1MF9zbmRfY29udHJvbHMsCisJCQkJQVJSQVlfU0laRSh3bTg3NTBfc25kX2NvbnRyb2xzKSk7CiAJd204NzUwX2FkZF93aWRnZXRzKGNvZGVjKTsKIAlyZXQgPSBzbmRfc29jX2luaXRfY2FyZChzb2NkZXYpOwogCWlmIChyZXQgPCAwKSB7CkBAIC04NTAsNyArODM4LDcgQEAKIAkJCSAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSB3bTg3NTBfc29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlpbnQgcmV0OwogCiAJaTJjX3NldF9jbGllbnRkYXRhKGkyYywgY29kZWMpOwpAQCAtOTMxLDcgKzkxOSw3IEBACiBzdGF0aWMgaW50IF9fZGV2aW5pdCB3bTg3NTBfc3BpX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSB3bTg3NTBfc29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlpbnQgcmV0OwogCiAJY29kZWMtPmNvbnRyb2xfZGF0YSA9IHNwaTsKQEAgLTEwMDMsNyArOTkxLDcgQEAKIAl9CiAKIAljb2RlYy0+cHJpdmF0ZV9kYXRhID0gd204NzUwOwotCXNvY2Rldi0+Y29kZWMgPSBjb2RlYzsKKwlzb2NkZXYtPmNhcmQtPmNvZGVjID0gY29kZWM7CiAJbXV0ZXhfaW5pdCgmY29kZWMtPm11dGV4KTsKIAlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fd2lkZ2V0cyk7CiAJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3BhdGhzKTsKQEAgLTEwNTcsNyArMTA0NSw3IEBACiBzdGF0aWMgaW50IHdtODc1MF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCWlmIChjb2RlYy0+Y29udHJvbF9kYXRhKQogCQl3bTg3NTBfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg3NTMuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NzUzLmMKaW5kZXggNzc2MjBhYi4uYTZlOGYzZiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg3NTMuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODc1My5jCkBAIC01MSw4ICs1MSw2IEBACiAKICNpbmNsdWRlICJ3bTg3NTMuaCIKIAotI2RlZmluZSBXTTg3NTNfVkVSU0lPTiAiMC4xNiIKLQogc3RhdGljIGludCBjYXBzX2NoYXJnZSA9IDIwMDA7CiBtb2R1bGVfcGFyYW0oY2Fwc19jaGFyZ2UsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGNhcHNfY2hhcmdlLCAiV004NzUzIGNhcCBjaGFyZ2UgdGltZSAobXNlY3MpIik7CkBAIC02MCwxMiArNTgsNiBAQAogc3RhdGljIHZvaWQgd204NzUzX3NldF9kYWlfbW9kZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCiAJdW5zaWduZWQgaW50IG1vZGUpOwogCi0vKiBjb2RlYyBwcml2YXRlIGRhdGEgKi8KLXN0cnVjdCB3bTg3NTNfcHJpdiB7Ci0JdW5zaWduZWQgaW50IHN5c2NsazsKLQl1bnNpZ25lZCBpbnQgcGNtY2xrOwotfTsKLQogLyoKICAqIHdtODc1MyByZWdpc3RlciBjYWNoZQogICogV2UgY2FuJ3QgcmVhZCB0aGUgV004NzUzIHJlZ2lzdGVyIHNwYWNlIHdoZW4gd2UKQEAgLTkwLDYgKzgyLDE0IEBACiAJMHgwMDAwLCAweDAwMDAKIH07CiAKKy8qIGNvZGVjIHByaXZhdGUgZGF0YSAqLworc3RydWN0IHdtODc1M19wcml2IHsKKwl1bnNpZ25lZCBpbnQgc3lzY2xrOworCXVuc2lnbmVkIGludCBwY21jbGs7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgY29kZWM7CisJdTE2IHJlZ19jYWNoZVtBUlJBWV9TSVpFKHdtODc1M19yZWcpXTsKK307CisKIC8qCiAgKiByZWFkIHdtODc1MyByZWdpc3RlciBjYWNoZQogICovCkBAIC05Nyw3ICs5Nyw3IEBACiAJdW5zaWduZWQgaW50IHJlZykKIHsKIAl1MTYgKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKLQlpZiAocmVnIDwgMSB8fCByZWcgPiAoQVJSQVlfU0laRSh3bTg3NTNfcmVnKSArIDEpKQorCWlmIChyZWcgPCAxIHx8IHJlZyA+PSAoQVJSQVlfU0laRSh3bTg3NTNfcmVnKSArIDEpKQogCQlyZXR1cm4gLTE7CiAJcmV0dXJuIGNhY2hlW3JlZyAtIDFdOwogfQpAQCAtMTA5LDcgKzEwOSw3IEBACiAJdW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgaW50IHZhbHVlKQogewogCXUxNiAqY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOwotCWlmIChyZWcgPCAxIHx8IHJlZyA+IDB4M2YpCisJaWYgKHJlZyA8IDEgfHwgcmVnID49IChBUlJBWV9TSVpFKHdtODc1M19yZWcpICsgMSkpCiAJCXJldHVybjsKIAljYWNoZVtyZWcgLSAxXSA9IHZhbHVlOwogfQpAQCAtMzM5LDIxICszMzksNiBAQAogU09DX0VOVU0oIlJPVVQyIFBoYXNlIiwgd204NzUzX2VudW1bMjhdKSwKIH07CiAKLS8qIGFkZCBub24gZGFwbSBjb250cm9scyAqLwotc3RhdGljIGludCB3bTg3NTNfYWRkX2NvbnRyb2xzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKLXsKLQlpbnQgZXJyLCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod204NzUzX3NuZF9jb250cm9scyk7IGkrKykgewotCQllcnIgPSBzbmRfY3RsX2FkZChjb2RlYy0+Y2FyZCwKLQkJCQlzbmRfc29jX2NuZXcoJndtODc1M19zbmRfY29udHJvbHNbaV0sCi0JCQkJCQljb2RlYywgTlVMTCkpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7Ci0JfQotCXJldHVybiAwOwotfQotCiAvKgogICogX0RBUE1fIENvbnRyb2xzCiAgKi8KQEAgLTkyNyw3ICs5MTIsNyBAQAogewogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHJ0ZC0+c29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlzdHJ1Y3Qgd204NzUzX3ByaXYgKndtODc1MyA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CiAJdTE2IHZvaWNlID0gd204NzUzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3NTNfUENNKSAmIDB4MDFmMzsKIAl1MTYgc3JhdGUgPSB3bTg3NTNfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODc1M19TUkFURTEpICYgMHgwMTdmOwpAQCAtMTE2MSw3ICsxMTQ2LDcgQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJc3RydWN0IHdtODc1M19wcml2ICp3bTg3NTMgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOwogCXUxNiBzcmF0ZSA9IHdtODc1M19yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzUzX1NSQVRFMSkgJiAweDAxYzA7CiAJdTE2IGhpZmkgPSB3bTg3NTNfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODc1M19ISUZJKSAmIDB4MDFmMzsKQEAgLTEzMTYsNiArMTMwMSw1MSBAQAogICogMy4gVm9pY2UgZGlzYWJsZWQgLSBISUZJIG92ZXIgSElGSQogICogNC4gVm9pY2UgZGlzYWJsZWQgLSBISUZJIG92ZXIgSElGSSwgdXNlcyB2b2ljZSBEQUkgTFJDIGZvciBjYXB0dXJlCiAgKi8KK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHdtODc1M19kYWlfb3BzX2hpZmlfbW9kZTEgPSB7CisJLmh3X3BhcmFtcwk9IHdtODc1M19pMnNfaHdfcGFyYW1zLAorCS5kaWdpdGFsX211dGUJPSB3bTg3NTNfbXV0ZSwKKwkuc2V0X2ZtdAk9IHdtODc1M19tb2RlMWhfc2V0X2RhaV9mbXQsCisJLnNldF9jbGtkaXYJPSB3bTg3NTNfc2V0X2RhaV9jbGtkaXYsCisJLnNldF9wbGwJPSB3bTg3NTNfc2V0X2RhaV9wbGwsCisJLnNldF9zeXNjbGsJPSB3bTg3NTNfc2V0X2RhaV9zeXNjbGssCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyB3bTg3NTNfZGFpX29wc192b2ljZV9tb2RlMSA9IHsKKwkuaHdfcGFyYW1zCT0gd204NzUzX3BjbV9od19wYXJhbXMsCisJLmRpZ2l0YWxfbXV0ZQk9IHdtODc1M19tdXRlLAorCS5zZXRfZm10CT0gd204NzUzX21vZGUxdl9zZXRfZGFpX2ZtdCwKKwkuc2V0X2Nsa2Rpdgk9IHdtODc1M19zZXRfZGFpX2Nsa2RpdiwKKwkuc2V0X3BsbAk9IHdtODc1M19zZXRfZGFpX3BsbCwKKwkuc2V0X3N5c2Nsawk9IHdtODc1M19zZXRfZGFpX3N5c2NsaywKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHdtODc1M19kYWlfb3BzX3ZvaWNlX21vZGUyID0geworCS5od19wYXJhbXMJPSB3bTg3NTNfcGNtX2h3X3BhcmFtcywKKwkuZGlnaXRhbF9tdXRlCT0gd204NzUzX211dGUsCisJLnNldF9mbXQJPSB3bTg3NTNfbW9kZTJfc2V0X2RhaV9mbXQsCisJLnNldF9jbGtkaXYJPSB3bTg3NTNfc2V0X2RhaV9jbGtkaXYsCisJLnNldF9wbGwJPSB3bTg3NTNfc2V0X2RhaV9wbGwsCisJLnNldF9zeXNjbGsJPSB3bTg3NTNfc2V0X2RhaV9zeXNjbGssCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyB3bTg3NTNfZGFpX29wc19oaWZpX21vZGUzCT0geworCS5od19wYXJhbXMJPSB3bTg3NTNfaTJzX2h3X3BhcmFtcywKKwkuZGlnaXRhbF9tdXRlCT0gd204NzUzX211dGUsCisJLnNldF9mbXQJPSB3bTg3NTNfbW9kZTNfNF9zZXRfZGFpX2ZtdCwKKwkuc2V0X2Nsa2Rpdgk9IHdtODc1M19zZXRfZGFpX2Nsa2RpdiwKKwkuc2V0X3BsbAk9IHdtODc1M19zZXRfZGFpX3BsbCwKKwkuc2V0X3N5c2Nsawk9IHdtODc1M19zZXRfZGFpX3N5c2NsaywKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHdtODc1M19kYWlfb3BzX2hpZmlfbW9kZTQJPSB7CisJLmh3X3BhcmFtcwk9IHdtODc1M19pMnNfaHdfcGFyYW1zLAorCS5kaWdpdGFsX211dGUJPSB3bTg3NTNfbXV0ZSwKKwkuc2V0X2ZtdAk9IHdtODc1M19tb2RlM180X3NldF9kYWlfZm10LAorCS5zZXRfY2xrZGl2CT0gd204NzUzX3NldF9kYWlfY2xrZGl2LAorCS5zZXRfcGxsCT0gd204NzUzX3NldF9kYWlfcGxsLAorCS5zZXRfc3lzY2xrCT0gd204NzUzX3NldF9kYWlfc3lzY2xrLAorfTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhaSB3bTg3NTNfYWxsX2RhaVtdID0gewogLyogREFJIEhpRmkgbW9kZSAxICovCiB7CS5uYW1lID0gIldNODc1MyBIaUZpIiwKQEAgLTEzMzIsMTQgKzEzNjIsNyBAQAogCQkuY2hhbm5lbHNfbWF4ID0gMiwKIAkJLnJhdGVzID0gV004NzUzX1JBVEVTLAogCQkuZm9ybWF0cyA9IFdNODc1M19GT1JNQVRTfSwKLQkub3BzID0gewotCQkuaHdfcGFyYW1zID0gd204NzUzX2kyc19od19wYXJhbXMsCi0JCS5kaWdpdGFsX211dGUgPSB3bTg3NTNfbXV0ZSwKLQkJLnNldF9mbXQgPSB3bTg3NTNfbW9kZTFoX3NldF9kYWlfZm10LAotCQkuc2V0X2Nsa2RpdiA9IHdtODc1M19zZXRfZGFpX2Nsa2RpdiwKLQkJLnNldF9wbGwgPSB3bTg3NTNfc2V0X2RhaV9wbGwsCi0JCS5zZXRfc3lzY2xrID0gd204NzUzX3NldF9kYWlfc3lzY2xrLAotCX0sCisJLm9wcyA9ICZ3bTg3NTNfZGFpX29wc19oaWZpX21vZGUxLAogfSwKIC8qIERBSSBWb2ljZSBtb2RlIDEgKi8KIHsJLm5hbWUgPSAiV004NzUzIFZvaWNlIiwKQEAgLTEzNTYsMTQgKzEzNzksNyBAQAogCQkuY2hhbm5lbHNfbWF4ID0gMiwKIAkJLnJhdGVzID0gV004NzUzX1JBVEVTLAogCQkuZm9ybWF0cyA9IFdNODc1M19GT1JNQVRTLH0sCi0JLm9wcyA9IHsKLQkJLmh3X3BhcmFtcyA9IHdtODc1M19wY21faHdfcGFyYW1zLAotCQkuZGlnaXRhbF9tdXRlID0gd204NzUzX211dGUsCi0JCS5zZXRfZm10ID0gd204NzUzX21vZGUxdl9zZXRfZGFpX2ZtdCwKLQkJLnNldF9jbGtkaXYgPSB3bTg3NTNfc2V0X2RhaV9jbGtkaXYsCi0JCS5zZXRfcGxsID0gd204NzUzX3NldF9kYWlfcGxsLAotCQkuc2V0X3N5c2NsayA9IHdtODc1M19zZXRfZGFpX3N5c2NsaywKLQl9LAorCS5vcHMgPSAmd204NzUzX2RhaV9vcHNfdm9pY2VfbW9kZTEsCiB9LAogLyogREFJIEhpRmkgbW9kZSAyIC0gZHVtbXkgKi8KIHsJLm5hbWUgPSAiV004NzUzIEhpRmkiLApAQCAtMTM4NCwxNCArMTQwMCw3IEBACiAJCS5jaGFubmVsc19tYXggPSAyLAogCQkucmF0ZXMgPSBXTTg3NTNfUkFURVMsCiAJCS5mb3JtYXRzID0gV004NzUzX0ZPUk1BVFMsfSwKLQkub3BzID0gewotCQkuaHdfcGFyYW1zID0gd204NzUzX3BjbV9od19wYXJhbXMsCi0JCS5kaWdpdGFsX211dGUgPSB3bTg3NTNfbXV0ZSwKLQkJLnNldF9mbXQgPSB3bTg3NTNfbW9kZTJfc2V0X2RhaV9mbXQsCi0JCS5zZXRfY2xrZGl2ID0gd204NzUzX3NldF9kYWlfY2xrZGl2LAotCQkuc2V0X3BsbCA9IHdtODc1M19zZXRfZGFpX3BsbCwKLQkJLnNldF9zeXNjbGsgPSB3bTg3NTNfc2V0X2RhaV9zeXNjbGssCi0JfSwKKwkub3BzID0gJndtODc1M19kYWlfb3BzX3ZvaWNlX21vZGUyLAogfSwKIC8qIERBSSBIaUZpIG1vZGUgMyAqLwogewkubmFtZSA9ICJXTTg3NTMgSGlGaSIsCkBAIC0xNDA4LDE0ICsxNDE3LDcgQEAKIAkJLmNoYW5uZWxzX21heCA9IDIsCiAJCS5yYXRlcyA9IFdNODc1M19SQVRFUywKIAkJLmZvcm1hdHMgPSBXTTg3NTNfRk9STUFUUyx9LAotCS5vcHMgPSB7Ci0JCS5od19wYXJhbXMgPSB3bTg3NTNfaTJzX2h3X3BhcmFtcywKLQkJLmRpZ2l0YWxfbXV0ZSA9IHdtODc1M19tdXRlLAotCQkuc2V0X2ZtdCA9IHdtODc1M19tb2RlM180X3NldF9kYWlfZm10LAotCQkuc2V0X2Nsa2RpdiA9IHdtODc1M19zZXRfZGFpX2Nsa2RpdiwKLQkJLnNldF9wbGwgPSB3bTg3NTNfc2V0X2RhaV9wbGwsCi0JCS5zZXRfc3lzY2xrID0gd204NzUzX3NldF9kYWlfc3lzY2xrLAotCX0sCisJLm9wcyA9ICZ3bTg3NTNfZGFpX29wc19oaWZpX21vZGUzLAogfSwKIC8qIERBSSBWb2ljZSBtb2RlIDMgLSBkdW1teSAqLwogewkubmFtZSA9ICJXTTg3NTMgVm9pY2UiLApAQCAtMTQzNiwxNCArMTQzOCw3IEBACiAJCS5jaGFubmVsc19tYXggPSAyLAogCQkucmF0ZXMgPSBXTTg3NTNfUkFURVMsCiAJCS5mb3JtYXRzID0gV004NzUzX0ZPUk1BVFMsfSwKLQkub3BzID0gewotCQkuaHdfcGFyYW1zID0gd204NzUzX2kyc19od19wYXJhbXMsCi0JCS5kaWdpdGFsX211dGUgPSB3bTg3NTNfbXV0ZSwKLQkJLnNldF9mbXQgPSB3bTg3NTNfbW9kZTNfNF9zZXRfZGFpX2ZtdCwKLQkJLnNldF9jbGtkaXYgPSB3bTg3NTNfc2V0X2RhaV9jbGtkaXYsCi0JCS5zZXRfcGxsID0gd204NzUzX3NldF9kYWlfcGxsLAotCQkuc2V0X3N5c2NsayA9IHdtODc1M19zZXRfZGFpX3N5c2NsaywKLQl9LAorCS5vcHMgPSAmd204NzUzX2RhaV9vcHNfaGlmaV9tb2RlNCwKIH0sCiAvKiBEQUkgVm9pY2UgbW9kZSA0IC0gZHVtbXkgKi8KIHsJLm5hbWUgPSAiV004NzUzIFZvaWNlIiwKQEAgLTE0NjYsMzAgKzE0NjEsMzUgQEAKIAlpZiAobW9kZSA8IDQpIHsKIAkJaW50IHBsYXliYWNrX2FjdGl2ZSwgY2FwdHVyZV9hY3RpdmUsIGNvZGVjX2FjdGl2ZSwgcG9wX3dhaXQ7CiAJCXZvaWQgKnByaXZhdGVfZGF0YTsKKwkJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCiAJCXBsYXliYWNrX2FjdGl2ZSA9IHdtODc1M19kYWlbMF0ucGxheWJhY2suYWN0aXZlOwogCQljYXB0dXJlX2FjdGl2ZSA9IHdtODc1M19kYWlbMF0uY2FwdHVyZS5hY3RpdmU7CiAJCWNvZGVjX2FjdGl2ZSA9IHdtODc1M19kYWlbMF0uYWN0aXZlOwogCQlwcml2YXRlX2RhdGEgPSB3bTg3NTNfZGFpWzBdLnByaXZhdGVfZGF0YTsKIAkJcG9wX3dhaXQgPSB3bTg3NTNfZGFpWzBdLnBvcF93YWl0OworCQlsaXN0ID0gd204NzUzX2RhaVswXS5saXN0OwogCQl3bTg3NTNfZGFpWzBdID0gd204NzUzX2FsbF9kYWlbbW9kZSA8PCAxXTsKIAkJd204NzUzX2RhaVswXS5wbGF5YmFjay5hY3RpdmUgPSBwbGF5YmFja19hY3RpdmU7CiAJCXdtODc1M19kYWlbMF0uY2FwdHVyZS5hY3RpdmUgPSBjYXB0dXJlX2FjdGl2ZTsKIAkJd204NzUzX2RhaVswXS5hY3RpdmUgPSBjb2RlY19hY3RpdmU7CiAJCXdtODc1M19kYWlbMF0ucHJpdmF0ZV9kYXRhID0gcHJpdmF0ZV9kYXRhOwogCQl3bTg3NTNfZGFpWzBdLnBvcF93YWl0ID0gcG9wX3dhaXQ7CisJCXdtODc1M19kYWlbMF0ubGlzdCA9IGxpc3Q7CiAKIAkJcGxheWJhY2tfYWN0aXZlID0gd204NzUzX2RhaVsxXS5wbGF5YmFjay5hY3RpdmU7CiAJCWNhcHR1cmVfYWN0aXZlID0gd204NzUzX2RhaVsxXS5jYXB0dXJlLmFjdGl2ZTsKIAkJY29kZWNfYWN0aXZlID0gd204NzUzX2RhaVsxXS5hY3RpdmU7CiAJCXByaXZhdGVfZGF0YSA9IHdtODc1M19kYWlbMV0ucHJpdmF0ZV9kYXRhOwogCQlwb3Bfd2FpdCA9IHdtODc1M19kYWlbMV0ucG9wX3dhaXQ7CisJCWxpc3QgPSB3bTg3NTNfZGFpWzFdLmxpc3Q7CiAJCXdtODc1M19kYWlbMV0gPSB3bTg3NTNfYWxsX2RhaVsobW9kZSA8PCAxKSArIDFdOwogCQl3bTg3NTNfZGFpWzFdLnBsYXliYWNrLmFjdGl2ZSA9IHBsYXliYWNrX2FjdGl2ZTsKIAkJd204NzUzX2RhaVsxXS5jYXB0dXJlLmFjdGl2ZSA9IGNhcHR1cmVfYWN0aXZlOwogCQl3bTg3NTNfZGFpWzFdLmFjdGl2ZSA9IGNvZGVjX2FjdGl2ZTsKIAkJd204NzUzX2RhaVsxXS5wcml2YXRlX2RhdGEgPSBwcml2YXRlX2RhdGE7CiAJCXdtODc1M19kYWlbMV0ucG9wX3dhaXQgPSBwb3Bfd2FpdDsKKwkJd204NzUzX2RhaVsxXS5saXN0ID0gbGlzdDsKIAl9CiAJd204NzUzX2RhaVswXS5jb2RlYyA9IGNvZGVjOwogCXdtODc1M19kYWlbMV0uY29kZWMgPSBjb2RlYzsKQEAgLTE1MDUsNyArMTUwNSw3IEBACiBzdGF0aWMgaW50IHdtODc1M19zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCS8qIHdlIG9ubHkgbmVlZCB0byBzdXNwZW5kIGlmIHdlIGFyZSBhIHZhbGlkIGNhcmQgKi8KIAlpZiAoIWNvZGVjLT5jYXJkKQpAQCAtMTUxOCw3ICsxNTE4LDcgQEAKIHN0YXRpYyBpbnQgd204NzUzX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCWludCBpOwogCXU4IGRhdGFbMl07CiAJdTE2ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CkBAIC0xNTMxLDYgKzE1MzEsMTEgQEAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTg3NTNfcmVnKTsgaSsrKSB7CiAJCWlmIChpICsgMSA9PSBXTTg3NTNfUkVTRVQpCiAJCQljb250aW51ZTsKKworCQkvKiBObyBwb2ludCBpbiB3cml0aW5nIGhhcmR3YXJlIGRlZmF1bHQgdmFsdWVzIGJhY2sgKi8KKwkJaWYgKGNhY2hlW2ldID09IHdtODc1M19yZWdbaV0pCisJCQljb250aW51ZTsKKwogCQlkYXRhWzBdID0gKChpICsgMSkgPDwgMSkgfCAoKGNhY2hlW2ldID4+IDgpICYgMHgwMDAxKTsKIAkJZGF0YVsxXSA9IGNhY2hlW2ldICYgMHgwMGZmOwogCQljb2RlYy0+aHdfd3JpdGUoY29kZWMtPmNvbnRyb2xfZGF0YSwgZGF0YSwgMik7CkBAIC0xNTQ5LDMyICsxNTU0LDI0IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBpbml0aWFsaXNlIHRoZSBXTTg3NTMgZHJpdmVyCi0gKiByZWdpc3RlciB0aGUgbWl4ZXIgYW5kIGRzcCBpbnRlcmZhY2VzIHdpdGggdGhlIGtlcm5lbAotICovCi1zdGF0aWMgaW50IHdtODc1M19pbml0KHN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2KQorc3RhdGljIHN0cnVjdCBzbmRfc29jX2NvZGVjICp3bTg3NTNfY29kZWM7CisKK3N0YXRpYyBpbnQgd204NzUzX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKLQlpbnQgcmVnLCByZXQgPSAwOworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOworCWludCByZXQgPSAwOwogCi0JY29kZWMtPm5hbWUgPSAiV004NzUzIjsKLQljb2RlYy0+b3duZXIgPSBUSElTX01PRFVMRTsKLQljb2RlYy0+cmVhZCA9IHdtODc1M19yZWFkX3JlZ19jYWNoZTsKLQljb2RlYy0+d3JpdGUgPSB3bTg3NTNfd3JpdGU7Ci0JY29kZWMtPnNldF9iaWFzX2xldmVsID0gd204NzUzX3NldF9iaWFzX2xldmVsOwotCWNvZGVjLT5kYWkgPSB3bTg3NTNfZGFpOwotCWNvZGVjLT5udW1fZGFpID0gMjsKLQljb2RlYy0+cmVnX2NhY2hlX3NpemUgPSBBUlJBWV9TSVpFKHdtODc1M19yZWcpOwotCWNvZGVjLT5yZWdfY2FjaGUgPSBrbWVtZHVwKHdtODc1M19yZWcsIHNpemVvZih3bTg3NTNfcmVnKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF3bTg3NTNfY29kZWMpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiV004NzUzIGNvZGVjIG5vdCB5ZXQgcmVnaXN0ZXJlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KIAotCWlmIChjb2RlYy0+cmVnX2NhY2hlID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSB3bTg3NTNfY29kZWM7CisJY29kZWMgPSB3bTg3NTNfY29kZWM7CiAKIAl3bTg3NTNfc2V0X2RhaV9tb2RlKGNvZGVjLCAwKTsKIAotCXdtODc1M19yZXNldChjb2RlYyk7Ci0KIAkvKiByZWdpc3RlciBwY21zICovCiAJcmV0ID0gc25kX3NvY19uZXdfcGNtcyhzb2NkZXYsIFNORFJWX0RFRkFVTFRfSURYMSwgU05EUlZfREVGQVVMVF9TVFIxKTsKIAlpZiAocmV0IDwgMCkgewpAQCAtMTU4MiwzNSArMTU3OSw4IEBACiAJCWdvdG8gcGNtX2VycjsKIAl9CiAKLQkvKiBjaGFyZ2Ugb3V0cHV0IGNhcHMgKi8KLQl3bTg3NTNfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19QUkVQQVJFKTsKLQljb2RlYy0+Ymlhc19sZXZlbCA9IFNORF9TT0NfQklBU19TVEFOREJZOwotCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmY29kZWMtPmRlbGF5ZWRfd29yaywKLQkJbXNlY3NfdG9famlmZmllcyhjYXBzX2NoYXJnZSkpOwotCi0JLyogc2V0IHRoZSB1cGRhdGUgYml0cyAqLwotCXJlZyA9IHdtODc1M19yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzUzX0xEQUMpOwotCXdtODc1M193cml0ZShjb2RlYywgV004NzUzX0xEQUMsIHJlZyB8IDB4MDEwMCk7Ci0JcmVnID0gd204NzUzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3NTNfUkRBQyk7Ci0Jd204NzUzX3dyaXRlKGNvZGVjLCBXTTg3NTNfUkRBQywgcmVnIHwgMHgwMTAwKTsKLQlyZWcgPSB3bTg3NTNfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODc1M19MQURDKTsKLQl3bTg3NTNfd3JpdGUoY29kZWMsIFdNODc1M19MQURDLCByZWcgfCAweDAxMDApOwotCXJlZyA9IHdtODc1M19yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzUzX1JBREMpOwotCXdtODc1M193cml0ZShjb2RlYywgV004NzUzX1JBREMsIHJlZyB8IDB4MDEwMCk7Ci0JcmVnID0gd204NzUzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3NTNfTE9VVDFWKTsKLQl3bTg3NTNfd3JpdGUoY29kZWMsIFdNODc1M19MT1VUMVYsIHJlZyB8IDB4MDEwMCk7Ci0JcmVnID0gd204NzUzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3NTNfUk9VVDFWKTsKLQl3bTg3NTNfd3JpdGUoY29kZWMsIFdNODc1M19ST1VUMVYsIHJlZyB8IDB4MDEwMCk7Ci0JcmVnID0gd204NzUzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3NTNfTE9VVDJWKTsKLQl3bTg3NTNfd3JpdGUoY29kZWMsIFdNODc1M19MT1VUMlYsIHJlZyB8IDB4MDEwMCk7Ci0JcmVnID0gd204NzUzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3NTNfUk9VVDJWKTsKLQl3bTg3NTNfd3JpdGUoY29kZWMsIFdNODc1M19ST1VUMlYsIHJlZyB8IDB4MDEwMCk7Ci0JcmVnID0gd204NzUzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3NTNfTElOVk9MKTsKLQl3bTg3NTNfd3JpdGUoY29kZWMsIFdNODc1M19MSU5WT0wsIHJlZyB8IDB4MDEwMCk7Ci0JcmVnID0gd204NzUzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3NTNfUklOVk9MKTsKLQl3bTg3NTNfd3JpdGUoY29kZWMsIFdNODc1M19SSU5WT0wsIHJlZyB8IDB4MDEwMCk7Ci0KLQl3bTg3NTNfYWRkX2NvbnRyb2xzKGNvZGVjKTsKKwlzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgd204NzUzX3NuZF9jb250cm9scywKKwkJCSAgICAgQVJSQVlfU0laRSh3bTg3NTNfc25kX2NvbnRyb2xzKSk7CiAJd204NzUzX2FkZF93aWRnZXRzKGNvZGVjKTsKIAlyZXQgPSBzbmRfc29jX2luaXRfY2FyZChzb2NkZXYpOwogCWlmIChyZXQgPCAwKSB7CkBAIC0xNjE4LDIxNSArMTU4OCwxMyBAQAogCQlnb3RvIGNhcmRfZXJyOwogCX0KIAotCXJldHVybiByZXQ7CisJcmV0dXJuIDA7CiAKIGNhcmRfZXJyOgogCXNuZF9zb2NfZnJlZV9wY21zKHNvY2Rldik7CiAJc25kX3NvY19kYXBtX2ZyZWUoc29jZGV2KTsKKwogcGNtX2VycjoKLQlrZnJlZShjb2RlYy0+cmVnX2NhY2hlKTsKLQlyZXR1cm4gcmV0OwotfQotCi0vKiBJZiB0aGUgaTJjIGxheWVyIHdlcmVuJ3Qgc28gYnJva2VuLCB3ZSBjb3VsZCBwYXNzIHRoaXMga2luZCBvZiBkYXRhCi0gICBhcm91bmQgKi8KLXN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKndtODc1M19zb2NkZXY7Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19NT0RVTEUpCi0KLS8qCi0gKiBXTTg3NTMgMiB3aXJlIGFkZHJlc3MgaXMgZGV0ZXJtaW5lZCBieSBHUElPNQotICogc3RhdGUgZHVyaW5nIHBvd2VydXAuCi0gKiAgICBsb3cgID0gMHgxYQotICogICAgaGlnaCA9IDB4MWIKLSAqLwotCi1zdGF0aWMgaW50IHdtODc1M19pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmkyYywKLQkJCSAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCi17Ci0Jc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSB3bTg3NTNfc29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7Ci0JaW50IHJldDsKLQotCWkyY19zZXRfY2xpZW50ZGF0YShpMmMsIGNvZGVjKTsKLQljb2RlYy0+Y29udHJvbF9kYXRhID0gaTJjOwotCi0JcmV0ID0gd204NzUzX2luaXQoc29jZGV2KTsKLQlpZiAocmV0IDwgMCkKLQkJcHJfZXJyKCJmYWlsZWQgdG8gaW5pdGlhbGlzZSBXTTg3NTNcbiIpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCB3bTg3NTNfaTJjX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCWtmcmVlKGNvZGVjLT5yZWdfY2FjaGUpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgd204NzUzX2kyY19pZFtdID0gewotCXsgIndtODc1MyIsIDAgfSwKLQl7IH0KLX07Ci1NT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgd204NzUzX2kyY19pZCk7Ci0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB3bTg3NTNfaTJjX2RyaXZlciA9IHsKLQkuZHJpdmVyID0gewotCQkubmFtZSA9ICJXTTg3NTMgSTJDIENvZGVjIiwKLQkJLm93bmVyID0gVEhJU19NT0RVTEUsCi0JfSwKLQkucHJvYmUgPSAgICB3bTg3NTNfaTJjX3Byb2JlLAotCS5yZW1vdmUgPSAgIHdtODc1M19pMmNfcmVtb3ZlLAotCS5pZF90YWJsZSA9IHdtODc1M19pMmNfaWQsCi19OwotCi1zdGF0aWMgaW50IHdtODc1M19hZGRfaTJjX2RldmljZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAotCQkJCSBjb25zdCBzdHJ1Y3Qgd204NzUzX3NldHVwX2RhdGEgKnNldHVwKQotewotCXN0cnVjdCBpMmNfYm9hcmRfaW5mbyBpbmZvOwotCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcjsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OwotCWludCByZXQ7Ci0KLQlyZXQgPSBpMmNfYWRkX2RyaXZlcigmd204NzUzX2kyY19kcml2ZXIpOwotCWlmIChyZXQgIT0gMCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4ndCBhZGQgaTJjIGRyaXZlclxuIik7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JbWVtc2V0KCZpbmZvLCAwLCBzaXplb2Yoc3RydWN0IGkyY19ib2FyZF9pbmZvKSk7Ci0JaW5mby5hZGRyID0gc2V0dXAtPmkyY19hZGRyZXNzOwotCXN0cmxjcHkoaW5mby50eXBlLCAid204NzUzIiwgSTJDX05BTUVfU0laRSk7Ci0KLQlhZGFwdGVyID0gaTJjX2dldF9hZGFwdGVyKHNldHVwLT5pMmNfYnVzKTsKLQlpZiAoIWFkYXB0ZXIpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FuJ3QgZ2V0IGkyYyBhZGFwdGVyICVkXG4iLAotCQkJc2V0dXAtPmkyY19idXMpOwotCQlnb3RvIGVycl9kcml2ZXI7Ci0JfQotCi0JY2xpZW50ID0gaTJjX25ld19kZXZpY2UoYWRhcHRlciwgJmluZm8pOwotCWkyY19wdXRfYWRhcHRlcihhZGFwdGVyKTsKLQlpZiAoIWNsaWVudCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4ndCBhZGQgaTJjIGRldmljZSBhdCAweCV4XG4iLAotCQkJKHVuc2lnbmVkIGludClpbmZvLmFkZHIpOwotCQlnb3RvIGVycl9kcml2ZXI7Ci0JfQotCi0JcmV0dXJuIDA7Ci0KLWVycl9kcml2ZXI6Ci0JaTJjX2RlbF9kcml2ZXIoJndtODc1M19pMmNfZHJpdmVyKTsKLQlyZXR1cm4gLUVOT0RFVjsKLX0KLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfU1BJX01BU1RFUikKLXN0YXRpYyBpbnQgX19kZXZpbml0IHdtODc1M19zcGlfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKLXsKLQlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHdtODc1M19zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKLQlpbnQgcmV0OwotCi0JY29kZWMtPmNvbnRyb2xfZGF0YSA9IHNwaTsKLQotCXJldCA9IHdtODc1M19pbml0KHNvY2Rldik7Ci0JaWYgKHJldCA8IDApCi0JCWRldl9lcnIoJnNwaS0+ZGV2LCAiZmFpbGVkIHRvIGluaXRpYWxpc2UgV004NzUzXG4iKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgX19kZXZleGl0IHdtODc1M19zcGlfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciB3bTg3NTNfc3BpX2RyaXZlciA9IHsKLQkuZHJpdmVyID0gewotCQkubmFtZQk9ICJ3bTg3NTMiLAotCQkuYnVzCT0gJnNwaV9idXNfdHlwZSwKLQkJLm93bmVyCT0gVEhJU19NT0RVTEUsCi0JfSwKLQkucHJvYmUJCT0gd204NzUzX3NwaV9wcm9iZSwKLQkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHdtODc1M19zcGlfcmVtb3ZlKSwKLX07Ci0KLXN0YXRpYyBpbnQgd204NzUzX3NwaV93cml0ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBjb25zdCBjaGFyICpkYXRhLCBpbnQgbGVuKQotewotCXN0cnVjdCBzcGlfdHJhbnNmZXIgdDsKLQlzdHJ1Y3Qgc3BpX21lc3NhZ2UgbTsKLQl1OCBtc2dbMl07Ci0KLQlpZiAobGVuIDw9IDApCi0JCXJldHVybiAwOwotCi0JbXNnWzBdID0gZGF0YVswXTsKLQltc2dbMV0gPSBkYXRhWzFdOwotCi0Jc3BpX21lc3NhZ2VfaW5pdCgmbSk7Ci0JbWVtc2V0KCZ0LCAwLCAoc2l6ZW9mIHQpKTsKLQotCXQudHhfYnVmID0gJm1zZ1swXTsKLQl0LmxlbiA9IGxlbjsKLQotCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ0LCAmbSk7Ci0Jc3BpX3N5bmMoc3BpLCAmbSk7Ci0KLQlyZXR1cm4gbGVuOwotfQotI2VuZGlmCi0KLQotc3RhdGljIGludCB3bTg3NTNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKLXsKLQlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCB3bTg3NTNfc2V0dXBfZGF0YSAqc2V0dXA7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOwotCXN0cnVjdCB3bTg3NTNfcHJpdiAqd204NzUzOwotCWludCByZXQgPSAwOwotCi0JcHJfaW5mbygiV004NzUzIEF1ZGlvIENvZGVjICVzIiwgV004NzUzX1ZFUlNJT04pOwotCi0Jc2V0dXAgPSBzb2NkZXYtPmNvZGVjX2RhdGE7Ci0JY29kZWMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc25kX3NvY19jb2RlYyksIEdGUF9LRVJORUwpOwotCWlmIChjb2RlYyA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXdtODc1MyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB3bTg3NTNfcHJpdiksIEdGUF9LRVJORUwpOwotCWlmICh3bTg3NTMgPT0gTlVMTCkgewotCQlrZnJlZShjb2RlYyk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCWNvZGVjLT5wcml2YXRlX2RhdGEgPSB3bTg3NTM7Ci0Jc29jZGV2LT5jb2RlYyA9IGNvZGVjOwotCW11dGV4X2luaXQoJmNvZGVjLT5tdXRleCk7Ci0JSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3dpZGdldHMpOwotCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV9wYXRocyk7Ci0Jd204NzUzX3NvY2RldiA9IHNvY2RldjsKLQlJTklUX0RFTEFZRURfV09SSygmY29kZWMtPmRlbGF5ZWRfd29yaywgd204NzUzX3dvcmspOwotCi0jaWYgZGVmaW5lZChDT05GSUdfSTJDKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfTU9EVUxFKQotCWlmIChzZXR1cC0+aTJjX2FkZHJlc3MpIHsKLQkJY29kZWMtPmh3X3dyaXRlID0gKGh3X3dyaXRlX3QpaTJjX21hc3Rlcl9zZW5kOwotCQlyZXQgPSB3bTg3NTNfYWRkX2kyY19kZXZpY2UocGRldiwgc2V0dXApOwotCX0KLSNlbmRpZgotI2lmIGRlZmluZWQoQ09ORklHX1NQSV9NQVNURVIpCi0JaWYgKHNldHVwLT5zcGkpIHsKLQkJY29kZWMtPmh3X3dyaXRlID0gKGh3X3dyaXRlX3Qpd204NzUzX3NwaV93cml0ZTsKLQkJcmV0ID0gc3BpX3JlZ2lzdGVyX2RyaXZlcigmd204NzUzX3NwaV9kcml2ZXIpOwotCQlpZiAocmV0ICE9IDApCi0JCQlwcmludGsoS0VSTl9FUlIgImNhbid0IGFkZCBzcGkgZHJpdmVyIik7Ci0JfQotI2VuZGlmCi0KLQlpZiAocmV0ICE9IDApIHsKLQkJa2ZyZWUoY29kZWMtPnByaXZhdGVfZGF0YSk7Ci0JCWtmcmVlKGNvZGVjKTsKLQl9CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTg1MywyMiArMTYyMSw5IEBACiBzdGF0aWMgaW50IHdtODc1M19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CiAKLQlpZiAoY29kZWMtPmNvbnRyb2xfZGF0YSkKLQkJd204NzUzX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKLQlydW5fZGVsYXllZF93b3JrKCZjb2RlYy0+ZGVsYXllZF93b3JrKTsKIAlzbmRfc29jX2ZyZWVfcGNtcyhzb2NkZXYpOwogCXNuZF9zb2NfZGFwbV9mcmVlKHNvY2Rldik7Ci0jaWYgZGVmaW5lZChDT05GSUdfSTJDKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfTU9EVUxFKQotCWkyY191bnJlZ2lzdGVyX2RldmljZShjb2RlYy0+Y29udHJvbF9kYXRhKTsKLQlpMmNfZGVsX2RyaXZlcigmd204NzUzX2kyY19kcml2ZXIpOwotI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfU1BJX01BU1RFUikKLQlzcGlfdW5yZWdpc3Rlcl9kcml2ZXIoJndtODc1M19zcGlfZHJpdmVyKTsKLSNlbmRpZgotCWtmcmVlKGNvZGVjLT5wcml2YXRlX2RhdGEpOwotCWtmcmVlKGNvZGVjKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTg4MSwxNSArMTYzNiwyNDAgQEAKIH07CiBFWFBPUlRfU1lNQk9MX0dQTChzb2NfY29kZWNfZGV2X3dtODc1Myk7CiAKK3N0YXRpYyBpbnQgd204NzUzX3JlZ2lzdGVyKHN0cnVjdCB3bTg3NTNfcHJpdiAqd204NzUzKQoreworCWludCByZXQsIGk7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gJndtODc1My0+Y29kZWM7CisJdTE2IHJlZzsKKworCWlmICh3bTg3NTNfY29kZWMpIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiTXVsdGlwbGUgV004NzUzIGRldmljZXMgbm90IHN1cHBvcnRlZFxuIik7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyOworCX0KKworCW11dGV4X2luaXQoJmNvZGVjLT5tdXRleCk7CisJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3dpZGdldHMpOworCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV9wYXRocyk7CisKKwljb2RlYy0+bmFtZSA9ICJXTTg3NTMiOworCWNvZGVjLT5vd25lciA9IFRISVNfTU9EVUxFOworCWNvZGVjLT5yZWFkID0gd204NzUzX3JlYWRfcmVnX2NhY2hlOworCWNvZGVjLT53cml0ZSA9IHdtODc1M193cml0ZTsKKwljb2RlYy0+Ymlhc19sZXZlbCA9IFNORF9TT0NfQklBU19TVEFOREJZOworCWNvZGVjLT5zZXRfYmlhc19sZXZlbCA9IHdtODc1M19zZXRfYmlhc19sZXZlbDsKKwljb2RlYy0+ZGFpID0gd204NzUzX2RhaTsKKwljb2RlYy0+bnVtX2RhaSA9IDI7CisJY29kZWMtPnJlZ19jYWNoZV9zaXplID0gQVJSQVlfU0laRSh3bTg3NTMtPnJlZ19jYWNoZSk7CisJY29kZWMtPnJlZ19jYWNoZSA9ICZ3bTg3NTMtPnJlZ19jYWNoZTsKKwljb2RlYy0+cHJpdmF0ZV9kYXRhID0gd204NzUzOworCisJbWVtY3B5KGNvZGVjLT5yZWdfY2FjaGUsIHdtODc1M19yZWcsIHNpemVvZihjb2RlYy0+cmVnX2NhY2hlKSk7CisJSU5JVF9ERUxBWUVEX1dPUksoJmNvZGVjLT5kZWxheWVkX3dvcmssIHdtODc1M193b3JrKTsKKworCXJldCA9IHdtODc1M19yZXNldChjb2RlYyk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIGlzc3VlIHJlc2V0XG4iKTsKKwkJZ290byBlcnI7CisJfQorCisJLyogY2hhcmdlIG91dHB1dCBjYXBzICovCisJd204NzUzX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfUFJFUEFSRSk7CisJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZjb2RlYy0+ZGVsYXllZF93b3JrLAorCQkJICAgICAgbXNlY3NfdG9famlmZmllcyhjYXBzX2NoYXJnZSkpOworCisJLyogc2V0IHRoZSB1cGRhdGUgYml0cyAqLworCXJlZyA9IHdtODc1M19yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzUzX0xEQUMpOworCXdtODc1M193cml0ZShjb2RlYywgV004NzUzX0xEQUMsIHJlZyB8IDB4MDEwMCk7CisJcmVnID0gd204NzUzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3NTNfUkRBQyk7CisJd204NzUzX3dyaXRlKGNvZGVjLCBXTTg3NTNfUkRBQywgcmVnIHwgMHgwMTAwKTsKKwlyZWcgPSB3bTg3NTNfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODc1M19MQURDKTsKKwl3bTg3NTNfd3JpdGUoY29kZWMsIFdNODc1M19MQURDLCByZWcgfCAweDAxMDApOworCXJlZyA9IHdtODc1M19yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzUzX1JBREMpOworCXdtODc1M193cml0ZShjb2RlYywgV004NzUzX1JBREMsIHJlZyB8IDB4MDEwMCk7CisJcmVnID0gd204NzUzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3NTNfTE9VVDFWKTsKKwl3bTg3NTNfd3JpdGUoY29kZWMsIFdNODc1M19MT1VUMVYsIHJlZyB8IDB4MDEwMCk7CisJcmVnID0gd204NzUzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3NTNfUk9VVDFWKTsKKwl3bTg3NTNfd3JpdGUoY29kZWMsIFdNODc1M19ST1VUMVYsIHJlZyB8IDB4MDEwMCk7CisJcmVnID0gd204NzUzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3NTNfTE9VVDJWKTsKKwl3bTg3NTNfd3JpdGUoY29kZWMsIFdNODc1M19MT1VUMlYsIHJlZyB8IDB4MDEwMCk7CisJcmVnID0gd204NzUzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3NTNfUk9VVDJWKTsKKwl3bTg3NTNfd3JpdGUoY29kZWMsIFdNODc1M19ST1VUMlYsIHJlZyB8IDB4MDEwMCk7CisJcmVnID0gd204NzUzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3NTNfTElOVk9MKTsKKwl3bTg3NTNfd3JpdGUoY29kZWMsIFdNODc1M19MSU5WT0wsIHJlZyB8IDB4MDEwMCk7CisJcmVnID0gd204NzUzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3NTNfUklOVk9MKTsKKwl3bTg3NTNfd3JpdGUoY29kZWMsIFdNODc1M19SSU5WT0wsIHJlZyB8IDB4MDEwMCk7CisKKwl3bTg3NTNfY29kZWMgPSBjb2RlYzsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtODc1M19kYWkpOyBpKyspCisJCXdtODc1M19kYWlbaV0uZGV2ID0gY29kZWMtPmRldjsKKworCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfY29kZWMoY29kZWMpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgY29kZWM6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycjsKKwl9CisKKwlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2RhaXMoJndtODc1M19kYWlbMF0sIEFSUkFZX1NJWkUod204NzUzX2RhaSkpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgREFJczogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX2NvZGVjOworCX0KKworCXJldHVybiAwOworCitlcnJfY29kZWM6CisJcnVuX2RlbGF5ZWRfd29yaygmY29kZWMtPmRlbGF5ZWRfd29yayk7CisJc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKGNvZGVjKTsKK2VycjoKKwlrZnJlZSh3bTg3NTMpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHdtODc1M191bnJlZ2lzdGVyKHN0cnVjdCB3bTg3NTNfcHJpdiAqd204NzUzKQoreworCXdtODc1M19zZXRfYmlhc19sZXZlbCgmd204NzUzLT5jb2RlYywgU05EX1NPQ19CSUFTX09GRik7CisJcnVuX2RlbGF5ZWRfd29yaygmd204NzUzLT5jb2RlYy5kZWxheWVkX3dvcmspOworCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWlzKCZ3bTg3NTNfZGFpWzBdLCBBUlJBWV9TSVpFKHdtODc1M19kYWkpKTsKKwlzbmRfc29jX3VucmVnaXN0ZXJfY29kZWMoJndtODc1My0+Y29kZWMpOworCWtmcmVlKHdtODc1Myk7CisJd204NzUzX2NvZGVjID0gTlVMTDsKK30KKworI2lmIGRlZmluZWQoQ09ORklHX0kyQykgfHwgZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkKKworc3RhdGljIGludCB3bTg3NTNfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICppMmMsCisJCQkgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKKwlzdHJ1Y3Qgd204NzUzX3ByaXYgKndtODc1MzsKKworCXdtODc1MyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB3bTg3NTNfcHJpdiksIEdGUF9LRVJORUwpOworCWlmICh3bTg3NTMgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKyAgICAgICAgY29kZWMgPSAmd204NzUzLT5jb2RlYzsKKyAgICAgICAgY29kZWMtPmh3X3dyaXRlID0gKGh3X3dyaXRlX3QpaTJjX21hc3Rlcl9zZW5kOworICAgICAgICBjb2RlYy0+Y29udHJvbF9kYXRhID0gaTJjOworICAgICAgICBpMmNfc2V0X2NsaWVudGRhdGEoaTJjLCB3bTg3NTMpOworCisgICAgICAgIGNvZGVjLT5kZXYgPSAmaTJjLT5kZXY7CisKKwlyZXR1cm4gd204NzUzX3JlZ2lzdGVyKHdtODc1Myk7Cit9CisKK3N0YXRpYyBpbnQgd204NzUzX2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKyAgICAgICAgc3RydWN0IHdtODc1M19wcml2ICp3bTg3NTMgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKyAgICAgICAgd204NzUzX3VucmVnaXN0ZXIod204NzUzKTsKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCB3bTg3NTNfaTJjX2lkW10gPSB7CisJeyAid204NzUzIiwgMCB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCB3bTg3NTNfaTJjX2lkKTsKKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHdtODc1M19pMmNfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gIndtODc1MyIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlID0gICAgd204NzUzX2kyY19wcm9iZSwKKwkucmVtb3ZlID0gICB3bTg3NTNfaTJjX3JlbW92ZSwKKwkuaWRfdGFibGUgPSB3bTg3NTNfaTJjX2lkLAorfTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfU1BJX01BU1RFUikKK3N0YXRpYyBpbnQgd204NzUzX3NwaV93cml0ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBjb25zdCBjaGFyICpkYXRhLCBpbnQgbGVuKQoreworCXN0cnVjdCBzcGlfdHJhbnNmZXIgdDsKKwlzdHJ1Y3Qgc3BpX21lc3NhZ2UgbTsKKwl1OCBtc2dbMl07CisKKwlpZiAobGVuIDw9IDApCisJCXJldHVybiAwOworCisJbXNnWzBdID0gZGF0YVswXTsKKwltc2dbMV0gPSBkYXRhWzFdOworCisJc3BpX21lc3NhZ2VfaW5pdCgmbSk7CisJbWVtc2V0KCZ0LCAwLCAoc2l6ZW9mIHQpKTsKKworCXQudHhfYnVmID0gJm1zZ1swXTsKKwl0LmxlbiA9IGxlbjsKKworCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ0LCAmbSk7CisJc3BpX3N5bmMoc3BpLCAmbSk7CisKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCB3bTg3NTNfc3BpX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOworCXN0cnVjdCB3bTg3NTNfcHJpdiAqd204NzUzOworCisJd204NzUzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHdtODc1M19wcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKHdtODc1MyA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNvZGVjID0gJndtODc1My0+Y29kZWM7CisJY29kZWMtPmNvbnRyb2xfZGF0YSA9IHNwaTsKKwljb2RlYy0+aHdfd3JpdGUgPSAoaHdfd3JpdGVfdCl3bTg3NTNfc3BpX3dyaXRlOworCWNvZGVjLT5kZXYgPSAmc3BpLT5kZXY7CisKKwlzcGktPmRldi5kcml2ZXJfZGF0YSA9IHdtODc1MzsKKworCXJldHVybiB3bTg3NTNfcmVnaXN0ZXIod204NzUzKTsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgd204NzUzX3NwaV9yZW1vdmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlzdHJ1Y3Qgd204NzUzX3ByaXYgKndtODc1MyA9IHNwaS0+ZGV2LmRyaXZlcl9kYXRhOworCXdtODc1M191bnJlZ2lzdGVyKHdtODc1Myk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciB3bTg3NTNfc3BpX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQk9ICJ3bTg3NTMiLAorCQkuYnVzCT0gJnNwaV9idXNfdHlwZSwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUJCT0gd204NzUzX3NwaV9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHdtODc1M19zcGlfcmVtb3ZlKSwKK307CisjZW5kaWYKKwogc3RhdGljIGludCBfX2luaXQgd204NzUzX21vZGluaXQodm9pZCkKIHsKLQlyZXR1cm4gc25kX3NvY19yZWdpc3Rlcl9kYWlzKHdtODc1M19kYWksIEFSUkFZX1NJWkUod204NzUzX2RhaSkpOworCWludCByZXQ7CisjaWYgZGVmaW5lZChDT05GSUdfSTJDKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfTU9EVUxFKQorCXJldCA9IGkyY19hZGRfZHJpdmVyKCZ3bTg3NTNfaTJjX2RyaXZlcik7CisJaWYgKHJldCAhPSAwKQorCQlwcl9lcnIoIkZhaWxlZCB0byByZWdpc3RlciBXTTg3NTMgSTJDIGRyaXZlcjogJWRcbiIsIHJldCk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19TUElfTUFTVEVSKQorCXJldCA9IHNwaV9yZWdpc3Rlcl9kcml2ZXIoJndtODc1M19zcGlfZHJpdmVyKTsKKwlpZiAocmV0ICE9IDApCisJCXByX2VycigiRmFpbGVkIHRvIHJlZ2lzdGVyIFdNODc1MyBTUEkgZHJpdmVyOiAlZFxuIiwgcmV0KTsKKyNlbmRpZgorCXJldHVybiAwOwogfQogbW9kdWxlX2luaXQod204NzUzX21vZGluaXQpOwogCiBzdGF0aWMgdm9pZCBfX2V4aXQgd204NzUzX2V4aXQodm9pZCkKIHsKLQlzbmRfc29jX3VucmVnaXN0ZXJfZGFpcyh3bTg3NTNfZGFpLCBBUlJBWV9TSVpFKHdtODc1M19kYWkpKTsKKyNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19NT0RVTEUpCisJaTJjX2RlbF9kcml2ZXIoJndtODc1M19pMmNfZHJpdmVyKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX1NQSV9NQVNURVIpCisJc3BpX3VucmVnaXN0ZXJfZHJpdmVyKCZ3bTg3NTNfc3BpX2RyaXZlcik7CisjZW5kaWYKIH0KIG1vZHVsZV9leGl0KHdtODc1M19leGl0KTsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg3NTMuaCBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NzUzLmgKaW5kZXggZjU1NzA0Yy4uNTdiMmJhMiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg3NTMuaAorKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODc1My5oCkBAIC03NywxMiArNzcsNiBAQAogI2RlZmluZSBXTTg3NTNfQklBU0NUTAkJMHgzZAogI2RlZmluZSBXTTg3NTNfQURDVEwyCQkweDNmCiAKLXN0cnVjdCB3bTg3NTNfc2V0dXBfZGF0YSB7Ci0JaW50IHNwaTsKLQlpbnQgaTJjX2J1czsKLQl1bnNpZ25lZCBzaG9ydCBpMmNfYWRkcmVzczsKLX07Ci0KICNkZWZpbmUgV004NzUzX1BMTDEJCQkwCiAjZGVmaW5lIFdNODc1M19QTEwyCQkJMQogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODkwMC5jIGIvc291bmQvc29jL2NvZGVjcy93bTg5MDAuYwppbmRleCA2NzY3ZGUxLi40NmM1ZWExIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODkwMC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTAwLmMKQEAgLTUxNywyMiArNTE3LDYgQEAKIAogfTsKIAotLyogYWRkIG5vbiBkYXBtIGNvbnRyb2xzICovCi1zdGF0aWMgaW50IHdtODkwMF9hZGRfY29udHJvbHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQotewotCWludCBlcnIsIGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTg5MDBfc25kX2NvbnRyb2xzKTsgaSsrKSB7Ci0JCWVyciA9IHNuZF9jdGxfYWRkKGNvZGVjLT5jYXJkLAotCQkJCSAgc25kX3NvY19jbmV3KCZ3bTg5MDBfc25kX2NvbnRyb2xzW2ldLAotCQkJCQkgICAgICAgY29kZWMsIE5VTEwpKTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwotCX0KLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204OTAwX2RhcG1fbG91dHB1dDJfY29udHJvbCA9CiBTT0NfREFQTV9TSU5HTEUoIkxJTkVPVVQyTCBTd2l0Y2giLCBXTTg5MDBfUkVHX1BPV0VSMywgNiwgMSwgMCk7CiAKQEAgLTczNiw3ICs3MjAsNyBAQAogewogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHJ0ZC0+c29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAl1MTYgcmVnOwogCiAJcmVnID0gd204OTAwX3JlYWQoY29kZWMsIFdNODkwMF9SRUdfQVVESU8xKSAmIH4weDYwOwpAQCAtMTEwNCw2ICsxMDg4LDE0IEBACiAJKFNORFJWX1BDTV9GT1JNQVRfUzE2X0xFIHwgU05EUlZfUENNX0ZPUk1BVF9TMjBfM0xFIHwgXAogCSBTTkRSVl9QQ01fRk9STUFUX1MyNF9MRSkKIAorc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgd204OTAwX2RhaV9vcHMgPSB7CisJLmh3X3BhcmFtcwk9IHdtODkwMF9od19wYXJhbXMsCisJLnNldF9jbGtkaXYJPSB3bTg5MDBfc2V0X2RhaV9jbGtkaXYsCisJLnNldF9wbGwJPSB3bTg5MDBfc2V0X2RhaV9wbGwsCisJLnNldF9mbXQJPSB3bTg5MDBfc2V0X2RhaV9mbXQsCisJLmRpZ2l0YWxfbXV0ZQk9IHdtODkwMF9kaWdpdGFsX211dGUsCit9OworCiBzdHJ1Y3Qgc25kX3NvY19kYWkgd204OTAwX2RhaSA9IHsKIAkubmFtZSA9ICJXTTg5MDAgSGlGaSIsCiAJLnBsYXliYWNrID0gewpAQCAtMTEyMCwxMyArMTExMiw3IEBACiAJCS5yYXRlcyA9IFdNODkwMF9SQVRFUywKIAkJLmZvcm1hdHMgPSBXTTg5MDBfUENNX0ZPUk1BVFMsCiAJIH0sCi0JLm9wcyA9IHsKLQkJLmh3X3BhcmFtcyA9IHdtODkwMF9od19wYXJhbXMsCi0JCSAuc2V0X2Nsa2RpdiA9IHdtODkwMF9zZXRfZGFpX2Nsa2RpdiwKLQkJIC5zZXRfcGxsID0gd204OTAwX3NldF9kYWlfcGxsLAotCQkgLnNldF9mbXQgPSB3bTg5MDBfc2V0X2RhaV9mbXQsCi0JCSAuZGlnaXRhbF9tdXRlID0gd204OTAwX2RpZ2l0YWxfbXV0ZSwKLQkgfSwKKwkub3BzID0gJndtODkwMF9kYWlfb3BzLAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKHdtODkwMF9kYWkpOwogCkBAIC0xMjI2LDcgKzEyMTIsNyBAQAogc3RhdGljIGludCB3bTg5MDBfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJc3RydWN0IHdtODkwMF9wcml2ICp3bTg5MDAgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOwogCWludCBmbGxfb3V0ID0gd204OTAwLT5mbGxfb3V0OwogCWludCBmbGxfaW4gID0gd204OTAwLT5mbGxfaW47CkBAIC0xMjUwLDcgKzEyMzYsNyBAQAogc3RhdGljIGludCB3bTg5MDBfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJc3RydWN0IHdtODkwMF9wcml2ICp3bTg5MDAgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOwogCXUxNiAqY2FjaGU7CiAJaW50IGksIHJldDsKQEAgLTEyODgsOCArMTI3NCw4IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqd204OTAwX2NvZGVjOwogCi1zdGF0aWMgaW50IHdtODkwMF9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmkyYywKLQkJCSAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCitzdGF0aWMgX19kZXZpbml0IGludCB3bTg5MDBfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICppMmMsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewogCXN0cnVjdCB3bTg5MDBfcHJpdiAqd204OTAwOwogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKQEAgLTEzODgsNyArMTM3NCw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCB3bTg5MDBfaTJjX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQorc3RhdGljIF9fZGV2ZXhpdCBpbnQgd204OTAwX2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKIAlzbmRfc29jX3VucmVnaXN0ZXJfZGFpKCZ3bTg5MDBfZGFpKTsKIAlzbmRfc29jX3VucmVnaXN0ZXJfY29kZWMod204OTAwX2NvZGVjKTsKQEAgLTE0MTQsNyArMTQwMCw3IEBACiAJCS5vd25lciA9IFRISVNfTU9EVUxFLAogCX0sCiAJLnByb2JlID0gd204OTAwX2kyY19wcm9iZSwKLQkucmVtb3ZlID0gd204OTAwX2kyY19yZW1vdmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHdtODkwMF9pMmNfcmVtb3ZlKSwKIAkuaWRfdGFibGUgPSB3bTg5MDBfaTJjX2lkLAogfTsKIApAQCAtMTQzMCw3ICsxNDE2LDcgQEAKIAl9CiAKIAljb2RlYyA9IHdtODkwMF9jb2RlYzsKLQlzb2NkZXYtPmNvZGVjID0gY29kZWM7CisJc29jZGV2LT5jYXJkLT5jb2RlYyA9IGNvZGVjOwogCiAJLyogUmVnaXN0ZXIgcGNtcyAqLwogCXJldCA9IHNuZF9zb2NfbmV3X3BjbXMoc29jZGV2LCBTTkRSVl9ERUZBVUxUX0lEWDEsIFNORFJWX0RFRkFVTFRfU1RSMSk7CkBAIC0xNDM5LDcgKzE0MjUsOCBAQAogCQlnb3RvIHBjbV9lcnI7CiAJfQogCi0Jd204OTAwX2FkZF9jb250cm9scyhjb2RlYyk7CisJc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHdtODkwMF9zbmRfY29udHJvbHMsCisJCQkJQVJSQVlfU0laRSh3bTg5MDBfc25kX2NvbnRyb2xzKSk7CiAJd204OTAwX2FkZF93aWRnZXRzKGNvZGVjKTsKIAogCXJldCA9IHNuZF9zb2NfaW5pdF9jYXJkKHNvY2Rldik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODkwMy5jIGIvc291bmQvc29jL2NvZGVjcy93bTg5MDMuYwppbmRleCBiZGU3NDU0Li44Y2Y1NzFmIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODkwMy5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTAzLmMKQEAgLTc0NCwyMSArNzQ0LDYgQEAKIAkJIDAsIDYzLCAwLCBvdXRfdGx2KSwKIH07CiAKLXN0YXRpYyBpbnQgd204OTAzX2FkZF9jb250cm9scyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCi17Ci0JaW50IGVyciwgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtODkwM19zbmRfY29udHJvbHMpOyBpKyspIHsKLQkJZXJyID0gc25kX2N0bF9hZGQoY29kZWMtPmNhcmQsCi0JCQkJICBzbmRfc29jX2NuZXcoJndtODkwM19zbmRfY29udHJvbHNbaV0sCi0JCQkJCSAgICAgICBjb2RlYywgTlVMTCkpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBsaW5wdXRfbW9kZV9tdXggPQogCVNPQ19EQVBNX0VOVU0oIkxlZnQgSW5wdXQgTW9kZSBNdXgiLCBsaW5wdXRfbW9kZV9lbnVtKTsKIApAQCAtMTI3Niw3ICsxMjYxLDcgQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJc3RydWN0IHdtODkwM19wcml2ICp3bTg5MDMgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBpMmNfY2xpZW50ICppMmMgPSBjb2RlYy0+Y29udHJvbF9kYXRhOwogCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKm1hc3Rlcl9ydW50aW1lOwpAQCAtMTMxOCw3ICsxMzAzLDcgQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJc3RydWN0IHdtODkwM19wcml2ICp3bTg5MDMgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOwogCiAJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCkBAIC0xMzM4LDcgKzEzMjMsNyBAQAogewogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHJ0ZC0+c29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlzdHJ1Y3Qgd204OTAzX3ByaXYgKndtODkwMyA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGkyY19jbGllbnQgKmkyYyA9IGNvZGVjLT5jb250cm9sX2RhdGE7CiAJaW50IGZzID0gcGFyYW1zX3JhdGUocGFyYW1zKTsKQEAgLTE1MTIsNiArMTQ5NywxNSBAQAogCQkJU05EUlZfUENNX0ZNVEJJVF9TMjBfM0xFIHxcCiAJCQlTTkRSVl9QQ01fRk1UQklUX1MyNF9MRSkKIAorc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgd204OTAzX2RhaV9vcHMgPSB7CisJLnN0YXJ0dXAJPSB3bTg5MDNfc3RhcnR1cCwKKwkuc2h1dGRvd24JPSB3bTg5MDNfc2h1dGRvd24sCisJLmh3X3BhcmFtcwk9IHdtODkwM19od19wYXJhbXMsCisJLmRpZ2l0YWxfbXV0ZQk9IHdtODkwM19kaWdpdGFsX211dGUsCisJLnNldF9mbXQJPSB3bTg5MDNfc2V0X2RhaV9mbXQsCisJLnNldF9zeXNjbGsJPSB3bTg5MDNfc2V0X2RhaV9zeXNjbGssCit9OworCiBzdHJ1Y3Qgc25kX3NvY19kYWkgd204OTAzX2RhaSA9IHsKIAkubmFtZSA9ICJXTTg5MDMiLAogCS5wbGF5YmFjayA9IHsKQEAgLTE1MjgsMjEgKzE1MjIsMTQgQEAKIAkJIC5yYXRlcyA9IFdNODkwM19DQVBUVVJFX1JBVEVTLAogCQkgLmZvcm1hdHMgPSBXTTg5MDNfRk9STUFUUywKIAkgfSwKLQkub3BzID0gewotCQkgLnN0YXJ0dXAgPSB3bTg5MDNfc3RhcnR1cCwKLQkJIC5zaHV0ZG93biA9IHdtODkwM19zaHV0ZG93biwKLQkJIC5od19wYXJhbXMgPSB3bTg5MDNfaHdfcGFyYW1zLAotCQkgLmRpZ2l0YWxfbXV0ZSA9IHdtODkwM19kaWdpdGFsX211dGUsCi0JCSAuc2V0X2ZtdCA9IHdtODkwM19zZXRfZGFpX2ZtdCwKLQkJIC5zZXRfc3lzY2xrID0gd204OTAzX3NldF9kYWlfc3lzY2xrCi0JfQorCS5vcHMgPSAmd204OTAzX2RhaV9vcHMsCiB9OwogRVhQT1JUX1NZTUJPTF9HUEwod204OTAzX2RhaSk7CiAKIHN0YXRpYyBpbnQgd204OTAzX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJd204OTAzX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKIApAQCAtMTU1Miw3ICsxNTM5LDcgQEAKIHN0YXRpYyBpbnQgd204OTAzX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCXN0cnVjdCBpMmNfY2xpZW50ICppMmMgPSBjb2RlYy0+Y29udHJvbF9kYXRhOwogCWludCBpOwogCXUxNiAqcmVnX2NhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKQEAgLTE1NzcsOCArMTU2NCw4IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqd204OTAzX2NvZGVjOwogCi1zdGF0aWMgaW50IHdtODkwM19pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmkyYywKLQkJCSAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCitzdGF0aWMgX19kZXZpbml0IGludCB3bTg5MDNfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICppMmMsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewogCXN0cnVjdCB3bTg5MDNfcHJpdiAqd204OTAzOwogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKQEAgLTE2ODQsNyArMTY3MSw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCB3bTg5MDNfaTJjX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQorc3RhdGljIF9fZGV2ZXhpdCBpbnQgd204OTAzX2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIApAQCAtMTcxNCw3ICsxNzAxLDcgQEAKIAkJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJfSwKIAkucHJvYmUgICAgPSB3bTg5MDNfaTJjX3Byb2JlLAotCS5yZW1vdmUgICA9IHdtODkwM19pMmNfcmVtb3ZlLAorCS5yZW1vdmUgICA9IF9fZGV2ZXhpdF9wKHdtODkwM19pMmNfcmVtb3ZlKSwKIAkuaWRfdGFibGUgPSB3bTg5MDNfaTJjX2lkLAogfTsKIApAQCAtMTcyOCw3ICsxNzE1LDcgQEAKIAkJZ290byBlcnI7CiAJfQogCi0Jc29jZGV2LT5jb2RlYyA9IHdtODkwM19jb2RlYzsKKwlzb2NkZXYtPmNhcmQtPmNvZGVjID0gd204OTAzX2NvZGVjOwogCiAJLyogcmVnaXN0ZXIgcGNtcyAqLwogCXJldCA9IHNuZF9zb2NfbmV3X3BjbXMoc29jZGV2LCBTTkRSVl9ERUZBVUxUX0lEWDEsIFNORFJWX0RFRkFVTFRfU1RSMSk7CkBAIC0xNzM3LDggKzE3MjQsOSBAQAogCQlnb3RvIGVycjsKIAl9CiAKLQl3bTg5MDNfYWRkX2NvbnRyb2xzKHNvY2Rldi0+Y29kZWMpOwotCXdtODkwM19hZGRfd2lkZ2V0cyhzb2NkZXYtPmNvZGVjKTsKKwlzbmRfc29jX2FkZF9jb250cm9scyhzb2NkZXYtPmNhcmQtPmNvZGVjLCB3bTg5MDNfc25kX2NvbnRyb2xzLAorCQkJCUFSUkFZX1NJWkUod204OTAzX3NuZF9jb250cm9scykpOworCXdtODkwM19hZGRfd2lkZ2V0cyhzb2NkZXYtPmNhcmQtPmNvZGVjKTsKIAogCXJldCA9IHNuZF9zb2NfaW5pdF9jYXJkKHNvY2Rldik7CiAJaWYgKHJldCA8IDApIHsKQEAgLTE3NTksNyArMTc0Nyw3IEBACiBzdGF0aWMgaW50IHdtODkwM19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCWlmIChjb2RlYy0+Y29udHJvbF9kYXRhKQogCQl3bTg5MDNfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5NzEuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTcxLmMKaW5kZXggODhlYWQ3Zi4uMDMyZGNhMiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg5NzEuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk3MS5jCkBAIC0xOTUsMjEgKzE5NSw2IEBACiAJU09DX0RPVUJMRV9SKCJNaWMgQm9vc3QiLCBXTTg5NzFfTEFEQ0lOLCBXTTg5NzFfUkFEQ0lOLCA0LCAzLCAwKSwKIH07CiAKLS8qIGFkZCBub24tREFQTSBjb250cm9scyAqLwotc3RhdGljIGludCB3bTg5NzFfYWRkX2NvbnRyb2xzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKLXsKLQlpbnQgZXJyLCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod204OTcxX3NuZF9jb250cm9scyk7IGkrKykgewotCQllcnIgPSBzbmRfY3RsX2FkZChjb2RlYy0+Y2FyZCwKLQkJCQlzbmRfc29jX2NuZXcoJndtODk3MV9zbmRfY29udHJvbHNbaV0sCi0JCQkJCSAgICAgY29kZWMsIE5VTEwpKTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwotCX0KLQlyZXR1cm4gMDsKLX0KLQogLyoKICAqIERBUE0gQ29udHJvbHMKICAqLwpAQCAtNTQ2LDcgKzUzMSw3IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCXN0cnVjdCB3bTg5NzFfcHJpdiAqd204OTcxID0gY29kZWMtPnByaXZhdGVfZGF0YTsKIAl1MTYgaWZhY2UgPSB3bTg5NzFfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODk3MV9JRkFDRSkgJiAweDFmMzsKIAl1MTYgc3JhdGUgPSB3bTg5NzFfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODk3MV9TUkFURSkgJiAweDFjMDsKQEAgLTYxOSw2ICs2MDQsMTMgQEAKICNkZWZpbmUgV004OTcxX0ZPUk1BVFMgKFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwgU05EUlZfUENNX0ZNVEJJVF9TMjBfM0xFIHxcCiAJU05EUlZfUENNX0ZNVEJJVF9TMjRfTEUpCiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHdtODk3MV9kYWlfb3BzID0geworCS5od19wYXJhbXMJPSB3bTg5NzFfcGNtX2h3X3BhcmFtcywKKwkuZGlnaXRhbF9tdXRlCT0gd204OTcxX211dGUsCisJLnNldF9mbXQJPSB3bTg5NzFfc2V0X2RhaV9mbXQsCisJLnNldF9zeXNjbGsJPSB3bTg5NzFfc2V0X2RhaV9zeXNjbGssCit9OworCiBzdHJ1Y3Qgc25kX3NvY19kYWkgd204OTcxX2RhaSA9IHsKIAkubmFtZSA9ICJXTTg5NzEiLAogCS5wbGF5YmFjayA9IHsKQEAgLTYzMywxMiArNjI1LDcgQEAKIAkJLmNoYW5uZWxzX21heCA9IDIsCiAJCS5yYXRlcyA9IFdNODk3MV9SQVRFUywKIAkJLmZvcm1hdHMgPSBXTTg5NzFfRk9STUFUUyx9LAotCS5vcHMgPSB7Ci0JCS5od19wYXJhbXMgPSB3bTg5NzFfcGNtX2h3X3BhcmFtcywKLQkJLmRpZ2l0YWxfbXV0ZSA9IHdtODk3MV9tdXRlLAotCQkuc2V0X2ZtdCA9IHdtODk3MV9zZXRfZGFpX2ZtdCwKLQkJLnNldF9zeXNjbGsgPSB3bTg5NzFfc2V0X2RhaV9zeXNjbGssCi0JfSwKKwkub3BzID0gJndtODk3MV9kYWlfb3BzLAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKHdtODk3MV9kYWkpOwogCkBAIC02NTIsNyArNjM5LDcgQEAKIHN0YXRpYyBpbnQgd204OTcxX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJd204OTcxX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKIAlyZXR1cm4gMDsKQEAgLTY2MSw3ICs2NDgsNyBAQAogc3RhdGljIGludCB3bTg5NzFfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJaW50IGk7CiAJdTggZGF0YVsyXTsKIAl1MTYgKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKQEAgLTY5Miw3ICs2NzksNyBAQAogCiBzdGF0aWMgaW50IHdtODk3MV9pbml0KHN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2KQogewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlpbnQgcmVnLCByZXQgPSAwOwogCiAJY29kZWMtPm5hbWUgPSAiV004OTcxIjsKQEAgLTc0NSw3ICs3MzIsOCBAQAogCXJlZyA9IHdtODk3MV9yZWFkX3JlZ19jYWNoZShjb2RlYywgV004OTcxX1JJTlZPTCk7CiAJd204OTcxX3dyaXRlKGNvZGVjLCBXTTg5NzFfUklOVk9MLCByZWcgfCAweDAxMDApOwogCi0Jd204OTcxX2FkZF9jb250cm9scyhjb2RlYyk7CisJc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHdtODk3MV9zbmRfY29udHJvbHMsCisJCQkJQVJSQVlfU0laRSh3bTg5NzFfc25kX2NvbnRyb2xzKSk7CiAJd204OTcxX2FkZF93aWRnZXRzKGNvZGVjKTsKIAlyZXQgPSBzbmRfc29jX2luaXRfY2FyZChzb2NkZXYpOwogCWlmIChyZXQgPCAwKSB7CkBAIC03NzIsNyArNzYwLDcgQEAKIAkJCSAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSB3bTg5NzFfc29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlpbnQgcmV0OwogCiAJaTJjX3NldF9jbGllbnRkYXRhKGkyYywgY29kZWMpOwpAQCAtODczLDcgKzg2MSw3IEBACiAJfQogCiAJY29kZWMtPnByaXZhdGVfZGF0YSA9IHdtODk3MTsKLQlzb2NkZXYtPmNvZGVjID0gY29kZWM7CisJc29jZGV2LT5jYXJkLT5jb2RlYyA9IGNvZGVjOwogCW11dGV4X2luaXQoJmNvZGVjLT5tdXRleCk7CiAJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3dpZGdldHMpOwogCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV9wYXRocyk7CkBAIC05MDgsNyArODk2LDcgQEAKIHN0YXRpYyBpbnQgd204OTcxX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJaWYgKGNvZGVjLT5jb250cm9sX2RhdGEpCiAJCXdtODk3MV9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODk5MC5jIGIvc291bmQvc29jL2NvZGVjcy93bTg5OTAuYwppbmRleCBhNTczMWZhLi5jNTE4YzNlIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODk5MC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTkwLmMKQEAgLTExNSw3ICsxMTUsNyBAQAogCXVuc2lnbmVkIGludCByZWcpCiB7CiAJdTE2ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7Ci0JQlVHX09OKHJlZyA+IChBUlJBWV9TSVpFKHdtODk5MF9yZWcpKSAtIDEpOworCUJVR19PTihyZWcgPj0gQVJSQVlfU0laRSh3bTg5OTBfcmVnKSk7CiAJcmV0dXJuIGNhY2hlW3JlZ107CiB9CiAKQEAgLTEyOCw3ICsxMjgsNyBAQAogCXUxNiAqY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOwogCiAJLyogUmVzZXQgcmVnaXN0ZXIgYW5kIHJlc2VydmVkIHJlZ2lzdGVycyBhcmUgdW5jYWNoZWQgKi8KLQlpZiAocmVnID09IDAgfHwgcmVnID4gQVJSQVlfU0laRSh3bTg5OTBfcmVnKSAtIDEpCisJaWYgKHJlZyA9PSAwIHx8IHJlZyA+PSBBUlJBWV9TSVpFKHdtODk5MF9yZWcpKQogCQlyZXR1cm47CiAKIAljYWNoZVtyZWddID0gdmFsdWU7CkBAIC00MTgsMjEgKzQxOCw2IEBACiAKIH07CiAKLS8qIGFkZCBub24gZGFwbSBjb250cm9scyAqLwotc3RhdGljIGludCB3bTg5OTBfYWRkX2NvbnRyb2xzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKLXsKLQlpbnQgZXJyLCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod204OTkwX3NuZF9jb250cm9scyk7IGkrKykgewotCQllcnIgPSBzbmRfY3RsX2FkZChjb2RlYy0+Y2FyZCwKLQkJCQlzbmRfc29jX2NuZXcoJndtODk5MF9zbmRfY29udHJvbHNbaV0sIGNvZGVjLAotCQkJCQlOVUxMKSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KIC8qCiAgKiBfREFQTV8gQ29udHJvbHMKICAqLwpAQCAtMTE3OCw3ICsxMTYzLDcgQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJdTE2IGF1ZGlvMSA9IHdtODk5MF9yZWFkX3JlZ19jYWNoZShjb2RlYywgV004OTkwX0FVRElPX0lOVEVSRkFDRV8xKTsKIAogCWF1ZGlvMSAmPSB+V004OTkwX0FJRl9XTF9NQVNLOwpAQCAtMTM0Nyw2ICsxMzMyLDE1IEBACiAgKiAxLiBBREMvREFDIG9uIFByaW1hcnkgSW50ZXJmYWNlCiAgKiAyLiBBREMgb24gUHJpbWFyeSBJbnRlcmZhY2UvREFDIG9uIHNlY29uZGFyeQogICovCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyB3bTg5OTBfZGFpX29wcyA9IHsKKwkuaHdfcGFyYW1zCT0gd204OTkwX2h3X3BhcmFtcywKKwkuZGlnaXRhbF9tdXRlCT0gd204OTkwX211dGUsCisJLnNldF9mbXQJPSB3bTg5OTBfc2V0X2RhaV9mbXQsCisJLnNldF9jbGtkaXYJPSB3bTg5OTBfc2V0X2RhaV9jbGtkaXYsCisJLnNldF9wbGwJPSB3bTg5OTBfc2V0X2RhaV9wbGwsCisJLnNldF9zeXNjbGsJPSB3bTg5OTBfc2V0X2RhaV9zeXNjbGssCit9OworCiBzdHJ1Y3Qgc25kX3NvY19kYWkgd204OTkwX2RhaSA9IHsKIC8qIEFEQy9EQUMgb24gcHJpbWFyeSAqLwogCS5uYW1lID0gIldNODk5MCBBREMvREFDIFByaW1hcnkiLApAQCAtMTM2MywyMSArMTM1NywxNCBAQAogCQkuY2hhbm5lbHNfbWF4ID0gMiwKIAkJLnJhdGVzID0gV004OTkwX1JBVEVTLAogCQkuZm9ybWF0cyA9IFdNODk5MF9GT1JNQVRTLH0sCi0JLm9wcyA9IHsKLQkJLmh3X3BhcmFtcyA9IHdtODk5MF9od19wYXJhbXMsCi0JCS5kaWdpdGFsX211dGUgPSB3bTg5OTBfbXV0ZSwKLQkJLnNldF9mbXQgPSB3bTg5OTBfc2V0X2RhaV9mbXQsCi0JCS5zZXRfY2xrZGl2ID0gd204OTkwX3NldF9kYWlfY2xrZGl2LAotCQkuc2V0X3BsbCA9IHdtODk5MF9zZXRfZGFpX3BsbCwKLQkJLnNldF9zeXNjbGsgPSB3bTg5OTBfc2V0X2RhaV9zeXNjbGssCi0JfSwKKwkub3BzID0gJndtODk5MF9kYWlfb3BzLAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKHdtODk5MF9kYWkpOwogCiBzdGF0aWMgaW50IHdtODk5MF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCS8qIHdlIG9ubHkgbmVlZCB0byBzdXNwZW5kIGlmIHdlIGFyZSBhIHZhbGlkIGNhcmQgKi8KIAlpZiAoIWNvZGVjLT5jYXJkKQpAQCAtMTM5MCw3ICsxMzc3LDcgQEAKIHN0YXRpYyBpbnQgd204OTkwX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCWludCBpOwogCXU4IGRhdGFbMl07CiAJdTE2ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CkBAIC0xNDE4LDcgKzE0MDUsNyBAQAogICovCiBzdGF0aWMgaW50IHdtODk5MF9pbml0KHN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2KQogewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAl1MTYgcmVnOwogCWludCByZXQgPSAwOwogCkBAIC0xNDYxLDcgKzE0NDgsOCBAQAogCXdtODk5MF93cml0ZShjb2RlYywgV004OTkwX0xFRlRfT1VUUFVUX1ZPTFVNRSwgMHg1MCB8ICgxPDw4KSk7CiAJd204OTkwX3dyaXRlKGNvZGVjLCBXTTg5OTBfUklHSFRfT1VUUFVUX1ZPTFVNRSwgMHg1MCB8ICgxPDw4KSk7CiAKLQl3bTg5OTBfYWRkX2NvbnRyb2xzKGNvZGVjKTsKKwlzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgd204OTkwX3NuZF9jb250cm9scywKKwkJCQlBUlJBWV9TSVpFKHdtODk5MF9zbmRfY29udHJvbHMpKTsKIAl3bTg5OTBfYWRkX3dpZGdldHMoY29kZWMpOwogCXJldCA9IHNuZF9zb2NfaW5pdF9jYXJkKHNvY2Rldik7CiAJaWYgKHJldCA8IDApIHsKQEAgLTE0OTUsNyArMTQ4Myw3IEBACiAJCQkgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gd204OTkwX3NvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJaW50IHJldDsKIAogCWkyY19zZXRfY2xpZW50ZGF0YShpMmMsIGNvZGVjKTsKQEAgLTE1OTQsNyArMTU4Miw3IEBACiAJfQogCiAJY29kZWMtPnByaXZhdGVfZGF0YSA9IHdtODk5MDsKLQlzb2NkZXYtPmNvZGVjID0gY29kZWM7CisJc29jZGV2LT5jYXJkLT5jb2RlYyA9IGNvZGVjOwogCW11dGV4X2luaXQoJmNvZGVjLT5tdXRleCk7CiAJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3dpZGdldHMpOwogCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV9wYXRocyk7CkBAIC0xNjIwLDcgKzE2MDgsNyBAQAogc3RhdGljIGludCB3bTg5OTBfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAlpZiAoY29kZWMtPmNvbnRyb2xfZGF0YSkKIAkJd204OTkwX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd205NzA1LmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtOTcwNS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyNjU4MTcKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtOTcwNS5jCkBAIC0wLDAgKzEsNDE1IEBACisvKgorICogd205NzA1LmMgIC0tICBBTFNBIFNvYyBXTTk3MDUgY29kZWMgc3VwcG9ydAorICoKKyAqIENvcHlyaWdodCAyMDA4IElhbiBNb2x0b24gPHNweXJvQGYycy5jb20+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgVmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSBvbmx5LgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9hYzk3X2NvZGVjLmg+CisjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CisKKyNpbmNsdWRlICJ3bTk3MDUuaCIKKworLyoKKyAqIFdNOTcwNSByZWdpc3RlciBjYWNoZQorICovCitzdGF0aWMgY29uc3QgdTE2IHdtOTcwNV9yZWdbXSA9IHsKKwkweDYxNTAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIC8qIDB4MCAgKi8KKwkweDAwMDAsIDB4ODAwMCwgMHg4MDA4LCAweDgwMDgsIC8qIDB4OCAgKi8KKwkweDg4MDgsIDB4ODgwOCwgMHg4ODA4LCAweDg4MDgsIC8qIDB4MTAgKi8KKwkweDg4MDgsIDB4MDAwMCwgMHg4MDAwLCAweDAwMDAsIC8qIDB4MTggKi8KKwkweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMGYsIC8qIDB4MjAgKi8KKwkweDA2MDUsIDB4MDAwMCwgMHhiYjgwLCAweDAwMDAsIC8qIDB4MjggKi8KKwkweDAwMDAsIDB4YmI4MCwgMHgwMDAwLCAweDAwMDAsIC8qIDB4MzAgKi8KKwkweDAwMDAsIDB4MjAwMCwgMHgwMDAwLCAweDAwMDAsIC8qIDB4MzggKi8KKwkweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIC8qIDB4NDAgKi8KKwkweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIC8qIDB4NDggKi8KKwkweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIC8qIDB4NTAgKi8KKwkweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIC8qIDB4NTggKi8KKwkweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIC8qIDB4NjAgKi8KKwkweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIC8qIDB4NjggKi8KKwkweDAwMDAsIDB4MDgwOCwgMHgwMDAwLCAweDAwMDYsIC8qIDB4NzAgKi8KKwkweDAwMDAsIDB4MDAwMCwgMHg1NzRkLCAweDRjMDUsIC8qIDB4NzggKi8KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTk3MDVfc25kX2FjOTdfY29udHJvbHNbXSA9IHsKKwlTT0NfRE9VQkxFKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwgQUM5N19NQVNURVIsIDgsIDAsIDMxLCAxKSwKKwlTT0NfU0lOR0xFKCJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwgQUM5N19NQVNURVIsIDE1LCAxLCAxKSwKKwlTT0NfRE9VQkxFKCJIZWFkcGhvbmUgUGxheWJhY2sgVm9sdW1lIiwgQUM5N19IRUFEUEhPTkUsIDgsIDAsIDMxLCAxKSwKKwlTT0NfU0lOR0xFKCJIZWFkcGhvbmUgUGxheWJhY2sgU3dpdGNoIiwgQUM5N19IRUFEUEhPTkUsIDE1LCAxLCAxKSwKKwlTT0NfRE9VQkxFKCJQQ00gUGxheWJhY2sgVm9sdW1lIiwgQUM5N19QQ00sIDgsIDAsIDMxLCAxKSwKKwlTT0NfU0lOR0xFKCJQQ00gUGxheWJhY2sgU3dpdGNoIiwgQUM5N19QQ00sIDE1LCAxLCAxKSwKKwlTT0NfU0lOR0xFKCJNb25vIFBsYXliYWNrIFZvbHVtZSIsIEFDOTdfTUFTVEVSX01PTk8sIDAsIDMxLCAxKSwKKwlTT0NfU0lOR0xFKCJNb25vIFBsYXliYWNrIFN3aXRjaCIsIEFDOTdfTUFTVEVSX01PTk8sIDE1LCAxLCAxKSwKKwlTT0NfU0lOR0xFKCJQQ0JlZXAgUGxheWJhY2sgVm9sdW1lIiwgQUM5N19QQ19CRUVQLCAxLCAxNSwgMSksCisJU09DX1NJTkdMRSgiUGhvbmUgUGxheWJhY2sgVm9sdW1lIiwgQUM5N19QSE9ORSwgMCwgMzEsIDEpLAorCVNPQ19ET1VCTEUoIkxpbmUgUGxheWJhY2sgVm9sdW1lIiwgQUM5N19MSU5FLCA4LCAwLCAzMSwgMSksCisJU09DX0RPVUJMRSgiQ0QgUGxheWJhY2sgVm9sdW1lIiwgQUM5N19DRCwgOCwgMCwgMzEsIDEpLAorCVNPQ19TSU5HTEUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCBBQzk3X01JQywgMCwgMzEsIDEpLAorCVNPQ19TSU5HTEUoIk1pYyAyMGRCIEJvb3N0IFN3aXRjaCIsIEFDOTdfTUlDLCA2LCAxLCAwKSwKKwlTT0NfRE9VQkxFKCJDYXB0dXJlIFZvbHVtZSIsIEFDOTdfUkVDX0dBSU4sIDgsIDAsIDE1LCAwKSwKKwlTT0NfU0lOR0xFKCJDYXB0dXJlIFN3aXRjaCIsIEFDOTdfUkVDX0dBSU4sIDE1LCAxLCAxKSwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICp3bTk3MDVfbWljW10gPSB7Ik1pYyAxIiwgIk1pYyAyIn07CitzdGF0aWMgY29uc3QgY2hhciAqd205NzA1X3JlY19zZWxbXSA9IHsiTWljIiwgIkNEIiwgIk5DIiwgIk5DIiwKKwkiTGluZSIsICJTdGVyZW8gTWl4IiwgIk1vbm8gTWl4IiwgIlBob25lIn07CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gd205NzA1X2VudW1fbWljID0KKwlTT0NfRU5VTV9TSU5HTEUoQUM5N19HRU5FUkFMX1BVUlBPU0UsIDgsIDIsIHdtOTcwNV9taWMpOworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSB3bTk3MDVfZW51bV9yZWNfbCA9CisJU09DX0VOVU1fU0lOR0xFKEFDOTdfUkVDX1NFTCwgOCwgOCwgd205NzA1X3JlY19zZWwpOworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSB3bTk3MDVfZW51bV9yZWNfciA9CisJU09DX0VOVU1fU0lOR0xFKEFDOTdfUkVDX1NFTCwgMCwgOCwgd205NzA1X3JlY19zZWwpOworCisvKiBIZWFkcGhvbmUgTWl4ZXIgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTk3MDVfaHBfbWl4ZXJfY29udHJvbHNbXSA9IHsKKwlTT0NfREFQTV9TSU5HTEUoIlBDQmVlcCBQbGF5YmFjayBTd2l0Y2giLCBBQzk3X1BDX0JFRVAsIDE1LCAxLCAxKSwKKwlTT0NfREFQTV9TSU5HTEUoIkNEIFBsYXliYWNrIFN3aXRjaCIsIEFDOTdfQ0QsIDE1LCAxLCAxKSwKKwlTT0NfREFQTV9TSU5HTEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCBBQzk3X01JQywgMTUsIDEsIDEpLAorCVNPQ19EQVBNX1NJTkdMRSgiUGhvbmUgUGxheWJhY2sgU3dpdGNoIiwgQUM5N19QSE9ORSwgMTUsIDEsIDEpLAorCVNPQ19EQVBNX1NJTkdMRSgiTGluZSBQbGF5YmFjayBTd2l0Y2giLCBBQzk3X0xJTkUsIDE1LCAxLCAxKSwKK307CisKKy8qIE1pYyBzb3VyY2UgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTk3MDVfbWljX3NyY19jb250cm9scyA9CisJU09DX0RBUE1fRU5VTSgiUm91dGUiLCB3bTk3MDVfZW51bV9taWMpOworCisvKiBDYXB0dXJlIHNvdXJjZSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtOTcwNV9jYXB0dXJlX3NlbGVjdGxfY29udHJvbHMgPQorCVNPQ19EQVBNX0VOVU0oIlJvdXRlIiwgd205NzA1X2VudW1fcmVjX2wpOworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtOTcwNV9jYXB0dXJlX3NlbGVjdHJfY29udHJvbHMgPQorCVNPQ19EQVBNX0VOVU0oIlJvdXRlIiwgd205NzA1X2VudW1fcmVjX3IpOworCisvKiBEQVBNIHdpZGdldHMgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCB3bTk3MDVfZGFwbV93aWRnZXRzW10gPSB7CisJU05EX1NPQ19EQVBNX01VWCgiTWljIFNvdXJjZSIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJJndtOTcwNV9taWNfc3JjX2NvbnRyb2xzKSwKKwlTTkRfU09DX0RBUE1fTVVYKCJMZWZ0IENhcHR1cmUgU291cmNlIiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkmd205NzA1X2NhcHR1cmVfc2VsZWN0bF9jb250cm9scyksCisJU05EX1NPQ19EQVBNX01VWCgiUmlnaHQgQ2FwdHVyZSBTb3VyY2UiLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCSZ3bTk3MDVfY2FwdHVyZV9zZWxlY3RyX2NvbnRyb2xzKSwKKwlTTkRfU09DX0RBUE1fREFDKCJMZWZ0IERBQyIsICJMZWZ0IEhpRmkgUGxheWJhY2siLAorCQlTTkRfU09DX05PUE0sIDAsIDApLAorCVNORF9TT0NfREFQTV9EQUMoIlJpZ2h0IERBQyIsICJSaWdodCBIaUZpIFBsYXliYWNrIiwKKwkJU05EX1NPQ19OT1BNLCAwLCAwKSwKKwlTTkRfU09DX0RBUE1fTUlYRVJfTkFNRURfQ1RMKCJIUCBNaXhlciIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJJndtOTcwNV9ocF9taXhlcl9jb250cm9sc1swXSwKKwkJQVJSQVlfU0laRSh3bTk3MDVfaHBfbWl4ZXJfY29udHJvbHMpKSwKKwlTTkRfU09DX0RBUE1fTUlYRVIoIk1vbm8gTWl4ZXIiLCBTTkRfU09DX05PUE0sIDAsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9BREMoIkxlZnQgQURDIiwgIkxlZnQgSGlGaSBDYXB0dXJlIiwgU05EX1NPQ19OT1BNLCAwLCAwKSwKKwlTTkRfU09DX0RBUE1fQURDKCJSaWdodCBBREMiLCAiUmlnaHQgSGlGaSBDYXB0dXJlIiwgU05EX1NPQ19OT1BNLCAwLCAwKSwKKwlTTkRfU09DX0RBUE1fUEdBKCJIZWFkcGhvbmUgUEdBIiwgU05EX1NPQ19OT1BNLCAwLCAwLCBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fUEdBKCJTcGVha2VyIFBHQSIsIFNORF9TT0NfTk9QTSwgMCwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1BHQSgiTGluZSBQR0EiLCBTTkRfU09DX05PUE0sIDAsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9QR0EoIkxpbmUgb3V0IFBHQSIsIFNORF9TT0NfTk9QTSwgMCwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1BHQSgiTW9ubyBQR0EiLCBTTkRfU09DX05PUE0sIDAsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9QR0EoIlBob25lIFBHQSIsIFNORF9TT0NfTk9QTSwgMCwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1BHQSgiTWljIFBHQSIsIFNORF9TT0NfTk9QTSwgMCwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1BHQSgiUENCRUVQIFBHQSIsIFNORF9TT0NfTk9QTSwgMCwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1BHQSgiQ0QgUEdBIiwgU05EX1NPQ19OT1BNLCAwLCAwLCBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fUEdBKCJBREMgUEdBIiwgU05EX1NPQ19OT1BNLCAwLCAwLCBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fT1VUUFVUKCJIUE9VVEwiKSwKKwlTTkRfU09DX0RBUE1fT1VUUFVUKCJIUE9VVFIiKSwKKwlTTkRfU09DX0RBUE1fT1VUUFVUKCJMT1VUIiksCisJU05EX1NPQ19EQVBNX09VVFBVVCgiUk9VVCIpLAorCVNORF9TT0NfREFQTV9PVVRQVVQoIk1PTk9PVVQiKSwKKwlTTkRfU09DX0RBUE1fSU5QVVQoIlBIT05FIiksCisJU05EX1NPQ19EQVBNX0lOUFVUKCJMSU5FSU5MIiksCisJU05EX1NPQ19EQVBNX0lOUFVUKCJMSU5FSU5SIiksCisJU05EX1NPQ19EQVBNX0lOUFVUKCJDRElOTCIpLAorCVNORF9TT0NfREFQTV9JTlBVVCgiQ0RJTlIiKSwKKwlTTkRfU09DX0RBUE1fSU5QVVQoIlBDQkVFUCIpLAorCVNORF9TT0NfREFQTV9JTlBVVCgiTUlDMSIpLAorCVNORF9TT0NfREFQTV9JTlBVVCgiTUlDMiIpLAorfTsKKworLyogQXVkaW8gbWFwCisgKiBXTTk3MDUgaGFzIG5vIHN3aXRjaGVzIHRvIGRpc2FibGUgdGhlIHJvdXRlIGZyb20gdGhlIGlucHV0cyB0byB0aGUgSFAgbWl4ZXIKKyAqIHNvIGluIG9yZGVyIHRvIHByZXZlbnQgYWN0aXZlIGlucHV0cyBmcm9tIGZvcmNpbmcgdGhlIGF1ZGlvIG91dHB1dHMgdG8gYmUKKyAqIGNvbnN0YW50bHkgZW5hYmxlZCwgd2UgdXNlIHRoZSBtdXRlcyBvbiB0aG9zZSBpbnB1dHMgdG8gc2ltdWxhdGUgc3VjaAorICogY29udHJvbHMuCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIGF1ZGlvX21hcFtdID0geworCS8qIEhQIG1peGVyICovCisJeyJIUCBNaXhlciIsICJQQ0JlZXAgUGxheWJhY2sgU3dpdGNoIiwgIlBDQkVFUCBQR0EifSwKKwl7IkhQIE1peGVyIiwgIkNEIFBsYXliYWNrIFN3aXRjaCIsICJDRCBQR0EifSwKKwl7IkhQIE1peGVyIiwgIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAiTWljIFBHQSJ9LAorCXsiSFAgTWl4ZXIiLCAiUGhvbmUgUGxheWJhY2sgU3dpdGNoIiwgIlBob25lIFBHQSJ9LAorCXsiSFAgTWl4ZXIiLCAiTGluZSBQbGF5YmFjayBTd2l0Y2giLCAiTGluZSBQR0EifSwKKwl7IkhQIE1peGVyIiwgTlVMTCwgIkxlZnQgREFDIn0sCisJeyJIUCBNaXhlciIsIE5VTEwsICJSaWdodCBEQUMifSwKKworCS8qIG1vbm8gbWl4ZXIgKi8KKwl7Ik1vbm8gTWl4ZXIiLCBOVUxMLCAiSFAgTWl4ZXIifSwKKworCS8qIG91dHB1dHMgKi8KKwl7IkhlYWRwaG9uZSBQR0EiLCBOVUxMLCAiSFAgTWl4ZXIifSwKKwl7IkhQT1VUTCIsIE5VTEwsICJIZWFkcGhvbmUgUEdBIn0sCisJeyJIUE9VVFIiLCBOVUxMLCAiSGVhZHBob25lIFBHQSJ9LAorCXsiTGluZSBvdXQgUEdBIiwgTlVMTCwgIkhQIE1peGVyIn0sCisJeyJMT1VUIiwgTlVMTCwgIkxpbmUgb3V0IFBHQSJ9LAorCXsiUk9VVCIsIE5VTEwsICJMaW5lIG91dCBQR0EifSwKKwl7Ik1vbm8gUEdBIiwgTlVMTCwgIk1vbm8gTWl4ZXIifSwKKwl7Ik1PTk9PVVQiLCBOVUxMLCAiTW9ubyBQR0EifSwKKworCS8qIGlucHV0cyAqLworCXsiQ0QgUEdBIiwgTlVMTCwgIkNESU5MIn0sCisJeyJDRCBQR0EiLCBOVUxMLCAiQ0RJTlIifSwKKwl7IkxpbmUgUEdBIiwgTlVMTCwgIkxJTkVJTkwifSwKKwl7IkxpbmUgUEdBIiwgTlVMTCwgIkxJTkVJTlIifSwKKwl7IlBob25lIFBHQSIsIE5VTEwsICJQSE9ORSJ9LAorCXsiTWljIFNvdXJjZSIsICJNaWMgMSIsICJNSUMxIn0sCisJeyJNaWMgU291cmNlIiwgIk1pYyAyIiwgIk1JQzIifSwKKwl7Ik1pYyBQR0EiLCBOVUxMLCAiTWljIFNvdXJjZSJ9LAorCXsiUENCRUVQIFBHQSIsIE5VTEwsICJQQ0JFRVAifSwKKworCS8qIExlZnQgY2FwdHVyZSBzZWxlY3RvciAqLworCXsiTGVmdCBDYXB0dXJlIFNvdXJjZSIsICJNaWMiLCAiTWljIFNvdXJjZSJ9LAorCXsiTGVmdCBDYXB0dXJlIFNvdXJjZSIsICJDRCIsICJDRElOTCJ9LAorCXsiTGVmdCBDYXB0dXJlIFNvdXJjZSIsICJMaW5lIiwgIkxJTkVJTkwifSwKKwl7IkxlZnQgQ2FwdHVyZSBTb3VyY2UiLCAiU3RlcmVvIE1peCIsICJIUCBNaXhlciJ9LAorCXsiTGVmdCBDYXB0dXJlIFNvdXJjZSIsICJNb25vIE1peCIsICJIUCBNaXhlciJ9LAorCXsiTGVmdCBDYXB0dXJlIFNvdXJjZSIsICJQaG9uZSIsICJQSE9ORSJ9LAorCisJLyogUmlnaHQgY2FwdHVyZSBzb3VyY2UgKi8KKwl7IlJpZ2h0IENhcHR1cmUgU291cmNlIiwgIk1pYyIsICJNaWMgU291cmNlIn0sCisJeyJSaWdodCBDYXB0dXJlIFNvdXJjZSIsICJDRCIsICJDRElOUiJ9LAorCXsiUmlnaHQgQ2FwdHVyZSBTb3VyY2UiLCAiTGluZSIsICJMSU5FSU5SIn0sCisJeyJSaWdodCBDYXB0dXJlIFNvdXJjZSIsICJTdGVyZW8gTWl4IiwgIkhQIE1peGVyIn0sCisJeyJSaWdodCBDYXB0dXJlIFNvdXJjZSIsICJNb25vIE1peCIsICJIUCBNaXhlciJ9LAorCXsiUmlnaHQgQ2FwdHVyZSBTb3VyY2UiLCAiUGhvbmUiLCAiUEhPTkUifSwKKworCXsiQURDIFBHQSIsIE5VTEwsICJMZWZ0IENhcHR1cmUgU291cmNlIn0sCisJeyJBREMgUEdBIiwgTlVMTCwgIlJpZ2h0IENhcHR1cmUgU291cmNlIn0sCisKKwkvKiBBREMncyAqLworCXsiTGVmdCBBREMiLCAgTlVMTCwgIkFEQyBQR0EifSwKKwl7IlJpZ2h0IEFEQyIsIE5VTEwsICJBREMgUEdBIn0sCit9OworCitzdGF0aWMgaW50IHdtOTcwNV9hZGRfd2lkZ2V0cyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgd205NzA1X2RhcG1fd2lkZ2V0cywKKwkJCQkJQVJSQVlfU0laRSh3bTk3MDVfZGFwbV93aWRnZXRzKSk7CisJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsIGF1ZGlvX21hcCwgQVJSQVlfU0laRShhdWRpb19tYXApKTsKKwlzbmRfc29jX2RhcG1fbmV3X3dpZGdldHMoY29kZWMpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIFdlIHVzZSBhIHJlZ2lzdGVyIGNhY2hlIHRvIGVuaGFuY2UgcmVhZCBwZXJmb3JtYW5jZS4gKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgYWM5N19yZWFkKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlZykKK3sKKwl1MTYgKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKKworCXN3aXRjaCAocmVnKSB7CisJY2FzZSBBQzk3X1JFU0VUOgorCWNhc2UgQUM5N19WRU5ET1JfSUQxOgorCWNhc2UgQUM5N19WRU5ET1JfSUQyOgorCQlyZXR1cm4gc29jX2FjOTdfb3BzLnJlYWQoY29kZWMtPmFjOTcsIHJlZyk7CisJZGVmYXVsdDoKKwkJcmVnID0gcmVnID4+IDE7CisKKwkJaWYgKHJlZyA+PSAoQVJSQVlfU0laRSh3bTk3MDVfcmVnKSkpCisJCQlyZXR1cm4gLUVJTzsKKworCQlyZXR1cm4gY2FjaGVbcmVnXTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgYWM5N193cml0ZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZWcsCisJdW5zaWduZWQgaW50IHZhbCkKK3sKKwl1MTYgKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKKworCXNvY19hYzk3X29wcy53cml0ZShjb2RlYy0+YWM5NywgcmVnLCB2YWwpOworCXJlZyA9IHJlZyA+PiAxOworCWlmIChyZWcgPCAoQVJSQVlfU0laRSh3bTk3MDVfcmVnKSkpCisJCWNhY2hlW3JlZ10gPSB2YWw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhYzk3X3ByZXBhcmUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHJ0ZC0+c29jZGV2OworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CisJaW50IHJlZzsKKwl1MTYgdnJhOworCisJdnJhID0gYWM5N19yZWFkKGNvZGVjLCBBQzk3X0VYVEVOREVEX1NUQVRVUyk7CisJYWM5N193cml0ZShjb2RlYywgQUM5N19FWFRFTkRFRF9TVEFUVVMsIHZyYSB8IDB4MSk7CisKKwlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKKwkJcmVnID0gQUM5N19QQ01fRlJPTlRfREFDX1JBVEU7CisJZWxzZQorCQlyZWcgPSBBQzk3X1BDTV9MUl9BRENfUkFURTsKKworCXJldHVybiBhYzk3X3dyaXRlKGNvZGVjLCByZWcsIHJ1bnRpbWUtPnJhdGUpOworfQorCisjZGVmaW5lIFdNOTcwNV9BQzk3X1JBVEVTIChTTkRSVl9QQ01fUkFURV84MDAwIHwgU05EUlZfUENNX1JBVEVfMTEwMjUgfCBcCisJCQlTTkRSVl9QQ01fUkFURV8xNjAwMCB8IFNORFJWX1BDTV9SQVRFXzIyMDUwIHwgXAorCQkJU05EUlZfUENNX1JBVEVfMzIwMDAgfCBTTkRSVl9QQ01fUkFURV80NDEwMCB8IFwKKwkJCVNORFJWX1BDTV9SQVRFXzQ4MDAwKQorCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyB3bTk3MDVfZGFpX29wcyA9IHsKKwkucHJlcGFyZQk9IGFjOTdfcHJlcGFyZSwKK307CisKK3N0cnVjdCBzbmRfc29jX2RhaSB3bTk3MDVfZGFpW10gPSB7CisJeworCQkubmFtZSA9ICJBQzk3IEhpRmkiLAorCQkuYWM5N19jb250cm9sID0gMSwKKwkJLnBsYXliYWNrID0geworCQkJLnN0cmVhbV9uYW1lID0gIkhpRmkgUGxheWJhY2siLAorCQkJLmNoYW5uZWxzX21pbiA9IDEsCisJCQkuY2hhbm5lbHNfbWF4ID0gMiwKKwkJCS5yYXRlcyA9IFdNOTcwNV9BQzk3X1JBVEVTLAorCQkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwKKwkJfSwKKwkJLmNhcHR1cmUgPSB7CisJCQkuc3RyZWFtX25hbWUgPSAiSGlGaSBDYXB0dXJlIiwKKwkJCS5jaGFubmVsc19taW4gPSAxLAorCQkJLmNoYW5uZWxzX21heCA9IDIsCisJCQkucmF0ZXMgPSBXTTk3MDVfQUM5N19SQVRFUywKKwkJCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCisJCX0sCisJCS5vcHMgPSAmd205NzA1X2RhaV9vcHMsCisJfSwKKwl7CisJCS5uYW1lID0gIkFDOTcgQXV4IiwKKwkJLnBsYXliYWNrID0geworCQkJLnN0cmVhbV9uYW1lID0gIkF1eCBQbGF5YmFjayIsCisJCQkuY2hhbm5lbHNfbWluID0gMSwKKwkJCS5jaGFubmVsc19tYXggPSAxLAorCQkJLnJhdGVzID0gV005NzA1X0FDOTdfUkFURVMsCisJCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLAorCQl9LAorCX0KK307CitFWFBPUlRfU1lNQk9MX0dQTCh3bTk3MDVfZGFpKTsKKworc3RhdGljIGludCB3bTk3MDVfcmVzZXQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCWlmIChzb2NfYWM5N19vcHMucmVzZXQpIHsKKwkJc29jX2FjOTdfb3BzLnJlc2V0KGNvZGVjLT5hYzk3KTsKKwkJaWYgKGFjOTdfcmVhZChjb2RlYywgMCkgPT0gd205NzA1X3JlZ1swXSkKKwkJCXJldHVybiAwOyAvKiBTdWNjZXNzICovCisJfQorCisJcmV0dXJuIC1FSU87Cit9CisKK3N0YXRpYyBpbnQgd205NzA1X3NvY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOworCWludCByZXQgPSAwOworCisJcHJpbnRrKEtFUk5fSU5GTyAiV005NzA1IFNvQyBBdWRpbyBDb2RlY1xuIik7CisKKwlzb2NkZXYtPmNhcmQtPmNvZGVjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNuZF9zb2NfY29kZWMpLAorCQkJCSAgICAgIEdGUF9LRVJORUwpOworCWlmIChzb2NkZXYtPmNhcmQtPmNvZGVjID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCWNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKKwltdXRleF9pbml0KCZjb2RlYy0+bXV0ZXgpOworCisJY29kZWMtPnJlZ19jYWNoZSA9IGttZW1kdXAod205NzA1X3JlZywgc2l6ZW9mKHdtOTcwNV9yZWcpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY29kZWMtPnJlZ19jYWNoZSA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gY2FjaGVfZXJyOworCX0KKwljb2RlYy0+cmVnX2NhY2hlX3NpemUgPSBzaXplb2Yod205NzA1X3JlZyk7CisJY29kZWMtPnJlZ19jYWNoZV9zdGVwID0gMjsKKworCWNvZGVjLT5uYW1lID0gIldNOTcwNSI7CisJY29kZWMtPm93bmVyID0gVEhJU19NT0RVTEU7CisJY29kZWMtPmRhaSA9IHdtOTcwNV9kYWk7CisJY29kZWMtPm51bV9kYWkgPSBBUlJBWV9TSVpFKHdtOTcwNV9kYWkpOworCWNvZGVjLT53cml0ZSA9IGFjOTdfd3JpdGU7CisJY29kZWMtPnJlYWQgPSBhYzk3X3JlYWQ7CisJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3dpZGdldHMpOworCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV9wYXRocyk7CisKKwlyZXQgPSBzbmRfc29jX25ld19hYzk3X2NvZGVjKGNvZGVjLCAmc29jX2FjOTdfb3BzLCAwKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIndtOTcwNTogZmFpbGVkIHRvIHJlZ2lzdGVyIEFDOTcgY29kZWNcbiIpOworCQlnb3RvIGNvZGVjX2VycjsKKwl9CisKKwkvKiByZWdpc3RlciBwY21zICovCisJcmV0ID0gc25kX3NvY19uZXdfcGNtcyhzb2NkZXYsIFNORFJWX0RFRkFVTFRfSURYMSwgU05EUlZfREVGQVVMVF9TVFIxKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBwY21fZXJyOworCisJcmV0ID0gd205NzA1X3Jlc2V0KGNvZGVjKTsKKwlpZiAocmV0KQorCQlnb3RvIHJlc2V0X2VycjsKKworCXNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCB3bTk3MDVfc25kX2FjOTdfY29udHJvbHMsCisJCQkJQVJSQVlfU0laRSh3bTk3MDVfc25kX2FjOTdfY29udHJvbHMpKTsKKwl3bTk3MDVfYWRkX3dpZGdldHMoY29kZWMpOworCisJcmV0ID0gc25kX3NvY19pbml0X2NhcmQoc29jZGV2KTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIndtOTcwNTogZmFpbGVkIHRvIHJlZ2lzdGVyIGNhcmRcbiIpOworCQlnb3RvIHBjbV9lcnI7CisJfQorCisJcmV0dXJuIDA7CisKK3Jlc2V0X2VycjoKKwlzbmRfc29jX2ZyZWVfcGNtcyhzb2NkZXYpOworcGNtX2VycjoKKwlzbmRfc29jX2ZyZWVfYWM5N19jb2RlYyhjb2RlYyk7Citjb2RlY19lcnI6CisJa2ZyZWUoY29kZWMtPnJlZ19jYWNoZSk7CitjYWNoZV9lcnI6CisJa2ZyZWUoc29jZGV2LT5jYXJkLT5jb2RlYyk7CisJc29jZGV2LT5jYXJkLT5jb2RlYyA9IE5VTEw7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB3bTk3MDVfc29jX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKKworCWlmIChjb2RlYyA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCXNuZF9zb2NfZGFwbV9mcmVlKHNvY2Rldik7CisJc25kX3NvY19mcmVlX3BjbXMoc29jZGV2KTsKKwlzbmRfc29jX2ZyZWVfYWM5N19jb2RlYyhjb2RlYyk7CisJa2ZyZWUoY29kZWMtPnJlZ19jYWNoZSk7CisJa2ZyZWUoY29kZWMpOworCXJldHVybiAwOworfQorCitzdHJ1Y3Qgc25kX3NvY19jb2RlY19kZXZpY2Ugc29jX2NvZGVjX2Rldl93bTk3MDUgPSB7CisJLnByb2JlID0gCXdtOTcwNV9zb2NfcHJvYmUsCisJLnJlbW92ZSA9IAl3bTk3MDVfc29jX3JlbW92ZSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChzb2NfY29kZWNfZGV2X3dtOTcwNSk7CisKK01PRFVMRV9ERVNDUklQVElPTigiQVNvQyBXTTk3MDUgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJJYW4gTW9sdG9uIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtOTcwNS5oIGIvc291bmQvc29jL2NvZGVjcy93bTk3MDUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzgwZjExCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTk3MDUuaApAQCAtMCwwICsxLDE0IEBACisvKgorICogd205NzA1LmggIC0tICBXTTk3MDUgU29jIEF1ZGlvIGRyaXZlcgorICovCisKKyNpZm5kZWYgX1dNOTcwNV9ICisjZGVmaW5lIF9XTTk3MDVfSAorCisjZGVmaW5lIFdNOTcwNV9EQUlfQUM5N19ISUZJCTAKKyNkZWZpbmUgV005NzA1X0RBSV9BQzk3X0FVWAkxCisKK2V4dGVybiBzdHJ1Y3Qgc25kX3NvY19kYWkgd205NzA1X2RhaVsyXTsKK2V4dGVybiBzdHJ1Y3Qgc25kX3NvY19jb2RlY19kZXZpY2Ugc29jX2NvZGVjX2Rldl93bTk3MDU7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTk3MTIuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd205NzEyLmMKaW5kZXggYWY4M2Q2Mi4uNzY1Y2YxZSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTk3MTIuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtOTcxMi5jCkBAIC0xNTQsMjEgKzE1NCw2IEBACiBTT0NfU0lOR0xFKCJNaWMgMjBkQiBCb29zdCBTd2l0Y2giLCBBQzk3X01JQywgNywgMSwgMCksCiB9OwogCi0vKiBhZGQgbm9uIGRhcG0gY29udHJvbHMgKi8KLXN0YXRpYyBpbnQgd205NzEyX2FkZF9jb250cm9scyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCi17Ci0JaW50IGVyciwgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtOTcxMl9zbmRfYWM5N19jb250cm9scyk7IGkrKykgewotCQllcnIgPSBzbmRfY3RsX2FkZChjb2RlYy0+Y2FyZCwKLQkJCQkgIHNuZF9zb2NfY25ldygmd205NzEyX3NuZF9hYzk3X2NvbnRyb2xzW2ldLAotCQkJCQkgICAgICAgY29kZWMsIE5VTEwpKTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwotCX0KLQlyZXR1cm4gMDsKLX0KLQogLyogV2UgaGF2ZSB0byBjcmVhdGUgYSBmYWtlIGxlZnQgYW5kIHJpZ2h0IEhQIG1peGVycyBiZWNhdXNlCiAgKiB0aGUgY29kZWMgb25seSBoYXMgYSBzaW5nbGUgY29udHJvbCB0aGF0IGlzIHNoYXJlZCBieSBib3RoIGNoYW5uZWxzLgogICogVGhpcyBtYWtlcyBpdCBpbXBvc3NpYmxlIHRvIGRldGVybWluZSB0aGUgYXVkaW8gcGF0aC4KQEAgLTQ2Nyw3ICs0NTIsNyBAQAogCWVsc2UgewogCQlyZWcgPSByZWcgPj4gMTsKIAotCQlpZiAocmVnID4gKEFSUkFZX1NJWkUod205NzEyX3JlZykpKQorCQlpZiAocmVnID49IChBUlJBWV9TSVpFKHdtOTcxMl9yZWcpKSkKIAkJCXJldHVybiAtRUlPOwogCiAJCXJldHVybiBjYWNoZVtyZWddOwpAQCAtNDgxLDcgKzQ2Niw3IEBACiAKIAlzb2NfYWM5N19vcHMud3JpdGUoY29kZWMtPmFjOTcsIHJlZywgdmFsKTsKIAlyZWcgPSByZWcgPj4gMTsKLQlpZiAocmVnIDw9IChBUlJBWV9TSVpFKHdtOTcxMl9yZWcpKSkKKwlpZiAocmVnIDwgKEFSUkFZX1NJWkUod205NzEyX3JlZykpKQogCQljYWNoZVtyZWddID0gdmFsOwogCiAJcmV0dXJuIDA7CkBAIC00OTMsNyArNDc4LDcgQEAKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHJ0ZC0+c29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlpbnQgcmVnOwogCXUxNiB2cmE7CiAKQEAgLTUxNCw3ICs0OTksNyBAQAogCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCXUxNiB2cmEsIHhzbGU7CiAKIAl2cmEgPSBhYzk3X3JlYWQoY29kZWMsIEFDOTdfRVhURU5ERURfU1RBVFVTKTsKQEAgLTUzMiw2ICs1MTcsMTQgQEAKIAkJU05EUlZfUENNX1JBVEVfMjIwNTAgfCBTTkRSVl9QQ01fUkFURV80NDEwMCB8XAogCQlTTkRSVl9QQ01fUkFURV80ODAwMCkKIAorc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgd205NzEyX2RhaV9vcHNfaGlmaSA9IHsKKwkucHJlcGFyZQk9IGFjOTdfcHJlcGFyZSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHdtOTcxMl9kYWlfb3BzX2F1eCA9IHsKKwkucHJlcGFyZQk9IGFjOTdfYXV4X3ByZXBhcmUsCit9OworCiBzdHJ1Y3Qgc25kX3NvY19kYWkgd205NzEyX2RhaVtdID0gewogewogCS5uYW1lID0gIkFDOTcgSGlGaSIsCkBAIC01NDgsOCArNTQxLDcgQEAKIAkJLmNoYW5uZWxzX21heCA9IDIsCiAJCS5yYXRlcyA9IFdNOTcxMl9BQzk3X1JBVEVTLAogCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLH0sCi0JLm9wcyA9IHsKLQkJLnByZXBhcmUgPSBhYzk3X3ByZXBhcmUsfSwKKwkub3BzID0gJndtOTcxMl9kYWlfb3BzX2hpZmksCiB9LAogewogCS5uYW1lID0gIkFDOTcgQXV4IiwKQEAgLTU1OSw4ICs1NTEsNyBAQAogCQkuY2hhbm5lbHNfbWF4ID0gMSwKIAkJLnJhdGVzID0gV005NzEyX0FDOTdfUkFURVMsCiAJCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsfSwKLQkub3BzID0gewotCQkucHJlcGFyZSA9IGFjOTdfYXV4X3ByZXBhcmUsfSwKKwkub3BzID0gJndtOTcxMl9kYWlfb3BzX2F1eCwKIH0KIH07CiBFWFBPUlRfU1lNQk9MX0dQTCh3bTk3MTJfZGFpKTsKQEAgLTYwNyw3ICs1OTgsNyBAQAogCXBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCXdtOTcxMl9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7CiAJcmV0dXJuIDA7CkBAIC02MTYsNyArNjA3LDcgQEAKIHN0YXRpYyBpbnQgd205NzEyX3NvY19yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlpbnQgaSwgcmV0OwogCXUxNiAqY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOwogCkBAIC02NTIsMTAgKzY0MywxMSBAQAogCiAJcHJpbnRrKEtFUk5fSU5GTyAiV005NzExL1dNOTcxMiBTb0MgQXVkaW8gQ29kZWMgJXNcbiIsIFdNOTcxMl9WRVJTSU9OKTsKIAotCXNvY2Rldi0+Y29kZWMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc25kX3NvY19jb2RlYyksIEdGUF9LRVJORUwpOwotCWlmIChzb2NkZXYtPmNvZGVjID09IE5VTEwpCisJc29jZGV2LT5jYXJkLT5jb2RlYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzbmRfc29jX2NvZGVjKSwKKwkJCQkgICAgICBHRlBfS0VSTkVMKTsKKwlpZiAoc29jZGV2LT5jYXJkLT5jb2RlYyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKLQljb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCW11dGV4X2luaXQoJmNvZGVjLT5tdXRleCk7CiAKIAljb2RlYy0+cmVnX2NhY2hlID0ga21lbWR1cCh3bTk3MTJfcmVnLCBzaXplb2Yod205NzEyX3JlZyksIEdGUF9LRVJORUwpOwpAQCAtNjk4LDcgKzY5MCw4IEBACiAJYWM5N193cml0ZShjb2RlYywgQUM5N19WSURFTywgYWM5N19yZWFkKGNvZGVjLCBBQzk3X1ZJREVPKSB8IDB4MzAwMCk7CiAKIAl3bTk3MTJfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19TVEFOREJZKTsKLQl3bTk3MTJfYWRkX2NvbnRyb2xzKGNvZGVjKTsKKwlzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgd205NzEyX3NuZF9hYzk3X2NvbnRyb2xzLAorCQkJCUFSUkFZX1NJWkUod205NzEyX3NuZF9hYzk3X2NvbnRyb2xzKSk7CiAJd205NzEyX2FkZF93aWRnZXRzKGNvZGVjKTsKIAlyZXQgPSBzbmRfc29jX2luaXRfY2FyZChzb2NkZXYpOwogCWlmIChyZXQgPCAwKSB7CkBAIC03MTgsMTUgKzcxMSwxNSBAQAogCWtmcmVlKGNvZGVjLT5yZWdfY2FjaGUpOwogCiBjYWNoZV9lcnI6Ci0Ja2ZyZWUoc29jZGV2LT5jb2RlYyk7Ci0Jc29jZGV2LT5jb2RlYyA9IE5VTEw7CisJa2ZyZWUoc29jZGV2LT5jYXJkLT5jb2RlYyk7CisJc29jZGV2LT5jYXJkLT5jb2RlYyA9IE5VTEw7CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCB3bTk3MTJfc29jX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJaWYgKGNvZGVjID09IE5VTEwpCiAJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTk3MTMuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd205NzEzLmMKaW5kZXggZjNjYThhYS4uNTIzYmFkMCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTk3MTMuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtOTcxMy5jCkBAIC0zMiw3ICszMiw2IEBACiAKIHN0cnVjdCB3bTk3MTNfcHJpdiB7CiAJdTMyIHBsbF9pbjsgLyogUExMIGlucHV0IGZyZXF1ZW5jeSAqLwotCXUzMiBwbGxfb3V0OyAvKiBQTEwgb3V0cHV0IGZyZXF1ZW5jeSAqLwogfTsKIAogc3RhdGljIHVuc2lnbmVkIGludCBhYzk3X3JlYWQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLApAQCAtMTkwLDIxICsxODksNiBAQAogU09DX1NJTkdMRSgiM0QgRGVwdGgiLCBBQzk3X1JFQ19HQUlOX01JQywgMCwgMTUsIDEpLAogfTsKIAotLyogYWRkIG5vbiBkYXBtIGNvbnRyb2xzICovCi1zdGF0aWMgaW50IHdtOTcxM19hZGRfY29udHJvbHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQotewotCWludCBlcnIsIGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTk3MTNfc25kX2FjOTdfY29udHJvbHMpOyBpKyspIHsKLQkJZXJyID0gc25kX2N0bF9hZGQoY29kZWMtPmNhcmQsCi0JCQkJc25kX3NvY19jbmV3KCZ3bTk3MTNfc25kX2FjOTdfY29udHJvbHNbaV0sCi0JCQkJCWNvZGVjLCBOVUxMKSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KIC8qIFdlIGhhdmUgdG8gY3JlYXRlIGEgZmFrZSBsZWZ0IGFuZCByaWdodCBIUCBtaXhlcnMgYmVjYXVzZQogICogdGhlIGNvZGVjIG9ubHkgaGFzIGEgc2luZ2xlIGNvbnRyb2wgdGhhdCBpcyBzaGFyZWQgYnkgYm90aCBjaGFubmVscy4KICAqIFRoaXMgbWFrZXMgaXQgaW1wb3NzaWJsZSB0byBkZXRlcm1pbmUgdGhlIGF1ZGlvIHBhdGggdXNpbmcgdGhlIGN1cnJlbnQKQEAgLTYzNiw3ICs2MjAsNyBAQAogCWVsc2UgewogCQlyZWcgPSByZWcgPj4gMTsKIAotCQlpZiAocmVnID4gKEFSUkFZX1NJWkUod205NzEzX3JlZykpKQorCQlpZiAocmVnID49IChBUlJBWV9TSVpFKHdtOTcxM19yZWcpKSkKIAkJCXJldHVybiAtRUlPOwogCiAJCXJldHVybiBjYWNoZVtyZWddOwpAQCAtNjUwLDcgKzYzNCw3IEBACiAJaWYgKHJlZyA8IDB4N2MpCiAJCXNvY19hYzk3X29wcy53cml0ZShjb2RlYy0+YWM5NywgcmVnLCB2YWwpOwogCXJlZyA9IHJlZyA+PiAxOwotCWlmIChyZWcgPD0gKEFSUkFZX1NJWkUod205NzEzX3JlZykpKQorCWlmIChyZWcgPCAoQVJSQVlfU0laRSh3bTk3MTNfcmVnKSkpCiAJCWNhY2hlW3JlZ10gPSB2YWw7CiAKIAlyZXR1cm4gMDsKQEAgLTczOCwxMyArNzIyLDEzIEBACiAJc3RydWN0IF9wbGxfZGl2IHBsbF9kaXY7CiAKIAkvKiB0dXJuIFBMTCBvZmYgPyAqLwotCWlmIChmcmVxX2luID09IDAgfHwgZnJlcV9vdXQgPT0gMCkgeworCWlmIChmcmVxX2luID09IDApIHsKIAkJLyogZGlzYWJsZSBQTEwgcG93ZXIgYW5kIHNlbGVjdCBleHQgc291cmNlICovCiAJCXJlZyA9IGFjOTdfcmVhZChjb2RlYywgQUM5N19IQU5EU0VUX1JBVEUpOwogCQlhYzk3X3dyaXRlKGNvZGVjLCBBQzk3X0hBTkRTRVRfUkFURSwgcmVnIHwgMHgwMDgwKTsKIAkJcmVnID0gYWM5N19yZWFkKGNvZGVjLCBBQzk3X0VYVEVOREVEX01JRCk7CiAJCWFjOTdfd3JpdGUoY29kZWMsIEFDOTdfRVhURU5ERURfTUlELCByZWcgfCAweDAyMDApOwotCQl3bTk3MTMtPnBsbF9vdXQgPSAwOworCQl3bTk3MTMtPnBsbF9pbiA9IDA7CiAJCXJldHVybiAwOwogCX0KIApAQCAtNzg4LDcgKzc3Miw2IEBACiAJYWM5N193cml0ZShjb2RlYywgQUM5N19FWFRFTkRFRF9NSUQsIHJlZyAmIDB4ZmRmZik7CiAJcmVnID0gYWM5N19yZWFkKGNvZGVjLCBBQzk3X0hBTkRTRVRfUkFURSk7CiAJYWM5N193cml0ZShjb2RlYywgQUM5N19IQU5EU0VUX1JBVEUsIHJlZyAmIDB4ZmY3Zik7Ci0Jd205NzEzLT5wbGxfb3V0ID0gZnJlcV9vdXQ7CiAJd205NzEzLT5wbGxfaW4gPSBmcmVxX2luOwogCiAJLyogd2FpdCAxMG1zIEFDOTcgbGluayBmcmFtZXMgZm9yIHRoZSBsaW5rIHRvIHN0YWJpbGlzZSAqLwpAQCAtOTU3LDEzICs5NDAsMTQgQEAKIAkJCQkgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCiB7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gZGFpLT5jb2RlYzsKLQl1MTYgc3RhdHVzOworCXUxNiBzdGF0dXMsIHJhdGU7CiAKIAkvKiBHcmFjZWZ1bGx5IHNodXQgZG93biB0aGUgdm9pY2UgaW50ZXJmYWNlLiAqLwogCXN0YXR1cyA9IGFjOTdfcmVhZChjb2RlYywgQUM5N19FWFRFTkRFRF9TVEFUVVMpIHwgMHgxMDAwOwotCWFjOTdfd3JpdGUoY29kZWMsIEFDOTdfSEFORFNFVF9SQVRFLCAweDAyODApOworCXJhdGUgPSBhYzk3X3JlYWQoY29kZWMsIEFDOTdfSEFORFNFVF9SQVRFKSAmIDB4RjBGRjsKKwlhYzk3X3dyaXRlKGNvZGVjLCBBQzk3X0hBTkRTRVRfUkFURSwgcmF0ZSB8IDB4MDIwMCk7CiAJc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKG1zZWNzX3RvX2ppZmZpZXMoMSkpOwotCWFjOTdfd3JpdGUoY29kZWMsIEFDOTdfSEFORFNFVF9SQVRFLCAweDBGODApOworCWFjOTdfd3JpdGUoY29kZWMsIEFDOTdfSEFORFNFVF9SQVRFLCByYXRlIHwgMHgwRjAwKTsKIAlhYzk3X3dyaXRlKGNvZGVjLCBBQzk3X0VYVEVOREVEX01JRCwgc3RhdHVzKTsKIH0KIApAQCAtMTAyMSw2ICsxMDA1LDI3IEBACiAJKFNORFJWX1BDTV9GT1JNQVRfUzE2X0xFIHwgU05EUlZfUENNX0ZPUk1BVF9TMjBfM0xFIHwgXAogCSBTTkRSVl9QQ01fRk9STUFUX1MyNF9MRSkKIAorc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgd205NzEzX2RhaV9vcHNfaGlmaSA9IHsKKwkucHJlcGFyZQk9IGFjOTdfaGlmaV9wcmVwYXJlLAorCS5zZXRfY2xrZGl2CT0gd205NzEzX3NldF9kYWlfY2xrZGl2LAorCS5zZXRfcGxsCT0gd205NzEzX3NldF9kYWlfcGxsLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgd205NzEzX2RhaV9vcHNfYXV4ID0geworCS5wcmVwYXJlCT0gYWM5N19hdXhfcHJlcGFyZSwKKwkuc2V0X2Nsa2Rpdgk9IHdtOTcxM19zZXRfZGFpX2Nsa2RpdiwKKwkuc2V0X3BsbAk9IHdtOTcxM19zZXRfZGFpX3BsbCwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHdtOTcxM19kYWlfb3BzX3ZvaWNlID0geworCS5od19wYXJhbXMJPSB3bTk3MTNfcGNtX2h3X3BhcmFtcywKKwkuc2h1dGRvd24JPSB3bTk3MTNfdm9pY2VzaHV0ZG93biwKKwkuc2V0X2Nsa2Rpdgk9IHdtOTcxM19zZXRfZGFpX2Nsa2RpdiwKKwkuc2V0X3BsbAk9IHdtOTcxM19zZXRfZGFpX3BsbCwKKwkuc2V0X2ZtdAk9IHdtOTcxM19zZXRfZGFpX2ZtdCwKKwkuc2V0X3RyaXN0YXRlCT0gd205NzEzX3NldF9kYWlfdHJpc3RhdGUsCit9OworCiBzdHJ1Y3Qgc25kX3NvY19kYWkgd205NzEzX2RhaVtdID0gewogewogCS5uYW1lID0gIkFDOTcgSGlGaSIsCkBAIC0xMDM3LDEwICsxMDQyLDcgQEAKIAkJLmNoYW5uZWxzX21heCA9IDIsCiAJCS5yYXRlcyA9IFdNOTcxM19SQVRFUywKIAkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSx9LAotCS5vcHMgPSB7Ci0JCS5wcmVwYXJlID0gYWM5N19oaWZpX3ByZXBhcmUsCi0JCS5zZXRfY2xrZGl2ID0gd205NzEzX3NldF9kYWlfY2xrZGl2LAotCQkuc2V0X3BsbCA9IHdtOTcxM19zZXRfZGFpX3BsbCx9LAorCS5vcHMgPSAmd205NzEzX2RhaV9vcHNfaGlmaSwKIAl9LAogCXsKIAkubmFtZSA9ICJBQzk3IEF1eCIsCkBAIC0xMDUwLDEwICsxMDUyLDcgQEAKIAkJLmNoYW5uZWxzX21heCA9IDEsCiAJCS5yYXRlcyA9IFdNOTcxM19SQVRFUywKIAkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSx9LAotCS5vcHMgPSB7Ci0JCS5wcmVwYXJlID0gYWM5N19hdXhfcHJlcGFyZSwKLQkJLnNldF9jbGtkaXYgPSB3bTk3MTNfc2V0X2RhaV9jbGtkaXYsCi0JCS5zZXRfcGxsID0gd205NzEzX3NldF9kYWlfcGxsLH0sCisJLm9wcyA9ICZ3bTk3MTNfZGFpX29wc19hdXgsCiAJfSwKIAl7CiAJLm5hbWUgPSAiV005NzEzIFZvaWNlIiwKQEAgLTEwNjksMTQgKzEwNjgsNyBAQAogCQkuY2hhbm5lbHNfbWF4ID0gMiwKIAkJLnJhdGVzID0gV005NzEzX1BDTV9SQVRFUywKIAkJLmZvcm1hdHMgPSBXTTk3MTNfUENNX0ZPUk1BVFMsfSwKLQkub3BzID0gewotCQkuaHdfcGFyYW1zID0gd205NzEzX3BjbV9od19wYXJhbXMsCi0JCS5zaHV0ZG93biA9IHdtOTcxM192b2ljZXNodXRkb3duLAotCQkuc2V0X2Nsa2RpdiA9IHdtOTcxM19zZXRfZGFpX2Nsa2RpdiwKLQkJLnNldF9wbGwgPSB3bTk3MTNfc2V0X2RhaV9wbGwsCi0JCS5zZXRfZm10ID0gd205NzEzX3NldF9kYWlfZm10LAotCQkuc2V0X3RyaXN0YXRlID0gd205NzEzX3NldF9kYWlfdHJpc3RhdGUsCi0JfSwKKwkub3BzID0gJndtOTcxM19kYWlfb3BzX3ZvaWNlLAogCX0sCiB9OwogRVhQT1JUX1NZTUJPTF9HUEwod205NzEzX2RhaSk7CkBAIC0xMTMyLDcgKzExMjQsNyBAQAogCXBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAl1MTYgcmVnOwogCiAJLyogRGlzYWJsZSBldmVyeXRoaW5nIGV4Y2VwdCB0b3VjaHBhbmVsIC0gdGhhdCB3aWxsIGJlIGhhbmRsZWQKQEAgLTExNTAsNyArMTE0Miw3IEBACiBzdGF0aWMgaW50IHdtOTcxM19zb2NfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJc3RydWN0IHdtOTcxM19wcml2ICp3bTk3MTMgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOwogCWludCBpLCByZXQ7CiAJdTE2ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CkBAIC0xMTY0LDggKzExNTYsOCBAQAogCXdtOTcxM19zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1NUQU5EQlkpOwogCiAJLyogZG8gd2UgbmVlZCB0byByZS1zdGFydCB0aGUgUExMID8gKi8KLQlpZiAod205NzEzLT5wbGxfb3V0KQotCQl3bTk3MTNfc2V0X3BsbChjb2RlYywgMCwgd205NzEzLT5wbGxfaW4sIHdtOTcxMy0+cGxsX291dCk7CisJaWYgKHdtOTcxMy0+cGxsX2luKQorCQl3bTk3MTNfc2V0X3BsbChjb2RlYywgMCwgd205NzEzLT5wbGxfaW4sIDApOwogCiAJLyogb25seSBzeW5jaHJvbmlzZSB0aGUgY29kZWMgaWYgd2FybSByZXNldCBmYWlsZWQgKi8KIAlpZiAocmV0ID09IDApIHsKQEAgLTExOTEsMTAgKzExODMsMTEgQEAKIAogCXByaW50ayhLRVJOX0lORk8gIldNOTcxMy9XTTk3MTQgU29DIEF1ZGlvIENvZGVjICVzXG4iLCBXTTk3MTNfVkVSU0lPTik7CiAKLQlzb2NkZXYtPmNvZGVjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNuZF9zb2NfY29kZWMpLCBHRlBfS0VSTkVMKTsKLQlpZiAoc29jZGV2LT5jb2RlYyA9PSBOVUxMKQorCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc25kX3NvY19jb2RlYyksCisJCQkJICAgICAgR0ZQX0tFUk5FTCk7CisJaWYgKHNvY2Rldi0+Y2FyZC0+Y29kZWMgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCWNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAltdXRleF9pbml0KCZjb2RlYy0+bXV0ZXgpOwogCiAJY29kZWMtPnJlZ19jYWNoZSA9IGttZW1kdXAod205NzEzX3JlZywgc2l6ZW9mKHdtOTcxM19yZWcpLCBHRlBfS0VSTkVMKTsKQEAgLTEyNDUsNyArMTIzOCw4IEBACiAJcmVnID0gYWM5N19yZWFkKGNvZGVjLCBBQzk3X0NEKSAmIDB4N2ZmZjsKIAlhYzk3X3dyaXRlKGNvZGVjLCBBQzk3X0NELCByZWcpOwogCi0Jd205NzEzX2FkZF9jb250cm9scyhjb2RlYyk7CisJc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHdtOTcxM19zbmRfYWM5N19jb250cm9scywKKwkJCQlBUlJBWV9TSVpFKHdtOTcxM19zbmRfYWM5N19jb250cm9scykpOwogCXdtOTcxM19hZGRfd2lkZ2V0cyhjb2RlYyk7CiAJcmV0ID0gc25kX3NvY19pbml0X2NhcmQoc29jZGV2KTsKIAlpZiAocmV0IDwgMCkKQEAgLTEyNjUsMTUgKzEyNTksMTUgQEAKIAlrZnJlZShjb2RlYy0+cmVnX2NhY2hlKTsKIAogY2FjaGVfZXJyOgotCWtmcmVlKHNvY2Rldi0+Y29kZWMpOwotCXNvY2Rldi0+Y29kZWMgPSBOVUxMOworCWtmcmVlKHNvY2Rldi0+Y2FyZC0+Y29kZWMpOworCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSBOVUxMOwogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgd205NzEzX3NvY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCWlmIChjb2RlYyA9PSBOVUxMKQogCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9kYXZpbmNpL0tjb25maWcgYi9zb3VuZC9zb2MvZGF2aW5jaS9LY29uZmlnCmluZGV4IGI1MDI3NDEuLmJkNzM5MmMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9kYXZpbmNpL0tjb25maWcKKysrIGIvc291bmQvc29jL2RhdmluY2kvS2NvbmZpZwpAQCAtMjAsNyArMjAsNyBAQAogCiBjb25maWcgU05EX0RBVklOQ0lfU09DX1NGRlNEUgogCXRyaXN0YXRlICJTb0MgQXVkaW8gc3VwcG9ydCBmb3IgU0ZGU0RSIgotCWRlcGVuZHMgb24gU05EX0RBVklOQ0lfU09DICYmIE1BQ0hfREFWSU5DSV9TRkZTRFIKKwlkZXBlbmRzIG9uIFNORF9EQVZJTkNJX1NPQyAmJiBNQUNIX1NGRlNEUgogCXNlbGVjdCBTTkRfREFWSU5DSV9TT0NfSTJTCiAJc2VsZWN0IFNORF9TT0NfUENNMzAwOAogCXNlbGVjdCBTRkZTRFJfRlBHQQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1ldm0uYyBiL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktZXZtLmMKaW5kZXggNTQ4NTFmMy4uOWI5MGIzNCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1ldm0uYworKysgYi9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLWV2bS5jCkBAIC0xODYsNyArMTg2LDggQEAKIAogCXBsYXRmb3JtX3NldF9kcnZkYXRhKGV2bV9zbmRfZGV2aWNlLCAmZXZtX3NuZF9kZXZkYXRhKTsKIAlldm1fc25kX2RldmRhdGEuZGV2ID0gJmV2bV9zbmRfZGV2aWNlLT5kZXY7Ci0JZXZtX3NuZF9kZXZpY2UtPmRldi5wbGF0Zm9ybV9kYXRhID0gJmV2bV9zbmRfZGF0YTsKKwlwbGF0Zm9ybV9kZXZpY2VfYWRkX2RhdGEoZXZtX3NuZF9kZXZpY2UsICZldm1fc25kX2RhdGEsCisJCQkJIHNpemVvZihldm1fc25kX2RhdGEpKTsKIAogCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGRfcmVzb3VyY2VzKGV2bV9zbmRfZGV2aWNlLCBldm1fc25kX3Jlc291cmNlcywKIAkJCQkJICAgIEFSUkFZX1NJWkUoZXZtX3NuZF9yZXNvdXJjZXMpKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktaTJzLmMgYi9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLWkycy5jCmluZGV4IDBmZWU3NzkuLmZmZGI5NDMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktaTJzLmMKKysrIGIvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1pMnMuYwpAQCAtNDk5LDYgKzQ5OSwxMyBAQAogCiAjZGVmaW5lIERBVklOQ0lfSTJTX1JBVEVTCVNORFJWX1BDTV9SQVRFXzgwMDBfOTYwMDAKIAorc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgZGF2aW5jaV9pMnNfZGFpX29wcyA9IHsKKwkuc3RhcnR1cAk9IGRhdmluY2lfaTJzX3N0YXJ0dXAsCisJLnRyaWdnZXIJPSBkYXZpbmNpX2kyc190cmlnZ2VyLAorCS5od19wYXJhbXMJPSBkYXZpbmNpX2kyc19od19wYXJhbXMsCisJLnNldF9mbXQJPSBkYXZpbmNpX2kyc19zZXRfZGFpX2ZtdCwKK307CisKIHN0cnVjdCBzbmRfc29jX2RhaSBkYXZpbmNpX2kyc19kYWkgPSB7CiAJLm5hbWUgPSAiZGF2aW5jaS1pMnMiLAogCS5pZCA9IDAsCkBAIC01MTQsMTIgKzUyMSw3IEBACiAJCS5jaGFubmVsc19tYXggPSAyLAogCQkucmF0ZXMgPSBEQVZJTkNJX0kyU19SQVRFUywKIAkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSx9LAotCS5vcHMgPSB7Ci0JCS5zdGFydHVwID0gZGF2aW5jaV9pMnNfc3RhcnR1cCwKLQkJLnRyaWdnZXIgPSBkYXZpbmNpX2kyc190cmlnZ2VyLAotCQkuaHdfcGFyYW1zID0gZGF2aW5jaV9pMnNfaHdfcGFyYW1zLAotCQkuc2V0X2ZtdCA9IGRhdmluY2lfaTJzX3NldF9kYWlfZm10LAotCX0sCisJLm9wcyA9ICZkYXZpbmNpX2kyc19kYWlfb3BzLAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKGRhdmluY2lfaTJzX2RhaSk7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktcGNtLmMgYi9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLXBjbS5jCmluZGV4IDM2NjA0OWQuLjdhZjNiNWIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktcGNtLmMKKysrIGIvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1wY20uYwpAQCAtMjg2LDcgKzI4Niw3IEBACiAJCQkJICAgICBydW50aW1lLT5kbWFfYnl0ZXMpOwogfQogCi1zdHJ1Y3Qgc25kX3BjbV9vcHMgZGF2aW5jaV9wY21fb3BzID0geworc3RhdGljIHN0cnVjdCBzbmRfcGNtX29wcyBkYXZpbmNpX3BjbV9vcHMgPSB7CiAJLm9wZW4gPSAJZGF2aW5jaV9wY21fb3BlbiwKIAkuY2xvc2UgPSAJZGF2aW5jaV9wY21fY2xvc2UsCiAJLmlvY3RsID0gCXNuZF9wY21fbGliX2lvY3RsLApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1zZmZzZHIuYyBiL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktc2Zmc2RyLmMKaW5kZXggNDkzNWQxYi4uNDBlY2NmZSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1zZmZzZHIuYworKysgYi9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLXNmZnNkci5jCkBAIC0yNSw3ICsyNSw5IEBACiAKICNpbmNsdWRlIDxhc20vZG1hLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpZmRlZiBDT05GSUdfU0ZGU0RSX0ZQR0EKICNpbmNsdWRlIDxhc20vcGxhdC1zZmZzZHIvc2Zmc2RyLWZwZ2EuaD4KKyNlbmRpZgogCiAjaW5jbHVkZSA8bWFjaC9tY2JzcC5oPgogI2luY2x1ZGUgPG1hY2gvZWRtYS5oPgpAQCAtMzQsMzEgKzM2LDQ1IEBACiAjaW5jbHVkZSAiZGF2aW5jaS1wY20uaCIKICNpbmNsdWRlICJkYXZpbmNpLWkycy5oIgogCisvKgorICogQ0xLWCBhbmQgQ0xLUiBhcmUgdGhlIGlucHV0cyBmb3IgdGhlIFNhbXBsZSBSYXRlIEdlbmVyYXRvci4KKyAqIEZTWCBhbmQgRlNSIGFyZSBvdXRwdXRzLCBkcml2ZW4gYnkgdGhlIHNhbXBsZSBSYXRlIEdlbmVyYXRvci4KKyAqLworI2RlZmluZSBBVURJT19GT1JNQVQgKFNORF9TT0NfREFJRk1UX0RTUF9CIHwJXAorCQkgICAgICBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZTIHwJXAorCQkgICAgICBTTkRfU09DX0RBSUZNVF9JQl9ORikKKwogc3RhdGljIGludCBzZmZzZHJfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAotCQkJICAgIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLAotCQkJICAgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQorCQkJICAgIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zKQogewogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkgPSBydGQtPmRhaS0+Y3B1X2RhaTsKIAlpbnQgZnM7CiAJaW50IHJldCA9IDA7CiAKLQkvKiBTZXQgY3B1IERBSSBjb25maWd1cmF0aW9uOgotCSAqIENMS1ggYW5kIENMS1IgYXJlIHRoZSBpbnB1dHMgZm9yIHRoZSBTYW1wbGUgUmF0ZSBHZW5lcmF0b3IuCi0JICogRlNYIGFuZCBGU1IgYXJlIG91dHB1dHMsIGRyaXZlbiBieSB0aGUgc2FtcGxlIFJhdGUgR2VuZXJhdG9yLiAqLwotCXJldCA9IHNuZF9zb2NfZGFpX3NldF9mbXQoY3B1X2RhaSwKLQkJCQkgIFNORF9TT0NfREFJRk1UX1JJR0hUX0ogfAotCQkJCSAgU05EX1NPQ19EQUlGTVRfQ0JNX0NGUyB8Ci0JCQkJICBTTkRfU09DX0RBSUZNVF9JQl9ORik7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KIAkvKiBGc3JlZiBjYW4gYmUgMzIwMDAsIDQ0MTAwIG9yIDQ4MDAwLiAqLwogCWZzID0gcGFyYW1zX3JhdGUocGFyYW1zKTsKIAorI2lmbmRlZiBDT05GSUdfU0ZGU0RSX0ZQR0EKKwkvKiBXaXRob3V0IHRoZSBGUEdBIG1vZHVsZSwgdGhlIEZzIGlzIGZpeGVkIGF0IDQ0MTAwIEh6ICovCisJaWYgKGZzICE9IDQ0MTAwKSB7CisJCXByX2RlYnVnKCJ3YXJuaW5nOiBvbmx5IDQ0LjEga0h6IGlzIHN1cHBvcnRlZCB3aXRob3V0IFNGRlNEUiBGUEdBIG1vZHVsZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKyNlbmRpZgorCisJLyogc2V0IGNwdSBEQUkgY29uZmlndXJhdGlvbiAqLworCXJldCA9IHNuZF9zb2NfZGFpX3NldF9mbXQoY3B1X2RhaSwgQVVESU9fRk9STUFUKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwogCXByX2RlYnVnKCJzZmZzZHJfaHdfcGFyYW1zOiByYXRlID0gJWQgSHpcbiIsIGZzKTsKIAorI2lmbmRlZiBDT05GSUdfU0ZGU0RSX0ZQR0EKKwlyZXR1cm4gMDsKKyNlbHNlCiAJcmV0dXJuIHNmZnNkcl9mcGdhX3NldF9jb2RlY19mcyhmcyk7CisjZW5kaWYKIH0KIAogc3RhdGljIHN0cnVjdCBzbmRfc29jX29wcyBzZmZzZHJfb3BzID0gewpAQCAtMTI3LDcgKzE0Myw4IEBACiAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShzZmZzZHJfc25kX2RldmljZSwgJnNmZnNkcl9zbmRfZGV2ZGF0YSk7CiAJc2Zmc2RyX3NuZF9kZXZkYXRhLmRldiA9ICZzZmZzZHJfc25kX2RldmljZS0+ZGV2OwotCXNmZnNkcl9zbmRfZGV2aWNlLT5kZXYucGxhdGZvcm1fZGF0YSA9ICZzZmZzZHJfc25kX2RhdGE7CisJcGxhdGZvcm1fZGV2aWNlX2FkZF9kYXRhKHNmZnNkcl9zbmRfZGV2aWNlLCAmc2Zmc2RyX3NuZF9kYXRhLAorCQkJCSBzaXplb2Yoc2Zmc2RyX3NuZF9kYXRhKSk7CiAKIAlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX3Jlc291cmNlcyhzZmZzZHJfc25kX2RldmljZSwKIAkJCQkJICAgIHNmZnNkcl9zbmRfcmVzb3VyY2VzLApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2ZzbC9LY29uZmlnIGIvc291bmQvc29jL2ZzbC9LY29uZmlnCmluZGV4IDk1YzEyYjIuLjlmYzkwODIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9mc2wvS2NvbmZpZworKysgYi9zb3VuZC9zb2MvZnNsL0tjb25maWcKQEAgLTEsMTcgKzEsMTggQEAKIGNvbmZpZyBTTkRfU09DX09GX1NJTVBMRQogCXRyaXN0YXRlCiAKKyMgQVNvQyBwbGF0Zm9ybSBzdXBwb3J0IGZvciB0aGUgRnJlZXNjYWxlIE1QQzg2MTAgU09DLiAgVGhpcyBjb21waWxlcyBkcml2ZXJzCisjIGZvciB0aGUgU1NJIGFuZCB0aGUgRWxvIERNQSBjb250cm9sbGVyLiAgWW91IHdpbGwgc3RpbGwgbmVlZCB0byBzZWxlY3QKKyMgYSBwbGF0Zm9ybSBkcml2ZXIgYW5kIGEgY29kZWMgZHJpdmVyLgogY29uZmlnIFNORF9TT0NfTVBDODYxMAotCWJvb2wgIkFMU0EgU29DIHN1cHBvcnQgZm9yIHRoZSBNUEM4NjEwIFNPQyIKLQlkZXBlbmRzIG9uIE1QQzg2MTBfSFBDRAotCWRlZmF1bHQgeSBpZiBNUEM4NjEwCi0JaGVscAotCSAgU2F5IFkgaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIGNvZGVjcyBhdHRhY2hlZCB0byB0aGUgU1NJCi0gICAgICAgICAgZGV2aWNlIG9uIGFuIE1QQzg2MTAuCisJdHJpc3RhdGUKKwlkZXBlbmRzIG9uIE1QQzg2MTAKIAogY29uZmlnIFNORF9TT0NfTVBDODYxMF9IUENECi0JYm9vbCAiQUxTQSBTb0Mgc3VwcG9ydCBmb3IgdGhlIEZyZWVzY2FsZSBNUEM4NjEwIEhQQ0QgYm9hcmQiCi0JZGVwZW5kcyBvbiBTTkRfU09DX01QQzg2MTAKKwl0cmlzdGF0ZSAiQUxTQSBTb0Mgc3VwcG9ydCBmb3IgdGhlIEZyZWVzY2FsZSBNUEM4NjEwIEhQQ0QgYm9hcmQiCisJIyBJMkMgaXMgbmVjZXNzYXJ5IGZvciB0aGUgQ1M0MjcwIGRyaXZlcgorCWRlcGVuZHMgb24gTVBDODYxMF9IUENEICYmIEkyQworCXNlbGVjdCBTTkRfU09DX01QQzg2MTAKIAlzZWxlY3QgU05EX1NPQ19DUzQyNzAKIAlzZWxlY3QgU05EX1NPQ19DUzQyNzBfVkQzM19FUlJBVEEKIAlkZWZhdWx0IHkgaWYgTVBDODYxMF9IUENECmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvZnNsL01ha2VmaWxlIGIvc291bmQvc29jL2ZzbC9NYWtlZmlsZQppbmRleCAwMzVkYTRhLi5mODUxMzRjIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvZnNsL01ha2VmaWxlCisrKyBiL3NvdW5kL3NvYy9mc2wvTWFrZWZpbGUKQEAgLTIsMTAgKzIsMTMgQEAKIG9iai0kKENPTkZJR19TTkRfU09DX09GX1NJTVBMRSkgKz0gc29jLW9mLXNpbXBsZS5vCiAKICMgTVBDODYxMCBIUENEIE1hY2hpbmUgU3VwcG9ydAotb2JqLSQoQ09ORklHX1NORF9TT0NfTVBDODYxMF9IUENEKSArPSBtcGM4NjEwX2hwY2Qubworc25kLXNvYy1tcGM4NjEwLWhwY2Qtb2JqcyA6PSBtcGM4NjEwX2hwY2Qubworb2JqLSQoQ09ORklHX1NORF9TT0NfTVBDODYxMF9IUENEKSArPSBzbmQtc29jLW1wYzg2MTAtaHBjZC5vCiAKICMgTVBDODYxMCBQbGF0Zm9ybSBTdXBwb3J0Ci1vYmotJChDT05GSUdfU05EX1NPQ19NUEM4NjEwKSArPSBmc2xfc3NpLm8gZnNsX2RtYS5vCitzbmQtc29jLWZzbC1zc2ktb2JqcyA6PSBmc2xfc3NpLm8KK3NuZC1zb2MtZnNsLWRtYS1vYmpzIDo9IGZzbF9kbWEubworb2JqLSQoQ09ORklHX1NORF9TT0NfTVBDODYxMCkgKz0gc25kLXNvYy1mc2wtc3NpLm8gc25kLXNvYy1mc2wtZG1hLm8KIAogb2JqLSQoQ09ORklHX1NORF9TT0NfTVBDNTIwMF9JMlMpICs9IG1wYzUyMDBfcHNjX2kycy5vCiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9mc2wvZnNsX2RtYS5jIGIvc291bmQvc29jL2ZzbC9mc2xfZG1hLmMKaW5kZXggNjQ5OTNlZC4uYjNlYjg1NyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2ZzbC9mc2xfZG1hLmMKKysrIGIvc291bmQvc29jL2ZzbC9mc2xfZG1hLmMKQEAgLTE0Miw3ICsxNDIsOCBAQAogCS5pbmZvICAgCQk9IFNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVEIHwKIAkJCQkgIFNORFJWX1BDTV9JTkZPX01NQVAgfAogCQkJCSAgU05EUlZfUENNX0lORk9fTU1BUF9WQUxJRCB8Ci0JCQkJICBTTkRSVl9QQ01fSU5GT19KT0lOVF9EVVBMRVgsCisJCQkJICBTTkRSVl9QQ01fSU5GT19KT0lOVF9EVVBMRVggfAorCQkJCSAgU05EUlZfUENNX0lORk9fUEFVU0UsCiAJLmZvcm1hdHMJCT0gRlNMRE1BX1BDTV9GT1JNQVRTLAogCS5yYXRlcyAgCQk9IEZTTERNQV9QQ01fUkFURVMsCiAJLnJhdGVfbWluICAgICAgIAk9IDU1MTIsCkBAIC00NjQsMTEgKzQ2NSw3IEBACiAJCXNpemVvZihzdHJ1Y3QgZnNsX2RtYV9saW5rX2Rlc2NyaXB0b3IpOwogCiAJZm9yIChpID0gMDsgaSA8IE5VTV9ETUFfTElOS1M7IGkrKykgewotCQlzdHJ1Y3QgZnNsX2RtYV9saW5rX2Rlc2NyaXB0b3IgKmxpbmsgPSAmZG1hX3ByaXZhdGUtPmxpbmtbaV07Ci0KLQkJbGluay0+c291cmNlX2F0dHIgPSBjcHVfdG9fYmUzMihDQ1NSX0RNQV9BVFJfU05PT1ApOwotCQlsaW5rLT5kZXN0X2F0dHIgPSBjcHVfdG9fYmUzMihDQ1NSX0RNQV9BVFJfU05PT1ApOwotCQlsaW5rLT5uZXh0ID0gY3B1X3RvX2JlNjQodGVtcF9saW5rKTsKKwkJZG1hX3ByaXZhdGUtPmxpbmtbaV0ubmV4dCA9IGNwdV90b19iZTY0KHRlbXBfbGluayk7CiAKIAkJdGVtcF9saW5rICs9IHNpemVvZihzdHJ1Y3QgZnNsX2RtYV9saW5rX2Rlc2NyaXB0b3IpOwogCX0KQEAgLTUyNSw3OSArNTIyLDkgQEAKICAqIFRoaXMgZnVuY3Rpb24gb2J0YWlucyBoYXJkd2FyZSBwYXJhbWV0ZXJzIGFib3V0IHRoZSBvcGVuZWQgc3RyZWFtIGFuZAogICogcHJvZ3JhbXMgdGhlIERNQSBjb250cm9sbGVyIGFjY29yZGluZ2x5LgogICoKLSAqIE5vdGUgdGhhdCBkdWUgdG8gYSBxdWlyayBvZiB0aGUgU1NJJ3MgU1RYIHJlZ2lzdGVyLCB0aGUgdGFyZ2V0IGFkZHJlc3MKLSAqIGZvciB0aGUgRE1BIG9wZXJhdGlvbnMgZGVwZW5kcyBvbiB0aGUgc2FtcGxlIHNpemUuICBTbyB3ZSBkb24ndCBwcm9ncmFtCi0gKiB0aGUgZGVzdF9hZGRyIChmb3IgcGxheWJhY2sgLS0gc291cmNlX2FkZHIgZm9yIGNhcHR1cmUpIGZpZWxkcyBpbiB0aGUKLSAqIGxpbmsgZGVzY3JpcHRvcnMgaGVyZS4gIFdlIGRvIHRoYXQgaW4gZnNsX2RtYV9wcmVwYXJlKCkKLSAqLwotc3RhdGljIGludCBmc2xfZG1hX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKLQlzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKmh3X3BhcmFtcykKLXsKLQlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwotCXN0cnVjdCBmc2xfZG1hX3ByaXZhdGUgKmRtYV9wcml2YXRlID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOwotCi0JZG1hX2FkZHJfdCB0ZW1wX2FkZHI7ICAgLyogUG9pbnRlciB0byBuZXh0IHBlcmlvZCAqLwotCi0JdW5zaWduZWQgaW50IGk7Ci0KLQkvKiBHZXQgYWxsIHRoZSBwYXJhbWV0ZXJzIHdlIG5lZWQgKi8KLQlzaXplX3QgYnVmZmVyX3NpemUgPSBwYXJhbXNfYnVmZmVyX2J5dGVzKGh3X3BhcmFtcyk7Ci0Jc2l6ZV90IHBlcmlvZF9zaXplID0gcGFyYW1zX3BlcmlvZF9ieXRlcyhod19wYXJhbXMpOwotCi0JLyogSW5pdGlhbGl6ZSBvdXIgRE1BIHRyYWNraW5nIHZhcmlhYmxlcyAqLwotCWRtYV9wcml2YXRlLT5wZXJpb2Rfc2l6ZSA9IHBlcmlvZF9zaXplOwotCWRtYV9wcml2YXRlLT5udW1fcGVyaW9kcyA9IHBhcmFtc19wZXJpb2RzKGh3X3BhcmFtcyk7Ci0JZG1hX3ByaXZhdGUtPmRtYV9idWZfZW5kID0gZG1hX3ByaXZhdGUtPmRtYV9idWZfcGh5cyArIGJ1ZmZlcl9zaXplOwotCWRtYV9wcml2YXRlLT5kbWFfYnVmX25leHQgPSBkbWFfcHJpdmF0ZS0+ZG1hX2J1Zl9waHlzICsKLQkJKE5VTV9ETUFfTElOS1MgKiBwZXJpb2Rfc2l6ZSk7Ci0JaWYgKGRtYV9wcml2YXRlLT5kbWFfYnVmX25leHQgPj0gZG1hX3ByaXZhdGUtPmRtYV9idWZfZW5kKQotCQlkbWFfcHJpdmF0ZS0+ZG1hX2J1Zl9uZXh0ID0gZG1hX3ByaXZhdGUtPmRtYV9idWZfcGh5czsKLQotCS8qCi0JICogVGhlIGFjdHVhbCBhZGRyZXNzIGluIFNUWDAgKGRlc3RpbmF0aW9uIGZvciBwbGF5YmFjaywgc291cmNlIGZvcgotCSAqIGNhcHR1cmUpIGlzIGJhc2VkIG9uIHRoZSBzYW1wbGUgc2l6ZSwgYnV0IHdlIGRvbid0IGtub3cgdGhlIHNhbXBsZQotCSAqIHNpemUgaW4gdGhpcyBmdW5jdGlvbiwgc28gd2UnbGwgaGF2ZSB0byBhZGp1c3QgdGhhdCBsYXRlci4gIFNlZQotCSAqIGNvbW1lbnRzIGluIGZzbF9kbWFfcHJlcGFyZSgpLgotCSAqCi0JICogVGhlIERNQSBjb250cm9sbGVyIGRvZXMgbm90IGhhdmUgYSBjYWNoZSwgc28gdGhlIENQVSBkb2VzIG5vdAotCSAqIG5lZWQgdG8gdGVsbCBpdCB0byBmbHVzaCBpdHMgY2FjaGUuICBIb3dldmVyLCB0aGUgRE1BCi0JICogY29udHJvbGxlciBkb2VzIG5lZWQgdG8gdGVsbCB0aGUgQ1BVIHRvIGZsdXNoIGl0cyBjYWNoZS4KLQkgKiBUaGF0J3Mgd2hhdCB0aGUgU05PT1AgYml0IGRvZXMuCi0JICoKLQkgKiBBbHNvLCBldmVuIHRob3VnaCB0aGUgRE1BIGNvbnRyb2xsZXIgc3VwcG9ydHMgMzYtYml0IGFkZHJlc3NpbmcsIGZvcgotCSAqIHNpbXBsaWNpdHkgd2UgY3VycmVudGx5IHN1cHBvcnQgb25seSAzMi1iaXQgYWRkcmVzc2VzIGZvciB0aGUgYXVkaW8KLQkgKiBidWZmZXIgaXRzZWxmLgotCSAqLwotCXRlbXBfYWRkciA9IHN1YnN0cmVhbS0+ZG1hX2J1ZmZlci5hZGRyOwotCi0JZm9yIChpID0gMDsgaSA8IE5VTV9ETUFfTElOS1M7IGkrKykgewotCQlzdHJ1Y3QgZnNsX2RtYV9saW5rX2Rlc2NyaXB0b3IgKmxpbmsgPSAmZG1hX3ByaXZhdGUtPmxpbmtbaV07Ci0KLQkJbGluay0+Y291bnQgPSBjcHVfdG9fYmUzMihwZXJpb2Rfc2l6ZSk7Ci0KLQkJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCi0JCQlsaW5rLT5zb3VyY2VfYWRkciA9IGNwdV90b19iZTMyKHRlbXBfYWRkcik7Ci0JCWVsc2UKLQkJCWxpbmstPmRlc3RfYWRkciA9IGNwdV90b19iZTMyKHRlbXBfYWRkcik7Ci0KLQkJdGVtcF9hZGRyICs9IHBlcmlvZF9zaXplOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKioKLSAqIGZzbF9kbWFfcHJlcGFyZSAtIHByZXBhcmUgdGhlIERNQSByZWdpc3RlcnMgZm9yIHBsYXliYWNrLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFmdGVyIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIGF1ZGlvIGRhdGEgYXJlIGtub3duLAotICogaS5lLiBzbmRfcGNtX3J1bnRpbWUgaXMgaW5pdGlhbGl6ZWQuCi0gKgotICogSW4gdGhpcyBmdW5jdGlvbiwgd2UgZmluaXNoIHByb2dyYW1taW5nIHRoZSByZWdpc3RlcnMgb2YgdGhlIERNQQotICogY29udHJvbGxlciB0aGF0IGFyZSBkZXBlbmRlbnQgb24gdGhlIHNhbXBsZSBzaXplLgotICoKLSAqIE9uZSBvZiB0aGUgZHJhd2JhY2tzIHdpdGggYmlnLWVuZGlhbiBpcyB0aGF0IHdoZW4gY29weWluZyBpbnRlZ2VycyBvZgotICogZGlmZmVyZW50IHNpemVzIHRvIGEgZml4ZWQtc2l6ZWQgcmVnaXN0ZXIsIHRoZSBhZGRyZXNzIHRvIHdoaWNoIHRoZQotICogaW50ZWdlciBtdXN0IGJlIGNvcGllZCBpcyBkZXBlbmRlbnQgb24gdGhlIHNpemUgb2YgdGhlIGludGVnZXIuCisgKiBPbmUgZHJhd2JhY2sgb2YgYmlnLWVuZGlhbiBpcyB0aGF0IHdoZW4gY29weWluZyBpbnRlZ2VycyBvZiBkaWZmZXJlbnQKKyAqIHNpemVzIHRvIGEgZml4ZWQtc2l6ZWQgcmVnaXN0ZXIsIHRoZSBhZGRyZXNzIHRvIHdoaWNoIHRoZSBpbnRlZ2VyIG11c3QgYmUKKyAqIGNvcGllZCBpcyBkZXBlbmRlbnQgb24gdGhlIHNpemUgb2YgdGhlIGludGVnZXIuCiAgKgogICogRm9yIGV4YW1wbGUsIGlmIFAgaXMgdGhlIGFkZHJlc3Mgb2YgYSAzMi1iaXQgcmVnaXN0ZXIsIGFuZCBYIGlzIGEgMzItYml0CiAgKiBpbnRlZ2VyLCB0aGVuIFggc2hvdWxkIGJlIGNvcGllZCB0byBhZGRyZXNzIFAuICBIb3dldmVyLCBpZiBYIGlzIGEgMTYtYml0CkBAIC02MTMsMjIgKzU0MCw1OCBAQAogICogYW5kIDggYnl0ZXMgYXQgYSB0aW1lKS4gIFNvIHdlIGRvIG5vdCBzdXBwb3J0IHBhY2tlZCAyNC1iaXQgc2FtcGxlcy4KICAqIDI0LWJpdCBkYXRhIG11c3QgYmUgcGFkZGVkIHRvIDMyIGJpdHMuCiAgKi8KLXN0YXRpYyBpbnQgZnNsX2RtYV9wcmVwYXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQorc3RhdGljIGludCBmc2xfZG1hX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwlzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKmh3X3BhcmFtcykKIHsKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwogCXN0cnVjdCBmc2xfZG1hX3ByaXZhdGUgKmRtYV9wcml2YXRlID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBjY3NyX2RtYV9jaGFubmVsIF9faW9tZW0gKmRtYV9jaGFubmVsID0gZG1hX3ByaXZhdGUtPmRtYV9jaGFubmVsOwotCXUzMiBtcjsKLQl1bnNpZ25lZCBpbnQgaTsKLQlkbWFfYWRkcl90IHNzaV9zeHhfcGh5czsJLyogQnVzIGFkZHJlc3Mgb2YgU1NJIFNUWCByZWdpc3RlciAqLwotCXVuc2lnbmVkIGludCBmcmFtZV9zaXplOwkvKiBOdW1iZXIgb2YgYnl0ZXMgcGVyIGZyYW1lICovCiAKLQlzc2lfc3h4X3BoeXMgPSBkbWFfcHJpdmF0ZS0+c3NpX3N4eF9waHlzOworCS8qIE51bWJlciBvZiBiaXRzIHBlciBzYW1wbGUgKi8KKwl1bnNpZ25lZCBpbnQgc2FtcGxlX3NpemUgPQorCQlzbmRfcGNtX2Zvcm1hdF9waHlzaWNhbF93aWR0aChwYXJhbXNfZm9ybWF0KGh3X3BhcmFtcykpOworCisJLyogTnVtYmVyIG9mIGJ5dGVzIHBlciBmcmFtZSAqLworCXVuc2lnbmVkIGludCBmcmFtZV9zaXplID0gMiAqIChzYW1wbGVfc2l6ZSAvIDgpOworCisJLyogQnVzIGFkZHJlc3Mgb2YgU1NJIFNUWCByZWdpc3RlciAqLworCWRtYV9hZGRyX3Qgc3NpX3N4eF9waHlzID0gZG1hX3ByaXZhdGUtPnNzaV9zeHhfcGh5czsKKworCS8qIFNpemUgb2YgdGhlIERNQSBidWZmZXIsIGluIGJ5dGVzICovCisJc2l6ZV90IGJ1ZmZlcl9zaXplID0gcGFyYW1zX2J1ZmZlcl9ieXRlcyhod19wYXJhbXMpOworCisJLyogTnVtYmVyIG9mIGJ5dGVzIHBlciBwZXJpb2QgKi8KKwlzaXplX3QgcGVyaW9kX3NpemUgPSBwYXJhbXNfcGVyaW9kX2J5dGVzKGh3X3BhcmFtcyk7CisKKwkvKiBQb2ludGVyIHRvIG5leHQgcGVyaW9kICovCisJZG1hX2FkZHJfdCB0ZW1wX2FkZHIgPSBzdWJzdHJlYW0tPmRtYV9idWZmZXIuYWRkcjsKKworCS8qIFBvaW50ZXIgdG8gRE1BIGNvbnRyb2xsZXIgKi8KKwlzdHJ1Y3QgY2Nzcl9kbWFfY2hhbm5lbCBfX2lvbWVtICpkbWFfY2hhbm5lbCA9IGRtYV9wcml2YXRlLT5kbWFfY2hhbm5lbDsKKworCXUzMiBtcjsgLyogRE1BIE1vZGUgUmVnaXN0ZXIgKi8KKworCXVuc2lnbmVkIGludCBpOworCisJLyogSW5pdGlhbGl6ZSBvdXIgRE1BIHRyYWNraW5nIHZhcmlhYmxlcyAqLworCWRtYV9wcml2YXRlLT5wZXJpb2Rfc2l6ZSA9IHBlcmlvZF9zaXplOworCWRtYV9wcml2YXRlLT5udW1fcGVyaW9kcyA9IHBhcmFtc19wZXJpb2RzKGh3X3BhcmFtcyk7CisJZG1hX3ByaXZhdGUtPmRtYV9idWZfZW5kID0gZG1hX3ByaXZhdGUtPmRtYV9idWZfcGh5cyArIGJ1ZmZlcl9zaXplOworCWRtYV9wcml2YXRlLT5kbWFfYnVmX25leHQgPSBkbWFfcHJpdmF0ZS0+ZG1hX2J1Zl9waHlzICsKKwkJKE5VTV9ETUFfTElOS1MgKiBwZXJpb2Rfc2l6ZSk7CisKKwlpZiAoZG1hX3ByaXZhdGUtPmRtYV9idWZfbmV4dCA+PSBkbWFfcHJpdmF0ZS0+ZG1hX2J1Zl9lbmQpCisJCS8qIFRoaXMgaGFwcGVucyBpZiB0aGUgbnVtYmVyIG9mIHBlcmlvZHMgPT0gTlVNX0RNQV9MSU5LUyAqLworCQlkbWFfcHJpdmF0ZS0+ZG1hX2J1Zl9uZXh0ID0gZG1hX3ByaXZhdGUtPmRtYV9idWZfcGh5czsKIAogCW1yID0gaW5fYmUzMigmZG1hX2NoYW5uZWwtPm1yKSAmIH4oQ0NTUl9ETUFfTVJfQldDX01BU0sgfAogCQkgIENDU1JfRE1BX01SX1NBSFRTX01BU0sgfCBDQ1NSX0RNQV9NUl9EQUhUU19NQVNLKTsKIAotCXN3aXRjaCAocnVudGltZS0+c2FtcGxlX2JpdHMpIHsKKwkvKiBEdWUgdG8gYSBxdWlyayBvZiB0aGUgU1NJJ3MgU1RYIHJlZ2lzdGVyLCB0aGUgdGFyZ2V0IGFkZHJlc3MKKwkgKiBmb3IgdGhlIERNQSBvcGVyYXRpb25zIGRlcGVuZHMgb24gdGhlIHNhbXBsZSBzaXplLiAgU28gd2UgY2FsY3VsYXRlCisJICogdGhhdCBvZmZzZXQgaGVyZS4gIFdoaWxlIHdlJ3JlIGF0IGl0LCBhbHNvIHRlbGwgdGhlIERNQSBjb250cm9sbGVyCisJICogaG93IG11Y2ggZGF0YSB0byB0cmFuc2ZlciBwZXIgc2FtcGxlLgorCSAqLworCXN3aXRjaCAoc2FtcGxlX3NpemUpIHsKIAljYXNlIDg6CiAJCW1yIHw9IENDU1JfRE1BX01SX0RBSFRTXzEgfCBDQ1NSX0RNQV9NUl9TQUhUU18xOwogCQlzc2lfc3h4X3BoeXMgKz0gMzsKQEAgLTY0MSwxMiArNjA0LDEyIEBACiAJCW1yIHw9IENDU1JfRE1BX01SX0RBSFRTXzQgfCBDQ1NSX0RNQV9NUl9TQUhUU180OwogCQlicmVhazsKIAlkZWZhdWx0OgorCQkvKiBXZSBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUgKi8KIAkJZGV2X2VycihzdWJzdHJlYW0tPnBjbS0+Y2FyZC0+ZGV2LAotCQkJInVuc3VwcG9ydGVkIHNhbXBsZSBzaXplICV1XG4iLCBydW50aW1lLT5zYW1wbGVfYml0cyk7CisJCQkidW5zdXBwb3J0ZWQgc2FtcGxlIHNpemUgJXVcbiIsIHNhbXBsZV9zaXplKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JZnJhbWVfc2l6ZSA9IHJ1bnRpbWUtPmZyYW1lX2JpdHMgLyA4OwogCS8qCiAJICogQldDIHNob3VsZCBhbHdheXMgYmUgYSBtdWx0aXBsZSBvZiB0aGUgZnJhbWUgc2l6ZS4gIEJXQyBkZXRlcm1pbmVzCiAJICogaG93IG1hbnkgYnl0ZXMgYXJlIHNlbnQvcmVjZWl2ZWQgYmVmb3JlIHRoZSBETUEgY29udHJvbGxlciBjaGVja3MgdGhlCkBAIC02NTUsNyArNjE4LDYgQEAKIAkgKiBjYXB0dXJlLCB0aGUgcmVjZWl2ZSBGSUZPIGlzIHRyaWdnZXJlZCB3aGVuIGl0IGNvbnRhaW5zIG9uZSBmcmFtZSwgc28KIAkgKiB3ZSB3YW50IHRvIHJlY2VpdmUgb25lIGZyYW1lIGF0IGEgdGltZS4KIAkgKi8KLQogCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKQogCQltciB8PSBDQ1NSX0RNQV9NUl9CV0MoMiAqIGZyYW1lX3NpemUpOwogCWVsc2UKQEAgLTY2MywxNiArNjI1LDQ4IEBACiAKIAlvdXRfYmUzMigmZG1hX2NoYW5uZWwtPm1yLCBtcik7CiAKLQkvKgotCSAqIFByb2dyYW0gdGhlIGFkZHJlc3Mgb2YgdGhlIERNQSB0cmFuc2ZlciB0by9mcm9tIHRoZSBTU0kuCi0JICovCiAJZm9yIChpID0gMDsgaSA8IE5VTV9ETUFfTElOS1M7IGkrKykgewogCQlzdHJ1Y3QgZnNsX2RtYV9saW5rX2Rlc2NyaXB0b3IgKmxpbmsgPSAmZG1hX3ByaXZhdGUtPmxpbmtbaV07CiAKLQkJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCisJCWxpbmstPmNvdW50ID0gY3B1X3RvX2JlMzIocGVyaW9kX3NpemUpOworCisJCS8qIEV2ZW4gdGhvdWdoIHRoZSBETUEgY29udHJvbGxlciBzdXBwb3J0cyAzNi1iaXQgYWRkcmVzc2luZywKKwkJICogZm9yIHNpbXBsaWNpdHkgd2UgYWxsb3cgb25seSAzMi1iaXQgYWRkcmVzc2VzIGZvciB0aGUgYXVkaW8KKwkJICogYnVmZmVyIGl0c2VsZi4gIFRoaXMgd2FzIGVuZm9yY2VkIGluIGZzbF9kbWFfbmV3KCkgd2l0aCB0aGUKKwkJICogRE1BIG1hc2suCisJCSAqCisJCSAqIFRoZSBzbm9vcCBiaXQgdGVsbHMgdGhlIERNQSBjb250cm9sbGVyIHdoZXRoZXIgaXQgc2hvdWxkIHRlbGwKKwkJICogdGhlIEVDTSB0byBzbm9vcCBkdXJpbmcgYSByZWFkIG9yIHdyaXRlIHRvIGFuIGFkZHJlc3MuIEZvcgorCQkgKiBhdWRpbywgd2UgdXNlIERNQSB0byB0cmFuc2ZlciBkYXRhIGJldHdlZW4gbWVtb3J5IGFuZCBhbiBJL08KKwkJICogZGV2aWNlICh0aGUgU1NJJ3MgU1RYMCBvciBTUlgwIHJlZ2lzdGVyKS4gU25vb3BpbmcgaXMgb25seQorCQkgKiBuZWVkZWQgaWYgdGhlcmUgaXMgYSBjYWNoZSwgc28gd2UgbmVlZCB0byBzbm9vcCBtZW1vcnkKKwkJICogYWRkcmVzc2VzIG9ubHkuICBGb3IgcGxheWJhY2ssIHRoYXQgbWVhbnMgd2Ugc25vb3AgdGhlIHNvdXJjZQorCQkgKiBidXQgbm90IHRoZSBkZXN0aW5hdGlvbi4gIEZvciBjYXB0dXJlLCB3ZSBzbm9vcCB0aGUKKwkJICogZGVzdGluYXRpb24gYnV0IG5vdCB0aGUgc291cmNlLgorCQkgKgorCQkgKiBOb3RlIHRoYXQgZmFpbGluZyB0byBzbm9vcCBwcm9wZXJseSBpcyB1bmxpa2VseSB0byBjYXVzZQorCQkgKiBjYWNoZSBpbmNvaGVyZW5jeSBpZiB0aGUgcGVyaW9kIHNpemUgaXMgbGFyZ2VyIHRoYW4gdGhlCisJCSAqIHNpemUgb2YgTDEgY2FjaGUuICBUaGlzIGlzIGJlY2F1c2UgZmlsbGluZyBpbiBvbmUgcGVyaW9kIHdpbGwKKwkJICogZmx1c2ggb3V0IHRoZSBkYXRhIGZvciB0aGUgcHJldmlvdXMgcGVyaW9kLiAgU28gaWYgeW91CisJCSAqIGluY3JlYXNlZCBwZXJpb2RfYnl0ZXNfbWluIHRvIGEgbGFyZ2UgZW5vdWdoIHNpemUsIHlvdSBtaWdodAorCQkgKiBnZXQgbW9yZSBwZXJmb3JtYW5jZSBieSBub3Qgc25vb3BpbmcsIGFuZCB5b3UnbGwgc3RpbGwgYmUKKwkJICogb2theS4KKwkJICovCisJCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKSB7CisJCQlsaW5rLT5zb3VyY2VfYWRkciA9IGNwdV90b19iZTMyKHRlbXBfYWRkcik7CisJCQlsaW5rLT5zb3VyY2VfYXR0ciA9IGNwdV90b19iZTMyKENDU1JfRE1BX0FUUl9TTk9PUCk7CisKIAkJCWxpbmstPmRlc3RfYWRkciA9IGNwdV90b19iZTMyKHNzaV9zeHhfcGh5cyk7Ci0JCWVsc2UKKwkJCWxpbmstPmRlc3RfYXR0ciA9IGNwdV90b19iZTMyKENDU1JfRE1BX0FUUl9OT1NOT09QKTsKKwkJfSBlbHNlIHsKIAkJCWxpbmstPnNvdXJjZV9hZGRyID0gY3B1X3RvX2JlMzIoc3NpX3N4eF9waHlzKTsKKwkJCWxpbmstPnNvdXJjZV9hdHRyID0gY3B1X3RvX2JlMzIoQ0NTUl9ETUFfQVRSX05PU05PT1ApOworCisJCQlsaW5rLT5kZXN0X2FkZHIgPSBjcHVfdG9fYmUzMih0ZW1wX2FkZHIpOworCQkJbGluay0+ZGVzdF9hdHRyID0gY3B1X3RvX2JlMzIoQ0NTUl9ETUFfQVRSX1NOT09QKTsKKwkJfQorCisJCXRlbXBfYWRkciArPSBwZXJpb2Rfc2l6ZTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTgwOCw3ICs4MDIsNiBAQAogCS5pb2N0bCAgCT0gc25kX3BjbV9saWJfaW9jdGwsCiAJLmh3X3BhcmFtcyAgICAgID0gZnNsX2RtYV9od19wYXJhbXMsCiAJLmh3X2ZyZWUJPSBmc2xfZG1hX2h3X2ZyZWUsCi0JLnByZXBhcmUJPSBmc2xfZG1hX3ByZXBhcmUsCiAJLnBvaW50ZXIJPSBmc2xfZG1hX3BvaW50ZXIsCiB9OwogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvZnNsL2ZzbF9zc2kuYyBiL3NvdW5kL3NvYy9mc2wvZnNsX3NzaS5jCmluZGV4IGM2ZDZlYjcuLjE2OWJjYTIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9mc2wvZnNsX3NzaS5jCisrKyBiL3NvdW5kL3NvYy9mc2wvZnNsX3NzaS5jCkBAIC03Miw2ICs3Miw3IEBACiAgKiBAZGV2OiBzdHJ1Y3QgZGV2aWNlIHBvaW50ZXIKICAqIEBwbGF5YmFjazogdGhlIG51bWJlciBvZiBwbGF5YmFjayBzdHJlYW1zIG9wZW5lZAogICogQGNhcHR1cmU6IHRoZSBudW1iZXIgb2YgY2FwdHVyZSBzdHJlYW1zIG9wZW5lZAorICogQGFzeW5jaHJvbm91czogMD1zeW5jaHJvbm91cyBtb2RlLCAxPWFzeW5jaHJvbm91cyBtb2RlCiAgKiBAY3B1X2RhaTogdGhlIENQVSBEQUkgZm9yIHRoaXMgZGV2aWNlCiAgKiBAZGV2X2F0dHI6IHRoZSBzeXNmcyBkZXZpY2UgYXR0cmlidXRlIHN0cnVjdHVyZQogICogQHN0YXRzOiBTU0kgc3RhdGlzdGljcwpAQCAtODYsNiArODcsNyBAQAogCXN0cnVjdCBkZXZpY2UgKmRldjsKIAl1bnNpZ25lZCBpbnQgcGxheWJhY2s7CiAJdW5zaWduZWQgaW50IGNhcHR1cmU7CisJaW50IGFzeW5jaHJvbm91czsKIAlzdHJ1Y3Qgc25kX3NvY19kYWkgY3B1X2RhaTsKIAlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBkZXZfYXR0cjsKIApAQCAtMzAxLDkgKzMwMywxMCBAQAogCQkgKgogCQkgKiBGSVhNRTogTGl0dGxlLWVuZGlhbiBzYW1wbGVzIHJlcXVpcmUgYSBkaWZmZXJlbnQgc2hpZnQgZGlyCiAJCSAqLwotCQljbHJzZXRiaXRzX2JlMzIoJnNzaS0+c2NyLCBDQ1NSX1NTSV9TQ1JfSTJTX01PREVfTUFTSywKLQkJCUNDU1JfU1NJX1NDUl9URlJfQ0xLX0RJUyB8Ci0JCQlDQ1NSX1NTSV9TQ1JfSTJTX01PREVfU0xBVkUgfCBDQ1NSX1NTSV9TQ1JfU1lOKTsKKwkJY2xyc2V0Yml0c19iZTMyKCZzc2ktPnNjciwKKwkJCUNDU1JfU1NJX1NDUl9JMlNfTU9ERV9NQVNLIHwgQ0NTUl9TU0lfU0NSX1NZTiwKKwkJCUNDU1JfU1NJX1NDUl9URlJfQ0xLX0RJUyB8IENDU1JfU1NJX1NDUl9JMlNfTU9ERV9TTEFWRQorCQkJfCAoc3NpX3ByaXZhdGUtPmFzeW5jaHJvbm91cyA/IDAgOiBDQ1NSX1NTSV9TQ1JfU1lOKSk7CiAKIAkJb3V0X2JlMzIoJnNzaS0+c3RjciwKIAkJCSBDQ1NSX1NTSV9TVENSX1RYQklUMCB8IENDU1JfU1NJX1NUQ1JfVEZFTjAgfApAQCAtMzgyLDEwICszODUsMTUgQEAKIAkJCVNORFJWX1BDTV9IV19QQVJBTV9SQVRFLAogCQkJZmlyc3RfcnVudGltZS0+cmF0ZSwgZmlyc3RfcnVudGltZS0+cmF0ZSk7CiAKLQkJc25kX3BjbV9od19jb25zdHJhaW50X21pbm1heChzdWJzdHJlYW0tPnJ1bnRpbWUsCi0JCQlTTkRSVl9QQ01fSFdfUEFSQU1fU0FNUExFX0JJVFMsCi0JCQlmaXJzdF9ydW50aW1lLT5zYW1wbGVfYml0cywKLQkJCWZpcnN0X3J1bnRpbWUtPnNhbXBsZV9iaXRzKTsKKwkJLyogSWYgd2UncmUgaW4gc3luY2hyb25vdXMgbW9kZSwgdGhlbiB3ZSBuZWVkIHRvIGNvbnN0cmFpbgorCQkgKiB0aGUgc2FtcGxlIHNpemUgYXMgd2VsbC4gIFdlIGRvbid0IHN1cHBvcnQgaW5kZXBlbmRlbnQgc2FtcGxlCisJCSAqIHJhdGVzIGluIGFzeW5jaHJvbm91cyBtb2RlLgorCQkgKi8KKwkJaWYgKCFzc2lfcHJpdmF0ZS0+YXN5bmNocm9ub3VzKQorCQkJc25kX3BjbV9od19jb25zdHJhaW50X21pbm1heChzdWJzdHJlYW0tPnJ1bnRpbWUsCisJCQkJU05EUlZfUENNX0hXX1BBUkFNX1NBTVBMRV9CSVRTLAorCQkJCWZpcnN0X3J1bnRpbWUtPnNhbXBsZV9iaXRzLAorCQkJCWZpcnN0X3J1bnRpbWUtPnNhbXBsZV9iaXRzKTsKIAogCQlzc2lfcHJpdmF0ZS0+c2Vjb25kX3N0cmVhbSA9IHN1YnN0cmVhbTsKIAl9CkBAIC00MDAsNyArNDA4LDcgQEAKIH0KIAogLyoqCi0gKiBmc2xfc3NpX3ByZXBhcmU6IHByZXBhcmUgdGhlIFNTSS4KKyAqIGZzbF9zc2lfaHdfcGFyYW1zIC0gcHJvZ3JhbSB0aGUgc2FtcGxlIHNpemUKICAqCiAgKiBNb3N0IG9mIHRoZSBTU0kgcmVnaXN0ZXJzIGhhdmUgYmVlbiBwcm9ncmFtbWVkIGluIHRoZSBzdGFydHVwIGZ1bmN0aW9uLAogICogYnV0IHRoZSB3b3JkIGxlbmd0aCBtdXN0IGJlIHByb2dyYW1tZWQgaGVyZS4gIFVuZm9ydHVuYXRlbHksIHByb2dyYW1taW5nCkBAIC00MTIsMjMgKzQyMCwyNyBAQAogICogTm90ZTogVGhlIFN4Q0NSLkRDIGFuZCBTeENDUi5QTSBiaXRzIGFyZSBvbmx5IHVzZWQgaWYgdGhlIFNTSSBpcyB0aGUKICAqIGNsb2NrIG1hc3Rlci4KICAqLwotc3RhdGljIGludCBmc2xfc3NpX3ByZXBhcmUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCi0JCQkgICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3N0YXRpYyBpbnQgZnNsX3NzaV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpod19wYXJhbXMsIHN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSkKIHsKLQlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwotCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgZnNsX3NzaV9wcml2YXRlICpzc2lfcHJpdmF0ZSA9IHJ0ZC0+ZGFpLT5jcHVfZGFpLT5wcml2YXRlX2RhdGE7Ci0KLQlzdHJ1Y3QgY2Nzcl9zc2kgX19pb21lbSAqc3NpID0gc3NpX3ByaXZhdGUtPnNzaTsKKwlzdHJ1Y3QgZnNsX3NzaV9wcml2YXRlICpzc2lfcHJpdmF0ZSA9IGNwdV9kYWktPnByaXZhdGVfZGF0YTsKIAogCWlmIChzdWJzdHJlYW0gPT0gc3NpX3ByaXZhdGUtPmZpcnN0X3N0cmVhbSkgewotCQl1MzIgd2w7CisJCXN0cnVjdCBjY3NyX3NzaSBfX2lvbWVtICpzc2kgPSBzc2lfcHJpdmF0ZS0+c3NpOworCQl1bnNpZ25lZCBpbnQgc2FtcGxlX3NpemUgPQorCQkJc25kX3BjbV9mb3JtYXRfd2lkdGgocGFyYW1zX2Zvcm1hdChod19wYXJhbXMpKTsKKwkJdTMyIHdsID0gQ0NTUl9TU0lfU3hDQ1JfV0woc2FtcGxlX3NpemUpOwogCiAJCS8qIFRoZSBTU0kgc2hvdWxkIGFsd2F5cyBiZSBkaXNhYmxlZCBhdCB0aGlzIHBvaW50cyAoU1NJRU49MCkgKi8KLQkJd2wgPSBDQ1NSX1NTSV9TeENDUl9XTChzbmRfcGNtX2Zvcm1hdF93aWR0aChydW50aW1lLT5mb3JtYXQpKTsKIAogCQkvKiBJbiBzeW5jaHJvbm91cyBtb2RlLCB0aGUgU1NJIHVzZXMgU1RDQ1IgZm9yIGNhcHR1cmUgKi8KLQkJY2xyc2V0Yml0c19iZTMyKCZzc2ktPnN0Y2NyLCBDQ1NSX1NTSV9TeENDUl9XTF9NQVNLLCB3bCk7CisJCWlmICgoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykgfHwKKwkJICAgICFzc2lfcHJpdmF0ZS0+YXN5bmNocm9ub3VzKQorCQkJY2xyc2V0Yml0c19iZTMyKCZzc2ktPnN0Y2NyLAorCQkJCQlDQ1NSX1NTSV9TeENDUl9XTF9NQVNLLCB3bCk7CisJCWVsc2UKKwkJCWNscnNldGJpdHNfYmUzMigmc3NpLT5zcmNjciwKKwkJCQkJQ0NTUl9TU0lfU3hDQ1JfV0xfTUFTSywgd2wpOwogCX0KIAogCXJldHVybiAwOwpAQCAtNDUyLDI4ICs0NjQsMzMgQEAKIAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKLQljYXNlIFNORFJWX1BDTV9UUklHR0VSX1JFU1VNRToKKwkJY2xyYml0czMyKCZzc2ktPnNjciwgQ0NTUl9TU0lfU0NSX1NTSUVOKTsKIAljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1JFTEVBU0U6CiAJCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKSB7Ci0JCQljbHJiaXRzMzIoJnNzaS0+c2NyLCBDQ1NSX1NTSV9TQ1JfU1NJRU4pOwogCQkJc2V0Yml0czMyKCZzc2ktPnNjciwKIAkJCQlDQ1NSX1NTSV9TQ1JfU1NJRU4gfCBDQ1NSX1NTSV9TQ1JfVEUpOwogCQl9IGVsc2UgewotCQkJY2xyYml0czMyKCZzc2ktPnNjciwgQ0NTUl9TU0lfU0NSX1NTSUVOKTsKKwkJCWxvbmcgdGltZW91dCA9IGppZmZpZXMgKyAxMDsKKwogCQkJc2V0Yml0czMyKCZzc2ktPnNjciwKIAkJCQlDQ1NSX1NTSV9TQ1JfU1NJRU4gfCBDQ1NSX1NTSV9TQ1JfUkUpOwogCi0JCQkvKgotCQkJICogSSB0aGluayB3ZSBuZWVkIHRoaXMgZGVsYXkgdG8gYWxsb3cgdGltZSBmb3IgdGhlIFNTSQotCQkJICogdG8gcHV0IGRhdGEgaW50byBpdHMgRklGTy4gIFdpdGhvdXQgaXQsIEFMU0Egc3RhcnRzCi0JCQkgKiB0byBjb21wbGFpbiBhYm91dCBvdmVycnVucy4KKwkJCS8qIFdhaXQgdW50aWwgdGhlIFNTSSBoYXMgZmlsbGVkIGl0cyBGSUZPLiBXaXRob3V0IHRoaXMKKwkJCSAqIGRlbGF5LCBBTFNBIGNvbXBsYWlucyBhYm91dCBvdmVycnVucy4gIFdoZW4gdGhlIEZJRk8KKwkJCSAqIGlzIGZ1bGwsIHRoZSBETUEgY29udHJvbGxlciBpbml0aWF0ZXMgaXRzIGZpcnN0CisJCQkgKiB0cmFuc2Zlci4gIFVudGlsIHRoZW4sIGhvd2V2ZXIsIHRoZSBETUEncyBEQVIKKwkJCSAqIHJlZ2lzdGVyIGlzIHplcm8sIHdoaWNoIHRyYW5zbGF0ZXMgdG8gYW4KKwkJCSAqIG91dC1vZi1ib3VuZHMgcG9pbnRlci4gIFRoaXMgbWFrZXMgQUxTQSB0aGluayBhbgorCQkJICogb3ZlcnJ1biBoYXMgb2NjdXJyZWQuCiAJCQkgKi8KLQkJCW1kZWxheSgxKTsKKwkJCXdoaWxlICghKGluX2JlMzIoJnNzaS0+c2lzcikgJiBDQ1NSX1NTSV9TSVNSX1JGRjApICYmCisJCQkgICAgICAgKGppZmZpZXMgPCB0aW1lb3V0KSk7CisJCQlpZiAoIShpbl9iZTMyKCZzc2ktPnNpc3IpICYgQ0NTUl9TU0lfU0lTUl9SRkYwKSkKKwkJCQlyZXR1cm4gLUVJTzsKIAkJfQogCQlicmVhazsKIAogCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKLQljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NVU1BFTkQ6CiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9QVVNIOgogCQlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKIAkJCWNscmJpdHMzMigmc3NpLT5zY3IsIENDU1JfU1NJX1NDUl9URSk7CkBAIC01NjMsNiArNTgwLDE1IEBACiAvKioKICAqIGZzbF9zc2lfZGFpX3RlbXBsYXRlOiB0ZW1wbGF0ZSBDUFUgREFJIGZvciB0aGUgU1NJCiAgKi8KK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIGZzbF9zc2lfZGFpX29wcyA9IHsKKwkuc3RhcnR1cAk9IGZzbF9zc2lfc3RhcnR1cCwKKwkuaHdfcGFyYW1zCT0gZnNsX3NzaV9od19wYXJhbXMsCisJLnNodXRkb3duCT0gZnNsX3NzaV9zaHV0ZG93biwKKwkudHJpZ2dlcgk9IGZzbF9zc2lfdHJpZ2dlciwKKwkuc2V0X3N5c2Nsawk9IGZzbF9zc2lfc2V0X3N5c2NsaywKKwkuc2V0X2ZtdAk9IGZzbF9zc2lfc2V0X2ZtdCwKK307CisKIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWkgZnNsX3NzaV9kYWlfdGVtcGxhdGUgPSB7CiAJLnBsYXliYWNrID0gewogCQkvKiBUaGUgU1NJIGRvZXMgbm90IHN1cHBvcnQgbW9uYXVyYWwgYXVkaW8uICovCkBAIC01NzcsMTQgKzYwMyw3IEBACiAJCS5yYXRlcyA9IEZTTFNTSV9JMlNfUkFURVMsCiAJCS5mb3JtYXRzID0gRlNMU1NJX0kyU19GT1JNQVRTLAogCX0sCi0JLm9wcyA9IHsKLQkJLnN0YXJ0dXAgPSBmc2xfc3NpX3N0YXJ0dXAsCi0JCS5wcmVwYXJlID0gZnNsX3NzaV9wcmVwYXJlLAotCQkuc2h1dGRvd24gPSBmc2xfc3NpX3NodXRkb3duLAotCQkudHJpZ2dlciA9IGZzbF9zc2lfdHJpZ2dlciwKLQkJLnNldF9zeXNjbGsgPSBmc2xfc3NpX3NldF9zeXNjbGssCi0JCS5zZXRfZm10ID0gZnNsX3NzaV9zZXRfZm10LAotCX0sCisJLm9wcyA9ICZmc2xfc3NpX2RhaV9vcHMsCiB9OwogCiAvKioKQEAgLTY1NCw2ICs2NzMsNyBAQAogCXNzaV9wcml2YXRlLT5zc2lfcGh5cyA9IHNzaV9pbmZvLT5zc2lfcGh5czsKIAlzc2lfcHJpdmF0ZS0+aXJxID0gc3NpX2luZm8tPmlycTsKIAlzc2lfcHJpdmF0ZS0+ZGV2ID0gc3NpX2luZm8tPmRldjsKKwlzc2lfcHJpdmF0ZS0+YXN5bmNocm9ub3VzID0gc3NpX2luZm8tPmFzeW5jaHJvbm91czsKIAogCXNzaV9wcml2YXRlLT5kZXYtPmRyaXZlcl9kYXRhID0gZnNsX3NzaV9kYWk7CiAKQEAgLTcwNCw2ICs3MjQsMTQgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGZzbF9zc2lfZGVzdHJveV9kYWkpOwogCitzdGF0aWMgaW50IF9faW5pdCBmc2xfc3NpX2luaXQodm9pZCkKK3sKKwlwcmludGsoS0VSTl9JTkZPICJGcmVlc2NhbGUgU3luY2hyb25vdXMgU2VyaWFsIEludGVyZmFjZSAoU1NJKSBBU29DIERyaXZlclxuIik7CisKKwlyZXR1cm4gMDsKK30KK21vZHVsZV9pbml0KGZzbF9zc2lfaW5pdCk7CisKIE1PRFVMRV9BVVRIT1IoIlRpbXVyIFRhYmkgPHRpbXVyQGZyZWVzY2FsZS5jb20+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkZyZWVzY2FsZSBTeW5jaHJvbm91cyBTZXJpYWwgSW50ZXJmYWNlIChTU0kpIEFTb0MgRHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvZnNsL2ZzbF9zc2kuaCBiL3NvdW5kL3NvYy9mc2wvZnNsX3NzaS5oCmluZGV4IDgzYjQ0ZDcuLmVhZGUwMWYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9mc2wvZnNsX3NzaS5oCisrKyBiL3NvdW5kL3NvYy9mc2wvZnNsX3NzaS5oCkBAIC0yMDgsNiArMjA4LDcgQEAKICAqIHNzaV9waHlzOiBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBTU0kgcmVnaXN0ZXJzCiAgKiBpcnE6IElSUSBvZiB0aGlzIFNTSQogICogZGV2OiBzdHJ1Y3QgZGV2aWNlLCB1c2VkIHRvIGNyZWF0ZSB0aGUgc3lzZnMgc3RhdGlzdGljcyBmaWxlCisgKiBhc3luY2hyb25vdXM6IDA9c3luY2hyb25vdXMgbW9kZSwgMT1hc3luY2hyb25vdXMgbW9kZQogKi8KIHN0cnVjdCBmc2xfc3NpX2luZm8gewogCXVuc2lnbmVkIGludCBpZDsKQEAgLTIxNSw2ICsyMTYsNyBAQAogCWRtYV9hZGRyX3Qgc3NpX3BoeXM7CiAJdW5zaWduZWQgaW50IGlycTsKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJaW50IGFzeW5jaHJvbm91czsKIH07CiAKIHN0cnVjdCBzbmRfc29jX2RhaSAqZnNsX3NzaV9jcmVhdGVfZGFpKHN0cnVjdCBmc2xfc3NpX2luZm8gKnNzaV9pbmZvKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9mc2wvbXBjNTIwMF9wc2NfaTJzLmMgYi9zb3VuZC9zb2MvZnNsL21wYzUyMDBfcHNjX2kycy5jCmluZGV4IDllYjFjZTEuLjNhYTcyOWQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9mc2wvbXBjNTIwMF9wc2NfaTJzLmMKKysrIGIvc291bmQvc29jL2ZzbC9tcGM1MjAwX3BzY19pMnMuYwpAQCAtNDY4LDYgKzQ2OCwxNiBAQAogLyoqCiAgKiBwc2NfaTJzX2RhaV90ZW1wbGF0ZTogdGVtcGxhdGUgQ1BVIERpZ2l0YWwgQXVkaW8gSW50ZXJmYWNlCiAgKi8KK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHBzY19pMnNfZGFpX29wcyA9IHsKKwkuc3RhcnR1cAk9IHBzY19pMnNfc3RhcnR1cCwKKwkuaHdfcGFyYW1zCT0gcHNjX2kyc19od19wYXJhbXMsCisJLmh3X2ZyZWUJPSBwc2NfaTJzX2h3X2ZyZWUsCisJLnNodXRkb3duCT0gcHNjX2kyc19zaHV0ZG93biwKKwkudHJpZ2dlcgk9IHBzY19pMnNfdHJpZ2dlciwKKwkuc2V0X3N5c2Nsawk9IHBzY19pMnNfc2V0X3N5c2NsaywKKwkuc2V0X2ZtdAk9IHBzY19pMnNfc2V0X2ZtdCwKK307CisKIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWkgcHNjX2kyc19kYWlfdGVtcGxhdGUgPSB7CiAJLnBsYXliYWNrID0gewogCQkuY2hhbm5lbHNfbWluID0gMiwKQEAgLTQ4MSwxNSArNDkxLDcgQEAKIAkJLnJhdGVzID0gUFNDX0kyU19SQVRFUywKIAkJLmZvcm1hdHMgPSBQU0NfSTJTX0ZPUk1BVFMsCiAJfSwKLQkub3BzID0gewotCQkuc3RhcnR1cCA9IHBzY19pMnNfc3RhcnR1cCwKLQkJLmh3X3BhcmFtcyA9IHBzY19pMnNfaHdfcGFyYW1zLAotCQkuaHdfZnJlZSA9IHBzY19pMnNfaHdfZnJlZSwKLQkJLnNodXRkb3duID0gcHNjX2kyc19zaHV0ZG93biwKLQkJLnRyaWdnZXIgPSBwc2NfaTJzX3RyaWdnZXIsCi0JCS5zZXRfc3lzY2xrID0gcHNjX2kyc19zZXRfc3lzY2xrLAotCQkuc2V0X2ZtdCA9IHBzY19pMnNfc2V0X2ZtdCwKLQl9LAorCS5vcHMgPSAmcHNjX2kyc19kYWlfb3BzLAogfTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvZnNsL21wYzg2MTBfaHBjZC5jIGIvc291bmQvc29jL2ZzbC9tcGM4NjEwX2hwY2QuYwppbmRleCBhY2YzOWE2Li5lZjY3ZDFjIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvZnNsL21wYzg2MTBfaHBjZC5jCisrKyBiL3NvdW5kL3NvYy9mc2wvbXBjODYxMF9ocGNkLmMKQEAgLTM1Myw2ICszNTMsMTEgQEAKIAl9CiAJc3NpX2luZm8uaXJxID0gbWFjaGluZV9kYXRhLT5zc2lfaXJxOwogCisJLyogRG8gd2Ugd2FudCB0byB1c2UgYXN5bmNocm9ub3VzIG1vZGU/ICovCisJc3NpX2luZm8uYXN5bmNocm9ub3VzID0KKwkJb2ZfZmluZF9wcm9wZXJ0eShucCwgImZzbCxzc2ktYXN5bmNocm9ub3VzIiwgTlVMTCkgPyAxIDogMDsKKwlpZiAoc3NpX2luZm8uYXN5bmNocm9ub3VzKQorCQlkZXZfaW5mbygmb2ZkZXYtPmRldiwgInVzaW5nIGFzeW5jaHJvbm91cyBtb2RlXG4iKTsKIAogCS8qIE1hcCB0aGUgZ2xvYmFsIHV0aWxpdGllcyByZWdpc3RlcnMuICovCiAJZ3V0c19ucCA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsICJmc2wsbXBjODYxMC1ndXRzIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvb21hcC9LY29uZmlnIGIvc291bmQvc29jL29tYXAvS2NvbmZpZwppbmRleCA0ZjdmMDQwLi42NzU3MzJlIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvb21hcC9LY29uZmlnCisrKyBiL3NvdW5kL3NvYy9vbWFwL0tjb25maWcKQEAgLTgsNyArOCw3IEBACiAKIGNvbmZpZyBTTkRfT01BUF9TT0NfTjgxMAogCXRyaXN0YXRlICJTb0MgQXVkaW8gc3VwcG9ydCBmb3IgTm9raWEgTjgxMCIKLQlkZXBlbmRzIG9uIFNORF9PTUFQX1NPQyAmJiBNQUNIX05PS0lBX044MTAKKwlkZXBlbmRzIG9uIFNORF9PTUFQX1NPQyAmJiBNQUNIX05PS0lBX044MTAgJiYgSTJDCiAJc2VsZWN0IFNORF9PTUFQX1NPQ19NQ0JTUAogCXNlbGVjdCBPTUFQX01VWAogCXNlbGVjdCBTTkRfU09DX1RMVjMyMEFJQzNYCkBAIC0xNyw3ICsxNyw3IEBACiAKIGNvbmZpZyBTTkRfT01BUF9TT0NfT1NLNTkxMgogCXRyaXN0YXRlICJTb0MgQXVkaW8gc3VwcG9ydCBmb3Igb21hcCBvc2s1OTEyIgotCWRlcGVuZHMgb24gU05EX09NQVBfU09DICYmIE1BQ0hfT01BUF9PU0sKKwlkZXBlbmRzIG9uIFNORF9PTUFQX1NPQyAmJiBNQUNIX09NQVBfT1NLICYmIEkyQwogCXNlbGVjdCBTTkRfT01BUF9TT0NfTUNCU1AKIAlzZWxlY3QgU05EX1NPQ19UTFYzMjBBSUMyMwogCWhlbHAKQEAgLTU1LDMgKzU1LDEzIEBACiAJc2VsZWN0IFNORF9TT0NfVFdMNDAzMAogCWhlbHAKIAkgIFNheSBZIGlmIHlvdSB3YW50IHRvIGFkZCBzdXBwb3J0IGZvciBTb0MgYXVkaW8gb24gdGhlIE9NQVAzIFBhbmRvcmEuCisKK2NvbmZpZyBTTkRfT01BUF9TT0NfT01BUDNfQkVBR0xFCisJdHJpc3RhdGUgIlNvQyBBdWRpbyBzdXBwb3J0IGZvciBPTUFQMyBCZWFnbGUiCisJZGVwZW5kcyBvbiBUV0w0MDMwX0NPUkUgJiYgU05EX09NQVBfU09DICYmIE1BQ0hfT01BUDNfQkVBR0xFCisJc2VsZWN0IFNORF9PTUFQX1NPQ19NQ0JTUAorCXNlbGVjdCBTTkRfU09DX1RXTDQwMzAKKwloZWxwCisJICBTYXkgWSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgU29DIGF1ZGlvIG9uIHRoZSBCZWFnbGVib2FyZC4KKworCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvb21hcC9NYWtlZmlsZSBiL3NvdW5kL3NvYy9vbWFwL01ha2VmaWxlCmluZGV4IDc2ZmVkZDkuLjBjOWU0YWMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9vbWFwL01ha2VmaWxlCisrKyBiL3NvdW5kL3NvYy9vbWFwL01ha2VmaWxlCkBAIC0xMiw2ICsxMiw3IEBACiBzbmQtc29jLW9tYXAyZXZtLW9ianMgOj0gb21hcDJldm0ubwogc25kLXNvYy1zZHAzNDMwLW9ianMgOj0gc2RwMzQzMC5vCiBzbmQtc29jLW9tYXAzcGFuZG9yYS1vYmpzIDo9IG9tYXAzcGFuZG9yYS5vCitzbmQtc29jLW9tYXAzYmVhZ2xlLW9ianMgOj0gb21hcDNiZWFnbGUubwogCiBvYmotJChDT05GSUdfU05EX09NQVBfU09DX044MTApICs9IHNuZC1zb2MtbjgxMC5vCiBvYmotJChDT05GSUdfU05EX09NQVBfU09DX09TSzU5MTIpICs9IHNuZC1zb2Mtb3NrNTkxMi5vCkBAIC0xOSwzICsyMCw0IEBACiBvYmotJChDT05GSUdfTUFDSF9PTUFQMkVWTSkgKz0gc25kLXNvYy1vbWFwMmV2bS5vCiBvYmotJChDT05GSUdfU05EX09NQVBfU09DX1NEUDM0MzApICs9IHNuZC1zb2Mtc2RwMzQzMC5vCiBvYmotJChDT05GSUdfU05EX09NQVBfU09DX09NQVAzX1BBTkRPUkEpICs9IHNuZC1zb2Mtb21hcDNwYW5kb3JhLm8KK29iai0kKENPTkZJR19TTkRfT01BUF9TT0NfT01BUDNfQkVBR0xFKSArPSBzbmQtc29jLW9tYXAzYmVhZ2xlLm8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9vbWFwL244MTAuYyBiL3NvdW5kL3NvYy9vbWFwL244MTAuYwppbmRleCAyNTU5M2ZlLi5hNmQxMTc4IDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvb21hcC9uODEwLmMKKysrIGIvc291bmQvc29jL29tYXAvbjgxMC5jCkBAIC00MCw2ICs0MCwxMyBAQAogI2RlZmluZSBOODEwX0hFQURTRVRfQU1QX0dQSU8JMTAKICNkZWZpbmUgTjgxMF9TUEVBS0VSX0FNUF9HUElPCTEwMQogCitlbnVtIHsKKwlOODEwX0pBQ0tfRElTQUJMRUQsCisJTjgxMF9KQUNLX0hQLAorCU44MTBfSkFDS19IUywKKwlOODEwX0pBQ0tfTUlDLAorfTsKKwogc3RhdGljIHN0cnVjdCBjbGsgKnN5c19jbGtvdXQyOwogc3RhdGljIHN0cnVjdCBjbGsgKnN5c19jbGtvdXQyX3NyYzsKIHN0YXRpYyBzdHJ1Y3QgY2xrICpmdW5jOTZtX2NsazsKQEAgLTUwLDE1ICs1NywzMiBAQAogCiBzdGF0aWMgdm9pZCBuODEwX2V4dF9jb250cm9sKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKIHsKKwlpbnQgaHAgPSAwLCBsaW5lMWwgPSAwOworCisJc3dpdGNoIChuODEwX2phY2tfZnVuYykgeworCWNhc2UgTjgxMF9KQUNLX0hTOgorCQlsaW5lMWwgPSAxOworCWNhc2UgTjgxMF9KQUNLX0hQOgorCQlocCA9IDE7CisJCWJyZWFrOworCWNhc2UgTjgxMF9KQUNLX01JQzoKKwkJbGluZTFsID0gMTsKKwkJYnJlYWs7CisJfQorCiAJaWYgKG44MTBfc3BrX2Z1bmMpCiAJCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiRXh0IFNwayIpOwogCWVsc2UKIAkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCAiRXh0IFNwayIpOwogCi0JaWYgKG44MTBfamFja19mdW5jKQorCWlmIChocCkKIAkJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsICJIZWFkcGhvbmUgSmFjayIpOwogCWVsc2UKIAkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCAiSGVhZHBob25lIEphY2siKTsKKwlpZiAobGluZTFsKQorCQlzbmRfc29jX2RhcG1fZW5hYmxlX3Bpbihjb2RlYywgIkxJTkUxTCIpOworCWVsc2UKKwkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCAiTElORTFMIik7CiAKIAlpZiAobjgxMF9kbWljX2Z1bmMpCiAJCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiRE1pYyIpOwpAQCAtNzIsNyArOTYsNyBAQAogewogCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHJ0ZC0+c29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBydGQtPnNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAlzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbWlubWF4KHJ1bnRpbWUsCiAJCQkJICAgICBTTkRSVl9QQ01fSFdfUEFSQU1fQ0hBTk5FTFMsIDIsIDIpOwpAQCAtMjI5LDcgKzI1Myw3IEBACiB9OwogCiBzdGF0aWMgY29uc3QgY2hhciAqc3BrX2Z1bmN0aW9uW10gPSB7Ik9mZiIsICJPbiJ9Owotc3RhdGljIGNvbnN0IGNoYXIgKmphY2tfZnVuY3Rpb25bXSA9IHsiT2ZmIiwgIkhlYWRwaG9uZSJ9Oworc3RhdGljIGNvbnN0IGNoYXIgKmphY2tfZnVuY3Rpb25bXSA9IHsiT2ZmIiwgIkhlYWRwaG9uZSIsICJIZWFkc2V0IiwgIk1pYyJ9Owogc3RhdGljIGNvbnN0IGNoYXIgKmlucHV0X2Z1bmN0aW9uW10gPSB7IkFEQyIsICJEaWdpdGFsIE1pYyJ9Owogc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBuODEwX2VudW1bXSA9IHsKIAlTT0NfRU5VTV9TSU5HTEVfRVhUKEFSUkFZX1NJWkUoc3BrX2Z1bmN0aW9uKSwgc3BrX2Z1bmN0aW9uKSwKQEAgLTI0OCwyMCArMjcyLDIzIEBACiAKIHN0YXRpYyBpbnQgbjgxMF9haWMzM19pbml0KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKIHsKLQlpbnQgaSwgZXJyOworCWludCBlcnI7CiAKIAkvKiBOb3QgY29ubmVjdGVkICovCiAJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIk1PTk9fTE9VVCIpOwogCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJIUExDT00iKTsKIAlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiSFBSQ09NIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIk1JQzNMIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIk1JQzNSIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkxJTkUxUiIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJMSU5FMkwiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiTElORTJSIik7CiAKIAkvKiBBZGQgTjgxMCBzcGVjaWZpYyBjb250cm9scyAqLwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFpYzMzX244MTBfY29udHJvbHMpOyBpKyspIHsKLQkJZXJyID0gc25kX2N0bF9hZGQoY29kZWMtPmNhcmQsCi0JCQlzbmRfc29jX2NuZXcoJmFpYzMzX244MTBfY29udHJvbHNbaV0sIGNvZGVjLCBOVUxMKSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQl9CisJZXJyID0gc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIGFpYzMzX244MTBfY29udHJvbHMsCisJCQkJQVJSQVlfU0laRShhaWMzM19uODEwX2NvbnRyb2xzKSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAkvKiBBZGQgTjgxMCBzcGVjaWZpYyB3aWRnZXRzICovCiAJc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgYWljMzNfZGFwbV93aWRnZXRzLApkaWZmIC0tZ2l0IGEvc291bmQvc29jL29tYXAvb21hcC1tY2JzcC5jIGIvc291bmQvc29jL29tYXAvb21hcC1tY2JzcC5jCmluZGV4IDA1ZGQ1YWIuLmQ2ODgyYmUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9vbWFwL29tYXAtbWNic3AuYworKysgYi9zb3VuZC9zb2Mvb21hcC9vbWFwLW1jYnNwLmMKQEAgLTQ2MSw2ICs0NjEsMTYgQEAKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBvbWFwX21jYnNwX2RhaV9vcHMgPSB7CisJLnN0YXJ0dXAJPSBvbWFwX21jYnNwX2RhaV9zdGFydHVwLAorCS5zaHV0ZG93bgk9IG9tYXBfbWNic3BfZGFpX3NodXRkb3duLAorCS50cmlnZ2VyCT0gb21hcF9tY2JzcF9kYWlfdHJpZ2dlciwKKwkuaHdfcGFyYW1zCT0gb21hcF9tY2JzcF9kYWlfaHdfcGFyYW1zLAorCS5zZXRfZm10CT0gb21hcF9tY2JzcF9kYWlfc2V0X2RhaV9mbXQsCisJLnNldF9jbGtkaXYJPSBvbWFwX21jYnNwX2RhaV9zZXRfY2xrZGl2LAorCS5zZXRfc3lzY2xrCT0gb21hcF9tY2JzcF9kYWlfc2V0X2RhaV9zeXNjbGssCit9OworCiAjZGVmaW5lIE9NQVBfTUNCU1BfREFJX0JVSUxERVIobGlua19pZCkJCQkJXAogewkJCQkJCQkJXAogCS5uYW1lID0gIm9tYXAtbWNic3AtZGFpLSIjbGlua19pZCwJCQlcCkBAIC00NzcsMTUgKzQ4Nyw3IEBACiAJCS5yYXRlcyA9IE9NQVBfTUNCU1BfUkFURVMsCQkJXAogCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLAkJXAogCX0sCQkJCQkJCVwKLQkub3BzID0gewkJCQkJCVwKLQkJLnN0YXJ0dXAgPSBvbWFwX21jYnNwX2RhaV9zdGFydHVwLAkJXAotCQkuc2h1dGRvd24gPSBvbWFwX21jYnNwX2RhaV9zaHV0ZG93biwJCVwKLQkJLnRyaWdnZXIgPSBvbWFwX21jYnNwX2RhaV90cmlnZ2VyLAkJXAotCQkuaHdfcGFyYW1zID0gb21hcF9tY2JzcF9kYWlfaHdfcGFyYW1zLAkJXAotCQkuc2V0X2ZtdCA9IG9tYXBfbWNic3BfZGFpX3NldF9kYWlfZm10LAkJXAotCQkuc2V0X2Nsa2RpdiA9IG9tYXBfbWNic3BfZGFpX3NldF9jbGtkaXYsCVwKLQkJLnNldF9zeXNjbGsgPSBvbWFwX21jYnNwX2RhaV9zZXRfZGFpX3N5c2NsaywJXAotCX0sCQkJCQkJCVwKKwkub3BzID0gJm9tYXBfbWNic3BfZGFpX29wcywJCQkJXAogCS5wcml2YXRlX2RhdGEgPSAmbWNic3BfZGF0YVsobGlua19pZCldLmJ1c19pZCwJCVwKIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL29tYXAvb21hcC1wY20uYyBiL3NvdW5kL3NvYy9vbWFwL29tYXAtcGNtLmMKaW5kZXggZGQzYmIyOS4uOGUxNDMxYyAxMDA2NDQKLS0tIGEvc291bmQvc29jL29tYXAvb21hcC1wY20uYworKysgYi9zb3VuZC9zb2Mvb21hcC9vbWFwLXBjbS5jCkBAIC0yNjUsNyArMjY1LDcgQEAKIAkJCQkgICAgIHJ1bnRpbWUtPmRtYV9ieXRlcyk7CiB9CiAKLXN0cnVjdCBzbmRfcGNtX29wcyBvbWFwX3BjbV9vcHMgPSB7CitzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIG9tYXBfcGNtX29wcyA9IHsKIAkub3BlbgkJPSBvbWFwX3BjbV9vcGVuLAogCS5jbG9zZQkJPSBvbWFwX3BjbV9jbG9zZSwKIAkuaW9jdGwJCT0gc25kX3BjbV9saWJfaW9jdGwsCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvb21hcC9vbWFwM3BhbmRvcmEuYyBiL3NvdW5kL3NvYy9vbWFwL29tYXAzcGFuZG9yYS5jCmluZGV4IGZjYzJmNWQuLmZlMjgyZDQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9vbWFwL29tYXAzcGFuZG9yYS5jCisrKyBiL3NvdW5kL3NvYy9vbWFwL29tYXAzcGFuZG9yYS5jCkBAIC0xNDMsNyArMTQzLDcgQEAKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCBvbWFwM3BhbmRvcmFfaW5fZGFwbV93aWRnZXRzW10gPSB7Ci0JU05EX1NPQ19EQVBNX01JQygiTWljIChJbnRlcm5hbCkiLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fTUlDKCJNaWMgKGludGVybmFsKSIsIE5VTEwpLAogCVNORF9TT0NfREFQTV9NSUMoIk1pYyAoZXh0ZXJuYWwpIiwgTlVMTCksCiAJU05EX1NPQ19EQVBNX0xJTkUoIkxpbmUgSW4iLCBOVUxMKSwKIH07CkBAIC0xNTUsMTYgKzE1NSwzMyBAQAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgb21hcDNwYW5kb3JhX2luX21hcFtdID0gewotCXsiSU5MIiwgTlVMTCwgIkxpbmUgSW4ifSwKLQl7IklOUiIsIE5VTEwsICJMaW5lIEluIn0sCi0JeyJJTkwiLCBOVUxMLCAiTWljIChJbnRlcm5hbCkifSwKLQl7IklOUiIsIE5VTEwsICJNaWMgKGV4dGVybmFsKSJ9LAorCXsiQVVYTCIsIE5VTEwsICJMaW5lIEluIn0sCisJeyJBVVhSIiwgTlVMTCwgIkxpbmUgSW4ifSwKKworCXsiTUFJTk1JQyIsIE5VTEwsICJNaWMgQmlhcyAxIn0sCisJeyJNaWMgQmlhcyAxIiwgTlVMTCwgIk1pYyAoaW50ZXJuYWwpIn0sCisKKwl7IlNVQk1JQyIsIE5VTEwsICJNaWMgQmlhcyAyIn0sCisJeyJNaWMgQmlhcyAyIiwgTlVMTCwgIk1pYyAoZXh0ZXJuYWwpIn0sCiB9OwogCiBzdGF0aWMgaW50IG9tYXAzcGFuZG9yYV9vdXRfaW5pdChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCiB7CiAJaW50IHJldDsKIAorCS8qIEFsbCBUV0w0MDMwIG91dHB1dCBwaW5zIGFyZSBmbG9hdGluZyAqLworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJPVVRMIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIk9VVFIiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiRUFSUElFQ0UiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiUFJFRFJJVkVMIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIlBSRURSSVZFUiIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJIU09MIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkhTT1IiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiQ0FSS0lUTCIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJDQVJLSVRSIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkhGTCIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJIRlIiKTsKKwogCXJldCA9IHNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIG9tYXAzcGFuZG9yYV9vdXRfZGFwbV93aWRnZXRzLAogCQkJCUFSUkFZX1NJWkUob21hcDNwYW5kb3JhX291dF9kYXBtX3dpZGdldHMpKTsKIAlpZiAocmV0IDwgMCkKQEAgLTE4MCwxOCArMTk3LDExIEBACiB7CiAJaW50IHJldDsKIAotCS8qIEFsbCBUV0w0MDMwIG91dHB1dCBwaW5zIGFyZSBmbG9hdGluZyAqLwotCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJPVVRMIiksCi0Jc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIk9VVFIiKSwKLQlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiRUFSUElFQ0UiKSwKLQlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiUFJFRFJJVkVMIiksCi0Jc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIlBSRURSSVZFUiIpLAotCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJIU09MIiksCi0Jc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkhTT1IiKSwKLQlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiQ0FSS0lUTCIpLAotCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJDQVJLSVRSIiksCi0Jc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkhGTCIpLAotCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJIRlIiKSwKKwkvKiBOb3QgY29tbm5lY3RlZCAqLworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJIU01JQyIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJDQVJLSVRNSUMiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiRElHSU1JQzAiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiRElHSU1JQzEiKTsKIAogCXJldCA9IHNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIG9tYXAzcGFuZG9yYV9pbl9kYXBtX3dpZGdldHMsCiAJCQkJQVJSQVlfU0laRShvbWFwM3BhbmRvcmFfaW5fZGFwbV93aWRnZXRzKSk7CkBAIC0yNTEsMTAgKzI2MSw5IEBACiB7CiAJaW50IHJldDsKIAotCWlmICghbWFjaGluZV9pc19vbWFwM19wYW5kb3JhKCkpIHsKLQkJcHJfZGVidWcoUFJFRklYICJOb3QgT01BUDMgUGFuZG9yYVxuIik7CisJaWYgKCFtYWNoaW5lX2lzX29tYXAzX3BhbmRvcmEoKSkKIAkJcmV0dXJuIC1FTk9ERVY7Ci0JfQorCiAJcHJfaW5mbygiT01BUDMgUGFuZG9yYSBTb0MgaW5pdFxuIik7CiAKIAlyZXQgPSBncGlvX3JlcXVlc3QoT01BUDNfUEFORE9SQV9EQUNfUE9XRVJfR1BJTywgImRhY19wb3dlciIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL29tYXAvb3NrNTkxMi5jIGIvc291bmQvc29jL29tYXAvb3NrNTkxMi5jCmluZGV4IGNkNDFhOTQuLmE5NTJhNGUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9vbWFwL29zazU5MTIuYworKysgYi9zb3VuZC9zb2Mvb21hcC9vc2s1OTEyLmMKQEAgLTE4NiwxMyArMTg2LDYgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JaWYgKGNsa19nZXRfdXNlY291bnQodGx2MzIwYWljMjNfbWNsaykgPiAwKSB7Ci0JCS8qIE1DTEsgaXMgYWxyZWFkeSBpbiB1c2UgKi8KLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgIk1DTEsgaW4gdXNlIGF0ICVkIEh6LiBXZSBjaGFuZ2UgaXQgdG8gJWQgSHpcbiIsCi0JCSAgICAgICAodWludCkgY2xrX2dldF9yYXRlKHRsdjMyMGFpYzIzX21jbGspLCBDT0RFQ19DTE9DSyk7Ci0JfQotCiAJLyoKIAkgKiBDb25maWd1cmUgMTIgTUh6IG91dHB1dCBvbiBNQ0xLLgogCSAqLwpAQCAtMjA1LDkgKzE5OCw4IEBACiAJCX0KIAl9CiAKLQlwcmludGsoS0VSTl9JTkZPICJNQ0xLID0gJWQgWyVkXSwgdXNlY291bnQgPSAlZFxuIiwKLQkgICAgICAgKHVpbnQpIGNsa19nZXRfcmF0ZSh0bHYzMjBhaWMyM19tY2xrKSwgQ09ERUNfQ0xPQ0ssCi0JICAgICAgIGNsa19nZXRfdXNlY291bnQodGx2MzIwYWljMjNfbWNsaykpOworCXByaW50ayhLRVJOX0lORk8gIk1DTEsgPSAlZCBbJWRdXG4iLAorCSAgICAgICAodWludCkgY2xrX2dldF9yYXRlKHRsdjMyMGFpYzIzX21jbGspLCBDT0RFQ19DTE9DSyk7CiAKIAlyZXR1cm4gMDsKIGVycjE6CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvb21hcC9zZHAzNDMwLmMgYi9zb3VuZC9zb2Mvb21hcC9zZHAzNDMwLmMKaW5kZXggZTIyNmZhNy4uMTBmMWM4NiAxMDA2NDQKLS0tIGEvc291bmQvc29jL29tYXAvc2RwMzQzMC5jCisrKyBiL3NvdW5kL3NvYy9vbWFwL3NkcDM0MzAuYwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgogI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgogI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CisjaW5jbHVkZSA8c291bmQvamFjay5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+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+cmVncyArIFMzQzI0MTJfSUlTRklDKTsKLQotCX0KLQotCXJldHVybiAwOwotfQotI2Vsc2UKLSNkZWZpbmUgczNjMjQxMl9pMnNfc3VzcGVuZCBOVUxMCi0jZGVmaW5lIHMzYzI0MTJfaTJzX3Jlc3VtZSAgTlVMTAotI2VuZGlmIC8qIENPTkZJR19QTSAqLwotCiAjZGVmaW5lIFMzQzI0MTJfSTJTX1JBVEVTIFwKIAkoU05EUlZfUENNX1JBVEVfODAwMCB8IFNORFJWX1BDTV9SQVRFXzExMDI1IHwgU05EUlZfUENNX1JBVEVfMTYwMDAgfCBcCiAJU05EUlZfUENNX1JBVEVfMjIwNTAgfCBTTkRSVl9QQ01fUkFURV8zMjAwMCB8IFNORFJWX1BDTV9SQVRFXzQ0MTAwIHwgXAogCVNORFJWX1BDTV9SQVRFXzQ4MDAwIHwgU05EUlZfUENNX1JBVEVfODgyMDAgfCBTTkRSVl9QQ01fUkFURV85NjAwMCkKIAorc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgczNjMjQxMl9pMnNfZGFpX29wcyA9IHsKKwkuc2V0X3N5c2Nsawk9IHMzYzI0MTJfaTJzX3NldF9zeXNjbGssCit9OworCiBzdHJ1Y3Qgc25kX3NvY19kYWkgczNjMjQxMl9pMnNfZGFpID0gewotCS5uYW1lCT0gInMzYzI0MTItaTJzIiwKLQkuaWQJPSAwLAotCS5wcm9iZQk9IHMzYzI0MTJfaTJzX3Byb2JlLAotCS5zdXNwZW5kID0gczNjMjQxMl9pMnNfc3VzcGVuZCwKLQkucmVzdW1lID0gczNjMjQxMl9pMnNfcmVzdW1lLAorCS5uYW1lCQk9ICJzM2MyNDEyLWkycyIsCisJLmlkCQk9IDAsCisJLnByb2JlCQk9IHMzYzI0MTJfaTJzX3Byb2JlLAogCS5wbGF5YmFjayA9IHsKIAkJLmNoYW5uZWxzX21pbgk9IDIsCiAJCS5jaGFubmVsc19tYXgJPSAyLApAQCAtNzI2LDE5ICsxNjcsMTMgQEAKIAkJLnJhdGVzCQk9IFMzQzI0MTJfSTJTX1JBVEVTLAogCQkuZm9ybWF0cwk9IFNORFJWX1BDTV9GTVRCSVRfUzggfCBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwKIAl9LAotCS5vcHMgPSB7Ci0JCS50cmlnZ2VyCT0gczNjMjQxMl9pMnNfdHJpZ2dlciwKLQkJLmh3X3BhcmFtcwk9IHMzYzI0MTJfaTJzX2h3X3BhcmFtcywKLQkJLnNldF9mbXQJPSBzM2MyNDEyX2kyc19zZXRfZm10LAotCQkuc2V0X2Nsa2Rpdgk9IHMzYzI0MTJfaTJzX3NldF9jbGtkaXYsCi0JCS5zZXRfc3lzY2xrCT0gczNjMjQxMl9pMnNfc2V0X3N5c2NsaywKLQl9LAorCS5vcHMgPSAmczNjMjQxMl9pMnNfZGFpX29wcywKIH07CiBFWFBPUlRfU1lNQk9MX0dQTChzM2MyNDEyX2kyc19kYWkpOwogCiBzdGF0aWMgaW50IF9faW5pdCBzM2MyNDEyX2kyc19pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIHNuZF9zb2NfcmVnaXN0ZXJfZGFpKCZzM2MyNDEyX2kyc19kYWkpOworCXJldHVybiAgczNjX2kyc3YyX3JlZ2lzdGVyX2RhaSgmczNjMjQxMl9pMnNfZGFpKTsKIH0KIG1vZHVsZV9pbml0KHMzYzI0MTJfaTJzX2luaXQpOwogCkBAIC03NDgsNyArMTgzLDYgQEAKIH0KIG1vZHVsZV9leGl0KHMzYzI0MTJfaTJzX2V4aXQpOwogCi0KIC8qIE1vZHVsZSBpbmZvcm1hdGlvbiAqLwogTU9EVUxFX0FVVEhPUigiQmVuIERvb2tzLCA8YmVuQHNpbXRlYy5jby51az4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiUzNDMjQxMiBJMlMgU29DIEludGVyZmFjZSIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3MzYzI0eHgvczNjMjQxMi1pMnMuaCBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0MTItaTJzLmgKaW5kZXggYWFjMDhhMi4uOTI4NDhlNTQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0MTItaTJzLmgKKysrIGIvc291bmQvc29jL3MzYzI0eHgvczNjMjQxMi1pMnMuaApAQCAtMTUsOSArMTUsMTEgQEAKICNpZm5kZWYgX19TTkRfU09DX1MzQzI0WFhfUzNDMjQxMl9JMlNfSAogI2RlZmluZSBfX1NORF9TT0NfUzNDMjRYWF9TM0MyNDEyX0kyU19IIF9fRklMRV9fCiAKLSNkZWZpbmUgUzNDMjQxMl9ESVZfQkNMSwkoMSkKLSNkZWZpbmUgUzNDMjQxMl9ESVZfUkNMSwkoMikKLSNkZWZpbmUgUzNDMjQxMl9ESVZfUFJFU0NBTEVSCSgzKQorI2luY2x1ZGUgInMzYy1pMnMtdjIuaCIKKworI2RlZmluZSBTM0MyNDEyX0RJVl9CQ0xLCVMzQ19JMlNWMl9ESVZfQkNMSworI2RlZmluZSBTM0MyNDEyX0RJVl9SQ0xLCVMzQ19JMlNWMl9ESVZfUkNMSworI2RlZmluZSBTM0MyNDEyX0RJVl9QUkVTQ0FMRVIJUzNDX0kyU1YyX0RJVl9QUkVTQ0FMRVIKIAogI2RlZmluZSBTM0MyNDEyX0NMS1NSQ19QQ0xLCSgwKQogI2RlZmluZSBTM0MyNDEyX0NMS1NSQ19JMlNDTEsJKDEpCkBAIC0yNiwxMyArMjgsNCBAQAogCiBleHRlcm4gc3RydWN0IHNuZF9zb2NfZGFpIHMzYzI0MTJfaTJzX2RhaTsKIAotc3RydWN0IHMzYzI0MTJfcmF0ZV9jYWxjIHsKLQl1bnNpZ25lZCBpbnQJY2xrX2RpdjsJLyogZm9yIHByZXNjYWxlciAqLwotCXVuc2lnbmVkIGludAlmc19kaXY7CQkvKiBmb3Igcm9vdCBmcmFtZSBjbG9jayAqLwotfTsKLQotZXh0ZXJuIGludCBzM2MyNDEyX2lpc19jYWxjX3JhdGUoc3RydWN0IHMzYzI0MTJfcmF0ZV9jYWxjICppbmZvLAotCQkJCSB1bnNpZ25lZCBpbnQgKmZzdGFiLAotCQkJCSB1bnNpZ25lZCBpbnQgcmF0ZSwgc3RydWN0IGNsayAqY2xrKTsKLQogI2VuZGlmIC8qIF9fU05EX1NPQ19TM0MyNFhYX1MzQzI0MTJfSTJTX0ggKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0NDMtYWM5Ny5jIGIvc291bmQvc29jL3MzYzI0eHgvczNjMjQ0My1hYzk3LmMKaW5kZXggNTgyMmQyZC4uMzY5OGY3MCAxMDA2NDQKLS0tIGEvc291bmQvc29jL3MzYzI0eHgvczNjMjQ0My1hYzk3LmMKKysrIGIvc291bmQvc29jL3MzYzI0eHgvczNjMjQ0My1hYzk3LmMKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlIDxwbGF0L3JlZ3MtYWM5Ny5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWNsb2NrLmg+Ci0jaW5jbHVkZSA8bWFjaC9hdWRpby5oPgorI2luY2x1ZGUgPHBsYXQvYXVkaW8uaD4KICNpbmNsdWRlIDxhc20vZG1hLmg+CiAjaW5jbHVkZSA8bWFjaC9kbWEuaD4KIApAQCAtMzU1LDYgKzM1NSwxNiBAQAogCQlTTkRSVl9QQ01fUkFURV8xNjAwMCB8IFNORFJWX1BDTV9SQVRFXzIyMDUwIHwgXAogCQlTTkRSVl9QQ01fUkFURV80NDEwMCB8IFNORFJWX1BDTV9SQVRFXzQ4MDAwKQogCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBzM2MyNDQzX2FjOTdfZGFpX29wcyA9IHsKKwkuaHdfcGFyYW1zCT0gczNjMjQ0M19hYzk3X2h3X3BhcmFtcywKKwkudHJpZ2dlcgk9IHMzYzI0NDNfYWM5N190cmlnZ2VyLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgczNjMjQ0M19hYzk3X21pY19kYWlfb3BzID0geworCS5od19wYXJhbXMJPSBzM2MyNDQzX2FjOTdfaHdfbWljX3BhcmFtcywKKwkudHJpZ2dlcgk9IHMzYzI0NDNfYWM5N19taWNfdHJpZ2dlciwKK307CisKIHN0cnVjdCBzbmRfc29jX2RhaSBzM2MyNDQzX2FjOTdfZGFpW10gPSB7CiB7CiAJLm5hbWUgPSAiczNjMjQ0My1hYzk3IiwKQEAgLTM3NCw5ICszODQsNyBAQAogCQkuY2hhbm5lbHNfbWF4ID0gMiwKIAkJLnJhdGVzID0gczNjMjQ0M19BQzk3X1JBVEVTLAogCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLH0sCi0JLm9wcyA9IHsKLQkJLmh3X3BhcmFtcyA9IHMzYzI0NDNfYWM5N19od19wYXJhbXMsCi0JCS50cmlnZ2VyID0gczNjMjQ0M19hYzk3X3RyaWdnZXJ9LAorCS5vcHMgPSAmczNjMjQ0M19hYzk3X2RhaV9vcHMsCiB9LAogewogCS5uYW1lID0gInB4YTJ4eC1hYzk3LW1pYyIsCkBAIC0zODgsOSArMzk2LDcgQEAKIAkJLmNoYW5uZWxzX21heCA9IDEsCiAJCS5yYXRlcyA9IHMzYzI0NDNfQUM5N19SQVRFUywKIAkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSx9LAotCS5vcHMgPSB7Ci0JCS5od19wYXJhbXMgPSBzM2MyNDQzX2FjOTdfaHdfbWljX3BhcmFtcywKLQkJLnRyaWdnZXIgPSBzM2MyNDQzX2FjOTdfbWljX3RyaWdnZXIsfSwKKwkub3BzID0gJnMzYzI0NDNfYWM5N19taWNfZGFpX29wcywKIH0sCiB9OwogRVhQT1JUX1NZTUJPTF9HUEwoczNjMjQ0M19hYzk3X2RhaSk7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNHh4LWkycy5jIGIvc291bmQvc29jL3MzYzI0eHgvczNjMjR4eC1pMnMuYwppbmRleCA2ZjRkNDM5Li5jYzA2Njk2IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNHh4LWkycy5jCisrKyBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0eHgtaTJzLmMKQEAgLTQsNyArNCw3IEBACiAgKiAoYykgMjAwNiBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDLgogICogR3JhZW1lIEdyZWdvcnkgZ3JhZW1lLmdyZWdvcnlAd29sZnNvbm1pY3JvLmNvbSBvciBsaW51eEB3b2xmc29ubWljcm8uY29tCiAgKgotICogKGMpIDIwMDQtMjAwNSBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqIENvcHlyaWdodCAyMDA0LTIwMDUgU2ltdGVjIEVsZWN0cm9uaWNzCiAgKglodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLwogICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgogICoKQEAgLTMwLDIyICszMCwxNSBAQAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1jbG9jay5oPgotI2luY2x1ZGUgPG1hY2gvYXVkaW8uaD4KKyNpbmNsdWRlIDxwbGF0L2F1ZGlvLmg+CiAjaW5jbHVkZSA8YXNtL2RtYS5oPgogI2luY2x1ZGUgPG1hY2gvZG1hLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3JlZ3MtaWlzLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLWlpcy5oPgogCiAjaW5jbHVkZSAiczNjMjR4eC1wY20uaCIKICNpbmNsdWRlICJzM2MyNHh4LWkycy5oIgogCi0jZGVmaW5lIFMzQzI0WFhfSTJTX0RFQlVHIDAKLSNpZiBTM0MyNFhYX0kyU19ERUJVRwotI2RlZmluZSBEQkcoeC4uLikgcHJpbnRrKEtFUk5fREVCVUcgInMzYzI0eHgtaTJzOiAiIHgpCi0jZWxzZQotI2RlZmluZSBEQkcoeC4uLikKLSNlbmRpZgotCiBzdGF0aWMgc3RydWN0IHMzYzI0MTBfZG1hX2NsaWVudCBzM2MyNHh4X2RtYV9jbGllbnRfb3V0ID0gewogCS5uYW1lID0gIkkyUyBQQ00gU3RlcmVvIG91dCIKIH07CkBAIC04NCwxMyArNzcsMTMgQEAKIAl1MzIgaWlzY29uOwogCXUzMiBpaXNtb2Q7CiAKLQlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCiAJaWlzZmNvbiA9IHJlYWRsKHMzYzI0eHhfaTJzLnJlZ3MgKyBTM0MyNDEwX0lJU0ZDT04pOwogCWlpc2NvbiAgPSByZWFkbChzM2MyNHh4X2kycy5yZWdzICsgUzNDMjQxMF9JSVNDT04pOwogCWlpc21vZCAgPSByZWFkbChzM2MyNHh4X2kycy5yZWdzICsgUzNDMjQxMF9JSVNNT0QpOwogCi0JREJHKCJyOiBJSVNDT046ICVseCBJSVNNT0Q6ICVseCBJSVNGQ09OOiAlbHhcbiIsIGlpc2NvbiwgaWlzbW9kLCBpaXNmY29uKTsKKwlwcl9kZWJ1ZygicjogSUlTQ09OOiAleCBJSVNNT0Q6ICV4IElJU0ZDT046ICV4XG4iLCBpaXNjb24sIGlpc21vZCwgaWlzZmNvbik7CiAKIAlpZiAob24pIHsKIAkJaWlzZmNvbiB8PSBTM0MyNDEwX0lJU0ZDT05fVFhETUEgfCBTM0MyNDEwX0lJU0ZDT05fVFhFTkFCTEU7CkBAIC0xMjAsNyArMTEzLDcgQEAKIAkJd3JpdGVsKGlpc21vZCwgIHMzYzI0eHhfaTJzLnJlZ3MgKyBTM0MyNDEwX0lJU01PRCk7CiAJfQogCi0JREJHKCJ3OiBJSVNDT046ICVseCBJSVNNT0Q6ICVseCBJSVNGQ09OOiAlbHhcbiIsIGlpc2NvbiwgaWlzbW9kLCBpaXNmY29uKTsKKwlwcl9kZWJ1ZygidzogSUlTQ09OOiAleCBJSVNNT0Q6ICV4IElJU0ZDT046ICV4XG4iLCBpaXNjb24sIGlpc21vZCwgaWlzZmNvbik7CiB9CiAKIHN0YXRpYyB2b2lkIHMzYzI0eHhfc25kX3J4Y3RybChpbnQgb24pCkBAIC0xMjksMTMgKzEyMiwxMyBAQAogCXUzMiBpaXNjb247CiAJdTMyIGlpc21vZDsKIAotCURCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOworCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlpaXNmY29uID0gcmVhZGwoczNjMjR4eF9pMnMucmVncyArIFMzQzI0MTBfSUlTRkNPTik7CiAJaWlzY29uICA9IHJlYWRsKHMzYzI0eHhfaTJzLnJlZ3MgKyBTM0MyNDEwX0lJU0NPTik7CiAJaWlzbW9kICA9IHJlYWRsKHMzYzI0eHhfaTJzLnJlZ3MgKyBTM0MyNDEwX0lJU01PRCk7CiAKLQlEQkcoInI6IElJU0NPTjogJWx4IElJU01PRDogJWx4IElJU0ZDT046ICVseFxuIiwgaWlzY29uLCBpaXNtb2QsIGlpc2Zjb24pOworCXByX2RlYnVnKCJyOiBJSVNDT046ICV4IElJU01PRDogJXggSUlTRkNPTjogJXhcbiIsIGlpc2NvbiwgaWlzbW9kLCBpaXNmY29uKTsKIAogCWlmIChvbikgewogCQlpaXNmY29uIHw9IFMzQzI0MTBfSUlTRkNPTl9SWERNQSB8IFMzQzI0MTBfSUlTRkNPTl9SWEVOQUJMRTsKQEAgLTE2NSw3ICsxNTgsNyBAQAogCQl3cml0ZWwoaWlzbW9kLCAgczNjMjR4eF9pMnMucmVncyArIFMzQzI0MTBfSUlTTU9EKTsKIAl9CiAKLQlEQkcoInc6IElJU0NPTjogJWx4IElJU01PRDogJWx4IElJU0ZDT046ICVseFxuIiwgaWlzY29uLCBpaXNtb2QsIGlpc2Zjb24pOworCXByX2RlYnVnKCJ3OiBJSVNDT046ICV4IElJU01PRDogJXggSUlTRkNPTjogJXhcbiIsIGlpc2NvbiwgaWlzbW9kLCBpaXNmY29uKTsKIH0KIAogLyoKQEAgLTE3Nyw3ICsxNzAsNyBAQAogCXUzMiBpaXNjb247CiAJaW50IHRpbWVvdXQgPSA1MDsgLyogNW1zICovCiAKLQlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCiAJd2hpbGUgKDEpIHsKIAkJaWlzY29uID0gcmVhZGwoczNjMjR4eF9pMnMucmVncyArIFMzQzI0MTBfSUlTQ09OKTsKQEAgLTE5Nyw3ICsxOTAsNyBAQAogICovCiBzdGF0aWMgaW5saW5lIGludCBzM2MyNHh4X3NuZF9pc19jbGttYXN0ZXIodm9pZCkKIHsKLQlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCiAJcmV0dXJuIChyZWFkbChzM2MyNHh4X2kycy5yZWdzICsgUzNDMjQxMF9JSVNNT0QpICYgUzNDMjQxMF9JSVNNT0RfU0xBVkUpID8gMDoxOwogfQpAQCAtMjEwLDEwICsyMDMsMTAgQEAKIHsKIAl1MzIgaWlzbW9kOwogCi0JREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CisJcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKIAogCWlpc21vZCA9IHJlYWRsKHMzYzI0eHhfaTJzLnJlZ3MgKyBTM0MyNDEwX0lJU01PRCk7Ci0JREJHKCJod19wYXJhbXMgcjogSUlTTU9EOiAlbHggXG4iLCBpaXNtb2QpOworCXByX2RlYnVnKCJod19wYXJhbXMgcjogSUlTTU9EOiAleCBcbiIsIGlpc21vZCk7CiAKIAlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX01BU1RFUl9NQVNLKSB7CiAJY2FzZSBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNOgpAQCAtMjM4LDcgKzIzMSw3IEBACiAJfQogCiAJd3JpdGVsKGlpc21vZCwgczNjMjR4eF9pMnMucmVncyArIFMzQzI0MTBfSUlTTU9EKTsKLQlEQkcoImh3X3BhcmFtcyB3OiBJSVNNT0Q6ICVseCBcbiIsIGlpc21vZCk7CisJcHJfZGVidWcoImh3X3BhcmFtcyB3OiBJSVNNT0Q6ICV4IFxuIiwgaWlzbW9kKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjQ5LDcgKzI0Miw3IEBACiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXUzMiBpaXNtb2Q7CiAKLQlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCiAJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCiAJCXJ0ZC0+ZGFpLT5jcHVfZGFpLT5kbWFfZGF0YSA9ICZzM2MyNHh4X2kyc19wY21fc3RlcmVvX291dDsKQEAgLTI1OCw3ICsyNTEsNyBAQAogCiAJLyogV29ya2luZyBjb3BpZXMgb2YgcmVnaXN0ZXIgKi8KIAlpaXNtb2QgPSByZWFkbChzM2MyNHh4X2kycy5yZWdzICsgUzNDMjQxMF9JSVNNT0QpOwotCURCRygiaHdfcGFyYW1zIHI6IElJU01PRDogJWx4XG4iLCBpaXNtb2QpOworCXByX2RlYnVnKCJod19wYXJhbXMgcjogSUlTTU9EOiAleFxuIiwgaWlzbW9kKTsKIAogCXN3aXRjaCAocGFyYW1zX2Zvcm1hdChwYXJhbXMpKSB7CiAJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1M4OgpAQCAtMjc2LDcgKzI2OSw3IEBACiAJfQogCiAJd3JpdGVsKGlpc21vZCwgczNjMjR4eF9pMnMucmVncyArIFMzQzI0MTBfSUlTTU9EKTsKLQlEQkcoImh3X3BhcmFtcyB3OiBJSVNNT0Q6ICVseFxuIiwgaWlzbW9kKTsKKwlwcl9kZWJ1ZygiaHdfcGFyYW1zIHc6IElJU01PRDogJXhcbiIsIGlpc21vZCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI4NSw3ICsyNzgsNyBAQAogewogCWludCByZXQgPSAwOwogCi0JREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CisJcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKIAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKQEAgLTMyNyw3ICszMjAsNyBAQAogewogCXUzMiBpaXNtb2QgPSByZWFkbChzM2MyNHh4X2kycy5yZWdzICsgUzNDMjQxMF9JSVNNT0QpOwogCi0JREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CisJcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKIAogCWlpc21vZCAmPSB+UzNDMjQ0MF9JSVNNT0RfTVBMTDsKIApAQCAtMzUzLDcgKzM0Niw3IEBACiB7CiAJdTMyIHJlZzsKIAotCURCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOworCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlzd2l0Y2ggKGRpdl9pZCkgewogCWNhc2UgUzNDMjRYWF9ESVZfQkNMSzoKQEAgLTM4OSw3ICszODIsNyBAQAogc3RhdGljIGludCBzM2MyNHh4X2kyc19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAogCQkJICAgICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKIHsKLQlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCiAJczNjMjR4eF9pMnMucmVncyA9IGlvcmVtYXAoUzNDMjQxMF9QQV9JSVMsIDB4MTAwKTsKIAlpZiAoczNjMjR4eF9pMnMucmVncyA9PSBOVUxMKQpAQCAtMzk3LDcgKzM5MCw3IEBACiAKIAlzM2MyNHh4X2kycy5paXNfY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAiaWlzIik7CiAJaWYgKHMzYzI0eHhfaTJzLmlpc19jbGsgPT0gTlVMTCkgewotCQlEQkcoImZhaWxlZCB0byBnZXQgaWlzX2Nsb2NrXG4iKTsKKwkJcHJfZXJyKCJmYWlsZWQgdG8gZ2V0IGlpc19jbG9ja1xuIik7CiAJCWlvdW5tYXAoczNjMjR4eF9pMnMucmVncyk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KQEAgLTQyMSw3ICs0MTQsNyBAQAogI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludCBzM2MyNHh4X2kyc19zdXNwZW5kKHN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSkKIHsKLQlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCiAJczNjMjR4eF9pMnMuaWlzY29uID0gcmVhZGwoczNjMjR4eF9pMnMucmVncyArIFMzQzI0MTBfSUlTQ09OKTsKIAlzM2MyNHh4X2kycy5paXNtb2QgPSByZWFkbChzM2MyNHh4X2kycy5yZWdzICsgUzNDMjQxMF9JSVNNT0QpOwpAQCAtNDM1LDcgKzQyOCw3IEBACiAKIHN0YXRpYyBpbnQgczNjMjR4eF9pMnNfcmVzdW1lKHN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSkKIHsKLQlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCWNsa19lbmFibGUoczNjMjR4eF9pMnMuaWlzX2Nsayk7CiAKIAl3cml0ZWwoczNjMjR4eF9pMnMuaWlzY29uLCBzM2MyNHh4X2kycy5yZWdzICsgUzNDMjQxMF9JSVNDT04pOwpAQCAtNDU2LDYgKzQ0OSwxNCBAQAogCVNORFJWX1BDTV9SQVRFXzIyMDUwIHwgU05EUlZfUENNX1JBVEVfMzIwMDAgfCBTTkRSVl9QQ01fUkFURV80NDEwMCB8IFwKIAlTTkRSVl9QQ01fUkFURV80ODAwMCB8IFNORFJWX1BDTV9SQVRFXzg4MjAwIHwgU05EUlZfUENNX1JBVEVfOTYwMDApCiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHMzYzI0eHhfaTJzX2RhaV9vcHMgPSB7CisJLnRyaWdnZXIJPSBzM2MyNHh4X2kyc190cmlnZ2VyLAorCS5od19wYXJhbXMJPSBzM2MyNHh4X2kyc19od19wYXJhbXMsCisJLnNldF9mbXQJPSBzM2MyNHh4X2kyc19zZXRfZm10LAorCS5zZXRfY2xrZGl2CT0gczNjMjR4eF9pMnNfc2V0X2Nsa2RpdiwKKwkuc2V0X3N5c2Nsawk9IHMzYzI0eHhfaTJzX3NldF9zeXNjbGssCit9OworCiBzdHJ1Y3Qgc25kX3NvY19kYWkgczNjMjR4eF9pMnNfZGFpID0gewogCS5uYW1lID0gInMzYzI0eHgtaTJzIiwKIAkuaWQgPSAwLApAQCAtNDcyLDEzICs0NzMsNyBAQAogCQkuY2hhbm5lbHNfbWF4ID0gMiwKIAkJLnJhdGVzID0gUzNDMjRYWF9JMlNfUkFURVMsCiAJCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TOCB8IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLH0sCi0JLm9wcyA9IHsKLQkJLnRyaWdnZXIgPSBzM2MyNHh4X2kyc190cmlnZ2VyLAotCQkuaHdfcGFyYW1zID0gczNjMjR4eF9pMnNfaHdfcGFyYW1zLAotCQkuc2V0X2ZtdCA9IHMzYzI0eHhfaTJzX3NldF9mbXQsCi0JCS5zZXRfY2xrZGl2ID0gczNjMjR4eF9pMnNfc2V0X2Nsa2RpdiwKLQkJLnNldF9zeXNjbGsgPSBzM2MyNHh4X2kyc19zZXRfc3lzY2xrLAotCX0sCisJLm9wcyA9ICZzM2MyNHh4X2kyc19kYWlfb3BzLAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKHMzYzI0eHhfaTJzX2RhaSk7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0eHgtcGNtLmMgYi9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNHh4LXBjbS5jCmluZGV4IDdjNjRkMzEuLmE5ZDY4ZmEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0eHgtcGNtLmMKKysrIGIvc291bmQvc29jL3MzYzI0eHgvczNjMjR4eC1wY20uYwpAQCAtNCw3ICs0LDcgQEAKICAqIChjKSAyMDA2IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBQTEMuCiAgKiBHcmFlbWUgR3JlZ29yeSBncmFlbWUuZ3JlZ29yeUB3b2xmc29ubWljcm8uY29tIG9yIGxpbnV4QHdvbGZzb25taWNyby5jb20KICAqCi0gKiAoYykgMjAwNC0yMDA1IFNpbXRlYyBFbGVjdHJvbmljcworICogQ29weXJpZ2h0IDIwMDQtMjAwNSBTaW10ZWMgRWxlY3Ryb25pY3MKICAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCiAgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CiAgKgpAQCAtMjksMTcgKzI5LDEwIEBACiAjaW5jbHVkZSA8YXNtL2RtYS5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL2RtYS5oPgotI2luY2x1ZGUgPG1hY2gvYXVkaW8uaD4KKyNpbmNsdWRlIDxwbGF0L2F1ZGlvLmg+CiAKICNpbmNsdWRlICJzM2MyNHh4LXBjbS5oIgogCi0jZGVmaW5lIFMzQzI0WFhfUENNX0RFQlVHIDAKLSNpZiBTM0MyNFhYX1BDTV9ERUJVRwotI2RlZmluZSBEQkcoeC4uLikgcHJpbnRrKEtFUk5fREVCVUcgInMzYzI0eHgtcGNtOiAiIHgpCi0jZWxzZQotI2RlZmluZSBEQkcoeC4uLikKLSNlbmRpZgotCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgczNjMjR4eF9wY21faGFyZHdhcmUgPSB7CiAJLmluZm8JCQk9IFNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVEIHwKIAkJCQkgICAgU05EUlZfUENNX0lORk9fQkxPQ0tfVFJBTlNGRVIgfApAQCAtODQsMTYgKzc3LDE2IEBACiAJZG1hX2FkZHJfdCBwb3MgPSBwcnRkLT5kbWFfcG9zOwogCWludCByZXQ7CiAKLQlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCiAJd2hpbGUgKHBydGQtPmRtYV9sb2FkZWQgPCBwcnRkLT5kbWFfbGltaXQpIHsKIAkJdW5zaWduZWQgbG9uZyBsZW4gPSBwcnRkLT5kbWFfcGVyaW9kOwogCi0JCURCRygiZG1hX2xvYWRlZDogJWRcbiIsIHBydGQtPmRtYV9sb2FkZWQpOworCQlwcl9kZWJ1ZygiZG1hX2xvYWRlZDogJWRcbiIsIHBydGQtPmRtYV9sb2FkZWQpOwogCiAJCWlmICgocG9zICsgbGVuKSA+IHBydGQtPmRtYV9lbmQpIHsKIAkJCWxlbiAgPSBwcnRkLT5kbWFfZW5kIC0gcG9zOwotCQkJREJHKEtFUk5fREVCVUcgIiVzOiBjb3JyZWN0ZWQgZG1hIGxlbiAlbGRcbiIsCisJCQlwcl9kZWJ1ZyhLRVJOX0RFQlVHICIlczogY29ycmVjdGVkIGRtYSBsZW4gJWxkXG4iLAogCQkJICAgICAgIF9fZnVuY19fLCBsZW4pOwogCQl9CiAKQEAgLTExOSw3ICsxMTIsNyBAQAogCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtID0gZGV2X2lkOwogCXN0cnVjdCBzM2MyNHh4X3J1bnRpbWVfZGF0YSAqcHJ0ZDsKIAotCURCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOworCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlpZiAocmVzdWx0ID09IFMzQzI0MTBfUkVTX0FCT1JUIHx8IHJlc3VsdCA9PSBTM0MyNDEwX1JFU19FUlIpCiAJCXJldHVybjsKQEAgLTE0OCw3ICsxNDEsNyBAQAogCXVuc2lnbmVkIGxvbmcgdG90Ynl0ZXMgPSBwYXJhbXNfYnVmZmVyX2J5dGVzKHBhcmFtcyk7CiAJaW50IHJldCA9IDA7CiAKLQlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCiAJLyogcmV0dXJuIGlmIHRoaXMgaXMgYSBidWZmZXJsZXNzIHRyYW5zZmVyIGUuZy4KIAkgKiBjb2RlYyA8LS0+IEJUIGNvZGVjIG9yIEdTTSBtb2RlbSAtLSBsZyBGSVhNRSAqLwpAQCAtMTYxLDE0ICsxNTQsMTQgQEAKIAkJLyogcHJlcGFyZSBETUEgKi8KIAkJcHJ0ZC0+cGFyYW1zID0gZG1hOwogCi0JCURCRygicGFyYW1zICVwLCBjbGllbnQgJXAsIGNoYW5uZWwgJWRcbiIsIHBydGQtPnBhcmFtcywKKwkJcHJfZGVidWcoInBhcmFtcyAlcCwgY2xpZW50ICVwLCBjaGFubmVsICVkXG4iLCBwcnRkLT5wYXJhbXMsCiAJCQlwcnRkLT5wYXJhbXMtPmNsaWVudCwgcHJ0ZC0+cGFyYW1zLT5jaGFubmVsKTsKIAogCQlyZXQgPSBzM2MyNDEwX2RtYV9yZXF1ZXN0KHBydGQtPnBhcmFtcy0+Y2hhbm5lbCwKIAkJCQkJICBwcnRkLT5wYXJhbXMtPmNsaWVudCwgTlVMTCk7CiAKIAkJaWYgKHJldCA8IDApIHsKLQkJCURCRyhLRVJOX0VSUiAiZmFpbGVkIHRvIGdldCBkbWEgY2hhbm5lbFxuIik7CisJCQlwcmludGsoS0VSTl9FUlIgImZhaWxlZCB0byBnZXQgZG1hIGNoYW5uZWxcbiIpOwogCQkJcmV0dXJuIHJldDsKIAkJfQogCX0KQEAgLTE5Niw3ICsxODksNyBAQAogewogCXN0cnVjdCBzM2MyNHh4X3J1bnRpbWVfZGF0YSAqcHJ0ZCA9IHN1YnN0cmVhbS0+cnVudGltZS0+cHJpdmF0ZV9kYXRhOwogCi0JREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CisJcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKIAogCS8qIFRPRE8gLSBkbyB3ZSBuZWVkIHRvIGVuc3VyZSBETUEgZmx1c2hlZCAqLwogCXNuZF9wY21fc2V0X3J1bnRpbWVfYnVmZmVyKHN1YnN0cmVhbSwgTlVMTCk7CkBAIC0yMTQsNyArMjA3LDcgQEAKIAlzdHJ1Y3QgczNjMjR4eF9ydW50aW1lX2RhdGEgKnBydGQgPSBzdWJzdHJlYW0tPnJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKIAlpbnQgcmV0ID0gMDsKIAotCURCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOworCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKIAkvKiByZXR1cm4gaWYgdGhpcyBpcyBhIGJ1ZmZlcmxlc3MgdHJhbnNmZXIgZS5nLgogCSAqIGNvZGVjIDwtLT4gQlQgY29kZWMgb3IgR1NNIG1vZGVtIC0tIGxnIEZJWE1FICovCkBAIC0yNTksNyArMjUyLDcgQEAKIAlzdHJ1Y3QgczNjMjR4eF9ydW50aW1lX2RhdGEgKnBydGQgPSBzdWJzdHJlYW0tPnJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKIAlpbnQgcmV0ID0gMDsKIAotCURCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOworCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlzcGluX2xvY2soJnBydGQtPmxvY2spOwogCkBAIC0yOTcsNyArMjkwLDcgQEAKIAl1bnNpZ25lZCBsb25nIHJlczsKIAlkbWFfYWRkcl90IHNyYywgZHN0OwogCi0JREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CisJcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKIAogCXNwaW5fbG9jaygmcHJ0ZC0+bG9jayk7CiAJczNjMjQxMF9kbWFfZ2V0cG9zaXRpb24ocHJ0ZC0+cGFyYW1zLT5jaGFubmVsLCAmc3JjLCAmZHN0KTsKQEAgLTMwOSw3ICszMDIsNyBAQAogCiAJc3Bpbl91bmxvY2soJnBydGQtPmxvY2spOwogCi0JREJHKCJQb2ludGVyICV4ICV4XG4iLCBzcmMsIGRzdCk7CisJcHJfZGVidWcoIlBvaW50ZXIgJXggJXhcbiIsIHNyYywgZHN0KTsKIAogCS8qIHdlIHNlZW0gdG8gYmUgZ2V0dGluZyB0aGUgb2RkIGVycm9yIGZyb20gdGhlIHBjbSBsaWJyYXJ5IGR1ZQogCSAqIHRvIG91dC1vZi1ib3VuZHMgcG9pbnRlcnMuIHRoaXMgaXMgbWF5YmUgZHVlIHRvIHRoZSBkbWEgZW5naW5lCkBAIC0zMzAsNyArMzIzLDcgQEAKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwogCXN0cnVjdCBzM2MyNHh4X3J1bnRpbWVfZGF0YSAqcHJ0ZDsKIAotCURCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOworCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlzbmRfc29jX3NldF9ydW50aW1lX2h3cGFyYW1zKHN1YnN0cmVhbSwgJnMzYzI0eHhfcGNtX2hhcmR3YXJlKTsKIApAQCAtMzQ5LDEwICszNDIsMTAgQEAKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwogCXN0cnVjdCBzM2MyNHh4X3J1bnRpbWVfZGF0YSAqcHJ0ZCA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKIAotCURCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOworCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlpZiAoIXBydGQpCi0JCURCRygiczNjMjR4eF9wY21fY2xvc2UgY2FsbGVkIHdpdGggcHJ0ZCA9PSBOVUxMXG4iKTsKKwkJcHJfZGVidWcoInMzYzI0eHhfcGNtX2Nsb3NlIGNhbGxlZCB3aXRoIHBydGQgPT0gTlVMTFxuIik7CiAKIAlrZnJlZShwcnRkKTsKIApAQCAtMzY0LDcgKzM1Nyw3IEBACiB7CiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKIAotCURCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOworCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlyZXR1cm4gZG1hX21tYXBfd3JpdGVjb21iaW5lKHN1YnN0cmVhbS0+cGNtLT5jYXJkLT5kZXYsIHZtYSwKIAkJCQkgICAgIHJ1bnRpbWUtPmRtYV9hcmVhLApAQCAtMzkwLDcgKzM4Myw3IEBACiAJc3RydWN0IHNuZF9kbWFfYnVmZmVyICpidWYgPSAmc3Vic3RyZWFtLT5kbWFfYnVmZmVyOwogCXNpemVfdCBzaXplID0gczNjMjR4eF9wY21faGFyZHdhcmUuYnVmZmVyX2J5dGVzX21heDsKIAotCURCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOworCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlidWYtPmRldi50eXBlID0gU05EUlZfRE1BX1RZUEVfREVWOwogCWJ1Zi0+ZGV2LmRldiA9IHBjbS0+Y2FyZC0+ZGV2OwpAQCAtNDA5LDcgKzQwMiw3IEBACiAJc3RydWN0IHNuZF9kbWFfYnVmZmVyICpidWY7CiAJaW50IHN0cmVhbTsKIAotCURCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOworCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlmb3IgKHN0cmVhbSA9IDA7IHN0cmVhbSA8IDI7IHN0cmVhbSsrKSB7CiAJCXN1YnN0cmVhbSA9IHBjbS0+c3RyZWFtc1tzdHJlYW1dLnN1YnN0cmVhbTsKQEAgLTQzMyw3ICs0MjYsNyBAQAogewogCWludCByZXQgPSAwOwogCi0JREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CisJcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKIAogCWlmICghY2FyZC0+ZGV2LT5kbWFfbWFzaykKIAkJY2FyZC0+ZGV2LT5kbWFfbWFzayA9ICZzM2MyNHh4X3BjbV9kbWFtYXNrOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3MzYzI0eHgvczNjMjR4eF91ZGExMzR4LmMgYi9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNHh4X3VkYTEzNHguYwppbmRleCBhMGE0ZDE4My4uOGU3OWE0MSAxMDA2NDQKLS0tIGEvc291bmQvc29jL3MzYzI0eHgvczNjMjR4eF91ZGExMzR4LmMKKysrIGIvc291bmQvc29jL3MzYzI0eHgvczNjMjR4eF91ZGExMzR4LmMKQEAgLTIyLDcgKzIyLDcgQEAKICNpbmNsdWRlIDxzb3VuZC9zM2MyNHh4X3VkYTEzNHguaD4KICNpbmNsdWRlIDxzb3VuZC91ZGExMzR4Lmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3JlZ3MtaWlzLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLWlpcy5oPgogCiAjaW5jbHVkZSAiczNjMjR4eC1wY20uaCIKICNpbmNsdWRlICJzM2MyNHh4LWkycy5oIgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3MzYzI0eHgvczNjNjR4eC1pMnMuYyBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzY0eHgtaTJzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNjNWRlNwotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzY0eHgtaTJzLmMKQEAgLTAsMCArMSwyMjIgQEAKKy8qIHNvdW5kL3NvYy9zM2MyNHh4L3MzYzY0eHgtaTJzLmMKKyAqCisgKiBBTFNBIFNvQyBBdWRpbyBMYXllciAtIFMzQzY0WFggSTJTIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqICAgICAgQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICogICAgICBodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisKKyNpbmNsdWRlIDxwbGF0L3JlZ3MtczNjMjQxMi1paXMuaD4KKyNpbmNsdWRlIDxwbGF0L2dwaW8tYmFuay1kLmg+CisjaW5jbHVkZSA8cGxhdC9ncGlvLWJhbmstZS5oPgorI2luY2x1ZGUgPHBsYXQvZ3Bpby1jZmcuaD4KKyNpbmNsdWRlIDxwbGF0L2F1ZGlvLmg+CisKKyNpbmNsdWRlIDxtYWNoL21hcC5oPgorI2luY2x1ZGUgPG1hY2gvZG1hLmg+CisKKyNpbmNsdWRlICJzM2MyNHh4LXBjbS5oIgorI2luY2x1ZGUgInMzYzY0eHgtaTJzLmgiCisKK3N0YXRpYyBzdHJ1Y3QgczNjMjQxMF9kbWFfY2xpZW50IHMzYzY0eHhfZG1hX2NsaWVudF9vdXQgPSB7CisJLm5hbWUJCT0gIkkyUyBQQ00gU3RlcmVvIG91dCIKK307CisKK3N0YXRpYyBzdHJ1Y3QgczNjMjQxMF9kbWFfY2xpZW50IHMzYzY0eHhfZG1hX2NsaWVudF9pbiA9IHsKKwkubmFtZQkJPSAiSTJTIFBDTSBTdGVyZW8gaW4iCit9OworCitzdGF0aWMgc3RydWN0IHMzYzI0eHhfcGNtX2RtYV9wYXJhbXMgczNjNjR4eF9pMnNfcGNtX3N0ZXJlb19vdXRbMl0gPSB7CisJWzBdID0geworCQkuY2hhbm5lbAk9IERNQUNIX0kyUzBfT1VULAorCQkuY2xpZW50CQk9ICZzM2M2NHh4X2RtYV9jbGllbnRfb3V0LAorCQkuZG1hX2FkZHIJPSBTM0M2NFhYX1BBX0lJUzAgKyBTM0MyNDEyX0lJU1RYRCwKKwkJLmRtYV9zaXplCT0gNCwKKwl9LAorCVsxXSA9IHsKKwkJLmNoYW5uZWwJPSBETUFDSF9JMlMxX09VVCwKKwkJLmNsaWVudAkJPSAmczNjNjR4eF9kbWFfY2xpZW50X291dCwKKwkJLmRtYV9hZGRyCT0gUzNDNjRYWF9QQV9JSVMxICsgUzNDMjQxMl9JSVNUWEQsCisJCS5kbWFfc2l6ZQk9IDQsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgczNjMjR4eF9wY21fZG1hX3BhcmFtcyBzM2M2NHh4X2kyc19wY21fc3RlcmVvX2luWzJdID0geworCVswXSA9IHsKKwkJLmNoYW5uZWwJPSBETUFDSF9JMlMwX0lOLAorCQkuY2xpZW50CQk9ICZzM2M2NHh4X2RtYV9jbGllbnRfaW4sCisJCS5kbWFfYWRkcgk9IFMzQzY0WFhfUEFfSUlTMCArIFMzQzI0MTJfSUlTUlhELAorCQkuZG1hX3NpemUJPSA0LAorCX0sCisJWzFdID0geworCQkuY2hhbm5lbAk9IERNQUNIX0kyUzFfSU4sCisJCS5jbGllbnQJCT0gJnMzYzY0eHhfZG1hX2NsaWVudF9pbiwKKwkJLmRtYV9hZGRyCT0gUzNDNjRYWF9QQV9JSVMxICsgUzNDMjQxMl9JSVNSWEQsCisJCS5kbWFfc2l6ZQk9IDQsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgczNjX2kyc3YyX2luZm8gczNjNjR4eF9pMnNbMl07CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHMzY19pMnN2Ml9pbmZvICp0b19pbmZvKHN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSkKK3sKKwlyZXR1cm4gY3B1X2RhaS0+cHJpdmF0ZV9kYXRhOworfQorCitzdGF0aWMgaW50IHMzYzY0eHhfaTJzX3NldF9zeXNjbGsoc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpLAorCQkJCSAgaW50IGNsa19pZCwgdW5zaWduZWQgaW50IGZyZXEsIGludCBkaXIpCit7CisJc3RydWN0IHMzY19pMnN2Ml9pbmZvICppMnMgPSB0b19pbmZvKGNwdV9kYWkpOworCXUzMiBpaXNtb2QgPSByZWFkbChpMnMtPnJlZ3MgKyBTM0MyNDEyX0lJU01PRCk7CisKKwlzd2l0Y2ggKGNsa19pZCkgeworCWNhc2UgUzNDNjRYWF9DTEtTUkNfUENMSzoKKwkJaWlzbW9kICY9IH5TM0M2NFhYX0lJU01PRF9JTVNfU1lTTVVYOworCQlicmVhazsKKworCWNhc2UgUzNDNjRYWF9DTEtTUkNfTVVYOgorCQlpaXNtb2QgfD0gUzNDNjRYWF9JSVNNT0RfSU1TX1NZU01VWDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwl3cml0ZWwoaWlzbW9kLCBpMnMtPnJlZ3MgKyBTM0MyNDEyX0lJU01PRCk7CisKKwlyZXR1cm4gMDsKK30KKworCit1bnNpZ25lZCBsb25nIHMzYzY0eHhfaTJzX2dldF9jbG9ja3JhdGUoc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJc3RydWN0IHMzY19pMnN2Ml9pbmZvICppMnMgPSB0b19pbmZvKGRhaSk7CisKKwlyZXR1cm4gY2xrX2dldF9yYXRlKGkycy0+aWlzX2NjbGspOworfQorRVhQT1JUX1NZTUJPTF9HUEwoczNjNjR4eF9pMnNfZ2V0X2Nsb2NrcmF0ZSk7CisKK3N0YXRpYyBpbnQgczNjNjR4eF9pMnNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKKwkJCSAgICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgczNjX2kyc3YyX2luZm8gKmkyczsKKwlpbnQgcmV0OworCisJZGV2X2RiZyhkZXYsICIlczogcHJvYmluZyBkYWkgJWRcbiIsIF9fZnVuY19fLCBwZGV2LT5pZCk7CisKKwlpZiAocGRldi0+aWQgPCAwIHx8IHBkZXYtPmlkID4gQVJSQVlfU0laRShzM2M2NHh4X2kycykpIHsKKwkJZGV2X2VycihkZXYsICJpZCAlZCBvdXQgb2YgcmFuZ2VcbiIsIHBkZXYtPmlkKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaTJzID0gJnMzYzY0eHhfaTJzW3BkZXYtPmlkXTsKKworCXJldCA9IHMzY19pMnN2Ml9wcm9iZShwZGV2LCBkYWksIGkycywKKwkJCSAgICAgIHBkZXYtPmlkID8gUzNDNjRYWF9QQV9JSVMxIDogUzNDNjRYWF9QQV9JSVMwKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaTJzLT5kbWFfY2FwdHVyZSA9ICZzM2M2NHh4X2kyc19wY21fc3RlcmVvX2luW3BkZXYtPmlkXTsKKwlpMnMtPmRtYV9wbGF5YmFjayA9ICZzM2M2NHh4X2kyc19wY21fc3RlcmVvX291dFtwZGV2LT5pZF07CisKKwlpMnMtPmlpc19jY2xrID0gY2xrX2dldChkZXYsICJhdWRpby1idXMiKTsKKwlpZiAoSVNfRVJSKGkycy0+aWlzX2NjbGspKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCBhdWRpby1idXMiKTsKKwkJaW91bm1hcChpMnMtPnJlZ3MpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKiBjb25maWd1cmUgR1BJTyBmb3IgaTJzIHBvcnQgKi8KKwlzd2l0Y2ggKHBkZXYtPmlkKSB7CisJY2FzZSAwOgorCQlzM2NfZ3Bpb19jZmdwaW4oUzNDNjRYWF9HUEQoMCksIFMzQzY0WFhfR1BEMF9JMlMwX0NMSyk7CisJCXMzY19ncGlvX2NmZ3BpbihTM0M2NFhYX0dQRCgxKSwgUzNDNjRYWF9HUEQxX0kyUzBfQ0RDTEspOworCQlzM2NfZ3Bpb19jZmdwaW4oUzNDNjRYWF9HUEQoMiksIFMzQzY0WFhfR1BEMl9JMlMwX0xSQ0xLKTsKKwkJczNjX2dwaW9fY2ZncGluKFMzQzY0WFhfR1BEKDMpLCBTM0M2NFhYX0dQRDNfSTJTMF9ESSk7CisJCXMzY19ncGlvX2NmZ3BpbihTM0M2NFhYX0dQRCg0KSwgUzNDNjRYWF9HUEQ0X0kyUzBfRDApOworCQlicmVhazsKKwljYXNlIDE6CisJCXMzY19ncGlvX2NmZ3BpbihTM0M2NFhYX0dQRSgwKSwgUzNDNjRYWF9HUEUwX0kyUzFfQ0xLKTsKKwkJczNjX2dwaW9fY2ZncGluKFMzQzY0WFhfR1BFKDEpLCBTM0M2NFhYX0dQRTFfSTJTMV9DRENMSyk7CisJCXMzY19ncGlvX2NmZ3BpbihTM0M2NFhYX0dQRSgyKSwgUzNDNjRYWF9HUEUyX0kyUzFfTFJDTEspOworCQlzM2NfZ3Bpb19jZmdwaW4oUzNDNjRYWF9HUEUoMyksIFMzQzY0WFhfR1BFM19JMlMxX0RJKTsKKwkJczNjX2dwaW9fY2ZncGluKFMzQzY0WFhfR1BFKDQpLCBTM0M2NFhYX0dQRTRfSTJTMV9EMCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKworI2RlZmluZSBTM0M2NFhYX0kyU19SQVRFUyBcCisJKFNORFJWX1BDTV9SQVRFXzgwMDAgfCBTTkRSVl9QQ01fUkFURV8xMTAyNSB8IFNORFJWX1BDTV9SQVRFXzE2MDAwIHwgXAorCVNORFJWX1BDTV9SQVRFXzIyMDUwIHwgU05EUlZfUENNX1JBVEVfMzIwMDAgfCBTTkRSVl9QQ01fUkFURV80NDEwMCB8IFwKKwlTTkRSVl9QQ01fUkFURV80ODAwMCB8IFNORFJWX1BDTV9SQVRFXzg4MjAwIHwgU05EUlZfUENNX1JBVEVfOTYwMDApCisKKyNkZWZpbmUgUzNDNjRYWF9JMlNfRk1UUyBcCisJKFNORFJWX1BDTV9GTVRCSVRfUzggfCBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSkKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgczNjNjR4eF9pMnNfZGFpX29wcyA9IHsKKwkuc2V0X3N5c2Nsawk9IHMzYzY0eHhfaTJzX3NldF9zeXNjbGssCQorfTsKKworc3RydWN0IHNuZF9zb2NfZGFpIHMzYzY0eHhfaTJzX2RhaSA9IHsKKwkubmFtZQkJPSAiczNjNjR4eC1pMnMiLAorCS5pZAkJPSAwLAorCS5wcm9iZQkJPSBzM2M2NHh4X2kyc19wcm9iZSwKKwkucGxheWJhY2sgPSB7CisJCS5jaGFubmVsc19taW4JPSAyLAorCQkuY2hhbm5lbHNfbWF4CT0gMiwKKwkJLnJhdGVzCQk9IFMzQzY0WFhfSTJTX1JBVEVTLAorCQkuZm9ybWF0cwk9IFMzQzY0WFhfSTJTX0ZNVFMsCisJfSwKKwkuY2FwdHVyZSA9IHsKKwkJLmNoYW5uZWxzX21pbgk9IDIsCisJCS5jaGFubmVsc19tYXgJPSAyLAorCQkucmF0ZXMJCT0gUzNDNjRYWF9JMlNfUkFURVMsCisJCS5mb3JtYXRzCT0gUzNDNjRYWF9JMlNfRk1UUywKKwl9LAorCS5vcHMgPSAmczNjNjR4eF9pMnNfZGFpX29wcywKK307CitFWFBPUlRfU1lNQk9MX0dQTChzM2M2NHh4X2kyc19kYWkpOworCitzdGF0aWMgaW50IF9faW5pdCBzM2M2NHh4X2kyc19pbml0KHZvaWQpCit7CisJcmV0dXJuICBzM2NfaTJzdjJfcmVnaXN0ZXJfZGFpKCZzM2M2NHh4X2kyc19kYWkpOworfQorbW9kdWxlX2luaXQoczNjNjR4eF9pMnNfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzM2M2NHh4X2kyc19leGl0KHZvaWQpCit7CisJc25kX3NvY191bnJlZ2lzdGVyX2RhaSgmczNjNjR4eF9pMnNfZGFpKTsKK30KK21vZHVsZV9leGl0KHMzYzY0eHhfaTJzX2V4aXQpOworCisvKiBNb2R1bGUgaW5mb3JtYXRpb24gKi8KK01PRFVMRV9BVVRIT1IoIkJlbiBEb29rcywgPGJlbkBzaW10ZWMuY28udWs+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlMzQzY0WFggSTJTIFNvQyBJbnRlcmZhY2UiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworCisKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzY0eHgtaTJzLmggYi9zb3VuZC9zb2MvczNjMjR4eC9zM2M2NHh4LWkycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3ZmZlM2MKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvczNjMjR4eC9zM2M2NHh4LWkycy5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qIHNvdW5kL3NvYy9zM2MyNHh4L3MzYzY0eHgtaTJzLmgKKyAqCisgKiBBTFNBIFNvQyBBdWRpbyBMYXllciAtIFMzQzY0WFggSTJTIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqICAgICAgQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICogICAgICBodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfX1NORF9TT0NfUzNDMjRYWF9TM0M2NFhYX0kyU19ICisjZGVmaW5lIF9fU05EX1NPQ19TM0MyNFhYX1MzQzY0WFhfSTJTX0ggX19GSUxFX18KKworI2luY2x1ZGUgInMzYy1pMnMtdjIuaCIKKworI2RlZmluZSBTM0M2NFhYX0RJVl9CQ0xLCVMzQ19JMlNWMl9ESVZfQkNMSworI2RlZmluZSBTM0M2NFhYX0RJVl9SQ0xLCVMzQ19JMlNWMl9ESVZfUkNMSworI2RlZmluZSBTM0M2NFhYX0RJVl9QUkVTQ0FMRVIJUzNDX0kyU1YyX0RJVl9QUkVTQ0FMRVIKKworI2RlZmluZSBTM0M2NFhYX0NMS1NSQ19QQ0xLCSgwKQorI2RlZmluZSBTM0M2NFhYX0NMS1NSQ19NVVgJKDEpCisKK2V4dGVybiBzdHJ1Y3Qgc25kX3NvY19kYWkgczNjNjR4eF9pMnNfZGFpOworCitleHRlcm4gdW5zaWduZWQgbG9uZyBzM2M2NHh4X2kyc19nZXRfY2xvY2tyYXRlKHN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSk7CisKKyNlbmRpZiAvKiBfX1NORF9TT0NfUzNDMjRYWF9TM0M2NFhYX0kyU19IICovCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc2gvaGFjLmMgYi9zb3VuZC9zb2Mvc2gvaGFjLmMKaW5kZXggZWFiMzE4My4uNDFkYjc1YSAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NoL2hhYy5jCisrKyBiL3NvdW5kL3NvYy9zaC9oYWMuYwpAQCAtMjY3LDYgKzI2NywxMCBAQAogI2RlZmluZSBBQzk3X0ZNVFMJXAogCVNORFJWX1BDTV9GTVRCSVRfUzE2X0xFCiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIGhhY19kYWlfb3BzID0geworCS5od19wYXJhbXMJPSBoYWNfaHdfcGFyYW1zLAorfTsKKwogc3RydWN0IHNuZF9zb2NfZGFpIHNoNF9oYWNfZGFpW10gPSB7CiB7CiAJLm5hbWUJCQk9ICJIQUMwIiwKQEAgLTI4NCw5ICsyODgsNyBAQAogCQkuY2hhbm5lbHNfbWluCT0gMiwKIAkJLmNoYW5uZWxzX21heAk9IDIsCiAJfSwKLQkub3BzID0gewotCQkuaHdfcGFyYW1zCT0gaGFjX2h3X3BhcmFtcywKLQl9LAorCS5vcHMgPSAmaGFjX2RhaV9vcHMsCiB9LAogI2lmZGVmIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjAKIHsKQEAgLTMwNSw5ICszMDcsNyBAQAogCQkuY2hhbm5lbHNfbWluCT0gMiwKIAkJLmNoYW5uZWxzX21heAk9IDIsCiAJfSwKLQkub3BzID0gewotCQkuaHdfcGFyYW1zCT0gaGFjX2h3X3BhcmFtcywKLQl9LAorCS5vcHMgPSAmaGFjX2RhaV9vcHMsCiAKIH0sCiAjZW5kaWYKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zaC9zc2kuYyBiL3NvdW5kL3NvYy9zaC9zc2kuYwppbmRleCBkMWU1MzkwLi41NmZhMDg3IDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc2gvc3NpLmMKKysrIGIvc291bmQvc29jL3NoL3NzaS5jCkBAIC0zMzYsNiArMzM2LDE2IEBACiAJIFNORFJWX1BDTV9GTVRCSVRfUzI0XzNMRSB8IFNORFJWX1BDTV9GTVRCSVRfVTI0XzNMRSB8CVwKIAkgU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUgIHwgU05EUlZfUENNX0ZNVEJJVF9VMzJfTEUpCiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHNzaV9kYWlfb3BzID0geworCS5zdGFydHVwCT0gc3NpX3N0YXJ0dXAsCisJLnNodXRkb3duCT0gc3NpX3NodXRkb3duLAorCS50cmlnZ2VyCT0gc3NpX3RyaWdnZXIsCisJLmh3X3BhcmFtcwk9IHNzaV9od19wYXJhbXMsCisJLnNldF9zeXNjbGsJPSBzc2lfc2V0X3N5c2NsaywKKwkuc2V0X2Nsa2Rpdgk9IHNzaV9zZXRfY2xrZGl2LAorCS5zZXRfZm10CT0gc3NpX3NldF9mbXQsCit9OworCiBzdHJ1Y3Qgc25kX3NvY19kYWkgc2g0X3NzaV9kYWlbXSA9IHsKIHsKIAkubmFtZQkJCT0gIlNTSTAiLApAQCAtMzUyLDE1ICszNjIsNyBAQAogCQkuY2hhbm5lbHNfbWluCT0gMiwKIAkJLmNoYW5uZWxzX21heAk9IDgsCiAJfSwKLQkub3BzID0gewotCQkuc3RhcnR1cAk9IHNzaV9zdGFydHVwLAotCQkuc2h1dGRvd24JPSBzc2lfc2h1dGRvd24sCi0JCS50cmlnZ2VyCT0gc3NpX3RyaWdnZXIsCi0JCS5od19wYXJhbXMJPSBzc2lfaHdfcGFyYW1zLAotCQkuc2V0X3N5c2Nsawk9IHNzaV9zZXRfc3lzY2xrLAotCQkuc2V0X2Nsa2Rpdgk9IHNzaV9zZXRfY2xrZGl2LAotCQkuc2V0X2ZtdAk9IHNzaV9zZXRfZm10LAotCX0sCisJLm9wcyA9ICZzc2lfZGFpX29wcywKIH0sCiAjaWZkZWYgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MAogewpAQCAtMzc4LDE1ICszODAsNyBAQAogCQkuY2hhbm5lbHNfbWluCT0gMiwKIAkJLmNoYW5uZWxzX21heAk9IDgsCiAJfSwKLQkub3BzID0gewotCQkuc3RhcnR1cAk9IHNzaV9zdGFydHVwLAotCQkuc2h1dGRvd24JPSBzc2lfc2h1dGRvd24sCi0JCS50cmlnZ2VyCT0gc3NpX3RyaWdnZXIsCi0JCS5od19wYXJhbXMJPSBzc2lfaHdfcGFyYW1zLAotCQkuc2V0X3N5c2Nsawk9IHNzaV9zZXRfc3lzY2xrLAotCQkuc2V0X2Nsa2Rpdgk9IHNzaV9zZXRfY2xrZGl2LAotCQkuc2V0X2ZtdAk9IHNzaV9zZXRfZm10LAotCX0sCisJLm9wcyA9ICZzc2lfZGFpX29wcywKIH0sCiAjZW5kaWYKIH07CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc29jLWNvcmUuYyBiL3NvdW5kL3NvYy9zb2MtY29yZS5jCmluZGV4IGVjM2Y4YmIuLjZlNzEwZjcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zb2MtY29yZS5jCisrKyBiL3NvdW5kL3NvYy9zb2MtY29yZS5jCkBAIC0xMzMsOCArMTMzLDggQEAKIAltdXRleF9sb2NrKCZwY21fbXV0ZXgpOwogCiAJLyogc3RhcnR1cCB0aGUgYXVkaW8gc3Vic3lzdGVtICovCi0JaWYgKGNwdV9kYWktPm9wcy5zdGFydHVwKSB7Ci0JCXJldCA9IGNwdV9kYWktPm9wcy5zdGFydHVwKHN1YnN0cmVhbSwgY3B1X2RhaSk7CisJaWYgKGNwdV9kYWktPm9wcy0+c3RhcnR1cCkgeworCQlyZXQgPSBjcHVfZGFpLT5vcHMtPnN0YXJ0dXAoc3Vic3RyZWFtLCBjcHVfZGFpKTsKIAkJaWYgKHJldCA8IDApIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiYXNvYzogY2FuJ3Qgb3BlbiBpbnRlcmZhY2UgJXNcbiIsCiAJCQkJY3B1X2RhaS0+bmFtZSk7CkBAIC0xNTAsOCArMTUwLDggQEAKIAkJfQogCX0KIAotCWlmIChjb2RlY19kYWktPm9wcy5zdGFydHVwKSB7Ci0JCXJldCA9IGNvZGVjX2RhaS0+b3BzLnN0YXJ0dXAoc3Vic3RyZWFtLCBjb2RlY19kYWkpOworCWlmIChjb2RlY19kYWktPm9wcy0+c3RhcnR1cCkgeworCQlyZXQgPSBjb2RlY19kYWktPm9wcy0+c3RhcnR1cChzdWJzdHJlYW0sIGNvZGVjX2RhaSk7CiAJCWlmIChyZXQgPCAwKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgImFzb2M6IGNhbid0IG9wZW4gY29kZWMgJXNcbiIsCiAJCQkJY29kZWNfZGFpLT5uYW1lKTsKQEAgLTIzNCw3ICsyMzQsNyBAQAogCQljcHVfZGFpLT5jYXB0dXJlLmFjdGl2ZSA9IGNvZGVjX2RhaS0+Y2FwdHVyZS5hY3RpdmUgPSAxOwogCWNwdV9kYWktPmFjdGl2ZSA9IGNvZGVjX2RhaS0+YWN0aXZlID0gMTsKIAljcHVfZGFpLT5ydW50aW1lID0gcnVudGltZTsKLQlzb2NkZXYtPmNvZGVjLT5hY3RpdmUrKzsKKwljYXJkLT5jb2RlYy0+YWN0aXZlKys7CiAJbXV0ZXhfdW5sb2NrKCZwY21fbXV0ZXgpOwogCXJldHVybiAwOwogCkBAIC0yNDcsOCArMjQ3LDggQEAKIAkJcGxhdGZvcm0tPnBjbV9vcHMtPmNsb3NlKHN1YnN0cmVhbSk7CiAKIHBsYXRmb3JtX2VycjoKLQlpZiAoY3B1X2RhaS0+b3BzLnNodXRkb3duKQotCQljcHVfZGFpLT5vcHMuc2h1dGRvd24oc3Vic3RyZWFtLCBjcHVfZGFpKTsKKwlpZiAoY3B1X2RhaS0+b3BzLT5zaHV0ZG93bikKKwkJY3B1X2RhaS0+b3BzLT5zaHV0ZG93bihzdWJzdHJlYW0sIGNwdV9kYWkpOwogb3V0OgogCW11dGV4X3VubG9jaygmcGNtX211dGV4KTsKIAlyZXR1cm4gcmV0OwpAQCAtMjY0LDcgKzI2NCw3IEBACiAJc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgc25kX3NvY19jYXJkLAogCQkJCQkJIGRlbGF5ZWRfd29yay53b3JrKTsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IGNhcmQtPnNvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNhcmQtPmNvZGVjOwogCXN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpOwogCWludCBpOwogCkBAIC0zMTksNyArMzE5LDcgQEAKIAlzdHJ1Y3Qgc25kX3NvY19wbGF0Zm9ybSAqcGxhdGZvcm0gPSBjYXJkLT5wbGF0Zm9ybTsKIAlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkgPSBtYWNoaW5lLT5jcHVfZGFpOwogCXN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpID0gbWFjaGluZS0+Y29kZWNfZGFpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY2FyZC0+Y29kZWM7CiAKIAltdXRleF9sb2NrKCZwY21fbXV0ZXgpOwogCkBAIC0zNDAsMTEgKzM0MCwxMSBAQAogCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKQogCQlzbmRfc29jX2RhaV9kaWdpdGFsX211dGUoY29kZWNfZGFpLCAxKTsKIAotCWlmIChjcHVfZGFpLT5vcHMuc2h1dGRvd24pCi0JCWNwdV9kYWktPm9wcy5zaHV0ZG93bihzdWJzdHJlYW0sIGNwdV9kYWkpOworCWlmIChjcHVfZGFpLT5vcHMtPnNodXRkb3duKQorCQljcHVfZGFpLT5vcHMtPnNodXRkb3duKHN1YnN0cmVhbSwgY3B1X2RhaSk7CiAKLQlpZiAoY29kZWNfZGFpLT5vcHMuc2h1dGRvd24pCi0JCWNvZGVjX2RhaS0+b3BzLnNodXRkb3duKHN1YnN0cmVhbSwgY29kZWNfZGFpKTsKKwlpZiAoY29kZWNfZGFpLT5vcHMtPnNodXRkb3duKQorCQljb2RlY19kYWktPm9wcy0+c2h1dGRvd24oc3Vic3RyZWFtLCBjb2RlY19kYWkpOwogCiAJaWYgKG1hY2hpbmUtPm9wcyAmJiBtYWNoaW5lLT5vcHMtPnNodXRkb3duKQogCQltYWNoaW5lLT5vcHMtPnNodXRkb3duKHN1YnN0cmVhbSk7CkBAIC0zODcsNyArMzg3LDcgQEAKIAlzdHJ1Y3Qgc25kX3NvY19wbGF0Zm9ybSAqcGxhdGZvcm0gPSBjYXJkLT5wbGF0Zm9ybTsKIAlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkgPSBtYWNoaW5lLT5jcHVfZGFpOwogCXN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpID0gbWFjaGluZS0+Y29kZWNfZGFpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY2FyZC0+Y29kZWM7CiAJaW50IHJldCA9IDA7CiAKIAltdXRleF9sb2NrKCZwY21fbXV0ZXgpOwpAQCAtNDA4LDE2ICs0MDgsMTYgQEAKIAkJfQogCX0KIAotCWlmIChjb2RlY19kYWktPm9wcy5wcmVwYXJlKSB7Ci0JCXJldCA9IGNvZGVjX2RhaS0+b3BzLnByZXBhcmUoc3Vic3RyZWFtLCBjb2RlY19kYWkpOworCWlmIChjb2RlY19kYWktPm9wcy0+cHJlcGFyZSkgeworCQlyZXQgPSBjb2RlY19kYWktPm9wcy0+cHJlcGFyZShzdWJzdHJlYW0sIGNvZGVjX2RhaSk7CiAJCWlmIChyZXQgPCAwKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgImFzb2M6IGNvZGVjIERBSSBwcmVwYXJlIGVycm9yXG4iKTsKIAkJCWdvdG8gb3V0OwogCQl9CiAJfQogCi0JaWYgKGNwdV9kYWktPm9wcy5wcmVwYXJlKSB7Ci0JCXJldCA9IGNwdV9kYWktPm9wcy5wcmVwYXJlKHN1YnN0cmVhbSwgY3B1X2RhaSk7CisJaWYgKGNwdV9kYWktPm9wcy0+cHJlcGFyZSkgeworCQlyZXQgPSBjcHVfZGFpLT5vcHMtPnByZXBhcmUoc3Vic3RyZWFtLCBjcHVfZGFpKTsKIAkJaWYgKHJldCA8IDApIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiYXNvYzogY3B1IERBSSBwcmVwYXJlIGVycm9yXG4iKTsKIAkJCWdvdG8gb3V0OwpAQCAtNDk0LDggKzQ5NCw4IEBACiAJCX0KIAl9CiAKLQlpZiAoY29kZWNfZGFpLT5vcHMuaHdfcGFyYW1zKSB7Ci0JCXJldCA9IGNvZGVjX2RhaS0+b3BzLmh3X3BhcmFtcyhzdWJzdHJlYW0sIHBhcmFtcywgY29kZWNfZGFpKTsKKwlpZiAoY29kZWNfZGFpLT5vcHMtPmh3X3BhcmFtcykgeworCQlyZXQgPSBjb2RlY19kYWktPm9wcy0+aHdfcGFyYW1zKHN1YnN0cmVhbSwgcGFyYW1zLCBjb2RlY19kYWkpOwogCQlpZiAocmV0IDwgMCkgewogCQkJcHJpbnRrKEtFUk5fRVJSICJhc29jOiBjYW4ndCBzZXQgY29kZWMgJXMgaHcgcGFyYW1zXG4iLAogCQkJCWNvZGVjX2RhaS0+bmFtZSk7CkBAIC01MDMsOCArNTAzLDggQEAKIAkJfQogCX0KIAotCWlmIChjcHVfZGFpLT5vcHMuaHdfcGFyYW1zKSB7Ci0JCXJldCA9IGNwdV9kYWktPm9wcy5od19wYXJhbXMoc3Vic3RyZWFtLCBwYXJhbXMsIGNwdV9kYWkpOworCWlmIChjcHVfZGFpLT5vcHMtPmh3X3BhcmFtcykgeworCQlyZXQgPSBjcHVfZGFpLT5vcHMtPmh3X3BhcmFtcyhzdWJzdHJlYW0sIHBhcmFtcywgY3B1X2RhaSk7CiAJCWlmIChyZXQgPCAwKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgImFzb2M6IGludGVyZmFjZSAlcyBodyBwYXJhbXMgZmFpbGVkXG4iLAogCQkJCWNwdV9kYWktPm5hbWUpOwpAQCAtNTI2LDEyICs1MjYsMTIgQEAKIAlyZXR1cm4gcmV0OwogCiBwbGF0Zm9ybV9lcnI6Ci0JaWYgKGNwdV9kYWktPm9wcy5od19mcmVlKQotCQljcHVfZGFpLT5vcHMuaHdfZnJlZShzdWJzdHJlYW0sIGNwdV9kYWkpOworCWlmIChjcHVfZGFpLT5vcHMtPmh3X2ZyZWUpCisJCWNwdV9kYWktPm9wcy0+aHdfZnJlZShzdWJzdHJlYW0sIGNwdV9kYWkpOwogCiBpbnRlcmZhY2VfZXJyOgotCWlmIChjb2RlY19kYWktPm9wcy5od19mcmVlKQotCQljb2RlY19kYWktPm9wcy5od19mcmVlKHN1YnN0cmVhbSwgY29kZWNfZGFpKTsKKwlpZiAoY29kZWNfZGFpLT5vcHMtPmh3X2ZyZWUpCisJCWNvZGVjX2RhaS0+b3BzLT5od19mcmVlKHN1YnN0cmVhbSwgY29kZWNfZGFpKTsKIAogY29kZWNfZXJyOgogCWlmIChtYWNoaW5lLT5vcHMgJiYgbWFjaGluZS0+b3BzLT5od19mcmVlKQpAQCAtNTUzLDcgKzU1Myw3IEBACiAJc3RydWN0IHNuZF9zb2NfcGxhdGZvcm0gKnBsYXRmb3JtID0gY2FyZC0+cGxhdGZvcm07CiAJc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gbWFjaGluZS0+Y3B1X2RhaTsKIAlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSA9IG1hY2hpbmUtPmNvZGVjX2RhaTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNhcmQtPmNvZGVjOwogCiAJbXV0ZXhfbG9jaygmcGNtX211dGV4KTsKIApAQCAtNTcwLDExICs1NzAsMTEgQEAKIAkJcGxhdGZvcm0tPnBjbV9vcHMtPmh3X2ZyZWUoc3Vic3RyZWFtKTsKIAogCS8qIG5vdyBmcmVlIGh3IHBhcmFtcyBmb3IgdGhlIERBSSdzICAqLwotCWlmIChjb2RlY19kYWktPm9wcy5od19mcmVlKQotCQljb2RlY19kYWktPm9wcy5od19mcmVlKHN1YnN0cmVhbSwgY29kZWNfZGFpKTsKKwlpZiAoY29kZWNfZGFpLT5vcHMtPmh3X2ZyZWUpCisJCWNvZGVjX2RhaS0+b3BzLT5od19mcmVlKHN1YnN0cmVhbSwgY29kZWNfZGFpKTsKIAotCWlmIChjcHVfZGFpLT5vcHMuaHdfZnJlZSkKLQkJY3B1X2RhaS0+b3BzLmh3X2ZyZWUoc3Vic3RyZWFtLCBjcHVfZGFpKTsKKwlpZiAoY3B1X2RhaS0+b3BzLT5od19mcmVlKQorCQljcHVfZGFpLT5vcHMtPmh3X2ZyZWUoc3Vic3RyZWFtLCBjcHVfZGFpKTsKIAogCW11dGV4X3VubG9jaygmcGNtX211dGV4KTsKIAlyZXR1cm4gMDsKQEAgLTU5MSw4ICs1OTEsOCBAQAogCXN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpID0gbWFjaGluZS0+Y29kZWNfZGFpOwogCWludCByZXQ7CiAKLQlpZiAoY29kZWNfZGFpLT5vcHMudHJpZ2dlcikgewotCQlyZXQgPSBjb2RlY19kYWktPm9wcy50cmlnZ2VyKHN1YnN0cmVhbSwgY21kLCBjb2RlY19kYWkpOworCWlmIChjb2RlY19kYWktPm9wcy0+dHJpZ2dlcikgeworCQlyZXQgPSBjb2RlY19kYWktPm9wcy0+dHJpZ2dlcihzdWJzdHJlYW0sIGNtZCwgY29kZWNfZGFpKTsKIAkJaWYgKHJldCA8IDApCiAJCQlyZXR1cm4gcmV0OwogCX0KQEAgLTYwMyw4ICs2MDMsOCBAQAogCQkJcmV0dXJuIHJldDsKIAl9CiAKLQlpZiAoY3B1X2RhaS0+b3BzLnRyaWdnZXIpIHsKLQkJcmV0ID0gY3B1X2RhaS0+b3BzLnRyaWdnZXIoc3Vic3RyZWFtLCBjbWQsIGNwdV9kYWkpOworCWlmIChjcHVfZGFpLT5vcHMtPnRyaWdnZXIpIHsKKwkJcmV0ID0gY3B1X2RhaS0+b3BzLT50cmlnZ2VyKHN1YnN0cmVhbSwgY21kLCBjcHVfZGFpKTsKIAkJaWYgKHJldCA8IDApCiAJCQlyZXR1cm4gcmV0OwogCX0KQEAgLTYyOSw3ICs2MjksNyBAQAogCXN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQgPSBzb2NkZXYtPmNhcmQ7CiAJc3RydWN0IHNuZF9zb2NfcGxhdGZvcm0gKnBsYXRmb3JtID0gY2FyZC0+cGxhdGZvcm07CiAJc3RydWN0IHNuZF9zb2NfY29kZWNfZGV2aWNlICpjb2RlY19kZXYgPSBzb2NkZXYtPmNvZGVjX2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNhcmQtPmNvZGVjOwogCWludCBpOwogCiAJLyogRHVlIHRvIHRoZSByZXN1bWUgYmVpbmcgc2NoZWR1bGVkIGludG8gYSB3b3JrcXVldWUgd2UgY291bGQKQEAgLTY0NSw4ICs2NDUsOCBAQAogCS8qIG11dGUgYW55IGFjdGl2ZSBEQUMncyAqLwogCWZvciAoaSA9IDA7IGkgPCBjYXJkLT5udW1fbGlua3M7IGkrKykgewogCQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSA9IGNhcmQtPmRhaV9saW5rW2ldLmNvZGVjX2RhaTsKLQkJaWYgKGRhaS0+b3BzLmRpZ2l0YWxfbXV0ZSAmJiBkYWktPnBsYXliYWNrLmFjdGl2ZSkKLQkJCWRhaS0+b3BzLmRpZ2l0YWxfbXV0ZShkYWksIDEpOworCQlpZiAoZGFpLT5vcHMtPmRpZ2l0YWxfbXV0ZSAmJiBkYWktPnBsYXliYWNrLmFjdGl2ZSkKKwkJCWRhaS0+b3BzLT5kaWdpdGFsX211dGUoZGFpLCAxKTsKIAl9CiAKIAkvKiBzdXNwZW5kIGFsbCBwY21zICovCkBAIC03MDUsNyArNzA1LDcgQEAKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IGNhcmQtPnNvY2RldjsKIAlzdHJ1Y3Qgc25kX3NvY19wbGF0Zm9ybSAqcGxhdGZvcm0gPSBjYXJkLT5wbGF0Zm9ybTsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlY19kZXZpY2UgKmNvZGVjX2RldiA9IHNvY2Rldi0+Y29kZWNfZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY2FyZC0+Y29kZWM7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShzb2NkZXYtPmRldik7CiAJaW50IGk7CiAKQEAgLTc0MSw4ICs3NDEsOCBAQAogCS8qIHVubXV0ZSBhbnkgYWN0aXZlIERBQ3MgKi8KIAlmb3IgKGkgPSAwOyBpIDwgY2FyZC0+bnVtX2xpbmtzOyBpKyspIHsKIAkJc3RydWN0IHNuZF9zb2NfZGFpICpkYWkgPSBjYXJkLT5kYWlfbGlua1tpXS5jb2RlY19kYWk7Ci0JCWlmIChkYWktPm9wcy5kaWdpdGFsX211dGUgJiYgZGFpLT5wbGF5YmFjay5hY3RpdmUpCi0JCQlkYWktPm9wcy5kaWdpdGFsX211dGUoZGFpLCAwKTsKKwkJaWYgKGRhaS0+b3BzLT5kaWdpdGFsX211dGUgJiYgZGFpLT5wbGF5YmFjay5hY3RpdmUpCisJCQlkYWktPm9wcy0+ZGlnaXRhbF9tdXRlKGRhaSwgMCk7CiAJfQogCiAJZm9yIChpID0gMDsgaSA8IGNhcmQtPm51bV9saW5rczsgaSsrKSB7CkBAIC05ODIsOCArOTgyLDggQEAKIHN0YXRpYyBpbnQgc29jX25ld19wY20oc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYsCiAJc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgKmRhaV9saW5rLCBpbnQgbnVtKQogewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CiAJc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCA9IHNvY2Rldi0+Y2FyZDsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjYXJkLT5jb2RlYzsKIAlzdHJ1Y3Qgc25kX3NvY19wbGF0Zm9ybSAqcGxhdGZvcm0gPSBjYXJkLT5wbGF0Zm9ybTsKIAlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSA9IGRhaV9saW5rLT5jb2RlY19kYWk7CiAJc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gZGFpX2xpbmstPmNwdV9kYWk7CkBAIC05OTgsNyArOTk4LDcgQEAKIAogCXJ0ZC0+ZGFpID0gZGFpX2xpbms7CiAJcnRkLT5zb2NkZXYgPSBzb2NkZXY7Ci0JY29kZWNfZGFpLT5jb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJY29kZWNfZGFpLT5jb2RlYyA9IGNhcmQtPmNvZGVjOwogCiAJLyogY2hlY2sgY2xpZW50IGFuZCBpbnRlcmZhY2UgaHcgY2FwYWJpbGl0aWVzICovCiAJc3ByaW50ZihuZXdfbmFtZSwgIiVzICVzLSVkIiwgZGFpX2xpbmstPnN0cmVhbV9uYW1lLCBjb2RlY19kYWktPm5hbWUsCkBAIC0xMDQ4LDkgKzEwNDgsOCBAQAogfQogCiAvKiBjb2RlYyByZWdpc3RlciBkdW1wICovCi1zdGF0aWMgc3NpemVfdCBzb2NfY29kZWNfcmVnX3Nob3coc3RydWN0IHNuZF9zb2NfZGV2aWNlICpkZXZkYXRhLCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBzb2NfY29kZWNfcmVnX3Nob3coc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gZGV2ZGF0YS0+Y29kZWM7CiAJaW50IGksIHN0ZXAgPSAxLCBjb3VudCA9IDA7CiAKIAlpZiAoIWNvZGVjLT5yZWdfY2FjaGVfc2l6ZSkKQEAgLTEwOTAsNyArMTA4OSw3IEBACiAJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKmRldmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlyZXR1cm4gc29jX2NvZGVjX3JlZ19zaG93KGRldmRhdGEsIGJ1Zik7CisJcmV0dXJuIHNvY19jb2RlY19yZWdfc2hvdyhkZXZkYXRhLT5jYXJkLT5jb2RlYywgYnVmKTsKIH0KIAogc3RhdGljIERFVklDRV9BVFRSKGNvZGVjX3JlZywgMDQ0NCwgY29kZWNfcmVnX3Nob3csIE5VTEwpOwpAQCAtMTEwNywxMiArMTEwNiwxMCBAQAogewogCXNzaXplX3QgcmV0OwogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgZGV2aWNlICpjYXJkX2RldiA9IGNvZGVjLT5jYXJkLT5kZXY7Ci0Jc3RydWN0IHNuZF9zb2NfZGV2aWNlICpkZXZkYXRhID0gY2FyZF9kZXYtPmRyaXZlcl9kYXRhOwogCWNoYXIgKmJ1ZiA9IGttYWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWJ1ZikKIAkJcmV0dXJuIC1FTk9NRU07Ci0JcmV0ID0gc29jX2NvZGVjX3JlZ19zaG93KGRldmRhdGEsIGJ1Zik7CisJcmV0ID0gc29jX2NvZGVjX3JlZ19zaG93KGNvZGVjLCBidWYpOwogCWlmIChyZXQgPj0gMCkKIAkJcmV0ID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIHJldCk7CiAJa2ZyZWUoYnVmKTsKQEAgLTEzMDksMTkgKzEzMDYsMTkgQEAKICAqLwogaW50IHNuZF9zb2NfbmV3X3BjbXMoc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYsIGludCBpZHgsIGNvbnN0IGNoYXIgKnhpZCkKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOwogCXN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQgPSBzb2NkZXYtPmNhcmQ7Ci0JaW50IHJldCA9IDAsIGk7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY2FyZC0+Y29kZWM7CisJaW50IHJldCwgaTsKIAogCW11dGV4X2xvY2soJmNvZGVjLT5tdXRleCk7CiAKIAkvKiByZWdpc3RlciBhIHNvdW5kIGNhcmQgKi8KLQljb2RlYy0+Y2FyZCA9IHNuZF9jYXJkX25ldyhpZHgsIHhpZCwgY29kZWMtPm93bmVyLCAwKTsKLQlpZiAoIWNvZGVjLT5jYXJkKSB7CisJcmV0ID0gc25kX2NhcmRfY3JlYXRlKGlkeCwgeGlkLCBjb2RlYy0+b3duZXIsIDAsICZjb2RlYy0+Y2FyZCk7CisJaWYgKHJldCA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJhc29jOiBjYW4ndCBjcmVhdGUgc291bmQgY2FyZCBmb3IgY29kZWMgJXNcbiIsCiAJCQljb2RlYy0+bmFtZSk7CiAJCW11dGV4X3VubG9jaygmY29kZWMtPm11dGV4KTsKLQkJcmV0dXJuIC1FTk9ERVY7CisJCXJldHVybiByZXQ7CiAJfQogCiAJY29kZWMtPmNhcmQtPmRldiA9IHNvY2Rldi0+ZGV2OwpAQCAtMTM1NSw4ICsxMzUyLDggQEAKICAqLwogaW50IHNuZF9zb2NfaW5pdF9jYXJkKHN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2KQogewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CiAJc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCA9IHNvY2Rldi0+Y2FyZDsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjYXJkLT5jb2RlYzsKIAlpbnQgcmV0ID0gMCwgaSwgYWM5NyA9IDAsIGVyciA9IDA7CiAKIAlmb3IgKGkgPSAwOyBpIDwgY2FyZC0+bnVtX2xpbmtzOyBpKyspIHsKQEAgLTE0MDcsNyArMTQwNCw3IEBACiAJaWYgKGVyciA8IDApCiAJCXByaW50ayhLRVJOX1dBUk5JTkcgImFzb2M6IGZhaWxlZCB0byBhZGQgY29kZWMgc3lzZnMgZmlsZXNcbiIpOwogCi0Jc29jX2luaXRfY29kZWNfZGVidWdmcyhzb2NkZXYtPmNvZGVjKTsKKwlzb2NfaW5pdF9jb2RlY19kZWJ1Z2ZzKGNvZGVjKTsKIAltdXRleF91bmxvY2soJmNvZGVjLT5tdXRleCk7CiAKIG91dDoKQEAgLTE0MjQsMTggKzE0MjEsMTkgQEAKICAqLwogdm9pZCBzbmRfc29jX2ZyZWVfcGNtcyhzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldikKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAjaWZkZWYgQ09ORklHX1NORF9TT0NfQUM5N19CVVMKIAlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaTsKIAlpbnQgaTsKICNlbmRpZgogCiAJbXV0ZXhfbG9jaygmY29kZWMtPm11dGV4KTsKLQlzb2NfY2xlYW51cF9jb2RlY19kZWJ1Z2ZzKHNvY2Rldi0+Y29kZWMpOworCXNvY19jbGVhbnVwX2NvZGVjX2RlYnVnZnMoY29kZWMpOwogI2lmZGVmIENPTkZJR19TTkRfU09DX0FDOTdfQlVTCiAJZm9yIChpID0gMDsgaSA8IGNvZGVjLT5udW1fZGFpOyBpKyspIHsKIAkJY29kZWNfZGFpID0gJmNvZGVjLT5kYWlbaV07Ci0JCWlmIChjb2RlY19kYWktPmFjOTdfY29udHJvbCAmJiBjb2RlYy0+YWM5NykgeworCQlpZiAoY29kZWNfZGFpLT5hYzk3X2NvbnRyb2wgJiYgY29kZWMtPmFjOTcgJiYKKwkJICAgIHN0cmNtcChjb2RlYy0+bmFtZSwgIkFDOTciKSAhPSAwKSB7CiAJCQlzb2NfYWM5N19kZXZfdW5yZWdpc3Rlcihjb2RlYyk7CiAJCQlnb3RvIGZyZWVfY2FyZDsKIAkJfQpAQCAtMTQ5OCw2ICsxNDk2LDM3IEBACiBFWFBPUlRfU1lNQk9MX0dQTChzbmRfc29jX2NuZXcpOwogCiAvKioKKyAqIHNuZF9zb2NfYWRkX2NvbnRyb2xzIC0gYWRkIGFuIGFycmF5IG9mIGNvbnRyb2xzIHRvIGEgY29kZWMuCisgKiBDb252aWVuaWVuY2UgZnVuY3Rpb24gdG8gYWRkIGEgbGlzdCBvZiBjb250cm9scy4gTWFueSBjb2RlY3Mgd2VyZQorICogZHVwbGljYXRpbmcgdGhpcyBjb2RlLgorICoKKyAqIEBjb2RlYzogY29kZWMgdG8gYWRkIGNvbnRyb2xzIHRvCisgKiBAY29udHJvbHM6IGFycmF5IG9mIGNvbnRyb2xzIHRvIGFkZAorICogQG51bV9jb250cm9sczogbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBhcnJheQorICoKKyAqIFJldHVybiAwIGZvciBzdWNjZXNzLCBlbHNlIGVycm9yLgorICovCitpbnQgc25kX3NvY19hZGRfY29udHJvbHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAorCWNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICpjb250cm9scywgaW50IG51bV9jb250cm9scykKK3sKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBjb2RlYy0+Y2FyZDsKKwlpbnQgZXJyLCBpOworCisJZm9yIChpID0gMDsgaSA8IG51bV9jb250cm9sczsgaSsrKSB7CisJCWNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICpjb250cm9sID0gJmNvbnRyb2xzW2ldOworCQllcnIgPSBzbmRfY3RsX2FkZChjYXJkLCBzbmRfc29jX2NuZXcoY29udHJvbCwgY29kZWMsIE5VTEwpKTsKKwkJaWYgKGVyciA8IDApIHsKKwkJCWRldl9lcnIoY29kZWMtPmRldiwgIiVzOiBGYWlsZWQgdG8gYWRkICVzXG4iLAorCQkJCWNvZGVjLT5uYW1lLCBjb250cm9sLT5uYW1lKTsKKwkJCXJldHVybiBlcnI7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNuZF9zb2NfYWRkX2NvbnRyb2xzKTsKKworLyoqCiAgKiBzbmRfc29jX2luZm9fZW51bV9kb3VibGUgLSBlbnVtZXJhdGVkIGRvdWJsZSBtaXhlciBpbmZvIGNhbGxiYWNrCiAgKiBAa2NvbnRyb2w6IG1peGVyIGNvbnRyb2wKICAqIEB1aW5mbzogY29udHJvbCBlbGVtZW50IGluZm9ybWF0aW9uCkBAIC0yMDIzLDggKzIwNTIsOCBAQAogaW50IHNuZF9zb2NfZGFpX3NldF9zeXNjbGsoc3RydWN0IHNuZF9zb2NfZGFpICpkYWksIGludCBjbGtfaWQsCiAJdW5zaWduZWQgaW50IGZyZXEsIGludCBkaXIpCiB7Ci0JaWYgKGRhaS0+b3BzLnNldF9zeXNjbGspCi0JCXJldHVybiBkYWktPm9wcy5zZXRfc3lzY2xrKGRhaSwgY2xrX2lkLCBmcmVxLCBkaXIpOworCWlmIChkYWktPm9wcy0+c2V0X3N5c2NsaykKKwkJcmV0dXJuIGRhaS0+b3BzLT5zZXRfc3lzY2xrKGRhaSwgY2xrX2lkLCBmcmVxLCBkaXIpOwogCWVsc2UKIAkJcmV0dXJuIC1FSU5WQUw7CiB9CkBAIC0yMDQzLDggKzIwNzIsOCBAQAogaW50IHNuZF9zb2NfZGFpX3NldF9jbGtkaXYoc3RydWN0IHNuZF9zb2NfZGFpICpkYWksCiAJaW50IGRpdl9pZCwgaW50IGRpdikKIHsKLQlpZiAoZGFpLT5vcHMuc2V0X2Nsa2RpdikKLQkJcmV0dXJuIGRhaS0+b3BzLnNldF9jbGtkaXYoZGFpLCBkaXZfaWQsIGRpdik7CisJaWYgKGRhaS0+b3BzLT5zZXRfY2xrZGl2KQorCQlyZXR1cm4gZGFpLT5vcHMtPnNldF9jbGtkaXYoZGFpLCBkaXZfaWQsIGRpdik7CiAJZWxzZQogCQlyZXR1cm4gLUVJTlZBTDsKIH0KQEAgLTIwNjIsOCArMjA5MSw4IEBACiBpbnQgc25kX3NvY19kYWlfc2V0X3BsbChzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwKIAlpbnQgcGxsX2lkLCB1bnNpZ25lZCBpbnQgZnJlcV9pbiwgdW5zaWduZWQgaW50IGZyZXFfb3V0KQogewotCWlmIChkYWktPm9wcy5zZXRfcGxsKQotCQlyZXR1cm4gZGFpLT5vcHMuc2V0X3BsbChkYWksIHBsbF9pZCwgZnJlcV9pbiwgZnJlcV9vdXQpOworCWlmIChkYWktPm9wcy0+c2V0X3BsbCkKKwkJcmV0dXJuIGRhaS0+b3BzLT5zZXRfcGxsKGRhaSwgcGxsX2lkLCBmcmVxX2luLCBmcmVxX291dCk7CiAJZWxzZQogCQlyZXR1cm4gLUVJTlZBTDsKIH0KQEAgLTIwNzgsOCArMjEwNyw4IEBACiAgKi8KIGludCBzbmRfc29jX2RhaV9zZXRfZm10KHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLCB1bnNpZ25lZCBpbnQgZm10KQogewotCWlmIChkYWktPm9wcy5zZXRfZm10KQotCQlyZXR1cm4gZGFpLT5vcHMuc2V0X2ZtdChkYWksIGZtdCk7CisJaWYgKGRhaS0+b3BzLT5zZXRfZm10KQorCQlyZXR1cm4gZGFpLT5vcHMtPnNldF9mbXQoZGFpLCBmbXQpOwogCWVsc2UKIAkJcmV0dXJuIC1FSU5WQUw7CiB9CkBAIC0yMDk3LDggKzIxMjYsOCBAQAogaW50IHNuZF9zb2NfZGFpX3NldF90ZG1fc2xvdChzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwKIAl1bnNpZ25lZCBpbnQgbWFzaywgaW50IHNsb3RzKQogewotCWlmIChkYWktPm9wcy5zZXRfc3lzY2xrKQotCQlyZXR1cm4gZGFpLT5vcHMuc2V0X3RkbV9zbG90KGRhaSwgbWFzaywgc2xvdHMpOworCWlmIChkYWktPm9wcy0+c2V0X3N5c2NsaykKKwkJcmV0dXJuIGRhaS0+b3BzLT5zZXRfdGRtX3Nsb3QoZGFpLCBtYXNrLCBzbG90cyk7CiAJZWxzZQogCQlyZXR1cm4gLUVJTlZBTDsKIH0KQEAgLTIxMTMsOCArMjE0Miw4IEBACiAgKi8KIGludCBzbmRfc29jX2RhaV9zZXRfdHJpc3RhdGUoc3RydWN0IHNuZF9zb2NfZGFpICpkYWksIGludCB0cmlzdGF0ZSkKIHsKLQlpZiAoZGFpLT5vcHMuc2V0X3N5c2NsaykKLQkJcmV0dXJuIGRhaS0+b3BzLnNldF90cmlzdGF0ZShkYWksIHRyaXN0YXRlKTsKKwlpZiAoZGFpLT5vcHMtPnNldF9zeXNjbGspCisJCXJldHVybiBkYWktPm9wcy0+c2V0X3RyaXN0YXRlKGRhaSwgdHJpc3RhdGUpOwogCWVsc2UKIAkJcmV0dXJuIC1FSU5WQUw7CiB9CkBAIC0yMTI5LDggKzIxNTgsOCBAQAogICovCiBpbnQgc25kX3NvY19kYWlfZGlnaXRhbF9tdXRlKHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLCBpbnQgbXV0ZSkKIHsKLQlpZiAoZGFpLT5vcHMuZGlnaXRhbF9tdXRlKQotCQlyZXR1cm4gZGFpLT5vcHMuZGlnaXRhbF9tdXRlKGRhaSwgbXV0ZSk7CisJaWYgKGRhaS0+b3BzLT5kaWdpdGFsX211dGUpCisJCXJldHVybiBkYWktPm9wcy0+ZGlnaXRhbF9tdXRlKGRhaSwgbXV0ZSk7CiAJZWxzZQogCQlyZXR1cm4gLUVJTlZBTDsKIH0KQEAgLTIxODMsNiArMjIxMiw5IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIG51bGxfZGFpX29wcyA9IHsKK307CisKIC8qKgogICogc25kX3NvY19yZWdpc3Rlcl9kYWkgLSBSZWdpc3RlciBhIERBSSB3aXRoIHRoZSBBU29DIGNvcmUKICAqCkBAIC0yMTk3LDYgKzIyMjksOSBAQAogCWlmICghZGFpLT5kZXYpCiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIk5vIGRldmljZSBmb3IgREFJICVzXG4iLCBkYWktPm5hbWUpOwogCisJaWYgKCFkYWktPm9wcykKKwkJZGFpLT5vcHMgPSAmbnVsbF9kYWlfb3BzOworCiAJSU5JVF9MSVNUX0hFQUQoJmRhaS0+bGlzdCk7CiAKIAltdXRleF9sb2NrKCZjbGllbnRfbXV0ZXgpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NvYy1kYXBtLmMgYi9zb3VuZC9zb2Mvc29jLWRhcG0uYwppbmRleCBhMmYxZGE4Li43MzU5MDNhIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc29jLWRhcG0uYworKysgYi9zb3VuZC9zb2Mvc29jLWRhcG0uYwpAQCAtNTQsMTQgKzU0LDE1IEBACiBzdGF0aWMgaW50IGRhcG1fdXBfc2VxW10gPSB7CiAJc25kX3NvY19kYXBtX3ByZSwgc25kX3NvY19kYXBtX21pY2JpYXMsIHNuZF9zb2NfZGFwbV9taWMsCiAJc25kX3NvY19kYXBtX211eCwgc25kX3NvY19kYXBtX3ZhbHVlX211eCwgc25kX3NvY19kYXBtX2RhYywKLQlzbmRfc29jX2RhcG1fbWl4ZXIsIHNuZF9zb2NfZGFwbV9wZ2EsIHNuZF9zb2NfZGFwbV9hZGMsIHNuZF9zb2NfZGFwbV9ocCwKLQlzbmRfc29jX2RhcG1fc3BrLCBzbmRfc29jX2RhcG1fcG9zdAorCXNuZF9zb2NfZGFwbV9taXhlciwgc25kX3NvY19kYXBtX21peGVyX25hbWVkX2N0bCwgc25kX3NvY19kYXBtX3BnYSwKKwlzbmRfc29jX2RhcG1fYWRjLCBzbmRfc29jX2RhcG1faHAsIHNuZF9zb2NfZGFwbV9zcGssIHNuZF9zb2NfZGFwbV9wb3N0CiB9OworCiBzdGF0aWMgaW50IGRhcG1fZG93bl9zZXFbXSA9IHsKIAlzbmRfc29jX2RhcG1fcHJlLCBzbmRfc29jX2RhcG1fYWRjLCBzbmRfc29jX2RhcG1faHAsIHNuZF9zb2NfZGFwbV9zcGssCi0Jc25kX3NvY19kYXBtX3BnYSwgc25kX3NvY19kYXBtX21peGVyLCBzbmRfc29jX2RhcG1fZGFjLCBzbmRfc29jX2RhcG1fbWljLAotCXNuZF9zb2NfZGFwbV9taWNiaWFzLCBzbmRfc29jX2RhcG1fbXV4LCBzbmRfc29jX2RhcG1fdmFsdWVfbXV4LAotCXNuZF9zb2NfZGFwbV9wb3N0CisJc25kX3NvY19kYXBtX3BnYSwgc25kX3NvY19kYXBtX21peGVyX25hbWVkX2N0bCwgc25kX3NvY19kYXBtX21peGVyLAorCXNuZF9zb2NfZGFwbV9kYWMsIHNuZF9zb2NfZGFwbV9taWMsIHNuZF9zb2NfZGFwbV9taWNiaWFzLAorCXNuZF9zb2NfZGFwbV9tdXgsIHNuZF9zb2NfZGFwbV92YWx1ZV9tdXgsIHNuZF9zb2NfZGFwbV9wb3N0CiB9OwogCiBzdGF0aWMgaW50IGRhcG1fc3RhdHVzID0gMTsKQEAgLTEwMSw3ICsxMDIsOCBAQAogewogCXN3aXRjaCAody0+aWQpIHsKIAljYXNlIHNuZF9zb2NfZGFwbV9zd2l0Y2g6Ci0JY2FzZSBzbmRfc29jX2RhcG1fbWl4ZXI6IHsKKwljYXNlIHNuZF9zb2NfZGFwbV9taXhlcjoKKwljYXNlIHNuZF9zb2NfZGFwbV9taXhlcl9uYW1lZF9jdGw6IHsKIAkJaW50IHZhbDsKIAkJc3RydWN0IHNvY19taXhlcl9jb250cm9sICptYyA9IChzdHJ1Y3Qgc29jX21peGVyX2NvbnRyb2wgKikKIAkJCXctPmtjb250cm9sc1tpXS5wcml2YXRlX3ZhbHVlOwpAQCAtMzIzLDE1ICszMjUsMzIgQEAKIAkJCWlmIChwYXRoLT5uYW1lICE9IChjaGFyKil3LT5rY29udHJvbHNbaV0ubmFtZSkKIAkJCQljb250aW51ZTsKIAotCQkJLyogYWRkIGRhcG0gY29udHJvbCB3aXRoIGxvbmcgbmFtZSAqLwotCQkJbmFtZV9sZW4gPSAyICsgc3RybGVuKHctPm5hbWUpCi0JCQkJKyBzdHJsZW4ody0+a2NvbnRyb2xzW2ldLm5hbWUpOworCQkJLyogYWRkIGRhcG0gY29udHJvbCB3aXRoIGxvbmcgbmFtZS4KKwkJCSAqIGZvciBkYXBtX21peGVyIHRoaXMgaXMgdGhlIGNvbmNhdGVuYXRpb24gb2YgdGhlCisJCQkgKiBtaXhlciBhbmQga2NvbnRyb2wgbmFtZS4KKwkJCSAqIGZvciBkYXBtX21peGVyX25hbWVkX2N0bCB0aGlzIGlzIHNpbXBseSB0aGUKKwkJCSAqIGtjb250cm9sIG5hbWUuCisJCQkgKi8KKwkJCW5hbWVfbGVuID0gc3RybGVuKHctPmtjb250cm9sc1tpXS5uYW1lKSArIDE7CisJCQlpZiAody0+aWQgIT0gc25kX3NvY19kYXBtX21peGVyX25hbWVkX2N0bCkKKwkJCQluYW1lX2xlbiArPSAxICsgc3RybGVuKHctPm5hbWUpOworCiAJCQlwYXRoLT5sb25nX25hbWUgPSBrbWFsbG9jKG5hbWVfbGVuLCBHRlBfS0VSTkVMKTsKKwogCQkJaWYgKHBhdGgtPmxvbmdfbmFtZSA9PSBOVUxMKQogCQkJCXJldHVybiAtRU5PTUVNOwogCi0JCQlzbnByaW50ZihwYXRoLT5sb25nX25hbWUsIG5hbWVfbGVuLCAiJXMgJXMiLAotCQkJCSB3LT5uYW1lLCB3LT5rY29udHJvbHNbaV0ubmFtZSk7CisJCQlzd2l0Y2ggKHctPmlkKSB7CisJCQlkZWZhdWx0OgorCQkJCXNucHJpbnRmKHBhdGgtPmxvbmdfbmFtZSwgbmFtZV9sZW4sICIlcyAlcyIsCisJCQkJCSB3LT5uYW1lLCB3LT5rY29udHJvbHNbaV0ubmFtZSk7CisJCQkJYnJlYWs7CisJCQljYXNlIHNuZF9zb2NfZGFwbV9taXhlcl9uYW1lZF9jdGw6CisJCQkJc25wcmludGYocGF0aC0+bG9uZ19uYW1lLCBuYW1lX2xlbiwgIiVzIiwKKwkJCQkJIHctPmtjb250cm9sc1tpXS5uYW1lKTsKKwkJCQlicmVhazsKKwkJCX0KKwogCQkJcGF0aC0+bG9uZ19uYW1lW25hbWVfbGVuIC0gMV0gPSAnXDAnOwogCiAJCQlwYXRoLT5rY29udHJvbCA9IHNuZF9zb2NfY25ldygmdy0+a2NvbnRyb2xzW2ldLCB3LApAQCAtNTAzLDYgKzUyMiwxMzcgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKGRhcG1fcmVnX2V2ZW50KTsKIAogLyoKKyAqIFNjYW4gYSBzaW5nbGUgREFQTSB3aWRnZXQgZm9yIGEgY29tcGxldGUgYXVkaW8gcGF0aCBhbmQgdXBkYXRlIHRoZQorICogcG93ZXIgc3RhdHVzIGFwcHJvcHJpYXRlbHkuCisgKi8KK3N0YXRpYyBpbnQgZGFwbV9wb3dlcl93aWRnZXQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBpbnQgZXZlbnQsCisJCQkgICAgIHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3KQoreworCWludCBpbiwgb3V0LCBwb3dlcl9jaGFuZ2UsIHBvd2VyLCByZXQ7CisKKwkvKiB2bWlkIC0gbm8gYWN0aW9uICovCisJaWYgKHctPmlkID09IHNuZF9zb2NfZGFwbV92bWlkKQorCQlyZXR1cm4gMDsKKworCS8qIGFjdGl2ZSBBREMgKi8KKwlpZiAody0+aWQgPT0gc25kX3NvY19kYXBtX2FkYyAmJiB3LT5hY3RpdmUpIHsKKwkJaW4gPSBpc19jb25uZWN0ZWRfaW5wdXRfZXAodyk7CisJCWRhcG1fY2xlYXJfd2Fsayh3LT5jb2RlYyk7CisJCXctPnBvd2VyID0gKGluICE9IDApID8gMSA6IDA7CisJCWRhcG1fdXBkYXRlX2JpdHModyk7CisJCXJldHVybiAwOworCX0KKworCS8qIGFjdGl2ZSBEQUMgKi8KKwlpZiAody0+aWQgPT0gc25kX3NvY19kYXBtX2RhYyAmJiB3LT5hY3RpdmUpIHsKKwkJb3V0ID0gaXNfY29ubmVjdGVkX291dHB1dF9lcCh3KTsKKwkJZGFwbV9jbGVhcl93YWxrKHctPmNvZGVjKTsKKwkJdy0+cG93ZXIgPSAob3V0ICE9IDApID8gMSA6IDA7CisJCWRhcG1fdXBkYXRlX2JpdHModyk7CisJCXJldHVybiAwOworCX0KKworCS8qIHByZSBhbmQgcG9zdCBldmVudCB3aWRnZXRzICovCisJaWYgKHctPmlkID09IHNuZF9zb2NfZGFwbV9wcmUpIHsKKwkJaWYgKCF3LT5ldmVudCkKKwkJCXJldHVybiAwOworCisJCWlmIChldmVudCA9PSBTTkRfU09DX0RBUE1fU1RSRUFNX1NUQVJUKSB7CisJCQlyZXQgPSB3LT5ldmVudCh3LAorCQkJCSAgICAgICBOVUxMLCBTTkRfU09DX0RBUE1fUFJFX1BNVSk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlyZXR1cm4gcmV0OworCQl9IGVsc2UgaWYgKGV2ZW50ID09IFNORF9TT0NfREFQTV9TVFJFQU1fU1RPUCkgeworCQkJcmV0ID0gdy0+ZXZlbnQodywKKwkJCQkgICAgICAgTlVMTCwgU05EX1NPQ19EQVBNX1BSRV9QTUQpOworCQkJaWYgKHJldCA8IDApCisJCQkJcmV0dXJuIHJldDsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisJaWYgKHctPmlkID09IHNuZF9zb2NfZGFwbV9wb3N0KSB7CisJCWlmICghdy0+ZXZlbnQpCisJCQlyZXR1cm4gMDsKKworCQlpZiAoZXZlbnQgPT0gU05EX1NPQ19EQVBNX1NUUkVBTV9TVEFSVCkgeworCQkJcmV0ID0gdy0+ZXZlbnQodywKKwkJCQkgICAgICAgTlVMTCwgU05EX1NPQ19EQVBNX1BPU1RfUE1VKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCXJldHVybiByZXQ7CisJCX0gZWxzZSBpZiAoZXZlbnQgPT0gU05EX1NPQ19EQVBNX1NUUkVBTV9TVE9QKSB7CisJCQlyZXQgPSB3LT5ldmVudCh3LAorCQkJCSAgICAgICBOVUxMLCBTTkRfU09DX0RBUE1fUE9TVF9QTUQpOworCQkJaWYgKHJldCA8IDApCisJCQkJcmV0dXJuIHJldDsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBhbGwgb3RoZXIgd2lkZ2V0cyAqLworCWluID0gaXNfY29ubmVjdGVkX2lucHV0X2VwKHcpOworCWRhcG1fY2xlYXJfd2Fsayh3LT5jb2RlYyk7CisJb3V0ID0gaXNfY29ubmVjdGVkX291dHB1dF9lcCh3KTsKKwlkYXBtX2NsZWFyX3dhbGsody0+Y29kZWMpOworCXBvd2VyID0gKG91dCAhPSAwICYmIGluICE9IDApID8gMSA6IDA7CisJcG93ZXJfY2hhbmdlID0gKHctPnBvd2VyID09IHBvd2VyKSA/IDAgOiAxOworCXctPnBvd2VyID0gcG93ZXI7CisKKwlpZiAoIXBvd2VyX2NoYW5nZSkKKwkJcmV0dXJuIDA7CisKKwkvKiBjYWxsIGFueSBwb3dlciBjaGFuZ2UgZXZlbnQgaGFuZGxlcnMgKi8KKwlpZiAody0+ZXZlbnQpCisJCXByX2RlYnVnKCJwb3dlciAlcyBldmVudCBmb3IgJXMgZmxhZ3MgJXhcbiIsCisJCQkgdy0+cG93ZXIgPyAib24iIDogIm9mZiIsCisJCQkgdy0+bmFtZSwgdy0+ZXZlbnRfZmxhZ3MpOworCisJLyogcG93ZXIgdXAgcHJlIGV2ZW50ICovCisJaWYgKHBvd2VyICYmIHctPmV2ZW50ICYmCisJICAgICh3LT5ldmVudF9mbGFncyAmIFNORF9TT0NfREFQTV9QUkVfUE1VKSkgeworCQlyZXQgPSB3LT5ldmVudCh3LCBOVUxMLCBTTkRfU09DX0RBUE1fUFJFX1BNVSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBwb3dlciBkb3duIHByZSBldmVudCAqLworCWlmICghcG93ZXIgJiYgdy0+ZXZlbnQgJiYKKwkgICAgKHctPmV2ZW50X2ZsYWdzICYgU05EX1NPQ19EQVBNX1BSRV9QTUQpKSB7CisJCXJldCA9IHctPmV2ZW50KHcsIE5VTEwsIFNORF9TT0NfREFQTV9QUkVfUE1EKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCX0KKworCS8qIExvd2VyIFBHQSB2b2x1bWUgdG8gcmVkdWNlIHBvcHMgKi8KKwlpZiAody0+aWQgPT0gc25kX3NvY19kYXBtX3BnYSAmJiAhcG93ZXIpCisJCWRhcG1fc2V0X3BnYSh3LCBwb3dlcik7CisKKwlkYXBtX3VwZGF0ZV9iaXRzKHcpOworCisJLyogUmFpc2UgUEdBIHZvbHVtZSB0byByZWR1Y2UgcG9wcyAqLworCWlmICh3LT5pZCA9PSBzbmRfc29jX2RhcG1fcGdhICYmIHBvd2VyKQorCQlkYXBtX3NldF9wZ2EodywgcG93ZXIpOworCisJLyogcG93ZXIgdXAgcG9zdCBldmVudCAqLworCWlmIChwb3dlciAmJiB3LT5ldmVudCAmJgorCSAgICAody0+ZXZlbnRfZmxhZ3MgJiBTTkRfU09DX0RBUE1fUE9TVF9QTVUpKSB7CisJCXJldCA9IHctPmV2ZW50KHcsCisJCQkgICAgICAgTlVMTCwgU05EX1NPQ19EQVBNX1BPU1RfUE1VKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCX0KKworCS8qIHBvd2VyIGRvd24gcG9zdCBldmVudCAqLworCWlmICghcG93ZXIgJiYgdy0+ZXZlbnQgJiYKKwkgICAgKHctPmV2ZW50X2ZsYWdzICYgU05EX1NPQ19EQVBNX1BPU1RfUE1EKSkgeworCQlyZXQgPSB3LT5ldmVudCh3LCBOVUxMLCBTTkRfU09DX0RBUE1fUE9TVF9QTUQpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCiAgKiBTY2FuIGVhY2ggZGFwbSB3aWRnZXQgZm9yIGNvbXBsZXRlIGF1ZGlvIHBhdGguCiAgKiBBIGNvbXBsZXRlIHBhdGggaXMgYSByb3V0ZSB0aGF0IGhhcyB2YWxpZCBlbmRwb2ludHMgaS5lLjotCiAgKgpAQCAtNTE0LDcgKzY2NCw3IEBACiBzdGF0aWMgaW50IGRhcG1fcG93ZXJfd2lkZ2V0cyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGludCBldmVudCkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdzsKLQlpbnQgaW4sIG91dCwgaSwgYyA9IDEsICpzZXEgPSBOVUxMLCByZXQgPSAwLCBwb3dlcl9jaGFuZ2UsIHBvd2VyOworCWludCBpLCBjID0gMSwgKnNlcSA9IE5VTEwsIHJldCA9IDA7CiAKIAkvKiBkbyB3ZSBoYXZlIGEgc2VxdWVuY2VkIHN0cmVhbSBldmVudCAqLwogCWlmIChldmVudCA9PSBTTkRfU09DX0RBUE1fU1RSRUFNX1NUQVJUKSB7CkBAIC01MjUsMTM1ICs2NzUsMjAgQEAKIAkJc2VxID0gZGFwbV9kb3duX3NlcTsKIAl9CiAKLQlmb3IoaSA9IDA7IGkgPCBjOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgYzsgaSsrKSB7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnkodywgJmNvZGVjLT5kYXBtX3dpZGdldHMsIGxpc3QpIHsKIAogCQkJLyogaXMgd2lkZ2V0IGluIHN0cmVhbSBvcmRlciAqLwogCQkJaWYgKHNlcSAmJiBzZXFbaV0gJiYgdy0+aWQgIT0gc2VxW2ldKQogCQkJCWNvbnRpbnVlOwogCi0JCQkvKiB2bWlkIC0gbm8gYWN0aW9uICovCi0JCQlpZiAody0+aWQgPT0gc25kX3NvY19kYXBtX3ZtaWQpCi0JCQkJY29udGludWU7Ci0KLQkJCS8qIGFjdGl2ZSBBREMgKi8KLQkJCWlmICh3LT5pZCA9PSBzbmRfc29jX2RhcG1fYWRjICYmIHctPmFjdGl2ZSkgewotCQkJCWluID0gaXNfY29ubmVjdGVkX2lucHV0X2VwKHcpOwotCQkJCWRhcG1fY2xlYXJfd2Fsayh3LT5jb2RlYyk7Ci0JCQkJdy0+cG93ZXIgPSAoaW4gIT0gMCkgPyAxIDogMDsKLQkJCQlkYXBtX3VwZGF0ZV9iaXRzKHcpOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCi0JCQkvKiBhY3RpdmUgREFDICovCi0JCQlpZiAody0+aWQgPT0gc25kX3NvY19kYXBtX2RhYyAmJiB3LT5hY3RpdmUpIHsKLQkJCQlvdXQgPSBpc19jb25uZWN0ZWRfb3V0cHV0X2VwKHcpOwotCQkJCWRhcG1fY2xlYXJfd2Fsayh3LT5jb2RlYyk7Ci0JCQkJdy0+cG93ZXIgPSAob3V0ICE9IDApID8gMSA6IDA7Ci0JCQkJZGFwbV91cGRhdGVfYml0cyh3KTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQotCQkJLyogcHJlIGFuZCBwb3N0IGV2ZW50IHdpZGdldHMgKi8KLQkJCWlmICh3LT5pZCA9PSBzbmRfc29jX2RhcG1fcHJlKSB7Ci0JCQkJaWYgKCF3LT5ldmVudCkKLQkJCQkJY29udGludWU7Ci0KLQkJCQlpZiAoZXZlbnQgPT0gU05EX1NPQ19EQVBNX1NUUkVBTV9TVEFSVCkgewotCQkJCQlyZXQgPSB3LT5ldmVudCh3LAotCQkJCQkJTlVMTCwgU05EX1NPQ19EQVBNX1BSRV9QTVUpOwotCQkJCQlpZiAocmV0IDwgMCkKLQkJCQkJCXJldHVybiByZXQ7Ci0JCQkJfSBlbHNlIGlmIChldmVudCA9PSBTTkRfU09DX0RBUE1fU1RSRUFNX1NUT1ApIHsKLQkJCQkJcmV0ID0gdy0+ZXZlbnQodywKLQkJCQkJCU5VTEwsIFNORF9TT0NfREFQTV9QUkVfUE1EKTsKLQkJCQkJaWYgKHJldCA8IDApCi0JCQkJCQlyZXR1cm4gcmV0OwotCQkJCX0KLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCWlmICh3LT5pZCA9PSBzbmRfc29jX2RhcG1fcG9zdCkgewotCQkJCWlmICghdy0+ZXZlbnQpCi0JCQkJCWNvbnRpbnVlOwotCi0JCQkJaWYgKGV2ZW50ID09IFNORF9TT0NfREFQTV9TVFJFQU1fU1RBUlQpIHsKLQkJCQkJcmV0ID0gdy0+ZXZlbnQodywKLQkJCQkJCU5VTEwsIFNORF9TT0NfREFQTV9QT1NUX1BNVSk7Ci0JCQkJCWlmIChyZXQgPCAwKQotCQkJCQkJcmV0dXJuIHJldDsKLQkJCQl9IGVsc2UgaWYgKGV2ZW50ID09IFNORF9TT0NfREFQTV9TVFJFQU1fU1RPUCkgewotCQkJCQlyZXQgPSB3LT5ldmVudCh3LAotCQkJCQkJTlVMTCwgU05EX1NPQ19EQVBNX1BPU1RfUE1EKTsKLQkJCQkJaWYgKHJldCA8IDApCi0JCQkJCQlyZXR1cm4gcmV0OwotCQkJCX0KLQkJCQljb250aW51ZTsKLQkJCX0KLQotCQkJLyogYWxsIG90aGVyIHdpZGdldHMgKi8KLQkJCWluID0gaXNfY29ubmVjdGVkX2lucHV0X2VwKHcpOwotCQkJZGFwbV9jbGVhcl93YWxrKHctPmNvZGVjKTsKLQkJCW91dCA9IGlzX2Nvbm5lY3RlZF9vdXRwdXRfZXAodyk7Ci0JCQlkYXBtX2NsZWFyX3dhbGsody0+Y29kZWMpOwotCQkJcG93ZXIgPSAob3V0ICE9IDAgJiYgaW4gIT0gMCkgPyAxIDogMDsKLQkJCXBvd2VyX2NoYW5nZSA9ICh3LT5wb3dlciA9PSBwb3dlcikgPyAwOiAxOwotCQkJdy0+cG93ZXIgPSBwb3dlcjsKLQotCQkJaWYgKCFwb3dlcl9jaGFuZ2UpCi0JCQkJY29udGludWU7Ci0KLQkJCS8qIGNhbGwgYW55IHBvd2VyIGNoYW5nZSBldmVudCBoYW5kbGVycyAqLwotCQkJaWYgKHctPmV2ZW50KQotCQkJCXByX2RlYnVnKCJwb3dlciAlcyBldmVudCBmb3IgJXMgZmxhZ3MgJXhcbiIsCi0JCQkJCSB3LT5wb3dlciA/ICJvbiIgOiAib2ZmIiwKLQkJCQkJIHctPm5hbWUsIHctPmV2ZW50X2ZsYWdzKTsKLQotCQkJLyogcG93ZXIgdXAgcHJlIGV2ZW50ICovCi0JCQlpZiAocG93ZXIgJiYgdy0+ZXZlbnQgJiYKLQkJCSAgICAody0+ZXZlbnRfZmxhZ3MgJiBTTkRfU09DX0RBUE1fUFJFX1BNVSkpIHsKLQkJCQlyZXQgPSB3LT5ldmVudCh3LCBOVUxMLCBTTkRfU09DX0RBUE1fUFJFX1BNVSk7Ci0JCQkJaWYgKHJldCA8IDApCi0JCQkJCXJldHVybiByZXQ7Ci0JCQl9Ci0KLQkJCS8qIHBvd2VyIGRvd24gcHJlIGV2ZW50ICovCi0JCQlpZiAoIXBvd2VyICYmIHctPmV2ZW50ICYmCi0JCQkgICAgKHctPmV2ZW50X2ZsYWdzICYgU05EX1NPQ19EQVBNX1BSRV9QTUQpKSB7Ci0JCQkJcmV0ID0gdy0+ZXZlbnQodywgTlVMTCwgU05EX1NPQ19EQVBNX1BSRV9QTUQpOwotCQkJCWlmIChyZXQgPCAwKQotCQkJCQlyZXR1cm4gcmV0OwotCQkJfQotCi0JCQkvKiBMb3dlciBQR0Egdm9sdW1lIHRvIHJlZHVjZSBwb3BzICovCi0JCQlpZiAody0+aWQgPT0gc25kX3NvY19kYXBtX3BnYSAmJiAhcG93ZXIpCi0JCQkJZGFwbV9zZXRfcGdhKHcsIHBvd2VyKTsKLQotCQkJZGFwbV91cGRhdGVfYml0cyh3KTsKLQotCQkJLyogUmFpc2UgUEdBIHZvbHVtZSB0byByZWR1Y2UgcG9wcyAqLwotCQkJaWYgKHctPmlkID09IHNuZF9zb2NfZGFwbV9wZ2EgJiYgcG93ZXIpCi0JCQkJZGFwbV9zZXRfcGdhKHcsIHBvd2VyKTsKLQotCQkJLyogcG93ZXIgdXAgcG9zdCBldmVudCAqLwotCQkJaWYgKHBvd2VyICYmIHctPmV2ZW50ICYmCi0JCQkgICAgKHctPmV2ZW50X2ZsYWdzICYgU05EX1NPQ19EQVBNX1BPU1RfUE1VKSkgewotCQkJCXJldCA9IHctPmV2ZW50KHcsCi0JCQkJCSAgICAgICBOVUxMLCBTTkRfU09DX0RBUE1fUE9TVF9QTVUpOwotCQkJCWlmIChyZXQgPCAwKQotCQkJCQlyZXR1cm4gcmV0OwotCQkJfQotCi0JCQkvKiBwb3dlciBkb3duIHBvc3QgZXZlbnQgKi8KLQkJCWlmICghcG93ZXIgJiYgdy0+ZXZlbnQgJiYKLQkJCSAgICAody0+ZXZlbnRfZmxhZ3MgJiBTTkRfU09DX0RBUE1fUE9TVF9QTUQpKSB7Ci0JCQkJcmV0ID0gdy0+ZXZlbnQodywgTlVMTCwgU05EX1NPQ19EQVBNX1BPU1RfUE1EKTsKLQkJCQlpZiAocmV0IDwgMCkKLQkJCQkJcmV0dXJuIHJldDsKLQkJCX0KKwkJCXJldCA9IGRhcG1fcG93ZXJfd2lkZ2V0KGNvZGVjLCBldmVudCwgdyk7CisJCQlpZiAocmV0ICE9IDApCisJCQkJcmV0dXJuIHJldDsKIAkJfQogCX0KIAotCXJldHVybiByZXQ7CisJcmV0dXJuIDA7CiB9CiAKICNpZmRlZiBERUJVRwpAQCAtNjg3LDYgKzcyMiw3IEBACiAJCWNhc2Ugc25kX3NvY19kYXBtX2FkYzoKIAkJY2FzZSBzbmRfc29jX2RhcG1fcGdhOgogCQljYXNlIHNuZF9zb2NfZGFwbV9taXhlcjoKKwkJY2FzZSBzbmRfc29jX2RhcG1fbWl4ZXJfbmFtZWRfY3RsOgogCQkJaWYgKHctPm5hbWUpIHsKIAkJCQlpbiA9IGlzX2Nvbm5lY3RlZF9pbnB1dF9lcCh3KTsKIAkJCQlkYXBtX2NsZWFyX3dhbGsody0+Y29kZWMpOwpAQCAtNzYwLDYgKzc5Niw3IEBACiAJaW50IGZvdW5kID0gMDsKIAogCWlmICh3aWRnZXQtPmlkICE9IHNuZF9zb2NfZGFwbV9taXhlciAmJgorCSAgICB3aWRnZXQtPmlkICE9IHNuZF9zb2NfZGFwbV9taXhlcl9uYW1lZF9jdGwgJiYKIAkgICAgd2lkZ2V0LT5pZCAhPSBzbmRfc29jX2RhcG1fc3dpdGNoKQogCQlyZXR1cm4gLUVOT0RFVjsKIApAQCAtNzk1LDcgKzgzMiw3IEBACiAJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKmRldmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBkZXZkYXRhLT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBkZXZkYXRhLT5jYXJkLT5jb2RlYzsKIAlzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdzsKIAlpbnQgY291bnQgPSAwOwogCWNoYXIgKnN0YXRlID0gIm5vdCBzZXQiOwpAQCAtODEzLDYgKzg1MCw3IEBACiAJCWNhc2Ugc25kX3NvY19kYXBtX2FkYzoKIAkJY2FzZSBzbmRfc29jX2RhcG1fcGdhOgogCQljYXNlIHNuZF9zb2NfZGFwbV9taXhlcjoKKwkJY2FzZSBzbmRfc29jX2RhcG1fbWl4ZXJfbmFtZWRfY3RsOgogCQkJaWYgKHctPm5hbWUpCiAJCQkJY291bnQgKz0gc3ByaW50ZihidWYgKyBjb3VudCwgIiVzOiAlc1xuIiwKIAkJCQkJdy0+bmFtZSwgdy0+cG93ZXIgPyAiT24iOiJPZmYiKTsKQEAgLTg3Niw3ICs5MTQsNyBAQAogfQogCiBzdGF0aWMgaW50IHNuZF9zb2NfZGFwbV9zZXRfcGluKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKLQljaGFyICpwaW4sIGludCBzdGF0dXMpCisJCQkJY29uc3QgY2hhciAqcGluLCBpbnQgc3RhdHVzKQogewogCXN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3OwogCkBAIC05OTEsNiArMTAyOSw3IEBACiAJCWJyZWFrOwogCWNhc2Ugc25kX3NvY19kYXBtX3N3aXRjaDoKIAljYXNlIHNuZF9zb2NfZGFwbV9taXhlcjoKKwljYXNlIHNuZF9zb2NfZGFwbV9taXhlcl9uYW1lZF9jdGw6CiAJCXJldCA9IGRhcG1fY29ubmVjdF9taXhlcihjb2RlYywgd3NvdXJjZSwgd3NpbmssIHBhdGgsIGNvbnRyb2wpOwogCQlpZiAocmV0ICE9IDApCiAJCQlnb3RvIGVycjsKQEAgLTEwNjgsNiArMTEwNyw3IEBACiAJCXN3aXRjaCh3LT5pZCkgewogCQljYXNlIHNuZF9zb2NfZGFwbV9zd2l0Y2g6CiAJCWNhc2Ugc25kX3NvY19kYXBtX21peGVyOgorCQljYXNlIHNuZF9zb2NfZGFwbV9taXhlcl9uYW1lZF9jdGw6CiAJCQlkYXBtX25ld19taXhlcihjb2RlYywgdyk7CiAJCQlicmVhazsKIAkJY2FzZSBzbmRfc29jX2RhcG1fbXV4OgpAQCAtMTM5Niw2ICsxNDM2LDc2IEBACiBFWFBPUlRfU1lNQk9MX0dQTChzbmRfc29jX2RhcG1fcHV0X3ZhbHVlX2VudW1fZG91YmxlKTsKIAogLyoqCisgKiBzbmRfc29jX2RhcG1faW5mb19waW5fc3dpdGNoIC0gSW5mbyBmb3IgYSBwaW4gc3dpdGNoCisgKgorICogQGtjb250cm9sOiBtaXhlciBjb250cm9sCisgKiBAdWluZm86IGNvbnRyb2wgZWxlbWVudCBpbmZvcm1hdGlvbgorICoKKyAqIENhbGxiYWNrIHRvIHByb3ZpZGUgaW5mb3JtYXRpb24gYWJvdXQgYSBwaW4gc3dpdGNoIGNvbnRyb2wuCisgKi8KK2ludCBzbmRfc29jX2RhcG1faW5mb19waW5fc3dpdGNoKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCSBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQoreworCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9CT09MRUFOOworCXVpbmZvLT5jb3VudCA9IDE7CisJdWluZm8tPnZhbHVlLmludGVnZXIubWluID0gMDsKKwl1aW5mby0+dmFsdWUuaW50ZWdlci5tYXggPSAxOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzbmRfc29jX2RhcG1faW5mb19waW5fc3dpdGNoKTsKKworLyoqCisgKiBzbmRfc29jX2RhcG1fZ2V0X3Bpbl9zd2l0Y2ggLSBHZXQgaW5mb3JtYXRpb24gZm9yIGEgcGluIHN3aXRjaAorICoKKyAqIEBrY29udHJvbDogbWl4ZXIgY29udHJvbAorICogQHVjb250cm9sOiBWYWx1ZQorICovCitpbnQgc25kX3NvY19kYXBtX2dldF9waW5fc3dpdGNoKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwljb25zdCBjaGFyICpwaW4gPSAoY29uc3QgY2hhciAqKWtjb250cm9sLT5wcml2YXRlX3ZhbHVlOworCisJbXV0ZXhfbG9jaygmY29kZWMtPm11dGV4KTsKKworCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0KKwkJc25kX3NvY19kYXBtX2dldF9waW5fc3RhdHVzKGNvZGVjLCBwaW4pOworCisJbXV0ZXhfdW5sb2NrKCZjb2RlYy0+bXV0ZXgpOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzbmRfc29jX2RhcG1fZ2V0X3Bpbl9zd2l0Y2gpOworCisvKioKKyAqIHNuZF9zb2NfZGFwbV9wdXRfcGluX3N3aXRjaCAtIFNldCBpbmZvcm1hdGlvbiBmb3IgYSBwaW4gc3dpdGNoCisgKgorICogQGtjb250cm9sOiBtaXhlciBjb250cm9sCisgKiBAdWNvbnRyb2w6IFZhbHVlCisgKi8KK2ludCBzbmRfc29jX2RhcG1fcHV0X3Bpbl9zd2l0Y2goc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCWNvbnN0IGNoYXIgKnBpbiA9IChjb25zdCBjaGFyICopa2NvbnRyb2wtPnByaXZhdGVfdmFsdWU7CisKKwltdXRleF9sb2NrKCZjb2RlYy0+bXV0ZXgpOworCisJaWYgKHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdKQorCQlzbmRfc29jX2RhcG1fZW5hYmxlX3Bpbihjb2RlYywgcGluKTsKKwllbHNlCisJCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgcGluKTsKKworCXNuZF9zb2NfZGFwbV9zeW5jKGNvZGVjKTsKKworCW11dGV4X3VubG9jaygmY29kZWMtPm11dGV4KTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc25kX3NvY19kYXBtX3B1dF9waW5fc3dpdGNoKTsKKworLyoqCiAgKiBzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2wgLSBjcmVhdGUgbmV3IGRhcG0gY29udHJvbAogICogQGNvZGVjOiBhdWRpbyBjb2RlYwogICogQHdpZGdldDogd2lkZ2V0IHRlbXBsYXRlCkBAIC0xNTI3LDggKzE2MzcsOCBAQAogaW50IHNuZF9zb2NfZGFwbV9zZXRfYmlhc19sZXZlbChzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiwKIAkJCQllbnVtIHNuZF9zb2NfYmlhc19sZXZlbCBsZXZlbCkKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOwogCXN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQgPSBzb2NkZXYtPmNhcmQ7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlpbnQgcmV0ID0gMDsKIAogCWlmIChjYXJkLT5zZXRfYmlhc19sZXZlbCkKQEAgLTE1NDksNyArMTY1OSw3IEBACiAgKiBOT1RFOiBzbmRfc29jX2RhcG1fc3luYygpIG5lZWRzIHRvIGJlIGNhbGxlZCBhZnRlciB0aGlzIGZvciBEQVBNIHRvCiAgKiBkbyBhbnkgd2lkZ2V0IHBvd2VyIHN3aXRjaGluZy4KICAqLwotaW50IHNuZF9zb2NfZGFwbV9lbmFibGVfcGluKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgY2hhciAqcGluKQoraW50IHNuZF9zb2NfZGFwbV9lbmFibGVfcGluKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgY29uc3QgY2hhciAqcGluKQogewogCXJldHVybiBzbmRfc29jX2RhcG1fc2V0X3Bpbihjb2RlYywgcGluLCAxKTsKIH0KQEAgLTE1NjQsNyArMTY3NCw3IEBACiAgKiBOT1RFOiBzbmRfc29jX2RhcG1fc3luYygpIG5lZWRzIHRvIGJlIGNhbGxlZCBhZnRlciB0aGlzIGZvciBEQVBNIHRvCiAgKiBkbyBhbnkgd2lkZ2V0IHBvd2VyIHN3aXRjaGluZy4KICAqLwotaW50IHNuZF9zb2NfZGFwbV9kaXNhYmxlX3BpbihzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGNoYXIgKnBpbikKK2ludCBzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBjb25zdCBjaGFyICpwaW4pCiB7CiAJcmV0dXJuIHNuZF9zb2NfZGFwbV9zZXRfcGluKGNvZGVjLCBwaW4sIDApOwogfQpAQCAtMTU4NCw3ICsxNjk0LDcgQEAKICAqIE5PVEU6IHNuZF9zb2NfZGFwbV9zeW5jKCkgbmVlZHMgdG8gYmUgY2FsbGVkIGFmdGVyIHRoaXMgZm9yIERBUE0gdG8KICAqIGRvIGFueSB3aWRnZXQgcG93ZXIgc3dpdGNoaW5nLgogICovCi1pbnQgc25kX3NvY19kYXBtX25jX3BpbihzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGNoYXIgKnBpbikKK2ludCBzbmRfc29jX2RhcG1fbmNfcGluKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgY29uc3QgY2hhciAqcGluKQogewogCXJldHVybiBzbmRfc29jX2RhcG1fc2V0X3Bpbihjb2RlYywgcGluLCAwKTsKIH0KQEAgLTE1OTksNyArMTcwOSw3IEBACiAgKgogICogUmV0dXJucyAxIGZvciBjb25uZWN0ZWQgb3RoZXJ3aXNlIDAuCiAgKi8KLWludCBzbmRfc29jX2RhcG1fZ2V0X3Bpbl9zdGF0dXMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBjaGFyICpwaW4pCitpbnQgc25kX3NvY19kYXBtX2dldF9waW5fc3RhdHVzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgY29uc3QgY2hhciAqcGluKQogewogCXN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3OwogCkBAIC0xNjIwLDcgKzE3MzAsNyBAQAogICovCiB2b2lkIHNuZF9zb2NfZGFwbV9mcmVlKHN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2KQogewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCXNuZF9zb2NfZGFwbV9zeXNfcmVtb3ZlKHNvY2Rldi0+ZGV2KTsKIAlkYXBtX2ZyZWVfd2lkZ2V0cyhjb2RlYyk7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc29jLWphY2suYyBiL3NvdW5kL3NvYy9zb2MtamFjay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4MzQ2ZmIKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2Mvc29jLWphY2suYwpAQCAtMCwwICsxLDI2NyBAQAorLyoKKyAqIHNvYy1qYWNrLmMgIC0tICBBTFNBIFNvQyBqYWNrIGhhbmRsaW5nCisgKgorICogQ29weXJpZ2h0IDIwMDggV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFBMQy4KKyAqCisgKiBBdXRob3I6IE1hcmsgQnJvd24gPGJyb29uaWVAb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxzb3VuZC9qYWNrLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisjaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworLyoqCisgKiBzbmRfc29jX2phY2tfbmV3IC0gQ3JlYXRlIGEgbmV3IGphY2sKKyAqIEBjYXJkOiAgQVNvQyBjYXJkCisgKiBAaWQ6ICAgIGFuIGlkZW50aWZ5aW5nIHN0cmluZyBmb3IgdGhpcyBqYWNrCisgKiBAdHlwZTogIGEgYml0bWFzayBvZiBlbnVtIHNuZF9qYWNrX3R5cGUgdmFsdWVzIHRoYXQgY2FuIGJlIGRldGVjdGVkIGJ5CisgKiAgICAgICAgIHRoaXMgamFjaworICogQGphY2s6ICBzdHJ1Y3R1cmUgdG8gdXNlIGZvciB0aGUgamFjaworICoKKyAqIENyZWF0ZXMgYSBuZXcgamFjayBvYmplY3QuCisgKgorICogUmV0dXJucyB6ZXJvIGlmIHN1Y2Nlc3NmdWwsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgorICogT24gc3VjY2VzcyBqYWNrIHdpbGwgYmUgaW5pdGlhbGlzZWQuCisgKi8KK2ludCBzbmRfc29jX2phY2tfbmV3KHN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQsIGNvbnN0IGNoYXIgKmlkLCBpbnQgdHlwZSwKKwkJICAgICBzdHJ1Y3Qgc25kX3NvY19qYWNrICpqYWNrKQoreworCWphY2stPmNhcmQgPSBjYXJkOworCUlOSVRfTElTVF9IRUFEKCZqYWNrLT5waW5zKTsKKworCXJldHVybiBzbmRfamFja19uZXcoY2FyZC0+Y29kZWMtPmNhcmQsIGlkLCB0eXBlLCAmamFjay0+amFjayk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzbmRfc29jX2phY2tfbmV3KTsKKworLyoqCisgKiBzbmRfc29jX2phY2tfcmVwb3J0IC0gUmVwb3J0IHRoZSBjdXJyZW50IHN0YXR1cyBmb3IgYSBqYWNrCisgKgorICogQGphY2s6ICAgdGhlIGphY2sKKyAqIEBzdGF0dXM6IGEgYml0bWFzayBvZiBlbnVtIHNuZF9qYWNrX3R5cGUgdmFsdWVzIHRoYXQgYXJlIGN1cnJlbnRseSBkZXRlY3RlZC4KKyAqIEBtYXNrOiAgIGEgYml0bWFzayBvZiBlbnVtIHNuZF9qYWNrX3R5cGUgdmFsdWVzIHRoYXQgYmVpbmcgcmVwb3J0ZWQuCisgKgorICogSWYgY29uZmlndXJlZCB1c2luZyBzbmRfc29jX2phY2tfYWRkX3BpbnMoKSB0aGVuIHRoZSBhc3NvY2lhdGVkCisgKiBEQVBNIHBpbnMgd2lsbCBiZSBlbmFibGVkIG9yIGRpc2FibGVkIGFzIGFwcHJvcHJpYXRlIGFuZCBEQVBNCisgKiBzeW5jaHJvbmlzZWQuCisgKgorICogTm90ZTogVGhpcyBmdW5jdGlvbiB1c2VzIG11dGV4ZXMgYW5kIHNob3VsZCBiZSBjYWxsZWQgZnJvbSBhCisgKiBjb250ZXh0IHdoaWNoIGNhbiBzbGVlcCAoc3VjaCBhcyBhIHdvcmtxdWV1ZSkuCisgKi8KK3ZvaWQgc25kX3NvY19qYWNrX3JlcG9ydChzdHJ1Y3Qgc25kX3NvY19qYWNrICpqYWNrLCBpbnQgc3RhdHVzLCBpbnQgbWFzaykKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBqYWNrLT5jYXJkLT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19qYWNrX3BpbiAqcGluOworCWludCBlbmFibGU7CisJaW50IG9sZHN0YXR1czsKKworCWlmICghamFjaykgeworCQlXQVJOX09OX09OQ0UoIWphY2spOworCQlyZXR1cm47CisJfQorCisJbXV0ZXhfbG9jaygmY29kZWMtPm11dGV4KTsKKworCW9sZHN0YXR1cyA9IGphY2stPnN0YXR1czsKKworCWphY2stPnN0YXR1cyAmPSB+bWFzazsKKwlqYWNrLT5zdGF0dXMgfD0gc3RhdHVzOworCisJLyogVGhlIERBUE0gc3luYyBpcyBleHBlbnNpdmUgZW5vdWdoIHRvIGJlIHdvcnRoIHNraXBwaW5nICovCisJaWYgKGphY2stPnN0YXR1cyA9PSBvbGRzdGF0dXMpCisJCWdvdG8gb3V0OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShwaW4sICZqYWNrLT5waW5zLCBsaXN0KSB7CisJCWVuYWJsZSA9IHBpbi0+bWFzayAmIHN0YXR1czsKKworCQlpZiAocGluLT5pbnZlcnQpCisJCQllbmFibGUgPSAhZW5hYmxlOworCisJCWlmIChlbmFibGUpCisJCQlzbmRfc29jX2RhcG1fZW5hYmxlX3Bpbihjb2RlYywgcGluLT5waW4pOworCQllbHNlCisJCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oY29kZWMsIHBpbi0+cGluKTsKKwl9CisKKwlzbmRfc29jX2RhcG1fc3luYyhjb2RlYyk7CisKKwlzbmRfamFja19yZXBvcnQoamFjay0+amFjaywgc3RhdHVzKTsKKworb3V0OgorCW11dGV4X3VubG9jaygmY29kZWMtPm11dGV4KTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNuZF9zb2NfamFja19yZXBvcnQpOworCisvKioKKyAqIHNuZF9zb2NfamFja19hZGRfcGlucyAtIEFzc29jaWF0ZSBEQVBNIHBpbnMgd2l0aCBhbiBBU29DIGphY2sKKyAqCisgKiBAamFjazogIEFTb0MgamFjaworICogQGNvdW50OiBOdW1iZXIgb2YgcGlucworICogQHBpbnM6ICBBcnJheSBvZiBwaW5zCisgKgorICogQWZ0ZXIgdGhpcyBmdW5jdGlvbiBoYXMgYmVlbiBjYWxsZWQgdGhlIERBUE0gcGlucyBzcGVjaWZpZWQgaW4gdGhlCisgKiBwaW5zIGFycmF5IHdpbGwgaGF2ZSB0aGVpciBzdGF0dXMgdXBkYXRlZCB0byByZWZsZWN0IHRoZSBjdXJyZW50CisgKiBzdGF0ZSBvZiB0aGUgamFjayB3aGVuZXZlciB0aGUgamFjayBzdGF0dXMgaXMgdXBkYXRlZC4KKyAqLworaW50IHNuZF9zb2NfamFja19hZGRfcGlucyhzdHJ1Y3Qgc25kX3NvY19qYWNrICpqYWNrLCBpbnQgY291bnQsCisJCQkgIHN0cnVjdCBzbmRfc29jX2phY2tfcGluICpwaW5zKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJaWYgKCFwaW5zW2ldLnBpbikgeworCQkJcHJpbnRrKEtFUk5fRVJSICJObyBuYW1lIGZvciBwaW4gJWRcbiIsIGkpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJaWYgKCFwaW5zW2ldLm1hc2spIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiTm8gbWFzayBmb3IgcGluICVkICglcylcbiIsIGksCisJCQkgICAgICAgcGluc1tpXS5waW4pOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlJTklUX0xJU1RfSEVBRCgmcGluc1tpXS5saXN0KTsKKwkJbGlzdF9hZGQoJihwaW5zW2ldLmxpc3QpLCAmamFjay0+cGlucyk7CisJfQorCisJLyogVXBkYXRlIHRvIHJlZmxlY3QgdGhlIGxhc3QgcmVwb3J0ZWQgc3RhdHVzOyBjYW5uZWQgamFjaworCSAqIGltcGxlbWVudGF0aW9ucyBhcmUgbGlrZWx5IHRvIHNldCB0aGVpciBzdGF0ZSBiZWZvcmUgdGhlCisJICogY2FyZCBoYXMgYW4gb3Bwb3J0dW5pdHkgdG8gYXNzb2NpYXRlIHBpbnMuCisJICovCisJc25kX3NvY19qYWNrX3JlcG9ydChqYWNrLCAwLCAwKTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc25kX3NvY19qYWNrX2FkZF9waW5zKTsKKworI2lmZGVmIENPTkZJR19HUElPTElCCisvKiBncGlvIGRldGVjdCAqLworc3RhdGljIHZvaWQgc25kX3NvY19qYWNrX2dwaW9fZGV0ZWN0KHN0cnVjdCBzbmRfc29jX2phY2tfZ3BpbyAqZ3BpbykKK3sKKwlzdHJ1Y3Qgc25kX3NvY19qYWNrICpqYWNrID0gZ3Bpby0+amFjazsKKwlpbnQgZW5hYmxlOworCWludCByZXBvcnQ7CisKKwlpZiAoZ3Bpby0+ZGVib3VuY2VfdGltZSA+IDApCisJCW1kZWxheShncGlvLT5kZWJvdW5jZV90aW1lKTsKKworCWVuYWJsZSA9IGdwaW9fZ2V0X3ZhbHVlKGdwaW8tPmdwaW8pOworCWlmIChncGlvLT5pbnZlcnQpCisJCWVuYWJsZSA9ICFlbmFibGU7CisKKwlpZiAoZW5hYmxlKQorCQlyZXBvcnQgPSBncGlvLT5yZXBvcnQ7CisJZWxzZQorCQlyZXBvcnQgPSAwOworCisJc25kX3NvY19qYWNrX3JlcG9ydChqYWNrLCByZXBvcnQsIGdwaW8tPnJlcG9ydCk7Cit9CisKKy8qIGlycSBoYW5kbGVyIGZvciBncGlvIHBpbiAqLworc3RhdGljIGlycXJldHVybl90IGdwaW9faGFuZGxlcihpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBzbmRfc29jX2phY2tfZ3BpbyAqZ3BpbyA9IGRhdGE7CisKKwlzY2hlZHVsZV93b3JrKCZncGlvLT53b3JrKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyogZ3BpbyB3b3JrICovCitzdGF0aWMgdm9pZCBncGlvX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBzbmRfc29jX2phY2tfZ3BpbyAqZ3BpbzsKKworCWdwaW8gPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHNuZF9zb2NfamFja19ncGlvLCB3b3JrKTsKKwlzbmRfc29jX2phY2tfZ3Bpb19kZXRlY3QoZ3Bpbyk7Cit9CisKKy8qKgorICogc25kX3NvY19qYWNrX2FkZF9ncGlvcyAtIEFzc29jaWF0ZSBHUElPIHBpbnMgd2l0aCBhbiBBU29DIGphY2sKKyAqCisgKiBAamFjazogIEFTb0MgamFjaworICogQGNvdW50OiBudW1iZXIgb2YgcGlucworICogQGdwaW9zOiBhcnJheSBvZiBncGlvIHBpbnMKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmVxdWVzdCBncGlvLCBzZXQgZGF0YSBkaXJlY3Rpb24gYW5kIHJlcXVlc3QgaXJxCisgKiBmb3IgZWFjaCBncGlvIGluIHRoZSBhcnJheS4KKyAqLworaW50IHNuZF9zb2NfamFja19hZGRfZ3Bpb3Moc3RydWN0IHNuZF9zb2NfamFjayAqamFjaywgaW50IGNvdW50LAorCQkJc3RydWN0IHNuZF9zb2NfamFja19ncGlvICpncGlvcykKK3sKKwlpbnQgaSwgcmV0OworCisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJaWYgKCFncGlvX2lzX3ZhbGlkKGdwaW9zW2ldLmdwaW8pKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIkludmFsaWQgZ3BpbyAlZFxuIiwKKwkJCQlncGlvc1tpXS5ncGlvKTsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIHVuZG87CisJCX0KKwkJaWYgKCFncGlvc1tpXS5uYW1lKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIk5vIG5hbWUgZm9yIGdwaW8gJWRcbiIsCisJCQkJZ3Bpb3NbaV0uZ3Bpbyk7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byB1bmRvOworCQl9CisKKwkJcmV0ID0gZ3Bpb19yZXF1ZXN0KGdwaW9zW2ldLmdwaW8sIGdwaW9zW2ldLm5hbWUpOworCQlpZiAocmV0KQorCQkJZ290byB1bmRvOworCisJCXJldCA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KGdwaW9zW2ldLmdwaW8pOworCQlpZiAocmV0KQorCQkJZ290byBlcnI7CisKKwkJcmV0ID0gcmVxdWVzdF9pcnEoZ3Bpb190b19pcnEoZ3Bpb3NbaV0uZ3BpbyksCisJCQkJZ3Bpb19oYW5kbGVyLAorCQkJCUlSUUZfVFJJR0dFUl9SSVNJTkcgfCBJUlFGX1RSSUdHRVJfRkFMTElORywKKwkJCQlqYWNrLT5jYXJkLT5kZXYtPmRyaXZlci0+bmFtZSwKKwkJCQkmZ3Bpb3NbaV0pOworCQlpZiAocmV0KQorCQkJZ290byBlcnI7CisKKwkJSU5JVF9XT1JLKCZncGlvc1tpXS53b3JrLCBncGlvX3dvcmspOworCQlncGlvc1tpXS5qYWNrID0gamFjazsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyOgorCWdwaW9fZnJlZShncGlvc1tpXS5ncGlvKTsKK3VuZG86CisJc25kX3NvY19qYWNrX2ZyZWVfZ3Bpb3MoamFjaywgaSwgZ3Bpb3MpOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNuZF9zb2NfamFja19hZGRfZ3Bpb3MpOworCisvKioKKyAqIHNuZF9zb2NfamFja19mcmVlX2dwaW9zIC0gUmVsZWFzZSBHUElPIHBpbnMnIHJlc291cmNlcyBvZiBhbiBBU29DIGphY2sKKyAqCisgKiBAamFjazogIEFTb0MgamFjaworICogQGNvdW50OiBudW1iZXIgb2YgcGlucworICogQGdwaW9zOiBhcnJheSBvZiBncGlvIHBpbnMKKyAqCisgKiBSZWxlYXNlIGdwaW8gYW5kIGlycSByZXNvdXJjZXMgZm9yIGdwaW8gcGlucyBhc3NvY2lhdGVkIHdpdGggYW4gQVNvQyBqYWNrLgorICovCit2b2lkIHNuZF9zb2NfamFja19mcmVlX2dwaW9zKHN0cnVjdCBzbmRfc29jX2phY2sgKmphY2ssIGludCBjb3VudCwKKwkJCXN0cnVjdCBzbmRfc29jX2phY2tfZ3BpbyAqZ3Bpb3MpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQlmcmVlX2lycShncGlvX3RvX2lycShncGlvc1tpXS5ncGlvKSwgJmdwaW9zW2ldKTsKKwkJZ3Bpb19mcmVlKGdwaW9zW2ldLmdwaW8pOworCQlncGlvc1tpXS5qYWNrID0gTlVMTDsKKwl9Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzbmRfc29jX2phY2tfZnJlZV9ncGlvcyk7CisjZW5kaWYJLyogQ09ORklHX0dQSU9MSUIgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3NwYXJjL2FtZDc5MzAuYyBiL3NvdW5kL3NwYXJjL2FtZDc5MzAuYwppbmRleCBmODc5MzNlLi41NzRhZjU2IDEwMDY0NAotLS0gYS9zb3VuZC9zcGFyYy9hbWQ3OTMwLmMKKysrIGIvc291bmQvc3BhcmMvYW1kNzkzMC5jCkBAIC05NTQsNyArOTU0LDggQEAKIAlhbWQtPnJlZ3MgPSBvZl9pb3JlbWFwKCZvcC0+cmVzb3VyY2VbMF0sIDAsCiAJCQkgICAgICAgcmVzb3VyY2Vfc2l6ZSgmb3AtPnJlc291cmNlWzBdKSwgImFtZDc5MzAiKTsKIAlpZiAoIWFtZC0+cmVncykgewotCQlzbmRfcHJpbnRrKCJhbWQ3OTMwLSVkOiBVbmFibGUgdG8gbWFwIGNoaXAgcmVnaXN0ZXJzLlxuIiwgZGV2KTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUgorCQkJICAgImFtZDc5MzAtJWQ6IFVuYWJsZSB0byBtYXAgY2hpcCByZWdpc3RlcnMuXG4iLCBkZXYpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTk2Miw3ICs5NjMsNyBAQAogCiAJaWYgKHJlcXVlc3RfaXJxKGlycSwgc25kX2FtZDc5MzBfaW50ZXJydXB0LAogCQkJSVJRRl9ESVNBQkxFRCB8IElSUUZfU0hBUkVELCAiYW1kNzkzMCIsIGFtZCkpIHsKLQkJc25kX3ByaW50aygiYW1kNzkzMC0lZDogVW5hYmxlIHRvIGdyYWIgSVJRICVkXG4iLAorCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJhbWQ3OTMwLSVkOiBVbmFibGUgdG8gZ3JhYiBJUlEgJWRcbiIsCiAJCQkgICBkZXYsIGlycSk7CiAJCXNuZF9hbWQ3OTMwX2ZyZWUoYW1kKTsKIAkJcmV0dXJuIC1FQlVTWTsKQEAgLTEwMTgsOSArMTAxOSwxMCBAQAogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl9udW1dLCBpZFtkZXZfbnVtXSwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZfbnVtXSwgaWRbZGV2X251bV0sIFRISVNfTU9EVUxFLCAwLAorCQkJICAgICAgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJc3RyY3B5KGNhcmQtPmRyaXZlciwgIkFNRDc5MzAiKTsKIAlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAiU3VuIEFNRDc5MzAiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NwYXJjL2NzNDIzMS5jIGIvc291bmQvc3BhcmMvY3M0MjMxLmMKaW5kZXggNDFjMzg3NS4uN2Q5M2ZhNyAxMDA2NDQKLS0tIGEvc291bmQvc3BhcmMvY3M0MjMxLmMKKysrIGIvc291bmQvc3BhcmMvY3M0MjMxLmMKQEAgLTE1NjMsNiArMTU2Myw3IEBACiB7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCXN0cnVjdCBzbmRfY3M0MjMxICpjaGlwOworCWludCBlcnI7CiAKIAkqcmNhcmQgPSBOVUxMOwogCkBAIC0xNTc0LDEwICsxNTc1LDEwIEBACiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCi0JCQkgICAgc2l6ZW9mKHN0cnVjdCBzbmRfY3M0MjMxKSk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAorCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBzbmRfY3M0MjMxKSwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJc3RyY3B5KGNhcmQtPmRyaXZlciwgIkNTNDIzMSIpOwogCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsICJTdW4gQ1M0MjMxIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zcGFyYy9kYnJpLmMgYi9zb3VuZC9zcGFyYy9kYnJpLmMKaW5kZXggMjNlZDZmMC4uYWY5NWZmMSAxMDA2NDQKLS0tIGEvc291bmQvc3BhcmMvZGJyaS5jCisrKyBiL3NvdW5kL3NwYXJjL2RicmkuYwpAQCAtMjYxMiwxMCArMjYxMiwxMCBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAotCQkJICAgIHNpemVvZihzdHJ1Y3Qgc25kX2RicmkpKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisJCQkgICAgICBzaXplb2Yoc3RydWN0IHNuZF9kYnJpKSwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJc3RyY3B5KGNhcmQtPmRyaXZlciwgIkRCUkkiKTsKIAlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAiU3VuIERCUkkiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NwaS9hdDczYzIxMy5jIGIvc291bmQvc3BpL2F0NzNjMjEzLmMKaW5kZXggMDk4MDJlOC4uNGM3YjA1MSAxMDA2NDQKLS0tIGEvc291bmQvc3BpL2F0NzNjMjEzLmMKKysrIGIvc291bmQvc3BpL2F0NzNjMjEzLmMKQEAgLTk2NSwxMiArOTY1LDExIEBACiAJCXJldHVybiBQVFJfRVJSKGJvYXJkLT5kYWNfY2xrKTsKIAl9CiAKLQlyZXR2YWwgPSAtRU5PTUVNOwotCiAJLyogQWxsb2NhdGUgImNhcmQiIHVzaW5nIHNvbWUgdW51c2VkIGlkZW50aWZpZXJzLiAqLwogCXNucHJpbnRmKGlkLCBzaXplb2YgaWQsICJhdDczYzIxM18lZCIsIGJvYXJkLT5zc2NfaWQpOwotCWNhcmQgPSBzbmRfY2FyZF9uZXcoLTEsIGlkLCBUSElTX01PRFVMRSwgc2l6ZW9mKHN0cnVjdCBzbmRfYXQ3M2MyMTMpKTsKLQlpZiAoIWNhcmQpCisJcmV0dmFsID0gc25kX2NhcmRfY3JlYXRlKC0xLCBpZCwgVEhJU19NT0RVTEUsCisJCQkJIHNpemVvZihzdHJ1Y3Qgc25kX2F0NzNjMjEzKSwgJmNhcmQpOworCWlmIChyZXR2YWwgPCAwKQogCQlnb3RvIG91dDsKIAogCWNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7CmRpZmYgLS1naXQgYS9zb3VuZC9zeW50aC9lbXV4L2VtdXhfaHdkZXAuYyBiL3NvdW5kL3N5bnRoL2VtdXgvZW11eF9od2RlcC5jCmluZGV4IDBhNTM5MTQuLmZmMGIyYTggMTAwNjQ0Ci0tLSBhL3NvdW5kL3N5bnRoL2VtdXgvZW11eF9od2RlcC5jCisrKyBiL3NvdW5kL3N5bnRoL2VtdXgvZW11eF9od2RlcC5jCkBAIC0yNCwyNSArMjQsNiBAQAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSAiZW11eF92b2ljZS5oIgogCi0vKgotICogb3BlbiB0aGUgaHdkZXAgZGV2aWNlCi0gKi8KLXN0YXRpYyBpbnQKLXNuZF9lbXV4X2h3ZGVwX29wZW4oc3RydWN0IHNuZF9od2RlcCAqaHcsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXJldHVybiAwOwotfQotCi0KLS8qCi0gKiBjbG9zZSB0aGUgZGV2aWNlCi0gKi8KLXN0YXRpYyBpbnQKLXNuZF9lbXV4X2h3ZGVwX3JlbGVhc2Uoc3RydWN0IHNuZF9od2RlcCAqaHcsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXJldHVybiAwOwotfQotCiAKICNkZWZpbmUgVE1QX0NMSUVOVF9JRAkweDEwMDEKIApAQCAtMTQ2LDggKzEyNyw2IEBACiAJZW11LT5od2RlcCA9IGh3OwogCXN0cmNweShody0+bmFtZSwgU05EUlZfRU1VWF9IV0RFUF9OQU1FKTsKIAlody0+aWZhY2UgPSBTTkRSVl9IV0RFUF9JRkFDRV9FTVVYX1dBVkVUQUJMRTsKLQlody0+b3BzLm9wZW4gPSBzbmRfZW11eF9od2RlcF9vcGVuOwotCWh3LT5vcHMucmVsZWFzZSA9IHNuZF9lbXV4X2h3ZGVwX3JlbGVhc2U7CiAJaHctPm9wcy5pb2N0bCA9IHNuZF9lbXV4X2h3ZGVwX2lvY3RsOwogCWh3LT5leGNsdXNpdmUgPSAxOwogCWh3LT5wcml2YXRlX2RhdGEgPSBlbXU7CmRpZmYgLS1naXQgYS9zb3VuZC9zeW50aC9lbXV4L2VtdXhfb3NzLmMgYi9zb3VuZC9zeW50aC9lbXV4L2VtdXhfb3NzLmMKaW5kZXggNWM0N2I2Yy4uODdlNDIyMCAxMDA2NDQKLS0tIGEvc291bmQvc3ludGgvZW11eC9lbXV4X29zcy5jCisrKyBiL3NvdW5kL3N5bnRoL2VtdXgvZW11eF9vc3MuYwpAQCAtMTMyLDcgKzEzMiw3IEBACiAJcCA9IHNuZF9lbXV4X2NyZWF0ZV9wb3J0KGVtdSwgdG1wbmFtZSwgMzIsCiAJCQkJIDEsICZjYWxsYmFjayk7CiAJaWYgKHAgPT0gTlVMTCkgewotCQlzbmRfcHJpbnRrKCJjYW4ndCBjcmVhdGUgcG9ydFxuIik7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgImNhbid0IGNyZWF0ZSBwb3J0XG4iKTsKIAkJc25kX2VtdXhfZGVjX2NvdW50KGVtdSk7CiAJCW11dGV4X3VubG9jaygmZW11LT5yZWdpc3Rlcl9tdXRleCk7CiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvc291bmQvc3ludGgvZW11eC9lbXV4X3NlcS5jIGIvc291bmQvc3ludGgvZW11eC9lbXV4X3NlcS5jCmluZGV4IDMzNWFhMmMuLmNhNWY3ZWYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3N5bnRoL2VtdXgvZW11eF9zZXEuYworKysgYi9zb3VuZC9zeW50aC9lbXV4L2VtdXhfc2VxLmMKQEAgLTc0LDE1ICs3NCwxNSBAQAogCWVtdS0+Y2xpZW50ID0gc25kX3NlcV9jcmVhdGVfa2VybmVsX2NsaWVudChjYXJkLCBpbmRleCwKIAkJCQkJCSAgICIlcyBXYXZlVGFibGUiLCBlbXUtPm5hbWUpOwogCWlmIChlbXUtPmNsaWVudCA8IDApIHsKLQkJc25kX3ByaW50aygiY2FuJ3QgY3JlYXRlIGNsaWVudFxuIik7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgImNhbid0IGNyZWF0ZSBjbGllbnRcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAlpZiAoZW11LT5udW1fcG9ydHMgPCAwKSB7Ci0JCXNuZF9wcmludGsoInNlcXBvcnRzIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm9cbiIpOworCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORyAic2VxcG9ydHMgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVyb1xuIik7CiAJCWVtdS0+bnVtX3BvcnRzID0gMTsKIAl9IGVsc2UgaWYgKGVtdS0+bnVtX3BvcnRzID49IFNORFJWX0VNVVhfTUFYX1BPUlRTKSB7Ci0JCXNuZF9wcmludGsoInRvbyBtYW55IHBvcnRzLiIKKwkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgInRvbyBtYW55IHBvcnRzLiIKIAkJCSAgICJsaW1pdGVkIG1heC4gcG9ydHMgJWRcbiIsIFNORFJWX0VNVVhfTUFYX1BPUlRTKTsKIAkJZW11LT5udW1fcG9ydHMgPSBTTkRSVl9FTVVYX01BWF9QT1JUUzsKIAl9CkBAIC0xMDAsNyArMTAwLDcgQEAKIAkJcCA9IHNuZF9lbXV4X2NyZWF0ZV9wb3J0KGVtdSwgdG1wbmFtZSwgTUlESV9DSEFOTkVMUywKIAkJCQkJIDAsICZwaW5mbyk7CiAJCWlmIChwID09IE5VTEwpIHsKLQkJCXNuZF9wcmludGsoImNhbid0IGNyZWF0ZSBwb3J0XG4iKTsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgImNhbid0IGNyZWF0ZSBwb3J0XG4iKTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CiAKQEAgLTE0NywxMiArMTQ3LDEyIEBACiAKIAkvKiBBbGxvY2F0ZSBzdHJ1Y3R1cmVzIGZvciB0aGlzIGNoYW5uZWwgKi8KIAlpZiAoKHAgPSBremFsbG9jKHNpemVvZigqcCksIEdGUF9LRVJORUwpKSA9PSBOVUxMKSB7Ci0JCXNuZF9wcmludGsoIm5vIG1lbW9yeVxuIik7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgIm5vIG1lbW9yeVxuIik7CiAJCXJldHVybiBOVUxMOwogCX0KIAlwLT5jaHNldC5jaGFubmVscyA9IGtjYWxsb2MobWF4X2NoYW5uZWxzLCBzaXplb2Yoc3RydWN0IHNuZF9taWRpX2NoYW5uZWwpLCBHRlBfS0VSTkVMKTsKIAlpZiAocC0+Y2hzZXQuY2hhbm5lbHMgPT0gTlVMTCkgewotCQlzbmRfcHJpbnRrKCJubyBtZW1vcnlcbiIpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJubyBtZW1vcnlcbiIpOwogCQlrZnJlZShwKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQpAQCAtMzc2LDEyICszNzYsMTIgQEAKIAkJCWdvdG8gX19lcnJvcjsKIAkJfQogCQllbXUtPnZtaWRpW2ldID0gcm1pZGk7Ci0JCS8vc25kX3ByaW50aygidmlybWlkaSAlZCBva1xuIiwgaSk7CisJCS8qIHNuZF9wcmludGsoS0VSTl9ERUJVRyAidmlybWlkaSAlZCBva1xuIiwgaSk7ICovCiAJfQogCXJldHVybiAwOwogCiBfX2Vycm9yOgotCS8vc25kX3ByaW50aygiZXJyb3IgaW5pdC4uXG4iKTsKKwkvKiBzbmRfcHJpbnRrKEtFUk5fREVCVUcgImVycm9yIGluaXQuLlxuIik7ICovCiAJc25kX2VtdXhfZGVsZXRlX3Zpcm1pZGkoZW11KTsKIAlyZXR1cm4gLUVOT01FTTsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3N5bnRoL2VtdXgvZW11eF9zeW50aC5jIGIvc291bmQvc3ludGgvZW11eC9lbXV4X3N5bnRoLmMKaW5kZXggMmNjNmY2Zi4uM2U5MjFiMyAxMDA2NDQKLS0tIGEvc291bmQvc3ludGgvZW11eC9lbXV4X3N5bnRoLmMKKysrIGIvc291bmQvc3ludGgvZW11eC9lbXV4X3N5bnRoLmMKQEAgLTk1Niw3ICs5NTYsOCBAQAogCWlmIChlbXUtPnZvaWNlc1t2b2ljZV0uc3RhdGUgPT0gU05EUlZfRU1VWF9TVF9PRkYpCiAJCWVtdS0+dm9pY2VzW3ZvaWNlXS5zdGF0ZSA9IFNORFJWX0VNVVhfU1RfTE9DS0VEOwogCWVsc2UKLQkJc25kX3ByaW50aygiaW52YWxpZCB2b2ljZSBmb3IgbG9jayAlZCAoc3RhdGUgPSAleClcbiIsCisJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HCisJCQkgICAiaW52YWxpZCB2b2ljZSBmb3IgbG9jayAlZCAoc3RhdGUgPSAleClcbiIsCiAJCQkgICB2b2ljZSwgZW11LT52b2ljZXNbdm9pY2VdLnN0YXRlKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlbXUtPnZvaWNlX2xvY2ssIGZsYWdzKTsKIH0KQEAgLTk3Myw3ICs5NzQsOCBAQAogCWlmIChlbXUtPnZvaWNlc1t2b2ljZV0uc3RhdGUgPT0gU05EUlZfRU1VWF9TVF9MT0NLRUQpCiAJCWVtdS0+dm9pY2VzW3ZvaWNlXS5zdGF0ZSA9IFNORFJWX0VNVVhfU1RfT0ZGOwogCWVsc2UKLQkJc25kX3ByaW50aygiaW52YWxpZCB2b2ljZSBmb3IgdW5sb2NrICVkIChzdGF0ZSA9ICV4KVxuIiwKKwkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSAgICJpbnZhbGlkIHZvaWNlIGZvciB1bmxvY2sgJWQgKHN0YXRlID0gJXgpXG4iLAogCQkJICAgdm9pY2UsIGVtdS0+dm9pY2VzW3ZvaWNlXS5zdGF0ZSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZW11LT52b2ljZV9sb2NrLCBmbGFncyk7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9zeW50aC9lbXV4L3NvdW5kZm9udC5jIGIvc291bmQvc3ludGgvZW11eC9zb3VuZGZvbnQuYwppbmRleCAzNmQ1M2JkLi42M2M4ZjQ1IDEwMDY0NAotLS0gYS9zb3VuZC9zeW50aC9lbXV4L3NvdW5kZm9udC5jCisrKyBiL3NvdW5kL3N5bnRoL2VtdXgvc291bmRmb250LmMKQEAgLTEzMyw3ICsxMzMsNyBAQAogCWludCAgcmM7CiAKIAlpZiAoY291bnQgPCAobG9uZylzaXplb2YocGF0Y2gpKSB7Ci0JCXNuZF9wcmludGsoInBhdGNoIHJlY29yZCB0b28gc21hbGwgJWxkXG4iLCBjb3VudCk7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgInBhdGNoIHJlY29yZCB0b28gc21hbGwgJWxkXG4iLCBjb3VudCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlpZiAoY29weV9mcm9tX3VzZXIoJnBhdGNoLCBkYXRhLCBzaXplb2YocGF0Y2gpKSkKQEAgLTE0MywxNSArMTQzLDE2IEBACiAJZGF0YSArPSBzaXplb2YocGF0Y2gpOwogCiAJaWYgKHBhdGNoLmtleSAhPSBTTkRSVl9PU1NfU09VTkRGT05UX1BBVENIKSB7Ci0JCXNuZF9wcmludGsoIidUaGUgd3Jvbmcga2luZCBvZiBwYXRjaCcgJXhcbiIsIHBhdGNoLmtleSk7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgIlRoZSB3cm9uZyBraW5kIG9mIHBhdGNoICV4XG4iLCBwYXRjaC5rZXkpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJaWYgKGNvdW50IDwgcGF0Y2gubGVuKSB7Ci0JCXNuZF9wcmludGsoIlBhdGNoIHRvbyBzaG9ydCAlbGQsIG5lZWQgJWRcbiIsIGNvdW50LCBwYXRjaC5sZW4pOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJQYXRjaCB0b28gc2hvcnQgJWxkLCBuZWVkICVkXG4iLAorCQkJICAgY291bnQsIHBhdGNoLmxlbik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlpZiAocGF0Y2gubGVuIDwgMCkgewotCQlzbmRfcHJpbnRrKCJwb29yIGxlbmd0aCAlZFxuIiwgcGF0Y2gubGVuKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAicG9vciBsZW5ndGggJWRcbiIsIHBhdGNoLmxlbik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMTk1LDcgKzE5Niw4IEBACiAJY2FzZSBTTkRSVl9TRk5UX1JFTU9WRV9JTkZPOgogCQkvKiBwYXRjaCBtdXN0IGJlIG9wZW5lZCAqLwogCQlpZiAoIXNmbGlzdC0+Y3VycnNmKSB7Ci0JCQlzbmRfcHJpbnRrKCJzb3VuZGZvbnQ6IHJlbW92ZV9pbmZvOiBwYXRjaCBub3Qgb3BlbmVkXG4iKTsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgInNvdW5kZm9udDogcmVtb3ZlX2luZm86ICIKKwkJCQkgICAicGF0Y2ggbm90IG9wZW5lZFxuIik7CiAJCQlyYyA9IC1FSU5WQUw7CiAJCX0gZWxzZSB7CiAJCQlpbnQgYmFuaywgaW5zdHI7CkBAIC01MzEsNyArNTMzLDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoY291bnQgPCAobG9uZylzaXplb2YoaGRyKSkgewotCQlwcmludGsoIlNvdW5kZm9udCBlcnJvcjogaW52YWxpZCBwYXRjaCB6b25lIGxlbmd0aFxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiU291bmRmb250IGVycm9yOiBpbnZhbGlkIHBhdGNoIHpvbmUgbGVuZ3RoXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWlmIChjb3B5X2Zyb21fdXNlcigoY2hhciopJmhkciwgZGF0YSwgc2l6ZW9mKGhkcikpKQpAQCAtNTQxLDEyICs1NDMsMTQgQEAKIAljb3VudCAtPSBzaXplb2YoaGRyKTsKIAogCWlmIChoZHIubnZvaWNlcyA8PSAwIHx8IGhkci5udm9pY2VzID49IDEwMCkgewotCQlwcmludGsoIlNvdW5kZm9udCBlcnJvcjogSWxsZWdhbCB2b2ljZSBudW1iZXIgJWRcbiIsIGhkci5udm9pY2VzKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJTb3VuZGZvbnQgZXJyb3I6IElsbGVnYWwgdm9pY2UgbnVtYmVyICVkXG4iLAorCQkgICAgICAgaGRyLm52b2ljZXMpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlpZiAoY291bnQgPCAobG9uZylzaXplb2Yoc3RydWN0IHNvdW5kZm9udF92b2ljZV9pbmZvKSAqIGhkci5udm9pY2VzKSB7Ci0JCXByaW50aygiU291bmRmb250IEVycm9yOiBwYXRjaCBsZW5ndGgoJWxkKSBpcyBzbWFsbGVyIHRoYW4gbnZvaWNlcyglZClcbiIsCisJCXByaW50ayhLRVJOX0VSUiAiU291bmRmb250IEVycm9yOiAiCisJCSAgICAgICAicGF0Y2ggbGVuZ3RoKCVsZCkgaXMgc21hbGxlciB0aGFuIG52b2ljZXMoJWQpXG4iLAogCQkgICAgICAgY291bnQsIGhkci5udm9pY2VzKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtOTUyLDcgKzk1Niw3IEBACiAJaW50IHJjOwogCiAJaWYgKGNvdW50IDwgKGxvbmcpc2l6ZW9mKHBhdGNoKSkgewotCQlzbmRfcHJpbnRrKCJwYXRjaCByZWNvcmQgdG9vIHNtYWxsICVsZFxuIiwgY291bnQpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJwYXRjaCByZWNvcmQgdG9vIHNtYWxsICVsZFxuIiwgY291bnQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJaWYgKGNvcHlfZnJvbV91c2VyKCZwYXRjaCwgZGF0YSwgc2l6ZW9mKHBhdGNoKSkpCkBAIC0xMDM0LDcgKzEwMzgsOCBAQAogCS8qIHBhbm5pbmcgcG9zaXRpb247IC0xMjggLSAxMjcgPT4gMC0xMjcgKi8KIAl6b25lLT52LnBhbiA9IChwYXRjaC5wYW5uaW5nICsgMTI4KSAvIDI7CiAjaWYgMAotCXNuZF9wcmludGsoImd1czogYmFzZWZycT0lZCAob2ZzPSVkKSByb290PSVkLHR1bmU9JWQsIHJhbmdlOiVkLSVkXG4iLAorCXNuZF9wcmludGsoS0VSTl9ERUJVRworCQkgICAiZ3VzOiBiYXNlZnJxPSVkIChvZnM9JWQpIHJvb3Q9JWQsdHVuZT0lZCwgcmFuZ2U6JWQtJWRcbiIsCiAJCSAgIChpbnQpcGF0Y2guYmFzZV9mcmVxLCB6b25lLT52LnJhdGVfb2Zmc2V0LAogCQkgICB6b25lLT52LnJvb3QsIHpvbmUtPnYudHVuZSwgem9uZS0+di5sb3csIHpvbmUtPnYuaGlnaCk7CiAjZW5kaWYKQEAgLTEwNjgsNyArMTA3Myw4IEBACiAJCXpvbmUtPnYucGFybS52b2xyZWxlYXNlID0gMHg4MDAwIHwgc25kX3NmX2NhbGNfcGFybV9kZWNheShyZWxlYXNlKTsKIAkJem9uZS0+di5hdHRlbnVhdGlvbiA9IGNhbGNfZ3VzX2F0dGVudWF0aW9uKHBhdGNoLmVudl9vZmZzZXRbMF0pOwogI2lmIDAKLQkJc25kX3ByaW50aygiZ3VzOiBhdGtobGQ9JXgsIGRjeXN1cz0leCwgdm9scmVsPSV4LCBhdHQ9JWRcbiIsCisJCXNuZF9wcmludGsoS0VSTl9ERUJVRworCQkJICAgImd1czogYXRraGxkPSV4LCBkY3lzdXM9JXgsIHZvbHJlbD0leCwgYXR0PSVkXG4iLAogCQkJICAgem9uZS0+di5wYXJtLnZvbGF0a2hsZCwKIAkJCSAgIHpvbmUtPnYucGFybS52b2xkY3lzdXMsCiAJCQkgICB6b25lLT52LnBhcm0udm9scmVsZWFzZSwKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi9LY29uZmlnIGIvc291bmQvdXNiL0tjb25maWcKaW5kZXggNGYwZWFjOS4uNTIzYWVjMSAxMDA2NDQKLS0tIGEvc291bmQvdXNiL0tjb25maWcKKysrIGIvc291bmQvdXNiL0tjb25maWcKQEAgLTQ4LDcgKzQ4LDEwIEBACiAJICAgICogTmF0aXZlIEluc3RydW1lbnRzIEtvcmUgQ29udHJvbGxlcgogCSAgICAqIE5hdGl2ZSBJbnN0cnVtZW50cyBLb3JlIENvbnRyb2xsZXIgMgogCSAgICAqIE5hdGl2ZSBJbnN0cnVtZW50cyBBdWRpbyBLb250cm9sIDEKKwkgICAgKiBOYXRpdmUgSW5zdHJ1bWVudHMgQXVkaW8gNCBESgogCSAgICAqIE5hdGl2ZSBJbnN0cnVtZW50cyBBdWRpbyA4IERKCisJICAgICogTmF0aXZlIEluc3RydW1lbnRzIEd1aXRhciBSaWcgU2Vzc2lvbiBJL08KKwkgICAgKiBOYXRpdmUgSW5zdHJ1bWVudHMgR3VpdGFyIFJpZyBtb2JpbGUKIAogCSAgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKIAkgICB3aWxsIGJlIGNhbGxlZCBzbmQtdXNiLWNhaWFxLgpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL2NhaWFxL2NhaWFxLWF1ZGlvLmMgYi9zb3VuZC91c2IvY2FpYXEvY2FpYXEtYXVkaW8uYwppbmRleCBiM2E2MDMzLi4wOGQ1MWUwIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvY2FpYXEvY2FpYXEtYXVkaW8uYworKysgYi9zb3VuZC91c2IvY2FpYXEvY2FpYXEtYXVkaW8uYwpAQCAtMTE0LDYgKzExNCw3IEBACiAJZGV2LT5vdXRwdXRfcGFuaWMgPSAwOwogCWRldi0+Zmlyc3RfcGFja2V0ID0gMTsKIAlkZXYtPnN0cmVhbWluZyA9IDE7CisJZGV2LT53YXJuZWQgPSAwOwogCiAJZm9yIChpID0gMDsgaSA8IE5fVVJCUzsgaSsrKSB7CiAJCXJldCA9IHVzYl9zdWJtaXRfdXJiKGRldi0+ZGF0YV91cmJzX2luW2ldLCBHRlBfQVRPTUlDKTsKQEAgLTM3Niw2ICszNzcsOSBAQAogCiAJCWZvciAoc3RyZWFtID0gMDsgc3RyZWFtIDwgZGV2LT5uX3N0cmVhbXM7IHN0cmVhbSsrLCBpKyspIHsKIAkJCXN1YiA9IGRldi0+c3ViX2NhcHR1cmVbc3RyZWFtXTsKKwkJCWlmIChkZXYtPmlucHV0X3BhbmljKQorCQkJCXVzYl9idWZbaV0gPSAwOworCiAJCQlpZiAoc3ViKSB7CiAJCQkJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnQgPSBzdWItPnJ1bnRpbWU7CiAJCQkJY2hhciAqYXVkaW9fYnVmID0gcnQtPmRtYV9hcmVhOwpAQCAtMzk3LDYgKzQwMSw5IEBACiAJaWYgKCFkZXYtPnN0cmVhbWluZykKIAkJcmV0dXJuOwogCisJaWYgKGlzby0+YWN0dWFsX2xlbmd0aCA8IGRldi0+YnBwKQorCQlyZXR1cm47CisKIAlzd2l0Y2ggKGRldi0+c3BlYy5kYXRhX2FsaWdubWVudCkgewogCWNhc2UgMDoKIAkJcmVhZF9pbl91cmJfbW9kZTAoZGV2LCB1cmIsIGlzbyk7CkBAIC00MDYsMTAgKzQxMywxMSBAQAogCQlicmVhazsKIAl9CiAKLQlpZiAoZGV2LT5pbnB1dF9wYW5pYyB8fCBkZXYtPm91dHB1dF9wYW5pYykgeworCWlmICgoZGV2LT5pbnB1dF9wYW5pYyB8fCBkZXYtPm91dHB1dF9wYW5pYykgJiYgIWRldi0+d2FybmVkKSB7CiAJCWRlYnVnKCJzdHJlYW1pbmcgZXJyb3IgZGV0ZWN0ZWQgJXMgJXNcbiIsIAogCQkJCWRldi0+aW5wdXRfcGFuaWMgPyAiKGlucHV0KSIgOiAiIiwKIAkJCQlkZXYtPm91dHB1dF9wYW5pYyA/ICIob3V0cHV0KSIgOiAiIik7CisJCWRldi0+d2FybmVkID0gMTsKIAl9CiB9CiAKQEAgLTYzOCw5ICs2NDYsMTAgQEAKIAljYXNlIFVTQl9JRChVU0JfVklEX05BVElWRUlOU1RSVU1FTlRTLCBVU0JfUElEX0FLMSk6CiAJY2FzZSBVU0JfSUQoVVNCX1ZJRF9OQVRJVkVJTlNUUlVNRU5UUywgVVNCX1BJRF9SSUdLT05UUk9MMyk6CiAJY2FzZSBVU0JfSUQoVVNCX1ZJRF9OQVRJVkVJTlNUUlVNRU5UUywgVVNCX1BJRF9TRVNTSU9OSU8pOgotCQlkZXYtPnNhbXBsZXJhdGVzIHw9IFNORFJWX1BDTV9SQVRFXzg4MjAwOworCWNhc2UgVVNCX0lEKFVTQl9WSURfTkFUSVZFSU5TVFJVTUVOVFMsIFVTQl9QSURfR1VJVEFSUklHTU9CSUxFKToKIAkJZGV2LT5zYW1wbGVyYXRlcyB8PSBTTkRSVl9QQ01fUkFURV8xOTIwMDA7Ci0JCWJyZWFrOworCQkvKiBmYWxsIHRocnUgKi8KKwljYXNlIFVTQl9JRChVU0JfVklEX05BVElWRUlOU1RSVU1FTlRTLCBVU0JfUElEX0FVRElPNERKKToKIAljYXNlIFVTQl9JRChVU0JfVklEX05BVElWRUlOU1RSVU1FTlRTLCBVU0JfUElEX0FVRElPOERKKToKIAkJZGV2LT5zYW1wbGVyYXRlcyB8PSBTTkRSVl9QQ01fUkFURV84ODIwMDsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9zb3VuZC91c2IvY2FpYXEvY2FpYXEtY29udHJvbC5jIGIvc291bmQvdXNiL2NhaWFxL2NhaWFxLWNvbnRyb2wuYwppbmRleCBjY2Q3NjNkLi5lOTJjMmJiIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvY2FpYXEvY2FpYXEtY29udHJvbC5jCisrKyBiL3NvdW5kL3VzYi9jYWlhcS9jYWlhcS1jb250cm9sLmMKQEAgLTM5LDEyICszOSwxMiBAQAogCXN0cnVjdCBzbmRfdXNiX2NhaWFxZGV2ICpkZXYgPSBjYWlhcWRldihjaGlwLT5jYXJkKTsKIAlpbnQgcG9zID0ga2NvbnRyb2wtPnByaXZhdGVfdmFsdWU7CiAJaW50IGlzX2ludHZhbCA9IHBvcyAmIENOVF9JTlRWQUw7CisJdW5zaWduZWQgaW50IGlkID0gZGV2LT5jaGlwLnVzYl9pZDsKIAogCXVpbmZvLT5jb3VudCA9IDE7CiAJcG9zICY9IH5DTlRfSU5UVkFMOwogCi0JaWYgKGRldi0+Y2hpcC51c2JfaWQgPT0KLQkJVVNCX0lEKFVTQl9WSURfTkFUSVZFSU5TVFJVTUVOVFMsIFVTQl9QSURfQVVESU84REopCisJaWYgKGlkID09IFVTQl9JRChVU0JfVklEX05BVElWRUlOU1RSVU1FTlRTLCBVU0JfUElEX0FVRElPOERKKQogCQkmJiAocG9zID09IDApKSB7CiAJCS8qIGN1cnJlbnQgaW5wdXQgbW9kZSBvZiBBOERKICovCiAJCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9JTlRFR0VSOwpAQCAtNTMsNiArNTMsMTUgQEAKIAkJcmV0dXJuIDA7CiAJfQogCisJaWYgKGlkID09IFVTQl9JRChVU0JfVklEX05BVElWRUlOU1RSVU1FTlRTLCBVU0JfUElEX0FVRElPNERKKQorCQkmJiAocG9zID09IDApKSB7CisJCS8qIGN1cnJlbnQgaW5wdXQgbW9kZSBvZiBBNERKICovCisJCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9JTlRFR0VSOworCQl1aW5mby0+dmFsdWUuaW50ZWdlci5taW4gPSAwOworCQl1aW5mby0+dmFsdWUuaW50ZWdlci5tYXggPSAxOworCQlyZXR1cm4gMDsKKwl9CisKIAlpZiAoaXNfaW50dmFsKSB7CiAJCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9JTlRFR0VSOwogCQl1aW5mby0+dmFsdWUuaW50ZWdlci5taW4gPSAwOwpAQCAtNzMsNiArODIsMTQgQEAKIAlzdHJ1Y3Qgc25kX3VzYl9jYWlhcWRldiAqZGV2ID0gY2FpYXFkZXYoY2hpcC0+Y2FyZCk7CiAJaW50IHBvcyA9IGtjb250cm9sLT5wcml2YXRlX3ZhbHVlOwogCisJaWYgKGRldi0+Y2hpcC51c2JfaWQgPT0KKwkJVVNCX0lEKFVTQl9WSURfTkFUSVZFSU5TVFJVTUVOVFMsIFVTQl9QSURfQVVESU80REopKSB7CisJCS8qIEE0REogaGFzIG9ubHkgb25lIGNvbnRyb2wgKi8KKwkJLyogZG8gbm90IGV4cG9zZSBoYXJkd2FyZSBpbnB1dCBtb2RlIDAgKi8KKwkJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBkZXYtPmNvbnRyb2xfc3RhdGVbMF0gLSAxOworCQlyZXR1cm4gMDsKKwl9CisKIAlpZiAocG9zICYgQ05UX0lOVFZBTCkKIAkJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0KIAkJCT0gZGV2LT5jb250cm9sX3N0YXRlW3BvcyAmIH5DTlRfSU5UVkFMXTsKQEAgLTkwLDEwICsxMDcsMjAgQEAKIAlzdHJ1Y3Qgc25kX3VzYl9jYWlhcWRldiAqZGV2ID0gY2FpYXFkZXYoY2hpcC0+Y2FyZCk7CiAJaW50IHBvcyA9IGtjb250cm9sLT5wcml2YXRlX3ZhbHVlOwogCisJaWYgKGRldi0+Y2hpcC51c2JfaWQgPT0KKwkJVVNCX0lEKFVTQl9WSURfTkFUSVZFSU5TVFJVTUVOVFMsIFVTQl9QSURfQVVESU80REopKSB7CisJCS8qIEE0REogaGFzIG9ubHkgb25lIGNvbnRyb2wgKi8KKwkJLyogZG8gbm90IGV4cG9zZSBoYXJkd2FyZSBpbnB1dCBtb2RlIDAgKi8KKwkJZGV2LT5jb250cm9sX3N0YXRlWzBdID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gKyAxOworCQlzbmRfdXNiX2NhaWFxX3NlbmRfY29tbWFuZChkZXYsIEVQMV9DTURfV1JJVEVfSU8sCisJCQkJZGV2LT5jb250cm9sX3N0YXRlLCBzaXplb2YoZGV2LT5jb250cm9sX3N0YXRlKSk7CisJCXJldHVybiAxOworCX0KKwogCWlmIChwb3MgJiBDTlRfSU5UVkFMKSB7CiAJCWRldi0+Y29udHJvbF9zdGF0ZVtwb3MgJiB+Q05UX0lOVFZBTF0KIAkJCT0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF07Ci0JCXNuZF91c2JfY2FpYXFfc2VuZF9jb21tYW5kKGRldiwgRVAxX0NNRF9ESU1NX0xFRFMsCisJCXNuZF91c2JfY2FpYXFfc2VuZF9jb21tYW5kKGRldiwgRVAxX0NNRF9XUklURV9JTywKIAkJCQlkZXYtPmNvbnRyb2xfc3RhdGUsIHNpemVvZihkZXYtPmNvbnRyb2xfc3RhdGUpKTsKIAl9IGVsc2UgewogCQlpZiAodWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0pCkBAIC0yNDMsMTAgKzI3MCwxMyBAQAogCXsgIkdORCBsaWZ0IGZvciBUQyBWaW55bCBtb2RlIiwgCTI0ICsgMCAJCX0sCiAJeyAiR05EIGxpZnQgZm9yIFRDIENEL0xpbmUgbW9kZSIsIAkyNCArIDEgCQl9LAogCXsgIkdORCBsaWZ0IGZvciBwaG9ubyBtb2RlIiwgCQkyNCArIDIgCQl9LAotCXsgIkdORCBsaWZ0IGZvciBUQyBWaW55bCBtb2RlIiwgCTI0ICsgMyAJCX0sCiAJeyAiU29mdHdhcmUgbG9jayIsIAkJCTQwIAkJfQogfTsKIAorc3RhdGljIHN0cnVjdCBjYWlhcV9jb250cm9sbGVyIGE0ZGpfY29udHJvbGxlcltdID0geworCXsgIkN1cnJlbnQgaW5wdXQgbW9kZSIsCTAgfCBDTlRfSU5UVkFMIAl9Cit9OworCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBhZGRfY29udHJvbHMoc3RydWN0IGNhaWFxX2NvbnRyb2xsZXIgKmMsIGludCBudW0sCiAJCQkJICBzdHJ1Y3Qgc25kX3VzYl9jYWlhcWRldiAqZGV2KQogewpAQCAtMjk1LDYgKzMyNSwxMCBAQAogCQlyZXQgPSBhZGRfY29udHJvbHMoYThkal9jb250cm9sbGVyLAogCQkJQVJSQVlfU0laRShhOGRqX2NvbnRyb2xsZXIpLCBkZXYpOwogCQlicmVhazsKKwljYXNlIFVTQl9JRChVU0JfVklEX05BVElWRUlOU1RSVU1FTlRTLCBVU0JfUElEX0FVRElPNERKKToKKwkJcmV0ID0gYWRkX2NvbnRyb2xzKGE0ZGpfY29udHJvbGxlciwKKwkJCUFSUkFZX1NJWkUoYTRkal9jb250cm9sbGVyKSwgZGV2KTsKKwkJYnJlYWs7CiAJfQogCiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi9jYWlhcS9jYWlhcS1kZXZpY2UuYyBiL3NvdW5kL3VzYi9jYWlhcS9jYWlhcS1kZXZpY2UuYwppbmRleCA0MWMzNmIwLi5jZjU3M2E5IDEwMDY0NAotLS0gYS9zb3VuZC91c2IvY2FpYXEvY2FpYXEtZGV2aWNlLmMKKysrIGIvc291bmQvdXNiL2NhaWFxL2NhaWFxLWRldmljZS5jCkBAIC00MiwxNSArNDIsMTcgQEAKICNlbmRpZgogCiBNT0RVTEVfQVVUSE9SKCJEYW5pZWwgTWFjayA8ZGFuaWVsQGNhaWFxLmRlPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJjYWlhcSBVU0IgYXVkaW8sIHZlcnNpb24gMS4zLjEwIik7CitNT0RVTEVfREVTQ1JJUFRJT04oImNhaWFxIFVTQiBhdWRpbywgdmVyc2lvbiAxLjMuMTMiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9TVVBQT1JURURfREVWSUNFKCJ7e05hdGl2ZSBJbnN0cnVtZW50cywgUmlnS29udHJvbDJ9LCIKIAkJCSAie05hdGl2ZSBJbnN0cnVtZW50cywgUmlnS29udHJvbDN9LCIKIAkJCSAie05hdGl2ZSBJbnN0cnVtZW50cywgS29yZSBDb250cm9sbGVyfSwiCiAJCQkgIntOYXRpdmUgSW5zdHJ1bWVudHMsIEtvcmUgQ29udHJvbGxlciAyfSwiCiAJCQkgIntOYXRpdmUgSW5zdHJ1bWVudHMsIEF1ZGlvIEtvbnRyb2wgMX0sIgorCQkJICJ7TmF0aXZlIEluc3RydW1lbnRzLCBBdWRpbyA0IERKfSwiCiAJCQkgIntOYXRpdmUgSW5zdHJ1bWVudHMsIEF1ZGlvIDggREp9LCIKLQkJCSAie05hdGl2ZSBJbnN0cnVtZW50cywgU2Vzc2lvbiBJL099fSIpOworCQkJICJ7TmF0aXZlIEluc3RydW1lbnRzLCBTZXNzaW9uIEkvT30sIgorCQkJICJ7TmF0aXZlIEluc3RydW1lbnRzLCBHdWl0YXJSaWcgbW9iaWxlfSIpOwogCiBzdGF0aWMgaW50IGluZGV4W1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfSURYOyAvKiBJbmRleCAwLW1heCAqLwogc3RhdGljIGNoYXIqIGlkW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfU1RSOyAvKiBJZCBmb3IgdGhpcyBjYXJkICovCkBAIC0xMTYsNiArMTE4LDE2IEBACiAJCS5pZFZlbmRvciA9ICAgICBVU0JfVklEX05BVElWRUlOU1RSVU1FTlRTLAogCQkuaWRQcm9kdWN0ID0gICAgVVNCX1BJRF9TRVNTSU9OSU8KIAl9LAorCXsKKwkJLm1hdGNoX2ZsYWdzID0gIFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFLAorCQkuaWRWZW5kb3IgPSAgICAgVVNCX1ZJRF9OQVRJVkVJTlNUUlVNRU5UUywKKwkJLmlkUHJvZHVjdCA9ICAgIFVTQl9QSURfR1VJVEFSUklHTU9CSUxFCisJfSwKKwl7CisJCS5tYXRjaF9mbGFncyA9ICBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRSwKKwkJLmlkVmVuZG9yID0gICAgIFVTQl9WSURfTkFUSVZFSU5TVFJVTUVOVFMsCisJCS5pZFByb2R1Y3QgPSAgICBVU0JfUElEX0FVRElPNERKCisJfSwKIAl7IC8qIHRlcm1pbmF0b3IgKi8gfQogfTsKIApAQCAtMjM5LDYgKzI1MSw4IEBACiAJCQogCWlmIChkZXYtPmF1ZGlvX3Bhcm1fYW5zd2VyICE9IDEpIAogCQlkZWJ1ZygidW5hYmxlIHRvIHNldCB0aGUgZGV2aWNlJ3MgYXVkaW8gcGFyYW1zXG4iKTsKKwllbHNlCisJCWRldi0+YnBwID0gYnBwOwogCiAJcmV0dXJuIGRldi0+YXVkaW9fcGFybV9hbnN3ZXIgPT0gMSA/IDAgOiAtRUlOVkFMOwogfQpAQCAtMzAwLDYgKzMxNCwxMiBAQAogCQl9CiAKIAkJYnJlYWs7CisJY2FzZSBVU0JfSUQoVVNCX1ZJRF9OQVRJVkVJTlNUUlVNRU5UUywgVVNCX1BJRF9BVURJTzRESik6CisJCS8qIEF1ZGlvIDQgREogLSBkZWZhdWx0IGlucHV0IG1vZGUgdG8gcGhvbm8gKi8KKwkJZGV2LT5jb250cm9sX3N0YXRlWzBdID0gMjsKKwkJc25kX3VzYl9jYWlhcV9zZW5kX2NvbW1hbmQoZGV2LCBFUDFfQ01EX1dSSVRFX0lPLAorCQkJZGV2LT5jb250cm9sX3N0YXRlLCAxKTsKKwkJYnJlYWs7CiAJfQogCQogCWlmIChkZXYtPnNwZWMubnVtX2FuYWxvZ19hdWRpb19vdXQgKwpAQCAtMzM2LDkgKzM1NiwxMCBAQAogCQlsb2coIlVuYWJsZSB0byBzZXQgdXAgY29udHJvbCBzeXN0ZW0gKHJldD0lZClcbiIsIHJldCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2NhcmQqIGNyZWF0ZV9jYXJkKHN0cnVjdCB1c2JfZGV2aWNlKiB1c2JfZGV2KQorc3RhdGljIGludCBjcmVhdGVfY2FyZChzdHJ1Y3QgdXNiX2RldmljZSogdXNiX2Rldiwgc3RydWN0IHNuZF9jYXJkICoqY2FyZHApCiB7CiAJaW50IGRldm51bTsKKwlpbnQgZXJyOwogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKIAlzdHJ1Y3Qgc25kX3VzYl9jYWlhcWRldiAqZGV2OwogCkBAIC0zNDcsMTIgKzM2OCwxMiBAQAogCQkJYnJlYWs7CiAKIAlpZiAoZGV2bnVtID49IFNORFJWX0NBUkRTKQotCQlyZXR1cm4gTlVMTDsKKwkJcmV0dXJuIC1FTk9ERVY7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldm51bV0sIGlkW2Rldm51bV0sIFRISVNfTU9EVUxFLCAKLQkJCQkJc2l6ZW9mKHN0cnVjdCBzbmRfdXNiX2NhaWFxZGV2KSk7Ci0JaWYgKCFjYXJkKQotCQlyZXR1cm4gTlVMTDsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2bnVtXSwgaWRbZGV2bnVtXSwgVEhJU19NT0RVTEUsIAorCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBzbmRfdXNiX2NhaWFxZGV2KSwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJZGV2ID0gY2FpYXFkZXYoY2FyZCk7CiAJZGV2LT5jaGlwLmRldiA9IHVzYl9kZXY7CkBAIC0zNjIsNyArMzgzLDggQEAKIAlzcGluX2xvY2tfaW5pdCgmZGV2LT5zcGlubG9jayk7CiAJc25kX2NhcmRfc2V0X2RldihjYXJkLCAmdXNiX2Rldi0+ZGV2KTsKIAotCXJldHVybiBjYXJkOworCSpjYXJkcCA9IGNhcmQ7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGluaXRfY2FyZChzdHJ1Y3Qgc25kX3VzYl9jYWlhcWRldiAqZGV2KQpAQCAtNDQxLDEwICs0NjMsMTAgQEAKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldmljZSA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CiAJCi0JY2FyZCA9IGNyZWF0ZV9jYXJkKGRldmljZSk7CisJcmV0ID0gY3JlYXRlX2NhcmQoZGV2aWNlLCAmY2FyZCk7CiAJCi0JaWYgKCFjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKIAkJCQogCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgY2FyZCk7CiAJcmV0ID0gaW5pdF9jYXJkKGNhaWFxZGV2KGNhcmQpKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi9jYWlhcS9jYWlhcS1kZXZpY2UuaCBiL3NvdW5kL3VzYi9jYWlhcS9jYWlhcS1kZXZpY2UuaAppbmRleCBhYjU2ZTczLi40Y2NlMWFkIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvY2FpYXEvY2FpYXEtZGV2aWNlLmgKKysrIGIvc291bmQvdXNiL2NhaWFxL2NhaWFxLWRldmljZS5oCkBAIC0xMCw4ICsxMCwxMCBAQAogI2RlZmluZSBVU0JfUElEX0tPUkVDT05UUk9MTEVSCTB4NDcxMQogI2RlZmluZSBVU0JfUElEX0tPUkVDT05UUk9MTEVSMgkweDQ3MTIKICNkZWZpbmUgVVNCX1BJRF9BSzEJCTB4MDgxNQorI2RlZmluZSBVU0JfUElEX0FVRElPNERKCTB4MDgzOQogI2RlZmluZSBVU0JfUElEX0FVRElPOERKCTB4MTk3OAogI2RlZmluZSBVU0JfUElEX1NFU1NJT05JTwkweDE5MTUKKyNkZWZpbmUgVVNCX1BJRF9HVUlUQVJSSUdNT0JJTEUJMHgwZDhkCiAKICNkZWZpbmUgRVAxX0JVRlNJWkUgNjQKICNkZWZpbmUgQ0FJQVFfVVNCX1NUUl9MRU4gMHhmZgpAQCAtODcsOSArODksOSBAQAogCWludCBhdWRpb19vdXRfYnVmX3Bvc1tNQVhfU1RSRUFNU107CiAJaW50IHBlcmlvZF9pbl9jb3VudFtNQVhfU1RSRUFNU107CiAJaW50IHBlcmlvZF9vdXRfY291bnRbTUFYX1NUUkVBTVNdOwotCWludCBpbnB1dF9wYW5pYywgb3V0cHV0X3BhbmljOworCWludCBpbnB1dF9wYW5pYywgb3V0cHV0X3BhbmljLCB3YXJuZWQ7CiAJY2hhciAqYXVkaW9faW5fYnVmLCAqYXVkaW9fb3V0X2J1ZjsKLQl1bnNpZ25lZCBpbnQgc2FtcGxlcmF0ZXM7CisJdW5zaWduZWQgaW50IHNhbXBsZXJhdGVzLCBicHA7CiAKIAlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1Yl9wbGF5YmFja1tNQVhfU1RSRUFNU107CiAJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJfY2FwdHVyZVtNQVhfU1RSRUFNU107CmRpZmYgLS1naXQgYS9zb3VuZC91c2IvdXNiYXVkaW8uYyBiL3NvdW5kL3VzYi91c2JhdWRpby5jCmluZGV4IDE5ZTM3NDUuLmMyZGIwZjkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi91c2JhdWRpby5jCisrKyBiL3NvdW5kL3VzYi91c2JhdWRpby5jCkBAIC0xMDcsNyArMTA3LDcgQEAKICNkZWZpbmUgTUFYX1BBQ0tTX0hTCShNQVhfUEFDS1MgKiA4KQkvKiBpbiBoaWdoIHNwZWVkIG1vZGUgKi8KICNkZWZpbmUgTUFYX1VSQlMJOAogI2RlZmluZSBTWU5DX1VSQlMJNAkvKiBhbHdheXMgZm91ciB1cmJzIGZvciBzeW5jICovCi0jZGVmaW5lIE1JTl9QQUNLU19VUkIJMQkvKiBtaW5pbXVtIDEgcGFja2V0IHBlciB1cmIgKi8KKyNkZWZpbmUgTUFYX1FVRVVFCTI0CS8qIHRyeSBub3QgdG8gZXhjZWVkIHRoaXMgcXVldWUgbGVuZ3RoLCBpbiBtcyAqLwogCiBzdHJ1Y3QgYXVkaW9mb3JtYXQgewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKQEAgLTUyNSw3ICs1MjUsNyBAQAogLyoKICAqIFByZXBhcmUgdXJiIGZvciBzdHJlYW1pbmcgYmVmb3JlIHBsYXliYWNrIHN0YXJ0cyBvciB3aGVuIHBhdXNlZC4KICAqCi0gKiBXZSBkb24ndCBoYXZlIGFueSBkYXRhLCBzbyB3ZSBzZW5kIGEgZnJhbWUgb2Ygc2lsZW5jZS4KKyAqIFdlIGRvbid0IGhhdmUgYW55IGRhdGEsIHNvIHdlIHNlbmQgc2lsZW5jZS4KICAqLwogc3RhdGljIGludCBwcmVwYXJlX25vZGF0YV9wbGF5YmFja191cmIoc3RydWN0IHNuZF91c2Jfc3Vic3RyZWFtICpzdWJzLAogCQkJCSAgICAgICBzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lLApAQCAtNTM3LDEzICs1MzcsMTMgQEAKIAogCW9mZnMgPSAwOwogCXVyYi0+ZGV2ID0gY3R4LT5zdWJzLT5kZXY7Ci0JdXJiLT5udW1iZXJfb2ZfcGFja2V0cyA9IHN1YnMtPnBhY2tzX3Blcl9tczsKLQlmb3IgKGkgPSAwOyBpIDwgc3Vicy0+cGFja3NfcGVyX21zOyArK2kpIHsKKwlmb3IgKGkgPSAwOyBpIDwgY3R4LT5wYWNrZXRzOyArK2kpIHsKIAkJY291bnRzID0gc25kX3VzYl9hdWRpb19uZXh0X3BhY2tldF9zaXplKHN1YnMpOwogCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLm9mZnNldCA9IG9mZnMgKiBzdHJpZGU7CiAJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ubGVuZ3RoID0gY291bnRzICogc3RyaWRlOwogCQlvZmZzICs9IGNvdW50czsKIAl9CisJdXJiLT5udW1iZXJfb2ZfcGFja2V0cyA9IGN0eC0+cGFja2V0czsKIAl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBvZmZzICogc3RyaWRlOwogCW1lbXNldCh1cmItPnRyYW5zZmVyX2J1ZmZlciwKIAkgICAgICAgc3Vicy0+Y3VyX2F1ZGlvZm10LT5mb3JtYXQgPT0gU05EUlZfUENNX0ZPUk1BVF9VOCA/IDB4ODAgOiAwLApAQCAtMTAzNCw5ICsxMDM0LDkgQEAKIHN0YXRpYyBpbnQgaW5pdF9zdWJzdHJlYW1fdXJicyhzdHJ1Y3Qgc25kX3VzYl9zdWJzdHJlYW0gKnN1YnMsIHVuc2lnbmVkIGludCBwZXJpb2RfYnl0ZXMsCiAJCQkgICAgICAgdW5zaWduZWQgaW50IHJhdGUsIHVuc2lnbmVkIGludCBmcmFtZV9iaXRzKQogewotCXVuc2lnbmVkIGludCBtYXhzaXplLCBuLCBpOworCXVuc2lnbmVkIGludCBtYXhzaXplLCBpOwogCWludCBpc19wbGF5YmFjayA9IHN1YnMtPmRpcmVjdGlvbiA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLOwotCXVuc2lnbmVkIGludCBucGFja3NbTUFYX1VSQlNdLCB1cmJfcGFja3MsIHRvdGFsX3BhY2tzLCBwYWNrc19wZXJfbXM7CisJdW5zaWduZWQgaW50IHVyYl9wYWNrcywgdG90YWxfcGFja3MsIHBhY2tzX3Blcl9tczsKIAogCS8qIGNhbGN1bGF0ZSB0aGUgZnJlcXVlbmN5IGluIDE2LjE2IGZvcm1hdCAqLwogCWlmIChzbmRfdXNiX2dldF9zcGVlZChzdWJzLT5kZXYpID09IFVTQl9TUEVFRF9GVUxMKQpAQCAtMTA3MCw4ICsxMDcwLDcgQEAKIAlzdWJzLT5wYWNrc19wZXJfbXMgPSBwYWNrc19wZXJfbXM7CiAKIAlpZiAoaXNfcGxheWJhY2spIHsKLQkJdXJiX3BhY2tzID0gbnJwYWNrczsKLQkJdXJiX3BhY2tzID0gbWF4KHVyYl9wYWNrcywgKHVuc2lnbmVkIGludClNSU5fUEFDS1NfVVJCKTsKKwkJdXJiX3BhY2tzID0gbWF4KG5ycGFja3MsIDEpOwogCQl1cmJfcGFja3MgPSBtaW4odXJiX3BhY2tzLCAodW5zaWduZWQgaW50KU1BWF9QQUNLUyk7CiAJfSBlbHNlCiAJCXVyYl9wYWNrcyA9IDE7CkBAIC0xMDc5LDcgKzEwNzgsNyBAQAogCiAJLyogZGVjaWRlIGhvdyBtYW55IHBhY2tldHMgdG8gYmUgdXNlZCAqLwogCWlmIChpc19wbGF5YmFjaykgewotCQl1bnNpZ25lZCBpbnQgbWluc2l6ZTsKKwkJdW5zaWduZWQgaW50IG1pbnNpemUsIG1heHBhY2tzOwogCQkvKiBkZXRlcm1pbmUgaG93IHNtYWxsIGEgcGFja2V0IGNhbiBiZSAqLwogCQltaW5zaXplID0gKHN1YnMtPmZyZXFuID4+ICgxNiAtIHN1YnMtPmRhdGFpbnRlcnZhbCkpCiAJCQkgICogKGZyYW1lX2JpdHMgPj4gMyk7CkBAIC0xMDkyLDggKzEwOTEsMTMgQEAKIAkJdG90YWxfcGFja3MgPSAodG90YWxfcGFja3MgKyBwYWNrc19wZXJfbXMgLSAxKQogCQkJCSYgfihwYWNrc19wZXJfbXMgLSAxKTsKIAkJLyogd2UgbmVlZCBhdCBsZWFzdCB0d28gVVJCcyBmb3IgcXVldWVpbmcgKi8KLQkJaWYgKHRvdGFsX3BhY2tzIDwgMiAqIE1JTl9QQUNLU19VUkIgKiBwYWNrc19wZXJfbXMpCi0JCQl0b3RhbF9wYWNrcyA9IDIgKiBNSU5fUEFDS1NfVVJCICogcGFja3NfcGVyX21zOworCQlpZiAodG90YWxfcGFja3MgPCAyICogcGFja3NfcGVyX21zKSB7CisJCQl0b3RhbF9wYWNrcyA9IDIgKiBwYWNrc19wZXJfbXM7CisJCX0gZWxzZSB7CisJCQkvKiBhbmQgd2UgZG9uJ3Qgd2FudCB0b28gbG9uZyBhIHF1ZXVlIGVpdGhlciAqLworCQkJbWF4cGFja3MgPSBtYXgoTUFYX1FVRVVFICogcGFja3NfcGVyX21zLCB1cmJfcGFja3MgKiAyKTsKKwkJCXRvdGFsX3BhY2tzID0gbWluKHRvdGFsX3BhY2tzLCBtYXhwYWNrcyk7CisJCX0KIAl9IGVsc2UgewogCQl0b3RhbF9wYWNrcyA9IE1BWF9VUkJTICogdXJiX3BhY2tzOwogCX0KQEAgLTExMDIsMzEgKzExMDYsMTEgQEAKIAkJLyogdG9vIG11Y2guLi4gKi8KIAkJc3Vicy0+bnVyYnMgPSBNQVhfVVJCUzsKIAkJdG90YWxfcGFja3MgPSBNQVhfVVJCUyAqIHVyYl9wYWNrczsKLQl9Ci0JbiA9IHRvdGFsX3BhY2tzOwotCWZvciAoaSA9IDA7IGkgPCBzdWJzLT5udXJiczsgaSsrKSB7Ci0JCW5wYWNrc1tpXSA9IG4gPiB1cmJfcGFja3MgPyB1cmJfcGFja3MgOiBuOwotCQluIC09IHVyYl9wYWNrczsKLQl9Ci0JaWYgKHN1YnMtPm51cmJzIDw9IDEpIHsKKwl9IGVsc2UgaWYgKHN1YnMtPm51cmJzIDwgMikgewogCQkvKiB0b28gbGl0dGxlIC0gd2UgbmVlZCBhdCBsZWFzdCB0d28gcGFja2V0cwogCQkgKiB0byBlbnN1cmUgY29udGlndW91cyBwbGF5YmFjay9jYXB0dXJlCiAJCSAqLwogCQlzdWJzLT5udXJicyA9IDI7Ci0JCW5wYWNrc1swXSA9ICh0b3RhbF9wYWNrcyArIDEpIC8gMjsKLQkJbnBhY2tzWzFdID0gdG90YWxfcGFja3MgLSBucGFja3NbMF07Ci0JfSBlbHNlIGlmIChucGFja3Nbc3Vicy0+bnVyYnMtMV0gPCBNSU5fUEFDS1NfVVJCICogcGFja3NfcGVyX21zKSB7Ci0JCS8qIHRoZSBsYXN0IHBhY2tldCBpcyB0b28gc21hbGwuLiAqLwotCQlpZiAoc3Vicy0+bnVyYnMgPiAyKSB7Ci0JCQkvKiBtZXJnZSB0byB0aGUgZmlyc3Qgb25lICovCi0JCQlucGFja3NbMF0gKz0gbnBhY2tzW3N1YnMtPm51cmJzIC0gMV07Ci0JCQlzdWJzLT5udXJicy0tOwotCQl9IGVsc2UgewotCQkJLyogZGl2aWRlIHRvIHR3byAqLwotCQkJc3Vicy0+bnVyYnMgPSAyOwotCQkJbnBhY2tzWzBdID0gKHRvdGFsX3BhY2tzICsgMSkgLyAyOwotCQkJbnBhY2tzWzFdID0gdG90YWxfcGFja3MgLSBucGFja3NbMF07Ci0JCX0KIAl9CiAKIAkvKiBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBkYXRhIHVyYnMgKi8KQEAgLTExMzQsNyArMTExOCw4IEBACiAJCXN0cnVjdCBzbmRfdXJiX2N0eCAqdSA9ICZzdWJzLT5kYXRhdXJiW2ldOwogCQl1LT5pbmRleCA9IGk7CiAJCXUtPnN1YnMgPSBzdWJzOwotCQl1LT5wYWNrZXRzID0gbnBhY2tzW2ldOworCQl1LT5wYWNrZXRzID0gKGkgKyAxKSAqIHRvdGFsX3BhY2tzIC8gc3Vicy0+bnVyYnMKKwkJCS0gaSAqIHRvdGFsX3BhY2tzIC8gc3Vicy0+bnVyYnM7CiAJCXUtPmJ1ZmZlcl9zaXplID0gbWF4c2l6ZSAqIHUtPnBhY2tldHM7CiAJCWlmIChzdWJzLT5mbXRfdHlwZSA9PSBVU0JfRk9STUFUX1RZUEVfSUkpCiAJCQl1LT5wYWNrZXRzKys7IC8qIGZvciB0cmFuc2ZlciBkZWxpbWl0ZXIgKi8KQEAgLTEyOTIsMTQgKzEyNzcsMTQgQEAKIAkJaWYgKChlcnIgPSBzbmRfdXNiX2N0bF9tc2coZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwgU0VUX0NVUiwKIAkJCQkJICAgVVNCX1RZUEVfQ0xBU1N8VVNCX1JFQ0lQX0VORFBPSU5UfFVTQl9ESVJfT1VULAogCQkJCQkgICBTQU1QTElOR19GUkVRX0NPTlRST0wgPDwgOCwgZXAsIGRhdGEsIDMsIDEwMDApKSA8IDApIHsKLQkJCXNuZF9wcmludGsoS0VSTl9FUlIgIiVkOiVkOiVkOiBjYW5ub3Qgc2V0IGZyZXEgJWQgdG8gZXAgMHgleFxuIiwKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgIiVkOiVkOiVkOiBjYW5ub3Qgc2V0IGZyZXEgJWQgdG8gZXAgJSN4XG4iLAogCQkJCSAgIGRldi0+ZGV2bnVtLCBpZmFjZSwgZm10LT5hbHRzZXR0aW5nLCByYXRlLCBlcCk7CiAJCQlyZXR1cm4gZXJyOwogCQl9CiAJCWlmICgoZXJyID0gc25kX3VzYl9jdGxfbXNnKGRldiwgdXNiX3JjdmN0cmxwaXBlKGRldiwgMCksIEdFVF9DVVIsCiAJCQkJCSAgIFVTQl9UWVBFX0NMQVNTfFVTQl9SRUNJUF9FTkRQT0lOVHxVU0JfRElSX0lOLAogCQkJCQkgICBTQU1QTElOR19GUkVRX0NPTlRST0wgPDwgOCwgZXAsIGRhdGEsIDMsIDEwMDApKSA8IDApIHsKLQkJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HICIlZDolZDolZDogY2Fubm90IGdldCBmcmVxIGF0IGVwIDB4JXhcbiIsCisJCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORyAiJWQ6JWQ6JWQ6IGNhbm5vdCBnZXQgZnJlcSBhdCBlcCAlI3hcbiIsCiAJCQkJICAgZGV2LT5kZXZudW0sIGlmYWNlLCBmbXQtPmFsdHNldHRpbmcsIGVwKTsKIAkJCXJldHVybiAwOyAvKiBzb21lIGRldmljZXMgZG9uJ3Qgc3VwcG9ydCByZWFkaW5nICovCiAJCX0KQEAgLTE0MzEsOSArMTQxNiwxMSBAQAogCXN1YnMtPmN1cl9hdWRpb2ZtdCA9IGZtdDsKIAogI2lmIDAKLQlwcmludGsoInNldHRpbmcgZG9uZTogZm9ybWF0ID0gJWQsIHJhdGUgPSAlZC4uJWQsIGNoYW5uZWxzID0gJWRcbiIsCisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgInNldHRpbmcgZG9uZTogZm9ybWF0ID0gJWQsIHJhdGUgPSAlZC4uJWQsIGNoYW5uZWxzID0gJWRcbiIsCiAJICAgICAgIGZtdC0+Zm9ybWF0LCBmbXQtPnJhdGVfbWluLCBmbXQtPnJhdGVfbWF4LCBmbXQtPmNoYW5uZWxzKTsKLQlwcmludGsoIiAgZGF0YXBpcGUgPSAweCUweCwgc3luY3BpcGUgPSAweCUweFxuIiwKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAiICBkYXRhcGlwZSA9IDB4JTB4LCBzeW5jcGlwZSA9IDB4JTB4XG4iLAogCSAgICAgICBzdWJzLT5kYXRhcGlwZSwgc3Vicy0+c3luY3BpcGUpOwogI2VuZGlmCiAKQEAgLTE0NjgsNyArMTQ1NSw3IEBACiAJY2hhbm5lbHMgPSBwYXJhbXNfY2hhbm5lbHMoaHdfcGFyYW1zKTsKIAlmbXQgPSBmaW5kX2Zvcm1hdChzdWJzLCBmb3JtYXQsIHJhdGUsIGNoYW5uZWxzKTsKIAlpZiAoIWZtdCkgewotCQlzbmRfcHJpbnRkKEtFUk5fREVCVUcgImNhbm5vdCBzZXQgZm9ybWF0OiBmb3JtYXQgPSAweCV4LCByYXRlID0gJWQsIGNoYW5uZWxzID0gJWRcbiIsCisJCXNuZF9wcmludGQoS0VSTl9ERUJVRyAiY2Fubm90IHNldCBmb3JtYXQ6IGZvcm1hdCA9ICUjeCwgcmF0ZSA9ICVkLCBjaGFubmVscyA9ICVkXG4iLAogCQkJICAgZm9ybWF0LCByYXRlLCBjaGFubmVscyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTE3OTUsNyArMTc4Miw3IEBACiAJCQlpZiAocmF0ZXNbZi0+Zm9ybWF0XSAmJiByYXRlc1tmLT5mb3JtYXRdICE9IGYtPnJhdGVzKQogCQkJCWdvdG8gX19vdXQ7CiAJCX0KLQkJY2hhbm5lbHNbZi0+Zm9ybWF0XSB8PSAoMSA8PCBmLT5jaGFubmVscyk7CisJCWNoYW5uZWxzW2YtPmZvcm1hdF0gfD0gMSA8PCAoZi0+Y2hhbm5lbHMgLSAxKTsKIAkJcmF0ZXNbZi0+Zm9ybWF0XSB8PSBmLT5yYXRlczsKIAkJLyogbmVlZHMga25vdD8gKi8KIAkJaWYgKGYtPnJhdGVzICYgU05EUlZfUENNX1JBVEVfS05PVCkKQEAgLTE4MjIsNyArMTgwOSw3IEBACiAJCQljb250aW51ZTsKIAkJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKIAkJCWlmIChmLT5yYXRlcyAmICgxIDw8IGkpKQotCQkJCWNoYW5uZWxzW2ldIHw9ICgxIDw8IGYtPmNoYW5uZWxzKTsKKwkJCQljaGFubmVsc1tpXSB8PSAxIDw8IChmLT5jaGFubmVscyAtIDEpOwogCQl9CiAJfQogCWNtYXN0ZXIgPSAwOwpAQCAtMTkxOSw3ICsxOTA2LDcgQEAKIAkgKiBpbiB0aGUgY3VycmVudCBjb2RlIGFzc3VtZSB0aGUgMW1zIHBlcmlvZC4KIAkgKi8KIAlzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbWlubWF4KHJ1bnRpbWUsIFNORFJWX1BDTV9IV19QQVJBTV9QRVJJT0RfVElNRSwKLQkJCQkgICAgIDEwMDAgKiBNSU5fUEFDS1NfVVJCLAorCQkJCSAgICAgMTAwMCwKIAkJCQkgICAgIC8qKG5ycGFja3MgKiBNQVhfVVJCUykgKiAxMDAwKi8gVUlOVF9NQVgpOwogCiAJZXJyID0gY2hlY2tfaHdfcGFyYW1zX2NvbnZlbnRpb24oc3Vicyk7CkBAIC0yMTYwLDcgKzIxNDcsNyBAQAogCQlmcCA9IGxpc3RfZW50cnkocCwgc3RydWN0IGF1ZGlvZm9ybWF0LCBsaXN0KTsKIAkJc25kX2lwcmludGYoYnVmZmVyLCAiICBJbnRlcmZhY2UgJWRcbiIsIGZwLT5pZmFjZSk7CiAJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiAgICBBbHRzZXQgJWRcbiIsIGZwLT5hbHRzZXR0aW5nKTsKLQkJc25kX2lwcmludGYoYnVmZmVyLCAiICAgIEZvcm1hdDogMHgleFxuIiwgZnAtPmZvcm1hdCk7CisJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiAgICBGb3JtYXQ6ICUjeFxuIiwgZnAtPmZvcm1hdCk7CiAJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiAgICBDaGFubmVsczogJWRcbiIsIGZwLT5jaGFubmVscyk7CiAJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiAgICBFbmRwb2ludDogJWQgJXMgKCVzKVxuIiwKIAkJCSAgICBmcC0+ZW5kcG9pbnQgJiBVU0JfRU5EUE9JTlRfTlVNQkVSX01BU0ssCkBAIC0yMTgwLDcgKzIxNjcsNyBAQAogCQkJc25kX2lwcmludGYoYnVmZmVyLCAiXG4iKTsKIAkJfQogCQkvLyBzbmRfaXByaW50ZihidWZmZXIsICIgICAgTWF4IFBhY2tldCBTaXplID0gJWRcbiIsIGZwLT5tYXhwYWNrc2l6ZSk7Ci0JCS8vIHNuZF9pcHJpbnRmKGJ1ZmZlciwgIiAgICBFUCBBdHRyaWJ1dGUgPSAweCV4XG4iLCBmcC0+YXR0cmlidXRlcyk7CisJCS8vIHNuZF9pcHJpbnRmKGJ1ZmZlciwgIiAgICBFUCBBdHRyaWJ1dGUgPSAlI3hcbiIsIGZwLT5hdHRyaWJ1dGVzKTsKIAl9CiB9CiAKQEAgLTI2MjEsNyArMjYwOCw3IEBACiAJCWZwLT5mb3JtYXQgPSBTTkRSVl9QQ01fRk9STUFUX01QRUc7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXNuZF9wcmludGQoS0VSTl9JTkZPICIlZDoldTolZCA6IHVua25vd24gZm9ybWF0IHRhZyAweCV4IGlzIGRldGVjdGVkLiAgcHJvY2Vzc2VkIGFzIE1QRUcuXG4iLAorCQlzbmRfcHJpbnRkKEtFUk5fSU5GTyAiJWQ6JXU6JWQgOiB1bmtub3duIGZvcm1hdCB0YWcgJSN4IGlzIGRldGVjdGVkLiAgcHJvY2Vzc2VkIGFzIE1QRUcuXG4iLAogCQkJICAgY2hpcC0+ZGV2LT5kZXZudW0sIGZwLT5pZmFjZSwgZnAtPmFsdHNldHRpbmcsIGZvcm1hdCk7CiAJCWZwLT5mb3JtYXQgPSBTTkRSVl9QQ01fRk9STUFUX01QRUc7CiAJCWJyZWFrOwpAQCAtMjgxOSw3ICsyODA2LDcgQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJc25kX3ByaW50ZGQoS0VSTl9JTkZPICIlZDoldTolZDogYWRkIGF1ZGlvIGVuZHBvaW50IDB4JXhcbiIsIGRldi0+ZGV2bnVtLCBpZmFjZV9ubywgYWx0bm8sIGZwLT5lbmRwb2ludCk7CisJCXNuZF9wcmludGRkKEtFUk5fSU5GTyAiJWQ6JXU6JWQ6IGFkZCBhdWRpbyBlbmRwb2ludCAlI3hcbiIsIGRldi0+ZGV2bnVtLCBpZmFjZV9ubywgYWx0bm8sIGZwLT5lbmRwb2ludCk7CiAJCWVyciA9IGFkZF9hdWRpb19lbmRwb2ludChjaGlwLCBzdHJlYW0sIGZwKTsKIAkJaWYgKGVyciA8IDApIHsKIAkJCWtmcmVlKGZwLT5yYXRlX3RhYmxlKTsKQEAgLTM0NjYsMTAgKzM0NTMsMTAgQEAKIAkJcmV0dXJuIC1FTlhJTzsKIAl9CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2lkeF0sIGlkW2lkeF0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKSB7CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2lkeF0sIGlkW2lkeF0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAiY2Fubm90IGNyZWF0ZSBjYXJkIGluc3RhbmNlICVkXG4iLCBpZHgpOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0dXJuIGVycjsKIAl9CiAKIAljaGlwID0ga3phbGxvYyhzaXplb2YoKmNoaXApLCBHRlBfS0VSTkVMKTsKQEAgLTM3NjYsNyArMzc1Myw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHNuZF91c2JfYXVkaW9faW5pdCh2b2lkKQogewotCWlmIChucnBhY2tzIDwgTUlOX1BBQ0tTX1VSQiB8fCBucnBhY2tzID4gTUFYX1BBQ0tTKSB7CisJaWYgKG5ycGFja3MgPCAxIHx8IG5ycGFja3MgPiBNQVhfUEFDS1MpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiaW52YWxpZCBucnBhY2tzIHZhbHVlLlxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi91c2JtaXhlci5jIGIvc291bmQvdXNiL3VzYm1peGVyLmMKaW5kZXggMDAzOTdjOC4uZWNiNThlNyAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3VzYm1peGVyLmMKKysrIGIvc291bmQvdXNiL3VzYm1peGVyLmMKQEAgLTY2LDYgKzY2LDcgQEAKIAl7IFVTQl9JRCgweDA0MWUsIDB4MzAwMCksIDAsIDEsIDIsIDEsICAxOCwgMHgwMDEzIH0sIC8qIEV4dGlneSAgICAgICAqLwogCXsgVVNCX0lEKDB4MDQxZSwgMHgzMDIwKSwgMiwgMSwgNiwgNiwgIDE4LCAweDAwMTMgfSwgLyogQXVkaWd5IDIgTlggICovCiAJeyBVU0JfSUQoMHgwNDFlLCAweDMwNDApLCAyLCAyLCA2LCA2LCAgMiwgIDB4NmU5MSB9LCAvKiBMaXZlISAyNC1iaXQgKi8KKwl7IFVTQl9JRCgweDA0MWUsIDB4MzA0OCksIDIsIDIsIDYsIDYsICAyLCAgMHg2ZTkxIH0sIC8qIFRvc2hpYmEgU0IwNTAwICovCiB9OwogCiBzdHJ1Y3QgdXNiX21peGVyX2ludGVyZmFjZSB7CkBAIC03OCw3ICs3OSw2IEBACiAKIAkvKiBTb3VuZCBCbGFzdGVyIHJlbW90ZSBjb250cm9sIHN0dWZmICovCiAJY29uc3Qgc3RydWN0IHJjX2NvbmZpZyAqcmNfY2ZnOwotCXVuc2lnbmVkIGxvbmcgcmNfaHdkZXBfb3BlbjsKIAl1MzIgcmNfY29kZTsKIAl3YWl0X3F1ZXVlX2hlYWRfdCByY193YWl0cTsKIAlzdHJ1Y3QgdXJiICpyY191cmI7CkBAIC0xMTAsNiArMTEwLDggQEAKIAljb25zdCBzdHJ1Y3QgdXNibWl4X3NlbGVjdG9yX21hcCAqc2VsZWN0b3JfbWFwOwogfTsKIAorI2RlZmluZSBNQVhfQ0hBTk5FTFMJMTAJLyogbWF4IGxvZ2ljYWwgY2hhbm5lbHMgKi8KKwogc3RydWN0IHVzYl9taXhlcl9lbGVtX2luZm8gewogCXN0cnVjdCB1c2JfbWl4ZXJfaW50ZXJmYWNlICptaXhlcjsKIAlzdHJ1Y3QgdXNiX21peGVyX2VsZW1faW5mbyAqbmV4dF9pZF9lbGVtOyAvKiBsaXN0IG9mIGNvbnRyb2xzIHdpdGggc2FtZSBpZCAqLwpAQCAtMTIwLDYgKzEyMiw4IEBACiAJaW50IGNoYW5uZWxzOwogCWludCB2YWxfdHlwZTsKIAlpbnQgbWluLCBtYXgsIHJlczsKKwlpbnQgY2FjaGVkOworCWludCBjYWNoZV92YWxbTUFYX0NIQU5ORUxTXTsKIAl1OCBpbml0aWFsaXplZDsKIH07CiAKQEAgLTE4MSw4ICsxODUsNiBAQAogCVVTQl9QUk9DX0RDUl9SRUxFQVNFID0gNiwKIH07CiAKLSNkZWZpbmUgTUFYX0NIQU5ORUxTCTEwCS8qIG1heCBsb2dpY2FsIGNoYW5uZWxzICovCi0KIAogLyoKICAqIG1hbnVhbCBtYXBwaW5nIG9mIG1peGVyIG5hbWVzCkBAIC0yMTksNyArMjIxLDEwIEBACiAJZm9yIChwID0gc3RhdGUtPm1hcDsgcC0+aWQ7IHArKykgewogCQlpZiAocC0+aWQgPT0gdW5pdGlkICYmICEgcC0+bmFtZSAmJgogCQkgICAgKCEgY29udHJvbCB8fCAhIHAtPmNvbnRyb2wgfHwgY29udHJvbCA9PSBwLT5jb250cm9sKSkgewotCQkJLy8gcHJpbnRrKCJpZ25vcmVkIGNvbnRyb2wgJWQ6JWRcbiIsIHVuaXRpZCwgY29udHJvbCk7CisJCQkvKgorCQkJcHJpbnRrKEtFUk5fREVCVUcgImlnbm9yZWQgY29udHJvbCAlZDolZFxuIiwKKwkJCSAgICAgICB1bml0aWQsIGNvbnRyb2wpOworCQkJKi8KIAkJCXJldHVybiAxOwogCQl9CiAJfQpAQCAtMzc2LDExICszODEsMzUgQEAKIH0KIAogLyogY2hhbm5lbCA9IDA6IG1hc3RlciwgMSA9IGZpcnN0IGNoYW5uZWwgKi8KLXN0YXRpYyBpbmxpbmUgaW50IGdldF9jdXJfbWl4X3ZhbHVlKHN0cnVjdCB1c2JfbWl4ZXJfZWxlbV9pbmZvICpjdmFsLCBpbnQgY2hhbm5lbCwgaW50ICp2YWx1ZSkKK3N0YXRpYyBpbmxpbmUgaW50IGdldF9jdXJfbWl4X3JhdyhzdHJ1Y3QgdXNiX21peGVyX2VsZW1faW5mbyAqY3ZhbCwKKwkJCQkgIGludCBjaGFubmVsLCBpbnQgKnZhbHVlKQogewogCXJldHVybiBnZXRfY3RsX3ZhbHVlKGN2YWwsIEdFVF9DVVIsIChjdmFsLT5jb250cm9sIDw8IDgpIHwgY2hhbm5lbCwgdmFsdWUpOwogfQogCitzdGF0aWMgaW50IGdldF9jdXJfbWl4X3ZhbHVlKHN0cnVjdCB1c2JfbWl4ZXJfZWxlbV9pbmZvICpjdmFsLAorCQkJICAgICBpbnQgY2hhbm5lbCwgaW50IGluZGV4LCBpbnQgKnZhbHVlKQoreworCWludCBlcnI7CisKKwlpZiAoY3ZhbC0+Y2FjaGVkICYgKDEgPDwgY2hhbm5lbCkpIHsKKwkJKnZhbHVlID0gY3ZhbC0+Y2FjaGVfdmFsW2luZGV4XTsKKwkJcmV0dXJuIDA7CisJfQorCWVyciA9IGdldF9jdXJfbWl4X3JhdyhjdmFsLCBjaGFubmVsLCB2YWx1ZSk7CisJaWYgKGVyciA8IDApIHsKKwkJaWYgKCFjdmFsLT5taXhlci0+aWdub3JlX2N0bF9lcnJvcikKKwkJCXNuZF9wcmludGQoS0VSTl9FUlIgImNhbm5vdCBnZXQgY3VycmVudCB2YWx1ZSBmb3IgIgorCQkJCSAgICJjb250cm9sICVkIGNoICVkOiBlcnIgPSAlZFxuIiwKKwkJCQkgICBjdmFsLT5jb250cm9sLCBjaGFubmVsLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKwljdmFsLT5jYWNoZWQgfD0gMSA8PCBjaGFubmVsOworCWN2YWwtPmNhY2hlX3ZhbFtpbmRleF0gPSAqdmFsdWU7CisJcmV0dXJuIDA7Cit9CisKKwogLyoKICAqIHNldCBhIG1peGVyIHZhbHVlCiAgKi8KQEAgLTQxMiw5ICs0NDEsMTcgQEAKIAlyZXR1cm4gc2V0X2N0bF92YWx1ZShjdmFsLCBTRVRfQ1VSLCB2YWxpZHgsIHZhbHVlKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgc2V0X2N1cl9taXhfdmFsdWUoc3RydWN0IHVzYl9taXhlcl9lbGVtX2luZm8gKmN2YWwsIGludCBjaGFubmVsLCBpbnQgdmFsdWUpCitzdGF0aWMgaW50IHNldF9jdXJfbWl4X3ZhbHVlKHN0cnVjdCB1c2JfbWl4ZXJfZWxlbV9pbmZvICpjdmFsLCBpbnQgY2hhbm5lbCwKKwkJCSAgICAgaW50IGluZGV4LCBpbnQgdmFsdWUpCiB7Ci0JcmV0dXJuIHNldF9jdGxfdmFsdWUoY3ZhbCwgU0VUX0NVUiwgKGN2YWwtPmNvbnRyb2wgPDwgOCkgfCBjaGFubmVsLCB2YWx1ZSk7CisJaW50IGVycjsKKwllcnIgPSBzZXRfY3RsX3ZhbHVlKGN2YWwsIFNFVF9DVVIsIChjdmFsLT5jb250cm9sIDw8IDgpIHwgY2hhbm5lbCwKKwkJCSAgICB2YWx1ZSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJY3ZhbC0+Y2FjaGVkIHw9IDEgPDwgY2hhbm5lbDsKKwljdmFsLT5jYWNoZV92YWxbaW5kZXhdID0gdmFsdWU7CisJcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC03MTgsNyArNzU1LDcgQEAKIAkJaWYgKGN2YWwtPm1pbiArIGN2YWwtPnJlcyA8IGN2YWwtPm1heCkgewogCQkJaW50IGxhc3RfdmFsaWRfcmVzID0gY3ZhbC0+cmVzOwogCQkJaW50IHNhdmVkLCB0ZXN0LCBjaGVjazsKLQkJCWdldF9jdXJfbWl4X3ZhbHVlKGN2YWwsIG1pbmNobiwgJnNhdmVkKTsKKwkJCWdldF9jdXJfbWl4X3JhdyhjdmFsLCBtaW5jaG4sICZzYXZlZCk7CiAJCQlmb3IgKDs7KSB7CiAJCQkJdGVzdCA9IHNhdmVkOwogCQkJCWlmICh0ZXN0IDwgY3ZhbC0+bWF4KQpAQCAtNzI2LDggKzc2Myw4IEBACiAJCQkJZWxzZQogCQkJCQl0ZXN0IC09IGN2YWwtPnJlczsKIAkJCQlpZiAodGVzdCA8IGN2YWwtPm1pbiB8fCB0ZXN0ID4gY3ZhbC0+bWF4IHx8Ci0JCQkJICAgIHNldF9jdXJfbWl4X3ZhbHVlKGN2YWwsIG1pbmNobiwgdGVzdCkgfHwKLQkJCQkgICAgZ2V0X2N1cl9taXhfdmFsdWUoY3ZhbCwgbWluY2huLCAmY2hlY2spKSB7CisJCQkJICAgIHNldF9jdXJfbWl4X3ZhbHVlKGN2YWwsIG1pbmNobiwgMCwgdGVzdCkgfHwKKwkJCQkgICAgZ2V0X2N1cl9taXhfcmF3KGN2YWwsIG1pbmNobiwgJmNoZWNrKSkgewogCQkJCQljdmFsLT5yZXMgPSBsYXN0X3ZhbGlkX3JlczsKIAkJCQkJYnJlYWs7CiAJCQkJfQpAQCAtNzM1LDcgKzc3Miw3IEBACiAJCQkJCWJyZWFrOwogCQkJCWN2YWwtPnJlcyAqPSAyOwogCQkJfQotCQkJc2V0X2N1cl9taXhfdmFsdWUoY3ZhbCwgbWluY2huLCBzYXZlZCk7CisJCQlzZXRfY3VyX21peF92YWx1ZShjdmFsLCBtaW5jaG4sIDAsIHNhdmVkKTsKIAkJfQogCiAJCWN2YWwtPmluaXRpYWxpemVkID0gMTsKQEAgLTc3NSwzNSArODEyLDI1IEBACiAJc3RydWN0IHVzYl9taXhlcl9lbGVtX2luZm8gKmN2YWwgPSBrY29udHJvbC0+cHJpdmF0ZV9kYXRhOwogCWludCBjLCBjbnQsIHZhbCwgZXJyOwogCisJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBjdmFsLT5taW47CiAJaWYgKGN2YWwtPmNtYXNrKSB7CiAJCWNudCA9IDA7CiAJCWZvciAoYyA9IDA7IGMgPCBNQVhfQ0hBTk5FTFM7IGMrKykgewotCQkJaWYgKGN2YWwtPmNtYXNrICYgKDEgPDwgYykpIHsKLQkJCQllcnIgPSBnZXRfY3VyX21peF92YWx1ZShjdmFsLCBjICsgMSwgJnZhbCk7Ci0JCQkJaWYgKGVyciA8IDApIHsKLQkJCQkJaWYgKGN2YWwtPm1peGVyLT5pZ25vcmVfY3RsX2Vycm9yKSB7Ci0JCQkJCQl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IGN2YWwtPm1pbjsKLQkJCQkJCXJldHVybiAwOwotCQkJCQl9Ci0JCQkJCXNuZF9wcmludGQoS0VSTl9FUlIgImNhbm5vdCBnZXQgY3VycmVudCB2YWx1ZSBmb3IgY29udHJvbCAlZCBjaCAlZDogZXJyID0gJWRcbiIsIGN2YWwtPmNvbnRyb2wsIGMgKyAxLCBlcnIpOwotCQkJCQlyZXR1cm4gZXJyOwotCQkJCX0KLQkJCQl2YWwgPSBnZXRfcmVsYXRpdmVfdmFsdWUoY3ZhbCwgdmFsKTsKLQkJCQl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVtjbnRdID0gdmFsOwotCQkJCWNudCsrOwotCQkJfQorCQkJaWYgKCEoY3ZhbC0+Y21hc2sgJiAoMSA8PCBjKSkpCisJCQkJY29udGludWU7CisJCQllcnIgPSBnZXRfY3VyX21peF92YWx1ZShjdmFsLCBjICsgMSwgY250LCAmdmFsKTsKKwkJCWlmIChlcnIgPCAwKQorCQkJCXJldHVybiBjdmFsLT5taXhlci0+aWdub3JlX2N0bF9lcnJvciA/IDAgOiBlcnI7CisJCQl2YWwgPSBnZXRfcmVsYXRpdmVfdmFsdWUoY3ZhbCwgdmFsKTsKKwkJCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlW2NudF0gPSB2YWw7CisJCQljbnQrKzsKIAkJfQorCQlyZXR1cm4gMDsKIAl9IGVsc2UgewogCQkvKiBtYXN0ZXIgY2hhbm5lbCAqLwotCQllcnIgPSBnZXRfY3VyX21peF92YWx1ZShjdmFsLCAwLCAmdmFsKTsKLQkJaWYgKGVyciA8IDApIHsKLQkJCWlmIChjdmFsLT5taXhlci0+aWdub3JlX2N0bF9lcnJvcikgewotCQkJCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gY3ZhbC0+bWluOwotCQkJCXJldHVybiAwOwotCQkJfQotCQkJc25kX3ByaW50ZChLRVJOX0VSUiAiY2Fubm90IGdldCBjdXJyZW50IHZhbHVlIGZvciBjb250cm9sICVkIG1hc3RlciBjaDogZXJyID0gJWRcbiIsIGN2YWwtPmNvbnRyb2wsIGVycik7Ci0JCQlyZXR1cm4gZXJyOwotCQl9CisJCWVyciA9IGdldF9jdXJfbWl4X3ZhbHVlKGN2YWwsIDAsIDAsICZ2YWwpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBjdmFsLT5taXhlci0+aWdub3JlX2N0bF9lcnJvciA/IDAgOiBlcnI7CiAJCXZhbCA9IGdldF9yZWxhdGl2ZV92YWx1ZShjdmFsLCB2YWwpOwogCQl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IHZhbDsKIAl9CkBAIC04MjAsMzQgKzg0NywyOCBAQAogCWlmIChjdmFsLT5jbWFzaykgewogCQljbnQgPSAwOwogCQlmb3IgKGMgPSAwOyBjIDwgTUFYX0NIQU5ORUxTOyBjKyspIHsKLQkJCWlmIChjdmFsLT5jbWFzayAmICgxIDw8IGMpKSB7Ci0JCQkJZXJyID0gZ2V0X2N1cl9taXhfdmFsdWUoY3ZhbCwgYyArIDEsICZvdmFsKTsKLQkJCQlpZiAoZXJyIDwgMCkgewotCQkJCQlpZiAoY3ZhbC0+bWl4ZXItPmlnbm9yZV9jdGxfZXJyb3IpCi0JCQkJCQlyZXR1cm4gMDsKLQkJCQkJcmV0dXJuIGVycjsKLQkJCQl9Ci0JCQkJdmFsID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbY250XTsKLQkJCQl2YWwgPSBnZXRfYWJzX3ZhbHVlKGN2YWwsIHZhbCk7Ci0JCQkJaWYgKG92YWwgIT0gdmFsKSB7Ci0JCQkJCXNldF9jdXJfbWl4X3ZhbHVlKGN2YWwsIGMgKyAxLCB2YWwpOwotCQkJCQljaGFuZ2VkID0gMTsKLQkJCQl9Ci0JCQkJZ2V0X2N1cl9taXhfdmFsdWUoY3ZhbCwgYyArIDEsICZ2YWwpOwotCQkJCWNudCsrOworCQkJaWYgKCEoY3ZhbC0+Y21hc2sgJiAoMSA8PCBjKSkpCisJCQkJY29udGludWU7CisJCQllcnIgPSBnZXRfY3VyX21peF92YWx1ZShjdmFsLCBjICsgMSwgY250LCAmb3ZhbCk7CisJCQlpZiAoZXJyIDwgMCkKKwkJCQlyZXR1cm4gY3ZhbC0+bWl4ZXItPmlnbm9yZV9jdGxfZXJyb3IgPyAwIDogZXJyOworCQkJdmFsID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbY250XTsKKwkJCXZhbCA9IGdldF9hYnNfdmFsdWUoY3ZhbCwgdmFsKTsKKwkJCWlmIChvdmFsICE9IHZhbCkgeworCQkJCXNldF9jdXJfbWl4X3ZhbHVlKGN2YWwsIGMgKyAxLCBjbnQsIHZhbCk7CisJCQkJY2hhbmdlZCA9IDE7CiAJCQl9CisJCQljbnQrKzsKIAkJfQogCX0gZWxzZSB7CiAJCS8qIG1hc3RlciBjaGFubmVsICovCi0JCWVyciA9IGdldF9jdXJfbWl4X3ZhbHVlKGN2YWwsIDAsICZvdmFsKTsKLQkJaWYgKGVyciA8IDAgJiYgY3ZhbC0+bWl4ZXItPmlnbm9yZV9jdGxfZXJyb3IpCi0JCQlyZXR1cm4gMDsKKwkJZXJyID0gZ2V0X2N1cl9taXhfdmFsdWUoY3ZhbCwgMCwgMCwgJm92YWwpOwogCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7CisJCQlyZXR1cm4gY3ZhbC0+bWl4ZXItPmlnbm9yZV9jdGxfZXJyb3IgPyAwIDogZXJyOwogCQl2YWwgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXTsKIAkJdmFsID0gZ2V0X2Fic192YWx1ZShjdmFsLCB2YWwpOwogCQlpZiAodmFsICE9IG92YWwpIHsKLQkJCXNldF9jdXJfbWl4X3ZhbHVlKGN2YWwsIDAsIHZhbCk7CisJCQlzZXRfY3VyX21peF92YWx1ZShjdmFsLCAwLCAwLCB2YWwpOwogCQkJY2hhbmdlZCA9IDE7CiAJCX0KIAl9CkBAIC0xNzA2LDcgKzE3MjcsOCBAQAogCQlicmVhazsKIAkvKiBsaXZlMjRleHQ6IDQgPSBsaW5lLWluIGphY2sgKi8KIAljYXNlIDM6CS8qIGhwLW91dCBqYWNrIChtYXkgYWN0dWF0ZSBNdXRlKSAqLwotCQlpZiAobWl4ZXItPmNoaXAtPnVzYl9pZCA9PSBVU0JfSUQoMHgwNDFlLCAweDMwNDApKQorCQlpZiAobWl4ZXItPmNoaXAtPnVzYl9pZCA9PSBVU0JfSUQoMHgwNDFlLCAweDMwNDApIHx8CisJCSAgICBtaXhlci0+Y2hpcC0+dXNiX2lkID09IFVTQl9JRCgweDA0MWUsIDB4MzA0OCkpCiAJCQlzbmRfdXNiX21peGVyX25vdGlmeV9pZChtaXhlciwgbWl4ZXItPnJjX2NmZy0+bXV0ZV9taXhlcl9pZCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC0xNzk3LDI0ICsxODE5LDYgQEAKIAl3YWtlX3VwKCZtaXhlci0+cmNfd2FpdHEpOwogfQogCi1zdGF0aWMgaW50IHNuZF91c2Jfc2JyY19od2RlcF9vcGVuKHN0cnVjdCBzbmRfaHdkZXAgKmh3LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlzdHJ1Y3QgdXNiX21peGVyX2ludGVyZmFjZSAqbWl4ZXIgPSBody0+cHJpdmF0ZV9kYXRhOwotCi0JaWYgKHRlc3RfYW5kX3NldF9iaXQoMCwgJm1peGVyLT5yY19od2RlcF9vcGVuKSkKLQkJcmV0dXJuIC1FQlVTWTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzbmRfdXNiX3NicmNfaHdkZXBfcmVsZWFzZShzdHJ1Y3Qgc25kX2h3ZGVwICpodywgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0Jc3RydWN0IHVzYl9taXhlcl9pbnRlcmZhY2UgKm1peGVyID0gaHctPnByaXZhdGVfZGF0YTsKLQotCWNsZWFyX2JpdCgwLCAmbWl4ZXItPnJjX2h3ZGVwX29wZW4pOwotCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBsb25nIHNuZF91c2Jfc2JyY19od2RlcF9yZWFkKHN0cnVjdCBzbmRfaHdkZXAgKmh3LCBjaGFyIF9fdXNlciAqYnVmLAogCQkJCSAgICAgbG9uZyBjb3VudCwgbG9mZl90ICpvZmZzZXQpCiB7CkBAIC0xODY3LDkgKzE4NzEsOCBAQAogCWh3ZGVwLT5pZmFjZSA9IFNORFJWX0hXREVQX0lGQUNFX1NCX1JDOwogCWh3ZGVwLT5wcml2YXRlX2RhdGEgPSBtaXhlcjsKIAlod2RlcC0+b3BzLnJlYWQgPSBzbmRfdXNiX3NicmNfaHdkZXBfcmVhZDsKLQlod2RlcC0+b3BzLm9wZW4gPSBzbmRfdXNiX3NicmNfaHdkZXBfb3BlbjsKLQlod2RlcC0+b3BzLnJlbGVhc2UgPSBzbmRfdXNiX3NicmNfaHdkZXBfcmVsZWFzZTsKIAlod2RlcC0+b3BzLnBvbGwgPSBzbmRfdXNiX3NicmNfaHdkZXBfcG9sbDsKKwlod2RlcC0+ZXhjbHVzaXZlID0gMTsKIAogCW1peGVyLT5yY191cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOwogCWlmICghbWl4ZXItPnJjX3VyYikKQEAgLTE5NTYsOCArMTk1OSw5IEBACiAJaW50IGksIGVycjsKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNuZF9hdWRpZ3kybnhfY29udHJvbHMpOyArK2kpIHsKLQkJaWYgKGkgPiAxICYmICAvKiBMaXZlMjRleHQgaGFzIDIgTEVEcyBvbmx5ICovCi0JCQltaXhlci0+Y2hpcC0+dXNiX2lkID09IFVTQl9JRCgweDA0MWUsIDB4MzA0MCkpCisJCWlmIChpID4gMSAmJiAvKiBMaXZlMjRleHQgaGFzIDIgTEVEcyBvbmx5ICovCisJCQkobWl4ZXItPmNoaXAtPnVzYl9pZCA9PSBVU0JfSUQoMHgwNDFlLCAweDMwNDApIHx8CisJCQkgbWl4ZXItPmNoaXAtPnVzYl9pZCA9PSBVU0JfSUQoMHgwNDFlLCAweDMwNDgpKSkKIAkJCWJyZWFrOyAKIAkJZXJyID0gc25kX2N0bF9hZGQobWl4ZXItPmNoaXAtPmNhcmQsCiAJCQkJICBzbmRfY3RsX25ldzEoJnNuZF9hdWRpZ3kybnhfY29udHJvbHNbaV0sIG1peGVyKSk7CkBAIC0xOTk0LDcgKzE5OTgsOCBAQAogCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiVzIGphY2tzXG5cbiIsIG1peGVyLT5jaGlwLT5jYXJkLT5zaG9ydG5hbWUpOwogCWlmIChtaXhlci0+Y2hpcC0+dXNiX2lkID09IFVTQl9JRCgweDA0MWUsIDB4MzAyMCkpCiAJCWphY2tzID0gamFja3NfYXVkaWd5Mm54OwotCWVsc2UgaWYgKG1peGVyLT5jaGlwLT51c2JfaWQgPT0gVVNCX0lEKDB4MDQxZSwgMHgzMDQwKSkKKwllbHNlIGlmIChtaXhlci0+Y2hpcC0+dXNiX2lkID09IFVTQl9JRCgweDA0MWUsIDB4MzA0MCkgfHwKKwkJIG1peGVyLT5jaGlwLT51c2JfaWQgPT0gVVNCX0lEKDB4MDQxZSwgMHgzMDQ4KSkKIAkJamFja3MgPSBqYWNrc19saXZlMjRleHQ7CiAJZWxzZQogCQlyZXR1cm47CkBAIC0yMDQ0LDcgKzIwNDksOCBAQAogCQlnb3RvIF9lcnJvcjsKIAogCWlmIChtaXhlci0+Y2hpcC0+dXNiX2lkID09IFVTQl9JRCgweDA0MWUsIDB4MzAyMCkgfHwKLQkgICAgbWl4ZXItPmNoaXAtPnVzYl9pZCA9PSBVU0JfSUQoMHgwNDFlLCAweDMwNDApKSB7CisJICAgIG1peGVyLT5jaGlwLT51c2JfaWQgPT0gVVNCX0lEKDB4MDQxZSwgMHgzMDQwKSB8fAorCSAgICBtaXhlci0+Y2hpcC0+dXNiX2lkID09IFVTQl9JRCgweDA0MWUsIDB4MzA0OCkpIHsKIAkJc3RydWN0IHNuZF9pbmZvX2VudHJ5ICplbnRyeTsKIAogCQlpZiAoKGVyciA9IHNuZF9hdWRpZ3kybnhfY29udHJvbHNfY3JlYXRlKG1peGVyKSkgPCAwKQpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL3VzYm1peGVyX21hcHMuYyBiL3NvdW5kL3VzYi91c2JtaXhlcl9tYXBzLmMKaW5kZXggZDc1NWJlMC4uM2U1ZDY2YyAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3VzYm1peGVyX21hcHMuYworKysgYi9zb3VuZC91c2IvdXNibWl4ZXJfbWFwcy5jCkBAIC0yNjEsNiArMjYxLDIyIEBACiAJe30gLyogdGVybWluYXRvciAqLwogfTsKIAorc3RhdGljIHN0cnVjdCB1c2JtaXhfbmFtZV9tYXAgc2NyYXRjaF9saXZlX21hcFtdID0geworCS8qIDE6IElUIExpbmUgMSAoVVNCIHN0cmVhbWluZykgKi8KKwkvKiAyOiBPVCBMaW5lIDEgKFNwZWFrZXIpICovCisJLyogMzogSVQgTGluZSAxIChMaW5lIGNvbm5lY3RvcikgKi8KKwl7IDQsICJMaW5lIDEgSW4iIH0sIC8qIEZVICovCisJLyogNTogT1QgTGluZSAxIChVU0Igc3RyZWFtaW5nKSAqLworCS8qIDY6IElUIExpbmUgMiAoVVNCIHN0cmVhbWluZykgKi8KKwkvKiA3OiBPVCBMaW5lIDIgKFNwZWFrZXIpICovCisJLyogODogSVQgTGluZSAyIChMaW5lIGNvbm5lY3RvcikgKi8KKwl7IDksICJMaW5lIDIgSW4iIH0sIC8qIEZVICovCisJLyogMTA6IE9UIExpbmUgMiAoVVNCIHN0cmVhbWluZykgKi8KKwkvKiAxMTogSVQgTWljIChMaW5lIGNvbm5lY3RvcikgKi8KKwkvKiAxMjogT1QgTWljIChVU0Igc3RyZWFtaW5nKSAqLworCXsgMCB9IC8qIHRlcm1pbmF0b3IgKi8KK307CisKIC8qCiAgKiBDb250cm9sIG1hcCBlbnRyaWVzCiAgKi8KQEAgLTI4NSw2ICszMDEsMTEgQEAKIAkJLm1hcCA9IGxpdmUyNGV4dF9tYXAsCiAJfSwKIAl7CisJCS5pZCA9IFVTQl9JRCgweDA0MWUsIDB4MzA0OCksCisJCS5tYXAgPSBhdWRpZ3kybnhfbWFwLAorCQkuc2VsZWN0b3JfbWFwID0gYXVkaWd5Mm54X3NlbGVjdG9ycywKKwl9LAorCXsKIAkJLyogSGVyY3VsZXMgREogQ29uc29sZSAoV2luZG93cyBFZGl0aW9uKSAqLwogCQkuaWQgPSBVU0JfSUQoMHgwNmY4LCAweGIwMDApLAogCQkuaWdub3JlX2N0bF9lcnJvciA9IDEsCkBAIC0zMTEsNiArMzMyLDExIEBACiAJCS5pZCA9IFVTQl9JRCgweDBjY2QsIDB4MDAyOCksCiAJCS5tYXAgPSBhdXJlb25fNTFfMl9tYXAsCiAJfSwKKwl7CisJCS5pZCA9IFVTQl9JRCgweDEzZTUsIDB4MDAwMSksCisJCS5tYXAgPSBzY3JhdGNoX2xpdmVfbWFwLAorCQkuaWdub3JlX2N0bF9lcnJvciA9IDEsCisJfSwKIAl7IDAgfSAvKiB0ZXJtaW5hdG9yICovCiB9OwogCmRpZmYgLS1naXQgYS9zb3VuZC91c2IvdXNicXVpcmtzLmggYi9zb3VuZC91c2IvdXNicXVpcmtzLmgKaW5kZXggNWQ4ZWYwOS4uNjQ3ZWY1MCAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3VzYnF1aXJrcy5oCisrKyBiL3NvdW5kL3VzYi91c2JxdWlya3MuaApAQCAtMzksNiArMzksMTYgQEAKIAkuaWRQcm9kdWN0ID0gcHJvZCwgXAogCS5iSW50ZXJmYWNlQ2xhc3MgPSBVU0JfQ0xBU1NfVkVORE9SX1NQRUMKIAorLyogQ3JlYXRpdmUvVG9zaGliYSBNdWx0aW1lZGlhIENlbnRlciBTQi0wNTAwICovCit7CisJVVNCX0RFVklDRSgweDA0MWUsIDB4MzA0OCksCisJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICYgKGNvbnN0IHN0cnVjdCBzbmRfdXNiX2F1ZGlvX3F1aXJrKSB7CisJCS52ZW5kb3JfbmFtZSA9ICJUb3NoaWJhIiwKKwkJLnByb2R1Y3RfbmFtZSA9ICJTQi0wNTAwIiwKKwkJLmlmbnVtID0gUVVJUktfTk9fSU5URVJGQUNFCisJfQorfSwKKwogLyogQ3JlYXRpdmUvRS1NdSBkZXZpY2VzICovCiB7CiAJVVNCX0RFVklDRSgweDA0MWUsIDB4MzAxMCksCmRpZmYgLS1naXQgYS9zb3VuZC91c2IvdXN4MnkvdXMxMjJsLmMgYi9zb3VuZC91c2IvdXN4MnkvdXMxMjJsLmMKaW5kZXggNzNlNTlmNC4uOTgyNzZhYSAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3VzeDJ5L3VzMTIybC5jCisrKyBiL3NvdW5kL3VzYi91c3gyeS91czEyMmwuYwpAQCAtNDc4LDE5ICs0NzgsMjEgQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIHN0cnVjdCBzbmRfY2FyZCAqdXN4MnlfY3JlYXRlX2NhcmQoc3RydWN0IHVzYl9kZXZpY2UgKmRldmljZSkKK3N0YXRpYyBpbnQgdXN4MnlfY3JlYXRlX2NhcmQoc3RydWN0IHVzYl9kZXZpY2UgKmRldmljZSwgc3RydWN0IHNuZF9jYXJkICoqY2FyZHApCiB7CiAJaW50CQlkZXY7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOworCWludCBlcnI7CisKIAlmb3IgKGRldiA9IDA7IGRldiA8IFNORFJWX0NBUkRTOyArK2RldikKIAkJaWYgKGVuYWJsZVtkZXZdICYmICFzbmRfdXMxMjJsX2NhcmRfdXNlZFtkZXZdKQogCQkJYnJlYWs7CiAJaWYgKGRldiA+PSBTTkRSVl9DQVJEUykKLQkJcmV0dXJuIE5VTEw7Ci0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKLQkJCSAgICBzaXplb2Yoc3RydWN0IHVzMTIybCkpOwotCWlmICghY2FyZCkKLQkJcmV0dXJuIE5VTEw7CisJCXJldHVybiAtRU5PREVWOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKKwkJCSAgICAgIHNpemVvZihzdHJ1Y3QgdXMxMjJsKSwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCXNuZF91czEyMmxfY2FyZF91c2VkW1VTMTIyTChjYXJkKS0+Y2hpcC5pbmRleCA9IGRldl0gPSAxOwogCiAJVVMxMjJMKGNhcmQpLT5jaGlwLmRldiA9IGRldmljZTsKQEAgLTUwOSw0NiArNTExLDU3IEBACiAJCVVTMTIyTChjYXJkKS0+Y2hpcC5kZXYtPmRldm51bQogCQkpOwogCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgJmRldmljZS0+ZGV2KTsKLQlyZXR1cm4gY2FyZDsKKwkqY2FyZHAgPSBjYXJkOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCAqdXMxMjJsX3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKLQkJCSAgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICpkZXZpY2VfaWQpCitzdGF0aWMgaW50IHVzMTIybF91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQkgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmRldmljZV9pZCwKKwkJCSAgICBzdHJ1Y3Qgc25kX2NhcmQgKipjYXJkcCkKIHsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2aWNlID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKLQlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSB1c3gyeV9jcmVhdGVfY2FyZChkZXZpY2UpOworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKKwlpbnQgZXJyOwogCi0JaWYgKCFjYXJkKQotCQlyZXR1cm4gTlVMTDsKKwllcnIgPSB1c3gyeV9jcmVhdGVfY2FyZChkZXZpY2UsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAotCWlmICghdXMxMjJsX2NyZWF0ZV9jYXJkKGNhcmQpIHx8Ci0JICAgIHNuZF9jYXJkX3JlZ2lzdGVyKGNhcmQpIDwgMCkgeworCWlmICghdXMxMjJsX2NyZWF0ZV9jYXJkKGNhcmQpKSB7CiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JCXJldHVybiBOVUxMOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwllcnIgPSBzbmRfY2FyZF9yZWdpc3RlcihjYXJkKTsKKwlpZiAoZXJyIDwgMCkgeworCQlzbmRfY2FyZF9mcmVlKGNhcmQpOworCQlyZXR1cm4gZXJyOwogCX0KIAogCXVzYl9nZXRfZGV2KGRldmljZSk7Ci0JcmV0dXJuIGNhcmQ7CisJKmNhcmRwID0gY2FyZDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBzbmRfdXMxMjJsX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAogCQkJICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKIHsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CisJaW50IGVycjsKKwogCXNuZF9wcmludGRkKEtFUk5fREVCVUciJXA6JWlcbiIsCiAJCSAgICBpbnRmLCBpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyKTsKIAlpZiAoaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlciAhPSAxKQogCQlyZXR1cm4gMDsKIAotCWNhcmQgPSB1czEyMmxfdXNiX3Byb2JlKHVzYl9nZXRfaW50ZihpbnRmKSwgaWQpOwotCi0JaWYgKGNhcmQpIHsKLQkJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBjYXJkKTsKLQkJcmV0dXJuIDA7CisJZXJyID0gdXMxMjJsX3VzYl9wcm9iZSh1c2JfZ2V0X2ludGYoaW50ZiksIGlkLCAmY2FyZCk7CisJaWYgKGVyciA8IDApIHsKKwkJdXNiX3B1dF9pbnRmKGludGYpOworCQlyZXR1cm4gZXJyOwogCX0KIAotCXVzYl9wdXRfaW50ZihpbnRmKTsKLQlyZXR1cm4gLUVJTzsKKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIGNhcmQpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBzbmRfdXMxMjJsX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCmRpZmYgLS1naXQgYS9zb3VuZC91c2IvdXN4MnkvdXNYMllod2RlcC5jIGIvc291bmQvdXNiL3VzeDJ5L3VzWDJZaHdkZXAuYwppbmRleCAxNTU4YTVjLi40YWY4NzQwIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvdXN4MnkvdXNYMllod2RlcC5jCisrKyBiL3NvdW5kL3VzYi91c3gyeS91c1gyWWh3ZGVwLmMKQEAgLTMwLDkgKzMwLDYgQEAKICNpbmNsdWRlICJ1c2J1c3gyeS5oIgogI2luY2x1ZGUgInVzWDJZaHdkZXAuaCIKIAotaW50IHVzWDJZX2h3ZGVwX3BjbV9uZXcoc3RydWN0IHNuZF9jYXJkICpjYXJkKTsKLQotCiBzdGF0aWMgaW50IHNuZF91czQyOGN0bHNfdm1fZmF1bHQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICphcmVhLAogCQkJCSAgc3RydWN0IHZtX2ZhdWx0ICp2bWYpCiB7CkBAIC0xMDYsMTYgKzEwMyw2IEBACiB9CiAKIAotc3RhdGljIGludCBzbmRfdXNYMllfaHdkZXBfb3BlbihzdHJ1Y3Qgc25kX2h3ZGVwICpodywgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc25kX3VzWDJZX2h3ZGVwX3JlbGVhc2Uoc3RydWN0IHNuZF9od2RlcCAqaHcsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IHNuZF91c1gyWV9od2RlcF9kc3Bfc3RhdHVzKHN0cnVjdCBzbmRfaHdkZXAgKmh3LAogCQkJCSAgICAgIHN0cnVjdCBzbmRfaHdkZXBfZHNwX3N0YXR1cyAqaW5mbykKIHsKQEAgLTI2Nyw4ICsyNTQsNiBAQAogCiAJaHctPmlmYWNlID0gU05EUlZfSFdERVBfSUZBQ0VfVVNYMlk7CiAJaHctPnByaXZhdGVfZGF0YSA9IHVzWDJZKGNhcmQpOwotCWh3LT5vcHMub3BlbiA9IHNuZF91c1gyWV9od2RlcF9vcGVuOwotCWh3LT5vcHMucmVsZWFzZSA9IHNuZF91c1gyWV9od2RlcF9yZWxlYXNlOwogCWh3LT5vcHMuZHNwX3N0YXR1cyA9IHNuZF91c1gyWV9od2RlcF9kc3Bfc3RhdHVzOwogCWh3LT5vcHMuZHNwX2xvYWQgPSBzbmRfdXNYMllfaHdkZXBfZHNwX2xvYWQ7CiAJaHctPm9wcy5tbWFwID0gc25kX3VzNDI4Y3Rsc19tbWFwOwpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL3VzeDJ5L3VzYl9zdHJlYW0uYyBiL3NvdW5kL3VzYi91c3gyeS91c2Jfc3RyZWFtLmMKaW5kZXggNzBiOTYzNS4uMjQzOTNkYSAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3VzeDJ5L3VzYl9zdHJlYW0uYworKysgYi9zb3VuZC91c2IvdXN4MnkvdXNiX3N0cmVhbS5jCkBAIC01NTcsNyArNTU3LDcgQEAKIAkJcy0+aWRsZV9pbnNpemUgLT0gbWF4X2RpZmYgLSBtYXhfZGlmZl8wOwogCQlzLT5pZGxlX2luc2l6ZSArPSB1cmJfc2l6ZSAtIHMtPnBlcmlvZF9zaXplOwogCQlpZiAocy0+aWRsZV9pbnNpemUgPCAwKSB7Ci0JCQlzbmRfcHJpbnRrKCIlaSAlaSAlaVxuIiwKKwkJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HICIlaSAlaSAlaVxuIiwKIAkJCQkgICBzLT5pZGxlX2luc2l6ZSwgdXJiX3NpemUsIHMtPnBlcmlvZF9zaXplKTsKIAkJCXJldHVybjsKIAkJfSBlbHNlIGlmIChzLT5pZGxlX2luc2l6ZSA9PSAwKSB7CmRpZmYgLS1naXQgYS9zb3VuZC91c2IvdXN4MnkvdXNidXN4MnkuYyBiL3NvdW5kL3VzYi91c3gyeS91c2J1c3gyeS5jCmluZGV4IDExNjM5YmQuLjVjZTBkYTIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi91c3gyeS91c2J1c3gyeS5jCisrKyBiL3NvdW5kL3VzYi91c3gyeS91c2J1c3gyeS5jCkBAIC0yMjcsOSArMjI3LDkgQEAKIAkKIAlpZiAodXNYMlktPlVTMDQpIHsKIAkJaWYgKDAgPT0gdXNYMlktPlVTMDQtPnN1Ym1pdHRlZCkKLQkJCWRvCisJCQlkbyB7CiAJCQkJZXJyID0gdXNiX3N1Ym1pdF91cmIodXNYMlktPlVTMDQtPnVyYlt1c1gyWS0+VVMwNC0+c3VibWl0dGVkKytdLCBHRlBfQVRPTUlDKTsKLQkJCXdoaWxlICghZXJyICYmIHVzWDJZLT5VUzA0LT5zdWJtaXR0ZWQgPCB1c1gyWS0+VVMwNC0+bGVuKTsKKwkJCX0gd2hpbGUgKCFlcnIgJiYgdXNYMlktPlVTMDQtPnN1Ym1pdHRlZCA8IHVzWDJZLT5VUzA0LT5sZW4pOwogCX0gZWxzZQogCQlpZiAodXM0MjhjdGxzICYmIHVzNDI4Y3Rscy0+cDRvdXRMYXN0ID49IDAgJiYgdXM0MjhjdGxzLT5wNG91dExhc3QgPCBOX3VzNDI4X3A0b3V0X0JVRlMpIHsKIAkJCWlmICh1czQyOGN0bHMtPnA0b3V0TGFzdCAhPSB1czQyOGN0bHMtPnA0b3V0U2VudCkgewpAQCAtMzMzLDE4ICszMzMsMjEgQEAKIAl7IC8qIHRlcm1pbmF0b3IgKi8gfQogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfY2FyZCAqdXNYMllfY3JlYXRlX2NhcmQoc3RydWN0IHVzYl9kZXZpY2UgKmRldmljZSkKK3N0YXRpYyBpbnQgdXNYMllfY3JlYXRlX2NhcmQoc3RydWN0IHVzYl9kZXZpY2UgKmRldmljZSwgc3RydWN0IHNuZF9jYXJkICoqY2FyZHApCiB7CiAJaW50CQlkZXY7CiAJc3RydWN0IHNuZF9jYXJkICoJY2FyZDsKKwlpbnQgZXJyOworCiAJZm9yIChkZXYgPSAwOyBkZXYgPCBTTkRSVl9DQVJEUzsgKytkZXYpCiAJCWlmIChlbmFibGVbZGV2XSAmJiAhc25kX3VzWDJZX2NhcmRfdXNlZFtkZXZdKQogCQkJYnJlYWs7CiAJaWYgKGRldiA+PSBTTkRSVl9DQVJEUykKLQkJcmV0dXJuIE5VTEw7Ci0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgc2l6ZW9mKHN0cnVjdCB1c1gyWWRldikpOwotCWlmICghY2FyZCkKLQkJcmV0dXJuIE5VTEw7CisJCXJldHVybiAtRU5PREVWOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKKwkJCSAgICAgIHNpemVvZihzdHJ1Y3QgdXNYMllkZXYpLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAJc25kX3VzWDJZX2NhcmRfdXNlZFt1c1gyWShjYXJkKS0+Y2hpcC5pbmRleCA9IGRldl0gPSAxOwogCWNhcmQtPnByaXZhdGVfZnJlZSA9IHNuZF91c1gyWV9jYXJkX3ByaXZhdGVfZnJlZTsKIAl1c1gyWShjYXJkKS0+Y2hpcC5kZXYgPSBkZXZpY2U7CkBAIC0zNjIsMjYgKzM2NSwzNiBAQAogCQl1c1gyWShjYXJkKS0+Y2hpcC5kZXYtPmJ1cy0+YnVzbnVtLCB1c1gyWShjYXJkKS0+Y2hpcC5kZXYtPmRldm51bQogCQkpOwogCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgJmRldmljZS0+ZGV2KTsKLQlyZXR1cm4gY2FyZDsKKwkqY2FyZHAgPSBjYXJkOworCXJldHVybiAwOwogfQogCiAKLXN0YXRpYyB2b2lkICp1c1gyWV91c2JfcHJvYmUoc3RydWN0IHVzYl9kZXZpY2UgKmRldmljZSwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICpkZXZpY2VfaWQpCitzdGF0aWMgaW50IHVzWDJZX3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2RldmljZSAqZGV2aWNlLAorCQkJICAgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQkgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqZGV2aWNlX2lkLAorCQkJICAgc3RydWN0IHNuZF9jYXJkICoqY2FyZHApCiB7CiAJaW50CQllcnI7CiAJc3RydWN0IHNuZF9jYXJkICoJY2FyZDsKKworCSpjYXJkcCA9IE5VTEw7CiAJaWYgKGxlMTZfdG9fY3B1KGRldmljZS0+ZGVzY3JpcHRvci5pZFZlbmRvcikgIT0gMHgxNjA0IHx8CiAJICAgIChsZTE2X3RvX2NwdShkZXZpY2UtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSAhPSBVU0JfSURfVVMxMjIgJiYKIAkgICAgIGxlMTZfdG9fY3B1KGRldmljZS0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpICE9IFVTQl9JRF9VUzIyNCAmJgotCSAgICAgbGUxNl90b19jcHUoZGV2aWNlLT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgIT0gVVNCX0lEX1VTNDI4KSB8fAotCSAgICAhKGNhcmQgPSB1c1gyWV9jcmVhdGVfY2FyZChkZXZpY2UpKSkKLQkJcmV0dXJuIE5VTEw7CisJICAgICBsZTE2X3RvX2NwdShkZXZpY2UtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSAhPSBVU0JfSURfVVM0MjgpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWVyciA9IHVzWDJZX2NyZWF0ZV9jYXJkKGRldmljZSwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCWlmICgoZXJyID0gdXNYMllfaHdkZXBfbmV3KGNhcmQsIGRldmljZSkpIDwgMCAgfHwKIAkgICAgKGVyciA9IHNuZF9jYXJkX3JlZ2lzdGVyKGNhcmQpKSA8IDApIHsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKLQkJcmV0dXJuIE5VTEw7CisJCXJldHVybiBlcnI7CiAJfQotCXJldHVybiBjYXJkOworCSpjYXJkcCA9IGNhcmQ7CisJcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC0zODksMTMgKzQwMiwxNCBAQAogICovCiBzdGF0aWMgaW50IHNuZF91c1gyWV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQogewotCXZvaWQgKmNoaXA7Ci0JY2hpcCA9IHVzWDJZX3VzYl9wcm9iZShpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpLCBpbnRmLCBpZCk7Ci0JaWYgKGNoaXApIHsKLQkJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBjaGlwKTsKLQkJcmV0dXJuIDA7Ci0JfSBlbHNlCi0JCXJldHVybiAtRUlPOworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKKwlpbnQgZXJyOworCisJZXJyID0gdXNYMllfdXNiX3Byb2JlKGludGVyZmFjZV90b191c2JkZXYoaW50ZiksIGludGYsIGlkLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJZGV2X3NldF9kcnZkYXRhKCZpbnRmLT5kZXYsIGNhcmQpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBzbmRfdXNYMllfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi91c3gyeS91c3gyeWh3ZGVwcGNtLmggYi9zb3VuZC91c2IvdXN4MnkvdXN4Mnlod2RlcHBjbS5oCmluZGV4IGMzMzgyZmQuLjljNGZiODQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi91c3gyeS91c3gyeWh3ZGVwcGNtLmgKKysrIGIvc291bmQvdXNiL3VzeDJ5L3VzeDJ5aHdkZXBwY20uaApAQCAtMTgsMyArMTgsNSBAQAogCXZvbGF0aWxlIHVuc2lnbmVkIGNhcHR1cmVkX2lzb19mcmFtZXM7CiAJaW50IGNhcHR1cmVfaXNvX3N0YXJ0OwogfTsKKworaW50IHVzWDJZX2h3ZGVwX3BjbV9uZXcoc3RydWN0IHNuZF9jYXJkICpjYXJkKTsKZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2lvYXBpYy5jIGIvdmlydC9rdm0vaW9hcGljLmMKaW5kZXggMjNiODFjZi4uYzNiOTlkZSAxMDA2NDQKLS0tIGEvdmlydC9rdm0vaW9hcGljLmMKKysrIGIvdmlydC9rdm0vaW9hcGljLmMKQEAgLTgzLDI0ICs4MywyOCBAQAogCXJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyB2b2lkIGlvYXBpY19zZXJ2aWNlKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIHVuc2lnbmVkIGludCBpZHgpCitzdGF0aWMgaW50IGlvYXBpY19zZXJ2aWNlKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIHVuc2lnbmVkIGludCBpZHgpCiB7CiAJdW5pb24gaW9hcGljX3JlZGlyX2VudHJ5ICpwZW50OworCWludCBpbmplY3RlZCA9IC0xOwogCiAJcGVudCA9ICZpb2FwaWMtPnJlZGlydGJsW2lkeF07CiAKIAlpZiAoIXBlbnQtPmZpZWxkcy5tYXNrKSB7Ci0JCWludCBpbmplY3RlZCA9IGlvYXBpY19kZWxpdmVyKGlvYXBpYywgaWR4KTsKKwkJaW5qZWN0ZWQgPSBpb2FwaWNfZGVsaXZlcihpb2FwaWMsIGlkeCk7CiAJCWlmIChpbmplY3RlZCAmJiBwZW50LT5maWVsZHMudHJpZ19tb2RlID09IElPQVBJQ19MRVZFTF9UUklHKQogCQkJcGVudC0+ZmllbGRzLnJlbW90ZV9pcnIgPSAxOwogCX0KIAlpZiAoIXBlbnQtPmZpZWxkcy50cmlnX21vZGUpCiAJCWlvYXBpYy0+aXJyICY9IH4oMSA8PCBpZHgpOworCisJcmV0dXJuIGluamVjdGVkOwogfQogCiBzdGF0aWMgdm9pZCBpb2FwaWNfd3JpdGVfaW5kaXJlY3Qoc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgdTMyIHZhbCkKIHsKIAl1bnNpZ25lZCBpbmRleDsKKwlib29sIG1hc2tfYmVmb3JlLCBtYXNrX2FmdGVyOwogCiAJc3dpdGNoIChpb2FwaWMtPmlvcmVnc2VsKSB7CiAJY2FzZSBJT0FQSUNfUkVHX1ZFUlNJT046CkBAIC0xMjAsNiArMTI0LDcgQEAKIAkJaW9hcGljX2RlYnVnKCJjaGFuZ2UgcmVkaXIgaW5kZXggJXggdmFsICV4XG4iLCBpbmRleCwgdmFsKTsKIAkJaWYgKGluZGV4ID49IElPQVBJQ19OVU1fUElOUykKIAkJCXJldHVybjsKKwkJbWFza19iZWZvcmUgPSBpb2FwaWMtPnJlZGlydGJsW2luZGV4XS5maWVsZHMubWFzazsKIAkJaWYgKGlvYXBpYy0+aW9yZWdzZWwgJiAxKSB7CiAJCQlpb2FwaWMtPnJlZGlydGJsW2luZGV4XS5iaXRzICY9IDB4ZmZmZmZmZmY7CiAJCQlpb2FwaWMtPnJlZGlydGJsW2luZGV4XS5iaXRzIHw9ICh1NjQpIHZhbCA8PCAzMjsKQEAgLTEyOCw2ICsxMzMsOSBAQAogCQkJaW9hcGljLT5yZWRpcnRibFtpbmRleF0uYml0cyB8PSAodTMyKSB2YWw7CiAJCQlpb2FwaWMtPnJlZGlydGJsW2luZGV4XS5maWVsZHMucmVtb3RlX2lyciA9IDA7CiAJCX0KKwkJbWFza19hZnRlciA9IGlvYXBpYy0+cmVkaXJ0YmxbaW5kZXhdLmZpZWxkcy5tYXNrOworCQlpZiAobWFza19iZWZvcmUgIT0gbWFza19hZnRlcikKKwkJCWt2bV9maXJlX21hc2tfbm90aWZpZXJzKGlvYXBpYy0+a3ZtLCBpbmRleCwgbWFza19hZnRlcik7CiAJCWlmIChpb2FwaWMtPmlyciAmICgxIDw8IGluZGV4KSkKIAkJCWlvYXBpY19zZXJ2aWNlKGlvYXBpYywgaW5kZXgpOwogCQlicmVhazsKQEAgLTIwMiw3ICsyMTAsNyBAQAogCXU4IHRyaWdfbW9kZSA9IGlvYXBpYy0+cmVkaXJ0YmxbaXJxXS5maWVsZHMudHJpZ19tb2RlOwogCXUzMiBkZWxpdmVyX2JpdG1hc2s7CiAJc3RydWN0IGt2bV92Y3B1ICp2Y3B1OwotCWludCB2Y3B1X2lkLCByID0gMDsKKwlpbnQgdmNwdV9pZCwgciA9IC0xOwogCiAJaW9hcGljX2RlYnVnKCJkZXN0PSV4IGRlc3RfbW9kZT0leCBkZWxpdmVyeV9tb2RlPSV4ICIKIAkJICAgICAidmVjdG9yPSV4IHRyaWdfbW9kZT0leFxuIiwKQEAgLTI0Miw3ICsyNTAsOSBAQAogCQkJZGVsaXZlcl9iaXRtYXNrICY9IH4oMSA8PCB2Y3B1X2lkKTsKIAkJCXZjcHUgPSBpb2FwaWMtPmt2bS0+dmNwdXNbdmNwdV9pZF07CiAJCQlpZiAodmNwdSkgewotCQkJCXIgPSBpb2FwaWNfaW5qX2lycShpb2FwaWMsIHZjcHUsIHZlY3RvciwKKwkJCQlpZiAociA8IDApCisJCQkJCXIgPSAwOworCQkJCXIgKz0gaW9hcGljX2lual9pcnEoaW9hcGljLCB2Y3B1LCB2ZWN0b3IsCiAJCQkJCSAgICAgICB0cmlnX21vZGUsIGRlbGl2ZXJ5X21vZGUpOwogCQkJfQogCQl9CkBAIC0yNTMsOCArMjYzLDEwIEBACiAJCQkJY29udGludWU7CiAJCQlkZWxpdmVyX2JpdG1hc2sgJj0gfigxIDw8IHZjcHVfaWQpOwogCQkJdmNwdSA9IGlvYXBpYy0+a3ZtLT52Y3B1c1t2Y3B1X2lkXTsKLQkJCWlmICh2Y3B1KQorCQkJaWYgKHZjcHUpIHsKIAkJCQlpb2FwaWNfaW5qX25taSh2Y3B1KTsKKwkJCQlyID0gMTsKKwkJCX0KIAkJCWVsc2UKIAkJCQlpb2FwaWNfZGVidWcoIk5NSSB0byB2Y3B1ICVkIGZhaWxlZFxuIiwKIAkJCQkJCXZjcHUtPnZjcHVfaWQpOwpAQCAtMjY4LDExICsyODAsMTIgQEAKIAlyZXR1cm4gcjsKIH0KIAotdm9pZCBrdm1faW9hcGljX3NldF9pcnEoc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgaW50IGlycSwgaW50IGxldmVsKQoraW50IGt2bV9pb2FwaWNfc2V0X2lycShzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCBpbnQgaXJxLCBpbnQgbGV2ZWwpCiB7CiAJdTMyIG9sZF9pcnIgPSBpb2FwaWMtPmlycjsKIAl1MzIgbWFzayA9IDEgPDwgaXJxOwogCXVuaW9uIGlvYXBpY19yZWRpcl9lbnRyeSBlbnRyeTsKKwlpbnQgcmV0ID0gMTsKIAogCWlmIChpcnEgPj0gMCAmJiBpcnEgPCBJT0FQSUNfTlVNX1BJTlMpIHsKIAkJZW50cnkgPSBpb2FwaWMtPnJlZGlydGJsW2lycV07CkBAIC0yODMsMjUgKzI5NiwyNiBAQAogCQkJaW9hcGljLT5pcnIgfD0gbWFzazsKIAkJCWlmICgoIWVudHJ5LmZpZWxkcy50cmlnX21vZGUgJiYgb2xkX2lyciAhPSBpb2FwaWMtPmlycikKIAkJCSAgICB8fCAhZW50cnkuZmllbGRzLnJlbW90ZV9pcnIpCi0JCQkJaW9hcGljX3NlcnZpY2UoaW9hcGljLCBpcnEpOworCQkJCXJldCA9IGlvYXBpY19zZXJ2aWNlKGlvYXBpYywgaXJxKTsKIAkJfQogCX0KKwlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBfX2t2bV9pb2FwaWNfdXBkYXRlX2VvaShzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCBpbnQgZ3NpLAorc3RhdGljIHZvaWQgX19rdm1faW9hcGljX3VwZGF0ZV9lb2koc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgaW50IHBpbiwKIAkJCQkgICAgaW50IHRyaWdnZXJfbW9kZSkKIHsKIAl1bmlvbiBpb2FwaWNfcmVkaXJfZW50cnkgKmVudDsKIAotCWVudCA9ICZpb2FwaWMtPnJlZGlydGJsW2dzaV07CisJZW50ID0gJmlvYXBpYy0+cmVkaXJ0YmxbcGluXTsKIAotCWt2bV9ub3RpZnlfYWNrZWRfaXJxKGlvYXBpYy0+a3ZtLCBnc2kpOworCWt2bV9ub3RpZnlfYWNrZWRfaXJxKGlvYXBpYy0+a3ZtLCBLVk1fSVJRQ0hJUF9JT0FQSUMsIHBpbik7CiAKIAlpZiAodHJpZ2dlcl9tb2RlID09IElPQVBJQ19MRVZFTF9UUklHKSB7CiAJCUFTU0VSVChlbnQtPmZpZWxkcy50cmlnX21vZGUgPT0gSU9BUElDX0xFVkVMX1RSSUcpOwogCQllbnQtPmZpZWxkcy5yZW1vdGVfaXJyID0gMDsKLQkJaWYgKCFlbnQtPmZpZWxkcy5tYXNrICYmIChpb2FwaWMtPmlyciAmICgxIDw8IGdzaSkpKQotCQkJaW9hcGljX3NlcnZpY2UoaW9hcGljLCBnc2kpOworCQlpZiAoIWVudC0+ZmllbGRzLm1hc2sgJiYgKGlvYXBpYy0+aXJyICYgKDEgPDwgcGluKSkpCisJCQlpb2FwaWNfc2VydmljZShpb2FwaWMsIHBpbik7CiAJfQogfQogCkBAIC00MjYsMyArNDQwLDQgQEAKIAlrdm1faW9fYnVzX3JlZ2lzdGVyX2Rldigma3ZtLT5tbWlvX2J1cywgJmlvYXBpYy0+ZGV2KTsKIAlyZXR1cm4gMDsKIH0KKwpkaWZmIC0tZ2l0IGEvdmlydC9rdm0vaW9hcGljLmggYi92aXJ0L2t2bS9pb2FwaWMuaAppbmRleCA0OWM5NTgxLi5hMzRiZDVlIDEwMDY0NAotLS0gYS92aXJ0L2t2bS9pb2FwaWMuaAorKysgYi92aXJ0L2t2bS9pb2FwaWMuaApAQCAtODMsNyArODMsNyBAQAogCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGJpdG1hcCk7CiB2b2lkIGt2bV9pb2FwaWNfdXBkYXRlX2VvaShzdHJ1Y3Qga3ZtICprdm0sIGludCB2ZWN0b3IsIGludCB0cmlnZ2VyX21vZGUpOwogaW50IGt2bV9pb2FwaWNfaW5pdChzdHJ1Y3Qga3ZtICprdm0pOwotdm9pZCBrdm1faW9hcGljX3NldF9pcnEoc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgaW50IGlycSwgaW50IGxldmVsKTsKK2ludCBrdm1faW9hcGljX3NldF9pcnEoc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgaW50IGlycSwgaW50IGxldmVsKTsKIHZvaWQga3ZtX2lvYXBpY19yZXNldChzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljKTsKIHUzMiBrdm1faW9hcGljX2dldF9kZWxpdmVyeV9iaXRtYXNrKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIHU4IGRlc3QsCiAJCQkJdTggZGVzdF9tb2RlKTsKZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2lycV9jb21tLmMgYi92aXJ0L2t2bS9pcnFfY29tbS5jCmluZGV4IGFhNWQxZTUuLjg2NGFjNTQgMTAwNjQ0Ci0tLSBhL3ZpcnQva3ZtL2lycV9jb21tLmMKKysrIGIvdmlydC9rdm0vaXJxX2NvbW0uYwpAQCAtMjAsMzUgKzIwLDEzMiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9rdm1faG9zdC5oPgorCisjaW5jbHVkZSA8YXNtL21zaWRlZi5oPgorCiAjaW5jbHVkZSAiaXJxLmgiCiAKICNpbmNsdWRlICJpb2FwaWMuaCIKIAotLyogVGhpcyBzaG91bGQgYmUgY2FsbGVkIHdpdGggdGhlIGt2bS0+bG9jayBtdXRleCBoZWxkICovCi12b2lkIGt2bV9zZXRfaXJxKHN0cnVjdCBrdm0gKmt2bSwgaW50IGlycV9zb3VyY2VfaWQsIGludCBpcnEsIGludCBsZXZlbCkKK3N0YXRpYyBpbnQga3ZtX3NldF9waWNfaXJxKHN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplLAorCQkJICAgc3RydWN0IGt2bSAqa3ZtLCBpbnQgbGV2ZWwpCiB7Ci0JdW5zaWduZWQgbG9uZyAqaXJxX3N0YXRlID0gKHVuc2lnbmVkIGxvbmcgKikma3ZtLT5hcmNoLmlycV9zdGF0ZXNbaXJxXTsKKyNpZmRlZiBDT05GSUdfWDg2CisJcmV0dXJuIGt2bV9waWNfc2V0X2lycShwaWNfaXJxY2hpcChrdm0pLCBlLT5pcnFjaGlwLnBpbiwgbGV2ZWwpOworI2Vsc2UKKwlyZXR1cm4gLTE7CisjZW5kaWYKK30KIAotCS8qIExvZ2ljYWwgT1IgZm9yIGxldmVsIHRyaWcgaW50ZXJydXB0ICovCi0JaWYgKGxldmVsKQotCQlzZXRfYml0KGlycV9zb3VyY2VfaWQsIGlycV9zdGF0ZSk7Ci0JZWxzZQotCQljbGVhcl9iaXQoaXJxX3NvdXJjZV9pZCwgaXJxX3N0YXRlKTsKK3N0YXRpYyBpbnQga3ZtX3NldF9pb2FwaWNfaXJxKHN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplLAorCQkJICAgICAgc3RydWN0IGt2bSAqa3ZtLCBpbnQgbGV2ZWwpCit7CisJcmV0dXJuIGt2bV9pb2FwaWNfc2V0X2lycShrdm0tPmFyY2gudmlvYXBpYywgZS0+aXJxY2hpcC5waW4sIGxldmVsKTsKK30KKworc3RhdGljIGludCBrdm1fc2V0X21zaShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSwKKwkJICAgICAgIHN0cnVjdCBrdm0gKmt2bSwgaW50IGxldmVsKQoreworCWludCB2Y3B1X2lkLCByID0gLTE7CisJc3RydWN0IGt2bV92Y3B1ICp2Y3B1OworCXN0cnVjdCBrdm1faW9hcGljICppb2FwaWMgPSBpb2FwaWNfaXJxY2hpcChrdm0pOworCWludCBkZXN0X2lkID0gKGUtPm1zaS5hZGRyZXNzX2xvICYgTVNJX0FERFJfREVTVF9JRF9NQVNLKQorCQkJPj4gTVNJX0FERFJfREVTVF9JRF9TSElGVDsKKwlpbnQgdmVjdG9yID0gKGUtPm1zaS5kYXRhICYgTVNJX0RBVEFfVkVDVE9SX01BU0spCisJCQk+PiBNU0lfREFUQV9WRUNUT1JfU0hJRlQ7CisJaW50IGRlc3RfbW9kZSA9IHRlc3RfYml0KE1TSV9BRERSX0RFU1RfTU9ERV9TSElGVCwKKwkJCQkodW5zaWduZWQgbG9uZyAqKSZlLT5tc2kuYWRkcmVzc19sbyk7CisJaW50IHRyaWdfbW9kZSA9IHRlc3RfYml0KE1TSV9EQVRBX1RSSUdHRVJfU0hJRlQsCisJCQkJKHVuc2lnbmVkIGxvbmcgKikmZS0+bXNpLmRhdGEpOworCWludCBkZWxpdmVyeV9tb2RlID0gdGVzdF9iaXQoTVNJX0RBVEFfREVMSVZFUllfTU9ERV9TSElGVCwKKwkJCQkodW5zaWduZWQgbG9uZyAqKSZlLT5tc2kuZGF0YSk7CisJdTMyIGRlbGl2ZXJfYml0bWFzazsKKworCUJVR19PTighaW9hcGljKTsKKworCWRlbGl2ZXJfYml0bWFzayA9IGt2bV9pb2FwaWNfZ2V0X2RlbGl2ZXJ5X2JpdG1hc2soaW9hcGljLAorCQkJCWRlc3RfaWQsIGRlc3RfbW9kZSk7CisJLyogSU9BUElDIGRlbGl2ZXJ5IG1vZGUgdmFsdWUgaXMgdGhlIHNhbWUgYXMgTVNJIGhlcmUgKi8KKwlzd2l0Y2ggKGRlbGl2ZXJ5X21vZGUpIHsKKwljYXNlIElPQVBJQ19MT1dFU1RfUFJJT1JJVFk6CisJCXZjcHUgPSBrdm1fZ2V0X2xvd2VzdF9wcmlvX3ZjcHUoaW9hcGljLT5rdm0sIHZlY3RvciwKKwkJCQlkZWxpdmVyX2JpdG1hc2spOworCQlpZiAodmNwdSAhPSBOVUxMKQorCQkJciA9IGt2bV9hcGljX3NldF9pcnEodmNwdSwgdmVjdG9yLCB0cmlnX21vZGUpOworCQllbHNlCisJCQlwcmludGsoS0VSTl9JTkZPICJrdm06IG51bGwgbG93ZXN0IHByaW9yaXR5IHZjcHUhXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBJT0FQSUNfRklYRUQ6CisJCWZvciAodmNwdV9pZCA9IDA7IGRlbGl2ZXJfYml0bWFzayAhPSAwOyB2Y3B1X2lkKyspIHsKKwkJCWlmICghKGRlbGl2ZXJfYml0bWFzayAmICgxIDw8IHZjcHVfaWQpKSkKKwkJCQljb250aW51ZTsKKwkJCWRlbGl2ZXJfYml0bWFzayAmPSB+KDEgPDwgdmNwdV9pZCk7CisJCQl2Y3B1ID0gaW9hcGljLT5rdm0tPnZjcHVzW3ZjcHVfaWRdOworCQkJaWYgKHZjcHUpIHsKKwkJCQlpZiAociA8IDApCisJCQkJCXIgPSAwOworCQkJCXIgKz0ga3ZtX2FwaWNfc2V0X2lycSh2Y3B1LCB2ZWN0b3IsIHRyaWdfbW9kZSk7CisJCQl9CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCXJldHVybiByOworfQorCisvKiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgd2l0aCB0aGUga3ZtLT5sb2NrIG11dGV4IGhlbGQKKyAqIFJldHVybiB2YWx1ZToKKyAqICA8IDAgICBJbnRlcnJ1cHQgd2FzIGlnbm9yZWQgKG1hc2tlZCBvciBub3QgZGVsaXZlcmVkIGZvciBvdGhlciByZWFzb25zKQorICogID0gMCAgIEludGVycnVwdCB3YXMgY29hbGVzY2VkIChwcmV2aW91cyBpcnEgaXMgc3RpbGwgcGVuZGluZykKKyAqICA+IDAgICBOdW1iZXIgb2YgQ1BVcyBpbnRlcnJ1cHQgd2FzIGRlbGl2ZXJlZCB0bworICovCitpbnQga3ZtX3NldF9pcnEoc3RydWN0IGt2bSAqa3ZtLCBpbnQgaXJxX3NvdXJjZV9pZCwgaW50IGlycSwgaW50IGxldmVsKQoreworCXN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplOworCXVuc2lnbmVkIGxvbmcgKmlycV9zdGF0ZSwgc2lnX2xldmVsOworCWludCByZXQgPSAtMTsKKworCWlmIChpcnEgPCBLVk1fSU9BUElDX05VTV9QSU5TKSB7CisJCWlycV9zdGF0ZSA9ICh1bnNpZ25lZCBsb25nICopJmt2bS0+YXJjaC5pcnFfc3RhdGVzW2lycV07CisKKwkJLyogTG9naWNhbCBPUiBmb3IgbGV2ZWwgdHJpZyBpbnRlcnJ1cHQgKi8KKwkJaWYgKGxldmVsKQorCQkJc2V0X2JpdChpcnFfc291cmNlX2lkLCBpcnFfc3RhdGUpOworCQllbHNlCisJCQljbGVhcl9iaXQoaXJxX3NvdXJjZV9pZCwgaXJxX3N0YXRlKTsKKwkJc2lnX2xldmVsID0gISEoKmlycV9zdGF0ZSk7CisJfSBlbHNlIC8qIERlYWwgd2l0aCBNU0kvTVNJLVggKi8KKwkJc2lnX2xldmVsID0gMTsKIAogCS8qIE5vdCBwb3NzaWJsZSB0byBkZXRlY3QgaWYgdGhlIGd1ZXN0IHVzZXMgdGhlIFBJQyBvciB0aGUKIAkgKiBJT0FQSUMuICBTbyBzZXQgdGhlIGJpdCBpbiBib3RoLiBUaGUgZ3Vlc3Qgd2lsbCBpZ25vcmUKIAkgKiB3cml0ZXMgdG8gdGhlIHVudXNlZCBvbmUuCiAJICovCi0Ja3ZtX2lvYXBpY19zZXRfaXJxKGt2bS0+YXJjaC52aW9hcGljLCBpcnEsICEhKCppcnFfc3RhdGUpKTsKLSNpZmRlZiBDT05GSUdfWDg2Ci0Ja3ZtX3BpY19zZXRfaXJxKHBpY19pcnFjaGlwKGt2bSksIGlycSwgISEoKmlycV9zdGF0ZSkpOwotI2VuZGlmCisJbGlzdF9mb3JfZWFjaF9lbnRyeShlLCAma3ZtLT5pcnFfcm91dGluZywgbGluaykKKwkJaWYgKGUtPmdzaSA9PSBpcnEpIHsKKwkJCWludCByID0gZS0+c2V0KGUsIGt2bSwgc2lnX2xldmVsKTsKKwkJCWlmIChyIDwgMCkKKwkJCQljb250aW51ZTsKKworCQkJcmV0ID0gciArICgocmV0IDwgMCkgPyAwIDogcmV0KTsKKwkJfQorCXJldHVybiByZXQ7CiB9CiAKLXZvaWQga3ZtX25vdGlmeV9hY2tlZF9pcnEoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBnc2kpCit2b2lkIGt2bV9ub3RpZnlfYWNrZWRfaXJxKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaXJxY2hpcCwgdW5zaWduZWQgcGluKQogeworCXN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplOwogCXN0cnVjdCBrdm1faXJxX2Fja19ub3RpZmllciAqa2lhbjsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbjsKKwl1bnNpZ25lZCBnc2kgPSBwaW47CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGUsICZrdm0tPmlycV9yb3V0aW5nLCBsaW5rKQorCQlpZiAoZS0+aXJxY2hpcC5pcnFjaGlwID09IGlycWNoaXAgJiYKKwkJICAgIGUtPmlycWNoaXAucGluID09IHBpbikgeworCQkJZ3NpID0gZS0+Z3NpOworCQkJYnJlYWs7CisJCX0KIAogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGtpYW4sIG4sICZrdm0tPmFyY2guaXJxX2Fja19ub3RpZmllcl9saXN0LCBsaW5rKQogCQlpZiAoa2lhbi0+Z3NpID09IGdzaSkKQEAgLTk5LDMgKzE5NiwxNzcgQEAKIAkJY2xlYXJfYml0KGlycV9zb3VyY2VfaWQsICZrdm0tPmFyY2guaXJxX3N0YXRlc1tpXSk7CiAJY2xlYXJfYml0KGlycV9zb3VyY2VfaWQsICZrdm0tPmFyY2guaXJxX3NvdXJjZXNfYml0bWFwKTsKIH0KKwordm9pZCBrdm1fcmVnaXN0ZXJfaXJxX21hc2tfbm90aWZpZXIoc3RydWN0IGt2bSAqa3ZtLCBpbnQgaXJxLAorCQkJCSAgICBzdHJ1Y3Qga3ZtX2lycV9tYXNrX25vdGlmaWVyICpraW1uKQoreworCWtpbW4tPmlycSA9IGlycTsKKwlobGlzdF9hZGRfaGVhZCgma2ltbi0+bGluaywgJmt2bS0+bWFza19ub3RpZmllcl9saXN0KTsKK30KKwordm9pZCBrdm1fdW5yZWdpc3Rlcl9pcnFfbWFza19ub3RpZmllcihzdHJ1Y3Qga3ZtICprdm0sIGludCBpcnEsCisJCQkJICAgICAgc3RydWN0IGt2bV9pcnFfbWFza19ub3RpZmllciAqa2ltbikKK3sKKwlobGlzdF9kZWwoJmtpbW4tPmxpbmspOworfQorCit2b2lkIGt2bV9maXJlX21hc2tfbm90aWZpZXJzKHN0cnVjdCBrdm0gKmt2bSwgaW50IGlycSwgYm9vbCBtYXNrKQoreworCXN0cnVjdCBrdm1faXJxX21hc2tfbm90aWZpZXIgKmtpbW47CisJc3RydWN0IGhsaXN0X25vZGUgKm47CisKKwlobGlzdF9mb3JfZWFjaF9lbnRyeShraW1uLCBuLCAma3ZtLT5tYXNrX25vdGlmaWVyX2xpc3QsIGxpbmspCisJCWlmIChraW1uLT5pcnEgPT0gaXJxKQorCQkJa2ltbi0+ZnVuYyhraW1uLCBtYXNrKTsKK30KKworc3RhdGljIHZvaWQgX19rdm1fZnJlZV9pcnFfcm91dGluZyhzdHJ1Y3QgbGlzdF9oZWFkICppcnFfcm91dGluZykKK3sKKwlzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSwgKm47CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZSwgbiwgaXJxX3JvdXRpbmcsIGxpbmspCisJCWtmcmVlKGUpOworfQorCit2b2lkIGt2bV9mcmVlX2lycV9yb3V0aW5nKHN0cnVjdCBrdm0gKmt2bSkKK3sKKwlfX2t2bV9mcmVlX2lycV9yb3V0aW5nKCZrdm0tPmlycV9yb3V0aW5nKTsKK30KKworc3RhdGljIGludCBzZXR1cF9yb3V0aW5nX2VudHJ5KHN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBrdm1faXJxX3JvdXRpbmdfZW50cnkgKnVlKQoreworCWludCByID0gLUVJTlZBTDsKKwlpbnQgZGVsdGE7CisKKwllLT5nc2kgPSB1ZS0+Z3NpOworCXN3aXRjaCAodWUtPnR5cGUpIHsKKwljYXNlIEtWTV9JUlFfUk9VVElOR19JUlFDSElQOgorCQlkZWx0YSA9IDA7CisJCXN3aXRjaCAodWUtPnUuaXJxY2hpcC5pcnFjaGlwKSB7CisJCWNhc2UgS1ZNX0lSUUNISVBfUElDX01BU1RFUjoKKwkJCWUtPnNldCA9IGt2bV9zZXRfcGljX2lycTsKKwkJCWJyZWFrOworCQljYXNlIEtWTV9JUlFDSElQX1BJQ19TTEFWRToKKwkJCWUtPnNldCA9IGt2bV9zZXRfcGljX2lycTsKKwkJCWRlbHRhID0gODsKKwkJCWJyZWFrOworCQljYXNlIEtWTV9JUlFDSElQX0lPQVBJQzoKKwkJCQllLT5zZXQgPSBrdm1fc2V0X2lvYXBpY19pcnE7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWdvdG8gb3V0OworCQl9CisJCWUtPmlycWNoaXAuaXJxY2hpcCA9IHVlLT51LmlycWNoaXAuaXJxY2hpcDsKKwkJZS0+aXJxY2hpcC5waW4gPSB1ZS0+dS5pcnFjaGlwLnBpbiArIGRlbHRhOworCQlicmVhazsKKwljYXNlIEtWTV9JUlFfUk9VVElOR19NU0k6CisJCWUtPnNldCA9IGt2bV9zZXRfbXNpOworCQllLT5tc2kuYWRkcmVzc19sbyA9IHVlLT51Lm1zaS5hZGRyZXNzX2xvOworCQllLT5tc2kuYWRkcmVzc19oaSA9IHVlLT51Lm1zaS5hZGRyZXNzX2hpOworCQllLT5tc2kuZGF0YSA9IHVlLT51Lm1zaS5kYXRhOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlnb3RvIG91dDsKKwl9CisJciA9IDA7CitvdXQ6CisJcmV0dXJuIHI7Cit9CisKKworaW50IGt2bV9zZXRfaXJxX3JvdXRpbmcoc3RydWN0IGt2bSAqa3ZtLAorCQkJY29uc3Qgc3RydWN0IGt2bV9pcnFfcm91dGluZ19lbnRyeSAqdWUsCisJCQl1bnNpZ25lZCBuciwKKwkJCXVuc2lnbmVkIGZsYWdzKQoreworCXN0cnVjdCBsaXN0X2hlYWQgaXJxX2xpc3QgPSBMSVNUX0hFQURfSU5JVChpcnFfbGlzdCk7CisJc3RydWN0IGxpc3RfaGVhZCB0bXAgPSBMSVNUX0hFQURfSU5JVCh0bXApOworCXN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplID0gTlVMTDsKKwl1bnNpZ25lZCBpOworCWludCByOworCisJZm9yIChpID0gMDsgaSA8IG5yOyArK2kpIHsKKwkJciA9IC1FSU5WQUw7CisJCWlmICh1ZS0+Z3NpID49IEtWTV9NQVhfSVJRX1JPVVRFUykKKwkJCWdvdG8gb3V0OworCQlpZiAodWUtPmZsYWdzKQorCQkJZ290byBvdXQ7CisJCXIgPSAtRU5PTUVNOworCQllID0ga3phbGxvYyhzaXplb2YoKmUpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFlKQorCQkJZ290byBvdXQ7CisJCXIgPSBzZXR1cF9yb3V0aW5nX2VudHJ5KGUsIHVlKTsKKwkJaWYgKHIpCisJCQlnb3RvIG91dDsKKwkJKyt1ZTsKKwkJbGlzdF9hZGQoJmUtPmxpbmssICZpcnFfbGlzdCk7CisJCWUgPSBOVUxMOworCX0KKworCW11dGV4X2xvY2soJmt2bS0+bG9jayk7CisJbGlzdF9zcGxpY2UoJmt2bS0+aXJxX3JvdXRpbmcsICZ0bXApOworCUlOSVRfTElTVF9IRUFEKCZrdm0tPmlycV9yb3V0aW5nKTsKKwlsaXN0X3NwbGljZSgmaXJxX2xpc3QsICZrdm0tPmlycV9yb3V0aW5nKTsKKwlJTklUX0xJU1RfSEVBRCgmaXJxX2xpc3QpOworCWxpc3Rfc3BsaWNlKCZ0bXAsICZpcnFfbGlzdCk7CisJbXV0ZXhfdW5sb2NrKCZrdm0tPmxvY2spOworCisJciA9IDA7CisKK291dDoKKwlrZnJlZShlKTsKKwlfX2t2bV9mcmVlX2lycV9yb3V0aW5nKCZpcnFfbGlzdCk7CisJcmV0dXJuIHI7Cit9CisKKyNkZWZpbmUgSU9BUElDX1JPVVRJTkdfRU5UUlkoaXJxKSBcCisJeyAuZ3NpID0gaXJxLCAudHlwZSA9IEtWTV9JUlFfUk9VVElOR19JUlFDSElQLAlcCisJICAudS5pcnFjaGlwLmlycWNoaXAgPSBLVk1fSVJRQ0hJUF9JT0FQSUMsIC51LmlycWNoaXAucGluID0gKGlycSkgfQorI2RlZmluZSBST1VUSU5HX0VOVFJZMShpcnEpIElPQVBJQ19ST1VUSU5HX0VOVFJZKGlycSkKKworI2lmZGVmIENPTkZJR19YODYKKyMgIGRlZmluZSBQSUNfUk9VVElOR19FTlRSWShpcnEpIFwKKwl7IC5nc2kgPSBpcnEsIC50eXBlID0gS1ZNX0lSUV9ST1VUSU5HX0lSUUNISVAsCVwKKwkgIC51LmlycWNoaXAuaXJxY2hpcCA9IFNFTEVDVF9QSUMoaXJxKSwgLnUuaXJxY2hpcC5waW4gPSAoaXJxKSAlIDggfQorIyAgZGVmaW5lIFJPVVRJTkdfRU5UUlkyKGlycSkgXAorCUlPQVBJQ19ST1VUSU5HX0VOVFJZKGlycSksIFBJQ19ST1VUSU5HX0VOVFJZKGlycSkKKyNlbHNlCisjICBkZWZpbmUgUk9VVElOR19FTlRSWTIoaXJxKSBcCisJSU9BUElDX1JPVVRJTkdfRU5UUlkoaXJxKQorI2VuZGlmCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX2VudHJ5IGRlZmF1bHRfcm91dGluZ1tdID0geworCVJPVVRJTkdfRU5UUlkyKDApLCBST1VUSU5HX0VOVFJZMigxKSwKKwlST1VUSU5HX0VOVFJZMigyKSwgUk9VVElOR19FTlRSWTIoMyksCisJUk9VVElOR19FTlRSWTIoNCksIFJPVVRJTkdfRU5UUlkyKDUpLAorCVJPVVRJTkdfRU5UUlkyKDYpLCBST1VUSU5HX0VOVFJZMig3KSwKKwlST1VUSU5HX0VOVFJZMig4KSwgUk9VVElOR19FTlRSWTIoOSksCisJUk9VVElOR19FTlRSWTIoMTApLCBST1VUSU5HX0VOVFJZMigxMSksCisJUk9VVElOR19FTlRSWTIoMTIpLCBST1VUSU5HX0VOVFJZMigxMyksCisJUk9VVElOR19FTlRSWTIoMTQpLCBST1VUSU5HX0VOVFJZMigxNSksCisJUk9VVElOR19FTlRSWTEoMTYpLCBST1VUSU5HX0VOVFJZMSgxNyksCisJUk9VVElOR19FTlRSWTEoMTgpLCBST1VUSU5HX0VOVFJZMSgxOSksCisJUk9VVElOR19FTlRSWTEoMjApLCBST1VUSU5HX0VOVFJZMSgyMSksCisJUk9VVElOR19FTlRSWTEoMjIpLCBST1VUSU5HX0VOVFJZMSgyMyksCisjaWZkZWYgQ09ORklHX0lBNjQKKwlST1VUSU5HX0VOVFJZMSgyNCksIFJPVVRJTkdfRU5UUlkxKDI1KSwKKwlST1VUSU5HX0VOVFJZMSgyNiksIFJPVVRJTkdfRU5UUlkxKDI3KSwKKwlST1VUSU5HX0VOVFJZMSgyOCksIFJPVVRJTkdfRU5UUlkxKDI5KSwKKwlST1VUSU5HX0VOVFJZMSgzMCksIFJPVVRJTkdfRU5UUlkxKDMxKSwKKwlST1VUSU5HX0VOVFJZMSgzMiksIFJPVVRJTkdfRU5UUlkxKDMzKSwKKwlST1VUSU5HX0VOVFJZMSgzNCksIFJPVVRJTkdfRU5UUlkxKDM1KSwKKwlST1VUSU5HX0VOVFJZMSgzNiksIFJPVVRJTkdfRU5UUlkxKDM3KSwKKwlST1VUSU5HX0VOVFJZMSgzOCksIFJPVVRJTkdfRU5UUlkxKDM5KSwKKwlST1VUSU5HX0VOVFJZMSg0MCksIFJPVVRJTkdfRU5UUlkxKDQxKSwKKwlST1VUSU5HX0VOVFJZMSg0MiksIFJPVVRJTkdfRU5UUlkxKDQzKSwKKwlST1VUSU5HX0VOVFJZMSg0NCksIFJPVVRJTkdfRU5UUlkxKDQ1KSwKKwlST1VUSU5HX0VOVFJZMSg0NiksIFJPVVRJTkdfRU5UUlkxKDQ3KSwKKyNlbmRpZgorfTsKKworaW50IGt2bV9zZXR1cF9kZWZhdWx0X2lycV9yb3V0aW5nKHN0cnVjdCBrdm0gKmt2bSkKK3sKKwlyZXR1cm4ga3ZtX3NldF9pcnFfcm91dGluZyhrdm0sIGRlZmF1bHRfcm91dGluZywKKwkJCQkgICBBUlJBWV9TSVpFKGRlZmF1bHRfcm91dGluZyksIDApOworfQpkaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21haW4uYyBiL3ZpcnQva3ZtL2t2bV9tYWluLmMKaW5kZXggMjlhNjY3Yy4uNjA1Njk3ZSAxMDA2NDQKLS0tIGEvdmlydC9rdm0va3ZtX21haW4uYworKysgYi92aXJ0L2t2bS9rdm1fbWFpbi5jCkBAIC00NywxMCArNDcsNiBAQAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KIAotI2lmZGVmIENPTkZJR19YODYKLSNpbmNsdWRlIDxhc20vbXNpZGVmLmg+Ci0jZW5kaWYKLQogI2lmZGVmIEtWTV9DT0FMRVNDRURfTU1JT19QQUdFX09GRlNFVAogI2luY2x1ZGUgImNvYWxlc2NlZF9tbWlvLmgiCiAjZW5kaWYKQEAgLTg1LDU3ICs4MSw2IEBACiBzdGF0aWMgYm9vbCBrdm1fcmVib290aW5nOwogCiAjaWZkZWYgS1ZNX0NBUF9ERVZJQ0VfQVNTSUdOTUVOVAotCi0jaWZkZWYgQ09ORklHX1g4Ngotc3RhdGljIHZvaWQgYXNzaWduZWRfZGV2aWNlX21zaV9kaXNwYXRjaChzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX2Rldl9rZXJuZWwgKmRldikKLXsKLQlpbnQgdmNwdV9pZDsKLQlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7Ci0Jc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYyA9IGlvYXBpY19pcnFjaGlwKGRldi0+a3ZtKTsKLQlpbnQgZGVzdF9pZCA9IChkZXYtPmd1ZXN0X21zaS5hZGRyZXNzX2xvICYgTVNJX0FERFJfREVTVF9JRF9NQVNLKQotCQkJPj4gTVNJX0FERFJfREVTVF9JRF9TSElGVDsKLQlpbnQgdmVjdG9yID0gKGRldi0+Z3Vlc3RfbXNpLmRhdGEgJiBNU0lfREFUQV9WRUNUT1JfTUFTSykKLQkJCT4+IE1TSV9EQVRBX1ZFQ1RPUl9TSElGVDsKLQlpbnQgZGVzdF9tb2RlID0gdGVzdF9iaXQoTVNJX0FERFJfREVTVF9NT0RFX1NISUZULAotCQkJCSh1bnNpZ25lZCBsb25nICopJmRldi0+Z3Vlc3RfbXNpLmFkZHJlc3NfbG8pOwotCWludCB0cmlnX21vZGUgPSB0ZXN0X2JpdChNU0lfREFUQV9UUklHR0VSX1NISUZULAotCQkJCSh1bnNpZ25lZCBsb25nICopJmRldi0+Z3Vlc3RfbXNpLmRhdGEpOwotCWludCBkZWxpdmVyeV9tb2RlID0gdGVzdF9iaXQoTVNJX0RBVEFfREVMSVZFUllfTU9ERV9TSElGVCwKLQkJCQkodW5zaWduZWQgbG9uZyAqKSZkZXYtPmd1ZXN0X21zaS5kYXRhKTsKLQl1MzIgZGVsaXZlcl9iaXRtYXNrOwotCi0JQlVHX09OKCFpb2FwaWMpOwotCi0JZGVsaXZlcl9iaXRtYXNrID0ga3ZtX2lvYXBpY19nZXRfZGVsaXZlcnlfYml0bWFzayhpb2FwaWMsCi0JCQkJZGVzdF9pZCwgZGVzdF9tb2RlKTsKLQkvKiBJT0FQSUMgZGVsaXZlcnkgbW9kZSB2YWx1ZSBpcyB0aGUgc2FtZSBhcyBNU0kgaGVyZSAqLwotCXN3aXRjaCAoZGVsaXZlcnlfbW9kZSkgewotCWNhc2UgSU9BUElDX0xPV0VTVF9QUklPUklUWToKLQkJdmNwdSA9IGt2bV9nZXRfbG93ZXN0X3ByaW9fdmNwdShpb2FwaWMtPmt2bSwgdmVjdG9yLAotCQkJCWRlbGl2ZXJfYml0bWFzayk7Ci0JCWlmICh2Y3B1ICE9IE5VTEwpCi0JCQlrdm1fYXBpY19zZXRfaXJxKHZjcHUsIHZlY3RvciwgdHJpZ19tb2RlKTsKLQkJZWxzZQotCQkJcHJpbnRrKEtFUk5fSU5GTyAia3ZtOiBudWxsIGxvd2VzdCBwcmlvcml0eSB2Y3B1IVxuIik7Ci0JCWJyZWFrOwotCWNhc2UgSU9BUElDX0ZJWEVEOgotCQlmb3IgKHZjcHVfaWQgPSAwOyBkZWxpdmVyX2JpdG1hc2sgIT0gMDsgdmNwdV9pZCsrKSB7Ci0JCQlpZiAoIShkZWxpdmVyX2JpdG1hc2sgJiAoMSA8PCB2Y3B1X2lkKSkpCi0JCQkJY29udGludWU7Ci0JCQlkZWxpdmVyX2JpdG1hc2sgJj0gfigxIDw8IHZjcHVfaWQpOwotCQkJdmNwdSA9IGlvYXBpYy0+a3ZtLT52Y3B1c1t2Y3B1X2lkXTsKLQkJCWlmICh2Y3B1KQotCQkJCWt2bV9hcGljX3NldF9pcnEodmNwdSwgdmVjdG9yLCB0cmlnX21vZGUpOwotCQl9Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0lORk8gImt2bTogdW5zdXBwb3J0ZWQgTVNJIGRlbGl2ZXJ5IG1vZGVcbiIpOwotCX0KLX0KLSNlbHNlCi1zdGF0aWMgdm9pZCBhc3NpZ25lZF9kZXZpY2VfbXNpX2Rpc3BhdGNoKHN0cnVjdCBrdm1fYXNzaWduZWRfZGV2X2tlcm5lbCAqZGV2KSB7fQotI2VuZGlmCi0KIHN0YXRpYyBzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX2Rldl9rZXJuZWwgKmt2bV9maW5kX2Fzc2lnbmVkX2RldihzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLAogCQkJCQkJICAgICAgaW50IGFzc2lnbmVkX2Rldl9pZCkKIHsKQEAgLTE2MiwxMyArMTA3LDEwIEBACiAJICogZmluZXItZ3JhaW5lZCBsb2NrLCB1cGRhdGUgdGhpcwogCSAqLwogCW11dGV4X2xvY2soJmFzc2lnbmVkX2Rldi0+a3ZtLT5sb2NrKTsKLQlpZiAoYXNzaWduZWRfZGV2LT5pcnFfcmVxdWVzdGVkX3R5cGUgJiBLVk1fQVNTSUdORURfREVWX0dVRVNUX0lOVFgpCi0JCWt2bV9zZXRfaXJxKGFzc2lnbmVkX2Rldi0+a3ZtLAotCQkJICAgIGFzc2lnbmVkX2Rldi0+aXJxX3NvdXJjZV9pZCwKLQkJCSAgICBhc3NpZ25lZF9kZXYtPmd1ZXN0X2lycSwgMSk7Ci0JZWxzZSBpZiAoYXNzaWduZWRfZGV2LT5pcnFfcmVxdWVzdGVkX3R5cGUgJgotCQkJCUtWTV9BU1NJR05FRF9ERVZfR1VFU1RfTVNJKSB7Ci0JCWFzc2lnbmVkX2RldmljZV9tc2lfZGlzcGF0Y2goYXNzaWduZWRfZGV2KTsKKwlrdm1fc2V0X2lycShhc3NpZ25lZF9kZXYtPmt2bSwgYXNzaWduZWRfZGV2LT5pcnFfc291cmNlX2lkLAorCQkgICAgYXNzaWduZWRfZGV2LT5ndWVzdF9pcnEsIDEpOworCisJaWYgKGFzc2lnbmVkX2Rldi0+aXJxX3JlcXVlc3RlZF90eXBlICYgS1ZNX0FTU0lHTkVEX0RFVl9HVUVTVF9NU0kpIHsKIAkJZW5hYmxlX2lycShhc3NpZ25lZF9kZXYtPmhvc3RfaXJxKTsKIAkJYXNzaWduZWRfZGV2LT5ob3N0X2lycV9kaXNhYmxlZCA9IGZhbHNlOwogCX0KQEAgLTMzMSwxOCArMjczLDI0IEBACiB7CiAJaW50IHI7CiAKKwlhZGV2LT5ndWVzdF9pcnEgPSBhaXJxLT5ndWVzdF9pcnE7CiAJaWYgKGFpcnEtPmZsYWdzICYgS1ZNX0RFVl9JUlFfQVNTSUdOX0VOQUJMRV9NU0kpIHsKIAkJLyogeDg2IGRvbid0IGNhcmUgdXBwZXIgYWRkcmVzcyBvZiBndWVzdCBtc2kgbWVzc2FnZSBhZGRyICovCiAJCWFkZXYtPmlycV9yZXF1ZXN0ZWRfdHlwZSB8PSBLVk1fQVNTSUdORURfREVWX0dVRVNUX01TSTsKIAkJYWRldi0+aXJxX3JlcXVlc3RlZF90eXBlICY9IH5LVk1fQVNTSUdORURfREVWX0dVRVNUX0lOVFg7Ci0JCWFkZXYtPmd1ZXN0X21zaS5hZGRyZXNzX2xvID0gYWlycS0+Z3Vlc3RfbXNpLmFkZHJfbG87Ci0JCWFkZXYtPmd1ZXN0X21zaS5kYXRhID0gYWlycS0+Z3Vlc3RfbXNpLmRhdGE7CiAJCWFkZXYtPmFja19ub3RpZmllci5nc2kgPSAtMTsKIAl9IGVsc2UgaWYgKG1zaTJpbnR4KSB7CiAJCWFkZXYtPmlycV9yZXF1ZXN0ZWRfdHlwZSB8PSBLVk1fQVNTSUdORURfREVWX0dVRVNUX0lOVFg7CiAJCWFkZXYtPmlycV9yZXF1ZXN0ZWRfdHlwZSAmPSB+S1ZNX0FTU0lHTkVEX0RFVl9HVUVTVF9NU0k7Ci0JCWFkZXYtPmd1ZXN0X2lycSA9IGFpcnEtPmd1ZXN0X2lycTsKIAkJYWRldi0+YWNrX25vdGlmaWVyLmdzaSA9IGFpcnEtPmd1ZXN0X2lycTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBHdWVzdCByZXF1aXJlIHRvIGRpc2FibGUgZGV2aWNlIE1TSSwgd2UgZGlzYWJsZSBNU0kgYW5kCisJCSAqIHJlLWVuYWJsZSBJTlR4IGJ5IGRlZmF1bHQgYWdhaW4uIE5vdGljZSBpdCdzIG9ubHkgZm9yCisJCSAqIG5vbi1tc2kyaW50eC4KKwkJICovCisJCWFzc2lnbmVkX2RldmljZV91cGRhdGVfaW50eChrdm0sIGFkZXYsIGFpcnEpOworCQlyZXR1cm4gMDsKIAl9CiAKIAlpZiAoYWRldi0+aXJxX3JlcXVlc3RlZF90eXBlICYgS1ZNX0FTU0lHTkVEX0RFVl9IT1NUX01TSSkKQEAgLTM3OSw2ICszMjcsNyBAQAogewogCWludCByID0gMDsKIAlzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX2Rldl9rZXJuZWwgKm1hdGNoOworCXUzMiBjdXJyZW50X2ZsYWdzID0gMCwgY2hhbmdlZF9mbGFnczsKIAogCW11dGV4X2xvY2soJmt2bS0+bG9jayk7CiAKQEAgLTQxNiw4ICszNjUsMTMgQEAKIAkJfQogCX0KIAotCWlmICgoIW1zaTJpbnR4ICYmCi0JICAgICAoYXNzaWduZWRfaXJxLT5mbGFncyAmIEtWTV9ERVZfSVJRX0FTU0lHTl9FTkFCTEVfTVNJKSkgfHwKKwlpZiAoKG1hdGNoLT5pcnFfcmVxdWVzdGVkX3R5cGUgJiBLVk1fQVNTSUdORURfREVWX0hPU1RfTVNJKSAmJgorCQkgKG1hdGNoLT5pcnFfcmVxdWVzdGVkX3R5cGUgJiBLVk1fQVNTSUdORURfREVWX0dVRVNUX01TSSkpCisJCWN1cnJlbnRfZmxhZ3MgfD0gS1ZNX0RFVl9JUlFfQVNTSUdOX0VOQUJMRV9NU0k7CisKKwljaGFuZ2VkX2ZsYWdzID0gYXNzaWduZWRfaXJxLT5mbGFncyBeIGN1cnJlbnRfZmxhZ3M7CisKKwlpZiAoKGNoYW5nZWRfZmxhZ3MgJiBLVk1fREVWX0lSUV9BU1NJR05fTVNJX0FDVElPTikgfHwKIAkgICAgKG1zaTJpbnR4ICYmIG1hdGNoLT5kZXYtPm1zaV9lbmFibGVkKSkgewogI2lmZGVmIENPTkZJR19YODYKIAkJciA9IGFzc2lnbmVkX2RldmljZV91cGRhdGVfbXNpKGt2bSwgbWF0Y2gsIGFzc2lnbmVkX2lycSk7CkBAIC01NjMsNyArNTE3LDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYgKGFzc2lnbmVkX2Rldi0+ZmxhZ3MgJiBLVk1fREVWX0FTU0lHTl9FTkFCTEVfSU9NTVUpCisJaWYgKG1hdGNoLT5mbGFncyAmIEtWTV9ERVZfQVNTSUdOX0VOQUJMRV9JT01NVSkKIAkJa3ZtX2RlYXNzaWduX2RldmljZShrdm0sIG1hdGNoKTsKIAogCWt2bV9mcmVlX2Fzc2lnbmVkX2RldmljZShrdm0sIG1hdGNoKTsKQEAgLTU4MSw4ICs1MzUsMTAgQEAKIAogaW5saW5lIGludCBrdm1faXNfbW1pb19wZm4ocGZuX3QgcGZuKQogewotCWlmIChwZm5fdmFsaWQocGZuKSkKLQkJcmV0dXJuIFBhZ2VSZXNlcnZlZChwZm5fdG9fcGFnZShwZm4pKTsKKwlpZiAocGZuX3ZhbGlkKHBmbikpIHsKKwkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBjb21wb3VuZF9oZWFkKHBmbl90b19wYWdlKHBmbikpOworCQlyZXR1cm4gUGFnZVJlc2VydmVkKHBhZ2UpOworCX0KIAogCXJldHVybiB0cnVlOwogfQpAQCAtODI4LDYgKzc4NCwxMCBAQAogCiAJaWYgKElTX0VSUihrdm0pKQogCQlnb3RvIG91dDsKKyNpZmRlZiBDT05GSUdfSEFWRV9LVk1fSVJRQ0hJUAorCUlOSVRfTElTVF9IRUFEKCZrdm0tPmlycV9yb3V0aW5nKTsKKwlJTklUX0hMSVNUX0hFQUQoJmt2bS0+bWFza19ub3RpZmllcl9saXN0KTsKKyNlbmRpZgogCiAjaWZkZWYgS1ZNX0NPQUxFU0NFRF9NTUlPX1BBR0VfT0ZGU0VUCiAJcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pOwpAQCAtOTA5LDYgKzg2OSw3IEBACiAJc3Bpbl9sb2NrKCZrdm1fbG9jayk7CiAJbGlzdF9kZWwoJmt2bS0+dm1fbGlzdCk7CiAJc3Bpbl91bmxvY2soJmt2bV9sb2NrKTsKKwlrdm1fZnJlZV9pcnFfcm91dGluZyhrdm0pOwogCWt2bV9pb19idXNfZGVzdHJveSgma3ZtLT5waW9fYnVzKTsKIAlrdm1faW9fYnVzX2Rlc3Ryb3koJmt2bS0+bW1pb19idXMpOwogI2lmZGVmIEtWTV9DT0FMRVNDRURfTU1JT19QQUdFX09GRlNFVApAQCAtMTc1NSwxMyArMTcxNiwxMyBAQAogCQlyID0gMDsKIAkJYnJlYWs7CiAJfQotCWNhc2UgS1ZNX0RFQlVHX0dVRVNUOiB7Ci0JCXN0cnVjdCBrdm1fZGVidWdfZ3Vlc3QgZGJnOworCWNhc2UgS1ZNX1NFVF9HVUVTVF9ERUJVRzogeworCQlzdHJ1Y3Qga3ZtX2d1ZXN0X2RlYnVnIGRiZzsKIAogCQlyID0gLUVGQVVMVDsKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZkYmcsIGFyZ3AsIHNpemVvZiBkYmcpKQogCQkJZ290byBvdXQ7Ci0JCXIgPSBrdm1fYXJjaF92Y3B1X2lvY3RsX2RlYnVnX2d1ZXN0KHZjcHUsICZkYmcpOworCQlyID0ga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfZ3Vlc3RfZGVidWcodmNwdSwgJmRiZyk7CiAJCWlmIChyKQogCQkJZ290byBvdXQ7CiAJCXIgPSAwOwpAQCAtMTkyOSw2ICsxODkwLDM2IEBACiAJCWJyZWFrOwogCX0KICNlbmRpZgorI2lmZGVmIEtWTV9DQVBfSVJRX1JPVVRJTkcKKwljYXNlIEtWTV9TRVRfR1NJX1JPVVRJTkc6IHsKKwkJc3RydWN0IGt2bV9pcnFfcm91dGluZyByb3V0aW5nOworCQlzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nIF9fdXNlciAqdXJvdXRpbmc7CisJCXN0cnVjdCBrdm1faXJxX3JvdXRpbmdfZW50cnkgKmVudHJpZXM7CisKKwkJciA9IC1FRkFVTFQ7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmcm91dGluZywgYXJncCwgc2l6ZW9mKHJvdXRpbmcpKSkKKwkJCWdvdG8gb3V0OworCQlyID0gLUVJTlZBTDsKKwkJaWYgKHJvdXRpbmcubnIgPj0gS1ZNX01BWF9JUlFfUk9VVEVTKQorCQkJZ290byBvdXQ7CisJCWlmIChyb3V0aW5nLmZsYWdzKQorCQkJZ290byBvdXQ7CisJCXIgPSAtRU5PTUVNOworCQllbnRyaWVzID0gdm1hbGxvYyhyb3V0aW5nLm5yICogc2l6ZW9mKCplbnRyaWVzKSk7CisJCWlmICghZW50cmllcykKKwkJCWdvdG8gb3V0OworCQlyID0gLUVGQVVMVDsKKwkJdXJvdXRpbmcgPSBhcmdwOworCQlpZiAoY29weV9mcm9tX3VzZXIoZW50cmllcywgdXJvdXRpbmctPmVudHJpZXMsCisJCQkJICAgcm91dGluZy5uciAqIHNpemVvZigqZW50cmllcykpKQorCQkJZ290byBvdXRfZnJlZV9pcnFfcm91dGluZzsKKwkJciA9IGt2bV9zZXRfaXJxX3JvdXRpbmcoa3ZtLCBlbnRyaWVzLCByb3V0aW5nLm5yLAorCQkJCQlyb3V0aW5nLmZsYWdzKTsKKwlvdXRfZnJlZV9pcnFfcm91dGluZzoKKwkJdmZyZWUoZW50cmllcyk7CisJCWJyZWFrOworCX0KKyNlbmRpZgogCWRlZmF1bHQ6CiAJCXIgPSBrdm1fYXJjaF92bV9pb2N0bChmaWxwLCBpb2N0bCwgYXJnKTsKIAl9CkBAIC0xOTk1LDYgKzE5ODYsMTAgQEAKIAljYXNlIEtWTV9DQVBfVVNFUl9NRU1PUlk6CiAJY2FzZSBLVk1fQ0FQX0RFU1RST1lfTUVNT1JZX1JFR0lPTl9XT1JLUzoKIAkJcmV0dXJuIDE7CisjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0lSUUNISVAKKwljYXNlIEtWTV9DQVBfSVJRX1JPVVRJTkc6CisJCXJldHVybiBLVk1fTUFYX0lSUV9ST1VURVM7CisjZW5kaWYKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9Cg==